@sockethub/client 5.0.0-alpha.9 → 5.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,19 +1,32 @@
1
- var y=Object.create;var{getPrototypeOf:k,defineProperty:h,getOwnPropertyNames:p}=Object;var j=Object.prototype.hasOwnProperty;var b=(z,B,D)=>{D=z!=null?y(k(z)):{};let G=B||!z||!z.__esModule?h(D,"default",{value:z,enumerable:!0}):D;for(let W of p(z))if(!j.call(G,W))h(G,W,{get:()=>z[W],enumerable:!0});return G};var l=(z,B)=>()=>(B||z((B={exports:{}}).exports,B),B.exports);var u=l((n,A)=>{var v=Object.prototype.hasOwnProperty,Z="~";function I(){}if(Object.create){if(I.prototype=Object.create(null),!new I().__proto__)Z=!1}function m(z,B,D){this.fn=z,this.context=B,this.once=D||!1}function P(z,B,D,G,W){if(typeof D!=="function")throw TypeError("The listener must be a function");var R=new m(D,G||z,W),Q=Z?Z+B:B;if(!z._events[Q])z._events[Q]=R,z._eventsCount++;else if(!z._events[Q].fn)z._events[Q].push(R);else z._events[Q]=[z._events[Q],R];return z}function L(z,B){if(--z._eventsCount===0)z._events=new I;else delete z._events[B]}function Y(){this._events=new I,this._eventsCount=0}Y.prototype.eventNames=function(){var B=[],D,G;if(this._eventsCount===0)return B;for(G in D=this._events)if(v.call(D,G))B.push(Z?G.slice(1):G);if(Object.getOwnPropertySymbols)return B.concat(Object.getOwnPropertySymbols(D));return B};Y.prototype.listeners=function(B){var D=Z?Z+B:B,G=this._events[D];if(!G)return[];if(G.fn)return[G.fn];for(var W=0,R=G.length,Q=Array(R);W<R;W++)Q[W]=G[W].fn;return Q};Y.prototype.listenerCount=function(B){var D=Z?Z+B:B,G=this._events[D];if(!G)return 0;if(G.fn)return 1;return G.length};Y.prototype.emit=function(B,D,G,W,R,Q){var $=Z?Z+B:B;if(!this._events[$])return!1;var J=this._events[$],K=arguments.length,T,X;if(J.fn){if(J.once)this.removeListener(B,J.fn,void 0,!0);switch(K){case 1:return J.fn.call(J.context),!0;case 2:return J.fn.call(J.context,D),!0;case 3:return J.fn.call(J.context,D,G),!0;case 4:return J.fn.call(J.context,D,G,W),!0;case 5:return J.fn.call(J.context,D,G,W,R),!0;case 6:return J.fn.call(J.context,D,G,W,R,Q),!0}for(X=1,T=Array(K-1);X<K;X++)T[X-1]=arguments[X];J.fn.apply(J.context,T)}else{var E=J.length,F;for(X=0;X<E;X++){if(J[X].once)this.removeListener(B,J[X].fn,void 0,!0);switch(K){case 1:J[X].fn.call(J[X].context);break;case 2:J[X].fn.call(J[X].context,D);break;case 3:J[X].fn.call(J[X].context,D,G);break;case 4:J[X].fn.call(J[X].context,D,G,W);break;default:if(!T)for(F=1,T=Array(K-1);F<K;F++)T[F-1]=arguments[F];J[X].fn.apply(J[X].context,T)}}}return!0};Y.prototype.on=function(B,D,G){return P(this,B,D,G,!1)};Y.prototype.once=function(B,D,G){return P(this,B,D,G,!0)};Y.prototype.removeListener=function(B,D,G,W){var R=Z?Z+B:B;if(!this._events[R])return this;if(!D)return L(this,R),this;var Q=this._events[R];if(Q.fn){if(Q.fn===D&&(!W||Q.once)&&(!G||Q.context===G))L(this,R)}else{for(var $=0,J=[],K=Q.length;$<K;$++)if(Q[$].fn!==D||W&&!Q[$].once||G&&Q[$].context!==G)J.push(Q[$]);if(J.length)this._events[R]=J.length===1?J[0]:J;else L(this,R)}return this};Y.prototype.removeAllListeners=function(B){var D;if(B){if(D=Z?Z+B:B,this._events[D])L(this,D)}else this._events=new I,this._eventsCount=0;return this};Y.prototype.off=Y.prototype.removeListener;Y.prototype.addListener=Y.prototype.on;Y.prefixed=Z;Y.EventEmitter=Y;if(typeof A<"u")A.exports=Y});var f=b(u(),1);var M=f.default;/*!
2
- * activity-streams
3
- * https://github.com/silverbucket/activity-streams
4
- *
5
- * Developed and Maintained by:
6
- * Nick Jennings <nick@silverbucket.net>
7
- *
8
- * activity-streams is released under the MIT (see LICENSE).
9
- *
10
- * You don't have to do anything special to choose one license or the other
11
- * and you don't have to notify anyone which license you are using.
12
- * Please see the corresponding license file for details of these licenses.
13
- * You are free to use, modify and distribute this software, but all copyright
14
- * information must remain.
15
- *
16
- */var q=new M,V={stream:["id","type","actor","target","object","context","context","published","error"],object:["id","type","context","alias","attachedTo","attachment","attributedTo","attributedWith","condition","content","contentMap","context","contextOf","name","endTime","generator","generatorOf","group","icon","image","inReplyTo","members","memberOf","message","location","locationOf","objectOf","originOf","presence","preview","previewOf","provider","providerOf","published","rating","relationship","resultOf","replies","role","scope","scopeOf","startTime","status","summary","topic","tag","tagOf","targetOf","title","titleMap","updated","url","xmpp:stanza-id"]},O={"@id":"id","@type":"type",verb:"type",displayName:"name",objectType:"type",platform:"context"},x={actor:{primary:"id",props:V},target:{primary:"id",props:V},object:{primary:"content",props:V}},_=new Map,C={},N=!1,U=!0,d=[];function c(z,B){if(C[z]instanceof Object){if(C[z].includes(B))return!0}return!1}function a(z,B){return z[O[B]]=z[B],delete z[B],z}function S(z,B,D=!1){if(B===null)throw Error(`ActivityStreams validation failed: the "${z}" property is null. Example: { id: "user@example.com", type: "person" }`);if(B===void 0)throw Error(`ActivityStreams validation failed: the "${z}" property is undefined. Example: { id: "user@example.com", type: "person" }`);if(typeof B==="string")throw Error(`ActivityStreams validation failed: the "${z}" property received string "${B}" but expected an object. Use: { id: "${B}", type: "person" }`);if(typeof B!=="object"||Array.isArray(B)){let R=Array.isArray(B)?"array":typeof B,Q=String(B);throw Error(`ActivityStreams validation failed: the "${z}" property must be an object, received ${R} (${Q}). Example: { id: "user@example.com", type: "person" }`)}if(D&&!B.id)throw Error(`ActivityStreams validation failed: the "${z}" property requires an 'id' property. Example: { id: "user@example.com", type: "person" }`);let W=Object.keys(B).filter((R)=>{return!V[z].includes(R)});for(let R of W){let Q=B;if(O[R]){Q=a(Q,R);continue}if(c(Q.type,R))continue;if(!d.includes(Q.type)){console.log(Q);let $=typeof Q[R]==="string"?`"${Q[R]}"`:String(Q[R]),J=`ActivityStreams validation failed: property "${R}" with value ${$} is not allowed on the "${z}" object of type "${Q.type}".`;if(N)throw Error(J);if(U)console.warn(J)}}}function g(z){return z}function r(z){let B={};for(let D of Object.keys(z))if(typeof z[D]==="string")B[D]=_.get(z[D])||z[D];else if(Array.isArray(z[D])){B[D]=[];for(let G of z[D])if(typeof G==="string")B[D].push(_.get(G)||G)}else B[D]=z[D];for(let D of Object.keys(x))if(typeof B[D]==="string"){let G=x[D].primary,W={};W[G]=B[D],B[D]=W}return B}function s(z){if(S("stream",z),typeof z.object==="object")S("object",z.object);let B=r(z);return q.emit("activity-stream",B),B}var o={create:(z)=>{S("object",z,!0);let B=g(z);return _.set(B.id,B),q.emit("activity-object-create",B),B},delete:(z)=>{let B=_.delete(z);if(B)q.emit("activity-object-delete",z);return B},get:(z,B)=>{let D=_.get(z);if(!D){if(!B)return z;D={id:z}}return g(D)},list:()=>_.keys()};function w(z={}){d=z?.specialObjs||[],N=typeof z.failOnUnknownObjectProperties==="boolean"?z.failOnUnknownObjectProperties:N,U=typeof z.warnOnUnknownObjectProperties==="boolean"?z.warnOnUnknownObjectProperties:U;for(let B of Object.keys(z.customProps||{}))if(typeof z.customProps[B]==="object")C[B]=z.customProps[B];return{Stream:s,Object:o,on:(B,D)=>q.on(B,D),once:(B,D)=>q.once(B,D),off:(B,D)=>q.off(B,D)}}((z)=>{z.ASFactor=w})(typeof window==="object"?window:{});class H{events={credentials:new Map,"activity-object":new Map,connect:new Map,join:new Map};_socket;ActivityStreams;socket;debug=!0;constructor(z){if(!z)throw Error("SockethubClient requires a socket.io instance");this._socket=z,this.socket=this.createPublicEmitter(),this.registerSocketIOHandlers(),this.initActivityStreams(),this.ActivityStreams.on("activity-object-create",(B)=>{z.emit("activity-object",B,(D)=>{if(D)console.error("failed to create activity-object ",D);else this.eventActivityObject(B)})}),z.on("activity-object",(B)=>{this.ActivityStreams.Object.create(B)})}initActivityStreams(){this.ActivityStreams=w({specialObjs:["credentials"]})}clearCredentials(){this.events.credentials.clear()}createPublicEmitter(){let z=new M;return z._emit=z.emit,z.emit=(B,D,G)=>{if(B==="credentials")this.eventCredentials(D);else if(B==="activity-object")this.eventActivityObject(D);else if(B==="message")this.eventMessage(D);this._socket.emit(B,D,G)},z.connected=!1,z.disconnect=()=>{this._socket.disconnect()},z.connect=()=>{this._socket.connect()},z}eventActivityObject(z){if(z.id)this.events["activity-object"].set(z.id,z)}eventCredentials(z){if(z.object&&z.object.type==="credentials"){let B=z.actor.id||z.actor;this.events.credentials.set(B,z)}}eventMessage(z){if(!this._socket.connected)return;let B=H.getKey(z);if(z.type==="join"||z.type==="connect")this.events[z.type].set(B,z);else if(z.type==="leave")this.events.join.delete(B);else if(z.type==="disconnect")this.events.connect.delete(B)}static getKey(z){let B=z.actor?.id||z.actor;if(!B)throw Error(`actor property not present for message type: ${z?.type}`);let D=z.target?z.target.id||z.target:"";return`${B}-${D}`}log(z,B){if(this.debug)console.log(z,B)}registerSocketIOHandlers(){let z=(B)=>{return async(D)=>{if(B==="connect")this.socket.id=this._socket.id,this.socket.connected=!0,this.replay("activity-object",this.events["activity-object"]),this.replay("credentials",this.events.credentials),this.replay("message",this.events.connect),this.replay("message",this.events.join);else if(B==="disconnect")this.socket.connected=!1;this.socket._emit(B,D)}};this._socket.on("connect",z("connect")),this._socket.on("connect_error",z("connect_error")),this._socket.on("disconnect",z("disconnect")),this._socket.on("message",(B)=>{this.socket._emit("message",this.ActivityStreams.Stream(B))})}hasActorId(z){return"actor"in z&&z.actor!==null&&typeof z.actor==="object"&&"id"in z.actor&&typeof z.actor.id==="string"}replay(z,B){for(let D of B.values()){let G=this.ActivityStreams.Stream(D),W=G?.id;if(this.hasActorId(G))W=G.actor.id;this.log(`replaying ${z} for ${W}`),this._socket.emit(z,G)}}}((z)=>{z.SockethubClient=H})(typeof window==="object"?window:{});export{H as default};
1
+ (()=>{var g$=Object.create;var{getPrototypeOf:v$,defineProperty:Jn,getOwnPropertyNames:ad,getOwnPropertyDescriptor:$$}=Object,Oa=Object.prototype.hasOwnProperty;function cd(e){return this[e]}var _$,w$,Wn=(e,t,r)=>{var s=e!=null&&typeof e==="object";if(s){var n=t?_$??=new WeakMap:w$??=new WeakMap,i=n.get(e);if(i)return i}r=e!=null?g$(v$(e)):{};let o=t||!e||!e.__esModule||!Oa.call(e,"default")?Jn(r,"default",{value:e,enumerable:!0}):r;if(e&&typeof e==="object"||typeof e==="function"){for(let a of ad(e))if(!Oa.call(o,a))Jn(o,a,{get:cd.bind(e,a),enumerable:!0})}if(s)n.set(e,o);return o},ud=(e)=>{var t=(od??=new WeakMap).get(e),r;if(t)return t;if(t=Jn({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function"){for(var s of ad(e))if(!Oa.call(t,s))Jn(t,s,{get:cd.bind(e,s),enumerable:!(r=$$(e,s))||r.enumerable})}return od.set(e,t),t},od,b=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var b$=(e)=>e;function S$(e,t){this[e]=b$.bind(null,t)}var P$=(e,t)=>{for(var r in t)Jn(e,r,{get:t[r],enumerable:!0,configurable:!0,set:S$.bind(t,r)})};var E$=(e,t,r)=>()=>{if(e)try{t=e(e=0)}catch(s){r=[s]}if(r)throw r[0];return t};var Xn=b(function(ce){Object.defineProperty(ce,"__esModule",{value:!0});ce.regexpCode=ce.getEsmExportName=ce.getProperty=ce.safeStringify=ce.stringify=ce.strConcat=ce.addCodeArg=ce.str=ce._=ce.nil=ce._Code=ce.Name=ce.IDENTIFIER=ce._CodeOrName=void 0;class qi{}ce._CodeOrName=qi;ce.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class Ls extends qi{constructor(e){super();if(!ce.IDENTIFIER.test(e))throw Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}ce.Name=Ls;class Dt extends qi{constructor(e){super();this._items=typeof e==="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((t,r)=>`${t}${r}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((t,r)=>{if(r instanceof Ls)t[r.str]=(t[r.str]||0)+1;return t},{})}}ce._Code=Dt;ce.nil=new Dt("");function vd(e,...t){let r=[e[0]],s=0;while(s<t.length)La(r,t[s]),r.push(e[++s]);return new Dt(r)}ce._=vd;var Fa=new Dt("+");function $d(e,...t){let r=[Bn(e[0])],s=0;while(s<t.length)r.push(Fa),La(r,t[s]),r.push(Fa,Bn(e[++s]));return x$(r),new Dt(r)}ce.str=$d;function La(e,t){if(t instanceof Dt)e.push(...t._items);else if(t instanceof Ls)e.push(t);else e.push(N$(t))}ce.addCodeArg=La;function x$(e){let t=1;while(t<e.length-1){if(e[t]===Fa){let r=j$(e[t-1],e[t+1]);if(r!==void 0){e.splice(t-1,3,r);continue}e[t++]="+"}t++}}function j$(e,t){if(t==='""')return e;if(e==='""')return t;if(typeof e=="string"){if(t instanceof Ls||e[e.length-1]!=='"')return;if(typeof t!="string")return`${e.slice(0,-1)}${t}"`;if(t[0]==='"')return e.slice(0,-1)+t.slice(1);return}if(typeof t=="string"&&t[0]==='"'&&!(e instanceof Ls))return`"${e}${t.slice(1)}`;return}function C$(e,t){return t.emptyStr()?e:e.emptyStr()?t:$d`${e}${t}`}ce.strConcat=C$;function N$(e){return typeof e=="number"||typeof e=="boolean"||e===null?e:Bn(Array.isArray(e)?e.join(","):e)}function q$(e){return new Dt(Bn(e))}ce.stringify=q$;function Bn(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}ce.safeStringify=Bn;function D$(e){return typeof e=="string"&&ce.IDENTIFIER.test(e)?new Dt(`.${e}`):vd`[${e}]`}ce.getProperty=D$;function M$(e){if(typeof e=="string"&&ce.IDENTIFIER.test(e))return new Dt(`${e}`);throw Error(`CodeGen: invalid export name: ${e}, use explicit $id name mapping`)}ce.getEsmExportName=M$;function V$(e){return new Dt(e.toString())}ce.regexpCode=V$});var Ga=b(function(dt){Object.defineProperty(dt,"__esModule",{value:!0});dt.ValueScope=dt.ValueScopeName=dt.Scope=dt.varKinds=dt.UsedValueState=void 0;var $e=Xn();class _d extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`);this.value=e.value}}var Di;(function(e){e[e.Started=0]="Started",e[e.Completed=1]="Completed"})(Di||(dt.UsedValueState=Di={}));dt.varKinds={const:new $e.Name("const"),let:new $e.Name("let"),var:new $e.Name("var")};class Ha{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof $e.Name?e:this.name(e)}name(e){return new $e.Name(this._newName(e))}_newName(e){let t=this._names[e]||this._nameGroup(e);return`${e}${t.index++}`}_nameGroup(e){var t,r;if(((r=(t=this._parent)===null||t===void 0?void 0:t._prefixes)===null||r===void 0?void 0:r.has(e))||this._prefixes&&!this._prefixes.has(e))throw Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}}dt.Scope=Ha;class Ka extends $e.Name{constructor(e,t){super(t);this.prefix=e}setValue(e,{property:t,itemIndex:r}){this.value=e,this.scopePath=$e._`.${new $e.Name(t)}[${r}]`}}dt.ValueScopeName=Ka;var U$=$e._`\n`;class wd extends Ha{constructor(e){super(e);this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?U$:$e.nil}}get(){return this._scope}name(e){return new Ka(e,this._newName(e))}value(e,t){var r;if(t.ref===void 0)throw Error("CodeGen: ref must be passed in value");let s=this.toName(e),{prefix:n}=s,i=(r=t.key)!==null&&r!==void 0?r:t.ref,o=this._values[n];if(o){let u=o.get(i);if(u)return u}else o=this._values[n]=new Map;o.set(i,s);let a=this._scope[n]||(this._scope[n]=[]),c=a.length;return a[c]=t.ref,s.setValue(t,{property:n,itemIndex:c}),s}getValue(e,t){let r=this._values[e];if(!r)return;return r.get(t)}scopeRefs(e,t=this._values){return this._reduceValues(t,(r)=>{if(r.scopePath===void 0)throw Error(`CodeGen: name "${r}" has no value`);return $e._`${e}${r.scopePath}`})}scopeCode(e=this._values,t,r){return this._reduceValues(e,(s)=>{if(s.value===void 0)throw Error(`CodeGen: name "${s}" has no value`);return s.value.code},t,r)}_reduceValues(e,t,r={},s){let n=$e.nil;for(let i in e){let o=e[i];if(!o)continue;let a=r[i]=r[i]||new Map;o.forEach((c)=>{if(a.has(c))return;a.set(c,Di.Started);let u=t(c);if(u){let l=this.opts.es5?dt.varKinds.var:dt.varKinds.const;n=$e._`${n}${l} ${c} = ${u};${this.opts._n}`}else if(u=s===null||s===void 0?void 0:s(c))n=$e._`${n}${u}${this.opts._n}`;else throw new _d(c);a.set(c,Di.Completed)})}return n}}dt.ValueScope=wd});var ee=b(function(B){Object.defineProperty(B,"__esModule",{value:!0});B.or=B.and=B.not=B.CodeGen=B.operators=B.varKinds=B.ValueScopeName=B.ValueScope=B.Scope=B.Name=B.regexpCode=B.stringify=B.getProperty=B.nil=B.strConcat=B.str=B._=void 0;var x=Xn(),Ce=Ga(),Tr=Xn();Object.defineProperty(B,"_",{enumerable:!0,get:function(){return Tr._}});Object.defineProperty(B,"str",{enumerable:!0,get:function(){return Tr.str}});Object.defineProperty(B,"strConcat",{enumerable:!0,get:function(){return Tr.strConcat}});Object.defineProperty(B,"nil",{enumerable:!0,get:function(){return Tr.nil}});Object.defineProperty(B,"getProperty",{enumerable:!0,get:function(){return Tr.getProperty}});Object.defineProperty(B,"stringify",{enumerable:!0,get:function(){return Tr.stringify}});Object.defineProperty(B,"regexpCode",{enumerable:!0,get:function(){return Tr.regexpCode}});Object.defineProperty(B,"Name",{enumerable:!0,get:function(){return Tr.Name}});var Li=Ga();Object.defineProperty(B,"Scope",{enumerable:!0,get:function(){return Li.Scope}});Object.defineProperty(B,"ValueScope",{enumerable:!0,get:function(){return Li.ValueScope}});Object.defineProperty(B,"ValueScopeName",{enumerable:!0,get:function(){return Li.ValueScopeName}});Object.defineProperty(B,"varKinds",{enumerable:!0,get:function(){return Li.varKinds}});B.operators={GT:new x._Code(">"),GTE:new x._Code(">="),LT:new x._Code("<"),LTE:new x._Code("<="),EQ:new x._Code("==="),NEQ:new x._Code("!=="),NOT:new x._Code("!"),OR:new x._Code("||"),AND:new x._Code("&&"),ADD:new x._Code("+")};class Ar{optimizeNodes(){return this}optimizeNames(e,t){return this}}class bd extends Ar{constructor(e,t,r){super();this.varKind=e,this.name=t,this.rhs=r}render({es5:e,_n:t}){let r=e?Ce.varKinds.var:this.varKind,s=this.rhs===void 0?"":` = ${this.rhs}`;return`${r} ${this.name}${s};`+t}optimizeNames(e,t){if(!e[this.name.str])return;if(this.rhs)this.rhs=Ks(this.rhs,e,t);return this}get names(){return this.rhs instanceof x._CodeOrName?this.rhs.names:{}}}class Qa extends Ar{constructor(e,t,r){super();this.lhs=e,this.rhs=t,this.sideEffects=r}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,t){if(this.lhs instanceof x.Name&&!e[this.lhs.str]&&!this.sideEffects)return;return this.rhs=Ks(this.rhs,e,t),this}get names(){let e=this.lhs instanceof x.Name?{}:{...this.lhs.names};return Fi(e,this.rhs)}}class Sd extends Qa{constructor(e,t,r,s){super(e,r,s);this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}}class Pd extends Ar{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}}class Ed extends Ar{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}}class kd extends Ar{constructor(e){super();this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}}class Rd extends Ar{constructor(e){super();this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,t){return this.code=Ks(this.code,e,t),this}get names(){return this.code instanceof x._CodeOrName?this.code.names:{}}}class Hi extends Ar{constructor(e=[]){super();this.nodes=e}render(e){return this.nodes.reduce((t,r)=>t+r.render(e),"")}optimizeNodes(){let{nodes:e}=this,t=e.length;while(t--){let r=e[t].optimizeNodes();if(Array.isArray(r))e.splice(t,1,...r);else if(r)e[t]=r;else e.splice(t,1)}return e.length>0?this:void 0}optimizeNames(e,t){let{nodes:r}=this,s=r.length;while(s--){let n=r[s];if(n.optimizeNames(e,t))continue;z$(e,n.names),r.splice(s,1)}return r.length>0?this:void 0}get names(){return this.nodes.reduce((e,t)=>bs(e,t.names),{})}}class xr extends Hi{render(e){return"{"+e._n+super.render(e)+"}"+e._n}}class Id extends Hi{}class Zn extends xr{}Zn.kind="else";class Pr extends xr{constructor(e,t){super(t);this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);if(this.else)t+="else "+this.else.render(e);return t}optimizeNodes(){super.optimizeNodes();let e=this.condition;if(e===!0)return this.nodes;let t=this.else;if(t){let r=t.optimizeNodes();t=this.else=Array.isArray(r)?new Zn(r):r}if(t){if(e===!1)return t instanceof Pr?t:t.nodes;if(this.nodes.length)return this;return new Pr(jd(e),t instanceof Pr?[t]:t.nodes)}if(e===!1||!this.nodes.length)return;return this}optimizeNames(e,t){var r;if(this.else=(r=this.else)===null||r===void 0?void 0:r.optimizeNames(e,t),!(super.optimizeNames(e,t)||this.else))return;return this.condition=Ks(this.condition,e,t),this}get names(){let e=super.names;if(Fi(e,this.condition),this.else)bs(e,this.else.names);return e}}Pr.kind="if";class Hs extends xr{}Hs.kind="for";class Od extends Hs{constructor(e){super();this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iteration=Ks(this.iteration,e,t),this}get names(){return bs(super.names,this.iteration.names)}}class Td extends Hs{constructor(e,t,r,s){super();this.varKind=e,this.name=t,this.from=r,this.to=s}render(e){let t=e.es5?Ce.varKinds.var:this.varKind,{name:r,from:s,to:n}=this;return`for(${t} ${r}=${s}; ${r}<${n}; ${r}++)`+super.render(e)}get names(){let e=Fi(super.names,this.from);return Fi(e,this.to)}}class Ja extends Hs{constructor(e,t,r,s){super();this.loop=e,this.varKind=t,this.name=r,this.iterable=s}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iterable=Ks(this.iterable,e,t),this}get names(){return bs(super.names,this.iterable.names)}}class Mi extends xr{constructor(e,t,r){super();this.name=e,this.args=t,this.async=r}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}}Mi.kind="func";class Vi extends Hi{render(e){return"return "+super.render(e)}}Vi.kind="return";class Ad extends xr{render(e){let t="try"+super.render(e);if(this.catch)t+=this.catch.render(e);if(this.finally)t+=this.finally.render(e);return t}optimizeNodes(){var e,t;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(e,t){var r,s;return super.optimizeNames(e,t),(r=this.catch)===null||r===void 0||r.optimizeNames(e,t),(s=this.finally)===null||s===void 0||s.optimizeNames(e,t),this}get names(){let e=super.names;if(this.catch)bs(e,this.catch.names);if(this.finally)bs(e,this.finally.names);return e}}class Ui extends xr{constructor(e){super();this.error=e}render(e){return`catch(${this.error})`+super.render(e)}}Ui.kind="catch";class zi extends xr{render(e){return"finally"+super.render(e)}}zi.kind="finally";class xd{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?`
2
+ `:""},this._extScope=e,this._scope=new Ce.Scope({parent:e}),this._nodes=[new Id]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,t){let r=this._extScope.value(e,t);return(this._values[r.prefix]||(this._values[r.prefix]=new Set)).add(r),r}getScopeValue(e,t){return this._extScope.getValue(e,t)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,t,r,s){let n=this._scope.toName(t);if(r!==void 0&&s)this._constants[n.str]=r;return this._leafNode(new bd(e,n,r)),n}const(e,t,r){return this._def(Ce.varKinds.const,e,t,r)}let(e,t,r){return this._def(Ce.varKinds.let,e,t,r)}var(e,t,r){return this._def(Ce.varKinds.var,e,t,r)}assign(e,t,r){return this._leafNode(new Qa(e,t,r))}add(e,t){return this._leafNode(new Sd(e,B.operators.ADD,t))}code(e){if(typeof e=="function")e();else if(e!==x.nil)this._leafNode(new Rd(e));return this}object(...e){let t=["{"];for(let[r,s]of e){if(t.length>1)t.push(",");if(t.push(r),r!==s||this.opts.es5)t.push(":"),x.addCodeArg(t,s)}return t.push("}"),new x._Code(t)}if(e,t,r){if(this._blockNode(new Pr(e)),t&&r)this.code(t).else().code(r).endIf();else if(t)this.code(t).endIf();else if(r)throw Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new Pr(e))}else(){return this._elseNode(new Zn)}endIf(){return this._endBlockNode(Pr,Zn)}_for(e,t){if(this._blockNode(e),t)this.code(t).endFor();return this}for(e,t){return this._for(new Od(e),t)}forRange(e,t,r,s,n=this.opts.es5?Ce.varKinds.var:Ce.varKinds.let){let i=this._scope.toName(e);return this._for(new Td(n,i,t,r),()=>s(i))}forOf(e,t,r,s=Ce.varKinds.const){let n=this._scope.toName(e);if(this.opts.es5){let i=t instanceof x.Name?t:this.var("_arr",t);return this.forRange("_i",0,x._`${i}.length`,(o)=>{this.var(n,x._`${i}[${o}]`),r(n)})}return this._for(new Ja("of",s,n,t),()=>r(n))}forIn(e,t,r,s=this.opts.es5?Ce.varKinds.var:Ce.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,x._`Object.keys(${t})`,r);let n=this._scope.toName(e);return this._for(new Ja("in",s,n,t),()=>r(n))}endFor(){return this._endBlockNode(Hs)}label(e){return this._leafNode(new Pd(e))}break(e){return this._leafNode(new Ed(e))}return(e){let t=new Vi;if(this._blockNode(t),this.code(e),t.nodes.length!==1)throw Error('CodeGen: "return" should have one node');return this._endBlockNode(Vi)}try(e,t,r){if(!t&&!r)throw Error('CodeGen: "try" without "catch" and "finally"');let s=new Ad;if(this._blockNode(s),this.code(e),t){let n=this.name("e");this._currNode=s.catch=new Ui(n),t(n)}if(r)this._currNode=s.finally=new zi,this.code(r);return this._endBlockNode(Ui,zi)}throw(e){return this._leafNode(new kd(e))}block(e,t){if(this._blockStarts.push(this._nodes.length),e)this.code(e).endBlock(t);return this}endBlock(e){let t=this._blockStarts.pop();if(t===void 0)throw Error("CodeGen: not in self-balancing block");let r=this._nodes.length-t;if(r<0||e!==void 0&&r!==e)throw Error(`CodeGen: wrong number of nodes: ${r} vs ${e} expected`);return this._nodes.length=t,this}func(e,t=x.nil,r,s){if(this._blockNode(new Mi(e,t,r)),s)this.code(s).endFunc();return this}endFunc(){return this._endBlockNode(Mi)}optimize(e=1){while(e-- >0)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,t){let r=this._currNode;if(r instanceof e||t&&r instanceof t)return this._nodes.pop(),this;throw Error(`CodeGen: not in block "${t?`${e.kind}/${t.kind}`:e.kind}"`)}_elseNode(e){let t=this._currNode;if(!(t instanceof Pr))throw Error('CodeGen: "else" without "if"');return this._currNode=t.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let t=this._nodes;t[t.length-1]=e}}B.CodeGen=xd;function bs(e,t){for(let r in t)e[r]=(e[r]||0)+(t[r]||0);return e}function Fi(e,t){return t instanceof x._CodeOrName?bs(e,t.names):e}function Ks(e,t,r){if(e instanceof x.Name)return s(e);if(!n(e))return e;return new x._Code(e._items.reduce((i,o)=>{if(o instanceof x.Name)o=s(o);if(o instanceof x._Code)i.push(...o._items);else i.push(o);return i},[]));function s(i){let o=r[i.str];if(o===void 0||t[i.str]!==1)return i;return delete t[i.str],o}function n(i){return i instanceof x._Code&&i._items.some((o)=>o instanceof x.Name&&t[o.str]===1&&r[o.str]!==void 0)}}function z$(e,t){for(let r in t)e[r]=(e[r]||0)-(t[r]||0)}function jd(e){return typeof e=="boolean"||typeof e=="number"||e===null?!e:x._`!${Wa(e)}`}B.not=jd;var F$=Cd(B.operators.AND);function L$(...e){return e.reduce(F$)}B.and=L$;var H$=Cd(B.operators.OR);function K$(...e){return e.reduce(H$)}B.or=K$;function Cd(e){return(t,r)=>t===x.nil?r:r===x.nil?t:x._`${Wa(t)} ${e} ${Wa(r)}`}function Wa(e){return e instanceof x.Name?e:x._`(${e})`}});var ne=b(function(te){Object.defineProperty(te,"__esModule",{value:!0});te.checkStrictMode=te.getErrorPath=te.Type=te.useFunc=te.setEvaluated=te.evaluatedPropsToName=te.mergeEvaluated=te.eachItem=te.unescapeJsonPointer=te.escapeJsonPointer=te.escapeFragment=te.unescapeFragment=te.schemaRefOrVal=te.schemaHasRulesButRef=te.schemaHasRules=te.checkUnknownRules=te.alwaysValidSchema=te.toHash=void 0;var V=ee(),Dd=Xn();function G$(e){let t={};for(let r of e)t[r]=!0;return t}te.toHash=G$;function J$(e,t){if(typeof t=="boolean")return t;if(Object.keys(t).length===0)return!0;return Md(e,t),!Vd(t,e.self.RULES.all)}te.alwaysValidSchema=J$;function Md(e,t=e.schema){let{opts:r,self:s}=e;if(!r.strictSchema)return;if(typeof t==="boolean")return;let n=s.RULES.keywords;for(let i in t)if(!n[i])Fd(e,`unknown keyword: "${i}"`)}te.checkUnknownRules=Md;function Vd(e,t){if(typeof e=="boolean")return!e;for(let r in e)if(t[r])return!0;return!1}te.schemaHasRules=Vd;function W$(e,t){if(typeof e=="boolean")return!e;for(let r in e)if(r!=="$ref"&&t.all[r])return!0;return!1}te.schemaHasRulesButRef=W$;function Q$({topSchemaRef:e,schemaPath:t},r,s,n){if(!n){if(typeof r=="number"||typeof r=="boolean")return r;if(typeof r=="string")return V._`${r}`}return V._`${e}${t}${V.getProperty(s)}`}te.schemaRefOrVal=Q$;function B$(e){return Ud(decodeURIComponent(e))}te.unescapeFragment=B$;function X$(e){return encodeURIComponent(Xa(e))}te.escapeFragment=X$;function Xa(e){if(typeof e=="number")return`${e}`;return e.replace(/~/g,"~0").replace(/\//g,"~1")}te.escapeJsonPointer=Xa;function Ud(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}te.unescapeJsonPointer=Ud;function Z$(e,t){if(Array.isArray(e))for(let r of e)t(r);else t(e)}te.eachItem=Z$;function Nd({mergeNames:e,mergeToName:t,mergeValues:r,resultToName:s}){return(n,i,o,a)=>{let c=o===void 0?i:o instanceof V.Name?(i instanceof V.Name?e(n,i,o):t(n,i,o),o):i instanceof V.Name?(t(n,o,i),i):r(i,o);return a===V.Name&&!(c instanceof V.Name)?s(n,c):c}}te.mergeEvaluated={props:Nd({mergeNames:(e,t,r)=>e.if(V._`${r} !== true && ${t} !== undefined`,()=>{e.if(V._`${t} === true`,()=>e.assign(r,!0),()=>e.assign(r,V._`${r} || {}`).code(V._`Object.assign(${r}, ${t})`))}),mergeToName:(e,t,r)=>e.if(V._`${r} !== true`,()=>{if(t===!0)e.assign(r,!0);else e.assign(r,V._`${r} || {}`),Za(e,r,t)}),mergeValues:(e,t)=>e===!0?!0:{...e,...t},resultToName:zd}),items:Nd({mergeNames:(e,t,r)=>e.if(V._`${r} !== true && ${t} !== undefined`,()=>e.assign(r,V._`${t} === true ? true : ${r} > ${t} ? ${r} : ${t}`)),mergeToName:(e,t,r)=>e.if(V._`${r} !== true`,()=>e.assign(r,t===!0?!0:V._`${r} > ${t} ? ${r} : ${t}`)),mergeValues:(e,t)=>e===!0?!0:Math.max(e,t),resultToName:(e,t)=>e.var("items",t)})};function zd(e,t){if(t===!0)return e.var("props",!0);let r=e.var("props",V._`{}`);if(t!==void 0)Za(e,r,t);return r}te.evaluatedPropsToName=zd;function Za(e,t,r){Object.keys(r).forEach((s)=>e.assign(V._`${t}${V.getProperty(s)}`,!0))}te.setEvaluated=Za;var qd={};function Y$(e,t){return e.scopeValue("func",{ref:t,code:qd[t.code]||(qd[t.code]=new Dd._Code(t.code))})}te.useFunc=Y$;var Ba;(function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"})(Ba||(te.Type=Ba={}));function e_(e,t,r){if(e instanceof V.Name){let s=t===Ba.Num;return r?s?V._`"[" + ${e} + "]"`:V._`"['" + ${e} + "']"`:s?V._`"/" + ${e}`:V._`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return r?V.getProperty(e).toString():"/"+Xa(e)}te.getErrorPath=e_;function Fd(e,t,r=e.opts.strictSchema){if(!r)return;if(t=`strict mode: ${t}`,r===!0)throw Error(t);e.self.logger.warn(t)}te.checkStrictMode=Fd});var Er=b(function(Ya){Object.defineProperty(Ya,"__esModule",{value:!0});var fe=ee(),t_={data:new fe.Name("data"),valCxt:new fe.Name("valCxt"),instancePath:new fe.Name("instancePath"),parentData:new fe.Name("parentData"),parentDataProperty:new fe.Name("parentDataProperty"),rootData:new fe.Name("rootData"),dynamicAnchors:new fe.Name("dynamicAnchors"),vErrors:new fe.Name("vErrors"),errors:new fe.Name("errors"),this:new fe.Name("this"),self:new fe.Name("self"),scope:new fe.Name("scope"),json:new fe.Name("json"),jsonPos:new fe.Name("jsonPos"),jsonLen:new fe.Name("jsonLen"),jsonPart:new fe.Name("jsonPart")};Ya.default=t_});var Yn=b(function(tt){Object.defineProperty(tt,"__esModule",{value:!0});tt.extendErrors=tt.resetErrorsCount=tt.reportExtraError=tt.reportError=tt.keyword$DataError=tt.keywordError=void 0;var N=ee(),jr=ne(),ot=Er();tt.keywordError={message:({keyword:e})=>N.str`must pass "${e}" keyword validation`};tt.keyword$DataError={message:({keyword:e,schemaType:t})=>t?N.str`"${e}" keyword must be ${t} ($data)`:N.str`"${e}" keyword is invalid ($data)`};function r_(e,t=tt.keywordError,r,s){let{it:n}=e,{gen:i,compositeRule:o,allErrors:a}=n,c=Kd(e,t,r);if(s!==null&&s!==void 0?s:o||a)Ld(i,c);else Hd(n,N._`[${c}]`)}tt.reportError=r_;function s_(e,t=tt.keywordError,r){let{it:s}=e,{gen:n,compositeRule:i,allErrors:o}=s,a=Kd(e,t,r);if(Ld(n,a),!(i||o))Hd(s,ot.default.vErrors)}tt.reportExtraError=s_;function n_(e,t){e.assign(ot.default.errors,t),e.if(N._`${ot.default.vErrors} !== null`,()=>e.if(t,()=>e.assign(N._`${ot.default.vErrors}.length`,t),()=>e.assign(ot.default.vErrors,null)))}tt.resetErrorsCount=n_;function i_({gen:e,keyword:t,schemaValue:r,data:s,errsCount:n,it:i}){if(n===void 0)throw Error("ajv implementation error");let o=e.name("err");e.forRange("i",n,ot.default.errors,(a)=>{if(e.const(o,N._`${ot.default.vErrors}[${a}]`),e.if(N._`${o}.instancePath === undefined`,()=>e.assign(N._`${o}.instancePath`,N.strConcat(ot.default.instancePath,i.errorPath))),e.assign(N._`${o}.schemaPath`,N.str`${i.errSchemaPath}/${t}`),i.opts.verbose)e.assign(N._`${o}.schema`,r),e.assign(N._`${o}.data`,s)})}tt.extendErrors=i_;function Ld(e,t){let r=e.const("err",t);e.if(N._`${ot.default.vErrors} === null`,()=>e.assign(ot.default.vErrors,N._`[${r}]`),N._`${ot.default.vErrors}.push(${r})`),e.code(N._`${ot.default.errors}++`)}function Hd(e,t){let{gen:r,validateName:s,schemaEnv:n}=e;if(n.$async)r.throw(N._`new ${e.ValidationError}(${t})`);else r.assign(N._`${s}.errors`,t),r.return(!1)}var Ss={keyword:new N.Name("keyword"),schemaPath:new N.Name("schemaPath"),params:new N.Name("params"),propertyName:new N.Name("propertyName"),message:new N.Name("message"),schema:new N.Name("schema"),parentSchema:new N.Name("parentSchema")};function Kd(e,t,r){let{createErrors:s}=e.it;if(s===!1)return N._`{}`;return o_(e,t,r)}function o_(e,t,r={}){let{gen:s,it:n}=e,i=[a_(n,r),c_(e,r)];return u_(e,t,i),s.object(...i)}function a_({errorPath:e},{instancePath:t}){let r=t?N.str`${e}${jr.getErrorPath(t,jr.Type.Str)}`:e;return[ot.default.instancePath,N.strConcat(ot.default.instancePath,r)]}function c_({keyword:e,it:{errSchemaPath:t}},{schemaPath:r,parentSchema:s}){let n=s?t:N.str`${t}/${e}`;if(r)n=N.str`${n}${jr.getErrorPath(r,jr.Type.Str)}`;return[Ss.schemaPath,n]}function u_(e,{params:t,message:r},s){let{keyword:n,data:i,schemaValue:o,it:a}=e,{opts:c,propertyName:u,topSchemaRef:l,schemaPath:d}=a;if(s.push([Ss.keyword,n],[Ss.params,typeof t=="function"?t(e):t||N._`{}`]),c.messages)s.push([Ss.message,typeof r=="function"?r(e):r]);if(c.verbose)s.push([Ss.schema,o],[Ss.parentSchema,N._`${l}${d}`],[ot.default.data,i]);if(u)s.push([Ss.propertyName,u])}});var Qd=b(function(Gs){Object.defineProperty(Gs,"__esModule",{value:!0});Gs.boolOrEmptySchema=Gs.topBoolOrEmptySchema=void 0;var Gd=Yn(),Jd=ee(),l_=Er(),d_={message:"boolean schema is false"};function f_(e){let{gen:t,schema:r,validateName:s}=e;if(r===!1)Wd(e,!1);else if(typeof r=="object"&&r.$async===!0)t.return(l_.default.data);else t.assign(Jd._`${s}.errors`,null),t.return(!0)}Gs.topBoolOrEmptySchema=f_;function p_(e,t){let{gen:r,schema:s}=e;if(s===!1)r.var(t,!1),Wd(e);else r.var(t,!0)}Gs.boolOrEmptySchema=p_;function Wd(e,t){let{gen:r,data:s}=e;Gd.reportError({gen:r,keyword:"false schema",data:s,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e},d_,void 0,t)}});var ec=b(function(Js){Object.defineProperty(Js,"__esModule",{value:!0});Js.getRules=Js.isJSONType=void 0;var m_=["string","number","integer","boolean","null","object","array"],h_=new Set(m_);function y_(e){return typeof e=="string"&&h_.has(e)}Js.isJSONType=y_;function g_(){let e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}Js.getRules=g_});var tc=b(function(Cr){Object.defineProperty(Cr,"__esModule",{value:!0});Cr.shouldUseRule=Cr.shouldUseGroup=Cr.schemaHasRulesForType=void 0;function v_({schema:e,self:t},r){let s=t.RULES.types[r];return s&&s!==!0&&Bd(e,s)}Cr.schemaHasRulesForType=v_;function Bd(e,t){return t.rules.some((r)=>Xd(e,r))}Cr.shouldUseGroup=Bd;function Xd(e,t){var r;return e[t.keyword]!==void 0||((r=t.definition.implements)===null||r===void 0?void 0:r.some((s)=>e[s]!==void 0))}Cr.shouldUseRule=Xd});var ei=b(function(rt){Object.defineProperty(rt,"__esModule",{value:!0});rt.reportTypeError=rt.checkDataTypes=rt.checkDataType=rt.coerceAndCheckDataType=rt.getJSONTypes=rt.getSchemaTypes=rt.DataType=void 0;var Zd=ec(),Yd=tc(),ef=Yn(),T=ee(),Ki=ne(),Ws;(function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"})(Ws||(rt.DataType=Ws={}));function $_(e){let t=tf(e.type);if(t.includes("null")){if(e.nullable===!1)throw Error("type: null contradicts nullable: false")}else{if(!t.length&&e.nullable!==void 0)throw Error('"nullable" cannot be used without "type"');if(e.nullable===!0)t.push("null")}return t}rt.getSchemaTypes=$_;function tf(e){let t=Array.isArray(e)?e:e?[e]:[];if(t.every(Zd.isJSONType))return t;throw Error("type must be JSONType or JSONType[]: "+t.join(","))}rt.getJSONTypes=tf;function __(e,t){let{gen:r,data:s,opts:n}=e,i=w_(t,n.coerceTypes),o=t.length>0&&!(i.length===0&&t.length===1&&Yd.schemaHasRulesForType(e,t[0]));if(o){let a=sc(t,s,n.strictNumbers,Ws.Wrong);r.if(a,()=>{if(i.length)b_(e,t,i);else nc(e)})}return o}rt.coerceAndCheckDataType=__;var rf=new Set(["string","number","integer","boolean","null"]);function w_(e,t){return t?e.filter((r)=>rf.has(r)||t==="array"&&r==="array"):[]}function b_(e,t,r){let{gen:s,data:n,opts:i}=e,o=s.let("dataType",T._`typeof ${n}`),a=s.let("coerced",T._`undefined`);if(i.coerceTypes==="array")s.if(T._`${o} == 'object' && Array.isArray(${n}) && ${n}.length == 1`,()=>s.assign(n,T._`${n}[0]`).assign(o,T._`typeof ${n}`).if(sc(t,n,i.strictNumbers),()=>s.assign(a,n)));s.if(T._`${a} !== undefined`);for(let u of r)if(rf.has(u)||u==="array"&&i.coerceTypes==="array")c(u);s.else(),nc(e),s.endIf(),s.if(T._`${a} !== undefined`,()=>{s.assign(n,a),S_(e,a)});function c(u){switch(u){case"string":s.elseIf(T._`${o} == "number" || ${o} == "boolean"`).assign(a,T._`"" + ${n}`).elseIf(T._`${n} === null`).assign(a,T._`""`);return;case"number":s.elseIf(T._`${o} == "boolean" || ${n} === null
3
+ || (${o} == "string" && ${n} && ${n} == +${n})`).assign(a,T._`+${n}`);return;case"integer":s.elseIf(T._`${o} === "boolean" || ${n} === null
4
+ || (${o} === "string" && ${n} && ${n} == +${n} && !(${n} % 1))`).assign(a,T._`+${n}`);return;case"boolean":s.elseIf(T._`${n} === "false" || ${n} === 0 || ${n} === null`).assign(a,!1).elseIf(T._`${n} === "true" || ${n} === 1`).assign(a,!0);return;case"null":s.elseIf(T._`${n} === "" || ${n} === 0 || ${n} === false`),s.assign(a,null);return;case"array":s.elseIf(T._`${o} === "string" || ${o} === "number"
5
+ || ${o} === "boolean" || ${n} === null`).assign(a,T._`[${n}]`)}}}function S_({gen:e,parentData:t,parentDataProperty:r},s){e.if(T._`${t} !== undefined`,()=>e.assign(T._`${t}[${r}]`,s))}function rc(e,t,r,s=Ws.Correct){let n=s===Ws.Correct?T.operators.EQ:T.operators.NEQ,i;switch(e){case"null":return T._`${t} ${n} null`;case"array":i=T._`Array.isArray(${t})`;break;case"object":i=T._`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case"integer":i=o(T._`!(${t} % 1) && !isNaN(${t})`);break;case"number":i=o();break;default:return T._`typeof ${t} ${n} ${e}`}return s===Ws.Correct?i:T.not(i);function o(a=T.nil){return T.and(T._`typeof ${t} == "number"`,a,r?T._`isFinite(${t})`:T.nil)}}rt.checkDataType=rc;function sc(e,t,r,s){if(e.length===1)return rc(e[0],t,r,s);let n,i=Ki.toHash(e);if(i.array&&i.object){let o=T._`typeof ${t} != "object"`;n=i.null?o:T._`!${t} || ${o}`,delete i.null,delete i.array,delete i.object}else n=T.nil;if(i.number)delete i.integer;for(let o in i)n=T.and(n,rc(o,t,r,s));return n}rt.checkDataTypes=sc;var P_={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>typeof e=="string"?T._`{type: ${e}}`:T._`{type: ${t}}`};function nc(e){let t=E_(e);ef.reportError(t,P_)}rt.reportTypeError=nc;function E_(e){let{gen:t,data:r,schema:s}=e,n=Ki.schemaRefOrVal(e,s,"type");return{gen:t,keyword:"type",data:r,schema:s.type,schemaCode:n,schemaValue:n,parentSchema:s,params:{},it:e}}});var of=b(function(Gi){Object.defineProperty(Gi,"__esModule",{value:!0});Gi.assignDefaults=void 0;var Et=ee(),nf=ne();function k_(e,t){let{properties:r,items:s}=e.schema;if(t==="object"&&r)for(let n in r)sf(e,n,r[n].default);else if(t==="array"&&Array.isArray(s))s.forEach((n,i)=>sf(e,i,n.default))}Gi.assignDefaults=k_;function sf(e,t,r){let{gen:s,compositeRule:n,data:i,opts:o}=e;if(r===void 0)return;let a=Et._`${i}${Et.getProperty(t)}`;if(n){nf.checkStrictMode(e,`default is ignored for: ${a}`);return}let c=Et._`${a} === undefined`;if(o.useDefaults==="empty")c=Et._`${c} || ${a} === null || ${a} === ""`;s.if(c,Et._`${a} = ${Et.stringify(r)}`)}});var kt=b(function(_e){Object.defineProperty(_e,"__esModule",{value:!0});_e.validateUnion=_e.validateArray=_e.usePattern=_e.callValidateCode=_e.schemaProperties=_e.allSchemaProperties=_e.noPropertyInData=_e.propertyInData=_e.isOwnProperty=_e.hasPropFunc=_e.reportMissingProp=_e.checkMissingProp=_e.checkReportMissingProp=void 0;var z=ee(),Qs=ne(),Nr=Er(),af=ne();function R_(e,t){let{gen:r,data:s,it:n}=e;r.if(oc(r,s,t,n.opts.ownProperties),()=>{e.setParams({missingProperty:z._`${t}`},!0),e.error()})}_e.checkReportMissingProp=R_;function I_({gen:e,data:t,it:{opts:r}},s,n){return z.or(...s.map((i)=>z.and(oc(e,t,i,r.ownProperties),z._`${n} = ${i}`)))}_e.checkMissingProp=I_;function O_(e,t){e.setParams({missingProperty:t},!0),e.error()}_e.reportMissingProp=O_;function cf(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:z._`Object.prototype.hasOwnProperty`})}_e.hasPropFunc=cf;function ic(e,t,r){return z._`${cf(e)}.call(${t}, ${r})`}_e.isOwnProperty=ic;function T_(e,t,r,s){let n=z._`${t}${z.getProperty(r)} !== undefined`;return s?z._`${n} && ${ic(e,t,r)}`:n}_e.propertyInData=T_;function oc(e,t,r,s){let n=z._`${t}${z.getProperty(r)} === undefined`;return s?z.or(n,z.not(ic(e,t,r))):n}_e.noPropertyInData=oc;function uf(e){return e?Object.keys(e).filter((t)=>t!=="__proto__"):[]}_e.allSchemaProperties=uf;function A_(e,t){return uf(t).filter((r)=>!Qs.alwaysValidSchema(e,t[r]))}_e.schemaProperties=A_;function x_({schemaCode:e,data:t,it:{gen:r,topSchemaRef:s,schemaPath:n,errorPath:i},it:o},a,c,u){let l=u?z._`${e}, ${t}, ${s}${n}`:t,d=[[Nr.default.instancePath,z.strConcat(Nr.default.instancePath,i)],[Nr.default.parentData,o.parentData],[Nr.default.parentDataProperty,o.parentDataProperty],[Nr.default.rootData,Nr.default.rootData]];if(o.opts.dynamicRef)d.push([Nr.default.dynamicAnchors,Nr.default.dynamicAnchors]);let v=z._`${l}, ${r.object(...d)}`;return c!==z.nil?z._`${a}.call(${c}, ${v})`:z._`${a}(${v})`}_e.callValidateCode=x_;var j_=z._`new RegExp`;function C_({gen:e,it:{opts:t}},r){let s=t.unicodeRegExp?"u":"",{regExp:n}=t.code,i=n(r,s);return e.scopeValue("pattern",{key:i.toString(),ref:i,code:z._`${n.code==="new RegExp"?j_:af.useFunc(e,n)}(${r}, ${s})`})}_e.usePattern=C_;function N_(e){let{gen:t,data:r,keyword:s,it:n}=e,i=t.name("valid");if(n.allErrors){let a=t.let("valid",!0);return o(()=>t.assign(a,!1)),a}return t.var(i,!0),o(()=>t.break()),i;function o(a){let c=t.const("len",z._`${r}.length`);t.forRange("i",0,c,(u)=>{e.subschema({keyword:s,dataProp:u,dataPropType:Qs.Type.Num},i),t.if(z.not(i),a)})}}_e.validateArray=N_;function q_(e){let{gen:t,schema:r,keyword:s,it:n}=e;if(!Array.isArray(r))throw Error("ajv implementation error");if(r.some((c)=>Qs.alwaysValidSchema(n,c))&&!n.opts.unevaluated)return;let o=t.let("valid",!1),a=t.name("_valid");t.block(()=>r.forEach((c,u)=>{let l=e.subschema({keyword:s,schemaProp:u,compositeRule:!0},a);if(t.assign(o,z._`${o} || ${a}`),!e.mergeValidEvaluated(l,a))t.if(z.not(o))})),e.result(o,()=>e.reset(),()=>e.error(!0))}_e.validateUnion=q_});var mf=b(function(Ht){Object.defineProperty(Ht,"__esModule",{value:!0});Ht.validateKeywordUsage=Ht.validSchemaType=Ht.funcKeywordCode=Ht.macroKeywordCode=void 0;var ye=ee(),Ps=Er(),df=kt(),ff=Yn();function D_(e,t){let{gen:r,keyword:s,schema:n,parentSchema:i,it:o}=e,a=t.macro.call(o.self,n,i,o),c=pf(r,s,a);if(o.opts.validateSchema!==!1)o.self.validateSchema(a,!0);let u=r.name("valid");e.subschema({schema:a,schemaPath:ye.nil,errSchemaPath:`${o.errSchemaPath}/${s}`,topSchemaRef:c,compositeRule:!0},u),e.pass(u,()=>e.error(!0))}Ht.macroKeywordCode=D_;function M_(e,t){var r;let{gen:s,keyword:n,schema:i,parentSchema:o,$data:a,it:c}=e;U_(c,t);let u=!a&&t.compile?t.compile.call(c.self,i,o,c):t.validate,l=pf(s,n,u),d=s.let("valid");e.block$data(d,v),e.ok((r=t.valid)!==null&&r!==void 0?r:d);function v(){if(t.errors===!1){if(p(),t.modifying)lf(e);_(()=>e.error())}else{let w=t.async?m():h();if(t.modifying)lf(e);_(()=>V_(e,w))}}function m(){let w=s.let("ruleErrs",null);return s.try(()=>p(ye._`await `),(I)=>s.assign(d,!1).if(ye._`${I} instanceof ${c.ValidationError}`,()=>s.assign(w,ye._`${I}.errors`),()=>s.throw(I))),w}function h(){let w=ye._`${l}.errors`;return s.assign(w,null),p(ye.nil),w}function p(w=t.async?ye._`await `:ye.nil){let I=c.opts.passContext?Ps.default.this:Ps.default.self,O=!(("compile"in t)&&!a||t.schema===!1);s.assign(d,ye._`${w}${df.callValidateCode(e,l,I,O)}`,t.modifying)}function _(w){var I;s.if(ye.not((I=t.valid)!==null&&I!==void 0?I:d),w)}}Ht.funcKeywordCode=M_;function lf(e){let{gen:t,data:r,it:s}=e;t.if(s.parentData,()=>t.assign(r,ye._`${s.parentData}[${s.parentDataProperty}]`))}function V_(e,t){let{gen:r}=e;r.if(ye._`Array.isArray(${t})`,()=>{r.assign(Ps.default.vErrors,ye._`${Ps.default.vErrors} === null ? ${t} : ${Ps.default.vErrors}.concat(${t})`).assign(Ps.default.errors,ye._`${Ps.default.vErrors}.length`),ff.extendErrors(e)},()=>e.error())}function U_({schemaEnv:e},t){if(t.async&&!e.$async)throw Error("async keyword in sync schema")}function pf(e,t,r){if(r===void 0)throw Error(`keyword "${t}" failed to compile`);return e.scopeValue("keyword",typeof r=="function"?{ref:r}:{ref:r,code:ye.stringify(r)})}function z_(e,t,r=!1){return!t.length||t.some((s)=>s==="array"?Array.isArray(e):s==="object"?e&&typeof e=="object"&&!Array.isArray(e):typeof e==s||r&&typeof e>"u")}Ht.validSchemaType=z_;function F_({schema:e,opts:t,self:r,errSchemaPath:s},n,i){if(Array.isArray(n.keyword)?!n.keyword.includes(i):n.keyword!==i)throw Error("ajv implementation error");let o=n.dependencies;if(o===null||o===void 0?void 0:o.some((a)=>!Object.prototype.hasOwnProperty.call(e,a)))throw Error(`parent schema must have dependencies of ${i}: ${o.join(",")}`);if(n.validateSchema){if(!n.validateSchema(e[i])){let c=`keyword "${i}" value is invalid at path "${s}": `+r.errorsText(n.validateSchema.errors);if(t.validateSchema==="log")r.logger.error(c);else throw Error(c)}}}Ht.validateKeywordUsage=F_});var hf=b(function(qr){Object.defineProperty(qr,"__esModule",{value:!0});qr.extendSubschemaMode=qr.extendSubschemaData=qr.getSubschema=void 0;var Ge=ee(),Ji=ne();function L_(e,{keyword:t,schemaProp:r,schema:s,schemaPath:n,errSchemaPath:i,topSchemaRef:o}){if(t!==void 0&&s!==void 0)throw Error('both "keyword" and "schema" passed, only one allowed');if(t!==void 0){let a=e.schema[t];return r===void 0?{schema:a,schemaPath:Ge._`${e.schemaPath}${Ge.getProperty(t)}`,errSchemaPath:`${e.errSchemaPath}/${t}`}:{schema:a[r],schemaPath:Ge._`${e.schemaPath}${Ge.getProperty(t)}${Ge.getProperty(r)}`,errSchemaPath:`${e.errSchemaPath}/${t}/${Ji.escapeFragment(r)}`}}if(s!==void 0){if(n===void 0||i===void 0||o===void 0)throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:s,schemaPath:n,topSchemaRef:o,errSchemaPath:i}}throw Error('either "keyword" or "schema" must be passed')}qr.getSubschema=L_;function H_(e,t,{dataProp:r,dataPropType:s,data:n,dataTypes:i,propertyName:o}){if(n!==void 0&&r!==void 0)throw Error('both "data" and "dataProp" passed, only one allowed');let{gen:a}=t;if(r!==void 0){let{errorPath:u,dataPathArr:l,opts:d}=t,v=a.let("data",Ge._`${t.data}${Ge.getProperty(r)}`,!0);c(v),e.errorPath=Ge.str`${u}${Ji.getErrorPath(r,s,d.jsPropertySyntax)}`,e.parentDataProperty=Ge._`${r}`,e.dataPathArr=[...l,e.parentDataProperty]}if(n!==void 0){let u=n instanceof Ge.Name?n:a.let("data",n,!0);if(c(u),o!==void 0)e.propertyName=o}if(i)e.dataTypes=i;function c(u){e.data=u,e.dataLevel=t.dataLevel+1,e.dataTypes=[],t.definedProperties=new Set,e.parentData=t.data,e.dataNames=[...t.dataNames,u]}}qr.extendSubschemaData=H_;function K_(e,{jtdDiscriminator:t,jtdMetadata:r,compositeRule:s,createErrors:n,allErrors:i}){if(s!==void 0)e.compositeRule=s;if(n!==void 0)e.createErrors=n;if(i!==void 0)e.allErrors=i;e.jtdDiscriminator=t,e.jtdMetadata=r}qr.extendSubschemaMode=K_});var ti=b(function(wI,yf){yf.exports=function e(t,r){if(t===r)return!0;if(t&&r&&typeof t=="object"&&typeof r=="object"){if(t.constructor!==r.constructor)return!1;var s,n,i;if(Array.isArray(t)){if(s=t.length,s!=r.length)return!1;for(n=s;n--!==0;)if(!e(t[n],r[n]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if(i=Object.keys(t),s=i.length,s!==Object.keys(r).length)return!1;for(n=s;n--!==0;)if(!Object.prototype.hasOwnProperty.call(r,i[n]))return!1;for(n=s;n--!==0;){var o=i[n];if(!e(t[o],r[o]))return!1}return!0}return t!==t&&r!==r}});var ac=b(function(bI,gf){var Dr=gf.exports=function(e,t,r){if(typeof t=="function")r=t,t={};r=t.cb||r;var s=typeof r=="function"?r:r.pre||function(){},n=r.post||function(){};Wi(t,s,n,e,"",e)};Dr.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};Dr.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};Dr.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};Dr.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function Wi(e,t,r,s,n,i,o,a,c,u){if(s&&typeof s=="object"&&!Array.isArray(s)){t(s,n,i,o,a,c,u);for(var l in s){var d=s[l];if(Array.isArray(d)){if(l in Dr.arrayKeywords)for(var v=0;v<d.length;v++)Wi(e,t,r,d[v],n+"/"+l+"/"+v,i,n,l,s,v)}else if(l in Dr.propsKeywords){if(d&&typeof d=="object")for(var m in d)Wi(e,t,r,d[m],n+"/"+l+"/"+G_(m),i,n,l,s,m)}else if(l in Dr.keywords||e.allKeys&&!(l in Dr.skipKeywords))Wi(e,t,r,d,n+"/"+l,i,n,l,s)}r(s,n,i,o,a,c,u)}}function G_(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}});var ri=b(function(ft){Object.defineProperty(ft,"__esModule",{value:!0});ft.getSchemaRefs=ft.resolveUrl=ft.normalizeId=ft._getFullPath=ft.getFullPath=ft.inlineRef=void 0;var vf=ne(),J_=ti(),W_=ac(),Q_=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function B_(e,t=!0){if(typeof e=="boolean")return!0;if(t===!0)return!cc(e);if(!t)return!1;return $f(e)<=t}ft.inlineRef=B_;var X_=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function cc(e){for(let t in e){if(X_.has(t))return!0;let r=e[t];if(Array.isArray(r)&&r.some(cc))return!0;if(typeof r=="object"&&cc(r))return!0}return!1}function $f(e){let t=0;for(let r in e){if(r==="$ref")return 1/0;if(t++,Q_.has(r))continue;if(typeof e[r]=="object")vf.eachItem(e[r],(s)=>t+=$f(s));if(t===1/0)return 1/0}return t}function _f(e,t="",r){if(r!==!1)t=Bs(t);let s=e.parse(t);return wf(e,s)}ft.getFullPath=_f;function wf(e,t){return e.serialize(t).split("#")[0]+"#"}ft._getFullPath=wf;var Z_=/#\/?$/;function Bs(e){return e?e.replace(Z_,""):""}ft.normalizeId=Bs;function Y_(e,t,r){return r=Bs(r),e.resolve(t,r)}ft.resolveUrl=Y_;var ew=/^[a-z_][-a-z0-9._]*$/i;function tw(e,t){if(typeof e=="boolean")return{};let{schemaId:r,uriResolver:s}=this.opts,n=Bs(e[r]||t),i={"":n},o=_f(s,n,!1),a={},c=new Set;return W_(e,{allKeys:!0},(d,v,m,h)=>{if(h===void 0)return;let p=o+v,_=i[h];if(typeof d[r]=="string")_=w.call(this,d[r]);I.call(this,d.$anchor),I.call(this,d.$dynamicAnchor),i[v]=_;function w(O){let D=this.opts.uriResolver.resolve;if(O=Bs(_?D(_,O):O),c.has(O))throw l(O);c.add(O);let S=this.refs[O];if(typeof S=="string")S=this.refs[S];if(typeof S=="object")u(d,S.schema,O);else if(O!==Bs(p))if(O[0]==="#")u(d,a[O],O),a[O]=d;else this.refs[O]=p;return O}function I(O){if(typeof O=="string"){if(!ew.test(O))throw Error(`invalid anchor "${O}"`);w.call(this,`#${O}`)}}}),a;function u(d,v,m){if(v!==void 0&&!J_(d,v))throw l(m)}function l(d){return Error(`reference "${d}" resolves to more than one schema`)}}ft.getSchemaRefs=tw});var si=b(function(Mr){Object.defineProperty(Mr,"__esModule",{value:!0});Mr.getData=Mr.KeywordCxt=Mr.validateFunctionCode=void 0;var Bi=Qd(),Qi=ei(),Zs=tc(),Vr=ei(),Ef=of(),Gt=mf(),Xs=hf(),k=ee(),L=Er(),kf=ri(),Qe=ne(),Kt=Yn();function rw(e){if(Of(e)){if(Tf(e),If(e)){iw(e);return}}Rf(e,()=>Bi.topBoolOrEmptySchema(e))}Mr.validateFunctionCode=rw;function Rf({gen:e,validateName:t,schema:r,schemaEnv:s,opts:n},i){if(n.code.es5)e.func(t,k._`${L.default.data}, ${L.default.valCxt}`,s.$async,()=>{e.code(k._`"use strict"; ${bf(r,n)}`),nw(e,n),e.code(i)});else e.func(t,k._`${L.default.data}, ${sw(n)}`,s.$async,()=>e.code(bf(r,n)).code(i))}function sw(e){return k._`{${L.default.instancePath}="", ${L.default.parentData}, ${L.default.parentDataProperty}, ${L.default.rootData}=${L.default.data}${e.dynamicRef?k._`, ${L.default.dynamicAnchors}={}`:k.nil}}={}`}function nw(e,t){e.if(L.default.valCxt,()=>{if(e.var(L.default.instancePath,k._`${L.default.valCxt}.${L.default.instancePath}`),e.var(L.default.parentData,k._`${L.default.valCxt}.${L.default.parentData}`),e.var(L.default.parentDataProperty,k._`${L.default.valCxt}.${L.default.parentDataProperty}`),e.var(L.default.rootData,k._`${L.default.valCxt}.${L.default.rootData}`),t.dynamicRef)e.var(L.default.dynamicAnchors,k._`${L.default.valCxt}.${L.default.dynamicAnchors}`)},()=>{if(e.var(L.default.instancePath,k._`""`),e.var(L.default.parentData,k._`undefined`),e.var(L.default.parentDataProperty,k._`undefined`),e.var(L.default.rootData,L.default.data),t.dynamicRef)e.var(L.default.dynamicAnchors,k._`{}`)})}function iw(e){let{schema:t,opts:r,gen:s}=e;Rf(e,()=>{if(r.$comment&&t.$comment)xf(e);if(lw(e),s.let(L.default.vErrors,null),s.let(L.default.errors,0),r.unevaluated)ow(e);Af(e),pw(e)});return}function ow(e){let{gen:t,validateName:r}=e;e.evaluated=t.const("evaluated",k._`${r}.evaluated`),t.if(k._`${e.evaluated}.dynamicProps`,()=>t.assign(k._`${e.evaluated}.props`,k._`undefined`)),t.if(k._`${e.evaluated}.dynamicItems`,()=>t.assign(k._`${e.evaluated}.items`,k._`undefined`))}function bf(e,t){let r=typeof e=="object"&&e[t.schemaId];return r&&(t.code.source||t.code.process)?k._`/*# sourceURL=${r} */`:k.nil}function aw(e,t){if(Of(e)){if(Tf(e),If(e)){cw(e,t);return}}Bi.boolOrEmptySchema(e,t)}function If({schema:e,self:t}){if(typeof e=="boolean")return!e;for(let r in e)if(t.RULES.all[r])return!0;return!1}function Of(e){return typeof e.schema!="boolean"}function cw(e,t){let{schema:r,gen:s,opts:n}=e;if(n.$comment&&r.$comment)xf(e);dw(e),fw(e);let i=s.const("_errs",L.default.errors);Af(e,i),s.var(t,k._`${i} === ${L.default.errors}`)}function Tf(e){Qe.checkUnknownRules(e),uw(e)}function Af(e,t){if(e.opts.jtd)return Sf(e,[],!1,t);let r=Qi.getSchemaTypes(e.schema),s=Qi.coerceAndCheckDataType(e,r);Sf(e,r,!s,t)}function uw(e){let{schema:t,errSchemaPath:r,opts:s,self:n}=e;if(t.$ref&&s.ignoreKeywordsWithRef&&Qe.schemaHasRulesButRef(t,n.RULES))n.logger.warn(`$ref: keywords ignored in schema at path "${r}"`)}function lw(e){let{schema:t,opts:r}=e;if(t.default!==void 0&&r.useDefaults&&r.strictSchema)Qe.checkStrictMode(e,"default is ignored in the schema root")}function dw(e){let t=e.schema[e.opts.schemaId];if(t)e.baseId=kf.resolveUrl(e.opts.uriResolver,e.baseId,t)}function fw(e){if(e.schema.$async&&!e.schemaEnv.$async)throw Error("async schema in sync schema")}function xf({gen:e,schemaEnv:t,schema:r,errSchemaPath:s,opts:n}){let i=r.$comment;if(n.$comment===!0)e.code(k._`${L.default.self}.logger.log(${i})`);else if(typeof n.$comment=="function"){let o=k.str`${s}/$comment`,a=e.scopeValue("root",{ref:t.root});e.code(k._`${L.default.self}.opts.$comment(${i}, ${o}, ${a}.schema)`)}}function pw(e){let{gen:t,schemaEnv:r,validateName:s,ValidationError:n,opts:i}=e;if(r.$async)t.if(k._`${L.default.errors} === 0`,()=>t.return(L.default.data),()=>t.throw(k._`new ${n}(${L.default.vErrors})`));else{if(t.assign(k._`${s}.errors`,L.default.vErrors),i.unevaluated)mw(e);t.return(k._`${L.default.errors} === 0`)}}function mw({gen:e,evaluated:t,props:r,items:s}){if(r instanceof k.Name)e.assign(k._`${t}.props`,r);if(s instanceof k.Name)e.assign(k._`${t}.items`,s)}function Sf(e,t,r,s){let{gen:n,schema:i,data:o,allErrors:a,opts:c,self:u}=e,{RULES:l}=u;if(i.$ref&&(c.ignoreKeywordsWithRef||!Qe.schemaHasRulesButRef(i,l))){n.block(()=>Cf(e,"$ref",l.all.$ref.definition));return}if(!c.jtd)hw(e,t);n.block(()=>{for(let v of l.rules)d(v);d(l.post)});function d(v){if(!Zs.shouldUseGroup(i,v))return;if(v.type){if(n.if(Vr.checkDataType(v.type,o,c.strictNumbers)),Pf(e,v),t.length===1&&t[0]===v.type&&r)n.else(),Vr.reportTypeError(e);n.endIf()}else Pf(e,v);if(!a)n.if(k._`${L.default.errors} === ${s||0}`)}}function Pf(e,t){let{gen:r,schema:s,opts:{useDefaults:n}}=e;if(n)Ef.assignDefaults(e,t.type);r.block(()=>{for(let i of t.rules)if(Zs.shouldUseRule(s,i))Cf(e,i.keyword,i.definition,t.type)})}function hw(e,t){if(e.schemaEnv.meta||!e.opts.strictTypes)return;if(yw(e,t),!e.opts.allowUnionTypes)gw(e,t);vw(e,e.dataTypes)}function yw(e,t){if(!t.length)return;if(!e.dataTypes.length){e.dataTypes=t;return}t.forEach((r)=>{if(!jf(e.dataTypes,r))uc(e,`type "${r}" not allowed by context "${e.dataTypes.join(",")}"`)}),_w(e,t)}function gw(e,t){if(t.length>1&&!(t.length===2&&t.includes("null")))uc(e,"use allowUnionTypes to allow union type keyword")}function vw(e,t){let r=e.self.RULES.all;for(let s in r){let n=r[s];if(typeof n=="object"&&Zs.shouldUseRule(e.schema,n)){let{type:i}=n.definition;if(i.length&&!i.some((o)=>$w(t,o)))uc(e,`missing type "${i.join(",")}" for keyword "${s}"`)}}}function $w(e,t){return e.includes(t)||t==="number"&&e.includes("integer")}function jf(e,t){return e.includes(t)||t==="integer"&&e.includes("number")}function _w(e,t){let r=[];for(let s of e.dataTypes)if(jf(t,s))r.push(s);else if(t.includes("integer")&&s==="number")r.push("integer");e.dataTypes=r}function uc(e,t){let r=e.schemaEnv.baseId+e.errSchemaPath;t+=` at "${r}" (strictTypes)`,Qe.checkStrictMode(e,t,e.opts.strictTypes)}class lc{constructor(e,t,r){if(Gt.validateKeywordUsage(e,t,r),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=r,this.data=e.data,this.schema=e.schema[r],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=Qe.schemaRefOrVal(e,this.schema,r,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const("vSchema",Nf(this.$data,e));else if(this.schemaCode=this.schemaValue,!Gt.validSchemaType(this.schema,t.schemaType,t.allowUndefined))throw Error(`${r} value must be ${JSON.stringify(t.schemaType)}`);if("code"in t?t.trackErrors:t.errors!==!1)this.errsCount=e.gen.const("_errs",L.default.errors)}result(e,t,r){this.failResult(k.not(e),t,r)}failResult(e,t,r){if(this.gen.if(e),r)r();else this.error();if(t){if(this.gen.else(),t(),this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(e,t){this.failResult(k.not(e),void 0,t)}fail(e){if(e===void 0){if(this.error(),!this.allErrors)this.gen.if(!1);return}if(this.gen.if(e),this.error(),this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:t}=this;this.fail(k._`${t} !== undefined && (${k.or(this.invalid$data(),e)})`)}error(e,t,r){if(t){this.setParams(t),this._error(e,r),this.setParams({});return}this._error(e,r)}_error(e,t){(e?Kt.reportExtraError:Kt.reportError)(this,this.def.error,t)}$dataError(){Kt.reportError(this,this.def.$dataError||Kt.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error('add "trackErrors" to keyword definition');Kt.resetErrorsCount(this.gen,this.errsCount)}ok(e){if(!this.allErrors)this.gen.if(e)}setParams(e,t){if(t)Object.assign(this.params,e);else this.params=e}block$data(e,t,r=k.nil){this.gen.block(()=>{this.check$data(e,r),t()})}check$data(e=k.nil,t=k.nil){if(!this.$data)return;let{gen:r,schemaCode:s,schemaType:n,def:i}=this;if(r.if(k.or(k._`${s} === undefined`,t)),e!==k.nil)r.assign(e,!0);if(n.length||i.validateSchema){if(r.elseIf(this.invalid$data()),this.$dataError(),e!==k.nil)r.assign(e,!1)}r.else()}invalid$data(){let{gen:e,schemaCode:t,schemaType:r,def:s,it:n}=this;return k.or(i(),o());function i(){if(r.length){if(!(t instanceof k.Name))throw Error("ajv implementation error");let a=Array.isArray(r)?r:[r];return k._`${Vr.checkDataTypes(a,t,n.opts.strictNumbers,Vr.DataType.Wrong)}`}return k.nil}function o(){if(s.validateSchema){let a=e.scopeValue("validate$data",{ref:s.validateSchema});return k._`!${a}(${t})`}return k.nil}}subschema(e,t){let r=Xs.getSubschema(this.it,e);Xs.extendSubschemaData(r,this.it,e),Xs.extendSubschemaMode(r,e);let s={...this.it,...r,items:void 0,props:void 0};return aw(s,t),s}mergeEvaluated(e,t){let{it:r,gen:s}=this;if(!r.opts.unevaluated)return;if(r.props!==!0&&e.props!==void 0)r.props=Qe.mergeEvaluated.props(s,e.props,r.props,t);if(r.items!==!0&&e.items!==void 0)r.items=Qe.mergeEvaluated.items(s,e.items,r.items,t)}mergeValidEvaluated(e,t){let{it:r,gen:s}=this;if(r.opts.unevaluated&&(r.props!==!0||r.items!==!0))return s.if(t,()=>this.mergeEvaluated(e,k.Name)),!0}}Mr.KeywordCxt=lc;function Cf(e,t,r,s){let n=new lc(e,r,t);if("code"in r)r.code(n,s);else if(n.$data&&r.validate)Gt.funcKeywordCode(n,r);else if("macro"in r)Gt.macroKeywordCode(n,r);else if(r.compile||r.validate)Gt.funcKeywordCode(n,r)}var ww=/^\/(?:[^~]|~0|~1)*$/,bw=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Nf(e,{dataLevel:t,dataNames:r,dataPathArr:s}){let n,i;if(e==="")return L.default.rootData;if(e[0]==="/"){if(!ww.test(e))throw Error(`Invalid JSON-pointer: ${e}`);n=e,i=L.default.rootData}else{let u=bw.exec(e);if(!u)throw Error(`Invalid JSON-pointer: ${e}`);let l=+u[1];if(n=u[2],n==="#"){if(l>=t)throw Error(c("property/index",l));return s[t-l]}if(l>t)throw Error(c("data",l));if(i=r[t-l],!n)return i}let o=i,a=n.split("/");for(let u of a)if(u)i=k._`${i}${k.getProperty(Qe.unescapeJsonPointer(u))}`,o=k._`${o} && ${i}`;return o;function c(u,l){return`Cannot access ${u} ${l} levels up, current level is ${t}`}}Mr.getData=Nf});var Xi=b(function(dc){Object.defineProperty(dc,"__esModule",{value:!0});class qf extends Error{constructor(e){super("validation failed");this.errors=e,this.ajv=this.validation=!0}}dc.default=qf});var ni=b(function(fc){Object.defineProperty(fc,"__esModule",{value:!0});var Ys=ri();class Df extends Error{constructor(e,t,r,s){super(s||`can't resolve reference ${r} from id ${t}`);this.missingRef=Ys.resolveUrl(e,t,r),this.missingSchema=Ys.normalizeId(Ys.getFullPath(e,this.missingRef))}}fc.default=Df});var eo=b(function(Rt){Object.defineProperty(Rt,"__esModule",{value:!0});Rt.resolveSchema=Rt.getCompilingSchema=Rt.resolveRef=Rt.compileSchema=Rt.SchemaEnv=void 0;var Ne=ee(),Sw=Xi(),Es=Er(),qe=ri(),Zi=ne(),Mf=si();class ii{constructor(e){var t;this.refs={},this.dynamicAnchors={};let r;if(typeof e.schema=="object")r=e.schema;this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(t=e.baseId)!==null&&t!==void 0?t:qe.normalizeId(r===null||r===void 0?void 0:r[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=r===null||r===void 0?void 0:r.$async,this.refs={}}}Rt.SchemaEnv=ii;function mc(e){let t=Vf.call(this,e);if(t)return t;let r=qe.getFullPath(this.opts.uriResolver,e.root.baseId),{es5:s,lines:n}=this.opts.code,{ownProperties:i}=this.opts,o=new Ne.CodeGen(this.scope,{es5:s,lines:n,ownProperties:i}),a;if(e.$async)a=o.scopeValue("Error",{ref:Sw.default,code:Ne._`require("ajv/dist/runtime/validation_error").default`});let c=o.scopeName("validate");e.validateName=c;let u={gen:o,allErrors:this.opts.allErrors,data:Es.default.data,parentData:Es.default.parentData,parentDataProperty:Es.default.parentDataProperty,dataNames:[Es.default.data],dataPathArr:[Ne.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:o.scopeValue("schema",this.opts.code.source===!0?{ref:e.schema,code:Ne.stringify(e.schema)}:{ref:e.schema}),validateName:c,ValidationError:a,schema:e.schema,schemaEnv:e,rootId:r,baseId:e.baseId||r,schemaPath:Ne.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:Ne._`""`,opts:this.opts,self:this},l;try{this._compilations.add(e),Mf.validateFunctionCode(u),o.optimize(this.opts.code.optimize);let d=o.toString();if(l=`${o.scopeRefs(Es.default.scope)}return ${d}`,this.opts.code.process)l=this.opts.code.process(l,e);let m=Function(`${Es.default.self}`,`${Es.default.scope}`,l)(this,this.scope.get());if(this.scope.value(c,{ref:m}),m.errors=null,m.schema=e.schema,m.schemaEnv=e,e.$async)m.$async=!0;if(this.opts.code.source===!0)m.source={validateName:c,validateCode:d,scopeValues:o._values};if(this.opts.unevaluated){let{props:h,items:p}=u;if(m.evaluated={props:h instanceof Ne.Name?void 0:h,items:p instanceof Ne.Name?void 0:p,dynamicProps:h instanceof Ne.Name,dynamicItems:p instanceof Ne.Name},m.source)m.source.evaluated=Ne.stringify(m.evaluated)}return e.validate=m,e}catch(d){if(delete e.validate,delete e.validateName,l)this.logger.error("Error compiling schema, function code:",l);throw d}finally{this._compilations.delete(e)}}Rt.compileSchema=mc;function Pw(e,t,r){var s;r=qe.resolveUrl(this.opts.uriResolver,t,r);let n=e.refs[r];if(n)return n;let i=Rw.call(this,e,r);if(i===void 0){let o=(s=e.localRefs)===null||s===void 0?void 0:s[r],{schemaId:a}=this.opts;if(o)i=new ii({schema:o,schemaId:a,root:e,baseId:t})}if(i===void 0)return;return e.refs[r]=Ew.call(this,i)}Rt.resolveRef=Pw;function Ew(e){if(qe.inlineRef(e.schema,this.opts.inlineRefs))return e.schema;return e.validate?e:mc.call(this,e)}function Vf(e){for(let t of this._compilations)if(kw(t,e))return t}Rt.getCompilingSchema=Vf;function kw(e,t){return e.schema===t.schema&&e.root===t.root&&e.baseId===t.baseId}function Rw(e,t){let r;while(typeof(r=this.refs[t])=="string")t=r;return r||this.schemas[t]||Yi.call(this,e,t)}function Yi(e,t){let r=this.opts.uriResolver.parse(t),s=qe._getFullPath(this.opts.uriResolver,r),n=qe.getFullPath(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&s===n)return pc.call(this,r,e);let i=qe.normalizeId(s),o=this.refs[i]||this.schemas[i];if(typeof o=="string"){let a=Yi.call(this,e,o);if(typeof(a===null||a===void 0?void 0:a.schema)!=="object")return;return pc.call(this,r,a)}if(typeof(o===null||o===void 0?void 0:o.schema)!=="object")return;if(!o.validate)mc.call(this,o);if(i===qe.normalizeId(t)){let{schema:a}=o,{schemaId:c}=this.opts,u=a[c];if(u)n=qe.resolveUrl(this.opts.uriResolver,n,u);return new ii({schema:a,schemaId:c,root:e,baseId:n})}return pc.call(this,r,o)}Rt.resolveSchema=Yi;var Iw=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function pc(e,{baseId:t,schema:r,root:s}){var n;if(((n=e.fragment)===null||n===void 0?void 0:n[0])!=="/")return;for(let a of e.fragment.slice(1).split("/")){if(typeof r==="boolean")return;let c=r[Zi.unescapeFragment(a)];if(c===void 0)return;r=c;let u=typeof r==="object"&&r[this.opts.schemaId];if(!Iw.has(a)&&u)t=qe.resolveUrl(this.opts.uriResolver,t,u)}let i;if(typeof r!="boolean"&&r.$ref&&!Zi.schemaHasRulesButRef(r,this.RULES)){let a=qe.resolveUrl(this.opts.uriResolver,t,r.$ref);i=Yi.call(this,s,a)}let{schemaId:o}=this.opts;if(i=i||new ii({schema:r,schemaId:o,root:s,baseId:t}),i.schema!==i.root.schema)return i;return}});var Uf=b(function(II,Ow){Ow.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var yc=b(function(OI,Hf){var Tw=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),Ff=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function hc(e){let t="",r=0,s=0;for(s=0;s<e.length;s++){if(r=e[s].charCodeAt(0),r===48)continue;if(!(r>=48&&r<=57||r>=65&&r<=70||r>=97&&r<=102))return"";t+=e[s];break}for(s+=1;s<e.length;s++){if(r=e[s].charCodeAt(0),!(r>=48&&r<=57||r>=65&&r<=70||r>=97&&r<=102))return"";t+=e[s]}return t}var Aw=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function zf(e){return e.length=0,!0}function xw(e,t,r){if(e.length){let s=hc(e);if(s!=="")t.push(s);else return r.error=!0,!1;e.length=0}return!0}function jw(e){let t=0,r={error:!1,address:"",zone:""},s=[],n=[],i=!1,o=!1,a=xw;for(let c=0;c<e.length;c++){let u=e[c];if(u==="["||u==="]")continue;if(u===":"){if(i===!0)o=!0;if(!a(n,s,r))break;if(++t>7){r.error=!0;break}if(c>0&&e[c-1]===":")i=!0;s.push(":");continue}else if(u==="%"){if(!a(n,s,r))break;a=zf}else{n.push(u);continue}}if(n.length)if(a===zf)r.zone=n.join("");else if(o)s.push(n.join(""));else s.push(hc(n));return r.address=s.join(""),r}function Lf(e){if(Cw(e,":")<2)return{host:e,isIPV6:!1};let t=jw(e);if(!t.error){let{address:r,address:s}=t;if(t.zone)r+="%"+t.zone,s+="%25"+t.zone;return{host:r,isIPV6:!0,escapedHost:s}}else return{host:e,isIPV6:!1}}function Cw(e,t){let r=0;for(let s=0;s<e.length;s++)if(e[s]===t)r++;return r}function Nw(e){let t=e,r=[],s=-1,n=0;while(n=t.length){if(n===1)if(t===".")break;else if(t==="/"){r.push("/");break}else{r.push(t);break}else if(n===2){if(t[0]==="."){if(t[1]===".")break;else if(t[1]==="/"){t=t.slice(2);continue}}else if(t[0]==="/"){if(t[1]==="."||t[1]==="/"){r.push("/");break}}}else if(n===3){if(t==="/.."){if(r.length!==0)r.pop();r.push("/");break}}if(t[0]==="."){if(t[1]==="."){if(t[2]==="/"){t=t.slice(3);continue}}else if(t[1]==="/"){t=t.slice(2);continue}}else if(t[0]==="/"){if(t[1]==="."){if(t[2]==="/"){t=t.slice(2);continue}else if(t[2]==="."){if(t[3]==="/"){if(t=t.slice(3),r.length!==0)r.pop();continue}}}}if((s=t.indexOf("/",1))===-1){r.push(t);break}else r.push(t.slice(0,s)),t=t.slice(s)}return r.join("")}function qw(e,t){let r=t!==!0?escape:unescape;if(e.scheme!==void 0)e.scheme=r(e.scheme);if(e.userinfo!==void 0)e.userinfo=r(e.userinfo);if(e.host!==void 0)e.host=r(e.host);if(e.path!==void 0)e.path=r(e.path);if(e.query!==void 0)e.query=r(e.query);if(e.fragment!==void 0)e.fragment=r(e.fragment);return e}function Dw(e){let t=[];if(e.userinfo!==void 0)t.push(e.userinfo),t.push("@");if(e.host!==void 0){let r=unescape(e.host);if(!Ff(r)){let s=Lf(r);if(s.isIPV6===!0)r=`[${s.escapedHost}]`;else r=e.host}t.push(r)}if(typeof e.port==="number"||typeof e.port==="string")t.push(":"),t.push(String(e.port));return t.length?t.join(""):void 0}Hf.exports={nonSimpleDomain:Aw,recomposeAuthority:Dw,normalizeComponentEncoding:qw,removeDotSegments:Nw,isIPv4:Ff,isUUID:Tw,normalizeIPv6:Lf,stringArrayToHexStripped:hc}});var Qf=b(function(TI,Wf){var{isUUID:Mw}=yc(),Vw=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,Uw=["http","https","ws","wss","urn","urn:uuid"];function zw(e){return Uw.indexOf(e)!==-1}function gc(e){if(e.secure===!0)return!0;else if(e.secure===!1)return!1;else if(e.scheme)return e.scheme.length===3&&(e.scheme[0]==="w"||e.scheme[0]==="W")&&(e.scheme[1]==="s"||e.scheme[1]==="S")&&(e.scheme[2]==="s"||e.scheme[2]==="S");else return!1}function Kf(e){if(!e.host)e.error=e.error||"HTTP URIs must have a host.";return e}function Gf(e){let t=String(e.scheme).toLowerCase()==="https";if(e.port===(t?443:80)||e.port==="")e.port=void 0;if(!e.path)e.path="/";return e}function Fw(e){return e.secure=gc(e),e.resourceName=(e.path||"/")+(e.query?"?"+e.query:""),e.path=void 0,e.query=void 0,e}function Lw(e){if(e.port===(gc(e)?443:80)||e.port==="")e.port=void 0;if(typeof e.secure==="boolean")e.scheme=e.secure?"wss":"ws",e.secure=void 0;if(e.resourceName){let[t,r]=e.resourceName.split("?");e.path=t&&t!=="/"?t:void 0,e.query=r,e.resourceName=void 0}return e.fragment=void 0,e}function Hw(e,t){if(!e.path)return e.error="URN can not be parsed",e;let r=e.path.match(Vw);if(r){let s=t.scheme||e.scheme||"urn";e.nid=r[1].toLowerCase(),e.nss=r[2];let n=`${s}:${t.nid||e.nid}`,i=vc(n);if(e.path=void 0,i)e=i.parse(e,t)}else e.error=e.error||"URN can not be parsed.";return e}function Kw(e,t){if(e.nid===void 0)throw Error("URN without nid cannot be serialized");let r=t.scheme||e.scheme||"urn",s=e.nid.toLowerCase(),n=`${r}:${t.nid||s}`,i=vc(n);if(i)e=i.serialize(e,t);let o=e,a=e.nss;return o.path=`${s||t.nid}:${a}`,t.skipEscape=!0,o}function Gw(e,t){let r=e;if(r.uuid=r.nss,r.nss=void 0,!t.tolerant&&(!r.uuid||!Mw(r.uuid)))r.error=r.error||"UUID is not valid.";return r}function Jw(e){let t=e;return t.nss=(e.uuid||"").toLowerCase(),t}var Jf={scheme:"http",domainHost:!0,parse:Kf,serialize:Gf},Ww={scheme:"https",domainHost:Jf.domainHost,parse:Kf,serialize:Gf},to={scheme:"ws",domainHost:!0,parse:Fw,serialize:Lw},Qw={scheme:"wss",domainHost:to.domainHost,parse:to.parse,serialize:to.serialize},Bw={scheme:"urn",parse:Hw,serialize:Kw,skipNormalize:!0},Xw={scheme:"urn:uuid",parse:Gw,serialize:Jw,skipNormalize:!0},ro={http:Jf,https:Ww,ws:to,wss:Qw,urn:Bw,"urn:uuid":Xw};Object.setPrototypeOf(ro,null);function vc(e){return e&&(ro[e]||ro[e.toLowerCase()])||void 0}Wf.exports={wsIsSecure:gc,SCHEMES:ro,isValidSchemeName:zw,getSchemeHandler:vc}});var Zf=b(function(AI,no){var{normalizeIPv6:Zw,removeDotSegments:oi,recomposeAuthority:Yw,normalizeComponentEncoding:so,isIPv4:e0,nonSimpleDomain:t0}=yc(),{SCHEMES:r0,getSchemeHandler:Bf}=Qf();function s0(e,t){if(typeof e==="string")e=Jt(kr(e,t),t);else if(typeof e==="object")e=kr(Jt(e,t),t);return e}function n0(e,t,r){let s=r?Object.assign({scheme:"null"},r):{scheme:"null"},n=Xf(kr(e,s),kr(t,s),s,!0);return s.skipEscape=!0,Jt(n,s)}function Xf(e,t,r,s){let n={};if(!s)e=kr(Jt(e,r),r),t=kr(Jt(t,r),r);if(r=r||{},!r.tolerant&&t.scheme)n.scheme=t.scheme,n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=oi(t.path||""),n.query=t.query;else{if(t.userinfo!==void 0||t.host!==void 0||t.port!==void 0)n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=oi(t.path||""),n.query=t.query;else{if(!t.path)if(n.path=e.path,t.query!==void 0)n.query=t.query;else n.query=e.query;else{if(t.path[0]==="/")n.path=oi(t.path);else{if((e.userinfo!==void 0||e.host!==void 0||e.port!==void 0)&&!e.path)n.path="/"+t.path;else if(!e.path)n.path=t.path;else n.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path;n.path=oi(n.path)}n.query=t.query}n.userinfo=e.userinfo,n.host=e.host,n.port=e.port}n.scheme=e.scheme}return n.fragment=t.fragment,n}function i0(e,t,r){if(typeof e==="string")e=unescape(e),e=Jt(so(kr(e,r),!0),{...r,skipEscape:!0});else if(typeof e==="object")e=Jt(so(e,!0),{...r,skipEscape:!0});if(typeof t==="string")t=unescape(t),t=Jt(so(kr(t,r),!0),{...r,skipEscape:!0});else if(typeof t==="object")t=Jt(so(t,!0),{...r,skipEscape:!0});return e.toLowerCase()===t.toLowerCase()}function Jt(e,t){let r={host:e.host,scheme:e.scheme,userinfo:e.userinfo,port:e.port,path:e.path,query:e.query,nid:e.nid,nss:e.nss,uuid:e.uuid,fragment:e.fragment,reference:e.reference,resourceName:e.resourceName,secure:e.secure,error:""},s=Object.assign({},t),n=[],i=Bf(s.scheme||r.scheme);if(i&&i.serialize)i.serialize(r,s);if(r.path!==void 0)if(!s.skipEscape){if(r.path=escape(r.path),r.scheme!==void 0)r.path=r.path.split("%3A").join(":")}else r.path=unescape(r.path);if(s.reference!=="suffix"&&r.scheme)n.push(r.scheme,":");let o=Yw(r);if(o!==void 0){if(s.reference!=="suffix")n.push("//");if(n.push(o),r.path&&r.path[0]!=="/")n.push("/")}if(r.path!==void 0){let a=r.path;if(!s.absolutePath&&(!i||!i.absolutePath))a=oi(a);if(o===void 0&&a[0]==="/"&&a[1]==="/")a="/%2F"+a.slice(2);n.push(a)}if(r.query!==void 0)n.push("?",r.query);if(r.fragment!==void 0)n.push("#",r.fragment);return n.join("")}var o0=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function kr(e,t){let r=Object.assign({},t),s={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},n=!1;if(r.reference==="suffix")if(r.scheme)e=r.scheme+":"+e;else e="//"+e;let i=e.match(o0);if(i){if(s.scheme=i[1],s.userinfo=i[3],s.host=i[4],s.port=parseInt(i[5],10),s.path=i[6]||"",s.query=i[7],s.fragment=i[8],isNaN(s.port))s.port=i[5];if(s.host)if(e0(s.host)===!1){let c=Zw(s.host);s.host=c.host.toLowerCase(),n=c.isIPV6}else n=!0;if(s.scheme===void 0&&s.userinfo===void 0&&s.host===void 0&&s.port===void 0&&s.query===void 0&&!s.path)s.reference="same-document";else if(s.scheme===void 0)s.reference="relative";else if(s.fragment===void 0)s.reference="absolute";else s.reference="uri";if(r.reference&&r.reference!=="suffix"&&r.reference!==s.reference)s.error=s.error||"URI is not a "+r.reference+" reference.";let o=Bf(r.scheme||s.scheme);if(!r.unicodeSupport&&(!o||!o.unicodeSupport)){if(s.host&&(r.domainHost||o&&o.domainHost)&&n===!1&&t0(s.host))try{s.host=URL.domainToASCII(s.host.toLowerCase())}catch(a){s.error=s.error||"Host's domain name can not be converted to ASCII: "+a}}if(!o||o&&!o.skipNormalize){if(e.indexOf("%")!==-1){if(s.scheme!==void 0)s.scheme=unescape(s.scheme);if(s.host!==void 0)s.host=unescape(s.host)}if(s.path)s.path=escape(unescape(s.path));if(s.fragment)s.fragment=encodeURI(decodeURIComponent(s.fragment))}if(o&&o.parse)o.parse(s,r)}else s.error=s.error||"URI can not be parsed.";return s}var $c={SCHEMES:r0,normalize:s0,resolve:n0,resolveComponent:Xf,equal:i0,serialize:Jt,parse:kr};no.exports=$c;no.exports.default=$c;no.exports.fastUri=$c});var ep=b(function(_c){Object.defineProperty(_c,"__esModule",{value:!0});var Yf=Zf();Yf.code='require("ajv/dist/runtime/uri").default';_c.default=Yf});var lp=b(function(Xe){Object.defineProperty(Xe,"__esModule",{value:!0});Xe.CodeGen=Xe.Name=Xe.nil=Xe.stringify=Xe.str=Xe._=Xe.KeywordCxt=void 0;var a0=si();Object.defineProperty(Xe,"KeywordCxt",{enumerable:!0,get:function(){return a0.KeywordCxt}});var tn=ee();Object.defineProperty(Xe,"_",{enumerable:!0,get:function(){return tn._}});Object.defineProperty(Xe,"str",{enumerable:!0,get:function(){return tn.str}});Object.defineProperty(Xe,"stringify",{enumerable:!0,get:function(){return tn.stringify}});Object.defineProperty(Xe,"nil",{enumerable:!0,get:function(){return tn.nil}});Object.defineProperty(Xe,"Name",{enumerable:!0,get:function(){return tn.Name}});Object.defineProperty(Xe,"CodeGen",{enumerable:!0,get:function(){return tn.CodeGen}});var c0=Xi(),ip=ni(),op=ec(),Wt=eo(),ap=ee(),Qt=ri(),Ur=ei(),en=ne(),tp=Uf(),u0=ep(),cp=(e,t)=>new RegExp(e,t);cp.code="new RegExp";var l0=["removeAdditional","useDefaults","coerceTypes"],d0=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),f0={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},p0={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},rp=200;function m0(e){var t,r,s,n,i,o,a,c,u,l,d,v,m,h,p,_,w,I,O,D,S,M,Y,Q,me;let re=e.strict,Le=(t=e.code)===null||t===void 0?void 0:t.optimize,Ee=Le===!0||Le===void 0?1:Le||0,We=(s=(r=e.code)===null||r===void 0?void 0:r.regExp)!==null&&s!==void 0?s:cp,it=(n=e.uriResolver)!==null&&n!==void 0?n:u0.default;return{strictSchema:(o=(i=e.strictSchema)!==null&&i!==void 0?i:re)!==null&&o!==void 0?o:!0,strictNumbers:(c=(a=e.strictNumbers)!==null&&a!==void 0?a:re)!==null&&c!==void 0?c:!0,strictTypes:(l=(u=e.strictTypes)!==null&&u!==void 0?u:re)!==null&&l!==void 0?l:"log",strictTuples:(v=(d=e.strictTuples)!==null&&d!==void 0?d:re)!==null&&v!==void 0?v:"log",strictRequired:(h=(m=e.strictRequired)!==null&&m!==void 0?m:re)!==null&&h!==void 0?h:!1,code:e.code?{...e.code,optimize:Ee,regExp:We}:{optimize:Ee,regExp:We},loopRequired:(p=e.loopRequired)!==null&&p!==void 0?p:rp,loopEnum:(_=e.loopEnum)!==null&&_!==void 0?_:rp,meta:(w=e.meta)!==null&&w!==void 0?w:!0,messages:(I=e.messages)!==null&&I!==void 0?I:!0,inlineRefs:(O=e.inlineRefs)!==null&&O!==void 0?O:!0,schemaId:(D=e.schemaId)!==null&&D!==void 0?D:"$id",addUsedSchema:(S=e.addUsedSchema)!==null&&S!==void 0?S:!0,validateSchema:(M=e.validateSchema)!==null&&M!==void 0?M:!0,validateFormats:(Y=e.validateFormats)!==null&&Y!==void 0?Y:!0,unicodeRegExp:(Q=e.unicodeRegExp)!==null&&Q!==void 0?Q:!0,int32range:(me=e.int32range)!==null&&me!==void 0?me:!0,uriResolver:it}}class io{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...m0(e)};let{es5:t,lines:r}=this.opts.code;this.scope=new ap.ValueScope({scope:{},prefixes:d0,es5:t,lines:r}),this.logger=_0(e.logger);let s=e.validateFormats;if(e.validateFormats=!1,this.RULES=op.getRules(),sp.call(this,f0,e,"NOT SUPPORTED"),sp.call(this,p0,e,"DEPRECATED","warn"),this._metaOpts=v0.call(this),e.formats)y0.call(this);if(this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords)g0.call(this,e.keywords);if(typeof e.meta=="object")this.addMetaSchema(e.meta);h0.call(this),e.validateFormats=s}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:e,meta:t,schemaId:r}=this.opts,s=tp;if(r==="id")s={...tp},s.id=s.$id,delete s.$id;if(t&&e)this.addMetaSchema(s,s[r],!1)}defaultMeta(){let{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta=typeof e=="object"?e[t]||e:void 0}validate(e,t){let r;if(typeof e=="string"){if(r=this.getSchema(e),!r)throw Error(`no schema with key or ref "${e}"`)}else r=this.compile(e);let s=r(t);if(!("$async"in r))this.errors=r.errors;return s}compile(e,t){let r=this._addSchema(e,t);return r.validate||this._compileSchemaEnv(r)}compileAsync(e,t){if(typeof this.opts.loadSchema!="function")throw Error("options.loadSchema should be a function");let{loadSchema:r}=this.opts;return s.call(this,e,t);async function s(u,l){await n.call(this,u.$schema);let d=this._addSchema(u,l);return d.validate||i.call(this,d)}async function n(u){if(u&&!this.getSchema(u))await s.call(this,{$ref:u},!0)}async function i(u){try{return this._compileSchemaEnv(u)}catch(l){if(!(l instanceof ip.default))throw l;return o.call(this,l),await a.call(this,l.missingSchema),i.call(this,u)}}function o({missingSchema:u,missingRef:l}){if(this.refs[u])throw Error(`AnySchema ${u} is loaded but ${l} cannot be resolved`)}async function a(u){let l=await c.call(this,u);if(!this.refs[u])await n.call(this,l.$schema);if(!this.refs[u])this.addSchema(l,u,t)}async function c(u){let l=this._loading[u];if(l)return l;try{return await(this._loading[u]=r(u))}finally{delete this._loading[u]}}}addSchema(e,t,r,s=this.opts.validateSchema){if(Array.isArray(e)){for(let i of e)this.addSchema(i,void 0,r,s);return this}let n;if(typeof e==="object"){let{schemaId:i}=this.opts;if(n=e[i],n!==void 0&&typeof n!="string")throw Error(`schema ${i} must be string`)}return t=Qt.normalizeId(t||n),this._checkUnique(t),this.schemas[t]=this._addSchema(e,r,t,s,!0),this}addMetaSchema(e,t,r=this.opts.validateSchema){return this.addSchema(e,t,!0,r),this}validateSchema(e,t){if(typeof e=="boolean")return!0;let r;if(r=e.$schema,r!==void 0&&typeof r!="string")throw Error("$schema must be a string");if(r=r||this.opts.defaultMeta||this.defaultMeta(),!r)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let s=this.validate(r,e);if(!s&&t){let n="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(n);else throw Error(n)}return s}getSchema(e){let t;while(typeof(t=np.call(this,e))=="string")e=t;if(t===void 0){let{schemaId:r}=this.opts,s=new Wt.SchemaEnv({schema:{},schemaId:r});if(t=Wt.resolveSchema.call(this,s,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let t=np.call(this,e);if(typeof t=="object")this._cache.delete(t.schema);return delete this.schemas[e],delete this.refs[e],this}case"object":{let t=e;this._cache.delete(t);let r=e[this.opts.schemaId];if(r)r=Qt.normalizeId(r),delete this.schemas[r],delete this.refs[r];return this}default:throw Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(let t of e)this.addKeyword(t);return this}addKeyword(e,t){let r;if(typeof e=="string"){if(r=e,typeof t=="object")this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=r}else if(typeof e=="object"&&t===void 0){if(t=e,r=t.keyword,Array.isArray(r)&&!r.length)throw Error("addKeywords: keyword must be string or non-empty array")}else throw Error("invalid addKeywords parameters");if(b0.call(this,r,t),!t)return en.eachItem(r,(n)=>wc.call(this,n)),this;P0.call(this,t);let s={...t,type:Ur.getJSONTypes(t.type),schemaType:Ur.getJSONTypes(t.schemaType)};return en.eachItem(r,s.type.length===0?(n)=>wc.call(this,n,s):(n)=>s.type.forEach((i)=>wc.call(this,n,s,i))),this}getKeyword(e){let t=this.RULES.all[e];return typeof t=="object"?t.definition:!!t}removeKeyword(e){let{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(let r of t.rules){let s=r.rules.findIndex((n)=>n.keyword===e);if(s>=0)r.rules.splice(s,1)}return this}addFormat(e,t){if(typeof t=="string")t=new RegExp(t);return this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=", ",dataVar:r="data"}={}){if(!e||e.length===0)return"No errors";return e.map((s)=>`${r}${s.instancePath} ${s.message}`).reduce((s,n)=>s+t+n)}$dataMetaSchema(e,t){let r=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let s of t){let n=s.split("/").slice(1),i=e;for(let o of n)i=i[o];for(let o in r){let a=r[o];if(typeof a!="object")continue;let{$data:c}=a.definition,u=i[o];if(c&&u)i[o]=up(u)}}return e}_removeAllSchemas(e,t){for(let r in e){let s=e[r];if(!t||t.test(r)){if(typeof s=="string")delete e[r];else if(s&&!s.meta)this._cache.delete(s.schema),delete e[r]}}}_addSchema(e,t,r,s=this.opts.validateSchema,n=this.opts.addUsedSchema){let i,{schemaId:o}=this.opts;if(typeof e=="object")i=e[o];else if(this.opts.jtd)throw Error("schema must be object");else if(typeof e!="boolean")throw Error("schema must be object or boolean");let a=this._cache.get(e);if(a!==void 0)return a;r=Qt.normalizeId(i||r);let c=Qt.getSchemaRefs.call(this,e,r);if(a=new Wt.SchemaEnv({schema:e,schemaId:o,meta:t,baseId:r,localRefs:c}),this._cache.set(a.schema,a),n&&!r.startsWith("#")){if(r)this._checkUnique(r);this.refs[r]=a}if(s)this.validateSchema(e,!0);return a}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta)this._compileMetaSchema(e);else Wt.compileSchema.call(this,e);if(!e.validate)throw Error("ajv implementation error");return e.validate}_compileMetaSchema(e){let t=this.opts;this.opts=this._metaOpts;try{Wt.compileSchema.call(this,e)}finally{this.opts=t}}}io.ValidationError=c0.default;io.MissingRefError=ip.default;Xe.default=io;function sp(e,t,r,s="error"){for(let n in e){let i=n;if(i in t)this.logger[s](`${r}: option ${n}. ${e[i]}`)}}function np(e){return e=Qt.normalizeId(e),this.schemas[e]||this.refs[e]}function h0(){let e=this.opts.schemas;if(!e)return;if(Array.isArray(e))this.addSchema(e);else for(let t in e)this.addSchema(e[t],t)}function y0(){for(let e in this.opts.formats){let t=this.opts.formats[e];if(t)this.addFormat(e,t)}}function g0(e){if(Array.isArray(e)){this.addVocabulary(e);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let t in e){let r=e[t];if(!r.keyword)r.keyword=t;this.addKeyword(r)}}function v0(){let e={...this.opts};for(let t of l0)delete e[t];return e}var $0={log(){},warn(){},error(){}};function _0(e){if(e===!1)return $0;if(e===void 0)return console;if(e.log&&e.warn&&e.error)return e;throw Error("logger must implement log, warn and error methods")}var w0=/^[a-z_$][a-z0-9_$:-]*$/i;function b0(e,t){let{RULES:r}=this;if(en.eachItem(e,(s)=>{if(r.keywords[s])throw Error(`Keyword ${s} is already defined`);if(!w0.test(s))throw Error(`Keyword ${s} has invalid name`)}),!t)return;if(t.$data&&!(("code"in t)||("validate"in t)))throw Error('$data keyword must have "code" or "validate" function')}function wc(e,t,r){var s;let n=t===null||t===void 0?void 0:t.post;if(r&&n)throw Error('keyword with "post" flag cannot have "type"');let{RULES:i}=this,o=n?i.post:i.rules.find(({type:c})=>c===r);if(!o)o={type:r,rules:[]},i.rules.push(o);if(i.keywords[e]=!0,!t)return;let a={keyword:e,definition:{...t,type:Ur.getJSONTypes(t.type),schemaType:Ur.getJSONTypes(t.schemaType)}};if(t.before)S0.call(this,o,a,t.before);else o.rules.push(a);i.all[e]=a,(s=t.implements)===null||s===void 0||s.forEach((c)=>this.addKeyword(c))}function S0(e,t,r){let s=e.rules.findIndex((n)=>n.keyword===r);if(s>=0)e.rules.splice(s,0,t);else e.rules.push(t),this.logger.warn(`rule ${r} is not defined`)}function P0(e){let{metaSchema:t}=e;if(t===void 0)return;if(e.$data&&this.opts.$data)t=up(t);e.validateSchema=this.compile(t,!0)}var E0={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function up(e){return{anyOf:[e,E0]}}});var dp=b(function(bc){Object.defineProperty(bc,"__esModule",{value:!0});var k0={keyword:"id",code(){throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};bc.default=k0});var pp=b(function(ks){Object.defineProperty(ks,"__esModule",{value:!0});ks.callRef=ks.getValidate=void 0;var R0=ni(),ao=kt(),we=ee(),rn=Er(),co=eo(),zr=ne(),I0={keyword:"$ref",schemaType:"string",code(e){let{gen:t,schema:r,it:s}=e,{baseId:n,schemaEnv:i,validateName:o,opts:a,self:c}=s,{root:u}=i;if((r==="#"||r==="#/")&&n===u.baseId)return d();let l=co.resolveRef.call(c,u,n,r);if(l===void 0)throw new R0.default(s.opts.uriResolver,n,r);if(l instanceof co.SchemaEnv)return v(l);return m(l);function d(){if(i===u)return oo(e,o,i,i.$async);let h=t.scopeValue("root",{ref:u});return oo(e,we._`${h}.validate`,u,u.$async)}function v(h){let p=fp(e,h);oo(e,p,h,h.$async)}function m(h){let p=t.scopeValue("schema",a.code.source===!0?{ref:h,code:we.stringify(h)}:{ref:h}),_=t.name("valid"),w=e.subschema({schema:h,dataTypes:[],schemaPath:we.nil,topSchemaRef:p,errSchemaPath:r},_);e.mergeEvaluated(w),e.ok(_)}}};function fp(e,t){let{gen:r}=e;return t.validate?r.scopeValue("validate",{ref:t.validate}):we._`${r.scopeValue("wrapper",{ref:t})}.validate`}ks.getValidate=fp;function oo(e,t,r,s){let{gen:n,it:i}=e,{allErrors:o,schemaEnv:a,opts:c}=i,u=c.passContext?rn.default.this:we.nil;if(s)l();else d();function l(){if(!a.$async)throw Error("async schema referenced by sync schema");let h=n.let("valid");n.try(()=>{if(n.code(we._`await ${ao.callValidateCode(e,t,u)}`),m(t),!o)n.assign(h,!0)},(p)=>{if(n.if(we._`!(${p} instanceof ${i.ValidationError})`,()=>n.throw(p)),v(p),!o)n.assign(h,!1)}),e.ok(h)}function d(){e.result(ao.callValidateCode(e,t,u),()=>m(t),()=>v(t))}function v(h){let p=we._`${h}.errors`;n.assign(rn.default.vErrors,we._`${rn.default.vErrors} === null ? ${p} : ${rn.default.vErrors}.concat(${p})`),n.assign(rn.default.errors,we._`${rn.default.vErrors}.length`)}function m(h){var p;if(!i.opts.unevaluated)return;let _=(p=r===null||r===void 0?void 0:r.validate)===null||p===void 0?void 0:p.evaluated;if(i.props!==!0)if(_&&!_.dynamicProps){if(_.props!==void 0)i.props=zr.mergeEvaluated.props(n,_.props,i.props)}else{let w=n.var("props",we._`${h}.evaluated.props`);i.props=zr.mergeEvaluated.props(n,w,i.props,we.Name)}if(i.items!==!0)if(_&&!_.dynamicItems){if(_.items!==void 0)i.items=zr.mergeEvaluated.items(n,_.items,i.items)}else{let w=n.var("items",we._`${h}.evaluated.items`);i.items=zr.mergeEvaluated.items(n,w,i.items,we.Name)}}}ks.callRef=oo;ks.default=I0});var mp=b(function(Sc){Object.defineProperty(Sc,"__esModule",{value:!0});var O0=dp(),T0=pp(),A0=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",O0.default,T0.default];Sc.default=A0});var hp=b(function(Pc){Object.defineProperty(Pc,"__esModule",{value:!0});var Lr=ee(),Fr=Lr.operators,uo={maximum:{okStr:"<=",ok:Fr.LTE,fail:Fr.GT},minimum:{okStr:">=",ok:Fr.GTE,fail:Fr.LT},exclusiveMaximum:{okStr:"<",ok:Fr.LT,fail:Fr.GTE},exclusiveMinimum:{okStr:">",ok:Fr.GT,fail:Fr.LTE}},x0={message:({keyword:e,schemaCode:t})=>Lr.str`must be ${uo[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>Lr._`{comparison: ${uo[e].okStr}, limit: ${t}}`},j0={keyword:Object.keys(uo),type:"number",schemaType:"number",$data:!0,error:x0,code(e){let{keyword:t,data:r,schemaCode:s}=e;e.fail$data(Lr._`${r} ${uo[t].fail} ${s} || isNaN(${r})`)}};Pc.default=j0});var yp=b(function(Ec){Object.defineProperty(Ec,"__esModule",{value:!0});var Bt=ee(),C0={message:({schemaCode:e})=>Bt.str`must be multiple of ${e}`,params:({schemaCode:e})=>Bt._`{multipleOf: ${e}}`},N0={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:C0,code(e){let{gen:t,data:r,schemaCode:s,it:n}=e,i=n.opts.multipleOfPrecision,o=t.let("res"),a=i?Bt._`Math.abs(Math.round(${o}) - ${o}) > 1e-${i}`:Bt._`${o} !== parseInt(${o})`;e.fail$data(Bt._`(${s} === 0 || (${o} = ${r}/${s}, ${a}))`)}};Ec.default=N0});var vp=b(function(kc){Object.defineProperty(kc,"__esModule",{value:!0});function gp(e){let t=e.length,r=0,s=0,n;while(s<t)if(r++,n=e.charCodeAt(s++),n>=55296&&n<=56319&&s<t){if(n=e.charCodeAt(s),(n&64512)===56320)s++}return r}kc.default=gp;gp.code='require("ajv/dist/runtime/ucs2length").default'});var _p=b(function(Rc){Object.defineProperty(Rc,"__esModule",{value:!0});var pt=ee(),$p=ne(),q0=vp(),D0={message({keyword:e,schemaCode:t}){return pt.str`must NOT have ${e==="maxLength"?"more":"fewer"} than ${t} characters`},params:({schemaCode:e})=>pt._`{limit: ${e}}`},M0={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:D0,code(e){let{keyword:t,data:r,schemaCode:s,it:n}=e,i=t==="maxLength"?pt.operators.GT:pt.operators.LT,o=n.opts.unicode===!1?pt._`${r}.length`:pt._`${$p.useFunc(e.gen,q0.default)}(${r})`;e.fail$data(pt._`${o} ${i} ${s}`)}};Rc.default=M0});var Sp=b(function(Ic){Object.defineProperty(Ic,"__esModule",{value:!0});var wp=kt(),bp=ne(),It=ee(),V0={message:({schemaCode:e})=>It.str`must match pattern "${e}"`,params:({schemaCode:e})=>It._`{pattern: ${e}}`},U0={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:V0,code(e){let{gen:t,data:r,$data:s,schema:n,schemaCode:i,it:o}=e,a=o.opts.unicodeRegExp?"u":"";if(s){let{regExp:c}=o.opts.code,u=c.code==="new RegExp"?It._`new RegExp`:bp.useFunc(t,c),l=t.let("valid");t.try(()=>t.assign(l,It._`${u}(${i}, ${a}).test(${r})`),()=>t.assign(l,!1)),e.fail$data(It._`!${l}`)}else{let c=wp.usePattern(e,n);e.fail$data(It._`!${c}.test(${r})`)}}};Ic.default=U0});var Pp=b(function(Oc){Object.defineProperty(Oc,"__esModule",{value:!0});var Xt=ee(),z0={message({keyword:e,schemaCode:t}){return Xt.str`must NOT have ${e==="maxProperties"?"more":"fewer"} than ${t} properties`},params:({schemaCode:e})=>Xt._`{limit: ${e}}`},F0={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:z0,code(e){let{keyword:t,data:r,schemaCode:s}=e,n=t==="maxProperties"?Xt.operators.GT:Xt.operators.LT;e.fail$data(Xt._`Object.keys(${r}).length ${n} ${s}`)}};Oc.default=F0});var kp=b(function(Tc){Object.defineProperty(Tc,"__esModule",{value:!0});var Zt=kt(),Yt=ee(),Ep=ne(),L0={message:({params:{missingProperty:e}})=>Yt.str`must have required property '${e}'`,params:({params:{missingProperty:e}})=>Yt._`{missingProperty: ${e}}`},H0={keyword:"required",type:"object",schemaType:"array",$data:!0,error:L0,code(e){let{gen:t,schema:r,schemaCode:s,data:n,$data:i,it:o}=e,{opts:a}=o;if(!i&&r.length===0)return;let c=r.length>=a.loopRequired;if(o.allErrors)u();else l();if(a.strictRequired){let m=e.parentSchema.properties,{definedProperties:h}=e.it;for(let p of r)if((m===null||m===void 0?void 0:m[p])===void 0&&!h.has(p)){let _=o.schemaEnv.baseId+o.errSchemaPath,w=`required property "${p}" is not defined at "${_}" (strictRequired)`;Ep.checkStrictMode(o,w,o.opts.strictRequired)}}function u(){if(c||i)e.block$data(Yt.nil,d);else for(let m of r)Zt.checkReportMissingProp(e,m)}function l(){let m=t.let("missing");if(c||i){let h=t.let("valid",!0);e.block$data(h,()=>v(m,h)),e.ok(h)}else t.if(Zt.checkMissingProp(e,r,m)),Zt.reportMissingProp(e,m),t.else()}function d(){t.forOf("prop",s,(m)=>{e.setParams({missingProperty:m}),t.if(Zt.noPropertyInData(t,n,m,a.ownProperties),()=>e.error())})}function v(m,h){e.setParams({missingProperty:m}),t.forOf(m,s,()=>{t.assign(h,Zt.propertyInData(t,n,m,a.ownProperties)),t.if(Yt.not(h),()=>{e.error(),t.break()})},Yt.nil)}}};Tc.default=H0});var Rp=b(function(Ac){Object.defineProperty(Ac,"__esModule",{value:!0});var er=ee(),K0={message({keyword:e,schemaCode:t}){return er.str`must NOT have ${e==="maxItems"?"more":"fewer"} than ${t} items`},params:({schemaCode:e})=>er._`{limit: ${e}}`},G0={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:K0,code(e){let{keyword:t,data:r,schemaCode:s}=e,n=t==="maxItems"?er.operators.GT:er.operators.LT;e.fail$data(er._`${r}.length ${n} ${s}`)}};Ac.default=G0});var lo=b(function(xc){Object.defineProperty(xc,"__esModule",{value:!0});var Ip=ti();Ip.code='require("ajv/dist/runtime/equal").default';xc.default=Ip});var Tp=b(function(jc){Object.defineProperty(jc,"__esModule",{value:!0});var sn=ei(),ie=ee(),Op=ne(),J0=lo(),W0={message:({params:{i:e,j:t}})=>ie.str`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>ie._`{i: ${e}, j: ${t}}`},Q0={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:W0,code(e){let{gen:t,data:r,$data:s,schema:n,parentSchema:i,schemaCode:o,it:a}=e;if(!s&&!n)return;let c=t.let("valid"),u=i.items?sn.getSchemaTypes(i.items):[];e.block$data(c,l,ie._`${o} === false`),e.ok(c);function l(){let h=t.let("i",ie._`${r}.length`),p=t.let("j");e.setParams({i:h,j:p}),t.assign(c,!0),t.if(ie._`${h} > 1`,()=>(d()?v:m)(h,p))}function d(){return u.length>0&&!u.some((h)=>h==="object"||h==="array")}function v(h,p){let _=t.name("item"),w=sn.checkDataTypes(u,_,a.opts.strictNumbers,sn.DataType.Wrong),I=t.const("indices",ie._`{}`);t.for(ie._`;${h}--;`,()=>{if(t.let(_,ie._`${r}[${h}]`),t.if(w,ie._`continue`),u.length>1)t.if(ie._`typeof ${_} == "string"`,ie._`${_} += "_"`);t.if(ie._`typeof ${I}[${_}] == "number"`,()=>{t.assign(p,ie._`${I}[${_}]`),e.error(),t.assign(c,!1).break()}).code(ie._`${I}[${_}] = ${h}`)})}function m(h,p){let _=Op.useFunc(t,J0.default),w=t.name("outer");t.label(w).for(ie._`;${h}--;`,()=>t.for(ie._`${p} = ${h}; ${p}--;`,()=>t.if(ie._`${_}(${r}[${h}], ${r}[${p}])`,()=>{e.error(),t.assign(c,!1).break(w)})))}}};jc.default=Q0});var xp=b(function(Cc){Object.defineProperty(Cc,"__esModule",{value:!0});var nn=ee(),Ap=ne(),B0=lo(),X0={message:"must be equal to constant",params:({schemaCode:e})=>nn._`{allowedValue: ${e}}`},Z0={keyword:"const",$data:!0,error:X0,code(e){let{gen:t,data:r,$data:s,schemaCode:n,schema:i}=e;if(s||i&&typeof i=="object")e.fail$data(nn._`!${Ap.useFunc(t,B0.default)}(${r}, ${n})`);else e.fail(nn._`${i} !== ${r}`)}};Cc.default=Z0});var Cp=b(function(Nc){Object.defineProperty(Nc,"__esModule",{value:!0});var tr=ee(),jp=ne(),Y0=lo(),eb={message:"must be equal to one of the allowed values",params:({schemaCode:e})=>tr._`{allowedValues: ${e}}`},tb={keyword:"enum",schemaType:"array",$data:!0,error:eb,code(e){let{gen:t,data:r,$data:s,schema:n,schemaCode:i,it:o}=e;if(!s&&n.length===0)throw Error("enum must have non-empty array");let a=n.length>=o.opts.loopEnum,c,u=()=>c!==null&&c!==void 0?c:c=jp.useFunc(t,Y0.default),l;if(a||s)l=t.let("valid"),e.block$data(l,d);else{if(!Array.isArray(n))throw Error("ajv implementation error");let m=t.const("vSchema",i);l=tr.or(...n.map((h,p)=>v(m,p)))}e.pass(l);function d(){t.assign(l,!1),t.forOf("v",i,(m)=>t.if(tr._`${u()}(${r}, ${m})`,()=>t.assign(l,!0).break()))}function v(m,h){let p=n[h];return typeof p==="object"&&p!==null?tr._`${u()}(${r}, ${m}[${h}])`:tr._`${r} === ${p}`}}};Nc.default=tb});var Np=b(function(qc){Object.defineProperty(qc,"__esModule",{value:!0});var rb=hp(),sb=yp(),nb=_p(),ib=Sp(),ob=Pp(),ab=kp(),cb=Rp(),ub=Tp(),lb=xp(),db=Cp(),fb=[rb.default,sb.default,nb.default,ib.default,ob.default,ab.default,cb.default,ub.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},lb.default,db.default];qc.default=fb});var Dc=b(function(ai){Object.defineProperty(ai,"__esModule",{value:!0});ai.validateAdditionalItems=void 0;var mt=ee(),on=ne(),pb={message:({params:{len:e}})=>mt.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>mt._`{limit: ${e}}`},mb={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:pb,code(e){let{parentSchema:t,it:r}=e,{items:s}=t;if(!Array.isArray(s)){on.checkStrictMode(r,'"additionalItems" is ignored when "items" is not an array of schemas');return}qp(e,s)}};function qp(e,t){let{gen:r,schema:s,data:n,keyword:i,it:o}=e;o.items=!0;let a=r.const("len",mt._`${n}.length`);if(s===!1)e.setParams({len:t.length}),e.pass(mt._`${a} <= ${t.length}`);else if(typeof s=="object"&&!on.alwaysValidSchema(o,s)){let u=r.var("valid",mt._`${a} <= ${t.length}`);r.if(mt.not(u),()=>c(u)),e.ok(u)}function c(u){r.forRange("i",t.length,a,(l)=>{if(e.subschema({keyword:i,dataProp:l,dataPropType:on.Type.Num},u),!o.allErrors)r.if(mt.not(u),()=>r.break())})}}ai.validateAdditionalItems=qp;ai.default=mb});var Mc=b(function(ci){Object.defineProperty(ci,"__esModule",{value:!0});ci.validateTuple=void 0;var fo=ee(),Hr=ne(),Dp=kt(),hb={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){let{schema:t,it:r}=e;if(Array.isArray(t))return Mp(e,"additionalItems",t);if(r.items=!0,Hr.alwaysValidSchema(r,t))return;e.ok(Dp.validateArray(e))}};function Mp(e,t,r=e.schema){let{gen:s,parentSchema:n,data:i,keyword:o,it:a}=e;if(l(n),a.opts.unevaluated&&r.length&&a.items!==!0)a.items=Hr.mergeEvaluated.items(s,r.length,a.items);let c=s.name("valid"),u=s.const("len",fo._`${i}.length`);r.forEach((d,v)=>{if(Hr.alwaysValidSchema(a,d))return;s.if(fo._`${u} > ${v}`,()=>e.subschema({keyword:o,schemaProp:v,dataProp:v},c)),e.ok(c)});function l(d){let{opts:v,errSchemaPath:m}=a,h=r.length,p=h===d.minItems&&(h===d.maxItems||d[t]===!1);if(v.strictTuples&&!p){let _=`"${o}" is ${h}-tuple, but minItems or maxItems/${t} are not specified or different at path "${m}"`;Hr.checkStrictMode(a,_,v.strictTuples)}}}ci.validateTuple=Mp;ci.default=hb});var Up=b(function(Vc){Object.defineProperty(Vc,"__esModule",{value:!0});var Vp=Mc(),yb={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:(e)=>Vp.validateTuple(e,"items")};Vc.default=yb});var Hp=b(function(Uc){Object.defineProperty(Uc,"__esModule",{value:!0});var po=ee(),zp=ne(),Fp=kt(),Lp=Dc(),gb={message:({params:{len:e}})=>po.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>po._`{limit: ${e}}`},vb={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:gb,code(e){let{schema:t,parentSchema:r,it:s}=e,{prefixItems:n}=r;if(s.items=!0,zp.alwaysValidSchema(s,t))return;if(n)Lp.validateAdditionalItems(e,n);else e.ok(Fp.validateArray(e))}};Uc.default=vb});var Kp=b(function(zc){Object.defineProperty(zc,"__esModule",{value:!0});var Oe=ee(),Kr=ne(),$b={message:({params:{min:e,max:t}})=>t===void 0?Oe.str`must contain at least ${e} valid item(s)`:Oe.str`must contain at least ${e} and no more than ${t} valid item(s)`,params:({params:{min:e,max:t}})=>t===void 0?Oe._`{minContains: ${e}}`:Oe._`{minContains: ${e}, maxContains: ${t}}`},_b={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:$b,code(e){let{gen:t,schema:r,parentSchema:s,data:n,it:i}=e,o,a,{minContains:c,maxContains:u}=s;if(i.opts.next)o=c===void 0?1:c,a=u;else o=1;let l=t.const("len",Oe._`${n}.length`);if(e.setParams({min:o,max:a}),a===void 0&&o===0){Kr.checkStrictMode(i,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(a!==void 0&&o>a){Kr.checkStrictMode(i,'"minContains" > "maxContains" is always invalid'),e.fail();return}if(Kr.alwaysValidSchema(i,r)){let p=Oe._`${l} >= ${o}`;if(a!==void 0)p=Oe._`${p} && ${l} <= ${a}`;e.pass(p);return}i.items=!0;let d=t.name("valid");if(a===void 0&&o===1)m(d,()=>t.if(d,()=>t.break()));else if(o===0){if(t.let(d,!0),a!==void 0)t.if(Oe._`${n}.length > 0`,v)}else t.let(d,!1),v();e.result(d,()=>e.reset());function v(){let p=t.name("_valid"),_=t.let("count",0);m(p,()=>t.if(p,()=>h(_)))}function m(p,_){t.forRange("i",0,l,(w)=>{e.subschema({keyword:"contains",dataProp:w,dataPropType:Kr.Type.Num,compositeRule:!0},p),_()})}function h(p){if(t.code(Oe._`${p}++`),a===void 0)t.if(Oe._`${p} >= ${o}`,()=>t.assign(d,!0).break());else if(t.if(Oe._`${p} > ${a}`,()=>t.assign(d,!1).break()),o===1)t.assign(d,!0);else t.if(Oe._`${p} >= ${o}`,()=>t.assign(d,!0))}}};zc.default=_b});var Qp=b(function(sr){Object.defineProperty(sr,"__esModule",{value:!0});sr.validateSchemaDeps=sr.validatePropertyDeps=sr.error=void 0;var an=ee(),Gp=ne(),rr=kt();sr.error={message:({params:{property:e,depsCount:t,deps:r}})=>an.str`must have ${t===1?"property":"properties"} ${r} when property ${e} is present`,params:({params:{property:e,depsCount:t,deps:r,missingProperty:s}})=>an._`{property: ${e},
6
+ missingProperty: ${s},
7
+ depsCount: ${t},
8
+ deps: ${r}}`};var wb={keyword:"dependencies",type:"object",schemaType:"object",error:sr.error,code(e){let[t,r]=bb(e);Jp(e,t),Wp(e,r)}};function bb({schema:e}){let t={},r={};for(let s in e){if(s==="__proto__")continue;let n=Array.isArray(e[s])?t:r;n[s]=e[s]}return[t,r]}function Jp(e,t=e.schema){let{gen:r,data:s,it:n}=e;if(Object.keys(t).length===0)return;let i=r.let("missing");for(let o in t){let a=t[o];if(a.length===0)continue;let c=rr.propertyInData(r,s,o,n.opts.ownProperties);if(e.setParams({property:o,depsCount:a.length,deps:a.join(", ")}),n.allErrors)r.if(c,()=>{for(let u of a)rr.checkReportMissingProp(e,u)});else r.if(an._`${c} && (${rr.checkMissingProp(e,a,i)})`),rr.reportMissingProp(e,i),r.else()}}sr.validatePropertyDeps=Jp;function Wp(e,t=e.schema){let{gen:r,data:s,keyword:n,it:i}=e,o=r.name("valid");for(let a in t){if(Gp.alwaysValidSchema(i,t[a]))continue;r.if(rr.propertyInData(r,s,a,i.opts.ownProperties),()=>{let c=e.subschema({keyword:n,schemaProp:a},o);e.mergeValidEvaluated(c,o)},()=>r.var(o,!0)),e.ok(o)}}sr.validateSchemaDeps=Wp;sr.default=wb});var Xp=b(function(Fc){Object.defineProperty(Fc,"__esModule",{value:!0});var mo=ee(),Bp=ne(),Sb={message:"property name must be valid",params:({params:e})=>mo._`{propertyName: ${e.propertyName}}`},Pb={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:Sb,code(e){let{gen:t,schema:r,data:s,it:n}=e;if(Bp.alwaysValidSchema(n,r))return;let i=t.name("valid");t.forIn("key",s,(o)=>{e.setParams({propertyName:o}),e.subschema({keyword:"propertyNames",data:o,dataTypes:["string"],propertyName:o,compositeRule:!0},i),t.if(mo.not(i),()=>{if(e.error(!0),!n.allErrors)t.break()})}),e.ok(i)}};Fc.default=Pb});var Hc=b(function(Lc){Object.defineProperty(Lc,"__esModule",{value:!0});var Gr=kt(),De=ee(),Eb=Er(),Jr=ne(),kb={message:"must NOT have additional properties",params:({params:e})=>De._`{additionalProperty: ${e.additionalProperty}}`},Rb={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:kb,code(e){let{gen:t,schema:r,parentSchema:s,data:n,errsCount:i,it:o}=e;if(!i)throw Error("ajv implementation error");let{allErrors:a,opts:c}=o;if(o.props=!0,c.removeAdditional!=="all"&&Jr.alwaysValidSchema(o,r))return;let u=Gr.allSchemaProperties(s.properties),l=Gr.allSchemaProperties(s.patternProperties);d(),e.ok(De._`${i} === ${Eb.default.errors}`);function d(){t.forIn("key",n,(_)=>{if(!u.length&&!l.length)h(_);else t.if(v(_),()=>h(_))})}function v(_){let w;if(u.length>8){let I=Jr.schemaRefOrVal(o,s.properties,"properties");w=Gr.isOwnProperty(t,I,_)}else if(u.length)w=De.or(...u.map((I)=>De._`${_} === ${I}`));else w=De.nil;if(l.length)w=De.or(w,...l.map((I)=>De._`${Gr.usePattern(e,I)}.test(${_})`));return De.not(w)}function m(_){t.code(De._`delete ${n}[${_}]`)}function h(_){if(c.removeAdditional==="all"||c.removeAdditional&&r===!1){m(_);return}if(r===!1){if(e.setParams({additionalProperty:_}),e.error(),!a)t.break();return}if(typeof r=="object"&&!Jr.alwaysValidSchema(o,r)){let w=t.name("valid");if(c.removeAdditional==="failing")p(_,w,!1),t.if(De.not(w),()=>{e.reset(),m(_)});else if(p(_,w),!a)t.if(De.not(w),()=>t.break())}}function p(_,w,I){let O={keyword:"additionalProperties",dataProp:_,dataPropType:Jr.Type.Str};if(I===!1)Object.assign(O,{compositeRule:!0,createErrors:!1,allErrors:!1});e.subschema(O,w)}}};Lc.default=Rb});var em=b(function(Kc){Object.defineProperty(Kc,"__esModule",{value:!0});var Yp=si(),ho=kt(),cn=ne(),Zp=Hc(),Ib={keyword:"properties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,parentSchema:s,data:n,it:i}=e;if(i.opts.removeAdditional==="all"&&s.additionalProperties===void 0)Zp.default.code(new Yp.KeywordCxt(i,Zp.default,"additionalProperties"));let o=ho.allSchemaProperties(r);for(let d of o)i.definedProperties.add(d);if(i.opts.unevaluated&&o.length&&i.props!==!0)i.props=cn.mergeEvaluated.props(t,cn.toHash(o),i.props);let a=o.filter((d)=>!cn.alwaysValidSchema(i,r[d]));if(a.length===0)return;let c=t.name("valid");for(let d of a){if(u(d))l(d);else{if(t.if(ho.propertyInData(t,n,d,i.opts.ownProperties)),l(d),!i.allErrors)t.else().var(c,!0);t.endIf()}e.it.definedProperties.add(d),e.ok(c)}function u(d){return i.opts.useDefaults&&!i.compositeRule&&r[d].default!==void 0}function l(d){e.subschema({keyword:"properties",schemaProp:d,dataProp:d},c)}}};Kc.default=Ib});var tm=b(function(Gc){Object.defineProperty(Gc,"__esModule",{value:!0});var yo=kt(),Wr=ee(),go=ne(),vo=ne(),Ob={keyword:"patternProperties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,data:s,parentSchema:n,it:i}=e,{opts:o}=i,a=yo.allSchemaProperties(r),c=a.filter((p)=>go.alwaysValidSchema(i,r[p]));if(a.length===0||c.length===a.length&&(!i.opts.unevaluated||i.props===!0))return;let u=o.strictSchema&&!o.allowMatchingProperties&&n.properties,l=t.name("valid");if(i.props!==!0&&!(i.props instanceof Wr.Name))i.props=vo.evaluatedPropsToName(t,i.props);let{props:d}=i;v();function v(){for(let p of a){if(u)m(p);if(i.allErrors)h(p);else t.var(l,!0),h(p),t.if(l)}}function m(p){for(let _ in u)if(new RegExp(p).test(_))go.checkStrictMode(i,`property ${_} matches pattern ${p} (use allowMatchingProperties)`)}function h(p){t.forIn("key",s,(_)=>{t.if(Wr._`${yo.usePattern(e,p)}.test(${_})`,()=>{let w=c.includes(p);if(!w)e.subschema({keyword:"patternProperties",schemaProp:p,dataProp:_,dataPropType:vo.Type.Str},l);if(i.opts.unevaluated&&d!==!0)t.assign(Wr._`${d}[${_}]`,!0);else if(!w&&!i.allErrors)t.if(Wr.not(l),()=>t.break())})})}}};Gc.default=Ob});var sm=b(function(Jc){Object.defineProperty(Jc,"__esModule",{value:!0});var rm=ne(),Tb={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){let{gen:t,schema:r,it:s}=e;if(rm.alwaysValidSchema(s,r)){e.fail();return}let n=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},n),e.failResult(n,()=>e.reset(),()=>e.error())},error:{message:"must NOT be valid"}};Jc.default=Tb});var im=b(function(Wc){Object.defineProperty(Wc,"__esModule",{value:!0});var nm=kt(),Ab={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:nm.validateUnion,error:{message:"must match a schema in anyOf"}};Wc.default=Ab});var am=b(function(Qc){Object.defineProperty(Qc,"__esModule",{value:!0});var Qr=ee(),om=ne(),xb={message:"must match exactly one schema in oneOf",params:({params:e})=>Qr._`{passingSchemas: ${e.passing}}`},jb={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:xb,code(e){let{gen:t,schema:r,parentSchema:s,it:n}=e;if(!Array.isArray(r))throw Error("ajv implementation error");if(n.opts.discriminator&&s.discriminator)return;let i=r,o=t.let("valid",!1),a=t.let("passing",null),c=t.name("_valid");e.setParams({passing:a}),t.block(u),e.result(o,()=>e.reset(),()=>e.error(!0));function u(){i.forEach((l,d)=>{let v;if(om.alwaysValidSchema(n,l))t.var(c,!0);else v=e.subschema({keyword:"oneOf",schemaProp:d,compositeRule:!0},c);if(d>0)t.if(Qr._`${c} && ${o}`).assign(o,!1).assign(a,Qr._`[${a}, ${d}]`).else();t.if(c,()=>{if(t.assign(o,!0),t.assign(a,d),v)e.mergeEvaluated(v,Qr.Name)})})}}};Qc.default=jb});var um=b(function(Bc){Object.defineProperty(Bc,"__esModule",{value:!0});var cm=ne(),Cb={keyword:"allOf",schemaType:"array",code(e){let{gen:t,schema:r,it:s}=e;if(!Array.isArray(r))throw Error("ajv implementation error");let n=t.name("valid");r.forEach((i,o)=>{if(cm.alwaysValidSchema(s,i))return;let a=e.subschema({keyword:"allOf",schemaProp:o},n);e.ok(n),e.mergeEvaluated(a)})}};Bc.default=Cb});var dm=b(function(Xc){Object.defineProperty(Xc,"__esModule",{value:!0});var Br=ee(),$o=ne(),Nb={message:({params:e})=>Br.str`must match "${e.ifClause}" schema`,params:({params:e})=>Br._`{failingKeyword: ${e.ifClause}}`},qb={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:Nb,code(e){let{gen:t,parentSchema:r,it:s}=e;if(r.then===void 0&&r.else===void 0)$o.checkStrictMode(s,'"if" without "then" and "else" is ignored');let n=lm(s,"then"),i=lm(s,"else");if(!n&&!i)return;let o=t.let("valid",!0),a=t.name("_valid");if(c(),e.reset(),n&&i){let l=t.let("ifClause");e.setParams({ifClause:l}),t.if(a,u("then",l),u("else",l))}else if(n)t.if(a,u("then"));else t.if(Br.not(a),u("else"));e.pass(o,()=>e.error(!0));function c(){let l=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},a);e.mergeEvaluated(l)}function u(l,d){return()=>{let v=e.subschema({keyword:l},a);if(t.assign(o,a),e.mergeValidEvaluated(v,o),d)t.assign(d,Br._`${l}`);else e.setParams({ifClause:l})}}}};function lm(e,t){let r=e.schema[t];return r!==void 0&&!$o.alwaysValidSchema(e,r)}Xc.default=qb});var pm=b(function(Zc){Object.defineProperty(Zc,"__esModule",{value:!0});var fm=ne(),Db={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:r}){if(t.if===void 0)fm.checkStrictMode(r,`"${e}" without "if" is ignored`)}};Zc.default=Db});var mm=b(function(Yc){Object.defineProperty(Yc,"__esModule",{value:!0});var Mb=Dc(),Vb=Up(),Ub=Mc(),zb=Hp(),Fb=Kp(),Lb=Qp(),Hb=Xp(),Kb=Hc(),Gb=em(),Jb=tm(),Wb=sm(),Qb=im(),Bb=am(),Xb=um(),Zb=dm(),Yb=pm();function eS(e=!1){let t=[Wb.default,Qb.default,Bb.default,Xb.default,Zb.default,Yb.default,Hb.default,Kb.default,Lb.default,Gb.default,Jb.default];if(e)t.push(Vb.default,zb.default);else t.push(Mb.default,Ub.default);return t.push(Fb.default),t}Yc.default=eS});var hm=b(function(eu){Object.defineProperty(eu,"__esModule",{value:!0});var K=ee(),tS={message:({schemaCode:e})=>K.str`must match format "${e}"`,params:({schemaCode:e})=>K._`{format: ${e}}`},rS={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:tS,code(e,t){let{gen:r,data:s,$data:n,schema:i,schemaCode:o,it:a}=e,{opts:c,errSchemaPath:u,schemaEnv:l,self:d}=a;if(!c.validateFormats)return;if(n)v();else m();function v(){let h=r.scopeValue("formats",{ref:d.formats,code:c.code.formats}),p=r.const("fDef",K._`${h}[${o}]`),_=r.let("fType"),w=r.let("format");r.if(K._`typeof ${p} == "object" && !(${p} instanceof RegExp)`,()=>r.assign(_,K._`${p}.type || "string"`).assign(w,K._`${p}.validate`),()=>r.assign(_,K._`"string"`).assign(w,p)),e.fail$data(K.or(I(),O()));function I(){if(c.strictSchema===!1)return K.nil;return K._`${o} && !${w}`}function O(){let D=l.$async?K._`(${p}.async ? await ${w}(${s}) : ${w}(${s}))`:K._`${w}(${s})`,S=K._`(typeof ${w} == "function" ? ${D} : ${w}.test(${s}))`;return K._`${w} && ${w} !== true && ${_} === ${t} && !${S}`}}function m(){let h=d.formats[i];if(!h){I();return}if(h===!0)return;let[p,_,w]=O(h);if(p===t)e.pass(D());function I(){if(c.strictSchema===!1){d.logger.warn(S());return}throw Error(S());function S(){return`unknown format "${i}" ignored in schema at path "${u}"`}}function O(S){let M=S instanceof RegExp?K.regexpCode(S):c.code.formats?K._`${c.code.formats}${K.getProperty(i)}`:void 0,Y=r.scopeValue("formats",{key:i,ref:S,code:M});if(typeof S=="object"&&!(S instanceof RegExp))return[S.type||"string",S.validate,K._`${Y}.validate`];return["string",S,Y]}function D(){if(typeof h=="object"&&!(h instanceof RegExp)&&h.async){if(!l.$async)throw Error("async format in sync schema");return K._`await ${w}(${s})`}return typeof _=="function"?K._`${w}(${s})`:K._`${w}.test(${s})`}}}};eu.default=rS});var ym=b(function(tu){Object.defineProperty(tu,"__esModule",{value:!0});var sS=hm(),nS=[sS.default];tu.default=nS});var gm=b(function(un){Object.defineProperty(un,"__esModule",{value:!0});un.contentVocabulary=un.metadataVocabulary=void 0;un.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];un.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var vm=b(function(ru){Object.defineProperty(ru,"__esModule",{value:!0});var iS=mp(),oS=Np(),aS=mm(),cS=ym(),_o=gm(),uS=[iS.default,oS.default,(0,aS.default)(),cS.default,_o.metadataVocabulary,_o.contentVocabulary];ru.default=uS});var _m=b(function(wo){Object.defineProperty(wo,"__esModule",{value:!0});wo.DiscrError=void 0;var $m;(function(e){e.Tag="tag",e.Mapping="mapping"})($m||(wo.DiscrError=$m={}))});var bm=b(function(su){Object.defineProperty(su,"__esModule",{value:!0});var Ot=ee(),ln=_m(),bo=eo(),lS=ni(),wm=ne(),dS={message:({params:{discrError:e,tagName:t}})=>e===ln.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:r}})=>Ot._`{error: ${e}, tag: ${r}, tagValue: ${t}}`},fS={keyword:"discriminator",type:"object",schemaType:"object",error:dS,code(e){let{gen:t,data:r,schema:s,parentSchema:n,it:i}=e,{oneOf:o}=n;if(!i.opts.discriminator)throw Error("discriminator: requires discriminator option");let a=s.propertyName;if(typeof a!="string")throw Error("discriminator: requires propertyName");if(s.mapping)throw Error("discriminator: mapping is not supported");if(!o)throw Error("discriminator: requires oneOf keyword");let c=t.let("valid",!1),u=t.const("tag",Ot._`${r}${Ot.getProperty(a)}`);t.if(Ot._`typeof ${u} == "string"`,()=>l(),()=>e.error(!1,{discrError:ln.DiscrError.Tag,tag:u,tagName:a})),e.ok(c);function l(){let m=v();t.if(!1);for(let h in m)t.elseIf(Ot._`${u} === ${h}`),t.assign(c,d(m[h]));t.else(),e.error(!1,{discrError:ln.DiscrError.Mapping,tag:u,tagName:a}),t.endIf()}function d(m){let h=t.name("valid"),p=e.subschema({keyword:"oneOf",schemaProp:m},h);return e.mergeEvaluated(p,Ot.Name),h}function v(){var m;let h={},p=w(n),_=!0;for(let D=0;D<o.length;D++){let S=o[D];if((S===null||S===void 0?void 0:S.$ref)&&!wm.schemaHasRulesButRef(S,i.self.RULES)){let Y=S.$ref;if(S=bo.resolveRef.call(i.self,i.schemaEnv.root,i.baseId,Y),S instanceof bo.SchemaEnv)S=S.schema;if(S===void 0)throw new lS.default(i.opts.uriResolver,i.baseId,Y)}let M=(m=S===null||S===void 0?void 0:S.properties)===null||m===void 0?void 0:m[a];if(typeof M!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${a}"`);_=_&&(p||w(S)),I(M,D)}if(!_)throw Error(`discriminator: "${a}" must be required`);return h;function w({required:D}){return Array.isArray(D)&&D.includes(a)}function I(D,S){if(D.const)O(D.const,S);else if(D.enum)for(let M of D.enum)O(M,S);else throw Error(`discriminator: "properties/${a}" must have "const" or "enum"`)}function O(D,S){if(typeof D!="string"||D in h)throw Error(`discriminator: "${a}" values must be unique strings`);h[D]=S}}}};su.default=fS});var Sm=b(function($O,pS){pS.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var iu=b(function(Re,nu){Object.defineProperty(Re,"__esModule",{value:!0});Re.MissingRefError=Re.ValidationError=Re.CodeGen=Re.Name=Re.nil=Re.stringify=Re.str=Re._=Re.KeywordCxt=Re.Ajv=void 0;var mS=lp(),hS=vm(),yS=bm(),Pm=Sm(),gS=["/properties"],So="http://json-schema.org/draft-07/schema";class ui extends mS.default{_addVocabularies(){if(super._addVocabularies(),hS.default.forEach((e)=>this.addVocabulary(e)),this.opts.discriminator)this.addKeyword(yS.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(Pm,gS):Pm;this.addMetaSchema(e,So,!1),this.refs["http://json-schema.org/schema"]=So}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(So)?So:void 0)}}Re.Ajv=ui;nu.exports=Re=ui;nu.exports.Ajv=ui;Object.defineProperty(Re,"__esModule",{value:!0});Re.default=ui;var vS=si();Object.defineProperty(Re,"KeywordCxt",{enumerable:!0,get:function(){return vS.KeywordCxt}});var dn=ee();Object.defineProperty(Re,"_",{enumerable:!0,get:function(){return dn._}});Object.defineProperty(Re,"str",{enumerable:!0,get:function(){return dn.str}});Object.defineProperty(Re,"stringify",{enumerable:!0,get:function(){return dn.stringify}});Object.defineProperty(Re,"nil",{enumerable:!0,get:function(){return dn.nil}});Object.defineProperty(Re,"Name",{enumerable:!0,get:function(){return dn.Name}});Object.defineProperty(Re,"CodeGen",{enumerable:!0,get:function(){return dn.CodeGen}});var $S=Xi();Object.defineProperty(Re,"ValidationError",{enumerable:!0,get:function(){return $S.default}});var _S=ni();Object.defineProperty(Re,"MissingRefError",{enumerable:!0,get:function(){return _S.default}})});var Dm=b(function(nr){Object.defineProperty(nr,"__esModule",{value:!0});nr.formatNames=nr.fastFormats=nr.fullFormats=void 0;function pn(e,t){return{validate:e,compare:t}}nr.fullFormats={date:pn(Cm,du),time:pn(Nm,fu),"date-time":pn(kS,qm),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:OS,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:qS,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:TS,int32:{type:"number",validate:jS},int64:{type:"number",validate:CS},float:{type:"number",validate:jm},double:{type:"number",validate:jm},password:!0,binary:!0};nr.fastFormats={...nr.fullFormats,date:pn(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,du),time:pn(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,fu),"date-time":pn(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,qm),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i};nr.formatNames=Object.keys(nr.fullFormats);function SS(e){return e%4===0&&(e%100!==0||e%400===0)}var PS=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,ES=[0,31,28,31,30,31,30,31,31,30,31,30,31];function Cm(e){let t=PS.exec(e);if(!t)return!1;let r=+t[1],s=+t[2],n=+t[3];return s>=1&&s<=12&&n>=1&&n<=(s===2&&SS(r)?29:ES[s])}function du(e,t){if(!(e&&t))return;if(e>t)return 1;if(e<t)return-1;return 0}var uu=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i;function Nm(e,t){let r=uu.exec(e);if(!r)return!1;let s=+r[1],n=+r[2],i=+r[3],o=r[5];return(s<=23&&n<=59&&i<=59||s===23&&n===59&&i===60)&&(!t||o!=="")}function fu(e,t){if(!(e&&t))return;let r=uu.exec(e),s=uu.exec(t);if(!(r&&s))return;if(e=r[1]+r[2]+r[3]+(r[4]||""),t=s[1]+s[2]+s[3]+(s[4]||""),e>t)return 1;if(e<t)return-1;return 0}var lu=/t|\s/i;function kS(e){let t=e.split(lu);return t.length===2&&Cm(t[0])&&Nm(t[1],!0)}function qm(e,t){if(!(e&&t))return;let[r,s]=e.split(lu),[n,i]=t.split(lu),o=du(r,n);if(o===void 0)return;return o||fu(s,i)}var RS=/\/|:/,IS=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function OS(e){return RS.test(e)&&IS.test(e)}var xm=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function TS(e){return xm.lastIndex=0,xm.test(e)}var AS=-2147483648,xS=2147483647;function jS(e){return Number.isInteger(e)&&e<=xS&&e>=AS}function CS(e){return Number.isInteger(e)}function jm(){return!0}var NS=/[^\\]\\Z/;function qS(e){if(NS.test(e))return!1;try{return new RegExp(e),!0}catch(t){return!1}}});var di=b(function(ue){Object.defineProperty(ue,"__esModule",{value:!0});ue.regexpCode=ue.getEsmExportName=ue.getProperty=ue.safeStringify=ue.stringify=ue.strConcat=ue.addCodeArg=ue.str=ue._=ue.nil=ue._Code=ue.Name=ue.IDENTIFIER=ue._CodeOrName=void 0;class Eo{}ue._CodeOrName=Eo;ue.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class mn extends Eo{constructor(e){super();if(!ue.IDENTIFIER.test(e))throw Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}ue.Name=mn;class Mt extends Eo{constructor(e){super();this._items=typeof e==="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((t,r)=>`${t}${r}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((t,r)=>{if(r instanceof mn)t[r.str]=(t[r.str]||0)+1;return t},{})}}ue._Code=Mt;ue.nil=new Mt("");function Mm(e,...t){let r=[e[0]],s=0;while(s<t.length)mu(r,t[s]),r.push(e[++s]);return new Mt(r)}ue._=Mm;var pu=new Mt("+");function Vm(e,...t){let r=[li(e[0])],s=0;while(s<t.length)r.push(pu),mu(r,t[s]),r.push(pu,li(e[++s]));return DS(r),new Mt(r)}ue.str=Vm;function mu(e,t){if(t instanceof Mt)e.push(...t._items);else if(t instanceof mn)e.push(t);else e.push(US(t))}ue.addCodeArg=mu;function DS(e){let t=1;while(t<e.length-1){if(e[t]===pu){let r=MS(e[t-1],e[t+1]);if(r!==void 0){e.splice(t-1,3,r);continue}e[t++]="+"}t++}}function MS(e,t){if(t==='""')return e;if(e==='""')return t;if(typeof e=="string"){if(t instanceof mn||e[e.length-1]!=='"')return;if(typeof t!="string")return`${e.slice(0,-1)}${t}"`;if(t[0]==='"')return e.slice(0,-1)+t.slice(1);return}if(typeof t=="string"&&t[0]==='"'&&!(e instanceof mn))return`"${e}${t.slice(1)}`;return}function VS(e,t){return t.emptyStr()?e:e.emptyStr()?t:Vm`${e}${t}`}ue.strConcat=VS;function US(e){return typeof e=="number"||typeof e=="boolean"||e===null?e:li(Array.isArray(e)?e.join(","):e)}function zS(e){return new Mt(li(e))}ue.stringify=zS;function li(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}ue.safeStringify=li;function FS(e){return typeof e=="string"&&ue.IDENTIFIER.test(e)?new Mt(`.${e}`):Mm`[${e}]`}ue.getProperty=FS;function LS(e){if(typeof e=="string"&&ue.IDENTIFIER.test(e))return new Mt(`${e}`);throw Error(`CodeGen: invalid export name: ${e}, use explicit $id name mapping`)}ue.getEsmExportName=LS;function HS(e){return new Mt(e.toString())}ue.regexpCode=HS});var vu=b(function(at){Object.defineProperty(at,"__esModule",{value:!0});at.ValueScope=at.ValueScopeName=at.Scope=at.varKinds=at.UsedValueState=void 0;var be=di();class Um extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`);this.value=e.value}}var hu;(function(e){e[e.Started=0]="Started",e[e.Completed=1]="Completed"})(hu=at.UsedValueState||(at.UsedValueState={}));at.varKinds={const:new be.Name("const"),let:new be.Name("let"),var:new be.Name("var")};class yu{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof be.Name?e:this.name(e)}name(e){return new be.Name(this._newName(e))}_newName(e){let t=this._names[e]||this._nameGroup(e);return`${e}${t.index++}`}_nameGroup(e){var t,r;if(((r=(t=this._parent)===null||t===void 0?void 0:t._prefixes)===null||r===void 0?void 0:r.has(e))||this._prefixes&&!this._prefixes.has(e))throw Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}}at.Scope=yu;class gu extends be.Name{constructor(e,t){super(t);this.prefix=e}setValue(e,{property:t,itemIndex:r}){this.value=e,this.scopePath=be._`.${new be.Name(t)}[${r}]`}}at.ValueScopeName=gu;var KS=be._`\n`;class zm extends yu{constructor(e){super(e);this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?KS:be.nil}}get(){return this._scope}name(e){return new gu(e,this._newName(e))}value(e,t){var r;if(t.ref===void 0)throw Error("CodeGen: ref must be passed in value");let s=this.toName(e),{prefix:n}=s,i=(r=t.key)!==null&&r!==void 0?r:t.ref,o=this._values[n];if(o){let u=o.get(i);if(u)return u}else o=this._values[n]=new Map;o.set(i,s);let a=this._scope[n]||(this._scope[n]=[]),c=a.length;return a[c]=t.ref,s.setValue(t,{property:n,itemIndex:c}),s}getValue(e,t){let r=this._values[e];if(!r)return;return r.get(t)}scopeRefs(e,t=this._values){return this._reduceValues(t,(r)=>{if(r.scopePath===void 0)throw Error(`CodeGen: name "${r}" has no value`);return be._`${e}${r.scopePath}`})}scopeCode(e=this._values,t,r){return this._reduceValues(e,(s)=>{if(s.value===void 0)throw Error(`CodeGen: name "${s}" has no value`);return s.value.code},t,r)}_reduceValues(e,t,r={},s){let n=be.nil;for(let i in e){let o=e[i];if(!o)continue;let a=r[i]=r[i]||new Map;o.forEach((c)=>{if(a.has(c))return;a.set(c,hu.Started);let u=t(c);if(u){let l=this.opts.es5?at.varKinds.var:at.varKinds.const;n=be._`${n}${l} ${c} = ${u};${this.opts._n}`}else if(u=s===null||s===void 0?void 0:s(c))n=be._`${n}${u}${this.opts._n}`;else throw new Um(c);a.set(c,hu.Completed)})}return n}}at.ValueScope=zm});var W=b(function(X){Object.defineProperty(X,"__esModule",{value:!0});X.or=X.and=X.not=X.CodeGen=X.operators=X.varKinds=X.ValueScopeName=X.ValueScope=X.Scope=X.Name=X.regexpCode=X.stringify=X.getProperty=X.nil=X.strConcat=X.str=X._=void 0;var j=di(),Me=vu(),Xr=di();Object.defineProperty(X,"_",{enumerable:!0,get:function(){return Xr._}});Object.defineProperty(X,"str",{enumerable:!0,get:function(){return Xr.str}});Object.defineProperty(X,"strConcat",{enumerable:!0,get:function(){return Xr.strConcat}});Object.defineProperty(X,"nil",{enumerable:!0,get:function(){return Xr.nil}});Object.defineProperty(X,"getProperty",{enumerable:!0,get:function(){return Xr.getProperty}});Object.defineProperty(X,"stringify",{enumerable:!0,get:function(){return Xr.stringify}});Object.defineProperty(X,"regexpCode",{enumerable:!0,get:function(){return Xr.regexpCode}});Object.defineProperty(X,"Name",{enumerable:!0,get:function(){return Xr.Name}});var Ao=vu();Object.defineProperty(X,"Scope",{enumerable:!0,get:function(){return Ao.Scope}});Object.defineProperty(X,"ValueScope",{enumerable:!0,get:function(){return Ao.ValueScope}});Object.defineProperty(X,"ValueScopeName",{enumerable:!0,get:function(){return Ao.ValueScopeName}});Object.defineProperty(X,"varKinds",{enumerable:!0,get:function(){return Ao.varKinds}});X.operators={GT:new j._Code(">"),GTE:new j._Code(">="),LT:new j._Code("<"),LTE:new j._Code("<="),EQ:new j._Code("==="),NEQ:new j._Code("!=="),NOT:new j._Code("!"),OR:new j._Code("||"),AND:new j._Code("&&"),ADD:new j._Code("+")};class Zr{optimizeNodes(){return this}optimizeNames(e,t){return this}}class Fm extends Zr{constructor(e,t,r){super();this.varKind=e,this.name=t,this.rhs=r}render({es5:e,_n:t}){let r=e?Me.varKinds.var:this.varKind,s=this.rhs===void 0?"":` = ${this.rhs}`;return`${r} ${this.name}${s};`+t}optimizeNames(e,t){if(!e[this.name.str])return;if(this.rhs)this.rhs=yn(this.rhs,e,t);return this}get names(){return this.rhs instanceof j._CodeOrName?this.rhs.names:{}}}class wu extends Zr{constructor(e,t,r){super();this.lhs=e,this.rhs=t,this.sideEffects=r}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,t){if(this.lhs instanceof j.Name&&!e[this.lhs.str]&&!this.sideEffects)return;return this.rhs=yn(this.rhs,e,t),this}get names(){let e=this.lhs instanceof j.Name?{}:{...this.lhs.names};return To(e,this.rhs)}}class Lm extends wu{constructor(e,t,r,s){super(e,r,s);this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}}class Hm extends Zr{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}}class Km extends Zr{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}}class Gm extends Zr{constructor(e){super();this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}}class Jm extends Zr{constructor(e){super();this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,t){return this.code=yn(this.code,e,t),this}get names(){return this.code instanceof j._CodeOrName?this.code.names:{}}}class xo extends Zr{constructor(e=[]){super();this.nodes=e}render(e){return this.nodes.reduce((t,r)=>t+r.render(e),"")}optimizeNodes(){let{nodes:e}=this,t=e.length;while(t--){let r=e[t].optimizeNodes();if(Array.isArray(r))e.splice(t,1,...r);else if(r)e[t]=r;else e.splice(t,1)}return e.length>0?this:void 0}optimizeNames(e,t){let{nodes:r}=this,s=r.length;while(s--){let n=r[s];if(n.optimizeNames(e,t))continue;GS(e,n.names),r.splice(s,1)}return r.length>0?this:void 0}get names(){return this.nodes.reduce((e,t)=>Is(e,t.names),{})}}class Yr extends xo{render(e){return"{"+e._n+super.render(e)+"}"+e._n}}class Wm extends xo{}class fi extends Yr{}fi.kind="else";class Rr extends Yr{constructor(e,t){super(t);this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);if(this.else)t+="else "+this.else.render(e);return t}optimizeNodes(){super.optimizeNodes();let e=this.condition;if(e===!0)return this.nodes;let t=this.else;if(t){let r=t.optimizeNodes();t=this.else=Array.isArray(r)?new fi(r):r}if(t){if(e===!1)return t instanceof Rr?t:t.nodes;if(this.nodes.length)return this;return new Rr(Ym(e),t instanceof Rr?[t]:t.nodes)}if(e===!1||!this.nodes.length)return;return this}optimizeNames(e,t){var r;if(this.else=(r=this.else)===null||r===void 0?void 0:r.optimizeNames(e,t),!(super.optimizeNames(e,t)||this.else))return;return this.condition=yn(this.condition,e,t),this}get names(){let e=super.names;if(To(e,this.condition),this.else)Is(e,this.else.names);return e}}Rr.kind="if";class hn extends Yr{}hn.kind="for";class Qm extends hn{constructor(e){super();this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iteration=yn(this.iteration,e,t),this}get names(){return Is(super.names,this.iteration.names)}}class Bm extends hn{constructor(e,t,r,s){super();this.varKind=e,this.name=t,this.from=r,this.to=s}render(e){let t=e.es5?Me.varKinds.var:this.varKind,{name:r,from:s,to:n}=this;return`for(${t} ${r}=${s}; ${r}<${n}; ${r}++)`+super.render(e)}get names(){let e=To(super.names,this.from);return To(e,this.to)}}class $u extends hn{constructor(e,t,r,s){super();this.loop=e,this.varKind=t,this.name=r,this.iterable=s}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iterable=yn(this.iterable,e,t),this}get names(){return Is(super.names,this.iterable.names)}}class ko extends Yr{constructor(e,t,r){super();this.name=e,this.args=t,this.async=r}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}}ko.kind="func";class Ro extends xo{render(e){return"return "+super.render(e)}}Ro.kind="return";class Xm extends Yr{render(e){let t="try"+super.render(e);if(this.catch)t+=this.catch.render(e);if(this.finally)t+=this.finally.render(e);return t}optimizeNodes(){var e,t;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(e,t){var r,s;return super.optimizeNames(e,t),(r=this.catch)===null||r===void 0||r.optimizeNames(e,t),(s=this.finally)===null||s===void 0||s.optimizeNames(e,t),this}get names(){let e=super.names;if(this.catch)Is(e,this.catch.names);if(this.finally)Is(e,this.finally.names);return e}}class Io extends Yr{constructor(e){super();this.error=e}render(e){return`catch(${this.error})`+super.render(e)}}Io.kind="catch";class Oo extends Yr{render(e){return"finally"+super.render(e)}}Oo.kind="finally";class Zm{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?`
9
+ `:""},this._extScope=e,this._scope=new Me.Scope({parent:e}),this._nodes=[new Wm]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,t){let r=this._extScope.value(e,t);return(this._values[r.prefix]||(this._values[r.prefix]=new Set)).add(r),r}getScopeValue(e,t){return this._extScope.getValue(e,t)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,t,r,s){let n=this._scope.toName(t);if(r!==void 0&&s)this._constants[n.str]=r;return this._leafNode(new Fm(e,n,r)),n}const(e,t,r){return this._def(Me.varKinds.const,e,t,r)}let(e,t,r){return this._def(Me.varKinds.let,e,t,r)}var(e,t,r){return this._def(Me.varKinds.var,e,t,r)}assign(e,t,r){return this._leafNode(new wu(e,t,r))}add(e,t){return this._leafNode(new Lm(e,X.operators.ADD,t))}code(e){if(typeof e=="function")e();else if(e!==j.nil)this._leafNode(new Jm(e));return this}object(...e){let t=["{"];for(let[r,s]of e){if(t.length>1)t.push(",");if(t.push(r),r!==s||this.opts.es5)t.push(":"),j.addCodeArg(t,s)}return t.push("}"),new j._Code(t)}if(e,t,r){if(this._blockNode(new Rr(e)),t&&r)this.code(t).else().code(r).endIf();else if(t)this.code(t).endIf();else if(r)throw Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new Rr(e))}else(){return this._elseNode(new fi)}endIf(){return this._endBlockNode(Rr,fi)}_for(e,t){if(this._blockNode(e),t)this.code(t).endFor();return this}for(e,t){return this._for(new Qm(e),t)}forRange(e,t,r,s,n=this.opts.es5?Me.varKinds.var:Me.varKinds.let){let i=this._scope.toName(e);return this._for(new Bm(n,i,t,r),()=>s(i))}forOf(e,t,r,s=Me.varKinds.const){let n=this._scope.toName(e);if(this.opts.es5){let i=t instanceof j.Name?t:this.var("_arr",t);return this.forRange("_i",0,j._`${i}.length`,(o)=>{this.var(n,j._`${i}[${o}]`),r(n)})}return this._for(new $u("of",s,n,t),()=>r(n))}forIn(e,t,r,s=this.opts.es5?Me.varKinds.var:Me.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,j._`Object.keys(${t})`,r);let n=this._scope.toName(e);return this._for(new $u("in",s,n,t),()=>r(n))}endFor(){return this._endBlockNode(hn)}label(e){return this._leafNode(new Hm(e))}break(e){return this._leafNode(new Km(e))}return(e){let t=new Ro;if(this._blockNode(t),this.code(e),t.nodes.length!==1)throw Error('CodeGen: "return" should have one node');return this._endBlockNode(Ro)}try(e,t,r){if(!t&&!r)throw Error('CodeGen: "try" without "catch" and "finally"');let s=new Xm;if(this._blockNode(s),this.code(e),t){let n=this.name("e");this._currNode=s.catch=new Io(n),t(n)}if(r)this._currNode=s.finally=new Oo,this.code(r);return this._endBlockNode(Io,Oo)}throw(e){return this._leafNode(new Gm(e))}block(e,t){if(this._blockStarts.push(this._nodes.length),e)this.code(e).endBlock(t);return this}endBlock(e){let t=this._blockStarts.pop();if(t===void 0)throw Error("CodeGen: not in self-balancing block");let r=this._nodes.length-t;if(r<0||e!==void 0&&r!==e)throw Error(`CodeGen: wrong number of nodes: ${r} vs ${e} expected`);return this._nodes.length=t,this}func(e,t=j.nil,r,s){if(this._blockNode(new ko(e,t,r)),s)this.code(s).endFunc();return this}endFunc(){return this._endBlockNode(ko)}optimize(e=1){while(e-- >0)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,t){let r=this._currNode;if(r instanceof e||t&&r instanceof t)return this._nodes.pop(),this;throw Error(`CodeGen: not in block "${t?`${e.kind}/${t.kind}`:e.kind}"`)}_elseNode(e){let t=this._currNode;if(!(t instanceof Rr))throw Error('CodeGen: "else" without "if"');return this._currNode=t.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let t=this._nodes;t[t.length-1]=e}}X.CodeGen=Zm;function Is(e,t){for(let r in t)e[r]=(e[r]||0)+(t[r]||0);return e}function To(e,t){return t instanceof j._CodeOrName?Is(e,t.names):e}function yn(e,t,r){if(e instanceof j.Name)return s(e);if(!n(e))return e;return new j._Code(e._items.reduce((i,o)=>{if(o instanceof j.Name)o=s(o);if(o instanceof j._Code)i.push(...o._items);else i.push(o);return i},[]));function s(i){let o=r[i.str];if(o===void 0||t[i.str]!==1)return i;return delete t[i.str],o}function n(i){return i instanceof j._Code&&i._items.some((o)=>o instanceof j.Name&&t[o.str]===1&&r[o.str]!==void 0)}}function GS(e,t){for(let r in t)e[r]=(e[r]||0)-(t[r]||0)}function Ym(e){return typeof e=="boolean"||typeof e=="number"||e===null?!e:j._`!${_u(e)}`}X.not=Ym;var JS=eh(X.operators.AND);function WS(...e){return e.reduce(JS)}X.and=WS;var QS=eh(X.operators.OR);function BS(...e){return e.reduce(QS)}X.or=BS;function eh(e){return(t,r)=>t===j.nil?r:r===j.nil?t:j._`${_u(t)} ${e} ${_u(r)}`}function _u(e){return e instanceof j.Name?e:j._`(${e})`}});var le=b(function(Z){Object.defineProperty(Z,"__esModule",{value:!0});Z.checkStrictMode=Z.getErrorPath=Z.Type=Z.useFunc=Z.setEvaluated=Z.evaluatedPropsToName=Z.mergeEvaluated=Z.eachItem=Z.unescapeJsonPointer=Z.escapeJsonPointer=Z.escapeFragment=Z.unescapeFragment=Z.schemaRefOrVal=Z.schemaHasRulesButRef=Z.schemaHasRules=Z.checkUnknownRules=Z.alwaysValidSchema=Z.toHash=void 0;var U=W(),sh=di();function XS(e){let t={};for(let r of e)t[r]=!0;return t}Z.toHash=XS;function ZS(e,t){if(typeof t=="boolean")return t;if(Object.keys(t).length===0)return!0;return nh(e,t),!ih(t,e.self.RULES.all)}Z.alwaysValidSchema=ZS;function nh(e,t=e.schema){let{opts:r,self:s}=e;if(!r.strictSchema)return;if(typeof t==="boolean")return;let n=s.RULES.keywords;for(let i in t)if(!n[i])uh(e,`unknown keyword: "${i}"`)}Z.checkUnknownRules=nh;function ih(e,t){if(typeof e=="boolean")return!e;for(let r in e)if(t[r])return!0;return!1}Z.schemaHasRules=ih;function YS(e,t){if(typeof e=="boolean")return!e;for(let r in e)if(r!=="$ref"&&t.all[r])return!0;return!1}Z.schemaHasRulesButRef=YS;function eP({topSchemaRef:e,schemaPath:t},r,s,n){if(!n){if(typeof r=="number"||typeof r=="boolean")return r;if(typeof r=="string")return U._`${r}`}return U._`${e}${t}${U.getProperty(s)}`}Z.schemaRefOrVal=eP;function tP(e){return oh(decodeURIComponent(e))}Z.unescapeFragment=tP;function rP(e){return encodeURIComponent(bu(e))}Z.escapeFragment=rP;function bu(e){if(typeof e=="number")return`${e}`;return e.replace(/~/g,"~0").replace(/\//g,"~1")}Z.escapeJsonPointer=bu;function oh(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}Z.unescapeJsonPointer=oh;function sP(e,t){if(Array.isArray(e))for(let r of e)t(r);else t(e)}Z.eachItem=sP;function th({mergeNames:e,mergeToName:t,mergeValues:r,resultToName:s}){return(n,i,o,a)=>{let c=o===void 0?i:o instanceof U.Name?(i instanceof U.Name?e(n,i,o):t(n,i,o),o):i instanceof U.Name?(t(n,o,i),i):r(i,o);return a===U.Name&&!(c instanceof U.Name)?s(n,c):c}}Z.mergeEvaluated={props:th({mergeNames:(e,t,r)=>e.if(U._`${r} !== true && ${t} !== undefined`,()=>{e.if(U._`${t} === true`,()=>e.assign(r,!0),()=>e.assign(r,U._`${r} || {}`).code(U._`Object.assign(${r}, ${t})`))}),mergeToName:(e,t,r)=>e.if(U._`${r} !== true`,()=>{if(t===!0)e.assign(r,!0);else e.assign(r,U._`${r} || {}`),Su(e,r,t)}),mergeValues:(e,t)=>e===!0?!0:{...e,...t},resultToName:ah}),items:th({mergeNames:(e,t,r)=>e.if(U._`${r} !== true && ${t} !== undefined`,()=>e.assign(r,U._`${t} === true ? true : ${r} > ${t} ? ${r} : ${t}`)),mergeToName:(e,t,r)=>e.if(U._`${r} !== true`,()=>e.assign(r,t===!0?!0:U._`${r} > ${t} ? ${r} : ${t}`)),mergeValues:(e,t)=>e===!0?!0:Math.max(e,t),resultToName:(e,t)=>e.var("items",t)})};function ah(e,t){if(t===!0)return e.var("props",!0);let r=e.var("props",U._`{}`);if(t!==void 0)Su(e,r,t);return r}Z.evaluatedPropsToName=ah;function Su(e,t,r){Object.keys(r).forEach((s)=>e.assign(U._`${t}${U.getProperty(s)}`,!0))}Z.setEvaluated=Su;var rh={};function nP(e,t){return e.scopeValue("func",{ref:t,code:rh[t.code]||(rh[t.code]=new sh._Code(t.code))})}Z.useFunc=nP;var ch;(function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"})(ch=Z.Type||(Z.Type={}));function iP(e,t,r){if(e instanceof U.Name){let s=t===ch.Num;return r?s?U._`"[" + ${e} + "]"`:U._`"['" + ${e} + "']"`:s?U._`"/" + ${e}`:U._`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return r?U.getProperty(e).toString():"/"+bu(e)}Z.getErrorPath=iP;function uh(e,t,r=e.opts.strictSchema){if(!r)return;if(t=`strict mode: ${t}`,r===!0)throw Error(t);e.self.logger.warn(t)}Z.checkStrictMode=uh});var Ir=b(function(Pu){Object.defineProperty(Pu,"__esModule",{value:!0});var pe=W(),oP={data:new pe.Name("data"),valCxt:new pe.Name("valCxt"),instancePath:new pe.Name("instancePath"),parentData:new pe.Name("parentData"),parentDataProperty:new pe.Name("parentDataProperty"),rootData:new pe.Name("rootData"),dynamicAnchors:new pe.Name("dynamicAnchors"),vErrors:new pe.Name("vErrors"),errors:new pe.Name("errors"),this:new pe.Name("this"),self:new pe.Name("self"),scope:new pe.Name("scope"),json:new pe.Name("json"),jsonPos:new pe.Name("jsonPos"),jsonLen:new pe.Name("jsonLen"),jsonPart:new pe.Name("jsonPart")};Pu.default=oP});var pi=b(function(st){Object.defineProperty(st,"__esModule",{value:!0});st.extendErrors=st.resetErrorsCount=st.reportExtraError=st.reportError=st.keyword$DataError=st.keywordError=void 0;var q=W(),es=le(),ct=Ir();st.keywordError={message:({keyword:e})=>q.str`must pass "${e}" keyword validation`};st.keyword$DataError={message:({keyword:e,schemaType:t})=>t?q.str`"${e}" keyword must be ${t} ($data)`:q.str`"${e}" keyword is invalid ($data)`};function aP(e,t=st.keywordError,r,s){let{it:n}=e,{gen:i,compositeRule:o,allErrors:a}=n,c=fh(e,t,r);if(s!==null&&s!==void 0?s:o||a)lh(i,c);else dh(n,q._`[${c}]`)}st.reportError=aP;function cP(e,t=st.keywordError,r){let{it:s}=e,{gen:n,compositeRule:i,allErrors:o}=s,a=fh(e,t,r);if(lh(n,a),!(i||o))dh(s,ct.default.vErrors)}st.reportExtraError=cP;function uP(e,t){e.assign(ct.default.errors,t),e.if(q._`${ct.default.vErrors} !== null`,()=>e.if(t,()=>e.assign(q._`${ct.default.vErrors}.length`,t),()=>e.assign(ct.default.vErrors,null)))}st.resetErrorsCount=uP;function lP({gen:e,keyword:t,schemaValue:r,data:s,errsCount:n,it:i}){if(n===void 0)throw Error("ajv implementation error");let o=e.name("err");e.forRange("i",n,ct.default.errors,(a)=>{if(e.const(o,q._`${ct.default.vErrors}[${a}]`),e.if(q._`${o}.instancePath === undefined`,()=>e.assign(q._`${o}.instancePath`,q.strConcat(ct.default.instancePath,i.errorPath))),e.assign(q._`${o}.schemaPath`,q.str`${i.errSchemaPath}/${t}`),i.opts.verbose)e.assign(q._`${o}.schema`,r),e.assign(q._`${o}.data`,s)})}st.extendErrors=lP;function lh(e,t){let r=e.const("err",t);e.if(q._`${ct.default.vErrors} === null`,()=>e.assign(ct.default.vErrors,q._`[${r}]`),q._`${ct.default.vErrors}.push(${r})`),e.code(q._`${ct.default.errors}++`)}function dh(e,t){let{gen:r,validateName:s,schemaEnv:n}=e;if(n.$async)r.throw(q._`new ${e.ValidationError}(${t})`);else r.assign(q._`${s}.errors`,t),r.return(!1)}var Os={keyword:new q.Name("keyword"),schemaPath:new q.Name("schemaPath"),params:new q.Name("params"),propertyName:new q.Name("propertyName"),message:new q.Name("message"),schema:new q.Name("schema"),parentSchema:new q.Name("parentSchema")};function fh(e,t,r){let{createErrors:s}=e.it;if(s===!1)return q._`{}`;return dP(e,t,r)}function dP(e,t,r={}){let{gen:s,it:n}=e,i=[fP(n,r),pP(e,r)];return mP(e,t,i),s.object(...i)}function fP({errorPath:e},{instancePath:t}){let r=t?q.str`${e}${es.getErrorPath(t,es.Type.Str)}`:e;return[ct.default.instancePath,q.strConcat(ct.default.instancePath,r)]}function pP({keyword:e,it:{errSchemaPath:t}},{schemaPath:r,parentSchema:s}){let n=s?t:q.str`${t}/${e}`;if(r)n=q.str`${n}${es.getErrorPath(r,es.Type.Str)}`;return[Os.schemaPath,n]}function mP(e,{params:t,message:r},s){let{keyword:n,data:i,schemaValue:o,it:a}=e,{opts:c,propertyName:u,topSchemaRef:l,schemaPath:d}=a;if(s.push([Os.keyword,n],[Os.params,typeof t=="function"?t(e):t||q._`{}`]),c.messages)s.push([Os.message,typeof r=="function"?r(e):r]);if(c.verbose)s.push([Os.schema,o],[Os.parentSchema,q._`${l}${d}`],[ct.default.data,i]);if(u)s.push([Os.propertyName,u])}});var yh=b(function(gn){Object.defineProperty(gn,"__esModule",{value:!0});gn.boolOrEmptySchema=gn.topBoolOrEmptySchema=void 0;var ph=pi(),mh=W(),hP=Ir(),yP={message:"boolean schema is false"};function gP(e){let{gen:t,schema:r,validateName:s}=e;if(r===!1)hh(e,!1);else if(typeof r=="object"&&r.$async===!0)t.return(hP.default.data);else t.assign(mh._`${s}.errors`,null),t.return(!0)}gn.topBoolOrEmptySchema=gP;function vP(e,t){let{gen:r,schema:s}=e;if(s===!1)r.var(t,!1),hh(e);else r.var(t,!0)}gn.boolOrEmptySchema=vP;function hh(e,t){let{gen:r,data:s}=e;ph.reportError({gen:r,keyword:"false schema",data:s,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e},yP,void 0,t)}});var Eu=b(function(vn){Object.defineProperty(vn,"__esModule",{value:!0});vn.getRules=vn.isJSONType=void 0;var $P=["string","number","integer","boolean","null","object","array"],_P=new Set($P);function wP(e){return typeof e=="string"&&_P.has(e)}vn.isJSONType=wP;function bP(){let e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}vn.getRules=bP});var ku=b(function(ts){Object.defineProperty(ts,"__esModule",{value:!0});ts.shouldUseRule=ts.shouldUseGroup=ts.schemaHasRulesForType=void 0;function SP({schema:e,self:t},r){let s=t.RULES.types[r];return s&&s!==!0&&gh(e,s)}ts.schemaHasRulesForType=SP;function gh(e,t){return t.rules.some((r)=>vh(e,r))}ts.shouldUseGroup=gh;function vh(e,t){var r;return e[t.keyword]!==void 0||((r=t.definition.implements)===null||r===void 0?void 0:r.some((s)=>e[s]!==void 0))}ts.shouldUseRule=vh});var hi=b(function(Ze){Object.defineProperty(Ze,"__esModule",{value:!0});Ze.reportTypeError=Ze.checkDataTypes=Ze.checkDataType=Ze.coerceAndCheckDataType=Ze.getJSONTypes=Ze.getSchemaTypes=Ze.DataType=void 0;var $h=Eu(),_h=ku(),wh=pi(),A=W(),jo=le(),mi;(function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"})(mi=Ze.DataType||(Ze.DataType={}));function PP(e){let t=bh(e.type);if(t.includes("null")){if(e.nullable===!1)throw Error("type: null contradicts nullable: false")}else{if(!t.length&&e.nullable!==void 0)throw Error('"nullable" cannot be used without "type"');if(e.nullable===!0)t.push("null")}return t}Ze.getSchemaTypes=PP;function bh(e){let t=Array.isArray(e)?e:e?[e]:[];if(t.every($h.isJSONType))return t;throw Error("type must be JSONType or JSONType[]: "+t.join(","))}Ze.getJSONTypes=bh;function EP(e,t){let{gen:r,data:s,opts:n}=e,i=kP(t,n.coerceTypes),o=t.length>0&&!(i.length===0&&t.length===1&&_h.schemaHasRulesForType(e,t[0]));if(o){let a=Iu(t,s,n.strictNumbers,mi.Wrong);r.if(a,()=>{if(i.length)RP(e,t,i);else Ou(e)})}return o}Ze.coerceAndCheckDataType=EP;var Sh=new Set(["string","number","integer","boolean","null"]);function kP(e,t){return t?e.filter((r)=>Sh.has(r)||t==="array"&&r==="array"):[]}function RP(e,t,r){let{gen:s,data:n,opts:i}=e,o=s.let("dataType",A._`typeof ${n}`),a=s.let("coerced",A._`undefined`);if(i.coerceTypes==="array")s.if(A._`${o} == 'object' && Array.isArray(${n}) && ${n}.length == 1`,()=>s.assign(n,A._`${n}[0]`).assign(o,A._`typeof ${n}`).if(Iu(t,n,i.strictNumbers),()=>s.assign(a,n)));s.if(A._`${a} !== undefined`);for(let u of r)if(Sh.has(u)||u==="array"&&i.coerceTypes==="array")c(u);s.else(),Ou(e),s.endIf(),s.if(A._`${a} !== undefined`,()=>{s.assign(n,a),IP(e,a)});function c(u){switch(u){case"string":s.elseIf(A._`${o} == "number" || ${o} == "boolean"`).assign(a,A._`"" + ${n}`).elseIf(A._`${n} === null`).assign(a,A._`""`);return;case"number":s.elseIf(A._`${o} == "boolean" || ${n} === null
10
+ || (${o} == "string" && ${n} && ${n} == +${n})`).assign(a,A._`+${n}`);return;case"integer":s.elseIf(A._`${o} === "boolean" || ${n} === null
11
+ || (${o} === "string" && ${n} && ${n} == +${n} && !(${n} % 1))`).assign(a,A._`+${n}`);return;case"boolean":s.elseIf(A._`${n} === "false" || ${n} === 0 || ${n} === null`).assign(a,!1).elseIf(A._`${n} === "true" || ${n} === 1`).assign(a,!0);return;case"null":s.elseIf(A._`${n} === "" || ${n} === 0 || ${n} === false`),s.assign(a,null);return;case"array":s.elseIf(A._`${o} === "string" || ${o} === "number"
12
+ || ${o} === "boolean" || ${n} === null`).assign(a,A._`[${n}]`)}}}function IP({gen:e,parentData:t,parentDataProperty:r},s){e.if(A._`${t} !== undefined`,()=>e.assign(A._`${t}[${r}]`,s))}function Ru(e,t,r,s=mi.Correct){let n=s===mi.Correct?A.operators.EQ:A.operators.NEQ,i;switch(e){case"null":return A._`${t} ${n} null`;case"array":i=A._`Array.isArray(${t})`;break;case"object":i=A._`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case"integer":i=o(A._`!(${t} % 1) && !isNaN(${t})`);break;case"number":i=o();break;default:return A._`typeof ${t} ${n} ${e}`}return s===mi.Correct?i:A.not(i);function o(a=A.nil){return A.and(A._`typeof ${t} == "number"`,a,r?A._`isFinite(${t})`:A.nil)}}Ze.checkDataType=Ru;function Iu(e,t,r,s){if(e.length===1)return Ru(e[0],t,r,s);let n,i=jo.toHash(e);if(i.array&&i.object){let o=A._`typeof ${t} != "object"`;n=i.null?o:A._`!${t} || ${o}`,delete i.null,delete i.array,delete i.object}else n=A.nil;if(i.number)delete i.integer;for(let o in i)n=A.and(n,Ru(o,t,r,s));return n}Ze.checkDataTypes=Iu;var OP={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>typeof e=="string"?A._`{type: ${e}}`:A._`{type: ${t}}`};function Ou(e){let t=TP(e);wh.reportError(t,OP)}Ze.reportTypeError=Ou;function TP(e){let{gen:t,data:r,schema:s}=e,n=jo.schemaRefOrVal(e,s,"type");return{gen:t,keyword:"type",data:r,schema:s.type,schemaCode:n,schemaValue:n,parentSchema:s,params:{},it:e}}});var kh=b(function(Co){Object.defineProperty(Co,"__esModule",{value:!0});Co.assignDefaults=void 0;var Tt=W(),Eh=le();function AP(e,t){let{properties:r,items:s}=e.schema;if(t==="object"&&r)for(let n in r)Ph(e,n,r[n].default);else if(t==="array"&&Array.isArray(s))s.forEach((n,i)=>Ph(e,i,n.default))}Co.assignDefaults=AP;function Ph(e,t,r){let{gen:s,compositeRule:n,data:i,opts:o}=e;if(r===void 0)return;let a=Tt._`${i}${Tt.getProperty(t)}`;if(n){Eh.checkStrictMode(e,`default is ignored for: ${a}`);return}let c=Tt._`${a} === undefined`;if(o.useDefaults==="empty")c=Tt._`${c} || ${a} === null || ${a} === ""`;s.if(c,Tt._`${a} = ${Tt.stringify(r)}`)}});var At=b(function(Se){Object.defineProperty(Se,"__esModule",{value:!0});Se.validateUnion=Se.validateArray=Se.usePattern=Se.callValidateCode=Se.schemaProperties=Se.allSchemaProperties=Se.noPropertyInData=Se.propertyInData=Se.isOwnProperty=Se.hasPropFunc=Se.reportMissingProp=Se.checkMissingProp=Se.checkReportMissingProp=void 0;var F=W(),$n=le(),rs=Ir(),Rh=le();function xP(e,t){let{gen:r,data:s,it:n}=e;r.if(Au(r,s,t,n.opts.ownProperties),()=>{e.setParams({missingProperty:F._`${t}`},!0),e.error()})}Se.checkReportMissingProp=xP;function jP({gen:e,data:t,it:{opts:r}},s,n){return F.or(...s.map((i)=>F.and(Au(e,t,i,r.ownProperties),F._`${n} = ${i}`)))}Se.checkMissingProp=jP;function CP(e,t){e.setParams({missingProperty:t},!0),e.error()}Se.reportMissingProp=CP;function Ih(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:F._`Object.prototype.hasOwnProperty`})}Se.hasPropFunc=Ih;function Tu(e,t,r){return F._`${Ih(e)}.call(${t}, ${r})`}Se.isOwnProperty=Tu;function NP(e,t,r,s){let n=F._`${t}${F.getProperty(r)} !== undefined`;return s?F._`${n} && ${Tu(e,t,r)}`:n}Se.propertyInData=NP;function Au(e,t,r,s){let n=F._`${t}${F.getProperty(r)} === undefined`;return s?F.or(n,F.not(Tu(e,t,r))):n}Se.noPropertyInData=Au;function Oh(e){return e?Object.keys(e).filter((t)=>t!=="__proto__"):[]}Se.allSchemaProperties=Oh;function qP(e,t){return Oh(t).filter((r)=>!$n.alwaysValidSchema(e,t[r]))}Se.schemaProperties=qP;function DP({schemaCode:e,data:t,it:{gen:r,topSchemaRef:s,schemaPath:n,errorPath:i},it:o},a,c,u){let l=u?F._`${e}, ${t}, ${s}${n}`:t,d=[[rs.default.instancePath,F.strConcat(rs.default.instancePath,i)],[rs.default.parentData,o.parentData],[rs.default.parentDataProperty,o.parentDataProperty],[rs.default.rootData,rs.default.rootData]];if(o.opts.dynamicRef)d.push([rs.default.dynamicAnchors,rs.default.dynamicAnchors]);let v=F._`${l}, ${r.object(...d)}`;return c!==F.nil?F._`${a}.call(${c}, ${v})`:F._`${a}(${v})`}Se.callValidateCode=DP;var MP=F._`new RegExp`;function VP({gen:e,it:{opts:t}},r){let s=t.unicodeRegExp?"u":"",{regExp:n}=t.code,i=n(r,s);return e.scopeValue("pattern",{key:i.toString(),ref:i,code:F._`${n.code==="new RegExp"?MP:Rh.useFunc(e,n)}(${r}, ${s})`})}Se.usePattern=VP;function UP(e){let{gen:t,data:r,keyword:s,it:n}=e,i=t.name("valid");if(n.allErrors){let a=t.let("valid",!0);return o(()=>t.assign(a,!1)),a}return t.var(i,!0),o(()=>t.break()),i;function o(a){let c=t.const("len",F._`${r}.length`);t.forRange("i",0,c,(u)=>{e.subschema({keyword:s,dataProp:u,dataPropType:$n.Type.Num},i),t.if(F.not(i),a)})}}Se.validateArray=UP;function zP(e){let{gen:t,schema:r,keyword:s,it:n}=e;if(!Array.isArray(r))throw Error("ajv implementation error");if(r.some((c)=>$n.alwaysValidSchema(n,c))&&!n.opts.unevaluated)return;let o=t.let("valid",!1),a=t.name("_valid");t.block(()=>r.forEach((c,u)=>{let l=e.subschema({keyword:s,schemaProp:u,compositeRule:!0},a);if(t.assign(o,F._`${o} || ${a}`),!e.mergeValidEvaluated(l,a))t.if(F.not(o))})),e.result(o,()=>e.reset(),()=>e.error(!0))}Se.validateUnion=zP});var Ch=b(function(ir){Object.defineProperty(ir,"__esModule",{value:!0});ir.validateKeywordUsage=ir.validSchemaType=ir.funcKeywordCode=ir.macroKeywordCode=void 0;var ge=W(),Ts=Ir(),Ah=At(),xh=pi();function FP(e,t){let{gen:r,keyword:s,schema:n,parentSchema:i,it:o}=e,a=t.macro.call(o.self,n,i,o),c=jh(r,s,a);if(o.opts.validateSchema!==!1)o.self.validateSchema(a,!0);let u=r.name("valid");e.subschema({schema:a,schemaPath:ge.nil,errSchemaPath:`${o.errSchemaPath}/${s}`,topSchemaRef:c,compositeRule:!0},u),e.pass(u,()=>e.error(!0))}ir.macroKeywordCode=FP;function LP(e,t){var r;let{gen:s,keyword:n,schema:i,parentSchema:o,$data:a,it:c}=e;KP(c,t);let u=!a&&t.compile?t.compile.call(c.self,i,o,c):t.validate,l=jh(s,n,u),d=s.let("valid");e.block$data(d,v),e.ok((r=t.valid)!==null&&r!==void 0?r:d);function v(){if(t.errors===!1){if(p(),t.modifying)Th(e);_(()=>e.error())}else{let w=t.async?m():h();if(t.modifying)Th(e);_(()=>HP(e,w))}}function m(){let w=s.let("ruleErrs",null);return s.try(()=>p(ge._`await `),(I)=>s.assign(d,!1).if(ge._`${I} instanceof ${c.ValidationError}`,()=>s.assign(w,ge._`${I}.errors`),()=>s.throw(I))),w}function h(){let w=ge._`${l}.errors`;return s.assign(w,null),p(ge.nil),w}function p(w=t.async?ge._`await `:ge.nil){let I=c.opts.passContext?Ts.default.this:Ts.default.self,O=!(("compile"in t)&&!a||t.schema===!1);s.assign(d,ge._`${w}${Ah.callValidateCode(e,l,I,O)}`,t.modifying)}function _(w){var I;s.if(ge.not((I=t.valid)!==null&&I!==void 0?I:d),w)}}ir.funcKeywordCode=LP;function Th(e){let{gen:t,data:r,it:s}=e;t.if(s.parentData,()=>t.assign(r,ge._`${s.parentData}[${s.parentDataProperty}]`))}function HP(e,t){let{gen:r}=e;r.if(ge._`Array.isArray(${t})`,()=>{r.assign(Ts.default.vErrors,ge._`${Ts.default.vErrors} === null ? ${t} : ${Ts.default.vErrors}.concat(${t})`).assign(Ts.default.errors,ge._`${Ts.default.vErrors}.length`),xh.extendErrors(e)},()=>e.error())}function KP({schemaEnv:e},t){if(t.async&&!e.$async)throw Error("async keyword in sync schema")}function jh(e,t,r){if(r===void 0)throw Error(`keyword "${t}" failed to compile`);return e.scopeValue("keyword",typeof r=="function"?{ref:r}:{ref:r,code:ge.stringify(r)})}function GP(e,t,r=!1){return!t.length||t.some((s)=>s==="array"?Array.isArray(e):s==="object"?e&&typeof e=="object"&&!Array.isArray(e):typeof e==s||r&&typeof e>"u")}ir.validSchemaType=GP;function JP({schema:e,opts:t,self:r,errSchemaPath:s},n,i){if(Array.isArray(n.keyword)?!n.keyword.includes(i):n.keyword!==i)throw Error("ajv implementation error");let o=n.dependencies;if(o===null||o===void 0?void 0:o.some((a)=>!Object.prototype.hasOwnProperty.call(e,a)))throw Error(`parent schema must have dependencies of ${i}: ${o.join(",")}`);if(n.validateSchema){if(!n.validateSchema(e[i])){let c=`keyword "${i}" value is invalid at path "${s}": `+r.errorsText(n.validateSchema.errors);if(t.validateSchema==="log")r.logger.error(c);else throw Error(c)}}}ir.validateKeywordUsage=JP});var Nh=b(function(ss){Object.defineProperty(ss,"__esModule",{value:!0});ss.extendSubschemaMode=ss.extendSubschemaData=ss.getSubschema=void 0;var Je=W(),No=le();function WP(e,{keyword:t,schemaProp:r,schema:s,schemaPath:n,errSchemaPath:i,topSchemaRef:o}){if(t!==void 0&&s!==void 0)throw Error('both "keyword" and "schema" passed, only one allowed');if(t!==void 0){let a=e.schema[t];return r===void 0?{schema:a,schemaPath:Je._`${e.schemaPath}${Je.getProperty(t)}`,errSchemaPath:`${e.errSchemaPath}/${t}`}:{schema:a[r],schemaPath:Je._`${e.schemaPath}${Je.getProperty(t)}${Je.getProperty(r)}`,errSchemaPath:`${e.errSchemaPath}/${t}/${No.escapeFragment(r)}`}}if(s!==void 0){if(n===void 0||i===void 0||o===void 0)throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:s,schemaPath:n,topSchemaRef:o,errSchemaPath:i}}throw Error('either "keyword" or "schema" must be passed')}ss.getSubschema=WP;function QP(e,t,{dataProp:r,dataPropType:s,data:n,dataTypes:i,propertyName:o}){if(n!==void 0&&r!==void 0)throw Error('both "data" and "dataProp" passed, only one allowed');let{gen:a}=t;if(r!==void 0){let{errorPath:u,dataPathArr:l,opts:d}=t,v=a.let("data",Je._`${t.data}${Je.getProperty(r)}`,!0);c(v),e.errorPath=Je.str`${u}${No.getErrorPath(r,s,d.jsPropertySyntax)}`,e.parentDataProperty=Je._`${r}`,e.dataPathArr=[...l,e.parentDataProperty]}if(n!==void 0){let u=n instanceof Je.Name?n:a.let("data",n,!0);if(c(u),o!==void 0)e.propertyName=o}if(i)e.dataTypes=i;function c(u){e.data=u,e.dataLevel=t.dataLevel+1,e.dataTypes=[],t.definedProperties=new Set,e.parentData=t.data,e.dataNames=[...t.dataNames,u]}}ss.extendSubschemaData=QP;function BP(e,{jtdDiscriminator:t,jtdMetadata:r,compositeRule:s,createErrors:n,allErrors:i}){if(s!==void 0)e.compositeRule=s;if(n!==void 0)e.createErrors=n;if(i!==void 0)e.allErrors=i;e.jtdDiscriminator=t,e.jtdMetadata=r}ss.extendSubschemaMode=BP});var yi=b(function(ht){Object.defineProperty(ht,"__esModule",{value:!0});ht.getSchemaRefs=ht.resolveUrl=ht.normalizeId=ht._getFullPath=ht.getFullPath=ht.inlineRef=void 0;var qh=le(),XP=ti(),ZP=ac(),YP=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function eE(e,t=!0){if(typeof e=="boolean")return!0;if(t===!0)return!xu(e);if(!t)return!1;return Dh(e)<=t}ht.inlineRef=eE;var tE=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function xu(e){for(let t in e){if(tE.has(t))return!0;let r=e[t];if(Array.isArray(r)&&r.some(xu))return!0;if(typeof r=="object"&&xu(r))return!0}return!1}function Dh(e){let t=0;for(let r in e){if(r==="$ref")return 1/0;if(t++,YP.has(r))continue;if(typeof e[r]=="object")qh.eachItem(e[r],(s)=>t+=Dh(s));if(t===1/0)return 1/0}return t}function Mh(e,t="",r){if(r!==!1)t=_n(t);let s=e.parse(t);return Vh(e,s)}ht.getFullPath=Mh;function Vh(e,t){return e.serialize(t).split("#")[0]+"#"}ht._getFullPath=Vh;var rE=/#\/?$/;function _n(e){return e?e.replace(rE,""):""}ht.normalizeId=_n;function sE(e,t,r){return r=_n(r),e.resolve(t,r)}ht.resolveUrl=sE;var nE=/^[a-z_][-a-z0-9._]*$/i;function iE(e,t){if(typeof e=="boolean")return{};let{schemaId:r,uriResolver:s}=this.opts,n=_n(e[r]||t),i={"":n},o=Mh(s,n,!1),a={},c=new Set;return ZP(e,{allKeys:!0},(d,v,m,h)=>{if(h===void 0)return;let p=o+v,_=i[h];if(typeof d[r]=="string")_=w.call(this,d[r]);I.call(this,d.$anchor),I.call(this,d.$dynamicAnchor),i[v]=_;function w(O){let D=this.opts.uriResolver.resolve;if(O=_n(_?D(_,O):O),c.has(O))throw l(O);c.add(O);let S=this.refs[O];if(typeof S=="string")S=this.refs[S];if(typeof S=="object")u(d,S.schema,O);else if(O!==_n(p))if(O[0]==="#")u(d,a[O],O),a[O]=d;else this.refs[O]=p;return O}function I(O){if(typeof O=="string"){if(!nE.test(O))throw Error(`invalid anchor "${O}"`);w.call(this,`#${O}`)}}}),a;function u(d,v,m){if(v!==void 0&&!XP(d,v))throw l(m)}function l(d){return Error(`reference "${d}" resolves to more than one schema`)}}ht.getSchemaRefs=iE});var gi=b(function(ns){Object.defineProperty(ns,"__esModule",{value:!0});ns.getData=ns.KeywordCxt=ns.validateFunctionCode=void 0;var Do=yh(),qo=hi(),bn=ku(),is=hi(),Lh=kh(),ar=Ch(),wn=Nh(),R=W(),H=Ir(),Hh=yi(),Be=le(),or=pi();function oE(e){if(Jh(e)){if(Wh(e),Gh(e)){uE(e);return}}Kh(e,()=>Do.topBoolOrEmptySchema(e))}ns.validateFunctionCode=oE;function Kh({gen:e,validateName:t,schema:r,schemaEnv:s,opts:n},i){if(n.code.es5)e.func(t,R._`${H.default.data}, ${H.default.valCxt}`,s.$async,()=>{e.code(R._`"use strict"; ${Uh(r,n)}`),cE(e,n),e.code(i)});else e.func(t,R._`${H.default.data}, ${aE(n)}`,s.$async,()=>e.code(Uh(r,n)).code(i))}function aE(e){return R._`{${H.default.instancePath}="", ${H.default.parentData}, ${H.default.parentDataProperty}, ${H.default.rootData}=${H.default.data}${e.dynamicRef?R._`, ${H.default.dynamicAnchors}={}`:R.nil}}={}`}function cE(e,t){e.if(H.default.valCxt,()=>{if(e.var(H.default.instancePath,R._`${H.default.valCxt}.${H.default.instancePath}`),e.var(H.default.parentData,R._`${H.default.valCxt}.${H.default.parentData}`),e.var(H.default.parentDataProperty,R._`${H.default.valCxt}.${H.default.parentDataProperty}`),e.var(H.default.rootData,R._`${H.default.valCxt}.${H.default.rootData}`),t.dynamicRef)e.var(H.default.dynamicAnchors,R._`${H.default.valCxt}.${H.default.dynamicAnchors}`)},()=>{if(e.var(H.default.instancePath,R._`""`),e.var(H.default.parentData,R._`undefined`),e.var(H.default.parentDataProperty,R._`undefined`),e.var(H.default.rootData,H.default.data),t.dynamicRef)e.var(H.default.dynamicAnchors,R._`{}`)})}function uE(e){let{schema:t,opts:r,gen:s}=e;Kh(e,()=>{if(r.$comment&&t.$comment)Bh(e);if(mE(e),s.let(H.default.vErrors,null),s.let(H.default.errors,0),r.unevaluated)lE(e);Qh(e),gE(e)});return}function lE(e){let{gen:t,validateName:r}=e;e.evaluated=t.const("evaluated",R._`${r}.evaluated`),t.if(R._`${e.evaluated}.dynamicProps`,()=>t.assign(R._`${e.evaluated}.props`,R._`undefined`)),t.if(R._`${e.evaluated}.dynamicItems`,()=>t.assign(R._`${e.evaluated}.items`,R._`undefined`))}function Uh(e,t){let r=typeof e=="object"&&e[t.schemaId];return r&&(t.code.source||t.code.process)?R._`/*# sourceURL=${r} */`:R.nil}function dE(e,t){if(Jh(e)){if(Wh(e),Gh(e)){fE(e,t);return}}Do.boolOrEmptySchema(e,t)}function Gh({schema:e,self:t}){if(typeof e=="boolean")return!e;for(let r in e)if(t.RULES.all[r])return!0;return!1}function Jh(e){return typeof e.schema!="boolean"}function fE(e,t){let{schema:r,gen:s,opts:n}=e;if(n.$comment&&r.$comment)Bh(e);hE(e),yE(e);let i=s.const("_errs",H.default.errors);Qh(e,i),s.var(t,R._`${i} === ${H.default.errors}`)}function Wh(e){Be.checkUnknownRules(e),pE(e)}function Qh(e,t){if(e.opts.jtd)return zh(e,[],!1,t);let r=qo.getSchemaTypes(e.schema),s=qo.coerceAndCheckDataType(e,r);zh(e,r,!s,t)}function pE(e){let{schema:t,errSchemaPath:r,opts:s,self:n}=e;if(t.$ref&&s.ignoreKeywordsWithRef&&Be.schemaHasRulesButRef(t,n.RULES))n.logger.warn(`$ref: keywords ignored in schema at path "${r}"`)}function mE(e){let{schema:t,opts:r}=e;if(t.default!==void 0&&r.useDefaults&&r.strictSchema)Be.checkStrictMode(e,"default is ignored in the schema root")}function hE(e){let t=e.schema[e.opts.schemaId];if(t)e.baseId=Hh.resolveUrl(e.opts.uriResolver,e.baseId,t)}function yE(e){if(e.schema.$async&&!e.schemaEnv.$async)throw Error("async schema in sync schema")}function Bh({gen:e,schemaEnv:t,schema:r,errSchemaPath:s,opts:n}){let i=r.$comment;if(n.$comment===!0)e.code(R._`${H.default.self}.logger.log(${i})`);else if(typeof n.$comment=="function"){let o=R.str`${s}/$comment`,a=e.scopeValue("root",{ref:t.root});e.code(R._`${H.default.self}.opts.$comment(${i}, ${o}, ${a}.schema)`)}}function gE(e){let{gen:t,schemaEnv:r,validateName:s,ValidationError:n,opts:i}=e;if(r.$async)t.if(R._`${H.default.errors} === 0`,()=>t.return(H.default.data),()=>t.throw(R._`new ${n}(${H.default.vErrors})`));else{if(t.assign(R._`${s}.errors`,H.default.vErrors),i.unevaluated)vE(e);t.return(R._`${H.default.errors} === 0`)}}function vE({gen:e,evaluated:t,props:r,items:s}){if(r instanceof R.Name)e.assign(R._`${t}.props`,r);if(s instanceof R.Name)e.assign(R._`${t}.items`,s)}function zh(e,t,r,s){let{gen:n,schema:i,data:o,allErrors:a,opts:c,self:u}=e,{RULES:l}=u;if(i.$ref&&(c.ignoreKeywordsWithRef||!Be.schemaHasRulesButRef(i,l))){n.block(()=>Zh(e,"$ref",l.all.$ref.definition));return}if(!c.jtd)$E(e,t);n.block(()=>{for(let v of l.rules)d(v);d(l.post)});function d(v){if(!bn.shouldUseGroup(i,v))return;if(v.type){if(n.if(is.checkDataType(v.type,o,c.strictNumbers)),Fh(e,v),t.length===1&&t[0]===v.type&&r)n.else(),is.reportTypeError(e);n.endIf()}else Fh(e,v);if(!a)n.if(R._`${H.default.errors} === ${s||0}`)}}function Fh(e,t){let{gen:r,schema:s,opts:{useDefaults:n}}=e;if(n)Lh.assignDefaults(e,t.type);r.block(()=>{for(let i of t.rules)if(bn.shouldUseRule(s,i))Zh(e,i.keyword,i.definition,t.type)})}function $E(e,t){if(e.schemaEnv.meta||!e.opts.strictTypes)return;if(_E(e,t),!e.opts.allowUnionTypes)wE(e,t);bE(e,e.dataTypes)}function _E(e,t){if(!t.length)return;if(!e.dataTypes.length){e.dataTypes=t;return}t.forEach((r)=>{if(!Xh(e.dataTypes,r))ju(e,`type "${r}" not allowed by context "${e.dataTypes.join(",")}"`)}),PE(e,t)}function wE(e,t){if(t.length>1&&!(t.length===2&&t.includes("null")))ju(e,"use allowUnionTypes to allow union type keyword")}function bE(e,t){let r=e.self.RULES.all;for(let s in r){let n=r[s];if(typeof n=="object"&&bn.shouldUseRule(e.schema,n)){let{type:i}=n.definition;if(i.length&&!i.some((o)=>SE(t,o)))ju(e,`missing type "${i.join(",")}" for keyword "${s}"`)}}}function SE(e,t){return e.includes(t)||t==="number"&&e.includes("integer")}function Xh(e,t){return e.includes(t)||t==="integer"&&e.includes("number")}function PE(e,t){let r=[];for(let s of e.dataTypes)if(Xh(t,s))r.push(s);else if(t.includes("integer")&&s==="number")r.push("integer");e.dataTypes=r}function ju(e,t){let r=e.schemaEnv.baseId+e.errSchemaPath;t+=` at "${r}" (strictTypes)`,Be.checkStrictMode(e,t,e.opts.strictTypes)}class Cu{constructor(e,t,r){if(ar.validateKeywordUsage(e,t,r),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=r,this.data=e.data,this.schema=e.schema[r],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=Be.schemaRefOrVal(e,this.schema,r,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const("vSchema",Yh(this.$data,e));else if(this.schemaCode=this.schemaValue,!ar.validSchemaType(this.schema,t.schemaType,t.allowUndefined))throw Error(`${r} value must be ${JSON.stringify(t.schemaType)}`);if("code"in t?t.trackErrors:t.errors!==!1)this.errsCount=e.gen.const("_errs",H.default.errors)}result(e,t,r){this.failResult(R.not(e),t,r)}failResult(e,t,r){if(this.gen.if(e),r)r();else this.error();if(t){if(this.gen.else(),t(),this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(e,t){this.failResult(R.not(e),void 0,t)}fail(e){if(e===void 0){if(this.error(),!this.allErrors)this.gen.if(!1);return}if(this.gen.if(e),this.error(),this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:t}=this;this.fail(R._`${t} !== undefined && (${R.or(this.invalid$data(),e)})`)}error(e,t,r){if(t){this.setParams(t),this._error(e,r),this.setParams({});return}this._error(e,r)}_error(e,t){(e?or.reportExtraError:or.reportError)(this,this.def.error,t)}$dataError(){or.reportError(this,this.def.$dataError||or.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error('add "trackErrors" to keyword definition');or.resetErrorsCount(this.gen,this.errsCount)}ok(e){if(!this.allErrors)this.gen.if(e)}setParams(e,t){if(t)Object.assign(this.params,e);else this.params=e}block$data(e,t,r=R.nil){this.gen.block(()=>{this.check$data(e,r),t()})}check$data(e=R.nil,t=R.nil){if(!this.$data)return;let{gen:r,schemaCode:s,schemaType:n,def:i}=this;if(r.if(R.or(R._`${s} === undefined`,t)),e!==R.nil)r.assign(e,!0);if(n.length||i.validateSchema){if(r.elseIf(this.invalid$data()),this.$dataError(),e!==R.nil)r.assign(e,!1)}r.else()}invalid$data(){let{gen:e,schemaCode:t,schemaType:r,def:s,it:n}=this;return R.or(i(),o());function i(){if(r.length){if(!(t instanceof R.Name))throw Error("ajv implementation error");let a=Array.isArray(r)?r:[r];return R._`${is.checkDataTypes(a,t,n.opts.strictNumbers,is.DataType.Wrong)}`}return R.nil}function o(){if(s.validateSchema){let a=e.scopeValue("validate$data",{ref:s.validateSchema});return R._`!${a}(${t})`}return R.nil}}subschema(e,t){let r=wn.getSubschema(this.it,e);wn.extendSubschemaData(r,this.it,e),wn.extendSubschemaMode(r,e);let s={...this.it,...r,items:void 0,props:void 0};return dE(s,t),s}mergeEvaluated(e,t){let{it:r,gen:s}=this;if(!r.opts.unevaluated)return;if(r.props!==!0&&e.props!==void 0)r.props=Be.mergeEvaluated.props(s,e.props,r.props,t);if(r.items!==!0&&e.items!==void 0)r.items=Be.mergeEvaluated.items(s,e.items,r.items,t)}mergeValidEvaluated(e,t){let{it:r,gen:s}=this;if(r.opts.unevaluated&&(r.props!==!0||r.items!==!0))return s.if(t,()=>this.mergeEvaluated(e,R.Name)),!0}}ns.KeywordCxt=Cu;function Zh(e,t,r,s){let n=new Cu(e,r,t);if("code"in r)r.code(n,s);else if(n.$data&&r.validate)ar.funcKeywordCode(n,r);else if("macro"in r)ar.macroKeywordCode(n,r);else if(r.compile||r.validate)ar.funcKeywordCode(n,r)}var EE=/^\/(?:[^~]|~0|~1)*$/,kE=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Yh(e,{dataLevel:t,dataNames:r,dataPathArr:s}){let n,i;if(e==="")return H.default.rootData;if(e[0]==="/"){if(!EE.test(e))throw Error(`Invalid JSON-pointer: ${e}`);n=e,i=H.default.rootData}else{let u=kE.exec(e);if(!u)throw Error(`Invalid JSON-pointer: ${e}`);let l=+u[1];if(n=u[2],n==="#"){if(l>=t)throw Error(c("property/index",l));return s[t-l]}if(l>t)throw Error(c("data",l));if(i=r[t-l],!n)return i}let o=i,a=n.split("/");for(let u of a)if(u)i=R._`${i}${R.getProperty(Be.unescapeJsonPointer(u))}`,o=R._`${o} && ${i}`;return o;function c(u,l){return`Cannot access ${u} ${l} levels up, current level is ${t}`}}ns.getData=Yh});var Mo=b(function(Nu){Object.defineProperty(Nu,"__esModule",{value:!0});class ey extends Error{constructor(e){super("validation failed");this.errors=e,this.ajv=this.validation=!0}}Nu.default=ey});var Vo=b(function(qu){Object.defineProperty(qu,"__esModule",{value:!0});var Sn=yi();class ty extends Error{constructor(e,t,r,s){super(s||`can't resolve reference ${r} from id ${t}`);this.missingRef=Sn.resolveUrl(e,t,r),this.missingSchema=Sn.normalizeId(Sn.getFullPath(e,this.missingRef))}}qu.default=ty});var Fo=b(function(xt){Object.defineProperty(xt,"__esModule",{value:!0});xt.resolveSchema=xt.getCompilingSchema=xt.resolveRef=xt.compileSchema=xt.SchemaEnv=void 0;var Ve=W(),RE=Mo(),As=Ir(),Ue=yi(),Uo=le(),ry=gi();class vi{constructor(e){var t;this.refs={},this.dynamicAnchors={};let r;if(typeof e.schema=="object")r=e.schema;this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(t=e.baseId)!==null&&t!==void 0?t:Ue.normalizeId(r===null||r===void 0?void 0:r[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=r===null||r===void 0?void 0:r.$async,this.refs={}}}xt.SchemaEnv=vi;function Mu(e){let t=sy.call(this,e);if(t)return t;let r=Ue.getFullPath(this.opts.uriResolver,e.root.baseId),{es5:s,lines:n}=this.opts.code,{ownProperties:i}=this.opts,o=new Ve.CodeGen(this.scope,{es5:s,lines:n,ownProperties:i}),a;if(e.$async)a=o.scopeValue("Error",{ref:RE.default,code:Ve._`require("ajv/dist/runtime/validation_error").default`});let c=o.scopeName("validate");e.validateName=c;let u={gen:o,allErrors:this.opts.allErrors,data:As.default.data,parentData:As.default.parentData,parentDataProperty:As.default.parentDataProperty,dataNames:[As.default.data],dataPathArr:[Ve.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:o.scopeValue("schema",this.opts.code.source===!0?{ref:e.schema,code:Ve.stringify(e.schema)}:{ref:e.schema}),validateName:c,ValidationError:a,schema:e.schema,schemaEnv:e,rootId:r,baseId:e.baseId||r,schemaPath:Ve.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:Ve._`""`,opts:this.opts,self:this},l;try{this._compilations.add(e),ry.validateFunctionCode(u),o.optimize(this.opts.code.optimize);let d=o.toString();if(l=`${o.scopeRefs(As.default.scope)}return ${d}`,this.opts.code.process)l=this.opts.code.process(l,e);let m=Function(`${As.default.self}`,`${As.default.scope}`,l)(this,this.scope.get());if(this.scope.value(c,{ref:m}),m.errors=null,m.schema=e.schema,m.schemaEnv=e,e.$async)m.$async=!0;if(this.opts.code.source===!0)m.source={validateName:c,validateCode:d,scopeValues:o._values};if(this.opts.unevaluated){let{props:h,items:p}=u;if(m.evaluated={props:h instanceof Ve.Name?void 0:h,items:p instanceof Ve.Name?void 0:p,dynamicProps:h instanceof Ve.Name,dynamicItems:p instanceof Ve.Name},m.source)m.source.evaluated=Ve.stringify(m.evaluated)}return e.validate=m,e}catch(d){if(delete e.validate,delete e.validateName,l)this.logger.error("Error compiling schema, function code:",l);throw d}finally{this._compilations.delete(e)}}xt.compileSchema=Mu;function IE(e,t,r){var s;r=Ue.resolveUrl(this.opts.uriResolver,t,r);let n=e.refs[r];if(n)return n;let i=AE.call(this,e,r);if(i===void 0){let o=(s=e.localRefs)===null||s===void 0?void 0:s[r],{schemaId:a}=this.opts;if(o)i=new vi({schema:o,schemaId:a,root:e,baseId:t})}if(i===void 0)return;return e.refs[r]=OE.call(this,i)}xt.resolveRef=IE;function OE(e){if(Ue.inlineRef(e.schema,this.opts.inlineRefs))return e.schema;return e.validate?e:Mu.call(this,e)}function sy(e){for(let t of this._compilations)if(TE(t,e))return t}xt.getCompilingSchema=sy;function TE(e,t){return e.schema===t.schema&&e.root===t.root&&e.baseId===t.baseId}function AE(e,t){let r;while(typeof(r=this.refs[t])=="string")t=r;return r||this.schemas[t]||zo.call(this,e,t)}function zo(e,t){let r=this.opts.uriResolver.parse(t),s=Ue._getFullPath(this.opts.uriResolver,r),n=Ue.getFullPath(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&s===n)return Du.call(this,r,e);let i=Ue.normalizeId(s),o=this.refs[i]||this.schemas[i];if(typeof o=="string"){let a=zo.call(this,e,o);if(typeof(a===null||a===void 0?void 0:a.schema)!=="object")return;return Du.call(this,r,a)}if(typeof(o===null||o===void 0?void 0:o.schema)!=="object")return;if(!o.validate)Mu.call(this,o);if(i===Ue.normalizeId(t)){let{schema:a}=o,{schemaId:c}=this.opts,u=a[c];if(u)n=Ue.resolveUrl(this.opts.uriResolver,n,u);return new vi({schema:a,schemaId:c,root:e,baseId:n})}return Du.call(this,r,o)}xt.resolveSchema=zo;var xE=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function Du(e,{baseId:t,schema:r,root:s}){var n;if(((n=e.fragment)===null||n===void 0?void 0:n[0])!=="/")return;for(let a of e.fragment.slice(1).split("/")){if(typeof r==="boolean")return;let c=r[Uo.unescapeFragment(a)];if(c===void 0)return;r=c;let u=typeof r==="object"&&r[this.opts.schemaId];if(!xE.has(a)&&u)t=Ue.resolveUrl(this.opts.uriResolver,t,u)}let i;if(typeof r!="boolean"&&r.$ref&&!Uo.schemaHasRulesButRef(r,this.RULES)){let a=Ue.resolveUrl(this.opts.uriResolver,t,r.$ref);i=zo.call(this,s,a)}let{schemaId:o}=this.opts;if(i=i||new vi({schema:r,schemaId:o,root:s,baseId:t}),i.schema!==i.root.schema)return i;return}});var ny=b(function(KO,jE){jE.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var Ho=b(function(Lo,iy){(function(e,t){typeof Lo==="object"&&typeof iy<"u"?t(Lo):typeof define==="function"&&define.amd?define(["exports"],t):t(e.URI=e.URI||{})})(Lo,function(e){function t(){for(var y=arguments.length,f=Array(y),g=0;g<y;g++)f[g]=arguments[g];if(f.length>1){f[0]=f[0].slice(0,-1);var P=f.length-1;for(var E=1;E<P;++E)f[E]=f[E].slice(1,-1);return f[P]=f[P].slice(1),f.join("")}else return f[0]}function r(y){return"(?:"+y+")"}function s(y){return y===void 0?"undefined":y===null?"null":Object.prototype.toString.call(y).split(" ").pop().split("]").shift().toLowerCase()}function n(y){return y.toUpperCase()}function i(y){return y!==void 0&&y!==null?y instanceof Array?y:typeof y.length!=="number"||y.split||y.setInterval||y.call?[y]:Array.prototype.slice.call(y):[]}function o(y,f){var g=y;if(f)for(var P in f)g[P]=f[P];return g}function a(y){var f="[A-Za-z]",g="[\\x0D]",P="[0-9]",E="[\\x22]",C=t(P,"[A-Fa-f]"),J="[\\x0A]",ae="[\\x20]",he=r(r("%[EFef]"+C+"%"+C+C+"%"+C+C)+"|"+r("%[89A-Fa-f]"+C+"%"+C+C)+"|"+r("%"+C+C)),He="[\\:\\/\\?\\#\\[\\]\\@]",se="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",Ae=t(He,se),Ke=y?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]",Ie=y?"[\\uE000-\\uF8FF]":"[]",de=t(f,P,"[\\-\\.\\_\\~]",Ke),xe=r(f+t(f,P,"[\\+\\-\\.]")+"*"),ve=r(r(he+"|"+t(de,se,"[\\:]"))+"*"),$s=r(r("25[0-5]")+"|"+r("2[0-4]"+P)+"|"+r("1"+P+P)+"|"+r("[1-9]"+P)+"|"+P),$t=r(r("25[0-5]")+"|"+r("2[0-4]"+P)+"|"+r("1"+P+P)+"|"+r("0?[1-9]"+P)+"|0?0?"+P),St=r($t+"\\."+$t+"\\."+$t+"\\."+$t),ke=r(C+"{1,4}"),_t=r(r(ke+"\\:"+ke)+"|"+St),Pt=r(r(ke+"\\:")+"{6}"+_t),Lt=r("\\:\\:"+r(ke+"\\:")+"{5}"+_t),_s=r(r(ke)+"?\\:\\:"+r(ke+"\\:")+"{4}"+_t),wr=r(r(r(ke+"\\:")+"{0,1}"+ke)+"?\\:\\:"+r(ke+"\\:")+"{3}"+_t),Fn=r(r(r(ke+"\\:")+"{0,2}"+ke)+"?\\:\\:"+r(ke+"\\:")+"{2}"+_t),Ti=r(r(r(ke+"\\:")+"{0,3}"+ke)+"?\\:\\:"+ke+"\\:"+_t),Ai=r(r(r(ke+"\\:")+"{0,4}"+ke)+"?\\:\\:"+_t),Ds=r(r(r(ke+"\\:")+"{0,5}"+ke)+"?\\:\\:"+ke),Ms=r(r(r(ke+"\\:")+"{0,6}"+ke)+"?\\:\\:"),br=r([Pt,Lt,_s,wr,Fn,Ti,Ai,Ds,Ms].join("|")),Vs=r(r(de+"|"+he)+"+"),Ra=r(br+"\\%25"+Vs),ws=r(br+r("\\%25|\\%(?!"+C+"{2})")+Vs),l$=r("[vV]"+C+"+\\."+t(de,se,"[\\:]")+"+"),d$=r("\\["+r(ws+"|"+br+"|"+l$)+"\\]"),rd=r(r(he+"|"+t(de,se))+"*"),Ln=r(d$+"|"+St+"(?!"+rd+")|"+rd),Hn=r(P+"*"),sd=r(r(ve+"@")+"?"+Ln+r("\\:"+Hn)+"?"),Kn=r(he+"|"+t(de,se,"[\\:\\@]")),f$=r(Kn+"*"),nd=r(Kn+"+"),p$=r(r(he+"|"+t(de,se,"[\\@]"))+"+"),Sr=r(r("\\/"+f$)+"*"),Us=r("\\/"+r(nd+Sr)+"?"),Ia=r(p$+Sr),xi=r(nd+Sr),zs="(?!"+Kn+")",zR=r(Sr+"|"+Us+"|"+Ia+"|"+xi+"|"+zs),Fs=r(r(Kn+"|"+t("[\\/\\?]",Ie))+"*"),Gn=r(r(Kn+"|[\\/\\?]")+"*"),id=r(r("\\/\\/"+sd+Sr)+"|"+Us+"|"+xi+"|"+zs),m$=r(xe+"\\:"+id+r("\\?"+Fs)+"?"+r("\\#"+Gn)+"?"),h$=r(r("\\/\\/"+sd+Sr)+"|"+Us+"|"+Ia+"|"+zs),y$=r(h$+r("\\?"+Fs)+"?"+r("\\#"+Gn)+"?"),FR=r(m$+"|"+y$),LR=r(xe+"\\:"+id+r("\\?"+Fs)+"?"),HR="^("+xe+")\\:"+r(r("\\/\\/("+r("("+ve+")@")+"?("+Ln+")"+r("\\:("+Hn+")")+"?)")+"?("+Sr+"|"+Us+"|"+xi+"|"+zs+")")+r("\\?("+Fs+")")+"?"+r("\\#("+Gn+")")+"?$",KR="^(){0}"+r(r("\\/\\/("+r("("+ve+")@")+"?("+Ln+")"+r("\\:("+Hn+")")+"?)")+"?("+Sr+"|"+Us+"|"+Ia+"|"+zs+")")+r("\\?("+Fs+")")+"?"+r("\\#("+Gn+")")+"?$",GR="^("+xe+")\\:"+r(r("\\/\\/("+r("("+ve+")@")+"?("+Ln+")"+r("\\:("+Hn+")")+"?)")+"?("+Sr+"|"+Us+"|"+xi+"|"+zs+")")+r("\\?("+Fs+")")+"?$",JR="^"+r("\\#("+Gn+")")+"?$",WR="^"+r("("+ve+")@")+"?("+Ln+")"+r("\\:("+Hn+")")+"?$";return{NOT_SCHEME:new RegExp(t("[^]",f,P,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(t("[^\\%\\:]",de,se),"g"),NOT_HOST:new RegExp(t("[^\\%\\[\\]\\:]",de,se),"g"),NOT_PATH:new RegExp(t("[^\\%\\/\\:\\@]",de,se),"g"),NOT_PATH_NOSCHEME:new RegExp(t("[^\\%\\/\\@]",de,se),"g"),NOT_QUERY:new RegExp(t("[^\\%]",de,se,"[\\:\\@\\/\\?]",Ie),"g"),NOT_FRAGMENT:new RegExp(t("[^\\%]",de,se,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(t("[^]",de,se),"g"),UNRESERVED:new RegExp(de,"g"),OTHER_CHARS:new RegExp(t("[^\\%]",de,Ae),"g"),PCT_ENCODED:new RegExp(he,"g"),IPV4ADDRESS:new RegExp("^("+St+")$"),IPV6ADDRESS:new RegExp("^\\[?("+br+")"+r(r("\\%25|\\%(?!"+C+"{2})")+"("+Vs+")")+"?\\]?$")}}var c=a(!1),u=a(!0),l=function(){function y(f,g){var P=[],E=!0,C=!1,J=void 0;try{for(var ae=f[Symbol.iterator](),he;!(E=(he=ae.next()).done);E=!0)if(P.push(he.value),g&&P.length===g)break}catch(He){C=!0,J=He}finally{try{if(!E&&ae.return)ae.return()}finally{if(C)throw J}}return P}return function(f,g){if(Array.isArray(f))return f;else if(Symbol.iterator in Object(f))return y(f,g);else throw TypeError("Invalid attempt to destructure non-iterable instance")}}(),d=function(y){if(Array.isArray(y)){for(var f=0,g=Array(y.length);f<y.length;f++)g[f]=y[f];return g}else return Array.from(y)},v=2147483647,m=36,h=1,p=26,_=38,w=700,I=72,O=128,D="-",S=/^xn--/,M=/[^\0-\x7E]/,Y=/[\x2E\u3002\uFF0E\uFF61]/g,Q={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},me=m-h,re=Math.floor,Le=String.fromCharCode;function Ee(y){throw RangeError(Q[y])}function We(y,f){var g=[],P=y.length;while(P--)g[P]=f(y[P]);return g}function it(y,f){var g=y.split("@"),P="";if(g.length>1)P=g[0]+"@",y=g[1];y=y.replace(Y,".");var E=y.split("."),C=We(E,f).join(".");return P+C}function lt(y){var f=[],g=0,P=y.length;while(g<P){var E=y.charCodeAt(g++);if(E>=55296&&E<=56319&&g<P){var C=y.charCodeAt(g++);if((C&64512)==56320)f.push(((E&1023)<<10)+(C&1023)+65536);else f.push(E),g--}else f.push(E)}return f}var Nt=function(f){return String.fromCodePoint.apply(String,d(f))},qt=function(f){if(f-48<10)return f-22;if(f-65<26)return f-65;if(f-97<26)return f-97;return m},Vt=function(f,g){return f+22+75*(f<26)-((g!=0)<<5)},Or=function(f,g,P){var E=0;f=P?re(f/w):f>>1,f+=re(f/g);for(;f>me*p>>1;E+=m)f=re(f/me);return re(E+(me+1)*f/(f+_))},Vn=function(f){var g=[],P=f.length,E=0,C=O,J=I,ae=f.lastIndexOf(D);if(ae<0)ae=0;for(var he=0;he<ae;++he){if(f.charCodeAt(he)>=128)Ee("not-basic");g.push(f.charCodeAt(he))}for(var He=ae>0?ae+1:0;He<P;){var se=E;for(var Ae=1,Ke=m;;Ke+=m){if(He>=P)Ee("invalid-input");var Ie=qt(f.charCodeAt(He++));if(Ie>=m||Ie>re((v-E)/Ae))Ee("overflow");E+=Ie*Ae;var de=Ke<=J?h:Ke>=J+p?p:Ke-J;if(Ie<de)break;var xe=m-de;if(Ae>re(v/xe))Ee("overflow");Ae*=xe}var ve=g.length+1;if(J=Or(E-se,ve,se==0),re(E/ve)>v-C)Ee("overflow");C+=re(E/ve),E%=ve,g.splice(E++,0,C)}return String.fromCodePoint.apply(String,g)},Fl=function(f){var g=[];f=lt(f);var P=f.length,E=O,C=0,J=I,ae=!0,he=!1,He=void 0;try{for(var se=f[Symbol.iterator](),Ae;!(ae=(Ae=se.next()).done);ae=!0){var Ke=Ae.value;if(Ke<128)g.push(Le(Ke))}}catch(ws){he=!0,He=ws}finally{try{if(!ae&&se.return)se.return()}finally{if(he)throw He}}var Ie=g.length,de=Ie;if(Ie)g.push(D);while(de<P){var xe=v,ve=!0,$s=!1,$t=void 0;try{for(var St=f[Symbol.iterator](),ke;!(ve=(ke=St.next()).done);ve=!0){var _t=ke.value;if(_t>=E&&_t<xe)xe=_t}}catch(ws){$s=!0,$t=ws}finally{try{if(!ve&&St.return)St.return()}finally{if($s)throw $t}}var Pt=de+1;if(xe-E>re((v-C)/Pt))Ee("overflow");C+=(xe-E)*Pt,E=xe;var Lt=!0,_s=!1,wr=void 0;try{for(var Fn=f[Symbol.iterator](),Ti;!(Lt=(Ti=Fn.next()).done);Lt=!0){var Ai=Ti.value;if(Ai<E&&++C>v)Ee("overflow");if(Ai==E){var Ds=C;for(var Ms=m;;Ms+=m){var br=Ms<=J?h:Ms>=J+p?p:Ms-J;if(Ds<br)break;var Vs=Ds-br,Ra=m-br;g.push(Le(Vt(br+Vs%Ra,0))),Ds=re(Vs/Ra)}g.push(Le(Vt(Ds,0))),J=Or(C,Pt,de==Ie),C=0,++de}}}catch(ws){_s=!0,wr=ws}finally{try{if(!Lt&&Fn.return)Fn.return()}finally{if(_s)throw wr}}++C,++E}return g.join("")},Fv=function(f){return it(f,function(g){return S.test(g)?Vn(g.slice(4).toLowerCase()):g})},Lv=function(f){return it(f,function(g){return M.test(g)?"xn--"+Fl(g):g})},js={version:"2.1.0",ucs2:{decode:lt,encode:Nt},decode:Vn,encode:Fl,toASCII:Lv,toUnicode:Fv},bt={};function Ut(y){var f=y.charCodeAt(0),g=void 0;if(f<16)g="%0"+f.toString(16).toUpperCase();else if(f<128)g="%"+f.toString(16).toUpperCase();else if(f<2048)g="%"+(f>>6|192).toString(16).toUpperCase()+"%"+(f&63|128).toString(16).toUpperCase();else g="%"+(f>>12|224).toString(16).toUpperCase()+"%"+(f>>6&63|128).toString(16).toUpperCase()+"%"+(f&63|128).toString(16).toUpperCase();return g}function Cs(y){var f="",g=0,P=y.length;while(g<P){var E=parseInt(y.substr(g+1,2),16);if(E<128)f+=String.fromCharCode(E),g+=3;else if(E>=194&&E<224){if(P-g>=6){var C=parseInt(y.substr(g+4,2),16);f+=String.fromCharCode((E&31)<<6|C&63)}else f+=y.substr(g,6);g+=6}else if(E>=224){if(P-g>=9){var J=parseInt(y.substr(g+4,2),16),ae=parseInt(y.substr(g+7,2),16);f+=String.fromCharCode((E&15)<<12|(J&63)<<6|ae&63)}else f+=y.substr(g,9);g+=9}else f+=y.substr(g,3),g+=3}return f}function Sa(y,f){function g(P){var E=Cs(P);return!E.match(f.UNRESERVED)?P:E}if(y.scheme)y.scheme=String(y.scheme).replace(f.PCT_ENCODED,g).toLowerCase().replace(f.NOT_SCHEME,"");if(y.userinfo!==void 0)y.userinfo=String(y.userinfo).replace(f.PCT_ENCODED,g).replace(f.NOT_USERINFO,Ut).replace(f.PCT_ENCODED,n);if(y.host!==void 0)y.host=String(y.host).replace(f.PCT_ENCODED,g).toLowerCase().replace(f.NOT_HOST,Ut).replace(f.PCT_ENCODED,n);if(y.path!==void 0)y.path=String(y.path).replace(f.PCT_ENCODED,g).replace(y.scheme?f.NOT_PATH:f.NOT_PATH_NOSCHEME,Ut).replace(f.PCT_ENCODED,n);if(y.query!==void 0)y.query=String(y.query).replace(f.PCT_ENCODED,g).replace(f.NOT_QUERY,Ut).replace(f.PCT_ENCODED,n);if(y.fragment!==void 0)y.fragment=String(y.fragment).replace(f.PCT_ENCODED,g).replace(f.NOT_FRAGMENT,Ut).replace(f.PCT_ENCODED,n);return y}function Pa(y){return y.replace(/^0*(.*)/,"$1")||"0"}function Ea(y,f){var g=y.match(f.IPV4ADDRESS)||[],P=l(g,2),E=P[1];if(E)return E.split(".").map(Pa).join(".");else return y}function Ll(y,f){var g=y.match(f.IPV6ADDRESS)||[],P=l(g,3),E=P[1],C=P[2];if(E){var J=E.toLowerCase().split("::").reverse(),ae=l(J,2),he=ae[0],He=ae[1],se=He?He.split(":").map(Pa):[],Ae=he.split(":").map(Pa),Ke=f.IPV4ADDRESS.test(Ae[Ae.length-1]),Ie=Ke?7:8,de=Ae.length-Ie,xe=Array(Ie);for(var ve=0;ve<Ie;++ve)xe[ve]=se[ve]||Ae[de+ve]||"";if(Ke)xe[Ie-1]=Ea(xe[Ie-1],f);var $s=xe.reduce(function(Pt,Lt,_s){if(!Lt||Lt==="0"){var wr=Pt[Pt.length-1];if(wr&&wr.index+wr.length===_s)wr.length++;else Pt.push({index:_s,length:1})}return Pt},[]),$t=$s.sort(function(Pt,Lt){return Lt.length-Pt.length})[0],St=void 0;if($t&&$t.length>1){var ke=xe.slice(0,$t.index),_t=xe.slice($t.index+$t.length);St=ke.join(":")+"::"+_t.join(":")}else St=xe.join(":");if(C)St+="%"+C;return St}else return y}var Hv=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,Kv="".match(/(){0}/)[1]===void 0;function $r(y){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},g={},P=f.iri!==!1?u:c;if(f.reference==="suffix")y=(f.scheme?f.scheme+":":"")+"//"+y;var E=y.match(Hv);if(E){if(Kv){if(g.scheme=E[1],g.userinfo=E[3],g.host=E[4],g.port=parseInt(E[5],10),g.path=E[6]||"",g.query=E[7],g.fragment=E[8],isNaN(g.port))g.port=E[5]}else if(g.scheme=E[1]||void 0,g.userinfo=y.indexOf("@")!==-1?E[3]:void 0,g.host=y.indexOf("//")!==-1?E[4]:void 0,g.port=parseInt(E[5],10),g.path=E[6]||"",g.query=y.indexOf("?")!==-1?E[7]:void 0,g.fragment=y.indexOf("#")!==-1?E[8]:void 0,isNaN(g.port))g.port=y.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?E[4]:void 0;if(g.host)g.host=Ll(Ea(g.host,P),P);if(g.scheme===void 0&&g.userinfo===void 0&&g.host===void 0&&g.port===void 0&&!g.path&&g.query===void 0)g.reference="same-document";else if(g.scheme===void 0)g.reference="relative";else if(g.fragment===void 0)g.reference="absolute";else g.reference="uri";if(f.reference&&f.reference!=="suffix"&&f.reference!==g.reference)g.error=g.error||"URI is not a "+f.reference+" reference.";var C=bt[(f.scheme||g.scheme||"").toLowerCase()];if(!f.unicodeSupport&&(!C||!C.unicodeSupport)){if(g.host&&(f.domainHost||C&&C.domainHost))try{g.host=js.toASCII(g.host.replace(P.PCT_ENCODED,Cs).toLowerCase())}catch(J){g.error=g.error||"Host's domain name can not be converted to ASCII via punycode: "+J}Sa(g,c)}else Sa(g,P);if(C&&C.parse)C.parse(g,f)}else g.error=g.error||"URI can not be parsed.";return g}function Gv(y,f){var g=f.iri!==!1?u:c,P=[];if(y.userinfo!==void 0)P.push(y.userinfo),P.push("@");if(y.host!==void 0)P.push(Ll(Ea(String(y.host),g),g).replace(g.IPV6ADDRESS,function(E,C,J){return"["+C+(J?"%25"+J:"")+"]"}));if(typeof y.port==="number"||typeof y.port==="string")P.push(":"),P.push(String(y.port));return P.length?P.join(""):void 0}var Hl=/^\.\.?\//,Kl=/^\/\.(\/|$)/,Gl=/^\/\.\.(\/|$)/,Jv=/^\/?(?:.|\n)*?(?=\/|$)/;function Ns(y){var f=[];while(y.length)if(y.match(Hl))y=y.replace(Hl,"");else if(y.match(Kl))y=y.replace(Kl,"/");else if(y.match(Gl))y=y.replace(Gl,"/"),f.pop();else if(y==="."||y==="..")y="";else{var g=y.match(Jv);if(g){var P=g[0];y=y.slice(P.length),f.push(P)}else throw Error("Unexpected dot segment condition")}return f.join("")}function zt(y){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},g=f.iri?u:c,P=[],E=bt[(f.scheme||y.scheme||"").toLowerCase()];if(E&&E.serialize)E.serialize(y,f);if(y.host){if(g.IPV6ADDRESS.test(y.host));else if(f.domainHost||E&&E.domainHost)try{y.host=!f.iri?js.toASCII(y.host.replace(g.PCT_ENCODED,Cs).toLowerCase()):js.toUnicode(y.host)}catch(ae){y.error=y.error||"Host's domain name can not be converted to "+(!f.iri?"ASCII":"Unicode")+" via punycode: "+ae}}if(Sa(y,g),f.reference!=="suffix"&&y.scheme)P.push(y.scheme),P.push(":");var C=Gv(y,f);if(C!==void 0){if(f.reference!=="suffix")P.push("//");if(P.push(C),y.path&&y.path.charAt(0)!=="/")P.push("/")}if(y.path!==void 0){var J=y.path;if(!f.absolutePath&&(!E||!E.absolutePath))J=Ns(J);if(C===void 0)J=J.replace(/^\/\//,"/%2F");P.push(J)}if(y.query!==void 0)P.push("?"),P.push(y.query);if(y.fragment!==void 0)P.push("#"),P.push(y.fragment);return P.join("")}function Jl(y,f){var g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},P=arguments[3],E={};if(!P)y=$r(zt(y,g),g),f=$r(zt(f,g),g);if(g=g||{},!g.tolerant&&f.scheme)E.scheme=f.scheme,E.userinfo=f.userinfo,E.host=f.host,E.port=f.port,E.path=Ns(f.path||""),E.query=f.query;else{if(f.userinfo!==void 0||f.host!==void 0||f.port!==void 0)E.userinfo=f.userinfo,E.host=f.host,E.port=f.port,E.path=Ns(f.path||""),E.query=f.query;else{if(!f.path)if(E.path=y.path,f.query!==void 0)E.query=f.query;else E.query=y.query;else{if(f.path.charAt(0)==="/")E.path=Ns(f.path);else{if((y.userinfo!==void 0||y.host!==void 0||y.port!==void 0)&&!y.path)E.path="/"+f.path;else if(!y.path)E.path=f.path;else E.path=y.path.slice(0,y.path.lastIndexOf("/")+1)+f.path;E.path=Ns(E.path)}E.query=f.query}E.userinfo=y.userinfo,E.host=y.host,E.port=y.port}E.scheme=y.scheme}return E.fragment=f.fragment,E}function Wv(y,f,g){var P=o({scheme:"null"},g);return zt(Jl($r(y,P),$r(f,P),P,!0),P)}function Qv(y,f){if(typeof y==="string")y=zt($r(y,f),f);else if(s(y)==="object")y=$r(zt(y,f),f);return y}function Bv(y,f,g){if(typeof y==="string")y=zt($r(y,g),g);else if(s(y)==="object")y=zt(y,g);if(typeof f==="string")f=zt($r(f,g),g);else if(s(f)==="object")f=zt(f,g);return y===f}function Xv(y,f){return y&&y.toString().replace(!f||!f.iri?c.ESCAPE:u.ESCAPE,Ut)}function _r(y,f){return y&&y.toString().replace(!f||!f.iri?c.PCT_ENCODED:u.PCT_ENCODED,Cs)}var Un={scheme:"http",domainHost:!0,parse:function(f,g){if(!f.host)f.error=f.error||"HTTP URIs must have a host.";return f},serialize:function(f,g){var P=String(f.scheme).toLowerCase()==="https";if(f.port===(P?443:80)||f.port==="")f.port=void 0;if(!f.path)f.path="/";return f}},Wl={scheme:"https",domainHost:Un.domainHost,parse:Un.parse,serialize:Un.serialize};function Ql(y){return typeof y.secure==="boolean"?y.secure:String(y.scheme).toLowerCase()==="wss"}var zn={scheme:"ws",domainHost:!0,parse:function(f,g){var P=f;return P.secure=Ql(P),P.resourceName=(P.path||"/")+(P.query?"?"+P.query:""),P.path=void 0,P.query=void 0,P},serialize:function(f,g){if(f.port===(Ql(f)?443:80)||f.port==="")f.port=void 0;if(typeof f.secure==="boolean")f.scheme=f.secure?"wss":"ws",f.secure=void 0;if(f.resourceName){var P=f.resourceName.split("?"),E=l(P,2),C=E[0],J=E[1];f.path=C&&C!=="/"?C:void 0,f.query=J,f.resourceName=void 0}return f.fragment=void 0,f}},Bl={scheme:"wss",domainHost:zn.domainHost,parse:zn.parse,serialize:zn.serialize},Zv={},Yv=!0,Xl="[A-Za-z0-9\\-\\.\\_\\~"+(Yv?"\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF":"")+"]",Ft="[0-9A-Fa-f]",e$=r(r("%[EFef]"+Ft+"%"+Ft+Ft+"%"+Ft+Ft)+"|"+r("%[89A-Fa-f]"+Ft+"%"+Ft+Ft)+"|"+r("%"+Ft+Ft)),t$="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",r$="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",s$=t(r$,"[\\\"\\\\]"),n$="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",i$=new RegExp(Xl,"g"),qs=new RegExp(e$,"g"),o$=new RegExp(t("[^]",t$,"[\\.]","[\\\"]",s$),"g"),Zl=new RegExp(t("[^]",Xl,n$),"g"),a$=Zl;function ka(y){var f=Cs(y);return!f.match(i$)?y:f}var Yl={scheme:"mailto",parse:function(f,g){var P=f,E=P.to=P.path?P.path.split(","):[];if(P.path=void 0,P.query){var C=!1,J={},ae=P.query.split("&");for(var he=0,He=ae.length;he<He;++he){var se=ae[he].split("=");switch(se[0]){case"to":var Ae=se[1].split(",");for(var Ke=0,Ie=Ae.length;Ke<Ie;++Ke)E.push(Ae[Ke]);break;case"subject":P.subject=_r(se[1],g);break;case"body":P.body=_r(se[1],g);break;default:C=!0,J[_r(se[0],g)]=_r(se[1],g);break}}if(C)P.headers=J}P.query=void 0;for(var de=0,xe=E.length;de<xe;++de){var ve=E[de].split("@");if(ve[0]=_r(ve[0]),!g.unicodeSupport)try{ve[1]=js.toASCII(_r(ve[1],g).toLowerCase())}catch($s){P.error=P.error||"Email address's domain name can not be converted to ASCII via punycode: "+$s}else ve[1]=_r(ve[1],g).toLowerCase();E[de]=ve.join("@")}return P},serialize:function(f,g){var P=f,E=i(f.to);if(E){for(var C=0,J=E.length;C<J;++C){var ae=String(E[C]),he=ae.lastIndexOf("@"),He=ae.slice(0,he).replace(qs,ka).replace(qs,n).replace(o$,Ut),se=ae.slice(he+1);try{se=!g.iri?js.toASCII(_r(se,g).toLowerCase()):js.toUnicode(se)}catch(de){P.error=P.error||"Email address's domain name can not be converted to "+(!g.iri?"ASCII":"Unicode")+" via punycode: "+de}E[C]=He+"@"+se}P.path=E.join(",")}var Ae=f.headers=f.headers||{};if(f.subject)Ae.subject=f.subject;if(f.body)Ae.body=f.body;var Ke=[];for(var Ie in Ae)if(Ae[Ie]!==Zv[Ie])Ke.push(Ie.replace(qs,ka).replace(qs,n).replace(Zl,Ut)+"="+Ae[Ie].replace(qs,ka).replace(qs,n).replace(a$,Ut));if(Ke.length)P.query=Ke.join("&");return P}},c$=/^([^\:]+)\:(.*)/,ed={scheme:"urn",parse:function(f,g){var P=f.path&&f.path.match(c$),E=f;if(P){var C=g.scheme||E.scheme||"urn",J=P[1].toLowerCase(),ae=P[2],he=C+":"+(g.nid||J),He=bt[he];if(E.nid=J,E.nss=ae,E.path=void 0,He)E=He.parse(E,g)}else E.error=E.error||"URN can not be parsed.";return E},serialize:function(f,g){var P=g.scheme||f.scheme||"urn",E=f.nid,C=P+":"+(g.nid||E),J=bt[C];if(J)f=J.serialize(f,g);var ae=f,he=f.nss;return ae.path=(E||g.nid)+":"+he,ae}},u$=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,td={scheme:"urn:uuid",parse:function(f,g){var P=f;if(P.uuid=P.nss,P.nss=void 0,!g.tolerant&&(!P.uuid||!P.uuid.match(u$)))P.error=P.error||"UUID is not valid.";return P},serialize:function(f,g){var P=f;return P.nss=(f.uuid||"").toLowerCase(),P}};bt[Un.scheme]=Un,bt[Wl.scheme]=Wl,bt[zn.scheme]=zn,bt[Bl.scheme]=Bl,bt[Yl.scheme]=Yl,bt[ed.scheme]=ed,bt[td.scheme]=td,e.SCHEMES=bt,e.pctEncChar=Ut,e.pctDecChars=Cs,e.parse=$r,e.removeDotSegments=Ns,e.serialize=zt,e.resolveComponents=Jl,e.resolve=Wv,e.normalize=Qv,e.equal=Bv,e.escapeComponent=Xv,e.unescapeComponent=_r,Object.defineProperty(e,"__esModule",{value:!0})})});var ay=b(function(Vu){Object.defineProperty(Vu,"__esModule",{value:!0});var oy=Ho();oy.code='require("ajv/dist/runtime/uri").default';Vu.default=oy});var gy=b(function(Ye){Object.defineProperty(Ye,"__esModule",{value:!0});Ye.CodeGen=Ye.Name=Ye.nil=Ye.stringify=Ye.str=Ye._=Ye.KeywordCxt=void 0;var CE=gi();Object.defineProperty(Ye,"KeywordCxt",{enumerable:!0,get:function(){return CE.KeywordCxt}});var En=W();Object.defineProperty(Ye,"_",{enumerable:!0,get:function(){return En._}});Object.defineProperty(Ye,"str",{enumerable:!0,get:function(){return En.str}});Object.defineProperty(Ye,"stringify",{enumerable:!0,get:function(){return En.stringify}});Object.defineProperty(Ye,"nil",{enumerable:!0,get:function(){return En.nil}});Object.defineProperty(Ye,"Name",{enumerable:!0,get:function(){return En.Name}});Object.defineProperty(Ye,"CodeGen",{enumerable:!0,get:function(){return En.CodeGen}});var NE=Mo(),fy=Vo(),py=Eu(),cr=Fo(),my=W(),ur=yi(),os=hi(),Pn=le(),cy=ny(),qE=ay(),hy=(e,t)=>new RegExp(e,t);hy.code="new RegExp";var DE=["removeAdditional","useDefaults","coerceTypes"],ME=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),VE={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},UE={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},uy=200;function zE(e){var t,r,s,n,i,o,a,c,u,l,d,v,m,h,p,_,w,I,O,D,S,M,Y,Q,me;let re=e.strict,Le=(t=e.code)===null||t===void 0?void 0:t.optimize,Ee=Le===!0||Le===void 0?1:Le||0,We=(s=(r=e.code)===null||r===void 0?void 0:r.regExp)!==null&&s!==void 0?s:hy,it=(n=e.uriResolver)!==null&&n!==void 0?n:qE.default;return{strictSchema:(o=(i=e.strictSchema)!==null&&i!==void 0?i:re)!==null&&o!==void 0?o:!0,strictNumbers:(c=(a=e.strictNumbers)!==null&&a!==void 0?a:re)!==null&&c!==void 0?c:!0,strictTypes:(l=(u=e.strictTypes)!==null&&u!==void 0?u:re)!==null&&l!==void 0?l:"log",strictTuples:(v=(d=e.strictTuples)!==null&&d!==void 0?d:re)!==null&&v!==void 0?v:"log",strictRequired:(h=(m=e.strictRequired)!==null&&m!==void 0?m:re)!==null&&h!==void 0?h:!1,code:e.code?{...e.code,optimize:Ee,regExp:We}:{optimize:Ee,regExp:We},loopRequired:(p=e.loopRequired)!==null&&p!==void 0?p:uy,loopEnum:(_=e.loopEnum)!==null&&_!==void 0?_:uy,meta:(w=e.meta)!==null&&w!==void 0?w:!0,messages:(I=e.messages)!==null&&I!==void 0?I:!0,inlineRefs:(O=e.inlineRefs)!==null&&O!==void 0?O:!0,schemaId:(D=e.schemaId)!==null&&D!==void 0?D:"$id",addUsedSchema:(S=e.addUsedSchema)!==null&&S!==void 0?S:!0,validateSchema:(M=e.validateSchema)!==null&&M!==void 0?M:!0,validateFormats:(Y=e.validateFormats)!==null&&Y!==void 0?Y:!0,unicodeRegExp:(Q=e.unicodeRegExp)!==null&&Q!==void 0?Q:!0,int32range:(me=e.int32range)!==null&&me!==void 0?me:!0,uriResolver:it}}class Ko{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...zE(e)};let{es5:t,lines:r}=this.opts.code;this.scope=new my.ValueScope({scope:{},prefixes:ME,es5:t,lines:r}),this.logger=JE(e.logger);let s=e.validateFormats;if(e.validateFormats=!1,this.RULES=py.getRules(),ly.call(this,VE,e,"NOT SUPPORTED"),ly.call(this,UE,e,"DEPRECATED","warn"),this._metaOpts=KE.call(this),e.formats)LE.call(this);if(this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords)HE.call(this,e.keywords);if(typeof e.meta=="object")this.addMetaSchema(e.meta);FE.call(this),e.validateFormats=s}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:e,meta:t,schemaId:r}=this.opts,s=cy;if(r==="id")s={...cy},s.id=s.$id,delete s.$id;if(t&&e)this.addMetaSchema(s,s[r],!1)}defaultMeta(){let{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta=typeof e=="object"?e[t]||e:void 0}validate(e,t){let r;if(typeof e=="string"){if(r=this.getSchema(e),!r)throw Error(`no schema with key or ref "${e}"`)}else r=this.compile(e);let s=r(t);if(!("$async"in r))this.errors=r.errors;return s}compile(e,t){let r=this._addSchema(e,t);return r.validate||this._compileSchemaEnv(r)}compileAsync(e,t){if(typeof this.opts.loadSchema!="function")throw Error("options.loadSchema should be a function");let{loadSchema:r}=this.opts;return s.call(this,e,t);async function s(u,l){await n.call(this,u.$schema);let d=this._addSchema(u,l);return d.validate||i.call(this,d)}async function n(u){if(u&&!this.getSchema(u))await s.call(this,{$ref:u},!0)}async function i(u){try{return this._compileSchemaEnv(u)}catch(l){if(!(l instanceof fy.default))throw l;return o.call(this,l),await a.call(this,l.missingSchema),i.call(this,u)}}function o({missingSchema:u,missingRef:l}){if(this.refs[u])throw Error(`AnySchema ${u} is loaded but ${l} cannot be resolved`)}async function a(u){let l=await c.call(this,u);if(!this.refs[u])await n.call(this,l.$schema);if(!this.refs[u])this.addSchema(l,u,t)}async function c(u){let l=this._loading[u];if(l)return l;try{return await(this._loading[u]=r(u))}finally{delete this._loading[u]}}}addSchema(e,t,r,s=this.opts.validateSchema){if(Array.isArray(e)){for(let i of e)this.addSchema(i,void 0,r,s);return this}let n;if(typeof e==="object"){let{schemaId:i}=this.opts;if(n=e[i],n!==void 0&&typeof n!="string")throw Error(`schema ${i} must be string`)}return t=ur.normalizeId(t||n),this._checkUnique(t),this.schemas[t]=this._addSchema(e,r,t,s,!0),this}addMetaSchema(e,t,r=this.opts.validateSchema){return this.addSchema(e,t,!0,r),this}validateSchema(e,t){if(typeof e=="boolean")return!0;let r;if(r=e.$schema,r!==void 0&&typeof r!="string")throw Error("$schema must be a string");if(r=r||this.opts.defaultMeta||this.defaultMeta(),!r)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let s=this.validate(r,e);if(!s&&t){let n="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(n);else throw Error(n)}return s}getSchema(e){let t;while(typeof(t=dy.call(this,e))=="string")e=t;if(t===void 0){let{schemaId:r}=this.opts,s=new cr.SchemaEnv({schema:{},schemaId:r});if(t=cr.resolveSchema.call(this,s,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let t=dy.call(this,e);if(typeof t=="object")this._cache.delete(t.schema);return delete this.schemas[e],delete this.refs[e],this}case"object":{let t=e;this._cache.delete(t);let r=e[this.opts.schemaId];if(r)r=ur.normalizeId(r),delete this.schemas[r],delete this.refs[r];return this}default:throw Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(let t of e)this.addKeyword(t);return this}addKeyword(e,t){let r;if(typeof e=="string"){if(r=e,typeof t=="object")this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=r}else if(typeof e=="object"&&t===void 0){if(t=e,r=t.keyword,Array.isArray(r)&&!r.length)throw Error("addKeywords: keyword must be string or non-empty array")}else throw Error("invalid addKeywords parameters");if(QE.call(this,r,t),!t)return Pn.eachItem(r,(n)=>Uu.call(this,n)),this;XE.call(this,t);let s={...t,type:os.getJSONTypes(t.type),schemaType:os.getJSONTypes(t.schemaType)};return Pn.eachItem(r,s.type.length===0?(n)=>Uu.call(this,n,s):(n)=>s.type.forEach((i)=>Uu.call(this,n,s,i))),this}getKeyword(e){let t=this.RULES.all[e];return typeof t=="object"?t.definition:!!t}removeKeyword(e){let{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(let r of t.rules){let s=r.rules.findIndex((n)=>n.keyword===e);if(s>=0)r.rules.splice(s,1)}return this}addFormat(e,t){if(typeof t=="string")t=new RegExp(t);return this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=", ",dataVar:r="data"}={}){if(!e||e.length===0)return"No errors";return e.map((s)=>`${r}${s.instancePath} ${s.message}`).reduce((s,n)=>s+t+n)}$dataMetaSchema(e,t){let r=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let s of t){let n=s.split("/").slice(1),i=e;for(let o of n)i=i[o];for(let o in r){let a=r[o];if(typeof a!="object")continue;let{$data:c}=a.definition,u=i[o];if(c&&u)i[o]=yy(u)}}return e}_removeAllSchemas(e,t){for(let r in e){let s=e[r];if(!t||t.test(r)){if(typeof s=="string")delete e[r];else if(s&&!s.meta)this._cache.delete(s.schema),delete e[r]}}}_addSchema(e,t,r,s=this.opts.validateSchema,n=this.opts.addUsedSchema){let i,{schemaId:o}=this.opts;if(typeof e=="object")i=e[o];else if(this.opts.jtd)throw Error("schema must be object");else if(typeof e!="boolean")throw Error("schema must be object or boolean");let a=this._cache.get(e);if(a!==void 0)return a;r=ur.normalizeId(i||r);let c=ur.getSchemaRefs.call(this,e,r);if(a=new cr.SchemaEnv({schema:e,schemaId:o,meta:t,baseId:r,localRefs:c}),this._cache.set(a.schema,a),n&&!r.startsWith("#")){if(r)this._checkUnique(r);this.refs[r]=a}if(s)this.validateSchema(e,!0);return a}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta)this._compileMetaSchema(e);else cr.compileSchema.call(this,e);if(!e.validate)throw Error("ajv implementation error");return e.validate}_compileMetaSchema(e){let t=this.opts;this.opts=this._metaOpts;try{cr.compileSchema.call(this,e)}finally{this.opts=t}}}Ye.default=Ko;Ko.ValidationError=NE.default;Ko.MissingRefError=fy.default;function ly(e,t,r,s="error"){for(let n in e){let i=n;if(i in t)this.logger[s](`${r}: option ${n}. ${e[i]}`)}}function dy(e){return e=ur.normalizeId(e),this.schemas[e]||this.refs[e]}function FE(){let e=this.opts.schemas;if(!e)return;if(Array.isArray(e))this.addSchema(e);else for(let t in e)this.addSchema(e[t],t)}function LE(){for(let e in this.opts.formats){let t=this.opts.formats[e];if(t)this.addFormat(e,t)}}function HE(e){if(Array.isArray(e)){this.addVocabulary(e);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let t in e){let r=e[t];if(!r.keyword)r.keyword=t;this.addKeyword(r)}}function KE(){let e={...this.opts};for(let t of DE)delete e[t];return e}var GE={log(){},warn(){},error(){}};function JE(e){if(e===!1)return GE;if(e===void 0)return console;if(e.log&&e.warn&&e.error)return e;throw Error("logger must implement log, warn and error methods")}var WE=/^[a-z_$][a-z0-9_$:-]*$/i;function QE(e,t){let{RULES:r}=this;if(Pn.eachItem(e,(s)=>{if(r.keywords[s])throw Error(`Keyword ${s} is already defined`);if(!WE.test(s))throw Error(`Keyword ${s} has invalid name`)}),!t)return;if(t.$data&&!(("code"in t)||("validate"in t)))throw Error('$data keyword must have "code" or "validate" function')}function Uu(e,t,r){var s;let n=t===null||t===void 0?void 0:t.post;if(r&&n)throw Error('keyword with "post" flag cannot have "type"');let{RULES:i}=this,o=n?i.post:i.rules.find(({type:c})=>c===r);if(!o)o={type:r,rules:[]},i.rules.push(o);if(i.keywords[e]=!0,!t)return;let a={keyword:e,definition:{...t,type:os.getJSONTypes(t.type),schemaType:os.getJSONTypes(t.schemaType)}};if(t.before)BE.call(this,o,a,t.before);else o.rules.push(a);i.all[e]=a,(s=t.implements)===null||s===void 0||s.forEach((c)=>this.addKeyword(c))}function BE(e,t,r){let s=e.rules.findIndex((n)=>n.keyword===r);if(s>=0)e.rules.splice(s,0,t);else e.rules.push(t),this.logger.warn(`rule ${r} is not defined`)}function XE(e){let{metaSchema:t}=e;if(t===void 0)return;if(e.$data&&this.opts.$data)t=yy(t);e.validateSchema=this.compile(t,!0)}var ZE={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function yy(e){return{anyOf:[e,ZE]}}});var vy=b(function(zu){Object.defineProperty(zu,"__esModule",{value:!0});var YE={keyword:"id",code(){throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};zu.default=YE});var _y=b(function(xs){Object.defineProperty(xs,"__esModule",{value:!0});xs.callRef=xs.getValidate=void 0;var e1=Vo(),Jo=At(),Pe=W(),kn=Ir(),Wo=Fo(),as=le(),t1={keyword:"$ref",schemaType:"string",code(e){let{gen:t,schema:r,it:s}=e,{baseId:n,schemaEnv:i,validateName:o,opts:a,self:c}=s,{root:u}=i;if((r==="#"||r==="#/")&&n===u.baseId)return d();let l=Wo.resolveRef.call(c,u,n,r);if(l===void 0)throw new e1.default(s.opts.uriResolver,n,r);if(l instanceof Wo.SchemaEnv)return v(l);return m(l);function d(){if(i===u)return Go(e,o,i,i.$async);let h=t.scopeValue("root",{ref:u});return Go(e,Pe._`${h}.validate`,u,u.$async)}function v(h){let p=$y(e,h);Go(e,p,h,h.$async)}function m(h){let p=t.scopeValue("schema",a.code.source===!0?{ref:h,code:Pe.stringify(h)}:{ref:h}),_=t.name("valid"),w=e.subschema({schema:h,dataTypes:[],schemaPath:Pe.nil,topSchemaRef:p,errSchemaPath:r},_);e.mergeEvaluated(w),e.ok(_)}}};function $y(e,t){let{gen:r}=e;return t.validate?r.scopeValue("validate",{ref:t.validate}):Pe._`${r.scopeValue("wrapper",{ref:t})}.validate`}xs.getValidate=$y;function Go(e,t,r,s){let{gen:n,it:i}=e,{allErrors:o,schemaEnv:a,opts:c}=i,u=c.passContext?kn.default.this:Pe.nil;if(s)l();else d();function l(){if(!a.$async)throw Error("async schema referenced by sync schema");let h=n.let("valid");n.try(()=>{if(n.code(Pe._`await ${Jo.callValidateCode(e,t,u)}`),m(t),!o)n.assign(h,!0)},(p)=>{if(n.if(Pe._`!(${p} instanceof ${i.ValidationError})`,()=>n.throw(p)),v(p),!o)n.assign(h,!1)}),e.ok(h)}function d(){e.result(Jo.callValidateCode(e,t,u),()=>m(t),()=>v(t))}function v(h){let p=Pe._`${h}.errors`;n.assign(kn.default.vErrors,Pe._`${kn.default.vErrors} === null ? ${p} : ${kn.default.vErrors}.concat(${p})`),n.assign(kn.default.errors,Pe._`${kn.default.vErrors}.length`)}function m(h){var p;if(!i.opts.unevaluated)return;let _=(p=r===null||r===void 0?void 0:r.validate)===null||p===void 0?void 0:p.evaluated;if(i.props!==!0)if(_&&!_.dynamicProps){if(_.props!==void 0)i.props=as.mergeEvaluated.props(n,_.props,i.props)}else{let w=n.var("props",Pe._`${h}.evaluated.props`);i.props=as.mergeEvaluated.props(n,w,i.props,Pe.Name)}if(i.items!==!0)if(_&&!_.dynamicItems){if(_.items!==void 0)i.items=as.mergeEvaluated.items(n,_.items,i.items)}else{let w=n.var("items",Pe._`${h}.evaluated.items`);i.items=as.mergeEvaluated.items(n,w,i.items,Pe.Name)}}}xs.callRef=Go;xs.default=t1});var wy=b(function(Fu){Object.defineProperty(Fu,"__esModule",{value:!0});var r1=vy(),s1=_y(),n1=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",r1.default,s1.default];Fu.default=n1});var by=b(function(Lu){Object.defineProperty(Lu,"__esModule",{value:!0});var us=W(),cs=us.operators,Qo={maximum:{okStr:"<=",ok:cs.LTE,fail:cs.GT},minimum:{okStr:">=",ok:cs.GTE,fail:cs.LT},exclusiveMaximum:{okStr:"<",ok:cs.LT,fail:cs.GTE},exclusiveMinimum:{okStr:">",ok:cs.GT,fail:cs.LTE}},i1={message:({keyword:e,schemaCode:t})=>us.str`must be ${Qo[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>us._`{comparison: ${Qo[e].okStr}, limit: ${t}}`},o1={keyword:Object.keys(Qo),type:"number",schemaType:"number",$data:!0,error:i1,code(e){let{keyword:t,data:r,schemaCode:s}=e;e.fail$data(us._`${r} ${Qo[t].fail} ${s} || isNaN(${r})`)}};Lu.default=o1});var Sy=b(function(Hu){Object.defineProperty(Hu,"__esModule",{value:!0});var lr=W(),a1={message:({schemaCode:e})=>lr.str`must be multiple of ${e}`,params:({schemaCode:e})=>lr._`{multipleOf: ${e}}`},c1={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:a1,code(e){let{gen:t,data:r,schemaCode:s,it:n}=e,i=n.opts.multipleOfPrecision,o=t.let("res"),a=i?lr._`Math.abs(Math.round(${o}) - ${o}) > 1e-${i}`:lr._`${o} !== parseInt(${o})`;e.fail$data(lr._`(${s} === 0 || (${o} = ${r}/${s}, ${a}))`)}};Hu.default=c1});var Ey=b(function(Ku){Object.defineProperty(Ku,"__esModule",{value:!0});function Py(e){let t=e.length,r=0,s=0,n;while(s<t)if(r++,n=e.charCodeAt(s++),n>=55296&&n<=56319&&s<t){if(n=e.charCodeAt(s),(n&64512)===56320)s++}return r}Ku.default=Py;Py.code='require("ajv/dist/runtime/ucs2length").default'});var Ry=b(function(Gu){Object.defineProperty(Gu,"__esModule",{value:!0});var yt=W(),ky=le(),u1=Ey(),l1={message({keyword:e,schemaCode:t}){return yt.str`must NOT have ${e==="maxLength"?"more":"fewer"} than ${t} characters`},params:({schemaCode:e})=>yt._`{limit: ${e}}`},d1={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:l1,code(e){let{keyword:t,data:r,schemaCode:s,it:n}=e,i=t==="maxLength"?yt.operators.GT:yt.operators.LT,o=n.opts.unicode===!1?yt._`${r}.length`:yt._`${ky.useFunc(e.gen,u1.default)}(${r})`;e.fail$data(yt._`${o} ${i} ${s}`)}};Gu.default=d1});var Oy=b(function(Ju){Object.defineProperty(Ju,"__esModule",{value:!0});var Iy=At(),ls=W(),f1={message:({schemaCode:e})=>ls.str`must match pattern "${e}"`,params:({schemaCode:e})=>ls._`{pattern: ${e}}`},p1={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:f1,code(e){let{data:t,$data:r,schema:s,schemaCode:n,it:i}=e,o=i.opts.unicodeRegExp?"u":"",a=r?ls._`(new RegExp(${n}, ${o}))`:Iy.usePattern(e,s);e.fail$data(ls._`!${a}.test(${t})`)}};Ju.default=p1});var Ty=b(function(Wu){Object.defineProperty(Wu,"__esModule",{value:!0});var dr=W(),m1={message({keyword:e,schemaCode:t}){return dr.str`must NOT have ${e==="maxProperties"?"more":"fewer"} than ${t} properties`},params:({schemaCode:e})=>dr._`{limit: ${e}}`},h1={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:m1,code(e){let{keyword:t,data:r,schemaCode:s}=e,n=t==="maxProperties"?dr.operators.GT:dr.operators.LT;e.fail$data(dr._`Object.keys(${r}).length ${n} ${s}`)}};Wu.default=h1});var xy=b(function(Qu){Object.defineProperty(Qu,"__esModule",{value:!0});var fr=At(),pr=W(),Ay=le(),y1={message:({params:{missingProperty:e}})=>pr.str`must have required property '${e}'`,params:({params:{missingProperty:e}})=>pr._`{missingProperty: ${e}}`},g1={keyword:"required",type:"object",schemaType:"array",$data:!0,error:y1,code(e){let{gen:t,schema:r,schemaCode:s,data:n,$data:i,it:o}=e,{opts:a}=o;if(!i&&r.length===0)return;let c=r.length>=a.loopRequired;if(o.allErrors)u();else l();if(a.strictRequired){let m=e.parentSchema.properties,{definedProperties:h}=e.it;for(let p of r)if((m===null||m===void 0?void 0:m[p])===void 0&&!h.has(p)){let _=o.schemaEnv.baseId+o.errSchemaPath,w=`required property "${p}" is not defined at "${_}" (strictRequired)`;Ay.checkStrictMode(o,w,o.opts.strictRequired)}}function u(){if(c||i)e.block$data(pr.nil,d);else for(let m of r)fr.checkReportMissingProp(e,m)}function l(){let m=t.let("missing");if(c||i){let h=t.let("valid",!0);e.block$data(h,()=>v(m,h)),e.ok(h)}else t.if(fr.checkMissingProp(e,r,m)),fr.reportMissingProp(e,m),t.else()}function d(){t.forOf("prop",s,(m)=>{e.setParams({missingProperty:m}),t.if(fr.noPropertyInData(t,n,m,a.ownProperties),()=>e.error())})}function v(m,h){e.setParams({missingProperty:m}),t.forOf(m,s,()=>{t.assign(h,fr.propertyInData(t,n,m,a.ownProperties)),t.if(pr.not(h),()=>{e.error(),t.break()})},pr.nil)}}};Qu.default=g1});var jy=b(function(Bu){Object.defineProperty(Bu,"__esModule",{value:!0});var mr=W(),v1={message({keyword:e,schemaCode:t}){return mr.str`must NOT have ${e==="maxItems"?"more":"fewer"} than ${t} items`},params:({schemaCode:e})=>mr._`{limit: ${e}}`},$1={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:v1,code(e){let{keyword:t,data:r,schemaCode:s}=e,n=t==="maxItems"?mr.operators.GT:mr.operators.LT;e.fail$data(mr._`${r}.length ${n} ${s}`)}};Bu.default=$1});var Bo=b(function(Xu){Object.defineProperty(Xu,"__esModule",{value:!0});var Cy=ti();Cy.code='require("ajv/dist/runtime/equal").default';Xu.default=Cy});var qy=b(function(Zu){Object.defineProperty(Zu,"__esModule",{value:!0});var Rn=hi(),oe=W(),Ny=le(),_1=Bo(),w1={message:({params:{i:e,j:t}})=>oe.str`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>oe._`{i: ${e}, j: ${t}}`},b1={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:w1,code(e){let{gen:t,data:r,$data:s,schema:n,parentSchema:i,schemaCode:o,it:a}=e;if(!s&&!n)return;let c=t.let("valid"),u=i.items?Rn.getSchemaTypes(i.items):[];e.block$data(c,l,oe._`${o} === false`),e.ok(c);function l(){let h=t.let("i",oe._`${r}.length`),p=t.let("j");e.setParams({i:h,j:p}),t.assign(c,!0),t.if(oe._`${h} > 1`,()=>(d()?v:m)(h,p))}function d(){return u.length>0&&!u.some((h)=>h==="object"||h==="array")}function v(h,p){let _=t.name("item"),w=Rn.checkDataTypes(u,_,a.opts.strictNumbers,Rn.DataType.Wrong),I=t.const("indices",oe._`{}`);t.for(oe._`;${h}--;`,()=>{if(t.let(_,oe._`${r}[${h}]`),t.if(w,oe._`continue`),u.length>1)t.if(oe._`typeof ${_} == "string"`,oe._`${_} += "_"`);t.if(oe._`typeof ${I}[${_}] == "number"`,()=>{t.assign(p,oe._`${I}[${_}]`),e.error(),t.assign(c,!1).break()}).code(oe._`${I}[${_}] = ${h}`)})}function m(h,p){let _=Ny.useFunc(t,_1.default),w=t.name("outer");t.label(w).for(oe._`;${h}--;`,()=>t.for(oe._`${p} = ${h}; ${p}--;`,()=>t.if(oe._`${_}(${r}[${h}], ${r}[${p}])`,()=>{e.error(),t.assign(c,!1).break(w)})))}}};Zu.default=b1});var My=b(function(Yu){Object.defineProperty(Yu,"__esModule",{value:!0});var In=W(),Dy=le(),S1=Bo(),P1={message:"must be equal to constant",params:({schemaCode:e})=>In._`{allowedValue: ${e}}`},E1={keyword:"const",$data:!0,error:P1,code(e){let{gen:t,data:r,$data:s,schemaCode:n,schema:i}=e;if(s||i&&typeof i=="object")e.fail$data(In._`!${Dy.useFunc(t,S1.default)}(${r}, ${n})`);else e.fail(In._`${i} !== ${r}`)}};Yu.default=E1});var Uy=b(function(el){Object.defineProperty(el,"__esModule",{value:!0});var hr=W(),Vy=le(),k1=Bo(),R1={message:"must be equal to one of the allowed values",params:({schemaCode:e})=>hr._`{allowedValues: ${e}}`},I1={keyword:"enum",schemaType:"array",$data:!0,error:R1,code(e){let{gen:t,data:r,$data:s,schema:n,schemaCode:i,it:o}=e;if(!s&&n.length===0)throw Error("enum must have non-empty array");let a=n.length>=o.opts.loopEnum,c,u=()=>c!==null&&c!==void 0?c:c=Vy.useFunc(t,k1.default),l;if(a||s)l=t.let("valid"),e.block$data(l,d);else{if(!Array.isArray(n))throw Error("ajv implementation error");let m=t.const("vSchema",i);l=hr.or(...n.map((h,p)=>v(m,p)))}e.pass(l);function d(){t.assign(l,!1),t.forOf("v",i,(m)=>t.if(hr._`${u()}(${r}, ${m})`,()=>t.assign(l,!0).break()))}function v(m,h){let p=n[h];return typeof p==="object"&&p!==null?hr._`${u()}(${r}, ${m}[${h}])`:hr._`${r} === ${p}`}}};el.default=I1});var zy=b(function(tl){Object.defineProperty(tl,"__esModule",{value:!0});var O1=by(),T1=Sy(),A1=Ry(),x1=Oy(),j1=Ty(),C1=xy(),N1=jy(),q1=qy(),D1=My(),M1=Uy(),V1=[O1.default,T1.default,A1.default,x1.default,j1.default,C1.default,N1.default,q1.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},D1.default,M1.default];tl.default=V1});var rl=b(function($i){Object.defineProperty($i,"__esModule",{value:!0});$i.validateAdditionalItems=void 0;var gt=W(),On=le(),U1={message:({params:{len:e}})=>gt.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>gt._`{limit: ${e}}`},z1={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:U1,code(e){let{parentSchema:t,it:r}=e,{items:s}=t;if(!Array.isArray(s)){On.checkStrictMode(r,'"additionalItems" is ignored when "items" is not an array of schemas');return}Fy(e,s)}};function Fy(e,t){let{gen:r,schema:s,data:n,keyword:i,it:o}=e;o.items=!0;let a=r.const("len",gt._`${n}.length`);if(s===!1)e.setParams({len:t.length}),e.pass(gt._`${a} <= ${t.length}`);else if(typeof s=="object"&&!On.alwaysValidSchema(o,s)){let u=r.var("valid",gt._`${a} <= ${t.length}`);r.if(gt.not(u),()=>c(u)),e.ok(u)}function c(u){r.forRange("i",t.length,a,(l)=>{if(e.subschema({keyword:i,dataProp:l,dataPropType:On.Type.Num},u),!o.allErrors)r.if(gt.not(u),()=>r.break())})}}$i.validateAdditionalItems=Fy;$i.default=z1});var sl=b(function(_i){Object.defineProperty(_i,"__esModule",{value:!0});_i.validateTuple=void 0;var Xo=W(),ds=le(),Ly=At(),F1={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){let{schema:t,it:r}=e;if(Array.isArray(t))return Hy(e,"additionalItems",t);if(r.items=!0,ds.alwaysValidSchema(r,t))return;e.ok(Ly.validateArray(e))}};function Hy(e,t,r=e.schema){let{gen:s,parentSchema:n,data:i,keyword:o,it:a}=e;if(l(n),a.opts.unevaluated&&r.length&&a.items!==!0)a.items=ds.mergeEvaluated.items(s,r.length,a.items);let c=s.name("valid"),u=s.const("len",Xo._`${i}.length`);r.forEach((d,v)=>{if(ds.alwaysValidSchema(a,d))return;s.if(Xo._`${u} > ${v}`,()=>e.subschema({keyword:o,schemaProp:v,dataProp:v},c)),e.ok(c)});function l(d){let{opts:v,errSchemaPath:m}=a,h=r.length,p=h===d.minItems&&(h===d.maxItems||d[t]===!1);if(v.strictTuples&&!p){let _=`"${o}" is ${h}-tuple, but minItems or maxItems/${t} are not specified or different at path "${m}"`;ds.checkStrictMode(a,_,v.strictTuples)}}}_i.validateTuple=Hy;_i.default=F1});var Gy=b(function(nl){Object.defineProperty(nl,"__esModule",{value:!0});var Ky=sl(),L1={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:(e)=>Ky.validateTuple(e,"items")};nl.default=L1});var By=b(function(il){Object.defineProperty(il,"__esModule",{value:!0});var Zo=W(),Jy=le(),Wy=At(),Qy=rl(),H1={message:({params:{len:e}})=>Zo.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>Zo._`{limit: ${e}}`},K1={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:H1,code(e){let{schema:t,parentSchema:r,it:s}=e,{prefixItems:n}=r;if(s.items=!0,Jy.alwaysValidSchema(s,t))return;if(n)Qy.validateAdditionalItems(e,n);else e.ok(Wy.validateArray(e))}};il.default=K1});var Xy=b(function(ol){Object.defineProperty(ol,"__esModule",{value:!0});var Te=W(),fs=le(),G1={message:({params:{min:e,max:t}})=>t===void 0?Te.str`must contain at least ${e} valid item(s)`:Te.str`must contain at least ${e} and no more than ${t} valid item(s)`,params:({params:{min:e,max:t}})=>t===void 0?Te._`{minContains: ${e}}`:Te._`{minContains: ${e}, maxContains: ${t}}`},J1={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:G1,code(e){let{gen:t,schema:r,parentSchema:s,data:n,it:i}=e,o,a,{minContains:c,maxContains:u}=s;if(i.opts.next)o=c===void 0?1:c,a=u;else o=1;let l=t.const("len",Te._`${n}.length`);if(e.setParams({min:o,max:a}),a===void 0&&o===0){fs.checkStrictMode(i,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(a!==void 0&&o>a){fs.checkStrictMode(i,'"minContains" > "maxContains" is always invalid'),e.fail();return}if(fs.alwaysValidSchema(i,r)){let p=Te._`${l} >= ${o}`;if(a!==void 0)p=Te._`${p} && ${l} <= ${a}`;e.pass(p);return}i.items=!0;let d=t.name("valid");if(a===void 0&&o===1)m(d,()=>t.if(d,()=>t.break()));else if(o===0){if(t.let(d,!0),a!==void 0)t.if(Te._`${n}.length > 0`,v)}else t.let(d,!1),v();e.result(d,()=>e.reset());function v(){let p=t.name("_valid"),_=t.let("count",0);m(p,()=>t.if(p,()=>h(_)))}function m(p,_){t.forRange("i",0,l,(w)=>{e.subschema({keyword:"contains",dataProp:w,dataPropType:fs.Type.Num,compositeRule:!0},p),_()})}function h(p){if(t.code(Te._`${p}++`),a===void 0)t.if(Te._`${p} >= ${o}`,()=>t.assign(d,!0).break());else if(t.if(Te._`${p} > ${a}`,()=>t.assign(d,!1).break()),o===1)t.assign(d,!0);else t.if(Te._`${p} >= ${o}`,()=>t.assign(d,!0))}}};ol.default=J1});var tg=b(function(gr){Object.defineProperty(gr,"__esModule",{value:!0});gr.validateSchemaDeps=gr.validatePropertyDeps=gr.error=void 0;var Tn=W(),Zy=le(),yr=At();gr.error={message:({params:{property:e,depsCount:t,deps:r}})=>Tn.str`must have ${t===1?"property":"properties"} ${r} when property ${e} is present`,params:({params:{property:e,depsCount:t,deps:r,missingProperty:s}})=>Tn._`{property: ${e},
13
+ missingProperty: ${s},
14
+ depsCount: ${t},
15
+ deps: ${r}}`};var W1={keyword:"dependencies",type:"object",schemaType:"object",error:gr.error,code(e){let[t,r]=Q1(e);Yy(e,t),eg(e,r)}};function Q1({schema:e}){let t={},r={};for(let s in e){if(s==="__proto__")continue;let n=Array.isArray(e[s])?t:r;n[s]=e[s]}return[t,r]}function Yy(e,t=e.schema){let{gen:r,data:s,it:n}=e;if(Object.keys(t).length===0)return;let i=r.let("missing");for(let o in t){let a=t[o];if(a.length===0)continue;let c=yr.propertyInData(r,s,o,n.opts.ownProperties);if(e.setParams({property:o,depsCount:a.length,deps:a.join(", ")}),n.allErrors)r.if(c,()=>{for(let u of a)yr.checkReportMissingProp(e,u)});else r.if(Tn._`${c} && (${yr.checkMissingProp(e,a,i)})`),yr.reportMissingProp(e,i),r.else()}}gr.validatePropertyDeps=Yy;function eg(e,t=e.schema){let{gen:r,data:s,keyword:n,it:i}=e,o=r.name("valid");for(let a in t){if(Zy.alwaysValidSchema(i,t[a]))continue;r.if(yr.propertyInData(r,s,a,i.opts.ownProperties),()=>{let c=e.subschema({keyword:n,schemaProp:a},o);e.mergeValidEvaluated(c,o)},()=>r.var(o,!0)),e.ok(o)}}gr.validateSchemaDeps=eg;gr.default=W1});var sg=b(function(al){Object.defineProperty(al,"__esModule",{value:!0});var Yo=W(),rg=le(),B1={message:"property name must be valid",params:({params:e})=>Yo._`{propertyName: ${e.propertyName}}`},X1={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:B1,code(e){let{gen:t,schema:r,data:s,it:n}=e;if(rg.alwaysValidSchema(n,r))return;let i=t.name("valid");t.forIn("key",s,(o)=>{e.setParams({propertyName:o}),e.subschema({keyword:"propertyNames",data:o,dataTypes:["string"],propertyName:o,compositeRule:!0},i),t.if(Yo.not(i),()=>{if(e.error(!0),!n.allErrors)t.break()})}),e.ok(i)}};al.default=X1});var ul=b(function(cl){Object.defineProperty(cl,"__esModule",{value:!0});var ps=At(),ze=W(),Z1=Ir(),ms=le(),Y1={message:"must NOT have additional properties",params:({params:e})=>ze._`{additionalProperty: ${e.additionalProperty}}`},ek={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:Y1,code(e){let{gen:t,schema:r,parentSchema:s,data:n,errsCount:i,it:o}=e;if(!i)throw Error("ajv implementation error");let{allErrors:a,opts:c}=o;if(o.props=!0,c.removeAdditional!=="all"&&ms.alwaysValidSchema(o,r))return;let u=ps.allSchemaProperties(s.properties),l=ps.allSchemaProperties(s.patternProperties);d(),e.ok(ze._`${i} === ${Z1.default.errors}`);function d(){t.forIn("key",n,(_)=>{if(!u.length&&!l.length)h(_);else t.if(v(_),()=>h(_))})}function v(_){let w;if(u.length>8){let I=ms.schemaRefOrVal(o,s.properties,"properties");w=ps.isOwnProperty(t,I,_)}else if(u.length)w=ze.or(...u.map((I)=>ze._`${_} === ${I}`));else w=ze.nil;if(l.length)w=ze.or(w,...l.map((I)=>ze._`${ps.usePattern(e,I)}.test(${_})`));return ze.not(w)}function m(_){t.code(ze._`delete ${n}[${_}]`)}function h(_){if(c.removeAdditional==="all"||c.removeAdditional&&r===!1){m(_);return}if(r===!1){if(e.setParams({additionalProperty:_}),e.error(),!a)t.break();return}if(typeof r=="object"&&!ms.alwaysValidSchema(o,r)){let w=t.name("valid");if(c.removeAdditional==="failing")p(_,w,!1),t.if(ze.not(w),()=>{e.reset(),m(_)});else if(p(_,w),!a)t.if(ze.not(w),()=>t.break())}}function p(_,w,I){let O={keyword:"additionalProperties",dataProp:_,dataPropType:ms.Type.Str};if(I===!1)Object.assign(O,{compositeRule:!0,createErrors:!1,allErrors:!1});e.subschema(O,w)}}};cl.default=ek});var og=b(function(ll){Object.defineProperty(ll,"__esModule",{value:!0});var ig=gi(),ea=At(),An=le(),ng=ul(),tk={keyword:"properties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,parentSchema:s,data:n,it:i}=e;if(i.opts.removeAdditional==="all"&&s.additionalProperties===void 0)ng.default.code(new ig.KeywordCxt(i,ng.default,"additionalProperties"));let o=ea.allSchemaProperties(r);for(let d of o)i.definedProperties.add(d);if(i.opts.unevaluated&&o.length&&i.props!==!0)i.props=An.mergeEvaluated.props(t,An.toHash(o),i.props);let a=o.filter((d)=>!An.alwaysValidSchema(i,r[d]));if(a.length===0)return;let c=t.name("valid");for(let d of a){if(u(d))l(d);else{if(t.if(ea.propertyInData(t,n,d,i.opts.ownProperties)),l(d),!i.allErrors)t.else().var(c,!0);t.endIf()}e.it.definedProperties.add(d),e.ok(c)}function u(d){return i.opts.useDefaults&&!i.compositeRule&&r[d].default!==void 0}function l(d){e.subschema({keyword:"properties",schemaProp:d,dataProp:d},c)}}};ll.default=tk});var ag=b(function(dl){Object.defineProperty(dl,"__esModule",{value:!0});var ta=At(),hs=W(),ra=le(),sa=le(),rk={keyword:"patternProperties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,data:s,parentSchema:n,it:i}=e,{opts:o}=i,a=ta.allSchemaProperties(r),c=a.filter((p)=>ra.alwaysValidSchema(i,r[p]));if(a.length===0||c.length===a.length&&(!i.opts.unevaluated||i.props===!0))return;let u=o.strictSchema&&!o.allowMatchingProperties&&n.properties,l=t.name("valid");if(i.props!==!0&&!(i.props instanceof hs.Name))i.props=sa.evaluatedPropsToName(t,i.props);let{props:d}=i;v();function v(){for(let p of a){if(u)m(p);if(i.allErrors)h(p);else t.var(l,!0),h(p),t.if(l)}}function m(p){for(let _ in u)if(new RegExp(p).test(_))ra.checkStrictMode(i,`property ${_} matches pattern ${p} (use allowMatchingProperties)`)}function h(p){t.forIn("key",s,(_)=>{t.if(hs._`${ta.usePattern(e,p)}.test(${_})`,()=>{let w=c.includes(p);if(!w)e.subschema({keyword:"patternProperties",schemaProp:p,dataProp:_,dataPropType:sa.Type.Str},l);if(i.opts.unevaluated&&d!==!0)t.assign(hs._`${d}[${_}]`,!0);else if(!w&&!i.allErrors)t.if(hs.not(l),()=>t.break())})})}}};dl.default=rk});var ug=b(function(fl){Object.defineProperty(fl,"__esModule",{value:!0});var cg=le(),sk={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){let{gen:t,schema:r,it:s}=e;if(cg.alwaysValidSchema(s,r)){e.fail();return}let n=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},n),e.failResult(n,()=>e.reset(),()=>e.error())},error:{message:"must NOT be valid"}};fl.default=sk});var dg=b(function(pl){Object.defineProperty(pl,"__esModule",{value:!0});var lg=At(),nk={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:lg.validateUnion,error:{message:"must match a schema in anyOf"}};pl.default=nk});var pg=b(function(ml){Object.defineProperty(ml,"__esModule",{value:!0});var ys=W(),fg=le(),ik={message:"must match exactly one schema in oneOf",params:({params:e})=>ys._`{passingSchemas: ${e.passing}}`},ok={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:ik,code(e){let{gen:t,schema:r,parentSchema:s,it:n}=e;if(!Array.isArray(r))throw Error("ajv implementation error");if(n.opts.discriminator&&s.discriminator)return;let i=r,o=t.let("valid",!1),a=t.let("passing",null),c=t.name("_valid");e.setParams({passing:a}),t.block(u),e.result(o,()=>e.reset(),()=>e.error(!0));function u(){i.forEach((l,d)=>{let v;if(fg.alwaysValidSchema(n,l))t.var(c,!0);else v=e.subschema({keyword:"oneOf",schemaProp:d,compositeRule:!0},c);if(d>0)t.if(ys._`${c} && ${o}`).assign(o,!1).assign(a,ys._`[${a}, ${d}]`).else();t.if(c,()=>{if(t.assign(o,!0),t.assign(a,d),v)e.mergeEvaluated(v,ys.Name)})})}}};ml.default=ok});var hg=b(function(hl){Object.defineProperty(hl,"__esModule",{value:!0});var mg=le(),ak={keyword:"allOf",schemaType:"array",code(e){let{gen:t,schema:r,it:s}=e;if(!Array.isArray(r))throw Error("ajv implementation error");let n=t.name("valid");r.forEach((i,o)=>{if(mg.alwaysValidSchema(s,i))return;let a=e.subschema({keyword:"allOf",schemaProp:o},n);e.ok(n),e.mergeEvaluated(a)})}};hl.default=ak});var gg=b(function(yl){Object.defineProperty(yl,"__esModule",{value:!0});var gs=W(),na=le(),ck={message:({params:e})=>gs.str`must match "${e.ifClause}" schema`,params:({params:e})=>gs._`{failingKeyword: ${e.ifClause}}`},uk={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:ck,code(e){let{gen:t,parentSchema:r,it:s}=e;if(r.then===void 0&&r.else===void 0)na.checkStrictMode(s,'"if" without "then" and "else" is ignored');let n=yg(s,"then"),i=yg(s,"else");if(!n&&!i)return;let o=t.let("valid",!0),a=t.name("_valid");if(c(),e.reset(),n&&i){let l=t.let("ifClause");e.setParams({ifClause:l}),t.if(a,u("then",l),u("else",l))}else if(n)t.if(a,u("then"));else t.if(gs.not(a),u("else"));e.pass(o,()=>e.error(!0));function c(){let l=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},a);e.mergeEvaluated(l)}function u(l,d){return()=>{let v=e.subschema({keyword:l},a);if(t.assign(o,a),e.mergeValidEvaluated(v,o),d)t.assign(d,gs._`${l}`);else e.setParams({ifClause:l})}}}};function yg(e,t){let r=e.schema[t];return r!==void 0&&!na.alwaysValidSchema(e,r)}yl.default=uk});var $g=b(function(gl){Object.defineProperty(gl,"__esModule",{value:!0});var vg=le(),lk={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:r}){if(t.if===void 0)vg.checkStrictMode(r,`"${e}" without "if" is ignored`)}};gl.default=lk});var _g=b(function(vl){Object.defineProperty(vl,"__esModule",{value:!0});var dk=rl(),fk=Gy(),pk=sl(),mk=By(),hk=Xy(),yk=tg(),gk=sg(),vk=ul(),$k=og(),_k=ag(),wk=ug(),bk=dg(),Sk=pg(),Pk=hg(),Ek=gg(),kk=$g();function Rk(e=!1){let t=[wk.default,bk.default,Sk.default,Pk.default,Ek.default,kk.default,gk.default,vk.default,yk.default,$k.default,_k.default];if(e)t.push(fk.default,mk.default);else t.push(dk.default,pk.default);return t.push(hk.default),t}vl.default=Rk});var wg=b(function($l){Object.defineProperty($l,"__esModule",{value:!0});var G=W(),Ik={message:({schemaCode:e})=>G.str`must match format "${e}"`,params:({schemaCode:e})=>G._`{format: ${e}}`},Ok={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:Ik,code(e,t){let{gen:r,data:s,$data:n,schema:i,schemaCode:o,it:a}=e,{opts:c,errSchemaPath:u,schemaEnv:l,self:d}=a;if(!c.validateFormats)return;if(n)v();else m();function v(){let h=r.scopeValue("formats",{ref:d.formats,code:c.code.formats}),p=r.const("fDef",G._`${h}[${o}]`),_=r.let("fType"),w=r.let("format");r.if(G._`typeof ${p} == "object" && !(${p} instanceof RegExp)`,()=>r.assign(_,G._`${p}.type || "string"`).assign(w,G._`${p}.validate`),()=>r.assign(_,G._`"string"`).assign(w,p)),e.fail$data(G.or(I(),O()));function I(){if(c.strictSchema===!1)return G.nil;return G._`${o} && !${w}`}function O(){let D=l.$async?G._`(${p}.async ? await ${w}(${s}) : ${w}(${s}))`:G._`${w}(${s})`,S=G._`(typeof ${w} == "function" ? ${D} : ${w}.test(${s}))`;return G._`${w} && ${w} !== true && ${_} === ${t} && !${S}`}}function m(){let h=d.formats[i];if(!h){I();return}if(h===!0)return;let[p,_,w]=O(h);if(p===t)e.pass(D());function I(){if(c.strictSchema===!1){d.logger.warn(S());return}throw Error(S());function S(){return`unknown format "${i}" ignored in schema at path "${u}"`}}function O(S){let M=S instanceof RegExp?G.regexpCode(S):c.code.formats?G._`${c.code.formats}${G.getProperty(i)}`:void 0,Y=r.scopeValue("formats",{key:i,ref:S,code:M});if(typeof S=="object"&&!(S instanceof RegExp))return[S.type||"string",S.validate,G._`${Y}.validate`];return["string",S,Y]}function D(){if(typeof h=="object"&&!(h instanceof RegExp)&&h.async){if(!l.$async)throw Error("async format in sync schema");return G._`await ${w}(${s})`}return typeof _=="function"?G._`${w}(${s})`:G._`${w}.test(${s})`}}}};$l.default=Ok});var bg=b(function(_l){Object.defineProperty(_l,"__esModule",{value:!0});var Tk=wg(),Ak=[Tk.default];_l.default=Ak});var Sg=b(function(xn){Object.defineProperty(xn,"__esModule",{value:!0});xn.contentVocabulary=xn.metadataVocabulary=void 0;xn.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];xn.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var Pg=b(function(wl){Object.defineProperty(wl,"__esModule",{value:!0});var xk=wy(),jk=zy(),Ck=_g(),Nk=bg(),ia=Sg(),qk=[xk.default,jk.default,(0,Ck.default)(),Nk.default,ia.metadataVocabulary,ia.contentVocabulary];wl.default=qk});var Eg=b(function(wi){Object.defineProperty(wi,"__esModule",{value:!0});wi.DiscrError=void 0;var Dk;(function(e){e.Tag="tag",e.Mapping="mapping"})(Dk=wi.DiscrError||(wi.DiscrError={}))});var Rg=b(function(bl){Object.defineProperty(bl,"__esModule",{value:!0});var jt=W(),jn=Eg(),oa=Fo(),kg=le(),Mk={message:({params:{discrError:e,tagName:t}})=>e===jn.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:r}})=>jt._`{error: ${e}, tag: ${r}, tagValue: ${t}}`},Vk={keyword:"discriminator",type:"object",schemaType:"object",error:Mk,code(e){let{gen:t,data:r,schema:s,parentSchema:n,it:i}=e,{oneOf:o}=n;if(!i.opts.discriminator)throw Error("discriminator: requires discriminator option");let a=s.propertyName;if(typeof a!="string")throw Error("discriminator: requires propertyName");if(s.mapping)throw Error("discriminator: mapping is not supported");if(!o)throw Error("discriminator: requires oneOf keyword");let c=t.let("valid",!1),u=t.const("tag",jt._`${r}${jt.getProperty(a)}`);t.if(jt._`typeof ${u} == "string"`,()=>l(),()=>e.error(!1,{discrError:jn.DiscrError.Tag,tag:u,tagName:a})),e.ok(c);function l(){let m=v();t.if(!1);for(let h in m)t.elseIf(jt._`${u} === ${h}`),t.assign(c,d(m[h]));t.else(),e.error(!1,{discrError:jn.DiscrError.Mapping,tag:u,tagName:a}),t.endIf()}function d(m){let h=t.name("valid"),p=e.subschema({keyword:"oneOf",schemaProp:m},h);return e.mergeEvaluated(p,jt.Name),h}function v(){var m;let h={},p=w(n),_=!0;for(let D=0;D<o.length;D++){let S=o[D];if((S===null||S===void 0?void 0:S.$ref)&&!kg.schemaHasRulesButRef(S,i.self.RULES)){if(S=oa.resolveRef.call(i.self,i.schemaEnv.root,i.baseId,S===null||S===void 0?void 0:S.$ref),S instanceof oa.SchemaEnv)S=S.schema}let M=(m=S===null||S===void 0?void 0:S.properties)===null||m===void 0?void 0:m[a];if(typeof M!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${a}"`);_=_&&(p||w(S)),I(M,D)}if(!_)throw Error(`discriminator: "${a}" must be required`);return h;function w({required:D}){return Array.isArray(D)&&D.includes(a)}function I(D,S){if(D.const)O(D.const,S);else if(D.enum)for(let M of D.enum)O(M,S);else throw Error(`discriminator: "properties/${a}" must have "const" or "enum"`)}function O(D,S){if(typeof D!="string"||D in h)throw Error(`discriminator: "${a}" values must be unique strings`);h[D]=S}}}};bl.default=Vk});var Ig=b(function(jT,Uk){Uk.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var Ag=b(function(je,Tg){Object.defineProperty(je,"__esModule",{value:!0});je.MissingRefError=je.ValidationError=je.CodeGen=je.Name=je.nil=je.stringify=je.str=je._=je.KeywordCxt=void 0;var zk=gy(),Fk=Pg(),Lk=Rg(),Og=Ig(),Hk=["/properties"],aa="http://json-schema.org/draft-07/schema";class Sl extends zk.default{_addVocabularies(){if(super._addVocabularies(),Fk.default.forEach((e)=>this.addVocabulary(e)),this.opts.discriminator)this.addKeyword(Lk.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(Og,Hk):Og;this.addMetaSchema(e,aa,!1),this.refs["http://json-schema.org/schema"]=aa}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(aa)?aa:void 0)}}Tg.exports=je=Sl;Object.defineProperty(je,"__esModule",{value:!0});je.default=Sl;var Kk=gi();Object.defineProperty(je,"KeywordCxt",{enumerable:!0,get:function(){return Kk.KeywordCxt}});var Cn=W();Object.defineProperty(je,"_",{enumerable:!0,get:function(){return Cn._}});Object.defineProperty(je,"str",{enumerable:!0,get:function(){return Cn.str}});Object.defineProperty(je,"stringify",{enumerable:!0,get:function(){return Cn.stringify}});Object.defineProperty(je,"nil",{enumerable:!0,get:function(){return Cn.nil}});Object.defineProperty(je,"Name",{enumerable:!0,get:function(){return Cn.Name}});Object.defineProperty(je,"CodeGen",{enumerable:!0,get:function(){return Cn.CodeGen}});var Gk=Mo();Object.defineProperty(je,"ValidationError",{enumerable:!0,get:function(){return Gk.default}});var Jk=Vo();Object.defineProperty(je,"MissingRefError",{enumerable:!0,get:function(){return Jk.default}})});var jg=b(function(Nn){Object.defineProperty(Nn,"__esModule",{value:!0});Nn.formatLimitDefinition=void 0;var xg=Ag(),Fe=W(),vs=Fe.operators,ca={formatMaximum:{okStr:"<=",ok:vs.LTE,fail:vs.GT},formatMinimum:{okStr:">=",ok:vs.GTE,fail:vs.LT},formatExclusiveMaximum:{okStr:"<",ok:vs.LT,fail:vs.GTE},formatExclusiveMinimum:{okStr:">",ok:vs.GT,fail:vs.LTE}},Wk={message:({keyword:e,schemaCode:t})=>Fe.str`should be ${ca[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>Fe._`{comparison: ${ca[e].okStr}, limit: ${t}}`};Nn.formatLimitDefinition={keyword:Object.keys(ca),type:"string",schemaType:"string",$data:!0,error:Wk,code(e){let{gen:t,data:r,schemaCode:s,keyword:n,it:i}=e,{opts:o,self:a}=i;if(!o.validateFormats)return;let c=new xg.KeywordCxt(i,a.RULES.all.format.definition,"format");if(c.$data)u();else l();function u(){let v=t.scopeValue("formats",{ref:a.formats,code:o.code.formats}),m=t.const("fmt",Fe._`${v}[${c.schemaCode}]`);e.fail$data(Fe.or(Fe._`typeof ${m} != "object"`,Fe._`${m} instanceof RegExp`,Fe._`typeof ${m}.compare != "function"`,d(m)))}function l(){let v=c.schema,m=a.formats[v];if(!m||m===!0)return;if(typeof m!="object"||m instanceof RegExp||typeof m.compare!="function")throw Error(`"${n}": format "${v}" does not define "compare" function`);let h=t.scopeValue("formats",{key:v,ref:m,code:o.code.formats?Fe._`${o.code.formats}${Fe.getProperty(v)}`:void 0});e.fail$data(d(h))}function d(v){return Fe._`${v}.compare(${r}, ${s}) ${ca[n].fail} 0`}},dependencies:["format"]};var Qk=(e)=>(e.addKeyword(Nn.formatLimitDefinition),e);Nn.default=Qk});var Dg=b(function(bi,qg){Object.defineProperty(bi,"__esModule",{value:!0});var Ct=Dm(),Bk=jg(),qn=W(),Cg=new qn.Name("fullFormats"),Xk=new qn.Name("fastFormats"),Pl=(e,t={keywords:!0})=>{if(Array.isArray(t))return Ng(e,t,Ct.fullFormats,Cg),e;let[r,s]=t.mode==="fast"?[Ct.fastFormats,Xk]:[Ct.fullFormats,Cg],n=t.formats||Ct.formatNames;if(Ng(e,n,r,s),t.keywords)Bk.default(e);return e};Pl.get=(e,t="full")=>{let s=(t==="fast"?Ct.fastFormats:Ct.fullFormats)[e];if(!s)throw Error(`Unknown format "${e}"`);return s};function Ng(e,t,r,s){var n,i;(n=(i=e.opts.code).formats)!==null&&n!==void 0||(i.formats=qn._`require("ajv-formats/dist/formats").${s}`);for(let o of t)e.addFormat(o,r[o])}qg.exports=bi=Pl;Object.defineProperty(bi,"__esModule",{value:!0});bi.default=Pl});var Vg=b(function(Mg,ua){(function(e,t){if(typeof ua==="object"&&ua.exports)ua.exports=t();else e.nearley=t()})(Mg,function(){function e(c,u,l){return this.id=++e.highestId,this.name=c,this.symbols=u,this.postprocess=l,this}e.highestId=0,e.prototype.toString=function(c){var u=typeof c>"u"?this.symbols.map(a).join(" "):this.symbols.slice(0,c).map(a).join(" ")+" ● "+this.symbols.slice(c).map(a).join(" ");return this.name+" → "+u};function t(c,u,l,d){this.rule=c,this.dot=u,this.reference=l,this.data=[],this.wantedBy=d,this.isComplete=this.dot===c.symbols.length}t.prototype.toString=function(){return"{"+this.rule.toString(this.dot)+"}, from: "+(this.reference||0)},t.prototype.nextState=function(c){var u=new t(this.rule,this.dot+1,this.reference,this.wantedBy);if(u.left=this,u.right=c,u.isComplete)u.data=u.build(),u.right=void 0;return u},t.prototype.build=function(){var c=[],u=this;do c.push(u.right.data),u=u.left;while(u.left);return c.reverse(),c},t.prototype.finish=function(){if(this.rule.postprocess)this.data=this.rule.postprocess(this.data,this.reference,i.fail)};function r(c,u){this.grammar=c,this.index=u,this.states=[],this.wants={},this.scannable=[],this.completed={}}r.prototype.process=function(c){var u=this.states,l=this.wants,d=this.completed;for(var v=0;v<u.length;v++){var m=u[v];if(m.isComplete){if(m.finish(),m.data!==i.fail){var h=m.wantedBy;for(var p=h.length;p--;){var _=h[p];this.complete(_,m)}if(m.reference===this.index){var w=m.rule.name;(this.completed[w]=this.completed[w]||[]).push(m)}}}else{var w=m.rule.symbols[m.dot];if(typeof w!=="string"){this.scannable.push(m);continue}if(l[w]){if(l[w].push(m),d.hasOwnProperty(w)){var I=d[w];for(var p=0;p<I.length;p++){var O=I[p];this.complete(m,O)}}}else l[w]=[m],this.predict(w)}}},r.prototype.predict=function(c){var u=this.grammar.byName[c]||[];for(var l=0;l<u.length;l++){var d=u[l],v=this.wants[c],m=new t(d,0,this.index,v);this.states.push(m)}},r.prototype.complete=function(c,u){var l=c.nextState(u);this.states.push(l)};function s(c,u){this.rules=c,this.start=u||this.rules[0].name;var l=this.byName={};this.rules.forEach(function(d){if(!l.hasOwnProperty(d.name))l[d.name]=[];l[d.name].push(d)})}s.fromCompiled=function(d,u){var l=d.Lexer;if(d.ParserStart)u=d.ParserStart,d=d.ParserRules;var d=d.map(function(m){return new e(m.name,m.symbols,m.postprocess)}),v=new s(d,u);return v.lexer=l,v};function n(){this.reset("")}n.prototype.reset=function(c,u){this.buffer=c,this.index=0,this.line=u?u.line:1,this.lastLineBreak=u?-u.col:0},n.prototype.next=function(){if(this.index<this.buffer.length){var c=this.buffer[this.index++];if(c===`
16
+ `)this.line+=1,this.lastLineBreak=this.index;return{value:c}}},n.prototype.save=function(){return{line:this.line,col:this.index-this.lastLineBreak}},n.prototype.formatError=function(c,u){var l=this.buffer;if(typeof l==="string"){var d=l.split(`
17
+ `).slice(Math.max(0,this.line-5),this.line),v=l.indexOf(`
18
+ `,this.index);if(v===-1)v=l.length;var m=this.index-this.lastLineBreak,h=String(this.line).length;return u+=" at line "+this.line+" col "+m+`:
17
19
 
18
- //# debugId=1DFFF494E87E2AF364756E2164756E21
19
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXgubWpzIiwgIi4uL2FjdGl2aXR5LXN0cmVhbXMvc3JjL2FjdGl2aXR5LXN0cmVhbXMudHMiLCAic3JjL3NvY2tldGh1Yi1jbGllbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHByZWZpeCA9ICd+JztcblxuLyoqXG4gKiBDb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBzdG9yYWdlIGZvciBvdXIgYEVFYCBvYmplY3RzLlxuICogQW4gYEV2ZW50c2AgaW5zdGFuY2UgaXMgYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFdmVudHMoKSB7fVxuXG4vL1xuLy8gV2UgdHJ5IHRvIG5vdCBpbmhlcml0IGZyb20gYE9iamVjdC5wcm90b3R5cGVgLiBJbiBzb21lIGVuZ2luZXMgY3JlYXRpbmcgYW5cbi8vIGluc3RhbmNlIGluIHRoaXMgd2F5IGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgYE9iamVjdC5jcmVhdGUobnVsbClgIGRpcmVjdGx5LlxuLy8gSWYgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIG5vdCBzdXBwb3J0ZWQgd2UgcHJlZml4IHRoZSBldmVudCBuYW1lcyB3aXRoIGFcbi8vIGNoYXJhY3RlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbHQtaW4gb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdFxuLy8gb3ZlcnJpZGRlbiBvciB1c2VkIGFzIGFuIGF0dGFjayB2ZWN0b3IuXG4vL1xuaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgRXZlbnRzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy9cbiAgLy8gVGhpcyBoYWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBgX19wcm90b19fYCBwcm9wZXJ0eSBpcyBzdGlsbCBpbmhlcml0ZWQgaW5cbiAgLy8gc29tZSBvbGQgYnJvd3NlcnMgbGlrZSBBbmRyb2lkIDQsIGlQaG9uZSA1LjEsIE9wZXJhIDExIGFuZCBTYWZhcmkgNS5cbiAgLy9cbiAgaWYgKCFuZXcgRXZlbnRzKCkuX19wcm90b19fKSBwcmVmaXggPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBldmVudCBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBbb25jZT1mYWxzZV0gU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgZW1pdHRlciwgb25jZSlcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XSkgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lciwgZW1pdHRlci5fZXZlbnRzQ291bnQrKztcbiAgZWxzZSBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdLmZuKSBlbWl0dGVyLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IFtlbWl0dGVyLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJdO1xuXG4gIHJldHVybiBlbWl0dGVyO1xufVxuXG4vKipcbiAqIENsZWFyIGV2ZW50IGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldnQgVGhlIEV2ZW50IG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGVhckV2ZW50KGVtaXR0ZXIsIGV2dCkge1xuICBpZiAoLS1lbWl0dGVyLl9ldmVudHNDb3VudCA9PT0gMCkgZW1pdHRlci5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICBlbHNlIGRlbGV0ZSBlbWl0dGVyLl9ldmVudHNbZXZ0XTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IGxpc3RpbmcgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGVtaXR0ZXIgaGFzIHJlZ2lzdGVyZWRcbiAqIGxpc3RlbmVycy5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHZhciBuYW1lcyA9IFtdXG4gICAgLCBldmVudHNcbiAgICAsIG5hbWU7XG5cbiAgaWYgKHRoaXMuX2V2ZW50c0NvdW50ID09PSAwKSByZXR1cm4gbmFtZXM7XG5cbiAgZm9yIChuYW1lIGluIChldmVudHMgPSB0aGlzLl9ldmVudHMpKSB7XG4gICAgaWYgKGhhcy5jYWxsKGV2ZW50cywgbmFtZSkpIG5hbWVzLnB1c2gocHJlZml4ID8gbmFtZS5zbGljZSgxKSA6IG5hbWUpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICByZXR1cm4gbmFtZXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZXZlbnRzKSk7XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBoYW5kbGVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghaGFuZGxlcnMpIHJldHVybiBbXTtcbiAgaWYgKGhhbmRsZXJzLmZuKSByZXR1cm4gW2hhbmRsZXJzLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGhhbmRsZXJzW2ldLmZuO1xuICB9XG5cbiAgcmV0dXJuIGVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgbGlzdGVuaW5nIHRvIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWJlciBvZiBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIGxpc3RlbmVyQ291bnQoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghbGlzdGVuZXJzKSByZXR1cm4gMDtcbiAgaWYgKGxpc3RlbmVycy5mbikgcmV0dXJuIDE7XG4gIHJldHVybiBsaXN0ZW5lcnMubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBDYWxscyBlYWNoIG9mIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBldmVudCBoYWQgbGlzdGVuZXJzLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVycy5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCksIHRydWU7XG4gICAgICBjYXNlIDI6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEpLCB0cnVlO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiksIHRydWU7XG4gICAgICBjYXNlIDQ6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMyksIHRydWU7XG4gICAgICBjYXNlIDU6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQpLCB0cnVlO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0LCBhNSksIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGxpc3RlbmVycy5mbi5hcHBseShsaXN0ZW5lcnMuY29udGV4dCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGhcbiAgICAgICwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RlbmVyc1tpXS5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnNbaV0uZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICAgIGNhc2UgMTogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQpOyBicmVhaztcbiAgICAgICAgY2FzZSAyOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgNDogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMiwgYTMpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG9uZS10aW1lIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCB0cnVlKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb2YgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgbWF0Y2ggdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgaGF2ZSB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25lLXRpbWUgbGlzdGVuZXJzLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiB0aGlzO1xuICBpZiAoIWZuKSB7XG4gICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAoXG4gICAgICBsaXN0ZW5lcnMuZm4gPT09IGZuICYmXG4gICAgICAoIW9uY2UgfHwgbGlzdGVuZXJzLm9uY2UpICYmXG4gICAgICAoIWNvbnRleHQgfHwgbGlzdGVuZXJzLmNvbnRleHQgPT09IGNvbnRleHQpXG4gICAgKSB7XG4gICAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwLCBldmVudHMgPSBbXSwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm4gfHxcbiAgICAgICAgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKSB8fFxuICAgICAgICAoY29udGV4dCAmJiBsaXN0ZW5lcnNbaV0uY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAgIC8vXG4gICAgaWYgKGV2ZW50cy5sZW5ndGgpIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgICBlbHNlIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycywgb3IgdGhvc2Ugb2YgdGhlIHNwZWNpZmllZCBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gW2V2ZW50XSBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dDtcblxuICBpZiAoZXZlbnQpIHtcbiAgICBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuICAgIGlmICh0aGlzLl9ldmVudHNbZXZ0XSkgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gQWxsb3cgYEV2ZW50RW1pdHRlcmAgdG8gYmUgaW1wb3J0ZWQgYXMgbW9kdWxlIG5hbWVzcGFjZS5cbi8vXG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwKICAgICJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJy4vaW5kZXguanMnXG5cbmV4cG9ydCB7IEV2ZW50RW1pdHRlciB9XG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXJcbiIsCiAgICAiLyohXG4gKiBhY3Rpdml0eS1zdHJlYW1zXG4gKiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zaWx2ZXJidWNrZXQvYWN0aXZpdHktc3RyZWFtc1xuICpcbiAqIERldmVsb3BlZCBhbmQgTWFpbnRhaW5lZCBieTpcbiAqICAgTmljayBKZW5uaW5ncyA8bmlja0BzaWx2ZXJidWNrZXQubmV0PlxuICpcbiAqIGFjdGl2aXR5LXN0cmVhbXMgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCAoc2VlIExJQ0VOU0UpLlxuICpcbiAqIFlvdSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgdG8gY2hvb3NlIG9uZSBsaWNlbnNlIG9yIHRoZSBvdGhlclxuICogYW5kIHlvdSBkb24ndCBoYXZlIHRvIG5vdGlmeSBhbnlvbmUgd2hpY2ggbGljZW5zZSB5b3UgYXJlIHVzaW5nLlxuICogUGxlYXNlIHNlZSB0aGUgY29ycmVzcG9uZGluZyBsaWNlbnNlIGZpbGUgZm9yIGRldGFpbHMgb2YgdGhlc2UgbGljZW5zZXMuXG4gKiBZb3UgYXJlIGZyZWUgdG8gdXNlLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSwgYnV0IGFsbCBjb3B5cmlnaHRcbiAqIGluZm9ybWF0aW9uIG11c3QgcmVtYWluLlxuICpcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFjdGl2aXR5T2JqZWN0LCBBY3Rpdml0eVN0cmVhbSB9IGZyb20gXCJAc29ja2V0aHViL3NjaGVtYXNcIjtcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50ZW1pdHRlcjNcIjtcblxuY29uc3QgZWUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5jb25zdCBiYXNlUHJvcHMgPSB7XG4gICAgc3RyZWFtOiBbXG4gICAgICAgIFwiaWRcIixcbiAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgIFwiYWN0b3JcIixcbiAgICAgICAgXCJ0YXJnZXRcIixcbiAgICAgICAgXCJvYmplY3RcIixcbiAgICAgICAgXCJjb250ZXh0XCIsXG4gICAgICAgIFwiY29udGV4dFwiLFxuICAgICAgICBcInB1Ymxpc2hlZFwiLFxuICAgICAgICBcImVycm9yXCIsXG4gICAgXSxcbiAgICBvYmplY3Q6IFtcbiAgICAgICAgXCJpZFwiLFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJjb250ZXh0XCIsXG4gICAgICAgIFwiYWxpYXNcIixcbiAgICAgICAgXCJhdHRhY2hlZFRvXCIsXG4gICAgICAgIFwiYXR0YWNobWVudFwiLFxuICAgICAgICBcImF0dHJpYnV0ZWRUb1wiLFxuICAgICAgICBcImF0dHJpYnV0ZWRXaXRoXCIsXG4gICAgICAgIFwiY29uZGl0aW9uXCIsXG4gICAgICAgIFwiY29udGVudFwiLFxuICAgICAgICBcImNvbnRlbnRNYXBcIixcbiAgICAgICAgXCJjb250ZXh0XCIsXG4gICAgICAgIFwiY29udGV4dE9mXCIsXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcImVuZFRpbWVcIixcbiAgICAgICAgXCJnZW5lcmF0b3JcIixcbiAgICAgICAgXCJnZW5lcmF0b3JPZlwiLFxuICAgICAgICBcImdyb3VwXCIsXG4gICAgICAgIFwiaWNvblwiLFxuICAgICAgICBcImltYWdlXCIsXG4gICAgICAgIFwiaW5SZXBseVRvXCIsXG4gICAgICAgIFwibWVtYmVyc1wiLFxuICAgICAgICBcIm1lbWJlck9mXCIsXG4gICAgICAgIFwibWVzc2FnZVwiLFxuICAgICAgICBcImxvY2F0aW9uXCIsXG4gICAgICAgIFwibG9jYXRpb25PZlwiLFxuICAgICAgICBcIm9iamVjdE9mXCIsXG4gICAgICAgIFwib3JpZ2luT2ZcIixcbiAgICAgICAgXCJwcmVzZW5jZVwiLFxuICAgICAgICBcInByZXZpZXdcIixcbiAgICAgICAgXCJwcmV2aWV3T2ZcIixcbiAgICAgICAgXCJwcm92aWRlclwiLFxuICAgICAgICBcInByb3ZpZGVyT2ZcIixcbiAgICAgICAgXCJwdWJsaXNoZWRcIixcbiAgICAgICAgXCJyYXRpbmdcIixcbiAgICAgICAgXCJyZWxhdGlvbnNoaXBcIixcbiAgICAgICAgXCJyZXN1bHRPZlwiLFxuICAgICAgICBcInJlcGxpZXNcIixcbiAgICAgICAgXCJyb2xlXCIsXG4gICAgICAgIFwic2NvcGVcIixcbiAgICAgICAgXCJzY29wZU9mXCIsXG4gICAgICAgIFwic3RhcnRUaW1lXCIsXG4gICAgICAgIFwic3RhdHVzXCIsXG4gICAgICAgIFwic3VtbWFyeVwiLFxuICAgICAgICBcInRvcGljXCIsXG4gICAgICAgIFwidGFnXCIsXG4gICAgICAgIFwidGFnT2ZcIixcbiAgICAgICAgXCJ0YXJnZXRPZlwiLFxuICAgICAgICBcInRpdGxlXCIsXG4gICAgICAgIFwidGl0bGVNYXBcIixcbiAgICAgICAgXCJ1cGRhdGVkXCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwieG1wcDpzdGFuemEtaWRcIixcbiAgICBdLFxufTtcbmNvbnN0IHJlbmFtZSA9IHtcbiAgICBcIkBpZFwiOiBcImlkXCIsXG4gICAgXCJAdHlwZVwiOiBcInR5cGVcIixcbiAgICB2ZXJiOiBcInR5cGVcIixcbiAgICBkaXNwbGF5TmFtZTogXCJuYW1lXCIsXG4gICAgb2JqZWN0VHlwZTogXCJ0eXBlXCIsXG4gICAgcGxhdGZvcm06IFwiY29udGV4dFwiLFxufTtcbmNvbnN0IGV4cGFuZCA9IHtcbiAgICBhY3Rvcjoge1xuICAgICAgICBwcmltYXJ5OiBcImlkXCIsXG4gICAgICAgIHByb3BzOiBiYXNlUHJvcHMsXG4gICAgfSxcbiAgICB0YXJnZXQ6IHtcbiAgICAgICAgcHJpbWFyeTogXCJpZFwiLFxuICAgICAgICBwcm9wczogYmFzZVByb3BzLFxuICAgIH0sXG4gICAgb2JqZWN0OiB7XG4gICAgICAgIHByaW1hcnk6IFwiY29udGVudFwiLFxuICAgICAgICBwcm9wczogYmFzZVByb3BzLFxuICAgIH0sXG59O1xuXG50eXBlIEN1c3RvbVByb3BzID0ge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QgfCBzdHJpbmdbXTtcbn07XG5cbmNvbnN0IG9ianMgPSBuZXcgTWFwKCk7XG5jb25zdCBjdXN0b21Qcm9wczogQ3VzdG9tUHJvcHMgPSB7fTtcblxubGV0IGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzID0gZmFsc2U7XG5sZXQgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPSB0cnVlO1xubGV0IHNwZWNpYWxPYmpzID0gW107IC8vIHRoZSBvYmplY3RzIGRvbid0IGdldCByZWplY3RlZCBmb3IgYmFkIHByb3BzXG5cbmZ1bmN0aW9uIG1hdGNoZXNDdXN0b21Qcm9wKHR5cGU6IHN0cmluZywga2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoY3VzdG9tUHJvcHNbdHlwZV0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gY3VzdG9tUHJvcHNbdHlwZV0gYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChvYmouaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZW5hbWVQcm9wPFQ+KG9iajogVCwga2V5OiBzdHJpbmcpOiBUIHtcbiAgICBvYmpbcmVuYW1lW2tleV1dID0gb2JqW2tleV07XG4gICAgZGVsZXRlIG9ialtrZXldO1xuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT2JqZWN0PFQ+KHR5cGU6IHN0cmluZywgaW5jb21pbmdPYmo6IFQsIHJlcXVpcmVJZCA9IGZhbHNlKSB7XG4gICAgLy8gSW5wdXQgdmFsaWRhdGlvbiB3aXRoIGNsZWFyIGVycm9yIG1lc3NhZ2VzXG4gICAgaWYgKGluY29taW5nT2JqID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSBpcyBudWxsLiBFeGFtcGxlOiB7IGlkOiBcInVzZXJAZXhhbXBsZS5jb21cIiwgdHlwZTogXCJwZXJzb25cIiB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaW5jb21pbmdPYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQWN0aXZpdHlTdHJlYW1zIHZhbGlkYXRpb24gZmFpbGVkOiB0aGUgXCIke3R5cGV9XCIgcHJvcGVydHkgaXMgdW5kZWZpbmVkLiBFeGFtcGxlOiB7IGlkOiBcInVzZXJAZXhhbXBsZS5jb21cIiwgdHlwZTogXCJwZXJzb25cIiB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluY29taW5nT2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSByZWNlaXZlZCBzdHJpbmcgXCIke2luY29taW5nT2JqfVwiIGJ1dCBleHBlY3RlZCBhbiBvYmplY3QuIFVzZTogeyBpZDogXCIke2luY29taW5nT2JqfVwiLCB0eXBlOiBcInBlcnNvblwiIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5jb21pbmdPYmogIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShpbmNvbWluZ09iaikpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gQXJyYXkuaXNBcnJheShpbmNvbWluZ09iailcbiAgICAgICAgICAgID8gXCJhcnJheVwiXG4gICAgICAgICAgICA6IHR5cGVvZiBpbmNvbWluZ09iajtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRWYWx1ZSA9IFN0cmluZyhpbmNvbWluZ09iaik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIG9iamVjdCwgcmVjZWl2ZWQgJHtyZWNlaXZlZFR5cGV9ICgke3JlY2VpdmVkVmFsdWV9KS4gRXhhbXBsZTogeyBpZDogXCJ1c2VyQGV4YW1wbGUuY29tXCIsIHR5cGU6IFwicGVyc29uXCIgfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmVxdWlyZSAnaWQnIHByb3BlcnR5IHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQgKGUuZy4sIE9iamVjdC5jcmVhdGUoKSlcbiAgICBjb25zdCBvYmogPSBpbmNvbWluZ09iaiBhcyBBY3Rpdml0eU9iamVjdDtcbiAgICBpZiAocmVxdWlyZUlkICYmICFvYmouaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFjdGl2aXR5U3RyZWFtcyB2YWxpZGF0aW9uIGZhaWxlZDogdGhlIFwiJHt0eXBlfVwiIHByb3BlcnR5IHJlcXVpcmVzIGFuICdpZCcgcHJvcGVydHkuIEV4YW1wbGU6IHsgaWQ6IFwidXNlckBleGFtcGxlLmNvbVwiLCB0eXBlOiBcInBlcnNvblwiIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHVua25vd25LZXlzID0gT2JqZWN0LmtleXMoaW5jb21pbmdPYmopLmZpbHRlcihcbiAgICAgICAgKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWJhc2VQcm9wc1t0eXBlXS5pbmNsdWRlcyhrZXkpO1xuICAgICAgICB9LFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiB1bmtub3duS2V5cykge1xuICAgICAgICBsZXQgYW86IEFjdGl2aXR5T2JqZWN0ID0gaW5jb21pbmdPYmogYXMgQWN0aXZpdHlPYmplY3Q7XG4gICAgICAgIGlmIChyZW5hbWVba2V5XSkge1xuICAgICAgICAgICAgLy8gcmVuYW1lIHByb3BlcnR5IGluc3RlYWQgb2YgZmFpbFxuICAgICAgICAgICAgYW8gPSByZW5hbWVQcm9wKGFvLCBrZXkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2hlc0N1c3RvbVByb3AoYW8udHlwZSwga2V5KSkge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHByb3BlcnR5IG1hdGNoZXMsIGNvbnRpbnVlXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3BlY2lhbE9ianMuaW5jbHVkZXMoYW8udHlwZSkpIHtcbiAgICAgICAgICAgIC8vIG5vdCBkZWZpbmVkIGFzIGEgc3BlY2lhbCBwcm9wXG4gICAgICAgICAgICAvLyBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdCwgc28gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGFvKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVmFsdWUgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiBhb1trZXldID09PSBcInN0cmluZ1wiID8gYFwiJHthb1trZXldfVwiYCA6IFN0cmluZyhhb1trZXldKTtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHByb3BlcnR5IFwiJHtrZXl9XCIgd2l0aCB2YWx1ZSAke3JlY2VpdmVkVmFsdWV9IGlzIG5vdCBhbGxvd2VkIG9uIHRoZSBcIiR7dHlwZX1cIiBvYmplY3Qgb2YgdHlwZSBcIiR7YW8udHlwZX1cIi5gO1xuICAgICAgICAgICAgaWYgKGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5zdXJlUHJvcHMob2JqOiBBY3Rpdml0eU9iamVjdCk6IEFjdGl2aXR5T2JqZWN0IHtcbiAgICAvLyBlbnN1cmUgdGhlIG5hbWUgcHJvcGVydHksIHdoaWNoIGNhbiBnZW5lcmFsbHkgYmUgaW5mZXJyZWQgZnJvbSB0aGUgaWRcbiAgICAvLyBuYW1lID0gb2JqLm1hdGNoKC8oPyg/XFx3Kyk6XFwvXFwvKSg/Oi4rQCk/KC4rPykoPzpcXC98JCkvKVsxXVxuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFN0cmVhbShtZXRhOiBBY3Rpdml0eVN0cmVhbSkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1ldGEpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWV0YVtrZXldID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBzdHJlYW1ba2V5XSA9IG9ianMuZ2V0KG1ldGFba2V5XSkgfHwgbWV0YVtrZXldO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobWV0YVtrZXldKSkge1xuICAgICAgICAgICAgc3RyZWFtW2tleV0gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgbWV0YVtrZXldKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW1ba2V5XS5wdXNoKG9ianMuZ2V0KGVudHJ5KSB8fCBlbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtW2tleV0gPSBtZXRhW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvbmx5IGV4cGFuZCBzdHJpbmcgaW50byBvYmplY3RzIGlmIHRoZXkgYXJlIGluIHRoZSBleHBhbmQgbGlzdFxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGV4cGFuZCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdHJlYW1ba2V5XSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gZXhwYW5kW2tleV0ucHJpbWFyeTtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICAgICAgb2JqW2lkeF0gPSBzdHJlYW1ba2V5XTtcbiAgICAgICAgICAgIHN0cmVhbVtrZXldID0gb2JqO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHJlYW07XG59XG5cbmZ1bmN0aW9uIFN0cmVhbShcbiAgICBtZXRhOiBBY3Rpdml0eVN0cmVhbSxcbik6IEFjdGl2aXR5U3RyZWFtIHwgQWN0aXZpdHlPYmplY3QgfCBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4ge1xuICAgIHZhbGlkYXRlT2JqZWN0KFwic3RyZWFtXCIsIG1ldGEpO1xuICAgIGlmICh0eXBlb2YgbWV0YS5vYmplY3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdmFsaWRhdGVPYmplY3QoXCJvYmplY3RcIiwgbWV0YS5vYmplY3QpO1xuICAgIH1cbiAgICBjb25zdCBzdHJlYW0gPSBleHBhbmRTdHJlYW0obWV0YSk7XG4gICAgZWUuZW1pdChcImFjdGl2aXR5LXN0cmVhbVwiLCBzdHJlYW0pO1xuICAgIHJldHVybiBzdHJlYW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZpdHlPYmplY3RNYW5hZ2VyIHtcbiAgICBjcmVhdGUob2JqOiB1bmtub3duKTogdW5rbm93bjtcbiAgICBkZWxldGUoaWQ6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgbGlzdCgpOiBJdGVyYWJsZUl0ZXJhdG9yPHVua25vd24+O1xuICAgIGdldChpZDogc3RyaW5nLCBleHBhbmQ/OiBib29sZWFuKTogdW5rbm93bjtcbn1cblxuY29uc3QgX09iamVjdDogQWN0aXZpdHlPYmplY3RNYW5hZ2VyID0ge1xuICAgIGNyZWF0ZTogKG9iajogQWN0aXZpdHlPYmplY3QpID0+IHtcbiAgICAgICAgdmFsaWRhdGVPYmplY3QoXCJvYmplY3RcIiwgb2JqLCB0cnVlKTsgLy8gcmVxdWlyZSBJRCBmb3IgT2JqZWN0LmNyZWF0ZSgpXG4gICAgICAgIGNvbnN0IGFvID0gZW5zdXJlUHJvcHMob2JqKTtcbiAgICAgICAgb2Jqcy5zZXQoYW8uaWQsIGFvKTtcbiAgICAgICAgZWUuZW1pdChcImFjdGl2aXR5LW9iamVjdC1jcmVhdGVcIiwgYW8pO1xuICAgICAgICByZXR1cm4gYW87XG4gICAgfSxcblxuICAgIGRlbGV0ZTogKGlkKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG9ianMuZGVsZXRlKGlkKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZWUuZW1pdChcImFjdGl2aXR5LW9iamVjdC1kZWxldGVcIiwgaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGdldDogKGlkLCBleHBhbmQpID0+IHtcbiAgICAgICAgbGV0IG9iaiA9IG9ianMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgIGlmICghZXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JqID0geyBpZDogaWQgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5zdXJlUHJvcHMob2JqKTtcbiAgICB9LFxuXG4gICAgbGlzdDogKCk6IEl0ZXJhYmxlSXRlcmF0b3I8dW5rbm93bj4gPT4gb2Jqcy5rZXlzKCksXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFTRmFjdG9yeU9wdGlvbnMge1xuICAgIHNwZWNpYWxPYmpzPzogQXJyYXk8c3RyaW5nPjtcbiAgICBmYWlsT25Vbmtub3duT2JqZWN0UHJvcGVydGllcz86IGJvb2xlYW47XG4gICAgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXM/OiBib29sZWFuO1xuICAgIGN1c3RvbVByb3BzPzogQ3VzdG9tUHJvcHM7XG59XG5cbnR5cGUgRXZlbnRDYWxsYmFjayA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVNNYW5hZ2VyIHtcbiAgICBTdHJlYW0obWV0YTogdW5rbm93bik6IEFjdGl2aXR5U3RyZWFtIHwgQWN0aXZpdHlPYmplY3Q7XG4gICAgT2JqZWN0OiBBY3Rpdml0eU9iamVjdE1hbmFnZXI7XG4gICAgb24oZXZlbnQ6IHN0cmluZywgZnVuYzogRXZlbnRDYWxsYmFjayk6IHZvaWQ7XG4gICAgb25jZShldmVudDogc3RyaW5nLCBmdW5jOiBFdmVudENhbGxiYWNrKTogdm9pZDtcbiAgICBvZmYoZXZlbnQ6IHN0cmluZywgZnVuYzogRXZlbnRDYWxsYmFjayk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBU0ZhY3Rvcnkob3B0czogQVNGYWN0b3J5T3B0aW9ucyA9IHt9KTogQVNNYW5hZ2VyIHtcbiAgICBzcGVjaWFsT2JqcyA9IG9wdHM/LnNwZWNpYWxPYmpzIHx8IFtdO1xuICAgIGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzID1cbiAgICAgICAgdHlwZW9mIG9wdHMuZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPT09IFwiYm9vbGVhblwiXG4gICAgICAgICAgICA/IG9wdHMuZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXNcbiAgICAgICAgICAgIDogZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXM7XG4gICAgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPVxuICAgICAgICB0eXBlb2Ygb3B0cy53YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllcyA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgICAgID8gb3B0cy53YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllc1xuICAgICAgICAgICAgOiB3YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllcztcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIE9iamVjdC5rZXlzKG9wdHMuY3VzdG9tUHJvcHMgfHwge30pKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5jdXN0b21Qcm9wc1twcm9wTmFtZV0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGN1c3RvbVByb3BzW3Byb3BOYW1lXSA9IG9wdHMuY3VzdG9tUHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgU3RyZWFtOiBTdHJlYW0sXG4gICAgICAgIE9iamVjdDogX09iamVjdCxcbiAgICAgICAgb246IChldmVudCwgZnVuYykgPT4gZWUub24oZXZlbnQsIGZ1bmMpLFxuICAgICAgICBvbmNlOiAoZXZlbnQsIGZ1bmMpID0+IGVlLm9uY2UoZXZlbnQsIGZ1bmMpLFxuICAgICAgICBvZmY6IChldmVudCwgZnVuY05hbWUpID0+IGVlLm9mZihldmVudCwgZnVuY05hbWUpLFxuICAgIH0gYXMgQVNNYW5hZ2VyO1xufVxuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IDxleHBsYW5hdGlvbj5cbigoZ2xvYmFsOiBhbnkpID0+IHtcbiAgICBnbG9iYWwuQVNGYWN0b3IgPSBBU0ZhY3Rvcnk7XG59KSh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDoge30pO1xuIiwKICAgICJpbXBvcnQgeyBBU0ZhY3RvcnksIHR5cGUgQVNNYW5hZ2VyIH0gZnJvbSBcIkBzb2NrZXRodWIvYWN0aXZpdHktc3RyZWFtc1wiO1xuaW1wb3J0IHR5cGUge1xuICAgIEFjdGl2aXR5T2JqZWN0LFxuICAgIEFjdGl2aXR5U3RyZWFtLFxuICAgIEJhc2VBY3Rpdml0eU9iamVjdCxcbn0gZnJvbSBcIkBzb2NrZXRodWIvc2NoZW1hc1wiO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiO1xuaW1wb3J0IHR5cGUgeyBTb2NrZXQgfSBmcm9tIFwic29ja2V0LmlvLWNsaWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TWFwcGluZyB7XG4gICAgY3JlZGVudGlhbHM6IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbiAgICBcImFjdGl2aXR5LW9iamVjdFwiOiBNYXA8c3RyaW5nLCBCYXNlQWN0aXZpdHlPYmplY3Q+O1xuICAgIGNvbm5lY3Q6IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbiAgICBqb2luOiBNYXA8c3RyaW5nLCBBY3Rpdml0eVN0cmVhbT47XG59XG5cbmludGVyZmFjZSBDdXN0b21FbWl0dGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBfZW1pdChzOiBzdHJpbmcsIG86IHVua25vd24sIGM/OiB1bmtub3duKTogdm9pZDtcbiAgICBjb25uZWN0KCk6IHZvaWQ7XG4gICAgZGlzY29ubmVjdCgpOiB2b2lkO1xuICAgIGNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNvY2tldGh1YkNsaWVudCAtIENsaWVudCBsaWJyYXJ5IGZvciBTb2NrZXRodWIgcHJvdG9jb2wgZ2F0ZXdheVxuICpcbiAqIEEgSmF2YVNjcmlwdCBjbGllbnQgZm9yIGNvbm5lY3RpbmcgdG8gU29ja2V0aHViIHNlcnZlcnMuIFByb3ZpZGVzIGEgaGlnaC1sZXZlbFxuICogQVBJIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgQWN0aXZpdHlTdHJlYW1zIG1lc3NhZ2VzIG92ZXIgU29ja2V0LklPLCB3aXRoXG4gKiBhdXRvbWF0aWMgc3RhdGUgbWFuYWdlbWVudCBhbmQgcmVjb25uZWN0aW9uIGhhbmRsaW5nLlxuICpcbiAqIFNvY2tldGh1YiBhY3RzIGFzIGEgcHJvdG9jb2wgZ2F0ZXdheSwgdHJhbnNsYXRpbmcgQWN0aXZpdHlTdHJlYW1zIG1lc3NhZ2VzIGludG9cbiAqIHZhcmlvdXMgcHJvdG9jb2xzIChYTVBQLCBJUkMsIFJTUywgZXRjLikuIFRoaXMgY2xpZW50IGhhbmRsZXMgdGhlIGNvbW11bmljYXRpb25cbiAqIHdpdGggdGhlIFNvY2tldGh1YiBzZXJ2ZXIsIGluY2x1ZGluZyBjcmVkZW50aWFsIG1hbmFnZW1lbnQsIGNvbm5lY3Rpb24gc3RhdGUsXG4gKiBhbmQgYXV0b21hdGljIHJlY29ubmVjdGlvbi5cbiAqXG4gKiAjIyBBdXRvbWF0aWMgUmVjb25uZWN0aW9uICYgU3RhdGUgUmVwbGF5XG4gKlxuICogVGhpcyBjbGllbnQgYXV0b21hdGljYWxseSBoYW5kbGVzIHRyYW5zaWVudCBuZXR3b3JrIGRpc2Nvbm5lY3Rpb25zIGJ5IHN0b3JpbmdcbiAqIGNvbm5lY3Rpb24gc3RhdGUgaW4gbWVtb3J5IGFuZCByZXBsYXlpbmcgaXQgd2hlbiB0aGUgc29ja2V0IHJlY29ubmVjdHMuXG4gKlxuICogIyMjIFNlY3VyaXR5IE1vZGVsXG4gKlxuICogKipTdG9yYWdlIExvY2F0aW9uOioqXG4gKiAtIEFsbCBjcmVkZW50aWFscyBhbmQgc3RhdGUgYXJlIHN0b3JlZCBPTkxZIGluIEphdmFTY3JpcHQgbWVtb3J5IChoZWFwKVxuICogLSBOb3RoaW5nIGlzIHBlcnNpc3RlZCB0byBsb2NhbFN0b3JhZ2UsIHNlc3Npb25TdG9yYWdlLCBjb29raWVzLCBvciBkaXNrXG4gKiAtIE1lbW9yeSBpcyBjbGVhcmVkIHdoZW4gdGhlIGJyb3dzZXIgdGFiIGNsb3NlcyBvciBwYWdlIHJlZnJlc2hlc1xuICpcbiAqICoqUmVwbGF5IFRyaWdnZXJzOioqXG4gKiAtIEF1dG9tYXRpYyByZXBsYXkgb2NjdXJzIG9uIFNvY2tldC5JTyByZWNvbm5lY3Rpb24gZXZlbnRzXG4gKiAtIFR5cGljYWxseSB0cmlnZ2VyZWQgYnkgYnJpZWYgbmV0d29yayBpbnRlcnJ1cHRpb25zIChXaUZpIHN3aXRjaGluZywgbW9iaWxlIG5ldHdvcmsgYmxpcHMpXG4gKiAtIERvZXMgTk9UIG9jY3VyIG9uIHBhZ2UgcmVmcmVzaCAobmV3IFNvY2tldGh1YkNsaWVudCBpbnN0YW5jZSA9IGVtcHR5IHN0YXRlKVxuICpcbiAqICoqU2VydmVyIFJlc3RhcnQgQmVoYXZpb3I6KipcbiAqIC0gSWYgc2VydmVyIHJlc3RhcnRzLCBjbGllbnQgc29ja2V0IHdpbGwgcmVjb25uZWN0IGFuZCByZXBsYXkgY3JlZGVudGlhbHNcbiAqIC0gU2VydmVyIG11c3QgaGFuZGxlIHJlcGxheWVkIGNyZWRlbnRpYWxzIGFwcHJvcHJpYXRlbHkgKHZhbGlkYXRlLCByZWplY3Qgc3RhbGUgc2Vzc2lvbnMsIGV0Yy4pXG4gKiAtIEFwcGxpY2F0aW9ucyBzaG91bGQgaW1wbGVtZW50IHByb3BlciBzZXNzaW9uIHZhbGlkYXRpb24gc2VydmVyLXNpZGVcbiAqXG4gKiAqKkxpZmV0aW1lOioqXG4gKiAtIENyZWRlbnRpYWxzIGV4aXN0IG9ubHkgZHVyaW5nIHRoZSBicm93c2VyIHRhYidzIGxpZmV0aW1lXG4gKiAtIENsZWFyZWQgb24gcGFnZSByZWxvYWQsIHRhYiBjbG9zZSwgb3IgbWFudWFsIGRpc2Nvbm5lY3RcbiAqIC0gTm90IGFjY2Vzc2libGUgYWNyb3NzIHRhYnMgb3IgYWZ0ZXIgYnJvd3NlciByZXN0YXJ0XG4gKlxuICogKipXaGF0IEdldHMgUmVwbGF5ZWQ6KipcbiAqIC0gQ3JlZGVudGlhbHMgKHVzZXJuYW1lL3Bhc3N3b3JkL3Rva2VucyBzZW50IHZpYSBjcmVkZW50aWFscyBldmVudClcbiAqIC0gQWN0aXZpdHkgT2JqZWN0cyAoYWN0b3IgZGVmaW5pdGlvbnMpXG4gKiAtIENvbm5lY3QgY29tbWFuZHMgKHBsYXRmb3JtIGNvbm5lY3Rpb25zKVxuICogLSBKb2luIGNvbW1hbmRzIChyb29tL2NoYW5uZWwgam9pbnMpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBjbGllbnRcbiAqIGNvbnN0IHNvY2tldCA9IGlvKCdodHRwOi8vbG9jYWxob3N0OjEwNTUwJyk7XG4gKiBjb25zdCBjbGllbnQgPSBuZXcgU29ja2V0aHViQ2xpZW50KHNvY2tldCk7XG4gKlxuICogLy8gU2VuZCBjcmVkZW50aWFscyAtIHRoZXNlIHdpbGwgYmUgcmVwbGF5ZWQgb24gcmVjb25uZWN0aW9uXG4gKiBjbGllbnQuc29ja2V0LmVtaXQoJ2NyZWRlbnRpYWxzJywge1xuICogICBhY3RvcjogJ3VzZXJAZXhhbXBsZS5jb20nLFxuICogICBvYmplY3Q6IHsgdXNlcm5hbWU6ICd1c2VyJywgcGFzc3dvcmQ6ICdwYXNzJyB9XG4gKiB9KTtcbiAqXG4gKiAvLyBJZiBuZXR3b3JrIGRpc2Nvbm5lY3RzIGFuZCByZWNvbm5lY3RzLCBjcmVkZW50aWFscyBhcmUgYXV0b21hdGljYWxseSByZXBsYXllZFxuICogLy8gSWYgcGFnZSByZWZyZXNoZXMsIGNyZWRlbnRpYWxzIGFyZSBsb3N0IGFuZCBtdXN0IGJlIHJlc2VudFxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvY2tldGh1YkNsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW4tbWVtb3J5IHN0b3JhZ2UgZm9yIGNsaWVudCBzdGF0ZSB0aGF0IHNob3VsZCBiZSByZXBsYXllZCBvbiByZWNvbm5lY3Rpb24uXG4gICAgICpcbiAgICAgKiBTZWN1cml0eTogU3RvcmVkIE9OTFkgaW4gSmF2YVNjcmlwdCBoZWFwIG1lbW9yeS4gTmV2ZXIgcGVyc2lzdGVkIHRvIGRpc2ssXG4gICAgICogbG9jYWxTdG9yYWdlLCBvciBhbnkgcGVybWFuZW50IHN0b3JhZ2UuIENsZWFyZWQgb24gcGFnZSByZWxvYWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBldmVudHM6IEV2ZW50TWFwcGluZyA9IHtcbiAgICAgICAgY3JlZGVudGlhbHM6IG5ldyBNYXAoKSxcbiAgICAgICAgXCJhY3Rpdml0eS1vYmplY3RcIjogbmV3IE1hcCgpLFxuICAgICAgICBjb25uZWN0OiBuZXcgTWFwKCksXG4gICAgICAgIGpvaW46IG5ldyBNYXAoKSxcbiAgICB9O1xuICAgIHByaXZhdGUgX3NvY2tldDogU29ja2V0O1xuICAgIHB1YmxpYyBBY3Rpdml0eVN0cmVhbXM6IEFTTWFuYWdlcjtcbiAgICBwdWJsaWMgc29ja2V0OiBDdXN0b21FbWl0dGVyO1xuICAgIHB1YmxpYyBkZWJ1ZyA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihzb2NrZXQ6IFNvY2tldCkge1xuICAgICAgICBpZiAoIXNvY2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU29ja2V0aHViQ2xpZW50IHJlcXVpcmVzIGEgc29ja2V0LmlvIGluc3RhbmNlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NvY2tldCA9IHNvY2tldDtcblxuICAgICAgICB0aGlzLnNvY2tldCA9IHRoaXMuY3JlYXRlUHVibGljRW1pdHRlcigpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU29ja2V0SU9IYW5kbGVycygpO1xuICAgICAgICB0aGlzLmluaXRBY3Rpdml0eVN0cmVhbXMoKTtcblxuICAgICAgICB0aGlzLkFjdGl2aXR5U3RyZWFtcy5vbihcbiAgICAgICAgICAgIFwiYWN0aXZpdHktb2JqZWN0LWNyZWF0ZVwiLFxuICAgICAgICAgICAgKG9iajogQWN0aXZpdHlPYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBzb2NrZXQuZW1pdChcImFjdGl2aXR5LW9iamVjdFwiLCBvYmosIChlcnI6IG5ldmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gY3JlYXRlIGFjdGl2aXR5LW9iamVjdCBcIiwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRBY3Rpdml0eU9iamVjdChvYmopO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIHNvY2tldC5vbihcImFjdGl2aXR5LW9iamVjdFwiLCAob2JqKSA9PiB7XG4gICAgICAgICAgICB0aGlzLkFjdGl2aXR5U3RyZWFtcy5PYmplY3QuY3JlYXRlKG9iaik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRBY3Rpdml0eVN0cmVhbXMoKSB7XG4gICAgICAgIHRoaXMuQWN0aXZpdHlTdHJlYW1zID0gQVNGYWN0b3J5KHsgc3BlY2lhbE9ianM6IFtcImNyZWRlbnRpYWxzXCJdIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIHN0b3JlZCBjcmVkZW50aWFscyB0byBwcmV2ZW50IGF1dG9tYXRpYyByZXBsYXkgb24gcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgc3RvcmVkIGNyZWRlbnRpYWxzIGZyb20gbWVtb3J5LiBVc2VmdWwgZm9yXG4gICAgICogc2VjdXJpdHktc2Vuc2l0aXZlIGFwcGxpY2F0aW9ucyB0aGF0IHdhbnQgdG8gcHJldmVudCBhdXRvbWF0aWMgY3JlZGVudGlhbFxuICAgICAqIHJlcGxheSB3aGVuIHRoZSBzb2NrZXQgcmVjb25uZWN0cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIENsZWFyIGNyZWRlbnRpYWxzIG9uIGRpc2Nvbm5lY3RcbiAgICAgKiBzYy5zb2NrZXQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICogICBzYy5jbGVhckNyZWRlbnRpYWxzKCk7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyQ3JlZGVudGlhbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQdWJsaWNFbWl0dGVyKCk6IEN1c3RvbUVtaXR0ZXIge1xuICAgICAgICBjb25zdCBzb2NrZXQgPSBuZXcgRXZlbnRFbWl0dGVyKCkgYXMgQ3VzdG9tRW1pdHRlcjtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHNvY2tldC5fZW1pdCA9IHNvY2tldC5lbWl0O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc29ja2V0LmVtaXQgPSAoZXZlbnQsIGNvbnRlbnQsIGNhbGxiYWNrKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT09IFwiY3JlZGVudGlhbHNcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDcmVkZW50aWFscyhjb250ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09IFwiYWN0aXZpdHktb2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QWN0aXZpdHlPYmplY3QoY29udGVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSBcIm1lc3NhZ2VcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRNZXNzYWdlKGNvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fc29ja2V0LmVtaXQoZXZlbnQgYXMgc3RyaW5nLCBjb250ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIHNvY2tldC5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgc29ja2V0LmRpc2Nvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zb2NrZXQuZGlzY29ubmVjdCgpO1xuICAgICAgICB9O1xuICAgICAgICBzb2NrZXQuY29ubmVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5jb25uZWN0KCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudEFjdGl2aXR5T2JqZWN0KGNvbnRlbnQ6IEFjdGl2aXR5T2JqZWN0KSB7XG4gICAgICAgIGlmIChjb250ZW50LmlkKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50c1tcImFjdGl2aXR5LW9iamVjdFwiXS5zZXQoY29udGVudC5pZCwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV2ZW50Q3JlZGVudGlhbHMoY29udGVudDogQWN0aXZpdHlTdHJlYW0pIHtcbiAgICAgICAgaWYgKGNvbnRlbnQub2JqZWN0ICYmIGNvbnRlbnQub2JqZWN0LnR5cGUgPT09IFwiY3JlZGVudGlhbHNcIikge1xuICAgICAgICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPVxuICAgICAgICAgICAgICAgIGNvbnRlbnQuYWN0b3IuaWQgfHwgKGNvbnRlbnQuYWN0b3IgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuY3JlZGVudGlhbHMuc2V0KGtleSwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV2ZW50TWVzc2FnZShjb250ZW50OiBCYXNlQWN0aXZpdHlPYmplY3QpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zb2NrZXQuY29ubmVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWl0aGVyIHN0b3JlcyBvciBkZWxldGUgdGhlIHNwZWNpZmllZCBjb250ZW50IG9udG8gdGhlIHN0b3JlZEpvaW5zIG1hcCxcbiAgICAgICAgLy8gZm9yIHJlcGx5IG9uY2Ugd2UncmUgYmFjayBvbmxpbmUuXG4gICAgICAgIGNvbnN0IGtleSA9IFNvY2tldGh1YkNsaWVudC5nZXRLZXkoY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgIGlmIChjb250ZW50LnR5cGUgPT09IFwiam9pblwiIHx8IGNvbnRlbnQudHlwZSA9PT0gXCJjb25uZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzW2NvbnRlbnQudHlwZV0uc2V0KGtleSwgY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImxlYXZlXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmpvaW4uZGVsZXRlKGtleSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImRpc2Nvbm5lY3RcIikge1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuY29ubmVjdC5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEtleShjb250ZW50OiBBY3Rpdml0eVN0cmVhbSkge1xuICAgICAgICBjb25zdCBhY3RvciA9IGNvbnRlbnQuYWN0b3I/LmlkIHx8IGNvbnRlbnQuYWN0b3I7XG4gICAgICAgIGlmICghYWN0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgYWN0b3IgcHJvcGVydHkgbm90IHByZXNlbnQgZm9yIG1lc3NhZ2UgdHlwZTogJHtjb250ZW50Py50eXBlfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbnRlbnQudGFyZ2V0XG4gICAgICAgICAgICA/IGNvbnRlbnQudGFyZ2V0LmlkIHx8IGNvbnRlbnQudGFyZ2V0XG4gICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgJHthY3Rvcn0tJHt0YXJnZXR9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvZyhtc2c6IHN0cmluZywgb2JqPzogdW5rbm93bikge1xuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5sb2cobXNnLCBvYmopO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclNvY2tldElPSGFuZGxlcnMoKSB7XG4gICAgICAgIC8vIG1pZGRsZXdhcmUgZm9yIGV2ZW50cyB3aGljaCBkb24ndCBkZWFsIGluIEFTIG9iamVjdHNcbiAgICAgICAgY29uc3QgY2FsbEhhbmRsZXIgPSAoZXZlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jIChvYmo/OiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50ID09PSBcImNvbm5lY3RcIikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5pZCA9IHRoaXMuX3NvY2tldC5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQXV0b21hdGljIHN0YXRlIHJlcGxheSBvbiByZWNvbm5lY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIFdoZW4gU29ja2V0LklPIHJlY29ubmVjdHMgYWZ0ZXIgYSBuZXR3b3JrIGludGVycnVwdGlvbiwgd2UgYXV0b21hdGljYWxseVxuICAgICAgICAgICAgICAgICAgICAgKiByZXBsYXkgYWxsIHN0b3JlZCBzdGF0ZSB0byByZXN0b3JlIHRoZSBzZXNzaW9uIHNlYW1sZXNzbHk6XG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIDEuIEFjdGl2aXR5IE9iamVjdHMgKGFjdG9yIGRlZmluaXRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgKiAyLiBDcmVkZW50aWFscyAoYXV0aGVudGljYXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAqIDMuIENvbm5lY3QgY29tbWFuZHMgKHBsYXRmb3JtIGNvbm5lY3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICAgKiA0LiBKb2luIGNvbW1hbmRzIChyb29tL2NoYW5uZWwgbWVtYmVyc2hpcHMpXG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIFRoaXMgYWxsb3dzIHRoZSBjbGllbnQgdG8gc3Vydml2ZSBicmllZiBuZXR3b3JrIGJsaXBzIHdpdGhvdXQgcmVxdWlyaW5nXG4gICAgICAgICAgICAgICAgICAgICAqIHVzZXIgaW50ZXJ2ZW50aW9uLiBIb3dldmVyLCB0aGUgc2VydmVyIG11c3QgcHJvcGVybHkgdmFsaWRhdGUgcmVwbGF5ZWRcbiAgICAgICAgICAgICAgICAgICAgICogY3JlZGVudGlhbHMgYXMgdGhleSBtYXkgYmUgc3RhbGUgb3IgcmV2b2tlZC5cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwbGF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhY3Rpdml0eS1vYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzW1wiYWN0aXZpdHktb2JqZWN0XCJdLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGxheShcImNyZWRlbnRpYWxzXCIsIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBsYXkoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRzLmNvbm5lY3QpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGxheShcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudHMuam9pbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gXCJkaXNjb25uZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KGV2ZW50LCBvYmopO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyByZWdpc3RlciBmb3IgZXZlbnRzIHRoYXQgZ2l2ZSB1cyBpbmZvcm1hdGlvbiBvbiBjb25uZWN0aW9uIHN0YXR1c1xuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJjb25uZWN0XCIsIGNhbGxIYW5kbGVyKFwiY29ubmVjdFwiKSk7XG4gICAgICAgIHRoaXMuX3NvY2tldC5vbihcImNvbm5lY3RfZXJyb3JcIiwgY2FsbEhhbmRsZXIoXCJjb25uZWN0X2Vycm9yXCIpKTtcbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwiZGlzY29ubmVjdFwiLCBjYWxsSGFuZGxlcihcImRpc2Nvbm5lY3RcIikpO1xuXG4gICAgICAgIC8vIHVzZSBhcyBtaWRkbGV3YXJlIHRvIHJlY2VpdmUgaW5jb21pbmcgU29ja2V0aHViIG1lc3NhZ2VzIGFuZCB1bnBhY2sgdGhlbVxuICAgICAgICAvLyB1c2luZyB0aGUgQWN0aXZpdHlTdHJlYW1zIGxpYnJhcnkgYmVmb3JlIHBhc3NpbmcgdGhlbSBhbG9uZyB0byB0aGUgYXBwLlxuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJtZXNzYWdlXCIsIChvYmopID0+IHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwibWVzc2FnZVwiLCB0aGlzLkFjdGl2aXR5U3RyZWFtcy5TdHJlYW0ob2JqKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEFjdGl2aXR5U3RyZWFtIHdpdGggYSB2YWxpZCBhY3Rvci5pZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhc0FjdG9ySWQoXG4gICAgICAgIG9iajogQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCxcbiAgICApOiBvYmogaXMgQWN0aXZpdHlTdHJlYW0ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJhY3RvclwiIGluIG9iaiAmJlxuICAgICAgICAgICAgb2JqLmFjdG9yICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqLmFjdG9yID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBcImlkXCIgaW4gb2JqLmFjdG9yICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqLmFjdG9yLmlkID09PSBcInN0cmluZ1wiXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGF5cyBwcmV2aW91c2x5IHNlbnQgZXZlbnRzIHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgU29ja2V0LklPIGNvbm5lY3Rpb24gaXNcbiAgICAgKiByZS1lc3RhYmxpc2hlZCBhZnRlciBhIHRyYW5zaWVudCBuZXR3b3JrIGludGVycnVwdGlvbi4gSXQgcmVzZW5kc1xuICAgICAqIGNyZWRlbnRpYWxzIGFuZCBjb25uZWN0aW9uIHN0YXRlIHNvIHRoZSB1c2VyIGRvZXNuJ3QgbmVlZCB0byBtYW51YWxseVxuICAgICAqIHJlLWF1dGhlbnRpY2F0ZSBvciByZWpvaW4gY2hhbm5lbHMuXG4gICAgICpcbiAgICAgKiBTZWN1cml0eSBjb25zaWRlcmF0aW9uczpcbiAgICAgKiAtIE9ubHkgcmVwbGF5cyBldmVudHMgc3RvcmVkIGluIG1lbW9yeSBkdXJpbmcgdGhpcyBzZXNzaW9uXG4gICAgICogLSBEb2VzIG5vdCByZXBsYXkgYWZ0ZXIgcGFnZSByZWZyZXNoIChtZW1vcnkgY2xlYXJlZClcbiAgICAgKiAtIFNlcnZlciBzaG91bGQgdmFsaWRhdGUgcmVwbGF5ZWQgY3JlZGVudGlhbHMgKG1heSBiZSBzdGFsZS9yZXZva2VkKVxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgLSBFdmVudCBuYW1lIHRvIGVtaXQgKFwiY3JlZGVudGlhbHNcIiwgXCJhY3Rpdml0eS1vYmplY3RcIiwgXCJtZXNzYWdlXCIpXG4gICAgICogQHBhcmFtIGFzTWFwIC0gTWFwIG9mIGV2ZW50cyB0byByZXBsYXlcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlcGxheShcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICBhc01hcDogTWFwPHN0cmluZywgQWN0aXZpdHlTdHJlYW0gfCBCYXNlQWN0aXZpdHlPYmplY3Q+LFxuICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBhc01hcC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRPYmogPSB0aGlzLkFjdGl2aXR5U3RyZWFtcy5TdHJlYW0ob2JqKTtcbiAgICAgICAgICAgIGxldCBpZCA9IGV4cGFuZGVkT2JqPy5pZDtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0FjdG9ySWQoZXhwYW5kZWRPYmopKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBleHBhbmRlZE9iai5hY3Rvci5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9nKGByZXBsYXlpbmcgJHtuYW1lfSBmb3IgJHtpZH1gKTtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KG5hbWUsIGV4cGFuZGVkT2JqKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiA8ZXhwbGFuYXRpb24+XG4oKGdsb2JhbDogYW55KSA9PiB7XG4gICAgZ2xvYmFsLlNvY2tldGh1YkNsaWVudCA9IFNvY2tldGh1YkNsaWVudDtcbiAgICAvLyBAdHMtaWdub3JlXG59KSh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDoge30pO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogInFZQUVBLElBQUksRUFBTSxPQUFPLFVBQVUsZUFDdkIsRUFBUyxJQVNiLFNBQVMsQ0FBTSxFQUFHLEVBU2xCLEdBQUksT0FBTyxRQU9ULEdBTkEsRUFBTyxVQUFZLE9BQU8sT0FBTyxJQUFJLEVBTWpDLENBQUMsSUFBSSxFQUFPLEVBQUUsVUFBVyxFQUFTLEdBWXhDLFNBQVMsQ0FBRSxDQUFDLEVBQUksRUFBUyxFQUFNLENBQzdCLEtBQUssR0FBSyxFQUNWLEtBQUssUUFBVSxFQUNmLEtBQUssS0FBTyxHQUFRLEdBY3RCLFNBQVMsQ0FBVyxDQUFDLEVBQVMsRUFBTyxFQUFJLEVBQVMsRUFBTSxDQUN0RCxH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QUFLLFFBQVEsR0FBRyxVQUFXLENBQUMsSUFBUSxDQUNoQyxLQUFLLE9BQU8sTUFBTSxVQUFXLEtBQUssZ0JBQWdCLE9BQU8sQ0FBRyxDQUFDLEVBQ2hFLEVBTUcsVUFBVSxDQUNkLEVBQ3FCLENBQ3JCLE1BQ0ksVUFBVyxHQUNYLEVBQUksUUFBVSxNQUNkLE9BQU8sRUFBSSxRQUFVLFVBQ3JCLE9BQVEsRUFBSSxPQUNaLE9BQU8sRUFBSSxNQUFNLEtBQU8sU0FvQnhCLE1BQU0sQ0FDVixFQUNBLEVBQ0YsQ0FDRSxRQUFXLEtBQU8sRUFBTSxPQUFPLEVBQUcsQ0FDOUIsSUFBTSxFQUFjLEtBQUssZ0JBQWdCLE9BQU8sQ0FBRyxFQUMvQyxFQUFLLEdBQWEsR0FDdEIsR0FBSSxLQUFLLFdBQVcsQ0FBVyxFQUMzQixFQUFLLEVBQVksTUFBTSxHQUUzQixLQUFLLElBQUksYUFBYSxTQUFZLEdBQUksRUFDdEMsS0FBSyxRQUFRLEtBQUssRUFBTSxDQUFXLEdBRy9DLEVBR0MsQ0FBQyxJQUFnQixDQUNkLEVBQU8sZ0JBQWtCLElBRTFCLE9BQU8sU0FBVyxTQUFXLE9BQVMsQ0FBQyxDQUFDIiwKICAiZGVidWdJZCI6ICIxREZGRjQ5NEU4N0UyQUYzNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
20
+ `,u+=d.map(function(_,w){return p(this.line-d.length+w+1,h)+" "+_},this).join(`
21
+ `),u+=`
22
+ `+p("",h+m)+`^
23
+ `,u}else return u+" at index "+(this.index-1);function p(_,w){var I=String(_);return Array(w-I.length+1).join(" ")+I}};function i(c,u,l){if(c instanceof s)var d=c,l=u;else var d=s.fromCompiled(c,u);this.grammar=d,this.options={keepHistory:!1,lexer:d.lexer||new n};for(var v in l||{})this.options[v]=l[v];this.lexer=this.options.lexer,this.lexerState=void 0;var m=new r(d,0),h=this.table=[m];m.wants[d.start]=[],m.predict(d.start),m.process(),this.current=0}i.fail={},i.prototype.feed=function(c){var u=this.lexer;u.reset(c,this.lexerState);var l;while(!0){try{if(l=u.next(),!l)break}catch(M){var h=new r(this.grammar,this.current+1);this.table.push(h);var d=Error(this.reportLexerError(M));throw d.offset=this.current,d.token=M.token,d}var v=this.table[this.current];if(!this.options.keepHistory)delete this.table[this.current-1];var m=this.current+1,h=new r(this.grammar,m);this.table.push(h);var p=l.text!==void 0?l.text:l.value,_=u.constructor===n?l.value:l,w=v.scannable;for(var I=w.length;I--;){var O=w[I],D=O.rule.symbols[O.dot];if(D.test?D.test(_):D.type?D.type===l.type:D.literal===p){var S=O.nextState({data:_,token:l,isToken:!0,reference:m-1});h.states.push(S)}}if(h.process(),h.states.length===0){var d=Error(this.reportError(l));throw d.offset=this.current,d.token=l,d}if(this.options.keepHistory)v.lexerState=u.save();this.current++}if(v)this.lexerState=u.save();return this.results=this.finish(),this},i.prototype.reportLexerError=function(c){var u,l,d=c.token;if(d)u="input "+JSON.stringify(d.text[0])+" (lexer error)",l=this.lexer.formatError(d,"Syntax error");else u="input (lexer error)",l=c.message;return this.reportErrorCommon(l,u)},i.prototype.reportError=function(c){var u=(c.type?c.type+" token: ":"")+JSON.stringify(c.value!==void 0?c.value:c),l=this.lexer.formatError(c,"Syntax error");return this.reportErrorCommon(l,u)},i.prototype.reportErrorCommon=function(c,u){var l=[];l.push(c);var d=this.table.length-2,v=this.table[d],m=v.states.filter(function(p){var _=p.rule.symbols[p.dot];return _&&typeof _!=="string"});if(m.length===0)l.push("Unexpected "+u+`. I did not expect any more input. Here is the state of my parse table:
24
+ `),this.displayStateStack(v.states,l);else{l.push("Unexpected "+u+`. Instead, I was expecting to see one of the following:
25
+ `);var h=m.map(function(p){return this.buildFirstStateStack(p,[])||[p]},this);h.forEach(function(p){var _=p[0],w=_.rule.symbols[_.dot],I=this.getSymbolDisplay(w);l.push("A "+I+" based on:"),this.displayStateStack(p,l)},this)}return l.push(""),l.join(`
26
+ `)},i.prototype.displayStateStack=function(c,u){var l,d=0;for(var v=0;v<c.length;v++){var m=c[v],h=m.rule.toString(m.dot);if(h===l)d++;else{if(d>0)u.push(" ^ "+d+" more lines identical to this");d=0,u.push(" "+h)}l=h}},i.prototype.getSymbolDisplay=function(c){return o(c)},i.prototype.buildFirstStateStack=function(c,u){if(u.indexOf(c)!==-1)return null;if(c.wantedBy.length===0)return[c];var l=c.wantedBy[0],d=[c].concat(u),v=this.buildFirstStateStack(l,d);if(v===null)return null;return[c].concat(v)},i.prototype.save=function(){var c=this.table[this.current];return c.lexerState=this.lexerState,c},i.prototype.restore=function(c){var u=c.index;this.current=u,this.table[u]=c,this.table.splice(u+1),this.lexerState=c.lexerState,this.results=this.finish()},i.prototype.rewind=function(c){if(!this.options.keepHistory)throw Error("set option `keepHistory` to enable rewinding");this.restore(this.table[c])},i.prototype.finish=function(){var c=[],u=this.grammar.start,l=this.table[this.table.length-1];return l.states.forEach(function(d){if(d.rule.name===u&&d.dot===d.rule.symbols.length&&d.reference===0&&d.data!==i.fail)c.push(d)}),c.map(function(d){return d.data})};function o(c){var u=typeof c;if(u==="string")return c;else if(u==="object")if(c.literal)return JSON.stringify(c.literal);else if(c instanceof RegExp)return"character matching "+c;else if(c.type)return c.type+" token";else if(c.test)return"token matching "+String(c.test);else throw Error("Unknown symbol type: "+c)}function a(c){var u=typeof c;if(u==="string")return c;else if(u==="object")if(c.literal)return JSON.stringify(c.literal);else if(c instanceof RegExp)return c.toString();else if(c.type)return"%"+c.type;else if(c.test)return"<"+String(c.test)+">";else throw Error("Unknown symbol type: "+c)}return{Parser:i,Grammar:s,Rule:e}})});var zg=b(function(El){Object.defineProperty(El,"__esModule",{value:!0});function et(e){return e[0]}var Ug=(e)=>[].concat(...e.map((t)=>Array.isArray(t)?Ug(t):t));function Dn(e){if(e){if(Array.isArray(e))return Ug(e).join("");return e}return""}var Zk={Lexer:void 0,ParserRules:[{name:"Reverse_path",symbols:["Path"]},{name:"Reverse_path$string$1",symbols:[{literal:"<"},{literal:">"}],postprocess:(e)=>e.join("")},{name:"Reverse_path",symbols:["Reverse_path$string$1"]},{name:"Forward_path$subexpression$1$subexpression$1",symbols:[{literal:"<"},/[pP]/,/[oO]/,/[sS]/,/[tT]/,/[mM]/,/[aA]/,/[sS]/,/[tT]/,/[eE]/,/[rR]/,{literal:"@"}],postprocess:function(e){return e.join("")}},{name:"Forward_path$subexpression$1",symbols:["Forward_path$subexpression$1$subexpression$1","Domain",{literal:">"}]},{name:"Forward_path",symbols:["Forward_path$subexpression$1"]},{name:"Forward_path$subexpression$2",symbols:[{literal:"<"},/[pP]/,/[oO]/,/[sS]/,/[tT]/,/[mM]/,/[aA]/,/[sS]/,/[tT]/,/[eE]/,/[rR]/,{literal:">"}],postprocess:function(e){return e.join("")}},{name:"Forward_path",symbols:["Forward_path$subexpression$2"]},{name:"Forward_path",symbols:["Path"]},{name:"Path$ebnf$1$subexpression$1",symbols:["A_d_l",{literal:":"}]},{name:"Path$ebnf$1",symbols:["Path$ebnf$1$subexpression$1"],postprocess:et},{name:"Path$ebnf$1",symbols:[],postprocess:()=>null},{name:"Path",symbols:[{literal:"<"},"Path$ebnf$1","Mailbox",{literal:">"}]},{name:"A_d_l$ebnf$1",symbols:[]},{name:"A_d_l$ebnf$1$subexpression$1",symbols:[{literal:","},"At_domain"]},{name:"A_d_l$ebnf$1",symbols:["A_d_l$ebnf$1","A_d_l$ebnf$1$subexpression$1"],postprocess:(e)=>e[0].concat([e[1]])},{name:"A_d_l",symbols:["At_domain","A_d_l$ebnf$1"]},{name:"At_domain",symbols:[{literal:"@"},"Domain"]},{name:"Domain$ebnf$1",symbols:[]},{name:"Domain$ebnf$1$subexpression$1",symbols:[{literal:"."},"sub_domain"]},{name:"Domain$ebnf$1",symbols:["Domain$ebnf$1","Domain$ebnf$1$subexpression$1"],postprocess:(e)=>e[0].concat([e[1]])},{name:"Domain",symbols:["sub_domain","Domain$ebnf$1"]},{name:"sub_domain",symbols:["U_label"]},{name:"Let_dig",symbols:["ALPHA_DIGIT"],postprocess:et},{name:"Ldh_str$ebnf$1",symbols:[]},{name:"Ldh_str$ebnf$1",symbols:["Ldh_str$ebnf$1","ALPHA_DIG_DASH"],postprocess:(e)=>e[0].concat([e[1]])},{name:"Ldh_str",symbols:["Ldh_str$ebnf$1","Let_dig"]},{name:"U_Let_dig",symbols:["ALPHA_DIGIT_U"],postprocess:et},{name:"U_Ldh_str$ebnf$1",symbols:[]},{name:"U_Ldh_str$ebnf$1",symbols:["U_Ldh_str$ebnf$1","ALPHA_DIG_DASH_U"],postprocess:(e)=>e[0].concat([e[1]])},{name:"U_Ldh_str",symbols:["U_Ldh_str$ebnf$1","U_Let_dig"]},{name:"U_label$ebnf$1$subexpression$1",symbols:["U_Ldh_str"]},{name:"U_label$ebnf$1",symbols:["U_label$ebnf$1$subexpression$1"],postprocess:et},{name:"U_label$ebnf$1",symbols:[],postprocess:()=>null},{name:"U_label",symbols:["U_Let_dig","U_label$ebnf$1"]},{name:"address_literal$subexpression$1",symbols:["IPv4_address_literal"]},{name:"address_literal$subexpression$1",symbols:["IPv6_address_literal"]},{name:"address_literal$subexpression$1",symbols:["General_address_literal"]},{name:"address_literal",symbols:[{literal:"["},"address_literal$subexpression$1",{literal:"]"}]},{name:"non_local_part",symbols:["Domain"],postprocess:function(e){return{DomainName:Dn(e[0])}}},{name:"non_local_part",symbols:["address_literal"],postprocess:function(e){return{AddressLiteral:Dn(e[0])}}},{name:"Mailbox",symbols:["Local_part",{literal:"@"},"non_local_part"],postprocess:function(e){return{localPart:Dn(e[0]),domainPart:Dn(e[2])}}},{name:"Local_part",symbols:["Dot_string"],postprocess:function(e){return{DotString:Dn(e[0])}}},{name:"Local_part",symbols:["Quoted_string"],postprocess:function(e){return{QuotedString:Dn(e[0])}}},{name:"Dot_string$ebnf$1",symbols:[]},{name:"Dot_string$ebnf$1$subexpression$1",symbols:[{literal:"."},"Atom"]},{name:"Dot_string$ebnf$1",symbols:["Dot_string$ebnf$1","Dot_string$ebnf$1$subexpression$1"],postprocess:(e)=>e[0].concat([e[1]])},{name:"Dot_string",symbols:["Atom","Dot_string$ebnf$1"]},{name:"Atom$ebnf$1",symbols:[/[0-9A-Za-z!#$%&'*+\-/=?^_`{|}~\u0080-\uFFFF/]/]},{name:"Atom$ebnf$1",symbols:["Atom$ebnf$1",/[0-9A-Za-z!#$%&'*+\-/=?^_`{|}~\u0080-\uFFFF/]/],postprocess:(e)=>e[0].concat([e[1]])},{name:"Atom",symbols:["Atom$ebnf$1"]},{name:"Quoted_string$ebnf$1",symbols:[]},{name:"Quoted_string$ebnf$1",symbols:["Quoted_string$ebnf$1","QcontentSMTP"],postprocess:(e)=>e[0].concat([e[1]])},{name:"Quoted_string",symbols:["DQUOTE","Quoted_string$ebnf$1","DQUOTE"]},{name:"QcontentSMTP",symbols:["qtextSMTP"]},{name:"QcontentSMTP",symbols:["quoted_pairSMTP"]},{name:"quoted_pairSMTP",symbols:[{literal:"\\"},/[\x20-\x7e]/]},{name:"qtextSMTP",symbols:[/[\x20-\x21\x23-\x5b\x5d-\x7e\u0080-\uFFFF]/],postprocess:et},{name:"IPv4_address_literal$macrocall$2",symbols:[{literal:"."},"Snum"]},{name:"IPv4_address_literal$macrocall$1",symbols:["IPv4_address_literal$macrocall$2","IPv4_address_literal$macrocall$2","IPv4_address_literal$macrocall$2"]},{name:"IPv4_address_literal",symbols:["Snum","IPv4_address_literal$macrocall$1"]},{name:"IPv6_address_literal$subexpression$1",symbols:[/[iI]/,/[pP]/,/[vV]/,{literal:"6"},{literal:":"}],postprocess:function(e){return e.join("")}},{name:"IPv6_address_literal",symbols:["IPv6_address_literal$subexpression$1","IPv6_addr"]},{name:"General_address_literal$ebnf$1",symbols:["dcontent"]},{name:"General_address_literal$ebnf$1",symbols:["General_address_literal$ebnf$1","dcontent"],postprocess:(e)=>e[0].concat([e[1]])},{name:"General_address_literal",symbols:["Standardized_tag",{literal:":"},"General_address_literal$ebnf$1"]},{name:"Standardized_tag",symbols:["Ldh_str"]},{name:"dcontent",symbols:[/[\x21-\x5a\x5e-\x7e]/],postprocess:et},{name:"Snum",symbols:["DIGIT"]},{name:"Snum$subexpression$1",symbols:[/[1-9]/,"DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$1"]},{name:"Snum$subexpression$2",symbols:[{literal:"1"},"DIGIT","DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$2"]},{name:"Snum$subexpression$3",symbols:[{literal:"2"},/[0-4]/,"DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$3"]},{name:"Snum$subexpression$4",symbols:[{literal:"2"},{literal:"5"},/[0-5]/]},{name:"Snum",symbols:["Snum$subexpression$4"]},{name:"IPv6_addr",symbols:["IPv6_full"]},{name:"IPv6_addr",symbols:["IPv6_comp"]},{name:"IPv6_addr",symbols:["IPv6v4_full"]},{name:"IPv6_addr",symbols:["IPv6v4_comp"]},{name:"IPv6_hex",symbols:["HEXDIG"]},{name:"IPv6_hex$subexpression$1",symbols:["HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$1"]},{name:"IPv6_hex$subexpression$2",symbols:["HEXDIG","HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$2"]},{name:"IPv6_hex$subexpression$3",symbols:["HEXDIG","HEXDIG","HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$3"]},{name:"IPv6_full$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_full$macrocall$1",symbols:["IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2"]},{name:"IPv6_full",symbols:["IPv6_hex","IPv6_full$macrocall$1"]},{name:"IPv6_comp$ebnf$1$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_comp$ebnf$1$subexpression$1$macrocall$1",symbols:["IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2"]},{name:"IPv6_comp$ebnf$1$subexpression$1",symbols:["IPv6_hex","IPv6_comp$ebnf$1$subexpression$1$macrocall$1"]},{name:"IPv6_comp$ebnf$1",symbols:["IPv6_comp$ebnf$1$subexpression$1"],postprocess:et},{name:"IPv6_comp$ebnf$1",symbols:[],postprocess:()=>null},{name:"IPv6_comp$string$1",symbols:[{literal:":"},{literal:":"}],postprocess:(e)=>e.join("")},{name:"IPv6_comp$ebnf$2$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_comp$ebnf$2$subexpression$1$macrocall$1",symbols:["IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2"]},{name:"IPv6_comp$ebnf$2$subexpression$1",symbols:["IPv6_hex","IPv6_comp$ebnf$2$subexpression$1$macrocall$1"]},{name:"IPv6_comp$ebnf$2",symbols:["IPv6_comp$ebnf$2$subexpression$1"],postprocess:et},{name:"IPv6_comp$ebnf$2",symbols:[],postprocess:()=>null},{name:"IPv6_comp",symbols:["IPv6_comp$ebnf$1","IPv6_comp$string$1","IPv6_comp$ebnf$2"]},{name:"IPv6v4_full$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_full$macrocall$1",symbols:["IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2"]},{name:"IPv6v4_full",symbols:["IPv6_hex","IPv6v4_full$macrocall$1",{literal:":"},"IPv4_address_literal"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1$macrocall$1",symbols:["IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1",symbols:["IPv6_hex","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$1"]},{name:"IPv6v4_comp$ebnf$1",symbols:["IPv6v4_comp$ebnf$1$subexpression$1"],postprocess:et},{name:"IPv6v4_comp$ebnf$1",symbols:[],postprocess:()=>null},{name:"IPv6v4_comp$string$1",symbols:[{literal:":"},{literal:":"}],postprocess:(e)=>e.join("")},{name:"IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_comp$ebnf$2$subexpression$1$macrocall$1",symbols:["IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2"]},{name:"IPv6v4_comp$ebnf$2$subexpression$1",symbols:["IPv6_hex","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$1",{literal:":"}]},{name:"IPv6v4_comp$ebnf$2",symbols:["IPv6v4_comp$ebnf$2$subexpression$1"],postprocess:et},{name:"IPv6v4_comp$ebnf$2",symbols:[],postprocess:()=>null},{name:"IPv6v4_comp",symbols:["IPv6v4_comp$ebnf$1","IPv6v4_comp$string$1","IPv6v4_comp$ebnf$2","IPv4_address_literal"]},{name:"DIGIT",symbols:[/[0-9]/],postprocess:et},{name:"ALPHA_DIGIT_U",symbols:[/[0-9A-Za-z\u0080-\uFFFF]/],postprocess:et},{name:"ALPHA_DIGIT",symbols:[/[0-9A-Za-z]/],postprocess:et},{name:"ALPHA_DIG_DASH",symbols:[/[-0-9A-Za-z]/],postprocess:et},{name:"ALPHA_DIG_DASH_U",symbols:[/[-0-9A-Za-z\u0080-\uFFFF]/],postprocess:et},{name:"HEXDIG",symbols:[/[0-9A-Fa-f]/],postprocess:et},{name:"DQUOTE",symbols:[{literal:'"'}],postprocess:et}],ParserStart:"Reverse_path"};El.default=Zk});var da=b(function(vt){var Yk=vt&&vt.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(vt,"__esModule",{value:!0});vt.canonicalize=vt.canonicalize_quoted_string=vt.normalize=vt.normalize_dot_string=vt.parse=void 0;var la=Vg(),Fg=Yk(zg());Fg.default.ParserStart="Mailbox";var eR=la.Grammar.fromCompiled(Fg.default);function kl(e){if(e.length>986)throw Error("address too long");let r=new la.Parser(eR);if(r.feed(e),r.results.length!==1)throw Error("address parsing failed: ambiguous grammar");let s=e.lastIndexOf("@"),n=e.substring(s+1);if(n[0]!=="["){if(n.length>253)throw Error("domain too long");let i=n.split(".");if(i.length<2)throw Error("domain not fully qualified");if(i[i.length-1].length<2)throw Error("top level domain label too short");if(i.sort(function(o,a){return a.length-o.length}),i[0].length>63)throw Error("domain label too long")}return r.results[0]}vt.parse=kl;function Lg(e){return function(){let s=e.indexOf("+");if(s===-1)return e;return e.substr(0,s)}().replace(/\./g,"").toLowerCase()}vt.normalize_dot_string=Lg;function tR(e){var t,r;let s=kl(e),n=(t=s.domainPart.AddressLiteral)!==null&&t!==void 0?t:s.domainPart.DomainName.toLowerCase();return`${(r=s.localPart.QuotedString)!==null&&r!==void 0?r:Lg(s.localPart.DotString)}@${n}`}vt.normalize=tR;function Hg(e){return`"${e.substr(1).substr(0,e.length-2).replace(/(?:\\(.))/g,"$1").replace(/(?:(["\\]))/g,"\\$1")}"`}vt.canonicalize_quoted_string=Hg;function rR(e){var t;let r=kl(e),s=(t=r.domainPart.AddressLiteral)!==null&&t!==void 0?t:r.domainPart.DomainName.toLowerCase();return`${r.localPart.QuotedString?Hg(r.localPart.QuotedString):r.localPart.DotString}@${s}`}vt.canonicalize=rR});var Yg=b(function(DT,Zg){var fa=Object.prototype.hasOwnProperty,Xg=Object.prototype.toString,{defineProperty:Kg,getOwnPropertyDescriptor:Gg}=Object,Jg=function(t){if(typeof Array.isArray==="function")return Array.isArray(t);return Xg.call(t)==="[object Array]"},Wg=function(t){if(!t||Xg.call(t)!=="[object Object]")return!1;var r=fa.call(t,"constructor"),s=t.constructor&&t.constructor.prototype&&fa.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!r&&!s)return!1;var n;for(n in t);return typeof n>"u"||fa.call(t,n)},Qg=function(t,r){if(Kg&&r.name==="__proto__")Kg(t,r.name,{enumerable:!0,configurable:!0,value:r.newValue,writable:!0});else t[r.name]=r.newValue},Bg=function(t,r){if(r==="__proto__"){if(!fa.call(t,r))return;else if(Gg)return Gg(t,r).value}return t[r]};Zg.exports=function e(){var t,r,s,n,i,o,a=arguments[0],c=1,u=arguments.length,l=!1;if(typeof a==="boolean")l=a,a=arguments[1]||{},c=2;if(a==null||typeof a!=="object"&&typeof a!=="function")a={};for(;c<u;++c)if(t=arguments[c],t!=null){for(r in t)if(s=Bg(a,r),n=Bg(t,r),a!==n){if(l&&n&&(Wg(n)||(i=Jg(n)))){if(i)i=!1,o=s&&Jg(s)?s:[];else o=s&&Wg(s)?s:{};Qg(a,{name:r,newValue:e(l,o,n)})}else if(typeof n<"u")Qg(a,{name:r,newValue:n})}}return a}});var ev=b(function(MT,sR){sR.exports=[{scheme:"aaa",description:"Diameter Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6733"}]},{scheme:"aaas",description:"Diameter Protocol with Secure Transport",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6733"}]},{scheme:"about",description:"about",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6694"}]},{scheme:"acap",description:"application configuration access protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2244"}]},{scheme:"acct",description:"acct",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7565"}]},{scheme:"cap",description:"Calendar Access Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4324"}]},{scheme:"cid",description:"content identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2392"}]},{scheme:"coap",description:"coap",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7252"}]},{scheme:"coaps",description:"coaps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7252"}]},{scheme:"crid",description:"TV-Anytime Content Reference Identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4078"}]},{scheme:"data",description:"data",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2397"}]},{scheme:"dav",description:"dav",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4918"}]},{scheme:"dict",description:"dictionary service protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2229"}]},{scheme:"dns",description:"Domain Name System",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4501"}]},{scheme:"example",description:"example",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7595"}]},{scheme:"file",description:"Host-specific file names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"ftp",description:"File Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"geo",description:"Geographic Locations",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5870"}]},{scheme:"go",description:"go",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3368"}]},{scheme:"gopher",description:"The Gopher Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4266"}]},{scheme:"h323",description:"H.323",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3508"}]},{scheme:"http",description:"Hypertext Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7230"}]},{scheme:"https",description:"Hypertext Transfer Protocol Secure",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7230"}]},{scheme:"iax",description:"Inter-Asterisk eXchange Version 2",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5456"}]},{scheme:"icap",description:"Internet Content Adaptation Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3507"}]},{scheme:"im",description:"Instant Messaging",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3860"}]},{scheme:"imap",description:"internet message access protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5092"}]},{scheme:"info",description:`Information Assets with Identifiers in Public Namespaces.
27
+ (section 3) defines an "info" registry
28
+ of public namespaces, which is maintained by NISO and can be accessed
29
+ from .`,reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4452"}]},{scheme:"ipp",description:"Internet Printing Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3510"}]},{scheme:"ipps",description:"Internet Printing Protocol over HTTPS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7472"}]},{scheme:"iris",description:"Internet Registry Information Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3981"}]},{scheme:"iris.beep",description:"iris.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3983"}]},{scheme:"iris.lwz",description:"iris.lwz",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4993"}]},{scheme:"iris.xpc",description:"iris.xpc",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4992"}]},{scheme:"iris.xpcs",description:"iris.xpcs",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4992"}]},{scheme:"jabber",description:"jabber",reference:[],template:"http://www.iana.org/assignments/uri-schemes/perm/jabber"},{scheme:"ldap",description:"Lightweight Directory Access Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4516"}]},{scheme:"mailto",description:"Electronic mail address",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6068"}]},{scheme:"mid",description:"message identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2392"}]},{scheme:"msrp",description:"Message Session Relay Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4975"}]},{scheme:"msrps",description:"Message Session Relay Protocol Secure",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4975"}]},{scheme:"mtqp",description:"Message Tracking Query Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3887"}]},{scheme:"mupdate",description:"Mailbox Update (MUPDATE) Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3656"}]},{scheme:"news",description:"USENET news",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"nfs",description:"network file system protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2224"}]},{scheme:"ni",description:"ni",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6920"}]},{scheme:"nih",description:"nih",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6920"}]},{scheme:"nntp",description:"USENET news using NNTP access",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"opaquelocktoken",description:"opaquelocktokent",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4918"}]},{scheme:"pkcs11",description:"PKCS#11",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7512"}]},{scheme:"pop",description:"Post Office Protocol v3",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2384"}]},{scheme:"pres",description:"Presence",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3859"}]},{scheme:"reload",description:"reload",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6940"}]},{scheme:"rtsp",description:"Real-time Streaming Protocol (RTSP)",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"},{type:"draft",href:"http://www.iana.org/go/RFC-ietf-mmusic-rfc2326bis-40"}]},{scheme:"rtsps",description:"Real-time Streaming Protocol (RTSP) over TLS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"},{type:"draft",href:"http://www.iana.org/go/RFC-ietf-mmusic-rfc2326bis-40"}]},{scheme:"rtspu",description:"Real-time Streaming Protocol (RTSP) over unreliable datagram transport",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"}]},{scheme:"service",description:"service location",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2609"}]},{scheme:"session",description:"session",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6787"}]},{scheme:"shttp",description:"Secure Hypertext Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2660"}]},{scheme:"sieve",description:"ManageSieve Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5804"}]},{scheme:"sip",description:"session initiation protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3261"}]},{scheme:"sips",description:"secure session initiation protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3261"}]},{scheme:"sms",description:"Short Message Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5724"}]},{scheme:"snmp",description:"Simple Network Management Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4088"}]},{scheme:"soap.beep",description:"soap.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4227"}]},{scheme:"soap.beeps",description:"soap.beeps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4227"}]},{scheme:"stun",description:"stun",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7064"}]},{scheme:"stuns",description:"stuns",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7064"}]},{scheme:"tag",description:"tag",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4151"}]},{scheme:"tel",description:"telephone",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"telnet",description:"Reference to interactive sessions",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4248"}]},{scheme:"tftp",description:"Trivial File Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3617"}]},{scheme:"thismessage",description:"multipart/related relative reference resolution",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2557"}],template:"http://www.iana.org/assignments/uri-schemes/perm/thismessage"},{scheme:"tip",description:"Transaction Internet Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2371"}]},{scheme:"tn3270",description:"Interactive 3270 emulation sessions",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6270"}]},{scheme:"turn",description:"turn",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7065"}]},{scheme:"turns",description:"turns",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7065"}]},{scheme:"tv",description:"TV Broadcasts",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2838"}]},{scheme:"urn",description:"Uniform Resource Names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2141"},{type:"registry",href:"http://www.iana.org/assignments/urn-namespaces"}]},{scheme:"vemmi",description:"versatile multimedia interface",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2122"}]},{scheme:"vnc",description:"Remote Framebuffer Protocol",reference:[{type:"draft",href:"http://www.iana.org/go/RFC-warden-appsawg-vnc-scheme-10"}]},{scheme:"ws",description:"WebSocket connections",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6455"}]},{scheme:"wss",description:"Encrypted WebSocket connections",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6455"}]},{scheme:"xcon",description:"xcon",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6501"}]},{scheme:"xcon-userid",description:"xcon-userid",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6501"}]},{scheme:"xmlrpc.beep",description:"xmlrpc.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3529"}]},{scheme:"xmlrpc.beeps",description:"xmlrpc.beeps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3529"}]},{scheme:"xmpp",description:"Extensible Messaging and Presence Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5122"}]},{scheme:"z39.50r",description:"Z39.50 Retrieval",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]},{scheme:"z39.50s",description:"Z39.50 Session",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]}]});var tv=b(function(VT,nR){nR.exports=[{scheme:"acr",description:"acr",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/acr"},{scheme:"adiumxtra",description:"adiumxtra",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/adiumxtra"},{scheme:"afp",description:"afp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/afp"},{scheme:"afs",description:"Andrew File System global file names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"aim",description:"aim",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/aim"},{scheme:"appdata",description:"appdata",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/appdata"},{scheme:"apt",description:"apt",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/apt"},{scheme:"attachment",description:"attachment",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/attachment"},{scheme:"aw",description:"aw",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/aw"},{scheme:"barion",description:"barion",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/barion"},{scheme:"beshare",description:"beshare",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/beshare"},{scheme:"bitcoin",description:"bitcoin",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/bitcoin"},{scheme:"blob",description:"blob",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/blob"},{scheme:"bolo",description:"bolo",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/bolo"},{scheme:"callto",description:"callto",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/callto"},{scheme:"chrome",description:"chrome",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/chrome"},{scheme:"chrome-extension",description:"chrome-extension",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/chrome-extension"},{scheme:"com-eventbrite-attendee",description:"com-eventbrite-attendee",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/com-eventbrite-attendee"},{scheme:"content",description:"content",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/content"},{scheme:"cvs",description:"cvs",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/cvs"},{scheme:"dis",description:"dis",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dis"},{scheme:"dlna-playcontainer",description:"dlna-playcontainer",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dlna-playcontainer"},{scheme:"dlna-playsingle",description:"dlna-playsingle",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dlna-playsingle"},{scheme:"dntp",description:"dntp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dntp"},{scheme:"dtn",description:"DTNRG research and development",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5050"}]},{scheme:"dvb",description:"dvb",reference:[{type:"draft",href:"http://www.iana.org/go/draft-mcroberts-uri-dvb"}]},{scheme:"ed2k",description:"ed2k",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ed2k"},{scheme:"facetime",description:"facetime",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/facetime"},{scheme:"feed",description:"feed",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/feed"},{scheme:"feedready",description:"feedready",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/feedready"},{scheme:"finger",description:"finger",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/finger"},{scheme:"fish",description:"fish",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/fish"},{scheme:"gg",description:"gg",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gg"},{scheme:"git",description:"git",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/git"},{scheme:"gizmoproject",description:"gizmoproject",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gizmoproject"},{scheme:"gtalk",description:"gtalk",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gtalk"},{scheme:"ham",description:"ham",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7046"}]},{scheme:"hcp",description:"hcp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/hcp"},{scheme:"icon",description:"icon",reference:[{type:"draft",href:"http://www.iana.org/go/draft-lafayette-icon-uri-scheme"}]},{scheme:"iotdisco",description:"iotdisco",reference:[{type:"uri",href:"http://www.iana.org/assignments/uri-schemes/prov/iotdisco.pdf"}],template:"http://www.iana.org/assignments/uri-schemes/prov/iotdisco"},{scheme:"ipn",description:"ipn",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6260"}]},{scheme:"irc",description:"irc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/irc"},{scheme:"irc6",description:"irc6",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/irc6"},{scheme:"ircs",description:"ircs",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ircs"},{scheme:"isostore",description:"isostore",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/isostore"},{scheme:"itms",description:"itms",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/itms"},{scheme:"jar",description:"jar",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/jar"},{scheme:"jms",description:"Java Message Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6167"}]},{scheme:"keyparc",description:"keyparc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/keyparc"},{scheme:"lastfm",description:"lastfm",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/lastfm"},{scheme:"ldaps",description:"ldaps",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ldaps"},{scheme:"magnet",description:"magnet",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/magnet"},{scheme:"maps",description:"maps",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/maps"},{scheme:"market",description:"market",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/market"},{scheme:"message",description:"message",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/message"},{scheme:"mms",description:"mms",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mms"},{scheme:"ms-access",description:"ms-access",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-access"},{scheme:"ms-drive-to",description:"ms-drive-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-drive-to"},{scheme:"ms-enrollment",description:"ms-enrollment",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-enrollment"},{scheme:"ms-excel",description:"ms-excel",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-excel"},{scheme:"ms-getoffice",description:"ms-getoffice",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-getoffice"},{scheme:"ms-help",description:"ms-help",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-help"},{scheme:"ms-infopath",description:"ms-infopath",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-infopath"},{scheme:"ms-media-stream-id",description:"ms-media-stream-id",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-media-stream-id"},{scheme:"ms-powerpoint",description:"ms-powerpoint",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-powerpoint"},{scheme:"ms-project",description:"ms-project",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-project"},{scheme:"ms-publisher",description:"ms-publisher",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-publisher"},{scheme:"ms-search-repair",description:"ms-search-repair",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-search-repair"},{scheme:"ms-secondary-screen-controller",description:"ms-secondary-screen-controller",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-secondary-screen-controller"},{scheme:"ms-secondary-screen-setup",description:"ms-secondary-screen-setup",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-secondary-screen-setup"},{scheme:"ms-settings",description:"ms-settings",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings"},{scheme:"ms-settings-airplanemode",description:"ms-settings-airplanemode",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-airplanemode"},{scheme:"ms-settings-bluetooth",description:"ms-settings-bluetooth",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-bluetooth"},{scheme:"ms-settings-camera",description:"ms-settings-camera",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-camera"},{scheme:"ms-settings-cellular",description:"ms-settings-cellular",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-cellular"},{scheme:"ms-settings-cloudstorage",description:"ms-settings-cloudstorage",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-cloudstorage"},{scheme:"ms-settings-connectabledevices",description:"ms-settings-connectabledevices",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-connectabledevices"},{scheme:"ms-settings-displays-topology",description:"ms-settings-displays-topology",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-displays-topology"},{scheme:"ms-settings-emailandaccounts",description:"ms-settings-emailandaccounts",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-emailandaccounts"},{scheme:"ms-settings-language",description:"ms-settings-language",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-language"},{scheme:"ms-settings-location",description:"ms-settings-location",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-location"},{scheme:"ms-settings-lock",description:"ms-settings-lock",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-lock"},{scheme:"ms-settings-nfctransactions",description:"ms-settings-nfctransactions",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-nfctransactions"},{scheme:"ms-settings-notifications",description:"ms-settings-notifications",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-notifications"},{scheme:"ms-settings-power",description:"ms-settings-power",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-power"},{scheme:"ms-settings-privacy",description:"ms-settings-privacy",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-privacy"},{scheme:"ms-settings-proximity",description:"ms-settings-proximity",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-proximity"},{scheme:"ms-settings-screenrotation",description:"ms-settings-screenrotation",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-screenrotation"},{scheme:"ms-settings-wifi",description:"ms-settings-wifi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-wifi"},{scheme:"ms-settings-workplace",description:"ms-settings-workplace",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-workplace"},{scheme:"ms-spd",description:"ms-spd",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-spd"},{scheme:"ms-transit-to",description:"ms-transit-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-transit-to"},{scheme:"ms-visio",description:"ms-visio",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-visio"},{scheme:"ms-walk-to",description:"ms-walk-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-walk-to"},{scheme:"ms-word",description:"ms-word",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-word"},{scheme:"msnim",description:"msnim",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/msnim"},{scheme:"mumble",description:"mumble",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mumble"},{scheme:"mvn",description:"mvn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mvn"},{scheme:"notes",description:"notes",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/notes"},{scheme:"oid",description:"oid",reference:[{type:"draft",href:"http://www.iana.org/go/draft-larmouth-oid-iri"}],template:"http://www.iana.org/assignments/uri-schemes/prov/oid"},{scheme:"palm",description:"palm",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/palm"},{scheme:"paparazzi",description:"paparazzi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/paparazzi"},{scheme:"platform",description:"platform",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/platform"},{scheme:"proxy",description:"proxy",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/proxy"},{scheme:"psyc",description:"psyc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/psyc"},{scheme:"query",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/query"},{scheme:"redis",description:"redis",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/redis"},{scheme:"rediss",description:"rediss",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rediss"},{scheme:"res",description:"res",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/res"},{scheme:"resource",description:"resource",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/resource"},{scheme:"rmi",description:"rmi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rmi"},{scheme:"rsync",description:"rsync",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5781"}]},{scheme:"rtmfp",description:"rtmfp",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7425"}],template:"http://www.iana.org/assignments/uri-schemes/prov/rtmfp"},{scheme:"rtmp",description:"rtmp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rtmp"},{scheme:"secondlife",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/secondlife"},{scheme:"sftp",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/sftp"},{scheme:"sgn",description:"sgn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/sgn"},{scheme:"skype",description:"skype",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/skype"},{scheme:"smb",description:"smb",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/smb"},{scheme:"smtp",description:"smtp",reference:[{type:"draft",href:"http://www.iana.org/go/draft-melnikov-smime-msa-to-mda"}],template:"http://www.iana.org/assignments/uri-schemes/prov/smtp"},{scheme:"soldat",description:"soldat",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/soldat"},{scheme:"spotify",description:"spotify",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/spotify"},{scheme:"ssh",description:"ssh",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ssh"},{scheme:"steam",description:"steam",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/steam"},{scheme:"submit",description:"submit",reference:[{type:"draft",href:"http://www.iana.org/go/draft-melnikov-smime-msa-to-mda"}],template:"http://www.iana.org/assignments/uri-schemes/prov/submit"},{scheme:"svn",description:"svn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/svn"},{scheme:"teamspeak",description:"teamspeak",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/teamspeak"},{scheme:"teliaeid",description:"teliaeid",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/teliaeid"},{scheme:"things",description:"things",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/things"},{scheme:"tool",description:"tool",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/tool"},{scheme:"udp",description:"udp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/udp"},{scheme:"unreal",description:"unreal",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/unreal"},{scheme:"ut2004",description:"ut2004",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ut2004"},{scheme:"v-event",description:"v-event",reference:[{type:"draft",href:"http://www.iana.org/go/draft-menderico-v-event-uri"}],template:"http://www.iana.org/assignments/uri-schemes/prov/v-event"},{scheme:"ventrilo",description:"ventrilo",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ventrilo"},{scheme:"view-source",description:"view-source",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/view-source"},{scheme:"webcal",description:"webcal",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/webcal"},{scheme:"wpid",description:"wpid",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wpid"},{scheme:"wtai",description:"wtai",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wtai"},{scheme:"wyciwyg",description:"wyciwyg",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wyciwyg"},{scheme:"xfire",description:"xfire",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/xfire"},{scheme:"xri",description:"xri",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/xri"},{scheme:"ymsgr",description:"ymsgr",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ymsgr"}]});var rv=b(function(UT,iR){iR.exports=[{scheme:"fax",description:"fax",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2806"},{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"filesystem",description:"filesystem",reference:[],template:"http://www.iana.org/assignments/uri-schemes/historic/filesystem"},{scheme:"mailserver",description:"Access to data available from mail servers",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6196"}]},{scheme:"modem",description:"modem",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2806"},{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"pack",description:"pack",reference:[{type:"draft",href:"http://www.iana.org/go/draft-shur-pack-uri-scheme"}],template:"http://www.iana.org/assignments/uri-schemes/historic/pack"},{scheme:"prospero",description:"Prospero Directory Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4157"}]},{scheme:"snews",description:"NNTP over SSL/TLS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"videotex",description:"videotex",reference:[{type:"draft",href:"http://www.iana.org/go/draft-mavrakis-videotex-url-spec"},{type:"rfc",href:"http://www.iana.org/go/rfc2122"},{type:"rfc",href:"http://www.iana.org/go/rfc3986"}],template:"http://www.iana.org/assignments/uri-schemes/historic/videotex"},{scheme:"wais",description:"Wide Area Information Servers",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4156"}]},{scheme:"z39.50",description:"Z39.50 information access",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"},{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]}]});var sv=b(function(zT,oR){oR.exports=[{scheme:"android-app"},{scheme:"webpack"},{scheme:"s3",description:"Amazon Web Services S3 bucket"},{scheme:"gs",description:"Google Cloud Storage"},{scheme:"mqtt",description:"Message Queuing Telemetry Transport Protocol"},{scheme:"modbus+tcp",description:"Modbus over TCP"}]});var Il=b(function(FT,nv){var Rl=Yg(),Si={permanent:ev(),provosional:tv(),historical:rv()},pa={};Object.keys(Si).forEach(function(e){Si[e].forEach(function(t){pa[t.scheme]=Rl(t,{type:e})})});Si.unofficial=sv().filter(function(e){return!pa[e.scheme]});Si.unofficial.forEach(function(e){pa[e.scheme]=Rl(e,{type:"unofficial"})});nv.exports=Rl(Si,{allByName:pa})});var av=b(function(LT,ov){var{parse:aR}=Ho(),{addressParser:cR}=da(),iv=Il();function uR(e){try{return cR(e),!0}catch(t){return!1}}ov.exports=(e)=>{let t=aR(e);if(t.scheme==="mailto"&&t.to.every(uR))return!0;if(t.reference==="absolute"&&iv.allByName[t.scheme])return!0;return!1}});var uv=b(function(HT,cv){cv.exports=/^P(?!$)(\d+(?:\.\d+)?Y)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?W)?(\d+(?:\.\d+)?D)?(T(?=\d)(\d+(?:\.\d+)?H)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?S)?)?$/});var dv=b(function(KT,lv){var{parse:lR}=da();lv.exports=(e)=>{try{return lR(e),!0}catch(t){return!1}}});var _R={};function Ol(e){return this[e]}function vR(e,t){this[e]=gR.bind(null,t)}var dR,fR,Pi,fv,ma,pR=(e,t,r)=>{var s=t&&typeof t==="object"||typeof t==="function"?fv(t):[];for(let n of s)if(!ma.call(e,n)&&n!=="default")Pi(e,n,{get:Ol.bind(t,n),enumerable:!0});if(r){for(let n of s)if(!ma.call(r,n)&&n!=="default")Pi(r,n,{get:Ol.bind(t,n),enumerable:!0});return r}},mR,hR,pv=(e,t,r)=>{var s=e!=null&&typeof e==="object";if(s){var n=t?mR??=new WeakMap:hR??=new WeakMap,i=n.get(e);if(i)return i}r=e!=null?dR(fR(e)):{};let o=t||!e||!e.__esModule||!ma.call(e,"default")?Pi(r,"default",{value:e,enumerable:!0}):r;if(e&&typeof e==="object"||typeof e==="function"){for(let a of fv(e))if(!ma.call(o,a))Pi(o,a,{get:Ol.bind(e,a),enumerable:!0})}if(s)n.set(e,o);return o},yR=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),gR=(e)=>e,$R=(e,t)=>{for(var r in t)Pi(e,r,{get:t[r],enumerable:!0,configurable:!0,set:vR.bind(t,r)})},mv,hv,yv,GT;var gv=E$(()=>{dR=Object.create,{getPrototypeOf:fR,defineProperty:Pi,getOwnPropertyNames:fv}=Object,ma=Object.prototype.hasOwnProperty;mv=yR(function(e,t){var r=/^xn--/,s=/[^\0-\x7F]/,n=/[\x2E\u3002\uFF0E\uFF61]/g,i={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},o=Math.floor,a=String.fromCharCode;function c(S){throw RangeError(i[S])}function u(S,M){let Y=[],Q=S.length;while(Q--)Y[Q]=M(S[Q]);return Y}function l(S,M){let Y=S.split("@"),Q="";if(Y.length>1)Q=Y[0]+"@",S=Y[1];S=S.replace(n,".");let me=S.split("."),re=u(me,M).join(".");return Q+re}function d(S){let M=[],Y=0,Q=S.length;while(Y<Q){let me=S.charCodeAt(Y++);if(me>=55296&&me<=56319&&Y<Q){let re=S.charCodeAt(Y++);if((re&64512)==56320)M.push(((me&1023)<<10)+(re&1023)+65536);else M.push(me),Y--}else M.push(me)}return M}var v=(S)=>String.fromCodePoint(...S),m=function(S){if(S>=48&&S<58)return 26+(S-48);if(S>=65&&S<91)return S-65;if(S>=97&&S<123)return S-97;return 36},h=function(S,M){return S+22+75*(S<26)-((M!=0)<<5)},p=function(S,M,Y){let Q=0;S=Y?o(S/700):S>>1,S+=o(S/M);for(;S>455;Q+=36)S=o(S/35);return o(Q+36*S/(S+38))},_=function(S){let M=[],Y=S.length,Q=0,me=128,re=72,Le=S.lastIndexOf("-");if(Le<0)Le=0;for(let Ee=0;Ee<Le;++Ee){if(S.charCodeAt(Ee)>=128)c("not-basic");M.push(S.charCodeAt(Ee))}for(let Ee=Le>0?Le+1:0;Ee<Y;){let We=Q;for(let lt=1,Nt=36;;Nt+=36){if(Ee>=Y)c("invalid-input");let qt=m(S.charCodeAt(Ee++));if(qt>=36)c("invalid-input");if(qt>o((2147483647-Q)/lt))c("overflow");Q+=qt*lt;let Vt=Nt<=re?1:Nt>=re+26?26:Nt-re;if(qt<Vt)break;let Or=36-Vt;if(lt>o(2147483647/Or))c("overflow");lt*=Or}let it=M.length+1;if(re=p(Q-We,it,We==0),o(Q/it)>2147483647-me)c("overflow");me+=o(Q/it),Q%=it,M.splice(Q++,0,me)}return String.fromCodePoint(...M)},w=function(S){let M=[];S=d(S);let Y=S.length,Q=128,me=0,re=72;for(let We of S)if(We<128)M.push(a(We));let Le=M.length,Ee=Le;if(Le)M.push("-");while(Ee<Y){let We=2147483647;for(let lt of S)if(lt>=Q&&lt<We)We=lt;let it=Ee+1;if(We-Q>o((2147483647-me)/it))c("overflow");me+=(We-Q)*it,Q=We;for(let lt of S){if(lt<Q&&++me>2147483647)c("overflow");if(lt===Q){let Nt=me;for(let qt=36;;qt+=36){let Vt=qt<=re?1:qt>=re+26?26:qt-re;if(Nt<Vt)break;let Or=Nt-Vt,Vn=36-Vt;M.push(a(h(Vt+Or%Vn,0))),Nt=o(Or/Vn)}M.push(a(h(Nt,0))),re=p(me,it,Ee===Le),me=0,++Ee}}++me,++Q}return M.join("")},I=function(S){return l(S,function(M){return r.test(M)?_(M.slice(4).toLowerCase()):M})},O=function(S){return l(S,function(M){return s.test(M)?"xn--"+w(M):M})},D={version:"2.3.1",ucs2:{decode:d,encode:v},decode:_,encode:w,toASCII:O,toUnicode:I};t.exports=D}),hv={};$R(hv,{default:()=>yv.default});pR(hv,pv(mv()));yv=pv(mv()),GT=yv.default});var $v=b(function(JT,vv){var{toASCII:wR}=(gv(),ud(_R)),bR=/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i;vv.exports=(e)=>{let t=wR(e);return t.replace(/\.$/,"").length<=253&&bR.test(t)}});var wv=b(function(WT,_v){var{parse:SR}=Ho(),{addressParser:PR}=da(),ha=Il();function ER(e){try{return PR(e),!0}catch(t){return!1}}_v.exports=(e)=>{let t=SR(e);if(t.scheme==="mailto"&&t.to.every(ER))return!0;if(t.reference==="absolute"&&t.path!==void 0&&ha.allByName[t.scheme])return!0;if(t.scheme&&!ha.allByName[t.scheme])return!1;return t.path!==void 0&&(t.reference==="relative"||t.reference==="same-document"||t.reference==="uri")}});var bv=b(function(QT,Mn){QT.iri=av();QT.duration=uv();QT["idn-email"]=dv();QT["idn-hostname"]=$v();QT["iri-reference"]=wv()});var Ev=b(function(BT,Pv){var Sv=bv();Pv.exports=(e,t={})=>{let r=Object.keys(Sv),s=r;if(t.formats){if(!Array.isArray(t.formats))throw Error("options.formats must be an array");s=t.formats}return r.filter((n)=>s.includes(n)).forEach((n)=>{e.addFormat(n,Sv[n])}),e}});var Cv=b(function(IA,Dl){var DR=Object.prototype.hasOwnProperty,ut="~";function Ii(){}if(Object.create){if(Ii.prototype=Object.create(null),!new Ii().__proto__)ut=!1}function MR(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function jv(e,t,r,s,n){if(typeof r!=="function")throw TypeError("The listener must be a function");var i=new MR(r,s||e,n),o=ut?ut+t:t;if(!e._events[o])e._events[o]=i,e._eventsCount++;else if(!e._events[o].fn)e._events[o].push(i);else e._events[o]=[e._events[o],i];return e}function va(e,t){if(--e._eventsCount===0)e._events=new Ii;else delete e._events[t]}function nt(){this._events=new Ii,this._eventsCount=0}nt.prototype.eventNames=function(){var t=[],r,s;if(this._eventsCount===0)return t;for(s in r=this._events)if(DR.call(r,s))t.push(ut?s.slice(1):s);if(Object.getOwnPropertySymbols)return t.concat(Object.getOwnPropertySymbols(r));return t};nt.prototype.listeners=function(t){var r=ut?ut+t:t,s=this._events[r];if(!s)return[];if(s.fn)return[s.fn];for(var n=0,i=s.length,o=Array(i);n<i;n++)o[n]=s[n].fn;return o};nt.prototype.listenerCount=function(t){var r=ut?ut+t:t,s=this._events[r];if(!s)return 0;if(s.fn)return 1;return s.length};nt.prototype.emit=function(t,r,s,n,i,o){var a=ut?ut+t:t;if(!this._events[a])return!1;var c=this._events[a],u=arguments.length,l,d;if(c.fn){if(c.once)this.removeListener(t,c.fn,void 0,!0);switch(u){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,r),!0;case 3:return c.fn.call(c.context,r,s),!0;case 4:return c.fn.call(c.context,r,s,n),!0;case 5:return c.fn.call(c.context,r,s,n,i),!0;case 6:return c.fn.call(c.context,r,s,n,i,o),!0}for(d=1,l=Array(u-1);d<u;d++)l[d-1]=arguments[d];c.fn.apply(c.context,l)}else{var v=c.length,m;for(d=0;d<v;d++){if(c[d].once)this.removeListener(t,c[d].fn,void 0,!0);switch(u){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,r);break;case 3:c[d].fn.call(c[d].context,r,s);break;case 4:c[d].fn.call(c[d].context,r,s,n);break;default:if(!l)for(m=1,l=Array(u-1);m<u;m++)l[m-1]=arguments[m];c[d].fn.apply(c[d].context,l)}}}return!0};nt.prototype.on=function(t,r,s){return jv(this,t,r,s,!1)};nt.prototype.once=function(t,r,s){return jv(this,t,r,s,!0)};nt.prototype.removeListener=function(t,r,s,n){var i=ut?ut+t:t;if(!this._events[i])return this;if(!r)return va(this,i),this;var o=this._events[i];if(o.fn){if(o.fn===r&&(!n||o.once)&&(!s||o.context===s))va(this,i)}else{for(var a=0,c=[],u=o.length;a<u;a++)if(o[a].fn!==r||n&&!o[a].once||s&&o[a].context!==s)c.push(o[a]);if(c.length)this._events[i]=c.length===1?c[0]:c;else va(this,i)}return this};nt.prototype.removeAllListeners=function(t){var r;if(t){if(r=ut?ut+t:t,this._events[r])va(this,r)}else this._events=new Ii,this._eventsCount=0;return this};nt.prototype.off=nt.prototype.removeListener;nt.prototype.addListener=nt.prototype.on;nt.prefixed=ut;nt.EventEmitter=nt;if(typeof Dl<"u")Dl.exports=nt});var UR={};P$(UR,{DiscoveryError:()=>wt,default:()=>Oi,discoverSockethub:()=>$a,resolveEndpoint:()=>_a});var Ta="https://www.w3.org/ns/activitystreams",Aa="https://sockethub.org/ns/context/v1.jsonld";var xa="error",ja="https://sockethub.org/ns/context/platform/error/v1.jsonld",Ca="sockethub:internal",Na="https://sockethub.org/ns/context/platform/sockethub:internal/v1.jsonld",qa=new Map,ld=new Map,dd=new Map;function k$(e){if(!Array.isArray(e))return[];return e.filter((t)=>typeof t==="string")}function R$(e){return k$(e["@context"])}function Da(e,t,r,s){qa.set(t,e),ld.set(t,r),dd.set(t,s)}function Qn(e){let r=R$(e).filter((s)=>qa.has(s));if(r.length!==1)return null;return r[0]}function Ma(e){return qa.get(e)}function fd(e){return ld.get(e)}function pd(e){return dd.get(e)}var ji={feed:{required:["id","type"],additionalProperties:!0,properties:{type:{enum:["feed"]},id:{type:"string",format:"iri"},name:{type:"string"},description:{type:"string"},author:{type:"string"},favicon:{type:"string"}}},person:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["person"]},name:{type:"string"}}},room:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["room"]},name:{type:"string"}}},service:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["service"]},name:{type:"string"}}},platform:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["platform"]},name:{type:"string"}}},website:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string",format:"iri"},type:{enum:["website"]},name:{type:"string"}}},address:{required:["type"],additionalProperties:!1,properties:{type:{enum:["address"]}}},calendar:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string",format:"iri"},type:{enum:["calendar"]},name:{type:"string"},components:{type:"array",items:{enum:["event","task"]}}}},addressBook:{required:["id","type"],additionalProperties:!1,properties:{id:{type:"string",format:"iri"},type:{enum:["addressBook"]}}}};var Va=Object.keys(ji),Ci=["person","room","service","feed","website","platform"],Ni=["person","room","service","feed","website","platform","address","calendar","addressBook"],md=Ci.map((e)=>({$ref:`#/definitions/type/${e}`})),hd=Ni.map((e)=>({$ref:`#/definitions/type/${e}`}));var I$={type:"array",minItems:3,maxItems:3,items:{type:"string"},allOf:[{contains:{const:Ta}},{contains:{const:Aa}}]},O$={type:"string"},Ua={$id:"https://sockethub.org/schemas/v/activity-stream.json",description:"Schema for Sockethub Activity Streams",type:"object",required:["@context","type","actor"],additionalProperties:!1,properties:{"@context":I$,id:{type:"string"},type:O$,actor:{type:"object",oneOf:md},target:{type:"object",oneOf:hd},object:{type:"object"},published:{type:"string",format:"date-time"}},definitions:{type:ji}};var yd={name:"@sockethub/schemas",description:"JSON schema files for validating Sockethub Activity Streams",version:"3.0.0-beta.1",type:"module",private:!1,author:"Nick Jennings <nick@silverbucket.net>",license:"MIT",publishConfig:{access:"public"},main:"dist/index.js",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js",default:"./dist/index.js"},"./context":{types:"./dist/context.d.ts",import:"./dist/context.js",default:"./dist/context.js"},"./object-types":{types:"./dist/object-types.d.ts",import:"./dist/object-types.js",default:"./dist/object-types.js"},"./service-descriptor":{types:"./dist/service-descriptor.d.ts",bun:"./src/service-descriptor.ts",import:"./dist/service-descriptor.js",default:"./dist/service-descriptor.js"},"./schemas/json/sockethub-config.json":{default:"./dist/schemas/json/sockethub-config.json"},"./schemas/json/service-descriptor.json":{default:"./dist/schemas/json/service-descriptor.json"}},files:["dist/"],engines:{node:">=20"},keywords:["sockethub","sockethub schema","activity streams","activity objects","sockethub platforms"],repository:{type:"git",url:"git+https://github.com/sockethub/sockethub.git",directory:"packages/schemas"},homepage:"https://github.com/sockethub/sockethub/tree/master/packages/schemas",devDependencies:{"@types/bun":"latest"},scripts:{build:"bun ./scripts/export-json-schema.ts && bun ./scripts/export-canonical-assets.ts && bun build src/index.ts src/object-types.ts --outdir dist --target node --format esm --sourcemap=external && bun build src/context.ts src/activity-stream-helper.ts src/service-descriptor.ts --outdir dist --target browser --format esm --sourcemap=external",clean:"rm -rf dist","clean:deps":"rm -rf node_modules"},dependencies:{ajv:"^8.17.1","ajv-formats":"^2.1.1","ajv-formats-draft2019":"^1.6.1"},gitHead:"06c9062f1cb5f0c0599fd979e6e91da79f08eda0",types:"./dist/index.d.ts"};function gd(e,t){return e.replace("/v/",`/${t}/`)}var za={$id:"https://sockethub.org/schemas/v/sockethub-config.json",description:"Sockethub Config Schema",type:"object",required:["platforms"],additionalProperties:!1,properties:{$schema:{type:"string"},examples:{type:"boolean",default:!0,description:"Enable the examples pages served at [host]:[port]/examples"},about:{type:"object",additionalProperties:!1,description:"Details about this deployment shown on the root info page",properties:{name:{type:"string",default:"",description:"Display name of this Sockethub instance"},description:{type:"string",default:"",description:"Short description of who this instance is for"},contact:{type:"string",default:"",description:"Operator contact (email address or URL)"},links:{type:"array",default:[],description:"Extra links (privacy policy, terms, website) shown on the info page",items:{type:"object",additionalProperties:!1,required:["label","url"],properties:{label:{type:"string",minLength:1},url:{type:"string",pattern:"^https?://"}}}},showVersion:{type:"boolean",default:!1,description:"Show the exact server version on the info page (off by default to limit fingerprinting)"},showUptime:{type:"boolean",default:!1,description:"Show the process uptime on the info page (off by default: it reveals when the server last restarted)"}}},logging:{type:"object",additionalProperties:!1,properties:{level:{type:"string",enum:["error","warn","info","debug"],default:"info"},fileLevel:{type:"string",enum:["error","warn","info","debug"],default:"debug"},file:{type:"string",default:"sockethub.log"}}},platforms:{type:"array",items:{type:"string"},description:"Platform packages to load",default:["@sockethub/platform-carddav","@sockethub/platform-caldav","@sockethub/platform-dummy","@sockethub/platform-feeds","@sockethub/platform-irc","@sockethub/platform-metadata","@sockethub/platform-xmpp"]},packageConfig:{type:"object",default:{},description:"Per-platform config keyed by package name, validated against each platform's config schema and forwarded to its child process",properties:{"@sockethub/platform-carddav":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"integer",minimum:1},allowPrivateAddresses:{type:"boolean"},allowInsecureHttp:{type:"boolean"},concurrency:{type:"integer",minimum:1}}},"@sockethub/platform-caldav":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"integer",minimum:1},allowPrivateAddresses:{type:"boolean"},allowInsecureHttp:{type:"boolean"},concurrency:{type:"integer",minimum:1}}},"@sockethub/platform-dummy":{type:"object",additionalProperties:!1,properties:{greeting:{type:"string",default:"Hello"}}},"@sockethub/platform-feeds":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"number"},allowPrivateAddresses:{type:"boolean"},concurrency:{type:"integer",minimum:1}}},"@sockethub/platform-irc":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"number"}}},"@sockethub/platform-xmpp":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"number"},allowPrivateAddresses:{type:"boolean"}}},"@sockethub/platform-metadata":{type:"object",additionalProperties:!1,properties:{allowPrivateAddresses:{type:"boolean"},concurrency:{type:"integer",minimum:1}}}}},credentials:{type:"object",additionalProperties:!1,properties:{ttlMs:{type:"number",minimum:0,default:604800000,description:"Sliding TTL in milliseconds for per-session encrypted credential keys in Redis, refreshed on every save and read. A backstop against keys orphaned by crashes; sessions normally delete their key on disconnect. "+"Size generously — idle sessions do not refresh it. "+"0 disables expiry."}}},credentialCheck:{type:"object",additionalProperties:!1,properties:{reconnectIpSource:{type:"string",enum:["socket","proxy"],default:"socket"},proxyHeader:{type:"string",default:"x-forwarded-for"}}},public:{type:"object",additionalProperties:!1,properties:{protocol:{type:"string",default:"http"},host:{type:"string",default:"localhost"},port:{type:"number",default:10550},path:{type:"string",default:"/"}}},rateLimiter:{type:"object",additionalProperties:!1,properties:{windowMs:{type:"number",default:1000},maxRequests:{type:"number",default:100},blockDurationMs:{type:"number",default:5000},maxConnectionsPerIp:{type:"number",minimum:0,default:20,description:"Maximum concurrent socket connections per client IP. The per-event rate limiter is keyed by socket id, so without a connection cap a client can bypass it by opening more sockets. 0 disables the cap."}}},limits:{type:"object",additionalProperties:!1,properties:{maxInstancesPerSession:{type:"integer",minimum:0,default:10,description:"Maximum persistent instances per socket session. 0 disables the cap."},maxInstancesPerIp:{type:"integer",minimum:0,default:20,description:"Maximum persistent instances per client IP, including HTTP actions. 0 disables the cap."},maxPlatformInstances:{type:"number",minimum:0,default:100,description:"Upper bound on concurrently running persistent platform instances (child processes). Each persistent-platform actor forks its own process, so an unbounded count is a resource exhaustion risk on public instances. 0 disables the cap."}}},redis:{type:"object",additionalProperties:!1,properties:{url:{type:"string",default:"redis://127.0.0.1:6379"},connectTimeout:{type:"number",default:1e4,description:"Connection timeout in milliseconds"},disconnectTimeout:{type:"number",default:5000,description:"Disconnect timeout in milliseconds"},maxRetriesPerRequest:{type:["number","null"],default:null,description:"Maximum number of retries per request (null for BullMQ default)"}}},sentry:{type:"object",additionalProperties:!1,properties:{dsn:{type:"string",default:""},environment:{type:"string",default:"production"},release:{type:"string",default:""},enableLogs:{type:"boolean",default:!1},logLevels:{type:"array",items:{type:"string",enum:["debug","info","warn","error"]},default:["warn","error"]},enableMetrics:{type:"boolean",default:!0},tracesSampleRate:{type:"number",minimum:0,maximum:1,default:0.1},profileSessionSampleRate:{type:"number",minimum:0,maximum:1,default:0},sendDefaultPii:{type:"boolean",default:!1}}},sockethub:{type:"object",additionalProperties:!1,properties:{port:{type:"number",default:10550},host:{type:"string",default:"localhost"},path:{type:"string",default:"/sockethub"},maxPayloadBytes:{type:"integer",minimum:1,default:262144,description:"Maximum size in bytes of a single Socket.IO message."},trustProxy:{type:["boolean","number","string"],default:!1,description:"Express 'trust proxy' setting, deciding whether 'x-forwarded-for' is believed when determining a client's IP for HTTP rate limiting. false trusts no proxy; a number trusts that many hops; a string takes an address, subnet or preset ('loopback'). Only enable behind a reverse proxy that overwrites the header. When left false while credentialCheck.reconnectIpSource is 'proxy' and credentialCheck.proxyHeader is 'x-forwarded-for', one hop is trusted so both paths agree; a custom proxyHeader requires setting this explicitly."},cors:{type:"object",additionalProperties:!1,properties:{origin:{type:"string",default:"*",description:"Allowed CORS origin(s) for socket.io connections and the HTTP actions endpoint. '*' allows any website to connect visitors' browsers to this instance; public deployments should set an explicit origin or comma-separated list of origins."}}}}},httpActions:{type:"object",additionalProperties:!1,properties:{enabled:{type:"boolean",default:!1,description:"Enable the HTTP actions endpoint"},path:{type:"string",default:"/sockethub-http"},requireRequestId:{type:"boolean",default:!0},maxMessagesPerRequest:{type:"number",minimum:1,default:20},maxPayloadBytes:{type:"number",minimum:1,default:262144},idempotencyTtlMs:{type:"number",minimum:0,default:300000},requestTimeoutMs:{type:"number",minimum:0,default:30000},idleTimeoutMs:{type:"number",minimum:0,default:15000}}},platformHeartbeat:{type:"object",additionalProperties:!1,properties:{intervalMs:{type:"number",default:5000},timeoutMs:{type:"number",default:15000}}}}},A$=gd(za.$id,yd.version);var Am=Wn(iu(),1);var Po,Em=!1;function Rs(){if(Po===void 0)try{Function("return true"),Po=!0}catch{Po=!1}return Po}function fn(){if(Em)return;Em=!0,console.warn("[@sockethub/schemas] Schema validation is disabled: this environment's Content Security Policy blocks `new Function`, which Ajv needs to compile schemas. The Sockethub server still validates every message.")}var km={type:"integer",minimum:0},wS={type:"string",minLength:1},Rm={type:"string",pattern:"^/(?![/\\\\])[^\\s\\\\]*$"},ou={$id:"https://sockethub.org/schemas/v/service-descriptor.json",description:"Sockethub service descriptor",type:"object",required:["name","apiVersion","platforms"],additionalProperties:!0,properties:{name:{const:"sockethub"},apiVersion:km,endpoints:{type:"object",required:["socketIO"],additionalProperties:!0,properties:{socketIO:Rm,httpActions:Rm}},platforms:{type:"array",items:{type:"object",required:["id","apiVersion"],additionalProperties:!0,properties:{id:wS,apiVersion:km}}}}};var au,Im;function cu(e){if(!Rs())return fn(),bS(e);if(!au)au=new Am.default({strictTypes:!1,allErrors:!0});return Im??=au.compile(ou),Im(e)}function bS(e){if(!e||typeof e!=="object")return!1;let t=e;if(t.name!=="sockethub")return!1;if(!Om(t.apiVersion))return!1;if(!Array.isArray(t.platforms))return!1;for(let r of t.platforms){if(!r||typeof r!=="object")return!1;let s=r;if(typeof s.id!=="string"||s.id.length===0)return!1;if(!Om(s.apiVersion))return!1}if(t.endpoints!==void 0){if(!t.endpoints||typeof t.endpoints!=="object")return!1;let r=t.endpoints;if(!Tm(r.socketIO))return!1;if(r.httpActions!==void 0&&!Tm(r.httpActions))return!1}return!0}function Om(e){return typeof e==="number"&&Number.isInteger(e)&&e>=0}function Tm(e){return typeof e==="string"&&/^\/(?![/\\])[^\s\\]*$/.test(e)}var Iv=Wn(iu(),1),Ov=Wn(Dg(),1),Tv=Wn(Ev(),1);function kR(e){let t=`${e.instancePath?e.instancePath:"activity stream"}: ${e.message}`;if(e.keyword==="additionalProperties")t+=`: ${e.params.additionalProperty}`;else if(e.keyword==="enum")t+=`: ${e.params.allowedValues.join(", ")}`;return t}var RR=64;function Ei(e,t=0){let r=[];if(t>RR)return r;if(e?.type)r.push(e.type);let s=e;for(let n in s){let i=s[n];if(i&&typeof i==="object"&&"type"in i)r.push(...Ei(i,t+1))}return r}function IR(e){let t=e.schemaPath.match(/#\/\w+\/\w+\/([\w-]+)\//);return t?t[1]:void 0}function OR(e){let t=e.instancePath.match(/\/(\w+)/);return t?t[1]:void 0}function TR(e,t){let r=IR(e),s=OR(e);if(!s)return-1;let n=t[s];if(!n)return-1;if(!r||!n.includes(r))return-1;return e.instancePath.split("/").length}function AR(e){if(!Array.isArray(e["@context"]))return{actor:[],target:[],object:Ei(e)};let t=e;return{actor:Ei(t.actor),target:Ei(t.target),object:t.object?Ei(t.object):[]}}function Tl(e,t,r){let s=AR(e),n=0,i=-1;for(let o=0;o<t.length;o++){let a=TR(t[o],s);if(a>i)i=a,n=o}return i>=0?kR(t[n]):jR(t[t.length-1],r)}function xR(e,t){if(!t?.excludeTypes||t.excludeTypes.length===0)return e;let r=new Set(t.excludeTypes);return e.filter((s)=>!r.has(s))}function jR(e,t){let r;if(e.keyword==="oneOf"){let s=e.instancePath.split("/")[1],n=s==="actor"?Ci:s==="target"?Ni:Va,i=xR(n,t),o=i.length>0?i:n;r=`${e.instancePath}: ${e.message}: ${o.join(", ")}`}else r=`${e.instancePath?e.instancePath:"activity stream"}: ${e.message}`;if("additionalProperty"in e.params)r+=`: ${e.params.additionalProperty}`;return r}var vr="https://sockethub.org/schemas/v0",xl={},NR={},kv=!1;xl[`${vr}/activity-stream`]=Ua;var Al;function jl(){if(!Rs()){fn();return}if(!Al){let e=new Iv.default({strictTypes:!1,allErrors:!0});Ov.default(e),Tv.default(e);for(let t in xl)e.addSchema(xl[t],t);Al=e}return Al}function Rv(e,t){Da(e,t,`${vr}/context/${e}/messages`,`${vr}/context/${e}/credentials`);let r=jl();if(!r)return;let s=`${vr}/context/${e}/messages`;if(!r.getSchema(s))r.addSchema({},s);let n=`${vr}/context/${e}/credentials`;if(!r.getSchema(n))r.addSchema({},n)}function Av(){if(kv)return;Rv(xa,ja),Rv(Ca,Na),kv=!0}Av();function ya(e,t){let r=jl();if(!r)return"";let s=r.getSchema(e);if(!s)return`schema ${e} not found`;if(!s(t)){let i=Tl(t,s.errors,NR);if(Array.isArray(t["@context"])){let o=Qn(t);if(o){let a=Ma(o);if(a)i=`[${a}] ${i}`}}return i}return""}function Cl(e){if(!Rs())return fn(),"";let t=ya(`${vr}/activity-stream`,e);if(t)return t;let r=Qn(e);if(!r)return"activity streams must have exactly one registered platform context URL in @context";let s=fd(r);if(!s)return`platform context URL ${r} does not have a registered message schema`;return ya(s,e)}function Nl(e){if(!Rs())return fn(),"";if(!Array.isArray(e["@context"]))return"credential activity streams must have an @context set";if(e.type!=="credentials")return"credential activity streams must have credentials set as type";let t=ya(`${vr}/activity-stream`,e);if(t)return t;let r=Qn(e);if(!r)return"credential activity streams must have exactly one registered platform context URL in @context";let s=pd(r);if(!s)return`platform context URL ${r} does not have a registered credentials schema`;return ya(s,e)}function ga(e,t){let r=jl();if(!r)return;let s=`${vr}/context/${t}`;if(!r.getSchema(s))r.addSchema(e,s)}function ql(e,t){Da(e,t,`${vr}/context/${e}/messages`,`${vr}/context/${e}/credentials`)}function ki(e){let t=Qn(e);if(!t)return null;return Ma(t)??null}var xv={actor:"id",target:"id",object:"content"};function qR(e,t){if(typeof e==="string")return{[t]:e};if(Array.isArray(e))return e.map((r)=>{if(typeof r==="string")return{id:r};return r});return e}function Ri(e){let t={...e};for(let r of Object.keys(xv))if(r in t)t[r]=qR(t[r],xv[r]);return t}var Nv=Wn(Cv(),1);var qv=Nv.default;var VR=/^v?(\d+)(?:\.\d+){0,2}(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function Ml(e){return!!e&&typeof e==="object"&&!Array.isArray(e)}function Dv(e){return typeof e==="number"&&Number.isSafeInteger(e)&&e>=0}function Mv(e){if(!e||typeof e!=="object")return;let{apiVersion:t,version:r}=e;if(Dv(t))return t;if(typeof r==="string"){let s=VR.exec(r.trim()),n=s?Number(s[1]):void 0;if(Dv(n))return n}return}function Vv(e){if(!e||typeof e!=="object")return;let t=e,r=t.contexts?.as,s=t.contexts?.sockethub;if(typeof r!=="string"||typeof s!=="string"||!Array.isArray(t.platforms))return;let n=Mv(t);if(n===void 0)return;let i=new Map;for(let o of t.platforms){if(!o||typeof o!=="object"||typeof o.id!=="string"||typeof o.contextUrl!=="string"||typeof o.contextVersion!=="string"||typeof o.schemaVersion!=="string")continue;let a=Mv(o);if(a===void 0)continue;let c=Ml(o.schemas)?o.schemas:{};i.set(o.id,{id:o.id,apiVersion:a,contextUrl:o.contextUrl,contextVersion:o.contextVersion,schemaVersion:o.schemaVersion,types:Array.isArray(o.types)?o.types.filter((u)=>typeof u==="string"):[],schemas:{credentials:Ml(c.credentials)?c.credentials:void 0,messages:Ml(c.messages)?c.messages:void 0}})}return{apiVersion:n,asContextUrl:r,sockethubContextUrl:s,platforms:i}}function Uv(e){ql(e.id,e.contextUrl);try{if(e.schemas.credentials)ga(e.schemas.credentials,`${e.id}/credentials`);if(e.schemas.messages)ga(e.schemas.messages,`${e.id}/messages`)}catch(t){let r=t instanceof Error?t.message:String(t);console.warn(`[SockethubClient] Failed to register schemas for platform ${e.id}: ${r}`)}}class wt extends Error{constructor(e,t){super(e,t);this.name="DiscoveryError"}}async function $a(e,t={}){let r;try{r=new URL(e)}catch(u){throw new wt(`Sockethub discovery needs an absolute base URL, got ${JSON.stringify(e)}`,{cause:u})}if(r.protocol!=="http:"&&r.protocol!=="https:")throw new wt(`Sockethub discovery needs an http(s) base URL, got ${JSON.stringify(e)}`);let s=t.fetch??globalThis.fetch;if(typeof s!=="function")throw new wt("Sockethub discovery needs fetch(); pass one in the options");let n=new AbortController,i=t.discoveryTimeoutMs??1e4,o=setTimeout(()=>n.abort(),i),a=()=>n.signal.aborted,c;try{let u;try{u=await s(r.href,{headers:{accept:"application/json"},signal:n.signal})}catch(l){let d=a()?`timed out after ${i}ms`:l instanceof Error?l.message:String(l);throw new wt(`Sockethub discovery failed: could not reach ${r.href} (${d})`,{cause:l})}if(!u.ok)throw new wt(`Sockethub discovery failed: ${r.href} answered ${u.status}`);try{c=await u.json()}catch(l){throw new wt(a()?`Sockethub discovery failed: ${r.href} timed out after ${i}ms while sending the descriptor`:`Sockethub discovery failed: ${r.href} did not return JSON; is it a Sockethub server?`,{cause:l})}}finally{clearTimeout(o)}if(!cu(c))throw new wt(`Sockethub discovery failed: ${r.href} did not return a valid service descriptor`);return c}function _a(e,t){let r=new URL(t,e);if(r.origin!==new URL(e).origin)throw new wt(`Sockethub discovery failed: endpoint path ${JSON.stringify(t)} resolves to ${r.origin}, not ${e}`);return r.href}async function zv(e){if(e)return e;let t=globalThis.io;if(typeof t==="function")return t;try{let r=await import("socket.io-client");if(typeof r.io==="function")return r.io}catch{}throw Error("SockethubClient.connect() needs socket.io-client: install it, load /socket.io.js, or pass `io` in the options")}function wa(e){return typeof e==="object"&&e!==null&&"error"in e&&Boolean(e.error)}function ba(e){return"actor"in e&&e.actor!==null&&typeof e.actor==="object"&&"id"in e.actor&&typeof e.actor.id==="string"}function Ul(e){return e?.type==="update"&&e.object?.type==="address"&&ba(e)&&typeof e.target==="object"&&typeof e.target?.id==="string"&&e.target.id!==e.actor.id}function Vl(e){let t=e.actor?.id||e.actor;if(!t)throw Error(`actor property not present for message type: ${e?.type}`);let r=e.target?e.target.id||e.target:"";return`${ki(e)??""}:${t}-${r}`}class zl{events={credentials:new Map,connect:new Map,join:new Map};recordCredentials(e){if(e.object&&e.object.type==="credentials")this.events.credentials.set(Vl(e),e)}recordMessage(e){let t=Vl(e);if(e.type==="join"||e.type==="connect")this.events[e.type].set(t,e);else if(e.type==="leave")this.events.join.delete(t);else if(e.type==="disconnect")this.events.connect.delete(t)}moveActor(e){let t=e.actor.id,r=e.target,s=r.id,n=typeof r.name==="string"?r.name:void 0,i=ki(e)??"",o=[];for(let a of Object.values(this.events))for(let[c,u]of[...a]){if(!ba(u)||u.actor.id!==t||(ki(u)??"")!==i)continue;let l={...u,actor:{...u.actor,id:s,...n?{name:n}:{}}};a.delete(c),a.set(Vl(l),l),o.push([t,s])}return o}}class Oi{replayStore=new zl;_socket;socket;debug=!0;descriptor;serverOrigin;endpointUrl(e){let t=this.descriptor?.endpoints?.[e];if(!this.serverOrigin||!t)return;return _a(this.serverOrigin,t)}options;platformRegistry=new Map;asContextUrl;sockethubContextUrl;apiVersion;initState="idle";hasReadyOnce=!1;initCycle;initTokenCounter=0;initTimeoutTimer;waitingWarningTimer;waitingWarningIntervalMs=1e4;readyWaiters=[];outboundQueue=[];outboundSequence=0;registryFingerprint;latestReadyInfo;static async connect(e,t={}){let{io:r,socketOptions:s,fetch:n,discoveryTimeoutMs:i,...o}=t,a=await $a(e,{fetch:n,discoveryTimeoutMs:i}),c=a.endpoints?.socketIO;if(!c)throw new wt(`Sockethub discovery failed: ${e} does not advertise a Socket.IO endpoint (older server?); pass a socket to the constructor instead`);let u=new URL(e).origin,d=(await zv(r))(u,{...s,path:c});return new Oi(d,o,{descriptor:a,serverOrigin:u})}constructor(e,t={},r){if(!e)throw Error("SockethubClient requires a socket.io instance");if(this._socket=e,this.descriptor=r?.descriptor,this.serverOrigin=r?.serverOrigin,this.options={initTimeoutMs:t.initTimeoutMs??5000,maxQueuedOutbound:t.maxQueuedOutbound??1000,maxQueuedAgeMs:t.maxQueuedAgeMs??30000,validation:t.validation??"auto"},this.socket=this.createPublicEmitter(),this.registerSocketIOHandlers(),this._socket.connected)this.socket.connected=!0,this.socket.id=this._socket.id,this.socket._emit("connect"),this.startInitialization("initial-connect",!0)}clearCredentials(){this.replayStore.events.credentials.clear()}getRegisteredPlatforms(){return Array.from(this.platformRegistry.values()).map((e)=>({...e,types:[...e.types],schemas:{...e.schemas}}))}isSchemasReady(){return this.isReady()}isReady(){return this.initState==="ready"}getInitState(){return this.initState}getRegisteredBaseContexts(){if(!this.asContextUrl||!this.sockethubContextUrl)throw Error("Schema registry not loaded yet. Wait for client ready state after connect.");return{as:this.asContextUrl,sockethub:this.sockethubContextUrl}}getPlatformSchema(e,t="messages"){let r=e?.trim();if(!r)return;return this.platformRegistry.get(r)?.schemas?.[t]}async waitForSchemas(e=2000){return await this.ready(e),this.buildPlatformRegistryPayload()}ready(e=this.options.initTimeoutMs){if(this.isReady()&&this.latestReadyInfo)return Promise.resolve(this.latestReadyInfo);return new Promise((t,r)=>{let s={resolve:t,reject:r};if(e>0)s.timer=setTimeout(()=>{this.readyWaiters=this.readyWaiters.filter((n)=>n!==s),r(Error(`SockethubClient ready() timed out after ${e}ms`))},e);if(this.readyWaiters.push(s),this.socket.connected&&this.initState==="idle")this.startInitialization(this.hasReadyOnce?"reconnect":"initial-connect",!0)})}validateActivity(e){if(this.options.validation==="off")return"";if(e.type==="credentials")return Nl(e);return Cl(e)}contextFor(e){if(typeof e!=="string"||e.trim().length===0)throw Error("SockethubClient.contextFor(platform) requires a non-empty platform string");if(!this.asContextUrl||!this.sockethubContextUrl)throw Error("Schema registry not loaded yet. Wait for client ready state after connect.");let t=e.trim(),r=this.platformRegistry.get(t);if(!r){let s=Array.from(this.platformRegistry.keys()).sort();throw Error(`unknown platform '${t}'. Registered platforms: ${s.join(", ")}`)}return[this.asContextUrl,this.sockethubContextUrl,r.contextUrl]}createPublicEmitter(){let e=new qv;return e._emit=e.emit,e.emit=(t,r,s)=>{this.handlePublicEmit(t,r,s)},e.connected=!1,e.disconnect=()=>{this._socket.disconnect()},e.connect=()=>{this._socket.connect()},e}requestSchemaRegistry(){if(!("io"in this._socket))return;this._socket.emit("schemas",this.registryFingerprint,(t)=>{this.handleSchemasPayload(t)})}applyPlatformRegistry(e){let t=Vv(e);if(!t)return;this.apiVersion=t.apiVersion,this.asContextUrl=t.asContextUrl,this.sockethubContextUrl=t.sockethubContextUrl,this.platformRegistry=t.platforms;for(let n of t.platforms.values())Uv(n);let r=this.buildPlatformRegistryPayload(),s=e;return this.registryFingerprint=typeof s.fingerprint==="string"?s.fingerprint:void 0,this.socket._emit("schemas",r),r}buildPlatformRegistryPayload(){return{apiVersion:this.apiVersion,contexts:this.asContextUrl&&this.sockethubContextUrl?{as:this.asContextUrl,sockethub:this.sockethubContextUrl}:void 0,platforms:this.getRegisteredPlatforms()}}buildReadyInfo(e){if(this.apiVersion===void 0||!this.asContextUrl||!this.sockethubContextUrl)return;return{state:"ready",reason:e,apiVersion:this.apiVersion,contexts:{as:this.asContextUrl,sockethub:this.sockethubContextUrl},platforms:this.getRegisteredPlatforms().map((t)=>({id:t.id,apiVersion:t.apiVersion,contextUrl:t.contextUrl,contextVersion:t.contextVersion,schemaVersion:t.schemaVersion,types:[...t.types]}))}}resolveReadyWaiters(e){let t=this.readyWaiters;this.readyWaiters=[];for(let r of t){if(r.timer)clearTimeout(r.timer);r.resolve(e)}}rejectReadyWaiters(e){let t=this.readyWaiters;this.readyWaiters=[];for(let r of t){if(r.timer)clearTimeout(r.timer);r.reject(e)}}emitInitError(e,t,r){this.socket._emit("init_error",{error:e,phase:t,retrying:r})}emitClientError(e,t,r){if(typeof t==="function"){t({error:r});return}this.socket._emit("client_error",{event:e,error:r})}clearInitTimers(){if(this.initTimeoutTimer)clearTimeout(this.initTimeoutTimer),this.initTimeoutTimer=void 0;if(this.waitingWarningTimer)clearInterval(this.waitingWarningTimer),this.waitingWarningTimer=void 0}startWaitingWarnings(){if(this.waitingWarningTimer)return;this.waitingWarningTimer=setInterval(()=>{if(this.isReady()||this.initState==="closed"){this.clearInitTimers();return}let e=this.outboundQueue.length,t=this.outboundQueue[0],r=t?((Date.now()-t.enqueuedAt)/1000).toFixed(1):"0.0";console.warn(`[SockethubClient] Still waiting for schemas; queued outbound messages: ${e}; oldest queued age: ${r}s.`)},this.waitingWarningIntervalMs)}startInitialization(e,t){if(!this.socket.connected||this.initState==="closed")return;let r=++this.initTokenCounter;this.initCycle={token:r,reason:e,startedAt:Date.now(),replayOnReady:t,timedOut:!1},this.initState="initializing",this.clearInitTimers(),this.initTimeoutTimer=setTimeout(()=>{if(!this.initCycle||this.initCycle.token!==r)return;this.initCycle.timedOut=!0,this.initState="init_error";let s=`Initialization timed out after ${this.options.initTimeoutMs}ms waiting for schemas`;console.warn(`[SockethubClient] ${s}; queued outbound messages: ${this.outboundQueue.length}. Waiting for schemas event from server.`),this.emitInitError(s,"timeout",!1),this.startWaitingWarnings()},this.options.initTimeoutMs);try{this.requestSchemaRegistry()}catch(s){this.initState="init_error";let n=s instanceof Error?s.message:String(s);this.emitInitError(n,"schemas-request",!1),this.startWaitingWarnings()}}markReady(e){let t=this.initCycle,r=Boolean(t?.replayOnReady);this.initCycle=void 0,this.clearInitTimers(),this.initState="ready",this.hasReadyOnce=!0;let s=this.buildReadyInfo(e);if(!s){let n=Error("Failed to build ready payload");this.initState="init_error",this.emitInitError(n.message,"schemas-apply",!0),this.rejectReadyWaiters(n);return}if(this.socket._emit("ready",s),this.latestReadyInfo=s,this.resolveReadyWaiters(s),r){let{credentials:n,connect:i,join:o}=this.replayStore.events;this.replay("credentials",n),this.replay("message",i),this.replay("message",o)}this.flushOutboundQueue()}handleSchemasPayload(e){if(!e||typeof e!=="object")return;if(e.unchanged===!0){if(typeof this.registryFingerprint==="string"&&this.platformRegistry.size>0){if(this.initCycle)this.markReady(this.initCycle.reason);else if(this.initState!=="ready")this.markReady("schemas-update");return}}let t=e.fingerprint;if(this.initState==="ready"&&!this.initCycle&&t&&t===this.registryFingerprint)return;if(this.initState==="ready"&&!this.initCycle)this.initState="initializing";if(!this.applyPlatformRegistry(e)){this.initState="init_error",this.emitInitError("Received invalid schemas payload from server","schemas-apply",!0),this.startWaitingWarnings();return}if(this.initCycle){this.markReady(this.initCycle.reason);return}this.markReady("schemas-update")}handlePublicEmit(e,t,r){let s={event:e,content:t,callback:r,enqueuedAt:Date.now(),sequence:this.outboundSequence++};if(!this.isReady()){this.enqueueOutbound(s);return}this.sendOutbound(s)}enqueueOutbound(e){if(this.outboundQueue.push(e),this.outboundQueue.length<=this.options.maxQueuedOutbound)return;let t=this.outboundQueue.shift();if(!t)return;this.emitClientError(t.event,t.callback,"SockethubClient queue overflow before ready")}flushOutboundQueue(){if(!this.isReady()||this.outboundQueue.length===0)return;let e=Date.now(),t=this.outboundQueue.sort((r,s)=>r.sequence-s.sequence);this.outboundQueue=[];for(let r of t){if(e-r.enqueuedAt>this.options.maxQueuedAgeMs){this.emitClientError(r.event,r.callback,`SockethubClient queued message expired after ${this.options.maxQueuedAgeMs}ms before initialization`);continue}this.sendOutbound(r)}}sendOutbound(e){let t=e.content;try{if(e.event==="credentials"||e.event==="message"){if(t=Ri(e.content),t&&typeof t==="object"){let s=t;if(e.event==="credentials"&&!s.type)s.type="credentials";if(s.actor&&typeof s.actor==="object"&&!s.actor.type)s.actor.type="person"}if(this.platformRegistry.size>0){let s=this.validateActivity(t);if(s){this.emitClientError(e.event,e.callback,`SockethubClient validation failed: ${s}`);return}}}let r=e.callback;if(e.event==="credentials")this.replayStore.recordCredentials(t);else if(e.event==="message"){if(this._socket.connected)this.replayStore.recordMessage(t);r=this.rememberRequestedRename(t,r)}this._socket.emit(e.event,t,r)}catch(r){let s=r instanceof Error?r.message:String(r);this.emitClientError(e.event,e.callback,s)}}log(e,t){if(this.debug)console.log(e,t)}registerSocketIOHandlers(){this._socket.on("connect",()=>{this.socket.id=this._socket.id,this.socket.connected=!0,this.socket._emit("connect"),this.startInitialization(this.hasReadyOnce?"reconnect":"initial-connect",!0)}),this._socket.on("connect_error",(e)=>{this.socket._emit("connect_error",e)}),this._socket.on("disconnect",(e)=>{if(this.socket.connected=!1,this.initState!=="closed")this.initState="idle";this.clearInitTimers(),this.socket._emit("disconnect",e)}),this._socket.on("schemas",(e)=>{this.handleSchemasPayload(e)}),this._socket.on("message",(e)=>{let t=Ri(e);this.followActorRename(t),this.socket._emit("message",t)})}followActorRename(e){if(wa(e))return;if(Ul(e))this.moveReplayState(e)}rememberRequestedRename(e,t){if(!Ul(e))return t;return(...r)=>{let[s,n]=r;if(!(s instanceof Error||wa(s)||wa(n)))this.moveReplayState(e);if(typeof t==="function")t(...r)}}moveReplayState(e){for(let[t,r]of this.replayStore.moveActor(e))this.log(`replay state moved from ${t} to ${r}`)}replay(e,t){for(let r of t.values()){let s=Ri(r),n=s?.id;if(ba(s)){let i=s.actor;n=typeof i==="string"?i:i.id}this.log(`replaying ${e} for ${n}`),this._socket.emit(e,s)}}}((e)=>{e.SockethubClient=Oi})(typeof globalThis==="object"?globalThis:{});})();
30
+
31
+ //# debugId=2A459736CEE8086F64756E2164756E21
32
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2NvZGVnZW4vc2NvcGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL25hbWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2Vycm9ycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS92YWxpZGF0ZS9ib29sU2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3J1bGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2FwcGxpY2FiaWxpdHkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGVmYXVsdHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2tleXdvcmQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvc3Vic2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWRlZXAtZXF1YWwvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLXRyYXZlcnNlL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3Jlc29sdmUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9yZWZfZXJyb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtdXJpL2xpYi91dGlscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC11cmkvbGliL3NjaGVtZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtdXJpL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VyaS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29yZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9jb3JlL3JlZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TnVtYmVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9tdWx0aXBsZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VjczJsZW5ndGguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TGVuZ3RoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9wYXR0ZXJuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdFByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL3JlcXVpcmVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdEl0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL2VxdWFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi91bmlxdWVJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vY29uc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2VudW0uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsSXRlbXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2l0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcmVmaXhJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaXRlbXMyMDIwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvZGVwZW5kZW5jaWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcm9wZXJ0eU5hbWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsUHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcGF0dGVyblByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL25vdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYW55T2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL29uZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hbGxPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL3RoZW5FbHNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Zvcm1hdC9mb3JtYXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9mb3JtYXQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9tZXRhZGF0YS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2RyYWZ0Ny5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Rpc2NyaW1pbmF0b3IvdHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9hanYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvZm9ybWF0cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuL3Njb3BlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9uYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS92YWxpZGF0ZS9ib29sU2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9ydWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvYXBwbGljYWJpbGl0eS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2RlZmF1bHRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2tleXdvcmQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL3N1YnNjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvcmVzb2x2ZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3JlZl9lcnJvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3VyaS1qcy9kaXN0L2VzNS91cmkuYWxsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvcnVudGltZS91cmkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb3JlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9yZWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TnVtYmVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbXVsdGlwbGVPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvdWNzMmxlbmd0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TGVuZ3RoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vcGF0dGVybi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0UHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL3JlcXVpcmVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbGltaXRJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvZXF1YWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi91bmlxdWVJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2NvbnN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vZW51bS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYWRkaXRpb25hbEl0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaXRlbXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcmVmaXhJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2l0ZW1zMjAyMC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2NvbnRhaW5zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvZGVwZW5kZW5jaWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydHlOYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2FkZGl0aW9uYWxQcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL3BhdHRlcm5Qcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3Ivbm90LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYW55T2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9vbmVPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2FsbE9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci90aGVuRWxzZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Zvcm1hdC9mb3JtYXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZm9ybWF0L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL21ldGFkYXRhLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2RyYWZ0Ny5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yL3R5cGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Rpc2NyaW1pbmF0b3IvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9hanYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvbGltaXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL25lYXJsZXkvbGliL25lYXJsZXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3NtdHAtYWRkcmVzcy1wYXJzZXIvZGlzdC9saWIvZ3JhbW1hci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc210cC1hZGRyZXNzLXBhcnNlci9kaXN0L2xpYi9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZW5kL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zY2hlbWVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pcmkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzLWRyYWZ0MjAxOS9mb3JtYXRzL2R1cmF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pZG4tZW1haWwuanMiLCAibm9kZTpwdW55Y29kZSIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMtZHJhZnQyMDE5L2Zvcm1hdHMvaWRuLWhvc3RuYW1lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pcmktcmVmZXJlbmNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMtZHJhZnQyMDE5L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwgIi4uL3NjaGVtYXMvc3JjL2NvbnRleHQudHMiLCAiLi4vc2NoZW1hcy9zcmMvaGVscGVycy9vYmplY3RzLnRzIiwgIi4uL3NjaGVtYXMvc3JjL3NjaGVtYXMvYWN0aXZpdHktc3RyZWFtLnRzIiwgIi4uL3NjaGVtYXMvc3JjL3NjaGVtYS1pZC50cyIsICIuLi9zY2hlbWFzL3NyYy9zY2hlbWFzL3NvY2tldGh1Yi1jb25maWcudHMiLCAiLi4vc2NoZW1hcy9zcmMvc2VydmljZS1kZXNjcmlwdG9yLnRzIiwgIi4uL3NjaGVtYXMvc3JjL2hlbHBlcnMvY29kZWdlbi50cyIsICIuLi9zY2hlbWFzL3NyYy9zY2hlbWFzL3NlcnZpY2UtZGVzY3JpcHRvci50cyIsICIuLi9zY2hlbWFzL3NyYy92YWxpZGF0b3IudHMiLCAiLi4vc2NoZW1hcy9zcmMvaGVscGVycy9lcnJvci1wYXJzZXIudHMiLCAiLi4vc2NoZW1hcy9zcmMvYWN0aXZpdHktc3RyZWFtLWhlbHBlci50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZXZlbnRlbWl0dGVyMy9pbmRleC5tanMiLCAic3JjL2NsaWVudC1yZWdpc3RyeS50cyIsICJzcmMvZGlzY292ZXJ5LnRzIiwgInNyYy9yZXBsYXktc3RvcmUudHMiLCAic3JjL3NvY2tldGh1Yi1jbGllbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZ2V4cENvZGUgPSBleHBvcnRzLmdldEVzbUV4cG9ydE5hbWUgPSBleHBvcnRzLmdldFByb3BlcnR5ID0gZXhwb3J0cy5zYWZlU3RyaW5naWZ5ID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ckNvbmNhdCA9IGV4cG9ydHMuYWRkQ29kZUFyZyA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLl9Db2RlID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5JREVOVElGSUVSID0gZXhwb3J0cy5fQ29kZU9yTmFtZSA9IHZvaWQgMDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXh0cmFuZW91cy1jbGFzc1xuY2xhc3MgX0NvZGVPck5hbWUge1xufVxuZXhwb3J0cy5fQ29kZU9yTmFtZSA9IF9Db2RlT3JOYW1lO1xuZXhwb3J0cy5JREVOVElGSUVSID0gL15bYS16JF9dW2EteiRfMC05XSokL2k7XG5jbGFzcyBOYW1lIGV4dGVuZHMgX0NvZGVPck5hbWUge1xuICAgIGNvbnN0cnVjdG9yKHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgaWYgKCFleHBvcnRzLklERU5USUZJRVIudGVzdChzKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVHZW46IG5hbWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcIik7XG4gICAgICAgIHRoaXMuc3RyID0gcztcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cjtcbiAgICB9XG4gICAgZW1wdHlTdHIoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4geyBbdGhpcy5zdHJdOiAxIH07XG4gICAgfVxufVxuZXhwb3J0cy5OYW1lID0gTmFtZTtcbmNsYXNzIF9Db2RlIGV4dGVuZHMgX0NvZGVPck5hbWUge1xuICAgIGNvbnN0cnVjdG9yKGNvZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5faXRlbXMgPSB0eXBlb2YgY29kZSA9PT0gXCJzdHJpbmdcIiA/IFtjb2RlXSA6IGNvZGU7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHI7XG4gICAgfVxuICAgIGVtcHR5U3RyKCkge1xuICAgICAgICBpZiAodGhpcy5faXRlbXMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2l0ZW1zWzBdO1xuICAgICAgICByZXR1cm4gaXRlbSA9PT0gXCJcIiB8fCBpdGVtID09PSAnXCJcIic7XG4gICAgfVxuICAgIGdldCBzdHIoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLl9zdHIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICh0aGlzLl9zdHIgPSB0aGlzLl9pdGVtcy5yZWR1Y2UoKHMsIGMpID0+IGAke3N9JHtjfWAsIFwiXCIpKSk7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuX25hbWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAodGhpcy5fbmFtZXMgPSB0aGlzLl9pdGVtcy5yZWR1Y2UoKG5hbWVzLCBjKSA9PiB7XG4gICAgICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIE5hbWUpXG4gICAgICAgICAgICAgICAgbmFtZXNbYy5zdHJdID0gKG5hbWVzW2Muc3RyXSB8fCAwKSArIDE7XG4gICAgICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgICAgIH0sIHt9KSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuX0NvZGUgPSBfQ29kZTtcbmV4cG9ydHMubmlsID0gbmV3IF9Db2RlKFwiXCIpO1xuZnVuY3Rpb24gXyhzdHJzLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgY29kZSA9IFtzdHJzWzBdXTtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkge1xuICAgICAgICBhZGRDb2RlQXJnKGNvZGUsIGFyZ3NbaV0pO1xuICAgICAgICBjb2RlLnB1c2goc3Ryc1srK2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfQ29kZShjb2RlKTtcbn1cbmV4cG9ydHMuXyA9IF87XG5jb25zdCBwbHVzID0gbmV3IF9Db2RlKFwiK1wiKTtcbmZ1bmN0aW9uIHN0cihzdHJzLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgZXhwciA9IFtzYWZlU3RyaW5naWZ5KHN0cnNbMF0pXTtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkge1xuICAgICAgICBleHByLnB1c2gocGx1cyk7XG4gICAgICAgIGFkZENvZGVBcmcoZXhwciwgYXJnc1tpXSk7XG4gICAgICAgIGV4cHIucHVzaChwbHVzLCBzYWZlU3RyaW5naWZ5KHN0cnNbKytpXSkpO1xuICAgIH1cbiAgICBvcHRpbWl6ZShleHByKTtcbiAgICByZXR1cm4gbmV3IF9Db2RlKGV4cHIpO1xufVxuZXhwb3J0cy5zdHIgPSBzdHI7XG5mdW5jdGlvbiBhZGRDb2RlQXJnKGNvZGUsIGFyZykge1xuICAgIGlmIChhcmcgaW5zdGFuY2VvZiBfQ29kZSlcbiAgICAgICAgY29kZS5wdXNoKC4uLmFyZy5faXRlbXMpO1xuICAgIGVsc2UgaWYgKGFyZyBpbnN0YW5jZW9mIE5hbWUpXG4gICAgICAgIGNvZGUucHVzaChhcmcpO1xuICAgIGVsc2VcbiAgICAgICAgY29kZS5wdXNoKGludGVycG9sYXRlKGFyZykpO1xufVxuZXhwb3J0cy5hZGRDb2RlQXJnID0gYWRkQ29kZUFyZztcbmZ1bmN0aW9uIG9wdGltaXplKGV4cHIpIHtcbiAgICBsZXQgaSA9IDE7XG4gICAgd2hpbGUgKGkgPCBleHByLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgaWYgKGV4cHJbaV0gPT09IHBsdXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG1lcmdlRXhwckl0ZW1zKGV4cHJbaSAtIDFdLCBleHByW2kgKyAxXSk7XG4gICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBleHByLnNwbGljZShpIC0gMSwgMywgcmVzKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cHJbaSsrXSA9IFwiK1wiO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZUV4cHJJdGVtcyhhLCBiKSB7XG4gICAgaWYgKGIgPT09ICdcIlwiJylcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgaWYgKGEgPT09ICdcIlwiJylcbiAgICAgICAgcmV0dXJuIGI7XG4gICAgaWYgKHR5cGVvZiBhID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKGIgaW5zdGFuY2VvZiBOYW1lIHx8IGFbYS5sZW5ndGggLSAxXSAhPT0gJ1wiJylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gYCR7YS5zbGljZSgwLCAtMSl9JHtifVwiYDtcbiAgICAgICAgaWYgKGJbMF0gPT09ICdcIicpXG4gICAgICAgICAgICByZXR1cm4gYS5zbGljZSgwLCAtMSkgKyBiLnNsaWNlKDEpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYiA9PSBcInN0cmluZ1wiICYmIGJbMF0gPT09ICdcIicgJiYgIShhIGluc3RhbmNlb2YgTmFtZSkpXG4gICAgICAgIHJldHVybiBgXCIke2F9JHtiLnNsaWNlKDEpfWA7XG4gICAgcmV0dXJuO1xufVxuZnVuY3Rpb24gc3RyQ29uY2F0KGMxLCBjMikge1xuICAgIHJldHVybiBjMi5lbXB0eVN0cigpID8gYzEgOiBjMS5lbXB0eVN0cigpID8gYzIgOiBzdHIgYCR7YzF9JHtjMn1gO1xufVxuZXhwb3J0cy5zdHJDb25jYXQgPSBzdHJDb25jYXQ7XG4vLyBUT0RPIGRvIG5vdCBhbGxvdyBhcnJheXMgaGVyZVxuZnVuY3Rpb24gaW50ZXJwb2xhdGUoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PSBcIm51bWJlclwiIHx8IHR5cGVvZiB4ID09IFwiYm9vbGVhblwiIHx8IHggPT09IG51bGxcbiAgICAgICAgPyB4XG4gICAgICAgIDogc2FmZVN0cmluZ2lmeShBcnJheS5pc0FycmF5KHgpID8geC5qb2luKFwiLFwiKSA6IHgpO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5KHgpIHtcbiAgICByZXR1cm4gbmV3IF9Db2RlKHNhZmVTdHJpbmdpZnkoeCkpO1xufVxuZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7XG5mdW5jdGlvbiBzYWZlU3RyaW5naWZ5KHgpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeClcbiAgICAgICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgXCJcXFxcdTIwMjhcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcdTIwMjkvZywgXCJcXFxcdTIwMjlcIik7XG59XG5leHBvcnRzLnNhZmVTdHJpbmdpZnkgPSBzYWZlU3RyaW5naWZ5O1xuZnVuY3Rpb24gZ2V0UHJvcGVydHkoa2V5KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBrZXkgPT0gXCJzdHJpbmdcIiAmJiBleHBvcnRzLklERU5USUZJRVIudGVzdChrZXkpID8gbmV3IF9Db2RlKGAuJHtrZXl9YCkgOiBfIGBbJHtrZXl9XWA7XG59XG5leHBvcnRzLmdldFByb3BlcnR5ID0gZ2V0UHJvcGVydHk7XG4vL0RvZXMgYmVzdCBlZmZvcnQgdG8gZm9ybWF0IHRoZSBuYW1lIHByb3Blcmx5XG5mdW5jdGlvbiBnZXRFc21FeHBvcnROYW1lKGtleSkge1xuICAgIGlmICh0eXBlb2Yga2V5ID09IFwic3RyaW5nXCIgJiYgZXhwb3J0cy5JREVOVElGSUVSLnRlc3Qoa2V5KSkge1xuICAgICAgICByZXR1cm4gbmV3IF9Db2RlKGAke2tleX1gKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBpbnZhbGlkIGV4cG9ydCBuYW1lOiAke2tleX0sIHVzZSBleHBsaWNpdCAkaWQgbmFtZSBtYXBwaW5nYCk7XG59XG5leHBvcnRzLmdldEVzbUV4cG9ydE5hbWUgPSBnZXRFc21FeHBvcnROYW1lO1xuZnVuY3Rpb24gcmVnZXhwQ29kZShyeCkge1xuICAgIHJldHVybiBuZXcgX0NvZGUocngudG9TdHJpbmcoKSk7XG59XG5leHBvcnRzLnJlZ2V4cENvZGUgPSByZWdleHBDb2RlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29kZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5WYWx1ZVNjb3BlID0gZXhwb3J0cy5WYWx1ZVNjb3BlTmFtZSA9IGV4cG9ydHMuU2NvcGUgPSBleHBvcnRzLnZhcktpbmRzID0gZXhwb3J0cy5Vc2VkVmFsdWVTdGF0ZSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuL2NvZGVcIik7XG5jbGFzcyBWYWx1ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICAgICAgc3VwZXIoYENvZGVHZW46IFwiY29kZVwiIGZvciAke25hbWV9IG5vdCBkZWZpbmVkYCk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuYW1lLnZhbHVlO1xuICAgIH1cbn1cbnZhciBVc2VkVmFsdWVTdGF0ZTtcbihmdW5jdGlvbiAoVXNlZFZhbHVlU3RhdGUpIHtcbiAgICBVc2VkVmFsdWVTdGF0ZVtVc2VkVmFsdWVTdGF0ZVtcIlN0YXJ0ZWRcIl0gPSAwXSA9IFwiU3RhcnRlZFwiO1xuICAgIFVzZWRWYWx1ZVN0YXRlW1VzZWRWYWx1ZVN0YXRlW1wiQ29tcGxldGVkXCJdID0gMV0gPSBcIkNvbXBsZXRlZFwiO1xufSkoVXNlZFZhbHVlU3RhdGUgfHwgKGV4cG9ydHMuVXNlZFZhbHVlU3RhdGUgPSBVc2VkVmFsdWVTdGF0ZSA9IHt9KSk7XG5leHBvcnRzLnZhcktpbmRzID0ge1xuICAgIGNvbnN0OiBuZXcgY29kZV8xLk5hbWUoXCJjb25zdFwiKSxcbiAgICBsZXQ6IG5ldyBjb2RlXzEuTmFtZShcImxldFwiKSxcbiAgICB2YXI6IG5ldyBjb2RlXzEuTmFtZShcInZhclwiKSxcbn07XG5jbGFzcyBTY29wZSB7XG4gICAgY29uc3RydWN0b3IoeyBwcmVmaXhlcywgcGFyZW50IH0gPSB7fSkge1xuICAgICAgICB0aGlzLl9uYW1lcyA9IHt9O1xuICAgICAgICB0aGlzLl9wcmVmaXhlcyA9IHByZWZpeGVzO1xuICAgICAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxuICAgIHRvTmFtZShuYW1lT3JQcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5hbWVPclByZWZpeCBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8gbmFtZU9yUHJlZml4IDogdGhpcy5uYW1lKG5hbWVPclByZWZpeCk7XG4gICAgfVxuICAgIG5hbWUocHJlZml4KSB7XG4gICAgICAgIHJldHVybiBuZXcgY29kZV8xLk5hbWUodGhpcy5fbmV3TmFtZShwcmVmaXgpKTtcbiAgICB9XG4gICAgX25ld05hbWUocHJlZml4KSB7XG4gICAgICAgIGNvbnN0IG5nID0gdGhpcy5fbmFtZXNbcHJlZml4XSB8fCB0aGlzLl9uYW1lR3JvdXAocHJlZml4KTtcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke25nLmluZGV4Kyt9YDtcbiAgICB9XG4gICAgX25hbWVHcm91cChwcmVmaXgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKCgoX2IgPSAoX2EgPSB0aGlzLl9wYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5fcHJlZml4ZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5oYXMocHJlZml4KSkgfHwgKHRoaXMuX3ByZWZpeGVzICYmICF0aGlzLl9wcmVmaXhlcy5oYXMocHJlZml4KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogcHJlZml4IFwiJHtwcmVmaXh9XCIgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBzY29wZWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAodGhpcy5fbmFtZXNbcHJlZml4XSA9IHsgcHJlZml4LCBpbmRleDogMCB9KTtcbiAgICB9XG59XG5leHBvcnRzLlNjb3BlID0gU2NvcGU7XG5jbGFzcyBWYWx1ZVNjb3BlTmFtZSBleHRlbmRzIGNvZGVfMS5OYW1lIHtcbiAgICBjb25zdHJ1Y3RvcihwcmVmaXgsIG5hbWVTdHIpIHtcbiAgICAgICAgc3VwZXIobmFtZVN0cik7XG4gICAgICAgIHRoaXMucHJlZml4ID0gcHJlZml4O1xuICAgIH1cbiAgICBzZXRWYWx1ZSh2YWx1ZSwgeyBwcm9wZXJ0eSwgaXRlbUluZGV4IH0pIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNjb3BlUGF0aCA9ICgwLCBjb2RlXzEuXykgYC4ke25ldyBjb2RlXzEuTmFtZShwcm9wZXJ0eSl9WyR7aXRlbUluZGV4fV1gO1xuICAgIH1cbn1cbmV4cG9ydHMuVmFsdWVTY29wZU5hbWUgPSBWYWx1ZVNjb3BlTmFtZTtcbmNvbnN0IGxpbmUgPSAoMCwgY29kZV8xLl8pIGBcXG5gO1xuY2xhc3MgVmFsdWVTY29wZSBleHRlbmRzIFNjb3BlIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKG9wdHMpO1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fc2NvcGUgPSBvcHRzLnNjb3BlO1xuICAgICAgICB0aGlzLm9wdHMgPSB7IC4uLm9wdHMsIF9uOiBvcHRzLmxpbmVzID8gbGluZSA6IGNvZGVfMS5uaWwgfTtcbiAgICB9XG4gICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NvcGU7XG4gICAgfVxuICAgIG5hbWUocHJlZml4KSB7XG4gICAgICAgIHJldHVybiBuZXcgVmFsdWVTY29wZU5hbWUocHJlZml4LCB0aGlzLl9uZXdOYW1lKHByZWZpeCkpO1xuICAgIH1cbiAgICB2YWx1ZShuYW1lT3JQcmVmaXgsIHZhbHVlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHZhbHVlLnJlZiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZUdlbjogcmVmIG11c3QgYmUgcGFzc2VkIGluIHZhbHVlXCIpO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgY29uc3QgeyBwcmVmaXggfSA9IG5hbWU7XG4gICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gKF9hID0gdmFsdWUua2V5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWx1ZS5yZWY7XG4gICAgICAgIGxldCB2cyA9IHRoaXMuX3ZhbHVlc1twcmVmaXhdO1xuICAgICAgICBpZiAodnMpIHtcbiAgICAgICAgICAgIGNvbnN0IF9uYW1lID0gdnMuZ2V0KHZhbHVlS2V5KTtcbiAgICAgICAgICAgIGlmIChfbmFtZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gX25hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2cyA9IHRoaXMuX3ZhbHVlc1twcmVmaXhdID0gbmV3IE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIHZzLnNldCh2YWx1ZUtleSwgbmFtZSk7XG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLl9zY29wZVtwcmVmaXhdIHx8ICh0aGlzLl9zY29wZVtwcmVmaXhdID0gW10pO1xuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSBzLmxlbmd0aDtcbiAgICAgICAgc1tpdGVtSW5kZXhdID0gdmFsdWUucmVmO1xuICAgICAgICBuYW1lLnNldFZhbHVlKHZhbHVlLCB7IHByb3BlcnR5OiBwcmVmaXgsIGl0ZW1JbmRleCB9KTtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGdldFZhbHVlKHByZWZpeCwga2V5T3JSZWYpIHtcbiAgICAgICAgY29uc3QgdnMgPSB0aGlzLl92YWx1ZXNbcHJlZml4XTtcbiAgICAgICAgaWYgKCF2cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcmV0dXJuIHZzLmdldChrZXlPclJlZik7XG4gICAgfVxuICAgIHNjb3BlUmVmcyhzY29wZU5hbWUsIHZhbHVlcyA9IHRoaXMuX3ZhbHVlcykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVkdWNlVmFsdWVzKHZhbHVlcywgKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lLnNjb3BlUGF0aCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogbmFtZSBcIiR7bmFtZX1cIiBoYXMgbm8gdmFsdWVgKTtcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZV8xLl8pIGAke3Njb3BlTmFtZX0ke25hbWUuc2NvcGVQYXRofWA7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzY29wZUNvZGUodmFsdWVzID0gdGhpcy5fdmFsdWVzLCB1c2VkVmFsdWVzLCBnZXRDb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWR1Y2VWYWx1ZXModmFsdWVzLCAobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5hbWUudmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5hbWUgXCIke25hbWV9XCIgaGFzIG5vIHZhbHVlYCk7XG4gICAgICAgICAgICByZXR1cm4gbmFtZS52YWx1ZS5jb2RlO1xuICAgICAgICB9LCB1c2VkVmFsdWVzLCBnZXRDb2RlKTtcbiAgICB9XG4gICAgX3JlZHVjZVZhbHVlcyh2YWx1ZXMsIHZhbHVlQ29kZSwgdXNlZFZhbHVlcyA9IHt9LCBnZXRDb2RlKSB7XG4gICAgICAgIGxldCBjb2RlID0gY29kZV8xLm5pbDtcbiAgICAgICAgZm9yIChjb25zdCBwcmVmaXggaW4gdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCB2cyA9IHZhbHVlc1twcmVmaXhdO1xuICAgICAgICAgICAgaWYgKCF2cylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVTZXQgPSAodXNlZFZhbHVlc1twcmVmaXhdID0gdXNlZFZhbHVlc1twcmVmaXhdIHx8IG5ldyBNYXAoKSk7XG4gICAgICAgICAgICB2cy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWVTZXQuaGFzKG5hbWUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgbmFtZVNldC5zZXQobmFtZSwgVXNlZFZhbHVlU3RhdGUuU3RhcnRlZCk7XG4gICAgICAgICAgICAgICAgbGV0IGMgPSB2YWx1ZUNvZGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmID0gdGhpcy5vcHRzLmVzNSA/IGV4cG9ydHMudmFyS2luZHMudmFyIDogZXhwb3J0cy52YXJLaW5kcy5jb25zdDtcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgwLCBjb2RlXzEuXykgYCR7Y29kZX0ke2RlZn0gJHtuYW1lfSA9ICR7Y307JHt0aGlzLm9wdHMuX259YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoKGMgPSBnZXRDb2RlID09PSBudWxsIHx8IGdldENvZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGdldENvZGUobmFtZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoMCwgY29kZV8xLl8pIGAke2NvZGV9JHtjfSR7dGhpcy5vcHRzLl9ufWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsdWVFcnJvcihuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmFtZVNldC5zZXQobmFtZSwgVXNlZFZhbHVlU3RhdGUuQ29tcGxldGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbn1cbmV4cG9ydHMuVmFsdWVTY29wZSA9IFZhbHVlU2NvcGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY29wZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vciA9IGV4cG9ydHMuYW5kID0gZXhwb3J0cy5ub3QgPSBleHBvcnRzLkNvZGVHZW4gPSBleHBvcnRzLm9wZXJhdG9ycyA9IGV4cG9ydHMudmFyS2luZHMgPSBleHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gZXhwb3J0cy5WYWx1ZVNjb3BlID0gZXhwb3J0cy5TY29wZSA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMucmVnZXhwQ29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5nZXRQcm9wZXJ0eSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJDb25jYXQgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IHZvaWQgMDtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuL2NvZGVcIik7XG5jb25zdCBzY29wZV8xID0gcmVxdWlyZShcIi4vc2NvcGVcIik7XG52YXIgY29kZV8yID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5fOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuc3RyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyQ29uY2F0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuc3RyQ29uY2F0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmlsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIubmlsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0UHJvcGVydHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5nZXRQcm9wZXJ0eTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZ2V4cENvZGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5yZWdleHBDb2RlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLk5hbWU7IH0gfSk7XG52YXIgc2NvcGVfMiA9IHJlcXVpcmUoXCIuL3Njb3BlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2NvcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIuU2NvcGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWYWx1ZVNjb3BlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLlZhbHVlU2NvcGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWYWx1ZVNjb3BlTmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi5WYWx1ZVNjb3BlTmFtZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhcktpbmRzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLnZhcktpbmRzOyB9IH0pO1xuZXhwb3J0cy5vcGVyYXRvcnMgPSB7XG4gICAgR1Q6IG5ldyBjb2RlXzEuX0NvZGUoXCI+XCIpLFxuICAgIEdURTogbmV3IGNvZGVfMS5fQ29kZShcIj49XCIpLFxuICAgIExUOiBuZXcgY29kZV8xLl9Db2RlKFwiPFwiKSxcbiAgICBMVEU6IG5ldyBjb2RlXzEuX0NvZGUoXCI8PVwiKSxcbiAgICBFUTogbmV3IGNvZGVfMS5fQ29kZShcIj09PVwiKSxcbiAgICBORVE6IG5ldyBjb2RlXzEuX0NvZGUoXCIhPT1cIiksXG4gICAgTk9UOiBuZXcgY29kZV8xLl9Db2RlKFwiIVwiKSxcbiAgICBPUjogbmV3IGNvZGVfMS5fQ29kZShcInx8XCIpLFxuICAgIEFORDogbmV3IGNvZGVfMS5fQ29kZShcIiYmXCIpLFxuICAgIEFERDogbmV3IGNvZGVfMS5fQ29kZShcIitcIiksXG59O1xuY2xhc3MgTm9kZSB7XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMoX25hbWVzLCBfY29uc3RhbnRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbmNsYXNzIERlZiBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKHZhcktpbmQsIG5hbWUsIHJocykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnZhcktpbmQgPSB2YXJLaW5kO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLnJocyA9IHJocztcbiAgICB9XG4gICAgcmVuZGVyKHsgZXM1LCBfbiB9KSB7XG4gICAgICAgIGNvbnN0IHZhcktpbmQgPSBlczUgPyBzY29wZV8xLnZhcktpbmRzLnZhciA6IHRoaXMudmFyS2luZDtcbiAgICAgICAgY29uc3QgcmhzID0gdGhpcy5yaHMgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBgID0gJHt0aGlzLnJoc31gO1xuICAgICAgICByZXR1cm4gYCR7dmFyS2luZH0gJHt0aGlzLm5hbWV9JHtyaHN9O2AgKyBfbjtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGlmICghbmFtZXNbdGhpcy5uYW1lLnN0cl0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnJocylcbiAgICAgICAgICAgIHRoaXMucmhzID0gb3B0aW1pemVFeHByKHRoaXMucmhzLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmhzIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlT3JOYW1lID8gdGhpcy5yaHMubmFtZXMgOiB7fTtcbiAgICB9XG59XG5jbGFzcyBBc3NpZ24gZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihsaHMsIHJocywgc2lkZUVmZmVjdHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5saHMgPSBsaHM7XG4gICAgICAgIHRoaXMucmhzID0gcmhzO1xuICAgICAgICB0aGlzLnNpZGVFZmZlY3RzID0gc2lkZUVmZmVjdHM7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGhzfSA9ICR7dGhpcy5yaHN9O2AgKyBfbjtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGlmICh0aGlzLmxocyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lICYmICFuYW1lc1t0aGlzLmxocy5zdHJdICYmICF0aGlzLnNpZGVFZmZlY3RzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnJocyA9IG9wdGltaXplRXhwcih0aGlzLnJocywgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gdGhpcy5saHMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IHt9IDogeyAuLi50aGlzLmxocy5uYW1lcyB9O1xuICAgICAgICByZXR1cm4gYWRkRXhwck5hbWVzKG5hbWVzLCB0aGlzLnJocyk7XG4gICAgfVxufVxuY2xhc3MgQXNzaWduT3AgZXh0ZW5kcyBBc3NpZ24ge1xuICAgIGNvbnN0cnVjdG9yKGxocywgb3AsIHJocywgc2lkZUVmZmVjdHMpIHtcbiAgICAgICAgc3VwZXIobGhzLCByaHMsIHNpZGVFZmZlY3RzKTtcbiAgICAgICAgdGhpcy5vcCA9IG9wO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxoc30gJHt0aGlzLm9wfT0gJHt0aGlzLnJoc307YCArIF9uO1xuICAgIH1cbn1cbmNsYXNzIExhYmVsIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IobGFiZWwpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgICAgICB0aGlzLm5hbWVzID0ge307XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGFiZWx9OmAgKyBfbjtcbiAgICB9XG59XG5jbGFzcyBCcmVhayBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGxhYmVsKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICAgICAgdGhpcy5uYW1lcyA9IHt9O1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5sYWJlbCA/IGAgJHt0aGlzLmxhYmVsfWAgOiBcIlwiO1xuICAgICAgICByZXR1cm4gYGJyZWFrJHtsYWJlbH07YCArIF9uO1xuICAgIH1cbn1cbmNsYXNzIFRocm93IGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IoZXJyb3IpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgdGhyb3cgJHt0aGlzLmVycm9yfTtgICsgX247XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IubmFtZXM7XG4gICAgfVxufVxuY2xhc3MgQW55Q29kZSBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGNvZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2RlfTtgICsgX247XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvZGV9YCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB0aGlzLmNvZGUgPSBvcHRpbWl6ZUV4cHIodGhpcy5jb2RlLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29kZSBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZU9yTmFtZSA/IHRoaXMuY29kZS5uYW1lcyA6IHt9O1xuICAgIH1cbn1cbmNsYXNzIFBhcmVudE5vZGUgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcihub2RlcyA9IFtdKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubm9kZXMgPSBub2RlcztcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXMucmVkdWNlKChjb2RlLCBuKSA9PiBjb2RlICsgbi5yZW5kZXIob3B0cyksIFwiXCIpO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICBjb25zdCB7IG5vZGVzIH0gPSB0aGlzO1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgY29uc3QgbiA9IG5vZGVzW2ldLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG4pKVxuICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxLCAuLi5uKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKG4pXG4gICAgICAgICAgICAgICAgbm9kZXNbaV0gPSBuO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBjb25zdCB7IG5vZGVzIH0gPSB0aGlzO1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgLy8gaXRlcmF0aW5nIGJhY2t3YXJkcyBpbXByb3ZlcyAxLXBhc3Mgb3B0aW1pemF0aW9uXG4gICAgICAgICAgICBjb25zdCBuID0gbm9kZXNbaV07XG4gICAgICAgICAgICBpZiAobi5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgc3VidHJhY3ROYW1lcyhuYW1lcywgbi5uYW1lcyk7XG4gICAgICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGVzLmxlbmd0aCA+IDAgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzLnJlZHVjZSgobmFtZXMsIG4pID0+IGFkZE5hbWVzKG5hbWVzLCBuLm5hbWVzKSwge30pO1xuICAgIH1cbn1cbmNsYXNzIEJsb2NrTm9kZSBleHRlbmRzIFBhcmVudE5vZGUge1xuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBcIntcIiArIG9wdHMuX24gKyBzdXBlci5yZW5kZXIob3B0cykgKyBcIn1cIiArIG9wdHMuX247XG4gICAgfVxufVxuY2xhc3MgUm9vdCBleHRlbmRzIFBhcmVudE5vZGUge1xufVxuY2xhc3MgRWxzZSBleHRlbmRzIEJsb2NrTm9kZSB7XG59XG5FbHNlLmtpbmQgPSBcImVsc2VcIjtcbmNsYXNzIElmIGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25kaXRpb24sIG5vZGVzKSB7XG4gICAgICAgIHN1cGVyKG5vZGVzKTtcbiAgICAgICAgdGhpcy5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIGxldCBjb2RlID0gYGlmKCR7dGhpcy5jb25kaXRpb259KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgICAgIGlmICh0aGlzLmVsc2UpXG4gICAgICAgICAgICBjb2RlICs9IFwiZWxzZSBcIiArIHRoaXMuZWxzZS5yZW5kZXIob3B0cyk7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIGNvbnN0IGNvbmQgPSB0aGlzLmNvbmRpdGlvbjtcbiAgICAgICAgaWYgKGNvbmQgPT09IHRydWUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlczsgLy8gZWxzZSBpcyBpZ25vcmVkIGhlcmVcbiAgICAgICAgbGV0IGUgPSB0aGlzLmVsc2U7XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICBjb25zdCBucyA9IGUub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAgICAgZSA9IHRoaXMuZWxzZSA9IEFycmF5LmlzQXJyYXkobnMpID8gbmV3IEVsc2UobnMpIDogbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIGlmIChjb25kID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIElmID8gZSA6IGUubm9kZXM7XG4gICAgICAgICAgICBpZiAodGhpcy5ub2Rlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gbmV3IElmKG5vdChjb25kKSwgZSBpbnN0YW5jZW9mIElmID8gW2VdIDogZS5ub2Rlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmQgPT09IGZhbHNlIHx8ICF0aGlzLm5vZGVzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLmVsc2UgPSAoX2EgPSB0aGlzLmVsc2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICBpZiAoIShzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHx8IHRoaXMuZWxzZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gb3B0aW1pemVFeHByKHRoaXMuY29uZGl0aW9uLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBzdXBlci5uYW1lcztcbiAgICAgICAgYWRkRXhwck5hbWVzKG5hbWVzLCB0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgIGlmICh0aGlzLmVsc2UpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5lbHNlLm5hbWVzKTtcbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH1cbn1cbklmLmtpbmQgPSBcImlmXCI7XG5jbGFzcyBGb3IgZXh0ZW5kcyBCbG9ja05vZGUge1xufVxuRm9yLmtpbmQgPSBcImZvclwiO1xuY2xhc3MgRm9yTG9vcCBleHRlbmRzIEZvciB7XG4gICAgY29uc3RydWN0b3IoaXRlcmF0aW9uKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaXRlcmF0aW9uID0gaXRlcmF0aW9uO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gYGZvcigke3RoaXMuaXRlcmF0aW9ufSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKCFzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLml0ZXJhdGlvbiA9IG9wdGltaXplRXhwcih0aGlzLml0ZXJhdGlvbiwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiBhZGROYW1lcyhzdXBlci5uYW1lcywgdGhpcy5pdGVyYXRpb24ubmFtZXMpO1xuICAgIH1cbn1cbmNsYXNzIEZvclJhbmdlIGV4dGVuZHMgRm9yIHtcbiAgICBjb25zdHJ1Y3Rvcih2YXJLaW5kLCBuYW1lLCBmcm9tLCB0bykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnZhcktpbmQgPSB2YXJLaW5kO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmZyb20gPSBmcm9tO1xuICAgICAgICB0aGlzLnRvID0gdG87XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIGNvbnN0IHZhcktpbmQgPSBvcHRzLmVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogdGhpcy52YXJLaW5kO1xuICAgICAgICBjb25zdCB7IG5hbWUsIGZyb20sIHRvIH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gYGZvcigke3ZhcktpbmR9ICR7bmFtZX09JHtmcm9tfTsgJHtuYW1lfTwke3RvfTsgJHtuYW1lfSsrKWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBhZGRFeHByTmFtZXMoc3VwZXIubmFtZXMsIHRoaXMuZnJvbSk7XG4gICAgICAgIHJldHVybiBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMudG8pO1xuICAgIH1cbn1cbmNsYXNzIEZvckl0ZXIgZXh0ZW5kcyBGb3Ige1xuICAgIGNvbnN0cnVjdG9yKGxvb3AsIHZhcktpbmQsIG5hbWUsIGl0ZXJhYmxlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9vcCA9IGxvb3A7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuaXRlcmFibGUgPSBpdGVyYWJsZTtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGBmb3IoJHt0aGlzLnZhcktpbmR9ICR7dGhpcy5uYW1lfSAke3RoaXMubG9vcH0gJHt0aGlzLml0ZXJhYmxlfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKCFzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLml0ZXJhYmxlID0gb3B0aW1pemVFeHByKHRoaXMuaXRlcmFibGUsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gYWRkTmFtZXMoc3VwZXIubmFtZXMsIHRoaXMuaXRlcmFibGUubmFtZXMpO1xuICAgIH1cbn1cbmNsYXNzIEZ1bmMgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIGFyZ3MsIGFzeW5jKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgICAgIHRoaXMuYXN5bmMgPSBhc3luYztcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgY29uc3QgX2FzeW5jID0gdGhpcy5hc3luYyA/IFwiYXN5bmMgXCIgOiBcIlwiO1xuICAgICAgICByZXR1cm4gYCR7X2FzeW5jfWZ1bmN0aW9uICR7dGhpcy5uYW1lfSgke3RoaXMuYXJnc30pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG59XG5GdW5jLmtpbmQgPSBcImZ1bmNcIjtcbmNsYXNzIFJldHVybiBleHRlbmRzIFBhcmVudE5vZGUge1xuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBcInJldHVybiBcIiArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG59XG5SZXR1cm4ua2luZCA9IFwicmV0dXJuXCI7XG5jbGFzcyBUcnkgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIGxldCBjb2RlID0gXCJ0cnlcIiArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICAgICAgaWYgKHRoaXMuY2F0Y2gpXG4gICAgICAgICAgICBjb2RlICs9IHRoaXMuY2F0Y2gucmVuZGVyKG9wdHMpO1xuICAgICAgICBpZiAodGhpcy5maW5hbGx5KVxuICAgICAgICAgICAgY29kZSArPSB0aGlzLmZpbmFsbHkucmVuZGVyKG9wdHMpO1xuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgc3VwZXIub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAoX2EgPSB0aGlzLmNhdGNoKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAoX2IgPSB0aGlzLmZpbmFsbHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgc3VwZXIub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgKF9hID0gdGhpcy5jYXRjaCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIChfYiA9IHRoaXMuZmluYWxseSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gc3VwZXIubmFtZXM7XG4gICAgICAgIGlmICh0aGlzLmNhdGNoKVxuICAgICAgICAgICAgYWRkTmFtZXMobmFtZXMsIHRoaXMuY2F0Y2gubmFtZXMpO1xuICAgICAgICBpZiAodGhpcy5maW5hbGx5KVxuICAgICAgICAgICAgYWRkTmFtZXMobmFtZXMsIHRoaXMuZmluYWxseS5uYW1lcyk7XG4gICAgICAgIHJldHVybiBuYW1lcztcbiAgICB9XG59XG5jbGFzcyBDYXRjaCBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgY29uc3RydWN0b3IoZXJyb3IpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gYGNhdGNoKCR7dGhpcy5lcnJvcn0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG59XG5DYXRjaC5raW5kID0gXCJjYXRjaFwiO1xuY2xhc3MgRmluYWxseSBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwiZmluYWxseVwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkZpbmFsbHkua2luZCA9IFwiZmluYWxseVwiO1xuY2xhc3MgQ29kZUdlbiB7XG4gICAgY29uc3RydWN0b3IoZXh0U2NvcGUsIG9wdHMgPSB7fSkge1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fYmxvY2tTdGFydHMgPSBbXTtcbiAgICAgICAgdGhpcy5fY29uc3RhbnRzID0ge307XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgX246IG9wdHMubGluZXMgPyBcIlxcblwiIDogXCJcIiB9O1xuICAgICAgICB0aGlzLl9leHRTY29wZSA9IGV4dFNjb3BlO1xuICAgICAgICB0aGlzLl9zY29wZSA9IG5ldyBzY29wZV8xLlNjb3BlKHsgcGFyZW50OiBleHRTY29wZSB9KTtcbiAgICAgICAgdGhpcy5fbm9kZXMgPSBbbmV3IFJvb3QoKV07XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5yZW5kZXIodGhpcy5vcHRzKTtcbiAgICB9XG4gICAgLy8gcmV0dXJucyB1bmlxdWUgbmFtZSBpbiB0aGUgaW50ZXJuYWwgc2NvcGVcbiAgICBuYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NvcGUubmFtZShwcmVmaXgpO1xuICAgIH1cbiAgICAvLyByZXNlcnZlcyB1bmlxdWUgbmFtZSBpbiB0aGUgZXh0ZXJuYWwgc2NvcGVcbiAgICBzY29wZU5hbWUocHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5uYW1lKHByZWZpeCk7XG4gICAgfVxuICAgIC8vIHJlc2VydmVzIHVuaXF1ZSBuYW1lIGluIHRoZSBleHRlcm5hbCBzY29wZSBhbmQgYXNzaWducyB2YWx1ZSB0byBpdFxuICAgIHNjb3BlVmFsdWUocHJlZml4T3JOYW1lLCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fZXh0U2NvcGUudmFsdWUocHJlZml4T3JOYW1lLCB2YWx1ZSk7XG4gICAgICAgIGNvbnN0IHZzID0gdGhpcy5fdmFsdWVzW25hbWUucHJlZml4XSB8fCAodGhpcy5fdmFsdWVzW25hbWUucHJlZml4XSA9IG5ldyBTZXQoKSk7XG4gICAgICAgIHZzLmFkZChuYW1lKTtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGdldFNjb3BlVmFsdWUocHJlZml4LCBrZXlPclJlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0U2NvcGUuZ2V0VmFsdWUocHJlZml4LCBrZXlPclJlZik7XG4gICAgfVxuICAgIC8vIHJldHVybiBjb2RlIHRoYXQgYXNzaWducyB2YWx1ZXMgaW4gdGhlIGV4dGVybmFsIHNjb3BlIHRvIHRoZSBuYW1lcyB0aGF0IGFyZSB1c2VkIGludGVybmFsbHlcbiAgICAvLyAoc2FtZSBuYW1lcyB0aGF0IHdlcmUgcmV0dXJuZWQgYnkgZ2VuLnNjb3BlTmFtZSBvciBnZW4uc2NvcGVWYWx1ZSlcbiAgICBzY29wZVJlZnMoc2NvcGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5zY29wZVJlZnMoc2NvcGVOYW1lLCB0aGlzLl92YWx1ZXMpO1xuICAgIH1cbiAgICBzY29wZUNvZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5zY29wZUNvZGUodGhpcy5fdmFsdWVzKTtcbiAgICB9XG4gICAgX2RlZih2YXJLaW5kLCBuYW1lT3JQcmVmaXgsIHJocywgY29uc3RhbnQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICBpZiAocmhzICE9PSB1bmRlZmluZWQgJiYgY29uc3RhbnQpXG4gICAgICAgICAgICB0aGlzLl9jb25zdGFudHNbbmFtZS5zdHJdID0gcmhzO1xuICAgICAgICB0aGlzLl9sZWFmTm9kZShuZXcgRGVmKHZhcktpbmQsIG5hbWUsIHJocykpO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgLy8gYGNvbnN0YCBkZWNsYXJhdGlvbiAoYHZhcmAgaW4gZXM1IG1vZGUpXG4gICAgY29uc3QobmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmKHNjb3BlXzEudmFyS2luZHMuY29uc3QsIG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpO1xuICAgIH1cbiAgICAvLyBgbGV0YCBkZWNsYXJhdGlvbiB3aXRoIG9wdGlvbmFsIGFzc2lnbm1lbnQgKGB2YXJgIGluIGVzNSBtb2RlKVxuICAgIGxldChuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy5sZXQsIG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpO1xuICAgIH1cbiAgICAvLyBgdmFyYCBkZWNsYXJhdGlvbiB3aXRoIG9wdGlvbmFsIGFzc2lnbm1lbnRcbiAgICB2YXIobmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmKHNjb3BlXzEudmFyS2luZHMudmFyLCBuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KTtcbiAgICB9XG4gICAgLy8gYXNzaWdubWVudCBjb2RlXG4gICAgYXNzaWduKGxocywgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IEFzc2lnbihsaHMsIHJocywgc2lkZUVmZmVjdHMpKTtcbiAgICB9XG4gICAgLy8gYCs9YCBjb2RlXG4gICAgYWRkKGxocywgcmhzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQXNzaWduT3AobGhzLCBleHBvcnRzLm9wZXJhdG9ycy5BREQsIHJocykpO1xuICAgIH1cbiAgICAvLyBhcHBlbmRzIHBhc3NlZCBTYWZlRXhwciB0byBjb2RlIG9yIGV4ZWN1dGVzIEJsb2NrXG4gICAgY29kZShjKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYyA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICBjKCk7XG4gICAgICAgIGVsc2UgaWYgKGMgIT09IGNvZGVfMS5uaWwpXG4gICAgICAgICAgICB0aGlzLl9sZWFmTm9kZShuZXcgQW55Q29kZShjKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIGNvZGUgZm9yIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgcGFzc2VkIGFyZ3VtZW50IGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzXG4gICAgb2JqZWN0KC4uLmtleVZhbHVlcykge1xuICAgICAgICBjb25zdCBjb2RlID0gW1wie1wiXTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Yga2V5VmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoY29kZS5sZW5ndGggPiAxKVxuICAgICAgICAgICAgICAgIGNvZGUucHVzaChcIixcIik7XG4gICAgICAgICAgICBjb2RlLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGlmIChrZXkgIT09IHZhbHVlIHx8IHRoaXMub3B0cy5lczUpIHtcbiAgICAgICAgICAgICAgICBjb2RlLnB1c2goXCI6XCIpO1xuICAgICAgICAgICAgICAgICgwLCBjb2RlXzEuYWRkQ29kZUFyZykoY29kZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvZGUucHVzaChcIn1cIik7XG4gICAgICAgIHJldHVybiBuZXcgY29kZV8xLl9Db2RlKGNvZGUpO1xuICAgIH1cbiAgICAvLyBgaWZgIGNsYXVzZSAob3Igc3RhdGVtZW50IGlmIGB0aGVuQm9keWAgYW5kLCBvcHRpb25hbGx5LCBgZWxzZUJvZHlgIGFyZSBwYXNzZWQpXG4gICAgaWYoY29uZGl0aW9uLCB0aGVuQm9keSwgZWxzZUJvZHkpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5ldyBJZihjb25kaXRpb24pKTtcbiAgICAgICAgaWYgKHRoZW5Cb2R5ICYmIGVsc2VCb2R5KSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUodGhlbkJvZHkpLmVsc2UoKS5jb2RlKGVsc2VCb2R5KS5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoZW5Cb2R5KSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUodGhlbkJvZHkpLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZWxzZUJvZHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29kZUdlbjogXCJlbHNlXCIgYm9keSB3aXRob3V0IFwidGhlblwiIGJvZHknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gYGVsc2UgaWZgIGNsYXVzZSAtIGludmFsaWQgd2l0aG91dCBgaWZgIG9yIGFmdGVyIGBlbHNlYCBjbGF1c2VzXG4gICAgZWxzZUlmKGNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxzZU5vZGUobmV3IElmKGNvbmRpdGlvbikpO1xuICAgIH1cbiAgICAvLyBgZWxzZWAgY2xhdXNlIC0gb25seSB2YWxpZCBhZnRlciBgaWZgIG9yIGBlbHNlIGlmYCBjbGF1c2VzXG4gICAgZWxzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vsc2VOb2RlKG5ldyBFbHNlKCkpO1xuICAgIH1cbiAgICAvLyBlbmQgYGlmYCBzdGF0ZW1lbnQgKG5lZWRlZCBpZiBnZW4uaWYgd2FzIHVzZWQgb25seSB3aXRoIGNvbmRpdGlvbilcbiAgICBlbmRJZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShJZiwgRWxzZSk7XG4gICAgfVxuICAgIF9mb3Iobm9kZSwgZm9yQm9keSkge1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobm9kZSk7XG4gICAgICAgIGlmIChmb3JCb2R5KVxuICAgICAgICAgICAgdGhpcy5jb2RlKGZvckJvZHkpLmVuZEZvcigpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gYSBnZW5lcmljIGBmb3JgIGNsYXVzZSAob3Igc3RhdGVtZW50IGlmIGBmb3JCb2R5YCBpcyBwYXNzZWQpXG4gICAgZm9yKGl0ZXJhdGlvbiwgZm9yQm9keSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JMb29wKGl0ZXJhdGlvbiksIGZvckJvZHkpO1xuICAgIH1cbiAgICAvLyBgZm9yYCBzdGF0ZW1lbnQgZm9yIGEgcmFuZ2Ugb2YgdmFsdWVzXG4gICAgZm9yUmFuZ2UobmFtZU9yUHJlZml4LCBmcm9tLCB0bywgZm9yQm9keSwgdmFyS2luZCA9IHRoaXMub3B0cy5lczUgPyBzY29wZV8xLnZhcktpbmRzLnZhciA6IHNjb3BlXzEudmFyS2luZHMubGV0KSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9zY29wZS50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9yUmFuZ2UodmFyS2luZCwgbmFtZSwgZnJvbSwgdG8pLCAoKSA9PiBmb3JCb2R5KG5hbWUpKTtcbiAgICB9XG4gICAgLy8gYGZvci1vZmAgc3RhdGVtZW50IChpbiBlczUgbW9kZSByZXBsYWNlIHdpdGggYSBub3JtYWwgZm9yIGxvb3ApXG4gICAgZm9yT2YobmFtZU9yUHJlZml4LCBpdGVyYWJsZSwgZm9yQm9keSwgdmFyS2luZCA9IHNjb3BlXzEudmFyS2luZHMuY29uc3QpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmVzNSkge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gaXRlcmFibGUgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IGl0ZXJhYmxlIDogdGhpcy52YXIoXCJfYXJyXCIsIGl0ZXJhYmxlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvclJhbmdlKFwiX2lcIiwgMCwgKDAsIGNvZGVfMS5fKSBgJHthcnJ9Lmxlbmd0aGAsIChpKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52YXIobmFtZSwgKDAsIGNvZGVfMS5fKSBgJHthcnJ9WyR7aX1dYCk7XG4gICAgICAgICAgICAgICAgZm9yQm9keShuYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvckl0ZXIoXCJvZlwiLCB2YXJLaW5kLCBuYW1lLCBpdGVyYWJsZSksICgpID0+IGZvckJvZHkobmFtZSkpO1xuICAgIH1cbiAgICAvLyBgZm9yLWluYCBzdGF0ZW1lbnQuXG4gICAgLy8gV2l0aCBvcHRpb24gYG93blByb3BlcnRpZXNgIHJlcGxhY2VkIHdpdGggYSBgZm9yLW9mYCBsb29wIGZvciBvYmplY3Qga2V5c1xuICAgIGZvckluKG5hbWVPclByZWZpeCwgb2JqLCBmb3JCb2R5LCB2YXJLaW5kID0gdGhpcy5vcHRzLmVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogc2NvcGVfMS52YXJLaW5kcy5jb25zdCkge1xuICAgICAgICBpZiAodGhpcy5vcHRzLm93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvck9mKG5hbWVPclByZWZpeCwgKDAsIGNvZGVfMS5fKSBgT2JqZWN0LmtleXMoJHtvYmp9KWAsIGZvckJvZHkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9zY29wZS50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9ySXRlcihcImluXCIsIHZhcktpbmQsIG5hbWUsIG9iaiksICgpID0+IGZvckJvZHkobmFtZSkpO1xuICAgIH1cbiAgICAvLyBlbmQgYGZvcmAgbG9vcFxuICAgIGVuZEZvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShGb3IpO1xuICAgIH1cbiAgICAvLyBgbGFiZWxgIHN0YXRlbWVudFxuICAgIGxhYmVsKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgTGFiZWwobGFiZWwpKTtcbiAgICB9XG4gICAgLy8gYGJyZWFrYCBzdGF0ZW1lbnRcbiAgICBicmVhayhsYWJlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IEJyZWFrKGxhYmVsKSk7XG4gICAgfVxuICAgIC8vIGByZXR1cm5gIHN0YXRlbWVudFxuICAgIHJldHVybih2YWx1ZSkge1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IFJldHVybigpO1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobm9kZSk7XG4gICAgICAgIHRoaXMuY29kZSh2YWx1ZSk7XG4gICAgICAgIGlmIChub2RlLm5vZGVzLmxlbmd0aCAhPT0gMSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29kZUdlbjogXCJyZXR1cm5cIiBzaG91bGQgaGF2ZSBvbmUgbm9kZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKFJldHVybik7XG4gICAgfVxuICAgIC8vIGB0cnlgIHN0YXRlbWVudFxuICAgIHRyeSh0cnlCb2R5LCBjYXRjaENvZGUsIGZpbmFsbHlDb2RlKSB7XG4gICAgICAgIGlmICghY2F0Y2hDb2RlICYmICFmaW5hbGx5Q29kZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29kZUdlbjogXCJ0cnlcIiB3aXRob3V0IFwiY2F0Y2hcIiBhbmQgXCJmaW5hbGx5XCInKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBUcnkoKTtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5vZGUpO1xuICAgICAgICB0aGlzLmNvZGUodHJ5Qm9keSk7XG4gICAgICAgIGlmIChjYXRjaENvZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5uYW1lKFwiZVwiKTtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJOb2RlID0gbm9kZS5jYXRjaCA9IG5ldyBDYXRjaChlcnJvcik7XG4gICAgICAgICAgICBjYXRjaENvZGUoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5hbGx5Q29kZSkge1xuICAgICAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBub2RlLmZpbmFsbHkgPSBuZXcgRmluYWxseSgpO1xuICAgICAgICAgICAgdGhpcy5jb2RlKGZpbmFsbHlDb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKENhdGNoLCBGaW5hbGx5KTtcbiAgICB9XG4gICAgLy8gYHRocm93YCBzdGF0ZW1lbnRcbiAgICB0aHJvdyhlcnJvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IFRocm93KGVycm9yKSk7XG4gICAgfVxuICAgIC8vIHN0YXJ0IHNlbGYtYmFsYW5jaW5nIGJsb2NrXG4gICAgYmxvY2soYm9keSwgbm9kZUNvdW50KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrU3RhcnRzLnB1c2godGhpcy5fbm9kZXMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGJvZHkpXG4gICAgICAgICAgICB0aGlzLmNvZGUoYm9keSkuZW5kQmxvY2sobm9kZUNvdW50KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGVuZCB0aGUgY3VycmVudCBzZWxmLWJhbGFuY2luZyBibG9ja1xuICAgIGVuZEJsb2NrKG5vZGVDb3VudCkge1xuICAgICAgICBjb25zdCBsZW4gPSB0aGlzLl9ibG9ja1N0YXJ0cy5wb3AoKTtcbiAgICAgICAgaWYgKGxlbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZUdlbjogbm90IGluIHNlbGYtYmFsYW5jaW5nIGJsb2NrXCIpO1xuICAgICAgICBjb25zdCB0b0Nsb3NlID0gdGhpcy5fbm9kZXMubGVuZ3RoIC0gbGVuO1xuICAgICAgICBpZiAodG9DbG9zZSA8IDAgfHwgKG5vZGVDb3VudCAhPT0gdW5kZWZpbmVkICYmIHRvQ2xvc2UgIT09IG5vZGVDb3VudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogd3JvbmcgbnVtYmVyIG9mIG5vZGVzOiAke3RvQ2xvc2V9IHZzICR7bm9kZUNvdW50fSBleHBlY3RlZGApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25vZGVzLmxlbmd0aCA9IGxlbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGBmdW5jdGlvbmAgaGVhZGluZyAob3IgZGVmaW5pdGlvbiBpZiBmdW5jQm9keSBpcyBwYXNzZWQpXG4gICAgZnVuYyhuYW1lLCBhcmdzID0gY29kZV8xLm5pbCwgYXN5bmMsIGZ1bmNCb2R5KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShuZXcgRnVuYyhuYW1lLCBhcmdzLCBhc3luYykpO1xuICAgICAgICBpZiAoZnVuY0JvZHkpXG4gICAgICAgICAgICB0aGlzLmNvZGUoZnVuY0JvZHkpLmVuZEZ1bmMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGVuZCBmdW5jdGlvbiBkZWZpbml0aW9uXG4gICAgZW5kRnVuYygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShGdW5jKTtcbiAgICB9XG4gICAgb3B0aW1pemUobiA9IDEpIHtcbiAgICAgICAgd2hpbGUgKG4tLSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3Qub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAgICAgdGhpcy5fcm9vdC5vcHRpbWl6ZU5hbWVzKHRoaXMuX3Jvb3QubmFtZXMsIHRoaXMuX2NvbnN0YW50cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2xlYWZOb2RlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5fY3Vyck5vZGUubm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIF9ibG9ja05vZGUobm9kZSkge1xuICAgICAgICB0aGlzLl9jdXJyTm9kZS5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICB0aGlzLl9ub2Rlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgICBfZW5kQmxvY2tOb2RlKE4xLCBOMikge1xuICAgICAgICBjb25zdCBuID0gdGhpcy5fY3Vyck5vZGU7XG4gICAgICAgIGlmIChuIGluc3RhbmNlb2YgTjEgfHwgKE4yICYmIG4gaW5zdGFuY2VvZiBOMikpIHtcbiAgICAgICAgICAgIHRoaXMuX25vZGVzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBub3QgaW4gYmxvY2sgXCIke04yID8gYCR7TjEua2luZH0vJHtOMi5raW5kfWAgOiBOMS5raW5kfVwiYCk7XG4gICAgfVxuICAgIF9lbHNlTm9kZShub2RlKSB7XG4gICAgICAgIGNvbnN0IG4gPSB0aGlzLl9jdXJyTm9kZTtcbiAgICAgICAgaWYgKCEobiBpbnN0YW5jZW9mIElmKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcImVsc2VcIiB3aXRob3V0IFwiaWZcIicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJOb2RlID0gbi5lbHNlID0gbm9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBfcm9vdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzWzBdO1xuICAgIH1cbiAgICBnZXQgX2N1cnJOb2RlKCkge1xuICAgICAgICBjb25zdCBucyA9IHRoaXMuX25vZGVzO1xuICAgICAgICByZXR1cm4gbnNbbnMubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIHNldCBfY3Vyck5vZGUobm9kZSkge1xuICAgICAgICBjb25zdCBucyA9IHRoaXMuX25vZGVzO1xuICAgICAgICBuc1tucy5sZW5ndGggLSAxXSA9IG5vZGU7XG4gICAgfVxufVxuZXhwb3J0cy5Db2RlR2VuID0gQ29kZUdlbjtcbmZ1bmN0aW9uIGFkZE5hbWVzKG5hbWVzLCBmcm9tKSB7XG4gICAgZm9yIChjb25zdCBuIGluIGZyb20pXG4gICAgICAgIG5hbWVzW25dID0gKG5hbWVzW25dIHx8IDApICsgKGZyb21bbl0gfHwgMCk7XG4gICAgcmV0dXJuIG5hbWVzO1xufVxuZnVuY3Rpb24gYWRkRXhwck5hbWVzKG5hbWVzLCBmcm9tKSB7XG4gICAgcmV0dXJuIGZyb20gaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGVPck5hbWUgPyBhZGROYW1lcyhuYW1lcywgZnJvbS5uYW1lcykgOiBuYW1lcztcbn1cbmZ1bmN0aW9uIG9wdGltaXplRXhwcihleHByLCBuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgaWYgKGV4cHIgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSlcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VOYW1lKGV4cHIpO1xuICAgIGlmICghY2FuT3B0aW1pemUoZXhwcikpXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIHJldHVybiBuZXcgY29kZV8xLl9Db2RlKGV4cHIuX2l0ZW1zLnJlZHVjZSgoaXRlbXMsIGMpID0+IHtcbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSlcbiAgICAgICAgICAgIGMgPSByZXBsYWNlTmFtZShjKTtcbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGUpXG4gICAgICAgICAgICBpdGVtcy5wdXNoKC4uLmMuX2l0ZW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaXRlbXMucHVzaChjKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH0sIFtdKSk7XG4gICAgZnVuY3Rpb24gcmVwbGFjZU5hbWUobikge1xuICAgICAgICBjb25zdCBjID0gY29uc3RhbnRzW24uc3RyXTtcbiAgICAgICAgaWYgKGMgPT09IHVuZGVmaW5lZCB8fCBuYW1lc1tuLnN0cl0gIT09IDEpXG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgZGVsZXRlIG5hbWVzW24uc3RyXTtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbk9wdGltaXplKGUpIHtcbiAgICAgICAgcmV0dXJuIChlIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlICYmXG4gICAgICAgICAgICBlLl9pdGVtcy5zb21lKChjKSA9PiBjIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgJiYgbmFtZXNbYy5zdHJdID09PSAxICYmIGNvbnN0YW50c1tjLnN0cl0gIT09IHVuZGVmaW5lZCkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHN1YnRyYWN0TmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICBmb3IgKGNvbnN0IG4gaW4gZnJvbSlcbiAgICAgICAgbmFtZXNbbl0gPSAobmFtZXNbbl0gfHwgMCkgLSAoZnJvbVtuXSB8fCAwKTtcbn1cbmZ1bmN0aW9uIG5vdCh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09IFwiYm9vbGVhblwiIHx8IHR5cGVvZiB4ID09IFwibnVtYmVyXCIgfHwgeCA9PT0gbnVsbCA/ICF4IDogKDAsIGNvZGVfMS5fKSBgISR7cGFyKHgpfWA7XG59XG5leHBvcnRzLm5vdCA9IG5vdDtcbmNvbnN0IGFuZENvZGUgPSBtYXBwZW5kKGV4cG9ydHMub3BlcmF0b3JzLkFORCk7XG4vLyBib29sZWFuIEFORCAoJiYpIGV4cHJlc3Npb24gd2l0aCB0aGUgcGFzc2VkIGFyZ3VtZW50c1xuZnVuY3Rpb24gYW5kKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gYXJncy5yZWR1Y2UoYW5kQ29kZSk7XG59XG5leHBvcnRzLmFuZCA9IGFuZDtcbmNvbnN0IG9yQ29kZSA9IG1hcHBlbmQoZXhwb3J0cy5vcGVyYXRvcnMuT1IpO1xuLy8gYm9vbGVhbiBPUiAofHwpIGV4cHJlc3Npb24gd2l0aCB0aGUgcGFzc2VkIGFyZ3VtZW50c1xuZnVuY3Rpb24gb3IoLi4uYXJncykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShvckNvZGUpO1xufVxuZXhwb3J0cy5vciA9IG9yO1xuZnVuY3Rpb24gbWFwcGVuZChvcCkge1xuICAgIHJldHVybiAoeCwgeSkgPT4gKHggPT09IGNvZGVfMS5uaWwgPyB5IDogeSA9PT0gY29kZV8xLm5pbCA/IHggOiAoMCwgY29kZV8xLl8pIGAke3Bhcih4KX0gJHtvcH0gJHtwYXIoeSl9YCk7XG59XG5mdW5jdGlvbiBwYXIoeCkge1xuICAgIHJldHVybiB4IGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyB4IDogKDAsIGNvZGVfMS5fKSBgKCR7eH0pYDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNoZWNrU3RyaWN0TW9kZSA9IGV4cG9ydHMuZ2V0RXJyb3JQYXRoID0gZXhwb3J0cy5UeXBlID0gZXhwb3J0cy51c2VGdW5jID0gZXhwb3J0cy5zZXRFdmFsdWF0ZWQgPSBleHBvcnRzLmV2YWx1YXRlZFByb3BzVG9OYW1lID0gZXhwb3J0cy5tZXJnZUV2YWx1YXRlZCA9IGV4cG9ydHMuZWFjaEl0ZW0gPSBleHBvcnRzLnVuZXNjYXBlSnNvblBvaW50ZXIgPSBleHBvcnRzLmVzY2FwZUpzb25Qb2ludGVyID0gZXhwb3J0cy5lc2NhcGVGcmFnbWVudCA9IGV4cG9ydHMudW5lc2NhcGVGcmFnbWVudCA9IGV4cG9ydHMuc2NoZW1hUmVmT3JWYWwgPSBleHBvcnRzLnNjaGVtYUhhc1J1bGVzQnV0UmVmID0gZXhwb3J0cy5zY2hlbWFIYXNSdWxlcyA9IGV4cG9ydHMuY2hlY2tVbmtub3duUnVsZXMgPSBleHBvcnRzLmFsd2F5c1ZhbGlkU2NoZW1hID0gZXhwb3J0cy50b0hhc2ggPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZWdlbi9jb2RlXCIpO1xuLy8gVE9ETyByZWZhY3RvciB0byB1c2UgU2V0XG5mdW5jdGlvbiB0b0hhc2goYXJyKSB7XG4gICAgY29uc3QgaGFzaCA9IHt9O1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpXG4gICAgICAgIGhhc2hbaXRlbV0gPSB0cnVlO1xuICAgIHJldHVybiBoYXNoO1xufVxuZXhwb3J0cy50b0hhc2ggPSB0b0hhc2g7XG5mdW5jdGlvbiBhbHdheXNWYWxpZFNjaGVtYShpdCwgc2NoZW1hKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgaWYgKE9iamVjdC5rZXlzKHNjaGVtYSkubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjaGVja1Vua25vd25SdWxlcyhpdCwgc2NoZW1hKTtcbiAgICByZXR1cm4gIXNjaGVtYUhhc1J1bGVzKHNjaGVtYSwgaXQuc2VsZi5SVUxFUy5hbGwpO1xufVxuZXhwb3J0cy5hbHdheXNWYWxpZFNjaGVtYSA9IGFsd2F5c1ZhbGlkU2NoZW1hO1xuZnVuY3Rpb24gY2hlY2tVbmtub3duUnVsZXMoaXQsIHNjaGVtYSA9IGl0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgaWYgKCFvcHRzLnN0cmljdFNjaGVtYSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHJ1bGVzID0gc2VsZi5SVUxFUy5rZXl3b3JkcztcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKCFydWxlc1trZXldKVxuICAgICAgICAgICAgY2hlY2tTdHJpY3RNb2RlKGl0LCBgdW5rbm93biBrZXl3b3JkOiBcIiR7a2V5fVwiYCk7XG4gICAgfVxufVxuZXhwb3J0cy5jaGVja1Vua25vd25SdWxlcyA9IGNoZWNrVW5rbm93blJ1bGVzO1xuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gIXNjaGVtYTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpXG4gICAgICAgIGlmIChydWxlc1trZXldKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5zY2hlbWFIYXNSdWxlcyA9IHNjaGVtYUhhc1J1bGVzO1xuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNCdXRSZWYoc2NoZW1hLCBSVUxFUykge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gIXNjaGVtYTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpXG4gICAgICAgIGlmIChrZXkgIT09IFwiJHJlZlwiICYmIFJVTEVTLmFsbFtrZXldKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0J1dFJlZiA9IHNjaGVtYUhhc1J1bGVzQnV0UmVmO1xuZnVuY3Rpb24gc2NoZW1hUmVmT3JWYWwoeyB0b3BTY2hlbWFSZWYsIHNjaGVtYVBhdGggfSwgc2NoZW1hLCBrZXl3b3JkLCAkZGF0YSkge1xuICAgIGlmICghJGRhdGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJudW1iZXJcIiB8fCB0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYX1gO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoa2V5d29yZCl9YDtcbn1cbmV4cG9ydHMuc2NoZW1hUmVmT3JWYWwgPSBzY2hlbWFSZWZPclZhbDtcbmZ1bmN0aW9uIHVuZXNjYXBlRnJhZ21lbnQoc3RyKSB7XG4gICAgcmV0dXJuIHVuZXNjYXBlSnNvblBvaW50ZXIoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpO1xufVxuZXhwb3J0cy51bmVzY2FwZUZyYWdtZW50ID0gdW5lc2NhcGVGcmFnbWVudDtcbmZ1bmN0aW9uIGVzY2FwZUZyYWdtZW50KHN0cikge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoZXNjYXBlSnNvblBvaW50ZXIoc3RyKSk7XG59XG5leHBvcnRzLmVzY2FwZUZyYWdtZW50ID0gZXNjYXBlRnJhZ21lbnQ7XG5mdW5jdGlvbiBlc2NhcGVKc29uUG9pbnRlcihzdHIpIHtcbiAgICBpZiAodHlwZW9mIHN0ciA9PSBcIm51bWJlclwiKVxuICAgICAgICByZXR1cm4gYCR7c3RyfWA7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+L2csIFwifjBcIikucmVwbGFjZSgvXFwvL2csIFwifjFcIik7XG59XG5leHBvcnRzLmVzY2FwZUpzb25Qb2ludGVyID0gZXNjYXBlSnNvblBvaW50ZXI7XG5mdW5jdGlvbiB1bmVzY2FwZUpzb25Qb2ludGVyKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvfjEvZywgXCIvXCIpLnJlcGxhY2UoL34wL2csIFwiflwiKTtcbn1cbmV4cG9ydHMudW5lc2NhcGVKc29uUG9pbnRlciA9IHVuZXNjYXBlSnNvblBvaW50ZXI7XG5mdW5jdGlvbiBlYWNoSXRlbSh4cywgZikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHhzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHggb2YgeHMpXG4gICAgICAgICAgICBmKHgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZih4cyk7XG4gICAgfVxufVxuZXhwb3J0cy5lYWNoSXRlbSA9IGVhY2hJdGVtO1xuZnVuY3Rpb24gbWFrZU1lcmdlRXZhbHVhdGVkKHsgbWVyZ2VOYW1lcywgbWVyZ2VUb05hbWUsIG1lcmdlVmFsdWVzLCByZXN1bHRUb05hbWUsIH0pIHtcbiAgICByZXR1cm4gKGdlbiwgZnJvbSwgdG8sIHRvTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSB0byA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGZyb21cbiAgICAgICAgICAgIDogdG8gaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZVxuICAgICAgICAgICAgICAgID8gKGZyb20gaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IG1lcmdlTmFtZXMoZ2VuLCBmcm9tLCB0bykgOiBtZXJnZVRvTmFtZShnZW4sIGZyb20sIHRvKSwgdG8pXG4gICAgICAgICAgICAgICAgOiBmcm9tIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWVcbiAgICAgICAgICAgICAgICAgICAgPyAobWVyZ2VUb05hbWUoZ2VuLCB0bywgZnJvbSksIGZyb20pXG4gICAgICAgICAgICAgICAgICAgIDogbWVyZ2VWYWx1ZXMoZnJvbSwgdG8pO1xuICAgICAgICByZXR1cm4gdG9OYW1lID09PSBjb2RlZ2VuXzEuTmFtZSAmJiAhKHJlcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSA/IHJlc3VsdFRvTmFtZShnZW4sIHJlcykgOiByZXM7XG4gICAgfTtcbn1cbmV4cG9ydHMubWVyZ2VFdmFsdWF0ZWQgPSB7XG4gICAgcHJvcHM6IG1ha2VNZXJnZUV2YWx1YXRlZCh7XG4gICAgICAgIG1lcmdlTmFtZXM6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWUgJiYgJHtmcm9tfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4ge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZnJvbX0gPT09IHRydWVgLCAoKSA9PiBnZW4uYXNzaWduKHRvLCB0cnVlKSwgKCkgPT4gZ2VuLmFzc2lnbih0bywgKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gfHwge31gKS5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYE9iamVjdC5hc3NpZ24oJHt0b30sICR7ZnJvbX0pYCkpO1xuICAgICAgICB9KSxcbiAgICAgICAgbWVyZ2VUb05hbWU6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWVgLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZnJvbSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odG8sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih0bywgKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gfHwge31gKTtcbiAgICAgICAgICAgICAgICBzZXRFdmFsdWF0ZWQoZ2VuLCB0bywgZnJvbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBtZXJnZVZhbHVlczogKGZyb20sIHRvKSA9PiAoZnJvbSA9PT0gdHJ1ZSA/IHRydWUgOiB7IC4uLmZyb20sIC4uLnRvIH0pLFxuICAgICAgICByZXN1bHRUb05hbWU6IGV2YWx1YXRlZFByb3BzVG9OYW1lLFxuICAgIH0pLFxuICAgIGl0ZW1zOiBtYWtlTWVyZ2VFdmFsdWF0ZWQoe1xuICAgICAgICBtZXJnZU5hbWVzOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlICYmICR7ZnJvbX0gIT09IHVuZGVmaW5lZGAsICgpID0+IGdlbi5hc3NpZ24odG8sICgwLCBjb2RlZ2VuXzEuXykgYCR7ZnJvbX0gPT09IHRydWUgPyB0cnVlIDogJHt0b30gPiAke2Zyb219ID8gJHt0b30gOiAke2Zyb219YCkpLFxuICAgICAgICBtZXJnZVRvTmFtZTogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZWAsICgpID0+IGdlbi5hc3NpZ24odG8sIGZyb20gPT09IHRydWUgPyB0cnVlIDogKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gPiAke2Zyb219ID8gJHt0b30gOiAke2Zyb219YCkpLFxuICAgICAgICBtZXJnZVZhbHVlczogKGZyb20sIHRvKSA9PiAoZnJvbSA9PT0gdHJ1ZSA/IHRydWUgOiBNYXRoLm1heChmcm9tLCB0bykpLFxuICAgICAgICByZXN1bHRUb05hbWU6IChnZW4sIGl0ZW1zKSA9PiBnZW4udmFyKFwiaXRlbXNcIiwgaXRlbXMpLFxuICAgIH0pLFxufTtcbmZ1bmN0aW9uIGV2YWx1YXRlZFByb3BzVG9OYW1lKGdlbiwgcHMpIHtcbiAgICBpZiAocHMgPT09IHRydWUpXG4gICAgICAgIHJldHVybiBnZW4udmFyKFwicHJvcHNcIiwgdHJ1ZSk7XG4gICAgY29uc3QgcHJvcHMgPSBnZW4udmFyKFwicHJvcHNcIiwgKDAsIGNvZGVnZW5fMS5fKSBge31gKTtcbiAgICBpZiAocHMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgc2V0RXZhbHVhdGVkKGdlbiwgcHJvcHMsIHBzKTtcbiAgICByZXR1cm4gcHJvcHM7XG59XG5leHBvcnRzLmV2YWx1YXRlZFByb3BzVG9OYW1lID0gZXZhbHVhdGVkUHJvcHNUb05hbWU7XG5mdW5jdGlvbiBzZXRFdmFsdWF0ZWQoZ2VuLCBwcm9wcywgcHMpIHtcbiAgICBPYmplY3Qua2V5cyhwcykuZm9yRWFjaCgocCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3Byb3BzfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocCl9YCwgdHJ1ZSkpO1xufVxuZXhwb3J0cy5zZXRFdmFsdWF0ZWQgPSBzZXRFdmFsdWF0ZWQ7XG5jb25zdCBzbmlwcGV0cyA9IHt9O1xuZnVuY3Rpb24gdXNlRnVuYyhnZW4sIGYpIHtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJmdW5jXCIsIHtcbiAgICAgICAgcmVmOiBmLFxuICAgICAgICBjb2RlOiBzbmlwcGV0c1tmLmNvZGVdIHx8IChzbmlwcGV0c1tmLmNvZGVdID0gbmV3IGNvZGVfMS5fQ29kZShmLmNvZGUpKSxcbiAgICB9KTtcbn1cbmV4cG9ydHMudXNlRnVuYyA9IHVzZUZ1bmM7XG52YXIgVHlwZTtcbihmdW5jdGlvbiAoVHlwZSkge1xuICAgIFR5cGVbVHlwZVtcIk51bVwiXSA9IDBdID0gXCJOdW1cIjtcbiAgICBUeXBlW1R5cGVbXCJTdHJcIl0gPSAxXSA9IFwiU3RyXCI7XG59KShUeXBlIHx8IChleHBvcnRzLlR5cGUgPSBUeXBlID0ge30pKTtcbmZ1bmN0aW9uIGdldEVycm9yUGF0aChkYXRhUHJvcCwgZGF0YVByb3BUeXBlLCBqc1Byb3BlcnR5U3ludGF4KSB7XG4gICAgLy8gbGV0IHBhdGhcbiAgICBpZiAoZGF0YVByb3AgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkge1xuICAgICAgICBjb25zdCBpc051bWJlciA9IGRhdGFQcm9wVHlwZSA9PT0gVHlwZS5OdW07XG4gICAgICAgIHJldHVybiBqc1Byb3BlcnR5U3ludGF4XG4gICAgICAgICAgICA/IGlzTnVtYmVyXG4gICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGBcIltcIiArICR7ZGF0YVByb3B9ICsgXCJdXCJgXG4gICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGBcIlsnXCIgKyAke2RhdGFQcm9wfSArIFwiJ11cImBcbiAgICAgICAgICAgIDogaXNOdW1iZXJcbiAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYFwiL1wiICsgJHtkYXRhUHJvcH1gXG4gICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGBcIi9cIiArICR7ZGF0YVByb3B9LnJlcGxhY2UoL34vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXFxcLy9nLCBcIn4xXCIpYDsgLy8gVE9ETyBtYXliZSB1c2UgZ2xvYmFsIGVzY2FwZVBvaW50ZXJcbiAgICB9XG4gICAgcmV0dXJuIGpzUHJvcGVydHlTeW50YXggPyAoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShkYXRhUHJvcCkudG9TdHJpbmcoKSA6IFwiL1wiICsgZXNjYXBlSnNvblBvaW50ZXIoZGF0YVByb3ApO1xufVxuZXhwb3J0cy5nZXRFcnJvclBhdGggPSBnZXRFcnJvclBhdGg7XG5mdW5jdGlvbiBjaGVja1N0cmljdE1vZGUoaXQsIG1zZywgbW9kZSA9IGl0Lm9wdHMuc3RyaWN0U2NoZW1hKSB7XG4gICAgaWYgKCFtb2RlKVxuICAgICAgICByZXR1cm47XG4gICAgbXNnID0gYHN0cmljdCBtb2RlOiAke21zZ31gO1xuICAgIGlmIChtb2RlID09PSB0cnVlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICBpdC5zZWxmLmxvZ2dlci53YXJuKG1zZyk7XG59XG5leHBvcnRzLmNoZWNrU3RyaWN0TW9kZSA9IGNoZWNrU3RyaWN0TW9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lcyA9IHtcbiAgICAvLyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgIGRhdGE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImRhdGFcIiksIC8vIGRhdGEgcGFzc2VkIHRvIHZhbGlkYXRpb24gZnVuY3Rpb25cbiAgICAvLyBhcmdzIHBhc3NlZCBmcm9tIHJlZmVyZW5jaW5nIHNjaGVtYVxuICAgIHZhbEN4dDogbmV3IGNvZGVnZW5fMS5OYW1lKFwidmFsQ3h0XCIpLCAvLyB2YWxpZGF0aW9uL2RhdGEgY29udGV4dCAtIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseSwgaXQgaXMgZGVzdHJ1Y3R1cmVkIHRvIHRoZSBuYW1lcyBiZWxvd1xuICAgIGluc3RhbmNlUGF0aDogbmV3IGNvZGVnZW5fMS5OYW1lKFwiaW5zdGFuY2VQYXRoXCIpLFxuICAgIHBhcmVudERhdGE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudERhdGFcIiksXG4gICAgcGFyZW50RGF0YVByb3BlcnR5OiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJlbnREYXRhUHJvcGVydHlcIiksXG4gICAgcm9vdERhdGE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInJvb3REYXRhXCIpLCAvLyByb290IGRhdGEgLSBzYW1lIGFzIHRoZSBkYXRhIHBhc3NlZCB0byB0aGUgZmlyc3QvdG9wIHZhbGlkYXRpb24gZnVuY3Rpb25cbiAgICBkeW5hbWljQW5jaG9yczogbmV3IGNvZGVnZW5fMS5OYW1lKFwiZHluYW1pY0FuY2hvcnNcIiksIC8vIHVzZWQgdG8gc3VwcG9ydCByZWN1cnNpdmVSZWYgYW5kIGR5bmFtaWNSZWZcbiAgICAvLyBmdW5jdGlvbiBzY29wZWQgdmFyaWFibGVzXG4gICAgdkVycm9yczogbmV3IGNvZGVnZW5fMS5OYW1lKFwidkVycm9yc1wiKSwgLy8gbnVsbCBvciBhcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yc1xuICAgIGVycm9yczogbmV3IGNvZGVnZW5fMS5OYW1lKFwiZXJyb3JzXCIpLCAvLyBjb3VudGVyIG9mIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgdGhpczogbmV3IGNvZGVnZW5fMS5OYW1lKFwidGhpc1wiKSxcbiAgICAvLyBcImdsb2JhbHNcIlxuICAgIHNlbGY6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNlbGZcIiksXG4gICAgc2NvcGU6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjb3BlXCIpLFxuICAgIC8vIEpURCBzZXJpYWxpemUvcGFyc2UgbmFtZSBmb3IgSlNPTiBzdHJpbmcgYW5kIHBvc2l0aW9uXG4gICAganNvbjogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvblwiKSxcbiAgICBqc29uUG9zOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uUG9zXCIpLFxuICAgIGpzb25MZW46IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25MZW5cIiksXG4gICAganNvblBhcnQ6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25QYXJ0XCIpLFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IG5hbWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmFtZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXh0ZW5kRXJyb3JzID0gZXhwb3J0cy5yZXNldEVycm9yc0NvdW50ID0gZXhwb3J0cy5yZXBvcnRFeHRyYUVycm9yID0gZXhwb3J0cy5yZXBvcnRFcnJvciA9IGV4cG9ydHMua2V5d29yZCREYXRhRXJyb3IgPSBleHBvcnRzLmtleXdvcmRFcnJvciA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuL25hbWVzXCIpO1xuZXhwb3J0cy5rZXl3b3JkRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgcGFzcyBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIHZhbGlkYXRpb25gLFxufTtcbmV4cG9ydHMua2V5d29yZCREYXRhRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hVHlwZSB9KSA9PiBzY2hlbWFUeXBlXG4gICAgICAgID8gKDAsIGNvZGVnZW5fMS5zdHIpIGBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIG11c3QgYmUgJHtzY2hlbWFUeXBlfSAoJGRhdGEpYFxuICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuc3RyKSBgXCIke2tleXdvcmR9XCIga2V5d29yZCBpcyBpbnZhbGlkICgkZGF0YSlgLFxufTtcbmZ1bmN0aW9uIHJlcG9ydEVycm9yKGN4dCwgZXJyb3IgPSBleHBvcnRzLmtleXdvcmRFcnJvciwgZXJyb3JQYXRocywgb3ZlcnJpZGVBbGxFcnJvcnMpIHtcbiAgICBjb25zdCB7IGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBnZW4sIGNvbXBvc2l0ZVJ1bGUsIGFsbEVycm9ycyB9ID0gaXQ7XG4gICAgY29uc3QgZXJyT2JqID0gZXJyb3JPYmplY3RDb2RlKGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpO1xuICAgIGlmIChvdmVycmlkZUFsbEVycm9ycyAhPT0gbnVsbCAmJiBvdmVycmlkZUFsbEVycm9ycyAhPT0gdm9pZCAwID8gb3ZlcnJpZGVBbGxFcnJvcnMgOiAoY29tcG9zaXRlUnVsZSB8fCBhbGxFcnJvcnMpKSB7XG4gICAgICAgIGFkZEVycm9yKGdlbiwgZXJyT2JqKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybkVycm9ycyhpdCwgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZXJyT2JqfV1gKTtcbiAgICB9XG59XG5leHBvcnRzLnJlcG9ydEVycm9yID0gcmVwb3J0RXJyb3I7XG5mdW5jdGlvbiByZXBvcnRFeHRyYUVycm9yKGN4dCwgZXJyb3IgPSBleHBvcnRzLmtleXdvcmRFcnJvciwgZXJyb3JQYXRocykge1xuICAgIGNvbnN0IHsgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgYWxsRXJyb3JzIH0gPSBpdDtcbiAgICBjb25zdCBlcnJPYmogPSBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocyk7XG4gICAgYWRkRXJyb3IoZ2VuLCBlcnJPYmopO1xuICAgIGlmICghKGNvbXBvc2l0ZVJ1bGUgfHwgYWxsRXJyb3JzKSkge1xuICAgICAgICByZXR1cm5FcnJvcnMoaXQsIG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzKTtcbiAgICB9XG59XG5leHBvcnRzLnJlcG9ydEV4dHJhRXJyb3IgPSByZXBvcnRFeHRyYUVycm9yO1xuZnVuY3Rpb24gcmVzZXRFcnJvcnNDb3VudChnZW4sIGVycnNDb3VudCkge1xuICAgIGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LmVycm9ycywgZXJyc0NvdW50KTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30gIT09IG51bGxgLCAoKSA9PiBnZW4uaWYoZXJyc0NvdW50LCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGAsIGVycnNDb3VudCksICgpID0+IGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsIG51bGwpKSk7XG59XG5leHBvcnRzLnJlc2V0RXJyb3JzQ291bnQgPSByZXNldEVycm9yc0NvdW50O1xuZnVuY3Rpb24gZXh0ZW5kRXJyb3JzKHsgZ2VuLCBrZXl3b3JkLCBzY2hlbWFWYWx1ZSwgZGF0YSwgZXJyc0NvdW50LCBpdCwgfSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlcnJzQ291bnQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgIGNvbnN0IGVyciA9IGdlbi5uYW1lKFwiZXJyXCIpO1xuICAgIGdlbi5mb3JSYW5nZShcImlcIiwgZXJyc0NvdW50LCBuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAoaSkgPT4ge1xuICAgICAgICBnZW4uY29uc3QoZXJyLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfVske2l9XWApO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9Lmluc3RhbmNlUGF0aCA9PT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uaW5zdGFuY2VQYXRoYCwgKDAsIGNvZGVnZW5fMS5zdHJDb25jYXQpKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsIGl0LmVycm9yUGF0aCkpKTtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uc2NoZW1hUGF0aGAsICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YCk7XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9LnNjaGVtYWAsIHNjaGVtYVZhbHVlKTtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9LmRhdGFgLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5leHRlbmRFcnJvcnMgPSBleHRlbmRFcnJvcnM7XG5mdW5jdGlvbiBhZGRFcnJvcihnZW4sIGVyck9iaikge1xuICAgIGNvbnN0IGVyciA9IGdlbi5jb25zdChcImVyclwiLCBlcnJPYmopO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbGAsICgpID0+IGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYFske2Vycn1dYCksICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LnB1c2goJHtlcnJ9KWApO1xuICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc30rK2ApO1xufVxuZnVuY3Rpb24gcmV0dXJuRXJyb3JzKGl0LCBlcnJzKSB7XG4gICAgY29uc3QgeyBnZW4sIHZhbGlkYXRlTmFtZSwgc2NoZW1hRW52IH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hRW52LiRhc3luYykge1xuICAgICAgICBnZW4udGhyb3coKDAsIGNvZGVnZW5fMS5fKSBgbmV3ICR7aXQuVmFsaWRhdGlvbkVycm9yfSgke2VycnN9KWApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXJyb3JzYCwgZXJycyk7XG4gICAgICAgIGdlbi5yZXR1cm4oZmFsc2UpO1xuICAgIH1cbn1cbmNvbnN0IEUgPSB7XG4gICAga2V5d29yZDogbmV3IGNvZGVnZW5fMS5OYW1lKFwia2V5d29yZFwiKSxcbiAgICBzY2hlbWFQYXRoOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzY2hlbWFQYXRoXCIpLCAvLyBhbHNvIHVzZWQgaW4gSlREIGVycm9yc1xuICAgIHBhcmFtczogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyYW1zXCIpLFxuICAgIHByb3BlcnR5TmFtZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicHJvcGVydHlOYW1lXCIpLFxuICAgIG1lc3NhZ2U6IG5ldyBjb2RlZ2VuXzEuTmFtZShcIm1lc3NhZ2VcIiksXG4gICAgc2NoZW1hOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzY2hlbWFcIiksXG4gICAgcGFyZW50U2NoZW1hOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJlbnRTY2hlbWFcIiksXG59O1xuZnVuY3Rpb24gZXJyb3JPYmplY3RDb2RlKGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpIHtcbiAgICBjb25zdCB7IGNyZWF0ZUVycm9ycyB9ID0gY3h0Lml0O1xuICAgIGlmIChjcmVhdGVFcnJvcnMgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBge31gO1xuICAgIHJldHVybiBlcnJvck9iamVjdChjeHQsIGVycm9yLCBlcnJvclBhdGhzKTtcbn1cbmZ1bmN0aW9uIGVycm9yT2JqZWN0KGN4dCwgZXJyb3IsIGVycm9yUGF0aHMgPSB7fSkge1xuICAgIGNvbnN0IHsgZ2VuLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IGtleVZhbHVlcyA9IFtcbiAgICAgICAgZXJyb3JJbnN0YW5jZVBhdGgoaXQsIGVycm9yUGF0aHMpLFxuICAgICAgICBlcnJvclNjaGVtYVBhdGgoY3h0LCBlcnJvclBhdGhzKSxcbiAgICBdO1xuICAgIGV4dHJhRXJyb3JQcm9wcyhjeHQsIGVycm9yLCBrZXlWYWx1ZXMpO1xuICAgIHJldHVybiBnZW4ub2JqZWN0KC4uLmtleVZhbHVlcyk7XG59XG5mdW5jdGlvbiBlcnJvckluc3RhbmNlUGF0aCh7IGVycm9yUGF0aCB9LCB7IGluc3RhbmNlUGF0aCB9KSB7XG4gICAgY29uc3QgaW5zdFBhdGggPSBpbnN0YW5jZVBhdGhcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYCR7ZXJyb3JQYXRofSR7KDAsIHV0aWxfMS5nZXRFcnJvclBhdGgpKGluc3RhbmNlUGF0aCwgdXRpbF8xLlR5cGUuU3RyKX1gXG4gICAgICAgIDogZXJyb3JQYXRoO1xuICAgIHJldHVybiBbbmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5zdHJDb25jYXQpKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsIGluc3RQYXRoKV07XG59XG5mdW5jdGlvbiBlcnJvclNjaGVtYVBhdGgoeyBrZXl3b3JkLCBpdDogeyBlcnJTY2hlbWFQYXRoIH0gfSwgeyBzY2hlbWFQYXRoLCBwYXJlbnRTY2hlbWEgfSkge1xuICAgIGxldCBzY2hQYXRoID0gcGFyZW50U2NoZW1hID8gZXJyU2NoZW1hUGF0aCA6ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YDtcbiAgICBpZiAoc2NoZW1hUGF0aCkge1xuICAgICAgICBzY2hQYXRoID0gKDAsIGNvZGVnZW5fMS5zdHIpIGAke3NjaFBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoc2NoZW1hUGF0aCwgdXRpbF8xLlR5cGUuU3RyKX1gO1xuICAgIH1cbiAgICByZXR1cm4gW0Uuc2NoZW1hUGF0aCwgc2NoUGF0aF07XG59XG5mdW5jdGlvbiBleHRyYUVycm9yUHJvcHMoY3h0LCB7IHBhcmFtcywgbWVzc2FnZSB9LCBrZXlWYWx1ZXMpIHtcbiAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYVZhbHVlLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgb3B0cywgcHJvcGVydHlOYW1lLCB0b3BTY2hlbWFSZWYsIHNjaGVtYVBhdGggfSA9IGl0O1xuICAgIGtleVZhbHVlcy5wdXNoKFtFLmtleXdvcmQsIGtleXdvcmRdLCBbRS5wYXJhbXMsIHR5cGVvZiBwYXJhbXMgPT0gXCJmdW5jdGlvblwiID8gcGFyYW1zKGN4dCkgOiBwYXJhbXMgfHwgKDAsIGNvZGVnZW5fMS5fKSBge31gXSk7XG4gICAgaWYgKG9wdHMubWVzc2FnZXMpIHtcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0UubWVzc2FnZSwgdHlwZW9mIG1lc3NhZ2UgPT0gXCJmdW5jdGlvblwiID8gbWVzc2FnZShjeHQpIDogbWVzc2FnZV0pO1xuICAgIH1cbiAgICBpZiAob3B0cy52ZXJib3NlKSB7XG4gICAgICAgIGtleVZhbHVlcy5wdXNoKFtFLnNjaGVtYSwgc2NoZW1hVmFsdWVdLCBbRS5wYXJlbnRTY2hlbWEsICgwLCBjb2RlZ2VuXzEuXykgYCR7dG9wU2NoZW1hUmVmfSR7c2NoZW1hUGF0aH1gXSwgW25hbWVzXzEuZGVmYXVsdC5kYXRhLCBkYXRhXSk7XG4gICAgfVxuICAgIGlmIChwcm9wZXJ0eU5hbWUpXG4gICAgICAgIGtleVZhbHVlcy5wdXNoKFtFLnByb3BlcnR5TmFtZSwgcHJvcGVydHlOYW1lXSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYm9vbE9yRW1wdHlTY2hlbWEgPSBleHBvcnRzLnRvcEJvb2xPckVtcHR5U2NoZW1hID0gdm9pZCAwO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgYm9vbEVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwiYm9vbGVhbiBzY2hlbWEgaXMgZmFsc2VcIixcbn07XG5mdW5jdGlvbiB0b3BCb29sT3JFbXB0eVNjaGVtYShpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHZhbGlkYXRlTmFtZSB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZmFsc2VTY2hlbWFFcnJvcihpdCwgZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSkge1xuICAgICAgICBnZW4ucmV0dXJuKG5hbWVzXzEuZGVmYXVsdC5kYXRhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmVycm9yc2AsIG51bGwpO1xuICAgICAgICBnZW4ucmV0dXJuKHRydWUpO1xuICAgIH1cbn1cbmV4cG9ydHMudG9wQm9vbE9yRW1wdHlTY2hlbWEgPSB0b3BCb29sT3JFbXB0eVNjaGVtYTtcbmZ1bmN0aW9uIGJvb2xPckVtcHR5U2NoZW1hKGl0LCB2YWxpZCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEgfSA9IGl0O1xuICAgIGlmIChzY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgIGdlbi52YXIodmFsaWQsIGZhbHNlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgZmFsc2VTY2hlbWFFcnJvcihpdCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICB9XG59XG5leHBvcnRzLmJvb2xPckVtcHR5U2NoZW1hID0gYm9vbE9yRW1wdHlTY2hlbWE7XG5mdW5jdGlvbiBmYWxzZVNjaGVtYUVycm9yKGl0LCBvdmVycmlkZUFsbEVycm9ycykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhIH0gPSBpdDtcbiAgICAvLyBUT0RPIG1heWJlIHNvbWUgb3RoZXIgaW50ZXJmYWNlIHNob3VsZCBiZSB1c2VkIGZvciBub24ta2V5d29yZCB2YWxpZGF0aW9uIGVycm9ycy4uLlxuICAgIGNvbnN0IGN4dCA9IHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBrZXl3b3JkOiBcImZhbHNlIHNjaGVtYVwiLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzY2hlbWE6IGZhbHNlLFxuICAgICAgICBzY2hlbWFDb2RlOiBmYWxzZSxcbiAgICAgICAgc2NoZW1hVmFsdWU6IGZhbHNlLFxuICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICBpdCxcbiAgICB9O1xuICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikoY3h0LCBib29sRXJyb3IsIHVuZGVmaW5lZCwgb3ZlcnJpZGVBbGxFcnJvcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vbFNjaGVtYS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSdWxlcyA9IGV4cG9ydHMuaXNKU09OVHlwZSA9IHZvaWQgMDtcbmNvbnN0IF9qc29uVHlwZXMgPSBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJpbnRlZ2VyXCIsIFwiYm9vbGVhblwiLCBcIm51bGxcIiwgXCJvYmplY3RcIiwgXCJhcnJheVwiXTtcbmNvbnN0IGpzb25UeXBlcyA9IG5ldyBTZXQoX2pzb25UeXBlcyk7XG5mdW5jdGlvbiBpc0pTT05UeXBlKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT0gXCJzdHJpbmdcIiAmJiBqc29uVHlwZXMuaGFzKHgpO1xufVxuZXhwb3J0cy5pc0pTT05UeXBlID0gaXNKU09OVHlwZTtcbmZ1bmN0aW9uIGdldFJ1bGVzKCkge1xuICAgIGNvbnN0IGdyb3VwcyA9IHtcbiAgICAgICAgbnVtYmVyOiB7IHR5cGU6IFwibnVtYmVyXCIsIHJ1bGVzOiBbXSB9LFxuICAgICAgICBzdHJpbmc6IHsgdHlwZTogXCJzdHJpbmdcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIGFycmF5OiB7IHR5cGU6IFwiYXJyYXlcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIG9iamVjdDogeyB0eXBlOiBcIm9iamVjdFwiLCBydWxlczogW10gfSxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGVzOiB7IC4uLmdyb3VwcywgaW50ZWdlcjogdHJ1ZSwgYm9vbGVhbjogdHJ1ZSwgbnVsbDogdHJ1ZSB9LFxuICAgICAgICBydWxlczogW3sgcnVsZXM6IFtdIH0sIGdyb3Vwcy5udW1iZXIsIGdyb3Vwcy5zdHJpbmcsIGdyb3Vwcy5hcnJheSwgZ3JvdXBzLm9iamVjdF0sXG4gICAgICAgIHBvc3Q6IHsgcnVsZXM6IFtdIH0sXG4gICAgICAgIGFsbDoge30sXG4gICAgICAgIGtleXdvcmRzOiB7fSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRSdWxlcyA9IGdldFJ1bGVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnVsZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2hvdWxkVXNlUnVsZSA9IGV4cG9ydHMuc2hvdWxkVXNlR3JvdXAgPSBleHBvcnRzLnNjaGVtYUhhc1J1bGVzRm9yVHlwZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzRm9yVHlwZSh7IHNjaGVtYSwgc2VsZiB9LCB0eXBlKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBzZWxmLlJVTEVTLnR5cGVzW3R5cGVdO1xuICAgIHJldHVybiBncm91cCAmJiBncm91cCAhPT0gdHJ1ZSAmJiBzaG91bGRVc2VHcm91cChzY2hlbWEsIGdyb3VwKTtcbn1cbmV4cG9ydHMuc2NoZW1hSGFzUnVsZXNGb3JUeXBlID0gc2NoZW1hSGFzUnVsZXNGb3JUeXBlO1xuZnVuY3Rpb24gc2hvdWxkVXNlR3JvdXAoc2NoZW1hLCBncm91cCkge1xuICAgIHJldHVybiBncm91cC5ydWxlcy5zb21lKChydWxlKSA9PiBzaG91bGRVc2VSdWxlKHNjaGVtYSwgcnVsZSkpO1xufVxuZXhwb3J0cy5zaG91bGRVc2VHcm91cCA9IHNob3VsZFVzZUdyb3VwO1xuZnVuY3Rpb24gc2hvdWxkVXNlUnVsZShzY2hlbWEsIHJ1bGUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChzY2hlbWFbcnVsZS5rZXl3b3JkXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICgoX2EgPSBydWxlLmRlZmluaXRpb24uaW1wbGVtZW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNvbWUoKGt3ZCkgPT4gc2NoZW1hW2t3ZF0gIT09IHVuZGVmaW5lZCkpKTtcbn1cbmV4cG9ydHMuc2hvdWxkVXNlUnVsZSA9IHNob3VsZFVzZVJ1bGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHBsaWNhYmlsaXR5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlcG9ydFR5cGVFcnJvciA9IGV4cG9ydHMuY2hlY2tEYXRhVHlwZXMgPSBleHBvcnRzLmNoZWNrRGF0YVR5cGUgPSBleHBvcnRzLmNvZXJjZUFuZENoZWNrRGF0YVR5cGUgPSBleHBvcnRzLmdldEpTT05UeXBlcyA9IGV4cG9ydHMuZ2V0U2NoZW1hVHlwZXMgPSBleHBvcnRzLkRhdGFUeXBlID0gdm9pZCAwO1xuY29uc3QgcnVsZXNfMSA9IHJlcXVpcmUoXCIuLi9ydWxlc1wiKTtcbmNvbnN0IGFwcGxpY2FiaWxpdHlfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2FiaWxpdHlcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xudmFyIERhdGFUeXBlO1xuKGZ1bmN0aW9uIChEYXRhVHlwZSkge1xuICAgIERhdGFUeXBlW0RhdGFUeXBlW1wiQ29ycmVjdFwiXSA9IDBdID0gXCJDb3JyZWN0XCI7XG4gICAgRGF0YVR5cGVbRGF0YVR5cGVbXCJXcm9uZ1wiXSA9IDFdID0gXCJXcm9uZ1wiO1xufSkoRGF0YVR5cGUgfHwgKGV4cG9ydHMuRGF0YVR5cGUgPSBEYXRhVHlwZSA9IHt9KSk7XG5mdW5jdGlvbiBnZXRTY2hlbWFUeXBlcyhzY2hlbWEpIHtcbiAgICBjb25zdCB0eXBlcyA9IGdldEpTT05UeXBlcyhzY2hlbWEudHlwZSk7XG4gICAgY29uc3QgaGFzTnVsbCA9IHR5cGVzLmluY2x1ZGVzKFwibnVsbFwiKTtcbiAgICBpZiAoaGFzTnVsbCkge1xuICAgICAgICBpZiAoc2NoZW1hLm51bGxhYmxlID09PSBmYWxzZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInR5cGU6IG51bGwgY29udHJhZGljdHMgbnVsbGFibGU6IGZhbHNlXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKCF0eXBlcy5sZW5ndGggJiYgc2NoZW1hLm51bGxhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJudWxsYWJsZVwiIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgXCJ0eXBlXCInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NoZW1hLm51bGxhYmxlID09PSB0cnVlKVxuICAgICAgICAgICAgdHlwZXMucHVzaChcIm51bGxcIik7XG4gICAgfVxuICAgIHJldHVybiB0eXBlcztcbn1cbmV4cG9ydHMuZ2V0U2NoZW1hVHlwZXMgPSBnZXRTY2hlbWFUeXBlcztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkdW5kYW50LXR5cGUtY29uc3RpdHVlbnRzXG5mdW5jdGlvbiBnZXRKU09OVHlwZXModHMpIHtcbiAgICBjb25zdCB0eXBlcyA9IEFycmF5LmlzQXJyYXkodHMpID8gdHMgOiB0cyA/IFt0c10gOiBbXTtcbiAgICBpZiAodHlwZXMuZXZlcnkocnVsZXNfMS5pc0pTT05UeXBlKSlcbiAgICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIHRocm93IG5ldyBFcnJvcihcInR5cGUgbXVzdCBiZSBKU09OVHlwZSBvciBKU09OVHlwZVtdOiBcIiArIHR5cGVzLmpvaW4oXCIsXCIpKTtcbn1cbmV4cG9ydHMuZ2V0SlNPTlR5cGVzID0gZ2V0SlNPTlR5cGVzO1xuZnVuY3Rpb24gY29lcmNlQW5kQ2hlY2tEYXRhVHlwZShpdCwgdHlwZXMpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgb3B0cyB9ID0gaXQ7XG4gICAgY29uc3QgY29lcmNlVG8gPSBjb2VyY2VUb1R5cGVzKHR5cGVzLCBvcHRzLmNvZXJjZVR5cGVzKTtcbiAgICBjb25zdCBjaGVja1R5cGVzID0gdHlwZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAhKGNvZXJjZVRvLmxlbmd0aCA9PT0gMCAmJiB0eXBlcy5sZW5ndGggPT09IDEgJiYgKDAsIGFwcGxpY2FiaWxpdHlfMS5zY2hlbWFIYXNSdWxlc0ZvclR5cGUpKGl0LCB0eXBlc1swXSkpO1xuICAgIGlmIChjaGVja1R5cGVzKSB7XG4gICAgICAgIGNvbnN0IHdyb25nVHlwZSA9IGNoZWNrRGF0YVR5cGVzKHR5cGVzLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMsIERhdGFUeXBlLldyb25nKTtcbiAgICAgICAgZ2VuLmlmKHdyb25nVHlwZSwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvZXJjZVRvLmxlbmd0aClcbiAgICAgICAgICAgICAgICBjb2VyY2VEYXRhKGl0LCB0eXBlcywgY29lcmNlVG8pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJlcG9ydFR5cGVFcnJvcihpdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tUeXBlcztcbn1cbmV4cG9ydHMuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSA9IGNvZXJjZUFuZENoZWNrRGF0YVR5cGU7XG5jb25zdCBDT0VSQ0lCTEUgPSBuZXcgU2V0KFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImludGVnZXJcIiwgXCJib29sZWFuXCIsIFwibnVsbFwiXSk7XG5mdW5jdGlvbiBjb2VyY2VUb1R5cGVzKHR5cGVzLCBjb2VyY2VUeXBlcykge1xuICAgIHJldHVybiBjb2VyY2VUeXBlc1xuICAgICAgICA/IHR5cGVzLmZpbHRlcigodCkgPT4gQ09FUkNJQkxFLmhhcyh0KSB8fCAoY29lcmNlVHlwZXMgPT09IFwiYXJyYXlcIiAmJiB0ID09PSBcImFycmF5XCIpKVxuICAgICAgICA6IFtdO1xufVxuZnVuY3Rpb24gY29lcmNlRGF0YShpdCwgdHlwZXMsIGNvZXJjZVRvKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIG9wdHMgfSA9IGl0O1xuICAgIGNvbnN0IGRhdGFUeXBlID0gZ2VuLmxldChcImRhdGFUeXBlXCIsICgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9YCk7XG4gICAgY29uc3QgY29lcmNlZCA9IGdlbi5sZXQoXCJjb2VyY2VkXCIsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgIGlmIChvcHRzLmNvZXJjZVR5cGVzID09PSBcImFycmF5XCIpIHtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkoJHtkYXRhfSkgJiYgJHtkYXRhfS5sZW5ndGggPT0gMWAsICgpID0+IGdlblxuICAgICAgICAgICAgLmFzc2lnbihkYXRhLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9WzBdYClcbiAgICAgICAgICAgIC5hc3NpZ24oZGF0YVR5cGUsICgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9YClcbiAgICAgICAgICAgIC5pZihjaGVja0RhdGFUeXBlcyh0eXBlcywgZGF0YSwgb3B0cy5zdHJpY3ROdW1iZXJzKSwgKCkgPT4gZ2VuLmFzc2lnbihjb2VyY2VkLCBkYXRhKSkpO1xuICAgIH1cbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb2VyY2VkfSAhPT0gdW5kZWZpbmVkYCk7XG4gICAgZm9yIChjb25zdCB0IG9mIGNvZXJjZVRvKSB7XG4gICAgICAgIGlmIChDT0VSQ0lCTEUuaGFzKHQpIHx8ICh0ID09PSBcImFycmF5XCIgJiYgb3B0cy5jb2VyY2VUeXBlcyA9PT0gXCJhcnJheVwiKSkge1xuICAgICAgICAgICAgY29lcmNlU3BlY2lmaWNUeXBlKHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdlbi5lbHNlKCk7XG4gICAgcmVwb3J0VHlwZUVycm9yKGl0KTtcbiAgICBnZW4uZW5kSWYoKTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb2VyY2VkfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4ge1xuICAgICAgICBnZW4uYXNzaWduKGRhdGEsIGNvZXJjZWQpO1xuICAgICAgICBhc3NpZ25QYXJlbnREYXRhKGl0LCBjb2VyY2VkKTtcbiAgICB9KTtcbiAgICBmdW5jdGlvbiBjb2VyY2VTcGVjaWZpY1R5cGUodCkge1xuICAgICAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PSBcIm51bWJlclwiIHx8ICR7ZGF0YVR5cGV9ID09IFwiYm9vbGVhblwiYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiICsgJHtkYXRhfWApXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gbnVsbGApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgXCJcImApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PSBcImJvb2xlYW5cIiB8fCAke2RhdGF9ID09PSBudWxsXG4gICAgICAgICAgICAgIHx8ICgke2RhdGFUeXBlfSA9PSBcInN0cmluZ1wiICYmICR7ZGF0YX0gJiYgJHtkYXRhfSA9PSArJHtkYXRhfSlgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYCske2RhdGF9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PT0gXCJib29sZWFuXCIgfHwgJHtkYXRhfSA9PT0gbnVsbFxuICAgICAgICAgICAgICB8fCAoJHtkYXRhVHlwZX0gPT09IFwic3RyaW5nXCIgJiYgJHtkYXRhfSAmJiAke2RhdGF9ID09ICske2RhdGF9ICYmICEoJHtkYXRhfSAlIDEpKWApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgKyR7ZGF0YX1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IFwiZmFsc2VcIiB8fCAke2RhdGF9ID09PSAwIHx8ICR7ZGF0YX0gPT09IG51bGxgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IFwidHJ1ZVwiIHx8ICR7ZGF0YX0gPT09IDFgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBcIlwiIHx8ICR7ZGF0YX0gPT09IDAgfHwgJHtkYXRhfSA9PT0gZmFsc2VgKTtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKGNvZXJjZWQsIG51bGwpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09PSBcInN0cmluZ1wiIHx8ICR7ZGF0YVR5cGV9ID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgIHx8ICR7ZGF0YVR5cGV9ID09PSBcImJvb2xlYW5cIiB8fCAke2RhdGF9ID09PSBudWxsYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGBbJHtkYXRhfV1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2lnblBhcmVudERhdGEoeyBnZW4sIHBhcmVudERhdGEsIHBhcmVudERhdGFQcm9wZXJ0eSB9LCBleHByKSB7XG4gICAgLy8gVE9ETyB1c2UgZ2VuLnByb3BlcnR5XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7cGFyZW50RGF0YX0gIT09IHVuZGVmaW5lZGAsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtwYXJlbnREYXRhfVske3BhcmVudERhdGFQcm9wZXJ0eX1dYCwgZXhwcikpO1xufVxuZnVuY3Rpb24gY2hlY2tEYXRhVHlwZShkYXRhVHlwZSwgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCA9IERhdGFUeXBlLkNvcnJlY3QpIHtcbiAgICBjb25zdCBFUSA9IGNvcnJlY3QgPT09IERhdGFUeXBlLkNvcnJlY3QgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkVRIDogY29kZWdlbl8xLm9wZXJhdG9ycy5ORVE7XG4gICAgbGV0IGNvbmQ7XG4gICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gJHtFUX0gbnVsbGA7XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYEFycmF5LmlzQXJyYXkoJHtkYXRhfSlgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICYmIHR5cGVvZiAke2RhdGF9ID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoJHtkYXRhfSlgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICAgICAgICBjb25kID0gbnVtQ29uZCgoMCwgY29kZWdlbl8xLl8pIGAhKCR7ZGF0YX0gJSAxKSAmJiAhaXNOYU4oJHtkYXRhfSlgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICBjb25kID0gbnVtQ29uZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX0gJHtFUX0gJHtkYXRhVHlwZX1gO1xuICAgIH1cbiAgICByZXR1cm4gY29ycmVjdCA9PT0gRGF0YVR5cGUuQ29ycmVjdCA/IGNvbmQgOiAoMCwgY29kZWdlbl8xLm5vdCkoY29uZCk7XG4gICAgZnVuY3Rpb24gbnVtQ29uZChfY29uZCA9IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuYW5kKSgoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfSA9PSBcIm51bWJlclwiYCwgX2NvbmQsIHN0cmljdE51bXMgPyAoMCwgY29kZWdlbl8xLl8pIGBpc0Zpbml0ZSgke2RhdGF9KWAgOiBjb2RlZ2VuXzEubmlsKTtcbiAgICB9XG59XG5leHBvcnRzLmNoZWNrRGF0YVR5cGUgPSBjaGVja0RhdGFUeXBlO1xuZnVuY3Rpb24gY2hlY2tEYXRhVHlwZXMoZGF0YVR5cGVzLCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0KSB7XG4gICAgaWYgKGRhdGFUeXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGVzWzBdLCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0KTtcbiAgICB9XG4gICAgbGV0IGNvbmQ7XG4gICAgY29uc3QgdHlwZXMgPSAoMCwgdXRpbF8xLnRvSGFzaCkoZGF0YVR5cGVzKTtcbiAgICBpZiAodHlwZXMuYXJyYXkgJiYgdHlwZXMub2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IG5vdE9iaiA9ICgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9ICE9IFwib2JqZWN0XCJgO1xuICAgICAgICBjb25kID0gdHlwZXMubnVsbCA/IG5vdE9iaiA6ICgwLCBjb2RlZ2VuXzEuXykgYCEke2RhdGF9IHx8ICR7bm90T2JqfWA7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5udWxsO1xuICAgICAgICBkZWxldGUgdHlwZXMuYXJyYXk7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5vYmplY3Q7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25kID0gY29kZWdlbl8xLm5pbDtcbiAgICB9XG4gICAgaWYgKHR5cGVzLm51bWJlcilcbiAgICAgICAgZGVsZXRlIHR5cGVzLmludGVnZXI7XG4gICAgZm9yIChjb25zdCB0IGluIHR5cGVzKVxuICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5hbmQpKGNvbmQsIGNoZWNrRGF0YVR5cGUodCwgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCkpO1xuICAgIHJldHVybiBjb25kO1xufVxuZXhwb3J0cy5jaGVja0RhdGFUeXBlcyA9IGNoZWNrRGF0YVR5cGVzO1xuY29uc3QgdHlwZUVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYSB9KSA9PiBgbXVzdCBiZSAke3NjaGVtYX1gLFxuICAgIHBhcmFtczogKHsgc2NoZW1hLCBzY2hlbWFWYWx1ZSB9KSA9PiB0eXBlb2Ygc2NoZW1hID09IFwic3RyaW5nXCIgPyAoMCwgY29kZWdlbl8xLl8pIGB7dHlwZTogJHtzY2hlbWF9fWAgOiAoMCwgY29kZWdlbl8xLl8pIGB7dHlwZTogJHtzY2hlbWFWYWx1ZX19YCxcbn07XG5mdW5jdGlvbiByZXBvcnRUeXBlRXJyb3IoaXQpIHtcbiAgICBjb25zdCBjeHQgPSBnZXRUeXBlRXJyb3JDb250ZXh0KGl0KTtcbiAgICAoMCwgZXJyb3JzXzEucmVwb3J0RXJyb3IpKGN4dCwgdHlwZUVycm9yKTtcbn1cbmV4cG9ydHMucmVwb3J0VHlwZUVycm9yID0gcmVwb3J0VHlwZUVycm9yO1xuZnVuY3Rpb24gZ2V0VHlwZUVycm9yQ29udGV4dChpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWEgfSA9IGl0O1xuICAgIGNvbnN0IHNjaGVtYUNvZGUgPSAoMCwgdXRpbF8xLnNjaGVtYVJlZk9yVmFsKShpdCwgc2NoZW1hLCBcInR5cGVcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBrZXl3b3JkOiBcInR5cGVcIixcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc2NoZW1hOiBzY2hlbWEudHlwZSxcbiAgICAgICAgc2NoZW1hQ29kZSxcbiAgICAgICAgc2NoZW1hVmFsdWU6IHNjaGVtYUNvZGUsXG4gICAgICAgIHBhcmVudFNjaGVtYTogc2NoZW1hLFxuICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICBpdCxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YVR5cGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXNzaWduRGVmYXVsdHMgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuZnVuY3Rpb24gYXNzaWduRGVmYXVsdHMoaXQsIHR5KSB7XG4gICAgY29uc3QgeyBwcm9wZXJ0aWVzLCBpdGVtcyB9ID0gaXQuc2NoZW1hO1xuICAgIGlmICh0eSA9PT0gXCJvYmplY3RcIiAmJiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGFzc2lnbkRlZmF1bHQoaXQsIGtleSwgcHJvcGVydGllc1trZXldLmRlZmF1bHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5ID09PSBcImFycmF5XCIgJiYgQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoc2NoLCBpKSA9PiBhc3NpZ25EZWZhdWx0KGl0LCBpLCBzY2guZGVmYXVsdCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuYXNzaWduRGVmYXVsdHMgPSBhc3NpZ25EZWZhdWx0cztcbmZ1bmN0aW9uIGFzc2lnbkRlZmF1bHQoaXQsIHByb3AsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGNvbnN0IHsgZ2VuLCBjb21wb3NpdGVSdWxlLCBkYXRhLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAoZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBjaGlsZERhdGEgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwcm9wKX1gO1xuICAgIGlmIChjb21wb3NpdGVSdWxlKSB7XG4gICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYGRlZmF1bHQgaXMgaWdub3JlZCBmb3I6ICR7Y2hpbGREYXRhfWApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBjb25kaXRpb24gPSAoMCwgY29kZWdlbl8xLl8pIGAke2NoaWxkRGF0YX0gPT09IHVuZGVmaW5lZGA7XG4gICAgaWYgKG9wdHMudXNlRGVmYXVsdHMgPT09IFwiZW1wdHlcIikge1xuICAgICAgICBjb25kaXRpb24gPSAoMCwgY29kZWdlbl8xLl8pIGAke2NvbmRpdGlvbn0gfHwgJHtjaGlsZERhdGF9ID09PSBudWxsIHx8ICR7Y2hpbGREYXRhfSA9PT0gXCJcImA7XG4gICAgfVxuICAgIC8vIGAke2NoaWxkRGF0YX0gPT09IHVuZGVmaW5lZGAgK1xuICAgIC8vIChvcHRzLnVzZURlZmF1bHRzID09PSBcImVtcHR5XCIgPyBgIHx8ICR7Y2hpbGREYXRhfSA9PT0gbnVsbCB8fCAke2NoaWxkRGF0YX0gPT09IFwiXCJgIDogXCJcIilcbiAgICBnZW4uaWYoY29uZGl0aW9uLCAoMCwgY29kZWdlbl8xLl8pIGAke2NoaWxkRGF0YX0gPSAkeygwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShkZWZhdWx0VmFsdWUpfWApO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVmYXVsdHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVVbmlvbiA9IGV4cG9ydHMudmFsaWRhdGVBcnJheSA9IGV4cG9ydHMudXNlUGF0dGVybiA9IGV4cG9ydHMuY2FsbFZhbGlkYXRlQ29kZSA9IGV4cG9ydHMuc2NoZW1hUHJvcGVydGllcyA9IGV4cG9ydHMuYWxsU2NoZW1hUHJvcGVydGllcyA9IGV4cG9ydHMubm9Qcm9wZXJ0eUluRGF0YSA9IGV4cG9ydHMucHJvcGVydHlJbkRhdGEgPSBleHBvcnRzLmlzT3duUHJvcGVydHkgPSBleHBvcnRzLmhhc1Byb3BGdW5jID0gZXhwb3J0cy5yZXBvcnRNaXNzaW5nUHJvcCA9IGV4cG9ydHMuY2hlY2tNaXNzaW5nUHJvcCA9IGV4cG9ydHMuY2hlY2tSZXBvcnRNaXNzaW5nUHJvcCA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi9jb21waWxlL25hbWVzXCIpO1xuY29uc3QgdXRpbF8yID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvdXRpbFwiKTtcbmZ1bmN0aW9uIGNoZWNrUmVwb3J0TWlzc2luZ1Byb3AoY3h0LCBwcm9wKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgZ2VuLmlmKG5vUHJvcGVydHlJbkRhdGEoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpLCAoKSA9PiB7XG4gICAgICAgIGN4dC5zZXRQYXJhbXMoeyBtaXNzaW5nUHJvcGVydHk6ICgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcH1gIH0sIHRydWUpO1xuICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY2hlY2tSZXBvcnRNaXNzaW5nUHJvcCA9IGNoZWNrUmVwb3J0TWlzc2luZ1Byb3A7XG5mdW5jdGlvbiBjaGVja01pc3NpbmdQcm9wKHsgZ2VuLCBkYXRhLCBpdDogeyBvcHRzIH0gfSwgcHJvcGVydGllcywgbWlzc2luZykge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLm9yKSguLi5wcm9wZXJ0aWVzLm1hcCgocHJvcCkgPT4gKDAsIGNvZGVnZW5fMS5hbmQpKG5vUHJvcGVydHlJbkRhdGEoZ2VuLCBkYXRhLCBwcm9wLCBvcHRzLm93blByb3BlcnRpZXMpLCAoMCwgY29kZWdlbl8xLl8pIGAke21pc3Npbmd9ID0gJHtwcm9wfWApKSk7XG59XG5leHBvcnRzLmNoZWNrTWlzc2luZ1Byb3AgPSBjaGVja01pc3NpbmdQcm9wO1xuZnVuY3Rpb24gcmVwb3J0TWlzc2luZ1Byb3AoY3h0LCBtaXNzaW5nKSB7XG4gICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogbWlzc2luZyB9LCB0cnVlKTtcbiAgICBjeHQuZXJyb3IoKTtcbn1cbmV4cG9ydHMucmVwb3J0TWlzc2luZ1Byb3AgPSByZXBvcnRNaXNzaW5nUHJvcDtcbmZ1bmN0aW9uIGhhc1Byb3BGdW5jKGdlbikge1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcImZ1bmNcIiwge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICAgIHJlZjogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgICAgY29kZTogKDAsIGNvZGVnZW5fMS5fKSBgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eWAsXG4gICAgfSk7XG59XG5leHBvcnRzLmhhc1Byb3BGdW5jID0gaGFzUHJvcEZ1bmM7XG5mdW5jdGlvbiBpc093blByb3BlcnR5KGdlbiwgZGF0YSwgcHJvcGVydHkpIHtcbiAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtoYXNQcm9wRnVuYyhnZW4pfS5jYWxsKCR7ZGF0YX0sICR7cHJvcGVydHl9KWA7XG59XG5leHBvcnRzLmlzT3duUHJvcGVydHkgPSBpc093blByb3BlcnR5O1xuZnVuY3Rpb24gcHJvcGVydHlJbkRhdGEoZ2VuLCBkYXRhLCBwcm9wZXJ0eSwgb3duUHJvcGVydGllcykge1xuICAgIGNvbnN0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwcm9wZXJ0eSl9ICE9PSB1bmRlZmluZWRgO1xuICAgIHJldHVybiBvd25Qcm9wZXJ0aWVzID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtjb25kfSAmJiAke2lzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSl9YCA6IGNvbmQ7XG59XG5leHBvcnRzLnByb3BlcnR5SW5EYXRhID0gcHJvcGVydHlJbkRhdGE7XG5mdW5jdGlvbiBub1Byb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcGVydHksIG93blByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocHJvcGVydHkpfSA9PT0gdW5kZWZpbmVkYDtcbiAgICByZXR1cm4gb3duUHJvcGVydGllcyA/ICgwLCBjb2RlZ2VuXzEub3IpKGNvbmQsICgwLCBjb2RlZ2VuXzEubm90KShpc093blByb3BlcnR5KGdlbiwgZGF0YSwgcHJvcGVydHkpKSkgOiBjb25kO1xufVxuZXhwb3J0cy5ub1Byb3BlcnR5SW5EYXRhID0gbm9Qcm9wZXJ0eUluRGF0YTtcbmZ1bmN0aW9uIGFsbFNjaGVtYVByb3BlcnRpZXMoc2NoZW1hTWFwKSB7XG4gICAgcmV0dXJuIHNjaGVtYU1hcCA/IE9iamVjdC5rZXlzKHNjaGVtYU1hcCkuZmlsdGVyKChwKSA9PiBwICE9PSBcIl9fcHJvdG9fX1wiKSA6IFtdO1xufVxuZXhwb3J0cy5hbGxTY2hlbWFQcm9wZXJ0aWVzID0gYWxsU2NoZW1hUHJvcGVydGllcztcbmZ1bmN0aW9uIHNjaGVtYVByb3BlcnRpZXMoaXQsIHNjaGVtYU1hcCkge1xuICAgIHJldHVybiBhbGxTY2hlbWFQcm9wZXJ0aWVzKHNjaGVtYU1hcCkuZmlsdGVyKChwKSA9PiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYU1hcFtwXSkpO1xufVxuZXhwb3J0cy5zY2hlbWFQcm9wZXJ0aWVzID0gc2NoZW1hUHJvcGVydGllcztcbmZ1bmN0aW9uIGNhbGxWYWxpZGF0ZUNvZGUoeyBzY2hlbWFDb2RlLCBkYXRhLCBpdDogeyBnZW4sIHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCwgZXJyb3JQYXRoIH0sIGl0IH0sIGZ1bmMsIGNvbnRleHQsIHBhc3NTY2hlbWEpIHtcbiAgICBjb25zdCBkYXRhQW5kU2NoZW1hID0gcGFzc1NjaGVtYSA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0sICR7ZGF0YX0sICR7dG9wU2NoZW1hUmVmfSR7c2NoZW1hUGF0aH1gIDogZGF0YTtcbiAgICBjb25zdCB2YWxDeHQgPSBbXG4gICAgICAgIFtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgZXJyb3JQYXRoKV0sXG4gICAgICAgIFtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSwgaXQucGFyZW50RGF0YV0sXG4gICAgICAgIFtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LCBpdC5wYXJlbnREYXRhUHJvcGVydHldLFxuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhLCBuYW1lc18xLmRlZmF1bHQucm9vdERhdGFdLFxuICAgIF07XG4gICAgaWYgKGl0Lm9wdHMuZHluYW1pY1JlZilcbiAgICAgICAgdmFsQ3h0LnB1c2goW25hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9ycywgbmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzXSk7XG4gICAgY29uc3QgYXJncyA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YUFuZFNjaGVtYX0sICR7Z2VuLm9iamVjdCguLi52YWxDeHQpfWA7XG4gICAgcmV0dXJuIGNvbnRleHQgIT09IGNvZGVnZW5fMS5uaWwgPyAoMCwgY29kZWdlbl8xLl8pIGAke2Z1bmN9LmNhbGwoJHtjb250ZXh0fSwgJHthcmdzfSlgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtmdW5jfSgke2FyZ3N9KWA7XG59XG5leHBvcnRzLmNhbGxWYWxpZGF0ZUNvZGUgPSBjYWxsVmFsaWRhdGVDb2RlO1xuY29uc3QgbmV3UmVnRXhwID0gKDAsIGNvZGVnZW5fMS5fKSBgbmV3IFJlZ0V4cGA7XG5mdW5jdGlvbiB1c2VQYXR0ZXJuKHsgZ2VuLCBpdDogeyBvcHRzIH0gfSwgcGF0dGVybikge1xuICAgIGNvbnN0IHUgPSBvcHRzLnVuaWNvZGVSZWdFeHAgPyBcInVcIiA6IFwiXCI7XG4gICAgY29uc3QgeyByZWdFeHAgfSA9IG9wdHMuY29kZTtcbiAgICBjb25zdCByeCA9IHJlZ0V4cChwYXR0ZXJuLCB1KTtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJwYXR0ZXJuXCIsIHtcbiAgICAgICAga2V5OiByeC50b1N0cmluZygpLFxuICAgICAgICByZWY6IHJ4LFxuICAgICAgICBjb2RlOiAoMCwgY29kZWdlbl8xLl8pIGAke3JlZ0V4cC5jb2RlID09PSBcIm5ldyBSZWdFeHBcIiA/IG5ld1JlZ0V4cCA6ICgwLCB1dGlsXzIudXNlRnVuYykoZ2VuLCByZWdFeHApfSgke3BhdHRlcm59LCAke3V9KWAsXG4gICAgfSk7XG59XG5leHBvcnRzLnVzZVBhdHRlcm4gPSB1c2VQYXR0ZXJuO1xuZnVuY3Rpb24gdmFsaWRhdGVBcnJheShjeHQpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgaWYgKGl0LmFsbEVycm9ycykge1xuICAgICAgICBjb25zdCB2YWxpZEFyciA9IGdlbi5sZXQoXCJ2YWxpZFwiLCB0cnVlKTtcbiAgICAgICAgdmFsaWRhdGVJdGVtcygoKSA9PiBnZW4uYXNzaWduKHZhbGlkQXJyLCBmYWxzZSkpO1xuICAgICAgICByZXR1cm4gdmFsaWRBcnI7XG4gICAgfVxuICAgIGdlbi52YXIodmFsaWQsIHRydWUpO1xuICAgIHZhbGlkYXRlSXRlbXMoKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgIHJldHVybiB2YWxpZDtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zKG5vdFZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgICAgICBnZW4uZm9yUmFuZ2UoXCJpXCIsIDAsIGxlbiwgKGkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIGtleXdvcmQsXG4gICAgICAgICAgICAgICAgZGF0YVByb3A6IGksXG4gICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0sXG4gICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgbm90VmFsaWQpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlQXJyYXkgPSB2YWxpZGF0ZUFycmF5O1xuZnVuY3Rpb24gdmFsaWRhdGVVbmlvbihjeHQpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgY29uc3QgYWx3YXlzVmFsaWQgPSBzY2hlbWEuc29tZSgoc2NoKSA9PiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoKSk7XG4gICAgaWYgKGFsd2F5c1ZhbGlkICYmICFpdC5vcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgZmFsc2UpO1xuICAgIGNvbnN0IHNjaFZhbGlkID0gZ2VuLm5hbWUoXCJfdmFsaWRcIik7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHNjaGVtYS5mb3JFYWNoKChfc2NoLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAga2V5d29yZCxcbiAgICAgICAgICAgIHNjaGVtYVByb3A6IGksXG4gICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICB9LCBzY2hWYWxpZCk7XG4gICAgICAgIGdlbi5hc3NpZ24odmFsaWQsICgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWR9IHx8ICR7c2NoVmFsaWR9YCk7XG4gICAgICAgIGNvbnN0IG1lcmdlZCA9IGN4dC5tZXJnZVZhbGlkRXZhbHVhdGVkKHNjaEN4dCwgc2NoVmFsaWQpO1xuICAgICAgICAvLyBjYW4gc2hvcnQtY2lyY3VpdCBpZiBgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzL0l0ZW1zYCBub3Qgc3VwcG9ydGVkIChvcHRzLnVuZXZhbHVhdGVkICE9PSB0cnVlKVxuICAgICAgICAvLyBvciBpZiBhbGwgcHJvcGVydGllcyBhbmQgaXRlbXMgd2VyZSBldmFsdWF0ZWQgKGl0LnByb3BzID09PSB0cnVlICYmIGl0Lml0ZW1zID09PSB0cnVlKVxuICAgICAgICBpZiAoIW1lcmdlZClcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpKTtcbiAgICB9KSk7XG4gICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCksICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG59XG5leHBvcnRzLnZhbGlkYXRlVW5pb24gPSB2YWxpZGF0ZVVuaW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29kZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZUtleXdvcmRVc2FnZSA9IGV4cG9ydHMudmFsaWRTY2hlbWFUeXBlID0gZXhwb3J0cy5mdW5jS2V5d29yZENvZGUgPSBleHBvcnRzLm1hY3JvS2V5d29yZENvZGUgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vbmFtZXNcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vLi4vdm9jYWJ1bGFyaWVzL2NvZGVcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5mdW5jdGlvbiBtYWNyb0tleXdvcmRDb2RlKGN4dCwgZGVmKSB7XG4gICAgY29uc3QgeyBnZW4sIGtleXdvcmQsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IG1hY3JvU2NoZW1hID0gZGVmLm1hY3JvLmNhbGwoaXQuc2VsZiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0KTtcbiAgICBjb25zdCBzY2hlbWFSZWYgPSB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgbWFjcm9TY2hlbWEpO1xuICAgIGlmIChpdC5vcHRzLnZhbGlkYXRlU2NoZW1hICE9PSBmYWxzZSlcbiAgICAgICAgaXQuc2VsZi52YWxpZGF0ZVNjaGVtYShtYWNyb1NjaGVtYSwgdHJ1ZSk7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICBzY2hlbWE6IG1hY3JvU2NoZW1hLFxuICAgICAgICBzY2hlbWFQYXRoOiBjb2RlZ2VuXzEubmlsLFxuICAgICAgICBlcnJTY2hlbWFQYXRoOiBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YCxcbiAgICAgICAgdG9wU2NoZW1hUmVmOiBzY2hlbWFSZWYsXG4gICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgfSwgdmFsaWQpO1xuICAgIGN4dC5wYXNzKHZhbGlkLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xufVxuZXhwb3J0cy5tYWNyb0tleXdvcmRDb2RlID0gbWFjcm9LZXl3b3JkQ29kZTtcbmZ1bmN0aW9uIGZ1bmNLZXl3b3JkQ29kZShjeHQsIGRlZikge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IGdlbiwga2V5d29yZCwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsICRkYXRhLCBpdCB9ID0gY3h0O1xuICAgIGNoZWNrQXN5bmNLZXl3b3JkKGl0LCBkZWYpO1xuICAgIGNvbnN0IHZhbGlkYXRlID0gISRkYXRhICYmIGRlZi5jb21waWxlID8gZGVmLmNvbXBpbGUuY2FsbChpdC5zZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpIDogZGVmLnZhbGlkYXRlO1xuICAgIGNvbnN0IHZhbGlkYXRlUmVmID0gdXNlS2V5d29yZChnZW4sIGtleXdvcmQsIHZhbGlkYXRlKTtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICBjeHQuYmxvY2skZGF0YSh2YWxpZCwgdmFsaWRhdGVLZXl3b3JkKTtcbiAgICBjeHQub2soKF9hID0gZGVmLnZhbGlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWxpZCk7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVLZXl3b3JkKCkge1xuICAgICAgICBpZiAoZGVmLmVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGFzc2lnblZhbGlkKCk7XG4gICAgICAgICAgICBpZiAoZGVmLm1vZGlmeWluZylcbiAgICAgICAgICAgICAgICBtb2RpZnlEYXRhKGN4dCk7XG4gICAgICAgICAgICByZXBvcnRFcnJzKCgpID0+IGN4dC5lcnJvcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVFcnJzID0gZGVmLmFzeW5jID8gdmFsaWRhdGVBc3luYygpIDogdmFsaWRhdGVTeW5jKCk7XG4gICAgICAgICAgICBpZiAoZGVmLm1vZGlmeWluZylcbiAgICAgICAgICAgICAgICBtb2RpZnlEYXRhKGN4dCk7XG4gICAgICAgICAgICByZXBvcnRFcnJzKCgpID0+IGFkZEVycnMoY3h0LCBydWxlRXJycykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlQXN5bmMoKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVFcnJzID0gZ2VuLmxldChcInJ1bGVFcnJzXCIsIG51bGwpO1xuICAgICAgICBnZW4udHJ5KCgpID0+IGFzc2lnblZhbGlkKCgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0IGApLCAoZSkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZX0gaW5zdGFuY2VvZiAke2l0LlZhbGlkYXRpb25FcnJvcn1gLCAoKSA9PiBnZW4uYXNzaWduKHJ1bGVFcnJzLCAoMCwgY29kZWdlbl8xLl8pIGAke2V9LmVycm9yc2ApLCAoKSA9PiBnZW4udGhyb3coZSkpKTtcbiAgICAgICAgcmV0dXJuIHJ1bGVFcnJzO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVN5bmMoKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlRXJycyA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVSZWZ9LmVycm9yc2A7XG4gICAgICAgIGdlbi5hc3NpZ24odmFsaWRhdGVFcnJzLCBudWxsKTtcbiAgICAgICAgYXNzaWduVmFsaWQoY29kZWdlbl8xLm5pbCk7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUVycnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFzc2lnblZhbGlkKF9hd2FpdCA9IGRlZi5hc3luYyA/ICgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0IGAgOiBjb2RlZ2VuXzEubmlsKSB7XG4gICAgICAgIGNvbnN0IHBhc3NDeHQgPSBpdC5vcHRzLnBhc3NDb250ZXh0ID8gbmFtZXNfMS5kZWZhdWx0LnRoaXMgOiBuYW1lc18xLmRlZmF1bHQuc2VsZjtcbiAgICAgICAgY29uc3QgcGFzc1NjaGVtYSA9ICEoKFwiY29tcGlsZVwiIGluIGRlZiAmJiAhJGRhdGEpIHx8IGRlZi5zY2hlbWEgPT09IGZhbHNlKTtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtfYXdhaXR9JHsoMCwgY29kZV8xLmNhbGxWYWxpZGF0ZUNvZGUpKGN4dCwgdmFsaWRhdGVSZWYsIHBhc3NDeHQsIHBhc3NTY2hlbWEpfWAsIGRlZi5tb2RpZnlpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXBvcnRFcnJzKGVycm9ycykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkoKF9hID0gZGVmLnZhbGlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWxpZCksIGVycm9ycyk7XG4gICAgfVxufVxuZXhwb3J0cy5mdW5jS2V5d29yZENvZGUgPSBmdW5jS2V5d29yZENvZGU7XG5mdW5jdGlvbiBtb2RpZnlEYXRhKGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgIGdlbi5pZihpdC5wYXJlbnREYXRhLCAoKSA9PiBnZW4uYXNzaWduKGRhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQucGFyZW50RGF0YX1bJHtpdC5wYXJlbnREYXRhUHJvcGVydHl9XWApKTtcbn1cbmZ1bmN0aW9uIGFkZEVycnMoY3h0LCBlcnJzKSB7XG4gICAgY29uc3QgeyBnZW4gfSA9IGN4dDtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgQXJyYXkuaXNBcnJheSgke2VycnN9KWAsICgpID0+IHtcbiAgICAgICAgZ2VuXG4gICAgICAgICAgICAuYXNzaWduKG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbCA/ICR7ZXJyc30gOiAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5jb25jYXQoJHtlcnJzfSlgKVxuICAgICAgICAgICAgLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5sZW5ndGhgKTtcbiAgICAgICAgKDAsIGVycm9yc18xLmV4dGVuZEVycm9ycykoY3h0KTtcbiAgICB9LCAoKSA9PiBjeHQuZXJyb3IoKSk7XG59XG5mdW5jdGlvbiBjaGVja0FzeW5jS2V5d29yZCh7IHNjaGVtYUVudiB9LCBkZWYpIHtcbiAgICBpZiAoZGVmLmFzeW5jICYmICFzY2hlbWFFbnYuJGFzeW5jKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBrZXl3b3JkIGluIHN5bmMgc2NoZW1hXCIpO1xufVxuZnVuY3Rpb24gdXNlS2V5d29yZChnZW4sIGtleXdvcmQsIHJlc3VsdCkge1xuICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXl3b3JkIFwiJHtrZXl3b3JkfVwiIGZhaWxlZCB0byBjb21waWxlYCk7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwia2V5d29yZFwiLCB0eXBlb2YgcmVzdWx0ID09IFwiZnVuY3Rpb25cIiA/IHsgcmVmOiByZXN1bHQgfSA6IHsgcmVmOiByZXN1bHQsIGNvZGU6ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShyZXN1bHQpIH0pO1xufVxuZnVuY3Rpb24gdmFsaWRTY2hlbWFUeXBlKHNjaGVtYSwgc2NoZW1hVHlwZSwgYWxsb3dVbmRlZmluZWQgPSBmYWxzZSkge1xuICAgIC8vIFRPRE8gYWRkIHRlc3RzXG4gICAgcmV0dXJuICghc2NoZW1hVHlwZS5sZW5ndGggfHxcbiAgICAgICAgc2NoZW1hVHlwZS5zb21lKChzdCkgPT4gc3QgPT09IFwiYXJyYXlcIlxuICAgICAgICAgICAgPyBBcnJheS5pc0FycmF5KHNjaGVtYSlcbiAgICAgICAgICAgIDogc3QgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICAgICA/IHNjaGVtYSAmJiB0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hKVxuICAgICAgICAgICAgICAgIDogdHlwZW9mIHNjaGVtYSA9PSBzdCB8fCAoYWxsb3dVbmRlZmluZWQgJiYgdHlwZW9mIHNjaGVtYSA9PSBcInVuZGVmaW5lZFwiKSkpO1xufVxuZXhwb3J0cy52YWxpZFNjaGVtYVR5cGUgPSB2YWxpZFNjaGVtYVR5cGU7XG5mdW5jdGlvbiB2YWxpZGF0ZUtleXdvcmRVc2FnZSh7IHNjaGVtYSwgb3B0cywgc2VsZiwgZXJyU2NoZW1hUGF0aCB9LCBkZWYsIGtleXdvcmQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWYua2V5d29yZCkgPyAhZGVmLmtleXdvcmQuaW5jbHVkZXMoa2V5d29yZCkgOiBkZWYua2V5d29yZCAhPT0ga2V5d29yZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgfVxuICAgIGNvbnN0IGRlcHMgPSBkZWYuZGVwZW5kZW5jaWVzO1xuICAgIGlmIChkZXBzID09PSBudWxsIHx8IGRlcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlcHMuc29tZSgoa3dkKSA9PiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNjaGVtYSwga3dkKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwYXJlbnQgc2NoZW1hIG11c3QgaGF2ZSBkZXBlbmRlbmNpZXMgb2YgJHtrZXl3b3JkfTogJHtkZXBzLmpvaW4oXCIsXCIpfWApO1xuICAgIH1cbiAgICBpZiAoZGVmLnZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZGVmLnZhbGlkYXRlU2NoZW1hKHNjaGVtYVtrZXl3b3JkXSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBrZXl3b3JkIFwiJHtrZXl3b3JkfVwiIHZhbHVlIGlzIGludmFsaWQgYXQgcGF0aCBcIiR7ZXJyU2NoZW1hUGF0aH1cIjogYCArXG4gICAgICAgICAgICAgICAgc2VsZi5lcnJvcnNUZXh0KGRlZi52YWxpZGF0ZVNjaGVtYS5lcnJvcnMpO1xuICAgICAgICAgICAgaWYgKG9wdHMudmFsaWRhdGVTY2hlbWEgPT09IFwibG9nXCIpXG4gICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IobXNnKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVLZXl3b3JkVXNhZ2UgPSB2YWxpZGF0ZUtleXdvcmRVc2FnZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWtleXdvcmQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXh0ZW5kU3Vic2NoZW1hTW9kZSA9IGV4cG9ydHMuZXh0ZW5kU3Vic2NoZW1hRGF0YSA9IGV4cG9ydHMuZ2V0U3Vic2NoZW1hID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmZ1bmN0aW9uIGdldFN1YnNjaGVtYShpdCwgeyBrZXl3b3JkLCBzY2hlbWFQcm9wLCBzY2hlbWEsIHNjaGVtYVBhdGgsIGVyclNjaGVtYVBhdGgsIHRvcFNjaGVtYVJlZiB9KSB7XG4gICAgaWYgKGtleXdvcmQgIT09IHVuZGVmaW5lZCAmJiBzY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvdGggXCJrZXl3b3JkXCIgYW5kIFwic2NoZW1hXCIgcGFzc2VkLCBvbmx5IG9uZSBhbGxvd2VkJyk7XG4gICAgfVxuICAgIGlmIChrZXl3b3JkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gaXQuc2NoZW1hW2tleXdvcmRdO1xuICAgICAgICByZXR1cm4gc2NoZW1hUHJvcCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaCxcbiAgICAgICAgICAgICAgICBzY2hlbWFQYXRoOiAoMCwgY29kZWdlbl8xLl8pIGAke2l0LnNjaGVtYVBhdGh9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShrZXl3b3JkKX1gLFxuICAgICAgICAgICAgICAgIGVyclNjaGVtYVBhdGg6IGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hbc2NoZW1hUHJvcF0sXG4gICAgICAgICAgICAgICAgc2NoZW1hUGF0aDogKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5zY2hlbWFQYXRofSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoa2V5d29yZCl9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShzY2hlbWFQcm9wKX1gLFxuICAgICAgICAgICAgICAgIGVyclNjaGVtYVBhdGg6IGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH0vJHsoMCwgdXRpbF8xLmVzY2FwZUZyYWdtZW50KShzY2hlbWFQcm9wKX1gLFxuICAgICAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChzY2hlbWFQYXRoID09PSB1bmRlZmluZWQgfHwgZXJyU2NoZW1hUGF0aCA9PT0gdW5kZWZpbmVkIHx8IHRvcFNjaGVtYVJlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wic2NoZW1hUGF0aFwiLCBcImVyclNjaGVtYVBhdGhcIiBhbmQgXCJ0b3BTY2hlbWFSZWZcIiBhcmUgcmVxdWlyZWQgd2l0aCBcInNjaGVtYVwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIHNjaGVtYVBhdGgsXG4gICAgICAgICAgICB0b3BTY2hlbWFSZWYsXG4gICAgICAgICAgICBlcnJTY2hlbWFQYXRoLFxuICAgICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VpdGhlciBcImtleXdvcmRcIiBvciBcInNjaGVtYVwiIG11c3QgYmUgcGFzc2VkJyk7XG59XG5leHBvcnRzLmdldFN1YnNjaGVtYSA9IGdldFN1YnNjaGVtYTtcbmZ1bmN0aW9uIGV4dGVuZFN1YnNjaGVtYURhdGEoc3Vic2NoZW1hLCBpdCwgeyBkYXRhUHJvcCwgZGF0YVByb3BUeXBlOiBkcFR5cGUsIGRhdGEsIGRhdGFUeXBlcywgcHJvcGVydHlOYW1lIH0pIHtcbiAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGFQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdib3RoIFwiZGF0YVwiIGFuZCBcImRhdGFQcm9wXCIgcGFzc2VkLCBvbmx5IG9uZSBhbGxvd2VkJyk7XG4gICAgfVxuICAgIGNvbnN0IHsgZ2VuIH0gPSBpdDtcbiAgICBpZiAoZGF0YVByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB7IGVycm9yUGF0aCwgZGF0YVBhdGhBcnIsIG9wdHMgfSA9IGl0O1xuICAgICAgICBjb25zdCBuZXh0RGF0YSA9IGdlbi5sZXQoXCJkYXRhXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGRhdGFQcm9wKX1gLCB0cnVlKTtcbiAgICAgICAgZGF0YUNvbnRleHRQcm9wcyhuZXh0RGF0YSk7XG4gICAgICAgIHN1YnNjaGVtYS5lcnJvclBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7ZXJyb3JQYXRofSR7KDAsIHV0aWxfMS5nZXRFcnJvclBhdGgpKGRhdGFQcm9wLCBkcFR5cGUsIG9wdHMuanNQcm9wZXJ0eVN5bnRheCl9YDtcbiAgICAgICAgc3Vic2NoZW1hLnBhcmVudERhdGFQcm9wZXJ0eSA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVByb3B9YDtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFQYXRoQXJyID0gWy4uLmRhdGFQYXRoQXJyLCBzdWJzY2hlbWEucGFyZW50RGF0YVByb3BlcnR5XTtcbiAgICB9XG4gICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBuZXh0RGF0YSA9IGRhdGEgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IGRhdGEgOiBnZW4ubGV0KFwiZGF0YVwiLCBkYXRhLCB0cnVlKTsgLy8gcmVwbGFjZWFibGUgaWYgdXNlZCBvbmNlP1xuICAgICAgICBkYXRhQ29udGV4dFByb3BzKG5leHREYXRhKTtcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgc3Vic2NoZW1hLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcbiAgICAgICAgLy8gVE9ETyBzb21ldGhpbmcgaXMgcG9zc2libHkgd3JvbmcgaGVyZSB3aXRoIG5vdCBjaGFuZ2luZyBwYXJlbnREYXRhUHJvcGVydHkgYW5kIG5vdCBhcHBlbmRpbmcgZGF0YVBhdGhBcnJcbiAgICB9XG4gICAgaWYgKGRhdGFUeXBlcylcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFUeXBlcyA9IGRhdGFUeXBlcztcbiAgICBmdW5jdGlvbiBkYXRhQ29udGV4dFByb3BzKF9uZXh0RGF0YSkge1xuICAgICAgICBzdWJzY2hlbWEuZGF0YSA9IF9uZXh0RGF0YTtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDE7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhVHlwZXMgPSBbXTtcbiAgICAgICAgaXQuZGVmaW5lZFByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHN1YnNjaGVtYS5wYXJlbnREYXRhID0gaXQuZGF0YTtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFOYW1lcyA9IFsuLi5pdC5kYXRhTmFtZXMsIF9uZXh0RGF0YV07XG4gICAgfVxufVxuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFEYXRhID0gZXh0ZW5kU3Vic2NoZW1hRGF0YTtcbmZ1bmN0aW9uIGV4dGVuZFN1YnNjaGVtYU1vZGUoc3Vic2NoZW1hLCB7IGp0ZERpc2NyaW1pbmF0b3IsIGp0ZE1ldGFkYXRhLCBjb21wb3NpdGVSdWxlLCBjcmVhdGVFcnJvcnMsIGFsbEVycm9ycyB9KSB7XG4gICAgaWYgKGNvbXBvc2l0ZVJ1bGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgc3Vic2NoZW1hLmNvbXBvc2l0ZVJ1bGUgPSBjb21wb3NpdGVSdWxlO1xuICAgIGlmIChjcmVhdGVFcnJvcnMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgc3Vic2NoZW1hLmNyZWF0ZUVycm9ycyA9IGNyZWF0ZUVycm9ycztcbiAgICBpZiAoYWxsRXJyb3JzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHN1YnNjaGVtYS5hbGxFcnJvcnMgPSBhbGxFcnJvcnM7XG4gICAgc3Vic2NoZW1hLmp0ZERpc2NyaW1pbmF0b3IgPSBqdGREaXNjcmltaW5hdG9yOyAvLyBub3QgaW5oZXJpdGVkXG4gICAgc3Vic2NoZW1hLmp0ZE1ldGFkYXRhID0ganRkTWV0YWRhdGE7IC8vIG5vdCBpbmhlcml0ZWRcbn1cbmV4cG9ydHMuZXh0ZW5kU3Vic2NoZW1hTW9kZSA9IGV4dGVuZFN1YnNjaGVtYU1vZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdWJzY2hlbWEuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbi8vIGRvIG5vdCBlZGl0IC5qcyBmaWxlcyBkaXJlY3RseSAtIGVkaXQgc3JjL2luZGV4LmpzdFxuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09ICdvYmplY3QnICYmIHR5cGVvZiBiID09ICdvYmplY3QnKSB7XG4gICAgaWYgKGEuY29uc3RydWN0b3IgIT09IGIuY29uc3RydWN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHZhciBsZW5ndGgsIGksIGtleXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgICBpZiAoIWVxdWFsKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cblxuXG4gICAgaWYgKGEuY29uc3RydWN0b3IgPT09IFJlZ0V4cCkgcmV0dXJuIGEuc291cmNlID09PSBiLnNvdXJjZSAmJiBhLmZsYWdzID09PSBiLmZsYWdzO1xuICAgIGlmIChhLnZhbHVlT2YgIT09IE9iamVjdC5wcm90b3R5cGUudmFsdWVPZikgcmV0dXJuIGEudmFsdWVPZigpID09PSBiLnZhbHVlT2YoKTtcbiAgICBpZiAoYS50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykgcmV0dXJuIGEudG9TdHJpbmcoKSA9PT0gYi50b1N0cmluZygpO1xuXG4gICAga2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggIT09IE9iamVjdC5rZXlzKGIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwga2V5c1tpXSkpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghZXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyB0cnVlIGlmIGJvdGggTmFOLCBmYWxzZSBvdGhlcndpc2VcbiAgcmV0dXJuIGEhPT1hICYmIGIhPT1iO1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdHJhdmVyc2UgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzY2hlbWEsIG9wdHMsIGNiKSB7XG4gIC8vIExlZ2FjeSBzdXBwb3J0IGZvciB2MC4zLjEgYW5kIGVhcmxpZXIuXG4gIGlmICh0eXBlb2Ygb3B0cyA9PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzO1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuXG4gIGNiID0gb3B0cy5jYiB8fCBjYjtcbiAgdmFyIHByZSA9ICh0eXBlb2YgY2IgPT0gJ2Z1bmN0aW9uJykgPyBjYiA6IGNiLnByZSB8fCBmdW5jdGlvbigpIHt9O1xuICB2YXIgcG9zdCA9IGNiLnBvc3QgfHwgZnVuY3Rpb24oKSB7fTtcblxuICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2hlbWEsICcnLCBzY2hlbWEpO1xufTtcblxuXG50cmF2ZXJzZS5rZXl3b3JkcyA9IHtcbiAgYWRkaXRpb25hbEl0ZW1zOiB0cnVlLFxuICBpdGVtczogdHJ1ZSxcbiAgY29udGFpbnM6IHRydWUsXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICBwcm9wZXJ0eU5hbWVzOiB0cnVlLFxuICBub3Q6IHRydWUsXG4gIGlmOiB0cnVlLFxuICB0aGVuOiB0cnVlLFxuICBlbHNlOiB0cnVlXG59O1xuXG50cmF2ZXJzZS5hcnJheUtleXdvcmRzID0ge1xuICBpdGVtczogdHJ1ZSxcbiAgYWxsT2Y6IHRydWUsXG4gIGFueU9mOiB0cnVlLFxuICBvbmVPZjogdHJ1ZVxufTtcblxudHJhdmVyc2UucHJvcHNLZXl3b3JkcyA9IHtcbiAgJGRlZnM6IHRydWUsXG4gIGRlZmluaXRpb25zOiB0cnVlLFxuICBwcm9wZXJ0aWVzOiB0cnVlLFxuICBwYXR0ZXJuUHJvcGVydGllczogdHJ1ZSxcbiAgZGVwZW5kZW5jaWVzOiB0cnVlXG59O1xuXG50cmF2ZXJzZS5za2lwS2V5d29yZHMgPSB7XG4gIGRlZmF1bHQ6IHRydWUsXG4gIGVudW06IHRydWUsXG4gIGNvbnN0OiB0cnVlLFxuICByZXF1aXJlZDogdHJ1ZSxcbiAgbWF4aW11bTogdHJ1ZSxcbiAgbWluaW11bTogdHJ1ZSxcbiAgZXhjbHVzaXZlTWF4aW11bTogdHJ1ZSxcbiAgZXhjbHVzaXZlTWluaW11bTogdHJ1ZSxcbiAgbXVsdGlwbGVPZjogdHJ1ZSxcbiAgbWF4TGVuZ3RoOiB0cnVlLFxuICBtaW5MZW5ndGg6IHRydWUsXG4gIHBhdHRlcm46IHRydWUsXG4gIGZvcm1hdDogdHJ1ZSxcbiAgbWF4SXRlbXM6IHRydWUsXG4gIG1pbkl0ZW1zOiB0cnVlLFxuICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgbWF4UHJvcGVydGllczogdHJ1ZSxcbiAgbWluUHJvcGVydGllczogdHJ1ZVxufTtcblxuXG5mdW5jdGlvbiBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpIHtcbiAgaWYgKHNjaGVtYSAmJiB0eXBlb2Ygc2NoZW1hID09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICBwcmUoc2NoZW1hLCBqc29uUHRyLCByb290U2NoZW1hLCBwYXJlbnRKc29uUHRyLCBwYXJlbnRLZXl3b3JkLCBwYXJlbnRTY2hlbWEsIGtleUluZGV4KTtcbiAgICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICB2YXIgc2NoID0gc2NoZW1hW2tleV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2gpKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdHJhdmVyc2UuYXJyYXlLZXl3b3Jkcykge1xuICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxzY2gubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2hbaV0sIGpzb25QdHIgKyAnLycgKyBrZXkgKyAnLycgKyBpLCByb290U2NoZW1hLCBqc29uUHRyLCBrZXksIHNjaGVtYSwgaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5IGluIHRyYXZlcnNlLnByb3BzS2V5d29yZHMpIHtcbiAgICAgICAgaWYgKHNjaCAmJiB0eXBlb2Ygc2NoID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBzY2gpXG4gICAgICAgICAgICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2hbcHJvcF0sIGpzb25QdHIgKyAnLycgKyBrZXkgKyAnLycgKyBlc2NhcGVKc29uUHRyKHByb3ApLCByb290U2NoZW1hLCBqc29uUHRyLCBrZXksIHNjaGVtYSwgcHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5IGluIHRyYXZlcnNlLmtleXdvcmRzIHx8IChvcHRzLmFsbEtleXMgJiYgIShrZXkgaW4gdHJhdmVyc2Uuc2tpcEtleXdvcmRzKSkpIHtcbiAgICAgICAgX3RyYXZlcnNlKG9wdHMsIHByZSwgcG9zdCwgc2NoLCBqc29uUHRyICsgJy8nICsga2V5LCByb290U2NoZW1hLCBqc29uUHRyLCBrZXksIHNjaGVtYSk7XG4gICAgICB9XG4gICAgfVxuICAgIHBvc3Qoc2NoZW1hLCBqc29uUHRyLCByb290U2NoZW1hLCBwYXJlbnRKc29uUHRyLCBwYXJlbnRLZXl3b3JkLCBwYXJlbnRTY2hlbWEsIGtleUluZGV4KTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGVzY2FwZUpzb25QdHIoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvfi9nLCAnfjAnKS5yZXBsYWNlKC9cXC8vZywgJ34xJyk7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTY2hlbWFSZWZzID0gZXhwb3J0cy5yZXNvbHZlVXJsID0gZXhwb3J0cy5ub3JtYWxpemVJZCA9IGV4cG9ydHMuX2dldEZ1bGxQYXRoID0gZXhwb3J0cy5nZXRGdWxsUGF0aCA9IGV4cG9ydHMuaW5saW5lUmVmID0gdm9pZCAwO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IGVxdWFsID0gcmVxdWlyZShcImZhc3QtZGVlcC1lcXVhbFwiKTtcbmNvbnN0IHRyYXZlcnNlID0gcmVxdWlyZShcImpzb24tc2NoZW1hLXRyYXZlcnNlXCIpO1xuLy8gVE9ETyByZWZhY3RvciB0byB1c2Uga2V5d29yZCBkZWZpbml0aW9uc1xuY29uc3QgU0lNUExFX0lOTElORUQgPSBuZXcgU2V0KFtcbiAgICBcInR5cGVcIixcbiAgICBcImZvcm1hdFwiLFxuICAgIFwicGF0dGVyblwiLFxuICAgIFwibWF4TGVuZ3RoXCIsXG4gICAgXCJtaW5MZW5ndGhcIixcbiAgICBcIm1heFByb3BlcnRpZXNcIixcbiAgICBcIm1pblByb3BlcnRpZXNcIixcbiAgICBcIm1heEl0ZW1zXCIsXG4gICAgXCJtaW5JdGVtc1wiLFxuICAgIFwibWF4aW11bVwiLFxuICAgIFwibWluaW11bVwiLFxuICAgIFwidW5pcXVlSXRlbXNcIixcbiAgICBcIm11bHRpcGxlT2ZcIixcbiAgICBcInJlcXVpcmVkXCIsXG4gICAgXCJlbnVtXCIsXG4gICAgXCJjb25zdFwiLFxuXSk7XG5mdW5jdGlvbiBpbmxpbmVSZWYoc2NoZW1hLCBsaW1pdCA9IHRydWUpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKGxpbWl0ID09PSB0cnVlKVxuICAgICAgICByZXR1cm4gIWhhc1JlZihzY2hlbWEpO1xuICAgIGlmICghbGltaXQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gY291bnRLZXlzKHNjaGVtYSkgPD0gbGltaXQ7XG59XG5leHBvcnRzLmlubGluZVJlZiA9IGlubGluZVJlZjtcbmNvbnN0IFJFRl9LRVlXT1JEUyA9IG5ldyBTZXQoW1xuICAgIFwiJHJlZlwiLFxuICAgIFwiJHJlY3Vyc2l2ZVJlZlwiLFxuICAgIFwiJHJlY3Vyc2l2ZUFuY2hvclwiLFxuICAgIFwiJGR5bmFtaWNSZWZcIixcbiAgICBcIiRkeW5hbWljQW5jaG9yXCIsXG5dKTtcbmZ1bmN0aW9uIGhhc1JlZihzY2hlbWEpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKFJFRl9LRVlXT1JEUy5oYXMoa2V5KSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCBzY2ggPSBzY2hlbWFba2V5XTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoKSAmJiBzY2guc29tZShoYXNSZWYpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoID09IFwib2JqZWN0XCIgJiYgaGFzUmVmKHNjaCkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gY291bnRLZXlzKHNjaGVtYSkge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwiJHJlZlwiKVxuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBpZiAoU0lNUExFX0lOTElORUQuaGFzKGtleSkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFba2V5XSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmVhY2hJdGVtKShzY2hlbWFba2V5XSwgKHNjaCkgPT4gKGNvdW50ICs9IGNvdW50S2V5cyhzY2gpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50ID09PSBJbmZpbml0eSlcbiAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9XG4gICAgcmV0dXJuIGNvdW50O1xufVxuZnVuY3Rpb24gZ2V0RnVsbFBhdGgocmVzb2x2ZXIsIGlkID0gXCJcIiwgbm9ybWFsaXplKSB7XG4gICAgaWYgKG5vcm1hbGl6ZSAhPT0gZmFsc2UpXG4gICAgICAgIGlkID0gbm9ybWFsaXplSWQoaWQpO1xuICAgIGNvbnN0IHAgPSByZXNvbHZlci5wYXJzZShpZCk7XG4gICAgcmV0dXJuIF9nZXRGdWxsUGF0aChyZXNvbHZlciwgcCk7XG59XG5leHBvcnRzLmdldEZ1bGxQYXRoID0gZ2V0RnVsbFBhdGg7XG5mdW5jdGlvbiBfZ2V0RnVsbFBhdGgocmVzb2x2ZXIsIHApIHtcbiAgICBjb25zdCBzZXJpYWxpemVkID0gcmVzb2x2ZXIuc2VyaWFsaXplKHApO1xuICAgIHJldHVybiBzZXJpYWxpemVkLnNwbGl0KFwiI1wiKVswXSArIFwiI1wiO1xufVxuZXhwb3J0cy5fZ2V0RnVsbFBhdGggPSBfZ2V0RnVsbFBhdGg7XG5jb25zdCBUUkFJTElOR19TTEFTSF9IQVNIID0gLyNcXC8/JC87XG5mdW5jdGlvbiBub3JtYWxpemVJZChpZCkge1xuICAgIHJldHVybiBpZCA/IGlkLnJlcGxhY2UoVFJBSUxJTkdfU0xBU0hfSEFTSCwgXCJcIikgOiBcIlwiO1xufVxuZXhwb3J0cy5ub3JtYWxpemVJZCA9IG5vcm1hbGl6ZUlkO1xuZnVuY3Rpb24gcmVzb2x2ZVVybChyZXNvbHZlciwgYmFzZUlkLCBpZCkge1xuICAgIGlkID0gbm9ybWFsaXplSWQoaWQpO1xuICAgIHJldHVybiByZXNvbHZlci5yZXNvbHZlKGJhc2VJZCwgaWQpO1xufVxuZXhwb3J0cy5yZXNvbHZlVXJsID0gcmVzb2x2ZVVybDtcbmNvbnN0IEFOQ0hPUiA9IC9eW2Etel9dWy1hLXowLTkuX10qJC9pO1xuZnVuY3Rpb24gZ2V0U2NoZW1hUmVmcyhzY2hlbWEsIGJhc2VJZCkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4ge307XG4gICAgY29uc3QgeyBzY2hlbWFJZCwgdXJpUmVzb2x2ZXIgfSA9IHRoaXMub3B0cztcbiAgICBjb25zdCBzY2hJZCA9IG5vcm1hbGl6ZUlkKHNjaGVtYVtzY2hlbWFJZF0gfHwgYmFzZUlkKTtcbiAgICBjb25zdCBiYXNlSWRzID0geyBcIlwiOiBzY2hJZCB9O1xuICAgIGNvbnN0IHBhdGhQcmVmaXggPSBnZXRGdWxsUGF0aCh1cmlSZXNvbHZlciwgc2NoSWQsIGZhbHNlKTtcbiAgICBjb25zdCBsb2NhbFJlZnMgPSB7fTtcbiAgICBjb25zdCBzY2hlbWFSZWZzID0gbmV3IFNldCgpO1xuICAgIHRyYXZlcnNlKHNjaGVtYSwgeyBhbGxLZXlzOiB0cnVlIH0sIChzY2gsIGpzb25QdHIsIF8sIHBhcmVudEpzb25QdHIpID0+IHtcbiAgICAgICAgaWYgKHBhcmVudEpzb25QdHIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoUHJlZml4ICsganNvblB0cjtcbiAgICAgICAgbGV0IGlubmVyQmFzZUlkID0gYmFzZUlkc1twYXJlbnRKc29uUHRyXTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hbc2NoZW1hSWRdID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBpbm5lckJhc2VJZCA9IGFkZFJlZi5jYWxsKHRoaXMsIHNjaFtzY2hlbWFJZF0pO1xuICAgICAgICBhZGRBbmNob3IuY2FsbCh0aGlzLCBzY2guJGFuY2hvcik7XG4gICAgICAgIGFkZEFuY2hvci5jYWxsKHRoaXMsIHNjaC4kZHluYW1pY0FuY2hvcik7XG4gICAgICAgIGJhc2VJZHNbanNvblB0cl0gPSBpbm5lckJhc2VJZDtcbiAgICAgICAgZnVuY3Rpb24gYWRkUmVmKHJlZikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgICAgICAgY29uc3QgX3Jlc29sdmUgPSB0aGlzLm9wdHMudXJpUmVzb2x2ZXIucmVzb2x2ZTtcbiAgICAgICAgICAgIHJlZiA9IG5vcm1hbGl6ZUlkKGlubmVyQmFzZUlkID8gX3Jlc29sdmUoaW5uZXJCYXNlSWQsIHJlZikgOiByZWYpO1xuICAgICAgICAgICAgaWYgKHNjaGVtYVJlZnMuaGFzKHJlZikpXG4gICAgICAgICAgICAgICAgdGhyb3cgYW1iaWd1b3MocmVmKTtcbiAgICAgICAgICAgIHNjaGVtYVJlZnMuYWRkKHJlZik7XG4gICAgICAgICAgICBsZXQgc2NoT3JSZWYgPSB0aGlzLnJlZnNbcmVmXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoT3JSZWYgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICBzY2hPclJlZiA9IHRoaXMucmVmc1tzY2hPclJlZl07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBjaGVja0FtYmlndW9zUmVmKHNjaCwgc2NoT3JSZWYuc2NoZW1hLCByZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVmICE9PSBub3JtYWxpemVJZChmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmWzBdID09PSBcIiNcIikge1xuICAgICAgICAgICAgICAgICAgICBjaGVja0FtYmlndW9zUmVmKHNjaCwgbG9jYWxSZWZzW3JlZl0sIHJlZik7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsUmVmc1tyZWZdID0gc2NoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZzW3JlZl0gPSBmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVmO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFkZEFuY2hvcihhbmNob3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYW5jaG9yID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFOQ0hPUi50ZXN0KGFuY2hvcikpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhbmNob3IgXCIke2FuY2hvcn1cImApO1xuICAgICAgICAgICAgICAgIGFkZFJlZi5jYWxsKHRoaXMsIGAjJHthbmNob3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbG9jYWxSZWZzO1xuICAgIGZ1bmN0aW9uIGNoZWNrQW1iaWd1b3NSZWYoc2NoMSwgc2NoMiwgcmVmKSB7XG4gICAgICAgIGlmIChzY2gyICE9PSB1bmRlZmluZWQgJiYgIWVxdWFsKHNjaDEsIHNjaDIpKVxuICAgICAgICAgICAgdGhyb3cgYW1iaWd1b3MocmVmKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYW1iaWd1b3MocmVmKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoYHJlZmVyZW5jZSBcIiR7cmVmfVwiIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgc2NoZW1hYCk7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRTY2hlbWFSZWZzID0gZ2V0U2NoZW1hUmVmcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc29sdmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0RGF0YSA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IGV4cG9ydHMudmFsaWRhdGVGdW5jdGlvbkNvZGUgPSB2b2lkIDA7XG5jb25zdCBib29sU2NoZW1hXzEgPSByZXF1aXJlKFwiLi9ib29sU2NoZW1hXCIpO1xuY29uc3QgZGF0YVR5cGVfMSA9IHJlcXVpcmUoXCIuL2RhdGFUeXBlXCIpO1xuY29uc3QgYXBwbGljYWJpbGl0eV8xID0gcmVxdWlyZShcIi4vYXBwbGljYWJpbGl0eVwiKTtcbmNvbnN0IGRhdGFUeXBlXzIgPSByZXF1aXJlKFwiLi9kYXRhVHlwZVwiKTtcbmNvbnN0IGRlZmF1bHRzXzEgPSByZXF1aXJlKFwiLi9kZWZhdWx0c1wiKTtcbmNvbnN0IGtleXdvcmRfMSA9IHJlcXVpcmUoXCIuL2tleXdvcmRcIik7XG5jb25zdCBzdWJzY2hlbWFfMSA9IHJlcXVpcmUoXCIuL3N1YnNjaGVtYVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi9uYW1lc1wiKTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuLi9yZXNvbHZlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG4vLyBzY2hlbWEgY29tcGlsYXRpb24gLSBnZW5lcmF0ZXMgdmFsaWRhdGlvbiBmdW5jdGlvbiwgc3Vic2NoZW1hQ29kZSAoYmVsb3cpIGlzIHVzZWQgZm9yIHN1YnNjaGVtYXNcbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25Db2RlKGl0KSB7XG4gICAgaWYgKGlzU2NoZW1hT2JqKGl0KSkge1xuICAgICAgICBjaGVja0tleXdvcmRzKGl0KTtcbiAgICAgICAgaWYgKHNjaGVtYUN4dEhhc1J1bGVzKGl0KSkge1xuICAgICAgICAgICAgdG9wU2NoZW1hT2JqQ29kZShpdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFsaWRhdGVGdW5jdGlvbihpdCwgKCkgPT4gKDAsIGJvb2xTY2hlbWFfMS50b3BCb29sT3JFbXB0eVNjaGVtYSkoaXQpKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVGdW5jdGlvbkNvZGUgPSB2YWxpZGF0ZUZ1bmN0aW9uQ29kZTtcbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb24oeyBnZW4sIHZhbGlkYXRlTmFtZSwgc2NoZW1hLCBzY2hlbWFFbnYsIG9wdHMgfSwgYm9keSkge1xuICAgIGlmIChvcHRzLmNvZGUuZXM1KSB7XG4gICAgICAgIGdlbi5mdW5jKHZhbGlkYXRlTmFtZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZGF0YX0sICR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH1gLCBzY2hlbWFFbnYuJGFzeW5jLCAoKSA9PiB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBcInVzZSBzdHJpY3RcIjsgJHtmdW5jU291cmNlVXJsKHNjaGVtYSwgb3B0cyl9YCk7XG4gICAgICAgICAgICBkZXN0cnVjdHVyZVZhbEN4dEVTNShnZW4sIG9wdHMpO1xuICAgICAgICAgICAgZ2VuLmNvZGUoYm9keSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmZ1bmModmFsaWRhdGVOYW1lLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5kYXRhfSwgJHtkZXN0cnVjdHVyZVZhbEN4dChvcHRzKX1gLCBzY2hlbWFFbnYuJGFzeW5jLCAoKSA9PiBnZW4uY29kZShmdW5jU291cmNlVXJsKHNjaGVtYSwgb3B0cykpLmNvZGUoYm9keSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlc3RydWN0dXJlVmFsQ3h0KG9wdHMpIHtcbiAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgeyR7bmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aH09XCJcIiwgJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YX0sICR7bmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eX0sICR7bmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhfT0ke25hbWVzXzEuZGVmYXVsdC5kYXRhfSR7b3B0cy5keW5hbWljUmVmID8gKDAsIGNvZGVnZW5fMS5fKSBgLCAke25hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9yc309e31gIDogY29kZWdlbl8xLm5pbH19PXt9YDtcbn1cbmZ1bmN0aW9uIGRlc3RydWN0dXJlVmFsQ3h0RVM1KGdlbiwgb3B0cykge1xuICAgIGdlbi5pZihuYW1lc18xLmRlZmF1bHQudmFsQ3h0LCAoKSA9PiB7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGh9YCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YX1gKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eX1gKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucm9vdERhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQucm9vdERhdGF9YCk7XG4gICAgICAgIGlmIChvcHRzLmR5bmFtaWNSZWYpXG4gICAgICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9ycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9yc31gKTtcbiAgICB9LCAoKSA9PiB7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5fKSBgXCJcImApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucm9vdERhdGEsIG5hbWVzXzEuZGVmYXVsdC5kYXRhKTtcbiAgICAgICAgaWYgKG9wdHMuZHluYW1pY1JlZilcbiAgICAgICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdG9wU2NoZW1hT2JqQ29kZShpdCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBvcHRzLCBnZW4gfSA9IGl0O1xuICAgIHZhbGlkYXRlRnVuY3Rpb24oaXQsICgpID0+IHtcbiAgICAgICAgaWYgKG9wdHMuJGNvbW1lbnQgJiYgc2NoZW1hLiRjb21tZW50KVxuICAgICAgICAgICAgY29tbWVudEtleXdvcmQoaXQpO1xuICAgICAgICBjaGVja05vRGVmYXVsdChpdCk7XG4gICAgICAgIGdlbi5sZXQobmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsIG51bGwpO1xuICAgICAgICBnZW4ubGV0KG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsIDApO1xuICAgICAgICBpZiAob3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIHJlc2V0RXZhbHVhdGVkKGl0KTtcbiAgICAgICAgdHlwZUFuZEtleXdvcmRzKGl0KTtcbiAgICAgICAgcmV0dXJuUmVzdWx0cyhpdCk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xufVxuZnVuY3Rpb24gcmVzZXRFdmFsdWF0ZWQoaXQpIHtcbiAgICAvLyBUT0RPIG1heWJlIHNvbWUgaG9vayB0byBleGVjdXRlIGl0IGluIHRoZSBlbmQgdG8gY2hlY2sgd2hldGhlciBwcm9wcy9pdGVtcyBhcmUgTmFtZSwgYXMgaW4gYXNzaWduRXZhbHVhdGVkXG4gICAgY29uc3QgeyBnZW4sIHZhbGlkYXRlTmFtZSB9ID0gaXQ7XG4gICAgaXQuZXZhbHVhdGVkID0gZ2VuLmNvbnN0KFwiZXZhbHVhdGVkXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5ldmFsdWF0ZWRgKTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5ldmFsdWF0ZWR9LmR5bmFtaWNQcm9wc2AsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5ldmFsdWF0ZWR9LnByb3BzYCwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCkpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0uZHluYW1pY0l0ZW1zYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0uaXRlbXNgLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKSk7XG59XG5mdW5jdGlvbiBmdW5jU291cmNlVXJsKHNjaGVtYSwgb3B0cykge1xuICAgIGNvbnN0IHNjaElkID0gdHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmIHNjaGVtYVtvcHRzLnNjaGVtYUlkXTtcbiAgICByZXR1cm4gc2NoSWQgJiYgKG9wdHMuY29kZS5zb3VyY2UgfHwgb3B0cy5jb2RlLnByb2Nlc3MpID8gKDAsIGNvZGVnZW5fMS5fKSBgLyojIHNvdXJjZVVSTD0ke3NjaElkfSAqL2AgOiBjb2RlZ2VuXzEubmlsO1xufVxuLy8gc2NoZW1hIGNvbXBpbGF0aW9uIC0gdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHJlY3Vyc2l2ZWx5IHRvIGdlbmVyYXRlIGNvZGUgZm9yIHN1Yi1zY2hlbWFzXG5mdW5jdGlvbiBzdWJzY2hlbWFDb2RlKGl0LCB2YWxpZCkge1xuICAgIGlmIChpc1NjaGVtYU9iaihpdCkpIHtcbiAgICAgICAgY2hlY2tLZXl3b3JkcyhpdCk7XG4gICAgICAgIGlmIChzY2hlbWFDeHRIYXNSdWxlcyhpdCkpIHtcbiAgICAgICAgICAgIHN1YlNjaGVtYU9iakNvZGUoaXQsIHZhbGlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAoMCwgYm9vbFNjaGVtYV8xLmJvb2xPckVtcHR5U2NoZW1hKShpdCwgdmFsaWQpO1xufVxuZnVuY3Rpb24gc2NoZW1hQ3h0SGFzUnVsZXMoeyBzY2hlbWEsIHNlbGYgfSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gIXNjaGVtYTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpXG4gICAgICAgIGlmIChzZWxmLlJVTEVTLmFsbFtrZXldKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNTY2hlbWFPYmooaXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGl0LnNjaGVtYSAhPSBcImJvb2xlYW5cIjtcbn1cbmZ1bmN0aW9uIHN1YlNjaGVtYU9iakNvZGUoaXQsIHZhbGlkKSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIGdlbiwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKG9wdHMuJGNvbW1lbnQgJiYgc2NoZW1hLiRjb21tZW50KVxuICAgICAgICBjb21tZW50S2V5d29yZChpdCk7XG4gICAgdXBkYXRlQ29udGV4dChpdCk7XG4gICAgY2hlY2tBc3luY1NjaGVtYShpdCk7XG4gICAgY29uc3QgZXJyc0NvdW50ID0gZ2VuLmNvbnN0KFwiX2VycnNcIiwgbmFtZXNfMS5kZWZhdWx0LmVycm9ycyk7XG4gICAgdHlwZUFuZEtleXdvcmRzKGl0LCBlcnJzQ291bnQpO1xuICAgIC8vIFRPRE8gdmFyXG4gICAgZ2VuLnZhcih2YWxpZCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJzQ291bnR9ID09PSAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9YCk7XG59XG5mdW5jdGlvbiBjaGVja0tleXdvcmRzKGl0KSB7XG4gICAgKDAsIHV0aWxfMS5jaGVja1Vua25vd25SdWxlcykoaXQpO1xuICAgIGNoZWNrUmVmc0FuZEtleXdvcmRzKGl0KTtcbn1cbmZ1bmN0aW9uIHR5cGVBbmRLZXl3b3JkcyhpdCwgZXJyc0NvdW50KSB7XG4gICAgaWYgKGl0Lm9wdHMuanRkKVxuICAgICAgICByZXR1cm4gc2NoZW1hS2V5d29yZHMoaXQsIFtdLCBmYWxzZSwgZXJyc0NvdW50KTtcbiAgICBjb25zdCB0eXBlcyA9ICgwLCBkYXRhVHlwZV8xLmdldFNjaGVtYVR5cGVzKShpdC5zY2hlbWEpO1xuICAgIGNvbnN0IGNoZWNrZWRUeXBlcyA9ICgwLCBkYXRhVHlwZV8xLmNvZXJjZUFuZENoZWNrRGF0YVR5cGUpKGl0LCB0eXBlcyk7XG4gICAgc2NoZW1hS2V5d29yZHMoaXQsIHR5cGVzLCAhY2hlY2tlZFR5cGVzLCBlcnJzQ291bnQpO1xufVxuZnVuY3Rpb24gY2hlY2tSZWZzQW5kS2V5d29yZHMoaXQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgZXJyU2NoZW1hUGF0aCwgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYS4kcmVmICYmIG9wdHMuaWdub3JlS2V5d29yZHNXaXRoUmVmICYmICgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgc2VsZi5SVUxFUykpIHtcbiAgICAgICAgc2VsZi5sb2dnZXIud2FybihgJHJlZjoga2V5d29yZHMgaWdub3JlZCBpbiBzY2hlbWEgYXQgcGF0aCBcIiR7ZXJyU2NoZW1hUGF0aH1cImApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrTm9EZWZhdWx0KGl0KSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIG9wdHMgfSA9IGl0O1xuICAgIGlmIChzY2hlbWEuZGVmYXVsdCAhPT0gdW5kZWZpbmVkICYmIG9wdHMudXNlRGVmYXVsdHMgJiYgb3B0cy5zdHJpY3RTY2hlbWEpIHtcbiAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBcImRlZmF1bHQgaXMgaWdub3JlZCBpbiB0aGUgc2NoZW1hIHJvb3RcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dChpdCkge1xuICAgIGNvbnN0IHNjaElkID0gaXQuc2NoZW1hW2l0Lm9wdHMuc2NoZW1hSWRdO1xuICAgIGlmIChzY2hJZClcbiAgICAgICAgaXQuYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKShpdC5vcHRzLnVyaVJlc29sdmVyLCBpdC5iYXNlSWQsIHNjaElkKTtcbn1cbmZ1bmN0aW9uIGNoZWNrQXN5bmNTY2hlbWEoaXQpIHtcbiAgICBpZiAoaXQuc2NoZW1hLiRhc3luYyAmJiAhaXQuc2NoZW1hRW52LiRhc3luYylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXN5bmMgc2NoZW1hIGluIHN5bmMgc2NoZW1hXCIpO1xufVxuZnVuY3Rpb24gY29tbWVudEtleXdvcmQoeyBnZW4sIHNjaGVtYUVudiwgc2NoZW1hLCBlcnJTY2hlbWFQYXRoLCBvcHRzIH0pIHtcbiAgICBjb25zdCBtc2cgPSBzY2hlbWEuJGNvbW1lbnQ7XG4gICAgaWYgKG9wdHMuJGNvbW1lbnQgPT09IHRydWUpIHtcbiAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuc2VsZn0ubG9nZ2VyLmxvZygke21zZ30pYCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRzLiRjb21tZW50ID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25zdCBzY2hlbWFQYXRoID0gKDAsIGNvZGVnZW5fMS5zdHIpIGAke2VyclNjaGVtYVBhdGh9LyRjb21tZW50YDtcbiAgICAgICAgY29uc3Qgcm9vdE5hbWUgPSBnZW4uc2NvcGVWYWx1ZShcInJvb3RcIiwgeyByZWY6IHNjaGVtYUVudi5yb290IH0pO1xuICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5zZWxmfS5vcHRzLiRjb21tZW50KCR7bXNnfSwgJHtzY2hlbWFQYXRofSwgJHtyb290TmFtZX0uc2NoZW1hKWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJldHVyblJlc3VsdHMoaXQpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hRW52LCB2YWxpZGF0ZU5hbWUsIFZhbGlkYXRpb25FcnJvciwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYUVudi4kYXN5bmMpIHtcbiAgICAgICAgLy8gVE9ETyBhc3NpZ24gdW5ldmFsdWF0ZWRcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc30gPT09IDBgLCAoKSA9PiBnZW4ucmV0dXJuKG5hbWVzXzEuZGVmYXVsdC5kYXRhKSwgKCkgPT4gZ2VuLnRocm93KCgwLCBjb2RlZ2VuXzEuXykgYG5ldyAke1ZhbGlkYXRpb25FcnJvcn0oJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30pYCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXJyb3JzYCwgbmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMpO1xuICAgICAgICBpZiAob3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIGFzc2lnbkV2YWx1YXRlZChpdCk7XG4gICAgICAgIGdlbi5yZXR1cm4oKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSA9PT0gMGApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2lnbkV2YWx1YXRlZCh7IGdlbiwgZXZhbHVhdGVkLCBwcm9wcywgaXRlbXMgfSkge1xuICAgIGlmIChwcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKVxuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXZhbHVhdGVkfS5wcm9wc2AsIHByb3BzKTtcbiAgICBpZiAoaXRlbXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSlcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2V2YWx1YXRlZH0uaXRlbXNgLCBpdGVtcyk7XG59XG5mdW5jdGlvbiBzY2hlbWFLZXl3b3JkcyhpdCwgdHlwZXMsIHR5cGVFcnJvcnMsIGVycnNDb3VudCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGRhdGEsIGFsbEVycm9ycywgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgY29uc3QgeyBSVUxFUyB9ID0gc2VsZjtcbiAgICBpZiAoc2NoZW1hLiRyZWYgJiYgKG9wdHMuaWdub3JlS2V5d29yZHNXaXRoUmVmIHx8ICEoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2hlbWEsIFJVTEVTKSkpIHtcbiAgICAgICAgZ2VuLmJsb2NrKCgpID0+IGtleXdvcmRDb2RlKGl0LCBcIiRyZWZcIiwgUlVMRVMuYWxsLiRyZWYuZGVmaW5pdGlvbikpOyAvLyBUT0RPIHR5cGVjYXN0XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFvcHRzLmp0ZClcbiAgICAgICAgY2hlY2tTdHJpY3RUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGdlbi5ibG9jaygoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgUlVMRVMucnVsZXMpXG4gICAgICAgICAgICBncm91cEtleXdvcmRzKGdyb3VwKTtcbiAgICAgICAgZ3JvdXBLZXl3b3JkcyhSVUxFUy5wb3N0KTtcbiAgICB9KTtcbiAgICBmdW5jdGlvbiBncm91cEtleXdvcmRzKGdyb3VwKSB7XG4gICAgICAgIGlmICghKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VHcm91cCkoc2NoZW1hLCBncm91cCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChncm91cC50eXBlKSB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGRhdGFUeXBlXzIuY2hlY2tEYXRhVHlwZSkoZ3JvdXAudHlwZSwgZGF0YSwgb3B0cy5zdHJpY3ROdW1iZXJzKSk7XG4gICAgICAgICAgICBpdGVyYXRlS2V5d29yZHMoaXQsIGdyb3VwKTtcbiAgICAgICAgICAgIGlmICh0eXBlcy5sZW5ndGggPT09IDEgJiYgdHlwZXNbMF0gPT09IGdyb3VwLnR5cGUgJiYgdHlwZUVycm9ycykge1xuICAgICAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgICAgICAgICAgKDAsIGRhdGFUeXBlXzIucmVwb3J0VHlwZUVycm9yKShpdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZW4uZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gbWFrZSBpdCBcIm9rXCIgY2FsbD9cbiAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSA9PT0gJHtlcnJzQ291bnQgfHwgMH1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpdGVyYXRlS2V5d29yZHMoaXQsIGdyb3VwKSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgb3B0czogeyB1c2VEZWZhdWx0cyB9LCB9ID0gaXQ7XG4gICAgaWYgKHVzZURlZmF1bHRzKVxuICAgICAgICAoMCwgZGVmYXVsdHNfMS5hc3NpZ25EZWZhdWx0cykoaXQsIGdyb3VwLnR5cGUpO1xuICAgIGdlbi5ibG9jaygoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBncm91cC5ydWxlcykge1xuICAgICAgICAgICAgaWYgKCgwLCBhcHBsaWNhYmlsaXR5XzEuc2hvdWxkVXNlUnVsZSkoc2NoZW1hLCBydWxlKSkge1xuICAgICAgICAgICAgICAgIGtleXdvcmRDb2RlKGl0LCBydWxlLmtleXdvcmQsIHJ1bGUuZGVmaW5pdGlvbiwgZ3JvdXAudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNoZWNrU3RyaWN0VHlwZXMoaXQsIHR5cGVzKSB7XG4gICAgaWYgKGl0LnNjaGVtYUVudi5tZXRhIHx8ICFpdC5vcHRzLnN0cmljdFR5cGVzKVxuICAgICAgICByZXR1cm47XG4gICAgY2hlY2tDb250ZXh0VHlwZXMoaXQsIHR5cGVzKTtcbiAgICBpZiAoIWl0Lm9wdHMuYWxsb3dVbmlvblR5cGVzKVxuICAgICAgICBjaGVja011bHRpcGxlVHlwZXMoaXQsIHR5cGVzKTtcbiAgICBjaGVja0tleXdvcmRUeXBlcyhpdCwgaXQuZGF0YVR5cGVzKTtcbn1cbmZ1bmN0aW9uIGNoZWNrQ29udGV4dFR5cGVzKGl0LCB0eXBlcykge1xuICAgIGlmICghdHlwZXMubGVuZ3RoKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKCFpdC5kYXRhVHlwZXMubGVuZ3RoKSB7XG4gICAgICAgIGl0LmRhdGFUeXBlcyA9IHR5cGVzO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHR5cGVzLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgaWYgKCFpbmNsdWRlc1R5cGUoaXQuZGF0YVR5cGVzLCB0KSkge1xuICAgICAgICAgICAgc3RyaWN0VHlwZXNFcnJvcihpdCwgYHR5cGUgXCIke3R9XCIgbm90IGFsbG93ZWQgYnkgY29udGV4dCBcIiR7aXQuZGF0YVR5cGVzLmpvaW4oXCIsXCIpfVwiYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBuYXJyb3dTY2hlbWFUeXBlcyhpdCwgdHlwZXMpO1xufVxuZnVuY3Rpb24gY2hlY2tNdWx0aXBsZVR5cGVzKGl0LCB0cykge1xuICAgIGlmICh0cy5sZW5ndGggPiAxICYmICEodHMubGVuZ3RoID09PSAyICYmIHRzLmluY2x1ZGVzKFwibnVsbFwiKSkpIHtcbiAgICAgICAgc3RyaWN0VHlwZXNFcnJvcihpdCwgXCJ1c2UgYWxsb3dVbmlvblR5cGVzIHRvIGFsbG93IHVuaW9uIHR5cGUga2V5d29yZFwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja0tleXdvcmRUeXBlcyhpdCwgdHMpIHtcbiAgICBjb25zdCBydWxlcyA9IGl0LnNlbGYuUlVMRVMuYWxsO1xuICAgIGZvciAoY29uc3Qga2V5d29yZCBpbiBydWxlcykge1xuICAgICAgICBjb25zdCBydWxlID0gcnVsZXNba2V5d29yZF07XG4gICAgICAgIGlmICh0eXBlb2YgcnVsZSA9PSBcIm9iamVjdFwiICYmICgwLCBhcHBsaWNhYmlsaXR5XzEuc2hvdWxkVXNlUnVsZSkoaXQuc2NoZW1hLCBydWxlKSkge1xuICAgICAgICAgICAgY29uc3QgeyB0eXBlIH0gPSBydWxlLmRlZmluaXRpb247XG4gICAgICAgICAgICBpZiAodHlwZS5sZW5ndGggJiYgIXR5cGUuc29tZSgodCkgPT4gaGFzQXBwbGljYWJsZVR5cGUodHMsIHQpKSkge1xuICAgICAgICAgICAgICAgIHN0cmljdFR5cGVzRXJyb3IoaXQsIGBtaXNzaW5nIHR5cGUgXCIke3R5cGUuam9pbihcIixcIil9XCIgZm9yIGtleXdvcmQgXCIke2tleXdvcmR9XCJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGhhc0FwcGxpY2FibGVUeXBlKHNjaFRzLCBrd2RUKSB7XG4gICAgcmV0dXJuIHNjaFRzLmluY2x1ZGVzKGt3ZFQpIHx8IChrd2RUID09PSBcIm51bWJlclwiICYmIHNjaFRzLmluY2x1ZGVzKFwiaW50ZWdlclwiKSk7XG59XG5mdW5jdGlvbiBpbmNsdWRlc1R5cGUodHMsIHQpIHtcbiAgICByZXR1cm4gdHMuaW5jbHVkZXModCkgfHwgKHQgPT09IFwiaW50ZWdlclwiICYmIHRzLmluY2x1ZGVzKFwibnVtYmVyXCIpKTtcbn1cbmZ1bmN0aW9uIG5hcnJvd1NjaGVtYVR5cGVzKGl0LCB3aXRoVHlwZXMpIHtcbiAgICBjb25zdCB0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgdCBvZiBpdC5kYXRhVHlwZXMpIHtcbiAgICAgICAgaWYgKGluY2x1ZGVzVHlwZSh3aXRoVHlwZXMsIHQpKVxuICAgICAgICAgICAgdHMucHVzaCh0KTtcbiAgICAgICAgZWxzZSBpZiAod2l0aFR5cGVzLmluY2x1ZGVzKFwiaW50ZWdlclwiKSAmJiB0ID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgdHMucHVzaChcImludGVnZXJcIik7XG4gICAgfVxuICAgIGl0LmRhdGFUeXBlcyA9IHRzO1xufVxuZnVuY3Rpb24gc3RyaWN0VHlwZXNFcnJvcihpdCwgbXNnKSB7XG4gICAgY29uc3Qgc2NoZW1hUGF0aCA9IGl0LnNjaGVtYUVudi5iYXNlSWQgKyBpdC5lcnJTY2hlbWFQYXRoO1xuICAgIG1zZyArPSBgIGF0IFwiJHtzY2hlbWFQYXRofVwiIChzdHJpY3RUeXBlcylgO1xuICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBpdC5vcHRzLnN0cmljdFR5cGVzKTtcbn1cbmNsYXNzIEtleXdvcmRDeHQge1xuICAgIGNvbnN0cnVjdG9yKGl0LCBkZWYsIGtleXdvcmQpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS52YWxpZGF0ZUtleXdvcmRVc2FnZSkoaXQsIGRlZiwga2V5d29yZCk7XG4gICAgICAgIHRoaXMuZ2VuID0gaXQuZ2VuO1xuICAgICAgICB0aGlzLmFsbEVycm9ycyA9IGl0LmFsbEVycm9ycztcbiAgICAgICAgdGhpcy5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgdGhpcy5kYXRhID0gaXQuZGF0YTtcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBpdC5zY2hlbWFba2V5d29yZF07XG4gICAgICAgIHRoaXMuJGRhdGEgPSBkZWYuJGRhdGEgJiYgaXQub3B0cy4kZGF0YSAmJiB0aGlzLnNjaGVtYSAmJiB0aGlzLnNjaGVtYS4kZGF0YTtcbiAgICAgICAgdGhpcy5zY2hlbWFWYWx1ZSA9ICgwLCB1dGlsXzEuc2NoZW1hUmVmT3JWYWwpKGl0LCB0aGlzLnNjaGVtYSwga2V5d29yZCwgdGhpcy4kZGF0YSk7XG4gICAgICAgIHRoaXMuc2NoZW1hVHlwZSA9IGRlZi5zY2hlbWFUeXBlO1xuICAgICAgICB0aGlzLnBhcmVudFNjaGVtYSA9IGl0LnNjaGVtYTtcbiAgICAgICAgdGhpcy5wYXJhbXMgPSB7fTtcbiAgICAgICAgdGhpcy5pdCA9IGl0O1xuICAgICAgICB0aGlzLmRlZiA9IGRlZjtcbiAgICAgICAgaWYgKHRoaXMuJGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2NoZW1hQ29kZSA9IGl0Lmdlbi5jb25zdChcInZTY2hlbWFcIiwgZ2V0RGF0YSh0aGlzLiRkYXRhLCBpdCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb2RlID0gdGhpcy5zY2hlbWFWYWx1ZTtcbiAgICAgICAgICAgIGlmICghKDAsIGtleXdvcmRfMS52YWxpZFNjaGVtYVR5cGUpKHRoaXMuc2NoZW1hLCBkZWYuc2NoZW1hVHlwZSwgZGVmLmFsbG93VW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtrZXl3b3JkfSB2YWx1ZSBtdXN0IGJlICR7SlNPTi5zdHJpbmdpZnkoZGVmLnNjaGVtYVR5cGUpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcImNvZGVcIiBpbiBkZWYgPyBkZWYudHJhY2tFcnJvcnMgOiBkZWYuZXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5lcnJzQ291bnQgPSBpdC5nZW4uY29uc3QoXCJfZXJyc1wiLCBuYW1lc18xLmRlZmF1bHQuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQoY29uZGl0aW9uLCBzdWNjZXNzQWN0aW9uLCBmYWlsQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZmFpbFJlc3VsdCgoMCwgY29kZWdlbl8xLm5vdCkoY29uZGl0aW9uKSwgc3VjY2Vzc0FjdGlvbiwgZmFpbEFjdGlvbik7XG4gICAgfVxuICAgIGZhaWxSZXN1bHQoY29uZGl0aW9uLCBzdWNjZXNzQWN0aW9uLCBmYWlsQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZ2VuLmlmKGNvbmRpdGlvbik7XG4gICAgICAgIGlmIChmYWlsQWN0aW9uKVxuICAgICAgICAgICAgZmFpbEFjdGlvbigpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmVycm9yKCk7XG4gICAgICAgIGlmIChzdWNjZXNzQWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmdlbi5lbHNlKCk7XG4gICAgICAgICAgICBzdWNjZXNzQWN0aW9uKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5lbmRJZigpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmVsc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwYXNzKGNvbmRpdGlvbiwgZmFpbEFjdGlvbikge1xuICAgICAgICB0aGlzLmZhaWxSZXN1bHQoKDAsIGNvZGVnZW5fMS5ub3QpKGNvbmRpdGlvbiksIHVuZGVmaW5lZCwgZmFpbEFjdGlvbik7XG4gICAgfVxuICAgIGZhaWwoY29uZGl0aW9uKSB7XG4gICAgICAgIGlmIChjb25kaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvcigpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5pZihmYWxzZSk7IC8vIHRoaXMgYnJhbmNoIHdpbGwgYmUgcmVtb3ZlZCBieSBnZW4ub3B0aW1pemVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdlbi5pZihjb25kaXRpb24pO1xuICAgICAgICB0aGlzLmVycm9yKCk7XG4gICAgICAgIGlmICh0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgIHRoaXMuZ2VuLmVuZElmKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZ2VuLmVsc2UoKTtcbiAgICB9XG4gICAgZmFpbCRkYXRhKGNvbmRpdGlvbikge1xuICAgICAgICBpZiAoIXRoaXMuJGRhdGEpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mYWlsKGNvbmRpdGlvbik7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hQ29kZSB9ID0gdGhpcztcbiAgICAgICAgdGhpcy5mYWlsKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gIT09IHVuZGVmaW5lZCAmJiAoJHsoMCwgY29kZWdlbl8xLm9yKSh0aGlzLmludmFsaWQkZGF0YSgpLCBjb25kaXRpb24pfSlgKTtcbiAgICB9XG4gICAgZXJyb3IoYXBwZW5kLCBlcnJvclBhcmFtcywgZXJyb3JQYXRocykge1xuICAgICAgICBpZiAoZXJyb3JQYXJhbXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1zKGVycm9yUGFyYW1zKTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGFwcGVuZCwgZXJyb3JQYXRocyk7XG4gICAgICAgICAgICB0aGlzLnNldFBhcmFtcyh7fSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKTtcbiAgICB9XG4gICAgX2Vycm9yKGFwcGVuZCwgZXJyb3JQYXRocykge1xuICAgICAgICA7XG4gICAgICAgIChhcHBlbmQgPyBlcnJvcnNfMS5yZXBvcnRFeHRyYUVycm9yIDogZXJyb3JzXzEucmVwb3J0RXJyb3IpKHRoaXMsIHRoaXMuZGVmLmVycm9yLCBlcnJvclBhdGhzKTtcbiAgICB9XG4gICAgJGRhdGFFcnJvcigpIHtcbiAgICAgICAgKDAsIGVycm9yc18xLnJlcG9ydEVycm9yKSh0aGlzLCB0aGlzLmRlZi4kZGF0YUVycm9yIHx8IGVycm9yc18xLmtleXdvcmQkRGF0YUVycm9yKTtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmVycnNDb3VudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhZGQgXCJ0cmFja0Vycm9yc1wiIHRvIGtleXdvcmQgZGVmaW5pdGlvbicpO1xuICAgICAgICAoMCwgZXJyb3JzXzEucmVzZXRFcnJvcnNDb3VudCkodGhpcy5nZW4sIHRoaXMuZXJyc0NvdW50KTtcbiAgICB9XG4gICAgb2soY29uZCkge1xuICAgICAgICBpZiAoIXRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgdGhpcy5nZW4uaWYoY29uZCk7XG4gICAgfVxuICAgIHNldFBhcmFtcyhvYmosIGFzc2lnbikge1xuICAgICAgICBpZiAoYXNzaWduKVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnBhcmFtcywgb2JqKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBvYmo7XG4gICAgfVxuICAgIGJsb2NrJGRhdGEodmFsaWQsIGNvZGVCbG9jaywgJGRhdGFWYWxpZCA9IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgdGhpcy5nZW4uYmxvY2soKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVjayRkYXRhKHZhbGlkLCAkZGF0YVZhbGlkKTtcbiAgICAgICAgICAgIGNvZGVCbG9jaygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2hlY2skZGF0YSh2YWxpZCA9IGNvZGVnZW5fMS5uaWwsICRkYXRhVmFsaWQgPSBjb2RlZ2VuXzEubmlsKSB7XG4gICAgICAgIGlmICghdGhpcy4kZGF0YSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYUNvZGUsIHNjaGVtYVR5cGUsIGRlZiB9ID0gdGhpcztcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEub3IpKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gPT09IHVuZGVmaW5lZGAsICRkYXRhVmFsaWQpKTtcbiAgICAgICAgaWYgKHZhbGlkICE9PSBjb2RlZ2VuXzEubmlsKVxuICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgIGlmIChzY2hlbWFUeXBlLmxlbmd0aCB8fCBkZWYudmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgICAgIGdlbi5lbHNlSWYodGhpcy5pbnZhbGlkJGRhdGEoKSk7XG4gICAgICAgICAgICB0aGlzLiRkYXRhRXJyb3IoKTtcbiAgICAgICAgICAgIGlmICh2YWxpZCAhPT0gY29kZWdlbl8xLm5pbClcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICB9XG4gICAgaW52YWxpZCRkYXRhKCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hQ29kZSwgc2NoZW1hVHlwZSwgZGVmLCBpdCB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEub3IpKHdyb25nJERhdGFUeXBlKCksIGludmFsaWQkRGF0YVNjaGVtYSgpKTtcbiAgICAgICAgZnVuY3Rpb24gd3JvbmckRGF0YVR5cGUoKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hVHlwZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoIShzY2hlbWFDb2RlIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3QgPSBBcnJheS5pc0FycmF5KHNjaGVtYVR5cGUpID8gc2NoZW1hVHlwZSA6IFtzY2hlbWFUeXBlXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgZGF0YVR5cGVfMi5jaGVja0RhdGFUeXBlcykoc3QsIHNjaGVtYUNvZGUsIGl0Lm9wdHMuc3RyaWN0TnVtYmVycywgZGF0YVR5cGVfMi5EYXRhVHlwZS5Xcm9uZyl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEubmlsO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGludmFsaWQkRGF0YVNjaGVtYSgpIHtcbiAgICAgICAgICAgIGlmIChkZWYudmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0ZVNjaGVtYVJlZiA9IGdlbi5zY29wZVZhbHVlKFwidmFsaWRhdGUkZGF0YVwiLCB7IHJlZjogZGVmLnZhbGlkYXRlU2NoZW1hIH0pOyAvLyBUT0RPIHZhbHVlLmNvZGUgZm9yIHN0YW5kYWxvbmVcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgISR7dmFsaWRhdGVTY2hlbWFSZWZ9KCR7c2NoZW1hQ29kZX0pYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEubmlsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN1YnNjaGVtYShhcHBsLCB2YWxpZCkge1xuICAgICAgICBjb25zdCBzdWJzY2hlbWEgPSAoMCwgc3Vic2NoZW1hXzEuZ2V0U3Vic2NoZW1hKSh0aGlzLml0LCBhcHBsKTtcbiAgICAgICAgKDAsIHN1YnNjaGVtYV8xLmV4dGVuZFN1YnNjaGVtYURhdGEpKHN1YnNjaGVtYSwgdGhpcy5pdCwgYXBwbCk7XG4gICAgICAgICgwLCBzdWJzY2hlbWFfMS5leHRlbmRTdWJzY2hlbWFNb2RlKShzdWJzY2hlbWEsIGFwcGwpO1xuICAgICAgICBjb25zdCBuZXh0Q29udGV4dCA9IHsgLi4udGhpcy5pdCwgLi4uc3Vic2NoZW1hLCBpdGVtczogdW5kZWZpbmVkLCBwcm9wczogdW5kZWZpbmVkIH07XG4gICAgICAgIHN1YnNjaGVtYUNvZGUobmV4dENvbnRleHQsIHZhbGlkKTtcbiAgICAgICAgcmV0dXJuIG5leHRDb250ZXh0O1xuICAgIH1cbiAgICBtZXJnZUV2YWx1YXRlZChzY2hlbWFDeHQsIHRvTmFtZSkge1xuICAgICAgICBjb25zdCB7IGl0LCBnZW4gfSA9IHRoaXM7XG4gICAgICAgIGlmICghaXQub3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGl0LnByb3BzICE9PSB0cnVlICYmIHNjaGVtYUN4dC5wcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sIHNjaGVtYUN4dC5wcm9wcywgaXQucHJvcHMsIHRvTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lml0ZW1zICE9PSB0cnVlICYmIHNjaGVtYUN4dC5pdGVtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIHNjaGVtYUN4dC5pdGVtcywgaXQuaXRlbXMsIHRvTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hlbWFDeHQsIHZhbGlkKSB7XG4gICAgICAgIGNvbnN0IHsgaXQsIGdlbiB9ID0gdGhpcztcbiAgICAgICAgaWYgKGl0Lm9wdHMudW5ldmFsdWF0ZWQgJiYgKGl0LnByb3BzICE9PSB0cnVlIHx8IGl0Lml0ZW1zICE9PSB0cnVlKSkge1xuICAgICAgICAgICAgZ2VuLmlmKHZhbGlkLCAoKSA9PiB0aGlzLm1lcmdlRXZhbHVhdGVkKHNjaGVtYUN4dCwgY29kZWdlbl8xLk5hbWUpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5LZXl3b3JkQ3h0ID0gS2V5d29yZEN4dDtcbmZ1bmN0aW9uIGtleXdvcmRDb2RlKGl0LCBrZXl3b3JkLCBkZWYsIHJ1bGVUeXBlKSB7XG4gICAgY29uc3QgY3h0ID0gbmV3IEtleXdvcmRDeHQoaXQsIGRlZiwga2V5d29yZCk7XG4gICAgaWYgKFwiY29kZVwiIGluIGRlZikge1xuICAgICAgICBkZWYuY29kZShjeHQsIHJ1bGVUeXBlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3h0LiRkYXRhICYmIGRlZi52YWxpZGF0ZSkge1xuICAgICAgICAoMCwga2V5d29yZF8xLmZ1bmNLZXl3b3JkQ29kZSkoY3h0LCBkZWYpO1xuICAgIH1cbiAgICBlbHNlIGlmIChcIm1hY3JvXCIgaW4gZGVmKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEubWFjcm9LZXl3b3JkQ29kZSkoY3h0LCBkZWYpO1xuICAgIH1cbiAgICBlbHNlIGlmIChkZWYuY29tcGlsZSB8fCBkZWYudmFsaWRhdGUpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS5mdW5jS2V5d29yZENvZGUpKGN4dCwgZGVmKTtcbiAgICB9XG59XG5jb25zdCBKU09OX1BPSU5URVIgPSAvXlxcLyg/Oltefl18fjB8fjEpKiQvO1xuY29uc3QgUkVMQVRJVkVfSlNPTl9QT0lOVEVSID0gL14oWzAtOV0rKSgjfFxcLyg/Oltefl18fjB8fjEpKik/JC87XG5mdW5jdGlvbiBnZXREYXRhKCRkYXRhLCB7IGRhdGFMZXZlbCwgZGF0YU5hbWVzLCBkYXRhUGF0aEFyciB9KSB7XG4gICAgbGV0IGpzb25Qb2ludGVyO1xuICAgIGxldCBkYXRhO1xuICAgIGlmICgkZGF0YSA9PT0gXCJcIilcbiAgICAgICAgcmV0dXJuIG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YTtcbiAgICBpZiAoJGRhdGFbMF0gPT09IFwiL1wiKSB7XG4gICAgICAgIGlmICghSlNPTl9QT0lOVEVSLnRlc3QoJGRhdGEpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04tcG9pbnRlcjogJHskZGF0YX1gKTtcbiAgICAgICAganNvblBvaW50ZXIgPSAkZGF0YTtcbiAgICAgICAgZGF0YSA9IG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBSRUxBVElWRV9KU09OX1BPSU5URVIuZXhlYygkZGF0YSk7XG4gICAgICAgIGlmICghbWF0Y2hlcylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBKU09OLXBvaW50ZXI6ICR7JGRhdGF9YCk7XG4gICAgICAgIGNvbnN0IHVwID0gK21hdGNoZXNbMV07XG4gICAgICAgIGpzb25Qb2ludGVyID0gbWF0Y2hlc1syXTtcbiAgICAgICAgaWYgKGpzb25Qb2ludGVyID09PSBcIiNcIikge1xuICAgICAgICAgICAgaWYgKHVwID49IGRhdGFMZXZlbClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2coXCJwcm9wZXJ0eS9pbmRleFwiLCB1cCkpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFQYXRoQXJyW2RhdGFMZXZlbCAtIHVwXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXAgPiBkYXRhTGV2ZWwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2coXCJkYXRhXCIsIHVwKSk7XG4gICAgICAgIGRhdGEgPSBkYXRhTmFtZXNbZGF0YUxldmVsIC0gdXBdO1xuICAgICAgICBpZiAoIWpzb25Qb2ludGVyKVxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGxldCBleHByID0gZGF0YTtcbiAgICBjb25zdCBzZWdtZW50cyA9IGpzb25Qb2ludGVyLnNwbGl0KFwiL1wiKTtcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICAgIGRhdGEgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KSgoMCwgdXRpbF8xLnVuZXNjYXBlSnNvblBvaW50ZXIpKHNlZ21lbnQpKX1gO1xuICAgICAgICAgICAgZXhwciA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZXhwcn0gJiYgJHtkYXRhfWA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cHI7XG4gICAgZnVuY3Rpb24gZXJyb3JNc2cocG9pbnRlclR5cGUsIHVwKSB7XG4gICAgICAgIHJldHVybiBgQ2Fubm90IGFjY2VzcyAke3BvaW50ZXJUeXBlfSAke3VwfSBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJHtkYXRhTGV2ZWx9YDtcbiAgICB9XG59XG5leHBvcnRzLmdldERhdGEgPSBnZXREYXRhO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcnMpIHtcbiAgICAgICAgc3VwZXIoXCJ2YWxpZGF0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICAgIHRoaXMuYWp2ID0gdGhpcy52YWxpZGF0aW9uID0gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBWYWxpZGF0aW9uRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12YWxpZGF0aW9uX2Vycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlXCIpO1xuY2xhc3MgTWlzc2luZ1JlZkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHJlc29sdmVyLCBiYXNlSWQsIHJlZiwgbXNnKSB7XG4gICAgICAgIHN1cGVyKG1zZyB8fCBgY2FuJ3QgcmVzb2x2ZSByZWZlcmVuY2UgJHtyZWZ9IGZyb20gaWQgJHtiYXNlSWR9YCk7XG4gICAgICAgIHRoaXMubWlzc2luZ1JlZiA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkocmVzb2x2ZXIsIGJhc2VJZCwgcmVmKTtcbiAgICAgICAgdGhpcy5taXNzaW5nU2NoZW1hID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoKDAsIHJlc29sdmVfMS5nZXRGdWxsUGF0aCkocmVzb2x2ZXIsIHRoaXMubWlzc2luZ1JlZikpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IE1pc3NpbmdSZWZFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZl9lcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlU2NoZW1hID0gZXhwb3J0cy5nZXRDb21waWxpbmdTY2hlbWEgPSBleHBvcnRzLnJlc29sdmVSZWYgPSBleHBvcnRzLmNvbXBpbGVTY2hlbWEgPSBleHBvcnRzLlNjaGVtYUVudiA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi4vcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuL25hbWVzXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vdmFsaWRhdGVcIik7XG5jbGFzcyBTY2hlbWFFbnYge1xuICAgIGNvbnN0cnVjdG9yKGVudikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgICAgICB0aGlzLmR5bmFtaWNBbmNob3JzID0ge307XG4gICAgICAgIGxldCBzY2hlbWE7XG4gICAgICAgIGlmICh0eXBlb2YgZW52LnNjaGVtYSA9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgc2NoZW1hID0gZW52LnNjaGVtYTtcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBlbnYuc2NoZW1hO1xuICAgICAgICB0aGlzLnNjaGVtYUlkID0gZW52LnNjaGVtYUlkO1xuICAgICAgICB0aGlzLnJvb3QgPSBlbnYucm9vdCB8fCB0aGlzO1xuICAgICAgICB0aGlzLmJhc2VJZCA9IChfYSA9IGVudi5iYXNlSWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKHNjaGVtYSA9PT0gbnVsbCB8fCBzY2hlbWEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaGVtYVtlbnYuc2NoZW1hSWQgfHwgXCIkaWRcIl0pO1xuICAgICAgICB0aGlzLnNjaGVtYVBhdGggPSBlbnYuc2NoZW1hUGF0aDtcbiAgICAgICAgdGhpcy5sb2NhbFJlZnMgPSBlbnYubG9jYWxSZWZzO1xuICAgICAgICB0aGlzLm1ldGEgPSBlbnYubWV0YTtcbiAgICAgICAgdGhpcy4kYXN5bmMgPSBzY2hlbWEgPT09IG51bGwgfHwgc2NoZW1hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2hlbWEuJGFzeW5jO1xuICAgICAgICB0aGlzLnJlZnMgPSB7fTtcbiAgICB9XG59XG5leHBvcnRzLlNjaGVtYUVudiA9IFNjaGVtYUVudjtcbi8vIGxldCBjb2RlU2l6ZSA9IDBcbi8vIGxldCBub2RlQ291bnQgPSAwXG4vLyBDb21waWxlcyBzY2hlbWEgaW4gU2NoZW1hRW52XG5mdW5jdGlvbiBjb21waWxlU2NoZW1hKHNjaCkge1xuICAgIC8vIFRPRE8gcmVmYWN0b3IgLSByZW1vdmUgY29tcGlsYXRpb25zXG4gICAgY29uc3QgX3NjaCA9IGdldENvbXBpbGluZ1NjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG4gICAgaWYgKF9zY2gpXG4gICAgICAgIHJldHVybiBfc2NoO1xuICAgIGNvbnN0IHJvb3RJZCA9ICgwLCByZXNvbHZlXzEuZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgc2NoLnJvb3QuYmFzZUlkKTsgLy8gVE9ETyBpZiBnZXRGdWxsUGF0aCByZW1vdmVkIDEgdGVzdHMgZmFpbHNcbiAgICBjb25zdCB7IGVzNSwgbGluZXMgfSA9IHRoaXMub3B0cy5jb2RlO1xuICAgIGNvbnN0IHsgb3duUHJvcGVydGllcyB9ID0gdGhpcy5vcHRzO1xuICAgIGNvbnN0IGdlbiA9IG5ldyBjb2RlZ2VuXzEuQ29kZUdlbih0aGlzLnNjb3BlLCB7IGVzNSwgbGluZXMsIG93blByb3BlcnRpZXMgfSk7XG4gICAgbGV0IF9WYWxpZGF0aW9uRXJyb3I7XG4gICAgaWYgKHNjaC4kYXN5bmMpIHtcbiAgICAgICAgX1ZhbGlkYXRpb25FcnJvciA9IGdlbi5zY29wZVZhbHVlKFwiRXJyb3JcIiwge1xuICAgICAgICAgICAgcmVmOiB2YWxpZGF0aW9uX2Vycm9yXzEuZGVmYXVsdCxcbiAgICAgICAgICAgIGNvZGU6ICgwLCBjb2RlZ2VuXzEuXykgYHJlcXVpcmUoXCJhanYvZGlzdC9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIikuZGVmYXVsdGAsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZGF0ZU5hbWUgPSBnZW4uc2NvcGVOYW1lKFwidmFsaWRhdGVcIik7XG4gICAgc2NoLnZhbGlkYXRlTmFtZSA9IHZhbGlkYXRlTmFtZTtcbiAgICBjb25zdCBzY2hlbWFDeHQgPSB7XG4gICAgICAgIGdlbixcbiAgICAgICAgYWxsRXJyb3JzOiB0aGlzLm9wdHMuYWxsRXJyb3JzLFxuICAgICAgICBkYXRhOiBuYW1lc18xLmRlZmF1bHQuZGF0YSxcbiAgICAgICAgcGFyZW50RGF0YTogbmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsXG4gICAgICAgIHBhcmVudERhdGFQcm9wZXJ0eTogbmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eSxcbiAgICAgICAgZGF0YU5hbWVzOiBbbmFtZXNfMS5kZWZhdWx0LmRhdGFdLFxuICAgICAgICBkYXRhUGF0aEFycjogW2NvZGVnZW5fMS5uaWxdLCAvLyBUT0RPIGNhbiBpdHMgbGVuZ3RoIGJlIHVzZWQgYXMgZGF0YUxldmVsIGlmIG5pbCBpcyByZW1vdmVkP1xuICAgICAgICBkYXRhTGV2ZWw6IDAsXG4gICAgICAgIGRhdGFUeXBlczogW10sXG4gICAgICAgIGRlZmluZWRQcm9wZXJ0aWVzOiBuZXcgU2V0KCksXG4gICAgICAgIHRvcFNjaGVtYVJlZjogZ2VuLnNjb3BlVmFsdWUoXCJzY2hlbWFcIiwgdGhpcy5vcHRzLmNvZGUuc291cmNlID09PSB0cnVlXG4gICAgICAgICAgICA/IHsgcmVmOiBzY2guc2NoZW1hLCBjb2RlOiAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkoc2NoLnNjaGVtYSkgfVxuICAgICAgICAgICAgOiB7IHJlZjogc2NoLnNjaGVtYSB9KSxcbiAgICAgICAgdmFsaWRhdGVOYW1lLFxuICAgICAgICBWYWxpZGF0aW9uRXJyb3I6IF9WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIHNjaGVtYTogc2NoLnNjaGVtYSxcbiAgICAgICAgc2NoZW1hRW52OiBzY2gsXG4gICAgICAgIHJvb3RJZCxcbiAgICAgICAgYmFzZUlkOiBzY2guYmFzZUlkIHx8IHJvb3RJZCxcbiAgICAgICAgc2NoZW1hUGF0aDogY29kZWdlbl8xLm5pbCxcbiAgICAgICAgZXJyU2NoZW1hUGF0aDogc2NoLnNjaGVtYVBhdGggfHwgKHRoaXMub3B0cy5qdGQgPyBcIlwiIDogXCIjXCIpLFxuICAgICAgICBlcnJvclBhdGg6ICgwLCBjb2RlZ2VuXzEuXykgYFwiXCJgLFxuICAgICAgICBvcHRzOiB0aGlzLm9wdHMsXG4gICAgICAgIHNlbGY6IHRoaXMsXG4gICAgfTtcbiAgICBsZXQgc291cmNlQ29kZTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLl9jb21waWxhdGlvbnMuYWRkKHNjaCk7XG4gICAgICAgICgwLCB2YWxpZGF0ZV8xLnZhbGlkYXRlRnVuY3Rpb25Db2RlKShzY2hlbWFDeHQpO1xuICAgICAgICBnZW4ub3B0aW1pemUodGhpcy5vcHRzLmNvZGUub3B0aW1pemUpO1xuICAgICAgICAvLyBnZW4ub3B0aW1pemUoMSlcbiAgICAgICAgY29uc3QgdmFsaWRhdGVDb2RlID0gZ2VuLnRvU3RyaW5nKCk7XG4gICAgICAgIHNvdXJjZUNvZGUgPSBgJHtnZW4uc2NvcGVSZWZzKG5hbWVzXzEuZGVmYXVsdC5zY29wZSl9cmV0dXJuICR7dmFsaWRhdGVDb2RlfWA7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKChjb2RlU2l6ZSArPSBzb3VyY2VDb2RlLmxlbmd0aCksIChub2RlQ291bnQgKz0gZ2VuLm5vZGVDb3VudCkpXG4gICAgICAgIGlmICh0aGlzLm9wdHMuY29kZS5wcm9jZXNzKVxuICAgICAgICAgICAgc291cmNlQ29kZSA9IHRoaXMub3B0cy5jb2RlLnByb2Nlc3Moc291cmNlQ29kZSwgc2NoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5cXG5cXG4gKioqIFxcblwiLCBzb3VyY2VDb2RlKVxuICAgICAgICBjb25zdCBtYWtlVmFsaWRhdGUgPSBuZXcgRnVuY3Rpb24oYCR7bmFtZXNfMS5kZWZhdWx0LnNlbGZ9YCwgYCR7bmFtZXNfMS5kZWZhdWx0LnNjb3BlfWAsIHNvdXJjZUNvZGUpO1xuICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IG1ha2VWYWxpZGF0ZSh0aGlzLCB0aGlzLnNjb3BlLmdldCgpKTtcbiAgICAgICAgdGhpcy5zY29wZS52YWx1ZSh2YWxpZGF0ZU5hbWUsIHsgcmVmOiB2YWxpZGF0ZSB9KTtcbiAgICAgICAgdmFsaWRhdGUuZXJyb3JzID0gbnVsbDtcbiAgICAgICAgdmFsaWRhdGUuc2NoZW1hID0gc2NoLnNjaGVtYTtcbiAgICAgICAgdmFsaWRhdGUuc2NoZW1hRW52ID0gc2NoO1xuICAgICAgICBpZiAoc2NoLiRhc3luYylcbiAgICAgICAgICAgIHZhbGlkYXRlLiRhc3luYyA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuY29kZS5zb3VyY2UgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlLnNvdXJjZSA9IHsgdmFsaWRhdGVOYW1lLCB2YWxpZGF0ZUNvZGUsIHNjb3BlVmFsdWVzOiBnZW4uX3ZhbHVlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdHMudW5ldmFsdWF0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvcHMsIGl0ZW1zIH0gPSBzY2hlbWFDeHQ7XG4gICAgICAgICAgICB2YWxpZGF0ZS5ldmFsdWF0ZWQgPSB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IHByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUgPyB1bmRlZmluZWQgOiBwcm9wcyxcbiAgICAgICAgICAgICAgICBpdGVtczogaXRlbXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IHVuZGVmaW5lZCA6IGl0ZW1zLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNQcm9wczogcHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSxcbiAgICAgICAgICAgICAgICBkeW5hbWljSXRlbXM6IGl0ZW1zIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlLnNvdXJjZSlcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZS5zb3VyY2UuZXZhbHVhdGVkID0gKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHZhbGlkYXRlLmV2YWx1YXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgc2NoLnZhbGlkYXRlID0gdmFsaWRhdGU7XG4gICAgICAgIHJldHVybiBzY2g7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGRlbGV0ZSBzY2gudmFsaWRhdGU7XG4gICAgICAgIGRlbGV0ZSBzY2gudmFsaWRhdGVOYW1lO1xuICAgICAgICBpZiAoc291cmNlQ29kZSlcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFwiRXJyb3IgY29tcGlsaW5nIHNjaGVtYSwgZnVuY3Rpb24gY29kZTpcIiwgc291cmNlQ29kZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxuXFxuXFxuICoqKiBcXG5cIiwgc291cmNlQ29kZSwgdGhpcy5vcHRzKVxuICAgICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fY29tcGlsYXRpb25zLmRlbGV0ZShzY2gpO1xuICAgIH1cbn1cbmV4cG9ydHMuY29tcGlsZVNjaGVtYSA9IGNvbXBpbGVTY2hlbWE7XG5mdW5jdGlvbiByZXNvbHZlUmVmKHJvb3QsIGJhc2VJZCwgcmVmKSB7XG4gICAgdmFyIF9hO1xuICAgIHJlZiA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsIHJlZik7XG4gICAgY29uc3Qgc2NoT3JGdW5jID0gcm9vdC5yZWZzW3JlZl07XG4gICAgaWYgKHNjaE9yRnVuYylcbiAgICAgICAgcmV0dXJuIHNjaE9yRnVuYztcbiAgICBsZXQgX3NjaCA9IHJlc29sdmUuY2FsbCh0aGlzLCByb290LCByZWYpO1xuICAgIGlmIChfc2NoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gKF9hID0gcm9vdC5sb2NhbFJlZnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtyZWZdOyAvLyBUT0RPIG1heWJlIGxvY2FsUmVmcyBzaG91bGQgaG9sZCBTY2hlbWFFbnZcbiAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBpZiAoc2NoZW1hKVxuICAgICAgICAgICAgX3NjaCA9IG5ldyBTY2hlbWFFbnYoeyBzY2hlbWEsIHNjaGVtYUlkLCByb290LCBiYXNlSWQgfSk7XG4gICAgfVxuICAgIGlmIChfc2NoID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybjtcbiAgICByZXR1cm4gKHJvb3QucmVmc1tyZWZdID0gaW5saW5lT3JDb21waWxlLmNhbGwodGhpcywgX3NjaCkpO1xufVxuZXhwb3J0cy5yZXNvbHZlUmVmID0gcmVzb2x2ZVJlZjtcbmZ1bmN0aW9uIGlubGluZU9yQ29tcGlsZShzY2gpIHtcbiAgICBpZiAoKDAsIHJlc29sdmVfMS5pbmxpbmVSZWYpKHNjaC5zY2hlbWEsIHRoaXMub3B0cy5pbmxpbmVSZWZzKSlcbiAgICAgICAgcmV0dXJuIHNjaC5zY2hlbWE7XG4gICAgcmV0dXJuIHNjaC52YWxpZGF0ZSA/IHNjaCA6IGNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLCBzY2gpO1xufVxuLy8gSW5kZXggb2Ygc2NoZW1hIGNvbXBpbGF0aW9uIGluIHRoZSBjdXJyZW50bHkgY29tcGlsZWQgbGlzdFxuZnVuY3Rpb24gZ2V0Q29tcGlsaW5nU2NoZW1hKHNjaEVudikge1xuICAgIGZvciAoY29uc3Qgc2NoIG9mIHRoaXMuX2NvbXBpbGF0aW9ucykge1xuICAgICAgICBpZiAoc2FtZVNjaGVtYUVudihzY2gsIHNjaEVudikpXG4gICAgICAgICAgICByZXR1cm4gc2NoO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0Q29tcGlsaW5nU2NoZW1hID0gZ2V0Q29tcGlsaW5nU2NoZW1hO1xuZnVuY3Rpb24gc2FtZVNjaGVtYUVudihzMSwgczIpIHtcbiAgICByZXR1cm4gczEuc2NoZW1hID09PSBzMi5zY2hlbWEgJiYgczEucm9vdCA9PT0gczIucm9vdCAmJiBzMS5iYXNlSWQgPT09IHMyLmJhc2VJZDtcbn1cbi8vIHJlc29sdmUgYW5kIGNvbXBpbGUgdGhlIHJlZmVyZW5jZXMgKCRyZWYpXG4vLyBUT0RPIHJldHVybnMgQW55U2NoZW1hT2JqZWN0IChpZiB0aGUgc2NoZW1hIGNhbiBiZSBpbmxpbmVkKSBvciB2YWxpZGF0aW9uIGZ1bmN0aW9uXG5mdW5jdGlvbiByZXNvbHZlKHJvb3QsIC8vIGluZm9ybWF0aW9uIGFib3V0IHRoZSByb290IHNjaGVtYSBmb3IgdGhlIGN1cnJlbnQgc2NoZW1hXG5yZWYgLy8gcmVmZXJlbmNlIHRvIHJlc29sdmVcbikge1xuICAgIGxldCBzY2g7XG4gICAgd2hpbGUgKHR5cGVvZiAoc2NoID0gdGhpcy5yZWZzW3JlZl0pID09IFwic3RyaW5nXCIpXG4gICAgICAgIHJlZiA9IHNjaDtcbiAgICByZXR1cm4gc2NoIHx8IHRoaXMuc2NoZW1hc1tyZWZdIHx8IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCByZWYpO1xufVxuLy8gUmVzb2x2ZSBzY2hlbWEsIGl0cyByb290IGFuZCBiYXNlSWRcbmZ1bmN0aW9uIHJlc29sdmVTY2hlbWEocm9vdCwgLy8gcm9vdCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHNjaGVtYSwgcmVmcyBUT0RPIGJlbG93IFNjaGVtYUVudiBpcyBhc3NpZ25lZCB0byBpdFxucmVmIC8vIHJlZmVyZW5jZSB0byByZXNvbHZlXG4pIHtcbiAgICBjb25zdCBwID0gdGhpcy5vcHRzLnVyaVJlc29sdmVyLnBhcnNlKHJlZik7XG4gICAgY29uc3QgcmVmUGF0aCA9ICgwLCByZXNvbHZlXzEuX2dldEZ1bGxQYXRoKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIHApO1xuICAgIGxldCBiYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLmdldEZ1bGxQYXRoKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIHJvb3QuYmFzZUlkLCB1bmRlZmluZWQpO1xuICAgIC8vIFRPRE8gYE9iamVjdC5rZXlzKHJvb3Quc2NoZW1hKS5sZW5ndGggPiAwYCBzaG91bGQgbm90IGJlIG5lZWRlZCAtIGJ1dCByZW1vdmluZyBicmVha3MgMiB0ZXN0c1xuICAgIGlmIChPYmplY3Qua2V5cyhyb290LnNjaGVtYSkubGVuZ3RoID4gMCAmJiByZWZQYXRoID09PSBiYXNlSWQpIHtcbiAgICAgICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcCwgcm9vdCk7XG4gICAgfVxuICAgIGNvbnN0IGlkID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkocmVmUGF0aCk7XG4gICAgY29uc3Qgc2NoT3JSZWYgPSB0aGlzLnJlZnNbaWRdIHx8IHRoaXMuc2NoZW1hc1tpZF07XG4gICAgaWYgKHR5cGVvZiBzY2hPclJlZiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IHNjaCA9IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCBzY2hPclJlZik7XG4gICAgICAgIGlmICh0eXBlb2YgKHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC5zY2hlbWEpICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCBzY2gpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIChzY2hPclJlZiA9PT0gbnVsbCB8fCBzY2hPclJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoT3JSZWYuc2NoZW1hKSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmICghc2NoT3JSZWYudmFsaWRhdGUpXG4gICAgICAgIGNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLCBzY2hPclJlZik7XG4gICAgaWYgKGlkID09PSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShyZWYpKSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSBzY2hPclJlZjtcbiAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBjb25zdCBzY2hJZCA9IHNjaGVtYVtzY2hlbWFJZF07XG4gICAgICAgIGlmIChzY2hJZClcbiAgICAgICAgICAgIGJhc2VJZCA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsIHNjaElkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTY2hlbWFFbnYoeyBzY2hlbWEsIHNjaGVtYUlkLCByb290LCBiYXNlSWQgfSk7XG4gICAgfVxuICAgIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHAsIHNjaE9yUmVmKTtcbn1cbmV4cG9ydHMucmVzb2x2ZVNjaGVtYSA9IHJlc29sdmVTY2hlbWE7XG5jb25zdCBQUkVWRU5UX1NDT1BFX0NIQU5HRSA9IG5ldyBTZXQoW1xuICAgIFwicHJvcGVydGllc1wiLFxuICAgIFwicGF0dGVyblByb3BlcnRpZXNcIixcbiAgICBcImVudW1cIixcbiAgICBcImRlcGVuZGVuY2llc1wiLFxuICAgIFwiZGVmaW5pdGlvbnNcIixcbl0pO1xuZnVuY3Rpb24gZ2V0SnNvblBvaW50ZXIocGFyc2VkUmVmLCB7IGJhc2VJZCwgc2NoZW1hLCByb290IH0pIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKCgoX2EgPSBwYXJzZWRSZWYuZnJhZ21lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgIT09IFwiL1wiKVxuICAgICAgICByZXR1cm47XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnNlZFJlZi5mcmFnbWVudC5zbGljZSgxKS5zcGxpdChcIi9cIikpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwYXJ0U2NoZW1hID0gc2NoZW1hWygwLCB1dGlsXzEudW5lc2NhcGVGcmFnbWVudCkocGFydCldO1xuICAgICAgICBpZiAocGFydFNjaGVtYSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzY2hlbWEgPSBwYXJ0U2NoZW1hO1xuICAgICAgICAvLyBUT0RPIFBSRVZFTlRfU0NPUEVfQ0hBTkdFIGNvdWxkIGJlIGRlZmluZWQgaW4ga2V5d29yZCBkZWY/XG4gICAgICAgIGNvbnN0IHNjaElkID0gdHlwZW9mIHNjaGVtYSA9PT0gXCJvYmplY3RcIiAmJiBzY2hlbWFbdGhpcy5vcHRzLnNjaGVtYUlkXTtcbiAgICAgICAgaWYgKCFQUkVWRU5UX1NDT1BFX0NIQU5HRS5oYXMocGFydCkgJiYgc2NoSWQpIHtcbiAgICAgICAgICAgIGJhc2VJZCA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsIHNjaElkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgZW52O1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hICE9IFwiYm9vbGVhblwiICYmIHNjaGVtYS4kcmVmICYmICEoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2hlbWEsIHRoaXMuUlVMRVMpKSB7XG4gICAgICAgIGNvbnN0ICRyZWYgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgYmFzZUlkLCBzY2hlbWEuJHJlZik7XG4gICAgICAgIGVudiA9IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCAkcmVmKTtcbiAgICB9XG4gICAgLy8gZXZlbiB0aG91Z2ggcmVzb2x1dGlvbiBmYWlsZWQgd2UgbmVlZCB0byByZXR1cm4gU2NoZW1hRW52IHRvIHRocm93IGV4Y2VwdGlvblxuICAgIC8vIHNvIHRoYXQgY29tcGlsZUFzeW5jIGxvYWRzIG1pc3Npbmcgc2NoZW1hLlxuICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICBlbnYgPSBlbnYgfHwgbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICBpZiAoZW52LnNjaGVtYSAhPT0gZW52LnJvb3Quc2NoZW1hKVxuICAgICAgICByZXR1cm4gZW52O1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKiogQHR5cGUgeyh2YWx1ZTogc3RyaW5nKSA9PiBib29sZWFufSAqL1xuY29uc3QgaXNVVUlEID0gUmVnRXhwLnByb3RvdHlwZS50ZXN0LmJpbmQoL15bXFxkYS1mXXs4fS1bXFxkYS1mXXs0fS1bXFxkYS1mXXs0fS1bXFxkYS1mXXs0fS1bXFxkYS1mXXsxMn0kL2l1KVxuXG4vKiogQHR5cGUgeyh2YWx1ZTogc3RyaW5nKSA9PiBib29sZWFufSAqL1xuY29uc3QgaXNJUHY0ID0gUmVnRXhwLnByb3RvdHlwZS50ZXN0LmJpbmQoL14oPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkezJ9fFsxLTldXFxkfFxcZClcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZHsyfXxbMS05XVxcZHxcXGQpJC91KVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gaW5wdXRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ0FycmF5VG9IZXhTdHJpcHBlZCAoaW5wdXQpIHtcbiAgbGV0IGFjYyA9ICcnXG4gIGxldCBjb2RlID0gMFxuICBsZXQgaSA9IDBcblxuICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjb2RlID0gaW5wdXRbaV0uY2hhckNvZGVBdCgwKVxuICAgIGlmIChjb2RlID09PSA0OCkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKCEoKGNvZGUgPj0gNDggJiYgY29kZSA8PSA1NykgfHwgKGNvZGUgPj0gNjUgJiYgY29kZSA8PSA3MCkgfHwgKGNvZGUgPj0gOTcgJiYgY29kZSA8PSAxMDIpKSkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGFjYyArPSBpbnB1dFtpXVxuICAgIGJyZWFrXG4gIH1cblxuICBmb3IgKGkgKz0gMTsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29kZSA9IGlucHV0W2ldLmNoYXJDb2RlQXQoMClcbiAgICBpZiAoISgoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3KSB8fCAoY29kZSA+PSA2NSAmJiBjb2RlIDw9IDcwKSB8fCAoY29kZSA+PSA5NyAmJiBjb2RlIDw9IDEwMikpKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgYWNjICs9IGlucHV0W2ldXG4gIH1cbiAgcmV0dXJuIGFjY1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEdldElQVjZSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXJyb3IgLSBJbmRpY2F0ZXMgaWYgdGhlcmUgd2FzIGFuIGVycm9yIHBhcnNpbmcgdGhlIElQdjYgYWRkcmVzcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhZGRyZXNzIC0gVGhlIHBhcnNlZCBJUHY2IGFkZHJlc3MuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3pvbmVdIC0gVGhlIHpvbmUgaWRlbnRpZmllciwgaWYgcHJlc2VudC5cbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IG5vblNpbXBsZURvbWFpbiA9IFJlZ0V4cC5wcm90b3R5cGUudGVzdC5iaW5kKC9bXiFcIiQmJygpKissXFwtLjs9X2BhLXp7fX5dL3UpXG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBidWZmZXJcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb25zdW1lSXNab25lIChidWZmZXIpIHtcbiAgYnVmZmVyLmxlbmd0aCA9IDBcbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGJ1ZmZlclxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhZGRyZXNzXG4gKiBAcGFyYW0ge0dldElQVjZSZXN1bHR9IG91dHB1dFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnN1bWVIZXh0ZXRzIChidWZmZXIsIGFkZHJlc3MsIG91dHB1dCkge1xuICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgIGNvbnN0IGhleCA9IHN0cmluZ0FycmF5VG9IZXhTdHJpcHBlZChidWZmZXIpXG4gICAgaWYgKGhleCAhPT0gJycpIHtcbiAgICAgIGFkZHJlc3MucHVzaChoZXgpXG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5lcnJvciA9IHRydWVcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBidWZmZXIubGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcmV0dXJucyB7R2V0SVBWNlJlc3VsdH1cbiAqL1xuZnVuY3Rpb24gZ2V0SVBWNiAoaW5wdXQpIHtcbiAgbGV0IHRva2VuQ291bnQgPSAwXG4gIGNvbnN0IG91dHB1dCA9IHsgZXJyb3I6IGZhbHNlLCBhZGRyZXNzOiAnJywgem9uZTogJycgfVxuICAvKiogQHR5cGUge0FycmF5PHN0cmluZz59ICovXG4gIGNvbnN0IGFkZHJlc3MgPSBbXVxuICAvKiogQHR5cGUge0FycmF5PHN0cmluZz59ICovXG4gIGNvbnN0IGJ1ZmZlciA9IFtdXG4gIGxldCBlbmRpcHY2RW5jb3VudGVyZWQgPSBmYWxzZVxuICBsZXQgZW5kSXB2NiA9IGZhbHNlXG5cbiAgbGV0IGNvbnN1bWUgPSBjb25zdW1lSGV4dGV0c1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjdXJzb3IgPSBpbnB1dFtpXVxuICAgIGlmIChjdXJzb3IgPT09ICdbJyB8fCBjdXJzb3IgPT09ICddJykgeyBjb250aW51ZSB9XG4gICAgaWYgKGN1cnNvciA9PT0gJzonKSB7XG4gICAgICBpZiAoZW5kaXB2NkVuY291bnRlcmVkID09PSB0cnVlKSB7XG4gICAgICAgIGVuZElwdjYgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoIWNvbnN1bWUoYnVmZmVyLCBhZGRyZXNzLCBvdXRwdXQpKSB7IGJyZWFrIH1cbiAgICAgIGlmICgrK3Rva2VuQ291bnQgPiA3KSB7XG4gICAgICAgIC8vIG5vdCB2YWxpZFxuICAgICAgICBvdXRwdXQuZXJyb3IgPSB0cnVlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAoaSA+IDAgJiYgaW5wdXRbaSAtIDFdID09PSAnOicpIHtcbiAgICAgICAgZW5kaXB2NkVuY291bnRlcmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgYWRkcmVzcy5wdXNoKCc6JylcbiAgICAgIGNvbnRpbnVlXG4gICAgfSBlbHNlIGlmIChjdXJzb3IgPT09ICclJykge1xuICAgICAgaWYgKCFjb25zdW1lKGJ1ZmZlciwgYWRkcmVzcywgb3V0cHV0KSkgeyBicmVhayB9XG4gICAgICAvLyBzd2l0Y2ggdG8gem9uZSBkZXRlY3Rpb25cbiAgICAgIGNvbnN1bWUgPSBjb25zdW1lSXNab25lXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZmZlci5wdXNoKGN1cnNvcilcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICB9XG4gIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGNvbnN1bWUgPT09IGNvbnN1bWVJc1pvbmUpIHtcbiAgICAgIG91dHB1dC56b25lID0gYnVmZmVyLmpvaW4oJycpXG4gICAgfSBlbHNlIGlmIChlbmRJcHY2KSB7XG4gICAgICBhZGRyZXNzLnB1c2goYnVmZmVyLmpvaW4oJycpKVxuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzLnB1c2goc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkKGJ1ZmZlcikpXG4gICAgfVxuICB9XG4gIG91dHB1dC5hZGRyZXNzID0gYWRkcmVzcy5qb2luKCcnKVxuICByZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTm9ybWFsaXplSVB2NlJlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGhvc3QgLSBUaGUgbm9ybWFsaXplZCBob3N0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtlc2NhcGVkSG9zdF0gLSBUaGUgZXNjYXBlZCBob3N0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBpc0lQVjYgLSBJbmRpY2F0ZXMgaWYgdGhlIGhvc3QgaXMgYW4gSVB2NiBhZGRyZXNzLlxuICovXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGhvc3RcbiAqIEByZXR1cm5zIHtOb3JtYWxpemVJUHY2UmVzdWx0fVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJUHY2IChob3N0KSB7XG4gIGlmIChmaW5kVG9rZW4oaG9zdCwgJzonKSA8IDIpIHsgcmV0dXJuIHsgaG9zdCwgaXNJUFY2OiBmYWxzZSB9IH1cbiAgY29uc3QgaXB2NiA9IGdldElQVjYoaG9zdClcblxuICBpZiAoIWlwdjYuZXJyb3IpIHtcbiAgICBsZXQgbmV3SG9zdCA9IGlwdjYuYWRkcmVzc1xuICAgIGxldCBlc2NhcGVkSG9zdCA9IGlwdjYuYWRkcmVzc1xuICAgIGlmIChpcHY2LnpvbmUpIHtcbiAgICAgIG5ld0hvc3QgKz0gJyUnICsgaXB2Ni56b25lXG4gICAgICBlc2NhcGVkSG9zdCArPSAnJTI1JyArIGlwdjYuem9uZVxuICAgIH1cbiAgICByZXR1cm4geyBob3N0OiBuZXdIb3N0LCBpc0lQVjY6IHRydWUsIGVzY2FwZWRIb3N0IH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyBob3N0LCBpc0lQVjY6IGZhbHNlIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZmluZFRva2VuIChzdHIsIHRva2VuKSB7XG4gIGxldCBpbmQgPSAwXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0cltpXSA9PT0gdG9rZW4pIGluZCsrXG4gIH1cbiAgcmV0dXJuIGluZFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNS4yLjRcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRG90U2VnbWVudHMgKHBhdGgpIHtcbiAgbGV0IGlucHV0ID0gcGF0aFxuICBjb25zdCBvdXRwdXQgPSBbXVxuICBsZXQgbmV4dFNsYXNoID0gLTFcbiAgbGV0IGxlbiA9IDBcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgd2hpbGUgKGxlbiA9IGlucHV0Lmxlbmd0aCkge1xuICAgIGlmIChsZW4gPT09IDEpIHtcbiAgICAgIGlmIChpbnB1dCA9PT0gJy4nKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSAnLycpIHtcbiAgICAgICAgb3V0cHV0LnB1c2goJy8nKVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0LnB1c2goaW5wdXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsZW4gPT09IDIpIHtcbiAgICAgIGlmIChpbnB1dFswXSA9PT0gJy4nKSB7XG4gICAgICAgIGlmIChpbnB1dFsxXSA9PT0gJy4nKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dFsxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgyKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaW5wdXRbMF0gPT09ICcvJykge1xuICAgICAgICBpZiAoaW5wdXRbMV0gPT09ICcuJyB8fCBpbnB1dFsxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goJy8nKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxlbiA9PT0gMykge1xuICAgICAgaWYgKGlucHV0ID09PSAnLy4uJykge1xuICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIG91dHB1dC5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIG91dHB1dC5wdXNoKCcvJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlucHV0WzBdID09PSAnLicpIHtcbiAgICAgIGlmIChpbnB1dFsxXSA9PT0gJy4nKSB7XG4gICAgICAgIGlmIChpbnB1dFsyXSA9PT0gJy8nKSB7XG4gICAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgzKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaW5wdXRbMV0gPT09ICcvJykge1xuICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDIpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpbnB1dFswXSA9PT0gJy8nKSB7XG4gICAgICBpZiAoaW5wdXRbMV0gPT09ICcuJykge1xuICAgICAgICBpZiAoaW5wdXRbMl0gPT09ICcvJykge1xuICAgICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMilcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0WzJdID09PSAnLicpIHtcbiAgICAgICAgICBpZiAoaW5wdXRbM10gPT09ICcvJykge1xuICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgzKVxuICAgICAgICAgICAgaWYgKG91dHB1dC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgb3V0cHV0LnBvcCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJ1bGUgMkU6IE1vdmUgbm9ybWFsIHBhdGggc2VnbWVudCB0byBvdXRwdXRcbiAgICBpZiAoKG5leHRTbGFzaCA9IGlucHV0LmluZGV4T2YoJy8nLCAxKSkgPT09IC0xKSB7XG4gICAgICBvdXRwdXQucHVzaChpbnB1dClcbiAgICAgIGJyZWFrXG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0LnNsaWNlKDAsIG5leHRTbGFzaCkpXG4gICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKG5leHRTbGFzaClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fSBjb21wb25lbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXNjXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcgKGNvbXBvbmVudCwgZXNjKSB7XG4gIGNvbnN0IGZ1bmMgPSBlc2MgIT09IHRydWUgPyBlc2NhcGUgOiB1bmVzY2FwZVxuICBpZiAoY29tcG9uZW50LnNjaGVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50LnNjaGVtZSA9IGZ1bmMoY29tcG9uZW50LnNjaGVtZSlcbiAgfVxuICBpZiAoY29tcG9uZW50LnVzZXJpbmZvICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb21wb25lbnQudXNlcmluZm8gPSBmdW5jKGNvbXBvbmVudC51c2VyaW5mbylcbiAgfVxuICBpZiAoY29tcG9uZW50Lmhvc3QgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC5ob3N0ID0gZnVuYyhjb21wb25lbnQuaG9zdClcbiAgfVxuICBpZiAoY29tcG9uZW50LnBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC5wYXRoID0gZnVuYyhjb21wb25lbnQucGF0aClcbiAgfVxuICBpZiAoY29tcG9uZW50LnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb21wb25lbnQucXVlcnkgPSBmdW5jKGNvbXBvbmVudC5xdWVyeSlcbiAgfVxuICBpZiAoY29tcG9uZW50LmZyYWdtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb21wb25lbnQuZnJhZ21lbnQgPSBmdW5jKGNvbXBvbmVudC5mcmFnbWVudClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fSBjb21wb25lbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiByZWNvbXBvc2VBdXRob3JpdHkgKGNvbXBvbmVudCkge1xuICBjb25zdCB1cmlUb2tlbnMgPSBbXVxuXG4gIGlmIChjb21wb25lbnQudXNlcmluZm8gIT09IHVuZGVmaW5lZCkge1xuICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudC51c2VyaW5mbylcbiAgICB1cmlUb2tlbnMucHVzaCgnQCcpXG4gIH1cblxuICBpZiAoY29tcG9uZW50Lmhvc3QgIT09IHVuZGVmaW5lZCkge1xuICAgIGxldCBob3N0ID0gdW5lc2NhcGUoY29tcG9uZW50Lmhvc3QpXG4gICAgaWYgKCFpc0lQdjQoaG9zdCkpIHtcbiAgICAgIGNvbnN0IGlwVjZyZXMgPSBub3JtYWxpemVJUHY2KGhvc3QpXG4gICAgICBpZiAoaXBWNnJlcy5pc0lQVjYgPT09IHRydWUpIHtcbiAgICAgICAgaG9zdCA9IGBbJHtpcFY2cmVzLmVzY2FwZWRIb3N0fV1gXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBob3N0ID0gY29tcG9uZW50Lmhvc3RcbiAgICAgIH1cbiAgICB9XG4gICAgdXJpVG9rZW5zLnB1c2goaG9zdClcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29tcG9uZW50LnBvcnQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBjb21wb25lbnQucG9ydCA9PT0gJ3N0cmluZycpIHtcbiAgICB1cmlUb2tlbnMucHVzaCgnOicpXG4gICAgdXJpVG9rZW5zLnB1c2goU3RyaW5nKGNvbXBvbmVudC5wb3J0KSlcbiAgfVxuXG4gIHJldHVybiB1cmlUb2tlbnMubGVuZ3RoID8gdXJpVG9rZW5zLmpvaW4oJycpIDogdW5kZWZpbmVkXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbm9uU2ltcGxlRG9tYWluLFxuICByZWNvbXBvc2VBdXRob3JpdHksXG4gIG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nLFxuICByZW1vdmVEb3RTZWdtZW50cyxcbiAgaXNJUHY0LFxuICBpc1VVSUQsXG4gIG5vcm1hbGl6ZUlQdjYsXG4gIHN0cmluZ0FycmF5VG9IZXhTdHJpcHBlZFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBpc1VVSUQgfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgVVJOX1JFRyA9IC8oW1xcZGEtel1bXFxkXFwtYS16XXswLDMxfSk6KCg/OltcXHchJCcoKSorLFxcLS46Oz1AXXwlW1xcZGEtZl17Mn0pKykvaXVcblxuY29uc3Qgc3VwcG9ydGVkU2NoZW1lTmFtZXMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWydodHRwJywgJ2h0dHBzJywgJ3dzJyxcbiAgJ3dzcycsICd1cm4nLCAndXJuOnV1aWQnXSlcblxuLyoqIEB0eXBlZGVmIHtzdXBwb3J0ZWRTY2hlbWVOYW1lc1tudW1iZXJdfSBTY2hlbWVOYW1lICovXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtuYW1lIGlzIFNjaGVtZU5hbWV9XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTY2hlbWVOYW1lIChuYW1lKSB7XG4gIHJldHVybiBzdXBwb3J0ZWRTY2hlbWVOYW1lcy5pbmRleE9mKC8qKiBAdHlwZSB7Kn0gKi8gKG5hbWUpKSAhPT0gLTFcbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgU2NoZW1lRm5cbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvaW5kZXgnKS5PcHRpb25zfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjaGVtZUhhbmRsZXJcbiAqIEBwcm9wZXJ0eSB7U2NoZW1lTmFtZX0gc2NoZW1lIC0gVGhlIHNjaGVtZSBuYW1lLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZG9tYWluSG9zdF0gLSBJbmRpY2F0ZXMgaWYgdGhlIHNjaGVtZSBzdXBwb3J0cyBkb21haW4gaG9zdHMuXG4gKiBAcHJvcGVydHkge1NjaGVtZUZufSBwYXJzZSAtIEZ1bmN0aW9uIHRvIHBhcnNlIHRoZSBVUkkgY29tcG9uZW50IGZvciB0aGlzIHNjaGVtZS5cbiAqIEBwcm9wZXJ0eSB7U2NoZW1lRm59IHNlcmlhbGl6ZSAtIEZ1bmN0aW9uIHRvIHNlcmlhbGl6ZSB0aGUgVVJJIGNvbXBvbmVudCBmb3IgdGhpcyBzY2hlbWUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtza2lwTm9ybWFsaXplXSAtIEluZGljYXRlcyBpZiBub3JtYWxpemF0aW9uIHNob3VsZCBiZSBza2lwcGVkIGZvciB0aGlzIHNjaGVtZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2Fic29sdXRlUGF0aF0gLSBJbmRpY2F0ZXMgaWYgdGhlIHNjaGVtZSB1c2VzIGFic29sdXRlIHBhdGhzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbdW5pY29kZVN1cHBvcnRdIC0gSW5kaWNhdGVzIGlmIHRoZSBzY2hlbWUgc3VwcG9ydHMgVW5pY29kZS5cbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH0gd3NDb21wb25lbnRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB3c0lzU2VjdXJlICh3c0NvbXBvbmVudCkge1xuICBpZiAod3NDb21wb25lbnQuc2VjdXJlID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmICh3c0NvbXBvbmVudC5zZWN1cmUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAod3NDb21wb25lbnQuc2NoZW1lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHdzQ29tcG9uZW50LnNjaGVtZS5sZW5ndGggPT09IDMgJiZcbiAgICAgICh3c0NvbXBvbmVudC5zY2hlbWVbMF0gPT09ICd3JyB8fCB3c0NvbXBvbmVudC5zY2hlbWVbMF0gPT09ICdXJykgJiZcbiAgICAgICh3c0NvbXBvbmVudC5zY2hlbWVbMV0gPT09ICdzJyB8fCB3c0NvbXBvbmVudC5zY2hlbWVbMV0gPT09ICdTJykgJiZcbiAgICAgICh3c0NvbXBvbmVudC5zY2hlbWVbMl0gPT09ICdzJyB8fCB3c0NvbXBvbmVudC5zY2hlbWVbMl0gPT09ICdTJylcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIGh0dHBQYXJzZSAoY29tcG9uZW50KSB7XG4gIGlmICghY29tcG9uZW50Lmhvc3QpIHtcbiAgICBjb21wb25lbnQuZXJyb3IgPSBjb21wb25lbnQuZXJyb3IgfHwgJ0hUVFAgVVJJcyBtdXN0IGhhdmUgYSBob3N0LidcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIGh0dHBTZXJpYWxpemUgKGNvbXBvbmVudCkge1xuICBjb25zdCBzZWN1cmUgPSBTdHJpbmcoY29tcG9uZW50LnNjaGVtZSkudG9Mb3dlckNhc2UoKSA9PT0gJ2h0dHBzJ1xuXG4gIC8vIG5vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XG4gIGlmIChjb21wb25lbnQucG9ydCA9PT0gKHNlY3VyZSA/IDQ0MyA6IDgwKSB8fCBjb21wb25lbnQucG9ydCA9PT0gJycpIHtcbiAgICBjb21wb25lbnQucG9ydCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gbm9ybWFsaXplIHRoZSBlbXB0eSBwYXRoXG4gIGlmICghY29tcG9uZW50LnBhdGgpIHtcbiAgICBjb21wb25lbnQucGF0aCA9ICcvJ1xuICB9XG5cbiAgLy8gTk9URTogV2UgZG8gbm90IHBhcnNlIHF1ZXJ5IHN0cmluZ3MgZm9yIEhUVFAgVVJJc1xuICAvLyBhcyBXV1cgRm9ybSBVcmwgRW5jb2RlZCBxdWVyeSBzdHJpbmdzIGFyZSBwYXJ0IG9mIHRoZSBIVE1MNCsgc3BlYyxcbiAgLy8gYW5kIG5vdCB0aGUgSFRUUCBzcGVjLlxuXG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIHdzUGFyc2UgKHdzQ29tcG9uZW50KSB7XG4vLyBpbmRpY2F0ZSBpZiB0aGUgc2VjdXJlIGZsYWcgaXMgc2V0XG4gIHdzQ29tcG9uZW50LnNlY3VyZSA9IHdzSXNTZWN1cmUod3NDb21wb25lbnQpXG5cbiAgLy8gY29uc3RydWN0IHJlc291Y2UgbmFtZVxuICB3c0NvbXBvbmVudC5yZXNvdXJjZU5hbWUgPSAod3NDb21wb25lbnQucGF0aCB8fCAnLycpICsgKHdzQ29tcG9uZW50LnF1ZXJ5ID8gJz8nICsgd3NDb21wb25lbnQucXVlcnkgOiAnJylcbiAgd3NDb21wb25lbnQucGF0aCA9IHVuZGVmaW5lZFxuICB3c0NvbXBvbmVudC5xdWVyeSA9IHVuZGVmaW5lZFxuXG4gIHJldHVybiB3c0NvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gd3NTZXJpYWxpemUgKHdzQ29tcG9uZW50KSB7XG4vLyBub3JtYWxpemUgdGhlIGRlZmF1bHQgcG9ydFxuICBpZiAod3NDb21wb25lbnQucG9ydCA9PT0gKHdzSXNTZWN1cmUod3NDb21wb25lbnQpID8gNDQzIDogODApIHx8IHdzQ29tcG9uZW50LnBvcnQgPT09ICcnKSB7XG4gICAgd3NDb21wb25lbnQucG9ydCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gZW5zdXJlIHNjaGVtZSBtYXRjaGVzIHNlY3VyZSBmbGFnXG4gIGlmICh0eXBlb2Ygd3NDb21wb25lbnQuc2VjdXJlID09PSAnYm9vbGVhbicpIHtcbiAgICB3c0NvbXBvbmVudC5zY2hlbWUgPSAod3NDb21wb25lbnQuc2VjdXJlID8gJ3dzcycgOiAnd3MnKVxuICAgIHdzQ29tcG9uZW50LnNlY3VyZSA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gcmVjb25zdHJ1Y3QgcGF0aCBmcm9tIHJlc291cmNlIG5hbWVcbiAgaWYgKHdzQ29tcG9uZW50LnJlc291cmNlTmFtZSkge1xuICAgIGNvbnN0IFtwYXRoLCBxdWVyeV0gPSB3c0NvbXBvbmVudC5yZXNvdXJjZU5hbWUuc3BsaXQoJz8nKVxuICAgIHdzQ29tcG9uZW50LnBhdGggPSAocGF0aCAmJiBwYXRoICE9PSAnLycgPyBwYXRoIDogdW5kZWZpbmVkKVxuICAgIHdzQ29tcG9uZW50LnF1ZXJ5ID0gcXVlcnlcbiAgICB3c0NvbXBvbmVudC5yZXNvdXJjZU5hbWUgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8vIGZvcmJpZCBmcmFnbWVudCBjb21wb25lbnRcbiAgd3NDb21wb25lbnQuZnJhZ21lbnQgPSB1bmRlZmluZWRcblxuICByZXR1cm4gd3NDb21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIHVyblBhcnNlICh1cm5Db21wb25lbnQsIG9wdGlvbnMpIHtcbiAgaWYgKCF1cm5Db21wb25lbnQucGF0aCkge1xuICAgIHVybkNvbXBvbmVudC5lcnJvciA9ICdVUk4gY2FuIG5vdCBiZSBwYXJzZWQnXG4gICAgcmV0dXJuIHVybkNvbXBvbmVudFxuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSB1cm5Db21wb25lbnQucGF0aC5tYXRjaChVUk5fUkVHKVxuICBpZiAobWF0Y2hlcykge1xuICAgIGNvbnN0IHNjaGVtZSA9IG9wdGlvbnMuc2NoZW1lIHx8IHVybkNvbXBvbmVudC5zY2hlbWUgfHwgJ3VybidcbiAgICB1cm5Db21wb25lbnQubmlkID0gbWF0Y2hlc1sxXS50b0xvd2VyQ2FzZSgpXG4gICAgdXJuQ29tcG9uZW50Lm5zcyA9IG1hdGNoZXNbMl1cbiAgICBjb25zdCB1cm5TY2hlbWUgPSBgJHtzY2hlbWV9OiR7b3B0aW9ucy5uaWQgfHwgdXJuQ29tcG9uZW50Lm5pZH1gXG4gICAgY29uc3Qgc2NoZW1lSGFuZGxlciA9IGdldFNjaGVtZUhhbmRsZXIodXJuU2NoZW1lKVxuICAgIHVybkNvbXBvbmVudC5wYXRoID0gdW5kZWZpbmVkXG5cbiAgICBpZiAoc2NoZW1lSGFuZGxlcikge1xuICAgICAgdXJuQ29tcG9uZW50ID0gc2NoZW1lSGFuZGxlci5wYXJzZSh1cm5Db21wb25lbnQsIG9wdGlvbnMpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHVybkNvbXBvbmVudC5lcnJvciA9IHVybkNvbXBvbmVudC5lcnJvciB8fCAnVVJOIGNhbiBub3QgYmUgcGFyc2VkLidcbiAgfVxuXG4gIHJldHVybiB1cm5Db21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIHVyblNlcmlhbGl6ZSAodXJuQ29tcG9uZW50LCBvcHRpb25zKSB7XG4gIGlmICh1cm5Db21wb25lbnQubmlkID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTiB3aXRob3V0IG5pZCBjYW5ub3QgYmUgc2VyaWFsaXplZCcpXG4gIH1cbiAgY29uc3Qgc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgdXJuQ29tcG9uZW50LnNjaGVtZSB8fCAndXJuJ1xuICBjb25zdCBuaWQgPSB1cm5Db21wb25lbnQubmlkLnRvTG93ZXJDYXNlKClcbiAgY29uc3QgdXJuU2NoZW1lID0gYCR7c2NoZW1lfToke29wdGlvbnMubmlkIHx8IG5pZH1gXG4gIGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBnZXRTY2hlbWVIYW5kbGVyKHVyblNjaGVtZSlcblxuICBpZiAoc2NoZW1lSGFuZGxlcikge1xuICAgIHVybkNvbXBvbmVudCA9IHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKHVybkNvbXBvbmVudCwgb3B0aW9ucylcbiAgfVxuXG4gIGNvbnN0IHVyaUNvbXBvbmVudCA9IHVybkNvbXBvbmVudFxuICBjb25zdCBuc3MgPSB1cm5Db21wb25lbnQubnNzXG4gIHVyaUNvbXBvbmVudC5wYXRoID0gYCR7bmlkIHx8IG9wdGlvbnMubmlkfToke25zc31gXG5cbiAgb3B0aW9ucy5za2lwRXNjYXBlID0gdHJ1ZVxuICByZXR1cm4gdXJpQ29tcG9uZW50XG59XG5cbi8qKiBAdHlwZSB7U2NoZW1lRm59ICovXG5mdW5jdGlvbiB1cm51dWlkUGFyc2UgKHVybkNvbXBvbmVudCwgb3B0aW9ucykge1xuICBjb25zdCB1dWlkQ29tcG9uZW50ID0gdXJuQ29tcG9uZW50XG4gIHV1aWRDb21wb25lbnQudXVpZCA9IHV1aWRDb21wb25lbnQubnNzXG4gIHV1aWRDb21wb25lbnQubnNzID0gdW5kZWZpbmVkXG5cbiAgaWYgKCFvcHRpb25zLnRvbGVyYW50ICYmICghdXVpZENvbXBvbmVudC51dWlkIHx8ICFpc1VVSUQodXVpZENvbXBvbmVudC51dWlkKSkpIHtcbiAgICB1dWlkQ29tcG9uZW50LmVycm9yID0gdXVpZENvbXBvbmVudC5lcnJvciB8fCAnVVVJRCBpcyBub3QgdmFsaWQuJ1xuICB9XG5cbiAgcmV0dXJuIHV1aWRDb21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIHVybnV1aWRTZXJpYWxpemUgKHV1aWRDb21wb25lbnQpIHtcbiAgY29uc3QgdXJuQ29tcG9uZW50ID0gdXVpZENvbXBvbmVudFxuICAvLyBub3JtYWxpemUgVVVJRFxuICB1cm5Db21wb25lbnQubnNzID0gKHV1aWRDb21wb25lbnQudXVpZCB8fCAnJykudG9Mb3dlckNhc2UoKVxuICByZXR1cm4gdXJuQ29tcG9uZW50XG59XG5cbmNvbnN0IGh0dHAgPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ2h0dHAnLFxuICBkb21haW5Ib3N0OiB0cnVlLFxuICBwYXJzZTogaHR0cFBhcnNlLFxuICBzZXJpYWxpemU6IGh0dHBTZXJpYWxpemVcbn0pXG5cbmNvbnN0IGh0dHBzID0gLyoqIEB0eXBlIHtTY2hlbWVIYW5kbGVyfSAqLyAoe1xuICBzY2hlbWU6ICdodHRwcycsXG4gIGRvbWFpbkhvc3Q6IGh0dHAuZG9tYWluSG9zdCxcbiAgcGFyc2U6IGh0dHBQYXJzZSxcbiAgc2VyaWFsaXplOiBodHRwU2VyaWFsaXplXG59KVxuXG5jb25zdCB3cyA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAnd3MnLFxuICBkb21haW5Ib3N0OiB0cnVlLFxuICBwYXJzZTogd3NQYXJzZSxcbiAgc2VyaWFsaXplOiB3c1NlcmlhbGl6ZVxufSlcblxuY29uc3Qgd3NzID0gLyoqIEB0eXBlIHtTY2hlbWVIYW5kbGVyfSAqLyAoe1xuICBzY2hlbWU6ICd3c3MnLFxuICBkb21haW5Ib3N0OiB3cy5kb21haW5Ib3N0LFxuICBwYXJzZTogd3MucGFyc2UsXG4gIHNlcmlhbGl6ZTogd3Muc2VyaWFsaXplXG59KVxuXG5jb25zdCB1cm4gPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ3VybicsXG4gIHBhcnNlOiB1cm5QYXJzZSxcbiAgc2VyaWFsaXplOiB1cm5TZXJpYWxpemUsXG4gIHNraXBOb3JtYWxpemU6IHRydWVcbn0pXG5cbmNvbnN0IHVybnV1aWQgPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ3Vybjp1dWlkJyxcbiAgcGFyc2U6IHVybnV1aWRQYXJzZSxcbiAgc2VyaWFsaXplOiB1cm51dWlkU2VyaWFsaXplLFxuICBza2lwTm9ybWFsaXplOiB0cnVlXG59KVxuXG5jb25zdCBTQ0hFTUVTID0gLyoqIEB0eXBlIHtSZWNvcmQ8U2NoZW1lTmFtZSwgU2NoZW1lSGFuZGxlcj59ICovICh7XG4gIGh0dHAsXG4gIGh0dHBzLFxuICB3cyxcbiAgd3NzLFxuICB1cm4sXG4gICd1cm46dXVpZCc6IHVybnV1aWRcbn0pXG5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihTQ0hFTUVTLCBudWxsKVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gc2NoZW1lXG4gKiBAcmV0dXJucyB7U2NoZW1lSGFuZGxlcnx1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGdldFNjaGVtZUhhbmRsZXIgKHNjaGVtZSkge1xuICByZXR1cm4gKFxuICAgIHNjaGVtZSAmJiAoXG4gICAgICBTQ0hFTUVTWy8qKiBAdHlwZSB7U2NoZW1lTmFtZX0gKi8gKHNjaGVtZSldIHx8XG4gICAgICBTQ0hFTUVTWy8qKiBAdHlwZSB7U2NoZW1lTmFtZX0gKi8oc2NoZW1lLnRvTG93ZXJDYXNlKCkpXSlcbiAgKSB8fFxuICAgIHVuZGVmaW5lZFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgd3NJc1NlY3VyZSxcbiAgU0NIRU1FUyxcbiAgaXNWYWxpZFNjaGVtZU5hbWUsXG4gIGdldFNjaGVtZUhhbmRsZXIsXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG5vcm1hbGl6ZUlQdjYsIHJlbW92ZURvdFNlZ21lbnRzLCByZWNvbXBvc2VBdXRob3JpdHksIG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nLCBpc0lQdjQsIG5vblNpbXBsZURvbWFpbiB9ID0gcmVxdWlyZSgnLi9saWIvdXRpbHMnKVxuY29uc3QgeyBTQ0hFTUVTLCBnZXRTY2hlbWVIYW5kbGVyIH0gPSByZXF1aXJlKCcuL2xpYi9zY2hlbWVzJylcblxuLyoqXG4gKiBAdGVtcGxhdGUge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudHxzdHJpbmd9IFRcbiAqIEBwYXJhbSB7VH0gdXJpXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge1R9XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZSAodXJpLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgdXJpID09PSAnc3RyaW5nJykge1xuICAgIHVyaSA9IC8qKiBAdHlwZSB7VH0gKi8gKHNlcmlhbGl6ZShwYXJzZSh1cmksIG9wdGlvbnMpLCBvcHRpb25zKSlcbiAgfSBlbHNlIGlmICh0eXBlb2YgdXJpID09PSAnb2JqZWN0Jykge1xuICAgIHVyaSA9IC8qKiBAdHlwZSB7VH0gKi8gKHBhcnNlKHNlcmlhbGl6ZSh1cmksIG9wdGlvbnMpLCBvcHRpb25zKSlcbiAgfVxuICByZXR1cm4gdXJpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUklcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSSVxuICogQHBhcmFtIHtpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5PcHRpb25zfSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmUgKGJhc2VVUkksIHJlbGF0aXZlVVJJLCBvcHRpb25zKSB7XG4gIGNvbnN0IHNjaGVtZWxlc3NPcHRpb25zID0gb3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oeyBzY2hlbWU6ICdudWxsJyB9LCBvcHRpb25zKSA6IHsgc2NoZW1lOiAnbnVsbCcgfVxuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVDb21wb25lbnQocGFyc2UoYmFzZVVSSSwgc2NoZW1lbGVzc09wdGlvbnMpLCBwYXJzZShyZWxhdGl2ZVVSSSwgc2NoZW1lbGVzc09wdGlvbnMpLCBzY2hlbWVsZXNzT3B0aW9ucywgdHJ1ZSlcbiAgc2NoZW1lbGVzc09wdGlvbnMuc2tpcEVzY2FwZSA9IHRydWVcbiAgcmV0dXJuIHNlcmlhbGl6ZShyZXNvbHZlZCwgc2NoZW1lbGVzc09wdGlvbnMpXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQgKCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fSBiYXNlXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IHJlbGF0aXZlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRpb25zXVxuICogQHBhcmFtIHtib29sZWFufSBbc2tpcE5vcm1hbGl6YXRpb249ZmFsc2VdXG4gKiBAcmV0dXJucyB7aW1wb3J0ICgnLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudCAoYmFzZSwgcmVsYXRpdmUsIG9wdGlvbnMsIHNraXBOb3JtYWxpemF0aW9uKSB7XG4gIC8qKiBAdHlwZSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fSAqL1xuICBjb25zdCB0YXJnZXQgPSB7fVxuICBpZiAoIXNraXBOb3JtYWxpemF0aW9uKSB7XG4gICAgYmFzZSA9IHBhcnNlKHNlcmlhbGl6ZShiYXNlLCBvcHRpb25zKSwgb3B0aW9ucykgLy8gbm9ybWFsaXplIGJhc2UgY29tcG9uZW50XG4gICAgcmVsYXRpdmUgPSBwYXJzZShzZXJpYWxpemUocmVsYXRpdmUsIG9wdGlvbnMpLCBvcHRpb25zKSAvLyBub3JtYWxpemUgcmVsYXRpdmUgY29tcG9uZW50XG4gIH1cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cblxuICBpZiAoIW9wdGlvbnMudG9sZXJhbnQgJiYgcmVsYXRpdmUuc2NoZW1lKSB7XG4gICAgdGFyZ2V0LnNjaGVtZSA9IHJlbGF0aXZlLnNjaGVtZVxuICAgIC8vIHRhcmdldC5hdXRob3JpdHkgPSByZWxhdGl2ZS5hdXRob3JpdHk7XG4gICAgdGFyZ2V0LnVzZXJpbmZvID0gcmVsYXRpdmUudXNlcmluZm9cbiAgICB0YXJnZXQuaG9zdCA9IHJlbGF0aXZlLmhvc3RcbiAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnRcbiAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHJlbGF0aXZlLnBhdGggfHwgJycpXG4gICAgdGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnlcbiAgfSBlbHNlIHtcbiAgICBpZiAocmVsYXRpdmUudXNlcmluZm8gIT09IHVuZGVmaW5lZCB8fCByZWxhdGl2ZS5ob3N0ICE9PSB1bmRlZmluZWQgfHwgcmVsYXRpdmUucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xuICAgICAgdGFyZ2V0LnVzZXJpbmZvID0gcmVsYXRpdmUudXNlcmluZm9cbiAgICAgIHRhcmdldC5ob3N0ID0gcmVsYXRpdmUuaG9zdFxuICAgICAgdGFyZ2V0LnBvcnQgPSByZWxhdGl2ZS5wb3J0XG4gICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHJlbGF0aXZlLnBhdGggfHwgJycpXG4gICAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXJlbGF0aXZlLnBhdGgpIHtcbiAgICAgICAgdGFyZ2V0LnBhdGggPSBiYXNlLnBhdGhcbiAgICAgICAgaWYgKHJlbGF0aXZlLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldC5xdWVyeSA9IGJhc2UucXVlcnlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlbGF0aXZlLnBhdGhbMF0gPT09ICcvJykge1xuICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoKGJhc2UudXNlcmluZm8gIT09IHVuZGVmaW5lZCB8fCBiYXNlLmhvc3QgIT09IHVuZGVmaW5lZCB8fCBiYXNlLnBvcnQgIT09IHVuZGVmaW5lZCkgJiYgIWJhc2UucGF0aCkge1xuICAgICAgICAgICAgdGFyZ2V0LnBhdGggPSAnLycgKyByZWxhdGl2ZS5wYXRoXG4gICAgICAgICAgfSBlbHNlIGlmICghYmFzZS5wYXRoKSB7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbGF0aXZlLnBhdGhcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0LnBhdGggPSBiYXNlLnBhdGguc2xpY2UoMCwgYmFzZS5wYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKSArIHJlbGF0aXZlLnBhdGhcbiAgICAgICAgICB9XG4gICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyh0YXJnZXQucGF0aClcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeVxuICAgICAgfVxuICAgICAgLy8gdGFyZ2V0LmF1dGhvcml0eSA9IGJhc2UuYXV0aG9yaXR5O1xuICAgICAgdGFyZ2V0LnVzZXJpbmZvID0gYmFzZS51c2VyaW5mb1xuICAgICAgdGFyZ2V0Lmhvc3QgPSBiYXNlLmhvc3RcbiAgICAgIHRhcmdldC5wb3J0ID0gYmFzZS5wb3J0XG4gICAgfVxuICAgIHRhcmdldC5zY2hlbWUgPSBiYXNlLnNjaGVtZVxuICB9XG5cbiAgdGFyZ2V0LmZyYWdtZW50ID0gcmVsYXRpdmUuZnJhZ21lbnRcblxuICByZXR1cm4gdGFyZ2V0XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQgKCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fHN0cmluZ30gdXJpQVxuICogQHBhcmFtIHtpbXBvcnQgKCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fHN0cmluZ30gdXJpQlxuICogQHBhcmFtIHtpbXBvcnQgKCcuL3R5cGVzL2luZGV4JykuT3B0aW9uc30gb3B0aW9uc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGVxdWFsICh1cmlBLCB1cmlCLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgdXJpQSA9PT0gJ3N0cmluZycpIHtcbiAgICB1cmlBID0gdW5lc2NhcGUodXJpQSlcbiAgICB1cmlBID0gc2VyaWFsaXplKG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKHBhcnNlKHVyaUEsIG9wdGlvbnMpLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH0gZWxzZSBpZiAodHlwZW9mIHVyaUEgPT09ICdvYmplY3QnKSB7XG4gICAgdXJpQSA9IHNlcmlhbGl6ZShub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyh1cmlBLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH1cblxuICBpZiAodHlwZW9mIHVyaUIgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJpQiA9IHVuZXNjYXBlKHVyaUIpXG4gICAgdXJpQiA9IHNlcmlhbGl6ZShub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhwYXJzZSh1cmlCLCBvcHRpb25zKSwgdHJ1ZSksIHsgLi4ub3B0aW9ucywgc2tpcEVzY2FwZTogdHJ1ZSB9KVxuICB9IGVsc2UgaWYgKHR5cGVvZiB1cmlCID09PSAnb2JqZWN0Jykge1xuICAgIHVyaUIgPSBzZXJpYWxpemUobm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcodXJpQiwgdHJ1ZSksIHsgLi4ub3B0aW9ucywgc2tpcEVzY2FwZTogdHJ1ZSB9KVxuICB9XG5cbiAgcmV0dXJuIHVyaUEudG9Mb3dlckNhc2UoKSA9PT0gdXJpQi50b0xvd2VyQ2FzZSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkb25seTxpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnQ+fSBjbXB0c1xuICogQHBhcmFtIHtpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5PcHRpb25zfSBbb3B0c11cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZSAoY21wdHMsIG9wdHMpIHtcbiAgY29uc3QgY29tcG9uZW50ID0ge1xuICAgIGhvc3Q6IGNtcHRzLmhvc3QsXG4gICAgc2NoZW1lOiBjbXB0cy5zY2hlbWUsXG4gICAgdXNlcmluZm86IGNtcHRzLnVzZXJpbmZvLFxuICAgIHBvcnQ6IGNtcHRzLnBvcnQsXG4gICAgcGF0aDogY21wdHMucGF0aCxcbiAgICBxdWVyeTogY21wdHMucXVlcnksXG4gICAgbmlkOiBjbXB0cy5uaWQsXG4gICAgbnNzOiBjbXB0cy5uc3MsXG4gICAgdXVpZDogY21wdHMudXVpZCxcbiAgICBmcmFnbWVudDogY21wdHMuZnJhZ21lbnQsXG4gICAgcmVmZXJlbmNlOiBjbXB0cy5yZWZlcmVuY2UsXG4gICAgcmVzb3VyY2VOYW1lOiBjbXB0cy5yZXNvdXJjZU5hbWUsXG4gICAgc2VjdXJlOiBjbXB0cy5zZWN1cmUsXG4gICAgZXJyb3I6ICcnXG4gIH1cbiAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdHMpXG4gIGNvbnN0IHVyaVRva2VucyA9IFtdXG5cbiAgLy8gZmluZCBzY2hlbWUgaGFuZGxlclxuICBjb25zdCBzY2hlbWVIYW5kbGVyID0gZ2V0U2NoZW1lSGFuZGxlcihvcHRpb25zLnNjaGVtZSB8fCBjb21wb25lbnQuc2NoZW1lKVxuXG4gIC8vIHBlcmZvcm0gc2NoZW1lIHNwZWNpZmljIHNlcmlhbGl6YXRpb25cbiAgaWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUpIHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKGNvbXBvbmVudCwgb3B0aW9ucylcblxuICBpZiAoY29tcG9uZW50LnBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghb3B0aW9ucy5za2lwRXNjYXBlKSB7XG4gICAgICBjb21wb25lbnQucGF0aCA9IGVzY2FwZShjb21wb25lbnQucGF0aClcblxuICAgICAgaWYgKGNvbXBvbmVudC5zY2hlbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb21wb25lbnQucGF0aCA9IGNvbXBvbmVudC5wYXRoLnNwbGl0KCclM0EnKS5qb2luKCc6JylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50LnBhdGggPSB1bmVzY2FwZShjb21wb25lbnQucGF0aClcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgIT09ICdzdWZmaXgnICYmIGNvbXBvbmVudC5zY2hlbWUpIHtcbiAgICB1cmlUb2tlbnMucHVzaChjb21wb25lbnQuc2NoZW1lLCAnOicpXG4gIH1cblxuICBjb25zdCBhdXRob3JpdHkgPSByZWNvbXBvc2VBdXRob3JpdHkoY29tcG9uZW50KVxuICBpZiAoYXV0aG9yaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgIT09ICdzdWZmaXgnKSB7XG4gICAgICB1cmlUb2tlbnMucHVzaCgnLy8nKVxuICAgIH1cblxuICAgIHVyaVRva2Vucy5wdXNoKGF1dGhvcml0eSlcblxuICAgIGlmIChjb21wb25lbnQucGF0aCAmJiBjb21wb25lbnQucGF0aFswXSAhPT0gJy8nKSB7XG4gICAgICB1cmlUb2tlbnMucHVzaCgnLycpXG4gICAgfVxuICB9XG4gIGlmIChjb21wb25lbnQucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IHMgPSBjb21wb25lbnQucGF0aFxuXG4gICAgaWYgKCFvcHRpb25zLmFic29sdXRlUGF0aCAmJiAoIXNjaGVtZUhhbmRsZXIgfHwgIXNjaGVtZUhhbmRsZXIuYWJzb2x1dGVQYXRoKSkge1xuICAgICAgcyA9IHJlbW92ZURvdFNlZ21lbnRzKHMpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYXV0aG9yaXR5ID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHNbMF0gPT09ICcvJyAmJlxuICAgICAgc1sxXSA9PT0gJy8nXG4gICAgKSB7XG4gICAgICAvLyBkb24ndCBhbGxvdyB0aGUgcGF0aCB0byBzdGFydCB3aXRoIFwiLy9cIlxuICAgICAgcyA9ICcvJTJGJyArIHMuc2xpY2UoMilcbiAgICB9XG5cbiAgICB1cmlUb2tlbnMucHVzaChzKVxuICB9XG5cbiAgaWYgKGNvbXBvbmVudC5xdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdXJpVG9rZW5zLnB1c2goJz8nLCBjb21wb25lbnQucXVlcnkpXG4gIH1cblxuICBpZiAoY29tcG9uZW50LmZyYWdtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICB1cmlUb2tlbnMucHVzaCgnIycsIGNvbXBvbmVudC5mcmFnbWVudClcbiAgfVxuICByZXR1cm4gdXJpVG9rZW5zLmpvaW4oJycpXG59XG5cbmNvbnN0IFVSSV9QQVJTRSA9IC9eKD86KFteIy86P10rKTopPyg/OlxcL1xcLygoPzooW14jLz9AXSopQCk/KFxcW1teIy8/XFxdXStcXF18W14jLzo/XSopKD86OihcXGQqKSk/KSk/KFteIz9dKikoPzpcXD8oW14jXSopKT8oPzojKCg/Oi58W1xcblxccl0pKikpPy91XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHVyaVxuICogQHBhcmFtIHtpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5PcHRpb25zfSBbb3B0c11cbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHBhcnNlICh1cmksIG9wdHMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdHMpXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fSAqL1xuICBjb25zdCBwYXJzZWQgPSB7XG4gICAgc2NoZW1lOiB1bmRlZmluZWQsXG4gICAgdXNlcmluZm86IHVuZGVmaW5lZCxcbiAgICBob3N0OiAnJyxcbiAgICBwb3J0OiB1bmRlZmluZWQsXG4gICAgcGF0aDogJycsXG4gICAgcXVlcnk6IHVuZGVmaW5lZCxcbiAgICBmcmFnbWVudDogdW5kZWZpbmVkXG4gIH1cblxuICBsZXQgaXNJUCA9IGZhbHNlXG4gIGlmIChvcHRpb25zLnJlZmVyZW5jZSA9PT0gJ3N1ZmZpeCcpIHtcbiAgICBpZiAob3B0aW9ucy5zY2hlbWUpIHtcbiAgICAgIHVyaSA9IG9wdGlvbnMuc2NoZW1lICsgJzonICsgdXJpXG4gICAgfSBlbHNlIHtcbiAgICAgIHVyaSA9ICcvLycgKyB1cmlcbiAgICB9XG4gIH1cblxuICBjb25zdCBtYXRjaGVzID0gdXJpLm1hdGNoKFVSSV9QQVJTRSlcblxuICBpZiAobWF0Y2hlcykge1xuICAgIC8vIHN0b3JlIGVhY2ggY29tcG9uZW50XG4gICAgcGFyc2VkLnNjaGVtZSA9IG1hdGNoZXNbMV1cbiAgICBwYXJzZWQudXNlcmluZm8gPSBtYXRjaGVzWzNdXG4gICAgcGFyc2VkLmhvc3QgPSBtYXRjaGVzWzRdXG4gICAgcGFyc2VkLnBvcnQgPSBwYXJzZUludChtYXRjaGVzWzVdLCAxMClcbiAgICBwYXJzZWQucGF0aCA9IG1hdGNoZXNbNl0gfHwgJydcbiAgICBwYXJzZWQucXVlcnkgPSBtYXRjaGVzWzddXG4gICAgcGFyc2VkLmZyYWdtZW50ID0gbWF0Y2hlc1s4XVxuXG4gICAgLy8gZml4IHBvcnQgbnVtYmVyXG4gICAgaWYgKGlzTmFOKHBhcnNlZC5wb3J0KSkge1xuICAgICAgcGFyc2VkLnBvcnQgPSBtYXRjaGVzWzVdXG4gICAgfVxuICAgIGlmIChwYXJzZWQuaG9zdCkge1xuICAgICAgY29uc3QgaXB2NHJlc3VsdCA9IGlzSVB2NChwYXJzZWQuaG9zdClcbiAgICAgIGlmIChpcHY0cmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICBjb25zdCBpcHY2cmVzdWx0ID0gbm9ybWFsaXplSVB2NihwYXJzZWQuaG9zdClcbiAgICAgICAgcGFyc2VkLmhvc3QgPSBpcHY2cmVzdWx0Lmhvc3QudG9Mb3dlckNhc2UoKVxuICAgICAgICBpc0lQID0gaXB2NnJlc3VsdC5pc0lQVjZcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzSVAgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwYXJzZWQuc2NoZW1lID09PSB1bmRlZmluZWQgJiYgcGFyc2VkLnVzZXJpbmZvID09PSB1bmRlZmluZWQgJiYgcGFyc2VkLmhvc3QgPT09IHVuZGVmaW5lZCAmJiBwYXJzZWQucG9ydCA9PT0gdW5kZWZpbmVkICYmIHBhcnNlZC5xdWVyeSA9PT0gdW5kZWZpbmVkICYmICFwYXJzZWQucGF0aCkge1xuICAgICAgcGFyc2VkLnJlZmVyZW5jZSA9ICdzYW1lLWRvY3VtZW50J1xuICAgIH0gZWxzZSBpZiAocGFyc2VkLnNjaGVtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJzZWQucmVmZXJlbmNlID0gJ3JlbGF0aXZlJ1xuICAgIH0gZWxzZSBpZiAocGFyc2VkLmZyYWdtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlZC5yZWZlcmVuY2UgPSAnYWJzb2x1dGUnXG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZC5yZWZlcmVuY2UgPSAndXJpJ1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciByZWZlcmVuY2UgZXJyb3JzXG4gICAgaWYgKG9wdGlvbnMucmVmZXJlbmNlICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSAnc3VmZml4JyAmJiBvcHRpb25zLnJlZmVyZW5jZSAhPT0gcGFyc2VkLnJlZmVyZW5jZSkge1xuICAgICAgcGFyc2VkLmVycm9yID0gcGFyc2VkLmVycm9yIHx8ICdVUkkgaXMgbm90IGEgJyArIG9wdGlvbnMucmVmZXJlbmNlICsgJyByZWZlcmVuY2UuJ1xuICAgIH1cblxuICAgIC8vIGZpbmQgc2NoZW1lIGhhbmRsZXJcbiAgICBjb25zdCBzY2hlbWVIYW5kbGVyID0gZ2V0U2NoZW1lSGFuZGxlcihvcHRpb25zLnNjaGVtZSB8fCBwYXJzZWQuc2NoZW1lKVxuXG4gICAgLy8gY2hlY2sgaWYgc2NoZW1lIGNhbid0IGhhbmRsZSBJUklzXG4gICAgaWYgKCFvcHRpb25zLnVuaWNvZGVTdXBwb3J0ICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci51bmljb2RlU3VwcG9ydCkpIHtcbiAgICAgIC8vIGlmIGhvc3QgY29tcG9uZW50IGlzIGEgZG9tYWluIG5hbWVcbiAgICAgIGlmIChwYXJzZWQuaG9zdCAmJiAob3B0aW9ucy5kb21haW5Ib3N0IHx8IChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIuZG9tYWluSG9zdCkpICYmIGlzSVAgPT09IGZhbHNlICYmIG5vblNpbXBsZURvbWFpbihwYXJzZWQuaG9zdCkpIHtcbiAgICAgICAgLy8gY29udmVydCBVbmljb2RlIElETiAtPiBBU0NJSSBJRE5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWQuaG9zdCA9IFVSTC5kb21haW5Ub0FTQ0lJKHBhcnNlZC5ob3N0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBwYXJzZWQuZXJyb3IgPSBwYXJzZWQuZXJyb3IgfHwgXCJIb3N0J3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gQVNDSUk6IFwiICsgZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBjb252ZXJ0IElSSSAtPiBVUklcbiAgICB9XG5cbiAgICBpZiAoIXNjaGVtZUhhbmRsZXIgfHwgKHNjaGVtZUhhbmRsZXIgJiYgIXNjaGVtZUhhbmRsZXIuc2tpcE5vcm1hbGl6ZSkpIHtcbiAgICAgIGlmICh1cmkuaW5kZXhPZignJScpICE9PSAtMSkge1xuICAgICAgICBpZiAocGFyc2VkLnNjaGVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcGFyc2VkLnNjaGVtZSA9IHVuZXNjYXBlKHBhcnNlZC5zY2hlbWUpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlZC5ob3N0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXJzZWQuaG9zdCA9IHVuZXNjYXBlKHBhcnNlZC5ob3N0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocGFyc2VkLnBhdGgpIHtcbiAgICAgICAgcGFyc2VkLnBhdGggPSBlc2NhcGUodW5lc2NhcGUocGFyc2VkLnBhdGgpKVxuICAgICAgfVxuICAgICAgaWYgKHBhcnNlZC5mcmFnbWVudCkge1xuICAgICAgICBwYXJzZWQuZnJhZ21lbnQgPSBlbmNvZGVVUkkoZGVjb2RlVVJJQ29tcG9uZW50KHBhcnNlZC5mcmFnbWVudCkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgcGFyc2luZ1xuICAgIGlmIChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIucGFyc2UpIHtcbiAgICAgIHNjaGVtZUhhbmRsZXIucGFyc2UocGFyc2VkLCBvcHRpb25zKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQuZXJyb3IgPSBwYXJzZWQuZXJyb3IgfHwgJ1VSSSBjYW4gbm90IGJlIHBhcnNlZC4nXG4gIH1cbiAgcmV0dXJuIHBhcnNlZFxufVxuXG5jb25zdCBmYXN0VXJpID0ge1xuICBTQ0hFTUVTLFxuICBub3JtYWxpemUsXG4gIHJlc29sdmUsXG4gIHJlc29sdmVDb21wb25lbnQsXG4gIGVxdWFsLFxuICBzZXJpYWxpemUsXG4gIHBhcnNlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmFzdFVyaVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGZhc3RVcmlcbm1vZHVsZS5leHBvcnRzLmZhc3RVcmkgPSBmYXN0VXJpXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXJpID0gcmVxdWlyZShcImZhc3QtdXJpXCIpO1xudXJpLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdXJpXCIpLmRlZmF1bHQnO1xuZXhwb3J0cy5kZWZhdWx0ID0gdXJpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXJpLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvZGVHZW4gPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSBleHBvcnRzLktleXdvcmRDeHQgPSB2b2lkIDA7XG52YXIgdmFsaWRhdGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdmFsaWRhdGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJLZXl3b3JkQ3h0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWxpZGF0ZV8xLktleXdvcmRDeHQ7IH0gfSk7XG52YXIgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLl87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5zdHI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5zdHJpbmdpZnk7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJuaWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5uaWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuTmFtZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvZGVHZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5Db2RlR2VuOyB9IH0pO1xuY29uc3QgdmFsaWRhdGlvbl9lcnJvcl8xID0gcmVxdWlyZShcIi4vcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpO1xuY29uc3QgcmVmX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3JlZl9lcnJvclwiKTtcbmNvbnN0IHJ1bGVzXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3J1bGVzXCIpO1xuY29uc3QgY29tcGlsZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZVwiKTtcbmNvbnN0IGNvZGVnZW5fMiA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVzb2x2ZVwiKTtcbmNvbnN0IGRhdGFUeXBlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3ZhbGlkYXRlL2RhdGFUeXBlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgJGRhdGFSZWZTY2hlbWEgPSByZXF1aXJlKFwiLi9yZWZzL2RhdGEuanNvblwiKTtcbmNvbnN0IHVyaV8xID0gcmVxdWlyZShcIi4vcnVudGltZS91cmlcIik7XG5jb25zdCBkZWZhdWx0UmVnRXhwID0gKHN0ciwgZmxhZ3MpID0+IG5ldyBSZWdFeHAoc3RyLCBmbGFncyk7XG5kZWZhdWx0UmVnRXhwLmNvZGUgPSBcIm5ldyBSZWdFeHBcIjtcbmNvbnN0IE1FVEFfSUdOT1JFX09QVElPTlMgPSBbXCJyZW1vdmVBZGRpdGlvbmFsXCIsIFwidXNlRGVmYXVsdHNcIiwgXCJjb2VyY2VUeXBlc1wiXTtcbmNvbnN0IEVYVF9TQ09QRV9OQU1FUyA9IG5ldyBTZXQoW1xuICAgIFwidmFsaWRhdGVcIixcbiAgICBcInNlcmlhbGl6ZVwiLFxuICAgIFwicGFyc2VcIixcbiAgICBcIndyYXBwZXJcIixcbiAgICBcInJvb3RcIixcbiAgICBcInNjaGVtYVwiLFxuICAgIFwia2V5d29yZFwiLFxuICAgIFwicGF0dGVyblwiLFxuICAgIFwiZm9ybWF0c1wiLFxuICAgIFwidmFsaWRhdGUkZGF0YVwiLFxuICAgIFwiZnVuY1wiLFxuICAgIFwib2JqXCIsXG4gICAgXCJFcnJvclwiLFxuXSk7XG5jb25zdCByZW1vdmVkT3B0aW9ucyA9IHtcbiAgICBlcnJvckRhdGFQYXRoOiBcIlwiLFxuICAgIGZvcm1hdDogXCJgdmFsaWRhdGVGb3JtYXRzOiBmYWxzZWAgY2FuIGJlIHVzZWQgaW5zdGVhZC5cIixcbiAgICBudWxsYWJsZTogJ1wibnVsbGFibGVcIiBrZXl3b3JkIGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0LicsXG4gICAganNvblBvaW50ZXJzOiBcIkRlcHJlY2F0ZWQganNQcm9wZXJ0eVN5bnRheCBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIGV4dGVuZFJlZnM6IFwiRGVwcmVjYXRlZCBpZ25vcmVLZXl3b3Jkc1dpdGhSZWYgY2FuIGJlIHVzZWQgaW5zdGVhZC5cIixcbiAgICBtaXNzaW5nUmVmczogXCJQYXNzIGVtcHR5IHNjaGVtYSB3aXRoICRpZCB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIHRvIGFqdi5hZGRTY2hlbWEuXCIsXG4gICAgcHJvY2Vzc0NvZGU6IFwiVXNlIG9wdGlvbiBgY29kZToge3Byb2Nlc3M6IChjb2RlLCBzY2hlbWFFbnY6IG9iamVjdCkgPT4gc3RyaW5nfWBcIixcbiAgICBzb3VyY2VDb2RlOiBcIlVzZSBvcHRpb24gYGNvZGU6IHtzb3VyY2U6IHRydWV9YFwiLFxuICAgIHN0cmljdERlZmF1bHRzOiBcIkl0IGlzIGRlZmF1bHQgbm93LCBzZWUgb3B0aW9uIGBzdHJpY3RgLlwiLFxuICAgIHN0cmljdEtleXdvcmRzOiBcIkl0IGlzIGRlZmF1bHQgbm93LCBzZWUgb3B0aW9uIGBzdHJpY3RgLlwiLFxuICAgIHVuaXF1ZUl0ZW1zOiAnXCJ1bmlxdWVJdGVtc1wiIGtleXdvcmQgaXMgYWx3YXlzIHZhbGlkYXRlZC4nLFxuICAgIHVua25vd25Gb3JtYXRzOiBcIkRpc2FibGUgc3RyaWN0IG1vZGUgb3IgcGFzcyBgdHJ1ZWAgdG8gYGFqdi5hZGRGb3JtYXRgIChvciBgZm9ybWF0c2Agb3B0aW9uKS5cIixcbiAgICBjYWNoZTogXCJNYXAgaXMgdXNlZCBhcyBjYWNoZSwgc2NoZW1hIG9iamVjdCBhcyBrZXkuXCIsXG4gICAgc2VyaWFsaXplOiBcIk1hcCBpcyB1c2VkIGFzIGNhY2hlLCBzY2hlbWEgb2JqZWN0IGFzIGtleS5cIixcbiAgICBhanZFcnJvcnM6IFwiSXQgaXMgZGVmYXVsdCBub3cuXCIsXG59O1xuY29uc3QgZGVwcmVjYXRlZE9wdGlvbnMgPSB7XG4gICAgaWdub3JlS2V5d29yZHNXaXRoUmVmOiBcIlwiLFxuICAgIGpzUHJvcGVydHlTeW50YXg6IFwiXCIsXG4gICAgdW5pY29kZTogJ1wibWluTGVuZ3RoXCIvXCJtYXhMZW5ndGhcIiBhY2NvdW50IGZvciB1bmljb2RlIGNoYXJhY3RlcnMgYnkgZGVmYXVsdC4nLFxufTtcbmNvbnN0IE1BWF9FWFBSRVNTSU9OID0gMjAwO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHJlcXVpcmVkT3B0aW9ucyhvKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2osIF9rLCBfbCwgX20sIF9vLCBfcCwgX3EsIF9yLCBfcywgX3QsIF91LCBfdiwgX3csIF94LCBfeSwgX3osIF8wO1xuICAgIGNvbnN0IHMgPSBvLnN0cmljdDtcbiAgICBjb25zdCBfb3B0eiA9IChfYSA9IG8uY29kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplO1xuICAgIGNvbnN0IG9wdGltaXplID0gX29wdHogPT09IHRydWUgfHwgX29wdHogPT09IHVuZGVmaW5lZCA/IDEgOiBfb3B0eiB8fCAwO1xuICAgIGNvbnN0IHJlZ0V4cCA9IChfYyA9IChfYiA9IG8uY29kZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnJlZ0V4cCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZGVmYXVsdFJlZ0V4cDtcbiAgICBjb25zdCB1cmlSZXNvbHZlciA9IChfZCA9IG8udXJpUmVzb2x2ZXIpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IHVyaV8xLmRlZmF1bHQ7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RyaWN0U2NoZW1hOiAoX2YgPSAoX2UgPSBvLnN0cmljdFNjaGVtYSkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogcykgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogdHJ1ZSxcbiAgICAgICAgc3RyaWN0TnVtYmVyczogKF9oID0gKF9nID0gby5zdHJpY3ROdW1iZXJzKSAhPT0gbnVsbCAmJiBfZyAhPT0gdm9pZCAwID8gX2cgOiBzKSAhPT0gbnVsbCAmJiBfaCAhPT0gdm9pZCAwID8gX2ggOiB0cnVlLFxuICAgICAgICBzdHJpY3RUeXBlczogKF9rID0gKF9qID0gby5zdHJpY3RUeXBlcykgIT09IG51bGwgJiYgX2ogIT09IHZvaWQgMCA/IF9qIDogcykgIT09IG51bGwgJiYgX2sgIT09IHZvaWQgMCA/IF9rIDogXCJsb2dcIixcbiAgICAgICAgc3RyaWN0VHVwbGVzOiAoX20gPSAoX2wgPSBvLnN0cmljdFR1cGxlcykgIT09IG51bGwgJiYgX2wgIT09IHZvaWQgMCA/IF9sIDogcykgIT09IG51bGwgJiYgX20gIT09IHZvaWQgMCA/IF9tIDogXCJsb2dcIixcbiAgICAgICAgc3RyaWN0UmVxdWlyZWQ6IChfcCA9IChfbyA9IG8uc3RyaWN0UmVxdWlyZWQpICE9PSBudWxsICYmIF9vICE9PSB2b2lkIDAgPyBfbyA6IHMpICE9PSBudWxsICYmIF9wICE9PSB2b2lkIDAgPyBfcCA6IGZhbHNlLFxuICAgICAgICBjb2RlOiBvLmNvZGUgPyB7IC4uLm8uY29kZSwgb3B0aW1pemUsIHJlZ0V4cCB9IDogeyBvcHRpbWl6ZSwgcmVnRXhwIH0sXG4gICAgICAgIGxvb3BSZXF1aXJlZDogKF9xID0gby5sb29wUmVxdWlyZWQpICE9PSBudWxsICYmIF9xICE9PSB2b2lkIDAgPyBfcSA6IE1BWF9FWFBSRVNTSU9OLFxuICAgICAgICBsb29wRW51bTogKF9yID0gby5sb29wRW51bSkgIT09IG51bGwgJiYgX3IgIT09IHZvaWQgMCA/IF9yIDogTUFYX0VYUFJFU1NJT04sXG4gICAgICAgIG1ldGE6IChfcyA9IG8ubWV0YSkgIT09IG51bGwgJiYgX3MgIT09IHZvaWQgMCA/IF9zIDogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZXM6IChfdCA9IG8ubWVzc2FnZXMpICE9PSBudWxsICYmIF90ICE9PSB2b2lkIDAgPyBfdCA6IHRydWUsXG4gICAgICAgIGlubGluZVJlZnM6IChfdSA9IG8uaW5saW5lUmVmcykgIT09IG51bGwgJiYgX3UgIT09IHZvaWQgMCA/IF91IDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hSWQ6IChfdiA9IG8uc2NoZW1hSWQpICE9PSBudWxsICYmIF92ICE9PSB2b2lkIDAgPyBfdiA6IFwiJGlkXCIsXG4gICAgICAgIGFkZFVzZWRTY2hlbWE6IChfdyA9IG8uYWRkVXNlZFNjaGVtYSkgIT09IG51bGwgJiYgX3cgIT09IHZvaWQgMCA/IF93IDogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdGVTY2hlbWE6IChfeCA9IG8udmFsaWRhdGVTY2hlbWEpICE9PSBudWxsICYmIF94ICE9PSB2b2lkIDAgPyBfeCA6IHRydWUsXG4gICAgICAgIHZhbGlkYXRlRm9ybWF0czogKF95ID0gby52YWxpZGF0ZUZvcm1hdHMpICE9PSBudWxsICYmIF95ICE9PSB2b2lkIDAgPyBfeSA6IHRydWUsXG4gICAgICAgIHVuaWNvZGVSZWdFeHA6IChfeiA9IG8udW5pY29kZVJlZ0V4cCkgIT09IG51bGwgJiYgX3ogIT09IHZvaWQgMCA/IF96IDogdHJ1ZSxcbiAgICAgICAgaW50MzJyYW5nZTogKF8wID0gby5pbnQzMnJhbmdlKSAhPT0gbnVsbCAmJiBfMCAhPT0gdm9pZCAwID8gXzAgOiB0cnVlLFxuICAgICAgICB1cmlSZXNvbHZlcjogdXJpUmVzb2x2ZXIsXG4gICAgfTtcbn1cbmNsYXNzIEFqdiB7XG4gICAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgICAgIHRoaXMuc2NoZW1hcyA9IHt9O1xuICAgICAgICB0aGlzLnJlZnMgPSB7fTtcbiAgICAgICAgdGhpcy5mb3JtYXRzID0ge307XG4gICAgICAgIHRoaXMuX2NvbXBpbGF0aW9ucyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5fbG9hZGluZyA9IHt9O1xuICAgICAgICB0aGlzLl9jYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgb3B0cyA9IHRoaXMub3B0cyA9IHsgLi4ub3B0cywgLi4ucmVxdWlyZWRPcHRpb25zKG9wdHMpIH07XG4gICAgICAgIGNvbnN0IHsgZXM1LCBsaW5lcyB9ID0gdGhpcy5vcHRzLmNvZGU7XG4gICAgICAgIHRoaXMuc2NvcGUgPSBuZXcgY29kZWdlbl8yLlZhbHVlU2NvcGUoeyBzY29wZToge30sIHByZWZpeGVzOiBFWFRfU0NPUEVfTkFNRVMsIGVzNSwgbGluZXMgfSk7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKG9wdHMubG9nZ2VyKTtcbiAgICAgICAgY29uc3QgZm9ybWF0T3B0ID0gb3B0cy52YWxpZGF0ZUZvcm1hdHM7XG4gICAgICAgIG9wdHMudmFsaWRhdGVGb3JtYXRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuUlVMRVMgPSAoMCwgcnVsZXNfMS5nZXRSdWxlcykoKTtcbiAgICAgICAgY2hlY2tPcHRpb25zLmNhbGwodGhpcywgcmVtb3ZlZE9wdGlvbnMsIG9wdHMsIFwiTk9UIFNVUFBPUlRFRFwiKTtcbiAgICAgICAgY2hlY2tPcHRpb25zLmNhbGwodGhpcywgZGVwcmVjYXRlZE9wdGlvbnMsIG9wdHMsIFwiREVQUkVDQVRFRFwiLCBcIndhcm5cIik7XG4gICAgICAgIHRoaXMuX21ldGFPcHRzID0gZ2V0TWV0YVNjaGVtYU9wdGlvbnMuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKG9wdHMuZm9ybWF0cylcbiAgICAgICAgICAgIGFkZEluaXRpYWxGb3JtYXRzLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuX2FkZFZvY2FidWxhcmllcygpO1xuICAgICAgICB0aGlzLl9hZGREZWZhdWx0TWV0YVNjaGVtYSgpO1xuICAgICAgICBpZiAob3B0cy5rZXl3b3JkcylcbiAgICAgICAgICAgIGFkZEluaXRpYWxLZXl3b3Jkcy5jYWxsKHRoaXMsIG9wdHMua2V5d29yZHMpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdHMubWV0YSA9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKG9wdHMubWV0YSk7XG4gICAgICAgIGFkZEluaXRpYWxTY2hlbWFzLmNhbGwodGhpcyk7XG4gICAgICAgIG9wdHMudmFsaWRhdGVGb3JtYXRzID0gZm9ybWF0T3B0O1xuICAgIH1cbiAgICBfYWRkVm9jYWJ1bGFyaWVzKCkge1xuICAgICAgICB0aGlzLmFkZEtleXdvcmQoXCIkYXN5bmNcIik7XG4gICAgfVxuICAgIF9hZGREZWZhdWx0TWV0YVNjaGVtYSgpIHtcbiAgICAgICAgY29uc3QgeyAkZGF0YSwgbWV0YSwgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgbGV0IF9kYXRhUmVmU2NoZW1hID0gJGRhdGFSZWZTY2hlbWE7XG4gICAgICAgIGlmIChzY2hlbWFJZCA9PT0gXCJpZFwiKSB7XG4gICAgICAgICAgICBfZGF0YVJlZlNjaGVtYSA9IHsgLi4uJGRhdGFSZWZTY2hlbWEgfTtcbiAgICAgICAgICAgIF9kYXRhUmVmU2NoZW1hLmlkID0gX2RhdGFSZWZTY2hlbWEuJGlkO1xuICAgICAgICAgICAgZGVsZXRlIF9kYXRhUmVmU2NoZW1hLiRpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YSAmJiAkZGF0YSlcbiAgICAgICAgICAgIHRoaXMuYWRkTWV0YVNjaGVtYShfZGF0YVJlZlNjaGVtYSwgX2RhdGFSZWZTY2hlbWFbc2NoZW1hSWRdLCBmYWxzZSk7XG4gICAgfVxuICAgIGRlZmF1bHRNZXRhKCkge1xuICAgICAgICBjb25zdCB7IG1ldGEsIHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIHJldHVybiAodGhpcy5vcHRzLmRlZmF1bHRNZXRhID0gdHlwZW9mIG1ldGEgPT0gXCJvYmplY3RcIiA/IG1ldGFbc2NoZW1hSWRdIHx8IG1ldGEgOiB1bmRlZmluZWQpO1xuICAgIH1cbiAgICB2YWxpZGF0ZShzY2hlbWFLZXlSZWYsIC8vIGtleSwgcmVmIG9yIHNjaGVtYSBvYmplY3RcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlZHVuZGFudC10eXBlLWNvbnN0aXR1ZW50c1xuICAgIGRhdGEgLy8gdG8gYmUgdmFsaWRhdGVkXG4gICAgKSB7XG4gICAgICAgIGxldCB2O1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYUtleVJlZiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB2ID0gdGhpcy5nZXRTY2hlbWEoc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIGlmICghdilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHNjaGVtYSB3aXRoIGtleSBvciByZWYgXCIke3NjaGVtYUtleVJlZn1cImApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdiA9IHRoaXMuY29tcGlsZShzY2hlbWFLZXlSZWYpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gdihkYXRhKTtcbiAgICAgICAgaWYgKCEoXCIkYXN5bmNcIiBpbiB2KSlcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gdi5lcnJvcnM7XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG4gICAgY29tcGlsZShzY2hlbWEsIF9tZXRhKSB7XG4gICAgICAgIGNvbnN0IHNjaCA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWEsIF9tZXRhKTtcbiAgICAgICAgcmV0dXJuIChzY2gudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZVNjaGVtYUVudihzY2gpKTtcbiAgICB9XG4gICAgY29tcGlsZUFzeW5jKHNjaGVtYSwgbWV0YSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5sb2FkU2NoZW1hICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwib3B0aW9ucy5sb2FkU2NoZW1hIHNob3VsZCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgbG9hZFNjaGVtYSB9ID0gdGhpcy5vcHRzO1xuICAgICAgICByZXR1cm4gcnVuQ29tcGlsZUFzeW5jLmNhbGwodGhpcywgc2NoZW1hLCBtZXRhKTtcbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gcnVuQ29tcGlsZUFzeW5jKF9zY2hlbWEsIF9tZXRhKSB7XG4gICAgICAgICAgICBhd2FpdCBsb2FkTWV0YVNjaGVtYS5jYWxsKHRoaXMsIF9zY2hlbWEuJHNjaGVtYSk7XG4gICAgICAgICAgICBjb25zdCBzY2ggPSB0aGlzLl9hZGRTY2hlbWEoX3NjaGVtYSwgX21ldGEpO1xuICAgICAgICAgICAgcmV0dXJuIHNjaC52YWxpZGF0ZSB8fCBfY29tcGlsZUFzeW5jLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBsb2FkTWV0YVNjaGVtYSgkcmVmKSB7XG4gICAgICAgICAgICBpZiAoJHJlZiAmJiAhdGhpcy5nZXRTY2hlbWEoJHJlZikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBydW5Db21waWxlQXN5bmMuY2FsbCh0aGlzLCB7ICRyZWYgfSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gX2NvbXBpbGVBc3luYyhzY2gpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYoc2NoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIHJlZl9lcnJvcl8xLmRlZmF1bHQpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkLmNhbGwodGhpcywgZSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgbG9hZE1pc3NpbmdTY2hlbWEuY2FsbCh0aGlzLCBlLm1pc3NpbmdTY2hlbWEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfY29tcGlsZUFzeW5jLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0xvYWRlZCh7IG1pc3NpbmdTY2hlbWE6IHJlZiwgbWlzc2luZ1JlZiB9KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWZzW3JlZl0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFueVNjaGVtYSAke3JlZn0gaXMgbG9hZGVkIGJ1dCAke21pc3NpbmdSZWZ9IGNhbm5vdCBiZSByZXNvbHZlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRNaXNzaW5nU2NoZW1hKHJlZikge1xuICAgICAgICAgICAgY29uc3QgX3NjaGVtYSA9IGF3YWl0IF9sb2FkU2NoZW1hLmNhbGwodGhpcywgcmVmKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZWZzW3JlZl0pXG4gICAgICAgICAgICAgICAgYXdhaXQgbG9hZE1ldGFTY2hlbWEuY2FsbCh0aGlzLCBfc2NoZW1hLiRzY2hlbWEpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlZnNbcmVmXSlcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFNjaGVtYShfc2NoZW1hLCByZWYsIG1ldGEpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIF9sb2FkU2NoZW1hKHJlZikge1xuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMuX2xvYWRpbmdbcmVmXTtcbiAgICAgICAgICAgIGlmIChwKVxuICAgICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgKHRoaXMuX2xvYWRpbmdbcmVmXSA9IGxvYWRTY2hlbWEocmVmKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbG9hZGluZ1tyZWZdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEFkZHMgc2NoZW1hIHRvIHRoZSBpbnN0YW5jZVxuICAgIGFkZFNjaGVtYShzY2hlbWEsIC8vIElmIGFycmF5IGlzIHBhc3NlZCwgYGtleWAgd2lsbCBiZSBpZ25vcmVkXG4gICAga2V5LCAvLyBPcHRpb25hbCBzY2hlbWEga2V5LiBDYW4gYmUgcGFzc2VkIHRvIGB2YWxpZGF0ZWAgbWV0aG9kIGluc3RlYWQgb2Ygc2NoZW1hIG9iamVjdCBvciBpZC9yZWYuIE9uZSBzY2hlbWEgcGVyIGluc3RhbmNlIGNhbiBoYXZlIGVtcHR5IGBpZGAgYW5kIGBrZXlgLlxuICAgIF9tZXRhLCAvLyB0cnVlIGlmIHNjaGVtYSBpcyBhIG1ldGEtc2NoZW1hLiBVc2VkIGludGVybmFsbHksIGFkZE1ldGFTY2hlbWEgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC5cbiAgICBfdmFsaWRhdGVTY2hlbWEgPSB0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEgLy8gZmFsc2UgdG8gc2tpcCBzY2hlbWEgdmFsaWRhdGlvbi4gVXNlZCBpbnRlcm5hbGx5LCBvcHRpb24gdmFsaWRhdGVTY2hlbWEgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC5cbiAgICApIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY2ggb2Ygc2NoZW1hKVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKHNjaCwgdW5kZWZpbmVkLCBfbWV0YSwgX3ZhbGlkYXRlU2NoZW1hKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpZDtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgICAgIGlkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBpZCAhPSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzY2hlbWEgJHtzY2hlbWFJZH0gbXVzdCBiZSBzdHJpbmdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBrZXkgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShrZXkgfHwgaWQpO1xuICAgICAgICB0aGlzLl9jaGVja1VuaXF1ZShrZXkpO1xuICAgICAgICB0aGlzLnNjaGVtYXNba2V5XSA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWEsIF9tZXRhLCBrZXksIF92YWxpZGF0ZVNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBBZGQgc2NoZW1hIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIG90aGVyIHNjaGVtYXNcbiAgICAvLyBvcHRpb25zIGluIE1FVEFfSUdOT1JFX09QVElPTlMgYXJlIGFsd2F5IHNldCB0byBmYWxzZVxuICAgIGFkZE1ldGFTY2hlbWEoc2NoZW1hLCBrZXksIC8vIHNjaGVtYSBrZXlcbiAgICBfdmFsaWRhdGVTY2hlbWEgPSB0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEgLy8gZmFsc2UgdG8gc2tpcCBzY2hlbWEgdmFsaWRhdGlvbiwgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdmFsaWRhdGVTY2hlbWEgb3B0aW9uIGZvciBtZXRhLXNjaGVtYVxuICAgICkge1xuICAgICAgICB0aGlzLmFkZFNjaGVtYShzY2hlbWEsIGtleSwgdHJ1ZSwgX3ZhbGlkYXRlU2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vICBWYWxpZGF0ZSBzY2hlbWEgYWdhaW5zdCBpdHMgbWV0YS1zY2hlbWFcbiAgICB2YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRocm93T3JMb2dFcnJvcikge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBsZXQgJHNjaGVtYTtcbiAgICAgICAgJHNjaGVtYSA9IHNjaGVtYS4kc2NoZW1hO1xuICAgICAgICBpZiAoJHNjaGVtYSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAkc2NoZW1hICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIiRzY2hlbWEgbXVzdCBiZSBhIHN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICAkc2NoZW1hID0gJHNjaGVtYSB8fCB0aGlzLm9wdHMuZGVmYXVsdE1ldGEgfHwgdGhpcy5kZWZhdWx0TWV0YSgpO1xuICAgICAgICBpZiAoISRzY2hlbWEpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJtZXRhLXNjaGVtYSBub3QgYXZhaWxhYmxlXCIpO1xuICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLnZhbGlkYXRlKCRzY2hlbWEsIHNjaGVtYSk7XG4gICAgICAgIGlmICghdmFsaWQgJiYgdGhyb3dPckxvZ0Vycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gXCJzY2hlbWEgaXMgaW52YWxpZDogXCIgKyB0aGlzLmVycm9yc1RleHQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEgPT09IFwibG9nXCIpXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG4gICAgLy8gR2V0IGNvbXBpbGVkIHNjaGVtYSBieSBga2V5YCBvciBgcmVmYC5cbiAgICAvLyAoYGtleWAgdGhhdCB3YXMgcGFzc2VkIHRvIGBhZGRTY2hlbWFgIG9yIGZ1bGwgc2NoZW1hIHJlZmVyZW5jZSAtIGBzY2hlbWEuJGlkYCBvciByZXNvbHZlZCBpZClcbiAgICBnZXRTY2hlbWEoa2V5UmVmKSB7XG4gICAgICAgIGxldCBzY2g7XG4gICAgICAgIHdoaWxlICh0eXBlb2YgKHNjaCA9IGdldFNjaEVudi5jYWxsKHRoaXMsIGtleVJlZikpID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBrZXlSZWYgPSBzY2g7XG4gICAgICAgIGlmIChzY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBjb21waWxlXzEuU2NoZW1hRW52KHsgc2NoZW1hOiB7fSwgc2NoZW1hSWQgfSk7XG4gICAgICAgICAgICBzY2ggPSBjb21waWxlXzEucmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIGtleVJlZik7XG4gICAgICAgICAgICBpZiAoIXNjaClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnJlZnNba2V5UmVmXSA9IHNjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHNjaC52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlU2NoZW1hRW52KHNjaCkpO1xuICAgIH1cbiAgICAvLyBSZW1vdmUgY2FjaGVkIHNjaGVtYShzKS5cbiAgICAvLyBJZiBubyBwYXJhbWV0ZXIgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gICAgLy8gSWYgUmVnRXhwIGlzIHBhc3NlZCBhbGwgc2NoZW1hcyB3aXRoIGtleS9pZCBtYXRjaGluZyBwYXR0ZXJuIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gICAgLy8gRXZlbiBpZiBzY2hlbWEgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBzY2hlbWFzIGl0IHN0aWxsIGNhbiBiZSByZW1vdmVkIGFzIG90aGVyIHNjaGVtYXMgaGF2ZSBsb2NhbCByZWZlcmVuY2VzLlxuICAgIHJlbW92ZVNjaGVtYShzY2hlbWFLZXlSZWYpIHtcbiAgICAgICAgaWYgKHNjaGVtYUtleVJlZiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnNjaGVtYXMsIHNjaGVtYUtleVJlZik7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMucmVmcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHNjaGVtYUtleVJlZikge1xuICAgICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5zY2hlbWFzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMucmVmcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaCA9IGdldFNjaEVudi5jYWxsKHRoaXMsIHNjaGVtYUtleVJlZik7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2ggPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuZGVsZXRlKHNjaC5zY2hlbWEpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNjaGVtYXNbc2NoZW1hS2V5UmVmXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yZWZzW3NjaGVtYUtleVJlZl07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZUtleSA9IHNjaGVtYUtleVJlZjtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICAgICAgICAgIGxldCBpZCA9IHNjaGVtYUtleVJlZlt0aGlzLm9wdHMuc2NoZW1hSWRdO1xuICAgICAgICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgICAgICAgICBpZCA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2NoZW1hc1tpZF07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlZnNbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2LnJlbW92ZVNjaGVtYTogaW52YWxpZCBwYXJhbWV0ZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gYWRkIFwidm9jYWJ1bGFyeVwiIC0gYSBjb2xsZWN0aW9uIG9mIGtleXdvcmRzXG4gICAgYWRkVm9jYWJ1bGFyeShkZWZpbml0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGRlZiBvZiBkZWZpbml0aW9ucylcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5d29yZChkZWYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkS2V5d29yZChrd2RPckRlZiwgZGVmIC8vIGRlcHJlY2F0ZWRcbiAgICApIHtcbiAgICAgICAgbGV0IGtleXdvcmQ7XG4gICAgICAgIGlmICh0eXBlb2Yga3dkT3JEZWYgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAga2V5d29yZCA9IGt3ZE9yRGVmO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWYgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJ0aGVzZSBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkLCBzZWUgZG9jcyBmb3IgYWRkS2V5d29yZFwiKTtcbiAgICAgICAgICAgICAgICBkZWYua2V5d29yZCA9IGtleXdvcmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGt3ZE9yRGVmID09IFwib2JqZWN0XCIgJiYgZGVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRlZiA9IGt3ZE9yRGVmO1xuICAgICAgICAgICAga2V5d29yZCA9IGRlZi5rZXl3b3JkO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5d29yZCkgJiYgIWtleXdvcmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWRkS2V5d29yZHM6IGtleXdvcmQgbXVzdCBiZSBzdHJpbmcgb3Igbm9uLWVtcHR5IGFycmF5XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBhZGRLZXl3b3JkcyBwYXJhbWV0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrS2V5d29yZC5jYWxsKHRoaXMsIGtleXdvcmQsIGRlZik7XG4gICAgICAgIGlmICghZGVmKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmVhY2hJdGVtKShrZXl3b3JkLCAoa3dkKSA9PiBhZGRSdWxlLmNhbGwodGhpcywga3dkKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBrZXl3b3JkTWV0YXNjaGVtYS5jYWxsKHRoaXMsIGRlZik7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSB7XG4gICAgICAgICAgICAuLi5kZWYsXG4gICAgICAgICAgICB0eXBlOiAoMCwgZGF0YVR5cGVfMS5nZXRKU09OVHlwZXMpKGRlZi50eXBlKSxcbiAgICAgICAgICAgIHNjaGVtYVR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmLnNjaGVtYVR5cGUpLFxuICAgICAgICB9O1xuICAgICAgICAoMCwgdXRpbF8xLmVhY2hJdGVtKShrZXl3b3JkLCBkZWZpbml0aW9uLnR5cGUubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IChrKSA9PiBhZGRSdWxlLmNhbGwodGhpcywgaywgZGVmaW5pdGlvbilcbiAgICAgICAgICAgIDogKGspID0+IGRlZmluaXRpb24udHlwZS5mb3JFYWNoKCh0KSA9PiBhZGRSdWxlLmNhbGwodGhpcywgaywgZGVmaW5pdGlvbiwgdCkpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldEtleXdvcmQoa2V5d29yZCkge1xuICAgICAgICBjb25zdCBydWxlID0gdGhpcy5SVUxFUy5hbGxba2V5d29yZF07XG4gICAgICAgIHJldHVybiB0eXBlb2YgcnVsZSA9PSBcIm9iamVjdFwiID8gcnVsZS5kZWZpbml0aW9uIDogISFydWxlO1xuICAgIH1cbiAgICAvLyBSZW1vdmUga2V5d29yZFxuICAgIHJlbW92ZUtleXdvcmQoa2V5d29yZCkge1xuICAgICAgICAvLyBUT0RPIHJldHVybiB0eXBlIHNob3VsZCBiZSBBanZcbiAgICAgICAgY29uc3QgeyBSVUxFUyB9ID0gdGhpcztcbiAgICAgICAgZGVsZXRlIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdO1xuICAgICAgICBkZWxldGUgUlVMRVMuYWxsW2tleXdvcmRdO1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIFJVTEVTLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gZ3JvdXAucnVsZXMuZmluZEluZGV4KChydWxlKSA9PiBydWxlLmtleXdvcmQgPT09IGtleXdvcmQpO1xuICAgICAgICAgICAgaWYgKGkgPj0gMClcbiAgICAgICAgICAgICAgICBncm91cC5ydWxlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIEFkZCBmb3JtYXRcbiAgICBhZGRGb3JtYXQobmFtZSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZm9ybWF0ID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBmb3JtYXQgPSBuZXcgUmVnRXhwKGZvcm1hdCk7XG4gICAgICAgIHRoaXMuZm9ybWF0c1tuYW1lXSA9IGZvcm1hdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGVycm9yc1RleHQoZXJyb3JzID0gdGhpcy5lcnJvcnMsIC8vIG9wdGlvbmFsIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgeyBzZXBhcmF0b3IgPSBcIiwgXCIsIGRhdGFWYXIgPSBcImRhdGFcIiB9ID0ge30gLy8gb3B0aW9uYWwgb3B0aW9ucyB3aXRoIHByb3BlcnRpZXMgYHNlcGFyYXRvcmAgYW5kIGBkYXRhVmFyYFxuICAgICkge1xuICAgICAgICBpZiAoIWVycm9ycyB8fCBlcnJvcnMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIFwiTm8gZXJyb3JzXCI7XG4gICAgICAgIHJldHVybiBlcnJvcnNcbiAgICAgICAgICAgIC5tYXAoKGUpID0+IGAke2RhdGFWYXJ9JHtlLmluc3RhbmNlUGF0aH0gJHtlLm1lc3NhZ2V9YClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHRleHQsIG1zZykgPT4gdGV4dCArIHNlcGFyYXRvciArIG1zZyk7XG4gICAgfVxuICAgICRkYXRhTWV0YVNjaGVtYShtZXRhU2NoZW1hLCBrZXl3b3Jkc0pzb25Qb2ludGVycykge1xuICAgICAgICBjb25zdCBydWxlcyA9IHRoaXMuUlVMRVMuYWxsO1xuICAgICAgICBtZXRhU2NoZW1hID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtZXRhU2NoZW1hKSk7XG4gICAgICAgIGZvciAoY29uc3QganNvblBvaW50ZXIgb2Yga2V5d29yZHNKc29uUG9pbnRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoXCIvXCIpLnNsaWNlKDEpOyAvLyBmaXJzdCBzZWdtZW50IGlzIGFuIGVtcHR5IHN0cmluZ1xuICAgICAgICAgICAgbGV0IGtleXdvcmRzID0gbWV0YVNjaGVtYTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VnIG9mIHNlZ21lbnRzKVxuICAgICAgICAgICAgICAgIGtleXdvcmRzID0ga2V5d29yZHNbc2VnXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgJGRhdGEgfSA9IHJ1bGUuZGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBrZXl3b3Jkc1trZXldO1xuICAgICAgICAgICAgICAgIGlmICgkZGF0YSAmJiBzY2hlbWEpXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmRzW2tleV0gPSBzY2hlbWFPckRhdGEoc2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWV0YVNjaGVtYTtcbiAgICB9XG4gICAgX3JlbW92ZUFsbFNjaGVtYXMoc2NoZW1hcywgcmVnZXgpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXlSZWYgaW4gc2NoZW1hcykge1xuICAgICAgICAgICAgY29uc3Qgc2NoID0gc2NoZW1hc1trZXlSZWZdO1xuICAgICAgICAgICAgaWYgKCFyZWdleCB8fCByZWdleC50ZXN0KGtleVJlZikpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaCAmJiAhc2NoLm1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuZGVsZXRlKHNjaC5zY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2NoZW1hc1trZXlSZWZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfYWRkU2NoZW1hKHNjaGVtYSwgbWV0YSwgYmFzZUlkLCB2YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSwgYWRkU2NoZW1hID0gdGhpcy5vcHRzLmFkZFVzZWRTY2hlbWEpIHtcbiAgICAgICAgbGV0IGlkO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuanRkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNjaGVtYSBtdXN0IGJlIG9iamVjdFwiKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEgIT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2NoZW1hIG11c3QgYmUgb2JqZWN0IG9yIGJvb2xlYW5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNjaCA9IHRoaXMuX2NhY2hlLmdldChzY2hlbWEpO1xuICAgICAgICBpZiAoc2NoICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gc2NoO1xuICAgICAgICBiYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShpZCB8fCBiYXNlSWQpO1xuICAgICAgICBjb25zdCBsb2NhbFJlZnMgPSByZXNvbHZlXzEuZ2V0U2NoZW1hUmVmcy5jYWxsKHRoaXMsIHNjaGVtYSwgYmFzZUlkKTtcbiAgICAgICAgc2NoID0gbmV3IGNvbXBpbGVfMS5TY2hlbWFFbnYoeyBzY2hlbWEsIHNjaGVtYUlkLCBtZXRhLCBiYXNlSWQsIGxvY2FsUmVmcyB9KTtcbiAgICAgICAgdGhpcy5fY2FjaGUuc2V0KHNjaC5zY2hlbWEsIHNjaCk7XG4gICAgICAgIGlmIChhZGRTY2hlbWEgJiYgIWJhc2VJZC5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgICAgICAgLy8gVE9ETyBhdG0gaXQgaXMgYWxsb3dlZCB0byBvdmVyd3JpdGUgc2NoZW1hcyB3aXRob3V0IGlkIChpbnN0ZWFkIG9mIG5vdCBhZGRpbmcgdGhlbSlcbiAgICAgICAgICAgIGlmIChiYXNlSWQpXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tVbmlxdWUoYmFzZUlkKTtcbiAgICAgICAgICAgIHRoaXMucmVmc1tiYXNlSWRdID0gc2NoO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWxpZGF0ZVNjaGVtYSlcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG4gICAgX2NoZWNrVW5pcXVlKGlkKSB7XG4gICAgICAgIGlmICh0aGlzLnNjaGVtYXNbaWRdIHx8IHRoaXMucmVmc1tpZF0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2NoZW1hIHdpdGgga2V5IG9yIGlkIFwiJHtpZH1cIiBhbHJlYWR5IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9jb21waWxlU2NoZW1hRW52KHNjaCkge1xuICAgICAgICBpZiAoc2NoLm1ldGEpXG4gICAgICAgICAgICB0aGlzLl9jb21waWxlTWV0YVNjaGVtYShzY2gpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjb21waWxlXzEuY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIXNjaC52YWxpZGF0ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgcmV0dXJuIHNjaC52YWxpZGF0ZTtcbiAgICB9XG4gICAgX2NvbXBpbGVNZXRhU2NoZW1hKHNjaCkge1xuICAgICAgICBjb25zdCBjdXJyZW50T3B0cyA9IHRoaXMub3B0cztcbiAgICAgICAgdGhpcy5vcHRzID0gdGhpcy5fbWV0YU9wdHM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb21waWxlXzEuY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLm9wdHMgPSBjdXJyZW50T3B0cztcbiAgICAgICAgfVxuICAgIH1cbn1cbkFqdi5WYWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0aW9uX2Vycm9yXzEuZGVmYXVsdDtcbkFqdi5NaXNzaW5nUmVmRXJyb3IgPSByZWZfZXJyb3JfMS5kZWZhdWx0O1xuZXhwb3J0cy5kZWZhdWx0ID0gQWp2O1xuZnVuY3Rpb24gY2hlY2tPcHRpb25zKGNoZWNrT3B0cywgb3B0aW9ucywgbXNnLCBsb2cgPSBcImVycm9yXCIpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjaGVja09wdHMpIHtcbiAgICAgICAgY29uc3Qgb3B0ID0ga2V5O1xuICAgICAgICBpZiAob3B0IGluIG9wdGlvbnMpXG4gICAgICAgICAgICB0aGlzLmxvZ2dlcltsb2ddKGAke21zZ306IG9wdGlvbiAke2tleX0uICR7Y2hlY2tPcHRzW29wdF19YCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0U2NoRW52KGtleVJlZikge1xuICAgIGtleVJlZiA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGtleVJlZik7IC8vIFRPRE8gdGVzdHMgZmFpbCB3aXRob3V0IHRoaXMgbGluZVxuICAgIHJldHVybiB0aGlzLnNjaGVtYXNba2V5UmVmXSB8fCB0aGlzLnJlZnNba2V5UmVmXTtcbn1cbmZ1bmN0aW9uIGFkZEluaXRpYWxTY2hlbWFzKCkge1xuICAgIGNvbnN0IG9wdHNTY2hlbWFzID0gdGhpcy5vcHRzLnNjaGVtYXM7XG4gICAgaWYgKCFvcHRzU2NoZW1hcylcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHNTY2hlbWFzKSlcbiAgICAgICAgdGhpcy5hZGRTY2hlbWEob3B0c1NjaGVtYXMpO1xuICAgIGVsc2VcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb3B0c1NjaGVtYXMpXG4gICAgICAgICAgICB0aGlzLmFkZFNjaGVtYShvcHRzU2NoZW1hc1trZXldLCBrZXkpO1xufVxuZnVuY3Rpb24gYWRkSW5pdGlhbEZvcm1hdHMoKSB7XG4gICAgZm9yIChjb25zdCBuYW1lIGluIHRoaXMub3B0cy5mb3JtYXRzKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMub3B0cy5mb3JtYXRzW25hbWVdO1xuICAgICAgICBpZiAoZm9ybWF0KVxuICAgICAgICAgICAgdGhpcy5hZGRGb3JtYXQobmFtZSwgZm9ybWF0KTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRJbml0aWFsS2V5d29yZHMoZGVmcykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZnMpKSB7XG4gICAgICAgIHRoaXMuYWRkVm9jYWJ1bGFyeShkZWZzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvZ2dlci53YXJuKFwia2V5d29yZHMgb3B0aW9uIGFzIG1hcCBpcyBkZXByZWNhdGVkLCBwYXNzIGFycmF5XCIpO1xuICAgIGZvciAoY29uc3Qga2V5d29yZCBpbiBkZWZzKSB7XG4gICAgICAgIGNvbnN0IGRlZiA9IGRlZnNba2V5d29yZF07XG4gICAgICAgIGlmICghZGVmLmtleXdvcmQpXG4gICAgICAgICAgICBkZWYua2V5d29yZCA9IGtleXdvcmQ7XG4gICAgICAgIHRoaXMuYWRkS2V5d29yZChkZWYpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldE1ldGFTY2hlbWFPcHRpb25zKCkge1xuICAgIGNvbnN0IG1ldGFPcHRzID0geyAuLi50aGlzLm9wdHMgfTtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBNRVRBX0lHTk9SRV9PUFRJT05TKVxuICAgICAgICBkZWxldGUgbWV0YU9wdHNbb3B0XTtcbiAgICByZXR1cm4gbWV0YU9wdHM7XG59XG5jb25zdCBub0xvZ3MgPSB7IGxvZygpIHsgfSwgd2FybigpIHsgfSwgZXJyb3IoKSB7IH0gfTtcbmZ1bmN0aW9uIGdldExvZ2dlcihsb2dnZXIpIHtcbiAgICBpZiAobG9nZ2VyID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIG5vTG9ncztcbiAgICBpZiAobG9nZ2VyID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBjb25zb2xlO1xuICAgIGlmIChsb2dnZXIubG9nICYmIGxvZ2dlci53YXJuICYmIGxvZ2dlci5lcnJvcilcbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2dnZXIgbXVzdCBpbXBsZW1lbnQgbG9nLCB3YXJuIGFuZCBlcnJvciBtZXRob2RzXCIpO1xufVxuY29uc3QgS0VZV09SRF9OQU1FID0gL15bYS16XyRdW2EtejAtOV8kOi1dKiQvaTtcbmZ1bmN0aW9uIGNoZWNrS2V5d29yZChrZXl3b3JkLCBkZWYpIHtcbiAgICBjb25zdCB7IFJVTEVTIH0gPSB0aGlzO1xuICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIChrd2QpID0+IHtcbiAgICAgICAgaWYgKFJVTEVTLmtleXdvcmRzW2t3ZF0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleXdvcmQgJHtrd2R9IGlzIGFscmVhZHkgZGVmaW5lZGApO1xuICAgICAgICBpZiAoIUtFWVdPUkRfTkFNRS50ZXN0KGt3ZCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleXdvcmQgJHtrd2R9IGhhcyBpbnZhbGlkIG5hbWVgKTtcbiAgICB9KTtcbiAgICBpZiAoIWRlZilcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChkZWYuJGRhdGEgJiYgIShcImNvZGVcIiBpbiBkZWYgfHwgXCJ2YWxpZGF0ZVwiIGluIGRlZikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCckZGF0YSBrZXl3b3JkIG11c3QgaGF2ZSBcImNvZGVcIiBvciBcInZhbGlkYXRlXCIgZnVuY3Rpb24nKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRSdWxlKGtleXdvcmQsIGRlZmluaXRpb24sIGRhdGFUeXBlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHBvc3QgPSBkZWZpbml0aW9uID09PSBudWxsIHx8IGRlZmluaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlZmluaXRpb24ucG9zdDtcbiAgICBpZiAoZGF0YVR5cGUgJiYgcG9zdClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdrZXl3b3JkIHdpdGggXCJwb3N0XCIgZmxhZyBjYW5ub3QgaGF2ZSBcInR5cGVcIicpO1xuICAgIGNvbnN0IHsgUlVMRVMgfSA9IHRoaXM7XG4gICAgbGV0IHJ1bGVHcm91cCA9IHBvc3QgPyBSVUxFUy5wb3N0IDogUlVMRVMucnVsZXMuZmluZCgoeyB0eXBlOiB0IH0pID0+IHQgPT09IGRhdGFUeXBlKTtcbiAgICBpZiAoIXJ1bGVHcm91cCkge1xuICAgICAgICBydWxlR3JvdXAgPSB7IHR5cGU6IGRhdGFUeXBlLCBydWxlczogW10gfTtcbiAgICAgICAgUlVMRVMucnVsZXMucHVzaChydWxlR3JvdXApO1xuICAgIH1cbiAgICBSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXSA9IHRydWU7XG4gICAgaWYgKCFkZWZpbml0aW9uKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAga2V5d29yZCxcbiAgICAgICAgZGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgLi4uZGVmaW5pdGlvbixcbiAgICAgICAgICAgIHR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmaW5pdGlvbi50eXBlKSxcbiAgICAgICAgICAgIHNjaGVtYVR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmaW5pdGlvbi5zY2hlbWFUeXBlKSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGlmIChkZWZpbml0aW9uLmJlZm9yZSlcbiAgICAgICAgYWRkQmVmb3JlUnVsZS5jYWxsKHRoaXMsIHJ1bGVHcm91cCwgcnVsZSwgZGVmaW5pdGlvbi5iZWZvcmUpO1xuICAgIGVsc2VcbiAgICAgICAgcnVsZUdyb3VwLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgUlVMRVMuYWxsW2tleXdvcmRdID0gcnVsZTtcbiAgICAoX2EgPSBkZWZpbml0aW9uLmltcGxlbWVudHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb3JFYWNoKChrd2QpID0+IHRoaXMuYWRkS2V5d29yZChrd2QpKTtcbn1cbmZ1bmN0aW9uIGFkZEJlZm9yZVJ1bGUocnVsZUdyb3VwLCBydWxlLCBiZWZvcmUpIHtcbiAgICBjb25zdCBpID0gcnVsZUdyb3VwLnJ1bGVzLmZpbmRJbmRleCgoX3J1bGUpID0+IF9ydWxlLmtleXdvcmQgPT09IGJlZm9yZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgICBydWxlR3JvdXAucnVsZXMuc3BsaWNlKGksIDAsIHJ1bGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcnVsZUdyb3VwLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYHJ1bGUgJHtiZWZvcmV9IGlzIG5vdCBkZWZpbmVkYCk7XG4gICAgfVxufVxuZnVuY3Rpb24ga2V5d29yZE1ldGFzY2hlbWEoZGVmKSB7XG4gICAgbGV0IHsgbWV0YVNjaGVtYSB9ID0gZGVmO1xuICAgIGlmIChtZXRhU2NoZW1hID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoZGVmLiRkYXRhICYmIHRoaXMub3B0cy4kZGF0YSlcbiAgICAgICAgbWV0YVNjaGVtYSA9IHNjaGVtYU9yRGF0YShtZXRhU2NoZW1hKTtcbiAgICBkZWYudmFsaWRhdGVTY2hlbWEgPSB0aGlzLmNvbXBpbGUobWV0YVNjaGVtYSwgdHJ1ZSk7XG59XG5jb25zdCAkZGF0YVJlZiA9IHtcbiAgICAkcmVmOiBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hanYtdmFsaWRhdG9yL2Fqdi9tYXN0ZXIvbGliL3JlZnMvZGF0YS5qc29uI1wiLFxufTtcbmZ1bmN0aW9uIHNjaGVtYU9yRGF0YShzY2hlbWEpIHtcbiAgICByZXR1cm4geyBhbnlPZjogW3NjaGVtYSwgJGRhdGFSZWZdIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb3JlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpZFwiLFxuICAgIGNvZGUoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTk9UIFNVUFBPUlRFRDoga2V5d29yZCBcImlkXCIsIHVzZSBcIiRpZFwiIGZvciBzY2hlbWEgSUQnKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhbGxSZWYgPSBleHBvcnRzLmdldFZhbGlkYXRlID0gdm9pZCAwO1xuY29uc3QgcmVmX2Vycm9yXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCIkcmVmXCIsXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hOiAkcmVmLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IGJhc2VJZCwgc2NoZW1hRW52OiBlbnYsIHZhbGlkYXRlTmFtZSwgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IHsgcm9vdCB9ID0gZW52O1xuICAgICAgICBpZiAoKCRyZWYgPT09IFwiI1wiIHx8ICRyZWYgPT09IFwiIy9cIikgJiYgYmFzZUlkID09PSByb290LmJhc2VJZClcbiAgICAgICAgICAgIHJldHVybiBjYWxsUm9vdFJlZigpO1xuICAgICAgICBjb25zdCBzY2hPckVudiA9IGNvbXBpbGVfMS5yZXNvbHZlUmVmLmNhbGwoc2VsZiwgcm9vdCwgYmFzZUlkLCAkcmVmKTtcbiAgICAgICAgaWYgKHNjaE9yRW52ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgcmVmX2Vycm9yXzEuZGVmYXVsdChpdC5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsICRyZWYpO1xuICAgICAgICBpZiAoc2NoT3JFbnYgaW5zdGFuY2VvZiBjb21waWxlXzEuU2NoZW1hRW52KVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxWYWxpZGF0ZShzY2hPckVudik7XG4gICAgICAgIHJldHVybiBpbmxpbmVSZWZTY2hlbWEoc2NoT3JFbnYpO1xuICAgICAgICBmdW5jdGlvbiBjYWxsUm9vdFJlZigpIHtcbiAgICAgICAgICAgIGlmIChlbnYgPT09IHJvb3QpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxSZWYoY3h0LCB2YWxpZGF0ZU5hbWUsIGVudiwgZW52LiRhc3luYyk7XG4gICAgICAgICAgICBjb25zdCByb290TmFtZSA9IGdlbi5zY29wZVZhbHVlKFwicm9vdFwiLCB7IHJlZjogcm9vdCB9KTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsUmVmKGN4dCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtyb290TmFtZX0udmFsaWRhdGVgLCByb290LCByb290LiRhc3luYyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2FsbFZhbGlkYXRlKHNjaCkge1xuICAgICAgICAgICAgY29uc3QgdiA9IGdldFZhbGlkYXRlKGN4dCwgc2NoKTtcbiAgICAgICAgICAgIGNhbGxSZWYoY3h0LCB2LCBzY2gsIHNjaC4kYXN5bmMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlubGluZVJlZlNjaGVtYShzY2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaE5hbWUgPSBnZW4uc2NvcGVWYWx1ZShcInNjaGVtYVwiLCBvcHRzLmNvZGUuc291cmNlID09PSB0cnVlID8geyByZWY6IHNjaCwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHNjaCkgfSA6IHsgcmVmOiBzY2ggfSk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaCxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXM6IFtdLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgICAgICAgICAgdG9wU2NoZW1hUmVmOiBzY2hOYW1lLFxuICAgICAgICAgICAgICAgIGVyclNjaGVtYVBhdGg6ICRyZWYsXG4gICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0KTtcbiAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmZ1bmN0aW9uIGdldFZhbGlkYXRlKGN4dCwgc2NoKSB7XG4gICAgY29uc3QgeyBnZW4gfSA9IGN4dDtcbiAgICByZXR1cm4gc2NoLnZhbGlkYXRlXG4gICAgICAgID8gZ2VuLnNjb3BlVmFsdWUoXCJ2YWxpZGF0ZVwiLCB7IHJlZjogc2NoLnZhbGlkYXRlIH0pXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtnZW4uc2NvcGVWYWx1ZShcIndyYXBwZXJcIiwgeyByZWY6IHNjaCB9KX0udmFsaWRhdGVgO1xufVxuZXhwb3J0cy5nZXRWYWxpZGF0ZSA9IGdldFZhbGlkYXRlO1xuZnVuY3Rpb24gY2FsbFJlZihjeHQsIHYsIHNjaCwgJGFzeW5jKSB7XG4gICAgY29uc3QgeyBnZW4sIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBhbGxFcnJvcnMsIHNjaGVtYUVudjogZW52LCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBwYXNzQ3h0ID0gb3B0cy5wYXNzQ29udGV4dCA/IG5hbWVzXzEuZGVmYXVsdC50aGlzIDogY29kZWdlbl8xLm5pbDtcbiAgICBpZiAoJGFzeW5jKVxuICAgICAgICBjYWxsQXN5bmNSZWYoKTtcbiAgICBlbHNlXG4gICAgICAgIGNhbGxTeW5jUmVmKCk7XG4gICAgZnVuY3Rpb24gY2FsbEFzeW5jUmVmKCkge1xuICAgICAgICBpZiAoIWVudi4kYXN5bmMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBzY2hlbWEgcmVmZXJlbmNlZCBieSBzeW5jIHNjaGVtYVwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgIGdlbi50cnkoKCkgPT4ge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgJHsoMCwgY29kZV8xLmNhbGxWYWxpZGF0ZUNvZGUpKGN4dCwgdiwgcGFzc0N4dCl9YCk7XG4gICAgICAgICAgICBhZGRFdmFsdWF0ZWRGcm9tKHYpOyAvLyBUT0RPIHdpbGwgbm90IHdvcmsgd2l0aCBhc3luYywgaXQgaGFzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIHJlc3VsdFxuICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgIH0sIChlKSA9PiB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgISgke2V9IGluc3RhbmNlb2YgJHtpdC5WYWxpZGF0aW9uRXJyb3J9KWAsICgpID0+IGdlbi50aHJvdyhlKSk7XG4gICAgICAgICAgICBhZGRFcnJvcnNGcm9tKGUpO1xuICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbFN5bmNSZWYoKSB7XG4gICAgICAgIGN4dC5yZXN1bHQoKDAsIGNvZGVfMS5jYWxsVmFsaWRhdGVDb2RlKShjeHQsIHYsIHBhc3NDeHQpLCAoKSA9PiBhZGRFdmFsdWF0ZWRGcm9tKHYpLCAoKSA9PiBhZGRFcnJvcnNGcm9tKHYpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRXJyb3JzRnJvbShzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgZXJycyA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5lcnJvcnNgO1xuICAgICAgICBnZW4uYXNzaWduKG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbCA/ICR7ZXJyc30gOiAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5jb25jYXQoJHtlcnJzfSlgKTsgLy8gVE9ETyB0YWdnZWRcbiAgICAgICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5sZW5ndGhgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRXZhbHVhdGVkRnJvbShzb3VyY2UpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHNjaEV2YWx1YXRlZCA9IChfYSA9IHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC52YWxpZGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmV2YWx1YXRlZDtcbiAgICAgICAgLy8gVE9ETyByZWZhY3RvclxuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQgJiYgIXNjaEV2YWx1YXRlZC5keW5hbWljUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkLnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCBzY2hFdmFsdWF0ZWQucHJvcHMsIGl0LnByb3BzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdlbi52YXIoXCJwcm9wc1wiLCAoMCwgY29kZWdlbl8xLl8pIGAke3NvdXJjZX0uZXZhbHVhdGVkLnByb3BzYCk7XG4gICAgICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCBwcm9wcywgaXQucHJvcHMsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQuaXRlbXMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQgJiYgIXNjaEV2YWx1YXRlZC5keW5hbWljSXRlbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkLml0ZW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hFdmFsdWF0ZWQuaXRlbXMsIGl0Lml0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IGdlbi52YXIoXCJpdGVtc1wiLCAoMCwgY29kZWdlbl8xLl8pIGAke3NvdXJjZX0uZXZhbHVhdGVkLml0ZW1zYCk7XG4gICAgICAgICAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBpdGVtcywgaXQuaXRlbXMsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuY2FsbFJlZiA9IGNhbGxSZWY7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGlkXzEgPSByZXF1aXJlKFwiLi9pZFwiKTtcbmNvbnN0IHJlZl8xID0gcmVxdWlyZShcIi4vcmVmXCIpO1xuY29uc3QgY29yZSA9IFtcbiAgICBcIiRzY2hlbWFcIixcbiAgICBcIiRpZFwiLFxuICAgIFwiJGRlZnNcIixcbiAgICBcIiR2b2NhYnVsYXJ5XCIsXG4gICAgeyBrZXl3b3JkOiBcIiRjb21tZW50XCIgfSxcbiAgICBcImRlZmluaXRpb25zXCIsXG4gICAgaWRfMS5kZWZhdWx0LFxuICAgIHJlZl8xLmRlZmF1bHQsXG5dO1xuZXhwb3J0cy5kZWZhdWx0ID0gY29yZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3Qgb3BzID0gY29kZWdlbl8xLm9wZXJhdG9ycztcbmNvbnN0IEtXRHMgPSB7XG4gICAgbWF4aW11bTogeyBva1N0cjogXCI8PVwiLCBvazogb3BzLkxURSwgZmFpbDogb3BzLkdUIH0sXG4gICAgbWluaW11bTogeyBva1N0cjogXCI+PVwiLCBvazogb3BzLkdURSwgZmFpbDogb3BzLkxUIH0sXG4gICAgZXhjbHVzaXZlTWF4aW11bTogeyBva1N0cjogXCI8XCIsIG9rOiBvcHMuTFQsIGZhaWw6IG9wcy5HVEUgfSxcbiAgICBleGNsdXNpdmVNaW5pbXVtOiB7IG9rU3RyOiBcIj5cIiwgb2s6IG9wcy5HVCwgZmFpbDogb3BzLkxURSB9LFxufTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGJlICR7S1dEc1trZXl3b3JkXS5va1N0cn0gJHtzY2hlbWFDb2RlfWAsXG4gICAgcGFyYW1zOiAoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtjb21wYXJpc29uOiAke0tXRHNba2V5d29yZF0ub2tTdHJ9LCBsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBPYmplY3Qua2V5cyhLV0RzKSxcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSAke0tXRHNba2V5d29yZF0uZmFpbH0gJHtzY2hlbWFDb2RlfSB8fCBpc05hTigke2RhdGF9KWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXROdW1iZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBiZSBtdWx0aXBsZSBvZiAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge211bHRpcGxlT2Y6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJtdWx0aXBsZU9mXCIsXG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBzY2hlbWFUeXBlOiBcIm51bWJlclwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICAvLyBjb25zdCBiZHQgPSBiYWQkRGF0YVR5cGUoc2NoZW1hQ29kZSwgPHN0cmluZz5kZWYuc2NoZW1hVHlwZSwgJGRhdGEpXG4gICAgICAgIGNvbnN0IHByZWMgPSBpdC5vcHRzLm11bHRpcGxlT2ZQcmVjaXNpb247XG4gICAgICAgIGNvbnN0IHJlcyA9IGdlbi5sZXQoXCJyZXNcIik7XG4gICAgICAgIGNvbnN0IGludmFsaWQgPSBwcmVjXG4gICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYE1hdGguYWJzKE1hdGgucm91bmQoJHtyZXN9KSAtICR7cmVzfSkgPiAxZS0ke3ByZWN9YFxuICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke3Jlc30gIT09IHBhcnNlSW50KCR7cmVzfSlgO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCgke3NjaGVtYUNvZGV9ID09PSAwIHx8ICgke3Jlc30gPSAke2RhdGF9LyR7c2NoZW1hQ29kZX0sICR7aW52YWxpZH0pKWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXVsdGlwbGVPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qcyAtIHB1bnljb2RlLnVjczIuZGVjb2RlXG5mdW5jdGlvbiB1Y3MybGVuZ3RoKHN0cikge1xuICAgIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGg7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgbGV0IHBvcyA9IDA7XG4gICAgbGV0IHZhbHVlO1xuICAgIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICAgICAgbGVuZ3RoKys7XG4gICAgICAgIHZhbHVlID0gc3RyLmNoYXJDb2RlQXQocG9zKyspO1xuICAgICAgICBpZiAodmFsdWUgPj0gMHhkODAwICYmIHZhbHVlIDw9IDB4ZGJmZiAmJiBwb3MgPCBsZW4pIHtcbiAgICAgICAgICAgIC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuICAgICAgICAgICAgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIDB4ZmMwMCkgPT09IDB4ZGMwMClcbiAgICAgICAgICAgICAgICBwb3MrKzsgLy8gbG93IHN1cnJvZ2F0ZVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsZW5ndGg7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB1Y3MybGVuZ3RoO1xudWNzMmxlbmd0aC5jb2RlID0gJ3JlcXVpcmUoXCJhanYvZGlzdC9ydW50aW1lL3VjczJsZW5ndGhcIikuZGVmYXVsdCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11Y3MybGVuZ3RoLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IHVjczJsZW5ndGhfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL3VjczJsZW5ndGhcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heExlbmd0aFwiID8gXCJtb3JlXCIgOiBcImZld2VyXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgJHtjb21wfSB0aGFuICR7c2NoZW1hQ29kZX0gY2hhcmFjdGVyc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heExlbmd0aFwiLCBcIm1pbkxlbmd0aFwiXSxcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCBvcCA9IGtleXdvcmQgPT09IFwibWF4TGVuZ3RoXCIgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkdUIDogY29kZWdlbl8xLm9wZXJhdG9ycy5MVDtcbiAgICAgICAgY29uc3QgbGVuID0gaXQub3B0cy51bmljb2RlID09PSBmYWxzZSA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIHV0aWxfMS51c2VGdW5jKShjeHQuZ2VuLCB1Y3MybGVuZ3RoXzEuZGVmYXVsdCl9KCR7ZGF0YX0pYDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRMZW5ndGguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBwYXR0ZXJuIFwiJHtzY2hlbWFDb2RlfVwiYCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge3BhdHRlcm46ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwYXR0ZXJuXCIsXG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBzY2hlbWFUeXBlOiBcInN0cmluZ1wiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB1ID0gaXQub3B0cy51bmljb2RlUmVnRXhwID8gXCJ1XCIgOiBcIlwiO1xuICAgICAgICBpZiAoJGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcmVnRXhwIH0gPSBpdC5vcHRzLmNvZGU7XG4gICAgICAgICAgICBjb25zdCByZWdFeHBDb2RlID0gcmVnRXhwLmNvZGUgPT09IFwibmV3IFJlZ0V4cFwiID8gKDAsIGNvZGVnZW5fMS5fKSBgbmV3IFJlZ0V4cGAgOiAoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgcmVnRXhwKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgICAgICAgICAgZ2VuLnRyeSgoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke3JlZ0V4cENvZGV9KCR7c2NoZW1hQ29kZX0sICR7dX0pLnRlc3QoJHtkYXRhfSlgKSwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpKTtcbiAgICAgICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgISR7dmFsaWR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZWdFeHAgPSAoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgc2NoZW1hKTtcbiAgICAgICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgISR7cmVnRXhwfS50ZXN0KCR7ZGF0YX0pYCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhdHRlcm4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heFByb3BlcnRpZXNcIiA/IFwibW9yZVwiIDogXCJmZXdlclwiO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlICR7Y29tcH0gdGhhbiAke3NjaGVtYUNvZGV9IHByb3BlcnRpZXNgO1xuICAgIH0sXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBbXCJtYXhQcm9wZXJ0aWVzXCIsIFwibWluUHJvcGVydGllc1wiXSxcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhQcm9wZXJ0aWVzXCIgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkdUIDogY29kZWdlbl8xLm9wZXJhdG9ycy5MVDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGBPYmplY3Qua2V5cygke2RhdGF9KS5sZW5ndGggJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRQcm9wZXJ0aWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICcke21pc3NpbmdQcm9wZXJ0eX0nYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHkgfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bWlzc2luZ1Byb3BlcnR5OiAke21pc3NpbmdQcm9wZXJ0eX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJyZXF1aXJlZFwiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGRhdGEsICRkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9wdHMgfSA9IGl0O1xuICAgICAgICBpZiAoISRkYXRhICYmIHNjaGVtYS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHVzZUxvb3AgPSBzY2hlbWEubGVuZ3RoID49IG9wdHMubG9vcFJlcXVpcmVkO1xuICAgICAgICBpZiAoaXQuYWxsRXJyb3JzKVxuICAgICAgICAgICAgYWxsRXJyb3JzTW9kZSgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBleGl0T25FcnJvck1vZGUoKTtcbiAgICAgICAgaWYgKG9wdHMuc3RyaWN0UmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gY3h0LnBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgY29uc3QgeyBkZWZpbmVkUHJvcGVydGllcyB9ID0gY3h0Lml0O1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXF1aXJlZEtleSBvZiBzY2hlbWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoKHByb3BzID09PSBudWxsIHx8IHByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9wc1tyZXF1aXJlZEtleV0pID09PSB1bmRlZmluZWQgJiYgIWRlZmluZWRQcm9wZXJ0aWVzLmhhcyhyZXF1aXJlZEtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hUGF0aCA9IGl0LnNjaGVtYUVudi5iYXNlSWQgKyBpdC5lcnJTY2hlbWFQYXRoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBgcmVxdWlyZWQgcHJvcGVydHkgXCIke3JlcXVpcmVkS2V5fVwiIGlzIG5vdCBkZWZpbmVkIGF0IFwiJHtzY2hlbWFQYXRofVwiIChzdHJpY3RSZXF1aXJlZClgO1xuICAgICAgICAgICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIG1zZywgaXQub3B0cy5zdHJpY3RSZXF1aXJlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFsbEVycm9yc01vZGUoKSB7XG4gICAgICAgICAgICBpZiAodXNlTG9vcCB8fCAkZGF0YSkge1xuICAgICAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKGNvZGVnZW5fMS5uaWwsIGxvb3BBbGxSZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2Ygc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBjb2RlXzEuY2hlY2tSZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBwcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXhpdE9uRXJyb3JNb2RlKCkge1xuICAgICAgICAgICAgY29uc3QgbWlzc2luZyA9IGdlbi5sZXQoXCJtaXNzaW5nXCIpO1xuICAgICAgICAgICAgaWYgKHVzZUxvb3AgfHwgJGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjeHQuYmxvY2skZGF0YSh2YWxpZCwgKCkgPT4gbG9vcFVudGlsTWlzc2luZyhtaXNzaW5nLCB2YWxpZCkpO1xuICAgICAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVfMS5jaGVja01pc3NpbmdQcm9wKShjeHQsIHNjaGVtYSwgbWlzc2luZykpO1xuICAgICAgICAgICAgICAgICgwLCBjb2RlXzEucmVwb3J0TWlzc2luZ1Byb3ApKGN4dCwgbWlzc2luZyk7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wQWxsUmVxdWlyZWQoKSB7XG4gICAgICAgICAgICBnZW4uZm9yT2YoXCJwcm9wXCIsIHNjaGVtYUNvZGUsIChwcm9wKSA9PiB7XG4gICAgICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogcHJvcCB9KTtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVfMS5ub1Byb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIHByb3AsIG9wdHMub3duUHJvcGVydGllcyksICgpID0+IGN4dC5lcnJvcigpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BVbnRpbE1pc3NpbmcobWlzc2luZywgdmFsaWQpIHtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBtaXNzaW5nUHJvcGVydHk6IG1pc3NpbmcgfSk7XG4gICAgICAgICAgICBnZW4uZm9yT2YobWlzc2luZywgc2NoZW1hQ29kZSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsICgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgbWlzc2luZywgb3B0cy5vd25Qcm9wZXJ0aWVzKSk7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgY29kZWdlbl8xLm5pbCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVpcmVkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZSh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkge1xuICAgICAgICBjb25zdCBjb21wID0ga2V5d29yZCA9PT0gXCJtYXhJdGVtc1wiID8gXCJtb3JlXCIgOiBcImZld2VyXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgJHtjb21wfSB0aGFuICR7c2NoZW1hQ29kZX0gaXRlbXNgO1xuICAgIH0sXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBbXCJtYXhJdGVtc1wiLCBcIm1pbkl0ZW1zXCJdLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBcIm51bWJlclwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsga2V5d29yZCwgZGF0YSwgc2NoZW1hQ29kZSB9ID0gY3h0O1xuICAgICAgICBjb25zdCBvcCA9IGtleXdvcmQgPT09IFwibWF4SXRlbXNcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoICR7b3B9ICR7c2NoZW1hQ29kZX1gKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbWl0SXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hanYtdmFsaWRhdG9yL2Fqdi9pc3N1ZXMvODg5XG5jb25zdCBlcXVhbCA9IHJlcXVpcmUoXCJmYXN0LWRlZXAtZXF1YWxcIik7XG5lcXVhbC5jb2RlID0gJ3JlcXVpcmUoXCJhanYvZGlzdC9ydW50aW1lL2VxdWFsXCIpLmRlZmF1bHQnO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXF1YWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcXVhbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZGF0YVR5cGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3ZhbGlkYXRlL2RhdGFUeXBlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgaSwgaiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSBkdXBsaWNhdGUgaXRlbXMgKGl0ZW1zICMjICR7an0gYW5kICR7aX0gYXJlIGlkZW50aWNhbClgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IGksIGogfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7aTogJHtpfSwgajogJHtqfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYm9vbGVhblwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgIXNjaGVtYSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgIGNvbnN0IGl0ZW1UeXBlcyA9IHBhcmVudFNjaGVtYS5pdGVtcyA/ICgwLCBkYXRhVHlwZV8xLmdldFNjaGVtYVR5cGVzKShwYXJlbnRTY2hlbWEuaXRlbXMpIDogW107XG4gICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCB2YWxpZGF0ZVVuaXF1ZUl0ZW1zLCAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ID09PSBmYWxzZWApO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVVuaXF1ZUl0ZW1zKCkge1xuICAgICAgICAgICAgY29uc3QgaSA9IGdlbi5sZXQoXCJpXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgICAgICAgICBjb25zdCBqID0gZ2VuLmxldChcImpcIik7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgaSwgaiB9KTtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aX0gPiAxYCwgKCkgPT4gKGNhbk9wdGltaXplKCkgPyBsb29wTiA6IGxvb3BOMikoaSwgaikpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNhbk9wdGltaXplKCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1UeXBlcy5sZW5ndGggPiAwICYmICFpdGVtVHlwZXMuc29tZSgodCkgPT4gdCA9PT0gXCJvYmplY3RcIiB8fCB0ID09PSBcImFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BOKGksIGopIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBnZW4ubmFtZShcIml0ZW1cIik7XG4gICAgICAgICAgICBjb25zdCB3cm9uZ1R5cGUgPSAoMCwgZGF0YVR5cGVfMS5jaGVja0RhdGFUeXBlcykoaXRlbVR5cGVzLCBpdGVtLCBpdC5vcHRzLnN0cmljdE51bWJlcnMsIGRhdGFUeXBlXzEuRGF0YVR5cGUuV3JvbmcpO1xuICAgICAgICAgICAgY29uc3QgaW5kaWNlcyA9IGdlbi5jb25zdChcImluZGljZXNcIiwgKDAsIGNvZGVnZW5fMS5fKSBge31gKTtcbiAgICAgICAgICAgIGdlbi5mb3IoKDAsIGNvZGVnZW5fMS5fKSBgOyR7aX0tLTtgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZ2VuLmxldChpdGVtLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9WyR7aX1dYCk7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKHdyb25nVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgY29udGludWVgKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVR5cGVzLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtpdGVtfSA9PSBcInN0cmluZ1wiYCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdGVtfSArPSBcIl9cImApO1xuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7aW5kaWNlc31bJHtpdGVtfV0gPT0gXCJudW1iZXJcImAsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihqLCAoMCwgY29kZWdlbl8xLl8pIGAke2luZGljZXN9WyR7aXRlbX1dYCk7XG4gICAgICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkuYnJlYWsoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke2luZGljZXN9WyR7aXRlbX1dID0gJHtpfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcE4yKGksIGopIHtcbiAgICAgICAgICAgIGNvbnN0IGVxbCA9ICgwLCB1dGlsXzEudXNlRnVuYykoZ2VuLCBlcXVhbF8xLmRlZmF1bHQpO1xuICAgICAgICAgICAgY29uc3Qgb3V0ZXIgPSBnZW4ubmFtZShcIm91dGVyXCIpO1xuICAgICAgICAgICAgZ2VuLmxhYmVsKG91dGVyKS5mb3IoKDAsIGNvZGVnZW5fMS5fKSBgOyR7aX0tLTtgLCAoKSA9PiBnZW4uZm9yKCgwLCBjb2RlZ2VuXzEuXykgYCR7an0gPSAke2l9OyAke2p9LS07YCwgKCkgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXFsfSgke2RhdGF9WyR7aX1dLCAke2RhdGF9WyR7an1dKWAsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkuYnJlYWsob3V0ZXIpO1xuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5pcXVlSXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXF1YWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL2VxdWFsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IGJlIGVxdWFsIHRvIGNvbnN0YW50XCIsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHthbGxvd2VkVmFsdWU6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJjb25zdFwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hQ29kZSwgc2NoZW1hIH0gPSBjeHQ7XG4gICAgICAgIGlmICgkZGF0YSB8fCAoc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgISR7KDAsIHV0aWxfMS51c2VGdW5jKShnZW4sIGVxdWFsXzEuZGVmYXVsdCl9KCR7ZGF0YX0sICR7c2NoZW1hQ29kZX0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjeHQuZmFpbCgoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYX0gIT09ICR7ZGF0YX1gKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXF1YWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL2VxdWFsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgYWxsb3dlZCB2YWx1ZXNcIixcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FsbG93ZWRWYWx1ZXM6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJlbnVtXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoISRkYXRhICYmIHNjaGVtYS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbnVtIG11c3QgaGF2ZSBub24tZW1wdHkgYXJyYXlcIik7XG4gICAgICAgIGNvbnN0IHVzZUxvb3AgPSBzY2hlbWEubGVuZ3RoID49IGl0Lm9wdHMubG9vcEVudW07XG4gICAgICAgIGxldCBlcWw7XG4gICAgICAgIGNvbnN0IGdldEVxbCA9ICgpID0+IChlcWwgIT09IG51bGwgJiYgZXFsICE9PSB2b2lkIDAgPyBlcWwgOiAoZXFsID0gKDAsIHV0aWxfMS51c2VGdW5jKShnZW4sIGVxdWFsXzEuZGVmYXVsdCkpKTtcbiAgICAgICAgbGV0IHZhbGlkO1xuICAgICAgICBpZiAodXNlTG9vcCB8fCAkZGF0YSkge1xuICAgICAgICAgICAgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgICAgICBjeHQuYmxvY2skZGF0YSh2YWxpZCwgbG9vcEVudW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgICAgICBjb25zdCB2U2NoZW1hID0gZ2VuLmNvbnN0KFwidlNjaGVtYVwiLCBzY2hlbWFDb2RlKTtcbiAgICAgICAgICAgIHZhbGlkID0gKDAsIGNvZGVnZW5fMS5vcikoLi4uc2NoZW1hLm1hcCgoX3gsIGkpID0+IGVxdWFsQ29kZSh2U2NoZW1hLCBpKSkpO1xuICAgICAgICB9XG4gICAgICAgIGN4dC5wYXNzKHZhbGlkKTtcbiAgICAgICAgZnVuY3Rpb24gbG9vcEVudW0oKSB7XG4gICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICBnZW4uZm9yT2YoXCJ2XCIsIHNjaGVtYUNvZGUsICh2KSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtnZXRFcWwoKX0oJHtkYXRhfSwgJHt2fSlgLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKS5icmVhaygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXF1YWxDb2RlKHZTY2hlbWEsIGkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaCA9IHNjaGVtYVtpXTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygc2NoID09PSBcIm9iamVjdFwiICYmIHNjaCAhPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtnZXRFcWwoKX0oJHtkYXRhfSwgJHt2U2NoZW1hfVske2l9XSlgXG4gICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSAke3NjaH1gO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbnVtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBsaW1pdE51bWJlcl8xID0gcmVxdWlyZShcIi4vbGltaXROdW1iZXJcIik7XG5jb25zdCBtdWx0aXBsZU9mXzEgPSByZXF1aXJlKFwiLi9tdWx0aXBsZU9mXCIpO1xuY29uc3QgbGltaXRMZW5ndGhfMSA9IHJlcXVpcmUoXCIuL2xpbWl0TGVuZ3RoXCIpO1xuY29uc3QgcGF0dGVybl8xID0gcmVxdWlyZShcIi4vcGF0dGVyblwiKTtcbmNvbnN0IGxpbWl0UHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vbGltaXRQcm9wZXJ0aWVzXCIpO1xuY29uc3QgcmVxdWlyZWRfMSA9IHJlcXVpcmUoXCIuL3JlcXVpcmVkXCIpO1xuY29uc3QgbGltaXRJdGVtc18xID0gcmVxdWlyZShcIi4vbGltaXRJdGVtc1wiKTtcbmNvbnN0IHVuaXF1ZUl0ZW1zXzEgPSByZXF1aXJlKFwiLi91bmlxdWVJdGVtc1wiKTtcbmNvbnN0IGNvbnN0XzEgPSByZXF1aXJlKFwiLi9jb25zdFwiKTtcbmNvbnN0IGVudW1fMSA9IHJlcXVpcmUoXCIuL2VudW1cIik7XG5jb25zdCB2YWxpZGF0aW9uID0gW1xuICAgIC8vIG51bWJlclxuICAgIGxpbWl0TnVtYmVyXzEuZGVmYXVsdCxcbiAgICBtdWx0aXBsZU9mXzEuZGVmYXVsdCxcbiAgICAvLyBzdHJpbmdcbiAgICBsaW1pdExlbmd0aF8xLmRlZmF1bHQsXG4gICAgcGF0dGVybl8xLmRlZmF1bHQsXG4gICAgLy8gb2JqZWN0XG4gICAgbGltaXRQcm9wZXJ0aWVzXzEuZGVmYXVsdCxcbiAgICByZXF1aXJlZF8xLmRlZmF1bHQsXG4gICAgLy8gYXJyYXlcbiAgICBsaW1pdEl0ZW1zXzEuZGVmYXVsdCxcbiAgICB1bmlxdWVJdGVtc18xLmRlZmF1bHQsXG4gICAgLy8gYW55XG4gICAgeyBrZXl3b3JkOiBcInR5cGVcIiwgc2NoZW1hVHlwZTogW1wic3RyaW5nXCIsIFwiYXJyYXlcIl0gfSxcbiAgICB7IGtleXdvcmQ6IFwibnVsbGFibGVcIiwgc2NoZW1hVHlwZTogXCJib29sZWFuXCIgfSxcbiAgICBjb25zdF8xLmRlZmF1bHQsXG4gICAgZW51bV8xLmRlZmF1bHQsXG5dO1xuZXhwb3J0cy5kZWZhdWx0ID0gdmFsaWRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlIG1vcmUgdGhhbiAke2xlbn0gaXRlbXNgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtsaW1pdDogJHtsZW59fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYWRkaXRpb25hbEl0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgaXRlbXMgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCAnXCJhZGRpdGlvbmFsSXRlbXNcIiBpcyBpZ25vcmVkIHdoZW4gXCJpdGVtc1wiIGlzIG5vdCBhbiBhcnJheSBvZiBzY2hlbWFzJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMoY3h0LCBpdGVtcyk7XG4gICAgfSxcbn07XG5mdW5jdGlvbiB2YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyhjeHQsIGl0ZW1zKSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgZGF0YSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IGxlbjogaXRlbXMubGVuZ3RoIH0pO1xuICAgICAgICBjeHQucGFzcygoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPD0gJHtpdGVtcy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4udmFyKFwidmFsaWRcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtsZW59IDw9ICR7aXRlbXMubGVuZ3RofWApOyAvLyBUT0RPIHZhclxuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gdmFsaWRhdGVJdGVtcyh2YWxpZCkpO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zKHZhbGlkKSB7XG4gICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgaXRlbXMubGVuZ3RoLCBsZW4sIChpKSA9PiB7XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHsga2V5d29yZCwgZGF0YVByb3A6IGksIGRhdGFQcm9wVHlwZTogdXRpbF8xLlR5cGUuTnVtIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGlmICghaXQuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMgPSB2YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcztcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFkZGl0aW9uYWxJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVR1cGxlID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIml0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImFycmF5XCIsIFwiYm9vbGVhblwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZVR1cGxlKGN4dCwgXCJhZGRpdGlvbmFsSXRlbXNcIiwgc2NoZW1hKTtcbiAgICAgICAgaXQuaXRlbXMgPSB0cnVlO1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGN4dC5vaygoMCwgY29kZV8xLnZhbGlkYXRlQXJyYXkpKGN4dCkpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gdmFsaWRhdGVUdXBsZShjeHQsIGV4dHJhSXRlbXMsIHNjaEFyciA9IGN4dC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IGdlbiwgcGFyZW50U2NoZW1hLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGNoZWNrU3RyaWN0VHVwbGUocGFyZW50U2NoZW1hKTtcbiAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiBzY2hBcnIubGVuZ3RoICYmIGl0Lml0ZW1zICE9PSB0cnVlKSB7XG4gICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgc2NoQXJyLmxlbmd0aCwgaXQuaXRlbXMpO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgc2NoQXJyLmZvckVhY2goKHNjaCwgaSkgPT4ge1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPiAke2l9YCwgKCkgPT4gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgc2NoZW1hUHJvcDogaSxcbiAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICB9LCB2YWxpZCkpO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGNoZWNrU3RyaWN0VHVwbGUoc2NoKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0cywgZXJyU2NoZW1hUGF0aCB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IGwgPSBzY2hBcnIubGVuZ3RoO1xuICAgICAgICBjb25zdCBmdWxsVHVwbGUgPSBsID09PSBzY2gubWluSXRlbXMgJiYgKGwgPT09IHNjaC5tYXhJdGVtcyB8fCBzY2hbZXh0cmFJdGVtc10gPT09IGZhbHNlKTtcbiAgICAgICAgaWYgKG9wdHMuc3RyaWN0VHVwbGVzICYmICFmdWxsVHVwbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBcIiR7a2V5d29yZH1cIiBpcyAke2x9LXR1cGxlLCBidXQgbWluSXRlbXMgb3IgbWF4SXRlbXMvJHtleHRyYUl0ZW1zfSBhcmUgbm90IHNwZWNpZmllZCBvciBkaWZmZXJlbnQgYXQgcGF0aCBcIiR7ZXJyU2NoZW1hUGF0aH1cImA7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIG1zZywgb3B0cy5zdHJpY3RUdXBsZXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZVR1cGxlID0gdmFsaWRhdGVUdXBsZTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBpdGVtc18xID0gcmVxdWlyZShcIi4vaXRlbXNcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwcmVmaXhJdGVtc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJhcnJheVwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBjb2RlOiAoY3h0KSA9PiAoMCwgaXRlbXNfMS52YWxpZGF0ZVR1cGxlKShjeHQsIFwiaXRlbXNcIiksXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJlZml4SXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBhZGRpdGlvbmFsSXRlbXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxJdGVtc1wiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgbW9yZSB0aGFuICR7bGVufSBpdGVtc2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke2xlbn19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpdGVtc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgcHJlZml4SXRlbXMgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaXQuaXRlbXMgPSB0cnVlO1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChwcmVmaXhJdGVtcylcbiAgICAgICAgICAgICgwLCBhZGRpdGlvbmFsSXRlbXNfMS52YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcykoY3h0LCBwcmVmaXhJdGVtcyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGN4dC5vaygoMCwgY29kZV8xLnZhbGlkYXRlQXJyYXkpKGN4dCkpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXRlbXMyMDIwLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBtaW4sIG1heCB9IH0pID0+IG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHttaW59IHZhbGlkIGl0ZW0ocylgXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHttaW59IGFuZCBubyBtb3JlIHRoYW4gJHttYXh9IHZhbGlkIGl0ZW0ocylgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IG1pbiwgbWF4IH0gfSkgPT4gbWF4ID09PSB1bmRlZmluZWQgPyAoMCwgY29kZWdlbl8xLl8pIGB7bWluQ29udGFpbnM6ICR7bWlufX1gIDogKDAsIGNvZGVnZW5fMS5fKSBge21pbkNvbnRhaW5zOiAke21pbn0sIG1heENvbnRhaW5zOiAke21heH19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJjb250YWluc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICAgICAgbGV0IG1pbjtcbiAgICAgICAgbGV0IG1heDtcbiAgICAgICAgY29uc3QgeyBtaW5Db250YWlucywgbWF4Q29udGFpbnMgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaWYgKGl0Lm9wdHMubmV4dCkge1xuICAgICAgICAgICAgbWluID0gbWluQ29udGFpbnMgPT09IHVuZGVmaW5lZCA/IDEgOiBtaW5Db250YWlucztcbiAgICAgICAgICAgIG1heCA9IG1heENvbnRhaW5zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbWluID0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pbiwgbWF4IH0pO1xuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQgJiYgbWluID09PSAwKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBcIm1pbkNvbnRhaW5zXCIgPT0gMCB3aXRob3V0IFwibWF4Q29udGFpbnNcIjogXCJjb250YWluc1wiIGtleXdvcmQgaWdub3JlZGApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZCAmJiBtaW4gPiBtYXgpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwibWluQ29udGFpbnNcIiA+IFwibWF4Q29udGFpbnNcIiBpcyBhbHdheXMgaW52YWxpZGApO1xuICAgICAgICAgICAgY3h0LmZhaWwoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgIGxldCBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtsZW59ID49ICR7bWlufWA7XG4gICAgICAgICAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y29uZH0gJiYgJHtsZW59IDw9ICR7bWF4fWA7XG4gICAgICAgICAgICBjeHQucGFzcyhjb25kKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkICYmIG1pbiA9PT0gMSkge1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtcyh2YWxpZCwgKCkgPT4gZ2VuLmlmKHZhbGlkLCAoKSA9PiBnZW4uYnJlYWsoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1pbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2VuLmxldCh2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoID4gMGAsIHZhbGlkYXRlSXRlbXNXaXRoQ291bnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmxldCh2YWxpZCwgZmFsc2UpO1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtc1dpdGhDb3VudCgpO1xuICAgICAgICB9XG4gICAgICAgIGN4dC5yZXN1bHQodmFsaWQsICgpID0+IGN4dC5yZXNldCgpKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtc1dpdGhDb3VudCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaFZhbGlkID0gZ2VuLm5hbWUoXCJfdmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBjb3VudCA9IGdlbi5sZXQoXCJjb3VudFwiLCAwKTtcbiAgICAgICAgICAgIHZhbGlkYXRlSXRlbXMoc2NoVmFsaWQsICgpID0+IGdlbi5pZihzY2hWYWxpZCwgKCkgPT4gY2hlY2tMaW1pdHMoY291bnQpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtcyhfdmFsaWQsIGJsb2NrKSB7XG4gICAgICAgICAgICBnZW4uZm9yUmFuZ2UoXCJpXCIsIDAsIGxlbiwgKGkpID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJjb250YWluc1wiLFxuICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcDogaSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0sXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSwgX3ZhbGlkKTtcbiAgICAgICAgICAgICAgICBibG9jaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tMaW1pdHMoY291bnQpIHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9KytgKTtcbiAgICAgICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSA+PSAke21pbn1gLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKS5icmVhaygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSA+ICR7bWF4fWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhaygpKTtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSAxKVxuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSA+PSAke21pbn1gLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnRhaW5zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlU2NoZW1hRGVwcyA9IGV4cG9ydHMudmFsaWRhdGVQcm9wZXJ0eURlcHMgPSBleHBvcnRzLmVycm9yID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmV4cG9ydHMuZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IHByb3BlcnR5LCBkZXBzQ291bnQsIGRlcHMgfSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5X2llcyA9IGRlcHNDb3VudCA9PT0gMSA/IFwicHJvcGVydHlcIiA6IFwicHJvcGVydGllc1wiO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGhhdmUgJHtwcm9wZXJ0eV9pZXN9ICR7ZGVwc30gd2hlbiBwcm9wZXJ0eSAke3Byb3BlcnR5fSBpcyBwcmVzZW50YDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IHByb3BlcnR5LCBkZXBzQ291bnQsIGRlcHMsIG1pc3NpbmdQcm9wZXJ0eSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwcm9wZXJ0eTogJHtwcm9wZXJ0eX0sXG4gICAgbWlzc2luZ1Byb3BlcnR5OiAke21pc3NpbmdQcm9wZXJ0eX0sXG4gICAgZGVwc0NvdW50OiAke2RlcHNDb3VudH0sXG4gICAgZGVwczogJHtkZXBzfX1gLCAvLyBUT0RPIGNoYW5nZSB0byByZWZlcmVuY2Vcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJkZXBlbmRlbmNpZXNcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgZXJyb3I6IGV4cG9ydHMuZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgW3Byb3BEZXBzLCBzY2hEZXBzXSA9IHNwbGl0RGVwZW5kZW5jaWVzKGN4dCk7XG4gICAgICAgIHZhbGlkYXRlUHJvcGVydHlEZXBzKGN4dCwgcHJvcERlcHMpO1xuICAgICAgICB2YWxpZGF0ZVNjaGVtYURlcHMoY3h0LCBzY2hEZXBzKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIHNwbGl0RGVwZW5kZW5jaWVzKHsgc2NoZW1hIH0pIHtcbiAgICBjb25zdCBwcm9wZXJ0eURlcHMgPSB7fTtcbiAgICBjb25zdCBzY2hlbWFEZXBzID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwiX19wcm90b19fXCIpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3QgZGVwcyA9IEFycmF5LmlzQXJyYXkoc2NoZW1hW2tleV0pID8gcHJvcGVydHlEZXBzIDogc2NoZW1hRGVwcztcbiAgICAgICAgZGVwc1trZXldID0gc2NoZW1hW2tleV07XG4gICAgfVxuICAgIHJldHVybiBbcHJvcGVydHlEZXBzLCBzY2hlbWFEZXBzXTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHlEZXBzKGN4dCwgcHJvcGVydHlEZXBzID0gY3h0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgIGlmIChPYmplY3Qua2V5cyhwcm9wZXJ0eURlcHMpLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG1pc3NpbmcgPSBnZW4ubGV0KFwibWlzc2luZ1wiKTtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gcHJvcGVydHlEZXBzKSB7XG4gICAgICAgIGNvbnN0IGRlcHMgPSBwcm9wZXJ0eURlcHNbcHJvcF07XG4gICAgICAgIGlmIChkZXBzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBoYXNQcm9wZXJ0eSA9ICgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7XG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcCxcbiAgICAgICAgICAgIGRlcHNDb3VudDogZGVwcy5sZW5ndGgsXG4gICAgICAgICAgICBkZXBzOiBkZXBzLmpvaW4oXCIsIFwiKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgICAgIGdlbi5pZihoYXNQcm9wZXJ0eSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwUHJvcCBvZiBkZXBzKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBjb2RlXzEuY2hlY2tSZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBkZXBQcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2hhc1Byb3BlcnR5fSAmJiAoJHsoMCwgY29kZV8xLmNoZWNrTWlzc2luZ1Byb3ApKGN4dCwgZGVwcywgbWlzc2luZyl9KWApO1xuICAgICAgICAgICAgKDAsIGNvZGVfMS5yZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBtaXNzaW5nKTtcbiAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlUHJvcGVydHlEZXBzID0gdmFsaWRhdGVQcm9wZXJ0eURlcHM7XG5mdW5jdGlvbiB2YWxpZGF0ZVNjaGVtYURlcHMoY3h0LCBzY2hlbWFEZXBzID0gY3h0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gc2NoZW1hRGVwcykge1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYURlcHNbcHJvcF0pKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZV8xLnByb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcyksICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkLCBzY2hlbWFQcm9wOiBwcm9wIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZVZhbGlkRXZhbHVhdGVkKHNjaEN4dCwgdmFsaWQpO1xuICAgICAgICB9LCAoKSA9PiBnZW4udmFyKHZhbGlkLCB0cnVlKSAvLyBUT0RPIHZhclxuICAgICAgICApO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVTY2hlbWFEZXBzID0gdmFsaWRhdGVTY2hlbWFEZXBzO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVwZW5kZW5jaWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwicHJvcGVydHkgbmFtZSBtdXN0IGJlIHZhbGlkXCIsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge3Byb3BlcnR5TmFtZTogJHtwYXJhbXMucHJvcGVydHlOYW1lfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByb3BlcnR5TmFtZXNcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIGdlbi5mb3JJbihcImtleVwiLCBkYXRhLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgcHJvcGVydHlOYW1lOiBrZXkgfSk7XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkOiBcInByb3BlcnR5TmFtZXNcIixcbiAgICAgICAgICAgICAgICBkYXRhOiBrZXksXG4gICAgICAgICAgICAgICAgZGF0YVR5cGVzOiBbXCJzdHJpbmdcIl0sXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY3h0LmVycm9yKHRydWUpO1xuICAgICAgICAgICAgICAgIGlmICghaXQuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICBnZW4uYnJlYWsoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb3BlcnR5TmFtZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzXCIsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FkZGl0aW9uYWxQcm9wZXJ0eTogJHtwYXJhbXMuYWRkaXRpb25hbFByb3BlcnR5fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIsXG4gICAgdHlwZTogW1wib2JqZWN0XCJdLFxuICAgIHNjaGVtYVR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgYWxsb3dVbmRlZmluZWQ6IHRydWUsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBlcnJzQ291bnQsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWVycnNDb3VudClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgY29uc3QgeyBhbGxFcnJvcnMsIG9wdHMgfSA9IGl0O1xuICAgICAgICBpdC5wcm9wcyA9IHRydWU7XG4gICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgIT09IFwiYWxsXCIgJiYgKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShwYXJlbnRTY2hlbWEucHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IHBhdFByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShwYXJlbnRTY2hlbWEucGF0dGVyblByb3BlcnRpZXMpO1xuICAgICAgICBjaGVja0FkZGl0aW9uYWxQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGN4dC5vaygoMCwgY29kZWdlbl8xLl8pIGAke2VycnNDb3VudH0gPT09ICR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc31gKTtcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tBZGRpdGlvbmFsUHJvcGVydGllcygpIHtcbiAgICAgICAgICAgIGdlbi5mb3JJbihcImtleVwiLCBkYXRhLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wcy5sZW5ndGggJiYgIXBhdFByb3BzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnR5Q29kZShrZXkpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKGlzQWRkaXRpb25hbChrZXkpLCAoKSA9PiBhZGRpdGlvbmFsUHJvcGVydHlDb2RlKGtleSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNBZGRpdGlvbmFsKGtleSkge1xuICAgICAgICAgICAgbGV0IGRlZmluZWRQcm9wO1xuICAgICAgICAgICAgaWYgKHByb3BzLmxlbmd0aCA+IDgpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIG1heWJlIGFuIG9wdGlvbiBpbnN0ZWFkIG9mIGhhcmQtY29kZWQgOD9cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wc1NjaGVtYSA9ICgwLCB1dGlsXzEuc2NoZW1hUmVmT3JWYWwpKGl0LCBwYXJlbnRTY2hlbWEucHJvcGVydGllcywgXCJwcm9wZXJ0aWVzXCIpO1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gKDAsIGNvZGVfMS5pc093blByb3BlcnR5KShnZW4sIHByb3BzU2NoZW1hLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSAoMCwgY29kZWdlbl8xLm9yKSguLi5wcm9wcy5tYXAoKHApID0+ICgwLCBjb2RlZ2VuXzEuXykgYCR7a2V5fSA9PT0gJHtwfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gY29kZWdlbl8xLm5pbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXRQcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9ICgwLCBjb2RlZ2VuXzEub3IpKGRlZmluZWRQcm9wLCAuLi5wYXRQcm9wcy5tYXAoKHApID0+ICgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIGNvZGVfMS51c2VQYXR0ZXJuKShjeHQsIHApfS50ZXN0KCR7a2V5fSlgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5ub3QpKGRlZmluZWRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZWxldGVBZGRpdGlvbmFsKGtleSkge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgZGVsZXRlICR7ZGF0YX1bJHtrZXl9XWApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFkZGl0aW9uYWxQcm9wZXJ0eUNvZGUoa2V5KSB7XG4gICAgICAgICAgICBpZiAob3B0cy5yZW1vdmVBZGRpdGlvbmFsID09PSBcImFsbFwiIHx8IChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgJiYgc2NoZW1hID09PSBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVBZGRpdGlvbmFsKGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgYWRkaXRpb25hbFByb3BlcnR5OiBrZXkgfSk7XG4gICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiZmFpbGluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5QWRkaXRpb25hbFNjaGVtYShrZXksIHZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeHQucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcHBseUFkZGl0aW9uYWxTY2hlbWEoa2V5LCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlBZGRpdGlvbmFsU2NoZW1hKGtleSwgdmFsaWQsIGVycm9ycykge1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDoga2V5LFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8xLlR5cGUuU3RyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChlcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzdWJzY2hlbWEsIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYWxsRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoc3Vic2NoZW1hLCB2YWxpZCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFkZGl0aW9uYWxQcm9wZXJ0aWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdmFsaWRhdGVcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBhZGRpdGlvbmFsUHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbFByb3BlcnRpZXNcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwcm9wZXJ0aWVzXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcIm9iamVjdFwiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKGl0Lm9wdHMucmVtb3ZlQWRkaXRpb25hbCA9PT0gXCJhbGxcIiAmJiBwYXJlbnRTY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXNfMS5kZWZhdWx0LmNvZGUobmV3IHZhbGlkYXRlXzEuS2V5d29yZEN4dChpdCwgYWRkaXRpb25hbFByb3BlcnRpZXNfMS5kZWZhdWx0LCBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGxQcm9wcyA9ICgwLCBjb2RlXzEuYWxsU2NoZW1hUHJvcGVydGllcykoc2NoZW1hKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGFsbFByb3BzKSB7XG4gICAgICAgICAgICBpdC5kZWZpbmVkUHJvcGVydGllcy5hZGQocHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lm9wdHMudW5ldmFsdWF0ZWQgJiYgYWxsUHJvcHMubGVuZ3RoICYmIGl0LnByb3BzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sICgwLCB1dGlsXzEudG9IYXNoKShhbGxQcm9wcyksIGl0LnByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gYWxsUHJvcHMuZmlsdGVyKChwKSA9PiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYVtwXSkpO1xuICAgICAgICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChoYXNEZWZhdWx0KHByb3ApKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eVNjaGVtYShwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLnByb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcykpO1xuICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHlTY2hlbWEocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5lbHNlKCkudmFyKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBnZW4uZW5kSWYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN4dC5pdC5kZWZpbmVkUHJvcGVydGllcy5hZGQocHJvcCk7XG4gICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0RlZmF1bHQocHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0Lm9wdHMudXNlRGVmYXVsdHMgJiYgIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgc2NoZW1hW3Byb3BdLmRlZmF1bHQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseVByb3BlcnR5U2NoZW1hKHByb3ApIHtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwicHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IHByb3AsXG4gICAgICAgICAgICAgICAgZGF0YVByb3A6IHByb3AsXG4gICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCB1dGlsXzIgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicGF0dGVyblByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgZGF0YSwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9wdHMgfSA9IGl0O1xuICAgICAgICBjb25zdCBwYXR0ZXJucyA9ICgwLCBjb2RlXzEuYWxsU2NoZW1hUHJvcGVydGllcykoc2NoZW1hKTtcbiAgICAgICAgY29uc3QgYWx3YXlzVmFsaWRQYXR0ZXJucyA9IHBhdHRlcm5zLmZpbHRlcigocCkgPT4gKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYVtwXSkpO1xuICAgICAgICBpZiAocGF0dGVybnMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAoYWx3YXlzVmFsaWRQYXR0ZXJucy5sZW5ndGggPT09IHBhdHRlcm5zLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICghaXQub3B0cy51bmV2YWx1YXRlZCB8fCBpdC5wcm9wcyA9PT0gdHJ1ZSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hlY2tQcm9wZXJ0aWVzID0gb3B0cy5zdHJpY3RTY2hlbWEgJiYgIW9wdHMuYWxsb3dNYXRjaGluZ1Byb3BlcnRpZXMgJiYgcGFyZW50U2NoZW1hLnByb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgaWYgKGl0LnByb3BzICE9PSB0cnVlICYmICEoaXQucHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gKDAsIHV0aWxfMi5ldmFsdWF0ZWRQcm9wc1RvTmFtZSkoZ2VuLCBpdC5wcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBwcm9wcyB9ID0gaXQ7XG4gICAgICAgIHZhbGlkYXRlUGF0dGVyblByb3BlcnRpZXMoKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVQYXR0ZXJuUHJvcGVydGllcygpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGF0IG9mIHBhdHRlcm5zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrUHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tNYXRjaGluZ1Byb3BlcnRpZXMocGF0KTtcbiAgICAgICAgICAgICAgICBpZiAoaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlUHJvcGVydGllcyhwYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLnZhcih2YWxpZCwgdHJ1ZSk7IC8vIFRPRE8gdmFyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlUHJvcGVydGllcyhwYXQpO1xuICAgICAgICAgICAgICAgICAgICBnZW4uaWYodmFsaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja01hdGNoaW5nUHJvcGVydGllcyhwYXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBjaGVja1Byb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3IFJlZ0V4cChwYXQpLnRlc3QocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgcHJvcGVydHkgJHtwcm9wfSBtYXRjaGVzIHBhdHRlcm4gJHtwYXR9ICh1c2UgYWxsb3dNYXRjaGluZ1Byb3BlcnRpZXMpYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyhwYXQpIHtcbiAgICAgICAgICAgIGdlbi5mb3JJbihcImtleVwiLCBkYXRhLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIGNvZGVfMS51c2VQYXR0ZXJuKShjeHQsIHBhdCl9LnRlc3QoJHtrZXl9KWAsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWx3YXlzVmFsaWQgPSBhbHdheXNWYWxpZFBhdHRlcm5zLmluY2x1ZGVzKHBhdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWx3YXlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwicGF0dGVyblByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFQcm9wOiBwYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVByb3A6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMi5UeXBlLlN0cixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiBwcm9wcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3Byb3BzfVske2tleX1dYCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFsd2F5c1ZhbGlkICYmICFpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBzaG9ydC1jaXJjdWl0IGlmIGB1bmV2YWx1YXRlZFByb3BlcnRpZXNgIGlzIG5vdCBzdXBwb3J0ZWQgKG9wdHMubmV4dCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBpZiBhbGwgcHJvcGVydGllcyB3ZXJlIGV2YWx1YXRlZCAocHJvcHMgPT09IHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVyblByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJub3RcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICAgICAgY3h0LmZhaWwoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAga2V5d29yZDogXCJub3RcIixcbiAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICBjcmVhdGVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgYWxsRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICBjeHQuZmFpbFJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCksICgpID0+IGN4dC5lcnJvcigpKTtcbiAgICB9LFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6IFwibXVzdCBOT1QgYmUgdmFsaWRcIiB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhbnlPZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBjb2RlOiBjb2RlXzEudmFsaWRhdGVVbmlvbixcbiAgICBlcnJvcjogeyBtZXNzYWdlOiBcIm11c3QgbWF0Y2ggYSBzY2hlbWEgaW4gYW55T2ZcIiB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFueU9mLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwibXVzdCBtYXRjaCBleGFjdGx5IG9uZSBzY2hlbWEgaW4gb25lT2ZcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cGFzc2luZ1NjaGVtYXM6ICR7cGFyYW1zLnBhc3Npbmd9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwib25lT2ZcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgIGlmIChpdC5vcHRzLmRpc2NyaW1pbmF0b3IgJiYgcGFyZW50U2NoZW1hLmRpc2NyaW1pbmF0b3IpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHNjaEFyciA9IHNjaGVtYTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgZmFsc2UpO1xuICAgICAgICBjb25zdCBwYXNzaW5nID0gZ2VuLmxldChcInBhc3NpbmdcIiwgbnVsbCk7XG4gICAgICAgIGNvbnN0IHNjaFZhbGlkID0gZ2VuLm5hbWUoXCJfdmFsaWRcIik7XG4gICAgICAgIGN4dC5zZXRQYXJhbXMoeyBwYXNzaW5nIH0pO1xuICAgICAgICAvLyBUT0RPIHBvc3NpYmx5IGZhaWwgc3RyYWlnaHQgYXdheSAod2l0aCB3YXJuaW5nIG9yIGV4Y2VwdGlvbikgaWYgdGhlcmUgYXJlIHR3byBlbXB0eSBhbHdheXMgdmFsaWQgc2NoZW1hc1xuICAgICAgICBnZW4uYmxvY2sodmFsaWRhdGVPbmVPZik7XG4gICAgICAgIGN4dC5yZXN1bHQodmFsaWQsICgpID0+IGN4dC5yZXNldCgpLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZU9uZU9mKCkge1xuICAgICAgICAgICAgc2NoQXJyLmZvckVhY2goKHNjaCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBzY2hDeHQ7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIGdlbi52YXIoc2NoVmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiBcIm9uZU9mXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFQcm9wOiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAuaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hWYWxpZH0gJiYgJHt2YWxpZH1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFzc2lnbih2YWxpZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXNzaWduKHBhc3NpbmcsICgwLCBjb2RlZ2VuXzEuXykgYFske3Bhc3Npbmd9LCAke2l9XWApXG4gICAgICAgICAgICAgICAgICAgICAgICAuZWxzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBnZW4uaWYoc2NoVmFsaWQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24ocGFzc2luZywgaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hDeHQpXG4gICAgICAgICAgICAgICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0LCBjb2RlZ2VuXzEuTmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b25lT2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhbGxPZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgc2NoZW1hLmZvckVhY2goKHNjaCwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2gpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkOiBcImFsbE9mXCIsIHNjaGVtYVByb3A6IGkgfSwgdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQpO1xuICAgICAgICB9KTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFsbE9mLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgbWF0Y2ggXCIke3BhcmFtcy5pZkNsYXVzZX1cIiBzY2hlbWFgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtmYWlsaW5nS2V5d29yZDogJHtwYXJhbXMuaWZDbGF1c2V9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiaWZcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEudGhlbiA9PT0gdW5kZWZpbmVkICYmIHBhcmVudFNjaGVtYS5lbHNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgJ1wiaWZcIiB3aXRob3V0IFwidGhlblwiIGFuZCBcImVsc2VcIiBpcyBpZ25vcmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzVGhlbiA9IGhhc1NjaGVtYShpdCwgXCJ0aGVuXCIpO1xuICAgICAgICBjb25zdCBoYXNFbHNlID0gaGFzU2NoZW1hKGl0LCBcImVsc2VcIik7XG4gICAgICAgIGlmICghaGFzVGhlbiAmJiAhaGFzRWxzZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHNjaFZhbGlkID0gZ2VuLm5hbWUoXCJfdmFsaWRcIik7XG4gICAgICAgIHZhbGlkYXRlSWYoKTtcbiAgICAgICAgY3h0LnJlc2V0KCk7XG4gICAgICAgIGlmIChoYXNUaGVuICYmIGhhc0Vsc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGlmQ2xhdXNlID0gZ2VuLmxldChcImlmQ2xhdXNlXCIpO1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IGlmQ2xhdXNlIH0pO1xuICAgICAgICAgICAgZ2VuLmlmKHNjaFZhbGlkLCB2YWxpZGF0ZUNsYXVzZShcInRoZW5cIiwgaWZDbGF1c2UpLCB2YWxpZGF0ZUNsYXVzZShcImVsc2VcIiwgaWZDbGF1c2UpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYXNUaGVuKSB7XG4gICAgICAgICAgICBnZW4uaWYoc2NoVmFsaWQsIHZhbGlkYXRlQ2xhdXNlKFwidGhlblwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHNjaFZhbGlkKSwgdmFsaWRhdGVDbGF1c2UoXCJlbHNlXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBjeHQucGFzcyh2YWxpZCwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVJZigpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwiaWZcIixcbiAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUVycm9yczogZmFsc2UsXG4gICAgICAgICAgICAgICAgYWxsRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgIH0sIHNjaFZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlQ2xhdXNlKGtleXdvcmQsIGlmQ2xhdXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkIH0sIHNjaFZhbGlkKTtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBzY2hWYWxpZCk7XG4gICAgICAgICAgICAgICAgY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgaWYgKGlmQ2xhdXNlKVxuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKGlmQ2xhdXNlLCAoMCwgY29kZWdlbl8xLl8pIGAke2tleXdvcmR9YCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgaWZDbGF1c2U6IGtleXdvcmQgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSxcbn07XG5mdW5jdGlvbiBoYXNTY2hlbWEoaXQsIGtleXdvcmQpIHtcbiAgICBjb25zdCBzY2hlbWEgPSBpdC5zY2hlbWFba2V5d29yZF07XG4gICAgcmV0dXJuIHNjaGVtYSAhPT0gdW5kZWZpbmVkICYmICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlmLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcInRoZW5cIiwgXCJlbHNlXCJdLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgY29kZSh7IGtleXdvcmQsIHBhcmVudFNjaGVtYSwgaXQgfSkge1xuICAgICAgICBpZiAocGFyZW50U2NoZW1hLmlmID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBcIiR7a2V5d29yZH1cIiB3aXRob3V0IFwiaWZcIiBpcyBpZ25vcmVkYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aGVuRWxzZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgYWRkaXRpb25hbEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsSXRlbXNcIik7XG5jb25zdCBwcmVmaXhJdGVtc18xID0gcmVxdWlyZShcIi4vcHJlZml4SXRlbXNcIik7XG5jb25zdCBpdGVtc18xID0gcmVxdWlyZShcIi4vaXRlbXNcIik7XG5jb25zdCBpdGVtczIwMjBfMSA9IHJlcXVpcmUoXCIuL2l0ZW1zMjAyMFwiKTtcbmNvbnN0IGNvbnRhaW5zXzEgPSByZXF1aXJlKFwiLi9jb250YWluc1wiKTtcbmNvbnN0IGRlcGVuZGVuY2llc18xID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzXCIpO1xuY29uc3QgcHJvcGVydHlOYW1lc18xID0gcmVxdWlyZShcIi4vcHJvcGVydHlOYW1lc1wiKTtcbmNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsUHJvcGVydGllc1wiKTtcbmNvbnN0IHByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL3Byb3BlcnRpZXNcIik7XG5jb25zdCBwYXR0ZXJuUHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vcGF0dGVyblByb3BlcnRpZXNcIik7XG5jb25zdCBub3RfMSA9IHJlcXVpcmUoXCIuL25vdFwiKTtcbmNvbnN0IGFueU9mXzEgPSByZXF1aXJlKFwiLi9hbnlPZlwiKTtcbmNvbnN0IG9uZU9mXzEgPSByZXF1aXJlKFwiLi9vbmVPZlwiKTtcbmNvbnN0IGFsbE9mXzEgPSByZXF1aXJlKFwiLi9hbGxPZlwiKTtcbmNvbnN0IGlmXzEgPSByZXF1aXJlKFwiLi9pZlwiKTtcbmNvbnN0IHRoZW5FbHNlXzEgPSByZXF1aXJlKFwiLi90aGVuRWxzZVwiKTtcbmZ1bmN0aW9uIGdldEFwcGxpY2F0b3IoZHJhZnQyMDIwID0gZmFsc2UpIHtcbiAgICBjb25zdCBhcHBsaWNhdG9yID0gW1xuICAgICAgICAvLyBhbnlcbiAgICAgICAgbm90XzEuZGVmYXVsdCxcbiAgICAgICAgYW55T2ZfMS5kZWZhdWx0LFxuICAgICAgICBvbmVPZl8xLmRlZmF1bHQsXG4gICAgICAgIGFsbE9mXzEuZGVmYXVsdCxcbiAgICAgICAgaWZfMS5kZWZhdWx0LFxuICAgICAgICB0aGVuRWxzZV8xLmRlZmF1bHQsXG4gICAgICAgIC8vIG9iamVjdFxuICAgICAgICBwcm9wZXJ0eU5hbWVzXzEuZGVmYXVsdCxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgICAgICBkZXBlbmRlbmNpZXNfMS5kZWZhdWx0LFxuICAgICAgICBwcm9wZXJ0aWVzXzEuZGVmYXVsdCxcbiAgICAgICAgcGF0dGVyblByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgIF07XG4gICAgLy8gYXJyYXlcbiAgICBpZiAoZHJhZnQyMDIwKVxuICAgICAgICBhcHBsaWNhdG9yLnB1c2gocHJlZml4SXRlbXNfMS5kZWZhdWx0LCBpdGVtczIwMjBfMS5kZWZhdWx0KTtcbiAgICBlbHNlXG4gICAgICAgIGFwcGxpY2F0b3IucHVzaChhZGRpdGlvbmFsSXRlbXNfMS5kZWZhdWx0LCBpdGVtc18xLmRlZmF1bHQpO1xuICAgIGFwcGxpY2F0b3IucHVzaChjb250YWluc18xLmRlZmF1bHQpO1xuICAgIHJldHVybiBhcHBsaWNhdG9yO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZ2V0QXBwbGljYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgbWF0Y2ggZm9ybWF0IFwiJHtzY2hlbWFDb2RlfVwiYCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2Zvcm1hdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImZvcm1hdFwiLFxuICAgIHR5cGU6IFtcIm51bWJlclwiLCBcInN0cmluZ1wiXSxcbiAgICBzY2hlbWFUeXBlOiBcInN0cmluZ1wiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0LCBydWxlVHlwZSkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgJGRhdGEsIHNjaGVtYSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvcHRzLCBlcnJTY2hlbWFQYXRoLCBzY2hlbWFFbnYsIHNlbGYgfSA9IGl0O1xuICAgICAgICBpZiAoIW9wdHMudmFsaWRhdGVGb3JtYXRzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoJGRhdGEpXG4gICAgICAgICAgICB2YWxpZGF0ZSREYXRhRm9ybWF0KCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHZhbGlkYXRlRm9ybWF0KCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlJERhdGFGb3JtYXQoKSB7XG4gICAgICAgICAgICBjb25zdCBmbXRzID0gZ2VuLnNjb3BlVmFsdWUoXCJmb3JtYXRzXCIsIHtcbiAgICAgICAgICAgICAgICByZWY6IHNlbGYuZm9ybWF0cyxcbiAgICAgICAgICAgICAgICBjb2RlOiBvcHRzLmNvZGUuZm9ybWF0cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZkRlZiA9IGdlbi5jb25zdChcImZEZWZcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXRzfVske3NjaGVtYUNvZGV9XWApO1xuICAgICAgICAgICAgY29uc3QgZlR5cGUgPSBnZW4ubGV0KFwiZlR5cGVcIik7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBnZW4ubGV0KFwiZm9ybWF0XCIpO1xuICAgICAgICAgICAgLy8gVE9ETyBzaW1wbGlmeVxuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2ZEZWZ9ID09IFwib2JqZWN0XCIgJiYgISgke2ZEZWZ9IGluc3RhbmNlb2YgUmVnRXhwKWAsICgpID0+IGdlbi5hc3NpZ24oZlR5cGUsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZkRlZn0udHlwZSB8fCBcInN0cmluZ1wiYCkuYXNzaWduKGZvcm1hdCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmRGVmfS52YWxpZGF0ZWApLCAoKSA9PiBnZW4uYXNzaWduKGZUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGBcInN0cmluZ1wiYCkuYXNzaWduKGZvcm1hdCwgZkRlZikpO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLm9yKSh1bmtub3duRm10KCksIGludmFsaWRGbXQoKSkpO1xuICAgICAgICAgICAgZnVuY3Rpb24gdW5rbm93bkZtdCgpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5zdHJpY3RTY2hlbWEgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZWdlbl8xLm5pbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSAmJiAhJHtmb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGludmFsaWRGbXQoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsbEZvcm1hdCA9IHNjaGVtYUVudi4kYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGAoJHtmRGVmfS5hc3luYyA/IGF3YWl0ICR7Zm9ybWF0fSgke2RhdGF9KSA6ICR7Zm9ybWF0fSgke2RhdGF9KSlgXG4gICAgICAgICAgICAgICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtmb3JtYXR9KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZERhdGEgPSAoMCwgY29kZWdlbl8xLl8pIGAodHlwZW9mICR7Zm9ybWF0fSA9PSBcImZ1bmN0aW9uXCIgPyAke2NhbGxGb3JtYXR9IDogJHtmb3JtYXR9LnRlc3QoJHtkYXRhfSkpYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtmb3JtYXR9ICYmICR7Zm9ybWF0fSAhPT0gdHJ1ZSAmJiAke2ZUeXBlfSA9PT0gJHtydWxlVHlwZX0gJiYgISR7dmFsaWREYXRhfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXREZWYgPSBzZWxmLmZvcm1hdHNbc2NoZW1hXTtcbiAgICAgICAgICAgIGlmICghZm9ybWF0RGVmKSB7XG4gICAgICAgICAgICAgICAgdW5rbm93bkZvcm1hdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3JtYXREZWYgPT09IHRydWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgW2ZtdFR5cGUsIGZvcm1hdCwgZm10UmVmXSA9IGdldEZvcm1hdChmb3JtYXREZWYpO1xuICAgICAgICAgICAgaWYgKGZtdFR5cGUgPT09IHJ1bGVUeXBlKVxuICAgICAgICAgICAgICAgIGN4dC5wYXNzKHZhbGlkQ29uZGl0aW9uKCkpO1xuICAgICAgICAgICAgZnVuY3Rpb24gdW5rbm93bkZvcm1hdCgpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5zdHJpY3RTY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm4odW5rbm93bk1zZygpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodW5rbm93bk1zZygpKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duTXNnKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYHVua25vd24gZm9ybWF0IFwiJHtzY2hlbWF9XCIgaWdub3JlZCBpbiBzY2hlbWEgYXQgcGF0aCBcIiR7ZXJyU2NoZW1hUGF0aH1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Rm9ybWF0KGZtdERlZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBmbXREZWYgaW5zdGFuY2VvZiBSZWdFeHBcbiAgICAgICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLnJlZ2V4cENvZGUpKGZtdERlZilcbiAgICAgICAgICAgICAgICAgICAgOiBvcHRzLmNvZGUuZm9ybWF0c1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGAke29wdHMuY29kZS5mb3JtYXRzfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoc2NoZW1hKX1gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25zdCBmbXQgPSBnZW4uc2NvcGVWYWx1ZShcImZvcm1hdHNcIiwgeyBrZXk6IHNjaGVtYSwgcmVmOiBmbXREZWYsIGNvZGUgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbXREZWYgPT0gXCJvYmplY3RcIiAmJiAhKGZtdERlZiBpbnN0YW5jZW9mIFJlZ0V4cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtmbXREZWYudHlwZSB8fCBcInN0cmluZ1wiLCBmbXREZWYudmFsaWRhdGUsICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10fS52YWxpZGF0ZWBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gW1wic3RyaW5nXCIsIGZtdERlZiwgZm10XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHZhbGlkQ29uZGl0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm9ybWF0RGVmID09IFwib2JqZWN0XCIgJiYgIShmb3JtYXREZWYgaW5zdGFuY2VvZiBSZWdFeHApICYmIGZvcm1hdERlZi5hc3luYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYUVudi4kYXN5bmMpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBmb3JtYXQgaW4gc3luYyBzY2hlbWFcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGBhd2FpdCAke2ZtdFJlZn0oJHtkYXRhfSlgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGZvcm1hdCA9PSBcImZ1bmN0aW9uXCIgPyAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdFJlZn0oJHtkYXRhfSlgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXRSZWZ9LnRlc3QoJHtkYXRhfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JtYXQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGZvcm1hdF8xID0gcmVxdWlyZShcIi4vZm9ybWF0XCIpO1xuY29uc3QgZm9ybWF0ID0gW2Zvcm1hdF8xLmRlZmF1bHRdO1xuZXhwb3J0cy5kZWZhdWx0ID0gZm9ybWF0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udGVudFZvY2FidWxhcnkgPSBleHBvcnRzLm1ldGFkYXRhVm9jYWJ1bGFyeSA9IHZvaWQgMDtcbmV4cG9ydHMubWV0YWRhdGFWb2NhYnVsYXJ5ID0gW1xuICAgIFwidGl0bGVcIixcbiAgICBcImRlc2NyaXB0aW9uXCIsXG4gICAgXCJkZWZhdWx0XCIsXG4gICAgXCJkZXByZWNhdGVkXCIsXG4gICAgXCJyZWFkT25seVwiLFxuICAgIFwid3JpdGVPbmx5XCIsXG4gICAgXCJleGFtcGxlc1wiLFxuXTtcbmV4cG9ydHMuY29udGVudFZvY2FidWxhcnkgPSBbXG4gICAgXCJjb250ZW50TWVkaWFUeXBlXCIsXG4gICAgXCJjb250ZW50RW5jb2RpbmdcIixcbiAgICBcImNvbnRlbnRTY2hlbWFcIixcbl07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXRhZGF0YS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNvbnN0IHZhbGlkYXRpb25fMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRpb25cIik7XG5jb25zdCBhcHBsaWNhdG9yXzEgPSByZXF1aXJlKFwiLi9hcHBsaWNhdG9yXCIpO1xuY29uc3QgZm9ybWF0XzEgPSByZXF1aXJlKFwiLi9mb3JtYXRcIik7XG5jb25zdCBtZXRhZGF0YV8xID0gcmVxdWlyZShcIi4vbWV0YWRhdGFcIik7XG5jb25zdCBkcmFmdDdWb2NhYnVsYXJpZXMgPSBbXG4gICAgY29yZV8xLmRlZmF1bHQsXG4gICAgdmFsaWRhdGlvbl8xLmRlZmF1bHQsXG4gICAgKDAsIGFwcGxpY2F0b3JfMS5kZWZhdWx0KSgpLFxuICAgIGZvcm1hdF8xLmRlZmF1bHQsXG4gICAgbWV0YWRhdGFfMS5tZXRhZGF0YVZvY2FidWxhcnksXG4gICAgbWV0YWRhdGFfMS5jb250ZW50Vm9jYWJ1bGFyeSxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSBkcmFmdDdWb2NhYnVsYXJpZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kcmFmdDcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGlzY3JFcnJvciA9IHZvaWQgMDtcbnZhciBEaXNjckVycm9yO1xuKGZ1bmN0aW9uIChEaXNjckVycm9yKSB7XG4gICAgRGlzY3JFcnJvcltcIlRhZ1wiXSA9IFwidGFnXCI7XG4gICAgRGlzY3JFcnJvcltcIk1hcHBpbmdcIl0gPSBcIm1hcHBpbmdcIjtcbn0pKERpc2NyRXJyb3IgfHwgKGV4cG9ydHMuRGlzY3JFcnJvciA9IERpc2NyRXJyb3IgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL2Rpc2NyaW1pbmF0b3IvdHlwZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZVwiKTtcbmNvbnN0IHJlZl9lcnJvcl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBkaXNjckVycm9yLCB0YWdOYW1lIH0gfSkgPT4gZGlzY3JFcnJvciA9PT0gdHlwZXNfMS5EaXNjckVycm9yLlRhZ1xuICAgICAgICA/IGB0YWcgXCIke3RhZ05hbWV9XCIgbXVzdCBiZSBzdHJpbmdgXG4gICAgICAgIDogYHZhbHVlIG9mIHRhZyBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIGluIG9uZU9mYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBkaXNjckVycm9yLCB0YWcsIHRhZ05hbWUgfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7ZXJyb3I6ICR7ZGlzY3JFcnJvcn0sIHRhZzogJHt0YWdOYW1lfSwgdGFnVmFsdWU6ICR7dGFnfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImRpc2NyaW1pbmF0b3JcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9uZU9mIH0gPSBwYXJlbnRTY2hlbWE7XG4gICAgICAgIGlmICghaXQub3B0cy5kaXNjcmltaW5hdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNjcmltaW5hdG9yOiByZXF1aXJlcyBkaXNjcmltaW5hdG9yIG9wdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWdOYW1lID0gc2NoZW1hLnByb3BlcnR5TmFtZTtcbiAgICAgICAgaWYgKHR5cGVvZiB0YWdOYW1lICE9IFwic3RyaW5nXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNjcmltaW5hdG9yOiByZXF1aXJlcyBwcm9wZXJ0eU5hbWVcIik7XG4gICAgICAgIGlmIChzY2hlbWEubWFwcGluZylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IG1hcHBpbmcgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgaWYgKCFvbmVPZilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIG9uZU9mIGtleXdvcmRcIik7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgdGFnID0gZ2VuLmNvbnN0KFwidGFnXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHRhZ05hbWUpfWApO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7dGFnfSA9PSBcInN0cmluZ1wiYCwgKCkgPT4gdmFsaWRhdGVNYXBwaW5nKCksICgpID0+IGN4dC5lcnJvcihmYWxzZSwgeyBkaXNjckVycm9yOiB0eXBlc18xLkRpc2NyRXJyb3IuVGFnLCB0YWcsIHRhZ05hbWUgfSkpO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZU1hcHBpbmcoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gZ2V0TWFwcGluZygpO1xuICAgICAgICAgICAgZ2VuLmlmKGZhbHNlKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGFnVmFsdWUgaW4gbWFwcGluZykge1xuICAgICAgICAgICAgICAgIGdlbi5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0YWd9ID09PSAke3RhZ1ZhbHVlfWApO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGFwcGx5VGFnU2NoZW1hKG1hcHBpbmdbdGFnVmFsdWVdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICAgICAgY3h0LmVycm9yKGZhbHNlLCB7IGRpc2NyRXJyb3I6IHR5cGVzXzEuRGlzY3JFcnJvci5NYXBwaW5nLCB0YWcsIHRhZ05hbWUgfSk7XG4gICAgICAgICAgICBnZW4uZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseVRhZ1NjaGVtYShzY2hlbWFQcm9wKSB7XG4gICAgICAgICAgICBjb25zdCBfdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQ6IFwib25lT2ZcIiwgc2NoZW1hUHJvcCB9LCBfdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCwgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIF92YWxpZDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRNYXBwaW5nKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3Qgb25lT2ZNYXBwaW5nID0ge307XG4gICAgICAgICAgICBjb25zdCB0b3BSZXF1aXJlZCA9IGhhc1JlcXVpcmVkKHBhcmVudFNjaGVtYSk7XG4gICAgICAgICAgICBsZXQgdGFnUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbmVPZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBzY2ggPSBvbmVPZltpXTtcbiAgICAgICAgICAgICAgICBpZiAoKHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC4kcmVmKSAmJiAhKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoLCBpdC5zZWxmLlJVTEVTKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWYgPSBzY2guJHJlZjtcbiAgICAgICAgICAgICAgICAgICAgc2NoID0gY29tcGlsZV8xLnJlc29sdmVSZWYuY2FsbChpdC5zZWxmLCBpdC5zY2hlbWFFbnYucm9vdCwgaXQuYmFzZUlkLCByZWYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoIGluc3RhbmNlb2YgY29tcGlsZV8xLlNjaGVtYUVudilcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaCA9IHNjaC5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2ggPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyByZWZfZXJyb3JfMS5kZWZhdWx0KGl0Lm9wdHMudXJpUmVzb2x2ZXIsIGl0LmJhc2VJZCwgcmVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcFNjaCA9IChfYSA9IHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC5wcm9wZXJ0aWVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbdGFnTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wU2NoICE9IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBvbmVPZiBzdWJzY2hlbWFzIChvciByZWZlcmVuY2VkIHNjaGVtYXMpIG11c3QgaGF2ZSBcInByb3BlcnRpZXMvJHt0YWdOYW1lfVwiYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhZ1JlcXVpcmVkID0gdGFnUmVxdWlyZWQgJiYgKHRvcFJlcXVpcmVkIHx8IGhhc1JlcXVpcmVkKHNjaCkpO1xuICAgICAgICAgICAgICAgIGFkZE1hcHBpbmdzKHByb3BTY2gsIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0YWdSZXF1aXJlZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IFwiJHt0YWdOYW1lfVwiIG11c3QgYmUgcmVxdWlyZWRgKTtcbiAgICAgICAgICAgIHJldHVybiBvbmVPZk1hcHBpbmc7XG4gICAgICAgICAgICBmdW5jdGlvbiBoYXNSZXF1aXJlZCh7IHJlcXVpcmVkIH0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyZXF1aXJlZCkgJiYgcmVxdWlyZWQuaW5jbHVkZXModGFnTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBhZGRNYXBwaW5ncyhzY2gsIGkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoLmNvbnN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZE1hcHBpbmcoc2NoLmNvbnN0LCBpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoLmVudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0YWdWYWx1ZSBvZiBzY2guZW51bSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWFwcGluZyh0YWdWYWx1ZSwgaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogXCJwcm9wZXJ0aWVzLyR7dGFnTmFtZX1cIiBtdXN0IGhhdmUgXCJjb25zdFwiIG9yIFwiZW51bVwiYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYWRkTWFwcGluZyh0YWdWYWx1ZSwgaSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFnVmFsdWUgIT0gXCJzdHJpbmdcIiB8fCB0YWdWYWx1ZSBpbiBvbmVPZk1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBcIiR7dGFnTmFtZX1cIiB2YWx1ZXMgbXVzdCBiZSB1bmlxdWUgc3RyaW5nc2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvbmVPZk1hcHBpbmdbdGFnVmFsdWVdID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWlzc2luZ1JlZkVycm9yID0gZXhwb3J0cy5WYWxpZGF0aW9uRXJyb3IgPSBleHBvcnRzLkNvZGVHZW4gPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSBleHBvcnRzLktleXdvcmRDeHQgPSBleHBvcnRzLkFqdiA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCIuL2NvcmVcIik7XG5jb25zdCBkcmFmdDdfMSA9IHJlcXVpcmUoXCIuL3ZvY2FidWxhcmllcy9kcmFmdDdcIik7XG5jb25zdCBkaXNjcmltaW5hdG9yXzEgPSByZXF1aXJlKFwiLi92b2NhYnVsYXJpZXMvZGlzY3JpbWluYXRvclwiKTtcbmNvbnN0IGRyYWZ0N01ldGFTY2hlbWEgPSByZXF1aXJlKFwiLi9yZWZzL2pzb24tc2NoZW1hLWRyYWZ0LTA3Lmpzb25cIik7XG5jb25zdCBNRVRBX1NVUFBPUlRfREFUQSA9IFtcIi9wcm9wZXJ0aWVzXCJdO1xuY29uc3QgTUVUQV9TQ0hFTUFfSUQgPSBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hXCI7XG5jbGFzcyBBanYgZXh0ZW5kcyBjb3JlXzEuZGVmYXVsdCB7XG4gICAgX2FkZFZvY2FidWxhcmllcygpIHtcbiAgICAgICAgc3VwZXIuX2FkZFZvY2FidWxhcmllcygpO1xuICAgICAgICBkcmFmdDdfMS5kZWZhdWx0LmZvckVhY2goKHYpID0+IHRoaXMuYWRkVm9jYWJ1bGFyeSh2KSk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZGlzY3JpbWluYXRvcilcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5d29yZChkaXNjcmltaW5hdG9yXzEuZGVmYXVsdCk7XG4gICAgfVxuICAgIF9hZGREZWZhdWx0TWV0YVNjaGVtYSgpIHtcbiAgICAgICAgc3VwZXIuX2FkZERlZmF1bHRNZXRhU2NoZW1hKCk7XG4gICAgICAgIGlmICghdGhpcy5vcHRzLm1ldGEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG1ldGFTY2hlbWEgPSB0aGlzLm9wdHMuJGRhdGFcbiAgICAgICAgICAgID8gdGhpcy4kZGF0YU1ldGFTY2hlbWEoZHJhZnQ3TWV0YVNjaGVtYSwgTUVUQV9TVVBQT1JUX0RBVEEpXG4gICAgICAgICAgICA6IGRyYWZ0N01ldGFTY2hlbWE7XG4gICAgICAgIHRoaXMuYWRkTWV0YVNjaGVtYShtZXRhU2NoZW1hLCBNRVRBX1NDSEVNQV9JRCwgZmFsc2UpO1xuICAgICAgICB0aGlzLnJlZnNbXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL3NjaGVtYVwiXSA9IE1FVEFfU0NIRU1BX0lEO1xuICAgIH1cbiAgICBkZWZhdWx0TWV0YSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZGVmYXVsdE1ldGEgPVxuICAgICAgICAgICAgc3VwZXIuZGVmYXVsdE1ldGEoKSB8fCAodGhpcy5nZXRTY2hlbWEoTUVUQV9TQ0hFTUFfSUQpID8gTUVUQV9TQ0hFTUFfSUQgOiB1bmRlZmluZWQpKTtcbiAgICB9XG59XG5leHBvcnRzLkFqdiA9IEFqdjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IEFqdjtcbm1vZHVsZS5leHBvcnRzLkFqdiA9IEFqdjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IEFqdjtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG52YXIgdmFsaWRhdGlvbl9lcnJvcl8xID0gcmVxdWlyZShcIi4vcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsaWRhdGlvbkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWxpZGF0aW9uX2Vycm9yXzEuZGVmYXVsdDsgfSB9KTtcbnZhciByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTWlzc2luZ1JlZkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZfZXJyb3JfMS5kZWZhdWx0OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWp2LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZvcm1hdE5hbWVzID0gZXhwb3J0cy5mYXN0Rm9ybWF0cyA9IGV4cG9ydHMuZnVsbEZvcm1hdHMgPSB2b2lkIDA7XG5mdW5jdGlvbiBmbXREZWYodmFsaWRhdGUsIGNvbXBhcmUpIHtcbiAgICByZXR1cm4geyB2YWxpZGF0ZSwgY29tcGFyZSB9O1xufVxuZXhwb3J0cy5mdWxsRm9ybWF0cyA9IHtcbiAgICAvLyBkYXRlOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I3NlY3Rpb24tNS42XG4gICAgZGF0ZTogZm10RGVmKGRhdGUsIGNvbXBhcmVEYXRlKSxcbiAgICAvLyBkYXRlLXRpbWU6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgICB0aW1lOiBmbXREZWYodGltZSwgY29tcGFyZVRpbWUpLFxuICAgIFwiZGF0ZS10aW1lXCI6IGZtdERlZihkYXRlX3RpbWUsIGNvbXBhcmVEYXRlVGltZSksXG4gICAgLy8gZHVyYXRpb246IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I2FwcGVuZGl4LUFcbiAgICBkdXJhdGlvbjogL15QKD8hJCkoKFxcZCtZKT8oXFxkK00pPyhcXGQrRCk/KFQoPz1cXGQpKFxcZCtIKT8oXFxkK00pPyhcXGQrUyk/KT98KFxcZCtXKT8pJC8sXG4gICAgdXJpLFxuICAgIFwidXJpLXJlZmVyZW5jZVwiOiAvXig/OlthLXpdW2EtejAtOStcXC0uXSo6KT8oPzpcXC8/XFwvKD86KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol18JVswLTlhLWZdezJ9KSpAKT8oPzpcXFsoPzooPzooPzooPzpbMC05YS1mXXsxLDR9Oil7Nn18OjooPzpbMC05YS1mXXsxLDR9Oil7NX18KD86WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7NH18KD86KD86WzAtOWEtZl17MSw0fTopezAsMX1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXszfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwyfVswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezJ9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDN9WzAtOWEtZl17MSw0fSk/OjpbMC05YS1mXXsxLDR9OnwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw0fVswLTlhLWZdezEsNH0pPzo6KSg/OlswLTlhLWZdezEsNH06WzAtOWEtZl17MSw0fXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykpfCg/Oig/OlswLTlhLWZdezEsNH06KXswLDV9WzAtOWEtZl17MSw0fSk/OjpbMC05YS1mXXsxLDR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDZ9WzAtOWEtZl17MSw0fSk/OjopfFtWdl1bMC05YS1mXStcXC5bYS16MC05XFwtLl9+ISQmJygpKissOz06XSspXFxdfCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KXwoPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PV18JVswLTlhLWZdezJ9KSopKD86OlxcZCopPyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSp8XFwvKD86KD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSsoPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqKT98KD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSsoPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqKT8oPzpcXD8oPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8oPzojKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/JC9pLFxuICAgIC8vIHVyaS10ZW1wbGF0ZTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY1NzBcbiAgICBcInVyaS10ZW1wbGF0ZVwiOiAvXig/Oig/OlteXFx4MDAtXFx4MjBcIic8PiVcXFxcXmB7fH1dfCVbMC05YS1mXXsyfSl8XFx7WysjLi87PyY9LCFAfF0/KD86W2EtejAtOV9dfCVbMC05YS1mXXsyfSkrKD86OlsxLTldWzAtOV17MCwzfXxcXCopPyg/OiwoPzpbYS16MC05X118JVswLTlhLWZdezJ9KSsoPzo6WzEtOV1bMC05XXswLDN9fFxcKik/KSpcXH0pKiQvaSxcbiAgICAvLyBGb3IgdGhlIHNvdXJjZTogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZHBlcmluaS83MjkyOTRcbiAgICAvLyBGb3IgdGVzdCBjYXNlczogaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL2RlbW8vdXJsLXJlZ2V4XG4gICAgdXJsOiAvXig/Omh0dHBzP3xmdHApOlxcL1xcLyg/OlxcUysoPzo6XFxTKik/QCk/KD86KD8hKD86MTB8MTI3KSg/OlxcLlxcZHsxLDN9KXszfSkoPyEoPzoxNjlcXC4yNTR8MTkyXFwuMTY4KSg/OlxcLlxcZHsxLDN9KXsyfSkoPyExNzJcXC4oPzoxWzYtOV18MlxcZHwzWzAtMV0pKD86XFwuXFxkezEsM30pezJ9KSg/OlsxLTldXFxkP3wxXFxkXFxkfDJbMDFdXFxkfDIyWzAtM10pKD86XFwuKD86MT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkpezJ9KD86XFwuKD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNF0pKXwoPzooPzpbYS16MC05XFx1ezAwYTF9LVxcdXtmZmZmfV0rLSkqW2EtejAtOVxcdXswMGExfS1cXHV7ZmZmZn1dKykoPzpcXC4oPzpbYS16MC05XFx1ezAwYTF9LVxcdXtmZmZmfV0rLSkqW2EtejAtOVxcdXswMGExfS1cXHV7ZmZmZn1dKykqKD86XFwuKD86W2EtelxcdXswMGExfS1cXHV7ZmZmZn1dezIsfSkpKSg/OjpcXGR7Miw1fSk/KD86XFwvW15cXHNdKik/JC9pdSxcbiAgICBlbWFpbDogL15bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKD86XFwuW2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKykqQCg/OlthLXowLTldKD86W2EtejAtOS1dKlthLXowLTldKT9cXC4pK1thLXowLTldKD86W2EtejAtOS1dKlthLXowLTldKT8kL2ksXG4gICAgaG9zdG5hbWU6IC9eKD89LnsxLDI1M31cXC4/JClbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8oPzpcXC5bYS16MC05XSg/OlstMC05YS16XXswLDYxfVswLTlhLXpdKT8pKlxcLj8kL2ksXG4gICAgLy8gb3B0aW1pemVkIGh0dHBzOi8vd3d3LnNhZmFyaWJvb2tzb25saW5lLmNvbS9saWJyYXJ5L3ZpZXcvcmVndWxhci1leHByZXNzaW9ucy1jb29rYm9vay85NzgwNTk2ODAyODM3L2NoMDdzMTYuaHRtbFxuICAgIGlwdjQ6IC9eKD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pJC8sXG4gICAgaXB2NjogL14oKChbMC05YS1mXXsxLDR9Oil7N30oWzAtOWEtZl17MSw0fXw6KSl8KChbMC05YS1mXXsxLDR9Oil7Nn0oOlswLTlhLWZdezEsNH18KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs1fSgoKDpbMC05YS1mXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs0fSgoKDpbMC05YS1mXXsxLDR9KXsxLDN9KXwoKDpbMC05YS1mXXsxLDR9KT86KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7M30oKCg6WzAtOWEtZl17MSw0fSl7MSw0fSl8KCg6WzAtOWEtZl17MSw0fSl7MCwyfTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXsyfSgoKDpbMC05YS1mXXsxLDR9KXsxLDV9KXwoKDpbMC05YS1mXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezF9KCgoOlswLTlhLWZdezEsNH0pezEsNn0pfCgoOlswLTlhLWZdezEsNH0pezAsNH06KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KDooKCg6WzAtOWEtZl17MSw0fSl7MSw3fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw1fTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKSkkL2ksXG4gICAgcmVnZXgsXG4gICAgLy8gdXVpZDogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMlxuICAgIHV1aWQ6IC9eKD86dXJuOnV1aWQ6KT9bMC05YS1mXXs4fS0oPzpbMC05YS1mXXs0fS0pezN9WzAtOWEtZl17MTJ9JC9pLFxuICAgIC8vIEpTT04tcG9pbnRlcjogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDFcbiAgICAvLyB1cmkgZnJhZ21lbnQ6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I2FwcGVuZGl4LUFcbiAgICBcImpzb24tcG9pbnRlclwiOiAvXig/OlxcLyg/Oltefi9dfH4wfH4xKSopKiQvLFxuICAgIFwianNvbi1wb2ludGVyLXVyaS1mcmFnbWVudFwiOiAvXiMoPzpcXC8oPzpbYS16MC05X1xcLS4hJCYnKCkqKyw7Oj1AXXwlWzAtOWEtZl17Mn18fjB8fjEpKikqJC9pLFxuICAgIC8vIHJlbGF0aXZlIEpTT04tcG9pbnRlcjogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtbHVmZi1yZWxhdGl2ZS1qc29uLXBvaW50ZXItMDBcbiAgICBcInJlbGF0aXZlLWpzb24tcG9pbnRlclwiOiAvXig/OjB8WzEtOV1bMC05XSopKD86I3woPzpcXC8oPzpbXn4vXXx+MHx+MSkqKSopJC8sXG4gICAgLy8gdGhlIGZvbGxvd2luZyBmb3JtYXRzIGFyZSB1c2VkIGJ5IHRoZSBvcGVuYXBpIHNwZWNpZmljYXRpb246IGh0dHBzOi8vc3BlYy5vcGVuYXBpcy5vcmcvb2FzL3YzLjAuMCNkYXRhLXR5cGVzXG4gICAgLy8gYnl0ZTogaHR0cHM6Ly9naXRodWIuY29tL21pZ3VlbG1vdGEvaXMtYmFzZTY0XG4gICAgYnl0ZSxcbiAgICAvLyBzaWduZWQgMzIgYml0IGludGVnZXJcbiAgICBpbnQzMjogeyB0eXBlOiBcIm51bWJlclwiLCB2YWxpZGF0ZTogdmFsaWRhdGVJbnQzMiB9LFxuICAgIC8vIHNpZ25lZCA2NCBiaXQgaW50ZWdlclxuICAgIGludDY0OiB7IHR5cGU6IFwibnVtYmVyXCIsIHZhbGlkYXRlOiB2YWxpZGF0ZUludDY0IH0sXG4gICAgLy8gQy10eXBlIGZsb2F0XG4gICAgZmxvYXQ6IHsgdHlwZTogXCJudW1iZXJcIiwgdmFsaWRhdGU6IHZhbGlkYXRlTnVtYmVyIH0sXG4gICAgLy8gQy10eXBlIGRvdWJsZVxuICAgIGRvdWJsZTogeyB0eXBlOiBcIm51bWJlclwiLCB2YWxpZGF0ZTogdmFsaWRhdGVOdW1iZXIgfSxcbiAgICAvLyBoaW50IHRvIHRoZSBVSSB0byBoaWRlIGlucHV0IHN0cmluZ3NcbiAgICBwYXNzd29yZDogdHJ1ZSxcbiAgICAvLyB1bmNoZWNrZWQgc3RyaW5nIHBheWxvYWRcbiAgICBiaW5hcnk6IHRydWUsXG59O1xuZXhwb3J0cy5mYXN0Rm9ybWF0cyA9IHtcbiAgICAuLi5leHBvcnRzLmZ1bGxGb3JtYXRzLFxuICAgIGRhdGU6IGZtdERlZigvXlxcZFxcZFxcZFxcZC1bMC0xXVxcZC1bMC0zXVxcZCQvLCBjb21wYXJlRGF0ZSksXG4gICAgdGltZTogZm10RGVmKC9eKD86WzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGR8MjM6NTk6NjApKD86XFwuXFxkKyk/KD86enxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPyk/JC9pLCBjb21wYXJlVGltZSksXG4gICAgXCJkYXRlLXRpbWVcIjogZm10RGVmKC9eXFxkXFxkXFxkXFxkLVswLTFdXFxkLVswLTNdXFxkW3RcXHNdKD86WzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGR8MjM6NTk6NjApKD86XFwuXFxkKyk/KD86enxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPykkL2ksIGNvbXBhcmVEYXRlVGltZSksXG4gICAgLy8gdXJpOiBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL2lzLW15LWpzb24tdmFsaWQvYmxvYi9tYXN0ZXIvZm9ybWF0cy5qc1xuICAgIHVyaTogL14oPzpbYS16XVthLXowLTkrXFwtLl0qOikoPzpcXC8/XFwvKT9bXlxcc10qJC9pLFxuICAgIFwidXJpLXJlZmVyZW5jZVwiOiAvXig/Oig/OlthLXpdW2EtejAtOStcXC0uXSo6KT9cXC8/XFwvKT8oPzpbXlxcXFxcXHMjXVteXFxzI10qKT8oPzojW15cXFxcXFxzXSopPyQvaSxcbiAgICAvLyBlbWFpbCAoc291cmNlcyBmcm9tIGpzZW4gdmFsaWRhdG9yKTpcbiAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIwMTMyMy91c2luZy1hLXJlZ3VsYXItZXhwcmVzc2lvbi10by12YWxpZGF0ZS1hbi1lbWFpbC1hZGRyZXNzI2Fuc3dlci04ODI5MzYzXG4gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZm9ybXMuaHRtbCN2YWxpZC1lLW1haWwtYWRkcmVzcyAoc2VhcmNoIGZvciAnd2lsZnVsIHZpb2xhdGlvbicpXG4gICAgZW1haWw6IC9eW2EtejAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KD86XFwuW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KSokL2ksXG59O1xuZXhwb3J0cy5mb3JtYXROYW1lcyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuZnVsbEZvcm1hdHMpO1xuZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjYXBwZW5kaXgtQ1xuICAgIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKTtcbn1cbmNvbnN0IERBVEUgPSAvXihcXGRcXGRcXGRcXGQpLShcXGRcXGQpLShcXGRcXGQpJC87XG5jb25zdCBEQVlTID0gWzAsIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdO1xuZnVuY3Rpb24gZGF0ZShzdHIpIHtcbiAgICAvLyBmdWxsLWRhdGUgZnJvbSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I3NlY3Rpb24tNS42XG4gICAgY29uc3QgbWF0Y2hlcyA9IERBVEUuZXhlYyhzdHIpO1xuICAgIGlmICghbWF0Y2hlcylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHllYXIgPSArbWF0Y2hlc1sxXTtcbiAgICBjb25zdCBtb250aCA9ICttYXRjaGVzWzJdO1xuICAgIGNvbnN0IGRheSA9ICttYXRjaGVzWzNdO1xuICAgIHJldHVybiAobW9udGggPj0gMSAmJlxuICAgICAgICBtb250aCA8PSAxMiAmJlxuICAgICAgICBkYXkgPj0gMSAmJlxuICAgICAgICBkYXkgPD0gKG1vbnRoID09PSAyICYmIGlzTGVhcFllYXIoeWVhcikgPyAyOSA6IERBWVNbbW9udGhdKSk7XG59XG5mdW5jdGlvbiBjb21wYXJlRGF0ZShkMSwgZDIpIHtcbiAgICBpZiAoIShkMSAmJiBkMikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKGQxID4gZDIpXG4gICAgICAgIHJldHVybiAxO1xuICAgIGlmIChkMSA8IGQyKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDA7XG59XG5jb25zdCBUSU1FID0gL14oXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKShcXC5cXGQrKT8oenxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPyk/JC9pO1xuZnVuY3Rpb24gdGltZShzdHIsIHdpdGhUaW1lWm9uZSkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBUSU1FLmV4ZWMoc3RyKTtcbiAgICBpZiAoIW1hdGNoZXMpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBob3VyID0gK21hdGNoZXNbMV07XG4gICAgY29uc3QgbWludXRlID0gK21hdGNoZXNbMl07XG4gICAgY29uc3Qgc2Vjb25kID0gK21hdGNoZXNbM107XG4gICAgY29uc3QgdGltZVpvbmUgPSBtYXRjaGVzWzVdO1xuICAgIHJldHVybiAoKChob3VyIDw9IDIzICYmIG1pbnV0ZSA8PSA1OSAmJiBzZWNvbmQgPD0gNTkpIHx8XG4gICAgICAgIChob3VyID09PSAyMyAmJiBtaW51dGUgPT09IDU5ICYmIHNlY29uZCA9PT0gNjApKSAmJlxuICAgICAgICAoIXdpdGhUaW1lWm9uZSB8fCB0aW1lWm9uZSAhPT0gXCJcIikpO1xufVxuZnVuY3Rpb24gY29tcGFyZVRpbWUodDEsIHQyKSB7XG4gICAgaWYgKCEodDEgJiYgdDIpKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGExID0gVElNRS5leGVjKHQxKTtcbiAgICBjb25zdCBhMiA9IFRJTUUuZXhlYyh0Mik7XG4gICAgaWYgKCEoYTEgJiYgYTIpKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHQxID0gYTFbMV0gKyBhMVsyXSArIGExWzNdICsgKGExWzRdIHx8IFwiXCIpO1xuICAgIHQyID0gYTJbMV0gKyBhMlsyXSArIGEyWzNdICsgKGEyWzRdIHx8IFwiXCIpO1xuICAgIGlmICh0MSA+IHQyKVxuICAgICAgICByZXR1cm4gMTtcbiAgICBpZiAodDEgPCB0MilcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIHJldHVybiAwO1xufVxuY29uc3QgREFURV9USU1FX1NFUEFSQVRPUiA9IC90fFxccy9pO1xuZnVuY3Rpb24gZGF0ZV90aW1lKHN0cikge1xuICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgICBjb25zdCBkYXRlVGltZSA9IHN0ci5zcGxpdChEQVRFX1RJTUVfU0VQQVJBVE9SKTtcbiAgICByZXR1cm4gZGF0ZVRpbWUubGVuZ3RoID09PSAyICYmIGRhdGUoZGF0ZVRpbWVbMF0pICYmIHRpbWUoZGF0ZVRpbWVbMV0sIHRydWUpO1xufVxuZnVuY3Rpb24gY29tcGFyZURhdGVUaW1lKGR0MSwgZHQyKSB7XG4gICAgaWYgKCEoZHQxICYmIGR0MikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgW2QxLCB0MV0gPSBkdDEuc3BsaXQoREFURV9USU1FX1NFUEFSQVRPUik7XG4gICAgY29uc3QgW2QyLCB0Ml0gPSBkdDIuc3BsaXQoREFURV9USU1FX1NFUEFSQVRPUik7XG4gICAgY29uc3QgcmVzID0gY29tcGFyZURhdGUoZDEsIGQyKTtcbiAgICBpZiAocmVzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlcyB8fCBjb21wYXJlVGltZSh0MSwgdDIpO1xufVxuY29uc3QgTk9UX1VSSV9GUkFHTUVOVCA9IC9cXC98Oi87XG5jb25zdCBVUkkgPSAvXig/OlthLXpdW2EtejAtOStcXC0uXSo6KSg/OlxcLz9cXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06XXwlWzAtOWEtZl17Mn0pKkApPyg/OlxcWyg/Oig/Oig/Oig/OlswLTlhLWZdezEsNH06KXs2fXw6Oig/OlswLTlhLWZdezEsNH06KXs1fXwoPzpbMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXs0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwxfVswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezN9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDJ9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7Mn18KD86KD86WzAtOWEtZl17MSw0fTopezAsM31bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH06fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDR9WzAtOWEtZl17MSw0fSk/OjopKD86WzAtOWEtZl17MSw0fTpbMC05YS1mXXsxLDR9fCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl8KD86KD86WzAtOWEtZl17MSw0fTopezAsNX1bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH18KD86KD86WzAtOWEtZl17MSw0fTopezAsNn1bMC05YS1mXXsxLDR9KT86Oil8W1Z2XVswLTlhLWZdK1xcLlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdKylcXF18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pfCg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PV18JVswLTlhLWZdezJ9KSopKD86OlxcZCopPyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqfFxcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqKT98KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopKD86XFw/KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyg/OiMoPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/JC9pO1xuZnVuY3Rpb24gdXJpKHN0cikge1xuICAgIC8vIGh0dHA6Ly9qbXJ3YXJlLmNvbS9hcnRpY2xlcy8yMDA5L3VyaV9yZWdleHAvVVJJX3JlZ2V4Lmh0bWwgKyBvcHRpb25hbCBwcm90b2NvbCArIHJlcXVpcmVkIFwiLlwiXG4gICAgcmV0dXJuIE5PVF9VUklfRlJBR01FTlQudGVzdChzdHIpICYmIFVSSS50ZXN0KHN0cik7XG59XG5jb25zdCBCWVRFID0gL14oPzpbQS1aYS16MC05Ky9dezR9KSooPzpbQS1aYS16MC05Ky9dezJ9PT18W0EtWmEtejAtOSsvXXszfT0pPyQvZ207XG5mdW5jdGlvbiBieXRlKHN0cikge1xuICAgIEJZVEUubGFzdEluZGV4ID0gMDtcbiAgICByZXR1cm4gQllURS50ZXN0KHN0cik7XG59XG5jb25zdCBNSU5fSU5UMzIgPSAtKDIgKiogMzEpO1xuY29uc3QgTUFYX0lOVDMyID0gMiAqKiAzMSAtIDE7XG5mdW5jdGlvbiB2YWxpZGF0ZUludDMyKHZhbHVlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmIHZhbHVlIDw9IE1BWF9JTlQzMiAmJiB2YWx1ZSA+PSBNSU5fSU5UMzI7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUludDY0KHZhbHVlKSB7XG4gICAgLy8gSlNPTiBhbmQgamF2YXNjcmlwdCBtYXggSW50IGlzIDIqKjUzLCBzbyBhbnkgaW50IHRoYXQgcGFzc2VzIGlzSW50ZWdlciBpcyB2YWxpZCBmb3IgSW50NjRcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSk7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZU51bWJlcigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmNvbnN0IFpfQU5DSE9SID0gL1teXFxcXF1cXFxcWi87XG5mdW5jdGlvbiByZWdleChzdHIpIHtcbiAgICBpZiAoWl9BTkNIT1IudGVzdChzdHIpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgbmV3IFJlZ0V4cChzdHIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1hdHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVnZXhwQ29kZSA9IGV4cG9ydHMuZ2V0RXNtRXhwb3J0TmFtZSA9IGV4cG9ydHMuZ2V0UHJvcGVydHkgPSBleHBvcnRzLnNhZmVTdHJpbmdpZnkgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyQ29uY2F0ID0gZXhwb3J0cy5hZGRDb2RlQXJnID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuX0NvZGUgPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLklERU5USUZJRVIgPSBleHBvcnRzLl9Db2RlT3JOYW1lID0gdm9pZCAwO1xuY2xhc3MgX0NvZGVPck5hbWUge1xufVxuZXhwb3J0cy5fQ29kZU9yTmFtZSA9IF9Db2RlT3JOYW1lO1xuZXhwb3J0cy5JREVOVElGSUVSID0gL15bYS16JF9dW2EteiRfMC05XSokL2k7XG5jbGFzcyBOYW1lIGV4dGVuZHMgX0NvZGVPck5hbWUge1xuICAgIGNvbnN0cnVjdG9yKHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgaWYgKCFleHBvcnRzLklERU5USUZJRVIudGVzdChzKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVHZW46IG5hbWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcIik7XG4gICAgICAgIHRoaXMuc3RyID0gcztcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cjtcbiAgICB9XG4gICAgZW1wdHlTdHIoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4geyBbdGhpcy5zdHJdOiAxIH07XG4gICAgfVxufVxuZXhwb3J0cy5OYW1lID0gTmFtZTtcbmNsYXNzIF9Db2RlIGV4dGVuZHMgX0NvZGVPck5hbWUge1xuICAgIGNvbnN0cnVjdG9yKGNvZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5faXRlbXMgPSB0eXBlb2YgY29kZSA9PT0gXCJzdHJpbmdcIiA/IFtjb2RlXSA6IGNvZGU7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHI7XG4gICAgfVxuICAgIGVtcHR5U3RyKCkge1xuICAgICAgICBpZiAodGhpcy5faXRlbXMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2l0ZW1zWzBdO1xuICAgICAgICByZXR1cm4gaXRlbSA9PT0gXCJcIiB8fCBpdGVtID09PSAnXCJcIic7XG4gICAgfVxuICAgIGdldCBzdHIoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLl9zdHIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICh0aGlzLl9zdHIgPSB0aGlzLl9pdGVtcy5yZWR1Y2UoKHMsIGMpID0+IGAke3N9JHtjfWAsIFwiXCIpKSk7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuX25hbWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAodGhpcy5fbmFtZXMgPSB0aGlzLl9pdGVtcy5yZWR1Y2UoKG5hbWVzLCBjKSA9PiB7XG4gICAgICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIE5hbWUpXG4gICAgICAgICAgICAgICAgbmFtZXNbYy5zdHJdID0gKG5hbWVzW2Muc3RyXSB8fCAwKSArIDE7XG4gICAgICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgICAgIH0sIHt9KSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuX0NvZGUgPSBfQ29kZTtcbmV4cG9ydHMubmlsID0gbmV3IF9Db2RlKFwiXCIpO1xuZnVuY3Rpb24gXyhzdHJzLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgY29kZSA9IFtzdHJzWzBdXTtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkge1xuICAgICAgICBhZGRDb2RlQXJnKGNvZGUsIGFyZ3NbaV0pO1xuICAgICAgICBjb2RlLnB1c2goc3Ryc1srK2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfQ29kZShjb2RlKTtcbn1cbmV4cG9ydHMuXyA9IF87XG5jb25zdCBwbHVzID0gbmV3IF9Db2RlKFwiK1wiKTtcbmZ1bmN0aW9uIHN0cihzdHJzLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgZXhwciA9IFtzYWZlU3RyaW5naWZ5KHN0cnNbMF0pXTtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkge1xuICAgICAgICBleHByLnB1c2gocGx1cyk7XG4gICAgICAgIGFkZENvZGVBcmcoZXhwciwgYXJnc1tpXSk7XG4gICAgICAgIGV4cHIucHVzaChwbHVzLCBzYWZlU3RyaW5naWZ5KHN0cnNbKytpXSkpO1xuICAgIH1cbiAgICBvcHRpbWl6ZShleHByKTtcbiAgICByZXR1cm4gbmV3IF9Db2RlKGV4cHIpO1xufVxuZXhwb3J0cy5zdHIgPSBzdHI7XG5mdW5jdGlvbiBhZGRDb2RlQXJnKGNvZGUsIGFyZykge1xuICAgIGlmIChhcmcgaW5zdGFuY2VvZiBfQ29kZSlcbiAgICAgICAgY29kZS5wdXNoKC4uLmFyZy5faXRlbXMpO1xuICAgIGVsc2UgaWYgKGFyZyBpbnN0YW5jZW9mIE5hbWUpXG4gICAgICAgIGNvZGUucHVzaChhcmcpO1xuICAgIGVsc2VcbiAgICAgICAgY29kZS5wdXNoKGludGVycG9sYXRlKGFyZykpO1xufVxuZXhwb3J0cy5hZGRDb2RlQXJnID0gYWRkQ29kZUFyZztcbmZ1bmN0aW9uIG9wdGltaXplKGV4cHIpIHtcbiAgICBsZXQgaSA9IDE7XG4gICAgd2hpbGUgKGkgPCBleHByLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgaWYgKGV4cHJbaV0gPT09IHBsdXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG1lcmdlRXhwckl0ZW1zKGV4cHJbaSAtIDFdLCBleHByW2kgKyAxXSk7XG4gICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBleHByLnNwbGljZShpIC0gMSwgMywgcmVzKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cHJbaSsrXSA9IFwiK1wiO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZUV4cHJJdGVtcyhhLCBiKSB7XG4gICAgaWYgKGIgPT09ICdcIlwiJylcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgaWYgKGEgPT09ICdcIlwiJylcbiAgICAgICAgcmV0dXJuIGI7XG4gICAgaWYgKHR5cGVvZiBhID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKGIgaW5zdGFuY2VvZiBOYW1lIHx8IGFbYS5sZW5ndGggLSAxXSAhPT0gJ1wiJylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gYCR7YS5zbGljZSgwLCAtMSl9JHtifVwiYDtcbiAgICAgICAgaWYgKGJbMF0gPT09ICdcIicpXG4gICAgICAgICAgICByZXR1cm4gYS5zbGljZSgwLCAtMSkgKyBiLnNsaWNlKDEpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYiA9PSBcInN0cmluZ1wiICYmIGJbMF0gPT09ICdcIicgJiYgIShhIGluc3RhbmNlb2YgTmFtZSkpXG4gICAgICAgIHJldHVybiBgXCIke2F9JHtiLnNsaWNlKDEpfWA7XG4gICAgcmV0dXJuO1xufVxuZnVuY3Rpb24gc3RyQ29uY2F0KGMxLCBjMikge1xuICAgIHJldHVybiBjMi5lbXB0eVN0cigpID8gYzEgOiBjMS5lbXB0eVN0cigpID8gYzIgOiBzdHIgYCR7YzF9JHtjMn1gO1xufVxuZXhwb3J0cy5zdHJDb25jYXQgPSBzdHJDb25jYXQ7XG4vLyBUT0RPIGRvIG5vdCBhbGxvdyBhcnJheXMgaGVyZVxuZnVuY3Rpb24gaW50ZXJwb2xhdGUoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PSBcIm51bWJlclwiIHx8IHR5cGVvZiB4ID09IFwiYm9vbGVhblwiIHx8IHggPT09IG51bGxcbiAgICAgICAgPyB4XG4gICAgICAgIDogc2FmZVN0cmluZ2lmeShBcnJheS5pc0FycmF5KHgpID8geC5qb2luKFwiLFwiKSA6IHgpO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5KHgpIHtcbiAgICByZXR1cm4gbmV3IF9Db2RlKHNhZmVTdHJpbmdpZnkoeCkpO1xufVxuZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7XG5mdW5jdGlvbiBzYWZlU3RyaW5naWZ5KHgpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeClcbiAgICAgICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgXCJcXFxcdTIwMjhcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcdTIwMjkvZywgXCJcXFxcdTIwMjlcIik7XG59XG5leHBvcnRzLnNhZmVTdHJpbmdpZnkgPSBzYWZlU3RyaW5naWZ5O1xuZnVuY3Rpb24gZ2V0UHJvcGVydHkoa2V5KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBrZXkgPT0gXCJzdHJpbmdcIiAmJiBleHBvcnRzLklERU5USUZJRVIudGVzdChrZXkpID8gbmV3IF9Db2RlKGAuJHtrZXl9YCkgOiBfIGBbJHtrZXl9XWA7XG59XG5leHBvcnRzLmdldFByb3BlcnR5ID0gZ2V0UHJvcGVydHk7XG4vL0RvZXMgYmVzdCBlZmZvcnQgdG8gZm9ybWF0IHRoZSBuYW1lIHByb3Blcmx5XG5mdW5jdGlvbiBnZXRFc21FeHBvcnROYW1lKGtleSkge1xuICAgIGlmICh0eXBlb2Yga2V5ID09IFwic3RyaW5nXCIgJiYgZXhwb3J0cy5JREVOVElGSUVSLnRlc3Qoa2V5KSkge1xuICAgICAgICByZXR1cm4gbmV3IF9Db2RlKGAke2tleX1gKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBpbnZhbGlkIGV4cG9ydCBuYW1lOiAke2tleX0sIHVzZSBleHBsaWNpdCAkaWQgbmFtZSBtYXBwaW5nYCk7XG59XG5leHBvcnRzLmdldEVzbUV4cG9ydE5hbWUgPSBnZXRFc21FeHBvcnROYW1lO1xuZnVuY3Rpb24gcmVnZXhwQ29kZShyeCkge1xuICAgIHJldHVybiBuZXcgX0NvZGUocngudG9TdHJpbmcoKSk7XG59XG5leHBvcnRzLnJlZ2V4cENvZGUgPSByZWdleHBDb2RlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29kZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5WYWx1ZVNjb3BlID0gZXhwb3J0cy5WYWx1ZVNjb3BlTmFtZSA9IGV4cG9ydHMuU2NvcGUgPSBleHBvcnRzLnZhcktpbmRzID0gZXhwb3J0cy5Vc2VkVmFsdWVTdGF0ZSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuL2NvZGVcIik7XG5jbGFzcyBWYWx1ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICAgICAgc3VwZXIoYENvZGVHZW46IFwiY29kZVwiIGZvciAke25hbWV9IG5vdCBkZWZpbmVkYCk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuYW1lLnZhbHVlO1xuICAgIH1cbn1cbnZhciBVc2VkVmFsdWVTdGF0ZTtcbihmdW5jdGlvbiAoVXNlZFZhbHVlU3RhdGUpIHtcbiAgICBVc2VkVmFsdWVTdGF0ZVtVc2VkVmFsdWVTdGF0ZVtcIlN0YXJ0ZWRcIl0gPSAwXSA9IFwiU3RhcnRlZFwiO1xuICAgIFVzZWRWYWx1ZVN0YXRlW1VzZWRWYWx1ZVN0YXRlW1wiQ29tcGxldGVkXCJdID0gMV0gPSBcIkNvbXBsZXRlZFwiO1xufSkoVXNlZFZhbHVlU3RhdGUgPSBleHBvcnRzLlVzZWRWYWx1ZVN0YXRlIHx8IChleHBvcnRzLlVzZWRWYWx1ZVN0YXRlID0ge30pKTtcbmV4cG9ydHMudmFyS2luZHMgPSB7XG4gICAgY29uc3Q6IG5ldyBjb2RlXzEuTmFtZShcImNvbnN0XCIpLFxuICAgIGxldDogbmV3IGNvZGVfMS5OYW1lKFwibGV0XCIpLFxuICAgIHZhcjogbmV3IGNvZGVfMS5OYW1lKFwidmFyXCIpLFxufTtcbmNsYXNzIFNjb3BlIHtcbiAgICBjb25zdHJ1Y3Rvcih7IHByZWZpeGVzLCBwYXJlbnQgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuX25hbWVzID0ge307XG4gICAgICAgIHRoaXMuX3ByZWZpeGVzID0gcHJlZml4ZXM7XG4gICAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgdG9OYW1lKG5hbWVPclByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmFtZU9yUHJlZml4IGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyBuYW1lT3JQcmVmaXggOiB0aGlzLm5hbWUobmFtZU9yUHJlZml4KTtcbiAgICB9XG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBjb2RlXzEuTmFtZSh0aGlzLl9uZXdOYW1lKHByZWZpeCkpO1xuICAgIH1cbiAgICBfbmV3TmFtZShwcmVmaXgpIHtcbiAgICAgICAgY29uc3QgbmcgPSB0aGlzLl9uYW1lc1twcmVmaXhdIHx8IHRoaXMuX25hbWVHcm91cChwcmVmaXgpO1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7bmcuaW5kZXgrK31gO1xuICAgIH1cbiAgICBfbmFtZUdyb3VwKHByZWZpeCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoKChfYiA9IChfYSA9IHRoaXMuX3BhcmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLl9wcmVmaXhlcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhhcyhwcmVmaXgpKSB8fCAodGhpcy5fcHJlZml4ZXMgJiYgIXRoaXMuX3ByZWZpeGVzLmhhcyhwcmVmaXgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBwcmVmaXggXCIke3ByZWZpeH1cIiBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHNjb3BlYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0aGlzLl9uYW1lc1twcmVmaXhdID0geyBwcmVmaXgsIGluZGV4OiAwIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuU2NvcGUgPSBTY29wZTtcbmNsYXNzIFZhbHVlU2NvcGVOYW1lIGV4dGVuZHMgY29kZV8xLk5hbWUge1xuICAgIGNvbnN0cnVjdG9yKHByZWZpeCwgbmFtZVN0cikge1xuICAgICAgICBzdXBlcihuYW1lU3RyKTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG4gICAgfVxuICAgIHNldFZhbHVlKHZhbHVlLCB7IHByb3BlcnR5LCBpdGVtSW5kZXggfSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2NvcGVQYXRoID0gKDAsIGNvZGVfMS5fKSBgLiR7bmV3IGNvZGVfMS5OYW1lKHByb3BlcnR5KX1bJHtpdGVtSW5kZXh9XWA7XG4gICAgfVxufVxuZXhwb3J0cy5WYWx1ZVNjb3BlTmFtZSA9IFZhbHVlU2NvcGVOYW1lO1xuY29uc3QgbGluZSA9ICgwLCBjb2RlXzEuXykgYFxcbmA7XG5jbGFzcyBWYWx1ZVNjb3BlIGV4dGVuZHMgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLl9zY29wZSA9IG9wdHMuc2NvcGU7XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgX246IG9wdHMubGluZXMgPyBsaW5lIDogY29kZV8xLm5pbCB9O1xuICAgIH1cbiAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcbiAgICB9XG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWYWx1ZVNjb3BlTmFtZShwcmVmaXgsIHRoaXMuX25ld05hbWUocHJlZml4KSk7XG4gICAgfVxuICAgIHZhbHVlKG5hbWVPclByZWZpeCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodmFsdWUucmVmID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiByZWYgbXVzdCBiZSBwYXNzZWQgaW4gdmFsdWVcIik7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICBjb25zdCB7IHByZWZpeCB9ID0gbmFtZTtcbiAgICAgICAgY29uc3QgdmFsdWVLZXkgPSAoX2EgPSB2YWx1ZS5rZXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbHVlLnJlZjtcbiAgICAgICAgbGV0IHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF07XG4gICAgICAgIGlmICh2cykge1xuICAgICAgICAgICAgY29uc3QgX25hbWUgPSB2cy5nZXQodmFsdWVLZXkpO1xuICAgICAgICAgICAgaWYgKF9uYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBfbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF0gPSBuZXcgTWFwKCk7XG4gICAgICAgIH1cbiAgICAgICAgdnMuc2V0KHZhbHVlS2V5LCBuYW1lKTtcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuX3Njb3BlW3ByZWZpeF0gfHwgKHRoaXMuX3Njb3BlW3ByZWZpeF0gPSBbXSk7XG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHMubGVuZ3RoO1xuICAgICAgICBzW2l0ZW1JbmRleF0gPSB2YWx1ZS5yZWY7XG4gICAgICAgIG5hbWUuc2V0VmFsdWUodmFsdWUsIHsgcHJvcGVydHk6IHByZWZpeCwgaXRlbUluZGV4IH0pO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZ2V0VmFsdWUocHJlZml4LCBrZXlPclJlZikge1xuICAgICAgICBjb25zdCB2cyA9IHRoaXMuX3ZhbHVlc1twcmVmaXhdO1xuICAgICAgICBpZiAoIXZzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gdnMuZ2V0KGtleU9yUmVmKTtcbiAgICB9XG4gICAgc2NvcGVSZWZzKHNjb3BlTmFtZSwgdmFsdWVzID0gdGhpcy5fdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWR1Y2VWYWx1ZXModmFsdWVzLCAobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5hbWUuc2NvcGVQYXRoID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBuYW1lIFwiJHtuYW1lfVwiIGhhcyBubyB2YWx1ZWApO1xuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlXzEuXykgYCR7c2NvcGVOYW1lfSR7bmFtZS5zY29wZVBhdGh9YDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNjb3BlQ29kZSh2YWx1ZXMgPSB0aGlzLl92YWx1ZXMsIHVzZWRWYWx1ZXMsIGdldENvZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZHVjZVZhbHVlcyh2YWx1ZXMsIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZS52YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogbmFtZSBcIiR7bmFtZX1cIiBoYXMgbm8gdmFsdWVgKTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lLnZhbHVlLmNvZGU7XG4gICAgICAgIH0sIHVzZWRWYWx1ZXMsIGdldENvZGUpO1xuICAgIH1cbiAgICBfcmVkdWNlVmFsdWVzKHZhbHVlcywgdmFsdWVDb2RlLCB1c2VkVmFsdWVzID0ge30sIGdldENvZGUpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBjb2RlXzEubmlsO1xuICAgICAgICBmb3IgKGNvbnN0IHByZWZpeCBpbiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZzID0gdmFsdWVzW3ByZWZpeF07XG4gICAgICAgICAgICBpZiAoIXZzKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgbmFtZVNldCA9ICh1c2VkVmFsdWVzW3ByZWZpeF0gPSB1c2VkVmFsdWVzW3ByZWZpeF0gfHwgbmV3IE1hcCgpKTtcbiAgICAgICAgICAgIHZzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZVNldC5oYXMobmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBuYW1lU2V0LnNldChuYW1lLCBVc2VkVmFsdWVTdGF0ZS5TdGFydGVkKTtcbiAgICAgICAgICAgICAgICBsZXQgYyA9IHZhbHVlQ29kZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoYykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWYgPSB0aGlzLm9wdHMuZXM1ID8gZXhwb3J0cy52YXJLaW5kcy52YXIgOiBleHBvcnRzLnZhcktpbmRzLmNvbnN0O1xuICAgICAgICAgICAgICAgICAgICBjb2RlID0gKDAsIGNvZGVfMS5fKSBgJHtjb2RlfSR7ZGVmfSAke25hbWV9ID0gJHtjfTske3RoaXMub3B0cy5fbn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgoYyA9IGdldENvZGUgPT09IG51bGwgfHwgZ2V0Q29kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2V0Q29kZShuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgwLCBjb2RlXzEuXykgYCR7Y29kZX0ke2N9JHt0aGlzLm9wdHMuX259YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZUVycm9yKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuYW1lU2V0LnNldChuYW1lLCBVc2VkVmFsdWVTdGF0ZS5Db21wbGV0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxufVxuZXhwb3J0cy5WYWx1ZVNjb3BlID0gVmFsdWVTY29wZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjb3BlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm9yID0gZXhwb3J0cy5hbmQgPSBleHBvcnRzLm5vdCA9IGV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMub3BlcmF0b3JzID0gZXhwb3J0cy52YXJLaW5kcyA9IGV4cG9ydHMuVmFsdWVTY29wZU5hbWUgPSBleHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlNjb3BlID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5yZWdleHBDb2RlID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLmdldFByb3BlcnR5ID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLnN0ckNvbmNhdCA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNvbnN0IHNjb3BlXzEgPSByZXF1aXJlKFwiLi9zY29wZVwiKTtcbnZhciBjb2RlXzIgPSByZXF1aXJlKFwiLi9jb2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLl87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJDb25jYXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHJDb25jYXQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJuaWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5uaWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRQcm9wZXJ0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLmdldFByb3BlcnR5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuc3RyaW5naWZ5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVnZXhwQ29kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnJlZ2V4cENvZGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuTmFtZTsgfSB9KTtcbnZhciBzY29wZV8yID0gcmVxdWlyZShcIi4vc2NvcGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTY29wZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi5TY29wZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlU2NvcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIuVmFsdWVTY29wZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlU2NvcGVOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLlZhbHVlU2NvcGVOYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFyS2luZHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIudmFyS2luZHM7IH0gfSk7XG5leHBvcnRzLm9wZXJhdG9ycyA9IHtcbiAgICBHVDogbmV3IGNvZGVfMS5fQ29kZShcIj5cIiksXG4gICAgR1RFOiBuZXcgY29kZV8xLl9Db2RlKFwiPj1cIiksXG4gICAgTFQ6IG5ldyBjb2RlXzEuX0NvZGUoXCI8XCIpLFxuICAgIExURTogbmV3IGNvZGVfMS5fQ29kZShcIjw9XCIpLFxuICAgIEVROiBuZXcgY29kZV8xLl9Db2RlKFwiPT09XCIpLFxuICAgIE5FUTogbmV3IGNvZGVfMS5fQ29kZShcIiE9PVwiKSxcbiAgICBOT1Q6IG5ldyBjb2RlXzEuX0NvZGUoXCIhXCIpLFxuICAgIE9SOiBuZXcgY29kZV8xLl9Db2RlKFwifHxcIiksXG4gICAgQU5EOiBuZXcgY29kZV8xLl9Db2RlKFwiJiZcIiksXG4gICAgQUREOiBuZXcgY29kZV8xLl9Db2RlKFwiK1wiKSxcbn07XG5jbGFzcyBOb2RlIHtcbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhfbmFtZXMsIF9jb25zdGFudHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuY2xhc3MgRGVmIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IodmFyS2luZCwgbmFtZSwgcmhzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMucmhzID0gcmhzO1xuICAgIH1cbiAgICByZW5kZXIoeyBlczUsIF9uIH0pIHtcbiAgICAgICAgY29uc3QgdmFyS2luZCA9IGVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogdGhpcy52YXJLaW5kO1xuICAgICAgICBjb25zdCByaHMgPSB0aGlzLnJocyA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGAgPSAke3RoaXMucmhzfWA7XG4gICAgICAgIHJldHVybiBgJHt2YXJLaW5kfSAke3RoaXMubmFtZX0ke3Joc307YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKCFuYW1lc1t0aGlzLm5hbWUuc3RyXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMucmhzKVxuICAgICAgICAgICAgdGhpcy5yaHMgPSBvcHRpbWl6ZUV4cHIodGhpcy5yaHMsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yaHMgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGVPck5hbWUgPyB0aGlzLnJocy5uYW1lcyA6IHt9O1xuICAgIH1cbn1cbmNsYXNzIEFzc2lnbiBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGxocywgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxocyA9IGxocztcbiAgICAgICAgdGhpcy5yaHMgPSByaHM7XG4gICAgICAgIHRoaXMuc2lkZUVmZmVjdHMgPSBzaWRlRWZmZWN0cztcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5saHN9ID0gJHt0aGlzLnJoc307YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKHRoaXMubGhzIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgJiYgIW5hbWVzW3RoaXMubGhzLnN0cl0gJiYgIXRoaXMuc2lkZUVmZmVjdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMucmhzID0gb3B0aW1pemVFeHByKHRoaXMucmhzLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLmxocyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8ge30gOiB7IC4uLnRoaXMubGhzLm5hbWVzIH07XG4gICAgICAgIHJldHVybiBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMucmhzKTtcbiAgICB9XG59XG5jbGFzcyBBc3NpZ25PcCBleHRlbmRzIEFzc2lnbiB7XG4gICAgY29uc3RydWN0b3IobGhzLCBvcCwgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICBzdXBlcihsaHMsIHJocywgc2lkZUVmZmVjdHMpO1xuICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGhzfSAke3RoaXMub3B9PSAke3RoaXMucmhzfTtgICsgX247XG4gICAgfVxufVxuY2xhc3MgTGFiZWwgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihsYWJlbCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgICAgIHRoaXMubmFtZXMgPSB7fTtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5sYWJlbH06YCArIF9uO1xuICAgIH1cbn1cbmNsYXNzIEJyZWFrIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IobGFiZWwpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgICAgICB0aGlzLm5hbWVzID0ge307XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsID8gYCAke3RoaXMubGFiZWx9YCA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgYnJlYWske2xhYmVsfTtgICsgX247XG4gICAgfVxufVxuY2xhc3MgVGhyb3cgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGB0aHJvdyAke3RoaXMuZXJyb3J9O2AgKyBfbjtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvci5uYW1lcztcbiAgICB9XG59XG5jbGFzcyBBbnlDb2RlIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IoY29kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvZGV9O2AgKyBfbjtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29kZX1gID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIHRoaXMuY29kZSA9IG9wdGltaXplRXhwcih0aGlzLmNvZGUsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2RlIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlT3JOYW1lID8gdGhpcy5jb2RlLm5hbWVzIDoge307XG4gICAgfVxufVxuY2xhc3MgUGFyZW50Tm9kZSBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKG5vZGVzID0gW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5ub2RlcyA9IG5vZGVzO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5yZWR1Y2UoKGNvZGUsIG4pID0+IGNvZGUgKyBuLnJlbmRlcihvcHRzKSwgXCJcIik7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHRoaXM7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gbm9kZXNbaV0ub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobikpXG4gICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEsIC4uLm4pO1xuICAgICAgICAgICAgZWxzZSBpZiAobilcbiAgICAgICAgICAgICAgICBub2Rlc1tpXSA9IG47XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2Rlcy5sZW5ndGggPiAwID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHRoaXM7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAvLyBpdGVyYXRpbmcgYmFja3dhcmRzIGltcHJvdmVzIDEtcGFzcyBvcHRpbWl6YXRpb25cbiAgICAgICAgICAgIGNvbnN0IG4gPSBub2Rlc1tpXTtcbiAgICAgICAgICAgIGlmIChuLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBzdWJ0cmFjdE5hbWVzKG5hbWVzLCBuLm5hbWVzKTtcbiAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXMucmVkdWNlKChuYW1lcywgbikgPT4gYWRkTmFtZXMobmFtZXMsIG4ubmFtZXMpLCB7fSk7XG4gICAgfVxufVxuY2xhc3MgQmxvY2tOb2RlIGV4dGVuZHMgUGFyZW50Tm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwie1wiICsgb3B0cy5fbiArIHN1cGVyLnJlbmRlcihvcHRzKSArIFwifVwiICsgb3B0cy5fbjtcbiAgICB9XG59XG5jbGFzcyBSb290IGV4dGVuZHMgUGFyZW50Tm9kZSB7XG59XG5jbGFzcyBFbHNlIGV4dGVuZHMgQmxvY2tOb2RlIHtcbn1cbkVsc2Uua2luZCA9IFwiZWxzZVwiO1xuY2xhc3MgSWYgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIGNvbnN0cnVjdG9yKGNvbmRpdGlvbiwgbm9kZXMpIHtcbiAgICAgICAgc3VwZXIobm9kZXMpO1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBgaWYoJHt0aGlzLmNvbmRpdGlvbn0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICAgICAgaWYgKHRoaXMuZWxzZSlcbiAgICAgICAgICAgIGNvZGUgKz0gXCJlbHNlIFwiICsgdGhpcy5lbHNlLnJlbmRlcihvcHRzKTtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHN1cGVyLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgY29uc3QgY29uZCA9IHRoaXMuY29uZGl0aW9uO1xuICAgICAgICBpZiAoY29uZCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVzOyAvLyBlbHNlIGlzIGlnbm9yZWQgaGVyZVxuICAgICAgICBsZXQgZSA9IHRoaXMuZWxzZTtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5zID0gZS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICBlID0gdGhpcy5lbHNlID0gQXJyYXkuaXNBcnJheShucykgPyBuZXcgRWxzZShucykgOiBucztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgaWYgKGNvbmQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgSWYgPyBlIDogZS5ub2RlcztcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWYobm90KGNvbmQpLCBlIGluc3RhbmNlb2YgSWYgPyBbZV0gOiBlLm5vZGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZCA9PT0gZmFsc2UgfHwgIXRoaXMubm9kZXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZWxzZSA9IChfYSA9IHRoaXMuZWxzZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIGlmICghKHN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykgfHwgdGhpcy5lbHNlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jb25kaXRpb24gPSBvcHRpbWl6ZUV4cHIodGhpcy5jb25kaXRpb24sIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHN1cGVyLm5hbWVzO1xuICAgICAgICBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKHRoaXMuZWxzZSlcbiAgICAgICAgICAgIGFkZE5hbWVzKG5hbWVzLCB0aGlzLmVsc2UubmFtZXMpO1xuICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgfVxufVxuSWYua2luZCA9IFwiaWZcIjtcbmNsYXNzIEZvciBleHRlbmRzIEJsb2NrTm9kZSB7XG59XG5Gb3Iua2luZCA9IFwiZm9yXCI7XG5jbGFzcyBGb3JMb29wIGV4dGVuZHMgRm9yIHtcbiAgICBjb25zdHJ1Y3RvcihpdGVyYXRpb24pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pdGVyYXRpb24gPSBpdGVyYXRpb247XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dGhpcy5pdGVyYXRpb259KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIXN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXRlcmF0aW9uID0gb3B0aW1pemVFeHByKHRoaXMuaXRlcmF0aW9uLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIGFkZE5hbWVzKHN1cGVyLm5hbWVzLCB0aGlzLml0ZXJhdGlvbi5uYW1lcyk7XG4gICAgfVxufVxuY2xhc3MgRm9yUmFuZ2UgZXh0ZW5kcyBGb3Ige1xuICAgIGNvbnN0cnVjdG9yKHZhcktpbmQsIG5hbWUsIGZyb20sIHRvKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZnJvbSA9IGZyb207XG4gICAgICAgIHRoaXMudG8gPSB0bztcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgY29uc3QgdmFyS2luZCA9IG9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiB0aGlzLnZhcktpbmQ7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZnJvbSwgdG8gfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dmFyS2luZH0gJHtuYW1lfT0ke2Zyb219OyAke25hbWV9PCR7dG99OyAke25hbWV9KyspYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IGFkZEV4cHJOYW1lcyhzdXBlci5uYW1lcywgdGhpcy5mcm9tKTtcbiAgICAgICAgcmV0dXJuIGFkZEV4cHJOYW1lcyhuYW1lcywgdGhpcy50byk7XG4gICAgfVxufVxuY2xhc3MgRm9ySXRlciBleHRlbmRzIEZvciB7XG4gICAgY29uc3RydWN0b3IobG9vcCwgdmFyS2luZCwgbmFtZSwgaXRlcmFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb29wID0gbG9vcDtcbiAgICAgICAgdGhpcy52YXJLaW5kID0gdmFyS2luZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5pdGVyYWJsZSA9IGl0ZXJhYmxlO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gYGZvcigke3RoaXMudmFyS2luZH0gJHt0aGlzLm5hbWV9ICR7dGhpcy5sb29wfSAke3RoaXMuaXRlcmFibGV9KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIXN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXRlcmFibGUgPSBvcHRpbWl6ZUV4cHIodGhpcy5pdGVyYWJsZSwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiBhZGROYW1lcyhzdXBlci5uYW1lcywgdGhpcy5pdGVyYWJsZS5uYW1lcyk7XG4gICAgfVxufVxuY2xhc3MgRnVuYyBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgY29uc3RydWN0b3IobmFtZSwgYXJncywgYXN5bmMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICAgICAgdGhpcy5hc3luYyA9IGFzeW5jO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBjb25zdCBfYXN5bmMgPSB0aGlzLmFzeW5jID8gXCJhc3luYyBcIiA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgJHtfYXN5bmN9ZnVuY3Rpb24gJHt0aGlzLm5hbWV9KCR7dGhpcy5hcmdzfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkZ1bmMua2luZCA9IFwiZnVuY1wiO1xuY2xhc3MgUmV0dXJuIGV4dGVuZHMgUGFyZW50Tm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwicmV0dXJuIFwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cblJldHVybi5raW5kID0gXCJyZXR1cm5cIjtcbmNsYXNzIFRyeSBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBcInRyeVwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgICAgICBpZiAodGhpcy5jYXRjaClcbiAgICAgICAgICAgIGNvZGUgKz0gdGhpcy5jYXRjaC5yZW5kZXIob3B0cyk7XG4gICAgICAgIGlmICh0aGlzLmZpbmFsbHkpXG4gICAgICAgICAgICBjb2RlICs9IHRoaXMuZmluYWxseS5yZW5kZXIob3B0cyk7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIChfYSA9IHRoaXMuY2F0Y2gpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIChfYiA9IHRoaXMuZmluYWxseSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICAoX2EgPSB0aGlzLmNhdGNoKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgKF9iID0gdGhpcy5maW5hbGx5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBzdXBlci5uYW1lcztcbiAgICAgICAgaWYgKHRoaXMuY2F0Y2gpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5jYXRjaC5uYW1lcyk7XG4gICAgICAgIGlmICh0aGlzLmZpbmFsbHkpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5maW5hbGx5Lm5hbWVzKTtcbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH1cbn1cbmNsYXNzIENhdGNoIGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgY2F0Y2goJHt0aGlzLmVycm9yfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkNhdGNoLmtpbmQgPSBcImNhdGNoXCI7XG5jbGFzcyBGaW5hbGx5IGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gXCJmaW5hbGx5XCIgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuRmluYWxseS5raW5kID0gXCJmaW5hbGx5XCI7XG5jbGFzcyBDb2RlR2VuIHtcbiAgICBjb25zdHJ1Y3RvcihleHRTY29wZSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLl9ibG9ja1N0YXJ0cyA9IFtdO1xuICAgICAgICB0aGlzLl9jb25zdGFudHMgPSB7fTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBfbjogb3B0cy5saW5lcyA/IFwiXFxuXCIgOiBcIlwiIH07XG4gICAgICAgIHRoaXMuX2V4dFNjb3BlID0gZXh0U2NvcGU7XG4gICAgICAgIHRoaXMuX3Njb3BlID0gbmV3IHNjb3BlXzEuU2NvcGUoeyBwYXJlbnQ6IGV4dFNjb3BlIH0pO1xuICAgICAgICB0aGlzLl9ub2RlcyA9IFtuZXcgUm9vdCgpXTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LnJlbmRlcih0aGlzLm9wdHMpO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIHVuaXF1ZSBuYW1lIGluIHRoZSBpbnRlcm5hbCBzY29wZVxuICAgIG5hbWUocHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZS5uYW1lKHByZWZpeCk7XG4gICAgfVxuICAgIC8vIHJlc2VydmVzIHVuaXF1ZSBuYW1lIGluIHRoZSBleHRlcm5hbCBzY29wZVxuICAgIHNjb3BlTmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLm5hbWUocHJlZml4KTtcbiAgICB9XG4gICAgLy8gcmVzZXJ2ZXMgdW5pcXVlIG5hbWUgaW4gdGhlIGV4dGVybmFsIHNjb3BlIGFuZCBhc3NpZ25zIHZhbHVlIHRvIGl0XG4gICAgc2NvcGVWYWx1ZShwcmVmaXhPck5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9leHRTY29wZS52YWx1ZShwcmVmaXhPck5hbWUsIHZhbHVlKTtcbiAgICAgICAgY29uc3QgdnMgPSB0aGlzLl92YWx1ZXNbbmFtZS5wcmVmaXhdIHx8ICh0aGlzLl92YWx1ZXNbbmFtZS5wcmVmaXhdID0gbmV3IFNldCgpKTtcbiAgICAgICAgdnMuYWRkKG5hbWUpO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZ2V0U2NvcGVWYWx1ZShwcmVmaXgsIGtleU9yUmVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5nZXRWYWx1ZShwcmVmaXgsIGtleU9yUmVmKTtcbiAgICB9XG4gICAgLy8gcmV0dXJuIGNvZGUgdGhhdCBhc3NpZ25zIHZhbHVlcyBpbiB0aGUgZXh0ZXJuYWwgc2NvcGUgdG8gdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgaW50ZXJuYWxseVxuICAgIC8vIChzYW1lIG5hbWVzIHRoYXQgd2VyZSByZXR1cm5lZCBieSBnZW4uc2NvcGVOYW1lIG9yIGdlbi5zY29wZVZhbHVlKVxuICAgIHNjb3BlUmVmcyhzY29wZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlUmVmcyhzY29wZU5hbWUsIHRoaXMuX3ZhbHVlcyk7XG4gICAgfVxuICAgIHNjb3BlQ29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlQ29kZSh0aGlzLl92YWx1ZXMpO1xuICAgIH1cbiAgICBfZGVmKHZhcktpbmQsIG5hbWVPclByZWZpeCwgcmhzLCBjb25zdGFudCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGlmIChyaHMgIT09IHVuZGVmaW5lZCAmJiBjb25zdGFudClcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50c1tuYW1lLnN0cl0gPSByaHM7XG4gICAgICAgIHRoaXMuX2xlYWZOb2RlKG5ldyBEZWYodmFyS2luZCwgbmFtZSwgcmhzKSk7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICAvLyBgY29uc3RgIGRlY2xhcmF0aW9uIChgdmFyYCBpbiBlczUgbW9kZSlcbiAgICBjb25zdChuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy5jb25zdCwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGBsZXRgIGRlY2xhcmF0aW9uIHdpdGggb3B0aW9uYWwgYXNzaWdubWVudCAoYHZhcmAgaW4gZXM1IG1vZGUpXG4gICAgbGV0KG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZihzY29wZV8xLnZhcktpbmRzLmxldCwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGB2YXJgIGRlY2xhcmF0aW9uIHdpdGggb3B0aW9uYWwgYXNzaWdubWVudFxuICAgIHZhcihuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy52YXIsIG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpO1xuICAgIH1cbiAgICAvLyBhc3NpZ25tZW50IGNvZGVcbiAgICBhc3NpZ24obGhzLCByaHMsIHNpZGVFZmZlY3RzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQXNzaWduKGxocywgcmhzLCBzaWRlRWZmZWN0cykpO1xuICAgIH1cbiAgICAvLyBgKz1gIGNvZGVcbiAgICBhZGQobGhzLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBBc3NpZ25PcChsaHMsIGV4cG9ydHMub3BlcmF0b3JzLkFERCwgcmhzKSk7XG4gICAgfVxuICAgIC8vIGFwcGVuZHMgcGFzc2VkIFNhZmVFeHByIHRvIGNvZGUgb3IgZXhlY3V0ZXMgQmxvY2tcbiAgICBjb2RlKGMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIGMoKTtcbiAgICAgICAgZWxzZSBpZiAoYyAhPT0gY29kZV8xLm5pbClcbiAgICAgICAgICAgIHRoaXMuX2xlYWZOb2RlKG5ldyBBbnlDb2RlKGMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIHJldHVybnMgY29kZSBmb3Igb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSBwYXNzZWQgYXJndW1lbnQgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnNcbiAgICBvYmplY3QoLi4ua2V5VmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBbXCJ7XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBrZXlWYWx1ZXMpIHtcbiAgICAgICAgICAgIGlmIChjb2RlLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgY29kZS5wdXNoKFwiLFwiKTtcbiAgICAgICAgICAgIGNvZGUucHVzaChrZXkpO1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gdmFsdWUgfHwgdGhpcy5vcHRzLmVzNSkge1xuICAgICAgICAgICAgICAgIGNvZGUucHVzaChcIjpcIik7XG4gICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5hZGRDb2RlQXJnKShjb2RlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29kZS5wdXNoKFwifVwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBjb2RlXzEuX0NvZGUoY29kZSk7XG4gICAgfVxuICAgIC8vIGBpZmAgY2xhdXNlIChvciBzdGF0ZW1lbnQgaWYgYHRoZW5Cb2R5YCBhbmQsIG9wdGlvbmFsbHksIGBlbHNlQm9keWAgYXJlIHBhc3NlZClcbiAgICBpZihjb25kaXRpb24sIHRoZW5Cb2R5LCBlbHNlQm9keSkge1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobmV3IElmKGNvbmRpdGlvbikpO1xuICAgICAgICBpZiAodGhlbkJvZHkgJiYgZWxzZUJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSh0aGVuQm9keSkuZWxzZSgpLmNvZGUoZWxzZUJvZHkpLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhlbkJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSh0aGVuQm9keSkuZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlbHNlQm9keSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcImVsc2VcIiBib2R5IHdpdGhvdXQgXCJ0aGVuXCIgYm9keScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBgZWxzZSBpZmAgY2xhdXNlIC0gaW52YWxpZCB3aXRob3V0IGBpZmAgb3IgYWZ0ZXIgYGVsc2VgIGNsYXVzZXNcbiAgICBlbHNlSWYoY29uZGl0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbHNlTm9kZShuZXcgSWYoY29uZGl0aW9uKSk7XG4gICAgfVxuICAgIC8vIGBlbHNlYCBjbGF1c2UgLSBvbmx5IHZhbGlkIGFmdGVyIGBpZmAgb3IgYGVsc2UgaWZgIGNsYXVzZXNcbiAgICBlbHNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxzZU5vZGUobmV3IEVsc2UoKSk7XG4gICAgfVxuICAgIC8vIGVuZCBgaWZgIHN0YXRlbWVudCAobmVlZGVkIGlmIGdlbi5pZiB3YXMgdXNlZCBvbmx5IHdpdGggY29uZGl0aW9uKVxuICAgIGVuZElmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKElmLCBFbHNlKTtcbiAgICB9XG4gICAgX2Zvcihub2RlLCBmb3JCb2R5KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgaWYgKGZvckJvZHkpXG4gICAgICAgICAgICB0aGlzLmNvZGUoZm9yQm9keSkuZW5kRm9yKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBhIGdlbmVyaWMgYGZvcmAgY2xhdXNlIChvciBzdGF0ZW1lbnQgaWYgYGZvckJvZHlgIGlzIHBhc3NlZClcbiAgICBmb3IoaXRlcmF0aW9uLCBmb3JCb2R5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvckxvb3AoaXRlcmF0aW9uKSwgZm9yQm9keSk7XG4gICAgfVxuICAgIC8vIGBmb3JgIHN0YXRlbWVudCBmb3IgYSByYW5nZSBvZiB2YWx1ZXNcbiAgICBmb3JSYW5nZShuYW1lT3JQcmVmaXgsIGZyb20sIHRvLCBmb3JCb2R5LCB2YXJLaW5kID0gdGhpcy5vcHRzLmVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogc2NvcGVfMS52YXJLaW5kcy5sZXQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JSYW5nZSh2YXJLaW5kLCBuYW1lLCBmcm9tLCB0byksICgpID0+IGZvckJvZHkobmFtZSkpO1xuICAgIH1cbiAgICAvLyBgZm9yLW9mYCBzdGF0ZW1lbnQgKGluIGVzNSBtb2RlIHJlcGxhY2Ugd2l0aCBhIG5vcm1hbCBmb3IgbG9vcClcbiAgICBmb3JPZihuYW1lT3JQcmVmaXgsIGl0ZXJhYmxlLCBmb3JCb2R5LCB2YXJLaW5kID0gc2NvcGVfMS52YXJLaW5kcy5jb25zdCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZXM1KSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBpdGVyYWJsZSBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8gaXRlcmFibGUgOiB0aGlzLnZhcihcIl9hcnJcIiwgaXRlcmFibGUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yUmFuZ2UoXCJfaVwiLCAwLCAoMCwgY29kZV8xLl8pIGAke2Fycn0ubGVuZ3RoYCwgKGkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcihuYW1lLCAoMCwgY29kZV8xLl8pIGAke2Fycn1bJHtpfV1gKTtcbiAgICAgICAgICAgICAgICBmb3JCb2R5KG5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9ySXRlcihcIm9mXCIsIHZhcktpbmQsIG5hbWUsIGl0ZXJhYmxlKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGBmb3ItaW5gIHN0YXRlbWVudC5cbiAgICAvLyBXaXRoIG9wdGlvbiBgb3duUHJvcGVydGllc2AgcmVwbGFjZWQgd2l0aCBhIGBmb3Itb2ZgIGxvb3AgZm9yIG9iamVjdCBrZXlzXG4gICAgZm9ySW4obmFtZU9yUHJlZml4LCBvYmosIGZvckJvZHksIHZhcktpbmQgPSB0aGlzLm9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiBzY29wZV8xLnZhcktpbmRzLmNvbnN0KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdHMub3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yT2YobmFtZU9yUHJlZml4LCAoMCwgY29kZV8xLl8pIGBPYmplY3Qua2V5cygke29ian0pYCwgZm9yQm9keSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JJdGVyKFwiaW5cIiwgdmFyS2luZCwgbmFtZSwgb2JqKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGVuZCBgZm9yYCBsb29wXG4gICAgZW5kRm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKEZvcik7XG4gICAgfVxuICAgIC8vIGBsYWJlbGAgc3RhdGVtZW50XG4gICAgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBMYWJlbChsYWJlbCkpO1xuICAgIH1cbiAgICAvLyBgYnJlYWtgIHN0YXRlbWVudFxuICAgIGJyZWFrKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQnJlYWsobGFiZWwpKTtcbiAgICB9XG4gICAgLy8gYHJldHVybmAgc3RhdGVtZW50XG4gICAgcmV0dXJuKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgUmV0dXJuKCk7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgdGhpcy5jb2RlKHZhbHVlKTtcbiAgICAgICAgaWYgKG5vZGUubm9kZXMubGVuZ3RoICE9PSAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcInJldHVyblwiIHNob3VsZCBoYXZlIG9uZSBub2RlJyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoUmV0dXJuKTtcbiAgICB9XG4gICAgLy8gYHRyeWAgc3RhdGVtZW50XG4gICAgdHJ5KHRyeUJvZHksIGNhdGNoQ29kZSwgZmluYWxseUNvZGUpIHtcbiAgICAgICAgaWYgKCFjYXRjaENvZGUgJiYgIWZpbmFsbHlDb2RlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcInRyeVwiIHdpdGhvdXQgXCJjYXRjaFwiIGFuZCBcImZpbmFsbHlcIicpO1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IFRyeSgpO1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobm9kZSk7XG4gICAgICAgIHRoaXMuY29kZSh0cnlCb2R5KTtcbiAgICAgICAgaWYgKGNhdGNoQ29kZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLm5hbWUoXCJlXCIpO1xuICAgICAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBub2RlLmNhdGNoID0gbmV3IENhdGNoKGVycm9yKTtcbiAgICAgICAgICAgIGNhdGNoQ29kZShlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbmFsbHlDb2RlKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyTm9kZSA9IG5vZGUuZmluYWxseSA9IG5ldyBGaW5hbGx5KCk7XG4gICAgICAgICAgICB0aGlzLmNvZGUoZmluYWxseUNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoQ2F0Y2gsIEZpbmFsbHkpO1xuICAgIH1cbiAgICAvLyBgdGhyb3dgIHN0YXRlbWVudFxuICAgIHRocm93KGVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgVGhyb3coZXJyb3IpKTtcbiAgICB9XG4gICAgLy8gc3RhcnQgc2VsZi1iYWxhbmNpbmcgYmxvY2tcbiAgICBibG9jayhib2R5LCBub2RlQ291bnQpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tTdGFydHMucHVzaCh0aGlzLl9ub2Rlcy5sZW5ndGgpO1xuICAgICAgICBpZiAoYm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShib2R5KS5lbmRCbG9jayhub2RlQ291bnQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZW5kIHRoZSBjdXJyZW50IHNlbGYtYmFsYW5jaW5nIGJsb2NrXG4gICAgZW5kQmxvY2sobm9kZUNvdW50KSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMuX2Jsb2NrU3RhcnRzLnBvcCgpO1xuICAgICAgICBpZiAobGVuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiBub3QgaW4gc2VsZi1iYWxhbmNpbmcgYmxvY2tcIik7XG4gICAgICAgIGNvbnN0IHRvQ2xvc2UgPSB0aGlzLl9ub2Rlcy5sZW5ndGggLSBsZW47XG4gICAgICAgIGlmICh0b0Nsb3NlIDwgMCB8fCAobm9kZUNvdW50ICE9PSB1bmRlZmluZWQgJiYgdG9DbG9zZSAhPT0gbm9kZUNvdW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiB3cm9uZyBudW1iZXIgb2Ygbm9kZXM6ICR7dG9DbG9zZX0gdnMgJHtub2RlQ291bnR9IGV4cGVjdGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbm9kZXMubGVuZ3RoID0gbGVuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gYGZ1bmN0aW9uYCBoZWFkaW5nIChvciBkZWZpbml0aW9uIGlmIGZ1bmNCb2R5IGlzIHBhc3NlZClcbiAgICBmdW5jKG5hbWUsIGFyZ3MgPSBjb2RlXzEubmlsLCBhc3luYywgZnVuY0JvZHkpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5ldyBGdW5jKG5hbWUsIGFyZ3MsIGFzeW5jKSk7XG4gICAgICAgIGlmIChmdW5jQm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShmdW5jQm9keSkuZW5kRnVuYygpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZW5kIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICBlbmRGdW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKEZ1bmMpO1xuICAgIH1cbiAgICBvcHRpbWl6ZShuID0gMSkge1xuICAgICAgICB3aGlsZSAobi0tID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fcm9vdC5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICB0aGlzLl9yb290Lm9wdGltaXplTmFtZXModGhpcy5fcm9vdC5uYW1lcywgdGhpcy5fY29uc3RhbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfbGVhZk5vZGUobm9kZSkge1xuICAgICAgICB0aGlzLl9jdXJyTm9kZS5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgX2Jsb2NrTm9kZShub2RlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJOb2RlLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIHRoaXMuX25vZGVzLnB1c2gobm9kZSk7XG4gICAgfVxuICAgIF9lbmRCbG9ja05vZGUoTjEsIE4yKSB7XG4gICAgICAgIGNvbnN0IG4gPSB0aGlzLl9jdXJyTm9kZTtcbiAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBOMSB8fCAoTjIgJiYgbiBpbnN0YW5jZW9mIE4yKSkge1xuICAgICAgICAgICAgdGhpcy5fbm9kZXMucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5vdCBpbiBibG9jayBcIiR7TjIgPyBgJHtOMS5raW5kfS8ke04yLmtpbmR9YCA6IE4xLmtpbmR9XCJgKTtcbiAgICB9XG4gICAgX2Vsc2VOb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgbiA9IHRoaXMuX2N1cnJOb2RlO1xuICAgICAgICBpZiAoIShuIGluc3RhbmNlb2YgSWYpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwiZWxzZVwiIHdpdGhvdXQgXCJpZlwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBuLmVsc2UgPSBub2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IF9yb290KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbMF07XG4gICAgfVxuICAgIGdldCBfY3Vyck5vZGUoKSB7XG4gICAgICAgIGNvbnN0IG5zID0gdGhpcy5fbm9kZXM7XG4gICAgICAgIHJldHVybiBuc1tucy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgc2V0IF9jdXJyTm9kZShub2RlKSB7XG4gICAgICAgIGNvbnN0IG5zID0gdGhpcy5fbm9kZXM7XG4gICAgICAgIG5zW25zLmxlbmd0aCAtIDFdID0gbm9kZTtcbiAgICB9XG59XG5leHBvcnRzLkNvZGVHZW4gPSBDb2RlR2VuO1xuZnVuY3Rpb24gYWRkTmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICBmb3IgKGNvbnN0IG4gaW4gZnJvbSlcbiAgICAgICAgbmFtZXNbbl0gPSAobmFtZXNbbl0gfHwgMCkgKyAoZnJvbVtuXSB8fCAwKTtcbiAgICByZXR1cm4gbmFtZXM7XG59XG5mdW5jdGlvbiBhZGRFeHByTmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICByZXR1cm4gZnJvbSBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZU9yTmFtZSA/IGFkZE5hbWVzKG5hbWVzLCBmcm9tLm5hbWVzKSA6IG5hbWVzO1xufVxuZnVuY3Rpb24gb3B0aW1pemVFeHByKGV4cHIsIG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICBpZiAoZXhwciBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lKVxuICAgICAgICByZXR1cm4gcmVwbGFjZU5hbWUoZXhwcik7XG4gICAgaWYgKCFjYW5PcHRpbWl6ZShleHByKSlcbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgcmV0dXJuIG5ldyBjb2RlXzEuX0NvZGUoZXhwci5faXRlbXMucmVkdWNlKChpdGVtcywgYykgPT4ge1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lKVxuICAgICAgICAgICAgYyA9IHJlcGxhY2VOYW1lKGMpO1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZSlcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4uYy5faXRlbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBpdGVtcy5wdXNoKGMpO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10pKTtcbiAgICBmdW5jdGlvbiByZXBsYWNlTmFtZShuKSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdGFudHNbbi5zdHJdO1xuICAgICAgICBpZiAoYyA9PT0gdW5kZWZpbmVkIHx8IG5hbWVzW24uc3RyXSAhPT0gMSlcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICBkZWxldGUgbmFtZXNbbi5zdHJdO1xuICAgICAgICByZXR1cm4gYztcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuT3B0aW1pemUoZSkge1xuICAgICAgICByZXR1cm4gKGUgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGUgJiZcbiAgICAgICAgICAgIGUuX2l0ZW1zLnNvbWUoKGMpID0+IGMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSAmJiBuYW1lc1tjLnN0cl0gPT09IDEgJiYgY29uc3RhbnRzW2Muc3RyXSAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc3VidHJhY3ROYW1lcyhuYW1lcywgZnJvbSkge1xuICAgIGZvciAoY29uc3QgbiBpbiBmcm9tKVxuICAgICAgICBuYW1lc1tuXSA9IChuYW1lc1tuXSB8fCAwKSAtIChmcm9tW25dIHx8IDApO1xufVxuZnVuY3Rpb24gbm90KHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT0gXCJib29sZWFuXCIgfHwgdHlwZW9mIHggPT0gXCJudW1iZXJcIiB8fCB4ID09PSBudWxsID8gIXggOiAoMCwgY29kZV8xLl8pIGAhJHtwYXIoeCl9YDtcbn1cbmV4cG9ydHMubm90ID0gbm90O1xuY29uc3QgYW5kQ29kZSA9IG1hcHBlbmQoZXhwb3J0cy5vcGVyYXRvcnMuQU5EKTtcbi8vIGJvb2xlYW4gQU5EICgmJikgZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgYXJndW1lbnRzXG5mdW5jdGlvbiBhbmQoLi4uYXJncykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShhbmRDb2RlKTtcbn1cbmV4cG9ydHMuYW5kID0gYW5kO1xuY29uc3Qgb3JDb2RlID0gbWFwcGVuZChleHBvcnRzLm9wZXJhdG9ycy5PUik7XG4vLyBib29sZWFuIE9SICh8fCkgZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgYXJndW1lbnRzXG5mdW5jdGlvbiBvciguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGFyZ3MucmVkdWNlKG9yQ29kZSk7XG59XG5leHBvcnRzLm9yID0gb3I7XG5mdW5jdGlvbiBtYXBwZW5kKG9wKSB7XG4gICAgcmV0dXJuICh4LCB5KSA9PiAoeCA9PT0gY29kZV8xLm5pbCA/IHkgOiB5ID09PSBjb2RlXzEubmlsID8geCA6ICgwLCBjb2RlXzEuXykgYCR7cGFyKHgpfSAke29wfSAke3Bhcih5KX1gKTtcbn1cbmZ1bmN0aW9uIHBhcih4KSB7XG4gICAgcmV0dXJuIHggaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IHggOiAoMCwgY29kZV8xLl8pIGAoJHt4fSlgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2hlY2tTdHJpY3RNb2RlID0gZXhwb3J0cy5nZXRFcnJvclBhdGggPSBleHBvcnRzLlR5cGUgPSBleHBvcnRzLnVzZUZ1bmMgPSBleHBvcnRzLnNldEV2YWx1YXRlZCA9IGV4cG9ydHMuZXZhbHVhdGVkUHJvcHNUb05hbWUgPSBleHBvcnRzLm1lcmdlRXZhbHVhdGVkID0gZXhwb3J0cy5lYWNoSXRlbSA9IGV4cG9ydHMudW5lc2NhcGVKc29uUG9pbnRlciA9IGV4cG9ydHMuZXNjYXBlSnNvblBvaW50ZXIgPSBleHBvcnRzLmVzY2FwZUZyYWdtZW50ID0gZXhwb3J0cy51bmVzY2FwZUZyYWdtZW50ID0gZXhwb3J0cy5zY2hlbWFSZWZPclZhbCA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXNCdXRSZWYgPSBleHBvcnRzLnNjaGVtYUhhc1J1bGVzID0gZXhwb3J0cy5jaGVja1Vua25vd25SdWxlcyA9IGV4cG9ydHMuYWx3YXlzVmFsaWRTY2hlbWEgPSBleHBvcnRzLnRvSGFzaCA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuL2NvZGVcIik7XG4vLyBUT0RPIHJlZmFjdG9yIHRvIHVzZSBTZXRcbmZ1bmN0aW9uIHRvSGFzaChhcnIpIHtcbiAgICBjb25zdCBoYXNoID0ge307XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGFycilcbiAgICAgICAgaGFzaFtpdGVtXSA9IHRydWU7XG4gICAgcmV0dXJuIGhhc2g7XG59XG5leHBvcnRzLnRvSGFzaCA9IHRvSGFzaDtcbmZ1bmN0aW9uIGFsd2F5c1ZhbGlkU2NoZW1hKGl0LCBzY2hlbWEpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICBpZiAoT2JqZWN0LmtleXMoc2NoZW1hKS5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGNoZWNrVW5rbm93blJ1bGVzKGl0LCBzY2hlbWEpO1xuICAgIHJldHVybiAhc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBpdC5zZWxmLlJVTEVTLmFsbCk7XG59XG5leHBvcnRzLmFsd2F5c1ZhbGlkU2NoZW1hID0gYWx3YXlzVmFsaWRTY2hlbWE7XG5mdW5jdGlvbiBjaGVja1Vua25vd25SdWxlcyhpdCwgc2NoZW1hID0gaXQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBpZiAoIW9wdHMuc3RyaWN0U2NoZW1hKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgcnVsZXMgPSBzZWxmLlJVTEVTLmtleXdvcmRzO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoIXJ1bGVzW2tleV0pXG4gICAgICAgICAgICBjaGVja1N0cmljdE1vZGUoaXQsIGB1bmtub3duIGtleXdvcmQ6IFwiJHtrZXl9XCJgKTtcbiAgICB9XG59XG5leHBvcnRzLmNoZWNrVW5rbm93blJ1bGVzID0gY2hlY2tVbmtub3duUnVsZXM7XG5mdW5jdGlvbiBzY2hlbWFIYXNSdWxlcyhzY2hlbWEsIHJ1bGVzKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKHJ1bGVzW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNjaGVtYUhhc1J1bGVzID0gc2NoZW1hSGFzUnVsZXM7XG5mdW5jdGlvbiBzY2hlbWFIYXNSdWxlc0J1dFJlZihzY2hlbWEsIFJVTEVTKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKGtleSAhPT0gXCIkcmVmXCIgJiYgUlVMRVMuYWxsW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNjaGVtYUhhc1J1bGVzQnV0UmVmID0gc2NoZW1hSGFzUnVsZXNCdXRSZWY7XG5mdW5jdGlvbiBzY2hlbWFSZWZPclZhbCh7IHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCB9LCBzY2hlbWEsIGtleXdvcmQsICRkYXRhKSB7XG4gICAgaWYgKCEkZGF0YSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm51bWJlclwiIHx8IHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hfWA7XG4gICAgfVxuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3RvcFNjaGVtYVJlZn0ke3NjaGVtYVBhdGh9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShrZXl3b3JkKX1gO1xufVxuZXhwb3J0cy5zY2hlbWFSZWZPclZhbCA9IHNjaGVtYVJlZk9yVmFsO1xuZnVuY3Rpb24gdW5lc2NhcGVGcmFnbWVudChzdHIpIHtcbiAgICByZXR1cm4gdW5lc2NhcGVKc29uUG9pbnRlcihkZWNvZGVVUklDb21wb25lbnQoc3RyKSk7XG59XG5leHBvcnRzLnVuZXNjYXBlRnJhZ21lbnQgPSB1bmVzY2FwZUZyYWdtZW50O1xuZnVuY3Rpb24gZXNjYXBlRnJhZ21lbnQoc3RyKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlc2NhcGVKc29uUG9pbnRlcihzdHIpKTtcbn1cbmV4cG9ydHMuZXNjYXBlRnJhZ21lbnQgPSBlc2NhcGVGcmFnbWVudDtcbmZ1bmN0aW9uIGVzY2FwZUpzb25Qb2ludGVyKHN0cikge1xuICAgIGlmICh0eXBlb2Ygc3RyID09IFwibnVtYmVyXCIpXG4gICAgICAgIHJldHVybiBgJHtzdHJ9YDtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL34vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXC8vZywgXCJ+MVwiKTtcbn1cbmV4cG9ydHMuZXNjYXBlSnNvblBvaW50ZXIgPSBlc2NhcGVKc29uUG9pbnRlcjtcbmZ1bmN0aW9uIHVuZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+MS9nLCBcIi9cIikucmVwbGFjZSgvfjAvZywgXCJ+XCIpO1xufVxuZXhwb3J0cy51bmVzY2FwZUpzb25Qb2ludGVyID0gdW5lc2NhcGVKc29uUG9pbnRlcjtcbmZ1bmN0aW9uIGVhY2hJdGVtKHhzLCBmKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgeCBvZiB4cylcbiAgICAgICAgICAgIGYoeCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmKHhzKTtcbiAgICB9XG59XG5leHBvcnRzLmVhY2hJdGVtID0gZWFjaEl0ZW07XG5mdW5jdGlvbiBtYWtlTWVyZ2VFdmFsdWF0ZWQoeyBtZXJnZU5hbWVzLCBtZXJnZVRvTmFtZSwgbWVyZ2VWYWx1ZXMsIHJlc3VsdFRvTmFtZSwgfSkge1xuICAgIHJldHVybiAoZ2VuLCBmcm9tLCB0bywgdG9OYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRvID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZnJvbVxuICAgICAgICAgICAgOiB0byBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lXG4gICAgICAgICAgICAgICAgPyAoZnJvbSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gbWVyZ2VOYW1lcyhnZW4sIGZyb20sIHRvKSA6IG1lcmdlVG9OYW1lKGdlbiwgZnJvbSwgdG8pLCB0bylcbiAgICAgICAgICAgICAgICA6IGZyb20gaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZVxuICAgICAgICAgICAgICAgICAgICA/IChtZXJnZVRvTmFtZShnZW4sIHRvLCBmcm9tKSwgZnJvbSlcbiAgICAgICAgICAgICAgICAgICAgOiBtZXJnZVZhbHVlcyhmcm9tLCB0byk7XG4gICAgICAgIHJldHVybiB0b05hbWUgPT09IGNvZGVnZW5fMS5OYW1lICYmICEocmVzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpID8gcmVzdWx0VG9OYW1lKGdlbiwgcmVzKSA6IHJlcztcbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZUV2YWx1YXRlZCA9IHtcbiAgICBwcm9wczogbWFrZU1lcmdlRXZhbHVhdGVkKHtcbiAgICAgICAgbWVyZ2VOYW1lczogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZSAmJiAke2Zyb219ICE9PSB1bmRlZmluZWRgLCAoKSA9PiB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtmcm9tfSA9PT0gdHJ1ZWAsICgpID0+IGdlbi5hc3NpZ24odG8sIHRydWUpLCAoKSA9PiBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSB8fCB7fWApLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgT2JqZWN0LmFzc2lnbigke3RvfSwgJHtmcm9tfSlgKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBtZXJnZVRvTmFtZTogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZWAsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChmcm9tID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih0bywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSB8fCB7fWApO1xuICAgICAgICAgICAgICAgIHNldEV2YWx1YXRlZChnZW4sIHRvLCBmcm9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG1lcmdlVmFsdWVzOiAoZnJvbSwgdG8pID0+IChmcm9tID09PSB0cnVlID8gdHJ1ZSA6IHsgLi4uZnJvbSwgLi4udG8gfSksXG4gICAgICAgIHJlc3VsdFRvTmFtZTogZXZhbHVhdGVkUHJvcHNUb05hbWUsXG4gICAgfSksXG4gICAgaXRlbXM6IG1ha2VNZXJnZUV2YWx1YXRlZCh7XG4gICAgICAgIG1lcmdlTmFtZXM6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWUgJiYgJHtmcm9tfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgKDAsIGNvZGVnZW5fMS5fKSBgJHtmcm9tfSA9PT0gdHJ1ZSA/IHRydWUgOiAke3RvfSA+ICR7ZnJvbX0gPyAke3RvfSA6ICR7ZnJvbX1gKSksXG4gICAgICAgIG1lcmdlVG9OYW1lOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgZnJvbSA9PT0gdHJ1ZSA/IHRydWUgOiAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSA+ICR7ZnJvbX0gPyAke3RvfSA6ICR7ZnJvbX1gKSksXG4gICAgICAgIG1lcmdlVmFsdWVzOiAoZnJvbSwgdG8pID0+IChmcm9tID09PSB0cnVlID8gdHJ1ZSA6IE1hdGgubWF4KGZyb20sIHRvKSksXG4gICAgICAgIHJlc3VsdFRvTmFtZTogKGdlbiwgaXRlbXMpID0+IGdlbi52YXIoXCJpdGVtc1wiLCBpdGVtcyksXG4gICAgfSksXG59O1xuZnVuY3Rpb24gZXZhbHVhdGVkUHJvcHNUb05hbWUoZ2VuLCBwcykge1xuICAgIGlmIChwcyA9PT0gdHJ1ZSlcbiAgICAgICAgcmV0dXJuIGdlbi52YXIoXCJwcm9wc1wiLCB0cnVlKTtcbiAgICBjb25zdCBwcm9wcyA9IGdlbi52YXIoXCJwcm9wc1wiLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgIGlmIChwcyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzZXRFdmFsdWF0ZWQoZ2VuLCBwcm9wcywgcHMpO1xuICAgIHJldHVybiBwcm9wcztcbn1cbmV4cG9ydHMuZXZhbHVhdGVkUHJvcHNUb05hbWUgPSBldmFsdWF0ZWRQcm9wc1RvTmFtZTtcbmZ1bmN0aW9uIHNldEV2YWx1YXRlZChnZW4sIHByb3BzLCBwcykge1xuICAgIE9iamVjdC5rZXlzKHBzKS5mb3JFYWNoKChwKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcHN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwKX1gLCB0cnVlKSk7XG59XG5leHBvcnRzLnNldEV2YWx1YXRlZCA9IHNldEV2YWx1YXRlZDtcbmNvbnN0IHNuaXBwZXRzID0ge307XG5mdW5jdGlvbiB1c2VGdW5jKGdlbiwgZikge1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcImZ1bmNcIiwge1xuICAgICAgICByZWY6IGYsXG4gICAgICAgIGNvZGU6IHNuaXBwZXRzW2YuY29kZV0gfHwgKHNuaXBwZXRzW2YuY29kZV0gPSBuZXcgY29kZV8xLl9Db2RlKGYuY29kZSkpLFxuICAgIH0pO1xufVxuZXhwb3J0cy51c2VGdW5jID0gdXNlRnVuYztcbnZhciBUeXBlO1xuKGZ1bmN0aW9uIChUeXBlKSB7XG4gICAgVHlwZVtUeXBlW1wiTnVtXCJdID0gMF0gPSBcIk51bVwiO1xuICAgIFR5cGVbVHlwZVtcIlN0clwiXSA9IDFdID0gXCJTdHJcIjtcbn0pKFR5cGUgPSBleHBvcnRzLlR5cGUgfHwgKGV4cG9ydHMuVHlwZSA9IHt9KSk7XG5mdW5jdGlvbiBnZXRFcnJvclBhdGgoZGF0YVByb3AsIGRhdGFQcm9wVHlwZSwganNQcm9wZXJ0eVN5bnRheCkge1xuICAgIC8vIGxldCBwYXRoXG4gICAgaWYgKGRhdGFQcm9wIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpIHtcbiAgICAgICAgY29uc3QgaXNOdW1iZXIgPSBkYXRhUHJvcFR5cGUgPT09IFR5cGUuTnVtO1xuICAgICAgICByZXR1cm4ganNQcm9wZXJ0eVN5bnRheFxuICAgICAgICAgICAgPyBpc051bWJlclxuICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgXCJbXCIgKyAke2RhdGFQcm9wfSArIFwiXVwiYFxuICAgICAgICAgICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgXCJbJ1wiICsgJHtkYXRhUHJvcH0gKyBcIiddXCJgXG4gICAgICAgICAgICA6IGlzTnVtYmVyXG4gICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGBcIi9cIiArICR7ZGF0YVByb3B9YFxuICAgICAgICAgICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgXCIvXCIgKyAke2RhdGFQcm9wfS5yZXBsYWNlKC9+L2csIFwifjBcIikucmVwbGFjZSgvXFxcXC8vZywgXCJ+MVwiKWA7IC8vIFRPRE8gbWF5YmUgdXNlIGdsb2JhbCBlc2NhcGVQb2ludGVyXG4gICAgfVxuICAgIHJldHVybiBqc1Byb3BlcnR5U3ludGF4ID8gKDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoZGF0YVByb3ApLnRvU3RyaW5nKCkgOiBcIi9cIiArIGVzY2FwZUpzb25Qb2ludGVyKGRhdGFQcm9wKTtcbn1cbmV4cG9ydHMuZ2V0RXJyb3JQYXRoID0gZ2V0RXJyb3JQYXRoO1xuZnVuY3Rpb24gY2hlY2tTdHJpY3RNb2RlKGl0LCBtc2csIG1vZGUgPSBpdC5vcHRzLnN0cmljdFNjaGVtYSkge1xuICAgIGlmICghbW9kZSlcbiAgICAgICAgcmV0dXJuO1xuICAgIG1zZyA9IGBzdHJpY3QgbW9kZTogJHttc2d9YDtcbiAgICBpZiAobW9kZSA9PT0gdHJ1ZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgaXQuc2VsZi5sb2dnZXIud2Fybihtc2cpO1xufVxuZXhwb3J0cy5jaGVja1N0cmljdE1vZGUgPSBjaGVja1N0cmljdE1vZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXMgPSB7XG4gICAgLy8gdmFsaWRhdGlvbiBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICBkYXRhOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJkYXRhXCIpLFxuICAgIC8vIGFyZ3MgcGFzc2VkIGZyb20gcmVmZXJlbmNpbmcgc2NoZW1hXG4gICAgdmFsQ3h0OiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ2YWxDeHRcIiksXG4gICAgaW5zdGFuY2VQYXRoOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJpbnN0YW5jZVBhdGhcIiksXG4gICAgcGFyZW50RGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyZW50RGF0YVwiKSxcbiAgICBwYXJlbnREYXRhUHJvcGVydHk6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudERhdGFQcm9wZXJ0eVwiKSxcbiAgICByb290RGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicm9vdERhdGFcIiksXG4gICAgZHluYW1pY0FuY2hvcnM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImR5bmFtaWNBbmNob3JzXCIpLFxuICAgIC8vIGZ1bmN0aW9uIHNjb3BlZCB2YXJpYWJsZXNcbiAgICB2RXJyb3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ2RXJyb3JzXCIpLFxuICAgIGVycm9yczogbmV3IGNvZGVnZW5fMS5OYW1lKFwiZXJyb3JzXCIpLFxuICAgIHRoaXM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInRoaXNcIiksXG4gICAgLy8gXCJnbG9iYWxzXCJcbiAgICBzZWxmOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzZWxmXCIpLFxuICAgIHNjb3BlOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzY29wZVwiKSxcbiAgICAvLyBKVEQgc2VyaWFsaXplL3BhcnNlIG5hbWUgZm9yIEpTT04gc3RyaW5nIGFuZCBwb3NpdGlvblxuICAgIGpzb246IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25cIiksXG4gICAganNvblBvczogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvblBvc1wiKSxcbiAgICBqc29uTGVuOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uTGVuXCIpLFxuICAgIGpzb25QYXJ0OiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uUGFydFwiKSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBuYW1lcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5hbWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4dGVuZEVycm9ycyA9IGV4cG9ydHMucmVzZXRFcnJvcnNDb3VudCA9IGV4cG9ydHMucmVwb3J0RXh0cmFFcnJvciA9IGV4cG9ydHMucmVwb3J0RXJyb3IgPSBleHBvcnRzLmtleXdvcmQkRGF0YUVycm9yID0gZXhwb3J0cy5rZXl3b3JkRXJyb3IgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi9uYW1lc1wiKTtcbmV4cG9ydHMua2V5d29yZEVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IGtleXdvcmQgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IHBhc3MgXCIke2tleXdvcmR9XCIga2V5d29yZCB2YWxpZGF0aW9uYCxcbn07XG5leHBvcnRzLmtleXdvcmQkRGF0YUVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IGtleXdvcmQsIHNjaGVtYVR5cGUgfSkgPT4gc2NoZW1hVHlwZVxuICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuc3RyKSBgXCIke2tleXdvcmR9XCIga2V5d29yZCBtdXN0IGJlICR7c2NoZW1hVHlwZX0gKCRkYXRhKWBcbiAgICAgICAgOiAoMCwgY29kZWdlbl8xLnN0cikgYFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgaXMgaW52YWxpZCAoJGRhdGEpYCxcbn07XG5mdW5jdGlvbiByZXBvcnRFcnJvcihjeHQsIGVycm9yID0gZXhwb3J0cy5rZXl3b3JkRXJyb3IsIGVycm9yUGF0aHMsIG92ZXJyaWRlQWxsRXJyb3JzKSB7XG4gICAgY29uc3QgeyBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgZ2VuLCBjb21wb3NpdGVSdWxlLCBhbGxFcnJvcnMgfSA9IGl0O1xuICAgIGNvbnN0IGVyck9iaiA9IGVycm9yT2JqZWN0Q29kZShjeHQsIGVycm9yLCBlcnJvclBhdGhzKTtcbiAgICBpZiAob3ZlcnJpZGVBbGxFcnJvcnMgIT09IG51bGwgJiYgb3ZlcnJpZGVBbGxFcnJvcnMgIT09IHZvaWQgMCA/IG92ZXJyaWRlQWxsRXJyb3JzIDogKGNvbXBvc2l0ZVJ1bGUgfHwgYWxsRXJyb3JzKSkge1xuICAgICAgICBhZGRFcnJvcihnZW4sIGVyck9iaik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm5FcnJvcnMoaXQsICgwLCBjb2RlZ2VuXzEuXykgYFske2Vyck9ian1dYCk7XG4gICAgfVxufVxuZXhwb3J0cy5yZXBvcnRFcnJvciA9IHJlcG9ydEVycm9yO1xuZnVuY3Rpb24gcmVwb3J0RXh0cmFFcnJvcihjeHQsIGVycm9yID0gZXhwb3J0cy5rZXl3b3JkRXJyb3IsIGVycm9yUGF0aHMpIHtcbiAgICBjb25zdCB7IGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBnZW4sIGNvbXBvc2l0ZVJ1bGUsIGFsbEVycm9ycyB9ID0gaXQ7XG4gICAgY29uc3QgZXJyT2JqID0gZXJyb3JPYmplY3RDb2RlKGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpO1xuICAgIGFkZEVycm9yKGdlbiwgZXJyT2JqKTtcbiAgICBpZiAoIShjb21wb3NpdGVSdWxlIHx8IGFsbEVycm9ycykpIHtcbiAgICAgICAgcmV0dXJuRXJyb3JzKGl0LCBuYW1lc18xLmRlZmF1bHQudkVycm9ycyk7XG4gICAgfVxufVxuZXhwb3J0cy5yZXBvcnRFeHRyYUVycm9yID0gcmVwb3J0RXh0cmFFcnJvcjtcbmZ1bmN0aW9uIHJlc2V0RXJyb3JzQ291bnQoZ2VuLCBlcnJzQ291bnQpIHtcbiAgICBnZW4uYXNzaWduKG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsIGVycnNDb3VudCk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ICE9PSBudWxsYCwgKCkgPT4gZ2VuLmlmKGVycnNDb3VudCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5sZW5ndGhgLCBlcnJzQ291bnQpLCAoKSA9PiBnZW4uYXNzaWduKG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzLCBudWxsKSkpO1xufVxuZXhwb3J0cy5yZXNldEVycm9yc0NvdW50ID0gcmVzZXRFcnJvcnNDb3VudDtcbmZ1bmN0aW9uIGV4dGVuZEVycm9ycyh7IGdlbiwga2V5d29yZCwgc2NoZW1hVmFsdWUsIGRhdGEsIGVycnNDb3VudCwgaXQsIH0pIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZXJyc0NvdW50ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICBjb25zdCBlcnIgPSBnZW4ubmFtZShcImVyclwiKTtcbiAgICBnZW4uZm9yUmFuZ2UoXCJpXCIsIGVycnNDb3VudCwgbmFtZXNfMS5kZWZhdWx0LmVycm9ycywgKGkpID0+IHtcbiAgICAgICAgZ2VuLmNvbnN0KGVyciwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc31bJHtpfV1gKTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5pbnN0YW5jZVBhdGggPT09IHVuZGVmaW5lZGAsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9Lmluc3RhbmNlUGF0aGAsICgwLCBjb2RlZ2VuXzEuc3RyQ29uY2F0KShuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCBpdC5lcnJvclBhdGgpKSk7XG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9LnNjaGVtYVBhdGhgLCAoMCwgY29kZWdlbl8xLnN0cikgYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfWApO1xuICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5zY2hlbWFgLCBzY2hlbWFWYWx1ZSk7XG4gICAgICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5kYXRhYCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydHMuZXh0ZW5kRXJyb3JzID0gZXh0ZW5kRXJyb3JzO1xuZnVuY3Rpb24gYWRkRXJyb3IoZ2VuLCBlcnJPYmopIHtcbiAgICBjb25zdCBlcnIgPSBnZW4uY29uc3QoXCJlcnJcIiwgZXJyT2JqKTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30gPT09IG51bGxgLCAoKSA9PiBnZW4uYXNzaWduKG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGBbJHtlcnJ9XWApLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5wdXNoKCR7ZXJyfSlgKTtcbiAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9KytgKTtcbn1cbmZ1bmN0aW9uIHJldHVybkVycm9ycyhpdCwgZXJycykge1xuICAgIGNvbnN0IHsgZ2VuLCB2YWxpZGF0ZU5hbWUsIHNjaGVtYUVudiB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYUVudi4kYXN5bmMpIHtcbiAgICAgICAgZ2VuLnRocm93KCgwLCBjb2RlZ2VuXzEuXykgYG5ldyAke2l0LlZhbGlkYXRpb25FcnJvcn0oJHtlcnJzfSlgKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmVycm9yc2AsIGVycnMpO1xuICAgICAgICBnZW4ucmV0dXJuKGZhbHNlKTtcbiAgICB9XG59XG5jb25zdCBFID0ge1xuICAgIGtleXdvcmQ6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImtleXdvcmRcIiksXG4gICAgc2NoZW1hUGF0aDogbmV3IGNvZGVnZW5fMS5OYW1lKFwic2NoZW1hUGF0aFwiKSxcbiAgICBwYXJhbXM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmFtc1wiKSxcbiAgICBwcm9wZXJ0eU5hbWU6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInByb3BlcnR5TmFtZVwiKSxcbiAgICBtZXNzYWdlOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJtZXNzYWdlXCIpLFxuICAgIHNjaGVtYTogbmV3IGNvZGVnZW5fMS5OYW1lKFwic2NoZW1hXCIpLFxuICAgIHBhcmVudFNjaGVtYTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyZW50U2NoZW1hXCIpLFxufTtcbmZ1bmN0aW9uIGVycm9yT2JqZWN0Q29kZShjeHQsIGVycm9yLCBlcnJvclBhdGhzKSB7XG4gICAgY29uc3QgeyBjcmVhdGVFcnJvcnMgfSA9IGN4dC5pdDtcbiAgICBpZiAoY3JlYXRlRXJyb3JzID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYHt9YDtcbiAgICByZXR1cm4gZXJyb3JPYmplY3QoY3h0LCBlcnJvciwgZXJyb3JQYXRocyk7XG59XG5mdW5jdGlvbiBlcnJvck9iamVjdChjeHQsIGVycm9yLCBlcnJvclBhdGhzID0ge30pIHtcbiAgICBjb25zdCB7IGdlbiwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCBrZXlWYWx1ZXMgPSBbXG4gICAgICAgIGVycm9ySW5zdGFuY2VQYXRoKGl0LCBlcnJvclBhdGhzKSxcbiAgICAgICAgZXJyb3JTY2hlbWFQYXRoKGN4dCwgZXJyb3JQYXRocyksXG4gICAgXTtcbiAgICBleHRyYUVycm9yUHJvcHMoY3h0LCBlcnJvciwga2V5VmFsdWVzKTtcbiAgICByZXR1cm4gZ2VuLm9iamVjdCguLi5rZXlWYWx1ZXMpO1xufVxuZnVuY3Rpb24gZXJyb3JJbnN0YW5jZVBhdGgoeyBlcnJvclBhdGggfSwgeyBpbnN0YW5jZVBhdGggfSkge1xuICAgIGNvbnN0IGluc3RQYXRoID0gaW5zdGFuY2VQYXRoXG4gICAgICAgID8gKDAsIGNvZGVnZW5fMS5zdHIpIGAke2Vycm9yUGF0aH0keygwLCB1dGlsXzEuZ2V0RXJyb3JQYXRoKShpbnN0YW5jZVBhdGgsIHV0aWxfMS5UeXBlLlN0cil9YFxuICAgICAgICA6IGVycm9yUGF0aDtcbiAgICByZXR1cm4gW25hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsICgwLCBjb2RlZ2VuXzEuc3RyQ29uY2F0KShuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCBpbnN0UGF0aCldO1xufVxuZnVuY3Rpb24gZXJyb3JTY2hlbWFQYXRoKHsga2V5d29yZCwgaXQ6IHsgZXJyU2NoZW1hUGF0aCB9IH0sIHsgc2NoZW1hUGF0aCwgcGFyZW50U2NoZW1hIH0pIHtcbiAgICBsZXQgc2NoUGF0aCA9IHBhcmVudFNjaGVtYSA/IGVyclNjaGVtYVBhdGggOiAoMCwgY29kZWdlbl8xLnN0cikgYCR7ZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfWA7XG4gICAgaWYgKHNjaGVtYVBhdGgpIHtcbiAgICAgICAgc2NoUGF0aCA9ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtzY2hQYXRofSR7KDAsIHV0aWxfMS5nZXRFcnJvclBhdGgpKHNjaGVtYVBhdGgsIHV0aWxfMS5UeXBlLlN0cil9YDtcbiAgICB9XG4gICAgcmV0dXJuIFtFLnNjaGVtYVBhdGgsIHNjaFBhdGhdO1xufVxuZnVuY3Rpb24gZXh0cmFFcnJvclByb3BzKGN4dCwgeyBwYXJhbXMsIG1lc3NhZ2UgfSwga2V5VmFsdWVzKSB7XG4gICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFWYWx1ZSwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IG9wdHMsIHByb3BlcnR5TmFtZSwgdG9wU2NoZW1hUmVmLCBzY2hlbWFQYXRoIH0gPSBpdDtcbiAgICBrZXlWYWx1ZXMucHVzaChbRS5rZXl3b3JkLCBrZXl3b3JkXSwgW0UucGFyYW1zLCB0eXBlb2YgcGFyYW1zID09IFwiZnVuY3Rpb25cIiA/IHBhcmFtcyhjeHQpIDogcGFyYW1zIHx8ICgwLCBjb2RlZ2VuXzEuXykgYHt9YF0pO1xuICAgIGlmIChvcHRzLm1lc3NhZ2VzKSB7XG4gICAgICAgIGtleVZhbHVlcy5wdXNoKFtFLm1lc3NhZ2UsIHR5cGVvZiBtZXNzYWdlID09IFwiZnVuY3Rpb25cIiA/IG1lc3NhZ2UoY3h0KSA6IG1lc3NhZ2VdKTtcbiAgICB9XG4gICAgaWYgKG9wdHMudmVyYm9zZSkge1xuICAgICAgICBrZXlWYWx1ZXMucHVzaChbRS5zY2hlbWEsIHNjaGVtYVZhbHVlXSwgW0UucGFyZW50U2NoZW1hLCAoMCwgY29kZWdlbl8xLl8pIGAke3RvcFNjaGVtYVJlZn0ke3NjaGVtYVBhdGh9YF0sIFtuYW1lc18xLmRlZmF1bHQuZGF0YSwgZGF0YV0pO1xuICAgIH1cbiAgICBpZiAocHJvcGVydHlOYW1lKVxuICAgICAgICBrZXlWYWx1ZXMucHVzaChbRS5wcm9wZXJ0eU5hbWUsIHByb3BlcnR5TmFtZV0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXJyb3JzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJvb2xPckVtcHR5U2NoZW1hID0gZXhwb3J0cy50b3BCb29sT3JFbXB0eVNjaGVtYSA9IHZvaWQgMDtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi9uYW1lc1wiKTtcbmNvbnN0IGJvb2xFcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcImJvb2xlYW4gc2NoZW1hIGlzIGZhbHNlXCIsXG59O1xuZnVuY3Rpb24gdG9wQm9vbE9yRW1wdHlTY2hlbWEoaXQpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCB2YWxpZGF0ZU5hbWUgfSA9IGl0O1xuICAgIGlmIChzY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgIGZhbHNlU2NoZW1hRXJyb3IoaXQsIGZhbHNlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmIHNjaGVtYS4kYXN5bmMgPT09IHRydWUpIHtcbiAgICAgICAgZ2VuLnJldHVybihuYW1lc18xLmRlZmF1bHQuZGF0YSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBudWxsKTtcbiAgICAgICAgZ2VuLnJldHVybih0cnVlKTtcbiAgICB9XG59XG5leHBvcnRzLnRvcEJvb2xPckVtcHR5U2NoZW1hID0gdG9wQm9vbE9yRW1wdHlTY2hlbWE7XG5mdW5jdGlvbiBib29sT3JFbXB0eVNjaGVtYShpdCwgdmFsaWQpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICBnZW4udmFyKHZhbGlkLCBmYWxzZSk7IC8vIFRPRE8gdmFyXG4gICAgICAgIGZhbHNlU2NoZW1hRXJyb3IoaXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLnZhcih2YWxpZCwgdHJ1ZSk7IC8vIFRPRE8gdmFyXG4gICAgfVxufVxuZXhwb3J0cy5ib29sT3JFbXB0eVNjaGVtYSA9IGJvb2xPckVtcHR5U2NoZW1hO1xuZnVuY3Rpb24gZmFsc2VTY2hlbWFFcnJvcihpdCwgb3ZlcnJpZGVBbGxFcnJvcnMpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSB9ID0gaXQ7XG4gICAgLy8gVE9ETyBtYXliZSBzb21lIG90aGVyIGludGVyZmFjZSBzaG91bGQgYmUgdXNlZCBmb3Igbm9uLWtleXdvcmQgdmFsaWRhdGlvbiBlcnJvcnMuLi5cbiAgICBjb25zdCBjeHQgPSB7XG4gICAgICAgIGdlbixcbiAgICAgICAga2V5d29yZDogXCJmYWxzZSBzY2hlbWFcIixcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc2NoZW1hOiBmYWxzZSxcbiAgICAgICAgc2NoZW1hQ29kZTogZmFsc2UsXG4gICAgICAgIHNjaGVtYVZhbHVlOiBmYWxzZSxcbiAgICAgICAgcGFyYW1zOiB7fSxcbiAgICAgICAgaXQsXG4gICAgfTtcbiAgICAoMCwgZXJyb3JzXzEucmVwb3J0RXJyb3IpKGN4dCwgYm9vbEVycm9yLCB1bmRlZmluZWQsIG92ZXJyaWRlQWxsRXJyb3JzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvb2xTY2hlbWEuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UnVsZXMgPSBleHBvcnRzLmlzSlNPTlR5cGUgPSB2b2lkIDA7XG5jb25zdCBfanNvblR5cGVzID0gW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiaW50ZWdlclwiLCBcImJvb2xlYW5cIiwgXCJudWxsXCIsIFwib2JqZWN0XCIsIFwiYXJyYXlcIl07XG5jb25zdCBqc29uVHlwZXMgPSBuZXcgU2V0KF9qc29uVHlwZXMpO1xuZnVuY3Rpb24gaXNKU09OVHlwZSh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09IFwic3RyaW5nXCIgJiYganNvblR5cGVzLmhhcyh4KTtcbn1cbmV4cG9ydHMuaXNKU09OVHlwZSA9IGlzSlNPTlR5cGU7XG5mdW5jdGlvbiBnZXRSdWxlcygpIHtcbiAgICBjb25zdCBncm91cHMgPSB7XG4gICAgICAgIG51bWJlcjogeyB0eXBlOiBcIm51bWJlclwiLCBydWxlczogW10gfSxcbiAgICAgICAgc3RyaW5nOiB7IHR5cGU6IFwic3RyaW5nXCIsIHJ1bGVzOiBbXSB9LFxuICAgICAgICBhcnJheTogeyB0eXBlOiBcImFycmF5XCIsIHJ1bGVzOiBbXSB9LFxuICAgICAgICBvYmplY3Q6IHsgdHlwZTogXCJvYmplY3RcIiwgcnVsZXM6IFtdIH0sXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlczogeyAuLi5ncm91cHMsIGludGVnZXI6IHRydWUsIGJvb2xlYW46IHRydWUsIG51bGw6IHRydWUgfSxcbiAgICAgICAgcnVsZXM6IFt7IHJ1bGVzOiBbXSB9LCBncm91cHMubnVtYmVyLCBncm91cHMuc3RyaW5nLCBncm91cHMuYXJyYXksIGdyb3Vwcy5vYmplY3RdLFxuICAgICAgICBwb3N0OiB7IHJ1bGVzOiBbXSB9LFxuICAgICAgICBhbGw6IHt9LFxuICAgICAgICBrZXl3b3Jkczoge30sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0UnVsZXMgPSBnZXRSdWxlcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJ1bGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNob3VsZFVzZVJ1bGUgPSBleHBvcnRzLnNob3VsZFVzZUdyb3VwID0gZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0ZvclR5cGUgPSB2b2lkIDA7XG5mdW5jdGlvbiBzY2hlbWFIYXNSdWxlc0ZvclR5cGUoeyBzY2hlbWEsIHNlbGYgfSwgdHlwZSkge1xuICAgIGNvbnN0IGdyb3VwID0gc2VsZi5SVUxFUy50eXBlc1t0eXBlXTtcbiAgICByZXR1cm4gZ3JvdXAgJiYgZ3JvdXAgIT09IHRydWUgJiYgc2hvdWxkVXNlR3JvdXAoc2NoZW1hLCBncm91cCk7XG59XG5leHBvcnRzLnNjaGVtYUhhc1J1bGVzRm9yVHlwZSA9IHNjaGVtYUhhc1J1bGVzRm9yVHlwZTtcbmZ1bmN0aW9uIHNob3VsZFVzZUdyb3VwKHNjaGVtYSwgZ3JvdXApIHtcbiAgICByZXR1cm4gZ3JvdXAucnVsZXMuc29tZSgocnVsZSkgPT4gc2hvdWxkVXNlUnVsZShzY2hlbWEsIHJ1bGUpKTtcbn1cbmV4cG9ydHMuc2hvdWxkVXNlR3JvdXAgPSBzaG91bGRVc2VHcm91cDtcbmZ1bmN0aW9uIHNob3VsZFVzZVJ1bGUoc2NoZW1hLCBydWxlKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoc2NoZW1hW3J1bGUua2V5d29yZF0gIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAoKF9hID0gcnVsZS5kZWZpbml0aW9uLmltcGxlbWVudHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zb21lKChrd2QpID0+IHNjaGVtYVtrd2RdICE9PSB1bmRlZmluZWQpKSk7XG59XG5leHBvcnRzLnNob3VsZFVzZVJ1bGUgPSBzaG91bGRVc2VSdWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwbGljYWJpbGl0eS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXBvcnRUeXBlRXJyb3IgPSBleHBvcnRzLmNoZWNrRGF0YVR5cGVzID0gZXhwb3J0cy5jaGVja0RhdGFUeXBlID0gZXhwb3J0cy5jb2VyY2VBbmRDaGVja0RhdGFUeXBlID0gZXhwb3J0cy5nZXRKU09OVHlwZXMgPSBleHBvcnRzLmdldFNjaGVtYVR5cGVzID0gZXhwb3J0cy5EYXRhVHlwZSA9IHZvaWQgMDtcbmNvbnN0IHJ1bGVzXzEgPSByZXF1aXJlKFwiLi4vcnVsZXNcIik7XG5jb25zdCBhcHBsaWNhYmlsaXR5XzEgPSByZXF1aXJlKFwiLi9hcHBsaWNhYmlsaXR5XCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbnZhciBEYXRhVHlwZTtcbihmdW5jdGlvbiAoRGF0YVR5cGUpIHtcbiAgICBEYXRhVHlwZVtEYXRhVHlwZVtcIkNvcnJlY3RcIl0gPSAwXSA9IFwiQ29ycmVjdFwiO1xuICAgIERhdGFUeXBlW0RhdGFUeXBlW1wiV3JvbmdcIl0gPSAxXSA9IFwiV3JvbmdcIjtcbn0pKERhdGFUeXBlID0gZXhwb3J0cy5EYXRhVHlwZSB8fCAoZXhwb3J0cy5EYXRhVHlwZSA9IHt9KSk7XG5mdW5jdGlvbiBnZXRTY2hlbWFUeXBlcyhzY2hlbWEpIHtcbiAgICBjb25zdCB0eXBlcyA9IGdldEpTT05UeXBlcyhzY2hlbWEudHlwZSk7XG4gICAgY29uc3QgaGFzTnVsbCA9IHR5cGVzLmluY2x1ZGVzKFwibnVsbFwiKTtcbiAgICBpZiAoaGFzTnVsbCkge1xuICAgICAgICBpZiAoc2NoZW1hLm51bGxhYmxlID09PSBmYWxzZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInR5cGU6IG51bGwgY29udHJhZGljdHMgbnVsbGFibGU6IGZhbHNlXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKCF0eXBlcy5sZW5ndGggJiYgc2NoZW1hLm51bGxhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJudWxsYWJsZVwiIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgXCJ0eXBlXCInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NoZW1hLm51bGxhYmxlID09PSB0cnVlKVxuICAgICAgICAgICAgdHlwZXMucHVzaChcIm51bGxcIik7XG4gICAgfVxuICAgIHJldHVybiB0eXBlcztcbn1cbmV4cG9ydHMuZ2V0U2NoZW1hVHlwZXMgPSBnZXRTY2hlbWFUeXBlcztcbmZ1bmN0aW9uIGdldEpTT05UeXBlcyh0cykge1xuICAgIGNvbnN0IHR5cGVzID0gQXJyYXkuaXNBcnJheSh0cykgPyB0cyA6IHRzID8gW3RzXSA6IFtdO1xuICAgIGlmICh0eXBlcy5ldmVyeShydWxlc18xLmlzSlNPTlR5cGUpKVxuICAgICAgICByZXR1cm4gdHlwZXM7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZSBtdXN0IGJlIEpTT05UeXBlIG9yIEpTT05UeXBlW106IFwiICsgdHlwZXMuam9pbihcIixcIikpO1xufVxuZXhwb3J0cy5nZXRKU09OVHlwZXMgPSBnZXRKU09OVHlwZXM7XG5mdW5jdGlvbiBjb2VyY2VBbmRDaGVja0RhdGFUeXBlKGl0LCB0eXBlcykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBjb2VyY2VUbyA9IGNvZXJjZVRvVHlwZXModHlwZXMsIG9wdHMuY29lcmNlVHlwZXMpO1xuICAgIGNvbnN0IGNoZWNrVHlwZXMgPSB0eXBlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICEoY29lcmNlVG8ubGVuZ3RoID09PSAwICYmIHR5cGVzLmxlbmd0aCA9PT0gMSAmJiAoMCwgYXBwbGljYWJpbGl0eV8xLnNjaGVtYUhhc1J1bGVzRm9yVHlwZSkoaXQsIHR5cGVzWzBdKSk7XG4gICAgaWYgKGNoZWNrVHlwZXMpIHtcbiAgICAgICAgY29uc3Qgd3JvbmdUeXBlID0gY2hlY2tEYXRhVHlwZXModHlwZXMsIGRhdGEsIG9wdHMuc3RyaWN0TnVtYmVycywgRGF0YVR5cGUuV3JvbmcpO1xuICAgICAgICBnZW4uaWYod3JvbmdUeXBlLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29lcmNlVG8ubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGNvZXJjZURhdGEoaXQsIHR5cGVzLCBjb2VyY2VUbyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmVwb3J0VHlwZUVycm9yKGl0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja1R5cGVzO1xufVxuZXhwb3J0cy5jb2VyY2VBbmRDaGVja0RhdGFUeXBlID0gY29lcmNlQW5kQ2hlY2tEYXRhVHlwZTtcbmNvbnN0IENPRVJDSUJMRSA9IG5ldyBTZXQoW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiaW50ZWdlclwiLCBcImJvb2xlYW5cIiwgXCJudWxsXCJdKTtcbmZ1bmN0aW9uIGNvZXJjZVRvVHlwZXModHlwZXMsIGNvZXJjZVR5cGVzKSB7XG4gICAgcmV0dXJuIGNvZXJjZVR5cGVzXG4gICAgICAgID8gdHlwZXMuZmlsdGVyKCh0KSA9PiBDT0VSQ0lCTEUuaGFzKHQpIHx8IChjb2VyY2VUeXBlcyA9PT0gXCJhcnJheVwiICYmIHQgPT09IFwiYXJyYXlcIikpXG4gICAgICAgIDogW107XG59XG5mdW5jdGlvbiBjb2VyY2VEYXRhKGl0LCB0eXBlcywgY29lcmNlVG8pIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgb3B0cyB9ID0gaXQ7XG4gICAgY29uc3QgZGF0YVR5cGUgPSBnZW4ubGV0KFwiZGF0YVR5cGVcIiwgKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX1gKTtcbiAgICBjb25zdCBjb2VyY2VkID0gZ2VuLmxldChcImNvZXJjZWRcIiwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCk7XG4gICAgaWYgKG9wdHMuY29lcmNlVHlwZXMgPT09IFwiYXJyYXlcIikge1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheSgke2RhdGF9KSAmJiAke2RhdGF9Lmxlbmd0aCA9PSAxYCwgKCkgPT4gZ2VuXG4gICAgICAgICAgICAuYXNzaWduKGRhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX1bMF1gKVxuICAgICAgICAgICAgLmFzc2lnbihkYXRhVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX1gKVxuICAgICAgICAgICAgLmlmKGNoZWNrRGF0YVR5cGVzKHR5cGVzLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMpLCAoKSA9PiBnZW4uYXNzaWduKGNvZXJjZWQsIGRhdGEpKSk7XG4gICAgfVxuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvZXJjZWR9ICE9PSB1bmRlZmluZWRgKTtcbiAgICBmb3IgKGNvbnN0IHQgb2YgY29lcmNlVG8pIHtcbiAgICAgICAgaWYgKENPRVJDSUJMRS5oYXModCkgfHwgKHQgPT09IFwiYXJyYXlcIiAmJiBvcHRzLmNvZXJjZVR5cGVzID09PSBcImFycmF5XCIpKSB7XG4gICAgICAgICAgICBjb2VyY2VTcGVjaWZpY1R5cGUodCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2VuLmVsc2UoKTtcbiAgICByZXBvcnRUeXBlRXJyb3IoaXQpO1xuICAgIGdlbi5lbmRJZigpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvZXJjZWR9ICE9PSB1bmRlZmluZWRgLCAoKSA9PiB7XG4gICAgICAgIGdlbi5hc3NpZ24oZGF0YSwgY29lcmNlZCk7XG4gICAgICAgIGFzc2lnblBhcmVudERhdGEoaXQsIGNvZXJjZWQpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGNvZXJjZVNwZWNpZmljVHlwZSh0KSB7XG4gICAgICAgIHN3aXRjaCAodCkge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09IFwibnVtYmVyXCIgfHwgJHtkYXRhVHlwZX0gPT0gXCJib29sZWFuXCJgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFwiXCIgKyAke2RhdGF9YClcbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBudWxsYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxcbiAgICAgICAgICAgICAgfHwgKCR7ZGF0YVR5cGV9ID09IFwic3RyaW5nXCIgJiYgJHtkYXRhfSAmJiAke2RhdGF9ID09ICske2RhdGF9KWApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgKyR7ZGF0YX1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09PSBcImJvb2xlYW5cIiB8fCAke2RhdGF9ID09PSBudWxsXG4gICAgICAgICAgICAgIHx8ICgke2RhdGFUeXBlfSA9PT0gXCJzdHJpbmdcIiAmJiAke2RhdGF9ICYmICR7ZGF0YX0gPT0gKyR7ZGF0YX0gJiYgISgke2RhdGF9ICUgMSkpYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGArJHtkYXRhfWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJmYWxzZVwiIHx8ICR7ZGF0YX0gPT09IDAgfHwgJHtkYXRhfSA9PT0gbnVsbGApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJ0cnVlXCIgfHwgJHtkYXRhfSA9PT0gMWApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICBnZW4uZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IFwiXCIgfHwgJHtkYXRhfSA9PT0gMCB8fCAke2RhdGF9ID09PSBmYWxzZWApO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oY29lcmNlZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT09IFwic3RyaW5nXCIgfHwgJHtkYXRhVHlwZX0gPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgfHwgJHtkYXRhVHlwZX0gPT09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFske2RhdGF9XWApO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzaWduUGFyZW50RGF0YSh7IGdlbiwgcGFyZW50RGF0YSwgcGFyZW50RGF0YVByb3BlcnR5IH0sIGV4cHIpIHtcbiAgICAvLyBUT0RPIHVzZSBnZW4ucHJvcGVydHlcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtwYXJlbnREYXRhfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3BhcmVudERhdGF9WyR7cGFyZW50RGF0YVByb3BlcnR5fV1gLCBleHByKSk7XG59XG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlLCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0ID0gRGF0YVR5cGUuQ29ycmVjdCkge1xuICAgIGNvbnN0IEVRID0gY29ycmVjdCA9PT0gRGF0YVR5cGUuQ29ycmVjdCA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuRVEgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLk5FUTtcbiAgICBsZXQgY29uZDtcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSAke0VRfSBudWxsYDtcbiAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgQXJyYXkuaXNBcnJheSgke2RhdGF9KWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gJiYgdHlwZW9mICR7ZGF0YX0gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSgke2RhdGF9KWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgICAgICAgIGNvbmQgPSBudW1Db25kKCgwLCBjb2RlZ2VuXzEuXykgYCEoJHtkYXRhfSAlIDEpICYmICFpc05hTigke2RhdGF9KWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIGNvbmQgPSBudW1Db25kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfSAke0VRfSAke2RhdGFUeXBlfWA7XG4gICAgfVxuICAgIHJldHVybiBjb3JyZWN0ID09PSBEYXRhVHlwZS5Db3JyZWN0ID8gY29uZCA6ICgwLCBjb2RlZ2VuXzEubm90KShjb25kKTtcbiAgICBmdW5jdGlvbiBudW1Db25kKF9jb25kID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5hbmQpKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9ID09IFwibnVtYmVyXCJgLCBfY29uZCwgc3RyaWN0TnVtcyA/ICgwLCBjb2RlZ2VuXzEuXykgYGlzRmluaXRlKCR7ZGF0YX0pYCA6IGNvZGVnZW5fMS5uaWwpO1xuICAgIH1cbn1cbmV4cG9ydHMuY2hlY2tEYXRhVHlwZSA9IGNoZWNrRGF0YVR5cGU7XG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlcyhkYXRhVHlwZXMsIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpIHtcbiAgICBpZiAoZGF0YVR5cGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gY2hlY2tEYXRhVHlwZShkYXRhVHlwZXNbMF0sIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpO1xuICAgIH1cbiAgICBsZXQgY29uZDtcbiAgICBjb25zdCB0eXBlcyA9ICgwLCB1dGlsXzEudG9IYXNoKShkYXRhVHlwZXMpO1xuICAgIGlmICh0eXBlcy5hcnJheSAmJiB0eXBlcy5vYmplY3QpIHtcbiAgICAgICAgY29uc3Qgbm90T2JqID0gKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX0gIT0gXCJvYmplY3RcImA7XG4gICAgICAgIGNvbmQgPSB0eXBlcy5udWxsID8gbm90T2JqIDogKDAsIGNvZGVnZW5fMS5fKSBgISR7ZGF0YX0gfHwgJHtub3RPYmp9YDtcbiAgICAgICAgZGVsZXRlIHR5cGVzLm51bGw7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5hcnJheTtcbiAgICAgICAgZGVsZXRlIHR5cGVzLm9iamVjdDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbmQgPSBjb2RlZ2VuXzEubmlsO1xuICAgIH1cbiAgICBpZiAodHlwZXMubnVtYmVyKVxuICAgICAgICBkZWxldGUgdHlwZXMuaW50ZWdlcjtcbiAgICBmb3IgKGNvbnN0IHQgaW4gdHlwZXMpXG4gICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLmFuZCkoY29uZCwgY2hlY2tEYXRhVHlwZSh0LCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0KSk7XG4gICAgcmV0dXJuIGNvbmQ7XG59XG5leHBvcnRzLmNoZWNrRGF0YVR5cGVzID0gY2hlY2tEYXRhVHlwZXM7XG5jb25zdCB0eXBlRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgc2NoZW1hIH0pID0+IGBtdXN0IGJlICR7c2NoZW1hfWAsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWEsIHNjaGVtYVZhbHVlIH0pID0+IHR5cGVvZiBzY2hlbWEgPT0gXCJzdHJpbmdcIiA/ICgwLCBjb2RlZ2VuXzEuXykgYHt0eXBlOiAke3NjaGVtYX19YCA6ICgwLCBjb2RlZ2VuXzEuXykgYHt0eXBlOiAke3NjaGVtYVZhbHVlfX1gLFxufTtcbmZ1bmN0aW9uIHJlcG9ydFR5cGVFcnJvcihpdCkge1xuICAgIGNvbnN0IGN4dCA9IGdldFR5cGVFcnJvckNvbnRleHQoaXQpO1xuICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikoY3h0LCB0eXBlRXJyb3IpO1xufVxuZXhwb3J0cy5yZXBvcnRUeXBlRXJyb3IgPSByZXBvcnRUeXBlRXJyb3I7XG5mdW5jdGlvbiBnZXRUeXBlRXJyb3JDb250ZXh0KGl0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYSB9ID0gaXQ7XG4gICAgY29uc3Qgc2NoZW1hQ29kZSA9ICgwLCB1dGlsXzEuc2NoZW1hUmVmT3JWYWwpKGl0LCBzY2hlbWEsIFwidHlwZVwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZW4sXG4gICAgICAgIGtleXdvcmQ6IFwidHlwZVwiLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzY2hlbWE6IHNjaGVtYS50eXBlLFxuICAgICAgICBzY2hlbWFDb2RlLFxuICAgICAgICBzY2hlbWFWYWx1ZTogc2NoZW1hQ29kZSxcbiAgICAgICAgcGFyZW50U2NoZW1hOiBzY2hlbWEsXG4gICAgICAgIHBhcmFtczoge30sXG4gICAgICAgIGl0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhVHlwZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hc3NpZ25EZWZhdWx0cyA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5mdW5jdGlvbiBhc3NpZ25EZWZhdWx0cyhpdCwgdHkpIHtcbiAgICBjb25zdCB7IHByb3BlcnRpZXMsIGl0ZW1zIH0gPSBpdC5zY2hlbWE7XG4gICAgaWYgKHR5ID09PSBcIm9iamVjdFwiICYmIHByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgYXNzaWduRGVmYXVsdChpdCwga2V5LCBwcm9wZXJ0aWVzW2tleV0uZGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHkgPT09IFwiYXJyYXlcIiAmJiBBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICBpdGVtcy5mb3JFYWNoKChzY2gsIGkpID0+IGFzc2lnbkRlZmF1bHQoaXQsIGksIHNjaC5kZWZhdWx0KSk7XG4gICAgfVxufVxuZXhwb3J0cy5hc3NpZ25EZWZhdWx0cyA9IGFzc2lnbkRlZmF1bHRzO1xuZnVuY3Rpb24gYXNzaWduRGVmYXVsdChpdCwgcHJvcCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgeyBnZW4sIGNvbXBvc2l0ZVJ1bGUsIGRhdGEsIG9wdHMgfSA9IGl0O1xuICAgIGlmIChkZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGNoaWxkRGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3ApfWA7XG4gICAgaWYgKGNvbXBvc2l0ZVJ1bGUpIHtcbiAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgZGVmYXVsdCBpcyBpZ25vcmVkIGZvcjogJHtjaGlsZERhdGF9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGNvbmRpdGlvbiA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y2hpbGREYXRhfSA9PT0gdW5kZWZpbmVkYDtcbiAgICBpZiAob3B0cy51c2VEZWZhdWx0cyA9PT0gXCJlbXB0eVwiKSB7XG4gICAgICAgIGNvbmRpdGlvbiA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y29uZGl0aW9ufSB8fCAke2NoaWxkRGF0YX0gPT09IG51bGwgfHwgJHtjaGlsZERhdGF9ID09PSBcIlwiYDtcbiAgICB9XG4gICAgLy8gYCR7Y2hpbGREYXRhfSA9PT0gdW5kZWZpbmVkYCArXG4gICAgLy8gKG9wdHMudXNlRGVmYXVsdHMgPT09IFwiZW1wdHlcIiA/IGAgfHwgJHtjaGlsZERhdGF9ID09PSBudWxsIHx8ICR7Y2hpbGREYXRhfSA9PT0gXCJcImAgOiBcIlwiKVxuICAgIGdlbi5pZihjb25kaXRpb24sICgwLCBjb2RlZ2VuXzEuXykgYCR7Y2hpbGREYXRhfSA9ICR7KDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKGRlZmF1bHRWYWx1ZSl9YCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVVuaW9uID0gZXhwb3J0cy52YWxpZGF0ZUFycmF5ID0gZXhwb3J0cy51c2VQYXR0ZXJuID0gZXhwb3J0cy5jYWxsVmFsaWRhdGVDb2RlID0gZXhwb3J0cy5zY2hlbWFQcm9wZXJ0aWVzID0gZXhwb3J0cy5hbGxTY2hlbWFQcm9wZXJ0aWVzID0gZXhwb3J0cy5ub1Byb3BlcnR5SW5EYXRhID0gZXhwb3J0cy5wcm9wZXJ0eUluRGF0YSA9IGV4cG9ydHMuaXNPd25Qcm9wZXJ0eSA9IGV4cG9ydHMuaGFzUHJvcEZ1bmMgPSBleHBvcnRzLnJlcG9ydE1pc3NpbmdQcm9wID0gZXhwb3J0cy5jaGVja01pc3NpbmdQcm9wID0gZXhwb3J0cy5jaGVja1JlcG9ydE1pc3NpbmdQcm9wID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCB1dGlsXzIgPSByZXF1aXJlKFwiLi4vY29tcGlsZS91dGlsXCIpO1xuZnVuY3Rpb24gY2hlY2tSZXBvcnRNaXNzaW5nUHJvcChjeHQsIHByb3ApIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBnZW4uaWYobm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcyksICgpID0+IHtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogKDAsIGNvZGVnZW5fMS5fKSBgJHtwcm9wfWAgfSwgdHJ1ZSk7XG4gICAgICAgIGN4dC5lcnJvcigpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jaGVja1JlcG9ydE1pc3NpbmdQcm9wID0gY2hlY2tSZXBvcnRNaXNzaW5nUHJvcDtcbmZ1bmN0aW9uIGNoZWNrTWlzc2luZ1Byb3AoeyBnZW4sIGRhdGEsIGl0OiB7IG9wdHMgfSB9LCBwcm9wZXJ0aWVzLCBtaXNzaW5nKSB7XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEub3IpKC4uLnByb3BlcnRpZXMubWFwKChwcm9wKSA9PiAoMCwgY29kZWdlbl8xLmFuZCkobm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3AsIG9wdHMub3duUHJvcGVydGllcyksICgwLCBjb2RlZ2VuXzEuXykgYCR7bWlzc2luZ30gPSAke3Byb3B9YCkpKTtcbn1cbmV4cG9ydHMuY2hlY2tNaXNzaW5nUHJvcCA9IGNoZWNrTWlzc2luZ1Byb3A7XG5mdW5jdGlvbiByZXBvcnRNaXNzaW5nUHJvcChjeHQsIG1pc3NpbmcpIHtcbiAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBtaXNzaW5nIH0sIHRydWUpO1xuICAgIGN4dC5lcnJvcigpO1xufVxuZXhwb3J0cy5yZXBvcnRNaXNzaW5nUHJvcCA9IHJlcG9ydE1pc3NpbmdQcm9wO1xuZnVuY3Rpb24gaGFzUHJvcEZ1bmMoZ2VuKSB7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwiZnVuY1wiLCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgcmVmOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgICAgICBjb2RlOiAoMCwgY29kZWdlbl8xLl8pIGBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5YCxcbiAgICB9KTtcbn1cbmV4cG9ydHMuaGFzUHJvcEZ1bmMgPSBoYXNQcm9wRnVuYztcbmZ1bmN0aW9uIGlzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2hhc1Byb3BGdW5jKGdlbil9LmNhbGwoJHtkYXRhfSwgJHtwcm9wZXJ0eX0pYDtcbn1cbmV4cG9ydHMuaXNPd25Qcm9wZXJ0eSA9IGlzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBwcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3BlcnR5LCBvd25Qcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3BlcnR5KX0gIT09IHVuZGVmaW5lZGA7XG4gICAgcmV0dXJuIG93blByb3BlcnRpZXMgPyAoMCwgY29kZWdlbl8xLl8pIGAke2NvbmR9ICYmICR7aXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KX1gIDogY29uZDtcbn1cbmV4cG9ydHMucHJvcGVydHlJbkRhdGEgPSBwcm9wZXJ0eUluRGF0YTtcbmZ1bmN0aW9uIG5vUHJvcGVydHlJbkRhdGEoZ2VuLCBkYXRhLCBwcm9wZXJ0eSwgb3duUHJvcGVydGllcykge1xuICAgIGNvbnN0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwcm9wZXJ0eSl9ID09PSB1bmRlZmluZWRgO1xuICAgIHJldHVybiBvd25Qcm9wZXJ0aWVzID8gKDAsIGNvZGVnZW5fMS5vcikoY29uZCwgKDAsIGNvZGVnZW5fMS5ub3QpKGlzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSkpKSA6IGNvbmQ7XG59XG5leHBvcnRzLm5vUHJvcGVydHlJbkRhdGEgPSBub1Byb3BlcnR5SW5EYXRhO1xuZnVuY3Rpb24gYWxsU2NoZW1hUHJvcGVydGllcyhzY2hlbWFNYXApIHtcbiAgICByZXR1cm4gc2NoZW1hTWFwID8gT2JqZWN0LmtleXMoc2NoZW1hTWFwKS5maWx0ZXIoKHApID0+IHAgIT09IFwiX19wcm90b19fXCIpIDogW107XG59XG5leHBvcnRzLmFsbFNjaGVtYVByb3BlcnRpZXMgPSBhbGxTY2hlbWFQcm9wZXJ0aWVzO1xuZnVuY3Rpb24gc2NoZW1hUHJvcGVydGllcyhpdCwgc2NoZW1hTWFwKSB7XG4gICAgcmV0dXJuIGFsbFNjaGVtYVByb3BlcnRpZXMoc2NoZW1hTWFwKS5maWx0ZXIoKHApID0+ICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hTWFwW3BdKSk7XG59XG5leHBvcnRzLnNjaGVtYVByb3BlcnRpZXMgPSBzY2hlbWFQcm9wZXJ0aWVzO1xuZnVuY3Rpb24gY2FsbFZhbGlkYXRlQ29kZSh7IHNjaGVtYUNvZGUsIGRhdGEsIGl0OiB7IGdlbiwgdG9wU2NoZW1hUmVmLCBzY2hlbWFQYXRoLCBlcnJvclBhdGggfSwgaXQgfSwgZnVuYywgY29udGV4dCwgcGFzc1NjaGVtYSkge1xuICAgIGNvbnN0IGRhdGFBbmRTY2hlbWEgPSBwYXNzU2NoZW1hID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSwgJHtkYXRhfSwgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofWAgOiBkYXRhO1xuICAgIGNvbnN0IHZhbEN4dCA9IFtcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsICgwLCBjb2RlZ2VuXzEuc3RyQ29uY2F0KShuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCBlcnJvclBhdGgpXSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLCBpdC5wYXJlbnREYXRhXSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksIGl0LnBhcmVudERhdGFQcm9wZXJ0eV0sXG4gICAgICAgIFtuYW1lc18xLmRlZmF1bHQucm9vdERhdGEsIG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YV0sXG4gICAgXTtcbiAgICBpZiAoaXQub3B0cy5keW5hbWljUmVmKVxuICAgICAgICB2YWxDeHQucHVzaChbbmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCBuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnNdKTtcbiAgICBjb25zdCBhcmdzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhQW5kU2NoZW1hfSwgJHtnZW4ub2JqZWN0KC4uLnZhbEN4dCl9YDtcbiAgICByZXR1cm4gY29udGV4dCAhPT0gY29kZWdlbl8xLm5pbCA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZnVuY30uY2FsbCgke2NvbnRleHR9LCAke2FyZ3N9KWAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2Z1bmN9KCR7YXJnc30pYDtcbn1cbmV4cG9ydHMuY2FsbFZhbGlkYXRlQ29kZSA9IGNhbGxWYWxpZGF0ZUNvZGU7XG5jb25zdCBuZXdSZWdFeHAgPSAoMCwgY29kZWdlbl8xLl8pIGBuZXcgUmVnRXhwYDtcbmZ1bmN0aW9uIHVzZVBhdHRlcm4oeyBnZW4sIGl0OiB7IG9wdHMgfSB9LCBwYXR0ZXJuKSB7XG4gICAgY29uc3QgdSA9IG9wdHMudW5pY29kZVJlZ0V4cCA/IFwidVwiIDogXCJcIjtcbiAgICBjb25zdCB7IHJlZ0V4cCB9ID0gb3B0cy5jb2RlO1xuICAgIGNvbnN0IHJ4ID0gcmVnRXhwKHBhdHRlcm4sIHUpO1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcInBhdHRlcm5cIiwge1xuICAgICAgICBrZXk6IHJ4LnRvU3RyaW5nKCksXG4gICAgICAgIHJlZjogcngsXG4gICAgICAgIGNvZGU6ICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVnRXhwLmNvZGUgPT09IFwibmV3IFJlZ0V4cFwiID8gbmV3UmVnRXhwIDogKDAsIHV0aWxfMi51c2VGdW5jKShnZW4sIHJlZ0V4cCl9KCR7cGF0dGVybn0sICR7dX0pYCxcbiAgICB9KTtcbn1cbmV4cG9ydHMudXNlUGF0dGVybiA9IHVzZVBhdHRlcm47XG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5KGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBpZiAoaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkQXJyID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICB2YWxpZGF0ZUl0ZW1zKCgpID0+IGdlbi5hc3NpZ24odmFsaWRBcnIsIGZhbHNlKSk7XG4gICAgICAgIHJldHVybiB2YWxpZEFycjtcbiAgICB9XG4gICAgZ2VuLnZhcih2YWxpZCwgdHJ1ZSk7XG4gICAgdmFsaWRhdGVJdGVtcygoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgcmV0dXJuIHZhbGlkO1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXMobm90VmFsaWQpIHtcbiAgICAgICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgMCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZCxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDogaSxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCBub3RWYWxpZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVBcnJheSA9IHZhbGlkYXRlQXJyYXk7XG5mdW5jdGlvbiB2YWxpZGF0ZVVuaW9uKGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICBjb25zdCBhbHdheXNWYWxpZCA9IHNjaGVtYS5zb21lKChzY2gpID0+ICgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2gpKTtcbiAgICBpZiAoYWx3YXlzVmFsaWQgJiYgIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICBnZW4uYmxvY2soKCkgPT4gc2NoZW1hLmZvckVhY2goKF9zY2gsIGkpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgc2NoZW1hUHJvcDogaSxcbiAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgIH0sIHNjaFZhbGlkKTtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZH0gfHwgJHtzY2hWYWxpZH1gKTtcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCBzY2hWYWxpZCk7XG4gICAgICAgIC8vIGNhbiBzaG9ydC1jaXJjdWl0IGlmIGB1bmV2YWx1YXRlZFByb3BlcnRpZXMvSXRlbXNgIG5vdCBzdXBwb3J0ZWQgKG9wdHMudW5ldmFsdWF0ZWQgIT09IHRydWUpXG4gICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIGFuZCBpdGVtcyB3ZXJlIGV2YWx1YXRlZCAoaXQucHJvcHMgPT09IHRydWUgJiYgaXQuaXRlbXMgPT09IHRydWUpXG4gICAgICAgIGlmICghbWVyZ2VkKVxuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCkpO1xuICAgIH0pKTtcbiAgICBjeHQucmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVVbmlvbiA9IHZhbGlkYXRlVW5pb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2RlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlS2V5d29yZFVzYWdlID0gZXhwb3J0cy52YWxpZFNjaGVtYVR5cGUgPSBleHBvcnRzLmZ1bmNLZXl3b3JkQ29kZSA9IGV4cG9ydHMubWFjcm9LZXl3b3JkQ29kZSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi9uYW1lc1wiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi8uLi92b2NhYnVsYXJpZXMvY29kZVwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIG1hY3JvS2V5d29yZENvZGUoY3h0LCBkZWYpIHtcbiAgICBjb25zdCB7IGdlbiwga2V5d29yZCwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgbWFjcm9TY2hlbWEgPSBkZWYubWFjcm8uY2FsbChpdC5zZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IHVzZUtleXdvcmQoZ2VuLCBrZXl3b3JkLCBtYWNyb1NjaGVtYSk7XG4gICAgaWYgKGl0Lm9wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKVxuICAgICAgICBpdC5zZWxmLnZhbGlkYXRlU2NoZW1hKG1hY3JvU2NoZW1hLCB0cnVlKTtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgIHNjaGVtYTogbWFjcm9TY2hlbWEsXG4gICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgIGVyclNjaGVtYVBhdGg6IGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gLFxuICAgICAgICB0b3BTY2hlbWFSZWY6IHNjaGVtYVJlZixcbiAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICB9LCB2YWxpZCk7XG4gICAgY3h0LnBhc3ModmFsaWQsICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG59XG5leHBvcnRzLm1hY3JvS2V5d29yZENvZGUgPSBtYWNyb0tleXdvcmRDb2RlO1xuZnVuY3Rpb24gZnVuY0tleXdvcmRDb2RlKGN4dCwgZGVmKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgZ2VuLCBrZXl3b3JkLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgJGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgY2hlY2tBc3luY0tleXdvcmQoaXQsIGRlZik7XG4gICAgY29uc3QgdmFsaWRhdGUgPSAhJGRhdGEgJiYgZGVmLmNvbXBpbGUgPyBkZWYuY29tcGlsZS5jYWxsKGl0LnNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCkgOiBkZWYudmFsaWRhdGU7XG4gICAgY29uc3QgdmFsaWRhdGVSZWYgPSB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgdmFsaWRhdGUpO1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCB2YWxpZGF0ZUtleXdvcmQpO1xuICAgIGN4dC5vaygoX2EgPSBkZWYudmFsaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbGlkKTtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUtleXdvcmQoKSB7XG4gICAgICAgIGlmIChkZWYuZXJyb3JzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYXNzaWduVmFsaWQoKTtcbiAgICAgICAgICAgIGlmIChkZWYubW9kaWZ5aW5nKVxuICAgICAgICAgICAgICAgIG1vZGlmeURhdGEoY3h0KTtcbiAgICAgICAgICAgIHJlcG9ydEVycnMoKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcnVsZUVycnMgPSBkZWYuYXN5bmMgPyB2YWxpZGF0ZUFzeW5jKCkgOiB2YWxpZGF0ZVN5bmMoKTtcbiAgICAgICAgICAgIGlmIChkZWYubW9kaWZ5aW5nKVxuICAgICAgICAgICAgICAgIG1vZGlmeURhdGEoY3h0KTtcbiAgICAgICAgICAgIHJlcG9ydEVycnMoKCkgPT4gYWRkRXJycyhjeHQsIHJ1bGVFcnJzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVBc3luYygpIHtcbiAgICAgICAgY29uc3QgcnVsZUVycnMgPSBnZW4ubGV0KFwicnVsZUVycnNcIiwgbnVsbCk7XG4gICAgICAgIGdlbi50cnkoKCkgPT4gYXNzaWduVmFsaWQoKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgYCksIChlKSA9PiBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkuaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlfSBpbnN0YW5jZW9mICR7aXQuVmFsaWRhdGlvbkVycm9yfWAsICgpID0+IGdlbi5hc3NpZ24ocnVsZUVycnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZX0uZXJyb3JzYCksICgpID0+IGdlbi50aHJvdyhlKSkpO1xuICAgICAgICByZXR1cm4gcnVsZUVycnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3luYygpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVFcnJzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZVJlZn0uZXJyb3JzYDtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZGF0ZUVycnMsIG51bGwpO1xuICAgICAgICBhc3NpZ25WYWxpZChjb2RlZ2VuXzEubmlsKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRXJycztcbiAgICB9XG4gICAgZnVuY3Rpb24gYXNzaWduVmFsaWQoX2F3YWl0ID0gZGVmLmFzeW5jID8gKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgYCA6IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgY29uc3QgcGFzc0N4dCA9IGl0Lm9wdHMucGFzc0NvbnRleHQgPyBuYW1lc18xLmRlZmF1bHQudGhpcyA6IG5hbWVzXzEuZGVmYXVsdC5zZWxmO1xuICAgICAgICBjb25zdCBwYXNzU2NoZW1hID0gISgoXCJjb21waWxlXCIgaW4gZGVmICYmICEkZGF0YSkgfHwgZGVmLnNjaGVtYSA9PT0gZmFsc2UpO1xuICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke19hd2FpdH0keygwLCBjb2RlXzEuY2FsbFZhbGlkYXRlQ29kZSkoY3h0LCB2YWxpZGF0ZVJlZiwgcGFzc0N4dCwgcGFzc1NjaGVtYSl9YCwgZGVmLm1vZGlmeWluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcG9ydEVycnMoZXJyb3JzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSgoX2EgPSBkZWYudmFsaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbGlkKSwgZXJyb3JzKTtcbiAgICB9XG59XG5leHBvcnRzLmZ1bmNLZXl3b3JkQ29kZSA9IGZ1bmNLZXl3b3JkQ29kZTtcbmZ1bmN0aW9uIG1vZGlmeURhdGEoY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgZ2VuLmlmKGl0LnBhcmVudERhdGEsICgpID0+IGdlbi5hc3NpZ24oZGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5wYXJlbnREYXRhfVske2l0LnBhcmVudERhdGFQcm9wZXJ0eX1dYCkpO1xufVxuZnVuY3Rpb24gYWRkRXJycyhjeHQsIGVycnMpIHtcbiAgICBjb25zdCB7IGdlbiB9ID0gY3h0O1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGBBcnJheS5pc0FycmF5KCR7ZXJyc30pYCwgKCkgPT4ge1xuICAgICAgICBnZW5cbiAgICAgICAgICAgIC5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHtlcnJzfSA6ICR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LmNvbmNhdCgke2VycnN9KWApXG4gICAgICAgICAgICAuYXNzaWduKG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApO1xuICAgICAgICAoMCwgZXJyb3JzXzEuZXh0ZW5kRXJyb3JzKShjeHQpO1xuICAgIH0sICgpID0+IGN4dC5lcnJvcigpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrQXN5bmNLZXl3b3JkKHsgc2NoZW1hRW52IH0sIGRlZikge1xuICAgIGlmIChkZWYuYXN5bmMgJiYgIXNjaGVtYUVudi4kYXN5bmMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIGtleXdvcmQgaW4gc3luYyBzY2hlbWFcIik7XG59XG5mdW5jdGlvbiB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgcmVzdWx0KSB7XG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleXdvcmQgXCIke2tleXdvcmR9XCIgZmFpbGVkIHRvIGNvbXBpbGVgKTtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJrZXl3b3JkXCIsIHR5cGVvZiByZXN1bHQgPT0gXCJmdW5jdGlvblwiID8geyByZWY6IHJlc3VsdCB9IDogeyByZWY6IHJlc3VsdCwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHJlc3VsdCkgfSk7XG59XG5mdW5jdGlvbiB2YWxpZFNjaGVtYVR5cGUoc2NoZW1hLCBzY2hlbWFUeXBlLCBhbGxvd1VuZGVmaW5lZCA9IGZhbHNlKSB7XG4gICAgLy8gVE9ETyBhZGQgdGVzdHNcbiAgICByZXR1cm4gKCFzY2hlbWFUeXBlLmxlbmd0aCB8fFxuICAgICAgICBzY2hlbWFUeXBlLnNvbWUoKHN0KSA9PiBzdCA9PT0gXCJhcnJheVwiXG4gICAgICAgICAgICA/IEFycmF5LmlzQXJyYXkoc2NoZW1hKVxuICAgICAgICAgICAgOiBzdCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgID8gc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShzY2hlbWEpXG4gICAgICAgICAgICAgICAgOiB0eXBlb2Ygc2NoZW1hID09IHN0IHx8IChhbGxvd1VuZGVmaW5lZCAmJiB0eXBlb2Ygc2NoZW1hID09IFwidW5kZWZpbmVkXCIpKSk7XG59XG5leHBvcnRzLnZhbGlkU2NoZW1hVHlwZSA9IHZhbGlkU2NoZW1hVHlwZTtcbmZ1bmN0aW9uIHZhbGlkYXRlS2V5d29yZFVzYWdlKHsgc2NoZW1hLCBvcHRzLCBzZWxmLCBlcnJTY2hlbWFQYXRoIH0sIGRlZiwga2V5d29yZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZi5rZXl3b3JkKSA/ICFkZWYua2V5d29yZC5pbmNsdWRlcyhrZXl3b3JkKSA6IGRlZi5rZXl3b3JkICE9PSBrZXl3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICB9XG4gICAgY29uc3QgZGVwcyA9IGRlZi5kZXBlbmRlbmNpZXM7XG4gICAgaWYgKGRlcHMgPT09IG51bGwgfHwgZGVwcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVwcy5zb21lKChrd2QpID0+ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2NoZW1hLCBrd2QpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcmVudCBzY2hlbWEgbXVzdCBoYXZlIGRlcGVuZGVuY2llcyBvZiAke2tleXdvcmR9OiAke2RlcHMuam9pbihcIixcIil9YCk7XG4gICAgfVxuICAgIGlmIChkZWYudmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBkZWYudmFsaWRhdGVTY2hlbWEoc2NoZW1hW2tleXdvcmRdKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYGtleXdvcmQgXCIke2tleXdvcmR9XCIgdmFsdWUgaXMgaW52YWxpZCBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiOiBgICtcbiAgICAgICAgICAgICAgICBzZWxmLmVycm9yc1RleHQoZGVmLnZhbGlkYXRlU2NoZW1hLmVycm9ycyk7XG4gICAgICAgICAgICBpZiAob3B0cy52YWxpZGF0ZVNjaGVtYSA9PT0gXCJsb2dcIilcbiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihtc2cpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUtleXdvcmRVc2FnZSA9IHZhbGlkYXRlS2V5d29yZFVzYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9a2V5d29yZC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFNb2RlID0gZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFEYXRhID0gZXhwb3J0cy5nZXRTdWJzY2hlbWEgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuZnVuY3Rpb24gZ2V0U3Vic2NoZW1hKGl0LCB7IGtleXdvcmQsIHNjaGVtYVByb3AsIHNjaGVtYSwgc2NoZW1hUGF0aCwgZXJyU2NoZW1hUGF0aCwgdG9wU2NoZW1hUmVmIH0pIHtcbiAgICBpZiAoa2V5d29yZCAhPT0gdW5kZWZpbmVkICYmIHNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm90aCBcImtleXdvcmRcIiBhbmQgXCJzY2hlbWFcIiBwYXNzZWQsIG9ubHkgb25lIGFsbG93ZWQnKTtcbiAgICB9XG4gICAgaWYgKGtleXdvcmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2ggPSBpdC5zY2hlbWFba2V5d29yZF07XG4gICAgICAgIHJldHVybiBzY2hlbWFQcm9wID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuc2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfWAsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfWAsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaFtzY2hlbWFQcm9wXSxcbiAgICAgICAgICAgICAgICBzY2hlbWFQYXRoOiAoMCwgY29kZWdlbl8xLl8pIGAke2l0LnNjaGVtYVBhdGh9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShrZXl3b3JkKX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHNjaGVtYVByb3ApfWAsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfS8keygwLCB1dGlsXzEuZXNjYXBlRnJhZ21lbnQpKHNjaGVtYVByb3ApfWAsXG4gICAgICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoc2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCB8fCBlcnJTY2hlbWFQYXRoID09PSB1bmRlZmluZWQgfHwgdG9wU2NoZW1hUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJzY2hlbWFQYXRoXCIsIFwiZXJyU2NoZW1hUGF0aFwiIGFuZCBcInRvcFNjaGVtYVJlZlwiIGFyZSByZXF1aXJlZCB3aXRoIFwic2NoZW1hXCInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgc2NoZW1hUGF0aCxcbiAgICAgICAgICAgIHRvcFNjaGVtYVJlZixcbiAgICAgICAgICAgIGVyclNjaGVtYVBhdGgsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignZWl0aGVyIFwia2V5d29yZFwiIG9yIFwic2NoZW1hXCIgbXVzdCBiZSBwYXNzZWQnKTtcbn1cbmV4cG9ydHMuZ2V0U3Vic2NoZW1hID0gZ2V0U3Vic2NoZW1hO1xuZnVuY3Rpb24gZXh0ZW5kU3Vic2NoZW1hRGF0YShzdWJzY2hlbWEsIGl0LCB7IGRhdGFQcm9wLCBkYXRhUHJvcFR5cGU6IGRwVHlwZSwgZGF0YSwgZGF0YVR5cGVzLCBwcm9wZXJ0eU5hbWUgfSkge1xuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YVByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvdGggXCJkYXRhXCIgYW5kIFwiZGF0YVByb3BcIiBwYXNzZWQsIG9ubHkgb25lIGFsbG93ZWQnKTtcbiAgICB9XG4gICAgY29uc3QgeyBnZW4gfSA9IGl0O1xuICAgIGlmIChkYXRhUHJvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgZXJyb3JQYXRoLCBkYXRhUGF0aEFyciwgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gZ2VuLmxldChcImRhdGFcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5kYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoZGF0YVByb3ApfWAsIHRydWUpO1xuICAgICAgICBkYXRhQ29udGV4dFByb3BzKG5leHREYXRhKTtcbiAgICAgICAgc3Vic2NoZW1hLmVycm9yUGF0aCA9ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJvclBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoZGF0YVByb3AsIGRwVHlwZSwgb3B0cy5qc1Byb3BlcnR5U3ludGF4KX1gO1xuICAgICAgICBzdWJzY2hlbWEucGFyZW50RGF0YVByb3BlcnR5ID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhUHJvcH1gO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YVBhdGhBcnIgPSBbLi4uZGF0YVBhdGhBcnIsIHN1YnNjaGVtYS5wYXJlbnREYXRhUHJvcGVydHldO1xuICAgIH1cbiAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gZGF0YSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gZGF0YSA6IGdlbi5sZXQoXCJkYXRhXCIsIGRhdGEsIHRydWUpOyAvLyByZXBsYWNlYWJsZSBpZiB1c2VkIG9uY2U/XG4gICAgICAgIGRhdGFDb250ZXh0UHJvcHMobmV4dERhdGEpO1xuICAgICAgICBpZiAocHJvcGVydHlOYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzdWJzY2hlbWEucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICAgICAgICAvLyBUT0RPIHNvbWV0aGluZyBpcyBwb3NzaWJseSB3cm9uZyBoZXJlIHdpdGggbm90IGNoYW5naW5nIHBhcmVudERhdGFQcm9wZXJ0eSBhbmQgbm90IGFwcGVuZGluZyBkYXRhUGF0aEFyclxuICAgIH1cbiAgICBpZiAoZGF0YVR5cGVzKVxuICAgICAgICBzdWJzY2hlbWEuZGF0YVR5cGVzID0gZGF0YVR5cGVzO1xuICAgIGZ1bmN0aW9uIGRhdGFDb250ZXh0UHJvcHMoX25leHREYXRhKSB7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhID0gX25leHREYXRhO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YUxldmVsID0gaXQuZGF0YUxldmVsICsgMTtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFUeXBlcyA9IFtdO1xuICAgICAgICBpdC5kZWZpbmVkUHJvcGVydGllcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgc3Vic2NoZW1hLnBhcmVudERhdGEgPSBpdC5kYXRhO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YU5hbWVzID0gWy4uLml0LmRhdGFOYW1lcywgX25leHREYXRhXTtcbiAgICB9XG59XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYURhdGEgPSBleHRlbmRTdWJzY2hlbWFEYXRhO1xuZnVuY3Rpb24gZXh0ZW5kU3Vic2NoZW1hTW9kZShzdWJzY2hlbWEsIHsganRkRGlzY3JpbWluYXRvciwganRkTWV0YWRhdGEsIGNvbXBvc2l0ZVJ1bGUsIGNyZWF0ZUVycm9ycywgYWxsRXJyb3JzIH0pIHtcbiAgICBpZiAoY29tcG9zaXRlUnVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuY29tcG9zaXRlUnVsZSA9IGNvbXBvc2l0ZVJ1bGU7XG4gICAgaWYgKGNyZWF0ZUVycm9ycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuY3JlYXRlRXJyb3JzID0gY3JlYXRlRXJyb3JzO1xuICAgIGlmIChhbGxFcnJvcnMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgc3Vic2NoZW1hLmFsbEVycm9ycyA9IGFsbEVycm9ycztcbiAgICBzdWJzY2hlbWEuanRkRGlzY3JpbWluYXRvciA9IGp0ZERpc2NyaW1pbmF0b3I7IC8vIG5vdCBpbmhlcml0ZWRcbiAgICBzdWJzY2hlbWEuanRkTWV0YWRhdGEgPSBqdGRNZXRhZGF0YTsgLy8gbm90IGluaGVyaXRlZFxufVxuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFNb2RlID0gZXh0ZW5kU3Vic2NoZW1hTW9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YnNjaGVtYS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTY2hlbWFSZWZzID0gZXhwb3J0cy5yZXNvbHZlVXJsID0gZXhwb3J0cy5ub3JtYWxpemVJZCA9IGV4cG9ydHMuX2dldEZ1bGxQYXRoID0gZXhwb3J0cy5nZXRGdWxsUGF0aCA9IGV4cG9ydHMuaW5saW5lUmVmID0gdm9pZCAwO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IGVxdWFsID0gcmVxdWlyZShcImZhc3QtZGVlcC1lcXVhbFwiKTtcbmNvbnN0IHRyYXZlcnNlID0gcmVxdWlyZShcImpzb24tc2NoZW1hLXRyYXZlcnNlXCIpO1xuLy8gVE9ETyByZWZhY3RvciB0byB1c2Uga2V5d29yZCBkZWZpbml0aW9uc1xuY29uc3QgU0lNUExFX0lOTElORUQgPSBuZXcgU2V0KFtcbiAgICBcInR5cGVcIixcbiAgICBcImZvcm1hdFwiLFxuICAgIFwicGF0dGVyblwiLFxuICAgIFwibWF4TGVuZ3RoXCIsXG4gICAgXCJtaW5MZW5ndGhcIixcbiAgICBcIm1heFByb3BlcnRpZXNcIixcbiAgICBcIm1pblByb3BlcnRpZXNcIixcbiAgICBcIm1heEl0ZW1zXCIsXG4gICAgXCJtaW5JdGVtc1wiLFxuICAgIFwibWF4aW11bVwiLFxuICAgIFwibWluaW11bVwiLFxuICAgIFwidW5pcXVlSXRlbXNcIixcbiAgICBcIm11bHRpcGxlT2ZcIixcbiAgICBcInJlcXVpcmVkXCIsXG4gICAgXCJlbnVtXCIsXG4gICAgXCJjb25zdFwiLFxuXSk7XG5mdW5jdGlvbiBpbmxpbmVSZWYoc2NoZW1hLCBsaW1pdCA9IHRydWUpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKGxpbWl0ID09PSB0cnVlKVxuICAgICAgICByZXR1cm4gIWhhc1JlZihzY2hlbWEpO1xuICAgIGlmICghbGltaXQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gY291bnRLZXlzKHNjaGVtYSkgPD0gbGltaXQ7XG59XG5leHBvcnRzLmlubGluZVJlZiA9IGlubGluZVJlZjtcbmNvbnN0IFJFRl9LRVlXT1JEUyA9IG5ldyBTZXQoW1xuICAgIFwiJHJlZlwiLFxuICAgIFwiJHJlY3Vyc2l2ZVJlZlwiLFxuICAgIFwiJHJlY3Vyc2l2ZUFuY2hvclwiLFxuICAgIFwiJGR5bmFtaWNSZWZcIixcbiAgICBcIiRkeW5hbWljQW5jaG9yXCIsXG5dKTtcbmZ1bmN0aW9uIGhhc1JlZihzY2hlbWEpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKFJFRl9LRVlXT1JEUy5oYXMoa2V5KSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCBzY2ggPSBzY2hlbWFba2V5XTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoKSAmJiBzY2guc29tZShoYXNSZWYpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoID09IFwib2JqZWN0XCIgJiYgaGFzUmVmKHNjaCkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gY291bnRLZXlzKHNjaGVtYSkge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwiJHJlZlwiKVxuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBpZiAoU0lNUExFX0lOTElORUQuaGFzKGtleSkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFba2V5XSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmVhY2hJdGVtKShzY2hlbWFba2V5XSwgKHNjaCkgPT4gKGNvdW50ICs9IGNvdW50S2V5cyhzY2gpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50ID09PSBJbmZpbml0eSlcbiAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9XG4gICAgcmV0dXJuIGNvdW50O1xufVxuZnVuY3Rpb24gZ2V0RnVsbFBhdGgocmVzb2x2ZXIsIGlkID0gXCJcIiwgbm9ybWFsaXplKSB7XG4gICAgaWYgKG5vcm1hbGl6ZSAhPT0gZmFsc2UpXG4gICAgICAgIGlkID0gbm9ybWFsaXplSWQoaWQpO1xuICAgIGNvbnN0IHAgPSByZXNvbHZlci5wYXJzZShpZCk7XG4gICAgcmV0dXJuIF9nZXRGdWxsUGF0aChyZXNvbHZlciwgcCk7XG59XG5leHBvcnRzLmdldEZ1bGxQYXRoID0gZ2V0RnVsbFBhdGg7XG5mdW5jdGlvbiBfZ2V0RnVsbFBhdGgocmVzb2x2ZXIsIHApIHtcbiAgICBjb25zdCBzZXJpYWxpemVkID0gcmVzb2x2ZXIuc2VyaWFsaXplKHApO1xuICAgIHJldHVybiBzZXJpYWxpemVkLnNwbGl0KFwiI1wiKVswXSArIFwiI1wiO1xufVxuZXhwb3J0cy5fZ2V0RnVsbFBhdGggPSBfZ2V0RnVsbFBhdGg7XG5jb25zdCBUUkFJTElOR19TTEFTSF9IQVNIID0gLyNcXC8/JC87XG5mdW5jdGlvbiBub3JtYWxpemVJZChpZCkge1xuICAgIHJldHVybiBpZCA/IGlkLnJlcGxhY2UoVFJBSUxJTkdfU0xBU0hfSEFTSCwgXCJcIikgOiBcIlwiO1xufVxuZXhwb3J0cy5ub3JtYWxpemVJZCA9IG5vcm1hbGl6ZUlkO1xuZnVuY3Rpb24gcmVzb2x2ZVVybChyZXNvbHZlciwgYmFzZUlkLCBpZCkge1xuICAgIGlkID0gbm9ybWFsaXplSWQoaWQpO1xuICAgIHJldHVybiByZXNvbHZlci5yZXNvbHZlKGJhc2VJZCwgaWQpO1xufVxuZXhwb3J0cy5yZXNvbHZlVXJsID0gcmVzb2x2ZVVybDtcbmNvbnN0IEFOQ0hPUiA9IC9eW2Etel9dWy1hLXowLTkuX10qJC9pO1xuZnVuY3Rpb24gZ2V0U2NoZW1hUmVmcyhzY2hlbWEsIGJhc2VJZCkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4ge307XG4gICAgY29uc3QgeyBzY2hlbWFJZCwgdXJpUmVzb2x2ZXIgfSA9IHRoaXMub3B0cztcbiAgICBjb25zdCBzY2hJZCA9IG5vcm1hbGl6ZUlkKHNjaGVtYVtzY2hlbWFJZF0gfHwgYmFzZUlkKTtcbiAgICBjb25zdCBiYXNlSWRzID0geyBcIlwiOiBzY2hJZCB9O1xuICAgIGNvbnN0IHBhdGhQcmVmaXggPSBnZXRGdWxsUGF0aCh1cmlSZXNvbHZlciwgc2NoSWQsIGZhbHNlKTtcbiAgICBjb25zdCBsb2NhbFJlZnMgPSB7fTtcbiAgICBjb25zdCBzY2hlbWFSZWZzID0gbmV3IFNldCgpO1xuICAgIHRyYXZlcnNlKHNjaGVtYSwgeyBhbGxLZXlzOiB0cnVlIH0sIChzY2gsIGpzb25QdHIsIF8sIHBhcmVudEpzb25QdHIpID0+IHtcbiAgICAgICAgaWYgKHBhcmVudEpzb25QdHIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoUHJlZml4ICsganNvblB0cjtcbiAgICAgICAgbGV0IGJhc2VJZCA9IGJhc2VJZHNbcGFyZW50SnNvblB0cl07XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoW3NjaGVtYUlkXSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgYmFzZUlkID0gYWRkUmVmLmNhbGwodGhpcywgc2NoW3NjaGVtYUlkXSk7XG4gICAgICAgIGFkZEFuY2hvci5jYWxsKHRoaXMsIHNjaC4kYW5jaG9yKTtcbiAgICAgICAgYWRkQW5jaG9yLmNhbGwodGhpcywgc2NoLiRkeW5hbWljQW5jaG9yKTtcbiAgICAgICAgYmFzZUlkc1tqc29uUHRyXSA9IGJhc2VJZDtcbiAgICAgICAgZnVuY3Rpb24gYWRkUmVmKHJlZikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgICAgICAgY29uc3QgX3Jlc29sdmUgPSB0aGlzLm9wdHMudXJpUmVzb2x2ZXIucmVzb2x2ZTtcbiAgICAgICAgICAgIHJlZiA9IG5vcm1hbGl6ZUlkKGJhc2VJZCA/IF9yZXNvbHZlKGJhc2VJZCwgcmVmKSA6IHJlZik7XG4gICAgICAgICAgICBpZiAoc2NoZW1hUmVmcy5oYXMocmVmKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBhbWJpZ3VvcyhyZWYpO1xuICAgICAgICAgICAgc2NoZW1hUmVmcy5hZGQocmVmKTtcbiAgICAgICAgICAgIGxldCBzY2hPclJlZiA9IHRoaXMucmVmc1tyZWZdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hPclJlZiA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIHNjaE9yUmVmID0gdGhpcy5yZWZzW3NjaE9yUmVmXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoT3JSZWYgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGNoZWNrQW1iaWd1b3NSZWYoc2NoLCBzY2hPclJlZi5zY2hlbWEsIHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZWYgIT09IG5vcm1hbGl6ZUlkKGZ1bGxQYXRoKSkge1xuICAgICAgICAgICAgICAgIGlmIChyZWZbMF0gPT09IFwiI1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQW1iaWd1b3NSZWYoc2NoLCBsb2NhbFJlZnNbcmVmXSwgcmVmKTtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxSZWZzW3JlZl0gPSBzY2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnNbcmVmXSA9IGZ1bGxQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZWY7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkQW5jaG9yKGFuY2hvcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhbmNob3IgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmICghQU5DSE9SLnRlc3QoYW5jaG9yKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFuY2hvciBcIiR7YW5jaG9yfVwiYCk7XG4gICAgICAgICAgICAgICAgYWRkUmVmLmNhbGwodGhpcywgYCMke2FuY2hvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBsb2NhbFJlZnM7XG4gICAgZnVuY3Rpb24gY2hlY2tBbWJpZ3Vvc1JlZihzY2gxLCBzY2gyLCByZWYpIHtcbiAgICAgICAgaWYgKHNjaDIgIT09IHVuZGVmaW5lZCAmJiAhZXF1YWwoc2NoMSwgc2NoMikpXG4gICAgICAgICAgICB0aHJvdyBhbWJpZ3VvcyhyZWYpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhbWJpZ3VvcyhyZWYpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgcmVmZXJlbmNlIFwiJHtyZWZ9XCIgcmVzb2x2ZXMgdG8gbW9yZSB0aGFuIG9uZSBzY2hlbWFgKTtcbiAgICB9XG59XG5leHBvcnRzLmdldFNjaGVtYVJlZnMgPSBnZXRTY2hlbWFSZWZzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb2x2ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXREYXRhID0gZXhwb3J0cy5LZXl3b3JkQ3h0ID0gZXhwb3J0cy52YWxpZGF0ZUZ1bmN0aW9uQ29kZSA9IHZvaWQgMDtcbmNvbnN0IGJvb2xTY2hlbWFfMSA9IHJlcXVpcmUoXCIuL2Jvb2xTY2hlbWFcIik7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4vZGF0YVR5cGVcIik7XG5jb25zdCBhcHBsaWNhYmlsaXR5XzEgPSByZXF1aXJlKFwiLi9hcHBsaWNhYmlsaXR5XCIpO1xuY29uc3QgZGF0YVR5cGVfMiA9IHJlcXVpcmUoXCIuL2RhdGFUeXBlXCIpO1xuY29uc3QgZGVmYXVsdHNfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRzXCIpO1xuY29uc3Qga2V5d29yZF8xID0gcmVxdWlyZShcIi4va2V5d29yZFwiKTtcbmNvbnN0IHN1YnNjaGVtYV8xID0gcmVxdWlyZShcIi4vc3Vic2NoZW1hXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4uL3Jlc29sdmVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbi8vIHNjaGVtYSBjb21waWxhdGlvbiAtIGdlbmVyYXRlcyB2YWxpZGF0aW9uIGZ1bmN0aW9uLCBzdWJzY2hlbWFDb2RlIChiZWxvdykgaXMgdXNlZCBmb3Igc3Vic2NoZW1hc1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvZGUoaXQpIHtcbiAgICBpZiAoaXNTY2hlbWFPYmooaXQpKSB7XG4gICAgICAgIGNoZWNrS2V5d29yZHMoaXQpO1xuICAgICAgICBpZiAoc2NoZW1hQ3h0SGFzUnVsZXMoaXQpKSB7XG4gICAgICAgICAgICB0b3BTY2hlbWFPYmpDb2RlKGl0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUZ1bmN0aW9uKGl0LCAoKSA9PiAoMCwgYm9vbFNjaGVtYV8xLnRvcEJvb2xPckVtcHR5U2NoZW1hKShpdCkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZUZ1bmN0aW9uQ29kZSA9IHZhbGlkYXRlRnVuY3Rpb25Db2RlO1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbih7IGdlbiwgdmFsaWRhdGVOYW1lLCBzY2hlbWEsIHNjaGVtYUVudiwgb3B0cyB9LCBib2R5KSB7XG4gICAgaWYgKG9wdHMuY29kZS5lczUpIHtcbiAgICAgICAgZ2VuLmZ1bmModmFsaWRhdGVOYW1lLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5kYXRhfSwgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fWAsIHNjaGVtYUVudi4kYXN5bmMsICgpID0+IHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYFwidXNlIHN0cmljdFwiOyAke2Z1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKX1gKTtcbiAgICAgICAgICAgIGRlc3RydWN0dXJlVmFsQ3h0RVM1KGdlbiwgb3B0cyk7XG4gICAgICAgICAgICBnZW4uY29kZShib2R5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uZnVuYyh2YWxpZGF0ZU5hbWUsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9LCAke2Rlc3RydWN0dXJlVmFsQ3h0KG9wdHMpfWAsIHNjaGVtYUVudi4kYXN5bmMsICgpID0+IGdlbi5jb2RlKGZ1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKSkuY29kZShib2R5KSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVWYWxDeHQob3B0cykge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB7JHtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRofT1cIlwiLCAke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhfSwgJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5fSwgJHtuYW1lc18xLmRlZmF1bHQucm9vdERhdGF9PSR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9JHtvcHRzLmR5bmFtaWNSZWYgPyAoMCwgY29kZWdlbl8xLl8pIGAsICR7bmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzfT17fWAgOiBjb2RlZ2VuXzEubmlsfX09e31gO1xufVxuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVWYWxDeHRFUzUoZ2VuLCBvcHRzKSB7XG4gICAgZ2VuLmlmKG5hbWVzXzEuZGVmYXVsdC52YWxDeHQsICgpID0+IHtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aH1gKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhfWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5fWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5yb290RGF0YX1gKTtcbiAgICAgICAgaWYgKG9wdHMuZHluYW1pY1JlZilcbiAgICAgICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzfWApO1xuICAgIH0sICgpID0+IHtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgbmFtZXNfMS5kZWZhdWx0LmRhdGEpO1xuICAgICAgICBpZiAob3B0cy5keW5hbWljUmVmKVxuICAgICAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsICgwLCBjb2RlZ2VuXzEuXykgYHt9YCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0b3BTY2hlbWFPYmpDb2RlKGl0KSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIG9wdHMsIGdlbiB9ID0gaXQ7XG4gICAgdmFsaWRhdGVGdW5jdGlvbihpdCwgKCkgPT4ge1xuICAgICAgICBpZiAob3B0cy4kY29tbWVudCAmJiBzY2hlbWEuJGNvbW1lbnQpXG4gICAgICAgICAgICBjb21tZW50S2V5d29yZChpdCk7XG4gICAgICAgIGNoZWNrTm9EZWZhdWx0KGl0KTtcbiAgICAgICAgZ2VuLmxldChuYW1lc18xLmRlZmF1bHQudkVycm9ycywgbnVsbCk7XG4gICAgICAgIGdlbi5sZXQobmFtZXNfMS5kZWZhdWx0LmVycm9ycywgMCk7XG4gICAgICAgIGlmIChvcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmVzZXRFdmFsdWF0ZWQoaXQpO1xuICAgICAgICB0eXBlQW5kS2V5d29yZHMoaXQpO1xuICAgICAgICByZXR1cm5SZXN1bHRzKGl0KTtcbiAgICB9KTtcbiAgICByZXR1cm47XG59XG5mdW5jdGlvbiByZXNldEV2YWx1YXRlZChpdCkge1xuICAgIC8vIFRPRE8gbWF5YmUgc29tZSBob29rIHRvIGV4ZWN1dGUgaXQgaW4gdGhlIGVuZCB0byBjaGVjayB3aGV0aGVyIHByb3BzL2l0ZW1zIGFyZSBOYW1lLCBhcyBpbiBhc3NpZ25FdmFsdWF0ZWRcbiAgICBjb25zdCB7IGdlbiwgdmFsaWRhdGVOYW1lIH0gPSBpdDtcbiAgICBpdC5ldmFsdWF0ZWQgPSBnZW4uY29uc3QoXCJldmFsdWF0ZWRcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmV2YWx1YXRlZGApO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0uZHluYW1pY1Byb3BzYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0ucHJvcHNgLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKSk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5keW5hbWljSXRlbXNgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5pdGVtc2AsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApKTtcbn1cbmZ1bmN0aW9uIGZ1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKSB7XG4gICAgY29uc3Qgc2NoSWQgPSB0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgc2NoZW1hW29wdHMuc2NoZW1hSWRdO1xuICAgIHJldHVybiBzY2hJZCAmJiAob3B0cy5jb2RlLnNvdXJjZSB8fCBvcHRzLmNvZGUucHJvY2VzcykgPyAoMCwgY29kZWdlbl8xLl8pIGAvKiMgc291cmNlVVJMPSR7c2NoSWR9ICovYCA6IGNvZGVnZW5fMS5uaWw7XG59XG4vLyBzY2hlbWEgY29tcGlsYXRpb24gLSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgdG8gZ2VuZXJhdGUgY29kZSBmb3Igc3ViLXNjaGVtYXNcbmZ1bmN0aW9uIHN1YnNjaGVtYUNvZGUoaXQsIHZhbGlkKSB7XG4gICAgaWYgKGlzU2NoZW1hT2JqKGl0KSkge1xuICAgICAgICBjaGVja0tleXdvcmRzKGl0KTtcbiAgICAgICAgaWYgKHNjaGVtYUN4dEhhc1J1bGVzKGl0KSkge1xuICAgICAgICAgICAgc3ViU2NoZW1hT2JqQ29kZShpdCwgdmFsaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgICgwLCBib29sU2NoZW1hXzEuYm9vbE9yRW1wdHlTY2hlbWEpKGl0LCB2YWxpZCk7XG59XG5mdW5jdGlvbiBzY2hlbWFDeHRIYXNSdWxlcyh7IHNjaGVtYSwgc2VsZiB9KSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKHNlbGYuUlVMRVMuYWxsW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc1NjaGVtYU9iaihpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQuc2NoZW1hICE9IFwiYm9vbGVhblwiO1xufVxuZnVuY3Rpb24gc3ViU2NoZW1hT2JqQ29kZShpdCwgdmFsaWQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgZ2VuLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAob3B0cy4kY29tbWVudCAmJiBzY2hlbWEuJGNvbW1lbnQpXG4gICAgICAgIGNvbW1lbnRLZXl3b3JkKGl0KTtcbiAgICB1cGRhdGVDb250ZXh0KGl0KTtcbiAgICBjaGVja0FzeW5jU2NoZW1hKGl0KTtcbiAgICBjb25zdCBlcnJzQ291bnQgPSBnZW4uY29uc3QoXCJfZXJyc1wiLCBuYW1lc18xLmRlZmF1bHQuZXJyb3JzKTtcbiAgICB0eXBlQW5kS2V5d29yZHMoaXQsIGVycnNDb3VudCk7XG4gICAgLy8gVE9ETyB2YXJcbiAgICBnZW4udmFyKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke2VycnNDb3VudH0gPT09ICR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc31gKTtcbn1cbmZ1bmN0aW9uIGNoZWNrS2V5d29yZHMoaXQpIHtcbiAgICAoMCwgdXRpbF8xLmNoZWNrVW5rbm93blJ1bGVzKShpdCk7XG4gICAgY2hlY2tSZWZzQW5kS2V5d29yZHMoaXQpO1xufVxuZnVuY3Rpb24gdHlwZUFuZEtleXdvcmRzKGl0LCBlcnJzQ291bnQpIHtcbiAgICBpZiAoaXQub3B0cy5qdGQpXG4gICAgICAgIHJldHVybiBzY2hlbWFLZXl3b3JkcyhpdCwgW10sIGZhbHNlLCBlcnJzQ291bnQpO1xuICAgIGNvbnN0IHR5cGVzID0gKDAsIGRhdGFUeXBlXzEuZ2V0U2NoZW1hVHlwZXMpKGl0LnNjaGVtYSk7XG4gICAgY29uc3QgY2hlY2tlZFR5cGVzID0gKDAsIGRhdGFUeXBlXzEuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSkoaXQsIHR5cGVzKTtcbiAgICBzY2hlbWFLZXl3b3JkcyhpdCwgdHlwZXMsICFjaGVja2VkVHlwZXMsIGVycnNDb3VudCk7XG59XG5mdW5jdGlvbiBjaGVja1JlZnNBbmRLZXl3b3JkcyhpdCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBlcnJTY2hlbWFQYXRoLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hLiRyZWYgJiYgb3B0cy5pZ25vcmVLZXl3b3Jkc1dpdGhSZWYgJiYgKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoZW1hLCBzZWxmLlJVTEVTKSkge1xuICAgICAgICBzZWxmLmxvZ2dlci53YXJuKGAkcmVmOiBrZXl3b3JkcyBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tOb0RlZmF1bHQoaXQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgb3B0cy51c2VEZWZhdWx0cyAmJiBvcHRzLnN0cmljdFNjaGVtYSkge1xuICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIFwiZGVmYXVsdCBpcyBpZ25vcmVkIGluIHRoZSBzY2hlbWEgcm9vdFwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0KGl0KSB7XG4gICAgY29uc3Qgc2NoSWQgPSBpdC5zY2hlbWFbaXQub3B0cy5zY2hlbWFJZF07XG4gICAgaWYgKHNjaElkKVxuICAgICAgICBpdC5iYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKGl0Lm9wdHMudXJpUmVzb2x2ZXIsIGl0LmJhc2VJZCwgc2NoSWQpO1xufVxuZnVuY3Rpb24gY2hlY2tBc3luY1NjaGVtYShpdCkge1xuICAgIGlmIChpdC5zY2hlbWEuJGFzeW5jICYmICFpdC5zY2hlbWFFbnYuJGFzeW5jKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBzY2hlbWEgaW4gc3luYyBzY2hlbWFcIik7XG59XG5mdW5jdGlvbiBjb21tZW50S2V5d29yZCh7IGdlbiwgc2NoZW1hRW52LCBzY2hlbWEsIGVyclNjaGVtYVBhdGgsIG9wdHMgfSkge1xuICAgIGNvbnN0IG1zZyA9IHNjaGVtYS4kY29tbWVudDtcbiAgICBpZiAob3B0cy4kY29tbWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5zZWxmfS5sb2dnZXIubG9nKCR7bXNnfSlgKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG9wdHMuJGNvbW1lbnQgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYVBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7ZXJyU2NoZW1hUGF0aH0vJGNvbW1lbnRgO1xuICAgICAgICBjb25zdCByb290TmFtZSA9IGdlbi5zY29wZVZhbHVlKFwicm9vdFwiLCB7IHJlZjogc2NoZW1hRW52LnJvb3QgfSk7XG4gICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnNlbGZ9Lm9wdHMuJGNvbW1lbnQoJHttc2d9LCAke3NjaGVtYVBhdGh9LCAke3Jvb3ROYW1lfS5zY2hlbWEpYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmV0dXJuUmVzdWx0cyhpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFFbnYsIHZhbGlkYXRlTmFtZSwgVmFsaWRhdGlvbkVycm9yLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hRW52LiRhc3luYykge1xuICAgICAgICAvLyBUT0RPIGFzc2lnbiB1bmV2YWx1YXRlZFxuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSA9PT0gMGAsICgpID0+IGdlbi5yZXR1cm4obmFtZXNfMS5kZWZhdWx0LmRhdGEpLCAoKSA9PiBnZW4udGhyb3coKDAsIGNvZGVnZW5fMS5fKSBgbmV3ICR7VmFsaWRhdGlvbkVycm9yfSgke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSlgKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBuYW1lc18xLmRlZmF1bHQudkVycm9ycyk7XG4gICAgICAgIGlmIChvcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgYXNzaWduRXZhbHVhdGVkKGl0KTtcbiAgICAgICAgZ2VuLnJldHVybigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAwYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzaWduRXZhbHVhdGVkKHsgZ2VuLCBldmFsdWF0ZWQsIHByb3BzLCBpdGVtcyB9KSB7XG4gICAgaWYgKHByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpXG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtldmFsdWF0ZWR9LnByb3BzYCwgcHJvcHMpO1xuICAgIGlmIChpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKVxuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXZhbHVhdGVkfS5pdGVtc2AsIGl0ZW1zKTtcbn1cbmZ1bmN0aW9uIHNjaGVtYUtleXdvcmRzKGl0LCB0eXBlcywgdHlwZUVycm9ycywgZXJyc0NvdW50KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgZGF0YSwgYWxsRXJyb3JzLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBjb25zdCB7IFJVTEVTIH0gPSBzZWxmO1xuICAgIGlmIChzY2hlbWEuJHJlZiAmJiAob3B0cy5pZ25vcmVLZXl3b3Jkc1dpdGhSZWYgfHwgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgUlVMRVMpKSkge1xuICAgICAgICBnZW4uYmxvY2soKCkgPT4ga2V5d29yZENvZGUoaXQsIFwiJHJlZlwiLCBSVUxFUy5hbGwuJHJlZi5kZWZpbml0aW9uKSk7IC8vIFRPRE8gdHlwZWNhc3RcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIW9wdHMuanRkKVxuICAgICAgICBjaGVja1N0cmljdFR5cGVzKGl0LCB0eXBlcyk7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBSVUxFUy5ydWxlcylcbiAgICAgICAgICAgIGdyb3VwS2V5d29yZHMoZ3JvdXApO1xuICAgICAgICBncm91cEtleXdvcmRzKFJVTEVTLnBvc3QpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGdyb3VwS2V5d29yZHMoZ3JvdXApIHtcbiAgICAgICAgaWYgKCEoMCwgYXBwbGljYWJpbGl0eV8xLnNob3VsZFVzZUdyb3VwKShzY2hlbWEsIGdyb3VwKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGdyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgZGF0YVR5cGVfMi5jaGVja0RhdGFUeXBlKShncm91cC50eXBlLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMpKTtcbiAgICAgICAgICAgIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApO1xuICAgICAgICAgICAgaWYgKHR5cGVzLmxlbmd0aCA9PT0gMSAmJiB0eXBlc1swXSA9PT0gZ3JvdXAudHlwZSAmJiB0eXBlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgICAgICAoMCwgZGF0YVR5cGVfMi5yZXBvcnRUeXBlRXJyb3IpKGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaXRlcmF0ZUtleXdvcmRzKGl0LCBncm91cCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBtYWtlIGl0IFwib2tcIiBjYWxsP1xuICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAke2VycnNDb3VudCB8fCAwfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBvcHRzOiB7IHVzZURlZmF1bHRzIH0sIH0gPSBpdDtcbiAgICBpZiAodXNlRGVmYXVsdHMpXG4gICAgICAgICgwLCBkZWZhdWx0c18xLmFzc2lnbkRlZmF1bHRzKShpdCwgZ3JvdXAudHlwZSk7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGdyb3VwLnJ1bGVzKSB7XG4gICAgICAgICAgICBpZiAoKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VSdWxlKShzY2hlbWEsIHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAga2V5d29yZENvZGUoaXQsIHJ1bGUua2V5d29yZCwgcnVsZS5kZWZpbml0aW9uLCBncm91cC50eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gY2hlY2tTdHJpY3RUeXBlcyhpdCwgdHlwZXMpIHtcbiAgICBpZiAoaXQuc2NoZW1hRW52Lm1ldGEgfHwgIWl0Lm9wdHMuc3RyaWN0VHlwZXMpXG4gICAgICAgIHJldHVybjtcbiAgICBjaGVja0NvbnRleHRUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGlmICghaXQub3B0cy5hbGxvd1VuaW9uVHlwZXMpXG4gICAgICAgIGNoZWNrTXVsdGlwbGVUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGNoZWNrS2V5d29yZFR5cGVzKGl0LCBpdC5kYXRhVHlwZXMpO1xufVxuZnVuY3Rpb24gY2hlY2tDb250ZXh0VHlwZXMoaXQsIHR5cGVzKSB7XG4gICAgaWYgKCF0eXBlcy5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoIWl0LmRhdGFUeXBlcy5sZW5ndGgpIHtcbiAgICAgICAgaXQuZGF0YVR5cGVzID0gdHlwZXM7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHlwZXMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICBpZiAoIWluY2x1ZGVzVHlwZShpdC5kYXRhVHlwZXMsIHQpKSB7XG4gICAgICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBgdHlwZSBcIiR7dH1cIiBub3QgYWxsb3dlZCBieSBjb250ZXh0IFwiJHtpdC5kYXRhVHlwZXMuam9pbihcIixcIil9XCJgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIG5hcnJvd1NjaGVtYVR5cGVzKGl0LCB0eXBlcyk7XG59XG5mdW5jdGlvbiBjaGVja011bHRpcGxlVHlwZXMoaXQsIHRzKSB7XG4gICAgaWYgKHRzLmxlbmd0aCA+IDEgJiYgISh0cy5sZW5ndGggPT09IDIgJiYgdHMuaW5jbHVkZXMoXCJudWxsXCIpKSkge1xuICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBcInVzZSBhbGxvd1VuaW9uVHlwZXMgdG8gYWxsb3cgdW5pb24gdHlwZSBrZXl3b3JkXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrS2V5d29yZFR5cGVzKGl0LCB0cykge1xuICAgIGNvbnN0IHJ1bGVzID0gaXQuc2VsZi5SVUxFUy5hbGw7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIGluIHJ1bGVzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlc1trZXl3b3JkXTtcbiAgICAgICAgaWYgKHR5cGVvZiBydWxlID09IFwib2JqZWN0XCIgJiYgKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VSdWxlKShpdC5zY2hlbWEsIHJ1bGUpKSB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IHJ1bGUuZGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmICh0eXBlLmxlbmd0aCAmJiAhdHlwZS5zb21lKCh0KSA9PiBoYXNBcHBsaWNhYmxlVHlwZSh0cywgdCkpKSB7XG4gICAgICAgICAgICAgICAgc3RyaWN0VHlwZXNFcnJvcihpdCwgYG1pc3NpbmcgdHlwZSBcIiR7dHlwZS5qb2luKFwiLFwiKX1cIiBmb3Iga2V5d29yZCBcIiR7a2V5d29yZH1cImApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaGFzQXBwbGljYWJsZVR5cGUoc2NoVHMsIGt3ZFQpIHtcbiAgICByZXR1cm4gc2NoVHMuaW5jbHVkZXMoa3dkVCkgfHwgKGt3ZFQgPT09IFwibnVtYmVyXCIgJiYgc2NoVHMuaW5jbHVkZXMoXCJpbnRlZ2VyXCIpKTtcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzVHlwZSh0cywgdCkge1xuICAgIHJldHVybiB0cy5pbmNsdWRlcyh0KSB8fCAodCA9PT0gXCJpbnRlZ2VyXCIgJiYgdHMuaW5jbHVkZXMoXCJudW1iZXJcIikpO1xufVxuZnVuY3Rpb24gbmFycm93U2NoZW1hVHlwZXMoaXQsIHdpdGhUeXBlcykge1xuICAgIGNvbnN0IHRzID0gW107XG4gICAgZm9yIChjb25zdCB0IG9mIGl0LmRhdGFUeXBlcykge1xuICAgICAgICBpZiAoaW5jbHVkZXNUeXBlKHdpdGhUeXBlcywgdCkpXG4gICAgICAgICAgICB0cy5wdXNoKHQpO1xuICAgICAgICBlbHNlIGlmICh3aXRoVHlwZXMuaW5jbHVkZXMoXCJpbnRlZ2VyXCIpICYmIHQgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICB0cy5wdXNoKFwiaW50ZWdlclwiKTtcbiAgICB9XG4gICAgaXQuZGF0YVR5cGVzID0gdHM7XG59XG5mdW5jdGlvbiBzdHJpY3RUeXBlc0Vycm9yKGl0LCBtc2cpIHtcbiAgICBjb25zdCBzY2hlbWFQYXRoID0gaXQuc2NoZW1hRW52LmJhc2VJZCArIGl0LmVyclNjaGVtYVBhdGg7XG4gICAgbXNnICs9IGAgYXQgXCIke3NjaGVtYVBhdGh9XCIgKHN0cmljdFR5cGVzKWA7XG4gICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBtc2csIGl0Lm9wdHMuc3RyaWN0VHlwZXMpO1xufVxuY2xhc3MgS2V5d29yZEN4dCB7XG4gICAgY29uc3RydWN0b3IoaXQsIGRlZiwga2V5d29yZCkge1xuICAgICAgICAoMCwga2V5d29yZF8xLnZhbGlkYXRlS2V5d29yZFVzYWdlKShpdCwgZGVmLCBrZXl3b3JkKTtcbiAgICAgICAgdGhpcy5nZW4gPSBpdC5nZW47XG4gICAgICAgIHRoaXMuYWxsRXJyb3JzID0gaXQuYWxsRXJyb3JzO1xuICAgICAgICB0aGlzLmtleXdvcmQgPSBrZXl3b3JkO1xuICAgICAgICB0aGlzLmRhdGEgPSBpdC5kYXRhO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICAgICAgdGhpcy4kZGF0YSA9IGRlZi4kZGF0YSAmJiBpdC5vcHRzLiRkYXRhICYmIHRoaXMuc2NoZW1hICYmIHRoaXMuc2NoZW1hLiRkYXRhO1xuICAgICAgICB0aGlzLnNjaGVtYVZhbHVlID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHRoaXMuc2NoZW1hLCBrZXl3b3JkLCB0aGlzLiRkYXRhKTtcbiAgICAgICAgdGhpcy5zY2hlbWFUeXBlID0gZGVmLnNjaGVtYVR5cGU7XG4gICAgICAgIHRoaXMucGFyZW50U2NoZW1hID0gaXQuc2NoZW1hO1xuICAgICAgICB0aGlzLnBhcmFtcyA9IHt9O1xuICAgICAgICB0aGlzLml0ID0gaXQ7XG4gICAgICAgIHRoaXMuZGVmID0gZGVmO1xuICAgICAgICBpZiAodGhpcy4kZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb2RlID0gaXQuZ2VuLmNvbnN0KFwidlNjaGVtYVwiLCBnZXREYXRhKHRoaXMuJGRhdGEsIGl0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVtYUNvZGUgPSB0aGlzLnNjaGVtYVZhbHVlO1xuICAgICAgICAgICAgaWYgKCEoMCwga2V5d29yZF8xLnZhbGlkU2NoZW1hVHlwZSkodGhpcy5zY2hlbWEsIGRlZi5zY2hlbWFUeXBlLCBkZWYuYWxsb3dVbmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2tleXdvcmR9IHZhbHVlIG11c3QgYmUgJHtKU09OLnN0cmluZ2lmeShkZWYuc2NoZW1hVHlwZSl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwiY29kZVwiIGluIGRlZiA/IGRlZi50cmFja0Vycm9ycyA6IGRlZi5lcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmVycnNDb3VudCA9IGl0Lmdlbi5jb25zdChcIl9lcnJzXCIsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc3VsdChjb25kaXRpb24sIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5mYWlsUmVzdWx0KCgwLCBjb2RlZ2VuXzEubm90KShjb25kaXRpb24pLCBzdWNjZXNzQWN0aW9uLCBmYWlsQWN0aW9uKTtcbiAgICB9XG4gICAgZmFpbFJlc3VsdChjb25kaXRpb24sIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5nZW4uaWYoY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKGZhaWxBY3Rpb24pXG4gICAgICAgICAgICBmYWlsQWN0aW9uKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3NBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgIHN1Y2Nlc3NBY3Rpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmVuZElmKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhc3MoY29uZGl0aW9uLCBmYWlsQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZmFpbFJlc3VsdCgoMCwgY29kZWdlbl8xLm5vdCkoY29uZGl0aW9uKSwgdW5kZWZpbmVkLCBmYWlsQWN0aW9uKTtcbiAgICB9XG4gICAgZmFpbChjb25kaXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmlmKGZhbHNlKTsgLy8gdGhpcyBicmFuY2ggd2lsbCBiZSByZW1vdmVkIGJ5IGdlbi5vcHRpbWl6ZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2VuLmlmKGNvbmRpdGlvbik7XG4gICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgdGhpcy5nZW4uZW5kSWYoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgIH1cbiAgICBmYWlsJGRhdGEoY29uZGl0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy4kZGF0YSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZhaWwoY29uZGl0aW9uKTtcbiAgICAgICAgY29uc3QgeyBzY2hlbWFDb2RlIH0gPSB0aGlzO1xuICAgICAgICB0aGlzLmZhaWwoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSAhPT0gdW5kZWZpbmVkICYmICgkeygwLCBjb2RlZ2VuXzEub3IpKHRoaXMuaW52YWxpZCRkYXRhKCksIGNvbmRpdGlvbil9KWApO1xuICAgIH1cbiAgICBlcnJvcihhcHBlbmQsIGVycm9yUGFyYW1zLCBlcnJvclBhdGhzKSB7XG4gICAgICAgIGlmIChlcnJvclBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbXMoZXJyb3JQYXJhbXMpO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1zKHt9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lcnJvcihhcHBlbmQsIGVycm9yUGF0aHMpO1xuICAgIH1cbiAgICBfZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKSB7XG4gICAgICAgIDtcbiAgICAgICAgKGFwcGVuZCA/IGVycm9yc18xLnJlcG9ydEV4dHJhRXJyb3IgOiBlcnJvcnNfMS5yZXBvcnRFcnJvcikodGhpcywgdGhpcy5kZWYuZXJyb3IsIGVycm9yUGF0aHMpO1xuICAgIH1cbiAgICAkZGF0YUVycm9yKCkge1xuICAgICAgICAoMCwgZXJyb3JzXzEucmVwb3J0RXJyb3IpKHRoaXMsIHRoaXMuZGVmLiRkYXRhRXJyb3IgfHwgZXJyb3JzXzEua2V5d29yZCREYXRhRXJyb3IpO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyc0NvdW50ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZCBcInRyYWNrRXJyb3JzXCIgdG8ga2V5d29yZCBkZWZpbml0aW9uJyk7XG4gICAgICAgICgwLCBlcnJvcnNfMS5yZXNldEVycm9yc0NvdW50KSh0aGlzLmdlbiwgdGhpcy5lcnJzQ291bnQpO1xuICAgIH1cbiAgICBvayhjb25kKSB7XG4gICAgICAgIGlmICghdGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICB0aGlzLmdlbi5pZihjb25kKTtcbiAgICB9XG4gICAgc2V0UGFyYW1zKG9iaiwgYXNzaWduKSB7XG4gICAgICAgIGlmIChhc3NpZ24pXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMucGFyYW1zLCBvYmopO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnBhcmFtcyA9IG9iajtcbiAgICB9XG4gICAgYmxvY2skZGF0YSh2YWxpZCwgY29kZUJsb2NrLCAkZGF0YVZhbGlkID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICB0aGlzLmdlbi5ibG9jaygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrJGRhdGEodmFsaWQsICRkYXRhVmFsaWQpO1xuICAgICAgICAgICAgY29kZUJsb2NrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjaGVjayRkYXRhKHZhbGlkID0gY29kZWdlbl8xLm5pbCwgJGRhdGFWYWxpZCA9IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRkYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hQ29kZSwgc2NoZW1hVHlwZSwgZGVmIH0gPSB0aGlzO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5vcikoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSA9PT0gdW5kZWZpbmVkYCwgJGRhdGFWYWxpZCkpO1xuICAgICAgICBpZiAodmFsaWQgIT09IGNvZGVnZW5fMS5uaWwpXG4gICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgaWYgKHNjaGVtYVR5cGUubGVuZ3RoIHx8IGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICAgICAgZ2VuLmVsc2VJZih0aGlzLmludmFsaWQkZGF0YSgpKTtcbiAgICAgICAgICAgIHRoaXMuJGRhdGFFcnJvcigpO1xuICAgICAgICAgICAgaWYgKHZhbGlkICE9PSBjb2RlZ2VuXzEubmlsKVxuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBnZW4uZWxzZSgpO1xuICAgIH1cbiAgICBpbnZhbGlkJGRhdGEoKSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFDb2RlLCBzY2hlbWFUeXBlLCBkZWYsIGl0IH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5vcikod3JvbmckRGF0YVR5cGUoKSwgaW52YWxpZCREYXRhU2NoZW1hKCkpO1xuICAgICAgICBmdW5jdGlvbiB3cm9uZyREYXRhVHlwZSgpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWFUeXBlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmICghKHNjaGVtYUNvZGUgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdCA9IEFycmF5LmlzQXJyYXkoc2NoZW1hVHlwZSkgPyBzY2hlbWFUeXBlIDogW3NjaGVtYVR5cGVdO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAkeygwLCBkYXRhVHlwZV8yLmNoZWNrRGF0YVR5cGVzKShzdCwgc2NoZW1hQ29kZSwgaXQub3B0cy5zdHJpY3ROdW1iZXJzLCBkYXRhVHlwZV8yLkRhdGFUeXBlLldyb25nKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW52YWxpZCREYXRhU2NoZW1hKCkge1xuICAgICAgICAgICAgaWYgKGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlU2NoZW1hUmVmID0gZ2VuLnNjb3BlVmFsdWUoXCJ2YWxpZGF0ZSRkYXRhXCIsIHsgcmVmOiBkZWYudmFsaWRhdGVTY2hlbWEgfSk7IC8vIFRPRE8gdmFsdWUuY29kZSBmb3Igc3RhbmRhbG9uZVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAhJHt2YWxpZGF0ZVNjaGVtYVJlZn0oJHtzY2hlbWFDb2RlfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3Vic2NoZW1hKGFwcGwsIHZhbGlkKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjaGVtYSA9ICgwLCBzdWJzY2hlbWFfMS5nZXRTdWJzY2hlbWEpKHRoaXMuaXQsIGFwcGwpO1xuICAgICAgICAoMCwgc3Vic2NoZW1hXzEuZXh0ZW5kU3Vic2NoZW1hRGF0YSkoc3Vic2NoZW1hLCB0aGlzLml0LCBhcHBsKTtcbiAgICAgICAgKDAsIHN1YnNjaGVtYV8xLmV4dGVuZFN1YnNjaGVtYU1vZGUpKHN1YnNjaGVtYSwgYXBwbCk7XG4gICAgICAgIGNvbnN0IG5leHRDb250ZXh0ID0geyAuLi50aGlzLml0LCAuLi5zdWJzY2hlbWEsIGl0ZW1zOiB1bmRlZmluZWQsIHByb3BzOiB1bmRlZmluZWQgfTtcbiAgICAgICAgc3Vic2NoZW1hQ29kZShuZXh0Q29udGV4dCwgdmFsaWQpO1xuICAgICAgICByZXR1cm4gbmV4dENvbnRleHQ7XG4gICAgfVxuICAgIG1lcmdlRXZhbHVhdGVkKHNjaGVtYUN4dCwgdG9OYW1lKSB7XG4gICAgICAgIGNvbnN0IHsgaXQsIGdlbiB9ID0gdGhpcztcbiAgICAgICAgaWYgKCFpdC5vcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgc2NoZW1hQ3h0LnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgc2NoZW1hQ3h0LnByb3BzLCBpdC5wcm9wcywgdG9OYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQuaXRlbXMgIT09IHRydWUgJiYgc2NoZW1hQ3h0Lml0ZW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgc2NoZW1hQ3h0Lml0ZW1zLCBpdC5pdGVtcywgdG9OYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZXJnZVZhbGlkRXZhbHVhdGVkKHNjaGVtYUN4dCwgdmFsaWQpIHtcbiAgICAgICAgY29uc3QgeyBpdCwgZ2VuIH0gPSB0aGlzO1xuICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiAoaXQucHJvcHMgIT09IHRydWUgfHwgaXQuaXRlbXMgIT09IHRydWUpKSB7XG4gICAgICAgICAgICBnZW4uaWYodmFsaWQsICgpID0+IHRoaXMubWVyZ2VFdmFsdWF0ZWQoc2NoZW1hQ3h0LCBjb2RlZ2VuXzEuTmFtZSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLktleXdvcmRDeHQgPSBLZXl3b3JkQ3h0O1xuZnVuY3Rpb24ga2V5d29yZENvZGUoaXQsIGtleXdvcmQsIGRlZiwgcnVsZVR5cGUpIHtcbiAgICBjb25zdCBjeHQgPSBuZXcgS2V5d29yZEN4dChpdCwgZGVmLCBrZXl3b3JkKTtcbiAgICBpZiAoXCJjb2RlXCIgaW4gZGVmKSB7XG4gICAgICAgIGRlZi5jb2RlKGN4dCwgcnVsZVR5cGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjeHQuJGRhdGEgJiYgZGVmLnZhbGlkYXRlKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEuZnVuY0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxuICAgIGVsc2UgaWYgKFwibWFjcm9cIiBpbiBkZWYpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS5tYWNyb0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGRlZi5jb21waWxlIHx8IGRlZi52YWxpZGF0ZSkge1xuICAgICAgICAoMCwga2V5d29yZF8xLmZ1bmNLZXl3b3JkQ29kZSkoY3h0LCBkZWYpO1xuICAgIH1cbn1cbmNvbnN0IEpTT05fUE9JTlRFUiA9IC9eXFwvKD86W15+XXx+MHx+MSkqJC87XG5jb25zdCBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXihbMC05XSspKCN8XFwvKD86W15+XXx+MHx+MSkqKT8kLztcbmZ1bmN0aW9uIGdldERhdGEoJGRhdGEsIHsgZGF0YUxldmVsLCBkYXRhTmFtZXMsIGRhdGFQYXRoQXJyIH0pIHtcbiAgICBsZXQganNvblBvaW50ZXI7XG4gICAgbGV0IGRhdGE7XG4gICAgaWYgKCRkYXRhID09PSBcIlwiKVxuICAgICAgICByZXR1cm4gbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhO1xuICAgIGlmICgkZGF0YVswXSA9PT0gXCIvXCIpIHtcbiAgICAgICAgaWYgKCFKU09OX1BPSU5URVIudGVzdCgkZGF0YSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSlNPTi1wb2ludGVyOiAkeyRkYXRhfWApO1xuICAgICAgICBqc29uUG9pbnRlciA9ICRkYXRhO1xuICAgICAgICBkYXRhID0gbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFJFTEFUSVZFX0pTT05fUE9JTlRFUi5leGVjKCRkYXRhKTtcbiAgICAgICAgaWYgKCFtYXRjaGVzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04tcG9pbnRlcjogJHskZGF0YX1gKTtcbiAgICAgICAgY29uc3QgdXAgPSArbWF0Y2hlc1sxXTtcbiAgICAgICAganNvblBvaW50ZXIgPSBtYXRjaGVzWzJdO1xuICAgICAgICBpZiAoanNvblBvaW50ZXIgPT09IFwiI1wiKSB7XG4gICAgICAgICAgICBpZiAodXAgPj0gZGF0YUxldmVsKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyhcInByb3BlcnR5L2luZGV4XCIsIHVwKSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVBhdGhBcnJbZGF0YUxldmVsIC0gdXBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cCA+IGRhdGFMZXZlbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyhcImRhdGFcIiwgdXApKTtcbiAgICAgICAgZGF0YSA9IGRhdGFOYW1lc1tkYXRhTGV2ZWwgLSB1cF07XG4gICAgICAgIGlmICghanNvblBvaW50ZXIpXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgbGV0IGV4cHIgPSBkYXRhO1xuICAgIGNvbnN0IHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoXCIvXCIpO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgICAgZGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKCgwLCB1dGlsXzEudW5lc2NhcGVKc29uUG9pbnRlcikoc2VnbWVudCkpfWA7XG4gICAgICAgICAgICBleHByID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtleHByfSAmJiAke2RhdGF9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwcjtcbiAgICBmdW5jdGlvbiBlcnJvck1zZyhwb2ludGVyVHlwZSwgdXApIHtcbiAgICAgICAgcmV0dXJuIGBDYW5ub3QgYWNjZXNzICR7cG9pbnRlclR5cGV9ICR7dXB9IGxldmVscyB1cCwgY3VycmVudCBsZXZlbCBpcyAke2RhdGFMZXZlbH1gO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0RGF0YSA9IGdldERhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVycm9ycykge1xuICAgICAgICBzdXBlcihcInZhbGlkYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgdGhpcy5hanYgPSB0aGlzLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFZhbGlkYXRpb25FcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZhbGlkYXRpb25fZXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVcIik7XG5jbGFzcyBNaXNzaW5nUmVmRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocmVzb2x2ZXIsIGJhc2VJZCwgcmVmLCBtc2cpIHtcbiAgICAgICAgc3VwZXIobXNnIHx8IGBjYW4ndCByZXNvbHZlIHJlZmVyZW5jZSAke3JlZn0gZnJvbSBpZCAke2Jhc2VJZH1gKTtcbiAgICAgICAgdGhpcy5taXNzaW5nUmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKShyZXNvbHZlciwgYmFzZUlkLCByZWYpO1xuICAgICAgICB0aGlzLm1pc3NpbmdTY2hlbWEgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKSgoMCwgcmVzb2x2ZV8xLmdldEZ1bGxQYXRoKShyZXNvbHZlciwgdGhpcy5taXNzaW5nUmVmKSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gTWlzc2luZ1JlZkVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmX2Vycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVTY2hlbWEgPSBleHBvcnRzLmdldENvbXBpbGluZ1NjaGVtYSA9IGV4cG9ydHMucmVzb2x2ZVJlZiA9IGV4cG9ydHMuY29tcGlsZVNjaGVtYSA9IGV4cG9ydHMuU2NoZW1hRW52ID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHZhbGlkYXRpb25fZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi92YWxpZGF0ZVwiKTtcbmNsYXNzIFNjaGVtYUVudiB7XG4gICAgY29uc3RydWN0b3IoZW52KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5yZWZzID0ge307XG4gICAgICAgIHRoaXMuZHluYW1pY0FuY2hvcnMgPSB7fTtcbiAgICAgICAgbGV0IHNjaGVtYTtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnYuc2NoZW1hID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICBzY2hlbWEgPSBlbnYuc2NoZW1hO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGVudi5zY2hlbWE7XG4gICAgICAgIHRoaXMuc2NoZW1hSWQgPSBlbnYuc2NoZW1hSWQ7XG4gICAgICAgIHRoaXMucm9vdCA9IGVudi5yb290IHx8IHRoaXM7XG4gICAgICAgIHRoaXMuYmFzZUlkID0gKF9hID0gZW52LmJhc2VJZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoc2NoZW1hID09PSBudWxsIHx8IHNjaGVtYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoZW1hW2Vudi5zY2hlbWFJZCB8fCBcIiRpZFwiXSk7XG4gICAgICAgIHRoaXMuc2NoZW1hUGF0aCA9IGVudi5zY2hlbWFQYXRoO1xuICAgICAgICB0aGlzLmxvY2FsUmVmcyA9IGVudi5sb2NhbFJlZnM7XG4gICAgICAgIHRoaXMubWV0YSA9IGVudi5tZXRhO1xuICAgICAgICB0aGlzLiRhc3luYyA9IHNjaGVtYSA9PT0gbnVsbCB8fCBzY2hlbWEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaGVtYS4kYXN5bmM7XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2NoZW1hRW52ID0gU2NoZW1hRW52O1xuLy8gbGV0IGNvZGVTaXplID0gMFxuLy8gbGV0IG5vZGVDb3VudCA9IDBcbi8vIENvbXBpbGVzIHNjaGVtYSBpbiBTY2hlbWFFbnZcbmZ1bmN0aW9uIGNvbXBpbGVTY2hlbWEoc2NoKSB7XG4gICAgLy8gVE9ETyByZWZhY3RvciAtIHJlbW92ZSBjb21waWxhdGlvbnNcbiAgICBjb25zdCBfc2NoID0gZ2V0Q29tcGlsaW5nU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICBpZiAoX3NjaClcbiAgICAgICAgcmV0dXJuIF9zY2g7XG4gICAgY29uc3Qgcm9vdElkID0gKDAsIHJlc29sdmVfMS5nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBzY2gucm9vdC5iYXNlSWQpOyAvLyBUT0RPIGlmIGdldEZ1bGxQYXRoIHJlbW92ZWQgMSB0ZXN0cyBmYWlsc1xuICAgIGNvbnN0IHsgZXM1LCBsaW5lcyB9ID0gdGhpcy5vcHRzLmNvZGU7XG4gICAgY29uc3QgeyBvd25Qcm9wZXJ0aWVzIH0gPSB0aGlzLm9wdHM7XG4gICAgY29uc3QgZ2VuID0gbmV3IGNvZGVnZW5fMS5Db2RlR2VuKHRoaXMuc2NvcGUsIHsgZXM1LCBsaW5lcywgb3duUHJvcGVydGllcyB9KTtcbiAgICBsZXQgX1ZhbGlkYXRpb25FcnJvcjtcbiAgICBpZiAoc2NoLiRhc3luYykge1xuICAgICAgICBfVmFsaWRhdGlvbkVycm9yID0gZ2VuLnNjb3BlVmFsdWUoXCJFcnJvclwiLCB7XG4gICAgICAgICAgICByZWY6IHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0LFxuICAgICAgICAgICAgY29kZTogKDAsIGNvZGVnZW5fMS5fKSBgcmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKS5kZWZhdWx0YCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRlTmFtZSA9IGdlbi5zY29wZU5hbWUoXCJ2YWxpZGF0ZVwiKTtcbiAgICBzY2gudmFsaWRhdGVOYW1lID0gdmFsaWRhdGVOYW1lO1xuICAgIGNvbnN0IHNjaGVtYUN4dCA9IHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBhbGxFcnJvcnM6IHRoaXMub3B0cy5hbGxFcnJvcnMsXG4gICAgICAgIGRhdGE6IG5hbWVzXzEuZGVmYXVsdC5kYXRhLFxuICAgICAgICBwYXJlbnREYXRhOiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSxcbiAgICAgICAgcGFyZW50RGF0YVByb3BlcnR5OiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LFxuICAgICAgICBkYXRhTmFtZXM6IFtuYW1lc18xLmRlZmF1bHQuZGF0YV0sXG4gICAgICAgIGRhdGFQYXRoQXJyOiBbY29kZWdlbl8xLm5pbF0sXG4gICAgICAgIGRhdGFMZXZlbDogMCxcbiAgICAgICAgZGF0YVR5cGVzOiBbXSxcbiAgICAgICAgZGVmaW5lZFByb3BlcnRpZXM6IG5ldyBTZXQoKSxcbiAgICAgICAgdG9wU2NoZW1hUmVmOiBnZW4uc2NvcGVWYWx1ZShcInNjaGVtYVwiLCB0aGlzLm9wdHMuY29kZS5zb3VyY2UgPT09IHRydWVcbiAgICAgICAgICAgID8geyByZWY6IHNjaC5zY2hlbWEsIGNvZGU6ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShzY2guc2NoZW1hKSB9XG4gICAgICAgICAgICA6IHsgcmVmOiBzY2guc2NoZW1hIH0pLFxuICAgICAgICB2YWxpZGF0ZU5hbWUsXG4gICAgICAgIFZhbGlkYXRpb25FcnJvcjogX1ZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgc2NoZW1hOiBzY2guc2NoZW1hLFxuICAgICAgICBzY2hlbWFFbnY6IHNjaCxcbiAgICAgICAgcm9vdElkLFxuICAgICAgICBiYXNlSWQ6IHNjaC5iYXNlSWQgfHwgcm9vdElkLFxuICAgICAgICBzY2hlbWFQYXRoOiBjb2RlZ2VuXzEubmlsLFxuICAgICAgICBlcnJTY2hlbWFQYXRoOiBzY2guc2NoZW1hUGF0aCB8fCAodGhpcy5vcHRzLmp0ZCA/IFwiXCIgOiBcIiNcIiksXG4gICAgICAgIGVycm9yUGF0aDogKDAsIGNvZGVnZW5fMS5fKSBgXCJcImAsXG4gICAgICAgIG9wdHM6IHRoaXMub3B0cyxcbiAgICAgICAgc2VsZjogdGhpcyxcbiAgICB9O1xuICAgIGxldCBzb3VyY2VDb2RlO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX2NvbXBpbGF0aW9ucy5hZGQoc2NoKTtcbiAgICAgICAgKDAsIHZhbGlkYXRlXzEudmFsaWRhdGVGdW5jdGlvbkNvZGUpKHNjaGVtYUN4dCk7XG4gICAgICAgIGdlbi5vcHRpbWl6ZSh0aGlzLm9wdHMuY29kZS5vcHRpbWl6ZSk7XG4gICAgICAgIC8vIGdlbi5vcHRpbWl6ZSgxKVxuICAgICAgICBjb25zdCB2YWxpZGF0ZUNvZGUgPSBnZW4udG9TdHJpbmcoKTtcbiAgICAgICAgc291cmNlQ29kZSA9IGAke2dlbi5zY29wZVJlZnMobmFtZXNfMS5kZWZhdWx0LnNjb3BlKX1yZXR1cm4gJHt2YWxpZGF0ZUNvZGV9YDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coKGNvZGVTaXplICs9IHNvdXJjZUNvZGUubGVuZ3RoKSwgKG5vZGVDb3VudCArPSBnZW4ubm9kZUNvdW50KSlcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnByb2Nlc3MpXG4gICAgICAgICAgICBzb3VyY2VDb2RlID0gdGhpcy5vcHRzLmNvZGUucHJvY2Vzcyhzb3VyY2VDb2RlLCBzY2gpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcblxcblxcbiAqKiogXFxuXCIsIHNvdXJjZUNvZGUpXG4gICAgICAgIGNvbnN0IG1ha2VWYWxpZGF0ZSA9IG5ldyBGdW5jdGlvbihgJHtuYW1lc18xLmRlZmF1bHQuc2VsZn1gLCBgJHtuYW1lc18xLmRlZmF1bHQuc2NvcGV9YCwgc291cmNlQ29kZSk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gbWFrZVZhbGlkYXRlKHRoaXMsIHRoaXMuc2NvcGUuZ2V0KCkpO1xuICAgICAgICB0aGlzLnNjb3BlLnZhbHVlKHZhbGlkYXRlTmFtZSwgeyByZWY6IHZhbGlkYXRlIH0pO1xuICAgICAgICB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWEgPSBzY2guc2NoZW1hO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWFFbnYgPSBzY2g7XG4gICAgICAgIGlmIChzY2guJGFzeW5jKVxuICAgICAgICAgICAgdmFsaWRhdGUuJGFzeW5jID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnNvdXJjZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdmFsaWRhdGUuc291cmNlID0geyB2YWxpZGF0ZU5hbWUsIHZhbGlkYXRlQ29kZSwgc2NvcGVWYWx1ZXM6IGdlbi5fdmFsdWVzIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0cy51bmV2YWx1YXRlZCkge1xuICAgICAgICAgICAgY29uc3QgeyBwcm9wcywgaXRlbXMgfSA9IHNjaGVtYUN4dDtcbiAgICAgICAgICAgIHZhbGlkYXRlLmV2YWx1YXRlZCA9IHtcbiAgICAgICAgICAgICAgICBwcm9wczogcHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IHVuZGVmaW5lZCA6IHByb3BzLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gdW5kZWZpbmVkIDogaXRlbXMsXG4gICAgICAgICAgICAgICAgZHluYW1pY1Byb3BzOiBwcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNJdGVtczogaXRlbXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodmFsaWRhdGUuc291cmNlKVxuICAgICAgICAgICAgICAgIHZhbGlkYXRlLnNvdXJjZS5ldmFsdWF0ZWQgPSAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkodmFsaWRhdGUuZXZhbHVhdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBzY2gudmFsaWRhdGUgPSB2YWxpZGF0ZTtcbiAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZTtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZU5hbWU7XG4gICAgICAgIGlmIChzb3VyY2VDb2RlKVxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXCJFcnJvciBjb21waWxpbmcgc2NoZW1hLCBmdW5jdGlvbiBjb2RlOlwiLCBzb3VyY2VDb2RlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5cXG5cXG4gKioqIFxcblwiLCBzb3VyY2VDb2RlLCB0aGlzLm9wdHMpXG4gICAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9jb21waWxhdGlvbnMuZGVsZXRlKHNjaCk7XG4gICAgfVxufVxuZXhwb3J0cy5jb21waWxlU2NoZW1hID0gY29tcGlsZVNjaGVtYTtcbmZ1bmN0aW9uIHJlc29sdmVSZWYocm9vdCwgYmFzZUlkLCByZWYpIHtcbiAgICB2YXIgX2E7XG4gICAgcmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgcmVmKTtcbiAgICBjb25zdCBzY2hPckZ1bmMgPSByb290LnJlZnNbcmVmXTtcbiAgICBpZiAoc2NoT3JGdW5jKVxuICAgICAgICByZXR1cm4gc2NoT3JGdW5jO1xuICAgIGxldCBfc2NoID0gcmVzb2x2ZS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSAoX2EgPSByb290LmxvY2FsUmVmcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW3JlZl07IC8vIFRPRE8gbWF5YmUgbG9jYWxSZWZzIHNob3VsZCBob2xkIFNjaGVtYUVudlxuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGlmIChzY2hlbWEpXG4gICAgICAgICAgICBfc2NoID0gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIHJldHVybiAocm9vdC5yZWZzW3JlZl0gPSBpbmxpbmVPckNvbXBpbGUuY2FsbCh0aGlzLCBfc2NoKSk7XG59XG5leHBvcnRzLnJlc29sdmVSZWYgPSByZXNvbHZlUmVmO1xuZnVuY3Rpb24gaW5saW5lT3JDb21waWxlKHNjaCkge1xuICAgIGlmICgoMCwgcmVzb2x2ZV8xLmlubGluZVJlZikoc2NoLnNjaGVtYSwgdGhpcy5vcHRzLmlubGluZVJlZnMpKVxuICAgICAgICByZXR1cm4gc2NoLnNjaGVtYTtcbiAgICByZXR1cm4gc2NoLnZhbGlkYXRlID8gc2NoIDogY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG59XG4vLyBJbmRleCBvZiBzY2hlbWEgY29tcGlsYXRpb24gaW4gdGhlIGN1cnJlbnRseSBjb21waWxlZCBsaXN0XG5mdW5jdGlvbiBnZXRDb21waWxpbmdTY2hlbWEoc2NoRW52KSB7XG4gICAgZm9yIChjb25zdCBzY2ggb2YgdGhpcy5fY29tcGlsYXRpb25zKSB7XG4gICAgICAgIGlmIChzYW1lU2NoZW1hRW52KHNjaCwgc2NoRW52KSlcbiAgICAgICAgICAgIHJldHVybiBzY2g7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21waWxpbmdTY2hlbWEgPSBnZXRDb21waWxpbmdTY2hlbWE7XG5mdW5jdGlvbiBzYW1lU2NoZW1hRW52KHMxLCBzMikge1xuICAgIHJldHVybiBzMS5zY2hlbWEgPT09IHMyLnNjaGVtYSAmJiBzMS5yb290ID09PSBzMi5yb290ICYmIHMxLmJhc2VJZCA9PT0gczIuYmFzZUlkO1xufVxuLy8gcmVzb2x2ZSBhbmQgY29tcGlsZSB0aGUgcmVmZXJlbmNlcyAoJHJlZilcbi8vIFRPRE8gcmV0dXJucyBBbnlTY2hlbWFPYmplY3QgKGlmIHRoZSBzY2hlbWEgY2FuIGJlIGlubGluZWQpIG9yIHZhbGlkYXRpb24gZnVuY3Rpb25cbmZ1bmN0aW9uIHJlc29sdmUocm9vdCwgLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvb3Qgc2NoZW1hIGZvciB0aGUgY3VycmVudCBzY2hlbWFcbnJlZiAvLyByZWZlcmVuY2UgdG8gcmVzb2x2ZVxuKSB7XG4gICAgbGV0IHNjaDtcbiAgICB3aGlsZSAodHlwZW9mIChzY2ggPSB0aGlzLnJlZnNbcmVmXSkgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmVmID0gc2NoO1xuICAgIHJldHVybiBzY2ggfHwgdGhpcy5zY2hlbWFzW3JlZl0gfHwgcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG59XG4vLyBSZXNvbHZlIHNjaGVtYSwgaXRzIHJvb3QgYW5kIGJhc2VJZFxuZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShyb290LCAvLyByb290IG9iamVjdCB3aXRoIHByb3BlcnRpZXMgc2NoZW1hLCByZWZzIFRPRE8gYmVsb3cgU2NoZW1hRW52IGlzIGFzc2lnbmVkIHRvIGl0XG5yZWYgLy8gcmVmZXJlbmNlIHRvIHJlc29sdmVcbikge1xuICAgIGNvbnN0IHAgPSB0aGlzLm9wdHMudXJpUmVzb2x2ZXIucGFyc2UocmVmKTtcbiAgICBjb25zdCByZWZQYXRoID0gKDAsIHJlc29sdmVfMS5fZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcCk7XG4gICAgbGV0IGJhc2VJZCA9ICgwLCByZXNvbHZlXzEuZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcm9vdC5iYXNlSWQsIHVuZGVmaW5lZCk7XG4gICAgLy8gVE9ETyBgT2JqZWN0LmtleXMocm9vdC5zY2hlbWEpLmxlbmd0aCA+IDBgIHNob3VsZCBub3QgYmUgbmVlZGVkIC0gYnV0IHJlbW92aW5nIGJyZWFrcyAyIHRlc3RzXG4gICAgaWYgKE9iamVjdC5rZXlzKHJvb3Quc2NoZW1hKS5sZW5ndGggPiAwICYmIHJlZlBhdGggPT09IGJhc2VJZCkge1xuICAgICAgICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCByb290KTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShyZWZQYXRoKTtcbiAgICBjb25zdCBzY2hPclJlZiA9IHRoaXMucmVmc1tpZF0gfHwgdGhpcy5zY2hlbWFzW2lkXTtcbiAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHNjaE9yUmVmKTtcbiAgICAgICAgaWYgKHR5cGVvZiAoc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnNjaGVtYSkgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHAsIHNjaCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgKHNjaE9yUmVmID09PSBudWxsIHx8IHNjaE9yUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2hPclJlZi5zY2hlbWEpICE9PSBcIm9iamVjdFwiKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKCFzY2hPclJlZi52YWxpZGF0ZSlcbiAgICAgICAgY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaE9yUmVmKTtcbiAgICBpZiAoaWQgPT09ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKHJlZikpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHNjaE9yUmVmO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGNvbnN0IHNjaElkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgaWYgKHNjaElkKVxuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICByZXR1cm4gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcCwgc2NoT3JSZWYpO1xufVxuZXhwb3J0cy5yZXNvbHZlU2NoZW1hID0gcmVzb2x2ZVNjaGVtYTtcbmNvbnN0IFBSRVZFTlRfU0NPUEVfQ0hBTkdFID0gbmV3IFNldChbXG4gICAgXCJwcm9wZXJ0aWVzXCIsXG4gICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiZGVwZW5kZW5jaWVzXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiLFxuXSk7XG5mdW5jdGlvbiBnZXRKc29uUG9pbnRlcihwYXJzZWRSZWYsIHsgYmFzZUlkLCBzY2hlbWEsIHJvb3QgfSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoKChfYSA9IHBhcnNlZFJlZi5mcmFnbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSAhPT0gXCIvXCIpXG4gICAgICAgIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFyc2VkUmVmLmZyYWdtZW50LnNsaWNlKDEpLnNwbGl0KFwiL1wiKSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHBhcnRTY2hlbWEgPSBzY2hlbWFbKDAsIHV0aWxfMS51bmVzY2FwZUZyYWdtZW50KShwYXJ0KV07XG4gICAgICAgIGlmIChwYXJ0U2NoZW1hID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNjaGVtYSA9IHBhcnRTY2hlbWE7XG4gICAgICAgIC8vIFRPRE8gUFJFVkVOVF9TQ09QRV9DSEFOR0UgY291bGQgYmUgZGVmaW5lZCBpbiBrZXl3b3JkIGRlZj9cbiAgICAgICAgY29uc3Qgc2NoSWQgPSB0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiICYmIHNjaGVtYVt0aGlzLm9wdHMuc2NoZW1hSWRdO1xuICAgICAgICBpZiAoIVBSRVZFTlRfU0NPUEVfQ0hBTkdFLmhhcyhwYXJ0KSAmJiBzY2hJZCkge1xuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBlbnY7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgIT0gXCJib29sZWFuXCIgJiYgc2NoZW1hLiRyZWYgJiYgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgdGhpcy5SVUxFUykpIHtcbiAgICAgICAgY29uc3QgJHJlZiA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsIHNjaGVtYS4kcmVmKTtcbiAgICAgICAgZW52ID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsICRyZWYpO1xuICAgIH1cbiAgICAvLyBldmVuIHRob3VnaCByZXNvbHV0aW9uIGZhaWxlZCB3ZSBuZWVkIHRvIHJldHVybiBTY2hlbWFFbnYgdG8gdGhyb3cgZXhjZXB0aW9uXG4gICAgLy8gc28gdGhhdCBjb21waWxlQXN5bmMgbG9hZHMgbWlzc2luZyBzY2hlbWEuXG4gICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgIGVudiA9IGVudiB8fCBuZXcgU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgcm9vdCwgYmFzZUlkIH0pO1xuICAgIGlmIChlbnYuc2NoZW1hICE9PSBlbnYucm9vdC5zY2hlbWEpXG4gICAgICAgIHJldHVybiBlbnY7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLyoqIEBsaWNlbnNlIFVSSS5qcyB2NC40LjEgKGMpIDIwMTEgR2FyeSBDb3VydC4gTGljZW5zZTogaHR0cDovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L3VyaS1qcyAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcblx0dHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG5cdHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuXHQoZmFjdG9yeSgoZ2xvYmFsLlVSSSA9IGdsb2JhbC5VUkkgfHwge30pKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG1lcmdlKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzZXRzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIHNldHNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgaWYgKHNldHMubGVuZ3RoID4gMSkge1xuICAgICAgICBzZXRzWzBdID0gc2V0c1swXS5zbGljZSgwLCAtMSk7XG4gICAgICAgIHZhciB4bCA9IHNldHMubGVuZ3RoIC0gMTtcbiAgICAgICAgZm9yICh2YXIgeCA9IDE7IHggPCB4bDsgKyt4KSB7XG4gICAgICAgICAgICBzZXRzW3hdID0gc2V0c1t4XS5zbGljZSgxLCAtMSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0c1t4bF0gPSBzZXRzW3hsXS5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIHNldHMuam9pbignJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNldHNbMF07XG4gICAgfVxufVxuZnVuY3Rpb24gc3ViZXhwKHN0cikge1xuICAgIHJldHVybiBcIig/OlwiICsgc3RyICsgXCIpXCI7XG59XG5mdW5jdGlvbiB0eXBlT2Yobykge1xuICAgIHJldHVybiBvID09PSB1bmRlZmluZWQgPyBcInVuZGVmaW5lZFwiIDogbyA9PT0gbnVsbCA/IFwibnVsbFwiIDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNwbGl0KFwiIFwiKS5wb3AoKS5zcGxpdChcIl1cIikuc2hpZnQoKS50b0xvd2VyQ2FzZSgpO1xufVxuZnVuY3Rpb24gdG9VcHBlckNhc2Uoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci50b1VwcGVyQ2FzZSgpO1xufVxuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsID8gb2JqIGluc3RhbmNlb2YgQXJyYXkgPyBvYmogOiB0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gXCJudW1iZXJcIiB8fCBvYmouc3BsaXQgfHwgb2JqLnNldEludGVydmFsIHx8IG9iai5jYWxsID8gW29ial0gOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmopIDogW107XG59XG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHtcbiAgICB2YXIgb2JqID0gdGFyZ2V0O1xuICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBidWlsZEV4cHMoaXNJUkkpIHtcbiAgICB2YXIgQUxQSEEkJCA9IFwiW0EtWmEtel1cIixcbiAgICAgICAgQ1IkID0gXCJbXFxcXHgwRF1cIixcbiAgICAgICAgRElHSVQkJCA9IFwiWzAtOV1cIixcbiAgICAgICAgRFFVT1RFJCQgPSBcIltcXFxceDIyXVwiLFxuICAgICAgICBIRVhESUckJCA9IG1lcmdlKERJR0lUJCQsIFwiW0EtRmEtZl1cIiksXG4gICAgICAgIC8vY2FzZS1pbnNlbnNpdGl2ZVxuICAgIExGJCQgPSBcIltcXFxceDBBXVwiLFxuICAgICAgICBTUCQkID0gXCJbXFxcXHgyMF1cIixcbiAgICAgICAgUENUX0VOQ09ERUQkID0gc3ViZXhwKHN1YmV4cChcIiVbRUZlZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVs4OUEtRmEtZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkpLFxuICAgICAgICAvL2V4cGFuZGVkXG4gICAgR0VOX0RFTElNUyQkID0gXCJbXFxcXDpcXFxcL1xcXFw/XFxcXCNcXFxcW1xcXFxdXFxcXEBdXCIsXG4gICAgICAgIFNVQl9ERUxJTVMkJCA9IFwiW1xcXFwhXFxcXCRcXFxcJlxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFw7XFxcXD1dXCIsXG4gICAgICAgIFJFU0VSVkVEJCQgPSBtZXJnZShHRU5fREVMSU1TJCQsIFNVQl9ERUxJTVMkJCksXG4gICAgICAgIFVDU0NIQVIkJCA9IGlzSVJJID8gXCJbXFxcXHhBMC1cXFxcdTIwMERcXFxcdTIwMTAtXFxcXHUyMDI5XFxcXHUyMDJGLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkVGXVwiIDogXCJbXVwiLFxuICAgICAgICAvL3N1YnNldCwgZXhjbHVkZXMgYmlkaSBjb250cm9sIGNoYXJhY3RlcnNcbiAgICBJUFJJVkFURSQkID0gaXNJUkkgPyBcIltcXFxcdUUwMDAtXFxcXHVGOEZGXVwiIDogXCJbXVwiLFxuICAgICAgICAvL3N1YnNldFxuICAgIFVOUkVTRVJWRUQkJCA9IG1lcmdlKEFMUEhBJCQsIERJR0lUJCQsIFwiW1xcXFwtXFxcXC5cXFxcX1xcXFx+XVwiLCBVQ1NDSEFSJCQpLFxuICAgICAgICBTQ0hFTUUkID0gc3ViZXhwKEFMUEhBJCQgKyBtZXJnZShBTFBIQSQkLCBESUdJVCQkLCBcIltcXFxcK1xcXFwtXFxcXC5dXCIpICsgXCIqXCIpLFxuICAgICAgICBVU0VSSU5GTyQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XVwiKSkgKyBcIipcIiksXG4gICAgICAgIERFQ19PQ1RFVCQgPSBzdWJleHAoc3ViZXhwKFwiMjVbMC01XVwiKSArIFwifFwiICsgc3ViZXhwKFwiMlswLTRdXCIgKyBESUdJVCQkKSArIFwifFwiICsgc3ViZXhwKFwiMVwiICsgRElHSVQkJCArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCJbMS05XVwiICsgRElHSVQkJCkgKyBcInxcIiArIERJR0lUJCQpLFxuICAgICAgICBERUNfT0NURVRfUkVMQVhFRCQgPSBzdWJleHAoc3ViZXhwKFwiMjVbMC01XVwiKSArIFwifFwiICsgc3ViZXhwKFwiMlswLTRdXCIgKyBESUdJVCQkKSArIFwifFwiICsgc3ViZXhwKFwiMVwiICsgRElHSVQkJCArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIwP1sxLTldXCIgKyBESUdJVCQkKSArIFwifDA/MD9cIiArIERJR0lUJCQpLFxuICAgICAgICAvL3JlbGF4ZWQgcGFyc2luZyBydWxlc1xuICAgIElQVjRBRERSRVNTJCA9IHN1YmV4cChERUNfT0NURVRfUkVMQVhFRCQgKyBcIlxcXFwuXCIgKyBERUNfT0NURVRfUkVMQVhFRCQgKyBcIlxcXFwuXCIgKyBERUNfT0NURVRfUkVMQVhFRCQgKyBcIlxcXFwuXCIgKyBERUNfT0NURVRfUkVMQVhFRCQpLFxuICAgICAgICBIMTYkID0gc3ViZXhwKEhFWERJRyQkICsgXCJ7MSw0fVwiKSxcbiAgICAgICAgTFMzMiQgPSBzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIgKyBIMTYkKSArIFwifFwiICsgSVBWNEFERFJFU1MkKSxcbiAgICAgICAgSVBWNkFERFJFU1MxJCA9IHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcIns2fVwiICsgTFMzMiQpLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYoIGgxNiBcIjpcIiApIGxzMzJcbiAgICBJUFY2QUREUkVTUzIkID0gc3ViZXhwKFwiXFxcXDpcXFxcOlwiICsgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7NX1cIiArIExTMzIkKSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgXCI6OlwiIDUoIGgxNiBcIjpcIiApIGxzMzJcbiAgICBJUFY2QUREUkVTUzMkID0gc3ViZXhwKHN1YmV4cChIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezR9XCIgKyBMUzMyJCksXG4gICAgICAgIC8vWyAgICAgICAgICAgICAgIGgxNiBdIFwiOjpcIiA0KCBoMTYgXCI6XCIgKSBsczMyXG4gICAgSVBWNkFERFJFU1M0JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCwxfVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgKyBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInszfVwiICsgTFMzMiQpLFxuICAgICAgICAvL1sgKjEoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAzKCBoMTYgXCI6XCIgKSBsczMyXG4gICAgSVBWNkFERFJFU1M1JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCwyfVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgKyBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInsyfVwiICsgTFMzMiQpLFxuICAgICAgICAvL1sgKjIoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAyKCBoMTYgXCI6XCIgKSBsczMyXG4gICAgSVBWNkFERFJFU1M2JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCwzfVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgKyBIMTYkICsgXCJcXFxcOlwiICsgTFMzMiQpLFxuICAgICAgICAvL1sgKjMoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAgICBoMTYgXCI6XCIgICBsczMyXG4gICAgSVBWNkFERFJFU1M3JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCw0fVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgKyBMUzMyJCksXG4gICAgICAgIC8vWyAqNCggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiICAgICAgICAgICAgICBsczMyXG4gICAgSVBWNkFERFJFU1M4JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCw1fVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgKyBIMTYkKSxcbiAgICAgICAgLy9bICo1KCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgICAgICAgICAgICAgIGgxNlxuICAgIElQVjZBRERSRVNTOSQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsNn1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiKSxcbiAgICAgICAgLy9bICo2KCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCJcbiAgICBJUFY2QUREUkVTUyQgPSBzdWJleHAoW0lQVjZBRERSRVNTMSQsIElQVjZBRERSRVNTMiQsIElQVjZBRERSRVNTMyQsIElQVjZBRERSRVNTNCQsIElQVjZBRERSRVNTNSQsIElQVjZBRERSRVNTNiQsIElQVjZBRERSRVNTNyQsIElQVjZBRERSRVNTOCQsIElQVjZBRERSRVNTOSRdLmpvaW4oXCJ8XCIpKSxcbiAgICAgICAgWk9ORUlEJCA9IHN1YmV4cChzdWJleHAoVU5SRVNFUlZFRCQkICsgXCJ8XCIgKyBQQ1RfRU5DT0RFRCQpICsgXCIrXCIpLFxuICAgICAgICAvL1JGQyA2ODc0XG4gICAgSVBWNkFERFJaJCA9IHN1YmV4cChJUFY2QUREUkVTUyQgKyBcIlxcXFwlMjVcIiArIFpPTkVJRCQpLFxuICAgICAgICAvL1JGQyA2ODc0XG4gICAgSVBWNkFERFJaX1JFTEFYRUQkID0gc3ViZXhwKElQVjZBRERSRVNTJCArIHN1YmV4cChcIlxcXFwlMjV8XFxcXCUoPyFcIiArIEhFWERJRyQkICsgXCJ7Mn0pXCIpICsgWk9ORUlEJCksXG4gICAgICAgIC8vUkZDIDY4NzQsIHdpdGggcmVsYXhlZCBwYXJzaW5nIHJ1bGVzXG4gICAgSVBWRlVUVVJFJCA9IHN1YmV4cChcIlt2Vl1cIiArIEhFWERJRyQkICsgXCIrXFxcXC5cIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOl1cIikgKyBcIitcIiksXG4gICAgICAgIElQX0xJVEVSQUwkID0gc3ViZXhwKFwiXFxcXFtcIiArIHN1YmV4cChJUFY2QUREUlpfUkVMQVhFRCQgKyBcInxcIiArIElQVjZBRERSRVNTJCArIFwifFwiICsgSVBWRlVUVVJFJCkgKyBcIlxcXFxdXCIpLFxuICAgICAgICAvL1JGQyA2ODc0XG4gICAgUkVHX05BTUUkID0gc3ViZXhwKHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSkgKyBcIipcIiksXG4gICAgICAgIEhPU1QkID0gc3ViZXhwKElQX0xJVEVSQUwkICsgXCJ8XCIgKyBJUFY0QUREUkVTUyQgKyBcIig/IVwiICsgUkVHX05BTUUkICsgXCIpXCIgKyBcInxcIiArIFJFR19OQU1FJCksXG4gICAgICAgIFBPUlQkID0gc3ViZXhwKERJR0lUJCQgKyBcIipcIiksXG4gICAgICAgIEFVVEhPUklUWSQgPSBzdWJleHAoc3ViZXhwKFVTRVJJTkZPJCArIFwiQFwiKSArIFwiP1wiICsgSE9TVCQgKyBzdWJleHAoXCJcXFxcOlwiICsgUE9SVCQpICsgXCI/XCIpLFxuICAgICAgICBQQ0hBUiQgPSBzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQF1cIikpLFxuICAgICAgICBTRUdNRU5UJCA9IHN1YmV4cChQQ0hBUiQgKyBcIipcIiksXG4gICAgICAgIFNFR01FTlRfTlokID0gc3ViZXhwKFBDSEFSJCArIFwiK1wiKSxcbiAgICAgICAgU0VHTUVOVF9OWl9OQyQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFxAXVwiKSkgKyBcIitcIiksXG4gICAgICAgIFBBVEhfQUJFTVBUWSQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cIiArIFNFR01FTlQkKSArIFwiKlwiKSxcbiAgICAgICAgUEFUSF9BQlNPTFVURSQgPSBzdWJleHAoXCJcXFxcL1wiICsgc3ViZXhwKFNFR01FTlRfTlokICsgUEFUSF9BQkVNUFRZJCkgKyBcIj9cIiksXG4gICAgICAgIC8vc2ltcGxpZmllZFxuICAgIFBBVEhfTk9TQ0hFTUUkID0gc3ViZXhwKFNFR01FTlRfTlpfTkMkICsgUEFUSF9BQkVNUFRZJCksXG4gICAgICAgIC8vc2ltcGxpZmllZFxuICAgIFBBVEhfUk9PVExFU1MkID0gc3ViZXhwKFNFR01FTlRfTlokICsgUEFUSF9BQkVNUFRZJCksXG4gICAgICAgIC8vc2ltcGxpZmllZFxuICAgIFBBVEhfRU1QVFkkID0gXCIoPyFcIiArIFBDSEFSJCArIFwiKVwiLFxuICAgICAgICBQQVRIJCA9IHN1YmV4cChQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksXG4gICAgICAgIFFVRVJZJCA9IHN1YmV4cChzdWJleHAoUENIQVIkICsgXCJ8XCIgKyBtZXJnZShcIltcXFxcL1xcXFw/XVwiLCBJUFJJVkFURSQkKSkgKyBcIipcIiksXG4gICAgICAgIEZSQUdNRU5UJCA9IHN1YmV4cChzdWJleHAoUENIQVIkICsgXCJ8W1xcXFwvXFxcXD9dXCIpICsgXCIqXCIpLFxuICAgICAgICBISUVSX1BBUlQkID0gc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC9cIiArIEFVVEhPUklUWSQgKyBQQVRIX0FCRU1QVFkkKSArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksXG4gICAgICAgIFVSSSQgPSBzdWJleHAoU0NIRU1FJCArIFwiXFxcXDpcIiArIEhJRVJfUEFSVCQgKyBzdWJleHAoXCJcXFxcP1wiICsgUVVFUlkkKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCNcIiArIEZSQUdNRU5UJCkgKyBcIj9cIiksXG4gICAgICAgIFJFTEFUSVZFX1BBUlQkID0gc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC9cIiArIEFVVEhPUklUWSQgKyBQQVRIX0FCRU1QVFkkKSArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfTk9TQ0hFTUUkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksXG4gICAgICAgIFJFTEFUSVZFJCA9IHN1YmV4cChSRUxBVElWRV9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcI1wiICsgRlJBR01FTlQkKSArIFwiP1wiKSxcbiAgICAgICAgVVJJX1JFRkVSRU5DRSQgPSBzdWJleHAoVVJJJCArIFwifFwiICsgUkVMQVRJVkUkKSxcbiAgICAgICAgQUJTT0xVVEVfVVJJJCA9IHN1YmV4cChTQ0hFTUUkICsgXCJcXFxcOlwiICsgSElFUl9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIpLFxuICAgICAgICBHRU5FUklDX1JFRiQgPSBcIl4oXCIgKyBTQ0hFTUUkICsgXCIpXFxcXDpcIiArIHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvKFwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/KVwiKSArIFwiPyhcIiArIFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQgKyBcIilcIikgKyBzdWJleHAoXCJcXFxcPyhcIiArIFFVRVJZJCArIFwiKVwiKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCMoXCIgKyBGUkFHTUVOVCQgKyBcIilcIikgKyBcIj8kXCIsXG4gICAgICAgIFJFTEFUSVZFX1JFRiQgPSBcIl4oKXswfVwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfTk9TQ0hFTUUkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcIyhcIiArIEZSQUdNRU5UJCArIFwiKVwiKSArIFwiPyRcIixcbiAgICAgICAgQUJTT0xVVEVfUkVGJCA9IFwiXihcIiArIFNDSEVNRSQgKyBcIilcXFxcOlwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/JFwiLFxuICAgICAgICBTQU1FRE9DX1JFRiQgPSBcIl5cIiArIHN1YmV4cChcIlxcXFwjKFwiICsgRlJBR01FTlQkICsgXCIpXCIpICsgXCI/JFwiLFxuICAgICAgICBBVVRIT1JJVFlfUkVGJCA9IFwiXlwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/JFwiO1xuICAgIHJldHVybiB7XG4gICAgICAgIE5PVF9TQ0hFTUU6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgQUxQSEEkJCwgRElHSVQkJCwgXCJbXFxcXCtcXFxcLVxcXFwuXVwiKSwgXCJnXCIpLFxuICAgICAgICBOT1RfVVNFUklORk86IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXFxcXDpdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuICAgICAgICBOT1RfSE9TVDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcW1xcXFxdXFxcXDpdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuICAgICAgICBOT1RfUEFUSDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcL1xcXFw6XFxcXEBdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuICAgICAgICBOT1RfUEFUSF9OT1NDSEVNRTogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcL1xcXFxAXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcbiAgICAgICAgTk9UX1FVRVJZOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJV1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XFxcXEBcXFxcL1xcXFw/XVwiLCBJUFJJVkFURSQkKSwgXCJnXCIpLFxuICAgICAgICBOT1RfRlJBR01FTlQ6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQFxcXFwvXFxcXD9dXCIpLCBcImdcIiksXG4gICAgICAgIEVTQ0FQRTogbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcbiAgICAgICAgVU5SRVNFUlZFRDogbmV3IFJlZ0V4cChVTlJFU0VSVkVEJCQsIFwiZ1wiKSxcbiAgICAgICAgT1RIRVJfQ0hBUlM6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFJFU0VSVkVEJCQpLCBcImdcIiksXG4gICAgICAgIFBDVF9FTkNPREVEOiBuZXcgUmVnRXhwKFBDVF9FTkNPREVEJCwgXCJnXCIpLFxuICAgICAgICBJUFY0QUREUkVTUzogbmV3IFJlZ0V4cChcIl4oXCIgKyBJUFY0QUREUkVTUyQgKyBcIikkXCIpLFxuICAgICAgICBJUFY2QUREUkVTUzogbmV3IFJlZ0V4cChcIl5cXFxcWz8oXCIgKyBJUFY2QUREUkVTUyQgKyBcIilcIiArIHN1YmV4cChzdWJleHAoXCJcXFxcJTI1fFxcXFwlKD8hXCIgKyBIRVhESUckJCArIFwiezJ9KVwiKSArIFwiKFwiICsgWk9ORUlEJCArIFwiKVwiKSArIFwiP1xcXFxdPyRcIikgLy9SRkMgNjg3NCwgd2l0aCByZWxheGVkIHBhcnNpbmcgcnVsZXNcbiAgICB9O1xufVxudmFyIFVSSV9QUk9UT0NPTCA9IGJ1aWxkRXhwcyhmYWxzZSk7XG5cbnZhciBJUklfUFJPVE9DT0wgPSBidWlsZEV4cHModHJ1ZSk7XG5cbnZhciBzbGljZWRUb0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkge1xuICAgIHZhciBfYXJyID0gW107XG4gICAgdmFyIF9uID0gdHJ1ZTtcbiAgICB2YXIgX2QgPSBmYWxzZTtcbiAgICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kID0gdHJ1ZTtcbiAgICAgIF9lID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdKSBfaVtcInJldHVyblwiXSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gX2FycjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9IGVsc2UgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkge1xuICAgICAgcmV0dXJuIHNsaWNlSXRlcmF0b3IoYXJyLCBpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG4gICAgfVxuICB9O1xufSgpO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgdG9Db25zdW1hYmxlQXJyYXkgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuXG4gICAgcmV0dXJuIGFycjI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oYXJyKTtcbiAgfVxufTtcblxuLyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXG52YXIgbWF4SW50ID0gMjE0NzQ4MzY0NzsgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG4vKiogQm9vdHN0cmluZyBwYXJhbWV0ZXJzICovXG52YXIgYmFzZSA9IDM2O1xudmFyIHRNaW4gPSAxO1xudmFyIHRNYXggPSAyNjtcbnZhciBza2V3ID0gMzg7XG52YXIgZGFtcCA9IDcwMDtcbnZhciBpbml0aWFsQmlhcyA9IDcyO1xudmFyIGluaXRpYWxOID0gMTI4OyAvLyAweDgwXG52YXIgZGVsaW1pdGVyID0gJy0nOyAvLyAnXFx4MkQnXG5cbi8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG52YXIgcmVnZXhQdW55Y29kZSA9IC9eeG4tLS87XG52YXIgcmVnZXhOb25BU0NJSSA9IC9bXlxcMC1cXHg3RV0vOyAvLyBub24tQVNDSUkgY2hhcnNcbnZhciByZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nOyAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cbi8qKiBFcnJvciBtZXNzYWdlcyAqL1xudmFyIGVycm9ycyA9IHtcblx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcblx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcbn07XG5cbi8qKiBDb252ZW5pZW5jZSBzaG9ydGN1dHMgKi9cbnZhciBiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBlcnJvciQxKHR5cGUpIHtcblx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcbn1cblxuLyoqXG4gKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG4gKiBpdGVtLlxuICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtYXAoYXJyYXksIGZuKSB7XG5cdHZhciByZXN1bHQgPSBbXTtcblx0dmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblx0d2hpbGUgKGxlbmd0aC0tKSB7XG5cdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEEgc2ltcGxlIGBBcnJheSNtYXBgLWxpa2Ugd3JhcHBlciB0byB3b3JrIHdpdGggZG9tYWluIG5hbWUgc3RyaW5ncyBvciBlbWFpbFxuICogYWRkcmVzc2VzLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcbiAqIGNoYXJhY3Rlci5cbiAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgc3RyaW5nIG9mIGNoYXJhY3RlcnMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrXG4gKiBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWFwRG9tYWluKHN0cmluZywgZm4pIHtcblx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdHZhciByZXN1bHQgPSAnJztcblx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRyZXN1bHQgPSBwYXJ0c1swXSArICdAJztcblx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0fVxuXHQvLyBBdm9pZCBgc3BsaXQocmVnZXgpYCBmb3IgSUU4IGNvbXBhdGliaWxpdHkuIFNlZSAjMTcuXG5cdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0dmFyIGVuY29kZWQgPSBtYXAobGFiZWxzLCBmbikuam9pbignLicpO1xuXHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG4gKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhIHBhaXIgb2Ygc3Vycm9nYXRlIGhhbHZlcyAoZWFjaCBvZiB3aGljaFxuICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG4gKiBtYXRjaGluZyBVVEYtMTYuXG4gKiBAc2VlIGBwdW55Y29kZS51Y3MyLmVuY29kZWBcbiAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcbiAqIEBuYW1lIGRlY29kZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cbiAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cbiAqL1xuZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0dmFyIG91dHB1dCA9IFtdO1xuXHR2YXIgY291bnRlciA9IDA7XG5cdHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuXHR3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuXHRcdHZhciB2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0aWYgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERCRkYgJiYgY291bnRlciA8IGxlbmd0aCkge1xuXHRcdFx0Ly8gSXQncyBhIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3Rlci5cblx0XHRcdHZhciBleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAoKGV4dHJhICYgMHhGQzAwKSA9PSAweERDMDApIHtcblx0XHRcdFx0Ly8gTG93IHN1cnJvZ2F0ZS5cblx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEl0J3MgYW4gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlXG5cdFx0XHRcdC8vIG5leHQgY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyLlxuXHRcdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cbiAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcbiAqIEBuYW1lIGVuY29kZVxuICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBuZXcgVW5pY29kZSBzdHJpbmcgKFVDUy0yKS5cbiAqL1xudmFyIHVjczJlbmNvZGUgPSBmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdHJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHRvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cbiAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpbiB0aGUgcmFuZ2UgYDBgIHRvIGBiYXNlIC0gMWAsIG9yIGBiYXNlYCBpZlxuICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG4gKi9cbnZhciBiYXNpY1RvRGlnaXQgPSBmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdGlmIChjb2RlUG9pbnQgLSAweDMwIDwgMHgwQSkge1xuXHRcdHJldHVybiBjb2RlUG9pbnQgLSAweDE2O1xuXHR9XG5cdGlmIChjb2RlUG9pbnQgLSAweDQxIDwgMHgxQSkge1xuXHRcdHJldHVybiBjb2RlUG9pbnQgLSAweDQxO1xuXHR9XG5cdGlmIChjb2RlUG9pbnQgLSAweDYxIDwgMHgxQSkge1xuXHRcdHJldHVybiBjb2RlUG9pbnQgLSAweDYxO1xuXHR9XG5cdHJldHVybiBiYXNlO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGRpZ2l0L2ludGVnZXIgaW50byBhIGJhc2ljIGNvZGUgcG9pbnQuXG4gKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge051bWJlcn0gZGlnaXQgVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50LlxuICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3JcbiAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG4gKiBgMGAgdG8gYGJhc2UgLSAxYC4gSWYgYGZsYWdgIGlzIG5vbi16ZXJvLCB0aGUgdXBwZXJjYXNlIGZvcm0gaXNcbiAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG4gKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuICovXG52YXIgZGlnaXRUb0Jhc2ljID0gZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdC8vICAwLi4yNSBtYXAgdG8gQVNDSUkgYS4ueiBvciBBLi5aXG5cdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xufTtcblxuLyoqXG4gKiBCaWFzIGFkYXB0YXRpb24gZnVuY3Rpb24gYXMgcGVyIHNlY3Rpb24gMy40IG9mIFJGQyAzNDkyLlxuICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBhZGFwdCA9IGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHR2YXIgayA9IDA7XG5cdGRlbHRhID0gZmlyc3RUaW1lID8gZmxvb3IoZGVsdGEgLyBkYW1wKSA6IGRlbHRhID4+IDE7XG5cdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0Zm9yICg7IC8qIG5vIGluaXRpYWxpemF0aW9uICovZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRkZWx0YSA9IGZsb29yKGRlbHRhIC8gYmFzZU1pbnVzVE1pbik7XG5cdH1cblx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scyB0byBhIHN0cmluZyBvZiBVbmljb2RlXG4gKiBzeW1ib2xzLlxuICogQG1lbWJlck9mIHB1bnljb2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG4gKi9cbnZhciBkZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0Ly8gRG9uJ3QgdXNlIFVDUy0yLlxuXHR2YXIgb3V0cHV0ID0gW107XG5cdHZhciBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0dmFyIGkgPSAwO1xuXHR2YXIgbiA9IGluaXRpYWxOO1xuXHR2YXIgYmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxuXHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHR2YXIgYmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0YmFzaWMgPSAwO1xuXHR9XG5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XG5cdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0ZXJyb3IkMSgnbm90LWJhc2ljJyk7XG5cdFx0fVxuXHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHR9XG5cblx0Ly8gTWFpbiBkZWNvZGluZyBsb29wOiBzdGFydCBqdXN0IGFmdGVyIHRoZSBsYXN0IGRlbGltaXRlciBpZiBhbnkgYmFzaWMgY29kZVxuXHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdGZvciAodmFyIGluZGV4ID0gYmFzaWMgPiAwID8gYmFzaWMgKyAxIDogMDsgaW5kZXggPCBpbnB1dExlbmd0aDspIC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi97XG5cblx0XHQvLyBgaW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgY29uc3VtZWQuXG5cdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0Ly8gaWYgd2UgaW5jcmVhc2UgYGlgIGFzIHdlIGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmdcblx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdHZhciBvbGRpID0gaTtcblx0XHRmb3IgKHZhciB3ID0gMSwgayA9IGJhc2U7OyAvKiBubyBjb25kaXRpb24gKi9rICs9IGJhc2UpIHtcblxuXHRcdFx0aWYgKGluZGV4ID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdGVycm9yJDEoJ2ludmFsaWQtaW5wdXQnKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xuXG5cdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdGVycm9yJDEoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGkgKz0gZGlnaXQgKiB3O1xuXHRcdFx0dmFyIHQgPSBrIDw9IGJpYXMgPyB0TWluIDogayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcztcblxuXHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0dmFyIGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdGlmICh3ID4gZmxvb3IobWF4SW50IC8gYmFzZU1pbnVzVCkpIHtcblx0XHRcdFx0ZXJyb3IkMSgnb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXHRcdH1cblxuXHRcdHZhciBvdXQgPSBvdXRwdXQubGVuZ3RoICsgMTtcblx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0Ly8gaW5jcmVtZW50aW5nIGBuYCBlYWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzpcblx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRlcnJvciQxKCdvdmVyZmxvdycpO1xuXHRcdH1cblxuXHRcdG4gKz0gZmxvb3IoaSAvIG91dCk7XG5cdFx0aSAlPSBvdXQ7XG5cblx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0LlxuXHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblx0fVxuXG5cdHJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIG91dHB1dCk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG4gKiBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuICogQG1lbWJlck9mIHB1bnljb2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG4gKi9cbnZhciBlbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcblx0dmFyIG91dHB1dCA9IFtdO1xuXG5cdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIGFuIGFycmF5IG9mIFVuaWNvZGUgY29kZSBwb2ludHMuXG5cdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0Ly8gQ2FjaGUgdGhlIGxlbmd0aC5cblx0dmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdC8vIEluaXRpYWxpemUgdGhlIHN0YXRlLlxuXHR2YXIgbiA9IGluaXRpYWxOO1xuXHR2YXIgZGVsdGEgPSAwO1xuXHR2YXIgYmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHMuXG5cdHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZTtcblx0dmFyIF9kaWRJdGVyYXRvckVycm9yID0gZmFsc2U7XG5cdHZhciBfaXRlcmF0b3JFcnJvciA9IHVuZGVmaW5lZDtcblxuXHR0cnkge1xuXHRcdGZvciAodmFyIF9pdGVyYXRvciA9IGlucHV0W1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXA7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IChfc3RlcCA9IF9pdGVyYXRvci5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZSkge1xuXHRcdFx0dmFyIF9jdXJyZW50VmFsdWUyID0gX3N0ZXAudmFsdWU7XG5cblx0XHRcdGlmIChfY3VycmVudFZhbHVlMiA8IDB4ODApIHtcblx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKF9jdXJyZW50VmFsdWUyKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRfZGlkSXRlcmF0b3JFcnJvciA9IHRydWU7XG5cdFx0X2l0ZXJhdG9yRXJyb3IgPSBlcnI7XG5cdH0gZmluYWxseSB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiAmJiBfaXRlcmF0b3IucmV0dXJuKSB7XG5cdFx0XHRcdF9pdGVyYXRvci5yZXR1cm4oKTtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG5cdFx0XHRcdHRocm93IF9pdGVyYXRvckVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cdHZhciBoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoO1xuXG5cdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgd2l0aCBhIGRlbGltaXRlciB1bmxlc3MgaXQncyBlbXB0eS5cblx0aWYgKGJhc2ljTGVuZ3RoKSB7XG5cdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0fVxuXG5cdC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcblx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHQvLyBsYXJnZXIgb25lOlxuXHRcdHZhciBtID0gbWF4SW50O1xuXHRcdHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWU7XG5cdFx0dmFyIF9kaWRJdGVyYXRvckVycm9yMiA9IGZhbHNlO1xuXHRcdHZhciBfaXRlcmF0b3JFcnJvcjIgPSB1bmRlZmluZWQ7XG5cblx0XHR0cnkge1xuXHRcdFx0Zm9yICh2YXIgX2l0ZXJhdG9yMiA9IGlucHV0W1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXAyOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gKF9zdGVwMiA9IF9pdGVyYXRvcjIubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSB0cnVlKSB7XG5cdFx0XHRcdHZhciBjdXJyZW50VmFsdWUgPSBfc3RlcDIudmFsdWU7XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93LlxuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0X2RpZEl0ZXJhdG9yRXJyb3IyID0gdHJ1ZTtcblx0XHRcdF9pdGVyYXRvckVycm9yMiA9IGVycjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiAmJiBfaXRlcmF0b3IyLnJldHVybikge1xuXHRcdFx0XHRcdF9pdGVyYXRvcjIucmV0dXJuKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmIChfZGlkSXRlcmF0b3JFcnJvcjIpIHtcblx0XHRcdFx0XHR0aHJvdyBfaXRlcmF0b3JFcnJvcjI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuXHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRlcnJvciQxKCdvdmVyZmxvdycpO1xuXHRcdH1cblxuXHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG5cdFx0biA9IG07XG5cblx0XHR2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSB0cnVlO1xuXHRcdHZhciBfZGlkSXRlcmF0b3JFcnJvcjMgPSBmYWxzZTtcblx0XHR2YXIgX2l0ZXJhdG9yRXJyb3IzID0gdW5kZWZpbmVkO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGZvciAodmFyIF9pdGVyYXRvcjMgPSBpbnB1dFtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwMzsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IChfc3RlcDMgPSBfaXRlcmF0b3IzLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZSkge1xuXHRcdFx0XHR2YXIgX2N1cnJlbnRWYWx1ZSA9IF9zdGVwMy52YWx1ZTtcblxuXHRcdFx0XHRpZiAoX2N1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuXHRcdFx0XHRcdGVycm9yJDEoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKF9jdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyLlxuXHRcdFx0XHRcdHZhciBxID0gZGVsdGE7XG5cdFx0XHRcdFx0Zm9yICh2YXIgayA9IGJhc2U7OyAvKiBubyBjb25kaXRpb24gKi9rICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHZhciB0ID0gayA8PSBiaWFzID8gdE1pbiA6IGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXM7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgcU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0dmFyIGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSkpO1xuXHRcdFx0XHRcdFx0cSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEsIDApKSk7XG5cdFx0XHRcdFx0YmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcblx0XHRcdFx0XHRkZWx0YSA9IDA7XG5cdFx0XHRcdFx0KytoYW5kbGVkQ1BDb3VudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0X2RpZEl0ZXJhdG9yRXJyb3IzID0gdHJ1ZTtcblx0XHRcdF9pdGVyYXRvckVycm9yMyA9IGVycjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyAmJiBfaXRlcmF0b3IzLnJldHVybikge1xuXHRcdFx0XHRcdF9pdGVyYXRvcjMucmV0dXJuKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmIChfZGlkSXRlcmF0b3JFcnJvcjMpIHtcblx0XHRcdFx0XHR0aHJvdyBfaXRlcmF0b3JFcnJvcjM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQrK2RlbHRhO1xuXHRcdCsrbjtcblx0fVxuXHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG4gKiB0byBVbmljb2RlLiBPbmx5IHRoZSBQdW55Y29kZWQgcGFydHMgb2YgdGhlIGlucHV0IHdpbGwgYmUgY29udmVydGVkLCBpLmUuXG4gKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cbiAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuICogQG1lbWJlck9mIHB1bnljb2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG4gKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgVW5pY29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUHVueWNvZGVcbiAqIHN0cmluZy5cbiAqL1xudmFyIHRvVW5pY29kZSA9IGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbiAoc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpID8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKSA6IHN0cmluZztcblx0fSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzcyB0b1xuICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG4gKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cbiAqIEFTQ0lJLlxuICogQG1lbWJlck9mIHB1bnljb2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuICogVW5pY29kZSBzdHJpbmcuXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG4gKiBlbWFpbCBhZGRyZXNzLlxuICovXG52YXIgdG9BU0NJSSA9IGZ1bmN0aW9uIHRvQVNDSUkoaW5wdXQpIHtcblx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24gKHN0cmluZykge1xuXHRcdHJldHVybiByZWdleE5vbkFTQ0lJLnRlc3Qoc3RyaW5nKSA/ICd4bi0tJyArIGVuY29kZShzdHJpbmcpIDogc3RyaW5nO1xuXHR9KTtcbn07XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG52YXIgcHVueWNvZGUgPSB7XG5cdC8qKlxuICAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cbiAgKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAgKiBAdHlwZSBTdHJpbmdcbiAgKi9cblx0J3ZlcnNpb24nOiAnMi4xLjAnLFxuXHQvKipcbiAgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuICAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG4gICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG4gICogQG1lbWJlck9mIHB1bnljb2RlXG4gICogQHR5cGUgT2JqZWN0XG4gICovXG5cdCd1Y3MyJzoge1xuXHRcdCdkZWNvZGUnOiB1Y3MyZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdH0sXG5cdCdkZWNvZGUnOiBkZWNvZGUsXG5cdCdlbmNvZGUnOiBlbmNvZGUsXG5cdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0J3RvVW5pY29kZSc6IHRvVW5pY29kZVxufTtcblxuLyoqXG4gKiBVUkkuanNcbiAqXG4gKiBAZmlsZW92ZXJ2aWV3IEFuIFJGQyAzOTg2IGNvbXBsaWFudCwgc2NoZW1lIGV4dGVuZGFibGUgVVJJIHBhcnNpbmcvdmFsaWRhdGluZy9yZXNvbHZpbmcgbGlicmFyeSBmb3IgSmF2YVNjcmlwdC5cbiAqIEBhdXRob3IgPGEgaHJlZj1cIm1haWx0bzpnYXJ5LmNvdXJ0QGdtYWlsLmNvbVwiPkdhcnkgQ291cnQ8L2E+XG4gKiBAc2VlIGh0dHA6Ly9naXRodWIuY29tL2dhcnljb3VydC91cmktanNcbiAqL1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMSBHYXJ5IENvdXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZVxuICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2ZcbiAqICAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqXG4gKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdFxuICogICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHNcbiAqICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdBUlkgQ09VUlQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEXG4gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR0FSWSBDT1VSVCBPUlxuICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1JcbiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1JcbiAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbiAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbiAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRlxuICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKlxuICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZSBvZiB0aGVcbiAqIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkXG4gKiBvciBpbXBsaWVkLCBvZiBHYXJ5IENvdXJ0LlxuICovXG52YXIgU0NIRU1FUyA9IHt9O1xuZnVuY3Rpb24gcGN0RW5jQ2hhcihjaHIpIHtcbiAgICB2YXIgYyA9IGNoci5jaGFyQ29kZUF0KDApO1xuICAgIHZhciBlID0gdm9pZCAwO1xuICAgIGlmIChjIDwgMTYpIGUgPSBcIiUwXCIgKyBjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO2Vsc2UgaWYgKGMgPCAxMjgpIGUgPSBcIiVcIiArIGMudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7ZWxzZSBpZiAoYyA8IDIwNDgpIGUgPSBcIiVcIiArIChjID4+IDYgfCAxOTIpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCIlXCIgKyAoYyAmIDYzIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtlbHNlIGUgPSBcIiVcIiArIChjID4+IDEyIHwgMjI0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKGMgPj4gNiAmIDYzIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKGMgJiA2MyB8IDEyOCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gICAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBwY3REZWNDaGFycyhzdHIpIHtcbiAgICB2YXIgbmV3U3RyID0gXCJcIjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGlsID0gc3RyLmxlbmd0aDtcbiAgICB3aGlsZSAoaSA8IGlsKSB7XG4gICAgICAgIHZhciBjID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpICsgMSwgMiksIDE2KTtcbiAgICAgICAgaWYgKGMgPCAxMjgpIHtcbiAgICAgICAgICAgIG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgICAgICAgaSArPSAzO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPj0gMTk0ICYmIGMgPCAyMjQpIHtcbiAgICAgICAgICAgIGlmIChpbCAtIGkgPj0gNikge1xuICAgICAgICAgICAgICAgIHZhciBjMiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDQsIDIpLCAxNik7XG4gICAgICAgICAgICAgICAgbmV3U3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiAzMSkgPDwgNiB8IGMyICYgNjMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCA2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gNjtcbiAgICAgICAgfSBlbHNlIGlmIChjID49IDIyNCkge1xuICAgICAgICAgICAgaWYgKGlsIC0gaSA+PSA5KSB7XG4gICAgICAgICAgICAgICAgdmFyIF9jID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpICsgNCwgMiksIDE2KTtcbiAgICAgICAgICAgICAgICB2YXIgYzMgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA3LCAyKSwgMTYpO1xuICAgICAgICAgICAgICAgIG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgMTUpIDw8IDEyIHwgKF9jICYgNjMpIDw8IDYgfCBjMyAmIDYzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3U3RyICs9IHN0ci5zdWJzdHIoaSwgOSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpICs9IDk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCAzKTtcbiAgICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3U3RyO1xufVxuZnVuY3Rpb24gX25vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKGNvbXBvbmVudHMsIHByb3RvY29sKSB7XG4gICAgZnVuY3Rpb24gZGVjb2RlVW5yZXNlcnZlZChzdHIpIHtcbiAgICAgICAgdmFyIGRlY1N0ciA9IHBjdERlY0NoYXJzKHN0cik7XG4gICAgICAgIHJldHVybiAhZGVjU3RyLm1hdGNoKHByb3RvY29sLlVOUkVTRVJWRUQpID8gc3RyIDogZGVjU3RyO1xuICAgIH1cbiAgICBpZiAoY29tcG9uZW50cy5zY2hlbWUpIGNvbXBvbmVudHMuc2NoZW1lID0gU3RyaW5nKGNvbXBvbmVudHMuc2NoZW1lKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UocHJvdG9jb2wuTk9UX1NDSEVNRSwgXCJcIik7XG4gICAgaWYgKGNvbXBvbmVudHMudXNlcmluZm8gIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy51c2VyaW5mbyA9IFN0cmluZyhjb21wb25lbnRzLnVzZXJpbmZvKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKHByb3RvY29sLk5PVF9VU0VSSU5GTywgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuICAgIGlmIChjb21wb25lbnRzLmhvc3QgIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy5ob3N0ID0gU3RyaW5nKGNvbXBvbmVudHMuaG9zdCkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKHByb3RvY29sLk5PVF9IT1NULCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG4gICAgaWYgKGNvbXBvbmVudHMucGF0aCAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLnBhdGggPSBTdHJpbmcoY29tcG9uZW50cy5wYXRoKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKGNvbXBvbmVudHMuc2NoZW1lID8gcHJvdG9jb2wuTk9UX1BBVEggOiBwcm90b2NvbC5OT1RfUEFUSF9OT1NDSEVNRSwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuICAgIGlmIChjb21wb25lbnRzLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMucXVlcnkgPSBTdHJpbmcoY29tcG9uZW50cy5xdWVyeSkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfUVVFUlksIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcbiAgICBpZiAoY29tcG9uZW50cy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLmZyYWdtZW50ID0gU3RyaW5nKGNvbXBvbmVudHMuZnJhZ21lbnQpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UocHJvdG9jb2wuTk9UX0ZSQUdNRU5ULCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG4gICAgcmV0dXJuIGNvbXBvbmVudHM7XG59XG5cbmZ1bmN0aW9uIF9zdHJpcExlYWRpbmdaZXJvcyhzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL14wKiguKikvLCBcIiQxXCIpIHx8IFwiMFwiO1xufVxuZnVuY3Rpb24gX25vcm1hbGl6ZUlQdjQoaG9zdCwgcHJvdG9jb2wpIHtcbiAgICB2YXIgbWF0Y2hlcyA9IGhvc3QubWF0Y2gocHJvdG9jb2wuSVBWNEFERFJFU1MpIHx8IFtdO1xuXG4gICAgdmFyIF9tYXRjaGVzID0gc2xpY2VkVG9BcnJheShtYXRjaGVzLCAyKSxcbiAgICAgICAgYWRkcmVzcyA9IF9tYXRjaGVzWzFdO1xuXG4gICAgaWYgKGFkZHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIGFkZHJlc3Muc3BsaXQoXCIuXCIpLm1hcChfc3RyaXBMZWFkaW5nWmVyb3MpLmpvaW4oXCIuXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBob3N0O1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9ub3JtYWxpemVJUHY2KGhvc3QsIHByb3RvY29sKSB7XG4gICAgdmFyIG1hdGNoZXMgPSBob3N0Lm1hdGNoKHByb3RvY29sLklQVjZBRERSRVNTKSB8fCBbXTtcblxuICAgIHZhciBfbWF0Y2hlczIgPSBzbGljZWRUb0FycmF5KG1hdGNoZXMsIDMpLFxuICAgICAgICBhZGRyZXNzID0gX21hdGNoZXMyWzFdLFxuICAgICAgICB6b25lID0gX21hdGNoZXMyWzJdO1xuXG4gICAgaWYgKGFkZHJlc3MpIHtcbiAgICAgICAgdmFyIF9hZGRyZXNzJHRvTG93ZXJDYXNlJCA9IGFkZHJlc3MudG9Mb3dlckNhc2UoKS5zcGxpdCgnOjonKS5yZXZlcnNlKCksXG4gICAgICAgICAgICBfYWRkcmVzcyR0b0xvd2VyQ2FzZSQyID0gc2xpY2VkVG9BcnJheShfYWRkcmVzcyR0b0xvd2VyQ2FzZSQsIDIpLFxuICAgICAgICAgICAgbGFzdCA9IF9hZGRyZXNzJHRvTG93ZXJDYXNlJDJbMF0sXG4gICAgICAgICAgICBmaXJzdCA9IF9hZGRyZXNzJHRvTG93ZXJDYXNlJDJbMV07XG5cbiAgICAgICAgdmFyIGZpcnN0RmllbGRzID0gZmlyc3QgPyBmaXJzdC5zcGxpdChcIjpcIikubWFwKF9zdHJpcExlYWRpbmdaZXJvcykgOiBbXTtcbiAgICAgICAgdmFyIGxhc3RGaWVsZHMgPSBsYXN0LnNwbGl0KFwiOlwiKS5tYXAoX3N0cmlwTGVhZGluZ1plcm9zKTtcbiAgICAgICAgdmFyIGlzTGFzdEZpZWxkSVB2NEFkZHJlc3MgPSBwcm90b2NvbC5JUFY0QUREUkVTUy50ZXN0KGxhc3RGaWVsZHNbbGFzdEZpZWxkcy5sZW5ndGggLSAxXSk7XG4gICAgICAgIHZhciBmaWVsZENvdW50ID0gaXNMYXN0RmllbGRJUHY0QWRkcmVzcyA/IDcgOiA4O1xuICAgICAgICB2YXIgbGFzdEZpZWxkc1N0YXJ0ID0gbGFzdEZpZWxkcy5sZW5ndGggLSBmaWVsZENvdW50O1xuICAgICAgICB2YXIgZmllbGRzID0gQXJyYXkoZmllbGRDb3VudCk7XG4gICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgZmllbGRDb3VudDsgKyt4KSB7XG4gICAgICAgICAgICBmaWVsZHNbeF0gPSBmaXJzdEZpZWxkc1t4XSB8fCBsYXN0RmllbGRzW2xhc3RGaWVsZHNTdGFydCArIHhdIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0xhc3RGaWVsZElQdjRBZGRyZXNzKSB7XG4gICAgICAgICAgICBmaWVsZHNbZmllbGRDb3VudCAtIDFdID0gX25vcm1hbGl6ZUlQdjQoZmllbGRzW2ZpZWxkQ291bnQgLSAxXSwgcHJvdG9jb2wpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhbGxaZXJvRmllbGRzID0gZmllbGRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBmaWVsZCwgaW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghZmllbGQgfHwgZmllbGQgPT09IFwiMFwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RMb25nZXN0ID0gYWNjW2FjYy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdExvbmdlc3QgJiYgbGFzdExvbmdlc3QuaW5kZXggKyBsYXN0TG9uZ2VzdC5sZW5ndGggPT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RMb25nZXN0Lmxlbmd0aCsrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFjYy5wdXNoKHsgaW5kZXg6IGluZGV4LCBsZW5ndGg6IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10pO1xuICAgICAgICB2YXIgbG9uZ2VzdFplcm9GaWVsZHMgPSBhbGxaZXJvRmllbGRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9KVswXTtcbiAgICAgICAgdmFyIG5ld0hvc3QgPSB2b2lkIDA7XG4gICAgICAgIGlmIChsb25nZXN0WmVyb0ZpZWxkcyAmJiBsb25nZXN0WmVyb0ZpZWxkcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB2YXIgbmV3Rmlyc3QgPSBmaWVsZHMuc2xpY2UoMCwgbG9uZ2VzdFplcm9GaWVsZHMuaW5kZXgpO1xuICAgICAgICAgICAgdmFyIG5ld0xhc3QgPSBmaWVsZHMuc2xpY2UobG9uZ2VzdFplcm9GaWVsZHMuaW5kZXggKyBsb25nZXN0WmVyb0ZpZWxkcy5sZW5ndGgpO1xuICAgICAgICAgICAgbmV3SG9zdCA9IG5ld0ZpcnN0LmpvaW4oXCI6XCIpICsgXCI6OlwiICsgbmV3TGFzdC5qb2luKFwiOlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0hvc3QgPSBmaWVsZHMuam9pbihcIjpcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHpvbmUpIHtcbiAgICAgICAgICAgIG5ld0hvc3QgKz0gXCIlXCIgKyB6b25lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdIb3N0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBob3N0O1xuICAgIH1cbn1cbnZhciBVUklfUEFSU0UgPSAvXig/OihbXjpcXC8/I10rKTopPyg/OlxcL1xcLygoPzooW15cXC8/I0BdKilAKT8oXFxbW15cXC8/I1xcXV0rXFxdfFteXFwvPyM6XSopKD86XFw6KFxcZCopKT8pKT8oW14/I10qKSg/OlxcPyhbXiNdKikpPyg/OiMoKD86LnxcXG58XFxyKSopKT8vaTtcbnZhciBOT19NQVRDSF9JU19VTkRFRklORUQgPSBcIlwiLm1hdGNoKC8oKXswfS8pWzFdID09PSB1bmRlZmluZWQ7XG5mdW5jdGlvbiBwYXJzZSh1cmlTdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICB2YXIgY29tcG9uZW50cyA9IHt9O1xuICAgIHZhciBwcm90b2NvbCA9IG9wdGlvbnMuaXJpICE9PSBmYWxzZSA/IElSSV9QUk9UT0NPTCA6IFVSSV9QUk9UT0NPTDtcbiAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgPT09IFwic3VmZml4XCIpIHVyaVN0cmluZyA9IChvcHRpb25zLnNjaGVtZSA/IG9wdGlvbnMuc2NoZW1lICsgXCI6XCIgOiBcIlwiKSArIFwiLy9cIiArIHVyaVN0cmluZztcbiAgICB2YXIgbWF0Y2hlcyA9IHVyaVN0cmluZy5tYXRjaChVUklfUEFSU0UpO1xuICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIGlmIChOT19NQVRDSF9JU19VTkRFRklORUQpIHtcbiAgICAgICAgICAgIC8vc3RvcmUgZWFjaCBjb21wb25lbnRcbiAgICAgICAgICAgIGNvbXBvbmVudHMuc2NoZW1lID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMudXNlcmluZm8gPSBtYXRjaGVzWzNdO1xuICAgICAgICAgICAgY29tcG9uZW50cy5ob3N0ID0gbWF0Y2hlc1s0XTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucG9ydCA9IHBhcnNlSW50KG1hdGNoZXNbNV0sIDEwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucGF0aCA9IG1hdGNoZXNbNl0gfHwgXCJcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucXVlcnkgPSBtYXRjaGVzWzddO1xuICAgICAgICAgICAgY29tcG9uZW50cy5mcmFnbWVudCA9IG1hdGNoZXNbOF07XG4gICAgICAgICAgICAvL2ZpeCBwb3J0IG51bWJlclxuICAgICAgICAgICAgaWYgKGlzTmFOKGNvbXBvbmVudHMucG9ydCkpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnBvcnQgPSBtYXRjaGVzWzVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy9JRSBGSVggZm9yIGltcHJvcGVyIFJlZ0V4cCBtYXRjaGluZ1xuICAgICAgICAgICAgLy9zdG9yZSBlYWNoIGNvbXBvbmVudFxuICAgICAgICAgICAgY29tcG9uZW50cy5zY2hlbWUgPSBtYXRjaGVzWzFdIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbXBvbmVudHMudXNlcmluZm8gPSB1cmlTdHJpbmcuaW5kZXhPZihcIkBcIikgIT09IC0xID8gbWF0Y2hlc1szXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9IHVyaVN0cmluZy5pbmRleE9mKFwiLy9cIikgIT09IC0xID8gbWF0Y2hlc1s0XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucG9ydCA9IHBhcnNlSW50KG1hdGNoZXNbNV0sIDEwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucGF0aCA9IG1hdGNoZXNbNl0gfHwgXCJcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucXVlcnkgPSB1cmlTdHJpbmcuaW5kZXhPZihcIj9cIikgIT09IC0xID8gbWF0Y2hlc1s3XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuZnJhZ21lbnQgPSB1cmlTdHJpbmcuaW5kZXhPZihcIiNcIikgIT09IC0xID8gbWF0Y2hlc1s4XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIC8vZml4IHBvcnQgbnVtYmVyXG4gICAgICAgICAgICBpZiAoaXNOYU4oY29tcG9uZW50cy5wb3J0KSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucG9ydCA9IHVyaVN0cmluZy5tYXRjaCgvXFwvXFwvKD86LnxcXG4pKlxcOig/OlxcL3xcXD98XFwjfCQpLykgPyBtYXRjaGVzWzRdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnRzLmhvc3QpIHtcbiAgICAgICAgICAgIC8vbm9ybWFsaXplIElQIGhvc3RzXG4gICAgICAgICAgICBjb21wb25lbnRzLmhvc3QgPSBfbm9ybWFsaXplSVB2Nihfbm9ybWFsaXplSVB2NChjb21wb25lbnRzLmhvc3QsIHByb3RvY29sKSwgcHJvdG9jb2wpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGV0ZXJtaW5lIHJlZmVyZW5jZSB0eXBlXG4gICAgICAgIGlmIChjb21wb25lbnRzLnNjaGVtZSA9PT0gdW5kZWZpbmVkICYmIGNvbXBvbmVudHMudXNlcmluZm8gPT09IHVuZGVmaW5lZCAmJiBjb21wb25lbnRzLmhvc3QgPT09IHVuZGVmaW5lZCAmJiBjb21wb25lbnRzLnBvcnQgPT09IHVuZGVmaW5lZCAmJiAhY29tcG9uZW50cy5wYXRoICYmIGNvbXBvbmVudHMucXVlcnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5yZWZlcmVuY2UgPSBcInNhbWUtZG9jdW1lbnRcIjtcbiAgICAgICAgfSBlbHNlIGlmIChjb21wb25lbnRzLnNjaGVtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwicmVsYXRpdmVcIjtcbiAgICAgICAgfSBlbHNlIGlmIChjb21wb25lbnRzLmZyYWdtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcG9uZW50cy5yZWZlcmVuY2UgPSBcInVyaVwiO1xuICAgICAgICB9XG4gICAgICAgIC8vY2hlY2sgZm9yIHJlZmVyZW5jZSBlcnJvcnNcbiAgICAgICAgaWYgKG9wdGlvbnMucmVmZXJlbmNlICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSBcInN1ZmZpeFwiICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSBjb21wb25lbnRzLnJlZmVyZW5jZSkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJVUkkgaXMgbm90IGEgXCIgKyBvcHRpb25zLnJlZmVyZW5jZSArIFwiIHJlZmVyZW5jZS5cIjtcbiAgICAgICAgfVxuICAgICAgICAvL2ZpbmQgc2NoZW1lIGhhbmRsZXJcbiAgICAgICAgdmFyIHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTWyhvcHRpb25zLnNjaGVtZSB8fCBjb21wb25lbnRzLnNjaGVtZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgLy9jaGVjayBpZiBzY2hlbWUgY2FuJ3QgaGFuZGxlIElSSXNcbiAgICAgICAgaWYgKCFvcHRpb25zLnVuaWNvZGVTdXBwb3J0ICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci51bmljb2RlU3VwcG9ydCkpIHtcbiAgICAgICAgICAgIC8vaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMuaG9zdCAmJiAob3B0aW9ucy5kb21haW5Ib3N0IHx8IHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSkge1xuICAgICAgICAgICAgICAgIC8vY29udmVydCBVbmljb2RlIElETiAtPiBBU0NJSSBJRE5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmhvc3QgPSBwdW55Y29kZS50b0FTQ0lJKGNvbXBvbmVudHMuaG9zdC5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBwY3REZWNDaGFycykudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkhvc3QncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB2aWEgcHVueWNvZGU6IFwiICsgZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnZlcnQgSVJJIC0+IFVSSVxuICAgICAgICAgICAgX25vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKGNvbXBvbmVudHMsIFVSSV9QUk9UT0NPTCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL25vcm1hbGl6ZSBlbmNvZGluZ3NcbiAgICAgICAgICAgIF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzLCBwcm90b2NvbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy9wZXJmb3JtIHNjaGVtZSBzcGVjaWZpYyBwYXJzaW5nXG4gICAgICAgIGlmIChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIucGFyc2UpIHtcbiAgICAgICAgICAgIHNjaGVtZUhhbmRsZXIucGFyc2UoY29tcG9uZW50cywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIlVSSSBjYW4gbm90IGJlIHBhcnNlZC5cIjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudHM7XG59XG5cbmZ1bmN0aW9uIF9yZWNvbXBvc2VBdXRob3JpdHkoY29tcG9uZW50cywgb3B0aW9ucykge1xuICAgIHZhciBwcm90b2NvbCA9IG9wdGlvbnMuaXJpICE9PSBmYWxzZSA/IElSSV9QUk9UT0NPTCA6IFVSSV9QUk9UT0NPTDtcbiAgICB2YXIgdXJpVG9rZW5zID0gW107XG4gICAgaWYgKGNvbXBvbmVudHMudXNlcmluZm8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnVzZXJpbmZvKTtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goXCJAXCIpO1xuICAgIH1cbiAgICBpZiAoY29tcG9uZW50cy5ob3N0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy9ub3JtYWxpemUgSVAgaG9zdHMsIGFkZCBicmFja2V0cyBhbmQgZXNjYXBlIHpvbmUgc2VwYXJhdG9yIGZvciBJUHY2XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKF9ub3JtYWxpemVJUHY2KF9ub3JtYWxpemVJUHY0KFN0cmluZyhjb21wb25lbnRzLmhvc3QpLCBwcm90b2NvbCksIHByb3RvY29sKS5yZXBsYWNlKHByb3RvY29sLklQVjZBRERSRVNTLCBmdW5jdGlvbiAoXywgJDEsICQyKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJbXCIgKyAkMSArICgkMiA/IFwiJTI1XCIgKyAkMiA6IFwiXCIpICsgXCJdXCI7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnRzLnBvcnQgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIGNvbXBvbmVudHMucG9ydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB1cmlUb2tlbnMucHVzaChcIjpcIik7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKFN0cmluZyhjb21wb25lbnRzLnBvcnQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHVyaVRva2Vucy5sZW5ndGggPyB1cmlUb2tlbnMuam9pbihcIlwiKSA6IHVuZGVmaW5lZDtcbn1cblxudmFyIFJEUzEgPSAvXlxcLlxcLj9cXC8vO1xudmFyIFJEUzIgPSAvXlxcL1xcLihcXC98JCkvO1xudmFyIFJEUzMgPSAvXlxcL1xcLlxcLihcXC98JCkvO1xudmFyIFJEUzUgPSAvXlxcLz8oPzoufFxcbikqPyg/PVxcL3wkKS87XG5mdW5jdGlvbiByZW1vdmVEb3RTZWdtZW50cyhpbnB1dCkge1xuICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICB3aGlsZSAoaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaChSRFMxKSkge1xuICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKFJEUzEsIFwiXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0Lm1hdGNoKFJEUzIpKSB7XG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoUkRTMiwgXCIvXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0Lm1hdGNoKFJEUzMpKSB7XG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoUkRTMywgXCIvXCIpO1xuICAgICAgICAgICAgb3V0cHV0LnBvcCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcIi5cIiB8fCBpbnB1dCA9PT0gXCIuLlwiKSB7XG4gICAgICAgICAgICBpbnB1dCA9IFwiXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaW0gPSBpbnB1dC5tYXRjaChSRFM1KTtcbiAgICAgICAgICAgIGlmIChpbSkge1xuICAgICAgICAgICAgICAgIHZhciBzID0gaW1bMF07XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZShzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2gocyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZG90IHNlZ21lbnQgY29uZGl0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplKGNvbXBvbmVudHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICB2YXIgcHJvdG9jb2wgPSBvcHRpb25zLmlyaSA/IElSSV9QUk9UT0NPTCA6IFVSSV9QUk9UT0NPTDtcbiAgICB2YXIgdXJpVG9rZW5zID0gW107XG4gICAgLy9maW5kIHNjaGVtZSBoYW5kbGVyXG4gICAgdmFyIHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTWyhvcHRpb25zLnNjaGVtZSB8fCBjb21wb25lbnRzLnNjaGVtZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpXTtcbiAgICAvL3BlcmZvcm0gc2NoZW1lIHNwZWNpZmljIHNlcmlhbGl6YXRpb25cbiAgICBpZiAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZSkgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUoY29tcG9uZW50cywgb3B0aW9ucyk7XG4gICAgaWYgKGNvbXBvbmVudHMuaG9zdCkge1xuICAgICAgICAvL2lmIGhvc3QgY29tcG9uZW50IGlzIGFuIElQdjYgYWRkcmVzc1xuICAgICAgICBpZiAocHJvdG9jb2wuSVBWNkFERFJFU1MudGVzdChjb21wb25lbnRzLmhvc3QpKSB7fVxuICAgICAgICAvL1RPRE86IG5vcm1hbGl6ZSBJUHY2IGFkZHJlc3MgYXMgcGVyIFJGQyA1OTUyXG5cbiAgICAgICAgLy9pZiBob3N0IGNvbXBvbmVudCBpcyBhIGRvbWFpbiBuYW1lXG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuZG9tYWluSG9zdCB8fCBzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIuZG9tYWluSG9zdCkge1xuICAgICAgICAgICAgICAgIC8vY29udmVydCBJRE4gdmlhIHB1bnljb2RlXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5ob3N0ID0gIW9wdGlvbnMuaXJpID8gcHVueWNvZGUudG9BU0NJSShjb21wb25lbnRzLmhvc3QucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgcGN0RGVjQ2hhcnMpLnRvTG93ZXJDYXNlKCkpIDogcHVueWNvZGUudG9Vbmljb2RlKGNvbXBvbmVudHMuaG9zdCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkhvc3QncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBcIiArICghb3B0aW9ucy5pcmkgPyBcIkFTQ0lJXCIgOiBcIlVuaWNvZGVcIikgKyBcIiB2aWEgcHVueWNvZGU6IFwiICsgZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIC8vbm9ybWFsaXplIGVuY29kaW5nXG4gICAgX25vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKGNvbXBvbmVudHMsIHByb3RvY29sKTtcbiAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgIT09IFwic3VmZml4XCIgJiYgY29tcG9uZW50cy5zY2hlbWUpIHtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5zY2hlbWUpO1xuICAgICAgICB1cmlUb2tlbnMucHVzaChcIjpcIik7XG4gICAgfVxuICAgIHZhciBhdXRob3JpdHkgPSBfcmVjb21wb3NlQXV0aG9yaXR5KGNvbXBvbmVudHMsIG9wdGlvbnMpO1xuICAgIGlmIChhdXRob3JpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgIT09IFwic3VmZml4XCIpIHtcbiAgICAgICAgICAgIHVyaVRva2Vucy5wdXNoKFwiLy9cIik7XG4gICAgICAgIH1cbiAgICAgICAgdXJpVG9rZW5zLnB1c2goYXV0aG9yaXR5KTtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnBhdGguY2hhckF0KDApICE9PSBcIi9cIikge1xuICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goXCIvXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb21wb25lbnRzLnBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgcyA9IGNvbXBvbmVudHMucGF0aDtcbiAgICAgICAgaWYgKCFvcHRpb25zLmFic29sdXRlUGF0aCAmJiAoIXNjaGVtZUhhbmRsZXIgfHwgIXNjaGVtZUhhbmRsZXIuYWJzb2x1dGVQYXRoKSkge1xuICAgICAgICAgICAgcyA9IHJlbW92ZURvdFNlZ21lbnRzKHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdXRob3JpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgvXlxcL1xcLy8sIFwiLyUyRlwiKTsgLy9kb24ndCBhbGxvdyB0aGUgcGF0aCB0byBzdGFydCB3aXRoIFwiLy9cIlxuICAgICAgICB9XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKHMpO1xuICAgIH1cbiAgICBpZiAoY29tcG9uZW50cy5xdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKFwiP1wiKTtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5xdWVyeSk7XG4gICAgfVxuICAgIGlmIChjb21wb25lbnRzLmZyYWdtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goXCIjXCIpO1xuICAgICAgICB1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLmZyYWdtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHVyaVRva2Vucy5qb2luKFwiXCIpOyAvL21lcmdlIHRva2VucyBpbnRvIGEgc3RyaW5nXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb21wb25lbnRzKGJhc2UsIHJlbGF0aXZlKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgIHZhciBza2lwTm9ybWFsaXphdGlvbiA9IGFyZ3VtZW50c1szXTtcblxuICAgIHZhciB0YXJnZXQgPSB7fTtcbiAgICBpZiAoIXNraXBOb3JtYWxpemF0aW9uKSB7XG4gICAgICAgIGJhc2UgPSBwYXJzZShzZXJpYWxpemUoYmFzZSwgb3B0aW9ucyksIG9wdGlvbnMpOyAvL25vcm1hbGl6ZSBiYXNlIGNvbXBvbmVudHNcbiAgICAgICAgcmVsYXRpdmUgPSBwYXJzZShzZXJpYWxpemUocmVsYXRpdmUsIG9wdGlvbnMpLCBvcHRpb25zKTsgLy9ub3JtYWxpemUgcmVsYXRpdmUgY29tcG9uZW50c1xuICAgIH1cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMudG9sZXJhbnQgJiYgcmVsYXRpdmUuc2NoZW1lKSB7XG4gICAgICAgIHRhcmdldC5zY2hlbWUgPSByZWxhdGl2ZS5zY2hlbWU7XG4gICAgICAgIC8vdGFyZ2V0LmF1dGhvcml0eSA9IHJlbGF0aXZlLmF1dGhvcml0eTtcbiAgICAgICAgdGFyZ2V0LnVzZXJpbmZvID0gcmVsYXRpdmUudXNlcmluZm87XG4gICAgICAgIHRhcmdldC5ob3N0ID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgdGFyZ2V0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHJlbGF0aXZlLnBhdGggfHwgXCJcIik7XG4gICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyZWxhdGl2ZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLmhvc3QgIT09IHVuZGVmaW5lZCB8fCByZWxhdGl2ZS5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vdGFyZ2V0LmF1dGhvcml0eSA9IHJlbGF0aXZlLmF1dGhvcml0eTtcbiAgICAgICAgICAgIHRhcmdldC51c2VyaW5mbyA9IHJlbGF0aXZlLnVzZXJpbmZvO1xuICAgICAgICAgICAgdGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICAgICAgdGFyZ2V0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoIHx8IFwiXCIpO1xuICAgICAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXJlbGF0aXZlLnBhdGgpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aDtcbiAgICAgICAgICAgICAgICBpZiAocmVsYXRpdmUucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlbGF0aXZlLnBhdGguY2hhckF0KDApID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHJlbGF0aXZlLnBhdGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoYmFzZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IGJhc2UuaG9zdCAhPT0gdW5kZWZpbmVkIHx8IGJhc2UucG9ydCAhPT0gdW5kZWZpbmVkKSAmJiAhYmFzZS5wYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucGF0aCA9IFwiL1wiICsgcmVsYXRpdmUucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghYmFzZS5wYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbGF0aXZlLnBhdGg7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aC5zbGljZSgwLCBiYXNlLnBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSkgKyByZWxhdGl2ZS5wYXRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHModGFyZ2V0LnBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vdGFyZ2V0LmF1dGhvcml0eSA9IGJhc2UuYXV0aG9yaXR5O1xuICAgICAgICAgICAgdGFyZ2V0LnVzZXJpbmZvID0gYmFzZS51c2VyaW5mbztcbiAgICAgICAgICAgIHRhcmdldC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdGFyZ2V0LnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0LnNjaGVtZSA9IGJhc2Uuc2NoZW1lO1xuICAgIH1cbiAgICB0YXJnZXQuZnJhZ21lbnQgPSByZWxhdGl2ZS5mcmFnbWVudDtcbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlKGJhc2VVUkksIHJlbGF0aXZlVVJJLCBvcHRpb25zKSB7XG4gICAgdmFyIHNjaGVtZWxlc3NPcHRpb25zID0gYXNzaWduKHsgc2NoZW1lOiAnbnVsbCcgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZShyZXNvbHZlQ29tcG9uZW50cyhwYXJzZShiYXNlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHBhcnNlKHJlbGF0aXZlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHNjaGVtZWxlc3NPcHRpb25zLCB0cnVlKSwgc2NoZW1lbGVzc09wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemUodXJpLCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiB1cmkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdXJpID0gc2VyaWFsaXplKHBhcnNlKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodHlwZU9mKHVyaSkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdXJpID0gcGFyc2Uoc2VyaWFsaXplKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdXJpO1xufVxuXG5mdW5jdGlvbiBlcXVhbCh1cmlBLCB1cmlCLCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiB1cmlBID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHVyaUEgPSBzZXJpYWxpemUocGFyc2UodXJpQSwgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodHlwZU9mKHVyaUEpID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHVyaUEgPSBzZXJpYWxpemUodXJpQSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdXJpQiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB1cmlCID0gc2VyaWFsaXplKHBhcnNlKHVyaUIsIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVPZih1cmlCKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB1cmlCID0gc2VyaWFsaXplKHVyaUIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdXJpQSA9PT0gdXJpQjtcbn1cblxuZnVuY3Rpb24gZXNjYXBlQ29tcG9uZW50KHN0ciwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdHIgJiYgc3RyLnRvU3RyaW5nKCkucmVwbGFjZSghb3B0aW9ucyB8fCAhb3B0aW9ucy5pcmkgPyBVUklfUFJPVE9DT0wuRVNDQVBFIDogSVJJX1BST1RPQ09MLkVTQ0FQRSwgcGN0RW5jQ2hhcik7XG59XG5cbmZ1bmN0aW9uIHVuZXNjYXBlQ29tcG9uZW50KHN0ciwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdHIgJiYgc3RyLnRvU3RyaW5nKCkucmVwbGFjZSghb3B0aW9ucyB8fCAhb3B0aW9ucy5pcmkgPyBVUklfUFJPVE9DT0wuUENUX0VOQ09ERUQgOiBJUklfUFJPVE9DT0wuUENUX0VOQ09ERUQsIHBjdERlY0NoYXJzKTtcbn1cblxudmFyIGhhbmRsZXIgPSB7XG4gICAgc2NoZW1lOiBcImh0dHBcIixcbiAgICBkb21haW5Ib3N0OiB0cnVlLFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShjb21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIC8vcmVwb3J0IG1pc3NpbmcgaG9zdFxuICAgICAgICBpZiAoIWNvbXBvbmVudHMuaG9zdCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJIVFRQIFVSSXMgbXVzdCBoYXZlIGEgaG9zdC5cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9LFxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gc2VyaWFsaXplKGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHNlY3VyZSA9IFN0cmluZyhjb21wb25lbnRzLnNjaGVtZSkudG9Mb3dlckNhc2UoKSA9PT0gXCJodHRwc1wiO1xuICAgICAgICAvL25vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XG4gICAgICAgIGlmIChjb21wb25lbnRzLnBvcnQgPT09IChzZWN1cmUgPyA0NDMgOiA4MCkgfHwgY29tcG9uZW50cy5wb3J0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLnBvcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy9ub3JtYWxpemUgdGhlIGVtcHR5IHBhdGhcbiAgICAgICAgaWYgKCFjb21wb25lbnRzLnBhdGgpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucGF0aCA9IFwiL1wiO1xuICAgICAgICB9XG4gICAgICAgIC8vTk9URTogV2UgZG8gbm90IHBhcnNlIHF1ZXJ5IHN0cmluZ3MgZm9yIEhUVFAgVVJJc1xuICAgICAgICAvL2FzIFdXVyBGb3JtIFVybCBFbmNvZGVkIHF1ZXJ5IHN0cmluZ3MgYXJlIHBhcnQgb2YgdGhlIEhUTUw0KyBzcGVjLFxuICAgICAgICAvL2FuZCBub3QgdGhlIEhUVFAgc3BlYy5cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufTtcblxudmFyIGhhbmRsZXIkMSA9IHtcbiAgICBzY2hlbWU6IFwiaHR0cHNcIixcbiAgICBkb21haW5Ib3N0OiBoYW5kbGVyLmRvbWFpbkhvc3QsXG4gICAgcGFyc2U6IGhhbmRsZXIucGFyc2UsXG4gICAgc2VyaWFsaXplOiBoYW5kbGVyLnNlcmlhbGl6ZVxufTtcblxuZnVuY3Rpb24gaXNTZWN1cmUod3NDb21wb25lbnRzKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB3c0NvbXBvbmVudHMuc2VjdXJlID09PSAnYm9vbGVhbicgPyB3c0NvbXBvbmVudHMuc2VjdXJlIDogU3RyaW5nKHdzQ29tcG9uZW50cy5zY2hlbWUpLnRvTG93ZXJDYXNlKCkgPT09IFwid3NzXCI7XG59XG4vL1JGQyA2NDU1XG52YXIgaGFuZGxlciQyID0ge1xuICAgIHNjaGVtZTogXCJ3c1wiLFxuICAgIGRvbWFpbkhvc3Q6IHRydWUsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHdzQ29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG4gICAgICAgIC8vaW5kaWNhdGUgaWYgdGhlIHNlY3VyZSBmbGFnIGlzIHNldFxuICAgICAgICB3c0NvbXBvbmVudHMuc2VjdXJlID0gaXNTZWN1cmUod3NDb21wb25lbnRzKTtcbiAgICAgICAgLy9jb25zdHJ1Y3QgcmVzb3VjZSBuYW1lXG4gICAgICAgIHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUgPSAod3NDb21wb25lbnRzLnBhdGggfHwgJy8nKSArICh3c0NvbXBvbmVudHMucXVlcnkgPyAnPycgKyB3c0NvbXBvbmVudHMucXVlcnkgOiAnJyk7XG4gICAgICAgIHdzQ29tcG9uZW50cy5wYXRoID0gdW5kZWZpbmVkO1xuICAgICAgICB3c0NvbXBvbmVudHMucXVlcnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB3c0NvbXBvbmVudHM7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIHNlcmlhbGl6ZSh3c0NvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgLy9ub3JtYWxpemUgdGhlIGRlZmF1bHQgcG9ydFxuICAgICAgICBpZiAod3NDb21wb25lbnRzLnBvcnQgPT09IChpc1NlY3VyZSh3c0NvbXBvbmVudHMpID8gNDQzIDogODApIHx8IHdzQ29tcG9uZW50cy5wb3J0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICB3c0NvbXBvbmVudHMucG9ydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvL2Vuc3VyZSBzY2hlbWUgbWF0Y2hlcyBzZWN1cmUgZmxhZ1xuICAgICAgICBpZiAodHlwZW9mIHdzQ29tcG9uZW50cy5zZWN1cmUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgd3NDb21wb25lbnRzLnNjaGVtZSA9IHdzQ29tcG9uZW50cy5zZWN1cmUgPyAnd3NzJyA6ICd3cyc7XG4gICAgICAgICAgICB3c0NvbXBvbmVudHMuc2VjdXJlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vcmVjb25zdHJ1Y3QgcGF0aCBmcm9tIHJlc291cmNlIG5hbWVcbiAgICAgICAgaWYgKHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUpIHtcbiAgICAgICAgICAgIHZhciBfd3NDb21wb25lbnRzJHJlc291cmMgPSB3c0NvbXBvbmVudHMucmVzb3VyY2VOYW1lLnNwbGl0KCc/JyksXG4gICAgICAgICAgICAgICAgX3dzQ29tcG9uZW50cyRyZXNvdXJjMiA9IHNsaWNlZFRvQXJyYXkoX3dzQ29tcG9uZW50cyRyZXNvdXJjLCAyKSxcbiAgICAgICAgICAgICAgICBwYXRoID0gX3dzQ29tcG9uZW50cyRyZXNvdXJjMlswXSxcbiAgICAgICAgICAgICAgICBxdWVyeSA9IF93c0NvbXBvbmVudHMkcmVzb3VyYzJbMV07XG5cbiAgICAgICAgICAgIHdzQ29tcG9uZW50cy5wYXRoID0gcGF0aCAmJiBwYXRoICE9PSAnLycgPyBwYXRoIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgd3NDb21wb25lbnRzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICAgICAgICB3c0NvbXBvbmVudHMucmVzb3VyY2VOYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vZm9yYmlkIGZyYWdtZW50IGNvbXBvbmVudFxuICAgICAgICB3c0NvbXBvbmVudHMuZnJhZ21lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB3c0NvbXBvbmVudHM7XG4gICAgfVxufTtcblxudmFyIGhhbmRsZXIkMyA9IHtcbiAgICBzY2hlbWU6IFwid3NzXCIsXG4gICAgZG9tYWluSG9zdDogaGFuZGxlciQyLmRvbWFpbkhvc3QsXG4gICAgcGFyc2U6IGhhbmRsZXIkMi5wYXJzZSxcbiAgICBzZXJpYWxpemU6IGhhbmRsZXIkMi5zZXJpYWxpemVcbn07XG5cbnZhciBPID0ge307XG52YXIgaXNJUkkgPSB0cnVlO1xuLy9SRkMgMzk4NlxudmFyIFVOUkVTRVJWRUQkJCA9IFwiW0EtWmEtejAtOVxcXFwtXFxcXC5cXFxcX1xcXFx+XCIgKyAoaXNJUkkgPyBcIlxcXFx4QTAtXFxcXHUyMDBEXFxcXHUyMDEwLVxcXFx1MjAyOVxcXFx1MjAyRi1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZFRlwiIDogXCJcIikgKyBcIl1cIjtcbnZhciBIRVhESUckJCA9IFwiWzAtOUEtRmEtZl1cIjsgLy9jYXNlLWluc2Vuc2l0aXZlXG52YXIgUENUX0VOQ09ERUQkID0gc3ViZXhwKHN1YmV4cChcIiVbRUZlZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVs4OUEtRmEtZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkpOyAvL2V4cGFuZGVkXG4vL1JGQyA1MzIyLCBleGNlcHQgdGhlc2Ugc3ltYm9scyBhcyBwZXIgUkZDIDYwNjg6IEAgOiAvID8gIyBbIF0gJiA7ID1cbi8vY29uc3QgQVRFWFQkJCA9IFwiW0EtWmEtejAtOVxcXFwhXFxcXCNcXFxcJFxcXFwlXFxcXCZcXFxcJ1xcXFwqXFxcXCtcXFxcLVxcXFwvXFxcXD1cXFxcP1xcXFxeXFxcXF9cXFxcYFxcXFx7XFxcXHxcXFxcfVxcXFx+XVwiO1xuLy9jb25zdCBXU1AkJCA9IFwiW1xcXFx4MjBcXFxceDA5XVwiO1xuLy9jb25zdCBPQlNfUVRFWFQkJCA9IFwiW1xcXFx4MDEtXFxcXHgwOFxcXFx4MEJcXFxceDBDXFxcXHgwRS1cXFxceDFGXFxcXHg3Rl1cIjsgIC8vKCVkMS04IC8gJWQxMS0xMiAvICVkMTQtMzEgLyAlZDEyNylcbi8vY29uc3QgUVRFWFQkJCA9IG1lcmdlKFwiW1xcXFx4MjFcXFxceDIzLVxcXFx4NUJcXFxceDVELVxcXFx4N0VdXCIsIE9CU19RVEVYVCQkKTsgIC8vJWQzMyAvICVkMzUtOTEgLyAlZDkzLTEyNiAvIG9icy1xdGV4dFxuLy9jb25zdCBWQ0hBUiQkID0gXCJbXFxcXHgyMS1cXFxceDdFXVwiO1xuLy9jb25zdCBXU1AkJCA9IFwiW1xcXFx4MjBcXFxceDA5XVwiO1xuLy9jb25zdCBPQlNfUVAkID0gc3ViZXhwKFwiXFxcXFxcXFxcIiArIG1lcmdlKFwiW1xcXFx4MDBcXFxceDBEXFxcXHgwQV1cIiwgT0JTX1FURVhUJCQpKTsgIC8vJWQwIC8gQ1IgLyBMRiAvIG9icy1xdGV4dFxuLy9jb25zdCBGV1MkID0gc3ViZXhwKHN1YmV4cChXU1AkJCArIFwiKlwiICsgXCJcXFxceDBEXFxcXHgwQVwiKSArIFwiP1wiICsgV1NQJCQgKyBcIitcIik7XG4vL2NvbnN0IFFVT1RFRF9QQUlSJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcXFxcXFwiICsgc3ViZXhwKFZDSEFSJCQgKyBcInxcIiArIFdTUCQkKSkgKyBcInxcIiArIE9CU19RUCQpO1xuLy9jb25zdCBRVU9URURfU1RSSU5HJCA9IHN1YmV4cCgnXFxcXFwiJyArIHN1YmV4cChGV1MkICsgXCI/XCIgKyBRQ09OVEVOVCQpICsgXCIqXCIgKyBGV1MkICsgXCI/XCIgKyAnXFxcXFwiJyk7XG52YXIgQVRFWFQkJCA9IFwiW0EtWmEtejAtOVxcXFwhXFxcXCRcXFxcJVxcXFwnXFxcXCpcXFxcK1xcXFwtXFxcXF5cXFxcX1xcXFxgXFxcXHtcXFxcfFxcXFx9XFxcXH5dXCI7XG52YXIgUVRFWFQkJCA9IFwiW1xcXFwhXFxcXCRcXFxcJVxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFwtXFxcXC4wLTlcXFxcPFxcXFw+QS1aXFxcXHg1RS1cXFxceDdFXVwiO1xudmFyIFZDSEFSJCQgPSBtZXJnZShRVEVYVCQkLCBcIltcXFxcXFxcIlxcXFxcXFxcXVwiKTtcbnZhciBTT01FX0RFTElNUyQkID0gXCJbXFxcXCFcXFxcJFxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFw7XFxcXDpcXFxcQF1cIjtcbnZhciBVTlJFU0VSVkVEID0gbmV3IFJlZ0V4cChVTlJFU0VSVkVEJCQsIFwiZ1wiKTtcbnZhciBQQ1RfRU5DT0RFRCA9IG5ldyBSZWdFeHAoUENUX0VOQ09ERUQkLCBcImdcIik7XG52YXIgTk9UX0xPQ0FMX1BBUlQgPSBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIEFURVhUJCQsIFwiW1xcXFwuXVwiLCAnW1xcXFxcIl0nLCBWQ0hBUiQkKSwgXCJnXCIpO1xudmFyIE5PVF9IRk5BTUUgPSBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIFVOUkVTRVJWRUQkJCwgU09NRV9ERUxJTVMkJCksIFwiZ1wiKTtcbnZhciBOT1RfSEZWQUxVRSA9IE5PVF9IRk5BTUU7XG5mdW5jdGlvbiBkZWNvZGVVbnJlc2VydmVkKHN0cikge1xuICAgIHZhciBkZWNTdHIgPSBwY3REZWNDaGFycyhzdHIpO1xuICAgIHJldHVybiAhZGVjU3RyLm1hdGNoKFVOUkVTRVJWRUQpID8gc3RyIDogZGVjU3RyO1xufVxudmFyIGhhbmRsZXIkNCA9IHtcbiAgICBzY2hlbWU6IFwibWFpbHRvXCIsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlJCQxKGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIG1haWx0b0NvbXBvbmVudHMgPSBjb21wb25lbnRzO1xuICAgICAgICB2YXIgdG8gPSBtYWlsdG9Db21wb25lbnRzLnRvID0gbWFpbHRvQ29tcG9uZW50cy5wYXRoID8gbWFpbHRvQ29tcG9uZW50cy5wYXRoLnNwbGl0KFwiLFwiKSA6IFtdO1xuICAgICAgICBtYWlsdG9Db21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChtYWlsdG9Db21wb25lbnRzLnF1ZXJ5KSB7XG4gICAgICAgICAgICB2YXIgdW5rbm93bkhlYWRlcnMgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBoZWFkZXJzID0ge307XG4gICAgICAgICAgICB2YXIgaGZpZWxkcyA9IG1haWx0b0NvbXBvbmVudHMucXVlcnkuc3BsaXQoXCImXCIpO1xuICAgICAgICAgICAgZm9yICh2YXIgeCA9IDAsIHhsID0gaGZpZWxkcy5sZW5ndGg7IHggPCB4bDsgKyt4KSB7XG4gICAgICAgICAgICAgICAgdmFyIGhmaWVsZCA9IGhmaWVsZHNbeF0uc3BsaXQoXCI9XCIpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoaGZpZWxkWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0b1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvQWRkcnMgPSBoZmllbGRbMV0uc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3ggPSAwLCBfeGwgPSB0b0FkZHJzLmxlbmd0aDsgX3ggPCBfeGw7ICsrX3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0by5wdXNoKHRvQWRkcnNbX3hdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3ViamVjdFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgbWFpbHRvQ29tcG9uZW50cy5zdWJqZWN0ID0gdW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzFdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYm9keVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgbWFpbHRvQ29tcG9uZW50cy5ib2R5ID0gdW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzFdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bkhlYWRlcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1t1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMF0sIG9wdGlvbnMpXSA9IHVuZXNjYXBlQ29tcG9uZW50KGhmaWVsZFsxXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodW5rbm93bkhlYWRlcnMpIG1haWx0b0NvbXBvbmVudHMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIH1cbiAgICAgICAgbWFpbHRvQ29tcG9uZW50cy5xdWVyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yICh2YXIgX3gyID0gMCwgX3hsMiA9IHRvLmxlbmd0aDsgX3gyIDwgX3hsMjsgKytfeDIpIHtcbiAgICAgICAgICAgIHZhciBhZGRyID0gdG9bX3gyXS5zcGxpdChcIkBcIik7XG4gICAgICAgICAgICBhZGRyWzBdID0gdW5lc2NhcGVDb21wb25lbnQoYWRkclswXSk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMudW5pY29kZVN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICAvL2NvbnZlcnQgVW5pY29kZSBJRE4gLT4gQVNDSUkgSUROXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkclsxXSA9IHB1bnljb2RlLnRvQVNDSUkodW5lc2NhcGVDb21wb25lbnQoYWRkclsxXSwgb3B0aW9ucykudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBtYWlsdG9Db21wb25lbnRzLmVycm9yID0gbWFpbHRvQ29tcG9uZW50cy5lcnJvciB8fCBcIkVtYWlsIGFkZHJlc3MncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB2aWEgcHVueWNvZGU6IFwiICsgZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZHJbMV0gPSB1bmVzY2FwZUNvbXBvbmVudChhZGRyWzFdLCBvcHRpb25zKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9bX3gyXSA9IGFkZHIuam9pbihcIkBcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1haWx0b0NvbXBvbmVudHM7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIHNlcmlhbGl6ZSQkMShtYWlsdG9Db21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBjb21wb25lbnRzID0gbWFpbHRvQ29tcG9uZW50cztcbiAgICAgICAgdmFyIHRvID0gdG9BcnJheShtYWlsdG9Db21wb25lbnRzLnRvKTtcbiAgICAgICAgaWYgKHRvKSB7XG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMCwgeGwgPSB0by5sZW5ndGg7IHggPCB4bDsgKyt4KSB7XG4gICAgICAgICAgICAgICAgdmFyIHRvQWRkciA9IFN0cmluZyh0b1t4XSk7XG4gICAgICAgICAgICAgICAgdmFyIGF0SWR4ID0gdG9BZGRyLmxhc3RJbmRleE9mKFwiQFwiKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9jYWxQYXJ0ID0gdG9BZGRyLnNsaWNlKDAsIGF0SWR4KS5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfTE9DQUxfUEFSVCwgcGN0RW5jQ2hhcik7XG4gICAgICAgICAgICAgICAgdmFyIGRvbWFpbiA9IHRvQWRkci5zbGljZShhdElkeCArIDEpO1xuICAgICAgICAgICAgICAgIC8vY29udmVydCBJRE4gdmlhIHB1bnljb2RlXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZG9tYWluID0gIW9wdGlvbnMuaXJpID8gcHVueWNvZGUudG9BU0NJSSh1bmVzY2FwZUNvbXBvbmVudChkb21haW4sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCkpIDogcHVueWNvZGUudG9Vbmljb2RlKGRvbWFpbik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkVtYWlsIGFkZHJlc3MncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBcIiArICghb3B0aW9ucy5pcmkgPyBcIkFTQ0lJXCIgOiBcIlVuaWNvZGVcIikgKyBcIiB2aWEgcHVueWNvZGU6IFwiICsgZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdG9beF0gPSBsb2NhbFBhcnQgKyBcIkBcIiArIGRvbWFpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBvbmVudHMucGF0aCA9IHRvLmpvaW4oXCIsXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoZWFkZXJzID0gbWFpbHRvQ29tcG9uZW50cy5oZWFkZXJzID0gbWFpbHRvQ29tcG9uZW50cy5oZWFkZXJzIHx8IHt9O1xuICAgICAgICBpZiAobWFpbHRvQ29tcG9uZW50cy5zdWJqZWN0KSBoZWFkZXJzW1wic3ViamVjdFwiXSA9IG1haWx0b0NvbXBvbmVudHMuc3ViamVjdDtcbiAgICAgICAgaWYgKG1haWx0b0NvbXBvbmVudHMuYm9keSkgaGVhZGVyc1tcImJvZHlcIl0gPSBtYWlsdG9Db21wb25lbnRzLmJvZHk7XG4gICAgICAgIHZhciBmaWVsZHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBoZWFkZXJzKSB7XG4gICAgICAgICAgICBpZiAoaGVhZGVyc1tuYW1lXSAhPT0gT1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKG5hbWUucmVwbGFjZShQQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShQQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpLnJlcGxhY2UoTk9UX0hGTkFNRSwgcGN0RW5jQ2hhcikgKyBcIj1cIiArIGhlYWRlcnNbbmFtZV0ucmVwbGFjZShQQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShQQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpLnJlcGxhY2UoTk9UX0hGVkFMVUUsIHBjdEVuY0NoYXIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5xdWVyeSA9IGZpZWxkcy5qb2luKFwiJlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59O1xuXG52YXIgVVJOX1BBUlNFID0gL14oW15cXDpdKylcXDooLiopLztcbi8vUkZDIDIxNDFcbnZhciBoYW5kbGVyJDUgPSB7XG4gICAgc2NoZW1lOiBcInVyblwiLFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZSQkMShjb21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gY29tcG9uZW50cy5wYXRoICYmIGNvbXBvbmVudHMucGF0aC5tYXRjaChVUk5fUEFSU0UpO1xuICAgICAgICB2YXIgdXJuQ29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG4gICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgICB2YXIgc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgdXJuQ29tcG9uZW50cy5zY2hlbWUgfHwgXCJ1cm5cIjtcbiAgICAgICAgICAgIHZhciBuaWQgPSBtYXRjaGVzWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB2YXIgbnNzID0gbWF0Y2hlc1syXTtcbiAgICAgICAgICAgIHZhciB1cm5TY2hlbWUgPSBzY2hlbWUgKyBcIjpcIiArIChvcHRpb25zLm5pZCB8fCBuaWQpO1xuICAgICAgICAgICAgdmFyIHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTW3VyblNjaGVtZV07XG4gICAgICAgICAgICB1cm5Db21wb25lbnRzLm5pZCA9IG5pZDtcbiAgICAgICAgICAgIHVybkNvbXBvbmVudHMubnNzID0gbnNzO1xuICAgICAgICAgICAgdXJuQ29tcG9uZW50cy5wYXRoID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHNjaGVtZUhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICB1cm5Db21wb25lbnRzID0gc2NoZW1lSGFuZGxlci5wYXJzZSh1cm5Db21wb25lbnRzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybkNvbXBvbmVudHMuZXJyb3IgPSB1cm5Db21wb25lbnRzLmVycm9yIHx8IFwiVVJOIGNhbiBub3QgYmUgcGFyc2VkLlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cm5Db21wb25lbnRzO1xuICAgIH0sXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbiBzZXJpYWxpemUkJDEodXJuQ29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgdXJuQ29tcG9uZW50cy5zY2hlbWUgfHwgXCJ1cm5cIjtcbiAgICAgICAgdmFyIG5pZCA9IHVybkNvbXBvbmVudHMubmlkO1xuICAgICAgICB2YXIgdXJuU2NoZW1lID0gc2NoZW1lICsgXCI6XCIgKyAob3B0aW9ucy5uaWQgfHwgbmlkKTtcbiAgICAgICAgdmFyIHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTW3VyblNjaGVtZV07XG4gICAgICAgIGlmIChzY2hlbWVIYW5kbGVyKSB7XG4gICAgICAgICAgICB1cm5Db21wb25lbnRzID0gc2NoZW1lSGFuZGxlci5zZXJpYWxpemUodXJuQ29tcG9uZW50cywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVyaUNvbXBvbmVudHMgPSB1cm5Db21wb25lbnRzO1xuICAgICAgICB2YXIgbnNzID0gdXJuQ29tcG9uZW50cy5uc3M7XG4gICAgICAgIHVyaUNvbXBvbmVudHMucGF0aCA9IChuaWQgfHwgb3B0aW9ucy5uaWQpICsgXCI6XCIgKyBuc3M7XG4gICAgICAgIHJldHVybiB1cmlDb21wb25lbnRzO1xuICAgIH1cbn07XG5cbnZhciBVVUlEID0gL15bMC05QS1GYS1mXXs4fSg/OlxcLVswLTlBLUZhLWZdezR9KXszfVxcLVswLTlBLUZhLWZdezEyfSQvO1xuLy9SRkMgNDEyMlxudmFyIGhhbmRsZXIkNiA9IHtcbiAgICBzY2hlbWU6IFwidXJuOnV1aWRcIixcbiAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UodXJuQ29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgdXVpZENvbXBvbmVudHMgPSB1cm5Db21wb25lbnRzO1xuICAgICAgICB1dWlkQ29tcG9uZW50cy51dWlkID0gdXVpZENvbXBvbmVudHMubnNzO1xuICAgICAgICB1dWlkQ29tcG9uZW50cy5uc3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghb3B0aW9ucy50b2xlcmFudCAmJiAoIXV1aWRDb21wb25lbnRzLnV1aWQgfHwgIXV1aWRDb21wb25lbnRzLnV1aWQubWF0Y2goVVVJRCkpKSB7XG4gICAgICAgICAgICB1dWlkQ29tcG9uZW50cy5lcnJvciA9IHV1aWRDb21wb25lbnRzLmVycm9yIHx8IFwiVVVJRCBpcyBub3QgdmFsaWQuXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHV1aWRDb21wb25lbnRzO1xuICAgIH0sXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbiBzZXJpYWxpemUodXVpZENvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHVybkNvbXBvbmVudHMgPSB1dWlkQ29tcG9uZW50cztcbiAgICAgICAgLy9ub3JtYWxpemUgVVVJRFxuICAgICAgICB1cm5Db21wb25lbnRzLm5zcyA9ICh1dWlkQ29tcG9uZW50cy51dWlkIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiB1cm5Db21wb25lbnRzO1xuICAgIH1cbn07XG5cblNDSEVNRVNbaGFuZGxlci5zY2hlbWVdID0gaGFuZGxlcjtcblNDSEVNRVNbaGFuZGxlciQxLnNjaGVtZV0gPSBoYW5kbGVyJDE7XG5TQ0hFTUVTW2hhbmRsZXIkMi5zY2hlbWVdID0gaGFuZGxlciQyO1xuU0NIRU1FU1toYW5kbGVyJDMuc2NoZW1lXSA9IGhhbmRsZXIkMztcblNDSEVNRVNbaGFuZGxlciQ0LnNjaGVtZV0gPSBoYW5kbGVyJDQ7XG5TQ0hFTUVTW2hhbmRsZXIkNS5zY2hlbWVdID0gaGFuZGxlciQ1O1xuU0NIRU1FU1toYW5kbGVyJDYuc2NoZW1lXSA9IGhhbmRsZXIkNjtcblxuZXhwb3J0cy5TQ0hFTUVTID0gU0NIRU1FUztcbmV4cG9ydHMucGN0RW5jQ2hhciA9IHBjdEVuY0NoYXI7XG5leHBvcnRzLnBjdERlY0NoYXJzID0gcGN0RGVjQ2hhcnM7XG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5leHBvcnRzLnJlbW92ZURvdFNlZ21lbnRzID0gcmVtb3ZlRG90U2VnbWVudHM7XG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcbmV4cG9ydHMucmVzb2x2ZUNvbXBvbmVudHMgPSByZXNvbHZlQ29tcG9uZW50cztcbmV4cG9ydHMucmVzb2x2ZSA9IHJlc29sdmU7XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbmV4cG9ydHMuZXF1YWwgPSBlcXVhbDtcbmV4cG9ydHMuZXNjYXBlQ29tcG9uZW50ID0gZXNjYXBlQ29tcG9uZW50O1xuZXhwb3J0cy51bmVzY2FwZUNvbXBvbmVudCA9IHVuZXNjYXBlQ29tcG9uZW50O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXJpLmFsbC5qcy5tYXBcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1cmkgPSByZXF1aXJlKFwidXJpLWpzXCIpO1xudXJpLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdXJpXCIpLmRlZmF1bHQnO1xuZXhwb3J0cy5kZWZhdWx0ID0gdXJpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXJpLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvZGVHZW4gPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSBleHBvcnRzLktleXdvcmRDeHQgPSB2b2lkIDA7XG52YXIgdmFsaWRhdGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdmFsaWRhdGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJLZXl3b3JkQ3h0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWxpZGF0ZV8xLktleXdvcmRDeHQ7IH0gfSk7XG52YXIgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLl87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5zdHI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5zdHJpbmdpZnk7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJuaWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5uaWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuTmFtZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvZGVHZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5Db2RlR2VuOyB9IH0pO1xuY29uc3QgdmFsaWRhdGlvbl9lcnJvcl8xID0gcmVxdWlyZShcIi4vcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpO1xuY29uc3QgcmVmX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3JlZl9lcnJvclwiKTtcbmNvbnN0IHJ1bGVzXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3J1bGVzXCIpO1xuY29uc3QgY29tcGlsZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZVwiKTtcbmNvbnN0IGNvZGVnZW5fMiA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVzb2x2ZVwiKTtcbmNvbnN0IGRhdGFUeXBlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3ZhbGlkYXRlL2RhdGFUeXBlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgJGRhdGFSZWZTY2hlbWEgPSByZXF1aXJlKFwiLi9yZWZzL2RhdGEuanNvblwiKTtcbmNvbnN0IHVyaV8xID0gcmVxdWlyZShcIi4vcnVudGltZS91cmlcIik7XG5jb25zdCBkZWZhdWx0UmVnRXhwID0gKHN0ciwgZmxhZ3MpID0+IG5ldyBSZWdFeHAoc3RyLCBmbGFncyk7XG5kZWZhdWx0UmVnRXhwLmNvZGUgPSBcIm5ldyBSZWdFeHBcIjtcbmNvbnN0IE1FVEFfSUdOT1JFX09QVElPTlMgPSBbXCJyZW1vdmVBZGRpdGlvbmFsXCIsIFwidXNlRGVmYXVsdHNcIiwgXCJjb2VyY2VUeXBlc1wiXTtcbmNvbnN0IEVYVF9TQ09QRV9OQU1FUyA9IG5ldyBTZXQoW1xuICAgIFwidmFsaWRhdGVcIixcbiAgICBcInNlcmlhbGl6ZVwiLFxuICAgIFwicGFyc2VcIixcbiAgICBcIndyYXBwZXJcIixcbiAgICBcInJvb3RcIixcbiAgICBcInNjaGVtYVwiLFxuICAgIFwia2V5d29yZFwiLFxuICAgIFwicGF0dGVyblwiLFxuICAgIFwiZm9ybWF0c1wiLFxuICAgIFwidmFsaWRhdGUkZGF0YVwiLFxuICAgIFwiZnVuY1wiLFxuICAgIFwib2JqXCIsXG4gICAgXCJFcnJvclwiLFxuXSk7XG5jb25zdCByZW1vdmVkT3B0aW9ucyA9IHtcbiAgICBlcnJvckRhdGFQYXRoOiBcIlwiLFxuICAgIGZvcm1hdDogXCJgdmFsaWRhdGVGb3JtYXRzOiBmYWxzZWAgY2FuIGJlIHVzZWQgaW5zdGVhZC5cIixcbiAgICBudWxsYWJsZTogJ1wibnVsbGFibGVcIiBrZXl3b3JkIGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0LicsXG4gICAganNvblBvaW50ZXJzOiBcIkRlcHJlY2F0ZWQganNQcm9wZXJ0eVN5bnRheCBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIGV4dGVuZFJlZnM6IFwiRGVwcmVjYXRlZCBpZ25vcmVLZXl3b3Jkc1dpdGhSZWYgY2FuIGJlIHVzZWQgaW5zdGVhZC5cIixcbiAgICBtaXNzaW5nUmVmczogXCJQYXNzIGVtcHR5IHNjaGVtYSB3aXRoICRpZCB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIHRvIGFqdi5hZGRTY2hlbWEuXCIsXG4gICAgcHJvY2Vzc0NvZGU6IFwiVXNlIG9wdGlvbiBgY29kZToge3Byb2Nlc3M6IChjb2RlLCBzY2hlbWFFbnY6IG9iamVjdCkgPT4gc3RyaW5nfWBcIixcbiAgICBzb3VyY2VDb2RlOiBcIlVzZSBvcHRpb24gYGNvZGU6IHtzb3VyY2U6IHRydWV9YFwiLFxuICAgIHN0cmljdERlZmF1bHRzOiBcIkl0IGlzIGRlZmF1bHQgbm93LCBzZWUgb3B0aW9uIGBzdHJpY3RgLlwiLFxuICAgIHN0cmljdEtleXdvcmRzOiBcIkl0IGlzIGRlZmF1bHQgbm93LCBzZWUgb3B0aW9uIGBzdHJpY3RgLlwiLFxuICAgIHVuaXF1ZUl0ZW1zOiAnXCJ1bmlxdWVJdGVtc1wiIGtleXdvcmQgaXMgYWx3YXlzIHZhbGlkYXRlZC4nLFxuICAgIHVua25vd25Gb3JtYXRzOiBcIkRpc2FibGUgc3RyaWN0IG1vZGUgb3IgcGFzcyBgdHJ1ZWAgdG8gYGFqdi5hZGRGb3JtYXRgIChvciBgZm9ybWF0c2Agb3B0aW9uKS5cIixcbiAgICBjYWNoZTogXCJNYXAgaXMgdXNlZCBhcyBjYWNoZSwgc2NoZW1hIG9iamVjdCBhcyBrZXkuXCIsXG4gICAgc2VyaWFsaXplOiBcIk1hcCBpcyB1c2VkIGFzIGNhY2hlLCBzY2hlbWEgb2JqZWN0IGFzIGtleS5cIixcbiAgICBhanZFcnJvcnM6IFwiSXQgaXMgZGVmYXVsdCBub3cuXCIsXG59O1xuY29uc3QgZGVwcmVjYXRlZE9wdGlvbnMgPSB7XG4gICAgaWdub3JlS2V5d29yZHNXaXRoUmVmOiBcIlwiLFxuICAgIGpzUHJvcGVydHlTeW50YXg6IFwiXCIsXG4gICAgdW5pY29kZTogJ1wibWluTGVuZ3RoXCIvXCJtYXhMZW5ndGhcIiBhY2NvdW50IGZvciB1bmljb2RlIGNoYXJhY3RlcnMgYnkgZGVmYXVsdC4nLFxufTtcbmNvbnN0IE1BWF9FWFBSRVNTSU9OID0gMjAwO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHJlcXVpcmVkT3B0aW9ucyhvKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2osIF9rLCBfbCwgX20sIF9vLCBfcCwgX3EsIF9yLCBfcywgX3QsIF91LCBfdiwgX3csIF94LCBfeSwgX3osIF8wO1xuICAgIGNvbnN0IHMgPSBvLnN0cmljdDtcbiAgICBjb25zdCBfb3B0eiA9IChfYSA9IG8uY29kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplO1xuICAgIGNvbnN0IG9wdGltaXplID0gX29wdHogPT09IHRydWUgfHwgX29wdHogPT09IHVuZGVmaW5lZCA/IDEgOiBfb3B0eiB8fCAwO1xuICAgIGNvbnN0IHJlZ0V4cCA9IChfYyA9IChfYiA9IG8uY29kZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnJlZ0V4cCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZGVmYXVsdFJlZ0V4cDtcbiAgICBjb25zdCB1cmlSZXNvbHZlciA9IChfZCA9IG8udXJpUmVzb2x2ZXIpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IHVyaV8xLmRlZmF1bHQ7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RyaWN0U2NoZW1hOiAoX2YgPSAoX2UgPSBvLnN0cmljdFNjaGVtYSkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogcykgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogdHJ1ZSxcbiAgICAgICAgc3RyaWN0TnVtYmVyczogKF9oID0gKF9nID0gby5zdHJpY3ROdW1iZXJzKSAhPT0gbnVsbCAmJiBfZyAhPT0gdm9pZCAwID8gX2cgOiBzKSAhPT0gbnVsbCAmJiBfaCAhPT0gdm9pZCAwID8gX2ggOiB0cnVlLFxuICAgICAgICBzdHJpY3RUeXBlczogKF9rID0gKF9qID0gby5zdHJpY3RUeXBlcykgIT09IG51bGwgJiYgX2ogIT09IHZvaWQgMCA/IF9qIDogcykgIT09IG51bGwgJiYgX2sgIT09IHZvaWQgMCA/IF9rIDogXCJsb2dcIixcbiAgICAgICAgc3RyaWN0VHVwbGVzOiAoX20gPSAoX2wgPSBvLnN0cmljdFR1cGxlcykgIT09IG51bGwgJiYgX2wgIT09IHZvaWQgMCA/IF9sIDogcykgIT09IG51bGwgJiYgX20gIT09IHZvaWQgMCA/IF9tIDogXCJsb2dcIixcbiAgICAgICAgc3RyaWN0UmVxdWlyZWQ6IChfcCA9IChfbyA9IG8uc3RyaWN0UmVxdWlyZWQpICE9PSBudWxsICYmIF9vICE9PSB2b2lkIDAgPyBfbyA6IHMpICE9PSBudWxsICYmIF9wICE9PSB2b2lkIDAgPyBfcCA6IGZhbHNlLFxuICAgICAgICBjb2RlOiBvLmNvZGUgPyB7IC4uLm8uY29kZSwgb3B0aW1pemUsIHJlZ0V4cCB9IDogeyBvcHRpbWl6ZSwgcmVnRXhwIH0sXG4gICAgICAgIGxvb3BSZXF1aXJlZDogKF9xID0gby5sb29wUmVxdWlyZWQpICE9PSBudWxsICYmIF9xICE9PSB2b2lkIDAgPyBfcSA6IE1BWF9FWFBSRVNTSU9OLFxuICAgICAgICBsb29wRW51bTogKF9yID0gby5sb29wRW51bSkgIT09IG51bGwgJiYgX3IgIT09IHZvaWQgMCA/IF9yIDogTUFYX0VYUFJFU1NJT04sXG4gICAgICAgIG1ldGE6IChfcyA9IG8ubWV0YSkgIT09IG51bGwgJiYgX3MgIT09IHZvaWQgMCA/IF9zIDogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZXM6IChfdCA9IG8ubWVzc2FnZXMpICE9PSBudWxsICYmIF90ICE9PSB2b2lkIDAgPyBfdCA6IHRydWUsXG4gICAgICAgIGlubGluZVJlZnM6IChfdSA9IG8uaW5saW5lUmVmcykgIT09IG51bGwgJiYgX3UgIT09IHZvaWQgMCA/IF91IDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hSWQ6IChfdiA9IG8uc2NoZW1hSWQpICE9PSBudWxsICYmIF92ICE9PSB2b2lkIDAgPyBfdiA6IFwiJGlkXCIsXG4gICAgICAgIGFkZFVzZWRTY2hlbWE6IChfdyA9IG8uYWRkVXNlZFNjaGVtYSkgIT09IG51bGwgJiYgX3cgIT09IHZvaWQgMCA/IF93IDogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdGVTY2hlbWE6IChfeCA9IG8udmFsaWRhdGVTY2hlbWEpICE9PSBudWxsICYmIF94ICE9PSB2b2lkIDAgPyBfeCA6IHRydWUsXG4gICAgICAgIHZhbGlkYXRlRm9ybWF0czogKF95ID0gby52YWxpZGF0ZUZvcm1hdHMpICE9PSBudWxsICYmIF95ICE9PSB2b2lkIDAgPyBfeSA6IHRydWUsXG4gICAgICAgIHVuaWNvZGVSZWdFeHA6IChfeiA9IG8udW5pY29kZVJlZ0V4cCkgIT09IG51bGwgJiYgX3ogIT09IHZvaWQgMCA/IF96IDogdHJ1ZSxcbiAgICAgICAgaW50MzJyYW5nZTogKF8wID0gby5pbnQzMnJhbmdlKSAhPT0gbnVsbCAmJiBfMCAhPT0gdm9pZCAwID8gXzAgOiB0cnVlLFxuICAgICAgICB1cmlSZXNvbHZlcjogdXJpUmVzb2x2ZXIsXG4gICAgfTtcbn1cbmNsYXNzIEFqdiB7XG4gICAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgICAgIHRoaXMuc2NoZW1hcyA9IHt9O1xuICAgICAgICB0aGlzLnJlZnMgPSB7fTtcbiAgICAgICAgdGhpcy5mb3JtYXRzID0ge307XG4gICAgICAgIHRoaXMuX2NvbXBpbGF0aW9ucyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5fbG9hZGluZyA9IHt9O1xuICAgICAgICB0aGlzLl9jYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgb3B0cyA9IHRoaXMub3B0cyA9IHsgLi4ub3B0cywgLi4ucmVxdWlyZWRPcHRpb25zKG9wdHMpIH07XG4gICAgICAgIGNvbnN0IHsgZXM1LCBsaW5lcyB9ID0gdGhpcy5vcHRzLmNvZGU7XG4gICAgICAgIHRoaXMuc2NvcGUgPSBuZXcgY29kZWdlbl8yLlZhbHVlU2NvcGUoeyBzY29wZToge30sIHByZWZpeGVzOiBFWFRfU0NPUEVfTkFNRVMsIGVzNSwgbGluZXMgfSk7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKG9wdHMubG9nZ2VyKTtcbiAgICAgICAgY29uc3QgZm9ybWF0T3B0ID0gb3B0cy52YWxpZGF0ZUZvcm1hdHM7XG4gICAgICAgIG9wdHMudmFsaWRhdGVGb3JtYXRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuUlVMRVMgPSAoMCwgcnVsZXNfMS5nZXRSdWxlcykoKTtcbiAgICAgICAgY2hlY2tPcHRpb25zLmNhbGwodGhpcywgcmVtb3ZlZE9wdGlvbnMsIG9wdHMsIFwiTk9UIFNVUFBPUlRFRFwiKTtcbiAgICAgICAgY2hlY2tPcHRpb25zLmNhbGwodGhpcywgZGVwcmVjYXRlZE9wdGlvbnMsIG9wdHMsIFwiREVQUkVDQVRFRFwiLCBcIndhcm5cIik7XG4gICAgICAgIHRoaXMuX21ldGFPcHRzID0gZ2V0TWV0YVNjaGVtYU9wdGlvbnMuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKG9wdHMuZm9ybWF0cylcbiAgICAgICAgICAgIGFkZEluaXRpYWxGb3JtYXRzLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuX2FkZFZvY2FidWxhcmllcygpO1xuICAgICAgICB0aGlzLl9hZGREZWZhdWx0TWV0YVNjaGVtYSgpO1xuICAgICAgICBpZiAob3B0cy5rZXl3b3JkcylcbiAgICAgICAgICAgIGFkZEluaXRpYWxLZXl3b3Jkcy5jYWxsKHRoaXMsIG9wdHMua2V5d29yZHMpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdHMubWV0YSA9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKG9wdHMubWV0YSk7XG4gICAgICAgIGFkZEluaXRpYWxTY2hlbWFzLmNhbGwodGhpcyk7XG4gICAgICAgIG9wdHMudmFsaWRhdGVGb3JtYXRzID0gZm9ybWF0T3B0O1xuICAgIH1cbiAgICBfYWRkVm9jYWJ1bGFyaWVzKCkge1xuICAgICAgICB0aGlzLmFkZEtleXdvcmQoXCIkYXN5bmNcIik7XG4gICAgfVxuICAgIF9hZGREZWZhdWx0TWV0YVNjaGVtYSgpIHtcbiAgICAgICAgY29uc3QgeyAkZGF0YSwgbWV0YSwgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgbGV0IF9kYXRhUmVmU2NoZW1hID0gJGRhdGFSZWZTY2hlbWE7XG4gICAgICAgIGlmIChzY2hlbWFJZCA9PT0gXCJpZFwiKSB7XG4gICAgICAgICAgICBfZGF0YVJlZlNjaGVtYSA9IHsgLi4uJGRhdGFSZWZTY2hlbWEgfTtcbiAgICAgICAgICAgIF9kYXRhUmVmU2NoZW1hLmlkID0gX2RhdGFSZWZTY2hlbWEuJGlkO1xuICAgICAgICAgICAgZGVsZXRlIF9kYXRhUmVmU2NoZW1hLiRpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YSAmJiAkZGF0YSlcbiAgICAgICAgICAgIHRoaXMuYWRkTWV0YVNjaGVtYShfZGF0YVJlZlNjaGVtYSwgX2RhdGFSZWZTY2hlbWFbc2NoZW1hSWRdLCBmYWxzZSk7XG4gICAgfVxuICAgIGRlZmF1bHRNZXRhKCkge1xuICAgICAgICBjb25zdCB7IG1ldGEsIHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIHJldHVybiAodGhpcy5vcHRzLmRlZmF1bHRNZXRhID0gdHlwZW9mIG1ldGEgPT0gXCJvYmplY3RcIiA/IG1ldGFbc2NoZW1hSWRdIHx8IG1ldGEgOiB1bmRlZmluZWQpO1xuICAgIH1cbiAgICB2YWxpZGF0ZShzY2hlbWFLZXlSZWYsIC8vIGtleSwgcmVmIG9yIHNjaGVtYSBvYmplY3RcbiAgICBkYXRhIC8vIHRvIGJlIHZhbGlkYXRlZFxuICAgICkge1xuICAgICAgICBsZXQgdjtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFLZXlSZWYgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdiA9IHRoaXMuZ2V0U2NoZW1hKHNjaGVtYUtleVJlZik7XG4gICAgICAgICAgICBpZiAoIXYpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBzY2hlbWEgd2l0aCBrZXkgb3IgcmVmIFwiJHtzY2hlbWFLZXlSZWZ9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHYgPSB0aGlzLmNvbXBpbGUoc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZCA9IHYoZGF0YSk7XG4gICAgICAgIGlmICghKFwiJGFzeW5jXCIgaW4gdikpXG4gICAgICAgICAgICB0aGlzLmVycm9ycyA9IHYuZXJyb3JzO1xuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfVxuICAgIGNvbXBpbGUoc2NoZW1hLCBfbWV0YSkge1xuICAgICAgICBjb25zdCBzY2ggPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCBfbWV0YSk7XG4gICAgICAgIHJldHVybiAoc2NoLnZhbGlkYXRlIHx8IHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSk7XG4gICAgfVxuICAgIGNvbXBpbGVBc3luYyhzY2hlbWEsIG1ldGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMubG9hZFNjaGVtYSAhPSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm9wdGlvbnMubG9hZFNjaGVtYSBzaG91bGQgYmUgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGxvYWRTY2hlbWEgfSA9IHRoaXMub3B0cztcbiAgICAgICAgcmV0dXJuIHJ1bkNvbXBpbGVBc3luYy5jYWxsKHRoaXMsIHNjaGVtYSwgbWV0YSk7XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbXBpbGVBc3luYyhfc2NoZW1hLCBfbWV0YSkge1xuICAgICAgICAgICAgYXdhaXQgbG9hZE1ldGFTY2hlbWEuY2FsbCh0aGlzLCBfc2NoZW1hLiRzY2hlbWEpO1xuICAgICAgICAgICAgY29uc3Qgc2NoID0gdGhpcy5fYWRkU2NoZW1hKF9zY2hlbWEsIF9tZXRhKTtcbiAgICAgICAgICAgIHJldHVybiBzY2gudmFsaWRhdGUgfHwgX2NvbXBpbGVBc3luYy5jYWxsKHRoaXMsIHNjaCk7XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZE1ldGFTY2hlbWEoJHJlZikge1xuICAgICAgICAgICAgaWYgKCRyZWYgJiYgIXRoaXMuZ2V0U2NoZW1hKCRyZWYpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcnVuQ29tcGlsZUFzeW5jLmNhbGwodGhpcywgeyAkcmVmIH0sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIF9jb21waWxlQXN5bmMoc2NoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb21waWxlU2NoZW1hRW52KHNjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiByZWZfZXJyb3JfMS5kZWZhdWx0KSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICBjaGVja0xvYWRlZC5jYWxsKHRoaXMsIGUpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvYWRNaXNzaW5nU2NoZW1hLmNhbGwodGhpcywgZS5taXNzaW5nU2NoZW1hKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbXBpbGVBc3luYy5jYWxsKHRoaXMsIHNjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkZWQoeyBtaXNzaW5nU2NoZW1hOiByZWYsIG1pc3NpbmdSZWYgfSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVmc1tyZWZdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbnlTY2hlbWEgJHtyZWZ9IGlzIGxvYWRlZCBidXQgJHttaXNzaW5nUmVmfSBjYW5ub3QgYmUgcmVzb2x2ZWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBsb2FkTWlzc2luZ1NjaGVtYShyZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IF9zY2hlbWEgPSBhd2FpdCBfbG9hZFNjaGVtYS5jYWxsKHRoaXMsIHJlZik7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVmc1tyZWZdKVxuICAgICAgICAgICAgICAgIGF3YWl0IGxvYWRNZXRhU2NoZW1hLmNhbGwodGhpcywgX3NjaGVtYS4kc2NoZW1hKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZWZzW3JlZl0pXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTY2hlbWEoX3NjaGVtYSwgcmVmLCBtZXRhKTtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBfbG9hZFNjaGVtYShyZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLl9sb2FkaW5nW3JlZl07XG4gICAgICAgICAgICBpZiAocClcbiAgICAgICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0ICh0aGlzLl9sb2FkaW5nW3JlZl0gPSBsb2FkU2NoZW1hKHJlZikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xvYWRpbmdbcmVmXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBZGRzIHNjaGVtYSB0byB0aGUgaW5zdGFuY2VcbiAgICBhZGRTY2hlbWEoc2NoZW1hLCAvLyBJZiBhcnJheSBpcyBwYXNzZWQsIGBrZXlgIHdpbGwgYmUgaWdub3JlZFxuICAgIGtleSwgLy8gT3B0aW9uYWwgc2NoZW1hIGtleS4gQ2FuIGJlIHBhc3NlZCB0byBgdmFsaWRhdGVgIG1ldGhvZCBpbnN0ZWFkIG9mIHNjaGVtYSBvYmplY3Qgb3IgaWQvcmVmLiBPbmUgc2NoZW1hIHBlciBpbnN0YW5jZSBjYW4gaGF2ZSBlbXB0eSBgaWRgIGFuZCBga2V5YC5cbiAgICBfbWV0YSwgLy8gdHJ1ZSBpZiBzY2hlbWEgaXMgYSBtZXRhLXNjaGVtYS4gVXNlZCBpbnRlcm5hbGx5LCBhZGRNZXRhU2NoZW1hIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gICAgX3ZhbGlkYXRlU2NoZW1hID0gdGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hIC8vIGZhbHNlIHRvIHNraXAgc2NoZW1hIHZhbGlkYXRpb24uIFVzZWQgaW50ZXJuYWxseSwgb3B0aW9uIHZhbGlkYXRlU2NoZW1hIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gICAgKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NoIG9mIHNjaGVtYSlcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFNjaGVtYShzY2gsIHVuZGVmaW5lZCwgX21ldGEsIF92YWxpZGF0ZVNjaGVtYSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgICAgICBpZCA9IHNjaGVtYVtzY2hlbWFJZF07XG4gICAgICAgICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgaWQgIT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2NoZW1hICR7c2NoZW1hSWR9IG11c3QgYmUgc3RyaW5nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5ID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoa2V5IHx8IGlkKTtcbiAgICAgICAgdGhpcy5fY2hlY2tVbmlxdWUoa2V5KTtcbiAgICAgICAgdGhpcy5zY2hlbWFzW2tleV0gPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCBfbWV0YSwga2V5LCBfdmFsaWRhdGVTY2hlbWEsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gQWRkIHNjaGVtYSB0aGF0IHdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBvdGhlciBzY2hlbWFzXG4gICAgLy8gb3B0aW9ucyBpbiBNRVRBX0lHTk9SRV9PUFRJT05TIGFyZSBhbHdheSBzZXQgdG8gZmFsc2VcbiAgICBhZGRNZXRhU2NoZW1hKHNjaGVtYSwga2V5LCAvLyBzY2hlbWEga2V5XG4gICAgX3ZhbGlkYXRlU2NoZW1hID0gdGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hIC8vIGZhbHNlIHRvIHNraXAgc2NoZW1hIHZhbGlkYXRpb24sIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHZhbGlkYXRlU2NoZW1hIG9wdGlvbiBmb3IgbWV0YS1zY2hlbWFcbiAgICApIHtcbiAgICAgICAgdGhpcy5hZGRTY2hlbWEoc2NoZW1hLCBrZXksIHRydWUsIF92YWxpZGF0ZVNjaGVtYSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyAgVmFsaWRhdGUgc2NoZW1hIGFnYWluc3QgaXRzIG1ldGEtc2NoZW1hXG4gICAgdmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0aHJvd09yTG9nRXJyb3IpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgbGV0ICRzY2hlbWE7XG4gICAgICAgICRzY2hlbWEgPSBzY2hlbWEuJHNjaGVtYTtcbiAgICAgICAgaWYgKCRzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgJHNjaGVtYSAhPSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIkc2NoZW1hIG11c3QgYmUgYSBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgJHNjaGVtYSA9ICRzY2hlbWEgfHwgdGhpcy5vcHRzLmRlZmF1bHRNZXRhIHx8IHRoaXMuZGVmYXVsdE1ldGEoKTtcbiAgICAgICAgaWYgKCEkc2NoZW1hKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwibWV0YS1zY2hlbWEgbm90IGF2YWlsYWJsZVwiKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gdGhpcy52YWxpZGF0ZSgkc2NoZW1hLCBzY2hlbWEpO1xuICAgICAgICBpZiAoIXZhbGlkICYmIHRocm93T3JMb2dFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFwic2NoZW1hIGlzIGludmFsaWQ6IFwiICsgdGhpcy5lcnJvcnNUZXh0KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hID09PSBcImxvZ1wiKVxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfVxuICAgIC8vIEdldCBjb21waWxlZCBzY2hlbWEgYnkgYGtleWAgb3IgYHJlZmAuXG4gICAgLy8gKGBrZXlgIHRoYXQgd2FzIHBhc3NlZCB0byBgYWRkU2NoZW1hYCBvciBmdWxsIHNjaGVtYSByZWZlcmVuY2UgLSBgc2NoZW1hLiRpZGAgb3IgcmVzb2x2ZWQgaWQpXG4gICAgZ2V0U2NoZW1hKGtleVJlZikge1xuICAgICAgICBsZXQgc2NoO1xuICAgICAgICB3aGlsZSAodHlwZW9mIChzY2ggPSBnZXRTY2hFbnYuY2FsbCh0aGlzLCBrZXlSZWYpKSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAga2V5UmVmID0gc2NoO1xuICAgICAgICBpZiAoc2NoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgY29tcGlsZV8xLlNjaGVtYUVudih7IHNjaGVtYToge30sIHNjaGVtYUlkIH0pO1xuICAgICAgICAgICAgc2NoID0gY29tcGlsZV8xLnJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCBrZXlSZWYpO1xuICAgICAgICAgICAgaWYgKCFzY2gpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5yZWZzW2tleVJlZl0gPSBzY2g7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChzY2gudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZVNjaGVtYUVudihzY2gpKTtcbiAgICB9XG4gICAgLy8gUmVtb3ZlIGNhY2hlZCBzY2hlbWEocykuXG4gICAgLy8gSWYgbm8gcGFyYW1ldGVyIGlzIHBhc3NlZCBhbGwgc2NoZW1hcyBidXQgbWV0YS1zY2hlbWFzIGFyZSByZW1vdmVkLlxuICAgIC8vIElmIFJlZ0V4cCBpcyBwYXNzZWQgYWxsIHNjaGVtYXMgd2l0aCBrZXkvaWQgbWF0Y2hpbmcgcGF0dGVybiBidXQgbWV0YS1zY2hlbWFzIGFyZSByZW1vdmVkLlxuICAgIC8vIEV2ZW4gaWYgc2NoZW1hIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgc2NoZW1hcyBpdCBzdGlsbCBjYW4gYmUgcmVtb3ZlZCBhcyBvdGhlciBzY2hlbWFzIGhhdmUgbG9jYWwgcmVmZXJlbmNlcy5cbiAgICByZW1vdmVTY2hlbWEoc2NoZW1hS2V5UmVmKSB7XG4gICAgICAgIGlmIChzY2hlbWFLZXlSZWYgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5zY2hlbWFzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnJlZnMsIHNjaGVtYUtleVJlZik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiBzY2hlbWFLZXlSZWYpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMuc2NoZW1hcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnJlZnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2ggPSBnZXRTY2hFbnYuY2FsbCh0aGlzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRlbGV0ZShzY2guc2NoZW1hKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zY2hlbWFzW3NjaGVtYUtleVJlZl07XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVmc1tzY2hlbWFLZXlSZWZdO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBzY2hlbWFLZXlSZWY7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgICAgICAgICAgICBsZXQgaWQgPSBzY2hlbWFLZXlSZWZbdGhpcy5vcHRzLnNjaGVtYUlkXTtcbiAgICAgICAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWQgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShpZCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNjaGVtYXNbaWRdO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yZWZzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdi5yZW1vdmVTY2hlbWE6IGludmFsaWQgcGFyYW1ldGVyXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGFkZCBcInZvY2FidWxhcnlcIiAtIGEgY29sbGVjdGlvbiBvZiBrZXl3b3Jkc1xuICAgIGFkZFZvY2FidWxhcnkoZGVmaW5pdGlvbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBkZWYgb2YgZGVmaW5pdGlvbnMpXG4gICAgICAgICAgICB0aGlzLmFkZEtleXdvcmQoZGVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFkZEtleXdvcmQoa3dkT3JEZWYsIGRlZiAvLyBkZXByZWNhdGVkXG4gICAgKSB7XG4gICAgICAgIGxldCBrZXl3b3JkO1xuICAgICAgICBpZiAodHlwZW9mIGt3ZE9yRGVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGtleXdvcmQgPSBrd2RPckRlZjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGVmID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwidGhlc2UgcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCwgc2VlIGRvY3MgZm9yIGFkZEtleXdvcmRcIik7XG4gICAgICAgICAgICAgICAgZGVmLmtleXdvcmQgPSBrZXl3b3JkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBrd2RPckRlZiA9PSBcIm9iamVjdFwiICYmIGRlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkZWYgPSBrd2RPckRlZjtcbiAgICAgICAgICAgIGtleXdvcmQgPSBkZWYua2V5d29yZDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleXdvcmQpICYmICFrZXl3b3JkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFkZEtleXdvcmRzOiBrZXl3b3JkIG11c3QgYmUgc3RyaW5nIG9yIG5vbi1lbXB0eSBhcnJheVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgYWRkS2V5d29yZHMgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjaGVja0tleXdvcmQuY2FsbCh0aGlzLCBrZXl3b3JkLCBkZWYpO1xuICAgICAgICBpZiAoIWRlZikge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5lYWNoSXRlbSkoa2V5d29yZCwgKGt3ZCkgPT4gYWRkUnVsZS5jYWxsKHRoaXMsIGt3ZCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAga2V5d29yZE1ldGFzY2hlbWEuY2FsbCh0aGlzLCBkZWYpO1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgLi4uZGVmLFxuICAgICAgICAgICAgdHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWYudHlwZSksXG4gICAgICAgICAgICBzY2hlbWFUeXBlOiAoMCwgZGF0YVR5cGVfMS5nZXRKU09OVHlwZXMpKGRlZi5zY2hlbWFUeXBlKSxcbiAgICAgICAgfTtcbiAgICAgICAgKDAsIHV0aWxfMS5lYWNoSXRlbSkoa2V5d29yZCwgZGVmaW5pdGlvbi50eXBlLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgPyAoaykgPT4gYWRkUnVsZS5jYWxsKHRoaXMsIGssIGRlZmluaXRpb24pXG4gICAgICAgICAgICA6IChrKSA9PiBkZWZpbml0aW9uLnR5cGUuZm9yRWFjaCgodCkgPT4gYWRkUnVsZS5jYWxsKHRoaXMsIGssIGRlZmluaXRpb24sIHQpKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXRLZXl3b3JkKGtleXdvcmQpIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuUlVMRVMuYWxsW2tleXdvcmRdO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHJ1bGUgPT0gXCJvYmplY3RcIiA/IHJ1bGUuZGVmaW5pdGlvbiA6ICEhcnVsZTtcbiAgICB9XG4gICAgLy8gUmVtb3ZlIGtleXdvcmRcbiAgICByZW1vdmVLZXl3b3JkKGtleXdvcmQpIHtcbiAgICAgICAgLy8gVE9ETyByZXR1cm4gdHlwZSBzaG91bGQgYmUgQWp2XG4gICAgICAgIGNvbnN0IHsgUlVMRVMgfSA9IHRoaXM7XG4gICAgICAgIGRlbGV0ZSBSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXTtcbiAgICAgICAgZGVsZXRlIFJVTEVTLmFsbFtrZXl3b3JkXTtcbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBSVUxFUy5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgaSA9IGdyb3VwLnJ1bGVzLmZpbmRJbmRleCgocnVsZSkgPT4gcnVsZS5rZXl3b3JkID09PSBrZXl3b3JkKTtcbiAgICAgICAgICAgIGlmIChpID49IDApXG4gICAgICAgICAgICAgICAgZ3JvdXAucnVsZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBBZGQgZm9ybWF0XG4gICAgYWRkRm9ybWF0KG5hbWUsIGZvcm1hdCkge1xuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdCA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgZm9ybWF0ID0gbmV3IFJlZ0V4cChmb3JtYXQpO1xuICAgICAgICB0aGlzLmZvcm1hdHNbbmFtZV0gPSBmb3JtYXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBlcnJvcnNUZXh0KGVycm9ycyA9IHRoaXMuZXJyb3JzLCAvLyBvcHRpb25hbCBhcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yc1xuICAgIHsgc2VwYXJhdG9yID0gXCIsIFwiLCBkYXRhVmFyID0gXCJkYXRhXCIgfSA9IHt9IC8vIG9wdGlvbmFsIG9wdGlvbnMgd2l0aCBwcm9wZXJ0aWVzIGBzZXBhcmF0b3JgIGFuZCBgZGF0YVZhcmBcbiAgICApIHtcbiAgICAgICAgaWYgKCFlcnJvcnMgfHwgZXJyb3JzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiBcIk5vIGVycm9yc1wiO1xuICAgICAgICByZXR1cm4gZXJyb3JzXG4gICAgICAgICAgICAubWFwKChlKSA9PiBgJHtkYXRhVmFyfSR7ZS5pbnN0YW5jZVBhdGh9ICR7ZS5tZXNzYWdlfWApXG4gICAgICAgICAgICAucmVkdWNlKCh0ZXh0LCBtc2cpID0+IHRleHQgKyBzZXBhcmF0b3IgKyBtc2cpO1xuICAgIH1cbiAgICAkZGF0YU1ldGFTY2hlbWEobWV0YVNjaGVtYSwga2V5d29yZHNKc29uUG9pbnRlcnMpIHtcbiAgICAgICAgY29uc3QgcnVsZXMgPSB0aGlzLlJVTEVTLmFsbDtcbiAgICAgICAgbWV0YVNjaGVtYSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobWV0YVNjaGVtYSkpO1xuICAgICAgICBmb3IgKGNvbnN0IGpzb25Qb2ludGVyIG9mIGtleXdvcmRzSnNvblBvaW50ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBzZWdtZW50cyA9IGpzb25Qb2ludGVyLnNwbGl0KFwiL1wiKS5zbGljZSgxKTsgLy8gZmlyc3Qgc2VnbWVudCBpcyBhbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgICAgIGxldCBrZXl3b3JkcyA9IG1ldGFTY2hlbWE7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlZyBvZiBzZWdtZW50cylcbiAgICAgICAgICAgICAgICBrZXl3b3JkcyA9IGtleXdvcmRzW3NlZ107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBydWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlc1trZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB7ICRkYXRhIH0gPSBydWxlLmRlZmluaXRpb247XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0ga2V5d29yZHNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoJGRhdGEgJiYgc2NoZW1hKVxuICAgICAgICAgICAgICAgICAgICBrZXl3b3Jkc1trZXldID0gc2NoZW1hT3JEYXRhKHNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ldGFTY2hlbWE7XG4gICAgfVxuICAgIF9yZW1vdmVBbGxTY2hlbWFzKHNjaGVtYXMsIHJlZ2V4KSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5UmVmIGluIHNjaGVtYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaCA9IHNjaGVtYXNba2V5UmVmXTtcbiAgICAgICAgICAgIGlmICghcmVnZXggfHwgcmVnZXgudGVzdChrZXlSZWYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2ggPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2NoZW1hc1trZXlSZWZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2ggJiYgIXNjaC5tZXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRlbGV0ZShzY2guc2NoZW1hKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYXNba2V5UmVmXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2FkZFNjaGVtYShzY2hlbWEsIG1ldGEsIGJhc2VJZCwgdmFsaWRhdGVTY2hlbWEgPSB0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEsIGFkZFNjaGVtYSA9IHRoaXMub3B0cy5hZGRVc2VkU2NoZW1hKSB7XG4gICAgICAgIGxldCBpZDtcbiAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZCA9IHNjaGVtYVtzY2hlbWFJZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRzLmp0ZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY2hlbWEgbXVzdCBiZSBvYmplY3RcIik7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc2NoZW1hICE9IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNjaGVtYSBtdXN0IGJlIG9iamVjdCBvciBib29sZWFuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzY2ggPSB0aGlzLl9jYWNoZS5nZXQoc2NoZW1hKTtcbiAgICAgICAgaWYgKHNjaCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHNjaDtcbiAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoaWQgfHwgYmFzZUlkKTtcbiAgICAgICAgY29uc3QgbG9jYWxSZWZzID0gcmVzb2x2ZV8xLmdldFNjaGVtYVJlZnMuY2FsbCh0aGlzLCBzY2hlbWEsIGJhc2VJZCk7XG4gICAgICAgIHNjaCA9IG5ldyBjb21waWxlXzEuU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgbWV0YSwgYmFzZUlkLCBsb2NhbFJlZnMgfSk7XG4gICAgICAgIHRoaXMuX2NhY2hlLnNldChzY2guc2NoZW1hLCBzY2gpO1xuICAgICAgICBpZiAoYWRkU2NoZW1hICYmICFiYXNlSWQuc3RhcnRzV2l0aChcIiNcIikpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gYXRtIGl0IGlzIGFsbG93ZWQgdG8gb3ZlcndyaXRlIHNjaGVtYXMgd2l0aG91dCBpZCAoaW5zdGVhZCBvZiBub3QgYWRkaW5nIHRoZW0pXG4gICAgICAgICAgICBpZiAoYmFzZUlkKVxuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrVW5pcXVlKGJhc2VJZCk7XG4gICAgICAgICAgICB0aGlzLnJlZnNbYmFzZUlkXSA9IHNjaDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsaWRhdGVTY2hlbWEpXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBzY2g7XG4gICAgfVxuICAgIF9jaGVja1VuaXF1ZShpZCkge1xuICAgICAgICBpZiAodGhpcy5zY2hlbWFzW2lkXSB8fCB0aGlzLnJlZnNbaWRdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNjaGVtYSB3aXRoIGtleSBvciBpZCBcIiR7aWR9XCIgYWxyZWFkeSBleGlzdHNgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfY29tcGlsZVNjaGVtYUVudihzY2gpIHtcbiAgICAgICAgaWYgKHNjaC5tZXRhKVxuICAgICAgICAgICAgdGhpcy5fY29tcGlsZU1ldGFTY2hlbWEoc2NoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY29tcGlsZV8xLmNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFzY2gudmFsaWRhdGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgIHJldHVybiBzY2gudmFsaWRhdGU7XG4gICAgfVxuICAgIF9jb21waWxlTWV0YVNjaGVtYShzY2gpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE9wdHMgPSB0aGlzLm9wdHM7XG4gICAgICAgIHRoaXMub3B0cyA9IHRoaXMuX21ldGFPcHRzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29tcGlsZV8xLmNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5vcHRzID0gY3VycmVudE9wdHM7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBBanY7XG5BanYuVmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGlvbl9lcnJvcl8xLmRlZmF1bHQ7XG5BanYuTWlzc2luZ1JlZkVycm9yID0gcmVmX2Vycm9yXzEuZGVmYXVsdDtcbmZ1bmN0aW9uIGNoZWNrT3B0aW9ucyhjaGVja09wdHMsIG9wdGlvbnMsIG1zZywgbG9nID0gXCJlcnJvclwiKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY2hlY2tPcHRzKSB7XG4gICAgICAgIGNvbnN0IG9wdCA9IGtleTtcbiAgICAgICAgaWYgKG9wdCBpbiBvcHRpb25zKVxuICAgICAgICAgICAgdGhpcy5sb2dnZXJbbG9nXShgJHttc2d9OiBvcHRpb24gJHtrZXl9LiAke2NoZWNrT3B0c1tvcHRdfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFNjaEVudihrZXlSZWYpIHtcbiAgICBrZXlSZWYgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShrZXlSZWYpOyAvLyBUT0RPIHRlc3RzIGZhaWwgd2l0aG91dCB0aGlzIGxpbmVcbiAgICByZXR1cm4gdGhpcy5zY2hlbWFzW2tleVJlZl0gfHwgdGhpcy5yZWZzW2tleVJlZl07XG59XG5mdW5jdGlvbiBhZGRJbml0aWFsU2NoZW1hcygpIHtcbiAgICBjb25zdCBvcHRzU2NoZW1hcyA9IHRoaXMub3B0cy5zY2hlbWFzO1xuICAgIGlmICghb3B0c1NjaGVtYXMpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRzU2NoZW1hcykpXG4gICAgICAgIHRoaXMuYWRkU2NoZW1hKG9wdHNTY2hlbWFzKTtcbiAgICBlbHNlXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9wdHNTY2hlbWFzKVxuICAgICAgICAgICAgdGhpcy5hZGRTY2hlbWEob3B0c1NjaGVtYXNba2V5XSwga2V5KTtcbn1cbmZ1bmN0aW9uIGFkZEluaXRpYWxGb3JtYXRzKCkge1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiB0aGlzLm9wdHMuZm9ybWF0cykge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLm9wdHMuZm9ybWF0c1tuYW1lXTtcbiAgICAgICAgaWYgKGZvcm1hdClcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybWF0KG5hbWUsIGZvcm1hdCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkSW5pdGlhbEtleXdvcmRzKGRlZnMpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZzKSkge1xuICAgICAgICB0aGlzLmFkZFZvY2FidWxhcnkoZGVmcyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sb2dnZXIud2FybihcImtleXdvcmRzIG9wdGlvbiBhcyBtYXAgaXMgZGVwcmVjYXRlZCwgcGFzcyBhcnJheVwiKTtcbiAgICBmb3IgKGNvbnN0IGtleXdvcmQgaW4gZGVmcykge1xuICAgICAgICBjb25zdCBkZWYgPSBkZWZzW2tleXdvcmRdO1xuICAgICAgICBpZiAoIWRlZi5rZXl3b3JkKVxuICAgICAgICAgICAgZGVmLmtleXdvcmQgPSBrZXl3b3JkO1xuICAgICAgICB0aGlzLmFkZEtleXdvcmQoZGVmKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRNZXRhU2NoZW1hT3B0aW9ucygpIHtcbiAgICBjb25zdCBtZXRhT3B0cyA9IHsgLi4udGhpcy5vcHRzIH07XG4gICAgZm9yIChjb25zdCBvcHQgb2YgTUVUQV9JR05PUkVfT1BUSU9OUylcbiAgICAgICAgZGVsZXRlIG1ldGFPcHRzW29wdF07XG4gICAgcmV0dXJuIG1ldGFPcHRzO1xufVxuY29uc3Qgbm9Mb2dzID0geyBsb2coKSB7IH0sIHdhcm4oKSB7IH0sIGVycm9yKCkgeyB9IH07XG5mdW5jdGlvbiBnZXRMb2dnZXIobG9nZ2VyKSB7XG4gICAgaWYgKGxvZ2dlciA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBub0xvZ3M7XG4gICAgaWYgKGxvZ2dlciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gY29uc29sZTtcbiAgICBpZiAobG9nZ2VyLmxvZyAmJiBsb2dnZXIud2FybiAmJiBsb2dnZXIuZXJyb3IpXG4gICAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibG9nZ2VyIG11c3QgaW1wbGVtZW50IGxvZywgd2FybiBhbmQgZXJyb3IgbWV0aG9kc1wiKTtcbn1cbmNvbnN0IEtFWVdPUkRfTkFNRSA9IC9eW2Etel8kXVthLXowLTlfJDotXSokL2k7XG5mdW5jdGlvbiBjaGVja0tleXdvcmQoa2V5d29yZCwgZGVmKSB7XG4gICAgY29uc3QgeyBSVUxFUyB9ID0gdGhpcztcbiAgICAoMCwgdXRpbF8xLmVhY2hJdGVtKShrZXl3b3JkLCAoa3dkKSA9PiB7XG4gICAgICAgIGlmIChSVUxFUy5rZXl3b3Jkc1trd2RdKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXl3b3JkICR7a3dkfSBpcyBhbHJlYWR5IGRlZmluZWRgKTtcbiAgICAgICAgaWYgKCFLRVlXT1JEX05BTUUudGVzdChrd2QpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXl3b3JkICR7a3dkfSBoYXMgaW52YWxpZCBuYW1lYCk7XG4gICAgfSk7XG4gICAgaWYgKCFkZWYpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoZGVmLiRkYXRhICYmICEoXCJjb2RlXCIgaW4gZGVmIHx8IFwidmFsaWRhdGVcIiBpbiBkZWYpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignJGRhdGEga2V5d29yZCBtdXN0IGhhdmUgXCJjb2RlXCIgb3IgXCJ2YWxpZGF0ZVwiIGZ1bmN0aW9uJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkUnVsZShrZXl3b3JkLCBkZWZpbml0aW9uLCBkYXRhVHlwZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBwb3N0ID0gZGVmaW5pdGlvbiA9PT0gbnVsbCB8fCBkZWZpbml0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWZpbml0aW9uLnBvc3Q7XG4gICAgaWYgKGRhdGFUeXBlICYmIHBvc3QpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigna2V5d29yZCB3aXRoIFwicG9zdFwiIGZsYWcgY2Fubm90IGhhdmUgXCJ0eXBlXCInKTtcbiAgICBjb25zdCB7IFJVTEVTIH0gPSB0aGlzO1xuICAgIGxldCBydWxlR3JvdXAgPSBwb3N0ID8gUlVMRVMucG9zdCA6IFJVTEVTLnJ1bGVzLmZpbmQoKHsgdHlwZTogdCB9KSA9PiB0ID09PSBkYXRhVHlwZSk7XG4gICAgaWYgKCFydWxlR3JvdXApIHtcbiAgICAgICAgcnVsZUdyb3VwID0geyB0eXBlOiBkYXRhVHlwZSwgcnVsZXM6IFtdIH07XG4gICAgICAgIFJVTEVTLnJ1bGVzLnB1c2gocnVsZUdyb3VwKTtcbiAgICB9XG4gICAgUlVMRVMua2V5d29yZHNba2V5d29yZF0gPSB0cnVlO1xuICAgIGlmICghZGVmaW5pdGlvbilcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgIGtleXdvcmQsXG4gICAgICAgIGRlZmluaXRpb246IHtcbiAgICAgICAgICAgIC4uLmRlZmluaXRpb24sXG4gICAgICAgICAgICB0eXBlOiAoMCwgZGF0YVR5cGVfMS5nZXRKU09OVHlwZXMpKGRlZmluaXRpb24udHlwZSksXG4gICAgICAgICAgICBzY2hlbWFUeXBlOiAoMCwgZGF0YVR5cGVfMS5nZXRKU09OVHlwZXMpKGRlZmluaXRpb24uc2NoZW1hVHlwZSksXG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBpZiAoZGVmaW5pdGlvbi5iZWZvcmUpXG4gICAgICAgIGFkZEJlZm9yZVJ1bGUuY2FsbCh0aGlzLCBydWxlR3JvdXAsIHJ1bGUsIGRlZmluaXRpb24uYmVmb3JlKTtcbiAgICBlbHNlXG4gICAgICAgIHJ1bGVHcm91cC5ydWxlcy5wdXNoKHJ1bGUpO1xuICAgIFJVTEVTLmFsbFtrZXl3b3JkXSA9IHJ1bGU7XG4gICAgKF9hID0gZGVmaW5pdGlvbi5pbXBsZW1lbnRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9yRWFjaCgoa3dkKSA9PiB0aGlzLmFkZEtleXdvcmQoa3dkKSk7XG59XG5mdW5jdGlvbiBhZGRCZWZvcmVSdWxlKHJ1bGVHcm91cCwgcnVsZSwgYmVmb3JlKSB7XG4gICAgY29uc3QgaSA9IHJ1bGVHcm91cC5ydWxlcy5maW5kSW5kZXgoKF9ydWxlKSA9PiBfcnVsZS5rZXl3b3JkID09PSBiZWZvcmUpO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgICAgcnVsZUdyb3VwLnJ1bGVzLnNwbGljZShpLCAwLCBydWxlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJ1bGVHcm91cC5ydWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBydWxlICR7YmVmb3JlfSBpcyBub3QgZGVmaW5lZGApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGtleXdvcmRNZXRhc2NoZW1hKGRlZikge1xuICAgIGxldCB7IG1ldGFTY2hlbWEgfSA9IGRlZjtcbiAgICBpZiAobWV0YVNjaGVtYSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKGRlZi4kZGF0YSAmJiB0aGlzLm9wdHMuJGRhdGEpXG4gICAgICAgIG1ldGFTY2hlbWEgPSBzY2hlbWFPckRhdGEobWV0YVNjaGVtYSk7XG4gICAgZGVmLnZhbGlkYXRlU2NoZW1hID0gdGhpcy5jb21waWxlKG1ldGFTY2hlbWEsIHRydWUpO1xufVxuY29uc3QgJGRhdGFSZWYgPSB7XG4gICAgJHJlZjogXCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYWp2LXZhbGlkYXRvci9hanYvbWFzdGVyL2xpYi9yZWZzL2RhdGEuanNvbiNcIixcbn07XG5mdW5jdGlvbiBzY2hlbWFPckRhdGEoc2NoZW1hKSB7XG4gICAgcmV0dXJuIHsgYW55T2Y6IFtzY2hlbWEsICRkYXRhUmVmXSB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29yZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiaWRcIixcbiAgICBjb2RlKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05PVCBTVVBQT1JURUQ6IGtleXdvcmQgXCJpZFwiLCB1c2UgXCIkaWRcIiBmb3Igc2NoZW1hIElEJyk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jYWxsUmVmID0gZXhwb3J0cy5nZXRWYWxpZGF0ZSA9IHZvaWQgMDtcbmNvbnN0IHJlZl9lcnJvcl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL25hbWVzXCIpO1xuY29uc3QgY29tcGlsZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiJHJlZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYTogJHJlZiwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBiYXNlSWQsIHNjaGVtYUVudjogZW52LCB2YWxpZGF0ZU5hbWUsIG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgICAgICBjb25zdCB7IHJvb3QgfSA9IGVudjtcbiAgICAgICAgaWYgKCgkcmVmID09PSBcIiNcIiB8fCAkcmVmID09PSBcIiMvXCIpICYmIGJhc2VJZCA9PT0gcm9vdC5iYXNlSWQpXG4gICAgICAgICAgICByZXR1cm4gY2FsbFJvb3RSZWYoKTtcbiAgICAgICAgY29uc3Qgc2NoT3JFbnYgPSBjb21waWxlXzEucmVzb2x2ZVJlZi5jYWxsKHNlbGYsIHJvb3QsIGJhc2VJZCwgJHJlZik7XG4gICAgICAgIGlmIChzY2hPckVudiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IHJlZl9lcnJvcl8xLmRlZmF1bHQoaXQub3B0cy51cmlSZXNvbHZlciwgYmFzZUlkLCAkcmVmKTtcbiAgICAgICAgaWYgKHNjaE9yRW52IGluc3RhbmNlb2YgY29tcGlsZV8xLlNjaGVtYUVudilcbiAgICAgICAgICAgIHJldHVybiBjYWxsVmFsaWRhdGUoc2NoT3JFbnYpO1xuICAgICAgICByZXR1cm4gaW5saW5lUmVmU2NoZW1hKHNjaE9yRW52KTtcbiAgICAgICAgZnVuY3Rpb24gY2FsbFJvb3RSZWYoKSB7XG4gICAgICAgICAgICBpZiAoZW52ID09PSByb290KVxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsUmVmKGN4dCwgdmFsaWRhdGVOYW1lLCBlbnYsIGVudi4kYXN5bmMpO1xuICAgICAgICAgICAgY29uc3Qgcm9vdE5hbWUgPSBnZW4uc2NvcGVWYWx1ZShcInJvb3RcIiwgeyByZWY6IHJvb3QgfSk7XG4gICAgICAgICAgICByZXR1cm4gY2FsbFJlZihjeHQsICgwLCBjb2RlZ2VuXzEuXykgYCR7cm9vdE5hbWV9LnZhbGlkYXRlYCwgcm9vdCwgcm9vdC4kYXN5bmMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxWYWxpZGF0ZShzY2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBnZXRWYWxpZGF0ZShjeHQsIHNjaCk7XG4gICAgICAgICAgICBjYWxsUmVmKGN4dCwgdiwgc2NoLCBzY2guJGFzeW5jKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpbmxpbmVSZWZTY2hlbWEoc2NoKSB7XG4gICAgICAgICAgICBjb25zdCBzY2hOYW1lID0gZ2VuLnNjb3BlVmFsdWUoXCJzY2hlbWFcIiwgb3B0cy5jb2RlLnNvdXJjZSA9PT0gdHJ1ZSA/IHsgcmVmOiBzY2gsIGNvZGU6ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShzY2gpIH0gOiB7IHJlZjogc2NoIH0pO1xuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgc2NoZW1hOiBzY2gsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGVzOiBbXSxcbiAgICAgICAgICAgICAgICBzY2hlbWFQYXRoOiBjb2RlZ2VuXzEubmlsLFxuICAgICAgICAgICAgICAgIHRvcFNjaGVtYVJlZjogc2NoTmFtZSxcbiAgICAgICAgICAgICAgICBlcnJTY2hlbWFQYXRoOiAkcmVmLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5mdW5jdGlvbiBnZXRWYWxpZGF0ZShjeHQsIHNjaCkge1xuICAgIGNvbnN0IHsgZ2VuIH0gPSBjeHQ7XG4gICAgcmV0dXJuIHNjaC52YWxpZGF0ZVxuICAgICAgICA/IGdlbi5zY29wZVZhbHVlKFwidmFsaWRhdGVcIiwgeyByZWY6IHNjaC52YWxpZGF0ZSB9KVxuICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7Z2VuLnNjb3BlVmFsdWUoXCJ3cmFwcGVyXCIsIHsgcmVmOiBzY2ggfSl9LnZhbGlkYXRlYDtcbn1cbmV4cG9ydHMuZ2V0VmFsaWRhdGUgPSBnZXRWYWxpZGF0ZTtcbmZ1bmN0aW9uIGNhbGxSZWYoY3h0LCB2LCBzY2gsICRhc3luYykge1xuICAgIGNvbnN0IHsgZ2VuLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgYWxsRXJyb3JzLCBzY2hlbWFFbnY6IGVudiwgb3B0cyB9ID0gaXQ7XG4gICAgY29uc3QgcGFzc0N4dCA9IG9wdHMucGFzc0NvbnRleHQgPyBuYW1lc18xLmRlZmF1bHQudGhpcyA6IGNvZGVnZW5fMS5uaWw7XG4gICAgaWYgKCRhc3luYylcbiAgICAgICAgY2FsbEFzeW5jUmVmKCk7XG4gICAgZWxzZVxuICAgICAgICBjYWxsU3luY1JlZigpO1xuICAgIGZ1bmN0aW9uIGNhbGxBc3luY1JlZigpIHtcbiAgICAgICAgaWYgKCFlbnYuJGFzeW5jKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXN5bmMgc2NoZW1hIHJlZmVyZW5jZWQgYnkgc3luYyBzY2hlbWFcIik7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgICAgICBnZW4udHJ5KCgpID0+IHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0ICR7KDAsIGNvZGVfMS5jYWxsVmFsaWRhdGVDb2RlKShjeHQsIHYsIHBhc3NDeHQpfWApO1xuICAgICAgICAgICAgYWRkRXZhbHVhdGVkRnJvbSh2KTsgLy8gVE9ETyB3aWxsIG5vdCB3b3JrIHdpdGggYXN5bmMsIGl0IGhhcyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSByZXN1bHRcbiAgICAgICAgICAgIGlmICghYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCEoJHtlfSBpbnN0YW5jZW9mICR7aXQuVmFsaWRhdGlvbkVycm9yfSlgLCAoKSA9PiBnZW4udGhyb3coZSkpO1xuICAgICAgICAgICAgYWRkRXJyb3JzRnJvbShlKTtcbiAgICAgICAgICAgIGlmICghYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbGxTeW5jUmVmKCkge1xuICAgICAgICBjeHQucmVzdWx0KCgwLCBjb2RlXzEuY2FsbFZhbGlkYXRlQ29kZSkoY3h0LCB2LCBwYXNzQ3h0KSwgKCkgPT4gYWRkRXZhbHVhdGVkRnJvbSh2KSwgKCkgPT4gYWRkRXJyb3JzRnJvbSh2KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZEVycm9yc0Zyb20oc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGVycnMgPSAoMCwgY29kZWdlbl8xLl8pIGAke3NvdXJjZX0uZXJyb3JzYDtcbiAgICAgICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30gPT09IG51bGwgPyAke2VycnN9IDogJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30uY29uY2F0KCR7ZXJyc30pYCk7IC8vIFRPRE8gdGFnZ2VkXG4gICAgICAgIGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LmVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZEV2YWx1YXRlZEZyb20oc291cmNlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCFpdC5vcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzY2hFdmFsdWF0ZWQgPSAoX2EgPSBzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2gudmFsaWRhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ldmFsdWF0ZWQ7XG4gICAgICAgIC8vIFRPRE8gcmVmYWN0b3JcbiAgICAgICAgaWYgKGl0LnByb3BzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkICYmICFzY2hFdmFsdWF0ZWQuZHluYW1pY1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZC5wcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgc2NoRXZhbHVhdGVkLnByb3BzLCBpdC5wcm9wcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBnZW4udmFyKFwicHJvcHNcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtzb3VyY2V9LmV2YWx1YXRlZC5wcm9wc2ApO1xuICAgICAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgcHJvcHMsIGl0LnByb3BzLCBjb2RlZ2VuXzEuTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lml0ZW1zICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkICYmICFzY2hFdmFsdWF0ZWQuZHluYW1pY0l0ZW1zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZC5pdGVtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgc2NoRXZhbHVhdGVkLml0ZW1zLCBpdC5pdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBnZW4udmFyKFwiaXRlbXNcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtzb3VyY2V9LmV2YWx1YXRlZC5pdGVtc2ApO1xuICAgICAgICAgICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgaXRlbXMsIGl0Lml0ZW1zLCBjb2RlZ2VuXzEuTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmNhbGxSZWYgPSBjYWxsUmVmO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBpZF8xID0gcmVxdWlyZShcIi4vaWRcIik7XG5jb25zdCByZWZfMSA9IHJlcXVpcmUoXCIuL3JlZlwiKTtcbmNvbnN0IGNvcmUgPSBbXG4gICAgXCIkc2NoZW1hXCIsXG4gICAgXCIkaWRcIixcbiAgICBcIiRkZWZzXCIsXG4gICAgXCIkdm9jYWJ1bGFyeVwiLFxuICAgIHsga2V5d29yZDogXCIkY29tbWVudFwiIH0sXG4gICAgXCJkZWZpbml0aW9uc1wiLFxuICAgIGlkXzEuZGVmYXVsdCxcbiAgICByZWZfMS5kZWZhdWx0LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNvcmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IG9wcyA9IGNvZGVnZW5fMS5vcGVyYXRvcnM7XG5jb25zdCBLV0RzID0ge1xuICAgIG1heGltdW06IHsgb2tTdHI6IFwiPD1cIiwgb2s6IG9wcy5MVEUsIGZhaWw6IG9wcy5HVCB9LFxuICAgIG1pbmltdW06IHsgb2tTdHI6IFwiPj1cIiwgb2s6IG9wcy5HVEUsIGZhaWw6IG9wcy5MVCB9LFxuICAgIGV4Y2x1c2l2ZU1heGltdW06IHsgb2tTdHI6IFwiPFwiLCBvazogb3BzLkxULCBmYWlsOiBvcHMuR1RFIH0sXG4gICAgZXhjbHVzaXZlTWluaW11bTogeyBva1N0cjogXCI+XCIsIG9rOiBvcHMuR1QsIGZhaWw6IG9wcy5MVEUgfSxcbn07XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBiZSAke0tXRHNba2V5d29yZF0ub2tTdHJ9ICR7c2NoZW1hQ29kZX1gLFxuICAgIHBhcmFtczogKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7Y29tcGFyaXNvbjogJHtLV0RzW2tleXdvcmRdLm9rU3RyfSwgbGltaXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogT2JqZWN0LmtleXMoS1dEcyksXG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBzY2hlbWFUeXBlOiBcIm51bWJlclwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsga2V5d29yZCwgZGF0YSwgc2NoZW1hQ29kZSB9ID0gY3h0O1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gJHtLV0RzW2tleXdvcmRdLmZhaWx9ICR7c2NoZW1hQ29kZX0gfHwgaXNOYU4oJHtkYXRhfSlgKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbWl0TnVtYmVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgYmUgbXVsdGlwbGUgb2YgJHtzY2hlbWFDb2RlfWAsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHttdWx0aXBsZU9mOiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwibXVsdGlwbGVPZlwiLFxuICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgLy8gY29uc3QgYmR0ID0gYmFkJERhdGFUeXBlKHNjaGVtYUNvZGUsIDxzdHJpbmc+ZGVmLnNjaGVtYVR5cGUsICRkYXRhKVxuICAgICAgICBjb25zdCBwcmVjID0gaXQub3B0cy5tdWx0aXBsZU9mUHJlY2lzaW9uO1xuICAgICAgICBjb25zdCByZXMgPSBnZW4ubGV0KFwicmVzXCIpO1xuICAgICAgICBjb25zdCBpbnZhbGlkID0gcHJlY1xuICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGBNYXRoLmFicyhNYXRoLnJvdW5kKCR7cmVzfSkgLSAke3Jlc30pID4gMWUtJHtwcmVjfWBcbiAgICAgICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtyZXN9ICE9PSBwYXJzZUludCgke3Jlc30pYDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAoJHtzY2hlbWFDb2RlfSA9PT0gMCB8fCAoJHtyZXN9ID0gJHtkYXRhfS8ke3NjaGVtYUNvZGV9LCAke2ludmFsaWR9KSlgKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11bHRpcGxlT2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYmVzdGllanMvcHVueWNvZGUuanMgLSBwdW55Y29kZS51Y3MyLmRlY29kZVxuZnVuY3Rpb24gdWNzMmxlbmd0aChzdHIpIHtcbiAgICBjb25zdCBsZW4gPSBzdHIubGVuZ3RoO1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGxldCBwb3MgPSAwO1xuICAgIGxldCB2YWx1ZTtcbiAgICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgICAgIGxlbmd0aCsrO1xuICAgICAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcysrKTtcbiAgICAgICAgaWYgKHZhbHVlID49IDB4ZDgwMCAmJiB2YWx1ZSA8PSAweGRiZmYgJiYgcG9zIDwgbGVuKSB7XG4gICAgICAgICAgICAvLyBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIHZhbHVlID0gc3RyLmNoYXJDb2RlQXQocG9zKTtcbiAgICAgICAgICAgIGlmICgodmFsdWUgJiAweGZjMDApID09PSAweGRjMDApXG4gICAgICAgICAgICAgICAgcG9zKys7IC8vIGxvdyBzdXJyb2dhdGVcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gdWNzMmxlbmd0aDtcbnVjczJsZW5ndGguY29kZSA9ICdyZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS91Y3MybGVuZ3RoXCIpLmRlZmF1bHQnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dWNzMmxlbmd0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCB1Y3MybGVuZ3RoXzEgPSByZXF1aXJlKFwiLi4vLi4vcnVudGltZS91Y3MybGVuZ3RoXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZSh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkge1xuICAgICAgICBjb25zdCBjb21wID0ga2V5d29yZCA9PT0gXCJtYXhMZW5ndGhcIiA/IFwibW9yZVwiIDogXCJmZXdlclwiO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlICR7Y29tcH0gdGhhbiAke3NjaGVtYUNvZGV9IGNoYXJhY3RlcnNgO1xuICAgIH0sXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBbXCJtYXhMZW5ndGhcIiwgXCJtaW5MZW5ndGhcIl0sXG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBzY2hlbWFUeXBlOiBcIm51bWJlclwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsga2V5d29yZCwgZGF0YSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3Qgb3AgPSBrZXl3b3JkID09PSBcIm1heExlbmd0aFwiID8gY29kZWdlbl8xLm9wZXJhdG9ycy5HVCA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTFQ7XG4gICAgICAgIGNvbnN0IGxlbiA9IGl0Lm9wdHMudW5pY29kZSA9PT0gZmFsc2UgPyAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGAgOiAoMCwgY29kZWdlbl8xLl8pIGAkeygwLCB1dGlsXzEudXNlRnVuYykoY3h0LmdlbiwgdWNzMmxlbmd0aF8xLmRlZmF1bHQpfSgke2RhdGF9KWA7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgJHtsZW59ICR7b3B9ICR7c2NoZW1hQ29kZX1gKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbWl0TGVuZ3RoLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBwYXR0ZXJuIFwiJHtzY2hlbWFDb2RlfVwiYCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge3BhdHRlcm46ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwYXR0ZXJuXCIsXG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBzY2hlbWFUeXBlOiBcInN0cmluZ1wiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgJGRhdGEsIHNjaGVtYSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgLy8gVE9ETyByZWdleHAgc2hvdWxkIGJlIHdyYXBwZWQgaW4gdHJ5L2NhdGNoc1xuICAgICAgICBjb25zdCB1ID0gaXQub3B0cy51bmljb2RlUmVnRXhwID8gXCJ1XCIgOiBcIlwiO1xuICAgICAgICBjb25zdCByZWdFeHAgPSAkZGF0YSA/ICgwLCBjb2RlZ2VuXzEuXykgYChuZXcgUmVnRXhwKCR7c2NoZW1hQ29kZX0sICR7dX0pKWAgOiAoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgc2NoZW1hKTtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHtyZWdFeHB9LnRlc3QoJHtkYXRhfSlgKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhdHRlcm4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heFByb3BlcnRpZXNcIiA/IFwibW9yZVwiIDogXCJmZXdlclwiO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlICR7Y29tcH0gdGhhbiAke3NjaGVtYUNvZGV9IHByb3BlcnRpZXNgO1xuICAgIH0sXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBbXCJtYXhQcm9wZXJ0aWVzXCIsIFwibWluUHJvcGVydGllc1wiXSxcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhQcm9wZXJ0aWVzXCIgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkdUIDogY29kZWdlbl8xLm9wZXJhdG9ycy5MVDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGBPYmplY3Qua2V5cygke2RhdGF9KS5sZW5ndGggJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRQcm9wZXJ0aWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICcke21pc3NpbmdQcm9wZXJ0eX0nYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHkgfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bWlzc2luZ1Byb3BlcnR5OiAke21pc3NpbmdQcm9wZXJ0eX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJyZXF1aXJlZFwiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGRhdGEsICRkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9wdHMgfSA9IGl0O1xuICAgICAgICBpZiAoISRkYXRhICYmIHNjaGVtYS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHVzZUxvb3AgPSBzY2hlbWEubGVuZ3RoID49IG9wdHMubG9vcFJlcXVpcmVkO1xuICAgICAgICBpZiAoaXQuYWxsRXJyb3JzKVxuICAgICAgICAgICAgYWxsRXJyb3JzTW9kZSgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBleGl0T25FcnJvck1vZGUoKTtcbiAgICAgICAgaWYgKG9wdHMuc3RyaWN0UmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gY3h0LnBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgY29uc3QgeyBkZWZpbmVkUHJvcGVydGllcyB9ID0gY3h0Lml0O1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXF1aXJlZEtleSBvZiBzY2hlbWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoKHByb3BzID09PSBudWxsIHx8IHByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9wc1tyZXF1aXJlZEtleV0pID09PSB1bmRlZmluZWQgJiYgIWRlZmluZWRQcm9wZXJ0aWVzLmhhcyhyZXF1aXJlZEtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hUGF0aCA9IGl0LnNjaGVtYUVudi5iYXNlSWQgKyBpdC5lcnJTY2hlbWFQYXRoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBgcmVxdWlyZWQgcHJvcGVydHkgXCIke3JlcXVpcmVkS2V5fVwiIGlzIG5vdCBkZWZpbmVkIGF0IFwiJHtzY2hlbWFQYXRofVwiIChzdHJpY3RSZXF1aXJlZClgO1xuICAgICAgICAgICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIG1zZywgaXQub3B0cy5zdHJpY3RSZXF1aXJlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFsbEVycm9yc01vZGUoKSB7XG4gICAgICAgICAgICBpZiAodXNlTG9vcCB8fCAkZGF0YSkge1xuICAgICAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKGNvZGVnZW5fMS5uaWwsIGxvb3BBbGxSZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2Ygc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBjb2RlXzEuY2hlY2tSZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBwcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXhpdE9uRXJyb3JNb2RlKCkge1xuICAgICAgICAgICAgY29uc3QgbWlzc2luZyA9IGdlbi5sZXQoXCJtaXNzaW5nXCIpO1xuICAgICAgICAgICAgaWYgKHVzZUxvb3AgfHwgJGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjeHQuYmxvY2skZGF0YSh2YWxpZCwgKCkgPT4gbG9vcFVudGlsTWlzc2luZyhtaXNzaW5nLCB2YWxpZCkpO1xuICAgICAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVfMS5jaGVja01pc3NpbmdQcm9wKShjeHQsIHNjaGVtYSwgbWlzc2luZykpO1xuICAgICAgICAgICAgICAgICgwLCBjb2RlXzEucmVwb3J0TWlzc2luZ1Byb3ApKGN4dCwgbWlzc2luZyk7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wQWxsUmVxdWlyZWQoKSB7XG4gICAgICAgICAgICBnZW4uZm9yT2YoXCJwcm9wXCIsIHNjaGVtYUNvZGUsIChwcm9wKSA9PiB7XG4gICAgICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogcHJvcCB9KTtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVfMS5ub1Byb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIHByb3AsIG9wdHMub3duUHJvcGVydGllcyksICgpID0+IGN4dC5lcnJvcigpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BVbnRpbE1pc3NpbmcobWlzc2luZywgdmFsaWQpIHtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBtaXNzaW5nUHJvcGVydHk6IG1pc3NpbmcgfSk7XG4gICAgICAgICAgICBnZW4uZm9yT2YobWlzc2luZywgc2NoZW1hQ29kZSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsICgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgbWlzc2luZywgb3B0cy5vd25Qcm9wZXJ0aWVzKSk7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgY29kZWdlbl8xLm5pbCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVpcmVkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZSh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkge1xuICAgICAgICBjb25zdCBjb21wID0ga2V5d29yZCA9PT0gXCJtYXhJdGVtc1wiID8gXCJtb3JlXCIgOiBcImZld2VyXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgJHtjb21wfSB0aGFuICR7c2NoZW1hQ29kZX0gaXRlbXNgO1xuICAgIH0sXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBbXCJtYXhJdGVtc1wiLCBcIm1pbkl0ZW1zXCJdLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBcIm51bWJlclwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsga2V5d29yZCwgZGF0YSwgc2NoZW1hQ29kZSB9ID0gY3h0O1xuICAgICAgICBjb25zdCBvcCA9IGtleXdvcmQgPT09IFwibWF4SXRlbXNcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoICR7b3B9ICR7c2NoZW1hQ29kZX1gKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbWl0SXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hanYtdmFsaWRhdG9yL2Fqdi9pc3N1ZXMvODg5XG5jb25zdCBlcXVhbCA9IHJlcXVpcmUoXCJmYXN0LWRlZXAtZXF1YWxcIik7XG5lcXVhbC5jb2RlID0gJ3JlcXVpcmUoXCJhanYvZGlzdC9ydW50aW1lL2VxdWFsXCIpLmRlZmF1bHQnO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXF1YWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcXVhbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZGF0YVR5cGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3ZhbGlkYXRlL2RhdGFUeXBlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgaSwgaiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSBkdXBsaWNhdGUgaXRlbXMgKGl0ZW1zICMjICR7an0gYW5kICR7aX0gYXJlIGlkZW50aWNhbClgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IGksIGogfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7aTogJHtpfSwgajogJHtqfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYm9vbGVhblwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgIXNjaGVtYSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgIGNvbnN0IGl0ZW1UeXBlcyA9IHBhcmVudFNjaGVtYS5pdGVtcyA/ICgwLCBkYXRhVHlwZV8xLmdldFNjaGVtYVR5cGVzKShwYXJlbnRTY2hlbWEuaXRlbXMpIDogW107XG4gICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCB2YWxpZGF0ZVVuaXF1ZUl0ZW1zLCAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ID09PSBmYWxzZWApO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVVuaXF1ZUl0ZW1zKCkge1xuICAgICAgICAgICAgY29uc3QgaSA9IGdlbi5sZXQoXCJpXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgICAgICAgICBjb25zdCBqID0gZ2VuLmxldChcImpcIik7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgaSwgaiB9KTtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aX0gPiAxYCwgKCkgPT4gKGNhbk9wdGltaXplKCkgPyBsb29wTiA6IGxvb3BOMikoaSwgaikpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNhbk9wdGltaXplKCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1UeXBlcy5sZW5ndGggPiAwICYmICFpdGVtVHlwZXMuc29tZSgodCkgPT4gdCA9PT0gXCJvYmplY3RcIiB8fCB0ID09PSBcImFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BOKGksIGopIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBnZW4ubmFtZShcIml0ZW1cIik7XG4gICAgICAgICAgICBjb25zdCB3cm9uZ1R5cGUgPSAoMCwgZGF0YVR5cGVfMS5jaGVja0RhdGFUeXBlcykoaXRlbVR5cGVzLCBpdGVtLCBpdC5vcHRzLnN0cmljdE51bWJlcnMsIGRhdGFUeXBlXzEuRGF0YVR5cGUuV3JvbmcpO1xuICAgICAgICAgICAgY29uc3QgaW5kaWNlcyA9IGdlbi5jb25zdChcImluZGljZXNcIiwgKDAsIGNvZGVnZW5fMS5fKSBge31gKTtcbiAgICAgICAgICAgIGdlbi5mb3IoKDAsIGNvZGVnZW5fMS5fKSBgOyR7aX0tLTtgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZ2VuLmxldChpdGVtLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9WyR7aX1dYCk7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKHdyb25nVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgY29udGludWVgKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVR5cGVzLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtpdGVtfSA9PSBcInN0cmluZ1wiYCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdGVtfSArPSBcIl9cImApO1xuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7aW5kaWNlc31bJHtpdGVtfV0gPT0gXCJudW1iZXJcImAsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihqLCAoMCwgY29kZWdlbl8xLl8pIGAke2luZGljZXN9WyR7aXRlbX1dYCk7XG4gICAgICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkuYnJlYWsoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke2luZGljZXN9WyR7aXRlbX1dID0gJHtpfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcE4yKGksIGopIHtcbiAgICAgICAgICAgIGNvbnN0IGVxbCA9ICgwLCB1dGlsXzEudXNlRnVuYykoZ2VuLCBlcXVhbF8xLmRlZmF1bHQpO1xuICAgICAgICAgICAgY29uc3Qgb3V0ZXIgPSBnZW4ubmFtZShcIm91dGVyXCIpO1xuICAgICAgICAgICAgZ2VuLmxhYmVsKG91dGVyKS5mb3IoKDAsIGNvZGVnZW5fMS5fKSBgOyR7aX0tLTtgLCAoKSA9PiBnZW4uZm9yKCgwLCBjb2RlZ2VuXzEuXykgYCR7an0gPSAke2l9OyAke2p9LS07YCwgKCkgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXFsfSgke2RhdGF9WyR7aX1dLCAke2RhdGF9WyR7an1dKWAsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkuYnJlYWsob3V0ZXIpO1xuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5pcXVlSXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXF1YWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL2VxdWFsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IGJlIGVxdWFsIHRvIGNvbnN0YW50XCIsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHthbGxvd2VkVmFsdWU6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJjb25zdFwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hQ29kZSwgc2NoZW1hIH0gPSBjeHQ7XG4gICAgICAgIGlmICgkZGF0YSB8fCAoc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgISR7KDAsIHV0aWxfMS51c2VGdW5jKShnZW4sIGVxdWFsXzEuZGVmYXVsdCl9KCR7ZGF0YX0sICR7c2NoZW1hQ29kZX0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjeHQuZmFpbCgoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYX0gIT09ICR7ZGF0YX1gKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXF1YWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL2VxdWFsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgYWxsb3dlZCB2YWx1ZXNcIixcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FsbG93ZWRWYWx1ZXM6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJlbnVtXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoISRkYXRhICYmIHNjaGVtYS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbnVtIG11c3QgaGF2ZSBub24tZW1wdHkgYXJyYXlcIik7XG4gICAgICAgIGNvbnN0IHVzZUxvb3AgPSBzY2hlbWEubGVuZ3RoID49IGl0Lm9wdHMubG9vcEVudW07XG4gICAgICAgIGxldCBlcWw7XG4gICAgICAgIGNvbnN0IGdldEVxbCA9ICgpID0+IChlcWwgIT09IG51bGwgJiYgZXFsICE9PSB2b2lkIDAgPyBlcWwgOiAoZXFsID0gKDAsIHV0aWxfMS51c2VGdW5jKShnZW4sIGVxdWFsXzEuZGVmYXVsdCkpKTtcbiAgICAgICAgbGV0IHZhbGlkO1xuICAgICAgICBpZiAodXNlTG9vcCB8fCAkZGF0YSkge1xuICAgICAgICAgICAgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgICAgICBjeHQuYmxvY2skZGF0YSh2YWxpZCwgbG9vcEVudW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgICAgICBjb25zdCB2U2NoZW1hID0gZ2VuLmNvbnN0KFwidlNjaGVtYVwiLCBzY2hlbWFDb2RlKTtcbiAgICAgICAgICAgIHZhbGlkID0gKDAsIGNvZGVnZW5fMS5vcikoLi4uc2NoZW1hLm1hcCgoX3gsIGkpID0+IGVxdWFsQ29kZSh2U2NoZW1hLCBpKSkpO1xuICAgICAgICB9XG4gICAgICAgIGN4dC5wYXNzKHZhbGlkKTtcbiAgICAgICAgZnVuY3Rpb24gbG9vcEVudW0oKSB7XG4gICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICBnZW4uZm9yT2YoXCJ2XCIsIHNjaGVtYUNvZGUsICh2KSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtnZXRFcWwoKX0oJHtkYXRhfSwgJHt2fSlgLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKS5icmVhaygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXF1YWxDb2RlKHZTY2hlbWEsIGkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaCA9IHNjaGVtYVtpXTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygc2NoID09PSBcIm9iamVjdFwiICYmIHNjaCAhPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtnZXRFcWwoKX0oJHtkYXRhfSwgJHt2U2NoZW1hfVske2l9XSlgXG4gICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSAke3NjaH1gO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbnVtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBsaW1pdE51bWJlcl8xID0gcmVxdWlyZShcIi4vbGltaXROdW1iZXJcIik7XG5jb25zdCBtdWx0aXBsZU9mXzEgPSByZXF1aXJlKFwiLi9tdWx0aXBsZU9mXCIpO1xuY29uc3QgbGltaXRMZW5ndGhfMSA9IHJlcXVpcmUoXCIuL2xpbWl0TGVuZ3RoXCIpO1xuY29uc3QgcGF0dGVybl8xID0gcmVxdWlyZShcIi4vcGF0dGVyblwiKTtcbmNvbnN0IGxpbWl0UHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vbGltaXRQcm9wZXJ0aWVzXCIpO1xuY29uc3QgcmVxdWlyZWRfMSA9IHJlcXVpcmUoXCIuL3JlcXVpcmVkXCIpO1xuY29uc3QgbGltaXRJdGVtc18xID0gcmVxdWlyZShcIi4vbGltaXRJdGVtc1wiKTtcbmNvbnN0IHVuaXF1ZUl0ZW1zXzEgPSByZXF1aXJlKFwiLi91bmlxdWVJdGVtc1wiKTtcbmNvbnN0IGNvbnN0XzEgPSByZXF1aXJlKFwiLi9jb25zdFwiKTtcbmNvbnN0IGVudW1fMSA9IHJlcXVpcmUoXCIuL2VudW1cIik7XG5jb25zdCB2YWxpZGF0aW9uID0gW1xuICAgIC8vIG51bWJlclxuICAgIGxpbWl0TnVtYmVyXzEuZGVmYXVsdCxcbiAgICBtdWx0aXBsZU9mXzEuZGVmYXVsdCxcbiAgICAvLyBzdHJpbmdcbiAgICBsaW1pdExlbmd0aF8xLmRlZmF1bHQsXG4gICAgcGF0dGVybl8xLmRlZmF1bHQsXG4gICAgLy8gb2JqZWN0XG4gICAgbGltaXRQcm9wZXJ0aWVzXzEuZGVmYXVsdCxcbiAgICByZXF1aXJlZF8xLmRlZmF1bHQsXG4gICAgLy8gYXJyYXlcbiAgICBsaW1pdEl0ZW1zXzEuZGVmYXVsdCxcbiAgICB1bmlxdWVJdGVtc18xLmRlZmF1bHQsXG4gICAgLy8gYW55XG4gICAgeyBrZXl3b3JkOiBcInR5cGVcIiwgc2NoZW1hVHlwZTogW1wic3RyaW5nXCIsIFwiYXJyYXlcIl0gfSxcbiAgICB7IGtleXdvcmQ6IFwibnVsbGFibGVcIiwgc2NoZW1hVHlwZTogXCJib29sZWFuXCIgfSxcbiAgICBjb25zdF8xLmRlZmF1bHQsXG4gICAgZW51bV8xLmRlZmF1bHQsXG5dO1xuZXhwb3J0cy5kZWZhdWx0ID0gdmFsaWRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlIG1vcmUgdGhhbiAke2xlbn0gaXRlbXNgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtsaW1pdDogJHtsZW59fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYWRkaXRpb25hbEl0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgaXRlbXMgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCAnXCJhZGRpdGlvbmFsSXRlbXNcIiBpcyBpZ25vcmVkIHdoZW4gXCJpdGVtc1wiIGlzIG5vdCBhbiBhcnJheSBvZiBzY2hlbWFzJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMoY3h0LCBpdGVtcyk7XG4gICAgfSxcbn07XG5mdW5jdGlvbiB2YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyhjeHQsIGl0ZW1zKSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgZGF0YSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IGxlbjogaXRlbXMubGVuZ3RoIH0pO1xuICAgICAgICBjeHQucGFzcygoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPD0gJHtpdGVtcy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4udmFyKFwidmFsaWRcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtsZW59IDw9ICR7aXRlbXMubGVuZ3RofWApOyAvLyBUT0RPIHZhclxuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gdmFsaWRhdGVJdGVtcyh2YWxpZCkpO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zKHZhbGlkKSB7XG4gICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgaXRlbXMubGVuZ3RoLCBsZW4sIChpKSA9PiB7XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHsga2V5d29yZCwgZGF0YVByb3A6IGksIGRhdGFQcm9wVHlwZTogdXRpbF8xLlR5cGUuTnVtIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGlmICghaXQuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMgPSB2YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcztcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFkZGl0aW9uYWxJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVR1cGxlID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIml0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImFycmF5XCIsIFwiYm9vbGVhblwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZVR1cGxlKGN4dCwgXCJhZGRpdGlvbmFsSXRlbXNcIiwgc2NoZW1hKTtcbiAgICAgICAgaXQuaXRlbXMgPSB0cnVlO1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGN4dC5vaygoMCwgY29kZV8xLnZhbGlkYXRlQXJyYXkpKGN4dCkpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gdmFsaWRhdGVUdXBsZShjeHQsIGV4dHJhSXRlbXMsIHNjaEFyciA9IGN4dC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IGdlbiwgcGFyZW50U2NoZW1hLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGNoZWNrU3RyaWN0VHVwbGUocGFyZW50U2NoZW1hKTtcbiAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiBzY2hBcnIubGVuZ3RoICYmIGl0Lml0ZW1zICE9PSB0cnVlKSB7XG4gICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgc2NoQXJyLmxlbmd0aCwgaXQuaXRlbXMpO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgc2NoQXJyLmZvckVhY2goKHNjaCwgaSkgPT4ge1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPiAke2l9YCwgKCkgPT4gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgc2NoZW1hUHJvcDogaSxcbiAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICB9LCB2YWxpZCkpO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGNoZWNrU3RyaWN0VHVwbGUoc2NoKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0cywgZXJyU2NoZW1hUGF0aCB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IGwgPSBzY2hBcnIubGVuZ3RoO1xuICAgICAgICBjb25zdCBmdWxsVHVwbGUgPSBsID09PSBzY2gubWluSXRlbXMgJiYgKGwgPT09IHNjaC5tYXhJdGVtcyB8fCBzY2hbZXh0cmFJdGVtc10gPT09IGZhbHNlKTtcbiAgICAgICAgaWYgKG9wdHMuc3RyaWN0VHVwbGVzICYmICFmdWxsVHVwbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBcIiR7a2V5d29yZH1cIiBpcyAke2x9LXR1cGxlLCBidXQgbWluSXRlbXMgb3IgbWF4SXRlbXMvJHtleHRyYUl0ZW1zfSBhcmUgbm90IHNwZWNpZmllZCBvciBkaWZmZXJlbnQgYXQgcGF0aCBcIiR7ZXJyU2NoZW1hUGF0aH1cImA7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIG1zZywgb3B0cy5zdHJpY3RUdXBsZXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZVR1cGxlID0gdmFsaWRhdGVUdXBsZTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBpdGVtc18xID0gcmVxdWlyZShcIi4vaXRlbXNcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwcmVmaXhJdGVtc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJhcnJheVwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBjb2RlOiAoY3h0KSA9PiAoMCwgaXRlbXNfMS52YWxpZGF0ZVR1cGxlKShjeHQsIFwiaXRlbXNcIiksXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJlZml4SXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBhZGRpdGlvbmFsSXRlbXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxJdGVtc1wiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgbW9yZSB0aGFuICR7bGVufSBpdGVtc2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke2xlbn19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpdGVtc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgcHJlZml4SXRlbXMgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaXQuaXRlbXMgPSB0cnVlO1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChwcmVmaXhJdGVtcylcbiAgICAgICAgICAgICgwLCBhZGRpdGlvbmFsSXRlbXNfMS52YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcykoY3h0LCBwcmVmaXhJdGVtcyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGN4dC5vaygoMCwgY29kZV8xLnZhbGlkYXRlQXJyYXkpKGN4dCkpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXRlbXMyMDIwLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBtaW4sIG1heCB9IH0pID0+IG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHttaW59IHZhbGlkIGl0ZW0ocylgXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHttaW59IGFuZCBubyBtb3JlIHRoYW4gJHttYXh9IHZhbGlkIGl0ZW0ocylgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IG1pbiwgbWF4IH0gfSkgPT4gbWF4ID09PSB1bmRlZmluZWQgPyAoMCwgY29kZWdlbl8xLl8pIGB7bWluQ29udGFpbnM6ICR7bWlufX1gIDogKDAsIGNvZGVnZW5fMS5fKSBge21pbkNvbnRhaW5zOiAke21pbn0sIG1heENvbnRhaW5zOiAke21heH19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJjb250YWluc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICAgICAgbGV0IG1pbjtcbiAgICAgICAgbGV0IG1heDtcbiAgICAgICAgY29uc3QgeyBtaW5Db250YWlucywgbWF4Q29udGFpbnMgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaWYgKGl0Lm9wdHMubmV4dCkge1xuICAgICAgICAgICAgbWluID0gbWluQ29udGFpbnMgPT09IHVuZGVmaW5lZCA/IDEgOiBtaW5Db250YWlucztcbiAgICAgICAgICAgIG1heCA9IG1heENvbnRhaW5zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbWluID0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pbiwgbWF4IH0pO1xuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQgJiYgbWluID09PSAwKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBcIm1pbkNvbnRhaW5zXCIgPT0gMCB3aXRob3V0IFwibWF4Q29udGFpbnNcIjogXCJjb250YWluc1wiIGtleXdvcmQgaWdub3JlZGApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZCAmJiBtaW4gPiBtYXgpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwibWluQ29udGFpbnNcIiA+IFwibWF4Q29udGFpbnNcIiBpcyBhbHdheXMgaW52YWxpZGApO1xuICAgICAgICAgICAgY3h0LmZhaWwoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgIGxldCBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtsZW59ID49ICR7bWlufWA7XG4gICAgICAgICAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y29uZH0gJiYgJHtsZW59IDw9ICR7bWF4fWA7XG4gICAgICAgICAgICBjeHQucGFzcyhjb25kKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkICYmIG1pbiA9PT0gMSkge1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtcyh2YWxpZCwgKCkgPT4gZ2VuLmlmKHZhbGlkLCAoKSA9PiBnZW4uYnJlYWsoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1pbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2VuLmxldCh2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoID4gMGAsIHZhbGlkYXRlSXRlbXNXaXRoQ291bnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmxldCh2YWxpZCwgZmFsc2UpO1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtc1dpdGhDb3VudCgpO1xuICAgICAgICB9XG4gICAgICAgIGN4dC5yZXN1bHQodmFsaWQsICgpID0+IGN4dC5yZXNldCgpKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtc1dpdGhDb3VudCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaFZhbGlkID0gZ2VuLm5hbWUoXCJfdmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBjb3VudCA9IGdlbi5sZXQoXCJjb3VudFwiLCAwKTtcbiAgICAgICAgICAgIHZhbGlkYXRlSXRlbXMoc2NoVmFsaWQsICgpID0+IGdlbi5pZihzY2hWYWxpZCwgKCkgPT4gY2hlY2tMaW1pdHMoY291bnQpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtcyhfdmFsaWQsIGJsb2NrKSB7XG4gICAgICAgICAgICBnZW4uZm9yUmFuZ2UoXCJpXCIsIDAsIGxlbiwgKGkpID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJjb250YWluc1wiLFxuICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcDogaSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0sXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSwgX3ZhbGlkKTtcbiAgICAgICAgICAgICAgICBibG9jaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tMaW1pdHMoY291bnQpIHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9KytgKTtcbiAgICAgICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSA+PSAke21pbn1gLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKS5icmVhaygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSA+ICR7bWF4fWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhaygpKTtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSAxKVxuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSA+PSAke21pbn1gLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnRhaW5zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlU2NoZW1hRGVwcyA9IGV4cG9ydHMudmFsaWRhdGVQcm9wZXJ0eURlcHMgPSBleHBvcnRzLmVycm9yID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmV4cG9ydHMuZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IHByb3BlcnR5LCBkZXBzQ291bnQsIGRlcHMgfSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5X2llcyA9IGRlcHNDb3VudCA9PT0gMSA/IFwicHJvcGVydHlcIiA6IFwicHJvcGVydGllc1wiO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGhhdmUgJHtwcm9wZXJ0eV9pZXN9ICR7ZGVwc30gd2hlbiBwcm9wZXJ0eSAke3Byb3BlcnR5fSBpcyBwcmVzZW50YDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IHByb3BlcnR5LCBkZXBzQ291bnQsIGRlcHMsIG1pc3NpbmdQcm9wZXJ0eSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwcm9wZXJ0eTogJHtwcm9wZXJ0eX0sXG4gICAgbWlzc2luZ1Byb3BlcnR5OiAke21pc3NpbmdQcm9wZXJ0eX0sXG4gICAgZGVwc0NvdW50OiAke2RlcHNDb3VudH0sXG4gICAgZGVwczogJHtkZXBzfX1gLCAvLyBUT0RPIGNoYW5nZSB0byByZWZlcmVuY2Vcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJkZXBlbmRlbmNpZXNcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgZXJyb3I6IGV4cG9ydHMuZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgW3Byb3BEZXBzLCBzY2hEZXBzXSA9IHNwbGl0RGVwZW5kZW5jaWVzKGN4dCk7XG4gICAgICAgIHZhbGlkYXRlUHJvcGVydHlEZXBzKGN4dCwgcHJvcERlcHMpO1xuICAgICAgICB2YWxpZGF0ZVNjaGVtYURlcHMoY3h0LCBzY2hEZXBzKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIHNwbGl0RGVwZW5kZW5jaWVzKHsgc2NoZW1hIH0pIHtcbiAgICBjb25zdCBwcm9wZXJ0eURlcHMgPSB7fTtcbiAgICBjb25zdCBzY2hlbWFEZXBzID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwiX19wcm90b19fXCIpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3QgZGVwcyA9IEFycmF5LmlzQXJyYXkoc2NoZW1hW2tleV0pID8gcHJvcGVydHlEZXBzIDogc2NoZW1hRGVwcztcbiAgICAgICAgZGVwc1trZXldID0gc2NoZW1hW2tleV07XG4gICAgfVxuICAgIHJldHVybiBbcHJvcGVydHlEZXBzLCBzY2hlbWFEZXBzXTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHlEZXBzKGN4dCwgcHJvcGVydHlEZXBzID0gY3h0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgIGlmIChPYmplY3Qua2V5cyhwcm9wZXJ0eURlcHMpLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG1pc3NpbmcgPSBnZW4ubGV0KFwibWlzc2luZ1wiKTtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gcHJvcGVydHlEZXBzKSB7XG4gICAgICAgIGNvbnN0IGRlcHMgPSBwcm9wZXJ0eURlcHNbcHJvcF07XG4gICAgICAgIGlmIChkZXBzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBoYXNQcm9wZXJ0eSA9ICgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7XG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcCxcbiAgICAgICAgICAgIGRlcHNDb3VudDogZGVwcy5sZW5ndGgsXG4gICAgICAgICAgICBkZXBzOiBkZXBzLmpvaW4oXCIsIFwiKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgICAgIGdlbi5pZihoYXNQcm9wZXJ0eSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwUHJvcCBvZiBkZXBzKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBjb2RlXzEuY2hlY2tSZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBkZXBQcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2hhc1Byb3BlcnR5fSAmJiAoJHsoMCwgY29kZV8xLmNoZWNrTWlzc2luZ1Byb3ApKGN4dCwgZGVwcywgbWlzc2luZyl9KWApO1xuICAgICAgICAgICAgKDAsIGNvZGVfMS5yZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBtaXNzaW5nKTtcbiAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlUHJvcGVydHlEZXBzID0gdmFsaWRhdGVQcm9wZXJ0eURlcHM7XG5mdW5jdGlvbiB2YWxpZGF0ZVNjaGVtYURlcHMoY3h0LCBzY2hlbWFEZXBzID0gY3h0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gc2NoZW1hRGVwcykge1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYURlcHNbcHJvcF0pKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZV8xLnByb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcyksICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkLCBzY2hlbWFQcm9wOiBwcm9wIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZVZhbGlkRXZhbHVhdGVkKHNjaEN4dCwgdmFsaWQpO1xuICAgICAgICB9LCAoKSA9PiBnZW4udmFyKHZhbGlkLCB0cnVlKSAvLyBUT0RPIHZhclxuICAgICAgICApO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVTY2hlbWFEZXBzID0gdmFsaWRhdGVTY2hlbWFEZXBzO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVwZW5kZW5jaWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwicHJvcGVydHkgbmFtZSBtdXN0IGJlIHZhbGlkXCIsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge3Byb3BlcnR5TmFtZTogJHtwYXJhbXMucHJvcGVydHlOYW1lfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByb3BlcnR5TmFtZXNcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIGdlbi5mb3JJbihcImtleVwiLCBkYXRhLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgcHJvcGVydHlOYW1lOiBrZXkgfSk7XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkOiBcInByb3BlcnR5TmFtZXNcIixcbiAgICAgICAgICAgICAgICBkYXRhOiBrZXksXG4gICAgICAgICAgICAgICAgZGF0YVR5cGVzOiBbXCJzdHJpbmdcIl0sXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY3h0LmVycm9yKHRydWUpO1xuICAgICAgICAgICAgICAgIGlmICghaXQuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICBnZW4uYnJlYWsoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb3BlcnR5TmFtZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzXCIsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FkZGl0aW9uYWxQcm9wZXJ0eTogJHtwYXJhbXMuYWRkaXRpb25hbFByb3BlcnR5fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIsXG4gICAgdHlwZTogW1wib2JqZWN0XCJdLFxuICAgIHNjaGVtYVR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgYWxsb3dVbmRlZmluZWQ6IHRydWUsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBlcnJzQ291bnQsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWVycnNDb3VudClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgY29uc3QgeyBhbGxFcnJvcnMsIG9wdHMgfSA9IGl0O1xuICAgICAgICBpdC5wcm9wcyA9IHRydWU7XG4gICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgIT09IFwiYWxsXCIgJiYgKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShwYXJlbnRTY2hlbWEucHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IHBhdFByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShwYXJlbnRTY2hlbWEucGF0dGVyblByb3BlcnRpZXMpO1xuICAgICAgICBjaGVja0FkZGl0aW9uYWxQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGN4dC5vaygoMCwgY29kZWdlbl8xLl8pIGAke2VycnNDb3VudH0gPT09ICR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc31gKTtcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tBZGRpdGlvbmFsUHJvcGVydGllcygpIHtcbiAgICAgICAgICAgIGdlbi5mb3JJbihcImtleVwiLCBkYXRhLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wcy5sZW5ndGggJiYgIXBhdFByb3BzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnR5Q29kZShrZXkpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKGlzQWRkaXRpb25hbChrZXkpLCAoKSA9PiBhZGRpdGlvbmFsUHJvcGVydHlDb2RlKGtleSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNBZGRpdGlvbmFsKGtleSkge1xuICAgICAgICAgICAgbGV0IGRlZmluZWRQcm9wO1xuICAgICAgICAgICAgaWYgKHByb3BzLmxlbmd0aCA+IDgpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIG1heWJlIGFuIG9wdGlvbiBpbnN0ZWFkIG9mIGhhcmQtY29kZWQgOD9cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wc1NjaGVtYSA9ICgwLCB1dGlsXzEuc2NoZW1hUmVmT3JWYWwpKGl0LCBwYXJlbnRTY2hlbWEucHJvcGVydGllcywgXCJwcm9wZXJ0aWVzXCIpO1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gKDAsIGNvZGVfMS5pc093blByb3BlcnR5KShnZW4sIHByb3BzU2NoZW1hLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSAoMCwgY29kZWdlbl8xLm9yKSguLi5wcm9wcy5tYXAoKHApID0+ICgwLCBjb2RlZ2VuXzEuXykgYCR7a2V5fSA9PT0gJHtwfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gY29kZWdlbl8xLm5pbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXRQcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9ICgwLCBjb2RlZ2VuXzEub3IpKGRlZmluZWRQcm9wLCAuLi5wYXRQcm9wcy5tYXAoKHApID0+ICgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIGNvZGVfMS51c2VQYXR0ZXJuKShjeHQsIHApfS50ZXN0KCR7a2V5fSlgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5ub3QpKGRlZmluZWRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZWxldGVBZGRpdGlvbmFsKGtleSkge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgZGVsZXRlICR7ZGF0YX1bJHtrZXl9XWApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFkZGl0aW9uYWxQcm9wZXJ0eUNvZGUoa2V5KSB7XG4gICAgICAgICAgICBpZiAob3B0cy5yZW1vdmVBZGRpdGlvbmFsID09PSBcImFsbFwiIHx8IChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgJiYgc2NoZW1hID09PSBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVBZGRpdGlvbmFsKGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgYWRkaXRpb25hbFByb3BlcnR5OiBrZXkgfSk7XG4gICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiZmFpbGluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5QWRkaXRpb25hbFNjaGVtYShrZXksIHZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeHQucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcHBseUFkZGl0aW9uYWxTY2hlbWEoa2V5LCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlBZGRpdGlvbmFsU2NoZW1hKGtleSwgdmFsaWQsIGVycm9ycykge1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDoga2V5LFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8xLlR5cGUuU3RyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChlcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzdWJzY2hlbWEsIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYWxsRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoc3Vic2NoZW1hLCB2YWxpZCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFkZGl0aW9uYWxQcm9wZXJ0aWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdmFsaWRhdGVcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBhZGRpdGlvbmFsUHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbFByb3BlcnRpZXNcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwcm9wZXJ0aWVzXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcIm9iamVjdFwiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKGl0Lm9wdHMucmVtb3ZlQWRkaXRpb25hbCA9PT0gXCJhbGxcIiAmJiBwYXJlbnRTY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXNfMS5kZWZhdWx0LmNvZGUobmV3IHZhbGlkYXRlXzEuS2V5d29yZEN4dChpdCwgYWRkaXRpb25hbFByb3BlcnRpZXNfMS5kZWZhdWx0LCBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGxQcm9wcyA9ICgwLCBjb2RlXzEuYWxsU2NoZW1hUHJvcGVydGllcykoc2NoZW1hKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGFsbFByb3BzKSB7XG4gICAgICAgICAgICBpdC5kZWZpbmVkUHJvcGVydGllcy5hZGQocHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lm9wdHMudW5ldmFsdWF0ZWQgJiYgYWxsUHJvcHMubGVuZ3RoICYmIGl0LnByb3BzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sICgwLCB1dGlsXzEudG9IYXNoKShhbGxQcm9wcyksIGl0LnByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gYWxsUHJvcHMuZmlsdGVyKChwKSA9PiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYVtwXSkpO1xuICAgICAgICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChoYXNEZWZhdWx0KHByb3ApKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eVNjaGVtYShwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLnByb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcykpO1xuICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHlTY2hlbWEocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5lbHNlKCkudmFyKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBnZW4uZW5kSWYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN4dC5pdC5kZWZpbmVkUHJvcGVydGllcy5hZGQocHJvcCk7XG4gICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0RlZmF1bHQocHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0Lm9wdHMudXNlRGVmYXVsdHMgJiYgIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgc2NoZW1hW3Byb3BdLmRlZmF1bHQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseVByb3BlcnR5U2NoZW1hKHByb3ApIHtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwicHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IHByb3AsXG4gICAgICAgICAgICAgICAgZGF0YVByb3A6IHByb3AsXG4gICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCB1dGlsXzIgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicGF0dGVyblByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgZGF0YSwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9wdHMgfSA9IGl0O1xuICAgICAgICBjb25zdCBwYXR0ZXJucyA9ICgwLCBjb2RlXzEuYWxsU2NoZW1hUHJvcGVydGllcykoc2NoZW1hKTtcbiAgICAgICAgY29uc3QgYWx3YXlzVmFsaWRQYXR0ZXJucyA9IHBhdHRlcm5zLmZpbHRlcigocCkgPT4gKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYVtwXSkpO1xuICAgICAgICBpZiAocGF0dGVybnMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAoYWx3YXlzVmFsaWRQYXR0ZXJucy5sZW5ndGggPT09IHBhdHRlcm5zLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICghaXQub3B0cy51bmV2YWx1YXRlZCB8fCBpdC5wcm9wcyA9PT0gdHJ1ZSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hlY2tQcm9wZXJ0aWVzID0gb3B0cy5zdHJpY3RTY2hlbWEgJiYgIW9wdHMuYWxsb3dNYXRjaGluZ1Byb3BlcnRpZXMgJiYgcGFyZW50U2NoZW1hLnByb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgaWYgKGl0LnByb3BzICE9PSB0cnVlICYmICEoaXQucHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gKDAsIHV0aWxfMi5ldmFsdWF0ZWRQcm9wc1RvTmFtZSkoZ2VuLCBpdC5wcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBwcm9wcyB9ID0gaXQ7XG4gICAgICAgIHZhbGlkYXRlUGF0dGVyblByb3BlcnRpZXMoKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVQYXR0ZXJuUHJvcGVydGllcygpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGF0IG9mIHBhdHRlcm5zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrUHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tNYXRjaGluZ1Byb3BlcnRpZXMocGF0KTtcbiAgICAgICAgICAgICAgICBpZiAoaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlUHJvcGVydGllcyhwYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLnZhcih2YWxpZCwgdHJ1ZSk7IC8vIFRPRE8gdmFyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlUHJvcGVydGllcyhwYXQpO1xuICAgICAgICAgICAgICAgICAgICBnZW4uaWYodmFsaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja01hdGNoaW5nUHJvcGVydGllcyhwYXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBjaGVja1Byb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3IFJlZ0V4cChwYXQpLnRlc3QocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgcHJvcGVydHkgJHtwcm9wfSBtYXRjaGVzIHBhdHRlcm4gJHtwYXR9ICh1c2UgYWxsb3dNYXRjaGluZ1Byb3BlcnRpZXMpYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyhwYXQpIHtcbiAgICAgICAgICAgIGdlbi5mb3JJbihcImtleVwiLCBkYXRhLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIGNvZGVfMS51c2VQYXR0ZXJuKShjeHQsIHBhdCl9LnRlc3QoJHtrZXl9KWAsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWx3YXlzVmFsaWQgPSBhbHdheXNWYWxpZFBhdHRlcm5zLmluY2x1ZGVzKHBhdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWx3YXlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwicGF0dGVyblByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFQcm9wOiBwYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVByb3A6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMi5UeXBlLlN0cixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiBwcm9wcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3Byb3BzfVske2tleX1dYCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFsd2F5c1ZhbGlkICYmICFpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBzaG9ydC1jaXJjdWl0IGlmIGB1bmV2YWx1YXRlZFByb3BlcnRpZXNgIGlzIG5vdCBzdXBwb3J0ZWQgKG9wdHMubmV4dCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBpZiBhbGwgcHJvcGVydGllcyB3ZXJlIGV2YWx1YXRlZCAocHJvcHMgPT09IHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVyblByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJub3RcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICAgICAgY3h0LmZhaWwoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAga2V5d29yZDogXCJub3RcIixcbiAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICBjcmVhdGVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgYWxsRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICBjeHQuZmFpbFJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCksICgpID0+IGN4dC5lcnJvcigpKTtcbiAgICB9LFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6IFwibXVzdCBOT1QgYmUgdmFsaWRcIiB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhbnlPZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBjb2RlOiBjb2RlXzEudmFsaWRhdGVVbmlvbixcbiAgICBlcnJvcjogeyBtZXNzYWdlOiBcIm11c3QgbWF0Y2ggYSBzY2hlbWEgaW4gYW55T2ZcIiB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFueU9mLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwibXVzdCBtYXRjaCBleGFjdGx5IG9uZSBzY2hlbWEgaW4gb25lT2ZcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cGFzc2luZ1NjaGVtYXM6ICR7cGFyYW1zLnBhc3Npbmd9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwib25lT2ZcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgIGlmIChpdC5vcHRzLmRpc2NyaW1pbmF0b3IgJiYgcGFyZW50U2NoZW1hLmRpc2NyaW1pbmF0b3IpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHNjaEFyciA9IHNjaGVtYTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgZmFsc2UpO1xuICAgICAgICBjb25zdCBwYXNzaW5nID0gZ2VuLmxldChcInBhc3NpbmdcIiwgbnVsbCk7XG4gICAgICAgIGNvbnN0IHNjaFZhbGlkID0gZ2VuLm5hbWUoXCJfdmFsaWRcIik7XG4gICAgICAgIGN4dC5zZXRQYXJhbXMoeyBwYXNzaW5nIH0pO1xuICAgICAgICAvLyBUT0RPIHBvc3NpYmx5IGZhaWwgc3RyYWlnaHQgYXdheSAod2l0aCB3YXJuaW5nIG9yIGV4Y2VwdGlvbikgaWYgdGhlcmUgYXJlIHR3byBlbXB0eSBhbHdheXMgdmFsaWQgc2NoZW1hc1xuICAgICAgICBnZW4uYmxvY2sodmFsaWRhdGVPbmVPZik7XG4gICAgICAgIGN4dC5yZXN1bHQodmFsaWQsICgpID0+IGN4dC5yZXNldCgpLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZU9uZU9mKCkge1xuICAgICAgICAgICAgc2NoQXJyLmZvckVhY2goKHNjaCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBzY2hDeHQ7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIGdlbi52YXIoc2NoVmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiBcIm9uZU9mXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFQcm9wOiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAuaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hWYWxpZH0gJiYgJHt2YWxpZH1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFzc2lnbih2YWxpZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXNzaWduKHBhc3NpbmcsICgwLCBjb2RlZ2VuXzEuXykgYFske3Bhc3Npbmd9LCAke2l9XWApXG4gICAgICAgICAgICAgICAgICAgICAgICAuZWxzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBnZW4uaWYoc2NoVmFsaWQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24ocGFzc2luZywgaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hDeHQpXG4gICAgICAgICAgICAgICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0LCBjb2RlZ2VuXzEuTmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b25lT2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhbGxPZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgc2NoZW1hLmZvckVhY2goKHNjaCwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2gpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkOiBcImFsbE9mXCIsIHNjaGVtYVByb3A6IGkgfSwgdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQpO1xuICAgICAgICB9KTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFsbE9mLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgbWF0Y2ggXCIke3BhcmFtcy5pZkNsYXVzZX1cIiBzY2hlbWFgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtmYWlsaW5nS2V5d29yZDogJHtwYXJhbXMuaWZDbGF1c2V9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiaWZcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEudGhlbiA9PT0gdW5kZWZpbmVkICYmIHBhcmVudFNjaGVtYS5lbHNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgJ1wiaWZcIiB3aXRob3V0IFwidGhlblwiIGFuZCBcImVsc2VcIiBpcyBpZ25vcmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzVGhlbiA9IGhhc1NjaGVtYShpdCwgXCJ0aGVuXCIpO1xuICAgICAgICBjb25zdCBoYXNFbHNlID0gaGFzU2NoZW1hKGl0LCBcImVsc2VcIik7XG4gICAgICAgIGlmICghaGFzVGhlbiAmJiAhaGFzRWxzZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHNjaFZhbGlkID0gZ2VuLm5hbWUoXCJfdmFsaWRcIik7XG4gICAgICAgIHZhbGlkYXRlSWYoKTtcbiAgICAgICAgY3h0LnJlc2V0KCk7XG4gICAgICAgIGlmIChoYXNUaGVuICYmIGhhc0Vsc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGlmQ2xhdXNlID0gZ2VuLmxldChcImlmQ2xhdXNlXCIpO1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IGlmQ2xhdXNlIH0pO1xuICAgICAgICAgICAgZ2VuLmlmKHNjaFZhbGlkLCB2YWxpZGF0ZUNsYXVzZShcInRoZW5cIiwgaWZDbGF1c2UpLCB2YWxpZGF0ZUNsYXVzZShcImVsc2VcIiwgaWZDbGF1c2UpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYXNUaGVuKSB7XG4gICAgICAgICAgICBnZW4uaWYoc2NoVmFsaWQsIHZhbGlkYXRlQ2xhdXNlKFwidGhlblwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHNjaFZhbGlkKSwgdmFsaWRhdGVDbGF1c2UoXCJlbHNlXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBjeHQucGFzcyh2YWxpZCwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVJZigpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwiaWZcIixcbiAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUVycm9yczogZmFsc2UsXG4gICAgICAgICAgICAgICAgYWxsRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgIH0sIHNjaFZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlQ2xhdXNlKGtleXdvcmQsIGlmQ2xhdXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkIH0sIHNjaFZhbGlkKTtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBzY2hWYWxpZCk7XG4gICAgICAgICAgICAgICAgY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgaWYgKGlmQ2xhdXNlKVxuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKGlmQ2xhdXNlLCAoMCwgY29kZWdlbl8xLl8pIGAke2tleXdvcmR9YCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgaWZDbGF1c2U6IGtleXdvcmQgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSxcbn07XG5mdW5jdGlvbiBoYXNTY2hlbWEoaXQsIGtleXdvcmQpIHtcbiAgICBjb25zdCBzY2hlbWEgPSBpdC5zY2hlbWFba2V5d29yZF07XG4gICAgcmV0dXJuIHNjaGVtYSAhPT0gdW5kZWZpbmVkICYmICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlmLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcInRoZW5cIiwgXCJlbHNlXCJdLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgY29kZSh7IGtleXdvcmQsIHBhcmVudFNjaGVtYSwgaXQgfSkge1xuICAgICAgICBpZiAocGFyZW50U2NoZW1hLmlmID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBcIiR7a2V5d29yZH1cIiB3aXRob3V0IFwiaWZcIiBpcyBpZ25vcmVkYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aGVuRWxzZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgYWRkaXRpb25hbEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsSXRlbXNcIik7XG5jb25zdCBwcmVmaXhJdGVtc18xID0gcmVxdWlyZShcIi4vcHJlZml4SXRlbXNcIik7XG5jb25zdCBpdGVtc18xID0gcmVxdWlyZShcIi4vaXRlbXNcIik7XG5jb25zdCBpdGVtczIwMjBfMSA9IHJlcXVpcmUoXCIuL2l0ZW1zMjAyMFwiKTtcbmNvbnN0IGNvbnRhaW5zXzEgPSByZXF1aXJlKFwiLi9jb250YWluc1wiKTtcbmNvbnN0IGRlcGVuZGVuY2llc18xID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzXCIpO1xuY29uc3QgcHJvcGVydHlOYW1lc18xID0gcmVxdWlyZShcIi4vcHJvcGVydHlOYW1lc1wiKTtcbmNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsUHJvcGVydGllc1wiKTtcbmNvbnN0IHByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL3Byb3BlcnRpZXNcIik7XG5jb25zdCBwYXR0ZXJuUHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vcGF0dGVyblByb3BlcnRpZXNcIik7XG5jb25zdCBub3RfMSA9IHJlcXVpcmUoXCIuL25vdFwiKTtcbmNvbnN0IGFueU9mXzEgPSByZXF1aXJlKFwiLi9hbnlPZlwiKTtcbmNvbnN0IG9uZU9mXzEgPSByZXF1aXJlKFwiLi9vbmVPZlwiKTtcbmNvbnN0IGFsbE9mXzEgPSByZXF1aXJlKFwiLi9hbGxPZlwiKTtcbmNvbnN0IGlmXzEgPSByZXF1aXJlKFwiLi9pZlwiKTtcbmNvbnN0IHRoZW5FbHNlXzEgPSByZXF1aXJlKFwiLi90aGVuRWxzZVwiKTtcbmZ1bmN0aW9uIGdldEFwcGxpY2F0b3IoZHJhZnQyMDIwID0gZmFsc2UpIHtcbiAgICBjb25zdCBhcHBsaWNhdG9yID0gW1xuICAgICAgICAvLyBhbnlcbiAgICAgICAgbm90XzEuZGVmYXVsdCxcbiAgICAgICAgYW55T2ZfMS5kZWZhdWx0LFxuICAgICAgICBvbmVPZl8xLmRlZmF1bHQsXG4gICAgICAgIGFsbE9mXzEuZGVmYXVsdCxcbiAgICAgICAgaWZfMS5kZWZhdWx0LFxuICAgICAgICB0aGVuRWxzZV8xLmRlZmF1bHQsXG4gICAgICAgIC8vIG9iamVjdFxuICAgICAgICBwcm9wZXJ0eU5hbWVzXzEuZGVmYXVsdCxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgICAgICBkZXBlbmRlbmNpZXNfMS5kZWZhdWx0LFxuICAgICAgICBwcm9wZXJ0aWVzXzEuZGVmYXVsdCxcbiAgICAgICAgcGF0dGVyblByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgIF07XG4gICAgLy8gYXJyYXlcbiAgICBpZiAoZHJhZnQyMDIwKVxuICAgICAgICBhcHBsaWNhdG9yLnB1c2gocHJlZml4SXRlbXNfMS5kZWZhdWx0LCBpdGVtczIwMjBfMS5kZWZhdWx0KTtcbiAgICBlbHNlXG4gICAgICAgIGFwcGxpY2F0b3IucHVzaChhZGRpdGlvbmFsSXRlbXNfMS5kZWZhdWx0LCBpdGVtc18xLmRlZmF1bHQpO1xuICAgIGFwcGxpY2F0b3IucHVzaChjb250YWluc18xLmRlZmF1bHQpO1xuICAgIHJldHVybiBhcHBsaWNhdG9yO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZ2V0QXBwbGljYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgbWF0Y2ggZm9ybWF0IFwiJHtzY2hlbWFDb2RlfVwiYCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2Zvcm1hdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImZvcm1hdFwiLFxuICAgIHR5cGU6IFtcIm51bWJlclwiLCBcInN0cmluZ1wiXSxcbiAgICBzY2hlbWFUeXBlOiBcInN0cmluZ1wiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0LCBydWxlVHlwZSkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgJGRhdGEsIHNjaGVtYSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvcHRzLCBlcnJTY2hlbWFQYXRoLCBzY2hlbWFFbnYsIHNlbGYgfSA9IGl0O1xuICAgICAgICBpZiAoIW9wdHMudmFsaWRhdGVGb3JtYXRzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoJGRhdGEpXG4gICAgICAgICAgICB2YWxpZGF0ZSREYXRhRm9ybWF0KCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHZhbGlkYXRlRm9ybWF0KCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlJERhdGFGb3JtYXQoKSB7XG4gICAgICAgICAgICBjb25zdCBmbXRzID0gZ2VuLnNjb3BlVmFsdWUoXCJmb3JtYXRzXCIsIHtcbiAgICAgICAgICAgICAgICByZWY6IHNlbGYuZm9ybWF0cyxcbiAgICAgICAgICAgICAgICBjb2RlOiBvcHRzLmNvZGUuZm9ybWF0cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZkRlZiA9IGdlbi5jb25zdChcImZEZWZcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXRzfVske3NjaGVtYUNvZGV9XWApO1xuICAgICAgICAgICAgY29uc3QgZlR5cGUgPSBnZW4ubGV0KFwiZlR5cGVcIik7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBnZW4ubGV0KFwiZm9ybWF0XCIpO1xuICAgICAgICAgICAgLy8gVE9ETyBzaW1wbGlmeVxuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2ZEZWZ9ID09IFwib2JqZWN0XCIgJiYgISgke2ZEZWZ9IGluc3RhbmNlb2YgUmVnRXhwKWAsICgpID0+IGdlbi5hc3NpZ24oZlR5cGUsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZkRlZn0udHlwZSB8fCBcInN0cmluZ1wiYCkuYXNzaWduKGZvcm1hdCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmRGVmfS52YWxpZGF0ZWApLCAoKSA9PiBnZW4uYXNzaWduKGZUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGBcInN0cmluZ1wiYCkuYXNzaWduKGZvcm1hdCwgZkRlZikpO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLm9yKSh1bmtub3duRm10KCksIGludmFsaWRGbXQoKSkpO1xuICAgICAgICAgICAgZnVuY3Rpb24gdW5rbm93bkZtdCgpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5zdHJpY3RTY2hlbWEgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZWdlbl8xLm5pbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSAmJiAhJHtmb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGludmFsaWRGbXQoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsbEZvcm1hdCA9IHNjaGVtYUVudi4kYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGAoJHtmRGVmfS5hc3luYyA/IGF3YWl0ICR7Zm9ybWF0fSgke2RhdGF9KSA6ICR7Zm9ybWF0fSgke2RhdGF9KSlgXG4gICAgICAgICAgICAgICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtmb3JtYXR9KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZERhdGEgPSAoMCwgY29kZWdlbl8xLl8pIGAodHlwZW9mICR7Zm9ybWF0fSA9PSBcImZ1bmN0aW9uXCIgPyAke2NhbGxGb3JtYXR9IDogJHtmb3JtYXR9LnRlc3QoJHtkYXRhfSkpYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtmb3JtYXR9ICYmICR7Zm9ybWF0fSAhPT0gdHJ1ZSAmJiAke2ZUeXBlfSA9PT0gJHtydWxlVHlwZX0gJiYgISR7dmFsaWREYXRhfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXREZWYgPSBzZWxmLmZvcm1hdHNbc2NoZW1hXTtcbiAgICAgICAgICAgIGlmICghZm9ybWF0RGVmKSB7XG4gICAgICAgICAgICAgICAgdW5rbm93bkZvcm1hdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3JtYXREZWYgPT09IHRydWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgW2ZtdFR5cGUsIGZvcm1hdCwgZm10UmVmXSA9IGdldEZvcm1hdChmb3JtYXREZWYpO1xuICAgICAgICAgICAgaWYgKGZtdFR5cGUgPT09IHJ1bGVUeXBlKVxuICAgICAgICAgICAgICAgIGN4dC5wYXNzKHZhbGlkQ29uZGl0aW9uKCkpO1xuICAgICAgICAgICAgZnVuY3Rpb24gdW5rbm93bkZvcm1hdCgpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5zdHJpY3RTY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm4odW5rbm93bk1zZygpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodW5rbm93bk1zZygpKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duTXNnKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYHVua25vd24gZm9ybWF0IFwiJHtzY2hlbWF9XCIgaWdub3JlZCBpbiBzY2hlbWEgYXQgcGF0aCBcIiR7ZXJyU2NoZW1hUGF0aH1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Rm9ybWF0KGZtdERlZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBmbXREZWYgaW5zdGFuY2VvZiBSZWdFeHBcbiAgICAgICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLnJlZ2V4cENvZGUpKGZtdERlZilcbiAgICAgICAgICAgICAgICAgICAgOiBvcHRzLmNvZGUuZm9ybWF0c1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGAke29wdHMuY29kZS5mb3JtYXRzfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoc2NoZW1hKX1gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25zdCBmbXQgPSBnZW4uc2NvcGVWYWx1ZShcImZvcm1hdHNcIiwgeyBrZXk6IHNjaGVtYSwgcmVmOiBmbXREZWYsIGNvZGUgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbXREZWYgPT0gXCJvYmplY3RcIiAmJiAhKGZtdERlZiBpbnN0YW5jZW9mIFJlZ0V4cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtmbXREZWYudHlwZSB8fCBcInN0cmluZ1wiLCBmbXREZWYudmFsaWRhdGUsICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10fS52YWxpZGF0ZWBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gW1wic3RyaW5nXCIsIGZtdERlZiwgZm10XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHZhbGlkQ29uZGl0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm9ybWF0RGVmID09IFwib2JqZWN0XCIgJiYgIShmb3JtYXREZWYgaW5zdGFuY2VvZiBSZWdFeHApICYmIGZvcm1hdERlZi5hc3luYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYUVudi4kYXN5bmMpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBmb3JtYXQgaW4gc3luYyBzY2hlbWFcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGBhd2FpdCAke2ZtdFJlZn0oJHtkYXRhfSlgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGZvcm1hdCA9PSBcImZ1bmN0aW9uXCIgPyAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdFJlZn0oJHtkYXRhfSlgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXRSZWZ9LnRlc3QoJHtkYXRhfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JtYXQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGZvcm1hdF8xID0gcmVxdWlyZShcIi4vZm9ybWF0XCIpO1xuY29uc3QgZm9ybWF0ID0gW2Zvcm1hdF8xLmRlZmF1bHRdO1xuZXhwb3J0cy5kZWZhdWx0ID0gZm9ybWF0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udGVudFZvY2FidWxhcnkgPSBleHBvcnRzLm1ldGFkYXRhVm9jYWJ1bGFyeSA9IHZvaWQgMDtcbmV4cG9ydHMubWV0YWRhdGFWb2NhYnVsYXJ5ID0gW1xuICAgIFwidGl0bGVcIixcbiAgICBcImRlc2NyaXB0aW9uXCIsXG4gICAgXCJkZWZhdWx0XCIsXG4gICAgXCJkZXByZWNhdGVkXCIsXG4gICAgXCJyZWFkT25seVwiLFxuICAgIFwid3JpdGVPbmx5XCIsXG4gICAgXCJleGFtcGxlc1wiLFxuXTtcbmV4cG9ydHMuY29udGVudFZvY2FidWxhcnkgPSBbXG4gICAgXCJjb250ZW50TWVkaWFUeXBlXCIsXG4gICAgXCJjb250ZW50RW5jb2RpbmdcIixcbiAgICBcImNvbnRlbnRTY2hlbWFcIixcbl07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXRhZGF0YS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNvbnN0IHZhbGlkYXRpb25fMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRpb25cIik7XG5jb25zdCBhcHBsaWNhdG9yXzEgPSByZXF1aXJlKFwiLi9hcHBsaWNhdG9yXCIpO1xuY29uc3QgZm9ybWF0XzEgPSByZXF1aXJlKFwiLi9mb3JtYXRcIik7XG5jb25zdCBtZXRhZGF0YV8xID0gcmVxdWlyZShcIi4vbWV0YWRhdGFcIik7XG5jb25zdCBkcmFmdDdWb2NhYnVsYXJpZXMgPSBbXG4gICAgY29yZV8xLmRlZmF1bHQsXG4gICAgdmFsaWRhdGlvbl8xLmRlZmF1bHQsXG4gICAgKDAsIGFwcGxpY2F0b3JfMS5kZWZhdWx0KSgpLFxuICAgIGZvcm1hdF8xLmRlZmF1bHQsXG4gICAgbWV0YWRhdGFfMS5tZXRhZGF0YVZvY2FidWxhcnksXG4gICAgbWV0YWRhdGFfMS5jb250ZW50Vm9jYWJ1bGFyeSxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSBkcmFmdDdWb2NhYnVsYXJpZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kcmFmdDcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGlzY3JFcnJvciA9IHZvaWQgMDtcbnZhciBEaXNjckVycm9yO1xuKGZ1bmN0aW9uIChEaXNjckVycm9yKSB7XG4gICAgRGlzY3JFcnJvcltcIlRhZ1wiXSA9IFwidGFnXCI7XG4gICAgRGlzY3JFcnJvcltcIk1hcHBpbmdcIl0gPSBcIm1hcHBpbmdcIjtcbn0pKERpc2NyRXJyb3IgPSBleHBvcnRzLkRpc2NyRXJyb3IgfHwgKGV4cG9ydHMuRGlzY3JFcnJvciA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vZGlzY3JpbWluYXRvci90eXBlc1wiKTtcbmNvbnN0IGNvbXBpbGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBkaXNjckVycm9yLCB0YWdOYW1lIH0gfSkgPT4gZGlzY3JFcnJvciA9PT0gdHlwZXNfMS5EaXNjckVycm9yLlRhZ1xuICAgICAgICA/IGB0YWcgXCIke3RhZ05hbWV9XCIgbXVzdCBiZSBzdHJpbmdgXG4gICAgICAgIDogYHZhbHVlIG9mIHRhZyBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIGluIG9uZU9mYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBkaXNjckVycm9yLCB0YWcsIHRhZ05hbWUgfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7ZXJyb3I6ICR7ZGlzY3JFcnJvcn0sIHRhZzogJHt0YWdOYW1lfSwgdGFnVmFsdWU6ICR7dGFnfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImRpc2NyaW1pbmF0b3JcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9uZU9mIH0gPSBwYXJlbnRTY2hlbWE7XG4gICAgICAgIGlmICghaXQub3B0cy5kaXNjcmltaW5hdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNjcmltaW5hdG9yOiByZXF1aXJlcyBkaXNjcmltaW5hdG9yIG9wdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWdOYW1lID0gc2NoZW1hLnByb3BlcnR5TmFtZTtcbiAgICAgICAgaWYgKHR5cGVvZiB0YWdOYW1lICE9IFwic3RyaW5nXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNjcmltaW5hdG9yOiByZXF1aXJlcyBwcm9wZXJ0eU5hbWVcIik7XG4gICAgICAgIGlmIChzY2hlbWEubWFwcGluZylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IG1hcHBpbmcgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgaWYgKCFvbmVPZilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIG9uZU9mIGtleXdvcmRcIik7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgdGFnID0gZ2VuLmNvbnN0KFwidGFnXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHRhZ05hbWUpfWApO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7dGFnfSA9PSBcInN0cmluZ1wiYCwgKCkgPT4gdmFsaWRhdGVNYXBwaW5nKCksICgpID0+IGN4dC5lcnJvcihmYWxzZSwgeyBkaXNjckVycm9yOiB0eXBlc18xLkRpc2NyRXJyb3IuVGFnLCB0YWcsIHRhZ05hbWUgfSkpO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZU1hcHBpbmcoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gZ2V0TWFwcGluZygpO1xuICAgICAgICAgICAgZ2VuLmlmKGZhbHNlKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGFnVmFsdWUgaW4gbWFwcGluZykge1xuICAgICAgICAgICAgICAgIGdlbi5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0YWd9ID09PSAke3RhZ1ZhbHVlfWApO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGFwcGx5VGFnU2NoZW1hKG1hcHBpbmdbdGFnVmFsdWVdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICAgICAgY3h0LmVycm9yKGZhbHNlLCB7IGRpc2NyRXJyb3I6IHR5cGVzXzEuRGlzY3JFcnJvci5NYXBwaW5nLCB0YWcsIHRhZ05hbWUgfSk7XG4gICAgICAgICAgICBnZW4uZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseVRhZ1NjaGVtYShzY2hlbWFQcm9wKSB7XG4gICAgICAgICAgICBjb25zdCBfdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQ6IFwib25lT2ZcIiwgc2NoZW1hUHJvcCB9LCBfdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCwgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIF92YWxpZDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRNYXBwaW5nKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3Qgb25lT2ZNYXBwaW5nID0ge307XG4gICAgICAgICAgICBjb25zdCB0b3BSZXF1aXJlZCA9IGhhc1JlcXVpcmVkKHBhcmVudFNjaGVtYSk7XG4gICAgICAgICAgICBsZXQgdGFnUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbmVPZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBzY2ggPSBvbmVPZltpXTtcbiAgICAgICAgICAgICAgICBpZiAoKHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC4kcmVmKSAmJiAhKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoLCBpdC5zZWxmLlJVTEVTKSkge1xuICAgICAgICAgICAgICAgICAgICBzY2ggPSBjb21waWxlXzEucmVzb2x2ZVJlZi5jYWxsKGl0LnNlbGYsIGl0LnNjaGVtYUVudi5yb290LCBpdC5iYXNlSWQsIHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC4kcmVmKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaCBpbnN0YW5jZW9mIGNvbXBpbGVfMS5TY2hlbWFFbnYpXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2ggPSBzY2guc2NoZW1hO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wU2NoID0gKF9hID0gc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnByb3BlcnRpZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVt0YWdOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BTY2ggIT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IG9uZU9mIHN1YnNjaGVtYXMgKG9yIHJlZmVyZW5jZWQgc2NoZW1hcykgbXVzdCBoYXZlIFwicHJvcGVydGllcy8ke3RhZ05hbWV9XCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFnUmVxdWlyZWQgPSB0YWdSZXF1aXJlZCAmJiAodG9wUmVxdWlyZWQgfHwgaGFzUmVxdWlyZWQoc2NoKSk7XG4gICAgICAgICAgICAgICAgYWRkTWFwcGluZ3MocHJvcFNjaCwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRhZ1JlcXVpcmVkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogXCIke3RhZ05hbWV9XCIgbXVzdCBiZSByZXF1aXJlZGApO1xuICAgICAgICAgICAgcmV0dXJuIG9uZU9mTWFwcGluZztcbiAgICAgICAgICAgIGZ1bmN0aW9uIGhhc1JlcXVpcmVkKHsgcmVxdWlyZWQgfSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJlcXVpcmVkKSAmJiByZXF1aXJlZC5pbmNsdWRlcyh0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdzKHNjaCwgaSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2guY29uc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkTWFwcGluZyhzY2guY29uc3QsIGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2guZW51bSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRhZ1ZhbHVlIG9mIHNjaC5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRNYXBwaW5nKHRhZ1ZhbHVlLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBcInByb3BlcnRpZXMvJHt0YWdOYW1lfVwiIG11c3QgaGF2ZSBcImNvbnN0XCIgb3IgXCJlbnVtXCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBhZGRNYXBwaW5nKHRhZ1ZhbHVlLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YWdWYWx1ZSAhPSBcInN0cmluZ1wiIHx8IHRhZ1ZhbHVlIGluIG9uZU9mTWFwcGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IFwiJHt0YWdOYW1lfVwiIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZSBzdHJpbmdzYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9uZU9mTWFwcGluZ1t0YWdWYWx1ZV0gPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NaXNzaW5nUmVmRXJyb3IgPSBleHBvcnRzLlZhbGlkYXRpb25FcnJvciA9IGV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCIuL2NvcmVcIik7XG5jb25zdCBkcmFmdDdfMSA9IHJlcXVpcmUoXCIuL3ZvY2FidWxhcmllcy9kcmFmdDdcIik7XG5jb25zdCBkaXNjcmltaW5hdG9yXzEgPSByZXF1aXJlKFwiLi92b2NhYnVsYXJpZXMvZGlzY3JpbWluYXRvclwiKTtcbmNvbnN0IGRyYWZ0N01ldGFTY2hlbWEgPSByZXF1aXJlKFwiLi9yZWZzL2pzb24tc2NoZW1hLWRyYWZ0LTA3Lmpzb25cIik7XG5jb25zdCBNRVRBX1NVUFBPUlRfREFUQSA9IFtcIi9wcm9wZXJ0aWVzXCJdO1xuY29uc3QgTUVUQV9TQ0hFTUFfSUQgPSBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hXCI7XG5jbGFzcyBBanYgZXh0ZW5kcyBjb3JlXzEuZGVmYXVsdCB7XG4gICAgX2FkZFZvY2FidWxhcmllcygpIHtcbiAgICAgICAgc3VwZXIuX2FkZFZvY2FidWxhcmllcygpO1xuICAgICAgICBkcmFmdDdfMS5kZWZhdWx0LmZvckVhY2goKHYpID0+IHRoaXMuYWRkVm9jYWJ1bGFyeSh2KSk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZGlzY3JpbWluYXRvcilcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5d29yZChkaXNjcmltaW5hdG9yXzEuZGVmYXVsdCk7XG4gICAgfVxuICAgIF9hZGREZWZhdWx0TWV0YVNjaGVtYSgpIHtcbiAgICAgICAgc3VwZXIuX2FkZERlZmF1bHRNZXRhU2NoZW1hKCk7XG4gICAgICAgIGlmICghdGhpcy5vcHRzLm1ldGEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG1ldGFTY2hlbWEgPSB0aGlzLm9wdHMuJGRhdGFcbiAgICAgICAgICAgID8gdGhpcy4kZGF0YU1ldGFTY2hlbWEoZHJhZnQ3TWV0YVNjaGVtYSwgTUVUQV9TVVBQT1JUX0RBVEEpXG4gICAgICAgICAgICA6IGRyYWZ0N01ldGFTY2hlbWE7XG4gICAgICAgIHRoaXMuYWRkTWV0YVNjaGVtYShtZXRhU2NoZW1hLCBNRVRBX1NDSEVNQV9JRCwgZmFsc2UpO1xuICAgICAgICB0aGlzLnJlZnNbXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL3NjaGVtYVwiXSA9IE1FVEFfU0NIRU1BX0lEO1xuICAgIH1cbiAgICBkZWZhdWx0TWV0YSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZGVmYXVsdE1ldGEgPVxuICAgICAgICAgICAgc3VwZXIuZGVmYXVsdE1ldGEoKSB8fCAodGhpcy5nZXRTY2hlbWEoTUVUQV9TQ0hFTUFfSUQpID8gTUVUQV9TQ0hFTUFfSUQgOiB1bmRlZmluZWQpKTtcbiAgICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBBanY7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBBanY7XG52YXIgdmFsaWRhdGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdmFsaWRhdGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJLZXl3b3JkQ3h0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWxpZGF0ZV8xLktleXdvcmRDeHQ7IH0gfSk7XG52YXIgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLl87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5zdHI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5zdHJpbmdpZnk7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJuaWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5uaWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuTmFtZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvZGVHZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5Db2RlR2VuOyB9IH0pO1xudmFyIHZhbGlkYXRpb25fZXJyb3JfMSA9IHJlcXVpcmUoXCIuL3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbGlkYXRpb25FcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsaWRhdGlvbl9lcnJvcl8xLmRlZmF1bHQ7IH0gfSk7XG52YXIgcmVmX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3JlZl9lcnJvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1pc3NpbmdSZWZFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmX2Vycm9yXzEuZGVmYXVsdDsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFqdi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mb3JtYXRMaW1pdERlZmluaXRpb24gPSB2b2lkIDA7XG5jb25zdCBhanZfMSA9IHJlcXVpcmUoXCJhanZcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3Qgb3BzID0gY29kZWdlbl8xLm9wZXJhdG9ycztcbmNvbnN0IEtXRHMgPSB7XG4gICAgZm9ybWF0TWF4aW11bTogeyBva1N0cjogXCI8PVwiLCBvazogb3BzLkxURSwgZmFpbDogb3BzLkdUIH0sXG4gICAgZm9ybWF0TWluaW11bTogeyBva1N0cjogXCI+PVwiLCBvazogb3BzLkdURSwgZmFpbDogb3BzLkxUIH0sXG4gICAgZm9ybWF0RXhjbHVzaXZlTWF4aW11bTogeyBva1N0cjogXCI8XCIsIG9rOiBvcHMuTFQsIGZhaWw6IG9wcy5HVEUgfSxcbiAgICBmb3JtYXRFeGNsdXNpdmVNaW5pbXVtOiB7IG9rU3RyOiBcIj5cIiwgb2s6IG9wcy5HVCwgZmFpbDogb3BzLkxURSB9LFxufTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gY29kZWdlbl8xLnN0ciBgc2hvdWxkIGJlICR7S1dEc1trZXl3b3JkXS5va1N0cn0gJHtzY2hlbWFDb2RlfWAsXG4gICAgcGFyYW1zOiAoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pID0+IGNvZGVnZW5fMS5fIGB7Y29tcGFyaXNvbjogJHtLV0RzW2tleXdvcmRdLm9rU3RyfSwgbGltaXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5leHBvcnRzLmZvcm1hdExpbWl0RGVmaW5pdGlvbiA9IHtcbiAgICBrZXl3b3JkOiBPYmplY3Qua2V5cyhLV0RzKSxcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYUNvZGUsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgICAgIGlmICghb3B0cy52YWxpZGF0ZUZvcm1hdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGZDeHQgPSBuZXcgYWp2XzEuS2V5d29yZEN4dChpdCwgc2VsZi5SVUxFUy5hbGwuZm9ybWF0LmRlZmluaXRpb24sIFwiZm9ybWF0XCIpO1xuICAgICAgICBpZiAoZkN4dC4kZGF0YSlcbiAgICAgICAgICAgIHZhbGlkYXRlJERhdGFGb3JtYXQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdmFsaWRhdGVGb3JtYXQoKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGUkRGF0YUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZtdHMgPSBnZW4uc2NvcGVWYWx1ZShcImZvcm1hdHNcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogc2VsZi5mb3JtYXRzLFxuICAgICAgICAgICAgICAgIGNvZGU6IG9wdHMuY29kZS5mb3JtYXRzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmbXQgPSBnZW4uY29uc3QoXCJmbXRcIiwgY29kZWdlbl8xLl8gYCR7Zm10c31bJHtmQ3h0LnNjaGVtYUNvZGV9XWApO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YShjb2RlZ2VuXzEub3IoY29kZWdlbl8xLl8gYHR5cGVvZiAke2ZtdH0gIT0gXCJvYmplY3RcImAsIGNvZGVnZW5fMS5fIGAke2ZtdH0gaW5zdGFuY2VvZiBSZWdFeHBgLCBjb2RlZ2VuXzEuXyBgdHlwZW9mICR7Zm10fS5jb21wYXJlICE9IFwiZnVuY3Rpb25cImAsIGNvbXBhcmVDb2RlKGZtdCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGZDeHQuc2NoZW1hO1xuICAgICAgICAgICAgY29uc3QgZm10RGVmID0gc2VsZi5mb3JtYXRzW2Zvcm1hdF07XG4gICAgICAgICAgICBpZiAoIWZtdERlZiB8fCBmbXREZWYgPT09IHRydWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmbXREZWYgIT0gXCJvYmplY3RcIiB8fFxuICAgICAgICAgICAgICAgIGZtdERlZiBpbnN0YW5jZW9mIFJlZ0V4cCB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBmbXREZWYuY29tcGFyZSAhPSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiJHtrZXl3b3JkfVwiOiBmb3JtYXQgXCIke2Zvcm1hdH1cIiBkb2VzIG5vdCBkZWZpbmUgXCJjb21wYXJlXCIgZnVuY3Rpb25gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZtdCA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7XG4gICAgICAgICAgICAgICAga2V5OiBmb3JtYXQsXG4gICAgICAgICAgICAgICAgcmVmOiBmbXREZWYsXG4gICAgICAgICAgICAgICAgY29kZTogb3B0cy5jb2RlLmZvcm1hdHMgPyBjb2RlZ2VuXzEuXyBgJHtvcHRzLmNvZGUuZm9ybWF0c30ke2NvZGVnZW5fMS5nZXRQcm9wZXJ0eShmb3JtYXQpfWAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGN4dC5mYWlsJGRhdGEoY29tcGFyZUNvZGUoZm10KSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY29tcGFyZUNvZGUoZm10KSB7XG4gICAgICAgICAgICByZXR1cm4gY29kZWdlbl8xLl8gYCR7Zm10fS5jb21wYXJlKCR7ZGF0YX0sICR7c2NoZW1hQ29kZX0pICR7S1dEc1trZXl3b3JkXS5mYWlsfSAwYDtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbXCJmb3JtYXRcIl0sXG59O1xuY29uc3QgZm9ybWF0TGltaXRQbHVnaW4gPSAoYWp2KSA9PiB7XG4gICAgYWp2LmFkZEtleXdvcmQoZXhwb3J0cy5mb3JtYXRMaW1pdERlZmluaXRpb24pO1xuICAgIHJldHVybiBhanY7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZm9ybWF0TGltaXRQbHVnaW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZm9ybWF0c18xID0gcmVxdWlyZShcIi4vZm9ybWF0c1wiKTtcbmNvbnN0IGxpbWl0XzEgPSByZXF1aXJlKFwiLi9saW1pdFwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCJhanYvZGlzdC9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBmdWxsTmFtZSA9IG5ldyBjb2RlZ2VuXzEuTmFtZShcImZ1bGxGb3JtYXRzXCIpO1xuY29uc3QgZmFzdE5hbWUgPSBuZXcgY29kZWdlbl8xLk5hbWUoXCJmYXN0Rm9ybWF0c1wiKTtcbmNvbnN0IGZvcm1hdHNQbHVnaW4gPSAoYWp2LCBvcHRzID0geyBrZXl3b3JkczogdHJ1ZSB9KSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0cykpIHtcbiAgICAgICAgYWRkRm9ybWF0cyhhanYsIG9wdHMsIGZvcm1hdHNfMS5mdWxsRm9ybWF0cywgZnVsbE5hbWUpO1xuICAgICAgICByZXR1cm4gYWp2O1xuICAgIH1cbiAgICBjb25zdCBbZm9ybWF0cywgZXhwb3J0TmFtZV0gPSBvcHRzLm1vZGUgPT09IFwiZmFzdFwiID8gW2Zvcm1hdHNfMS5mYXN0Rm9ybWF0cywgZmFzdE5hbWVdIDogW2Zvcm1hdHNfMS5mdWxsRm9ybWF0cywgZnVsbE5hbWVdO1xuICAgIGNvbnN0IGxpc3QgPSBvcHRzLmZvcm1hdHMgfHwgZm9ybWF0c18xLmZvcm1hdE5hbWVzO1xuICAgIGFkZEZvcm1hdHMoYWp2LCBsaXN0LCBmb3JtYXRzLCBleHBvcnROYW1lKTtcbiAgICBpZiAob3B0cy5rZXl3b3JkcylcbiAgICAgICAgbGltaXRfMS5kZWZhdWx0KGFqdik7XG4gICAgcmV0dXJuIGFqdjtcbn07XG5mb3JtYXRzUGx1Z2luLmdldCA9IChuYW1lLCBtb2RlID0gXCJmdWxsXCIpID0+IHtcbiAgICBjb25zdCBmb3JtYXRzID0gbW9kZSA9PT0gXCJmYXN0XCIgPyBmb3JtYXRzXzEuZmFzdEZvcm1hdHMgOiBmb3JtYXRzXzEuZnVsbEZvcm1hdHM7XG4gICAgY29uc3QgZiA9IGZvcm1hdHNbbmFtZV07XG4gICAgaWYgKCFmKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZm9ybWF0IFwiJHtuYW1lfVwiYCk7XG4gICAgcmV0dXJuIGY7XG59O1xuZnVuY3Rpb24gYWRkRm9ybWF0cyhhanYsIGxpc3QsIGZzLCBleHBvcnROYW1lKSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciBfYjtcbiAgICAoX2EgPSAoX2IgPSBhanYub3B0cy5jb2RlKS5mb3JtYXRzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoX2IuZm9ybWF0cyA9IGNvZGVnZW5fMS5fIGByZXF1aXJlKFwiYWp2LWZvcm1hdHMvZGlzdC9mb3JtYXRzXCIpLiR7ZXhwb3J0TmFtZX1gKTtcbiAgICBmb3IgKGNvbnN0IGYgb2YgbGlzdClcbiAgICAgICAgYWp2LmFkZEZvcm1hdChmLCBmc1tmXSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmb3JtYXRzUGx1Z2luO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZm9ybWF0c1BsdWdpbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5uZWFybGV5ID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oKSB7XG5cbiAgICBmdW5jdGlvbiBSdWxlKG5hbWUsIHN5bWJvbHMsIHBvc3Rwcm9jZXNzKSB7XG4gICAgICAgIHRoaXMuaWQgPSArK1J1bGUuaGlnaGVzdElkO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLnN5bWJvbHMgPSBzeW1ib2xzOyAgICAgICAgLy8gYSBsaXN0IG9mIGxpdGVyYWwgfCByZWdleCBjbGFzcyB8IG5vbnRlcm1pbmFsXG4gICAgICAgIHRoaXMucG9zdHByb2Nlc3MgPSBwb3N0cHJvY2VzcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIFJ1bGUuaGlnaGVzdElkID0gMDtcblxuICAgIFJ1bGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24od2l0aEN1cnNvckF0KSB7XG4gICAgICAgIHZhciBzeW1ib2xTZXF1ZW5jZSA9ICh0eXBlb2Ygd2l0aEN1cnNvckF0ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc3ltYm9scy5tYXAoZ2V0U3ltYm9sU2hvcnREaXNwbGF5KS5qb2luKCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoICAgdGhpcy5zeW1ib2xzLnNsaWNlKDAsIHdpdGhDdXJzb3JBdCkubWFwKGdldFN5bWJvbFNob3J0RGlzcGxheSkuam9pbignICcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFwiIOKXjyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0aGlzLnN5bWJvbHMuc2xpY2Uod2l0aEN1cnNvckF0KS5tYXAoZ2V0U3ltYm9sU2hvcnREaXNwbGF5KS5qb2luKCcgJykgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyBcIiDihpIgXCIgKyBzeW1ib2xTZXF1ZW5jZTtcbiAgICB9XG5cblxuICAgIC8vIGEgU3RhdGUgaXMgYSBydWxlIGF0IGEgcG9zaXRpb24gZnJvbSBhIGdpdmVuIHN0YXJ0aW5nIHBvaW50IGluIHRoZSBpbnB1dCBzdHJlYW0gKHJlZmVyZW5jZSlcbiAgICBmdW5jdGlvbiBTdGF0ZShydWxlLCBkb3QsIHJlZmVyZW5jZSwgd2FudGVkQnkpIHtcbiAgICAgICAgdGhpcy5ydWxlID0gcnVsZTtcbiAgICAgICAgdGhpcy5kb3QgPSBkb3Q7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgdGhpcy53YW50ZWRCeSA9IHdhbnRlZEJ5O1xuICAgICAgICB0aGlzLmlzQ29tcGxldGUgPSB0aGlzLmRvdCA9PT0gcnVsZS5zeW1ib2xzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBTdGF0ZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFwie1wiICsgdGhpcy5ydWxlLnRvU3RyaW5nKHRoaXMuZG90KSArIFwifSwgZnJvbTogXCIgKyAodGhpcy5yZWZlcmVuY2UgfHwgMCk7XG4gICAgfTtcblxuICAgIFN0YXRlLnByb3RvdHlwZS5uZXh0U3RhdGUgPSBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgICB2YXIgc3RhdGUgPSBuZXcgU3RhdGUodGhpcy5ydWxlLCB0aGlzLmRvdCArIDEsIHRoaXMucmVmZXJlbmNlLCB0aGlzLndhbnRlZEJ5KTtcbiAgICAgICAgc3RhdGUubGVmdCA9IHRoaXM7XG4gICAgICAgIHN0YXRlLnJpZ2h0ID0gY2hpbGQ7XG4gICAgICAgIGlmIChzdGF0ZS5pc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICBzdGF0ZS5kYXRhID0gc3RhdGUuYnVpbGQoKTtcbiAgICAgICAgICAgIC8vIEhhdmluZyByaWdodCBzZXQgaGVyZSB3aWxsIHByZXZlbnQgdGhlIHJpZ2h0IHN0YXRlIGFuZCBpdHMgY2hpbGRyZW5cbiAgICAgICAgICAgIC8vIGZvcm0gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWRcbiAgICAgICAgICAgIHN0YXRlLnJpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9O1xuXG4gICAgU3RhdGUucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IFtdO1xuICAgICAgICB2YXIgbm9kZSA9IHRoaXM7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobm9kZS5yaWdodC5kYXRhKTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLmxlZnQ7XG4gICAgICAgIH0gd2hpbGUgKG5vZGUubGVmdCk7XG4gICAgICAgIGNoaWxkcmVuLnJldmVyc2UoKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH07XG5cbiAgICBTdGF0ZS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnJ1bGUucG9zdHByb2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMucnVsZS5wb3N0cHJvY2Vzcyh0aGlzLmRhdGEsIHRoaXMucmVmZXJlbmNlLCBQYXJzZXIuZmFpbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBDb2x1bW4oZ3JhbW1hciwgaW5kZXgpIHtcbiAgICAgICAgdGhpcy5ncmFtbWFyID0gZ3JhbW1hcjtcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLnN0YXRlcyA9IFtdO1xuICAgICAgICB0aGlzLndhbnRzID0ge307IC8vIHN0YXRlcyBpbmRleGVkIGJ5IHRoZSBub24tdGVybWluYWwgdGhleSBleHBlY3RcbiAgICAgICAgdGhpcy5zY2FubmFibGUgPSBbXTsgLy8gbGlzdCBvZiBzdGF0ZXMgdGhhdCBleHBlY3QgYSB0b2tlblxuICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IHt9OyAvLyBzdGF0ZXMgdGhhdCBhcmUgbnVsbGFibGVcbiAgICB9XG5cblxuICAgIENvbHVtbi5wcm90b3R5cGUucHJvY2VzcyA9IGZ1bmN0aW9uKG5leHRDb2x1bW4pIHtcbiAgICAgICAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuICAgICAgICB2YXIgd2FudHMgPSB0aGlzLndhbnRzO1xuICAgICAgICB2YXIgY29tcGxldGVkID0gdGhpcy5jb21wbGV0ZWQ7XG5cbiAgICAgICAgZm9yICh2YXIgdyA9IDA7IHcgPCBzdGF0ZXMubGVuZ3RoOyB3KyspIHsgLy8gbmIuIHdlIHB1c2goKSBkdXJpbmcgaXRlcmF0aW9uXG4gICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZXNbd107XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZS5pc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmRhdGEgIT09IFBhcnNlci5mYWlsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgIHZhciB3YW50ZWRCeSA9IHN0YXRlLndhbnRlZEJ5O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gd2FudGVkQnkubGVuZ3RoOyBpLS07ICkgeyAvLyB0aGlzIGxpbmUgaXMgaG90XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVmdCA9IHdhbnRlZEJ5W2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZShsZWZ0LCBzdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsLWNhc2UgbnVsbGFibGVzXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZWZlcmVuY2UgPT09IHRoaXMuaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBmdXR1cmUgcHJlZGljdG9ycyBvZiB0aGlzIHJ1bGUgZ2V0IGNvbXBsZXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHAgPSBzdGF0ZS5ydWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5jb21wbGV0ZWRbZXhwXSA9IHRoaXMuY29tcGxldGVkW2V4cF0gfHwgW10pLnB1c2goc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHF1ZXVlIHNjYW5uYWJsZSBzdGF0ZXNcbiAgICAgICAgICAgICAgICB2YXIgZXhwID0gc3RhdGUucnVsZS5zeW1ib2xzW3N0YXRlLmRvdF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBleHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5hYmxlLnB1c2goc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBwcmVkaWN0XG4gICAgICAgICAgICAgICAgaWYgKHdhbnRzW2V4cF0pIHtcbiAgICAgICAgICAgICAgICAgICAgd2FudHNbZXhwXS5wdXNoKHN0YXRlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkLmhhc093blByb3BlcnR5KGV4cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudWxscyA9IGNvbXBsZXRlZFtleHBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByaWdodCA9IG51bGxzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGUoc3RhdGUsIHJpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdhbnRzW2V4cF0gPSBbc3RhdGVdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWRpY3QoZXhwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBDb2x1bW4ucHJvdG90eXBlLnByZWRpY3QgPSBmdW5jdGlvbihleHApIHtcbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5ncmFtbWFyLmJ5TmFtZVtleHBdIHx8IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciByID0gcnVsZXNbaV07XG4gICAgICAgICAgICB2YXIgd2FudGVkQnkgPSB0aGlzLndhbnRzW2V4cF07XG4gICAgICAgICAgICB2YXIgcyA9IG5ldyBTdGF0ZShyLCAwLCB0aGlzLmluZGV4LCB3YW50ZWRCeSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlcy5wdXNoKHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQ29sdW1uLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHZhciBjb3B5ID0gbGVmdC5uZXh0U3RhdGUocmlnaHQpO1xuICAgICAgICB0aGlzLnN0YXRlcy5wdXNoKGNvcHkpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gR3JhbW1hcihydWxlcywgc3RhcnQpIHtcbiAgICAgICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xuICAgICAgICB0aGlzLnN0YXJ0ID0gc3RhcnQgfHwgdGhpcy5ydWxlc1swXS5uYW1lO1xuICAgICAgICB2YXIgYnlOYW1lID0gdGhpcy5ieU5hbWUgPSB7fTtcbiAgICAgICAgdGhpcy5ydWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGUpIHtcbiAgICAgICAgICAgIGlmICghYnlOYW1lLmhhc093blByb3BlcnR5KHJ1bGUubmFtZSkpIHtcbiAgICAgICAgICAgICAgICBieU5hbWVbcnVsZS5uYW1lXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnlOYW1lW3J1bGUubmFtZV0ucHVzaChydWxlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU28gd2UgY2FuIGFsbG93IHBhc3NpbmcgKHJ1bGVzLCBzdGFydCkgZGlyZWN0bHkgdG8gUGFyc2VyIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIEdyYW1tYXIuZnJvbUNvbXBpbGVkID0gZnVuY3Rpb24ocnVsZXMsIHN0YXJ0KSB7XG4gICAgICAgIHZhciBsZXhlciA9IHJ1bGVzLkxleGVyO1xuICAgICAgICBpZiAocnVsZXMuUGFyc2VyU3RhcnQpIHtcbiAgICAgICAgICBzdGFydCA9IHJ1bGVzLlBhcnNlclN0YXJ0O1xuICAgICAgICAgIHJ1bGVzID0gcnVsZXMuUGFyc2VyUnVsZXM7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gcnVsZXMubWFwKGZ1bmN0aW9uIChyKSB7IHJldHVybiAobmV3IFJ1bGUoci5uYW1lLCByLnN5bWJvbHMsIHIucG9zdHByb2Nlc3MpKTsgfSk7XG4gICAgICAgIHZhciBnID0gbmV3IEdyYW1tYXIocnVsZXMsIHN0YXJ0KTtcbiAgICAgICAgZy5sZXhlciA9IGxleGVyOyAvLyBuYi4gc3RvcmluZyBsZXhlciBvbiBHcmFtbWFyIGlzIGlmZnksIGJ1dCB1bmF2b2lkYWJsZVxuICAgICAgICByZXR1cm4gZztcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIFN0cmVhbUxleGVyKCkge1xuICAgICAgdGhpcy5yZXNldChcIlwiKTtcbiAgICB9XG5cbiAgICBTdHJlYW1MZXhlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihkYXRhLCBzdGF0ZSkge1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IGRhdGE7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICB0aGlzLmxpbmUgPSBzdGF0ZSA/IHN0YXRlLmxpbmUgOiAxO1xuICAgICAgICB0aGlzLmxhc3RMaW5lQnJlYWsgPSBzdGF0ZSA/IC1zdGF0ZS5jb2wgOiAwO1xuICAgIH1cblxuICAgIFN0cmVhbUxleGVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4IDwgdGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgY2ggPSB0aGlzLmJ1ZmZlclt0aGlzLmluZGV4KytdO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnXFxuJykge1xuICAgICAgICAgICAgICB0aGlzLmxpbmUgKz0gMTtcbiAgICAgICAgICAgICAgdGhpcy5sYXN0TGluZUJyZWFrID0gdGhpcy5pbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IGNofTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIFN0cmVhbUxleGVyLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgIGNvbDogdGhpcy5pbmRleCAtIHRoaXMubGFzdExpbmVCcmVhayxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTdHJlYW1MZXhlci5wcm90b3R5cGUuZm9ybWF0RXJyb3IgPSBmdW5jdGlvbih0b2tlbiwgbWVzc2FnZSkge1xuICAgICAgICAvLyBuYi4gdGhpcyBnZXRzIGNhbGxlZCBhZnRlciBjb25zdW1pbmcgdGhlIG9mZmVuZGluZyB0b2tlbixcbiAgICAgICAgLy8gc28gdGhlIGN1bHByaXQgaXMgaW5kZXgtMVxuICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgICAgIGlmICh0eXBlb2YgYnVmZmVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gYnVmZmVyXG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICAgICAgLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLCB0aGlzLmxpbmUgLSA1KSwgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGluZVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHZhciBuZXh0TGluZUJyZWFrID0gYnVmZmVyLmluZGV4T2YoJ1xcbicsIHRoaXMuaW5kZXgpO1xuICAgICAgICAgICAgaWYgKG5leHRMaW5lQnJlYWsgPT09IC0xKSBuZXh0TGluZUJyZWFrID0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBjb2wgPSB0aGlzLmluZGV4IC0gdGhpcy5sYXN0TGluZUJyZWFrO1xuICAgICAgICAgICAgdmFyIGxhc3RMaW5lRGlnaXRzID0gU3RyaW5nKHRoaXMubGluZSkubGVuZ3RoO1xuICAgICAgICAgICAgbWVzc2FnZSArPSBcIiBhdCBsaW5lIFwiICsgdGhpcy5saW5lICsgXCIgY29sIFwiICsgY29sICsgXCI6XFxuXFxuXCI7XG4gICAgICAgICAgICBtZXNzYWdlICs9IGxpbmVzXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbihsaW5lLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWQodGhpcy5saW5lIC0gbGluZXMubGVuZ3RoICsgaSArIDEsIGxhc3RMaW5lRGlnaXRzKSArIFwiIFwiICsgbGluZTtcbiAgICAgICAgICAgICAgICB9LCB0aGlzKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgICAgICAgICAgbWVzc2FnZSArPSBcIlxcblwiICsgcGFkKFwiXCIsIGxhc3RMaW5lRGlnaXRzICsgY29sKSArIFwiXlxcblwiO1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZSArIFwiIGF0IGluZGV4IFwiICsgKHRoaXMuaW5kZXggLSAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhZChuLCBsZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBzID0gU3RyaW5nKG4pO1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5KGxlbmd0aCAtIHMubGVuZ3RoICsgMSkuam9pbihcIiBcIikgKyBzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gUGFyc2VyKHJ1bGVzLCBzdGFydCwgb3B0aW9ucykge1xuICAgICAgICBpZiAocnVsZXMgaW5zdGFuY2VvZiBHcmFtbWFyKSB7XG4gICAgICAgICAgICB2YXIgZ3JhbW1hciA9IHJ1bGVzO1xuICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSBzdGFydDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBncmFtbWFyID0gR3JhbW1hci5mcm9tQ29tcGlsZWQocnVsZXMsIHN0YXJ0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyYW1tYXIgPSBncmFtbWFyO1xuXG4gICAgICAgIC8vIFJlYWQgb3B0aW9uc1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZWVwSGlzdG9yeTogZmFsc2UsXG4gICAgICAgICAgICBsZXhlcjogZ3JhbW1hci5sZXhlciB8fCBuZXcgU3RyZWFtTGV4ZXIsXG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIGtleSBpbiAob3B0aW9ucyB8fCB7fSkpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0dXAgbGV4ZXJcbiAgICAgICAgdGhpcy5sZXhlciA9IHRoaXMub3B0aW9ucy5sZXhlcjtcbiAgICAgICAgdGhpcy5sZXhlclN0YXRlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIFNldHVwIGEgdGFibGVcbiAgICAgICAgdmFyIGNvbHVtbiA9IG5ldyBDb2x1bW4oZ3JhbW1hciwgMCk7XG4gICAgICAgIHZhciB0YWJsZSA9IHRoaXMudGFibGUgPSBbY29sdW1uXTtcblxuICAgICAgICAvLyBJIGNvdWxkIGJlIGV4cGVjdGluZyBhbnl0aGluZy5cbiAgICAgICAgY29sdW1uLndhbnRzW2dyYW1tYXIuc3RhcnRdID0gW107XG4gICAgICAgIGNvbHVtbi5wcmVkaWN0KGdyYW1tYXIuc3RhcnQpO1xuICAgICAgICAvLyBUT0RPIHdoYXQgaWYgc3RhcnQgcnVsZSBpcyBudWxsYWJsZT9cbiAgICAgICAgY29sdW1uLnByb2Nlc3MoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gMDsgLy8gdG9rZW4gaW5kZXhcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgYSByZXNlcnZlZCB0b2tlbiBmb3IgaW5kaWNhdGluZyBhIHBhcnNlIGZhaWxcbiAgICBQYXJzZXIuZmFpbCA9IHt9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5mZWVkID0gZnVuY3Rpb24oY2h1bmspIHtcbiAgICAgICAgdmFyIGxleGVyID0gdGhpcy5sZXhlcjtcbiAgICAgICAgbGV4ZXIucmVzZXQoY2h1bmssIHRoaXMubGV4ZXJTdGF0ZSk7XG5cbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0b2tlbiA9IGxleGVyLm5leHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIG5leHQgY29sdW1uIHNvIHRoYXQgdGhlIGVycm9yIHJlcG9ydGVyXG4gICAgICAgICAgICAgICAgLy8gY2FuIGRpc3BsYXkgdGhlIGNvcnJlY3RseSBwcmVkaWN0ZWQgc3RhdGVzLlxuICAgICAgICAgICAgICAgIHZhciBuZXh0Q29sdW1uID0gbmV3IENvbHVtbih0aGlzLmdyYW1tYXIsIHRoaXMuY3VycmVudCArIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUucHVzaChuZXh0Q29sdW1uKTtcbiAgICAgICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHRoaXMucmVwb3J0TGV4ZXJFcnJvcihlKSk7XG4gICAgICAgICAgICAgICAgZXJyLm9mZnNldCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICBlcnIudG9rZW4gPSBlLnRva2VuO1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdlIGFkZCBuZXcgc3RhdGVzIHRvIHRhYmxlW2N1cnJlbnQrMV1cbiAgICAgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnRhYmxlW3RoaXMuY3VycmVudF07XG5cbiAgICAgICAgICAgIC8vIEdDIHVudXNlZCBzdGF0ZXNcbiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmtlZXBIaXN0b3J5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGFibGVbdGhpcy5jdXJyZW50IC0gMV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuID0gdGhpcy5jdXJyZW50ICsgMTtcbiAgICAgICAgICAgIHZhciBuZXh0Q29sdW1uID0gbmV3IENvbHVtbih0aGlzLmdyYW1tYXIsIG4pO1xuICAgICAgICAgICAgdGhpcy50YWJsZS5wdXNoKG5leHRDb2x1bW4pO1xuXG4gICAgICAgICAgICAvLyBBZHZhbmNlIGFsbCB0b2tlbnMgdGhhdCBleHBlY3QgdGhlIHN5bWJvbFxuICAgICAgICAgICAgdmFyIGxpdGVyYWwgPSB0b2tlbi50ZXh0ICE9PSB1bmRlZmluZWQgPyB0b2tlbi50ZXh0IDogdG9rZW4udmFsdWU7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBsZXhlci5jb25zdHJ1Y3RvciA9PT0gU3RyZWFtTGV4ZXIgPyB0b2tlbi52YWx1ZSA6IHRva2VuO1xuICAgICAgICAgICAgdmFyIHNjYW5uYWJsZSA9IGNvbHVtbi5zY2FubmFibGU7XG4gICAgICAgICAgICBmb3IgKHZhciB3ID0gc2Nhbm5hYmxlLmxlbmd0aDsgdy0tOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzY2FubmFibGVbd107XG4gICAgICAgICAgICAgICAgdmFyIGV4cGVjdCA9IHN0YXRlLnJ1bGUuc3ltYm9sc1tzdGF0ZS5kb3RdO1xuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBjb25zdW1lIHRoZSB0b2tlblxuICAgICAgICAgICAgICAgIC8vIGVpdGhlciByZWdleCBvciBsaXRlcmFsXG4gICAgICAgICAgICAgICAgaWYgKGV4cGVjdC50ZXN0ID8gZXhwZWN0LnRlc3QodmFsdWUpIDpcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0LnR5cGUgPyBleHBlY3QudHlwZSA9PT0gdG9rZW4udHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGV4cGVjdC5saXRlcmFsID09PSBsaXRlcmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBpdFxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHN0YXRlLm5leHRTdGF0ZSh7ZGF0YTogdmFsdWUsIHRva2VuOiB0b2tlbiwgaXNUb2tlbjogdHJ1ZSwgcmVmZXJlbmNlOiBuIC0gMX0pO1xuICAgICAgICAgICAgICAgICAgICBuZXh0Q29sdW1uLnN0YXRlcy5wdXNoKG5leHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTmV4dCwgZm9yIGVhY2ggb2YgdGhlIHJ1bGVzLCB3ZSBlaXRoZXJcbiAgICAgICAgICAgIC8vIChhKSBjb21wbGV0ZSBpdCwgYW5kIHRyeSB0byBzZWUgaWYgdGhlIHJlZmVyZW5jZSByb3cgZXhwZWN0ZWQgdGhhdFxuICAgICAgICAgICAgLy8gICAgIHJ1bGVcbiAgICAgICAgICAgIC8vIChiKSBwcmVkaWN0IHRoZSBuZXh0IG5vbnRlcm1pbmFsIGl0IGV4cGVjdHMgYnkgYWRkaW5nIHRoYXRcbiAgICAgICAgICAgIC8vICAgICBub250ZXJtaW5hbCdzIHN0YXJ0IHN0YXRlXG4gICAgICAgICAgICAvLyBUbyBwcmV2ZW50IGR1cGxpY2F0aW9uLCB3ZSBhbHNvIGtlZXAgdHJhY2sgb2YgcnVsZXMgd2UgaGF2ZSBhbHJlYWR5XG4gICAgICAgICAgICAvLyBhZGRlZFxuXG4gICAgICAgICAgICBuZXh0Q29sdW1uLnByb2Nlc3MoKTtcblxuICAgICAgICAgICAgLy8gSWYgbmVlZGVkLCB0aHJvdyBhbiBlcnJvcjpcbiAgICAgICAgICAgIGlmIChuZXh0Q29sdW1uLnN0YXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBObyBzdGF0ZXMgYXQgYWxsISBUaGlzIGlzIG5vdCBnb29kLlxuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IodGhpcy5yZXBvcnRFcnJvcih0b2tlbikpO1xuICAgICAgICAgICAgICAgIGVyci5vZmZzZXQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgZXJyLnRva2VuID0gdG9rZW47XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBtYXliZSBzYXZlIGxleGVyIHN0YXRlXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmtlZXBIaXN0b3J5KSB7XG4gICAgICAgICAgICAgIGNvbHVtbi5sZXhlclN0YXRlID0gbGV4ZXIuc2F2ZSgpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICB0aGlzLmxleGVyU3RhdGUgPSBsZXhlci5zYXZlKClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY3JlbWVudGFsbHkga2VlcCB0cmFjayBvZiByZXN1bHRzXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZmluaXNoKCk7XG5cbiAgICAgICAgLy8gQWxsb3cgY2hhaW5pbmcsIGZvciB3aGF0ZXZlciBpdCdzIHdvcnRoXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnJlcG9ydExleGVyRXJyb3IgPSBmdW5jdGlvbihsZXhlckVycm9yKSB7XG4gICAgICAgIHZhciB0b2tlbkRpc3BsYXksIGxleGVyTWVzc2FnZTtcbiAgICAgICAgLy8gUGxhbm5pbmcgdG8gYWRkIGEgdG9rZW4gcHJvcGVydHkgdG8gbW9vJ3MgdGhyb3duIGVycm9yXG4gICAgICAgIC8vIGV2ZW4gb24gZXJyb3JpbmcgdG9rZW5zIHRvIGJlIHVzZWQgaW4gZXJyb3IgZGlzcGxheSBiZWxvd1xuICAgICAgICB2YXIgdG9rZW4gPSBsZXhlckVycm9yLnRva2VuO1xuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIHRva2VuRGlzcGxheSA9IFwiaW5wdXQgXCIgKyBKU09OLnN0cmluZ2lmeSh0b2tlbi50ZXh0WzBdKSArIFwiIChsZXhlciBlcnJvcilcIjtcbiAgICAgICAgICAgIGxleGVyTWVzc2FnZSA9IHRoaXMubGV4ZXIuZm9ybWF0RXJyb3IodG9rZW4sIFwiU3ludGF4IGVycm9yXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9rZW5EaXNwbGF5ID0gXCJpbnB1dCAobGV4ZXIgZXJyb3IpXCI7XG4gICAgICAgICAgICBsZXhlck1lc3NhZ2UgPSBsZXhlckVycm9yLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVwb3J0RXJyb3JDb21tb24obGV4ZXJNZXNzYWdlLCB0b2tlbkRpc3BsYXkpO1xuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnJlcG9ydEVycm9yID0gZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgICAgdmFyIHRva2VuRGlzcGxheSA9ICh0b2tlbi50eXBlID8gdG9rZW4udHlwZSArIFwiIHRva2VuOiBcIiA6IFwiXCIpICsgSlNPTi5zdHJpbmdpZnkodG9rZW4udmFsdWUgIT09IHVuZGVmaW5lZCA/IHRva2VuLnZhbHVlIDogdG9rZW4pO1xuICAgICAgICB2YXIgbGV4ZXJNZXNzYWdlID0gdGhpcy5sZXhlci5mb3JtYXRFcnJvcih0b2tlbiwgXCJTeW50YXggZXJyb3JcIik7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG9ydEVycm9yQ29tbW9uKGxleGVyTWVzc2FnZSwgdG9rZW5EaXNwbGF5KTtcbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5yZXBvcnRFcnJvckNvbW1vbiA9IGZ1bmN0aW9uKGxleGVyTWVzc2FnZSwgdG9rZW5EaXNwbGF5KSB7XG4gICAgICAgIHZhciBsaW5lcyA9IFtdO1xuICAgICAgICBsaW5lcy5wdXNoKGxleGVyTWVzc2FnZSk7XG4gICAgICAgIHZhciBsYXN0Q29sdW1uSW5kZXggPSB0aGlzLnRhYmxlLmxlbmd0aCAtIDI7XG4gICAgICAgIHZhciBsYXN0Q29sdW1uID0gdGhpcy50YWJsZVtsYXN0Q29sdW1uSW5kZXhdO1xuICAgICAgICB2YXIgZXhwZWN0YW50U3RhdGVzID0gbGFzdENvbHVtbi5zdGF0ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV4dFN5bWJvbCA9IHN0YXRlLnJ1bGUuc3ltYm9sc1tzdGF0ZS5kb3RdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0U3ltYm9sICYmIHR5cGVvZiBuZXh0U3ltYm9sICE9PSBcInN0cmluZ1wiO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGV4cGVjdGFudFN0YXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGxpbmVzLnB1c2goJ1VuZXhwZWN0ZWQgJyArIHRva2VuRGlzcGxheSArICcuIEkgZGlkIG5vdCBleHBlY3QgYW55IG1vcmUgaW5wdXQuIEhlcmUgaXMgdGhlIHN0YXRlIG9mIG15IHBhcnNlIHRhYmxlOlxcbicpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5U3RhdGVTdGFjayhsYXN0Q29sdW1uLnN0YXRlcywgbGluZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluZXMucHVzaCgnVW5leHBlY3RlZCAnICsgdG9rZW5EaXNwbGF5ICsgJy4gSW5zdGVhZCwgSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcXG4nKTtcbiAgICAgICAgICAgIC8vIERpc3BsYXkgYSBcInN0YXRlIHN0YWNrXCIgZm9yIGVhY2ggZXhwZWN0YW50IHN0YXRlXG4gICAgICAgICAgICAvLyAtIHdoaWNoIHNob3dzIHlvdSBob3cgdGhpcyBzdGF0ZSBjYW1lIHRvIGJlLCBzdGVwIGJ5IHN0ZXAuXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGRlcml2YXRpb24sIHdlIG9ubHkgZGlzcGxheSB0aGUgZmlyc3Qgb25lLlxuICAgICAgICAgICAgdmFyIHN0YXRlU3RhY2tzID0gZXhwZWN0YW50U3RhdGVzXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWlsZEZpcnN0U3RhdGVTdGFjayhzdGF0ZSwgW10pIHx8IFtzdGF0ZV07XG4gICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAvLyBEaXNwbGF5IGVhY2ggc3RhdGUgdGhhdCBpcyBleHBlY3RpbmcgYSB0ZXJtaW5hbCBzeW1ib2wgbmV4dC5cbiAgICAgICAgICAgIHN0YXRlU3RhY2tzLmZvckVhY2goZnVuY3Rpb24oc3RhdGVTdGFjaykge1xuICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlU3RhY2tbMF07XG4gICAgICAgICAgICAgICAgdmFyIG5leHRTeW1ib2wgPSBzdGF0ZS5ydWxlLnN5bWJvbHNbc3RhdGUuZG90XTtcbiAgICAgICAgICAgICAgICB2YXIgc3ltYm9sRGlzcGxheSA9IHRoaXMuZ2V0U3ltYm9sRGlzcGxheShuZXh0U3ltYm9sKTtcbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCdBICcgKyBzeW1ib2xEaXNwbGF5ICsgJyBiYXNlZCBvbjonKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlTdGF0ZVN0YWNrKHN0YXRlU3RhY2ssIGxpbmVzKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGxpbmVzLnB1c2goXCJcIik7XG4gICAgICAgIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBcbiAgICBQYXJzZXIucHJvdG90eXBlLmRpc3BsYXlTdGF0ZVN0YWNrID0gZnVuY3Rpb24oc3RhdGVTdGFjaywgbGluZXMpIHtcbiAgICAgICAgdmFyIGxhc3REaXNwbGF5O1xuICAgICAgICB2YXIgc2FtZURpc3BsYXlDb3VudCA9IDA7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3RhdGVTdGFjay5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RhdGVTdGFja1tqXTtcbiAgICAgICAgICAgIHZhciBkaXNwbGF5ID0gc3RhdGUucnVsZS50b1N0cmluZyhzdGF0ZS5kb3QpO1xuICAgICAgICAgICAgaWYgKGRpc3BsYXkgPT09IGxhc3REaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgc2FtZURpc3BsYXlDb3VudCsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc2FtZURpc3BsYXlDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaCgnICAgIF4gJyArIHNhbWVEaXNwbGF5Q291bnQgKyAnIG1vcmUgbGluZXMgaWRlbnRpY2FsIHRvIHRoaXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2FtZURpc3BsYXlDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgbGluZXMucHVzaCgnICAgICcgKyBkaXNwbGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3REaXNwbGF5ID0gZGlzcGxheTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLmdldFN5bWJvbERpc3BsYXkgPSBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICAgICAgcmV0dXJuIGdldFN5bWJvbExvbmdEaXNwbGF5KHN5bWJvbCk7XG4gICAgfTtcblxuICAgIC8qXG4gICAgQnVpbGRzIGEgdGhlIGZpcnN0IHN0YXRlIHN0YWNrLiBZb3UgY2FuIHRoaW5rIG9mIGEgc3RhdGUgc3RhY2sgYXMgdGhlIGNhbGwgc3RhY2tcbiAgICBvZiB0aGUgcmVjdXJzaXZlLWRlc2NlbnQgcGFyc2VyIHdoaWNoIHRoZSBOZWFybGV5IHBhcnNlIGFsZ29yaXRobSBzaW11bGF0ZXMuXG4gICAgQSBzdGF0ZSBzdGFjayBpcyByZXByZXNlbnRlZCBhcyBhbiBhcnJheSBvZiBzdGF0ZSBvYmplY3RzLiBXaXRoaW4gYVxuICAgIHN0YXRlIHN0YWNrLCB0aGUgZmlyc3QgaXRlbSBvZiB0aGUgYXJyYXkgd2lsbCBiZSB0aGUgc3RhcnRpbmdcbiAgICBzdGF0ZSwgd2l0aCBlYWNoIHN1Y2Nlc3NpdmUgaXRlbSBpbiB0aGUgYXJyYXkgZ29pbmcgZnVydGhlciBiYWNrIGludG8gaGlzdG9yeS5cblxuICAgIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgZ2l2ZW4gYSBzdGFydGluZyBzdGF0ZSBhbmQgYW4gZW1wdHkgYXJyYXkgcmVwcmVzZW50aW5nXG4gICAgdGhlIHZpc2l0ZWQgc3RhdGVzLCBhbmQgaXQgcmV0dXJucyBhbiBzaW5nbGUgc3RhdGUgc3RhY2suXG5cbiAgICAqL1xuICAgIFBhcnNlci5wcm90b3R5cGUuYnVpbGRGaXJzdFN0YXRlU3RhY2sgPSBmdW5jdGlvbihzdGF0ZSwgdmlzaXRlZCkge1xuICAgICAgICBpZiAodmlzaXRlZC5pbmRleE9mKHN0YXRlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIC8vIEZvdW5kIGN5Y2xlLCByZXR1cm4gbnVsbFxuICAgICAgICAgICAgLy8gdG8gZWxpbWluYXRlIHRoaXMgcGF0aCBmcm9tIHRoZSByZXN1bHRzLCBiZWNhdXNlXG4gICAgICAgICAgICAvLyB3ZSBkb24ndCBrbm93IGhvdyB0byBkaXNwbGF5IGl0IG1lYW5pbmdmdWxseVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLndhbnRlZEJ5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtzdGF0ZV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZXZTdGF0ZSA9IHN0YXRlLndhbnRlZEJ5WzBdO1xuICAgICAgICB2YXIgY2hpbGRWaXNpdGVkID0gW3N0YXRlXS5jb25jYXQodmlzaXRlZCk7XG4gICAgICAgIHZhciBjaGlsZFJlc3VsdCA9IHRoaXMuYnVpbGRGaXJzdFN0YXRlU3RhY2socHJldlN0YXRlLCBjaGlsZFZpc2l0ZWQpO1xuICAgICAgICBpZiAoY2hpbGRSZXN1bHQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbc3RhdGVdLmNvbmNhdChjaGlsZFJlc3VsdCk7XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy50YWJsZVt0aGlzLmN1cnJlbnRdO1xuICAgICAgICBjb2x1bW4ubGV4ZXJTdGF0ZSA9IHRoaXMubGV4ZXJTdGF0ZTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rpb24oY29sdW1uKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvbHVtbi5pbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gaW5kZXg7XG4gICAgICAgIHRoaXMudGFibGVbaW5kZXhdID0gY29sdW1uO1xuICAgICAgICB0aGlzLnRhYmxlLnNwbGljZShpbmRleCArIDEpO1xuICAgICAgICB0aGlzLmxleGVyU3RhdGUgPSBjb2x1bW4ubGV4ZXJTdGF0ZTtcblxuICAgICAgICAvLyBJbmNyZW1lbnRhbGx5IGtlZXAgdHJhY2sgb2YgcmVzdWx0c1xuICAgICAgICB0aGlzLnJlc3VsdHMgPSB0aGlzLmZpbmlzaCgpO1xuICAgIH07XG5cbiAgICAvLyBuYi4gZGVwcmVjYXRlZDogdXNlIHNhdmUvcmVzdG9yZSBpbnN0ZWFkIVxuICAgIFBhcnNlci5wcm90b3R5cGUucmV3aW5kID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMua2VlcEhpc3RvcnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0IG9wdGlvbiBga2VlcEhpc3RvcnlgIHRvIGVuYWJsZSByZXdpbmRpbmcnKVxuICAgICAgICB9XG4gICAgICAgIC8vIG5iLiByZWNhbGwgY29sdW1uICh0YWJsZSkgaW5kaWNpZXMgZmFsbCBiZXR3ZWVuIHRva2VuIGluZGljaWVzLlxuICAgICAgICAvLyAgICAgICAgY29sIDAgICAtLSAgIHRva2VuIDAgICAtLSAgIGNvbCAxXG4gICAgICAgIHRoaXMucmVzdG9yZSh0aGlzLnRhYmxlW2luZGV4XSk7XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIFJldHVybiB0aGUgcG9zc2libGUgcGFyc2luZ3NcbiAgICAgICAgdmFyIGNvbnNpZGVyYXRpb25zID0gW107XG4gICAgICAgIHZhciBzdGFydCA9IHRoaXMuZ3JhbW1hci5zdGFydDtcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMudGFibGVbdGhpcy50YWJsZS5sZW5ndGggLSAxXVxuICAgICAgICBjb2x1bW4uc3RhdGVzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGlmICh0LnJ1bGUubmFtZSA9PT0gc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgJiYgdC5kb3QgPT09IHQucnVsZS5zeW1ib2xzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAmJiB0LnJlZmVyZW5jZSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAmJiB0LmRhdGEgIT09IFBhcnNlci5mYWlsKSB7XG4gICAgICAgICAgICAgICAgY29uc2lkZXJhdGlvbnMucHVzaCh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb25zaWRlcmF0aW9ucy5tYXAoZnVuY3Rpb24oYykge3JldHVybiBjLmRhdGE7IH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZXRTeW1ib2xMb25nRGlzcGxheShzeW1ib2wpIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygc3ltYm9sO1xuICAgICAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sLmxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3ltYm9sLmxpdGVyYWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NoYXJhY3RlciBtYXRjaGluZyAnICsgc3ltYm9sO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wudHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2wudHlwZSArICcgdG9rZW4nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wudGVzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAndG9rZW4gbWF0Y2hpbmcgJyArIFN0cmluZyhzeW1ib2wudGVzdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBzeW1ib2wgdHlwZTogJyArIHN5bWJvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTeW1ib2xTaG9ydERpc3BsYXkoc3ltYm9sKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHN5bWJvbDtcbiAgICAgICAgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBzeW1ib2w7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKHN5bWJvbC5saXRlcmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHN5bWJvbC5saXRlcmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ltYm9sIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbC50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wudHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJScgKyBzeW1ib2wudHlwZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ltYm9sLnRlc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzwnICsgU3RyaW5nKHN5bWJvbC50ZXN0KSArICc+JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHN5bWJvbCB0eXBlOiAnICsgc3ltYm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIFBhcnNlcjogUGFyc2VyLFxuICAgICAgICBHcmFtbWFyOiBHcmFtbWFyLFxuICAgICAgICBSdWxlOiBSdWxlLFxuICAgIH07XG5cbn0pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBuZWFybGV5LCB2ZXJzaW9uIDIuMjAuMVxuLy8gaHR0cDovL2dpdGh1Yi5jb20vSGFyZG1hdGgxMjMvbmVhcmxleVxuLy8gQnlwYXNzZXMgVFM2MTMzLiBBbGxvdyBkZWNsYXJlZCBidXQgdW51c2VkIGZ1bmN0aW9ucy5cbi8vIEB0cy1pZ25vcmVcbmZ1bmN0aW9uIGlkKGQpIHsgcmV0dXJuIGRbMF07IH1cbmNvbnN0IGRlZXBGbGF0dGVuID0gKGFycikgPT4gW10uY29uY2F0KC4uLmFyci5tYXAoKHYpID0+IChBcnJheS5pc0FycmF5KHYpID8gZGVlcEZsYXR0ZW4odikgOiB2KSkpO1xuZnVuY3Rpb24gZmxhdF9zdHJpbmcoZCkge1xuICAgIGlmIChkKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGQpKVxuICAgICAgICAgICAgcmV0dXJuIGRlZXBGbGF0dGVuKGQpLmpvaW4oXCJcIik7XG4gICAgICAgIHJldHVybiBkO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbn1cbjtcbjtcbjtcbjtcbmNvbnN0IGdyYW1tYXIgPSB7XG4gICAgTGV4ZXI6IHVuZGVmaW5lZCxcbiAgICBQYXJzZXJSdWxlczogW1xuICAgICAgICB7IFwibmFtZVwiOiBcIlJldmVyc2VfcGF0aFwiLCBcInN5bWJvbHNcIjogW1wiUGF0aFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlJldmVyc2VfcGF0aCRzdHJpbmckMVwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiPFwiIH0sIHsgXCJsaXRlcmFsXCI6IFwiPlwiIH1dLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkLmpvaW4oJycpIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUmV2ZXJzZV9wYXRoXCIsIFwic3ltYm9sc1wiOiBbXCJSZXZlcnNlX3BhdGgkc3RyaW5nJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJGb3J3YXJkX3BhdGgkc3ViZXhwcmVzc2lvbiQxJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiPFwiIH0sIC9bcFBdLywgL1tvT10vLCAvW3NTXS8sIC9bdFRdLywgL1ttTV0vLCAvW2FBXS8sIC9bc1NdLywgL1t0VF0vLCAvW2VFXS8sIC9bclJdLywgeyBcImxpdGVyYWxcIjogXCJAXCIgfV0sIFwicG9zdHByb2Nlc3NcIjogZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQuam9pbihcIlwiKTsgfSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkZvcndhcmRfcGF0aCRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkZvcndhcmRfcGF0aCRzdWJleHByZXNzaW9uJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwiRG9tYWluXCIsIHsgXCJsaXRlcmFsXCI6IFwiPlwiIH1dIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRm9yd2FyZF9wYXRoXCIsIFwic3ltYm9sc1wiOiBbXCJGb3J3YXJkX3BhdGgkc3ViZXhwcmVzc2lvbiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRm9yd2FyZF9wYXRoJHN1YmV4cHJlc3Npb24kMlwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiPFwiIH0sIC9bcFBdLywgL1tvT10vLCAvW3NTXS8sIC9bdFRdLywgL1ttTV0vLCAvW2FBXS8sIC9bc1NdLywgL1t0VF0vLCAvW2VFXS8sIC9bclJdLywgeyBcImxpdGVyYWxcIjogXCI+XCIgfV0sIFwicG9zdHByb2Nlc3NcIjogZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQuam9pbihcIlwiKTsgfSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkZvcndhcmRfcGF0aFwiLCBcInN5bWJvbHNcIjogW1wiRm9yd2FyZF9wYXRoJHN1YmV4cHJlc3Npb24kMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkZvcndhcmRfcGF0aFwiLCBcInN5bWJvbHNcIjogW1wiUGF0aFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlBhdGgkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiQV9kX2xcIiwgeyBcImxpdGVyYWxcIjogXCI6XCIgfV0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJQYXRoJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiUGF0aCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUGF0aCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtdLCBcInBvc3Rwcm9jZXNzXCI6ICgpID0+IG51bGwgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJQYXRoXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI8XCIgfSwgXCJQYXRoJGVibmYkMVwiLCBcIk1haWxib3hcIiwgeyBcImxpdGVyYWxcIjogXCI+XCIgfV0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBX2RfbCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQV9kX2wkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiLFwiIH0sIFwiQXRfZG9tYWluXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQV9kX2wkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJBX2RfbCRlYm5mJDFcIiwgXCJBX2RfbCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQV9kX2xcIiwgXCJzeW1ib2xzXCI6IFtcIkF0X2RvbWFpblwiLCBcIkFfZF9sJGVibmYkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkF0X2RvbWFpblwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiQFwiIH0sIFwiRG9tYWluXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG9tYWluJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJEb21haW4kZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiLlwiIH0sIFwic3ViX2RvbWFpblwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRvbWFpbiRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkRvbWFpbiRlYm5mJDFcIiwgXCJEb21haW4kZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRvbWFpblwiLCBcInN5bWJvbHNcIjogW1wic3ViX2RvbWFpblwiLCBcIkRvbWFpbiRlYm5mJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJzdWJfZG9tYWluXCIsIFwic3ltYm9sc1wiOiBbXCJVX2xhYmVsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiTGV0X2RpZ1wiLCBcInN5bWJvbHNcIjogW1wiQUxQSEFfRElHSVRcIl0sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJMZGhfc3RyJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJMZGhfc3RyJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiTGRoX3N0ciRlYm5mJDFcIiwgXCJBTFBIQV9ESUdfREFTSFwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkxkaF9zdHJcIiwgXCJzeW1ib2xzXCI6IFtcIkxkaF9zdHIkZWJuZiQxXCIsIFwiTGV0X2RpZ1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfTGV0X2RpZ1wiLCBcInN5bWJvbHNcIjogW1wiQUxQSEFfRElHSVRfVVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfTGRoX3N0ciRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9MZGhfc3RyJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiVV9MZGhfc3RyJGVibmYkMVwiLCBcIkFMUEhBX0RJR19EQVNIX1VcIl0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGRbMF0uY29uY2F0KFtkWzFdXSkgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJVX0xkaF9zdHJcIiwgXCJzeW1ib2xzXCI6IFtcIlVfTGRoX3N0ciRlYm5mJDFcIiwgXCJVX0xldF9kaWdcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJVX2xhYmVsJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIlVfTGRoX3N0clwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfbGFiZWwkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJVX2xhYmVsJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIl0sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJVX2xhYmVsJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfbGFiZWxcIiwgXCJzeW1ib2xzXCI6IFtcIlVfTGV0X2RpZ1wiLCBcIlVfbGFiZWwkZWJuZiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiYWRkcmVzc19saXRlcmFsJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2NF9hZGRyZXNzX2xpdGVyYWxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJhZGRyZXNzX2xpdGVyYWwkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2FkZHJlc3NfbGl0ZXJhbFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImFkZHJlc3NfbGl0ZXJhbCRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkdlbmVyYWxfYWRkcmVzc19saXRlcmFsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiYWRkcmVzc19saXRlcmFsXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCJbXCIgfSwgXCJhZGRyZXNzX2xpdGVyYWwkc3ViZXhwcmVzc2lvbiQxXCIsIHsgXCJsaXRlcmFsXCI6IFwiXVwiIH1dIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwibm9uX2xvY2FsX3BhcnRcIiwgXCJzeW1ib2xzXCI6IFtcIkRvbWFpblwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IERvbWFpbk5hbWU6IGZsYXRfc3RyaW5nKGRbMF0pIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwibm9uX2xvY2FsX3BhcnRcIiwgXCJzeW1ib2xzXCI6IFtcImFkZHJlc3NfbGl0ZXJhbFwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IEFkZHJlc3NMaXRlcmFsOiBmbGF0X3N0cmluZyhkWzBdKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIk1haWxib3hcIiwgXCJzeW1ib2xzXCI6IFtcIkxvY2FsX3BhcnRcIiwgeyBcImxpdGVyYWxcIjogXCJAXCIgfSwgXCJub25fbG9jYWxfcGFydFwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGxvY2FsUGFydDogZmxhdF9zdHJpbmcoZFswXSksIGRvbWFpblBhcnQ6IGZsYXRfc3RyaW5nKGRbMl0pIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiTG9jYWxfcGFydFwiLCBcInN5bWJvbHNcIjogW1wiRG90X3N0cmluZ1wiXSwgXCJwb3N0cHJvY2Vzc1wiOiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IERvdFN0cmluZzogZmxhdF9zdHJpbmcoZFswXSkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJMb2NhbF9wYXJ0XCIsIFwic3ltYm9sc1wiOiBbXCJRdW90ZWRfc3RyaW5nXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgUXVvdGVkU3RyaW5nOiBmbGF0X3N0cmluZyhkWzBdKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRvdF9zdHJpbmckZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRvdF9zdHJpbmckZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiLlwiIH0sIFwiQXRvbVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRvdF9zdHJpbmckZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJEb3Rfc3RyaW5nJGVibmYkMVwiLCBcIkRvdF9zdHJpbmckZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRvdF9zdHJpbmdcIiwgXCJzeW1ib2xzXCI6IFtcIkF0b21cIiwgXCJEb3Rfc3RyaW5nJGVibmYkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkF0b20kZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbL1swLTlBLVphLXohIyQlJicqK1xcLS89P15fYHt8fX5cXHUwMDgwLVxcdUZGRkYvXS9dIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQXRvbSRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkF0b20kZWJuZiQxXCIsIC9bMC05QS1aYS16ISMkJSYnKitcXC0vPT9eX2B7fH1+XFx1MDA4MC1cXHVGRkZGL10vXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkF0b21cIiwgXCJzeW1ib2xzXCI6IFtcIkF0b20kZWJuZiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUXVvdGVkX3N0cmluZyRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUXVvdGVkX3N0cmluZyRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIlF1b3RlZF9zdHJpbmckZWJuZiQxXCIsIFwiUWNvbnRlbnRTTVRQXCJdLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUXVvdGVkX3N0cmluZ1wiLCBcInN5bWJvbHNcIjogW1wiRFFVT1RFXCIsIFwiUXVvdGVkX3N0cmluZyRlYm5mJDFcIiwgXCJEUVVPVEVcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJRY29udGVudFNNVFBcIiwgXCJzeW1ib2xzXCI6IFtcInF0ZXh0U01UUFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlFjb250ZW50U01UUFwiLCBcInN5bWJvbHNcIjogW1wicXVvdGVkX3BhaXJTTVRQXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwicXVvdGVkX3BhaXJTTVRQXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCJcXFxcXCIgfSwgL1tcXHgyMC1cXHg3ZV0vXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcInF0ZXh0U01UUFwiLCBcInN5bWJvbHNcIjogWy9bXFx4MjAtXFx4MjFcXHgyMy1cXHg1YlxceDVkLVxceDdlXFx1MDA4MC1cXHVGRkZGXS9dLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NF9hZGRyZXNzX2xpdGVyYWwkbWFjcm9jYWxsJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIi5cIiB9LCBcIlNudW1cIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbCRtYWNyb2NhbGwkMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2NF9hZGRyZXNzX2xpdGVyYWwkbWFjcm9jYWxsJDJcIiwgXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbCRtYWNyb2NhbGwkMlwiLCBcIklQdjRfYWRkcmVzc19saXRlcmFsJG1hY3JvY2FsbCQyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NF9hZGRyZXNzX2xpdGVyYWxcIiwgXCJzeW1ib2xzXCI6IFtcIlNudW1cIiwgXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbCRtYWNyb2NhbGwkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfYWRkcmVzc19saXRlcmFsJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogWy9baUldLywgL1twUF0vLCAvW3ZWXS8sIHsgXCJsaXRlcmFsXCI6IFwiNlwiIH0sIHsgXCJsaXRlcmFsXCI6IFwiOlwiIH1dLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7IHJldHVybiBkLmpvaW4oXCJcIik7IH0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2FkZHJlc3NfbGl0ZXJhbFwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9hZGRyZXNzX2xpdGVyYWwkc3ViZXhwcmVzc2lvbiQxXCIsIFwiSVB2Nl9hZGRyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiR2VuZXJhbF9hZGRyZXNzX2xpdGVyYWwkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJkY29udGVudFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkdlbmVyYWxfYWRkcmVzc19saXRlcmFsJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiR2VuZXJhbF9hZGRyZXNzX2xpdGVyYWwkZWJuZiQxXCIsIFwiZGNvbnRlbnRcIl0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGRbMF0uY29uY2F0KFtkWzFdXSkgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJHZW5lcmFsX2FkZHJlc3NfbGl0ZXJhbFwiLCBcInN5bWJvbHNcIjogW1wiU3RhbmRhcmRpemVkX3RhZ1wiLCB7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIkdlbmVyYWxfYWRkcmVzc19saXRlcmFsJGVibmYkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlN0YW5kYXJkaXplZF90YWdcIiwgXCJzeW1ib2xzXCI6IFtcIkxkaF9zdHJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJkY29udGVudFwiLCBcInN5bWJvbHNcIjogWy9bXFx4MjEtXFx4NWFcXHg1ZS1cXHg3ZV0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlNudW1cIiwgXCJzeW1ib2xzXCI6IFtcIkRJR0lUXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU251bSRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFsvWzEtOV0vLCBcIkRJR0lUXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU251bVwiLCBcInN5bWJvbHNcIjogW1wiU251bSRzdWJleHByZXNzaW9uJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtJHN1YmV4cHJlc3Npb24kMlwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiMVwiIH0sIFwiRElHSVRcIiwgXCJESUdJVFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlNudW1cIiwgXCJzeW1ib2xzXCI6IFtcIlNudW0kc3ViZXhwcmVzc2lvbiQyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU251bSRzdWJleHByZXNzaW9uJDNcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjJcIiB9LCAvWzAtNF0vLCBcIkRJR0lUXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU251bVwiLCBcInN5bWJvbHNcIjogW1wiU251bSRzdWJleHByZXNzaW9uJDNcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtJHN1YmV4cHJlc3Npb24kNFwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiMlwiIH0sIHsgXCJsaXRlcmFsXCI6IFwiNVwiIH0sIC9bMC01XS9dIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU251bVwiLCBcInN5bWJvbHNcIjogW1wiU251bSRzdWJleHByZXNzaW9uJDRcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2FkZHJcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfZnVsbFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfYWRkclwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9jb21wXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9hZGRyXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2djRfZnVsbFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfYWRkclwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2NvbXBcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2hleFwiLCBcInN5bWJvbHNcIjogW1wiSEVYRElHXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9oZXgkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJIRVhESUdcIiwgXCJIRVhESUdcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2hleFwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9oZXgkc3ViZXhwcmVzc2lvbiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9oZXgkc3ViZXhwcmVzc2lvbiQyXCIsIFwic3ltYm9sc1wiOiBbXCJIRVhESUdcIiwgXCJIRVhESUdcIiwgXCJIRVhESUdcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2hleFwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9oZXgkc3ViZXhwcmVzc2lvbiQyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9oZXgkc3ViZXhwcmVzc2lvbiQzXCIsIFwic3ltYm9sc1wiOiBbXCJIRVhESUdcIiwgXCJIRVhESUdcIiwgXCJIRVhESUdcIiwgXCJIRVhESUdcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2hleFwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9oZXgkc3ViZXhwcmVzc2lvbiQzXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9mdWxsJG1hY3JvY2FsbCQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgXCJJUHY2X2hleFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfZnVsbCRtYWNyb2NhbGwkMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9mdWxsJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9mdWxsJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9mdWxsJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9mdWxsJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9mdWxsJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9mdWxsJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9mdWxsJG1hY3JvY2FsbCQyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9mdWxsXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleFwiLCBcIklQdjZfZnVsbCRtYWNyb2NhbGwkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgXCJJUHY2X2hleFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4XCIsIFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtdLCBcInBvc3Rwcm9jZXNzXCI6ICgpID0+IG51bGwgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkc3RyaW5nJDFcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCB7IFwibGl0ZXJhbFwiOiBcIjpcIiB9XSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZC5qb2luKCcnKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgXCJJUHY2X2hleFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4XCIsIFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQyXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDJcIiwgXCJzeW1ib2xzXCI6IFtdLCBcInBvc3Rwcm9jZXNzXCI6ICgpID0+IG51bGwgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXBcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcCRlYm5mJDFcIiwgXCJJUHY2X2NvbXAkc3RyaW5nJDFcIiwgXCJJUHY2X2NvbXAkZWJuZiQyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIklQdjZfaGV4XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2Z1bGwkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9mdWxsJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMlwiLCBcIklQdjZ2NF9mdWxsJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2Z1bGwkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfZnVsbFwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9oZXhcIiwgXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMVwiLCB7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIklQdjRfYWRkcmVzc19saXRlcmFsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiSVB2Nl9oZXhcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2djRfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleFwiLCBcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIl0sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtdLCBcInBvc3Rwcm9jZXNzXCI6ICgpID0+IG51bGwgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRzdHJpbmckMVwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIHsgXCJsaXRlcmFsXCI6IFwiOlwiIH1dLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkLmpvaW4oJycpIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiSVB2Nl9oZXhcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2djRfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleFwiLCBcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIiwgeyBcImxpdGVyYWxcIjogXCI6XCIgfV0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDJcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDFcIl0sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDJcIiwgXCJzeW1ib2xzXCI6IFtdLCBcInBvc3Rwcm9jZXNzXCI6ICgpID0+IG51bGwgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcFwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2NvbXAkZWJuZiQxXCIsIFwiSVB2NnY0X2NvbXAkc3RyaW5nJDFcIiwgXCJJUHY2djRfY29tcCRlYm5mJDJcIiwgXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRJR0lUXCIsIFwic3ltYm9sc1wiOiBbL1swLTldL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBTFBIQV9ESUdJVF9VXCIsIFwic3ltYm9sc1wiOiBbL1swLTlBLVphLXpcXHUwMDgwLVxcdUZGRkZdL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBTFBIQV9ESUdJVFwiLCBcInN5bWJvbHNcIjogWy9bMC05QS1aYS16XS9dLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQUxQSEFfRElHX0RBU0hcIiwgXCJzeW1ib2xzXCI6IFsvWy0wLTlBLVphLXpdL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBTFBIQV9ESUdfREFTSF9VXCIsIFwic3ltYm9sc1wiOiBbL1stMC05QS1aYS16XFx1MDA4MC1cXHVGRkZGXS9dLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSEVYRElHXCIsIFwic3ltYm9sc1wiOiBbL1swLTlBLUZhLWZdL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJEUVVPVEVcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIlxcXCJcIiB9XSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9XG4gICAgXSxcbiAgICBQYXJzZXJTdGFydDogXCJSZXZlcnNlX3BhdGhcIixcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBncmFtbWFyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z3JhbW1hci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jYW5vbmljYWxpemUgPSBleHBvcnRzLmNhbm9uaWNhbGl6ZV9xdW90ZWRfc3RyaW5nID0gZXhwb3J0cy5ub3JtYWxpemUgPSBleHBvcnRzLm5vcm1hbGl6ZV9kb3Rfc3RyaW5nID0gZXhwb3J0cy5wYXJzZSA9IHZvaWQgMDtcbi8vIGNvbnN0IHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcbmNvbnN0IG5lYXJsZXkgPSByZXF1aXJlKFwibmVhcmxleVwiKTtcbmNvbnN0IGdyYW1tYXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9ncmFtbWFyXCIpKTtcbmdyYW1tYXJfMS5kZWZhdWx0LlBhcnNlclN0YXJ0ID0gXCJNYWlsYm94XCI7XG5jb25zdCBncmFtbWFyID0gbmVhcmxleS5HcmFtbWFyLmZyb21Db21waWxlZChncmFtbWFyXzEuZGVmYXVsdCk7XG4vLyA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzUzMjEjc2VjdGlvbi00LjEuMj5cbmZ1bmN0aW9uIHBhcnNlKGFkZHJlc3MpIHtcbiAgICAvLyBBbiBpbnNhbmUgbGVuZ3RoLCB0byBwcm90ZWN0IHRoZSBwYXJzaW5nIGNvZGUgZnJvbSBodWdlIGlucHV0LiBTTVRQIGxpbmUgbGltaXQsIG1pbnVzIGNvbW1hbmQgc2l6ZS5cbiAgICBjb25zdCBpbnNhbmVfbGVuZ3RoID0gMTAwMCAtIFwiTUFJTCBGUk9NOjw+XFxyXFxuXCIubGVuZ3RoO1xuICAgIGlmIChhZGRyZXNzLmxlbmd0aCA+IGluc2FuZV9sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWRkcmVzcyB0b28gbG9uZ1wiKTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IG5lYXJsZXkuUGFyc2VyKGdyYW1tYXIpO1xuICAgIHBhcnNlci5mZWVkKGFkZHJlc3MpO1xuICAgIGlmIChwYXJzZXIucmVzdWx0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWRkcmVzcyBwYXJzaW5nIGZhaWxlZDogYW1iaWd1b3VzIGdyYW1tYXJcIik7XG4gICAgfVxuICAgIC8vIERvbWFpbiBjaGVja3NcbiAgICBjb25zdCBhdF9pZHggPSBhZGRyZXNzLmxhc3RJbmRleE9mKCdAJyk7IC8vIG11c3QgYmUgZm91bmQsIHNpbmNlIHBhcnNlIHdhcyBzdWNjZXNzZnVsXG4gICAgY29uc3QgZG9tYWluID0gYWRkcmVzcy5zdWJzdHJpbmcoYXRfaWR4ICsgMSk7XG4gICAgaWYgKGRvbWFpblswXSAhPT0gJ1snKSB7IC8vIE5vdCBhbiBhZGRyZXNzIGxpdGVyYWxcbiAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPiAyNTMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRvbWFpbiB0b28gbG9uZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYWJlbHMgPSBkb21haW4uc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRvbWFpbiBub3QgZnVsbHkgcXVhbGlmaWVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYWJlbHNbbGFiZWxzLmxlbmd0aCAtIDFdLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRvcCBsZXZlbCBkb21haW4gbGFiZWwgdG9vIHNob3J0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGxhYmVscy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChsYWJlbHNbMF0ubGVuZ3RoID4gNjMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRvbWFpbiBsYWJlbCB0b28gbG9uZ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VyLnJlc3VsdHNbMF07XG59XG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG4vKiogU3RyaXAgK3NvbWV0aGluZywgc3RyaXAgJy4ncywgYW5kIG1hcCB0byBsb3dlciBjYXNlLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVfZG90X3N0cmluZyhkb3Rfc3RyaW5nKSB7XG4gICAgY29uc3QgdGFnbGVzcyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBsdXNfbG9jID0gZG90X3N0cmluZy5pbmRleE9mKFwiK1wiKTtcbiAgICAgICAgaWYgKHBsdXNfbG9jID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGRvdF9zdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRvdF9zdHJpbmcuc3Vic3RyKDAsIHBsdXNfbG9jKTtcbiAgICB9KSgpO1xuICAgIGNvbnN0IGRvdGxlc3MgPSB0YWdsZXNzLnJlcGxhY2UoL1xcLi9nLCBcIlwiKTtcbiAgICByZXR1cm4gZG90bGVzcy50b0xvd2VyQ2FzZSgpO1xufVxuZXhwb3J0cy5ub3JtYWxpemVfZG90X3N0cmluZyA9IG5vcm1hbGl6ZV9kb3Rfc3RyaW5nO1xuLyoqIFRoZSBHIHN0eWxlIGFkZHJlc3Mgbm9ybWFsaXphdGlvbi5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKGFkZHJlc3MpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IGEgPSBwYXJzZShhZGRyZXNzKTtcbiAgICBjb25zdCBkb21haW4gPSAoX2EgPSBhLmRvbWFpblBhcnQuQWRkcmVzc0xpdGVyYWwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGEuZG9tYWluUGFydC5Eb21haW5OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbG9jYWwgPSAoX2IgPSBhLmxvY2FsUGFydC5RdW90ZWRTdHJpbmcpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG5vcm1hbGl6ZV9kb3Rfc3RyaW5nKGEubG9jYWxQYXJ0LkRvdFN0cmluZyk7XG4gICAgcmV0dXJuIGAke2xvY2FsfUAke2RvbWFpbn1gO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5mdW5jdGlvbiBjYW5vbmljYWxpemVfcXVvdGVkX3N0cmluZyhxdW90ZWRfc3RyaW5nKSB7XG4gICAgY29uc3QgdW5xdW90ZWQgPSBxdW90ZWRfc3RyaW5nLnN1YnN0cigxKS5zdWJzdHIoMCwgcXVvdGVkX3N0cmluZy5sZW5ndGggLSAyKTtcbiAgICBjb25zdCB1bmVzY2FwZWQgPSB1bnF1b3RlZC5yZXBsYWNlKC8oPzpcXFxcKC4pKS9nLCBcIiQxXCIpO1xuICAgIGNvbnN0IHJlZXNjYXBlZCA9IHVuZXNjYXBlZC5yZXBsYWNlKC8oPzooW1wiXFxcXF0pKS9nLCBcIlxcXFwkMVwiKTtcbiAgICByZXR1cm4gYFwiJHtyZWVzY2FwZWR9XCJgOyAvLyByZS1xdW90ZVxufVxuZXhwb3J0cy5jYW5vbmljYWxpemVfcXVvdGVkX3N0cmluZyA9IGNhbm9uaWNhbGl6ZV9xdW90ZWRfc3RyaW5nO1xuLyoqXG4gKiBBcHBseSBhIGNhbm9uaWNhbGl6YXRpb24gY29uc2lzdGVudCB3aXRoIHN0YW5kYXJkcyB0byBzdXBwb3J0XG4gKiBjb21wYXJpc29uIGFzIGEgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBjYW5vbmljYWxpemUoYWRkcmVzcykge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBhID0gcGFyc2UoYWRkcmVzcyk7XG4gICAgY29uc3QgZG9tYWluID0gKF9hID0gYS5kb21haW5QYXJ0LkFkZHJlc3NMaXRlcmFsKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBhLmRvbWFpblBhcnQuRG9tYWluTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGxvY2FsID0gYS5sb2NhbFBhcnQuUXVvdGVkU3RyaW5nXG4gICAgICAgID8gY2Fub25pY2FsaXplX3F1b3RlZF9zdHJpbmcoYS5sb2NhbFBhcnQuUXVvdGVkU3RyaW5nKVxuICAgICAgICA6IGEubG9jYWxQYXJ0LkRvdFN0cmluZztcbiAgICByZXR1cm4gYCR7bG9jYWx9QCR7ZG9tYWlufWA7XG59XG5leHBvcnRzLmNhbm9uaWNhbGl6ZSA9IGNhbm9uaWNhbGl6ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShhcnIpIHtcblx0aWYgKHR5cGVvZiBBcnJheS5pc0FycmF5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkoYXJyKTtcblx0fVxuXG5cdHJldHVybiB0b1N0ci5jYWxsKGFycikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG52YXIgaXNQbGFpbk9iamVjdCA9IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG5cdGlmICghb2JqIHx8IHRvU3RyLmNhbGwob2JqKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHR2YXIgaGFzT3duQ29uc3RydWN0b3IgPSBoYXNPd24uY2FsbChvYmosICdjb25zdHJ1Y3RvcicpO1xuXHR2YXIgaGFzSXNQcm90b3R5cGVPZiA9IG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IucHJvdG90eXBlICYmIGhhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsICdpc1Byb3RvdHlwZU9mJyk7XG5cdC8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVzdCBiZSBPYmplY3Rcblx0aWYgKG9iai5jb25zdHJ1Y3RvciAmJiAhaGFzT3duQ29uc3RydWN0b3IgJiYgIWhhc0lzUHJvdG90eXBlT2YpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBPd24gcHJvcGVydGllcyBhcmUgZW51bWVyYXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCxcblx0Ly8gaWYgbGFzdCBvbmUgaXMgb3duLCB0aGVuIGFsbCBwcm9wZXJ0aWVzIGFyZSBvd24uXG5cdHZhciBrZXk7XG5cdGZvciAoa2V5IGluIG9iaikgeyAvKiovIH1cblxuXHRyZXR1cm4gdHlwZW9mIGtleSA9PT0gJ3VuZGVmaW5lZCcgfHwgaGFzT3duLmNhbGwob2JqLCBrZXkpO1xufTtcblxuLy8gSWYgbmFtZSBpcyAnX19wcm90b19fJywgYW5kIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBpcyBhdmFpbGFibGUsIGRlZmluZSBfX3Byb3RvX18gYXMgYW4gb3duIHByb3BlcnR5IG9uIHRhcmdldFxudmFyIHNldFByb3BlcnR5ID0gZnVuY3Rpb24gc2V0UHJvcGVydHkodGFyZ2V0LCBvcHRpb25zKSB7XG5cdGlmIChkZWZpbmVQcm9wZXJ0eSAmJiBvcHRpb25zLm5hbWUgPT09ICdfX3Byb3RvX18nKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBvcHRpb25zLm5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHR2YWx1ZTogb3B0aW9ucy5uZXdWYWx1ZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0dGFyZ2V0W29wdGlvbnMubmFtZV0gPSBvcHRpb25zLm5ld1ZhbHVlO1xuXHR9XG59O1xuXG4vLyBSZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgX19wcm90b19fIGlmICdfX3Byb3RvX18nIGlzIG5vdCBhbiBvd24gcHJvcGVydHlcbnZhciBnZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIGdldFByb3BlcnR5KG9iaiwgbmFtZSkge1xuXHRpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHtcblx0XHRpZiAoIWhhc093bi5jYWxsKG9iaiwgbmFtZSkpIHtcblx0XHRcdHJldHVybiB2b2lkIDA7XG5cdFx0fSBlbHNlIGlmIChnT1BEKSB7XG5cdFx0XHQvLyBJbiBlYXJseSB2ZXJzaW9ucyBvZiBub2RlLCBvYmpbJ19fcHJvdG9fXyddIGlzIGJ1Z2d5IHdoZW4gb2JqIGhhc1xuXHRcdFx0Ly8gX19wcm90b19fIGFzIGFuIG93biBwcm9wZXJ0eS4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigpIHdvcmtzLlxuXHRcdFx0cmV0dXJuIGdPUEQob2JqLCBuYW1lKS52YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb2JqW25hbWVdO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHRlbmQoKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZTtcblx0dmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXTtcblx0dmFyIGkgPSAxO1xuXHR2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0dmFyIGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnYm9vbGVhbicpIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcblx0XHQvLyBza2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0aSA9IDI7XG5cdH1cblx0aWYgKHRhcmdldCA9PSBudWxsIHx8ICh0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Zm9yICg7IGkgPCBsZW5ndGg7ICsraSkge1xuXHRcdG9wdGlvbnMgPSBhcmd1bWVudHNbaV07XG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmIChvcHRpb25zICE9IG51bGwpIHtcblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAobmFtZSBpbiBvcHRpb25zKSB7XG5cdFx0XHRcdHNyYyA9IGdldFByb3BlcnR5KHRhcmdldCwgbmFtZSk7XG5cdFx0XHRcdGNvcHkgPSBnZXRQcm9wZXJ0eShvcHRpb25zLCBuYW1lKTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICh0YXJnZXQgIT09IGNvcHkpIHtcblx0XHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0XHRpZiAoZGVlcCAmJiBjb3B5ICYmIChpc1BsYWluT2JqZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGlzQXJyYXkoY29weSkpKSkge1xuXHRcdFx0XHRcdFx0aWYgKGNvcHlJc0FycmF5KSB7XG5cdFx0XHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdFx0c2V0UHJvcGVydHkodGFyZ2V0LCB7IG5hbWU6IG5hbWUsIG5ld1ZhbHVlOiBleHRlbmQoZGVlcCwgY2xvbmUsIGNvcHkpIH0pO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGNvcHkgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdFx0XHRzZXRQcm9wZXJ0eSh0YXJnZXQsIHsgbmFtZTogbmFtZSwgbmV3VmFsdWU6IGNvcHkgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGV4dGVuZCA9IHJlcXVpcmUoJ2V4dGVuZCcpO1xuXG52YXIgZGF0YSA9IHtcbiAgcGVybWFuZW50OiByZXF1aXJlKCcuL2xpYi9pYW5hLXBlcm1hbmVudC5qc29uJyksXG4gIHByb3Zvc2lvbmFsOiByZXF1aXJlKCcuL2xpYi9pYW5hLXByb3Zpc2lvbmFsLmpzb24nKSxcbiAgaGlzdG9yaWNhbDogcmVxdWlyZSgnLi9saWIvaWFuYS1oaXN0b3JpY2FsLmpzb24nKVxufTtcblxudmFyIGFsbEJ5TmFtZSA9IHt9O1xuXG5PYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gIGRhdGFbdHlwZV0uZm9yRWFjaChmdW5jdGlvbiAoc2NoZW1lT2JqKSB7XG4gICAgYWxsQnlOYW1lW3NjaGVtZU9iai5zY2hlbWVdID0gZXh0ZW5kKHNjaGVtZU9iaiwgeyB0eXBlOiB0eXBlIH0pO1xuICB9KTtcbn0pO1xuXG5kYXRhLnVub2ZmaWNpYWwgPSByZXF1aXJlKCcuL2xpYi91bm9mZmljaWFsLmpzb24nKS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgcmV0dXJuICFhbGxCeU5hbWVbaXRlbS5zY2hlbWVdO1xufSk7XG5cbmRhdGEudW5vZmZpY2lhbC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlbWVPYmopIHtcbiAgYWxsQnlOYW1lW3NjaGVtZU9iai5zY2hlbWVdID0gZXh0ZW5kKHNjaGVtZU9iaiwgeyB0eXBlOiAndW5vZmZpY2lhbCcgfSk7XG59KTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dGVuZChkYXRhLCB7IGFsbEJ5TmFtZTogYWxsQnlOYW1lIH0pO1xuIiwKICAgICJjb25zdCB7IHBhcnNlIH0gPSByZXF1aXJlKCd1cmktanMnKTtcbmNvbnN0IHsgYWRkcmVzc1BhcnNlciB9ID0gcmVxdWlyZSgnc210cC1hZGRyZXNzLXBhcnNlcicpO1xuY29uc3Qgc2NoZW1lcyA9IHJlcXVpcmUoJ3NjaGVtZXMnKTtcblxuZnVuY3Rpb24gdmFsaWRhdGUoYWRkcmVzcykge1xuICB0cnkge1xuICAgIGFkZHJlc3NQYXJzZXIoYWRkcmVzcyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9ICh2YWx1ZSkgPT4ge1xuICBjb25zdCBpcmkgPSBwYXJzZSh2YWx1ZSk7XG4gIGlmIChpcmkuc2NoZW1lID09PSAnbWFpbHRvJyAmJiBpcmkudG8uZXZlcnkodmFsaWRhdGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlyaS5yZWZlcmVuY2UgPT09ICdhYnNvbHV0ZScgJiYgc2NoZW1lcy5hbGxCeU5hbWVbaXJpLnNjaGVtZV0pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwKICAgICIvLyBSZWdleCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMyMDQ0ODQ2L3JlZ2V4LWZvci1pc28tODYwMS1kdXJhdGlvbnNcbm1vZHVsZS5leHBvcnRzID1cbiAgL15QKD8hJCkoXFxkKyg/OlxcLlxcZCspP1kpPyhcXGQrKD86XFwuXFxkKyk/TSk/KFxcZCsoPzpcXC5cXGQrKT9XKT8oXFxkKyg/OlxcLlxcZCspP0QpPyhUKD89XFxkKShcXGQrKD86XFwuXFxkKyk/SCk/KFxcZCsoPzpcXC5cXGQrKT9NKT8oXFxkKyg/OlxcLlxcZCspP1MpPyk/JC87XG4iLAogICAgImNvbnN0IHsgcGFyc2UgfSA9IHJlcXVpcmUoJ3NtdHAtYWRkcmVzcy1wYXJzZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSAodmFsdWUpID0+IHtcbiAgdHJ5IHtcbiAgICBwYXJzZSh2YWx1ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsCiAgICAidmFyIF9fY3JlYXRlPU9iamVjdC5jcmVhdGU7dmFye2dldFByb3RvdHlwZU9mOl9fZ2V0UHJvdG9PZixkZWZpbmVQcm9wZXJ0eTpfX2RlZlByb3AsZ2V0T3duUHJvcGVydHlOYW1lczpfX2dldE93blByb3BOYW1lc309T2JqZWN0O3ZhciBfX2hhc093blByb3A9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBfX2FjY2Vzc1Byb3Aoa2V5KXtyZXR1cm4gdGhpc1trZXldfXZhciBfX3JlRXhwb3J0PSh0YXJnZXQsbW9kLHNlY29uZFRhcmdldCk9Pnt2YXIga2V5cz1tb2QmJnR5cGVvZiBtb2Q9PT1cIm9iamVjdFwifHx0eXBlb2YgbW9kPT09XCJmdW5jdGlvblwiP19fZ2V0T3duUHJvcE5hbWVzKG1vZCk6W107Zm9yKGxldCBrZXkgb2Yga2V5cylpZighX19oYXNPd25Qcm9wLmNhbGwodGFyZ2V0LGtleSkmJmtleSE9PVwiZGVmYXVsdFwiKV9fZGVmUHJvcCh0YXJnZXQsa2V5LHtnZXQ6X19hY2Nlc3NQcm9wLmJpbmQobW9kLGtleSksZW51bWVyYWJsZTohMH0pO2lmKHNlY29uZFRhcmdldCl7Zm9yKGxldCBrZXkgb2Yga2V5cylpZighX19oYXNPd25Qcm9wLmNhbGwoc2Vjb25kVGFyZ2V0LGtleSkmJmtleSE9PVwiZGVmYXVsdFwiKV9fZGVmUHJvcChzZWNvbmRUYXJnZXQsa2V5LHtnZXQ6X19hY2Nlc3NQcm9wLmJpbmQobW9kLGtleSksZW51bWVyYWJsZTohMH0pO3JldHVybiBzZWNvbmRUYXJnZXR9fSxfX3RvRVNNQ2FjaGVfbm9kZSxfX3RvRVNNQ2FjaGVfZXNtLF9fdG9FU009KG1vZCxpc05vZGVNb2RlLHRhcmdldCk9Pnt2YXIgY2FuQ2FjaGU9bW9kIT1udWxsJiZ0eXBlb2YgbW9kPT09XCJvYmplY3RcIjtpZihjYW5DYWNoZSl7dmFyIGNhY2hlPWlzTm9kZU1vZGU/X190b0VTTUNhY2hlX25vZGU/Pz1uZXcgV2Vha01hcDpfX3RvRVNNQ2FjaGVfZXNtPz89bmV3IFdlYWtNYXAsY2FjaGVkPWNhY2hlLmdldChtb2QpO2lmKGNhY2hlZClyZXR1cm4gY2FjaGVkfXRhcmdldD1tb2QhPW51bGw/X19jcmVhdGUoX19nZXRQcm90b09mKG1vZCkpOnt9O2xldCB0bz1pc05vZGVNb2RlfHwhbW9kfHwhbW9kLl9fZXNNb2R1bGV8fCFfX2hhc093blByb3AuY2FsbChtb2QsXCJkZWZhdWx0XCIpP19fZGVmUHJvcCh0YXJnZXQsXCJkZWZhdWx0XCIse3ZhbHVlOm1vZCxlbnVtZXJhYmxlOiEwfSk6dGFyZ2V0O2lmKG1vZCYmdHlwZW9mIG1vZD09PVwib2JqZWN0XCJ8fHR5cGVvZiBtb2Q9PT1cImZ1bmN0aW9uXCIpe2ZvcihsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKG1vZCkpaWYoIV9faGFzT3duUHJvcC5jYWxsKHRvLGtleSkpX19kZWZQcm9wKHRvLGtleSx7Z2V0Ol9fYWNjZXNzUHJvcC5iaW5kKG1vZCxrZXkpLGVudW1lcmFibGU6ITB9KX1pZihjYW5DYWNoZSljYWNoZS5zZXQobW9kLHRvKTtyZXR1cm4gdG99O3ZhciBfX2NvbW1vbkpTPShjYixtb2QpPT4oKT0+KG1vZHx8Y2IoKG1vZD17ZXhwb3J0czp7fX0pLmV4cG9ydHMsbW9kKSxtb2QuZXhwb3J0cyk7dmFyIF9fcmV0dXJuVmFsdWU9KHYpPT52O2Z1bmN0aW9uIF9fZXhwb3J0U2V0dGVyKG5hbWUsbmV3VmFsdWUpe3RoaXNbbmFtZV09X19yZXR1cm5WYWx1ZS5iaW5kKG51bGwsbmV3VmFsdWUpfXZhciBfX2V4cG9ydD0odGFyZ2V0LGFsbCk9Pntmb3IodmFyIG5hbWUgaW4gYWxsKV9fZGVmUHJvcCh0YXJnZXQsbmFtZSx7Z2V0OmFsbFtuYW1lXSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxzZXQ6X19leHBvcnRTZXR0ZXIuYmluZChhbGwsbmFtZSl9KX07dmFyIHJlcXVpcmVfcHVueWNvZGU9X19jb21tb25KUyhmdW5jdGlvbihleHBvcnRzLG1vZHVsZSl7dmFyIHJlZ2V4UHVueWNvZGU9L154bi0tLyxyZWdleE5vbkFTQ0lJPS9bXlxcMC1cXHg3Rl0vLHJlZ2V4U2VwYXJhdG9ycz0vW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLGVycm9ycz17b3ZlcmZsb3c6XCJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2Vzc1wiLFwibm90LWJhc2ljXCI6XCJJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpXCIsXCJpbnZhbGlkLWlucHV0XCI6XCJJbnZhbGlkIGlucHV0XCJ9LGZsb29yPU1hdGguZmxvb3Isc3RyaW5nRnJvbUNoYXJDb2RlPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gZXJyb3IodHlwZSl7dGhyb3cgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pfWZ1bmN0aW9uIG1hcChhcnJheSxjYWxsYmFjayl7bGV0IHJlc3VsdD1bXSxsZW5ndGg9YXJyYXkubGVuZ3RoO3doaWxlKGxlbmd0aC0tKXJlc3VsdFtsZW5ndGhdPWNhbGxiYWNrKGFycmF5W2xlbmd0aF0pO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gbWFwRG9tYWluKGRvbWFpbixjYWxsYmFjayl7bGV0IHBhcnRzPWRvbWFpbi5zcGxpdChcIkBcIikscmVzdWx0PVwiXCI7aWYocGFydHMubGVuZ3RoPjEpcmVzdWx0PXBhcnRzWzBdK1wiQFwiLGRvbWFpbj1wYXJ0c1sxXTtkb21haW49ZG9tYWluLnJlcGxhY2UocmVnZXhTZXBhcmF0b3JzLFwiLlwiKTtsZXQgbGFiZWxzPWRvbWFpbi5zcGxpdChcIi5cIiksZW5jb2RlZD1tYXAobGFiZWxzLGNhbGxiYWNrKS5qb2luKFwiLlwiKTtyZXR1cm4gcmVzdWx0K2VuY29kZWR9ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpe2xldCBvdXRwdXQ9W10sY291bnRlcj0wLGxlbmd0aD1zdHJpbmcubGVuZ3RoO3doaWxlKGNvdW50ZXI8bGVuZ3RoKXtsZXQgdmFsdWU9c3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtpZih2YWx1ZT49NTUyOTYmJnZhbHVlPD01NjMxOSYmY291bnRlcjxsZW5ndGgpe2xldCBleHRyYT1zdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO2lmKChleHRyYSY2NDUxMik9PTU2MzIwKW91dHB1dC5wdXNoKCgodmFsdWUmMTAyMyk8PDEwKSsoZXh0cmEmMTAyMykrNjU1MzYpO2Vsc2Ugb3V0cHV0LnB1c2godmFsdWUpLGNvdW50ZXItLX1lbHNlIG91dHB1dC5wdXNoKHZhbHVlKX1yZXR1cm4gb3V0cHV0fXZhciB1Y3MyZW5jb2RlPShjb2RlUG9pbnRzKT0+U3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cyksYmFzaWNUb0RpZ2l0PWZ1bmN0aW9uKGNvZGVQb2ludCl7aWYoY29kZVBvaW50Pj00OCYmY29kZVBvaW50PDU4KXJldHVybiAyNisoY29kZVBvaW50LTQ4KTtpZihjb2RlUG9pbnQ+PTY1JiZjb2RlUG9pbnQ8OTEpcmV0dXJuIGNvZGVQb2ludC02NTtpZihjb2RlUG9pbnQ+PTk3JiZjb2RlUG9pbnQ8MTIzKXJldHVybiBjb2RlUG9pbnQtOTc7cmV0dXJuIDM2fSxkaWdpdFRvQmFzaWM9ZnVuY3Rpb24oZGlnaXQsZmxhZyl7cmV0dXJuIGRpZ2l0KzIyKzc1KihkaWdpdDwyNiktKChmbGFnIT0wKTw8NSl9LGFkYXB0PWZ1bmN0aW9uKGRlbHRhLG51bVBvaW50cyxmaXJzdFRpbWUpe2xldCBrPTA7ZGVsdGE9Zmlyc3RUaW1lP2Zsb29yKGRlbHRhLzcwMCk6ZGVsdGE+PjEsZGVsdGErPWZsb29yKGRlbHRhL251bVBvaW50cyk7Zm9yKDtkZWx0YT40NTU7ays9MzYpZGVsdGE9Zmxvb3IoZGVsdGEvMzUpO3JldHVybiBmbG9vcihrKzM2KmRlbHRhLyhkZWx0YSszOCkpfSxkZWNvZGU9ZnVuY3Rpb24oaW5wdXQpe2xldCBvdXRwdXQ9W10saW5wdXRMZW5ndGg9aW5wdXQubGVuZ3RoLGk9MCxuPTEyOCxiaWFzPTcyLGJhc2ljPWlucHV0Lmxhc3RJbmRleE9mKFwiLVwiKTtpZihiYXNpYzwwKWJhc2ljPTA7Zm9yKGxldCBqPTA7ajxiYXNpYzsrK2ope2lmKGlucHV0LmNoYXJDb2RlQXQoaik+PTEyOCllcnJvcihcIm5vdC1iYXNpY1wiKTtvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKX1mb3IobGV0IGluZGV4PWJhc2ljPjA/YmFzaWMrMTowO2luZGV4PGlucHV0TGVuZ3RoOyl7bGV0IG9sZGk9aTtmb3IobGV0IHc9MSxrPTM2OztrKz0zNil7aWYoaW5kZXg+PWlucHV0TGVuZ3RoKWVycm9yKFwiaW52YWxpZC1pbnB1dFwiKTtsZXQgZGlnaXQ9YmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO2lmKGRpZ2l0Pj0zNillcnJvcihcImludmFsaWQtaW5wdXRcIik7aWYoZGlnaXQ+Zmxvb3IoKDIxNDc0ODM2NDctaSkvdykpZXJyb3IoXCJvdmVyZmxvd1wiKTtpKz1kaWdpdCp3O2xldCB0PWs8PWJpYXM/MTprPj1iaWFzKzI2PzI2OmstYmlhcztpZihkaWdpdDx0KWJyZWFrO2xldCBiYXNlTWludXNUPTM2LXQ7aWYodz5mbG9vcigyMTQ3NDgzNjQ3L2Jhc2VNaW51c1QpKWVycm9yKFwib3ZlcmZsb3dcIik7dyo9YmFzZU1pbnVzVH1sZXQgb3V0PW91dHB1dC5sZW5ndGgrMTtpZihiaWFzPWFkYXB0KGktb2xkaSxvdXQsb2xkaT09MCksZmxvb3IoaS9vdXQpPjIxNDc0ODM2NDctbillcnJvcihcIm92ZXJmbG93XCIpO24rPWZsb29yKGkvb3V0KSxpJT1vdXQsb3V0cHV0LnNwbGljZShpKyssMCxuKX1yZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4ub3V0cHV0KX0sZW5jb2RlPWZ1bmN0aW9uKGlucHV0KXtsZXQgb3V0cHV0PVtdO2lucHV0PXVjczJkZWNvZGUoaW5wdXQpO2xldCBpbnB1dExlbmd0aD1pbnB1dC5sZW5ndGgsbj0xMjgsZGVsdGE9MCxiaWFzPTcyO2ZvcihsZXQgY3VycmVudFZhbHVlIG9mIGlucHV0KWlmKGN1cnJlbnRWYWx1ZTwxMjgpb3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO2xldCBiYXNpY0xlbmd0aD1vdXRwdXQubGVuZ3RoLGhhbmRsZWRDUENvdW50PWJhc2ljTGVuZ3RoO2lmKGJhc2ljTGVuZ3RoKW91dHB1dC5wdXNoKFwiLVwiKTt3aGlsZShoYW5kbGVkQ1BDb3VudDxpbnB1dExlbmd0aCl7bGV0IG09MjE0NzQ4MzY0Nztmb3IobGV0IGN1cnJlbnRWYWx1ZSBvZiBpbnB1dClpZihjdXJyZW50VmFsdWU+PW4mJmN1cnJlbnRWYWx1ZTxtKW09Y3VycmVudFZhbHVlO2xldCBoYW5kbGVkQ1BDb3VudFBsdXNPbmU9aGFuZGxlZENQQ291bnQrMTtpZihtLW4+Zmxvb3IoKDIxNDc0ODM2NDctZGVsdGEpL2hhbmRsZWRDUENvdW50UGx1c09uZSkpZXJyb3IoXCJvdmVyZmxvd1wiKTtkZWx0YSs9KG0tbikqaGFuZGxlZENQQ291bnRQbHVzT25lLG49bTtmb3IobGV0IGN1cnJlbnRWYWx1ZSBvZiBpbnB1dCl7aWYoY3VycmVudFZhbHVlPG4mJisrZGVsdGE+MjE0NzQ4MzY0NyllcnJvcihcIm92ZXJmbG93XCIpO2lmKGN1cnJlbnRWYWx1ZT09PW4pe2xldCBxPWRlbHRhO2ZvcihsZXQgaz0zNjs7ays9MzYpe2xldCB0PWs8PWJpYXM/MTprPj1iaWFzKzI2PzI2OmstYmlhcztpZihxPHQpYnJlYWs7bGV0IHFNaW51c1Q9cS10LGJhc2VNaW51c1Q9MzYtdDtvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQrcU1pbnVzVCViYXNlTWludXNULDApKSkscT1mbG9vcihxTWludXNUL2Jhc2VNaW51c1QpfW91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwwKSkpLGJpYXM9YWRhcHQoZGVsdGEsaGFuZGxlZENQQ291bnRQbHVzT25lLGhhbmRsZWRDUENvdW50PT09YmFzaWNMZW5ndGgpLGRlbHRhPTAsKytoYW5kbGVkQ1BDb3VudH19KytkZWx0YSwrK259cmV0dXJuIG91dHB1dC5qb2luKFwiXCIpfSx0b1VuaWNvZGU9ZnVuY3Rpb24oaW5wdXQpe3JldHVybiBtYXBEb21haW4oaW5wdXQsZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZyk/ZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTpzdHJpbmd9KX0sdG9BU0NJST1mdW5jdGlvbihpbnB1dCl7cmV0dXJuIG1hcERvbWFpbihpbnB1dCxmdW5jdGlvbihzdHJpbmcpe3JldHVybiByZWdleE5vbkFTQ0lJLnRlc3Qoc3RyaW5nKT9cInhuLS1cIitlbmNvZGUoc3RyaW5nKTpzdHJpbmd9KX0scHVueWNvZGU9e3ZlcnNpb246XCIyLjMuMVwiLHVjczI6e2RlY29kZTp1Y3MyZGVjb2RlLGVuY29kZTp1Y3MyZW5jb2RlfSxkZWNvZGUsZW5jb2RlLHRvQVNDSUksdG9Vbmljb2RlfTttb2R1bGUuZXhwb3J0cz1wdW55Y29kZX0pO3ZhciBleHBvcnRzX3B1bnljb2RlPXt9O19fZXhwb3J0KGV4cG9ydHNfcHVueWNvZGUse2RlZmF1bHQ6KCk9PmltcG9ydF9wdW55Y29kZS5kZWZhdWx0fSk7X19yZUV4cG9ydChleHBvcnRzX3B1bnljb2RlLF9fdG9FU00ocmVxdWlyZV9wdW55Y29kZSgpKSk7dmFyIGltcG9ydF9wdW55Y29kZT1fX3RvRVNNKHJlcXVpcmVfcHVueWNvZGUoKSk7dmFyIGV4cG9ydF9kZWZhdWx0PWltcG9ydF9wdW55Y29kZS5kZWZhdWx0O2V4cG9ydHtleHBvcnRfZGVmYXVsdCBhcyBkZWZhdWx0fTsiLAogICAgImNvbnN0IHsgdG9BU0NJSSB9ID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuY29uc3QgaG9zdG5hbWVSZWdleCA9XG4gIC9eKD89LnsxLDI1M31cXC4/JClbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8oPzpcXC5bYS16MC05XSg/OlstMC05YS16XXswLDYxfVswLTlhLXpdKT8pKlxcLj8kL2k7XG5cbm1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IGhvc3RuYW1lID0gdG9BU0NJSSh2YWx1ZSk7XG4gIHJldHVybiAoXG4gICAgaG9zdG5hbWUucmVwbGFjZSgvXFwuJC8sICcnKS5sZW5ndGggPD0gMjUzICYmIGhvc3RuYW1lUmVnZXgudGVzdChob3N0bmFtZSlcbiAgKTtcbn07XG4iLAogICAgImNvbnN0IHsgcGFyc2UgfSA9IHJlcXVpcmUoJ3VyaS1qcycpO1xuY29uc3QgeyBhZGRyZXNzUGFyc2VyIH0gPSByZXF1aXJlKCdzbXRwLWFkZHJlc3MtcGFyc2VyJyk7XG5jb25zdCBzY2hlbWVzID0gcmVxdWlyZSgnc2NoZW1lcycpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZShhZGRyZXNzKSB7XG4gIHRyeSB7XG4gICAgYWRkcmVzc1BhcnNlcihhZGRyZXNzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IGlyaSA9IHBhcnNlKHZhbHVlKTtcbiAgLy8gQWxsIHZhbGlkIElSSXMgYXJlIHZhbGlkIElSSS1yZWZlcmVuY2VzXG4gIGlmIChpcmkuc2NoZW1lID09PSAnbWFpbHRvJyAmJiBpcmkudG8uZXZlcnkodmFsaWRhdGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgaXJpLnJlZmVyZW5jZSA9PT0gJ2Fic29sdXRlJyAmJlxuICAgIGlyaS5wYXRoICE9PSB1bmRlZmluZWQgJiZcbiAgICBzY2hlbWVzLmFsbEJ5TmFtZVtpcmkuc2NoZW1lXVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciB2YWxpZCBJUkktcmVmZXJlbmNlXG5cbiAgLy8gSWYgdGhlcmUgaXMgYSBzY2hlbWUsIGl0IG11c3QgYmUgdmFsaWRcbiAgaWYgKGlyaS5zY2hlbWUgJiYgIXNjaGVtZXMuYWxsQnlOYW1lW2lyaS5zY2hlbWVdKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhlcmUncyBhIHBhdGggYW5kIGZvciBhIHByb3BlciB0eXBlIG9mIHJlZmVyZW5jZVxuICByZXR1cm4gKFxuICAgIGlyaS5wYXRoICE9PSB1bmRlZmluZWQgJiZcbiAgICAoaXJpLnJlZmVyZW5jZSA9PT0gJ3JlbGF0aXZlJyB8fFxuICAgICAgaXJpLnJlZmVyZW5jZSA9PT0gJ3NhbWUtZG9jdW1lbnQnIHx8XG4gICAgICBpcmkucmVmZXJlbmNlID09PSAndXJpJylcbiAgKTtcbn07XG4iLAogICAgIm1vZHVsZS5leHBvcnRzLmlyaSA9IHJlcXVpcmUoJy4vaXJpJyk7XG5tb2R1bGUuZXhwb3J0cy5kdXJhdGlvbiA9IHJlcXVpcmUoJy4vZHVyYXRpb24nKTtcbm1vZHVsZS5leHBvcnRzWydpZG4tZW1haWwnXSA9IHJlcXVpcmUoJy4vaWRuLWVtYWlsJyk7XG5tb2R1bGUuZXhwb3J0c1snaWRuLWhvc3RuYW1lJ10gPSByZXF1aXJlKCcuL2lkbi1ob3N0bmFtZScpO1xubW9kdWxlLmV4cG9ydHNbJ2lyaS1yZWZlcmVuY2UnXSA9IHJlcXVpcmUoJy4vaXJpLXJlZmVyZW5jZScpO1xuIiwKICAgICJjb25zdCBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKGFqdiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGFsbEZvcm1hdHMgPSBPYmplY3Qua2V5cyhmb3JtYXRzKTtcbiAgbGV0IGZvcm1hdHNUb0luc3RhbGwgPSBhbGxGb3JtYXRzO1xuXG4gIGlmIChvcHRpb25zLmZvcm1hdHMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5mb3JtYXRzKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5mb3JtYXRzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICBmb3JtYXRzVG9JbnN0YWxsID0gb3B0aW9ucy5mb3JtYXRzO1xuICB9XG5cbiAgYWxsRm9ybWF0c1xuICAgIC5maWx0ZXIoKGZvcm1hdCkgPT4gZm9ybWF0c1RvSW5zdGFsbC5pbmNsdWRlcyhmb3JtYXQpKVxuICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGFqdi5hZGRGb3JtYXQoa2V5LCBmb3JtYXRzW2tleV0pO1xuICAgIH0pO1xuXG4gIHJldHVybiBhanY7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgcHJlZml4ID0gJ34nO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIHN0b3JhZ2UgZm9yIG91ciBgRUVgIG9iamVjdHMuXG4gKiBBbiBgRXZlbnRzYCBpbnN0YW5jZSBpcyBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEV2ZW50cygpIHt9XG5cbi8vXG4vLyBXZSB0cnkgdG8gbm90IGluaGVyaXQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuIEluIHNvbWUgZW5naW5lcyBjcmVhdGluZyBhblxuLy8gaW5zdGFuY2UgaW4gdGhpcyB3YXkgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBgT2JqZWN0LmNyZWF0ZShudWxsKWAgZGlyZWN0bHkuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gY2hhcmFjdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90XG4vLyBvdmVycmlkZGVuIG9yIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vXG5pZiAoT2JqZWN0LmNyZWF0ZSkge1xuICBFdmVudHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvL1xuICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGBfX3Byb3RvX19gIHByb3BlcnR5IGlzIHN0aWxsIGluaGVyaXRlZCBpblxuICAvLyBzb21lIG9sZCBicm93c2VycyBsaWtlIEFuZHJvaWQgNCwgaVBob25lIDUuMSwgT3BlcmEgMTEgYW5kIFNhZmFyaSA1LlxuICAvL1xuICBpZiAoIW5ldyBFdmVudHMoKS5fX3Byb3RvX18pIHByZWZpeCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmNlPWZhbHNlXSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCBlbWl0dGVyLCBvbmNlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdKSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyLCBlbWl0dGVyLl9ldmVudHNDb3VudCsrO1xuICBlbHNlIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0uZm4pIGVtaXR0ZXIuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gW2VtaXR0ZXIuX2V2ZW50c1tldnRdLCBsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIGVtaXR0ZXI7XG59XG5cbi8qKlxuICogQ2xlYXIgZXZlbnQgYnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2dCBUaGUgRXZlbnQgbmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyRXZlbnQoZW1pdHRlciwgZXZ0KSB7XG4gIGlmICgtLWVtaXR0ZXIuX2V2ZW50c0NvdW50ID09PSAwKSBlbWl0dGVyLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIGVsc2UgZGVsZXRlIGVtaXR0ZXIuX2V2ZW50c1tldnRdO1xufVxuXG4vKipcbiAqIE1pbmltYWwgYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgbGlzdGluZyB0aGUgZXZlbnRzIGZvciB3aGljaCB0aGUgZW1pdHRlciBoYXMgcmVnaXN0ZXJlZFxuICogbGlzdGVuZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgdmFyIG5hbWVzID0gW11cbiAgICAsIGV2ZW50c1xuICAgICwgbmFtZTtcblxuICBpZiAodGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHJldHVybiBuYW1lcztcblxuICBmb3IgKG5hbWUgaW4gKGV2ZW50cyA9IHRoaXMuX2V2ZW50cykpIHtcbiAgICBpZiAoaGFzLmNhbGwoZXZlbnRzLCBuYW1lKSkgbmFtZXMucHVzaChwcmVmaXggPyBuYW1lLnNsaWNlKDEpIDogbmFtZSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHJldHVybiBuYW1lcy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhldmVudHMpKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lcztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGhhbmRsZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFoYW5kbGVycykgcmV0dXJuIFtdO1xuICBpZiAoaGFuZGxlcnMuZm4pIHJldHVybiBbaGFuZGxlcnMuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoLCBlZSA9IG5ldyBBcnJheShsKTsgaSA8IGw7IGkrKykge1xuICAgIGVlW2ldID0gaGFuZGxlcnNbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpc3RlbmVycyBsaXN0ZW5pbmcgdG8gYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtYmVyIG9mIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudChldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFsaXN0ZW5lcnMpIHJldHVybiAwO1xuICBpZiAobGlzdGVuZXJzLmZuKSByZXR1cm4gMTtcbiAgcmV0dXJuIGxpc3RlbmVycy5sZW5ndGg7XG59O1xuXG4vKipcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGhhZCBsaXN0ZW5lcnMsIGVsc2UgYGZhbHNlYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiBmYWxzZTtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGFyZ3NcbiAgICAsIGk7XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgY2FzZSA0OiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyLCBhMyk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgb25lLXRpbWUgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIHRydWUpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGxpc3RlbmVycyBvZiBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBtYXRjaCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmUtdGltZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG4gIGlmICghZm4pIHtcbiAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChcbiAgICAgIGxpc3RlbmVycy5mbiA9PT0gZm4gJiZcbiAgICAgICghb25jZSB8fCBsaXN0ZW5lcnMub25jZSkgJiZcbiAgICAgICghY29udGV4dCB8fCBsaXN0ZW5lcnMuY29udGV4dCA9PT0gY29udGV4dClcbiAgICApIHtcbiAgICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGV2ZW50cyA9IFtdLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGlzdGVuZXJzW2ldLmZuICE9PSBmbiB8fFxuICAgICAgICAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpIHx8XG4gICAgICAgIChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gICAgLy9cbiAgICBpZiAoZXZlbnRzLmxlbmd0aCkgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICAgIGVsc2UgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzLCBvciB0aG9zZSBvZiB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBbZXZlbnRdIFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0O1xuXG4gIGlmIChldmVudCkge1xuICAgIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50c1tldnRdKSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBFeHBvc2UgdGhlIHByZWZpeC5cbi8vXG5FdmVudEVtaXR0ZXIucHJlZml4ZWQgPSBwcmVmaXg7XG5cbi8vXG4vLyBBbGxvdyBgRXZlbnRFbWl0dGVyYCB0byBiZSBpbXBvcnRlZCBhcyBtb2R1bGUgbmFtZXNwYWNlLlxuLy9cbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5pZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQWN0aXZpdHlTdHJlYW0sIEpzb25MZENvbnRleHQgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG4vKipcbiAqIENhbm9uaWNhbCBBUzIgYmFzZSB2b2NhYnVsYXJ5IFVSTC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFTMl9CQVNFX0NPTlRFWFRfVVJMID0gXCJodHRwczovL3d3dy53My5vcmcvbnMvYWN0aXZpdHlzdHJlYW1zXCI7XG5cbi8qKlxuICogU29ja2V0aHViIGJhc2Ugdm9jYWJ1bGFyeSBVUkwgZm9yIHNoYXJlZCBwbGF0Zm9ybSB0ZXJtcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNPQ0tFVEhVQl9CQVNFX0NPTlRFWFRfVVJMID1cbiAgICBcImh0dHBzOi8vc29ja2V0aHViLm9yZy9ucy9jb250ZXh0L3YxLmpzb25sZFwiO1xuXG4vKipcbiAqIFVSTCBwcmVmaXggZm9yIHBlci1wbGF0Zm9ybSBjb250ZXh0IFVSTHMuXG4gKi9cbmV4cG9ydCBjb25zdCBQTEFURk9STV9DT05URVhUX1BSRUZJWCA9XG4gICAgXCJodHRwczovL3NvY2tldGh1Yi5vcmcvbnMvY29udGV4dC9wbGF0Zm9ybS9cIjtcblxuLyoqXG4gKiBCdWlsdC1pbiBwc2V1ZG8tcGxhdGZvcm0gdXNlZCBmb3Igc2VydmVyLXNpZGUgZXJyb3IgcGF5bG9hZHMuXG4gKi9cbmV4cG9ydCBjb25zdCBFUlJPUl9QTEFURk9STV9JRCA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBFUlJPUl9QTEFURk9STV9DT05URVhUX1VSTCA9XG4gICAgXCJodHRwczovL3NvY2tldGh1Yi5vcmcvbnMvY29udGV4dC9wbGF0Zm9ybS9lcnJvci92MS5qc29ubGRcIjtcblxuLyoqXG4gKiBCdWlsdC1pbiBwc2V1ZG8tcGxhdGZvcm0gdXNlZCBmb3IgaW50ZXJuYWwgY29udHJvbCBtZXNzYWdlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IElOVEVSTkFMX1BMQVRGT1JNX0lEID0gXCJzb2NrZXRodWI6aW50ZXJuYWxcIjtcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9QTEFURk9STV9DT05URVhUX1VSTCA9XG4gICAgXCJodHRwczovL3NvY2tldGh1Yi5vcmcvbnMvY29udGV4dC9wbGF0Zm9ybS9zb2NrZXRodWI6aW50ZXJuYWwvdjEuanNvbmxkXCI7XG5cbmNvbnN0IHBsYXRmb3JtQ29udGV4dFRvUGxhdGZvcm1JZCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5jb25zdCBwbGF0Zm9ybUNvbnRleHRUb1NjaGVtYUlkID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbmNvbnN0IHBsYXRmb3JtQ29udGV4dFRvQ3JlZGVudGlhbHNTY2hlbWFJZCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbi8qKlxuICogQnVpbGQgdGhlIGNhbm9uaWNhbCBTb2NrZXRodWIgQGNvbnRleHQgYXJyYXkgZnJvbSBhIHBsYXRmb3JtIGlkIG9yIGZ1bGwgY29udGV4dCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENhbm9uaWNhbENvbnRleHQocGxhdGZvcm06IHN0cmluZyk6IEpzb25MZENvbnRleHQge1xuICAgIGNvbnN0IHBsYXRmb3JtVXJsID0gcGxhdGZvcm0uc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpXG4gICAgICAgID8gcGxhdGZvcm1cbiAgICAgICAgOiBgJHtQTEFURk9STV9DT05URVhUX1BSRUZJWH0ke3BsYXRmb3JtfS92MS5qc29ubGRgO1xuICAgIHJldHVybiBbQVMyX0JBU0VfQ09OVEVYVF9VUkwsIFNPQ0tFVEhVQl9CQVNFX0NPTlRFWFRfVVJMLCBwbGF0Zm9ybVVybF07XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgcGxhdGZvcm0gSUQgZnJvbSBhIGNhbm9uaWNhbCBAY29udGV4dCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYXRmb3JtSWRGcm9tQ29udGV4dChcbiAgICBjb250ZXh0OiBzdHJpbmdbXSB8IHVua25vd24sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBlbnRyeS5zdGFydHNXaXRoKFBMQVRGT1JNX0NPTlRFWFRfUFJFRklYKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBlbnRyeS5zbGljZShQTEFURk9STV9DT05URVhUX1BSRUZJWC5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3Qgc2xhc2hJZHggPSByZXN0LmluZGV4T2YoXCIvXCIpO1xuICAgICAgICAgICAgaWYgKHNsYXNoSWR4ID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN0LnNsaWNlKDAsIHNsYXNoSWR4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB1bmtub3duIEBjb250ZXh0IGlucHV0IGludG8gYSBzdHJpbmctb25seSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQ29udGV4dEFycmF5KHZhbHVlOiB1bmtub3duKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgc3RyaW5nID0+IHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIik7XG59XG5cbi8qKlxuICogR2V0IGEgbm9ybWFsaXplZCBAY29udGV4dCBhcnJheSBmcm9tIGFuIGFjdGl2aXR5IHN0cmVhbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRleHRBcnJheShtc2c6IEFjdGl2aXR5U3RyZWFtKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNvbnRleHRBcnJheShtc2dbXCJAY29udGV4dFwiXSk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBwbGF0Zm9ybSBjb250ZXh0IFVSTCBhbmQgaXRzIHNjaGVtYSBJRHMgZm9yIHJ1bnRpbWUgcmVzb2x1dGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyUGxhdGZvcm1Db250ZXh0KFxuICAgIHBsYXRmb3JtSWQ6IHN0cmluZyxcbiAgICBwbGF0Zm9ybUNvbnRleHRVcmw6IHN0cmluZyxcbiAgICBzY2hlbWFJZDogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzU2NoZW1hSWQ6IHN0cmluZyxcbikge1xuICAgIHBsYXRmb3JtQ29udGV4dFRvUGxhdGZvcm1JZC5zZXQocGxhdGZvcm1Db250ZXh0VXJsLCBwbGF0Zm9ybUlkKTtcbiAgICBwbGF0Zm9ybUNvbnRleHRUb1NjaGVtYUlkLnNldChwbGF0Zm9ybUNvbnRleHRVcmwsIHNjaGVtYUlkKTtcbiAgICBwbGF0Zm9ybUNvbnRleHRUb0NyZWRlbnRpYWxzU2NoZW1hSWQuc2V0KFxuICAgICAgICBwbGF0Zm9ybUNvbnRleHRVcmwsXG4gICAgICAgIGNyZWRlbnRpYWxzU2NoZW1hSWQsXG4gICAgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBzaW5nbGUgcmVnaXN0ZXJlZCBwbGF0Zm9ybSBjb250ZXh0IFVSTCBmcm9tIGEgbWVzc2FnZS5cbiAqIFJldHVybnMgbnVsbCB3aGVuIHRoZXJlIGFyZSB6ZXJvIG9yIG11bHRpcGxlIHJlZ2lzdGVyZWQgcGxhdGZvcm0gY29udGV4dHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGxhdGZvcm1Db250ZXh0VXJsKG1zZzogQWN0aXZpdHlTdHJlYW0pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBjb250ZXh0cyA9IGdldENvbnRleHRBcnJheShtc2cpO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZXh0cy5maWx0ZXIoKGNvbnRleHRVcmwpID0+XG4gICAgICAgIHBsYXRmb3JtQ29udGV4dFRvUGxhdGZvcm1JZC5oYXMoY29udGV4dFVybCksXG4gICAgKTtcbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaGVzWzBdO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBwbGF0Zm9ybSBJRCBmcm9tIGEgcGxhdGZvcm0gY29udGV4dCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbGF0Zm9ybUlkQnlDb250ZXh0VXJsKFxuICAgIHBsYXRmb3JtQ29udGV4dFVybDogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0VG9QbGF0Zm9ybUlkLmdldChwbGF0Zm9ybUNvbnRleHRVcmwpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBtZXNzYWdlIHNjaGVtYSBJRCBmcm9tIGEgcGxhdGZvcm0gY29udGV4dCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFJZEJ5Q29udGV4dFVybChcbiAgICBwbGF0Zm9ybUNvbnRleHRVcmw6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dFRvU2NoZW1hSWQuZ2V0KHBsYXRmb3JtQ29udGV4dFVybCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGNyZWRlbnRpYWxzIHNjaGVtYSBJRCBmcm9tIGEgcGxhdGZvcm0gY29udGV4dCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVkZW50aWFsc1NjaGVtYUlkQnlDb250ZXh0VXJsKFxuICAgIHBsYXRmb3JtQ29udGV4dFVybDogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0VG9DcmVkZW50aWFsc1NjaGVtYUlkLmdldChwbGF0Zm9ybUNvbnRleHRVcmwpO1xufVxuIiwKICAgICIvLyBUaGUgc2hhcmVkIGFjdG9yL3RhcmdldCBlbnRpdHkgdm9jYWJ1bGFyeS4gQ29udGVudCBvYmplY3QgdHlwZXMgKG1lc3NhZ2UsXG4vLyBwcmVzZW5jZSwgYXR0ZW5kYW5jZSwgcm9vbS1pbmZvLCB0b3BpYywg4oCmKSBhcmUgb3duZWQgYnkgZWFjaCBwbGF0Zm9ybSdzXG4vLyBgbWVzc2FnZXNgIChpbmJvdW5kKSBhbmQgYHJlc3BvbnNlc2AgKG91dGJvdW5kKSBzY2hlbWFzOyB0aGUgYmFzZSBlbnZlbG9wZSBub1xuLy8gbG9uZ2VyIGVudW1lcmF0ZXMgYSBnbG9iYWwgb2JqZWN0IHZvY2FidWxhcnkuXG5leHBvcnQgY29uc3QgT2JqZWN0VHlwZXNTY2hlbWEgPSB7XG4gICAgZmVlZDoge1xuICAgICAgICByZXF1aXJlZDogW1wiaWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcImZlZWRcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJpcmlcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXV0aG9yOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYXZpY29uOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHBlcnNvbjoge1xuICAgICAgICByZXF1aXJlZDogW1wiaWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJwZXJzb25cIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICByb29tOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJpZFwiLCBcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcInJvb21cIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBzZXJ2aWNlOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJpZFwiLCBcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcInNlcnZpY2VcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBwbGF0Zm9ybToge1xuICAgICAgICByZXF1aXJlZDogW1wiaWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJwbGF0Zm9ybVwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHdlYnNpdGU6IHtcbiAgICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiaXJpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcIndlYnNpdGVcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhZGRyZXNzOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJhZGRyZXNzXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiaXJpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcImNhbGVuZGFyXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZW51bTogW1wiZXZlbnRcIiwgXCJ0YXNrXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhZGRyZXNzQm9vazoge1xuICAgICAgICByZXF1aXJlZDogW1wiaWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiaXJpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcImFkZHJlc3NCb29rXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuLy8gSW50ZXJuYWwgQVMgb2JqZWN0IHR5cGVzIHJlc2VydmVkIGZvciBTb2NrZXRodWIgSVBDL2hvdXNla2VlcGluZy5cbmV4cG9ydCBjb25zdCBJbnRlcm5hbE9iamVjdFR5cGVzTGlzdCA9IFtcInBsYXRmb3JtXCIsIFwiaGVhcnRiZWF0XCJdO1xuZXhwb3J0IGNvbnN0IE9iamVjdFR5cGVzTGlzdCA9IE9iamVjdC5rZXlzKE9iamVjdFR5cGVzU2NoZW1hKTtcbmV4cG9ydCBjb25zdCBBY3RvclR5cGVzTGlzdCA9IFtcbiAgICBcInBlcnNvblwiLFxuICAgIFwicm9vbVwiLFxuICAgIFwic2VydmljZVwiLFxuICAgIFwiZmVlZFwiLFxuICAgIFwid2Vic2l0ZVwiLFxuICAgIFwicGxhdGZvcm1cIixcbl07XG5leHBvcnQgY29uc3QgVGFyZ2V0VHlwZXNMaXN0ID0gW1xuICAgIFwicGVyc29uXCIsXG4gICAgXCJyb29tXCIsXG4gICAgXCJzZXJ2aWNlXCIsXG4gICAgXCJmZWVkXCIsXG4gICAgXCJ3ZWJzaXRlXCIsXG4gICAgXCJwbGF0Zm9ybVwiLFxuICAgIFwiYWRkcmVzc1wiLFxuICAgIFwiY2FsZW5kYXJcIixcbiAgICBcImFkZHJlc3NCb29rXCIsXG5dO1xuZXhwb3J0IGNvbnN0IHZhbGlkQWN0b3JSZWZzID0gQWN0b3JUeXBlc0xpc3QubWFwKCh0eXBlKSA9PiAoe1xuICAgICRyZWY6IGAjL2RlZmluaXRpb25zL3R5cGUvJHt0eXBlfWAsXG59KSk7XG5leHBvcnQgY29uc3QgdmFsaWRUYXJnZXRSZWZzID0gVGFyZ2V0VHlwZXNMaXN0Lm1hcCgodHlwZSkgPT4gKHtcbiAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy90eXBlLyR7dHlwZX1gLFxufSkpO1xuIiwKICAgICJpbXBvcnQge1xuICAgIEFTMl9CQVNFX0NPTlRFWFRfVVJMLFxuICAgIFNPQ0tFVEhVQl9CQVNFX0NPTlRFWFRfVVJMLFxufSBmcm9tIFwiLi4vY29udGV4dC5qc1wiO1xuaW1wb3J0IHtcbiAgICBPYmplY3RUeXBlc1NjaGVtYSxcbiAgICB2YWxpZEFjdG9yUmVmcyxcbiAgICB2YWxpZFRhcmdldFJlZnMsXG59IGZyb20gXCIuLi9oZWxwZXJzL29iamVjdHMuanNcIjtcblxuY29uc3QgY29udGV4dFNjaGVtYSA9IHtcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgbWluSXRlbXM6IDMsXG4gICAgbWF4SXRlbXM6IDMsXG4gICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIGFsbE9mOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5zOiB7XG4gICAgICAgICAgICAgICAgY29uc3Q6IEFTMl9CQVNFX0NPTlRFWFRfVVJMLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGFpbnM6IHtcbiAgICAgICAgICAgICAgICBjb25zdDogU09DS0VUSFVCX0JBU0VfQ09OVEVYVF9VUkwsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF0sXG59O1xuY29uc3QgdHlwZVNjaGVtYSA9IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxufTtcblxuZXhwb3J0IGNvbnN0IEFjdGl2aXR5U3RyZWFtU2NoZW1hID0ge1xuICAgICRpZDogXCJodHRwczovL3NvY2tldGh1Yi5vcmcvc2NoZW1hcy92L2FjdGl2aXR5LXN0cmVhbS5qc29uXCIsXG4gICAgZGVzY3JpcHRpb246IFwiU2NoZW1hIGZvciBTb2NrZXRodWIgQWN0aXZpdHkgU3RyZWFtc1wiLFxuXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICByZXF1aXJlZDogW1wiQGNvbnRleHRcIiwgXCJ0eXBlXCIsIFwiYWN0b3JcIl0sXG4gICAgLy8gUmVqZWN0IHVua25vd24gdG9wLWxldmVsIG1lc3NhZ2UgcHJvcGVydGllcy4gSW5ib3VuZCBtZXNzYWdlcyBjYXJyeSBvbmx5XG4gICAgLy8gdGhlIHByb3BlcnRpZXMgYmVsb3c7IGBlcnJvcmAvYHNlc3Npb25TZWNyZXRgIGFyZSBhZGRlZCBzZXJ2ZXItc2lkZSBhZnRlclxuICAgIC8vIHZhbGlkYXRpb24sIHNvIHRoZXkgbmV2ZXIgcmVhY2ggdGhpcyBzY2hlbWEuXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgXCJAY29udGV4dFwiOiBjb250ZXh0U2NoZW1hLFxuICAgICAgICBpZDoge1xuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogdHlwZVNjaGVtYSxcbiAgICAgICAgYWN0b3I6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBvbmVPZjogdmFsaWRBY3RvclJlZnMsXG4gICAgICAgIH0sXG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIG9uZU9mOiB2YWxpZFRhcmdldFJlZnMsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIE9iamVjdCBzaGFwZSBpcyB2YWxpZGF0ZWQgcGVyLXBsYXRmb3JtIGJ5IGVhY2ggcGxhdGZvcm0ncyBgbWVzc2FnZXNgXG4gICAgICAgIC8vIChpbmJvdW5kKSBhbmQgYHJlc3BvbnNlc2AgKG91dGJvdW5kKSBzY2hlbWFzLCB3aGljaCBvd24gdGhlaXIgb2JqZWN0XG4gICAgICAgIC8vIHZvY2FidWxhcnkuIFRoZSBiYXNlIGVudmVsb3BlIG9ubHkgcmVxdWlyZXMgaXQgdG8gYmUgYW4gb2JqZWN0LlxuICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIH0sXG4gICAgICAgIHB1Ymxpc2hlZDoge1xuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIGZvcm1hdDogXCJkYXRlLXRpbWVcIixcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgZGVmaW5pdGlvbnM6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0VHlwZXNTY2hlbWEsXG4gICAgfSxcbn07XG4iLAogICAgIi8qKlxuICogU3Vic3RpdHV0ZSB0aGUgYC92L2AgcGxhY2Vob2xkZXIgc2VnbWVudCBpbiBhIGNhbm9uaWNhbCBzY2hlbWEgYCRpZGAgd2l0aCBhXG4gKiBjb25jcmV0ZSBwYWNrYWdlIHZlcnNpb24sIGUuZy5cbiAqIGBodHRwczovL3NvY2tldGh1Yi5vcmcvc2NoZW1hcy92L3NvY2tldGh1Yi1jb25maWcuanNvbmAg4oaSXG4gKiBgaHR0cHM6Ly9zb2NrZXRodWIub3JnL3NjaGVtYXMvMy4wLjAvc29ja2V0aHViLWNvbmZpZy5qc29uYC5cbiAqXG4gKiBTaGFyZWQgYnkgdGhlIGJ1aWxkJ3MgSlNPTi1zY2hlbWEgZXhwb3J0ICh3aGljaCBzdGFtcHMgdGhlIHZlcnNpb24gaW50byB0aGVcbiAqIHB1Ymxpc2hlZCBhcnRpZmFjdHMpIGFuZCBieSBgU29ja2V0aHViQ29uZmlnU2NoZW1hSWRgLCBzbyB0aGUgdHdvIG5ldmVyXG4gKiBkcmlmdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcnNpb25lZFNjaGVtYUlkKGlkOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGlkLnJlcGxhY2UoXCIvdi9cIiwgYC8ke3ZlcnNpb259L2ApO1xufVxuIiwKICAgICJpbXBvcnQgcGFja2FnZUpzb24gZnJvbSBcIi4uLy4uL3BhY2thZ2UuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9O1xuaW1wb3J0IHsgdmVyc2lvbmVkU2NoZW1hSWQgfSBmcm9tIFwiLi4vc2NoZW1hLWlkLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBTb2NrZXRodWJDb25maWdTY2hlbWEgPSB7XG4gICAgJGlkOiBcImh0dHBzOi8vc29ja2V0aHViLm9yZy9zY2hlbWFzL3Yvc29ja2V0aHViLWNvbmZpZy5qc29uXCIsXG4gICAgZGVzY3JpcHRpb246IFwiU29ja2V0aHViIENvbmZpZyBTY2hlbWFcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHJlcXVpcmVkOiBbXCJwbGF0Zm9ybXNcIl0sXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgIFwiRW5hYmxlIHRoZSBleGFtcGxlcyBwYWdlcyBzZXJ2ZWQgYXQgW2hvc3RdOltwb3J0XS9leGFtcGxlc1wiLFxuICAgICAgICB9LFxuICAgICAgICAvLyBPcGVyYXRvci1zdXBwbGllZCBkZXRhaWxzIHNob3duIG9uIHRoZSBzZXJ2ZXIgaW5mbyBwYWdlIHNlcnZlZCBhdFxuICAgICAgICAvLyB0aGUgcm9vdCBVUkwuIEV2ZXJ5IGZpZWxkIGlzIG9wdGlvbmFsOyBlbXB0eSB2YWx1ZXMgYXJlIG9taXR0ZWQuXG4gICAgICAgIGFib3V0OiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgXCJEZXRhaWxzIGFib3V0IHRoaXMgZGVwbG95bWVudCBzaG93biBvbiB0aGUgcm9vdCBpbmZvIHBhZ2VcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkRpc3BsYXkgbmFtZSBvZiB0aGlzIFNvY2tldGh1YiBpbnN0YW5jZVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlNob3J0IGRlc2NyaXB0aW9uIG9mIHdobyB0aGlzIGluc3RhbmNlIGlzIGZvclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29udGFjdDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPcGVyYXRvciBjb250YWN0IChlbWFpbCBhZGRyZXNzIG9yIFVSTClcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxpbmtzOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogW10sXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJFeHRyYSBsaW5rcyAocHJpdmFjeSBwb2xpY3ksIHRlcm1zLCB3ZWJzaXRlKSBzaG93biBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm9uIHRoZSBpbmZvIHBhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogW1wibGFiZWxcIiwgXCJ1cmxcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHsgdHlwZTogXCJzdHJpbmdcIiwgbWluTGVuZ3RoOiAxIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IFwiXmh0dHBzPzovL1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2hvd1ZlcnNpb246IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU2hvdyB0aGUgZXhhY3Qgc2VydmVyIHZlcnNpb24gb24gdGhlIGluZm8gcGFnZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIihvZmYgYnkgZGVmYXVsdCB0byBsaW1pdCBmaW5nZXJwcmludGluZylcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNob3dVcHRpbWU6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU2hvdyB0aGUgcHJvY2VzcyB1cHRpbWUgb24gdGhlIGluZm8gcGFnZSAob2ZmIGJ5IFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdDogaXQgcmV2ZWFscyB3aGVuIHRoZSBzZXJ2ZXIgbGFzdCByZXN0YXJ0ZWQpXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGxvZ2dpbmc6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgbGV2ZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZW51bTogW1wiZXJyb3JcIiwgXCJ3YXJuXCIsIFwiaW5mb1wiLCBcImRlYnVnXCJdLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcImluZm9cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZpbGVMZXZlbDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBlbnVtOiBbXCJlcnJvclwiLCBcIndhcm5cIiwgXCJpbmZvXCIsIFwiZGVidWdcIl0sXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiZGVidWdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJzb2NrZXRodWIubG9nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHBsYXRmb3Jtczoge1xuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlBsYXRmb3JtIHBhY2thZ2VzIHRvIGxvYWRcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0tY2FyZGRhdlwiLFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1jYWxkYXZcIixcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0tZHVtbXlcIixcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0tZmVlZHNcIixcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0taXJjXCIsXG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLW1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLXhtcHBcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFBlci1wbGF0Zm9ybSBjb25maWcsIGtleWVkIGJ5IHBhY2thZ2UgbmFtZS4gRWFjaCBwbGF0Zm9ybSdzIGVudHJ5IGlzXG4gICAgICAgIC8vIHZhbGlkYXRlZCBhZ2FpbnN0IGl0cyBkZWNsYXJlZCBrZXlzOyBlbnRyaWVzIGZvciBwbGF0Zm9ybXMgd2l0aG91dCBhXG4gICAgICAgIC8vIGRlY2xhcmVkIHNoYXBlIGhlcmUgYXJlIHBhc3NlZCB0aHJvdWdoIHVudmFsaWRhdGVkLlxuICAgICAgICBwYWNrYWdlQ29uZmlnOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICBcIlBlci1wbGF0Zm9ybSBjb25maWcga2V5ZWQgYnkgcGFja2FnZSBuYW1lLCB2YWxpZGF0ZWQgYWdhaW5zdCBcIiArXG4gICAgICAgICAgICAgICAgXCJlYWNoIHBsYXRmb3JtJ3MgY29uZmlnIHNjaGVtYSBhbmQgZm9yd2FyZGVkIHRvIGl0cyBjaGlsZCBwcm9jZXNzXCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLWNhcmRkYXZcIjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RUaW1lb3V0TXM6IHsgdHlwZTogXCJpbnRlZ2VyXCIsIG1pbmltdW06IDEgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93UHJpdmF0ZUFkZHJlc3NlczogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dJbnNlY3VyZUh0dHA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmN1cnJlbmN5OiB7IHR5cGU6IFwiaW50ZWdlclwiLCBtaW5pbXVtOiAxIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0tY2FsZGF2XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0VGltZW91dE1zOiB7IHR5cGU6IFwiaW50ZWdlclwiLCBtaW5pbXVtOiAxIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ByaXZhdGVBZGRyZXNzZXM6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93SW5zZWN1cmVIdHRwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25jdXJyZW5jeTogeyB0eXBlOiBcImludGVnZXJcIiwgbWluaW11bTogMSB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLWR1bW15XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncmVldGluZzogeyB0eXBlOiBcInN0cmluZ1wiLCBkZWZhdWx0OiBcIkhlbGxvXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1mZWVkc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdFRpbWVvdXRNczogeyB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ByaXZhdGVBZGRyZXNzZXM6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmN1cnJlbmN5OiB7IHR5cGU6IFwiaW50ZWdlclwiLCBtaW5pbXVtOiAxIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0taXJjXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0VGltZW91dE1zOiB7IHR5cGU6IFwibnVtYmVyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS14bXBwXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0VGltZW91dE1zOiB7IHR5cGU6IFwibnVtYmVyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93UHJpdmF0ZUFkZHJlc3NlczogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLW1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ByaXZhdGVBZGRyZXNzZXM6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmN1cnJlbmN5OiB7IHR5cGU6IFwiaW50ZWdlclwiLCBtaW5pbXVtOiAxIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHR0bE1zOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IDAsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDYwNDgwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlNsaWRpbmcgVFRMIGluIG1pbGxpc2Vjb25kcyBmb3IgcGVyLXNlc3Npb24gZW5jcnlwdGVkIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JlZGVudGlhbCBrZXlzIGluIFJlZGlzLCByZWZyZXNoZWQgb24gZXZlcnkgc2F2ZSBhbmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWFkLiBBIGJhY2tzdG9wIGFnYWluc3Qga2V5cyBvcnBoYW5lZCBieSBjcmFzaGVzOyBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNlc3Npb25zIG5vcm1hbGx5IGRlbGV0ZSB0aGVpciBrZXkgb24gZGlzY29ubmVjdC4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTaXplIGdlbmVyb3VzbHkg4oCUIGlkbGUgc2Vzc2lvbnMgZG8gbm90IHJlZnJlc2ggaXQuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiMCBkaXNhYmxlcyBleHBpcnkuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWRlbnRpYWxDaGVjazoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICByZWNvbm5lY3RJcFNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBlbnVtOiBbXCJzb2NrZXRcIiwgXCJwcm94eVwiXSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJzb2NrZXRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHByb3h5SGVhZGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwieC1mb3J3YXJkZWQtZm9yXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHB1YmxpYzoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcImh0dHBcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhvc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJsb2NhbGhvc3RcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvcnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMTA1NTAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXRoOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiL1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICByYXRlTGltaXRlcjoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICB3aW5kb3dNczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxMDAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF4UmVxdWVzdHM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMTAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmxvY2tEdXJhdGlvbk1zOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDUwMDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXhDb25uZWN0aW9uc1BlcklwOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IDAsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDIwLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTWF4aW11bSBjb25jdXJyZW50IHNvY2tldCBjb25uZWN0aW9ucyBwZXIgY2xpZW50IElQLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlRoZSBwZXItZXZlbnQgcmF0ZSBsaW1pdGVyIGlzIGtleWVkIGJ5IHNvY2tldCBpZCwgc28gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aXRob3V0IGEgY29ubmVjdGlvbiBjYXAgYSBjbGllbnQgY2FuIGJ5cGFzcyBpdCBieSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm9wZW5pbmcgbW9yZSBzb2NrZXRzLiAwIGRpc2FibGVzIHRoZSBjYXAuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGxpbWl0czoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBtYXhJbnN0YW5jZXNQZXJTZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAwLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxMCxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICAgICAgICBcIk1heGltdW0gcGVyc2lzdGVudCBpbnN0YW5jZXMgcGVyIHNvY2tldCBzZXNzaW9uLiAwIGRpc2FibGVzIHRoZSBjYXAuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXhJbnN0YW5jZXNQZXJJcDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogMCxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMjAsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJNYXhpbXVtIHBlcnNpc3RlbnQgaW5zdGFuY2VzIHBlciBjbGllbnQgSVAsIGluY2x1ZGluZyBIVFRQIGFjdGlvbnMuIDAgZGlzYWJsZXMgdGhlIGNhcC5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1heFBsYXRmb3JtSW5zdGFuY2VzOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IDAsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEwMCxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlVwcGVyIGJvdW5kIG9uIGNvbmN1cnJlbnRseSBydW5uaW5nIHBlcnNpc3RlbnQgcGxhdGZvcm0gaW5zdGFuY2VzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiKGNoaWxkIHByb2Nlc3NlcykuIEVhY2ggcGVyc2lzdGVudC1wbGF0Zm9ybSBhY3RvciBmb3JrcyBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIml0cyBvd24gcHJvY2Vzcywgc28gYW4gdW5ib3VuZGVkIGNvdW50IGlzIGEgcmVzb3VyY2UgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJleGhhdXN0aW9uIHJpc2sgb24gcHVibGljIGluc3RhbmNlcy4gMCBkaXNhYmxlcyB0aGUgY2FwLlwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICByZWRpczoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICB1cmw6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJyZWRpczovLzEyNy4wLjAuMTo2Mzc5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb25uZWN0VGltZW91dDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQ29ubmVjdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGlzY29ubmVjdFRpbWVvdXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogNTAwMCxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRGlzY29ubmVjdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF4UmV0cmllc1BlclJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogW1wibnVtYmVyXCIsIFwibnVsbFwiXSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogbnVsbCBhcyBudW1iZXIgfCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyBwZXIgcmVxdWVzdCAobnVsbCBmb3IgQnVsbE1RIGRlZmF1bHQpXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNlbnRyeToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBkc246IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwicHJvZHVjdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVsZWFzZToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIlwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW5hYmxlTG9nczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2dMZXZlbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudW06IFtcImRlYnVnXCIsIFwiaW5mb1wiLCBcIndhcm5cIiwgXCJlcnJvclwiXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogW1wid2FyblwiLCBcImVycm9yXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW5hYmxlTWV0cmljczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRyYWNlc1NhbXBsZVJhdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogMSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMC4xLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcHJvZmlsZVNlc3Npb25TYW1wbGVSYXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IDAsXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW06IDEsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZW5kRGVmYXVsdFBpaToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvY2tldGh1Yjoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBwb3J0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEwNTUwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaG9zdDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcImxvY2FsaG9zdFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGF0aDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIi9zb2NrZXRodWJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1heFBheWxvYWRCeXRlczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImludGVnZXJcIixcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogMSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMjYyMTQ0LFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTWF4aW11bSBzaXplIGluIGJ5dGVzIG9mIGEgc2luZ2xlIFNvY2tldC5JTyBtZXNzYWdlLlwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJ1c3RQcm94eToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwibnVtYmVyXCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkV4cHJlc3MgJ3RydXN0IHByb3h5JyBzZXR0aW5nLCBkZWNpZGluZyB3aGV0aGVyIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiJ3gtZm9yd2FyZGVkLWZvcicgaXMgYmVsaWV2ZWQgd2hlbiBkZXRlcm1pbmluZyBhIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xpZW50J3MgSVAgZm9yIEhUVFAgcmF0ZSBsaW1pdGluZy4gZmFsc2UgdHJ1c3RzIG5vIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicHJveHk7IGEgbnVtYmVyIHRydXN0cyB0aGF0IG1hbnkgaG9wczsgYSBzdHJpbmcgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0YWtlcyBhbiBhZGRyZXNzLCBzdWJuZXQgb3IgcHJlc2V0ICgnbG9vcGJhY2snKS4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJPbmx5IGVuYWJsZSBiZWhpbmQgYSByZXZlcnNlIHByb3h5IHRoYXQgb3ZlcndyaXRlcyBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRoZSBoZWFkZXIuIFdoZW4gbGVmdCBmYWxzZSB3aGlsZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNyZWRlbnRpYWxDaGVjay5yZWNvbm5lY3RJcFNvdXJjZSBpcyAncHJveHknIGFuZCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNyZWRlbnRpYWxDaGVjay5wcm94eUhlYWRlciBpcyAneC1mb3J3YXJkZWQtZm9yJywgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJvbmUgaG9wIGlzIHRydXN0ZWQgc28gYm90aCBwYXRocyBhZ3JlZTsgYSBjdXN0b20gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm94eUhlYWRlciByZXF1aXJlcyBzZXR0aW5nIHRoaXMgZXhwbGljaXRseS5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkFsbG93ZWQgQ09SUyBvcmlnaW4ocykgZm9yIHNvY2tldC5pbyBjb25uZWN0aW9ucyBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW5kIHRoZSBIVFRQIGFjdGlvbnMgZW5kcG9pbnQuICcqJyBhbGxvd3MgYW55IFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ3ZWJzaXRlIHRvIGNvbm5lY3QgdmlzaXRvcnMnIGJyb3dzZXJzIHRvIHRoaXMgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImluc3RhbmNlOyBwdWJsaWMgZGVwbG95bWVudHMgc2hvdWxkIHNldCBhbiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZXhwbGljaXQgb3JpZ2luIG9yIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5zLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaHR0cEFjdGlvbnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkVuYWJsZSB0aGUgSFRUUCBhY3Rpb25zIGVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXRoOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiL3NvY2tldGh1Yi1odHRwXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXF1aXJlUmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF4TWVzc2FnZXNQZXJSZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IDEsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDIwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF4UGF5bG9hZEJ5dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IDEsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDI2MjE0NCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlkZW1wb3RlbmN5VHRsTXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogMCxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMzAwMDAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVxdWVzdFRpbWVvdXRNczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAwLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAzMDAwMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlkbGVUaW1lb3V0TXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogMCxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMTUwMDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHBsYXRmb3JtSGVhcnRiZWF0OiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIGludGVydmFsTXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogNTAwMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRpbWVvdXRNczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxNTAwMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbmVkIGNhbm9uaWNhbCBVUkwgb2YgdGhpcyBzY2hlbWEsIG1hdGNoaW5nIHRoZSBgJGlkYCB3cml0dGVuIGludG9cbiAqIHRoZSBwdWJsaXNoZWQgSlNPTiBhcnRpZmFjdCAoYGRpc3Qvc2NoZW1hcy9qc29uL3NvY2tldGh1Yi1jb25maWcuanNvbmApIGJ5XG4gKiB0aGUgYnVpbGQncyB2ZXJzaW9uIHN1YnN0aXR1dGlvbi4gU3VpdGFibGUgYXMgdGhlIGAkc2NoZW1hYCB2YWx1ZSBpblxuICogZ2VuZXJhdGVkIGNvbmZpZyBmaWxlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNvY2tldGh1YkNvbmZpZ1NjaGVtYUlkID0gdmVyc2lvbmVkU2NoZW1hSWQoXG4gICAgU29ja2V0aHViQ29uZmlnU2NoZW1hLiRpZCxcbiAgICBwYWNrYWdlSnNvbi52ZXJzaW9uLFxuKTtcbiIsCiAgICAiaW1wb3J0IEFqdiwgeyB0eXBlIFZhbGlkYXRlRnVuY3Rpb24gfSBmcm9tIFwiYWp2XCI7XG5pbXBvcnQge1xuICAgIGlzQ29kZWdlbkF2YWlsYWJsZSxcbiAgICB3YXJuQ29kZWdlblVuYXZhaWxhYmxlLFxufSBmcm9tIFwiLi9oZWxwZXJzL2NvZGVnZW4uanNcIjtcbmltcG9ydCB7XG4gICAgdHlwZSBTZXJ2aWNlRGVzY3JpcHRvcixcbiAgICBTZXJ2aWNlRGVzY3JpcHRvclNjaGVtYSxcbiAgICB0eXBlIFNlcnZpY2VFbmRwb2ludHMsXG59IGZyb20gXCIuL3NjaGVtYXMvc2VydmljZS1kZXNjcmlwdG9yLmpzXCI7XG5cbmxldCBhanY6IEFqdiB8IHVuZGVmaW5lZDtcbmxldCB2YWxpZGF0b3I6IFZhbGlkYXRlRnVuY3Rpb248U2VydmljZURlc2NyaXB0b3I+IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgZm9yIGEgc2VydmVyJ3Mgc2VydmljZSBkZXNjcmlwdG9yLiBWYWxpZGF0ZXMgd2l0aCBBanYgd2hlbiBjb2RlXG4gKiBnZW5lcmF0aW9uIGlzIGF2YWlsYWJsZSBhbmQgZmFsbHMgYmFjayB0byBhIHN0cnVjdHVyYWwgY2hlY2sgd2hlbiBhIENvbnRlbnRcbiAqIFNlY3VyaXR5IFBvbGljeSBibG9ja3MgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNlcnZpY2VEZXNjcmlwdG9yKFxuICAgIGRlc2NyaXB0b3I6IHVua25vd24sXG4pOiBkZXNjcmlwdG9yIGlzIFNlcnZpY2VEZXNjcmlwdG9yIHtcbiAgICBpZiAoIWlzQ29kZWdlbkF2YWlsYWJsZSgpKSB7XG4gICAgICAgIHdhcm5Db2RlZ2VuVW5hdmFpbGFibGUoKTtcbiAgICAgICAgcmV0dXJuIGlzU2VydmljZURlc2NyaXB0b3JTaGFwZShkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgaWYgKCFhanYpIHtcbiAgICAgICAgYWp2ID0gbmV3IEFqdih7IHN0cmljdFR5cGVzOiBmYWxzZSwgYWxsRXJyb3JzOiB0cnVlIH0pO1xuICAgIH1cbiAgICB2YWxpZGF0b3IgPz89IGFqdi5jb21waWxlPFNlcnZpY2VEZXNjcmlwdG9yPihTZXJ2aWNlRGVzY3JpcHRvclNjaGVtYSk7XG4gICAgcmV0dXJuIHZhbGlkYXRvcihkZXNjcmlwdG9yKTtcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmFsIGZhbGxiYWNrIHVzZWQgd2hlbiBjb2RlIGdlbmVyYXRpb24gKGFuZCB0aGVyZWZvcmUgQWp2KSBpc1xuICogdW5hdmFpbGFibGUuIE1pcnJvcnMgdGhlIHJlcXVpcmVkIG1lbWJlcnMgb2YgU2VydmljZURlc2NyaXB0b3JTY2hlbWEuXG4gKi9cbmZ1bmN0aW9uIGlzU2VydmljZURlc2NyaXB0b3JTaGFwZShcbiAgICBkZXNjcmlwdG9yOiB1bmtub3duLFxuKTogZGVzY3JpcHRvciBpcyBTZXJ2aWNlRGVzY3JpcHRvciB7XG4gICAgaWYgKCFkZXNjcmlwdG9yIHx8IHR5cGVvZiBkZXNjcmlwdG9yICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBkZXNjcmlwdG9yIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh2YWx1ZS5uYW1lICE9PSBcInNvY2tldGh1YlwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFpc0FwaVZlcnNpb24odmFsdWUuYXBpVmVyc2lvbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUucGxhdGZvcm1zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcGxhdGZvcm0gb2YgdmFsdWUucGxhdGZvcm1zKSB7XG4gICAgICAgIGlmICghcGxhdGZvcm0gfHwgdHlwZW9mIHBsYXRmb3JtICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW50cnkgPSBwbGF0Zm9ybSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeS5pZCAhPT0gXCJzdHJpbmdcIiB8fCBlbnRyeS5pZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzQXBpVmVyc2lvbihlbnRyeS5hcGlWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh2YWx1ZS5lbmRwb2ludHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIXZhbHVlLmVuZHBvaW50cyB8fCB0eXBlb2YgdmFsdWUuZW5kcG9pbnRzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kcG9pbnRzID0gdmFsdWUuZW5kcG9pbnRzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBpZiAoIWlzQWJzb2x1dGVQYXRoKGVuZHBvaW50cy5zb2NrZXRJTykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBlbmRwb2ludHMuaHR0cEFjdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgIWlzQWJzb2x1dGVQYXRoKGVuZHBvaW50cy5odHRwQWN0aW9ucylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBXaGV0aGVyIGB2YWx1ZWAgaXMgYSBTb2NrZXRodWIgQVBJIHZlcnNpb246IGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuICovXG5mdW5jdGlvbiBpc0FwaVZlcnNpb24odmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IDA7XG59XG5cbi8qKlxuICogQSBzZXJ2ZXItYWJzb2x1dGUgcGF0aDogYSBzaW5nbGUgbGVhZGluZyBcIi9cIiB3aXRoIG5vIHdoaXRlc3BhY2Ugb3IgYmFja3NsYXNoXG4gKiAobWF0Y2hlcyBTZXJ2aWNlRGVzY3JpcHRvclNjaGVtYSdzIGBhYnNvbHV0ZVBhdGhgKS5cbiAqL1xuZnVuY3Rpb24gaXNBYnNvbHV0ZVBhdGgodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIC9eXFwvKD8hWy9cXFxcXSlbXlxcc1xcXFxdKiQvLnRlc3QodmFsdWUpO1xufVxuXG5leHBvcnQgeyBTZXJ2aWNlRGVzY3JpcHRvclNjaGVtYSB9O1xuZXhwb3J0IHR5cGUgeyBTZXJ2aWNlRGVzY3JpcHRvciwgU2VydmljZUVuZHBvaW50cyB9O1xuIiwKICAgICIvKipcbiAqIEFqdiBjb21waWxlcyBKU09OIHNjaGVtYXMgd2l0aCBgbmV3IEZ1bmN0aW9uYC4gRW52aXJvbm1lbnRzIHRoYXQgZm9yYmlkIGV2YWxcbiAqIOKAlCBhIGJyb3dzZXItZXh0ZW5zaW9uIHBhZ2UgdW5kZXIgYSBNYW5pZmVzdCBWMyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSwgb3JcbiAqIHNvbWUgc2FuZGJveGVzIOKAlCBibG9jayB0aGF0IGNhbGwsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBtYWtlIGltcG9ydGluZyB0aGlzXG4gKiBwYWNrYWdlIHRocm93IGJlZm9yZSBhIHNpbmdsZSBzY2hlbWEgaXMgdXNlZC4gRGV0ZWN0IGF2YWlsYWJpbGl0eSBvbmNlIHNvXG4gKiB2YWxpZGF0aW9uIGNhbiBiZSBza2lwcGVkIHRoZXJlLlxuICpcbiAqIFNraXBwaW5nIGNsaWVudC1zaWRlIHZhbGlkYXRpb24gaXMgc2FmZTogdGhlIFNvY2tldGh1YiBzZXJ2ZXIgdmFsaWRhdGVzIGV2ZXJ5XG4gKiBpbmJvdW5kIG1lc3NhZ2UgYWdhaW5zdCB0aGUgc2FtZSBzY2hlbWFzLlxuICovXG5cbmxldCBhdmFpbGFibGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5sZXQgd2FybmVkID0gZmFsc2U7XG5cbi8qKlxuICogUmVwb3J0IHdoZXRoZXIgdGhlIGVudmlyb25tZW50IGFsbG93cyBjb2RlIGdlbmVyYXRpb24sIGkuZS4gd2hldGhlclxuICogYG5ldyBGdW5jdGlvbmAgc3VjY2VlZHMuIFRoZSByZXN1bHQgaXMgcHJvYmVkIG9uY2UgYW5kIGNhY2hlZCwgc28gY2FsbGVycyBtYXlcbiAqIGludm9rZSB0aGlzIGZyZWVseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29kZWdlbkF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAoYXZhaWxhYmxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBGdW5jdGlvbihcInJldHVybiB0cnVlXCIpO1xuICAgICAgICAgICAgYXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXZhaWxhYmxlO1xufVxuXG4vKiogRW1pdCBhIG9uZS10aW1lIG5vdGljZSB0aGF0IHNjaGVtYSB2YWxpZGF0aW9uIGlzIGRpc2FibGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhcm5Db2RlZ2VuVW5hdmFpbGFibGUoKTogdm9pZCB7XG4gICAgaWYgKHdhcm5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHdhcm5lZCA9IHRydWU7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIltAc29ja2V0aHViL3NjaGVtYXNdIFNjaGVtYSB2YWxpZGF0aW9uIGlzIGRpc2FibGVkOiB0aGlzIGVudmlyb25tZW50J3MgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgYmxvY2tzIGBuZXcgRnVuY3Rpb25gLCB3aGljaCBBanYgbmVlZHMgdG8gY29tcGlsZSBzY2hlbWFzLiBUaGUgU29ja2V0aHViIHNlcnZlciBzdGlsbCB2YWxpZGF0ZXMgZXZlcnkgbWVzc2FnZS5cIixcbiAgICApO1xufVxuXG4vKipcbiAqIEZvcmNlIHRoZSBjb2RlZ2VuLWF2YWlsYWJpbGl0eSByZXN1bHQuIFRlc3Qtb25seSBzZWFtIGZvciBleGVyY2lzaW5nIHRoZVxuICogQ1NQIGZhbGxiYWNrOyBwYXNzIGB1bmRlZmluZWRgIHRvIHJlc3RvcmUgZGV0ZWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29kZWdlbkF2YWlsYWJsZUZvclRlc3RpbmcodmFsdWU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgYXZhaWxhYmxlID0gdmFsdWU7XG59XG4iLAogICAgIi8qKlxuICogVGhlIHB1YmxpYyBzZXJ2aWNlIGRlc2NyaXB0b3Igc2VydmVkIG9uIGEgYmFyZSBHRVQgb2YgdGhlIEhUVFAgYWN0aW9uc1xuICogcGF0aCBhbmQgb24gYEdFVCAvYCB3aXRoIGBBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb25gLiBJdCBjYXJyaWVzIEFQSVxuICogdmVyc2lvbnMgb25seSAodGhlIFNlbVZlciBtYWpvciBvZiB0aGUgc2VydmVyIHBhY2thZ2UgYW5kIG9mIGVhY2ggcGxhdGZvcm1cbiAqIHBhY2thZ2UpLCBuZXZlciBleGFjdCBwYWNrYWdlIHZlcnNpb25zLCBwbHVzIHRoZSBwdWJsaWMgY29ubmVjdGlvblxuICogZW5kcG9pbnRzIHNvIGEgY2xpZW50IG5lZWRzIG5vdGhpbmcgYnV0IHRoZSBzZXJ2ZXIncyBiYXNlIFVSTC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlRGVzY3JpcHRvciB7XG4gICAgbmFtZTogXCJzb2NrZXRodWJcIjtcbiAgICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogV2hlcmUgdG8gY29ubmVjdC4gQWJzZW50IGZyb20gZGVzY3JpcHRvcnMgd3JpdHRlbiBieSBzZXJ2ZXJzIHRoYXRcbiAgICAgKiBwcmVkYXRlIGVuZHBvaW50IGRpc2NvdmVyeS5cbiAgICAgKi9cbiAgICBlbmRwb2ludHM/OiBTZXJ2aWNlRW5kcG9pbnRzO1xuICAgIHBsYXRmb3JtczogQXJyYXk8eyBpZDogc3RyaW5nOyBhcGlWZXJzaW9uOiBudW1iZXIgfT47XG59XG5cbi8qKlxuICogV2hlcmUgdG8gY29ubmVjdCwgYXMgc2VydmVyLWFic29sdXRlIHBhdGhzIChsZWFkaW5nIGAvYCkgb24gdGhlIG9yaWdpbiB0aGVcbiAqIGRlc2NyaXB0b3Igd2FzIGZldGNoZWQgZnJvbS4gTm8gb3JpZ2luIGlzIGFkdmVydGlzZWQ6IGEgY2xpZW50IGhhcyBhbHJlYWR5XG4gKiByZWFjaGVkIHRoZSBzZXJ2ZXIsIGFuZCByZXNvbHZpbmcgcGF0aHMgYWdhaW5zdCB0aGF0IHNhbWUgb3JpZ2luIGNhbm5vdCBiZVxuICogbWlzZGlyZWN0ZWQgYnkgYSBtaXNjb25maWd1cmVkIGBwdWJsaWNgIGJsb2NrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VFbmRwb2ludHMge1xuICAgIC8qKlxuICAgICAqIFRoZSBTb2NrZXQuSU8gc2VydmVyIHBhdGgsIHRvIGJlIHBhc3NlZCBhcyB0aGUgYHBhdGhgIG9wdGlvbiBvZiBgaW8oKWBcbiAgICAgKiAoYSBwYXRoIGFwcGVuZGVkIHRvIHRoZSBVUkwgd291bGQgc2VsZWN0IGEgbmFtZXNwYWNlIGluc3RlYWQpLlxuICAgICAqL1xuICAgIHNvY2tldElPOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBIVFRQIGFjdGlvbnMgcGF0aC4gUHJlc2VudCBvbmx5IHdoZW4gdGhhdCB0cmFuc3BvcnQgaXMgZW5hYmxlZC4gKi9cbiAgICBodHRwQWN0aW9ucz86IHN0cmluZztcbn1cblxuLy8gQW4gQVBJIHZlcnNpb24gaXMgYSBTZW1WZXIgbWFqb3I6IGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuXG5jb25zdCBhcGlWZXJzaW9uID0ge1xuICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgIG1pbmltdW06IDAsXG59IGFzIGNvbnN0O1xuXG5jb25zdCBub25FbXB0eVN0cmluZyA9IHsgdHlwZTogXCJzdHJpbmdcIiwgbWluTGVuZ3RoOiAxIH0gYXMgY29uc3Q7XG5cbi8vIEEgc2VydmVyLWFic29sdXRlIHBhdGg6IGEgc2luZ2xlIGxlYWRpbmcgXCIvXCIgZm9sbG93ZWQgYnkgbm8gd2hpdGVzcGFjZSBhbmRcbi8vIG5vIGJhY2tzbGFzaC4gQW55dGhpbmcgVVJMIHJlc29sdXRpb24gY291bGQgcmVhZCBhcyBwcm90b2NvbC1yZWxhdGl2ZSBpc1xuLy8gcmVqZWN0ZWQ6IFwiLy9ob3N0L3hcIiwgXCIvXFxcXGhvc3QveFwiLCBhbmQgXCIvPHRhYj4vaG9zdC94XCIgKHRoZSBXSEFUV0cgcGFyc2VyXG4vLyBzdHJpcHMgdGFiLCBDUiBhbmQgTEYgYmVmb3JlIHBhcnNpbmcgYW5kIHRyZWF0cyBcIlxcXFxcIiBhcyBcIi9cIiksIGFueSBvZiB3aGljaFxuLy8gd291bGQgc2VuZCBhIGNsaWVudCB0byBhbm90aGVyIG9yaWdpbi5cbmNvbnN0IGFic29sdXRlUGF0aCA9IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHBhdHRlcm46IFwiXi8oPyFbL1xcXFxcXFxcXSlbXlxcXFxzXFxcXFxcXFxdKiRcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBTZXJ2aWNlRGVzY3JpcHRvclNjaGVtYSA9IHtcbiAgICAkaWQ6IFwiaHR0cHM6Ly9zb2NrZXRodWIub3JnL3NjaGVtYXMvdi9zZXJ2aWNlLWRlc2NyaXB0b3IuanNvblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlNvY2tldGh1YiBzZXJ2aWNlIGRlc2NyaXB0b3JcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwiYXBpVmVyc2lvblwiLCBcInBsYXRmb3Jtc1wiXSxcbiAgICAvLyBPcGVuIHRvIG5ldyBtZW1iZXJzOiBjbGllbnRzIHZhbGlkYXRpbmcgYWdhaW5zdCB0aGlzIHZlcnNpb24gb2YgdGhlXG4gICAgLy8gc2NoZW1hIG11c3Qga2VlcCB3b3JraW5nIHdoZW4gYSBsYXRlciBzZXJ2ZXIgYWRkcyBkZXNjcmlwdG9yIGZpZWxkcy5cbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIG5hbWU6IHsgY29uc3Q6IFwic29ja2V0aHViXCIgfSxcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgZW5kcG9pbnRzOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IFtcInNvY2tldElPXCJdLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgc29ja2V0SU86IGFic29sdXRlUGF0aCxcbiAgICAgICAgICAgICAgICBodHRwQWN0aW9uczogYWJzb2x1dGVQYXRoLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGxhdGZvcm1zOiB7XG4gICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwiYXBpVmVyc2lvblwiXSxcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBub25FbXB0eVN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufSBhcyBjb25zdDtcbiIsCiAgICAiaW1wb3J0IEFqdiwgeyB0eXBlIFNjaGVtYSB9IGZyb20gXCJhanZcIjtcbmltcG9ydCBhZGRGb3JtYXRzIGZyb20gXCJhanYtZm9ybWF0c1wiO1xuaW1wb3J0IGFkZGl0aW9uc0Zvcm1hdHMyMDE5IGZyb20gXCJhanYtZm9ybWF0cy1kcmFmdDIwMTlcIjtcbmltcG9ydCB7XG4gICAgRVJST1JfUExBVEZPUk1fQ09OVEVYVF9VUkwsXG4gICAgRVJST1JfUExBVEZPUk1fSUQsXG4gICAgZ2V0Q3JlZGVudGlhbHNTY2hlbWFJZEJ5Q29udGV4dFVybCxcbiAgICBnZXRQbGF0Zm9ybUlkQnlDb250ZXh0VXJsLFxuICAgIGdldFNjaGVtYUlkQnlDb250ZXh0VXJsLFxuICAgIElOVEVSTkFMX1BMQVRGT1JNX0NPTlRFWFRfVVJMLFxuICAgIElOVEVSTkFMX1BMQVRGT1JNX0lELFxuICAgIHJlZ2lzdGVyUGxhdGZvcm1Db250ZXh0LFxuICAgIHJlc29sdmVQbGF0Zm9ybUNvbnRleHRVcmwsXG59IGZyb20gXCIuL2NvbnRleHQuanNcIjtcbmltcG9ydCB7XG4gICAgaXNDb2RlZ2VuQXZhaWxhYmxlLFxuICAgIHdhcm5Db2RlZ2VuVW5hdmFpbGFibGUsXG59IGZyb20gXCIuL2hlbHBlcnMvY29kZWdlbi5qc1wiO1xuaW1wb3J0IGdldEVycm9yTWVzc2FnZSwge1xuICAgIHR5cGUgVmFsaWRhdGlvbkVycm9yT3B0aW9ucyxcbn0gZnJvbSBcIi4vaGVscGVycy9lcnJvci1wYXJzZXIuanNcIjtcbmltcG9ydCB7IEFjdG9yVHlwZXNMaXN0LCBUYXJnZXRUeXBlc0xpc3QgfSBmcm9tIFwiLi9oZWxwZXJzL29iamVjdHMuanNcIjtcbmltcG9ydCB7IEFjdGl2aXR5U3RyZWFtU2NoZW1hIH0gZnJvbSBcIi4vc2NoZW1hcy9hY3Rpdml0eS1zdHJlYW0uanNcIjtcbmltcG9ydCB7IFBsYXRmb3JtU2NoZW1hIH0gZnJvbSBcIi4vc2NoZW1hcy9wbGF0Zm9ybS5qc1wiO1xuaW1wb3J0IHsgU29ja2V0aHViQ29uZmlnU2NoZW1hIH0gZnJvbSBcIi4vc2NoZW1hcy9zb2NrZXRodWItY29uZmlnLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGl2aXR5U3RyZWFtIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxudHlwZSBTY2hlbWFzRGljdCA9IFJlY29yZDxzdHJpbmcsIFNjaGVtYT47XG5cbmNvbnN0IHNjaGVtYVVSTCA9IFwiaHR0cHM6Ly9zb2NrZXRodWIub3JnL3NjaGVtYXMvdjBcIjtcbmNvbnN0IHNjaGVtYXM6IFNjaGVtYXNEaWN0ID0ge307XG5sZXQgdmFsaWRhdGlvbkVycm9yT3B0aW9uczogVmFsaWRhdGlvbkVycm9yT3B0aW9ucyA9IHt9O1xubGV0IHN5c3RlbUNvbnRleHRzUmVnaXN0ZXJlZCA9IGZhbHNlO1xuXG5zY2hlbWFzW2Ake3NjaGVtYVVSTH0vYWN0aXZpdHktc3RyZWFtYF0gPSBBY3Rpdml0eVN0cmVhbVNjaGVtYTtcblxubGV0IGFqdjogQWp2IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIExhemlseSBjcmVhdGUgdGhlIHNoYXJlZCBBanYgaW5zdGFuY2UgYW5kIHJlZ2lzdGVyIGV2ZXJ5IGtub3duIHNjaGVtYS5cbiAqIENvbnN0cnVjdGluZyBBanYgYW5kIGFkZGluZyBzY2hlbWFzIGNvbXBpbGVzIHRoZW0gd2l0aCBgbmV3IEZ1bmN0aW9uYCwgd2hpY2hcbiAqIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdGhhdCBmb3JiaWRzIGV2YWwgKGJyb3dzZXIgZXh0ZW5zaW9ucykgYmxvY2tzLlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIGNvZGUgZ2VuZXJhdGlvbiBpcyB1bmF2YWlsYWJsZSwgc28gY2FsbGVycyBza2lwXG4gKiB2YWxpZGF0aW9uOyB0aGUgU29ja2V0aHViIHNlcnZlciByZW1haW5zIHRoZSBhdXRob3JpdHkuXG4gKi9cbmZ1bmN0aW9uIGdldEFqdigpOiBBanYgfCB1bmRlZmluZWQge1xuICAgIGlmICghaXNDb2RlZ2VuQXZhaWxhYmxlKCkpIHtcbiAgICAgICAgd2FybkNvZGVnZW5VbmF2YWlsYWJsZSgpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIWFqdikge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBBanYoeyBzdHJpY3RUeXBlczogZmFsc2UsIGFsbEVycm9yczogdHJ1ZSB9KTtcbiAgICAgICAgYWRkRm9ybWF0cyhpbnN0YW5jZSBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGFkZEZvcm1hdHM+WzBdKTtcbiAgICAgICAgYWRkaXRpb25zRm9ybWF0czIwMTkoaW5zdGFuY2UgYXMgdW5rbm93biBhcyBBanYpO1xuICAgICAgICBmb3IgKGNvbnN0IHVyaSBpbiBzY2hlbWFzKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5hZGRTY2hlbWEoc2NoZW1hc1t1cmldLCB1cmkpO1xuICAgICAgICB9XG4gICAgICAgIGFqdiA9IGluc3RhbmNlO1xuICAgIH1cbiAgICByZXR1cm4gYWp2O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgYnVpbHQtaW4gKHN5c3RlbSkgcGxhdGZvcm0ncyBjb250ZXh0IGFuZCwgd2hlbiBBanYgaXMgYXZhaWxhYmxlLFxuICogZW1wdHkgbWVzc2FnZSBhbmQgY3JlZGVudGlhbHMgc2NoZW1hcyBmb3IgaXQuIEFsc28gdXNlZCBhcyBhIG5vLW9wIEFqdiBzdGVwXG4gKiB1bmRlciBhIGNvZGUtZ2VuZXJhdGlvbi1ibG9ja2luZyBDU1AuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyU3lzdGVtQ29udGV4dChwbGF0Zm9ybUlkOiBzdHJpbmcsIGNvbnRleHRVcmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHJlZ2lzdGVyUGxhdGZvcm1Db250ZXh0KFxuICAgICAgICBwbGF0Zm9ybUlkLFxuICAgICAgICBjb250ZXh0VXJsLFxuICAgICAgICBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybUlkfS9tZXNzYWdlc2AsXG4gICAgICAgIGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtSWR9L2NyZWRlbnRpYWxzYCxcbiAgICApO1xuXG4gICAgY29uc3QgaW5zdGFuY2UgPSBnZXRBanYoKTtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlU2NoZW1hUmVmID0gYCR7c2NoZW1hVVJMfS9jb250ZXh0LyR7cGxhdGZvcm1JZH0vbWVzc2FnZXNgO1xuICAgIGlmICghaW5zdGFuY2UuZ2V0U2NoZW1hKG1lc3NhZ2VTY2hlbWFSZWYpKSB7XG4gICAgICAgIGluc3RhbmNlLmFkZFNjaGVtYSh7fSwgbWVzc2FnZVNjaGVtYVJlZik7XG4gICAgfVxuXG4gICAgY29uc3QgY3JlZGVudGlhbHNTY2hlbWFSZWYgPSBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybUlkfS9jcmVkZW50aWFsc2A7XG4gICAgaWYgKCFpbnN0YW5jZS5nZXRTY2hlbWEoY3JlZGVudGlhbHNTY2hlbWFSZWYpKSB7XG4gICAgICAgIGluc3RhbmNlLmFkZFNjaGVtYSh7fSwgY3JlZGVudGlhbHNTY2hlbWFSZWYpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyU3lzdGVtUGxhdGZvcm1Db250ZXh0cygpOiB2b2lkIHtcbiAgICBpZiAoc3lzdGVtQ29udGV4dHNSZWdpc3RlcmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVnaXN0ZXJTeXN0ZW1Db250ZXh0KEVSUk9SX1BMQVRGT1JNX0lELCBFUlJPUl9QTEFURk9STV9DT05URVhUX1VSTCk7XG4gICAgcmVnaXN0ZXJTeXN0ZW1Db250ZXh0KElOVEVSTkFMX1BMQVRGT1JNX0lELCBJTlRFUk5BTF9QTEFURk9STV9DT05URVhUX1VSTCk7XG4gICAgc3lzdGVtQ29udGV4dHNSZWdpc3RlcmVkID0gdHJ1ZTtcbn1cblxucmVnaXN0ZXJTeXN0ZW1QbGF0Zm9ybUNvbnRleHRzKCk7XG5cbi8qKlxuICogVmFsaWRhdGUgYG1zZ2AgYWdhaW5zdCB0aGUgc2NoZW1hIHJlZ2lzdGVyZWQgYXQgYHNjaGVtYVJlZmAuIFJldHVybnMgYW4gZW1wdHlcbiAqIHN0cmluZyB3aGVuIHZhbGlkLCBvdGhlcndpc2UgYSBodW1hbi1yZWFkYWJsZSBlcnJvcjsgcmV0dXJucyBcIlwiIGlmIEFqdiBpc1xuICogdW5hdmFpbGFibGUgb3IgdGhlIHNjaGVtYSBpcyBub3QgcmVnaXN0ZXJlZC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGlvbihzY2hlbWFSZWY6IHN0cmluZywgbXNnOiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBnZXRBanYoKTtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZGF0b3IgPSBpbnN0YW5jZS5nZXRTY2hlbWEoc2NoZW1hUmVmKTtcbiAgICBpZiAoIXZhbGlkYXRvcikge1xuICAgICAgICByZXR1cm4gYHNjaGVtYSAke3NjaGVtYVJlZn0gbm90IGZvdW5kYDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdG9yKG1zZyk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgIG1zZyxcbiAgICAgICAgICAgIHZhbGlkYXRvci5lcnJvcnMsXG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3JPcHRpb25zLFxuICAgICAgICApO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgobXNnIGFzIEFjdGl2aXR5U3RyZWFtKVtcIkBjb250ZXh0XCJdKSkge1xuICAgICAgICAgICAgY29uc3QgcGxhdGZvcm1Db250ZXh0VXJsID0gcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybChcbiAgICAgICAgICAgICAgICBtc2cgYXMgQWN0aXZpdHlTdHJlYW0sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHBsYXRmb3JtQ29udGV4dFVybCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYXRmb3JtSWQgPVxuICAgICAgICAgICAgICAgICAgICBnZXRQbGF0Zm9ybUlkQnlDb250ZXh0VXJsKHBsYXRmb3JtQ29udGV4dFVybCk7XG4gICAgICAgICAgICAgICAgaWYgKHBsYXRmb3JtSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYFske3BsYXRmb3JtSWR9XSAke2Vycm9yTWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFZhbGlkYXRpb25FcnJvck9wdGlvbnMoXG4gICAgb3B0aW9uczogVmFsaWRhdGlvbkVycm9yT3B0aW9ucyxcbik6IHZvaWQge1xuICAgIHZhbGlkYXRpb25FcnJvck9wdGlvbnMgPSB7IC4uLnZhbGlkYXRpb25FcnJvck9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbn1cblxubGV0IHNvY2tldGh1YkNvbmZpZ1ZhbGlkYXRvcjogUmV0dXJuVHlwZTxBanZbXCJjb21waWxlXCJdPiB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBWYWxpZGF0ZSBhIChmdWxseS1tYXRlcmlhbGl6ZWQpIFNvY2tldGh1YiBzZXJ2ZXIgY29uZmlnIG9iamVjdCBhZ2FpbnN0IHRoZVxuICogY2Fub25pY2FsIGNvbmZpZyBzY2hlbWEuIFJldHVybnMgXCJcIiB3aGVuIHZhbGlkLCBvdGhlcndpc2UgYSBodW1hbi1yZWFkYWJsZVxuICogZXJyb3Igc3RyaW5nLiBVc2VkIGJ5IHRoZSBzZXJ2ZXIgYXQgc3RhcnR1cCBzbyBhIG1pcy10eXBlZCBvciB1bmtub3duIGNvbmZpZ1xuICogdmFsdWUg4oCUIGluY2x1ZGluZyBpbnNpZGUgYSBwbGF0Zm9ybSdzIGBwYWNrYWdlQ29uZmlnYCBlbnRyeSDigJQgZmFpbHMgbG91ZGx5XG4gKiByYXRoZXIgdGhhbiByZWFjaGluZyBhIHBsYXRmb3JtIHdyb25nLXR5cGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTb2NrZXRodWJDb25maWcoY29uZmlnOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldEFqdigpO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmICghc29ja2V0aHViQ29uZmlnVmFsaWRhdG9yKSB7XG4gICAgICAgIHNvY2tldGh1YkNvbmZpZ1ZhbGlkYXRvciA9IGluc3RhbmNlLmNvbXBpbGUoU29ja2V0aHViQ29uZmlnU2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKHNvY2tldGh1YkNvbmZpZ1ZhbGlkYXRvcihjb25maWcpKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gaW5zdGFuY2UuZXJyb3JzVGV4dChzb2NrZXRodWJDb25maWdWYWxpZGF0b3IuZXJyb3JzLCB7XG4gICAgICAgIGRhdGFWYXI6IFwiY29uZmlnXCIsXG4gICAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW4gaW5ib3VuZCBhY3Rpdml0eSBzdHJlYW0gYWdhaW5zdCB0aGUgc2hhcmVkIGVudmVsb3BlIGFuZCBpdHNcbiAqIHJlZ2lzdGVyZWQgcGxhdGZvcm0gbWVzc2FnZSBzY2hlbWEuIFJldHVybnMgXCJcIiB3aGVuIHZhbGlkOyBza2lwcGVkIChhbHNvIFwiXCIpXG4gKiB3aGVuIGNvZGUgZ2VuZXJhdGlvbiBpcyB1bmF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQWN0aXZpdHlTdHJlYW0obXNnOiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB7XG4gICAgaWYgKCFpc0NvZGVnZW5BdmFpbGFibGUoKSkge1xuICAgICAgICB3YXJuQ29kZWdlblVuYXZhaWxhYmxlKCk7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBjb25zdCBzdHJlYW1WYWxpZGF0aW9uRXJyb3IgPSBoYW5kbGVWYWxpZGF0aW9uKFxuICAgICAgICBgJHtzY2hlbWFVUkx9L2FjdGl2aXR5LXN0cmVhbWAsXG4gICAgICAgIG1zZyxcbiAgICApO1xuICAgIGlmIChzdHJlYW1WYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbVZhbGlkYXRpb25FcnJvcjtcbiAgICB9XG4gICAgY29uc3QgcGxhdGZvcm1Db250ZXh0VXJsID0gcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybChtc2cpO1xuICAgIGlmICghcGxhdGZvcm1Db250ZXh0VXJsKSB7XG4gICAgICAgIHJldHVybiBcImFjdGl2aXR5IHN0cmVhbXMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlZ2lzdGVyZWQgcGxhdGZvcm0gY29udGV4dCBVUkwgaW4gQGNvbnRleHRcIjtcbiAgICB9XG4gICAgY29uc3Qgc2NoZW1hSWQgPSBnZXRTY2hlbWFJZEJ5Q29udGV4dFVybChwbGF0Zm9ybUNvbnRleHRVcmwpO1xuICAgIGlmICghc2NoZW1hSWQpIHtcbiAgICAgICAgcmV0dXJuIGBwbGF0Zm9ybSBjb250ZXh0IFVSTCAke3BsYXRmb3JtQ29udGV4dFVybH0gZG9lcyBub3QgaGF2ZSBhIHJlZ2lzdGVyZWQgbWVzc2FnZSBzY2hlbWFgO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlVmFsaWRhdGlvbihzY2hlbWFJZCwgbXNnKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbiBvdXRib3VuZCBwbGF0Zm9ybSByZXNwb25zZSBhZ2FpbnN0IHRoYXQgcGxhdGZvcm0ncyBgcmVzcG9uc2VzYFxuICogc2NoZW1hLiBSZXR1cm5zIFwiXCIgd2hlbiB0aGUgcGxhdGZvcm0gaGFzIG5vIHJlc3BvbnNlcyBzY2hlbWEgcmVnaXN0ZXJlZCAoeWV0KSxcbiAqIHNvIG91dGJvdW5kIHZhbGlkYXRpb24gY2FuIGJlIGFkb3B0ZWQgcGxhdGZvcm0tYnktcGxhdGZvcm0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUFjdGl2aXR5U3RyZWFtUmVzcG9uc2UobXNnOiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB7XG4gICAgaWYgKCFpc0NvZGVnZW5BdmFpbGFibGUoKSkge1xuICAgICAgICB3YXJuQ29kZWdlblVuYXZhaWxhYmxlKCk7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBjb25zdCBwbGF0Zm9ybUNvbnRleHRVcmwgPSByZXNvbHZlUGxhdGZvcm1Db250ZXh0VXJsKG1zZyk7XG4gICAgaWYgKCFwbGF0Zm9ybUNvbnRleHRVcmwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNvbnN0IHBsYXRmb3JtSWQgPSBnZXRQbGF0Zm9ybUlkQnlDb250ZXh0VXJsKHBsYXRmb3JtQ29udGV4dFVybCk7XG4gICAgaWYgKCFwbGF0Zm9ybUlkKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZXNTY2hlbWFJZCA9IGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtSWR9L3Jlc3BvbnNlc2A7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBnZXRBanYoKTtcbiAgICBpZiAoIWluc3RhbmNlIHx8ICFpbnN0YW5jZS5nZXRTY2hlbWEocmVzcG9uc2VzU2NoZW1hSWQpKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlVmFsaWRhdGlvbihyZXNwb25zZXNTY2hlbWFJZCwgbXNnKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGNyZWRlbnRpYWxzIGFjdGl2aXR5IHN0cmVhbSBhZ2FpbnN0IHRoZSBzaGFyZWQgZW52ZWxvcGUgYW5kIGl0c1xuICogcmVnaXN0ZXJlZCBwbGF0Zm9ybSBjcmVkZW50aWFscyBzY2hlbWEuIFJldHVybnMgXCJcIiB3aGVuIHZhbGlkOyBza2lwcGVkIChhbHNvXG4gKiBcIlwiKSB3aGVuIGNvZGUgZ2VuZXJhdGlvbiBpcyB1bmF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ3JlZGVudGlhbHMobXNnOiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB7XG4gICAgaWYgKCFpc0NvZGVnZW5BdmFpbGFibGUoKSkge1xuICAgICAgICB3YXJuQ29kZWdlblVuYXZhaWxhYmxlKCk7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobXNnW1wiQGNvbnRleHRcIl0pKSB7XG4gICAgICAgIHJldHVybiBcImNyZWRlbnRpYWwgYWN0aXZpdHkgc3RyZWFtcyBtdXN0IGhhdmUgYW4gQGNvbnRleHQgc2V0XCI7XG4gICAgfVxuICAgIGlmIChtc2cudHlwZSAhPT0gXCJjcmVkZW50aWFsc1wiKSB7XG4gICAgICAgIHJldHVybiBcImNyZWRlbnRpYWwgYWN0aXZpdHkgc3RyZWFtcyBtdXN0IGhhdmUgY3JlZGVudGlhbHMgc2V0IGFzIHR5cGVcIjtcbiAgICB9XG4gICAgY29uc3Qgc3RyZWFtVmFsaWRhdGlvbkVycm9yID0gaGFuZGxlVmFsaWRhdGlvbihcbiAgICAgICAgYCR7c2NoZW1hVVJMfS9hY3Rpdml0eS1zdHJlYW1gLFxuICAgICAgICBtc2csXG4gICAgKTtcbiAgICBpZiAoc3RyZWFtVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW1WYWxpZGF0aW9uRXJyb3I7XG4gICAgfVxuICAgIGNvbnN0IHBsYXRmb3JtQ29udGV4dFVybCA9IHJlc29sdmVQbGF0Zm9ybUNvbnRleHRVcmwobXNnKTtcbiAgICBpZiAoIXBsYXRmb3JtQ29udGV4dFVybCkge1xuICAgICAgICByZXR1cm4gXCJjcmVkZW50aWFsIGFjdGl2aXR5IHN0cmVhbXMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlZ2lzdGVyZWQgcGxhdGZvcm0gY29udGV4dCBVUkwgaW4gQGNvbnRleHRcIjtcbiAgICB9XG4gICAgY29uc3QgY3JlZGVudGlhbHNTY2hlbWFJZCA9XG4gICAgICAgIGdldENyZWRlbnRpYWxzU2NoZW1hSWRCeUNvbnRleHRVcmwocGxhdGZvcm1Db250ZXh0VXJsKTtcbiAgICBpZiAoIWNyZWRlbnRpYWxzU2NoZW1hSWQpIHtcbiAgICAgICAgcmV0dXJuIGBwbGF0Zm9ybSBjb250ZXh0IFVSTCAke3BsYXRmb3JtQ29udGV4dFVybH0gZG9lcyBub3QgaGF2ZSBhIHJlZ2lzdGVyZWQgY3JlZGVudGlhbHMgc2NoZW1hYDtcbiAgICB9XG4gICAgcmV0dXJuIGhhbmRsZVZhbGlkYXRpb24oY3JlZGVudGlhbHNTY2hlbWFJZCwgbXNnKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHBsYXRmb3JtIHNjaGVtYTogaXRzIHN0cnVjdHVyYWwgc2hhcGUgdmlhIEFqdiAod2hlbiBhdmFpbGFibGUpXG4gKiBhbmQgdGhhdCBpdHMgYWN0b3IvdGFyZ2V0IHR5cGVzIGFyZSByZWdpc3RlcmVkIGluIHRoZSBzaGFyZWQgQWN0aXZpdHlTdHJlYW1zXG4gKiBlbnZlbG9wZS4gUmV0dXJucyBcIlwiIHdoZW4gdmFsaWQsIG90aGVyd2lzZSBhbiBlcnJvciBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBsYXRmb3JtU2NoZW1hKHNjaGVtYTogU2NoZW1hKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldEFqdigpO1xuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IGluc3RhbmNlLmNvbXBpbGUoUGxhdGZvcm1TY2hlbWEpO1xuICAgICAgICAvLyB2YWxpZGF0ZSBzY2hlbWEgcHJvcGVydHlcbiAgICAgICAgY29uc3QgZXJyID0gdmFsaWRhdGUoc2NoZW1hKTtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRlLmVycm9ycz8uWzBdO1xuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBgJHt2YWxpZGF0aW9uRXJyb3I/Lmluc3RhbmNlUGF0aCA/PyBcIlwifSAke3ZhbGlkYXRpb25FcnJvcj8ubWVzc2FnZSA/PyBcImlzIGludmFsaWRcIn1gO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25FcnJvcj8ua2V5d29yZCA9PT0gXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSArPSBgOiAke3ZhbGlkYXRpb25FcnJvci5wYXJhbXMuYWRkaXRpb25hbFByb3BlcnR5fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYHBsYXRmb3JtIHNjaGVtYSBmYWlsZWQgdG8gdmFsaWRhdGU6ICR7bWVzc2FnZX1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBsYXRmb3JtID0gc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gcGxhdGZvcm0ubWVzc2FnZXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IG1lc3NhZ2VzPy5wcm9wZXJ0aWVzIGFzXG4gICAgICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGVjbGFyZWRUeXBlcyA9IChyb290OiB1bmtub3duKTogU2V0PHN0cmluZz4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc3QgdmlzaXQgPSAodmFsdWU6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS5jb25zdCA9PT0gXCJzdHJpbmdcIikgcmVzdWx0LmFkZChub2RlLmNvbnN0KTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUuZW51bSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygbm9kZS5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikgcmVzdWx0LmFkZChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBub2RlUHJvcGVydGllcyA9IG5vZGUucHJvcGVydGllcyBhc1xuICAgICAgICAgICAgICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHZpc2l0KG5vZGVQcm9wZXJ0aWVzPy50eXBlKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5d29yZCBvZiBbXCJhbGxPZlwiLCBcImFueU9mXCIsIFwib25lT2ZcIl0gYXMgY29uc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBicmFuY2hlcyA9IG5vZGVba2V5d29yZF07XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnJhbmNoZXMpKSBicmFuY2hlcy5mb3JFYWNoKHZpc2l0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmlzaXQocm9vdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgYWxsb3dlZF0gb2YgW1xuICAgICAgICBbXCJhY3RvclwiLCBBY3RvclR5cGVzTGlzdF0sXG4gICAgICAgIFtcInRhcmdldFwiLCBUYXJnZXRUeXBlc0xpc3RdLFxuICAgIF0gYXMgY29uc3QpIHtcbiAgICAgICAgY29uc3QgdW5zdXBwb3J0ZWQgPSBbLi4uZGVjbGFyZWRUeXBlcyhwcm9wZXJ0aWVzPy5bcHJvcGVydHldKV0uZmlsdGVyKFxuICAgICAgICAgICAgKHR5cGUpID0+ICFhbGxvd2VkLmluY2x1ZGVzKHR5cGUpLFxuICAgICAgICApO1xuICAgICAgICBpZiAodW5zdXBwb3J0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGBwbGF0Zm9ybSBzY2hlbWEgJHtwcm9wZXJ0eX0gdHlwZXMgYXJlIG5vdCByZWdpc3RlcmVkIGluIHRoZSBzaGFyZWQgQWN0aXZpdHlTdHJlYW1zIGVudmVsb3BlOiAke3Vuc3VwcG9ydGVkLmpvaW4oXCIsIFwiKX1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgcGxhdGZvcm0ncyBtZXNzYWdlIG9yIGNyZWRlbnRpYWxzIHNjaGVtYSB3aXRoIHRoZSB2YWxpZGF0b3JzLCBzb1xuICogbG9jYWwgdmFsaWRhdGlvbiB1c2VzIHRoZSBzYW1lIGNhbm9uaWNhbCBzb3VyY2VzIGFzIHRoZSBzZXJ2ZXIuIE5vLW9wIHdoZW5cbiAqIGNvZGUgZ2VuZXJhdGlvbiBpcyB1bmF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFBsYXRmb3JtU2NoZW1hKHNjaGVtYTogU2NoZW1hLCBwbGF0Zm9ybV90eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldEFqdigpO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzY2hlbWFSZWYgPSBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybV90eXBlfWA7XG4gICAgaWYgKCFpbnN0YW5jZS5nZXRTY2hlbWEoc2NoZW1hUmVmKSkge1xuICAgICAgICBpbnN0YW5jZS5hZGRTY2hlbWEoc2NoZW1hLCBzY2hlbWFSZWYpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBMb29rIHVwIGEgcmVnaXN0ZXJlZCBwbGF0Zm9ybSBzY2hlbWEgdmFsaWRhdG9yLCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vIHN1Y2hcbiAqIHNjaGVtYSBpcyByZWdpc3RlcmVkIG9yIGNvZGUgZ2VuZXJhdGlvbiBpcyB1bmF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBsYXRmb3JtU2NoZW1hKHBsYXRmb3JtX3R5cGU6IHN0cmluZykge1xuICAgIHJldHVybiBnZXRBanYoKT8uZ2V0U2NoZW1hKGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtX3R5cGV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRQbGF0Zm9ybUNvbnRleHQoXG4gICAgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgIHBsYXRmb3JtQ29udGV4dFVybDogc3RyaW5nLFxuKSB7XG4gICAgcmVnaXN0ZXJQbGF0Zm9ybUNvbnRleHQoXG4gICAgICAgIHBsYXRmb3JtSWQsXG4gICAgICAgIHBsYXRmb3JtQ29udGV4dFVybCxcbiAgICAgICAgYCR7c2NoZW1hVVJMfS9jb250ZXh0LyR7cGxhdGZvcm1JZH0vbWVzc2FnZXNgLFxuICAgICAgICBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybUlkfS9jcmVkZW50aWFsc2AsXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQbGF0Zm9ybUlkKG1zZzogQWN0aXZpdHlTdHJlYW0pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBwbGF0Zm9ybUNvbnRleHRVcmwgPSByZXNvbHZlUGxhdGZvcm1Db250ZXh0VXJsKG1zZyk7XG4gICAgaWYgKCFwbGF0Zm9ybUNvbnRleHRVcmwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBnZXRQbGF0Zm9ybUlkQnlDb250ZXh0VXJsKHBsYXRmb3JtQ29udGV4dFVybCkgPz8gbnVsbDtcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBFcnJvck9iamVjdCB9IGZyb20gXCJhanZcIjtcbmltcG9ydCB0eXBlIHsgQWN0aXZpdHlPYmplY3QsIEFjdGl2aXR5U3RyZWFtIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBY3RvclR5cGVzTGlzdCwgT2JqZWN0VHlwZXNMaXN0LCBUYXJnZXRUeXBlc0xpc3QgfSBmcm9tIFwiLi9vYmplY3RzLmpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkVycm9yT3B0aW9ucyB7XG4gICAgZXhjbHVkZVR5cGVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFR5cGVCcmVha2Rvd24ge1xuICAgIGFjdG9yOiBBcnJheTxzdHJpbmc+O1xuICAgIG9iamVjdDogQXJyYXk8c3RyaW5nPjtcbiAgICB0YXJnZXQ6IEFycmF5PHN0cmluZz47XG59XG5cbmZ1bmN0aW9uIHBhcnNlTXNnKGVycm9yOiBFcnJvck9iamVjdCk6IHN0cmluZyB7XG4gICAgbGV0IGVyciA9IGAke1xuICAgICAgICBlcnJvci5pbnN0YW5jZVBhdGggPyBlcnJvci5pbnN0YW5jZVBhdGggOiBcImFjdGl2aXR5IHN0cmVhbVwiXG4gICAgfTogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgaWYgKGVycm9yLmtleXdvcmQgPT09IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIikge1xuICAgICAgICBlcnIgKz0gYDogJHtlcnJvci5wYXJhbXMuYWRkaXRpb25hbFByb3BlcnR5fWA7XG4gICAgfSBlbHNlIGlmIChlcnJvci5rZXl3b3JkID09PSBcImVudW1cIikge1xuICAgICAgICBlcnIgKz0gYDogJHtlcnJvci5wYXJhbXMuYWxsb3dlZFZhbHVlcy5qb2luKFwiLCBcIil9YDtcbiAgICB9XG4gICAgcmV0dXJuIGVycjtcbn1cblxuLy8gUmVjdXJzaW9uIGd1YXJkOiBjYWxsZXJzIG1heSBwYXNzIHVudmFsaWRhdGVkLCBhcmJpdHJhcmlseSBkZWVwIGlucHV0LlxuY29uc3QgTUFYX1RZUEVfTElTVF9ERVBUSCA9IDY0O1xuXG4vKiogQ29sbGVjdCBuZXN0ZWQgdHlwZSBsYWJlbHMsIHN0b3BwaW5nIGJlZm9yZSB1bnRydXN0ZWQgaW5wdXQgY2FuIGV4aGF1c3QgdGhlIHN0YWNrLiAqL1xuZnVuY3Rpb24gZ2V0VHlwZUxpc3QoXG4gICAgbXNnOiBBY3Rpdml0eVN0cmVhbSB8IEFjdGl2aXR5T2JqZWN0LFxuICAgIGRlcHRoID0gMCxcbik6IEFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IHR5cGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgaWYgKGRlcHRoID4gTUFYX1RZUEVfTElTVF9ERVBUSCkge1xuICAgICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuICAgIGlmIChtc2c/LnR5cGUpIHtcbiAgICAgICAgdHlwZXMucHVzaChtc2cudHlwZSk7XG4gICAgfVxuICAgIGNvbnN0IHJlY29yZCA9IG1zZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gcmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVjb3JkW3Byb3BdO1xuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIFwidHlwZVwiIGluIHZhbHVlKSB7XG4gICAgICAgICAgICB0eXBlcy5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLmdldFR5cGVMaXN0KFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSBhcyBBY3Rpdml0eVN0cmVhbSB8IEFjdGl2aXR5T2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBkZXB0aCArIDEsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVzO1xufVxuXG5mdW5jdGlvbiBnZXRTY2hlbWFUeXBlKGVycm9yOiBFcnJvck9iamVjdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2NoZW1hVHlwZVJlcyA9IGVycm9yLnNjaGVtYVBhdGgubWF0Y2goLyNcXC9cXHcrXFwvXFx3K1xcLyhbXFx3LV0rKVxcLy8pO1xuICAgIHJldHVybiBzY2hlbWFUeXBlUmVzID8gc2NoZW1hVHlwZVJlc1sxXSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0RXJyVHlwZShlcnJvcjogRXJyb3JPYmplY3QpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVyclR5cGVSZXMgPSBlcnJvci5pbnN0YW5jZVBhdGgubWF0Y2goL1xcLyhcXHcrKS8pO1xuICAgIHJldHVybiBlcnJUeXBlUmVzID8gZXJyVHlwZVJlc1sxXSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0UGFydHNDb3VudChlcnJvcjogRXJyb3JPYmplY3QsIHR5cGVzOiBUeXBlQnJlYWtkb3duKTogbnVtYmVyIHtcbiAgICBjb25zdCBzY2hlbWFUeXBlID0gZ2V0U2NoZW1hVHlwZShlcnJvcik7XG4gICAgY29uc3QgZXJyVHlwZSA9IGdldEVyclR5cGUoZXJyb3IpO1xuICAgIGlmICghZXJyVHlwZSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGNvbnN0IHR5cGVMaXN0ID0gKHR5cGVzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgQXJyYXk8c3RyaW5nPj4pW1xuICAgICAgICBlcnJUeXBlXG4gICAgXTtcbiAgICBpZiAoIXR5cGVMaXN0KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKCFzY2hlbWFUeXBlIHx8ICF0eXBlTGlzdC5pbmNsdWRlcyhzY2hlbWFUeXBlKSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGNvbnN0IHBhcnRzID0gZXJyb3IuaW5zdGFuY2VQYXRoLnNwbGl0KFwiL1wiKTtcbiAgICByZXR1cm4gcGFydHMubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBnZXRUeXBlcyhtc2c6IEFjdGl2aXR5U3RyZWFtIHwgQWN0aXZpdHlPYmplY3QpOiBUeXBlQnJlYWtkb3duIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoKG1zZyBhcyBBY3Rpdml0eVN0cmVhbSlbXCJAY29udGV4dFwiXSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjdG9yOiBbXSxcbiAgICAgICAgICAgIHRhcmdldDogW10sXG4gICAgICAgICAgICBvYmplY3Q6IGdldFR5cGVMaXN0KG1zZyksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyZWFtID0gbXNnIGFzIEFjdGl2aXR5U3RyZWFtO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFjdG9yOiBnZXRUeXBlTGlzdChzdHJlYW0uYWN0b3IpLFxuICAgICAgICB0YXJnZXQ6IGdldFR5cGVMaXN0KHN0cmVhbS50YXJnZXQpLFxuICAgICAgICBvYmplY3Q6IHN0cmVhbS5vYmplY3QgPyBnZXRUeXBlTGlzdChzdHJlYW0ub2JqZWN0KSA6IFtdLFxuICAgIH07XG59XG5cbi8qKlxuICogVHJhdmVyc2VzIHRoZSBlcnJvcnMgYXJyYXkgZnJvbSBhanYsIGFuZCBtYWtlcyBhIHNlcmllcyBvZiBmaWx0ZXJpbmcgZGVjaXNpb25zIHRvXG4gKiB0cnkgdG8gYXJyaXZlIGF0IHRoZSBtb3N0IHVzZWZ1bCBlcnJvci5cbiAqIEBwYXJhbSBtc2dcbiAqIEBwYXJhbSBlcnJvcnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEVycm9yTWVzc2FnZShcbiAgICBtc2c6IEFjdGl2aXR5U3RyZWFtIHwgQWN0aXZpdHlPYmplY3QsXG4gICAgZXJyb3JzOiBBcnJheTxFcnJvck9iamVjdD4sXG4gICAgb3B0aW9ucz86IFZhbGlkYXRpb25FcnJvck9wdGlvbnMsXG4pOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVzID0gZ2V0VHlwZXMobXNnKTtcbiAgICBsZXQgZGVlcGVzdF9lbnRyeSA9IDA7XG4gICAgbGV0IGhpZ2hlc3RfZGVwdGggPSAtMTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzQ291bnQgPSBnZXRQYXJ0c0NvdW50KGVycm9yc1tpXSwgdHlwZXMpO1xuICAgICAgICBpZiAocGFydHNDb3VudCA+IGhpZ2hlc3RfZGVwdGgpIHtcbiAgICAgICAgICAgIGhpZ2hlc3RfZGVwdGggPSBwYXJ0c0NvdW50O1xuICAgICAgICAgICAgZGVlcGVzdF9lbnRyeSA9IGk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGlnaGVzdF9kZXB0aCA+PSAwXG4gICAgICAgID8gcGFyc2VNc2coZXJyb3JzW2RlZXBlc3RfZW50cnldKVxuICAgICAgICA6IGNvbXBvc2VGaW5hbEVycm9yKGVycm9yc1tlcnJvcnMubGVuZ3RoIC0gMV0sIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJUeXBlTGlzdChcbiAgICB0eXBlczogQXJyYXk8c3RyaW5nPixcbiAgICBvcHRpb25zPzogVmFsaWRhdGlvbkVycm9yT3B0aW9ucyxcbik6IEFycmF5PHN0cmluZz4ge1xuICAgIGlmICghb3B0aW9ucz8uZXhjbHVkZVR5cGVzIHx8IG9wdGlvbnMuZXhjbHVkZVR5cGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuICAgIGNvbnN0IGV4Y2x1ZGUgPSBuZXcgU2V0KG9wdGlvbnMuZXhjbHVkZVR5cGVzKTtcbiAgICByZXR1cm4gdHlwZXMuZmlsdGVyKCh0eXBlKSA9PiAhZXhjbHVkZS5oYXModHlwZSkpO1xufVxuXG5mdW5jdGlvbiBjb21wb3NlRmluYWxFcnJvcihcbiAgICBlcnJvcjogRXJyb3JPYmplY3QsXG4gICAgb3B0aW9ucz86IFZhbGlkYXRpb25FcnJvck9wdGlvbnMsXG4pOiBzdHJpbmcge1xuICAgIC8vIGlmIHdlIGhhdmUgeWV0IHRvIGJ1aWxkIGFuIGVycm9yIG1lc3NhZ2UsIGFzc3VtZSB0aGlzIGlzIGFuIGludmFsaWQgdHlwZSB2YWx1ZSAob25lT2YpLFxuICAgIC8vIHRyeSB0byBidWlsZCBhIGxpc3Qgb2YgdmFsaWQgdHlwZXNcbiAgICBsZXQgbXNnOiBzdHJpbmc7XG4gICAgaWYgKGVycm9yLmtleXdvcmQgPT09IFwib25lT2ZcIikge1xuICAgICAgICBjb25zdCBpbnN0YW5jZVJvb3QgPSBlcnJvci5pbnN0YW5jZVBhdGguc3BsaXQoXCIvXCIpWzFdO1xuICAgICAgICBjb25zdCBwYXRoU2NvcGVkVHlwZXMgPVxuICAgICAgICAgICAgaW5zdGFuY2VSb290ID09PSBcImFjdG9yXCJcbiAgICAgICAgICAgICAgICA/IEFjdG9yVHlwZXNMaXN0XG4gICAgICAgICAgICAgICAgOiBpbnN0YW5jZVJvb3QgPT09IFwidGFyZ2V0XCJcbiAgICAgICAgICAgICAgICAgID8gVGFyZ2V0VHlwZXNMaXN0XG4gICAgICAgICAgICAgICAgICA6IE9iamVjdFR5cGVzTGlzdDtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRUeXBlcyA9IGZpbHRlclR5cGVMaXN0KHBhdGhTY29wZWRUeXBlcywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHR5cGVzTGlzdCA9XG4gICAgICAgICAgICBmaWx0ZXJlZFR5cGVzLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZFR5cGVzIDogcGF0aFNjb3BlZFR5cGVzO1xuICAgICAgICBtc2cgPVxuICAgICAgICAgICAgYCR7ZXJyb3IuaW5zdGFuY2VQYXRofTogJHtlcnJvci5tZXNzYWdlfTogYCArXG4gICAgICAgICAgICBgJHt0eXBlc0xpc3Quam9pbihcIiwgXCIpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbXNnID0gYCR7XG4gICAgICAgICAgICBlcnJvci5pbnN0YW5jZVBhdGggPyBlcnJvci5pbnN0YW5jZVBhdGggOiBcImFjdGl2aXR5IHN0cmVhbVwiXG4gICAgICAgIH06ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgIH1cbiAgICBpZiAoXCJhZGRpdGlvbmFsUHJvcGVydHlcIiBpbiBlcnJvci5wYXJhbXMpIHtcbiAgICAgICAgbXNnICs9IGA6ICR7ZXJyb3IucGFyYW1zLmFkZGl0aW9uYWxQcm9wZXJ0eX1gO1xuICAgIH1cbiAgICByZXR1cm4gbXNnO1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEFjdGl2aXR5U3RyZWFtIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuY29uc3Qgc3RyaW5nUmVmS2V5cyA9IHtcbiAgICBhY3RvcjogXCJpZFwiLFxuICAgIHRhcmdldDogXCJpZFwiLFxuICAgIG9iamVjdDogXCJjb250ZW50XCIsXG59IGFzIGNvbnN0O1xuXG50eXBlIFN0cmVhbVBhcnRLZXkgPSBrZXlvZiB0eXBlb2Ygc3RyaW5nUmVmS2V5cztcblxuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nUmVmKHZhbHVlOiB1bmtub3duLCBwcmltYXJ5S2V5OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiB7IFtwcmltYXJ5S2V5XTogdmFsdWUgfTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IGVudHJ5IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHN0cmluZyBhY3Rvci90YXJnZXQvb2JqZWN0IHJlZnMgaW50byBtaW5pbWFsIEFjdGl2aXR5T2JqZWN0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUFjdGl2aXR5U3RyZWFtKG1ldGE6IEFjdGl2aXR5U3RyZWFtKTogQWN0aXZpdHlTdHJlYW0ge1xuICAgIGNvbnN0IHN0cmVhbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgIC4uLihtZXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc3RyaW5nUmVmS2V5cykgYXMgU3RyZWFtUGFydEtleVtdKSB7XG4gICAgICAgIGlmIChrZXkgaW4gc3RyZWFtKSB7XG4gICAgICAgICAgICBzdHJlYW1ba2V5XSA9IG5vcm1hbGl6ZVN0cmluZ1JlZihzdHJlYW1ba2V5XSwgc3RyaW5nUmVmS2V5c1trZXldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyZWFtIGFzIEFjdGl2aXR5U3RyZWFtO1xufVxuIiwKICAgICJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJy4vaW5kZXguanMnXG5cbmV4cG9ydCB7IEV2ZW50RW1pdHRlciB9XG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXJcbiIsCiAgICAiaW1wb3J0IHsgYWRkUGxhdGZvcm1Db250ZXh0LCBhZGRQbGF0Zm9ybVNjaGVtYSB9IGZyb20gXCJAc29ja2V0aHViL3NjaGVtYXNcIjtcblxuLy8gbWFqb3JbLm1pbm9yWy5wYXRjaF1dIHdpdGggb3B0aW9uYWwgcHJlcmVsZWFzZSBhbmQgYnVpbGQgbWV0YWRhdGEuXG5jb25zdCBMRUdBQ1lfVkVSU0lPTl9QQVRURVJOID1cbiAgICAvXnY/KFxcZCspKD86XFwuXFxkKyl7MCwyfSg/Oi1bMC05QS1aYS16LV0rKD86XFwuWzAtOUEtWmEtei1dKykqKT8oPzpcXCtbMC05QS1aYS16LV0rKD86XFwuWzAtOUEtWmEtei1dKykqKT8kLztcblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG9iamVjdCB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuLyoqIEFuIEFQSSB2ZXJzaW9uIGlzIGEgU2VtVmVyIG1ham9yOiBhIG5vbi1uZWdhdGl2ZSBzYWZlIGludGVnZXIuICovXG5mdW5jdGlvbiBpc0FwaVZlcnNpb24odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudW1iZXIge1xuICAgIHJldHVybiAoXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPj0gMFxuICAgICk7XG59XG5cbi8qKlxuICogUmVhZCBhbiBBUEkgdmVyc2lvbiBvZmYgYSByZWdpc3RyeSBwYXlsb2FkIG9yIHBsYXRmb3JtIGVudHJ5LiBTZXJ2ZXJzIHRoYXRcbiAqIHByZWRhdGUgQVBJIHZlcnNpb25zIHB1Ymxpc2hlZCBhbiBleGFjdCBwYWNrYWdlIGB2ZXJzaW9uYCBpbnN0ZWFkOyBpdHNcbiAqIFNlbVZlciBtYWpvciBpcyB0aGUgc2FtZSBudW1iZXIsIHNvIGRlcml2ZSBpdCByYXRoZXIgdGhhbiByZXBvcnQgbm90aGluZy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFwaVZlcnNpb24oc291cmNlOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXNvdXJjZSB8fCB0eXBlb2Ygc291cmNlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHsgYXBpVmVyc2lvbiwgdmVyc2lvbiB9ID0gc291cmNlIGFzIHtcbiAgICAgICAgYXBpVmVyc2lvbj86IHVua25vd247XG4gICAgICAgIHZlcnNpb24/OiB1bmtub3duO1xuICAgIH07XG4gICAgaWYgKGlzQXBpVmVyc2lvbihhcGlWZXJzaW9uKSkge1xuICAgICAgICByZXR1cm4gYXBpVmVyc2lvbjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gTEVHQUNZX1ZFUlNJT05fUEFUVEVSTi5leGVjKHZlcnNpb24udHJpbSgpKTtcbiAgICAgICAgY29uc3QgbWFqb3IgPSBtYXRjaCA/IE51bWJlcihtYXRjaFsxXSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChpc0FwaVZlcnNpb24obWFqb3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFqb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuaW50ZXJmYWNlIFBsYXRmb3JtUmVnaXN0cnlTY2hlbWFzIHtcbiAgICBjcmVkZW50aWFscz86IG9iamVjdDtcbiAgICBtZXNzYWdlcz86IG9iamVjdDtcbn1cblxuLyoqXG4gKiBTZXJ2ZXItZGVjbGFyZWQgcGxhdGZvcm0gbWV0YWRhdGEgdXNlZCBieSB0aGUgY2xpZW50IGZvciBjb250ZXh0IGdlbmVyYXRpb25cbiAqIGFuZCBydW50aW1lIHZhbGlkYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1SZWdpc3RyeUVudHJ5IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIC8vIFBsYXRmb3JtIEFQSSB2ZXJzaW9uICh0aGUgcGxhdGZvcm0gcGFja2FnZSdzIFNlbVZlciBtYWpvcikuXG4gICAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICAgIGNvbnRleHRVcmw6IHN0cmluZztcbiAgICBjb250ZXh0VmVyc2lvbjogc3RyaW5nO1xuICAgIHNjaGVtYVZlcnNpb246IHN0cmluZztcbiAgICB0eXBlczogQXJyYXk8c3RyaW5nPjtcbiAgICBzY2hlbWFzOiBQbGF0Zm9ybVJlZ2lzdHJ5U2NoZW1hcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZCB7XG4gICAgLy8gR2xvYmFsIFNvY2tldGh1YiBBUEkgdmVyc2lvbiAodGhlIHNlcnZlciBwYWNrYWdlJ3MgU2VtVmVyIG1ham9yKS5cbiAgICBhcGlWZXJzaW9uPzogbnVtYmVyO1xuICAgIC8vIFNlcnZlci1jb21wdXRlZCBjb250ZW50IGZpbmdlcnByaW50IG9mIHRoZSByZWdpc3RyeS4gVGhlIGNsaWVudCBlY2hvZXNcbiAgICAvLyB0aGlzIG9uIHJlLXJlcXVlc3Qgc28gdGhlIHNlcnZlciBjYW4gcmVwbHkgXCJ1bmNoYW5nZWRcIiBpbnN0ZWFkIG9mXG4gICAgLy8gcmUtc2VuZGluZyB0aGUgZnVsbCBzY2hlbWEgc2V0ICgjMTExNykuXG4gICAgZmluZ2VycHJpbnQ/OiBzdHJpbmc7XG4gICAgLy8gU2V0IGJ5IHRoZSBzZXJ2ZXIgd2hlbiB0aGUgZWNob2VkIGZpbmdlcnByaW50IG1hdGNoZXM6IHRoZSByZWdpc3RyeSBpc1xuICAgIC8vIGlkZW50aWNhbCB0byB3aGF0IHRoZSBjbGllbnQgYWxyZWFkeSBob2xkcywgc28gbm8gcGxhdGZvcm1zIGFyZSBpbmNsdWRlZC5cbiAgICB1bmNoYW5nZWQ/OiBib29sZWFuO1xuICAgIGNvbnRleHRzPzoge1xuICAgICAgICBhcz86IHN0cmluZztcbiAgICAgICAgc29ja2V0aHViPzogc3RyaW5nO1xuICAgIH07XG4gICAgcGxhdGZvcm1zPzogQXJyYXk8UGxhdGZvcm1SZWdpc3RyeUVudHJ5Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQbGF0Zm9ybVJlZ2lzdHJ5IHtcbiAgICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gICAgYXNDb250ZXh0VXJsOiBzdHJpbmc7XG4gICAgc29ja2V0aHViQ29udGV4dFVybDogc3RyaW5nO1xuICAgIHBsYXRmb3JtczogTWFwPHN0cmluZywgUGxhdGZvcm1SZWdpc3RyeUVudHJ5Pjtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHNlcnZlciBgc2NoZW1hc2AgcGF5bG9hZCBhbmQgcmVidWlsZCBpdCBmaWVsZCBieSBmaWVsZCwgc29cbiAqIG5vdGhpbmcgdGhlIHNlcnZlciBzZW5kcyBiZXlvbmQgdGhlIGJvb3RzdHJhcCBjb250cmFjdCAoc3VjaCBhcyBhbiBleGFjdFxuICogcGFja2FnZSB2ZXJzaW9uKSBpcyByZXRhaW5lZCBvciByZS1lbWl0dGVkLiBSZXR1cm5zIHVuZGVmaW5lZCBmb3IgYVxuICogbWFsZm9ybWVkIHBheWxvYWQ7IG1hbGZvcm1lZCBwbGF0Zm9ybSBlbnRyaWVzIGFyZSBza2lwcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQbGF0Zm9ybVJlZ2lzdHJ5KFxuICAgIHBheWxvYWQ6IHVua25vd24sXG4pOiBQYXJzZWRQbGF0Zm9ybVJlZ2lzdHJ5IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXBheWxvYWQgfHwgdHlwZW9mIHBheWxvYWQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcmVnaXN0cnkgPSBwYXlsb2FkIGFzIFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkO1xuICAgIGNvbnN0IGFzQ29udGV4dFVybCA9IHJlZ2lzdHJ5LmNvbnRleHRzPy5hcztcbiAgICBjb25zdCBzb2NrZXRodWJDb250ZXh0VXJsID0gcmVnaXN0cnkuY29udGV4dHM/LnNvY2tldGh1YjtcbiAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBhc0NvbnRleHRVcmwgIT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgdHlwZW9mIHNvY2tldGh1YkNvbnRleHRVcmwgIT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgIUFycmF5LmlzQXJyYXkocmVnaXN0cnkucGxhdGZvcm1zKVxuICAgICkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBFdmVyeSBzZXJ2ZXIgcmVwb3J0cyBhbiBBUEkgdmVyc2lvbiAobGVnYWN5IG9uZXMgdmlhIGB2ZXJzaW9uYCksIHNvXG4gICAgLy8gYSBwYXlsb2FkIHdpdGhvdXQgb25lIGlzIG1hbGZvcm1lZCByYXRoZXIgdGhhbiBtZXJlbHkgb2xkZXIuXG4gICAgY29uc3QgYXBpVmVyc2lvbiA9IHJlc29sdmVBcGlWZXJzaW9uKHJlZ2lzdHJ5KTtcbiAgICBpZiAoYXBpVmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHBsYXRmb3JtcyA9IG5ldyBNYXA8c3RyaW5nLCBQbGF0Zm9ybVJlZ2lzdHJ5RW50cnk+KCk7XG4gICAgZm9yIChjb25zdCBwbGF0Zm9ybSBvZiByZWdpc3RyeS5wbGF0Zm9ybXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXBsYXRmb3JtIHx8XG4gICAgICAgICAgICB0eXBlb2YgcGxhdGZvcm0gIT09IFwib2JqZWN0XCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBwbGF0Zm9ybS5pZCAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIHBsYXRmb3JtLmNvbnRleHRVcmwgIT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBwbGF0Zm9ybS5jb250ZXh0VmVyc2lvbiAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIHBsYXRmb3JtLnNjaGVtYVZlcnNpb24gIT09IFwic3RyaW5nXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwbGF0Zm9ybUFwaVZlcnNpb24gPSByZXNvbHZlQXBpVmVyc2lvbihwbGF0Zm9ybSk7XG4gICAgICAgIGlmIChwbGF0Zm9ybUFwaVZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NoZW1hcyA9IGlzUGxhaW5PYmplY3QocGxhdGZvcm0uc2NoZW1hcykgPyBwbGF0Zm9ybS5zY2hlbWFzIDoge307XG4gICAgICAgIHBsYXRmb3Jtcy5zZXQocGxhdGZvcm0uaWQsIHtcbiAgICAgICAgICAgIGlkOiBwbGF0Zm9ybS5pZCxcbiAgICAgICAgICAgIGFwaVZlcnNpb246IHBsYXRmb3JtQXBpVmVyc2lvbixcbiAgICAgICAgICAgIGNvbnRleHRVcmw6IHBsYXRmb3JtLmNvbnRleHRVcmwsXG4gICAgICAgICAgICBjb250ZXh0VmVyc2lvbjogcGxhdGZvcm0uY29udGV4dFZlcnNpb24sXG4gICAgICAgICAgICBzY2hlbWFWZXJzaW9uOiBwbGF0Zm9ybS5zY2hlbWFWZXJzaW9uLFxuICAgICAgICAgICAgdHlwZXM6IEFycmF5LmlzQXJyYXkocGxhdGZvcm0udHlwZXMpXG4gICAgICAgICAgICAgICAgPyBwbGF0Zm9ybS50eXBlcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgKHR5cGUpOiB0eXBlIGlzIHN0cmluZyA9PiB0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgc2NoZW1hczoge1xuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBpc1BsYWluT2JqZWN0KHNjaGVtYXMuY3JlZGVudGlhbHMpXG4gICAgICAgICAgICAgICAgICAgID8gc2NoZW1hcy5jcmVkZW50aWFsc1xuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlczogaXNQbGFpbk9iamVjdChzY2hlbWFzLm1lc3NhZ2VzKVxuICAgICAgICAgICAgICAgICAgICA/IHNjaGVtYXMubWVzc2FnZXNcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYXBpVmVyc2lvbiwgYXNDb250ZXh0VXJsLCBzb2NrZXRodWJDb250ZXh0VXJsLCBwbGF0Zm9ybXMgfTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIHBsYXRmb3JtJ3MgY29udGV4dCBhbmQgc2NoZW1hcyB3aXRoIHRoZSBAc29ja2V0aHViL3NjaGVtYXNcbiAqIHZhbGlkYXRvcnMgc28gbG9jYWwgdmFsaWRhdGlvbiB1c2VzIHRoZSBzYW1lIGNhbm9uaWNhbCBzb3VyY2VzIGFzIHRoZVxuICogc2VydmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJQbGF0Zm9ybVNjaGVtYXMocGxhdGZvcm06IFBsYXRmb3JtUmVnaXN0cnlFbnRyeSk6IHZvaWQge1xuICAgIGFkZFBsYXRmb3JtQ29udGV4dChwbGF0Zm9ybS5pZCwgcGxhdGZvcm0uY29udGV4dFVybCk7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHBsYXRmb3JtLnNjaGVtYXMuY3JlZGVudGlhbHMpIHtcbiAgICAgICAgICAgIGFkZFBsYXRmb3JtU2NoZW1hKFxuICAgICAgICAgICAgICAgIHBsYXRmb3JtLnNjaGVtYXMuY3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgYCR7cGxhdGZvcm0uaWR9L2NyZWRlbnRpYWxzYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYXRmb3JtLnNjaGVtYXMubWVzc2FnZXMpIHtcbiAgICAgICAgICAgIGFkZFBsYXRmb3JtU2NoZW1hKFxuICAgICAgICAgICAgICAgIHBsYXRmb3JtLnNjaGVtYXMubWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgYCR7cGxhdGZvcm0uaWR9L21lc3NhZ2VzYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFtTb2NrZXRodWJDbGllbnRdIEZhaWxlZCB0byByZWdpc3RlciBzY2hlbWFzIGZvciBwbGF0Zm9ybSAke3BsYXRmb3JtLmlkfTogJHttZXNzYWdlfWAsXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFNlcnZpY2VEZXNjcmlwdG9yIH0gZnJvbSBcIkBzb2NrZXRodWIvc2NoZW1hc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTZXJ2aWNlRGVzY3JpcHRvciB9IGZyb20gXCJAc29ja2V0aHViL3NjaGVtYXNcIjtcbmltcG9ydCB0eXBlIHsgTWFuYWdlck9wdGlvbnMsIFNvY2tldCwgU29ja2V0T3B0aW9ucyB9IGZyb20gXCJzb2NrZXQuaW8tY2xpZW50XCI7XG5cbi8qKiBUaGUgYGlvKClgIGZhY3RvcnkgZXhwb3J0ZWQgYnkgYHNvY2tldC5pby1jbGllbnRgLiAqL1xuZXhwb3J0IHR5cGUgU29ja2V0RmFjdG9yeSA9IChcbiAgICB1cmk6IHN0cmluZyxcbiAgICBvcHRzPzogUGFydGlhbDxNYW5hZ2VyT3B0aW9ucyAmIFNvY2tldE9wdGlvbnM+LFxuKSA9PiBTb2NrZXQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY292ZXJPcHRpb25zIHtcbiAgICAvKiogUmVwbGFjZW1lbnQgZm9yIHRoZSBnbG9iYWwgYGZldGNoYCwgbWFpbmx5IGZvciB0ZXN0cy4gKi9cbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICAvKiogQWJvcnQgZGlzY292ZXJ5IGFmdGVyIHRoaXMgbWFueSBtaWxsaXNlY29uZHMuIERlZmF1bHQgMTAwMDAuICovXG4gICAgZGlzY292ZXJ5VGltZW91dE1zPzogbnVtYmVyO1xufVxuXG4vKiogVGhyb3duIHdoZW4gYSBzZXJ2ZXIncyBkZXNjcmlwdG9yIGNhbm5vdCBiZSBmZXRjaGVkIG9yIGlzIG5vdCB1c2FibGUuICovXG5leHBvcnQgY2xhc3MgRGlzY292ZXJ5RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBvcHRpb25zPzogeyBjYXVzZT86IHVua25vd24gfSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJEaXNjb3ZlcnlFcnJvclwiO1xuICAgIH1cbn1cblxuLyoqXG4gKiBGZXRjaCBhbmQgdmFsaWRhdGUgYSBTb2NrZXRodWIgc2VydmVyJ3Mgc2VydmljZSBkZXNjcmlwdG9yIGZyb20gaXRzIGJhc2VcbiAqIFVSTC4gRXZlcnkgZmFpbHVyZSByZWplY3RzIHdpdGggYSBgRGlzY292ZXJ5RXJyb3JgIHRoYXQgc2F5cyB3aGF0IHdlbnRcbiAqIHdyb25nICh1bnJlYWNoYWJsZSwgbm9uLUpTT04sIGludmFsaWQgZGVzY3JpcHRvcikuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXNjb3ZlclNvY2tldGh1YihcbiAgICBiYXNlVXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogRGlzY292ZXJPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPFNlcnZpY2VEZXNjcmlwdG9yPiB7XG4gICAgbGV0IHVybDogVVJMO1xuICAgIHRyeSB7XG4gICAgICAgIHVybCA9IG5ldyBVUkwoYmFzZVVybCk7XG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IERpc2NvdmVyeUVycm9yKFxuICAgICAgICAgICAgYFNvY2tldGh1YiBkaXNjb3ZlcnkgbmVlZHMgYW4gYWJzb2x1dGUgYmFzZSBVUkwsIGdvdCAke0pTT04uc3RyaW5naWZ5KGJhc2VVcmwpfWAsXG4gICAgICAgICAgICB7IGNhdXNlIH0sXG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmICh1cmwucHJvdG9jb2wgIT09IFwiaHR0cDpcIiAmJiB1cmwucHJvdG9jb2wgIT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IERpc2NvdmVyeUVycm9yKFxuICAgICAgICAgICAgYFNvY2tldGh1YiBkaXNjb3ZlcnkgbmVlZHMgYW4gaHR0cChzKSBiYXNlIFVSTCwgZ290ICR7SlNPTi5zdHJpbmdpZnkoYmFzZVVybCl9YCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZG9GZXRjaCA9IG9wdGlvbnMuZmV0Y2ggPz8gZ2xvYmFsVGhpcy5mZXRjaDtcbiAgICBpZiAodHlwZW9mIGRvRmV0Y2ggIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgRGlzY292ZXJ5RXJyb3IoXG4gICAgICAgICAgICBcIlNvY2tldGh1YiBkaXNjb3ZlcnkgbmVlZHMgZmV0Y2goKTsgcGFzcyBvbmUgaW4gdGhlIG9wdGlvbnNcIixcbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCB0aW1lb3V0TXMgPSBvcHRpb25zLmRpc2NvdmVyeVRpbWVvdXRNcyA/PyAxMDAwMDtcbiAgICAvLyBUaGUgdGltZXIgY292ZXJzIHRoZSB3aG9sZSBleGNoYW5nZTogZmV0Y2goKSByZXNvbHZlcyBvbmNlIGhlYWRlcnNcbiAgICAvLyBhcnJpdmUsIGFuZCBhIHN0YWxsZWQgYm9keSB3b3VsZCBvdGhlcndpc2UgaGFuZyBkaXNjb3ZlcnkgZm9yZXZlci5cbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aW1lb3V0TXMpO1xuICAgIGNvbnN0IHRpbWVkT3V0ID0gKCkgPT4gY29udHJvbGxlci5zaWduYWwuYWJvcnRlZDtcblxuICAgIGxldCBkZXNjcmlwdG9yOiB1bmtub3duO1xuICAgIHRyeSB7XG4gICAgICAgIGxldCByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGRvRmV0Y2godXJsLmhyZWYsIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IGFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICAgICAgICBjb25zdCByZWFzb24gPSB0aW1lZE91dCgpXG4gICAgICAgICAgICAgICAgPyBgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYFxuICAgICAgICAgICAgICAgIDogY2F1c2UgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICAgICAgPyBjYXVzZS5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICA6IFN0cmluZyhjYXVzZSk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRGlzY292ZXJ5RXJyb3IoXG4gICAgICAgICAgICAgICAgYFNvY2tldGh1YiBkaXNjb3ZlcnkgZmFpbGVkOiBjb3VsZCBub3QgcmVhY2ggJHt1cmwuaHJlZn0gKCR7cmVhc29ufSlgLFxuICAgICAgICAgICAgICAgIHsgY2F1c2UgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IERpc2NvdmVyeUVycm9yKFxuICAgICAgICAgICAgICAgIGBTb2NrZXRodWIgZGlzY292ZXJ5IGZhaWxlZDogJHt1cmwuaHJlZn0gYW5zd2VyZWQgJHtyZXNwb25zZS5zdGF0dXN9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRGlzY292ZXJ5RXJyb3IoXG4gICAgICAgICAgICAgICAgdGltZWRPdXQoKVxuICAgICAgICAgICAgICAgICAgICA/IGBTb2NrZXRodWIgZGlzY292ZXJ5IGZhaWxlZDogJHt1cmwuaHJlZn0gdGltZWQgb3V0IGFmdGVyICR7dGltZW91dE1zfW1zIHdoaWxlIHNlbmRpbmcgdGhlIGRlc2NyaXB0b3JgXG4gICAgICAgICAgICAgICAgICAgIDogYFNvY2tldGh1YiBkaXNjb3ZlcnkgZmFpbGVkOiAke3VybC5ocmVmfSBkaWQgbm90IHJldHVybiBKU09OOyBpcyBpdCBhIFNvY2tldGh1YiBzZXJ2ZXI/YCxcbiAgICAgICAgICAgICAgICB7IGNhdXNlIH0sXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB9XG4gICAgaWYgKCF2YWxpZGF0ZVNlcnZpY2VEZXNjcmlwdG9yKGRlc2NyaXB0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBEaXNjb3ZlcnlFcnJvcihcbiAgICAgICAgICAgIGBTb2NrZXRodWIgZGlzY292ZXJ5IGZhaWxlZDogJHt1cmwuaHJlZn0gZGlkIG5vdCByZXR1cm4gYSB2YWxpZCBzZXJ2aWNlIGRlc2NyaXB0b3JgLFxuICAgICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGFuIGFkdmVydGlzZWQgZW5kcG9pbnQgcGF0aCBhZ2FpbnN0IHRoZSBzZXJ2ZXIgb3JpZ2luLCByZWZ1c2luZyBhbnlcbiAqIHJlc3VsdCB0aGF0IGxhbmRzIG9uIGFub3RoZXIgb3JpZ2luLiBUaGUgc2NoZW1hIGFscmVhZHkgcmVqZWN0cyBwYXRocyB0aGF0XG4gKiBVUkwgcmVzb2x1dGlvbiB3b3VsZCByZWFkIGFzIHByb3RvY29sLXJlbGF0aXZlOyB0aGlzIGlzIHRoZSBiZWx0IHRvIHRoYXRcbiAqIGJyYWNlIGZvciBjYWxsZXJzIHRoYXQgYnVpbGQgVVJMcyBmcm9tIGRlc2NyaXB0b3IgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVuZHBvaW50KHNlcnZlck9yaWdpbjogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocGF0aCwgc2VydmVyT3JpZ2luKTtcbiAgICBpZiAodXJsLm9yaWdpbiAhPT0gbmV3IFVSTChzZXJ2ZXJPcmlnaW4pLm9yaWdpbikge1xuICAgICAgICB0aHJvdyBuZXcgRGlzY292ZXJ5RXJyb3IoXG4gICAgICAgICAgICBgU29ja2V0aHViIGRpc2NvdmVyeSBmYWlsZWQ6IGVuZHBvaW50IHBhdGggJHtKU09OLnN0cmluZ2lmeShwYXRoKX0gcmVzb2x2ZXMgdG8gJHt1cmwub3JpZ2lufSwgbm90ICR7c2VydmVyT3JpZ2lufWAsXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB1cmwuaHJlZjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTb2NrZXRGYWN0b3J5KFxuICAgIGV4cGxpY2l0PzogU29ja2V0RmFjdG9yeSxcbik6IFByb21pc2U8U29ja2V0RmFjdG9yeT4ge1xuICAgIGlmIChleHBsaWNpdCkge1xuICAgICAgICByZXR1cm4gZXhwbGljaXQ7XG4gICAgfVxuICAgIGNvbnN0IGdsb2JhbElvID0gKGdsb2JhbFRoaXMgYXMgeyBpbz86IHVua25vd24gfSkuaW87XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxJbyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxJbyBhcyBTb2NrZXRGYWN0b3J5O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBtb2QgPSAoYXdhaXQgaW1wb3J0KFwic29ja2V0LmlvLWNsaWVudFwiKSkgYXMge1xuICAgICAgICAgICAgaW8/OiBTb2NrZXRGYWN0b3J5O1xuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZW9mIG1vZC5pbyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9kLmlvO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byB0aGUgZGVzY3JpcHRpdmUgZXJyb3IgYmVsb3cuXG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJTb2NrZXRodWJDbGllbnQuY29ubmVjdCgpIG5lZWRzIHNvY2tldC5pby1jbGllbnQ6IGluc3RhbGwgaXQsIGxvYWQgL3NvY2tldC5pby5qcywgb3IgcGFzcyBgaW9gIGluIHRoZSBvcHRpb25zXCIsXG4gICAgKTtcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBBY3Rpdml0eVN0cmVhbSB9IGZyb20gXCJAc29ja2V0aHViL3NjaGVtYXNcIjtcbmltcG9ydCB7IHJlc29sdmVQbGF0Zm9ybUlkIH0gZnJvbSBcIkBzb2NrZXRodWIvc2NoZW1hc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TWFwcGluZyB7XG4gICAgY3JlZGVudGlhbHM6IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbiAgICBjb25uZWN0OiBNYXA8c3RyaW5nLCBBY3Rpdml0eVN0cmVhbT47XG4gICAgam9pbjogTWFwPHN0cmluZywgQWN0aXZpdHlTdHJlYW0+O1xufVxuXG4vKipcbiAqIFRydWUgZm9yIHRoZSBgeyBlcnJvciB9YCBvYmplY3QgdGhlIHNlcnZlciBhY2tzIGEgZmFpbGVkIGpvYiB3aXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvclJlc3VsdCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICBcImVycm9yXCIgaW4gdmFsdWUgJiZcbiAgICAgICAgQm9vbGVhbigodmFsdWUgYXMgeyBlcnJvcj86IHVua25vd24gfSkuZXJyb3IpXG4gICAgKTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBhbiBBY3Rpdml0eVN0cmVhbSB3aXRoIGEgdmFsaWQgYWN0b3IuaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNBY3RvcklkKG9iajogQWN0aXZpdHlTdHJlYW0pOiBvYmogaXMgQWN0aXZpdHlTdHJlYW0ge1xuICAgIHJldHVybiAoXG4gICAgICAgIFwiYWN0b3JcIiBpbiBvYmogJiZcbiAgICAgICAgb2JqLmFjdG9yICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBvYmouYWN0b3IgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgXCJpZFwiIGluIG9iai5hY3RvciAmJlxuICAgICAgICB0eXBlb2Ygb2JqLmFjdG9yLmlkID09PSBcInN0cmluZ1wiXG4gICAgKTtcbn1cblxuLyoqXG4gKiBUcnVlIGZvciB0aGUgYWN0aXZpdHkgdGhhdCByZXBvcnRzIG9yIHJlcXVlc3RzIGEgbmljayBjaGFuZ2U6IGFuXG4gKiBgdXBkYXRlYCB3aG9zZSBvYmplY3QgaXMgYW4gYGFkZHJlc3NgLCB3aXRoIGBhY3RvcmAgdGhlIG9sZCBpZGVudGl0eVxuICogYW5kIGB0YXJnZXRgIHRoZSBuZXcgb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBY3RvclJlbmFtZShhY3Rpdml0eTogQWN0aXZpdHlTdHJlYW0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBhY3Rpdml0eT8udHlwZSA9PT0gXCJ1cGRhdGVcIiAmJlxuICAgICAgICBhY3Rpdml0eS5vYmplY3Q/LnR5cGUgPT09IFwiYWRkcmVzc1wiICYmXG4gICAgICAgIGhhc0FjdG9ySWQoYWN0aXZpdHkpICYmXG4gICAgICAgIHR5cGVvZiBhY3Rpdml0eS50YXJnZXQgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgdHlwZW9mIGFjdGl2aXR5LnRhcmdldD8uaWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgYWN0aXZpdHkudGFyZ2V0LmlkICE9PSBhY3Rpdml0eS5hY3Rvci5pZFxuICAgICk7XG59XG5cbi8qKlxuICogS2V5IGZvciB0aGUgcmVwbGF5IG1hcHMuIFNjb3BlZCBieSBwbGF0Zm9ybTogdGhlIHNhbWUgdmlzaWJsZSBhY3RvciBpZFxuICogY2FuIGV4aXN0IG9uIG1vcmUgdGhhbiBvbmUgcGxhdGZvcm0gKGFuIGBhbGljZUBleGFtcGxlLm9yZ2AgdGhhdCBpcyBib3RoXG4gKiBhbiBJUkMgbmljayBhbmQgYW4gWE1QUCBKSUQpLCBhbmQga2V5ZWQgYnkgYWN0b3IgYWxvbmUgb25lIHBsYXRmb3JtJ3NcbiAqIHN0b3JlZCBjcmVkZW50aWFscy9jb25uZWN0L2pvaW4gd291bGQgcmVwbGFjZSB0aGUgb3RoZXIncyBvbiByZWNvbm5lY3QuXG4gKi9cbmZ1bmN0aW9uIGdldEtleShjb250ZW50OiBBY3Rpdml0eVN0cmVhbSkge1xuICAgIGNvbnN0IGFjdG9yID0gY29udGVudC5hY3Rvcj8uaWQgfHwgY29udGVudC5hY3RvcjtcbiAgICBpZiAoIWFjdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBhY3RvciBwcm9wZXJ0eSBub3QgcHJlc2VudCBmb3IgbWVzc2FnZSB0eXBlOiAke2NvbnRlbnQ/LnR5cGV9YCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0gY29udGVudC50YXJnZXQgPyBjb250ZW50LnRhcmdldC5pZCB8fCBjb250ZW50LnRhcmdldCA6IFwiXCI7XG4gICAgY29uc3QgcGxhdGZvcm0gPSByZXNvbHZlUGxhdGZvcm1JZChjb250ZW50KSA/PyBcIlwiO1xuICAgIHJldHVybiBgJHtwbGF0Zm9ybX06JHthY3Rvcn0tJHt0YXJnZXR9YDtcbn1cblxuLyoqXG4gKiBJbi1tZW1vcnkgc3RvcmFnZSBmb3IgY2xpZW50IHN0YXRlIHRoYXQgc2hvdWxkIGJlIHJlcGxheWVkIG9uIHJlY29ubmVjdGlvbi5cbiAqXG4gKiBTZWN1cml0eTogU3RvcmVkIE9OTFkgaW4gSmF2YVNjcmlwdCBoZWFwIG1lbW9yeS4gTmV2ZXIgcGVyc2lzdGVkIHRvIGRpc2ssXG4gKiBsb2NhbFN0b3JhZ2UsIG9yIGFueSBwZXJtYW5lbnQgc3RvcmFnZS4gQ2xlYXJlZCBvbiBwYWdlIHJlbG9hZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlcGxheVN0b3JlIHtcbiAgICByZWFkb25seSBldmVudHM6IEV2ZW50TWFwcGluZyA9IHtcbiAgICAgICAgY3JlZGVudGlhbHM6IG5ldyBNYXAoKSxcbiAgICAgICAgY29ubmVjdDogbmV3IE1hcCgpLFxuICAgICAgICBqb2luOiBuZXcgTWFwKCksXG4gICAgfTtcblxuICAgIHJlY29yZENyZWRlbnRpYWxzKGNvbnRlbnQ6IEFjdGl2aXR5U3RyZWFtKTogdm9pZCB7XG4gICAgICAgIGlmIChjb250ZW50Lm9iamVjdCAmJiBjb250ZW50Lm9iamVjdC50eXBlID09PSBcImNyZWRlbnRpYWxzXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzLnNldChnZXRLZXkoY29udGVudCksIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGNvbm5lY3Qvam9pbiBjb21tYW5kcyBhbmQgZHJvcHMgdGhlbSBhZ2FpbiBvblxuICAgICAqIGRpc2Nvbm5lY3QvbGVhdmUsIHNvIGEgcmVjb25uZWN0IHJlcGxheXMgb25seSB3aGF0IGlzIHN0aWxsIGxpdmUuXG4gICAgICovXG4gICAgcmVjb3JkTWVzc2FnZShjb250ZW50OiBBY3Rpdml0eVN0cmVhbSk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoY29udGVudCk7XG4gICAgICAgIGlmIChjb250ZW50LnR5cGUgPT09IFwiam9pblwiIHx8IGNvbnRlbnQudHlwZSA9PT0gXCJjb25uZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzW2NvbnRlbnQudHlwZV0uc2V0KGtleSwgY29udGVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImxlYXZlXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmpvaW4uZGVsZXRlKGtleSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImRpc2Nvbm5lY3RcIikge1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuY29ubmVjdC5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlLWtleXMgZXZlcnkgc3RvcmVkIGVudHJ5IGZvciB0aGUgcmVuYW1lJ3MgYGFjdG9yYCBvbiBpdHMgcGxhdGZvcm0gdG9cbiAgICAgKiBpdHMgYHRhcmdldGAuIFRoZSBjcmVkZW50aWFsIG9iamVjdCBpdHNlbGYgaXMgbGVmdCBhcyB0aGUgYXBwbGljYXRpb25cbiAgICAgKiBzZW50IGl0OiB0aGUgc2VydmVyIGtleXMgdGhlIGxpdmUgY29ubmVjdGlvbiBvbiBhIGZpbmdlcnByaW50IG9mIHRoYXRcbiAgICAgKiBvYmplY3QsIGFuZCB0aGUgd29ya2VyIGFjY2VwdHMgdGhlIGhhc2ggaXQgd2FzIGF1dGhvcml6ZWQgd2l0aCwgc29cbiAgICAgKiByZXBsYXlpbmcgdGhlIG9yaWdpbmFsIG9iamVjdCB1bmRlciB0aGUgbmV3IGFjdG9yIGlzIHdoYXQgbGFuZHMgYmFja1xuICAgICAqIG9uIHRoZSByZW5hbWVkIGNvbm5lY3Rpb24uIFJldHVybnMgdGhlIGlkcyBtb3ZlZCwgZm9yIGxvZ2dpbmcuXG4gICAgICovXG4gICAgbW92ZUFjdG9yKHJlbmFtZTogQWN0aXZpdHlTdHJlYW0pOiBBcnJheTxbc3RyaW5nLCBzdHJpbmddPiB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzSWQgPSByZW5hbWUuYWN0b3IuaWQ7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHJlbmFtZS50YXJnZXQgYXMgQWN0aXZpdHlTdHJlYW1bXCJhY3RvclwiXTtcbiAgICAgICAgY29uc3QgbmV4dElkID0gdGFyZ2V0LmlkO1xuICAgICAgICBjb25zdCBuZXh0TmFtZSA9XG4gICAgICAgICAgICB0eXBlb2YgdGFyZ2V0Lm5hbWUgPT09IFwic3RyaW5nXCIgPyB0YXJnZXQubmFtZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSByZXNvbHZlUGxhdGZvcm1JZChyZW5hbWUpID8/IFwiXCI7XG4gICAgICAgIGNvbnN0IG1vdmVkOiBBcnJheTxbc3RyaW5nLCBzdHJpbmddPiA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgbWFwIG9mIE9iamVjdC52YWx1ZXModGhpcy5ldmVudHMpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBbLi4ubWFwXSkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWhhc0FjdG9ySWQoZW50cnkpIHx8XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmFjdG9yLmlkICE9PSBwcmV2aW91c0lkIHx8XG4gICAgICAgICAgICAgICAgICAgIChyZXNvbHZlUGxhdGZvcm1JZChlbnRyeSkgPz8gXCJcIikgIT09IHBsYXRmb3JtXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZW5hbWVkOiBBY3Rpdml0eVN0cmVhbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGFjdG9yOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeS5hY3RvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBuZXh0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4obmV4dE5hbWUgPyB7IG5hbWU6IG5leHROYW1lIH0gOiB7fSksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtYXAuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgbWFwLnNldChnZXRLZXkocmVuYW1lZCksIHJlbmFtZWQpO1xuICAgICAgICAgICAgICAgIG1vdmVkLnB1c2goW3ByZXZpb3VzSWQsIG5leHRJZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb3ZlZDtcbiAgICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHtcbiAgICBBY3Rpdml0eVN0cmVhbSxcbiAgICBTZXJ2aWNlRGVzY3JpcHRvcixcbiAgICBTZXJ2aWNlRW5kcG9pbnRzLFxufSBmcm9tIFwiQHNvY2tldGh1Yi9zY2hlbWFzXCI7XG5pbXBvcnQge1xuICAgIG5vcm1hbGl6ZUFjdGl2aXR5U3RyZWFtLFxuICAgIHZhbGlkYXRlQWN0aXZpdHlTdHJlYW0sXG4gICAgdmFsaWRhdGVDcmVkZW50aWFscyxcbn0gZnJvbSBcIkBzb2NrZXRodWIvc2NoZW1hc1wiO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiO1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VyT3B0aW9ucywgU29ja2V0LCBTb2NrZXRPcHRpb25zIH0gZnJvbSBcInNvY2tldC5pby1jbGllbnRcIjtcbmltcG9ydCB7XG4gICAgdHlwZSBQbGF0Zm9ybVJlZ2lzdHJ5RW50cnksXG4gICAgdHlwZSBQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZCxcbiAgICBwYXJzZVBsYXRmb3JtUmVnaXN0cnksXG4gICAgcmVnaXN0ZXJQbGF0Zm9ybVNjaGVtYXMsXG59IGZyb20gXCIuL2NsaWVudC1yZWdpc3RyeVwiO1xuaW1wb3J0IHtcbiAgICB0eXBlIERpc2NvdmVyT3B0aW9ucyxcbiAgICBEaXNjb3ZlcnlFcnJvcixcbiAgICBkaXNjb3ZlclNvY2tldGh1YixcbiAgICByZXNvbHZlRW5kcG9pbnQsXG4gICAgcmVzb2x2ZVNvY2tldEZhY3RvcnksXG4gICAgdHlwZSBTb2NrZXRGYWN0b3J5LFxufSBmcm9tIFwiLi9kaXNjb3ZlcnlcIjtcbmltcG9ydCB7XG4gICAgaGFzQWN0b3JJZCxcbiAgICBpc0FjdG9yUmVuYW1lLFxuICAgIGlzRXJyb3JSZXN1bHQsXG4gICAgUmVwbGF5U3RvcmUsXG59IGZyb20gXCIuL3JlcGxheS1zdG9yZVwiO1xuXG5leHBvcnQgdHlwZSB7IFNlcnZpY2VEZXNjcmlwdG9yLCBTZXJ2aWNlRW5kcG9pbnRzIH07XG5leHBvcnQgdHlwZSB7XG4gICAgUGxhdGZvcm1SZWdpc3RyeUVudHJ5LFxuICAgIFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkLFxufSBmcm9tIFwiLi9jbGllbnQtcmVnaXN0cnlcIjtcbmV4cG9ydCB7XG4gICAgdHlwZSBEaXNjb3Zlck9wdGlvbnMsXG4gICAgRGlzY292ZXJ5RXJyb3IsXG4gICAgZGlzY292ZXJTb2NrZXRodWIsXG4gICAgcmVzb2x2ZUVuZHBvaW50LFxuICAgIHR5cGUgU29ja2V0RmFjdG9yeSxcbn0gZnJvbSBcIi4vZGlzY292ZXJ5XCI7XG5leHBvcnQgdHlwZSB7IEV2ZW50TWFwcGluZyB9IGZyb20gXCIuL3JlcGxheS1zdG9yZVwiO1xuXG50eXBlIFJlcGxheUV2ZW50TWFwID0ge1xuICAgIGNyZWRlbnRpYWxzOiBBY3Rpdml0eVN0cmVhbTtcbiAgICBtZXNzYWdlOiBBY3Rpdml0eVN0cmVhbTtcbn07XG5cbnR5cGUgSW5pdFN0YXRlID0gXCJpZGxlXCIgfCBcImluaXRpYWxpemluZ1wiIHwgXCJyZWFkeVwiIHwgXCJpbml0X2Vycm9yXCIgfCBcImNsb3NlZFwiO1xuXG50eXBlIFJlYWR5UmVhc29uID0gXCJpbml0aWFsLWNvbm5lY3RcIiB8IFwicmVjb25uZWN0XCIgfCBcInNjaGVtYXMtdXBkYXRlXCI7XG5cbnR5cGUgSW5pdEVycm9yUGhhc2UgPSBcInNjaGVtYXMtcmVxdWVzdFwiIHwgXCJzY2hlbWFzLWFwcGx5XCIgfCBcInRpbWVvdXRcIjtcblxuaW50ZXJmYWNlIFBlbmRpbmdSZWFkeVdhaXRlciB7XG4gICAgcmVzb2x2ZTogKGluZm86IENsaWVudFJlYWR5SW5mbykgPT4gdm9pZDtcbiAgICByZWplY3Q6IChlcnI6IEVycm9yKSA9PiB2b2lkO1xuICAgIHRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG59XG5cbmludGVyZmFjZSBRdWV1ZWRPdXRib3VuZEV2ZW50IHtcbiAgICBldmVudDogc3RyaW5nO1xuICAgIGNvbnRlbnQ6IHVua25vd247XG4gICAgY2FsbGJhY2s/OiB1bmtub3duO1xuICAgIGVucXVldWVkQXQ6IG51bWJlcjtcbiAgICBzZXF1ZW5jZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSW5pdGlhbGl6YXRpb25DeWNsZSB7XG4gICAgdG9rZW46IG51bWJlcjtcbiAgICByZWFzb246IFJlYWR5UmVhc29uO1xuICAgIHN0YXJ0ZWRBdDogbnVtYmVyO1xuICAgIHJlcGxheU9uUmVhZHk6IGJvb2xlYW47XG4gICAgdGltZWRPdXQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ja2V0aHViQ2xpZW50T3B0aW9ucyB7XG4gICAgaW5pdFRpbWVvdXRNcz86IG51bWJlcjtcbiAgICBtYXhRdWV1ZWRPdXRib3VuZD86IG51bWJlcjtcbiAgICBtYXhRdWV1ZWRBZ2VNcz86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBDbGllbnQtc2lkZSBzY2hlbWEgdmFsaWRhdGlvbi4gYFwiYXV0b1wiYCAoZGVmYXVsdCkgdmFsaWRhdGVzIHdpdGggQWp2IHdoZW5cbiAgICAgKiB0aGUgZW52aXJvbm1lbnQgYWxsb3dzIGNvZGUgZ2VuZXJhdGlvbjsgZW52aXJvbm1lbnRzIHRoYXQgZm9yYmlkIGl0IChhXG4gICAgICogYnJvd3Nlci1leHRlbnNpb24gQ1NQKSBza2lwIHZhbGlkYXRpb24gYXV0b21hdGljYWxseS4gYFwib2ZmXCJgIGFsd2F5c1xuICAgICAqIHNraXBzIGl0LiBUaGUgc2VydmVyIHZhbGlkYXRlcyBldmVyeSBtZXNzYWdlIHJlZ2FyZGxlc3MuXG4gICAgICovXG4gICAgdmFsaWRhdGlvbj86IFwiYXV0b1wiIHwgXCJvZmZcIjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0T3B0aW9uc1xuICAgIGV4dGVuZHMgU29ja2V0aHViQ2xpZW50T3B0aW9ucyxcbiAgICAgICAgRGlzY292ZXJPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYGlvKClgIGZhY3RvcnkgdG8gY3JlYXRlIHRoZSBzb2NrZXQgd2l0aC4gRGVmYXVsdHMgdG8gdGhlIGBpb2BcbiAgICAgKiBnbG9iYWwgc2V0IGJ5IGAvc29ja2V0LmlvLmpzYCwgdGhlbiB0byB0aGUgYHNvY2tldC5pby1jbGllbnRgIHBhY2thZ2VcbiAgICAgKiB3aGVuIGl0IGNhbiBiZSBpbXBvcnRlZC5cbiAgICAgKi9cbiAgICBpbz86IFNvY2tldEZhY3Rvcnk7XG4gICAgLyoqXG4gICAgICogRXh0cmEgU29ja2V0LklPIG9wdGlvbnMgKGF1dGgsIHRyYW5zcG9ydHMsIC4uLikuIGBwYXRoYCBpcyBhbHdheXMgdGFrZW5cbiAgICAgKiBmcm9tIHRoZSBkaXNjb3ZlcmVkIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgc29ja2V0T3B0aW9ucz86IFBhcnRpYWw8TWFuYWdlck9wdGlvbnMgJiBTb2NrZXRPcHRpb25zPjtcbn1cblxuaW50ZXJmYWNlIEN1c3RvbUVtaXR0ZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIF9lbWl0KHM6IHN0cmluZywgbzogdW5rbm93biwgYz86IHVua25vd24pOiB2b2lkO1xuICAgIGNvbm5lY3QoKTogdm9pZDtcbiAgICBkaXNjb25uZWN0KCk6IHZvaWQ7XG4gICAgY29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50UmVhZHlJbmZvIHtcbiAgICBzdGF0ZTogXCJyZWFkeVwiO1xuICAgIHJlYXNvbjogUmVhZHlSZWFzb247XG4gICAgLy8gR2xvYmFsIFNvY2tldGh1YiBBUEkgdmVyc2lvbiAodGhlIHNlcnZlciBwYWNrYWdlJ3MgU2VtVmVyIG1ham9yKS5cbiAgICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gICAgY29udGV4dHM6IHtcbiAgICAgICAgYXM6IHN0cmluZztcbiAgICAgICAgc29ja2V0aHViOiBzdHJpbmc7XG4gICAgfTtcbiAgICBwbGF0Zm9ybXM6IEFycmF5PHtcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICAgICAgICBjb250ZXh0VXJsOiBzdHJpbmc7XG4gICAgICAgIGNvbnRleHRWZXJzaW9uOiBzdHJpbmc7XG4gICAgICAgIHNjaGVtYVZlcnNpb246IHN0cmluZztcbiAgICAgICAgdHlwZXM6IEFycmF5PHN0cmluZz47XG4gICAgfT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50SW5pdEVycm9yIHtcbiAgICBlcnJvcjogc3RyaW5nO1xuICAgIHBoYXNlOiBJbml0RXJyb3JQaGFzZTtcbiAgICByZXRyeWluZzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTb2NrZXRodWJDbGllbnQgLSBDbGllbnQgbGlicmFyeSBmb3IgU29ja2V0aHViIHByb3RvY29sIGdhdGV3YXlcbiAqXG4gKiBBIEphdmFTY3JpcHQgY2xpZW50IGZvciBjb25uZWN0aW5nIHRvIFNvY2tldGh1YiBzZXJ2ZXJzLiBQcm92aWRlcyBhIGhpZ2gtbGV2ZWxcbiAqIEFQSSBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIEFjdGl2aXR5U3RyZWFtcyBtZXNzYWdlcyBvdmVyIFNvY2tldC5JTywgd2l0aFxuICogYXV0b21hdGljIHN0YXRlIG1hbmFnZW1lbnQgYW5kIHJlY29ubmVjdGlvbiBoYW5kbGluZy5cbiAqXG4gKiBTb2NrZXRodWIgYWN0cyBhcyBhIHByb3RvY29sIGdhdGV3YXksIHRyYW5zbGF0aW5nIEFjdGl2aXR5U3RyZWFtcyBtZXNzYWdlcyBpbnRvXG4gKiB2YXJpb3VzIHByb3RvY29scyAoWE1QUCwgSVJDLCBSU1MsIGV0Yy4pLiBUaGlzIGNsaWVudCBoYW5kbGVzIHRoZSBjb21tdW5pY2F0aW9uXG4gKiB3aXRoIHRoZSBTb2NrZXRodWIgc2VydmVyLCBpbmNsdWRpbmcgY3JlZGVudGlhbCBtYW5hZ2VtZW50LCBjb25uZWN0aW9uIHN0YXRlLFxuICogYW5kIGF1dG9tYXRpYyByZWNvbm5lY3Rpb24uXG4gKlxuICogIyMgQXV0b21hdGljIFJlY29ubmVjdGlvbiAmIFN0YXRlIFJlcGxheVxuICpcbiAqIFRoaXMgY2xpZW50IGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB0cmFuc2llbnQgbmV0d29yayBkaXNjb25uZWN0aW9ucyBieSBzdG9yaW5nXG4gKiBjb25uZWN0aW9uIHN0YXRlIGluIG1lbW9yeSBhbmQgcmVwbGF5aW5nIGl0IHdoZW4gdGhlIHNvY2tldCByZWNvbm5lY3RzLlxuICpcbiAqICMjIyBTZWN1cml0eSBNb2RlbFxuICpcbiAqICoqU3RvcmFnZSBMb2NhdGlvbjoqKlxuICogLSBBbGwgY3JlZGVudGlhbHMgYW5kIHN0YXRlIGFyZSBzdG9yZWQgT05MWSBpbiBKYXZhU2NyaXB0IG1lbW9yeSAoaGVhcClcbiAqIC0gTm90aGluZyBpcyBwZXJzaXN0ZWQgdG8gbG9jYWxTdG9yYWdlLCBzZXNzaW9uU3RvcmFnZSwgY29va2llcywgb3IgZGlza1xuICogLSBNZW1vcnkgaXMgY2xlYXJlZCB3aGVuIHRoZSBicm93c2VyIHRhYiBjbG9zZXMgb3IgcGFnZSByZWZyZXNoZXNcbiAqXG4gKiAqKlJlcGxheSBUcmlnZ2VyczoqKlxuICogLSBBdXRvbWF0aWMgcmVwbGF5IG9jY3VycyBvbiBTb2NrZXQuSU8gcmVjb25uZWN0aW9uIGV2ZW50c1xuICogLSBUeXBpY2FsbHkgdHJpZ2dlcmVkIGJ5IGJyaWVmIG5ldHdvcmsgaW50ZXJydXB0aW9ucyAoV2lGaSBzd2l0Y2hpbmcsIG1vYmlsZSBuZXR3b3JrIGJsaXBzKVxuICogLSBEb2VzIE5PVCBvY2N1ciBvbiBwYWdlIHJlZnJlc2ggKG5ldyBTb2NrZXRodWJDbGllbnQgaW5zdGFuY2UgPSBlbXB0eSBzdGF0ZSlcbiAqXG4gKiAqKlNlcnZlciBSZXN0YXJ0IEJlaGF2aW9yOioqXG4gKiAtIElmIHNlcnZlciByZXN0YXJ0cywgY2xpZW50IHNvY2tldCB3aWxsIHJlY29ubmVjdCBhbmQgcmVwbGF5IGNyZWRlbnRpYWxzXG4gKiAtIFNlcnZlciBtdXN0IGhhbmRsZSByZXBsYXllZCBjcmVkZW50aWFscyBhcHByb3ByaWF0ZWx5ICh2YWxpZGF0ZSwgcmVqZWN0IHN0YWxlIHNlc3Npb25zLCBldGMuKVxuICogLSBBcHBsaWNhdGlvbnMgc2hvdWxkIGltcGxlbWVudCBwcm9wZXIgc2Vzc2lvbiB2YWxpZGF0aW9uIHNlcnZlci1zaWRlXG4gKlxuICogKipMaWZldGltZToqKlxuICogLSBDcmVkZW50aWFscyBleGlzdCBvbmx5IGR1cmluZyB0aGUgYnJvd3NlciB0YWIncyBsaWZldGltZVxuICogLSBDbGVhcmVkIG9uIHBhZ2UgcmVsb2FkLCB0YWIgY2xvc2UsIG9yIG1hbnVhbCBkaXNjb25uZWN0XG4gKiAtIE5vdCBhY2Nlc3NpYmxlIGFjcm9zcyB0YWJzIG9yIGFmdGVyIGJyb3dzZXIgcmVzdGFydFxuICpcbiAqICoqV2hhdCBHZXRzIFJlcGxheWVkOioqXG4gKiAtIENyZWRlbnRpYWxzICh1c2VybmFtZS9wYXNzd29yZC90b2tlbnMgc2VudCB2aWEgY3JlZGVudGlhbHMgZXZlbnQpXG4gKiAtIEFjdGl2aXR5IE9iamVjdHMgKGFjdG9yIGRlZmluaXRpb25zKVxuICogLSBDb25uZWN0IGNvbW1hbmRzIChwbGF0Zm9ybSBjb25uZWN0aW9ucylcbiAqIC0gSm9pbiBjb21tYW5kcyAocm9vbS9jaGFubmVsIGpvaW5zKVxuICpcbiAqIFdoZW4gb25lIG9mIHRoaXMgY2xpZW50J3MgYWN0b3JzIGlzIHJlbmFtZWQgKGFuIGB1cGRhdGVgIHdpdGhcbiAqIGBvYmplY3QudHlwZTogXCJhZGRyZXNzXCJgLCBlLmcuIGFuIElSQyBuaWNrIGNoYW5nZSwgd2hldGhlciB0aGlzIGNsaWVudFxuICogcmVxdWVzdGVkIGl0IGFuZCB0aGUgc2VydmVyIGFja25vd2xlZGdlZCBpdCwgb3IgdGhlIHNlcnZlciByZXBvcnRlZCBpdCksXG4gKiB0aGUgc3RvcmVkIGVudHJpZXMgbW92ZSB0byB0aGUgbmV3IGFjdG9yIHNvIGEgcmVjb25uZWN0IHJlcGxheXMgdGhlIGN1cnJlbnRcbiAqIGlkZW50aXR5IHJhdGhlciB0aGFuIHRoZSBvbGQgb25lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBEaXNjb3ZlciB0aGUgU29ja2V0LklPIGVuZHBvaW50IGZyb20gdGhlIHNlcnZlcidzIGJhc2UgVVJMIGFuZCBjb25uZWN0XG4gKiBjb25zdCBjbGllbnQgPSBhd2FpdCBTb2NrZXRodWJDbGllbnQuY29ubmVjdCgnaHR0cDovL2xvY2FsaG9zdDoxMDU1MCcpO1xuICpcbiAqIC8vIE9yIHdyYXAgYSBzb2NrZXQgeW91IGNyZWF0ZWQgeW91cnNlbGZcbiAqIGNvbnN0IGNsaWVudCA9IG5ldyBTb2NrZXRodWJDbGllbnQoaW8oJ2h0dHA6Ly9sb2NhbGhvc3Q6MTA1NTAnLCB7IHBhdGg6ICcvc29ja2V0aHViJyB9KSk7XG4gKlxuICogLy8gV2FpdCBmb3Igc2NoZW1hIHJlZ2lzdHJ5IGJlZm9yZSBzZW5kaW5nIG1lc3NhZ2VzXG4gKiBhd2FpdCBjbGllbnQucmVhZHkoKTtcbiAqXG4gKiAvLyBCdWlsZCBjYW5vbmljYWwgQGNvbnRleHQgZm9yIGEgcGxhdGZvcm1cbiAqIGNvbnN0IGN0eCA9IGNsaWVudC5jb250ZXh0Rm9yKCdpcmMnKTtcbiAqXG4gKiAvLyBTZW5kIGNyZWRlbnRpYWxzIC0gdGhlc2Ugd2lsbCBiZSByZXBsYXllZCBvbiByZWNvbm5lY3Rpb25cbiAqIGNsaWVudC5zb2NrZXQuZW1pdCgnY3JlZGVudGlhbHMnLCB7XG4gKiAgICdAY29udGV4dCc6IGN0eCxcbiAqICAgdHlwZTogJ2NyZWRlbnRpYWxzJyxcbiAqICAgYWN0b3I6IHsgaWQ6ICd1c2VyQGV4YW1wbGUuY29tJywgdHlwZTogJ3BlcnNvbicgfSxcbiAqICAgb2JqZWN0OiB7IHR5cGU6ICdjcmVkZW50aWFscycsIHVzZXJuYW1lOiAndXNlcicsIHBhc3N3b3JkOiAncGFzcycgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU29ja2V0aHViQ2xpZW50IHtcbiAgICBwcml2YXRlIHJlcGxheVN0b3JlID0gbmV3IFJlcGxheVN0b3JlKCk7XG4gICAgcHJpdmF0ZSBfc29ja2V0OiBTb2NrZXQ7XG4gICAgcHVibGljIHNvY2tldCE6IEN1c3RvbUVtaXR0ZXI7XG4gICAgcHVibGljIGRlYnVnID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBUaGUgc2VydmljZSBkZXNjcmlwdG9yIGZldGNoZWQgYnkgYFNvY2tldGh1YkNsaWVudC5jb25uZWN0KClgOiBBUElcbiAgICAgKiB2ZXJzaW9ucywgZW5hYmxlZCBwbGF0Zm9ybXMsIGFuZCB0aGUgYWR2ZXJ0aXNlZCBlbmRwb2ludHMgKGluY2x1ZGluZ1xuICAgICAqIGBlbmRwb2ludHMuaHR0cEFjdGlvbnNgIHdoZW4gdGhhdCB0cmFuc3BvcnQgaXMgb24pLiBVbmRlZmluZWQgZm9yXG4gICAgICogY2xpZW50cyBidWlsdCBmcm9tIGEgcmVhZHktbWFkZSBzb2NrZXQuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0b3I/OiBTZXJ2aWNlRGVzY3JpcHRvcjtcbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luIHRoZSBkZXNjcmlwdG9yIHdhcyBkaXNjb3ZlcmVkIGZyb20gYW5kIHRoZSBzb2NrZXQgY29ubmVjdHNcbiAgICAgKiB0by4gYGVuZHBvaW50VXJsKClgIHJlc29sdmVzIHRoZSBkZXNjcmlwdG9yJ3MgZW5kcG9pbnQgcGF0aHMgYWdhaW5zdCBpdC5cbiAgICAgKiBVbmRlZmluZWQgZm9yIGNsaWVudHMgYnVpbHQgZnJvbSBhIHJlYWR5LW1hZGUgc29ja2V0LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZXJ2ZXJPcmlnaW4/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBYnNvbHV0ZSBVUkwgb2YgYW4gYWR2ZXJ0aXNlZCBlbmRwb2ludCwgcmVzb2x2ZWQgYWdhaW5zdFxuICAgICAqIGBzZXJ2ZXJPcmlnaW5gLCBvciB1bmRlZmluZWQgd2hlbiB0aGUgc2VydmVyIGRvZXMgbm90IGFkdmVydGlzZSBpdCAoZm9yXG4gICAgICogZXhhbXBsZSBgaHR0cEFjdGlvbnNgIHdoaWxlIEhUVFAgYWN0aW9ucyBhcmUgZGlzYWJsZWQpIG9yIHdoZW4gdGhpc1xuICAgICAqIGNsaWVudCB3YXMgbm90IGNyZWF0ZWQgYnkgYGNvbm5lY3QoKWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCB1cmwgPSBzYy5lbmRwb2ludFVybCgnaHR0cEFjdGlvbnMnKTtcbiAgICAgKiBpZiAodXJsKSB7XG4gICAgICogICBhd2FpdCBmZXRjaCh1cmwsIHsgbWV0aG9kOiAnUE9TVCcsIGJvZHkgfSk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBlbmRwb2ludFVybChuYW1lOiBrZXlvZiBTZXJ2aWNlRW5kcG9pbnRzKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZGVzY3JpcHRvcj8uZW5kcG9pbnRzPy5bbmFtZV07XG4gICAgICAgIGlmICghdGhpcy5zZXJ2ZXJPcmlnaW4gfHwgIXBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVFbmRwb2ludCh0aGlzLnNlcnZlck9yaWdpbiwgcGF0aCk7XG4gICAgfVxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogUmVxdWlyZWQ8U29ja2V0aHViQ2xpZW50T3B0aW9ucz47XG4gICAgcHJpdmF0ZSBwbGF0Zm9ybVJlZ2lzdHJ5ID0gbmV3IE1hcDxzdHJpbmcsIFBsYXRmb3JtUmVnaXN0cnlFbnRyeT4oKTtcbiAgICBwcml2YXRlIGFzQ29udGV4dFVybD86IHN0cmluZztcbiAgICBwcml2YXRlIHNvY2tldGh1YkNvbnRleHRVcmw/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBhcGlWZXJzaW9uPzogbnVtYmVyO1xuICAgIHByaXZhdGUgaW5pdFN0YXRlOiBJbml0U3RhdGUgPSBcImlkbGVcIjtcbiAgICBwcml2YXRlIGhhc1JlYWR5T25jZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgaW5pdEN5Y2xlPzogSW5pdGlhbGl6YXRpb25DeWNsZTtcbiAgICBwcml2YXRlIGluaXRUb2tlbkNvdW50ZXIgPSAwO1xuICAgIHByaXZhdGUgaW5pdFRpbWVvdXRUaW1lcj86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICAgIHByaXZhdGUgd2FpdGluZ1dhcm5pbmdUaW1lcj86IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPjtcbiAgICBwcml2YXRlIHdhaXRpbmdXYXJuaW5nSW50ZXJ2YWxNcyA9IDEwMDAwO1xuICAgIHByaXZhdGUgcmVhZHlXYWl0ZXJzOiBBcnJheTxQZW5kaW5nUmVhZHlXYWl0ZXI+ID0gW107XG4gICAgcHJpdmF0ZSBvdXRib3VuZFF1ZXVlOiBBcnJheTxRdWV1ZWRPdXRib3VuZEV2ZW50PiA9IFtdO1xuICAgIHByaXZhdGUgb3V0Ym91bmRTZXF1ZW5jZSA9IDA7XG4gICAgcHJpdmF0ZSByZWdpc3RyeUZpbmdlcnByaW50Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgbGF0ZXN0UmVhZHlJbmZvPzogQ2xpZW50UmVhZHlJbmZvO1xuXG4gICAgLyoqXG4gICAgICogRGlzY292ZXIgYSBzZXJ2ZXIncyBlbmRwb2ludHMgZnJvbSBpdHMgYmFzZSBVUkwgYW5kIGNvbm5lY3QgdG8gaXQuXG4gICAgICpcbiAgICAgKiBGZXRjaGVzIHRoZSBiYXNlIFVSTCB3aXRoIGBBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb25gLCB2YWxpZGF0ZXMgdGhlXG4gICAgICogc2VydmljZSBkZXNjcmlwdG9yLCBhbmQgb3BlbnMgYSBTb2NrZXQuSU8gY29ubmVjdGlvbiB0byB0aGUgYmFzZSBVUkwnc1xuICAgICAqIG9yaWdpbiB3aXRoIHRoZSBhZHZlcnRpc2VkIHBhdGguIFRoZSBkZXNjcmlwdG9yIGlzIGV4cG9zZWQgYXNcbiAgICAgKiBgY2xpZW50LmRlc2NyaXB0b3JgIGFuZCB0aGUgb3JpZ2luIGFzIGBjbGllbnQuc2VydmVyT3JpZ2luYC4gUmVqZWN0c1xuICAgICAqIHdpdGggYSBgRGlzY292ZXJ5RXJyb3JgIHdoZW4gdGhlIHNlcnZlciBpcyB1bnJlYWNoYWJsZSwgZG9lcyBub3QgYW5zd2VyXG4gICAgICogd2l0aCBKU09OLCBvciBkb2VzIG5vdCBhZHZlcnRpc2UgYSBTb2NrZXQuSU8gZW5kcG9pbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzYyA9IGF3YWl0IFNvY2tldGh1YkNsaWVudC5jb25uZWN0KCdodHRwczovL3NoLmV4YW1wbGUub3JnJywge1xuICAgICAqICAgaW5pdFRpbWVvdXRNczogNTAwMCxcbiAgICAgKiB9KTtcbiAgICAgKiBhd2FpdCBzYy5yZWFkeSgpO1xuICAgICAqIGNvbnNvbGUubG9nKHNjLmVuZHBvaW50VXJsKCdodHRwQWN0aW9ucycpKTsgLy8gYWJzb2x1dGUgVVJMLCBvciB1bmRlZmluZWRcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGFzeW5jIGNvbm5lY3QoXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczogQ29ubmVjdE9wdGlvbnMgPSB7fSxcbiAgICApOiBQcm9taXNlPFNvY2tldGh1YkNsaWVudD4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpbyxcbiAgICAgICAgICAgIHNvY2tldE9wdGlvbnMsXG4gICAgICAgICAgICBmZXRjaCxcbiAgICAgICAgICAgIGRpc2NvdmVyeVRpbWVvdXRNcyxcbiAgICAgICAgICAgIC4uLmNsaWVudE9wdGlvbnNcbiAgICAgICAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBhd2FpdCBkaXNjb3ZlclNvY2tldGh1YihiYXNlVXJsLCB7XG4gICAgICAgICAgICBmZXRjaCxcbiAgICAgICAgICAgIGRpc2NvdmVyeVRpbWVvdXRNcyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNvY2tldFBhdGggPSBkZXNjcmlwdG9yLmVuZHBvaW50cz8uc29ja2V0SU87XG4gICAgICAgIGlmICghc29ja2V0UGF0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IERpc2NvdmVyeUVycm9yKFxuICAgICAgICAgICAgICAgIGBTb2NrZXRodWIgZGlzY292ZXJ5IGZhaWxlZDogJHtiYXNlVXJsfSBkb2VzIG5vdCBhZHZlcnRpc2UgYSBTb2NrZXQuSU8gZW5kcG9pbnQgKG9sZGVyIHNlcnZlcj8pOyBwYXNzIGEgc29ja2V0IHRvIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIHNvY2tldCBnb2VzIHRvIHRoZSBvcmlnaW4gdGhhdCBhbnN3ZXJlZCBkaXNjb3Zlcnk7IHRoZVxuICAgICAgICAvLyBkZXNjcmlwdG9yIG9ubHkgc2F5cyB3aGljaCBwYXRoIFNvY2tldC5JTyBpcyBtb3VudGVkIG9uIHRoZXJlLlxuICAgICAgICBjb25zdCBzZXJ2ZXJPcmlnaW4gPSBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbjtcbiAgICAgICAgY29uc3QgY3JlYXRlU29ja2V0ID0gYXdhaXQgcmVzb2x2ZVNvY2tldEZhY3RvcnkoaW8pO1xuICAgICAgICBjb25zdCBzb2NrZXQgPSBjcmVhdGVTb2NrZXQoc2VydmVyT3JpZ2luLCB7XG4gICAgICAgICAgICAuLi5zb2NrZXRPcHRpb25zLFxuICAgICAgICAgICAgcGF0aDogc29ja2V0UGF0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgU29ja2V0aHViQ2xpZW50KHNvY2tldCwgY2xpZW50T3B0aW9ucywge1xuICAgICAgICAgICAgZGVzY3JpcHRvcixcbiAgICAgICAgICAgIHNlcnZlck9yaWdpbixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHNvY2tldDogU29ja2V0LFxuICAgICAgICBvcHRpb25zOiBTb2NrZXRodWJDbGllbnRPcHRpb25zID0ge30sXG4gICAgICAgIGRpc2NvdmVyZWQ/OiB7IGRlc2NyaXB0b3I6IFNlcnZpY2VEZXNjcmlwdG9yOyBzZXJ2ZXJPcmlnaW46IHN0cmluZyB9LFxuICAgICkge1xuICAgICAgICBpZiAoIXNvY2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU29ja2V0aHViQ2xpZW50IHJlcXVpcmVzIGEgc29ja2V0LmlvIGluc3RhbmNlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NvY2tldCA9IHNvY2tldDtcbiAgICAgICAgdGhpcy5kZXNjcmlwdG9yID0gZGlzY292ZXJlZD8uZGVzY3JpcHRvcjtcbiAgICAgICAgdGhpcy5zZXJ2ZXJPcmlnaW4gPSBkaXNjb3ZlcmVkPy5zZXJ2ZXJPcmlnaW47XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGluaXRUaW1lb3V0TXM6IG9wdGlvbnMuaW5pdFRpbWVvdXRNcyA/PyA1MDAwLFxuICAgICAgICAgICAgbWF4UXVldWVkT3V0Ym91bmQ6IG9wdGlvbnMubWF4UXVldWVkT3V0Ym91bmQgPz8gMTAwMCxcbiAgICAgICAgICAgIG1heFF1ZXVlZEFnZU1zOiBvcHRpb25zLm1heFF1ZXVlZEFnZU1zID8/IDMwMDAwLFxuICAgICAgICAgICAgdmFsaWRhdGlvbjogb3B0aW9ucy52YWxpZGF0aW9uID8/IFwiYXV0b1wiLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc29ja2V0ID0gdGhpcy5jcmVhdGVQdWJsaWNFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTb2NrZXRJT0hhbmRsZXJzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3NvY2tldC5jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmNvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAodGhpcy5zb2NrZXQgYXMgdW5rbm93biBhcyB7IGlkPzogc3RyaW5nIH0pLmlkID0gdGhpcy5fc29ja2V0LmlkO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJjb25uZWN0XCIpO1xuICAgICAgICAgICAgdGhpcy5zdGFydEluaXRpYWxpemF0aW9uKFwiaW5pdGlhbC1jb25uZWN0XCIsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgc3RvcmVkIGNyZWRlbnRpYWxzIHRvIHByZXZlbnQgYXV0b21hdGljIHJlcGxheSBvbiByZWNvbm5lY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFsbCBzdG9yZWQgY3JlZGVudGlhbHMgZnJvbSBtZW1vcnkuIFVzZWZ1bCBmb3JcbiAgICAgKiBzZWN1cml0eS1zZW5zaXRpdmUgYXBwbGljYXRpb25zIHRoYXQgd2FudCB0byBwcmV2ZW50IGF1dG9tYXRpYyBjcmVkZW50aWFsXG4gICAgICogcmVwbGF5IHdoZW4gdGhlIHNvY2tldCByZWNvbm5lY3RzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gQ2xlYXIgY3JlZGVudGlhbHMgb24gZGlzY29ubmVjdFxuICAgICAqIHNjLnNvY2tldC5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgKiAgIHNjLmNsZWFyQ3JlZGVudGlhbHMoKTtcbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJDcmVkZW50aWFscygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXBsYXlTdG9yZS5ldmVudHMuY3JlZGVudGlhbHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIHBsYXRmb3JtIHJlZ2lzdHJ5IGRpc2NvdmVyZWQgZnJvbSB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSZWdpc3RlcmVkUGxhdGZvcm1zKCk6IEFycmF5PFBsYXRmb3JtUmVnaXN0cnlFbnRyeT4ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnBsYXRmb3JtUmVnaXN0cnkudmFsdWVzKCkpLm1hcCgocGxhdGZvcm0pID0+ICh7XG4gICAgICAgICAgICAuLi5wbGF0Zm9ybSxcbiAgICAgICAgICAgIHR5cGVzOiBbLi4ucGxhdGZvcm0udHlwZXNdLFxuICAgICAgICAgICAgc2NoZW1hczogeyAuLi5wbGF0Zm9ybS5zY2hlbWFzIH0sXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBzZXJ2ZXItcHJvdmlkZWQgc2NoZW1hL2NvbnRleHQgcmVnaXN0cnkgZGF0YSBpcyBsb2FkZWQuXG4gICAgICovXG4gICAgcHVibGljIGlzU2NoZW1hc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1JlYWR5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsaWVudCBoYXMgY29tcGxldGVkIHNjaGVtYSBpbml0aWFsaXphdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdFN0YXRlID09PSBcInJlYWR5XCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBjbGllbnQgaW5pdGlhbGl6YXRpb24gc3RhdGUuXG4gICAgICovXG4gICAgcHVibGljIGdldEluaXRTdGF0ZSgpOiBJbml0U3RhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5pbml0U3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBjYW5vbmljYWwgYmFzZSBjb250ZXh0cyBsZWFybmVkIGZyb20gdGhlIHNlcnZlciByZWdpc3RyeS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UmVnaXN0ZXJlZEJhc2VDb250ZXh0cygpOiB7IGFzOiBzdHJpbmc7IHNvY2tldGh1Yjogc3RyaW5nIH0ge1xuICAgICAgICBpZiAoIXRoaXMuYXNDb250ZXh0VXJsIHx8ICF0aGlzLnNvY2tldGh1YkNvbnRleHRVcmwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlNjaGVtYSByZWdpc3RyeSBub3QgbG9hZGVkIHlldC4gV2FpdCBmb3IgY2xpZW50IHJlYWR5IHN0YXRlIGFmdGVyIGNvbm5lY3QuXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhczogdGhpcy5hc0NvbnRleHRVcmwsXG4gICAgICAgICAgICBzb2NrZXRodWI6IHRoaXMuc29ja2V0aHViQ29udGV4dFVybCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGxhdGZvcm1TY2hlbWEoXG4gICAgICAgIHBsYXRmb3JtOiBzdHJpbmcsXG4gICAgICAgIHNjaGVtYVR5cGU6IFwibWVzc2FnZXNcIiB8IFwiY3JlZGVudGlhbHNcIiA9IFwibWVzc2FnZXNcIixcbiAgICApOiBvYmplY3QgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUGxhdGZvcm0gPSBwbGF0Zm9ybT8udHJpbSgpO1xuICAgICAgICBpZiAoIW5vcm1hbGl6ZWRQbGF0Zm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LmdldChub3JtYWxpemVkUGxhdGZvcm0pPy5zY2hlbWFzPy5bXG4gICAgICAgICAgICBzY2hlbWFUeXBlXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2FpdCBmb3Igc2NoZW1hIHJlZ2lzdHJ5IGRhdGEgZnJvbSB0aGUgc2VydmVyIGFuZCByZXR1cm4gdGhlIG5vcm1hbGl6ZWQgcGF5bG9hZC5cbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgcmVhZHkodGltZW91dE1zPykgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgd2FpdEZvclNjaGVtYXMoXG4gICAgICAgIHRpbWVvdXRNcyA9IDIwMDAsXG4gICAgKTogUHJvbWlzZTxQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnJlYWR5KHRpbWVvdXRNcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXYWl0IHVudGlsIHRoZSBjbGllbnQgcmVhY2hlcyBhIHJlYWR5IHN0YXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkeShcbiAgICAgICAgdGltZW91dE1zID0gdGhpcy5vcHRpb25zLmluaXRUaW1lb3V0TXMsXG4gICAgKTogUHJvbWlzZTxDbGllbnRSZWFkeUluZm8+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkeSgpICYmIHRoaXMubGF0ZXN0UmVhZHlJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMubGF0ZXN0UmVhZHlJbmZvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2FpdGVyOiBQZW5kaW5nUmVhZHlXYWl0ZXIgPSB7IHJlc29sdmUsIHJlamVjdCB9O1xuICAgICAgICAgICAgaWYgKHRpbWVvdXRNcyA+IDApIHtcbiAgICAgICAgICAgICAgICB3YWl0ZXIudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkeVdhaXRlcnMgPSB0aGlzLnJlYWR5V2FpdGVycy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZW50cnkpID0+IGVudHJ5ICE9PSB3YWl0ZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgU29ja2V0aHViQ2xpZW50IHJlYWR5KCkgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSwgdGltZW91dE1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVhZHlXYWl0ZXJzLnB1c2god2FpdGVyKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNvY2tldC5jb25uZWN0ZWQgJiYgdGhpcy5pbml0U3RhdGUgPT09IFwiaWRsZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydEluaXRpYWxpemF0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1JlYWR5T25jZSA/IFwicmVjb25uZWN0XCIgOiBcImluaXRpYWwtY29ubmVjdFwiLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIGFuIGFjdGl2aXR5IHN0cmVhbSBhZ2FpbnN0IGN1cnJlbnRseSByZWdpc3RlcmVkIHBsYXRmb3JtIHNjaGVtYXMuXG4gICAgICogUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgd2hlbiB2YWxpZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGVBY3Rpdml0eShhY3Rpdml0eTogQWN0aXZpdHlTdHJlYW0pOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnZhbGlkYXRpb24gPT09IFwib2ZmXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpdml0eS50eXBlID09PSBcImNyZWRlbnRpYWxzXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZUNyZWRlbnRpYWxzKGFjdGl2aXR5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWRhdGVBY3Rpdml0eVN0cmVhbShhY3Rpdml0eSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGQgY2Fub25pY2FsIFNvY2tldGh1YiBjb250ZXh0cyBmb3IgYSBwbGF0Zm9ybSB1c2luZyBzZXJ2ZXItcHJvdmlkZWQgc2NoZW1hIG1ldGFkYXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb250ZXh0Rm9yKHBsYXRmb3JtOiBzdHJpbmcpOiBBY3Rpdml0eVN0cmVhbVtcIkBjb250ZXh0XCJdIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwbGF0Zm9ybSAhPT0gXCJzdHJpbmdcIiB8fCBwbGF0Zm9ybS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJTb2NrZXRodWJDbGllbnQuY29udGV4dEZvcihwbGF0Zm9ybSkgcmVxdWlyZXMgYSBub24tZW1wdHkgcGxhdGZvcm0gc3RyaW5nXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmFzQ29udGV4dFVybCB8fCAhdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJTY2hlbWEgcmVnaXN0cnkgbm90IGxvYWRlZCB5ZXQuIFdhaXQgZm9yIGNsaWVudCByZWFkeSBzdGF0ZSBhZnRlciBjb25uZWN0LlwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQbGF0Zm9ybSA9IHBsYXRmb3JtLnRyaW0oKTtcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLnBsYXRmb3JtUmVnaXN0cnkuZ2V0KG5vcm1hbGl6ZWRQbGF0Zm9ybSk7XG4gICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVzID0gQXJyYXkuZnJvbSh0aGlzLnBsYXRmb3JtUmVnaXN0cnkua2V5cygpKS5zb3J0KCk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYHVua25vd24gcGxhdGZvcm0gJyR7bm9ybWFsaXplZFBsYXRmb3JtfScuIFJlZ2lzdGVyZWQgcGxhdGZvcm1zOiAke25hbWVzLmpvaW4oXCIsIFwiKX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3RoaXMuYXNDb250ZXh0VXJsLCB0aGlzLnNvY2tldGh1YkNvbnRleHRVcmwsIGVudHJ5LmNvbnRleHRVcmxdO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUHVibGljRW1pdHRlcigpOiBDdXN0b21FbWl0dGVyIHtcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gbmV3IEV2ZW50RW1pdHRlcigpIGFzIEN1c3RvbUVtaXR0ZXI7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBzb2NrZXQuX2VtaXQgPSBzb2NrZXQuZW1pdDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHNvY2tldC5lbWl0ID0gKGV2ZW50LCBjb250ZW50LCBjYWxsYmFjayk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQdWJsaWNFbWl0KGV2ZW50IGFzIHN0cmluZywgY29udGVudCwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBzb2NrZXQuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIHNvY2tldC5kaXNjb25uZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc29ja2V0LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfTtcbiAgICAgICAgc29ja2V0LmNvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zb2NrZXQuY29ubmVjdCgpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFzayBzZXJ2ZXIgZm9yIHRoZSBsYXRlc3QgcGxhdGZvcm0vY29udGV4dCByZWdpc3RyeSB2aWEgYWNrIGNhbGxiYWNrLlxuICAgICAqIFRoaXMga2VlcHMgY2xpZW50IGNvbnRleHQgY29tcG9zaXRpb24gYWxpZ25lZCB3aXRoIHNlcnZlciBzY2hlbWEgc3RhdGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXF1ZXN0U2NoZW1hUmVnaXN0cnkoKSB7XG4gICAgICAgIGNvbnN0IHNvY2tldExpa2UgPSB0aGlzLl9zb2NrZXQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgaWYgKCEoXCJpb1wiIGluIHNvY2tldExpa2UpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRWNobyB0aGUgZmluZ2VycHJpbnQgd2UgbGFzdCBhcHBsaWVkIHNvIHRoZSBzZXJ2ZXIgY2FuIHNob3J0LWNpcmN1aXRcbiAgICAgICAgLy8gd2l0aCBhbiBcInVuY2hhbmdlZFwiIHJlcGx5IG9uIHJlY29ubmVjdC9yZS1yZXF1ZXN0ICgjMTExNykuXG4gICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KFxuICAgICAgICAgICAgXCJzY2hlbWFzXCIsXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdHJ5RmluZ2VycHJpbnQsXG4gICAgICAgICAgICAocGF5bG9hZDogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2NoZW1hc1BheWxvYWQocGF5bG9hZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGx5IHNlcnZlci1wcm92aWRlZCByZWdpc3RyeSBtZXRhZGF0YSB0byBsb2NhbCBydW50aW1lIHN0YXRlLlxuICAgICAqIEFsc28gcmVnaXN0ZXJzIHBsYXRmb3JtIGNvbnRleHRzL3NjaGVtYXMgd2l0aCBAc29ja2V0aHViL3NjaGVtYXMgdmFsaWRhdG9yc1xuICAgICAqIHNvIGxvY2FsIHZhbGlkYXRpb24gdXNlcyB0aGUgc2FtZSBjYW5vbmljYWwgc291cmNlcyBhcyB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXBwbHlQbGF0Zm9ybVJlZ2lzdHJ5KFxuICAgICAgICBwYXlsb2FkOiB1bmtub3duLFxuICAgICk6IFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VQbGF0Zm9ybVJlZ2lzdHJ5KHBheWxvYWQpO1xuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwaVZlcnNpb24gPSBwYXJzZWQuYXBpVmVyc2lvbjtcbiAgICAgICAgdGhpcy5hc0NvbnRleHRVcmwgPSBwYXJzZWQuYXNDb250ZXh0VXJsO1xuICAgICAgICB0aGlzLnNvY2tldGh1YkNvbnRleHRVcmwgPSBwYXJzZWQuc29ja2V0aHViQ29udGV4dFVybDtcbiAgICAgICAgdGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5ID0gcGFyc2VkLnBsYXRmb3JtcztcbiAgICAgICAgZm9yIChjb25zdCBwbGF0Zm9ybSBvZiBwYXJzZWQucGxhdGZvcm1zLnZhbHVlcygpKSB7XG4gICAgICAgICAgICByZWdpc3RlclBsYXRmb3JtU2NoZW1hcyhwbGF0Zm9ybSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBheWxvYWQgPSB0aGlzLmJ1aWxkUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQoKTtcbiAgICAgICAgLy8gRGVkdXAgb25seSBvbiB0aGUgc2VydmVyJ3MgZmluZ2VycHJpbnQsIHdoaWNoIGlzIGNvbXB1dGVkIG92ZXIgdGhlXG4gICAgICAgIC8vIGZ1bGwgcGF5bG9hZCAoaW5jbHVkaW5nIHNjaGVtYSBib2RpZXMgYW5kIHR5cGVzKS4gV2l0aG91dCBvbmUgd2UgbGVhdmVcbiAgICAgICAgLy8gdGhlIGZpbmdlcnByaW50IHVuc2V0IHNvIGhhbmRsZVNjaGVtYXNQYXlsb2FkIG5ldmVyIHNob3J0LWNpcmN1aXRzIGFuZFxuICAgICAgICAvLyBhIHNjaGVtYSBjaGFuZ2UgY2FuJ3QgYmUgc2lsZW50bHkgbWlzc2VkICgjMTExNyByZXZpZXcpLlxuICAgICAgICBjb25zdCByZWdpc3RyeSA9IHBheWxvYWQgYXMgUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQ7XG4gICAgICAgIHRoaXMucmVnaXN0cnlGaW5nZXJwcmludCA9XG4gICAgICAgICAgICB0eXBlb2YgcmVnaXN0cnkuZmluZ2VycHJpbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICA/IHJlZ2lzdHJ5LmZpbmdlcnByaW50XG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIC8vIEVtaXQgbm9ybWFsaXplZCByZWdpc3RyeSBwYXlsb2FkIHNvIGFwcCBjb2RlIHJlY2VpdmVzIGEgc3RhYmxlIHNoYXBlLlxuICAgICAgICB0aGlzLnNvY2tldC5fZW1pdChcInNjaGVtYXNcIiwgbm9ybWFsaXplZFBheWxvYWQpO1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZFBheWxvYWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkKCk6IFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFwaVZlcnNpb246IHRoaXMuYXBpVmVyc2lvbixcbiAgICAgICAgICAgIGNvbnRleHRzOlxuICAgICAgICAgICAgICAgIHRoaXMuYXNDb250ZXh0VXJsICYmIHRoaXMuc29ja2V0aHViQ29udGV4dFVybFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXM6IHRoaXMuYXNDb250ZXh0VXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXRodWI6IHRoaXMuc29ja2V0aHViQ29udGV4dFVybCxcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGxhdGZvcm1zOiB0aGlzLmdldFJlZ2lzdGVyZWRQbGF0Zm9ybXMoKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkUmVhZHlJbmZvKHJlYXNvbjogUmVhZHlSZWFzb24pOiBDbGllbnRSZWFkeUluZm8gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmFwaVZlcnNpb24gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgIXRoaXMuYXNDb250ZXh0VXJsIHx8XG4gICAgICAgICAgICAhdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdGU6IFwicmVhZHlcIixcbiAgICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgICAgIGFwaVZlcnNpb246IHRoaXMuYXBpVmVyc2lvbixcbiAgICAgICAgICAgIGNvbnRleHRzOiB7XG4gICAgICAgICAgICAgICAgYXM6IHRoaXMuYXNDb250ZXh0VXJsLFxuICAgICAgICAgICAgICAgIHNvY2tldGh1YjogdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBsYXRmb3JtczogdGhpcy5nZXRSZWdpc3RlcmVkUGxhdGZvcm1zKCkubWFwKChwbGF0Zm9ybSkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogcGxhdGZvcm0uaWQsXG4gICAgICAgICAgICAgICAgYXBpVmVyc2lvbjogcGxhdGZvcm0uYXBpVmVyc2lvbixcbiAgICAgICAgICAgICAgICBjb250ZXh0VXJsOiBwbGF0Zm9ybS5jb250ZXh0VXJsLFxuICAgICAgICAgICAgICAgIGNvbnRleHRWZXJzaW9uOiBwbGF0Zm9ybS5jb250ZXh0VmVyc2lvbixcbiAgICAgICAgICAgICAgICBzY2hlbWFWZXJzaW9uOiBwbGF0Zm9ybS5zY2hlbWFWZXJzaW9uLFxuICAgICAgICAgICAgICAgIHR5cGVzOiBbLi4ucGxhdGZvcm0udHlwZXNdLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzb2x2ZVJlYWR5V2FpdGVycyhpbmZvOiBDbGllbnRSZWFkeUluZm8pIHtcbiAgICAgICAgY29uc3Qgd2FpdGVycyA9IHRoaXMucmVhZHlXYWl0ZXJzO1xuICAgICAgICB0aGlzLnJlYWR5V2FpdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHdhaXRlciBvZiB3YWl0ZXJzKSB7XG4gICAgICAgICAgICBpZiAod2FpdGVyLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHdhaXRlci50aW1lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3YWl0ZXIucmVzb2x2ZShpbmZvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVqZWN0UmVhZHlXYWl0ZXJzKGVycjogRXJyb3IpIHtcbiAgICAgICAgY29uc3Qgd2FpdGVycyA9IHRoaXMucmVhZHlXYWl0ZXJzO1xuICAgICAgICB0aGlzLnJlYWR5V2FpdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHdhaXRlciBvZiB3YWl0ZXJzKSB7XG4gICAgICAgICAgICBpZiAod2FpdGVyLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHdhaXRlci50aW1lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3YWl0ZXIucmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRJbml0RXJyb3IoXG4gICAgICAgIGVycm9yOiBzdHJpbmcsXG4gICAgICAgIHBoYXNlOiBJbml0RXJyb3JQaGFzZSxcbiAgICAgICAgcmV0cnlpbmc6IGJvb2xlYW4sXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwiaW5pdF9lcnJvclwiLCB7XG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIHBoYXNlLFxuICAgICAgICAgICAgcmV0cnlpbmcsXG4gICAgICAgIH0gc2F0aXNmaWVzIENsaWVudEluaXRFcnJvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q2xpZW50RXJyb3IoXG4gICAgICAgIGV2ZW50OiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiB1bmtub3duLFxuICAgICAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgICApIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBjYWxsYmFjayh7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJjbGllbnRfZXJyb3JcIiwge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFySW5pdFRpbWVycygpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5pdFRpbWVvdXRUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaW5pdFRpbWVvdXRUaW1lcik7XG4gICAgICAgICAgICB0aGlzLmluaXRUaW1lb3V0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud2FpdGluZ1dhcm5pbmdUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLndhaXRpbmdXYXJuaW5nVGltZXIpO1xuICAgICAgICAgICAgdGhpcy53YWl0aW5nV2FybmluZ1RpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydFdhaXRpbmdXYXJuaW5ncygpIHtcbiAgICAgICAgaWYgKHRoaXMud2FpdGluZ1dhcm5pbmdUaW1lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2FpdGluZ1dhcm5pbmdUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVhZHkoKSB8fCB0aGlzLmluaXRTdGF0ZSA9PT0gXCJjbG9zZWRcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJJbml0VGltZXJzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcXVldWVTaXplID0gdGhpcy5vdXRib3VuZFF1ZXVlLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG9sZGVzdCA9IHRoaXMub3V0Ym91bmRRdWV1ZVswXTtcbiAgICAgICAgICAgIGNvbnN0IG9sZGVzdEFnZVNlY29uZHMgPSBvbGRlc3RcbiAgICAgICAgICAgICAgICA/ICgoRGF0ZS5ub3coKSAtIG9sZGVzdC5lbnF1ZXVlZEF0KSAvIDEwMDApLnRvRml4ZWQoMSlcbiAgICAgICAgICAgICAgICA6IFwiMC4wXCI7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgYFtTb2NrZXRodWJDbGllbnRdIFN0aWxsIHdhaXRpbmcgZm9yIHNjaGVtYXM7IHF1ZXVlZCBvdXRib3VuZCBtZXNzYWdlczogJHtxdWV1ZVNpemV9OyBvbGRlc3QgcXVldWVkIGFnZTogJHtvbGRlc3RBZ2VTZWNvbmRzfXMuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sIHRoaXMud2FpdGluZ1dhcm5pbmdJbnRlcnZhbE1zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0SW5pdGlhbGl6YXRpb24ocmVhc29uOiBSZWFkeVJlYXNvbiwgcmVwbGF5T25SZWFkeTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXRoaXMuc29ja2V0LmNvbm5lY3RlZCB8fCB0aGlzLmluaXRTdGF0ZSA9PT0gXCJjbG9zZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG9rZW4gPSArK3RoaXMuaW5pdFRva2VuQ291bnRlcjtcbiAgICAgICAgdGhpcy5pbml0Q3ljbGUgPSB7XG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgICAgIHN0YXJ0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIHJlcGxheU9uUmVhZHksXG4gICAgICAgICAgICB0aW1lZE91dDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpbml0aWFsaXppbmdcIjtcbiAgICAgICAgdGhpcy5jbGVhckluaXRUaW1lcnMoKTtcblxuICAgICAgICB0aGlzLmluaXRUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbml0Q3ljbGUgfHwgdGhpcy5pbml0Q3ljbGUudG9rZW4gIT09IHRva2VuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbml0Q3ljbGUudGltZWRPdXQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUgPSBcImluaXRfZXJyb3JcIjtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRNc2cgPSBgSW5pdGlhbGl6YXRpb24gdGltZWQgb3V0IGFmdGVyICR7dGhpcy5vcHRpb25zLmluaXRUaW1lb3V0TXN9bXMgd2FpdGluZyBmb3Igc2NoZW1hc2A7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgYFtTb2NrZXRodWJDbGllbnRdICR7dGltZW91dE1zZ307IHF1ZXVlZCBvdXRib3VuZCBtZXNzYWdlczogJHt0aGlzLm91dGJvdW5kUXVldWUubGVuZ3RofS4gV2FpdGluZyBmb3Igc2NoZW1hcyBldmVudCBmcm9tIHNlcnZlci5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdEluaXRFcnJvcih0aW1lb3V0TXNnLCBcInRpbWVvdXRcIiwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zdGFydFdhaXRpbmdXYXJuaW5ncygpO1xuICAgICAgICB9LCB0aGlzLm9wdGlvbnMuaW5pdFRpbWVvdXRNcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFB1bGwgdGhlIGxhdGVzdCByZWdpc3RyeSBmcm9tIHRoZSBzZXJ2ZXIgZm9yIHRoaXMgaW5pdCBjeWNsZS5cbiAgICAgICAgICAgIHRoaXMucmVxdWVzdFNjaGVtYVJlZ2lzdHJ5KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUgPSBcImluaXRfZXJyb3JcIjtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgICB0aGlzLmVtaXRJbml0RXJyb3IobWVzc2FnZSwgXCJzY2hlbWFzLXJlcXVlc3RcIiwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zdGFydFdhaXRpbmdXYXJuaW5ncygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXJrUmVhZHkocmVhc29uOiBSZWFkeVJlYXNvbikge1xuICAgICAgICBjb25zdCBjeWNsZSA9IHRoaXMuaW5pdEN5Y2xlO1xuICAgICAgICBjb25zdCByZXBsYXlPblJlYWR5ID0gQm9vbGVhbihjeWNsZT8ucmVwbGF5T25SZWFkeSk7XG4gICAgICAgIHRoaXMuaW5pdEN5Y2xlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNsZWFySW5pdFRpbWVycygpO1xuICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IFwicmVhZHlcIjtcbiAgICAgICAgdGhpcy5oYXNSZWFkeU9uY2UgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLmJ1aWxkUmVhZHlJbmZvKHJlYXNvbik7XG4gICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGJ1aWxkIHJlYWR5IHBheWxvYWRcIik7XG4gICAgICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IFwiaW5pdF9lcnJvclwiO1xuICAgICAgICAgICAgdGhpcy5lbWl0SW5pdEVycm9yKGVyci5tZXNzYWdlLCBcInNjaGVtYXMtYXBwbHlcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnJlamVjdFJlYWR5V2FpdGVycyhlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwicmVhZHlcIiwgaW5mbyk7XG4gICAgICAgIHRoaXMubGF0ZXN0UmVhZHlJbmZvID0gaW5mbztcbiAgICAgICAgdGhpcy5yZXNvbHZlUmVhZHlXYWl0ZXJzKGluZm8pO1xuXG4gICAgICAgIGlmIChyZXBsYXlPblJlYWR5KSB7XG4gICAgICAgICAgICAvLyBSZXBsYXkgcHJldmlvdXNseSBzZW50IHN0YXRlIGJlZm9yZSBmbHVzaGluZyBuZXdseSBxdWV1ZWQgb3V0Ym91bmQgZXZlbnRzLlxuICAgICAgICAgICAgY29uc3QgeyBjcmVkZW50aWFscywgY29ubmVjdCwgam9pbiB9ID0gdGhpcy5yZXBsYXlTdG9yZS5ldmVudHM7XG4gICAgICAgICAgICB0aGlzLnJlcGxheShcImNyZWRlbnRpYWxzXCIsIGNyZWRlbnRpYWxzKTtcbiAgICAgICAgICAgIHRoaXMucmVwbGF5KFwibWVzc2FnZVwiLCBjb25uZWN0KTtcbiAgICAgICAgICAgIHRoaXMucmVwbGF5KFwibWVzc2FnZVwiLCBqb2luKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmx1c2hPdXRib3VuZFF1ZXVlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTY2hlbWFzUGF5bG9hZChwYXlsb2FkOiB1bmtub3duKSB7XG4gICAgICAgIGlmICghcGF5bG9hZCB8fCB0eXBlb2YgcGF5bG9hZCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNlcnZlciBzaG9ydC1jaXJjdWl0OiB0aGUgcmVnaXN0cnkgbWF0Y2hlcyB0aGUgZmluZ2VycHJpbnQgd2UgZWNob2VkLFxuICAgICAgICAvLyBzbyBub3RoaW5nIHdhcyByZS1zZW50ICgjMTExNykuIE9ubHkgaG9ub3IgdGhpcyB3aGVuIHdlIGFjdHVhbGx5IGhvbGRcbiAgICAgICAgLy8gYSBjYWNoZWQgcmVnaXN0cnkgdG8gcmV1c2Ug4oCUIGEgbWFsZm9ybWVkIG9yIGVtcHR5IFwidW5jaGFuZ2VkXCIgcmVwbHlcbiAgICAgICAgLy8gbXVzdCBub3QgZmFzdC1wYXRoIGluaXQgdG8gcmVhZHkgd2l0aCBubyB2YWxpZGF0b3JzIHJlZ2lzdGVyZWQuXG4gICAgICAgIGlmICgocGF5bG9hZCBhcyBQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZCkudW5jaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCBoYXZlQ2FjaGVkUmVnaXN0cnkgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnJlZ2lzdHJ5RmluZ2VycHJpbnQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXRmb3JtUmVnaXN0cnkuc2l6ZSA+IDA7XG4gICAgICAgICAgICBpZiAoaGF2ZUNhY2hlZFJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdEN5Y2xlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1JlYWR5KHRoaXMuaW5pdEN5Y2xlLnJlYXNvbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRTdGF0ZSAhPT0gXCJyZWFkeVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1JlYWR5KFwic2NoZW1hcy11cGRhdGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE5vdGhpbmcgY2FjaGVkIHRvIHJldXNlOiBmYWxsIHRocm91Z2ggc28gYXBwbHlQbGF0Zm9ybVJlZ2lzdHJ5XG4gICAgICAgICAgICAvLyByZWplY3RzIHRoZSBjb250ZW50bGVzcyBwYXlsb2FkIGFuZCBzdXJmYWNlcyBhbiBpbml0IGVycm9yLlxuICAgICAgICB9XG4gICAgICAgIC8vIERlZHVwIG9ubHkgYWdhaW5zdCB0aGUgc2VydmVyLXN1cHBsaWVkIGZpbmdlcnByaW50ICh3aGljaCBpcyB3aGF0IHdlXG4gICAgICAgIC8vIHN0b3JlZCBpbiBhcHBseVBsYXRmb3JtUmVnaXN0cnkpOyBhYnNlbnQgb25lLCBhbHdheXMgcmUtYXBwbHkuXG4gICAgICAgIGNvbnN0IGluY29taW5nRmluZ2VycHJpbnQgPSAocGF5bG9hZCBhcyBQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZClcbiAgICAgICAgICAgIC5maW5nZXJwcmludDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUgPT09IFwicmVhZHlcIiAmJlxuICAgICAgICAgICAgIXRoaXMuaW5pdEN5Y2xlICYmXG4gICAgICAgICAgICBpbmNvbWluZ0ZpbmdlcnByaW50ICYmXG4gICAgICAgICAgICBpbmNvbWluZ0ZpbmdlcnByaW50ID09PSB0aGlzLnJlZ2lzdHJ5RmluZ2VycHJpbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbml0U3RhdGUgPT09IFwicmVhZHlcIiAmJiAhdGhpcy5pbml0Q3ljbGUpIHtcbiAgICAgICAgICAgIC8vIEEgc2VydmVyLXNpZGUgc2NoZW1hIHVwZGF0ZSBhcnJpdmVkIHdoaWxlIGFscmVhZHkgcnVubmluZy5cbiAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpbml0aWFsaXppbmdcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXlsb2FkID0gdGhpcy5hcHBseVBsYXRmb3JtUmVnaXN0cnkocGF5bG9hZCk7XG4gICAgICAgIGlmICghbm9ybWFsaXplZFBheWxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpbml0X2Vycm9yXCI7XG4gICAgICAgICAgICB0aGlzLmVtaXRJbml0RXJyb3IoXG4gICAgICAgICAgICAgICAgXCJSZWNlaXZlZCBpbnZhbGlkIHNjaGVtYXMgcGF5bG9hZCBmcm9tIHNlcnZlclwiLFxuICAgICAgICAgICAgICAgIFwic2NoZW1hcy1hcHBseVwiLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zdGFydFdhaXRpbmdXYXJuaW5ncygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdEN5Y2xlKSB7XG4gICAgICAgICAgICB0aGlzLm1hcmtSZWFkeSh0aGlzLmluaXRDeWNsZS5yZWFzb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFya1JlYWR5KFwic2NoZW1hcy11cGRhdGVcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVQdWJsaWNFbWl0KFxuICAgICAgICBldmVudDogc3RyaW5nLFxuICAgICAgICBjb250ZW50OiB1bmtub3duLFxuICAgICAgICBjYWxsYmFjaz86IHVua25vd24sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlZEV2ZW50OiBRdWV1ZWRPdXRib3VuZEV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICBlbnF1ZXVlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgc2VxdWVuY2U6IHRoaXMub3V0Ym91bmRTZXF1ZW5jZSsrLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghdGhpcy5pc1JlYWR5KCkpIHtcbiAgICAgICAgICAgIC8vIEhvbGQgb3V0Ym91bmQgdW50aWwgc2NoZW1hcy9jb250ZXh0IG1ldGFkYXRhIGlzIGxvYWRlZC5cbiAgICAgICAgICAgIHRoaXMuZW5xdWV1ZU91dGJvdW5kKHF1ZXVlZEV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbmRPdXRib3VuZChxdWV1ZWRFdmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbnF1ZXVlT3V0Ym91bmQocXVldWVkRXZlbnQ6IFF1ZXVlZE91dGJvdW5kRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vdXRib3VuZFF1ZXVlLnB1c2gocXVldWVkRXZlbnQpO1xuICAgICAgICBpZiAodGhpcy5vdXRib3VuZFF1ZXVlLmxlbmd0aCA8PSB0aGlzLm9wdGlvbnMubWF4UXVldWVkT3V0Ym91bmQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkcm9wcGVkID0gdGhpcy5vdXRib3VuZFF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmICghZHJvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdENsaWVudEVycm9yKFxuICAgICAgICAgICAgZHJvcHBlZC5ldmVudCxcbiAgICAgICAgICAgIGRyb3BwZWQuY2FsbGJhY2ssXG4gICAgICAgICAgICBcIlNvY2tldGh1YkNsaWVudCBxdWV1ZSBvdmVyZmxvdyBiZWZvcmUgcmVhZHlcIixcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZsdXNoT3V0Ym91bmRRdWV1ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVhZHkoKSB8fCB0aGlzLm91dGJvdW5kUXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgcXVldWVkID0gdGhpcy5vdXRib3VuZFF1ZXVlLnNvcnQoXG4gICAgICAgICAgICAoYSwgYikgPT4gYS5zZXF1ZW5jZSAtIGIuc2VxdWVuY2UsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3V0Ym91bmRRdWV1ZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHF1ZXVlZCkge1xuICAgICAgICAgICAgaWYgKG5vdyAtIGVudHJ5LmVucXVldWVkQXQgPiB0aGlzLm9wdGlvbnMubWF4UXVldWVkQWdlTXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDbGllbnRFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmNhbGxiYWNrLFxuICAgICAgICAgICAgICAgICAgICBgU29ja2V0aHViQ2xpZW50IHF1ZXVlZCBtZXNzYWdlIGV4cGlyZWQgYWZ0ZXIgJHt0aGlzLm9wdGlvbnMubWF4UXVldWVkQWdlTXN9bXMgYmVmb3JlIGluaXRpYWxpemF0aW9uYCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZW5kT3V0Ym91bmQoZW50cnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZW5kT3V0Ym91bmQoZW50cnk6IFF1ZXVlZE91dGJvdW5kRXZlbnQpIHtcbiAgICAgICAgbGV0IG91dGdvaW5nID0gZW50cnkuY29udGVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChlbnRyeS5ldmVudCA9PT0gXCJjcmVkZW50aWFsc1wiIHx8IGVudHJ5LmV2ZW50ID09PSBcIm1lc3NhZ2VcIikge1xuICAgICAgICAgICAgICAgIC8vIFJ1biBjYW5vbmljYWwgZXhwYW5zaW9uL25vcm1hbGl6YXRpb24gYXQgc2VuZCB0aW1lIHNvIHF1ZXVlZCBhbmRcbiAgICAgICAgICAgICAgICAvLyBpbW1lZGlhdGUgc2VuZHMgZm9sbG93IHRoZSBleGFjdCBzYW1lIHBhdGguXG4gICAgICAgICAgICAgICAgb3V0Z29pbmcgPSBub3JtYWxpemVBY3Rpdml0eVN0cmVhbShcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChvdXRnb2luZyAmJiB0eXBlb2Ygb3V0Z29pbmcgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aXZpdHkgPSBvdXRnb2luZyBhcyBBY3Rpdml0eVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmV2ZW50ID09PSBcImNyZWRlbnRpYWxzXCIgJiYgIWFjdGl2aXR5LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5LnR5cGUgPSBcImNyZWRlbnRpYWxzXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHkuYWN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBhY3Rpdml0eS5hY3RvciA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWFjdGl2aXR5LmFjdG9yLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eS5hY3Rvci50eXBlID0gXCJwZXJzb25cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LnNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHRoaXMudmFsaWRhdGVBY3Rpdml0eShcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dGdvaW5nIGFzIEFjdGl2aXR5U3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXRDbGllbnRFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5ldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5jYWxsYmFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgU29ja2V0aHViQ2xpZW50IHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25FcnJvcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjYWxsYmFjayA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgICAgICAgaWYgKGVudHJ5LmV2ZW50ID09PSBcImNyZWRlbnRpYWxzXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGxheVN0b3JlLnJlY29yZENyZWRlbnRpYWxzKG91dGdvaW5nIGFzIEFjdGl2aXR5U3RyZWFtKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkuZXZlbnQgPT09IFwibWVzc2FnZVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NvY2tldC5jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBsYXlTdG9yZS5yZWNvcmRNZXNzYWdlKG91dGdvaW5nIGFzIEFjdGl2aXR5U3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSB0aGlzLnJlbWVtYmVyUmVxdWVzdGVkUmVuYW1lKFxuICAgICAgICAgICAgICAgICAgICBvdXRnb2luZyBhcyBBY3Rpdml0eVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KGVudHJ5LmV2ZW50LCBvdXRnb2luZywgY2FsbGJhY2spO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgICB0aGlzLmVtaXRDbGllbnRFcnJvcihlbnRyeS5ldmVudCwgZW50cnkuY2FsbGJhY2ssIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2cobXNnOiBzdHJpbmcsIG9iaj86IHVua25vd24pIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZywgb2JqKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJTb2NrZXRJT0hhbmRsZXJzKCkge1xuICAgICAgICAvLyByZWdpc3RlciBmb3IgZXZlbnRzIHRoYXQgZ2l2ZSB1cyBpbmZvcm1hdGlvbiBvbiBjb25uZWN0aW9uIHN0YXR1c1xuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJjb25uZWN0XCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmlkID0gdGhpcy5fc29ja2V0LmlkO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwiY29ubmVjdFwiKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRJbml0aWFsaXphdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1JlYWR5T25jZSA/IFwicmVjb25uZWN0XCIgOiBcImluaXRpYWwtY29ubmVjdFwiLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwiY29ubmVjdF9lcnJvclwiLCAob2JqPzogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJjb25uZWN0X2Vycm9yXCIsIG9iaik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJkaXNjb25uZWN0XCIsIChvYmo/OiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRTdGF0ZSAhPT0gXCJjbG9zZWRcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpZGxlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNsZWFySW5pdFRpbWVycygpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJkaXNjb25uZWN0XCIsIG9iaik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJzY2hlbWFzXCIsIChwYXlsb2FkOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNjaGVtYXNQYXlsb2FkKHBheWxvYWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyB1c2UgYXMgbWlkZGxld2FyZSB0byByZWNlaXZlIGluY29taW5nIFNvY2tldGh1YiBtZXNzYWdlcyBhbmQgdW5wYWNrIHRoZW1cbiAgICAgICAgLy8gTm9ybWFsaXplIGFuZCBsaW50IGJlZm9yZSBwYXNzaW5nIHRoZW0gYWxvbmcgdG8gdGhlIGFwcC5cbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwibWVzc2FnZVwiLCAob2JqKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmNvbWluZyA9IG5vcm1hbGl6ZUFjdGl2aXR5U3RyZWFtKG9iaik7XG4gICAgICAgICAgICB0aGlzLmZvbGxvd0FjdG9yUmVuYW1lKGluY29taW5nKTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwibWVzc2FnZVwiLCBpbmNvbWluZyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEtlZXBzIHRoZSByZXBsYXkgbWFwcyBvbiB0aGUgYWN0b3IgdGhlIHNlcnZlciBub3cga25vd3MgYWZ0ZXIgYSByZW5hbWVcbiAgICAgKiB0aGUgc2VydmVyIHJlcG9ydGVkLlxuICAgICAqXG4gICAgICogQSBzZXJ2ZXItZm9yY2VkIG5pY2sgY2hhbmdlIGFycml2ZXMgYXMgYW4gaW5jb21pbmcgYHVwZGF0ZWAgd2l0aFxuICAgICAqIGBvYmplY3QudHlwZTogXCJhZGRyZXNzXCJgLiBUaGUgc3RvcmVkIGNyZWRlbnRpYWxzLCBjb25uZWN0LCBhbmQgam9pblxuICAgICAqIGVudHJpZXMgYXJlIGtleWVkIGJ5IHRoZSBhY3RvciBhdCBzZW5kIHRpbWUsIHNvIGxlZnQgYWxvbmUgYSByZWNvbm5lY3RcbiAgICAgKiB3b3VsZCByZXBsYXkgdGhlIG9sZCBuaWNrIGFuZCBvcGVuIGEgc2Vjb25kIGNvbm5lY3Rpb24gdW5kZXIgYW5cbiAgICAgKiBpZGVudGl0eSB0aGlzIG9uZSBubyBsb25nZXIgaG9sZHMuXG4gICAgICpcbiAgICAgKiBPbmx5IGVudHJpZXMgZm9yIHRoZSByZW5hbWVkIGFjdG9yIG9uIHRoYXQgcGxhdGZvcm0gbW92ZS4gVGhlIG1hcHMgaG9sZFxuICAgICAqIG9ubHkgdGhpcyBjbGllbnQncyBvd24gYWN0b3JzLCBhbmQgYHJlbWVtYmVyUmVxdWVzdGVkUmVuYW1lYCBrZWVwcyB0aGVtXG4gICAgICogb24gdGhlIG5pY2sgdGhpcyBjb25uZWN0aW9uIGN1cnJlbnRseSBob2xkcywgc28gYSByZW5hbWUgb2Ygc29tZSBvdGhlclxuICAgICAqIHVzZXIgKGluY2x1ZGluZyBvbmUgd2hvIGxhdGVyIHRvb2sgYSBuaWNrIHRoaXMgY2xpZW50IHJlbGVhc2VkKSBuZXZlclxuICAgICAqIG1hdGNoZXMgYSBzdG9yZWQgZW50cnkuXG4gICAgICpcbiAgICAgKiBBIHJlamVjdGVkIG5pY2sgY2hhbmdlIGlzIG5vdCBhIHJlbmFtZS4gVGhlIHNlcnZlciBlY2hvZXMgdGhlIGZhaWxlZFxuICAgICAqIGpvYiDigJQgdGhlIG9yaWdpbmFsIHVwZGF0ZSBwbHVzIGBlcnJvcmAg4oCUIHRvIGV2ZXJ5IG90aGVyIHNlc3Npb24gc2hhcmluZ1xuICAgICAqIHRoZSBjb25uZWN0aW9uLiBGb2xsb3dpbmcgdGhhdCBlY2hvIHdvdWxkIHBvaW50IHRob3NlIHNlc3Npb25zIGF0IGFcbiAgICAgKiBuaWNrIHRoZSBzZXJ2ZXIgcmVmdXNlZCwgc28gdGhlaXIgbmV4dCBjb21tYW5kIG1pc3NlcyB0aGUgbGl2ZSB3b3JrZXJcbiAgICAgKiBhbmQgb3BlbnMgYSBzZWNvbmQgY29ubmVjdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGZvbGxvd0FjdG9yUmVuYW1lKGluY29taW5nOiBBY3Rpdml0eVN0cmVhbSk6IHZvaWQge1xuICAgICAgICBpZiAoaXNFcnJvclJlc3VsdChpbmNvbWluZykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBY3RvclJlbmFtZShpbmNvbWluZykpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZVJlcGxheVN0YXRlKGluY29taW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmVzIHRoZSByZXBsYXkgbWFwcyB3aGVuIGEgbmljayBjaGFuZ2UgdGhpcyBjbGllbnQgcmVxdWVzdGVkIGlzXG4gICAgICogYWNrbm93bGVkZ2VkLiBUaGUgcGxhdGZvcm0gY29uc3VtZXMgdGhlIHNlcnZlcidzIGNvbmZpcm1hdGlvbiBhcyB0aGVcbiAgICAgKiBqb2IncyBjb21wbGV0aW9uIHJhdGhlciB0aGFuIGRlbGl2ZXJpbmcgaXQgYXMgYSBtZXNzYWdlLCBzbyB3aXRob3V0XG4gICAgICogdGhpcyB0aGUgbWFwcyB3b3VsZCBzdGF5IG9uIHRoZSByZWxlYXNlZCBuaWNrOiBhIHJlY29ubmVjdCB3b3VsZFxuICAgICAqIHJlcGxheSBpdCwgYW5kIHdob2V2ZXIgdG9vayBpdCBpbiB0aGUgbWVhbnRpbWUgY291bGQgc3RlZXIgd2hlcmVcbiAgICAgKiBgZm9sbG93QWN0b3JSZW5hbWVgIG1vdmVzIHRoaXMgY2xpZW50J3Mgc3RhdGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1lbWJlclJlcXVlc3RlZFJlbmFtZShcbiAgICAgICAgb3V0Z29pbmc6IEFjdGl2aXR5U3RyZWFtLFxuICAgICAgICBjYWxsYmFjazogdW5rbm93bixcbiAgICApOiB1bmtub3duIHtcbiAgICAgICAgaWYgKCFpc0FjdG9yUmVuYW1lKG91dGdvaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICAvLyBTb2NrZXQuSU8gZGVsaXZlcnMgdGhlIGFjayBhcyBgKHJlc3VsdClgLCBvciBhcyBgKGVyciwgcmVzdWx0KWBcbiAgICAgICAgICAgIC8vIHdoZW4gdGhlIHNvY2tldCB3YXMgY3JlYXRlZCB3aXRoIGBhY2tUaW1lb3V0YC4gQSB0aW1lb3V0IG9yIGFcbiAgICAgICAgICAgIC8vIGRyb3BwZWQgc29ja2V0IGFycml2ZXMgYXMgYW4gRXJyb3IgaW4gdGhlIGZpcnN0IHNsb3Q7IHRoZVxuICAgICAgICAgICAgLy8gc2VydmVyIHJlcG9ydHMgYSByZWplY3RlZCByZW5hbWUgYXMgYHsgZXJyb3IgfWAgaW4gd2hpY2hldmVyXG4gICAgICAgICAgICAvLyBzbG90IGNhcnJpZXMgdGhlIHJlc3VsdC5cbiAgICAgICAgICAgIGNvbnN0IFtmaXJzdCwgc2Vjb25kXSA9IGFyZ3M7XG4gICAgICAgICAgICBjb25zdCBmYWlsZWQgPVxuICAgICAgICAgICAgICAgIGZpcnN0IGluc3RhbmNlb2YgRXJyb3IgfHxcbiAgICAgICAgICAgICAgICBpc0Vycm9yUmVzdWx0KGZpcnN0KSB8fFxuICAgICAgICAgICAgICAgIGlzRXJyb3JSZXN1bHQoc2Vjb25kKTtcbiAgICAgICAgICAgIGlmICghZmFpbGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlUmVwbGF5U3RhdGUob3V0Z29pbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlUmVwbGF5U3RhdGUocmVuYW1lOiBBY3Rpdml0eVN0cmVhbSk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IFtwcmV2aW91c0lkLCBuZXh0SWRdIG9mIHRoaXMucmVwbGF5U3RvcmUubW92ZUFjdG9yKHJlbmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKGByZXBsYXkgc3RhdGUgbW92ZWQgZnJvbSAke3ByZXZpb3VzSWR9IHRvICR7bmV4dElkfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGF5cyBwcmV2aW91c2x5IHNlbnQgZXZlbnRzIHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgU29ja2V0LklPIGNvbm5lY3Rpb24gaXNcbiAgICAgKiByZS1lc3RhYmxpc2hlZCBhZnRlciBhIHRyYW5zaWVudCBuZXR3b3JrIGludGVycnVwdGlvbi4gSXQgcmVzZW5kc1xuICAgICAqIGNyZWRlbnRpYWxzIGFuZCBjb25uZWN0aW9uIHN0YXRlIHNvIHRoZSB1c2VyIGRvZXNuJ3QgbmVlZCB0byBtYW51YWxseVxuICAgICAqIHJlLWF1dGhlbnRpY2F0ZSBvciByZWpvaW4gY2hhbm5lbHMuXG4gICAgICpcbiAgICAgKiBTZWN1cml0eSBjb25zaWRlcmF0aW9uczpcbiAgICAgKiAtIE9ubHkgcmVwbGF5cyBldmVudHMgc3RvcmVkIGluIG1lbW9yeSBkdXJpbmcgdGhpcyBzZXNzaW9uXG4gICAgICogLSBEb2VzIG5vdCByZXBsYXkgYWZ0ZXIgcGFnZSByZWZyZXNoIChtZW1vcnkgY2xlYXJlZClcbiAgICAgKiAtIFNlcnZlciBzaG91bGQgdmFsaWRhdGUgcmVwbGF5ZWQgY3JlZGVudGlhbHMgKG1heSBiZSBzdGFsZS9yZXZva2VkKVxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgLSBFdmVudCBuYW1lIHRvIGVtaXQgKFwiY3JlZGVudGlhbHNcIiwgXCJtZXNzYWdlXCIpXG4gICAgICogQHBhcmFtIGFzTWFwIC0gTWFwIG9mIGV2ZW50cyB0byByZXBsYXlcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlcGxheTxLIGV4dGVuZHMga2V5b2YgUmVwbGF5RXZlbnRNYXA+KFxuICAgICAgICBuYW1lOiBLLFxuICAgICAgICBhc01hcDogTWFwPHN0cmluZywgUmVwbGF5RXZlbnRNYXBbS10+LFxuICAgICk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBhc01hcC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRPYmogPSBub3JtYWxpemVBY3Rpdml0eVN0cmVhbShvYmogYXMgQWN0aXZpdHlTdHJlYW0pO1xuICAgICAgICAgICAgbGV0IGlkID0gZXhwYW5kZWRPYmo/LmlkO1xuICAgICAgICAgICAgaWYgKGhhc0FjdG9ySWQoZXhwYW5kZWRPYmopKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0b3IgPSAoZXhwYW5kZWRPYmogYXMgQWN0aXZpdHlTdHJlYW0pLmFjdG9yO1xuICAgICAgICAgICAgICAgIC8vIGFjdG9yIGNhbiBiZSBhIHN0cmluZyAoSklEKSBvciBhbiBvYmplY3Qgd2l0aCBhbiBpZCBmaWVsZFxuICAgICAgICAgICAgICAgIGlkID0gdHlwZW9mIGFjdG9yID09PSBcInN0cmluZ1wiID8gYWN0b3IgOiBhY3Rvci5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9nKGByZXBsYXlpbmcgJHtuYW1lfSBmb3IgJHtpZH1gKTtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KG5hbWUsIGV4cGFuZGVkT2JqKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuKChnbG9iYWw6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgZ2xvYmFsLlNvY2tldGh1YkNsaWVudCA9IFNvY2tldGh1YkNsaWVudDtcbn0pKFxuICAgIHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gICAgICAgIDoge30sXG4pO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogImdwQ0FDQSxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDNUQsR0FBUSxXQUFhLEdBQVEsaUJBQW1CLEdBQVEsWUFBYyxHQUFRLGNBQWdCLEdBQVEsVUFBWSxHQUFRLFVBQVksR0FBUSxXQUFhLEdBQVEsSUFBTSxHQUFRLEVBQUksR0FBUSxJQUFNLEdBQVEsTUFBUSxHQUFRLEtBQU8sR0FBUSxXQUFhLEdBQVEsWUFBbUIsT0FFbFIsTUFBTSxFQUFZLENBQ2xCLENBQ0EsR0FBUSxZQUFjLEdBQ3RCLEdBQVEsV0FBYSx3QkFDckIsTUFBTSxXQUFhLEVBQVksQ0FDM0IsV0FBVyxDQUFDLEVBQUcsQ0FDWCxNQUFNLEVBQ04sR0FBSSxDQUFDLEdBQVEsV0FBVyxLQUFLLENBQUMsRUFDMUIsTUFBVSxNQUFNLDBDQUEw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QUFHLEdBQUcsSUFBTSxVQUFVLEdBQVUsRUFBTyxFQUFJLENBQUMsSUFBSSxHQUFhLEtBQUssRUFBSSxDQUFHLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQWEsQ0FBQyxRQUFRLEtBQU8sRUFBSyxHQUFHLENBQUMsR0FBYSxLQUFLLEVBQWEsQ0FBRyxHQUFHLElBQU0sVUFBVSxHQUFVLEVBQWEsRUFBSSxDQUFDLElBQUksR0FBYSxLQUFLLEVBQUksQ0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsT0FBTyxJQUFlLEdBQWtCLEdBQWlCLEdBQVEsQ0FBQyxFQUFJLEVBQVcsSUFBUyxDQUFDLElBQUksRUFBUyxHQUFLLE1BQU0sT0FBTyxJQUFNLFNBQVMsR0FBRyxFQUFTLENBQUMsSUFBSSxFQUFNLEVBQVcsS0FBb0IsSUFBSSxRQUFRLEtBQW1CLElBQUksUUFBUSxFQUFPLEVBQU0sSUFBSSxDQUFHLEVBQUUsR0FBRyxFQUFPLE9BQU8sRUFBTyxFQUFPLEdBQUssS0FBSyxHQUFTLEdBQWEsQ0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRyxHQUFZLENBQUMsR0FBSyxDQUFDLEVBQUksWUFBWSxDQUFDLEdBQWEsS0FBSyxFQUFJLFNBQVMsRUFBRSxHQUFVLEVBQU8sVUFBVSxDQUFDLE1BQU0sRUFBSSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQU8sR0FBRyxHQUFLLE9BQU8sSUFBTSxVQUFVLE9BQU8sSUFBTSxZQUFZLFFBQVEsS0FBTyxHQUFrQixDQUFHLEVBQUUsR0FBRyxDQUFDLEdBQWEsS0FBSyxFQUFHLENBQUcsRUFBRSxHQUFVLEVBQUcsRUFBSSxDQUFDLElBQUksR0FBYSxLQUFLLEVBQUksQ0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFTLEVBQU0sSUFBSSxFQUFJLENBQUUsRUFBRSxPQUFPLEdBQVEsR0FBVyxDQUFDLEVBQUcsSUFBTSxLQUFLLEdBQUssR0FBSSxFQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUcsRUFBRSxFQUFJLFNBQWEsR0FBYyxDQUFDLElBQUksRUFBMEYsR0FBUyxDQUFDLEVBQU8sSUFBTSxDQUFDLFFBQVEsS0FBUSxFQUFJLEdBQVUsRUFBTyxFQUFLLENBQUMsSUFBSSxFQUFJLEdBQU0sV0FBVyxHQUFHLGFBQWEsR0FBRyxJQUFJLEdBQWUsS0FBSyxFQUFJLENBQUksQ0FBQyxDQUFDLEdBQU8sR0FBaytILEdBQWtKLEdBQWdELGtCQUF6MEwsR0FBUyxPQUFPLE9BQVUsQ0FBQyxlQUFlLEdBQWEsZUFBZSxHQUFVLG9CQUFvQixFQUFpQixFQUFFLE9BQVcsR0FBYSxPQUFPLFVBQVUsZUFBcWdELEdBQWlCLEdBQVcsUUFBUSxDQUFDLEVBQVEsRUFBTyxDQUFDLElBQUksRUFBYyxRQUFRLEVBQWMsYUFBYSxFQUFnQiw0QkFBNEIsRUFBTyxDQUFDLFNBQVMsa0RBQWtELFlBQVksaURBQWlELGdCQUFnQixlQUFlLEVBQUUsRUFBTSxLQUFLLE1BQU0sRUFBbUIsT0FBTyxhQUFhLFNBQVMsQ0FBSyxDQUFDLEVBQUssQ0FBQyxNQUFNLFdBQVcsRUFBTyxFQUFLLEVBQUUsU0FBUyxDQUFHLENBQUMsRUFBTSxFQUFTLENBQUMsSUFBSSxFQUFPLENBQUMsRUFBRSxFQUFPLEVBQU0sT0FBTyxNQUFNLElBQVMsRUFBTyxHQUFRLEVBQVMsRUFBTSxFQUFPLEVBQUUsT0FBTyxFQUFPLFNBQVMsQ0FBUyxDQUFDLEVBQU8sRUFBUyxDQUFDLElBQUksRUFBTSxFQUFPLE1BQU0sR0FBRyxFQUFFLEVBQU8sR0FBRyxHQUFHLEVBQU0sT0FBTyxFQUFFLEVBQU8sRUFBTSxHQUFHLElBQUksRUFBTyxFQUFNLEdBQUcsRUFBTyxFQUFPLFFBQVEsRUFBZ0IsR0FBRyxFQUFFLElBQUksR0FBTyxFQUFPLE1BQU0sR0FBRyxFQUFFLEdBQVEsRUFBSSxHQUFPLENBQVEsRUFBRSxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQU8sR0FBUSxTQUFTLENBQVUsQ0FBQyxFQUFPLENBQUMsSUFBSSxFQUFPLENBQUMsRUFBRSxFQUFRLEVBQUUsRUFBTyxFQUFPLE9BQU8sTUFBTSxFQUFRLEVBQU8sQ0FBQyxJQUFJLEdBQU0sRUFBTyxXQUFXLEdBQVMsRUFBRSxHQUFHLElBQU8sT0FBTyxJQUFPLE9BQU8sRUFBUSxFQUFPLENBQUMsSUFBSSxHQUFNLEVBQU8sV0FBVyxHQUFTLEVBQUUsSUFBSSxHQUFNLFFBQVEsTUFBTSxFQUFPLE9BQU8sR0FBTSxPQUFPLEtBQUssR0FBTSxNQUFNLEtBQUssRUFBRSxLQUFLLEVBQU8sS0FBSyxFQUFLLEVBQUUsSUFBVSxLQUFLLEVBQU8sS0FBSyxFQUFLLEVBQUUsT0FBTyxFQUFPLElBQUksRUFBVyxDQUFDLElBQWEsT0FBTyxjQUFjLEdBQUcsQ0FBVSxFQUFFLEVBQWEsUUFBUSxDQUFDLEVBQVUsQ0FBQyxHQUFHLEdBQVcsSUFBSSxFQUFVLEdBQUcsTUFBTyxLQUFJLEVBQVUsSUFBSSxHQUFHLEdBQVcsSUFBSSxFQUFVLEdBQUcsT0FBTyxFQUFVLEdBQUcsR0FBRyxHQUFXLElBQUksRUFBVSxJQUFJLE9BQU8sRUFBVSxHQUFHLE1BQU8sS0FBSSxFQUFhLFFBQVEsQ0FBQyxFQUFNLEVBQUssQ0FBQyxPQUFPLEVBQU0sR0FBRyxJQUFJLEVBQU0sTUFBTSxHQUFNLElBQUksSUFBSSxFQUFNLFFBQVEsQ0FBQyxFQUFNLEVBQVUsRUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQU0sRUFBVSxFQUFNLEVBQU0sR0FBRyxFQUFFLEdBQU8sRUFBRSxHQUFPLEVBQU0sRUFBTSxDQUFTLEVBQUUsS0FBSyxFQUFNLElBQUksR0FBRyxHQUFHLEVBQU0sRUFBTSxFQUFNLEVBQUUsRUFBRSxPQUFPLEVBQU0sRUFBRSxHQUFHLEdBQU8sRUFBTSxHQUFHLEdBQUcsRUFBTyxRQUFRLENBQUMsRUFBTSxDQUFDLElBQUksRUFBTyxDQUFDLEVBQUUsRUFBWSxFQUFNLE9BQU8sRUFBRSxFQUFFLEdBQUUsSUFBSSxHQUFLLEdBQUcsR0FBTSxFQUFNLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBTSxFQUFFLEdBQU0sRUFBRSxRQUFRLEdBQUUsRUFBRSxHQUFFLEdBQU0sRUFBRSxHQUFFLENBQUMsR0FBRyxFQUFNLFdBQVcsRUFBQyxHQUFHLElBQUksRUFBTSxXQUFXLEVBQUUsRUFBTyxLQUFLLEVBQU0sV0FBVyxFQUFDLENBQUMsRUFBRSxRQUFRLEdBQU0sR0FBTSxFQUFFLEdBQU0sRUFBRSxFQUFFLEdBQU0sR0FBYSxDQUFDLElBQUksR0FBSyxFQUFFLFFBQVEsR0FBRSxFQUFFLEdBQUUsSUFBSSxJQUFHLEdBQUcsQ0FBQyxHQUFHLElBQU8sRUFBWSxFQUFNLGVBQWUsRUFBRSxJQUFJLEdBQU0sRUFBYSxFQUFNLFdBQVcsSUFBTyxDQUFDLEVBQUUsR0FBRyxJQUFPLEdBQUcsRUFBTSxlQUFlLEVBQUUsR0FBRyxHQUFNLEdBQU8sV0FBVyxHQUFHLEVBQUMsRUFBRSxFQUFNLFVBQVUsRUFBRSxHQUFHLEdBQU0sR0FBRSxJQUFJLEdBQUUsSUFBRyxHQUFLLEVBQUUsSUFBRyxHQUFLLEdBQUcsR0FBRyxHQUFFLEdBQUssR0FBRyxHQUFNLEdBQUUsTUFBTSxJQUFJLEdBQVcsR0FBRyxHQUFFLEdBQUcsR0FBRSxFQUFNLFdBQVcsRUFBVSxFQUFFLEVBQU0sVUFBVSxFQUFFLElBQUcsR0FBVyxJQUFJLEdBQUksRUFBTyxPQUFPLEVBQUUsR0FBRyxHQUFLLEVBQU0sRUFBRSxHQUFLLEdBQUksSUFBTSxDQUFDLEVBQUUsRUFBTSxFQUFFLEVBQUcsRUFBRSxXQUFXLEdBQUUsRUFBTSxVQUFVLEVBQUUsSUFBRyxFQUFNLEVBQUUsRUFBRyxFQUFFLEdBQUcsR0FBSSxFQUFPLE9BQU8sSUFBSSxFQUFFLEVBQUMsRUFBRSxPQUFPLE9BQU8sY0FBYyxHQUFHLENBQU0sR0FBRyxFQUFPLFFBQVEsQ0FBQyxFQUFNLENBQUMsSUFBSSxFQUFPLENBQUMsRUFBRSxFQUFNLEVBQVcsQ0FBSyxFQUFFLElBQUksRUFBWSxFQUFNLE9BQU8sRUFBRSxJQUFJLEdBQU0sRUFBRSxHQUFLLEdBQUcsUUFBUSxNQUFnQixFQUFNLEdBQUcsR0FBYSxJQUFJLEVBQU8sS0FBSyxFQUFtQixFQUFZLENBQUMsRUFBRSxJQUFJLEdBQVksRUFBTyxPQUFPLEdBQWUsR0FBWSxHQUFHLEdBQVksRUFBTyxLQUFLLEdBQUcsRUFBRSxNQUFNLEdBQWUsRUFBWSxDQUFDLElBQUksR0FBRSxXQUFXLFFBQVEsTUFBZ0IsRUFBTSxHQUFHLElBQWMsR0FBRyxHQUFhLEdBQUUsR0FBRSxHQUFhLElBQUksR0FBc0IsR0FBZSxFQUFFLEdBQUcsR0FBRSxFQUFFLEdBQU8sV0FBVyxJQUFPLEVBQXFCLEVBQUUsRUFBTSxVQUFVLEVBQUUsS0FBUSxHQUFFLEdBQUcsR0FBc0IsRUFBRSxHQUFFLFFBQVEsTUFBZ0IsRUFBTSxDQUFDLEdBQUcsR0FBYSxHQUFHLEVBQUUsR0FBTSxXQUFXLEVBQU0sVUFBVSxFQUFFLEdBQUcsS0FBZSxFQUFFLENBQUMsSUFBSSxHQUFFLEdBQU0sUUFBUSxHQUFFLElBQUksSUFBRyxHQUFHLENBQUMsSUFBSSxHQUFFLElBQUcsR0FBSyxFQUFFLElBQUcsR0FBSyxHQUFHLEdBQUcsR0FBRSxHQUFLLEdBQUcsR0FBRSxHQUFFLE1BQU0sSUFBSSxHQUFRLEdBQUUsR0FBRSxHQUFXLEdBQUcsR0FBRSxFQUFPLEtBQUssRUFBbUIsRUFBYSxHQUFFLEdBQVEsR0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUUsRUFBTSxHQUFRLEVBQVUsRUFBRSxFQUFPLEtBQUssRUFBbUIsRUFBYSxHQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBSyxFQUFNLEdBQU0sR0FBc0IsS0FBaUIsRUFBVyxFQUFFLEdBQU0sRUFBRSxFQUFFLElBQWdCLEVBQUUsR0FBTSxFQUFFLEVBQUUsT0FBTyxFQUFPLEtBQUssRUFBRSxHQUFHLEVBQVUsUUFBUSxDQUFDLEVBQU0sQ0FBQyxPQUFPLEVBQVUsRUFBTSxRQUFRLENBQUMsRUFBTyxDQUFDLE9BQU8sRUFBYyxLQUFLLENBQU0sRUFBRSxFQUFPLEVBQU8sTUFBTSxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBTyxHQUFHLEVBQVEsUUFBUSxDQUFDLEVBQU0sQ0FBQyxPQUFP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SUFBb0IsQ0FNM0IsSUFBTyxFQUFPLEdBQVUsRUFLeEIsR0FBSSxFQUhBLGFBQWlCLE9BQ2pCLEdBQWMsQ0FBSyxHQUNuQixHQUFjLENBQU0sR0FFcEIsS0FBSyxnQkFBZ0IsQ0FBUSxFQUVqQyxHQUFJLE9BQU8sSUFBYSxXQUNwQixFQUFTLEdBQUcsQ0FBSSxHQUtwQixlQUFlLENBQUMsRUFBOEIsQ0FDbEQsUUFBWSxFQUFZLEtBQVcsS0FBSyxZQUFZLFVBQVUsQ0FBTSxFQUNoRSxLQUFLLElBQUksMkJBQTJCLFFBQWlCLEdBQVEsRUFvQjdELE1BQXNDLENBQzFDLEVBQ0EsRUFDSSxDQUNKLFFBQVcsS0FBTyxFQUFNLE9BQU8sRUFBRyxDQUM5QixJQUFNLEVBQWMsR0FBd0IsQ0FBcUIsRUFDN0QsRUFBSyxHQUFhLEdBQ3RCLEdBQUksR0FBVyxDQUFXLEVBQUcsQ0FDekIsSUFBTSxFQUFTLEVBQStCLE1BRTlDLEVBQUssT0FBTyxJQUFVLFNBQVcsRUFBUSxFQUFNLEdBRW5ELEtBQUssSUFBSSxhQUFhLFNBQVksR0FBSSxFQUN0QyxLQUFLLFFBQVEsS0FBSyxFQUFNLENBQVcsR0FHL0MsRUFFQyxDQUFDLElBQW9DLENBQ2xDLEVBQU8sZ0JBQWtCLEtBRXpCLE9BQU8sYUFBZSxTQUNmLFdBQ0QsQ0FBQyxDQUNYIiwKICAiZGVidWdJZCI6ICIyQTQ1OTczNkNFRTgwODZGNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==