@nsshunt/stsoauth2plugin 0.1.12 → 0.1.13

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,6 +1,6 @@
1
- var xo=Object.defineProperty,zo=Object.defineProperties;var wo=Object.getOwnPropertyDescriptors;var kn=Object.getOwnPropertySymbols;var Po=Object.prototype.hasOwnProperty,Bo=Object.prototype.propertyIsEnumerable;var Et=(M,E,ae)=>E in M?xo(M,E,{enumerable:!0,configurable:!0,writable:!0,value:ae}):M[E]=ae,A=(M,E)=>{for(var ae in E||(E={}))Po.call(E,ae)&&Et(M,ae,E[ae]);if(kn)for(var ae of kn(E))Bo.call(E,ae)&&Et(M,ae,E[ae]);return M},Ze=(M,E)=>zo(M,wo(E));var tc=(M,E,ae)=>(Et(M,typeof E!="symbol"?E+"":E,ae),ae),Fn=(M,E,ae)=>{if(!E.has(M))throw TypeError("Cannot "+ae)};var O=(M,E,ae)=>(Fn(M,E,"read from private field"),ae?ae.call(M):E.get(M)),pe=(M,E,ae)=>{if(E.has(M))throw TypeError("Cannot add the same private member more than once");E instanceof WeakSet?E.add(M):E.set(M,ae)},ce=(M,E,ae,ze)=>(Fn(M,E,"write to private field"),ze?ze.call(M,ae):E.set(M,ae),ae),Un=(M,E,ae,ze)=>({set _(ol){ce(M,E,ol,ae)},get _(){return O(M,E,ze)}});(function(M,E){typeof exports=="object"&&typeof module!="undefined"?E(exports):typeof define=="function"&&define.amd?define(["exports"],E):(M=typeof globalThis!="undefined"?globalThis:M||self,E(M.stsoauth2plugin={}))})(this,function(M){var gl,pl,hc,Hl,Gl,$c,qc,kl,et,pc,Fl,lt,Ml,Gc,Vl,Ol,Wl,Xl,Vc,sl,Wc,Xc,yc,Yc;"use strict";var E=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},ae={exports:{}},ze=1e3,ol=ze*60,zl=ol*60,Yl=zl*24,vn=Yl*7,Tn=Yl*365.25,xn=function(e,l){l=l||{};var c=typeof e;if(c==="string"&&e.length>0)return zn(e);if(c==="number"&&isFinite(e))return l.long?Pn(e):wn(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function zn(e){if(e=String(e),!(e.length>100)){var l=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!!l){var c=parseFloat(l[1]),t=(l[2]||"ms").toLowerCase();switch(t){case"years":case"year":case"yrs":case"yr":case"y":return c*Tn;case"weeks":case"week":case"w":return c*vn;case"days":case"day":case"d":return c*Yl;case"hours":case"hour":case"hrs":case"hr":case"h":return c*zl;case"minutes":case"minute":case"mins":case"min":case"m":return c*ol;case"seconds":case"second":case"secs":case"sec":case"s":return c*ze;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}}}function wn(e){var l=Math.abs(e);return l>=Yl?Math.round(e/Yl)+"d":l>=zl?Math.round(e/zl)+"h":l>=ol?Math.round(e/ol)+"m":l>=ze?Math.round(e/ze)+"s":e+"ms"}function Pn(e){var l=Math.abs(e);return l>=Yl?gc(e,l,Yl,"day"):l>=zl?gc(e,l,zl,"hour"):l>=ol?gc(e,l,ol,"minute"):l>=ze?gc(e,l,ze,"second"):e+" ms"}function gc(e,l,c,t){var i=l>=c*1.5;return Math.round(e/c)+" "+t+(i?"s":"")}function Bn(e){c.debug=c,c.default=c,c.coerce=p,c.disable=n,c.enable=i,c.enabled=a,c.humanize=xn,c.destroy=r,Object.keys(e).forEach(o=>{c[o]=e[o]}),c.names=[],c.skips=[],c.formatters={};function l(o){let h=0;for(let S=0;S<o.length;S++)h=(h<<5)-h+o.charCodeAt(S),h|=0;return c.colors[Math.abs(h)%c.colors.length]}c.selectColor=l;function c(o){let h,S=null,H,C;function k(...Y){if(!k.enabled)return;const G=k,f=Number(new Date),L=f-(h||f);G.diff=L,G.prev=h,G.curr=f,h=f,Y[0]=c.coerce(Y[0]),typeof Y[0]!="string"&&Y.unshift("%O");let N=0;Y[0]=Y[0].replace(/%([a-zA-Z%])/g,(W,R)=>{if(W==="%%")return"%";N++;const g=c.formatters[R];if(typeof g=="function"){const B=Y[N];W=g.call(G,B),Y.splice(N,1),N--}return W}),c.formatArgs.call(G,Y),(G.log||c.log).apply(G,Y)}return k.namespace=o,k.useColors=c.useColors(),k.color=c.selectColor(o),k.extend=t,k.destroy=c.destroy,Object.defineProperty(k,"enabled",{enumerable:!0,configurable:!1,get:()=>S!==null?S:(H!==c.namespaces&&(H=c.namespaces,C=c.enabled(o)),C),set:Y=>{S=Y}}),typeof c.init=="function"&&c.init(k),k}function t(o,h){const S=c(this.namespace+(typeof h=="undefined"?":":h)+o);return S.log=this.log,S}function i(o){c.save(o),c.namespaces=o,c.names=[],c.skips=[];let h;const S=(typeof o=="string"?o:"").split(/[\s,]+/),H=S.length;for(h=0;h<H;h++)!S[h]||(o=S[h].replace(/\*/g,".*?"),o[0]==="-"?c.skips.push(new RegExp("^"+o.slice(1)+"$")):c.names.push(new RegExp("^"+o+"$")))}function n(){const o=[...c.names.map(b),...c.skips.map(b).map(h=>"-"+h)].join(",");return c.enable(""),o}function a(o){if(o[o.length-1]==="*")return!0;let h,S;for(h=0,S=c.skips.length;h<S;h++)if(c.skips[h].test(o))return!1;for(h=0,S=c.names.length;h<S;h++)if(c.names[h].test(o))return!0;return!1}function b(o){return o.toString().substring(2,o.toString().length-2).replace(/\.\*\?$/,"*")}function p(o){return o instanceof Error?o.stack||o.message:o}function r(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return c.enable(c.load()),c}var En=Bn;(function(e,l){l.formatArgs=t,l.save=i,l.load=n,l.useColors=c,l.storage=a(),l.destroy=(()=>{let p=!1;return()=>{p||(p=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),l.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function c(){return typeof window!="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document!="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function t(p){if(p[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+p[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const r="color: "+this.color;p.splice(1,0,r,"color: inherit");let o=0,h=0;p[0].replace(/%[a-zA-Z%]/g,S=>{S!=="%%"&&(o++,S==="%c"&&(h=o))}),p.splice(h,0,r)}l.log=console.debug||console.log||(()=>{});function i(p){try{p?l.storage.setItem("debug",p):l.storage.removeItem("debug")}catch{}}function n(){let p;try{p=l.storage.getItem("debug")}catch{}return!p&&typeof process!="undefined"&&"env"in process&&(p={}.DEBUG),p}function a(){try{return localStorage}catch{}}e.exports=En(l);const{formatters:b}=e.exports;b.j=function(p){try{return JSON.stringify(p)}catch(r){return"[UnexpectedJSONParseError]: "+r.message}}})(ae,ae.exports);var jt=ae.exports,Hc={},kc={};Object.defineProperty(kc,"__esModule",{value:!0}),kc.GetErrorPayload=void 0;function jn(e,l=null){return{error:e.code,error_description:e.description,timestamp:Date.now(),details:l}}kc.GetErrorPayload=jn;var Fc={},Il={},dt={exports:{}},Qt={},Be={},wl={},ic={},oe={},nc={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.regexpCode=e.getEsmExportName=e.getProperty=e.safeStringify=e.stringify=e.strConcat=e.addCodeArg=e.str=e._=e.nil=e._Code=e.Name=e.IDENTIFIER=e._CodeOrName=void 0;class l{}e._CodeOrName=l,e.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class c extends l{constructor(f){if(super(),!e.IDENTIFIER.test(f))throw new Error("CodeGen: name must be a valid identifier");this.str=f}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}e.Name=c;class t extends l{constructor(f){super(),this._items=typeof f=="string"?[f]:f}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const f=this._items[0];return f===""||f==='""'}get str(){var f;return(f=this._str)!==null&&f!==void 0?f:this._str=this._items.reduce((L,N)=>`${L}${N}`,"")}get names(){var f;return(f=this._names)!==null&&f!==void 0?f:this._names=this._items.reduce((L,N)=>(N instanceof c&&(L[N.str]=(L[N.str]||0)+1),L),{})}}e._Code=t,e.nil=new t("");function i(G,...f){const L=[G[0]];let N=0;for(;N<f.length;)b(L,f[N]),L.push(G[++N]);return new t(L)}e._=i;const n=new t("+");function a(G,...f){const L=[H(G[0])];let N=0;for(;N<f.length;)L.push(n),b(L,f[N]),L.push(n,H(G[++N]));return p(L),new t(L)}e.str=a;function b(G,f){f instanceof t?G.push(...f._items):f instanceof c?G.push(f):G.push(h(f))}e.addCodeArg=b;function p(G){let f=1;for(;f<G.length-1;){if(G[f]===n){const L=r(G[f-1],G[f+1]);if(L!==void 0){G.splice(f-1,3,L);continue}G[f++]="+"}f++}}function r(G,f){if(f==='""')return G;if(G==='""')return f;if(typeof G=="string")return f instanceof c||G[G.length-1]!=='"'?void 0:typeof f!="string"?`${G.slice(0,-1)}${f}"`:f[0]==='"'?G.slice(0,-1)+f.slice(1):void 0;if(typeof f=="string"&&f[0]==='"'&&!(G instanceof c))return`"${G}${f.slice(1)}`}function o(G,f){return f.emptyStr()?G:G.emptyStr()?f:a`${G}${f}`}e.strConcat=o;function h(G){return typeof G=="number"||typeof G=="boolean"||G===null?G:H(Array.isArray(G)?G.join(","):G)}function S(G){return new t(H(G))}e.stringify=S;function H(G){return JSON.stringify(G).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}e.safeStringify=H;function C(G){return typeof G=="string"&&e.IDENTIFIER.test(G)?new t(`.${G}`):i`[${G}]`}e.getProperty=C;function k(G){if(typeof G=="string"&&e.IDENTIFIER.test(G))return new t(`${G}`);throw new Error(`CodeGen: invalid export name: ${G}, use explicit $id name mapping`)}e.getEsmExportName=k;function Y(G){return new t(G.toString())}e.regexpCode=Y})(nc);var st={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.ValueScope=e.ValueScopeName=e.Scope=e.varKinds=e.UsedValueState=void 0;const l=nc;class c extends Error{constructor(r){super(`CodeGen: "code" for ${r} not defined`),this.value=r.value}}var t;(function(p){p[p.Started=0]="Started",p[p.Completed=1]="Completed"})(t=e.UsedValueState||(e.UsedValueState={})),e.varKinds={const:new l.Name("const"),let:new l.Name("let"),var:new l.Name("var")};class i{constructor({prefixes:r,parent:o}={}){this._names={},this._prefixes=r,this._parent=o}toName(r){return r instanceof l.Name?r:this.name(r)}name(r){return new l.Name(this._newName(r))}_newName(r){const o=this._names[r]||this._nameGroup(r);return`${r}${o.index++}`}_nameGroup(r){var o,h;if(((h=(o=this._parent)===null||o===void 0?void 0:o._prefixes)===null||h===void 0?void 0:h.has(r))||this._prefixes&&!this._prefixes.has(r))throw new Error(`CodeGen: prefix "${r}" is not allowed in this scope`);return this._names[r]={prefix:r,index:0}}}e.Scope=i;class n extends l.Name{constructor(r,o){super(o),this.prefix=r}setValue(r,{property:o,itemIndex:h}){this.value=r,this.scopePath=(0,l._)`.${new l.Name(o)}[${h}]`}}e.ValueScopeName=n;const a=(0,l._)`\n`;class b extends i{constructor(r){super(r),this._values={},this._scope=r.scope,this.opts=Ze(A({},r),{_n:r.lines?a:l.nil})}get(){return this._scope}name(r){return new n(r,this._newName(r))}value(r,o){var h;if(o.ref===void 0)throw new Error("CodeGen: ref must be passed in value");const S=this.toName(r),{prefix:H}=S,C=(h=o.key)!==null&&h!==void 0?h:o.ref;let k=this._values[H];if(k){const f=k.get(C);if(f)return f}else k=this._values[H]=new Map;k.set(C,S);const Y=this._scope[H]||(this._scope[H]=[]),G=Y.length;return Y[G]=o.ref,S.setValue(o,{property:H,itemIndex:G}),S}getValue(r,o){const h=this._values[r];if(!!h)return h.get(o)}scopeRefs(r,o=this._values){return this._reduceValues(o,h=>{if(h.scopePath===void 0)throw new Error(`CodeGen: name "${h}" has no value`);return(0,l._)`${r}${h.scopePath}`})}scopeCode(r=this._values,o,h){return this._reduceValues(r,S=>{if(S.value===void 0)throw new Error(`CodeGen: name "${S}" has no value`);return S.value.code},o,h)}_reduceValues(r,o,h={},S){let H=l.nil;for(const C in r){const k=r[C];if(!k)continue;const Y=h[C]=h[C]||new Map;k.forEach(G=>{if(Y.has(G))return;Y.set(G,t.Started);let f=o(G);if(f){const L=this.opts.es5?e.varKinds.var:e.varKinds.const;H=(0,l._)`${H}${L} ${G} = ${f};${this.opts._n}`}else if(f=S==null?void 0:S(G))H=(0,l._)`${H}${f}${this.opts._n}`;else throw new c(G);Y.set(G,t.Completed)})}return H}}e.ValueScope=b})(st),function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.or=e.and=e.not=e.CodeGen=e.operators=e.varKinds=e.ValueScopeName=e.ValueScope=e.Scope=e.Name=e.regexpCode=e.stringify=e.getProperty=e.nil=e.strConcat=e.str=e._=void 0;const l=nc,c=st;var t=nc;Object.defineProperty(e,"_",{enumerable:!0,get:function(){return t._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return t.str}}),Object.defineProperty(e,"strConcat",{enumerable:!0,get:function(){return t.strConcat}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return t.nil}}),Object.defineProperty(e,"getProperty",{enumerable:!0,get:function(){return t.getProperty}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return t.stringify}}),Object.defineProperty(e,"regexpCode",{enumerable:!0,get:function(){return t.regexpCode}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return t.Name}});var i=st;Object.defineProperty(e,"Scope",{enumerable:!0,get:function(){return i.Scope}}),Object.defineProperty(e,"ValueScope",{enumerable:!0,get:function(){return i.ValueScope}}),Object.defineProperty(e,"ValueScopeName",{enumerable:!0,get:function(){return i.ValueScopeName}}),Object.defineProperty(e,"varKinds",{enumerable:!0,get:function(){return i.varKinds}}),e.operators={GT:new l._Code(">"),GTE:new l._Code(">="),LT:new l._Code("<"),LTE:new l._Code("<="),EQ:new l._Code("==="),NEQ:new l._Code("!=="),NOT:new l._Code("!"),OR:new l._Code("||"),AND:new l._Code("&&"),ADD:new l._Code("+")};class n{optimizeNodes(){return this}optimizeNames(d,m){return this}}class a extends n{constructor(d,m,J){super(),this.varKind=d,this.name=m,this.rhs=J}render({es5:d,_n:m}){const J=d?c.varKinds.var:this.varKind,U=this.rhs===void 0?"":` = ${this.rhs}`;return`${J} ${this.name}${U};`+m}optimizeNames(d,m){if(!!d[this.name.str])return this.rhs&&(this.rhs=q(this.rhs,d,m)),this}get names(){return this.rhs instanceof l._CodeOrName?this.rhs.names:{}}}class b extends n{constructor(d,m,J){super(),this.lhs=d,this.rhs=m,this.sideEffects=J}render({_n:d}){return`${this.lhs} = ${this.rhs};`+d}optimizeNames(d,m){if(!(this.lhs instanceof l.Name&&!d[this.lhs.str]&&!this.sideEffects))return this.rhs=q(this.rhs,d,m),this}get names(){const d=this.lhs instanceof l.Name?{}:A({},this.lhs.names);return se(d,this.rhs)}}class p extends b{constructor(d,m,J,U){super(d,J,U),this.op=m}render({_n:d}){return`${this.lhs} ${this.op}= ${this.rhs};`+d}}class r extends n{constructor(d){super(),this.label=d,this.names={}}render({_n:d}){return`${this.label}:`+d}}class o extends n{constructor(d){super(),this.label=d,this.names={}}render({_n:d}){return`break${this.label?` ${this.label}`:""};`+d}}class h extends n{constructor(d){super(),this.error=d}render({_n:d}){return`throw ${this.error};`+d}get names(){return this.error.names}}class S extends n{constructor(d){super(),this.code=d}render({_n:d}){return`${this.code};`+d}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(d,m){return this.code=q(this.code,d,m),this}get names(){return this.code instanceof l._CodeOrName?this.code.names:{}}}class H extends n{constructor(d=[]){super(),this.nodes=d}render(d){return this.nodes.reduce((m,J)=>m+J.render(d),"")}optimizeNodes(){const{nodes:d}=this;let m=d.length;for(;m--;){const J=d[m].optimizeNodes();Array.isArray(J)?d.splice(m,1,...J):J?d[m]=J:d.splice(m,1)}return d.length>0?this:void 0}optimizeNames(d,m){const{nodes:J}=this;let U=J.length;for(;U--;){const v=J[U];v.optimizeNames(d,m)||(Ge(d,v.names),J.splice(U,1))}return J.length>0?this:void 0}get names(){return this.nodes.reduce((d,m)=>$(d,m.names),{})}}class C extends H{render(d){return"{"+d._n+super.render(d)+"}"+d._n}}class k extends H{}class Y extends C{}Y.kind="else";class G extends C{constructor(d,m){super(m),this.condition=d}render(d){let m=`if(${this.condition})`+super.render(d);return this.else&&(m+="else "+this.else.render(d)),m}optimizeNodes(){super.optimizeNodes();const d=this.condition;if(d===!0)return this.nodes;let m=this.else;if(m){const J=m.optimizeNodes();m=this.else=Array.isArray(J)?new Y(J):J}if(m)return d===!1?m instanceof G?m:m.nodes:this.nodes.length?this:new G(Xe(d),m instanceof G?[m]:m.nodes);if(!(d===!1||!this.nodes.length))return this}optimizeNames(d,m){var J;if(this.else=(J=this.else)===null||J===void 0?void 0:J.optimizeNames(d,m),!!(super.optimizeNames(d,m)||this.else))return this.condition=q(this.condition,d,m),this}get names(){const d=super.names;return se(d,this.condition),this.else&&$(d,this.else.names),d}}G.kind="if";class f extends C{}f.kind="for";class L extends f{constructor(d){super(),this.iteration=d}render(d){return`for(${this.iteration})`+super.render(d)}optimizeNames(d,m){if(!!super.optimizeNames(d,m))return this.iteration=q(this.iteration,d,m),this}get names(){return $(super.names,this.iteration.names)}}class N extends f{constructor(d,m,J,U){super(),this.varKind=d,this.name=m,this.from=J,this.to=U}render(d){const m=d.es5?c.varKinds.var:this.varKind,{name:J,from:U,to:v}=this;return`for(${m} ${J}=${U}; ${J}<${v}; ${J}++)`+super.render(d)}get names(){const d=se(super.names,this.from);return se(d,this.to)}}class P extends f{constructor(d,m,J,U){super(),this.loop=d,this.varKind=m,this.name=J,this.iterable=U}render(d){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(d)}optimizeNames(d,m){if(!!super.optimizeNames(d,m))return this.iterable=q(this.iterable,d,m),this}get names(){return $(super.names,this.iterable.names)}}class W extends C{constructor(d,m,J){super(),this.name=d,this.args=m,this.async=J}render(d){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(d)}}W.kind="func";class R extends H{render(d){return"return "+super.render(d)}}R.kind="return";class g extends C{render(d){let m="try"+super.render(d);return this.catch&&(m+=this.catch.render(d)),this.finally&&(m+=this.finally.render(d)),m}optimizeNodes(){var d,m;return super.optimizeNodes(),(d=this.catch)===null||d===void 0||d.optimizeNodes(),(m=this.finally)===null||m===void 0||m.optimizeNodes(),this}optimizeNames(d,m){var J,U;return super.optimizeNames(d,m),(J=this.catch)===null||J===void 0||J.optimizeNames(d,m),(U=this.finally)===null||U===void 0||U.optimizeNames(d,m),this}get names(){const d=super.names;return this.catch&&$(d,this.catch.names),this.finally&&$(d,this.finally.names),d}}class B extends C{constructor(d){super(),this.error=d}render(d){return`catch(${this.error})`+super.render(d)}}B.kind="catch";class D extends C{render(d){return"finally"+super.render(d)}}D.kind="finally";class re{constructor(d,m={}){this._values={},this._blockStarts=[],this._constants={},this.opts=Ze(A({},m),{_n:m.lines?`
2
- `:""}),this._extScope=d,this._scope=new c.Scope({parent:d}),this._nodes=[new k]}toString(){return this._root.render(this.opts)}name(d){return this._scope.name(d)}scopeName(d){return this._extScope.name(d)}scopeValue(d,m){const J=this._extScope.value(d,m);return(this._values[J.prefix]||(this._values[J.prefix]=new Set)).add(J),J}getScopeValue(d,m){return this._extScope.getValue(d,m)}scopeRefs(d){return this._extScope.scopeRefs(d,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(d,m,J,U){const v=this._scope.toName(m);return J!==void 0&&U&&(this._constants[v.str]=J),this._leafNode(new a(d,v,J)),v}const(d,m,J){return this._def(c.varKinds.const,d,m,J)}let(d,m,J){return this._def(c.varKinds.let,d,m,J)}var(d,m,J){return this._def(c.varKinds.var,d,m,J)}assign(d,m,J){return this._leafNode(new b(d,m,J))}add(d,m){return this._leafNode(new p(d,e.operators.ADD,m))}code(d){return typeof d=="function"?d():d!==l.nil&&this._leafNode(new S(d)),this}object(...d){const m=["{"];for(const[J,U]of d)m.length>1&&m.push(","),m.push(J),(J!==U||this.opts.es5)&&(m.push(":"),(0,l.addCodeArg)(m,U));return m.push("}"),new l._Code(m)}if(d,m,J){if(this._blockNode(new G(d)),m&&J)this.code(m).else().code(J).endIf();else if(m)this.code(m).endIf();else if(J)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(d){return this._elseNode(new G(d))}else(){return this._elseNode(new Y)}endIf(){return this._endBlockNode(G,Y)}_for(d,m){return this._blockNode(d),m&&this.code(m).endFor(),this}for(d,m){return this._for(new L(d),m)}forRange(d,m,J,U,v=this.opts.es5?c.varKinds.var:c.varKinds.let){const ee=this._scope.toName(d);return this._for(new N(v,ee,m,J),()=>U(ee))}forOf(d,m,J,U=c.varKinds.const){const v=this._scope.toName(d);if(this.opts.es5){const ee=m instanceof l.Name?m:this.var("_arr",m);return this.forRange("_i",0,(0,l._)`${ee}.length`,ie=>{this.var(v,(0,l._)`${ee}[${ie}]`),J(v)})}return this._for(new P("of",U,v,m),()=>J(v))}forIn(d,m,J,U=this.opts.es5?c.varKinds.var:c.varKinds.const){if(this.opts.ownProperties)return this.forOf(d,(0,l._)`Object.keys(${m})`,J);const v=this._scope.toName(d);return this._for(new P("in",U,v,m),()=>J(v))}endFor(){return this._endBlockNode(f)}label(d){return this._leafNode(new r(d))}break(d){return this._leafNode(new o(d))}return(d){const m=new R;if(this._blockNode(m),this.code(d),m.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(R)}try(d,m,J){if(!m&&!J)throw new Error('CodeGen: "try" without "catch" and "finally"');const U=new g;if(this._blockNode(U),this.code(d),m){const v=this.name("e");this._currNode=U.catch=new B(v),m(v)}return J&&(this._currNode=U.finally=new D,this.code(J)),this._endBlockNode(B,D)}throw(d){return this._leafNode(new h(d))}block(d,m){return this._blockStarts.push(this._nodes.length),d&&this.code(d).endBlock(m),this}endBlock(d){const m=this._blockStarts.pop();if(m===void 0)throw new Error("CodeGen: not in self-balancing block");const J=this._nodes.length-m;if(J<0||d!==void 0&&J!==d)throw new Error(`CodeGen: wrong number of nodes: ${J} vs ${d} expected`);return this._nodes.length=m,this}func(d,m=l.nil,J,U){return this._blockNode(new W(d,m,J)),U&&this.code(U).endFunc(),this}endFunc(){return this._endBlockNode(W)}optimize(d=1){for(;d-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(d){return this._currNode.nodes.push(d),this}_blockNode(d){this._currNode.nodes.push(d),this._nodes.push(d)}_endBlockNode(d,m){const J=this._currNode;if(J instanceof d||m&&J instanceof m)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${m?`${d.kind}/${m.kind}`:d.kind}"`)}_elseNode(d){const m=this._currNode;if(!(m instanceof G))throw new Error('CodeGen: "else" without "if"');return this._currNode=m.else=d,this}get _root(){return this._nodes[0]}get _currNode(){const d=this._nodes;return d[d.length-1]}set _currNode(d){const m=this._nodes;m[m.length-1]=d}}e.CodeGen=re;function $(X,d){for(const m in d)X[m]=(X[m]||0)+(d[m]||0);return X}function se(X,d){return d instanceof l._CodeOrName?$(X,d.names):X}function q(X,d,m){if(X instanceof l.Name)return J(X);if(!U(X))return X;return new l._Code(X._items.reduce((v,ee)=>(ee instanceof l.Name&&(ee=J(ee)),ee instanceof l._Code?v.push(...ee._items):v.push(ee),v),[]));function J(v){const ee=m[v.str];return ee===void 0||d[v.str]!==1?v:(delete d[v.str],ee)}function U(v){return v instanceof l._Code&&v._items.some(ee=>ee instanceof l.Name&&d[ee.str]===1&&m[ee.str]!==void 0)}}function Ge(X,d){for(const m in d)X[m]=(X[m]||0)-(d[m]||0)}function Xe(X){return typeof X=="boolean"||typeof X=="number"||X===null?!X:(0,l._)`!${K(X)}`}e.not=Xe;const fe=V(e.operators.AND);function ve(...X){return X.reduce(fe)}e.and=ve;const Dl=V(e.operators.OR);function F(...X){return X.reduce(Dl)}e.or=F;function V(X){return(d,m)=>d===l.nil?m:m===l.nil?d:(0,l._)`${K(d)} ${X} ${K(m)}`}function K(X){return X instanceof l.Name?X:(0,l._)`(${X})`}}(oe);var Re={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.checkStrictMode=e.getErrorPath=e.Type=e.useFunc=e.setEvaluated=e.evaluatedPropsToName=e.mergeEvaluated=e.eachItem=e.unescapeJsonPointer=e.escapeJsonPointer=e.escapeFragment=e.unescapeFragment=e.schemaRefOrVal=e.schemaHasRulesButRef=e.schemaHasRules=e.checkUnknownRules=e.alwaysValidSchema=e.toHash=void 0;const l=oe,c=nc;function t(W){const R={};for(const g of W)R[g]=!0;return R}e.toHash=t;function i(W,R){return typeof R=="boolean"?R:Object.keys(R).length===0?!0:(n(W,R),!a(R,W.self.RULES.all))}e.alwaysValidSchema=i;function n(W,R=W.schema){const{opts:g,self:B}=W;if(!g.strictSchema||typeof R=="boolean")return;const D=B.RULES.keywords;for(const re in R)D[re]||P(W,`unknown keyword: "${re}"`)}e.checkUnknownRules=n;function a(W,R){if(typeof W=="boolean")return!W;for(const g in W)if(R[g])return!0;return!1}e.schemaHasRules=a;function b(W,R){if(typeof W=="boolean")return!W;for(const g in W)if(g!=="$ref"&&R.all[g])return!0;return!1}e.schemaHasRulesButRef=b;function p({topSchemaRef:W,schemaPath:R},g,B,D){if(!D){if(typeof g=="number"||typeof g=="boolean")return g;if(typeof g=="string")return(0,l._)`${g}`}return(0,l._)`${W}${R}${(0,l.getProperty)(B)}`}e.schemaRefOrVal=p;function r(W){return S(decodeURIComponent(W))}e.unescapeFragment=r;function o(W){return encodeURIComponent(h(W))}e.escapeFragment=o;function h(W){return typeof W=="number"?`${W}`:W.replace(/~/g,"~0").replace(/\//g,"~1")}e.escapeJsonPointer=h;function S(W){return W.replace(/~1/g,"/").replace(/~0/g,"~")}e.unescapeJsonPointer=S;function H(W,R){if(Array.isArray(W))for(const g of W)R(g);else R(W)}e.eachItem=H;function C({mergeNames:W,mergeToName:R,mergeValues:g,resultToName:B}){return(D,re,$,se)=>{const q=$===void 0?re:$ instanceof l.Name?(re instanceof l.Name?W(D,re,$):R(D,re,$),$):re instanceof l.Name?(R(D,$,re),re):g(re,$);return se===l.Name&&!(q instanceof l.Name)?B(D,q):q}}e.mergeEvaluated={props:C({mergeNames:(W,R,g)=>W.if((0,l._)`${g} !== true && ${R} !== undefined`,()=>{W.if((0,l._)`${R} === true`,()=>W.assign(g,!0),()=>W.assign(g,(0,l._)`${g} || {}`).code((0,l._)`Object.assign(${g}, ${R})`))}),mergeToName:(W,R,g)=>W.if((0,l._)`${g} !== true`,()=>{R===!0?W.assign(g,!0):(W.assign(g,(0,l._)`${g} || {}`),Y(W,g,R))}),mergeValues:(W,R)=>W===!0?!0:A(A({},W),R),resultToName:k}),items:C({mergeNames:(W,R,g)=>W.if((0,l._)`${g} !== true && ${R} !== undefined`,()=>W.assign(g,(0,l._)`${R} === true ? true : ${g} > ${R} ? ${g} : ${R}`)),mergeToName:(W,R,g)=>W.if((0,l._)`${g} !== true`,()=>W.assign(g,R===!0?!0:(0,l._)`${g} > ${R} ? ${g} : ${R}`)),mergeValues:(W,R)=>W===!0?!0:Math.max(W,R),resultToName:(W,R)=>W.var("items",R)})};function k(W,R){if(R===!0)return W.var("props",!0);const g=W.var("props",(0,l._)`{}`);return R!==void 0&&Y(W,g,R),g}e.evaluatedPropsToName=k;function Y(W,R,g){Object.keys(g).forEach(B=>W.assign((0,l._)`${R}${(0,l.getProperty)(B)}`,!0))}e.setEvaluated=Y;const G={};function f(W,R){return W.scopeValue("func",{ref:R,code:G[R.code]||(G[R.code]=new c._Code(R.code))})}e.useFunc=f;var L;(function(W){W[W.Num=0]="Num",W[W.Str=1]="Str"})(L=e.Type||(e.Type={}));function N(W,R,g){if(W instanceof l.Name){const B=R===L.Num;return g?B?(0,l._)`"[" + ${W} + "]"`:(0,l._)`"['" + ${W} + "']"`:B?(0,l._)`"/" + ${W}`:(0,l._)`"/" + ${W}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return g?(0,l.getProperty)(W).toString():"/"+h(W)}e.getErrorPath=N;function P(W,R,g=W.opts.strictSchema){if(!!g){if(R=`strict mode: ${R}`,g===!0)throw new Error(R);W.self.logger.warn(R)}}e.checkStrictMode=P})(Re);var ke={};Object.defineProperty(ke,"__esModule",{value:!0});const Je=oe,Qn={data:new Je.Name("data"),valCxt:new Je.Name("valCxt"),instancePath:new Je.Name("instancePath"),parentData:new Je.Name("parentData"),parentDataProperty:new Je.Name("parentDataProperty"),rootData:new Je.Name("rootData"),dynamicAnchors:new Je.Name("dynamicAnchors"),vErrors:new Je.Name("vErrors"),errors:new Je.Name("errors"),this:new Je.Name("this"),self:new Je.Name("self"),scope:new Je.Name("scope"),json:new Je.Name("json"),jsonPos:new Je.Name("jsonPos"),jsonLen:new Je.Name("jsonLen"),jsonPart:new Je.Name("jsonPart")};ke.default=Qn,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.extendErrors=e.resetErrorsCount=e.reportExtraError=e.reportError=e.keyword$DataError=e.keywordError=void 0;const l=oe,c=Re,t=ke;e.keywordError={message:({keyword:Y})=>(0,l.str)`must pass "${Y}" keyword validation`},e.keyword$DataError={message:({keyword:Y,schemaType:G})=>G?(0,l.str)`"${Y}" keyword must be ${G} ($data)`:(0,l.str)`"${Y}" keyword is invalid ($data)`};function i(Y,G=e.keywordError,f,L){const{it:N}=Y,{gen:P,compositeRule:W,allErrors:R}=N,g=h(Y,G,f);(L!=null?L:W||R)?p(P,g):r(N,(0,l._)`[${g}]`)}e.reportError=i;function n(Y,G=e.keywordError,f){const{it:L}=Y,{gen:N,compositeRule:P,allErrors:W}=L,R=h(Y,G,f);p(N,R),P||W||r(L,t.default.vErrors)}e.reportExtraError=n;function a(Y,G){Y.assign(t.default.errors,G),Y.if((0,l._)`${t.default.vErrors} !== null`,()=>Y.if(G,()=>Y.assign((0,l._)`${t.default.vErrors}.length`,G),()=>Y.assign(t.default.vErrors,null)))}e.resetErrorsCount=a;function b({gen:Y,keyword:G,schemaValue:f,data:L,errsCount:N,it:P}){if(N===void 0)throw new Error("ajv implementation error");const W=Y.name("err");Y.forRange("i",N,t.default.errors,R=>{Y.const(W,(0,l._)`${t.default.vErrors}[${R}]`),Y.if((0,l._)`${W}.instancePath === undefined`,()=>Y.assign((0,l._)`${W}.instancePath`,(0,l.strConcat)(t.default.instancePath,P.errorPath))),Y.assign((0,l._)`${W}.schemaPath`,(0,l.str)`${P.errSchemaPath}/${G}`),P.opts.verbose&&(Y.assign((0,l._)`${W}.schema`,f),Y.assign((0,l._)`${W}.data`,L))})}e.extendErrors=b;function p(Y,G){const f=Y.const("err",G);Y.if((0,l._)`${t.default.vErrors} === null`,()=>Y.assign(t.default.vErrors,(0,l._)`[${f}]`),(0,l._)`${t.default.vErrors}.push(${f})`),Y.code((0,l._)`${t.default.errors}++`)}function r(Y,G){const{gen:f,validateName:L,schemaEnv:N}=Y;N.$async?f.throw((0,l._)`new ${Y.ValidationError}(${G})`):(f.assign((0,l._)`${L}.errors`,G),f.return(!1))}const o={keyword:new l.Name("keyword"),schemaPath:new l.Name("schemaPath"),params:new l.Name("params"),propertyName:new l.Name("propertyName"),message:new l.Name("message"),schema:new l.Name("schema"),parentSchema:new l.Name("parentSchema")};function h(Y,G,f){const{createErrors:L}=Y.it;return L===!1?(0,l._)`{}`:S(Y,G,f)}function S(Y,G,f={}){const{gen:L,it:N}=Y,P=[H(N,f),C(Y,f)];return k(Y,G,P),L.object(...P)}function H({errorPath:Y},{instancePath:G}){const f=G?(0,l.str)`${Y}${(0,c.getErrorPath)(G,c.Type.Str)}`:Y;return[t.default.instancePath,(0,l.strConcat)(t.default.instancePath,f)]}function C({keyword:Y,it:{errSchemaPath:G}},{schemaPath:f,parentSchema:L}){let N=L?G:(0,l.str)`${G}/${Y}`;return f&&(N=(0,l.str)`${N}${(0,c.getErrorPath)(f,c.Type.Str)}`),[o.schemaPath,N]}function k(Y,{params:G,message:f},L){const{keyword:N,data:P,schemaValue:W,it:R}=Y,{opts:g,propertyName:B,topSchemaRef:D,schemaPath:re}=R;L.push([o.keyword,N],[o.params,typeof G=="function"?G(Y):G||(0,l._)`{}`]),g.messages&&L.push([o.message,typeof f=="function"?f(Y):f]),g.verbose&&L.push([o.schema,W],[o.parentSchema,(0,l._)`${D}${re}`],[t.default.data,P]),B&&L.push([o.propertyName,B])}}(ic),Object.defineProperty(wl,"__esModule",{value:!0}),wl.boolOrEmptySchema=wl.topBoolOrEmptySchema=void 0;const Mn=ic,On=oe,Dn=ke,An={message:"boolean schema is false"};function _n(e){const{gen:l,schema:c,validateName:t}=e;c===!1?Mt(e,!1):typeof c=="object"&&c.$async===!0?l.return(Dn.default.data):(l.assign((0,On._)`${t}.errors`,null),l.return(!0))}wl.topBoolOrEmptySchema=_n;function $n(e,l){const{gen:c,schema:t}=e;t===!1?(c.var(l,!1),Mt(e)):c.var(l,!0)}wl.boolOrEmptySchema=$n;function Mt(e,l){const{gen:c,data:t}=e,i={gen:c,keyword:"false schema",data:t,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,Mn.reportError)(i,An,void 0,l)}var Uc={},Sl={};Object.defineProperty(Sl,"__esModule",{value:!0}),Sl.getRules=Sl.isJSONType=void 0;const qn=["string","number","integer","boolean","null","object","array"],ed=new Set(qn);function ld(e){return typeof e=="string"&&ed.has(e)}Sl.isJSONType=ld;function cd(){const e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:Ze(A({},e),{integer:!0,boolean:!0,null:!0}),rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}Sl.getRules=cd;var el={};Object.defineProperty(el,"__esModule",{value:!0}),el.shouldUseRule=el.shouldUseGroup=el.schemaHasRulesForType=void 0;function td({schema:e,self:l},c){const t=l.RULES.types[c];return t&&t!==!0&&Ot(e,t)}el.schemaHasRulesForType=td;function Ot(e,l){return l.rules.some(c=>Dt(e,c))}el.shouldUseGroup=Ot;function Dt(e,l){var c;return e[l.keyword]!==void 0||((c=l.definition.implements)===null||c===void 0?void 0:c.some(t=>e[t]!==void 0))}el.shouldUseRule=Dt,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.reportTypeError=e.checkDataTypes=e.checkDataType=e.coerceAndCheckDataType=e.getJSONTypes=e.getSchemaTypes=e.DataType=void 0;const l=Sl,c=el,t=ic,i=oe,n=Re;var a;(function(L){L[L.Correct=0]="Correct",L[L.Wrong=1]="Wrong"})(a=e.DataType||(e.DataType={}));function b(L){const N=p(L.type);if(N.includes("null")){if(L.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!N.length&&L.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');L.nullable===!0&&N.push("null")}return N}e.getSchemaTypes=b;function p(L){const N=Array.isArray(L)?L:L?[L]:[];if(N.every(l.isJSONType))return N;throw new Error("type must be JSONType or JSONType[]: "+N.join(","))}e.getJSONTypes=p;function r(L,N){const{gen:P,data:W,opts:R}=L,g=h(N,R.coerceTypes),B=N.length>0&&!(g.length===0&&N.length===1&&(0,c.schemaHasRulesForType)(L,N[0]));if(B){const D=k(N,W,R.strictNumbers,a.Wrong);P.if(D,()=>{g.length?S(L,N,g):G(L)})}return B}e.coerceAndCheckDataType=r;const o=new Set(["string","number","integer","boolean","null"]);function h(L,N){return N?L.filter(P=>o.has(P)||N==="array"&&P==="array"):[]}function S(L,N,P){const{gen:W,data:R,opts:g}=L,B=W.let("dataType",(0,i._)`typeof ${R}`),D=W.let("coerced",(0,i._)`undefined`);g.coerceTypes==="array"&&W.if((0,i._)`${B} == 'object' && Array.isArray(${R}) && ${R}.length == 1`,()=>W.assign(R,(0,i._)`${R}[0]`).assign(B,(0,i._)`typeof ${R}`).if(k(N,R,g.strictNumbers),()=>W.assign(D,R))),W.if((0,i._)`${D} !== undefined`);for(const $ of P)(o.has($)||$==="array"&&g.coerceTypes==="array")&&re($);W.else(),G(L),W.endIf(),W.if((0,i._)`${D} !== undefined`,()=>{W.assign(R,D),H(L,D)});function re($){switch($){case"string":W.elseIf((0,i._)`${B} == "number" || ${B} == "boolean"`).assign(D,(0,i._)`"" + ${R}`).elseIf((0,i._)`${R} === null`).assign(D,(0,i._)`""`);return;case"number":W.elseIf((0,i._)`${B} == "boolean" || ${R} === null
3
- || (${B} == "string" && ${R} && ${R} == +${R})`).assign(D,(0,i._)`+${R}`);return;case"integer":W.elseIf((0,i._)`${B} === "boolean" || ${R} === null
4
- || (${B} === "string" && ${R} && ${R} == +${R} && !(${R} % 1))`).assign(D,(0,i._)`+${R}`);return;case"boolean":W.elseIf((0,i._)`${R} === "false" || ${R} === 0 || ${R} === null`).assign(D,!1).elseIf((0,i._)`${R} === "true" || ${R} === 1`).assign(D,!0);return;case"null":W.elseIf((0,i._)`${R} === "" || ${R} === 0 || ${R} === false`),W.assign(D,null);return;case"array":W.elseIf((0,i._)`${B} === "string" || ${B} === "number"
5
- || ${B} === "boolean" || ${R} === null`).assign(D,(0,i._)`[${R}]`)}}}function H({gen:L,parentData:N,parentDataProperty:P},W){L.if((0,i._)`${N} !== undefined`,()=>L.assign((0,i._)`${N}[${P}]`,W))}function C(L,N,P,W=a.Correct){const R=W===a.Correct?i.operators.EQ:i.operators.NEQ;let g;switch(L){case"null":return(0,i._)`${N} ${R} null`;case"array":g=(0,i._)`Array.isArray(${N})`;break;case"object":g=(0,i._)`${N} && typeof ${N} == "object" && !Array.isArray(${N})`;break;case"integer":g=B((0,i._)`!(${N} % 1) && !isNaN(${N})`);break;case"number":g=B();break;default:return(0,i._)`typeof ${N} ${R} ${L}`}return W===a.Correct?g:(0,i.not)(g);function B(D=i.nil){return(0,i.and)((0,i._)`typeof ${N} == "number"`,D,P?(0,i._)`isFinite(${N})`:i.nil)}}e.checkDataType=C;function k(L,N,P,W){if(L.length===1)return C(L[0],N,P,W);let R;const g=(0,n.toHash)(L);if(g.array&&g.object){const B=(0,i._)`typeof ${N} != "object"`;R=g.null?B:(0,i._)`!${N} || ${B}`,delete g.null,delete g.array,delete g.object}else R=i.nil;g.number&&delete g.integer;for(const B in g)R=(0,i.and)(R,C(B,N,P,W));return R}e.checkDataTypes=k;const Y={message:({schema:L})=>`must be ${L}`,params:({schema:L,schemaValue:N})=>typeof L=="string"?(0,i._)`{type: ${L}}`:(0,i._)`{type: ${N}}`};function G(L){const N=f(L);(0,t.reportError)(N,Y)}e.reportTypeError=G;function f(L){const{gen:N,data:P,schema:W}=L,R=(0,n.schemaRefOrVal)(L,W,"type");return{gen:N,keyword:"type",data:P,schema:W.type,schemaCode:R,schemaValue:R,parentSchema:W,params:{},it:L}}}(Uc);var vc={};Object.defineProperty(vc,"__esModule",{value:!0}),vc.assignDefaults=void 0;const Pl=oe,id=Re;function nd(e,l){const{properties:c,items:t}=e.schema;if(l==="object"&&c)for(const i in c)At(e,i,c[i].default);else l==="array"&&Array.isArray(t)&&t.forEach((i,n)=>At(e,n,i.default))}vc.assignDefaults=nd;function At(e,l,c){const{gen:t,compositeRule:i,data:n,opts:a}=e;if(c===void 0)return;const b=(0,Pl._)`${n}${(0,Pl.getProperty)(l)}`;if(i){(0,id.checkStrictMode)(e,`default is ignored for: ${b}`);return}let p=(0,Pl._)`${b} === undefined`;a.useDefaults==="empty"&&(p=(0,Pl._)`${p} || ${b} === null || ${b} === ""`),t.if(p,(0,Pl._)`${b} = ${(0,Pl.stringify)(c)}`)}var Ee={},ne={};Object.defineProperty(ne,"__esModule",{value:!0}),ne.validateUnion=ne.validateArray=ne.usePattern=ne.callValidateCode=ne.schemaProperties=ne.allSchemaProperties=ne.noPropertyInData=ne.propertyInData=ne.isOwnProperty=ne.hasPropFunc=ne.reportMissingProp=ne.checkMissingProp=ne.checkReportMissingProp=void 0;const ue=oe,at=Re,Zl=ke,dd=Re;function sd(e,l){const{gen:c,data:t,it:i}=e;c.if(Zt(c,t,l,i.opts.ownProperties),()=>{e.setParams({missingProperty:(0,ue._)`${l}`},!0),e.error()})}ne.checkReportMissingProp=sd;function ad({gen:e,data:l,it:{opts:c}},t,i){return(0,ue.or)(...t.map(n=>(0,ue.and)(Zt(e,l,n,c.ownProperties),(0,ue._)`${i} = ${n}`)))}ne.checkMissingProp=ad;function od(e,l){e.setParams({missingProperty:l},!0),e.error()}ne.reportMissingProp=od;function _t(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,ue._)`Object.prototype.hasOwnProperty`})}ne.hasPropFunc=_t;function ot(e,l,c){return(0,ue._)`${_t(e)}.call(${l}, ${c})`}ne.isOwnProperty=ot;function Zd(e,l,c,t){const i=(0,ue._)`${l}${(0,ue.getProperty)(c)} !== undefined`;return t?(0,ue._)`${i} && ${ot(e,l,c)}`:i}ne.propertyInData=Zd;function Zt(e,l,c,t){const i=(0,ue._)`${l}${(0,ue.getProperty)(c)} === undefined`;return t?(0,ue.or)(i,(0,ue.not)(ot(e,l,c))):i}ne.noPropertyInData=Zt;function $t(e){return e?Object.keys(e).filter(l=>l!=="__proto__"):[]}ne.allSchemaProperties=$t;function md(e,l){return $t(l).filter(c=>!(0,at.alwaysValidSchema)(e,l[c]))}ne.schemaProperties=md;function ud({schemaCode:e,data:l,it:{gen:c,topSchemaRef:t,schemaPath:i,errorPath:n},it:a},b,p,r){const o=r?(0,ue._)`${e}, ${l}, ${t}${i}`:l,h=[[Zl.default.instancePath,(0,ue.strConcat)(Zl.default.instancePath,n)],[Zl.default.parentData,a.parentData],[Zl.default.parentDataProperty,a.parentDataProperty],[Zl.default.rootData,Zl.default.rootData]];a.opts.dynamicRef&&h.push([Zl.default.dynamicAnchors,Zl.default.dynamicAnchors]);const S=(0,ue._)`${o}, ${c.object(...h)}`;return p!==ue.nil?(0,ue._)`${b}.call(${p}, ${S})`:(0,ue._)`${b}(${S})`}ne.callValidateCode=ud;const bd=(0,ue._)`new RegExp`;function rd({gen:e,it:{opts:l}},c){const t=l.unicodeRegExp?"u":"",{regExp:i}=l.code,n=i(c,t);return e.scopeValue("pattern",{key:n.toString(),ref:n,code:(0,ue._)`${i.code==="new RegExp"?bd:(0,dd.useFunc)(e,i)}(${c}, ${t})`})}ne.usePattern=rd;function hd(e){const{gen:l,data:c,keyword:t,it:i}=e,n=l.name("valid");if(i.allErrors){const b=l.let("valid",!0);return a(()=>l.assign(b,!1)),b}return l.var(n,!0),a(()=>l.break()),n;function a(b){const p=l.const("len",(0,ue._)`${c}.length`);l.forRange("i",0,p,r=>{e.subschema({keyword:t,dataProp:r,dataPropType:at.Type.Num},n),l.if((0,ue.not)(n),b)})}}ne.validateArray=hd;function pd(e){const{gen:l,schema:c,keyword:t,it:i}=e;if(!Array.isArray(c))throw new Error("ajv implementation error");if(c.some(p=>(0,at.alwaysValidSchema)(i,p))&&!i.opts.unevaluated)return;const a=l.let("valid",!1),b=l.name("_valid");l.block(()=>c.forEach((p,r)=>{const o=e.subschema({keyword:t,schemaProp:r,compositeRule:!0},b);l.assign(a,(0,ue._)`${a} || ${b}`),e.mergeValidEvaluated(o,b)||l.if((0,ue.not)(a))})),e.result(a,()=>e.reset(),()=>e.error(!0))}ne.validateUnion=pd,Object.defineProperty(Ee,"__esModule",{value:!0}),Ee.validateKeywordUsage=Ee.validSchemaType=Ee.funcKeywordCode=Ee.macroKeywordCode=void 0;const Ne=oe,Rl=ke,Gd=ne,Vd=ic;function Wd(e,l){const{gen:c,keyword:t,schema:i,parentSchema:n,it:a}=e,b=l.macro.call(a.self,i,n,a),p=ei(c,t,b);a.opts.validateSchema!==!1&&a.self.validateSchema(b,!0);const r=c.name("valid");e.subschema({schema:b,schemaPath:Ne.nil,errSchemaPath:`${a.errSchemaPath}/${t}`,topSchemaRef:p,compositeRule:!0},r),e.pass(r,()=>e.error(!0))}Ee.macroKeywordCode=Wd;function Xd(e,l){var c;const{gen:t,keyword:i,schema:n,parentSchema:a,$data:b,it:p}=e;Yd(p,l);const r=!b&&l.compile?l.compile.call(p.self,n,a,p):l.validate,o=ei(t,i,r),h=t.let("valid");e.block$data(h,S),e.ok((c=l.valid)!==null&&c!==void 0?c:h);function S(){if(l.errors===!1)k(),l.modifying&&qt(e),Y(()=>e.error());else{const G=l.async?H():C();l.modifying&&qt(e),Y(()=>yd(e,G))}}function H(){const G=t.let("ruleErrs",null);return t.try(()=>k((0,Ne._)`await `),f=>t.assign(h,!1).if((0,Ne._)`${f} instanceof ${p.ValidationError}`,()=>t.assign(G,(0,Ne._)`${f}.errors`),()=>t.throw(f))),G}function C(){const G=(0,Ne._)`${o}.errors`;return t.assign(G,null),k(Ne.nil),G}function k(G=l.async?(0,Ne._)`await `:Ne.nil){const f=p.opts.passContext?Rl.default.this:Rl.default.self,L=!("compile"in l&&!b||l.schema===!1);t.assign(h,(0,Ne._)`${G}${(0,Gd.callValidateCode)(e,o,f,L)}`,l.modifying)}function Y(G){var f;t.if((0,Ne.not)((f=l.valid)!==null&&f!==void 0?f:h),G)}}Ee.funcKeywordCode=Xd;function qt(e){const{gen:l,data:c,it:t}=e;l.if(t.parentData,()=>l.assign(c,(0,Ne._)`${t.parentData}[${t.parentDataProperty}]`))}function yd(e,l){const{gen:c}=e;c.if((0,Ne._)`Array.isArray(${l})`,()=>{c.assign(Rl.default.vErrors,(0,Ne._)`${Rl.default.vErrors} === null ? ${l} : ${Rl.default.vErrors}.concat(${l})`).assign(Rl.default.errors,(0,Ne._)`${Rl.default.vErrors}.length`),(0,Vd.extendErrors)(e)},()=>e.error())}function Yd({schemaEnv:e},l){if(l.async&&!e.$async)throw new Error("async keyword in sync schema")}function ei(e,l,c){if(c===void 0)throw new Error(`keyword "${l}" failed to compile`);return e.scopeValue("keyword",typeof c=="function"?{ref:c}:{ref:c,code:(0,Ne.stringify)(c)})}function Id(e,l,c=!1){return!l.length||l.some(t=>t==="array"?Array.isArray(e):t==="object"?e&&typeof e=="object"&&!Array.isArray(e):typeof e==t||c&&typeof e=="undefined")}Ee.validSchemaType=Id;function Sd({schema:e,opts:l,self:c,errSchemaPath:t},i,n){if(Array.isArray(i.keyword)?!i.keyword.includes(n):i.keyword!==n)throw new Error("ajv implementation error");const a=i.dependencies;if(a!=null&&a.some(b=>!Object.prototype.hasOwnProperty.call(e,b)))throw new Error(`parent schema must have dependencies of ${n}: ${a.join(",")}`);if(i.validateSchema&&!i.validateSchema(e[n])){const p=`keyword "${n}" value is invalid at path "${t}": `+c.errorsText(i.validateSchema.errors);if(l.validateSchema==="log")c.logger.error(p);else throw new Error(p)}}Ee.validateKeywordUsage=Sd;var ml={};Object.defineProperty(ml,"__esModule",{value:!0}),ml.extendSubschemaMode=ml.extendSubschemaData=ml.getSubschema=void 0;const je=oe,li=Re;function Rd(e,{keyword:l,schemaProp:c,schema:t,schemaPath:i,errSchemaPath:n,topSchemaRef:a}){if(l!==void 0&&t!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(l!==void 0){const b=e.schema[l];return c===void 0?{schema:b,schemaPath:(0,je._)`${e.schemaPath}${(0,je.getProperty)(l)}`,errSchemaPath:`${e.errSchemaPath}/${l}`}:{schema:b[c],schemaPath:(0,je._)`${e.schemaPath}${(0,je.getProperty)(l)}${(0,je.getProperty)(c)}`,errSchemaPath:`${e.errSchemaPath}/${l}/${(0,li.escapeFragment)(c)}`}}if(t!==void 0){if(i===void 0||n===void 0||a===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:t,schemaPath:i,topSchemaRef:a,errSchemaPath:n}}throw new Error('either "keyword" or "schema" must be passed')}ml.getSubschema=Rd;function fd(e,l,{dataProp:c,dataPropType:t,data:i,dataTypes:n,propertyName:a}){if(i!==void 0&&c!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:b}=l;if(c!==void 0){const{errorPath:r,dataPathArr:o,opts:h}=l,S=b.let("data",(0,je._)`${l.data}${(0,je.getProperty)(c)}`,!0);p(S),e.errorPath=(0,je.str)`${r}${(0,li.getErrorPath)(c,t,h.jsPropertySyntax)}`,e.parentDataProperty=(0,je._)`${c}`,e.dataPathArr=[...o,e.parentDataProperty]}if(i!==void 0){const r=i instanceof je.Name?i:b.let("data",i,!0);p(r),a!==void 0&&(e.propertyName=a)}n&&(e.dataTypes=n);function p(r){e.data=r,e.dataLevel=l.dataLevel+1,e.dataTypes=[],l.definedProperties=new Set,e.parentData=l.data,e.dataNames=[...l.dataNames,r]}}ml.extendSubschemaData=fd;function Ld(e,{jtdDiscriminator:l,jtdMetadata:c,compositeRule:t,createErrors:i,allErrors:n}){t!==void 0&&(e.compositeRule=t),i!==void 0&&(e.createErrors=i),n!==void 0&&(e.allErrors=n),e.jtdDiscriminator=l,e.jtdMetadata=c}ml.extendSubschemaMode=Ld;var Le={},Jd=function e(l,c){if(l===c)return!0;if(l&&c&&typeof l=="object"&&typeof c=="object"){if(l.constructor!==c.constructor)return!1;var t,i,n;if(Array.isArray(l)){if(t=l.length,t!=c.length)return!1;for(i=t;i--!==0;)if(!e(l[i],c[i]))return!1;return!0}if(l.constructor===RegExp)return l.source===c.source&&l.flags===c.flags;if(l.valueOf!==Object.prototype.valueOf)return l.valueOf()===c.valueOf();if(l.toString!==Object.prototype.toString)return l.toString()===c.toString();if(n=Object.keys(l),t=n.length,t!==Object.keys(c).length)return!1;for(i=t;i--!==0;)if(!Object.prototype.hasOwnProperty.call(c,n[i]))return!1;for(i=t;i--!==0;){var a=n[i];if(!e(l[a],c[a]))return!1}return!0}return l!==l&&c!==c},ci={exports:{}},ul=ci.exports=function(e,l,c){typeof l=="function"&&(c=l,l={}),c=l.cb||c;var t=typeof c=="function"?c:c.pre||function(){},i=c.post||function(){};Tc(l,t,i,e,"",e)};ul.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},ul.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},ul.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},ul.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 Tc(e,l,c,t,i,n,a,b,p,r){if(t&&typeof t=="object"&&!Array.isArray(t)){l(t,i,n,a,b,p,r);for(var o in t){var h=t[o];if(Array.isArray(h)){if(o in ul.arrayKeywords)for(var S=0;S<h.length;S++)Tc(e,l,c,h[S],i+"/"+o+"/"+S,n,i,o,t,S)}else if(o in ul.propsKeywords){if(h&&typeof h=="object")for(var H in h)Tc(e,l,c,h[H],i+"/"+o+"/"+Kd(H),n,i,o,t,H)}else(o in ul.keywords||e.allKeys&&!(o in ul.skipKeywords))&&Tc(e,l,c,h,i+"/"+o,n,i,o,t)}c(t,i,n,a,b,p,r)}}function Kd(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}Object.defineProperty(Le,"__esModule",{value:!0}),Le.getSchemaRefs=Le.resolveUrl=Le.normalizeId=Le._getFullPath=Le.getFullPath=Le.inlineRef=void 0;const Nd=Re,Cd=Jd,gd=ci.exports,Hd=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function kd(e,l=!0){return typeof e=="boolean"?!0:l===!0?!mt(e):l?ti(e)<=l:!1}Le.inlineRef=kd;const Fd=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function mt(e){for(const l in e){if(Fd.has(l))return!0;const c=e[l];if(Array.isArray(c)&&c.some(mt)||typeof c=="object"&&mt(c))return!0}return!1}function ti(e){let l=0;for(const c in e){if(c==="$ref")return 1/0;if(l++,!Hd.has(c)&&(typeof e[c]=="object"&&(0,Nd.eachItem)(e[c],t=>l+=ti(t)),l===1/0))return 1/0}return l}function ii(e,l="",c){c!==!1&&(l=Bl(l));const t=e.parse(l);return ni(e,t)}Le.getFullPath=ii;function ni(e,l){return e.serialize(l).split("#")[0]+"#"}Le._getFullPath=ni;const Ud=/#\/?$/;function Bl(e){return e?e.replace(Ud,""):""}Le.normalizeId=Bl;function vd(e,l,c){return c=Bl(c),e.resolve(l,c)}Le.resolveUrl=vd;const Td=/^[a-z_][-a-z0-9._]*$/i;function xd(e,l){if(typeof e=="boolean")return{};const{schemaId:c,uriResolver:t}=this.opts,i=Bl(e[c]||l),n={"":i},a=ii(t,i,!1),b={},p=new Set;return gd(e,{allKeys:!0},(h,S,H,C)=>{if(C===void 0)return;const k=a+S;let Y=n[C];typeof h[c]=="string"&&(Y=G.call(this,h[c])),f.call(this,h.$anchor),f.call(this,h.$dynamicAnchor),n[S]=Y;function G(L){const N=this.opts.uriResolver.resolve;if(L=Bl(Y?N(Y,L):L),p.has(L))throw o(L);p.add(L);let P=this.refs[L];return typeof P=="string"&&(P=this.refs[P]),typeof P=="object"?r(h,P.schema,L):L!==Bl(k)&&(L[0]==="#"?(r(h,b[L],L),b[L]=h):this.refs[L]=k),L}function f(L){if(typeof L=="string"){if(!Td.test(L))throw new Error(`invalid anchor "${L}"`);G.call(this,`#${L}`)}}}),b;function r(h,S,H){if(S!==void 0&&!Cd(h,S))throw o(H)}function o(h){return new Error(`reference "${h}" resolves to more than one schema`)}}Le.getSchemaRefs=xd,Object.defineProperty(Be,"__esModule",{value:!0}),Be.getData=Be.KeywordCxt=Be.validateFunctionCode=void 0;const di=wl,si=Uc,ut=el,xc=Uc,zd=vc,dc=Ee,bt=ml,T=oe,j=ke,wd=Le,ll=Re,sc=ic;function Pd(e){if(mi(e)&&(ui(e),Zi(e))){jd(e);return}ai(e,()=>(0,di.topBoolOrEmptySchema)(e))}Be.validateFunctionCode=Pd;function ai({gen:e,validateName:l,schema:c,schemaEnv:t,opts:i},n){i.code.es5?e.func(l,(0,T._)`${j.default.data}, ${j.default.valCxt}`,t.$async,()=>{e.code((0,T._)`"use strict"; ${oi(c,i)}`),Ed(e,i),e.code(n)}):e.func(l,(0,T._)`${j.default.data}, ${Bd(i)}`,t.$async,()=>e.code(oi(c,i)).code(n))}function Bd(e){return(0,T._)`{${j.default.instancePath}="", ${j.default.parentData}, ${j.default.parentDataProperty}, ${j.default.rootData}=${j.default.data}${e.dynamicRef?(0,T._)`, ${j.default.dynamicAnchors}={}`:T.nil}}={}`}function Ed(e,l){e.if(j.default.valCxt,()=>{e.var(j.default.instancePath,(0,T._)`${j.default.valCxt}.${j.default.instancePath}`),e.var(j.default.parentData,(0,T._)`${j.default.valCxt}.${j.default.parentData}`),e.var(j.default.parentDataProperty,(0,T._)`${j.default.valCxt}.${j.default.parentDataProperty}`),e.var(j.default.rootData,(0,T._)`${j.default.valCxt}.${j.default.rootData}`),l.dynamicRef&&e.var(j.default.dynamicAnchors,(0,T._)`${j.default.valCxt}.${j.default.dynamicAnchors}`)},()=>{e.var(j.default.instancePath,(0,T._)`""`),e.var(j.default.parentData,(0,T._)`undefined`),e.var(j.default.parentDataProperty,(0,T._)`undefined`),e.var(j.default.rootData,j.default.data),l.dynamicRef&&e.var(j.default.dynamicAnchors,(0,T._)`{}`)})}function jd(e){const{schema:l,opts:c,gen:t}=e;ai(e,()=>{c.$comment&&l.$comment&&ri(e),Ad(e),t.let(j.default.vErrors,null),t.let(j.default.errors,0),c.unevaluated&&Qd(e),bi(e),qd(e)})}function Qd(e){const{gen:l,validateName:c}=e;e.evaluated=l.const("evaluated",(0,T._)`${c}.evaluated`),l.if((0,T._)`${e.evaluated}.dynamicProps`,()=>l.assign((0,T._)`${e.evaluated}.props`,(0,T._)`undefined`)),l.if((0,T._)`${e.evaluated}.dynamicItems`,()=>l.assign((0,T._)`${e.evaluated}.items`,(0,T._)`undefined`))}function oi(e,l){const c=typeof e=="object"&&e[l.schemaId];return c&&(l.code.source||l.code.process)?(0,T._)`/*# sourceURL=${c} */`:T.nil}function Md(e,l){if(mi(e)&&(ui(e),Zi(e))){Od(e,l);return}(0,di.boolOrEmptySchema)(e,l)}function Zi({schema:e,self:l}){if(typeof e=="boolean")return!e;for(const c in e)if(l.RULES.all[c])return!0;return!1}function mi(e){return typeof e.schema!="boolean"}function Od(e,l){const{schema:c,gen:t,opts:i}=e;i.$comment&&c.$comment&&ri(e),_d(e),$d(e);const n=t.const("_errs",j.default.errors);bi(e,n),t.var(l,(0,T._)`${n} === ${j.default.errors}`)}function ui(e){(0,ll.checkUnknownRules)(e),Dd(e)}function bi(e,l){if(e.opts.jtd)return hi(e,[],!1,l);const c=(0,si.getSchemaTypes)(e.schema),t=(0,si.coerceAndCheckDataType)(e,c);hi(e,c,!t,l)}function Dd(e){const{schema:l,errSchemaPath:c,opts:t,self:i}=e;l.$ref&&t.ignoreKeywordsWithRef&&(0,ll.schemaHasRulesButRef)(l,i.RULES)&&i.logger.warn(`$ref: keywords ignored in schema at path "${c}"`)}function Ad(e){const{schema:l,opts:c}=e;l.default!==void 0&&c.useDefaults&&c.strictSchema&&(0,ll.checkStrictMode)(e,"default is ignored in the schema root")}function _d(e){const l=e.schema[e.opts.schemaId];l&&(e.baseId=(0,wd.resolveUrl)(e.opts.uriResolver,e.baseId,l))}function $d(e){if(e.schema.$async&&!e.schemaEnv.$async)throw new Error("async schema in sync schema")}function ri({gen:e,schemaEnv:l,schema:c,errSchemaPath:t,opts:i}){const n=c.$comment;if(i.$comment===!0)e.code((0,T._)`${j.default.self}.logger.log(${n})`);else if(typeof i.$comment=="function"){const a=(0,T.str)`${t}/$comment`,b=e.scopeValue("root",{ref:l.root});e.code((0,T._)`${j.default.self}.opts.$comment(${n}, ${a}, ${b}.schema)`)}}function qd(e){const{gen:l,schemaEnv:c,validateName:t,ValidationError:i,opts:n}=e;c.$async?l.if((0,T._)`${j.default.errors} === 0`,()=>l.return(j.default.data),()=>l.throw((0,T._)`new ${i}(${j.default.vErrors})`)):(l.assign((0,T._)`${t}.errors`,j.default.vErrors),n.unevaluated&&es(e),l.return((0,T._)`${j.default.errors} === 0`))}function es({gen:e,evaluated:l,props:c,items:t}){c instanceof T.Name&&e.assign((0,T._)`${l}.props`,c),t instanceof T.Name&&e.assign((0,T._)`${l}.items`,t)}function hi(e,l,c,t){const{gen:i,schema:n,data:a,allErrors:b,opts:p,self:r}=e,{RULES:o}=r;if(n.$ref&&(p.ignoreKeywordsWithRef||!(0,ll.schemaHasRulesButRef)(n,o))){i.block(()=>Wi(e,"$ref",o.all.$ref.definition));return}p.jtd||ls(e,l),i.block(()=>{for(const S of o.rules)h(S);h(o.post)});function h(S){!(0,ut.shouldUseGroup)(n,S)||(S.type?(i.if((0,xc.checkDataType)(S.type,a,p.strictNumbers)),pi(e,S),l.length===1&&l[0]===S.type&&c&&(i.else(),(0,xc.reportTypeError)(e)),i.endIf()):pi(e,S),b||i.if((0,T._)`${j.default.errors} === ${t||0}`))}}function pi(e,l){const{gen:c,schema:t,opts:{useDefaults:i}}=e;i&&(0,zd.assignDefaults)(e,l.type),c.block(()=>{for(const n of l.rules)(0,ut.shouldUseRule)(t,n)&&Wi(e,n.keyword,n.definition,l.type)})}function ls(e,l){e.schemaEnv.meta||!e.opts.strictTypes||(cs(e,l),e.opts.allowUnionTypes||ts(e,l),is(e,e.dataTypes))}function cs(e,l){if(!!l.length){if(!e.dataTypes.length){e.dataTypes=l;return}l.forEach(c=>{Gi(e.dataTypes,c)||rt(e,`type "${c}" not allowed by context "${e.dataTypes.join(",")}"`)}),e.dataTypes=e.dataTypes.filter(c=>Gi(l,c))}}function ts(e,l){l.length>1&&!(l.length===2&&l.includes("null"))&&rt(e,"use allowUnionTypes to allow union type keyword")}function is(e,l){const c=e.self.RULES.all;for(const t in c){const i=c[t];if(typeof i=="object"&&(0,ut.shouldUseRule)(e.schema,i)){const{type:n}=i.definition;n.length&&!n.some(a=>ns(l,a))&&rt(e,`missing type "${n.join(",")}" for keyword "${t}"`)}}}function ns(e,l){return e.includes(l)||l==="number"&&e.includes("integer")}function Gi(e,l){return e.includes(l)||l==="integer"&&e.includes("number")}function rt(e,l){l+=` at "${e.schemaEnv.baseId+e.errSchemaPath}" (strictTypes)`,(0,ll.checkStrictMode)(e,l,e.opts.strictTypes)}class Vi{constructor(l,c,t){if((0,dc.validateKeywordUsage)(l,c,t),this.gen=l.gen,this.allErrors=l.allErrors,this.keyword=t,this.data=l.data,this.schema=l.schema[t],this.$data=c.$data&&l.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,ll.schemaRefOrVal)(l,this.schema,t,this.$data),this.schemaType=c.schemaType,this.parentSchema=l.schema,this.params={},this.it=l,this.def=c,this.$data)this.schemaCode=l.gen.const("vSchema",Xi(this.$data,l));else if(this.schemaCode=this.schemaValue,!(0,dc.validSchemaType)(this.schema,c.schemaType,c.allowUndefined))throw new Error(`${t} value must be ${JSON.stringify(c.schemaType)}`);("code"in c?c.trackErrors:c.errors!==!1)&&(this.errsCount=l.gen.const("_errs",j.default.errors))}result(l,c,t){this.failResult((0,T.not)(l),c,t)}failResult(l,c,t){this.gen.if(l),t?t():this.error(),c?(this.gen.else(),c(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(l,c){this.failResult((0,T.not)(l),void 0,c)}fail(l){if(l===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(l),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(l){if(!this.$data)return this.fail(l);const{schemaCode:c}=this;this.fail((0,T._)`${c} !== undefined && (${(0,T.or)(this.invalid$data(),l)})`)}error(l,c,t){if(c){this.setParams(c),this._error(l,t),this.setParams({});return}this._error(l,t)}_error(l,c){(l?sc.reportExtraError:sc.reportError)(this,this.def.error,c)}$dataError(){(0,sc.reportError)(this,this.def.$dataError||sc.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,sc.resetErrorsCount)(this.gen,this.errsCount)}ok(l){this.allErrors||this.gen.if(l)}setParams(l,c){c?Object.assign(this.params,l):this.params=l}block$data(l,c,t=T.nil){this.gen.block(()=>{this.check$data(l,t),c()})}check$data(l=T.nil,c=T.nil){if(!this.$data)return;const{gen:t,schemaCode:i,schemaType:n,def:a}=this;t.if((0,T.or)((0,T._)`${i} === undefined`,c)),l!==T.nil&&t.assign(l,!0),(n.length||a.validateSchema)&&(t.elseIf(this.invalid$data()),this.$dataError(),l!==T.nil&&t.assign(l,!1)),t.else()}invalid$data(){const{gen:l,schemaCode:c,schemaType:t,def:i,it:n}=this;return(0,T.or)(a(),b());function a(){if(t.length){if(!(c instanceof T.Name))throw new Error("ajv implementation error");const p=Array.isArray(t)?t:[t];return(0,T._)`${(0,xc.checkDataTypes)(p,c,n.opts.strictNumbers,xc.DataType.Wrong)}`}return T.nil}function b(){if(i.validateSchema){const p=l.scopeValue("validate$data",{ref:i.validateSchema});return(0,T._)`!${p}(${c})`}return T.nil}}subschema(l,c){const t=(0,bt.getSubschema)(this.it,l);(0,bt.extendSubschemaData)(t,this.it,l),(0,bt.extendSubschemaMode)(t,l);const i=Ze(A(A({},this.it),t),{items:void 0,props:void 0});return Md(i,c),i}mergeEvaluated(l,c){const{it:t,gen:i}=this;!t.opts.unevaluated||(t.props!==!0&&l.props!==void 0&&(t.props=ll.mergeEvaluated.props(i,l.props,t.props,c)),t.items!==!0&&l.items!==void 0&&(t.items=ll.mergeEvaluated.items(i,l.items,t.items,c)))}mergeValidEvaluated(l,c){const{it:t,gen:i}=this;if(t.opts.unevaluated&&(t.props!==!0||t.items!==!0))return i.if(c,()=>this.mergeEvaluated(l,T.Name)),!0}}Be.KeywordCxt=Vi;function Wi(e,l,c,t){const i=new Vi(e,c,l);"code"in c?c.code(i,t):i.$data&&c.validate?(0,dc.funcKeywordCode)(i,c):"macro"in c?(0,dc.macroKeywordCode)(i,c):(c.compile||c.validate)&&(0,dc.funcKeywordCode)(i,c)}const ds=/^\/(?:[^~]|~0|~1)*$/,ss=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Xi(e,{dataLevel:l,dataNames:c,dataPathArr:t}){let i,n;if(e==="")return j.default.rootData;if(e[0]==="/"){if(!ds.test(e))throw new Error(`Invalid JSON-pointer: ${e}`);i=e,n=j.default.rootData}else{const r=ss.exec(e);if(!r)throw new Error(`Invalid JSON-pointer: ${e}`);const o=+r[1];if(i=r[2],i==="#"){if(o>=l)throw new Error(p("property/index",o));return t[l-o]}if(o>l)throw new Error(p("data",o));if(n=c[l-o],!i)return n}let a=n;const b=i.split("/");for(const r of b)r&&(n=(0,T._)`${n}${(0,T.getProperty)((0,ll.unescapeJsonPointer)(r))}`,a=(0,T._)`${a} && ${n}`);return a;function p(r,o){return`Cannot access ${r} ${o} levels up, current level is ${l}`}}Be.getData=Xi;var zc={};Object.defineProperty(zc,"__esModule",{value:!0});class as extends Error{constructor(l){super("validation failed"),this.errors=l,this.ajv=this.validation=!0}}zc.default=as;var fl={};Object.defineProperty(fl,"__esModule",{value:!0});const ht=Le;class os extends Error{constructor(l,c,t,i){super(i||`can't resolve reference ${t} from id ${c}`),this.missingRef=(0,ht.resolveUrl)(l,c,t),this.missingSchema=(0,ht.normalizeId)((0,ht.getFullPath)(l,this.missingRef))}}fl.default=os;var Ke={};Object.defineProperty(Ke,"__esModule",{value:!0}),Ke.resolveSchema=Ke.getCompilingSchema=Ke.resolveRef=Ke.compileSchema=Ke.SchemaEnv=void 0;const we=oe,Zs=zc,Ll=ke,Pe=Le,yi=Re,ms=Be;class wc{constructor(l){var c;this.refs={},this.dynamicAnchors={};let t;typeof l.schema=="object"&&(t=l.schema),this.schema=l.schema,this.schemaId=l.schemaId,this.root=l.root||this,this.baseId=(c=l.baseId)!==null&&c!==void 0?c:(0,Pe.normalizeId)(t==null?void 0:t[l.schemaId||"$id"]),this.schemaPath=l.schemaPath,this.localRefs=l.localRefs,this.meta=l.meta,this.$async=t==null?void 0:t.$async,this.refs={}}}Ke.SchemaEnv=wc;function pt(e){const l=Yi.call(this,e);if(l)return l;const c=(0,Pe.getFullPath)(this.opts.uriResolver,e.root.baseId),{es5:t,lines:i}=this.opts.code,{ownProperties:n}=this.opts,a=new we.CodeGen(this.scope,{es5:t,lines:i,ownProperties:n});let b;e.$async&&(b=a.scopeValue("Error",{ref:Zs.default,code:(0,we._)`require("ajv/dist/runtime/validation_error").default`}));const p=a.scopeName("validate");e.validateName=p;const r={gen:a,allErrors:this.opts.allErrors,data:Ll.default.data,parentData:Ll.default.parentData,parentDataProperty:Ll.default.parentDataProperty,dataNames:[Ll.default.data],dataPathArr:[we.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:a.scopeValue("schema",this.opts.code.source===!0?{ref:e.schema,code:(0,we.stringify)(e.schema)}:{ref:e.schema}),validateName:p,ValidationError:b,schema:e.schema,schemaEnv:e,rootId:c,baseId:e.baseId||c,schemaPath:we.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,we._)`""`,opts:this.opts,self:this};let o;try{this._compilations.add(e),(0,ms.validateFunctionCode)(r),a.optimize(this.opts.code.optimize);const h=a.toString();o=`${a.scopeRefs(Ll.default.scope)}return ${h}`,this.opts.code.process&&(o=this.opts.code.process(o,e));const H=new Function(`${Ll.default.self}`,`${Ll.default.scope}`,o)(this,this.scope.get());if(this.scope.value(p,{ref:H}),H.errors=null,H.schema=e.schema,H.schemaEnv=e,e.$async&&(H.$async=!0),this.opts.code.source===!0&&(H.source={validateName:p,validateCode:h,scopeValues:a._values}),this.opts.unevaluated){const{props:C,items:k}=r;H.evaluated={props:C instanceof we.Name?void 0:C,items:k instanceof we.Name?void 0:k,dynamicProps:C instanceof we.Name,dynamicItems:k instanceof we.Name},H.source&&(H.source.evaluated=(0,we.stringify)(H.evaluated))}return e.validate=H,e}catch(h){throw delete e.validate,delete e.validateName,o&&this.logger.error("Error compiling schema, function code:",o),h}finally{this._compilations.delete(e)}}Ke.compileSchema=pt;function us(e,l,c){var t;c=(0,Pe.resolveUrl)(this.opts.uriResolver,l,c);const i=e.refs[c];if(i)return i;let n=hs.call(this,e,c);if(n===void 0){const a=(t=e.localRefs)===null||t===void 0?void 0:t[c],{schemaId:b}=this.opts;a&&(n=new wc({schema:a,schemaId:b,root:e,baseId:l}))}if(n!==void 0)return e.refs[c]=bs.call(this,n)}Ke.resolveRef=us;function bs(e){return(0,Pe.inlineRef)(e.schema,this.opts.inlineRefs)?e.schema:e.validate?e:pt.call(this,e)}function Yi(e){for(const l of this._compilations)if(rs(l,e))return l}Ke.getCompilingSchema=Yi;function rs(e,l){return e.schema===l.schema&&e.root===l.root&&e.baseId===l.baseId}function hs(e,l){let c;for(;typeof(c=this.refs[l])=="string";)l=c;return c||this.schemas[l]||Pc.call(this,e,l)}function Pc(e,l){const c=this.opts.uriResolver.parse(l),t=(0,Pe._getFullPath)(this.opts.uriResolver,c);let i=(0,Pe.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&t===i)return Gt.call(this,c,e);const n=(0,Pe.normalizeId)(t),a=this.refs[n]||this.schemas[n];if(typeof a=="string"){const b=Pc.call(this,e,a);return typeof(b==null?void 0:b.schema)!="object"?void 0:Gt.call(this,c,b)}if(typeof(a==null?void 0:a.schema)=="object"){if(a.validate||pt.call(this,a),n===(0,Pe.normalizeId)(l)){const{schema:b}=a,{schemaId:p}=this.opts,r=b[p];return r&&(i=(0,Pe.resolveUrl)(this.opts.uriResolver,i,r)),new wc({schema:b,schemaId:p,root:e,baseId:i})}return Gt.call(this,c,a)}}Ke.resolveSchema=Pc;const ps=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function Gt(e,{baseId:l,schema:c,root:t}){var i;if(((i=e.fragment)===null||i===void 0?void 0:i[0])!=="/")return;for(const b of e.fragment.slice(1).split("/")){if(typeof c=="boolean")return;const p=c[(0,yi.unescapeFragment)(b)];if(p===void 0)return;c=p;const r=typeof c=="object"&&c[this.opts.schemaId];!ps.has(b)&&r&&(l=(0,Pe.resolveUrl)(this.opts.uriResolver,l,r))}let n;if(typeof c!="boolean"&&c.$ref&&!(0,yi.schemaHasRulesButRef)(c,this.RULES)){const b=(0,Pe.resolveUrl)(this.opts.uriResolver,l,c.$ref);n=Pc.call(this,t,b)}const{schemaId:a}=this.opts;if(n=n||new wc({schema:c,schemaId:a,root:t,baseId:l}),n.schema!==n.root.schema)return n}var Gs={$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},Vt={},Wt={exports:{}};/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */(function(e,l){(function(c,t){t(l)})(E,function(c){function t(){for(var Z=arguments.length,s=Array(Z),u=0;u<Z;u++)s[u]=arguments[u];if(s.length>1){s[0]=s[0].slice(0,-1);for(var I=s.length-1,y=1;y<I;++y)s[y]=s[y].slice(1,-1);return s[I]=s[I].slice(1),s.join("")}else return s[0]}function i(Z){return"(?:"+Z+")"}function n(Z){return Z===void 0?"undefined":Z===null?"null":Object.prototype.toString.call(Z).split(" ").pop().split("]").shift().toLowerCase()}function a(Z){return Z.toUpperCase()}function b(Z){return Z!=null?Z instanceof Array?Z:typeof Z.length!="number"||Z.split||Z.setInterval||Z.call?[Z]:Array.prototype.slice.call(Z):[]}function p(Z,s){var u=Z;if(s)for(var I in s)u[I]=s[I];return u}function r(Z){var s="[A-Za-z]",u="[0-9]",I=t(u,"[A-Fa-f]"),y=i(i("%[EFef]"+I+"%"+I+I+"%"+I+I)+"|"+i("%[89A-Fa-f]"+I+"%"+I+I)+"|"+i("%"+I+I)),z="[\\:\\/\\?\\#\\[\\]\\@]",w="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",de=t(z,w),he=Z?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]",Ye=Z?"[\\uE000-\\uF8FF]":"[]",le=t(s,u,"[\\-\\.\\_\\~]",he);i(s+t(s,u,"[\\+\\-\\.]")+"*"),i(i(y+"|"+t(le,w,"[\\:]"))+"*");var me=i(i("25[0-5]")+"|"+i("2[0-4]"+u)+"|"+i("1"+u+u)+"|"+i("0?[1-9]"+u)+"|0?0?"+u),Ie=i(me+"\\."+me+"\\."+me+"\\."+me),Q=i(I+"{1,4}"),Ve=i(i(Q+"\\:"+Q)+"|"+Ie),Se=i(i(Q+"\\:")+"{6}"+Ve),We=i("\\:\\:"+i(Q+"\\:")+"{5}"+Ve),yl=i(i(Q)+"?\\:\\:"+i(Q+"\\:")+"{4}"+Ve),_e=i(i(i(Q+"\\:")+"{0,1}"+Q)+"?\\:\\:"+i(Q+"\\:")+"{3}"+Ve),$e=i(i(i(Q+"\\:")+"{0,2}"+Q)+"?\\:\\:"+i(Q+"\\:")+"{2}"+Ve),cc=i(i(i(Q+"\\:")+"{0,3}"+Q)+"?\\:\\:"+Q+"\\:"+Ve),Tl=i(i(i(Q+"\\:")+"{0,4}"+Q)+"?\\:\\:"+Ve),xe=i(i(i(Q+"\\:")+"{0,5}"+Q)+"?\\:\\:"+Q),qe=i(i(i(Q+"\\:")+"{0,6}"+Q)+"?\\:\\:"),xl=i([Se,We,yl,_e,$e,cc,Tl,xe,qe].join("|")),al=i(i(le+"|"+y)+"+");i("[vV]"+I+"+\\."+t(le,w,"[\\:]")+"+"),i(i(y+"|"+t(le,w))+"*");var Nc=i(y+"|"+t(le,w,"[\\:\\@]"));return i(i(y+"|"+t(le,w,"[\\@]"))+"+"),i(i(Nc+"|"+t("[\\/\\?]",Ye))+"*"),{NOT_SCHEME:new RegExp(t("[^]",s,u,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(t("[^\\%\\:]",le,w),"g"),NOT_HOST:new RegExp(t("[^\\%\\[\\]\\:]",le,w),"g"),NOT_PATH:new RegExp(t("[^\\%\\/\\:\\@]",le,w),"g"),NOT_PATH_NOSCHEME:new RegExp(t("[^\\%\\/\\@]",le,w),"g"),NOT_QUERY:new RegExp(t("[^\\%]",le,w,"[\\:\\@\\/\\?]",Ye),"g"),NOT_FRAGMENT:new RegExp(t("[^\\%]",le,w,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(t("[^]",le,w),"g"),UNRESERVED:new RegExp(le,"g"),OTHER_CHARS:new RegExp(t("[^\\%]",le,de),"g"),PCT_ENCODED:new RegExp(y,"g"),IPV4ADDRESS:new RegExp("^("+Ie+")$"),IPV6ADDRESS:new RegExp("^\\[?("+xl+")"+i(i("\\%25|\\%(?!"+I+"{2})")+"("+al+")")+"?\\]?$")}}var o=r(!1),h=r(!0),S=function(){function Z(s,u){var I=[],y=!0,z=!1,w=void 0;try{for(var de=s[Symbol.iterator](),he;!(y=(he=de.next()).done)&&(I.push(he.value),!(u&&I.length===u));y=!0);}catch(Ye){z=!0,w=Ye}finally{try{!y&&de.return&&de.return()}finally{if(z)throw w}}return I}return function(s,u){if(Array.isArray(s))return s;if(Symbol.iterator in Object(s))return Z(s,u);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),H=function(Z){if(Array.isArray(Z)){for(var s=0,u=Array(Z.length);s<Z.length;s++)u[s]=Z[s];return u}else return Array.from(Z)},C=2147483647,k=36,Y=1,G=26,f=38,L=700,N=72,P=128,W="-",R=/^xn--/,g=/[^\0-\x7E]/,B=/[\x2E\u3002\uFF0E\uFF61]/g,D={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},re=k-Y,$=Math.floor,se=String.fromCharCode;function q(Z){throw new RangeError(D[Z])}function Ge(Z,s){for(var u=[],I=Z.length;I--;)u[I]=s(Z[I]);return u}function Xe(Z,s){var u=Z.split("@"),I="";u.length>1&&(I=u[0]+"@",Z=u[1]),Z=Z.replace(B,".");var y=Z.split("."),z=Ge(y,s).join(".");return I+z}function fe(Z){for(var s=[],u=0,I=Z.length;u<I;){var y=Z.charCodeAt(u++);if(y>=55296&&y<=56319&&u<I){var z=Z.charCodeAt(u++);(z&64512)==56320?s.push(((y&1023)<<10)+(z&1023)+65536):(s.push(y),u--)}else s.push(y)}return s}var ve=function(s){return String.fromCodePoint.apply(String,H(s))},Dl=function(s){return s-48<10?s-22:s-65<26?s-65:s-97<26?s-97:k},F=function(s,u){return s+22+75*(s<26)-((u!=0)<<5)},V=function(s,u,I){var y=0;for(s=I?$(s/L):s>>1,s+=$(s/u);s>re*G>>1;y+=k)s=$(s/re);return $(y+(re+1)*s/(s+f))},K=function(s){var u=[],I=s.length,y=0,z=P,w=N,de=s.lastIndexOf(W);de<0&&(de=0);for(var he=0;he<de;++he)s.charCodeAt(he)>=128&&q("not-basic"),u.push(s.charCodeAt(he));for(var Ye=de>0?de+1:0;Ye<I;){for(var le=y,me=1,Ie=k;;Ie+=k){Ye>=I&&q("invalid-input");var Q=Dl(s.charCodeAt(Ye++));(Q>=k||Q>$((C-y)/me))&&q("overflow"),y+=Q*me;var Ve=Ie<=w?Y:Ie>=w+G?G:Ie-w;if(Q<Ve)break;var Se=k-Ve;me>$(C/Se)&&q("overflow"),me*=Se}var We=u.length+1;w=V(y-le,We,le==0),$(y/We)>C-z&&q("overflow"),z+=$(y/We),y%=We,u.splice(y++,0,z)}return String.fromCodePoint.apply(String,u)},X=function(s){var u=[];s=fe(s);var I=s.length,y=P,z=0,w=N,de=!0,he=!1,Ye=void 0;try{for(var le=s[Symbol.iterator](),me;!(de=(me=le.next()).done);de=!0){var Ie=me.value;Ie<128&&u.push(se(Ie))}}catch(Cc){he=!0,Ye=Cc}finally{try{!de&&le.return&&le.return()}finally{if(he)throw Ye}}var Q=u.length,Ve=Q;for(Q&&u.push(W);Ve<I;){var Se=C,We=!0,yl=!1,_e=void 0;try{for(var $e=s[Symbol.iterator](),cc;!(We=(cc=$e.next()).done);We=!0){var Tl=cc.value;Tl>=y&&Tl<Se&&(Se=Tl)}}catch(Cc){yl=!0,_e=Cc}finally{try{!We&&$e.return&&$e.return()}finally{if(yl)throw _e}}var xe=Ve+1;Se-y>$((C-z)/xe)&&q("overflow"),z+=(Se-y)*xe,y=Se;var qe=!0,xl=!1,al=void 0;try{for(var Nc=s[Symbol.iterator](),Nn;!(qe=(Nn=Nc.next()).done);qe=!0){var Cn=Nn.value;if(Cn<y&&++z>C&&q("overflow"),Cn==y){for(var tt=z,it=k;;it+=k){var nt=it<=w?Y:it>=w+G?G:it-w;if(tt<nt)break;var gn=tt-nt,Hn=k-nt;u.push(se(F(nt+gn%Hn,0))),tt=$(gn/Hn)}u.push(se(F(tt,0))),w=V(z,xe,Ve==Q),z=0,++Ve}}}catch(Cc){xl=!0,al=Cc}finally{try{!qe&&Nc.return&&Nc.return()}finally{if(xl)throw al}}++z,++y}return u.join("")},d=function(s){return Xe(s,function(u){return R.test(u)?K(u.slice(4).toLowerCase()):u})},m=function(s){return Xe(s,function(u){return g.test(u)?"xn--"+X(u):u})},J={version:"2.1.0",ucs2:{decode:fe,encode:ve},decode:K,encode:X,toASCII:m,toUnicode:d},U={};function v(Z){var s=Z.charCodeAt(0),u=void 0;return s<16?u="%0"+s.toString(16).toUpperCase():s<128?u="%"+s.toString(16).toUpperCase():s<2048?u="%"+(s>>6|192).toString(16).toUpperCase()+"%"+(s&63|128).toString(16).toUpperCase():u="%"+(s>>12|224).toString(16).toUpperCase()+"%"+(s>>6&63|128).toString(16).toUpperCase()+"%"+(s&63|128).toString(16).toUpperCase(),u}function ee(Z){for(var s="",u=0,I=Z.length;u<I;){var y=parseInt(Z.substr(u+1,2),16);if(y<128)s+=String.fromCharCode(y),u+=3;else if(y>=194&&y<224){if(I-u>=6){var z=parseInt(Z.substr(u+4,2),16);s+=String.fromCharCode((y&31)<<6|z&63)}else s+=Z.substr(u,6);u+=6}else if(y>=224){if(I-u>=9){var w=parseInt(Z.substr(u+4,2),16),de=parseInt(Z.substr(u+7,2),16);s+=String.fromCharCode((y&15)<<12|(w&63)<<6|de&63)}else s+=Z.substr(u,9);u+=9}else s+=Z.substr(u,3),u+=3}return s}function ie(Z,s){function u(I){var y=ee(I);return y.match(s.UNRESERVED)?y:I}return Z.scheme&&(Z.scheme=String(Z.scheme).replace(s.PCT_ENCODED,u).toLowerCase().replace(s.NOT_SCHEME,"")),Z.userinfo!==void 0&&(Z.userinfo=String(Z.userinfo).replace(s.PCT_ENCODED,u).replace(s.NOT_USERINFO,v).replace(s.PCT_ENCODED,a)),Z.host!==void 0&&(Z.host=String(Z.host).replace(s.PCT_ENCODED,u).toLowerCase().replace(s.NOT_HOST,v).replace(s.PCT_ENCODED,a)),Z.path!==void 0&&(Z.path=String(Z.path).replace(s.PCT_ENCODED,u).replace(Z.scheme?s.NOT_PATH:s.NOT_PATH_NOSCHEME,v).replace(s.PCT_ENCODED,a)),Z.query!==void 0&&(Z.query=String(Z.query).replace(s.PCT_ENCODED,u).replace(s.NOT_QUERY,v).replace(s.PCT_ENCODED,a)),Z.fragment!==void 0&&(Z.fragment=String(Z.fragment).replace(s.PCT_ENCODED,u).replace(s.NOT_FRAGMENT,v).replace(s.PCT_ENCODED,a)),Z}function ye(Z){return Z.replace(/^0*(.*)/,"$1")||"0"}function Oe(Z,s){var u=Z.match(s.IPV4ADDRESS)||[],I=S(u,2),y=I[1];return y?y.split(".").map(ye).join("."):Z}function Al(Z,s){var u=Z.match(s.IPV6ADDRESS)||[],I=S(u,3),y=I[1],z=I[2];if(y){for(var w=y.toLowerCase().split("::").reverse(),de=S(w,2),he=de[0],Ye=de[1],le=Ye?Ye.split(":").map(ye):[],me=he.split(":").map(ye),Ie=s.IPV4ADDRESS.test(me[me.length-1]),Q=Ie?7:8,Ve=me.length-Q,Se=Array(Q),We=0;We<Q;++We)Se[We]=le[We]||me[Ve+We]||"";Ie&&(Se[Q-1]=Oe(Se[Q-1],s));var yl=Se.reduce(function(xe,qe,xl){if(!qe||qe==="0"){var al=xe[xe.length-1];al&&al.index+al.length===xl?al.length++:xe.push({index:xl,length:1})}return xe},[]),_e=yl.sort(function(xe,qe){return qe.length-xe.length})[0],$e=void 0;if(_e&&_e.length>1){var cc=Se.slice(0,_e.index),Tl=Se.slice(_e.index+_e.length);$e=cc.join(":")+"::"+Tl.join(":")}else $e=Se.join(":");return z&&($e+="%"+z),$e}else return Z}var Ic=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,Sc="".match(/(){0}/)[1]===void 0;function He(Z){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},u={},I=s.iri!==!1?h:o;s.reference==="suffix"&&(Z=(s.scheme?s.scheme+":":"")+"//"+Z);var y=Z.match(Ic);if(y){Sc?(u.scheme=y[1],u.userinfo=y[3],u.host=y[4],u.port=parseInt(y[5],10),u.path=y[6]||"",u.query=y[7],u.fragment=y[8],isNaN(u.port)&&(u.port=y[5])):(u.scheme=y[1]||void 0,u.userinfo=Z.indexOf("@")!==-1?y[3]:void 0,u.host=Z.indexOf("//")!==-1?y[4]:void 0,u.port=parseInt(y[5],10),u.path=y[6]||"",u.query=Z.indexOf("?")!==-1?y[7]:void 0,u.fragment=Z.indexOf("#")!==-1?y[8]:void 0,isNaN(u.port)&&(u.port=Z.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?y[4]:void 0)),u.host&&(u.host=Al(Oe(u.host,I),I)),u.scheme===void 0&&u.userinfo===void 0&&u.host===void 0&&u.port===void 0&&!u.path&&u.query===void 0?u.reference="same-document":u.scheme===void 0?u.reference="relative":u.fragment===void 0?u.reference="absolute":u.reference="uri",s.reference&&s.reference!=="suffix"&&s.reference!==u.reference&&(u.error=u.error||"URI is not a "+s.reference+" reference.");var z=U[(s.scheme||u.scheme||"").toLowerCase()];if(!s.unicodeSupport&&(!z||!z.unicodeSupport)){if(u.host&&(s.domainHost||z&&z.domainHost))try{u.host=J.toASCII(u.host.replace(I.PCT_ENCODED,ee).toLowerCase())}catch(w){u.error=u.error||"Host's domain name can not be converted to ASCII via punycode: "+w}ie(u,o)}else ie(u,I);z&&z.parse&&z.parse(u,s)}else u.error=u.error||"URI can not be parsed.";return u}function Rc(Z,s){var u=s.iri!==!1?h:o,I=[];return Z.userinfo!==void 0&&(I.push(Z.userinfo),I.push("@")),Z.host!==void 0&&I.push(Al(Oe(String(Z.host),u),u).replace(u.IPV6ADDRESS,function(y,z,w){return"["+z+(w?"%25"+w:"")+"]"})),(typeof Z.port=="number"||typeof Z.port=="string")&&(I.push(":"),I.push(String(Z.port))),I.length?I.join(""):void 0}var _l=/^\.\.?\//,$l=/^\/\.(\/|$)/,ql=/^\/\.\.(\/|$)/,fc=/^\/?(?:.|\n)*?(?=\/|$)/;function De(Z){for(var s=[];Z.length;)if(Z.match(_l))Z=Z.replace(_l,"");else if(Z.match($l))Z=Z.replace($l,"/");else if(Z.match(ql))Z=Z.replace(ql,"/"),s.pop();else if(Z==="."||Z==="..")Z="";else{var u=Z.match(fc);if(u){var I=u[0];Z=Z.slice(I.length),s.push(I)}else throw new Error("Unexpected dot segment condition")}return s.join("")}function ge(Z){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},u=s.iri?h:o,I=[],y=U[(s.scheme||Z.scheme||"").toLowerCase()];if(y&&y.serialize&&y.serialize(Z,s),Z.host&&!u.IPV6ADDRESS.test(Z.host)){if(s.domainHost||y&&y.domainHost)try{Z.host=s.iri?J.toUnicode(Z.host):J.toASCII(Z.host.replace(u.PCT_ENCODED,ee).toLowerCase())}catch(de){Z.error=Z.error||"Host's domain name can not be converted to "+(s.iri?"Unicode":"ASCII")+" via punycode: "+de}}ie(Z,u),s.reference!=="suffix"&&Z.scheme&&(I.push(Z.scheme),I.push(":"));var z=Rc(Z,s);if(z!==void 0&&(s.reference!=="suffix"&&I.push("//"),I.push(z),Z.path&&Z.path.charAt(0)!=="/"&&I.push("/")),Z.path!==void 0){var w=Z.path;!s.absolutePath&&(!y||!y.absolutePath)&&(w=De(w)),z===void 0&&(w=w.replace(/^\/\//,"/%2F")),I.push(w)}return Z.query!==void 0&&(I.push("?"),I.push(Z.query)),Z.fragment!==void 0&&(I.push("#"),I.push(Z.fragment)),I.join("")}function ec(Z,s){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},I=arguments[3],y={};return I||(Z=He(ge(Z,u),u),s=He(ge(s,u),u)),u=u||{},!u.tolerant&&s.scheme?(y.scheme=s.scheme,y.userinfo=s.userinfo,y.host=s.host,y.port=s.port,y.path=De(s.path||""),y.query=s.query):(s.userinfo!==void 0||s.host!==void 0||s.port!==void 0?(y.userinfo=s.userinfo,y.host=s.host,y.port=s.port,y.path=De(s.path||""),y.query=s.query):(s.path?(s.path.charAt(0)==="/"?y.path=De(s.path):((Z.userinfo!==void 0||Z.host!==void 0||Z.port!==void 0)&&!Z.path?y.path="/"+s.path:Z.path?y.path=Z.path.slice(0,Z.path.lastIndexOf("/")+1)+s.path:y.path=s.path,y.path=De(y.path)),y.query=s.query):(y.path=Z.path,s.query!==void 0?y.query=s.query:y.query=Z.query),y.userinfo=Z.userinfo,y.host=Z.host,y.port=Z.port),y.scheme=Z.scheme),y.fragment=s.fragment,y}function Lc(Z,s,u){var I=p({scheme:"null"},u);return ge(ec(He(Z,I),He(s,I),I,!0),I)}function Ul(Z,s){return typeof Z=="string"?Z=ge(He(Z,s),s):n(Z)==="object"&&(Z=He(ge(Z,s),s)),Z}function Jc(Z,s,u){return typeof Z=="string"?Z=ge(He(Z,u),u):n(Z)==="object"&&(Z=ge(Z,u)),typeof s=="string"?s=ge(He(s,u),u):n(s)==="object"&&(s=ge(s,u)),Z===s}function ct(Z,s){return Z&&Z.toString().replace(!s||!s.iri?o.ESCAPE:h.ESCAPE,v)}function Te(Z,s){return Z&&Z.toString().replace(!s||!s.iri?o.PCT_ENCODED:h.PCT_ENCODED,ee)}var vl={scheme:"http",domainHost:!0,parse:function(s,u){return s.host||(s.error=s.error||"HTTP URIs must have a host."),s},serialize:function(s,u){var I=String(s.scheme).toLowerCase()==="https";return(s.port===(I?443:80)||s.port==="")&&(s.port=void 0),s.path||(s.path="/"),s}},Yn={scheme:"https",domainHost:vl.domainHost,parse:vl.parse,serialize:vl.serialize};function In(Z){return typeof Z.secure=="boolean"?Z.secure:String(Z.scheme).toLowerCase()==="wss"}var Kc={scheme:"ws",domainHost:!0,parse:function(s,u){var I=s;return I.secure=In(I),I.resourceName=(I.path||"/")+(I.query?"?"+I.query:""),I.path=void 0,I.query=void 0,I},serialize:function(s,u){if((s.port===(In(s)?443:80)||s.port==="")&&(s.port=void 0),typeof s.secure=="boolean"&&(s.scheme=s.secure?"wss":"ws",s.secure=void 0),s.resourceName){var I=s.resourceName.split("?"),y=S(I,2),z=y[0],w=y[1];s.path=z&&z!=="/"?z:void 0,s.query=w,s.resourceName=void 0}return s.fragment=void 0,s}},Sn={scheme:"wss",domainHost:Kc.domainHost,parse:Kc.parse,serialize:Kc.serialize},Jo={},Rn="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",Ae="[0-9A-Fa-f]",Ko=i(i("%[EFef]"+Ae+"%"+Ae+Ae+"%"+Ae+Ae)+"|"+i("%[89A-Fa-f]"+Ae+"%"+Ae+Ae)+"|"+i("%"+Ae+Ae)),No="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",Co="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",go=t(Co,'[\\"\\\\]'),Ho="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",ko=new RegExp(Rn,"g"),lc=new RegExp(Ko,"g"),Fo=new RegExp(t("[^]",No,"[\\.]",'[\\"]',go),"g"),fn=new RegExp(t("[^]",Rn,Ho),"g"),Uo=fn;function Bt(Z){var s=ee(Z);return s.match(ko)?s:Z}var Ln={scheme:"mailto",parse:function(s,u){var I=s,y=I.to=I.path?I.path.split(","):[];if(I.path=void 0,I.query){for(var z=!1,w={},de=I.query.split("&"),he=0,Ye=de.length;he<Ye;++he){var le=de[he].split("=");switch(le[0]){case"to":for(var me=le[1].split(","),Ie=0,Q=me.length;Ie<Q;++Ie)y.push(me[Ie]);break;case"subject":I.subject=Te(le[1],u);break;case"body":I.body=Te(le[1],u);break;default:z=!0,w[Te(le[0],u)]=Te(le[1],u);break}}z&&(I.headers=w)}I.query=void 0;for(var Ve=0,Se=y.length;Ve<Se;++Ve){var We=y[Ve].split("@");if(We[0]=Te(We[0]),u.unicodeSupport)We[1]=Te(We[1],u).toLowerCase();else try{We[1]=J.toASCII(Te(We[1],u).toLowerCase())}catch(yl){I.error=I.error||"Email address's domain name can not be converted to ASCII via punycode: "+yl}y[Ve]=We.join("@")}return I},serialize:function(s,u){var I=s,y=b(s.to);if(y){for(var z=0,w=y.length;z<w;++z){var de=String(y[z]),he=de.lastIndexOf("@"),Ye=de.slice(0,he).replace(lc,Bt).replace(lc,a).replace(Fo,v),le=de.slice(he+1);try{le=u.iri?J.toUnicode(le):J.toASCII(Te(le,u).toLowerCase())}catch(Ve){I.error=I.error||"Email address's domain name can not be converted to "+(u.iri?"Unicode":"ASCII")+" via punycode: "+Ve}y[z]=Ye+"@"+le}I.path=y.join(",")}var me=s.headers=s.headers||{};s.subject&&(me.subject=s.subject),s.body&&(me.body=s.body);var Ie=[];for(var Q in me)me[Q]!==Jo[Q]&&Ie.push(Q.replace(lc,Bt).replace(lc,a).replace(fn,v)+"="+me[Q].replace(lc,Bt).replace(lc,a).replace(Uo,v));return Ie.length&&(I.query=Ie.join("&")),I}},vo=/^([^\:]+)\:(.*)/,Jn={scheme:"urn",parse:function(s,u){var I=s.path&&s.path.match(vo),y=s;if(I){var z=u.scheme||y.scheme||"urn",w=I[1].toLowerCase(),de=I[2],he=z+":"+(u.nid||w),Ye=U[he];y.nid=w,y.nss=de,y.path=void 0,Ye&&(y=Ye.parse(y,u))}else y.error=y.error||"URN can not be parsed.";return y},serialize:function(s,u){var I=u.scheme||s.scheme||"urn",y=s.nid,z=I+":"+(u.nid||y),w=U[z];w&&(s=w.serialize(s,u));var de=s,he=s.nss;return de.path=(y||u.nid)+":"+he,de}},To=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,Kn={scheme:"urn:uuid",parse:function(s,u){var I=s;return I.uuid=I.nss,I.nss=void 0,!u.tolerant&&(!I.uuid||!I.uuid.match(To))&&(I.error=I.error||"UUID is not valid."),I},serialize:function(s,u){var I=s;return I.nss=(s.uuid||"").toLowerCase(),I}};U[vl.scheme]=vl,U[Yn.scheme]=Yn,U[Kc.scheme]=Kc,U[Sn.scheme]=Sn,U[Ln.scheme]=Ln,U[Jn.scheme]=Jn,U[Kn.scheme]=Kn,c.SCHEMES=U,c.pctEncChar=v,c.pctDecChars=ee,c.parse=He,c.removeDotSegments=De,c.serialize=ge,c.resolveComponents=ec,c.resolve=Lc,c.normalize=Ul,c.equal=Jc,c.escapeComponent=ct,c.unescapeComponent=Te,Object.defineProperty(c,"__esModule",{value:!0})})})(Wt,Wt.exports),Object.defineProperty(Vt,"__esModule",{value:!0});const Ii=Wt.exports;Ii.code='require("ajv/dist/runtime/uri").default',Vt.default=Ii,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=void 0;var l=Be;Object.defineProperty(e,"KeywordCxt",{enumerable:!0,get:function(){return l.KeywordCxt}});var c=oe;Object.defineProperty(e,"_",{enumerable:!0,get:function(){return c._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return c.str}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return c.stringify}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return c.nil}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return c.Name}}),Object.defineProperty(e,"CodeGen",{enumerable:!0,get:function(){return c.CodeGen}});const t=zc,i=fl,n=Sl,a=Ke,b=oe,p=Le,r=Uc,o=Re,h=Gs,S=Vt,H=(F,V)=>new RegExp(F,V);H.code="new RegExp";const C=["removeAdditional","useDefaults","coerceTypes"],k=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),Y={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."},G={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},f=200;function L(F){var V,K,X,d,m,J,U,v,ee,ie,ye,Oe,Al,Ic,Sc,He,Rc,_l,$l,ql,fc,De,ge,ec,Lc;const Ul=F.strict,Jc=(V=F.code)===null||V===void 0?void 0:V.optimize,ct=Jc===!0||Jc===void 0?1:Jc||0,Te=(X=(K=F.code)===null||K===void 0?void 0:K.regExp)!==null&&X!==void 0?X:H,vl=(d=F.uriResolver)!==null&&d!==void 0?d:S.default;return{strictSchema:(J=(m=F.strictSchema)!==null&&m!==void 0?m:Ul)!==null&&J!==void 0?J:!0,strictNumbers:(v=(U=F.strictNumbers)!==null&&U!==void 0?U:Ul)!==null&&v!==void 0?v:!0,strictTypes:(ie=(ee=F.strictTypes)!==null&&ee!==void 0?ee:Ul)!==null&&ie!==void 0?ie:"log",strictTuples:(Oe=(ye=F.strictTuples)!==null&&ye!==void 0?ye:Ul)!==null&&Oe!==void 0?Oe:"log",strictRequired:(Ic=(Al=F.strictRequired)!==null&&Al!==void 0?Al:Ul)!==null&&Ic!==void 0?Ic:!1,code:F.code?Ze(A({},F.code),{optimize:ct,regExp:Te}):{optimize:ct,regExp:Te},loopRequired:(Sc=F.loopRequired)!==null&&Sc!==void 0?Sc:f,loopEnum:(He=F.loopEnum)!==null&&He!==void 0?He:f,meta:(Rc=F.meta)!==null&&Rc!==void 0?Rc:!0,messages:(_l=F.messages)!==null&&_l!==void 0?_l:!0,inlineRefs:($l=F.inlineRefs)!==null&&$l!==void 0?$l:!0,schemaId:(ql=F.schemaId)!==null&&ql!==void 0?ql:"$id",addUsedSchema:(fc=F.addUsedSchema)!==null&&fc!==void 0?fc:!0,validateSchema:(De=F.validateSchema)!==null&&De!==void 0?De:!0,validateFormats:(ge=F.validateFormats)!==null&&ge!==void 0?ge:!0,unicodeRegExp:(ec=F.unicodeRegExp)!==null&&ec!==void 0?ec:!0,int32range:(Lc=F.int32range)!==null&&Lc!==void 0?Lc:!0,uriResolver:vl}}class N{constructor(V={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,V=this.opts=A(A({},V),L(V));const{es5:K,lines:X}=this.opts.code;this.scope=new b.ValueScope({scope:{},prefixes:k,es5:K,lines:X}),this.logger=$(V.logger);const d=V.validateFormats;V.validateFormats=!1,this.RULES=(0,n.getRules)(),P.call(this,Y,V,"NOT SUPPORTED"),P.call(this,G,V,"DEPRECATED","warn"),this._metaOpts=D.call(this),V.formats&&g.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),V.keywords&&B.call(this,V.keywords),typeof V.meta=="object"&&this.addMetaSchema(V.meta),R.call(this),V.validateFormats=d}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:V,meta:K,schemaId:X}=this.opts;let d=h;X==="id"&&(d=A({},h),d.id=d.$id,delete d.$id),K&&V&&this.addMetaSchema(d,d[X],!1)}defaultMeta(){const{meta:V,schemaId:K}=this.opts;return this.opts.defaultMeta=typeof V=="object"?V[K]||V:void 0}validate(V,K){let X;if(typeof V=="string"){if(X=this.getSchema(V),!X)throw new Error(`no schema with key or ref "${V}"`)}else X=this.compile(V);const d=X(K);return"$async"in X||(this.errors=X.errors),d}compile(V,K){const X=this._addSchema(V,K);return X.validate||this._compileSchemaEnv(X)}compileAsync(V,K){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema:X}=this.opts;return d.call(this,V,K);async function d(ie,ye){await m.call(this,ie.$schema);const Oe=this._addSchema(ie,ye);return Oe.validate||J.call(this,Oe)}async function m(ie){ie&&!this.getSchema(ie)&&await d.call(this,{$ref:ie},!0)}async function J(ie){try{return this._compileSchemaEnv(ie)}catch(ye){if(!(ye instanceof i.default))throw ye;return U.call(this,ye),await v.call(this,ye.missingSchema),J.call(this,ie)}}function U({missingSchema:ie,missingRef:ye}){if(this.refs[ie])throw new Error(`AnySchema ${ie} is loaded but ${ye} cannot be resolved`)}async function v(ie){const ye=await ee.call(this,ie);this.refs[ie]||await m.call(this,ye.$schema),this.refs[ie]||this.addSchema(ye,ie,K)}async function ee(ie){const ye=this._loading[ie];if(ye)return ye;try{return await(this._loading[ie]=X(ie))}finally{delete this._loading[ie]}}}addSchema(V,K,X,d=this.opts.validateSchema){if(Array.isArray(V)){for(const J of V)this.addSchema(J,void 0,X,d);return this}let m;if(typeof V=="object"){const{schemaId:J}=this.opts;if(m=V[J],m!==void 0&&typeof m!="string")throw new Error(`schema ${J} must be string`)}return K=(0,p.normalizeId)(K||m),this._checkUnique(K),this.schemas[K]=this._addSchema(V,X,K,d,!0),this}addMetaSchema(V,K,X=this.opts.validateSchema){return this.addSchema(V,K,!0,X),this}validateSchema(V,K){if(typeof V=="boolean")return!0;let X;if(X=V.$schema,X!==void 0&&typeof X!="string")throw new Error("$schema must be a string");if(X=X||this.opts.defaultMeta||this.defaultMeta(),!X)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const d=this.validate(X,V);if(!d&&K){const m="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(m);else throw new Error(m)}return d}getSchema(V){let K;for(;typeof(K=W.call(this,V))=="string";)V=K;if(K===void 0){const{schemaId:X}=this.opts,d=new a.SchemaEnv({schema:{},schemaId:X});if(K=a.resolveSchema.call(this,d,V),!K)return;this.refs[V]=K}return K.validate||this._compileSchemaEnv(K)}removeSchema(V){if(V instanceof RegExp)return this._removeAllSchemas(this.schemas,V),this._removeAllSchemas(this.refs,V),this;switch(typeof V){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const K=W.call(this,V);return typeof K=="object"&&this._cache.delete(K.schema),delete this.schemas[V],delete this.refs[V],this}case"object":{const K=V;this._cache.delete(K);let X=V[this.opts.schemaId];return X&&(X=(0,p.normalizeId)(X),delete this.schemas[X],delete this.refs[X]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(V){for(const K of V)this.addKeyword(K);return this}addKeyword(V,K){let X;if(typeof V=="string")X=V,typeof K=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),K.keyword=X);else if(typeof V=="object"&&K===void 0){if(K=V,X=K.keyword,Array.isArray(X)&&!X.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(q.call(this,X,K),!K)return(0,o.eachItem)(X,m=>Ge.call(this,m)),this;fe.call(this,K);const d=Ze(A({},K),{type:(0,r.getJSONTypes)(K.type),schemaType:(0,r.getJSONTypes)(K.schemaType)});return(0,o.eachItem)(X,d.type.length===0?m=>Ge.call(this,m,d):m=>d.type.forEach(J=>Ge.call(this,m,d,J))),this}getKeyword(V){const K=this.RULES.all[V];return typeof K=="object"?K.definition:!!K}removeKeyword(V){const{RULES:K}=this;delete K.keywords[V],delete K.all[V];for(const X of K.rules){const d=X.rules.findIndex(m=>m.keyword===V);d>=0&&X.rules.splice(d,1)}return this}addFormat(V,K){return typeof K=="string"&&(K=new RegExp(K)),this.formats[V]=K,this}errorsText(V=this.errors,{separator:K=", ",dataVar:X="data"}={}){return!V||V.length===0?"No errors":V.map(d=>`${X}${d.instancePath} ${d.message}`).reduce((d,m)=>d+K+m)}$dataMetaSchema(V,K){const X=this.RULES.all;V=JSON.parse(JSON.stringify(V));for(const d of K){const m=d.split("/").slice(1);let J=V;for(const U of m)J=J[U];for(const U in X){const v=X[U];if(typeof v!="object")continue;const{$data:ee}=v.definition,ie=J[U];ee&&ie&&(J[U]=Dl(ie))}}return V}_removeAllSchemas(V,K){for(const X in V){const d=V[X];(!K||K.test(X))&&(typeof d=="string"?delete V[X]:d&&!d.meta&&(this._cache.delete(d.schema),delete V[X]))}}_addSchema(V,K,X,d=this.opts.validateSchema,m=this.opts.addUsedSchema){let J;const{schemaId:U}=this.opts;if(typeof V=="object")J=V[U];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof V!="boolean")throw new Error("schema must be object or boolean")}let v=this._cache.get(V);if(v!==void 0)return v;X=(0,p.normalizeId)(J||X);const ee=p.getSchemaRefs.call(this,V,X);return v=new a.SchemaEnv({schema:V,schemaId:U,meta:K,baseId:X,localRefs:ee}),this._cache.set(v.schema,v),m&&!X.startsWith("#")&&(X&&this._checkUnique(X),this.refs[X]=v),d&&this.validateSchema(V,!0),v}_checkUnique(V){if(this.schemas[V]||this.refs[V])throw new Error(`schema with key or id "${V}" already exists`)}_compileSchemaEnv(V){if(V.meta?this._compileMetaSchema(V):a.compileSchema.call(this,V),!V.validate)throw new Error("ajv implementation error");return V.validate}_compileMetaSchema(V){const K=this.opts;this.opts=this._metaOpts;try{a.compileSchema.call(this,V)}finally{this.opts=K}}}e.default=N,N.ValidationError=t.default,N.MissingRefError=i.default;function P(F,V,K,X="error"){for(const d in F){const m=d;m in V&&this.logger[X](`${K}: option ${d}. ${F[m]}`)}}function W(F){return F=(0,p.normalizeId)(F),this.schemas[F]||this.refs[F]}function R(){const F=this.opts.schemas;if(!!F)if(Array.isArray(F))this.addSchema(F);else for(const V in F)this.addSchema(F[V],V)}function g(){for(const F in this.opts.formats){const V=this.opts.formats[F];V&&this.addFormat(F,V)}}function B(F){if(Array.isArray(F)){this.addVocabulary(F);return}this.logger.warn("keywords option as map is deprecated, pass array");for(const V in F){const K=F[V];K.keyword||(K.keyword=V),this.addKeyword(K)}}function D(){const F=A({},this.opts);for(const V of C)delete F[V];return F}const re={log(){},warn(){},error(){}};function $(F){if(F===!1)return re;if(F===void 0)return console;if(F.log&&F.warn&&F.error)return F;throw new Error("logger must implement log, warn and error methods")}const se=/^[a-z_$][a-z0-9_$:-]*$/i;function q(F,V){const{RULES:K}=this;if((0,o.eachItem)(F,X=>{if(K.keywords[X])throw new Error(`Keyword ${X} is already defined`);if(!se.test(X))throw new Error(`Keyword ${X} has invalid name`)}),!!V&&V.$data&&!("code"in V||"validate"in V))throw new Error('$data keyword must have "code" or "validate" function')}function Ge(F,V,K){var X;const d=V==null?void 0:V.post;if(K&&d)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:m}=this;let J=d?m.post:m.rules.find(({type:v})=>v===K);if(J||(J={type:K,rules:[]},m.rules.push(J)),m.keywords[F]=!0,!V)return;const U={keyword:F,definition:Ze(A({},V),{type:(0,r.getJSONTypes)(V.type),schemaType:(0,r.getJSONTypes)(V.schemaType)})};V.before?Xe.call(this,J,U,V.before):J.rules.push(U),m.all[F]=U,(X=V.implements)===null||X===void 0||X.forEach(v=>this.addKeyword(v))}function Xe(F,V,K){const X=F.rules.findIndex(d=>d.keyword===K);X>=0?F.rules.splice(X,0,V):(F.rules.push(V),this.logger.warn(`rule ${K} is not defined`))}function fe(F){let{metaSchema:V}=F;V!==void 0&&(F.$data&&this.opts.$data&&(V=Dl(V)),F.validateSchema=this.compile(V,!0))}const ve={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function Dl(F){return{anyOf:[F,ve]}}}(Qt);var Xt={},Jl={},Kl={};Object.defineProperty(Kl,"__esModule",{value:!0}),Kl.callRef=Kl.getValidate=void 0;const Vs=fl,Si=ne,Ce=oe,El=ke,Ri=Ke,Bc=Re,Ws={keyword:"$ref",schemaType:"string",code(e){const{gen:l,schema:c,it:t}=e,{baseId:i,schemaEnv:n,validateName:a,opts:b,self:p}=t,{root:r}=n;if((c==="#"||c==="#/")&&i===r.baseId)return h();const o=Ri.resolveRef.call(p,r,i,c);if(o===void 0)throw new Vs.default(t.opts.uriResolver,i,c);if(o instanceof Ri.SchemaEnv)return S(o);return H(o);function h(){if(n===r)return Ec(e,a,n,n.$async);const C=l.scopeValue("root",{ref:r});return Ec(e,(0,Ce._)`${C}.validate`,r,r.$async)}function S(C){const k=fi(e,C);Ec(e,k,C,C.$async)}function H(C){const k=l.scopeValue("schema",b.code.source===!0?{ref:C,code:(0,Ce.stringify)(C)}:{ref:C}),Y=l.name("valid"),G=e.subschema({schema:C,dataTypes:[],schemaPath:Ce.nil,topSchemaRef:k,errSchemaPath:c},Y);e.mergeEvaluated(G),e.ok(Y)}}};function fi(e,l){const{gen:c}=e;return l.validate?c.scopeValue("validate",{ref:l.validate}):(0,Ce._)`${c.scopeValue("wrapper",{ref:l})}.validate`}Kl.getValidate=fi;function Ec(e,l,c,t){const{gen:i,it:n}=e,{allErrors:a,schemaEnv:b,opts:p}=n,r=p.passContext?El.default.this:Ce.nil;t?o():h();function o(){if(!b.$async)throw new Error("async schema referenced by sync schema");const C=i.let("valid");i.try(()=>{i.code((0,Ce._)`await ${(0,Si.callValidateCode)(e,l,r)}`),H(l),a||i.assign(C,!0)},k=>{i.if((0,Ce._)`!(${k} instanceof ${n.ValidationError})`,()=>i.throw(k)),S(k),a||i.assign(C,!1)}),e.ok(C)}function h(){e.result((0,Si.callValidateCode)(e,l,r),()=>H(l),()=>S(l))}function S(C){const k=(0,Ce._)`${C}.errors`;i.assign(El.default.vErrors,(0,Ce._)`${El.default.vErrors} === null ? ${k} : ${El.default.vErrors}.concat(${k})`),i.assign(El.default.errors,(0,Ce._)`${El.default.vErrors}.length`)}function H(C){var k;if(!n.opts.unevaluated)return;const Y=(k=c==null?void 0:c.validate)===null||k===void 0?void 0:k.evaluated;if(n.props!==!0)if(Y&&!Y.dynamicProps)Y.props!==void 0&&(n.props=Bc.mergeEvaluated.props(i,Y.props,n.props));else{const G=i.var("props",(0,Ce._)`${C}.evaluated.props`);n.props=Bc.mergeEvaluated.props(i,G,n.props,Ce.Name)}if(n.items!==!0)if(Y&&!Y.dynamicItems)Y.items!==void 0&&(n.items=Bc.mergeEvaluated.items(i,Y.items,n.items));else{const G=i.var("items",(0,Ce._)`${C}.evaluated.items`);n.items=Bc.mergeEvaluated.items(i,G,n.items,Ce.Name)}}}Kl.callRef=Ec,Kl.default=Ws;var Fe={};Object.defineProperty(Fe,"__esModule",{value:!0}),Fe.checkMetadata=void 0;const Xs=Re,ys={keyword:"metadata",schemaType:"object",code(e){Li(e);const{gen:l,schema:c,it:t}=e;if((0,Xs.alwaysValidSchema)(t,c))return;const i=l.name("valid");e.subschema({keyword:"metadata",jtdMetadata:!0},i),e.ok(i)}};function Li({it:e,keyword:l},c){if(e.jtdMetadata!==c)throw new Error(`JTD: "${l}" cannot be used in this schema location`)}Fe.checkMetadata=Li,Fe.default=ys,Object.defineProperty(Jl,"__esModule",{value:!0}),Jl.hasRef=void 0;const Ji=Ke,ac=oe,Ys=fl,Ki=ke,Ni=Kl,Is=Fe,Ss={keyword:"ref",schemaType:"string",code(e){(0,Is.checkMetadata)(e);const{gen:l,data:c,schema:t,parentSchema:i,it:n}=e,{schemaEnv:{root:a}}=n,b=l.name("valid");i.nullable?(l.var(b,(0,ac._)`${c} === null`),l.if((0,ac.not)(b),p)):(l.var(b,!1),p()),e.ok(b);function p(){var h;const S=(h=a.schema.definitions)===null||h===void 0?void 0:h[t];if(!S)throw new Ys.default(n.opts.uriResolver,"",t,`No definition ${t}`);yt(S)||!n.opts.inlineRefs?r(S):o(S)}function r(h){const S=Ji.compileSchema.call(n.self,new Ji.SchemaEnv({schema:h,root:a,schemaPath:`/definitions/${t}`})),H=(0,Ni.getValidate)(e,S),C=l.const("_errs",Ki.default.errors);(0,Ni.callRef)(e,H,S,S.$async),l.assign(b,(0,ac._)`${C} === ${Ki.default.errors}`)}function o(h){const S=l.scopeValue("schema",n.opts.code.source===!0?{ref:h,code:(0,ac.stringify)(h)}:{ref:h});e.subschema({schema:h,dataTypes:[],schemaPath:ac.nil,topSchemaRef:S,errSchemaPath:`/definitions/${t}`},b)}}};function yt(e){for(const l in e){let c;if(l==="ref"||typeof(c=e[l])=="object"&&yt(c))return!0}return!1}Jl.hasRef=yt,Jl.default=Ss;var Yt={},jc={};Object.defineProperty(jc,"__esModule",{value:!0});const Rs=/t|\s/i,fs=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,Ls=/^(\d\d):(\d\d):(\d\d)(?:\.\d+)?(?:z|([+-]\d\d)(?::?(\d\d))?)$/i,Js=[0,31,28,31,30,31,30,31,31,30,31,30,31];function Ci(e,l){const c=e.split(Rs);return c.length===2&&gi(c[0])&&Ks(c[1])||l&&c.length===1&&gi(c[0])}jc.default=Ci;function gi(e){const l=fs.exec(e);if(!l)return!1;const c=+l[1],t=+l[2],i=+l[3];return t>=1&&t<=12&&i>=1&&(i<=Js[t]||t===2&&i===29&&(c%100===0?c%400===0:c%4===0))}function Ks(e){const l=Ls.exec(e);if(!l)return!1;const c=+l[1],t=+l[2],i=+l[3],n=+(l[4]||0),a=+(l[5]||0);return c<=23&&t<=59&&i<=59||c-n===23&&t-a===59&&i===60}Ci.code='require("ajv/dist/runtime/timestamp").default';var Ue={};Object.defineProperty(Ue,"__esModule",{value:!0}),Ue.typeErrorParams=Ue.typeErrorMessage=Ue.typeError=void 0;const Ns=oe;function Cs(e){return{message:l=>Hi(l,e),params:l=>ki(l,e)}}Ue.typeError=Cs;function Hi({parentSchema:e},l){return e!=null&&e.nullable?`must be ${l} or null`:`must be ${l}`}Ue.typeErrorMessage=Hi;function ki({parentSchema:e},l){return(0,Ns._)`{type: ${l}, nullable: ${!!(e!=null&&e.nullable)}}`}Ue.typeErrorParams=ki,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.intRange=void 0;const l=oe,c=jc,t=Re,i=Fe,n=Ue;e.intRange={int8:[-128,127,3],uint8:[0,255,3],int16:[-32768,32767,5],uint16:[0,65535,5],int32:[-2147483648,2147483647,10],uint32:[0,4294967295,10]};const a={message:r=>(0,n.typeErrorMessage)(r,r.schema),params:r=>(0,n.typeErrorParams)(r,r.schema)};function b(r){const{gen:o,data:h,it:S}=r,{timestamp:H,allowDate:C}=S.opts;if(H==="date")return(0,l._)`${h} instanceof Date `;const k=(0,t.useFunc)(o,c.default),Y=C?(0,l._)`, true`:l.nil,G=(0,l._)`typeof ${h} == "string" && ${k}(${h}${Y})`;return H==="string"?G:(0,l.or)((0,l._)`${h} instanceof Date`,G)}const p={keyword:"type",schemaType:"string",error:a,code(r){(0,i.checkMetadata)(r);const{data:o,schema:h,parentSchema:S,it:H}=r;let C;switch(h){case"boolean":case"string":C=(0,l._)`typeof ${o} == ${h}`;break;case"timestamp":{C=b(r);break}case"float32":case"float64":C=(0,l._)`typeof ${o} == "number"`;break;default:{const k=h;if(C=(0,l._)`typeof ${o} == "number" && isFinite(${o}) && !(${o} % 1)`,!H.opts.int32range&&(k==="int32"||k==="uint32"))k==="uint32"&&(C=(0,l._)`${C} && ${o} >= 0`);else{const[Y,G]=e.intRange[k];C=(0,l._)`${C} && ${o} >= ${Y} && ${o} <= ${G}`}}}r.pass(S.nullable?(0,l.or)((0,l._)`${o} === null`,C):C)}};e.default=p}(Yt);var It={},Qe={};Object.defineProperty(Qe,"__esModule",{value:!0}),Qe.checkNullableObject=Qe.checkNullable=void 0;const Qc=oe;function Fi({gen:e,data:l,parentSchema:c},t=Qc.nil){const i=e.name("valid");return c.nullable?(e.let(i,(0,Qc._)`${l} === null`),t=(0,Qc.not)(i)):e.let(i,!1),[i,t]}Qe.checkNullable=Fi;function gs(e,l){const[c,t]=Fi(e,l);return[c,(0,Qc._)`${t} && typeof ${e.data} == "object" && !Array.isArray(${e.data})`]}Qe.checkNullableObject=gs,Object.defineProperty(It,"__esModule",{value:!0});const bl=oe,Hs=Fe,ks=Qe,Fs={keyword:"enum",schemaType:"array",error:{message:"must be equal to one of the allowed values",params:({schemaCode:e})=>(0,bl._)`{allowedValues: ${e}}`},code(e){(0,Hs.checkMetadata)(e);const{gen:l,data:c,schema:t,schemaValue:i,parentSchema:n,it:a}=e;if(t.length===0)throw new Error("enum must have non-empty array");if(t.length!==new Set(t).size)throw new Error("enum items must be unique");let b;const p=(0,bl._)`typeof ${c} == "string"`;if(t.length>=a.opts.loopEnum){let o;[b,o]=(0,ks.checkNullable)(e,p),l.if(o,r)}else{if(!Array.isArray(t))throw new Error("ajv implementation error");b=(0,bl.and)(p,(0,bl.or)(...t.map(o=>(0,bl._)`${c} === ${o}`))),n.nullable&&(b=(0,bl.or)((0,bl._)`${c} === null`,b))}e.pass(b);function r(){l.forOf("v",i,o=>l.if((0,bl._)`${b} = ${c} === ${o}`,()=>l.break()))}}};It.default=Fs;var St={};Object.defineProperty(St,"__esModule",{value:!0});const Us=Re,vs=ne,Ui=oe,Ts=Fe,xs=Qe,zs={keyword:"elements",schemaType:"object",error:(0,Ue.typeError)("array"),code(e){(0,Ts.checkMetadata)(e);const{gen:l,data:c,schema:t,it:i}=e;if((0,Us.alwaysValidSchema)(i,t))return;const[n]=(0,xs.checkNullable)(e);l.if((0,Ui.not)(n),()=>l.if((0,Ui._)`Array.isArray(${c})`,()=>l.assign(n,(0,vs.validateArray)(e)),()=>e.error())),e.ok(n)}};St.default=zs;var Rt={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.validateProperties=e.error=void 0;const l=ne,c=Re,t=oe,i=Fe,n=Qe,a=Ue;var b;(function(o){o.Additional="additional",o.Missing="missing"})(b||(b={})),e.error={message:o=>{const{params:h}=o;return h.propError?h.propError===b.Additional?"must NOT have additional properties":`must have property '${h.missingProperty}'`:(0,a.typeErrorMessage)(o,"object")},params:o=>{const{params:h}=o;return h.propError?h.propError===b.Additional?(0,t._)`{error: ${h.propError}, additionalProperty: ${h.additionalProperty}}`:(0,t._)`{error: ${h.propError}, missingProperty: ${h.missingProperty}}`:(0,a.typeErrorParams)(o,"object")}};const p={keyword:"properties",schemaType:"object",error:e.error,code:r};function r(o){(0,i.checkMetadata)(o);const{gen:h,data:S,parentSchema:H,it:C}=o,{additionalProperties:k,nullable:Y}=H;if(C.jtdDiscriminator&&Y)throw new Error("JTD: nullable inside discriminator mapping");if(R())throw new Error("JTD: properties and optionalProperties have common members");const[G,f]=g("properties"),[L,N]=g("optionalProperties");if(f.length===0&&N.length===0&&k)return;const[P,W]=C.jtdDiscriminator===void 0?(0,n.checkNullableObject)(o,S):[h.let("valid",!1),!0];h.if(W,()=>h.assign(P,!0).block(()=>{B(f,"properties",!0),B(N,"optionalProperties"),k||re()})),o.pass(P);function R(){const se=H.properties,q=H.optionalProperties;if(!(se&&q))return!1;for(const Ge in se)if(Object.prototype.hasOwnProperty.call(q,Ge))return!0;return!1}function g(se){const q=H[se],Ge=q?(0,l.allSchemaProperties)(q):[];if(C.jtdDiscriminator&&Ge.some(fe=>fe===C.jtdDiscriminator))throw new Error(`JTD: discriminator tag used in ${se}`);const Xe=Ge.filter(fe=>!(0,c.alwaysValidSchema)(C,q[fe]));return[Ge,Xe]}function B(se,q,Ge){const Xe=h.var("valid");for(const ve of se)h.if((0,l.propertyInData)(h,S,ve,C.opts.ownProperties),()=>D(ve,q,Xe),()=>fe(ve)),o.ok(Xe);function fe(ve){Ge?(h.assign(Xe,!1),o.error(!1,{propError:b.Missing,missingProperty:ve},{schemaPath:ve})):h.assign(Xe,!0)}}function D(se,q,Ge){o.subschema({keyword:q,schemaProp:se,dataProp:se},Ge)}function re(){h.forIn("key",S,se=>{const q=C.jtdDiscriminator===void 0?G:[C.jtdDiscriminator].concat(G),Ge=$(se,q,"properties"),Xe=$(se,L,"optionalProperties"),fe=Ge===!0?Xe:Xe===!0?Ge:(0,t.and)(Ge,Xe);h.if(fe,()=>{C.opts.removeAdditional?h.code((0,t._)`delete ${S}[${se}]`):(o.error(!1,{propError:b.Additional,additionalProperty:se},{instancePath:se,parentSchema:!0}),C.opts.allErrors||h.break())})})}function $(se,q,Ge){let Xe;if(q.length>8){const fe=(0,c.schemaRefOrVal)(C,H[Ge],Ge);Xe=(0,t.not)((0,l.isOwnProperty)(h,fe,se))}else q.length?Xe=(0,t.and)(...q.map(fe=>(0,t._)`${se} !== ${fe}`)):Xe=!0;return Xe}}e.validateProperties=r,e.default=p})(Rt);var ft={};Object.defineProperty(ft,"__esModule",{value:!0});const vi=Rt,ws={keyword:"optionalProperties",schemaType:"object",error:vi.error,code(e){e.parentSchema.properties||(0,vi.validateProperties)(e)}};ft.default=ws;var Lt={},Ti={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.DiscrError=void 0,function(l){l.Tag="tag",l.Mapping="mapping"}(e.DiscrError||(e.DiscrError={}))})(Ti),Object.defineProperty(Lt,"__esModule",{value:!0});const Nl=oe,Ps=Fe,Bs=Qe,xi=Ue,Mc=Ti,Es={keyword:"discriminator",schemaType:"string",implements:["mapping"],error:{message:e=>{const{schema:l,params:c}=e;return c.discrError?c.discrError===Mc.DiscrError.Tag?`tag "${l}" must be string`:`value of tag "${l}" must be in mapping`:(0,xi.typeErrorMessage)(e,"object")},params:e=>{const{schema:l,params:c}=e;return c.discrError?(0,Nl._)`{error: ${c.discrError}, tag: ${l}, tagValue: ${c.tag}}`:(0,xi.typeErrorParams)(e,"object")}},code(e){(0,Ps.checkMetadata)(e);const{gen:l,data:c,schema:t,parentSchema:i}=e,[n,a]=(0,Bs.checkNullableObject)(e,c);l.if(a),b(),l.elseIf((0,Nl.not)(n)),e.error(),l.endIf(),e.ok(n);function b(){const o=l.const("tag",(0,Nl._)`${c}${(0,Nl.getProperty)(t)}`);l.if((0,Nl._)`${o} === undefined`),e.error(!1,{discrError:Mc.DiscrError.Tag,tag:o}),l.elseIf((0,Nl._)`typeof ${o} == "string"`),p(o),l.else(),e.error(!1,{discrError:Mc.DiscrError.Tag,tag:o},{instancePath:t}),l.endIf()}function p(o){l.if(!1);for(const h in i.mapping)l.elseIf((0,Nl._)`${o} === ${h}`),l.assign(n,r(h));l.else(),e.error(!1,{discrError:Mc.DiscrError.Mapping,tag:o},{instancePath:t,schemaPath:"mapping",parentSchema:!0}),l.endIf()}function r(o){const h=l.name("valid");return e.subschema({keyword:"mapping",schemaProp:o,jtdDiscriminator:t},h),h}}};Lt.default=Es;var Jt={};Object.defineProperty(Jt,"__esModule",{value:!0});const zi=Re,wi=oe,js=Fe,Qs=Qe,Ms={keyword:"values",schemaType:"object",error:(0,Ue.typeError)("object"),code(e){(0,js.checkMetadata)(e);const{gen:l,data:c,schema:t,it:i}=e;if((0,zi.alwaysValidSchema)(i,t))return;const[n,a]=(0,Qs.checkNullableObject)(e,c);l.if(a),l.assign(n,b()),l.elseIf((0,wi.not)(n)),e.error(),l.endIf(),e.ok(n);function b(){const p=l.name("valid");if(i.allErrors){const o=l.let("valid",!0);return r(()=>l.assign(o,!1)),o}return l.var(p,!0),r(()=>l.break()),p;function r(o){l.forIn("key",c,h=>{e.subschema({keyword:"values",dataProp:h,dataPropType:zi.Type.Str},p),l.if((0,wi.not)(p),o)})}}}};Jt.default=Ms;var Kt={};Object.defineProperty(Kt,"__esModule",{value:!0});const Os={keyword:"union",schemaType:"array",trackErrors:!0,code:ne.validateUnion,error:{message:"must match a schema in union"}};Kt.default=Os,Object.defineProperty(Xt,"__esModule",{value:!0});const Ds=Jl,As=Yt,_s=It,$s=St,qs=Rt,ea=ft,la=Lt,ca=Jt,ta=Kt,ia=Fe,na=["definitions",Ds.default,As.default,_s.default,$s.default,qs.default,ea.default,la.default,ca.default,ta.default,ia.default,{keyword:"additionalProperties",schemaType:"boolean"},{keyword:"nullable",schemaType:"boolean"}];Xt.default=na;var Nt={};Object.defineProperty(Nt,"__esModule",{value:!0});const cl=e=>{const l={nullable:{type:"boolean"},metadata:{optionalProperties:{union:{elements:{ref:"schema"}}},additionalProperties:!0}};return e&&(l.definitions={values:{ref:"schema"}}),l},da=e=>({optionalProperties:cl(e)}),sa=e=>({properties:{ref:{type:"string"}},optionalProperties:cl(e)}),aa=e=>({properties:{type:{enum:["boolean","timestamp","string","float32","float64","int8","uint8","int16","uint16","int32","uint32"]}},optionalProperties:cl(e)}),oa=e=>({properties:{enum:{elements:{type:"string"}}},optionalProperties:cl(e)}),Za=e=>({properties:{elements:{ref:"schema"}},optionalProperties:cl(e)}),Pi=e=>({properties:{properties:{values:{ref:"schema"}}},optionalProperties:A({optionalProperties:{values:{ref:"schema"}},additionalProperties:{type:"boolean"}},cl(e))}),Bi=e=>({properties:{optionalProperties:{values:{ref:"schema"}}},optionalProperties:A({additionalProperties:{type:"boolean"}},cl(e))}),ma=e=>({properties:{discriminator:{type:"string"},mapping:{values:{metadata:{union:[Pi(!1),Bi(!1)]}}}},optionalProperties:cl(e)}),ua=e=>({properties:{values:{ref:"schema"}},optionalProperties:cl(e)}),Ei=e=>({metadata:{union:[da,sa,aa,oa,Za,Pi,Bi,ma,ua].map(l=>l(e))}}),ba=A({definitions:{schema:Ei(!1)}},Ei(!0));Nt.default=ba;var Ct={},oc={};Object.defineProperty(oc,"__esModule",{value:!0}),oc.jtdForms=void 0,oc.jtdForms=["elements","values","discriminator","properties","optionalProperties","enum","type","ref"];var gt={};Object.defineProperty(gt,"__esModule",{value:!0});const Ht=/[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,ra={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function ji(e){return Ht.lastIndex=0,'"'+(Ht.test(e)?e.replace(Ht,l=>{const c=ra[l];return typeof c=="string"?c:"\\u"+("0000"+l.charCodeAt(0).toString(16)).slice(-4)}):e)+'"'}gt.default=ji,ji.code='require("ajv/dist/runtime/quote").default',Object.defineProperty(Ct,"__esModule",{value:!0});const ha=oc,Qi=Ke,te=oe,pa=fl,be=ke,Ga=ne,Va=Jl,Wa=Re,Xa=gt,ya={elements:Ia,values:Sa,discriminator:Ra,properties:Di,optionalProperties:Di,enum:mc,type:fa,ref:Ja};function Mi(e,l){const c=Qi.getCompilingSchema.call(this,e);if(c)return c;const{es5:t,lines:i}=this.opts.code,{ownProperties:n}=this.opts,a=new te.CodeGen(this.scope,{es5:t,lines:i,ownProperties:n}),b=a.scopeName("serialize"),p={self:this,gen:a,schema:e.schema,schemaEnv:e,definitions:l,data:be.default.data};let r;try{this._compilations.add(e),e.serializeName=b,a.func(b,be.default.data,!1,()=>{a.let(be.default.json,(0,te.str)``),Zc(p),a.return(be.default.json)}),a.optimize(this.opts.code.optimize);const o=a.toString();r=`${a.scopeRefs(be.default.scope)}return ${o}`;const S=new Function(`${be.default.scope}`,r)(this.scope.get());this.scope.value(b,{ref:S}),e.serialize=S}catch(o){throw r&&this.logger.error("Error compiling serializer, function code:",r),delete e.serialize,delete e.serializeName,o}finally{this._compilations.delete(e)}return e}Ct.default=Mi;function Zc(e){let l;for(const c of ha.jtdForms)if(c in e.schema){l=c;break}Ya(e,l?ya[l]:Na)}function Ya(e,l){const{gen:c,schema:t,data:i}=e;if(!t.nullable)return l(e);c.if((0,te._)`${i} === undefined || ${i} === null`,()=>c.add(be.default.json,(0,te._)`"null"`),()=>l(e))}function Ia(e){const{gen:l,schema:c,data:t}=e;l.add(be.default.json,(0,te.str)`[`);const i=l.let("first",!0);l.forOf("el",t,n=>{_i(e,i),Zc(Ze(A({},e),{schema:c.elements,data:n}))}),l.add(be.default.json,(0,te.str)`]`)}function Sa(e){const{gen:l,schema:c,data:t}=e;l.add(be.default.json,(0,te.str)`{`);const i=l.let("first",!0);l.forIn("key",t,n=>Oi(e,n,c.values,i)),l.add(be.default.json,(0,te.str)`}`)}function Oi(e,l,c,t){const{gen:i,data:n}=e;_i(e,t),mc(Ze(A({},e),{data:l})),i.add(be.default.json,(0,te.str)`:`);const a=i.const("value",(0,te._)`${n}${(0,te.getProperty)(l)}`);Zc(Ze(A({},e),{schema:c,data:a}))}function Ra(e){const{gen:l,schema:c,data:t}=e,{discriminator:i}=c;l.add(be.default.json,(0,te.str)`{${JSON.stringify(i)}:`);const n=l.const("tag",(0,te._)`${t}${(0,te.getProperty)(i)}`);mc(Ze(A({},e),{data:n})),l.if(!1);for(const a in c.mapping){l.elseIf((0,te._)`${n} === ${a}`);const b=c.mapping[a];Ai(Ze(A({},e),{schema:b}),i)}l.endIf(),l.add(be.default.json,(0,te.str)`}`)}function Di(e){const{gen:l}=e;l.add(be.default.json,(0,te.str)`{`),Ai(e),l.add(be.default.json,(0,te.str)`}`)}function Ai(e,l){const{gen:c,schema:t,data:i}=e,{properties:n,optionalProperties:a}=t,b=h(n),p=h(a),r=S(b.concat(p));let o=!l;for(const Y of b)C(Y,n[Y],H(Y));for(const Y of p){const G=H(Y);c.if((0,te.and)((0,te._)`${G} !== undefined`,(0,Ga.isOwnProperty)(c,i,Y)),()=>C(Y,a[Y],G))}t.additionalProperties&&c.forIn("key",i,Y=>c.if(k(Y,r),()=>Oi(e,Y,{},c.let("first",o))));function h(Y){return Y?Object.keys(Y):[]}function S(Y){if(l&&Y.push(l),new Set(Y).size!==Y.length)throw new Error("JTD: properties/optionalProperties/disciminator overlap");return Y}function H(Y){return c.const("value",(0,te._)`${i}${(0,te.getProperty)(Y)}`)}function C(Y,G,f){o?o=!1:c.add(be.default.json,(0,te.str)`,`),c.add(be.default.json,(0,te.str)`${JSON.stringify(Y)}:`),Zc(Ze(A({},e),{schema:G,data:f}))}function k(Y,G){return G.length?(0,te.and)(...G.map(f=>(0,te._)`${Y} !== ${f}`)):!0}}function fa(e){const{gen:l,schema:c,data:t}=e;switch(c.type){case"boolean":l.add(be.default.json,(0,te._)`${t} ? "true" : "false"`);break;case"string":mc(e);break;case"timestamp":l.if((0,te._)`${t} instanceof Date`,()=>l.add(be.default.json,(0,te._)`'"' + ${t}.toISOString() + '"'`),()=>mc(e));break;default:La(e)}}function mc({gen:e,data:l}){e.add(be.default.json,(0,te._)`${(0,Wa.useFunc)(e,Xa.default)}(${l})`)}function La({gen:e,data:l}){e.add(be.default.json,(0,te._)`"" + ${l}`)}function Ja(e){const{gen:l,self:c,data:t,definitions:i,schema:n,schemaEnv:a}=e,{ref:b}=n,p=i[b];if(!p)throw new pa.default(c.opts.uriResolver,"",b,`No definition ${b}`);if(!(0,Va.hasRef)(p))return Zc(Ze(A({},e),{schema:p}));const{root:r}=a,o=Mi.call(c,new Qi.SchemaEnv({schema:p,root:r}),i);l.add(be.default.json,(0,te._)`${Ka(l,o)}(${t})`)}function Ka(e,l){return l.serialize?e.scopeValue("serialize",{ref:l.serialize}):(0,te._)`${e.scopeValue("wrapper",{ref:l})}.serialize`}function Na({gen:e,data:l}){e.add(be.default.json,(0,te._)`JSON.stringify(${l})`)}function _i({gen:e},l){e.if(l,()=>e.assign(l,!1),()=>e.add(be.default.json,(0,te.str)`,`))}var kt={},rl={};Object.defineProperty(rl,"__esModule",{value:!0}),rl.parseJsonString=rl.parseJsonNumber=rl.parseJson=void 0;const Ca=/position\s(\d+)$/;function tl(e,l){let c;tl.message=void 0;let t;l&&(e=e.slice(l));try{return tl.position=l+e.length,JSON.parse(e)}catch(i){if(t=Ca.exec(i.message),!t){tl.message="unexpected end";return}c=+t[1];const n=e[c];e=e.slice(0,c),tl.position=l+c;try{return JSON.parse(e)}catch{tl.message=`unexpected token ${n}`;return}}}rl.parseJson=tl,tl.message=void 0,tl.position=0,tl.code='require("ajv/dist/runtime/parseJson").parseJson';function il(e,l,c){let t="",i;if(il.message=void 0,e[l]==="-"&&(t+="-",l++),e[l]==="0")t+="0",l++;else if(!n(c)){a();return}if(c)return il.position=l,+t;if(e[l]==="."&&(t+=".",l++,!n())){a();return}if(i=e[l],(i==="e"||i==="E")&&(t+="e",l++,i=e[l],(i==="+"||i==="-")&&(t+=i,l++),!n())){a();return}return il.position=l,+t;function n(b){let p=!1;for(;i=e[l],i>="0"&&i<="9"&&(b===void 0||b-- >0);)p=!0,t+=i,l++;return p}function a(){il.position=l,il.message=l<e.length?`unexpected token ${e[l]}`:"unexpected end"}}rl.parseJsonNumber=il,il.message=void 0,il.position=0,il.code='require("ajv/dist/runtime/parseJson").parseJsonNumber';const $i={b:"\b",f:"\f",n:`
6
- `,r:"\r",t:" ",'"':'"',"/":"/","\\":"\\"},ga="a".charCodeAt(0),Ha="0".charCodeAt(0);function hl(e,l){let c="",t;for(hl.message=void 0;t=e[l++],t!=='"';)if(t==="\\")if(t=e[l],t in $i)c+=$i[t],l++;else if(t==="u"){l++;let n=4,a=0;for(;n--;){if(a<<=4,t=e[l],t===void 0){i("unexpected end");return}if(t=t.toLowerCase(),t>="a"&&t<="f")a+=t.charCodeAt(0)-ga+10;else if(t>="0"&&t<="9")a+=t.charCodeAt(0)-Ha;else{i(`unexpected token ${t}`);return}l++}c+=String.fromCharCode(a)}else{i(`unexpected token ${t}`);return}else if(t===void 0){i("unexpected end");return}else if(t.charCodeAt(0)>=32)c+=t;else{i(`unexpected token ${t}`);return}return hl.position=l,c;function i(n){hl.position=l,hl.message=n}}rl.parseJsonString=hl,hl.message=void 0,hl.position=0,hl.code='require("ajv/dist/runtime/parseJson").parseJsonString',Object.defineProperty(kt,"__esModule",{value:!0});const ka=oc,qi=Ke,x=oe,Fa=fl,_=ke,Ua=ne,va=Jl,Ta=Yt,Ft=rl,en=Re,xa=jc,za={elements:Ea,values:ja,discriminator:Ma,properties:tn,optionalProperties:tn,enum:Da,type:Oa,ref:Aa};function ln(e,l){const c=qi.getCompilingSchema.call(this,e);if(c)return c;const{es5:t,lines:i}=this.opts.code,{ownProperties:n}=this.opts,a=new x.CodeGen(this.scope,{es5:t,lines:i,ownProperties:n}),b=a.scopeName("parse"),p={self:this,gen:a,schema:e.schema,schemaEnv:e,definitions:l,data:_.default.data,parseName:b,char:a.name("c")};let r;try{this._compilations.add(e),e.parseName=b,wa(p),a.optimize(this.opts.code.optimize);const o=a.toString();r=`${a.scopeRefs(_.default.scope)}return ${o}`;const S=new Function(`${_.default.scope}`,r)(this.scope.get());this.scope.value(b,{ref:S}),e.parse=S}catch(o){throw r&&this.logger.error("Error compiling parser, function code:",r),delete e.parse,delete e.parseName,o}finally{this._compilations.delete(e)}return e}kt.default=ln;const Ut=(0,x._)`undefined`;function wa(e){const{gen:l,parseName:c,char:t}=e;l.func(c,(0,x._)`${_.default.json}, ${_.default.jsonPos}, ${_.default.jsonPart}`,!1,()=>{l.let(_.default.data),l.let(t),l.assign((0,x._)`${c}.message`,Ut),l.assign((0,x._)`${c}.position`,Ut),l.assign(_.default.jsonPos,(0,x._)`${_.default.jsonPos} || 0`),l.const(_.default.jsonLen,(0,x._)`${_.default.json}.length`),Oc(e),wt(e),l.if(_.default.jsonPart,()=>{l.assign((0,x._)`${c}.position`,_.default.jsonPos),l.return(_.default.data)}),l.if((0,x._)`${_.default.jsonPos} === ${_.default.jsonLen}`,()=>l.return(_.default.data)),jl(e)})}function Oc(e){let l;for(const c of ka.jtdForms)if(c in e.schema){l=c;break}l?Ba(e,za[l]):xt(e)}const Pa=an(!0,an(!1,jl));function Ba(e,l){const{gen:c,schema:t,data:i}=e;if(!t.nullable)return l(e);uc(e,"null",l,()=>c.assign(i,null))}function Ea(e){const{gen:l,schema:c,data:t}=e;Me(e,"[");const i=l.let("i",0);l.assign(t,(0,x._)`[]`),vt(e,"]",()=>{const n=l.let("el");Oc(Ze(A({},e),{schema:c.elements,data:n})),l.assign((0,x._)`${t}[${i}++]`,n)})}function ja(e){const{gen:l,schema:c,data:t}=e;Me(e,"{"),l.assign(t,(0,x._)`{}`),vt(e,"}",()=>Qa(e,c.values))}function vt(e,l,c){cn(e,l,c),Me(e,l)}function cn(e,l,c){const{gen:t}=e;t.for((0,x._)`;${_.default.jsonPos}<${_.default.jsonLen} && ${Dc(1)}!==${l};`,()=>{c(),uc(e,",",()=>t.break(),i)});function i(){uc(e,l,()=>{},jl)}}function Qa(e,l){const{gen:c}=e,t=c.let("key");Cl(Ze(A({},e),{data:t})),Me(e,":"),sn(e,t,l)}function Ma(e){const{gen:l,data:c,schema:t}=e,{discriminator:i,mapping:n}=t;Me(e,"{"),l.assign(c,(0,x._)`{}`);const a=l.const("pos",_.default.jsonPos),b=l.let("value"),p=l.let("tag");cn(e,"}",()=>{const r=l.let("key");Cl(Ze(A({},e),{data:r})),Me(e,":"),l.if((0,x._)`${r} === ${i}`,()=>{Cl(Ze(A({},e),{data:p})),l.assign((0,x._)`${c}[${r}]`,p),l.break()},()=>xt(Ze(A({},e),{data:b})))}),l.assign(_.default.jsonPos,a),l.if((0,x._)`${p} === undefined`),nl(e,(0,x.str)`discriminator tag not found`);for(const r in n)l.elseIf((0,x._)`${p} === ${r}`),nn(Ze(A({},e),{schema:n[r]}),i);l.else(),nl(e,(0,x.str)`discriminator value not in schema`),l.endIf()}function tn(e){const{gen:l,data:c}=e;Me(e,"{"),l.assign(c,(0,x._)`{}`),nn(e)}function nn(e,l){const{gen:c,schema:t,data:i}=e,{properties:n,optionalProperties:a,additionalProperties:b}=t;if(vt(e,"}",()=>{const p=c.let("key");if(Cl(Ze(A({},e),{data:p})),Me(e,":"),c.if(!1),dn(e,p,n),dn(e,p,a),l){c.elseIf((0,x._)`${p} === ${l}`);const r=c.let("tag");Cl(Ze(A({},e),{data:r}))}c.else(),b?xt(Ze(A({},e),{data:(0,x._)`${i}[${p}]`})):nl(e,(0,x.str)`property ${p} not allowed`),c.endIf()}),n){const p=(0,Ua.hasPropFunc)(c),r=(0,x.and)(...Object.keys(n).map(o=>(0,x._)`${p}.call(${i}, ${o})`));c.if((0,x.not)(r),()=>nl(e,(0,x.str)`missing required properties`))}}function dn(e,l,c={}){const{gen:t}=e;for(const i in c)t.elseIf((0,x._)`${l} === ${i}`),sn(e,l,c[i])}function sn(e,l,c){Oc(Ze(A({},e),{schema:c,data:(0,x._)`${e.data}[${l}]`}))}function Oa(e){const{gen:l,schema:c,data:t,self:i}=e;switch(c.type){case"boolean":Pa(e);break;case"string":Cl(e);break;case"timestamp":{Cl(e);const n=(0,en.useFunc)(l,xa.default),{allowDate:a,parseDate:b}=i.opts,p=a?(0,x._)`!${n}(${t}, true)`:(0,x._)`!${n}(${t})`,r=b?(0,x.or)(p,(0,x._)`(${t} = new Date(${t}), false)`,(0,x._)`isNaN(${t}.valueOf())`):p;l.if(r,()=>nl(e,(0,x.str)`invalid timestamp`));break}case"float32":case"float64":Tt(e);break;default:{const n=c.type;if(!i.opts.int32range&&(n==="int32"||n==="uint32"))Tt(e,16),n==="uint32"&&l.if((0,x._)`${t} < 0`,()=>nl(e,(0,x.str)`integer out of range`));else{const[a,b,p]=Ta.intRange[n];Tt(e,p),l.if((0,x._)`${t} < ${a} || ${t} > ${b}`,()=>nl(e,(0,x.str)`integer out of range`))}}}}function Cl(e){Me(e,'"'),zt(e,Ft.parseJsonString)}function Da(e){const{gen:l,data:c,schema:t}=e,i=t.enum;Me(e,'"'),l.if(!1);for(const n of i){const a=JSON.stringify(n).slice(1);l.elseIf((0,x._)`${Dc(a.length)} === ${a}`),l.assign(c,(0,x.str)`${n}`),l.add(_.default.jsonPos,a.length)}l.else(),jl(e),l.endIf()}function Tt(e,l){const{gen:c}=e;wt(e),c.if((0,x._)`"-0123456789".indexOf(${Dc(1)}) < 0`,()=>jl(e),()=>zt(e,Ft.parseJsonNumber,l))}function an(e,l){return c=>{const{gen:t,data:i}=c;uc(c,`${e}`,()=>l(c),()=>t.assign(i,e))}}function Aa(e){const{gen:l,self:c,definitions:t,schema:i,schemaEnv:n}=e,{ref:a}=i,b=t[a];if(!b)throw new Fa.default(c.opts.uriResolver,"",a,`No definition ${a}`);if(!(0,va.hasRef)(b))return Oc(Ze(A({},e),{schema:b}));const{root:p}=n,r=ln.call(c,new qi.SchemaEnv({schema:b,root:p}),t);on(e,_a(l,r),!0)}function _a(e,l){return l.parse?e.scopeValue("parse",{ref:l.parse}):(0,x._)`${e.scopeValue("wrapper",{ref:l})}.parse`}function xt(e){zt(e,Ft.parseJson)}function zt(e,l,c){on(e,(0,en.useFunc)(e.gen,l),c)}function on(e,l,c){const{gen:t,data:i}=e;t.assign(i,(0,x._)`${l}(${_.default.json}, ${_.default.jsonPos}${c?(0,x._)`, ${c}`:x.nil})`),t.assign(_.default.jsonPos,(0,x._)`${l}.position`),t.if((0,x._)`${i} === undefined`,()=>nl(e,(0,x._)`${l}.message`))}function Me(e,l){uc(e,l,jl)}function uc(e,l,c,t){const{gen:i}=e,n=l.length;wt(e),i.if((0,x._)`${Dc(n)} === ${l}`,()=>{i.add(_.default.jsonPos,n),t==null||t(e)},()=>c(e))}function wt({gen:e,char:l}){e.code((0,x._)`while((${l}=${_.default.json}[${_.default.jsonPos}],${l}===" "||${l}==="\\n"||${l}==="\\r"||${l}==="\\t"))${_.default.jsonPos}++;`)}function Dc(e){return e===1?(0,x._)`${_.default.json}[${_.default.jsonPos}]`:(0,x._)`${_.default.json}.slice(${_.default.jsonPos}, ${_.default.jsonPos}+${e})`}function jl(e){nl(e,(0,x._)`"unexpected token " + ${_.default.json}[${_.default.jsonPos}]`)}function nl({gen:e,parseName:l},c){e.assign((0,x._)`${l}.message`,c),e.assign((0,x._)`${l}.position`,_.default.jsonPos),e.return(Ut)}(function(e,l){Object.defineProperty(l,"__esModule",{value:!0}),l.CodeGen=l.Name=l.nil=l.stringify=l.str=l._=l.KeywordCxt=void 0;const c=Qt,t=Xt,i=Nt,n=Ct,a=kt,b="JTD-meta-schema";class p extends c.default{constructor(S={}){super(Ze(A({},S),{jtd:!0}))}_addVocabularies(){super._addVocabularies(),this.addVocabulary(t.default)}_addDefaultMetaSchema(){super._addDefaultMetaSchema(),this.opts.meta&&this.addMetaSchema(i.default,b,!1)}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(b)?b:void 0)}compileSerializer(S){const H=this._addSchema(S);return H.serialize||this._compileSerializer(H)}compileParser(S){const H=this._addSchema(S);return H.parse||this._compileParser(H)}_compileSerializer(S){if(n.default.call(this,S,S.schema.definitions||{}),!S.serialize)throw new Error("ajv implementation error");return S.serialize}_compileParser(S){if(a.default.call(this,S,S.schema.definitions||{}),!S.parse)throw new Error("ajv implementation error");return S.parse}}e.exports=l=p,Object.defineProperty(l,"__esModule",{value:!0}),l.default=p;var r=Be;Object.defineProperty(l,"KeywordCxt",{enumerable:!0,get:function(){return r.KeywordCxt}});var o=oe;Object.defineProperty(l,"_",{enumerable:!0,get:function(){return o._}}),Object.defineProperty(l,"str",{enumerable:!0,get:function(){return o.str}}),Object.defineProperty(l,"stringify",{enumerable:!0,get:function(){return o.stringify}}),Object.defineProperty(l,"nil",{enumerable:!0,get:function(){return o.nil}}),Object.defineProperty(l,"Name",{enumerable:!0,get:function(){return o.Name}}),Object.defineProperty(l,"CodeGen",{enumerable:!0,get:function(){return o.CodeGen}})})(dt,dt.exports);var $a=E&&E.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Il,"__esModule",{value:!0}),Il.Validate=Il.AddSchema=void 0;const qa=$a(dt.exports),Zn=new qa.default,eo=(e,l)=>e(l)?null:e.errors;function lo(e,l){Zn.addSchema(l,e)}Il.AddSchema=lo;function co(e,l){const c=Zn.getSchema(e);if(c)return eo(c,l)}Il.Validate=co,Object.defineProperty(Fc,"__esModule",{value:!0}),Fc.STSOptionsBase=void 0;const to=Il;class io{constructor(l=null){tc(this,"_options");this._options=l,l!==null&&(typeof l.validator=="undefined"||(0,to.Validate)(l.validator,l))}get options(){return this._options}}Fc.STSOptionsBase=io;var Ql={};Object.defineProperty(Ql,"__esModule",{value:!0}),Ql.JestSleep=Ql.Sleep=void 0;async function mn(e=1e3){return new Promise(l=>setTimeout(l,e))}Ql.Sleep=mn;async function no(){return mn(100)}Ql.JestSleep=no;var un={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.compareParameterTypes=e.OAuth2ParameterErrorType=e.OIDCAddressClaim=e.OIDCStandardClaim=e.OAuth2ParameterType=void 0,function(t){t.AUDIENCE="AUDIENCE",t.CLIENT_ID="client_id",t.CLIENT_SECRET="client_secret",t.RESPONSE_TYPE="response_type",t.SCOPE="scope",t.STATE="state",t.REDIRECT_URI="redirect_uri",t.ERROR="error",t.ERROR_DESCRIPTION="error_description",t.ERROR_CODES="error_codes",t.ERROR_URI="error_uri",t.GRANT_TYPE="grant_type",t.CODE="code",t.ACCESS_TOKEN="access_token",t.TOKEN_TYPE="token_type",t.EXPIRES_IN="expires_in",t.USERNAME="username",t.PASSWORD="password",t.REFRESH_TOKEN="refresh_token",t.RESPONSE_MODE="response_mode",t.TIMESTAMP="timestamp",t.TRACE_ID="trace_id",t.CORRELATION_ID="correlation_id"}(e.OAuth2ParameterType||(e.OAuth2ParameterType={})),function(t){t.SUB="sub",t.NAME="name",t.GIVEN_NAME="given_name",t.FAMILY_NAME="family_name",t.MIDDLE_NAME="middle_name",t.NICKNAME="nickname",t.PREFERRED_USERNAME="preferred_username",t.PROFILE="profile",t.PICTURE="picture",t.WEBSITE="website",t.EMAIL="email",t.EMAIL_VERIFIED="email_verified",t.GENDER="gender",t.BIRTHDATE="birthdate",t.ZONEINFO="zoneinfo",t.LOCALE="locale",t.PHONE_NUMBER="phone_number",t.PHONE_NUMBER_VERIFIED="phone_number_verified",t.ADDRESS="address",t.CLIENT_SECRET="client_secret",t.NONCE="nonce"}(e.OIDCStandardClaim||(e.OIDCStandardClaim={})),function(t){t.FORMATTED="formatted",t.STREET_ADDRESS="street_address",t.LOCALITY="locality",t.REGION="region",t.COUNTRY="country"}(e.OIDCAddressClaim||(e.OIDCAddressClaim={}));class l{}tc(l,"NOT_EQUAL",{code:"STS_OAUTH2_ERR_0001",description:"Parameter values not equal."}),tc(l,"NOT_PRESENT",{code:"STS_OAUTH2_ERR_0002",description:"Parameter not provided."}),tc(l,"INVALID_FORMAT",{code:"STS_OAUTH2_ERR_0003",description:"Parameter value format invalid."}),tc(l,"EXPIRED",{code:"STS_OAUTH2_ERR_0004",description:"Parameter value expired."}),e.OAuth2ParameterErrorType=l;function c(t,i,n){const a=[];for(let b=0;b<n.length;b++){const p=n[b];if(t[b].localeCompare(i[b])!==0){const r={error:l.NOT_EQUAL.code,error_description:l.NOT_EQUAL.description,timestamp:Date.now(),details:`${l.NOT_EQUAL.description}: Parameter: [${p}]`};a.push(r)}}return a}e.compareParameterTypes=c})(un),function(e){var l=E&&E.__createBinding||(Object.create?function(i,n,a,b){b===void 0&&(b=a);var p=Object.getOwnPropertyDescriptor(n,a);(!p||("get"in p?!n.__esModule:p.writable||p.configurable))&&(p={enumerable:!0,get:function(){return n[a]}}),Object.defineProperty(i,b,p)}:function(i,n,a,b){b===void 0&&(b=a),i[b]=n[a]}),c=E&&E.__exportStar||function(i,n){for(var a in i)a!=="default"&&!Object.prototype.hasOwnProperty.call(n,a)&&l(n,i,a)};Object.defineProperty(e,"__esModule",{value:!0}),e.$stsgdf=e.$stsgd=void 0,c(kc,e),c(Fc,e),c(Ql,e),c(Il,e),c(un,e),e.$stsgd={};function t(){return e.$stsgd}e.$stsgdf=t}(Hc);class so{constructor(){this.DigestMessage=async function(l){const t=new TextEncoder().encode(l),i=await crypto.subtle.digest("SHA-256",t),n=Array.from(new Uint8Array(i));return btoa(String.fromCharCode(...n))},this.CreateRandomString=(l=43)=>{const c=Array.from(crypto.getRandomValues(new Uint8Array(l)));return btoa(String.fromCharCode(...c))},this.CreateRandomStringEx=()=>{const l="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.";let c="";return Array.from(crypto.getRandomValues(new Uint8Array(43))).forEach(i=>c+=l[i%l.length]),c}}}class ao{constructor(){this.DecodeQueryParams=l=>{const c={};return Object.keys(l).filter(t=>typeof l[t]!="undefined").map(t=>{c[decodeURIComponent(t)]=decodeURIComponent(l[t])}),c},this.CreateQueryParams=l=>Object.keys(l).filter(c=>typeof l[c]!="undefined").map(c=>Array.isArray(l[c])?encodeURIComponent(c)+"="+encodeURIComponent(l[c].join(" ")):encodeURIComponent(c)+"="+encodeURIComponent(l[c])).join("&"),this._GetQueryParams=l=>{let c={};const t=l.split("?");if(t.length==2){const i=t[1].split("&"),n={};let a="";i.forEach(function(b){a=b.split("="),a.length==2&&(n[a[0]]=a[1])}),c=this.DecodeQueryParams(n)}return c},this.GetQueryParams=()=>this._GetQueryParams(window.location.href)}}var bn=(e=>(e.CODE="code",e.ID_TOKEN="id_token",e.TOKEN="token",e))(bn||{}),rn=(e=>(e.QUERY="query",e.FRAGMENT="fragment",e.FORM_POST="form_post",e))(rn||{}),hn=(e=>(e.CLIENT_CREDENTIALS="client_credentials",e.AUTHORIZATION_CODE="authorization_code",e.REFRESH_TOKEN="refresh_token",e))(hn||{}),dl=(e=>(e.RESTORE_SESSION="RestoreSession",e.AUTHORIZE="Authorize",e.HANDLE_REDIRECT="HandleRedirect",e.LOGOUT="Logout",e.AUTHENTICATE_EVENT="AuthenticateEvent",e.ERROR="Error",e))(dl||{}),bc=E&&E.__assign||function(){return bc=Object.assign||function(e){for(var l,c=1,t=arguments.length;c<t;c++){l=arguments[c];for(var i in l)Object.prototype.hasOwnProperty.call(l,i)&&(e[i]=l[i])}return e},bc.apply(this,arguments)};function rc(e,l){if(!l)return"";var c="; "+e;return l===!0?c:c+"="+l}function oo(e){if(typeof e.expires=="number"){var l=new Date;l.setMilliseconds(l.getMilliseconds()+e.expires*864e5),e.expires=l}return rc("Expires",e.expires?e.expires.toUTCString():"")+rc("Domain",e.domain)+rc("Path",e.path)+rc("Secure",e.secure)+rc("SameSite",e.sameSite)}function Zo(e,l,c){return encodeURIComponent(e).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/\(/g,"%28").replace(/\)/g,"%29")+"="+encodeURIComponent(l).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent)+oo(c)}function mo(e){for(var l={},c=e?e.split("; "):[],t=/(%[\dA-F]{2})+/gi,i=0;i<c.length;i++){var n=c[i].split("="),a=n.slice(1).join("=");a.charAt(0)==='"'&&(a=a.slice(1,-1));try{var b=n[0].replace(t,decodeURIComponent);l[b]=a.replace(t,decodeURIComponent)}catch{}}return l}function uo(){return mo(document.cookie)}function bo(e){return uo()[e]}var ro=bo;function pn(e,l,c){document.cookie=Zo(e,l,bc({path:"/"},c))}var ho=pn;function po(e,l){pn(e,"",bc(bc({},l),{expires:-1}))}var Go=po;const Ac=jt(`proc:${process.pid}:storage.ts`);var Gn=(e=>(e.LOCAL_STORAGE="LocalStorage",e.SESSION_STORAGE="SessionStorage",e.COOKIE_STORAGE="CookieStorage",e.MEMORY_STORAGE="MemoryStorage",e))(Gn||{});class Vo{constructor(){this.get=l=>{const c=ro(l);return c?JSON.parse(c):null},this.set=(l,c,t={})=>{let i={};window.location.protocol==="https:"&&(i={secure:!0,sameSite:"none"}),t&&t.daysUntilExpire?i.expires=t.daysUntilExpire:i.expires=1,Ac(`CookieStorage.set: key: ${l}, value: [${c}]`),ho(l,JSON.stringify(c),i)},this.remove=l=>{Go(l)}}}class Wo{constructor(){this.get=l=>{const c=sessionStorage.getItem(l);return typeof c=="undefined"||c===null?null:JSON.parse(c)},this.set=(l,c)=>{Ac(`SessionStorage.set: key: ${l}, value: [${c}]`),sessionStorage.setItem(l,JSON.stringify(c))},this.remove=l=>{sessionStorage.removeItem(l)}}}class Xo{constructor(){this.get=l=>{const c=localStorage.getItem(l);return typeof c=="undefined"||c===null?null:JSON.parse(c)},this.set=(l,c)=>{Ac(`LocalStorage.set: key: ${l}, value: [${c}]`),localStorage.setItem(l,JSON.stringify(c))},this.remove=l=>{localStorage.removeItem(l)}}}class yo{constructor(){pe(this,gl,void 0);ce(this,gl,{}),this.get=l=>{const c=O(this,gl)[l];return typeof c=="undefined"||c===null?null:c},this.set=(l,c)=>{Ac(`MemoryStorage.set: key: ${l}, value: [${c}]`),O(this,gl)[l]=c},this.remove=l=>{delete O(this,gl)[l]}}}gl=new WeakMap;class Yo{constructor(l){pe(this,pl,null);switch(l.clientStorageType){case"SessionStorage":ce(this,pl,new Wo);break;case"LocalStorage":ce(this,pl,new Xo);break;case"CookieStorage":ce(this,pl,new Vo);break;case"MemoryStorage":ce(this,pl,new yo);break;default:throw new Error(`Unknown [${l.clientStorageType}] storage type.`)}}GetStorage(){return O(this,pl)}}pl=new WeakMap;function Pt(e){this.message=e}Pt.prototype=new Error,Pt.prototype.name="InvalidCharacterError";var Vn=typeof window!="undefined"&&window.atob&&window.atob.bind(window)||function(e){var l=String(e).replace(/=+$/,"");if(l.length%4==1)throw new Pt("'atob' failed: The string to be decoded is not correctly encoded.");for(var c,t,i=0,n=0,a="";t=l.charAt(n++);~t&&(c=i%4?64*c+t:t,i++%4)?a+=String.fromCharCode(255&c>>(-2*i&6)):0)t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(t);return a};function Io(e){var l=e.replace(/-/g,"+").replace(/_/g,"/");switch(l.length%4){case 0:break;case 2:l+="==";break;case 3:l+="=";break;default:throw"Illegal base64url string!"}try{return function(c){return decodeURIComponent(Vn(c).replace(/(.)/g,function(t,i){var n=i.charCodeAt(0).toString(16).toUpperCase();return n.length<2&&(n="0"+n),"%"+n}))}(l)}catch{return Vn(l)}}function _c(e){this.message=e}function So(e,l){if(typeof e!="string")throw new _c("Invalid token specified");var c=(l=l||{}).header===!0?0:1;try{return JSON.parse(Io(e.split(".")[c]))}catch(t){throw new _c("Invalid token specified: "+t.message)}}_c.prototype=new Error,_c.prototype.name="InvalidTokenError";const Wn="dmFyIGlkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjZD1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgdWQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIFZvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIGxkPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZmQ9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgT3M9KGVlLGFlLGllKT0+YWUgaW4gZWU/aWQoZWUsYWUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmllfSk6ZWVbYWVdPWllLFE9KGVlLGFlKT0+e2Zvcih2YXIgaWUgaW4gYWV8fChhZT17fSkpbGQuY2FsbChhZSxpZSkmJk9zKGVlLGllLGFlW2llXSk7aWYoVm8pZm9yKHZhciBpZSBvZiBWbyhhZSkpZmQuY2FsbChhZSxpZSkmJk9zKGVlLGllLGFlW2llXSk7cmV0dXJuIGVlfSxsZT0oZWUsYWUpPT5jZChlZSx1ZChhZSkpO3ZhciBfcj0oZWUsYWUsaWUpPT4oT3MoZWUsdHlwZW9mIGFlIT0ic3ltYm9sIj9hZSsiIjphZSxpZSksaWUpLHpvPShlZSxhZSxpZSk9PntpZighYWUuaGFzKGVlKSl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCAiK2llKX07dmFyIFY9KGVlLGFlLGllKT0+KHpvKGVlLGFlLCJyZWFkIGZyb20gcHJpdmF0ZSBmaWVsZCIpLGllP2llLmNhbGwoZWUpOmFlLmdldChlZSkpLFNlPShlZSxhZSxpZSk9PntpZihhZS5oYXMoZWUpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGFkZCB0aGUgc2FtZSBwcml2YXRlIG1lbWJlciBtb3JlIHRoYW4gb25jZSIpO2FlIGluc3RhbmNlb2YgV2Vha1NldD9hZS5hZGQoZWUpOmFlLnNldChlZSxpZSl9LGNlPShlZSxhZSxpZSxjdCk9Pih6byhlZSxhZSwid3JpdGUgdG8gcHJpdmF0ZSBmaWVsZCIpLGN0P2N0LmNhbGwoZWUsaWUpOmFlLnNldChlZSxpZSksaWUpOyhmdW5jdGlvbigpe3ZhciBIdCxidCxGZSxPdCxBcix5bixIZSx2dCxOdCxLZSxLdCwkbix0dCxDcixJcixEcixjcixqcixrcixVcjsidXNlIHN0cmljdCI7dmFyIGVlPXR5cGVvZiBnbG9iYWxUaGlzIT0idW5kZWZpbmVkIj9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsIT0idW5kZWZpbmVkIj9nbG9iYWw6dHlwZW9mIHNlbGYhPSJ1bmRlZmluZWQiP3NlbGY6e30sYWU9e2V4cG9ydHM6e319LGllPTFlMyxjdD1pZSo2MCxRdD1jdCo2MCxUdD1RdCoyNCxIbz1UdCo3LEtvPVR0KjM2NS4yNSxCbz1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9dHlwZW9mIGU7aWYocj09PSJzdHJpbmciJiZlLmxlbmd0aD4wKXJldHVybiBKbyhlKTtpZihyPT09Im51bWJlciImJmlzRmluaXRlKGUpKXJldHVybiB0Lmxvbmc/R28oZSk6cW8oZSk7dGhyb3cgbmV3IEVycm9yKCJ2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPSIrSlNPTi5zdHJpbmdpZnkoZSkpfTtmdW5jdGlvbiBKbyhlKXtpZihlPVN0cmluZyhlKSwhKGUubGVuZ3RoPjEwMCkpe3ZhciB0PS9eKC0/KD86XGQrKT9cLj9cZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhlKTtpZighIXQpe3ZhciByPXBhcnNlRmxvYXQodFsxXSksbj0odFsyXXx8Im1zIikudG9Mb3dlckNhc2UoKTtzd2l0Y2gobil7Y2FzZSJ5ZWFycyI6Y2FzZSJ5ZWFyIjpjYXNlInlycyI6Y2FzZSJ5ciI6Y2FzZSJ5IjpyZXR1cm4gcipLbztjYXNlIndlZWtzIjpjYXNlIndlZWsiOmNhc2UidyI6cmV0dXJuIHIqSG87Y2FzZSJkYXlzIjpjYXNlImRheSI6Y2FzZSJkIjpyZXR1cm4gcipUdDtjYXNlImhvdXJzIjpjYXNlImhvdXIiOmNhc2UiaHJzIjpjYXNlImhyIjpjYXNlImgiOnJldHVybiByKlF0O2Nhc2UibWludXRlcyI6Y2FzZSJtaW51dGUiOmNhc2UibWlucyI6Y2FzZSJtaW4iOmNhc2UibSI6cmV0dXJuIHIqY3Q7Y2FzZSJzZWNvbmRzIjpjYXNlInNlY29uZCI6Y2FzZSJzZWNzIjpjYXNlInNlYyI6Y2FzZSJzIjpyZXR1cm4gcippZTtjYXNlIm1pbGxpc2Vjb25kcyI6Y2FzZSJtaWxsaXNlY29uZCI6Y2FzZSJtc2VjcyI6Y2FzZSJtc2VjIjpjYXNlIm1zIjpyZXR1cm4gcjtkZWZhdWx0OnJldHVybn19fX1mdW5jdGlvbiBxbyhlKXt2YXIgdD1NYXRoLmFicyhlKTtyZXR1cm4gdD49VHQ/TWF0aC5yb3VuZChlL1R0KSsiZCI6dD49UXQ/TWF0aC5yb3VuZChlL1F0KSsiaCI6dD49Y3Q/TWF0aC5yb3VuZChlL2N0KSsibSI6dD49aWU/TWF0aC5yb3VuZChlL2llKSsicyI6ZSsibXMifWZ1bmN0aW9uIEdvKGUpe3ZhciB0PU1hdGguYWJzKGUpO3JldHVybiB0Pj1UdD9xcihlLHQsVHQsImRheSIpOnQ+PVF0P3FyKGUsdCxRdCwiaG91ciIpOnQ+PWN0P3FyKGUsdCxjdCwibWludXRlIik6dD49aWU/cXIoZSx0LGllLCJzZWNvbmQiKTplKyIgbXMifWZ1bmN0aW9uIHFyKGUsdCxyLG4pe3ZhciBzPXQ+PXIqMS41O3JldHVybiBNYXRoLnJvdW5kKGUvcikrIiAiK24rKHM/InMiOiIiKX1mdW5jdGlvbiBRbyhlKXtyLmRlYnVnPXIsci5kZWZhdWx0PXIsci5jb2VyY2U9ZixyLmRpc2FibGU9YSxyLmVuYWJsZT1zLHIuZW5hYmxlZD1vLHIuaHVtYW5pemU9Qm8sci5kZXN0cm95PXAsT2JqZWN0LmtleXMoZSkuZm9yRWFjaChpPT57cltpXT1lW2ldfSksci5uYW1lcz1bXSxyLnNraXBzPVtdLHIuZm9ybWF0dGVycz17fTtmdW5jdGlvbiB0KGkpe2xldCBoPTA7Zm9yKGxldCBFPTA7RTxpLmxlbmd0aDtFKyspaD0oaDw8NSktaCtpLmNoYXJDb2RlQXQoRSksaHw9MDtyZXR1cm4gci5jb2xvcnNbTWF0aC5hYnMoaCklci5jb2xvcnMubGVuZ3RoXX1yLnNlbGVjdENvbG9yPXQ7ZnVuY3Rpb24gcihpKXtsZXQgaCxFPW51bGwsVCxJO2Z1bmN0aW9uIGooLi4ueSl7aWYoIWouZW5hYmxlZClyZXR1cm47Y29uc3QgXz1qLGI9TnVtYmVyKG5ldyBEYXRlKSxPPWItKGh8fGIpO18uZGlmZj1PLF8ucHJldj1oLF8uY3Vycj1iLGg9Yix5WzBdPXIuY29lcmNlKHlbMF0pLHR5cGVvZiB5WzBdIT0ic3RyaW5nIiYmeS51bnNoaWZ0KCIlTyIpO2xldCBBPTA7eVswXT15WzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCgkLE4pPT57aWYoJD09PSIlJSIpcmV0dXJuIiUiO0ErKztjb25zdCBEPXIuZm9ybWF0dGVyc1tOXTtpZih0eXBlb2YgRD09ImZ1bmN0aW9uIil7Y29uc3QgQj15W0FdOyQ9RC5jYWxsKF8sQikseS5zcGxpY2UoQSwxKSxBLS19cmV0dXJuICR9KSxyLmZvcm1hdEFyZ3MuY2FsbChfLHkpLChfLmxvZ3x8ci5sb2cpLmFwcGx5KF8seSl9cmV0dXJuIGoubmFtZXNwYWNlPWksai51c2VDb2xvcnM9ci51c2VDb2xvcnMoKSxqLmNvbG9yPXIuc2VsZWN0Q29sb3IoaSksai5leHRlbmQ9bixqLmRlc3Ryb3k9ci5kZXN0cm95LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJlbmFibGVkIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OigpPT5FIT09bnVsbD9FOihUIT09ci5uYW1lc3BhY2VzJiYoVD1yLm5hbWVzcGFjZXMsST1yLmVuYWJsZWQoaSkpLEkpLHNldDp5PT57RT15fX0pLHR5cGVvZiByLmluaXQ9PSJmdW5jdGlvbiImJnIuaW5pdChqKSxqfWZ1bmN0aW9uIG4oaSxoKXtjb25zdCBFPXIodGhpcy5uYW1lc3BhY2UrKHR5cGVvZiBoPT0idW5kZWZpbmVkIj8iOiI6aCkraSk7cmV0dXJuIEUubG9nPXRoaXMubG9nLEV9ZnVuY3Rpb24gcyhpKXtyLnNhdmUoaSksci5uYW1lc3BhY2VzPWksci5uYW1lcz1bXSxyLnNraXBzPVtdO2xldCBoO2NvbnN0IEU9KHR5cGVvZiBpPT0ic3RyaW5nIj9pOiIiKS5zcGxpdCgvW1xzLF0rLyksVD1FLmxlbmd0aDtmb3IoaD0wO2g8VDtoKyspIUVbaF18fChpPUVbaF0ucmVwbGFjZSgvXCovZywiLio/IiksaVswXT09PSItIj9yLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgiXiIraS5zbGljZSgxKSsiJCIpKTpyLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgiXiIraSsiJCIpKSl9ZnVuY3Rpb24gYSgpe2NvbnN0IGk9Wy4uLnIubmFtZXMubWFwKGwpLC4uLnIuc2tpcHMubWFwKGwpLm1hcChoPT4iLSIraCldLmpvaW4oIiwiKTtyZXR1cm4gci5lbmFibGUoIiIpLGl9ZnVuY3Rpb24gbyhpKXtpZihpW2kubGVuZ3RoLTFdPT09IioiKXJldHVybiEwO2xldCBoLEU7Zm9yKGg9MCxFPXIuc2tpcHMubGVuZ3RoO2g8RTtoKyspaWYoci5za2lwc1toXS50ZXN0KGkpKXJldHVybiExO2ZvcihoPTAsRT1yLm5hbWVzLmxlbmd0aDtoPEU7aCsrKWlmKHIubmFtZXNbaF0udGVzdChpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBsKGkpe3JldHVybiBpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIsaS50b1N0cmluZygpLmxlbmd0aC0yKS5yZXBsYWNlKC9cLlwqXD8kLywiKiIpfWZ1bmN0aW9uIGYoaSl7cmV0dXJuIGkgaW5zdGFuY2VvZiBFcnJvcj9pLnN0YWNrfHxpLm1lc3NhZ2U6aX1mdW5jdGlvbiBwKCl7Y29uc29sZS53YXJuKCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuIil9cmV0dXJuIHIuZW5hYmxlKHIubG9hZCgpKSxyfXZhciBZbz1RbzsoZnVuY3Rpb24oZSx0KXt0LmZvcm1hdEFyZ3M9bix0LnNhdmU9cyx0LmxvYWQ9YSx0LnVzZUNvbG9ycz1yLHQuc3RvcmFnZT1vKCksdC5kZXN0cm95PSgoKT0+e2xldCBmPSExO3JldHVybigpPT57Znx8KGY9ITAsY29uc29sZS53YXJuKCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuIikpfX0pKCksdC5jb2xvcnM9WyIjMDAwMENDIiwiIzAwMDBGRiIsIiMwMDMzQ0MiLCIjMDAzM0ZGIiwiIzAwNjZDQyIsIiMwMDY2RkYiLCIjMDA5OUNDIiwiIzAwOTlGRiIsIiMwMENDMDAiLCIjMDBDQzMzIiwiIzAwQ0M2NiIsIiMwMENDOTkiLCIjMDBDQ0NDIiwiIzAwQ0NGRiIsIiMzMzAwQ0MiLCIjMzMwMEZGIiwiIzMzMzNDQyIsIiMzMzMzRkYiLCIjMzM2NkNDIiwiIzMzNjZGRiIsIiMzMzk5Q0MiLCIjMzM5OUZGIiwiIzMzQ0MwMCIsIiMzM0NDMzMiLCIjMzNDQzY2IiwiIzMzQ0M5OSIsIiMzM0NDQ0MiLCIjMzNDQ0ZGIiwiIzY2MDBDQyIsIiM2NjAwRkYiLCIjNjYzM0NDIiwiIzY2MzNGRiIsIiM2NkNDMDAiLCIjNjZDQzMzIiwiIzk5MDBDQyIsIiM5OTAwRkYiLCIjOTkzM0NDIiwiIzk5MzNGRiIsIiM5OUNDMDAiLCIjOTlDQzMzIiwiI0NDMDAwMCIsIiNDQzAwMzMiLCIjQ0MwMDY2IiwiI0NDMDA5OSIsIiNDQzAwQ0MiLCIjQ0MwMEZGIiwiI0NDMzMwMCIsIiNDQzMzMzMiLCIjQ0MzMzY2IiwiI0NDMzM5OSIsIiNDQzMzQ0MiLCIjQ0MzM0ZGIiwiI0NDNjYwMCIsIiNDQzY2MzMiLCIjQ0M5OTAwIiwiI0NDOTkzMyIsIiNDQ0NDMDAiLCIjQ0NDQzMzIiwiI0ZGMDAwMCIsIiNGRjAwMzMiLCIjRkYwMDY2IiwiI0ZGMDA5OSIsIiNGRjAwQ0MiLCIjRkYwMEZGIiwiI0ZGMzMwMCIsIiNGRjMzMzMiLCIjRkYzMzY2IiwiI0ZGMzM5OSIsIiNGRjMzQ0MiLCIjRkYzM0ZGIiwiI0ZGNjYwMCIsIiNGRjY2MzMiLCIjRkY5OTAwIiwiI0ZGOTkzMyIsIiNGRkNDMDAiLCIjRkZDQzMzIl07ZnVuY3Rpb24gcigpe3JldHVybiB0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmd2luZG93LnByb2Nlc3MmJih3aW5kb3cucHJvY2Vzcy50eXBlPT09InJlbmRlcmVyInx8d2luZG93LnByb2Nlc3MuX19ud2pzKT8hMDp0eXBlb2YgbmF2aWdhdG9yIT0idW5kZWZpbmVkIiYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVwvKFxkKykvKT8hMTp0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2V8fHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ3aW5kb3cuY29uc29sZSYmKHdpbmRvdy5jb25zb2xlLmZpcmVidWd8fHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiYmd2luZG93LmNvbnNvbGUudGFibGUpfHx0eXBlb2YgbmF2aWdhdG9yIT0idW5kZWZpbmVkIiYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XC8oXGQrKS8pJiZwYXJzZUludChSZWdFeHAuJDEsMTApPj0zMXx8dHlwZW9mIG5hdmlnYXRvciE9InVuZGVmaW5lZCImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcLyhcZCspLyl9ZnVuY3Rpb24gbihmKXtpZihmWzBdPSh0aGlzLnVzZUNvbG9ycz8iJWMiOiIiKSt0aGlzLm5hbWVzcGFjZSsodGhpcy51c2VDb2xvcnM/IiAlYyI6IiAiKStmWzBdKyh0aGlzLnVzZUNvbG9ycz8iJWMgIjoiICIpKyIrIitlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKSwhdGhpcy51c2VDb2xvcnMpcmV0dXJuO2NvbnN0IHA9ImNvbG9yOiAiK3RoaXMuY29sb3I7Zi5zcGxpY2UoMSwwLHAsImNvbG9yOiBpbmhlcml0Iik7bGV0IGk9MCxoPTA7ZlswXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csRT0+e0UhPT0iJSUiJiYoaSsrLEU9PT0iJWMiJiYoaD1pKSl9KSxmLnNwbGljZShoLDAscCl9dC5sb2c9Y29uc29sZS5kZWJ1Z3x8Y29uc29sZS5sb2d8fCgoKT0+e30pO2Z1bmN0aW9uIHMoZil7dHJ5e2Y/dC5zdG9yYWdlLnNldEl0ZW0oImRlYnVnIixmKTp0LnN0b3JhZ2UucmVtb3ZlSXRlbSgiZGVidWciKX1jYXRjaHt9fWZ1bmN0aW9uIGEoKXtsZXQgZjt0cnl7Zj10LnN0b3JhZ2UuZ2V0SXRlbSgiZGVidWciKX1jYXRjaHt9cmV0dXJuIWYmJnR5cGVvZiBwcm9jZXNzIT0idW5kZWZpbmVkIiYmImVudiJpbiBwcm9jZXNzJiYoZj17fS5ERUJVRyksZn1mdW5jdGlvbiBvKCl7dHJ5e3JldHVybiBsb2NhbFN0b3JhZ2V9Y2F0Y2h7fX1lLmV4cG9ydHM9WW8odCk7Y29uc3R7Zm9ybWF0dGVyczpsfT1lLmV4cG9ydHM7bC5qPWZ1bmN0aW9uKGYpe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2gocCl7cmV0dXJuIltVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAiK3AubWVzc2FnZX19fSkoYWUsYWUuZXhwb3J0cyk7dmFyIE5zPWFlLmV4cG9ydHMsT249e2V4cG9ydHM6e319LFBzPWZ1bmN0aW9uKHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBzPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxhPTA7YTxzLmxlbmd0aDthKyspc1thXT1hcmd1bWVudHNbYV07cmV0dXJuIHQuYXBwbHkocixzKX19LFdvPVBzLE5uPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsUG49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPU5uLmNhbGwodCk7cmV0dXJuIGVbcl18fChlW3JdPXIuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9fShPYmplY3QuY3JlYXRlKG51bGwpKTtmdW5jdGlvbiBBdChlKXtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24ocil7cmV0dXJuIFBuKHIpPT09ZX19ZnVuY3Rpb24gVG4oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gR3IoZSl7cmV0dXJuIHR5cGVvZiBlPT0idW5kZWZpbmVkIn1mdW5jdGlvbiBYbyhlKXtyZXR1cm4gZSE9PW51bGwmJiFHcihlKSYmZS5jb25zdHJ1Y3RvciE9PW51bGwmJiFHcihlLmNvbnN0cnVjdG9yKSYmdHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXI9PSJmdW5jdGlvbiImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIFRzPUF0KCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIFpvKGUpe3ZhciB0O3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXIhPSJ1bmRlZmluZWQiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/dD1BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6dD1lJiZlLmJ1ZmZlciYmVHMoZS5idWZmZXIpLHR9ZnVuY3Rpb24geG8oZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIn1mdW5jdGlvbiBlaShlKXtyZXR1cm4gdHlwZW9mIGU9PSJudW1iZXIifWZ1bmN0aW9uIEFzKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifWZ1bmN0aW9uIFFyKGUpe2lmKFBuKGUpIT09Im9iamVjdCIpcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0PT09bnVsbHx8dD09PU9iamVjdC5wcm90b3R5cGV9dmFyIHRpPUF0KCJEYXRlIikscmk9QXQoIkZpbGUiKSxuaT1BdCgiQmxvYiIpLHNpPUF0KCJGaWxlTGlzdCIpO2Z1bmN0aW9uIEFuKGUpe3JldHVybiBObi5jYWxsKGUpPT09IltvYmplY3QgRnVuY3Rpb25dIn1mdW5jdGlvbiBhaShlKXtyZXR1cm4gQXMoZSkmJkFuKGUucGlwZSl9ZnVuY3Rpb24gb2koZSl7dmFyIHQ9IltvYmplY3QgRm9ybURhdGFdIjtyZXR1cm4gZSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmZSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxObi5jYWxsKGUpPT09dHx8QW4oZS50b1N0cmluZykmJmUudG9TdHJpbmcoKT09PXQpfXZhciBpaT1BdCgiVVJMU2VhcmNoUGFyYW1zIik7ZnVuY3Rpb24gY2koZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX1mdW5jdGlvbiB1aSgpe3JldHVybiB0eXBlb2YgbmF2aWdhdG9yIT0idW5kZWZpbmVkIiYmKG5hdmlnYXRvci5wcm9kdWN0PT09IlJlYWN0TmF0aXZlInx8bmF2aWdhdG9yLnByb2R1Y3Q9PT0iTmF0aXZlU2NyaXB0Inx8bmF2aWdhdG9yLnByb2R1Y3Q9PT0iTlMiKT8hMTp0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmdHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIn1mdW5jdGlvbiBDbihlLHQpe2lmKCEoZT09PW51bGx8fHR5cGVvZiBlPT0idW5kZWZpbmVkIikpaWYodHlwZW9mIGUhPSJvYmplY3QiJiYoZT1bZV0pLFRuKGUpKWZvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl0LmNhbGwobnVsbCxlW3JdLHIsZSk7ZWxzZSBmb3IodmFyIHMgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxzKSYmdC5jYWxsKG51bGwsZVtzXSxzLGUpfWZ1bmN0aW9uIEluKCl7dmFyIGU9e307ZnVuY3Rpb24gdChzLGEpe1FyKGVbYV0pJiZRcihzKT9lW2FdPUluKGVbYV0scyk6UXIocyk/ZVthXT1Jbih7fSxzKTpUbihzKT9lW2FdPXMuc2xpY2UoKTplW2FdPXN9Zm9yKHZhciByPTAsbj1hcmd1bWVudHMubGVuZ3RoO3I8bjtyKyspQ24oYXJndW1lbnRzW3JdLHQpO3JldHVybiBlfWZ1bmN0aW9uIGxpKGUsdCxyKXtyZXR1cm4gQ24odCxmdW5jdGlvbihzLGEpe3ImJnR5cGVvZiBzPT0iZnVuY3Rpb24iP2VbYV09V28ocyxyKTplW2FdPXN9KSxlfWZ1bmN0aW9uIGZpKGUpe3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKGU9ZS5zbGljZSgxKSksZX1mdW5jdGlvbiBkaShlLHQscixuKXtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLG4pLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsciYmT2JqZWN0LmFzc2lnbihlLnByb3RvdHlwZSxyKX1mdW5jdGlvbiBoaShlLHQscil7dmFyIG4scyxhLG89e307dD10fHx7fTtkb3tmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSxzPW4ubGVuZ3RoO3MtLSA+MDspYT1uW3NdLG9bYV18fCh0W2FdPWVbYV0sb1thXT0hMCk7ZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9d2hpbGUoZSYmKCFyfHxyKGUsdCkpJiZlIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9ZnVuY3Rpb24gcGkoZSx0LHIpe2U9U3RyaW5nKGUpLChyPT09dm9pZCAwfHxyPmUubGVuZ3RoKSYmKHI9ZS5sZW5ndGgpLHItPXQubGVuZ3RoO3ZhciBuPWUuaW5kZXhPZih0LHIpO3JldHVybiBuIT09LTEmJm49PT1yfWZ1bmN0aW9uIG1pKGUpe2lmKCFlKXJldHVybiBudWxsO3ZhciB0PWUubGVuZ3RoO2lmKEdyKHQpKXJldHVybiBudWxsO2Zvcih2YXIgcj1uZXcgQXJyYXkodCk7dC0tID4wOylyW3RdPWVbdF07cmV0dXJuIHJ9dmFyIHZpPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSYmdCBpbnN0YW5jZW9mIGV9fSh0eXBlb2YgVWludDhBcnJheSE9InVuZGVmaW5lZCImJk9iamVjdC5nZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSksUGU9e2lzQXJyYXk6VG4saXNBcnJheUJ1ZmZlcjpUcyxpc0J1ZmZlcjpYbyxpc0Zvcm1EYXRhOm9pLGlzQXJyYXlCdWZmZXJWaWV3OlpvLGlzU3RyaW5nOnhvLGlzTnVtYmVyOmVpLGlzT2JqZWN0OkFzLGlzUGxhaW5PYmplY3Q6UXIsaXNVbmRlZmluZWQ6R3IsaXNEYXRlOnRpLGlzRmlsZTpyaSxpc0Jsb2I6bmksaXNGdW5jdGlvbjpBbixpc1N0cmVhbTphaSxpc1VSTFNlYXJjaFBhcmFtczppaSxpc1N0YW5kYXJkQnJvd3NlckVudjp1aSxmb3JFYWNoOkNuLG1lcmdlOkluLGV4dGVuZDpsaSx0cmltOmNpLHN0cmlwQk9NOmZpLGluaGVyaXRzOmRpLHRvRmxhdE9iamVjdDpoaSxraW5kT2Y6UG4sa2luZE9mVGVzdDpBdCxlbmRzV2l0aDpwaSx0b0FycmF5Om1pLGlzVHlwZWRBcnJheTp2aSxpc0ZpbGVMaXN0OnNpfSxZdD1QZTtmdW5jdGlvbiBDcyhlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX12YXIgSXM9ZnVuY3Rpb24odCxyLG4pe2lmKCFyKXJldHVybiB0O3ZhciBzO2lmKG4pcz1uKHIpO2Vsc2UgaWYoWXQuaXNVUkxTZWFyY2hQYXJhbXMocikpcz1yLnRvU3RyaW5nKCk7ZWxzZXt2YXIgYT1bXTtZdC5mb3JFYWNoKHIsZnVuY3Rpb24oZixwKXtmPT09bnVsbHx8dHlwZW9mIGY9PSJ1bmRlZmluZWQifHwoWXQuaXNBcnJheShmKT9wPXArIltdIjpmPVtmXSxZdC5mb3JFYWNoKGYsZnVuY3Rpb24oaCl7WXQuaXNEYXRlKGgpP2g9aC50b0lTT1N0cmluZygpOll0LmlzT2JqZWN0KGgpJiYoaD1KU09OLnN0cmluZ2lmeShoKSksYS5wdXNoKENzKHApKyI9IitDcyhoKSl9KSl9KSxzPWEuam9pbigiJiIpfWlmKHMpe3ZhciBvPXQuaW5kZXhPZigiIyIpO28hPT0tMSYmKHQ9dC5zbGljZSgwLG8pKSx0Kz0odC5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStzfXJldHVybiB0fSxfaT1QZTtmdW5jdGlvbiBZcigpe3RoaXMuaGFuZGxlcnM9W119WXIucHJvdG90eXBlLnVzZT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOnQscmVqZWN0ZWQ6cixzeW5jaHJvbm91czpuP24uc3luY2hyb25vdXM6ITEscnVuV2hlbjpuP24ucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0sWXIucHJvdG90eXBlLmVqZWN0PWZ1bmN0aW9uKHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfSxZci5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0KXtfaS5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24obil7biE9PW51bGwmJnQobil9KX07dmFyIGdpPVlyLEVpPVBlLHlpPWZ1bmN0aW9uKHQscil7RWkuZm9yRWFjaCh0LGZ1bmN0aW9uKHMsYSl7YSE9PXImJmEudG9VcHBlckNhc2UoKT09PXIudG9VcHBlckNhc2UoKSYmKHRbcl09cyxkZWxldGUgdFthXSl9KX0sRHM9UGU7ZnVuY3Rpb24gV3QoZSx0LHIsbixzKXtFcnJvci5jYWxsKHRoaXMpLHRoaXMubWVzc2FnZT1lLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxyJiYodGhpcy5jb25maWc9ciksbiYmKHRoaXMucmVxdWVzdD1uKSxzJiYodGhpcy5yZXNwb25zZT1zKX1Ecy5pbmhlcml0cyhXdCxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIganM9V3QucHJvdG90eXBlLGtzPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCJdLmZvckVhY2goZnVuY3Rpb24oZSl7a3NbZV09e3ZhbHVlOmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoV3Qsa3MpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqcywiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KSxXdC5mcm9tPWZ1bmN0aW9uKGUsdCxyLG4scyxhKXt2YXIgbz1PYmplY3QuY3JlYXRlKGpzKTtyZXR1cm4gRHMudG9GbGF0T2JqZWN0KGUsbyxmdW5jdGlvbihmKXtyZXR1cm4gZiE9PUVycm9yLnByb3RvdHlwZX0pLFd0LmNhbGwobyxlLm1lc3NhZ2UsdCxyLG4scyksby5uYW1lPWUubmFtZSxhJiZPYmplY3QuYXNzaWduKG8sYSksb307dmFyIFh0PVd0LFVzPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfSxHZT1QZTtmdW5jdGlvbiAkaShlLHQpe3Q9dHx8bmV3IEZvcm1EYXRhO3ZhciByPVtdO2Z1bmN0aW9uIG4oYSl7cmV0dXJuIGE9PT1udWxsPyIiOkdlLmlzRGF0ZShhKT9hLnRvSVNPU3RyaW5nKCk6R2UuaXNBcnJheUJ1ZmZlcihhKXx8R2UuaXNUeXBlZEFycmF5KGEpP3R5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFthXSk6QnVmZmVyLmZyb20oYSk6YX1mdW5jdGlvbiBzKGEsbyl7aWYoR2UuaXNQbGFpbk9iamVjdChhKXx8R2UuaXNBcnJheShhKSl7aWYoci5pbmRleE9mKGEpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK28pO3IucHVzaChhKSxHZS5mb3JFYWNoKGEsZnVuY3Rpb24oZixwKXtpZighR2UuaXNVbmRlZmluZWQoZikpe3ZhciBpPW8/bysiLiIrcDpwLGg7aWYoZiYmIW8mJnR5cGVvZiBmPT0ib2JqZWN0Iil7aWYoR2UuZW5kc1dpdGgocCwie30iKSlmPUpTT04uc3RyaW5naWZ5KGYpO2Vsc2UgaWYoR2UuZW5kc1dpdGgocCwiW10iKSYmKGg9R2UudG9BcnJheShmKSkpe2guZm9yRWFjaChmdW5jdGlvbihFKXshR2UuaXNVbmRlZmluZWQoRSkmJnQuYXBwZW5kKGksbihFKSl9KTtyZXR1cm59fXMoZixpKX19KSxyLnBvcCgpfWVsc2UgdC5hcHBlbmQobyxuKGEpKX1yZXR1cm4gcyhlKSx0fXZhciBGcz0kaSxEbj1YdCx3aT1mdW5jdGlvbih0LHIsbil7dmFyIHM9bi5jb25maWcudmFsaWRhdGVTdGF0dXM7IW4uc3RhdHVzfHwhc3x8cyhuLnN0YXR1cyk/dChuKTpyKG5ldyBEbigiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLFtEbi5FUlJfQkFEX1JFUVVFU1QsRG4uRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihuLnN0YXR1cy8xMDApLTRdLG4uY29uZmlnLG4ucmVxdWVzdCxuKSl9LFdyPVBlLFNpPVdyLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24ocixuLHMsYSxvLGwpe3ZhciBmPVtdO2YucHVzaChyKyI9IitlbmNvZGVVUklDb21wb25lbnQobikpLFdyLmlzTnVtYmVyKHMpJiZmLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShzKS50b0dNVFN0cmluZygpKSxXci5pc1N0cmluZyhhKSYmZi5wdXNoKCJwYXRoPSIrYSksV3IuaXNTdHJpbmcobykmJmYucHVzaCgiZG9tYWluPSIrbyksbD09PSEwJiZmLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1mLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24ocil7dmFyIG49ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK3IrIik9KFteO10qKSIpKTtyZXR1cm4gbj9kZWNvZGVVUklDb21wb25lbnQoblszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKHIpe3RoaXMud3JpdGUociwiIixEYXRlLm5vdygpLTg2NGU1KX19fSgpOmZ1bmN0aW9uKCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319fSgpLFJpPWZ1bmN0aW9uKHQpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QodCl9LGJpPWZ1bmN0aW9uKHQscil7cmV0dXJuIHI/dC5yZXBsYWNlKC9cLyskLywiIikrIi8iK3IucmVwbGFjZSgvXlwvKy8sIiIpOnR9LE9pPVJpLE5pPWJpLE1zPWZ1bmN0aW9uKHQscil7cmV0dXJuIHQmJiFPaShyKT9OaSh0LHIpOnJ9LGpuPVBlLFBpPVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0sVGk9ZnVuY3Rpb24odCl7dmFyIHI9e30sbixzLGE7cmV0dXJuIHQmJmpuLmZvckVhY2godC5zcGxpdChgCmApLGZ1bmN0aW9uKGwpe2lmKGE9bC5pbmRleE9mKCI6Iiksbj1qbi50cmltKGwuc3Vic3RyKDAsYSkpLnRvTG93ZXJDYXNlKCkscz1qbi50cmltKGwuc3Vic3RyKGErMSkpLG4pe2lmKHJbbl0mJlBpLmluZGV4T2Yobik+PTApcmV0dXJuO249PT0ic2V0LWNvb2tpZSI/cltuXT0ocltuXT9yW25dOltdKS5jb25jYXQoW3NdKTpyW25dPXJbbl0/cltuXSsiLCAiK3M6c319KSxyfSxMcz1QZSxBaT1Mcy5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7dmFyIHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxuO2Z1bmN0aW9uIHMoYSl7dmFyIG89YTtyZXR1cm4gdCYmKHIuc2V0QXR0cmlidXRlKCJocmVmIixvKSxvPXIuaHJlZiksci5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLHtocmVmOnIuaHJlZixwcm90b2NvbDpyLnByb3RvY29sP3IucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnIuaG9zdCxzZWFyY2g6ci5zZWFyY2g/ci5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDpyLmhhc2g/ci5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6ci5ob3N0bmFtZSxwb3J0OnIucG9ydCxwYXRobmFtZTpyLnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj9yLnBhdGhuYW1lOiIvIityLnBhdGhuYW1lfX1yZXR1cm4gbj1zKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihvKXt2YXIgbD1Mcy5pc1N0cmluZyhvKT9zKG8pOm87cmV0dXJuIGwucHJvdG9jb2w9PT1uLnByb3RvY29sJiZsLmhvc3Q9PT1uLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpLGtuPVh0LENpPVBlO2Z1bmN0aW9uIFZzKGUpe2tuLmNhbGwodGhpcyxlPT1udWxsPyJjYW5jZWxlZCI6ZSxrbi5FUlJfQ0FOQ0VMRUQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Q2kuaW5oZXJpdHMoVnMsa24se19fQ0FOQ0VMX186ITB9KTt2YXIgWHI9VnMsSWk9ZnVuY3Rpb24odCl7dmFyIHI9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWModCk7cmV0dXJuIHImJnJbMV18fCIifSxncj1QZSxEaT13aSxqaT1TaSxraT1JcyxVaT1NcyxGaT1UaSxNaT1BaSxMaT1Vcyx1dD1YdCxWaT1Ycix6aT1JaSx6cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixzKXt2YXIgYT10LmRhdGEsbz10LmhlYWRlcnMsbD10LnJlc3BvbnNlVHlwZSxmO2Z1bmN0aW9uIHAoKXt0LmNhbmNlbFRva2VuJiZ0LmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGYpLHQuc2lnbmFsJiZ0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsZil9Z3IuaXNGb3JtRGF0YShhKSYmZ3IuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSYmZGVsZXRlIG9bIkNvbnRlbnQtVHlwZSJdO3ZhciBpPW5ldyBYTUxIdHRwUmVxdWVzdDtpZih0LmF1dGgpe3ZhciBoPXQuYXV0aC51c2VybmFtZXx8IiIsRT10LmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHQuYXV0aC5wYXNzd29yZCkpOiIiO28uQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKGgrIjoiK0UpfXZhciBUPVVpKHQuYmFzZVVSTCx0LnVybCk7aS5vcGVuKHQubWV0aG9kLnRvVXBwZXJDYXNlKCksa2koVCx0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxpLnRpbWVvdXQ9dC50aW1lb3V0O2Z1bmN0aW9uIEkoKXtpZighIWkpe3ZhciBfPSJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gaT9GaShpLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLGI9IWx8fGw9PT0idGV4dCJ8fGw9PT0ianNvbiI/aS5yZXNwb25zZVRleHQ6aS5yZXNwb25zZSxPPXtkYXRhOmIsc3RhdHVzOmkuc3RhdHVzLHN0YXR1c1RleHQ6aS5zdGF0dXNUZXh0LGhlYWRlcnM6Xyxjb25maWc6dCxyZXF1ZXN0Oml9O0RpKGZ1bmN0aW9uKEgpe24oSCkscCgpfSxmdW5jdGlvbihIKXtzKEgpLHAoKX0sTyksaT1udWxsfX1pZigib25sb2FkZW5kImluIGk/aS5vbmxvYWRlbmQ9STppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFpfHxpLnJlYWR5U3RhdGUhPT00fHxpLnN0YXR1cz09PTAmJiEoaS5yZXNwb25zZVVSTCYmaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoSSl9LGkub25hYm9ydD1mdW5jdGlvbigpeyFpfHwocyhuZXcgdXQoIlJlcXVlc3QgYWJvcnRlZCIsdXQuRUNPTk5BQk9SVEVELHQsaSkpLGk9bnVsbCl9LGkub25lcnJvcj1mdW5jdGlvbigpe3MobmV3IHV0KCJOZXR3b3JrIEVycm9yIix1dC5FUlJfTkVUV09SSyx0LGksaSkpLGk9bnVsbH0saS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgYj10LnRpbWVvdXQ/InRpbWVvdXQgb2YgIit0LnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsTz10LnRyYW5zaXRpb25hbHx8TGk7dC50aW1lb3V0RXJyb3JNZXNzYWdlJiYoYj10LnRpbWVvdXRFcnJvck1lc3NhZ2UpLHMobmV3IHV0KGIsTy5jbGFyaWZ5VGltZW91dEVycm9yP3V0LkVUSU1FRE9VVDp1dC5FQ09OTkFCT1JURUQsdCxpKSksaT1udWxsfSxnci5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgaj0odC53aXRoQ3JlZGVudGlhbHN8fE1pKFQpKSYmdC54c3JmQ29va2llTmFtZT9qaS5yZWFkKHQueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDtqJiYob1t0LnhzcmZIZWFkZXJOYW1lXT1qKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBpJiZnci5mb3JFYWNoKG8sZnVuY3Rpb24oYixPKXt0eXBlb2YgYT09InVuZGVmaW5lZCImJk8udG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiP2RlbGV0ZSBvW09dOmkuc2V0UmVxdWVzdEhlYWRlcihPLGIpfSksZ3IuaXNVbmRlZmluZWQodC53aXRoQ3JlZGVudGlhbHMpfHwoaS53aXRoQ3JlZGVudGlhbHM9ISF0LndpdGhDcmVkZW50aWFscyksbCYmbCE9PSJqc29uIiYmKGkucmVzcG9uc2VUeXBlPXQucmVzcG9uc2VUeXBlKSx0eXBlb2YgdC5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHQub25Eb3dubG9hZFByb2dyZXNzKSx0eXBlb2YgdC5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZpLnVwbG9hZCYmaS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHQub25VcGxvYWRQcm9ncmVzcyksKHQuY2FuY2VsVG9rZW58fHQuc2lnbmFsKSYmKGY9ZnVuY3Rpb24oXyl7IWl8fChzKCFffHxfJiZfLnR5cGU/bmV3IFZpOl8pLGkuYWJvcnQoKSxpPW51bGwpfSx0LmNhbmNlbFRva2VuJiZ0LmNhbmNlbFRva2VuLnN1YnNjcmliZShmKSx0LnNpZ25hbCYmKHQuc2lnbmFsLmFib3J0ZWQ/ZigpOnQuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixmKSkpLGF8fChhPW51bGwpO3ZhciB5PXppKFQpO2lmKHkmJlsiaHR0cCIsImh0dHBzIiwiZmlsZSJdLmluZGV4T2YoeSk9PT0tMSl7cyhuZXcgdXQoIlVuc3VwcG9ydGVkIHByb3RvY29sICIreSsiOiIsdXQuRVJSX0JBRF9SRVFVRVNULHQpKTtyZXR1cm59aS5zZW5kKGEpfSl9LEhpPW51bGwsT2U9UGUsSHM9eWksS3M9WHQsS2k9VXMsQmk9RnMsSmk9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBCcyhlLHQpeyFPZS5pc1VuZGVmaW5lZChlKSYmT2UuaXNVbmRlZmluZWQoZVsiQ29udGVudC1UeXBlIl0pJiYoZVsiQ29udGVudC1UeXBlIl09dCl9ZnVuY3Rpb24gcWkoKXt2YXIgZTtyZXR1cm4odHlwZW9mIFhNTEh0dHBSZXF1ZXN0IT0idW5kZWZpbmVkInx8dHlwZW9mIHByb2Nlc3MhPSJ1bmRlZmluZWQiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2Vzcyk9PT0iW29iamVjdCBwcm9jZXNzXSIpJiYoZT16cyksZX1mdW5jdGlvbiBHaShlLHQscil7aWYoT2UuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxPZS50cmltKGUpfWNhdGNoKG4pe2lmKG4ubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgbn1yZXR1cm4ocnx8SlNPTi5zdHJpbmdpZnkpKGUpfXZhciBacj17dHJhbnNpdGlvbmFsOktpLGFkYXB0ZXI6cWkoKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbih0LHIpe2lmKEhzKHIsIkFjY2VwdCIpLEhzKHIsIkNvbnRlbnQtVHlwZSIpLE9lLmlzRm9ybURhdGEodCl8fE9lLmlzQXJyYXlCdWZmZXIodCl8fE9lLmlzQnVmZmVyKHQpfHxPZS5pc1N0cmVhbSh0KXx8T2UuaXNGaWxlKHQpfHxPZS5pc0Jsb2IodCkpcmV0dXJuIHQ7aWYoT2UuaXNBcnJheUJ1ZmZlclZpZXcodCkpcmV0dXJuIHQuYnVmZmVyO2lmKE9lLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBCcyhyLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLHQudG9TdHJpbmcoKTt2YXIgbj1PZS5pc09iamVjdCh0KSxzPXImJnJbIkNvbnRlbnQtVHlwZSJdLGE7aWYoKGE9T2UuaXNGaWxlTGlzdCh0KSl8fG4mJnM9PT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpe3ZhciBvPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gQmkoYT97ImZpbGVzW10iOnR9OnQsbyYmbmV3IG8pfWVsc2UgaWYobnx8cz09PSJhcHBsaWNhdGlvbi9qc29uIilyZXR1cm4gQnMociwiYXBwbGljYXRpb24vanNvbiIpLEdpKHQpO3JldHVybiB0fV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKHQpe3ZhciByPXRoaXMudHJhbnNpdGlvbmFsfHxaci50cmFuc2l0aW9uYWwsbj1yJiZyLnNpbGVudEpTT05QYXJzaW5nLHM9ciYmci5mb3JjZWRKU09OUGFyc2luZyxhPSFuJiZ0aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihhfHxzJiZPZS5pc1N0cmluZyh0KSYmdC5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKG8pe2lmKGEpdGhyb3cgby5uYW1lPT09IlN5bnRheEVycm9yIj9Lcy5mcm9tKG8sS3MuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6b31yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6SGl9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIn19fTtPZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLGZ1bmN0aW9uKHQpe1pyLmhlYWRlcnNbdF09e319KSxPZS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7WnIuaGVhZGVyc1t0XT1PZS5tZXJnZShKaSl9KTt2YXIgVW49WnIsUWk9UGUsWWk9VW4sV2k9ZnVuY3Rpb24odCxyLG4pe3ZhciBzPXRoaXN8fFlpO3JldHVybiBRaS5mb3JFYWNoKG4sZnVuY3Rpb24obyl7dD1vLmNhbGwocyx0LHIpfSksdH0sSnM9ZnVuY3Rpb24odCl7cmV0dXJuISEodCYmdC5fX0NBTkNFTF9fKX0scXM9UGUsRm49V2ksWGk9SnMsWmk9VW4seGk9WHI7ZnVuY3Rpb24gTW4oZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHhpfXZhciBlYz1mdW5jdGlvbih0KXtNbih0KSx0LmhlYWRlcnM9dC5oZWFkZXJzfHx7fSx0LmRhdGE9Rm4uY2FsbCh0LHQuZGF0YSx0LmhlYWRlcnMsdC50cmFuc2Zvcm1SZXF1ZXN0KSx0LmhlYWRlcnM9cXMubWVyZ2UodC5oZWFkZXJzLmNvbW1vbnx8e30sdC5oZWFkZXJzW3QubWV0aG9kXXx8e30sdC5oZWFkZXJzKSxxcy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLGZ1bmN0aW9uKHMpe2RlbGV0ZSB0LmhlYWRlcnNbc119KTt2YXIgcj10LmFkYXB0ZXJ8fFppLmFkYXB0ZXI7cmV0dXJuIHIodCkudGhlbihmdW5jdGlvbihzKXtyZXR1cm4gTW4odCkscy5kYXRhPUZuLmNhbGwodCxzLmRhdGEscy5oZWFkZXJzLHQudHJhbnNmb3JtUmVzcG9uc2UpLHN9LGZ1bmN0aW9uKHMpe3JldHVybiBYaShzKXx8KE1uKHQpLHMmJnMucmVzcG9uc2UmJihzLnJlc3BvbnNlLmRhdGE9Rm4uY2FsbCh0LHMucmVzcG9uc2UuZGF0YSxzLnJlc3BvbnNlLmhlYWRlcnMsdC50cmFuc2Zvcm1SZXNwb25zZSkpKSxQcm9taXNlLnJlamVjdChzKX0pfSxVZT1QZSxHcz1mdW5jdGlvbih0LHIpe3I9cnx8e307dmFyIG49e307ZnVuY3Rpb24gcyhpLGgpe3JldHVybiBVZS5pc1BsYWluT2JqZWN0KGkpJiZVZS5pc1BsYWluT2JqZWN0KGgpP1VlLm1lcmdlKGksaCk6VWUuaXNQbGFpbk9iamVjdChoKT9VZS5tZXJnZSh7fSxoKTpVZS5pc0FycmF5KGgpP2guc2xpY2UoKTpofWZ1bmN0aW9uIGEoaSl7aWYoVWUuaXNVbmRlZmluZWQocltpXSkpe2lmKCFVZS5pc1VuZGVmaW5lZCh0W2ldKSlyZXR1cm4gcyh2b2lkIDAsdFtpXSl9ZWxzZSByZXR1cm4gcyh0W2ldLHJbaV0pfWZ1bmN0aW9uIG8oaSl7aWYoIVVlLmlzVW5kZWZpbmVkKHJbaV0pKXJldHVybiBzKHZvaWQgMCxyW2ldKX1mdW5jdGlvbiBsKGkpe2lmKFVlLmlzVW5kZWZpbmVkKHJbaV0pKXtpZighVWUuaXNVbmRlZmluZWQodFtpXSkpcmV0dXJuIHModm9pZCAwLHRbaV0pfWVsc2UgcmV0dXJuIHModm9pZCAwLHJbaV0pfWZ1bmN0aW9uIGYoaSl7aWYoaSBpbiByKXJldHVybiBzKHRbaV0scltpXSk7aWYoaSBpbiB0KXJldHVybiBzKHZvaWQgMCx0W2ldKX12YXIgcD17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6bCx0cmFuc2Zvcm1SZXF1ZXN0OmwsdHJhbnNmb3JtUmVzcG9uc2U6bCxwYXJhbXNTZXJpYWxpemVyOmwsdGltZW91dDpsLHRpbWVvdXRNZXNzYWdlOmwsd2l0aENyZWRlbnRpYWxzOmwsYWRhcHRlcjpsLHJlc3BvbnNlVHlwZTpsLHhzcmZDb29raWVOYW1lOmwseHNyZkhlYWRlck5hbWU6bCxvblVwbG9hZFByb2dyZXNzOmwsb25Eb3dubG9hZFByb2dyZXNzOmwsZGVjb21wcmVzczpsLG1heENvbnRlbnRMZW5ndGg6bCxtYXhCb2R5TGVuZ3RoOmwsYmVmb3JlUmVkaXJlY3Q6bCx0cmFuc3BvcnQ6bCxodHRwQWdlbnQ6bCxodHRwc0FnZW50OmwsY2FuY2VsVG9rZW46bCxzb2NrZXRQYXRoOmwscmVzcG9uc2VFbmNvZGluZzpsLHZhbGlkYXRlU3RhdHVzOmZ9O3JldHVybiBVZS5mb3JFYWNoKE9iamVjdC5rZXlzKHQpLmNvbmNhdChPYmplY3Qua2V5cyhyKSksZnVuY3Rpb24oaCl7dmFyIEU9cFtoXXx8YSxUPUUoaCk7VWUuaXNVbmRlZmluZWQoVCkmJkUhPT1mfHwobltoXT1UKX0pLG59LFFzPXt2ZXJzaW9uOiIwLjI3LjIifSx0Yz1Rcy52ZXJzaW9uLGd0PVh0LExuPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaChmdW5jdGlvbihlLHQpe0xuW2VdPWZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2Ygbj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pO3ZhciBZcz17fTtMbi50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxyLG4pe2Z1bmN0aW9uIHMoYSxvKXtyZXR1cm4iW0F4aW9zIHYiK3RjKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrYSsiJyIrbysobj8iLiAiK246IiIpfXJldHVybiBmdW5jdGlvbihhLG8sbCl7aWYodD09PSExKXRocm93IG5ldyBndChzKG8sIiBoYXMgYmVlbiByZW1vdmVkIisocj8iIGluICIrcjoiIikpLGd0LkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gciYmIVlzW29dJiYoWXNbb109ITAsY29uc29sZS53YXJuKHMobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrcisiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSx0P3QoYSxvLGwpOiEwfX07ZnVuY3Rpb24gcmMoZSx0LHIpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBuZXcgZ3QoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGd0LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtmb3IodmFyIG49T2JqZWN0LmtleXMoZSkscz1uLmxlbmd0aDtzLS0gPjA7KXt2YXIgYT1uW3NdLG89dFthXTtpZihvKXt2YXIgbD1lW2FdLGY9bD09PXZvaWQgMHx8byhsLGEsZSk7aWYoZiE9PSEwKXRocm93IG5ldyBndCgib3B0aW9uICIrYSsiIG11c3QgYmUgIitmLGd0LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZihyIT09ITApdGhyb3cgbmV3IGd0KCJVbmtub3duIG9wdGlvbiAiK2EsZ3QuRVJSX0JBRF9PUFRJT04pfX12YXIgbmM9e2Fzc2VydE9wdGlvbnM6cmMsdmFsaWRhdG9yczpMbn0sV3M9UGUsc2M9SXMsWHM9Z2ksWnM9ZWMseHI9R3MsYWM9TXMseHM9bmMsWnQ9eHMudmFsaWRhdG9ycztmdW5jdGlvbiB4dChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IFhzLHJlc3BvbnNlOm5ldyBYc319eHQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24odCxyKXt0eXBlb2YgdD09InN0cmluZyI/KHI9cnx8e30sci51cmw9dCk6cj10fHx7fSxyPXhyKHRoaXMuZGVmYXVsdHMsciksci5tZXRob2Q/ci5tZXRob2Q9ci5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD9yLm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnIubWV0aG9kPSJnZXQiO3ZhciBuPXIudHJhbnNpdGlvbmFsO24hPT12b2lkIDAmJnhzLmFzc2VydE9wdGlvbnMobix7c2lsZW50SlNPTlBhcnNpbmc6WnQudHJhbnNpdGlvbmFsKFp0LmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOlp0LnRyYW5zaXRpb25hbChadC5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOlp0LnRyYW5zaXRpb25hbChadC5ib29sZWFuKX0sITEpO3ZhciBzPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKFQpe3R5cGVvZiBULnJ1bldoZW49PSJmdW5jdGlvbiImJlQucnVuV2hlbihyKT09PSExfHwoYT1hJiZULnN5bmNocm9ub3VzLHMudW5zaGlmdChULmZ1bGZpbGxlZCxULnJlamVjdGVkKSl9KTt2YXIgbz1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKFQpe28ucHVzaChULmZ1bGZpbGxlZCxULnJlamVjdGVkKX0pO3ZhciBsO2lmKCFhKXt2YXIgZj1bWnMsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoZixzKSxmPWYuY29uY2F0KG8pLGw9UHJvbWlzZS5yZXNvbHZlKHIpO2YubGVuZ3RoOylsPWwudGhlbihmLnNoaWZ0KCksZi5zaGlmdCgpKTtyZXR1cm4gbH1mb3IodmFyIHA9cjtzLmxlbmd0aDspe3ZhciBpPXMuc2hpZnQoKSxoPXMuc2hpZnQoKTt0cnl7cD1pKHApfWNhdGNoKEUpe2goRSk7YnJlYWt9fXRyeXtsPVpzKHApfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3IoO28ubGVuZ3RoOylsPWwudGhlbihvLnNoaWZ0KCksby5zaGlmdCgpKTtyZXR1cm4gbH0seHQucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbih0KXt0PXhyKHRoaXMuZGVmYXVsdHMsdCk7dmFyIHI9YWModC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gc2Mocix0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpfSxXcy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbih0KXt4dC5wcm90b3R5cGVbdF09ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHhyKG58fHt9LHttZXRob2Q6dCx1cmw6cixkYXRhOihufHx7fSkuZGF0YX0pKX19KSxXcy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZnVuY3Rpb24oYSxvLGwpe3JldHVybiB0aGlzLnJlcXVlc3QoeHIobHx8e30se21ldGhvZDp0LGhlYWRlcnM6bj97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6YSxkYXRhOm99KSl9fXh0LnByb3RvdHlwZVt0XT1yKCkseHQucHJvdG90eXBlW3QrIkZvcm0iXT1yKCEwKX0pO3ZhciBvYz14dCxpYz1YcjtmdW5jdGlvbiBlcihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHMpe3Q9c30pO3ZhciByPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24obil7aWYoISFyLl9saXN0ZW5lcnMpe3ZhciBzLGE9ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3Iocz0wO3M8YTtzKyspci5fbGlzdGVuZXJzW3NdKG4pO3IuX2xpc3RlbmVycz1udWxsfX0pLHRoaXMucHJvbWlzZS50aGVuPWZ1bmN0aW9uKG4pe3ZhciBzLGE9bmV3IFByb21pc2UoZnVuY3Rpb24obyl7ci5zdWJzY3JpYmUobykscz1vfSkudGhlbihuKTtyZXR1cm4gYS5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKHMpfSxhfSxlKGZ1bmN0aW9uKHMpe3IucmVhc29ufHwoci5yZWFzb249bmV3IGljKHMpLHQoci5yZWFzb24pKX0pfWVyLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LGVyLnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCl7aWYodGhpcy5yZWFzb24pe3QodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2godCk6dGhpcy5fbGlzdGVuZXJzPVt0XX0sZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe2lmKCEhdGhpcy5fbGlzdGVuZXJzKXt2YXIgcj10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZih0KTtyIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UociwxKX19LGVyLnNvdXJjZT1mdW5jdGlvbigpe3ZhciB0LHI9bmV3IGVyKGZ1bmN0aW9uKHMpe3Q9c30pO3JldHVybnt0b2tlbjpyLGNhbmNlbDp0fX07dmFyIGNjPWVyLHVjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5hcHBseShudWxsLG4pfX0sbGM9UGUsZmM9ZnVuY3Rpb24odCl7cmV0dXJuIGxjLmlzT2JqZWN0KHQpJiZ0LmlzQXhpb3NFcnJvcj09PSEwfSxlYT1QZSxkYz1Qcyxlbj1vYyxoYz1HcyxwYz1VbjtmdW5jdGlvbiB0YShlKXt2YXIgdD1uZXcgZW4oZSkscj1kYyhlbi5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gZWEuZXh0ZW5kKHIsZW4ucHJvdG90eXBlLHQpLGVhLmV4dGVuZChyLHQpLHIuY3JlYXRlPWZ1bmN0aW9uKHMpe3JldHVybiB0YShoYyhlLHMpKX0scn12YXIgRGU9dGEocGMpO0RlLkF4aW9zPWVuLERlLkNhbmNlbGVkRXJyb3I9WHIsRGUuQ2FuY2VsVG9rZW49Y2MsRGUuaXNDYW5jZWw9SnMsRGUuVkVSU0lPTj1Rcy52ZXJzaW9uLERlLnRvRm9ybURhdGE9RnMsRGUuQXhpb3NFcnJvcj1YdCxEZS5DYW5jZWw9RGUuQ2FuY2VsZWRFcnJvcixEZS5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfSxEZS5zcHJlYWQ9dWMsRGUuaXNBeGlvc0Vycm9yPWZjLE9uLmV4cG9ydHM9RGUsT24uZXhwb3J0cy5kZWZhdWx0PURlO3ZhciBWbj1Pbi5leHBvcnRzLEN0PXt9LHRuPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0biwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdG4uR2V0RXJyb3JQYXlsb2FkPXZvaWQgMDtmdW5jdGlvbiBtYyhlLHQ9bnVsbCl7cmV0dXJue2Vycm9yOmUuY29kZSxlcnJvcl9kZXNjcmlwdGlvbjplLmRlc2NyaXB0aW9uLHRpbWVzdGFtcDpEYXRlLm5vdygpLGRldGFpbHM6dH19dG4uR2V0RXJyb3JQYXlsb2FkPW1jO3ZhciBybj17fSxJdD17fSx6bj17ZXhwb3J0czp7fX0scmE9e30sV2U9e30sdHI9e30sRXI9e30sdWU9e30seXI9e307KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLnJlZ2V4cENvZGU9ZS5nZXRFc21FeHBvcnROYW1lPWUuZ2V0UHJvcGVydHk9ZS5zYWZlU3RyaW5naWZ5PWUuc3RyaW5naWZ5PWUuc3RyQ29uY2F0PWUuYWRkQ29kZUFyZz1lLnN0cj1lLl89ZS5uaWw9ZS5fQ29kZT1lLk5hbWU9ZS5JREVOVElGSUVSPWUuX0NvZGVPck5hbWU9dm9pZCAwO2NsYXNzIHR7fWUuX0NvZGVPck5hbWU9dCxlLklERU5USUZJRVI9L15bYS16JF9dW2EteiRfMC05XSokL2k7Y2xhc3MgciBleHRlbmRzIHR7Y29uc3RydWN0b3IoYil7aWYoc3VwZXIoKSwhZS5JREVOVElGSUVSLnRlc3QoYikpdGhyb3cgbmV3IEVycm9yKCJDb2RlR2VuOiBuYW1lIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyIik7dGhpcy5zdHI9Yn10b1N0cmluZygpe3JldHVybiB0aGlzLnN0cn1lbXB0eVN0cigpe3JldHVybiExfWdldCBuYW1lcygpe3JldHVybntbdGhpcy5zdHJdOjF9fX1lLk5hbWU9cjtjbGFzcyBuIGV4dGVuZHMgdHtjb25zdHJ1Y3RvcihiKXtzdXBlcigpLHRoaXMuX2l0ZW1zPXR5cGVvZiBiPT0ic3RyaW5nIj9bYl06Yn10b1N0cmluZygpe3JldHVybiB0aGlzLnN0cn1lbXB0eVN0cigpe2lmKHRoaXMuX2l0ZW1zLmxlbmd0aD4xKXJldHVybiExO2NvbnN0IGI9dGhpcy5faXRlbXNbMF07cmV0dXJuIGI9PT0iInx8Yj09PSciIid9Z2V0IHN0cigpe3ZhciBiO3JldHVybihiPXRoaXMuX3N0cikhPT1udWxsJiZiIT09dm9pZCAwP2I6dGhpcy5fc3RyPXRoaXMuX2l0ZW1zLnJlZHVjZSgoTyxBKT0+YCR7T30ke0F9YCwiIil9Z2V0IG5hbWVzKCl7dmFyIGI7cmV0dXJuKGI9dGhpcy5fbmFtZXMpIT09bnVsbCYmYiE9PXZvaWQgMD9iOnRoaXMuX25hbWVzPXRoaXMuX2l0ZW1zLnJlZHVjZSgoTyxBKT0+KEEgaW5zdGFuY2VvZiByJiYoT1tBLnN0cl09KE9bQS5zdHJdfHwwKSsxKSxPKSx7fSl9fWUuX0NvZGU9bixlLm5pbD1uZXcgbigiIik7ZnVuY3Rpb24gcyhfLC4uLmIpe2NvbnN0IE89W19bMF1dO2xldCBBPTA7Zm9yKDtBPGIubGVuZ3RoOylsKE8sYltBXSksTy5wdXNoKF9bKytBXSk7cmV0dXJuIG5ldyBuKE8pfWUuXz1zO2NvbnN0IGE9bmV3IG4oIisiKTtmdW5jdGlvbiBvKF8sLi4uYil7Y29uc3QgTz1bVChfWzBdKV07bGV0IEE9MDtmb3IoO0E8Yi5sZW5ndGg7KU8ucHVzaChhKSxsKE8sYltBXSksTy5wdXNoKGEsVChfWysrQV0pKTtyZXR1cm4gZihPKSxuZXcgbihPKX1lLnN0cj1vO2Z1bmN0aW9uIGwoXyxiKXtiIGluc3RhbmNlb2Ygbj9fLnB1c2goLi4uYi5faXRlbXMpOmIgaW5zdGFuY2VvZiByP18ucHVzaChiKTpfLnB1c2goaChiKSl9ZS5hZGRDb2RlQXJnPWw7ZnVuY3Rpb24gZihfKXtsZXQgYj0xO2Zvcig7YjxfLmxlbmd0aC0xOyl7aWYoX1tiXT09PWEpe2NvbnN0IE89cChfW2ItMV0sX1tiKzFdKTtpZihPIT09dm9pZCAwKXtfLnNwbGljZShiLTEsMyxPKTtjb250aW51ZX1fW2IrK109IisifWIrK319ZnVuY3Rpb24gcChfLGIpe2lmKGI9PT0nIiInKXJldHVybiBfO2lmKF89PT0nIiInKXJldHVybiBiO2lmKHR5cGVvZiBfPT0ic3RyaW5nIilyZXR1cm4gYiBpbnN0YW5jZW9mIHJ8fF9bXy5sZW5ndGgtMV0hPT0nIic/dm9pZCAwOnR5cGVvZiBiIT0ic3RyaW5nIj9gJHtfLnNsaWNlKDAsLTEpfSR7Yn0iYDpiWzBdPT09JyInP18uc2xpY2UoMCwtMSkrYi5zbGljZSgxKTp2b2lkIDA7aWYodHlwZW9mIGI9PSJzdHJpbmciJiZiWzBdPT09JyInJiYhKF8gaW5zdGFuY2VvZiByKSlyZXR1cm5gIiR7X30ke2Iuc2xpY2UoMSl9YH1mdW5jdGlvbiBpKF8sYil7cmV0dXJuIGIuZW1wdHlTdHIoKT9fOl8uZW1wdHlTdHIoKT9iOm9gJHtffSR7Yn1gfWUuc3RyQ29uY2F0PWk7ZnVuY3Rpb24gaChfKXtyZXR1cm4gdHlwZW9mIF89PSJudW1iZXIifHx0eXBlb2YgXz09ImJvb2xlYW4ifHxfPT09bnVsbD9fOlQoQXJyYXkuaXNBcnJheShfKT9fLmpvaW4oIiwiKTpfKX1mdW5jdGlvbiBFKF8pe3JldHVybiBuZXcgbihUKF8pKX1lLnN0cmluZ2lmeT1FO2Z1bmN0aW9uIFQoXyl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KF8pLnJlcGxhY2UoL1x1MjAyOC9nLCJcXHUyMDI4IikucmVwbGFjZSgvXHUyMDI5L2csIlxcdTIwMjkiKX1lLnNhZmVTdHJpbmdpZnk9VDtmdW5jdGlvbiBJKF8pe3JldHVybiB0eXBlb2YgXz09InN0cmluZyImJmUuSURFTlRJRklFUi50ZXN0KF8pP25ldyBuKGAuJHtffWApOnNgWyR7X31dYH1lLmdldFByb3BlcnR5PUk7ZnVuY3Rpb24gaihfKXtpZih0eXBlb2YgXz09InN0cmluZyImJmUuSURFTlRJRklFUi50ZXN0KF8pKXJldHVybiBuZXcgbihgJHtffWApO3Rocm93IG5ldyBFcnJvcihgQ29kZUdlbjogaW52YWxpZCBleHBvcnQgbmFtZTogJHtffSwgdXNlIGV4cGxpY2l0ICRpZCBuYW1lIG1hcHBpbmdgKX1lLmdldEVzbUV4cG9ydE5hbWU9ajtmdW5jdGlvbiB5KF8pe3JldHVybiBuZXcgbihfLnRvU3RyaW5nKCkpfWUucmVnZXhwQ29kZT15fSkoeXIpO3ZhciBIbj17fTsoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVmFsdWVTY29wZT1lLlZhbHVlU2NvcGVOYW1lPWUuU2NvcGU9ZS52YXJLaW5kcz1lLlVzZWRWYWx1ZVN0YXRlPXZvaWQgMDtjb25zdCB0PXlyO2NsYXNzIHIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihwKXtzdXBlcihgQ29kZUdlbjogImNvZGUiIGZvciAke3B9IG5vdCBkZWZpbmVkYCksdGhpcy52YWx1ZT1wLnZhbHVlfX12YXIgbjsoZnVuY3Rpb24oZil7ZltmLlN0YXJ0ZWQ9MF09IlN0YXJ0ZWQiLGZbZi5Db21wbGV0ZWQ9MV09IkNvbXBsZXRlZCJ9KShuPWUuVXNlZFZhbHVlU3RhdGV8fChlLlVzZWRWYWx1ZVN0YXRlPXt9KSksZS52YXJLaW5kcz17Y29uc3Q6bmV3IHQuTmFtZSgiY29uc3QiKSxsZXQ6bmV3IHQuTmFtZSgibGV0IiksdmFyOm5ldyB0Lk5hbWUoInZhciIpfTtjbGFzcyBze2NvbnN0cnVjdG9yKHtwcmVmaXhlczpwLHBhcmVudDppfT17fSl7dGhpcy5fbmFtZXM9e30sdGhpcy5fcHJlZml4ZXM9cCx0aGlzLl9wYXJlbnQ9aX10b05hbWUocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB0Lk5hbWU/cDp0aGlzLm5hbWUocCl9bmFtZShwKXtyZXR1cm4gbmV3IHQuTmFtZSh0aGlzLl9uZXdOYW1lKHApKX1fbmV3TmFtZShwKXtjb25zdCBpPXRoaXMuX25hbWVzW3BdfHx0aGlzLl9uYW1lR3JvdXAocCk7cmV0dXJuYCR7cH0ke2kuaW5kZXgrK31gfV9uYW1lR3JvdXAocCl7dmFyIGksaDtpZigoKGg9KGk9dGhpcy5fcGFyZW50KT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkuX3ByZWZpeGVzKT09PW51bGx8fGg9PT12b2lkIDA/dm9pZCAwOmguaGFzKHApKXx8dGhpcy5fcHJlZml4ZXMmJiF0aGlzLl9wcmVmaXhlcy5oYXMocCkpdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBwcmVmaXggIiR7cH0iIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgc2NvcGVgKTtyZXR1cm4gdGhpcy5fbmFtZXNbcF09e3ByZWZpeDpwLGluZGV4OjB9fX1lLlNjb3BlPXM7Y2xhc3MgYSBleHRlbmRzIHQuTmFtZXtjb25zdHJ1Y3RvcihwLGkpe3N1cGVyKGkpLHRoaXMucHJlZml4PXB9c2V0VmFsdWUocCx7cHJvcGVydHk6aSxpdGVtSW5kZXg6aH0pe3RoaXMudmFsdWU9cCx0aGlzLnNjb3BlUGF0aD0oMCx0Ll8pYC4ke25ldyB0Lk5hbWUoaSl9WyR7aH1dYH19ZS5WYWx1ZVNjb3BlTmFtZT1hO2NvbnN0IG89KDAsdC5fKWBcbmA7Y2xhc3MgbCBleHRlbmRzIHN7Y29uc3RydWN0b3IocCl7c3VwZXIocCksdGhpcy5fdmFsdWVzPXt9LHRoaXMuX3Njb3BlPXAuc2NvcGUsdGhpcy5vcHRzPWxlKFEoe30scCkse19uOnAubGluZXM/bzp0Lm5pbH0pfWdldCgpe3JldHVybiB0aGlzLl9zY29wZX1uYW1lKHApe3JldHVybiBuZXcgYShwLHRoaXMuX25ld05hbWUocCkpfXZhbHVlKHAsaSl7dmFyIGg7aWYoaS5yZWY9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDb2RlR2VuOiByZWYgbXVzdCBiZSBwYXNzZWQgaW4gdmFsdWUiKTtjb25zdCBFPXRoaXMudG9OYW1lKHApLHtwcmVmaXg6VH09RSxJPShoPWkua2V5KSE9PW51bGwmJmghPT12b2lkIDA/aDppLnJlZjtsZXQgaj10aGlzLl92YWx1ZXNbVF07aWYoail7Y29uc3QgYj1qLmdldChJKTtpZihiKXJldHVybiBifWVsc2Ugaj10aGlzLl92YWx1ZXNbVF09bmV3IE1hcDtqLnNldChJLEUpO2NvbnN0IHk9dGhpcy5fc2NvcGVbVF18fCh0aGlzLl9zY29wZVtUXT1bXSksXz15Lmxlbmd0aDtyZXR1cm4geVtfXT1pLnJlZixFLnNldFZhbHVlKGkse3Byb3BlcnR5OlQsaXRlbUluZGV4Ol99KSxFfWdldFZhbHVlKHAsaSl7Y29uc3QgaD10aGlzLl92YWx1ZXNbcF07aWYoISFoKXJldHVybiBoLmdldChpKX1zY29wZVJlZnMocCxpPXRoaXMuX3ZhbHVlcyl7cmV0dXJuIHRoaXMuX3JlZHVjZVZhbHVlcyhpLGg9PntpZihoLnNjb3BlUGF0aD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5hbWUgIiR7aH0iIGhhcyBubyB2YWx1ZWApO3JldHVybigwLHQuXylgJHtwfSR7aC5zY29wZVBhdGh9YH0pfXNjb3BlQ29kZShwPXRoaXMuX3ZhbHVlcyxpLGgpe3JldHVybiB0aGlzLl9yZWR1Y2VWYWx1ZXMocCxFPT57aWYoRS52YWx1ZT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5hbWUgIiR7RX0iIGhhcyBubyB2YWx1ZWApO3JldHVybiBFLnZhbHVlLmNvZGV9LGksaCl9X3JlZHVjZVZhbHVlcyhwLGksaD17fSxFKXtsZXQgVD10Lm5pbDtmb3IoY29uc3QgSSBpbiBwKXtjb25zdCBqPXBbSV07aWYoIWopY29udGludWU7Y29uc3QgeT1oW0ldPWhbSV18fG5ldyBNYXA7ai5mb3JFYWNoKF89PntpZih5LmhhcyhfKSlyZXR1cm47eS5zZXQoXyxuLlN0YXJ0ZWQpO2xldCBiPWkoXyk7aWYoYil7Y29uc3QgTz10aGlzLm9wdHMuZXM1P2UudmFyS2luZHMudmFyOmUudmFyS2luZHMuY29uc3Q7VD0oMCx0Ll8pYCR7VH0ke099ICR7X30gPSAke2J9OyR7dGhpcy5vcHRzLl9ufWB9ZWxzZSBpZihiPUU9PW51bGw/dm9pZCAwOkUoXykpVD0oMCx0Ll8pYCR7VH0ke2J9JHt0aGlzLm9wdHMuX259YDtlbHNlIHRocm93IG5ldyByKF8pO3kuc2V0KF8sbi5Db21wbGV0ZWQpfSl9cmV0dXJuIFR9fWUuVmFsdWVTY29wZT1sfSkoSG4pLGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLm9yPWUuYW5kPWUubm90PWUuQ29kZUdlbj1lLm9wZXJhdG9ycz1lLnZhcktpbmRzPWUuVmFsdWVTY29wZU5hbWU9ZS5WYWx1ZVNjb3BlPWUuU2NvcGU9ZS5OYW1lPWUucmVnZXhwQ29kZT1lLnN0cmluZ2lmeT1lLmdldFByb3BlcnR5PWUubmlsPWUuc3RyQ29uY2F0PWUuc3RyPWUuXz12b2lkIDA7Y29uc3QgdD15cixyPUhuO3ZhciBuPXlyO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5ffX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzdHIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLnN0cn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3RyQ29uY2F0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5zdHJDb25jYXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm5pbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4ubmlsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJnZXRQcm9wZXJ0eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2V0UHJvcGVydHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInN0cmluZ2lmeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uc3RyaW5naWZ5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyZWdleHBDb2RlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5yZWdleHBDb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJOYW1lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5OYW1lfX0pO3ZhciBzPUhuO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJTY29wZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuU2NvcGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIlZhbHVlU2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlZhbHVlU2NvcGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIlZhbHVlU2NvcGVOYW1lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5WYWx1ZVNjb3BlTmFtZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidmFyS2luZHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnZhcktpbmRzfX0pLGUub3BlcmF0b3JzPXtHVDpuZXcgdC5fQ29kZSgiPiIpLEdURTpuZXcgdC5fQ29kZSgiPj0iKSxMVDpuZXcgdC5fQ29kZSgiPCIpLExURTpuZXcgdC5fQ29kZSgiPD0iKSxFUTpuZXcgdC5fQ29kZSgiPT09IiksTkVROm5ldyB0Ll9Db2RlKCIhPT0iKSxOT1Q6bmV3IHQuX0NvZGUoIiEiKSxPUjpuZXcgdC5fQ29kZSgifHwiKSxBTkQ6bmV3IHQuX0NvZGUoIiYmIiksQUREOm5ldyB0Ll9Db2RlKCIrIil9O2NsYXNzIGF7b3B0aW1pemVOb2Rlcygpe3JldHVybiB0aGlzfW9wdGltaXplTmFtZXMoYyxtKXtyZXR1cm4gdGhpc319Y2xhc3MgbyBleHRlbmRzIGF7Y29uc3RydWN0b3IoYyxtLFApe3N1cGVyKCksdGhpcy52YXJLaW5kPWMsdGhpcy5uYW1lPW0sdGhpcy5yaHM9UH1yZW5kZXIoe2VzNTpjLF9uOm19KXtjb25zdCBQPWM/ci52YXJLaW5kcy52YXI6dGhpcy52YXJLaW5kLFU9dGhpcy5yaHM9PT12b2lkIDA/IiI6YCA9ICR7dGhpcy5yaHN9YDtyZXR1cm5gJHtQfSAke3RoaXMubmFtZX0ke1V9O2ArbX1vcHRpbWl6ZU5hbWVzKGMsbSl7aWYoISFjW3RoaXMubmFtZS5zdHJdKXJldHVybiB0aGlzLnJocyYmKHRoaXMucmhzPVgodGhpcy5yaHMsYyxtKSksdGhpc31nZXQgbmFtZXMoKXtyZXR1cm4gdGhpcy5yaHMgaW5zdGFuY2VvZiB0Ll9Db2RlT3JOYW1lP3RoaXMucmhzLm5hbWVzOnt9fX1jbGFzcyBsIGV4dGVuZHMgYXtjb25zdHJ1Y3RvcihjLG0sUCl7c3VwZXIoKSx0aGlzLmxocz1jLHRoaXMucmhzPW0sdGhpcy5zaWRlRWZmZWN0cz1QfXJlbmRlcih7X246Y30pe3JldHVybmAke3RoaXMubGhzfSA9ICR7dGhpcy5yaHN9O2ArY31vcHRpbWl6ZU5hbWVzKGMsbSl7aWYoISh0aGlzLmxocyBpbnN0YW5jZW9mIHQuTmFtZSYmIWNbdGhpcy5saHMuc3RyXSYmIXRoaXMuc2lkZUVmZmVjdHMpKXJldHVybiB0aGlzLnJocz1YKHRoaXMucmhzLGMsbSksdGhpc31nZXQgbmFtZXMoKXtjb25zdCBjPXRoaXMubGhzIGluc3RhbmNlb2YgdC5OYW1lP3t9OlEoe30sdGhpcy5saHMubmFtZXMpO3JldHVybiBvZShjLHRoaXMucmhzKX19Y2xhc3MgZiBleHRlbmRzIGx7Y29uc3RydWN0b3IoYyxtLFAsVSl7c3VwZXIoYyxQLFUpLHRoaXMub3A9bX1yZW5kZXIoe19uOmN9KXtyZXR1cm5gJHt0aGlzLmxoc30gJHt0aGlzLm9wfT0gJHt0aGlzLnJoc307YCtjfX1jbGFzcyBwIGV4dGVuZHMgYXtjb25zdHJ1Y3RvcihjKXtzdXBlcigpLHRoaXMubGFiZWw9Yyx0aGlzLm5hbWVzPXt9fXJlbmRlcih7X246Y30pe3JldHVybmAke3RoaXMubGFiZWx9OmArY319Y2xhc3MgaSBleHRlbmRzIGF7Y29uc3RydWN0b3IoYyl7c3VwZXIoKSx0aGlzLmxhYmVsPWMsdGhpcy5uYW1lcz17fX1yZW5kZXIoe19uOmN9KXtyZXR1cm5gYnJlYWske3RoaXMubGFiZWw/YCAke3RoaXMubGFiZWx9YDoiIn07YCtjfX1jbGFzcyBoIGV4dGVuZHMgYXtjb25zdHJ1Y3RvcihjKXtzdXBlcigpLHRoaXMuZXJyb3I9Y31yZW5kZXIoe19uOmN9KXtyZXR1cm5gdGhyb3cgJHt0aGlzLmVycm9yfTtgK2N9Z2V0IG5hbWVzKCl7cmV0dXJuIHRoaXMuZXJyb3IubmFtZXN9fWNsYXNzIEUgZXh0ZW5kcyBhe2NvbnN0cnVjdG9yKGMpe3N1cGVyKCksdGhpcy5jb2RlPWN9cmVuZGVyKHtfbjpjfSl7cmV0dXJuYCR7dGhpcy5jb2RlfTtgK2N9b3B0aW1pemVOb2Rlcygpe3JldHVybmAke3RoaXMuY29kZX1gP3RoaXM6dm9pZCAwfW9wdGltaXplTmFtZXMoYyxtKXtyZXR1cm4gdGhpcy5jb2RlPVgodGhpcy5jb2RlLGMsbSksdGhpc31nZXQgbmFtZXMoKXtyZXR1cm4gdGhpcy5jb2RlIGluc3RhbmNlb2YgdC5fQ29kZU9yTmFtZT90aGlzLmNvZGUubmFtZXM6e319fWNsYXNzIFQgZXh0ZW5kcyBhe2NvbnN0cnVjdG9yKGM9W10pe3N1cGVyKCksdGhpcy5ub2Rlcz1jfXJlbmRlcihjKXtyZXR1cm4gdGhpcy5ub2Rlcy5yZWR1Y2UoKG0sUCk9Pm0rUC5yZW5kZXIoYyksIiIpfW9wdGltaXplTm9kZXMoKXtjb25zdHtub2RlczpjfT10aGlzO2xldCBtPWMubGVuZ3RoO2Zvcig7bS0tOyl7Y29uc3QgUD1jW21dLm9wdGltaXplTm9kZXMoKTtBcnJheS5pc0FycmF5KFApP2Muc3BsaWNlKG0sMSwuLi5QKTpQP2NbbV09UDpjLnNwbGljZShtLDEpfXJldHVybiBjLmxlbmd0aD4wP3RoaXM6dm9pZCAwfW9wdGltaXplTmFtZXMoYyxtKXtjb25zdHtub2RlczpQfT10aGlzO2xldCBVPVAubGVuZ3RoO2Zvcig7VS0tOyl7Y29uc3QgRj1QW1VdO0Yub3B0aW1pemVOYW1lcyhjLG0pfHwodmUoYyxGLm5hbWVzKSxQLnNwbGljZShVLDEpKX1yZXR1cm4gUC5sZW5ndGg+MD90aGlzOnZvaWQgMH1nZXQgbmFtZXMoKXtyZXR1cm4gdGhpcy5ub2Rlcy5yZWR1Y2UoKGMsbSk9PlcoYyxtLm5hbWVzKSx7fSl9fWNsYXNzIEkgZXh0ZW5kcyBUe3JlbmRlcihjKXtyZXR1cm4ieyIrYy5fbitzdXBlci5yZW5kZXIoYykrIn0iK2MuX259fWNsYXNzIGogZXh0ZW5kcyBUe31jbGFzcyB5IGV4dGVuZHMgSXt9eS5raW5kPSJlbHNlIjtjbGFzcyBfIGV4dGVuZHMgSXtjb25zdHJ1Y3RvcihjLG0pe3N1cGVyKG0pLHRoaXMuY29uZGl0aW9uPWN9cmVuZGVyKGMpe2xldCBtPWBpZigke3RoaXMuY29uZGl0aW9ufSlgK3N1cGVyLnJlbmRlcihjKTtyZXR1cm4gdGhpcy5lbHNlJiYobSs9ImVsc2UgIit0aGlzLmVsc2UucmVuZGVyKGMpKSxtfW9wdGltaXplTm9kZXMoKXtzdXBlci5vcHRpbWl6ZU5vZGVzKCk7Y29uc3QgYz10aGlzLmNvbmRpdGlvbjtpZihjPT09ITApcmV0dXJuIHRoaXMubm9kZXM7bGV0IG09dGhpcy5lbHNlO2lmKG0pe2NvbnN0IFA9bS5vcHRpbWl6ZU5vZGVzKCk7bT10aGlzLmVsc2U9QXJyYXkuaXNBcnJheShQKT9uZXcgeShQKTpQfWlmKG0pcmV0dXJuIGM9PT0hMT9tIGluc3RhbmNlb2YgXz9tOm0ubm9kZXM6dGhpcy5ub2Rlcy5sZW5ndGg/dGhpczpuZXcgXyhFZShjKSxtIGluc3RhbmNlb2YgXz9bbV06bS5ub2Rlcyk7aWYoIShjPT09ITF8fCF0aGlzLm5vZGVzLmxlbmd0aCkpcmV0dXJuIHRoaXN9b3B0aW1pemVOYW1lcyhjLG0pe3ZhciBQO2lmKHRoaXMuZWxzZT0oUD10aGlzLmVsc2UpPT09bnVsbHx8UD09PXZvaWQgMD92b2lkIDA6UC5vcHRpbWl6ZU5hbWVzKGMsbSksISEoc3VwZXIub3B0aW1pemVOYW1lcyhjLG0pfHx0aGlzLmVsc2UpKXJldHVybiB0aGlzLmNvbmRpdGlvbj1YKHRoaXMuY29uZGl0aW9uLGMsbSksdGhpc31nZXQgbmFtZXMoKXtjb25zdCBjPXN1cGVyLm5hbWVzO3JldHVybiBvZShjLHRoaXMuY29uZGl0aW9uKSx0aGlzLmVsc2UmJlcoYyx0aGlzLmVsc2UubmFtZXMpLGN9fV8ua2luZD0iaWYiO2NsYXNzIGIgZXh0ZW5kcyBJe31iLmtpbmQ9ImZvciI7Y2xhc3MgTyBleHRlbmRzIGJ7Y29uc3RydWN0b3IoYyl7c3VwZXIoKSx0aGlzLml0ZXJhdGlvbj1jfXJlbmRlcihjKXtyZXR1cm5gZm9yKCR7dGhpcy5pdGVyYXRpb259KWArc3VwZXIucmVuZGVyKGMpfW9wdGltaXplTmFtZXMoYyxtKXtpZighIXN1cGVyLm9wdGltaXplTmFtZXMoYyxtKSlyZXR1cm4gdGhpcy5pdGVyYXRpb249WCh0aGlzLml0ZXJhdGlvbixjLG0pLHRoaXN9Z2V0IG5hbWVzKCl7cmV0dXJuIFcoc3VwZXIubmFtZXMsdGhpcy5pdGVyYXRpb24ubmFtZXMpfX1jbGFzcyBBIGV4dGVuZHMgYntjb25zdHJ1Y3RvcihjLG0sUCxVKXtzdXBlcigpLHRoaXMudmFyS2luZD1jLHRoaXMubmFtZT1tLHRoaXMuZnJvbT1QLHRoaXMudG89VX1yZW5kZXIoYyl7Y29uc3QgbT1jLmVzNT9yLnZhcktpbmRzLnZhcjp0aGlzLnZhcktpbmQse25hbWU6UCxmcm9tOlUsdG86Rn09dGhpcztyZXR1cm5gZm9yKCR7bX0gJHtQfT0ke1V9OyAke1B9PCR7Rn07ICR7UH0rKylgK3N1cGVyLnJlbmRlcihjKX1nZXQgbmFtZXMoKXtjb25zdCBjPW9lKHN1cGVyLm5hbWVzLHRoaXMuZnJvbSk7cmV0dXJuIG9lKGMsdGhpcy50byl9fWNsYXNzIEggZXh0ZW5kcyBie2NvbnN0cnVjdG9yKGMsbSxQLFUpe3N1cGVyKCksdGhpcy5sb29wPWMsdGhpcy52YXJLaW5kPW0sdGhpcy5uYW1lPVAsdGhpcy5pdGVyYWJsZT1VfXJlbmRlcihjKXtyZXR1cm5gZm9yKCR7dGhpcy52YXJLaW5kfSAke3RoaXMubmFtZX0gJHt0aGlzLmxvb3B9ICR7dGhpcy5pdGVyYWJsZX0pYCtzdXBlci5yZW5kZXIoYyl9b3B0aW1pemVOYW1lcyhjLG0pe2lmKCEhc3VwZXIub3B0aW1pemVOYW1lcyhjLG0pKXJldHVybiB0aGlzLml0ZXJhYmxlPVgodGhpcy5pdGVyYWJsZSxjLG0pLHRoaXN9Z2V0IG5hbWVzKCl7cmV0dXJuIFcoc3VwZXIubmFtZXMsdGhpcy5pdGVyYWJsZS5uYW1lcyl9fWNsYXNzICQgZXh0ZW5kcyBJe2NvbnN0cnVjdG9yKGMsbSxQKXtzdXBlcigpLHRoaXMubmFtZT1jLHRoaXMuYXJncz1tLHRoaXMuYXN5bmM9UH1yZW5kZXIoYyl7cmV0dXJuYCR7dGhpcy5hc3luYz8iYXN5bmMgIjoiIn1mdW5jdGlvbiAke3RoaXMubmFtZX0oJHt0aGlzLmFyZ3N9KWArc3VwZXIucmVuZGVyKGMpfX0kLmtpbmQ9ImZ1bmMiO2NsYXNzIE4gZXh0ZW5kcyBUe3JlbmRlcihjKXtyZXR1cm4icmV0dXJuICIrc3VwZXIucmVuZGVyKGMpfX1OLmtpbmQ9InJldHVybiI7Y2xhc3MgRCBleHRlbmRzIEl7cmVuZGVyKGMpe2xldCBtPSJ0cnkiK3N1cGVyLnJlbmRlcihjKTtyZXR1cm4gdGhpcy5jYXRjaCYmKG0rPXRoaXMuY2F0Y2gucmVuZGVyKGMpKSx0aGlzLmZpbmFsbHkmJihtKz10aGlzLmZpbmFsbHkucmVuZGVyKGMpKSxtfW9wdGltaXplTm9kZXMoKXt2YXIgYyxtO3JldHVybiBzdXBlci5vcHRpbWl6ZU5vZGVzKCksKGM9dGhpcy5jYXRjaCk9PT1udWxsfHxjPT09dm9pZCAwfHxjLm9wdGltaXplTm9kZXMoKSwobT10aGlzLmZpbmFsbHkpPT09bnVsbHx8bT09PXZvaWQgMHx8bS5vcHRpbWl6ZU5vZGVzKCksdGhpc31vcHRpbWl6ZU5hbWVzKGMsbSl7dmFyIFAsVTtyZXR1cm4gc3VwZXIub3B0aW1pemVOYW1lcyhjLG0pLChQPXRoaXMuY2F0Y2gpPT09bnVsbHx8UD09PXZvaWQgMHx8UC5vcHRpbWl6ZU5hbWVzKGMsbSksKFU9dGhpcy5maW5hbGx5KT09PW51bGx8fFU9PT12b2lkIDB8fFUub3B0aW1pemVOYW1lcyhjLG0pLHRoaXN9Z2V0IG5hbWVzKCl7Y29uc3QgYz1zdXBlci5uYW1lcztyZXR1cm4gdGhpcy5jYXRjaCYmVyhjLHRoaXMuY2F0Y2gubmFtZXMpLHRoaXMuZmluYWxseSYmVyhjLHRoaXMuZmluYWxseS5uYW1lcyksY319Y2xhc3MgQiBleHRlbmRzIEl7Y29uc3RydWN0b3IoYyl7c3VwZXIoKSx0aGlzLmVycm9yPWN9cmVuZGVyKGMpe3JldHVybmBjYXRjaCgke3RoaXMuZXJyb3J9KWArc3VwZXIucmVuZGVyKGMpfX1CLmtpbmQ9ImNhdGNoIjtjbGFzcyBHIGV4dGVuZHMgSXtyZW5kZXIoYyl7cmV0dXJuImZpbmFsbHkiK3N1cGVyLnJlbmRlcihjKX19Ry5raW5kPSJmaW5hbGx5IjtjbGFzcyBwZXtjb25zdHJ1Y3RvcihjLG09e30pe3RoaXMuX3ZhbHVlcz17fSx0aGlzLl9ibG9ja1N0YXJ0cz1bXSx0aGlzLl9jb25zdGFudHM9e30sdGhpcy5vcHRzPWxlKFEoe30sbSkse19uOm0ubGluZXM/YApgOiIifSksdGhpcy5fZXh0U2NvcGU9Yyx0aGlzLl9zY29wZT1uZXcgci5TY29wZSh7cGFyZW50OmN9KSx0aGlzLl9ub2Rlcz1bbmV3IGpdfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jvb3QucmVuZGVyKHRoaXMub3B0cyl9bmFtZShjKXtyZXR1cm4gdGhpcy5fc2NvcGUubmFtZShjKX1zY29wZU5hbWUoYyl7cmV0dXJuIHRoaXMuX2V4dFNjb3BlLm5hbWUoYyl9c2NvcGVWYWx1ZShjLG0pe2NvbnN0IFA9dGhpcy5fZXh0U2NvcGUudmFsdWUoYyxtKTtyZXR1cm4odGhpcy5fdmFsdWVzW1AucHJlZml4XXx8KHRoaXMuX3ZhbHVlc1tQLnByZWZpeF09bmV3IFNldCkpLmFkZChQKSxQfWdldFNjb3BlVmFsdWUoYyxtKXtyZXR1cm4gdGhpcy5fZXh0U2NvcGUuZ2V0VmFsdWUoYyxtKX1zY29wZVJlZnMoYyl7cmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlUmVmcyhjLHRoaXMuX3ZhbHVlcyl9c2NvcGVDb2RlKCl7cmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlQ29kZSh0aGlzLl92YWx1ZXMpfV9kZWYoYyxtLFAsVSl7Y29uc3QgRj10aGlzLl9zY29wZS50b05hbWUobSk7cmV0dXJuIFAhPT12b2lkIDAmJlUmJih0aGlzLl9jb25zdGFudHNbRi5zdHJdPVApLHRoaXMuX2xlYWZOb2RlKG5ldyBvKGMsRixQKSksRn1jb25zdChjLG0sUCl7cmV0dXJuIHRoaXMuX2RlZihyLnZhcktpbmRzLmNvbnN0LGMsbSxQKX1sZXQoYyxtLFApe3JldHVybiB0aGlzLl9kZWYoci52YXJLaW5kcy5sZXQsYyxtLFApfXZhcihjLG0sUCl7cmV0dXJuIHRoaXMuX2RlZihyLnZhcktpbmRzLnZhcixjLG0sUCl9YXNzaWduKGMsbSxQKXtyZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IGwoYyxtLFApKX1hZGQoYyxtKXtyZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IGYoYyxlLm9wZXJhdG9ycy5BREQsbSkpfWNvZGUoYyl7cmV0dXJuIHR5cGVvZiBjPT0iZnVuY3Rpb24iP2MoKTpjIT09dC5uaWwmJnRoaXMuX2xlYWZOb2RlKG5ldyBFKGMpKSx0aGlzfW9iamVjdCguLi5jKXtjb25zdCBtPVsieyJdO2Zvcihjb25zdFtQLFVdb2YgYyltLmxlbmd0aD4xJiZtLnB1c2goIiwiKSxtLnB1c2goUCksKFAhPT1VfHx0aGlzLm9wdHMuZXM1KSYmKG0ucHVzaCgiOiIpLCgwLHQuYWRkQ29kZUFyZykobSxVKSk7cmV0dXJuIG0ucHVzaCgifSIpLG5ldyB0Ll9Db2RlKG0pfWlmKGMsbSxQKXtpZih0aGlzLl9ibG9ja05vZGUobmV3IF8oYykpLG0mJlApdGhpcy5jb2RlKG0pLmVsc2UoKS5jb2RlKFApLmVuZElmKCk7ZWxzZSBpZihtKXRoaXMuY29kZShtKS5lbmRJZigpO2Vsc2UgaWYoUCl0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46ICJlbHNlIiBib2R5IHdpdGhvdXQgInRoZW4iIGJvZHknKTtyZXR1cm4gdGhpc31lbHNlSWYoYyl7cmV0dXJuIHRoaXMuX2Vsc2VOb2RlKG5ldyBfKGMpKX1lbHNlKCl7cmV0dXJuIHRoaXMuX2Vsc2VOb2RlKG5ldyB5KX1lbmRJZigpe3JldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoXyx5KX1fZm9yKGMsbSl7cmV0dXJuIHRoaXMuX2Jsb2NrTm9kZShjKSxtJiZ0aGlzLmNvZGUobSkuZW5kRm9yKCksdGhpc31mb3IoYyxtKXtyZXR1cm4gdGhpcy5fZm9yKG5ldyBPKGMpLG0pfWZvclJhbmdlKGMsbSxQLFUsRj10aGlzLm9wdHMuZXM1P3IudmFyS2luZHMudmFyOnIudmFyS2luZHMubGV0KXtjb25zdCBaPXRoaXMuX3Njb3BlLnRvTmFtZShjKTtyZXR1cm4gdGhpcy5fZm9yKG5ldyBBKEYsWixtLFApLCgpPT5VKFopKX1mb3JPZihjLG0sUCxVPXIudmFyS2luZHMuY29uc3Qpe2NvbnN0IEY9dGhpcy5fc2NvcGUudG9OYW1lKGMpO2lmKHRoaXMub3B0cy5lczUpe2NvbnN0IFo9bSBpbnN0YW5jZW9mIHQuTmFtZT9tOnRoaXMudmFyKCJfYXJyIixtKTtyZXR1cm4gdGhpcy5mb3JSYW5nZSgiX2kiLDAsKDAsdC5fKWAke1p9Lmxlbmd0aGAscmU9Pnt0aGlzLnZhcihGLCgwLHQuXylgJHtafVske3JlfV1gKSxQKEYpfSl9cmV0dXJuIHRoaXMuX2ZvcihuZXcgSCgib2YiLFUsRixtKSwoKT0+UChGKSl9Zm9ySW4oYyxtLFAsVT10aGlzLm9wdHMuZXM1P3IudmFyS2luZHMudmFyOnIudmFyS2luZHMuY29uc3Qpe2lmKHRoaXMub3B0cy5vd25Qcm9wZXJ0aWVzKXJldHVybiB0aGlzLmZvck9mKGMsKDAsdC5fKWBPYmplY3Qua2V5cygke219KWAsUCk7Y29uc3QgRj10aGlzLl9zY29wZS50b05hbWUoYyk7cmV0dXJuIHRoaXMuX2ZvcihuZXcgSCgiaW4iLFUsRixtKSwoKT0+UChGKSl9ZW5kRm9yKCl7cmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShiKX1sYWJlbChjKXtyZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IHAoYykpfWJyZWFrKGMpe3JldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgaShjKSl9cmV0dXJuKGMpe2NvbnN0IG09bmV3IE47aWYodGhpcy5fYmxvY2tOb2RlKG0pLHRoaXMuY29kZShjKSxtLm5vZGVzLmxlbmd0aCE9PTEpdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiAicmV0dXJuIiBzaG91bGQgaGF2ZSBvbmUgbm9kZScpO3JldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoTil9dHJ5KGMsbSxQKXtpZighbSYmIVApdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiAidHJ5IiB3aXRob3V0ICJjYXRjaCIgYW5kICJmaW5hbGx5IicpO2NvbnN0IFU9bmV3IEQ7aWYodGhpcy5fYmxvY2tOb2RlKFUpLHRoaXMuY29kZShjKSxtKXtjb25zdCBGPXRoaXMubmFtZSgiZSIpO3RoaXMuX2N1cnJOb2RlPVUuY2F0Y2g9bmV3IEIoRiksbShGKX1yZXR1cm4gUCYmKHRoaXMuX2N1cnJOb2RlPVUuZmluYWxseT1uZXcgRyx0aGlzLmNvZGUoUCkpLHRoaXMuX2VuZEJsb2NrTm9kZShCLEcpfXRocm93KGMpe3JldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgaChjKSl9YmxvY2soYyxtKXtyZXR1cm4gdGhpcy5fYmxvY2tTdGFydHMucHVzaCh0aGlzLl9ub2Rlcy5sZW5ndGgpLGMmJnRoaXMuY29kZShjKS5lbmRCbG9jayhtKSx0aGlzfWVuZEJsb2NrKGMpe2NvbnN0IG09dGhpcy5fYmxvY2tTdGFydHMucG9wKCk7aWYobT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNvZGVHZW46IG5vdCBpbiBzZWxmLWJhbGFuY2luZyBibG9jayIpO2NvbnN0IFA9dGhpcy5fbm9kZXMubGVuZ3RoLW07aWYoUDwwfHxjIT09dm9pZCAwJiZQIT09Yyl0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IHdyb25nIG51bWJlciBvZiBub2RlczogJHtQfSB2cyAke2N9IGV4cGVjdGVkYCk7cmV0dXJuIHRoaXMuX25vZGVzLmxlbmd0aD1tLHRoaXN9ZnVuYyhjLG09dC5uaWwsUCxVKXtyZXR1cm4gdGhpcy5fYmxvY2tOb2RlKG5ldyAkKGMsbSxQKSksVSYmdGhpcy5jb2RlKFUpLmVuZEZ1bmMoKSx0aGlzfWVuZEZ1bmMoKXtyZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKCQpfW9wdGltaXplKGM9MSl7Zm9yKDtjLS0gPjA7KXRoaXMuX3Jvb3Qub3B0aW1pemVOb2RlcygpLHRoaXMuX3Jvb3Qub3B0aW1pemVOYW1lcyh0aGlzLl9yb290Lm5hbWVzLHRoaXMuX2NvbnN0YW50cyl9X2xlYWZOb2RlKGMpe3JldHVybiB0aGlzLl9jdXJyTm9kZS5ub2Rlcy5wdXNoKGMpLHRoaXN9X2Jsb2NrTm9kZShjKXt0aGlzLl9jdXJyTm9kZS5ub2Rlcy5wdXNoKGMpLHRoaXMuX25vZGVzLnB1c2goYyl9X2VuZEJsb2NrTm9kZShjLG0pe2NvbnN0IFA9dGhpcy5fY3Vyck5vZGU7aWYoUCBpbnN0YW5jZW9mIGN8fG0mJlAgaW5zdGFuY2VvZiBtKXJldHVybiB0aGlzLl9ub2Rlcy5wb3AoKSx0aGlzO3Rocm93IG5ldyBFcnJvcihgQ29kZUdlbjogbm90IGluIGJsb2NrICIke20/YCR7Yy5raW5kfS8ke20ua2luZH1gOmMua2luZH0iYCl9X2Vsc2VOb2RlKGMpe2NvbnN0IG09dGhpcy5fY3Vyck5vZGU7aWYoIShtIGluc3RhbmNlb2YgXykpdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiAiZWxzZSIgd2l0aG91dCAiaWYiJyk7cmV0dXJuIHRoaXMuX2N1cnJOb2RlPW0uZWxzZT1jLHRoaXN9Z2V0IF9yb290KCl7cmV0dXJuIHRoaXMuX25vZGVzWzBdfWdldCBfY3Vyck5vZGUoKXtjb25zdCBjPXRoaXMuX25vZGVzO3JldHVybiBjW2MubGVuZ3RoLTFdfXNldCBfY3Vyck5vZGUoYyl7Y29uc3QgbT10aGlzLl9ub2RlczttW20ubGVuZ3RoLTFdPWN9fWUuQ29kZUdlbj1wZTtmdW5jdGlvbiBXKHcsYyl7Zm9yKGNvbnN0IG0gaW4gYyl3W21dPSh3W21dfHwwKSsoY1ttXXx8MCk7cmV0dXJuIHd9ZnVuY3Rpb24gb2UodyxjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIHQuX0NvZGVPck5hbWU/Vyh3LGMubmFtZXMpOnd9ZnVuY3Rpb24gWCh3LGMsbSl7aWYodyBpbnN0YW5jZW9mIHQuTmFtZSlyZXR1cm4gUCh3KTtpZighVSh3KSlyZXR1cm4gdztyZXR1cm4gbmV3IHQuX0NvZGUody5faXRlbXMucmVkdWNlKChGLFopPT4oWiBpbnN0YW5jZW9mIHQuTmFtZSYmKFo9UChaKSksWiBpbnN0YW5jZW9mIHQuX0NvZGU/Ri5wdXNoKC4uLlouX2l0ZW1zKTpGLnB1c2goWiksRiksW10pKTtmdW5jdGlvbiBQKEYpe2NvbnN0IFo9bVtGLnN0cl07cmV0dXJuIFo9PT12b2lkIDB8fGNbRi5zdHJdIT09MT9GOihkZWxldGUgY1tGLnN0cl0sWil9ZnVuY3Rpb24gVShGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIHQuX0NvZGUmJkYuX2l0ZW1zLnNvbWUoWj0+WiBpbnN0YW5jZW9mIHQuTmFtZSYmY1taLnN0cl09PT0xJiZtW1ouc3RyXSE9PXZvaWQgMCl9fWZ1bmN0aW9uIHZlKHcsYyl7Zm9yKGNvbnN0IG0gaW4gYyl3W21dPSh3W21dfHwwKS0oY1ttXXx8MCl9ZnVuY3Rpb24gRWUodyl7cmV0dXJuIHR5cGVvZiB3PT0iYm9vbGVhbiJ8fHR5cGVvZiB3PT0ibnVtYmVyInx8dz09PW51bGw/IXc6KDAsdC5fKWAhJHtDKHcpfWB9ZS5ub3Q9RWU7Y29uc3QgTmU9ZyhlLm9wZXJhdG9ycy5BTkQpO2Z1bmN0aW9uIEJlKC4uLncpe3JldHVybiB3LnJlZHVjZShOZSl9ZS5hbmQ9QmU7Y29uc3QgdXI9ZyhlLm9wZXJhdG9ycy5PUik7ZnVuY3Rpb24gayguLi53KXtyZXR1cm4gdy5yZWR1Y2UodXIpfWUub3I9aztmdW5jdGlvbiBnKHcpe3JldHVybihjLG0pPT5jPT09dC5uaWw/bTptPT09dC5uaWw/YzooMCx0Ll8pYCR7QyhjKX0gJHt3fSAke0MobSl9YH1mdW5jdGlvbiBDKHcpe3JldHVybiB3IGluc3RhbmNlb2YgdC5OYW1lP3c6KDAsdC5fKWAoJHt3fSlgfX0odWUpO3ZhciBiZT17fTsoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuY2hlY2tTdHJpY3RNb2RlPWUuZ2V0RXJyb3JQYXRoPWUuVHlwZT1lLnVzZUZ1bmM9ZS5zZXRFdmFsdWF0ZWQ9ZS5ldmFsdWF0ZWRQcm9wc1RvTmFtZT1lLm1lcmdlRXZhbHVhdGVkPWUuZWFjaEl0ZW09ZS51bmVzY2FwZUpzb25Qb2ludGVyPWUuZXNjYXBlSnNvblBvaW50ZXI9ZS5lc2NhcGVGcmFnbWVudD1lLnVuZXNjYXBlRnJhZ21lbnQ9ZS5zY2hlbWFSZWZPclZhbD1lLnNjaGVtYUhhc1J1bGVzQnV0UmVmPWUuc2NoZW1hSGFzUnVsZXM9ZS5jaGVja1Vua25vd25SdWxlcz1lLmFsd2F5c1ZhbGlkU2NoZW1hPWUudG9IYXNoPXZvaWQgMDtjb25zdCB0PXVlLHI9eXI7ZnVuY3Rpb24gbigkKXtjb25zdCBOPXt9O2Zvcihjb25zdCBEIG9mICQpTltEXT0hMDtyZXR1cm4gTn1lLnRvSGFzaD1uO2Z1bmN0aW9uIHMoJCxOKXtyZXR1cm4gdHlwZW9mIE49PSJib29sZWFuIj9OOk9iamVjdC5rZXlzKE4pLmxlbmd0aD09PTA/ITA6KGEoJCxOKSwhbyhOLCQuc2VsZi5SVUxFUy5hbGwpKX1lLmFsd2F5c1ZhbGlkU2NoZW1hPXM7ZnVuY3Rpb24gYSgkLE49JC5zY2hlbWEpe2NvbnN0e29wdHM6RCxzZWxmOkJ9PSQ7aWYoIUQuc3RyaWN0U2NoZW1hfHx0eXBlb2YgTj09ImJvb2xlYW4iKXJldHVybjtjb25zdCBHPUIuUlVMRVMua2V5d29yZHM7Zm9yKGNvbnN0IHBlIGluIE4pR1twZV18fEgoJCxgdW5rbm93biBrZXl3b3JkOiAiJHtwZX0iYCl9ZS5jaGVja1Vua25vd25SdWxlcz1hO2Z1bmN0aW9uIG8oJCxOKXtpZih0eXBlb2YgJD09ImJvb2xlYW4iKXJldHVybiEkO2Zvcihjb25zdCBEIGluICQpaWYoTltEXSlyZXR1cm4hMDtyZXR1cm4hMX1lLnNjaGVtYUhhc1J1bGVzPW87ZnVuY3Rpb24gbCgkLE4pe2lmKHR5cGVvZiAkPT0iYm9vbGVhbiIpcmV0dXJuISQ7Zm9yKGNvbnN0IEQgaW4gJClpZihEIT09IiRyZWYiJiZOLmFsbFtEXSlyZXR1cm4hMDtyZXR1cm4hMX1lLnNjaGVtYUhhc1J1bGVzQnV0UmVmPWw7ZnVuY3Rpb24gZih7dG9wU2NoZW1hUmVmOiQsc2NoZW1hUGF0aDpOfSxELEIsRyl7aWYoIUcpe2lmKHR5cGVvZiBEPT0ibnVtYmVyInx8dHlwZW9mIEQ9PSJib29sZWFuIilyZXR1cm4gRDtpZih0eXBlb2YgRD09InN0cmluZyIpcmV0dXJuKDAsdC5fKWAke0R9YH1yZXR1cm4oMCx0Ll8pYCR7JH0ke059JHsoMCx0LmdldFByb3BlcnR5KShCKX1gfWUuc2NoZW1hUmVmT3JWYWw9ZjtmdW5jdGlvbiBwKCQpe3JldHVybiBFKGRlY29kZVVSSUNvbXBvbmVudCgkKSl9ZS51bmVzY2FwZUZyYWdtZW50PXA7ZnVuY3Rpb24gaSgkKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGgoJCkpfWUuZXNjYXBlRnJhZ21lbnQ9aTtmdW5jdGlvbiBoKCQpe3JldHVybiB0eXBlb2YgJD09Im51bWJlciI/YCR7JH1gOiQucmVwbGFjZSgvfi9nLCJ+MCIpLnJlcGxhY2UoL1wvL2csIn4xIil9ZS5lc2NhcGVKc29uUG9pbnRlcj1oO2Z1bmN0aW9uIEUoJCl7cmV0dXJuICQucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1lLnVuZXNjYXBlSnNvblBvaW50ZXI9RTtmdW5jdGlvbiBUKCQsTil7aWYoQXJyYXkuaXNBcnJheSgkKSlmb3IoY29uc3QgRCBvZiAkKU4oRCk7ZWxzZSBOKCQpfWUuZWFjaEl0ZW09VDtmdW5jdGlvbiBJKHttZXJnZU5hbWVzOiQsbWVyZ2VUb05hbWU6TixtZXJnZVZhbHVlczpELHJlc3VsdFRvTmFtZTpCfSl7cmV0dXJuKEcscGUsVyxvZSk9Pntjb25zdCBYPVc9PT12b2lkIDA/cGU6VyBpbnN0YW5jZW9mIHQuTmFtZT8ocGUgaW5zdGFuY2VvZiB0Lk5hbWU/JChHLHBlLFcpOk4oRyxwZSxXKSxXKTpwZSBpbnN0YW5jZW9mIHQuTmFtZT8oTihHLFcscGUpLHBlKTpEKHBlLFcpO3JldHVybiBvZT09PXQuTmFtZSYmIShYIGluc3RhbmNlb2YgdC5OYW1lKT9CKEcsWCk6WH19ZS5tZXJnZUV2YWx1YXRlZD17cHJvcHM6SSh7bWVyZ2VOYW1lczooJCxOLEQpPT4kLmlmKCgwLHQuXylgJHtEfSAhPT0gdHJ1ZSAmJiAke059ICE9PSB1bmRlZmluZWRgLCgpPT57JC5pZigoMCx0Ll8pYCR7Tn0gPT09IHRydWVgLCgpPT4kLmFzc2lnbihELCEwKSwoKT0+JC5hc3NpZ24oRCwoMCx0Ll8pYCR7RH0gfHwge31gKS5jb2RlKCgwLHQuXylgT2JqZWN0LmFzc2lnbigke0R9LCAke059KWApKX0pLG1lcmdlVG9OYW1lOigkLE4sRCk9PiQuaWYoKDAsdC5fKWAke0R9ICE9PSB0cnVlYCwoKT0+e049PT0hMD8kLmFzc2lnbihELCEwKTooJC5hc3NpZ24oRCwoMCx0Ll8pYCR7RH0gfHwge31gKSx5KCQsRCxOKSl9KSxtZXJnZVZhbHVlczooJCxOKT0+JD09PSEwPyEwOlEoUSh7fSwkKSxOKSxyZXN1bHRUb05hbWU6an0pLGl0ZW1zOkkoe21lcmdlTmFtZXM6KCQsTixEKT0+JC5pZigoMCx0Ll8pYCR7RH0gIT09IHRydWUgJiYgJHtOfSAhPT0gdW5kZWZpbmVkYCwoKT0+JC5hc3NpZ24oRCwoMCx0Ll8pYCR7Tn0gPT09IHRydWUgPyB0cnVlIDogJHtEfSA+ICR7Tn0gPyAke0R9IDogJHtOfWApKSxtZXJnZVRvTmFtZTooJCxOLEQpPT4kLmlmKCgwLHQuXylgJHtEfSAhPT0gdHJ1ZWAsKCk9PiQuYXNzaWduKEQsTj09PSEwPyEwOigwLHQuXylgJHtEfSA+ICR7Tn0gPyAke0R9IDogJHtOfWApKSxtZXJnZVZhbHVlczooJCxOKT0+JD09PSEwPyEwOk1hdGgubWF4KCQsTikscmVzdWx0VG9OYW1lOigkLE4pPT4kLnZhcigiaXRlbXMiLE4pfSl9O2Z1bmN0aW9uIGooJCxOKXtpZihOPT09ITApcmV0dXJuICQudmFyKCJwcm9wcyIsITApO2NvbnN0IEQ9JC52YXIoInByb3BzIiwoMCx0Ll8pYHt9YCk7cmV0dXJuIE4hPT12b2lkIDAmJnkoJCxELE4pLER9ZS5ldmFsdWF0ZWRQcm9wc1RvTmFtZT1qO2Z1bmN0aW9uIHkoJCxOLEQpe09iamVjdC5rZXlzKEQpLmZvckVhY2goQj0+JC5hc3NpZ24oKDAsdC5fKWAke059JHsoMCx0LmdldFByb3BlcnR5KShCKX1gLCEwKSl9ZS5zZXRFdmFsdWF0ZWQ9eTtjb25zdCBfPXt9O2Z1bmN0aW9uIGIoJCxOKXtyZXR1cm4gJC5zY29wZVZhbHVlKCJmdW5jIix7cmVmOk4sY29kZTpfW04uY29kZV18fChfW04uY29kZV09bmV3IHIuX0NvZGUoTi5jb2RlKSl9KX1lLnVzZUZ1bmM9Yjt2YXIgTzsoZnVuY3Rpb24oJCl7JFskLk51bT0wXT0iTnVtIiwkWyQuU3RyPTFdPSJTdHIifSkoTz1lLlR5cGV8fChlLlR5cGU9e30pKTtmdW5jdGlvbiBBKCQsTixEKXtpZigkIGluc3RhbmNlb2YgdC5OYW1lKXtjb25zdCBCPU49PT1PLk51bTtyZXR1cm4gRD9CPygwLHQuXylgIlsiICsgJHskfSArICJdImA6KDAsdC5fKWAiWyciICsgJHskfSArICInXSJgOkI/KDAsdC5fKWAiLyIgKyAkeyR9YDooMCx0Ll8pYCIvIiArICR7JH0ucmVwbGFjZSgvfi9nLCAifjAiKS5yZXBsYWNlKC9cXC8vZywgIn4xIilgfXJldHVybiBEPygwLHQuZ2V0UHJvcGVydHkpKCQpLnRvU3RyaW5nKCk6Ii8iK2goJCl9ZS5nZXRFcnJvclBhdGg9QTtmdW5jdGlvbiBIKCQsTixEPSQub3B0cy5zdHJpY3RTY2hlbWEpe2lmKCEhRCl7aWYoTj1gc3RyaWN0IG1vZGU6ICR7Tn1gLEQ9PT0hMCl0aHJvdyBuZXcgRXJyb3IoTik7JC5zZWxmLmxvZ2dlci53YXJuKE4pfX1lLmNoZWNrU3RyaWN0TW9kZT1IfSkoYmUpO3ZhciBMZT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IEFlPXVlLHZjPXtkYXRhOm5ldyBBZS5OYW1lKCJkYXRhIiksdmFsQ3h0Om5ldyBBZS5OYW1lKCJ2YWxDeHQiKSxpbnN0YW5jZVBhdGg6bmV3IEFlLk5hbWUoImluc3RhbmNlUGF0aCIpLHBhcmVudERhdGE6bmV3IEFlLk5hbWUoInBhcmVudERhdGEiKSxwYXJlbnREYXRhUHJvcGVydHk6bmV3IEFlLk5hbWUoInBhcmVudERhdGFQcm9wZXJ0eSIpLHJvb3REYXRhOm5ldyBBZS5OYW1lKCJyb290RGF0YSIpLGR5bmFtaWNBbmNob3JzOm5ldyBBZS5OYW1lKCJkeW5hbWljQW5jaG9ycyIpLHZFcnJvcnM6bmV3IEFlLk5hbWUoInZFcnJvcnMiKSxlcnJvcnM6bmV3IEFlLk5hbWUoImVycm9ycyIpLHRoaXM6bmV3IEFlLk5hbWUoInRoaXMiKSxzZWxmOm5ldyBBZS5OYW1lKCJzZWxmIiksc2NvcGU6bmV3IEFlLk5hbWUoInNjb3BlIiksanNvbjpuZXcgQWUuTmFtZSgianNvbiIpLGpzb25Qb3M6bmV3IEFlLk5hbWUoImpzb25Qb3MiKSxqc29uTGVuOm5ldyBBZS5OYW1lKCJqc29uTGVuIiksanNvblBhcnQ6bmV3IEFlLk5hbWUoImpzb25QYXJ0Iil9O0xlLmRlZmF1bHQ9dmMsZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZXh0ZW5kRXJyb3JzPWUucmVzZXRFcnJvcnNDb3VudD1lLnJlcG9ydEV4dHJhRXJyb3I9ZS5yZXBvcnRFcnJvcj1lLmtleXdvcmQkRGF0YUVycm9yPWUua2V5d29yZEVycm9yPXZvaWQgMDtjb25zdCB0PXVlLHI9YmUsbj1MZTtlLmtleXdvcmRFcnJvcj17bWVzc2FnZTooe2tleXdvcmQ6eX0pPT4oMCx0LnN0cilgbXVzdCBwYXNzICIke3l9IiBrZXl3b3JkIHZhbGlkYXRpb25gfSxlLmtleXdvcmQkRGF0YUVycm9yPXttZXNzYWdlOih7a2V5d29yZDp5LHNjaGVtYVR5cGU6X30pPT5fPygwLHQuc3RyKWAiJHt5fSIga2V5d29yZCBtdXN0IGJlICR7X30gKCRkYXRhKWA6KDAsdC5zdHIpYCIke3l9IiBrZXl3b3JkIGlzIGludmFsaWQgKCRkYXRhKWB9O2Z1bmN0aW9uIHMoeSxfPWUua2V5d29yZEVycm9yLGIsTyl7Y29uc3R7aXQ6QX09eSx7Z2VuOkgsY29tcG9zaXRlUnVsZTokLGFsbEVycm9yczpOfT1BLEQ9aCh5LF8sYik7KE8hPW51bGw/TzokfHxOKT9mKEgsRCk6cChBLCgwLHQuXylgWyR7RH1dYCl9ZS5yZXBvcnRFcnJvcj1zO2Z1bmN0aW9uIGEoeSxfPWUua2V5d29yZEVycm9yLGIpe2NvbnN0e2l0Ok99PXkse2dlbjpBLGNvbXBvc2l0ZVJ1bGU6SCxhbGxFcnJvcnM6JH09TyxOPWgoeSxfLGIpO2YoQSxOKSxIfHwkfHxwKE8sbi5kZWZhdWx0LnZFcnJvcnMpfWUucmVwb3J0RXh0cmFFcnJvcj1hO2Z1bmN0aW9uIG8oeSxfKXt5LmFzc2lnbihuLmRlZmF1bHQuZXJyb3JzLF8pLHkuaWYoKDAsdC5fKWAke24uZGVmYXVsdC52RXJyb3JzfSAhPT0gbnVsbGAsKCk9PnkuaWYoXywoKT0+eS5hc3NpZ24oKDAsdC5fKWAke24uZGVmYXVsdC52RXJyb3JzfS5sZW5ndGhgLF8pLCgpPT55LmFzc2lnbihuLmRlZmF1bHQudkVycm9ycyxudWxsKSkpfWUucmVzZXRFcnJvcnNDb3VudD1vO2Z1bmN0aW9uIGwoe2dlbjp5LGtleXdvcmQ6XyxzY2hlbWFWYWx1ZTpiLGRhdGE6TyxlcnJzQ291bnQ6QSxpdDpIfSl7aWYoQT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvciIpO2NvbnN0ICQ9eS5uYW1lKCJlcnIiKTt5LmZvclJhbmdlKCJpIixBLG4uZGVmYXVsdC5lcnJvcnMsTj0+e3kuY29uc3QoJCwoMCx0Ll8pYCR7bi5kZWZhdWx0LnZFcnJvcnN9WyR7Tn1dYCkseS5pZigoMCx0Ll8pYCR7JH0uaW5zdGFuY2VQYXRoID09PSB1bmRlZmluZWRgLCgpPT55LmFzc2lnbigoMCx0Ll8pYCR7JH0uaW5zdGFuY2VQYXRoYCwoMCx0LnN0ckNvbmNhdCkobi5kZWZhdWx0Lmluc3RhbmNlUGF0aCxILmVycm9yUGF0aCkpKSx5LmFzc2lnbigoMCx0Ll8pYCR7JH0uc2NoZW1hUGF0aGAsKDAsdC5zdHIpYCR7SC5lcnJTY2hlbWFQYXRofS8ke199YCksSC5vcHRzLnZlcmJvc2UmJih5LmFzc2lnbigoMCx0Ll8pYCR7JH0uc2NoZW1hYCxiKSx5LmFzc2lnbigoMCx0Ll8pYCR7JH0uZGF0YWAsTykpfSl9ZS5leHRlbmRFcnJvcnM9bDtmdW5jdGlvbiBmKHksXyl7Y29uc3QgYj15LmNvbnN0KCJlcnIiLF8pO3kuaWYoKDAsdC5fKWAke24uZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbGAsKCk9PnkuYXNzaWduKG4uZGVmYXVsdC52RXJyb3JzLCgwLHQuXylgWyR7Yn1dYCksKDAsdC5fKWAke24uZGVmYXVsdC52RXJyb3JzfS5wdXNoKCR7Yn0pYCkseS5jb2RlKCgwLHQuXylgJHtuLmRlZmF1bHQuZXJyb3JzfSsrYCl9ZnVuY3Rpb24gcCh5LF8pe2NvbnN0e2dlbjpiLHZhbGlkYXRlTmFtZTpPLHNjaGVtYUVudjpBfT15O0EuJGFzeW5jP2IudGhyb3coKDAsdC5fKWBuZXcgJHt5LlZhbGlkYXRpb25FcnJvcn0oJHtffSlgKTooYi5hc3NpZ24oKDAsdC5fKWAke099LmVycm9yc2AsXyksYi5yZXR1cm4oITEpKX1jb25zdCBpPXtrZXl3b3JkOm5ldyB0Lk5hbWUoImtleXdvcmQiKSxzY2hlbWFQYXRoOm5ldyB0Lk5hbWUoInNjaGVtYVBhdGgiKSxwYXJhbXM6bmV3IHQuTmFtZSgicGFyYW1zIikscHJvcGVydHlOYW1lOm5ldyB0Lk5hbWUoInByb3BlcnR5TmFtZSIpLG1lc3NhZ2U6bmV3IHQuTmFtZSgibWVzc2FnZSIpLHNjaGVtYTpuZXcgdC5OYW1lKCJzY2hlbWEiKSxwYXJlbnRTY2hlbWE6bmV3IHQuTmFtZSgicGFyZW50U2NoZW1hIil9O2Z1bmN0aW9uIGgoeSxfLGIpe2NvbnN0e2NyZWF0ZUVycm9yczpPfT15Lml0O3JldHVybiBPPT09ITE/KDAsdC5fKWB7fWA6RSh5LF8sYil9ZnVuY3Rpb24gRSh5LF8sYj17fSl7Y29uc3R7Z2VuOk8saXQ6QX09eSxIPVtUKEEsYiksSSh5LGIpXTtyZXR1cm4gaih5LF8sSCksTy5vYmplY3QoLi4uSCl9ZnVuY3Rpb24gVCh7ZXJyb3JQYXRoOnl9LHtpbnN0YW5jZVBhdGg6X30pe2NvbnN0IGI9Xz8oMCx0LnN0cilgJHt5fSR7KDAsci5nZXRFcnJvclBhdGgpKF8sci5UeXBlLlN0cil9YDp5O3JldHVybltuLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCgwLHQuc3RyQ29uY2F0KShuLmRlZmF1bHQuaW5zdGFuY2VQYXRoLGIpXX1mdW5jdGlvbiBJKHtrZXl3b3JkOnksaXQ6e2VyclNjaGVtYVBhdGg6X319LHtzY2hlbWFQYXRoOmIscGFyZW50U2NoZW1hOk99KXtsZXQgQT1PP186KDAsdC5zdHIpYCR7X30vJHt5fWA7cmV0dXJuIGImJihBPSgwLHQuc3RyKWAke0F9JHsoMCxyLmdldEVycm9yUGF0aCkoYixyLlR5cGUuU3RyKX1gKSxbaS5zY2hlbWFQYXRoLEFdfWZ1bmN0aW9uIGooeSx7cGFyYW1zOl8sbWVzc2FnZTpifSxPKXtjb25zdHtrZXl3b3JkOkEsZGF0YTpILHNjaGVtYVZhbHVlOiQsaXQ6Tn09eSx7b3B0czpELHByb3BlcnR5TmFtZTpCLHRvcFNjaGVtYVJlZjpHLHNjaGVtYVBhdGg6cGV9PU47Ty5wdXNoKFtpLmtleXdvcmQsQV0sW2kucGFyYW1zLHR5cGVvZiBfPT0iZnVuY3Rpb24iP18oeSk6X3x8KDAsdC5fKWB7fWBdKSxELm1lc3NhZ2VzJiZPLnB1c2goW2kubWVzc2FnZSx0eXBlb2YgYj09ImZ1bmN0aW9uIj9iKHkpOmJdKSxELnZlcmJvc2UmJk8ucHVzaChbaS5zY2hlbWEsJF0sW2kucGFyZW50U2NoZW1hLCgwLHQuXylgJHtHfSR7cGV9YF0sW24uZGVmYXVsdC5kYXRhLEhdKSxCJiZPLnB1c2goW2kucHJvcGVydHlOYW1lLEJdKX19KEVyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHRyLmJvb2xPckVtcHR5U2NoZW1hPXRyLnRvcEJvb2xPckVtcHR5U2NoZW1hPXZvaWQgMDtjb25zdCBfYz1FcixnYz11ZSxFYz1MZSx5Yz17bWVzc2FnZToiYm9vbGVhbiBzY2hlbWEgaXMgZmFsc2UifTtmdW5jdGlvbiAkYyhlKXtjb25zdHtnZW46dCxzY2hlbWE6cix2YWxpZGF0ZU5hbWU6bn09ZTtyPT09ITE/bmEoZSwhMSk6dHlwZW9mIHI9PSJvYmplY3QiJiZyLiRhc3luYz09PSEwP3QucmV0dXJuKEVjLmRlZmF1bHQuZGF0YSk6KHQuYXNzaWduKCgwLGdjLl8pYCR7bn0uZXJyb3JzYCxudWxsKSx0LnJldHVybighMCkpfXRyLnRvcEJvb2xPckVtcHR5U2NoZW1hPSRjO2Z1bmN0aW9uIHdjKGUsdCl7Y29uc3R7Z2VuOnIsc2NoZW1hOm59PWU7bj09PSExPyhyLnZhcih0LCExKSxuYShlKSk6ci52YXIodCwhMCl9dHIuYm9vbE9yRW1wdHlTY2hlbWE9d2M7ZnVuY3Rpb24gbmEoZSx0KXtjb25zdHtnZW46cixkYXRhOm59PWUscz17Z2VuOnIsa2V5d29yZDoiZmFsc2Ugc2NoZW1hIixkYXRhOm4sc2NoZW1hOiExLHNjaGVtYUNvZGU6ITEsc2NoZW1hVmFsdWU6ITEscGFyYW1zOnt9LGl0OmV9OygwLF9jLnJlcG9ydEVycm9yKShzLHljLHZvaWQgMCx0KX12YXIgbm49e30sRHQ9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KER0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxEdC5nZXRSdWxlcz1EdC5pc0pTT05UeXBlPXZvaWQgMDtjb25zdCBTYz1bInN0cmluZyIsIm51bWJlciIsImludGVnZXIiLCJib29sZWFuIiwibnVsbCIsIm9iamVjdCIsImFycmF5Il0sUmM9bmV3IFNldChTYyk7ZnVuY3Rpb24gYmMoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIiYmUmMuaGFzKGUpfUR0LmlzSlNPTlR5cGU9YmM7ZnVuY3Rpb24gT2MoKXtjb25zdCBlPXtudW1iZXI6e3R5cGU6Im51bWJlciIscnVsZXM6W119LHN0cmluZzp7dHlwZToic3RyaW5nIixydWxlczpbXX0sYXJyYXk6e3R5cGU6ImFycmF5IixydWxlczpbXX0sb2JqZWN0Ont0eXBlOiJvYmplY3QiLHJ1bGVzOltdfX07cmV0dXJue3R5cGVzOmxlKFEoe30sZSkse2ludGVnZXI6ITAsYm9vbGVhbjohMCxudWxsOiEwfSkscnVsZXM6W3tydWxlczpbXX0sZS5udW1iZXIsZS5zdHJpbmcsZS5hcnJheSxlLm9iamVjdF0scG9zdDp7cnVsZXM6W119LGFsbDp7fSxrZXl3b3Jkczp7fX19RHQuZ2V0UnVsZXM9T2M7dmFyIGx0PXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbHQuc2hvdWxkVXNlUnVsZT1sdC5zaG91bGRVc2VHcm91cD1sdC5zY2hlbWFIYXNSdWxlc0ZvclR5cGU9dm9pZCAwO2Z1bmN0aW9uIE5jKHtzY2hlbWE6ZSxzZWxmOnR9LHIpe2NvbnN0IG49dC5SVUxFUy50eXBlc1tyXTtyZXR1cm4gbiYmbiE9PSEwJiZzYShlLG4pfWx0LnNjaGVtYUhhc1J1bGVzRm9yVHlwZT1OYztmdW5jdGlvbiBzYShlLHQpe3JldHVybiB0LnJ1bGVzLnNvbWUocj0+YWEoZSxyKSl9bHQuc2hvdWxkVXNlR3JvdXA9c2E7ZnVuY3Rpb24gYWEoZSx0KXt2YXIgcjtyZXR1cm4gZVt0LmtleXdvcmRdIT09dm9pZCAwfHwoKHI9dC5kZWZpbml0aW9uLmltcGxlbWVudHMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5zb21lKG49PmVbbl0hPT12b2lkIDApKX1sdC5zaG91bGRVc2VSdWxlPWFhLGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLnJlcG9ydFR5cGVFcnJvcj1lLmNoZWNrRGF0YVR5cGVzPWUuY2hlY2tEYXRhVHlwZT1lLmNvZXJjZUFuZENoZWNrRGF0YVR5cGU9ZS5nZXRKU09OVHlwZXM9ZS5nZXRTY2hlbWFUeXBlcz1lLkRhdGFUeXBlPXZvaWQgMDtjb25zdCB0PUR0LHI9bHQsbj1FcixzPXVlLGE9YmU7dmFyIG87KGZ1bmN0aW9uKE8pe09bTy5Db3JyZWN0PTBdPSJDb3JyZWN0IixPW08uV3Jvbmc9MV09Ildyb25nIn0pKG89ZS5EYXRhVHlwZXx8KGUuRGF0YVR5cGU9e30pKTtmdW5jdGlvbiBsKE8pe2NvbnN0IEE9ZihPLnR5cGUpO2lmKEEuaW5jbHVkZXMoIm51bGwiKSl7aWYoTy5udWxsYWJsZT09PSExKXRocm93IG5ldyBFcnJvcigidHlwZTogbnVsbCBjb250cmFkaWN0cyBudWxsYWJsZTogZmFsc2UiKX1lbHNle2lmKCFBLmxlbmd0aCYmTy5udWxsYWJsZSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoJyJudWxsYWJsZSIgY2Fubm90IGJlIHVzZWQgd2l0aG91dCAidHlwZSInKTtPLm51bGxhYmxlPT09ITAmJkEucHVzaCgibnVsbCIpfXJldHVybiBBfWUuZ2V0U2NoZW1hVHlwZXM9bDtmdW5jdGlvbiBmKE8pe2NvbnN0IEE9QXJyYXkuaXNBcnJheShPKT9POk8/W09dOltdO2lmKEEuZXZlcnkodC5pc0pTT05UeXBlKSlyZXR1cm4gQTt0aHJvdyBuZXcgRXJyb3IoInR5cGUgbXVzdCBiZSBKU09OVHlwZSBvciBKU09OVHlwZVtdOiAiK0Euam9pbigiLCIpKX1lLmdldEpTT05UeXBlcz1mO2Z1bmN0aW9uIHAoTyxBKXtjb25zdHtnZW46SCxkYXRhOiQsb3B0czpOfT1PLEQ9aChBLE4uY29lcmNlVHlwZXMpLEI9QS5sZW5ndGg+MCYmIShELmxlbmd0aD09PTAmJkEubGVuZ3RoPT09MSYmKDAsci5zY2hlbWFIYXNSdWxlc0ZvclR5cGUpKE8sQVswXSkpO2lmKEIpe2NvbnN0IEc9aihBLCQsTi5zdHJpY3ROdW1iZXJzLG8uV3JvbmcpO0guaWYoRywoKT0+e0QubGVuZ3RoP0UoTyxBLEQpOl8oTyl9KX1yZXR1cm4gQn1lLmNvZXJjZUFuZENoZWNrRGF0YVR5cGU9cDtjb25zdCBpPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJpbnRlZ2VyIiwiYm9vbGVhbiIsIm51bGwiXSk7ZnVuY3Rpb24gaChPLEEpe3JldHVybiBBP08uZmlsdGVyKEg9PmkuaGFzKEgpfHxBPT09ImFycmF5IiYmSD09PSJhcnJheSIpOltdfWZ1bmN0aW9uIEUoTyxBLEgpe2NvbnN0e2dlbjokLGRhdGE6TixvcHRzOkR9PU8sQj0kLmxldCgiZGF0YVR5cGUiLCgwLHMuXylgdHlwZW9mICR7Tn1gKSxHPSQubGV0KCJjb2VyY2VkIiwoMCxzLl8pYHVuZGVmaW5lZGApO0QuY29lcmNlVHlwZXM9PT0iYXJyYXkiJiYkLmlmKCgwLHMuXylgJHtCfSA9PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KCR7Tn0pICYmICR7Tn0ubGVuZ3RoID09IDFgLCgpPT4kLmFzc2lnbihOLCgwLHMuXylgJHtOfVswXWApLmFzc2lnbihCLCgwLHMuXylgdHlwZW9mICR7Tn1gKS5pZihqKEEsTixELnN0cmljdE51bWJlcnMpLCgpPT4kLmFzc2lnbihHLE4pKSksJC5pZigoMCxzLl8pYCR7R30gIT09IHVuZGVmaW5lZGApO2Zvcihjb25zdCBXIG9mIEgpKGkuaGFzKFcpfHxXPT09ImFycmF5IiYmRC5jb2VyY2VUeXBlcz09PSJhcnJheSIpJiZwZShXKTskLmVsc2UoKSxfKE8pLCQuZW5kSWYoKSwkLmlmKCgwLHMuXylgJHtHfSAhPT0gdW5kZWZpbmVkYCwoKT0+eyQuYXNzaWduKE4sRyksVChPLEcpfSk7ZnVuY3Rpb24gcGUoVyl7c3dpdGNoKFcpe2Nhc2Uic3RyaW5nIjokLmVsc2VJZigoMCxzLl8pYCR7Qn0gPT0gIm51bWJlciIgfHwgJHtCfSA9PSAiYm9vbGVhbiJgKS5hc3NpZ24oRywoMCxzLl8pYCIiICsgJHtOfWApLmVsc2VJZigoMCxzLl8pYCR7Tn0gPT09IG51bGxgKS5hc3NpZ24oRywoMCxzLl8pYCIiYCk7cmV0dXJuO2Nhc2UibnVtYmVyIjokLmVsc2VJZigoMCxzLl8pYCR7Qn0gPT0gImJvb2xlYW4iIHx8ICR7Tn0gPT09IG51bGwKICAgICAgICAgICAgICB8fCAoJHtCfSA9PSAic3RyaW5nIiAmJiAke059ICYmICR7Tn0gPT0gKyR7Tn0pYCkuYXNzaWduKEcsKDAscy5fKWArJHtOfWApO3JldHVybjtjYXNlImludGVnZXIiOiQuZWxzZUlmKCgwLHMuXylgJHtCfSA9PT0gImJvb2xlYW4iIHx8ICR7Tn0gPT09IG51bGwKICAgICAgICAgICAgICB8fCAoJHtCfSA9PT0gInN0cmluZyIgJiYgJHtOfSAmJiAke059ID09ICske059ICYmICEoJHtOfSAlIDEpKWApLmFzc2lnbihHLCgwLHMuXylgKyR7Tn1gKTtyZXR1cm47Y2FzZSJib29sZWFuIjokLmVsc2VJZigoMCxzLl8pYCR7Tn0gPT09ICJmYWxzZSIgfHwgJHtOfSA9PT0gMCB8fCAke059ID09PSBudWxsYCkuYXNzaWduKEcsITEpLmVsc2VJZigoMCxzLl8pYCR7Tn0gPT09ICJ0cnVlIiB8fCAke059ID09PSAxYCkuYXNzaWduKEcsITApO3JldHVybjtjYXNlIm51bGwiOiQuZWxzZUlmKCgwLHMuXylgJHtOfSA9PT0gIiIgfHwgJHtOfSA9PT0gMCB8fCAke059ID09PSBmYWxzZWApLCQuYXNzaWduKEcsbnVsbCk7cmV0dXJuO2Nhc2UiYXJyYXkiOiQuZWxzZUlmKCgwLHMuXylgJHtCfSA9PT0gInN0cmluZyIgfHwgJHtCfSA9PT0gIm51bWJlciIKICAgICAgICAgICAgICB8fCAke0J9ID09PSAiYm9vbGVhbiIgfHwgJHtOfSA9PT0gbnVsbGApLmFzc2lnbihHLCgwLHMuXylgWyR7Tn1dYCl9fX1mdW5jdGlvbiBUKHtnZW46TyxwYXJlbnREYXRhOkEscGFyZW50RGF0YVByb3BlcnR5Okh9LCQpe08uaWYoKDAscy5fKWAke0F9ICE9PSB1bmRlZmluZWRgLCgpPT5PLmFzc2lnbigoMCxzLl8pYCR7QX1bJHtIfV1gLCQpKX1mdW5jdGlvbiBJKE8sQSxILCQ9by5Db3JyZWN0KXtjb25zdCBOPSQ9PT1vLkNvcnJlY3Q/cy5vcGVyYXRvcnMuRVE6cy5vcGVyYXRvcnMuTkVRO2xldCBEO3N3aXRjaChPKXtjYXNlIm51bGwiOnJldHVybigwLHMuXylgJHtBfSAke059IG51bGxgO2Nhc2UiYXJyYXkiOkQ9KDAscy5fKWBBcnJheS5pc0FycmF5KCR7QX0pYDticmVhaztjYXNlIm9iamVjdCI6RD0oMCxzLl8pYCR7QX0gJiYgdHlwZW9mICR7QX0gPT0gIm9iamVjdCIgJiYgIUFycmF5LmlzQXJyYXkoJHtBfSlgO2JyZWFrO2Nhc2UiaW50ZWdlciI6RD1CKCgwLHMuXylgISgke0F9ICUgMSkgJiYgIWlzTmFOKCR7QX0pYCk7YnJlYWs7Y2FzZSJudW1iZXIiOkQ9QigpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuKDAscy5fKWB0eXBlb2YgJHtBfSAke059ICR7T31gfXJldHVybiAkPT09by5Db3JyZWN0P0Q6KDAscy5ub3QpKEQpO2Z1bmN0aW9uIEIoRz1zLm5pbCl7cmV0dXJuKDAscy5hbmQpKCgwLHMuXylgdHlwZW9mICR7QX0gPT0gIm51bWJlciJgLEcsSD8oMCxzLl8pYGlzRmluaXRlKCR7QX0pYDpzLm5pbCl9fWUuY2hlY2tEYXRhVHlwZT1JO2Z1bmN0aW9uIGooTyxBLEgsJCl7aWYoTy5sZW5ndGg9PT0xKXJldHVybiBJKE9bMF0sQSxILCQpO2xldCBOO2NvbnN0IEQ9KDAsYS50b0hhc2gpKE8pO2lmKEQuYXJyYXkmJkQub2JqZWN0KXtjb25zdCBCPSgwLHMuXylgdHlwZW9mICR7QX0gIT0gIm9iamVjdCJgO049RC5udWxsP0I6KDAscy5fKWAhJHtBfSB8fCAke0J9YCxkZWxldGUgRC5udWxsLGRlbGV0ZSBELmFycmF5LGRlbGV0ZSBELm9iamVjdH1lbHNlIE49cy5uaWw7RC5udW1iZXImJmRlbGV0ZSBELmludGVnZXI7Zm9yKGNvbnN0IEIgaW4gRClOPSgwLHMuYW5kKShOLEkoQixBLEgsJCkpO3JldHVybiBOfWUuY2hlY2tEYXRhVHlwZXM9ajtjb25zdCB5PXttZXNzYWdlOih7c2NoZW1hOk99KT0+YG11c3QgYmUgJHtPfWAscGFyYW1zOih7c2NoZW1hOk8sc2NoZW1hVmFsdWU6QX0pPT50eXBlb2YgTz09InN0cmluZyI/KDAscy5fKWB7dHlwZTogJHtPfX1gOigwLHMuXylge3R5cGU6ICR7QX19YH07ZnVuY3Rpb24gXyhPKXtjb25zdCBBPWIoTyk7KDAsbi5yZXBvcnRFcnJvcikoQSx5KX1lLnJlcG9ydFR5cGVFcnJvcj1fO2Z1bmN0aW9uIGIoTyl7Y29uc3R7Z2VuOkEsZGF0YTpILHNjaGVtYTokfT1PLE49KDAsYS5zY2hlbWFSZWZPclZhbCkoTywkLCJ0eXBlIik7cmV0dXJue2dlbjpBLGtleXdvcmQ6InR5cGUiLGRhdGE6SCxzY2hlbWE6JC50eXBlLHNjaGVtYUNvZGU6TixzY2hlbWFWYWx1ZTpOLHBhcmVudFNjaGVtYTokLHBhcmFtczp7fSxpdDpPfX19KG5uKTt2YXIgc249e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHNuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxzbi5hc3NpZ25EZWZhdWx0cz12b2lkIDA7Y29uc3QgcnI9dWUsUGM9YmU7ZnVuY3Rpb24gVGMoZSx0KXtjb25zdHtwcm9wZXJ0aWVzOnIsaXRlbXM6bn09ZS5zY2hlbWE7aWYodD09PSJvYmplY3QiJiZyKWZvcihjb25zdCBzIGluIHIpb2EoZSxzLHJbc10uZGVmYXVsdCk7ZWxzZSB0PT09ImFycmF5IiYmQXJyYXkuaXNBcnJheShuKSYmbi5mb3JFYWNoKChzLGEpPT5vYShlLGEscy5kZWZhdWx0KSl9c24uYXNzaWduRGVmYXVsdHM9VGM7ZnVuY3Rpb24gb2EoZSx0LHIpe2NvbnN0e2dlbjpuLGNvbXBvc2l0ZVJ1bGU6cyxkYXRhOmEsb3B0czpvfT1lO2lmKHI9PT12b2lkIDApcmV0dXJuO2NvbnN0IGw9KDAscnIuXylgJHthfSR7KDAscnIuZ2V0UHJvcGVydHkpKHQpfWA7aWYocyl7KDAsUGMuY2hlY2tTdHJpY3RNb2RlKShlLGBkZWZhdWx0IGlzIGlnbm9yZWQgZm9yOiAke2x9YCk7cmV0dXJufWxldCBmPSgwLHJyLl8pYCR7bH0gPT09IHVuZGVmaW5lZGA7by51c2VEZWZhdWx0cz09PSJlbXB0eSImJihmPSgwLHJyLl8pYCR7Zn0gfHwgJHtsfSA9PT0gbnVsbCB8fCAke2x9ID09PSAiImApLG4uaWYoZiwoMCxyci5fKWAke2x9ID0gJHsoMCxyci5zdHJpbmdpZnkpKHIpfWApfXZhciBYZT17fSxuZT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkobmUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG5lLnZhbGlkYXRlVW5pb249bmUudmFsaWRhdGVBcnJheT1uZS51c2VQYXR0ZXJuPW5lLmNhbGxWYWxpZGF0ZUNvZGU9bmUuc2NoZW1hUHJvcGVydGllcz1uZS5hbGxTY2hlbWFQcm9wZXJ0aWVzPW5lLm5vUHJvcGVydHlJbkRhdGE9bmUucHJvcGVydHlJbkRhdGE9bmUuaXNPd25Qcm9wZXJ0eT1uZS5oYXNQcm9wRnVuYz1uZS5yZXBvcnRNaXNzaW5nUHJvcD1uZS5jaGVja01pc3NpbmdQcm9wPW5lLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3A9dm9pZCAwO2NvbnN0IGRlPXVlLEtuPWJlLEV0PUxlLEFjPWJlO2Z1bmN0aW9uIENjKGUsdCl7Y29uc3R7Z2VuOnIsZGF0YTpuLGl0OnN9PWU7ci5pZihKbihyLG4sdCxzLm9wdHMub3duUHJvcGVydGllcyksKCk9PntlLnNldFBhcmFtcyh7bWlzc2luZ1Byb3BlcnR5OigwLGRlLl8pYCR7dH1gfSwhMCksZS5lcnJvcigpfSl9bmUuY2hlY2tSZXBvcnRNaXNzaW5nUHJvcD1DYztmdW5jdGlvbiBJYyh7Z2VuOmUsZGF0YTp0LGl0OntvcHRzOnJ9fSxuLHMpe3JldHVybigwLGRlLm9yKSguLi5uLm1hcChhPT4oMCxkZS5hbmQpKEpuKGUsdCxhLHIub3duUHJvcGVydGllcyksKDAsZGUuXylgJHtzfSA9ICR7YX1gKSkpfW5lLmNoZWNrTWlzc2luZ1Byb3A9SWM7ZnVuY3Rpb24gRGMoZSx0KXtlLnNldFBhcmFtcyh7bWlzc2luZ1Byb3BlcnR5OnR9LCEwKSxlLmVycm9yKCl9bmUucmVwb3J0TWlzc2luZ1Byb3A9RGM7ZnVuY3Rpb24gaWEoZSl7cmV0dXJuIGUuc2NvcGVWYWx1ZSgiZnVuYyIse3JlZjpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGNvZGU6KDAsZGUuXylgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eWB9KX1uZS5oYXNQcm9wRnVuYz1pYTtmdW5jdGlvbiBCbihlLHQscil7cmV0dXJuKDAsZGUuXylgJHtpYShlKX0uY2FsbCgke3R9LCAke3J9KWB9bmUuaXNPd25Qcm9wZXJ0eT1CbjtmdW5jdGlvbiBqYyhlLHQscixuKXtjb25zdCBzPSgwLGRlLl8pYCR7dH0keygwLGRlLmdldFByb3BlcnR5KShyKX0gIT09IHVuZGVmaW5lZGA7cmV0dXJuIG4/KDAsZGUuXylgJHtzfSAmJiAke0JuKGUsdCxyKX1gOnN9bmUucHJvcGVydHlJbkRhdGE9amM7ZnVuY3Rpb24gSm4oZSx0LHIsbil7Y29uc3Qgcz0oMCxkZS5fKWAke3R9JHsoMCxkZS5nZXRQcm9wZXJ0eSkocil9ID09PSB1bmRlZmluZWRgO3JldHVybiBuPygwLGRlLm9yKShzLCgwLGRlLm5vdCkoQm4oZSx0LHIpKSk6c31uZS5ub1Byb3BlcnR5SW5EYXRhPUpuO2Z1bmN0aW9uIGNhKGUpe3JldHVybiBlP09iamVjdC5rZXlzKGUpLmZpbHRlcih0PT50IT09Il9fcHJvdG9fXyIpOltdfW5lLmFsbFNjaGVtYVByb3BlcnRpZXM9Y2E7ZnVuY3Rpb24ga2MoZSx0KXtyZXR1cm4gY2EodCkuZmlsdGVyKHI9PiEoMCxLbi5hbHdheXNWYWxpZFNjaGVtYSkoZSx0W3JdKSl9bmUuc2NoZW1hUHJvcGVydGllcz1rYztmdW5jdGlvbiBVYyh7c2NoZW1hQ29kZTplLGRhdGE6dCxpdDp7Z2VuOnIsdG9wU2NoZW1hUmVmOm4sc2NoZW1hUGF0aDpzLGVycm9yUGF0aDphfSxpdDpvfSxsLGYscCl7Y29uc3QgaT1wPygwLGRlLl8pYCR7ZX0sICR7dH0sICR7bn0ke3N9YDp0LGg9W1tFdC5kZWZhdWx0Lmluc3RhbmNlUGF0aCwoMCxkZS5zdHJDb25jYXQpKEV0LmRlZmF1bHQuaW5zdGFuY2VQYXRoLGEpXSxbRXQuZGVmYXVsdC5wYXJlbnREYXRhLG8ucGFyZW50RGF0YV0sW0V0LmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LG8ucGFyZW50RGF0YVByb3BlcnR5XSxbRXQuZGVmYXVsdC5yb290RGF0YSxFdC5kZWZhdWx0LnJvb3REYXRhXV07by5vcHRzLmR5bmFtaWNSZWYmJmgucHVzaChbRXQuZGVmYXVsdC5keW5hbWljQW5jaG9ycyxFdC5kZWZhdWx0LmR5bmFtaWNBbmNob3JzXSk7Y29uc3QgRT0oMCxkZS5fKWAke2l9LCAke3Iub2JqZWN0KC4uLmgpfWA7cmV0dXJuIGYhPT1kZS5uaWw/KDAsZGUuXylgJHtsfS5jYWxsKCR7Zn0sICR7RX0pYDooMCxkZS5fKWAke2x9KCR7RX0pYH1uZS5jYWxsVmFsaWRhdGVDb2RlPVVjO2NvbnN0IEZjPSgwLGRlLl8pYG5ldyBSZWdFeHBgO2Z1bmN0aW9uIE1jKHtnZW46ZSxpdDp7b3B0czp0fX0scil7Y29uc3Qgbj10LnVuaWNvZGVSZWdFeHA/InUiOiIiLHtyZWdFeHA6c309dC5jb2RlLGE9cyhyLG4pO3JldHVybiBlLnNjb3BlVmFsdWUoInBhdHRlcm4iLHtrZXk6YS50b1N0cmluZygpLHJlZjphLGNvZGU6KDAsZGUuXylgJHtzLmNvZGU9PT0ibmV3IFJlZ0V4cCI/RmM6KDAsQWMudXNlRnVuYykoZSxzKX0oJHtyfSwgJHtufSlgfSl9bmUudXNlUGF0dGVybj1NYztmdW5jdGlvbiBMYyhlKXtjb25zdHtnZW46dCxkYXRhOnIsa2V5d29yZDpuLGl0OnN9PWUsYT10Lm5hbWUoInZhbGlkIik7aWYocy5hbGxFcnJvcnMpe2NvbnN0IGw9dC5sZXQoInZhbGlkIiwhMCk7cmV0dXJuIG8oKCk9PnQuYXNzaWduKGwsITEpKSxsfXJldHVybiB0LnZhcihhLCEwKSxvKCgpPT50LmJyZWFrKCkpLGE7ZnVuY3Rpb24gbyhsKXtjb25zdCBmPXQuY29uc3QoImxlbiIsKDAsZGUuXylgJHtyfS5sZW5ndGhgKTt0LmZvclJhbmdlKCJpIiwwLGYscD0+e2Uuc3Vic2NoZW1hKHtrZXl3b3JkOm4sZGF0YVByb3A6cCxkYXRhUHJvcFR5cGU6S24uVHlwZS5OdW19LGEpLHQuaWYoKDAsZGUubm90KShhKSxsKX0pfX1uZS52YWxpZGF0ZUFycmF5PUxjO2Z1bmN0aW9uIFZjKGUpe2NvbnN0e2dlbjp0LHNjaGVtYTpyLGtleXdvcmQ6bixpdDpzfT1lO2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBFcnJvcigiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yIik7aWYoci5zb21lKGY9PigwLEtuLmFsd2F5c1ZhbGlkU2NoZW1hKShzLGYpKSYmIXMub3B0cy51bmV2YWx1YXRlZClyZXR1cm47Y29uc3Qgbz10LmxldCgidmFsaWQiLCExKSxsPXQubmFtZSgiX3ZhbGlkIik7dC5ibG9jaygoKT0+ci5mb3JFYWNoKChmLHApPT57Y29uc3QgaT1lLnN1YnNjaGVtYSh7a2V5d29yZDpuLHNjaGVtYVByb3A6cCxjb21wb3NpdGVSdWxlOiEwfSxsKTt0LmFzc2lnbihvLCgwLGRlLl8pYCR7b30gfHwgJHtsfWApLGUubWVyZ2VWYWxpZEV2YWx1YXRlZChpLGwpfHx0LmlmKCgwLGRlLm5vdCkobykpfSkpLGUucmVzdWx0KG8sKCk9PmUucmVzZXQoKSwoKT0+ZS5lcnJvcighMCkpfW5lLnZhbGlkYXRlVW5pb249VmMsT2JqZWN0LmRlZmluZVByb3BlcnR5KFhlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYZS52YWxpZGF0ZUtleXdvcmRVc2FnZT1YZS52YWxpZFNjaGVtYVR5cGU9WGUuZnVuY0tleXdvcmRDb2RlPVhlLm1hY3JvS2V5d29yZENvZGU9dm9pZCAwO2NvbnN0IEllPXVlLGp0PUxlLHpjPW5lLEhjPUVyO2Z1bmN0aW9uIEtjKGUsdCl7Y29uc3R7Z2VuOnIsa2V5d29yZDpuLHNjaGVtYTpzLHBhcmVudFNjaGVtYTphLGl0Om99PWUsbD10Lm1hY3JvLmNhbGwoby5zZWxmLHMsYSxvKSxmPWxhKHIsbixsKTtvLm9wdHMudmFsaWRhdGVTY2hlbWEhPT0hMSYmby5zZWxmLnZhbGlkYXRlU2NoZW1hKGwsITApO2NvbnN0IHA9ci5uYW1lKCJ2YWxpZCIpO2Uuc3Vic2NoZW1hKHtzY2hlbWE6bCxzY2hlbWFQYXRoOkllLm5pbCxlcnJTY2hlbWFQYXRoOmAke28uZXJyU2NoZW1hUGF0aH0vJHtufWAsdG9wU2NoZW1hUmVmOmYsY29tcG9zaXRlUnVsZTohMH0scCksZS5wYXNzKHAsKCk9PmUuZXJyb3IoITApKX1YZS5tYWNyb0tleXdvcmRDb2RlPUtjO2Z1bmN0aW9uIEJjKGUsdCl7dmFyIHI7Y29uc3R7Z2VuOm4sa2V5d29yZDpzLHNjaGVtYTphLHBhcmVudFNjaGVtYTpvLCRkYXRhOmwsaXQ6Zn09ZTtxYyhmLHQpO2NvbnN0IHA9IWwmJnQuY29tcGlsZT90LmNvbXBpbGUuY2FsbChmLnNlbGYsYSxvLGYpOnQudmFsaWRhdGUsaT1sYShuLHMscCksaD1uLmxldCgidmFsaWQiKTtlLmJsb2NrJGRhdGEoaCxFKSxlLm9rKChyPXQudmFsaWQpIT09bnVsbCYmciE9PXZvaWQgMD9yOmgpO2Z1bmN0aW9uIEUoKXtpZih0LmVycm9ycz09PSExKWooKSx0Lm1vZGlmeWluZyYmdWEoZSkseSgoKT0+ZS5lcnJvcigpKTtlbHNle2NvbnN0IF89dC5hc3luYz9UKCk6SSgpO3QubW9kaWZ5aW5nJiZ1YShlKSx5KCgpPT5KYyhlLF8pKX19ZnVuY3Rpb24gVCgpe2NvbnN0IF89bi5sZXQoInJ1bGVFcnJzIixudWxsKTtyZXR1cm4gbi50cnkoKCk9PmooKDAsSWUuXylgYXdhaXQgYCksYj0+bi5hc3NpZ24oaCwhMSkuaWYoKDAsSWUuXylgJHtifSBpbnN0YW5jZW9mICR7Zi5WYWxpZGF0aW9uRXJyb3J9YCwoKT0+bi5hc3NpZ24oXywoMCxJZS5fKWAke2J9LmVycm9yc2ApLCgpPT5uLnRocm93KGIpKSksX31mdW5jdGlvbiBJKCl7Y29uc3QgXz0oMCxJZS5fKWAke2l9LmVycm9yc2A7cmV0dXJuIG4uYXNzaWduKF8sbnVsbCksaihJZS5uaWwpLF99ZnVuY3Rpb24gaihfPXQuYXN5bmM/KDAsSWUuXylgYXdhaXQgYDpJZS5uaWwpe2NvbnN0IGI9Zi5vcHRzLnBhc3NDb250ZXh0P2p0LmRlZmF1bHQudGhpczpqdC5kZWZhdWx0LnNlbGYsTz0hKCJjb21waWxlImluIHQmJiFsfHx0LnNjaGVtYT09PSExKTtuLmFzc2lnbihoLCgwLEllLl8pYCR7X30keygwLHpjLmNhbGxWYWxpZGF0ZUNvZGUpKGUsaSxiLE8pfWAsdC5tb2RpZnlpbmcpfWZ1bmN0aW9uIHkoXyl7dmFyIGI7bi5pZigoMCxJZS5ub3QpKChiPXQudmFsaWQpIT09bnVsbCYmYiE9PXZvaWQgMD9iOmgpLF8pfX1YZS5mdW5jS2V5d29yZENvZGU9QmM7ZnVuY3Rpb24gdWEoZSl7Y29uc3R7Z2VuOnQsZGF0YTpyLGl0Om59PWU7dC5pZihuLnBhcmVudERhdGEsKCk9PnQuYXNzaWduKHIsKDAsSWUuXylgJHtuLnBhcmVudERhdGF9WyR7bi5wYXJlbnREYXRhUHJvcGVydHl9XWApKX1mdW5jdGlvbiBKYyhlLHQpe2NvbnN0e2dlbjpyfT1lO3IuaWYoKDAsSWUuXylgQXJyYXkuaXNBcnJheSgke3R9KWAsKCk9PntyLmFzc2lnbihqdC5kZWZhdWx0LnZFcnJvcnMsKDAsSWUuXylgJHtqdC5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHt0fSA6ICR7anQuZGVmYXVsdC52RXJyb3JzfS5jb25jYXQoJHt0fSlgKS5hc3NpZ24oanQuZGVmYXVsdC5lcnJvcnMsKDAsSWUuXylgJHtqdC5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApLCgwLEhjLmV4dGVuZEVycm9ycykoZSl9LCgpPT5lLmVycm9yKCkpfWZ1bmN0aW9uIHFjKHtzY2hlbWFFbnY6ZX0sdCl7aWYodC5hc3luYyYmIWUuJGFzeW5jKXRocm93IG5ldyBFcnJvcigiYXN5bmMga2V5d29yZCBpbiBzeW5jIHNjaGVtYSIpfWZ1bmN0aW9uIGxhKGUsdCxyKXtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihga2V5d29yZCAiJHt0fSIgZmFpbGVkIHRvIGNvbXBpbGVgKTtyZXR1cm4gZS5zY29wZVZhbHVlKCJrZXl3b3JkIix0eXBlb2Ygcj09ImZ1bmN0aW9uIj97cmVmOnJ9OntyZWY6cixjb2RlOigwLEllLnN0cmluZ2lmeSkocil9KX1mdW5jdGlvbiBHYyhlLHQscj0hMSl7cmV0dXJuIXQubGVuZ3RofHx0LnNvbWUobj0+bj09PSJhcnJheSI/QXJyYXkuaXNBcnJheShlKTpuPT09Im9iamVjdCI/ZSYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKTp0eXBlb2YgZT09bnx8ciYmdHlwZW9mIGU9PSJ1bmRlZmluZWQiKX1YZS52YWxpZFNjaGVtYVR5cGU9R2M7ZnVuY3Rpb24gUWMoe3NjaGVtYTplLG9wdHM6dCxzZWxmOnIsZXJyU2NoZW1hUGF0aDpufSxzLGEpe2lmKEFycmF5LmlzQXJyYXkocy5rZXl3b3JkKT8hcy5rZXl3b3JkLmluY2x1ZGVzKGEpOnMua2V5d29yZCE9PWEpdGhyb3cgbmV3IEVycm9yKCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3IiKTtjb25zdCBvPXMuZGVwZW5kZW5jaWVzO2lmKG8hPW51bGwmJm8uc29tZShsPT4hT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbCkpKXRocm93IG5ldyBFcnJvcihgcGFyZW50IHNjaGVtYSBtdXN0IGhhdmUgZGVwZW5kZW5jaWVzIG9mICR7YX06ICR7by5qb2luKCIsIil9YCk7aWYocy52YWxpZGF0ZVNjaGVtYSYmIXMudmFsaWRhdGVTY2hlbWEoZVthXSkpe2NvbnN0IGY9YGtleXdvcmQgIiR7YX0iIHZhbHVlIGlzIGludmFsaWQgYXQgcGF0aCAiJHtufSI6IGArci5lcnJvcnNUZXh0KHMudmFsaWRhdGVTY2hlbWEuZXJyb3JzKTtpZih0LnZhbGlkYXRlU2NoZW1hPT09ImxvZyIpci5sb2dnZXIuZXJyb3IoZik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoZil9fVhlLnZhbGlkYXRlS2V5d29yZFVzYWdlPVFjO3ZhciB5dD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoeXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHl0LmV4dGVuZFN1YnNjaGVtYU1vZGU9eXQuZXh0ZW5kU3Vic2NoZW1hRGF0YT15dC5nZXRTdWJzY2hlbWE9dm9pZCAwO2NvbnN0IFplPXVlLGZhPWJlO2Z1bmN0aW9uIFljKGUse2tleXdvcmQ6dCxzY2hlbWFQcm9wOnIsc2NoZW1hOm4sc2NoZW1hUGF0aDpzLGVyclNjaGVtYVBhdGg6YSx0b3BTY2hlbWFSZWY6b30pe2lmKHQhPT12b2lkIDAmJm4hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCdib3RoICJrZXl3b3JkIiBhbmQgInNjaGVtYSIgcGFzc2VkLCBvbmx5IG9uZSBhbGxvd2VkJyk7aWYodCE9PXZvaWQgMCl7Y29uc3QgbD1lLnNjaGVtYVt0XTtyZXR1cm4gcj09PXZvaWQgMD97c2NoZW1hOmwsc2NoZW1hUGF0aDooMCxaZS5fKWAke2Uuc2NoZW1hUGF0aH0keygwLFplLmdldFByb3BlcnR5KSh0KX1gLGVyclNjaGVtYVBhdGg6YCR7ZS5lcnJTY2hlbWFQYXRofS8ke3R9YH06e3NjaGVtYTpsW3JdLHNjaGVtYVBhdGg6KDAsWmUuXylgJHtlLnNjaGVtYVBhdGh9JHsoMCxaZS5nZXRQcm9wZXJ0eSkodCl9JHsoMCxaZS5nZXRQcm9wZXJ0eSkocil9YCxlcnJTY2hlbWFQYXRoOmAke2UuZXJyU2NoZW1hUGF0aH0vJHt0fS8keygwLGZhLmVzY2FwZUZyYWdtZW50KShyKX1gfX1pZihuIT09dm9pZCAwKXtpZihzPT09dm9pZCAwfHxhPT09dm9pZCAwfHxvPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcignInNjaGVtYVBhdGgiLCAiZXJyU2NoZW1hUGF0aCIgYW5kICJ0b3BTY2hlbWFSZWYiIGFyZSByZXF1aXJlZCB3aXRoICJzY2hlbWEiJyk7cmV0dXJue3NjaGVtYTpuLHNjaGVtYVBhdGg6cyx0b3BTY2hlbWFSZWY6byxlcnJTY2hlbWFQYXRoOmF9fXRocm93IG5ldyBFcnJvcignZWl0aGVyICJrZXl3b3JkIiBvciAic2NoZW1hIiBtdXN0IGJlIHBhc3NlZCcpfXl0LmdldFN1YnNjaGVtYT1ZYztmdW5jdGlvbiBXYyhlLHQse2RhdGFQcm9wOnIsZGF0YVByb3BUeXBlOm4sZGF0YTpzLGRhdGFUeXBlczphLHByb3BlcnR5TmFtZTpvfSl7aWYocyE9PXZvaWQgMCYmciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoJ2JvdGggImRhdGEiIGFuZCAiZGF0YVByb3AiIHBhc3NlZCwgb25seSBvbmUgYWxsb3dlZCcpO2NvbnN0e2dlbjpsfT10O2lmKHIhPT12b2lkIDApe2NvbnN0e2Vycm9yUGF0aDpwLGRhdGFQYXRoQXJyOmksb3B0czpofT10LEU9bC5sZXQoImRhdGEiLCgwLFplLl8pYCR7dC5kYXRhfSR7KDAsWmUuZ2V0UHJvcGVydHkpKHIpfWAsITApO2YoRSksZS5lcnJvclBhdGg9KDAsWmUuc3RyKWAke3B9JHsoMCxmYS5nZXRFcnJvclBhdGgpKHIsbixoLmpzUHJvcGVydHlTeW50YXgpfWAsZS5wYXJlbnREYXRhUHJvcGVydHk9KDAsWmUuXylgJHtyfWAsZS5kYXRhUGF0aEFycj1bLi4uaSxlLnBhcmVudERhdGFQcm9wZXJ0eV19aWYocyE9PXZvaWQgMCl7Y29uc3QgcD1zIGluc3RhbmNlb2YgWmUuTmFtZT9zOmwubGV0KCJkYXRhIixzLCEwKTtmKHApLG8hPT12b2lkIDAmJihlLnByb3BlcnR5TmFtZT1vKX1hJiYoZS5kYXRhVHlwZXM9YSk7ZnVuY3Rpb24gZihwKXtlLmRhdGE9cCxlLmRhdGFMZXZlbD10LmRhdGFMZXZlbCsxLGUuZGF0YVR5cGVzPVtdLHQuZGVmaW5lZFByb3BlcnRpZXM9bmV3IFNldCxlLnBhcmVudERhdGE9dC5kYXRhLGUuZGF0YU5hbWVzPVsuLi50LmRhdGFOYW1lcyxwXX19eXQuZXh0ZW5kU3Vic2NoZW1hRGF0YT1XYztmdW5jdGlvbiBYYyhlLHtqdGREaXNjcmltaW5hdG9yOnQsanRkTWV0YWRhdGE6cixjb21wb3NpdGVSdWxlOm4sY3JlYXRlRXJyb3JzOnMsYWxsRXJyb3JzOmF9KXtuIT09dm9pZCAwJiYoZS5jb21wb3NpdGVSdWxlPW4pLHMhPT12b2lkIDAmJihlLmNyZWF0ZUVycm9ycz1zKSxhIT09dm9pZCAwJiYoZS5hbGxFcnJvcnM9YSksZS5qdGREaXNjcmltaW5hdG9yPXQsZS5qdGRNZXRhZGF0YT1yfXl0LmV4dGVuZFN1YnNjaGVtYU1vZGU9WGM7dmFyIFRlPXt9LFpjPWZ1bmN0aW9uIGUodCxyKXtpZih0PT09cilyZXR1cm4hMDtpZih0JiZyJiZ0eXBlb2YgdD09Im9iamVjdCImJnR5cGVvZiByPT0ib2JqZWN0Iil7aWYodC5jb25zdHJ1Y3RvciE9PXIuY29uc3RydWN0b3IpcmV0dXJuITE7dmFyIG4scyxhO2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKG49dC5sZW5ndGgsbiE9ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHM9bjtzLS0hPT0wOylpZighZSh0W3NdLHJbc10pKXJldHVybiExO3JldHVybiEwfWlmKHQuY29uc3RydWN0b3I9PT1SZWdFeHApcmV0dXJuIHQuc291cmNlPT09ci5zb3VyY2UmJnQuZmxhZ3M9PT1yLmZsYWdzO2lmKHQudmFsdWVPZiE9PU9iamVjdC5wcm90b3R5cGUudmFsdWVPZilyZXR1cm4gdC52YWx1ZU9mKCk9PT1yLnZhbHVlT2YoKTtpZih0LnRvU3RyaW5nIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZylyZXR1cm4gdC50b1N0cmluZygpPT09ci50b1N0cmluZygpO2lmKGE9T2JqZWN0LmtleXModCksbj1hLmxlbmd0aCxuIT09T2JqZWN0LmtleXMocikubGVuZ3RoKXJldHVybiExO2ZvcihzPW47cy0tIT09MDspaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGFbc10pKXJldHVybiExO2ZvcihzPW47cy0tIT09MDspe3ZhciBvPWFbc107aWYoIWUodFtvXSxyW29dKSlyZXR1cm4hMX1yZXR1cm4hMH1yZXR1cm4gdCE9PXQmJnIhPT1yfSxkYT17ZXhwb3J0czp7fX0sJHQ9ZGEuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dHlwZW9mIHQ9PSJmdW5jdGlvbiImJihyPXQsdD17fSkscj10LmNifHxyO3ZhciBuPXR5cGVvZiByPT0iZnVuY3Rpb24iP3I6ci5wcmV8fGZ1bmN0aW9uKCl7fSxzPXIucG9zdHx8ZnVuY3Rpb24oKXt9O2FuKHQsbixzLGUsIiIsZSl9OyR0LmtleXdvcmRzPXthZGRpdGlvbmFsSXRlbXM6ITAsaXRlbXM6ITAsY29udGFpbnM6ITAsYWRkaXRpb25hbFByb3BlcnRpZXM6ITAscHJvcGVydHlOYW1lczohMCxub3Q6ITAsaWY6ITAsdGhlbjohMCxlbHNlOiEwfSwkdC5hcnJheUtleXdvcmRzPXtpdGVtczohMCxhbGxPZjohMCxhbnlPZjohMCxvbmVPZjohMH0sJHQucHJvcHNLZXl3b3Jkcz17JGRlZnM6ITAsZGVmaW5pdGlvbnM6ITAscHJvcGVydGllczohMCxwYXR0ZXJuUHJvcGVydGllczohMCxkZXBlbmRlbmNpZXM6ITB9LCR0LnNraXBLZXl3b3Jkcz17ZGVmYXVsdDohMCxlbnVtOiEwLGNvbnN0OiEwLHJlcXVpcmVkOiEwLG1heGltdW06ITAsbWluaW11bTohMCxleGNsdXNpdmVNYXhpbXVtOiEwLGV4Y2x1c2l2ZU1pbmltdW06ITAsbXVsdGlwbGVPZjohMCxtYXhMZW5ndGg6ITAsbWluTGVuZ3RoOiEwLHBhdHRlcm46ITAsZm9ybWF0OiEwLG1heEl0ZW1zOiEwLG1pbkl0ZW1zOiEwLHVuaXF1ZUl0ZW1zOiEwLG1heFByb3BlcnRpZXM6ITAsbWluUHJvcGVydGllczohMH07ZnVuY3Rpb24gYW4oZSx0LHIsbixzLGEsbyxsLGYscCl7aWYobiYmdHlwZW9mIG49PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShuKSl7dChuLHMsYSxvLGwsZixwKTtmb3IodmFyIGkgaW4gbil7dmFyIGg9bltpXTtpZihBcnJheS5pc0FycmF5KGgpKXtpZihpIGluICR0LmFycmF5S2V5d29yZHMpZm9yKHZhciBFPTA7RTxoLmxlbmd0aDtFKyspYW4oZSx0LHIsaFtFXSxzKyIvIitpKyIvIitFLGEscyxpLG4sRSl9ZWxzZSBpZihpIGluICR0LnByb3BzS2V5d29yZHMpe2lmKGgmJnR5cGVvZiBoPT0ib2JqZWN0Iilmb3IodmFyIFQgaW4gaClhbihlLHQscixoW1RdLHMrIi8iK2krIi8iK3hjKFQpLGEscyxpLG4sVCl9ZWxzZShpIGluICR0LmtleXdvcmRzfHxlLmFsbEtleXMmJiEoaSBpbiAkdC5za2lwS2V5d29yZHMpKSYmYW4oZSx0LHIsaCxzKyIvIitpLGEscyxpLG4pfXIobixzLGEsbyxsLGYscCl9fWZ1bmN0aW9uIHhjKGUpe3JldHVybiBlLnJlcGxhY2UoL34vZywifjAiKS5yZXBsYWNlKC9cLy9nLCJ+MSIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksVGUuZ2V0U2NoZW1hUmVmcz1UZS5yZXNvbHZlVXJsPVRlLm5vcm1hbGl6ZUlkPVRlLl9nZXRGdWxsUGF0aD1UZS5nZXRGdWxsUGF0aD1UZS5pbmxpbmVSZWY9dm9pZCAwO2NvbnN0IGV1PWJlLHR1PVpjLHJ1PWRhLmV4cG9ydHMsbnU9bmV3IFNldChbInR5cGUiLCJmb3JtYXQiLCJwYXR0ZXJuIiwibWF4TGVuZ3RoIiwibWluTGVuZ3RoIiwibWF4UHJvcGVydGllcyIsIm1pblByb3BlcnRpZXMiLCJtYXhJdGVtcyIsIm1pbkl0ZW1zIiwibWF4aW11bSIsIm1pbmltdW0iLCJ1bmlxdWVJdGVtcyIsIm11bHRpcGxlT2YiLCJyZXF1aXJlZCIsImVudW0iLCJjb25zdCJdKTtmdW5jdGlvbiBzdShlLHQ9ITApe3JldHVybiB0eXBlb2YgZT09ImJvb2xlYW4iPyEwOnQ9PT0hMD8hcW4oZSk6dD9oYShlKTw9dDohMX1UZS5pbmxpbmVSZWY9c3U7Y29uc3QgYXU9bmV3IFNldChbIiRyZWYiLCIkcmVjdXJzaXZlUmVmIiwiJHJlY3Vyc2l2ZUFuY2hvciIsIiRkeW5hbWljUmVmIiwiJGR5bmFtaWNBbmNob3IiXSk7ZnVuY3Rpb24gcW4oZSl7Zm9yKGNvbnN0IHQgaW4gZSl7aWYoYXUuaGFzKHQpKXJldHVybiEwO2NvbnN0IHI9ZVt0XTtpZihBcnJheS5pc0FycmF5KHIpJiZyLnNvbWUocW4pfHx0eXBlb2Ygcj09Im9iamVjdCImJnFuKHIpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGhhKGUpe2xldCB0PTA7Zm9yKGNvbnN0IHIgaW4gZSl7aWYocj09PSIkcmVmIilyZXR1cm4gMS8wO2lmKHQrKywhbnUuaGFzKHIpJiYodHlwZW9mIGVbcl09PSJvYmplY3QiJiYoMCxldS5lYWNoSXRlbSkoZVtyXSxuPT50Kz1oYShuKSksdD09PTEvMCkpcmV0dXJuIDEvMH1yZXR1cm4gdH1mdW5jdGlvbiBwYShlLHQ9IiIscil7ciE9PSExJiYodD1ucih0KSk7Y29uc3Qgbj1lLnBhcnNlKHQpO3JldHVybiBtYShlLG4pfVRlLmdldEZ1bGxQYXRoPXBhO2Z1bmN0aW9uIG1hKGUsdCl7cmV0dXJuIGUuc2VyaWFsaXplKHQpLnNwbGl0KCIjIilbMF0rIiMifVRlLl9nZXRGdWxsUGF0aD1tYTtjb25zdCBvdT0vI1wvPyQvO2Z1bmN0aW9uIG5yKGUpe3JldHVybiBlP2UucmVwbGFjZShvdSwiIik6IiJ9VGUubm9ybWFsaXplSWQ9bnI7ZnVuY3Rpb24gaXUoZSx0LHIpe3JldHVybiByPW5yKHIpLGUucmVzb2x2ZSh0LHIpfVRlLnJlc29sdmVVcmw9aXU7Y29uc3QgY3U9L15bYS16X11bLWEtejAtOS5fXSokL2k7ZnVuY3Rpb24gdXUoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybnt9O2NvbnN0e3NjaGVtYUlkOnIsdXJpUmVzb2x2ZXI6bn09dGhpcy5vcHRzLHM9bnIoZVtyXXx8dCksYT17IiI6c30sbz1wYShuLHMsITEpLGw9e30sZj1uZXcgU2V0O3JldHVybiBydShlLHthbGxLZXlzOiEwfSwoaCxFLFQsSSk9PntpZihJPT09dm9pZCAwKXJldHVybjtjb25zdCBqPW8rRTtsZXQgeT1hW0ldO3R5cGVvZiBoW3JdPT0ic3RyaW5nIiYmKHk9Xy5jYWxsKHRoaXMsaFtyXSkpLGIuY2FsbCh0aGlzLGguJGFuY2hvciksYi5jYWxsKHRoaXMsaC4kZHluYW1pY0FuY2hvciksYVtFXT15O2Z1bmN0aW9uIF8oTyl7Y29uc3QgQT10aGlzLm9wdHMudXJpUmVzb2x2ZXIucmVzb2x2ZTtpZihPPW5yKHk/QSh5LE8pOk8pLGYuaGFzKE8pKXRocm93IGkoTyk7Zi5hZGQoTyk7bGV0IEg9dGhpcy5yZWZzW09dO3JldHVybiB0eXBlb2YgSD09InN0cmluZyImJihIPXRoaXMucmVmc1tIXSksdHlwZW9mIEg9PSJvYmplY3QiP3AoaCxILnNjaGVtYSxPKTpPIT09bnIoaikmJihPWzBdPT09IiMiPyhwKGgsbFtPXSxPKSxsW09dPWgpOnRoaXMucmVmc1tPXT1qKSxPfWZ1bmN0aW9uIGIoTyl7aWYodHlwZW9mIE89PSJzdHJpbmciKXtpZighY3UudGVzdChPKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYW5jaG9yICIke099ImApO18uY2FsbCh0aGlzLGAjJHtPfWApfX19KSxsO2Z1bmN0aW9uIHAoaCxFLFQpe2lmKEUhPT12b2lkIDAmJiF0dShoLEUpKXRocm93IGkoVCl9ZnVuY3Rpb24gaShoKXtyZXR1cm4gbmV3IEVycm9yKGByZWZlcmVuY2UgIiR7aH0iIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgc2NoZW1hYCl9fVRlLmdldFNjaGVtYVJlZnM9dXUsT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxXZS5nZXREYXRhPVdlLktleXdvcmRDeHQ9V2UudmFsaWRhdGVGdW5jdGlvbkNvZGU9dm9pZCAwO2NvbnN0IHZhPXRyLF9hPW5uLEduPWx0LG9uPW5uLGx1PXNuLCRyPVhlLFFuPXl0LE09dWUsSj1MZSxmdT1UZSxmdD1iZSx3cj1FcjtmdW5jdGlvbiBkdShlKXtpZigkYShlKSYmKHdhKGUpLHlhKGUpKSl7bXUoZSk7cmV0dXJufWdhKGUsKCk9PigwLHZhLnRvcEJvb2xPckVtcHR5U2NoZW1hKShlKSl9V2UudmFsaWRhdGVGdW5jdGlvbkNvZGU9ZHU7ZnVuY3Rpb24gZ2Eoe2dlbjplLHZhbGlkYXRlTmFtZTp0LHNjaGVtYTpyLHNjaGVtYUVudjpuLG9wdHM6c30sYSl7cy5jb2RlLmVzNT9lLmZ1bmModCwoMCxNLl8pYCR7Si5kZWZhdWx0LmRhdGF9LCAke0ouZGVmYXVsdC52YWxDeHR9YCxuLiRhc3luYywoKT0+e2UuY29kZSgoMCxNLl8pYCJ1c2Ugc3RyaWN0IjsgJHtFYShyLHMpfWApLHB1KGUscyksZS5jb2RlKGEpfSk6ZS5mdW5jKHQsKDAsTS5fKWAke0ouZGVmYXVsdC5kYXRhfSwgJHtodShzKX1gLG4uJGFzeW5jLCgpPT5lLmNvZGUoRWEocixzKSkuY29kZShhKSl9ZnVuY3Rpb24gaHUoZSl7cmV0dXJuKDAsTS5fKWB7JHtKLmRlZmF1bHQuaW5zdGFuY2VQYXRofT0iIiwgJHtKLmRlZmF1bHQucGFyZW50RGF0YX0sICR7Si5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eX0sICR7Si5kZWZhdWx0LnJvb3REYXRhfT0ke0ouZGVmYXVsdC5kYXRhfSR7ZS5keW5hbWljUmVmPygwLE0uXylgLCAke0ouZGVmYXVsdC5keW5hbWljQW5jaG9yc309e31gOk0ubmlsfX09e31gfWZ1bmN0aW9uIHB1KGUsdCl7ZS5pZihKLmRlZmF1bHQudmFsQ3h0LCgpPT57ZS52YXIoSi5kZWZhdWx0Lmluc3RhbmNlUGF0aCwoMCxNLl8pYCR7Si5kZWZhdWx0LnZhbEN4dH0uJHtKLmRlZmF1bHQuaW5zdGFuY2VQYXRofWApLGUudmFyKEouZGVmYXVsdC5wYXJlbnREYXRhLCgwLE0uXylgJHtKLmRlZmF1bHQudmFsQ3h0fS4ke0ouZGVmYXVsdC5wYXJlbnREYXRhfWApLGUudmFyKEouZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksKDAsTS5fKWAke0ouZGVmYXVsdC52YWxDeHR9LiR7Si5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eX1gKSxlLnZhcihKLmRlZmF1bHQucm9vdERhdGEsKDAsTS5fKWAke0ouZGVmYXVsdC52YWxDeHR9LiR7Si5kZWZhdWx0LnJvb3REYXRhfWApLHQuZHluYW1pY1JlZiYmZS52YXIoSi5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCgwLE0uXylgJHtKLmRlZmF1bHQudmFsQ3h0fS4ke0ouZGVmYXVsdC5keW5hbWljQW5jaG9yc31gKX0sKCk9PntlLnZhcihKLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCgwLE0uXylgIiJgKSxlLnZhcihKLmRlZmF1bHQucGFyZW50RGF0YSwoMCxNLl8pYHVuZGVmaW5lZGApLGUudmFyKEouZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksKDAsTS5fKWB1bmRlZmluZWRgKSxlLnZhcihKLmRlZmF1bHQucm9vdERhdGEsSi5kZWZhdWx0LmRhdGEpLHQuZHluYW1pY1JlZiYmZS52YXIoSi5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCgwLE0uXylge31gKX0pfWZ1bmN0aW9uIG11KGUpe2NvbnN0e3NjaGVtYTp0LG9wdHM6cixnZW46bn09ZTtnYShlLCgpPT57ci4kY29tbWVudCYmdC4kY29tbWVudCYmUmEoZSkseXUoZSksbi5sZXQoSi5kZWZhdWx0LnZFcnJvcnMsbnVsbCksbi5sZXQoSi5kZWZhdWx0LmVycm9ycywwKSxyLnVuZXZhbHVhdGVkJiZ2dShlKSxTYShlKSxTdShlKX0pfWZ1bmN0aW9uIHZ1KGUpe2NvbnN0e2dlbjp0LHZhbGlkYXRlTmFtZTpyfT1lO2UuZXZhbHVhdGVkPXQuY29uc3QoImV2YWx1YXRlZCIsKDAsTS5fKWAke3J9LmV2YWx1YXRlZGApLHQuaWYoKDAsTS5fKWAke2UuZXZhbHVhdGVkfS5keW5hbWljUHJvcHNgLCgpPT50LmFzc2lnbigoMCxNLl8pYCR7ZS5ldmFsdWF0ZWR9LnByb3BzYCwoMCxNLl8pYHVuZGVmaW5lZGApKSx0LmlmKCgwLE0uXylgJHtlLmV2YWx1YXRlZH0uZHluYW1pY0l0ZW1zYCwoKT0+dC5hc3NpZ24oKDAsTS5fKWAke2UuZXZhbHVhdGVkfS5pdGVtc2AsKDAsTS5fKWB1bmRlZmluZWRgKSl9ZnVuY3Rpb24gRWEoZSx0KXtjb25zdCByPXR5cGVvZiBlPT0ib2JqZWN0IiYmZVt0LnNjaGVtYUlkXTtyZXR1cm4gciYmKHQuY29kZS5zb3VyY2V8fHQuY29kZS5wcm9jZXNzKT8oMCxNLl8pYC8qIyBzb3VyY2VVUkw9JHtyfSAqL2A6TS5uaWx9ZnVuY3Rpb24gX3UoZSx0KXtpZigkYShlKSYmKHdhKGUpLHlhKGUpKSl7Z3UoZSx0KTtyZXR1cm59KDAsdmEuYm9vbE9yRW1wdHlTY2hlbWEpKGUsdCl9ZnVuY3Rpb24geWEoe3NjaGVtYTplLHNlbGY6dH0pe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIWU7Zm9yKGNvbnN0IHIgaW4gZSlpZih0LlJVTEVTLmFsbFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiAkYShlKXtyZXR1cm4gdHlwZW9mIGUuc2NoZW1hIT0iYm9vbGVhbiJ9ZnVuY3Rpb24gZ3UoZSx0KXtjb25zdHtzY2hlbWE6cixnZW46bixvcHRzOnN9PWU7cy4kY29tbWVudCYmci4kY29tbWVudCYmUmEoZSksJHUoZSksd3UoZSk7Y29uc3QgYT1uLmNvbnN0KCJfZXJycyIsSi5kZWZhdWx0LmVycm9ycyk7U2EoZSxhKSxuLnZhcih0LCgwLE0uXylgJHthfSA9PT0gJHtKLmRlZmF1bHQuZXJyb3JzfWApfWZ1bmN0aW9uIHdhKGUpeygwLGZ0LmNoZWNrVW5rbm93blJ1bGVzKShlKSxFdShlKX1mdW5jdGlvbiBTYShlLHQpe2lmKGUub3B0cy5qdGQpcmV0dXJuIGJhKGUsW10sITEsdCk7Y29uc3Qgcj0oMCxfYS5nZXRTY2hlbWFUeXBlcykoZS5zY2hlbWEpLG49KDAsX2EuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSkoZSxyKTtiYShlLHIsIW4sdCl9ZnVuY3Rpb24gRXUoZSl7Y29uc3R7c2NoZW1hOnQsZXJyU2NoZW1hUGF0aDpyLG9wdHM6bixzZWxmOnN9PWU7dC4kcmVmJiZuLmlnbm9yZUtleXdvcmRzV2l0aFJlZiYmKDAsZnQuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHQscy5SVUxFUykmJnMubG9nZ2VyLndhcm4oYCRyZWY6IGtleXdvcmRzIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggIiR7cn0iYCl9ZnVuY3Rpb24geXUoZSl7Y29uc3R7c2NoZW1hOnQsb3B0czpyfT1lO3QuZGVmYXVsdCE9PXZvaWQgMCYmci51c2VEZWZhdWx0cyYmci5zdHJpY3RTY2hlbWEmJigwLGZ0LmNoZWNrU3RyaWN0TW9kZSkoZSwiZGVmYXVsdCBpcyBpZ25vcmVkIGluIHRoZSBzY2hlbWEgcm9vdCIpfWZ1bmN0aW9uICR1KGUpe2NvbnN0IHQ9ZS5zY2hlbWFbZS5vcHRzLnNjaGVtYUlkXTt0JiYoZS5iYXNlSWQ9KDAsZnUucmVzb2x2ZVVybCkoZS5vcHRzLnVyaVJlc29sdmVyLGUuYmFzZUlkLHQpKX1mdW5jdGlvbiB3dShlKXtpZihlLnNjaGVtYS4kYXN5bmMmJiFlLnNjaGVtYUVudi4kYXN5bmMpdGhyb3cgbmV3IEVycm9yKCJhc3luYyBzY2hlbWEgaW4gc3luYyBzY2hlbWEiKX1mdW5jdGlvbiBSYSh7Z2VuOmUsc2NoZW1hRW52OnQsc2NoZW1hOnIsZXJyU2NoZW1hUGF0aDpuLG9wdHM6c30pe2NvbnN0IGE9ci4kY29tbWVudDtpZihzLiRjb21tZW50PT09ITApZS5jb2RlKCgwLE0uXylgJHtKLmRlZmF1bHQuc2VsZn0ubG9nZ2VyLmxvZygke2F9KWApO2Vsc2UgaWYodHlwZW9mIHMuJGNvbW1lbnQ9PSJmdW5jdGlvbiIpe2NvbnN0IG89KDAsTS5zdHIpYCR7bn0vJGNvbW1lbnRgLGw9ZS5zY29wZVZhbHVlKCJyb290Iix7cmVmOnQucm9vdH0pO2UuY29kZSgoMCxNLl8pYCR7Si5kZWZhdWx0LnNlbGZ9Lm9wdHMuJGNvbW1lbnQoJHthfSwgJHtvfSwgJHtsfS5zY2hlbWEpYCl9fWZ1bmN0aW9uIFN1KGUpe2NvbnN0e2dlbjp0LHNjaGVtYUVudjpyLHZhbGlkYXRlTmFtZTpuLFZhbGlkYXRpb25FcnJvcjpzLG9wdHM6YX09ZTtyLiRhc3luYz90LmlmKCgwLE0uXylgJHtKLmRlZmF1bHQuZXJyb3JzfSA9PT0gMGAsKCk9PnQucmV0dXJuKEouZGVmYXVsdC5kYXRhKSwoKT0+dC50aHJvdygoMCxNLl8pYG5ldyAke3N9KCR7Si5kZWZhdWx0LnZFcnJvcnN9KWApKToodC5hc3NpZ24oKDAsTS5fKWAke259LmVycm9yc2AsSi5kZWZhdWx0LnZFcnJvcnMpLGEudW5ldmFsdWF0ZWQmJlJ1KGUpLHQucmV0dXJuKCgwLE0uXylgJHtKLmRlZmF1bHQuZXJyb3JzfSA9PT0gMGApKX1mdW5jdGlvbiBSdSh7Z2VuOmUsZXZhbHVhdGVkOnQscHJvcHM6cixpdGVtczpufSl7ciBpbnN0YW5jZW9mIE0uTmFtZSYmZS5hc3NpZ24oKDAsTS5fKWAke3R9LnByb3BzYCxyKSxuIGluc3RhbmNlb2YgTS5OYW1lJiZlLmFzc2lnbigoMCxNLl8pYCR7dH0uaXRlbXNgLG4pfWZ1bmN0aW9uIGJhKGUsdCxyLG4pe2NvbnN0e2dlbjpzLHNjaGVtYTphLGRhdGE6byxhbGxFcnJvcnM6bCxvcHRzOmYsc2VsZjpwfT1lLHtSVUxFUzppfT1wO2lmKGEuJHJlZiYmKGYuaWdub3JlS2V5d29yZHNXaXRoUmVmfHwhKDAsZnQuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKGEsaSkpKXtzLmJsb2NrKCgpPT5UYShlLCIkcmVmIixpLmFsbC4kcmVmLmRlZmluaXRpb24pKTtyZXR1cm59Zi5qdGR8fGJ1KGUsdCkscy5ibG9jaygoKT0+e2Zvcihjb25zdCBFIG9mIGkucnVsZXMpaChFKTtoKGkucG9zdCl9KTtmdW5jdGlvbiBoKEUpeyEoMCxHbi5zaG91bGRVc2VHcm91cCkoYSxFKXx8KEUudHlwZT8ocy5pZigoMCxvbi5jaGVja0RhdGFUeXBlKShFLnR5cGUsbyxmLnN0cmljdE51bWJlcnMpKSxPYShlLEUpLHQubGVuZ3RoPT09MSYmdFswXT09PUUudHlwZSYmciYmKHMuZWxzZSgpLCgwLG9uLnJlcG9ydFR5cGVFcnJvcikoZSkpLHMuZW5kSWYoKSk6T2EoZSxFKSxsfHxzLmlmKCgwLE0uXylgJHtKLmRlZmF1bHQuZXJyb3JzfSA9PT0gJHtufHwwfWApKX19ZnVuY3Rpb24gT2EoZSx0KXtjb25zdHtnZW46cixzY2hlbWE6bixvcHRzOnt1c2VEZWZhdWx0czpzfX09ZTtzJiYoMCxsdS5hc3NpZ25EZWZhdWx0cykoZSx0LnR5cGUpLHIuYmxvY2soKCk9Pntmb3IoY29uc3QgYSBvZiB0LnJ1bGVzKSgwLEduLnNob3VsZFVzZVJ1bGUpKG4sYSkmJlRhKGUsYS5rZXl3b3JkLGEuZGVmaW5pdGlvbix0LnR5cGUpfSl9ZnVuY3Rpb24gYnUoZSx0KXtlLnNjaGVtYUVudi5tZXRhfHwhZS5vcHRzLnN0cmljdFR5cGVzfHwoT3UoZSx0KSxlLm9wdHMuYWxsb3dVbmlvblR5cGVzfHxOdShlLHQpLFB1KGUsZS5kYXRhVHlwZXMpKX1mdW5jdGlvbiBPdShlLHQpe2lmKCEhdC5sZW5ndGgpe2lmKCFlLmRhdGFUeXBlcy5sZW5ndGgpe2UuZGF0YVR5cGVzPXQ7cmV0dXJufXQuZm9yRWFjaChyPT57TmEoZS5kYXRhVHlwZXMscil8fFluKGUsYHR5cGUgIiR7cn0iIG5vdCBhbGxvd2VkIGJ5IGNvbnRleHQgIiR7ZS5kYXRhVHlwZXMuam9pbigiLCIpfSJgKX0pLGUuZGF0YVR5cGVzPWUuZGF0YVR5cGVzLmZpbHRlcihyPT5OYSh0LHIpKX19ZnVuY3Rpb24gTnUoZSx0KXt0Lmxlbmd0aD4xJiYhKHQubGVuZ3RoPT09MiYmdC5pbmNsdWRlcygibnVsbCIpKSYmWW4oZSwidXNlIGFsbG93VW5pb25UeXBlcyB0byBhbGxvdyB1bmlvbiB0eXBlIGtleXdvcmQiKX1mdW5jdGlvbiBQdShlLHQpe2NvbnN0IHI9ZS5zZWxmLlJVTEVTLmFsbDtmb3IoY29uc3QgbiBpbiByKXtjb25zdCBzPXJbbl07aWYodHlwZW9mIHM9PSJvYmplY3QiJiYoMCxHbi5zaG91bGRVc2VSdWxlKShlLnNjaGVtYSxzKSl7Y29uc3R7dHlwZTphfT1zLmRlZmluaXRpb247YS5sZW5ndGgmJiFhLnNvbWUobz0+VHUodCxvKSkmJlluKGUsYG1pc3NpbmcgdHlwZSAiJHthLmpvaW4oIiwiKX0iIGZvciBrZXl3b3JkICIke259ImApfX19ZnVuY3Rpb24gVHUoZSx0KXtyZXR1cm4gZS5pbmNsdWRlcyh0KXx8dD09PSJudW1iZXIiJiZlLmluY2x1ZGVzKCJpbnRlZ2VyIil9ZnVuY3Rpb24gTmEoZSx0KXtyZXR1cm4gZS5pbmNsdWRlcyh0KXx8dD09PSJpbnRlZ2VyIiYmZS5pbmNsdWRlcygibnVtYmVyIil9ZnVuY3Rpb24gWW4oZSx0KXt0Kz1gIGF0ICIke2Uuc2NoZW1hRW52LmJhc2VJZCtlLmVyclNjaGVtYVBhdGh9IiAoc3RyaWN0VHlwZXMpYCwoMCxmdC5jaGVja1N0cmljdE1vZGUpKGUsdCxlLm9wdHMuc3RyaWN0VHlwZXMpfWNsYXNzIFBhe2NvbnN0cnVjdG9yKHQscixuKXtpZigoMCwkci52YWxpZGF0ZUtleXdvcmRVc2FnZSkodCxyLG4pLHRoaXMuZ2VuPXQuZ2VuLHRoaXMuYWxsRXJyb3JzPXQuYWxsRXJyb3JzLHRoaXMua2V5d29yZD1uLHRoaXMuZGF0YT10LmRhdGEsdGhpcy5zY2hlbWE9dC5zY2hlbWFbbl0sdGhpcy4kZGF0YT1yLiRkYXRhJiZ0Lm9wdHMuJGRhdGEmJnRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS4kZGF0YSx0aGlzLnNjaGVtYVZhbHVlPSgwLGZ0LnNjaGVtYVJlZk9yVmFsKSh0LHRoaXMuc2NoZW1hLG4sdGhpcy4kZGF0YSksdGhpcy5zY2hlbWFUeXBlPXIuc2NoZW1hVHlwZSx0aGlzLnBhcmVudFNjaGVtYT10LnNjaGVtYSx0aGlzLnBhcmFtcz17fSx0aGlzLml0PXQsdGhpcy5kZWY9cix0aGlzLiRkYXRhKXRoaXMuc2NoZW1hQ29kZT10Lmdlbi5jb25zdCgidlNjaGVtYSIsQWEodGhpcy4kZGF0YSx0KSk7ZWxzZSBpZih0aGlzLnNjaGVtYUNvZGU9dGhpcy5zY2hlbWFWYWx1ZSwhKDAsJHIudmFsaWRTY2hlbWFUeXBlKSh0aGlzLnNjaGVtYSxyLnNjaGVtYVR5cGUsci5hbGxvd1VuZGVmaW5lZCkpdGhyb3cgbmV3IEVycm9yKGAke259IHZhbHVlIG11c3QgYmUgJHtKU09OLnN0cmluZ2lmeShyLnNjaGVtYVR5cGUpfWApOygiY29kZSJpbiByP3IudHJhY2tFcnJvcnM6ci5lcnJvcnMhPT0hMSkmJih0aGlzLmVycnNDb3VudD10Lmdlbi5jb25zdCgiX2VycnMiLEouZGVmYXVsdC5lcnJvcnMpKX1yZXN1bHQodCxyLG4pe3RoaXMuZmFpbFJlc3VsdCgoMCxNLm5vdCkodCkscixuKX1mYWlsUmVzdWx0KHQscixuKXt0aGlzLmdlbi5pZih0KSxuP24oKTp0aGlzLmVycm9yKCkscj8odGhpcy5nZW4uZWxzZSgpLHIoKSx0aGlzLmFsbEVycm9ycyYmdGhpcy5nZW4uZW5kSWYoKSk6dGhpcy5hbGxFcnJvcnM/dGhpcy5nZW4uZW5kSWYoKTp0aGlzLmdlbi5lbHNlKCl9cGFzcyh0LHIpe3RoaXMuZmFpbFJlc3VsdCgoMCxNLm5vdCkodCksdm9pZCAwLHIpfWZhaWwodCl7aWYodD09PXZvaWQgMCl7dGhpcy5lcnJvcigpLHRoaXMuYWxsRXJyb3JzfHx0aGlzLmdlbi5pZighMSk7cmV0dXJufXRoaXMuZ2VuLmlmKHQpLHRoaXMuZXJyb3IoKSx0aGlzLmFsbEVycm9ycz90aGlzLmdlbi5lbmRJZigpOnRoaXMuZ2VuLmVsc2UoKX1mYWlsJGRhdGEodCl7aWYoIXRoaXMuJGRhdGEpcmV0dXJuIHRoaXMuZmFpbCh0KTtjb25zdHtzY2hlbWFDb2RlOnJ9PXRoaXM7dGhpcy5mYWlsKCgwLE0uXylgJHtyfSAhPT0gdW5kZWZpbmVkICYmICgkeygwLE0ub3IpKHRoaXMuaW52YWxpZCRkYXRhKCksdCl9KWApfWVycm9yKHQscixuKXtpZihyKXt0aGlzLnNldFBhcmFtcyhyKSx0aGlzLl9lcnJvcih0LG4pLHRoaXMuc2V0UGFyYW1zKHt9KTtyZXR1cm59dGhpcy5fZXJyb3IodCxuKX1fZXJyb3IodCxyKXsodD93ci5yZXBvcnRFeHRyYUVycm9yOndyLnJlcG9ydEVycm9yKSh0aGlzLHRoaXMuZGVmLmVycm9yLHIpfSRkYXRhRXJyb3IoKXsoMCx3ci5yZXBvcnRFcnJvcikodGhpcyx0aGlzLmRlZi4kZGF0YUVycm9yfHx3ci5rZXl3b3JkJERhdGFFcnJvcil9cmVzZXQoKXtpZih0aGlzLmVycnNDb3VudD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoJ2FkZCAidHJhY2tFcnJvcnMiIHRvIGtleXdvcmQgZGVmaW5pdGlvbicpOygwLHdyLnJlc2V0RXJyb3JzQ291bnQpKHRoaXMuZ2VuLHRoaXMuZXJyc0NvdW50KX1vayh0KXt0aGlzLmFsbEVycm9yc3x8dGhpcy5nZW4uaWYodCl9c2V0UGFyYW1zKHQscil7cj9PYmplY3QuYXNzaWduKHRoaXMucGFyYW1zLHQpOnRoaXMucGFyYW1zPXR9YmxvY2skZGF0YSh0LHIsbj1NLm5pbCl7dGhpcy5nZW4uYmxvY2soKCk9Pnt0aGlzLmNoZWNrJGRhdGEodCxuKSxyKCl9KX1jaGVjayRkYXRhKHQ9TS5uaWwscj1NLm5pbCl7aWYoIXRoaXMuJGRhdGEpcmV0dXJuO2NvbnN0e2dlbjpuLHNjaGVtYUNvZGU6cyxzY2hlbWFUeXBlOmEsZGVmOm99PXRoaXM7bi5pZigoMCxNLm9yKSgoMCxNLl8pYCR7c30gPT09IHVuZGVmaW5lZGAscikpLHQhPT1NLm5pbCYmbi5hc3NpZ24odCwhMCksKGEubGVuZ3RofHxvLnZhbGlkYXRlU2NoZW1hKSYmKG4uZWxzZUlmKHRoaXMuaW52YWxpZCRkYXRhKCkpLHRoaXMuJGRhdGFFcnJvcigpLHQhPT1NLm5pbCYmbi5hc3NpZ24odCwhMSkpLG4uZWxzZSgpfWludmFsaWQkZGF0YSgpe2NvbnN0e2dlbjp0LHNjaGVtYUNvZGU6cixzY2hlbWFUeXBlOm4sZGVmOnMsaXQ6YX09dGhpcztyZXR1cm4oMCxNLm9yKShvKCksbCgpKTtmdW5jdGlvbiBvKCl7aWYobi5sZW5ndGgpe2lmKCEociBpbnN0YW5jZW9mIE0uTmFtZSkpdGhyb3cgbmV3IEVycm9yKCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3IiKTtjb25zdCBmPUFycmF5LmlzQXJyYXkobik/bjpbbl07cmV0dXJuKDAsTS5fKWAkeygwLG9uLmNoZWNrRGF0YVR5cGVzKShmLHIsYS5vcHRzLnN0cmljdE51bWJlcnMsb24uRGF0YVR5cGUuV3JvbmcpfWB9cmV0dXJuIE0ubmlsfWZ1bmN0aW9uIGwoKXtpZihzLnZhbGlkYXRlU2NoZW1hKXtjb25zdCBmPXQuc2NvcGVWYWx1ZSgidmFsaWRhdGUkZGF0YSIse3JlZjpzLnZhbGlkYXRlU2NoZW1hfSk7cmV0dXJuKDAsTS5fKWAhJHtmfSgke3J9KWB9cmV0dXJuIE0ubmlsfX1zdWJzY2hlbWEodCxyKXtjb25zdCBuPSgwLFFuLmdldFN1YnNjaGVtYSkodGhpcy5pdCx0KTsoMCxRbi5leHRlbmRTdWJzY2hlbWFEYXRhKShuLHRoaXMuaXQsdCksKDAsUW4uZXh0ZW5kU3Vic2NoZW1hTW9kZSkobix0KTtjb25zdCBzPWxlKFEoUSh7fSx0aGlzLml0KSxuKSx7aXRlbXM6dm9pZCAwLHByb3BzOnZvaWQgMH0pO3JldHVybiBfdShzLHIpLHN9bWVyZ2VFdmFsdWF0ZWQodCxyKXtjb25zdHtpdDpuLGdlbjpzfT10aGlzOyFuLm9wdHMudW5ldmFsdWF0ZWR8fChuLnByb3BzIT09ITAmJnQucHJvcHMhPT12b2lkIDAmJihuLnByb3BzPWZ0Lm1lcmdlRXZhbHVhdGVkLnByb3BzKHMsdC5wcm9wcyxuLnByb3BzLHIpKSxuLml0ZW1zIT09ITAmJnQuaXRlbXMhPT12b2lkIDAmJihuLml0ZW1zPWZ0Lm1lcmdlRXZhbHVhdGVkLml0ZW1zKHMsdC5pdGVtcyxuLml0ZW1zLHIpKSl9bWVyZ2VWYWxpZEV2YWx1YXRlZCh0LHIpe2NvbnN0e2l0Om4sZ2VuOnN9PXRoaXM7aWYobi5vcHRzLnVuZXZhbHVhdGVkJiYobi5wcm9wcyE9PSEwfHxuLml0ZW1zIT09ITApKXJldHVybiBzLmlmKHIsKCk9PnRoaXMubWVyZ2VFdmFsdWF0ZWQodCxNLk5hbWUpKSwhMH19V2UuS2V5d29yZEN4dD1QYTtmdW5jdGlvbiBUYShlLHQscixuKXtjb25zdCBzPW5ldyBQYShlLHIsdCk7ImNvZGUiaW4gcj9yLmNvZGUocyxuKTpzLiRkYXRhJiZyLnZhbGlkYXRlPygwLCRyLmZ1bmNLZXl3b3JkQ29kZSkocyxyKToibWFjcm8iaW4gcj8oMCwkci5tYWNyb0tleXdvcmRDb2RlKShzLHIpOihyLmNvbXBpbGV8fHIudmFsaWRhdGUpJiYoMCwkci5mdW5jS2V5d29yZENvZGUpKHMscil9Y29uc3QgQXU9L15cLyg/Oltefl18fjB8fjEpKiQvLEN1PS9eKFswLTldKykoI3xcLyg/Oltefl18fjB8fjEpKik/JC87ZnVuY3Rpb24gQWEoZSx7ZGF0YUxldmVsOnQsZGF0YU5hbWVzOnIsZGF0YVBhdGhBcnI6bn0pe2xldCBzLGE7aWYoZT09PSIiKXJldHVybiBKLmRlZmF1bHQucm9vdERhdGE7aWYoZVswXT09PSIvIil7aWYoIUF1LnRlc3QoZSkpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04tcG9pbnRlcjogJHtlfWApO3M9ZSxhPUouZGVmYXVsdC5yb290RGF0YX1lbHNle2NvbnN0IHA9Q3UuZXhlYyhlKTtpZighcCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSlNPTi1wb2ludGVyOiAke2V9YCk7Y29uc3QgaT0rcFsxXTtpZihzPXBbMl0scz09PSIjIil7aWYoaT49dCl0aHJvdyBuZXcgRXJyb3IoZigicHJvcGVydHkvaW5kZXgiLGkpKTtyZXR1cm4gblt0LWldfWlmKGk+dCl0aHJvdyBuZXcgRXJyb3IoZigiZGF0YSIsaSkpO2lmKGE9clt0LWldLCFzKXJldHVybiBhfWxldCBvPWE7Y29uc3QgbD1zLnNwbGl0KCIvIik7Zm9yKGNvbnN0IHAgb2YgbClwJiYoYT0oMCxNLl8pYCR7YX0keygwLE0uZ2V0UHJvcGVydHkpKCgwLGZ0LnVuZXNjYXBlSnNvblBvaW50ZXIpKHApKX1gLG89KDAsTS5fKWAke299ICYmICR7YX1gKTtyZXR1cm4gbztmdW5jdGlvbiBmKHAsaSl7cmV0dXJuYENhbm5vdCBhY2Nlc3MgJHtwfSAke2l9IGxldmVscyB1cCwgY3VycmVudCBsZXZlbCBpcyAke3R9YH19V2UuZ2V0RGF0YT1BYTt2YXIgY249e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGNuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjbGFzcyBJdSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCJ2YWxpZGF0aW9uIGZhaWxlZCIpLHRoaXMuZXJyb3JzPXQsdGhpcy5hanY9dGhpcy52YWxpZGF0aW9uPSEwfX1jbi5kZWZhdWx0PUl1O3ZhciBrdD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoa3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IFduPVRlO2NsYXNzIER1IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxyLG4scyl7c3VwZXIoc3x8YGNhbid0IHJlc29sdmUgcmVmZXJlbmNlICR7bn0gZnJvbSBpZCAke3J9YCksdGhpcy5taXNzaW5nUmVmPSgwLFduLnJlc29sdmVVcmwpKHQscixuKSx0aGlzLm1pc3NpbmdTY2hlbWE9KDAsV24ubm9ybWFsaXplSWQpKCgwLFduLmdldEZ1bGxQYXRoKSh0LHRoaXMubWlzc2luZ1JlZikpfX1rdC5kZWZhdWx0PUR1O3ZhciBDZT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2UsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLENlLnJlc29sdmVTY2hlbWE9Q2UuZ2V0Q29tcGlsaW5nU2NoZW1hPUNlLnJlc29sdmVSZWY9Q2UuY29tcGlsZVNjaGVtYT1DZS5TY2hlbWFFbnY9dm9pZCAwO2NvbnN0IFFlPXVlLGp1PWNuLFV0PUxlLFllPVRlLENhPWJlLGt1PVdlO2NsYXNzIHVue2NvbnN0cnVjdG9yKHQpe3ZhciByO3RoaXMucmVmcz17fSx0aGlzLmR5bmFtaWNBbmNob3JzPXt9O2xldCBuO3R5cGVvZiB0LnNjaGVtYT09Im9iamVjdCImJihuPXQuc2NoZW1hKSx0aGlzLnNjaGVtYT10LnNjaGVtYSx0aGlzLnNjaGVtYUlkPXQuc2NoZW1hSWQsdGhpcy5yb290PXQucm9vdHx8dGhpcyx0aGlzLmJhc2VJZD0ocj10LmJhc2VJZCkhPT1udWxsJiZyIT09dm9pZCAwP3I6KDAsWWUubm9ybWFsaXplSWQpKG49PW51bGw/dm9pZCAwOm5bdC5zY2hlbWFJZHx8IiRpZCJdKSx0aGlzLnNjaGVtYVBhdGg9dC5zY2hlbWFQYXRoLHRoaXMubG9jYWxSZWZzPXQubG9jYWxSZWZzLHRoaXMubWV0YT10Lm1ldGEsdGhpcy4kYXN5bmM9bj09bnVsbD92b2lkIDA6bi4kYXN5bmMsdGhpcy5yZWZzPXt9fX1DZS5TY2hlbWFFbnY9dW47ZnVuY3Rpb24gWG4oZSl7Y29uc3QgdD1JYS5jYWxsKHRoaXMsZSk7aWYodClyZXR1cm4gdDtjb25zdCByPSgwLFllLmdldEZ1bGxQYXRoKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsZS5yb290LmJhc2VJZCkse2VzNTpuLGxpbmVzOnN9PXRoaXMub3B0cy5jb2RlLHtvd25Qcm9wZXJ0aWVzOmF9PXRoaXMub3B0cyxvPW5ldyBRZS5Db2RlR2VuKHRoaXMuc2NvcGUse2VzNTpuLGxpbmVzOnMsb3duUHJvcGVydGllczphfSk7bGV0IGw7ZS4kYXN5bmMmJihsPW8uc2NvcGVWYWx1ZSgiRXJyb3IiLHtyZWY6anUuZGVmYXVsdCxjb2RlOigwLFFlLl8pYHJlcXVpcmUoImFqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvciIpLmRlZmF1bHRgfSkpO2NvbnN0IGY9by5zY29wZU5hbWUoInZhbGlkYXRlIik7ZS52YWxpZGF0ZU5hbWU9Zjtjb25zdCBwPXtnZW46byxhbGxFcnJvcnM6dGhpcy5vcHRzLmFsbEVycm9ycyxkYXRhOlV0LmRlZmF1bHQuZGF0YSxwYXJlbnREYXRhOlV0LmRlZmF1bHQucGFyZW50RGF0YSxwYXJlbnREYXRhUHJvcGVydHk6VXQuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksZGF0YU5hbWVzOltVdC5kZWZhdWx0LmRhdGFdLGRhdGFQYXRoQXJyOltRZS5uaWxdLGRhdGFMZXZlbDowLGRhdGFUeXBlczpbXSxkZWZpbmVkUHJvcGVydGllczpuZXcgU2V0LHRvcFNjaGVtYVJlZjpvLnNjb3BlVmFsdWUoInNjaGVtYSIsdGhpcy5vcHRzLmNvZGUuc291cmNlPT09ITA/e3JlZjplLnNjaGVtYSxjb2RlOigwLFFlLnN0cmluZ2lmeSkoZS5zY2hlbWEpfTp7cmVmOmUuc2NoZW1hfSksdmFsaWRhdGVOYW1lOmYsVmFsaWRhdGlvbkVycm9yOmwsc2NoZW1hOmUuc2NoZW1hLHNjaGVtYUVudjplLHJvb3RJZDpyLGJhc2VJZDplLmJhc2VJZHx8cixzY2hlbWFQYXRoOlFlLm5pbCxlcnJTY2hlbWFQYXRoOmUuc2NoZW1hUGF0aHx8KHRoaXMub3B0cy5qdGQ/IiI6IiMiKSxlcnJvclBhdGg6KDAsUWUuXylgIiJgLG9wdHM6dGhpcy5vcHRzLHNlbGY6dGhpc307bGV0IGk7dHJ5e3RoaXMuX2NvbXBpbGF0aW9ucy5hZGQoZSksKDAsa3UudmFsaWRhdGVGdW5jdGlvbkNvZGUpKHApLG8ub3B0aW1pemUodGhpcy5vcHRzLmNvZGUub3B0aW1pemUpO2NvbnN0IGg9by50b1N0cmluZygpO2k9YCR7by5zY29wZVJlZnMoVXQuZGVmYXVsdC5zY29wZSl9cmV0dXJuICR7aH1gLHRoaXMub3B0cy5jb2RlLnByb2Nlc3MmJihpPXRoaXMub3B0cy5jb2RlLnByb2Nlc3MoaSxlKSk7Y29uc3QgVD1uZXcgRnVuY3Rpb24oYCR7VXQuZGVmYXVsdC5zZWxmfWAsYCR7VXQuZGVmYXVsdC5zY29wZX1gLGkpKHRoaXMsdGhpcy5zY29wZS5nZXQoKSk7aWYodGhpcy5zY29wZS52YWx1ZShmLHtyZWY6VH0pLFQuZXJyb3JzPW51bGwsVC5zY2hlbWE9ZS5zY2hlbWEsVC5zY2hlbWFFbnY9ZSxlLiRhc3luYyYmKFQuJGFzeW5jPSEwKSx0aGlzLm9wdHMuY29kZS5zb3VyY2U9PT0hMCYmKFQuc291cmNlPXt2YWxpZGF0ZU5hbWU6Zix2YWxpZGF0ZUNvZGU6aCxzY29wZVZhbHVlczpvLl92YWx1ZXN9KSx0aGlzLm9wdHMudW5ldmFsdWF0ZWQpe2NvbnN0e3Byb3BzOkksaXRlbXM6an09cDtULmV2YWx1YXRlZD17cHJvcHM6SSBpbnN0YW5jZW9mIFFlLk5hbWU/dm9pZCAwOkksaXRlbXM6aiBpbnN0YW5jZW9mIFFlLk5hbWU/dm9pZCAwOmosZHluYW1pY1Byb3BzOkkgaW5zdGFuY2VvZiBRZS5OYW1lLGR5bmFtaWNJdGVtczpqIGluc3RhbmNlb2YgUWUuTmFtZX0sVC5zb3VyY2UmJihULnNvdXJjZS5ldmFsdWF0ZWQ9KDAsUWUuc3RyaW5naWZ5KShULmV2YWx1YXRlZCkpfXJldHVybiBlLnZhbGlkYXRlPVQsZX1jYXRjaChoKXt0aHJvdyBkZWxldGUgZS52YWxpZGF0ZSxkZWxldGUgZS52YWxpZGF0ZU5hbWUsaSYmdGhpcy5sb2dnZXIuZXJyb3IoIkVycm9yIGNvbXBpbGluZyBzY2hlbWEsIGZ1bmN0aW9uIGNvZGU6IixpKSxofWZpbmFsbHl7dGhpcy5fY29tcGlsYXRpb25zLmRlbGV0ZShlKX19Q2UuY29tcGlsZVNjaGVtYT1YbjtmdW5jdGlvbiBVdShlLHQscil7dmFyIG47cj0oMCxZZS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsdCxyKTtjb25zdCBzPWUucmVmc1tyXTtpZihzKXJldHVybiBzO2xldCBhPUx1LmNhbGwodGhpcyxlLHIpO2lmKGE9PT12b2lkIDApe2NvbnN0IG89KG49ZS5sb2NhbFJlZnMpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bltyXSx7c2NoZW1hSWQ6bH09dGhpcy5vcHRzO28mJihhPW5ldyB1bih7c2NoZW1hOm8sc2NoZW1hSWQ6bCxyb290OmUsYmFzZUlkOnR9KSl9aWYoYSE9PXZvaWQgMClyZXR1cm4gZS5yZWZzW3JdPUZ1LmNhbGwodGhpcyxhKX1DZS5yZXNvbHZlUmVmPVV1O2Z1bmN0aW9uIEZ1KGUpe3JldHVybigwLFllLmlubGluZVJlZikoZS5zY2hlbWEsdGhpcy5vcHRzLmlubGluZVJlZnMpP2Uuc2NoZW1hOmUudmFsaWRhdGU/ZTpYbi5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSWEoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fY29tcGlsYXRpb25zKWlmKE11KHQsZSkpcmV0dXJuIHR9Q2UuZ2V0Q29tcGlsaW5nU2NoZW1hPUlhO2Z1bmN0aW9uIE11KGUsdCl7cmV0dXJuIGUuc2NoZW1hPT09dC5zY2hlbWEmJmUucm9vdD09PXQucm9vdCYmZS5iYXNlSWQ9PT10LmJhc2VJZH1mdW5jdGlvbiBMdShlLHQpe2xldCByO2Zvcig7dHlwZW9mKHI9dGhpcy5yZWZzW3RdKT09InN0cmluZyI7KXQ9cjtyZXR1cm4gcnx8dGhpcy5zY2hlbWFzW3RdfHxsbi5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBsbihlLHQpe2NvbnN0IHI9dGhpcy5vcHRzLnVyaVJlc29sdmVyLnBhcnNlKHQpLG49KDAsWWUuX2dldEZ1bGxQYXRoKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIscik7bGV0IHM9KDAsWWUuZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlcixlLmJhc2VJZCx2b2lkIDApO2lmKE9iamVjdC5rZXlzKGUuc2NoZW1hKS5sZW5ndGg+MCYmbj09PXMpcmV0dXJuIFpuLmNhbGwodGhpcyxyLGUpO2NvbnN0IGE9KDAsWWUubm9ybWFsaXplSWQpKG4pLG89dGhpcy5yZWZzW2FdfHx0aGlzLnNjaGVtYXNbYV07aWYodHlwZW9mIG89PSJzdHJpbmciKXtjb25zdCBsPWxuLmNhbGwodGhpcyxlLG8pO3JldHVybiB0eXBlb2YobD09bnVsbD92b2lkIDA6bC5zY2hlbWEpIT0ib2JqZWN0Ij92b2lkIDA6Wm4uY2FsbCh0aGlzLHIsbCl9aWYodHlwZW9mKG89PW51bGw/dm9pZCAwOm8uc2NoZW1hKT09Im9iamVjdCIpe2lmKG8udmFsaWRhdGV8fFhuLmNhbGwodGhpcyxvKSxhPT09KDAsWWUubm9ybWFsaXplSWQpKHQpKXtjb25zdHtzY2hlbWE6bH09byx7c2NoZW1hSWQ6Zn09dGhpcy5vcHRzLHA9bFtmXTtyZXR1cm4gcCYmKHM9KDAsWWUucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLHMscCkpLG5ldyB1bih7c2NoZW1hOmwsc2NoZW1hSWQ6Zixyb290OmUsYmFzZUlkOnN9KX1yZXR1cm4gWm4uY2FsbCh0aGlzLHIsbyl9fUNlLnJlc29sdmVTY2hlbWE9bG47Y29uc3QgVnU9bmV3IFNldChbInByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsImVudW0iLCJkZXBlbmRlbmNpZXMiLCJkZWZpbml0aW9ucyJdKTtmdW5jdGlvbiBabihlLHtiYXNlSWQ6dCxzY2hlbWE6cixyb290Om59KXt2YXIgcztpZigoKHM9ZS5mcmFnbWVudCk9PT1udWxsfHxzPT09dm9pZCAwP3ZvaWQgMDpzWzBdKSE9PSIvIilyZXR1cm47Zm9yKGNvbnN0IGwgb2YgZS5mcmFnbWVudC5zbGljZSgxKS5zcGxpdCgiLyIpKXtpZih0eXBlb2Ygcj09ImJvb2xlYW4iKXJldHVybjtjb25zdCBmPXJbKDAsQ2EudW5lc2NhcGVGcmFnbWVudCkobCldO2lmKGY9PT12b2lkIDApcmV0dXJuO3I9Zjtjb25zdCBwPXR5cGVvZiByPT0ib2JqZWN0IiYmclt0aGlzLm9wdHMuc2NoZW1hSWRdOyFWdS5oYXMobCkmJnAmJih0PSgwLFllLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlcix0LHApKX1sZXQgYTtpZih0eXBlb2YgciE9ImJvb2xlYW4iJiZyLiRyZWYmJiEoMCxDYS5zY2hlbWFIYXNSdWxlc0J1dFJlZikocix0aGlzLlJVTEVTKSl7Y29uc3QgbD0oMCxZZS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsdCxyLiRyZWYpO2E9bG4uY2FsbCh0aGlzLG4sbCl9Y29uc3R7c2NoZW1hSWQ6b309dGhpcy5vcHRzO2lmKGE9YXx8bmV3IHVuKHtzY2hlbWE6cixzY2hlbWFJZDpvLHJvb3Q6bixiYXNlSWQ6dH0pLGEuc2NoZW1hIT09YS5yb290LnNjaGVtYSlyZXR1cm4gYX12YXIgenU9eyRpZDoiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jIixkZXNjcmlwdGlvbjoiTWV0YS1zY2hlbWEgZm9yICRkYXRhIHJlZmVyZW5jZSAoSlNPTiBBbnlTY2hlbWEgZXh0ZW5zaW9uIHByb3Bvc2FsKSIsdHlwZToib2JqZWN0IixyZXF1aXJlZDpbIiRkYXRhIl0scHJvcGVydGllczp7JGRhdGE6e3R5cGU6InN0cmluZyIsYW55T2Y6W3tmb3JtYXQ6InJlbGF0aXZlLWpzb24tcG9pbnRlciJ9LHtmb3JtYXQ6Impzb24tcG9pbnRlciJ9XX19LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiExfSx4bj17fSxlcz17ZXhwb3J0czp7fX07LyoqIEBsaWNlbnNlIFVSSS5qcyB2NC40LjEgKGMpIDIwMTEgR2FyeSBDb3VydC4gTGljZW5zZTogaHR0cDovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L3VyaS1qcyAqLyhmdW5jdGlvbihlLHQpeyhmdW5jdGlvbihyLG4pe24odCl9KShlZSxmdW5jdGlvbihyKXtmdW5jdGlvbiBuKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsdT1BcnJheShkKSx2PTA7djxkO3YrKyl1W3ZdPWFyZ3VtZW50c1t2XTtpZih1Lmxlbmd0aD4xKXt1WzBdPXVbMF0uc2xpY2UoMCwtMSk7Zm9yKHZhciBSPXUubGVuZ3RoLTEsUz0xO1M8UjsrK1MpdVtTXT11W1NdLnNsaWNlKDEsLTEpO3JldHVybiB1W1JdPXVbUl0uc2xpY2UoMSksdS5qb2luKCIiKX1lbHNlIHJldHVybiB1WzBdfWZ1bmN0aW9uIHMoZCl7cmV0dXJuIig/OiIrZCsiKSJ9ZnVuY3Rpb24gYShkKXtyZXR1cm4gZD09PXZvaWQgMD8idW5kZWZpbmVkIjpkPT09bnVsbD8ibnVsbCI6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGQpLnNwbGl0KCIgIikucG9wKCkuc3BsaXQoIl0iKS5zaGlmdCgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gbyhkKXtyZXR1cm4gZC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIGwoZCl7cmV0dXJuIGQhPW51bGw/ZCBpbnN0YW5jZW9mIEFycmF5P2Q6dHlwZW9mIGQubGVuZ3RoIT0ibnVtYmVyInx8ZC5zcGxpdHx8ZC5zZXRJbnRlcnZhbHx8ZC5jYWxsP1tkXTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkKTpbXX1mdW5jdGlvbiBmKGQsdSl7dmFyIHY9ZDtpZih1KWZvcih2YXIgUiBpbiB1KXZbUl09dVtSXTtyZXR1cm4gdn1mdW5jdGlvbiBwKGQpe3ZhciB1PSJbQS1aYS16XSIsdj0iWzAtOV0iLFI9bih2LCJbQS1GYS1mXSIpLFM9cyhzKCIlW0VGZWZdIitSKyIlIitSK1IrIiUiK1IrUikrInwiK3MoIiVbODlBLUZhLWZdIitSKyIlIitSK1IpKyJ8IitzKCIlIitSK1IpKSx6PSJbXFw6XFwvXFw/XFwjXFxbXFxdXFxAXSIsSz0iW1xcIVxcJFxcJlxcJ1xcKFxcKVxcKlxcK1xcLFxcO1xcPV0iLHNlPW4oeixLKSxtZT1kPyJbXFx4QTAtXFx1MjAwRFxcdTIwMTAtXFx1MjAyOVxcdTIwMkYtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0iOiJbXSIsJGU9ZD8iW1xcdUUwMDAtXFx1RjhGRl0iOiJbXSIseD1uKHUsdiwiW1xcLVxcLlxcX1xcfl0iLG1lKTtzKHUrbih1LHYsIltcXCtcXC1cXC5dIikrIioiKSxzKHMoUysifCIrbih4LEssIltcXDpdIikpKyIqIik7dmFyIGZlPXMocygiMjVbMC01XSIpKyJ8IitzKCIyWzAtNF0iK3YpKyJ8IitzKCIxIit2K3YpKyJ8IitzKCIwP1sxLTldIit2KSsifDA/MD8iK3YpLHdlPXMoZmUrIlxcLiIrZmUrIlxcLiIrZmUrIlxcLiIrZmUpLHE9cyhSKyJ7MSw0fSIpLF9lPXMocyhxKyJcXDoiK3EpKyJ8Iit3ZSksUmU9cyhzKHErIlxcOiIpKyJ7Nn0iK19lKSxnZT1zKCJcXDpcXDoiK3MocSsiXFw6IikrIns1fSIrX2UpLFB0PXMocyhxKSsiP1xcOlxcOiIrcyhxKyJcXDoiKSsiezR9IitfZSksYXQ9cyhzKHMocSsiXFw6IikrInswLDF9IitxKSsiP1xcOlxcOiIrcyhxKyJcXDoiKSsiezN9IitfZSksb3Q9cyhzKHMocSsiXFw6IikrInswLDJ9IitxKSsiP1xcOlxcOiIrcyhxKyJcXDoiKSsiezJ9IitfZSksdnI9cyhzKHMocSsiXFw6IikrInswLDN9IitxKSsiP1xcOlxcOiIrcSsiXFw6IitfZSkscXQ9cyhzKHMocSsiXFw6IikrInswLDR9IitxKSsiP1xcOlxcOiIrX2UpLHFlPXMocyhzKHErIlxcOiIpKyJ7MCw1fSIrcSkrIj9cXDpcXDoiK3EpLGl0PXMocyhzKHErIlxcOiIpKyJ7MCw2fSIrcSkrIj9cXDpcXDoiKSxHdD1zKFtSZSxnZSxQdCxhdCxvdCx2cixxdCxxZSxpdF0uam9pbigifCIpKSxfdD1zKHMoeCsifCIrUykrIisiKTtzKCJbdlZdIitSKyIrXFwuIituKHgsSywiW1xcOl0iKSsiKyIpLHMocyhTKyJ8IituKHgsSykpKyIqIik7dmFyIEJyPXMoUysifCIrbih4LEssIltcXDpcXEBdIikpO3JldHVybiBzKHMoUysifCIrbih4LEssIltcXEBdIikpKyIrIikscyhzKEJyKyJ8IituKCJbXFwvXFw/XSIsJGUpKSsiKiIpLHtOT1RfU0NIRU1FOm5ldyBSZWdFeHAobigiW15dIix1LHYsIltcXCtcXC1cXC5dIiksImciKSxOT1RfVVNFUklORk86bmV3IFJlZ0V4cChuKCJbXlxcJVxcOl0iLHgsSyksImciKSxOT1RfSE9TVDpuZXcgUmVnRXhwKG4oIlteXFwlXFxbXFxdXFw6XSIseCxLKSwiZyIpLE5PVF9QQVRIOm5ldyBSZWdFeHAobigiW15cXCVcXC9cXDpcXEBdIix4LEspLCJnIiksTk9UX1BBVEhfTk9TQ0hFTUU6bmV3IFJlZ0V4cChuKCJbXlxcJVxcL1xcQF0iLHgsSyksImciKSxOT1RfUVVFUlk6bmV3IFJlZ0V4cChuKCJbXlxcJV0iLHgsSywiW1xcOlxcQFxcL1xcP10iLCRlKSwiZyIpLE5PVF9GUkFHTUVOVDpuZXcgUmVnRXhwKG4oIlteXFwlXSIseCxLLCJbXFw6XFxAXFwvXFw/XSIpLCJnIiksRVNDQVBFOm5ldyBSZWdFeHAobigiW15dIix4LEspLCJnIiksVU5SRVNFUlZFRDpuZXcgUmVnRXhwKHgsImciKSxPVEhFUl9DSEFSUzpuZXcgUmVnRXhwKG4oIlteXFwlXSIseCxzZSksImciKSxQQ1RfRU5DT0RFRDpuZXcgUmVnRXhwKFMsImciKSxJUFY0QUREUkVTUzpuZXcgUmVnRXhwKCJeKCIrd2UrIikkIiksSVBWNkFERFJFU1M6bmV3IFJlZ0V4cCgiXlxcWz8oIitHdCsiKSIrcyhzKCJcXCUyNXxcXCUoPyEiK1IrInsyfSkiKSsiKCIrX3QrIikiKSsiP1xcXT8kIil9fXZhciBpPXAoITEpLGg9cCghMCksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIGQodSx2KXt2YXIgUj1bXSxTPSEwLHo9ITEsSz12b2lkIDA7dHJ5e2Zvcih2YXIgc2U9dVtTeW1ib2wuaXRlcmF0b3JdKCksbWU7IShTPShtZT1zZS5uZXh0KCkpLmRvbmUpJiYoUi5wdXNoKG1lLnZhbHVlKSwhKHYmJlIubGVuZ3RoPT09dikpO1M9ITApO31jYXRjaCgkZSl7ej0hMCxLPSRlfWZpbmFsbHl7dHJ5eyFTJiZzZS5yZXR1cm4mJnNlLnJldHVybigpfWZpbmFsbHl7aWYoeil0aHJvdyBLfX1yZXR1cm4gUn1yZXR1cm4gZnVuY3Rpb24odSx2KXtpZihBcnJheS5pc0FycmF5KHUpKXJldHVybiB1O2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodSkpcmV0dXJuIGQodSx2KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9fSgpLFQ9ZnVuY3Rpb24oZCl7aWYoQXJyYXkuaXNBcnJheShkKSl7Zm9yKHZhciB1PTAsdj1BcnJheShkLmxlbmd0aCk7dTxkLmxlbmd0aDt1Kyspdlt1XT1kW3VdO3JldHVybiB2fWVsc2UgcmV0dXJuIEFycmF5LmZyb20oZCl9LEk9MjE0NzQ4MzY0NyxqPTM2LHk9MSxfPTI2LGI9MzgsTz03MDAsQT03MixIPTEyOCwkPSItIixOPS9eeG4tLS8sRD0vW15cMC1ceDdFXS8sQj0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csRz17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0scGU9ai15LFc9TWF0aC5mbG9vcixvZT1TdHJpbmcuZnJvbUNoYXJDb2RlO2Z1bmN0aW9uIFgoZCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoR1tkXSl9ZnVuY3Rpb24gdmUoZCx1KXtmb3IodmFyIHY9W10sUj1kLmxlbmd0aDtSLS07KXZbUl09dShkW1JdKTtyZXR1cm4gdn1mdW5jdGlvbiBFZShkLHUpe3ZhciB2PWQuc3BsaXQoIkAiKSxSPSIiO3YubGVuZ3RoPjEmJihSPXZbMF0rIkAiLGQ9dlsxXSksZD1kLnJlcGxhY2UoQiwiLiIpO3ZhciBTPWQuc3BsaXQoIi4iKSx6PXZlKFMsdSkuam9pbigiLiIpO3JldHVybiBSK3p9ZnVuY3Rpb24gTmUoZCl7Zm9yKHZhciB1PVtdLHY9MCxSPWQubGVuZ3RoO3Y8Ujspe3ZhciBTPWQuY2hhckNvZGVBdCh2KyspO2lmKFM+PTU1Mjk2JiZTPD01NjMxOSYmdjxSKXt2YXIgej1kLmNoYXJDb2RlQXQodisrKTsoeiY2NDUxMik9PTU2MzIwP3UucHVzaCgoKFMmMTAyMyk8PDEwKSsoeiYxMDIzKSs2NTUzNik6KHUucHVzaChTKSx2LS0pfWVsc2UgdS5wdXNoKFMpfXJldHVybiB1fXZhciBCZT1mdW5jdGlvbih1KXtyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLFQodSkpfSx1cj1mdW5jdGlvbih1KXtyZXR1cm4gdS00ODwxMD91LTIyOnUtNjU8MjY/dS02NTp1LTk3PDI2P3UtOTc6an0saz1mdW5jdGlvbih1LHYpe3JldHVybiB1KzIyKzc1Kih1PDI2KS0oKHYhPTApPDw1KX0sZz1mdW5jdGlvbih1LHYsUil7dmFyIFM9MDtmb3IodT1SP1codS9PKTp1Pj4xLHUrPVcodS92KTt1PnBlKl8+PjE7Uys9ail1PVcodS9wZSk7cmV0dXJuIFcoUysocGUrMSkqdS8odStiKSl9LEM9ZnVuY3Rpb24odSl7dmFyIHY9W10sUj11Lmxlbmd0aCxTPTAsej1ILEs9QSxzZT11Lmxhc3RJbmRleE9mKCQpO3NlPDAmJihzZT0wKTtmb3IodmFyIG1lPTA7bWU8c2U7KyttZSl1LmNoYXJDb2RlQXQobWUpPj0xMjgmJlgoIm5vdC1iYXNpYyIpLHYucHVzaCh1LmNoYXJDb2RlQXQobWUpKTtmb3IodmFyICRlPXNlPjA/c2UrMTowOyRlPFI7KXtmb3IodmFyIHg9UyxmZT0xLHdlPWo7O3dlKz1qKXskZT49UiYmWCgiaW52YWxpZC1pbnB1dCIpO3ZhciBxPXVyKHUuY2hhckNvZGVBdCgkZSsrKSk7KHE+PWp8fHE+VygoSS1TKS9mZSkpJiZYKCJvdmVyZmxvdyIpLFMrPXEqZmU7dmFyIF9lPXdlPD1LP3k6d2U+PUsrXz9fOndlLUs7aWYocTxfZSlicmVhazt2YXIgUmU9ai1fZTtmZT5XKEkvUmUpJiZYKCJvdmVyZmxvdyIpLGZlKj1SZX12YXIgZ2U9di5sZW5ndGgrMTtLPWcoUy14LGdlLHg9PTApLFcoUy9nZSk+SS16JiZYKCJvdmVyZmxvdyIpLHorPVcoUy9nZSksUyU9Z2Usdi5zcGxpY2UoUysrLDAseil9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZyx2KX0sdz1mdW5jdGlvbih1KXt2YXIgdj1bXTt1PU5lKHUpO3ZhciBSPXUubGVuZ3RoLFM9SCx6PTAsSz1BLHNlPSEwLG1lPSExLCRlPXZvaWQgMDt0cnl7Zm9yKHZhciB4PXVbU3ltYm9sLml0ZXJhdG9yXSgpLGZlOyEoc2U9KGZlPXgubmV4dCgpKS5kb25lKTtzZT0hMCl7dmFyIHdlPWZlLnZhbHVlO3dlPDEyOCYmdi5wdXNoKG9lKHdlKSl9fWNhdGNoKEpyKXttZT0hMCwkZT1Kcn1maW5hbGx5e3RyeXshc2UmJngucmV0dXJuJiZ4LnJldHVybigpfWZpbmFsbHl7aWYobWUpdGhyb3cgJGV9fXZhciBxPXYubGVuZ3RoLF9lPXE7Zm9yKHEmJnYucHVzaCgkKTtfZTxSOyl7dmFyIFJlPUksZ2U9ITAsUHQ9ITEsYXQ9dm9pZCAwO3RyeXtmb3IodmFyIG90PXVbU3ltYm9sLml0ZXJhdG9yXSgpLHZyOyEoZ2U9KHZyPW90Lm5leHQoKSkuZG9uZSk7Z2U9ITApe3ZhciBxdD12ci52YWx1ZTtxdD49UyYmcXQ8UmUmJihSZT1xdCl9fWNhdGNoKEpyKXtQdD0hMCxhdD1Kcn1maW5hbGx5e3RyeXshZ2UmJm90LnJldHVybiYmb3QucmV0dXJuKCl9ZmluYWxseXtpZihQdCl0aHJvdyBhdH19dmFyIHFlPV9lKzE7UmUtUz5XKChJLXopL3FlKSYmWCgib3ZlcmZsb3ciKSx6Kz0oUmUtUykqcWUsUz1SZTt2YXIgaXQ9ITAsR3Q9ITEsX3Q9dm9pZCAwO3RyeXtmb3IodmFyIEJyPXVbU3ltYm9sLml0ZXJhdG9yXSgpLFVvOyEoaXQ9KFVvPUJyLm5leHQoKSkuZG9uZSk7aXQ9ITApe3ZhciBGbz1Vby52YWx1ZTtpZihGbzxTJiYrK3o+SSYmWCgib3ZlcmZsb3ciKSxGbz09Uyl7Zm9yKHZhciBTbj16LFJuPWo7O1JuKz1qKXt2YXIgYm49Um48PUs/eTpSbj49SytfP186Um4tSztpZihTbjxibilicmVhazt2YXIgTW89U24tYm4sTG89ai1ibjt2LnB1c2gob2UoayhibitNbyVMbywwKSkpLFNuPVcoTW8vTG8pfXYucHVzaChvZShrKFNuLDApKSksSz1nKHoscWUsX2U9PXEpLHo9MCwrK19lfX19Y2F0Y2goSnIpe0d0PSEwLF90PUpyfWZpbmFsbHl7dHJ5eyFpdCYmQnIucmV0dXJuJiZCci5yZXR1cm4oKX1maW5hbGx5e2lmKEd0KXRocm93IF90fX0rK3osKytTfXJldHVybiB2LmpvaW4oIiIpfSxjPWZ1bmN0aW9uKHUpe3JldHVybiBFZSh1LGZ1bmN0aW9uKHYpe3JldHVybiBOLnRlc3Qodik/Qyh2LnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOnZ9KX0sbT1mdW5jdGlvbih1KXtyZXR1cm4gRWUodSxmdW5jdGlvbih2KXtyZXR1cm4gRC50ZXN0KHYpPyJ4bi0tIit3KHYpOnZ9KX0sUD17dmVyc2lvbjoiMi4xLjAiLHVjczI6e2RlY29kZTpOZSxlbmNvZGU6QmV9LGRlY29kZTpDLGVuY29kZTp3LHRvQVNDSUk6bSx0b1VuaWNvZGU6Y30sVT17fTtmdW5jdGlvbiBGKGQpe3ZhciB1PWQuY2hhckNvZGVBdCgwKSx2PXZvaWQgMDtyZXR1cm4gdTwxNj92PSIlMCIrdS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTp1PDEyOD92PSIlIit1LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOnU8MjA0OD92PSIlIisodT4+NnwxOTIpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyIlIisodSY2M3wxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOnY9IiUiKyh1Pj4xMnwyMjQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyIlIisodT4+NiY2M3wxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyIlIisodSY2M3wxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHZ9ZnVuY3Rpb24gWihkKXtmb3IodmFyIHU9IiIsdj0wLFI9ZC5sZW5ndGg7djxSOyl7dmFyIFM9cGFyc2VJbnQoZC5zdWJzdHIodisxLDIpLDE2KTtpZihTPDEyOCl1Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFMpLHYrPTM7ZWxzZSBpZihTPj0xOTQmJlM8MjI0KXtpZihSLXY+PTYpe3ZhciB6PXBhcnNlSW50KGQuc3Vic3RyKHYrNCwyKSwxNik7dSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoUyYzMSk8PDZ8eiY2Myl9ZWxzZSB1Kz1kLnN1YnN0cih2LDYpO3YrPTZ9ZWxzZSBpZihTPj0yMjQpe2lmKFItdj49OSl7dmFyIEs9cGFyc2VJbnQoZC5zdWJzdHIodis0LDIpLDE2KSxzZT1wYXJzZUludChkLnN1YnN0cih2KzcsMiksMTYpO3UrPVN0cmluZy5mcm9tQ2hhckNvZGUoKFMmMTUpPDwxMnwoSyY2Myk8PDZ8c2UmNjMpfWVsc2UgdSs9ZC5zdWJzdHIodiw5KTt2Kz05fWVsc2UgdSs9ZC5zdWJzdHIodiwzKSx2Kz0zfXJldHVybiB1fWZ1bmN0aW9uIHJlKGQsdSl7ZnVuY3Rpb24gdihSKXt2YXIgUz1aKFIpO3JldHVybiBTLm1hdGNoKHUuVU5SRVNFUlZFRCk/UzpSfXJldHVybiBkLnNjaGVtZSYmKGQuc2NoZW1lPVN0cmluZyhkLnNjaGVtZSkucmVwbGFjZSh1LlBDVF9FTkNPREVELHYpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSh1Lk5PVF9TQ0hFTUUsIiIpKSxkLnVzZXJpbmZvIT09dm9pZCAwJiYoZC51c2VyaW5mbz1TdHJpbmcoZC51c2VyaW5mbykucmVwbGFjZSh1LlBDVF9FTkNPREVELHYpLnJlcGxhY2UodS5OT1RfVVNFUklORk8sRikucmVwbGFjZSh1LlBDVF9FTkNPREVELG8pKSxkLmhvc3QhPT12b2lkIDAmJihkLmhvc3Q9U3RyaW5nKGQuaG9zdCkucmVwbGFjZSh1LlBDVF9FTkNPREVELHYpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSh1Lk5PVF9IT1NULEYpLnJlcGxhY2UodS5QQ1RfRU5DT0RFRCxvKSksZC5wYXRoIT09dm9pZCAwJiYoZC5wYXRoPVN0cmluZyhkLnBhdGgpLnJlcGxhY2UodS5QQ1RfRU5DT0RFRCx2KS5yZXBsYWNlKGQuc2NoZW1lP3UuTk9UX1BBVEg6dS5OT1RfUEFUSF9OT1NDSEVNRSxGKS5yZXBsYWNlKHUuUENUX0VOQ09ERUQsbykpLGQucXVlcnkhPT12b2lkIDAmJihkLnF1ZXJ5PVN0cmluZyhkLnF1ZXJ5KS5yZXBsYWNlKHUuUENUX0VOQ09ERUQsdikucmVwbGFjZSh1Lk5PVF9RVUVSWSxGKS5yZXBsYWNlKHUuUENUX0VOQ09ERUQsbykpLGQuZnJhZ21lbnQhPT12b2lkIDAmJihkLmZyYWdtZW50PVN0cmluZyhkLmZyYWdtZW50KS5yZXBsYWNlKHUuUENUX0VOQ09ERUQsdikucmVwbGFjZSh1Lk5PVF9GUkFHTUVOVCxGKS5yZXBsYWNlKHUuUENUX0VOQ09ERUQsbykpLGR9ZnVuY3Rpb24geWUoZCl7cmV0dXJuIGQucmVwbGFjZSgvXjAqKC4qKS8sIiQxIil8fCIwIn1mdW5jdGlvbiBydChkLHUpe3ZhciB2PWQubWF0Y2godS5JUFY0QUREUkVTUyl8fFtdLFI9RSh2LDIpLFM9UlsxXTtyZXR1cm4gUz9TLnNwbGl0KCIuIikubWFwKHllKS5qb2luKCIuIik6ZH1mdW5jdGlvbiBscihkLHUpe3ZhciB2PWQubWF0Y2godS5JUFY2QUREUkVTUyl8fFtdLFI9RSh2LDMpLFM9UlsxXSx6PVJbMl07aWYoUyl7Zm9yKHZhciBLPVMudG9Mb3dlckNhc2UoKS5zcGxpdCgiOjoiKS5yZXZlcnNlKCksc2U9RShLLDIpLG1lPXNlWzBdLCRlPXNlWzFdLHg9JGU/JGUuc3BsaXQoIjoiKS5tYXAoeWUpOltdLGZlPW1lLnNwbGl0KCI6IikubWFwKHllKSx3ZT11LklQVjRBRERSRVNTLnRlc3QoZmVbZmUubGVuZ3RoLTFdKSxxPXdlPzc6OCxfZT1mZS5sZW5ndGgtcSxSZT1BcnJheShxKSxnZT0wO2dlPHE7KytnZSlSZVtnZV09eFtnZV18fGZlW19lK2dlXXx8IiI7d2UmJihSZVtxLTFdPXJ0KFJlW3EtMV0sdSkpO3ZhciBQdD1SZS5yZWR1Y2UoZnVuY3Rpb24ocWUsaXQsR3Qpe2lmKCFpdHx8aXQ9PT0iMCIpe3ZhciBfdD1xZVtxZS5sZW5ndGgtMV07X3QmJl90LmluZGV4K190Lmxlbmd0aD09PUd0P190Lmxlbmd0aCsrOnFlLnB1c2goe2luZGV4Okd0LGxlbmd0aDoxfSl9cmV0dXJuIHFlfSxbXSksYXQ9UHQuc29ydChmdW5jdGlvbihxZSxpdCl7cmV0dXJuIGl0Lmxlbmd0aC1xZS5sZW5ndGh9KVswXSxvdD12b2lkIDA7aWYoYXQmJmF0Lmxlbmd0aD4xKXt2YXIgdnI9UmUuc2xpY2UoMCxhdC5pbmRleCkscXQ9UmUuc2xpY2UoYXQuaW5kZXgrYXQubGVuZ3RoKTtvdD12ci5qb2luKCI6IikrIjo6IitxdC5qb2luKCI6Iil9ZWxzZSBvdD1SZS5qb2luKCI6Iik7cmV0dXJuIHomJihvdCs9IiUiK3opLG90fWVsc2UgcmV0dXJuIGR9dmFyIEZyPS9eKD86KFteOlwvPyNdKyk6KT8oPzpcL1wvKCg/OihbXlwvPyNAXSopQCk/KFxbW15cLz8jXF1dK1xdfFteXC8/IzpdKikoPzpcOihcZCopKT8pKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IygoPzoufFxufFxyKSopKT8vaSxNcj0iIi5tYXRjaCgvKCl7MH0vKVsxXT09PXZvaWQgMDtmdW5jdGlvbiBNZShkKXt2YXIgdT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sdj17fSxSPXUuaXJpIT09ITE/aDppO3UucmVmZXJlbmNlPT09InN1ZmZpeCImJihkPSh1LnNjaGVtZT91LnNjaGVtZSsiOiI6IiIpKyIvLyIrZCk7dmFyIFM9ZC5tYXRjaChGcik7aWYoUyl7TXI/KHYuc2NoZW1lPVNbMV0sdi51c2VyaW5mbz1TWzNdLHYuaG9zdD1TWzRdLHYucG9ydD1wYXJzZUludChTWzVdLDEwKSx2LnBhdGg9U1s2XXx8IiIsdi5xdWVyeT1TWzddLHYuZnJhZ21lbnQ9U1s4XSxpc05hTih2LnBvcnQpJiYodi5wb3J0PVNbNV0pKToodi5zY2hlbWU9U1sxXXx8dm9pZCAwLHYudXNlcmluZm89ZC5pbmRleE9mKCJAIikhPT0tMT9TWzNdOnZvaWQgMCx2Lmhvc3Q9ZC5pbmRleE9mKCIvLyIpIT09LTE/U1s0XTp2b2lkIDAsdi5wb3J0PXBhcnNlSW50KFNbNV0sMTApLHYucGF0aD1TWzZdfHwiIix2LnF1ZXJ5PWQuaW5kZXhPZigiPyIpIT09LTE/U1s3XTp2b2lkIDAsdi5mcmFnbWVudD1kLmluZGV4T2YoIiMiKSE9PS0xP1NbOF06dm9pZCAwLGlzTmFOKHYucG9ydCkmJih2LnBvcnQ9ZC5tYXRjaCgvXC9cLyg/Oi58XG4pKlw6KD86XC98XD98XCN8JCkvKT9TWzRdOnZvaWQgMCkpLHYuaG9zdCYmKHYuaG9zdD1scihydCh2Lmhvc3QsUiksUikpLHYuc2NoZW1lPT09dm9pZCAwJiZ2LnVzZXJpbmZvPT09dm9pZCAwJiZ2Lmhvc3Q9PT12b2lkIDAmJnYucG9ydD09PXZvaWQgMCYmIXYucGF0aCYmdi5xdWVyeT09PXZvaWQgMD92LnJlZmVyZW5jZT0ic2FtZS1kb2N1bWVudCI6di5zY2hlbWU9PT12b2lkIDA/di5yZWZlcmVuY2U9InJlbGF0aXZlIjp2LmZyYWdtZW50PT09dm9pZCAwP3YucmVmZXJlbmNlPSJhYnNvbHV0ZSI6di5yZWZlcmVuY2U9InVyaSIsdS5yZWZlcmVuY2UmJnUucmVmZXJlbmNlIT09InN1ZmZpeCImJnUucmVmZXJlbmNlIT09di5yZWZlcmVuY2UmJih2LmVycm9yPXYuZXJyb3J8fCJVUkkgaXMgbm90IGEgIit1LnJlZmVyZW5jZSsiIHJlZmVyZW5jZS4iKTt2YXIgej1VWyh1LnNjaGVtZXx8di5zY2hlbWV8fCIiKS50b0xvd2VyQ2FzZSgpXTtpZighdS51bmljb2RlU3VwcG9ydCYmKCF6fHwhei51bmljb2RlU3VwcG9ydCkpe2lmKHYuaG9zdCYmKHUuZG9tYWluSG9zdHx8eiYmei5kb21haW5Ib3N0KSl0cnl7di5ob3N0PVAudG9BU0NJSSh2Lmhvc3QucmVwbGFjZShSLlBDVF9FTkNPREVELFopLnRvTG93ZXJDYXNlKCkpfWNhdGNoKEspe3YuZXJyb3I9di5lcnJvcnx8Ikhvc3QncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB2aWEgcHVueWNvZGU6ICIrS31yZSh2LGkpfWVsc2UgcmUodixSKTt6JiZ6LnBhcnNlJiZ6LnBhcnNlKHYsdSl9ZWxzZSB2LmVycm9yPXYuZXJyb3J8fCJVUkkgY2FuIG5vdCBiZSBwYXJzZWQuIjtyZXR1cm4gdn1mdW5jdGlvbiBMcihkLHUpe3ZhciB2PXUuaXJpIT09ITE/aDppLFI9W107cmV0dXJuIGQudXNlcmluZm8hPT12b2lkIDAmJihSLnB1c2goZC51c2VyaW5mbyksUi5wdXNoKCJAIikpLGQuaG9zdCE9PXZvaWQgMCYmUi5wdXNoKGxyKHJ0KFN0cmluZyhkLmhvc3QpLHYpLHYpLnJlcGxhY2Uodi5JUFY2QUREUkVTUyxmdW5jdGlvbihTLHosSyl7cmV0dXJuIlsiK3orKEs/IiUyNSIrSzoiIikrIl0ifSkpLCh0eXBlb2YgZC5wb3J0PT0ibnVtYmVyInx8dHlwZW9mIGQucG9ydD09InN0cmluZyIpJiYoUi5wdXNoKCI6IiksUi5wdXNoKFN0cmluZyhkLnBvcnQpKSksUi5sZW5ndGg/Ui5qb2luKCIiKTp2b2lkIDB9dmFyIGZyPS9eXC5cLj9cLy8sZHI9L15cL1wuKFwvfCQpLyxocj0vXlwvXC5cLihcL3wkKS8sVnI9L15cLz8oPzoufFxuKSo/KD89XC98JCkvO2Z1bmN0aW9uIG50KGQpe2Zvcih2YXIgdT1bXTtkLmxlbmd0aDspaWYoZC5tYXRjaChmcikpZD1kLnJlcGxhY2UoZnIsIiIpO2Vsc2UgaWYoZC5tYXRjaChkcikpZD1kLnJlcGxhY2UoZHIsIi8iKTtlbHNlIGlmKGQubWF0Y2goaHIpKWQ9ZC5yZXBsYWNlKGhyLCIvIiksdS5wb3AoKTtlbHNlIGlmKGQ9PT0iLiJ8fGQ9PT0iLi4iKWQ9IiI7ZWxzZXt2YXIgdj1kLm1hdGNoKFZyKTtpZih2KXt2YXIgUj12WzBdO2Q9ZC5zbGljZShSLmxlbmd0aCksdS5wdXNoKFIpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGRvdCBzZWdtZW50IGNvbmRpdGlvbiIpfXJldHVybiB1LmpvaW4oIiIpfWZ1bmN0aW9uIGtlKGQpe3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSx2PXUuaXJpP2g6aSxSPVtdLFM9VVsodS5zY2hlbWV8fGQuc2NoZW1lfHwiIikudG9Mb3dlckNhc2UoKV07aWYoUyYmUy5zZXJpYWxpemUmJlMuc2VyaWFsaXplKGQsdSksZC5ob3N0JiYhdi5JUFY2QUREUkVTUy50ZXN0KGQuaG9zdCkpe2lmKHUuZG9tYWluSG9zdHx8UyYmUy5kb21haW5Ib3N0KXRyeXtkLmhvc3Q9dS5pcmk/UC50b1VuaWNvZGUoZC5ob3N0KTpQLnRvQVNDSUkoZC5ob3N0LnJlcGxhY2Uodi5QQ1RfRU5DT0RFRCxaKS50b0xvd2VyQ2FzZSgpKX1jYXRjaChzZSl7ZC5lcnJvcj1kLmVycm9yfHwiSG9zdCdzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvICIrKHUuaXJpPyJVbmljb2RlIjoiQVNDSUkiKSsiIHZpYSBwdW55Y29kZTogIitzZX19cmUoZCx2KSx1LnJlZmVyZW5jZSE9PSJzdWZmaXgiJiZkLnNjaGVtZSYmKFIucHVzaChkLnNjaGVtZSksUi5wdXNoKCI6IikpO3ZhciB6PUxyKGQsdSk7aWYoeiE9PXZvaWQgMCYmKHUucmVmZXJlbmNlIT09InN1ZmZpeCImJlIucHVzaCgiLy8iKSxSLnB1c2goeiksZC5wYXRoJiZkLnBhdGguY2hhckF0KDApIT09Ii8iJiZSLnB1c2goIi8iKSksZC5wYXRoIT09dm9pZCAwKXt2YXIgSz1kLnBhdGg7IXUuYWJzb2x1dGVQYXRoJiYoIVN8fCFTLmFic29sdXRlUGF0aCkmJihLPW50KEspKSx6PT09dm9pZCAwJiYoSz1LLnJlcGxhY2UoL15cL1wvLywiLyUyRiIpKSxSLnB1c2goSyl9cmV0dXJuIGQucXVlcnkhPT12b2lkIDAmJihSLnB1c2goIj8iKSxSLnB1c2goZC5xdWVyeSkpLGQuZnJhZ21lbnQhPT12b2lkIDAmJihSLnB1c2goIiMiKSxSLnB1c2goZC5mcmFnbWVudCkpLFIuam9pbigiIil9ZnVuY3Rpb24gcHIoZCx1KXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06e30sUj1hcmd1bWVudHNbM10sUz17fTtyZXR1cm4gUnx8KGQ9TWUoa2UoZCx2KSx2KSx1PU1lKGtlKHUsdiksdikpLHY9dnx8e30sIXYudG9sZXJhbnQmJnUuc2NoZW1lPyhTLnNjaGVtZT11LnNjaGVtZSxTLnVzZXJpbmZvPXUudXNlcmluZm8sUy5ob3N0PXUuaG9zdCxTLnBvcnQ9dS5wb3J0LFMucGF0aD1udCh1LnBhdGh8fCIiKSxTLnF1ZXJ5PXUucXVlcnkpOih1LnVzZXJpbmZvIT09dm9pZCAwfHx1Lmhvc3QhPT12b2lkIDB8fHUucG9ydCE9PXZvaWQgMD8oUy51c2VyaW5mbz11LnVzZXJpbmZvLFMuaG9zdD11Lmhvc3QsUy5wb3J0PXUucG9ydCxTLnBhdGg9bnQodS5wYXRofHwiIiksUy5xdWVyeT11LnF1ZXJ5KToodS5wYXRoPyh1LnBhdGguY2hhckF0KDApPT09Ii8iP1MucGF0aD1udCh1LnBhdGgpOigoZC51c2VyaW5mbyE9PXZvaWQgMHx8ZC5ob3N0IT09dm9pZCAwfHxkLnBvcnQhPT12b2lkIDApJiYhZC5wYXRoP1MucGF0aD0iLyIrdS5wYXRoOmQucGF0aD9TLnBhdGg9ZC5wYXRoLnNsaWNlKDAsZC5wYXRoLmxhc3RJbmRleE9mKCIvIikrMSkrdS5wYXRoOlMucGF0aD11LnBhdGgsUy5wYXRoPW50KFMucGF0aCkpLFMucXVlcnk9dS5xdWVyeSk6KFMucGF0aD1kLnBhdGgsdS5xdWVyeSE9PXZvaWQgMD9TLnF1ZXJ5PXUucXVlcnk6Uy5xdWVyeT1kLnF1ZXJ5KSxTLnVzZXJpbmZvPWQudXNlcmluZm8sUy5ob3N0PWQuaG9zdCxTLnBvcnQ9ZC5wb3J0KSxTLnNjaGVtZT1kLnNjaGVtZSksUy5mcmFnbWVudD11LmZyYWdtZW50LFN9ZnVuY3Rpb24genIoZCx1LHYpe3ZhciBSPWYoe3NjaGVtZToibnVsbCJ9LHYpO3JldHVybiBrZShwcihNZShkLFIpLE1lKHUsUiksUiwhMCksUil9ZnVuY3Rpb24gQnQoZCx1KXtyZXR1cm4gdHlwZW9mIGQ9PSJzdHJpbmciP2Q9a2UoTWUoZCx1KSx1KTphKGQpPT09Im9iamVjdCImJihkPU1lKGtlKGQsdSksdSkpLGR9ZnVuY3Rpb24gSHIoZCx1LHYpe3JldHVybiB0eXBlb2YgZD09InN0cmluZyI/ZD1rZShNZShkLHYpLHYpOmEoZCk9PT0ib2JqZWN0IiYmKGQ9a2UoZCx2KSksdHlwZW9mIHU9PSJzdHJpbmciP3U9a2UoTWUodSx2KSx2KTphKHUpPT09Im9iamVjdCImJih1PWtlKHUsdikpLGQ9PT11fWZ1bmN0aW9uIHduKGQsdSl7cmV0dXJuIGQmJmQudG9TdHJpbmcoKS5yZXBsYWNlKCF1fHwhdS5pcmk/aS5FU0NBUEU6aC5FU0NBUEUsRil9ZnVuY3Rpb24gSmUoZCx1KXtyZXR1cm4gZCYmZC50b1N0cmluZygpLnJlcGxhY2UoIXV8fCF1LmlyaT9pLlBDVF9FTkNPREVEOmguUENUX0VOQ09ERUQsWil9dmFyIEp0PXtzY2hlbWU6Imh0dHAiLGRvbWFpbkhvc3Q6ITAscGFyc2U6ZnVuY3Rpb24odSx2KXtyZXR1cm4gdS5ob3N0fHwodS5lcnJvcj11LmVycm9yfHwiSFRUUCBVUklzIG11c3QgaGF2ZSBhIGhvc3QuIiksdX0sc2VyaWFsaXplOmZ1bmN0aW9uKHUsdil7dmFyIFI9U3RyaW5nKHUuc2NoZW1lKS50b0xvd2VyQ2FzZSgpPT09Imh0dHBzIjtyZXR1cm4odS5wb3J0PT09KFI/NDQzOjgwKXx8dS5wb3J0PT09IiIpJiYodS5wb3J0PXZvaWQgMCksdS5wYXRofHwodS5wYXRoPSIvIiksdX19LFBvPXtzY2hlbWU6Imh0dHBzIixkb21haW5Ib3N0Okp0LmRvbWFpbkhvc3QscGFyc2U6SnQucGFyc2Usc2VyaWFsaXplOkp0LnNlcmlhbGl6ZX07ZnVuY3Rpb24gVG8oZCl7cmV0dXJuIHR5cGVvZiBkLnNlY3VyZT09ImJvb2xlYW4iP2Quc2VjdXJlOlN0cmluZyhkLnNjaGVtZSkudG9Mb3dlckNhc2UoKT09PSJ3c3MifXZhciBLcj17c2NoZW1lOiJ3cyIsZG9tYWluSG9zdDohMCxwYXJzZTpmdW5jdGlvbih1LHYpe3ZhciBSPXU7cmV0dXJuIFIuc2VjdXJlPVRvKFIpLFIucmVzb3VyY2VOYW1lPShSLnBhdGh8fCIvIikrKFIucXVlcnk/Ij8iK1IucXVlcnk6IiIpLFIucGF0aD12b2lkIDAsUi5xdWVyeT12b2lkIDAsUn0sc2VyaWFsaXplOmZ1bmN0aW9uKHUsdil7aWYoKHUucG9ydD09PShUbyh1KT80NDM6ODApfHx1LnBvcnQ9PT0iIikmJih1LnBvcnQ9dm9pZCAwKSx0eXBlb2YgdS5zZWN1cmU9PSJib29sZWFuIiYmKHUuc2NoZW1lPXUuc2VjdXJlPyJ3c3MiOiJ3cyIsdS5zZWN1cmU9dm9pZCAwKSx1LnJlc291cmNlTmFtZSl7dmFyIFI9dS5yZXNvdXJjZU5hbWUuc3BsaXQoIj8iKSxTPUUoUiwyKSx6PVNbMF0sSz1TWzFdO3UucGF0aD16JiZ6IT09Ii8iP3o6dm9pZCAwLHUucXVlcnk9Syx1LnJlc291cmNlTmFtZT12b2lkIDB9cmV0dXJuIHUuZnJhZ21lbnQ9dm9pZCAwLHV9fSxBbz17c2NoZW1lOiJ3c3MiLGRvbWFpbkhvc3Q6S3IuZG9tYWluSG9zdCxwYXJzZTpLci5wYXJzZSxzZXJpYWxpemU6S3Iuc2VyaWFsaXplfSxXZj17fSxDbz0iW0EtWmEtejAtOVxcLVxcLlxcX1xcflxceEEwLVxcdTIwMERcXHUyMDEwLVxcdTIwMjlcXHUyMDJGLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdIixzdD0iWzAtOUEtRmEtZl0iLFhmPXMocygiJVtFRmVmXSIrc3QrIiUiK3N0K3N0KyIlIitzdCtzdCkrInwiK3MoIiVbODlBLUZhLWZdIitzdCsiJSIrc3Qrc3QpKyJ8IitzKCIlIitzdCtzdCkpLFpmPSJbQS1aYS16MC05XFwhXFwkXFwlXFwnXFwqXFwrXFwtXFxeXFxfXFxgXFx7XFx8XFx9XFx+XSIseGY9IltcXCFcXCRcXCVcXCdcXChcXClcXCpcXCtcXCxcXC1cXC4wLTlcXDxcXD5BLVpcXHg1RS1cXHg3RV0iLGVkPW4oeGYsJ1tcXCJcXFxcXScpLHRkPSJbXFwhXFwkXFwnXFwoXFwpXFwqXFwrXFwsXFw7XFw6XFxAXSIscmQ9bmV3IFJlZ0V4cChDbywiZyIpLG1yPW5ldyBSZWdFeHAoWGYsImciKSxuZD1uZXcgUmVnRXhwKG4oIlteXSIsWmYsIltcXC5dIiwnW1xcIl0nLGVkKSwiZyIpLElvPW5ldyBSZWdFeHAobigiW15dIixDbyx0ZCksImciKSxzZD1JbztmdW5jdGlvbiBicyhkKXt2YXIgdT1aKGQpO3JldHVybiB1Lm1hdGNoKHJkKT91OmR9dmFyIERvPXtzY2hlbWU6Im1haWx0byIscGFyc2U6ZnVuY3Rpb24odSx2KXt2YXIgUj11LFM9Ui50bz1SLnBhdGg/Ui5wYXRoLnNwbGl0KCIsIik6W107aWYoUi5wYXRoPXZvaWQgMCxSLnF1ZXJ5KXtmb3IodmFyIHo9ITEsSz17fSxzZT1SLnF1ZXJ5LnNwbGl0KCImIiksbWU9MCwkZT1zZS5sZW5ndGg7bWU8JGU7KyttZSl7dmFyIHg9c2VbbWVdLnNwbGl0KCI9Iik7c3dpdGNoKHhbMF0pe2Nhc2UidG8iOmZvcih2YXIgZmU9eFsxXS5zcGxpdCgiLCIpLHdlPTAscT1mZS5sZW5ndGg7d2U8cTsrK3dlKVMucHVzaChmZVt3ZV0pO2JyZWFrO2Nhc2Uic3ViamVjdCI6Ui5zdWJqZWN0PUplKHhbMV0sdik7YnJlYWs7Y2FzZSJib2R5IjpSLmJvZHk9SmUoeFsxXSx2KTticmVhaztkZWZhdWx0Ono9ITAsS1tKZSh4WzBdLHYpXT1KZSh4WzFdLHYpO2JyZWFrfX16JiYoUi5oZWFkZXJzPUspfVIucXVlcnk9dm9pZCAwO2Zvcih2YXIgX2U9MCxSZT1TLmxlbmd0aDtfZTxSZTsrK19lKXt2YXIgZ2U9U1tfZV0uc3BsaXQoIkAiKTtpZihnZVswXT1KZShnZVswXSksdi51bmljb2RlU3VwcG9ydClnZVsxXT1KZShnZVsxXSx2KS50b0xvd2VyQ2FzZSgpO2Vsc2UgdHJ5e2dlWzFdPVAudG9BU0NJSShKZShnZVsxXSx2KS50b0xvd2VyQ2FzZSgpKX1jYXRjaChQdCl7Ui5lcnJvcj1SLmVycm9yfHwiRW1haWwgYWRkcmVzcydzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIEFTQ0lJIHZpYSBwdW55Y29kZTogIitQdH1TW19lXT1nZS5qb2luKCJAIil9cmV0dXJuIFJ9LHNlcmlhbGl6ZTpmdW5jdGlvbih1LHYpe3ZhciBSPXUsUz1sKHUudG8pO2lmKFMpe2Zvcih2YXIgej0wLEs9Uy5sZW5ndGg7ejxLOysreil7dmFyIHNlPVN0cmluZyhTW3pdKSxtZT1zZS5sYXN0SW5kZXhPZigiQCIpLCRlPXNlLnNsaWNlKDAsbWUpLnJlcGxhY2UobXIsYnMpLnJlcGxhY2UobXIsbykucmVwbGFjZShuZCxGKSx4PXNlLnNsaWNlKG1lKzEpO3RyeXt4PXYuaXJpP1AudG9Vbmljb2RlKHgpOlAudG9BU0NJSShKZSh4LHYpLnRvTG93ZXJDYXNlKCkpfWNhdGNoKF9lKXtSLmVycm9yPVIuZXJyb3J8fCJFbWFpbCBhZGRyZXNzJ3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gIisodi5pcmk/IlVuaWNvZGUiOiJBU0NJSSIpKyIgdmlhIHB1bnljb2RlOiAiK19lfVNbel09JGUrIkAiK3h9Ui5wYXRoPVMuam9pbigiLCIpfXZhciBmZT11LmhlYWRlcnM9dS5oZWFkZXJzfHx7fTt1LnN1YmplY3QmJihmZS5zdWJqZWN0PXUuc3ViamVjdCksdS5ib2R5JiYoZmUuYm9keT11LmJvZHkpO3ZhciB3ZT1bXTtmb3IodmFyIHEgaW4gZmUpZmVbcV0hPT1XZltxXSYmd2UucHVzaChxLnJlcGxhY2UobXIsYnMpLnJlcGxhY2UobXIsbykucmVwbGFjZShJbyxGKSsiPSIrZmVbcV0ucmVwbGFjZShtcixicykucmVwbGFjZShtcixvKS5yZXBsYWNlKHNkLEYpKTtyZXR1cm4gd2UubGVuZ3RoJiYoUi5xdWVyeT13ZS5qb2luKCImIikpLFJ9fSxhZD0vXihbXlw6XSspXDooLiopLyxqbz17c2NoZW1lOiJ1cm4iLHBhcnNlOmZ1bmN0aW9uKHUsdil7dmFyIFI9dS5wYXRoJiZ1LnBhdGgubWF0Y2goYWQpLFM9dTtpZihSKXt2YXIgej12LnNjaGVtZXx8Uy5zY2hlbWV8fCJ1cm4iLEs9UlsxXS50b0xvd2VyQ2FzZSgpLHNlPVJbMl0sbWU9eisiOiIrKHYubmlkfHxLKSwkZT1VW21lXTtTLm5pZD1LLFMubnNzPXNlLFMucGF0aD12b2lkIDAsJGUmJihTPSRlLnBhcnNlKFMsdikpfWVsc2UgUy5lcnJvcj1TLmVycm9yfHwiVVJOIGNhbiBub3QgYmUgcGFyc2VkLiI7cmV0dXJuIFN9LHNlcmlhbGl6ZTpmdW5jdGlvbih1LHYpe3ZhciBSPXYuc2NoZW1lfHx1LnNjaGVtZXx8InVybiIsUz11Lm5pZCx6PVIrIjoiKyh2Lm5pZHx8UyksSz1VW3pdO0smJih1PUsuc2VyaWFsaXplKHUsdikpO3ZhciBzZT11LG1lPXUubnNzO3JldHVybiBzZS5wYXRoPShTfHx2Lm5pZCkrIjoiK21lLHNlfX0sb2Q9L15bMC05QS1GYS1mXXs4fSg/OlwtWzAtOUEtRmEtZl17NH0pezN9XC1bMC05QS1GYS1mXXsxMn0kLyxrbz17c2NoZW1lOiJ1cm46dXVpZCIscGFyc2U6ZnVuY3Rpb24odSx2KXt2YXIgUj11O3JldHVybiBSLnV1aWQ9Ui5uc3MsUi5uc3M9dm9pZCAwLCF2LnRvbGVyYW50JiYoIVIudXVpZHx8IVIudXVpZC5tYXRjaChvZCkpJiYoUi5lcnJvcj1SLmVycm9yfHwiVVVJRCBpcyBub3QgdmFsaWQuIiksUn0sc2VyaWFsaXplOmZ1bmN0aW9uKHUsdil7dmFyIFI9dTtyZXR1cm4gUi5uc3M9KHUudXVpZHx8IiIpLnRvTG93ZXJDYXNlKCksUn19O1VbSnQuc2NoZW1lXT1KdCxVW1BvLnNjaGVtZV09UG8sVVtLci5zY2hlbWVdPUtyLFVbQW8uc2NoZW1lXT1BbyxVW0RvLnNjaGVtZV09RG8sVVtqby5zY2hlbWVdPWpvLFVba28uc2NoZW1lXT1rbyxyLlNDSEVNRVM9VSxyLnBjdEVuY0NoYXI9RixyLnBjdERlY0NoYXJzPVosci5wYXJzZT1NZSxyLnJlbW92ZURvdFNlZ21lbnRzPW50LHIuc2VyaWFsaXplPWtlLHIucmVzb2x2ZUNvbXBvbmVudHM9cHIsci5yZXNvbHZlPXpyLHIubm9ybWFsaXplPUJ0LHIuZXF1YWw9SHIsci5lc2NhcGVDb21wb25lbnQ9d24sci51bmVzY2FwZUNvbXBvbmVudD1KZSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0pKGVzLGVzLmV4cG9ydHMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4biwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgRGE9ZXMuZXhwb3J0cztEYS5jb2RlPSdyZXF1aXJlKCJhanYvZGlzdC9ydW50aW1lL3VyaSIpLmRlZmF1bHQnLHhuLmRlZmF1bHQ9RGEsZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQ29kZUdlbj1lLk5hbWU9ZS5uaWw9ZS5zdHJpbmdpZnk9ZS5zdHI9ZS5fPWUuS2V5d29yZEN4dD12b2lkIDA7dmFyIHQ9V2U7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIktleXdvcmRDeHQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0LktleXdvcmRDeHR9fSk7dmFyIHI9dWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl8iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLl99fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInN0ciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3RyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzdHJpbmdpZnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnN0cmluZ2lmeX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibmlsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5uaWx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIk5hbWUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLk5hbWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkNvZGVHZW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkNvZGVHZW59fSk7Y29uc3Qgbj1jbixzPWt0LGE9RHQsbz1DZSxsPXVlLGY9VGUscD1ubixpPWJlLGg9enUsRT14bixUPShrLGcpPT5uZXcgUmVnRXhwKGssZyk7VC5jb2RlPSJuZXcgUmVnRXhwIjtjb25zdCBJPVsicmVtb3ZlQWRkaXRpb25hbCIsInVzZURlZmF1bHRzIiwiY29lcmNlVHlwZXMiXSxqPW5ldyBTZXQoWyJ2YWxpZGF0ZSIsInNlcmlhbGl6ZSIsInBhcnNlIiwid3JhcHBlciIsInJvb3QiLCJzY2hlbWEiLCJrZXl3b3JkIiwicGF0dGVybiIsImZvcm1hdHMiLCJ2YWxpZGF0ZSRkYXRhIiwiZnVuYyIsIm9iaiIsIkVycm9yIl0pLHk9e2Vycm9yRGF0YVBhdGg6IiIsZm9ybWF0OiJgdmFsaWRhdGVGb3JtYXRzOiBmYWxzZWAgY2FuIGJlIHVzZWQgaW5zdGVhZC4iLG51bGxhYmxlOicibnVsbGFibGUiIGtleXdvcmQgaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuJyxqc29uUG9pbnRlcnM6IkRlcHJlY2F0ZWQganNQcm9wZXJ0eVN5bnRheCBjYW4gYmUgdXNlZCBpbnN0ZWFkLiIsZXh0ZW5kUmVmczoiRGVwcmVjYXRlZCBpZ25vcmVLZXl3b3Jkc1dpdGhSZWYgY2FuIGJlIHVzZWQgaW5zdGVhZC4iLG1pc3NpbmdSZWZzOiJQYXNzIGVtcHR5IHNjaGVtYSB3aXRoICRpZCB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIHRvIGFqdi5hZGRTY2hlbWEuIixwcm9jZXNzQ29kZToiVXNlIG9wdGlvbiBgY29kZToge3Byb2Nlc3M6IChjb2RlLCBzY2hlbWFFbnY6IG9iamVjdCkgPT4gc3RyaW5nfWAiLHNvdXJjZUNvZGU6IlVzZSBvcHRpb24gYGNvZGU6IHtzb3VyY2U6IHRydWV9YCIsc3RyaWN0RGVmYXVsdHM6Ikl0IGlzIGRlZmF1bHQgbm93LCBzZWUgb3B0aW9uIGBzdHJpY3RgLiIsc3RyaWN0S2V5d29yZHM6Ikl0IGlzIGRlZmF1bHQgbm93LCBzZWUgb3B0aW9uIGBzdHJpY3RgLiIsdW5pcXVlSXRlbXM6JyJ1bmlxdWVJdGVtcyIga2V5d29yZCBpcyBhbHdheXMgdmFsaWRhdGVkLicsdW5rbm93bkZvcm1hdHM6IkRpc2FibGUgc3RyaWN0IG1vZGUgb3IgcGFzcyBgdHJ1ZWAgdG8gYGFqdi5hZGRGb3JtYXRgIChvciBgZm9ybWF0c2Agb3B0aW9uKS4iLGNhY2hlOiJNYXAgaXMgdXNlZCBhcyBjYWNoZSwgc2NoZW1hIG9iamVjdCBhcyBrZXkuIixzZXJpYWxpemU6Ik1hcCBpcyB1c2VkIGFzIGNhY2hlLCBzY2hlbWEgb2JqZWN0IGFzIGtleS4iLGFqdkVycm9yczoiSXQgaXMgZGVmYXVsdCBub3cuIn0sXz17aWdub3JlS2V5d29yZHNXaXRoUmVmOiIiLGpzUHJvcGVydHlTeW50YXg6IiIsdW5pY29kZTonIm1pbkxlbmd0aCIvIm1heExlbmd0aCIgYWNjb3VudCBmb3IgdW5pY29kZSBjaGFyYWN0ZXJzIGJ5IGRlZmF1bHQuJ30sYj0yMDA7ZnVuY3Rpb24gTyhrKXt2YXIgZyxDLHcsYyxtLFAsVSxGLFoscmUseWUscnQsbHIsRnIsTXIsTWUsTHIsZnIsZHIsaHIsVnIsbnQsa2UscHIsenI7Y29uc3QgQnQ9ay5zdHJpY3QsSHI9KGc9ay5jb2RlKT09PW51bGx8fGc9PT12b2lkIDA/dm9pZCAwOmcub3B0aW1pemUsd249SHI9PT0hMHx8SHI9PT12b2lkIDA/MTpIcnx8MCxKZT0odz0oQz1rLmNvZGUpPT09bnVsbHx8Qz09PXZvaWQgMD92b2lkIDA6Qy5yZWdFeHApIT09bnVsbCYmdyE9PXZvaWQgMD93OlQsSnQ9KGM9ay51cmlSZXNvbHZlcikhPT1udWxsJiZjIT09dm9pZCAwP2M6RS5kZWZhdWx0O3JldHVybntzdHJpY3RTY2hlbWE6KFA9KG09ay5zdHJpY3RTY2hlbWEpIT09bnVsbCYmbSE9PXZvaWQgMD9tOkJ0KSE9PW51bGwmJlAhPT12b2lkIDA/UDohMCxzdHJpY3ROdW1iZXJzOihGPShVPWsuc3RyaWN0TnVtYmVycykhPT1udWxsJiZVIT09dm9pZCAwP1U6QnQpIT09bnVsbCYmRiE9PXZvaWQgMD9GOiEwLHN0cmljdFR5cGVzOihyZT0oWj1rLnN0cmljdFR5cGVzKSE9PW51bGwmJlohPT12b2lkIDA/WjpCdCkhPT1udWxsJiZyZSE9PXZvaWQgMD9yZToibG9nIixzdHJpY3RUdXBsZXM6KHJ0PSh5ZT1rLnN0cmljdFR1cGxlcykhPT1udWxsJiZ5ZSE9PXZvaWQgMD95ZTpCdCkhPT1udWxsJiZydCE9PXZvaWQgMD9ydDoibG9nIixzdHJpY3RSZXF1aXJlZDooRnI9KGxyPWsuc3RyaWN0UmVxdWlyZWQpIT09bnVsbCYmbHIhPT12b2lkIDA/bHI6QnQpIT09bnVsbCYmRnIhPT12b2lkIDA/RnI6ITEsY29kZTprLmNvZGU/bGUoUSh7fSxrLmNvZGUpLHtvcHRpbWl6ZTp3bixyZWdFeHA6SmV9KTp7b3B0aW1pemU6d24scmVnRXhwOkplfSxsb29wUmVxdWlyZWQ6KE1yPWsubG9vcFJlcXVpcmVkKSE9PW51bGwmJk1yIT09dm9pZCAwP01yOmIsbG9vcEVudW06KE1lPWsubG9vcEVudW0pIT09bnVsbCYmTWUhPT12b2lkIDA/TWU6YixtZXRhOihMcj1rLm1ldGEpIT09bnVsbCYmTHIhPT12b2lkIDA/THI6ITAsbWVzc2FnZXM6KGZyPWsubWVzc2FnZXMpIT09bnVsbCYmZnIhPT12b2lkIDA/ZnI6ITAsaW5saW5lUmVmczooZHI9ay5pbmxpbmVSZWZzKSE9PW51bGwmJmRyIT09dm9pZCAwP2RyOiEwLHNjaGVtYUlkOihocj1rLnNjaGVtYUlkKSE9PW51bGwmJmhyIT09dm9pZCAwP2hyOiIkaWQiLGFkZFVzZWRTY2hlbWE6KFZyPWsuYWRkVXNlZFNjaGVtYSkhPT1udWxsJiZWciE9PXZvaWQgMD9WcjohMCx2YWxpZGF0ZVNjaGVtYToobnQ9ay52YWxpZGF0ZVNjaGVtYSkhPT1udWxsJiZudCE9PXZvaWQgMD9udDohMCx2YWxpZGF0ZUZvcm1hdHM6KGtlPWsudmFsaWRhdGVGb3JtYXRzKSE9PW51bGwmJmtlIT09dm9pZCAwP2tlOiEwLHVuaWNvZGVSZWdFeHA6KHByPWsudW5pY29kZVJlZ0V4cCkhPT1udWxsJiZwciE9PXZvaWQgMD9wcjohMCxpbnQzMnJhbmdlOih6cj1rLmludDMycmFuZ2UpIT09bnVsbCYmenIhPT12b2lkIDA/enI6ITAsdXJpUmVzb2x2ZXI6SnR9fWNsYXNzIEF7Y29uc3RydWN0b3IoZz17fSl7dGhpcy5zY2hlbWFzPXt9LHRoaXMucmVmcz17fSx0aGlzLmZvcm1hdHM9e30sdGhpcy5fY29tcGlsYXRpb25zPW5ldyBTZXQsdGhpcy5fbG9hZGluZz17fSx0aGlzLl9jYWNoZT1uZXcgTWFwLGc9dGhpcy5vcHRzPVEoUSh7fSxnKSxPKGcpKTtjb25zdHtlczU6QyxsaW5lczp3fT10aGlzLm9wdHMuY29kZTt0aGlzLnNjb3BlPW5ldyBsLlZhbHVlU2NvcGUoe3Njb3BlOnt9LHByZWZpeGVzOmosZXM1OkMsbGluZXM6d30pLHRoaXMubG9nZ2VyPVcoZy5sb2dnZXIpO2NvbnN0IGM9Zy52YWxpZGF0ZUZvcm1hdHM7Zy52YWxpZGF0ZUZvcm1hdHM9ITEsdGhpcy5SVUxFUz0oMCxhLmdldFJ1bGVzKSgpLEguY2FsbCh0aGlzLHksZywiTk9UIFNVUFBPUlRFRCIpLEguY2FsbCh0aGlzLF8sZywiREVQUkVDQVRFRCIsIndhcm4iKSx0aGlzLl9tZXRhT3B0cz1HLmNhbGwodGhpcyksZy5mb3JtYXRzJiZELmNhbGwodGhpcyksdGhpcy5fYWRkVm9jYWJ1bGFyaWVzKCksdGhpcy5fYWRkRGVmYXVsdE1ldGFTY2hlbWEoKSxnLmtleXdvcmRzJiZCLmNhbGwodGhpcyxnLmtleXdvcmRzKSx0eXBlb2YgZy5tZXRhPT0ib2JqZWN0IiYmdGhpcy5hZGRNZXRhU2NoZW1hKGcubWV0YSksTi5jYWxsKHRoaXMpLGcudmFsaWRhdGVGb3JtYXRzPWN9X2FkZFZvY2FidWxhcmllcygpe3RoaXMuYWRkS2V5d29yZCgiJGFzeW5jIil9X2FkZERlZmF1bHRNZXRhU2NoZW1hKCl7Y29uc3R7JGRhdGE6ZyxtZXRhOkMsc2NoZW1hSWQ6d309dGhpcy5vcHRzO2xldCBjPWg7dz09PSJpZCImJihjPVEoe30saCksYy5pZD1jLiRpZCxkZWxldGUgYy4kaWQpLEMmJmcmJnRoaXMuYWRkTWV0YVNjaGVtYShjLGNbd10sITEpfWRlZmF1bHRNZXRhKCl7Y29uc3R7bWV0YTpnLHNjaGVtYUlkOkN9PXRoaXMub3B0cztyZXR1cm4gdGhpcy5vcHRzLmRlZmF1bHRNZXRhPXR5cGVvZiBnPT0ib2JqZWN0Ij9nW0NdfHxnOnZvaWQgMH12YWxpZGF0ZShnLEMpe2xldCB3O2lmKHR5cGVvZiBnPT0ic3RyaW5nIil7aWYodz10aGlzLmdldFNjaGVtYShnKSwhdyl0aHJvdyBuZXcgRXJyb3IoYG5vIHNjaGVtYSB3aXRoIGtleSBvciByZWYgIiR7Z30iYCl9ZWxzZSB3PXRoaXMuY29tcGlsZShnKTtjb25zdCBjPXcoQyk7cmV0dXJuIiRhc3luYyJpbiB3fHwodGhpcy5lcnJvcnM9dy5lcnJvcnMpLGN9Y29tcGlsZShnLEMpe2NvbnN0IHc9dGhpcy5fYWRkU2NoZW1hKGcsQyk7cmV0dXJuIHcudmFsaWRhdGV8fHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYodyl9Y29tcGlsZUFzeW5jKGcsQyl7aWYodHlwZW9mIHRoaXMub3B0cy5sb2FkU2NoZW1hIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigib3B0aW9ucy5sb2FkU2NoZW1hIHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7Y29uc3R7bG9hZFNjaGVtYTp3fT10aGlzLm9wdHM7cmV0dXJuIGMuY2FsbCh0aGlzLGcsQyk7YXN5bmMgZnVuY3Rpb24gYyhyZSx5ZSl7YXdhaXQgbS5jYWxsKHRoaXMscmUuJHNjaGVtYSk7Y29uc3QgcnQ9dGhpcy5fYWRkU2NoZW1hKHJlLHllKTtyZXR1cm4gcnQudmFsaWRhdGV8fFAuY2FsbCh0aGlzLHJ0KX1hc3luYyBmdW5jdGlvbiBtKHJlKXtyZSYmIXRoaXMuZ2V0U2NoZW1hKHJlKSYmYXdhaXQgYy5jYWxsKHRoaXMseyRyZWY6cmV9LCEwKX1hc3luYyBmdW5jdGlvbiBQKHJlKXt0cnl7cmV0dXJuIHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYocmUpfWNhdGNoKHllKXtpZighKHllIGluc3RhbmNlb2Ygcy5kZWZhdWx0KSl0aHJvdyB5ZTtyZXR1cm4gVS5jYWxsKHRoaXMseWUpLGF3YWl0IEYuY2FsbCh0aGlzLHllLm1pc3NpbmdTY2hlbWEpLFAuY2FsbCh0aGlzLHJlKX19ZnVuY3Rpb24gVSh7bWlzc2luZ1NjaGVtYTpyZSxtaXNzaW5nUmVmOnllfSl7aWYodGhpcy5yZWZzW3JlXSl0aHJvdyBuZXcgRXJyb3IoYEFueVNjaGVtYSAke3JlfSBpcyBsb2FkZWQgYnV0ICR7eWV9IGNhbm5vdCBiZSByZXNvbHZlZGApfWFzeW5jIGZ1bmN0aW9uIEYocmUpe2NvbnN0IHllPWF3YWl0IFouY2FsbCh0aGlzLHJlKTt0aGlzLnJlZnNbcmVdfHxhd2FpdCBtLmNhbGwodGhpcyx5ZS4kc2NoZW1hKSx0aGlzLnJlZnNbcmVdfHx0aGlzLmFkZFNjaGVtYSh5ZSxyZSxDKX1hc3luYyBmdW5jdGlvbiBaKHJlKXtjb25zdCB5ZT10aGlzLl9sb2FkaW5nW3JlXTtpZih5ZSlyZXR1cm4geWU7dHJ5e3JldHVybiBhd2FpdCh0aGlzLl9sb2FkaW5nW3JlXT13KHJlKSl9ZmluYWxseXtkZWxldGUgdGhpcy5fbG9hZGluZ1tyZV19fX1hZGRTY2hlbWEoZyxDLHcsYz10aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEpe2lmKEFycmF5LmlzQXJyYXkoZykpe2Zvcihjb25zdCBQIG9mIGcpdGhpcy5hZGRTY2hlbWEoUCx2b2lkIDAsdyxjKTtyZXR1cm4gdGhpc31sZXQgbTtpZih0eXBlb2YgZz09Im9iamVjdCIpe2NvbnN0e3NjaGVtYUlkOlB9PXRoaXMub3B0cztpZihtPWdbUF0sbSE9PXZvaWQgMCYmdHlwZW9mIG0hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcihgc2NoZW1hICR7UH0gbXVzdCBiZSBzdHJpbmdgKX1yZXR1cm4gQz0oMCxmLm5vcm1hbGl6ZUlkKShDfHxtKSx0aGlzLl9jaGVja1VuaXF1ZShDKSx0aGlzLnNjaGVtYXNbQ109dGhpcy5fYWRkU2NoZW1hKGcsdyxDLGMsITApLHRoaXN9YWRkTWV0YVNjaGVtYShnLEMsdz10aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEpe3JldHVybiB0aGlzLmFkZFNjaGVtYShnLEMsITAsdyksdGhpc312YWxpZGF0ZVNjaGVtYShnLEMpe2lmKHR5cGVvZiBnPT0iYm9vbGVhbiIpcmV0dXJuITA7bGV0IHc7aWYodz1nLiRzY2hlbWEsdyE9PXZvaWQgMCYmdHlwZW9mIHchPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiJHNjaGVtYSBtdXN0IGJlIGEgc3RyaW5nIik7aWYodz13fHx0aGlzLm9wdHMuZGVmYXVsdE1ldGF8fHRoaXMuZGVmYXVsdE1ldGEoKSwhdylyZXR1cm4gdGhpcy5sb2dnZXIud2FybigibWV0YS1zY2hlbWEgbm90IGF2YWlsYWJsZSIpLHRoaXMuZXJyb3JzPW51bGwsITA7Y29uc3QgYz10aGlzLnZhbGlkYXRlKHcsZyk7aWYoIWMmJkMpe2NvbnN0IG09InNjaGVtYSBpcyBpbnZhbGlkOiAiK3RoaXMuZXJyb3JzVGV4dCgpO2lmKHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYT09PSJsb2ciKXRoaXMubG9nZ2VyLmVycm9yKG0pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKG0pfXJldHVybiBjfWdldFNjaGVtYShnKXtsZXQgQztmb3IoO3R5cGVvZihDPSQuY2FsbCh0aGlzLGcpKT09InN0cmluZyI7KWc9QztpZihDPT09dm9pZCAwKXtjb25zdHtzY2hlbWFJZDp3fT10aGlzLm9wdHMsYz1uZXcgby5TY2hlbWFFbnYoe3NjaGVtYTp7fSxzY2hlbWFJZDp3fSk7aWYoQz1vLnJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLGMsZyksIUMpcmV0dXJuO3RoaXMucmVmc1tnXT1DfXJldHVybiBDLnZhbGlkYXRlfHx0aGlzLl9jb21waWxlU2NoZW1hRW52KEMpfXJlbW92ZVNjaGVtYShnKXtpZihnIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMuc2NoZW1hcyxnKSx0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMucmVmcyxnKSx0aGlzO3N3aXRjaCh0eXBlb2YgZyl7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMuc2NoZW1hcyksdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnJlZnMpLHRoaXMuX2NhY2hlLmNsZWFyKCksdGhpcztjYXNlInN0cmluZyI6e2NvbnN0IEM9JC5jYWxsKHRoaXMsZyk7cmV0dXJuIHR5cGVvZiBDPT0ib2JqZWN0IiYmdGhpcy5fY2FjaGUuZGVsZXRlKEMuc2NoZW1hKSxkZWxldGUgdGhpcy5zY2hlbWFzW2ddLGRlbGV0ZSB0aGlzLnJlZnNbZ10sdGhpc31jYXNlIm9iamVjdCI6e2NvbnN0IEM9Zzt0aGlzLl9jYWNoZS5kZWxldGUoQyk7bGV0IHc9Z1t0aGlzLm9wdHMuc2NoZW1hSWRdO3JldHVybiB3JiYodz0oMCxmLm5vcm1hbGl6ZUlkKSh3KSxkZWxldGUgdGhpcy5zY2hlbWFzW3ddLGRlbGV0ZSB0aGlzLnJlZnNbd10pLHRoaXN9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImFqdi5yZW1vdmVTY2hlbWE6IGludmFsaWQgcGFyYW1ldGVyIil9fWFkZFZvY2FidWxhcnkoZyl7Zm9yKGNvbnN0IEMgb2YgZyl0aGlzLmFkZEtleXdvcmQoQyk7cmV0dXJuIHRoaXN9YWRkS2V5d29yZChnLEMpe2xldCB3O2lmKHR5cGVvZiBnPT0ic3RyaW5nIil3PWcsdHlwZW9mIEM9PSJvYmplY3QiJiYodGhpcy5sb2dnZXIud2FybigidGhlc2UgcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCwgc2VlIGRvY3MgZm9yIGFkZEtleXdvcmQiKSxDLmtleXdvcmQ9dyk7ZWxzZSBpZih0eXBlb2YgZz09Im9iamVjdCImJkM9PT12b2lkIDApe2lmKEM9Zyx3PUMua2V5d29yZCxBcnJheS5pc0FycmF5KHcpJiYhdy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhZGRLZXl3b3Jkczoga2V5d29yZCBtdXN0IGJlIHN0cmluZyBvciBub24tZW1wdHkgYXJyYXkiKX1lbHNlIHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhZGRLZXl3b3JkcyBwYXJhbWV0ZXJzIik7aWYoWC5jYWxsKHRoaXMsdyxDKSwhQylyZXR1cm4oMCxpLmVhY2hJdGVtKSh3LG09PnZlLmNhbGwodGhpcyxtKSksdGhpcztOZS5jYWxsKHRoaXMsQyk7Y29uc3QgYz1sZShRKHt9LEMpLHt0eXBlOigwLHAuZ2V0SlNPTlR5cGVzKShDLnR5cGUpLHNjaGVtYVR5cGU6KDAscC5nZXRKU09OVHlwZXMpKEMuc2NoZW1hVHlwZSl9KTtyZXR1cm4oMCxpLmVhY2hJdGVtKSh3LGMudHlwZS5sZW5ndGg9PT0wP209PnZlLmNhbGwodGhpcyxtLGMpOm09PmMudHlwZS5mb3JFYWNoKFA9PnZlLmNhbGwodGhpcyxtLGMsUCkpKSx0aGlzfWdldEtleXdvcmQoZyl7Y29uc3QgQz10aGlzLlJVTEVTLmFsbFtnXTtyZXR1cm4gdHlwZW9mIEM9PSJvYmplY3QiP0MuZGVmaW5pdGlvbjohIUN9cmVtb3ZlS2V5d29yZChnKXtjb25zdHtSVUxFUzpDfT10aGlzO2RlbGV0ZSBDLmtleXdvcmRzW2ddLGRlbGV0ZSBDLmFsbFtnXTtmb3IoY29uc3QgdyBvZiBDLnJ1bGVzKXtjb25zdCBjPXcucnVsZXMuZmluZEluZGV4KG09Pm0ua2V5d29yZD09PWcpO2M+PTAmJncucnVsZXMuc3BsaWNlKGMsMSl9cmV0dXJuIHRoaXN9YWRkRm9ybWF0KGcsQyl7cmV0dXJuIHR5cGVvZiBDPT0ic3RyaW5nIiYmKEM9bmV3IFJlZ0V4cChDKSksdGhpcy5mb3JtYXRzW2ddPUMsdGhpc31lcnJvcnNUZXh0KGc9dGhpcy5lcnJvcnMse3NlcGFyYXRvcjpDPSIsICIsZGF0YVZhcjp3PSJkYXRhIn09e30pe3JldHVybiFnfHxnLmxlbmd0aD09PTA/Ik5vIGVycm9ycyI6Zy5tYXAoYz0+YCR7d30ke2MuaW5zdGFuY2VQYXRofSAke2MubWVzc2FnZX1gKS5yZWR1Y2UoKGMsbSk9PmMrQyttKX0kZGF0YU1ldGFTY2hlbWEoZyxDKXtjb25zdCB3PXRoaXMuUlVMRVMuYWxsO2c9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnKSk7Zm9yKGNvbnN0IGMgb2YgQyl7Y29uc3QgbT1jLnNwbGl0KCIvIikuc2xpY2UoMSk7bGV0IFA9Zztmb3IoY29uc3QgVSBvZiBtKVA9UFtVXTtmb3IoY29uc3QgVSBpbiB3KXtjb25zdCBGPXdbVV07aWYodHlwZW9mIEYhPSJvYmplY3QiKWNvbnRpbnVlO2NvbnN0eyRkYXRhOlp9PUYuZGVmaW5pdGlvbixyZT1QW1VdO1omJnJlJiYoUFtVXT11cihyZSkpfX1yZXR1cm4gZ31fcmVtb3ZlQWxsU2NoZW1hcyhnLEMpe2Zvcihjb25zdCB3IGluIGcpe2NvbnN0IGM9Z1t3XTsoIUN8fEMudGVzdCh3KSkmJih0eXBlb2YgYz09InN0cmluZyI/ZGVsZXRlIGdbd106YyYmIWMubWV0YSYmKHRoaXMuX2NhY2hlLmRlbGV0ZShjLnNjaGVtYSksZGVsZXRlIGdbd10pKX19X2FkZFNjaGVtYShnLEMsdyxjPXRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSxtPXRoaXMub3B0cy5hZGRVc2VkU2NoZW1hKXtsZXQgUDtjb25zdHtzY2hlbWFJZDpVfT10aGlzLm9wdHM7aWYodHlwZW9mIGc9PSJvYmplY3QiKVA9Z1tVXTtlbHNle2lmKHRoaXMub3B0cy5qdGQpdGhyb3cgbmV3IEVycm9yKCJzY2hlbWEgbXVzdCBiZSBvYmplY3QiKTtpZih0eXBlb2YgZyE9ImJvb2xlYW4iKXRocm93IG5ldyBFcnJvcigic2NoZW1hIG11c3QgYmUgb2JqZWN0IG9yIGJvb2xlYW4iKX1sZXQgRj10aGlzLl9jYWNoZS5nZXQoZyk7aWYoRiE9PXZvaWQgMClyZXR1cm4gRjt3PSgwLGYubm9ybWFsaXplSWQpKFB8fHcpO2NvbnN0IFo9Zi5nZXRTY2hlbWFSZWZzLmNhbGwodGhpcyxnLHcpO3JldHVybiBGPW5ldyBvLlNjaGVtYUVudih7c2NoZW1hOmcsc2NoZW1hSWQ6VSxtZXRhOkMsYmFzZUlkOncsbG9jYWxSZWZzOlp9KSx0aGlzLl9jYWNoZS5zZXQoRi5zY2hlbWEsRiksbSYmIXcuc3RhcnRzV2l0aCgiIyIpJiYodyYmdGhpcy5fY2hlY2tVbmlxdWUodyksdGhpcy5yZWZzW3ddPUYpLGMmJnRoaXMudmFsaWRhdGVTY2hlbWEoZywhMCksRn1fY2hlY2tVbmlxdWUoZyl7aWYodGhpcy5zY2hlbWFzW2ddfHx0aGlzLnJlZnNbZ10pdGhyb3cgbmV3IEVycm9yKGBzY2hlbWEgd2l0aCBrZXkgb3IgaWQgIiR7Z30iIGFscmVhZHkgZXhpc3RzYCl9X2NvbXBpbGVTY2hlbWFFbnYoZyl7aWYoZy5tZXRhP3RoaXMuX2NvbXBpbGVNZXRhU2NoZW1hKGcpOm8uY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsZyksIWcudmFsaWRhdGUpdGhyb3cgbmV3IEVycm9yKCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3IiKTtyZXR1cm4gZy52YWxpZGF0ZX1fY29tcGlsZU1ldGFTY2hlbWEoZyl7Y29uc3QgQz10aGlzLm9wdHM7dGhpcy5vcHRzPXRoaXMuX21ldGFPcHRzO3RyeXtvLmNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLGcpfWZpbmFsbHl7dGhpcy5vcHRzPUN9fX1lLmRlZmF1bHQ9QSxBLlZhbGlkYXRpb25FcnJvcj1uLmRlZmF1bHQsQS5NaXNzaW5nUmVmRXJyb3I9cy5kZWZhdWx0O2Z1bmN0aW9uIEgoayxnLEMsdz0iZXJyb3IiKXtmb3IoY29uc3QgYyBpbiBrKXtjb25zdCBtPWM7bSBpbiBnJiZ0aGlzLmxvZ2dlclt3XShgJHtDfTogb3B0aW9uICR7Y30uICR7a1ttXX1gKX19ZnVuY3Rpb24gJChrKXtyZXR1cm4gaz0oMCxmLm5vcm1hbGl6ZUlkKShrKSx0aGlzLnNjaGVtYXNba118fHRoaXMucmVmc1trXX1mdW5jdGlvbiBOKCl7Y29uc3Qgaz10aGlzLm9wdHMuc2NoZW1hcztpZighIWspaWYoQXJyYXkuaXNBcnJheShrKSl0aGlzLmFkZFNjaGVtYShrKTtlbHNlIGZvcihjb25zdCBnIGluIGspdGhpcy5hZGRTY2hlbWEoa1tnXSxnKX1mdW5jdGlvbiBEKCl7Zm9yKGNvbnN0IGsgaW4gdGhpcy5vcHRzLmZvcm1hdHMpe2NvbnN0IGc9dGhpcy5vcHRzLmZvcm1hdHNba107ZyYmdGhpcy5hZGRGb3JtYXQoayxnKX19ZnVuY3Rpb24gQihrKXtpZihBcnJheS5pc0FycmF5KGspKXt0aGlzLmFkZFZvY2FidWxhcnkoayk7cmV0dXJufXRoaXMubG9nZ2VyLndhcm4oImtleXdvcmRzIG9wdGlvbiBhcyBtYXAgaXMgZGVwcmVjYXRlZCwgcGFzcyBhcnJheSIpO2Zvcihjb25zdCBnIGluIGspe2NvbnN0IEM9a1tnXTtDLmtleXdvcmR8fChDLmtleXdvcmQ9ZyksdGhpcy5hZGRLZXl3b3JkKEMpfX1mdW5jdGlvbiBHKCl7Y29uc3Qgaz1RKHt9LHRoaXMub3B0cyk7Zm9yKGNvbnN0IGcgb2YgSSlkZWxldGUga1tnXTtyZXR1cm4ga31jb25zdCBwZT17bG9nKCl7fSx3YXJuKCl7fSxlcnJvcigpe319O2Z1bmN0aW9uIFcoayl7aWYoaz09PSExKXJldHVybiBwZTtpZihrPT09dm9pZCAwKXJldHVybiBjb25zb2xlO2lmKGsubG9nJiZrLndhcm4mJmsuZXJyb3IpcmV0dXJuIGs7dGhyb3cgbmV3IEVycm9yKCJsb2dnZXIgbXVzdCBpbXBsZW1lbnQgbG9nLCB3YXJuIGFuZCBlcnJvciBtZXRob2RzIil9Y29uc3Qgb2U9L15bYS16XyRdW2EtejAtOV8kOi1dKiQvaTtmdW5jdGlvbiBYKGssZyl7Y29uc3R7UlVMRVM6Q309dGhpcztpZigoMCxpLmVhY2hJdGVtKShrLHc9PntpZihDLmtleXdvcmRzW3ddKXRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke3d9IGlzIGFscmVhZHkgZGVmaW5lZGApO2lmKCFvZS50ZXN0KHcpKXRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke3d9IGhhcyBpbnZhbGlkIG5hbWVgKX0pLCEhZyYmZy4kZGF0YSYmISgiY29kZSJpbiBnfHwidmFsaWRhdGUiaW4gZykpdGhyb3cgbmV3IEVycm9yKCckZGF0YSBrZXl3b3JkIG11c3QgaGF2ZSAiY29kZSIgb3IgInZhbGlkYXRlIiBmdW5jdGlvbicpfWZ1bmN0aW9uIHZlKGssZyxDKXt2YXIgdztjb25zdCBjPWc9PW51bGw/dm9pZCAwOmcucG9zdDtpZihDJiZjKXRocm93IG5ldyBFcnJvcigna2V5d29yZCB3aXRoICJwb3N0IiBmbGFnIGNhbm5vdCBoYXZlICJ0eXBlIicpO2NvbnN0e1JVTEVTOm19PXRoaXM7bGV0IFA9Yz9tLnBvc3Q6bS5ydWxlcy5maW5kKCh7dHlwZTpGfSk9PkY9PT1DKTtpZihQfHwoUD17dHlwZTpDLHJ1bGVzOltdfSxtLnJ1bGVzLnB1c2goUCkpLG0ua2V5d29yZHNba109ITAsIWcpcmV0dXJuO2NvbnN0IFU9e2tleXdvcmQ6ayxkZWZpbml0aW9uOmxlKFEoe30sZykse3R5cGU6KDAscC5nZXRKU09OVHlwZXMpKGcudHlwZSksc2NoZW1hVHlwZTooMCxwLmdldEpTT05UeXBlcykoZy5zY2hlbWFUeXBlKX0pfTtnLmJlZm9yZT9FZS5jYWxsKHRoaXMsUCxVLGcuYmVmb3JlKTpQLnJ1bGVzLnB1c2goVSksbS5hbGxba109VSwodz1nLmltcGxlbWVudHMpPT09bnVsbHx8dz09PXZvaWQgMHx8dy5mb3JFYWNoKEY9PnRoaXMuYWRkS2V5d29yZChGKSl9ZnVuY3Rpb24gRWUoayxnLEMpe2NvbnN0IHc9ay5ydWxlcy5maW5kSW5kZXgoYz0+Yy5rZXl3b3JkPT09Qyk7dz49MD9rLnJ1bGVzLnNwbGljZSh3LDAsZyk6KGsucnVsZXMucHVzaChnKSx0aGlzLmxvZ2dlci53YXJuKGBydWxlICR7Q30gaXMgbm90IGRlZmluZWRgKSl9ZnVuY3Rpb24gTmUoayl7bGV0e21ldGFTY2hlbWE6Z309aztnIT09dm9pZCAwJiYoay4kZGF0YSYmdGhpcy5vcHRzLiRkYXRhJiYoZz11cihnKSksay52YWxpZGF0ZVNjaGVtYT10aGlzLmNvbXBpbGUoZywhMCkpfWNvbnN0IEJlPXskcmVmOiJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYWp2LXZhbGlkYXRvci9hanYvbWFzdGVyL2xpYi9yZWZzL2RhdGEuanNvbiMifTtmdW5jdGlvbiB1cihrKXtyZXR1cm57YW55T2Y6W2ssQmVdfX19KHJhKTt2YXIgdHM9e30sRnQ9e30sTXQ9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KE10LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxNdC5jYWxsUmVmPU10LmdldFZhbGlkYXRlPXZvaWQgMDtjb25zdCBIdT1rdCxqYT1uZSxqZT11ZSxzcj1MZSxrYT1DZSxmbj1iZSxLdT17a2V5d29yZDoiJHJlZiIsc2NoZW1hVHlwZToic3RyaW5nIixjb2RlKGUpe2NvbnN0e2dlbjp0LHNjaGVtYTpyLGl0Om59PWUse2Jhc2VJZDpzLHNjaGVtYUVudjphLHZhbGlkYXRlTmFtZTpvLG9wdHM6bCxzZWxmOmZ9PW4se3Jvb3Q6cH09YTtpZigocj09PSIjInx8cj09PSIjLyIpJiZzPT09cC5iYXNlSWQpcmV0dXJuIGgoKTtjb25zdCBpPWthLnJlc29sdmVSZWYuY2FsbChmLHAscyxyKTtpZihpPT09dm9pZCAwKXRocm93IG5ldyBIdS5kZWZhdWx0KG4ub3B0cy51cmlSZXNvbHZlcixzLHIpO2lmKGkgaW5zdGFuY2VvZiBrYS5TY2hlbWFFbnYpcmV0dXJuIEUoaSk7cmV0dXJuIFQoaSk7ZnVuY3Rpb24gaCgpe2lmKGE9PT1wKXJldHVybiBkbihlLG8sYSxhLiRhc3luYyk7Y29uc3QgST10LnNjb3BlVmFsdWUoInJvb3QiLHtyZWY6cH0pO3JldHVybiBkbihlLCgwLGplLl8pYCR7SX0udmFsaWRhdGVgLHAscC4kYXN5bmMpfWZ1bmN0aW9uIEUoSSl7Y29uc3Qgaj1VYShlLEkpO2RuKGUsaixJLEkuJGFzeW5jKX1mdW5jdGlvbiBUKEkpe2NvbnN0IGo9dC5zY29wZVZhbHVlKCJzY2hlbWEiLGwuY29kZS5zb3VyY2U9PT0hMD97cmVmOkksY29kZTooMCxqZS5zdHJpbmdpZnkpKEkpfTp7cmVmOkl9KSx5PXQubmFtZSgidmFsaWQiKSxfPWUuc3Vic2NoZW1hKHtzY2hlbWE6SSxkYXRhVHlwZXM6W10sc2NoZW1hUGF0aDpqZS5uaWwsdG9wU2NoZW1hUmVmOmosZXJyU2NoZW1hUGF0aDpyfSx5KTtlLm1lcmdlRXZhbHVhdGVkKF8pLGUub2soeSl9fX07ZnVuY3Rpb24gVWEoZSx0KXtjb25zdHtnZW46cn09ZTtyZXR1cm4gdC52YWxpZGF0ZT9yLnNjb3BlVmFsdWUoInZhbGlkYXRlIix7cmVmOnQudmFsaWRhdGV9KTooMCxqZS5fKWAke3Iuc2NvcGVWYWx1ZSgid3JhcHBlciIse3JlZjp0fSl9LnZhbGlkYXRlYH1NdC5nZXRWYWxpZGF0ZT1VYTtmdW5jdGlvbiBkbihlLHQscixuKXtjb25zdHtnZW46cyxpdDphfT1lLHthbGxFcnJvcnM6byxzY2hlbWFFbnY6bCxvcHRzOmZ9PWEscD1mLnBhc3NDb250ZXh0P3NyLmRlZmF1bHQudGhpczpqZS5uaWw7bj9pKCk6aCgpO2Z1bmN0aW9uIGkoKXtpZighbC4kYXN5bmMpdGhyb3cgbmV3IEVycm9yKCJhc3luYyBzY2hlbWEgcmVmZXJlbmNlZCBieSBzeW5jIHNjaGVtYSIpO2NvbnN0IEk9cy5sZXQoInZhbGlkIik7cy50cnkoKCk9PntzLmNvZGUoKDAsamUuXylgYXdhaXQgJHsoMCxqYS5jYWxsVmFsaWRhdGVDb2RlKShlLHQscCl9YCksVCh0KSxvfHxzLmFzc2lnbihJLCEwKX0saj0+e3MuaWYoKDAsamUuXylgISgke2p9IGluc3RhbmNlb2YgJHthLlZhbGlkYXRpb25FcnJvcn0pYCwoKT0+cy50aHJvdyhqKSksRShqKSxvfHxzLmFzc2lnbihJLCExKX0pLGUub2soSSl9ZnVuY3Rpb24gaCgpe2UucmVzdWx0KCgwLGphLmNhbGxWYWxpZGF0ZUNvZGUpKGUsdCxwKSwoKT0+VCh0KSwoKT0+RSh0KSl9ZnVuY3Rpb24gRShJKXtjb25zdCBqPSgwLGplLl8pYCR7SX0uZXJyb3JzYDtzLmFzc2lnbihzci5kZWZhdWx0LnZFcnJvcnMsKDAsamUuXylgJHtzci5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHtqfSA6ICR7c3IuZGVmYXVsdC52RXJyb3JzfS5jb25jYXQoJHtqfSlgKSxzLmFzc2lnbihzci5kZWZhdWx0LmVycm9ycywoMCxqZS5fKWAke3NyLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCl9ZnVuY3Rpb24gVChJKXt2YXIgajtpZighYS5vcHRzLnVuZXZhbHVhdGVkKXJldHVybjtjb25zdCB5PShqPXI9PW51bGw/dm9pZCAwOnIudmFsaWRhdGUpPT09bnVsbHx8aj09PXZvaWQgMD92b2lkIDA6ai5ldmFsdWF0ZWQ7aWYoYS5wcm9wcyE9PSEwKWlmKHkmJiF5LmR5bmFtaWNQcm9wcyl5LnByb3BzIT09dm9pZCAwJiYoYS5wcm9wcz1mbi5tZXJnZUV2YWx1YXRlZC5wcm9wcyhzLHkucHJvcHMsYS5wcm9wcykpO2Vsc2V7Y29uc3QgXz1zLnZhcigicHJvcHMiLCgwLGplLl8pYCR7SX0uZXZhbHVhdGVkLnByb3BzYCk7YS5wcm9wcz1mbi5tZXJnZUV2YWx1YXRlZC5wcm9wcyhzLF8sYS5wcm9wcyxqZS5OYW1lKX1pZihhLml0ZW1zIT09ITApaWYoeSYmIXkuZHluYW1pY0l0ZW1zKXkuaXRlbXMhPT12b2lkIDAmJihhLml0ZW1zPWZuLm1lcmdlRXZhbHVhdGVkLml0ZW1zKHMseS5pdGVtcyxhLml0ZW1zKSk7ZWxzZXtjb25zdCBfPXMudmFyKCJpdGVtcyIsKDAsamUuXylgJHtJfS5ldmFsdWF0ZWQuaXRlbXNgKTthLml0ZW1zPWZuLm1lcmdlRXZhbHVhdGVkLml0ZW1zKHMsXyxhLml0ZW1zLGplLk5hbWUpfX19TXQuY2FsbFJlZj1kbixNdC5kZWZhdWx0PUt1O3ZhciBWZT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVmUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFZlLmNoZWNrTWV0YWRhdGE9dm9pZCAwO2NvbnN0IEJ1PWJlLEp1PXtrZXl3b3JkOiJtZXRhZGF0YSIsc2NoZW1hVHlwZToib2JqZWN0Iixjb2RlKGUpe0ZhKGUpO2NvbnN0e2dlbjp0LHNjaGVtYTpyLGl0Om59PWU7aWYoKDAsQnUuYWx3YXlzVmFsaWRTY2hlbWEpKG4scikpcmV0dXJuO2NvbnN0IHM9dC5uYW1lKCJ2YWxpZCIpO2Uuc3Vic2NoZW1hKHtrZXl3b3JkOiJtZXRhZGF0YSIsanRkTWV0YWRhdGE6ITB9LHMpLGUub2socyl9fTtmdW5jdGlvbiBGYSh7aXQ6ZSxrZXl3b3JkOnR9LHIpe2lmKGUuanRkTWV0YWRhdGEhPT1yKXRocm93IG5ldyBFcnJvcihgSlREOiAiJHt0fSIgY2Fubm90IGJlIHVzZWQgaW4gdGhpcyBzY2hlbWEgbG9jYXRpb25gKX1WZS5jaGVja01ldGFkYXRhPUZhLFZlLmRlZmF1bHQ9SnUsT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGdC5oYXNSZWY9dm9pZCAwO2NvbnN0IE1hPUNlLFNyPXVlLHF1PWt0LExhPUxlLFZhPU10LEd1PVZlLFF1PXtrZXl3b3JkOiJyZWYiLHNjaGVtYVR5cGU6InN0cmluZyIsY29kZShlKXsoMCxHdS5jaGVja01ldGFkYXRhKShlKTtjb25zdHtnZW46dCxkYXRhOnIsc2NoZW1hOm4scGFyZW50U2NoZW1hOnMsaXQ6YX09ZSx7c2NoZW1hRW52Ontyb290Om99fT1hLGw9dC5uYW1lKCJ2YWxpZCIpO3MubnVsbGFibGU/KHQudmFyKGwsKDAsU3IuXylgJHtyfSA9PT0gbnVsbGApLHQuaWYoKDAsU3Iubm90KShsKSxmKSk6KHQudmFyKGwsITEpLGYoKSksZS5vayhsKTtmdW5jdGlvbiBmKCl7dmFyIGg7Y29uc3QgRT0oaD1vLnNjaGVtYS5kZWZpbml0aW9ucyk9PT1udWxsfHxoPT09dm9pZCAwP3ZvaWQgMDpoW25dO2lmKCFFKXRocm93IG5ldyBxdS5kZWZhdWx0KGEub3B0cy51cmlSZXNvbHZlciwiIixuLGBObyBkZWZpbml0aW9uICR7bn1gKTtycyhFKXx8IWEub3B0cy5pbmxpbmVSZWZzP3AoRSk6aShFKX1mdW5jdGlvbiBwKGgpe2NvbnN0IEU9TWEuY29tcGlsZVNjaGVtYS5jYWxsKGEuc2VsZixuZXcgTWEuU2NoZW1hRW52KHtzY2hlbWE6aCxyb290Om8sc2NoZW1hUGF0aDpgL2RlZmluaXRpb25zLyR7bn1gfSkpLFQ9KDAsVmEuZ2V0VmFsaWRhdGUpKGUsRSksST10LmNvbnN0KCJfZXJycyIsTGEuZGVmYXVsdC5lcnJvcnMpOygwLFZhLmNhbGxSZWYpKGUsVCxFLEUuJGFzeW5jKSx0LmFzc2lnbihsLCgwLFNyLl8pYCR7SX0gPT09ICR7TGEuZGVmYXVsdC5lcnJvcnN9YCl9ZnVuY3Rpb24gaShoKXtjb25zdCBFPXQuc2NvcGVWYWx1ZSgic2NoZW1hIixhLm9wdHMuY29kZS5zb3VyY2U9PT0hMD97cmVmOmgsY29kZTooMCxTci5zdHJpbmdpZnkpKGgpfTp7cmVmOmh9KTtlLnN1YnNjaGVtYSh7c2NoZW1hOmgsZGF0YVR5cGVzOltdLHNjaGVtYVBhdGg6U3IubmlsLHRvcFNjaGVtYVJlZjpFLGVyclNjaGVtYVBhdGg6YC9kZWZpbml0aW9ucy8ke259YH0sbCl9fX07ZnVuY3Rpb24gcnMoZSl7Zm9yKGNvbnN0IHQgaW4gZSl7bGV0IHI7aWYodD09PSJyZWYifHx0eXBlb2Yocj1lW3RdKT09Im9iamVjdCImJnJzKHIpKXJldHVybiEwfXJldHVybiExfUZ0Lmhhc1JlZj1ycyxGdC5kZWZhdWx0PVF1O3ZhciBucz17fSxobj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IFl1PS90fFxzL2ksV3U9L14oXGRcZFxkXGQpLShcZFxkKS0oXGRcZCkkLyxYdT0vXihcZFxkKTooXGRcZCk6KFxkXGQpKD86XC5cZCspPyg/Onp8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8pJC9pLFp1PVswLDMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtmdW5jdGlvbiB6YShlLHQpe2NvbnN0IHI9ZS5zcGxpdChZdSk7cmV0dXJuIHIubGVuZ3RoPT09MiYmSGEoclswXSkmJnh1KHJbMV0pfHx0JiZyLmxlbmd0aD09PTEmJkhhKHJbMF0pfWhuLmRlZmF1bHQ9emE7ZnVuY3Rpb24gSGEoZSl7Y29uc3QgdD1XdS5leGVjKGUpO2lmKCF0KXJldHVybiExO2NvbnN0IHI9K3RbMV0sbj0rdFsyXSxzPSt0WzNdO3JldHVybiBuPj0xJiZuPD0xMiYmcz49MSYmKHM8PVp1W25dfHxuPT09MiYmcz09PTI5JiYociUxMDA9PT0wP3IlNDAwPT09MDpyJTQ9PT0wKSl9ZnVuY3Rpb24geHUoZSl7Y29uc3QgdD1YdS5leGVjKGUpO2lmKCF0KXJldHVybiExO2NvbnN0IHI9K3RbMV0sbj0rdFsyXSxzPSt0WzNdLGE9Kyh0WzRdfHwwKSxvPSsodFs1XXx8MCk7cmV0dXJuIHI8PTIzJiZuPD01OSYmczw9NTl8fHItYT09PTIzJiZuLW89PT01OSYmcz09PTYwfXphLmNvZGU9J3JlcXVpcmUoImFqdi9kaXN0L3J1bnRpbWUvdGltZXN0YW1wIikuZGVmYXVsdCc7dmFyIHplPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksemUudHlwZUVycm9yUGFyYW1zPXplLnR5cGVFcnJvck1lc3NhZ2U9emUudHlwZUVycm9yPXZvaWQgMDtjb25zdCBlbD11ZTtmdW5jdGlvbiB0bChlKXtyZXR1cm57bWVzc2FnZTp0PT5LYSh0LGUpLHBhcmFtczp0PT5CYSh0LGUpfX16ZS50eXBlRXJyb3I9dGw7ZnVuY3Rpb24gS2Eoe3BhcmVudFNjaGVtYTplfSx0KXtyZXR1cm4gZSE9bnVsbCYmZS5udWxsYWJsZT9gbXVzdCBiZSAke3R9IG9yIG51bGxgOmBtdXN0IGJlICR7dH1gfXplLnR5cGVFcnJvck1lc3NhZ2U9S2E7ZnVuY3Rpb24gQmEoe3BhcmVudFNjaGVtYTplfSx0KXtyZXR1cm4oMCxlbC5fKWB7dHlwZTogJHt0fSwgbnVsbGFibGU6ICR7ISEoZSE9bnVsbCYmZS5udWxsYWJsZSl9fWB9emUudHlwZUVycm9yUGFyYW1zPUJhLGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmludFJhbmdlPXZvaWQgMDtjb25zdCB0PXVlLHI9aG4sbj1iZSxzPVZlLGE9emU7ZS5pbnRSYW5nZT17aW50ODpbLTEyOCwxMjcsM10sdWludDg6WzAsMjU1LDNdLGludDE2OlstMzI3NjgsMzI3NjcsNV0sdWludDE2OlswLDY1NTM1LDVdLGludDMyOlstMjE0NzQ4MzY0OCwyMTQ3NDgzNjQ3LDEwXSx1aW50MzI6WzAsNDI5NDk2NzI5NSwxMF19O2NvbnN0IG89e21lc3NhZ2U6cD0+KDAsYS50eXBlRXJyb3JNZXNzYWdlKShwLHAuc2NoZW1hKSxwYXJhbXM6cD0+KDAsYS50eXBlRXJyb3JQYXJhbXMpKHAscC5zY2hlbWEpfTtmdW5jdGlvbiBsKHApe2NvbnN0e2dlbjppLGRhdGE6aCxpdDpFfT1wLHt0aW1lc3RhbXA6VCxhbGxvd0RhdGU6SX09RS5vcHRzO2lmKFQ9PT0iZGF0ZSIpcmV0dXJuKDAsdC5fKWAke2h9IGluc3RhbmNlb2YgRGF0ZSBgO2NvbnN0IGo9KDAsbi51c2VGdW5jKShpLHIuZGVmYXVsdCkseT1JPygwLHQuXylgLCB0cnVlYDp0Lm5pbCxfPSgwLHQuXylgdHlwZW9mICR7aH0gPT0gInN0cmluZyIgJiYgJHtqfSgke2h9JHt5fSlgO3JldHVybiBUPT09InN0cmluZyI/XzooMCx0Lm9yKSgoMCx0Ll8pYCR7aH0gaW5zdGFuY2VvZiBEYXRlYCxfKX1jb25zdCBmPXtrZXl3b3JkOiJ0eXBlIixzY2hlbWFUeXBlOiJzdHJpbmciLGVycm9yOm8sY29kZShwKXsoMCxzLmNoZWNrTWV0YWRhdGEpKHApO2NvbnN0e2RhdGE6aSxzY2hlbWE6aCxwYXJlbnRTY2hlbWE6RSxpdDpUfT1wO2xldCBJO3N3aXRjaChoKXtjYXNlImJvb2xlYW4iOmNhc2Uic3RyaW5nIjpJPSgwLHQuXylgdHlwZW9mICR7aX0gPT0gJHtofWA7YnJlYWs7Y2FzZSJ0aW1lc3RhbXAiOntJPWwocCk7YnJlYWt9Y2FzZSJmbG9hdDMyIjpjYXNlImZsb2F0NjQiOkk9KDAsdC5fKWB0eXBlb2YgJHtpfSA9PSAibnVtYmVyImA7YnJlYWs7ZGVmYXVsdDp7Y29uc3Qgaj1oO2lmKEk9KDAsdC5fKWB0eXBlb2YgJHtpfSA9PSAibnVtYmVyIiAmJiBpc0Zpbml0ZSgke2l9KSAmJiAhKCR7aX0gJSAxKWAsIVQub3B0cy5pbnQzMnJhbmdlJiYoaj09PSJpbnQzMiJ8fGo9PT0idWludDMyIikpaj09PSJ1aW50MzIiJiYoST0oMCx0Ll8pYCR7SX0gJiYgJHtpfSA+PSAwYCk7ZWxzZXtjb25zdFt5LF9dPWUuaW50UmFuZ2Vbal07ST0oMCx0Ll8pYCR7SX0gJiYgJHtpfSA+PSAke3l9ICYmICR7aX0gPD0gJHtffWB9fX1wLnBhc3MoRS5udWxsYWJsZT8oMCx0Lm9yKSgoMCx0Ll8pYCR7aX0gPT09IG51bGxgLEkpOkkpfX07ZS5kZWZhdWx0PWZ9KG5zKTt2YXIgc3M9e30seGU9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHhlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx4ZS5jaGVja051bGxhYmxlT2JqZWN0PXhlLmNoZWNrTnVsbGFibGU9dm9pZCAwO2NvbnN0IHBuPXVlO2Z1bmN0aW9uIEphKHtnZW46ZSxkYXRhOnQscGFyZW50U2NoZW1hOnJ9LG49cG4ubmlsKXtjb25zdCBzPWUubmFtZSgidmFsaWQiKTtyZXR1cm4gci5udWxsYWJsZT8oZS5sZXQocywoMCxwbi5fKWAke3R9ID09PSBudWxsYCksbj0oMCxwbi5ub3QpKHMpKTplLmxldChzLCExKSxbcyxuXX14ZS5jaGVja051bGxhYmxlPUphO2Z1bmN0aW9uIHJsKGUsdCl7Y29uc3RbcixuXT1KYShlLHQpO3JldHVybltyLCgwLHBuLl8pYCR7bn0gJiYgdHlwZW9mICR7ZS5kYXRhfSA9PSAib2JqZWN0IiAmJiAhQXJyYXkuaXNBcnJheSgke2UuZGF0YX0pYF19eGUuY2hlY2tOdWxsYWJsZU9iamVjdD1ybCxPYmplY3QuZGVmaW5lUHJvcGVydHkoc3MsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHd0PXVlLG5sPVZlLHNsPXhlLGFsPXtrZXl3b3JkOiJlbnVtIixzY2hlbWFUeXBlOiJhcnJheSIsZXJyb3I6e21lc3NhZ2U6Im11c3QgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlcyIscGFyYW1zOih7c2NoZW1hQ29kZTplfSk9PigwLHd0Ll8pYHthbGxvd2VkVmFsdWVzOiAke2V9fWB9LGNvZGUoZSl7KDAsbmwuY2hlY2tNZXRhZGF0YSkoZSk7Y29uc3R7Z2VuOnQsZGF0YTpyLHNjaGVtYTpuLHNjaGVtYVZhbHVlOnMscGFyZW50U2NoZW1hOmEsaXQ6b309ZTtpZihuLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJlbnVtIG11c3QgaGF2ZSBub24tZW1wdHkgYXJyYXkiKTtpZihuLmxlbmd0aCE9PW5ldyBTZXQobikuc2l6ZSl0aHJvdyBuZXcgRXJyb3IoImVudW0gaXRlbXMgbXVzdCBiZSB1bmlxdWUiKTtsZXQgbDtjb25zdCBmPSgwLHd0Ll8pYHR5cGVvZiAke3J9ID09ICJzdHJpbmciYDtpZihuLmxlbmd0aD49by5vcHRzLmxvb3BFbnVtKXtsZXQgaTtbbCxpXT0oMCxzbC5jaGVja051bGxhYmxlKShlLGYpLHQuaWYoaSxwKX1lbHNle2lmKCFBcnJheS5pc0FycmF5KG4pKXRocm93IG5ldyBFcnJvcigiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yIik7bD0oMCx3dC5hbmQpKGYsKDAsd3Qub3IpKC4uLm4ubWFwKGk9PigwLHd0Ll8pYCR7cn0gPT09ICR7aX1gKSkpLGEubnVsbGFibGUmJihsPSgwLHd0Lm9yKSgoMCx3dC5fKWAke3J9ID09PSBudWxsYCxsKSl9ZS5wYXNzKGwpO2Z1bmN0aW9uIHAoKXt0LmZvck9mKCJ2IixzLGk9PnQuaWYoKDAsd3QuXylgJHtsfSA9ICR7cn0gPT09ICR7aX1gLCgpPT50LmJyZWFrKCkpKX19fTtzcy5kZWZhdWx0PWFsO3ZhciBhcz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IG9sPWJlLGlsPW5lLHFhPXVlLGNsPVZlLHVsPXhlLGxsPXtrZXl3b3JkOiJlbGVtZW50cyIsc2NoZW1hVHlwZToib2JqZWN0IixlcnJvcjooMCx6ZS50eXBlRXJyb3IpKCJhcnJheSIpLGNvZGUoZSl7KDAsY2wuY2hlY2tNZXRhZGF0YSkoZSk7Y29uc3R7Z2VuOnQsZGF0YTpyLHNjaGVtYTpuLGl0OnN9PWU7aWYoKDAsb2wuYWx3YXlzVmFsaWRTY2hlbWEpKHMsbikpcmV0dXJuO2NvbnN0W2FdPSgwLHVsLmNoZWNrTnVsbGFibGUpKGUpO3QuaWYoKDAscWEubm90KShhKSwoKT0+dC5pZigoMCxxYS5fKWBBcnJheS5pc0FycmF5KCR7cn0pYCwoKT0+dC5hc3NpZ24oYSwoMCxpbC52YWxpZGF0ZUFycmF5KShlKSksKCk9PmUuZXJyb3IoKSkpLGUub2soYSl9fTthcy5kZWZhdWx0PWxsO3ZhciBvcz17fTsoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUudmFsaWRhdGVQcm9wZXJ0aWVzPWUuZXJyb3I9dm9pZCAwO2NvbnN0IHQ9bmUscj1iZSxuPXVlLHM9VmUsYT14ZSxvPXplO3ZhciBsOyhmdW5jdGlvbihpKXtpLkFkZGl0aW9uYWw9ImFkZGl0aW9uYWwiLGkuTWlzc2luZz0ibWlzc2luZyJ9KShsfHwobD17fSkpLGUuZXJyb3I9e21lc3NhZ2U6aT0+e2NvbnN0e3BhcmFtczpofT1pO3JldHVybiBoLnByb3BFcnJvcj9oLnByb3BFcnJvcj09PWwuQWRkaXRpb25hbD8ibXVzdCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMiOmBtdXN0IGhhdmUgcHJvcGVydHkgJyR7aC5taXNzaW5nUHJvcGVydHl9J2A6KDAsby50eXBlRXJyb3JNZXNzYWdlKShpLCJvYmplY3QiKX0scGFyYW1zOmk9Pntjb25zdHtwYXJhbXM6aH09aTtyZXR1cm4gaC5wcm9wRXJyb3I/aC5wcm9wRXJyb3I9PT1sLkFkZGl0aW9uYWw/KDAsbi5fKWB7ZXJyb3I6ICR7aC5wcm9wRXJyb3J9LCBhZGRpdGlvbmFsUHJvcGVydHk6ICR7aC5hZGRpdGlvbmFsUHJvcGVydHl9fWA6KDAsbi5fKWB7ZXJyb3I6ICR7aC5wcm9wRXJyb3J9LCBtaXNzaW5nUHJvcGVydHk6ICR7aC5taXNzaW5nUHJvcGVydHl9fWA6KDAsby50eXBlRXJyb3JQYXJhbXMpKGksIm9iamVjdCIpfX07Y29uc3QgZj17a2V5d29yZDoicHJvcGVydGllcyIsc2NoZW1hVHlwZToib2JqZWN0IixlcnJvcjplLmVycm9yLGNvZGU6cH07ZnVuY3Rpb24gcChpKXsoMCxzLmNoZWNrTWV0YWRhdGEpKGkpO2NvbnN0e2dlbjpoLGRhdGE6RSxwYXJlbnRTY2hlbWE6VCxpdDpJfT1pLHthZGRpdGlvbmFsUHJvcGVydGllczpqLG51bGxhYmxlOnl9PVQ7aWYoSS5qdGREaXNjcmltaW5hdG9yJiZ5KXRocm93IG5ldyBFcnJvcigiSlREOiBudWxsYWJsZSBpbnNpZGUgZGlzY3JpbWluYXRvciBtYXBwaW5nIik7aWYoTigpKXRocm93IG5ldyBFcnJvcigiSlREOiBwcm9wZXJ0aWVzIGFuZCBvcHRpb25hbFByb3BlcnRpZXMgaGF2ZSBjb21tb24gbWVtYmVycyIpO2NvbnN0W18sYl09RCgicHJvcGVydGllcyIpLFtPLEFdPUQoIm9wdGlvbmFsUHJvcGVydGllcyIpO2lmKGIubGVuZ3RoPT09MCYmQS5sZW5ndGg9PT0wJiZqKXJldHVybjtjb25zdFtILCRdPUkuanRkRGlzY3JpbWluYXRvcj09PXZvaWQgMD8oMCxhLmNoZWNrTnVsbGFibGVPYmplY3QpKGksRSk6W2gubGV0KCJ2YWxpZCIsITEpLCEwXTtoLmlmKCQsKCk9PmguYXNzaWduKEgsITApLmJsb2NrKCgpPT57QihiLCJwcm9wZXJ0aWVzIiwhMCksQihBLCJvcHRpb25hbFByb3BlcnRpZXMiKSxqfHxwZSgpfSkpLGkucGFzcyhIKTtmdW5jdGlvbiBOKCl7Y29uc3Qgb2U9VC5wcm9wZXJ0aWVzLFg9VC5vcHRpb25hbFByb3BlcnRpZXM7aWYoIShvZSYmWCkpcmV0dXJuITE7Zm9yKGNvbnN0IHZlIGluIG9lKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChYLHZlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBEKG9lKXtjb25zdCBYPVRbb2VdLHZlPVg/KDAsdC5hbGxTY2hlbWFQcm9wZXJ0aWVzKShYKTpbXTtpZihJLmp0ZERpc2NyaW1pbmF0b3ImJnZlLnNvbWUoTmU9Pk5lPT09SS5qdGREaXNjcmltaW5hdG9yKSl0aHJvdyBuZXcgRXJyb3IoYEpURDogZGlzY3JpbWluYXRvciB0YWcgdXNlZCBpbiAke29lfWApO2NvbnN0IEVlPXZlLmZpbHRlcihOZT0+ISgwLHIuYWx3YXlzVmFsaWRTY2hlbWEpKEksWFtOZV0pKTtyZXR1cm5bdmUsRWVdfWZ1bmN0aW9uIEIob2UsWCx2ZSl7Y29uc3QgRWU9aC52YXIoInZhbGlkIik7Zm9yKGNvbnN0IEJlIG9mIG9lKWguaWYoKDAsdC5wcm9wZXJ0eUluRGF0YSkoaCxFLEJlLEkub3B0cy5vd25Qcm9wZXJ0aWVzKSwoKT0+RyhCZSxYLEVlKSwoKT0+TmUoQmUpKSxpLm9rKEVlKTtmdW5jdGlvbiBOZShCZSl7dmU/KGguYXNzaWduKEVlLCExKSxpLmVycm9yKCExLHtwcm9wRXJyb3I6bC5NaXNzaW5nLG1pc3NpbmdQcm9wZXJ0eTpCZX0se3NjaGVtYVBhdGg6QmV9KSk6aC5hc3NpZ24oRWUsITApfX1mdW5jdGlvbiBHKG9lLFgsdmUpe2kuc3Vic2NoZW1hKHtrZXl3b3JkOlgsc2NoZW1hUHJvcDpvZSxkYXRhUHJvcDpvZX0sdmUpfWZ1bmN0aW9uIHBlKCl7aC5mb3JJbigia2V5IixFLG9lPT57Y29uc3QgWD1JLmp0ZERpc2NyaW1pbmF0b3I9PT12b2lkIDA/XzpbSS5qdGREaXNjcmltaW5hdG9yXS5jb25jYXQoXyksdmU9VyhvZSxYLCJwcm9wZXJ0aWVzIiksRWU9VyhvZSxPLCJvcHRpb25hbFByb3BlcnRpZXMiKSxOZT12ZT09PSEwP0VlOkVlPT09ITA/dmU6KDAsbi5hbmQpKHZlLEVlKTtoLmlmKE5lLCgpPT57SS5vcHRzLnJlbW92ZUFkZGl0aW9uYWw/aC5jb2RlKCgwLG4uXylgZGVsZXRlICR7RX1bJHtvZX1dYCk6KGkuZXJyb3IoITEse3Byb3BFcnJvcjpsLkFkZGl0aW9uYWwsYWRkaXRpb25hbFByb3BlcnR5Om9lfSx7aW5zdGFuY2VQYXRoOm9lLHBhcmVudFNjaGVtYTohMH0pLEkub3B0cy5hbGxFcnJvcnN8fGguYnJlYWsoKSl9KX0pfWZ1bmN0aW9uIFcob2UsWCx2ZSl7bGV0IEVlO2lmKFgubGVuZ3RoPjgpe2NvbnN0IE5lPSgwLHIuc2NoZW1hUmVmT3JWYWwpKEksVFt2ZV0sdmUpO0VlPSgwLG4ubm90KSgoMCx0LmlzT3duUHJvcGVydHkpKGgsTmUsb2UpKX1lbHNlIFgubGVuZ3RoP0VlPSgwLG4uYW5kKSguLi5YLm1hcChOZT0+KDAsbi5fKWAke29lfSAhPT0gJHtOZX1gKSk6RWU9ITA7cmV0dXJuIEVlfX1lLnZhbGlkYXRlUHJvcGVydGllcz1wLGUuZGVmYXVsdD1mfSkob3MpO3ZhciBpcz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IEdhPW9zLGZsPXtrZXl3b3JkOiJvcHRpb25hbFByb3BlcnRpZXMiLHNjaGVtYVR5cGU6Im9iamVjdCIsZXJyb3I6R2EuZXJyb3IsY29kZShlKXtlLnBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzfHwoMCxHYS52YWxpZGF0ZVByb3BlcnRpZXMpKGUpfX07aXMuZGVmYXVsdD1mbDt2YXIgY3M9e30sUWE9e307KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLkRpc2NyRXJyb3I9dm9pZCAwLGZ1bmN0aW9uKHQpe3QuVGFnPSJ0YWciLHQuTWFwcGluZz0ibWFwcGluZyJ9KGUuRGlzY3JFcnJvcnx8KGUuRGlzY3JFcnJvcj17fSkpfSkoUWEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgTHQ9dWUsZGw9VmUsaGw9eGUsWWE9emUsbW49UWEscGw9e2tleXdvcmQ6ImRpc2NyaW1pbmF0b3IiLHNjaGVtYVR5cGU6InN0cmluZyIsaW1wbGVtZW50czpbIm1hcHBpbmciXSxlcnJvcjp7bWVzc2FnZTplPT57Y29uc3R7c2NoZW1hOnQscGFyYW1zOnJ9PWU7cmV0dXJuIHIuZGlzY3JFcnJvcj9yLmRpc2NyRXJyb3I9PT1tbi5EaXNjckVycm9yLlRhZz9gdGFnICIke3R9IiBtdXN0IGJlIHN0cmluZ2A6YHZhbHVlIG9mIHRhZyAiJHt0fSIgbXVzdCBiZSBpbiBtYXBwaW5nYDooMCxZYS50eXBlRXJyb3JNZXNzYWdlKShlLCJvYmplY3QiKX0scGFyYW1zOmU9Pntjb25zdHtzY2hlbWE6dCxwYXJhbXM6cn09ZTtyZXR1cm4gci5kaXNjckVycm9yPygwLEx0Ll8pYHtlcnJvcjogJHtyLmRpc2NyRXJyb3J9LCB0YWc6ICR7dH0sIHRhZ1ZhbHVlOiAke3IudGFnfX1gOigwLFlhLnR5cGVFcnJvclBhcmFtcykoZSwib2JqZWN0Iil9fSxjb2RlKGUpeygwLGRsLmNoZWNrTWV0YWRhdGEpKGUpO2NvbnN0e2dlbjp0LGRhdGE6cixzY2hlbWE6bixwYXJlbnRTY2hlbWE6c309ZSxbYSxvXT0oMCxobC5jaGVja051bGxhYmxlT2JqZWN0KShlLHIpO3QuaWYobyksbCgpLHQuZWxzZUlmKCgwLEx0Lm5vdCkoYSkpLGUuZXJyb3IoKSx0LmVuZElmKCksZS5vayhhKTtmdW5jdGlvbiBsKCl7Y29uc3QgaT10LmNvbnN0KCJ0YWciLCgwLEx0Ll8pYCR7cn0keygwLEx0LmdldFByb3BlcnR5KShuKX1gKTt0LmlmKCgwLEx0Ll8pYCR7aX0gPT09IHVuZGVmaW5lZGApLGUuZXJyb3IoITEse2Rpc2NyRXJyb3I6bW4uRGlzY3JFcnJvci5UYWcsdGFnOml9KSx0LmVsc2VJZigoMCxMdC5fKWB0eXBlb2YgJHtpfSA9PSAic3RyaW5nImApLGYoaSksdC5lbHNlKCksZS5lcnJvcighMSx7ZGlzY3JFcnJvcjptbi5EaXNjckVycm9yLlRhZyx0YWc6aX0se2luc3RhbmNlUGF0aDpufSksdC5lbmRJZigpfWZ1bmN0aW9uIGYoaSl7dC5pZighMSk7Zm9yKGNvbnN0IGggaW4gcy5tYXBwaW5nKXQuZWxzZUlmKCgwLEx0Ll8pYCR7aX0gPT09ICR7aH1gKSx0LmFzc2lnbihhLHAoaCkpO3QuZWxzZSgpLGUuZXJyb3IoITEse2Rpc2NyRXJyb3I6bW4uRGlzY3JFcnJvci5NYXBwaW5nLHRhZzppfSx7aW5zdGFuY2VQYXRoOm4sc2NoZW1hUGF0aDoibWFwcGluZyIscGFyZW50U2NoZW1hOiEwfSksdC5lbmRJZigpfWZ1bmN0aW9uIHAoaSl7Y29uc3QgaD10Lm5hbWUoInZhbGlkIik7cmV0dXJuIGUuc3Vic2NoZW1hKHtrZXl3b3JkOiJtYXBwaW5nIixzY2hlbWFQcm9wOmksanRkRGlzY3JpbWluYXRvcjpufSxoKSxofX19O2NzLmRlZmF1bHQ9cGw7dmFyIHVzPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1cywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgV2E9YmUsWGE9dWUsbWw9VmUsdmw9eGUsX2w9e2tleXdvcmQ6InZhbHVlcyIsc2NoZW1hVHlwZToib2JqZWN0IixlcnJvcjooMCx6ZS50eXBlRXJyb3IpKCJvYmplY3QiKSxjb2RlKGUpeygwLG1sLmNoZWNrTWV0YWRhdGEpKGUpO2NvbnN0e2dlbjp0LGRhdGE6cixzY2hlbWE6bixpdDpzfT1lO2lmKCgwLFdhLmFsd2F5c1ZhbGlkU2NoZW1hKShzLG4pKXJldHVybjtjb25zdFthLG9dPSgwLHZsLmNoZWNrTnVsbGFibGVPYmplY3QpKGUscik7dC5pZihvKSx0LmFzc2lnbihhLGwoKSksdC5lbHNlSWYoKDAsWGEubm90KShhKSksZS5lcnJvcigpLHQuZW5kSWYoKSxlLm9rKGEpO2Z1bmN0aW9uIGwoKXtjb25zdCBmPXQubmFtZSgidmFsaWQiKTtpZihzLmFsbEVycm9ycyl7Y29uc3QgaT10LmxldCgidmFsaWQiLCEwKTtyZXR1cm4gcCgoKT0+dC5hc3NpZ24oaSwhMSkpLGl9cmV0dXJuIHQudmFyKGYsITApLHAoKCk9PnQuYnJlYWsoKSksZjtmdW5jdGlvbiBwKGkpe3QuZm9ySW4oImtleSIscixoPT57ZS5zdWJzY2hlbWEoe2tleXdvcmQ6InZhbHVlcyIsZGF0YVByb3A6aCxkYXRhUHJvcFR5cGU6V2EuVHlwZS5TdHJ9LGYpLHQuaWYoKDAsWGEubm90KShmKSxpKX0pfX19fTt1cy5kZWZhdWx0PV9sO3ZhciBscz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkobHMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IGdsPXtrZXl3b3JkOiJ1bmlvbiIsc2NoZW1hVHlwZToiYXJyYXkiLHRyYWNrRXJyb3JzOiEwLGNvZGU6bmUudmFsaWRhdGVVbmlvbixlcnJvcjp7bWVzc2FnZToibXVzdCBtYXRjaCBhIHNjaGVtYSBpbiB1bmlvbiJ9fTtscy5kZWZhdWx0PWdsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0cywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgRWw9RnQseWw9bnMsJGw9c3Msd2w9YXMsU2w9b3MsUmw9aXMsYmw9Y3MsT2w9dXMsTmw9bHMsUGw9VmUsVGw9WyJkZWZpbml0aW9ucyIsRWwuZGVmYXVsdCx5bC5kZWZhdWx0LCRsLmRlZmF1bHQsd2wuZGVmYXVsdCxTbC5kZWZhdWx0LFJsLmRlZmF1bHQsYmwuZGVmYXVsdCxPbC5kZWZhdWx0LE5sLmRlZmF1bHQsUGwuZGVmYXVsdCx7a2V5d29yZDoiYWRkaXRpb25hbFByb3BlcnRpZXMiLHNjaGVtYVR5cGU6ImJvb2xlYW4ifSx7a2V5d29yZDoibnVsbGFibGUiLHNjaGVtYVR5cGU6ImJvb2xlYW4ifV07dHMuZGVmYXVsdD1UbDt2YXIgZnM9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBkdD1lPT57Y29uc3QgdD17bnVsbGFibGU6e3R5cGU6ImJvb2xlYW4ifSxtZXRhZGF0YTp7b3B0aW9uYWxQcm9wZXJ0aWVzOnt1bmlvbjp7ZWxlbWVudHM6e3JlZjoic2NoZW1hIn19fSxhZGRpdGlvbmFsUHJvcGVydGllczohMH19O3JldHVybiBlJiYodC5kZWZpbml0aW9ucz17dmFsdWVzOntyZWY6InNjaGVtYSJ9fSksdH0sQWw9ZT0+KHtvcHRpb25hbFByb3BlcnRpZXM6ZHQoZSl9KSxDbD1lPT4oe3Byb3BlcnRpZXM6e3JlZjp7dHlwZToic3RyaW5nIn19LG9wdGlvbmFsUHJvcGVydGllczpkdChlKX0pLElsPWU9Pih7cHJvcGVydGllczp7dHlwZTp7ZW51bTpbImJvb2xlYW4iLCJ0aW1lc3RhbXAiLCJzdHJpbmciLCJmbG9hdDMyIiwiZmxvYXQ2NCIsImludDgiLCJ1aW50OCIsImludDE2IiwidWludDE2IiwiaW50MzIiLCJ1aW50MzIiXX19LG9wdGlvbmFsUHJvcGVydGllczpkdChlKX0pLERsPWU9Pih7cHJvcGVydGllczp7ZW51bTp7ZWxlbWVudHM6e3R5cGU6InN0cmluZyJ9fX0sb3B0aW9uYWxQcm9wZXJ0aWVzOmR0KGUpfSksamw9ZT0+KHtwcm9wZXJ0aWVzOntlbGVtZW50czp7cmVmOiJzY2hlbWEifX0sb3B0aW9uYWxQcm9wZXJ0aWVzOmR0KGUpfSksWmE9ZT0+KHtwcm9wZXJ0aWVzOntwcm9wZXJ0aWVzOnt2YWx1ZXM6e3JlZjoic2NoZW1hIn19fSxvcHRpb25hbFByb3BlcnRpZXM6USh7b3B0aW9uYWxQcm9wZXJ0aWVzOnt2YWx1ZXM6e3JlZjoic2NoZW1hIn19LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnt0eXBlOiJib29sZWFuIn19LGR0KGUpKX0pLHhhPWU9Pih7cHJvcGVydGllczp7b3B0aW9uYWxQcm9wZXJ0aWVzOnt2YWx1ZXM6e3JlZjoic2NoZW1hIn19fSxvcHRpb25hbFByb3BlcnRpZXM6USh7YWRkaXRpb25hbFByb3BlcnRpZXM6e3R5cGU6ImJvb2xlYW4ifX0sZHQoZSkpfSksa2w9ZT0+KHtwcm9wZXJ0aWVzOntkaXNjcmltaW5hdG9yOnt0eXBlOiJzdHJpbmcifSxtYXBwaW5nOnt2YWx1ZXM6e21ldGFkYXRhOnt1bmlvbjpbWmEoITEpLHhhKCExKV19fX19LG9wdGlvbmFsUHJvcGVydGllczpkdChlKX0pLFVsPWU9Pih7cHJvcGVydGllczp7dmFsdWVzOntyZWY6InNjaGVtYSJ9fSxvcHRpb25hbFByb3BlcnRpZXM6ZHQoZSl9KSxlbz1lPT4oe21ldGFkYXRhOnt1bmlvbjpbQWwsQ2wsSWwsRGwsamwsWmEseGEsa2wsVWxdLm1hcCh0PT50KGUpKX19KSxGbD1RKHtkZWZpbml0aW9uczp7c2NoZW1hOmVvKCExKX19LGVvKCEwKSk7ZnMuZGVmYXVsdD1GbDt2YXIgZHM9e30sUnI9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KFJyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxSci5qdGRGb3Jtcz12b2lkIDAsUnIuanRkRm9ybXM9WyJlbGVtZW50cyIsInZhbHVlcyIsImRpc2NyaW1pbmF0b3IiLCJwcm9wZXJ0aWVzIiwib3B0aW9uYWxQcm9wZXJ0aWVzIiwiZW51bSIsInR5cGUiLCJyZWYiXTt2YXIgaHM9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGhzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBwcz0vW1xcIlx1MDAwMC1cdTAwMWZcdTAwN2YtXHUwMDlmXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csTWw9eyJcYiI6IlxcYiIsIgkiOiJcXHQiLCJcbiI6IlxcbiIsIlxmIjoiXFxmIiwiXHIiOiJcXHIiLCciJzonXFwiJywiXFwiOiJcXFxcIn07ZnVuY3Rpb24gdG8oZSl7cmV0dXJuIHBzLmxhc3RJbmRleD0wLCciJysocHMudGVzdChlKT9lLnJlcGxhY2UocHMsdD0+e2NvbnN0IHI9TWxbdF07cmV0dXJuIHR5cGVvZiByPT0ic3RyaW5nIj9yOiJcXHUiKygiMDAwMCIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpfSk6ZSkrJyInfWhzLmRlZmF1bHQ9dG8sdG8uY29kZT0ncmVxdWlyZSgiYWp2L2Rpc3QvcnVudGltZS9xdW90ZSIpLmRlZmF1bHQnLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkcywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgTGw9UnIscm89Q2UsdGU9dWUsVmw9a3QsaGU9TGUsemw9bmUsSGw9RnQsS2w9YmUsQmw9aHMsSmw9e2VsZW1lbnRzOkdsLHZhbHVlczpRbCxkaXNjcmltaW5hdG9yOllsLHByb3BlcnRpZXM6YW8sb3B0aW9uYWxQcm9wZXJ0aWVzOmFvLGVudW06T3IsdHlwZTpXbCxyZWY6Wmx9O2Z1bmN0aW9uIG5vKGUsdCl7Y29uc3Qgcj1yby5nZXRDb21waWxpbmdTY2hlbWEuY2FsbCh0aGlzLGUpO2lmKHIpcmV0dXJuIHI7Y29uc3R7ZXM1Om4sbGluZXM6c309dGhpcy5vcHRzLmNvZGUse293blByb3BlcnRpZXM6YX09dGhpcy5vcHRzLG89bmV3IHRlLkNvZGVHZW4odGhpcy5zY29wZSx7ZXM1Om4sbGluZXM6cyxvd25Qcm9wZXJ0aWVzOmF9KSxsPW8uc2NvcGVOYW1lKCJzZXJpYWxpemUiKSxmPXtzZWxmOnRoaXMsZ2VuOm8sc2NoZW1hOmUuc2NoZW1hLHNjaGVtYUVudjplLGRlZmluaXRpb25zOnQsZGF0YTpoZS5kZWZhdWx0LmRhdGF9O2xldCBwO3RyeXt0aGlzLl9jb21waWxhdGlvbnMuYWRkKGUpLGUuc2VyaWFsaXplTmFtZT1sLG8uZnVuYyhsLGhlLmRlZmF1bHQuZGF0YSwhMSwoKT0+e28ubGV0KGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5zdHIpYGApLGJyKGYpLG8ucmV0dXJuKGhlLmRlZmF1bHQuanNvbil9KSxvLm9wdGltaXplKHRoaXMub3B0cy5jb2RlLm9wdGltaXplKTtjb25zdCBpPW8udG9TdHJpbmcoKTtwPWAke28uc2NvcGVSZWZzKGhlLmRlZmF1bHQuc2NvcGUpfXJldHVybiAke2l9YDtjb25zdCBFPW5ldyBGdW5jdGlvbihgJHtoZS5kZWZhdWx0LnNjb3BlfWAscCkodGhpcy5zY29wZS5nZXQoKSk7dGhpcy5zY29wZS52YWx1ZShsLHtyZWY6RX0pLGUuc2VyaWFsaXplPUV9Y2F0Y2goaSl7dGhyb3cgcCYmdGhpcy5sb2dnZXIuZXJyb3IoIkVycm9yIGNvbXBpbGluZyBzZXJpYWxpemVyLCBmdW5jdGlvbiBjb2RlOiIscCksZGVsZXRlIGUuc2VyaWFsaXplLGRlbGV0ZSBlLnNlcmlhbGl6ZU5hbWUsaX1maW5hbGx5e3RoaXMuX2NvbXBpbGF0aW9ucy5kZWxldGUoZSl9cmV0dXJuIGV9ZHMuZGVmYXVsdD1ubztmdW5jdGlvbiBicihlKXtsZXQgdDtmb3IoY29uc3QgciBvZiBMbC5qdGRGb3JtcylpZihyIGluIGUuc2NoZW1hKXt0PXI7YnJlYWt9cWwoZSx0P0psW3RdOmVmKX1mdW5jdGlvbiBxbChlLHQpe2NvbnN0e2dlbjpyLHNjaGVtYTpuLGRhdGE6c309ZTtpZighbi5udWxsYWJsZSlyZXR1cm4gdChlKTtyLmlmKCgwLHRlLl8pYCR7c30gPT09IHVuZGVmaW5lZCB8fCAke3N9ID09PSBudWxsYCwoKT0+ci5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLHRlLl8pYCJudWxsImApLCgpPT50KGUpKX1mdW5jdGlvbiBHbChlKXtjb25zdHtnZW46dCxzY2hlbWE6cixkYXRhOm59PWU7dC5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLHRlLnN0cilgW2ApO2NvbnN0IHM9dC5sZXQoImZpcnN0IiwhMCk7dC5mb3JPZigiZWwiLG4sYT0+e2lvKGUscyksYnIobGUoUSh7fSxlKSx7c2NoZW1hOnIuZWxlbWVudHMsZGF0YTphfSkpfSksdC5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLHRlLnN0cilgXWApfWZ1bmN0aW9uIFFsKGUpe2NvbnN0e2dlbjp0LHNjaGVtYTpyLGRhdGE6bn09ZTt0LmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuc3RyKWB7YCk7Y29uc3Qgcz10LmxldCgiZmlyc3QiLCEwKTt0LmZvckluKCJrZXkiLG4sYT0+c28oZSxhLHIudmFsdWVzLHMpKSx0LmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuc3RyKWB9YCl9ZnVuY3Rpb24gc28oZSx0LHIsbil7Y29uc3R7Z2VuOnMsZGF0YTphfT1lO2lvKGUsbiksT3IobGUoUSh7fSxlKSx7ZGF0YTp0fSkpLHMuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5zdHIpYDpgKTtjb25zdCBvPXMuY29uc3QoInZhbHVlIiwoMCx0ZS5fKWAke2F9JHsoMCx0ZS5nZXRQcm9wZXJ0eSkodCl9YCk7YnIobGUoUSh7fSxlKSx7c2NoZW1hOnIsZGF0YTpvfSkpfWZ1bmN0aW9uIFlsKGUpe2NvbnN0e2dlbjp0LHNjaGVtYTpyLGRhdGE6bn09ZSx7ZGlzY3JpbWluYXRvcjpzfT1yO3QuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5zdHIpYHske0pTT04uc3RyaW5naWZ5KHMpfTpgKTtjb25zdCBhPXQuY29uc3QoInRhZyIsKDAsdGUuXylgJHtufSR7KDAsdGUuZ2V0UHJvcGVydHkpKHMpfWApO09yKGxlKFEoe30sZSkse2RhdGE6YX0pKSx0LmlmKCExKTtmb3IoY29uc3QgbyBpbiByLm1hcHBpbmcpe3QuZWxzZUlmKCgwLHRlLl8pYCR7YX0gPT09ICR7b31gKTtjb25zdCBsPXIubWFwcGluZ1tvXTtvbyhsZShRKHt9LGUpLHtzY2hlbWE6bH0pLHMpfXQuZW5kSWYoKSx0LmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuc3RyKWB9YCl9ZnVuY3Rpb24gYW8oZSl7Y29uc3R7Z2VuOnR9PWU7dC5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLHRlLnN0cilge2ApLG9vKGUpLHQuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5zdHIpYH1gKX1mdW5jdGlvbiBvbyhlLHQpe2NvbnN0e2dlbjpyLHNjaGVtYTpuLGRhdGE6c309ZSx7cHJvcGVydGllczphLG9wdGlvbmFsUHJvcGVydGllczpvfT1uLGw9aChhKSxmPWgobykscD1FKGwuY29uY2F0KGYpKTtsZXQgaT0hdDtmb3IoY29uc3QgeSBvZiBsKUkoeSxhW3ldLFQoeSkpO2Zvcihjb25zdCB5IG9mIGYpe2NvbnN0IF89VCh5KTtyLmlmKCgwLHRlLmFuZCkoKDAsdGUuXylgJHtffSAhPT0gdW5kZWZpbmVkYCwoMCx6bC5pc093blByb3BlcnR5KShyLHMseSkpLCgpPT5JKHksb1t5XSxfKSl9bi5hZGRpdGlvbmFsUHJvcGVydGllcyYmci5mb3JJbigia2V5IixzLHk9PnIuaWYoaih5LHApLCgpPT5zbyhlLHkse30sci5sZXQoImZpcnN0IixpKSkpKTtmdW5jdGlvbiBoKHkpe3JldHVybiB5P09iamVjdC5rZXlzKHkpOltdfWZ1bmN0aW9uIEUoeSl7aWYodCYmeS5wdXNoKHQpLG5ldyBTZXQoeSkuc2l6ZSE9PXkubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSlREOiBwcm9wZXJ0aWVzL29wdGlvbmFsUHJvcGVydGllcy9kaXNjaW1pbmF0b3Igb3ZlcmxhcCIpO3JldHVybiB5fWZ1bmN0aW9uIFQoeSl7cmV0dXJuIHIuY29uc3QoInZhbHVlIiwoMCx0ZS5fKWAke3N9JHsoMCx0ZS5nZXRQcm9wZXJ0eSkoeSl9YCl9ZnVuY3Rpb24gSSh5LF8sYil7aT9pPSExOnIuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5zdHIpYCxgKSxyLmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuc3RyKWAke0pTT04uc3RyaW5naWZ5KHkpfTpgKSxicihsZShRKHt9LGUpLHtzY2hlbWE6XyxkYXRhOmJ9KSl9ZnVuY3Rpb24gaih5LF8pe3JldHVybiBfLmxlbmd0aD8oMCx0ZS5hbmQpKC4uLl8ubWFwKGI9PigwLHRlLl8pYCR7eX0gIT09ICR7Yn1gKSk6ITB9fWZ1bmN0aW9uIFdsKGUpe2NvbnN0e2dlbjp0LHNjaGVtYTpyLGRhdGE6bn09ZTtzd2l0Y2goci50eXBlKXtjYXNlImJvb2xlYW4iOnQuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5fKWAke259ID8gInRydWUiIDogImZhbHNlImApO2JyZWFrO2Nhc2Uic3RyaW5nIjpPcihlKTticmVhaztjYXNlInRpbWVzdGFtcCI6dC5pZigoMCx0ZS5fKWAke259IGluc3RhbmNlb2YgRGF0ZWAsKCk9PnQuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCx0ZS5fKWAnIicgKyAke259LnRvSVNPU3RyaW5nKCkgKyAnIidgKSwoKT0+T3IoZSkpO2JyZWFrO2RlZmF1bHQ6WGwoZSl9fWZ1bmN0aW9uIE9yKHtnZW46ZSxkYXRhOnR9KXtlLmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuXylgJHsoMCxLbC51c2VGdW5jKShlLEJsLmRlZmF1bHQpfSgke3R9KWApfWZ1bmN0aW9uIFhsKHtnZW46ZSxkYXRhOnR9KXtlLmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuXylgIiIgKyAke3R9YCl9ZnVuY3Rpb24gWmwoZSl7Y29uc3R7Z2VuOnQsc2VsZjpyLGRhdGE6bixkZWZpbml0aW9uczpzLHNjaGVtYTphLHNjaGVtYUVudjpvfT1lLHtyZWY6bH09YSxmPXNbbF07aWYoIWYpdGhyb3cgbmV3IFZsLmRlZmF1bHQoci5vcHRzLnVyaVJlc29sdmVyLCIiLGwsYE5vIGRlZmluaXRpb24gJHtsfWApO2lmKCEoMCxIbC5oYXNSZWYpKGYpKXJldHVybiBicihsZShRKHt9LGUpLHtzY2hlbWE6Zn0pKTtjb25zdHtyb290OnB9PW8saT1uby5jYWxsKHIsbmV3IHJvLlNjaGVtYUVudih7c2NoZW1hOmYscm9vdDpwfSkscyk7dC5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLHRlLl8pYCR7eGwodCxpKX0oJHtufSlgKX1mdW5jdGlvbiB4bChlLHQpe3JldHVybiB0LnNlcmlhbGl6ZT9lLnNjb3BlVmFsdWUoInNlcmlhbGl6ZSIse3JlZjp0LnNlcmlhbGl6ZX0pOigwLHRlLl8pYCR7ZS5zY29wZVZhbHVlKCJ3cmFwcGVyIix7cmVmOnR9KX0uc2VyaWFsaXplYH1mdW5jdGlvbiBlZih7Z2VuOmUsZGF0YTp0fSl7ZS5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLHRlLl8pYEpTT04uc3RyaW5naWZ5KCR7dH0pYCl9ZnVuY3Rpb24gaW8oe2dlbjplfSx0KXtlLmlmKHQsKCk9PmUuYXNzaWduKHQsITEpLCgpPT5lLmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsdGUuc3RyKWAsYCkpfXZhciBtcz17fSxTdD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFN0LnBhcnNlSnNvblN0cmluZz1TdC5wYXJzZUpzb25OdW1iZXI9U3QucGFyc2VKc29uPXZvaWQgMDtjb25zdCB0Zj0vcG9zaXRpb25ccyhcZCspJC87ZnVuY3Rpb24gaHQoZSx0KXtsZXQgcjtodC5tZXNzYWdlPXZvaWQgMDtsZXQgbjt0JiYoZT1lLnNsaWNlKHQpKTt0cnl7cmV0dXJuIGh0LnBvc2l0aW9uPXQrZS5sZW5ndGgsSlNPTi5wYXJzZShlKX1jYXRjaChzKXtpZihuPXRmLmV4ZWMocy5tZXNzYWdlKSwhbil7aHQubWVzc2FnZT0idW5leHBlY3RlZCBlbmQiO3JldHVybn1yPStuWzFdO2NvbnN0IGE9ZVtyXTtlPWUuc2xpY2UoMCxyKSxodC5wb3NpdGlvbj10K3I7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoe2h0Lm1lc3NhZ2U9YHVuZXhwZWN0ZWQgdG9rZW4gJHthfWA7cmV0dXJufX19U3QucGFyc2VKc29uPWh0LGh0Lm1lc3NhZ2U9dm9pZCAwLGh0LnBvc2l0aW9uPTAsaHQuY29kZT0ncmVxdWlyZSgiYWp2L2Rpc3QvcnVudGltZS9wYXJzZUpzb24iKS5wYXJzZUpzb24nO2Z1bmN0aW9uIHB0KGUsdCxyKXtsZXQgbj0iIixzO2lmKHB0Lm1lc3NhZ2U9dm9pZCAwLGVbdF09PT0iLSImJihuKz0iLSIsdCsrKSxlW3RdPT09IjAiKW4rPSIwIix0Kys7ZWxzZSBpZighYShyKSl7bygpO3JldHVybn1pZihyKXJldHVybiBwdC5wb3NpdGlvbj10LCtuO2lmKGVbdF09PT0iLiImJihuKz0iLiIsdCsrLCFhKCkpKXtvKCk7cmV0dXJufWlmKHM9ZVt0XSwocz09PSJlInx8cz09PSJFIikmJihuKz0iZSIsdCsrLHM9ZVt0XSwocz09PSIrInx8cz09PSItIikmJihuKz1zLHQrKyksIWEoKSkpe28oKTtyZXR1cm59cmV0dXJuIHB0LnBvc2l0aW9uPXQsK247ZnVuY3Rpb24gYShsKXtsZXQgZj0hMTtmb3IoO3M9ZVt0XSxzPj0iMCImJnM8PSI5IiYmKGw9PT12b2lkIDB8fGwtLSA+MCk7KWY9ITAsbis9cyx0Kys7cmV0dXJuIGZ9ZnVuY3Rpb24gbygpe3B0LnBvc2l0aW9uPXQscHQubWVzc2FnZT10PGUubGVuZ3RoP2B1bmV4cGVjdGVkIHRva2VuICR7ZVt0XX1gOiJ1bmV4cGVjdGVkIGVuZCJ9fVN0LnBhcnNlSnNvbk51bWJlcj1wdCxwdC5tZXNzYWdlPXZvaWQgMCxwdC5wb3NpdGlvbj0wLHB0LmNvZGU9J3JlcXVpcmUoImFqdi9kaXN0L3J1bnRpbWUvcGFyc2VKc29uIikucGFyc2VKc29uTnVtYmVyJztjb25zdCBjbz17YjoiXGIiLGY6IlxmIixuOmAKYCxyOiJcciIsdDoiCSIsJyInOiciJywiLyI6Ii8iLCJcXCI6IlxcIn0scmY9ImEiLmNoYXJDb2RlQXQoMCksbmY9IjAiLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gUnQoZSx0KXtsZXQgcj0iIixuO2ZvcihSdC5tZXNzYWdlPXZvaWQgMDtuPWVbdCsrXSxuIT09JyInOylpZihuPT09IlxcIilpZihuPWVbdF0sbiBpbiBjbylyKz1jb1tuXSx0Kys7ZWxzZSBpZihuPT09InUiKXt0Kys7bGV0IGE9NCxvPTA7Zm9yKDthLS07KXtpZihvPDw9NCxuPWVbdF0sbj09PXZvaWQgMCl7cygidW5leHBlY3RlZCBlbmQiKTtyZXR1cm59aWYobj1uLnRvTG93ZXJDYXNlKCksbj49ImEiJiZuPD0iZiIpbys9bi5jaGFyQ29kZUF0KDApLXJmKzEwO2Vsc2UgaWYobj49IjAiJiZuPD0iOSIpbys9bi5jaGFyQ29kZUF0KDApLW5mO2Vsc2V7cyhgdW5leHBlY3RlZCB0b2tlbiAke259YCk7cmV0dXJufXQrK31yKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG8pfWVsc2V7cyhgdW5leHBlY3RlZCB0b2tlbiAke259YCk7cmV0dXJufWVsc2UgaWYobj09PXZvaWQgMCl7cygidW5leHBlY3RlZCBlbmQiKTtyZXR1cm59ZWxzZSBpZihuLmNoYXJDb2RlQXQoMCk+PTMyKXIrPW47ZWxzZXtzKGB1bmV4cGVjdGVkIHRva2VuICR7bn1gKTtyZXR1cm59cmV0dXJuIFJ0LnBvc2l0aW9uPXQscjtmdW5jdGlvbiBzKGEpe1J0LnBvc2l0aW9uPXQsUnQubWVzc2FnZT1hfX1TdC5wYXJzZUpzb25TdHJpbmc9UnQsUnQubWVzc2FnZT12b2lkIDAsUnQucG9zaXRpb249MCxSdC5jb2RlPSdyZXF1aXJlKCJhanYvZGlzdC9ydW50aW1lL3BhcnNlSnNvbiIpLnBhcnNlSnNvblN0cmluZycsT2JqZWN0LmRlZmluZVByb3BlcnR5KG1zLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzZj1Scix1bz1DZSxMPXVlLGFmPWt0LFk9TGUsb2Y9bmUsY2Y9RnQsdWY9bnMsdnM9U3QsbG89YmUsbGY9aG4sZmY9e2VsZW1lbnRzOm1mLHZhbHVlczp2ZixkaXNjcmltaW5hdG9yOmdmLHByb3BlcnRpZXM6cG8sb3B0aW9uYWxQcm9wZXJ0aWVzOnBvLGVudW06eWYsdHlwZTpFZixyZWY6JGZ9O2Z1bmN0aW9uIGZvKGUsdCl7Y29uc3Qgcj11by5nZXRDb21waWxpbmdTY2hlbWEuY2FsbCh0aGlzLGUpO2lmKHIpcmV0dXJuIHI7Y29uc3R7ZXM1Om4sbGluZXM6c309dGhpcy5vcHRzLmNvZGUse293blByb3BlcnRpZXM6YX09dGhpcy5vcHRzLG89bmV3IEwuQ29kZUdlbih0aGlzLnNjb3BlLHtlczU6bixsaW5lczpzLG93blByb3BlcnRpZXM6YX0pLGw9by5zY29wZU5hbWUoInBhcnNlIiksZj17c2VsZjp0aGlzLGdlbjpvLHNjaGVtYTplLnNjaGVtYSxzY2hlbWFFbnY6ZSxkZWZpbml0aW9uczp0LGRhdGE6WS5kZWZhdWx0LmRhdGEscGFyc2VOYW1lOmwsY2hhcjpvLm5hbWUoImMiKX07bGV0IHA7dHJ5e3RoaXMuX2NvbXBpbGF0aW9ucy5hZGQoZSksZS5wYXJzZU5hbWU9bCxkZihmKSxvLm9wdGltaXplKHRoaXMub3B0cy5jb2RlLm9wdGltaXplKTtjb25zdCBpPW8udG9TdHJpbmcoKTtwPWAke28uc2NvcGVSZWZzKFkuZGVmYXVsdC5zY29wZSl9cmV0dXJuICR7aX1gO2NvbnN0IEU9bmV3IEZ1bmN0aW9uKGAke1kuZGVmYXVsdC5zY29wZX1gLHApKHRoaXMuc2NvcGUuZ2V0KCkpO3RoaXMuc2NvcGUudmFsdWUobCx7cmVmOkV9KSxlLnBhcnNlPUV9Y2F0Y2goaSl7dGhyb3cgcCYmdGhpcy5sb2dnZXIuZXJyb3IoIkVycm9yIGNvbXBpbGluZyBwYXJzZXIsIGZ1bmN0aW9uIGNvZGU6IixwKSxkZWxldGUgZS5wYXJzZSxkZWxldGUgZS5wYXJzZU5hbWUsaX1maW5hbGx5e3RoaXMuX2NvbXBpbGF0aW9ucy5kZWxldGUoZSl9cmV0dXJuIGV9bXMuZGVmYXVsdD1mbztjb25zdCBfcz0oMCxMLl8pYHVuZGVmaW5lZGA7ZnVuY3Rpb24gZGYoZSl7Y29uc3R7Z2VuOnQscGFyc2VOYW1lOnIsY2hhcjpufT1lO3QuZnVuYyhyLCgwLEwuXylgJHtZLmRlZmF1bHQuanNvbn0sICR7WS5kZWZhdWx0Lmpzb25Qb3N9LCAke1kuZGVmYXVsdC5qc29uUGFydH1gLCExLCgpPT57dC5sZXQoWS5kZWZhdWx0LmRhdGEpLHQubGV0KG4pLHQuYXNzaWduKCgwLEwuXylgJHtyfS5tZXNzYWdlYCxfcyksdC5hc3NpZ24oKDAsTC5fKWAke3J9LnBvc2l0aW9uYCxfcyksdC5hc3NpZ24oWS5kZWZhdWx0Lmpzb25Qb3MsKDAsTC5fKWAke1kuZGVmYXVsdC5qc29uUG9zfSB8fCAwYCksdC5jb25zdChZLmRlZmF1bHQuanNvbkxlbiwoMCxMLl8pYCR7WS5kZWZhdWx0Lmpzb259Lmxlbmd0aGApLHZuKGUpLHdzKGUpLHQuaWYoWS5kZWZhdWx0Lmpzb25QYXJ0LCgpPT57dC5hc3NpZ24oKDAsTC5fKWAke3J9LnBvc2l0aW9uYCxZLmRlZmF1bHQuanNvblBvcyksdC5yZXR1cm4oWS5kZWZhdWx0LmRhdGEpfSksdC5pZigoMCxMLl8pYCR7WS5kZWZhdWx0Lmpzb25Qb3N9ID09PSAke1kuZGVmYXVsdC5qc29uTGVufWAsKCk9PnQucmV0dXJuKFkuZGVmYXVsdC5kYXRhKSksYXIoZSl9KX1mdW5jdGlvbiB2bihlKXtsZXQgdDtmb3IoY29uc3QgciBvZiBzZi5qdGRGb3JtcylpZihyIGluIGUuc2NoZW1hKXt0PXI7YnJlYWt9dD9wZihlLGZmW3RdKTp5cyhlKX1jb25zdCBoZj1nbyghMCxnbyghMSxhcikpO2Z1bmN0aW9uIHBmKGUsdCl7Y29uc3R7Z2VuOnIsc2NoZW1hOm4sZGF0YTpzfT1lO2lmKCFuLm51bGxhYmxlKXJldHVybiB0KGUpO05yKGUsIm51bGwiLHQsKCk9PnIuYXNzaWduKHMsbnVsbCkpfWZ1bmN0aW9uIG1mKGUpe2NvbnN0e2dlbjp0LHNjaGVtYTpyLGRhdGE6bn09ZTtldChlLCJbIik7Y29uc3Qgcz10LmxldCgiaSIsMCk7dC5hc3NpZ24obiwoMCxMLl8pYFtdYCksZ3MoZSwiXSIsKCk9Pntjb25zdCBhPXQubGV0KCJlbCIpO3ZuKGxlKFEoe30sZSkse3NjaGVtYTpyLmVsZW1lbnRzLGRhdGE6YX0pKSx0LmFzc2lnbigoMCxMLl8pYCR7bn1bJHtzfSsrXWAsYSl9KX1mdW5jdGlvbiB2ZihlKXtjb25zdHtnZW46dCxzY2hlbWE6cixkYXRhOm59PWU7ZXQoZSwieyIpLHQuYXNzaWduKG4sKDAsTC5fKWB7fWApLGdzKGUsIn0iLCgpPT5fZihlLHIudmFsdWVzKSl9ZnVuY3Rpb24gZ3MoZSx0LHIpe2hvKGUsdCxyKSxldChlLHQpfWZ1bmN0aW9uIGhvKGUsdCxyKXtjb25zdHtnZW46bn09ZTtuLmZvcigoMCxMLl8pYDske1kuZGVmYXVsdC5qc29uUG9zfTwke1kuZGVmYXVsdC5qc29uTGVufSAmJiAke19uKDEpfSE9PSR7dH07YCwoKT0+e3IoKSxOcihlLCIsIiwoKT0+bi5icmVhaygpLHMpfSk7ZnVuY3Rpb24gcygpe05yKGUsdCwoKT0+e30sYXIpfX1mdW5jdGlvbiBfZihlLHQpe2NvbnN0e2dlbjpyfT1lLG49ci5sZXQoImtleSIpO1Z0KGxlKFEoe30sZSkse2RhdGE6bn0pKSxldChlLCI6IiksX28oZSxuLHQpfWZ1bmN0aW9uIGdmKGUpe2NvbnN0e2dlbjp0LGRhdGE6cixzY2hlbWE6bn09ZSx7ZGlzY3JpbWluYXRvcjpzLG1hcHBpbmc6YX09bjtldChlLCJ7IiksdC5hc3NpZ24ociwoMCxMLl8pYHt9YCk7Y29uc3Qgbz10LmNvbnN0KCJwb3MiLFkuZGVmYXVsdC5qc29uUG9zKSxsPXQubGV0KCJ2YWx1ZSIpLGY9dC5sZXQoInRhZyIpO2hvKGUsIn0iLCgpPT57Y29uc3QgcD10LmxldCgia2V5Iik7VnQobGUoUSh7fSxlKSx7ZGF0YTpwfSkpLGV0KGUsIjoiKSx0LmlmKCgwLEwuXylgJHtwfSA9PT0gJHtzfWAsKCk9PntWdChsZShRKHt9LGUpLHtkYXRhOmZ9KSksdC5hc3NpZ24oKDAsTC5fKWAke3J9WyR7cH1dYCxmKSx0LmJyZWFrKCl9LCgpPT55cyhsZShRKHt9LGUpLHtkYXRhOmx9KSkpfSksdC5hc3NpZ24oWS5kZWZhdWx0Lmpzb25Qb3MsbyksdC5pZigoMCxMLl8pYCR7Zn0gPT09IHVuZGVmaW5lZGApLG10KGUsKDAsTC5zdHIpYGRpc2NyaW1pbmF0b3IgdGFnIG5vdCBmb3VuZGApO2Zvcihjb25zdCBwIGluIGEpdC5lbHNlSWYoKDAsTC5fKWAke2Z9ID09PSAke3B9YCksbW8obGUoUSh7fSxlKSx7c2NoZW1hOmFbcF19KSxzKTt0LmVsc2UoKSxtdChlLCgwLEwuc3RyKWBkaXNjcmltaW5hdG9yIHZhbHVlIG5vdCBpbiBzY2hlbWFgKSx0LmVuZElmKCl9ZnVuY3Rpb24gcG8oZSl7Y29uc3R7Z2VuOnQsZGF0YTpyfT1lO2V0KGUsInsiKSx0LmFzc2lnbihyLCgwLEwuXylge31gKSxtbyhlKX1mdW5jdGlvbiBtbyhlLHQpe2NvbnN0e2dlbjpyLHNjaGVtYTpuLGRhdGE6c309ZSx7cHJvcGVydGllczphLG9wdGlvbmFsUHJvcGVydGllczpvLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOmx9PW47aWYoZ3MoZSwifSIsKCk9Pntjb25zdCBmPXIubGV0KCJrZXkiKTtpZihWdChsZShRKHt9LGUpLHtkYXRhOmZ9KSksZXQoZSwiOiIpLHIuaWYoITEpLHZvKGUsZixhKSx2byhlLGYsbyksdCl7ci5lbHNlSWYoKDAsTC5fKWAke2Z9ID09PSAke3R9YCk7Y29uc3QgcD1yLmxldCgidGFnIik7VnQobGUoUSh7fSxlKSx7ZGF0YTpwfSkpfXIuZWxzZSgpLGw/eXMobGUoUSh7fSxlKSx7ZGF0YTooMCxMLl8pYCR7c31bJHtmfV1gfSkpOm10KGUsKDAsTC5zdHIpYHByb3BlcnR5ICR7Zn0gbm90IGFsbG93ZWRgKSxyLmVuZElmKCl9KSxhKXtjb25zdCBmPSgwLG9mLmhhc1Byb3BGdW5jKShyKSxwPSgwLEwuYW5kKSguLi5PYmplY3Qua2V5cyhhKS5tYXAoaT0+KDAsTC5fKWAke2Z9LmNhbGwoJHtzfSwgJHtpfSlgKSk7ci5pZigoMCxMLm5vdCkocCksKCk9Pm10KGUsKDAsTC5zdHIpYG1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydGllc2ApKX19ZnVuY3Rpb24gdm8oZSx0LHI9e30pe2NvbnN0e2dlbjpufT1lO2Zvcihjb25zdCBzIGluIHIpbi5lbHNlSWYoKDAsTC5fKWAke3R9ID09PSAke3N9YCksX28oZSx0LHJbc10pfWZ1bmN0aW9uIF9vKGUsdCxyKXt2bihsZShRKHt9LGUpLHtzY2hlbWE6cixkYXRhOigwLEwuXylgJHtlLmRhdGF9WyR7dH1dYH0pKX1mdW5jdGlvbiBFZihlKXtjb25zdHtnZW46dCxzY2hlbWE6cixkYXRhOm4sc2VsZjpzfT1lO3N3aXRjaChyLnR5cGUpe2Nhc2UiYm9vbGVhbiI6aGYoZSk7YnJlYWs7Y2FzZSJzdHJpbmciOlZ0KGUpO2JyZWFrO2Nhc2UidGltZXN0YW1wIjp7VnQoZSk7Y29uc3QgYT0oMCxsby51c2VGdW5jKSh0LGxmLmRlZmF1bHQpLHthbGxvd0RhdGU6byxwYXJzZURhdGU6bH09cy5vcHRzLGY9bz8oMCxMLl8pYCEke2F9KCR7bn0sIHRydWUpYDooMCxMLl8pYCEke2F9KCR7bn0pYCxwPWw/KDAsTC5vcikoZiwoMCxMLl8pYCgke259ID0gbmV3IERhdGUoJHtufSksIGZhbHNlKWAsKDAsTC5fKWBpc05hTigke259LnZhbHVlT2YoKSlgKTpmO3QuaWYocCwoKT0+bXQoZSwoMCxMLnN0cilgaW52YWxpZCB0aW1lc3RhbXBgKSk7YnJlYWt9Y2FzZSJmbG9hdDMyIjpjYXNlImZsb2F0NjQiOkVzKGUpO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IGE9ci50eXBlO2lmKCFzLm9wdHMuaW50MzJyYW5nZSYmKGE9PT0iaW50MzIifHxhPT09InVpbnQzMiIpKUVzKGUsMTYpLGE9PT0idWludDMyIiYmdC5pZigoMCxMLl8pYCR7bn0gPCAwYCwoKT0+bXQoZSwoMCxMLnN0cilgaW50ZWdlciBvdXQgb2YgcmFuZ2VgKSk7ZWxzZXtjb25zdFtvLGwsZl09dWYuaW50UmFuZ2VbYV07RXMoZSxmKSx0LmlmKCgwLEwuXylgJHtufSA8ICR7b30gfHwgJHtufSA+ICR7bH1gLCgpPT5tdChlLCgwLEwuc3RyKWBpbnRlZ2VyIG91dCBvZiByYW5nZWApKX19fX1mdW5jdGlvbiBWdChlKXtldChlLCciJyksJHMoZSx2cy5wYXJzZUpzb25TdHJpbmcpfWZ1bmN0aW9uIHlmKGUpe2NvbnN0e2dlbjp0LGRhdGE6cixzY2hlbWE6bn09ZSxzPW4uZW51bTtldChlLCciJyksdC5pZighMSk7Zm9yKGNvbnN0IGEgb2Ygcyl7Y29uc3Qgbz1KU09OLnN0cmluZ2lmeShhKS5zbGljZSgxKTt0LmVsc2VJZigoMCxMLl8pYCR7X24oby5sZW5ndGgpfSA9PT0gJHtvfWApLHQuYXNzaWduKHIsKDAsTC5zdHIpYCR7YX1gKSx0LmFkZChZLmRlZmF1bHQuanNvblBvcyxvLmxlbmd0aCl9dC5lbHNlKCksYXIoZSksdC5lbmRJZigpfWZ1bmN0aW9uIEVzKGUsdCl7Y29uc3R7Z2VuOnJ9PWU7d3MoZSksci5pZigoMCxMLl8pYCItMDEyMzQ1Njc4OSIuaW5kZXhPZigke19uKDEpfSkgPCAwYCwoKT0+YXIoZSksKCk9PiRzKGUsdnMucGFyc2VKc29uTnVtYmVyLHQpKX1mdW5jdGlvbiBnbyhlLHQpe3JldHVybiByPT57Y29uc3R7Z2VuOm4sZGF0YTpzfT1yO05yKHIsYCR7ZX1gLCgpPT50KHIpLCgpPT5uLmFzc2lnbihzLGUpKX19ZnVuY3Rpb24gJGYoZSl7Y29uc3R7Z2VuOnQsc2VsZjpyLGRlZmluaXRpb25zOm4sc2NoZW1hOnMsc2NoZW1hRW52OmF9PWUse3JlZjpvfT1zLGw9bltvXTtpZighbCl0aHJvdyBuZXcgYWYuZGVmYXVsdChyLm9wdHMudXJpUmVzb2x2ZXIsIiIsbyxgTm8gZGVmaW5pdGlvbiAke299YCk7aWYoISgwLGNmLmhhc1JlZikobCkpcmV0dXJuIHZuKGxlKFEoe30sZSkse3NjaGVtYTpsfSkpO2NvbnN0e3Jvb3Q6Zn09YSxwPWZvLmNhbGwocixuZXcgdW8uU2NoZW1hRW52KHtzY2hlbWE6bCxyb290OmZ9KSxuKTtFbyhlLHdmKHQscCksITApfWZ1bmN0aW9uIHdmKGUsdCl7cmV0dXJuIHQucGFyc2U/ZS5zY29wZVZhbHVlKCJwYXJzZSIse3JlZjp0LnBhcnNlfSk6KDAsTC5fKWAke2Uuc2NvcGVWYWx1ZSgid3JhcHBlciIse3JlZjp0fSl9LnBhcnNlYH1mdW5jdGlvbiB5cyhlKXskcyhlLHZzLnBhcnNlSnNvbil9ZnVuY3Rpb24gJHMoZSx0LHIpe0VvKGUsKDAsbG8udXNlRnVuYykoZS5nZW4sdCkscil9ZnVuY3Rpb24gRW8oZSx0LHIpe2NvbnN0e2dlbjpuLGRhdGE6c309ZTtuLmFzc2lnbihzLCgwLEwuXylgJHt0fSgke1kuZGVmYXVsdC5qc29ufSwgJHtZLmRlZmF1bHQuanNvblBvc30ke3I/KDAsTC5fKWAsICR7cn1gOkwubmlsfSlgKSxuLmFzc2lnbihZLmRlZmF1bHQuanNvblBvcywoMCxMLl8pYCR7dH0ucG9zaXRpb25gKSxuLmlmKCgwLEwuXylgJHtzfSA9PT0gdW5kZWZpbmVkYCwoKT0+bXQoZSwoMCxMLl8pYCR7dH0ubWVzc2FnZWApKX1mdW5jdGlvbiBldChlLHQpe05yKGUsdCxhcil9ZnVuY3Rpb24gTnIoZSx0LHIsbil7Y29uc3R7Z2VuOnN9PWUsYT10Lmxlbmd0aDt3cyhlKSxzLmlmKCgwLEwuXylgJHtfbihhKX0gPT09ICR7dH1gLCgpPT57cy5hZGQoWS5kZWZhdWx0Lmpzb25Qb3MsYSksbj09bnVsbHx8bihlKX0sKCk9PnIoZSkpfWZ1bmN0aW9uIHdzKHtnZW46ZSxjaGFyOnR9KXtlLmNvZGUoKDAsTC5fKWB3aGlsZSgoJHt0fT0ke1kuZGVmYXVsdC5qc29ufVske1kuZGVmYXVsdC5qc29uUG9zfV0sJHt0fT09PSIgInx8JHt0fT09PSJcXG4ifHwke3R9PT09IlxcciJ8fCR7dH09PT0iXFx0IikpJHtZLmRlZmF1bHQuanNvblBvc30rKztgKX1mdW5jdGlvbiBfbihlKXtyZXR1cm4gZT09PTE/KDAsTC5fKWAke1kuZGVmYXVsdC5qc29ufVske1kuZGVmYXVsdC5qc29uUG9zfV1gOigwLEwuXylgJHtZLmRlZmF1bHQuanNvbn0uc2xpY2UoJHtZLmRlZmF1bHQuanNvblBvc30sICR7WS5kZWZhdWx0Lmpzb25Qb3N9KyR7ZX0pYH1mdW5jdGlvbiBhcihlKXttdChlLCgwLEwuXylgInVuZXhwZWN0ZWQgdG9rZW4gIiArICR7WS5kZWZhdWx0Lmpzb259WyR7WS5kZWZhdWx0Lmpzb25Qb3N9XWApfWZ1bmN0aW9uIG10KHtnZW46ZSxwYXJzZU5hbWU6dH0scil7ZS5hc3NpZ24oKDAsTC5fKWAke3R9Lm1lc3NhZ2VgLHIpLGUuYXNzaWduKCgwLEwuXylgJHt0fS5wb3NpdGlvbmAsWS5kZWZhdWx0Lmpzb25Qb3MpLGUucmV0dXJuKF9zKX0oZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Db2RlR2VuPXQuTmFtZT10Lm5pbD10LnN0cmluZ2lmeT10LnN0cj10Ll89dC5LZXl3b3JkQ3h0PXZvaWQgMDtjb25zdCByPXJhLG49dHMscz1mcyxhPWRzLG89bXMsbD0iSlRELW1ldGEtc2NoZW1hIjtjbGFzcyBmIGV4dGVuZHMgci5kZWZhdWx0e2NvbnN0cnVjdG9yKEU9e30pe3N1cGVyKGxlKFEoe30sRSkse2p0ZDohMH0pKX1fYWRkVm9jYWJ1bGFyaWVzKCl7c3VwZXIuX2FkZFZvY2FidWxhcmllcygpLHRoaXMuYWRkVm9jYWJ1bGFyeShuLmRlZmF1bHQpfV9hZGREZWZhdWx0TWV0YVNjaGVtYSgpe3N1cGVyLl9hZGREZWZhdWx0TWV0YVNjaGVtYSgpLHRoaXMub3B0cy5tZXRhJiZ0aGlzLmFkZE1ldGFTY2hlbWEocy5kZWZhdWx0LGwsITEpfWRlZmF1bHRNZXRhKCl7cmV0dXJuIHRoaXMub3B0cy5kZWZhdWx0TWV0YT1zdXBlci5kZWZhdWx0TWV0YSgpfHwodGhpcy5nZXRTY2hlbWEobCk/bDp2b2lkIDApfWNvbXBpbGVTZXJpYWxpemVyKEUpe2NvbnN0IFQ9dGhpcy5fYWRkU2NoZW1hKEUpO3JldHVybiBULnNlcmlhbGl6ZXx8dGhpcy5fY29tcGlsZVNlcmlhbGl6ZXIoVCl9Y29tcGlsZVBhcnNlcihFKXtjb25zdCBUPXRoaXMuX2FkZFNjaGVtYShFKTtyZXR1cm4gVC5wYXJzZXx8dGhpcy5fY29tcGlsZVBhcnNlcihUKX1fY29tcGlsZVNlcmlhbGl6ZXIoRSl7aWYoYS5kZWZhdWx0LmNhbGwodGhpcyxFLEUuc2NoZW1hLmRlZmluaXRpb25zfHx7fSksIUUuc2VyaWFsaXplKXRocm93IG5ldyBFcnJvcigiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yIik7cmV0dXJuIEUuc2VyaWFsaXplfV9jb21waWxlUGFyc2VyKEUpe2lmKG8uZGVmYXVsdC5jYWxsKHRoaXMsRSxFLnNjaGVtYS5kZWZpbml0aW9uc3x8e30pLCFFLnBhcnNlKXRocm93IG5ldyBFcnJvcigiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yIik7cmV0dXJuIEUucGFyc2V9fWUuZXhwb3J0cz10PWYsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mO3ZhciBwPVdlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJLZXl3b3JkQ3h0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5LZXl3b3JkQ3h0fX0pO3ZhciBpPXVlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5ffX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzdHIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLnN0cn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic3RyaW5naWZ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5zdHJpbmdpZnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm5pbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkubmlsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJOYW1lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5OYW1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDb2RlR2VuIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5Db2RlR2VufX0pfSkoem4sem4uZXhwb3J0cyk7dmFyIFNmPWVlJiZlZS5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxJdC5WYWxpZGF0ZT1JdC5BZGRTY2hlbWE9dm9pZCAwO2NvbnN0IFJmPVNmKHpuLmV4cG9ydHMpLHlvPW5ldyBSZi5kZWZhdWx0LGJmPShlLHQpPT5lKHQpP251bGw6ZS5lcnJvcnM7ZnVuY3Rpb24gT2YoZSx0KXt5by5hZGRTY2hlbWEodCxlKX1JdC5BZGRTY2hlbWE9T2Y7ZnVuY3Rpb24gTmYoZSx0KXtjb25zdCByPXlvLmdldFNjaGVtYShlKTtpZihyKXJldHVybiBiZihyLHQpfUl0LlZhbGlkYXRlPU5mLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShybiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscm4uU1RTT3B0aW9uc0Jhc2U9dm9pZCAwO2NvbnN0IFBmPUl0O2NsYXNzIFRme2NvbnN0cnVjdG9yKHQ9bnVsbCl7X3IodGhpcywiX29wdGlvbnMiKTt0aGlzLl9vcHRpb25zPXQsdCE9PW51bGwmJih0eXBlb2YgdC52YWxpZGF0b3I9PSJ1bmRlZmluZWQifHwoMCxQZi5WYWxpZGF0ZSkodC52YWxpZGF0b3IsdCkpfWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuX29wdGlvbnN9fXJuLlNUU09wdGlvbnNCYXNlPVRmO3ZhciBvcj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkob3IsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG9yLkplc3RTbGVlcD1vci5TbGVlcD12b2lkIDA7YXN5bmMgZnVuY3Rpb24gJG8oZT0xZTMpe3JldHVybiBuZXcgUHJvbWlzZSh0PT5zZXRUaW1lb3V0KHQsZSkpfW9yLlNsZWVwPSRvO2FzeW5jIGZ1bmN0aW9uIEFmKCl7cmV0dXJuICRvKDEwMCl9b3IuSmVzdFNsZWVwPUFmO3ZhciB3bz17fTsoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuY29tcGFyZVBhcmFtZXRlclR5cGVzPWUuT0F1dGgyUGFyYW1ldGVyRXJyb3JUeXBlPWUuT0lEQ0FkZHJlc3NDbGFpbT1lLk9JRENTdGFuZGFyZENsYWltPWUuT0F1dGgyUGFyYW1ldGVyVHlwZT12b2lkIDAsZnVuY3Rpb24obil7bi5BVURJRU5DRT0iQVVESUVOQ0UiLG4uQ0xJRU5UX0lEPSJjbGllbnRfaWQiLG4uQ0xJRU5UX1NFQ1JFVD0iY2xpZW50X3NlY3JldCIsbi5SRVNQT05TRV9UWVBFPSJyZXNwb25zZV90eXBlIixuLlNDT1BFPSJzY29wZSIsbi5TVEFURT0ic3RhdGUiLG4uUkVESVJFQ1RfVVJJPSJyZWRpcmVjdF91cmkiLG4uRVJST1I9ImVycm9yIixuLkVSUk9SX0RFU0NSSVBUSU9OPSJlcnJvcl9kZXNjcmlwdGlvbiIsbi5FUlJPUl9DT0RFUz0iZXJyb3JfY29kZXMiLG4uRVJST1JfVVJJPSJlcnJvcl91cmkiLG4uR1JBTlRfVFlQRT0iZ3JhbnRfdHlwZSIsbi5DT0RFPSJjb2RlIixuLkFDQ0VTU19UT0tFTj0iYWNjZXNzX3Rva2VuIixuLlRPS0VOX1RZUEU9InRva2VuX3R5cGUiLG4uRVhQSVJFU19JTj0iZXhwaXJlc19pbiIsbi5VU0VSTkFNRT0idXNlcm5hbWUiLG4uUEFTU1dPUkQ9InBhc3N3b3JkIixuLlJFRlJFU0hfVE9LRU49InJlZnJlc2hfdG9rZW4iLG4uUkVTUE9OU0VfTU9ERT0icmVzcG9uc2VfbW9kZSIsbi5USU1FU1RBTVA9InRpbWVzdGFtcCIsbi5UUkFDRV9JRD0idHJhY2VfaWQiLG4uQ09SUkVMQVRJT05fSUQ9ImNvcnJlbGF0aW9uX2lkIn0oZS5PQXV0aDJQYXJhbWV0ZXJUeXBlfHwoZS5PQXV0aDJQYXJhbWV0ZXJUeXBlPXt9KSksZnVuY3Rpb24obil7bi5TVUI9InN1YiIsbi5OQU1FPSJuYW1lIixuLkdJVkVOX05BTUU9ImdpdmVuX25hbWUiLG4uRkFNSUxZX05BTUU9ImZhbWlseV9uYW1lIixuLk1JRERMRV9OQU1FPSJtaWRkbGVfbmFtZSIsbi5OSUNLTkFNRT0ibmlja25hbWUiLG4uUFJFRkVSUkVEX1VTRVJOQU1FPSJwcmVmZXJyZWRfdXNlcm5hbWUiLG4uUFJPRklMRT0icHJvZmlsZSIsbi5QSUNUVVJFPSJwaWN0dXJlIixuLldFQlNJVEU9IndlYnNpdGUiLG4uRU1BSUw9ImVtYWlsIixuLkVNQUlMX1ZFUklGSUVEPSJlbWFpbF92ZXJpZmllZCIsbi5HRU5ERVI9ImdlbmRlciIsbi5CSVJUSERBVEU9ImJpcnRoZGF0ZSIsbi5aT05FSU5GTz0iem9uZWluZm8iLG4uTE9DQUxFPSJsb2NhbGUiLG4uUEhPTkVfTlVNQkVSPSJwaG9uZV9udW1iZXIiLG4uUEhPTkVfTlVNQkVSX1ZFUklGSUVEPSJwaG9uZV9udW1iZXJfdmVyaWZpZWQiLG4uQUREUkVTUz0iYWRkcmVzcyIsbi5DTElFTlRfU0VDUkVUPSJjbGllbnRfc2VjcmV0IixuLk5PTkNFPSJub25jZSJ9KGUuT0lEQ1N0YW5kYXJkQ2xhaW18fChlLk9JRENTdGFuZGFyZENsYWltPXt9KSksZnVuY3Rpb24obil7bi5GT1JNQVRURUQ9ImZvcm1hdHRlZCIsbi5TVFJFRVRfQUREUkVTUz0ic3RyZWV0X2FkZHJlc3MiLG4uTE9DQUxJVFk9ImxvY2FsaXR5IixuLlJFR0lPTj0icmVnaW9uIixuLkNPVU5UUlk9ImNvdW50cnkifShlLk9JRENBZGRyZXNzQ2xhaW18fChlLk9JRENBZGRyZXNzQ2xhaW09e30pKTtjbGFzcyB0e31fcih0LCJOT1RfRVFVQUwiLHtjb2RlOiJTVFNfT0FVVEgyX0VSUl8wMDAxIixkZXNjcmlwdGlvbjoiUGFyYW1ldGVyIHZhbHVlcyBub3QgZXF1YWwuIn0pLF9yKHQsIk5PVF9QUkVTRU5UIix7Y29kZToiU1RTX09BVVRIMl9FUlJfMDAwMiIsZGVzY3JpcHRpb246IlBhcmFtZXRlciBub3QgcHJvdmlkZWQuIn0pLF9yKHQsIklOVkFMSURfRk9STUFUIix7Y29kZToiU1RTX09BVVRIMl9FUlJfMDAwMyIsZGVzY3JpcHRpb246IlBhcmFtZXRlciB2YWx1ZSBmb3JtYXQgaW52YWxpZC4ifSksX3IodCwiRVhQSVJFRCIse2NvZGU6IlNUU19PQVVUSDJfRVJSXzAwMDQiLGRlc2NyaXB0aW9uOiJQYXJhbWV0ZXIgdmFsdWUgZXhwaXJlZC4ifSksZS5PQXV0aDJQYXJhbWV0ZXJFcnJvclR5cGU9dDtmdW5jdGlvbiByKG4scyxhKXtjb25zdCBvPVtdO2ZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCsrKXtjb25zdCBmPWFbbF07aWYobltsXS5sb2NhbGVDb21wYXJlKHNbbF0pIT09MCl7Y29uc3QgcD17ZXJyb3I6dC5OT1RfRVFVQUwuY29kZSxlcnJvcl9kZXNjcmlwdGlvbjp0Lk5PVF9FUVVBTC5kZXNjcmlwdGlvbix0aW1lc3RhbXA6RGF0ZS5ub3coKSxkZXRhaWxzOmAke3QuTk9UX0VRVUFMLmRlc2NyaXB0aW9ufTogUGFyYW1ldGVyOiBbJHtmfV1gfTtvLnB1c2gocCl9fXJldHVybiBvfWUuY29tcGFyZVBhcmFtZXRlclR5cGVzPXJ9KSh3byksZnVuY3Rpb24oZSl7dmFyIHQ9ZWUmJmVlLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocyxhLG8sbCl7bD09PXZvaWQgMCYmKGw9byk7dmFyIGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLG8pOyghZnx8KCJnZXQiaW4gZj8hYS5fX2VzTW9kdWxlOmYud3JpdGFibGV8fGYuY29uZmlndXJhYmxlKSkmJihmPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhW29dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGwsZil9OmZ1bmN0aW9uKHMsYSxvLGwpe2w9PT12b2lkIDAmJihsPW8pLHNbbF09YVtvXX0pLHI9ZWUmJmVlLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24ocyxhKXtmb3IodmFyIG8gaW4gcylvIT09ImRlZmF1bHQiJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsbykmJnQoYSxzLG8pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS4kc3RzZ2RmPWUuJHN0c2dkPXZvaWQgMCxyKHRuLGUpLHIocm4sZSkscihvcixlKSxyKEl0LGUpLHIod28sZSksZS4kc3RzZ2Q9e307ZnVuY3Rpb24gbigpe3JldHVybiBlLiRzdHNnZH1lLiRzdHNnZGY9bn0oQ3QpO2NsYXNzIENme2NvbnN0cnVjdG9yKCl7dGhpcy5EaWdlc3RNZXNzYWdlPWFzeW5jIGZ1bmN0aW9uKHQpe2NvbnN0IG49bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpLHM9YXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLG4pLGE9QXJyYXkuZnJvbShuZXcgVWludDhBcnJheShzKSk7cmV0dXJuIGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZSguLi5hKSl9LHRoaXMuQ3JlYXRlUmFuZG9tU3RyaW5nPSh0PTQzKT0+e2NvbnN0IHI9QXJyYXkuZnJvbShjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KHQpKSk7cmV0dXJuIGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZSguLi5yKSl9LHRoaXMuQ3JlYXRlUmFuZG9tU3RyaW5nRXg9KCk9Pntjb25zdCB0PSIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei1ffi4iO2xldCByPSIiO3JldHVybiBBcnJheS5mcm9tKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoNDMpKSkuZm9yRWFjaChzPT5yKz10W3MldC5sZW5ndGhdKSxyfX19Y2xhc3MgSWZ7Y29uc3RydWN0b3IoKXt0aGlzLkRlY29kZVF1ZXJ5UGFyYW1zPXQ9Pntjb25zdCByPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5maWx0ZXIobj0+dHlwZW9mIHRbbl0hPSJ1bmRlZmluZWQiKS5tYXAobj0+e3JbZGVjb2RlVVJJQ29tcG9uZW50KG4pXT1kZWNvZGVVUklDb21wb25lbnQodFtuXSl9KSxyfSx0aGlzLkNyZWF0ZVF1ZXJ5UGFyYW1zPXQ9Pk9iamVjdC5rZXlzKHQpLmZpbHRlcihyPT50eXBlb2YgdFtyXSE9InVuZGVmaW5lZCIpLm1hcChyPT5BcnJheS5pc0FycmF5KHRbcl0pP2VuY29kZVVSSUNvbXBvbmVudChyKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHRbcl0uam9pbigiICIpKTplbmNvZGVVUklDb21wb25lbnQocikrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0W3JdKSkuam9pbigiJiIpLHRoaXMuX0dldFF1ZXJ5UGFyYW1zPXQ9PntsZXQgcj17fTtjb25zdCBuPXQuc3BsaXQoIj8iKTtpZihuLmxlbmd0aD09Mil7Y29uc3Qgcz1uWzFdLnNwbGl0KCImIiksYT17fTtsZXQgbz0iIjtzLmZvckVhY2goZnVuY3Rpb24obCl7bz1sLnNwbGl0KCI9Iiksby5sZW5ndGg9PTImJihhW29bMF1dPW9bMV0pfSkscj10aGlzLkRlY29kZVF1ZXJ5UGFyYW1zKGEpfXJldHVybiByfSx0aGlzLkdldFF1ZXJ5UGFyYW1zPSgpPT50aGlzLl9HZXRRdWVyeVBhcmFtcyh3aW5kb3cubG9jYXRpb24uaHJlZil9fWZ1bmN0aW9uIFNzKGUpe3RoaXMubWVzc2FnZT1lfVNzLnByb3RvdHlwZT1uZXcgRXJyb3IsU3MucHJvdG90eXBlLm5hbWU9IkludmFsaWRDaGFyYWN0ZXJFcnJvciI7dmFyIFNvPXR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ3aW5kb3cuYXRvYiYmd2luZG93LmF0b2IuYmluZCh3aW5kb3cpfHxmdW5jdGlvbihlKXt2YXIgdD1TdHJpbmcoZSkucmVwbGFjZSgvPSskLywiIik7aWYodC5sZW5ndGglND09MSl0aHJvdyBuZXcgU3MoIidhdG9iJyBmYWlsZWQ6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIik7Zm9yKHZhciByLG4scz0wLGE9MCxvPSIiO249dC5jaGFyQXQoYSsrKTt+biYmKHI9cyU0PzY0KnIrbjpuLHMrKyU0KT9vKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZyPj4oLTIqcyY2KSk6MCluPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuaW5kZXhPZihuKTtyZXR1cm4gb307ZnVuY3Rpb24gRGYoZSl7dmFyIHQ9ZS5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKTtzd2l0Y2godC5sZW5ndGglNCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMjp0Kz0iPT0iO2JyZWFrO2Nhc2UgMzp0Kz0iPSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyJJbGxlZ2FsIGJhc2U2NHVybCBzdHJpbmchIn10cnl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoU28ocikucmVwbGFjZSgvKC4pL2csZnVuY3Rpb24obixzKXt2YXIgYT1zLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIGEubGVuZ3RoPDImJihhPSIwIithKSwiJSIrYX0pKX0odCl9Y2F0Y2h7cmV0dXJuIFNvKHQpfX1mdW5jdGlvbiBnbihlKXt0aGlzLm1lc3NhZ2U9ZX1mdW5jdGlvbiBqZihlLHQpe2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgZ24oIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkIik7dmFyIHI9KHQ9dHx8e30pLmhlYWRlcj09PSEwPzA6MTt0cnl7cmV0dXJuIEpTT04ucGFyc2UoRGYoZS5zcGxpdCgiLiIpW3JdKSl9Y2F0Y2gobil7dGhyb3cgbmV3IGduKCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZDogIituLm1lc3NhZ2UpfX1nbi5wcm90b3R5cGU9bmV3IEVycm9yLGduLnByb3RvdHlwZS5uYW1lPSJJbnZhbGlkVG9rZW5FcnJvciI7dmFyIFByPWVlJiZlZS5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gUHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MSxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKyl7dD1hcmd1bWVudHNbcl07Zm9yKHZhciBzIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscykmJihlW3NdPXRbc10pfXJldHVybiBlfSxQci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIFRyKGUsdCl7aWYoIXQpcmV0dXJuIiI7dmFyIHI9IjsgIitlO3JldHVybiB0PT09ITA/cjpyKyI9Iit0fWZ1bmN0aW9uIGtmKGUpe2lmKHR5cGVvZiBlLmV4cGlyZXM9PSJudW1iZXIiKXt2YXIgdD1uZXcgRGF0ZTt0LnNldE1pbGxpc2Vjb25kcyh0LmdldE1pbGxpc2Vjb25kcygpK2UuZXhwaXJlcyo4NjRlNSksZS5leHBpcmVzPXR9cmV0dXJuIFRyKCJFeHBpcmVzIixlLmV4cGlyZXM/ZS5leHBpcmVzLnRvVVRDU3RyaW5nKCk6IiIpK1RyKCJEb21haW4iLGUuZG9tYWluKStUcigiUGF0aCIsZS5wYXRoKStUcigiU2VjdXJlIixlLnNlY3VyZSkrVHIoIlNhbWVTaXRlIixlLnNhbWVTaXRlKX1mdW5jdGlvbiBVZihlLHQscil7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lKDIzfDI0fDI2fDJCfDVFfDYwfDdDKS9nLGRlY29kZVVSSUNvbXBvbmVudCkucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5IikrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKC8lKDIzfDI0fDI2fDJCfDNBfDNDfDNFfDNEfDJGfDNGfDQwfDVCfDVEfDVFfDYwfDdCfDdEfDdDKS9nLGRlY29kZVVSSUNvbXBvbmVudCkra2Yocil9ZnVuY3Rpb24gRmYoZSl7Zm9yKHZhciB0PXt9LHI9ZT9lLnNwbGl0KCI7ICIpOltdLG49LyglW1xkQS1GXXsyfSkrL2dpLHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGE9cltzXS5zcGxpdCgiPSIpLG89YS5zbGljZSgxKS5qb2luKCI9Iik7by5jaGFyQXQoMCk9PT0nIicmJihvPW8uc2xpY2UoMSwtMSkpO3RyeXt2YXIgbD1hWzBdLnJlcGxhY2UobixkZWNvZGVVUklDb21wb25lbnQpO3RbbF09by5yZXBsYWNlKG4sZGVjb2RlVVJJQ29tcG9uZW50KX1jYXRjaHt9fXJldHVybiB0fWZ1bmN0aW9uIE1mKCl7cmV0dXJuIEZmKGRvY3VtZW50LmNvb2tpZSl9ZnVuY3Rpb24gTGYoZSl7cmV0dXJuIE1mKClbZV19dmFyIFZmPUxmO2Z1bmN0aW9uIFJvKGUsdCxyKXtkb2N1bWVudC5jb29raWU9VWYoZSx0LFByKHtwYXRoOiIvIn0scikpfXZhciB6Zj1SbztmdW5jdGlvbiBIZihlLHQpe1JvKGUsIiIsUHIoUHIoe30sdCkse2V4cGlyZXM6LTF9KSl9dmFyIEtmPUhmO2NvbnN0IEVuPU5zKGBwcm9jOiR7cHJvY2Vzcy5waWR9OnN0b3JhZ2UudHNgKTt2YXIgYm89KGU9PihlLkxPQ0FMX1NUT1JBR0U9IkxvY2FsU3RvcmFnZSIsZS5TRVNTSU9OX1NUT1JBR0U9IlNlc3Npb25TdG9yYWdlIixlLkNPT0tJRV9TVE9SQUdFPSJDb29raWVTdG9yYWdlIixlLk1FTU9SWV9TVE9SQUdFPSJNZW1vcnlTdG9yYWdlIixlKSkoYm98fHt9KTtjbGFzcyBCZntjb25zdHJ1Y3Rvcigpe3RoaXMuZ2V0PXQ9Pntjb25zdCByPVZmKHQpO3JldHVybiByP0pTT04ucGFyc2Uocik6bnVsbH0sdGhpcy5zZXQ9KHQscixuPXt9KT0+e2xldCBzPXt9O3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbD09PSJodHRwczoiJiYocz17c2VjdXJlOiEwLHNhbWVTaXRlOiJub25lIn0pLG4mJm4uZGF5c1VudGlsRXhwaXJlP3MuZXhwaXJlcz1uLmRheXNVbnRpbEV4cGlyZTpzLmV4cGlyZXM9MSxFbihgQ29va2llU3RvcmFnZS5zZXQ6IGtleTogJHt0fSwgdmFsdWU6IFske3J9XWApLHpmKHQsSlNPTi5zdHJpbmdpZnkocikscyl9LHRoaXMucmVtb3ZlPXQ9PntLZih0KX19fWNsYXNzIEpme2NvbnN0cnVjdG9yKCl7dGhpcy5nZXQ9dD0+e2NvbnN0IHI9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0KTtyZXR1cm4gdHlwZW9mIHI9PSJ1bmRlZmluZWQifHxyPT09bnVsbD9udWxsOkpTT04ucGFyc2Uocil9LHRoaXMuc2V0PSh0LHIpPT57RW4oYFNlc3Npb25TdG9yYWdlLnNldDoga2V5OiAke3R9LCB2YWx1ZTogWyR7cn1dYCksc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0LEpTT04uc3RyaW5naWZ5KHIpKX0sdGhpcy5yZW1vdmU9dD0+e3Nlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odCl9fX1jbGFzcyBxZntjb25zdHJ1Y3Rvcigpe3RoaXMuZ2V0PXQ9Pntjb25zdCByPWxvY2FsU3RvcmFnZS5nZXRJdGVtKHQpO3JldHVybiB0eXBlb2Ygcj09InVuZGVmaW5lZCJ8fHI9PT1udWxsP251bGw6SlNPTi5wYXJzZShyKX0sdGhpcy5zZXQ9KHQscik9PntFbihgTG9jYWxTdG9yYWdlLnNldDoga2V5OiAke3R9LCB2YWx1ZTogWyR7cn1dYCksbG9jYWxTdG9yYWdlLnNldEl0ZW0odCxKU09OLnN0cmluZ2lmeShyKSl9LHRoaXMucmVtb3ZlPXQ9Pntsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0KX19fWNsYXNzIEdme2NvbnN0cnVjdG9yKCl7U2UodGhpcyxIdCx2b2lkIDApO2NlKHRoaXMsSHQse30pLHRoaXMuZ2V0PXQ9Pntjb25zdCByPVYodGhpcyxIdClbdF07cmV0dXJuIHR5cGVvZiByPT0idW5kZWZpbmVkInx8cj09PW51bGw/bnVsbDpyfSx0aGlzLnNldD0odCxyKT0+e0VuKGBNZW1vcnlTdG9yYWdlLnNldDoga2V5OiAke3R9LCB2YWx1ZTogWyR7cn1dYCksVih0aGlzLEh0KVt0XT1yfSx0aGlzLnJlbW92ZT10PT57ZGVsZXRlIFYodGhpcyxIdClbdF19fX1IdD1uZXcgV2Vha01hcDtjbGFzcyBRZntjb25zdHJ1Y3Rvcih0KXtTZSh0aGlzLGJ0LG51bGwpO3N3aXRjaCh0LmNsaWVudFN0b3JhZ2VUeXBlKXtjYXNlIlNlc3Npb25TdG9yYWdlIjpjZSh0aGlzLGJ0LG5ldyBKZik7YnJlYWs7Y2FzZSJMb2NhbFN0b3JhZ2UiOmNlKHRoaXMsYnQsbmV3IHFmKTticmVhaztjYXNlIkNvb2tpZVN0b3JhZ2UiOmNlKHRoaXMsYnQsbmV3IEJmKTticmVhaztjYXNlIk1lbW9yeVN0b3JhZ2UiOmNlKHRoaXMsYnQsbmV3IEdmKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBbJHt0LmNsaWVudFN0b3JhZ2VUeXBlfV0gc3RvcmFnZSB0eXBlLmApfX1HZXRTdG9yYWdlKCl7cmV0dXJuIFYodGhpcyxidCl9fWJ0PW5ldyBXZWFrTWFwO3ZhciBpcjsoZnVuY3Rpb24oZSl7ZVtlLkFDQ0VQVEVEPTIwMl09IkFDQ0VQVEVEIixlW2UuQkFEX0dBVEVXQVk9NTAyXT0iQkFEX0dBVEVXQVkiLGVbZS5CQURfUkVRVUVTVD00MDBdPSJCQURfUkVRVUVTVCIsZVtlLkNPTkZMSUNUPTQwOV09IkNPTkZMSUNUIixlW2UuQ09OVElOVUU9MTAwXT0iQ09OVElOVUUiLGVbZS5DUkVBVEVEPTIwMV09IkNSRUFURUQiLGVbZS5FWFBFQ1RBVElPTl9GQUlMRUQ9NDE3XT0iRVhQRUNUQVRJT05fRkFJTEVEIixlW2UuRkFJTEVEX0RFUEVOREVOQ1k9NDI0XT0iRkFJTEVEX0RFUEVOREVOQ1kiLGVbZS5GT1JCSURERU49NDAzXT0iRk9SQklEREVOIixlW2UuR0FURVdBWV9USU1FT1VUPTUwNF09IkdBVEVXQVlfVElNRU9VVCIsZVtlLkdPTkU9NDEwXT0iR09ORSIsZVtlLkhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEPTUwNV09IkhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEIixlW2UuSU1fQV9URUFQT1Q9NDE4XT0iSU1fQV9URUFQT1QiLGVbZS5JTlNVRkZJQ0lFTlRfU1BBQ0VfT05fUkVTT1VSQ0U9NDE5XT0iSU5TVUZGSUNJRU5UX1NQQUNFX09OX1JFU09VUkNFIixlW2UuSU5TVUZGSUNJRU5UX1NUT1JBR0U9NTA3XT0iSU5TVUZGSUNJRU5UX1NUT1JBR0UiLGVbZS5JTlRFUk5BTF9TRVJWRVJfRVJST1I9NTAwXT0iSU5URVJOQUxfU0VSVkVSX0VSUk9SIixlW2UuTEVOR1RIX1JFUVVJUkVEPTQxMV09IkxFTkdUSF9SRVFVSVJFRCIsZVtlLkxPQ0tFRD00MjNdPSJMT0NLRUQiLGVbZS5NRVRIT0RfRkFJTFVSRT00MjBdPSJNRVRIT0RfRkFJTFVSRSIsZVtlLk1FVEhPRF9OT1RfQUxMT1dFRD00MDVdPSJNRVRIT0RfTk9UX0FMTE9XRUQiLGVbZS5NT1ZFRF9QRVJNQU5FTlRMWT0zMDFdPSJNT1ZFRF9QRVJNQU5FTlRMWSIsZVtlLk1PVkVEX1RFTVBPUkFSSUxZPTMwMl09Ik1PVkVEX1RFTVBPUkFSSUxZIixlW2UuTVVMVElfU1RBVFVTPTIwN109Ik1VTFRJX1NUQVRVUyIsZVtlLk1VTFRJUExFX0NIT0lDRVM9MzAwXT0iTVVMVElQTEVfQ0hPSUNFUyIsZVtlLk5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQ9NTExXT0iTkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRCIsZVtlLk5PX0NPTlRFTlQ9MjA0XT0iTk9fQ09OVEVOVCIsZVtlLk5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OPTIwM109Ik5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OIixlW2UuTk9UX0FDQ0VQVEFCTEU9NDA2XT0iTk9UX0FDQ0VQVEFCTEUiLGVbZS5OT1RfRk9VTkQ9NDA0XT0iTk9UX0ZPVU5EIixlW2UuTk9UX0lNUExFTUVOVEVEPTUwMV09Ik5PVF9JTVBMRU1FTlRFRCIsZVtlLk5PVF9NT0RJRklFRD0zMDRdPSJOT1RfTU9ESUZJRUQiLGVbZS5PSz0yMDBdPSJPSyIsZVtlLlBBUlRJQUxfQ09OVEVOVD0yMDZdPSJQQVJUSUFMX0NPTlRFTlQiLGVbZS5QQVlNRU5UX1JFUVVJUkVEPTQwMl09IlBBWU1FTlRfUkVRVUlSRUQiLGVbZS5QRVJNQU5FTlRfUkVESVJFQ1Q9MzA4XT0iUEVSTUFORU5UX1JFRElSRUNUIixlW2UuUFJFQ09ORElUSU9OX0ZBSUxFRD00MTJdPSJQUkVDT05ESVRJT05fRkFJTEVEIixlW2UuUFJFQ09ORElUSU9OX1JFUVVJUkVEPTQyOF09IlBSRUNPTkRJVElPTl9SRVFVSVJFRCIsZVtlLlBST0NFU1NJTkc9MTAyXT0iUFJPQ0VTU0lORyIsZVtlLlBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEPTQwN109IlBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEIixlW2UuUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRT00MzFdPSJSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFIixlW2UuUkVRVUVTVF9USU1FT1VUPTQwOF09IlJFUVVFU1RfVElNRU9VVCIsZVtlLlJFUVVFU1RfVE9PX0xPTkc9NDEzXT0iUkVRVUVTVF9UT09fTE9ORyIsZVtlLlJFUVVFU1RfVVJJX1RPT19MT05HPTQxNF09IlJFUVVFU1RfVVJJX1RPT19MT05HIixlW2UuUkVRVUVTVEVEX1JBTkdFX05PVF9TQVRJU0ZJQUJMRT00MTZdPSJSRVFVRVNURURfUkFOR0VfTk9UX1NBVElTRklBQkxFIixlW2UuUkVTRVRfQ09OVEVOVD0yMDVdPSJSRVNFVF9DT05URU5UIixlW2UuU0VFX09USEVSPTMwM109IlNFRV9PVEhFUiIsZVtlLlNFUlZJQ0VfVU5BVkFJTEFCTEU9NTAzXT0iU0VSVklDRV9VTkFWQUlMQUJMRSIsZVtlLlNXSVRDSElOR19QUk9UT0NPTFM9MTAxXT0iU1dJVENISU5HX1BST1RPQ09MUyIsZVtlLlRFTVBPUkFSWV9SRURJUkVDVD0zMDddPSJURU1QT1JBUllfUkVESVJFQ1QiLGVbZS5UT09fTUFOWV9SRVFVRVNUUz00MjldPSJUT09fTUFOWV9SRVFVRVNUUyIsZVtlLlVOQVVUSE9SSVpFRD00MDFdPSJVTkFVVEhPUklaRUQiLGVbZS5VTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUz00NTFdPSJVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUyIsZVtlLlVOUFJPQ0VTU0FCTEVfRU5USVRZPTQyMl09IlVOUFJPQ0VTU0FCTEVfRU5USVRZIixlW2UuVU5TVVBQT1JURURfTUVESUFfVFlQRT00MTVdPSJVTlNVUFBPUlRFRF9NRURJQV9UWVBFIixlW2UuVVNFX1BST1hZPTMwNV09IlVTRV9QUk9YWSIsZVtlLk1JU0RJUkVDVEVEX1JFUVVFU1Q9NDIxXT0iTUlTRElSRUNURURfUkVRVUVTVCJ9KShpcnx8KGlyPXt9KSk7dmFyIE9vPShlPT4oZS5DT0RFPSJjb2RlIixlLklEX1RPS0VOPSJpZF90b2tlbiIsZS5UT0tFTj0idG9rZW4iLGUpKShPb3x8e30pLE5vPShlPT4oZS5RVUVSWT0icXVlcnkiLGUuRlJBR01FTlQ9ImZyYWdtZW50IixlLkZPUk1fUE9TVD0iZm9ybV9wb3N0IixlKSkoTm98fHt9KSxScz0oZT0+KGUuQ0xJRU5UX0NSRURFTlRJQUxTPSJjbGllbnRfY3JlZGVudGlhbHMiLGUuQVVUSE9SSVpBVElPTl9DT0RFPSJhdXRob3JpemF0aW9uX2NvZGUiLGUuUkVGUkVTSF9UT0tFTj0icmVmcmVzaF90b2tlbiIsZSkpKFJzfHx7fSksenQ9KGU9PihlLlJFU1RPUkVfU0VTU0lPTj0iUmVzdG9yZVNlc3Npb24iLGUuQVVUSE9SSVpFPSJBdXRob3JpemUiLGUuSEFORExFX1JFRElSRUNUPSJIYW5kbGVSZWRpcmVjdCIsZS5MT0dPVVQ9IkxvZ291dCIsZS5BVVRIRU5USUNBVEVfRVZFTlQ9IkF1dGhlbnRpY2F0ZUV2ZW50IixlLkVSUk9SPSJFcnJvciIsZSkpKHp0fHx7fSk7TnMoYHByb2M6JHtwcm9jZXNzLnBpZH06c3Rzb2F1dGgyd29ya2VyLnRzYCk7Y2xhc3MgWWZ7Y29uc3RydWN0b3IodCl7U2UodGhpcyxGZSx2b2lkIDApO1NlKHRoaXMsT3Qsdm9pZCAwKTtTZSh0aGlzLEFyLHZvaWQgMCk7U2UodGhpcyx5bix2b2lkIDApO1NlKHRoaXMsSGUsdm9pZCAwKTtTZSh0aGlzLHZ0LHZvaWQgMCk7U2UodGhpcyxOdCx2b2lkIDApO1NlKHRoaXMsS2Usdm9pZCAwKTtTZSh0aGlzLEt0LHZvaWQgMCk7U2UodGhpcywkbix2b2lkIDApO1NlKHRoaXMsdHQsdm9pZCAwKTtTZSh0aGlzLENyLHZvaWQgMCk7U2UodGhpcyxJcix2b2lkIDApO1NlKHRoaXMsRHIsdm9pZCAwKTtTZSh0aGlzLGNyLHZvaWQgMCk7U2UodGhpcyxqcix2b2lkIDApO1NlKHRoaXMsa3Isdm9pZCAwKTtTZSh0aGlzLFVyLHZvaWQgMCk7Y2UodGhpcyxGZSxudWxsKSxjZSh0aGlzLE90LG5ldyBDZiksY2UodGhpcyxBcixuZXcgSWYpLGNlKHRoaXMseW4sImF1dGhvcml6ZV9vcHRpb25zLnN0c21kYS5jb20uYXUiKSxjZSh0aGlzLEhlLCJzZXNzaW9uLnN0c21kYS5jb20uYXUiKSxjZSh0aGlzLHZ0LG51bGwpLGNlKHRoaXMsTnQsbnVsbCksY2UodGhpcyxLZSxudWxsKSxjZSh0aGlzLEt0LG51bGwpLGNlKHRoaXMsJG4sMCksdGhpcy5TZXR1cExpc3RlbmVyPSgpPT57Vih0aGlzLEt0KS5vbm1lc3NhZ2U9YXN5bmMgcj0+e2NvbnN0IG49ci5kYXRhO3N3aXRjaChuLmNvbW1hbmQpe2Nhc2UgenQuUkVTVE9SRV9TRVNTSU9OOlYodGhpcyx0dCkuY2FsbCh0aGlzLG4sYXdhaXQgVih0aGlzLENyKS5jYWxsKHRoaXMpKTticmVhaztjYXNlIHp0LkFVVEhPUklaRTpWKHRoaXMsdHQpLmNhbGwodGhpcyxuLGF3YWl0IFYodGhpcyxJcikuY2FsbCh0aGlzKSk7YnJlYWs7Y2FzZSB6dC5IQU5ETEVfUkVESVJFQ1Q6Vih0aGlzLHR0KS5jYWxsKHRoaXMsbixhd2FpdCBWKHRoaXMsRHIpLmNhbGwodGhpcyxuLnBheWxvYWQpKTticmVhaztjYXNlIHp0LkxPR09VVDpWKHRoaXMsdHQpLmNhbGwodGhpcyxuLGF3YWl0IFYodGhpcyxVcikuY2FsbCh0aGlzKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQ6IFske24uY29tbWFuZH0nXSBub3QgZm91bmQuYCl9fX0sY2UodGhpcyx0dCxhc3luYyhyLG4pPT57Y29uc3Qgcz17bWVzc2FnZUlkOnIubWVzc2FnZUlkLGNvbW1hbmQ6ci5jb21tYW5kLHBheWxvYWQ6bn07Vih0aGlzLEt0KS5wb3N0TWVzc2FnZShzKX0pLGNlKHRoaXMsQ3IsYXN5bmMoKT0+e2xldCByPW51bGw7aWYocj1WKHRoaXMsRmUpLmdldChWKHRoaXMsSGUpKSxyIT09bnVsbCljb25zb2xlLmxvZygiU2Vzc2lvbiByZXN0b3JlZCBmcm9tIGNsaWVudCBzdG9yYWdlLiIpLFYodGhpcyx2dCkmJlYodGhpcyx2dCkuVXBkYXRlSW5zdHJ1bWVudCgibSIse0xvZ01lc3NhZ2U6IlNlc3Npb24gcmVzdG9yZWQgZnJvbSBjbGllbnQgc3RvcmFnZS4ifSk7ZWxzZXtjb25zdCBuPWAke3t9LkJST0tFUl9FTkRQT0lOVH06JHt7fS5CUk9LRVJfUE9SVH0ke3t9LkJST0tFUl9BUElfUk9PVH0vc2Vzc2lvbmA7Y29uc29sZS5sb2coIlJlc3RvcmVTZXNzaW9uIiksY29uc29sZS5sb2cobiksVih0aGlzLHZ0KSYmKFYodGhpcyx2dCkuVXBkYXRlSW5zdHJ1bWVudCgibSIse0xvZ01lc3NhZ2U6IlJlc3RvcmVTZXNzaW9uIn0pLFYodGhpcyx2dCkuVXBkYXRlSW5zdHJ1bWVudCgibSIse0xvZ01lc3NhZ2U6bn0pKTt0cnl7Y29uc3Qgcz1hd2FpdCBWbih7bWV0aG9kOiJwb3N0Iix1cmw6bixkYXRhOntbQ3QuT0F1dGgyUGFyYW1ldGVyVHlwZS5DTElFTlRfSURdOnt9LkNMSUVOVF9JRCxbQ3QuT0F1dGgyUGFyYW1ldGVyVHlwZS5TQ09QRV06e30uU0NPUEUsW0N0Lk9BdXRoMlBhcmFtZXRlclR5cGUuUkVESVJFQ1RfVVJJXTp7fS5SRURJUkVDVF9VUkksW0N0Lk9BdXRoMlBhcmFtZXRlclR5cGUuQVVESUVOQ0VdOnt9LkFVRElFTkNFfSx3aXRoQ3JlZGVudGlhbHM6ITAsdGltZW91dDpwYXJzZUludCh7fS5USU1FT1VUKX0pO3MuZGF0YS5zdGF0dXM9PT1pci5PSz8ocj1zLmRhdGEuZGV0YWlsLFYodGhpcyxGZSkuc2V0KFYodGhpcyxIZSksciksY29uc29sZS5sb2coIlNlc3Npb24gcmVzdG9yZWQgZnJvbSBzZXJ2ZXIgc2lkZSBjb29raWUuIikpOihjb25zb2xlLmxvZygiQ291bGQgbm90IHJlc3RvcmUgcHJldmlvdXMgc2Vzc2lvbjotIiksY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocy5kYXRhKSkpfWNhdGNoKHMpe2NvbnNvbGUubG9nKCJDb3VsZCBub3QgcmVzdG9yZSBwcmV2aW91cyBzZXNzaW9uIChlcnJvciBzdGF0ZSk6LSIpLGNvbnNvbGUubG9nKHMpLGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHMpKX19cmV0dXJuIHIhPT1udWxsPyhWKHRoaXMsS2UpLmNhbGwodGhpcyxyLmlkX3Rva2VuKSxjb25zb2xlLmxvZygiUmVmcmVzaGluZyB0b2tlbnMgLi4uIiksVih0aGlzLGtyKS5jYWxsKHRoaXMpKTooVih0aGlzLEtlKS5jYWxsKHRoaXMsbnVsbCksITEpfSksY2UodGhpcyxJcixhc3luYygpPT57Y29uc29sZS5sb2coIkF1dGhvcml6ZSAuLi4iKTtjb25zdCByPXt9LkNMSUVOVF9JRCxuPVYodGhpcyxPdCkuQ3JlYXRlUmFuZG9tU3RyaW5nKCkscz1bT28uQ09ERV0sYT17fS5SRURJUkVDVF9VUkksbz1Oby5RVUVSWSxsPXt9LlNDT1BFLGY9Vih0aGlzLE90KS5DcmVhdGVSYW5kb21TdHJpbmcoKSxwPVYodGhpcyxPdCkuQ3JlYXRlUmFuZG9tU3RyaW5nKCksaT1hd2FpdCBWKHRoaXMsT3QpLkRpZ2VzdE1lc3NhZ2UocCksRT17Y2xpZW50X2lkOnIsbm9uY2U6bixyZXNwb25zZV90eXBlOnMscmVkaXJlY3RfdXJpOmEscmVzcG9uc2VfbW9kZTpvLHNjb3BlOmwsc3RhdGU6Zixjb2RlX2NoYWxsZW5nZTppLGNvZGVfY2hhbGxlbmdlX21ldGhvZDoiUzI1NiJ9LFQ9YCR7e30uQVVUSF9FTkRQT0lOVH06JHt7fS5BVVRIX1BPUlR9JHt7fS5BVVRIX0FQSVJPT1R9PyR7Vih0aGlzLEFyKS5DcmVhdGVRdWVyeVBhcmFtcyhFKX1gO3JldHVybiBjb25zb2xlLmxvZyhUKSxFLmNvZGVfdmVyaWZpZXI9cCxjb25zb2xlLmxvZyhgQXV0aG9yaXplOmF1dGhvcml6ZU9wdGlvbnM6IFske0pTT04uc3RyaW5naWZ5KEUpfV1gKSx7dXJsOlQsYXV0aG9yaXplT3B0aW9uczpFfX0pLGNlKHRoaXMsRHIsYXN5bmMgcj0+e2NvbnN0IG49ci5xdWVyeVZhcnMscz1yLmF1dGhvcml6ZU9wdGlvbnM7aWYoY29uc29sZS5sb2coIkhhbmRsZVJlZGlyZWN0IiksY29uc29sZS5sb2coYEhhbmRsZVJlZGlyZWN0OlF1ZXJ5IFZhcnM6IFske0pTT04uc3RyaW5naWZ5KG4pfV1gKSxuW0N0Lk9BdXRoMlBhcmFtZXRlclR5cGUuQ09ERV0pe2NvbnN0IGE9bjtjb25zb2xlLmxvZyhgYXV0aG9yaXplT3B0aW9ucyBmcm9tIHRyYW5zYWN0aW9uIHN0YXRlOiBbJHtKU09OLnN0cmluZ2lmeShzKX1dYCk7Y29uc3Qgbz1hLnN0YXRlO3JldHVybiBzLnN0YXRlLmxvY2FsZUNvbXBhcmUobyk9PT0wPyhjb25zb2xlLmxvZygicmVkaXJlY3RlZCBzdGF0ZSAoZnJvbSBxdWVyeVZhcnMpIG1hdGNoZWQgcHJldmlvdXNseSBzYXZlZCB0cmFuc2FjdGlvbiBhdXRob3JpemVPcHRpb25zIHN0YXRlIiksYXdhaXQgVih0aGlzLGpyKS5jYWxsKHRoaXMscyxhKSk6KGNvbnNvbGUubG9nKCJyZWRpcmVjdGVkIHN0YXRlIChmcm9tIHF1ZXJ5VmFycykgZGlkIE5PVCBtYXRjaCBwcmV2aW91c2x5IHNhdmVkIHRyYW5zYWN0aW9uIGF1dGhvcml6ZU9wdGlvbnMgc3RhdGUiKSxWKHRoaXMsTnQpLmNhbGwodGhpcyx7bWVzc2FnZToiU3RhdGUgdW4tbWF0Y2hlZCJ9KSwhMSl9ZWxzZSBpZihuW0N0Lk9BdXRoMlBhcmFtZXRlclR5cGUuRVJST1JdKXtjb25zdCBhPW47cmV0dXJuIGEuZXJyb3IsYS5lcnJvcl9kZXNjcmlwdGlvbixWKHRoaXMsTnQpLmNhbGwodGhpcyx7bWVzc2FnZToiU3RhdGUgdW4tbWF0Y2hlZCJ9KSwhMX1lbHNlIHJldHVybiBWKHRoaXMsTnQpLmNhbGwodGhpcyx7bWVzc2FnZToiU3RhdGUgdW4tbWF0Y2hlZCJ9KSwhMX0pLGNlKHRoaXMsY3IsYXN5bmMgcj0+e2NvbnNvbGUubG9nKCIjR2V0VG9rZW5Gcm9tQnJva2VyIiksVih0aGlzLEZlKS5yZW1vdmUoVih0aGlzLEhlKSk7Y29uc3Qgbj1gJHt7fS5CUk9LRVJfRU5EUE9JTlR9OiR7e30uQlJPS0VSX1BPUlR9JHt7fS5CUk9LRVJfQVBJX1JPT1R9L3Rva2VuYDtjb25zb2xlLmxvZyhgI0dldFRva2VuRnJvbUJyb2tlcjp1cmwgPSBbJHtufV1gKSxjb25zb2xlLmxvZyhyKTt0cnl7Y29uc3Qgcz1hd2FpdCBWbih7bWV0aG9kOiJwb3N0Iix1cmw6bixkYXRhOnIsd2l0aENyZWRlbnRpYWxzOiEwLHRpbWVvdXQ6cGFyc2VJbnQoe30uVElNRU9VVCl9KTtpZihjb25zb2xlLmxvZyhgcmV0VmFsOiAke0pTT04uc3RyaW5naWZ5KHMpfWApLHMuc3RhdHVzPT09aXIuT0spe2NvbnNvbGUubG9nKCJTdG9yaW5nIHRva2Vucy4uLiIpO2NvbnN0IGE9cy5kYXRhO3JldHVybiBWKHRoaXMsS2UpLmNhbGwodGhpcyxhLmlkX3Rva2VuKSxWKHRoaXMsRmUpLnNldChWKHRoaXMsSGUpLGEpLCEwfWVsc2UgaWYocy5zdGF0dXM9PT1pci5VTkFVVEhPUklaRUQpe2NvbnNvbGUubG9nKCJOT1QgU3RvcmluZyB0b2tlbnMuLi4iKSxjb25zb2xlLmxvZyhzLnN0YXR1cyksVih0aGlzLEtlKS5jYWxsKHRoaXMsbnVsbCk7Y29uc3QgYT1zLmRhdGE7cmV0dXJuITF9ZWxzZSByZXR1cm4gY29uc29sZS5sb2coIk5PVCBTdG9yaW5nIHRva2Vucy4uLiIpLGNvbnNvbGUubG9nKHMuc3RhdHVzKSxWKHRoaXMsS2UpLmNhbGwodGhpcyxudWxsKSxjb25zb2xlLmxvZygiQ291bGQgbm90IG9idGFpbiBhY2Nlc3NfdG9rZW4gZnJvbSB0b2tlbiBlbmQtcG9pbnQ6LSIpLGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHMuZGF0YSkpLCExfWNhdGNoKHMpe3JldHVybiBWKHRoaXMsS2UpLmNhbGwodGhpcyxudWxsKSxjb25zb2xlLmxvZyhzKSxjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShzKSksITF9fSksY2UodGhpcyxqcixhc3luYyhyLG4pPT57Y29uc29sZS5sb2coIiNHZXRUb2tlbiIpLGNvbnNvbGUubG9nKG4pLFYodGhpcyxGZSkuc2V0KFYodGhpcyxIZSksbnVsbCk7Y29uc3Qgcz17Y2xpZW50X2lkOnt9LkNMSUVOVF9JRCxzY29wZTp7fS5TQ09QRSxjb2RlOm4uY29kZSxyZWRpcmVjdF91cmk6e30uUkVESVJFQ1RfVVJJLGdyYW50X3R5cGU6UnMuQVVUSE9SSVpBVElPTl9DT0RFLGNvZGVfdmVyaWZpZXI6ci5jb2RlX3ZlcmlmaWVyfTtyZXR1cm4gVih0aGlzLGNyKS5jYWxsKHRoaXMscyl9KSxjZSh0aGlzLGtyLGFzeW5jKCk9Pntjb25zb2xlLmxvZygiUmVmcmVzaFRva2VuIik7Y29uc3Qgcj1WKHRoaXMsRmUpLmdldChWKHRoaXMsSGUpKTtpZihyKXtjb25zdCBuPXtjbGllbnRfaWQ6e30uQ0xJRU5UX0lELHNjb3BlOnt9LlNDT1BFLHJlZnJlc2hfdG9rZW46ci5yZWZyZXNoX3Rva2VuLGdyYW50X3R5cGU6UnMuUkVGUkVTSF9UT0tFTn07cmV0dXJuIFYodGhpcyxjcikuY2FsbCh0aGlzLG4pfWVsc2UgcmV0dXJuITF9KSxjZSh0aGlzLFVyLGFzeW5jKCk9Pntjb25zb2xlLmxvZygiTG9nb3V0Iik7Y29uc3Qgcj1gJHt7fS5CUk9LRVJfRU5EUE9JTlR9OiR7e30uQlJPS0VSX1BPUlR9JHt7fS5CUk9LRVJfQVBJX1JPT1R9L2xvZ291dGA7Y29uc29sZS5sb2cocik7Y29uc3Qgcz1WKHRoaXMsRmUpLmdldChWKHRoaXMsSGUpKS5yZWZyZXNoX3Rva2VuO2NvbnNvbGUubG9nKHMpO2NvbnN0IGE9amYocyk7Y29uc29sZS5sb2coYSk7Y29uc3Qgbz1hLnN0c19zZXNzaW9uO2NvbnNvbGUubG9nKG8pLFYodGhpcyxGZSkucmVtb3ZlKFYodGhpcyxIZSkpLFYodGhpcyxLZSkuY2FsbCh0aGlzLG51bGwpO3RyeXtjb25zdCBsPWF3YWl0IFZuKHttZXRob2Q6InBvc3QiLHVybDpyLGRhdGE6e3Nlc3Npb25JZDpvfSx3aXRoQ3JlZGVudGlhbHM6ITAsdGltZW91dDpwYXJzZUludCh7fS5USU1FT1VUKX0pO3JldHVybiBsLmRhdGEuc3RhdHVzPT09aXIuT0s/ITA6KGNvbnNvbGUubG9nKCJFcnJvciBkdXJpbmcgbG9nb3V0IChzZXJ2ZXIgc2lkZSkiKSxjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShsLmRhdGEpKSwhMSl9Y2F0Y2gobCl7cmV0dXJuIGNvbnNvbGUubG9nKCJFcnJvciBkdXJpbmcgbG9nb3V0IChzZXJ2ZXIgc2lkZSkiKSxjb25zb2xlLmxvZyhsKSxjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShsKSksITF9fSksY2UodGhpcyxGZSxuZXcgUWYoe2NsaWVudFN0b3JhZ2VUeXBlOmJvLk1FTU9SWV9TVE9SQUdFfSkuR2V0U3RvcmFnZSgpKSxjZSh0aGlzLEtlLHI9Pntjb25zdCBuPXttZXNzYWdlSWQ6LTEsY29tbWFuZDp6dC5BVVRIRU5USUNBVEVfRVZFTlR9O1YodGhpcyx0dCkuY2FsbCh0aGlzLG4scil9KSxjZSh0aGlzLE50LHI9Pntjb25zdCBuPXttZXNzYWdlSWQ6LTEsY29tbWFuZDp6dC5FUlJPUn07Vih0aGlzLHR0KS5jYWxsKHRoaXMsbixyKX0pLGNlKHRoaXMsS3QsdCksdGhpcy5TZXR1cExpc3RlbmVyKCl9fUZlPW5ldyBXZWFrTWFwLE90PW5ldyBXZWFrTWFwLEFyPW5ldyBXZWFrTWFwLHluPW5ldyBXZWFrTWFwLEhlPW5ldyBXZWFrTWFwLHZ0PW5ldyBXZWFrTWFwLE50PW5ldyBXZWFrTWFwLEtlPW5ldyBXZWFrTWFwLEt0PW5ldyBXZWFrTWFwLCRuPW5ldyBXZWFrTWFwLHR0PW5ldyBXZWFrTWFwLENyPW5ldyBXZWFrTWFwLElyPW5ldyBXZWFrTWFwLERyPW5ldyBXZWFrTWFwLGNyPW5ldyBXZWFrTWFwLGpyPW5ldyBXZWFrTWFwLGtyPW5ldyBXZWFrTWFwLFVyPW5ldyBXZWFrTWFwLG9ubWVzc2FnZT1hc3luYyBmdW5jdGlvbihlKXtjb25zdCB0PWUuZGF0YTtuZXcgWWYodCl9fSkoKTsK",Xn=typeof window!="undefined"&&window.Blob&&new Blob([atob(Wn)],{type:"text/javascript;charset=utf-8"});function Ro(){const e=Xn&&(window.URL||window.webkitURL).createObjectURL(Xn);try{return e?new Worker(e,{}):new Worker("data:application/javascript;base64,"+Wn,{type:"module"})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}const fo=jt(`proc:${process.pid}:stsoauth2manager.ts`);class yn{constructor(l,c){pe(this,hc,void 0);pe(this,Hl,void 0);pe(this,Gl,void 0);pe(this,$c,void 0);pe(this,qc,void 0);pe(this,kl,void 0);pe(this,et,void 0);pe(this,pc,void 0);pe(this,Fl,void 0);pe(this,lt,void 0);pe(this,Ml,void 0);pe(this,Gc,void 0);pe(this,Vl,void 0);pe(this,Ol,void 0);pe(this,Wl,void 0);pe(this,Xl,void 0);pe(this,Vc,void 0);pe(this,sl,void 0);pe(this,Wc,void 0);pe(this,Xc,void 0);pe(this,yc,void 0);pe(this,Yc,void 0);ce(this,hc,null),ce(this,Hl,null),ce(this,Gl,null),ce(this,$c,new so),ce(this,qc,new ao),ce(this,kl,"authorize_options.stsmda.com.au"),ce(this,et,"session.stsmda.com.au"),ce(this,pc,null),ce(this,Fl,null),ce(this,lt,{}),ce(this,Gc,0),ce(this,Vl,{}),ce(this,Ol,1e3),ce(this,Wl,null),ce(this,Xl,null),ce(this,Vc,n=>{const a=n.data;if(a.messageId===-1)switch(a.command){case dl.AUTHENTICATE_EVENT:O(this,Xc).call(this,a.payload);break;case dl.ERROR:O(this,Wc).call(this,a.payload);break;default:throw new Error(`ProcessMessageResponse command [${a.command}] not valid.`)}else{const b=O(this,Vl)[a.messageId];if(b)b(a);else throw new Error(`Message: [${a.messageId}] does not exists in callBacks.`)}}),ce(this,sl,n=>(n.messageId=Un(this,Gc)._++,new Promise((a,b)=>{const p=setTimeout(()=>{delete O(this,Vl)[n.messageId],b(`Message: [${n.messageId}] timeout error after: [${O(this,Ol)}] ms.`)},O(this,Ol));O(this,Vl)[n.messageId]=r=>{clearTimeout(p),delete O(this,Vl)[n.messageId],a(r)},O(this,Ml).postMessage(n)}))),ce(this,Wc,n=>{O(this,Gl).commit("AuthorizeError",{message:n}),setTimeout(()=>{O(this,Hl).replace("/error")},0)}),ce(this,Xc,n=>{O(this,Fl).authenticateEvent&&O(this,Fl).authenticateEvent(n),O(this,Gl).commit("stsOAuth2SDK/SessionData",n)}),ce(this,yc,(n,a)=>{a.beforeEach(async(b,p)=>{const r=n.config.globalProperties.$store,o=n.config.globalProperties.$sts;if(fo(`beforeEach: from: [${p.path}], to: [${b.path}]`),r.getters["stsOAuth2SDK/LoggedIn"]===!1){if(console.log("Not logged in"),b.path.localeCompare("/authorize")===0)return console.log("to = /authorize"),!0;if(b.path.localeCompare("/consent")===0&&typeof r.getters.Session.sessionId!="undefined"||b.path.localeCompare("/logout")===0||b.path.localeCompare("/error")===0||b.path.localeCompare("/logout")===0)return!0;const h=b.query;if(h[Hc.OAuth2ParameterType.CODE]||h[Hc.OAuth2ParameterType.ERROR])return console.log(`#SetupRout:str = [${h}]`),await o.om.HandleRedirect(h)?(setTimeout(()=>{window.history.replaceState({},document.title,window.location.origin+"/")},0),!0):(O(this,Hl).replace("/error"),!1);const S=await o.om.RestoreSession();return console.log(`#SetupRoute:sessionRestored [${S}]`),S!==!0?(console.log("Session not restored - Need to Authorize"),o.om.Authorize(),!1):"/"}else return b.path.localeCompare("/consent")===0?"/":b.path.localeCompare("/authorize")===0?(a.replace({path:"/"}),!1):b.path.localeCompare("/logout")===0?(a.replace({path:"/"}),!1):!0})}),ce(this,Yc,()=>{O(this,Gl).registerModule("stsOAuth2SDK",{namespaced:!0,state(){return{sessionData:{}}},getters:{SessionData(n){return n.sessionData},LoggedIn(n){return!(typeof n.sessionData=="undefined"||n.sessionData===null)},UserDetails(n){if(n.sessionData){const a=n.sessionData;return So(a)}else return null}},mutations:{SessionData(n,a){n.sessionData=a,console.log(`commit [sessionData]: ${JSON.stringify(a)}`)}}},{preserveState:!0})}),this.RestoreSession=async()=>{try{return(await O(this,sl).call(this,{command:dl.RESTORE_SESSION})).payload}catch(n){return console.log(`RestoreSession Error: ${n}`),!1}},this.Authorize=async()=>{try{const n=await O(this,sl).call(this,{command:dl.AUTHORIZE});O(this,Xl).set(O(this,kl),n.payload.authorizeOptions);const a=n.payload.url;window.location.replace(a)}catch(n){console.log(`Authorize Error: ${n}`)}},this.HandleRedirect=async n=>{try{let a=null;if(n[Hc.OAuth2ParameterType.CODE]){const b=O(this,Xl).get(O(this,kl));O(this,Xl).remove(O(this,kl)),a=await O(this,sl).call(this,{command:dl.HANDLE_REDIRECT,payload:{queryVars:n,authorizeOptions:b}})}else a=await O(this,sl).call(this,{command:dl.HANDLE_REDIRECT,payload:n});return a.payload}catch(a){return console.log(`HandleRedirect Error: ${a}`),!1}},this.Logout=async()=>{try{return(await O(this,sl).call(this,{command:dl.LOGOUT})).payload}catch(n){return console.log(`Logout Error: ${n}`),!1}},ce(this,Fl,c),ce(this,hc,l.config.globalProperties.$sts.storage),ce(this,Gl,l.config.globalProperties.$store),ce(this,pc,l.config.globalProperties.$sts.aic.PrimaryPublishInstrumentController),ce(this,Hl,l.config.globalProperties.$router),ce(this,Xl,new Yo({clientStorageType:Gn.SESSION_STORAGE}).GetStorage()),ce(this,Wl,new Ro),O(this,Wl).onmessage=n=>{console.log(`this.#worker.onmessage = [${n}]`)},O(this,Wl).onerror=function(n){console.log(`this.#worker.onerror = [${n}]`)};const{port1:t,port2:i}=new MessageChannel;ce(this,Ml,t),O(this,Wl).postMessage(i,[i]),O(this,Ml).onmessage=n=>{O(this,Vc).call(this,n)},O(this,Yc).call(this),O(this,yc).call(this,l,c.router)}}hc=new WeakMap,Hl=new WeakMap,Gl=new WeakMap,$c=new WeakMap,qc=new WeakMap,kl=new WeakMap,et=new WeakMap,pc=new WeakMap,Fl=new WeakMap,lt=new WeakMap,Ml=new WeakMap,Gc=new WeakMap,Vl=new WeakMap,Ol=new WeakMap,Wl=new WeakMap,Xl=new WeakMap,Vc=new WeakMap,sl=new WeakMap,Wc=new WeakMap,Xc=new WeakMap,yc=new WeakMap,Yc=new WeakMap;const Lo={install:(e,l)=>{const c=new yn(e,l);e.config.globalProperties.$sts.om=c}};M.AuthorizeOptionsResponseMode=rn,M.AuthorizeOptionsResponseType=bn,M.IOauth2ListenerCommand=dl,M.OAuthGrantTypes=hn,M.STSOAuth2Manager=yn,M.STSOAuth2ManagerPlugin=Lo,Object.defineProperties(M,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
1
+ var zm=Object.defineProperty,Cm=Object.defineProperties;var Hm=Object.getOwnPropertyDescriptors;var k9=Object.getOwnPropertySymbols;var jm=Object.prototype.hasOwnProperty,Qm=Object.prototype.propertyIsEnumerable;var OV=(K,O,ei)=>O in K?zm(K,O,{enumerable:!0,configurable:!0,writable:!0,value:ei}):K[O]=ei,A=(K,O)=>{for(var ei in O||(O={}))jm.call(O,ei)&&OV(K,ei,O[ei]);if(k9)for(var ei of k9(O))Qm.call(O,ei)&&OV(K,ei,O[ei]);return K},ai=(K,O)=>Cm(K,Hm(O));var Vb=(K,O,ei)=>(OV(K,typeof O!="symbol"?O+"":O,ei),ei),x9=(K,O,ei)=>{if(!O.has(K))throw TypeError("Cannot "+ei)};var P=(K,O,ei)=>(x9(K,O,"read from private field"),ei?ei.call(K):O.get(K)),oi=(K,O,ei)=>{if(O.has(K))throw TypeError("Cannot add the same private member more than once");O instanceof WeakSet?O.add(K):O.set(K,ei)},bi=(K,O,ei,ji)=>(x9(K,O,"write to private field"),ji?ji.call(K,ei):O.set(K,ei),ei),f9=(K,O,ei,ji)=>({set _(sl){bi(K,O,sl,ei)},get _(){return P(K,O,ji)}});(function(K,O){typeof exports=="object"&&typeof module!="undefined"?O(exports):typeof define=="function"&&define.amd?define(["exports"],O):(K=typeof globalThis!="undefined"?globalThis:K||self,O(K.stsoauth2plugin={}))})(this,function(K){var rl,ol,Wb,kl,Rl,$b,qb,xl,iV,ob,fl,lV,Kl,Rb,Ll,Pl,Xl,Gl,Lb,ml,Xb,Gb,hb,vb;"use strict";var O=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},ei={exports:{}},ji=1e3,sl=ji*60,jl=sl*60,vl=jl*24,E9=vl*7,z9=vl*365.25,C9=function(i,l){l=l||{};var b=typeof i;if(b==="string"&&i.length>0)return H9(i);if(b==="number"&&isFinite(i))return l.long?Q9(i):j9(i);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(i))};function H9(i){if(i=String(i),!(i.length>100)){var l=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(i);if(!!l){var b=parseFloat(l[1]),V=(l[2]||"ms").toLowerCase();switch(V){case"years":case"year":case"yrs":case"yr":case"y":return b*z9;case"weeks":case"week":case"w":return b*E9;case"days":case"day":case"d":return b*vl;case"hours":case"hour":case"hrs":case"hr":case"h":return b*jl;case"minutes":case"minute":case"mins":case"min":case"m":return b*sl;case"seconds":case"second":case"secs":case"sec":case"s":return b*ji;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return b;default:return}}}}function j9(i){var l=Math.abs(i);return l>=vl?Math.round(i/vl)+"d":l>=jl?Math.round(i/jl)+"h":l>=sl?Math.round(i/sl)+"m":l>=ji?Math.round(i/ji)+"s":i+"ms"}function Q9(i){var l=Math.abs(i);return l>=vl?rb(i,l,vl,"day"):l>=jl?rb(i,l,jl,"hour"):l>=sl?rb(i,l,sl,"minute"):l>=ji?rb(i,l,ji,"second"):i+" ms"}function rb(i,l,b,V){var c=l>=b*1.5;return Math.round(i/b)+" "+V+(c?"s":"")}function M9(i){b.debug=b,b.default=b,b.coerce=o,b.disable=d,b.enable=c,b.enabled=e,b.humanize=C9,b.destroy=I,Object.keys(i).forEach(s=>{b[s]=i[s]}),b.names=[],b.skips=[],b.formatters={};function l(s){let W=0;for(let y=0;y<s.length;y++)W=(W<<5)-W+s.charCodeAt(y),W|=0;return b.colors[Math.abs(W)%b.colors.length]}b.selectColor=l;function b(s){let W,y=null,k,T;function x(...v){if(!x.enabled)return;const R=x,Y=Number(new Date),J=Y-(W||Y);R.diff=J,R.prev=W,R.curr=Y,W=Y,v[0]=b.coerce(v[0]),typeof v[0]!="string"&&v.unshift("%O");let p=0;v[0]=v[0].replace(/%([a-zA-Z%])/g,(X,S)=>{if(X==="%%")return"%";p++;const r=b.formatters[S];if(typeof r=="function"){const g=v[p];X=r.call(R,g),v.splice(p,1),p--}return X}),b.formatArgs.call(R,v),(R.log||b.log).apply(R,v)}return x.namespace=s,x.useColors=b.useColors(),x.color=b.selectColor(s),x.extend=V,x.destroy=b.destroy,Object.defineProperty(x,"enabled",{enumerable:!0,configurable:!1,get:()=>y!==null?y:(k!==b.namespaces&&(k=b.namespaces,T=b.enabled(s)),T),set:v=>{y=v}}),typeof b.init=="function"&&b.init(x),x}function V(s,W){const y=b(this.namespace+(typeof W=="undefined"?":":W)+s);return y.log=this.log,y}function c(s){b.save(s),b.namespaces=s,b.names=[],b.skips=[];let W;const y=(typeof s=="string"?s:"").split(/[\s,]+/),k=y.length;for(W=0;W<k;W++)!y[W]||(s=y[W].replace(/\*/g,".*?"),s[0]==="-"?b.skips.push(new RegExp("^"+s.slice(1)+"$")):b.names.push(new RegExp("^"+s+"$")))}function d(){const s=[...b.names.map(u),...b.skips.map(u).map(W=>"-"+W)].join(",");return b.enable(""),s}function e(s){if(s[s.length-1]==="*")return!0;let W,y;for(W=0,y=b.skips.length;W<y;W++)if(b.skips[W].test(s))return!1;for(W=0,y=b.names.length;W<y;W++)if(b.names[W].test(s))return!0;return!1}function u(s){return s.toString().substring(2,s.toString().length-2).replace(/\.\*\?$/,"*")}function o(s){return s instanceof Error?s.stack||s.message:s}function I(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return b.enable(b.load()),b}var g9=M9;(function(i,l){l.formatArgs=V,l.save=c,l.load=d,l.useColors=b,l.storage=e(),l.destroy=(()=>{let o=!1;return()=>{o||(o=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),l.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function b(){return typeof window!="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document!="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function V(o){if(o[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+o[0]+(this.useColors?"%c ":" ")+"+"+i.exports.humanize(this.diff),!this.useColors)return;const I="color: "+this.color;o.splice(1,0,I,"color: inherit");let s=0,W=0;o[0].replace(/%[a-zA-Z%]/g,y=>{y!=="%%"&&(s++,y==="%c"&&(W=s))}),o.splice(W,0,I)}l.log=console.debug||console.log||(()=>{});function c(o){try{o?l.storage.setItem("debug",o):l.storage.removeItem("debug")}catch{}}function d(){let o;try{o=l.storage.getItem("debug")}catch{}return!o&&typeof process!="undefined"&&"env"in process&&(o={DEPLOYMENT_BASEPATH:"/opt/runner",DOTNET_NOLOGO:"1",USER:"runner",npm_config_always_auth:"",npm_config_user_agent:"npm/8.11.0 node/v18.3.0 linux x64 workspaces/false ci/github-actions",CI:"true",GITHUB_ENV:"/home/runner/work/_temp/_runner_file_commands/set_env_5c4f6f18-1665-4638-b420-bcd02f665810",PIPX_HOME:"/opt/pipx",npm_node_execpath:"/opt/hostedtoolcache/node/18.3.0/x64/bin/node",JAVA_HOME_8_X64:"/usr/lib/jvm/temurin-8-jdk-amd64",NODE_AUTH_TOKEN:"XXXXX-XXXXX-XXXXX-XXXXX",SHLVL:"1",npm_config_noproxy:"",HOME:"/home/runner",RUNNER_TEMP:"/home/runner/work/_temp",GITHUB_EVENT_PATH:"/home/runner/work/_temp/_github_workflow/event.json",npm_package_json:"/home/runner/work/stsoauth2plugin/stsoauth2plugin/package.json",JAVA_HOME_11_X64:"/usr/lib/jvm/temurin-11-jdk-amd64",PIPX_BIN_DIR:"/opt/pipx_bin",GRAALVM_11_ROOT:"/usr/local/graalvm/graalvm-ce-java11-22.1.0",GITHUB_REPOSITORY_OWNER:"nsshunt",GRADLE_HOME:"/usr/share/gradle-7.4.2",HOMEBREW_PREFIX:"/home/linuxbrew/.linuxbrew",ANDROID_NDK_LATEST_HOME:"/usr/local/lib/android/sdk/ndk/24.0.8215888",GITHUB_RETENTION_DAYS:"90",POWERSHELL_DISTRIBUTION_CHANNEL:"GitHub-Actions-ubuntu20",AZURE_EXTENSION_DIR:"/opt/az/azcliextensions",GITHUB_HEAD_REF:"",npm_config_local_prefix:"/home/runner/work/stsoauth2plugin/stsoauth2plugin",GITHUB_GRAPHQL_URL:"https://api.github.com/graphql",COLOR:"0",NVM_DIR:"/home/runner/.nvm",npm_config_metrics_registry:"https://registry.npmjs.org/",DOTNET_SKIP_FIRST_TIME_EXPERIENCE:"1",JAVA_HOME_17_X64:"/usr/lib/jvm/temurin-17-jdk-amd64",ImageVersion:"20220605.1",RUNNER_OS:"Linux",GITHUB_API_URL:"https://api.github.com",SWIFT_PATH:"/usr/share/swift/usr/bin",RUNNER_USER:"runner",CHROMEWEBDRIVER:"/usr/local/share/chrome_driver",JOURNAL_STREAM:"8:21834",GITHUB_WORKFLOW:"Node.js Package",_:"/opt/hostedtoolcache/node/18.3.0/x64/bin/npm",npm_config_prefix:"/opt/hostedtoolcache/node/18.3.0/x64",GITHUB_RUN_ID:"2483506035",GOROOT_1_16_X64:"/opt/hostedtoolcache/go/1.16.15/x64",npm_config_cache:"/home/runner/.npm",GOROOT_1_17_X64:"/opt/hostedtoolcache/go/1.17.11/x64",GITHUB_REF_TYPE:"branch",BOOTSTRAP_HASKELL_NONINTERACTIVE:"1",GITHUB_BASE_REF:"",ImageOS:"ubuntu20",PERFLOG_LOCATION_SETTING:"RUNNER_PERFLOG",GOROOT_1_18_X64:"/opt/hostedtoolcache/go/1.18.3/x64",GITHUB_ACTION_REPOSITORY:"",npm_config_node_gyp:"/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js",PATH:"/home/runner/work/stsoauth2plugin/stsoauth2plugin/node_modules/.bin:/home/runner/work/stsoauth2plugin/node_modules/.bin:/home/runner/work/node_modules/.bin:/home/runner/node_modules/.bin:/home/node_modules/.bin:/node_modules/.bin:/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/opt/hostedtoolcache/node/18.3.0/x64/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin",ANT_HOME:"/usr/share/ant",DOTNET_MULTILEVEL_LOOKUP:"0",RUNNER_TRACKING_ID:"github_9e0a5c7a-978f-4fce-be9f-1597a45d3f8d",INVOCATION_ID:"82315040f6cb4b1891b8755075dbe749",HOMEBREW_CELLAR:"/home/linuxbrew/.linuxbrew/Cellar",NPM_CONFIG_USERCONFIG:"/home/runner/work/_temp/.npmrc",RUNNER_TOOL_CACHE:"/opt/hostedtoolcache",NODE:"/opt/hostedtoolcache/node/18.3.0/x64/bin/node",npm_package_name:"@nsshunt/stsoauth2plugin",GITHUB_ACTION:"__run_2",GITHUB_RUN_NUMBER:"24",RUNNER_ARCH:"X64",AGENT_TOOLSDIRECTORY:"/opt/hostedtoolcache",LANG:"C.UTF-8",VCPKG_INSTALLATION_ROOT:"/usr/local/share/vcpkg",CONDA:"/usr/share/miniconda",RUNNER_NAME:"Hosted Agent",XDG_CONFIG_HOME:"/home/runner/.config",GITHUB_REF_NAME:"main",GITHUB_REPOSITORY:"nsshunt/stsoauth2plugin",npm_lifecycle_script:"vite build",ANDROID_NDK_ROOT:"/usr/local/lib/android/sdk/ndk-bundle",GITHUB_ACTION_REF:"",DEBIAN_FRONTEND:"noninteractive",GITHUB_ACTIONS:"true",npm_package_version:"0.1.13",npm_lifecycle_event:"build",GITHUB_REF_PROTECTED:"false",GITHUB_WORKSPACE:"/home/runner/work/stsoauth2plugin/stsoauth2plugin",ACCEPT_EULA:"Y",GITHUB_JOB:"publish-npm",RUNNER_PERFLOG:"/home/runner/perflog",GITHUB_SHA:"f6598d18861c6084a30243c9d6a9d0200e1f9e96",GITHUB_RUN_ATTEMPT:"1",GITHUB_REF:"refs/heads/main",GITHUB_ACTOR:"nsshunt",ANDROID_SDK_ROOT:"/usr/local/lib/android/sdk",LEIN_HOME:"/usr/local/lib/lein",npm_config_globalconfig:"/opt/hostedtoolcache/node/18.3.0/x64/etc/npmrc",npm_config_init_module:"/home/runner/.npm-init.js",GITHUB_PATH:"/home/runner/work/_temp/_runner_file_commands/add_path_5c4f6f18-1665-4638-b420-bcd02f665810",JAVA_HOME:"/usr/lib/jvm/temurin-11-jdk-amd64",PWD:"/home/runner/work/stsoauth2plugin/stsoauth2plugin",RUNNER_WORKSPACE:"/home/runner/work/stsoauth2plugin",npm_execpath:"/opt/hostedtoolcache/node/18.3.0/x64/lib/node_modules/npm/bin/npm-cli.js",HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS:"3650",GITHUB_EVENT_NAME:"push",HOMEBREW_NO_AUTO_UPDATE:"1",ANDROID_HOME:"/usr/local/lib/android/sdk",GITHUB_SERVER_URL:"https://github.com",GECKOWEBDRIVER:"/usr/local/share/gecko_driver",LEIN_JAR:"/usr/local/lib/lein/self-installs/leiningen-2.9.8-standalone.jar",npm_config_global_prefix:"/opt/hostedtoolcache/node/18.3.0/x64",HOMEBREW_REPOSITORY:"/home/linuxbrew/.linuxbrew/Homebrew",npm_command:"run-script",SGX_AESM_ADDR:"1",CHROME_BIN:"/usr/bin/google-chrome",SELENIUM_JAR_PATH:"/usr/share/java/selenium-server.jar",ANDROID_NDK_HOME:"/usr/local/lib/android/sdk/ndk-bundle",GITHUB_STEP_SUMMARY:"/home/runner/work/_temp/_runner_file_commands/step_summary_5c4f6f18-1665-4638-b420-bcd02f665810",INIT_CWD:"/home/runner/work/stsoauth2plugin/stsoauth2plugin",EDITOR:"vi",NODE_ENV:"production"}.DEBUG),o}function e(){try{return localStorage}catch{}}i.exports=g9(l);const{formatters:u}=i.exports;u.j=function(o){try{return JSON.stringify(o)}catch(I){return"[UnexpectedJSONParseError]: "+I.message}}})(ei,ei.exports);var BV=ei.exports,kb={},xb={};Object.defineProperty(xb,"__esModule",{value:!0}),xb.GetErrorPayload=void 0;function O9(i,l=null){return{error:i.code,error_description:i.description,timestamp:Date.now(),details:l}}xb.GetErrorPayload=O9;var fb={},Ul={},ZV={exports:{}},wV={},gi={},Ql={},cb={},si={},db={};(function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.regexpCode=i.getEsmExportName=i.getProperty=i.safeStringify=i.stringify=i.strConcat=i.addCodeArg=i.str=i._=i.nil=i._Code=i.Name=i.IDENTIFIER=i._CodeOrName=void 0;class l{}i._CodeOrName=l,i.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class b extends l{constructor(Y){if(super(),!i.IDENTIFIER.test(Y))throw new Error("CodeGen: name must be a valid identifier");this.str=Y}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}i.Name=b;class V extends l{constructor(Y){super(),this._items=typeof Y=="string"?[Y]:Y}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const Y=this._items[0];return Y===""||Y==='""'}get str(){var Y;return(Y=this._str)!==null&&Y!==void 0?Y:this._str=this._items.reduce((J,p)=>`${J}${p}`,"")}get names(){var Y;return(Y=this._names)!==null&&Y!==void 0?Y:this._names=this._items.reduce((J,p)=>(p instanceof b&&(J[p.str]=(J[p.str]||0)+1),J),{})}}i._Code=V,i.nil=new V("");function c(R,...Y){const J=[R[0]];let p=0;for(;p<Y.length;)u(J,Y[p]),J.push(R[++p]);return new V(J)}i._=c;const d=new V("+");function e(R,...Y){const J=[k(R[0])];let p=0;for(;p<Y.length;)J.push(d),u(J,Y[p]),J.push(d,k(R[++p]));return o(J),new V(J)}i.str=e;function u(R,Y){Y instanceof V?R.push(...Y._items):Y instanceof b?R.push(Y):R.push(W(Y))}i.addCodeArg=u;function o(R){let Y=1;for(;Y<R.length-1;){if(R[Y]===d){const J=I(R[Y-1],R[Y+1]);if(J!==void 0){R.splice(Y-1,3,J);continue}R[Y++]="+"}Y++}}function I(R,Y){if(Y==='""')return R;if(R==='""')return Y;if(typeof R=="string")return Y instanceof b||R[R.length-1]!=='"'?void 0:typeof Y!="string"?`${R.slice(0,-1)}${Y}"`:Y[0]==='"'?R.slice(0,-1)+Y.slice(1):void 0;if(typeof Y=="string"&&Y[0]==='"'&&!(R instanceof b))return`"${R}${Y.slice(1)}`}function s(R,Y){return Y.emptyStr()?R:R.emptyStr()?Y:e`${R}${Y}`}i.strConcat=s;function W(R){return typeof R=="number"||typeof R=="boolean"||R===null?R:k(Array.isArray(R)?R.join(","):R)}function y(R){return new V(k(R))}i.stringify=y;function k(R){return JSON.stringify(R).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}i.safeStringify=k;function T(R){return typeof R=="string"&&i.IDENTIFIER.test(R)?new V(`.${R}`):c`[${R}]`}i.getProperty=T;function x(R){if(typeof R=="string"&&i.IDENTIFIER.test(R))return new V(`${R}`);throw new Error(`CodeGen: invalid export name: ${R}, use explicit $id name mapping`)}i.getEsmExportName=x;function v(R){return new V(R.toString())}i.regexpCode=v})(db);var mV={};(function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.ValueScope=i.ValueScopeName=i.Scope=i.varKinds=i.UsedValueState=void 0;const l=db;class b extends Error{constructor(I){super(`CodeGen: "code" for ${I} not defined`),this.value=I.value}}var V;(function(o){o[o.Started=0]="Started",o[o.Completed=1]="Completed"})(V=i.UsedValueState||(i.UsedValueState={})),i.varKinds={const:new l.Name("const"),let:new l.Name("let"),var:new l.Name("var")};class c{constructor({prefixes:I,parent:s}={}){this._names={},this._prefixes=I,this._parent=s}toName(I){return I instanceof l.Name?I:this.name(I)}name(I){return new l.Name(this._newName(I))}_newName(I){const s=this._names[I]||this._nameGroup(I);return`${I}${s.index++}`}_nameGroup(I){var s,W;if(((W=(s=this._parent)===null||s===void 0?void 0:s._prefixes)===null||W===void 0?void 0:W.has(I))||this._prefixes&&!this._prefixes.has(I))throw new Error(`CodeGen: prefix "${I}" is not allowed in this scope`);return this._names[I]={prefix:I,index:0}}}i.Scope=c;class d extends l.Name{constructor(I,s){super(s),this.prefix=I}setValue(I,{property:s,itemIndex:W}){this.value=I,this.scopePath=(0,l._)`.${new l.Name(s)}[${W}]`}}i.ValueScopeName=d;const e=(0,l._)`\n`;class u extends c{constructor(I){super(I),this._values={},this._scope=I.scope,this.opts=ai(A({},I),{_n:I.lines?e:l.nil})}get(){return this._scope}name(I){return new d(I,this._newName(I))}value(I,s){var W;if(s.ref===void 0)throw new Error("CodeGen: ref must be passed in value");const y=this.toName(I),{prefix:k}=y,T=(W=s.key)!==null&&W!==void 0?W:s.ref;let x=this._values[k];if(x){const Y=x.get(T);if(Y)return Y}else x=this._values[k]=new Map;x.set(T,y);const v=this._scope[k]||(this._scope[k]=[]),R=v.length;return v[R]=s.ref,y.setValue(s,{property:k,itemIndex:R}),y}getValue(I,s){const W=this._values[I];if(!!W)return W.get(s)}scopeRefs(I,s=this._values){return this._reduceValues(s,W=>{if(W.scopePath===void 0)throw new Error(`CodeGen: name "${W}" has no value`);return(0,l._)`${I}${W.scopePath}`})}scopeCode(I=this._values,s,W){return this._reduceValues(I,y=>{if(y.value===void 0)throw new Error(`CodeGen: name "${y}" has no value`);return y.value.code},s,W)}_reduceValues(I,s,W={},y){let k=l.nil;for(const T in I){const x=I[T];if(!x)continue;const v=W[T]=W[T]||new Map;x.forEach(R=>{if(v.has(R))return;v.set(R,V.Started);let Y=s(R);if(Y){const J=this.opts.es5?i.varKinds.var:i.varKinds.const;k=(0,l._)`${k}${J} ${R} = ${Y};${this.opts._n}`}else if(Y=y==null?void 0:y(R))k=(0,l._)`${k}${Y}${this.opts._n}`;else throw new b(R);v.set(R,V.Completed)})}return k}}i.ValueScope=u})(mV),function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.or=i.and=i.not=i.CodeGen=i.operators=i.varKinds=i.ValueScopeName=i.ValueScope=i.Scope=i.Name=i.regexpCode=i.stringify=i.getProperty=i.nil=i.strConcat=i.str=i._=void 0;const l=db,b=mV;var V=db;Object.defineProperty(i,"_",{enumerable:!0,get:function(){return V._}}),Object.defineProperty(i,"str",{enumerable:!0,get:function(){return V.str}}),Object.defineProperty(i,"strConcat",{enumerable:!0,get:function(){return V.strConcat}}),Object.defineProperty(i,"nil",{enumerable:!0,get:function(){return V.nil}}),Object.defineProperty(i,"getProperty",{enumerable:!0,get:function(){return V.getProperty}}),Object.defineProperty(i,"stringify",{enumerable:!0,get:function(){return V.stringify}}),Object.defineProperty(i,"regexpCode",{enumerable:!0,get:function(){return V.regexpCode}}),Object.defineProperty(i,"Name",{enumerable:!0,get:function(){return V.Name}});var c=mV;Object.defineProperty(i,"Scope",{enumerable:!0,get:function(){return c.Scope}}),Object.defineProperty(i,"ValueScope",{enumerable:!0,get:function(){return c.ValueScope}}),Object.defineProperty(i,"ValueScopeName",{enumerable:!0,get:function(){return c.ValueScopeName}}),Object.defineProperty(i,"varKinds",{enumerable:!0,get:function(){return c.varKinds}}),i.operators={GT:new l._Code(">"),GTE:new l._Code(">="),LT:new l._Code("<"),LTE:new l._Code("<="),EQ:new l._Code("==="),NEQ:new l._Code("!=="),NOT:new l._Code("!"),OR:new l._Code("||"),AND:new l._Code("&&"),ADD:new l._Code("+")};class d{optimizeNodes(){return this}optimizeNames(Z,t){return this}}class e extends d{constructor(Z,t,N){super(),this.varKind=Z,this.name=t,this.rhs=N}render({es5:Z,_n:t}){const N=Z?b.varKinds.var:this.varKind,E=this.rhs===void 0?"":` = ${this.rhs}`;return`${N} ${this.name}${E};`+t}optimizeNames(Z,t){if(!!Z[this.name.str])return this.rhs&&(this.rhs=q(this.rhs,Z,t)),this}get names(){return this.rhs instanceof l._CodeOrName?this.rhs.names:{}}}class u extends d{constructor(Z,t,N){super(),this.lhs=Z,this.rhs=t,this.sideEffects=N}render({_n:Z}){return`${this.lhs} = ${this.rhs};`+Z}optimizeNames(Z,t){if(!(this.lhs instanceof l.Name&&!Z[this.lhs.str]&&!this.sideEffects))return this.rhs=q(this.rhs,Z,t),this}get names(){const Z=this.lhs instanceof l.Name?{}:A({},this.lhs.names);return mi(Z,this.rhs)}}class o extends u{constructor(Z,t,N,E){super(Z,N,E),this.op=t}render({_n:Z}){return`${this.lhs} ${this.op}= ${this.rhs};`+Z}}class I extends d{constructor(Z){super(),this.label=Z,this.names={}}render({_n:Z}){return`${this.label}:`+Z}}class s extends d{constructor(Z){super(),this.label=Z,this.names={}}render({_n:Z}){return`break${this.label?` ${this.label}`:""};`+Z}}class W extends d{constructor(Z){super(),this.error=Z}render({_n:Z}){return`throw ${this.error};`+Z}get names(){return this.error.names}}class y extends d{constructor(Z){super(),this.code=Z}render({_n:Z}){return`${this.code};`+Z}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(Z,t){return this.code=q(this.code,Z,t),this}get names(){return this.code instanceof l._CodeOrName?this.code.names:{}}}class k extends d{constructor(Z=[]){super(),this.nodes=Z}render(Z){return this.nodes.reduce((t,N)=>t+N.render(Z),"")}optimizeNodes(){const{nodes:Z}=this;let t=Z.length;for(;t--;){const N=Z[t].optimizeNodes();Array.isArray(N)?Z.splice(t,1,...N):N?Z[t]=N:Z.splice(t,1)}return Z.length>0?this:void 0}optimizeNames(Z,t){const{nodes:N}=this;let E=N.length;for(;E--;){const z=N[E];z.optimizeNames(Z,t)||(Ri(Z,z.names),N.splice(E,1))}return N.length>0?this:void 0}get names(){return this.nodes.reduce((Z,t)=>$(Z,t.names),{})}}class T extends k{render(Z){return"{"+Z._n+super.render(Z)+"}"+Z._n}}class x extends k{}class v extends T{}v.kind="else";class R extends T{constructor(Z,t){super(t),this.condition=Z}render(Z){let t=`if(${this.condition})`+super.render(Z);return this.else&&(t+="else "+this.else.render(Z)),t}optimizeNodes(){super.optimizeNodes();const Z=this.condition;if(Z===!0)return this.nodes;let t=this.else;if(t){const N=t.optimizeNodes();t=this.else=Array.isArray(N)?new v(N):N}if(t)return Z===!1?t instanceof R?t:t.nodes:this.nodes.length?this:new R(Gi(Z),t instanceof R?[t]:t.nodes);if(!(Z===!1||!this.nodes.length))return this}optimizeNames(Z,t){var N;if(this.else=(N=this.else)===null||N===void 0?void 0:N.optimizeNames(Z,t),!!(super.optimizeNames(Z,t)||this.else))return this.condition=q(this.condition,Z,t),this}get names(){const Z=super.names;return mi(Z,this.condition),this.else&&$(Z,this.else.names),Z}}R.kind="if";class Y extends T{}Y.kind="for";class J extends Y{constructor(Z){super(),this.iteration=Z}render(Z){return`for(${this.iteration})`+super.render(Z)}optimizeNames(Z,t){if(!!super.optimizeNames(Z,t))return this.iteration=q(this.iteration,Z,t),this}get names(){return $(super.names,this.iteration.names)}}class p extends Y{constructor(Z,t,N,E){super(),this.varKind=Z,this.name=t,this.from=N,this.to=E}render(Z){const t=Z.es5?b.varKinds.var:this.varKind,{name:N,from:E,to:z}=this;return`for(${t} ${N}=${E}; ${N}<${z}; ${N}++)`+super.render(Z)}get names(){const Z=mi(super.names,this.from);return mi(Z,this.to)}}class M extends Y{constructor(Z,t,N,E){super(),this.loop=Z,this.varKind=t,this.name=N,this.iterable=E}render(Z){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(Z)}optimizeNames(Z,t){if(!!super.optimizeNames(Z,t))return this.iterable=q(this.iterable,Z,t),this}get names(){return $(super.names,this.iterable.names)}}class X extends T{constructor(Z,t,N){super(),this.name=Z,this.args=t,this.async=N}render(Z){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(Z)}}X.kind="func";class S extends k{render(Z){return"return "+super.render(Z)}}S.kind="return";class r extends T{render(Z){let t="try"+super.render(Z);return this.catch&&(t+=this.catch.render(Z)),this.finally&&(t+=this.finally.render(Z)),t}optimizeNodes(){var Z,t;return super.optimizeNodes(),(Z=this.catch)===null||Z===void 0||Z.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(Z,t){var N,E;return super.optimizeNames(Z,t),(N=this.catch)===null||N===void 0||N.optimizeNames(Z,t),(E=this.finally)===null||E===void 0||E.optimizeNames(Z,t),this}get names(){const Z=super.names;return this.catch&&$(Z,this.catch.names),this.finally&&$(Z,this.finally.names),Z}}class g extends T{constructor(Z){super(),this.error=Z}render(Z){return`catch(${this.error})`+super.render(Z)}}g.kind="catch";class D extends T{render(Z){return"finally"+super.render(Z)}}D.kind="finally";class Ii{constructor(Z,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts=ai(A({},t),{_n:t.lines?`
2
+ `:""}),this._extScope=Z,this._scope=new b.Scope({parent:Z}),this._nodes=[new x]}toString(){return this._root.render(this.opts)}name(Z){return this._scope.name(Z)}scopeName(Z){return this._extScope.name(Z)}scopeValue(Z,t){const N=this._extScope.value(Z,t);return(this._values[N.prefix]||(this._values[N.prefix]=new Set)).add(N),N}getScopeValue(Z,t){return this._extScope.getValue(Z,t)}scopeRefs(Z){return this._extScope.scopeRefs(Z,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(Z,t,N,E){const z=this._scope.toName(t);return N!==void 0&&E&&(this._constants[z.str]=N),this._leafNode(new e(Z,z,N)),z}const(Z,t,N){return this._def(b.varKinds.const,Z,t,N)}let(Z,t,N){return this._def(b.varKinds.let,Z,t,N)}var(Z,t,N){return this._def(b.varKinds.var,Z,t,N)}assign(Z,t,N){return this._leafNode(new u(Z,t,N))}add(Z,t){return this._leafNode(new o(Z,i.operators.ADD,t))}code(Z){return typeof Z=="function"?Z():Z!==l.nil&&this._leafNode(new y(Z)),this}object(...Z){const t=["{"];for(const[N,E]of Z)t.length>1&&t.push(","),t.push(N),(N!==E||this.opts.es5)&&(t.push(":"),(0,l.addCodeArg)(t,E));return t.push("}"),new l._Code(t)}if(Z,t,N){if(this._blockNode(new R(Z)),t&&N)this.code(t).else().code(N).endIf();else if(t)this.code(t).endIf();else if(N)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(Z){return this._elseNode(new R(Z))}else(){return this._elseNode(new v)}endIf(){return this._endBlockNode(R,v)}_for(Z,t){return this._blockNode(Z),t&&this.code(t).endFor(),this}for(Z,t){return this._for(new J(Z),t)}forRange(Z,t,N,E,z=this.opts.es5?b.varKinds.var:b.varKinds.let){const ii=this._scope.toName(Z);return this._for(new p(z,ii,t,N),()=>E(ii))}forOf(Z,t,N,E=b.varKinds.const){const z=this._scope.toName(Z);if(this.opts.es5){const ii=t instanceof l.Name?t:this.var("_arr",t);return this.forRange("_i",0,(0,l._)`${ii}.length`,ci=>{this.var(z,(0,l._)`${ii}[${ci}]`),N(z)})}return this._for(new M("of",E,z,t),()=>N(z))}forIn(Z,t,N,E=this.opts.es5?b.varKinds.var:b.varKinds.const){if(this.opts.ownProperties)return this.forOf(Z,(0,l._)`Object.keys(${t})`,N);const z=this._scope.toName(Z);return this._for(new M("in",E,z,t),()=>N(z))}endFor(){return this._endBlockNode(Y)}label(Z){return this._leafNode(new I(Z))}break(Z){return this._leafNode(new s(Z))}return(Z){const t=new S;if(this._blockNode(t),this.code(Z),t.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(S)}try(Z,t,N){if(!t&&!N)throw new Error('CodeGen: "try" without "catch" and "finally"');const E=new r;if(this._blockNode(E),this.code(Z),t){const z=this.name("e");this._currNode=E.catch=new g(z),t(z)}return N&&(this._currNode=E.finally=new D,this.code(N)),this._endBlockNode(g,D)}throw(Z){return this._leafNode(new W(Z))}block(Z,t){return this._blockStarts.push(this._nodes.length),Z&&this.code(Z).endBlock(t),this}endBlock(Z){const t=this._blockStarts.pop();if(t===void 0)throw new Error("CodeGen: not in self-balancing block");const N=this._nodes.length-t;if(N<0||Z!==void 0&&N!==Z)throw new Error(`CodeGen: wrong number of nodes: ${N} vs ${Z} expected`);return this._nodes.length=t,this}func(Z,t=l.nil,N,E){return this._blockNode(new X(Z,t,N)),E&&this.code(E).endFunc(),this}endFunc(){return this._endBlockNode(X)}optimize(Z=1){for(;Z-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(Z){return this._currNode.nodes.push(Z),this}_blockNode(Z){this._currNode.nodes.push(Z),this._nodes.push(Z)}_endBlockNode(Z,t){const N=this._currNode;if(N instanceof Z||t&&N instanceof t)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${t?`${Z.kind}/${t.kind}`:Z.kind}"`)}_elseNode(Z){const t=this._currNode;if(!(t instanceof R))throw new Error('CodeGen: "else" without "if"');return this._currNode=t.else=Z,this}get _root(){return this._nodes[0]}get _currNode(){const Z=this._nodes;return Z[Z.length-1]}set _currNode(Z){const t=this._nodes;t[t.length-1]=Z}}i.CodeGen=Ii;function $(G,Z){for(const t in Z)G[t]=(G[t]||0)+(Z[t]||0);return G}function mi(G,Z){return Z instanceof l._CodeOrName?$(G,Z.names):G}function q(G,Z,t){if(G instanceof l.Name)return N(G);if(!E(G))return G;return new l._Code(G._items.reduce((z,ii)=>(ii instanceof l.Name&&(ii=N(ii)),ii instanceof l._Code?z.push(...ii._items):z.push(ii),z),[]));function N(z){const ii=t[z.str];return ii===void 0||Z[z.str]!==1?z:(delete Z[z.str],ii)}function E(z){return z instanceof l._Code&&z._items.some(ii=>ii instanceof l.Name&&Z[ii.str]===1&&t[ii.str]!==void 0)}}function Ri(G,Z){for(const t in Z)G[t]=(G[t]||0)-(Z[t]||0)}function Gi(G){return typeof G=="boolean"||typeof G=="number"||G===null?!G:(0,l._)`!${F(G)}`}i.not=Gi;const Yi=L(i.operators.AND);function zi(...G){return G.reduce(Yi)}i.and=zi;const Dl=L(i.operators.OR);function f(...G){return G.reduce(Dl)}i.or=f;function L(G){return(Z,t)=>Z===l.nil?t:t===l.nil?Z:(0,l._)`${F(Z)} ${G} ${F(t)}`}function F(G){return G instanceof l.Name?G:(0,l._)`(${G})`}}(si);var Si={};(function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.checkStrictMode=i.getErrorPath=i.Type=i.useFunc=i.setEvaluated=i.evaluatedPropsToName=i.mergeEvaluated=i.eachItem=i.unescapeJsonPointer=i.escapeJsonPointer=i.escapeFragment=i.unescapeFragment=i.schemaRefOrVal=i.schemaHasRulesButRef=i.schemaHasRules=i.checkUnknownRules=i.alwaysValidSchema=i.toHash=void 0;const l=si,b=db;function V(X){const S={};for(const r of X)S[r]=!0;return S}i.toHash=V;function c(X,S){return typeof S=="boolean"?S:Object.keys(S).length===0?!0:(d(X,S),!e(S,X.self.RULES.all))}i.alwaysValidSchema=c;function d(X,S=X.schema){const{opts:r,self:g}=X;if(!r.strictSchema||typeof S=="boolean")return;const D=g.RULES.keywords;for(const Ii in S)D[Ii]||M(X,`unknown keyword: "${Ii}"`)}i.checkUnknownRules=d;function e(X,S){if(typeof X=="boolean")return!X;for(const r in X)if(S[r])return!0;return!1}i.schemaHasRules=e;function u(X,S){if(typeof X=="boolean")return!X;for(const r in X)if(r!=="$ref"&&S.all[r])return!0;return!1}i.schemaHasRulesButRef=u;function o({topSchemaRef:X,schemaPath:S},r,g,D){if(!D){if(typeof r=="number"||typeof r=="boolean")return r;if(typeof r=="string")return(0,l._)`${r}`}return(0,l._)`${X}${S}${(0,l.getProperty)(g)}`}i.schemaRefOrVal=o;function I(X){return y(decodeURIComponent(X))}i.unescapeFragment=I;function s(X){return encodeURIComponent(W(X))}i.escapeFragment=s;function W(X){return typeof X=="number"?`${X}`:X.replace(/~/g,"~0").replace(/\//g,"~1")}i.escapeJsonPointer=W;function y(X){return X.replace(/~1/g,"/").replace(/~0/g,"~")}i.unescapeJsonPointer=y;function k(X,S){if(Array.isArray(X))for(const r of X)S(r);else S(X)}i.eachItem=k;function T({mergeNames:X,mergeToName:S,mergeValues:r,resultToName:g}){return(D,Ii,$,mi)=>{const q=$===void 0?Ii:$ instanceof l.Name?(Ii instanceof l.Name?X(D,Ii,$):S(D,Ii,$),$):Ii instanceof l.Name?(S(D,$,Ii),Ii):r(Ii,$);return mi===l.Name&&!(q instanceof l.Name)?g(D,q):q}}i.mergeEvaluated={props:T({mergeNames:(X,S,r)=>X.if((0,l._)`${r} !== true && ${S} !== undefined`,()=>{X.if((0,l._)`${S} === true`,()=>X.assign(r,!0),()=>X.assign(r,(0,l._)`${r} || {}`).code((0,l._)`Object.assign(${r}, ${S})`))}),mergeToName:(X,S,r)=>X.if((0,l._)`${r} !== true`,()=>{S===!0?X.assign(r,!0):(X.assign(r,(0,l._)`${r} || {}`),v(X,r,S))}),mergeValues:(X,S)=>X===!0?!0:A(A({},X),S),resultToName:x}),items:T({mergeNames:(X,S,r)=>X.if((0,l._)`${r} !== true && ${S} !== undefined`,()=>X.assign(r,(0,l._)`${S} === true ? true : ${r} > ${S} ? ${r} : ${S}`)),mergeToName:(X,S,r)=>X.if((0,l._)`${r} !== true`,()=>X.assign(r,S===!0?!0:(0,l._)`${r} > ${S} ? ${r} : ${S}`)),mergeValues:(X,S)=>X===!0?!0:Math.max(X,S),resultToName:(X,S)=>X.var("items",S)})};function x(X,S){if(S===!0)return X.var("props",!0);const r=X.var("props",(0,l._)`{}`);return S!==void 0&&v(X,r,S),r}i.evaluatedPropsToName=x;function v(X,S,r){Object.keys(r).forEach(g=>X.assign((0,l._)`${S}${(0,l.getProperty)(g)}`,!0))}i.setEvaluated=v;const R={};function Y(X,S){return X.scopeValue("func",{ref:S,code:R[S.code]||(R[S.code]=new b._Code(S.code))})}i.useFunc=Y;var J;(function(X){X[X.Num=0]="Num",X[X.Str=1]="Str"})(J=i.Type||(i.Type={}));function p(X,S,r){if(X instanceof l.Name){const g=S===J.Num;return r?g?(0,l._)`"[" + ${X} + "]"`:(0,l._)`"['" + ${X} + "']"`:g?(0,l._)`"/" + ${X}`:(0,l._)`"/" + ${X}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return r?(0,l.getProperty)(X).toString():"/"+W(X)}i.getErrorPath=p;function M(X,S,r=X.opts.strictSchema){if(!!r){if(S=`strict mode: ${S}`,r===!0)throw new Error(S);X.self.logger.warn(S)}}i.checkStrictMode=M})(Si);var xi={};Object.defineProperty(xi,"__esModule",{value:!0});const Ni=si,B9={data:new Ni.Name("data"),valCxt:new Ni.Name("valCxt"),instancePath:new Ni.Name("instancePath"),parentData:new Ni.Name("parentData"),parentDataProperty:new Ni.Name("parentDataProperty"),rootData:new Ni.Name("rootData"),dynamicAnchors:new Ni.Name("dynamicAnchors"),vErrors:new Ni.Name("vErrors"),errors:new Ni.Name("errors"),this:new Ni.Name("this"),self:new Ni.Name("self"),scope:new Ni.Name("scope"),json:new Ni.Name("json"),jsonPos:new Ni.Name("jsonPos"),jsonLen:new Ni.Name("jsonLen"),jsonPart:new Ni.Name("jsonPart")};xi.default=B9,function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.extendErrors=i.resetErrorsCount=i.reportExtraError=i.reportError=i.keyword$DataError=i.keywordError=void 0;const l=si,b=Si,V=xi;i.keywordError={message:({keyword:v})=>(0,l.str)`must pass "${v}" keyword validation`},i.keyword$DataError={message:({keyword:v,schemaType:R})=>R?(0,l.str)`"${v}" keyword must be ${R} ($data)`:(0,l.str)`"${v}" keyword is invalid ($data)`};function c(v,R=i.keywordError,Y,J){const{it:p}=v,{gen:M,compositeRule:X,allErrors:S}=p,r=W(v,R,Y);(J!=null?J:X||S)?o(M,r):I(p,(0,l._)`[${r}]`)}i.reportError=c;function d(v,R=i.keywordError,Y){const{it:J}=v,{gen:p,compositeRule:M,allErrors:X}=J,S=W(v,R,Y);o(p,S),M||X||I(J,V.default.vErrors)}i.reportExtraError=d;function e(v,R){v.assign(V.default.errors,R),v.if((0,l._)`${V.default.vErrors} !== null`,()=>v.if(R,()=>v.assign((0,l._)`${V.default.vErrors}.length`,R),()=>v.assign(V.default.vErrors,null)))}i.resetErrorsCount=e;function u({gen:v,keyword:R,schemaValue:Y,data:J,errsCount:p,it:M}){if(p===void 0)throw new Error("ajv implementation error");const X=v.name("err");v.forRange("i",p,V.default.errors,S=>{v.const(X,(0,l._)`${V.default.vErrors}[${S}]`),v.if((0,l._)`${X}.instancePath === undefined`,()=>v.assign((0,l._)`${X}.instancePath`,(0,l.strConcat)(V.default.instancePath,M.errorPath))),v.assign((0,l._)`${X}.schemaPath`,(0,l.str)`${M.errSchemaPath}/${R}`),M.opts.verbose&&(v.assign((0,l._)`${X}.schema`,Y),v.assign((0,l._)`${X}.data`,J))})}i.extendErrors=u;function o(v,R){const Y=v.const("err",R);v.if((0,l._)`${V.default.vErrors} === null`,()=>v.assign(V.default.vErrors,(0,l._)`[${Y}]`),(0,l._)`${V.default.vErrors}.push(${Y})`),v.code((0,l._)`${V.default.errors}++`)}function I(v,R){const{gen:Y,validateName:J,schemaEnv:p}=v;p.$async?Y.throw((0,l._)`new ${v.ValidationError}(${R})`):(Y.assign((0,l._)`${J}.errors`,R),Y.return(!1))}const s={keyword:new l.Name("keyword"),schemaPath:new l.Name("schemaPath"),params:new l.Name("params"),propertyName:new l.Name("propertyName"),message:new l.Name("message"),schema:new l.Name("schema"),parentSchema:new l.Name("parentSchema")};function W(v,R,Y){const{createErrors:J}=v.it;return J===!1?(0,l._)`{}`:y(v,R,Y)}function y(v,R,Y={}){const{gen:J,it:p}=v,M=[k(p,Y),T(v,Y)];return x(v,R,M),J.object(...M)}function k({errorPath:v},{instancePath:R}){const Y=R?(0,l.str)`${v}${(0,b.getErrorPath)(R,b.Type.Str)}`:v;return[V.default.instancePath,(0,l.strConcat)(V.default.instancePath,Y)]}function T({keyword:v,it:{errSchemaPath:R}},{schemaPath:Y,parentSchema:J}){let p=J?R:(0,l.str)`${R}/${v}`;return Y&&(p=(0,l.str)`${p}${(0,b.getErrorPath)(Y,b.Type.Str)}`),[s.schemaPath,p]}function x(v,{params:R,message:Y},J){const{keyword:p,data:M,schemaValue:X,it:S}=v,{opts:r,propertyName:g,topSchemaRef:D,schemaPath:Ii}=S;J.push([s.keyword,p],[s.params,typeof R=="function"?R(v):R||(0,l._)`{}`]),r.messages&&J.push([s.message,typeof Y=="function"?Y(v):Y]),r.verbose&&J.push([s.schema,X],[s.parentSchema,(0,l._)`${D}${Ii}`],[V.default.data,M]),g&&J.push([s.propertyName,g])}}(cb),Object.defineProperty(Ql,"__esModule",{value:!0}),Ql.boolOrEmptySchema=Ql.topBoolOrEmptySchema=void 0;const w9=cb,K9=si,P9=xi,D9={message:"boolean schema is false"};function A9(i){const{gen:l,schema:b,validateName:V}=i;b===!1?KV(i,!1):typeof b=="object"&&b.$async===!0?l.return(P9.default.data):(l.assign((0,K9._)`${V}.errors`,null),l.return(!0))}Ql.topBoolOrEmptySchema=A9;function _9(i,l){const{gen:b,schema:V}=i;V===!1?(b.var(l,!1),KV(i)):b.var(l,!0)}Ql.boolOrEmptySchema=_9;function KV(i,l){const{gen:b,data:V}=i,c={gen:b,keyword:"false schema",data:V,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:i};(0,w9.reportError)(c,D9,void 0,l)}var Eb={},yl={};Object.defineProperty(yl,"__esModule",{value:!0}),yl.getRules=yl.isJSONType=void 0;const $9=["string","number","integer","boolean","null","object","array"],q9=new Set($9);function id(i){return typeof i=="string"&&q9.has(i)}yl.isJSONType=id;function ld(){const i={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:ai(A({},i),{integer:!0,boolean:!0,null:!0}),rules:[{rules:[]},i.number,i.string,i.array,i.object],post:{rules:[]},all:{},keywords:{}}}yl.getRules=ld;var il={};Object.defineProperty(il,"__esModule",{value:!0}),il.shouldUseRule=il.shouldUseGroup=il.schemaHasRulesForType=void 0;function bd({schema:i,self:l},b){const V=l.RULES.types[b];return V&&V!==!0&&PV(i,V)}il.schemaHasRulesForType=bd;function PV(i,l){return l.rules.some(b=>DV(i,b))}il.shouldUseGroup=PV;function DV(i,l){var b;return i[l.keyword]!==void 0||((b=l.definition.implements)===null||b===void 0?void 0:b.some(V=>i[V]!==void 0))}il.shouldUseRule=DV,function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.reportTypeError=i.checkDataTypes=i.checkDataType=i.coerceAndCheckDataType=i.getJSONTypes=i.getSchemaTypes=i.DataType=void 0;const l=yl,b=il,V=cb,c=si,d=Si;var e;(function(J){J[J.Correct=0]="Correct",J[J.Wrong=1]="Wrong"})(e=i.DataType||(i.DataType={}));function u(J){const p=o(J.type);if(p.includes("null")){if(J.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!p.length&&J.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');J.nullable===!0&&p.push("null")}return p}i.getSchemaTypes=u;function o(J){const p=Array.isArray(J)?J:J?[J]:[];if(p.every(l.isJSONType))return p;throw new Error("type must be JSONType or JSONType[]: "+p.join(","))}i.getJSONTypes=o;function I(J,p){const{gen:M,data:X,opts:S}=J,r=W(p,S.coerceTypes),g=p.length>0&&!(r.length===0&&p.length===1&&(0,b.schemaHasRulesForType)(J,p[0]));if(g){const D=x(p,X,S.strictNumbers,e.Wrong);M.if(D,()=>{r.length?y(J,p,r):R(J)})}return g}i.coerceAndCheckDataType=I;const s=new Set(["string","number","integer","boolean","null"]);function W(J,p){return p?J.filter(M=>s.has(M)||p==="array"&&M==="array"):[]}function y(J,p,M){const{gen:X,data:S,opts:r}=J,g=X.let("dataType",(0,c._)`typeof ${S}`),D=X.let("coerced",(0,c._)`undefined`);r.coerceTypes==="array"&&X.if((0,c._)`${g} == 'object' && Array.isArray(${S}) && ${S}.length == 1`,()=>X.assign(S,(0,c._)`${S}[0]`).assign(g,(0,c._)`typeof ${S}`).if(x(p,S,r.strictNumbers),()=>X.assign(D,S))),X.if((0,c._)`${D} !== undefined`);for(const $ of M)(s.has($)||$==="array"&&r.coerceTypes==="array")&&Ii($);X.else(),R(J),X.endIf(),X.if((0,c._)`${D} !== undefined`,()=>{X.assign(S,D),k(J,D)});function Ii($){switch($){case"string":X.elseIf((0,c._)`${g} == "number" || ${g} == "boolean"`).assign(D,(0,c._)`"" + ${S}`).elseIf((0,c._)`${S} === null`).assign(D,(0,c._)`""`);return;case"number":X.elseIf((0,c._)`${g} == "boolean" || ${S} === null
3
+ || (${g} == "string" && ${S} && ${S} == +${S})`).assign(D,(0,c._)`+${S}`);return;case"integer":X.elseIf((0,c._)`${g} === "boolean" || ${S} === null
4
+ || (${g} === "string" && ${S} && ${S} == +${S} && !(${S} % 1))`).assign(D,(0,c._)`+${S}`);return;case"boolean":X.elseIf((0,c._)`${S} === "false" || ${S} === 0 || ${S} === null`).assign(D,!1).elseIf((0,c._)`${S} === "true" || ${S} === 1`).assign(D,!0);return;case"null":X.elseIf((0,c._)`${S} === "" || ${S} === 0 || ${S} === false`),X.assign(D,null);return;case"array":X.elseIf((0,c._)`${g} === "string" || ${g} === "number"
5
+ || ${g} === "boolean" || ${S} === null`).assign(D,(0,c._)`[${S}]`)}}}function k({gen:J,parentData:p,parentDataProperty:M},X){J.if((0,c._)`${p} !== undefined`,()=>J.assign((0,c._)`${p}[${M}]`,X))}function T(J,p,M,X=e.Correct){const S=X===e.Correct?c.operators.EQ:c.operators.NEQ;let r;switch(J){case"null":return(0,c._)`${p} ${S} null`;case"array":r=(0,c._)`Array.isArray(${p})`;break;case"object":r=(0,c._)`${p} && typeof ${p} == "object" && !Array.isArray(${p})`;break;case"integer":r=g((0,c._)`!(${p} % 1) && !isNaN(${p})`);break;case"number":r=g();break;default:return(0,c._)`typeof ${p} ${S} ${J}`}return X===e.Correct?r:(0,c.not)(r);function g(D=c.nil){return(0,c.and)((0,c._)`typeof ${p} == "number"`,D,M?(0,c._)`isFinite(${p})`:c.nil)}}i.checkDataType=T;function x(J,p,M,X){if(J.length===1)return T(J[0],p,M,X);let S;const r=(0,d.toHash)(J);if(r.array&&r.object){const g=(0,c._)`typeof ${p} != "object"`;S=r.null?g:(0,c._)`!${p} || ${g}`,delete r.null,delete r.array,delete r.object}else S=c.nil;r.number&&delete r.integer;for(const g in r)S=(0,c.and)(S,T(g,p,M,X));return S}i.checkDataTypes=x;const v={message:({schema:J})=>`must be ${J}`,params:({schema:J,schemaValue:p})=>typeof J=="string"?(0,c._)`{type: ${J}}`:(0,c._)`{type: ${p}}`};function R(J){const p=Y(J);(0,V.reportError)(p,v)}i.reportTypeError=R;function Y(J){const{gen:p,data:M,schema:X}=J,S=(0,d.schemaRefOrVal)(J,X,"type");return{gen:p,keyword:"type",data:M,schema:X.type,schemaCode:S,schemaValue:S,parentSchema:X,params:{},it:J}}}(Eb);var zb={};Object.defineProperty(zb,"__esModule",{value:!0}),zb.assignDefaults=void 0;const Ml=si,Vd=Si;function cd(i,l){const{properties:b,items:V}=i.schema;if(l==="object"&&b)for(const c in b)AV(i,c,b[c].default);else l==="array"&&Array.isArray(V)&&V.forEach((c,d)=>AV(i,d,c.default))}zb.assignDefaults=cd;function AV(i,l,b){const{gen:V,compositeRule:c,data:d,opts:e}=i;if(b===void 0)return;const u=(0,Ml._)`${d}${(0,Ml.getProperty)(l)}`;if(c){(0,Vd.checkStrictMode)(i,`default is ignored for: ${u}`);return}let o=(0,Ml._)`${u} === undefined`;e.useDefaults==="empty"&&(o=(0,Ml._)`${o} || ${u} === null || ${u} === ""`),V.if(o,(0,Ml._)`${u} = ${(0,Ml.stringify)(b)}`)}var Oi={},di={};Object.defineProperty(di,"__esModule",{value:!0}),di.validateUnion=di.validateArray=di.usePattern=di.callValidateCode=di.schemaProperties=di.allSchemaProperties=di.noPropertyInData=di.propertyInData=di.isOwnProperty=di.hasPropFunc=di.reportMissingProp=di.checkMissingProp=di.checkReportMissingProp=void 0;const ni=si,eV=Si,al=xi,dd=Si;function Zd(i,l){const{gen:b,data:V,it:c}=i;b.if(aV(b,V,l,c.opts.ownProperties),()=>{i.setParams({missingProperty:(0,ni._)`${l}`},!0),i.error()})}di.checkReportMissingProp=Zd;function md({gen:i,data:l,it:{opts:b}},V,c){return(0,ni.or)(...V.map(d=>(0,ni.and)(aV(i,l,d,b.ownProperties),(0,ni._)`${c} = ${d}`)))}di.checkMissingProp=md;function ed(i,l){i.setParams({missingProperty:l},!0),i.error()}di.reportMissingProp=ed;function _V(i){return i.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,ni._)`Object.prototype.hasOwnProperty`})}di.hasPropFunc=_V;function sV(i,l,b){return(0,ni._)`${_V(i)}.call(${l}, ${b})`}di.isOwnProperty=sV;function sd(i,l,b,V){const c=(0,ni._)`${l}${(0,ni.getProperty)(b)} !== undefined`;return V?(0,ni._)`${c} && ${sV(i,l,b)}`:c}di.propertyInData=sd;function aV(i,l,b,V){const c=(0,ni._)`${l}${(0,ni.getProperty)(b)} === undefined`;return V?(0,ni.or)(c,(0,ni.not)(sV(i,l,b))):c}di.noPropertyInData=aV;function $V(i){return i?Object.keys(i).filter(l=>l!=="__proto__"):[]}di.allSchemaProperties=$V;function ad(i,l){return $V(l).filter(b=>!(0,eV.alwaysValidSchema)(i,l[b]))}di.schemaProperties=ad;function td({schemaCode:i,data:l,it:{gen:b,topSchemaRef:V,schemaPath:c,errorPath:d},it:e},u,o,I){const s=I?(0,ni._)`${i}, ${l}, ${V}${c}`:l,W=[[al.default.instancePath,(0,ni.strConcat)(al.default.instancePath,d)],[al.default.parentData,e.parentData],[al.default.parentDataProperty,e.parentDataProperty],[al.default.rootData,al.default.rootData]];e.opts.dynamicRef&&W.push([al.default.dynamicAnchors,al.default.dynamicAnchors]);const y=(0,ni._)`${s}, ${b.object(...W)}`;return o!==ni.nil?(0,ni._)`${u}.call(${o}, ${y})`:(0,ni._)`${u}(${y})`}di.callValidateCode=td;const nd=(0,ni._)`new RegExp`;function ud({gen:i,it:{opts:l}},b){const V=l.unicodeRegExp?"u":"",{regExp:c}=l.code,d=c(b,V);return i.scopeValue("pattern",{key:d.toString(),ref:d,code:(0,ni._)`${c.code==="new RegExp"?nd:(0,dd.useFunc)(i,c)}(${b}, ${V})`})}di.usePattern=ud;function Id(i){const{gen:l,data:b,keyword:V,it:c}=i,d=l.name("valid");if(c.allErrors){const u=l.let("valid",!0);return e(()=>l.assign(u,!1)),u}return l.var(d,!0),e(()=>l.break()),d;function e(u){const o=l.const("len",(0,ni._)`${b}.length`);l.forRange("i",0,o,I=>{i.subschema({keyword:V,dataProp:I,dataPropType:eV.Type.Num},d),l.if((0,ni.not)(d),u)})}}di.validateArray=Id;function Wd(i){const{gen:l,schema:b,keyword:V,it:c}=i;if(!Array.isArray(b))throw new Error("ajv implementation error");if(b.some(o=>(0,eV.alwaysValidSchema)(c,o))&&!c.opts.unevaluated)return;const e=l.let("valid",!1),u=l.name("_valid");l.block(()=>b.forEach((o,I)=>{const s=i.subschema({keyword:V,schemaProp:I,compositeRule:!0},u);l.assign(e,(0,ni._)`${e} || ${u}`),i.mergeValidEvaluated(s,u)||l.if((0,ni.not)(e))})),i.result(e,()=>i.reset(),()=>i.error(!0))}di.validateUnion=Wd,Object.defineProperty(Oi,"__esModule",{value:!0}),Oi.validateKeywordUsage=Oi.validSchemaType=Oi.funcKeywordCode=Oi.macroKeywordCode=void 0;const pi=si,Sl=xi,od=di,Rd=cb;function Ld(i,l){const{gen:b,keyword:V,schema:c,parentSchema:d,it:e}=i,u=l.macro.call(e.self,c,d,e),o=ic(b,V,u);e.opts.validateSchema!==!1&&e.self.validateSchema(u,!0);const I=b.name("valid");i.subschema({schema:u,schemaPath:pi.nil,errSchemaPath:`${e.errSchemaPath}/${V}`,topSchemaRef:o,compositeRule:!0},I),i.pass(I,()=>i.error(!0))}Oi.macroKeywordCode=Ld;function Xd(i,l){var b;const{gen:V,keyword:c,schema:d,parentSchema:e,$data:u,it:o}=i;hd(o,l);const I=!u&&l.compile?l.compile.call(o.self,d,e,o):l.validate,s=ic(V,c,I),W=V.let("valid");i.block$data(W,y),i.ok((b=l.valid)!==null&&b!==void 0?b:W);function y(){if(l.errors===!1)x(),l.modifying&&qV(i),v(()=>i.error());else{const R=l.async?k():T();l.modifying&&qV(i),v(()=>Gd(i,R))}}function k(){const R=V.let("ruleErrs",null);return V.try(()=>x((0,pi._)`await `),Y=>V.assign(W,!1).if((0,pi._)`${Y} instanceof ${o.ValidationError}`,()=>V.assign(R,(0,pi._)`${Y}.errors`),()=>V.throw(Y))),R}function T(){const R=(0,pi._)`${s}.errors`;return V.assign(R,null),x(pi.nil),R}function x(R=l.async?(0,pi._)`await `:pi.nil){const Y=o.opts.passContext?Sl.default.this:Sl.default.self,J=!("compile"in l&&!u||l.schema===!1);V.assign(W,(0,pi._)`${R}${(0,od.callValidateCode)(i,s,Y,J)}`,l.modifying)}function v(R){var Y;V.if((0,pi.not)((Y=l.valid)!==null&&Y!==void 0?Y:W),R)}}Oi.funcKeywordCode=Xd;function qV(i){const{gen:l,data:b,it:V}=i;l.if(V.parentData,()=>l.assign(b,(0,pi._)`${V.parentData}[${V.parentDataProperty}]`))}function Gd(i,l){const{gen:b}=i;b.if((0,pi._)`Array.isArray(${l})`,()=>{b.assign(Sl.default.vErrors,(0,pi._)`${Sl.default.vErrors} === null ? ${l} : ${Sl.default.vErrors}.concat(${l})`).assign(Sl.default.errors,(0,pi._)`${Sl.default.vErrors}.length`),(0,Rd.extendErrors)(i)},()=>i.error())}function hd({schemaEnv:i},l){if(l.async&&!i.$async)throw new Error("async keyword in sync schema")}function ic(i,l,b){if(b===void 0)throw new Error(`keyword "${l}" failed to compile`);return i.scopeValue("keyword",typeof b=="function"?{ref:b}:{ref:b,code:(0,pi.stringify)(b)})}function vd(i,l,b=!1){return!l.length||l.some(V=>V==="array"?Array.isArray(i):V==="object"?i&&typeof i=="object"&&!Array.isArray(i):typeof i==V||b&&typeof i=="undefined")}Oi.validSchemaType=vd;function Ud({schema:i,opts:l,self:b,errSchemaPath:V},c,d){if(Array.isArray(c.keyword)?!c.keyword.includes(d):c.keyword!==d)throw new Error("ajv implementation error");const e=c.dependencies;if(e!=null&&e.some(u=>!Object.prototype.hasOwnProperty.call(i,u)))throw new Error(`parent schema must have dependencies of ${d}: ${e.join(",")}`);if(c.validateSchema&&!c.validateSchema(i[d])){const o=`keyword "${d}" value is invalid at path "${V}": `+b.errorsText(c.validateSchema.errors);if(l.validateSchema==="log")b.logger.error(o);else throw new Error(o)}}Oi.validateKeywordUsage=Ud;var tl={};Object.defineProperty(tl,"__esModule",{value:!0}),tl.extendSubschemaMode=tl.extendSubschemaData=tl.getSubschema=void 0;const Bi=si,lc=Si;function yd(i,{keyword:l,schemaProp:b,schema:V,schemaPath:c,errSchemaPath:d,topSchemaRef:e}){if(l!==void 0&&V!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(l!==void 0){const u=i.schema[l];return b===void 0?{schema:u,schemaPath:(0,Bi._)`${i.schemaPath}${(0,Bi.getProperty)(l)}`,errSchemaPath:`${i.errSchemaPath}/${l}`}:{schema:u[b],schemaPath:(0,Bi._)`${i.schemaPath}${(0,Bi.getProperty)(l)}${(0,Bi.getProperty)(b)}`,errSchemaPath:`${i.errSchemaPath}/${l}/${(0,lc.escapeFragment)(b)}`}}if(V!==void 0){if(c===void 0||d===void 0||e===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:V,schemaPath:c,topSchemaRef:e,errSchemaPath:d}}throw new Error('either "keyword" or "schema" must be passed')}tl.getSubschema=yd;function Sd(i,l,{dataProp:b,dataPropType:V,data:c,dataTypes:d,propertyName:e}){if(c!==void 0&&b!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:u}=l;if(b!==void 0){const{errorPath:I,dataPathArr:s,opts:W}=l,y=u.let("data",(0,Bi._)`${l.data}${(0,Bi.getProperty)(b)}`,!0);o(y),i.errorPath=(0,Bi.str)`${I}${(0,lc.getErrorPath)(b,V,W.jsPropertySyntax)}`,i.parentDataProperty=(0,Bi._)`${b}`,i.dataPathArr=[...s,i.parentDataProperty]}if(c!==void 0){const I=c instanceof Bi.Name?c:u.let("data",c,!0);o(I),e!==void 0&&(i.propertyName=e)}d&&(i.dataTypes=d);function o(I){i.data=I,i.dataLevel=l.dataLevel+1,i.dataTypes=[],l.definedProperties=new Set,i.parentData=l.data,i.dataNames=[...l.dataNames,I]}}tl.extendSubschemaData=Sd;function Yd(i,{jtdDiscriminator:l,jtdMetadata:b,compositeRule:V,createErrors:c,allErrors:d}){V!==void 0&&(i.compositeRule=V),c!==void 0&&(i.createErrors=c),d!==void 0&&(i.allErrors=d),i.jtdDiscriminator=l,i.jtdMetadata=b}tl.extendSubschemaMode=Yd;var Ji={},Jd=function i(l,b){if(l===b)return!0;if(l&&b&&typeof l=="object"&&typeof b=="object"){if(l.constructor!==b.constructor)return!1;var V,c,d;if(Array.isArray(l)){if(V=l.length,V!=b.length)return!1;for(c=V;c--!==0;)if(!i(l[c],b[c]))return!1;return!0}if(l.constructor===RegExp)return l.source===b.source&&l.flags===b.flags;if(l.valueOf!==Object.prototype.valueOf)return l.valueOf()===b.valueOf();if(l.toString!==Object.prototype.toString)return l.toString()===b.toString();if(d=Object.keys(l),V=d.length,V!==Object.keys(b).length)return!1;for(c=V;c--!==0;)if(!Object.prototype.hasOwnProperty.call(b,d[c]))return!1;for(c=V;c--!==0;){var e=d[c];if(!i(l[e],b[e]))return!1}return!0}return l!==l&&b!==b},bc={exports:{}},nl=bc.exports=function(i,l,b){typeof l=="function"&&(b=l,l={}),b=l.cb||b;var V=typeof b=="function"?b:b.pre||function(){},c=b.post||function(){};Cb(l,V,c,i,"",i)};nl.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},nl.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},nl.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},nl.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 Cb(i,l,b,V,c,d,e,u,o,I){if(V&&typeof V=="object"&&!Array.isArray(V)){l(V,c,d,e,u,o,I);for(var s in V){var W=V[s];if(Array.isArray(W)){if(s in nl.arrayKeywords)for(var y=0;y<W.length;y++)Cb(i,l,b,W[y],c+"/"+s+"/"+y,d,c,s,V,y)}else if(s in nl.propsKeywords){if(W&&typeof W=="object")for(var k in W)Cb(i,l,b,W[k],c+"/"+s+"/"+Nd(k),d,c,s,V,k)}else(s in nl.keywords||i.allKeys&&!(s in nl.skipKeywords))&&Cb(i,l,b,W,c+"/"+s,d,c,s,V)}b(V,c,d,e,u,o,I)}}function Nd(i){return i.replace(/~/g,"~0").replace(/\//g,"~1")}Object.defineProperty(Ji,"__esModule",{value:!0}),Ji.getSchemaRefs=Ji.resolveUrl=Ji.normalizeId=Ji._getFullPath=Ji.getFullPath=Ji.inlineRef=void 0;const Fd=Si,pd=Jd,Td=bc.exports,rd=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function kd(i,l=!0){return typeof i=="boolean"?!0:l===!0?!tV(i):l?Vc(i)<=l:!1}Ji.inlineRef=kd;const xd=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function tV(i){for(const l in i){if(xd.has(l))return!0;const b=i[l];if(Array.isArray(b)&&b.some(tV)||typeof b=="object"&&tV(b))return!0}return!1}function Vc(i){let l=0;for(const b in i){if(b==="$ref")return 1/0;if(l++,!rd.has(b)&&(typeof i[b]=="object"&&(0,Fd.eachItem)(i[b],V=>l+=Vc(V)),l===1/0))return 1/0}return l}function cc(i,l="",b){b!==!1&&(l=gl(l));const V=i.parse(l);return dc(i,V)}Ji.getFullPath=cc;function dc(i,l){return i.serialize(l).split("#")[0]+"#"}Ji._getFullPath=dc;const fd=/#\/?$/;function gl(i){return i?i.replace(fd,""):""}Ji.normalizeId=gl;function Ed(i,l,b){return b=gl(b),i.resolve(l,b)}Ji.resolveUrl=Ed;const zd=/^[a-z_][-a-z0-9._]*$/i;function Cd(i,l){if(typeof i=="boolean")return{};const{schemaId:b,uriResolver:V}=this.opts,c=gl(i[b]||l),d={"":c},e=cc(V,c,!1),u={},o=new Set;return Td(i,{allKeys:!0},(W,y,k,T)=>{if(T===void 0)return;const x=e+y;let v=d[T];typeof W[b]=="string"&&(v=R.call(this,W[b])),Y.call(this,W.$anchor),Y.call(this,W.$dynamicAnchor),d[y]=v;function R(J){const p=this.opts.uriResolver.resolve;if(J=gl(v?p(v,J):J),o.has(J))throw s(J);o.add(J);let M=this.refs[J];return typeof M=="string"&&(M=this.refs[M]),typeof M=="object"?I(W,M.schema,J):J!==gl(x)&&(J[0]==="#"?(I(W,u[J],J),u[J]=W):this.refs[J]=x),J}function Y(J){if(typeof J=="string"){if(!zd.test(J))throw new Error(`invalid anchor "${J}"`);R.call(this,`#${J}`)}}}),u;function I(W,y,k){if(y!==void 0&&!pd(W,y))throw s(k)}function s(W){return new Error(`reference "${W}" resolves to more than one schema`)}}Ji.getSchemaRefs=Cd,Object.defineProperty(gi,"__esModule",{value:!0}),gi.getData=gi.KeywordCxt=gi.validateFunctionCode=void 0;const Zc=Ql,mc=Eb,nV=il,Hb=Eb,Hd=zb,Zb=Oi,uV=tl,C=si,B=xi,jd=Ji,ll=Si,mb=cb;function Qd(i){if(tc(i)&&(nc(i),ac(i))){Od(i);return}ec(i,()=>(0,Zc.topBoolOrEmptySchema)(i))}gi.validateFunctionCode=Qd;function ec({gen:i,validateName:l,schema:b,schemaEnv:V,opts:c},d){c.code.es5?i.func(l,(0,C._)`${B.default.data}, ${B.default.valCxt}`,V.$async,()=>{i.code((0,C._)`"use strict"; ${sc(b,c)}`),gd(i,c),i.code(d)}):i.func(l,(0,C._)`${B.default.data}, ${Md(c)}`,V.$async,()=>i.code(sc(b,c)).code(d))}function Md(i){return(0,C._)`{${B.default.instancePath}="", ${B.default.parentData}, ${B.default.parentDataProperty}, ${B.default.rootData}=${B.default.data}${i.dynamicRef?(0,C._)`, ${B.default.dynamicAnchors}={}`:C.nil}}={}`}function gd(i,l){i.if(B.default.valCxt,()=>{i.var(B.default.instancePath,(0,C._)`${B.default.valCxt}.${B.default.instancePath}`),i.var(B.default.parentData,(0,C._)`${B.default.valCxt}.${B.default.parentData}`),i.var(B.default.parentDataProperty,(0,C._)`${B.default.valCxt}.${B.default.parentDataProperty}`),i.var(B.default.rootData,(0,C._)`${B.default.valCxt}.${B.default.rootData}`),l.dynamicRef&&i.var(B.default.dynamicAnchors,(0,C._)`${B.default.valCxt}.${B.default.dynamicAnchors}`)},()=>{i.var(B.default.instancePath,(0,C._)`""`),i.var(B.default.parentData,(0,C._)`undefined`),i.var(B.default.parentDataProperty,(0,C._)`undefined`),i.var(B.default.rootData,B.default.data),l.dynamicRef&&i.var(B.default.dynamicAnchors,(0,C._)`{}`)})}function Od(i){const{schema:l,opts:b,gen:V}=i;ec(i,()=>{b.$comment&&l.$comment&&Ic(i),Dd(i),V.let(B.default.vErrors,null),V.let(B.default.errors,0),b.unevaluated&&Bd(i),uc(i),$d(i)})}function Bd(i){const{gen:l,validateName:b}=i;i.evaluated=l.const("evaluated",(0,C._)`${b}.evaluated`),l.if((0,C._)`${i.evaluated}.dynamicProps`,()=>l.assign((0,C._)`${i.evaluated}.props`,(0,C._)`undefined`)),l.if((0,C._)`${i.evaluated}.dynamicItems`,()=>l.assign((0,C._)`${i.evaluated}.items`,(0,C._)`undefined`))}function sc(i,l){const b=typeof i=="object"&&i[l.schemaId];return b&&(l.code.source||l.code.process)?(0,C._)`/*# sourceURL=${b} */`:C.nil}function wd(i,l){if(tc(i)&&(nc(i),ac(i))){Kd(i,l);return}(0,Zc.boolOrEmptySchema)(i,l)}function ac({schema:i,self:l}){if(typeof i=="boolean")return!i;for(const b in i)if(l.RULES.all[b])return!0;return!1}function tc(i){return typeof i.schema!="boolean"}function Kd(i,l){const{schema:b,gen:V,opts:c}=i;c.$comment&&b.$comment&&Ic(i),Ad(i),_d(i);const d=V.const("_errs",B.default.errors);uc(i,d),V.var(l,(0,C._)`${d} === ${B.default.errors}`)}function nc(i){(0,ll.checkUnknownRules)(i),Pd(i)}function uc(i,l){if(i.opts.jtd)return Wc(i,[],!1,l);const b=(0,mc.getSchemaTypes)(i.schema),V=(0,mc.coerceAndCheckDataType)(i,b);Wc(i,b,!V,l)}function Pd(i){const{schema:l,errSchemaPath:b,opts:V,self:c}=i;l.$ref&&V.ignoreKeywordsWithRef&&(0,ll.schemaHasRulesButRef)(l,c.RULES)&&c.logger.warn(`$ref: keywords ignored in schema at path "${b}"`)}function Dd(i){const{schema:l,opts:b}=i;l.default!==void 0&&b.useDefaults&&b.strictSchema&&(0,ll.checkStrictMode)(i,"default is ignored in the schema root")}function Ad(i){const l=i.schema[i.opts.schemaId];l&&(i.baseId=(0,jd.resolveUrl)(i.opts.uriResolver,i.baseId,l))}function _d(i){if(i.schema.$async&&!i.schemaEnv.$async)throw new Error("async schema in sync schema")}function Ic({gen:i,schemaEnv:l,schema:b,errSchemaPath:V,opts:c}){const d=b.$comment;if(c.$comment===!0)i.code((0,C._)`${B.default.self}.logger.log(${d})`);else if(typeof c.$comment=="function"){const e=(0,C.str)`${V}/$comment`,u=i.scopeValue("root",{ref:l.root});i.code((0,C._)`${B.default.self}.opts.$comment(${d}, ${e}, ${u}.schema)`)}}function $d(i){const{gen:l,schemaEnv:b,validateName:V,ValidationError:c,opts:d}=i;b.$async?l.if((0,C._)`${B.default.errors} === 0`,()=>l.return(B.default.data),()=>l.throw((0,C._)`new ${c}(${B.default.vErrors})`)):(l.assign((0,C._)`${V}.errors`,B.default.vErrors),d.unevaluated&&qd(i),l.return((0,C._)`${B.default.errors} === 0`))}function qd({gen:i,evaluated:l,props:b,items:V}){b instanceof C.Name&&i.assign((0,C._)`${l}.props`,b),V instanceof C.Name&&i.assign((0,C._)`${l}.items`,V)}function Wc(i,l,b,V){const{gen:c,schema:d,data:e,allErrors:u,opts:o,self:I}=i,{RULES:s}=I;if(d.$ref&&(o.ignoreKeywordsWithRef||!(0,ll.schemaHasRulesButRef)(d,s))){c.block(()=>Xc(i,"$ref",s.all.$ref.definition));return}o.jtd||iZ(i,l),c.block(()=>{for(const y of s.rules)W(y);W(s.post)});function W(y){!(0,nV.shouldUseGroup)(d,y)||(y.type?(c.if((0,Hb.checkDataType)(y.type,e,o.strictNumbers)),oc(i,y),l.length===1&&l[0]===y.type&&b&&(c.else(),(0,Hb.reportTypeError)(i)),c.endIf()):oc(i,y),u||c.if((0,C._)`${B.default.errors} === ${V||0}`))}}function oc(i,l){const{gen:b,schema:V,opts:{useDefaults:c}}=i;c&&(0,Hd.assignDefaults)(i,l.type),b.block(()=>{for(const d of l.rules)(0,nV.shouldUseRule)(V,d)&&Xc(i,d.keyword,d.definition,l.type)})}function iZ(i,l){i.schemaEnv.meta||!i.opts.strictTypes||(lZ(i,l),i.opts.allowUnionTypes||bZ(i,l),VZ(i,i.dataTypes))}function lZ(i,l){if(!!l.length){if(!i.dataTypes.length){i.dataTypes=l;return}l.forEach(b=>{Rc(i.dataTypes,b)||IV(i,`type "${b}" not allowed by context "${i.dataTypes.join(",")}"`)}),i.dataTypes=i.dataTypes.filter(b=>Rc(l,b))}}function bZ(i,l){l.length>1&&!(l.length===2&&l.includes("null"))&&IV(i,"use allowUnionTypes to allow union type keyword")}function VZ(i,l){const b=i.self.RULES.all;for(const V in b){const c=b[V];if(typeof c=="object"&&(0,nV.shouldUseRule)(i.schema,c)){const{type:d}=c.definition;d.length&&!d.some(e=>cZ(l,e))&&IV(i,`missing type "${d.join(",")}" for keyword "${V}"`)}}}function cZ(i,l){return i.includes(l)||l==="number"&&i.includes("integer")}function Rc(i,l){return i.includes(l)||l==="integer"&&i.includes("number")}function IV(i,l){l+=` at "${i.schemaEnv.baseId+i.errSchemaPath}" (strictTypes)`,(0,ll.checkStrictMode)(i,l,i.opts.strictTypes)}class Lc{constructor(l,b,V){if((0,Zb.validateKeywordUsage)(l,b,V),this.gen=l.gen,this.allErrors=l.allErrors,this.keyword=V,this.data=l.data,this.schema=l.schema[V],this.$data=b.$data&&l.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,ll.schemaRefOrVal)(l,this.schema,V,this.$data),this.schemaType=b.schemaType,this.parentSchema=l.schema,this.params={},this.it=l,this.def=b,this.$data)this.schemaCode=l.gen.const("vSchema",Gc(this.$data,l));else if(this.schemaCode=this.schemaValue,!(0,Zb.validSchemaType)(this.schema,b.schemaType,b.allowUndefined))throw new Error(`${V} value must be ${JSON.stringify(b.schemaType)}`);("code"in b?b.trackErrors:b.errors!==!1)&&(this.errsCount=l.gen.const("_errs",B.default.errors))}result(l,b,V){this.failResult((0,C.not)(l),b,V)}failResult(l,b,V){this.gen.if(l),V?V():this.error(),b?(this.gen.else(),b(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(l,b){this.failResult((0,C.not)(l),void 0,b)}fail(l){if(l===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(l),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(l){if(!this.$data)return this.fail(l);const{schemaCode:b}=this;this.fail((0,C._)`${b} !== undefined && (${(0,C.or)(this.invalid$data(),l)})`)}error(l,b,V){if(b){this.setParams(b),this._error(l,V),this.setParams({});return}this._error(l,V)}_error(l,b){(l?mb.reportExtraError:mb.reportError)(this,this.def.error,b)}$dataError(){(0,mb.reportError)(this,this.def.$dataError||mb.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,mb.resetErrorsCount)(this.gen,this.errsCount)}ok(l){this.allErrors||this.gen.if(l)}setParams(l,b){b?Object.assign(this.params,l):this.params=l}block$data(l,b,V=C.nil){this.gen.block(()=>{this.check$data(l,V),b()})}check$data(l=C.nil,b=C.nil){if(!this.$data)return;const{gen:V,schemaCode:c,schemaType:d,def:e}=this;V.if((0,C.or)((0,C._)`${c} === undefined`,b)),l!==C.nil&&V.assign(l,!0),(d.length||e.validateSchema)&&(V.elseIf(this.invalid$data()),this.$dataError(),l!==C.nil&&V.assign(l,!1)),V.else()}invalid$data(){const{gen:l,schemaCode:b,schemaType:V,def:c,it:d}=this;return(0,C.or)(e(),u());function e(){if(V.length){if(!(b instanceof C.Name))throw new Error("ajv implementation error");const o=Array.isArray(V)?V:[V];return(0,C._)`${(0,Hb.checkDataTypes)(o,b,d.opts.strictNumbers,Hb.DataType.Wrong)}`}return C.nil}function u(){if(c.validateSchema){const o=l.scopeValue("validate$data",{ref:c.validateSchema});return(0,C._)`!${o}(${b})`}return C.nil}}subschema(l,b){const V=(0,uV.getSubschema)(this.it,l);(0,uV.extendSubschemaData)(V,this.it,l),(0,uV.extendSubschemaMode)(V,l);const c=ai(A(A({},this.it),V),{items:void 0,props:void 0});return wd(c,b),c}mergeEvaluated(l,b){const{it:V,gen:c}=this;!V.opts.unevaluated||(V.props!==!0&&l.props!==void 0&&(V.props=ll.mergeEvaluated.props(c,l.props,V.props,b)),V.items!==!0&&l.items!==void 0&&(V.items=ll.mergeEvaluated.items(c,l.items,V.items,b)))}mergeValidEvaluated(l,b){const{it:V,gen:c}=this;if(V.opts.unevaluated&&(V.props!==!0||V.items!==!0))return c.if(b,()=>this.mergeEvaluated(l,C.Name)),!0}}gi.KeywordCxt=Lc;function Xc(i,l,b,V){const c=new Lc(i,b,l);"code"in b?b.code(c,V):c.$data&&b.validate?(0,Zb.funcKeywordCode)(c,b):"macro"in b?(0,Zb.macroKeywordCode)(c,b):(b.compile||b.validate)&&(0,Zb.funcKeywordCode)(c,b)}const dZ=/^\/(?:[^~]|~0|~1)*$/,ZZ=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Gc(i,{dataLevel:l,dataNames:b,dataPathArr:V}){let c,d;if(i==="")return B.default.rootData;if(i[0]==="/"){if(!dZ.test(i))throw new Error(`Invalid JSON-pointer: ${i}`);c=i,d=B.default.rootData}else{const I=ZZ.exec(i);if(!I)throw new Error(`Invalid JSON-pointer: ${i}`);const s=+I[1];if(c=I[2],c==="#"){if(s>=l)throw new Error(o("property/index",s));return V[l-s]}if(s>l)throw new Error(o("data",s));if(d=b[l-s],!c)return d}let e=d;const u=c.split("/");for(const I of u)I&&(d=(0,C._)`${d}${(0,C.getProperty)((0,ll.unescapeJsonPointer)(I))}`,e=(0,C._)`${e} && ${d}`);return e;function o(I,s){return`Cannot access ${I} ${s} levels up, current level is ${l}`}}gi.getData=Gc;var jb={};Object.defineProperty(jb,"__esModule",{value:!0});class mZ extends Error{constructor(l){super("validation failed"),this.errors=l,this.ajv=this.validation=!0}}jb.default=mZ;var Yl={};Object.defineProperty(Yl,"__esModule",{value:!0});const WV=Ji;class eZ extends Error{constructor(l,b,V,c){super(c||`can't resolve reference ${V} from id ${b}`),this.missingRef=(0,WV.resolveUrl)(l,b,V),this.missingSchema=(0,WV.normalizeId)((0,WV.getFullPath)(l,this.missingRef))}}Yl.default=eZ;var Fi={};Object.defineProperty(Fi,"__esModule",{value:!0}),Fi.resolveSchema=Fi.getCompilingSchema=Fi.resolveRef=Fi.compileSchema=Fi.SchemaEnv=void 0;const Qi=si,sZ=jb,Jl=xi,Mi=Ji,hc=Si,aZ=gi;class Qb{constructor(l){var b;this.refs={},this.dynamicAnchors={};let V;typeof l.schema=="object"&&(V=l.schema),this.schema=l.schema,this.schemaId=l.schemaId,this.root=l.root||this,this.baseId=(b=l.baseId)!==null&&b!==void 0?b:(0,Mi.normalizeId)(V==null?void 0:V[l.schemaId||"$id"]),this.schemaPath=l.schemaPath,this.localRefs=l.localRefs,this.meta=l.meta,this.$async=V==null?void 0:V.$async,this.refs={}}}Fi.SchemaEnv=Qb;function oV(i){const l=vc.call(this,i);if(l)return l;const b=(0,Mi.getFullPath)(this.opts.uriResolver,i.root.baseId),{es5:V,lines:c}=this.opts.code,{ownProperties:d}=this.opts,e=new Qi.CodeGen(this.scope,{es5:V,lines:c,ownProperties:d});let u;i.$async&&(u=e.scopeValue("Error",{ref:sZ.default,code:(0,Qi._)`require("ajv/dist/runtime/validation_error").default`}));const o=e.scopeName("validate");i.validateName=o;const I={gen:e,allErrors:this.opts.allErrors,data:Jl.default.data,parentData:Jl.default.parentData,parentDataProperty:Jl.default.parentDataProperty,dataNames:[Jl.default.data],dataPathArr:[Qi.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:e.scopeValue("schema",this.opts.code.source===!0?{ref:i.schema,code:(0,Qi.stringify)(i.schema)}:{ref:i.schema}),validateName:o,ValidationError:u,schema:i.schema,schemaEnv:i,rootId:b,baseId:i.baseId||b,schemaPath:Qi.nil,errSchemaPath:i.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,Qi._)`""`,opts:this.opts,self:this};let s;try{this._compilations.add(i),(0,aZ.validateFunctionCode)(I),e.optimize(this.opts.code.optimize);const W=e.toString();s=`${e.scopeRefs(Jl.default.scope)}return ${W}`,this.opts.code.process&&(s=this.opts.code.process(s,i));const k=new Function(`${Jl.default.self}`,`${Jl.default.scope}`,s)(this,this.scope.get());if(this.scope.value(o,{ref:k}),k.errors=null,k.schema=i.schema,k.schemaEnv=i,i.$async&&(k.$async=!0),this.opts.code.source===!0&&(k.source={validateName:o,validateCode:W,scopeValues:e._values}),this.opts.unevaluated){const{props:T,items:x}=I;k.evaluated={props:T instanceof Qi.Name?void 0:T,items:x instanceof Qi.Name?void 0:x,dynamicProps:T instanceof Qi.Name,dynamicItems:x instanceof Qi.Name},k.source&&(k.source.evaluated=(0,Qi.stringify)(k.evaluated))}return i.validate=k,i}catch(W){throw delete i.validate,delete i.validateName,s&&this.logger.error("Error compiling schema, function code:",s),W}finally{this._compilations.delete(i)}}Fi.compileSchema=oV;function tZ(i,l,b){var V;b=(0,Mi.resolveUrl)(this.opts.uriResolver,l,b);const c=i.refs[b];if(c)return c;let d=IZ.call(this,i,b);if(d===void 0){const e=(V=i.localRefs)===null||V===void 0?void 0:V[b],{schemaId:u}=this.opts;e&&(d=new Qb({schema:e,schemaId:u,root:i,baseId:l}))}if(d!==void 0)return i.refs[b]=nZ.call(this,d)}Fi.resolveRef=tZ;function nZ(i){return(0,Mi.inlineRef)(i.schema,this.opts.inlineRefs)?i.schema:i.validate?i:oV.call(this,i)}function vc(i){for(const l of this._compilations)if(uZ(l,i))return l}Fi.getCompilingSchema=vc;function uZ(i,l){return i.schema===l.schema&&i.root===l.root&&i.baseId===l.baseId}function IZ(i,l){let b;for(;typeof(b=this.refs[l])=="string";)l=b;return b||this.schemas[l]||Mb.call(this,i,l)}function Mb(i,l){const b=this.opts.uriResolver.parse(l),V=(0,Mi._getFullPath)(this.opts.uriResolver,b);let c=(0,Mi.getFullPath)(this.opts.uriResolver,i.baseId,void 0);if(Object.keys(i.schema).length>0&&V===c)return RV.call(this,b,i);const d=(0,Mi.normalizeId)(V),e=this.refs[d]||this.schemas[d];if(typeof e=="string"){const u=Mb.call(this,i,e);return typeof(u==null?void 0:u.schema)!="object"?void 0:RV.call(this,b,u)}if(typeof(e==null?void 0:e.schema)=="object"){if(e.validate||oV.call(this,e),d===(0,Mi.normalizeId)(l)){const{schema:u}=e,{schemaId:o}=this.opts,I=u[o];return I&&(c=(0,Mi.resolveUrl)(this.opts.uriResolver,c,I)),new Qb({schema:u,schemaId:o,root:i,baseId:c})}return RV.call(this,b,e)}}Fi.resolveSchema=Mb;const WZ=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function RV(i,{baseId:l,schema:b,root:V}){var c;if(((c=i.fragment)===null||c===void 0?void 0:c[0])!=="/")return;for(const u of i.fragment.slice(1).split("/")){if(typeof b=="boolean")return;const o=b[(0,hc.unescapeFragment)(u)];if(o===void 0)return;b=o;const I=typeof b=="object"&&b[this.opts.schemaId];!WZ.has(u)&&I&&(l=(0,Mi.resolveUrl)(this.opts.uriResolver,l,I))}let d;if(typeof b!="boolean"&&b.$ref&&!(0,hc.schemaHasRulesButRef)(b,this.RULES)){const u=(0,Mi.resolveUrl)(this.opts.uriResolver,l,b.$ref);d=Mb.call(this,V,u)}const{schemaId:e}=this.opts;if(d=d||new Qb({schema:b,schemaId:e,root:V,baseId:l}),d.schema!==d.root.schema)return d}var oZ={$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},LV={},XV={exports:{}};/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */(function(i,l){(function(b,V){V(l)})(O,function(b){function V(){for(var a=arguments.length,m=Array(a),n=0;n<a;n++)m[n]=arguments[n];if(m.length>1){m[0]=m[0].slice(0,-1);for(var U=m.length-1,h=1;h<U;++h)m[h]=m[h].slice(1,-1);return m[U]=m[U].slice(1),m.join("")}else return m[0]}function c(a){return"(?:"+a+")"}function d(a){return a===void 0?"undefined":a===null?"null":Object.prototype.toString.call(a).split(" ").pop().split("]").shift().toLowerCase()}function e(a){return a.toUpperCase()}function u(a){return a!=null?a instanceof Array?a:typeof a.length!="number"||a.split||a.setInterval||a.call?[a]:Array.prototype.slice.call(a):[]}function o(a,m){var n=a;if(m)for(var U in m)n[U]=m[U];return n}function I(a){var m="[A-Za-z]",n="[0-9]",U=V(n,"[A-Fa-f]"),h=c(c("%[EFef]"+U+"%"+U+U+"%"+U+U)+"|"+c("%[89A-Fa-f]"+U+"%"+U+U)+"|"+c("%"+U+U)),j="[\\:\\/\\?\\#\\[\\]\\@]",Q="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",Zi=V(j,Q),Wi=a?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]",vi=a?"[\\uE000-\\uF8FF]":"[]",li=V(m,n,"[\\-\\.\\_\\~]",Wi);c(m+V(m,n,"[\\+\\-\\.]")+"*"),c(c(h+"|"+V(li,Q,"[\\:]"))+"*");var ti=c(c("25[0-5]")+"|"+c("2[0-4]"+n)+"|"+c("1"+n+n)+"|"+c("0?[1-9]"+n)+"|0?0?"+n),Ui=c(ti+"\\."+ti+"\\."+ti+"\\."+ti),w=c(U+"{1,4}"),Li=c(c(w+"\\:"+w)+"|"+Ui),yi=c(c(w+"\\:")+"{6}"+Li),Xi=c("\\:\\:"+c(w+"\\:")+"{5}"+Li),hl=c(c(w)+"?\\:\\:"+c(w+"\\:")+"{4}"+Li),_i=c(c(c(w+"\\:")+"{0,1}"+w)+"?\\:\\:"+c(w+"\\:")+"{3}"+Li),$i=c(c(c(w+"\\:")+"{0,2}"+w)+"?\\:\\:"+c(w+"\\:")+"{2}"+Li),bb=c(c(c(w+"\\:")+"{0,3}"+w)+"?\\:\\:"+w+"\\:"+Li),Cl=c(c(c(w+"\\:")+"{0,4}"+w)+"?\\:\\:"+Li),Hi=c(c(c(w+"\\:")+"{0,5}"+w)+"?\\:\\:"+w),qi=c(c(c(w+"\\:")+"{0,6}"+w)+"?\\:\\:"),Hl=c([yi,Xi,hl,_i,$i,bb,Cl,Hi,qi].join("|")),el=c(c(li+"|"+h)+"+");c("[vV]"+U+"+\\."+V(li,Q,"[\\:]")+"+"),c(c(h+"|"+V(li,Q))+"*");var pb=c(h+"|"+V(li,Q,"[\\:\\@]"));return c(c(h+"|"+V(li,Q,"[\\@]"))+"+"),c(c(pb+"|"+V("[\\/\\?]",vi))+"*"),{NOT_SCHEME:new RegExp(V("[^]",m,n,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(V("[^\\%\\:]",li,Q),"g"),NOT_HOST:new RegExp(V("[^\\%\\[\\]\\:]",li,Q),"g"),NOT_PATH:new RegExp(V("[^\\%\\/\\:\\@]",li,Q),"g"),NOT_PATH_NOSCHEME:new RegExp(V("[^\\%\\/\\@]",li,Q),"g"),NOT_QUERY:new RegExp(V("[^\\%]",li,Q,"[\\:\\@\\/\\?]",vi),"g"),NOT_FRAGMENT:new RegExp(V("[^\\%]",li,Q,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(V("[^]",li,Q),"g"),UNRESERVED:new RegExp(li,"g"),OTHER_CHARS:new RegExp(V("[^\\%]",li,Zi),"g"),PCT_ENCODED:new RegExp(h,"g"),IPV4ADDRESS:new RegExp("^("+Ui+")$"),IPV6ADDRESS:new RegExp("^\\[?("+Hl+")"+c(c("\\%25|\\%(?!"+U+"{2})")+"("+el+")")+"?\\]?$")}}var s=I(!1),W=I(!0),y=function(){function a(m,n){var U=[],h=!0,j=!1,Q=void 0;try{for(var Zi=m[Symbol.iterator](),Wi;!(h=(Wi=Zi.next()).done)&&(U.push(Wi.value),!(n&&U.length===n));h=!0);}catch(vi){j=!0,Q=vi}finally{try{!h&&Zi.return&&Zi.return()}finally{if(j)throw Q}}return U}return function(m,n){if(Array.isArray(m))return m;if(Symbol.iterator in Object(m))return a(m,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),k=function(a){if(Array.isArray(a)){for(var m=0,n=Array(a.length);m<a.length;m++)n[m]=a[m];return n}else return Array.from(a)},T=2147483647,x=36,v=1,R=26,Y=38,J=700,p=72,M=128,X="-",S=/^xn--/,r=/[^\0-\x7E]/,g=/[\x2E\u3002\uFF0E\uFF61]/g,D={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},Ii=x-v,$=Math.floor,mi=String.fromCharCode;function q(a){throw new RangeError(D[a])}function Ri(a,m){for(var n=[],U=a.length;U--;)n[U]=m(a[U]);return n}function Gi(a,m){var n=a.split("@"),U="";n.length>1&&(U=n[0]+"@",a=n[1]),a=a.replace(g,".");var h=a.split("."),j=Ri(h,m).join(".");return U+j}function Yi(a){for(var m=[],n=0,U=a.length;n<U;){var h=a.charCodeAt(n++);if(h>=55296&&h<=56319&&n<U){var j=a.charCodeAt(n++);(j&64512)==56320?m.push(((h&1023)<<10)+(j&1023)+65536):(m.push(h),n--)}else m.push(h)}return m}var zi=function(m){return String.fromCodePoint.apply(String,k(m))},Dl=function(m){return m-48<10?m-22:m-65<26?m-65:m-97<26?m-97:x},f=function(m,n){return m+22+75*(m<26)-((n!=0)<<5)},L=function(m,n,U){var h=0;for(m=U?$(m/J):m>>1,m+=$(m/n);m>Ii*R>>1;h+=x)m=$(m/Ii);return $(h+(Ii+1)*m/(m+Y))},F=function(m){var n=[],U=m.length,h=0,j=M,Q=p,Zi=m.lastIndexOf(X);Zi<0&&(Zi=0);for(var Wi=0;Wi<Zi;++Wi)m.charCodeAt(Wi)>=128&&q("not-basic"),n.push(m.charCodeAt(Wi));for(var vi=Zi>0?Zi+1:0;vi<U;){for(var li=h,ti=1,Ui=x;;Ui+=x){vi>=U&&q("invalid-input");var w=Dl(m.charCodeAt(vi++));(w>=x||w>$((T-h)/ti))&&q("overflow"),h+=w*ti;var Li=Ui<=Q?v:Ui>=Q+R?R:Ui-Q;if(w<Li)break;var yi=x-Li;ti>$(T/yi)&&q("overflow"),ti*=yi}var Xi=n.length+1;Q=L(h-li,Xi,li==0),$(h/Xi)>T-j&&q("overflow"),j+=$(h/Xi),h%=Xi,n.splice(h++,0,j)}return String.fromCodePoint.apply(String,n)},G=function(m){var n=[];m=Yi(m);var U=m.length,h=M,j=0,Q=p,Zi=!0,Wi=!1,vi=void 0;try{for(var li=m[Symbol.iterator](),ti;!(Zi=(ti=li.next()).done);Zi=!0){var Ui=ti.value;Ui<128&&n.push(mi(Ui))}}catch(Tb){Wi=!0,vi=Tb}finally{try{!Zi&&li.return&&li.return()}finally{if(Wi)throw vi}}var w=n.length,Li=w;for(w&&n.push(X);Li<U;){var yi=T,Xi=!0,hl=!1,_i=void 0;try{for(var $i=m[Symbol.iterator](),bb;!(Xi=(bb=$i.next()).done);Xi=!0){var Cl=bb.value;Cl>=h&&Cl<yi&&(yi=Cl)}}catch(Tb){hl=!0,_i=Tb}finally{try{!Xi&&$i.return&&$i.return()}finally{if(hl)throw _i}}var Hi=Li+1;yi-h>$((T-j)/Hi)&&q("overflow"),j+=(yi-h)*Hi,h=yi;var qi=!0,Hl=!1,el=void 0;try{for(var pb=m[Symbol.iterator](),F9;!(qi=(F9=pb.next()).done);qi=!0){var p9=F9.value;if(p9<h&&++j>T&&q("overflow"),p9==h){for(var VV=j,cV=x;;cV+=x){var dV=cV<=Q?v:cV>=Q+R?R:cV-Q;if(VV<dV)break;var T9=VV-dV,r9=x-dV;n.push(mi(f(dV+T9%r9,0))),VV=$(T9/r9)}n.push(mi(f(VV,0))),Q=L(j,Hi,Li==w),j=0,++Li}}}catch(Tb){Hl=!0,el=Tb}finally{try{!qi&&pb.return&&pb.return()}finally{if(Hl)throw el}}++j,++h}return n.join("")},Z=function(m){return Gi(m,function(n){return S.test(n)?F(n.slice(4).toLowerCase()):n})},t=function(m){return Gi(m,function(n){return r.test(n)?"xn--"+G(n):n})},N={version:"2.1.0",ucs2:{decode:Yi,encode:zi},decode:F,encode:G,toASCII:t,toUnicode:Z},E={};function z(a){var m=a.charCodeAt(0),n=void 0;return m<16?n="%0"+m.toString(16).toUpperCase():m<128?n="%"+m.toString(16).toUpperCase():m<2048?n="%"+(m>>6|192).toString(16).toUpperCase()+"%"+(m&63|128).toString(16).toUpperCase():n="%"+(m>>12|224).toString(16).toUpperCase()+"%"+(m>>6&63|128).toString(16).toUpperCase()+"%"+(m&63|128).toString(16).toUpperCase(),n}function ii(a){for(var m="",n=0,U=a.length;n<U;){var h=parseInt(a.substr(n+1,2),16);if(h<128)m+=String.fromCharCode(h),n+=3;else if(h>=194&&h<224){if(U-n>=6){var j=parseInt(a.substr(n+4,2),16);m+=String.fromCharCode((h&31)<<6|j&63)}else m+=a.substr(n,6);n+=6}else if(h>=224){if(U-n>=9){var Q=parseInt(a.substr(n+4,2),16),Zi=parseInt(a.substr(n+7,2),16);m+=String.fromCharCode((h&15)<<12|(Q&63)<<6|Zi&63)}else m+=a.substr(n,9);n+=9}else m+=a.substr(n,3),n+=3}return m}function ci(a,m){function n(U){var h=ii(U);return h.match(m.UNRESERVED)?h:U}return a.scheme&&(a.scheme=String(a.scheme).replace(m.PCT_ENCODED,n).toLowerCase().replace(m.NOT_SCHEME,"")),a.userinfo!==void 0&&(a.userinfo=String(a.userinfo).replace(m.PCT_ENCODED,n).replace(m.NOT_USERINFO,z).replace(m.PCT_ENCODED,e)),a.host!==void 0&&(a.host=String(a.host).replace(m.PCT_ENCODED,n).toLowerCase().replace(m.NOT_HOST,z).replace(m.PCT_ENCODED,e)),a.path!==void 0&&(a.path=String(a.path).replace(m.PCT_ENCODED,n).replace(a.scheme?m.NOT_PATH:m.NOT_PATH_NOSCHEME,z).replace(m.PCT_ENCODED,e)),a.query!==void 0&&(a.query=String(a.query).replace(m.PCT_ENCODED,n).replace(m.NOT_QUERY,z).replace(m.PCT_ENCODED,e)),a.fragment!==void 0&&(a.fragment=String(a.fragment).replace(m.PCT_ENCODED,n).replace(m.NOT_FRAGMENT,z).replace(m.PCT_ENCODED,e)),a}function hi(a){return a.replace(/^0*(.*)/,"$1")||"0"}function Pi(a,m){var n=a.match(m.IPV4ADDRESS)||[],U=y(n,2),h=U[1];return h?h.split(".").map(hi).join("."):a}function Al(a,m){var n=a.match(m.IPV6ADDRESS)||[],U=y(n,3),h=U[1],j=U[2];if(h){for(var Q=h.toLowerCase().split("::").reverse(),Zi=y(Q,2),Wi=Zi[0],vi=Zi[1],li=vi?vi.split(":").map(hi):[],ti=Wi.split(":").map(hi),Ui=m.IPV4ADDRESS.test(ti[ti.length-1]),w=Ui?7:8,Li=ti.length-w,yi=Array(w),Xi=0;Xi<w;++Xi)yi[Xi]=li[Xi]||ti[Li+Xi]||"";Ui&&(yi[w-1]=Pi(yi[w-1],m));var hl=yi.reduce(function(Hi,qi,Hl){if(!qi||qi==="0"){var el=Hi[Hi.length-1];el&&el.index+el.length===Hl?el.length++:Hi.push({index:Hl,length:1})}return Hi},[]),_i=hl.sort(function(Hi,qi){return qi.length-Hi.length})[0],$i=void 0;if(_i&&_i.length>1){var bb=yi.slice(0,_i.index),Cl=yi.slice(_i.index+_i.length);$i=bb.join(":")+"::"+Cl.join(":")}else $i=yi.join(":");return j&&($i+="%"+j),$i}else return a}var Ub=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,yb="".match(/(){0}/)[1]===void 0;function ki(a){var m=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n={},U=m.iri!==!1?W:s;m.reference==="suffix"&&(a=(m.scheme?m.scheme+":":"")+"//"+a);var h=a.match(Ub);if(h){yb?(n.scheme=h[1],n.userinfo=h[3],n.host=h[4],n.port=parseInt(h[5],10),n.path=h[6]||"",n.query=h[7],n.fragment=h[8],isNaN(n.port)&&(n.port=h[5])):(n.scheme=h[1]||void 0,n.userinfo=a.indexOf("@")!==-1?h[3]:void 0,n.host=a.indexOf("//")!==-1?h[4]:void 0,n.port=parseInt(h[5],10),n.path=h[6]||"",n.query=a.indexOf("?")!==-1?h[7]:void 0,n.fragment=a.indexOf("#")!==-1?h[8]:void 0,isNaN(n.port)&&(n.port=a.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?h[4]:void 0)),n.host&&(n.host=Al(Pi(n.host,U),U)),n.scheme===void 0&&n.userinfo===void 0&&n.host===void 0&&n.port===void 0&&!n.path&&n.query===void 0?n.reference="same-document":n.scheme===void 0?n.reference="relative":n.fragment===void 0?n.reference="absolute":n.reference="uri",m.reference&&m.reference!=="suffix"&&m.reference!==n.reference&&(n.error=n.error||"URI is not a "+m.reference+" reference.");var j=E[(m.scheme||n.scheme||"").toLowerCase()];if(!m.unicodeSupport&&(!j||!j.unicodeSupport)){if(n.host&&(m.domainHost||j&&j.domainHost))try{n.host=N.toASCII(n.host.replace(U.PCT_ENCODED,ii).toLowerCase())}catch(Q){n.error=n.error||"Host's domain name can not be converted to ASCII via punycode: "+Q}ci(n,s)}else ci(n,U);j&&j.parse&&j.parse(n,m)}else n.error=n.error||"URI can not be parsed.";return n}function Sb(a,m){var n=m.iri!==!1?W:s,U=[];return a.userinfo!==void 0&&(U.push(a.userinfo),U.push("@")),a.host!==void 0&&U.push(Al(Pi(String(a.host),n),n).replace(n.IPV6ADDRESS,function(h,j,Q){return"["+j+(Q?"%25"+Q:"")+"]"})),(typeof a.port=="number"||typeof a.port=="string")&&(U.push(":"),U.push(String(a.port))),U.length?U.join(""):void 0}var _l=/^\.\.?\//,$l=/^\/\.(\/|$)/,ql=/^\/\.\.(\/|$)/,Yb=/^\/?(?:.|\n)*?(?=\/|$)/;function Di(a){for(var m=[];a.length;)if(a.match(_l))a=a.replace(_l,"");else if(a.match($l))a=a.replace($l,"/");else if(a.match(ql))a=a.replace(ql,"/"),m.pop();else if(a==="."||a==="..")a="";else{var n=a.match(Yb);if(n){var U=n[0];a=a.slice(U.length),m.push(U)}else throw new Error("Unexpected dot segment condition")}return m.join("")}function ri(a){var m=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=m.iri?W:s,U=[],h=E[(m.scheme||a.scheme||"").toLowerCase()];if(h&&h.serialize&&h.serialize(a,m),a.host&&!n.IPV6ADDRESS.test(a.host)){if(m.domainHost||h&&h.domainHost)try{a.host=m.iri?N.toUnicode(a.host):N.toASCII(a.host.replace(n.PCT_ENCODED,ii).toLowerCase())}catch(Zi){a.error=a.error||"Host's domain name can not be converted to "+(m.iri?"Unicode":"ASCII")+" via punycode: "+Zi}}ci(a,n),m.reference!=="suffix"&&a.scheme&&(U.push(a.scheme),U.push(":"));var j=Sb(a,m);if(j!==void 0&&(m.reference!=="suffix"&&U.push("//"),U.push(j),a.path&&a.path.charAt(0)!=="/"&&U.push("/")),a.path!==void 0){var Q=a.path;!m.absolutePath&&(!h||!h.absolutePath)&&(Q=Di(Q)),j===void 0&&(Q=Q.replace(/^\/\//,"/%2F")),U.push(Q)}return a.query!==void 0&&(U.push("?"),U.push(a.query)),a.fragment!==void 0&&(U.push("#"),U.push(a.fragment)),U.join("")}function ib(a,m){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},U=arguments[3],h={};return U||(a=ki(ri(a,n),n),m=ki(ri(m,n),n)),n=n||{},!n.tolerant&&m.scheme?(h.scheme=m.scheme,h.userinfo=m.userinfo,h.host=m.host,h.port=m.port,h.path=Di(m.path||""),h.query=m.query):(m.userinfo!==void 0||m.host!==void 0||m.port!==void 0?(h.userinfo=m.userinfo,h.host=m.host,h.port=m.port,h.path=Di(m.path||""),h.query=m.query):(m.path?(m.path.charAt(0)==="/"?h.path=Di(m.path):((a.userinfo!==void 0||a.host!==void 0||a.port!==void 0)&&!a.path?h.path="/"+m.path:a.path?h.path=a.path.slice(0,a.path.lastIndexOf("/")+1)+m.path:h.path=m.path,h.path=Di(h.path)),h.query=m.query):(h.path=a.path,m.query!==void 0?h.query=m.query:h.query=a.query),h.userinfo=a.userinfo,h.host=a.host,h.port=a.port),h.scheme=a.scheme),h.fragment=m.fragment,h}function Jb(a,m,n){var U=o({scheme:"null"},n);return ri(ib(ki(a,U),ki(m,U),U,!0),U)}function El(a,m){return typeof a=="string"?a=ri(ki(a,m),m):d(a)==="object"&&(a=ki(ri(a,m),m)),a}function Nb(a,m,n){return typeof a=="string"?a=ri(ki(a,n),n):d(a)==="object"&&(a=ri(a,n)),typeof m=="string"?m=ri(ki(m,n),n):d(m)==="object"&&(m=ri(m,n)),a===m}function bV(a,m){return a&&a.toString().replace(!m||!m.iri?s.ESCAPE:W.ESCAPE,z)}function Ci(a,m){return a&&a.toString().replace(!m||!m.iri?s.PCT_ENCODED:W.PCT_ENCODED,ii)}var zl={scheme:"http",domainHost:!0,parse:function(m,n){return m.host||(m.error=m.error||"HTTP URIs must have a host."),m},serialize:function(m,n){var U=String(m.scheme).toLowerCase()==="https";return(m.port===(U?443:80)||m.port==="")&&(m.port=void 0),m.path||(m.path="/"),m}},h9={scheme:"https",domainHost:zl.domainHost,parse:zl.parse,serialize:zl.serialize};function v9(a){return typeof a.secure=="boolean"?a.secure:String(a.scheme).toLowerCase()==="wss"}var Fb={scheme:"ws",domainHost:!0,parse:function(m,n){var U=m;return U.secure=v9(U),U.resourceName=(U.path||"/")+(U.query?"?"+U.query:""),U.path=void 0,U.query=void 0,U},serialize:function(m,n){if((m.port===(v9(m)?443:80)||m.port==="")&&(m.port=void 0),typeof m.secure=="boolean"&&(m.scheme=m.secure?"wss":"ws",m.secure=void 0),m.resourceName){var U=m.resourceName.split("?"),h=y(U,2),j=h[0],Q=h[1];m.path=j&&j!=="/"?j:void 0,m.query=Q,m.resourceName=void 0}return m.fragment=void 0,m}},U9={scheme:"wss",domainHost:Fb.domainHost,parse:Fb.parse,serialize:Fb.serialize},Ym={},y9="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",Ai="[0-9A-Fa-f]",Jm=c(c("%[EFef]"+Ai+"%"+Ai+Ai+"%"+Ai+Ai)+"|"+c("%[89A-Fa-f]"+Ai+"%"+Ai+Ai)+"|"+c("%"+Ai+Ai)),Nm="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",Fm="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",pm=V(Fm,'[\\"\\\\]'),Tm="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",rm=new RegExp(y9,"g"),lb=new RegExp(Jm,"g"),km=new RegExp(V("[^]",Nm,"[\\.]",'[\\"]',pm),"g"),S9=new RegExp(V("[^]",y9,Tm),"g"),xm=S9;function gV(a){var m=ii(a);return m.match(rm)?m:a}var Y9={scheme:"mailto",parse:function(m,n){var U=m,h=U.to=U.path?U.path.split(","):[];if(U.path=void 0,U.query){for(var j=!1,Q={},Zi=U.query.split("&"),Wi=0,vi=Zi.length;Wi<vi;++Wi){var li=Zi[Wi].split("=");switch(li[0]){case"to":for(var ti=li[1].split(","),Ui=0,w=ti.length;Ui<w;++Ui)h.push(ti[Ui]);break;case"subject":U.subject=Ci(li[1],n);break;case"body":U.body=Ci(li[1],n);break;default:j=!0,Q[Ci(li[0],n)]=Ci(li[1],n);break}}j&&(U.headers=Q)}U.query=void 0;for(var Li=0,yi=h.length;Li<yi;++Li){var Xi=h[Li].split("@");if(Xi[0]=Ci(Xi[0]),n.unicodeSupport)Xi[1]=Ci(Xi[1],n).toLowerCase();else try{Xi[1]=N.toASCII(Ci(Xi[1],n).toLowerCase())}catch(hl){U.error=U.error||"Email address's domain name can not be converted to ASCII via punycode: "+hl}h[Li]=Xi.join("@")}return U},serialize:function(m,n){var U=m,h=u(m.to);if(h){for(var j=0,Q=h.length;j<Q;++j){var Zi=String(h[j]),Wi=Zi.lastIndexOf("@"),vi=Zi.slice(0,Wi).replace(lb,gV).replace(lb,e).replace(km,z),li=Zi.slice(Wi+1);try{li=n.iri?N.toUnicode(li):N.toASCII(Ci(li,n).toLowerCase())}catch(Li){U.error=U.error||"Email address's domain name can not be converted to "+(n.iri?"Unicode":"ASCII")+" via punycode: "+Li}h[j]=vi+"@"+li}U.path=h.join(",")}var ti=m.headers=m.headers||{};m.subject&&(ti.subject=m.subject),m.body&&(ti.body=m.body);var Ui=[];for(var w in ti)ti[w]!==Ym[w]&&Ui.push(w.replace(lb,gV).replace(lb,e).replace(S9,z)+"="+ti[w].replace(lb,gV).replace(lb,e).replace(xm,z));return Ui.length&&(U.query=Ui.join("&")),U}},fm=/^([^\:]+)\:(.*)/,J9={scheme:"urn",parse:function(m,n){var U=m.path&&m.path.match(fm),h=m;if(U){var j=n.scheme||h.scheme||"urn",Q=U[1].toLowerCase(),Zi=U[2],Wi=j+":"+(n.nid||Q),vi=E[Wi];h.nid=Q,h.nss=Zi,h.path=void 0,vi&&(h=vi.parse(h,n))}else h.error=h.error||"URN can not be parsed.";return h},serialize:function(m,n){var U=n.scheme||m.scheme||"urn",h=m.nid,j=U+":"+(n.nid||h),Q=E[j];Q&&(m=Q.serialize(m,n));var Zi=m,Wi=m.nss;return Zi.path=(h||n.nid)+":"+Wi,Zi}},Em=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,N9={scheme:"urn:uuid",parse:function(m,n){var U=m;return U.uuid=U.nss,U.nss=void 0,!n.tolerant&&(!U.uuid||!U.uuid.match(Em))&&(U.error=U.error||"UUID is not valid."),U},serialize:function(m,n){var U=m;return U.nss=(m.uuid||"").toLowerCase(),U}};E[zl.scheme]=zl,E[h9.scheme]=h9,E[Fb.scheme]=Fb,E[U9.scheme]=U9,E[Y9.scheme]=Y9,E[J9.scheme]=J9,E[N9.scheme]=N9,b.SCHEMES=E,b.pctEncChar=z,b.pctDecChars=ii,b.parse=ki,b.removeDotSegments=Di,b.serialize=ri,b.resolveComponents=ib,b.resolve=Jb,b.normalize=El,b.equal=Nb,b.escapeComponent=bV,b.unescapeComponent=Ci,Object.defineProperty(b,"__esModule",{value:!0})})})(XV,XV.exports),Object.defineProperty(LV,"__esModule",{value:!0});const Uc=XV.exports;Uc.code='require("ajv/dist/runtime/uri").default',LV.default=Uc,function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.CodeGen=i.Name=i.nil=i.stringify=i.str=i._=i.KeywordCxt=void 0;var l=gi;Object.defineProperty(i,"KeywordCxt",{enumerable:!0,get:function(){return l.KeywordCxt}});var b=si;Object.defineProperty(i,"_",{enumerable:!0,get:function(){return b._}}),Object.defineProperty(i,"str",{enumerable:!0,get:function(){return b.str}}),Object.defineProperty(i,"stringify",{enumerable:!0,get:function(){return b.stringify}}),Object.defineProperty(i,"nil",{enumerable:!0,get:function(){return b.nil}}),Object.defineProperty(i,"Name",{enumerable:!0,get:function(){return b.Name}}),Object.defineProperty(i,"CodeGen",{enumerable:!0,get:function(){return b.CodeGen}});const V=jb,c=Yl,d=yl,e=Fi,u=si,o=Ji,I=Eb,s=Si,W=oZ,y=LV,k=(f,L)=>new RegExp(f,L);k.code="new RegExp";const T=["removeAdditional","useDefaults","coerceTypes"],x=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),v={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."},R={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},Y=200;function J(f){var L,F,G,Z,t,N,E,z,ii,ci,hi,Pi,Al,Ub,yb,ki,Sb,_l,$l,ql,Yb,Di,ri,ib,Jb;const El=f.strict,Nb=(L=f.code)===null||L===void 0?void 0:L.optimize,bV=Nb===!0||Nb===void 0?1:Nb||0,Ci=(G=(F=f.code)===null||F===void 0?void 0:F.regExp)!==null&&G!==void 0?G:k,zl=(Z=f.uriResolver)!==null&&Z!==void 0?Z:y.default;return{strictSchema:(N=(t=f.strictSchema)!==null&&t!==void 0?t:El)!==null&&N!==void 0?N:!0,strictNumbers:(z=(E=f.strictNumbers)!==null&&E!==void 0?E:El)!==null&&z!==void 0?z:!0,strictTypes:(ci=(ii=f.strictTypes)!==null&&ii!==void 0?ii:El)!==null&&ci!==void 0?ci:"log",strictTuples:(Pi=(hi=f.strictTuples)!==null&&hi!==void 0?hi:El)!==null&&Pi!==void 0?Pi:"log",strictRequired:(Ub=(Al=f.strictRequired)!==null&&Al!==void 0?Al:El)!==null&&Ub!==void 0?Ub:!1,code:f.code?ai(A({},f.code),{optimize:bV,regExp:Ci}):{optimize:bV,regExp:Ci},loopRequired:(yb=f.loopRequired)!==null&&yb!==void 0?yb:Y,loopEnum:(ki=f.loopEnum)!==null&&ki!==void 0?ki:Y,meta:(Sb=f.meta)!==null&&Sb!==void 0?Sb:!0,messages:(_l=f.messages)!==null&&_l!==void 0?_l:!0,inlineRefs:($l=f.inlineRefs)!==null&&$l!==void 0?$l:!0,schemaId:(ql=f.schemaId)!==null&&ql!==void 0?ql:"$id",addUsedSchema:(Yb=f.addUsedSchema)!==null&&Yb!==void 0?Yb:!0,validateSchema:(Di=f.validateSchema)!==null&&Di!==void 0?Di:!0,validateFormats:(ri=f.validateFormats)!==null&&ri!==void 0?ri:!0,unicodeRegExp:(ib=f.unicodeRegExp)!==null&&ib!==void 0?ib:!0,int32range:(Jb=f.int32range)!==null&&Jb!==void 0?Jb:!0,uriResolver:zl}}class p{constructor(L={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,L=this.opts=A(A({},L),J(L));const{es5:F,lines:G}=this.opts.code;this.scope=new u.ValueScope({scope:{},prefixes:x,es5:F,lines:G}),this.logger=$(L.logger);const Z=L.validateFormats;L.validateFormats=!1,this.RULES=(0,d.getRules)(),M.call(this,v,L,"NOT SUPPORTED"),M.call(this,R,L,"DEPRECATED","warn"),this._metaOpts=D.call(this),L.formats&&r.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),L.keywords&&g.call(this,L.keywords),typeof L.meta=="object"&&this.addMetaSchema(L.meta),S.call(this),L.validateFormats=Z}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:L,meta:F,schemaId:G}=this.opts;let Z=W;G==="id"&&(Z=A({},W),Z.id=Z.$id,delete Z.$id),F&&L&&this.addMetaSchema(Z,Z[G],!1)}defaultMeta(){const{meta:L,schemaId:F}=this.opts;return this.opts.defaultMeta=typeof L=="object"?L[F]||L:void 0}validate(L,F){let G;if(typeof L=="string"){if(G=this.getSchema(L),!G)throw new Error(`no schema with key or ref "${L}"`)}else G=this.compile(L);const Z=G(F);return"$async"in G||(this.errors=G.errors),Z}compile(L,F){const G=this._addSchema(L,F);return G.validate||this._compileSchemaEnv(G)}compileAsync(L,F){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema:G}=this.opts;return Z.call(this,L,F);async function Z(ci,hi){await t.call(this,ci.$schema);const Pi=this._addSchema(ci,hi);return Pi.validate||N.call(this,Pi)}async function t(ci){ci&&!this.getSchema(ci)&&await Z.call(this,{$ref:ci},!0)}async function N(ci){try{return this._compileSchemaEnv(ci)}catch(hi){if(!(hi instanceof c.default))throw hi;return E.call(this,hi),await z.call(this,hi.missingSchema),N.call(this,ci)}}function E({missingSchema:ci,missingRef:hi}){if(this.refs[ci])throw new Error(`AnySchema ${ci} is loaded but ${hi} cannot be resolved`)}async function z(ci){const hi=await ii.call(this,ci);this.refs[ci]||await t.call(this,hi.$schema),this.refs[ci]||this.addSchema(hi,ci,F)}async function ii(ci){const hi=this._loading[ci];if(hi)return hi;try{return await(this._loading[ci]=G(ci))}finally{delete this._loading[ci]}}}addSchema(L,F,G,Z=this.opts.validateSchema){if(Array.isArray(L)){for(const N of L)this.addSchema(N,void 0,G,Z);return this}let t;if(typeof L=="object"){const{schemaId:N}=this.opts;if(t=L[N],t!==void 0&&typeof t!="string")throw new Error(`schema ${N} must be string`)}return F=(0,o.normalizeId)(F||t),this._checkUnique(F),this.schemas[F]=this._addSchema(L,G,F,Z,!0),this}addMetaSchema(L,F,G=this.opts.validateSchema){return this.addSchema(L,F,!0,G),this}validateSchema(L,F){if(typeof L=="boolean")return!0;let G;if(G=L.$schema,G!==void 0&&typeof G!="string")throw new Error("$schema must be a string");if(G=G||this.opts.defaultMeta||this.defaultMeta(),!G)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const Z=this.validate(G,L);if(!Z&&F){const t="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(t);else throw new Error(t)}return Z}getSchema(L){let F;for(;typeof(F=X.call(this,L))=="string";)L=F;if(F===void 0){const{schemaId:G}=this.opts,Z=new e.SchemaEnv({schema:{},schemaId:G});if(F=e.resolveSchema.call(this,Z,L),!F)return;this.refs[L]=F}return F.validate||this._compileSchemaEnv(F)}removeSchema(L){if(L instanceof RegExp)return this._removeAllSchemas(this.schemas,L),this._removeAllSchemas(this.refs,L),this;switch(typeof L){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const F=X.call(this,L);return typeof F=="object"&&this._cache.delete(F.schema),delete this.schemas[L],delete this.refs[L],this}case"object":{const F=L;this._cache.delete(F);let G=L[this.opts.schemaId];return G&&(G=(0,o.normalizeId)(G),delete this.schemas[G],delete this.refs[G]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(L){for(const F of L)this.addKeyword(F);return this}addKeyword(L,F){let G;if(typeof L=="string")G=L,typeof F=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),F.keyword=G);else if(typeof L=="object"&&F===void 0){if(F=L,G=F.keyword,Array.isArray(G)&&!G.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(q.call(this,G,F),!F)return(0,s.eachItem)(G,t=>Ri.call(this,t)),this;Yi.call(this,F);const Z=ai(A({},F),{type:(0,I.getJSONTypes)(F.type),schemaType:(0,I.getJSONTypes)(F.schemaType)});return(0,s.eachItem)(G,Z.type.length===0?t=>Ri.call(this,t,Z):t=>Z.type.forEach(N=>Ri.call(this,t,Z,N))),this}getKeyword(L){const F=this.RULES.all[L];return typeof F=="object"?F.definition:!!F}removeKeyword(L){const{RULES:F}=this;delete F.keywords[L],delete F.all[L];for(const G of F.rules){const Z=G.rules.findIndex(t=>t.keyword===L);Z>=0&&G.rules.splice(Z,1)}return this}addFormat(L,F){return typeof F=="string"&&(F=new RegExp(F)),this.formats[L]=F,this}errorsText(L=this.errors,{separator:F=", ",dataVar:G="data"}={}){return!L||L.length===0?"No errors":L.map(Z=>`${G}${Z.instancePath} ${Z.message}`).reduce((Z,t)=>Z+F+t)}$dataMetaSchema(L,F){const G=this.RULES.all;L=JSON.parse(JSON.stringify(L));for(const Z of F){const t=Z.split("/").slice(1);let N=L;for(const E of t)N=N[E];for(const E in G){const z=G[E];if(typeof z!="object")continue;const{$data:ii}=z.definition,ci=N[E];ii&&ci&&(N[E]=Dl(ci))}}return L}_removeAllSchemas(L,F){for(const G in L){const Z=L[G];(!F||F.test(G))&&(typeof Z=="string"?delete L[G]:Z&&!Z.meta&&(this._cache.delete(Z.schema),delete L[G]))}}_addSchema(L,F,G,Z=this.opts.validateSchema,t=this.opts.addUsedSchema){let N;const{schemaId:E}=this.opts;if(typeof L=="object")N=L[E];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof L!="boolean")throw new Error("schema must be object or boolean")}let z=this._cache.get(L);if(z!==void 0)return z;G=(0,o.normalizeId)(N||G);const ii=o.getSchemaRefs.call(this,L,G);return z=new e.SchemaEnv({schema:L,schemaId:E,meta:F,baseId:G,localRefs:ii}),this._cache.set(z.schema,z),t&&!G.startsWith("#")&&(G&&this._checkUnique(G),this.refs[G]=z),Z&&this.validateSchema(L,!0),z}_checkUnique(L){if(this.schemas[L]||this.refs[L])throw new Error(`schema with key or id "${L}" already exists`)}_compileSchemaEnv(L){if(L.meta?this._compileMetaSchema(L):e.compileSchema.call(this,L),!L.validate)throw new Error("ajv implementation error");return L.validate}_compileMetaSchema(L){const F=this.opts;this.opts=this._metaOpts;try{e.compileSchema.call(this,L)}finally{this.opts=F}}}i.default=p,p.ValidationError=V.default,p.MissingRefError=c.default;function M(f,L,F,G="error"){for(const Z in f){const t=Z;t in L&&this.logger[G](`${F}: option ${Z}. ${f[t]}`)}}function X(f){return f=(0,o.normalizeId)(f),this.schemas[f]||this.refs[f]}function S(){const f=this.opts.schemas;if(!!f)if(Array.isArray(f))this.addSchema(f);else for(const L in f)this.addSchema(f[L],L)}function r(){for(const f in this.opts.formats){const L=this.opts.formats[f];L&&this.addFormat(f,L)}}function g(f){if(Array.isArray(f)){this.addVocabulary(f);return}this.logger.warn("keywords option as map is deprecated, pass array");for(const L in f){const F=f[L];F.keyword||(F.keyword=L),this.addKeyword(F)}}function D(){const f=A({},this.opts);for(const L of T)delete f[L];return f}const Ii={log(){},warn(){},error(){}};function $(f){if(f===!1)return Ii;if(f===void 0)return console;if(f.log&&f.warn&&f.error)return f;throw new Error("logger must implement log, warn and error methods")}const mi=/^[a-z_$][a-z0-9_$:-]*$/i;function q(f,L){const{RULES:F}=this;if((0,s.eachItem)(f,G=>{if(F.keywords[G])throw new Error(`Keyword ${G} is already defined`);if(!mi.test(G))throw new Error(`Keyword ${G} has invalid name`)}),!!L&&L.$data&&!("code"in L||"validate"in L))throw new Error('$data keyword must have "code" or "validate" function')}function Ri(f,L,F){var G;const Z=L==null?void 0:L.post;if(F&&Z)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:t}=this;let N=Z?t.post:t.rules.find(({type:z})=>z===F);if(N||(N={type:F,rules:[]},t.rules.push(N)),t.keywords[f]=!0,!L)return;const E={keyword:f,definition:ai(A({},L),{type:(0,I.getJSONTypes)(L.type),schemaType:(0,I.getJSONTypes)(L.schemaType)})};L.before?Gi.call(this,N,E,L.before):N.rules.push(E),t.all[f]=E,(G=L.implements)===null||G===void 0||G.forEach(z=>this.addKeyword(z))}function Gi(f,L,F){const G=f.rules.findIndex(Z=>Z.keyword===F);G>=0?f.rules.splice(G,0,L):(f.rules.push(L),this.logger.warn(`rule ${F} is not defined`))}function Yi(f){let{metaSchema:L}=f;L!==void 0&&(f.$data&&this.opts.$data&&(L=Dl(L)),f.validateSchema=this.compile(L,!0))}const zi={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function Dl(f){return{anyOf:[f,zi]}}}(wV);var GV={},Nl={},Fl={};Object.defineProperty(Fl,"__esModule",{value:!0}),Fl.callRef=Fl.getValidate=void 0;const RZ=Yl,yc=di,Ti=si,Ol=xi,Sc=Fi,gb=Si,LZ={keyword:"$ref",schemaType:"string",code(i){const{gen:l,schema:b,it:V}=i,{baseId:c,schemaEnv:d,validateName:e,opts:u,self:o}=V,{root:I}=d;if((b==="#"||b==="#/")&&c===I.baseId)return W();const s=Sc.resolveRef.call(o,I,c,b);if(s===void 0)throw new RZ.default(V.opts.uriResolver,c,b);if(s instanceof Sc.SchemaEnv)return y(s);return k(s);function W(){if(d===I)return Ob(i,e,d,d.$async);const T=l.scopeValue("root",{ref:I});return Ob(i,(0,Ti._)`${T}.validate`,I,I.$async)}function y(T){const x=Yc(i,T);Ob(i,x,T,T.$async)}function k(T){const x=l.scopeValue("schema",u.code.source===!0?{ref:T,code:(0,Ti.stringify)(T)}:{ref:T}),v=l.name("valid"),R=i.subschema({schema:T,dataTypes:[],schemaPath:Ti.nil,topSchemaRef:x,errSchemaPath:b},v);i.mergeEvaluated(R),i.ok(v)}}};function Yc(i,l){const{gen:b}=i;return l.validate?b.scopeValue("validate",{ref:l.validate}):(0,Ti._)`${b.scopeValue("wrapper",{ref:l})}.validate`}Fl.getValidate=Yc;function Ob(i,l,b,V){const{gen:c,it:d}=i,{allErrors:e,schemaEnv:u,opts:o}=d,I=o.passContext?Ol.default.this:Ti.nil;V?s():W();function s(){if(!u.$async)throw new Error("async schema referenced by sync schema");const T=c.let("valid");c.try(()=>{c.code((0,Ti._)`await ${(0,yc.callValidateCode)(i,l,I)}`),k(l),e||c.assign(T,!0)},x=>{c.if((0,Ti._)`!(${x} instanceof ${d.ValidationError})`,()=>c.throw(x)),y(x),e||c.assign(T,!1)}),i.ok(T)}function W(){i.result((0,yc.callValidateCode)(i,l,I),()=>k(l),()=>y(l))}function y(T){const x=(0,Ti._)`${T}.errors`;c.assign(Ol.default.vErrors,(0,Ti._)`${Ol.default.vErrors} === null ? ${x} : ${Ol.default.vErrors}.concat(${x})`),c.assign(Ol.default.errors,(0,Ti._)`${Ol.default.vErrors}.length`)}function k(T){var x;if(!d.opts.unevaluated)return;const v=(x=b==null?void 0:b.validate)===null||x===void 0?void 0:x.evaluated;if(d.props!==!0)if(v&&!v.dynamicProps)v.props!==void 0&&(d.props=gb.mergeEvaluated.props(c,v.props,d.props));else{const R=c.var("props",(0,Ti._)`${T}.evaluated.props`);d.props=gb.mergeEvaluated.props(c,R,d.props,Ti.Name)}if(d.items!==!0)if(v&&!v.dynamicItems)v.items!==void 0&&(d.items=gb.mergeEvaluated.items(c,v.items,d.items));else{const R=c.var("items",(0,Ti._)`${T}.evaluated.items`);d.items=gb.mergeEvaluated.items(c,R,d.items,Ti.Name)}}}Fl.callRef=Ob,Fl.default=LZ;var fi={};Object.defineProperty(fi,"__esModule",{value:!0}),fi.checkMetadata=void 0;const XZ=Si,GZ={keyword:"metadata",schemaType:"object",code(i){Jc(i);const{gen:l,schema:b,it:V}=i;if((0,XZ.alwaysValidSchema)(V,b))return;const c=l.name("valid");i.subschema({keyword:"metadata",jtdMetadata:!0},c),i.ok(c)}};function Jc({it:i,keyword:l},b){if(i.jtdMetadata!==b)throw new Error(`JTD: "${l}" cannot be used in this schema location`)}fi.checkMetadata=Jc,fi.default=GZ,Object.defineProperty(Nl,"__esModule",{value:!0}),Nl.hasRef=void 0;const Nc=Fi,eb=si,hZ=Yl,Fc=xi,pc=Fl,vZ=fi,UZ={keyword:"ref",schemaType:"string",code(i){(0,vZ.checkMetadata)(i);const{gen:l,data:b,schema:V,parentSchema:c,it:d}=i,{schemaEnv:{root:e}}=d,u=l.name("valid");c.nullable?(l.var(u,(0,eb._)`${b} === null`),l.if((0,eb.not)(u),o)):(l.var(u,!1),o()),i.ok(u);function o(){var W;const y=(W=e.schema.definitions)===null||W===void 0?void 0:W[V];if(!y)throw new hZ.default(d.opts.uriResolver,"",V,`No definition ${V}`);hV(y)||!d.opts.inlineRefs?I(y):s(y)}function I(W){const y=Nc.compileSchema.call(d.self,new Nc.SchemaEnv({schema:W,root:e,schemaPath:`/definitions/${V}`})),k=(0,pc.getValidate)(i,y),T=l.const("_errs",Fc.default.errors);(0,pc.callRef)(i,k,y,y.$async),l.assign(u,(0,eb._)`${T} === ${Fc.default.errors}`)}function s(W){const y=l.scopeValue("schema",d.opts.code.source===!0?{ref:W,code:(0,eb.stringify)(W)}:{ref:W});i.subschema({schema:W,dataTypes:[],schemaPath:eb.nil,topSchemaRef:y,errSchemaPath:`/definitions/${V}`},u)}}};function hV(i){for(const l in i){let b;if(l==="ref"||typeof(b=i[l])=="object"&&hV(b))return!0}return!1}Nl.hasRef=hV,Nl.default=UZ;var vV={},Bb={};Object.defineProperty(Bb,"__esModule",{value:!0});const yZ=/t|\s/i,SZ=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,YZ=/^(\d\d):(\d\d):(\d\d)(?:\.\d+)?(?:z|([+-]\d\d)(?::?(\d\d))?)$/i,JZ=[0,31,28,31,30,31,30,31,31,30,31,30,31];function Tc(i,l){const b=i.split(yZ);return b.length===2&&rc(b[0])&&NZ(b[1])||l&&b.length===1&&rc(b[0])}Bb.default=Tc;function rc(i){const l=SZ.exec(i);if(!l)return!1;const b=+l[1],V=+l[2],c=+l[3];return V>=1&&V<=12&&c>=1&&(c<=JZ[V]||V===2&&c===29&&(b%100===0?b%400===0:b%4===0))}function NZ(i){const l=YZ.exec(i);if(!l)return!1;const b=+l[1],V=+l[2],c=+l[3],d=+(l[4]||0),e=+(l[5]||0);return b<=23&&V<=59&&c<=59||b-d===23&&V-e===59&&c===60}Tc.code='require("ajv/dist/runtime/timestamp").default';var Ei={};Object.defineProperty(Ei,"__esModule",{value:!0}),Ei.typeErrorParams=Ei.typeErrorMessage=Ei.typeError=void 0;const FZ=si;function pZ(i){return{message:l=>kc(l,i),params:l=>xc(l,i)}}Ei.typeError=pZ;function kc({parentSchema:i},l){return i!=null&&i.nullable?`must be ${l} or null`:`must be ${l}`}Ei.typeErrorMessage=kc;function xc({parentSchema:i},l){return(0,FZ._)`{type: ${l}, nullable: ${!!(i!=null&&i.nullable)}}`}Ei.typeErrorParams=xc,function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.intRange=void 0;const l=si,b=Bb,V=Si,c=fi,d=Ei;i.intRange={int8:[-128,127,3],uint8:[0,255,3],int16:[-32768,32767,5],uint16:[0,65535,5],int32:[-2147483648,2147483647,10],uint32:[0,4294967295,10]};const e={message:I=>(0,d.typeErrorMessage)(I,I.schema),params:I=>(0,d.typeErrorParams)(I,I.schema)};function u(I){const{gen:s,data:W,it:y}=I,{timestamp:k,allowDate:T}=y.opts;if(k==="date")return(0,l._)`${W} instanceof Date `;const x=(0,V.useFunc)(s,b.default),v=T?(0,l._)`, true`:l.nil,R=(0,l._)`typeof ${W} == "string" && ${x}(${W}${v})`;return k==="string"?R:(0,l.or)((0,l._)`${W} instanceof Date`,R)}const o={keyword:"type",schemaType:"string",error:e,code(I){(0,c.checkMetadata)(I);const{data:s,schema:W,parentSchema:y,it:k}=I;let T;switch(W){case"boolean":case"string":T=(0,l._)`typeof ${s} == ${W}`;break;case"timestamp":{T=u(I);break}case"float32":case"float64":T=(0,l._)`typeof ${s} == "number"`;break;default:{const x=W;if(T=(0,l._)`typeof ${s} == "number" && isFinite(${s}) && !(${s} % 1)`,!k.opts.int32range&&(x==="int32"||x==="uint32"))x==="uint32"&&(T=(0,l._)`${T} && ${s} >= 0`);else{const[v,R]=i.intRange[x];T=(0,l._)`${T} && ${s} >= ${v} && ${s} <= ${R}`}}}I.pass(y.nullable?(0,l.or)((0,l._)`${s} === null`,T):T)}};i.default=o}(vV);var UV={},wi={};Object.defineProperty(wi,"__esModule",{value:!0}),wi.checkNullableObject=wi.checkNullable=void 0;const wb=si;function fc({gen:i,data:l,parentSchema:b},V=wb.nil){const c=i.name("valid");return b.nullable?(i.let(c,(0,wb._)`${l} === null`),V=(0,wb.not)(c)):i.let(c,!1),[c,V]}wi.checkNullable=fc;function TZ(i,l){const[b,V]=fc(i,l);return[b,(0,wb._)`${V} && typeof ${i.data} == "object" && !Array.isArray(${i.data})`]}wi.checkNullableObject=TZ,Object.defineProperty(UV,"__esModule",{value:!0});const ul=si,rZ=fi,kZ=wi,xZ={keyword:"enum",schemaType:"array",error:{message:"must be equal to one of the allowed values",params:({schemaCode:i})=>(0,ul._)`{allowedValues: ${i}}`},code(i){(0,rZ.checkMetadata)(i);const{gen:l,data:b,schema:V,schemaValue:c,parentSchema:d,it:e}=i;if(V.length===0)throw new Error("enum must have non-empty array");if(V.length!==new Set(V).size)throw new Error("enum items must be unique");let u;const o=(0,ul._)`typeof ${b} == "string"`;if(V.length>=e.opts.loopEnum){let s;[u,s]=(0,kZ.checkNullable)(i,o),l.if(s,I)}else{if(!Array.isArray(V))throw new Error("ajv implementation error");u=(0,ul.and)(o,(0,ul.or)(...V.map(s=>(0,ul._)`${b} === ${s}`))),d.nullable&&(u=(0,ul.or)((0,ul._)`${b} === null`,u))}i.pass(u);function I(){l.forOf("v",c,s=>l.if((0,ul._)`${u} = ${b} === ${s}`,()=>l.break()))}}};UV.default=xZ;var yV={};Object.defineProperty(yV,"__esModule",{value:!0});const fZ=Si,EZ=di,Ec=si,zZ=fi,CZ=wi,HZ={keyword:"elements",schemaType:"object",error:(0,Ei.typeError)("array"),code(i){(0,zZ.checkMetadata)(i);const{gen:l,data:b,schema:V,it:c}=i;if((0,fZ.alwaysValidSchema)(c,V))return;const[d]=(0,CZ.checkNullable)(i);l.if((0,Ec.not)(d),()=>l.if((0,Ec._)`Array.isArray(${b})`,()=>l.assign(d,(0,EZ.validateArray)(i)),()=>i.error())),i.ok(d)}};yV.default=HZ;var SV={};(function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.validateProperties=i.error=void 0;const l=di,b=Si,V=si,c=fi,d=wi,e=Ei;var u;(function(s){s.Additional="additional",s.Missing="missing"})(u||(u={})),i.error={message:s=>{const{params:W}=s;return W.propError?W.propError===u.Additional?"must NOT have additional properties":`must have property '${W.missingProperty}'`:(0,e.typeErrorMessage)(s,"object")},params:s=>{const{params:W}=s;return W.propError?W.propError===u.Additional?(0,V._)`{error: ${W.propError}, additionalProperty: ${W.additionalProperty}}`:(0,V._)`{error: ${W.propError}, missingProperty: ${W.missingProperty}}`:(0,e.typeErrorParams)(s,"object")}};const o={keyword:"properties",schemaType:"object",error:i.error,code:I};function I(s){(0,c.checkMetadata)(s);const{gen:W,data:y,parentSchema:k,it:T}=s,{additionalProperties:x,nullable:v}=k;if(T.jtdDiscriminator&&v)throw new Error("JTD: nullable inside discriminator mapping");if(S())throw new Error("JTD: properties and optionalProperties have common members");const[R,Y]=r("properties"),[J,p]=r("optionalProperties");if(Y.length===0&&p.length===0&&x)return;const[M,X]=T.jtdDiscriminator===void 0?(0,d.checkNullableObject)(s,y):[W.let("valid",!1),!0];W.if(X,()=>W.assign(M,!0).block(()=>{g(Y,"properties",!0),g(p,"optionalProperties"),x||Ii()})),s.pass(M);function S(){const mi=k.properties,q=k.optionalProperties;if(!(mi&&q))return!1;for(const Ri in mi)if(Object.prototype.hasOwnProperty.call(q,Ri))return!0;return!1}function r(mi){const q=k[mi],Ri=q?(0,l.allSchemaProperties)(q):[];if(T.jtdDiscriminator&&Ri.some(Yi=>Yi===T.jtdDiscriminator))throw new Error(`JTD: discriminator tag used in ${mi}`);const Gi=Ri.filter(Yi=>!(0,b.alwaysValidSchema)(T,q[Yi]));return[Ri,Gi]}function g(mi,q,Ri){const Gi=W.var("valid");for(const zi of mi)W.if((0,l.propertyInData)(W,y,zi,T.opts.ownProperties),()=>D(zi,q,Gi),()=>Yi(zi)),s.ok(Gi);function Yi(zi){Ri?(W.assign(Gi,!1),s.error(!1,{propError:u.Missing,missingProperty:zi},{schemaPath:zi})):W.assign(Gi,!0)}}function D(mi,q,Ri){s.subschema({keyword:q,schemaProp:mi,dataProp:mi},Ri)}function Ii(){W.forIn("key",y,mi=>{const q=T.jtdDiscriminator===void 0?R:[T.jtdDiscriminator].concat(R),Ri=$(mi,q,"properties"),Gi=$(mi,J,"optionalProperties"),Yi=Ri===!0?Gi:Gi===!0?Ri:(0,V.and)(Ri,Gi);W.if(Yi,()=>{T.opts.removeAdditional?W.code((0,V._)`delete ${y}[${mi}]`):(s.error(!1,{propError:u.Additional,additionalProperty:mi},{instancePath:mi,parentSchema:!0}),T.opts.allErrors||W.break())})})}function $(mi,q,Ri){let Gi;if(q.length>8){const Yi=(0,b.schemaRefOrVal)(T,k[Ri],Ri);Gi=(0,V.not)((0,l.isOwnProperty)(W,Yi,mi))}else q.length?Gi=(0,V.and)(...q.map(Yi=>(0,V._)`${mi} !== ${Yi}`)):Gi=!0;return Gi}}i.validateProperties=I,i.default=o})(SV);var YV={};Object.defineProperty(YV,"__esModule",{value:!0});const zc=SV,jZ={keyword:"optionalProperties",schemaType:"object",error:zc.error,code(i){i.parentSchema.properties||(0,zc.validateProperties)(i)}};YV.default=jZ;var JV={},Cc={};(function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.DiscrError=void 0,function(l){l.Tag="tag",l.Mapping="mapping"}(i.DiscrError||(i.DiscrError={}))})(Cc),Object.defineProperty(JV,"__esModule",{value:!0});const pl=si,QZ=fi,MZ=wi,Hc=Ei,Kb=Cc,gZ={keyword:"discriminator",schemaType:"string",implements:["mapping"],error:{message:i=>{const{schema:l,params:b}=i;return b.discrError?b.discrError===Kb.DiscrError.Tag?`tag "${l}" must be string`:`value of tag "${l}" must be in mapping`:(0,Hc.typeErrorMessage)(i,"object")},params:i=>{const{schema:l,params:b}=i;return b.discrError?(0,pl._)`{error: ${b.discrError}, tag: ${l}, tagValue: ${b.tag}}`:(0,Hc.typeErrorParams)(i,"object")}},code(i){(0,QZ.checkMetadata)(i);const{gen:l,data:b,schema:V,parentSchema:c}=i,[d,e]=(0,MZ.checkNullableObject)(i,b);l.if(e),u(),l.elseIf((0,pl.not)(d)),i.error(),l.endIf(),i.ok(d);function u(){const s=l.const("tag",(0,pl._)`${b}${(0,pl.getProperty)(V)}`);l.if((0,pl._)`${s} === undefined`),i.error(!1,{discrError:Kb.DiscrError.Tag,tag:s}),l.elseIf((0,pl._)`typeof ${s} == "string"`),o(s),l.else(),i.error(!1,{discrError:Kb.DiscrError.Tag,tag:s},{instancePath:V}),l.endIf()}function o(s){l.if(!1);for(const W in c.mapping)l.elseIf((0,pl._)`${s} === ${W}`),l.assign(d,I(W));l.else(),i.error(!1,{discrError:Kb.DiscrError.Mapping,tag:s},{instancePath:V,schemaPath:"mapping",parentSchema:!0}),l.endIf()}function I(s){const W=l.name("valid");return i.subschema({keyword:"mapping",schemaProp:s,jtdDiscriminator:V},W),W}}};JV.default=gZ;var NV={};Object.defineProperty(NV,"__esModule",{value:!0});const jc=Si,Qc=si,OZ=fi,BZ=wi,wZ={keyword:"values",schemaType:"object",error:(0,Ei.typeError)("object"),code(i){(0,OZ.checkMetadata)(i);const{gen:l,data:b,schema:V,it:c}=i;if((0,jc.alwaysValidSchema)(c,V))return;const[d,e]=(0,BZ.checkNullableObject)(i,b);l.if(e),l.assign(d,u()),l.elseIf((0,Qc.not)(d)),i.error(),l.endIf(),i.ok(d);function u(){const o=l.name("valid");if(c.allErrors){const s=l.let("valid",!0);return I(()=>l.assign(s,!1)),s}return l.var(o,!0),I(()=>l.break()),o;function I(s){l.forIn("key",b,W=>{i.subschema({keyword:"values",dataProp:W,dataPropType:jc.Type.Str},o),l.if((0,Qc.not)(o),s)})}}}};NV.default=wZ;var FV={};Object.defineProperty(FV,"__esModule",{value:!0});const KZ={keyword:"union",schemaType:"array",trackErrors:!0,code:di.validateUnion,error:{message:"must match a schema in union"}};FV.default=KZ,Object.defineProperty(GV,"__esModule",{value:!0});const PZ=Nl,DZ=vV,AZ=UV,_Z=yV,$Z=SV,qZ=YV,i2=JV,l2=NV,b2=FV,V2=fi,c2=["definitions",PZ.default,DZ.default,AZ.default,_Z.default,$Z.default,qZ.default,i2.default,l2.default,b2.default,V2.default,{keyword:"additionalProperties",schemaType:"boolean"},{keyword:"nullable",schemaType:"boolean"}];GV.default=c2;var pV={};Object.defineProperty(pV,"__esModule",{value:!0});const bl=i=>{const l={nullable:{type:"boolean"},metadata:{optionalProperties:{union:{elements:{ref:"schema"}}},additionalProperties:!0}};return i&&(l.definitions={values:{ref:"schema"}}),l},d2=i=>({optionalProperties:bl(i)}),Z2=i=>({properties:{ref:{type:"string"}},optionalProperties:bl(i)}),m2=i=>({properties:{type:{enum:["boolean","timestamp","string","float32","float64","int8","uint8","int16","uint16","int32","uint32"]}},optionalProperties:bl(i)}),e2=i=>({properties:{enum:{elements:{type:"string"}}},optionalProperties:bl(i)}),s2=i=>({properties:{elements:{ref:"schema"}},optionalProperties:bl(i)}),Mc=i=>({properties:{properties:{values:{ref:"schema"}}},optionalProperties:A({optionalProperties:{values:{ref:"schema"}},additionalProperties:{type:"boolean"}},bl(i))}),gc=i=>({properties:{optionalProperties:{values:{ref:"schema"}}},optionalProperties:A({additionalProperties:{type:"boolean"}},bl(i))}),a2=i=>({properties:{discriminator:{type:"string"},mapping:{values:{metadata:{union:[Mc(!1),gc(!1)]}}}},optionalProperties:bl(i)}),t2=i=>({properties:{values:{ref:"schema"}},optionalProperties:bl(i)}),Oc=i=>({metadata:{union:[d2,Z2,m2,e2,s2,Mc,gc,a2,t2].map(l=>l(i))}}),n2=A({definitions:{schema:Oc(!1)}},Oc(!0));pV.default=n2;var TV={},sb={};Object.defineProperty(sb,"__esModule",{value:!0}),sb.jtdForms=void 0,sb.jtdForms=["elements","values","discriminator","properties","optionalProperties","enum","type","ref"];var rV={};Object.defineProperty(rV,"__esModule",{value:!0});const kV=/[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,u2={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function Bc(i){return kV.lastIndex=0,'"'+(kV.test(i)?i.replace(kV,l=>{const b=u2[l];return typeof b=="string"?b:"\\u"+("0000"+l.charCodeAt(0).toString(16)).slice(-4)}):i)+'"'}rV.default=Bc,Bc.code='require("ajv/dist/runtime/quote").default',Object.defineProperty(TV,"__esModule",{value:!0});const I2=sb,wc=Fi,Vi=si,W2=Yl,ui=xi,o2=di,R2=Nl,L2=Si,X2=rV,G2={elements:v2,values:U2,discriminator:y2,properties:Dc,optionalProperties:Dc,enum:tb,type:S2,ref:J2};function Kc(i,l){const b=wc.getCompilingSchema.call(this,i);if(b)return b;const{es5:V,lines:c}=this.opts.code,{ownProperties:d}=this.opts,e=new Vi.CodeGen(this.scope,{es5:V,lines:c,ownProperties:d}),u=e.scopeName("serialize"),o={self:this,gen:e,schema:i.schema,schemaEnv:i,definitions:l,data:ui.default.data};let I;try{this._compilations.add(i),i.serializeName=u,e.func(u,ui.default.data,!1,()=>{e.let(ui.default.json,(0,Vi.str)``),ab(o),e.return(ui.default.json)}),e.optimize(this.opts.code.optimize);const s=e.toString();I=`${e.scopeRefs(ui.default.scope)}return ${s}`;const y=new Function(`${ui.default.scope}`,I)(this.scope.get());this.scope.value(u,{ref:y}),i.serialize=y}catch(s){throw I&&this.logger.error("Error compiling serializer, function code:",I),delete i.serialize,delete i.serializeName,s}finally{this._compilations.delete(i)}return i}TV.default=Kc;function ab(i){let l;for(const b of I2.jtdForms)if(b in i.schema){l=b;break}h2(i,l?G2[l]:F2)}function h2(i,l){const{gen:b,schema:V,data:c}=i;if(!V.nullable)return l(i);b.if((0,Vi._)`${c} === undefined || ${c} === null`,()=>b.add(ui.default.json,(0,Vi._)`"null"`),()=>l(i))}function v2(i){const{gen:l,schema:b,data:V}=i;l.add(ui.default.json,(0,Vi.str)`[`);const c=l.let("first",!0);l.forOf("el",V,d=>{_c(i,c),ab(ai(A({},i),{schema:b.elements,data:d}))}),l.add(ui.default.json,(0,Vi.str)`]`)}function U2(i){const{gen:l,schema:b,data:V}=i;l.add(ui.default.json,(0,Vi.str)`{`);const c=l.let("first",!0);l.forIn("key",V,d=>Pc(i,d,b.values,c)),l.add(ui.default.json,(0,Vi.str)`}`)}function Pc(i,l,b,V){const{gen:c,data:d}=i;_c(i,V),tb(ai(A({},i),{data:l})),c.add(ui.default.json,(0,Vi.str)`:`);const e=c.const("value",(0,Vi._)`${d}${(0,Vi.getProperty)(l)}`);ab(ai(A({},i),{schema:b,data:e}))}function y2(i){const{gen:l,schema:b,data:V}=i,{discriminator:c}=b;l.add(ui.default.json,(0,Vi.str)`{${JSON.stringify(c)}:`);const d=l.const("tag",(0,Vi._)`${V}${(0,Vi.getProperty)(c)}`);tb(ai(A({},i),{data:d})),l.if(!1);for(const e in b.mapping){l.elseIf((0,Vi._)`${d} === ${e}`);const u=b.mapping[e];Ac(ai(A({},i),{schema:u}),c)}l.endIf(),l.add(ui.default.json,(0,Vi.str)`}`)}function Dc(i){const{gen:l}=i;l.add(ui.default.json,(0,Vi.str)`{`),Ac(i),l.add(ui.default.json,(0,Vi.str)`}`)}function Ac(i,l){const{gen:b,schema:V,data:c}=i,{properties:d,optionalProperties:e}=V,u=W(d),o=W(e),I=y(u.concat(o));let s=!l;for(const v of u)T(v,d[v],k(v));for(const v of o){const R=k(v);b.if((0,Vi.and)((0,Vi._)`${R} !== undefined`,(0,o2.isOwnProperty)(b,c,v)),()=>T(v,e[v],R))}V.additionalProperties&&b.forIn("key",c,v=>b.if(x(v,I),()=>Pc(i,v,{},b.let("first",s))));function W(v){return v?Object.keys(v):[]}function y(v){if(l&&v.push(l),new Set(v).size!==v.length)throw new Error("JTD: properties/optionalProperties/disciminator overlap");return v}function k(v){return b.const("value",(0,Vi._)`${c}${(0,Vi.getProperty)(v)}`)}function T(v,R,Y){s?s=!1:b.add(ui.default.json,(0,Vi.str)`,`),b.add(ui.default.json,(0,Vi.str)`${JSON.stringify(v)}:`),ab(ai(A({},i),{schema:R,data:Y}))}function x(v,R){return R.length?(0,Vi.and)(...R.map(Y=>(0,Vi._)`${v} !== ${Y}`)):!0}}function S2(i){const{gen:l,schema:b,data:V}=i;switch(b.type){case"boolean":l.add(ui.default.json,(0,Vi._)`${V} ? "true" : "false"`);break;case"string":tb(i);break;case"timestamp":l.if((0,Vi._)`${V} instanceof Date`,()=>l.add(ui.default.json,(0,Vi._)`'"' + ${V}.toISOString() + '"'`),()=>tb(i));break;default:Y2(i)}}function tb({gen:i,data:l}){i.add(ui.default.json,(0,Vi._)`${(0,L2.useFunc)(i,X2.default)}(${l})`)}function Y2({gen:i,data:l}){i.add(ui.default.json,(0,Vi._)`"" + ${l}`)}function J2(i){const{gen:l,self:b,data:V,definitions:c,schema:d,schemaEnv:e}=i,{ref:u}=d,o=c[u];if(!o)throw new W2.default(b.opts.uriResolver,"",u,`No definition ${u}`);if(!(0,R2.hasRef)(o))return ab(ai(A({},i),{schema:o}));const{root:I}=e,s=Kc.call(b,new wc.SchemaEnv({schema:o,root:I}),c);l.add(ui.default.json,(0,Vi._)`${N2(l,s)}(${V})`)}function N2(i,l){return l.serialize?i.scopeValue("serialize",{ref:l.serialize}):(0,Vi._)`${i.scopeValue("wrapper",{ref:l})}.serialize`}function F2({gen:i,data:l}){i.add(ui.default.json,(0,Vi._)`JSON.stringify(${l})`)}function _c({gen:i},l){i.if(l,()=>i.assign(l,!1),()=>i.add(ui.default.json,(0,Vi.str)`,`))}var xV={},Il={};Object.defineProperty(Il,"__esModule",{value:!0}),Il.parseJsonString=Il.parseJsonNumber=Il.parseJson=void 0;const p2=/position\s(\d+)$/;function Vl(i,l){let b;Vl.message=void 0;let V;l&&(i=i.slice(l));try{return Vl.position=l+i.length,JSON.parse(i)}catch(c){if(V=p2.exec(c.message),!V){Vl.message="unexpected end";return}b=+V[1];const d=i[b];i=i.slice(0,b),Vl.position=l+b;try{return JSON.parse(i)}catch{Vl.message=`unexpected token ${d}`;return}}}Il.parseJson=Vl,Vl.message=void 0,Vl.position=0,Vl.code='require("ajv/dist/runtime/parseJson").parseJson';function cl(i,l,b){let V="",c;if(cl.message=void 0,i[l]==="-"&&(V+="-",l++),i[l]==="0")V+="0",l++;else if(!d(b)){e();return}if(b)return cl.position=l,+V;if(i[l]==="."&&(V+=".",l++,!d())){e();return}if(c=i[l],(c==="e"||c==="E")&&(V+="e",l++,c=i[l],(c==="+"||c==="-")&&(V+=c,l++),!d())){e();return}return cl.position=l,+V;function d(u){let o=!1;for(;c=i[l],c>="0"&&c<="9"&&(u===void 0||u-- >0);)o=!0,V+=c,l++;return o}function e(){cl.position=l,cl.message=l<i.length?`unexpected token ${i[l]}`:"unexpected end"}}Il.parseJsonNumber=cl,cl.message=void 0,cl.position=0,cl.code='require("ajv/dist/runtime/parseJson").parseJsonNumber';const $c={b:"\b",f:"\f",n:`
6
+ `,r:"\r",t:" ",'"':'"',"/":"/","\\":"\\"},T2="a".charCodeAt(0),r2="0".charCodeAt(0);function Wl(i,l){let b="",V;for(Wl.message=void 0;V=i[l++],V!=='"';)if(V==="\\")if(V=i[l],V in $c)b+=$c[V],l++;else if(V==="u"){l++;let d=4,e=0;for(;d--;){if(e<<=4,V=i[l],V===void 0){c("unexpected end");return}if(V=V.toLowerCase(),V>="a"&&V<="f")e+=V.charCodeAt(0)-T2+10;else if(V>="0"&&V<="9")e+=V.charCodeAt(0)-r2;else{c(`unexpected token ${V}`);return}l++}b+=String.fromCharCode(e)}else{c(`unexpected token ${V}`);return}else if(V===void 0){c("unexpected end");return}else if(V.charCodeAt(0)>=32)b+=V;else{c(`unexpected token ${V}`);return}return Wl.position=l,b;function c(d){Wl.position=l,Wl.message=d}}Il.parseJsonString=Wl,Wl.message=void 0,Wl.position=0,Wl.code='require("ajv/dist/runtime/parseJson").parseJsonString',Object.defineProperty(xV,"__esModule",{value:!0});const k2=sb,qc=Fi,H=si,x2=Yl,_=xi,f2=di,E2=Nl,z2=vV,fV=Il,i9=Si,C2=Bb,H2={elements:g2,values:O2,discriminator:w2,properties:V9,optionalProperties:V9,enum:P2,type:K2,ref:D2};function l9(i,l){const b=qc.getCompilingSchema.call(this,i);if(b)return b;const{es5:V,lines:c}=this.opts.code,{ownProperties:d}=this.opts,e=new H.CodeGen(this.scope,{es5:V,lines:c,ownProperties:d}),u=e.scopeName("parse"),o={self:this,gen:e,schema:i.schema,schemaEnv:i,definitions:l,data:_.default.data,parseName:u,char:e.name("c")};let I;try{this._compilations.add(i),i.parseName=u,j2(o),e.optimize(this.opts.code.optimize);const s=e.toString();I=`${e.scopeRefs(_.default.scope)}return ${s}`;const y=new Function(`${_.default.scope}`,I)(this.scope.get());this.scope.value(u,{ref:y}),i.parse=y}catch(s){throw I&&this.logger.error("Error compiling parser, function code:",I),delete i.parse,delete i.parseName,s}finally{this._compilations.delete(i)}return i}xV.default=l9;const EV=(0,H._)`undefined`;function j2(i){const{gen:l,parseName:b,char:V}=i;l.func(b,(0,H._)`${_.default.json}, ${_.default.jsonPos}, ${_.default.jsonPart}`,!1,()=>{l.let(_.default.data),l.let(V),l.assign((0,H._)`${b}.message`,EV),l.assign((0,H._)`${b}.position`,EV),l.assign(_.default.jsonPos,(0,H._)`${_.default.jsonPos} || 0`),l.const(_.default.jsonLen,(0,H._)`${_.default.json}.length`),Pb(i),QV(i),l.if(_.default.jsonPart,()=>{l.assign((0,H._)`${b}.position`,_.default.jsonPos),l.return(_.default.data)}),l.if((0,H._)`${_.default.jsonPos} === ${_.default.jsonLen}`,()=>l.return(_.default.data)),Bl(i)})}function Pb(i){let l;for(const b of k2.jtdForms)if(b in i.schema){l=b;break}l?M2(i,H2[l]):HV(i)}const Q2=m9(!0,m9(!1,Bl));function M2(i,l){const{gen:b,schema:V,data:c}=i;if(!V.nullable)return l(i);nb(i,"null",l,()=>b.assign(c,null))}function g2(i){const{gen:l,schema:b,data:V}=i;Ki(i,"[");const c=l.let("i",0);l.assign(V,(0,H._)`[]`),zV(i,"]",()=>{const d=l.let("el");Pb(ai(A({},i),{schema:b.elements,data:d})),l.assign((0,H._)`${V}[${c}++]`,d)})}function O2(i){const{gen:l,schema:b,data:V}=i;Ki(i,"{"),l.assign(V,(0,H._)`{}`),zV(i,"}",()=>B2(i,b.values))}function zV(i,l,b){b9(i,l,b),Ki(i,l)}function b9(i,l,b){const{gen:V}=i;V.for((0,H._)`;${_.default.jsonPos}<${_.default.jsonLen} && ${Db(1)}!==${l};`,()=>{b(),nb(i,",",()=>V.break(),c)});function c(){nb(i,l,()=>{},Bl)}}function B2(i,l){const{gen:b}=i,V=b.let("key");Tl(ai(A({},i),{data:V})),Ki(i,":"),Z9(i,V,l)}function w2(i){const{gen:l,data:b,schema:V}=i,{discriminator:c,mapping:d}=V;Ki(i,"{"),l.assign(b,(0,H._)`{}`);const e=l.const("pos",_.default.jsonPos),u=l.let("value"),o=l.let("tag");b9(i,"}",()=>{const I=l.let("key");Tl(ai(A({},i),{data:I})),Ki(i,":"),l.if((0,H._)`${I} === ${c}`,()=>{Tl(ai(A({},i),{data:o})),l.assign((0,H._)`${b}[${I}]`,o),l.break()},()=>HV(ai(A({},i),{data:u})))}),l.assign(_.default.jsonPos,e),l.if((0,H._)`${o} === undefined`),dl(i,(0,H.str)`discriminator tag not found`);for(const I in d)l.elseIf((0,H._)`${o} === ${I}`),c9(ai(A({},i),{schema:d[I]}),c);l.else(),dl(i,(0,H.str)`discriminator value not in schema`),l.endIf()}function V9(i){const{gen:l,data:b}=i;Ki(i,"{"),l.assign(b,(0,H._)`{}`),c9(i)}function c9(i,l){const{gen:b,schema:V,data:c}=i,{properties:d,optionalProperties:e,additionalProperties:u}=V;if(zV(i,"}",()=>{const o=b.let("key");if(Tl(ai(A({},i),{data:o})),Ki(i,":"),b.if(!1),d9(i,o,d),d9(i,o,e),l){b.elseIf((0,H._)`${o} === ${l}`);const I=b.let("tag");Tl(ai(A({},i),{data:I}))}b.else(),u?HV(ai(A({},i),{data:(0,H._)`${c}[${o}]`})):dl(i,(0,H.str)`property ${o} not allowed`),b.endIf()}),d){const o=(0,f2.hasPropFunc)(b),I=(0,H.and)(...Object.keys(d).map(s=>(0,H._)`${o}.call(${c}, ${s})`));b.if((0,H.not)(I),()=>dl(i,(0,H.str)`missing required properties`))}}function d9(i,l,b={}){const{gen:V}=i;for(const c in b)V.elseIf((0,H._)`${l} === ${c}`),Z9(i,l,b[c])}function Z9(i,l,b){Pb(ai(A({},i),{schema:b,data:(0,H._)`${i.data}[${l}]`}))}function K2(i){const{gen:l,schema:b,data:V,self:c}=i;switch(b.type){case"boolean":Q2(i);break;case"string":Tl(i);break;case"timestamp":{Tl(i);const d=(0,i9.useFunc)(l,C2.default),{allowDate:e,parseDate:u}=c.opts,o=e?(0,H._)`!${d}(${V}, true)`:(0,H._)`!${d}(${V})`,I=u?(0,H.or)(o,(0,H._)`(${V} = new Date(${V}), false)`,(0,H._)`isNaN(${V}.valueOf())`):o;l.if(I,()=>dl(i,(0,H.str)`invalid timestamp`));break}case"float32":case"float64":CV(i);break;default:{const d=b.type;if(!c.opts.int32range&&(d==="int32"||d==="uint32"))CV(i,16),d==="uint32"&&l.if((0,H._)`${V} < 0`,()=>dl(i,(0,H.str)`integer out of range`));else{const[e,u,o]=z2.intRange[d];CV(i,o),l.if((0,H._)`${V} < ${e} || ${V} > ${u}`,()=>dl(i,(0,H.str)`integer out of range`))}}}}function Tl(i){Ki(i,'"'),jV(i,fV.parseJsonString)}function P2(i){const{gen:l,data:b,schema:V}=i,c=V.enum;Ki(i,'"'),l.if(!1);for(const d of c){const e=JSON.stringify(d).slice(1);l.elseIf((0,H._)`${Db(e.length)} === ${e}`),l.assign(b,(0,H.str)`${d}`),l.add(_.default.jsonPos,e.length)}l.else(),Bl(i),l.endIf()}function CV(i,l){const{gen:b}=i;QV(i),b.if((0,H._)`"-0123456789".indexOf(${Db(1)}) < 0`,()=>Bl(i),()=>jV(i,fV.parseJsonNumber,l))}function m9(i,l){return b=>{const{gen:V,data:c}=b;nb(b,`${i}`,()=>l(b),()=>V.assign(c,i))}}function D2(i){const{gen:l,self:b,definitions:V,schema:c,schemaEnv:d}=i,{ref:e}=c,u=V[e];if(!u)throw new x2.default(b.opts.uriResolver,"",e,`No definition ${e}`);if(!(0,E2.hasRef)(u))return Pb(ai(A({},i),{schema:u}));const{root:o}=d,I=l9.call(b,new qc.SchemaEnv({schema:u,root:o}),V);e9(i,A2(l,I),!0)}function A2(i,l){return l.parse?i.scopeValue("parse",{ref:l.parse}):(0,H._)`${i.scopeValue("wrapper",{ref:l})}.parse`}function HV(i){jV(i,fV.parseJson)}function jV(i,l,b){e9(i,(0,i9.useFunc)(i.gen,l),b)}function e9(i,l,b){const{gen:V,data:c}=i;V.assign(c,(0,H._)`${l}(${_.default.json}, ${_.default.jsonPos}${b?(0,H._)`, ${b}`:H.nil})`),V.assign(_.default.jsonPos,(0,H._)`${l}.position`),V.if((0,H._)`${c} === undefined`,()=>dl(i,(0,H._)`${l}.message`))}function Ki(i,l){nb(i,l,Bl)}function nb(i,l,b,V){const{gen:c}=i,d=l.length;QV(i),c.if((0,H._)`${Db(d)} === ${l}`,()=>{c.add(_.default.jsonPos,d),V==null||V(i)},()=>b(i))}function QV({gen:i,char:l}){i.code((0,H._)`while((${l}=${_.default.json}[${_.default.jsonPos}],${l}===" "||${l}==="\\n"||${l}==="\\r"||${l}==="\\t"))${_.default.jsonPos}++;`)}function Db(i){return i===1?(0,H._)`${_.default.json}[${_.default.jsonPos}]`:(0,H._)`${_.default.json}.slice(${_.default.jsonPos}, ${_.default.jsonPos}+${i})`}function Bl(i){dl(i,(0,H._)`"unexpected token " + ${_.default.json}[${_.default.jsonPos}]`)}function dl({gen:i,parseName:l},b){i.assign((0,H._)`${l}.message`,b),i.assign((0,H._)`${l}.position`,_.default.jsonPos),i.return(EV)}(function(i,l){Object.defineProperty(l,"__esModule",{value:!0}),l.CodeGen=l.Name=l.nil=l.stringify=l.str=l._=l.KeywordCxt=void 0;const b=wV,V=GV,c=pV,d=TV,e=xV,u="JTD-meta-schema";class o extends b.default{constructor(y={}){super(ai(A({},y),{jtd:!0}))}_addVocabularies(){super._addVocabularies(),this.addVocabulary(V.default)}_addDefaultMetaSchema(){super._addDefaultMetaSchema(),this.opts.meta&&this.addMetaSchema(c.default,u,!1)}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(u)?u:void 0)}compileSerializer(y){const k=this._addSchema(y);return k.serialize||this._compileSerializer(k)}compileParser(y){const k=this._addSchema(y);return k.parse||this._compileParser(k)}_compileSerializer(y){if(d.default.call(this,y,y.schema.definitions||{}),!y.serialize)throw new Error("ajv implementation error");return y.serialize}_compileParser(y){if(e.default.call(this,y,y.schema.definitions||{}),!y.parse)throw new Error("ajv implementation error");return y.parse}}i.exports=l=o,Object.defineProperty(l,"__esModule",{value:!0}),l.default=o;var I=gi;Object.defineProperty(l,"KeywordCxt",{enumerable:!0,get:function(){return I.KeywordCxt}});var s=si;Object.defineProperty(l,"_",{enumerable:!0,get:function(){return s._}}),Object.defineProperty(l,"str",{enumerable:!0,get:function(){return s.str}}),Object.defineProperty(l,"stringify",{enumerable:!0,get:function(){return s.stringify}}),Object.defineProperty(l,"nil",{enumerable:!0,get:function(){return s.nil}}),Object.defineProperty(l,"Name",{enumerable:!0,get:function(){return s.Name}}),Object.defineProperty(l,"CodeGen",{enumerable:!0,get:function(){return s.CodeGen}})})(ZV,ZV.exports);var _2=O&&O.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Ul,"__esModule",{value:!0}),Ul.Validate=Ul.AddSchema=void 0;const $2=_2(ZV.exports),s9=new $2.default,q2=(i,l)=>i(l)?null:i.errors;function im(i,l){s9.addSchema(l,i)}Ul.AddSchema=im;function lm(i,l){const b=s9.getSchema(i);if(b)return q2(b,l)}Ul.Validate=lm,Object.defineProperty(fb,"__esModule",{value:!0}),fb.STSOptionsBase=void 0;const bm=Ul;class Vm{constructor(l=null){Vb(this,"_options");this._options=l,l!==null&&(typeof l.validator=="undefined"||(0,bm.Validate)(l.validator,l))}get options(){return this._options}}fb.STSOptionsBase=Vm;var wl={};Object.defineProperty(wl,"__esModule",{value:!0}),wl.JestSleep=wl.Sleep=void 0;async function a9(i=1e3){return new Promise(l=>setTimeout(l,i))}wl.Sleep=a9;async function cm(){return a9(100)}wl.JestSleep=cm;var t9={};(function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.compareParameterTypes=i.OAuth2ParameterErrorType=i.OIDCAddressClaim=i.OIDCStandardClaim=i.OAuth2ParameterType=void 0,function(V){V.AUDIENCE="AUDIENCE",V.CLIENT_ID="client_id",V.CLIENT_SECRET="client_secret",V.RESPONSE_TYPE="response_type",V.SCOPE="scope",V.STATE="state",V.REDIRECT_URI="redirect_uri",V.ERROR="error",V.ERROR_DESCRIPTION="error_description",V.ERROR_CODES="error_codes",V.ERROR_URI="error_uri",V.GRANT_TYPE="grant_type",V.CODE="code",V.ACCESS_TOKEN="access_token",V.TOKEN_TYPE="token_type",V.EXPIRES_IN="expires_in",V.USERNAME="username",V.PASSWORD="password",V.REFRESH_TOKEN="refresh_token",V.RESPONSE_MODE="response_mode",V.TIMESTAMP="timestamp",V.TRACE_ID="trace_id",V.CORRELATION_ID="correlation_id"}(i.OAuth2ParameterType||(i.OAuth2ParameterType={})),function(V){V.SUB="sub",V.NAME="name",V.GIVEN_NAME="given_name",V.FAMILY_NAME="family_name",V.MIDDLE_NAME="middle_name",V.NICKNAME="nickname",V.PREFERRED_USERNAME="preferred_username",V.PROFILE="profile",V.PICTURE="picture",V.WEBSITE="website",V.EMAIL="email",V.EMAIL_VERIFIED="email_verified",V.GENDER="gender",V.BIRTHDATE="birthdate",V.ZONEINFO="zoneinfo",V.LOCALE="locale",V.PHONE_NUMBER="phone_number",V.PHONE_NUMBER_VERIFIED="phone_number_verified",V.ADDRESS="address",V.CLIENT_SECRET="client_secret",V.NONCE="nonce"}(i.OIDCStandardClaim||(i.OIDCStandardClaim={})),function(V){V.FORMATTED="formatted",V.STREET_ADDRESS="street_address",V.LOCALITY="locality",V.REGION="region",V.COUNTRY="country"}(i.OIDCAddressClaim||(i.OIDCAddressClaim={}));class l{}Vb(l,"NOT_EQUAL",{code:"STS_OAUTH2_ERR_0001",description:"Parameter values not equal."}),Vb(l,"NOT_PRESENT",{code:"STS_OAUTH2_ERR_0002",description:"Parameter not provided."}),Vb(l,"INVALID_FORMAT",{code:"STS_OAUTH2_ERR_0003",description:"Parameter value format invalid."}),Vb(l,"EXPIRED",{code:"STS_OAUTH2_ERR_0004",description:"Parameter value expired."}),i.OAuth2ParameterErrorType=l;function b(V,c,d){const e=[];for(let u=0;u<d.length;u++){const o=d[u];if(V[u].localeCompare(c[u])!==0){const I={error:l.NOT_EQUAL.code,error_description:l.NOT_EQUAL.description,timestamp:Date.now(),details:`${l.NOT_EQUAL.description}: Parameter: [${o}]`};e.push(I)}}return e}i.compareParameterTypes=b})(t9),function(i){var l=O&&O.__createBinding||(Object.create?function(c,d,e,u){u===void 0&&(u=e);var o=Object.getOwnPropertyDescriptor(d,e);(!o||("get"in o?!d.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return d[e]}}),Object.defineProperty(c,u,o)}:function(c,d,e,u){u===void 0&&(u=e),c[u]=d[e]}),b=O&&O.__exportStar||function(c,d){for(var e in c)e!=="default"&&!Object.prototype.hasOwnProperty.call(d,e)&&l(d,c,e)};Object.defineProperty(i,"__esModule",{value:!0}),i.$stsgdf=i.$stsgd=void 0,b(xb,i),b(fb,i),b(wl,i),b(Ul,i),b(t9,i),i.$stsgd={};function V(){return i.$stsgd}i.$stsgdf=V}(kb);class dm{constructor(){this.DigestMessage=async function(l){const V=new TextEncoder().encode(l),c=await crypto.subtle.digest("SHA-256",V),d=Array.from(new Uint8Array(c));return btoa(String.fromCharCode(...d))},this.CreateRandomString=(l=43)=>{const b=Array.from(crypto.getRandomValues(new Uint8Array(l)));return btoa(String.fromCharCode(...b))},this.CreateRandomStringEx=()=>{const l="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.";let b="";return Array.from(crypto.getRandomValues(new Uint8Array(43))).forEach(c=>b+=l[c%l.length]),b}}}class Zm{constructor(){this.DecodeQueryParams=l=>{const b={};return Object.keys(l).filter(V=>typeof l[V]!="undefined").map(V=>{b[decodeURIComponent(V)]=decodeURIComponent(l[V])}),b},this.CreateQueryParams=l=>Object.keys(l).filter(b=>typeof l[b]!="undefined").map(b=>Array.isArray(l[b])?encodeURIComponent(b)+"="+encodeURIComponent(l[b].join(" ")):encodeURIComponent(b)+"="+encodeURIComponent(l[b])).join("&"),this._GetQueryParams=l=>{let b={};const V=l.split("?");if(V.length==2){const c=V[1].split("&"),d={};let e="";c.forEach(function(u){e=u.split("="),e.length==2&&(d[e[0]]=e[1])}),b=this.DecodeQueryParams(d)}return b},this.GetQueryParams=()=>this._GetQueryParams(window.location.href)}}var n9=(i=>(i.CODE="code",i.ID_TOKEN="id_token",i.TOKEN="token",i))(n9||{}),u9=(i=>(i.QUERY="query",i.FRAGMENT="fragment",i.FORM_POST="form_post",i))(u9||{}),I9=(i=>(i.CLIENT_CREDENTIALS="client_credentials",i.AUTHORIZATION_CODE="authorization_code",i.REFRESH_TOKEN="refresh_token",i))(I9||{}),Zl=(i=>(i.RESTORE_SESSION="RestoreSession",i.AUTHORIZE="Authorize",i.HANDLE_REDIRECT="HandleRedirect",i.LOGOUT="Logout",i.AUTHENTICATE_EVENT="AuthenticateEvent",i.ERROR="Error",i))(Zl||{}),ub=O&&O.__assign||function(){return ub=Object.assign||function(i){for(var l,b=1,V=arguments.length;b<V;b++){l=arguments[b];for(var c in l)Object.prototype.hasOwnProperty.call(l,c)&&(i[c]=l[c])}return i},ub.apply(this,arguments)};function Ib(i,l){if(!l)return"";var b="; "+i;return l===!0?b:b+"="+l}function mm(i){if(typeof i.expires=="number"){var l=new Date;l.setMilliseconds(l.getMilliseconds()+i.expires*864e5),i.expires=l}return Ib("Expires",i.expires?i.expires.toUTCString():"")+Ib("Domain",i.domain)+Ib("Path",i.path)+Ib("Secure",i.secure)+Ib("SameSite",i.sameSite)}function em(i,l,b){return encodeURIComponent(i).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/\(/g,"%28").replace(/\)/g,"%29")+"="+encodeURIComponent(l).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent)+mm(b)}function sm(i){for(var l={},b=i?i.split("; "):[],V=/(%[\dA-F]{2})+/gi,c=0;c<b.length;c++){var d=b[c].split("="),e=d.slice(1).join("=");e.charAt(0)==='"'&&(e=e.slice(1,-1));try{var u=d[0].replace(V,decodeURIComponent);l[u]=e.replace(V,decodeURIComponent)}catch{}}return l}function am(){return sm(document.cookie)}function tm(i){return am()[i]}var nm=tm;function W9(i,l,b){document.cookie=em(i,l,ub({path:"/"},b))}var um=W9;function Im(i,l){W9(i,"",ub(ub({},l),{expires:-1}))}var Wm=Im;const Ab=BV(`proc:${0}:storage.ts`);var o9=(i=>(i.LOCAL_STORAGE="LocalStorage",i.SESSION_STORAGE="SessionStorage",i.COOKIE_STORAGE="CookieStorage",i.MEMORY_STORAGE="MemoryStorage",i))(o9||{});class om{constructor(){this.get=l=>{const b=nm(l);return b?JSON.parse(b):null},this.set=(l,b,V={})=>{let c={};window.location.protocol==="https:"&&(c={secure:!0,sameSite:"none"}),V&&V.daysUntilExpire?c.expires=V.daysUntilExpire:c.expires=1,Ab(`CookieStorage.set: key: ${l}, value: [${b}]`),um(l,JSON.stringify(b),c)},this.remove=l=>{Wm(l)}}}class Rm{constructor(){this.get=l=>{const b=sessionStorage.getItem(l);return typeof b=="undefined"||b===null?null:JSON.parse(b)},this.set=(l,b)=>{Ab(`SessionStorage.set: key: ${l}, value: [${b}]`),sessionStorage.setItem(l,JSON.stringify(b))},this.remove=l=>{sessionStorage.removeItem(l)}}}class Lm{constructor(){this.get=l=>{const b=localStorage.getItem(l);return typeof b=="undefined"||b===null?null:JSON.parse(b)},this.set=(l,b)=>{Ab(`LocalStorage.set: key: ${l}, value: [${b}]`),localStorage.setItem(l,JSON.stringify(b))},this.remove=l=>{localStorage.removeItem(l)}}}class Xm{constructor(){oi(this,rl,void 0);bi(this,rl,{}),this.get=l=>{const b=P(this,rl)[l];return typeof b=="undefined"||b===null?null:b},this.set=(l,b)=>{Ab(`MemoryStorage.set: key: ${l}, value: [${b}]`),P(this,rl)[l]=b},this.remove=l=>{delete P(this,rl)[l]}}}rl=new WeakMap;class Gm{constructor(l){oi(this,ol,null);switch(l.clientStorageType){case"SessionStorage":bi(this,ol,new Rm);break;case"LocalStorage":bi(this,ol,new Lm);break;case"CookieStorage":bi(this,ol,new om);break;case"MemoryStorage":bi(this,ol,new Xm);break;default:throw new Error(`Unknown [${l.clientStorageType}] storage type.`)}}GetStorage(){return P(this,ol)}}ol=new WeakMap;function MV(i){this.message=i}MV.prototype=new Error,MV.prototype.name="InvalidCharacterError";var R9=typeof window!="undefined"&&window.atob&&window.atob.bind(window)||function(i){var l=String(i).replace(/=+$/,"");if(l.length%4==1)throw new MV("'atob' failed: The string to be decoded is not correctly encoded.");for(var b,V,c=0,d=0,e="";V=l.charAt(d++);~V&&(b=c%4?64*b+V:V,c++%4)?e+=String.fromCharCode(255&b>>(-2*c&6)):0)V="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(V);return e};function hm(i){var l=i.replace(/-/g,"+").replace(/_/g,"/");switch(l.length%4){case 0:break;case 2:l+="==";break;case 3:l+="=";break;default:throw"Illegal base64url string!"}try{return function(b){return decodeURIComponent(R9(b).replace(/(.)/g,function(V,c){var d=c.charCodeAt(0).toString(16).toUpperCase();return d.length<2&&(d="0"+d),"%"+d}))}(l)}catch{return R9(l)}}function _b(i){this.message=i}function vm(i,l){if(typeof i!="string")throw new _b("Invalid token specified");var b=(l=l||{}).header===!0?0:1;try{return JSON.parse(hm(i.split(".")[b]))}catch(V){throw new _b("Invalid token specified: "+V.message)}}_b.prototype=new Error,_b.prototype.name="InvalidTokenError";const L9="dmFyIGlkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxhZD1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgdWQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIFhpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIF9kPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbGQ9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgSHQ9KGVlLHNlLGFlKT0+c2UgaW4gZWU/aWQoZWUsc2Use2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmFlfSk6ZWVbc2VdPWFlLFk9KGVlLHNlKT0+e2Zvcih2YXIgYWUgaW4gc2V8fChzZT17fSkpX2QuY2FsbChzZSxhZSkmJkh0KGVlLGFlLHNlW2FlXSk7aWYoWGkpZm9yKHZhciBhZSBvZiBYaShzZSkpbGQuY2FsbChzZSxhZSkmJkh0KGVlLGFlLHNlW2FlXSk7cmV0dXJuIGVlfSxsZT0oZWUsc2UpPT5hZChlZSx1ZChzZSkpO3ZhciBScj0oZWUsc2UsYWUpPT4oSHQoZWUsdHlwZW9mIHNlIT0ic3ltYm9sIj9zZSsiIjpzZSxhZSksYWUpLCRpPShlZSxzZSxhZSk9PntpZighc2UuaGFzKGVlKSl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCAiK2FlKX07dmFyIFg9KGVlLHNlLGFlKT0+KCRpKGVlLHNlLCJyZWFkIGZyb20gcHJpdmF0ZSBmaWVsZCIpLGFlP2FlLmNhbGwoZWUpOnNlLmdldChlZSkpLEllPShlZSxzZSxhZSk9PntpZihzZS5oYXMoZWUpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGFkZCB0aGUgc2FtZSBwcml2YXRlIG1lbWJlciBtb3JlIHRoYW4gb25jZSIpO3NlIGluc3RhbmNlb2YgV2Vha1NldD9zZS5hZGQoZWUpOnNlLnNldChlZSxhZSl9LHVlPShlZSxzZSxhZSxfbik9PigkaShlZSxzZSwid3JpdGUgdG8gcHJpdmF0ZSBmaWVsZCIpLF9uP19uLmNhbGwoZWUsYWUpOnNlLnNldChlZSxhZSksYWUpOyhmdW5jdGlvbigpe3ZhciB4bixVbixCZSxIbixQcixObyxqZSxmbix2bix4ZSxGbixnbyxubix3cixHcixDcixfcix5cixMcixCcjsidXNlIHN0cmljdCI7dmFyIGVlPXR5cGVvZiBnbG9iYWxUaGlzIT0idW5kZWZpbmVkIj9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsIT0idW5kZWZpbmVkIj9nbG9iYWw6dHlwZW9mIHNlbGYhPSJ1bmRlZmluZWQiP3NlbGY6e30sc2U9e2V4cG9ydHM6e319LGFlPTFlMyxfbj1hZSo2MCxKbj1fbio2MCxTbj1KbioyNCxqaT1Tbio3LHhpPVNuKjM2NS4yNSxGaT1mdW5jdGlvbihlLG4pe249bnx8e307dmFyIHI9dHlwZW9mIGU7aWYocj09PSJzdHJpbmciJiZlLmxlbmd0aD4wKXJldHVybiBWaShlKTtpZihyPT09Im51bWJlciImJmlzRmluaXRlKGUpKXJldHVybiBuLmxvbmc/V2koZSk6S2koZSk7dGhyb3cgbmV3IEVycm9yKCJ2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPSIrSlNPTi5zdHJpbmdpZnkoZSkpfTtmdW5jdGlvbiBWaShlKXtpZihlPVN0cmluZyhlKSwhKGUubGVuZ3RoPjEwMCkpe3ZhciBuPS9eKC0/KD86XGQrKT9cLj9cZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhlKTtpZighIW4pe3ZhciByPXBhcnNlRmxvYXQoblsxXSksbz0oblsyXXx8Im1zIikudG9Mb3dlckNhc2UoKTtzd2l0Y2gobyl7Y2FzZSJ5ZWFycyI6Y2FzZSJ5ZWFyIjpjYXNlInlycyI6Y2FzZSJ5ciI6Y2FzZSJ5IjpyZXR1cm4gcip4aTtjYXNlIndlZWtzIjpjYXNlIndlZWsiOmNhc2UidyI6cmV0dXJuIHIqamk7Y2FzZSJkYXlzIjpjYXNlImRheSI6Y2FzZSJkIjpyZXR1cm4gcipTbjtjYXNlImhvdXJzIjpjYXNlImhvdXIiOmNhc2UiaHJzIjpjYXNlImhyIjpjYXNlImgiOnJldHVybiByKkpuO2Nhc2UibWludXRlcyI6Y2FzZSJtaW51dGUiOmNhc2UibWlucyI6Y2FzZSJtaW4iOmNhc2UibSI6cmV0dXJuIHIqX247Y2FzZSJzZWNvbmRzIjpjYXNlInNlY29uZCI6Y2FzZSJzZWNzIjpjYXNlInNlYyI6Y2FzZSJzIjpyZXR1cm4gciphZTtjYXNlIm1pbGxpc2Vjb25kcyI6Y2FzZSJtaWxsaXNlY29uZCI6Y2FzZSJtc2VjcyI6Y2FzZSJtc2VjIjpjYXNlIm1zIjpyZXR1cm4gcjtkZWZhdWx0OnJldHVybn19fX1mdW5jdGlvbiBLaShlKXt2YXIgbj1NYXRoLmFicyhlKTtyZXR1cm4gbj49U24/TWF0aC5yb3VuZChlL1NuKSsiZCI6bj49Sm4/TWF0aC5yb3VuZChlL0puKSsiaCI6bj49X24/TWF0aC5yb3VuZChlL19uKSsibSI6bj49YWU/TWF0aC5yb3VuZChlL2FlKSsicyI6ZSsibXMifWZ1bmN0aW9uIFdpKGUpe3ZhciBuPU1hdGguYWJzKGUpO3JldHVybiBuPj1Tbj9XcihlLG4sU24sImRheSIpOm4+PUpuP1dyKGUsbixKbiwiaG91ciIpOm4+PV9uP1dyKGUsbixfbiwibWludXRlIik6bj49YWU/V3IoZSxuLGFlLCJzZWNvbmQiKTplKyIgbXMifWZ1bmN0aW9uIFdyKGUsbixyLG8pe3ZhciB0PW4+PXIqMS41O3JldHVybiBNYXRoLnJvdW5kKGUvcikrIiAiK28rKHQ/InMiOiIiKX1mdW5jdGlvbiBZaShlKXtyLmRlYnVnPXIsci5kZWZhdWx0PXIsci5jb2VyY2U9YyxyLmRpc2FibGU9cyxyLmVuYWJsZT10LHIuZW5hYmxlZD1pLHIuaHVtYW5pemU9Rmksci5kZXN0cm95PW0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChhPT57clthXT1lW2FdfSksci5uYW1lcz1bXSxyLnNraXBzPVtdLHIuZm9ybWF0dGVycz17fTtmdW5jdGlvbiBuKGEpe2xldCBoPTA7Zm9yKGxldCBPPTA7TzxhLmxlbmd0aDtPKyspaD0oaDw8NSktaCthLmNoYXJDb2RlQXQoTyksaHw9MDtyZXR1cm4gci5jb2xvcnNbTWF0aC5hYnMoaCklci5jb2xvcnMubGVuZ3RoXX1yLnNlbGVjdENvbG9yPW47ZnVuY3Rpb24gcihhKXtsZXQgaCxPPW51bGwsRCx3O2Z1bmN0aW9uIEMoLi4uVCl7aWYoIUMuZW5hYmxlZClyZXR1cm47Y29uc3QgZj1DLEE9TnVtYmVyKG5ldyBEYXRlKSxVPUEtKGh8fEEpO2YuZGlmZj1VLGYucHJldj1oLGYuY3Vycj1BLGg9QSxUWzBdPXIuY29lcmNlKFRbMF0pLHR5cGVvZiBUWzBdIT0ic3RyaW5nIiYmVC51bnNoaWZ0KCIlTyIpO2xldCBTPTA7VFswXT1UWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLChOLEgpPT57aWYoTj09PSIlJSIpcmV0dXJuIiUiO1MrKztjb25zdCBHPXIuZm9ybWF0dGVyc1tIXTtpZih0eXBlb2YgRz09ImZ1bmN0aW9uIil7Y29uc3QgRj1UW1NdO049Ry5jYWxsKGYsRiksVC5zcGxpY2UoUywxKSxTLS19cmV0dXJuIE59KSxyLmZvcm1hdEFyZ3MuY2FsbChmLFQpLChmLmxvZ3x8ci5sb2cpLmFwcGx5KGYsVCl9cmV0dXJuIEMubmFtZXNwYWNlPWEsQy51c2VDb2xvcnM9ci51c2VDb2xvcnMoKSxDLmNvbG9yPXIuc2VsZWN0Q29sb3IoYSksQy5leHRlbmQ9byxDLmRlc3Ryb3k9ci5kZXN0cm95LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDLCJlbmFibGVkIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OigpPT5PIT09bnVsbD9POihEIT09ci5uYW1lc3BhY2VzJiYoRD1yLm5hbWVzcGFjZXMsdz1yLmVuYWJsZWQoYSkpLHcpLHNldDpUPT57Tz1UfX0pLHR5cGVvZiByLmluaXQ9PSJmdW5jdGlvbiImJnIuaW5pdChDKSxDfWZ1bmN0aW9uIG8oYSxoKXtjb25zdCBPPXIodGhpcy5uYW1lc3BhY2UrKHR5cGVvZiBoPT0idW5kZWZpbmVkIj8iOiI6aCkrYSk7cmV0dXJuIE8ubG9nPXRoaXMubG9nLE99ZnVuY3Rpb24gdChhKXtyLnNhdmUoYSksci5uYW1lc3BhY2VzPWEsci5uYW1lcz1bXSxyLnNraXBzPVtdO2xldCBoO2NvbnN0IE89KHR5cGVvZiBhPT0ic3RyaW5nIj9hOiIiKS5zcGxpdCgvW1xzLF0rLyksRD1PLmxlbmd0aDtmb3IoaD0wO2g8RDtoKyspIU9baF18fChhPU9baF0ucmVwbGFjZSgvXCovZywiLio/IiksYVswXT09PSItIj9yLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgiXiIrYS5zbGljZSgxKSsiJCIpKTpyLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgiXiIrYSsiJCIpKSl9ZnVuY3Rpb24gcygpe2NvbnN0IGE9Wy4uLnIubmFtZXMubWFwKGwpLC4uLnIuc2tpcHMubWFwKGwpLm1hcChoPT4iLSIraCldLmpvaW4oIiwiKTtyZXR1cm4gci5lbmFibGUoIiIpLGF9ZnVuY3Rpb24gaShhKXtpZihhW2EubGVuZ3RoLTFdPT09IioiKXJldHVybiEwO2xldCBoLE87Zm9yKGg9MCxPPXIuc2tpcHMubGVuZ3RoO2g8TztoKyspaWYoci5za2lwc1toXS50ZXN0KGEpKXJldHVybiExO2ZvcihoPTAsTz1yLm5hbWVzLmxlbmd0aDtoPE87aCsrKWlmKHIubmFtZXNbaF0udGVzdChhKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBsKGEpe3JldHVybiBhLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIsYS50b1N0cmluZygpLmxlbmd0aC0yKS5yZXBsYWNlKC9cLlwqXD8kLywiKiIpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBFcnJvcj9hLnN0YWNrfHxhLm1lc3NhZ2U6YX1mdW5jdGlvbiBtKCl7Y29uc29sZS53YXJuKCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuIil9cmV0dXJuIHIuZW5hYmxlKHIubG9hZCgpKSxyfXZhciBKaT1ZaTsoZnVuY3Rpb24oZSxuKXtuLmZvcm1hdEFyZ3M9byxuLnNhdmU9dCxuLmxvYWQ9cyxuLnVzZUNvbG9ycz1yLG4uc3RvcmFnZT1pKCksbi5kZXN0cm95PSgoKT0+e2xldCBjPSExO3JldHVybigpPT57Y3x8KGM9ITAsY29uc29sZS53YXJuKCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuIikpfX0pKCksbi5jb2xvcnM9WyIjMDAwMENDIiwiIzAwMDBGRiIsIiMwMDMzQ0MiLCIjMDAzM0ZGIiwiIzAwNjZDQyIsIiMwMDY2RkYiLCIjMDA5OUNDIiwiIzAwOTlGRiIsIiMwMENDMDAiLCIjMDBDQzMzIiwiIzAwQ0M2NiIsIiMwMENDOTkiLCIjMDBDQ0NDIiwiIzAwQ0NGRiIsIiMzMzAwQ0MiLCIjMzMwMEZGIiwiIzMzMzNDQyIsIiMzMzMzRkYiLCIjMzM2NkNDIiwiIzMzNjZGRiIsIiMzMzk5Q0MiLCIjMzM5OUZGIiwiIzMzQ0MwMCIsIiMzM0NDMzMiLCIjMzNDQzY2IiwiIzMzQ0M5OSIsIiMzM0NDQ0MiLCIjMzNDQ0ZGIiwiIzY2MDBDQyIsIiM2NjAwRkYiLCIjNjYzM0NDIiwiIzY2MzNGRiIsIiM2NkNDMDAiLCIjNjZDQzMzIiwiIzk5MDBDQyIsIiM5OTAwRkYiLCIjOTkzM0NDIiwiIzk5MzNGRiIsIiM5OUNDMDAiLCIjOTlDQzMzIiwiI0NDMDAwMCIsIiNDQzAwMzMiLCIjQ0MwMDY2IiwiI0NDMDA5OSIsIiNDQzAwQ0MiLCIjQ0MwMEZGIiwiI0NDMzMwMCIsIiNDQzMzMzMiLCIjQ0MzMzY2IiwiI0NDMzM5OSIsIiNDQzMzQ0MiLCIjQ0MzM0ZGIiwiI0NDNjYwMCIsIiNDQzY2MzMiLCIjQ0M5OTAwIiwiI0NDOTkzMyIsIiNDQ0NDMDAiLCIjQ0NDQzMzIiwiI0ZGMDAwMCIsIiNGRjAwMzMiLCIjRkYwMDY2IiwiI0ZGMDA5OSIsIiNGRjAwQ0MiLCIjRkYwMEZGIiwiI0ZGMzMwMCIsIiNGRjMzMzMiLCIjRkYzMzY2IiwiI0ZGMzM5OSIsIiNGRjMzQ0MiLCIjRkYzM0ZGIiwiI0ZGNjYwMCIsIiNGRjY2MzMiLCIjRkY5OTAwIiwiI0ZGOTkzMyIsIiNGRkNDMDAiLCIjRkZDQzMzIl07ZnVuY3Rpb24gcigpe3JldHVybiB0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmd2luZG93LnByb2Nlc3MmJih3aW5kb3cucHJvY2Vzcy50eXBlPT09InJlbmRlcmVyInx8d2luZG93LnByb2Nlc3MuX19ud2pzKT8hMDp0eXBlb2YgbmF2aWdhdG9yIT0idW5kZWZpbmVkIiYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVwvKFxkKykvKT8hMTp0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2V8fHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ3aW5kb3cuY29uc29sZSYmKHdpbmRvdy5jb25zb2xlLmZpcmVidWd8fHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiYmd2luZG93LmNvbnNvbGUudGFibGUpfHx0eXBlb2YgbmF2aWdhdG9yIT0idW5kZWZpbmVkIiYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XC8oXGQrKS8pJiZwYXJzZUludChSZWdFeHAuJDEsMTApPj0zMXx8dHlwZW9mIG5hdmlnYXRvciE9InVuZGVmaW5lZCImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcLyhcZCspLyl9ZnVuY3Rpb24gbyhjKXtpZihjWzBdPSh0aGlzLnVzZUNvbG9ycz8iJWMiOiIiKSt0aGlzLm5hbWVzcGFjZSsodGhpcy51c2VDb2xvcnM/IiAlYyI6IiAiKStjWzBdKyh0aGlzLnVzZUNvbG9ycz8iJWMgIjoiICIpKyIrIitlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKSwhdGhpcy51c2VDb2xvcnMpcmV0dXJuO2NvbnN0IG09ImNvbG9yOiAiK3RoaXMuY29sb3I7Yy5zcGxpY2UoMSwwLG0sImNvbG9yOiBpbmhlcml0Iik7bGV0IGE9MCxoPTA7Y1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csTz0+e08hPT0iJSUiJiYoYSsrLE89PT0iJWMiJiYoaD1hKSl9KSxjLnNwbGljZShoLDAsbSl9bi5sb2c9Y29uc29sZS5kZWJ1Z3x8Y29uc29sZS5sb2d8fCgoKT0+e30pO2Z1bmN0aW9uIHQoYyl7dHJ5e2M/bi5zdG9yYWdlLnNldEl0ZW0oImRlYnVnIixjKTpuLnN0b3JhZ2UucmVtb3ZlSXRlbSgiZGVidWciKX1jYXRjaHt9fWZ1bmN0aW9uIHMoKXtsZXQgYzt0cnl7Yz1uLnN0b3JhZ2UuZ2V0SXRlbSgiZGVidWciKX1jYXRjaHt9cmV0dXJuIWMmJnR5cGVvZiBwcm9jZXNzIT0idW5kZWZpbmVkIiYmImVudiJpbiBwcm9jZXNzJiYoYz17REVQTE9ZTUVOVF9CQVNFUEFUSDoiL29wdC9ydW5uZXIiLERPVE5FVF9OT0xPR086IjEiLFVTRVI6InJ1bm5lciIsbnBtX2NvbmZpZ19hbHdheXNfYXV0aDoiIixucG1fY29uZmlnX3VzZXJfYWdlbnQ6Im5wbS84LjExLjAgbm9kZS92MTguMy4wIGxpbnV4IHg2NCB3b3Jrc3BhY2VzL2ZhbHNlIGNpL2dpdGh1Yi1hY3Rpb25zIixDSToidHJ1ZSIsR0lUSFVCX0VOVjoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3NldF9lbnZfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixQSVBYX0hPTUU6Ii9vcHQvcGlweCIsbnBtX25vZGVfZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsSkFWQV9IT01FXzhfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi04LWpkay1hbWQ2NCIsTk9ERV9BVVRIX1RPS0VOOiJYWFhYWC1YWFhYWC1YWFhYWC1YWFhYWCIsU0hMVkw6IjEiLG5wbV9jb25maWdfbm9wcm94eToiIixIT01FOiIvaG9tZS9ydW5uZXIiLFJVTk5FUl9URU1QOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcCIsR0lUSFVCX0VWRU5UX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19naXRodWJfd29ya2Zsb3cvZXZlbnQuanNvbiIsbnBtX3BhY2thZ2VfanNvbjoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9wYWNrYWdlLmpzb24iLEpBVkFfSE9NRV8xMV9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUElQWF9CSU5fRElSOiIvb3B0L3BpcHhfYmluIixHUkFBTFZNXzExX1JPT1Q6Ii91c3IvbG9jYWwvZ3JhYWx2bS9ncmFhbHZtLWNlLWphdmExMS0yMi4xLjAiLEdJVEhVQl9SRVBPU0lUT1JZX09XTkVSOiJuc3NodW50IixHUkFETEVfSE9NRToiL3Vzci9zaGFyZS9ncmFkbGUtNy40LjIiLEhPTUVCUkVXX1BSRUZJWDoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXciLEFORFJPSURfTkRLX0xBVEVTVF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGsvMjQuMC44MjE1ODg4IixHSVRIVUJfUkVURU5USU9OX0RBWVM6IjkwIixQT1dFUlNIRUxMX0RJU1RSSUJVVElPTl9DSEFOTkVMOiJHaXRIdWItQWN0aW9ucy11YnVudHUyMCIsQVpVUkVfRVhURU5TSU9OX0RJUjoiL29wdC9hei9hemNsaWV4dGVuc2lvbnMiLEdJVEhVQl9IRUFEX1JFRjoiIixucG1fY29uZmlnX2xvY2FsX3ByZWZpeDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0dSQVBIUUxfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWwiLENPTE9SOiIwIixOVk1fRElSOiIvaG9tZS9ydW5uZXIvLm52bSIsbnBtX2NvbmZpZ19tZXRyaWNzX3JlZ2lzdHJ5OiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8iLERPVE5FVF9TS0lQX0ZJUlNUX1RJTUVfRVhQRVJJRU5DRToiMSIsSkFWQV9IT01FXzE3X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTctamRrLWFtZDY0IixJbWFnZVZlcnNpb246IjIwMjIwNjA1LjEiLFJVTk5FUl9PUzoiTGludXgiLEdJVEhVQl9BUElfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tIixTV0lGVF9QQVRIOiIvdXNyL3NoYXJlL3N3aWZ0L3Vzci9iaW4iLFJVTk5FUl9VU0VSOiJydW5uZXIiLENIUk9NRVdFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9jaHJvbWVfZHJpdmVyIixKT1VSTkFMX1NUUkVBTToiODoyMTgzNCIsR0lUSFVCX1dPUktGTE9XOiJOb2RlLmpzIFBhY2thZ2UiLF86Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbnBtIixucG1fY29uZmlnX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixHSVRIVUJfUlVOX0lEOiIyNDgzNTA2MDM1IixHT1JPT1RfMV8xNl9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTYuMTUveDY0IixucG1fY29uZmlnX2NhY2hlOiIvaG9tZS9ydW5uZXIvLm5wbSIsR09ST09UXzFfMTdfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE3LjExL3g2NCIsR0lUSFVCX1JFRl9UWVBFOiJicmFuY2giLEJPT1RTVFJBUF9IQVNLRUxMX05PTklOVEVSQUNUSVZFOiIxIixHSVRIVUJfQkFTRV9SRUY6IiIsSW1hZ2VPUzoidWJ1bnR1MjAiLFBFUkZMT0dfTE9DQVRJT05fU0VUVElORzoiUlVOTkVSX1BFUkZMT0ciLEdPUk9PVF8xXzE4X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xOC4zL3g2NCIsR0lUSFVCX0FDVElPTl9SRVBPU0lUT1JZOiIiLG5wbV9jb25maWdfbm9kZV9neXA6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvbm9kZS1neXAvYmluL25vZGUtZ3lwLmpzIixQQVRIOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvbm9kZV9tb2R1bGVzLy5iaW46L25vZGVfbW9kdWxlcy8uYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvQG5wbWNsaS9ydW4tc2NyaXB0L2xpYi9ub2RlLWd5cC1iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvc2JpbjovaG9tZS9ydW5uZXIvLmxvY2FsL2Jpbjovb3B0L3BpcHhfYmluOi9ob21lL3J1bm5lci8uY2FyZ28vYmluOi9ob21lL3J1bm5lci8uY29uZmlnL2NvbXBvc2VyL3ZlbmRvci9iaW46L3Vzci9sb2NhbC8uZ2hjdXAvYmluOi9ob21lL3J1bm5lci8uZG90bmV0L3Rvb2xzOi9zbmFwL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIsQU5UX0hPTUU6Ii91c3Ivc2hhcmUvYW50IixET1RORVRfTVVMVElMRVZFTF9MT09LVVA6IjAiLFJVTk5FUl9UUkFDS0lOR19JRDoiZ2l0aHViXzllMGE1YzdhLTk3OGYtNGZjZS1iZTlmLTE1OTdhNDVkM2Y4ZCIsSU5WT0NBVElPTl9JRDoiODIzMTUwNDBmNmNiNGIxODkxYjg3NTUwNzVkYmU3NDkiLEhPTUVCUkVXX0NFTExBUjoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvQ2VsbGFyIixOUE1fQ09ORklHX1VTRVJDT05GSUc6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wLy5ucG1yYyIsUlVOTkVSX1RPT0xfQ0FDSEU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixOT0RFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLG5wbV9wYWNrYWdlX25hbWU6IkBuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0FDVElPTjoiX19ydW5fMiIsR0lUSFVCX1JVTl9OVU1CRVI6IjI0IixSVU5ORVJfQVJDSDoiWDY0IixBR0VOVF9UT09MU0RJUkVDVE9SWToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLExBTkc6IkMuVVRGLTgiLFZDUEtHX0lOU1RBTExBVElPTl9ST09UOiIvdXNyL2xvY2FsL3NoYXJlL3ZjcGtnIixDT05EQToiL3Vzci9zaGFyZS9taW5pY29uZGEiLFJVTk5FUl9OQU1FOiJIb3N0ZWQgQWdlbnQiLFhER19DT05GSUdfSE9NRToiL2hvbWUvcnVubmVyLy5jb25maWciLEdJVEhVQl9SRUZfTkFNRToibWFpbiIsR0lUSFVCX1JFUE9TSVRPUlk6Im5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixucG1fbGlmZWN5Y2xlX3NjcmlwdDoidml0ZSBidWlsZCIsQU5EUk9JRF9OREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX0FDVElPTl9SRUY6IiIsREVCSUFOX0ZST05URU5EOiJub25pbnRlcmFjdGl2ZSIsR0lUSFVCX0FDVElPTlM6InRydWUiLG5wbV9wYWNrYWdlX3ZlcnNpb246IjAuMS4xMyIsbnBtX2xpZmVjeWNsZV9ldmVudDoiYnVpbGQiLEdJVEhVQl9SRUZfUFJPVEVDVEVEOiJmYWxzZSIsR0lUSFVCX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsQUNDRVBUX0VVTEE6IlkiLEdJVEhVQl9KT0I6InB1Ymxpc2gtbnBtIixSVU5ORVJfUEVSRkxPRzoiL2hvbWUvcnVubmVyL3BlcmZsb2ciLEdJVEhVQl9TSEE6ImY2NTk4ZDE4ODYxYzYwODRhMzAyNDNjOWQ2YTlkMDIwMGUxZjllOTYiLEdJVEhVQl9SVU5fQVRURU1QVDoiMSIsR0lUSFVCX1JFRjoicmVmcy9oZWFkcy9tYWluIixHSVRIVUJfQUNUT1I6Im5zc2h1bnQiLEFORFJPSURfU0RLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixMRUlOX0hPTUU6Ii91c3IvbG9jYWwvbGliL2xlaW4iLG5wbV9jb25maWdfZ2xvYmFsY29uZmlnOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvZXRjL25wbXJjIixucG1fY29uZmlnX2luaXRfbW9kdWxlOiIvaG9tZS9ydW5uZXIvLm5wbS1pbml0LmpzIixHSVRIVUJfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL2FkZF9wYXRoXzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSkFWQV9IT01FOiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsUlVOTkVSX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luIixucG1fZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9iaW4vbnBtLWNsaS5qcyIsSE9NRUJSRVdfQ0xFQU5VUF9QRVJJT0RJQ19GVUxMX0RBWVM6IjM2NTAiLEdJVEhVQl9FVkVOVF9OQU1FOiJwdXNoIixIT01FQlJFV19OT19BVVRPX1VQREFURToiMSIsQU5EUk9JRF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsR0lUSFVCX1NFUlZFUl9VUkw6Imh0dHBzOi8vZ2l0aHViLmNvbSIsR0VDS09XRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvZ2Vja29fZHJpdmVyIixMRUlOX0pBUjoiL3Vzci9sb2NhbC9saWIvbGVpbi9zZWxmLWluc3RhbGxzL2xlaW5pbmdlbi0yLjkuOC1zdGFuZGFsb25lLmphciIsbnBtX2NvbmZpZ19nbG9iYWxfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEhPTUVCUkVXX1JFUE9TSVRPUlk6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0hvbWVicmV3IixucG1fY29tbWFuZDoicnVuLXNjcmlwdCIsU0dYX0FFU01fQUREUjoiMSIsQ0hST01FX0JJTjoiL3Vzci9iaW4vZ29vZ2xlLWNocm9tZSIsU0VMRU5JVU1fSkFSX1BBVEg6Ii91c3Ivc2hhcmUvamF2YS9zZWxlbml1bS1zZXJ2ZXIuamFyIixBTkRST0lEX05ES19IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfU1RFUF9TVU1NQVJZOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc3RlcF9zdW1tYXJ5XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSU5JVF9DV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEVESVRPUjoidmkiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn0uREVCVUcpLGN9ZnVuY3Rpb24gaSgpe3RyeXtyZXR1cm4gbG9jYWxTdG9yYWdlfWNhdGNoe319ZS5leHBvcnRzPUppKG4pO2NvbnN0e2Zvcm1hdHRlcnM6bH09ZS5leHBvcnRzO2wuaj1mdW5jdGlvbihjKXt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGMpfWNhdGNoKG0pe3JldHVybiJbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogIittLm1lc3NhZ2V9fX0pKHNlLHNlLmV4cG9ydHMpO3ZhciB2dD1zZS5leHBvcnRzLEhvPXtleHBvcnRzOnt9fSxEdD1mdW5jdGlvbihuLHIpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCkscz0wO3M8dC5sZW5ndGg7cysrKXRbc109YXJndW1lbnRzW3NdO3JldHVybiBuLmFwcGx5KHIsdCl9fSx6aT1EdCx2bz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLERvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj12by5jYWxsKG4pO3JldHVybiBlW3JdfHwoZVtyXT1yLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfX0oT2JqZWN0LmNyZWF0ZShudWxsKSk7ZnVuY3Rpb24gUG4oZSl7cmV0dXJuIGU9ZS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKHIpe3JldHVybiBEbyhyKT09PWV9fWZ1bmN0aW9uIFNvKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIFlyKGUpe3JldHVybiB0eXBlb2YgZT09InVuZGVmaW5lZCJ9ZnVuY3Rpb24gcWkoZSl7cmV0dXJuIGUhPT1udWxsJiYhWXIoZSkmJmUuY29uc3RydWN0b3IhPT1udWxsJiYhWXIoZS5jb25zdHJ1Y3RvcikmJnR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyPT0iZnVuY3Rpb24iJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBTdD1QbigiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBRaShlKXt2YXIgbjtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyIT0idW5kZWZpbmVkIiYmQXJyYXlCdWZmZXIuaXNWaWV3P249QXJyYXlCdWZmZXIuaXNWaWV3KGUpOm49ZSYmZS5idWZmZXImJlN0KGUuYnVmZmVyKSxufWZ1bmN0aW9uIFppKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyJ9ZnVuY3Rpb24gZWEoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIn1mdW5jdGlvbiBQdChlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0In1mdW5jdGlvbiBKcihlKXtpZihEbyhlKSE9PSJvYmplY3QiKXJldHVybiExO3ZhciBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbj09PW51bGx8fG49PT1PYmplY3QucHJvdG90eXBlfXZhciBuYT1QbigiRGF0ZSIpLHJhPVBuKCJGaWxlIiksb2E9UG4oIkJsb2IiKSx0YT1QbigiRmlsZUxpc3QiKTtmdW5jdGlvbiBQbyhlKXtyZXR1cm4gdm8uY2FsbChlKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9ZnVuY3Rpb24gc2EoZSl7cmV0dXJuIFB0KGUpJiZQbyhlLnBpcGUpfWZ1bmN0aW9uIGlhKGUpe3ZhciBuPSJbb2JqZWN0IEZvcm1EYXRhXSI7cmV0dXJuIGUmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJmUgaW5zdGFuY2VvZiBGb3JtRGF0YXx8dm8uY2FsbChlKT09PW58fFBvKGUudG9TdHJpbmcpJiZlLnRvU3RyaW5nKCk9PT1uKX12YXIgYWE9UG4oIlVSTFNlYXJjaFBhcmFtcyIpO2Z1bmN0aW9uIHVhKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9ZnVuY3Rpb24gX2EoKXtyZXR1cm4gdHlwZW9mIG5hdmlnYXRvciE9InVuZGVmaW5lZCImJihuYXZpZ2F0b3IucHJvZHVjdD09PSJSZWFjdE5hdGl2ZSJ8fG5hdmlnYXRvci5wcm9kdWN0PT09Ik5hdGl2ZVNjcmlwdCJ8fG5hdmlnYXRvci5wcm9kdWN0PT09Ik5TIik/ITE6dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJnR5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCJ9ZnVuY3Rpb24gd28oZSxuKXtpZighKGU9PT1udWxsfHx0eXBlb2YgZT09InVuZGVmaW5lZCIpKWlmKHR5cGVvZiBlIT0ib2JqZWN0IiYmKGU9W2VdKSxTbyhlKSlmb3IodmFyIHI9MCxvPWUubGVuZ3RoO3I8bztyKyspbi5jYWxsKG51bGwsZVtyXSxyLGUpO2Vsc2UgZm9yKHZhciB0IGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm4uY2FsbChudWxsLGVbdF0sdCxlKX1mdW5jdGlvbiBHbygpe3ZhciBlPXt9O2Z1bmN0aW9uIG4odCxzKXtKcihlW3NdKSYmSnIodCk/ZVtzXT1HbyhlW3NdLHQpOkpyKHQpP2Vbc109R28oe30sdCk6U28odCk/ZVtzXT10LnNsaWNlKCk6ZVtzXT10fWZvcih2YXIgcj0wLG89YXJndW1lbnRzLmxlbmd0aDtyPG87cisrKXdvKGFyZ3VtZW50c1tyXSxuKTtyZXR1cm4gZX1mdW5jdGlvbiBsYShlLG4scil7cmV0dXJuIHdvKG4sZnVuY3Rpb24odCxzKXtyJiZ0eXBlb2YgdD09ImZ1bmN0aW9uIj9lW3NdPXppKHQscik6ZVtzXT10fSksZX1mdW5jdGlvbiBjYShlKXtyZXR1cm4gZS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihlPWUuc2xpY2UoMSkpLGV9ZnVuY3Rpb24gZGEoZSxuLHIsbyl7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSxvKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLHImJk9iamVjdC5hc3NpZ24oZS5wcm90b3R5cGUscil9ZnVuY3Rpb24gaGEoZSxuLHIpe3ZhciBvLHQscyxpPXt9O249bnx8e307ZG97Zm9yKG89T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSksdD1vLmxlbmd0aDt0LS0gPjA7KXM9b1t0XSxpW3NdfHwobltzXT1lW3NdLGlbc109ITApO2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfXdoaWxlKGUmJighcnx8cihlLG4pKSYmZSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBufWZ1bmN0aW9uIG1hKGUsbixyKXtlPVN0cmluZyhlKSwocj09PXZvaWQgMHx8cj5lLmxlbmd0aCkmJihyPWUubGVuZ3RoKSxyLT1uLmxlbmd0aDt2YXIgbz1lLmluZGV4T2YobixyKTtyZXR1cm4gbyE9PS0xJiZvPT09cn1mdW5jdGlvbiBwYShlKXtpZighZSlyZXR1cm4gbnVsbDt2YXIgbj1lLmxlbmd0aDtpZihZcihuKSlyZXR1cm4gbnVsbDtmb3IodmFyIHI9bmV3IEFycmF5KG4pO24tLSA+MDspcltuXT1lW25dO3JldHVybiByfXZhciBFYT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUmJm4gaW5zdGFuY2VvZiBlfX0odHlwZW9mIFVpbnQ4QXJyYXkhPSJ1bmRlZmluZWQiJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpLHZlPXtpc0FycmF5OlNvLGlzQXJyYXlCdWZmZXI6U3QsaXNCdWZmZXI6cWksaXNGb3JtRGF0YTppYSxpc0FycmF5QnVmZmVyVmlldzpRaSxpc1N0cmluZzpaaSxpc051bWJlcjplYSxpc09iamVjdDpQdCxpc1BsYWluT2JqZWN0OkpyLGlzVW5kZWZpbmVkOllyLGlzRGF0ZTpuYSxpc0ZpbGU6cmEsaXNCbG9iOm9hLGlzRnVuY3Rpb246UG8saXNTdHJlYW06c2EsaXNVUkxTZWFyY2hQYXJhbXM6YWEsaXNTdGFuZGFyZEJyb3dzZXJFbnY6X2EsZm9yRWFjaDp3byxtZXJnZTpHbyxleHRlbmQ6bGEsdHJpbTp1YSxzdHJpcEJPTTpjYSxpbmhlcml0czpkYSx0b0ZsYXRPYmplY3Q6aGEsa2luZE9mOkRvLGtpbmRPZlRlc3Q6UG4sZW5kc1dpdGg6bWEsdG9BcnJheTpwYSxpc1R5cGVkQXJyYXk6RWEsaXNGaWxlTGlzdDp0YX0sem49dmU7ZnVuY3Rpb24gd3QoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIEd0PWZ1bmN0aW9uKG4scixvKXtpZighcilyZXR1cm4gbjt2YXIgdDtpZihvKXQ9byhyKTtlbHNlIGlmKHpuLmlzVVJMU2VhcmNoUGFyYW1zKHIpKXQ9ci50b1N0cmluZygpO2Vsc2V7dmFyIHM9W107em4uZm9yRWFjaChyLGZ1bmN0aW9uKGMsbSl7Yz09PW51bGx8fHR5cGVvZiBjPT0idW5kZWZpbmVkInx8KHpuLmlzQXJyYXkoYyk/bT1tKyJbXSI6Yz1bY10sem4uZm9yRWFjaChjLGZ1bmN0aW9uKGgpe3puLmlzRGF0ZShoKT9oPWgudG9JU09TdHJpbmcoKTp6bi5pc09iamVjdChoKSYmKGg9SlNPTi5zdHJpbmdpZnkoaCkpLHMucHVzaCh3dChtKSsiPSIrd3QoaCkpfSkpfSksdD1zLmpvaW4oIiYiKX1pZih0KXt2YXIgaT1uLmluZGV4T2YoIiMiKTtpIT09LTEmJihuPW4uc2xpY2UoMCxpKSksbis9KG4uaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrdH1yZXR1cm4gbn0sZmE9dmU7ZnVuY3Rpb24genIoKXt0aGlzLmhhbmRsZXJzPVtdfXpyLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24obixyLG8pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpuLHJlamVjdGVkOnIsc3luY2hyb25vdXM6bz9vLnN5bmNocm9ub3VzOiExLHJ1bldoZW46bz9vLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LHpyLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihuKXt0aGlzLmhhbmRsZXJzW25dJiYodGhpcy5oYW5kbGVyc1tuXT1udWxsKX0senIucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24obil7ZmEuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKG8pe28hPT1udWxsJiZuKG8pfSl9O3ZhciBSYT16cixPYT12ZSxUYT1mdW5jdGlvbihuLHIpe09hLmZvckVhY2gobixmdW5jdGlvbih0LHMpe3MhPT1yJiZzLnRvVXBwZXJDYXNlKCk9PT1yLnRvVXBwZXJDYXNlKCkmJihuW3JdPXQsZGVsZXRlIG5bc10pfSl9LEN0PXZlO2Z1bmN0aW9uIHFuKGUsbixyLG8sdCl7RXJyb3IuY2FsbCh0aGlzKSx0aGlzLm1lc3NhZ2U9ZSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLG4mJih0aGlzLmNvZGU9biksciYmKHRoaXMuY29uZmlnPXIpLG8mJih0aGlzLnJlcXVlc3Q9byksdCYmKHRoaXMucmVzcG9uc2U9dCl9Q3QuaW5oZXJpdHMocW4sRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIHl0PXFuLnByb3RvdHlwZSxMdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0x0W2VdPXt2YWx1ZTplfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHFuLEx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeXQsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSkscW4uZnJvbT1mdW5jdGlvbihlLG4scixvLHQscyl7dmFyIGk9T2JqZWN0LmNyZWF0ZSh5dCk7cmV0dXJuIEN0LnRvRmxhdE9iamVjdChlLGksZnVuY3Rpb24oYyl7cmV0dXJuIGMhPT1FcnJvci5wcm90b3R5cGV9KSxxbi5jYWxsKGksZS5tZXNzYWdlLG4scixvLHQpLGkubmFtZT1lLm5hbWUscyYmT2JqZWN0LmFzc2lnbihpLHMpLGl9O3ZhciBRbj1xbixCdD17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sV2U9dmU7ZnVuY3Rpb24gTmEoZSxuKXtuPW58fG5ldyBGb3JtRGF0YTt2YXIgcj1bXTtmdW5jdGlvbiBvKHMpe3JldHVybiBzPT09bnVsbD8iIjpXZS5pc0RhdGUocyk/cy50b0lTT1N0cmluZygpOldlLmlzQXJyYXlCdWZmZXIocyl8fFdlLmlzVHlwZWRBcnJheShzKT90eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbc10pOkJ1ZmZlci5mcm9tKHMpOnN9ZnVuY3Rpb24gdChzLGkpe2lmKFdlLmlzUGxhaW5PYmplY3Qocyl8fFdlLmlzQXJyYXkocykpe2lmKHIuaW5kZXhPZihzKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitpKTtyLnB1c2gocyksV2UuZm9yRWFjaChzLGZ1bmN0aW9uKGMsbSl7aWYoIVdlLmlzVW5kZWZpbmVkKGMpKXt2YXIgYT1pP2krIi4iK206bSxoO2lmKGMmJiFpJiZ0eXBlb2YgYz09Im9iamVjdCIpe2lmKFdlLmVuZHNXaXRoKG0sInt9IikpYz1KU09OLnN0cmluZ2lmeShjKTtlbHNlIGlmKFdlLmVuZHNXaXRoKG0sIltdIikmJihoPVdlLnRvQXJyYXkoYykpKXtoLmZvckVhY2goZnVuY3Rpb24oTyl7IVdlLmlzVW5kZWZpbmVkKE8pJiZuLmFwcGVuZChhLG8oTykpfSk7cmV0dXJufX10KGMsYSl9fSksci5wb3AoKX1lbHNlIG4uYXBwZW5kKGksbyhzKSl9cmV0dXJuIHQoZSksbn12YXIga3Q9TmEsQ289UW4sZ2E9ZnVuY3Rpb24obixyLG8pe3ZhciB0PW8uY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFvLnN0YXR1c3x8IXR8fHQoby5zdGF0dXMpP24obyk6cihuZXcgQ28oIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIitvLnN0YXR1cyxbQ28uRVJSX0JBRF9SRVFVRVNULENvLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3Ioby5zdGF0dXMvMTAwKS00XSxvLmNvbmZpZyxvLnJlcXVlc3QsbykpfSxxcj12ZSxJYT1xci5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKHIsbyx0LHMsaSxsKXt2YXIgYz1bXTtjLnB1c2gocisiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG8pKSxxci5pc051bWJlcih0KSYmYy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSkscXIuaXNTdHJpbmcocykmJmMucHVzaCgicGF0aD0iK3MpLHFyLmlzU3RyaW5nKGkpJiZjLnB1c2goImRvbWFpbj0iK2kpLGw9PT0hMCYmYy5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9Yy5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKHIpe3ZhciBvPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIityKyIpPShbXjtdKikiKSk7cmV0dXJuIG8/ZGVjb2RlVVJJQ29tcG9uZW50KG9bM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbihyKXt0aGlzLndyaXRlKHIsIiIsRGF0ZS5ub3coKS04NjRlNSl9fX0oKTpmdW5jdGlvbigpe3JldHVybnt3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fX0oKSxiYT1mdW5jdGlvbihuKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KG4pfSxBYT1mdW5jdGlvbihuLHIpe3JldHVybiByP24ucmVwbGFjZSgvXC8rJC8sIiIpKyIvIityLnJlcGxhY2UoL15cLysvLCIiKTpufSxVYT1iYSxIYT1BYSxNdD1mdW5jdGlvbihuLHIpe3JldHVybiBuJiYhVWEocik/SGEobixyKTpyfSx5bz12ZSx2YT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLERhPWZ1bmN0aW9uKG4pe3ZhciByPXt9LG8sdCxzO3JldHVybiBuJiZ5by5mb3JFYWNoKG4uc3BsaXQoYApgKSxmdW5jdGlvbihsKXtpZihzPWwuaW5kZXhPZigiOiIpLG89eW8udHJpbShsLnN1YnN0cigwLHMpKS50b0xvd2VyQ2FzZSgpLHQ9eW8udHJpbShsLnN1YnN0cihzKzEpKSxvKXtpZihyW29dJiZ2YS5pbmRleE9mKG8pPj0wKXJldHVybjtvPT09InNldC1jb29raWUiP3Jbb109KHJbb10/cltvXTpbXSkuY29uY2F0KFt0XSk6cltvXT1yW29dP3Jbb10rIiwgIit0OnR9fSkscn0sWHQ9dmUsU2E9WHQuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBuPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksbztmdW5jdGlvbiB0KHMpe3ZhciBpPXM7cmV0dXJuIG4mJihyLnNldEF0dHJpYnV0ZSgiaHJlZiIsaSksaT1yLmhyZWYpLHIuc2V0QXR0cmlidXRlKCJocmVmIixpKSx7aHJlZjpyLmhyZWYscHJvdG9jb2w6ci5wcm90b2NvbD9yLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpyLmhvc3Qsc2VhcmNoOnIuc2VhcmNoP3Iuc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6ci5oYXNoP3IuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnIuaG9zdG5hbWUscG9ydDpyLnBvcnQscGF0aG5hbWU6ci5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/ci5wYXRobmFtZToiLyIrci5wYXRobmFtZX19cmV0dXJuIG89dCh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oaSl7dmFyIGw9WHQuaXNTdHJpbmcoaSk/dChpKTppO3JldHVybiBsLnByb3RvY29sPT09by5wcm90b2NvbCYmbC5ob3N0PT09by5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKSxMbz1RbixQYT12ZTtmdW5jdGlvbiAkdChlKXtMby5jYWxsKHRoaXMsZT09bnVsbD8iY2FuY2VsZWQiOmUsTG8uRVJSX0NBTkNFTEVEKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifVBhLmluaGVyaXRzKCR0LExvLHtfX0NBTkNFTF9fOiEwfSk7dmFyIFFyPSR0LHdhPWZ1bmN0aW9uKG4pe3ZhciByPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKG4pO3JldHVybiByJiZyWzFdfHwiIn0sT3I9dmUsR2E9Z2EsQ2E9SWEseWE9R3QsTGE9TXQsQmE9RGEsa2E9U2EsTWE9QnQsbG49UW4sWGE9UXIsJGE9d2EsanQ9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sdCl7dmFyIHM9bi5kYXRhLGk9bi5oZWFkZXJzLGw9bi5yZXNwb25zZVR5cGUsYztmdW5jdGlvbiBtKCl7bi5jYW5jZWxUb2tlbiYmbi5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShjKSxuLnNpZ25hbCYmbi5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpfU9yLmlzRm9ybURhdGEocykmJk9yLmlzU3RhbmRhcmRCcm93c2VyRW52KCkmJmRlbGV0ZSBpWyJDb250ZW50LVR5cGUiXTt2YXIgYT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYobi5hdXRoKXt2YXIgaD1uLmF1dGgudXNlcm5hbWV8fCIiLE89bi5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChuLmF1dGgucGFzc3dvcmQpKToiIjtpLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShoKyI6IitPKX12YXIgRD1MYShuLmJhc2VVUkwsbi51cmwpO2Eub3BlbihuLm1ldGhvZC50b1VwcGVyQ2FzZSgpLHlhKEQsbi5wYXJhbXMsbi5wYXJhbXNTZXJpYWxpemVyKSwhMCksYS50aW1lb3V0PW4udGltZW91dDtmdW5jdGlvbiB3KCl7aWYoISFhKXt2YXIgZj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGE/QmEoYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxBPSFsfHxsPT09InRleHQifHxsPT09Impzb24iP2EucmVzcG9uc2VUZXh0OmEucmVzcG9uc2UsVT17ZGF0YTpBLHN0YXR1czphLnN0YXR1cyxzdGF0dXNUZXh0OmEuc3RhdHVzVGV4dCxoZWFkZXJzOmYsY29uZmlnOm4scmVxdWVzdDphfTtHYShmdW5jdGlvbihqKXtvKGopLG0oKX0sZnVuY3Rpb24oail7dChqKSxtKCl9LFUpLGE9bnVsbH19aWYoIm9ubG9hZGVuZCJpbiBhP2Eub25sb2FkZW5kPXc6YS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshYXx8YS5yZWFkeVN0YXRlIT09NHx8YS5zdGF0dXM9PT0wJiYhKGEucmVzcG9uc2VVUkwmJmEucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KHcpfSxhLm9uYWJvcnQ9ZnVuY3Rpb24oKXshYXx8KHQobmV3IGxuKCJSZXF1ZXN0IGFib3J0ZWQiLGxuLkVDT05OQUJPUlRFRCxuLGEpKSxhPW51bGwpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXt0KG5ldyBsbigiTmV0d29yayBFcnJvciIsbG4uRVJSX05FVFdPUkssbixhLGEpKSxhPW51bGx9LGEub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIEE9bi50aW1lb3V0PyJ0aW1lb3V0IG9mICIrbi50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLFU9bi50cmFuc2l0aW9uYWx8fE1hO24udGltZW91dEVycm9yTWVzc2FnZSYmKEE9bi50aW1lb3V0RXJyb3JNZXNzYWdlKSx0KG5ldyBsbihBLFUuY2xhcmlmeVRpbWVvdXRFcnJvcj9sbi5FVElNRURPVVQ6bG4uRUNPTk5BQk9SVEVELG4sYSkpLGE9bnVsbH0sT3IuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSl7dmFyIEM9KG4ud2l0aENyZWRlbnRpYWxzfHxrYShEKSkmJm4ueHNyZkNvb2tpZU5hbWU/Q2EucmVhZChuLnhzcmZDb29raWVOYW1lKTp2b2lkIDA7QyYmKGlbbi54c3JmSGVhZGVyTmFtZV09Qyl9InNldFJlcXVlc3RIZWFkZXIiaW4gYSYmT3IuZm9yRWFjaChpLGZ1bmN0aW9uKEEsVSl7dHlwZW9mIHM9PSJ1bmRlZmluZWQiJiZVLnRvTG93ZXJDYXNlKCk9PT0iY29udGVudC10eXBlIj9kZWxldGUgaVtVXTphLnNldFJlcXVlc3RIZWFkZXIoVSxBKX0pLE9yLmlzVW5kZWZpbmVkKG4ud2l0aENyZWRlbnRpYWxzKXx8KGEud2l0aENyZWRlbnRpYWxzPSEhbi53aXRoQ3JlZGVudGlhbHMpLGwmJmwhPT0ianNvbiImJihhLnJlc3BvbnNlVHlwZT1uLnJlc3BvbnNlVHlwZSksdHlwZW9mIG4ub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZhLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixuLm9uRG93bmxvYWRQcm9ncmVzcyksdHlwZW9mIG4ub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS51cGxvYWQmJmEudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixuLm9uVXBsb2FkUHJvZ3Jlc3MpLChuLmNhbmNlbFRva2VufHxuLnNpZ25hbCkmJihjPWZ1bmN0aW9uKGYpeyFhfHwodCghZnx8ZiYmZi50eXBlP25ldyBYYTpmKSxhLmFib3J0KCksYT1udWxsKX0sbi5jYW5jZWxUb2tlbiYmbi5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYyksbi5zaWduYWwmJihuLnNpZ25hbC5hYm9ydGVkP2MoKTpuLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYykpKSxzfHwocz1udWxsKTt2YXIgVD0kYShEKTtpZihUJiZbImh0dHAiLCJodHRwcyIsImZpbGUiXS5pbmRleE9mKFQpPT09LTEpe3QobmV3IGxuKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK1QrIjoiLGxuLkVSUl9CQURfUkVRVUVTVCxuKSk7cmV0dXJufWEuc2VuZChzKX0pfSxqYT1udWxsLFVlPXZlLHh0PVRhLEZ0PVFuLHhhPUJ0LEZhPWt0LFZhPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn07ZnVuY3Rpb24gVnQoZSxuKXshVWUuaXNVbmRlZmluZWQoZSkmJlVlLmlzVW5kZWZpbmVkKGVbIkNvbnRlbnQtVHlwZSJdKSYmKGVbIkNvbnRlbnQtVHlwZSJdPW4pfWZ1bmN0aW9uIEthKCl7dmFyIGU7cmV0dXJuKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCE9InVuZGVmaW5lZCJ8fHR5cGVvZiBwcm9jZXNzIT0idW5kZWZpbmVkIiYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpPT09IltvYmplY3QgcHJvY2Vzc10iKSYmKGU9anQpLGV9ZnVuY3Rpb24gV2EoZSxuLHIpe2lmKFVlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4obnx8SlNPTi5wYXJzZSkoZSksVWUudHJpbShlKX1jYXRjaChvKXtpZihvLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IG99cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX12YXIgWnI9e3RyYW5zaXRpb25hbDp4YSxhZGFwdGVyOkthKCksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24obixyKXtpZih4dChyLCJBY2NlcHQiKSx4dChyLCJDb250ZW50LVR5cGUiKSxVZS5pc0Zvcm1EYXRhKG4pfHxVZS5pc0FycmF5QnVmZmVyKG4pfHxVZS5pc0J1ZmZlcihuKXx8VWUuaXNTdHJlYW0obil8fFVlLmlzRmlsZShuKXx8VWUuaXNCbG9iKG4pKXJldHVybiBuO2lmKFVlLmlzQXJyYXlCdWZmZXJWaWV3KG4pKXJldHVybiBuLmJ1ZmZlcjtpZihVZS5pc1VSTFNlYXJjaFBhcmFtcyhuKSlyZXR1cm4gVnQociwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiKSxuLnRvU3RyaW5nKCk7dmFyIG89VWUuaXNPYmplY3QobiksdD1yJiZyWyJDb250ZW50LVR5cGUiXSxzO2lmKChzPVVlLmlzRmlsZUxpc3QobikpfHxvJiZ0PT09Im11bHRpcGFydC9mb3JtLWRhdGEiKXt2YXIgaT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEZhKHM/eyJmaWxlc1tdIjpufTpuLGkmJm5ldyBpKX1lbHNlIGlmKG98fHQ9PT0iYXBwbGljYXRpb24vanNvbiIpcmV0dXJuIFZ0KHIsImFwcGxpY2F0aW9uL2pzb24iKSxXYShuKTtyZXR1cm4gbn1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihuKXt2YXIgcj10aGlzLnRyYW5zaXRpb25hbHx8WnIudHJhbnNpdGlvbmFsLG89ciYmci5zaWxlbnRKU09OUGFyc2luZyx0PXImJnIuZm9yY2VkSlNPTlBhcnNpbmcscz0hbyYmdGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoc3x8dCYmVWUuaXNTdHJpbmcobikmJm4ubGVuZ3RoKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShuKX1jYXRjaChpKXtpZihzKXRocm93IGkubmFtZT09PSJTeW50YXhFcnJvciI/RnQuZnJvbShpLEZ0LkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOml9cmV0dXJuIG59XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOmphfSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihuKXtyZXR1cm4gbj49MjAwJiZuPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07VWUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSxmdW5jdGlvbihuKXtaci5oZWFkZXJzW25dPXt9fSksVWUuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKG4pe1pyLmhlYWRlcnNbbl09VWUubWVyZ2UoVmEpfSk7dmFyIEJvPVpyLFlhPXZlLEphPUJvLHphPWZ1bmN0aW9uKG4scixvKXt2YXIgdD10aGlzfHxKYTtyZXR1cm4gWWEuZm9yRWFjaChvLGZ1bmN0aW9uKGkpe249aS5jYWxsKHQsbixyKX0pLG59LEt0PWZ1bmN0aW9uKG4pe3JldHVybiEhKG4mJm4uX19DQU5DRUxfXyl9LFd0PXZlLGtvPXphLHFhPUt0LFFhPUJvLFphPVFyO2Z1bmN0aW9uIE1vKGUpe2lmKGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLGUuc2lnbmFsJiZlLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBaYX12YXIgZXU9ZnVuY3Rpb24obil7TW8obiksbi5oZWFkZXJzPW4uaGVhZGVyc3x8e30sbi5kYXRhPWtvLmNhbGwobixuLmRhdGEsbi5oZWFkZXJzLG4udHJhbnNmb3JtUmVxdWVzdCksbi5oZWFkZXJzPVd0Lm1lcmdlKG4uaGVhZGVycy5jb21tb258fHt9LG4uaGVhZGVyc1tuLm1ldGhvZF18fHt9LG4uaGVhZGVycyksV3QuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxmdW5jdGlvbih0KXtkZWxldGUgbi5oZWFkZXJzW3RdfSk7dmFyIHI9bi5hZGFwdGVyfHxRYS5hZGFwdGVyO3JldHVybiByKG4pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIE1vKG4pLHQuZGF0YT1rby5jYWxsKG4sdC5kYXRhLHQuaGVhZGVycyxuLnRyYW5zZm9ybVJlc3BvbnNlKSx0fSxmdW5jdGlvbih0KXtyZXR1cm4gcWEodCl8fChNbyhuKSx0JiZ0LnJlc3BvbnNlJiYodC5yZXNwb25zZS5kYXRhPWtvLmNhbGwobix0LnJlc3BvbnNlLmRhdGEsdC5yZXNwb25zZS5oZWFkZXJzLG4udHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QodCl9KX0sTGU9dmUsWXQ9ZnVuY3Rpb24obixyKXtyPXJ8fHt9O3ZhciBvPXt9O2Z1bmN0aW9uIHQoYSxoKXtyZXR1cm4gTGUuaXNQbGFpbk9iamVjdChhKSYmTGUuaXNQbGFpbk9iamVjdChoKT9MZS5tZXJnZShhLGgpOkxlLmlzUGxhaW5PYmplY3QoaCk/TGUubWVyZ2Uoe30saCk6TGUuaXNBcnJheShoKT9oLnNsaWNlKCk6aH1mdW5jdGlvbiBzKGEpe2lmKExlLmlzVW5kZWZpbmVkKHJbYV0pKXtpZighTGUuaXNVbmRlZmluZWQoblthXSkpcmV0dXJuIHQodm9pZCAwLG5bYV0pfWVsc2UgcmV0dXJuIHQoblthXSxyW2FdKX1mdW5jdGlvbiBpKGEpe2lmKCFMZS5pc1VuZGVmaW5lZChyW2FdKSlyZXR1cm4gdCh2b2lkIDAsclthXSl9ZnVuY3Rpb24gbChhKXtpZihMZS5pc1VuZGVmaW5lZChyW2FdKSl7aWYoIUxlLmlzVW5kZWZpbmVkKG5bYV0pKXJldHVybiB0KHZvaWQgMCxuW2FdKX1lbHNlIHJldHVybiB0KHZvaWQgMCxyW2FdKX1mdW5jdGlvbiBjKGEpe2lmKGEgaW4gcilyZXR1cm4gdChuW2FdLHJbYV0pO2lmKGEgaW4gbilyZXR1cm4gdCh2b2lkIDAsblthXSl9dmFyIG09e3VybDppLG1ldGhvZDppLGRhdGE6aSxiYXNlVVJMOmwsdHJhbnNmb3JtUmVxdWVzdDpsLHRyYW5zZm9ybVJlc3BvbnNlOmwscGFyYW1zU2VyaWFsaXplcjpsLHRpbWVvdXQ6bCx0aW1lb3V0TWVzc2FnZTpsLHdpdGhDcmVkZW50aWFsczpsLGFkYXB0ZXI6bCxyZXNwb25zZVR5cGU6bCx4c3JmQ29va2llTmFtZTpsLHhzcmZIZWFkZXJOYW1lOmwsb25VcGxvYWRQcm9ncmVzczpsLG9uRG93bmxvYWRQcm9ncmVzczpsLGRlY29tcHJlc3M6bCxtYXhDb250ZW50TGVuZ3RoOmwsbWF4Qm9keUxlbmd0aDpsLGJlZm9yZVJlZGlyZWN0OmwsdHJhbnNwb3J0OmwsaHR0cEFnZW50OmwsaHR0cHNBZ2VudDpsLGNhbmNlbFRva2VuOmwsc29ja2V0UGF0aDpsLHJlc3BvbnNlRW5jb2Rpbmc6bCx2YWxpZGF0ZVN0YXR1czpjfTtyZXR1cm4gTGUuZm9yRWFjaChPYmplY3Qua2V5cyhuKS5jb25jYXQoT2JqZWN0LmtleXMocikpLGZ1bmN0aW9uKGgpe3ZhciBPPW1baF18fHMsRD1PKGgpO0xlLmlzVW5kZWZpbmVkKEQpJiZPIT09Y3x8KG9baF09RCl9KSxvfSxKdD17dmVyc2lvbjoiMC4yNy4yIn0sbnU9SnQudmVyc2lvbixPbj1RbixYbz17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goZnVuY3Rpb24oZSxuKXtYb1tlXT1mdW5jdGlvbihvKXtyZXR1cm4gdHlwZW9mIG89PT1lfHwiYSIrKG48MT8ibiAiOiIgIikrZX19KTt2YXIgenQ9e307WG8udHJhbnNpdGlvbmFsPWZ1bmN0aW9uKG4scixvKXtmdW5jdGlvbiB0KHMsaSl7cmV0dXJuIltBeGlvcyB2IitudSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK3MrIiciK2krKG8/Ii4gIitvOiIiKX1yZXR1cm4gZnVuY3Rpb24ocyxpLGwpe2lmKG49PT0hMSl0aHJvdyBuZXcgT24odChpLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHI/IiBpbiAiK3I6IiIpKSxPbi5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIHImJiF6dFtpXSYmKHp0W2ldPSEwLGNvbnNvbGUud2Fybih0KGksIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3IrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksbj9uKHMsaSxsKTohMH19O2Z1bmN0aW9uIHJ1KGUsbixyKXtpZih0eXBlb2YgZSE9Im9iamVjdCIpdGhyb3cgbmV3IE9uKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixPbi5FUlJfQkFEX09QVElPTl9WQUxVRSk7Zm9yKHZhciBvPU9iamVjdC5rZXlzKGUpLHQ9by5sZW5ndGg7dC0tID4wOyl7dmFyIHM9b1t0XSxpPW5bc107aWYoaSl7dmFyIGw9ZVtzXSxjPWw9PT12b2lkIDB8fGkobCxzLGUpO2lmKGMhPT0hMCl0aHJvdyBuZXcgT24oIm9wdGlvbiAiK3MrIiBtdXN0IGJlICIrYyxPbi5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYociE9PSEwKXRocm93IG5ldyBPbigiVW5rbm93biBvcHRpb24gIitzLE9uLkVSUl9CQURfT1BUSU9OKX19dmFyIG91PXthc3NlcnRPcHRpb25zOnJ1LHZhbGlkYXRvcnM6WG99LHF0PXZlLHR1PUd0LFF0PVJhLFp0PWV1LGVvPVl0LHN1PU10LGVzPW91LFpuPWVzLnZhbGlkYXRvcnM7ZnVuY3Rpb24gZXIoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBRdCxyZXNwb25zZTpuZXcgUXR9fWVyLnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKG4scil7dHlwZW9mIG49PSJzdHJpbmciPyhyPXJ8fHt9LHIudXJsPW4pOnI9bnx8e30scj1lbyh0aGlzLmRlZmF1bHRzLHIpLHIubWV0aG9kP3IubWV0aG9kPXIubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/ci5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTpyLm1ldGhvZD0iZ2V0Ijt2YXIgbz1yLnRyYW5zaXRpb25hbDtvIT09dm9pZCAwJiZlcy5hc3NlcnRPcHRpb25zKG8se3NpbGVudEpTT05QYXJzaW5nOlpuLnRyYW5zaXRpb25hbChabi5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpabi50cmFuc2l0aW9uYWwoWm4uYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpabi50cmFuc2l0aW9uYWwoWm4uYm9vbGVhbil9LCExKTt2YXIgdD1bXSxzPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihEKXt0eXBlb2YgRC5ydW5XaGVuPT0iZnVuY3Rpb24iJiZELnJ1bldoZW4ocik9PT0hMXx8KHM9cyYmRC5zeW5jaHJvbm91cyx0LnVuc2hpZnQoRC5mdWxmaWxsZWQsRC5yZWplY3RlZCkpfSk7dmFyIGk9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihEKXtpLnB1c2goRC5mdWxmaWxsZWQsRC5yZWplY3RlZCl9KTt2YXIgbDtpZighcyl7dmFyIGM9W1p0LHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGMsdCksYz1jLmNvbmNhdChpKSxsPVByb21pc2UucmVzb2x2ZShyKTtjLmxlbmd0aDspbD1sLnRoZW4oYy5zaGlmdCgpLGMuc2hpZnQoKSk7cmV0dXJuIGx9Zm9yKHZhciBtPXI7dC5sZW5ndGg7KXt2YXIgYT10LnNoaWZ0KCksaD10LnNoaWZ0KCk7dHJ5e209YShtKX1jYXRjaChPKXtoKE8pO2JyZWFrfX10cnl7bD1adChtKX1jYXRjaChPKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoTyl9Zm9yKDtpLmxlbmd0aDspbD1sLnRoZW4oaS5zaGlmdCgpLGkuc2hpZnQoKSk7cmV0dXJuIGx9LGVyLnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24obil7bj1lbyh0aGlzLmRlZmF1bHRzLG4pO3ZhciByPXN1KG4uYmFzZVVSTCxuLnVybCk7cmV0dXJuIHR1KHIsbi5wYXJhbXMsbi5wYXJhbXNTZXJpYWxpemVyKX0scXQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24obil7ZXIucHJvdG90eXBlW25dPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHRoaXMucmVxdWVzdChlbyhvfHx7fSx7bWV0aG9kOm4sdXJsOnIsZGF0YToob3x8e30pLmRhdGF9KSl9fSkscXQuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHIobyl7cmV0dXJuIGZ1bmN0aW9uKHMsaSxsKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGVvKGx8fHt9LHttZXRob2Q6bixoZWFkZXJzOm8/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnMsZGF0YTppfSkpfX1lci5wcm90b3R5cGVbbl09cigpLGVyLnByb3RvdHlwZVtuKyJGb3JtIl09cighMCl9KTt2YXIgaXU9ZXIsYXU9UXI7ZnVuY3Rpb24gbnIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciBuO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXtuPXR9KTt2YXIgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKG8pe2lmKCEhci5fbGlzdGVuZXJzKXt2YXIgdCxzPXIuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKHQ9MDt0PHM7dCsrKXIuX2xpc3RlbmVyc1t0XShvKTtyLl9saXN0ZW5lcnM9bnVsbH19KSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihvKXt2YXIgdCxzPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGkpe3Iuc3Vic2NyaWJlKGkpLHQ9aX0pLnRoZW4obyk7cmV0dXJuIHMuY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZSh0KX0sc30sZShmdW5jdGlvbih0KXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBhdSh0KSxuKHIucmVhc29uKSl9KX1uci5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxuci5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKG4pe2lmKHRoaXMucmVhc29uKXtuKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKG4pOnRoaXMuX2xpc3RlbmVycz1bbl19LG5yLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbihuKXtpZighIXRoaXMuX2xpc3RlbmVycyl7dmFyIHI9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2Yobik7ciE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHIsMSl9fSxuci5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgbixyPW5ldyBucihmdW5jdGlvbih0KXtuPXR9KTtyZXR1cm57dG9rZW46cixjYW5jZWw6bn19O3ZhciB1dT1ucixfdT1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuIG4uYXBwbHkobnVsbCxvKX19LGx1PXZlLGN1PWZ1bmN0aW9uKG4pe3JldHVybiBsdS5pc09iamVjdChuKSYmbi5pc0F4aW9zRXJyb3I9PT0hMH0sbnM9dmUsZHU9RHQsbm89aXUsaHU9WXQsbXU9Qm87ZnVuY3Rpb24gcnMoZSl7dmFyIG49bmV3IG5vKGUpLHI9ZHUobm8ucHJvdG90eXBlLnJlcXVlc3Qsbik7cmV0dXJuIG5zLmV4dGVuZChyLG5vLnByb3RvdHlwZSxuKSxucy5leHRlbmQocixuKSxyLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gcnMoaHUoZSx0KSl9LHJ9dmFyIEdlPXJzKG11KTtHZS5BeGlvcz1ubyxHZS5DYW5jZWxlZEVycm9yPVFyLEdlLkNhbmNlbFRva2VuPXV1LEdlLmlzQ2FuY2VsPUt0LEdlLlZFUlNJT049SnQudmVyc2lvbixHZS50b0Zvcm1EYXRhPWt0LEdlLkF4aW9zRXJyb3I9UW4sR2UuQ2FuY2VsPUdlLkNhbmNlbGVkRXJyb3IsR2UuYWxsPWZ1bmN0aW9uKG4pe3JldHVybiBQcm9taXNlLmFsbChuKX0sR2Uuc3ByZWFkPV91LEdlLmlzQXhpb3NFcnJvcj1jdSxIby5leHBvcnRzPUdlLEhvLmV4cG9ydHMuZGVmYXVsdD1HZTt2YXIgJG89SG8uZXhwb3J0cyx3bj17fSxybz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocm8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHJvLkdldEVycm9yUGF5bG9hZD12b2lkIDA7ZnVuY3Rpb24gcHUoZSxuPW51bGwpe3JldHVybntlcnJvcjplLmNvZGUsZXJyb3JfZGVzY3JpcHRpb246ZS5kZXNjcmlwdGlvbix0aW1lc3RhbXA6RGF0ZS5ub3coKSxkZXRhaWxzOm59fXJvLkdldEVycm9yUGF5bG9hZD1wdTt2YXIgb289e30sR249e30sam89e2V4cG9ydHM6e319LG9zPXt9LHplPXt9LHJyPXt9LFRyPXt9LF9lPXt9LE5yPXt9OyhmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5yZWdleHBDb2RlPWUuZ2V0RXNtRXhwb3J0TmFtZT1lLmdldFByb3BlcnR5PWUuc2FmZVN0cmluZ2lmeT1lLnN0cmluZ2lmeT1lLnN0ckNvbmNhdD1lLmFkZENvZGVBcmc9ZS5zdHI9ZS5fPWUubmlsPWUuX0NvZGU9ZS5OYW1lPWUuSURFTlRJRklFUj1lLl9Db2RlT3JOYW1lPXZvaWQgMDtjbGFzcyBue31lLl9Db2RlT3JOYW1lPW4sZS5JREVOVElGSUVSPS9eW2EteiRfXVthLXokXzAtOV0qJC9pO2NsYXNzIHIgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKEEpe2lmKHN1cGVyKCksIWUuSURFTlRJRklFUi50ZXN0KEEpKXRocm93IG5ldyBFcnJvcigiQ29kZUdlbjogbmFtZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllciIpO3RoaXMuc3RyPUF9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5zdHJ9ZW1wdHlTdHIoKXtyZXR1cm4hMX1nZXQgbmFtZXMoKXtyZXR1cm57W3RoaXMuc3RyXToxfX19ZS5OYW1lPXI7Y2xhc3MgbyBleHRlbmRzIG57Y29uc3RydWN0b3IoQSl7c3VwZXIoKSx0aGlzLl9pdGVtcz10eXBlb2YgQT09InN0cmluZyI/W0FdOkF9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5zdHJ9ZW1wdHlTdHIoKXtpZih0aGlzLl9pdGVtcy5sZW5ndGg+MSlyZXR1cm4hMTtjb25zdCBBPXRoaXMuX2l0ZW1zWzBdO3JldHVybiBBPT09IiJ8fEE9PT0nIiInfWdldCBzdHIoKXt2YXIgQTtyZXR1cm4oQT10aGlzLl9zdHIpIT09bnVsbCYmQSE9PXZvaWQgMD9BOnRoaXMuX3N0cj10aGlzLl9pdGVtcy5yZWR1Y2UoKFUsUyk9PmAke1V9JHtTfWAsIiIpfWdldCBuYW1lcygpe3ZhciBBO3JldHVybihBPXRoaXMuX25hbWVzKSE9PW51bGwmJkEhPT12b2lkIDA/QTp0aGlzLl9uYW1lcz10aGlzLl9pdGVtcy5yZWR1Y2UoKFUsUyk9PihTIGluc3RhbmNlb2YgciYmKFVbUy5zdHJdPShVW1Muc3RyXXx8MCkrMSksVSkse30pfX1lLl9Db2RlPW8sZS5uaWw9bmV3IG8oIiIpO2Z1bmN0aW9uIHQoZiwuLi5BKXtjb25zdCBVPVtmWzBdXTtsZXQgUz0wO2Zvcig7UzxBLmxlbmd0aDspbChVLEFbU10pLFUucHVzaChmWysrU10pO3JldHVybiBuZXcgbyhVKX1lLl89dDtjb25zdCBzPW5ldyBvKCIrIik7ZnVuY3Rpb24gaShmLC4uLkEpe2NvbnN0IFU9W0QoZlswXSldO2xldCBTPTA7Zm9yKDtTPEEubGVuZ3RoOylVLnB1c2gocyksbChVLEFbU10pLFUucHVzaChzLEQoZlsrK1NdKSk7cmV0dXJuIGMoVSksbmV3IG8oVSl9ZS5zdHI9aTtmdW5jdGlvbiBsKGYsQSl7QSBpbnN0YW5jZW9mIG8/Zi5wdXNoKC4uLkEuX2l0ZW1zKTpBIGluc3RhbmNlb2Ygcj9mLnB1c2goQSk6Zi5wdXNoKGgoQSkpfWUuYWRkQ29kZUFyZz1sO2Z1bmN0aW9uIGMoZil7bGV0IEE9MTtmb3IoO0E8Zi5sZW5ndGgtMTspe2lmKGZbQV09PT1zKXtjb25zdCBVPW0oZltBLTFdLGZbQSsxXSk7aWYoVSE9PXZvaWQgMCl7Zi5zcGxpY2UoQS0xLDMsVSk7Y29udGludWV9ZltBKytdPSIrIn1BKyt9fWZ1bmN0aW9uIG0oZixBKXtpZihBPT09JyIiJylyZXR1cm4gZjtpZihmPT09JyIiJylyZXR1cm4gQTtpZih0eXBlb2YgZj09InN0cmluZyIpcmV0dXJuIEEgaW5zdGFuY2VvZiByfHxmW2YubGVuZ3RoLTFdIT09JyInP3ZvaWQgMDp0eXBlb2YgQSE9InN0cmluZyI/YCR7Zi5zbGljZSgwLC0xKX0ke0F9ImA6QVswXT09PSciJz9mLnNsaWNlKDAsLTEpK0Euc2xpY2UoMSk6dm9pZCAwO2lmKHR5cGVvZiBBPT0ic3RyaW5nIiYmQVswXT09PSciJyYmIShmIGluc3RhbmNlb2YgcikpcmV0dXJuYCIke2Z9JHtBLnNsaWNlKDEpfWB9ZnVuY3Rpb24gYShmLEEpe3JldHVybiBBLmVtcHR5U3RyKCk/ZjpmLmVtcHR5U3RyKCk/QTppYCR7Zn0ke0F9YH1lLnN0ckNvbmNhdD1hO2Z1bmN0aW9uIGgoZil7cmV0dXJuIHR5cGVvZiBmPT0ibnVtYmVyInx8dHlwZW9mIGY9PSJib29sZWFuInx8Zj09PW51bGw/ZjpEKEFycmF5LmlzQXJyYXkoZik/Zi5qb2luKCIsIik6Zil9ZnVuY3Rpb24gTyhmKXtyZXR1cm4gbmV3IG8oRChmKSl9ZS5zdHJpbmdpZnk9TztmdW5jdGlvbiBEKGYpe3JldHVybiBKU09OLnN0cmluZ2lmeShmKS5yZXBsYWNlKC9cdTIwMjgvZywiXFx1MjAyOCIpLnJlcGxhY2UoL1x1MjAyOS9nLCJcXHUyMDI5Iil9ZS5zYWZlU3RyaW5naWZ5PUQ7ZnVuY3Rpb24gdyhmKXtyZXR1cm4gdHlwZW9mIGY9PSJzdHJpbmciJiZlLklERU5USUZJRVIudGVzdChmKT9uZXcgbyhgLiR7Zn1gKTp0YFske2Z9XWB9ZS5nZXRQcm9wZXJ0eT13O2Z1bmN0aW9uIEMoZil7aWYodHlwZW9mIGY9PSJzdHJpbmciJiZlLklERU5USUZJRVIudGVzdChmKSlyZXR1cm4gbmV3IG8oYCR7Zn1gKTt0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IGludmFsaWQgZXhwb3J0IG5hbWU6ICR7Zn0sIHVzZSBleHBsaWNpdCAkaWQgbmFtZSBtYXBwaW5nYCl9ZS5nZXRFc21FeHBvcnROYW1lPUM7ZnVuY3Rpb24gVChmKXtyZXR1cm4gbmV3IG8oZi50b1N0cmluZygpKX1lLnJlZ2V4cENvZGU9VH0pKE5yKTt2YXIgeG89e307KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlZhbHVlU2NvcGU9ZS5WYWx1ZVNjb3BlTmFtZT1lLlNjb3BlPWUudmFyS2luZHM9ZS5Vc2VkVmFsdWVTdGF0ZT12b2lkIDA7Y29uc3Qgbj1OcjtjbGFzcyByIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IobSl7c3VwZXIoYENvZGVHZW46ICJjb2RlIiBmb3IgJHttfSBub3QgZGVmaW5lZGApLHRoaXMudmFsdWU9bS52YWx1ZX19dmFyIG87KGZ1bmN0aW9uKGMpe2NbYy5TdGFydGVkPTBdPSJTdGFydGVkIixjW2MuQ29tcGxldGVkPTFdPSJDb21wbGV0ZWQifSkobz1lLlVzZWRWYWx1ZVN0YXRlfHwoZS5Vc2VkVmFsdWVTdGF0ZT17fSkpLGUudmFyS2luZHM9e2NvbnN0Om5ldyBuLk5hbWUoImNvbnN0IiksbGV0Om5ldyBuLk5hbWUoImxldCIpLHZhcjpuZXcgbi5OYW1lKCJ2YXIiKX07Y2xhc3MgdHtjb25zdHJ1Y3Rvcih7cHJlZml4ZXM6bSxwYXJlbnQ6YX09e30pe3RoaXMuX25hbWVzPXt9LHRoaXMuX3ByZWZpeGVzPW0sdGhpcy5fcGFyZW50PWF9dG9OYW1lKG0pe3JldHVybiBtIGluc3RhbmNlb2Ygbi5OYW1lP206dGhpcy5uYW1lKG0pfW5hbWUobSl7cmV0dXJuIG5ldyBuLk5hbWUodGhpcy5fbmV3TmFtZShtKSl9X25ld05hbWUobSl7Y29uc3QgYT10aGlzLl9uYW1lc1ttXXx8dGhpcy5fbmFtZUdyb3VwKG0pO3JldHVybmAke219JHthLmluZGV4Kyt9YH1fbmFtZUdyb3VwKG0pe3ZhciBhLGg7aWYoKChoPShhPXRoaXMuX3BhcmVudCk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLl9wcmVmaXhlcyk9PT1udWxsfHxoPT09dm9pZCAwP3ZvaWQgMDpoLmhhcyhtKSl8fHRoaXMuX3ByZWZpeGVzJiYhdGhpcy5fcHJlZml4ZXMuaGFzKG0pKXRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogcHJlZml4ICIke219IiBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHNjb3BlYCk7cmV0dXJuIHRoaXMuX25hbWVzW21dPXtwcmVmaXg6bSxpbmRleDowfX19ZS5TY29wZT10O2NsYXNzIHMgZXh0ZW5kcyBuLk5hbWV7Y29uc3RydWN0b3IobSxhKXtzdXBlcihhKSx0aGlzLnByZWZpeD1tfXNldFZhbHVlKG0se3Byb3BlcnR5OmEsaXRlbUluZGV4Omh9KXt0aGlzLnZhbHVlPW0sdGhpcy5zY29wZVBhdGg9KDAsbi5fKWAuJHtuZXcgbi5OYW1lKGEpfVske2h9XWB9fWUuVmFsdWVTY29wZU5hbWU9cztjb25zdCBpPSgwLG4uXylgXG5gO2NsYXNzIGwgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKG0pe3N1cGVyKG0pLHRoaXMuX3ZhbHVlcz17fSx0aGlzLl9zY29wZT1tLnNjb3BlLHRoaXMub3B0cz1sZShZKHt9LG0pLHtfbjptLmxpbmVzP2k6bi5uaWx9KX1nZXQoKXtyZXR1cm4gdGhpcy5fc2NvcGV9bmFtZShtKXtyZXR1cm4gbmV3IHMobSx0aGlzLl9uZXdOYW1lKG0pKX12YWx1ZShtLGEpe3ZhciBoO2lmKGEucmVmPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ29kZUdlbjogcmVmIG11c3QgYmUgcGFzc2VkIGluIHZhbHVlIik7Y29uc3QgTz10aGlzLnRvTmFtZShtKSx7cHJlZml4OkR9PU8sdz0oaD1hLmtleSkhPT1udWxsJiZoIT09dm9pZCAwP2g6YS5yZWY7bGV0IEM9dGhpcy5fdmFsdWVzW0RdO2lmKEMpe2NvbnN0IEE9Qy5nZXQodyk7aWYoQSlyZXR1cm4gQX1lbHNlIEM9dGhpcy5fdmFsdWVzW0RdPW5ldyBNYXA7Qy5zZXQodyxPKTtjb25zdCBUPXRoaXMuX3Njb3BlW0RdfHwodGhpcy5fc2NvcGVbRF09W10pLGY9VC5sZW5ndGg7cmV0dXJuIFRbZl09YS5yZWYsTy5zZXRWYWx1ZShhLHtwcm9wZXJ0eTpELGl0ZW1JbmRleDpmfSksT31nZXRWYWx1ZShtLGEpe2NvbnN0IGg9dGhpcy5fdmFsdWVzW21dO2lmKCEhaClyZXR1cm4gaC5nZXQoYSl9c2NvcGVSZWZzKG0sYT10aGlzLl92YWx1ZXMpe3JldHVybiB0aGlzLl9yZWR1Y2VWYWx1ZXMoYSxoPT57aWYoaC5zY29wZVBhdGg9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBuYW1lICIke2h9IiBoYXMgbm8gdmFsdWVgKTtyZXR1cm4oMCxuLl8pYCR7bX0ke2guc2NvcGVQYXRofWB9KX1zY29wZUNvZGUobT10aGlzLl92YWx1ZXMsYSxoKXtyZXR1cm4gdGhpcy5fcmVkdWNlVmFsdWVzKG0sTz0+e2lmKE8udmFsdWU9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBuYW1lICIke099IiBoYXMgbm8gdmFsdWVgKTtyZXR1cm4gTy52YWx1ZS5jb2RlfSxhLGgpfV9yZWR1Y2VWYWx1ZXMobSxhLGg9e30sTyl7bGV0IEQ9bi5uaWw7Zm9yKGNvbnN0IHcgaW4gbSl7Y29uc3QgQz1tW3ddO2lmKCFDKWNvbnRpbnVlO2NvbnN0IFQ9aFt3XT1oW3ddfHxuZXcgTWFwO0MuZm9yRWFjaChmPT57aWYoVC5oYXMoZikpcmV0dXJuO1Quc2V0KGYsby5TdGFydGVkKTtsZXQgQT1hKGYpO2lmKEEpe2NvbnN0IFU9dGhpcy5vcHRzLmVzNT9lLnZhcktpbmRzLnZhcjplLnZhcktpbmRzLmNvbnN0O0Q9KDAsbi5fKWAke0R9JHtVfSAke2Z9ID0gJHtBfTske3RoaXMub3B0cy5fbn1gfWVsc2UgaWYoQT1PPT1udWxsP3ZvaWQgMDpPKGYpKUQ9KDAsbi5fKWAke0R9JHtBfSR7dGhpcy5vcHRzLl9ufWA7ZWxzZSB0aHJvdyBuZXcgcihmKTtULnNldChmLG8uQ29tcGxldGVkKX0pfXJldHVybiBEfX1lLlZhbHVlU2NvcGU9bH0pKHhvKSxmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5vcj1lLmFuZD1lLm5vdD1lLkNvZGVHZW49ZS5vcGVyYXRvcnM9ZS52YXJLaW5kcz1lLlZhbHVlU2NvcGVOYW1lPWUuVmFsdWVTY29wZT1lLlNjb3BlPWUuTmFtZT1lLnJlZ2V4cENvZGU9ZS5zdHJpbmdpZnk9ZS5nZXRQcm9wZXJ0eT1lLm5pbD1lLnN0ckNvbmNhdD1lLnN0cj1lLl89dm9pZCAwO2NvbnN0IG49TnIscj14bzt2YXIgbz1OcjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiXyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3RyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5zdHJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInN0ckNvbmNhdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uc3RyQ29uY2F0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJuaWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLm5pbH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZ2V0UHJvcGVydHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmdldFByb3BlcnR5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzdHJpbmdpZnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnN0cmluZ2lmeX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmVnZXhwQ29kZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ucmVnZXhwQ29kZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiTmFtZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uTmFtZX19KTt2YXIgdD14bztPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiU2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0LlNjb3BlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJWYWx1ZVNjb3BlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5WYWx1ZVNjb3BlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJWYWx1ZVNjb3BlTmFtZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuVmFsdWVTY29wZU5hbWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInZhcktpbmRzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC52YXJLaW5kc319KSxlLm9wZXJhdG9ycz17R1Q6bmV3IG4uX0NvZGUoIj4iKSxHVEU6bmV3IG4uX0NvZGUoIj49IiksTFQ6bmV3IG4uX0NvZGUoIjwiKSxMVEU6bmV3IG4uX0NvZGUoIjw9IiksRVE6bmV3IG4uX0NvZGUoIj09PSIpLE5FUTpuZXcgbi5fQ29kZSgiIT09IiksTk9UOm5ldyBuLl9Db2RlKCIhIiksT1I6bmV3IG4uX0NvZGUoInx8IiksQU5EOm5ldyBuLl9Db2RlKCImJiIpLEFERDpuZXcgbi5fQ29kZSgiKyIpfTtjbGFzcyBze29wdGltaXplTm9kZXMoKXtyZXR1cm4gdGhpc31vcHRpbWl6ZU5hbWVzKHUscCl7cmV0dXJuIHRoaXN9fWNsYXNzIGkgZXh0ZW5kcyBze2NvbnN0cnVjdG9yKHUscCx2KXtzdXBlcigpLHRoaXMudmFyS2luZD11LHRoaXMubmFtZT1wLHRoaXMucmhzPXZ9cmVuZGVyKHtlczU6dSxfbjpwfSl7Y29uc3Qgdj11P3IudmFyS2luZHMudmFyOnRoaXMudmFyS2luZCxMPXRoaXMucmhzPT09dm9pZCAwPyIiOmAgPSAke3RoaXMucmhzfWA7cmV0dXJuYCR7dn0gJHt0aGlzLm5hbWV9JHtMfTtgK3B9b3B0aW1pemVOYW1lcyh1LHApe2lmKCEhdVt0aGlzLm5hbWUuc3RyXSlyZXR1cm4gdGhpcy5yaHMmJih0aGlzLnJocz1xKHRoaXMucmhzLHUscCkpLHRoaXN9Z2V0IG5hbWVzKCl7cmV0dXJuIHRoaXMucmhzIGluc3RhbmNlb2Ygbi5fQ29kZU9yTmFtZT90aGlzLnJocy5uYW1lczp7fX19Y2xhc3MgbCBleHRlbmRzIHN7Y29uc3RydWN0b3IodSxwLHYpe3N1cGVyKCksdGhpcy5saHM9dSx0aGlzLnJocz1wLHRoaXMuc2lkZUVmZmVjdHM9dn1yZW5kZXIoe19uOnV9KXtyZXR1cm5gJHt0aGlzLmxoc30gPSAke3RoaXMucmhzfTtgK3V9b3B0aW1pemVOYW1lcyh1LHApe2lmKCEodGhpcy5saHMgaW5zdGFuY2VvZiBuLk5hbWUmJiF1W3RoaXMubGhzLnN0cl0mJiF0aGlzLnNpZGVFZmZlY3RzKSlyZXR1cm4gdGhpcy5yaHM9cSh0aGlzLnJocyx1LHApLHRoaXN9Z2V0IG5hbWVzKCl7Y29uc3QgdT10aGlzLmxocyBpbnN0YW5jZW9mIG4uTmFtZT97fTpZKHt9LHRoaXMubGhzLm5hbWVzKTtyZXR1cm4gaWUodSx0aGlzLnJocyl9fWNsYXNzIGMgZXh0ZW5kcyBse2NvbnN0cnVjdG9yKHUscCx2LEwpe3N1cGVyKHUsdixMKSx0aGlzLm9wPXB9cmVuZGVyKHtfbjp1fSl7cmV0dXJuYCR7dGhpcy5saHN9ICR7dGhpcy5vcH09ICR7dGhpcy5yaHN9O2ArdX19Y2xhc3MgbSBleHRlbmRzIHN7Y29uc3RydWN0b3IodSl7c3VwZXIoKSx0aGlzLmxhYmVsPXUsdGhpcy5uYW1lcz17fX1yZW5kZXIoe19uOnV9KXtyZXR1cm5gJHt0aGlzLmxhYmVsfTpgK3V9fWNsYXNzIGEgZXh0ZW5kcyBze2NvbnN0cnVjdG9yKHUpe3N1cGVyKCksdGhpcy5sYWJlbD11LHRoaXMubmFtZXM9e319cmVuZGVyKHtfbjp1fSl7cmV0dXJuYGJyZWFrJHt0aGlzLmxhYmVsP2AgJHt0aGlzLmxhYmVsfWA6IiJ9O2ArdX19Y2xhc3MgaCBleHRlbmRzIHN7Y29uc3RydWN0b3IodSl7c3VwZXIoKSx0aGlzLmVycm9yPXV9cmVuZGVyKHtfbjp1fSl7cmV0dXJuYHRocm93ICR7dGhpcy5lcnJvcn07YCt1fWdldCBuYW1lcygpe3JldHVybiB0aGlzLmVycm9yLm5hbWVzfX1jbGFzcyBPIGV4dGVuZHMgc3tjb25zdHJ1Y3Rvcih1KXtzdXBlcigpLHRoaXMuY29kZT11fXJlbmRlcih7X246dX0pe3JldHVybmAke3RoaXMuY29kZX07YCt1fW9wdGltaXplTm9kZXMoKXtyZXR1cm5gJHt0aGlzLmNvZGV9YD90aGlzOnZvaWQgMH1vcHRpbWl6ZU5hbWVzKHUscCl7cmV0dXJuIHRoaXMuY29kZT1xKHRoaXMuY29kZSx1LHApLHRoaXN9Z2V0IG5hbWVzKCl7cmV0dXJuIHRoaXMuY29kZSBpbnN0YW5jZW9mIG4uX0NvZGVPck5hbWU/dGhpcy5jb2RlLm5hbWVzOnt9fX1jbGFzcyBEIGV4dGVuZHMgc3tjb25zdHJ1Y3Rvcih1PVtdKXtzdXBlcigpLHRoaXMubm9kZXM9dX1yZW5kZXIodSl7cmV0dXJuIHRoaXMubm9kZXMucmVkdWNlKChwLHYpPT5wK3YucmVuZGVyKHUpLCIiKX1vcHRpbWl6ZU5vZGVzKCl7Y29uc3R7bm9kZXM6dX09dGhpcztsZXQgcD11Lmxlbmd0aDtmb3IoO3AtLTspe2NvbnN0IHY9dVtwXS5vcHRpbWl6ZU5vZGVzKCk7QXJyYXkuaXNBcnJheSh2KT91LnNwbGljZShwLDEsLi4udik6dj91W3BdPXY6dS5zcGxpY2UocCwxKX1yZXR1cm4gdS5sZW5ndGg+MD90aGlzOnZvaWQgMH1vcHRpbWl6ZU5hbWVzKHUscCl7Y29uc3R7bm9kZXM6dn09dGhpcztsZXQgTD12Lmxlbmd0aDtmb3IoO0wtLTspe2NvbnN0IEI9dltMXTtCLm9wdGltaXplTmFtZXModSxwKXx8KEVlKHUsQi5uYW1lcyksdi5zcGxpY2UoTCwxKSl9cmV0dXJuIHYubGVuZ3RoPjA/dGhpczp2b2lkIDB9Z2V0IG5hbWVzKCl7cmV0dXJuIHRoaXMubm9kZXMucmVkdWNlKCh1LHApPT56KHUscC5uYW1lcykse30pfX1jbGFzcyB3IGV4dGVuZHMgRHtyZW5kZXIodSl7cmV0dXJuInsiK3UuX24rc3VwZXIucmVuZGVyKHUpKyJ9Iit1Ll9ufX1jbGFzcyBDIGV4dGVuZHMgRHt9Y2xhc3MgVCBleHRlbmRzIHd7fVQua2luZD0iZWxzZSI7Y2xhc3MgZiBleHRlbmRzIHd7Y29uc3RydWN0b3IodSxwKXtzdXBlcihwKSx0aGlzLmNvbmRpdGlvbj11fXJlbmRlcih1KXtsZXQgcD1gaWYoJHt0aGlzLmNvbmRpdGlvbn0pYCtzdXBlci5yZW5kZXIodSk7cmV0dXJuIHRoaXMuZWxzZSYmKHArPSJlbHNlICIrdGhpcy5lbHNlLnJlbmRlcih1KSkscH1vcHRpbWl6ZU5vZGVzKCl7c3VwZXIub3B0aW1pemVOb2RlcygpO2NvbnN0IHU9dGhpcy5jb25kaXRpb247aWYodT09PSEwKXJldHVybiB0aGlzLm5vZGVzO2xldCBwPXRoaXMuZWxzZTtpZihwKXtjb25zdCB2PXAub3B0aW1pemVOb2RlcygpO3A9dGhpcy5lbHNlPUFycmF5LmlzQXJyYXkodik/bmV3IFQodik6dn1pZihwKXJldHVybiB1PT09ITE/cCBpbnN0YW5jZW9mIGY/cDpwLm5vZGVzOnRoaXMubm9kZXMubGVuZ3RoP3RoaXM6bmV3IGYoT2UodSkscCBpbnN0YW5jZW9mIGY/W3BdOnAubm9kZXMpO2lmKCEodT09PSExfHwhdGhpcy5ub2Rlcy5sZW5ndGgpKXJldHVybiB0aGlzfW9wdGltaXplTmFtZXModSxwKXt2YXIgdjtpZih0aGlzLmVsc2U9KHY9dGhpcy5lbHNlKT09PW51bGx8fHY9PT12b2lkIDA/dm9pZCAwOnYub3B0aW1pemVOYW1lcyh1LHApLCEhKHN1cGVyLm9wdGltaXplTmFtZXModSxwKXx8dGhpcy5lbHNlKSlyZXR1cm4gdGhpcy5jb25kaXRpb249cSh0aGlzLmNvbmRpdGlvbix1LHApLHRoaXN9Z2V0IG5hbWVzKCl7Y29uc3QgdT1zdXBlci5uYW1lcztyZXR1cm4gaWUodSx0aGlzLmNvbmRpdGlvbiksdGhpcy5lbHNlJiZ6KHUsdGhpcy5lbHNlLm5hbWVzKSx1fX1mLmtpbmQ9ImlmIjtjbGFzcyBBIGV4dGVuZHMgd3t9QS5raW5kPSJmb3IiO2NsYXNzIFUgZXh0ZW5kcyBBe2NvbnN0cnVjdG9yKHUpe3N1cGVyKCksdGhpcy5pdGVyYXRpb249dX1yZW5kZXIodSl7cmV0dXJuYGZvcigke3RoaXMuaXRlcmF0aW9ufSlgK3N1cGVyLnJlbmRlcih1KX1vcHRpbWl6ZU5hbWVzKHUscCl7aWYoISFzdXBlci5vcHRpbWl6ZU5hbWVzKHUscCkpcmV0dXJuIHRoaXMuaXRlcmF0aW9uPXEodGhpcy5pdGVyYXRpb24sdSxwKSx0aGlzfWdldCBuYW1lcygpe3JldHVybiB6KHN1cGVyLm5hbWVzLHRoaXMuaXRlcmF0aW9uLm5hbWVzKX19Y2xhc3MgUyBleHRlbmRzIEF7Y29uc3RydWN0b3IodSxwLHYsTCl7c3VwZXIoKSx0aGlzLnZhcktpbmQ9dSx0aGlzLm5hbWU9cCx0aGlzLmZyb209dix0aGlzLnRvPUx9cmVuZGVyKHUpe2NvbnN0IHA9dS5lczU/ci52YXJLaW5kcy52YXI6dGhpcy52YXJLaW5kLHtuYW1lOnYsZnJvbTpMLHRvOkJ9PXRoaXM7cmV0dXJuYGZvcigke3B9ICR7dn09JHtMfTsgJHt2fTwke0J9OyAke3Z9KyspYCtzdXBlci5yZW5kZXIodSl9Z2V0IG5hbWVzKCl7Y29uc3QgdT1pZShzdXBlci5uYW1lcyx0aGlzLmZyb20pO3JldHVybiBpZSh1LHRoaXMudG8pfX1jbGFzcyBqIGV4dGVuZHMgQXtjb25zdHJ1Y3Rvcih1LHAsdixMKXtzdXBlcigpLHRoaXMubG9vcD11LHRoaXMudmFyS2luZD1wLHRoaXMubmFtZT12LHRoaXMuaXRlcmFibGU9TH1yZW5kZXIodSl7cmV0dXJuYGZvcigke3RoaXMudmFyS2luZH0gJHt0aGlzLm5hbWV9ICR7dGhpcy5sb29wfSAke3RoaXMuaXRlcmFibGV9KWArc3VwZXIucmVuZGVyKHUpfW9wdGltaXplTmFtZXModSxwKXtpZighIXN1cGVyLm9wdGltaXplTmFtZXModSxwKSlyZXR1cm4gdGhpcy5pdGVyYWJsZT1xKHRoaXMuaXRlcmFibGUsdSxwKSx0aGlzfWdldCBuYW1lcygpe3JldHVybiB6KHN1cGVyLm5hbWVzLHRoaXMuaXRlcmFibGUubmFtZXMpfX1jbGFzcyBOIGV4dGVuZHMgd3tjb25zdHJ1Y3Rvcih1LHAsdil7c3VwZXIoKSx0aGlzLm5hbWU9dSx0aGlzLmFyZ3M9cCx0aGlzLmFzeW5jPXZ9cmVuZGVyKHUpe3JldHVybmAke3RoaXMuYXN5bmM/ImFzeW5jICI6IiJ9ZnVuY3Rpb24gJHt0aGlzLm5hbWV9KCR7dGhpcy5hcmdzfSlgK3N1cGVyLnJlbmRlcih1KX19Ti5raW5kPSJmdW5jIjtjbGFzcyBIIGV4dGVuZHMgRHtyZW5kZXIodSl7cmV0dXJuInJldHVybiAiK3N1cGVyLnJlbmRlcih1KX19SC5raW5kPSJyZXR1cm4iO2NsYXNzIEcgZXh0ZW5kcyB3e3JlbmRlcih1KXtsZXQgcD0idHJ5IitzdXBlci5yZW5kZXIodSk7cmV0dXJuIHRoaXMuY2F0Y2gmJihwKz10aGlzLmNhdGNoLnJlbmRlcih1KSksdGhpcy5maW5hbGx5JiYocCs9dGhpcy5maW5hbGx5LnJlbmRlcih1KSkscH1vcHRpbWl6ZU5vZGVzKCl7dmFyIHUscDtyZXR1cm4gc3VwZXIub3B0aW1pemVOb2RlcygpLCh1PXRoaXMuY2F0Y2gpPT09bnVsbHx8dT09PXZvaWQgMHx8dS5vcHRpbWl6ZU5vZGVzKCksKHA9dGhpcy5maW5hbGx5KT09PW51bGx8fHA9PT12b2lkIDB8fHAub3B0aW1pemVOb2RlcygpLHRoaXN9b3B0aW1pemVOYW1lcyh1LHApe3ZhciB2LEw7cmV0dXJuIHN1cGVyLm9wdGltaXplTmFtZXModSxwKSwodj10aGlzLmNhdGNoKT09PW51bGx8fHY9PT12b2lkIDB8fHYub3B0aW1pemVOYW1lcyh1LHApLChMPXRoaXMuZmluYWxseSk9PT1udWxsfHxMPT09dm9pZCAwfHxMLm9wdGltaXplTmFtZXModSxwKSx0aGlzfWdldCBuYW1lcygpe2NvbnN0IHU9c3VwZXIubmFtZXM7cmV0dXJuIHRoaXMuY2F0Y2gmJnoodSx0aGlzLmNhdGNoLm5hbWVzKSx0aGlzLmZpbmFsbHkmJnoodSx0aGlzLmZpbmFsbHkubmFtZXMpLHV9fWNsYXNzIEYgZXh0ZW5kcyB3e2NvbnN0cnVjdG9yKHUpe3N1cGVyKCksdGhpcy5lcnJvcj11fXJlbmRlcih1KXtyZXR1cm5gY2F0Y2goJHt0aGlzLmVycm9yfSlgK3N1cGVyLnJlbmRlcih1KX19Ri5raW5kPSJjYXRjaCI7Y2xhc3MgVyBleHRlbmRzIHd7cmVuZGVyKHUpe3JldHVybiJmaW5hbGx5IitzdXBlci5yZW5kZXIodSl9fVcua2luZD0iZmluYWxseSI7Y2xhc3MgbWV7Y29uc3RydWN0b3IodSxwPXt9KXt0aGlzLl92YWx1ZXM9e30sdGhpcy5fYmxvY2tTdGFydHM9W10sdGhpcy5fY29uc3RhbnRzPXt9LHRoaXMub3B0cz1sZShZKHt9LHApLHtfbjpwLmxpbmVzP2AKYDoiIn0pLHRoaXMuX2V4dFNjb3BlPXUsdGhpcy5fc2NvcGU9bmV3IHIuU2NvcGUoe3BhcmVudDp1fSksdGhpcy5fbm9kZXM9W25ldyBDXX10b1N0cmluZygpe3JldHVybiB0aGlzLl9yb290LnJlbmRlcih0aGlzLm9wdHMpfW5hbWUodSl7cmV0dXJuIHRoaXMuX3Njb3BlLm5hbWUodSl9c2NvcGVOYW1lKHUpe3JldHVybiB0aGlzLl9leHRTY29wZS5uYW1lKHUpfXNjb3BlVmFsdWUodSxwKXtjb25zdCB2PXRoaXMuX2V4dFNjb3BlLnZhbHVlKHUscCk7cmV0dXJuKHRoaXMuX3ZhbHVlc1t2LnByZWZpeF18fCh0aGlzLl92YWx1ZXNbdi5wcmVmaXhdPW5ldyBTZXQpKS5hZGQodiksdn1nZXRTY29wZVZhbHVlKHUscCl7cmV0dXJuIHRoaXMuX2V4dFNjb3BlLmdldFZhbHVlKHUscCl9c2NvcGVSZWZzKHUpe3JldHVybiB0aGlzLl9leHRTY29wZS5zY29wZVJlZnModSx0aGlzLl92YWx1ZXMpfXNjb3BlQ29kZSgpe3JldHVybiB0aGlzLl9leHRTY29wZS5zY29wZUNvZGUodGhpcy5fdmFsdWVzKX1fZGVmKHUscCx2LEwpe2NvbnN0IEI9dGhpcy5fc2NvcGUudG9OYW1lKHApO3JldHVybiB2IT09dm9pZCAwJiZMJiYodGhpcy5fY29uc3RhbnRzW0Iuc3RyXT12KSx0aGlzLl9sZWFmTm9kZShuZXcgaSh1LEIsdikpLEJ9Y29uc3QodSxwLHYpe3JldHVybiB0aGlzLl9kZWYoci52YXJLaW5kcy5jb25zdCx1LHAsdil9bGV0KHUscCx2KXtyZXR1cm4gdGhpcy5fZGVmKHIudmFyS2luZHMubGV0LHUscCx2KX12YXIodSxwLHYpe3JldHVybiB0aGlzLl9kZWYoci52YXJLaW5kcy52YXIsdSxwLHYpfWFzc2lnbih1LHAsdil7cmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBsKHUscCx2KSl9YWRkKHUscCl7cmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBjKHUsZS5vcGVyYXRvcnMuQURELHApKX1jb2RlKHUpe3JldHVybiB0eXBlb2YgdT09ImZ1bmN0aW9uIj91KCk6dSE9PW4ubmlsJiZ0aGlzLl9sZWFmTm9kZShuZXcgTyh1KSksdGhpc31vYmplY3QoLi4udSl7Y29uc3QgcD1bInsiXTtmb3IoY29uc3RbdixMXW9mIHUpcC5sZW5ndGg+MSYmcC5wdXNoKCIsIikscC5wdXNoKHYpLCh2IT09THx8dGhpcy5vcHRzLmVzNSkmJihwLnB1c2goIjoiKSwoMCxuLmFkZENvZGVBcmcpKHAsTCkpO3JldHVybiBwLnB1c2goIn0iKSxuZXcgbi5fQ29kZShwKX1pZih1LHAsdil7aWYodGhpcy5fYmxvY2tOb2RlKG5ldyBmKHUpKSxwJiZ2KXRoaXMuY29kZShwKS5lbHNlKCkuY29kZSh2KS5lbmRJZigpO2Vsc2UgaWYocCl0aGlzLmNvZGUocCkuZW5kSWYoKTtlbHNlIGlmKHYpdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiAiZWxzZSIgYm9keSB3aXRob3V0ICJ0aGVuIiBib2R5Jyk7cmV0dXJuIHRoaXN9ZWxzZUlmKHUpe3JldHVybiB0aGlzLl9lbHNlTm9kZShuZXcgZih1KSl9ZWxzZSgpe3JldHVybiB0aGlzLl9lbHNlTm9kZShuZXcgVCl9ZW5kSWYoKXtyZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKGYsVCl9X2Zvcih1LHApe3JldHVybiB0aGlzLl9ibG9ja05vZGUodSkscCYmdGhpcy5jb2RlKHApLmVuZEZvcigpLHRoaXN9Zm9yKHUscCl7cmV0dXJuIHRoaXMuX2ZvcihuZXcgVSh1KSxwKX1mb3JSYW5nZSh1LHAsdixMLEI9dGhpcy5vcHRzLmVzNT9yLnZhcktpbmRzLnZhcjpyLnZhcktpbmRzLmxldCl7Y29uc3QgUT10aGlzLl9zY29wZS50b05hbWUodSk7cmV0dXJuIHRoaXMuX2ZvcihuZXcgUyhCLFEscCx2KSwoKT0+TChRKSl9Zm9yT2YodSxwLHYsTD1yLnZhcktpbmRzLmNvbnN0KXtjb25zdCBCPXRoaXMuX3Njb3BlLnRvTmFtZSh1KTtpZih0aGlzLm9wdHMuZXM1KXtjb25zdCBRPXAgaW5zdGFuY2VvZiBuLk5hbWU/cDp0aGlzLnZhcigiX2FyciIscCk7cmV0dXJuIHRoaXMuZm9yUmFuZ2UoIl9pIiwwLCgwLG4uXylgJHtRfS5sZW5ndGhgLHJlPT57dGhpcy52YXIoQiwoMCxuLl8pYCR7UX1bJHtyZX1dYCksdihCKX0pfXJldHVybiB0aGlzLl9mb3IobmV3IGooIm9mIixMLEIscCksKCk9PnYoQikpfWZvckluKHUscCx2LEw9dGhpcy5vcHRzLmVzNT9yLnZhcktpbmRzLnZhcjpyLnZhcktpbmRzLmNvbnN0KXtpZih0aGlzLm9wdHMub3duUHJvcGVydGllcylyZXR1cm4gdGhpcy5mb3JPZih1LCgwLG4uXylgT2JqZWN0LmtleXMoJHtwfSlgLHYpO2NvbnN0IEI9dGhpcy5fc2NvcGUudG9OYW1lKHUpO3JldHVybiB0aGlzLl9mb3IobmV3IGooImluIixMLEIscCksKCk9PnYoQikpfWVuZEZvcigpe3JldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoQSl9bGFiZWwodSl7cmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBtKHUpKX1icmVhayh1KXtyZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IGEodSkpfXJldHVybih1KXtjb25zdCBwPW5ldyBIO2lmKHRoaXMuX2Jsb2NrTm9kZShwKSx0aGlzLmNvZGUodSkscC5ub2Rlcy5sZW5ndGghPT0xKXRocm93IG5ldyBFcnJvcignQ29kZUdlbjogInJldHVybiIgc2hvdWxkIGhhdmUgb25lIG5vZGUnKTtyZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKEgpfXRyeSh1LHAsdil7aWYoIXAmJiF2KXRocm93IG5ldyBFcnJvcignQ29kZUdlbjogInRyeSIgd2l0aG91dCAiY2F0Y2giIGFuZCAiZmluYWxseSInKTtjb25zdCBMPW5ldyBHO2lmKHRoaXMuX2Jsb2NrTm9kZShMKSx0aGlzLmNvZGUodSkscCl7Y29uc3QgQj10aGlzLm5hbWUoImUiKTt0aGlzLl9jdXJyTm9kZT1MLmNhdGNoPW5ldyBGKEIpLHAoQil9cmV0dXJuIHYmJih0aGlzLl9jdXJyTm9kZT1MLmZpbmFsbHk9bmV3IFcsdGhpcy5jb2RlKHYpKSx0aGlzLl9lbmRCbG9ja05vZGUoRixXKX10aHJvdyh1KXtyZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IGgodSkpfWJsb2NrKHUscCl7cmV0dXJuIHRoaXMuX2Jsb2NrU3RhcnRzLnB1c2godGhpcy5fbm9kZXMubGVuZ3RoKSx1JiZ0aGlzLmNvZGUodSkuZW5kQmxvY2socCksdGhpc31lbmRCbG9jayh1KXtjb25zdCBwPXRoaXMuX2Jsb2NrU3RhcnRzLnBvcCgpO2lmKHA9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDb2RlR2VuOiBub3QgaW4gc2VsZi1iYWxhbmNpbmcgYmxvY2siKTtjb25zdCB2PXRoaXMuX25vZGVzLmxlbmd0aC1wO2lmKHY8MHx8dSE9PXZvaWQgMCYmdiE9PXUpdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiB3cm9uZyBudW1iZXIgb2Ygbm9kZXM6ICR7dn0gdnMgJHt1fSBleHBlY3RlZGApO3JldHVybiB0aGlzLl9ub2Rlcy5sZW5ndGg9cCx0aGlzfWZ1bmModSxwPW4ubmlsLHYsTCl7cmV0dXJuIHRoaXMuX2Jsb2NrTm9kZShuZXcgTih1LHAsdikpLEwmJnRoaXMuY29kZShMKS5lbmRGdW5jKCksdGhpc31lbmRGdW5jKCl7cmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShOKX1vcHRpbWl6ZSh1PTEpe2Zvcig7dS0tID4wOyl0aGlzLl9yb290Lm9wdGltaXplTm9kZXMoKSx0aGlzLl9yb290Lm9wdGltaXplTmFtZXModGhpcy5fcm9vdC5uYW1lcyx0aGlzLl9jb25zdGFudHMpfV9sZWFmTm9kZSh1KXtyZXR1cm4gdGhpcy5fY3Vyck5vZGUubm9kZXMucHVzaCh1KSx0aGlzfV9ibG9ja05vZGUodSl7dGhpcy5fY3Vyck5vZGUubm9kZXMucHVzaCh1KSx0aGlzLl9ub2Rlcy5wdXNoKHUpfV9lbmRCbG9ja05vZGUodSxwKXtjb25zdCB2PXRoaXMuX2N1cnJOb2RlO2lmKHYgaW5zdGFuY2VvZiB1fHxwJiZ2IGluc3RhbmNlb2YgcClyZXR1cm4gdGhpcy5fbm9kZXMucG9wKCksdGhpczt0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5vdCBpbiBibG9jayAiJHtwP2Ake3Uua2luZH0vJHtwLmtpbmR9YDp1LmtpbmR9ImApfV9lbHNlTm9kZSh1KXtjb25zdCBwPXRoaXMuX2N1cnJOb2RlO2lmKCEocCBpbnN0YW5jZW9mIGYpKXRocm93IG5ldyBFcnJvcignQ29kZUdlbjogImVsc2UiIHdpdGhvdXQgImlmIicpO3JldHVybiB0aGlzLl9jdXJyTm9kZT1wLmVsc2U9dSx0aGlzfWdldCBfcm9vdCgpe3JldHVybiB0aGlzLl9ub2Rlc1swXX1nZXQgX2N1cnJOb2RlKCl7Y29uc3QgdT10aGlzLl9ub2RlcztyZXR1cm4gdVt1Lmxlbmd0aC0xXX1zZXQgX2N1cnJOb2RlKHUpe2NvbnN0IHA9dGhpcy5fbm9kZXM7cFtwLmxlbmd0aC0xXT11fX1lLkNvZGVHZW49bWU7ZnVuY3Rpb24geihnLHUpe2Zvcihjb25zdCBwIGluIHUpZ1twXT0oZ1twXXx8MCkrKHVbcF18fDApO3JldHVybiBnfWZ1bmN0aW9uIGllKGcsdSl7cmV0dXJuIHUgaW5zdGFuY2VvZiBuLl9Db2RlT3JOYW1lP3ooZyx1Lm5hbWVzKTpnfWZ1bmN0aW9uIHEoZyx1LHApe2lmKGcgaW5zdGFuY2VvZiBuLk5hbWUpcmV0dXJuIHYoZyk7aWYoIUwoZykpcmV0dXJuIGc7cmV0dXJuIG5ldyBuLl9Db2RlKGcuX2l0ZW1zLnJlZHVjZSgoQixRKT0+KFEgaW5zdGFuY2VvZiBuLk5hbWUmJihRPXYoUSkpLFEgaW5zdGFuY2VvZiBuLl9Db2RlP0IucHVzaCguLi5RLl9pdGVtcyk6Qi5wdXNoKFEpLEIpLFtdKSk7ZnVuY3Rpb24gdihCKXtjb25zdCBRPXBbQi5zdHJdO3JldHVybiBRPT09dm9pZCAwfHx1W0Iuc3RyXSE9PTE/QjooZGVsZXRlIHVbQi5zdHJdLFEpfWZ1bmN0aW9uIEwoQil7cmV0dXJuIEIgaW5zdGFuY2VvZiBuLl9Db2RlJiZCLl9pdGVtcy5zb21lKFE9PlEgaW5zdGFuY2VvZiBuLk5hbWUmJnVbUS5zdHJdPT09MSYmcFtRLnN0cl0hPT12b2lkIDApfX1mdW5jdGlvbiBFZShnLHUpe2Zvcihjb25zdCBwIGluIHUpZ1twXT0oZ1twXXx8MCktKHVbcF18fDApfWZ1bmN0aW9uIE9lKGcpe3JldHVybiB0eXBlb2YgZz09ImJvb2xlYW4ifHx0eXBlb2YgZz09Im51bWJlciJ8fGc9PT1udWxsPyFnOigwLG4uXylgISR7UChnKX1gfWUubm90PU9lO2NvbnN0IEhlPVIoZS5vcGVyYXRvcnMuQU5EKTtmdW5jdGlvbiBGZSguLi5nKXtyZXR1cm4gZy5yZWR1Y2UoSGUpfWUuYW5kPUZlO2NvbnN0IGxyPVIoZS5vcGVyYXRvcnMuT1IpO2Z1bmN0aW9uIHkoLi4uZyl7cmV0dXJuIGcucmVkdWNlKGxyKX1lLm9yPXk7ZnVuY3Rpb24gUihnKXtyZXR1cm4odSxwKT0+dT09PW4ubmlsP3A6cD09PW4ubmlsP3U6KDAsbi5fKWAke1AodSl9ICR7Z30gJHtQKHApfWB9ZnVuY3Rpb24gUChnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIG4uTmFtZT9nOigwLG4uXylgKCR7Z30pYH19KF9lKTt2YXIgQWU9e307KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmNoZWNrU3RyaWN0TW9kZT1lLmdldEVycm9yUGF0aD1lLlR5cGU9ZS51c2VGdW5jPWUuc2V0RXZhbHVhdGVkPWUuZXZhbHVhdGVkUHJvcHNUb05hbWU9ZS5tZXJnZUV2YWx1YXRlZD1lLmVhY2hJdGVtPWUudW5lc2NhcGVKc29uUG9pbnRlcj1lLmVzY2FwZUpzb25Qb2ludGVyPWUuZXNjYXBlRnJhZ21lbnQ9ZS51bmVzY2FwZUZyYWdtZW50PWUuc2NoZW1hUmVmT3JWYWw9ZS5zY2hlbWFIYXNSdWxlc0J1dFJlZj1lLnNjaGVtYUhhc1J1bGVzPWUuY2hlY2tVbmtub3duUnVsZXM9ZS5hbHdheXNWYWxpZFNjaGVtYT1lLnRvSGFzaD12b2lkIDA7Y29uc3Qgbj1fZSxyPU5yO2Z1bmN0aW9uIG8oTil7Y29uc3QgSD17fTtmb3IoY29uc3QgRyBvZiBOKUhbR109ITA7cmV0dXJuIEh9ZS50b0hhc2g9bztmdW5jdGlvbiB0KE4sSCl7cmV0dXJuIHR5cGVvZiBIPT0iYm9vbGVhbiI/SDpPYmplY3Qua2V5cyhIKS5sZW5ndGg9PT0wPyEwOihzKE4sSCksIWkoSCxOLnNlbGYuUlVMRVMuYWxsKSl9ZS5hbHdheXNWYWxpZFNjaGVtYT10O2Z1bmN0aW9uIHMoTixIPU4uc2NoZW1hKXtjb25zdHtvcHRzOkcsc2VsZjpGfT1OO2lmKCFHLnN0cmljdFNjaGVtYXx8dHlwZW9mIEg9PSJib29sZWFuIilyZXR1cm47Y29uc3QgVz1GLlJVTEVTLmtleXdvcmRzO2Zvcihjb25zdCBtZSBpbiBIKVdbbWVdfHxqKE4sYHVua25vd24ga2V5d29yZDogIiR7bWV9ImApfWUuY2hlY2tVbmtub3duUnVsZXM9cztmdW5jdGlvbiBpKE4sSCl7aWYodHlwZW9mIE49PSJib29sZWFuIilyZXR1cm4hTjtmb3IoY29uc3QgRyBpbiBOKWlmKEhbR10pcmV0dXJuITA7cmV0dXJuITF9ZS5zY2hlbWFIYXNSdWxlcz1pO2Z1bmN0aW9uIGwoTixIKXtpZih0eXBlb2YgTj09ImJvb2xlYW4iKXJldHVybiFOO2Zvcihjb25zdCBHIGluIE4paWYoRyE9PSIkcmVmIiYmSC5hbGxbR10pcmV0dXJuITA7cmV0dXJuITF9ZS5zY2hlbWFIYXNSdWxlc0J1dFJlZj1sO2Z1bmN0aW9uIGMoe3RvcFNjaGVtYVJlZjpOLHNjaGVtYVBhdGg6SH0sRyxGLFcpe2lmKCFXKXtpZih0eXBlb2YgRz09Im51bWJlciJ8fHR5cGVvZiBHPT0iYm9vbGVhbiIpcmV0dXJuIEc7aWYodHlwZW9mIEc9PSJzdHJpbmciKXJldHVybigwLG4uXylgJHtHfWB9cmV0dXJuKDAsbi5fKWAke059JHtIfSR7KDAsbi5nZXRQcm9wZXJ0eSkoRil9YH1lLnNjaGVtYVJlZk9yVmFsPWM7ZnVuY3Rpb24gbShOKXtyZXR1cm4gTyhkZWNvZGVVUklDb21wb25lbnQoTikpfWUudW5lc2NhcGVGcmFnbWVudD1tO2Z1bmN0aW9uIGEoTil7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChoKE4pKX1lLmVzY2FwZUZyYWdtZW50PWE7ZnVuY3Rpb24gaChOKXtyZXR1cm4gdHlwZW9mIE49PSJudW1iZXIiP2Ake059YDpOLnJlcGxhY2UoL34vZywifjAiKS5yZXBsYWNlKC9cLy9nLCJ+MSIpfWUuZXNjYXBlSnNvblBvaW50ZXI9aDtmdW5jdGlvbiBPKE4pe3JldHVybiBOLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZS51bmVzY2FwZUpzb25Qb2ludGVyPU87ZnVuY3Rpb24gRChOLEgpe2lmKEFycmF5LmlzQXJyYXkoTikpZm9yKGNvbnN0IEcgb2YgTilIKEcpO2Vsc2UgSChOKX1lLmVhY2hJdGVtPUQ7ZnVuY3Rpb24gdyh7bWVyZ2VOYW1lczpOLG1lcmdlVG9OYW1lOkgsbWVyZ2VWYWx1ZXM6RyxyZXN1bHRUb05hbWU6Rn0pe3JldHVybihXLG1lLHosaWUpPT57Y29uc3QgcT16PT09dm9pZCAwP21lOnogaW5zdGFuY2VvZiBuLk5hbWU/KG1lIGluc3RhbmNlb2Ygbi5OYW1lP04oVyxtZSx6KTpIKFcsbWUseikseik6bWUgaW5zdGFuY2VvZiBuLk5hbWU/KEgoVyx6LG1lKSxtZSk6RyhtZSx6KTtyZXR1cm4gaWU9PT1uLk5hbWUmJiEocSBpbnN0YW5jZW9mIG4uTmFtZSk/RihXLHEpOnF9fWUubWVyZ2VFdmFsdWF0ZWQ9e3Byb3BzOncoe21lcmdlTmFtZXM6KE4sSCxHKT0+Ti5pZigoMCxuLl8pYCR7R30gIT09IHRydWUgJiYgJHtIfSAhPT0gdW5kZWZpbmVkYCwoKT0+e04uaWYoKDAsbi5fKWAke0h9ID09PSB0cnVlYCwoKT0+Ti5hc3NpZ24oRywhMCksKCk9Pk4uYXNzaWduKEcsKDAsbi5fKWAke0d9IHx8IHt9YCkuY29kZSgoMCxuLl8pYE9iamVjdC5hc3NpZ24oJHtHfSwgJHtIfSlgKSl9KSxtZXJnZVRvTmFtZTooTixILEcpPT5OLmlmKCgwLG4uXylgJHtHfSAhPT0gdHJ1ZWAsKCk9PntIPT09ITA/Ti5hc3NpZ24oRywhMCk6KE4uYXNzaWduKEcsKDAsbi5fKWAke0d9IHx8IHt9YCksVChOLEcsSCkpfSksbWVyZ2VWYWx1ZXM6KE4sSCk9Pk49PT0hMD8hMDpZKFkoe30sTiksSCkscmVzdWx0VG9OYW1lOkN9KSxpdGVtczp3KHttZXJnZU5hbWVzOihOLEgsRyk9Pk4uaWYoKDAsbi5fKWAke0d9ICE9PSB0cnVlICYmICR7SH0gIT09IHVuZGVmaW5lZGAsKCk9Pk4uYXNzaWduKEcsKDAsbi5fKWAke0h9ID09PSB0cnVlID8gdHJ1ZSA6ICR7R30gPiAke0h9ID8gJHtHfSA6ICR7SH1gKSksbWVyZ2VUb05hbWU6KE4sSCxHKT0+Ti5pZigoMCxuLl8pYCR7R30gIT09IHRydWVgLCgpPT5OLmFzc2lnbihHLEg9PT0hMD8hMDooMCxuLl8pYCR7R30gPiAke0h9ID8gJHtHfSA6ICR7SH1gKSksbWVyZ2VWYWx1ZXM6KE4sSCk9Pk49PT0hMD8hMDpNYXRoLm1heChOLEgpLHJlc3VsdFRvTmFtZTooTixIKT0+Ti52YXIoIml0ZW1zIixIKX0pfTtmdW5jdGlvbiBDKE4sSCl7aWYoSD09PSEwKXJldHVybiBOLnZhcigicHJvcHMiLCEwKTtjb25zdCBHPU4udmFyKCJwcm9wcyIsKDAsbi5fKWB7fWApO3JldHVybiBIIT09dm9pZCAwJiZUKE4sRyxIKSxHfWUuZXZhbHVhdGVkUHJvcHNUb05hbWU9QztmdW5jdGlvbiBUKE4sSCxHKXtPYmplY3Qua2V5cyhHKS5mb3JFYWNoKEY9Pk4uYXNzaWduKCgwLG4uXylgJHtIfSR7KDAsbi5nZXRQcm9wZXJ0eSkoRil9YCwhMCkpfWUuc2V0RXZhbHVhdGVkPVQ7Y29uc3QgZj17fTtmdW5jdGlvbiBBKE4sSCl7cmV0dXJuIE4uc2NvcGVWYWx1ZSgiZnVuYyIse3JlZjpILGNvZGU6ZltILmNvZGVdfHwoZltILmNvZGVdPW5ldyByLl9Db2RlKEguY29kZSkpfSl9ZS51c2VGdW5jPUE7dmFyIFU7KGZ1bmN0aW9uKE4pe05bTi5OdW09MF09Ik51bSIsTltOLlN0cj0xXT0iU3RyIn0pKFU9ZS5UeXBlfHwoZS5UeXBlPXt9KSk7ZnVuY3Rpb24gUyhOLEgsRyl7aWYoTiBpbnN0YW5jZW9mIG4uTmFtZSl7Y29uc3QgRj1IPT09VS5OdW07cmV0dXJuIEc/Rj8oMCxuLl8pYCJbIiArICR7Tn0gKyAiXSJgOigwLG4uXylgIlsnIiArICR7Tn0gKyAiJ10iYDpGPygwLG4uXylgIi8iICsgJHtOfWA6KDAsbi5fKWAiLyIgKyAke059LnJlcGxhY2UoL34vZywgIn4wIikucmVwbGFjZSgvXFwvL2csICJ+MSIpYH1yZXR1cm4gRz8oMCxuLmdldFByb3BlcnR5KShOKS50b1N0cmluZygpOiIvIitoKE4pfWUuZ2V0RXJyb3JQYXRoPVM7ZnVuY3Rpb24gaihOLEgsRz1OLm9wdHMuc3RyaWN0U2NoZW1hKXtpZighIUcpe2lmKEg9YHN0cmljdCBtb2RlOiAke0h9YCxHPT09ITApdGhyb3cgbmV3IEVycm9yKEgpO04uc2VsZi5sb2dnZXIud2FybihIKX19ZS5jaGVja1N0cmljdE1vZGU9an0pKEFlKTt2YXIgTWU9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KE1lLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBTZT1fZSxFdT17ZGF0YTpuZXcgU2UuTmFtZSgiZGF0YSIpLHZhbEN4dDpuZXcgU2UuTmFtZSgidmFsQ3h0IiksaW5zdGFuY2VQYXRoOm5ldyBTZS5OYW1lKCJpbnN0YW5jZVBhdGgiKSxwYXJlbnREYXRhOm5ldyBTZS5OYW1lKCJwYXJlbnREYXRhIikscGFyZW50RGF0YVByb3BlcnR5Om5ldyBTZS5OYW1lKCJwYXJlbnREYXRhUHJvcGVydHkiKSxyb290RGF0YTpuZXcgU2UuTmFtZSgicm9vdERhdGEiKSxkeW5hbWljQW5jaG9yczpuZXcgU2UuTmFtZSgiZHluYW1pY0FuY2hvcnMiKSx2RXJyb3JzOm5ldyBTZS5OYW1lKCJ2RXJyb3JzIiksZXJyb3JzOm5ldyBTZS5OYW1lKCJlcnJvcnMiKSx0aGlzOm5ldyBTZS5OYW1lKCJ0aGlzIiksc2VsZjpuZXcgU2UuTmFtZSgic2VsZiIpLHNjb3BlOm5ldyBTZS5OYW1lKCJzY29wZSIpLGpzb246bmV3IFNlLk5hbWUoImpzb24iKSxqc29uUG9zOm5ldyBTZS5OYW1lKCJqc29uUG9zIiksanNvbkxlbjpuZXcgU2UuTmFtZSgianNvbkxlbiIpLGpzb25QYXJ0Om5ldyBTZS5OYW1lKCJqc29uUGFydCIpfTtNZS5kZWZhdWx0PUV1LGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmV4dGVuZEVycm9ycz1lLnJlc2V0RXJyb3JzQ291bnQ9ZS5yZXBvcnRFeHRyYUVycm9yPWUucmVwb3J0RXJyb3I9ZS5rZXl3b3JkJERhdGFFcnJvcj1lLmtleXdvcmRFcnJvcj12b2lkIDA7Y29uc3Qgbj1fZSxyPUFlLG89TWU7ZS5rZXl3b3JkRXJyb3I9e21lc3NhZ2U6KHtrZXl3b3JkOlR9KT0+KDAsbi5zdHIpYG11c3QgcGFzcyAiJHtUfSIga2V5d29yZCB2YWxpZGF0aW9uYH0sZS5rZXl3b3JkJERhdGFFcnJvcj17bWVzc2FnZTooe2tleXdvcmQ6VCxzY2hlbWFUeXBlOmZ9KT0+Zj8oMCxuLnN0cilgIiR7VH0iIGtleXdvcmQgbXVzdCBiZSAke2Z9ICgkZGF0YSlgOigwLG4uc3RyKWAiJHtUfSIga2V5d29yZCBpcyBpbnZhbGlkICgkZGF0YSlgfTtmdW5jdGlvbiB0KFQsZj1lLmtleXdvcmRFcnJvcixBLFUpe2NvbnN0e2l0OlN9PVQse2dlbjpqLGNvbXBvc2l0ZVJ1bGU6TixhbGxFcnJvcnM6SH09UyxHPWgoVCxmLEEpOyhVIT1udWxsP1U6Tnx8SCk/YyhqLEcpOm0oUywoMCxuLl8pYFske0d9XWApfWUucmVwb3J0RXJyb3I9dDtmdW5jdGlvbiBzKFQsZj1lLmtleXdvcmRFcnJvcixBKXtjb25zdHtpdDpVfT1ULHtnZW46Uyxjb21wb3NpdGVSdWxlOmosYWxsRXJyb3JzOk59PVUsSD1oKFQsZixBKTtjKFMsSCksanx8Tnx8bShVLG8uZGVmYXVsdC52RXJyb3JzKX1lLnJlcG9ydEV4dHJhRXJyb3I9cztmdW5jdGlvbiBpKFQsZil7VC5hc3NpZ24oby5kZWZhdWx0LmVycm9ycyxmKSxULmlmKCgwLG4uXylgJHtvLmRlZmF1bHQudkVycm9yc30gIT09IG51bGxgLCgpPT5ULmlmKGYsKCk9PlQuYXNzaWduKCgwLG4uXylgJHtvLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCxmKSwoKT0+VC5hc3NpZ24oby5kZWZhdWx0LnZFcnJvcnMsbnVsbCkpKX1lLnJlc2V0RXJyb3JzQ291bnQ9aTtmdW5jdGlvbiBsKHtnZW46VCxrZXl3b3JkOmYsc2NoZW1hVmFsdWU6QSxkYXRhOlUsZXJyc0NvdW50OlMsaXQ6an0pe2lmKFM9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3IiKTtjb25zdCBOPVQubmFtZSgiZXJyIik7VC5mb3JSYW5nZSgiaSIsUyxvLmRlZmF1bHQuZXJyb3JzLEg9PntULmNvbnN0KE4sKDAsbi5fKWAke28uZGVmYXVsdC52RXJyb3JzfVske0h9XWApLFQuaWYoKDAsbi5fKWAke059Lmluc3RhbmNlUGF0aCA9PT0gdW5kZWZpbmVkYCwoKT0+VC5hc3NpZ24oKDAsbi5fKWAke059Lmluc3RhbmNlUGF0aGAsKDAsbi5zdHJDb25jYXQpKG8uZGVmYXVsdC5pbnN0YW5jZVBhdGgsai5lcnJvclBhdGgpKSksVC5hc3NpZ24oKDAsbi5fKWAke059LnNjaGVtYVBhdGhgLCgwLG4uc3RyKWAke2ouZXJyU2NoZW1hUGF0aH0vJHtmfWApLGoub3B0cy52ZXJib3NlJiYoVC5hc3NpZ24oKDAsbi5fKWAke059LnNjaGVtYWAsQSksVC5hc3NpZ24oKDAsbi5fKWAke059LmRhdGFgLFUpKX0pfWUuZXh0ZW5kRXJyb3JzPWw7ZnVuY3Rpb24gYyhULGYpe2NvbnN0IEE9VC5jb25zdCgiZXJyIixmKTtULmlmKCgwLG4uXylgJHtvLmRlZmF1bHQudkVycm9yc30gPT09IG51bGxgLCgpPT5ULmFzc2lnbihvLmRlZmF1bHQudkVycm9ycywoMCxuLl8pYFske0F9XWApLCgwLG4uXylgJHtvLmRlZmF1bHQudkVycm9yc30ucHVzaCgke0F9KWApLFQuY29kZSgoMCxuLl8pYCR7by5kZWZhdWx0LmVycm9yc30rK2ApfWZ1bmN0aW9uIG0oVCxmKXtjb25zdHtnZW46QSx2YWxpZGF0ZU5hbWU6VSxzY2hlbWFFbnY6U309VDtTLiRhc3luYz9BLnRocm93KCgwLG4uXylgbmV3ICR7VC5WYWxpZGF0aW9uRXJyb3J9KCR7Zn0pYCk6KEEuYXNzaWduKCgwLG4uXylgJHtVfS5lcnJvcnNgLGYpLEEucmV0dXJuKCExKSl9Y29uc3QgYT17a2V5d29yZDpuZXcgbi5OYW1lKCJrZXl3b3JkIiksc2NoZW1hUGF0aDpuZXcgbi5OYW1lKCJzY2hlbWFQYXRoIikscGFyYW1zOm5ldyBuLk5hbWUoInBhcmFtcyIpLHByb3BlcnR5TmFtZTpuZXcgbi5OYW1lKCJwcm9wZXJ0eU5hbWUiKSxtZXNzYWdlOm5ldyBuLk5hbWUoIm1lc3NhZ2UiKSxzY2hlbWE6bmV3IG4uTmFtZSgic2NoZW1hIikscGFyZW50U2NoZW1hOm5ldyBuLk5hbWUoInBhcmVudFNjaGVtYSIpfTtmdW5jdGlvbiBoKFQsZixBKXtjb25zdHtjcmVhdGVFcnJvcnM6VX09VC5pdDtyZXR1cm4gVT09PSExPygwLG4uXylge31gOk8oVCxmLEEpfWZ1bmN0aW9uIE8oVCxmLEE9e30pe2NvbnN0e2dlbjpVLGl0OlN9PVQsaj1bRChTLEEpLHcoVCxBKV07cmV0dXJuIEMoVCxmLGopLFUub2JqZWN0KC4uLmopfWZ1bmN0aW9uIEQoe2Vycm9yUGF0aDpUfSx7aW5zdGFuY2VQYXRoOmZ9KXtjb25zdCBBPWY/KDAsbi5zdHIpYCR7VH0keygwLHIuZ2V0RXJyb3JQYXRoKShmLHIuVHlwZS5TdHIpfWA6VDtyZXR1cm5bby5kZWZhdWx0Lmluc3RhbmNlUGF0aCwoMCxuLnN0ckNvbmNhdCkoby5kZWZhdWx0Lmluc3RhbmNlUGF0aCxBKV19ZnVuY3Rpb24gdyh7a2V5d29yZDpULGl0OntlcnJTY2hlbWFQYXRoOmZ9fSx7c2NoZW1hUGF0aDpBLHBhcmVudFNjaGVtYTpVfSl7bGV0IFM9VT9mOigwLG4uc3RyKWAke2Z9LyR7VH1gO3JldHVybiBBJiYoUz0oMCxuLnN0cilgJHtTfSR7KDAsci5nZXRFcnJvclBhdGgpKEEsci5UeXBlLlN0cil9YCksW2Euc2NoZW1hUGF0aCxTXX1mdW5jdGlvbiBDKFQse3BhcmFtczpmLG1lc3NhZ2U6QX0sVSl7Y29uc3R7a2V5d29yZDpTLGRhdGE6aixzY2hlbWFWYWx1ZTpOLGl0Okh9PVQse29wdHM6Ryxwcm9wZXJ0eU5hbWU6Rix0b3BTY2hlbWFSZWY6VyxzY2hlbWFQYXRoOm1lfT1IO1UucHVzaChbYS5rZXl3b3JkLFNdLFthLnBhcmFtcyx0eXBlb2YgZj09ImZ1bmN0aW9uIj9mKFQpOmZ8fCgwLG4uXylge31gXSksRy5tZXNzYWdlcyYmVS5wdXNoKFthLm1lc3NhZ2UsdHlwZW9mIEE9PSJmdW5jdGlvbiI/QShUKTpBXSksRy52ZXJib3NlJiZVLnB1c2goW2Euc2NoZW1hLE5dLFthLnBhcmVudFNjaGVtYSwoMCxuLl8pYCR7V30ke21lfWBdLFtvLmRlZmF1bHQuZGF0YSxqXSksRiYmVS5wdXNoKFthLnByb3BlcnR5TmFtZSxGXSl9fShUciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHJyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyci5ib29sT3JFbXB0eVNjaGVtYT1yci50b3BCb29sT3JFbXB0eVNjaGVtYT12b2lkIDA7Y29uc3QgZnU9VHIsUnU9X2UsT3U9TWUsVHU9e21lc3NhZ2U6ImJvb2xlYW4gc2NoZW1hIGlzIGZhbHNlIn07ZnVuY3Rpb24gTnUoZSl7Y29uc3R7Z2VuOm4sc2NoZW1hOnIsdmFsaWRhdGVOYW1lOm99PWU7cj09PSExP3RzKGUsITEpOnR5cGVvZiByPT0ib2JqZWN0IiYmci4kYXN5bmM9PT0hMD9uLnJldHVybihPdS5kZWZhdWx0LmRhdGEpOihuLmFzc2lnbigoMCxSdS5fKWAke299LmVycm9yc2AsbnVsbCksbi5yZXR1cm4oITApKX1yci50b3BCb29sT3JFbXB0eVNjaGVtYT1OdTtmdW5jdGlvbiBndShlLG4pe2NvbnN0e2dlbjpyLHNjaGVtYTpvfT1lO289PT0hMT8oci52YXIobiwhMSksdHMoZSkpOnIudmFyKG4sITApfXJyLmJvb2xPckVtcHR5U2NoZW1hPWd1O2Z1bmN0aW9uIHRzKGUsbil7Y29uc3R7Z2VuOnIsZGF0YTpvfT1lLHQ9e2dlbjpyLGtleXdvcmQ6ImZhbHNlIHNjaGVtYSIsZGF0YTpvLHNjaGVtYTohMSxzY2hlbWFDb2RlOiExLHNjaGVtYVZhbHVlOiExLHBhcmFtczp7fSxpdDplfTsoMCxmdS5yZXBvcnRFcnJvcikodCxUdSx2b2lkIDAsbil9dmFyIHRvPXt9LENuPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShDbiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQ24uZ2V0UnVsZXM9Q24uaXNKU09OVHlwZT12b2lkIDA7Y29uc3QgSXU9WyJzdHJpbmciLCJudW1iZXIiLCJpbnRlZ2VyIiwiYm9vbGVhbiIsIm51bGwiLCJvYmplY3QiLCJhcnJheSJdLGJ1PW5ldyBTZXQoSXUpO2Z1bmN0aW9uIEF1KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyImJmJ1LmhhcyhlKX1Dbi5pc0pTT05UeXBlPUF1O2Z1bmN0aW9uIFV1KCl7Y29uc3QgZT17bnVtYmVyOnt0eXBlOiJudW1iZXIiLHJ1bGVzOltdfSxzdHJpbmc6e3R5cGU6InN0cmluZyIscnVsZXM6W119LGFycmF5Ont0eXBlOiJhcnJheSIscnVsZXM6W119LG9iamVjdDp7dHlwZToib2JqZWN0IixydWxlczpbXX19O3JldHVybnt0eXBlczpsZShZKHt9LGUpLHtpbnRlZ2VyOiEwLGJvb2xlYW46ITAsbnVsbDohMH0pLHJ1bGVzOlt7cnVsZXM6W119LGUubnVtYmVyLGUuc3RyaW5nLGUuYXJyYXksZS5vYmplY3RdLHBvc3Q6e3J1bGVzOltdfSxhbGw6e30sa2V5d29yZHM6e319fUNuLmdldFJ1bGVzPVV1O3ZhciBjbj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoY24sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGNuLnNob3VsZFVzZVJ1bGU9Y24uc2hvdWxkVXNlR3JvdXA9Y24uc2NoZW1hSGFzUnVsZXNGb3JUeXBlPXZvaWQgMDtmdW5jdGlvbiBIdSh7c2NoZW1hOmUsc2VsZjpufSxyKXtjb25zdCBvPW4uUlVMRVMudHlwZXNbcl07cmV0dXJuIG8mJm8hPT0hMCYmc3MoZSxvKX1jbi5zY2hlbWFIYXNSdWxlc0ZvclR5cGU9SHU7ZnVuY3Rpb24gc3MoZSxuKXtyZXR1cm4gbi5ydWxlcy5zb21lKHI9PmlzKGUscikpfWNuLnNob3VsZFVzZUdyb3VwPXNzO2Z1bmN0aW9uIGlzKGUsbil7dmFyIHI7cmV0dXJuIGVbbi5rZXl3b3JkXSE9PXZvaWQgMHx8KChyPW4uZGVmaW5pdGlvbi5pbXBsZW1lbnRzKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuc29tZShvPT5lW29dIT09dm9pZCAwKSl9Y24uc2hvdWxkVXNlUnVsZT1pcyxmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5yZXBvcnRUeXBlRXJyb3I9ZS5jaGVja0RhdGFUeXBlcz1lLmNoZWNrRGF0YVR5cGU9ZS5jb2VyY2VBbmRDaGVja0RhdGFUeXBlPWUuZ2V0SlNPTlR5cGVzPWUuZ2V0U2NoZW1hVHlwZXM9ZS5EYXRhVHlwZT12b2lkIDA7Y29uc3Qgbj1DbixyPWNuLG89VHIsdD1fZSxzPUFlO3ZhciBpOyhmdW5jdGlvbihVKXtVW1UuQ29ycmVjdD0wXT0iQ29ycmVjdCIsVVtVLldyb25nPTFdPSJXcm9uZyJ9KShpPWUuRGF0YVR5cGV8fChlLkRhdGFUeXBlPXt9KSk7ZnVuY3Rpb24gbChVKXtjb25zdCBTPWMoVS50eXBlKTtpZihTLmluY2x1ZGVzKCJudWxsIikpe2lmKFUubnVsbGFibGU9PT0hMSl0aHJvdyBuZXcgRXJyb3IoInR5cGU6IG51bGwgY29udHJhZGljdHMgbnVsbGFibGU6IGZhbHNlIil9ZWxzZXtpZighUy5sZW5ndGgmJlUubnVsbGFibGUhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCcibnVsbGFibGUiIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgInR5cGUiJyk7VS5udWxsYWJsZT09PSEwJiZTLnB1c2goIm51bGwiKX1yZXR1cm4gU31lLmdldFNjaGVtYVR5cGVzPWw7ZnVuY3Rpb24gYyhVKXtjb25zdCBTPUFycmF5LmlzQXJyYXkoVSk/VTpVP1tVXTpbXTtpZihTLmV2ZXJ5KG4uaXNKU09OVHlwZSkpcmV0dXJuIFM7dGhyb3cgbmV3IEVycm9yKCJ0eXBlIG11c3QgYmUgSlNPTlR5cGUgb3IgSlNPTlR5cGVbXTogIitTLmpvaW4oIiwiKSl9ZS5nZXRKU09OVHlwZXM9YztmdW5jdGlvbiBtKFUsUyl7Y29uc3R7Z2VuOmosZGF0YTpOLG9wdHM6SH09VSxHPWgoUyxILmNvZXJjZVR5cGVzKSxGPVMubGVuZ3RoPjAmJiEoRy5sZW5ndGg9PT0wJiZTLmxlbmd0aD09PTEmJigwLHIuc2NoZW1hSGFzUnVsZXNGb3JUeXBlKShVLFNbMF0pKTtpZihGKXtjb25zdCBXPUMoUyxOLEguc3RyaWN0TnVtYmVycyxpLldyb25nKTtqLmlmKFcsKCk9PntHLmxlbmd0aD9PKFUsUyxHKTpmKFUpfSl9cmV0dXJuIEZ9ZS5jb2VyY2VBbmRDaGVja0RhdGFUeXBlPW07Y29uc3QgYT1uZXcgU2V0KFsic3RyaW5nIiwibnVtYmVyIiwiaW50ZWdlciIsImJvb2xlYW4iLCJudWxsIl0pO2Z1bmN0aW9uIGgoVSxTKXtyZXR1cm4gUz9VLmZpbHRlcihqPT5hLmhhcyhqKXx8Uz09PSJhcnJheSImJmo9PT0iYXJyYXkiKTpbXX1mdW5jdGlvbiBPKFUsUyxqKXtjb25zdHtnZW46TixkYXRhOkgsb3B0czpHfT1VLEY9Ti5sZXQoImRhdGFUeXBlIiwoMCx0Ll8pYHR5cGVvZiAke0h9YCksVz1OLmxldCgiY29lcmNlZCIsKDAsdC5fKWB1bmRlZmluZWRgKTtHLmNvZXJjZVR5cGVzPT09ImFycmF5IiYmTi5pZigoMCx0Ll8pYCR7Rn0gPT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheSgke0h9KSAmJiAke0h9Lmxlbmd0aCA9PSAxYCwoKT0+Ti5hc3NpZ24oSCwoMCx0Ll8pYCR7SH1bMF1gKS5hc3NpZ24oRiwoMCx0Ll8pYHR5cGVvZiAke0h9YCkuaWYoQyhTLEgsRy5zdHJpY3ROdW1iZXJzKSwoKT0+Ti5hc3NpZ24oVyxIKSkpLE4uaWYoKDAsdC5fKWAke1d9ICE9PSB1bmRlZmluZWRgKTtmb3IoY29uc3QgeiBvZiBqKShhLmhhcyh6KXx8ej09PSJhcnJheSImJkcuY29lcmNlVHlwZXM9PT0iYXJyYXkiKSYmbWUoeik7Ti5lbHNlKCksZihVKSxOLmVuZElmKCksTi5pZigoMCx0Ll8pYCR7V30gIT09IHVuZGVmaW5lZGAsKCk9PntOLmFzc2lnbihILFcpLEQoVSxXKX0pO2Z1bmN0aW9uIG1lKHope3N3aXRjaCh6KXtjYXNlInN0cmluZyI6Ti5lbHNlSWYoKDAsdC5fKWAke0Z9ID09ICJudW1iZXIiIHx8ICR7Rn0gPT0gImJvb2xlYW4iYCkuYXNzaWduKFcsKDAsdC5fKWAiIiArICR7SH1gKS5lbHNlSWYoKDAsdC5fKWAke0h9ID09PSBudWxsYCkuYXNzaWduKFcsKDAsdC5fKWAiImApO3JldHVybjtjYXNlIm51bWJlciI6Ti5lbHNlSWYoKDAsdC5fKWAke0Z9ID09ICJib29sZWFuIiB8fCAke0h9ID09PSBudWxsCiAgICAgICAgICAgICAgfHwgKCR7Rn0gPT0gInN0cmluZyIgJiYgJHtIfSAmJiAke0h9ID09ICske0h9KWApLmFzc2lnbihXLCgwLHQuXylgKyR7SH1gKTtyZXR1cm47Y2FzZSJpbnRlZ2VyIjpOLmVsc2VJZigoMCx0Ll8pYCR7Rn0gPT09ICJib29sZWFuIiB8fCAke0h9ID09PSBudWxsCiAgICAgICAgICAgICAgfHwgKCR7Rn0gPT09ICJzdHJpbmciICYmICR7SH0gJiYgJHtIfSA9PSArJHtIfSAmJiAhKCR7SH0gJSAxKSlgKS5hc3NpZ24oVywoMCx0Ll8pYCske0h9YCk7cmV0dXJuO2Nhc2UiYm9vbGVhbiI6Ti5lbHNlSWYoKDAsdC5fKWAke0h9ID09PSAiZmFsc2UiIHx8ICR7SH0gPT09IDAgfHwgJHtIfSA9PT0gbnVsbGApLmFzc2lnbihXLCExKS5lbHNlSWYoKDAsdC5fKWAke0h9ID09PSAidHJ1ZSIgfHwgJHtIfSA9PT0gMWApLmFzc2lnbihXLCEwKTtyZXR1cm47Y2FzZSJudWxsIjpOLmVsc2VJZigoMCx0Ll8pYCR7SH0gPT09ICIiIHx8ICR7SH0gPT09IDAgfHwgJHtIfSA9PT0gZmFsc2VgKSxOLmFzc2lnbihXLG51bGwpO3JldHVybjtjYXNlImFycmF5IjpOLmVsc2VJZigoMCx0Ll8pYCR7Rn0gPT09ICJzdHJpbmciIHx8ICR7Rn0gPT09ICJudW1iZXIiCiAgICAgICAgICAgICAgfHwgJHtGfSA9PT0gImJvb2xlYW4iIHx8ICR7SH0gPT09IG51bGxgKS5hc3NpZ24oVywoMCx0Ll8pYFske0h9XWApfX19ZnVuY3Rpb24gRCh7Z2VuOlUscGFyZW50RGF0YTpTLHBhcmVudERhdGFQcm9wZXJ0eTpqfSxOKXtVLmlmKCgwLHQuXylgJHtTfSAhPT0gdW5kZWZpbmVkYCwoKT0+VS5hc3NpZ24oKDAsdC5fKWAke1N9WyR7an1dYCxOKSl9ZnVuY3Rpb24gdyhVLFMsaixOPWkuQ29ycmVjdCl7Y29uc3QgSD1OPT09aS5Db3JyZWN0P3Qub3BlcmF0b3JzLkVROnQub3BlcmF0b3JzLk5FUTtsZXQgRztzd2l0Y2goVSl7Y2FzZSJudWxsIjpyZXR1cm4oMCx0Ll8pYCR7U30gJHtIfSBudWxsYDtjYXNlImFycmF5IjpHPSgwLHQuXylgQXJyYXkuaXNBcnJheSgke1N9KWA7YnJlYWs7Y2FzZSJvYmplY3QiOkc9KDAsdC5fKWAke1N9ICYmIHR5cGVvZiAke1N9ID09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KCR7U30pYDticmVhaztjYXNlImludGVnZXIiOkc9RigoMCx0Ll8pYCEoJHtTfSAlIDEpICYmICFpc05hTigke1N9KWApO2JyZWFrO2Nhc2UibnVtYmVyIjpHPUYoKTticmVhaztkZWZhdWx0OnJldHVybigwLHQuXylgdHlwZW9mICR7U30gJHtIfSAke1V9YH1yZXR1cm4gTj09PWkuQ29ycmVjdD9HOigwLHQubm90KShHKTtmdW5jdGlvbiBGKFc9dC5uaWwpe3JldHVybigwLHQuYW5kKSgoMCx0Ll8pYHR5cGVvZiAke1N9ID09ICJudW1iZXIiYCxXLGo/KDAsdC5fKWBpc0Zpbml0ZSgke1N9KWA6dC5uaWwpfX1lLmNoZWNrRGF0YVR5cGU9dztmdW5jdGlvbiBDKFUsUyxqLE4pe2lmKFUubGVuZ3RoPT09MSlyZXR1cm4gdyhVWzBdLFMsaixOKTtsZXQgSDtjb25zdCBHPSgwLHMudG9IYXNoKShVKTtpZihHLmFycmF5JiZHLm9iamVjdCl7Y29uc3QgRj0oMCx0Ll8pYHR5cGVvZiAke1N9ICE9ICJvYmplY3QiYDtIPUcubnVsbD9GOigwLHQuXylgISR7U30gfHwgJHtGfWAsZGVsZXRlIEcubnVsbCxkZWxldGUgRy5hcnJheSxkZWxldGUgRy5vYmplY3R9ZWxzZSBIPXQubmlsO0cubnVtYmVyJiZkZWxldGUgRy5pbnRlZ2VyO2Zvcihjb25zdCBGIGluIEcpSD0oMCx0LmFuZCkoSCx3KEYsUyxqLE4pKTtyZXR1cm4gSH1lLmNoZWNrRGF0YVR5cGVzPUM7Y29uc3QgVD17bWVzc2FnZTooe3NjaGVtYTpVfSk9PmBtdXN0IGJlICR7VX1gLHBhcmFtczooe3NjaGVtYTpVLHNjaGVtYVZhbHVlOlN9KT0+dHlwZW9mIFU9PSJzdHJpbmciPygwLHQuXylge3R5cGU6ICR7VX19YDooMCx0Ll8pYHt0eXBlOiAke1N9fWB9O2Z1bmN0aW9uIGYoVSl7Y29uc3QgUz1BKFUpOygwLG8ucmVwb3J0RXJyb3IpKFMsVCl9ZS5yZXBvcnRUeXBlRXJyb3I9ZjtmdW5jdGlvbiBBKFUpe2NvbnN0e2dlbjpTLGRhdGE6aixzY2hlbWE6Tn09VSxIPSgwLHMuc2NoZW1hUmVmT3JWYWwpKFUsTiwidHlwZSIpO3JldHVybntnZW46UyxrZXl3b3JkOiJ0eXBlIixkYXRhOmosc2NoZW1hOk4udHlwZSxzY2hlbWFDb2RlOkgsc2NoZW1hVmFsdWU6SCxwYXJlbnRTY2hlbWE6TixwYXJhbXM6e30saXQ6VX19fSh0byk7dmFyIHNvPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShzbywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksc28uYXNzaWduRGVmYXVsdHM9dm9pZCAwO2NvbnN0IG9yPV9lLHZ1PUFlO2Z1bmN0aW9uIER1KGUsbil7Y29uc3R7cHJvcGVydGllczpyLGl0ZW1zOm99PWUuc2NoZW1hO2lmKG49PT0ib2JqZWN0IiYmcilmb3IoY29uc3QgdCBpbiByKWFzKGUsdCxyW3RdLmRlZmF1bHQpO2Vsc2Ugbj09PSJhcnJheSImJkFycmF5LmlzQXJyYXkobykmJm8uZm9yRWFjaCgodCxzKT0+YXMoZSxzLHQuZGVmYXVsdCkpfXNvLmFzc2lnbkRlZmF1bHRzPUR1O2Z1bmN0aW9uIGFzKGUsbixyKXtjb25zdHtnZW46byxjb21wb3NpdGVSdWxlOnQsZGF0YTpzLG9wdHM6aX09ZTtpZihyPT09dm9pZCAwKXJldHVybjtjb25zdCBsPSgwLG9yLl8pYCR7c30keygwLG9yLmdldFByb3BlcnR5KShuKX1gO2lmKHQpeygwLHZ1LmNoZWNrU3RyaWN0TW9kZSkoZSxgZGVmYXVsdCBpcyBpZ25vcmVkIGZvcjogJHtsfWApO3JldHVybn1sZXQgYz0oMCxvci5fKWAke2x9ID09PSB1bmRlZmluZWRgO2kudXNlRGVmYXVsdHM9PT0iZW1wdHkiJiYoYz0oMCxvci5fKWAke2N9IHx8ICR7bH0gPT09IG51bGwgfHwgJHtsfSA9PT0gIiJgKSxvLmlmKGMsKDAsb3IuXylgJHtsfSA9ICR7KDAsb3Iuc3RyaW5naWZ5KShyKX1gKX12YXIgcWU9e30sb2U9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KG9lLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxvZS52YWxpZGF0ZVVuaW9uPW9lLnZhbGlkYXRlQXJyYXk9b2UudXNlUGF0dGVybj1vZS5jYWxsVmFsaWRhdGVDb2RlPW9lLnNjaGVtYVByb3BlcnRpZXM9b2UuYWxsU2NoZW1hUHJvcGVydGllcz1vZS5ub1Byb3BlcnR5SW5EYXRhPW9lLnByb3BlcnR5SW5EYXRhPW9lLmlzT3duUHJvcGVydHk9b2UuaGFzUHJvcEZ1bmM9b2UucmVwb3J0TWlzc2luZ1Byb3A9b2UuY2hlY2tNaXNzaW5nUHJvcD1vZS5jaGVja1JlcG9ydE1pc3NpbmdQcm9wPXZvaWQgMDtjb25zdCBkZT1fZSxGbz1BZSxUbj1NZSxTdT1BZTtmdW5jdGlvbiBQdShlLG4pe2NvbnN0e2dlbjpyLGRhdGE6byxpdDp0fT1lO3IuaWYoS28ocixvLG4sdC5vcHRzLm93blByb3BlcnRpZXMpLCgpPT57ZS5zZXRQYXJhbXMoe21pc3NpbmdQcm9wZXJ0eTooMCxkZS5fKWAke259YH0sITApLGUuZXJyb3IoKX0pfW9lLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3A9UHU7ZnVuY3Rpb24gd3Uoe2dlbjplLGRhdGE6bixpdDp7b3B0czpyfX0sbyx0KXtyZXR1cm4oMCxkZS5vcikoLi4uby5tYXAocz0+KDAsZGUuYW5kKShLbyhlLG4scyxyLm93blByb3BlcnRpZXMpLCgwLGRlLl8pYCR7dH0gPSAke3N9YCkpKX1vZS5jaGVja01pc3NpbmdQcm9wPXd1O2Z1bmN0aW9uIEd1KGUsbil7ZS5zZXRQYXJhbXMoe21pc3NpbmdQcm9wZXJ0eTpufSwhMCksZS5lcnJvcigpfW9lLnJlcG9ydE1pc3NpbmdQcm9wPUd1O2Z1bmN0aW9uIHVzKGUpe3JldHVybiBlLnNjb3BlVmFsdWUoImZ1bmMiLHtyZWY6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxjb2RlOigwLGRlLl8pYE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlgfSl9b2UuaGFzUHJvcEZ1bmM9dXM7ZnVuY3Rpb24gVm8oZSxuLHIpe3JldHVybigwLGRlLl8pYCR7dXMoZSl9LmNhbGwoJHtufSwgJHtyfSlgfW9lLmlzT3duUHJvcGVydHk9Vm87ZnVuY3Rpb24gQ3UoZSxuLHIsbyl7Y29uc3QgdD0oMCxkZS5fKWAke259JHsoMCxkZS5nZXRQcm9wZXJ0eSkocil9ICE9PSB1bmRlZmluZWRgO3JldHVybiBvPygwLGRlLl8pYCR7dH0gJiYgJHtWbyhlLG4scil9YDp0fW9lLnByb3BlcnR5SW5EYXRhPUN1O2Z1bmN0aW9uIEtvKGUsbixyLG8pe2NvbnN0IHQ9KDAsZGUuXylgJHtufSR7KDAsZGUuZ2V0UHJvcGVydHkpKHIpfSA9PT0gdW5kZWZpbmVkYDtyZXR1cm4gbz8oMCxkZS5vcikodCwoMCxkZS5ub3QpKFZvKGUsbixyKSkpOnR9b2Uubm9Qcm9wZXJ0eUluRGF0YT1LbztmdW5jdGlvbiBfcyhlKXtyZXR1cm4gZT9PYmplY3Qua2V5cyhlKS5maWx0ZXIobj0+biE9PSJfX3Byb3RvX18iKTpbXX1vZS5hbGxTY2hlbWFQcm9wZXJ0aWVzPV9zO2Z1bmN0aW9uIHl1KGUsbil7cmV0dXJuIF9zKG4pLmZpbHRlcihyPT4hKDAsRm8uYWx3YXlzVmFsaWRTY2hlbWEpKGUsbltyXSkpfW9lLnNjaGVtYVByb3BlcnRpZXM9eXU7ZnVuY3Rpb24gTHUoe3NjaGVtYUNvZGU6ZSxkYXRhOm4saXQ6e2dlbjpyLHRvcFNjaGVtYVJlZjpvLHNjaGVtYVBhdGg6dCxlcnJvclBhdGg6c30saXQ6aX0sbCxjLG0pe2NvbnN0IGE9bT8oMCxkZS5fKWAke2V9LCAke259LCAke299JHt0fWA6bixoPVtbVG4uZGVmYXVsdC5pbnN0YW5jZVBhdGgsKDAsZGUuc3RyQ29uY2F0KShUbi5kZWZhdWx0Lmluc3RhbmNlUGF0aCxzKV0sW1RuLmRlZmF1bHQucGFyZW50RGF0YSxpLnBhcmVudERhdGFdLFtUbi5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eSxpLnBhcmVudERhdGFQcm9wZXJ0eV0sW1RuLmRlZmF1bHQucm9vdERhdGEsVG4uZGVmYXVsdC5yb290RGF0YV1dO2kub3B0cy5keW5hbWljUmVmJiZoLnB1c2goW1RuLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsVG4uZGVmYXVsdC5keW5hbWljQW5jaG9yc10pO2NvbnN0IE89KDAsZGUuXylgJHthfSwgJHtyLm9iamVjdCguLi5oKX1gO3JldHVybiBjIT09ZGUubmlsPygwLGRlLl8pYCR7bH0uY2FsbCgke2N9LCAke099KWA6KDAsZGUuXylgJHtsfSgke099KWB9b2UuY2FsbFZhbGlkYXRlQ29kZT1MdTtjb25zdCBCdT0oMCxkZS5fKWBuZXcgUmVnRXhwYDtmdW5jdGlvbiBrdSh7Z2VuOmUsaXQ6e29wdHM6bn19LHIpe2NvbnN0IG89bi51bmljb2RlUmVnRXhwPyJ1IjoiIix7cmVnRXhwOnR9PW4uY29kZSxzPXQocixvKTtyZXR1cm4gZS5zY29wZVZhbHVlKCJwYXR0ZXJuIix7a2V5OnMudG9TdHJpbmcoKSxyZWY6cyxjb2RlOigwLGRlLl8pYCR7dC5jb2RlPT09Im5ldyBSZWdFeHAiP0J1OigwLFN1LnVzZUZ1bmMpKGUsdCl9KCR7cn0sICR7b30pYH0pfW9lLnVzZVBhdHRlcm49a3U7ZnVuY3Rpb24gTXUoZSl7Y29uc3R7Z2VuOm4sZGF0YTpyLGtleXdvcmQ6byxpdDp0fT1lLHM9bi5uYW1lKCJ2YWxpZCIpO2lmKHQuYWxsRXJyb3JzKXtjb25zdCBsPW4ubGV0KCJ2YWxpZCIsITApO3JldHVybiBpKCgpPT5uLmFzc2lnbihsLCExKSksbH1yZXR1cm4gbi52YXIocywhMCksaSgoKT0+bi5icmVhaygpKSxzO2Z1bmN0aW9uIGkobCl7Y29uc3QgYz1uLmNvbnN0KCJsZW4iLCgwLGRlLl8pYCR7cn0ubGVuZ3RoYCk7bi5mb3JSYW5nZSgiaSIsMCxjLG09PntlLnN1YnNjaGVtYSh7a2V5d29yZDpvLGRhdGFQcm9wOm0sZGF0YVByb3BUeXBlOkZvLlR5cGUuTnVtfSxzKSxuLmlmKCgwLGRlLm5vdCkocyksbCl9KX19b2UudmFsaWRhdGVBcnJheT1NdTtmdW5jdGlvbiBYdShlKXtjb25zdHtnZW46bixzY2hlbWE6cixrZXl3b3JkOm8saXQ6dH09ZTtpZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgRXJyb3IoImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvciIpO2lmKHIuc29tZShjPT4oMCxGby5hbHdheXNWYWxpZFNjaGVtYSkodCxjKSkmJiF0Lm9wdHMudW5ldmFsdWF0ZWQpcmV0dXJuO2NvbnN0IGk9bi5sZXQoInZhbGlkIiwhMSksbD1uLm5hbWUoIl92YWxpZCIpO24uYmxvY2soKCk9PnIuZm9yRWFjaCgoYyxtKT0+e2NvbnN0IGE9ZS5zdWJzY2hlbWEoe2tleXdvcmQ6byxzY2hlbWFQcm9wOm0sY29tcG9zaXRlUnVsZTohMH0sbCk7bi5hc3NpZ24oaSwoMCxkZS5fKWAke2l9IHx8ICR7bH1gKSxlLm1lcmdlVmFsaWRFdmFsdWF0ZWQoYSxsKXx8bi5pZigoMCxkZS5ub3QpKGkpKX0pKSxlLnJlc3VsdChpLCgpPT5lLnJlc2V0KCksKCk9PmUuZXJyb3IoITApKX1vZS52YWxpZGF0ZVVuaW9uPVh1LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscWUudmFsaWRhdGVLZXl3b3JkVXNhZ2U9cWUudmFsaWRTY2hlbWFUeXBlPXFlLmZ1bmNLZXl3b3JkQ29kZT1xZS5tYWNyb0tleXdvcmRDb2RlPXZvaWQgMDtjb25zdCB3ZT1fZSx5bj1NZSwkdT1vZSxqdT1UcjtmdW5jdGlvbiB4dShlLG4pe2NvbnN0e2dlbjpyLGtleXdvcmQ6byxzY2hlbWE6dCxwYXJlbnRTY2hlbWE6cyxpdDppfT1lLGw9bi5tYWNyby5jYWxsKGkuc2VsZix0LHMsaSksYz1jcyhyLG8sbCk7aS5vcHRzLnZhbGlkYXRlU2NoZW1hIT09ITEmJmkuc2VsZi52YWxpZGF0ZVNjaGVtYShsLCEwKTtjb25zdCBtPXIubmFtZSgidmFsaWQiKTtlLnN1YnNjaGVtYSh7c2NoZW1hOmwsc2NoZW1hUGF0aDp3ZS5uaWwsZXJyU2NoZW1hUGF0aDpgJHtpLmVyclNjaGVtYVBhdGh9LyR7b31gLHRvcFNjaGVtYVJlZjpjLGNvbXBvc2l0ZVJ1bGU6ITB9LG0pLGUucGFzcyhtLCgpPT5lLmVycm9yKCEwKSl9cWUubWFjcm9LZXl3b3JkQ29kZT14dTtmdW5jdGlvbiBGdShlLG4pe3ZhciByO2NvbnN0e2dlbjpvLGtleXdvcmQ6dCxzY2hlbWE6cyxwYXJlbnRTY2hlbWE6aSwkZGF0YTpsLGl0OmN9PWU7S3UoYyxuKTtjb25zdCBtPSFsJiZuLmNvbXBpbGU/bi5jb21waWxlLmNhbGwoYy5zZWxmLHMsaSxjKTpuLnZhbGlkYXRlLGE9Y3Mobyx0LG0pLGg9by5sZXQoInZhbGlkIik7ZS5ibG9jayRkYXRhKGgsTyksZS5vaygocj1uLnZhbGlkKSE9PW51bGwmJnIhPT12b2lkIDA/cjpoKTtmdW5jdGlvbiBPKCl7aWYobi5lcnJvcnM9PT0hMSlDKCksbi5tb2RpZnlpbmcmJmxzKGUpLFQoKCk9PmUuZXJyb3IoKSk7ZWxzZXtjb25zdCBmPW4uYXN5bmM/RCgpOncoKTtuLm1vZGlmeWluZyYmbHMoZSksVCgoKT0+VnUoZSxmKSl9fWZ1bmN0aW9uIEQoKXtjb25zdCBmPW8ubGV0KCJydWxlRXJycyIsbnVsbCk7cmV0dXJuIG8udHJ5KCgpPT5DKCgwLHdlLl8pYGF3YWl0IGApLEE9Pm8uYXNzaWduKGgsITEpLmlmKCgwLHdlLl8pYCR7QX0gaW5zdGFuY2VvZiAke2MuVmFsaWRhdGlvbkVycm9yfWAsKCk9Pm8uYXNzaWduKGYsKDAsd2UuXylgJHtBfS5lcnJvcnNgKSwoKT0+by50aHJvdyhBKSkpLGZ9ZnVuY3Rpb24gdygpe2NvbnN0IGY9KDAsd2UuXylgJHthfS5lcnJvcnNgO3JldHVybiBvLmFzc2lnbihmLG51bGwpLEMod2UubmlsKSxmfWZ1bmN0aW9uIEMoZj1uLmFzeW5jPygwLHdlLl8pYGF3YWl0IGA6d2UubmlsKXtjb25zdCBBPWMub3B0cy5wYXNzQ29udGV4dD95bi5kZWZhdWx0LnRoaXM6eW4uZGVmYXVsdC5zZWxmLFU9ISgiY29tcGlsZSJpbiBuJiYhbHx8bi5zY2hlbWE9PT0hMSk7by5hc3NpZ24oaCwoMCx3ZS5fKWAke2Z9JHsoMCwkdS5jYWxsVmFsaWRhdGVDb2RlKShlLGEsQSxVKX1gLG4ubW9kaWZ5aW5nKX1mdW5jdGlvbiBUKGYpe3ZhciBBO28uaWYoKDAsd2Uubm90KSgoQT1uLnZhbGlkKSE9PW51bGwmJkEhPT12b2lkIDA/QTpoKSxmKX19cWUuZnVuY0tleXdvcmRDb2RlPUZ1O2Z1bmN0aW9uIGxzKGUpe2NvbnN0e2dlbjpuLGRhdGE6cixpdDpvfT1lO24uaWYoby5wYXJlbnREYXRhLCgpPT5uLmFzc2lnbihyLCgwLHdlLl8pYCR7by5wYXJlbnREYXRhfVske28ucGFyZW50RGF0YVByb3BlcnR5fV1gKSl9ZnVuY3Rpb24gVnUoZSxuKXtjb25zdHtnZW46cn09ZTtyLmlmKCgwLHdlLl8pYEFycmF5LmlzQXJyYXkoJHtufSlgLCgpPT57ci5hc3NpZ24oeW4uZGVmYXVsdC52RXJyb3JzLCgwLHdlLl8pYCR7eW4uZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbCA/ICR7bn0gOiAke3luLmRlZmF1bHQudkVycm9yc30uY29uY2F0KCR7bn0pYCkuYXNzaWduKHluLmRlZmF1bHQuZXJyb3JzLCgwLHdlLl8pYCR7eW4uZGVmYXVsdC52RXJyb3JzfS5sZW5ndGhgKSwoMCxqdS5leHRlbmRFcnJvcnMpKGUpfSwoKT0+ZS5lcnJvcigpKX1mdW5jdGlvbiBLdSh7c2NoZW1hRW52OmV9LG4pe2lmKG4uYXN5bmMmJiFlLiRhc3luYyl0aHJvdyBuZXcgRXJyb3IoImFzeW5jIGtleXdvcmQgaW4gc3luYyBzY2hlbWEiKX1mdW5jdGlvbiBjcyhlLG4scil7aWYocj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYGtleXdvcmQgIiR7bn0iIGZhaWxlZCB0byBjb21waWxlYCk7cmV0dXJuIGUuc2NvcGVWYWx1ZSgia2V5d29yZCIsdHlwZW9mIHI9PSJmdW5jdGlvbiI/e3JlZjpyfTp7cmVmOnIsY29kZTooMCx3ZS5zdHJpbmdpZnkpKHIpfSl9ZnVuY3Rpb24gV3UoZSxuLHI9ITEpe3JldHVybiFuLmxlbmd0aHx8bi5zb21lKG89Pm89PT0iYXJyYXkiP0FycmF5LmlzQXJyYXkoZSk6bz09PSJvYmplY3QiP2UmJnR5cGVvZiBlPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoZSk6dHlwZW9mIGU9PW98fHImJnR5cGVvZiBlPT0idW5kZWZpbmVkIil9cWUudmFsaWRTY2hlbWFUeXBlPVd1O2Z1bmN0aW9uIFl1KHtzY2hlbWE6ZSxvcHRzOm4sc2VsZjpyLGVyclNjaGVtYVBhdGg6b30sdCxzKXtpZihBcnJheS5pc0FycmF5KHQua2V5d29yZCk/IXQua2V5d29yZC5pbmNsdWRlcyhzKTp0LmtleXdvcmQhPT1zKXRocm93IG5ldyBFcnJvcigiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yIik7Y29uc3QgaT10LmRlcGVuZGVuY2llcztpZihpIT1udWxsJiZpLnNvbWUobD0+IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGwpKSl0aHJvdyBuZXcgRXJyb3IoYHBhcmVudCBzY2hlbWEgbXVzdCBoYXZlIGRlcGVuZGVuY2llcyBvZiAke3N9OiAke2kuam9pbigiLCIpfWApO2lmKHQudmFsaWRhdGVTY2hlbWEmJiF0LnZhbGlkYXRlU2NoZW1hKGVbc10pKXtjb25zdCBjPWBrZXl3b3JkICIke3N9IiB2YWx1ZSBpcyBpbnZhbGlkIGF0IHBhdGggIiR7b30iOiBgK3IuZXJyb3JzVGV4dCh0LnZhbGlkYXRlU2NoZW1hLmVycm9ycyk7aWYobi52YWxpZGF0ZVNjaGVtYT09PSJsb2ciKXIubG9nZ2VyLmVycm9yKGMpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGMpfX1xZS52YWxpZGF0ZUtleXdvcmRVc2FnZT1ZdTt2YXIgTm49e307T2JqZWN0LmRlZmluZVByb3BlcnR5KE5uLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxObi5leHRlbmRTdWJzY2hlbWFNb2RlPU5uLmV4dGVuZFN1YnNjaGVtYURhdGE9Tm4uZ2V0U3Vic2NoZW1hPXZvaWQgMDtjb25zdCBRZT1fZSxkcz1BZTtmdW5jdGlvbiBKdShlLHtrZXl3b3JkOm4sc2NoZW1hUHJvcDpyLHNjaGVtYTpvLHNjaGVtYVBhdGg6dCxlcnJTY2hlbWFQYXRoOnMsdG9wU2NoZW1hUmVmOml9KXtpZihuIT09dm9pZCAwJiZvIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcignYm90aCAia2V5d29yZCIgYW5kICJzY2hlbWEiIHBhc3NlZCwgb25seSBvbmUgYWxsb3dlZCcpO2lmKG4hPT12b2lkIDApe2NvbnN0IGw9ZS5zY2hlbWFbbl07cmV0dXJuIHI9PT12b2lkIDA/e3NjaGVtYTpsLHNjaGVtYVBhdGg6KDAsUWUuXylgJHtlLnNjaGVtYVBhdGh9JHsoMCxRZS5nZXRQcm9wZXJ0eSkobil9YCxlcnJTY2hlbWFQYXRoOmAke2UuZXJyU2NoZW1hUGF0aH0vJHtufWB9OntzY2hlbWE6bFtyXSxzY2hlbWFQYXRoOigwLFFlLl8pYCR7ZS5zY2hlbWFQYXRofSR7KDAsUWUuZ2V0UHJvcGVydHkpKG4pfSR7KDAsUWUuZ2V0UHJvcGVydHkpKHIpfWAsZXJyU2NoZW1hUGF0aDpgJHtlLmVyclNjaGVtYVBhdGh9LyR7bn0vJHsoMCxkcy5lc2NhcGVGcmFnbWVudCkocil9YH19aWYobyE9PXZvaWQgMCl7aWYodD09PXZvaWQgMHx8cz09PXZvaWQgMHx8aT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoJyJzY2hlbWFQYXRoIiwgImVyclNjaGVtYVBhdGgiIGFuZCAidG9wU2NoZW1hUmVmIiBhcmUgcmVxdWlyZWQgd2l0aCAic2NoZW1hIicpO3JldHVybntzY2hlbWE6byxzY2hlbWFQYXRoOnQsdG9wU2NoZW1hUmVmOmksZXJyU2NoZW1hUGF0aDpzfX10aHJvdyBuZXcgRXJyb3IoJ2VpdGhlciAia2V5d29yZCIgb3IgInNjaGVtYSIgbXVzdCBiZSBwYXNzZWQnKX1Obi5nZXRTdWJzY2hlbWE9SnU7ZnVuY3Rpb24genUoZSxuLHtkYXRhUHJvcDpyLGRhdGFQcm9wVHlwZTpvLGRhdGE6dCxkYXRhVHlwZXM6cyxwcm9wZXJ0eU5hbWU6aX0pe2lmKHQhPT12b2lkIDAmJnIhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCdib3RoICJkYXRhIiBhbmQgImRhdGFQcm9wIiBwYXNzZWQsIG9ubHkgb25lIGFsbG93ZWQnKTtjb25zdHtnZW46bH09bjtpZihyIT09dm9pZCAwKXtjb25zdHtlcnJvclBhdGg6bSxkYXRhUGF0aEFycjphLG9wdHM6aH09bixPPWwubGV0KCJkYXRhIiwoMCxRZS5fKWAke24uZGF0YX0keygwLFFlLmdldFByb3BlcnR5KShyKX1gLCEwKTtjKE8pLGUuZXJyb3JQYXRoPSgwLFFlLnN0cilgJHttfSR7KDAsZHMuZ2V0RXJyb3JQYXRoKShyLG8saC5qc1Byb3BlcnR5U3ludGF4KX1gLGUucGFyZW50RGF0YVByb3BlcnR5PSgwLFFlLl8pYCR7cn1gLGUuZGF0YVBhdGhBcnI9Wy4uLmEsZS5wYXJlbnREYXRhUHJvcGVydHldfWlmKHQhPT12b2lkIDApe2NvbnN0IG09dCBpbnN0YW5jZW9mIFFlLk5hbWU/dDpsLmxldCgiZGF0YSIsdCwhMCk7YyhtKSxpIT09dm9pZCAwJiYoZS5wcm9wZXJ0eU5hbWU9aSl9cyYmKGUuZGF0YVR5cGVzPXMpO2Z1bmN0aW9uIGMobSl7ZS5kYXRhPW0sZS5kYXRhTGV2ZWw9bi5kYXRhTGV2ZWwrMSxlLmRhdGFUeXBlcz1bXSxuLmRlZmluZWRQcm9wZXJ0aWVzPW5ldyBTZXQsZS5wYXJlbnREYXRhPW4uZGF0YSxlLmRhdGFOYW1lcz1bLi4ubi5kYXRhTmFtZXMsbV19fU5uLmV4dGVuZFN1YnNjaGVtYURhdGE9enU7ZnVuY3Rpb24gcXUoZSx7anRkRGlzY3JpbWluYXRvcjpuLGp0ZE1ldGFkYXRhOnIsY29tcG9zaXRlUnVsZTpvLGNyZWF0ZUVycm9yczp0LGFsbEVycm9yczpzfSl7byE9PXZvaWQgMCYmKGUuY29tcG9zaXRlUnVsZT1vKSx0IT09dm9pZCAwJiYoZS5jcmVhdGVFcnJvcnM9dCkscyE9PXZvaWQgMCYmKGUuYWxsRXJyb3JzPXMpLGUuanRkRGlzY3JpbWluYXRvcj1uLGUuanRkTWV0YWRhdGE9cn1Obi5leHRlbmRTdWJzY2hlbWFNb2RlPXF1O3ZhciBEZT17fSxRdT1mdW5jdGlvbiBlKG4scil7aWYobj09PXIpcmV0dXJuITA7aWYobiYmciYmdHlwZW9mIG49PSJvYmplY3QiJiZ0eXBlb2Ygcj09Im9iamVjdCIpe2lmKG4uY29uc3RydWN0b3IhPT1yLmNvbnN0cnVjdG9yKXJldHVybiExO3ZhciBvLHQscztpZihBcnJheS5pc0FycmF5KG4pKXtpZihvPW4ubGVuZ3RoLG8hPXIubGVuZ3RoKXJldHVybiExO2Zvcih0PW87dC0tIT09MDspaWYoIWUoblt0XSxyW3RdKSlyZXR1cm4hMTtyZXR1cm4hMH1pZihuLmNvbnN0cnVjdG9yPT09UmVnRXhwKXJldHVybiBuLnNvdXJjZT09PXIuc291cmNlJiZuLmZsYWdzPT09ci5mbGFncztpZihuLnZhbHVlT2YhPT1PYmplY3QucHJvdG90eXBlLnZhbHVlT2YpcmV0dXJuIG4udmFsdWVPZigpPT09ci52YWx1ZU9mKCk7aWYobi50b1N0cmluZyE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpcmV0dXJuIG4udG9TdHJpbmcoKT09PXIudG9TdHJpbmcoKTtpZihzPU9iamVjdC5rZXlzKG4pLG89cy5sZW5ndGgsbyE9PU9iamVjdC5rZXlzKHIpLmxlbmd0aClyZXR1cm4hMTtmb3IodD1vO3QtLSE9PTA7KWlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixzW3RdKSlyZXR1cm4hMTtmb3IodD1vO3QtLSE9PTA7KXt2YXIgaT1zW3RdO2lmKCFlKG5baV0scltpXSkpcmV0dXJuITF9cmV0dXJuITB9cmV0dXJuIG4hPT1uJiZyIT09cn0saHM9e2V4cG9ydHM6e319LGduPWhzLmV4cG9ydHM9ZnVuY3Rpb24oZSxuLHIpe3R5cGVvZiBuPT0iZnVuY3Rpb24iJiYocj1uLG49e30pLHI9bi5jYnx8cjt2YXIgbz10eXBlb2Ygcj09ImZ1bmN0aW9uIj9yOnIucHJlfHxmdW5jdGlvbigpe30sdD1yLnBvc3R8fGZ1bmN0aW9uKCl7fTtpbyhuLG8sdCxlLCIiLGUpfTtnbi5rZXl3b3Jkcz17YWRkaXRpb25hbEl0ZW1zOiEwLGl0ZW1zOiEwLGNvbnRhaW5zOiEwLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiEwLHByb3BlcnR5TmFtZXM6ITAsbm90OiEwLGlmOiEwLHRoZW46ITAsZWxzZTohMH0sZ24uYXJyYXlLZXl3b3Jkcz17aXRlbXM6ITAsYWxsT2Y6ITAsYW55T2Y6ITAsb25lT2Y6ITB9LGduLnByb3BzS2V5d29yZHM9eyRkZWZzOiEwLGRlZmluaXRpb25zOiEwLHByb3BlcnRpZXM6ITAscGF0dGVyblByb3BlcnRpZXM6ITAsZGVwZW5kZW5jaWVzOiEwfSxnbi5za2lwS2V5d29yZHM9e2RlZmF1bHQ6ITAsZW51bTohMCxjb25zdDohMCxyZXF1aXJlZDohMCxtYXhpbXVtOiEwLG1pbmltdW06ITAsZXhjbHVzaXZlTWF4aW11bTohMCxleGNsdXNpdmVNaW5pbXVtOiEwLG11bHRpcGxlT2Y6ITAsbWF4TGVuZ3RoOiEwLG1pbkxlbmd0aDohMCxwYXR0ZXJuOiEwLGZvcm1hdDohMCxtYXhJdGVtczohMCxtaW5JdGVtczohMCx1bmlxdWVJdGVtczohMCxtYXhQcm9wZXJ0aWVzOiEwLG1pblByb3BlcnRpZXM6ITB9O2Z1bmN0aW9uIGlvKGUsbixyLG8sdCxzLGksbCxjLG0pe2lmKG8mJnR5cGVvZiBvPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkobykpe24obyx0LHMsaSxsLGMsbSk7Zm9yKHZhciBhIGluIG8pe3ZhciBoPW9bYV07aWYoQXJyYXkuaXNBcnJheShoKSl7aWYoYSBpbiBnbi5hcnJheUtleXdvcmRzKWZvcih2YXIgTz0wO088aC5sZW5ndGg7TysrKWlvKGUsbixyLGhbT10sdCsiLyIrYSsiLyIrTyxzLHQsYSxvLE8pfWVsc2UgaWYoYSBpbiBnbi5wcm9wc0tleXdvcmRzKXtpZihoJiZ0eXBlb2YgaD09Im9iamVjdCIpZm9yKHZhciBEIGluIGgpaW8oZSxuLHIsaFtEXSx0KyIvIithKyIvIitadShEKSxzLHQsYSxvLEQpfWVsc2UoYSBpbiBnbi5rZXl3b3Jkc3x8ZS5hbGxLZXlzJiYhKGEgaW4gZ24uc2tpcEtleXdvcmRzKSkmJmlvKGUsbixyLGgsdCsiLyIrYSxzLHQsYSxvKX1yKG8sdCxzLGksbCxjLG0pfX1mdW5jdGlvbiBadShlKXtyZXR1cm4gZS5yZXBsYWNlKC9+L2csIn4wIikucmVwbGFjZSgvXC8vZywifjEiKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLERlLmdldFNjaGVtYVJlZnM9RGUucmVzb2x2ZVVybD1EZS5ub3JtYWxpemVJZD1EZS5fZ2V0RnVsbFBhdGg9RGUuZ2V0RnVsbFBhdGg9RGUuaW5saW5lUmVmPXZvaWQgMDtjb25zdCBlXz1BZSxuXz1RdSxyXz1ocy5leHBvcnRzLG9fPW5ldyBTZXQoWyJ0eXBlIiwiZm9ybWF0IiwicGF0dGVybiIsIm1heExlbmd0aCIsIm1pbkxlbmd0aCIsIm1heFByb3BlcnRpZXMiLCJtaW5Qcm9wZXJ0aWVzIiwibWF4SXRlbXMiLCJtaW5JdGVtcyIsIm1heGltdW0iLCJtaW5pbXVtIiwidW5pcXVlSXRlbXMiLCJtdWx0aXBsZU9mIiwicmVxdWlyZWQiLCJlbnVtIiwiY29uc3QiXSk7ZnVuY3Rpb24gdF8oZSxuPSEwKXtyZXR1cm4gdHlwZW9mIGU9PSJib29sZWFuIj8hMDpuPT09ITA/IVdvKGUpOm4/bXMoZSk8PW46ITF9RGUuaW5saW5lUmVmPXRfO2NvbnN0IHNfPW5ldyBTZXQoWyIkcmVmIiwiJHJlY3Vyc2l2ZVJlZiIsIiRyZWN1cnNpdmVBbmNob3IiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIl0pO2Z1bmN0aW9uIFdvKGUpe2Zvcihjb25zdCBuIGluIGUpe2lmKHNfLmhhcyhuKSlyZXR1cm4hMDtjb25zdCByPWVbbl07aWYoQXJyYXkuaXNBcnJheShyKSYmci5zb21lKFdvKXx8dHlwZW9mIHI9PSJvYmplY3QiJiZXbyhyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBtcyhlKXtsZXQgbj0wO2Zvcihjb25zdCByIGluIGUpe2lmKHI9PT0iJHJlZiIpcmV0dXJuIDEvMDtpZihuKyssIW9fLmhhcyhyKSYmKHR5cGVvZiBlW3JdPT0ib2JqZWN0IiYmKDAsZV8uZWFjaEl0ZW0pKGVbcl0sbz0+bis9bXMobykpLG49PT0xLzApKXJldHVybiAxLzB9cmV0dXJuIG59ZnVuY3Rpb24gcHMoZSxuPSIiLHIpe3IhPT0hMSYmKG49dHIobikpO2NvbnN0IG89ZS5wYXJzZShuKTtyZXR1cm4gRXMoZSxvKX1EZS5nZXRGdWxsUGF0aD1wcztmdW5jdGlvbiBFcyhlLG4pe3JldHVybiBlLnNlcmlhbGl6ZShuKS5zcGxpdCgiIyIpWzBdKyIjIn1EZS5fZ2V0RnVsbFBhdGg9RXM7Y29uc3QgaV89LyNcLz8kLztmdW5jdGlvbiB0cihlKXtyZXR1cm4gZT9lLnJlcGxhY2UoaV8sIiIpOiIifURlLm5vcm1hbGl6ZUlkPXRyO2Z1bmN0aW9uIGFfKGUsbixyKXtyZXR1cm4gcj10cihyKSxlLnJlc29sdmUobixyKX1EZS5yZXNvbHZlVXJsPWFfO2NvbnN0IHVfPS9eW2Etel9dWy1hLXowLTkuX10qJC9pO2Z1bmN0aW9uIF9fKGUsbil7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm57fTtjb25zdHtzY2hlbWFJZDpyLHVyaVJlc29sdmVyOm99PXRoaXMub3B0cyx0PXRyKGVbcl18fG4pLHM9eyIiOnR9LGk9cHMobyx0LCExKSxsPXt9LGM9bmV3IFNldDtyZXR1cm4gcl8oZSx7YWxsS2V5czohMH0sKGgsTyxELHcpPT57aWYodz09PXZvaWQgMClyZXR1cm47Y29uc3QgQz1pK087bGV0IFQ9c1t3XTt0eXBlb2YgaFtyXT09InN0cmluZyImJihUPWYuY2FsbCh0aGlzLGhbcl0pKSxBLmNhbGwodGhpcyxoLiRhbmNob3IpLEEuY2FsbCh0aGlzLGguJGR5bmFtaWNBbmNob3IpLHNbT109VDtmdW5jdGlvbiBmKFUpe2NvbnN0IFM9dGhpcy5vcHRzLnVyaVJlc29sdmVyLnJlc29sdmU7aWYoVT10cihUP1MoVCxVKTpVKSxjLmhhcyhVKSl0aHJvdyBhKFUpO2MuYWRkKFUpO2xldCBqPXRoaXMucmVmc1tVXTtyZXR1cm4gdHlwZW9mIGo9PSJzdHJpbmciJiYoaj10aGlzLnJlZnNbal0pLHR5cGVvZiBqPT0ib2JqZWN0Ij9tKGgsai5zY2hlbWEsVSk6VSE9PXRyKEMpJiYoVVswXT09PSIjIj8obShoLGxbVV0sVSksbFtVXT1oKTp0aGlzLnJlZnNbVV09QyksVX1mdW5jdGlvbiBBKFUpe2lmKHR5cGVvZiBVPT0ic3RyaW5nIil7aWYoIXVfLnRlc3QoVSkpdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFuY2hvciAiJHtVfSJgKTtmLmNhbGwodGhpcyxgIyR7VX1gKX19fSksbDtmdW5jdGlvbiBtKGgsTyxEKXtpZihPIT09dm9pZCAwJiYhbl8oaCxPKSl0aHJvdyBhKEQpfWZ1bmN0aW9uIGEoaCl7cmV0dXJuIG5ldyBFcnJvcihgcmVmZXJlbmNlICIke2h9IiByZXNvbHZlcyB0byBtb3JlIHRoYW4gb25lIHNjaGVtYWApfX1EZS5nZXRTY2hlbWFSZWZzPV9fLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksemUuZ2V0RGF0YT16ZS5LZXl3b3JkQ3h0PXplLnZhbGlkYXRlRnVuY3Rpb25Db2RlPXZvaWQgMDtjb25zdCBmcz1ycixScz10byxZbz1jbixhbz10byxsXz1zbyxncj1xZSxKbz1ObixrPV9lLFY9TWUsY189RGUsZG49QWUsSXI9VHI7ZnVuY3Rpb24gZF8oZSl7aWYoZ3MoZSkmJihJcyhlKSxOcyhlKSkpe3BfKGUpO3JldHVybn1PcyhlLCgpPT4oMCxmcy50b3BCb29sT3JFbXB0eVNjaGVtYSkoZSkpfXplLnZhbGlkYXRlRnVuY3Rpb25Db2RlPWRfO2Z1bmN0aW9uIE9zKHtnZW46ZSx2YWxpZGF0ZU5hbWU6bixzY2hlbWE6cixzY2hlbWFFbnY6byxvcHRzOnR9LHMpe3QuY29kZS5lczU/ZS5mdW5jKG4sKDAsay5fKWAke1YuZGVmYXVsdC5kYXRhfSwgJHtWLmRlZmF1bHQudmFsQ3h0fWAsby4kYXN5bmMsKCk9PntlLmNvZGUoKDAsay5fKWAidXNlIHN0cmljdCI7ICR7VHMocix0KX1gKSxtXyhlLHQpLGUuY29kZShzKX0pOmUuZnVuYyhuLCgwLGsuXylgJHtWLmRlZmF1bHQuZGF0YX0sICR7aF8odCl9YCxvLiRhc3luYywoKT0+ZS5jb2RlKFRzKHIsdCkpLmNvZGUocykpfWZ1bmN0aW9uIGhfKGUpe3JldHVybigwLGsuXylgeyR7Vi5kZWZhdWx0Lmluc3RhbmNlUGF0aH09IiIsICR7Vi5kZWZhdWx0LnBhcmVudERhdGF9LCAke1YuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHl9LCAke1YuZGVmYXVsdC5yb290RGF0YX09JHtWLmRlZmF1bHQuZGF0YX0ke2UuZHluYW1pY1JlZj8oMCxrLl8pYCwgJHtWLmRlZmF1bHQuZHluYW1pY0FuY2hvcnN9PXt9YDprLm5pbH19PXt9YH1mdW5jdGlvbiBtXyhlLG4pe2UuaWYoVi5kZWZhdWx0LnZhbEN4dCwoKT0+e2UudmFyKFYuZGVmYXVsdC5pbnN0YW5jZVBhdGgsKDAsay5fKWAke1YuZGVmYXVsdC52YWxDeHR9LiR7Vi5kZWZhdWx0Lmluc3RhbmNlUGF0aH1gKSxlLnZhcihWLmRlZmF1bHQucGFyZW50RGF0YSwoMCxrLl8pYCR7Vi5kZWZhdWx0LnZhbEN4dH0uJHtWLmRlZmF1bHQucGFyZW50RGF0YX1gKSxlLnZhcihWLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LCgwLGsuXylgJHtWLmRlZmF1bHQudmFsQ3h0fS4ke1YuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHl9YCksZS52YXIoVi5kZWZhdWx0LnJvb3REYXRhLCgwLGsuXylgJHtWLmRlZmF1bHQudmFsQ3h0fS4ke1YuZGVmYXVsdC5yb290RGF0YX1gKSxuLmR5bmFtaWNSZWYmJmUudmFyKFYuZGVmYXVsdC5keW5hbWljQW5jaG9ycywoMCxrLl8pYCR7Vi5kZWZhdWx0LnZhbEN4dH0uJHtWLmRlZmF1bHQuZHluYW1pY0FuY2hvcnN9YCl9LCgpPT57ZS52YXIoVi5kZWZhdWx0Lmluc3RhbmNlUGF0aCwoMCxrLl8pYCIiYCksZS52YXIoVi5kZWZhdWx0LnBhcmVudERhdGEsKDAsay5fKWB1bmRlZmluZWRgKSxlLnZhcihWLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LCgwLGsuXylgdW5kZWZpbmVkYCksZS52YXIoVi5kZWZhdWx0LnJvb3REYXRhLFYuZGVmYXVsdC5kYXRhKSxuLmR5bmFtaWNSZWYmJmUudmFyKFYuZGVmYXVsdC5keW5hbWljQW5jaG9ycywoMCxrLl8pYHt9YCl9KX1mdW5jdGlvbiBwXyhlKXtjb25zdHtzY2hlbWE6bixvcHRzOnIsZ2VuOm99PWU7T3MoZSwoKT0+e3IuJGNvbW1lbnQmJm4uJGNvbW1lbnQmJkFzKGUpLFRfKGUpLG8ubGV0KFYuZGVmYXVsdC52RXJyb3JzLG51bGwpLG8ubGV0KFYuZGVmYXVsdC5lcnJvcnMsMCksci51bmV2YWx1YXRlZCYmRV8oZSksYnMoZSksSV8oZSl9KX1mdW5jdGlvbiBFXyhlKXtjb25zdHtnZW46bix2YWxpZGF0ZU5hbWU6cn09ZTtlLmV2YWx1YXRlZD1uLmNvbnN0KCJldmFsdWF0ZWQiLCgwLGsuXylgJHtyfS5ldmFsdWF0ZWRgKSxuLmlmKCgwLGsuXylgJHtlLmV2YWx1YXRlZH0uZHluYW1pY1Byb3BzYCwoKT0+bi5hc3NpZ24oKDAsay5fKWAke2UuZXZhbHVhdGVkfS5wcm9wc2AsKDAsay5fKWB1bmRlZmluZWRgKSksbi5pZigoMCxrLl8pYCR7ZS5ldmFsdWF0ZWR9LmR5bmFtaWNJdGVtc2AsKCk9Pm4uYXNzaWduKCgwLGsuXylgJHtlLmV2YWx1YXRlZH0uaXRlbXNgLCgwLGsuXylgdW5kZWZpbmVkYCkpfWZ1bmN0aW9uIFRzKGUsbil7Y29uc3Qgcj10eXBlb2YgZT09Im9iamVjdCImJmVbbi5zY2hlbWFJZF07cmV0dXJuIHImJihuLmNvZGUuc291cmNlfHxuLmNvZGUucHJvY2Vzcyk/KDAsay5fKWAvKiMgc291cmNlVVJMPSR7cn0gKi9gOmsubmlsfWZ1bmN0aW9uIGZfKGUsbil7aWYoZ3MoZSkmJihJcyhlKSxOcyhlKSkpe1JfKGUsbik7cmV0dXJufSgwLGZzLmJvb2xPckVtcHR5U2NoZW1hKShlLG4pfWZ1bmN0aW9uIE5zKHtzY2hlbWE6ZSxzZWxmOm59KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiFlO2Zvcihjb25zdCByIGluIGUpaWYobi5SVUxFUy5hbGxbcl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZ3MoZSl7cmV0dXJuIHR5cGVvZiBlLnNjaGVtYSE9ImJvb2xlYW4ifWZ1bmN0aW9uIFJfKGUsbil7Y29uc3R7c2NoZW1hOnIsZ2VuOm8sb3B0czp0fT1lO3QuJGNvbW1lbnQmJnIuJGNvbW1lbnQmJkFzKGUpLE5fKGUpLGdfKGUpO2NvbnN0IHM9by5jb25zdCgiX2VycnMiLFYuZGVmYXVsdC5lcnJvcnMpO2JzKGUscyksby52YXIobiwoMCxrLl8pYCR7c30gPT09ICR7Vi5kZWZhdWx0LmVycm9yc31gKX1mdW5jdGlvbiBJcyhlKXsoMCxkbi5jaGVja1Vua25vd25SdWxlcykoZSksT18oZSl9ZnVuY3Rpb24gYnMoZSxuKXtpZihlLm9wdHMuanRkKXJldHVybiBVcyhlLFtdLCExLG4pO2NvbnN0IHI9KDAsUnMuZ2V0U2NoZW1hVHlwZXMpKGUuc2NoZW1hKSxvPSgwLFJzLmNvZXJjZUFuZENoZWNrRGF0YVR5cGUpKGUscik7VXMoZSxyLCFvLG4pfWZ1bmN0aW9uIE9fKGUpe2NvbnN0e3NjaGVtYTpuLGVyclNjaGVtYVBhdGg6cixvcHRzOm8sc2VsZjp0fT1lO24uJHJlZiYmby5pZ25vcmVLZXl3b3Jkc1dpdGhSZWYmJigwLGRuLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShuLHQuUlVMRVMpJiZ0LmxvZ2dlci53YXJuKGAkcmVmOiBrZXl3b3JkcyBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoICIke3J9ImApfWZ1bmN0aW9uIFRfKGUpe2NvbnN0e3NjaGVtYTpuLG9wdHM6cn09ZTtuLmRlZmF1bHQhPT12b2lkIDAmJnIudXNlRGVmYXVsdHMmJnIuc3RyaWN0U2NoZW1hJiYoMCxkbi5jaGVja1N0cmljdE1vZGUpKGUsImRlZmF1bHQgaXMgaWdub3JlZCBpbiB0aGUgc2NoZW1hIHJvb3QiKX1mdW5jdGlvbiBOXyhlKXtjb25zdCBuPWUuc2NoZW1hW2Uub3B0cy5zY2hlbWFJZF07biYmKGUuYmFzZUlkPSgwLGNfLnJlc29sdmVVcmwpKGUub3B0cy51cmlSZXNvbHZlcixlLmJhc2VJZCxuKSl9ZnVuY3Rpb24gZ18oZSl7aWYoZS5zY2hlbWEuJGFzeW5jJiYhZS5zY2hlbWFFbnYuJGFzeW5jKXRocm93IG5ldyBFcnJvcigiYXN5bmMgc2NoZW1hIGluIHN5bmMgc2NoZW1hIil9ZnVuY3Rpb24gQXMoe2dlbjplLHNjaGVtYUVudjpuLHNjaGVtYTpyLGVyclNjaGVtYVBhdGg6byxvcHRzOnR9KXtjb25zdCBzPXIuJGNvbW1lbnQ7aWYodC4kY29tbWVudD09PSEwKWUuY29kZSgoMCxrLl8pYCR7Vi5kZWZhdWx0LnNlbGZ9LmxvZ2dlci5sb2coJHtzfSlgKTtlbHNlIGlmKHR5cGVvZiB0LiRjb21tZW50PT0iZnVuY3Rpb24iKXtjb25zdCBpPSgwLGsuc3RyKWAke299LyRjb21tZW50YCxsPWUuc2NvcGVWYWx1ZSgicm9vdCIse3JlZjpuLnJvb3R9KTtlLmNvZGUoKDAsay5fKWAke1YuZGVmYXVsdC5zZWxmfS5vcHRzLiRjb21tZW50KCR7c30sICR7aX0sICR7bH0uc2NoZW1hKWApfX1mdW5jdGlvbiBJXyhlKXtjb25zdHtnZW46bixzY2hlbWFFbnY6cix2YWxpZGF0ZU5hbWU6byxWYWxpZGF0aW9uRXJyb3I6dCxvcHRzOnN9PWU7ci4kYXN5bmM/bi5pZigoMCxrLl8pYCR7Vi5kZWZhdWx0LmVycm9yc30gPT09IDBgLCgpPT5uLnJldHVybihWLmRlZmF1bHQuZGF0YSksKCk9Pm4udGhyb3coKDAsay5fKWBuZXcgJHt0fSgke1YuZGVmYXVsdC52RXJyb3JzfSlgKSk6KG4uYXNzaWduKCgwLGsuXylgJHtvfS5lcnJvcnNgLFYuZGVmYXVsdC52RXJyb3JzKSxzLnVuZXZhbHVhdGVkJiZiXyhlKSxuLnJldHVybigoMCxrLl8pYCR7Vi5kZWZhdWx0LmVycm9yc30gPT09IDBgKSl9ZnVuY3Rpb24gYl8oe2dlbjplLGV2YWx1YXRlZDpuLHByb3BzOnIsaXRlbXM6b30pe3IgaW5zdGFuY2VvZiBrLk5hbWUmJmUuYXNzaWduKCgwLGsuXylgJHtufS5wcm9wc2AsciksbyBpbnN0YW5jZW9mIGsuTmFtZSYmZS5hc3NpZ24oKDAsay5fKWAke259Lml0ZW1zYCxvKX1mdW5jdGlvbiBVcyhlLG4scixvKXtjb25zdHtnZW46dCxzY2hlbWE6cyxkYXRhOmksYWxsRXJyb3JzOmwsb3B0czpjLHNlbGY6bX09ZSx7UlVMRVM6YX09bTtpZihzLiRyZWYmJihjLmlnbm9yZUtleXdvcmRzV2l0aFJlZnx8ISgwLGRuLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzLGEpKSl7dC5ibG9jaygoKT0+U3MoZSwiJHJlZiIsYS5hbGwuJHJlZi5kZWZpbml0aW9uKSk7cmV0dXJufWMuanRkfHxBXyhlLG4pLHQuYmxvY2soKCk9Pntmb3IoY29uc3QgTyBvZiBhLnJ1bGVzKWgoTyk7aChhLnBvc3QpfSk7ZnVuY3Rpb24gaChPKXshKDAsWW8uc2hvdWxkVXNlR3JvdXApKHMsTyl8fChPLnR5cGU/KHQuaWYoKDAsYW8uY2hlY2tEYXRhVHlwZSkoTy50eXBlLGksYy5zdHJpY3ROdW1iZXJzKSksSHMoZSxPKSxuLmxlbmd0aD09PTEmJm5bMF09PT1PLnR5cGUmJnImJih0LmVsc2UoKSwoMCxhby5yZXBvcnRUeXBlRXJyb3IpKGUpKSx0LmVuZElmKCkpOkhzKGUsTyksbHx8dC5pZigoMCxrLl8pYCR7Vi5kZWZhdWx0LmVycm9yc30gPT09ICR7b3x8MH1gKSl9fWZ1bmN0aW9uIEhzKGUsbil7Y29uc3R7Z2VuOnIsc2NoZW1hOm8sb3B0czp7dXNlRGVmYXVsdHM6dH19PWU7dCYmKDAsbF8uYXNzaWduRGVmYXVsdHMpKGUsbi50eXBlKSxyLmJsb2NrKCgpPT57Zm9yKGNvbnN0IHMgb2Ygbi5ydWxlcykoMCxZby5zaG91bGRVc2VSdWxlKShvLHMpJiZTcyhlLHMua2V5d29yZCxzLmRlZmluaXRpb24sbi50eXBlKX0pfWZ1bmN0aW9uIEFfKGUsbil7ZS5zY2hlbWFFbnYubWV0YXx8IWUub3B0cy5zdHJpY3RUeXBlc3x8KFVfKGUsbiksZS5vcHRzLmFsbG93VW5pb25UeXBlc3x8SF8oZSxuKSx2XyhlLGUuZGF0YVR5cGVzKSl9ZnVuY3Rpb24gVV8oZSxuKXtpZighIW4ubGVuZ3RoKXtpZighZS5kYXRhVHlwZXMubGVuZ3RoKXtlLmRhdGFUeXBlcz1uO3JldHVybn1uLmZvckVhY2gocj0+e3ZzKGUuZGF0YVR5cGVzLHIpfHx6byhlLGB0eXBlICIke3J9IiBub3QgYWxsb3dlZCBieSBjb250ZXh0ICIke2UuZGF0YVR5cGVzLmpvaW4oIiwiKX0iYCl9KSxlLmRhdGFUeXBlcz1lLmRhdGFUeXBlcy5maWx0ZXIocj0+dnMobixyKSl9fWZ1bmN0aW9uIEhfKGUsbil7bi5sZW5ndGg+MSYmIShuLmxlbmd0aD09PTImJm4uaW5jbHVkZXMoIm51bGwiKSkmJnpvKGUsInVzZSBhbGxvd1VuaW9uVHlwZXMgdG8gYWxsb3cgdW5pb24gdHlwZSBrZXl3b3JkIil9ZnVuY3Rpb24gdl8oZSxuKXtjb25zdCByPWUuc2VsZi5SVUxFUy5hbGw7Zm9yKGNvbnN0IG8gaW4gcil7Y29uc3QgdD1yW29dO2lmKHR5cGVvZiB0PT0ib2JqZWN0IiYmKDAsWW8uc2hvdWxkVXNlUnVsZSkoZS5zY2hlbWEsdCkpe2NvbnN0e3R5cGU6c309dC5kZWZpbml0aW9uO3MubGVuZ3RoJiYhcy5zb21lKGk9PkRfKG4saSkpJiZ6byhlLGBtaXNzaW5nIHR5cGUgIiR7cy5qb2luKCIsIil9IiBmb3Iga2V5d29yZCAiJHtvfSJgKX19fWZ1bmN0aW9uIERfKGUsbil7cmV0dXJuIGUuaW5jbHVkZXMobil8fG49PT0ibnVtYmVyIiYmZS5pbmNsdWRlcygiaW50ZWdlciIpfWZ1bmN0aW9uIHZzKGUsbil7cmV0dXJuIGUuaW5jbHVkZXMobil8fG49PT0iaW50ZWdlciImJmUuaW5jbHVkZXMoIm51bWJlciIpfWZ1bmN0aW9uIHpvKGUsbil7bis9YCBhdCAiJHtlLnNjaGVtYUVudi5iYXNlSWQrZS5lcnJTY2hlbWFQYXRofSIgKHN0cmljdFR5cGVzKWAsKDAsZG4uY2hlY2tTdHJpY3RNb2RlKShlLG4sZS5vcHRzLnN0cmljdFR5cGVzKX1jbGFzcyBEc3tjb25zdHJ1Y3RvcihuLHIsbyl7aWYoKDAsZ3IudmFsaWRhdGVLZXl3b3JkVXNhZ2UpKG4scixvKSx0aGlzLmdlbj1uLmdlbix0aGlzLmFsbEVycm9ycz1uLmFsbEVycm9ycyx0aGlzLmtleXdvcmQ9byx0aGlzLmRhdGE9bi5kYXRhLHRoaXMuc2NoZW1hPW4uc2NoZW1hW29dLHRoaXMuJGRhdGE9ci4kZGF0YSYmbi5vcHRzLiRkYXRhJiZ0aGlzLnNjaGVtYSYmdGhpcy5zY2hlbWEuJGRhdGEsdGhpcy5zY2hlbWFWYWx1ZT0oMCxkbi5zY2hlbWFSZWZPclZhbCkobix0aGlzLnNjaGVtYSxvLHRoaXMuJGRhdGEpLHRoaXMuc2NoZW1hVHlwZT1yLnNjaGVtYVR5cGUsdGhpcy5wYXJlbnRTY2hlbWE9bi5zY2hlbWEsdGhpcy5wYXJhbXM9e30sdGhpcy5pdD1uLHRoaXMuZGVmPXIsdGhpcy4kZGF0YSl0aGlzLnNjaGVtYUNvZGU9bi5nZW4uY29uc3QoInZTY2hlbWEiLFBzKHRoaXMuJGRhdGEsbikpO2Vsc2UgaWYodGhpcy5zY2hlbWFDb2RlPXRoaXMuc2NoZW1hVmFsdWUsISgwLGdyLnZhbGlkU2NoZW1hVHlwZSkodGhpcy5zY2hlbWEsci5zY2hlbWFUeXBlLHIuYWxsb3dVbmRlZmluZWQpKXRocm93IG5ldyBFcnJvcihgJHtvfSB2YWx1ZSBtdXN0IGJlICR7SlNPTi5zdHJpbmdpZnkoci5zY2hlbWFUeXBlKX1gKTsoImNvZGUiaW4gcj9yLnRyYWNrRXJyb3JzOnIuZXJyb3JzIT09ITEpJiYodGhpcy5lcnJzQ291bnQ9bi5nZW4uY29uc3QoIl9lcnJzIixWLmRlZmF1bHQuZXJyb3JzKSl9cmVzdWx0KG4scixvKXt0aGlzLmZhaWxSZXN1bHQoKDAsay5ub3QpKG4pLHIsbyl9ZmFpbFJlc3VsdChuLHIsbyl7dGhpcy5nZW4uaWYobiksbz9vKCk6dGhpcy5lcnJvcigpLHI/KHRoaXMuZ2VuLmVsc2UoKSxyKCksdGhpcy5hbGxFcnJvcnMmJnRoaXMuZ2VuLmVuZElmKCkpOnRoaXMuYWxsRXJyb3JzP3RoaXMuZ2VuLmVuZElmKCk6dGhpcy5nZW4uZWxzZSgpfXBhc3MobixyKXt0aGlzLmZhaWxSZXN1bHQoKDAsay5ub3QpKG4pLHZvaWQgMCxyKX1mYWlsKG4pe2lmKG49PT12b2lkIDApe3RoaXMuZXJyb3IoKSx0aGlzLmFsbEVycm9yc3x8dGhpcy5nZW4uaWYoITEpO3JldHVybn10aGlzLmdlbi5pZihuKSx0aGlzLmVycm9yKCksdGhpcy5hbGxFcnJvcnM/dGhpcy5nZW4uZW5kSWYoKTp0aGlzLmdlbi5lbHNlKCl9ZmFpbCRkYXRhKG4pe2lmKCF0aGlzLiRkYXRhKXJldHVybiB0aGlzLmZhaWwobik7Y29uc3R7c2NoZW1hQ29kZTpyfT10aGlzO3RoaXMuZmFpbCgoMCxrLl8pYCR7cn0gIT09IHVuZGVmaW5lZCAmJiAoJHsoMCxrLm9yKSh0aGlzLmludmFsaWQkZGF0YSgpLG4pfSlgKX1lcnJvcihuLHIsbyl7aWYocil7dGhpcy5zZXRQYXJhbXMociksdGhpcy5fZXJyb3IobixvKSx0aGlzLnNldFBhcmFtcyh7fSk7cmV0dXJufXRoaXMuX2Vycm9yKG4sbyl9X2Vycm9yKG4scil7KG4/SXIucmVwb3J0RXh0cmFFcnJvcjpJci5yZXBvcnRFcnJvcikodGhpcyx0aGlzLmRlZi5lcnJvcixyKX0kZGF0YUVycm9yKCl7KDAsSXIucmVwb3J0RXJyb3IpKHRoaXMsdGhpcy5kZWYuJGRhdGFFcnJvcnx8SXIua2V5d29yZCREYXRhRXJyb3IpfXJlc2V0KCl7aWYodGhpcy5lcnJzQ291bnQ9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCdhZGQgInRyYWNrRXJyb3JzIiB0byBrZXl3b3JkIGRlZmluaXRpb24nKTsoMCxJci5yZXNldEVycm9yc0NvdW50KSh0aGlzLmdlbix0aGlzLmVycnNDb3VudCl9b2sobil7dGhpcy5hbGxFcnJvcnN8fHRoaXMuZ2VuLmlmKG4pfXNldFBhcmFtcyhuLHIpe3I/T2JqZWN0LmFzc2lnbih0aGlzLnBhcmFtcyxuKTp0aGlzLnBhcmFtcz1ufWJsb2NrJGRhdGEobixyLG89ay5uaWwpe3RoaXMuZ2VuLmJsb2NrKCgpPT57dGhpcy5jaGVjayRkYXRhKG4sbykscigpfSl9Y2hlY2skZGF0YShuPWsubmlsLHI9ay5uaWwpe2lmKCF0aGlzLiRkYXRhKXJldHVybjtjb25zdHtnZW46byxzY2hlbWFDb2RlOnQsc2NoZW1hVHlwZTpzLGRlZjppfT10aGlzO28uaWYoKDAsay5vcikoKDAsay5fKWAke3R9ID09PSB1bmRlZmluZWRgLHIpKSxuIT09ay5uaWwmJm8uYXNzaWduKG4sITApLChzLmxlbmd0aHx8aS52YWxpZGF0ZVNjaGVtYSkmJihvLmVsc2VJZih0aGlzLmludmFsaWQkZGF0YSgpKSx0aGlzLiRkYXRhRXJyb3IoKSxuIT09ay5uaWwmJm8uYXNzaWduKG4sITEpKSxvLmVsc2UoKX1pbnZhbGlkJGRhdGEoKXtjb25zdHtnZW46bixzY2hlbWFDb2RlOnIsc2NoZW1hVHlwZTpvLGRlZjp0LGl0OnN9PXRoaXM7cmV0dXJuKDAsay5vcikoaSgpLGwoKSk7ZnVuY3Rpb24gaSgpe2lmKG8ubGVuZ3RoKXtpZighKHIgaW5zdGFuY2VvZiBrLk5hbWUpKXRocm93IG5ldyBFcnJvcigiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yIik7Y29uc3QgYz1BcnJheS5pc0FycmF5KG8pP286W29dO3JldHVybigwLGsuXylgJHsoMCxhby5jaGVja0RhdGFUeXBlcykoYyxyLHMub3B0cy5zdHJpY3ROdW1iZXJzLGFvLkRhdGFUeXBlLldyb25nKX1gfXJldHVybiBrLm5pbH1mdW5jdGlvbiBsKCl7aWYodC52YWxpZGF0ZVNjaGVtYSl7Y29uc3QgYz1uLnNjb3BlVmFsdWUoInZhbGlkYXRlJGRhdGEiLHtyZWY6dC52YWxpZGF0ZVNjaGVtYX0pO3JldHVybigwLGsuXylgISR7Y30oJHtyfSlgfXJldHVybiBrLm5pbH19c3Vic2NoZW1hKG4scil7Y29uc3Qgbz0oMCxKby5nZXRTdWJzY2hlbWEpKHRoaXMuaXQsbik7KDAsSm8uZXh0ZW5kU3Vic2NoZW1hRGF0YSkobyx0aGlzLml0LG4pLCgwLEpvLmV4dGVuZFN1YnNjaGVtYU1vZGUpKG8sbik7Y29uc3QgdD1sZShZKFkoe30sdGhpcy5pdCksbykse2l0ZW1zOnZvaWQgMCxwcm9wczp2b2lkIDB9KTtyZXR1cm4gZl8odCxyKSx0fW1lcmdlRXZhbHVhdGVkKG4scil7Y29uc3R7aXQ6byxnZW46dH09dGhpczshby5vcHRzLnVuZXZhbHVhdGVkfHwoby5wcm9wcyE9PSEwJiZuLnByb3BzIT09dm9pZCAwJiYoby5wcm9wcz1kbi5tZXJnZUV2YWx1YXRlZC5wcm9wcyh0LG4ucHJvcHMsby5wcm9wcyxyKSksby5pdGVtcyE9PSEwJiZuLml0ZW1zIT09dm9pZCAwJiYoby5pdGVtcz1kbi5tZXJnZUV2YWx1YXRlZC5pdGVtcyh0LG4uaXRlbXMsby5pdGVtcyxyKSkpfW1lcmdlVmFsaWRFdmFsdWF0ZWQobixyKXtjb25zdHtpdDpvLGdlbjp0fT10aGlzO2lmKG8ub3B0cy51bmV2YWx1YXRlZCYmKG8ucHJvcHMhPT0hMHx8by5pdGVtcyE9PSEwKSlyZXR1cm4gdC5pZihyLCgpPT50aGlzLm1lcmdlRXZhbHVhdGVkKG4say5OYW1lKSksITB9fXplLktleXdvcmRDeHQ9RHM7ZnVuY3Rpb24gU3MoZSxuLHIsbyl7Y29uc3QgdD1uZXcgRHMoZSxyLG4pOyJjb2RlImluIHI/ci5jb2RlKHQsbyk6dC4kZGF0YSYmci52YWxpZGF0ZT8oMCxnci5mdW5jS2V5d29yZENvZGUpKHQscik6Im1hY3JvImluIHI/KDAsZ3IubWFjcm9LZXl3b3JkQ29kZSkodCxyKTooci5jb21waWxlfHxyLnZhbGlkYXRlKSYmKDAsZ3IuZnVuY0tleXdvcmRDb2RlKSh0LHIpfWNvbnN0IFNfPS9eXC8oPzpbXn5dfH4wfH4xKSokLyxQXz0vXihbMC05XSspKCN8XC8oPzpbXn5dfH4wfH4xKSopPyQvO2Z1bmN0aW9uIFBzKGUse2RhdGFMZXZlbDpuLGRhdGFOYW1lczpyLGRhdGFQYXRoQXJyOm99KXtsZXQgdCxzO2lmKGU9PT0iIilyZXR1cm4gVi5kZWZhdWx0LnJvb3REYXRhO2lmKGVbMF09PT0iLyIpe2lmKCFTXy50ZXN0KGUpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBKU09OLXBvaW50ZXI6ICR7ZX1gKTt0PWUscz1WLmRlZmF1bHQucm9vdERhdGF9ZWxzZXtjb25zdCBtPVBfLmV4ZWMoZSk7aWYoIW0pdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04tcG9pbnRlcjogJHtlfWApO2NvbnN0IGE9K21bMV07aWYodD1tWzJdLHQ9PT0iIyIpe2lmKGE+PW4pdGhyb3cgbmV3IEVycm9yKGMoInByb3BlcnR5L2luZGV4IixhKSk7cmV0dXJuIG9bbi1hXX1pZihhPm4pdGhyb3cgbmV3IEVycm9yKGMoImRhdGEiLGEpKTtpZihzPXJbbi1hXSwhdClyZXR1cm4gc31sZXQgaT1zO2NvbnN0IGw9dC5zcGxpdCgiLyIpO2Zvcihjb25zdCBtIG9mIGwpbSYmKHM9KDAsay5fKWAke3N9JHsoMCxrLmdldFByb3BlcnR5KSgoMCxkbi51bmVzY2FwZUpzb25Qb2ludGVyKShtKSl9YCxpPSgwLGsuXylgJHtpfSAmJiAke3N9YCk7cmV0dXJuIGk7ZnVuY3Rpb24gYyhtLGEpe3JldHVybmBDYW5ub3QgYWNjZXNzICR7bX0gJHthfSBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJHtufWB9fXplLmdldERhdGE9UHM7dmFyIHVvPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y2xhc3Mgd18gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihuKXtzdXBlcigidmFsaWRhdGlvbiBmYWlsZWQiKSx0aGlzLmVycm9ycz1uLHRoaXMuYWp2PXRoaXMudmFsaWRhdGlvbj0hMH19dW8uZGVmYXVsdD13Xzt2YXIgTG49e307T2JqZWN0LmRlZmluZVByb3BlcnR5KExuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBxbz1EZTtjbGFzcyBHXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKG4scixvLHQpe3N1cGVyKHR8fGBjYW4ndCByZXNvbHZlIHJlZmVyZW5jZSAke299IGZyb20gaWQgJHtyfWApLHRoaXMubWlzc2luZ1JlZj0oMCxxby5yZXNvbHZlVXJsKShuLHIsbyksdGhpcy5taXNzaW5nU2NoZW1hPSgwLHFvLm5vcm1hbGl6ZUlkKSgoMCxxby5nZXRGdWxsUGF0aCkobix0aGlzLm1pc3NpbmdSZWYpKX19TG4uZGVmYXVsdD1HXzt2YXIgUGU9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KFBlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxQZS5yZXNvbHZlU2NoZW1hPVBlLmdldENvbXBpbGluZ1NjaGVtYT1QZS5yZXNvbHZlUmVmPVBlLmNvbXBpbGVTY2hlbWE9UGUuU2NoZW1hRW52PXZvaWQgMDtjb25zdCBZZT1fZSxDXz11byxCbj1NZSxKZT1EZSx3cz1BZSx5Xz16ZTtjbGFzcyBfb3tjb25zdHJ1Y3RvcihuKXt2YXIgcjt0aGlzLnJlZnM9e30sdGhpcy5keW5hbWljQW5jaG9ycz17fTtsZXQgbzt0eXBlb2Ygbi5zY2hlbWE9PSJvYmplY3QiJiYobz1uLnNjaGVtYSksdGhpcy5zY2hlbWE9bi5zY2hlbWEsdGhpcy5zY2hlbWFJZD1uLnNjaGVtYUlkLHRoaXMucm9vdD1uLnJvb3R8fHRoaXMsdGhpcy5iYXNlSWQ9KHI9bi5iYXNlSWQpIT09bnVsbCYmciE9PXZvaWQgMD9yOigwLEplLm5vcm1hbGl6ZUlkKShvPT1udWxsP3ZvaWQgMDpvW24uc2NoZW1hSWR8fCIkaWQiXSksdGhpcy5zY2hlbWFQYXRoPW4uc2NoZW1hUGF0aCx0aGlzLmxvY2FsUmVmcz1uLmxvY2FsUmVmcyx0aGlzLm1ldGE9bi5tZXRhLHRoaXMuJGFzeW5jPW89PW51bGw/dm9pZCAwOm8uJGFzeW5jLHRoaXMucmVmcz17fX19UGUuU2NoZW1hRW52PV9vO2Z1bmN0aW9uIFFvKGUpe2NvbnN0IG49R3MuY2FsbCh0aGlzLGUpO2lmKG4pcmV0dXJuIG47Y29uc3Qgcj0oMCxKZS5nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLGUucm9vdC5iYXNlSWQpLHtlczU6byxsaW5lczp0fT10aGlzLm9wdHMuY29kZSx7b3duUHJvcGVydGllczpzfT10aGlzLm9wdHMsaT1uZXcgWWUuQ29kZUdlbih0aGlzLnNjb3BlLHtlczU6byxsaW5lczp0LG93blByb3BlcnRpZXM6c30pO2xldCBsO2UuJGFzeW5jJiYobD1pLnNjb3BlVmFsdWUoIkVycm9yIix7cmVmOkNfLmRlZmF1bHQsY29kZTooMCxZZS5fKWByZXF1aXJlKCJhanYvZGlzdC9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3IiKS5kZWZhdWx0YH0pKTtjb25zdCBjPWkuc2NvcGVOYW1lKCJ2YWxpZGF0ZSIpO2UudmFsaWRhdGVOYW1lPWM7Y29uc3QgbT17Z2VuOmksYWxsRXJyb3JzOnRoaXMub3B0cy5hbGxFcnJvcnMsZGF0YTpCbi5kZWZhdWx0LmRhdGEscGFyZW50RGF0YTpCbi5kZWZhdWx0LnBhcmVudERhdGEscGFyZW50RGF0YVByb3BlcnR5OkJuLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LGRhdGFOYW1lczpbQm4uZGVmYXVsdC5kYXRhXSxkYXRhUGF0aEFycjpbWWUubmlsXSxkYXRhTGV2ZWw6MCxkYXRhVHlwZXM6W10sZGVmaW5lZFByb3BlcnRpZXM6bmV3IFNldCx0b3BTY2hlbWFSZWY6aS5zY29wZVZhbHVlKCJzY2hlbWEiLHRoaXMub3B0cy5jb2RlLnNvdXJjZT09PSEwP3tyZWY6ZS5zY2hlbWEsY29kZTooMCxZZS5zdHJpbmdpZnkpKGUuc2NoZW1hKX06e3JlZjplLnNjaGVtYX0pLHZhbGlkYXRlTmFtZTpjLFZhbGlkYXRpb25FcnJvcjpsLHNjaGVtYTplLnNjaGVtYSxzY2hlbWFFbnY6ZSxyb290SWQ6cixiYXNlSWQ6ZS5iYXNlSWR8fHIsc2NoZW1hUGF0aDpZZS5uaWwsZXJyU2NoZW1hUGF0aDplLnNjaGVtYVBhdGh8fCh0aGlzLm9wdHMuanRkPyIiOiIjIiksZXJyb3JQYXRoOigwLFllLl8pYCIiYCxvcHRzOnRoaXMub3B0cyxzZWxmOnRoaXN9O2xldCBhO3RyeXt0aGlzLl9jb21waWxhdGlvbnMuYWRkKGUpLCgwLHlfLnZhbGlkYXRlRnVuY3Rpb25Db2RlKShtKSxpLm9wdGltaXplKHRoaXMub3B0cy5jb2RlLm9wdGltaXplKTtjb25zdCBoPWkudG9TdHJpbmcoKTthPWAke2kuc2NvcGVSZWZzKEJuLmRlZmF1bHQuc2NvcGUpfXJldHVybiAke2h9YCx0aGlzLm9wdHMuY29kZS5wcm9jZXNzJiYoYT10aGlzLm9wdHMuY29kZS5wcm9jZXNzKGEsZSkpO2NvbnN0IEQ9bmV3IEZ1bmN0aW9uKGAke0JuLmRlZmF1bHQuc2VsZn1gLGAke0JuLmRlZmF1bHQuc2NvcGV9YCxhKSh0aGlzLHRoaXMuc2NvcGUuZ2V0KCkpO2lmKHRoaXMuc2NvcGUudmFsdWUoYyx7cmVmOkR9KSxELmVycm9ycz1udWxsLEQuc2NoZW1hPWUuc2NoZW1hLEQuc2NoZW1hRW52PWUsZS4kYXN5bmMmJihELiRhc3luYz0hMCksdGhpcy5vcHRzLmNvZGUuc291cmNlPT09ITAmJihELnNvdXJjZT17dmFsaWRhdGVOYW1lOmMsdmFsaWRhdGVDb2RlOmgsc2NvcGVWYWx1ZXM6aS5fdmFsdWVzfSksdGhpcy5vcHRzLnVuZXZhbHVhdGVkKXtjb25zdHtwcm9wczp3LGl0ZW1zOkN9PW07RC5ldmFsdWF0ZWQ9e3Byb3BzOncgaW5zdGFuY2VvZiBZZS5OYW1lP3ZvaWQgMDp3LGl0ZW1zOkMgaW5zdGFuY2VvZiBZZS5OYW1lP3ZvaWQgMDpDLGR5bmFtaWNQcm9wczp3IGluc3RhbmNlb2YgWWUuTmFtZSxkeW5hbWljSXRlbXM6QyBpbnN0YW5jZW9mIFllLk5hbWV9LEQuc291cmNlJiYoRC5zb3VyY2UuZXZhbHVhdGVkPSgwLFllLnN0cmluZ2lmeSkoRC5ldmFsdWF0ZWQpKX1yZXR1cm4gZS52YWxpZGF0ZT1ELGV9Y2F0Y2goaCl7dGhyb3cgZGVsZXRlIGUudmFsaWRhdGUsZGVsZXRlIGUudmFsaWRhdGVOYW1lLGEmJnRoaXMubG9nZ2VyLmVycm9yKCJFcnJvciBjb21waWxpbmcgc2NoZW1hLCBmdW5jdGlvbiBjb2RlOiIsYSksaH1maW5hbGx5e3RoaXMuX2NvbXBpbGF0aW9ucy5kZWxldGUoZSl9fVBlLmNvbXBpbGVTY2hlbWE9UW87ZnVuY3Rpb24gTF8oZSxuLHIpe3ZhciBvO3I9KDAsSmUucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLG4scik7Y29uc3QgdD1lLnJlZnNbcl07aWYodClyZXR1cm4gdDtsZXQgcz1NXy5jYWxsKHRoaXMsZSxyKTtpZihzPT09dm9pZCAwKXtjb25zdCBpPShvPWUubG9jYWxSZWZzKT09PW51bGx8fG89PT12b2lkIDA/dm9pZCAwOm9bcl0se3NjaGVtYUlkOmx9PXRoaXMub3B0cztpJiYocz1uZXcgX28oe3NjaGVtYTppLHNjaGVtYUlkOmwscm9vdDplLGJhc2VJZDpufSkpfWlmKHMhPT12b2lkIDApcmV0dXJuIGUucmVmc1tyXT1CXy5jYWxsKHRoaXMscyl9UGUucmVzb2x2ZVJlZj1MXztmdW5jdGlvbiBCXyhlKXtyZXR1cm4oMCxKZS5pbmxpbmVSZWYpKGUuc2NoZW1hLHRoaXMub3B0cy5pbmxpbmVSZWZzKT9lLnNjaGVtYTplLnZhbGlkYXRlP2U6UW8uY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIEdzKGUpe2Zvcihjb25zdCBuIG9mIHRoaXMuX2NvbXBpbGF0aW9ucylpZihrXyhuLGUpKXJldHVybiBufVBlLmdldENvbXBpbGluZ1NjaGVtYT1HcztmdW5jdGlvbiBrXyhlLG4pe3JldHVybiBlLnNjaGVtYT09PW4uc2NoZW1hJiZlLnJvb3Q9PT1uLnJvb3QmJmUuYmFzZUlkPT09bi5iYXNlSWR9ZnVuY3Rpb24gTV8oZSxuKXtsZXQgcjtmb3IoO3R5cGVvZihyPXRoaXMucmVmc1tuXSk9PSJzdHJpbmciOyluPXI7cmV0dXJuIHJ8fHRoaXMuc2NoZW1hc1tuXXx8bG8uY2FsbCh0aGlzLGUsbil9ZnVuY3Rpb24gbG8oZSxuKXtjb25zdCByPXRoaXMub3B0cy51cmlSZXNvbHZlci5wYXJzZShuKSxvPSgwLEplLl9nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLHIpO2xldCB0PSgwLEplLmdldEZ1bGxQYXRoKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsZS5iYXNlSWQsdm9pZCAwKTtpZihPYmplY3Qua2V5cyhlLnNjaGVtYSkubGVuZ3RoPjAmJm89PT10KXJldHVybiBaby5jYWxsKHRoaXMscixlKTtjb25zdCBzPSgwLEplLm5vcm1hbGl6ZUlkKShvKSxpPXRoaXMucmVmc1tzXXx8dGhpcy5zY2hlbWFzW3NdO2lmKHR5cGVvZiBpPT0ic3RyaW5nIil7Y29uc3QgbD1sby5jYWxsKHRoaXMsZSxpKTtyZXR1cm4gdHlwZW9mKGw9PW51bGw/dm9pZCAwOmwuc2NoZW1hKSE9Im9iamVjdCI/dm9pZCAwOlpvLmNhbGwodGhpcyxyLGwpfWlmKHR5cGVvZihpPT1udWxsP3ZvaWQgMDppLnNjaGVtYSk9PSJvYmplY3QiKXtpZihpLnZhbGlkYXRlfHxRby5jYWxsKHRoaXMsaSkscz09PSgwLEplLm5vcm1hbGl6ZUlkKShuKSl7Y29uc3R7c2NoZW1hOmx9PWkse3NjaGVtYUlkOmN9PXRoaXMub3B0cyxtPWxbY107cmV0dXJuIG0mJih0PSgwLEplLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlcix0LG0pKSxuZXcgX28oe3NjaGVtYTpsLHNjaGVtYUlkOmMscm9vdDplLGJhc2VJZDp0fSl9cmV0dXJuIFpvLmNhbGwodGhpcyxyLGkpfX1QZS5yZXNvbHZlU2NoZW1hPWxvO2NvbnN0IFhfPW5ldyBTZXQoWyJwcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJlbnVtIiwiZGVwZW5kZW5jaWVzIiwiZGVmaW5pdGlvbnMiXSk7ZnVuY3Rpb24gWm8oZSx7YmFzZUlkOm4sc2NoZW1hOnIscm9vdDpvfSl7dmFyIHQ7aWYoKCh0PWUuZnJhZ21lbnQpPT09bnVsbHx8dD09PXZvaWQgMD92b2lkIDA6dFswXSkhPT0iLyIpcmV0dXJuO2Zvcihjb25zdCBsIG9mIGUuZnJhZ21lbnQuc2xpY2UoMSkuc3BsaXQoIi8iKSl7aWYodHlwZW9mIHI9PSJib29sZWFuIilyZXR1cm47Y29uc3QgYz1yWygwLHdzLnVuZXNjYXBlRnJhZ21lbnQpKGwpXTtpZihjPT09dm9pZCAwKXJldHVybjtyPWM7Y29uc3QgbT10eXBlb2Ygcj09Im9iamVjdCImJnJbdGhpcy5vcHRzLnNjaGVtYUlkXTshWF8uaGFzKGwpJiZtJiYobj0oMCxKZS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsbixtKSl9bGV0IHM7aWYodHlwZW9mIHIhPSJib29sZWFuIiYmci4kcmVmJiYhKDAsd3Muc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHIsdGhpcy5SVUxFUykpe2NvbnN0IGw9KDAsSmUucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLG4sci4kcmVmKTtzPWxvLmNhbGwodGhpcyxvLGwpfWNvbnN0e3NjaGVtYUlkOml9PXRoaXMub3B0cztpZihzPXN8fG5ldyBfbyh7c2NoZW1hOnIsc2NoZW1hSWQ6aSxyb290Om8sYmFzZUlkOm59KSxzLnNjaGVtYSE9PXMucm9vdC5zY2hlbWEpcmV0dXJuIHN9dmFyICRfPXskaWQ6Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hanYtdmFsaWRhdG9yL2Fqdi9tYXN0ZXIvbGliL3JlZnMvZGF0YS5qc29uIyIsZGVzY3JpcHRpb246Ik1ldGEtc2NoZW1hIGZvciAkZGF0YSByZWZlcmVuY2UgKEpTT04gQW55U2NoZW1hIGV4dGVuc2lvbiBwcm9wb3NhbCkiLHR5cGU6Im9iamVjdCIscmVxdWlyZWQ6WyIkZGF0YSJdLHByb3BlcnRpZXM6eyRkYXRhOnt0eXBlOiJzdHJpbmciLGFueU9mOlt7Zm9ybWF0OiJyZWxhdGl2ZS1qc29uLXBvaW50ZXIifSx7Zm9ybWF0OiJqc29uLXBvaW50ZXIifV19fSxhZGRpdGlvbmFsUHJvcGVydGllczohMX0sZXQ9e30sbnQ9e2V4cG9ydHM6e319Oy8qKiBAbGljZW5zZSBVUkkuanMgdjQuNC4xIChjKSAyMDExIEdhcnkgQ291cnQuIExpY2Vuc2U6IGh0dHA6Ly9naXRodWIuY29tL2dhcnljb3VydC91cmktanMgKi8oZnVuY3Rpb24oZSxuKXsoZnVuY3Rpb24ocixvKXtvKG4pfSkoZWUsZnVuY3Rpb24ocil7ZnVuY3Rpb24gbygpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLF89QXJyYXkoZCksRT0wO0U8ZDtFKyspX1tFXT1hcmd1bWVudHNbRV07aWYoXy5sZW5ndGg+MSl7X1swXT1fWzBdLnNsaWNlKDAsLTEpO2Zvcih2YXIgYj1fLmxlbmd0aC0xLEk9MTtJPGI7KytJKV9bSV09X1tJXS5zbGljZSgxLC0xKTtyZXR1cm4gX1tiXT1fW2JdLnNsaWNlKDEpLF8uam9pbigiIil9ZWxzZSByZXR1cm4gX1swXX1mdW5jdGlvbiB0KGQpe3JldHVybiIoPzoiK2QrIikifWZ1bmN0aW9uIHMoZCl7cmV0dXJuIGQ9PT12b2lkIDA/InVuZGVmaW5lZCI6ZD09PW51bGw/Im51bGwiOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkKS5zcGxpdCgiICIpLnBvcCgpLnNwbGl0KCJdIikuc2hpZnQoKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGkoZCl7cmV0dXJuIGQudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBsKGQpe3JldHVybiBkIT1udWxsP2QgaW5zdGFuY2VvZiBBcnJheT9kOnR5cGVvZiBkLmxlbmd0aCE9Im51bWJlciJ8fGQuc3BsaXR8fGQuc2V0SW50ZXJ2YWx8fGQuY2FsbD9bZF06QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZCk6W119ZnVuY3Rpb24gYyhkLF8pe3ZhciBFPWQ7aWYoXylmb3IodmFyIGIgaW4gXylFW2JdPV9bYl07cmV0dXJuIEV9ZnVuY3Rpb24gbShkKXt2YXIgXz0iW0EtWmEtel0iLEU9IlswLTldIixiPW8oRSwiW0EtRmEtZl0iKSxJPXQodCgiJVtFRmVmXSIrYisiJSIrYitiKyIlIitiK2IpKyJ8Iit0KCIlWzg5QS1GYS1mXSIrYisiJSIrYitiKSsifCIrdCgiJSIrYitiKSksJD0iW1xcOlxcL1xcP1xcI1xcW1xcXVxcQF0iLHg9IltcXCFcXCRcXCZcXCdcXChcXClcXCpcXCtcXCxcXDtcXD1dIix0ZT1vKCQseCkscGU9ZD8iW1xceEEwLVxcdTIwMERcXHUyMDEwLVxcdTIwMjlcXHUyMDJGLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdIjoiW10iLE5lPWQ/IltcXHVFMDAwLVxcdUY4RkZdIjoiW10iLFo9byhfLEUsIltcXC1cXC5cXF9cXH5dIixwZSk7dChfK28oXyxFLCJbXFwrXFwtXFwuXSIpKyIqIiksdCh0KEkrInwiK28oWix4LCJbXFw6XSIpKSsiKiIpO3ZhciBjZT10KHQoIjI1WzAtNV0iKSsifCIrdCgiMlswLTRdIitFKSsifCIrdCgiMSIrRStFKSsifCIrdCgiMD9bMS05XSIrRSkrInwwPzA/IitFKSxnZT10KGNlKyJcXC4iK2NlKyJcXC4iK2NlKyJcXC4iK2NlKSxLPXQoYisiezEsNH0iKSxmZT10KHQoSysiXFw6IitLKSsifCIrZ2UpLGJlPXQodChLKyJcXDoiKSsiezZ9IitmZSksUmU9dCgiXFw6XFw6Iit0KEsrIlxcOiIpKyJ7NX0iK2ZlKSxEbj10KHQoSykrIj9cXDpcXDoiK3QoSysiXFw6IikrIns0fSIrZmUpLHNuPXQodCh0KEsrIlxcOiIpKyJ7MCwxfSIrSykrIj9cXDpcXDoiK3QoSysiXFw6IikrInszfSIrZmUpLGFuPXQodCh0KEsrIlxcOiIpKyJ7MCwyfSIrSykrIj9cXDpcXDoiK3QoSysiXFw6IikrInsyfSIrZmUpLGZyPXQodCh0KEsrIlxcOiIpKyJ7MCwzfSIrSykrIj9cXDpcXDoiK0srIlxcOiIrZmUpLFduPXQodCh0KEsrIlxcOiIpKyJ7MCw0fSIrSykrIj9cXDpcXDoiK2ZlKSxLZT10KHQodChLKyJcXDoiKSsiezAsNX0iK0spKyI/XFw6XFw6IitLKSx1bj10KHQodChLKyJcXDoiKSsiezAsNn0iK0spKyI/XFw6XFw6IiksWW49dChbYmUsUmUsRG4sc24sYW4sZnIsV24sS2UsdW5dLmpvaW4oInwiKSksUm49dCh0KForInwiK0kpKyIrIik7dCgiW3ZWXSIrYisiK1xcLiIrbyhaLHgsIltcXDpdIikrIisiKSx0KHQoSSsifCIrbyhaLHgpKSsiKiIpO3ZhciBWcj10KEkrInwiK28oWix4LCJbXFw6XFxAXSIpKTtyZXR1cm4gdCh0KEkrInwiK28oWix4LCJbXFxAXSIpKSsiKyIpLHQodChWcisifCIrbygiW1xcL1xcP10iLE5lKSkrIioiKSx7Tk9UX1NDSEVNRTpuZXcgUmVnRXhwKG8oIlteXSIsXyxFLCJbXFwrXFwtXFwuXSIpLCJnIiksTk9UX1VTRVJJTkZPOm5ldyBSZWdFeHAobygiW15cXCVcXDpdIixaLHgpLCJnIiksTk9UX0hPU1Q6bmV3IFJlZ0V4cChvKCJbXlxcJVxcW1xcXVxcOl0iLFoseCksImciKSxOT1RfUEFUSDpuZXcgUmVnRXhwKG8oIlteXFwlXFwvXFw6XFxAXSIsWix4KSwiZyIpLE5PVF9QQVRIX05PU0NIRU1FOm5ldyBSZWdFeHAobygiW15cXCVcXC9cXEBdIixaLHgpLCJnIiksTk9UX1FVRVJZOm5ldyBSZWdFeHAobygiW15cXCVdIixaLHgsIltcXDpcXEBcXC9cXD9dIixOZSksImciKSxOT1RfRlJBR01FTlQ6bmV3IFJlZ0V4cChvKCJbXlxcJV0iLFoseCwiW1xcOlxcQFxcL1xcP10iKSwiZyIpLEVTQ0FQRTpuZXcgUmVnRXhwKG8oIlteXSIsWix4KSwiZyIpLFVOUkVTRVJWRUQ6bmV3IFJlZ0V4cChaLCJnIiksT1RIRVJfQ0hBUlM6bmV3IFJlZ0V4cChvKCJbXlxcJV0iLFosdGUpLCJnIiksUENUX0VOQ09ERUQ6bmV3IFJlZ0V4cChJLCJnIiksSVBWNEFERFJFU1M6bmV3IFJlZ0V4cCgiXigiK2dlKyIpJCIpLElQVjZBRERSRVNTOm5ldyBSZWdFeHAoIl5cXFs/KCIrWW4rIikiK3QodCgiXFwlMjV8XFwlKD8hIitiKyJ7Mn0pIikrIigiK1JuKyIpIikrIj9cXF0/JCIpfX12YXIgYT1tKCExKSxoPW0oITApLE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBkKF8sRSl7dmFyIGI9W10sST0hMCwkPSExLHg9dm9pZCAwO3RyeXtmb3IodmFyIHRlPV9bU3ltYm9sLml0ZXJhdG9yXSgpLHBlOyEoST0ocGU9dGUubmV4dCgpKS5kb25lKSYmKGIucHVzaChwZS52YWx1ZSksIShFJiZiLmxlbmd0aD09PUUpKTtJPSEwKTt9Y2F0Y2goTmUpeyQ9ITAseD1OZX1maW5hbGx5e3RyeXshSSYmdGUucmV0dXJuJiZ0ZS5yZXR1cm4oKX1maW5hbGx5e2lmKCQpdGhyb3cgeH19cmV0dXJuIGJ9cmV0dXJuIGZ1bmN0aW9uKF8sRSl7aWYoQXJyYXkuaXNBcnJheShfKSlyZXR1cm4gXztpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KF8pKXJldHVybiBkKF8sRSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKSxEPWZ1bmN0aW9uKGQpe2lmKEFycmF5LmlzQXJyYXkoZCkpe2Zvcih2YXIgXz0wLEU9QXJyYXkoZC5sZW5ndGgpO188ZC5sZW5ndGg7XysrKUVbX109ZFtfXTtyZXR1cm4gRX1lbHNlIHJldHVybiBBcnJheS5mcm9tKGQpfSx3PTIxNDc0ODM2NDcsQz0zNixUPTEsZj0yNixBPTM4LFU9NzAwLFM9NzIsaj0xMjgsTj0iLSIsSD0vXnhuLS0vLEc9L1teXDAtXHg3RV0vLEY9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLFc9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LG1lPUMtVCx6PU1hdGguZmxvb3IsaWU9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBxKGQpe3Rocm93IG5ldyBSYW5nZUVycm9yKFdbZF0pfWZ1bmN0aW9uIEVlKGQsXyl7Zm9yKHZhciBFPVtdLGI9ZC5sZW5ndGg7Yi0tOylFW2JdPV8oZFtiXSk7cmV0dXJuIEV9ZnVuY3Rpb24gT2UoZCxfKXt2YXIgRT1kLnNwbGl0KCJAIiksYj0iIjtFLmxlbmd0aD4xJiYoYj1FWzBdKyJAIixkPUVbMV0pLGQ9ZC5yZXBsYWNlKEYsIi4iKTt2YXIgST1kLnNwbGl0KCIuIiksJD1FZShJLF8pLmpvaW4oIi4iKTtyZXR1cm4gYiskfWZ1bmN0aW9uIEhlKGQpe2Zvcih2YXIgXz1bXSxFPTAsYj1kLmxlbmd0aDtFPGI7KXt2YXIgST1kLmNoYXJDb2RlQXQoRSsrKTtpZihJPj01NTI5NiYmSTw9NTYzMTkmJkU8Yil7dmFyICQ9ZC5jaGFyQ29kZUF0KEUrKyk7KCQmNjQ1MTIpPT01NjMyMD9fLnB1c2goKChJJjEwMjMpPDwxMCkrKCQmMTAyMykrNjU1MzYpOihfLnB1c2goSSksRS0tKX1lbHNlIF8ucHVzaChJKX1yZXR1cm4gX312YXIgRmU9ZnVuY3Rpb24oXyl7cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZyxEKF8pKX0sbHI9ZnVuY3Rpb24oXyl7cmV0dXJuIF8tNDg8MTA/Xy0yMjpfLTY1PDI2P18tNjU6Xy05NzwyNj9fLTk3OkN9LHk9ZnVuY3Rpb24oXyxFKXtyZXR1cm4gXysyMis3NSooXzwyNiktKChFIT0wKTw8NSl9LFI9ZnVuY3Rpb24oXyxFLGIpe3ZhciBJPTA7Zm9yKF89Yj96KF8vVSk6Xz4+MSxfKz16KF8vRSk7Xz5tZSpmPj4xO0krPUMpXz16KF8vbWUpO3JldHVybiB6KEkrKG1lKzEpKl8vKF8rQSkpfSxQPWZ1bmN0aW9uKF8pe3ZhciBFPVtdLGI9Xy5sZW5ndGgsST0wLCQ9aix4PVMsdGU9Xy5sYXN0SW5kZXhPZihOKTt0ZTwwJiYodGU9MCk7Zm9yKHZhciBwZT0wO3BlPHRlOysrcGUpXy5jaGFyQ29kZUF0KHBlKT49MTI4JiZxKCJub3QtYmFzaWMiKSxFLnB1c2goXy5jaGFyQ29kZUF0KHBlKSk7Zm9yKHZhciBOZT10ZT4wP3RlKzE6MDtOZTxiOyl7Zm9yKHZhciBaPUksY2U9MSxnZT1DOztnZSs9Qyl7TmU+PWImJnEoImludmFsaWQtaW5wdXQiKTt2YXIgSz1scihfLmNoYXJDb2RlQXQoTmUrKykpOyhLPj1DfHxLPnooKHctSSkvY2UpKSYmcSgib3ZlcmZsb3ciKSxJKz1LKmNlO3ZhciBmZT1nZTw9eD9UOmdlPj14K2Y/ZjpnZS14O2lmKEs8ZmUpYnJlYWs7dmFyIGJlPUMtZmU7Y2U+eih3L2JlKSYmcSgib3ZlcmZsb3ciKSxjZSo9YmV9dmFyIFJlPUUubGVuZ3RoKzE7eD1SKEktWixSZSxaPT0wKSx6KEkvUmUpPnctJCYmcSgib3ZlcmZsb3ciKSwkKz16KEkvUmUpLEklPVJlLEUuc3BsaWNlKEkrKywwLCQpfXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsRSl9LGc9ZnVuY3Rpb24oXyl7dmFyIEU9W107Xz1IZShfKTt2YXIgYj1fLmxlbmd0aCxJPWosJD0wLHg9Uyx0ZT0hMCxwZT0hMSxOZT12b2lkIDA7dHJ5e2Zvcih2YXIgWj1fW1N5bWJvbC5pdGVyYXRvcl0oKSxjZTshKHRlPShjZT1aLm5leHQoKSkuZG9uZSk7dGU9ITApe3ZhciBnZT1jZS52YWx1ZTtnZTwxMjgmJkUucHVzaChpZShnZSkpfX1jYXRjaChLcil7cGU9ITAsTmU9S3J9ZmluYWxseXt0cnl7IXRlJiZaLnJldHVybiYmWi5yZXR1cm4oKX1maW5hbGx5e2lmKHBlKXRocm93IE5lfX12YXIgSz1FLmxlbmd0aCxmZT1LO2ZvcihLJiZFLnB1c2goTik7ZmU8Yjspe3ZhciBiZT13LFJlPSEwLERuPSExLHNuPXZvaWQgMDt0cnl7Zm9yKHZhciBhbj1fW1N5bWJvbC5pdGVyYXRvcl0oKSxmcjshKFJlPShmcj1hbi5uZXh0KCkpLmRvbmUpO1JlPSEwKXt2YXIgV249ZnIudmFsdWU7V24+PUkmJlduPGJlJiYoYmU9V24pfX1jYXRjaChLcil7RG49ITAsc249S3J9ZmluYWxseXt0cnl7IVJlJiZhbi5yZXR1cm4mJmFuLnJldHVybigpfWZpbmFsbHl7aWYoRG4pdGhyb3cgc259fXZhciBLZT1mZSsxO2JlLUk+eigody0kKS9LZSkmJnEoIm92ZXJmbG93IiksJCs9KGJlLUkpKktlLEk9YmU7dmFyIHVuPSEwLFluPSExLFJuPXZvaWQgMDt0cnl7Zm9yKHZhciBWcj1fW1N5bWJvbC5pdGVyYXRvcl0oKSxMaTshKHVuPShMaT1Wci5uZXh0KCkpLmRvbmUpO3VuPSEwKXt2YXIgQmk9TGkudmFsdWU7aWYoQmk8SSYmKyskPncmJnEoIm92ZXJmbG93IiksQmk9PUkpe2Zvcih2YXIgYm89JCxBbz1DOztBbys9Qyl7dmFyIFVvPUFvPD14P1Q6QW8+PXgrZj9mOkFvLXg7aWYoYm88VW8pYnJlYWs7dmFyIGtpPWJvLVVvLE1pPUMtVW87RS5wdXNoKGllKHkoVW8ra2klTWksMCkpKSxibz16KGtpL01pKX1FLnB1c2goaWUoeShibywwKSkpLHg9UigkLEtlLGZlPT1LKSwkPTAsKytmZX19fWNhdGNoKEtyKXtZbj0hMCxSbj1Lcn1maW5hbGx5e3RyeXshdW4mJlZyLnJldHVybiYmVnIucmV0dXJuKCl9ZmluYWxseXtpZihZbil0aHJvdyBSbn19KyskLCsrSX1yZXR1cm4gRS5qb2luKCIiKX0sdT1mdW5jdGlvbihfKXtyZXR1cm4gT2UoXyxmdW5jdGlvbihFKXtyZXR1cm4gSC50ZXN0KEUpP1AoRS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTpFfSl9LHA9ZnVuY3Rpb24oXyl7cmV0dXJuIE9lKF8sZnVuY3Rpb24oRSl7cmV0dXJuIEcudGVzdChFKT8ieG4tLSIrZyhFKTpFfSl9LHY9e3ZlcnNpb246IjIuMS4wIix1Y3MyOntkZWNvZGU6SGUsZW5jb2RlOkZlfSxkZWNvZGU6UCxlbmNvZGU6Zyx0b0FTQ0lJOnAsdG9Vbmljb2RlOnV9LEw9e307ZnVuY3Rpb24gQihkKXt2YXIgXz1kLmNoYXJDb2RlQXQoMCksRT12b2lkIDA7cmV0dXJuIF88MTY/RT0iJTAiK18udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk6XzwxMjg/RT0iJSIrXy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTpfPDIwNDg/RT0iJSIrKF8+PjZ8MTkyKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSsiJSIrKF8mNjN8MTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTpFPSIlIisoXz4+MTJ8MjI0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSsiJSIrKF8+PjYmNjN8MTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSsiJSIrKF8mNjN8MTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxFfWZ1bmN0aW9uIFEoZCl7Zm9yKHZhciBfPSIiLEU9MCxiPWQubGVuZ3RoO0U8Yjspe3ZhciBJPXBhcnNlSW50KGQuc3Vic3RyKEUrMSwyKSwxNik7aWYoSTwxMjgpXys9U3RyaW5nLmZyb21DaGFyQ29kZShJKSxFKz0zO2Vsc2UgaWYoST49MTk0JiZJPDIyNCl7aWYoYi1FPj02KXt2YXIgJD1wYXJzZUludChkLnN1YnN0cihFKzQsMiksMTYpO18rPVN0cmluZy5mcm9tQ2hhckNvZGUoKEkmMzEpPDw2fCQmNjMpfWVsc2UgXys9ZC5zdWJzdHIoRSw2KTtFKz02fWVsc2UgaWYoST49MjI0KXtpZihiLUU+PTkpe3ZhciB4PXBhcnNlSW50KGQuc3Vic3RyKEUrNCwyKSwxNiksdGU9cGFyc2VJbnQoZC5zdWJzdHIoRSs3LDIpLDE2KTtfKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChJJjE1KTw8MTJ8KHgmNjMpPDw2fHRlJjYzKX1lbHNlIF8rPWQuc3Vic3RyKEUsOSk7RSs9OX1lbHNlIF8rPWQuc3Vic3RyKEUsMyksRSs9M31yZXR1cm4gX31mdW5jdGlvbiByZShkLF8pe2Z1bmN0aW9uIEUoYil7dmFyIEk9UShiKTtyZXR1cm4gSS5tYXRjaChfLlVOUkVTRVJWRUQpP0k6Yn1yZXR1cm4gZC5zY2hlbWUmJihkLnNjaGVtZT1TdHJpbmcoZC5zY2hlbWUpLnJlcGxhY2UoXy5QQ1RfRU5DT0RFRCxFKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoXy5OT1RfU0NIRU1FLCIiKSksZC51c2VyaW5mbyE9PXZvaWQgMCYmKGQudXNlcmluZm89U3RyaW5nKGQudXNlcmluZm8pLnJlcGxhY2UoXy5QQ1RfRU5DT0RFRCxFKS5yZXBsYWNlKF8uTk9UX1VTRVJJTkZPLEIpLnJlcGxhY2UoXy5QQ1RfRU5DT0RFRCxpKSksZC5ob3N0IT09dm9pZCAwJiYoZC5ob3N0PVN0cmluZyhkLmhvc3QpLnJlcGxhY2UoXy5QQ1RfRU5DT0RFRCxFKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoXy5OT1RfSE9TVCxCKS5yZXBsYWNlKF8uUENUX0VOQ09ERUQsaSkpLGQucGF0aCE9PXZvaWQgMCYmKGQucGF0aD1TdHJpbmcoZC5wYXRoKS5yZXBsYWNlKF8uUENUX0VOQ09ERUQsRSkucmVwbGFjZShkLnNjaGVtZT9fLk5PVF9QQVRIOl8uTk9UX1BBVEhfTk9TQ0hFTUUsQikucmVwbGFjZShfLlBDVF9FTkNPREVELGkpKSxkLnF1ZXJ5IT09dm9pZCAwJiYoZC5xdWVyeT1TdHJpbmcoZC5xdWVyeSkucmVwbGFjZShfLlBDVF9FTkNPREVELEUpLnJlcGxhY2UoXy5OT1RfUVVFUlksQikucmVwbGFjZShfLlBDVF9FTkNPREVELGkpKSxkLmZyYWdtZW50IT09dm9pZCAwJiYoZC5mcmFnbWVudD1TdHJpbmcoZC5mcmFnbWVudCkucmVwbGFjZShfLlBDVF9FTkNPREVELEUpLnJlcGxhY2UoXy5OT1RfRlJBR01FTlQsQikucmVwbGFjZShfLlBDVF9FTkNPREVELGkpKSxkfWZ1bmN0aW9uIFRlKGQpe3JldHVybiBkLnJlcGxhY2UoL14wKiguKikvLCIkMSIpfHwiMCJ9ZnVuY3Rpb24gcm4oZCxfKXt2YXIgRT1kLm1hdGNoKF8uSVBWNEFERFJFU1MpfHxbXSxiPU8oRSwyKSxJPWJbMV07cmV0dXJuIEk/SS5zcGxpdCgiLiIpLm1hcChUZSkuam9pbigiLiIpOmR9ZnVuY3Rpb24gY3IoZCxfKXt2YXIgRT1kLm1hdGNoKF8uSVBWNkFERFJFU1MpfHxbXSxiPU8oRSwzKSxJPWJbMV0sJD1iWzJdO2lmKEkpe2Zvcih2YXIgeD1JLnRvTG93ZXJDYXNlKCkuc3BsaXQoIjo6IikucmV2ZXJzZSgpLHRlPU8oeCwyKSxwZT10ZVswXSxOZT10ZVsxXSxaPU5lP05lLnNwbGl0KCI6IikubWFwKFRlKTpbXSxjZT1wZS5zcGxpdCgiOiIpLm1hcChUZSksZ2U9Xy5JUFY0QUREUkVTUy50ZXN0KGNlW2NlLmxlbmd0aC0xXSksSz1nZT83OjgsZmU9Y2UubGVuZ3RoLUssYmU9QXJyYXkoSyksUmU9MDtSZTxLOysrUmUpYmVbUmVdPVpbUmVdfHxjZVtmZStSZV18fCIiO2dlJiYoYmVbSy0xXT1ybihiZVtLLTFdLF8pKTt2YXIgRG49YmUucmVkdWNlKGZ1bmN0aW9uKEtlLHVuLFluKXtpZighdW58fHVuPT09IjAiKXt2YXIgUm49S2VbS2UubGVuZ3RoLTFdO1JuJiZSbi5pbmRleCtSbi5sZW5ndGg9PT1Zbj9Sbi5sZW5ndGgrKzpLZS5wdXNoKHtpbmRleDpZbixsZW5ndGg6MX0pfXJldHVybiBLZX0sW10pLHNuPURuLnNvcnQoZnVuY3Rpb24oS2UsdW4pe3JldHVybiB1bi5sZW5ndGgtS2UubGVuZ3RofSlbMF0sYW49dm9pZCAwO2lmKHNuJiZzbi5sZW5ndGg+MSl7dmFyIGZyPWJlLnNsaWNlKDAsc24uaW5kZXgpLFduPWJlLnNsaWNlKHNuLmluZGV4K3NuLmxlbmd0aCk7YW49ZnIuam9pbigiOiIpKyI6OiIrV24uam9pbigiOiIpfWVsc2UgYW49YmUuam9pbigiOiIpO3JldHVybiAkJiYoYW4rPSIlIiskKSxhbn1lbHNlIHJldHVybiBkfXZhciBrcj0vXig/OihbXjpcLz8jXSspOik/KD86XC9cLygoPzooW15cLz8jQF0qKUApPyhcW1teXC8/I1xdXStcXXxbXlwvPyM6XSopKD86XDooXGQqKSk/KSk/KFtePyNdKikoPzpcPyhbXiNdKikpPyg/OiMoKD86LnxcbnxccikqKSk/L2ksTXI9IiIubWF0Y2goLygpezB9LylbMV09PT12b2lkIDA7ZnVuY3Rpb24ga2UoZCl7dmFyIF89YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LEU9e30sYj1fLmlyaSE9PSExP2g6YTtfLnJlZmVyZW5jZT09PSJzdWZmaXgiJiYoZD0oXy5zY2hlbWU/Xy5zY2hlbWUrIjoiOiIiKSsiLy8iK2QpO3ZhciBJPWQubWF0Y2goa3IpO2lmKEkpe01yPyhFLnNjaGVtZT1JWzFdLEUudXNlcmluZm89SVszXSxFLmhvc3Q9SVs0XSxFLnBvcnQ9cGFyc2VJbnQoSVs1XSwxMCksRS5wYXRoPUlbNl18fCIiLEUucXVlcnk9SVs3XSxFLmZyYWdtZW50PUlbOF0saXNOYU4oRS5wb3J0KSYmKEUucG9ydD1JWzVdKSk6KEUuc2NoZW1lPUlbMV18fHZvaWQgMCxFLnVzZXJpbmZvPWQuaW5kZXhPZigiQCIpIT09LTE/SVszXTp2b2lkIDAsRS5ob3N0PWQuaW5kZXhPZigiLy8iKSE9PS0xP0lbNF06dm9pZCAwLEUucG9ydD1wYXJzZUludChJWzVdLDEwKSxFLnBhdGg9SVs2XXx8IiIsRS5xdWVyeT1kLmluZGV4T2YoIj8iKSE9PS0xP0lbN106dm9pZCAwLEUuZnJhZ21lbnQ9ZC5pbmRleE9mKCIjIikhPT0tMT9JWzhdOnZvaWQgMCxpc05hTihFLnBvcnQpJiYoRS5wb3J0PWQubWF0Y2goL1wvXC8oPzoufFxuKSpcOig/OlwvfFw/fFwjfCQpLyk/SVs0XTp2b2lkIDApKSxFLmhvc3QmJihFLmhvc3Q9Y3Iocm4oRS5ob3N0LGIpLGIpKSxFLnNjaGVtZT09PXZvaWQgMCYmRS51c2VyaW5mbz09PXZvaWQgMCYmRS5ob3N0PT09dm9pZCAwJiZFLnBvcnQ9PT12b2lkIDAmJiFFLnBhdGgmJkUucXVlcnk9PT12b2lkIDA/RS5yZWZlcmVuY2U9InNhbWUtZG9jdW1lbnQiOkUuc2NoZW1lPT09dm9pZCAwP0UucmVmZXJlbmNlPSJyZWxhdGl2ZSI6RS5mcmFnbWVudD09PXZvaWQgMD9FLnJlZmVyZW5jZT0iYWJzb2x1dGUiOkUucmVmZXJlbmNlPSJ1cmkiLF8ucmVmZXJlbmNlJiZfLnJlZmVyZW5jZSE9PSJzdWZmaXgiJiZfLnJlZmVyZW5jZSE9PUUucmVmZXJlbmNlJiYoRS5lcnJvcj1FLmVycm9yfHwiVVJJIGlzIG5vdCBhICIrXy5yZWZlcmVuY2UrIiByZWZlcmVuY2UuIik7dmFyICQ9TFsoXy5zY2hlbWV8fEUuc2NoZW1lfHwiIikudG9Mb3dlckNhc2UoKV07aWYoIV8udW5pY29kZVN1cHBvcnQmJighJHx8ISQudW5pY29kZVN1cHBvcnQpKXtpZihFLmhvc3QmJihfLmRvbWFpbkhvc3R8fCQmJiQuZG9tYWluSG9zdCkpdHJ5e0UuaG9zdD12LnRvQVNDSUkoRS5ob3N0LnJlcGxhY2UoYi5QQ1RfRU5DT0RFRCxRKS50b0xvd2VyQ2FzZSgpKX1jYXRjaCh4KXtFLmVycm9yPUUuZXJyb3J8fCJIb3N0J3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gQVNDSUkgdmlhIHB1bnljb2RlOiAiK3h9cmUoRSxhKX1lbHNlIHJlKEUsYik7JCYmJC5wYXJzZSYmJC5wYXJzZShFLF8pfWVsc2UgRS5lcnJvcj1FLmVycm9yfHwiVVJJIGNhbiBub3QgYmUgcGFyc2VkLiI7cmV0dXJuIEV9ZnVuY3Rpb24gWHIoZCxfKXt2YXIgRT1fLmlyaSE9PSExP2g6YSxiPVtdO3JldHVybiBkLnVzZXJpbmZvIT09dm9pZCAwJiYoYi5wdXNoKGQudXNlcmluZm8pLGIucHVzaCgiQCIpKSxkLmhvc3QhPT12b2lkIDAmJmIucHVzaChjcihybihTdHJpbmcoZC5ob3N0KSxFKSxFKS5yZXBsYWNlKEUuSVBWNkFERFJFU1MsZnVuY3Rpb24oSSwkLHgpe3JldHVybiJbIiskKyh4PyIlMjUiK3g6IiIpKyJdIn0pKSwodHlwZW9mIGQucG9ydD09Im51bWJlciJ8fHR5cGVvZiBkLnBvcnQ9PSJzdHJpbmciKSYmKGIucHVzaCgiOiIpLGIucHVzaChTdHJpbmcoZC5wb3J0KSkpLGIubGVuZ3RoP2Iuam9pbigiIik6dm9pZCAwfXZhciBkcj0vXlwuXC4/XC8vLGhyPS9eXC9cLihcL3wkKS8sbXI9L15cL1wuXC4oXC98JCkvLCRyPS9eXC8/KD86LnxcbikqPyg/PVwvfCQpLztmdW5jdGlvbiBvbihkKXtmb3IodmFyIF89W107ZC5sZW5ndGg7KWlmKGQubWF0Y2goZHIpKWQ9ZC5yZXBsYWNlKGRyLCIiKTtlbHNlIGlmKGQubWF0Y2goaHIpKWQ9ZC5yZXBsYWNlKGhyLCIvIik7ZWxzZSBpZihkLm1hdGNoKG1yKSlkPWQucmVwbGFjZShtciwiLyIpLF8ucG9wKCk7ZWxzZSBpZihkPT09Ii4ifHxkPT09Ii4uIilkPSIiO2Vsc2V7dmFyIEU9ZC5tYXRjaCgkcik7aWYoRSl7dmFyIGI9RVswXTtkPWQuc2xpY2UoYi5sZW5ndGgpLF8ucHVzaChiKX1lbHNlIHRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBkb3Qgc2VnbWVudCBjb25kaXRpb24iKX1yZXR1cm4gXy5qb2luKCIiKX1mdW5jdGlvbiB5ZShkKXt2YXIgXz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sRT1fLmlyaT9oOmEsYj1bXSxJPUxbKF8uc2NoZW1lfHxkLnNjaGVtZXx8IiIpLnRvTG93ZXJDYXNlKCldO2lmKEkmJkkuc2VyaWFsaXplJiZJLnNlcmlhbGl6ZShkLF8pLGQuaG9zdCYmIUUuSVBWNkFERFJFU1MudGVzdChkLmhvc3QpKXtpZihfLmRvbWFpbkhvc3R8fEkmJkkuZG9tYWluSG9zdCl0cnl7ZC5ob3N0PV8uaXJpP3YudG9Vbmljb2RlKGQuaG9zdCk6di50b0FTQ0lJKGQuaG9zdC5yZXBsYWNlKEUuUENUX0VOQ09ERUQsUSkudG9Mb3dlckNhc2UoKSl9Y2F0Y2godGUpe2QuZXJyb3I9ZC5lcnJvcnx8Ikhvc3QncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byAiKyhfLmlyaT8iVW5pY29kZSI6IkFTQ0lJIikrIiB2aWEgcHVueWNvZGU6ICIrdGV9fXJlKGQsRSksXy5yZWZlcmVuY2UhPT0ic3VmZml4IiYmZC5zY2hlbWUmJihiLnB1c2goZC5zY2hlbWUpLGIucHVzaCgiOiIpKTt2YXIgJD1YcihkLF8pO2lmKCQhPT12b2lkIDAmJihfLnJlZmVyZW5jZSE9PSJzdWZmaXgiJiZiLnB1c2goIi8vIiksYi5wdXNoKCQpLGQucGF0aCYmZC5wYXRoLmNoYXJBdCgwKSE9PSIvIiYmYi5wdXNoKCIvIikpLGQucGF0aCE9PXZvaWQgMCl7dmFyIHg9ZC5wYXRoOyFfLmFic29sdXRlUGF0aCYmKCFJfHwhSS5hYnNvbHV0ZVBhdGgpJiYoeD1vbih4KSksJD09PXZvaWQgMCYmKHg9eC5yZXBsYWNlKC9eXC9cLy8sIi8lMkYiKSksYi5wdXNoKHgpfXJldHVybiBkLnF1ZXJ5IT09dm9pZCAwJiYoYi5wdXNoKCI/IiksYi5wdXNoKGQucXVlcnkpKSxkLmZyYWdtZW50IT09dm9pZCAwJiYoYi5wdXNoKCIjIiksYi5wdXNoKGQuZnJhZ21lbnQpKSxiLmpvaW4oIiIpfWZ1bmN0aW9uIHByKGQsXyl7dmFyIEU9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnt9LGI9YXJndW1lbnRzWzNdLEk9e307cmV0dXJuIGJ8fChkPWtlKHllKGQsRSksRSksXz1rZSh5ZShfLEUpLEUpKSxFPUV8fHt9LCFFLnRvbGVyYW50JiZfLnNjaGVtZT8oSS5zY2hlbWU9Xy5zY2hlbWUsSS51c2VyaW5mbz1fLnVzZXJpbmZvLEkuaG9zdD1fLmhvc3QsSS5wb3J0PV8ucG9ydCxJLnBhdGg9b24oXy5wYXRofHwiIiksSS5xdWVyeT1fLnF1ZXJ5KTooXy51c2VyaW5mbyE9PXZvaWQgMHx8Xy5ob3N0IT09dm9pZCAwfHxfLnBvcnQhPT12b2lkIDA/KEkudXNlcmluZm89Xy51c2VyaW5mbyxJLmhvc3Q9Xy5ob3N0LEkucG9ydD1fLnBvcnQsSS5wYXRoPW9uKF8ucGF0aHx8IiIpLEkucXVlcnk9Xy5xdWVyeSk6KF8ucGF0aD8oXy5wYXRoLmNoYXJBdCgwKT09PSIvIj9JLnBhdGg9b24oXy5wYXRoKTooKGQudXNlcmluZm8hPT12b2lkIDB8fGQuaG9zdCE9PXZvaWQgMHx8ZC5wb3J0IT09dm9pZCAwKSYmIWQucGF0aD9JLnBhdGg9Ii8iK18ucGF0aDpkLnBhdGg/SS5wYXRoPWQucGF0aC5zbGljZSgwLGQucGF0aC5sYXN0SW5kZXhPZigiLyIpKzEpK18ucGF0aDpJLnBhdGg9Xy5wYXRoLEkucGF0aD1vbihJLnBhdGgpKSxJLnF1ZXJ5PV8ucXVlcnkpOihJLnBhdGg9ZC5wYXRoLF8ucXVlcnkhPT12b2lkIDA/SS5xdWVyeT1fLnF1ZXJ5OkkucXVlcnk9ZC5xdWVyeSksSS51c2VyaW5mbz1kLnVzZXJpbmZvLEkuaG9zdD1kLmhvc3QsSS5wb3J0PWQucG9ydCksSS5zY2hlbWU9ZC5zY2hlbWUpLEkuZnJhZ21lbnQ9Xy5mcmFnbWVudCxJfWZ1bmN0aW9uIGpyKGQsXyxFKXt2YXIgYj1jKHtzY2hlbWU6Im51bGwifSxFKTtyZXR1cm4geWUocHIoa2UoZCxiKSxrZShfLGIpLGIsITApLGIpfWZ1bmN0aW9uIFZuKGQsXyl7cmV0dXJuIHR5cGVvZiBkPT0ic3RyaW5nIj9kPXllKGtlKGQsXyksXyk6cyhkKT09PSJvYmplY3QiJiYoZD1rZSh5ZShkLF8pLF8pKSxkfWZ1bmN0aW9uIHhyKGQsXyxFKXtyZXR1cm4gdHlwZW9mIGQ9PSJzdHJpbmciP2Q9eWUoa2UoZCxFKSxFKTpzKGQpPT09Im9iamVjdCImJihkPXllKGQsRSkpLHR5cGVvZiBfPT0ic3RyaW5nIj9fPXllKGtlKF8sRSksRSk6cyhfKT09PSJvYmplY3QiJiYoXz15ZShfLEUpKSxkPT09X31mdW5jdGlvbiBJbyhkLF8pe3JldHVybiBkJiZkLnRvU3RyaW5nKCkucmVwbGFjZSghX3x8IV8uaXJpP2EuRVNDQVBFOmguRVNDQVBFLEIpfWZ1bmN0aW9uIFZlKGQsXyl7cmV0dXJuIGQmJmQudG9TdHJpbmcoKS5yZXBsYWNlKCFffHwhXy5pcmk/YS5QQ1RfRU5DT0RFRDpoLlBDVF9FTkNPREVELFEpfXZhciBLbj17c2NoZW1lOiJodHRwIixkb21haW5Ib3N0OiEwLHBhcnNlOmZ1bmN0aW9uKF8sRSl7cmV0dXJuIF8uaG9zdHx8KF8uZXJyb3I9Xy5lcnJvcnx8IkhUVFAgVVJJcyBtdXN0IGhhdmUgYSBob3N0LiIpLF99LHNlcmlhbGl6ZTpmdW5jdGlvbihfLEUpe3ZhciBiPVN0cmluZyhfLnNjaGVtZSkudG9Mb3dlckNhc2UoKT09PSJodHRwcyI7cmV0dXJuKF8ucG9ydD09PShiPzQ0Mzo4MCl8fF8ucG9ydD09PSIiKSYmKF8ucG9ydD12b2lkIDApLF8ucGF0aHx8KF8ucGF0aD0iLyIpLF99fSx2aT17c2NoZW1lOiJodHRwcyIsZG9tYWluSG9zdDpLbi5kb21haW5Ib3N0LHBhcnNlOktuLnBhcnNlLHNlcmlhbGl6ZTpLbi5zZXJpYWxpemV9O2Z1bmN0aW9uIERpKGQpe3JldHVybiB0eXBlb2YgZC5zZWN1cmU9PSJib29sZWFuIj9kLnNlY3VyZTpTdHJpbmcoZC5zY2hlbWUpLnRvTG93ZXJDYXNlKCk9PT0id3NzIn12YXIgRnI9e3NjaGVtZToid3MiLGRvbWFpbkhvc3Q6ITAscGFyc2U6ZnVuY3Rpb24oXyxFKXt2YXIgYj1fO3JldHVybiBiLnNlY3VyZT1EaShiKSxiLnJlc291cmNlTmFtZT0oYi5wYXRofHwiLyIpKyhiLnF1ZXJ5PyI/IitiLnF1ZXJ5OiIiKSxiLnBhdGg9dm9pZCAwLGIucXVlcnk9dm9pZCAwLGJ9LHNlcmlhbGl6ZTpmdW5jdGlvbihfLEUpe2lmKChfLnBvcnQ9PT0oRGkoXyk/NDQzOjgwKXx8Xy5wb3J0PT09IiIpJiYoXy5wb3J0PXZvaWQgMCksdHlwZW9mIF8uc2VjdXJlPT0iYm9vbGVhbiImJihfLnNjaGVtZT1fLnNlY3VyZT8id3NzIjoid3MiLF8uc2VjdXJlPXZvaWQgMCksXy5yZXNvdXJjZU5hbWUpe3ZhciBiPV8ucmVzb3VyY2VOYW1lLnNwbGl0KCI/IiksST1PKGIsMiksJD1JWzBdLHg9SVsxXTtfLnBhdGg9JCYmJCE9PSIvIj8kOnZvaWQgMCxfLnF1ZXJ5PXgsXy5yZXNvdXJjZU5hbWU9dm9pZCAwfXJldHVybiBfLmZyYWdtZW50PXZvaWQgMCxffX0sU2k9e3NjaGVtZToid3NzIixkb21haW5Ib3N0OkZyLmRvbWFpbkhvc3QscGFyc2U6RnIucGFyc2Usc2VyaWFsaXplOkZyLnNlcmlhbGl6ZX0sSmM9e30sUGk9IltBLVphLXowLTlcXC1cXC5cXF9cXH5cXHhBMC1cXHUyMDBEXFx1MjAxMC1cXHUyMDI5XFx1MjAyRi1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSIsdG49IlswLTlBLUZhLWZdIix6Yz10KHQoIiVbRUZlZl0iK3RuKyIlIit0bit0bisiJSIrdG4rdG4pKyJ8Iit0KCIlWzg5QS1GYS1mXSIrdG4rIiUiK3RuK3RuKSsifCIrdCgiJSIrdG4rdG4pKSxxYz0iW0EtWmEtejAtOVxcIVxcJFxcJVxcJ1xcKlxcK1xcLVxcXlxcX1xcYFxce1xcfFxcfVxcfl0iLFFjPSJbXFwhXFwkXFwlXFwnXFwoXFwpXFwqXFwrXFwsXFwtXFwuMC05XFw8XFw+QS1aXFx4NUUtXFx4N0VdIixaYz1vKFFjLCdbXFwiXFxcXF0nKSxlZD0iW1xcIVxcJFxcJ1xcKFxcKVxcKlxcK1xcLFxcO1xcOlxcQF0iLG5kPW5ldyBSZWdFeHAoUGksImciKSxFcj1uZXcgUmVnRXhwKHpjLCJnIikscmQ9bmV3IFJlZ0V4cChvKCJbXl0iLHFjLCJbXFwuXSIsJ1tcXCJdJyxaYyksImciKSx3aT1uZXcgUmVnRXhwKG8oIlteXSIsUGksZWQpLCJnIiksb2Q9d2k7ZnVuY3Rpb24gVXQoZCl7dmFyIF89UShkKTtyZXR1cm4gXy5tYXRjaChuZCk/XzpkfXZhciBHaT17c2NoZW1lOiJtYWlsdG8iLHBhcnNlOmZ1bmN0aW9uKF8sRSl7dmFyIGI9XyxJPWIudG89Yi5wYXRoP2IucGF0aC5zcGxpdCgiLCIpOltdO2lmKGIucGF0aD12b2lkIDAsYi5xdWVyeSl7Zm9yKHZhciAkPSExLHg9e30sdGU9Yi5xdWVyeS5zcGxpdCgiJiIpLHBlPTAsTmU9dGUubGVuZ3RoO3BlPE5lOysrcGUpe3ZhciBaPXRlW3BlXS5zcGxpdCgiPSIpO3N3aXRjaChaWzBdKXtjYXNlInRvIjpmb3IodmFyIGNlPVpbMV0uc3BsaXQoIiwiKSxnZT0wLEs9Y2UubGVuZ3RoO2dlPEs7KytnZSlJLnB1c2goY2VbZ2VdKTticmVhaztjYXNlInN1YmplY3QiOmIuc3ViamVjdD1WZShaWzFdLEUpO2JyZWFrO2Nhc2UiYm9keSI6Yi5ib2R5PVZlKFpbMV0sRSk7YnJlYWs7ZGVmYXVsdDokPSEwLHhbVmUoWlswXSxFKV09VmUoWlsxXSxFKTticmVha319JCYmKGIuaGVhZGVycz14KX1iLnF1ZXJ5PXZvaWQgMDtmb3IodmFyIGZlPTAsYmU9SS5sZW5ndGg7ZmU8YmU7KytmZSl7dmFyIFJlPUlbZmVdLnNwbGl0KCJAIik7aWYoUmVbMF09VmUoUmVbMF0pLEUudW5pY29kZVN1cHBvcnQpUmVbMV09VmUoUmVbMV0sRSkudG9Mb3dlckNhc2UoKTtlbHNlIHRyeXtSZVsxXT12LnRvQVNDSUkoVmUoUmVbMV0sRSkudG9Mb3dlckNhc2UoKSl9Y2F0Y2goRG4pe2IuZXJyb3I9Yi5lcnJvcnx8IkVtYWlsIGFkZHJlc3MncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB2aWEgcHVueWNvZGU6ICIrRG59SVtmZV09UmUuam9pbigiQCIpfXJldHVybiBifSxzZXJpYWxpemU6ZnVuY3Rpb24oXyxFKXt2YXIgYj1fLEk9bChfLnRvKTtpZihJKXtmb3IodmFyICQ9MCx4PUkubGVuZ3RoOyQ8eDsrKyQpe3ZhciB0ZT1TdHJpbmcoSVskXSkscGU9dGUubGFzdEluZGV4T2YoIkAiKSxOZT10ZS5zbGljZSgwLHBlKS5yZXBsYWNlKEVyLFV0KS5yZXBsYWNlKEVyLGkpLnJlcGxhY2UocmQsQiksWj10ZS5zbGljZShwZSsxKTt0cnl7Wj1FLmlyaT92LnRvVW5pY29kZShaKTp2LnRvQVNDSUkoVmUoWixFKS50b0xvd2VyQ2FzZSgpKX1jYXRjaChmZSl7Yi5lcnJvcj1iLmVycm9yfHwiRW1haWwgYWRkcmVzcydzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvICIrKEUuaXJpPyJVbmljb2RlIjoiQVNDSUkiKSsiIHZpYSBwdW55Y29kZTogIitmZX1JWyRdPU5lKyJAIitafWIucGF0aD1JLmpvaW4oIiwiKX12YXIgY2U9Xy5oZWFkZXJzPV8uaGVhZGVyc3x8e307Xy5zdWJqZWN0JiYoY2Uuc3ViamVjdD1fLnN1YmplY3QpLF8uYm9keSYmKGNlLmJvZHk9Xy5ib2R5KTt2YXIgZ2U9W107Zm9yKHZhciBLIGluIGNlKWNlW0tdIT09SmNbS10mJmdlLnB1c2goSy5yZXBsYWNlKEVyLFV0KS5yZXBsYWNlKEVyLGkpLnJlcGxhY2Uod2ksQikrIj0iK2NlW0tdLnJlcGxhY2UoRXIsVXQpLnJlcGxhY2UoRXIsaSkucmVwbGFjZShvZCxCKSk7cmV0dXJuIGdlLmxlbmd0aCYmKGIucXVlcnk9Z2Uuam9pbigiJiIpKSxifX0sdGQ9L14oW15cOl0rKVw6KC4qKS8sQ2k9e3NjaGVtZToidXJuIixwYXJzZTpmdW5jdGlvbihfLEUpe3ZhciBiPV8ucGF0aCYmXy5wYXRoLm1hdGNoKHRkKSxJPV87aWYoYil7dmFyICQ9RS5zY2hlbWV8fEkuc2NoZW1lfHwidXJuIix4PWJbMV0udG9Mb3dlckNhc2UoKSx0ZT1iWzJdLHBlPSQrIjoiKyhFLm5pZHx8eCksTmU9TFtwZV07SS5uaWQ9eCxJLm5zcz10ZSxJLnBhdGg9dm9pZCAwLE5lJiYoST1OZS5wYXJzZShJLEUpKX1lbHNlIEkuZXJyb3I9SS5lcnJvcnx8IlVSTiBjYW4gbm90IGJlIHBhcnNlZC4iO3JldHVybiBJfSxzZXJpYWxpemU6ZnVuY3Rpb24oXyxFKXt2YXIgYj1FLnNjaGVtZXx8Xy5zY2hlbWV8fCJ1cm4iLEk9Xy5uaWQsJD1iKyI6IisoRS5uaWR8fEkpLHg9TFskXTt4JiYoXz14LnNlcmlhbGl6ZShfLEUpKTt2YXIgdGU9XyxwZT1fLm5zcztyZXR1cm4gdGUucGF0aD0oSXx8RS5uaWQpKyI6IitwZSx0ZX19LHNkPS9eWzAtOUEtRmEtZl17OH0oPzpcLVswLTlBLUZhLWZdezR9KXszfVwtWzAtOUEtRmEtZl17MTJ9JC8seWk9e3NjaGVtZToidXJuOnV1aWQiLHBhcnNlOmZ1bmN0aW9uKF8sRSl7dmFyIGI9XztyZXR1cm4gYi51dWlkPWIubnNzLGIubnNzPXZvaWQgMCwhRS50b2xlcmFudCYmKCFiLnV1aWR8fCFiLnV1aWQubWF0Y2goc2QpKSYmKGIuZXJyb3I9Yi5lcnJvcnx8IlVVSUQgaXMgbm90IHZhbGlkLiIpLGJ9LHNlcmlhbGl6ZTpmdW5jdGlvbihfLEUpe3ZhciBiPV87cmV0dXJuIGIubnNzPShfLnV1aWR8fCIiKS50b0xvd2VyQ2FzZSgpLGJ9fTtMW0tuLnNjaGVtZV09S24sTFt2aS5zY2hlbWVdPXZpLExbRnIuc2NoZW1lXT1GcixMW1NpLnNjaGVtZV09U2ksTFtHaS5zY2hlbWVdPUdpLExbQ2kuc2NoZW1lXT1DaSxMW3lpLnNjaGVtZV09eWksci5TQ0hFTUVTPUwsci5wY3RFbmNDaGFyPUIsci5wY3REZWNDaGFycz1RLHIucGFyc2U9a2Usci5yZW1vdmVEb3RTZWdtZW50cz1vbixyLnNlcmlhbGl6ZT15ZSxyLnJlc29sdmVDb21wb25lbnRzPXByLHIucmVzb2x2ZT1qcixyLm5vcm1hbGl6ZT1WbixyLmVxdWFsPXhyLHIuZXNjYXBlQ29tcG9uZW50PUlvLHIudW5lc2NhcGVDb21wb25lbnQ9VmUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSl9KShudCxudC5leHBvcnRzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IENzPW50LmV4cG9ydHM7Q3MuY29kZT0ncmVxdWlyZSgiYWp2L2Rpc3QvcnVudGltZS91cmkiKS5kZWZhdWx0JyxldC5kZWZhdWx0PUNzLGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLkNvZGVHZW49ZS5OYW1lPWUubmlsPWUuc3RyaW5naWZ5PWUuc3RyPWUuXz1lLktleXdvcmRDeHQ9dm9pZCAwO3ZhciBuPXplO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJLZXl3b3JkQ3h0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5LZXl3b3JkQ3h0fX0pO3ZhciByPV9lO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5ffX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzdHIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnN0cn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3RyaW5naWZ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5zdHJpbmdpZnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm5pbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIubmlsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJOYW1lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5OYW1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJDb2RlR2VuIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Db2RlR2VufX0pO2NvbnN0IG89dW8sdD1MbixzPUNuLGk9UGUsbD1fZSxjPURlLG09dG8sYT1BZSxoPSRfLE89ZXQsRD0oeSxSKT0+bmV3IFJlZ0V4cCh5LFIpO0QuY29kZT0ibmV3IFJlZ0V4cCI7Y29uc3Qgdz1bInJlbW92ZUFkZGl0aW9uYWwiLCJ1c2VEZWZhdWx0cyIsImNvZXJjZVR5cGVzIl0sQz1uZXcgU2V0KFsidmFsaWRhdGUiLCJzZXJpYWxpemUiLCJwYXJzZSIsIndyYXBwZXIiLCJyb290Iiwic2NoZW1hIiwia2V5d29yZCIsInBhdHRlcm4iLCJmb3JtYXRzIiwidmFsaWRhdGUkZGF0YSIsImZ1bmMiLCJvYmoiLCJFcnJvciJdKSxUPXtlcnJvckRhdGFQYXRoOiIiLGZvcm1hdDoiYHZhbGlkYXRlRm9ybWF0czogZmFsc2VgIGNhbiBiZSB1c2VkIGluc3RlYWQuIixudWxsYWJsZTonIm51bGxhYmxlIiBrZXl3b3JkIGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0LicsanNvblBvaW50ZXJzOiJEZXByZWNhdGVkIGpzUHJvcGVydHlTeW50YXggY2FuIGJlIHVzZWQgaW5zdGVhZC4iLGV4dGVuZFJlZnM6IkRlcHJlY2F0ZWQgaWdub3JlS2V5d29yZHNXaXRoUmVmIGNhbiBiZSB1c2VkIGluc3RlYWQuIixtaXNzaW5nUmVmczoiUGFzcyBlbXB0eSBzY2hlbWEgd2l0aCAkaWQgdGhhdCBzaG91bGQgYmUgaWdub3JlZCB0byBhanYuYWRkU2NoZW1hLiIscHJvY2Vzc0NvZGU6IlVzZSBvcHRpb24gYGNvZGU6IHtwcm9jZXNzOiAoY29kZSwgc2NoZW1hRW52OiBvYmplY3QpID0+IHN0cmluZ31gIixzb3VyY2VDb2RlOiJVc2Ugb3B0aW9uIGBjb2RlOiB7c291cmNlOiB0cnVlfWAiLHN0cmljdERlZmF1bHRzOiJJdCBpcyBkZWZhdWx0IG5vdywgc2VlIG9wdGlvbiBgc3RyaWN0YC4iLHN0cmljdEtleXdvcmRzOiJJdCBpcyBkZWZhdWx0IG5vdywgc2VlIG9wdGlvbiBgc3RyaWN0YC4iLHVuaXF1ZUl0ZW1zOicidW5pcXVlSXRlbXMiIGtleXdvcmQgaXMgYWx3YXlzIHZhbGlkYXRlZC4nLHVua25vd25Gb3JtYXRzOiJEaXNhYmxlIHN0cmljdCBtb2RlIG9yIHBhc3MgYHRydWVgIHRvIGBhanYuYWRkRm9ybWF0YCAob3IgYGZvcm1hdHNgIG9wdGlvbikuIixjYWNoZToiTWFwIGlzIHVzZWQgYXMgY2FjaGUsIHNjaGVtYSBvYmplY3QgYXMga2V5LiIsc2VyaWFsaXplOiJNYXAgaXMgdXNlZCBhcyBjYWNoZSwgc2NoZW1hIG9iamVjdCBhcyBrZXkuIixhanZFcnJvcnM6Ikl0IGlzIGRlZmF1bHQgbm93LiJ9LGY9e2lnbm9yZUtleXdvcmRzV2l0aFJlZjoiIixqc1Byb3BlcnR5U3ludGF4OiIiLHVuaWNvZGU6JyJtaW5MZW5ndGgiLyJtYXhMZW5ndGgiIGFjY291bnQgZm9yIHVuaWNvZGUgY2hhcmFjdGVycyBieSBkZWZhdWx0Lid9LEE9MjAwO2Z1bmN0aW9uIFUoeSl7dmFyIFIsUCxnLHUscCx2LEwsQixRLHJlLFRlLHJuLGNyLGtyLE1yLGtlLFhyLGRyLGhyLG1yLCRyLG9uLHllLHByLGpyO2NvbnN0IFZuPXkuc3RyaWN0LHhyPShSPXkuY29kZSk9PT1udWxsfHxSPT09dm9pZCAwP3ZvaWQgMDpSLm9wdGltaXplLElvPXhyPT09ITB8fHhyPT09dm9pZCAwPzE6eHJ8fDAsVmU9KGc9KFA9eS5jb2RlKT09PW51bGx8fFA9PT12b2lkIDA/dm9pZCAwOlAucmVnRXhwKSE9PW51bGwmJmchPT12b2lkIDA/ZzpELEtuPSh1PXkudXJpUmVzb2x2ZXIpIT09bnVsbCYmdSE9PXZvaWQgMD91Ok8uZGVmYXVsdDtyZXR1cm57c3RyaWN0U2NoZW1hOih2PShwPXkuc3RyaWN0U2NoZW1hKSE9PW51bGwmJnAhPT12b2lkIDA/cDpWbikhPT1udWxsJiZ2IT09dm9pZCAwP3Y6ITAsc3RyaWN0TnVtYmVyczooQj0oTD15LnN0cmljdE51bWJlcnMpIT09bnVsbCYmTCE9PXZvaWQgMD9MOlZuKSE9PW51bGwmJkIhPT12b2lkIDA/QjohMCxzdHJpY3RUeXBlczoocmU9KFE9eS5zdHJpY3RUeXBlcykhPT1udWxsJiZRIT09dm9pZCAwP1E6Vm4pIT09bnVsbCYmcmUhPT12b2lkIDA/cmU6ImxvZyIsc3RyaWN0VHVwbGVzOihybj0oVGU9eS5zdHJpY3RUdXBsZXMpIT09bnVsbCYmVGUhPT12b2lkIDA/VGU6Vm4pIT09bnVsbCYmcm4hPT12b2lkIDA/cm46ImxvZyIsc3RyaWN0UmVxdWlyZWQ6KGtyPShjcj15LnN0cmljdFJlcXVpcmVkKSE9PW51bGwmJmNyIT09dm9pZCAwP2NyOlZuKSE9PW51bGwmJmtyIT09dm9pZCAwP2tyOiExLGNvZGU6eS5jb2RlP2xlKFkoe30seS5jb2RlKSx7b3B0aW1pemU6SW8scmVnRXhwOlZlfSk6e29wdGltaXplOklvLHJlZ0V4cDpWZX0sbG9vcFJlcXVpcmVkOihNcj15Lmxvb3BSZXF1aXJlZCkhPT1udWxsJiZNciE9PXZvaWQgMD9NcjpBLGxvb3BFbnVtOihrZT15Lmxvb3BFbnVtKSE9PW51bGwmJmtlIT09dm9pZCAwP2tlOkEsbWV0YTooWHI9eS5tZXRhKSE9PW51bGwmJlhyIT09dm9pZCAwP1hyOiEwLG1lc3NhZ2VzOihkcj15Lm1lc3NhZ2VzKSE9PW51bGwmJmRyIT09dm9pZCAwP2RyOiEwLGlubGluZVJlZnM6KGhyPXkuaW5saW5lUmVmcykhPT1udWxsJiZociE9PXZvaWQgMD9ocjohMCxzY2hlbWFJZDoobXI9eS5zY2hlbWFJZCkhPT1udWxsJiZtciE9PXZvaWQgMD9tcjoiJGlkIixhZGRVc2VkU2NoZW1hOigkcj15LmFkZFVzZWRTY2hlbWEpIT09bnVsbCYmJHIhPT12b2lkIDA/JHI6ITAsdmFsaWRhdGVTY2hlbWE6KG9uPXkudmFsaWRhdGVTY2hlbWEpIT09bnVsbCYmb24hPT12b2lkIDA/b246ITAsdmFsaWRhdGVGb3JtYXRzOih5ZT15LnZhbGlkYXRlRm9ybWF0cykhPT1udWxsJiZ5ZSE9PXZvaWQgMD95ZTohMCx1bmljb2RlUmVnRXhwOihwcj15LnVuaWNvZGVSZWdFeHApIT09bnVsbCYmcHIhPT12b2lkIDA/cHI6ITAsaW50MzJyYW5nZTooanI9eS5pbnQzMnJhbmdlKSE9PW51bGwmJmpyIT09dm9pZCAwP2pyOiEwLHVyaVJlc29sdmVyOktufX1jbGFzcyBTe2NvbnN0cnVjdG9yKFI9e30pe3RoaXMuc2NoZW1hcz17fSx0aGlzLnJlZnM9e30sdGhpcy5mb3JtYXRzPXt9LHRoaXMuX2NvbXBpbGF0aW9ucz1uZXcgU2V0LHRoaXMuX2xvYWRpbmc9e30sdGhpcy5fY2FjaGU9bmV3IE1hcCxSPXRoaXMub3B0cz1ZKFkoe30sUiksVShSKSk7Y29uc3R7ZXM1OlAsbGluZXM6Z309dGhpcy5vcHRzLmNvZGU7dGhpcy5zY29wZT1uZXcgbC5WYWx1ZVNjb3BlKHtzY29wZTp7fSxwcmVmaXhlczpDLGVzNTpQLGxpbmVzOmd9KSx0aGlzLmxvZ2dlcj16KFIubG9nZ2VyKTtjb25zdCB1PVIudmFsaWRhdGVGb3JtYXRzO1IudmFsaWRhdGVGb3JtYXRzPSExLHRoaXMuUlVMRVM9KDAscy5nZXRSdWxlcykoKSxqLmNhbGwodGhpcyxULFIsIk5PVCBTVVBQT1JURUQiKSxqLmNhbGwodGhpcyxmLFIsIkRFUFJFQ0FURUQiLCJ3YXJuIiksdGhpcy5fbWV0YU9wdHM9Vy5jYWxsKHRoaXMpLFIuZm9ybWF0cyYmRy5jYWxsKHRoaXMpLHRoaXMuX2FkZFZvY2FidWxhcmllcygpLHRoaXMuX2FkZERlZmF1bHRNZXRhU2NoZW1hKCksUi5rZXl3b3JkcyYmRi5jYWxsKHRoaXMsUi5rZXl3b3JkcyksdHlwZW9mIFIubWV0YT09Im9iamVjdCImJnRoaXMuYWRkTWV0YVNjaGVtYShSLm1ldGEpLEguY2FsbCh0aGlzKSxSLnZhbGlkYXRlRm9ybWF0cz11fV9hZGRWb2NhYnVsYXJpZXMoKXt0aGlzLmFkZEtleXdvcmQoIiRhc3luYyIpfV9hZGREZWZhdWx0TWV0YVNjaGVtYSgpe2NvbnN0eyRkYXRhOlIsbWV0YTpQLHNjaGVtYUlkOmd9PXRoaXMub3B0cztsZXQgdT1oO2c9PT0iaWQiJiYodT1ZKHt9LGgpLHUuaWQ9dS4kaWQsZGVsZXRlIHUuJGlkKSxQJiZSJiZ0aGlzLmFkZE1ldGFTY2hlbWEodSx1W2ddLCExKX1kZWZhdWx0TWV0YSgpe2NvbnN0e21ldGE6UixzY2hlbWFJZDpQfT10aGlzLm9wdHM7cmV0dXJuIHRoaXMub3B0cy5kZWZhdWx0TWV0YT10eXBlb2YgUj09Im9iamVjdCI/UltQXXx8Ujp2b2lkIDB9dmFsaWRhdGUoUixQKXtsZXQgZztpZih0eXBlb2YgUj09InN0cmluZyIpe2lmKGc9dGhpcy5nZXRTY2hlbWEoUiksIWcpdGhyb3cgbmV3IEVycm9yKGBubyBzY2hlbWEgd2l0aCBrZXkgb3IgcmVmICIke1J9ImApfWVsc2UgZz10aGlzLmNvbXBpbGUoUik7Y29uc3QgdT1nKFApO3JldHVybiIkYXN5bmMiaW4gZ3x8KHRoaXMuZXJyb3JzPWcuZXJyb3JzKSx1fWNvbXBpbGUoUixQKXtjb25zdCBnPXRoaXMuX2FkZFNjaGVtYShSLFApO3JldHVybiBnLnZhbGlkYXRlfHx0aGlzLl9jb21waWxlU2NoZW1hRW52KGcpfWNvbXBpbGVBc3luYyhSLFApe2lmKHR5cGVvZiB0aGlzLm9wdHMubG9hZFNjaGVtYSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMubG9hZFNjaGVtYSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpO2NvbnN0e2xvYWRTY2hlbWE6Z309dGhpcy5vcHRzO3JldHVybiB1LmNhbGwodGhpcyxSLFApO2FzeW5jIGZ1bmN0aW9uIHUocmUsVGUpe2F3YWl0IHAuY2FsbCh0aGlzLHJlLiRzY2hlbWEpO2NvbnN0IHJuPXRoaXMuX2FkZFNjaGVtYShyZSxUZSk7cmV0dXJuIHJuLnZhbGlkYXRlfHx2LmNhbGwodGhpcyxybil9YXN5bmMgZnVuY3Rpb24gcChyZSl7cmUmJiF0aGlzLmdldFNjaGVtYShyZSkmJmF3YWl0IHUuY2FsbCh0aGlzLHskcmVmOnJlfSwhMCl9YXN5bmMgZnVuY3Rpb24gdihyZSl7dHJ5e3JldHVybiB0aGlzLl9jb21waWxlU2NoZW1hRW52KHJlKX1jYXRjaChUZSl7aWYoIShUZSBpbnN0YW5jZW9mIHQuZGVmYXVsdCkpdGhyb3cgVGU7cmV0dXJuIEwuY2FsbCh0aGlzLFRlKSxhd2FpdCBCLmNhbGwodGhpcyxUZS5taXNzaW5nU2NoZW1hKSx2LmNhbGwodGhpcyxyZSl9fWZ1bmN0aW9uIEwoe21pc3NpbmdTY2hlbWE6cmUsbWlzc2luZ1JlZjpUZX0pe2lmKHRoaXMucmVmc1tyZV0pdGhyb3cgbmV3IEVycm9yKGBBbnlTY2hlbWEgJHtyZX0gaXMgbG9hZGVkIGJ1dCAke1RlfSBjYW5ub3QgYmUgcmVzb2x2ZWRgKX1hc3luYyBmdW5jdGlvbiBCKHJlKXtjb25zdCBUZT1hd2FpdCBRLmNhbGwodGhpcyxyZSk7dGhpcy5yZWZzW3JlXXx8YXdhaXQgcC5jYWxsKHRoaXMsVGUuJHNjaGVtYSksdGhpcy5yZWZzW3JlXXx8dGhpcy5hZGRTY2hlbWEoVGUscmUsUCl9YXN5bmMgZnVuY3Rpb24gUShyZSl7Y29uc3QgVGU9dGhpcy5fbG9hZGluZ1tyZV07aWYoVGUpcmV0dXJuIFRlO3RyeXtyZXR1cm4gYXdhaXQodGhpcy5fbG9hZGluZ1tyZV09ZyhyZSkpfWZpbmFsbHl7ZGVsZXRlIHRoaXMuX2xvYWRpbmdbcmVdfX19YWRkU2NoZW1hKFIsUCxnLHU9dGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hKXtpZihBcnJheS5pc0FycmF5KFIpKXtmb3IoY29uc3QgdiBvZiBSKXRoaXMuYWRkU2NoZW1hKHYsdm9pZCAwLGcsdSk7cmV0dXJuIHRoaXN9bGV0IHA7aWYodHlwZW9mIFI9PSJvYmplY3QiKXtjb25zdHtzY2hlbWFJZDp2fT10aGlzLm9wdHM7aWYocD1SW3ZdLHAhPT12b2lkIDAmJnR5cGVvZiBwIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoYHNjaGVtYSAke3Z9IG11c3QgYmUgc3RyaW5nYCl9cmV0dXJuIFA9KDAsYy5ub3JtYWxpemVJZCkoUHx8cCksdGhpcy5fY2hlY2tVbmlxdWUoUCksdGhpcy5zY2hlbWFzW1BdPXRoaXMuX2FkZFNjaGVtYShSLGcsUCx1LCEwKSx0aGlzfWFkZE1ldGFTY2hlbWEoUixQLGc9dGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hKXtyZXR1cm4gdGhpcy5hZGRTY2hlbWEoUixQLCEwLGcpLHRoaXN9dmFsaWRhdGVTY2hlbWEoUixQKXtpZih0eXBlb2YgUj09ImJvb2xlYW4iKXJldHVybiEwO2xldCBnO2lmKGc9Ui4kc2NoZW1hLGchPT12b2lkIDAmJnR5cGVvZiBnIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIiRzY2hlbWEgbXVzdCBiZSBhIHN0cmluZyIpO2lmKGc9Z3x8dGhpcy5vcHRzLmRlZmF1bHRNZXRhfHx0aGlzLmRlZmF1bHRNZXRhKCksIWcpcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oIm1ldGEtc2NoZW1hIG5vdCBhdmFpbGFibGUiKSx0aGlzLmVycm9ycz1udWxsLCEwO2NvbnN0IHU9dGhpcy52YWxpZGF0ZShnLFIpO2lmKCF1JiZQKXtjb25zdCBwPSJzY2hlbWEgaXMgaW52YWxpZDogIit0aGlzLmVycm9yc1RleHQoKTtpZih0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWE9PT0ibG9nIil0aGlzLmxvZ2dlci5lcnJvcihwKTtlbHNlIHRocm93IG5ldyBFcnJvcihwKX1yZXR1cm4gdX1nZXRTY2hlbWEoUil7bGV0IFA7Zm9yKDt0eXBlb2YoUD1OLmNhbGwodGhpcyxSKSk9PSJzdHJpbmciOylSPVA7aWYoUD09PXZvaWQgMCl7Y29uc3R7c2NoZW1hSWQ6Z309dGhpcy5vcHRzLHU9bmV3IGkuU2NoZW1hRW52KHtzY2hlbWE6e30sc2NoZW1hSWQ6Z30pO2lmKFA9aS5yZXNvbHZlU2NoZW1hLmNhbGwodGhpcyx1LFIpLCFQKXJldHVybjt0aGlzLnJlZnNbUl09UH1yZXR1cm4gUC52YWxpZGF0ZXx8dGhpcy5fY29tcGlsZVNjaGVtYUVudihQKX1yZW1vdmVTY2hlbWEoUil7aWYoUiBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnNjaGVtYXMsUiksdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnJlZnMsUiksdGhpcztzd2l0Y2godHlwZW9mIFIpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4gdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnNjaGVtYXMpLHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5yZWZzKSx0aGlzLl9jYWNoZS5jbGVhcigpLHRoaXM7Y2FzZSJzdHJpbmciOntjb25zdCBQPU4uY2FsbCh0aGlzLFIpO3JldHVybiB0eXBlb2YgUD09Im9iamVjdCImJnRoaXMuX2NhY2hlLmRlbGV0ZShQLnNjaGVtYSksZGVsZXRlIHRoaXMuc2NoZW1hc1tSXSxkZWxldGUgdGhpcy5yZWZzW1JdLHRoaXN9Y2FzZSJvYmplY3QiOntjb25zdCBQPVI7dGhpcy5fY2FjaGUuZGVsZXRlKFApO2xldCBnPVJbdGhpcy5vcHRzLnNjaGVtYUlkXTtyZXR1cm4gZyYmKGc9KDAsYy5ub3JtYWxpemVJZCkoZyksZGVsZXRlIHRoaXMuc2NoZW1hc1tnXSxkZWxldGUgdGhpcy5yZWZzW2ddKSx0aGlzfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJhanYucmVtb3ZlU2NoZW1hOiBpbnZhbGlkIHBhcmFtZXRlciIpfX1hZGRWb2NhYnVsYXJ5KFIpe2Zvcihjb25zdCBQIG9mIFIpdGhpcy5hZGRLZXl3b3JkKFApO3JldHVybiB0aGlzfWFkZEtleXdvcmQoUixQKXtsZXQgZztpZih0eXBlb2YgUj09InN0cmluZyIpZz1SLHR5cGVvZiBQPT0ib2JqZWN0IiYmKHRoaXMubG9nZ2VyLndhcm4oInRoZXNlIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQsIHNlZSBkb2NzIGZvciBhZGRLZXl3b3JkIiksUC5rZXl3b3JkPWcpO2Vsc2UgaWYodHlwZW9mIFI9PSJvYmplY3QiJiZQPT09dm9pZCAwKXtpZihQPVIsZz1QLmtleXdvcmQsQXJyYXkuaXNBcnJheShnKSYmIWcubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYWRkS2V5d29yZHM6IGtleXdvcmQgbXVzdCBiZSBzdHJpbmcgb3Igbm9uLWVtcHR5IGFycmF5Iil9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYWRkS2V5d29yZHMgcGFyYW1ldGVycyIpO2lmKHEuY2FsbCh0aGlzLGcsUCksIVApcmV0dXJuKDAsYS5lYWNoSXRlbSkoZyxwPT5FZS5jYWxsKHRoaXMscCkpLHRoaXM7SGUuY2FsbCh0aGlzLFApO2NvbnN0IHU9bGUoWSh7fSxQKSx7dHlwZTooMCxtLmdldEpTT05UeXBlcykoUC50eXBlKSxzY2hlbWFUeXBlOigwLG0uZ2V0SlNPTlR5cGVzKShQLnNjaGVtYVR5cGUpfSk7cmV0dXJuKDAsYS5lYWNoSXRlbSkoZyx1LnR5cGUubGVuZ3RoPT09MD9wPT5FZS5jYWxsKHRoaXMscCx1KTpwPT51LnR5cGUuZm9yRWFjaCh2PT5FZS5jYWxsKHRoaXMscCx1LHYpKSksdGhpc31nZXRLZXl3b3JkKFIpe2NvbnN0IFA9dGhpcy5SVUxFUy5hbGxbUl07cmV0dXJuIHR5cGVvZiBQPT0ib2JqZWN0Ij9QLmRlZmluaXRpb246ISFQfXJlbW92ZUtleXdvcmQoUil7Y29uc3R7UlVMRVM6UH09dGhpcztkZWxldGUgUC5rZXl3b3Jkc1tSXSxkZWxldGUgUC5hbGxbUl07Zm9yKGNvbnN0IGcgb2YgUC5ydWxlcyl7Y29uc3QgdT1nLnJ1bGVzLmZpbmRJbmRleChwPT5wLmtleXdvcmQ9PT1SKTt1Pj0wJiZnLnJ1bGVzLnNwbGljZSh1LDEpfXJldHVybiB0aGlzfWFkZEZvcm1hdChSLFApe3JldHVybiB0eXBlb2YgUD09InN0cmluZyImJihQPW5ldyBSZWdFeHAoUCkpLHRoaXMuZm9ybWF0c1tSXT1QLHRoaXN9ZXJyb3JzVGV4dChSPXRoaXMuZXJyb3JzLHtzZXBhcmF0b3I6UD0iLCAiLGRhdGFWYXI6Zz0iZGF0YSJ9PXt9KXtyZXR1cm4hUnx8Ui5sZW5ndGg9PT0wPyJObyBlcnJvcnMiOlIubWFwKHU9PmAke2d9JHt1Lmluc3RhbmNlUGF0aH0gJHt1Lm1lc3NhZ2V9YCkucmVkdWNlKCh1LHApPT51K1ArcCl9JGRhdGFNZXRhU2NoZW1hKFIsUCl7Y29uc3QgZz10aGlzLlJVTEVTLmFsbDtSPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoUikpO2Zvcihjb25zdCB1IG9mIFApe2NvbnN0IHA9dS5zcGxpdCgiLyIpLnNsaWNlKDEpO2xldCB2PVI7Zm9yKGNvbnN0IEwgb2YgcCl2PXZbTF07Zm9yKGNvbnN0IEwgaW4gZyl7Y29uc3QgQj1nW0xdO2lmKHR5cGVvZiBCIT0ib2JqZWN0Iiljb250aW51ZTtjb25zdHskZGF0YTpRfT1CLmRlZmluaXRpb24scmU9dltMXTtRJiZyZSYmKHZbTF09bHIocmUpKX19cmV0dXJuIFJ9X3JlbW92ZUFsbFNjaGVtYXMoUixQKXtmb3IoY29uc3QgZyBpbiBSKXtjb25zdCB1PVJbZ107KCFQfHxQLnRlc3QoZykpJiYodHlwZW9mIHU9PSJzdHJpbmciP2RlbGV0ZSBSW2ddOnUmJiF1Lm1ldGEmJih0aGlzLl9jYWNoZS5kZWxldGUodS5zY2hlbWEpLGRlbGV0ZSBSW2ddKSl9fV9hZGRTY2hlbWEoUixQLGcsdT10aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEscD10aGlzLm9wdHMuYWRkVXNlZFNjaGVtYSl7bGV0IHY7Y29uc3R7c2NoZW1hSWQ6TH09dGhpcy5vcHRzO2lmKHR5cGVvZiBSPT0ib2JqZWN0Iil2PVJbTF07ZWxzZXtpZih0aGlzLm9wdHMuanRkKXRocm93IG5ldyBFcnJvcigic2NoZW1hIG11c3QgYmUgb2JqZWN0Iik7aWYodHlwZW9mIFIhPSJib29sZWFuIil0aHJvdyBuZXcgRXJyb3IoInNjaGVtYSBtdXN0IGJlIG9iamVjdCBvciBib29sZWFuIil9bGV0IEI9dGhpcy5fY2FjaGUuZ2V0KFIpO2lmKEIhPT12b2lkIDApcmV0dXJuIEI7Zz0oMCxjLm5vcm1hbGl6ZUlkKSh2fHxnKTtjb25zdCBRPWMuZ2V0U2NoZW1hUmVmcy5jYWxsKHRoaXMsUixnKTtyZXR1cm4gQj1uZXcgaS5TY2hlbWFFbnYoe3NjaGVtYTpSLHNjaGVtYUlkOkwsbWV0YTpQLGJhc2VJZDpnLGxvY2FsUmVmczpRfSksdGhpcy5fY2FjaGUuc2V0KEIuc2NoZW1hLEIpLHAmJiFnLnN0YXJ0c1dpdGgoIiMiKSYmKGcmJnRoaXMuX2NoZWNrVW5pcXVlKGcpLHRoaXMucmVmc1tnXT1CKSx1JiZ0aGlzLnZhbGlkYXRlU2NoZW1hKFIsITApLEJ9X2NoZWNrVW5pcXVlKFIpe2lmKHRoaXMuc2NoZW1hc1tSXXx8dGhpcy5yZWZzW1JdKXRocm93IG5ldyBFcnJvcihgc2NoZW1hIHdpdGgga2V5IG9yIGlkICIke1J9IiBhbHJlYWR5IGV4aXN0c2ApfV9jb21waWxlU2NoZW1hRW52KFIpe2lmKFIubWV0YT90aGlzLl9jb21waWxlTWV0YVNjaGVtYShSKTppLmNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLFIpLCFSLnZhbGlkYXRlKXRocm93IG5ldyBFcnJvcigiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yIik7cmV0dXJuIFIudmFsaWRhdGV9X2NvbXBpbGVNZXRhU2NoZW1hKFIpe2NvbnN0IFA9dGhpcy5vcHRzO3RoaXMub3B0cz10aGlzLl9tZXRhT3B0czt0cnl7aS5jb21waWxlU2NoZW1hLmNhbGwodGhpcyxSKX1maW5hbGx5e3RoaXMub3B0cz1QfX19ZS5kZWZhdWx0PVMsUy5WYWxpZGF0aW9uRXJyb3I9by5kZWZhdWx0LFMuTWlzc2luZ1JlZkVycm9yPXQuZGVmYXVsdDtmdW5jdGlvbiBqKHksUixQLGc9ImVycm9yIil7Zm9yKGNvbnN0IHUgaW4geSl7Y29uc3QgcD11O3AgaW4gUiYmdGhpcy5sb2dnZXJbZ10oYCR7UH06IG9wdGlvbiAke3V9LiAke3lbcF19YCl9fWZ1bmN0aW9uIE4oeSl7cmV0dXJuIHk9KDAsYy5ub3JtYWxpemVJZCkoeSksdGhpcy5zY2hlbWFzW3ldfHx0aGlzLnJlZnNbeV19ZnVuY3Rpb24gSCgpe2NvbnN0IHk9dGhpcy5vcHRzLnNjaGVtYXM7aWYoISF5KWlmKEFycmF5LmlzQXJyYXkoeSkpdGhpcy5hZGRTY2hlbWEoeSk7ZWxzZSBmb3IoY29uc3QgUiBpbiB5KXRoaXMuYWRkU2NoZW1hKHlbUl0sUil9ZnVuY3Rpb24gRygpe2Zvcihjb25zdCB5IGluIHRoaXMub3B0cy5mb3JtYXRzKXtjb25zdCBSPXRoaXMub3B0cy5mb3JtYXRzW3ldO1ImJnRoaXMuYWRkRm9ybWF0KHksUil9fWZ1bmN0aW9uIEYoeSl7aWYoQXJyYXkuaXNBcnJheSh5KSl7dGhpcy5hZGRWb2NhYnVsYXJ5KHkpO3JldHVybn10aGlzLmxvZ2dlci53YXJuKCJrZXl3b3JkcyBvcHRpb24gYXMgbWFwIGlzIGRlcHJlY2F0ZWQsIHBhc3MgYXJyYXkiKTtmb3IoY29uc3QgUiBpbiB5KXtjb25zdCBQPXlbUl07UC5rZXl3b3JkfHwoUC5rZXl3b3JkPVIpLHRoaXMuYWRkS2V5d29yZChQKX19ZnVuY3Rpb24gVygpe2NvbnN0IHk9WSh7fSx0aGlzLm9wdHMpO2Zvcihjb25zdCBSIG9mIHcpZGVsZXRlIHlbUl07cmV0dXJuIHl9Y29uc3QgbWU9e2xvZygpe30sd2Fybigpe30sZXJyb3IoKXt9fTtmdW5jdGlvbiB6KHkpe2lmKHk9PT0hMSlyZXR1cm4gbWU7aWYoeT09PXZvaWQgMClyZXR1cm4gY29uc29sZTtpZih5LmxvZyYmeS53YXJuJiZ5LmVycm9yKXJldHVybiB5O3Rocm93IG5ldyBFcnJvcigibG9nZ2VyIG11c3QgaW1wbGVtZW50IGxvZywgd2FybiBhbmQgZXJyb3IgbWV0aG9kcyIpfWNvbnN0IGllPS9eW2Etel8kXVthLXowLTlfJDotXSokL2k7ZnVuY3Rpb24gcSh5LFIpe2NvbnN0e1JVTEVTOlB9PXRoaXM7aWYoKDAsYS5lYWNoSXRlbSkoeSxnPT57aWYoUC5rZXl3b3Jkc1tnXSl0aHJvdyBuZXcgRXJyb3IoYEtleXdvcmQgJHtnfSBpcyBhbHJlYWR5IGRlZmluZWRgKTtpZighaWUudGVzdChnKSl0aHJvdyBuZXcgRXJyb3IoYEtleXdvcmQgJHtnfSBoYXMgaW52YWxpZCBuYW1lYCl9KSwhIVImJlIuJGRhdGEmJiEoImNvZGUiaW4gUnx8InZhbGlkYXRlImluIFIpKXRocm93IG5ldyBFcnJvcignJGRhdGEga2V5d29yZCBtdXN0IGhhdmUgImNvZGUiIG9yICJ2YWxpZGF0ZSIgZnVuY3Rpb24nKX1mdW5jdGlvbiBFZSh5LFIsUCl7dmFyIGc7Y29uc3QgdT1SPT1udWxsP3ZvaWQgMDpSLnBvc3Q7aWYoUCYmdSl0aHJvdyBuZXcgRXJyb3IoJ2tleXdvcmQgd2l0aCAicG9zdCIgZmxhZyBjYW5ub3QgaGF2ZSAidHlwZSInKTtjb25zdHtSVUxFUzpwfT10aGlzO2xldCB2PXU/cC5wb3N0OnAucnVsZXMuZmluZCgoe3R5cGU6Qn0pPT5CPT09UCk7aWYodnx8KHY9e3R5cGU6UCxydWxlczpbXX0scC5ydWxlcy5wdXNoKHYpKSxwLmtleXdvcmRzW3ldPSEwLCFSKXJldHVybjtjb25zdCBMPXtrZXl3b3JkOnksZGVmaW5pdGlvbjpsZShZKHt9LFIpLHt0eXBlOigwLG0uZ2V0SlNPTlR5cGVzKShSLnR5cGUpLHNjaGVtYVR5cGU6KDAsbS5nZXRKU09OVHlwZXMpKFIuc2NoZW1hVHlwZSl9KX07Ui5iZWZvcmU/T2UuY2FsbCh0aGlzLHYsTCxSLmJlZm9yZSk6di5ydWxlcy5wdXNoKEwpLHAuYWxsW3ldPUwsKGc9Ui5pbXBsZW1lbnRzKT09PW51bGx8fGc9PT12b2lkIDB8fGcuZm9yRWFjaChCPT50aGlzLmFkZEtleXdvcmQoQikpfWZ1bmN0aW9uIE9lKHksUixQKXtjb25zdCBnPXkucnVsZXMuZmluZEluZGV4KHU9PnUua2V5d29yZD09PVApO2c+PTA/eS5ydWxlcy5zcGxpY2UoZywwLFIpOih5LnJ1bGVzLnB1c2goUiksdGhpcy5sb2dnZXIud2FybihgcnVsZSAke1B9IGlzIG5vdCBkZWZpbmVkYCkpfWZ1bmN0aW9uIEhlKHkpe2xldHttZXRhU2NoZW1hOlJ9PXk7UiE9PXZvaWQgMCYmKHkuJGRhdGEmJnRoaXMub3B0cy4kZGF0YSYmKFI9bHIoUikpLHkudmFsaWRhdGVTY2hlbWE9dGhpcy5jb21waWxlKFIsITApKX1jb25zdCBGZT17JHJlZjoiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jIn07ZnVuY3Rpb24gbHIoeSl7cmV0dXJue2FueU9mOlt5LEZlXX19fShvcyk7dmFyIHJ0PXt9LGtuPXt9LE1uPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShNbiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTW4uY2FsbFJlZj1Nbi5nZXRWYWxpZGF0ZT12b2lkIDA7Y29uc3Qgal89TG4seXM9b2UsQ2U9X2Usc3I9TWUsTHM9UGUsY289QWUseF89e2tleXdvcmQ6IiRyZWYiLHNjaGVtYVR5cGU6InN0cmluZyIsY29kZShlKXtjb25zdHtnZW46bixzY2hlbWE6cixpdDpvfT1lLHtiYXNlSWQ6dCxzY2hlbWFFbnY6cyx2YWxpZGF0ZU5hbWU6aSxvcHRzOmwsc2VsZjpjfT1vLHtyb290Om19PXM7aWYoKHI9PT0iIyJ8fHI9PT0iIy8iKSYmdD09PW0uYmFzZUlkKXJldHVybiBoKCk7Y29uc3QgYT1Mcy5yZXNvbHZlUmVmLmNhbGwoYyxtLHQscik7aWYoYT09PXZvaWQgMCl0aHJvdyBuZXcgal8uZGVmYXVsdChvLm9wdHMudXJpUmVzb2x2ZXIsdCxyKTtpZihhIGluc3RhbmNlb2YgTHMuU2NoZW1hRW52KXJldHVybiBPKGEpO3JldHVybiBEKGEpO2Z1bmN0aW9uIGgoKXtpZihzPT09bSlyZXR1cm4gaG8oZSxpLHMscy4kYXN5bmMpO2NvbnN0IHc9bi5zY29wZVZhbHVlKCJyb290Iix7cmVmOm19KTtyZXR1cm4gaG8oZSwoMCxDZS5fKWAke3d9LnZhbGlkYXRlYCxtLG0uJGFzeW5jKX1mdW5jdGlvbiBPKHcpe2NvbnN0IEM9QnMoZSx3KTtobyhlLEMsdyx3LiRhc3luYyl9ZnVuY3Rpb24gRCh3KXtjb25zdCBDPW4uc2NvcGVWYWx1ZSgic2NoZW1hIixsLmNvZGUuc291cmNlPT09ITA/e3JlZjp3LGNvZGU6KDAsQ2Uuc3RyaW5naWZ5KSh3KX06e3JlZjp3fSksVD1uLm5hbWUoInZhbGlkIiksZj1lLnN1YnNjaGVtYSh7c2NoZW1hOncsZGF0YVR5cGVzOltdLHNjaGVtYVBhdGg6Q2UubmlsLHRvcFNjaGVtYVJlZjpDLGVyclNjaGVtYVBhdGg6cn0sVCk7ZS5tZXJnZUV2YWx1YXRlZChmKSxlLm9rKFQpfX19O2Z1bmN0aW9uIEJzKGUsbil7Y29uc3R7Z2VuOnJ9PWU7cmV0dXJuIG4udmFsaWRhdGU/ci5zY29wZVZhbHVlKCJ2YWxpZGF0ZSIse3JlZjpuLnZhbGlkYXRlfSk6KDAsQ2UuXylgJHtyLnNjb3BlVmFsdWUoIndyYXBwZXIiLHtyZWY6bn0pfS52YWxpZGF0ZWB9TW4uZ2V0VmFsaWRhdGU9QnM7ZnVuY3Rpb24gaG8oZSxuLHIsbyl7Y29uc3R7Z2VuOnQsaXQ6c309ZSx7YWxsRXJyb3JzOmksc2NoZW1hRW52Omwsb3B0czpjfT1zLG09Yy5wYXNzQ29udGV4dD9zci5kZWZhdWx0LnRoaXM6Q2UubmlsO28/YSgpOmgoKTtmdW5jdGlvbiBhKCl7aWYoIWwuJGFzeW5jKXRocm93IG5ldyBFcnJvcigiYXN5bmMgc2NoZW1hIHJlZmVyZW5jZWQgYnkgc3luYyBzY2hlbWEiKTtjb25zdCB3PXQubGV0KCJ2YWxpZCIpO3QudHJ5KCgpPT57dC5jb2RlKCgwLENlLl8pYGF3YWl0ICR7KDAseXMuY2FsbFZhbGlkYXRlQ29kZSkoZSxuLG0pfWApLEQobiksaXx8dC5hc3NpZ24odywhMCl9LEM9Pnt0LmlmKCgwLENlLl8pYCEoJHtDfSBpbnN0YW5jZW9mICR7cy5WYWxpZGF0aW9uRXJyb3J9KWAsKCk9PnQudGhyb3coQykpLE8oQyksaXx8dC5hc3NpZ24odywhMSl9KSxlLm9rKHcpfWZ1bmN0aW9uIGgoKXtlLnJlc3VsdCgoMCx5cy5jYWxsVmFsaWRhdGVDb2RlKShlLG4sbSksKCk9PkQobiksKCk9Pk8obikpfWZ1bmN0aW9uIE8odyl7Y29uc3QgQz0oMCxDZS5fKWAke3d9LmVycm9yc2A7dC5hc3NpZ24oc3IuZGVmYXVsdC52RXJyb3JzLCgwLENlLl8pYCR7c3IuZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbCA/ICR7Q30gOiAke3NyLmRlZmF1bHQudkVycm9yc30uY29uY2F0KCR7Q30pYCksdC5hc3NpZ24oc3IuZGVmYXVsdC5lcnJvcnMsKDAsQ2UuXylgJHtzci5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApfWZ1bmN0aW9uIEQodyl7dmFyIEM7aWYoIXMub3B0cy51bmV2YWx1YXRlZClyZXR1cm47Y29uc3QgVD0oQz1yPT1udWxsP3ZvaWQgMDpyLnZhbGlkYXRlKT09PW51bGx8fEM9PT12b2lkIDA/dm9pZCAwOkMuZXZhbHVhdGVkO2lmKHMucHJvcHMhPT0hMClpZihUJiYhVC5keW5hbWljUHJvcHMpVC5wcm9wcyE9PXZvaWQgMCYmKHMucHJvcHM9Y28ubWVyZ2VFdmFsdWF0ZWQucHJvcHModCxULnByb3BzLHMucHJvcHMpKTtlbHNle2NvbnN0IGY9dC52YXIoInByb3BzIiwoMCxDZS5fKWAke3d9LmV2YWx1YXRlZC5wcm9wc2ApO3MucHJvcHM9Y28ubWVyZ2VFdmFsdWF0ZWQucHJvcHModCxmLHMucHJvcHMsQ2UuTmFtZSl9aWYocy5pdGVtcyE9PSEwKWlmKFQmJiFULmR5bmFtaWNJdGVtcylULml0ZW1zIT09dm9pZCAwJiYocy5pdGVtcz1jby5tZXJnZUV2YWx1YXRlZC5pdGVtcyh0LFQuaXRlbXMscy5pdGVtcykpO2Vsc2V7Y29uc3QgZj10LnZhcigiaXRlbXMiLCgwLENlLl8pYCR7d30uZXZhbHVhdGVkLml0ZW1zYCk7cy5pdGVtcz1jby5tZXJnZUV2YWx1YXRlZC5pdGVtcyh0LGYscy5pdGVtcyxDZS5OYW1lKX19fU1uLmNhbGxSZWY9aG8sTW4uZGVmYXVsdD14Xzt2YXIgWGU9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KFhlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYZS5jaGVja01ldGFkYXRhPXZvaWQgMDtjb25zdCBGXz1BZSxWXz17a2V5d29yZDoibWV0YWRhdGEiLHNjaGVtYVR5cGU6Im9iamVjdCIsY29kZShlKXtrcyhlKTtjb25zdHtnZW46bixzY2hlbWE6cixpdDpvfT1lO2lmKCgwLEZfLmFsd2F5c1ZhbGlkU2NoZW1hKShvLHIpKXJldHVybjtjb25zdCB0PW4ubmFtZSgidmFsaWQiKTtlLnN1YnNjaGVtYSh7a2V5d29yZDoibWV0YWRhdGEiLGp0ZE1ldGFkYXRhOiEwfSx0KSxlLm9rKHQpfX07ZnVuY3Rpb24ga3Moe2l0OmUsa2V5d29yZDpufSxyKXtpZihlLmp0ZE1ldGFkYXRhIT09cil0aHJvdyBuZXcgRXJyb3IoYEpURDogIiR7bn0iIGNhbm5vdCBiZSB1c2VkIGluIHRoaXMgc2NoZW1hIGxvY2F0aW9uYCl9WGUuY2hlY2tNZXRhZGF0YT1rcyxYZS5kZWZhdWx0PVZfLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrbiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksa24uaGFzUmVmPXZvaWQgMDtjb25zdCBNcz1QZSxicj1fZSxLXz1MbixYcz1NZSwkcz1NbixXXz1YZSxZXz17a2V5d29yZDoicmVmIixzY2hlbWFUeXBlOiJzdHJpbmciLGNvZGUoZSl7KDAsV18uY2hlY2tNZXRhZGF0YSkoZSk7Y29uc3R7Z2VuOm4sZGF0YTpyLHNjaGVtYTpvLHBhcmVudFNjaGVtYTp0LGl0OnN9PWUse3NjaGVtYUVudjp7cm9vdDppfX09cyxsPW4ubmFtZSgidmFsaWQiKTt0Lm51bGxhYmxlPyhuLnZhcihsLCgwLGJyLl8pYCR7cn0gPT09IG51bGxgKSxuLmlmKCgwLGJyLm5vdCkobCksYykpOihuLnZhcihsLCExKSxjKCkpLGUub2sobCk7ZnVuY3Rpb24gYygpe3ZhciBoO2NvbnN0IE89KGg9aS5zY2hlbWEuZGVmaW5pdGlvbnMpPT09bnVsbHx8aD09PXZvaWQgMD92b2lkIDA6aFtvXTtpZighTyl0aHJvdyBuZXcgS18uZGVmYXVsdChzLm9wdHMudXJpUmVzb2x2ZXIsIiIsbyxgTm8gZGVmaW5pdGlvbiAke299YCk7b3QoTyl8fCFzLm9wdHMuaW5saW5lUmVmcz9tKE8pOmEoTyl9ZnVuY3Rpb24gbShoKXtjb25zdCBPPU1zLmNvbXBpbGVTY2hlbWEuY2FsbChzLnNlbGYsbmV3IE1zLlNjaGVtYUVudih7c2NoZW1hOmgscm9vdDppLHNjaGVtYVBhdGg6YC9kZWZpbml0aW9ucy8ke299YH0pKSxEPSgwLCRzLmdldFZhbGlkYXRlKShlLE8pLHc9bi5jb25zdCgiX2VycnMiLFhzLmRlZmF1bHQuZXJyb3JzKTsoMCwkcy5jYWxsUmVmKShlLEQsTyxPLiRhc3luYyksbi5hc3NpZ24obCwoMCxici5fKWAke3d9ID09PSAke1hzLmRlZmF1bHQuZXJyb3JzfWApfWZ1bmN0aW9uIGEoaCl7Y29uc3QgTz1uLnNjb3BlVmFsdWUoInNjaGVtYSIscy5vcHRzLmNvZGUuc291cmNlPT09ITA/e3JlZjpoLGNvZGU6KDAsYnIuc3RyaW5naWZ5KShoKX06e3JlZjpofSk7ZS5zdWJzY2hlbWEoe3NjaGVtYTpoLGRhdGFUeXBlczpbXSxzY2hlbWFQYXRoOmJyLm5pbCx0b3BTY2hlbWFSZWY6TyxlcnJTY2hlbWFQYXRoOmAvZGVmaW5pdGlvbnMvJHtvfWB9LGwpfX19O2Z1bmN0aW9uIG90KGUpe2Zvcihjb25zdCBuIGluIGUpe2xldCByO2lmKG49PT0icmVmInx8dHlwZW9mKHI9ZVtuXSk9PSJvYmplY3QiJiZvdChyKSlyZXR1cm4hMH1yZXR1cm4hMX1rbi5oYXNSZWY9b3Qsa24uZGVmYXVsdD1ZXzt2YXIgdHQ9e30sbW89e307T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBKXz0vdHxccy9pLHpfPS9eKFxkXGRcZFxkKS0oXGRcZCktKFxkXGQpJC8scV89L14oXGRcZCk6KFxkXGQpOihcZFxkKSg/OlwuXGQrKT8oPzp6fChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/KSQvaSxRXz1bMCwzMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07ZnVuY3Rpb24ganMoZSxuKXtjb25zdCByPWUuc3BsaXQoSl8pO3JldHVybiByLmxlbmd0aD09PTImJnhzKHJbMF0pJiZaXyhyWzFdKXx8biYmci5sZW5ndGg9PT0xJiZ4cyhyWzBdKX1tby5kZWZhdWx0PWpzO2Z1bmN0aW9uIHhzKGUpe2NvbnN0IG49el8uZXhlYyhlKTtpZighbilyZXR1cm4hMTtjb25zdCByPStuWzFdLG89K25bMl0sdD0rblszXTtyZXR1cm4gbz49MSYmbzw9MTImJnQ+PTEmJih0PD1RX1tvXXx8bz09PTImJnQ9PT0yOSYmKHIlMTAwPT09MD9yJTQwMD09PTA6ciU0PT09MCkpfWZ1bmN0aW9uIFpfKGUpe2NvbnN0IG49cV8uZXhlYyhlKTtpZighbilyZXR1cm4hMTtjb25zdCByPStuWzFdLG89K25bMl0sdD0rblszXSxzPSsobls0XXx8MCksaT0rKG5bNV18fDApO3JldHVybiByPD0yMyYmbzw9NTkmJnQ8PTU5fHxyLXM9PT0yMyYmby1pPT09NTkmJnQ9PT02MH1qcy5jb2RlPSdyZXF1aXJlKCJhanYvZGlzdC9ydW50aW1lL3RpbWVzdGFtcCIpLmRlZmF1bHQnO3ZhciAkZT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLCRlLnR5cGVFcnJvclBhcmFtcz0kZS50eXBlRXJyb3JNZXNzYWdlPSRlLnR5cGVFcnJvcj12b2lkIDA7Y29uc3QgZWw9X2U7ZnVuY3Rpb24gbmwoZSl7cmV0dXJue21lc3NhZ2U6bj0+RnMobixlKSxwYXJhbXM6bj0+VnMobixlKX19JGUudHlwZUVycm9yPW5sO2Z1bmN0aW9uIEZzKHtwYXJlbnRTY2hlbWE6ZX0sbil7cmV0dXJuIGUhPW51bGwmJmUubnVsbGFibGU/YG11c3QgYmUgJHtufSBvciBudWxsYDpgbXVzdCBiZSAke259YH0kZS50eXBlRXJyb3JNZXNzYWdlPUZzO2Z1bmN0aW9uIFZzKHtwYXJlbnRTY2hlbWE6ZX0sbil7cmV0dXJuKDAsZWwuXylge3R5cGU6ICR7bn0sIG51bGxhYmxlOiAkeyEhKGUhPW51bGwmJmUubnVsbGFibGUpfX1gfSRlLnR5cGVFcnJvclBhcmFtcz1WcyxmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5pbnRSYW5nZT12b2lkIDA7Y29uc3Qgbj1fZSxyPW1vLG89QWUsdD1YZSxzPSRlO2UuaW50UmFuZ2U9e2ludDg6Wy0xMjgsMTI3LDNdLHVpbnQ4OlswLDI1NSwzXSxpbnQxNjpbLTMyNzY4LDMyNzY3LDVdLHVpbnQxNjpbMCw2NTUzNSw1XSxpbnQzMjpbLTIxNDc0ODM2NDgsMjE0NzQ4MzY0NywxMF0sdWludDMyOlswLDQyOTQ5NjcyOTUsMTBdfTtjb25zdCBpPXttZXNzYWdlOm09PigwLHMudHlwZUVycm9yTWVzc2FnZSkobSxtLnNjaGVtYSkscGFyYW1zOm09PigwLHMudHlwZUVycm9yUGFyYW1zKShtLG0uc2NoZW1hKX07ZnVuY3Rpb24gbChtKXtjb25zdHtnZW46YSxkYXRhOmgsaXQ6T309bSx7dGltZXN0YW1wOkQsYWxsb3dEYXRlOnd9PU8ub3B0cztpZihEPT09ImRhdGUiKXJldHVybigwLG4uXylgJHtofSBpbnN0YW5jZW9mIERhdGUgYDtjb25zdCBDPSgwLG8udXNlRnVuYykoYSxyLmRlZmF1bHQpLFQ9dz8oMCxuLl8pYCwgdHJ1ZWA6bi5uaWwsZj0oMCxuLl8pYHR5cGVvZiAke2h9ID09ICJzdHJpbmciICYmICR7Q30oJHtofSR7VH0pYDtyZXR1cm4gRD09PSJzdHJpbmciP2Y6KDAsbi5vcikoKDAsbi5fKWAke2h9IGluc3RhbmNlb2YgRGF0ZWAsZil9Y29uc3QgYz17a2V5d29yZDoidHlwZSIsc2NoZW1hVHlwZToic3RyaW5nIixlcnJvcjppLGNvZGUobSl7KDAsdC5jaGVja01ldGFkYXRhKShtKTtjb25zdHtkYXRhOmEsc2NoZW1hOmgscGFyZW50U2NoZW1hOk8saXQ6RH09bTtsZXQgdztzd2l0Y2goaCl7Y2FzZSJib29sZWFuIjpjYXNlInN0cmluZyI6dz0oMCxuLl8pYHR5cGVvZiAke2F9ID09ICR7aH1gO2JyZWFrO2Nhc2UidGltZXN0YW1wIjp7dz1sKG0pO2JyZWFrfWNhc2UiZmxvYXQzMiI6Y2FzZSJmbG9hdDY0Ijp3PSgwLG4uXylgdHlwZW9mICR7YX0gPT0gIm51bWJlciJgO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IEM9aDtpZih3PSgwLG4uXylgdHlwZW9mICR7YX0gPT0gIm51bWJlciIgJiYgaXNGaW5pdGUoJHthfSkgJiYgISgke2F9ICUgMSlgLCFELm9wdHMuaW50MzJyYW5nZSYmKEM9PT0iaW50MzIifHxDPT09InVpbnQzMiIpKUM9PT0idWludDMyIiYmKHc9KDAsbi5fKWAke3d9ICYmICR7YX0gPj0gMGApO2Vsc2V7Y29uc3RbVCxmXT1lLmludFJhbmdlW0NdO3c9KDAsbi5fKWAke3d9ICYmICR7YX0gPj0gJHtUfSAmJiAke2F9IDw9ICR7Zn1gfX19bS5wYXNzKE8ubnVsbGFibGU/KDAsbi5vcikoKDAsbi5fKWAke2F9ID09PSBudWxsYCx3KTp3KX19O2UuZGVmYXVsdD1jfSh0dCk7dmFyIHN0PXt9LFplPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShaZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWmUuY2hlY2tOdWxsYWJsZU9iamVjdD1aZS5jaGVja051bGxhYmxlPXZvaWQgMDtjb25zdCBwbz1fZTtmdW5jdGlvbiBLcyh7Z2VuOmUsZGF0YTpuLHBhcmVudFNjaGVtYTpyfSxvPXBvLm5pbCl7Y29uc3QgdD1lLm5hbWUoInZhbGlkIik7cmV0dXJuIHIubnVsbGFibGU/KGUubGV0KHQsKDAscG8uXylgJHtufSA9PT0gbnVsbGApLG89KDAscG8ubm90KSh0KSk6ZS5sZXQodCwhMSksW3Qsb119WmUuY2hlY2tOdWxsYWJsZT1LcztmdW5jdGlvbiBybChlLG4pe2NvbnN0W3Isb109S3MoZSxuKTtyZXR1cm5bciwoMCxwby5fKWAke299ICYmIHR5cGVvZiAke2UuZGF0YX0gPT0gIm9iamVjdCIgJiYgIUFycmF5LmlzQXJyYXkoJHtlLmRhdGF9KWBdfVplLmNoZWNrTnVsbGFibGVPYmplY3Q9cmwsT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBJbj1fZSxvbD1YZSx0bD1aZSxzbD17a2V5d29yZDoiZW51bSIsc2NoZW1hVHlwZToiYXJyYXkiLGVycm9yOnttZXNzYWdlOiJtdXN0IGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgYWxsb3dlZCB2YWx1ZXMiLHBhcmFtczooe3NjaGVtYUNvZGU6ZX0pPT4oMCxJbi5fKWB7YWxsb3dlZFZhbHVlczogJHtlfX1gfSxjb2RlKGUpeygwLG9sLmNoZWNrTWV0YWRhdGEpKGUpO2NvbnN0e2dlbjpuLGRhdGE6cixzY2hlbWE6byxzY2hlbWFWYWx1ZTp0LHBhcmVudFNjaGVtYTpzLGl0Oml9PWU7aWYoby5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiZW51bSBtdXN0IGhhdmUgbm9uLWVtcHR5IGFycmF5Iik7aWYoby5sZW5ndGghPT1uZXcgU2V0KG8pLnNpemUpdGhyb3cgbmV3IEVycm9yKCJlbnVtIGl0ZW1zIG11c3QgYmUgdW5pcXVlIik7bGV0IGw7Y29uc3QgYz0oMCxJbi5fKWB0eXBlb2YgJHtyfSA9PSAic3RyaW5nImA7aWYoby5sZW5ndGg+PWkub3B0cy5sb29wRW51bSl7bGV0IGE7W2wsYV09KDAsdGwuY2hlY2tOdWxsYWJsZSkoZSxjKSxuLmlmKGEsbSl9ZWxzZXtpZighQXJyYXkuaXNBcnJheShvKSl0aHJvdyBuZXcgRXJyb3IoImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvciIpO2w9KDAsSW4uYW5kKShjLCgwLEluLm9yKSguLi5vLm1hcChhPT4oMCxJbi5fKWAke3J9ID09PSAke2F9YCkpKSxzLm51bGxhYmxlJiYobD0oMCxJbi5vcikoKDAsSW4uXylgJHtyfSA9PT0gbnVsbGAsbCkpfWUucGFzcyhsKTtmdW5jdGlvbiBtKCl7bi5mb3JPZigidiIsdCxhPT5uLmlmKCgwLEluLl8pYCR7bH0gPSAke3J9ID09PSAke2F9YCwoKT0+bi5icmVhaygpKSl9fX07c3QuZGVmYXVsdD1zbDt2YXIgaXQ9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBpbD1BZSxhbD1vZSxXcz1fZSx1bD1YZSxfbD1aZSxsbD17a2V5d29yZDoiZWxlbWVudHMiLHNjaGVtYVR5cGU6Im9iamVjdCIsZXJyb3I6KDAsJGUudHlwZUVycm9yKSgiYXJyYXkiKSxjb2RlKGUpeygwLHVsLmNoZWNrTWV0YWRhdGEpKGUpO2NvbnN0e2dlbjpuLGRhdGE6cixzY2hlbWE6byxpdDp0fT1lO2lmKCgwLGlsLmFsd2F5c1ZhbGlkU2NoZW1hKSh0LG8pKXJldHVybjtjb25zdFtzXT0oMCxfbC5jaGVja051bGxhYmxlKShlKTtuLmlmKCgwLFdzLm5vdCkocyksKCk9Pm4uaWYoKDAsV3MuXylgQXJyYXkuaXNBcnJheSgke3J9KWAsKCk9Pm4uYXNzaWduKHMsKDAsYWwudmFsaWRhdGVBcnJheSkoZSkpLCgpPT5lLmVycm9yKCkpKSxlLm9rKHMpfX07aXQuZGVmYXVsdD1sbDt2YXIgYXQ9e307KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLnZhbGlkYXRlUHJvcGVydGllcz1lLmVycm9yPXZvaWQgMDtjb25zdCBuPW9lLHI9QWUsbz1fZSx0PVhlLHM9WmUsaT0kZTt2YXIgbDsoZnVuY3Rpb24oYSl7YS5BZGRpdGlvbmFsPSJhZGRpdGlvbmFsIixhLk1pc3Npbmc9Im1pc3NpbmcifSkobHx8KGw9e30pKSxlLmVycm9yPXttZXNzYWdlOmE9Pntjb25zdHtwYXJhbXM6aH09YTtyZXR1cm4gaC5wcm9wRXJyb3I/aC5wcm9wRXJyb3I9PT1sLkFkZGl0aW9uYWw/Im11c3QgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIjpgbXVzdCBoYXZlIHByb3BlcnR5ICcke2gubWlzc2luZ1Byb3BlcnR5fSdgOigwLGkudHlwZUVycm9yTWVzc2FnZSkoYSwib2JqZWN0Iil9LHBhcmFtczphPT57Y29uc3R7cGFyYW1zOmh9PWE7cmV0dXJuIGgucHJvcEVycm9yP2gucHJvcEVycm9yPT09bC5BZGRpdGlvbmFsPygwLG8uXylge2Vycm9yOiAke2gucHJvcEVycm9yfSwgYWRkaXRpb25hbFByb3BlcnR5OiAke2guYWRkaXRpb25hbFByb3BlcnR5fX1gOigwLG8uXylge2Vycm9yOiAke2gucHJvcEVycm9yfSwgbWlzc2luZ1Byb3BlcnR5OiAke2gubWlzc2luZ1Byb3BlcnR5fX1gOigwLGkudHlwZUVycm9yUGFyYW1zKShhLCJvYmplY3QiKX19O2NvbnN0IGM9e2tleXdvcmQ6InByb3BlcnRpZXMiLHNjaGVtYVR5cGU6Im9iamVjdCIsZXJyb3I6ZS5lcnJvcixjb2RlOm19O2Z1bmN0aW9uIG0oYSl7KDAsdC5jaGVja01ldGFkYXRhKShhKTtjb25zdHtnZW46aCxkYXRhOk8scGFyZW50U2NoZW1hOkQsaXQ6d309YSx7YWRkaXRpb25hbFByb3BlcnRpZXM6QyxudWxsYWJsZTpUfT1EO2lmKHcuanRkRGlzY3JpbWluYXRvciYmVCl0aHJvdyBuZXcgRXJyb3IoIkpURDogbnVsbGFibGUgaW5zaWRlIGRpc2NyaW1pbmF0b3IgbWFwcGluZyIpO2lmKEgoKSl0aHJvdyBuZXcgRXJyb3IoIkpURDogcHJvcGVydGllcyBhbmQgb3B0aW9uYWxQcm9wZXJ0aWVzIGhhdmUgY29tbW9uIG1lbWJlcnMiKTtjb25zdFtmLEFdPUcoInByb3BlcnRpZXMiKSxbVSxTXT1HKCJvcHRpb25hbFByb3BlcnRpZXMiKTtpZihBLmxlbmd0aD09PTAmJlMubGVuZ3RoPT09MCYmQylyZXR1cm47Y29uc3RbaixOXT13Lmp0ZERpc2NyaW1pbmF0b3I9PT12b2lkIDA/KDAscy5jaGVja051bGxhYmxlT2JqZWN0KShhLE8pOltoLmxldCgidmFsaWQiLCExKSwhMF07aC5pZihOLCgpPT5oLmFzc2lnbihqLCEwKS5ibG9jaygoKT0+e0YoQSwicHJvcGVydGllcyIsITApLEYoUywib3B0aW9uYWxQcm9wZXJ0aWVzIiksQ3x8bWUoKX0pKSxhLnBhc3Moaik7ZnVuY3Rpb24gSCgpe2NvbnN0IGllPUQucHJvcGVydGllcyxxPUQub3B0aW9uYWxQcm9wZXJ0aWVzO2lmKCEoaWUmJnEpKXJldHVybiExO2Zvcihjb25zdCBFZSBpbiBpZSlpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocSxFZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRyhpZSl7Y29uc3QgcT1EW2llXSxFZT1xPygwLG4uYWxsU2NoZW1hUHJvcGVydGllcykocSk6W107aWYody5qdGREaXNjcmltaW5hdG9yJiZFZS5zb21lKEhlPT5IZT09PXcuanRkRGlzY3JpbWluYXRvcikpdGhyb3cgbmV3IEVycm9yKGBKVEQ6IGRpc2NyaW1pbmF0b3IgdGFnIHVzZWQgaW4gJHtpZX1gKTtjb25zdCBPZT1FZS5maWx0ZXIoSGU9PiEoMCxyLmFsd2F5c1ZhbGlkU2NoZW1hKSh3LHFbSGVdKSk7cmV0dXJuW0VlLE9lXX1mdW5jdGlvbiBGKGllLHEsRWUpe2NvbnN0IE9lPWgudmFyKCJ2YWxpZCIpO2Zvcihjb25zdCBGZSBvZiBpZSloLmlmKCgwLG4ucHJvcGVydHlJbkRhdGEpKGgsTyxGZSx3Lm9wdHMub3duUHJvcGVydGllcyksKCk9PlcoRmUscSxPZSksKCk9PkhlKEZlKSksYS5vayhPZSk7ZnVuY3Rpb24gSGUoRmUpe0VlPyhoLmFzc2lnbihPZSwhMSksYS5lcnJvcighMSx7cHJvcEVycm9yOmwuTWlzc2luZyxtaXNzaW5nUHJvcGVydHk6RmV9LHtzY2hlbWFQYXRoOkZlfSkpOmguYXNzaWduKE9lLCEwKX19ZnVuY3Rpb24gVyhpZSxxLEVlKXthLnN1YnNjaGVtYSh7a2V5d29yZDpxLHNjaGVtYVByb3A6aWUsZGF0YVByb3A6aWV9LEVlKX1mdW5jdGlvbiBtZSgpe2guZm9ySW4oImtleSIsTyxpZT0+e2NvbnN0IHE9dy5qdGREaXNjcmltaW5hdG9yPT09dm9pZCAwP2Y6W3cuanRkRGlzY3JpbWluYXRvcl0uY29uY2F0KGYpLEVlPXooaWUscSwicHJvcGVydGllcyIpLE9lPXooaWUsVSwib3B0aW9uYWxQcm9wZXJ0aWVzIiksSGU9RWU9PT0hMD9PZTpPZT09PSEwP0VlOigwLG8uYW5kKShFZSxPZSk7aC5pZihIZSwoKT0+e3cub3B0cy5yZW1vdmVBZGRpdGlvbmFsP2guY29kZSgoMCxvLl8pYGRlbGV0ZSAke099WyR7aWV9XWApOihhLmVycm9yKCExLHtwcm9wRXJyb3I6bC5BZGRpdGlvbmFsLGFkZGl0aW9uYWxQcm9wZXJ0eTppZX0se2luc3RhbmNlUGF0aDppZSxwYXJlbnRTY2hlbWE6ITB9KSx3Lm9wdHMuYWxsRXJyb3JzfHxoLmJyZWFrKCkpfSl9KX1mdW5jdGlvbiB6KGllLHEsRWUpe2xldCBPZTtpZihxLmxlbmd0aD44KXtjb25zdCBIZT0oMCxyLnNjaGVtYVJlZk9yVmFsKSh3LERbRWVdLEVlKTtPZT0oMCxvLm5vdCkoKDAsbi5pc093blByb3BlcnR5KShoLEhlLGllKSl9ZWxzZSBxLmxlbmd0aD9PZT0oMCxvLmFuZCkoLi4ucS5tYXAoSGU9PigwLG8uXylgJHtpZX0gIT09ICR7SGV9YCkpOk9lPSEwO3JldHVybiBPZX19ZS52YWxpZGF0ZVByb3BlcnRpZXM9bSxlLmRlZmF1bHQ9Y30pKGF0KTt2YXIgdXQ9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHV0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBZcz1hdCxjbD17a2V5d29yZDoib3B0aW9uYWxQcm9wZXJ0aWVzIixzY2hlbWFUeXBlOiJvYmplY3QiLGVycm9yOllzLmVycm9yLGNvZGUoZSl7ZS5wYXJlbnRTY2hlbWEucHJvcGVydGllc3x8KDAsWXMudmFsaWRhdGVQcm9wZXJ0aWVzKShlKX19O3V0LmRlZmF1bHQ9Y2w7dmFyIF90PXt9LEpzPXt9OyhmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5EaXNjckVycm9yPXZvaWQgMCxmdW5jdGlvbihuKXtuLlRhZz0idGFnIixuLk1hcHBpbmc9Im1hcHBpbmcifShlLkRpc2NyRXJyb3J8fChlLkRpc2NyRXJyb3I9e30pKX0pKEpzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoX3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IFhuPV9lLGRsPVhlLGhsPVplLHpzPSRlLEVvPUpzLG1sPXtrZXl3b3JkOiJkaXNjcmltaW5hdG9yIixzY2hlbWFUeXBlOiJzdHJpbmciLGltcGxlbWVudHM6WyJtYXBwaW5nIl0sZXJyb3I6e21lc3NhZ2U6ZT0+e2NvbnN0e3NjaGVtYTpuLHBhcmFtczpyfT1lO3JldHVybiByLmRpc2NyRXJyb3I/ci5kaXNjckVycm9yPT09RW8uRGlzY3JFcnJvci5UYWc/YHRhZyAiJHtufSIgbXVzdCBiZSBzdHJpbmdgOmB2YWx1ZSBvZiB0YWcgIiR7bn0iIG11c3QgYmUgaW4gbWFwcGluZ2A6KDAsenMudHlwZUVycm9yTWVzc2FnZSkoZSwib2JqZWN0Iil9LHBhcmFtczplPT57Y29uc3R7c2NoZW1hOm4scGFyYW1zOnJ9PWU7cmV0dXJuIHIuZGlzY3JFcnJvcj8oMCxYbi5fKWB7ZXJyb3I6ICR7ci5kaXNjckVycm9yfSwgdGFnOiAke259LCB0YWdWYWx1ZTogJHtyLnRhZ319YDooMCx6cy50eXBlRXJyb3JQYXJhbXMpKGUsIm9iamVjdCIpfX0sY29kZShlKXsoMCxkbC5jaGVja01ldGFkYXRhKShlKTtjb25zdHtnZW46bixkYXRhOnIsc2NoZW1hOm8scGFyZW50U2NoZW1hOnR9PWUsW3MsaV09KDAsaGwuY2hlY2tOdWxsYWJsZU9iamVjdCkoZSxyKTtuLmlmKGkpLGwoKSxuLmVsc2VJZigoMCxYbi5ub3QpKHMpKSxlLmVycm9yKCksbi5lbmRJZigpLGUub2socyk7ZnVuY3Rpb24gbCgpe2NvbnN0IGE9bi5jb25zdCgidGFnIiwoMCxYbi5fKWAke3J9JHsoMCxYbi5nZXRQcm9wZXJ0eSkobyl9YCk7bi5pZigoMCxYbi5fKWAke2F9ID09PSB1bmRlZmluZWRgKSxlLmVycm9yKCExLHtkaXNjckVycm9yOkVvLkRpc2NyRXJyb3IuVGFnLHRhZzphfSksbi5lbHNlSWYoKDAsWG4uXylgdHlwZW9mICR7YX0gPT0gInN0cmluZyJgKSxjKGEpLG4uZWxzZSgpLGUuZXJyb3IoITEse2Rpc2NyRXJyb3I6RW8uRGlzY3JFcnJvci5UYWcsdGFnOmF9LHtpbnN0YW5jZVBhdGg6b30pLG4uZW5kSWYoKX1mdW5jdGlvbiBjKGEpe24uaWYoITEpO2Zvcihjb25zdCBoIGluIHQubWFwcGluZyluLmVsc2VJZigoMCxYbi5fKWAke2F9ID09PSAke2h9YCksbi5hc3NpZ24ocyxtKGgpKTtuLmVsc2UoKSxlLmVycm9yKCExLHtkaXNjckVycm9yOkVvLkRpc2NyRXJyb3IuTWFwcGluZyx0YWc6YX0se2luc3RhbmNlUGF0aDpvLHNjaGVtYVBhdGg6Im1hcHBpbmciLHBhcmVudFNjaGVtYTohMH0pLG4uZW5kSWYoKX1mdW5jdGlvbiBtKGEpe2NvbnN0IGg9bi5uYW1lKCJ2YWxpZCIpO3JldHVybiBlLnN1YnNjaGVtYSh7a2V5d29yZDoibWFwcGluZyIsc2NoZW1hUHJvcDphLGp0ZERpc2NyaW1pbmF0b3I6b30saCksaH19fTtfdC5kZWZhdWx0PW1sO3ZhciBsdD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkobHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHFzPUFlLFFzPV9lLHBsPVhlLEVsPVplLGZsPXtrZXl3b3JkOiJ2YWx1ZXMiLHNjaGVtYVR5cGU6Im9iamVjdCIsZXJyb3I6KDAsJGUudHlwZUVycm9yKSgib2JqZWN0IiksY29kZShlKXsoMCxwbC5jaGVja01ldGFkYXRhKShlKTtjb25zdHtnZW46bixkYXRhOnIsc2NoZW1hOm8saXQ6dH09ZTtpZigoMCxxcy5hbHdheXNWYWxpZFNjaGVtYSkodCxvKSlyZXR1cm47Y29uc3RbcyxpXT0oMCxFbC5jaGVja051bGxhYmxlT2JqZWN0KShlLHIpO24uaWYoaSksbi5hc3NpZ24ocyxsKCkpLG4uZWxzZUlmKCgwLFFzLm5vdCkocykpLGUuZXJyb3IoKSxuLmVuZElmKCksZS5vayhzKTtmdW5jdGlvbiBsKCl7Y29uc3QgYz1uLm5hbWUoInZhbGlkIik7aWYodC5hbGxFcnJvcnMpe2NvbnN0IGE9bi5sZXQoInZhbGlkIiwhMCk7cmV0dXJuIG0oKCk9Pm4uYXNzaWduKGEsITEpKSxhfXJldHVybiBuLnZhcihjLCEwKSxtKCgpPT5uLmJyZWFrKCkpLGM7ZnVuY3Rpb24gbShhKXtuLmZvckluKCJrZXkiLHIsaD0+e2Uuc3Vic2NoZW1hKHtrZXl3b3JkOiJ2YWx1ZXMiLGRhdGFQcm9wOmgsZGF0YVByb3BUeXBlOnFzLlR5cGUuU3RyfSxjKSxuLmlmKCgwLFFzLm5vdCkoYyksYSl9KX19fX07bHQuZGVmYXVsdD1mbDt2YXIgY3Q9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGN0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBSbD17a2V5d29yZDoidW5pb24iLHNjaGVtYVR5cGU6ImFycmF5Iix0cmFja0Vycm9yczohMCxjb2RlOm9lLnZhbGlkYXRlVW5pb24sZXJyb3I6e21lc3NhZ2U6Im11c3QgbWF0Y2ggYSBzY2hlbWEgaW4gdW5pb24ifX07Y3QuZGVmYXVsdD1SbCxPYmplY3QuZGVmaW5lUHJvcGVydHkocnQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IE9sPWtuLFRsPXR0LE5sPXN0LGdsPWl0LElsPWF0LGJsPXV0LEFsPV90LFVsPWx0LEhsPWN0LHZsPVhlLERsPVsiZGVmaW5pdGlvbnMiLE9sLmRlZmF1bHQsVGwuZGVmYXVsdCxObC5kZWZhdWx0LGdsLmRlZmF1bHQsSWwuZGVmYXVsdCxibC5kZWZhdWx0LEFsLmRlZmF1bHQsVWwuZGVmYXVsdCxIbC5kZWZhdWx0LHZsLmRlZmF1bHQse2tleXdvcmQ6ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIixzY2hlbWFUeXBlOiJib29sZWFuIn0se2tleXdvcmQ6Im51bGxhYmxlIixzY2hlbWFUeXBlOiJib29sZWFuIn1dO3J0LmRlZmF1bHQ9RGw7dmFyIGR0PXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShkdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgaG49ZT0+e2NvbnN0IG49e251bGxhYmxlOnt0eXBlOiJib29sZWFuIn0sbWV0YWRhdGE6e29wdGlvbmFsUHJvcGVydGllczp7dW5pb246e2VsZW1lbnRzOntyZWY6InNjaGVtYSJ9fX0sYWRkaXRpb25hbFByb3BlcnRpZXM6ITB9fTtyZXR1cm4gZSYmKG4uZGVmaW5pdGlvbnM9e3ZhbHVlczp7cmVmOiJzY2hlbWEifX0pLG59LFNsPWU9Pih7b3B0aW9uYWxQcm9wZXJ0aWVzOmhuKGUpfSksUGw9ZT0+KHtwcm9wZXJ0aWVzOntyZWY6e3R5cGU6InN0cmluZyJ9fSxvcHRpb25hbFByb3BlcnRpZXM6aG4oZSl9KSx3bD1lPT4oe3Byb3BlcnRpZXM6e3R5cGU6e2VudW06WyJib29sZWFuIiwidGltZXN0YW1wIiwic3RyaW5nIiwiZmxvYXQzMiIsImZsb2F0NjQiLCJpbnQ4IiwidWludDgiLCJpbnQxNiIsInVpbnQxNiIsImludDMyIiwidWludDMyIl19fSxvcHRpb25hbFByb3BlcnRpZXM6aG4oZSl9KSxHbD1lPT4oe3Byb3BlcnRpZXM6e2VudW06e2VsZW1lbnRzOnt0eXBlOiJzdHJpbmcifX19LG9wdGlvbmFsUHJvcGVydGllczpobihlKX0pLENsPWU9Pih7cHJvcGVydGllczp7ZWxlbWVudHM6e3JlZjoic2NoZW1hIn19LG9wdGlvbmFsUHJvcGVydGllczpobihlKX0pLFpzPWU9Pih7cHJvcGVydGllczp7cHJvcGVydGllczp7dmFsdWVzOntyZWY6InNjaGVtYSJ9fX0sb3B0aW9uYWxQcm9wZXJ0aWVzOlkoe29wdGlvbmFsUHJvcGVydGllczp7dmFsdWVzOntyZWY6InNjaGVtYSJ9fSxhZGRpdGlvbmFsUHJvcGVydGllczp7dHlwZToiYm9vbGVhbiJ9fSxobihlKSl9KSxlaT1lPT4oe3Byb3BlcnRpZXM6e29wdGlvbmFsUHJvcGVydGllczp7dmFsdWVzOntyZWY6InNjaGVtYSJ9fX0sb3B0aW9uYWxQcm9wZXJ0aWVzOlkoe2FkZGl0aW9uYWxQcm9wZXJ0aWVzOnt0eXBlOiJib29sZWFuIn19LGhuKGUpKX0pLHlsPWU9Pih7cHJvcGVydGllczp7ZGlzY3JpbWluYXRvcjp7dHlwZToic3RyaW5nIn0sbWFwcGluZzp7dmFsdWVzOnttZXRhZGF0YTp7dW5pb246W1pzKCExKSxlaSghMSldfX19fSxvcHRpb25hbFByb3BlcnRpZXM6aG4oZSl9KSxMbD1lPT4oe3Byb3BlcnRpZXM6e3ZhbHVlczp7cmVmOiJzY2hlbWEifX0sb3B0aW9uYWxQcm9wZXJ0aWVzOmhuKGUpfSksbmk9ZT0+KHttZXRhZGF0YTp7dW5pb246W1NsLFBsLHdsLEdsLENsLFpzLGVpLHlsLExsXS5tYXAobj0+bihlKSl9fSksQmw9WSh7ZGVmaW5pdGlvbnM6e3NjaGVtYTpuaSghMSl9fSxuaSghMCkpO2R0LmRlZmF1bHQ9Qmw7dmFyIGh0PXt9LEFyPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBciwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQXIuanRkRm9ybXM9dm9pZCAwLEFyLmp0ZEZvcm1zPVsiZWxlbWVudHMiLCJ2YWx1ZXMiLCJkaXNjcmltaW5hdG9yIiwicHJvcGVydGllcyIsIm9wdGlvbmFsUHJvcGVydGllcyIsImVudW0iLCJ0eXBlIiwicmVmIl07dmFyIG10PXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShtdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgcHQ9L1tcXCJcdTAwMDAtXHUwMDFmXHUwMDdmLVx1MDA5Zlx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS9nLGtsPXsiXGIiOiJcXGIiLCIJIjoiXFx0IiwiXG4iOiJcXG4iLCJcZiI6IlxcZiIsIlxyIjoiXFxyIiwnIic6J1xcIicsIlxcIjoiXFxcXCJ9O2Z1bmN0aW9uIHJpKGUpe3JldHVybiBwdC5sYXN0SW5kZXg9MCwnIicrKHB0LnRlc3QoZSk/ZS5yZXBsYWNlKHB0LG49Pntjb25zdCByPWtsW25dO3JldHVybiB0eXBlb2Ygcj09InN0cmluZyI/cjoiXFx1IisoIjAwMDAiK24uY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KX0pOmUpKyciJ31tdC5kZWZhdWx0PXJpLHJpLmNvZGU9J3JlcXVpcmUoImFqdi9kaXN0L3J1bnRpbWUvcXVvdGUiKS5kZWZhdWx0JyxPYmplY3QuZGVmaW5lUHJvcGVydHkoaHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IE1sPUFyLG9pPVBlLG5lPV9lLFhsPUxuLGhlPU1lLCRsPW9lLGpsPWtuLHhsPUFlLEZsPW10LFZsPXtlbGVtZW50czpXbCx2YWx1ZXM6WWwsZGlzY3JpbWluYXRvcjpKbCxwcm9wZXJ0aWVzOmlpLG9wdGlvbmFsUHJvcGVydGllczppaSxlbnVtOkhyLHR5cGU6emwscmVmOlFsfTtmdW5jdGlvbiB0aShlLG4pe2NvbnN0IHI9b2kuZ2V0Q29tcGlsaW5nU2NoZW1hLmNhbGwodGhpcyxlKTtpZihyKXJldHVybiByO2NvbnN0e2VzNTpvLGxpbmVzOnR9PXRoaXMub3B0cy5jb2RlLHtvd25Qcm9wZXJ0aWVzOnN9PXRoaXMub3B0cyxpPW5ldyBuZS5Db2RlR2VuKHRoaXMuc2NvcGUse2VzNTpvLGxpbmVzOnQsb3duUHJvcGVydGllczpzfSksbD1pLnNjb3BlTmFtZSgic2VyaWFsaXplIiksYz17c2VsZjp0aGlzLGdlbjppLHNjaGVtYTplLnNjaGVtYSxzY2hlbWFFbnY6ZSxkZWZpbml0aW9uczpuLGRhdGE6aGUuZGVmYXVsdC5kYXRhfTtsZXQgbTt0cnl7dGhpcy5fY29tcGlsYXRpb25zLmFkZChlKSxlLnNlcmlhbGl6ZU5hbWU9bCxpLmZ1bmMobCxoZS5kZWZhdWx0LmRhdGEsITEsKCk9PntpLmxldChoZS5kZWZhdWx0Lmpzb24sKDAsbmUuc3RyKWBgKSxVcihjKSxpLnJldHVybihoZS5kZWZhdWx0Lmpzb24pfSksaS5vcHRpbWl6ZSh0aGlzLm9wdHMuY29kZS5vcHRpbWl6ZSk7Y29uc3QgYT1pLnRvU3RyaW5nKCk7bT1gJHtpLnNjb3BlUmVmcyhoZS5kZWZhdWx0LnNjb3BlKX1yZXR1cm4gJHthfWA7Y29uc3QgTz1uZXcgRnVuY3Rpb24oYCR7aGUuZGVmYXVsdC5zY29wZX1gLG0pKHRoaXMuc2NvcGUuZ2V0KCkpO3RoaXMuc2NvcGUudmFsdWUobCx7cmVmOk99KSxlLnNlcmlhbGl6ZT1PfWNhdGNoKGEpe3Rocm93IG0mJnRoaXMubG9nZ2VyLmVycm9yKCJFcnJvciBjb21waWxpbmcgc2VyaWFsaXplciwgZnVuY3Rpb24gY29kZToiLG0pLGRlbGV0ZSBlLnNlcmlhbGl6ZSxkZWxldGUgZS5zZXJpYWxpemVOYW1lLGF9ZmluYWxseXt0aGlzLl9jb21waWxhdGlvbnMuZGVsZXRlKGUpfXJldHVybiBlfWh0LmRlZmF1bHQ9dGk7ZnVuY3Rpb24gVXIoZSl7bGV0IG47Zm9yKGNvbnN0IHIgb2YgTWwuanRkRm9ybXMpaWYociBpbiBlLnNjaGVtYSl7bj1yO2JyZWFrfUtsKGUsbj9WbFtuXTplYyl9ZnVuY3Rpb24gS2woZSxuKXtjb25zdHtnZW46cixzY2hlbWE6byxkYXRhOnR9PWU7aWYoIW8ubnVsbGFibGUpcmV0dXJuIG4oZSk7ci5pZigoMCxuZS5fKWAke3R9ID09PSB1bmRlZmluZWQgfHwgJHt0fSA9PT0gbnVsbGAsKCk9PnIuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCxuZS5fKWAibnVsbCJgKSwoKT0+bihlKSl9ZnVuY3Rpb24gV2woZSl7Y29uc3R7Z2VuOm4sc2NoZW1hOnIsZGF0YTpvfT1lO24uYWRkKGhlLmRlZmF1bHQuanNvbiwoMCxuZS5zdHIpYFtgKTtjb25zdCB0PW4ubGV0KCJmaXJzdCIsITApO24uZm9yT2YoImVsIixvLHM9Pnt1aShlLHQpLFVyKGxlKFkoe30sZSkse3NjaGVtYTpyLmVsZW1lbnRzLGRhdGE6c30pKX0pLG4uYWRkKGhlLmRlZmF1bHQuanNvbiwoMCxuZS5zdHIpYF1gKX1mdW5jdGlvbiBZbChlKXtjb25zdHtnZW46bixzY2hlbWE6cixkYXRhOm99PWU7bi5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLG5lLnN0cilge2ApO2NvbnN0IHQ9bi5sZXQoImZpcnN0IiwhMCk7bi5mb3JJbigia2V5IixvLHM9PnNpKGUscyxyLnZhbHVlcyx0KSksbi5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLG5lLnN0cilgfWApfWZ1bmN0aW9uIHNpKGUsbixyLG8pe2NvbnN0e2dlbjp0LGRhdGE6c309ZTt1aShlLG8pLEhyKGxlKFkoe30sZSkse2RhdGE6bn0pKSx0LmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsbmUuc3RyKWA6YCk7Y29uc3QgaT10LmNvbnN0KCJ2YWx1ZSIsKDAsbmUuXylgJHtzfSR7KDAsbmUuZ2V0UHJvcGVydHkpKG4pfWApO1VyKGxlKFkoe30sZSkse3NjaGVtYTpyLGRhdGE6aX0pKX1mdW5jdGlvbiBKbChlKXtjb25zdHtnZW46bixzY2hlbWE6cixkYXRhOm99PWUse2Rpc2NyaW1pbmF0b3I6dH09cjtuLmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsbmUuc3RyKWB7JHtKU09OLnN0cmluZ2lmeSh0KX06YCk7Y29uc3Qgcz1uLmNvbnN0KCJ0YWciLCgwLG5lLl8pYCR7b30keygwLG5lLmdldFByb3BlcnR5KSh0KX1gKTtIcihsZShZKHt9LGUpLHtkYXRhOnN9KSksbi5pZighMSk7Zm9yKGNvbnN0IGkgaW4gci5tYXBwaW5nKXtuLmVsc2VJZigoMCxuZS5fKWAke3N9ID09PSAke2l9YCk7Y29uc3QgbD1yLm1hcHBpbmdbaV07YWkobGUoWSh7fSxlKSx7c2NoZW1hOmx9KSx0KX1uLmVuZElmKCksbi5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLG5lLnN0cilgfWApfWZ1bmN0aW9uIGlpKGUpe2NvbnN0e2dlbjpufT1lO24uYWRkKGhlLmRlZmF1bHQuanNvbiwoMCxuZS5zdHIpYHtgKSxhaShlKSxuLmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsbmUuc3RyKWB9YCl9ZnVuY3Rpb24gYWkoZSxuKXtjb25zdHtnZW46cixzY2hlbWE6byxkYXRhOnR9PWUse3Byb3BlcnRpZXM6cyxvcHRpb25hbFByb3BlcnRpZXM6aX09byxsPWgocyksYz1oKGkpLG09TyhsLmNvbmNhdChjKSk7bGV0IGE9IW47Zm9yKGNvbnN0IFQgb2YgbCl3KFQsc1tUXSxEKFQpKTtmb3IoY29uc3QgVCBvZiBjKXtjb25zdCBmPUQoVCk7ci5pZigoMCxuZS5hbmQpKCgwLG5lLl8pYCR7Zn0gIT09IHVuZGVmaW5lZGAsKDAsJGwuaXNPd25Qcm9wZXJ0eSkocix0LFQpKSwoKT0+dyhULGlbVF0sZikpfW8uYWRkaXRpb25hbFByb3BlcnRpZXMmJnIuZm9ySW4oImtleSIsdCxUPT5yLmlmKEMoVCxtKSwoKT0+c2koZSxULHt9LHIubGV0KCJmaXJzdCIsYSkpKSk7ZnVuY3Rpb24gaChUKXtyZXR1cm4gVD9PYmplY3Qua2V5cyhUKTpbXX1mdW5jdGlvbiBPKFQpe2lmKG4mJlQucHVzaChuKSxuZXcgU2V0KFQpLnNpemUhPT1ULmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkpURDogcHJvcGVydGllcy9vcHRpb25hbFByb3BlcnRpZXMvZGlzY2ltaW5hdG9yIG92ZXJsYXAiKTtyZXR1cm4gVH1mdW5jdGlvbiBEKFQpe3JldHVybiByLmNvbnN0KCJ2YWx1ZSIsKDAsbmUuXylgJHt0fSR7KDAsbmUuZ2V0UHJvcGVydHkpKFQpfWApfWZ1bmN0aW9uIHcoVCxmLEEpe2E/YT0hMTpyLmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsbmUuc3RyKWAsYCksci5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLG5lLnN0cilgJHtKU09OLnN0cmluZ2lmeShUKX06YCksVXIobGUoWSh7fSxlKSx7c2NoZW1hOmYsZGF0YTpBfSkpfWZ1bmN0aW9uIEMoVCxmKXtyZXR1cm4gZi5sZW5ndGg/KDAsbmUuYW5kKSguLi5mLm1hcChBPT4oMCxuZS5fKWAke1R9ICE9PSAke0F9YCkpOiEwfX1mdW5jdGlvbiB6bChlKXtjb25zdHtnZW46bixzY2hlbWE6cixkYXRhOm99PWU7c3dpdGNoKHIudHlwZSl7Y2FzZSJib29sZWFuIjpuLmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsbmUuXylgJHtvfSA/ICJ0cnVlIiA6ICJmYWxzZSJgKTticmVhaztjYXNlInN0cmluZyI6SHIoZSk7YnJlYWs7Y2FzZSJ0aW1lc3RhbXAiOm4uaWYoKDAsbmUuXylgJHtvfSBpbnN0YW5jZW9mIERhdGVgLCgpPT5uLmFkZChoZS5kZWZhdWx0Lmpzb24sKDAsbmUuXylgJyInICsgJHtvfS50b0lTT1N0cmluZygpICsgJyInYCksKCk9PkhyKGUpKTticmVhaztkZWZhdWx0OnFsKGUpfX1mdW5jdGlvbiBIcih7Z2VuOmUsZGF0YTpufSl7ZS5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLG5lLl8pYCR7KDAseGwudXNlRnVuYykoZSxGbC5kZWZhdWx0KX0oJHtufSlgKX1mdW5jdGlvbiBxbCh7Z2VuOmUsZGF0YTpufSl7ZS5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLG5lLl8pYCIiICsgJHtufWApfWZ1bmN0aW9uIFFsKGUpe2NvbnN0e2dlbjpuLHNlbGY6cixkYXRhOm8sZGVmaW5pdGlvbnM6dCxzY2hlbWE6cyxzY2hlbWFFbnY6aX09ZSx7cmVmOmx9PXMsYz10W2xdO2lmKCFjKXRocm93IG5ldyBYbC5kZWZhdWx0KHIub3B0cy51cmlSZXNvbHZlciwiIixsLGBObyBkZWZpbml0aW9uICR7bH1gKTtpZighKDAsamwuaGFzUmVmKShjKSlyZXR1cm4gVXIobGUoWSh7fSxlKSx7c2NoZW1hOmN9KSk7Y29uc3R7cm9vdDptfT1pLGE9dGkuY2FsbChyLG5ldyBvaS5TY2hlbWFFbnYoe3NjaGVtYTpjLHJvb3Q6bX0pLHQpO24uYWRkKGhlLmRlZmF1bHQuanNvbiwoMCxuZS5fKWAke1psKG4sYSl9KCR7b30pYCl9ZnVuY3Rpb24gWmwoZSxuKXtyZXR1cm4gbi5zZXJpYWxpemU/ZS5zY29wZVZhbHVlKCJzZXJpYWxpemUiLHtyZWY6bi5zZXJpYWxpemV9KTooMCxuZS5fKWAke2Uuc2NvcGVWYWx1ZSgid3JhcHBlciIse3JlZjpufSl9LnNlcmlhbGl6ZWB9ZnVuY3Rpb24gZWMoe2dlbjplLGRhdGE6bn0pe2UuYWRkKGhlLmRlZmF1bHQuanNvbiwoMCxuZS5fKWBKU09OLnN0cmluZ2lmeSgke259KWApfWZ1bmN0aW9uIHVpKHtnZW46ZX0sbil7ZS5pZihuLCgpPT5lLmFzc2lnbihuLCExKSwoKT0+ZS5hZGQoaGUuZGVmYXVsdC5qc29uLCgwLG5lLnN0cilgLGApKX12YXIgRXQ9e30sYm49e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGJuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxibi5wYXJzZUpzb25TdHJpbmc9Ym4ucGFyc2VKc29uTnVtYmVyPWJuLnBhcnNlSnNvbj12b2lkIDA7Y29uc3QgbmM9L3Bvc2l0aW9uXHMoXGQrKSQvO2Z1bmN0aW9uIG1uKGUsbil7bGV0IHI7bW4ubWVzc2FnZT12b2lkIDA7bGV0IG87biYmKGU9ZS5zbGljZShuKSk7dHJ5e3JldHVybiBtbi5wb3NpdGlvbj1uK2UubGVuZ3RoLEpTT04ucGFyc2UoZSl9Y2F0Y2godCl7aWYobz1uYy5leGVjKHQubWVzc2FnZSksIW8pe21uLm1lc3NhZ2U9InVuZXhwZWN0ZWQgZW5kIjtyZXR1cm59cj0rb1sxXTtjb25zdCBzPWVbcl07ZT1lLnNsaWNlKDAsciksbW4ucG9zaXRpb249bityO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaHttbi5tZXNzYWdlPWB1bmV4cGVjdGVkIHRva2VuICR7c31gO3JldHVybn19fWJuLnBhcnNlSnNvbj1tbixtbi5tZXNzYWdlPXZvaWQgMCxtbi5wb3NpdGlvbj0wLG1uLmNvZGU9J3JlcXVpcmUoImFqdi9kaXN0L3J1bnRpbWUvcGFyc2VKc29uIikucGFyc2VKc29uJztmdW5jdGlvbiBwbihlLG4scil7bGV0IG89IiIsdDtpZihwbi5tZXNzYWdlPXZvaWQgMCxlW25dPT09Ii0iJiYobys9Ii0iLG4rKyksZVtuXT09PSIwIilvKz0iMCIsbisrO2Vsc2UgaWYoIXMocikpe2koKTtyZXR1cm59aWYocilyZXR1cm4gcG4ucG9zaXRpb249biwrbztpZihlW25dPT09Ii4iJiYobys9Ii4iLG4rKywhcygpKSl7aSgpO3JldHVybn1pZih0PWVbbl0sKHQ9PT0iZSJ8fHQ9PT0iRSIpJiYobys9ImUiLG4rKyx0PWVbbl0sKHQ9PT0iKyJ8fHQ9PT0iLSIpJiYobys9dCxuKyspLCFzKCkpKXtpKCk7cmV0dXJufXJldHVybiBwbi5wb3NpdGlvbj1uLCtvO2Z1bmN0aW9uIHMobCl7bGV0IGM9ITE7Zm9yKDt0PWVbbl0sdD49IjAiJiZ0PD0iOSImJihsPT09dm9pZCAwfHxsLS0gPjApOyljPSEwLG8rPXQsbisrO3JldHVybiBjfWZ1bmN0aW9uIGkoKXtwbi5wb3NpdGlvbj1uLHBuLm1lc3NhZ2U9bjxlLmxlbmd0aD9gdW5leHBlY3RlZCB0b2tlbiAke2Vbbl19YDoidW5leHBlY3RlZCBlbmQifX1ibi5wYXJzZUpzb25OdW1iZXI9cG4scG4ubWVzc2FnZT12b2lkIDAscG4ucG9zaXRpb249MCxwbi5jb2RlPSdyZXF1aXJlKCJhanYvZGlzdC9ydW50aW1lL3BhcnNlSnNvbiIpLnBhcnNlSnNvbk51bWJlcic7Y29uc3QgX2k9e2I6IlxiIixmOiJcZiIsbjpgCmAscjoiXHIiLHQ6IgkiLCciJzonIicsIi8iOiIvIiwiXFwiOiJcXCJ9LHJjPSJhIi5jaGFyQ29kZUF0KDApLG9jPSIwIi5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIEFuKGUsbil7bGV0IHI9IiIsbztmb3IoQW4ubWVzc2FnZT12b2lkIDA7bz1lW24rK10sbyE9PSciJzspaWYobz09PSJcXCIpaWYobz1lW25dLG8gaW4gX2kpcis9X2lbb10sbisrO2Vsc2UgaWYobz09PSJ1Iil7bisrO2xldCBzPTQsaT0wO2Zvcig7cy0tOyl7aWYoaTw8PTQsbz1lW25dLG89PT12b2lkIDApe3QoInVuZXhwZWN0ZWQgZW5kIik7cmV0dXJufWlmKG89by50b0xvd2VyQ2FzZSgpLG8+PSJhIiYmbzw9ImYiKWkrPW8uY2hhckNvZGVBdCgwKS1yYysxMDtlbHNlIGlmKG8+PSIwIiYmbzw9IjkiKWkrPW8uY2hhckNvZGVBdCgwKS1vYztlbHNle3QoYHVuZXhwZWN0ZWQgdG9rZW4gJHtvfWApO3JldHVybn1uKyt9cis9U3RyaW5nLmZyb21DaGFyQ29kZShpKX1lbHNle3QoYHVuZXhwZWN0ZWQgdG9rZW4gJHtvfWApO3JldHVybn1lbHNlIGlmKG89PT12b2lkIDApe3QoInVuZXhwZWN0ZWQgZW5kIik7cmV0dXJufWVsc2UgaWYoby5jaGFyQ29kZUF0KDApPj0zMilyKz1vO2Vsc2V7dChgdW5leHBlY3RlZCB0b2tlbiAke299YCk7cmV0dXJufXJldHVybiBBbi5wb3NpdGlvbj1uLHI7ZnVuY3Rpb24gdChzKXtBbi5wb3NpdGlvbj1uLEFuLm1lc3NhZ2U9c319Ym4ucGFyc2VKc29uU3RyaW5nPUFuLEFuLm1lc3NhZ2U9dm9pZCAwLEFuLnBvc2l0aW9uPTAsQW4uY29kZT0ncmVxdWlyZSgiYWp2L2Rpc3QvcnVudGltZS9wYXJzZUpzb24iKS5wYXJzZUpzb25TdHJpbmcnLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgdGM9QXIsbGk9UGUsTT1fZSxzYz1MbixKPU1lLGljPW9lLGFjPWtuLHVjPXR0LGZ0PWJuLGNpPUFlLF9jPW1vLGxjPXtlbGVtZW50czptYyx2YWx1ZXM6cGMsZGlzY3JpbWluYXRvcjpmYyxwcm9wZXJ0aWVzOm1pLG9wdGlvbmFsUHJvcGVydGllczptaSxlbnVtOk9jLHR5cGU6UmMscmVmOlRjfTtmdW5jdGlvbiBkaShlLG4pe2NvbnN0IHI9bGkuZ2V0Q29tcGlsaW5nU2NoZW1hLmNhbGwodGhpcyxlKTtpZihyKXJldHVybiByO2NvbnN0e2VzNTpvLGxpbmVzOnR9PXRoaXMub3B0cy5jb2RlLHtvd25Qcm9wZXJ0aWVzOnN9PXRoaXMub3B0cyxpPW5ldyBNLkNvZGVHZW4odGhpcy5zY29wZSx7ZXM1Om8sbGluZXM6dCxvd25Qcm9wZXJ0aWVzOnN9KSxsPWkuc2NvcGVOYW1lKCJwYXJzZSIpLGM9e3NlbGY6dGhpcyxnZW46aSxzY2hlbWE6ZS5zY2hlbWEsc2NoZW1hRW52OmUsZGVmaW5pdGlvbnM6bixkYXRhOkouZGVmYXVsdC5kYXRhLHBhcnNlTmFtZTpsLGNoYXI6aS5uYW1lKCJjIil9O2xldCBtO3RyeXt0aGlzLl9jb21waWxhdGlvbnMuYWRkKGUpLGUucGFyc2VOYW1lPWwsY2MoYyksaS5vcHRpbWl6ZSh0aGlzLm9wdHMuY29kZS5vcHRpbWl6ZSk7Y29uc3QgYT1pLnRvU3RyaW5nKCk7bT1gJHtpLnNjb3BlUmVmcyhKLmRlZmF1bHQuc2NvcGUpfXJldHVybiAke2F9YDtjb25zdCBPPW5ldyBGdW5jdGlvbihgJHtKLmRlZmF1bHQuc2NvcGV9YCxtKSh0aGlzLnNjb3BlLmdldCgpKTt0aGlzLnNjb3BlLnZhbHVlKGwse3JlZjpPfSksZS5wYXJzZT1PfWNhdGNoKGEpe3Rocm93IG0mJnRoaXMubG9nZ2VyLmVycm9yKCJFcnJvciBjb21waWxpbmcgcGFyc2VyLCBmdW5jdGlvbiBjb2RlOiIsbSksZGVsZXRlIGUucGFyc2UsZGVsZXRlIGUucGFyc2VOYW1lLGF9ZmluYWxseXt0aGlzLl9jb21waWxhdGlvbnMuZGVsZXRlKGUpfXJldHVybiBlfUV0LmRlZmF1bHQ9ZGk7Y29uc3QgUnQ9KDAsTS5fKWB1bmRlZmluZWRgO2Z1bmN0aW9uIGNjKGUpe2NvbnN0e2dlbjpuLHBhcnNlTmFtZTpyLGNoYXI6b309ZTtuLmZ1bmMociwoMCxNLl8pYCR7Si5kZWZhdWx0Lmpzb259LCAke0ouZGVmYXVsdC5qc29uUG9zfSwgJHtKLmRlZmF1bHQuanNvblBhcnR9YCwhMSwoKT0+e24ubGV0KEouZGVmYXVsdC5kYXRhKSxuLmxldChvKSxuLmFzc2lnbigoMCxNLl8pYCR7cn0ubWVzc2FnZWAsUnQpLG4uYXNzaWduKCgwLE0uXylgJHtyfS5wb3NpdGlvbmAsUnQpLG4uYXNzaWduKEouZGVmYXVsdC5qc29uUG9zLCgwLE0uXylgJHtKLmRlZmF1bHQuanNvblBvc30gfHwgMGApLG4uY29uc3QoSi5kZWZhdWx0Lmpzb25MZW4sKDAsTS5fKWAke0ouZGVmYXVsdC5qc29ufS5sZW5ndGhgKSxmbyhlKSxJdChlKSxuLmlmKEouZGVmYXVsdC5qc29uUGFydCwoKT0+e24uYXNzaWduKCgwLE0uXylgJHtyfS5wb3NpdGlvbmAsSi5kZWZhdWx0Lmpzb25Qb3MpLG4ucmV0dXJuKEouZGVmYXVsdC5kYXRhKX0pLG4uaWYoKDAsTS5fKWAke0ouZGVmYXVsdC5qc29uUG9zfSA9PT0gJHtKLmRlZmF1bHQuanNvbkxlbn1gLCgpPT5uLnJldHVybihKLmRlZmF1bHQuZGF0YSkpLGlyKGUpfSl9ZnVuY3Rpb24gZm8oZSl7bGV0IG47Zm9yKGNvbnN0IHIgb2YgdGMuanRkRm9ybXMpaWYociBpbiBlLnNjaGVtYSl7bj1yO2JyZWFrfW4/aGMoZSxsY1tuXSk6TnQoZSl9Y29uc3QgZGM9UmkoITAsUmkoITEsaXIpKTtmdW5jdGlvbiBoYyhlLG4pe2NvbnN0e2dlbjpyLHNjaGVtYTpvLGRhdGE6dH09ZTtpZighby5udWxsYWJsZSlyZXR1cm4gbihlKTt2cihlLCJudWxsIixuLCgpPT5yLmFzc2lnbih0LG51bGwpKX1mdW5jdGlvbiBtYyhlKXtjb25zdHtnZW46bixzY2hlbWE6cixkYXRhOm99PWU7ZW4oZSwiWyIpO2NvbnN0IHQ9bi5sZXQoImkiLDApO24uYXNzaWduKG8sKDAsTS5fKWBbXWApLE90KGUsIl0iLCgpPT57Y29uc3Qgcz1uLmxldCgiZWwiKTtmbyhsZShZKHt9LGUpLHtzY2hlbWE6ci5lbGVtZW50cyxkYXRhOnN9KSksbi5hc3NpZ24oKDAsTS5fKWAke299WyR7dH0rK11gLHMpfSl9ZnVuY3Rpb24gcGMoZSl7Y29uc3R7Z2VuOm4sc2NoZW1hOnIsZGF0YTpvfT1lO2VuKGUsInsiKSxuLmFzc2lnbihvLCgwLE0uXylge31gKSxPdChlLCJ9IiwoKT0+RWMoZSxyLnZhbHVlcykpfWZ1bmN0aW9uIE90KGUsbixyKXtoaShlLG4sciksZW4oZSxuKX1mdW5jdGlvbiBoaShlLG4scil7Y29uc3R7Z2VuOm99PWU7by5mb3IoKDAsTS5fKWA7JHtKLmRlZmF1bHQuanNvblBvc308JHtKLmRlZmF1bHQuanNvbkxlbn0gJiYgJHtSbygxKX0hPT0ke259O2AsKCk9PntyKCksdnIoZSwiLCIsKCk9Pm8uYnJlYWsoKSx0KX0pO2Z1bmN0aW9uIHQoKXt2cihlLG4sKCk9Pnt9LGlyKX19ZnVuY3Rpb24gRWMoZSxuKXtjb25zdHtnZW46cn09ZSxvPXIubGV0KCJrZXkiKTskbihsZShZKHt9LGUpLHtkYXRhOm99KSksZW4oZSwiOiIpLGZpKGUsbyxuKX1mdW5jdGlvbiBmYyhlKXtjb25zdHtnZW46bixkYXRhOnIsc2NoZW1hOm99PWUse2Rpc2NyaW1pbmF0b3I6dCxtYXBwaW5nOnN9PW87ZW4oZSwieyIpLG4uYXNzaWduKHIsKDAsTS5fKWB7fWApO2NvbnN0IGk9bi5jb25zdCgicG9zIixKLmRlZmF1bHQuanNvblBvcyksbD1uLmxldCgidmFsdWUiKSxjPW4ubGV0KCJ0YWciKTtoaShlLCJ9IiwoKT0+e2NvbnN0IG09bi5sZXQoImtleSIpOyRuKGxlKFkoe30sZSkse2RhdGE6bX0pKSxlbihlLCI6Iiksbi5pZigoMCxNLl8pYCR7bX0gPT09ICR7dH1gLCgpPT57JG4obGUoWSh7fSxlKSx7ZGF0YTpjfSkpLG4uYXNzaWduKCgwLE0uXylgJHtyfVske219XWAsYyksbi5icmVhaygpfSwoKT0+TnQobGUoWSh7fSxlKSx7ZGF0YTpsfSkpKX0pLG4uYXNzaWduKEouZGVmYXVsdC5qc29uUG9zLGkpLG4uaWYoKDAsTS5fKWAke2N9ID09PSB1bmRlZmluZWRgKSxFbihlLCgwLE0uc3RyKWBkaXNjcmltaW5hdG9yIHRhZyBub3QgZm91bmRgKTtmb3IoY29uc3QgbSBpbiBzKW4uZWxzZUlmKCgwLE0uXylgJHtjfSA9PT0gJHttfWApLHBpKGxlKFkoe30sZSkse3NjaGVtYTpzW21dfSksdCk7bi5lbHNlKCksRW4oZSwoMCxNLnN0cilgZGlzY3JpbWluYXRvciB2YWx1ZSBub3QgaW4gc2NoZW1hYCksbi5lbmRJZigpfWZ1bmN0aW9uIG1pKGUpe2NvbnN0e2dlbjpuLGRhdGE6cn09ZTtlbihlLCJ7Iiksbi5hc3NpZ24ociwoMCxNLl8pYHt9YCkscGkoZSl9ZnVuY3Rpb24gcGkoZSxuKXtjb25zdHtnZW46cixzY2hlbWE6byxkYXRhOnR9PWUse3Byb3BlcnRpZXM6cyxvcHRpb25hbFByb3BlcnRpZXM6aSxhZGRpdGlvbmFsUHJvcGVydGllczpsfT1vO2lmKE90KGUsIn0iLCgpPT57Y29uc3QgYz1yLmxldCgia2V5Iik7aWYoJG4obGUoWSh7fSxlKSx7ZGF0YTpjfSkpLGVuKGUsIjoiKSxyLmlmKCExKSxFaShlLGMscyksRWkoZSxjLGkpLG4pe3IuZWxzZUlmKCgwLE0uXylgJHtjfSA9PT0gJHtufWApO2NvbnN0IG09ci5sZXQoInRhZyIpOyRuKGxlKFkoe30sZSkse2RhdGE6bX0pKX1yLmVsc2UoKSxsP050KGxlKFkoe30sZSkse2RhdGE6KDAsTS5fKWAke3R9WyR7Y31dYH0pKTpFbihlLCgwLE0uc3RyKWBwcm9wZXJ0eSAke2N9IG5vdCBhbGxvd2VkYCksci5lbmRJZigpfSkscyl7Y29uc3QgYz0oMCxpYy5oYXNQcm9wRnVuYykociksbT0oMCxNLmFuZCkoLi4uT2JqZWN0LmtleXMocykubWFwKGE9PigwLE0uXylgJHtjfS5jYWxsKCR7dH0sICR7YX0pYCkpO3IuaWYoKDAsTS5ub3QpKG0pLCgpPT5FbihlLCgwLE0uc3RyKWBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnRpZXNgKSl9fWZ1bmN0aW9uIEVpKGUsbixyPXt9KXtjb25zdHtnZW46b309ZTtmb3IoY29uc3QgdCBpbiByKW8uZWxzZUlmKCgwLE0uXylgJHtufSA9PT0gJHt0fWApLGZpKGUsbixyW3RdKX1mdW5jdGlvbiBmaShlLG4scil7Zm8obGUoWSh7fSxlKSx7c2NoZW1hOnIsZGF0YTooMCxNLl8pYCR7ZS5kYXRhfVske259XWB9KSl9ZnVuY3Rpb24gUmMoZSl7Y29uc3R7Z2VuOm4sc2NoZW1hOnIsZGF0YTpvLHNlbGY6dH09ZTtzd2l0Y2goci50eXBlKXtjYXNlImJvb2xlYW4iOmRjKGUpO2JyZWFrO2Nhc2Uic3RyaW5nIjokbihlKTticmVhaztjYXNlInRpbWVzdGFtcCI6eyRuKGUpO2NvbnN0IHM9KDAsY2kudXNlRnVuYykobixfYy5kZWZhdWx0KSx7YWxsb3dEYXRlOmkscGFyc2VEYXRlOmx9PXQub3B0cyxjPWk/KDAsTS5fKWAhJHtzfSgke299LCB0cnVlKWA6KDAsTS5fKWAhJHtzfSgke299KWAsbT1sPygwLE0ub3IpKGMsKDAsTS5fKWAoJHtvfSA9IG5ldyBEYXRlKCR7b30pLCBmYWxzZSlgLCgwLE0uXylgaXNOYU4oJHtvfS52YWx1ZU9mKCkpYCk6YztuLmlmKG0sKCk9PkVuKGUsKDAsTS5zdHIpYGludmFsaWQgdGltZXN0YW1wYCkpO2JyZWFrfWNhc2UiZmxvYXQzMiI6Y2FzZSJmbG9hdDY0IjpUdChlKTticmVhaztkZWZhdWx0Ontjb25zdCBzPXIudHlwZTtpZighdC5vcHRzLmludDMycmFuZ2UmJihzPT09ImludDMyInx8cz09PSJ1aW50MzIiKSlUdChlLDE2KSxzPT09InVpbnQzMiImJm4uaWYoKDAsTS5fKWAke299IDwgMGAsKCk9PkVuKGUsKDAsTS5zdHIpYGludGVnZXIgb3V0IG9mIHJhbmdlYCkpO2Vsc2V7Y29uc3RbaSxsLGNdPXVjLmludFJhbmdlW3NdO1R0KGUsYyksbi5pZigoMCxNLl8pYCR7b30gPCAke2l9IHx8ICR7b30gPiAke2x9YCwoKT0+RW4oZSwoMCxNLnN0cilgaW50ZWdlciBvdXQgb2YgcmFuZ2VgKSl9fX19ZnVuY3Rpb24gJG4oZSl7ZW4oZSwnIicpLGd0KGUsZnQucGFyc2VKc29uU3RyaW5nKX1mdW5jdGlvbiBPYyhlKXtjb25zdHtnZW46bixkYXRhOnIsc2NoZW1hOm99PWUsdD1vLmVudW07ZW4oZSwnIicpLG4uaWYoITEpO2Zvcihjb25zdCBzIG9mIHQpe2NvbnN0IGk9SlNPTi5zdHJpbmdpZnkocykuc2xpY2UoMSk7bi5lbHNlSWYoKDAsTS5fKWAke1JvKGkubGVuZ3RoKX0gPT09ICR7aX1gKSxuLmFzc2lnbihyLCgwLE0uc3RyKWAke3N9YCksbi5hZGQoSi5kZWZhdWx0Lmpzb25Qb3MsaS5sZW5ndGgpfW4uZWxzZSgpLGlyKGUpLG4uZW5kSWYoKX1mdW5jdGlvbiBUdChlLG4pe2NvbnN0e2dlbjpyfT1lO0l0KGUpLHIuaWYoKDAsTS5fKWAiLTAxMjM0NTY3ODkiLmluZGV4T2YoJHtSbygxKX0pIDwgMGAsKCk9PmlyKGUpLCgpPT5ndChlLGZ0LnBhcnNlSnNvbk51bWJlcixuKSl9ZnVuY3Rpb24gUmkoZSxuKXtyZXR1cm4gcj0+e2NvbnN0e2dlbjpvLGRhdGE6dH09cjt2cihyLGAke2V9YCwoKT0+bihyKSwoKT0+by5hc3NpZ24odCxlKSl9fWZ1bmN0aW9uIFRjKGUpe2NvbnN0e2dlbjpuLHNlbGY6cixkZWZpbml0aW9uczpvLHNjaGVtYTp0LHNjaGVtYUVudjpzfT1lLHtyZWY6aX09dCxsPW9baV07aWYoIWwpdGhyb3cgbmV3IHNjLmRlZmF1bHQoci5vcHRzLnVyaVJlc29sdmVyLCIiLGksYE5vIGRlZmluaXRpb24gJHtpfWApO2lmKCEoMCxhYy5oYXNSZWYpKGwpKXJldHVybiBmbyhsZShZKHt9LGUpLHtzY2hlbWE6bH0pKTtjb25zdHtyb290OmN9PXMsbT1kaS5jYWxsKHIsbmV3IGxpLlNjaGVtYUVudih7c2NoZW1hOmwscm9vdDpjfSksbyk7T2koZSxOYyhuLG0pLCEwKX1mdW5jdGlvbiBOYyhlLG4pe3JldHVybiBuLnBhcnNlP2Uuc2NvcGVWYWx1ZSgicGFyc2UiLHtyZWY6bi5wYXJzZX0pOigwLE0uXylgJHtlLnNjb3BlVmFsdWUoIndyYXBwZXIiLHtyZWY6bn0pfS5wYXJzZWB9ZnVuY3Rpb24gTnQoZSl7Z3QoZSxmdC5wYXJzZUpzb24pfWZ1bmN0aW9uIGd0KGUsbixyKXtPaShlLCgwLGNpLnVzZUZ1bmMpKGUuZ2VuLG4pLHIpfWZ1bmN0aW9uIE9pKGUsbixyKXtjb25zdHtnZW46byxkYXRhOnR9PWU7by5hc3NpZ24odCwoMCxNLl8pYCR7bn0oJHtKLmRlZmF1bHQuanNvbn0sICR7Si5kZWZhdWx0Lmpzb25Qb3N9JHtyPygwLE0uXylgLCAke3J9YDpNLm5pbH0pYCksby5hc3NpZ24oSi5kZWZhdWx0Lmpzb25Qb3MsKDAsTS5fKWAke259LnBvc2l0aW9uYCksby5pZigoMCxNLl8pYCR7dH0gPT09IHVuZGVmaW5lZGAsKCk9PkVuKGUsKDAsTS5fKWAke259Lm1lc3NhZ2VgKSl9ZnVuY3Rpb24gZW4oZSxuKXt2cihlLG4saXIpfWZ1bmN0aW9uIHZyKGUsbixyLG8pe2NvbnN0e2dlbjp0fT1lLHM9bi5sZW5ndGg7SXQoZSksdC5pZigoMCxNLl8pYCR7Um8ocyl9ID09PSAke259YCwoKT0+e3QuYWRkKEouZGVmYXVsdC5qc29uUG9zLHMpLG89PW51bGx8fG8oZSl9LCgpPT5yKGUpKX1mdW5jdGlvbiBJdCh7Z2VuOmUsY2hhcjpufSl7ZS5jb2RlKCgwLE0uXylgd2hpbGUoKCR7bn09JHtKLmRlZmF1bHQuanNvbn1bJHtKLmRlZmF1bHQuanNvblBvc31dLCR7bn09PT0iICJ8fCR7bn09PT0iXFxuInx8JHtufT09PSJcXHIifHwke259PT09IlxcdCIpKSR7Si5kZWZhdWx0Lmpzb25Qb3N9Kys7YCl9ZnVuY3Rpb24gUm8oZSl7cmV0dXJuIGU9PT0xPygwLE0uXylgJHtKLmRlZmF1bHQuanNvbn1bJHtKLmRlZmF1bHQuanNvblBvc31dYDooMCxNLl8pYCR7Si5kZWZhdWx0Lmpzb259LnNsaWNlKCR7Si5kZWZhdWx0Lmpzb25Qb3N9LCAke0ouZGVmYXVsdC5qc29uUG9zfSske2V9KWB9ZnVuY3Rpb24gaXIoZSl7RW4oZSwoMCxNLl8pYCJ1bmV4cGVjdGVkIHRva2VuICIgKyAke0ouZGVmYXVsdC5qc29ufVske0ouZGVmYXVsdC5qc29uUG9zfV1gKX1mdW5jdGlvbiBFbih7Z2VuOmUscGFyc2VOYW1lOm59LHIpe2UuYXNzaWduKCgwLE0uXylgJHtufS5tZXNzYWdlYCxyKSxlLmFzc2lnbigoMCxNLl8pYCR7bn0ucG9zaXRpb25gLEouZGVmYXVsdC5qc29uUG9zKSxlLnJldHVybihSdCl9KGZ1bmN0aW9uKGUsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uQ29kZUdlbj1uLk5hbWU9bi5uaWw9bi5zdHJpbmdpZnk9bi5zdHI9bi5fPW4uS2V5d29yZEN4dD12b2lkIDA7Y29uc3Qgcj1vcyxvPXJ0LHQ9ZHQscz1odCxpPUV0LGw9IkpURC1tZXRhLXNjaGVtYSI7Y2xhc3MgYyBleHRlbmRzIHIuZGVmYXVsdHtjb25zdHJ1Y3RvcihPPXt9KXtzdXBlcihsZShZKHt9LE8pLHtqdGQ6ITB9KSl9X2FkZFZvY2FidWxhcmllcygpe3N1cGVyLl9hZGRWb2NhYnVsYXJpZXMoKSx0aGlzLmFkZFZvY2FidWxhcnkoby5kZWZhdWx0KX1fYWRkRGVmYXVsdE1ldGFTY2hlbWEoKXtzdXBlci5fYWRkRGVmYXVsdE1ldGFTY2hlbWEoKSx0aGlzLm9wdHMubWV0YSYmdGhpcy5hZGRNZXRhU2NoZW1hKHQuZGVmYXVsdCxsLCExKX1kZWZhdWx0TWV0YSgpe3JldHVybiB0aGlzLm9wdHMuZGVmYXVsdE1ldGE9c3VwZXIuZGVmYXVsdE1ldGEoKXx8KHRoaXMuZ2V0U2NoZW1hKGwpP2w6dm9pZCAwKX1jb21waWxlU2VyaWFsaXplcihPKXtjb25zdCBEPXRoaXMuX2FkZFNjaGVtYShPKTtyZXR1cm4gRC5zZXJpYWxpemV8fHRoaXMuX2NvbXBpbGVTZXJpYWxpemVyKEQpfWNvbXBpbGVQYXJzZXIoTyl7Y29uc3QgRD10aGlzLl9hZGRTY2hlbWEoTyk7cmV0dXJuIEQucGFyc2V8fHRoaXMuX2NvbXBpbGVQYXJzZXIoRCl9X2NvbXBpbGVTZXJpYWxpemVyKE8pe2lmKHMuZGVmYXVsdC5jYWxsKHRoaXMsTyxPLnNjaGVtYS5kZWZpbml0aW9uc3x8e30pLCFPLnNlcmlhbGl6ZSl0aHJvdyBuZXcgRXJyb3IoImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvciIpO3JldHVybiBPLnNlcmlhbGl6ZX1fY29tcGlsZVBhcnNlcihPKXtpZihpLmRlZmF1bHQuY2FsbCh0aGlzLE8sTy5zY2hlbWEuZGVmaW5pdGlvbnN8fHt9KSwhTy5wYXJzZSl0aHJvdyBuZXcgRXJyb3IoImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvciIpO3JldHVybiBPLnBhcnNlfX1lLmV4cG9ydHM9bj1jLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxuLmRlZmF1bHQ9Yzt2YXIgbT16ZTtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiS2V5d29yZEN4dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uS2V5d29yZEN4dH19KTt2YXIgYT1fZTtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiXyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuX319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwic3RyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5zdHJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInN0cmluZ2lmeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuc3RyaW5naWZ5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJuaWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLm5pbH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiTmFtZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuTmFtZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiQ29kZUdlbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuQ29kZUdlbn19KX0pKGpvLGpvLmV4cG9ydHMpO3ZhciBnYz1lZSYmZWUuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShHbiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksR24uVmFsaWRhdGU9R24uQWRkU2NoZW1hPXZvaWQgMDtjb25zdCBJYz1nYyhqby5leHBvcnRzKSxUaT1uZXcgSWMuZGVmYXVsdCxiYz0oZSxuKT0+ZShuKT9udWxsOmUuZXJyb3JzO2Z1bmN0aW9uIEFjKGUsbil7VGkuYWRkU2NoZW1hKG4sZSl9R24uQWRkU2NoZW1hPUFjO2Z1bmN0aW9uIFVjKGUsbil7Y29uc3Qgcj1UaS5nZXRTY2hlbWEoZSk7aWYocilyZXR1cm4gYmMocixuKX1Hbi5WYWxpZGF0ZT1VYyxPYmplY3QuZGVmaW5lUHJvcGVydHkob28sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG9vLlNUU09wdGlvbnNCYXNlPXZvaWQgMDtjb25zdCBIYz1HbjtjbGFzcyB2Y3tjb25zdHJ1Y3RvcihuPW51bGwpe1JyKHRoaXMsIl9vcHRpb25zIik7dGhpcy5fb3B0aW9ucz1uLG4hPT1udWxsJiYodHlwZW9mIG4udmFsaWRhdG9yPT0idW5kZWZpbmVkInx8KDAsSGMuVmFsaWRhdGUpKG4udmFsaWRhdG9yLG4pKX1nZXQgb3B0aW9ucygpe3JldHVybiB0aGlzLl9vcHRpb25zfX1vby5TVFNPcHRpb25zQmFzZT12Yzt2YXIgYXI9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGFyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxhci5KZXN0U2xlZXA9YXIuU2xlZXA9dm9pZCAwO2FzeW5jIGZ1bmN0aW9uIE5pKGU9MWUzKXtyZXR1cm4gbmV3IFByb21pc2Uobj0+c2V0VGltZW91dChuLGUpKX1hci5TbGVlcD1OaTthc3luYyBmdW5jdGlvbiBEYygpe3JldHVybiBOaSgxMDApfWFyLkplc3RTbGVlcD1EYzt2YXIgZ2k9e307KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmNvbXBhcmVQYXJhbWV0ZXJUeXBlcz1lLk9BdXRoMlBhcmFtZXRlckVycm9yVHlwZT1lLk9JRENBZGRyZXNzQ2xhaW09ZS5PSURDU3RhbmRhcmRDbGFpbT1lLk9BdXRoMlBhcmFtZXRlclR5cGU9dm9pZCAwLGZ1bmN0aW9uKG8pe28uQVVESUVOQ0U9IkFVRElFTkNFIixvLkNMSUVOVF9JRD0iY2xpZW50X2lkIixvLkNMSUVOVF9TRUNSRVQ9ImNsaWVudF9zZWNyZXQiLG8uUkVTUE9OU0VfVFlQRT0icmVzcG9uc2VfdHlwZSIsby5TQ09QRT0ic2NvcGUiLG8uU1RBVEU9InN0YXRlIixvLlJFRElSRUNUX1VSST0icmVkaXJlY3RfdXJpIixvLkVSUk9SPSJlcnJvciIsby5FUlJPUl9ERVNDUklQVElPTj0iZXJyb3JfZGVzY3JpcHRpb24iLG8uRVJST1JfQ09ERVM9ImVycm9yX2NvZGVzIixvLkVSUk9SX1VSST0iZXJyb3JfdXJpIixvLkdSQU5UX1RZUEU9ImdyYW50X3R5cGUiLG8uQ09ERT0iY29kZSIsby5BQ0NFU1NfVE9LRU49ImFjY2Vzc190b2tlbiIsby5UT0tFTl9UWVBFPSJ0b2tlbl90eXBlIixvLkVYUElSRVNfSU49ImV4cGlyZXNfaW4iLG8uVVNFUk5BTUU9InVzZXJuYW1lIixvLlBBU1NXT1JEPSJwYXNzd29yZCIsby5SRUZSRVNIX1RPS0VOPSJyZWZyZXNoX3Rva2VuIixvLlJFU1BPTlNFX01PREU9InJlc3BvbnNlX21vZGUiLG8uVElNRVNUQU1QPSJ0aW1lc3RhbXAiLG8uVFJBQ0VfSUQ9InRyYWNlX2lkIixvLkNPUlJFTEFUSU9OX0lEPSJjb3JyZWxhdGlvbl9pZCJ9KGUuT0F1dGgyUGFyYW1ldGVyVHlwZXx8KGUuT0F1dGgyUGFyYW1ldGVyVHlwZT17fSkpLGZ1bmN0aW9uKG8pe28uU1VCPSJzdWIiLG8uTkFNRT0ibmFtZSIsby5HSVZFTl9OQU1FPSJnaXZlbl9uYW1lIixvLkZBTUlMWV9OQU1FPSJmYW1pbHlfbmFtZSIsby5NSURETEVfTkFNRT0ibWlkZGxlX25hbWUiLG8uTklDS05BTUU9Im5pY2tuYW1lIixvLlBSRUZFUlJFRF9VU0VSTkFNRT0icHJlZmVycmVkX3VzZXJuYW1lIixvLlBST0ZJTEU9InByb2ZpbGUiLG8uUElDVFVSRT0icGljdHVyZSIsby5XRUJTSVRFPSJ3ZWJzaXRlIixvLkVNQUlMPSJlbWFpbCIsby5FTUFJTF9WRVJJRklFRD0iZW1haWxfdmVyaWZpZWQiLG8uR0VOREVSPSJnZW5kZXIiLG8uQklSVEhEQVRFPSJiaXJ0aGRhdGUiLG8uWk9ORUlORk89InpvbmVpbmZvIixvLkxPQ0FMRT0ibG9jYWxlIixvLlBIT05FX05VTUJFUj0icGhvbmVfbnVtYmVyIixvLlBIT05FX05VTUJFUl9WRVJJRklFRD0icGhvbmVfbnVtYmVyX3ZlcmlmaWVkIixvLkFERFJFU1M9ImFkZHJlc3MiLG8uQ0xJRU5UX1NFQ1JFVD0iY2xpZW50X3NlY3JldCIsby5OT05DRT0ibm9uY2UifShlLk9JRENTdGFuZGFyZENsYWltfHwoZS5PSURDU3RhbmRhcmRDbGFpbT17fSkpLGZ1bmN0aW9uKG8pe28uRk9STUFUVEVEPSJmb3JtYXR0ZWQiLG8uU1RSRUVUX0FERFJFU1M9InN0cmVldF9hZGRyZXNzIixvLkxPQ0FMSVRZPSJsb2NhbGl0eSIsby5SRUdJT049InJlZ2lvbiIsby5DT1VOVFJZPSJjb3VudHJ5In0oZS5PSURDQWRkcmVzc0NsYWltfHwoZS5PSURDQWRkcmVzc0NsYWltPXt9KSk7Y2xhc3Mgbnt9UnIobiwiTk9UX0VRVUFMIix7Y29kZToiU1RTX09BVVRIMl9FUlJfMDAwMSIsZGVzY3JpcHRpb246IlBhcmFtZXRlciB2YWx1ZXMgbm90IGVxdWFsLiJ9KSxScihuLCJOT1RfUFJFU0VOVCIse2NvZGU6IlNUU19PQVVUSDJfRVJSXzAwMDIiLGRlc2NyaXB0aW9uOiJQYXJhbWV0ZXIgbm90IHByb3ZpZGVkLiJ9KSxScihuLCJJTlZBTElEX0ZPUk1BVCIse2NvZGU6IlNUU19PQVVUSDJfRVJSXzAwMDMiLGRlc2NyaXB0aW9uOiJQYXJhbWV0ZXIgdmFsdWUgZm9ybWF0IGludmFsaWQuIn0pLFJyKG4sIkVYUElSRUQiLHtjb2RlOiJTVFNfT0FVVEgyX0VSUl8wMDA0IixkZXNjcmlwdGlvbjoiUGFyYW1ldGVyIHZhbHVlIGV4cGlyZWQuIn0pLGUuT0F1dGgyUGFyYW1ldGVyRXJyb3JUeXBlPW47ZnVuY3Rpb24gcihvLHQscyl7Y29uc3QgaT1bXTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrKyl7Y29uc3QgYz1zW2xdO2lmKG9bbF0ubG9jYWxlQ29tcGFyZSh0W2xdKSE9PTApe2NvbnN0IG09e2Vycm9yOm4uTk9UX0VRVUFMLmNvZGUsZXJyb3JfZGVzY3JpcHRpb246bi5OT1RfRVFVQUwuZGVzY3JpcHRpb24sdGltZXN0YW1wOkRhdGUubm93KCksZGV0YWlsczpgJHtuLk5PVF9FUVVBTC5kZXNjcmlwdGlvbn06IFBhcmFtZXRlcjogWyR7Y31dYH07aS5wdXNoKG0pfX1yZXR1cm4gaX1lLmNvbXBhcmVQYXJhbWV0ZXJUeXBlcz1yfSkoZ2kpLGZ1bmN0aW9uKGUpe3ZhciBuPWVlJiZlZS5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHQscyxpLGwpe2w9PT12b2lkIDAmJihsPWkpO3ZhciBjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocyxpKTsoIWN8fCgiZ2V0ImluIGM/IXMuX19lc01vZHVsZTpjLndyaXRhYmxlfHxjLmNvbmZpZ3VyYWJsZSkpJiYoYz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc1tpXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxsLGMpfTpmdW5jdGlvbih0LHMsaSxsKXtsPT09dm9pZCAwJiYobD1pKSx0W2xdPXNbaV19KSxyPWVlJiZlZS5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHQscyl7Zm9yKHZhciBpIGluIHQpaSE9PSJkZWZhdWx0IiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLGkpJiZuKHMsdCxpKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuJHN0c2dkZj1lLiRzdHNnZD12b2lkIDAscihybyxlKSxyKG9vLGUpLHIoYXIsZSkscihHbixlKSxyKGdpLGUpLGUuJHN0c2dkPXt9O2Z1bmN0aW9uIG8oKXtyZXR1cm4gZS4kc3RzZ2R9ZS4kc3RzZ2RmPW99KHduKTtjbGFzcyBTY3tjb25zdHJ1Y3Rvcigpe3RoaXMuRGlnZXN0TWVzc2FnZT1hc3luYyBmdW5jdGlvbihuKXtjb25zdCBvPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShuKSx0PWF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IixvKSxzPUFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkodCkpO3JldHVybiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4ucykpfSx0aGlzLkNyZWF0ZVJhbmRvbVN0cmluZz0obj00Myk9Pntjb25zdCByPUFycmF5LmZyb20oY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShuKSkpO3JldHVybiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4ucikpfSx0aGlzLkNyZWF0ZVJhbmRvbVN0cmluZ0V4PSgpPT57Y29uc3Qgbj0iMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXotX34uIjtsZXQgcj0iIjtyZXR1cm4gQXJyYXkuZnJvbShjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDQzKSkpLmZvckVhY2godD0+cis9blt0JW4ubGVuZ3RoXSkscn19fWNsYXNzIFBje2NvbnN0cnVjdG9yKCl7dGhpcy5EZWNvZGVRdWVyeVBhcmFtcz1uPT57Y29uc3Qgcj17fTtyZXR1cm4gT2JqZWN0LmtleXMobikuZmlsdGVyKG89PnR5cGVvZiBuW29dIT0idW5kZWZpbmVkIikubWFwKG89PntyW2RlY29kZVVSSUNvbXBvbmVudChvKV09ZGVjb2RlVVJJQ29tcG9uZW50KG5bb10pfSkscn0sdGhpcy5DcmVhdGVRdWVyeVBhcmFtcz1uPT5PYmplY3Qua2V5cyhuKS5maWx0ZXIocj0+dHlwZW9mIG5bcl0hPSJ1bmRlZmluZWQiKS5tYXAocj0+QXJyYXkuaXNBcnJheShuW3JdKT9lbmNvZGVVUklDb21wb25lbnQocikrIj0iK2VuY29kZVVSSUNvbXBvbmVudChuW3JdLmpvaW4oIiAiKSk6ZW5jb2RlVVJJQ29tcG9uZW50KHIpKyI9IitlbmNvZGVVUklDb21wb25lbnQobltyXSkpLmpvaW4oIiYiKSx0aGlzLl9HZXRRdWVyeVBhcmFtcz1uPT57bGV0IHI9e307Y29uc3Qgbz1uLnNwbGl0KCI/Iik7aWYoby5sZW5ndGg9PTIpe2NvbnN0IHQ9b1sxXS5zcGxpdCgiJiIpLHM9e307bGV0IGk9IiI7dC5mb3JFYWNoKGZ1bmN0aW9uKGwpe2k9bC5zcGxpdCgiPSIpLGkubGVuZ3RoPT0yJiYoc1tpWzBdXT1pWzFdKX0pLHI9dGhpcy5EZWNvZGVRdWVyeVBhcmFtcyhzKX1yZXR1cm4gcn0sdGhpcy5HZXRRdWVyeVBhcmFtcz0oKT0+dGhpcy5fR2V0UXVlcnlQYXJhbXMod2luZG93LmxvY2F0aW9uLmhyZWYpfX1mdW5jdGlvbiBidChlKXt0aGlzLm1lc3NhZ2U9ZX1idC5wcm90b3R5cGU9bmV3IEVycm9yLGJ0LnByb3RvdHlwZS5uYW1lPSJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiO3ZhciBJaT10eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmd2luZG93LmF0b2ImJndpbmRvdy5hdG9iLmJpbmQod2luZG93KXx8ZnVuY3Rpb24oZSl7dmFyIG49U3RyaW5nKGUpLnJlcGxhY2UoLz0rJC8sIiIpO2lmKG4ubGVuZ3RoJTQ9PTEpdGhyb3cgbmV3IGJ0KCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpO2Zvcih2YXIgcixvLHQ9MCxzPTAsaT0iIjtvPW4uY2hhckF0KHMrKyk7fm8mJihyPXQlND82NCpyK286byx0KyslNCk/aSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmcj4+KC0yKnQmNikpOjApbz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLmluZGV4T2Yobyk7cmV0dXJuIGl9O2Z1bmN0aW9uIHdjKGUpe3ZhciBuPWUucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIik7c3dpdGNoKG4ubGVuZ3RoJTQpe2Nhc2UgMDpicmVhaztjYXNlIDI6bis9Ij09IjticmVhaztjYXNlIDM6bis9Ij0iO2JyZWFrO2RlZmF1bHQ6dGhyb3ciSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nISJ9dHJ5e3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KElpKHIpLnJlcGxhY2UoLyguKS9nLGZ1bmN0aW9uKG8sdCl7dmFyIHM9dC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBzLmxlbmd0aDwyJiYocz0iMCIrcyksIiUiK3N9KSl9KG4pfWNhdGNoe3JldHVybiBJaShuKX19ZnVuY3Rpb24gT28oZSl7dGhpcy5tZXNzYWdlPWV9ZnVuY3Rpb24gR2MoZSxuKXtpZih0eXBlb2YgZSE9InN0cmluZyIpdGhyb3cgbmV3IE9vKCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZCIpO3ZhciByPShuPW58fHt9KS5oZWFkZXI9PT0hMD8wOjE7dHJ5e3JldHVybiBKU09OLnBhcnNlKHdjKGUuc3BsaXQoIi4iKVtyXSkpfWNhdGNoKG8pe3Rocm93IG5ldyBPbygiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWQ6ICIrby5tZXNzYWdlKX19T28ucHJvdG90eXBlPW5ldyBFcnJvcixPby5wcm90b3R5cGUubmFtZT0iSW52YWxpZFRva2VuRXJyb3IiO3ZhciBEcj1lZSYmZWUuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIERyPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgbixyPTEsbz1hcmd1bWVudHMubGVuZ3RoO3I8bztyKyspe249YXJndW1lbnRzW3JdO2Zvcih2YXIgdCBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHQpJiYoZVt0XT1uW3RdKX1yZXR1cm4gZX0sRHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBTcihlLG4pe2lmKCFuKXJldHVybiIiO3ZhciByPSI7ICIrZTtyZXR1cm4gbj09PSEwP3I6cisiPSIrbn1mdW5jdGlvbiBDYyhlKXtpZih0eXBlb2YgZS5leHBpcmVzPT0ibnVtYmVyIil7dmFyIG49bmV3IERhdGU7bi5zZXRNaWxsaXNlY29uZHMobi5nZXRNaWxsaXNlY29uZHMoKStlLmV4cGlyZXMqODY0ZTUpLGUuZXhwaXJlcz1ufXJldHVybiBTcigiRXhwaXJlcyIsZS5leHBpcmVzP2UuZXhwaXJlcy50b1VUQ1N0cmluZygpOiIiKStTcigiRG9tYWluIixlLmRvbWFpbikrU3IoIlBhdGgiLGUucGF0aCkrU3IoIlNlY3VyZSIsZS5zZWN1cmUpK1NyKCJTYW1lU2l0ZSIsZS5zYW1lU2l0ZSl9ZnVuY3Rpb24geWMoZSxuLHIpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJSgyM3wyNHwyNnwyQnw1RXw2MHw3QykvZyxkZWNvZGVVUklDb21wb25lbnQpLnJlcGxhY2UoL1woL2csIiUyOCIpLnJlcGxhY2UoL1wpL2csIiUyOSIpKyI9IitlbmNvZGVVUklDb21wb25lbnQobikucmVwbGFjZSgvJSgyM3wyNHwyNnwyQnwzQXwzQ3wzRXwzRHwyRnwzRnw0MHw1Qnw1RHw1RXw2MHw3Qnw3RHw3QykvZyxkZWNvZGVVUklDb21wb25lbnQpK0NjKHIpfWZ1bmN0aW9uIExjKGUpe2Zvcih2YXIgbj17fSxyPWU/ZS5zcGxpdCgiOyAiKTpbXSxvPS8oJVtcZEEtRl17Mn0pKy9naSx0PTA7dDxyLmxlbmd0aDt0Kyspe3ZhciBzPXJbdF0uc3BsaXQoIj0iKSxpPXMuc2xpY2UoMSkuam9pbigiPSIpO2kuY2hhckF0KDApPT09JyInJiYoaT1pLnNsaWNlKDEsLTEpKTt0cnl7dmFyIGw9c1swXS5yZXBsYWNlKG8sZGVjb2RlVVJJQ29tcG9uZW50KTtuW2xdPWkucmVwbGFjZShvLGRlY29kZVVSSUNvbXBvbmVudCl9Y2F0Y2h7fX1yZXR1cm4gbn1mdW5jdGlvbiBCYygpe3JldHVybiBMYyhkb2N1bWVudC5jb29raWUpfWZ1bmN0aW9uIGtjKGUpe3JldHVybiBCYygpW2VdfXZhciBNYz1rYztmdW5jdGlvbiBiaShlLG4scil7ZG9jdW1lbnQuY29va2llPXljKGUsbixEcih7cGF0aDoiLyJ9LHIpKX12YXIgWGM9Ymk7ZnVuY3Rpb24gJGMoZSxuKXtiaShlLCIiLERyKERyKHt9LG4pLHtleHBpcmVzOi0xfSkpfXZhciBqYz0kYztjb25zdCBUbz12dChgcHJvYzokezB9OnN0b3JhZ2UudHNgKTt2YXIgQWk9KGU9PihlLkxPQ0FMX1NUT1JBR0U9IkxvY2FsU3RvcmFnZSIsZS5TRVNTSU9OX1NUT1JBR0U9IlNlc3Npb25TdG9yYWdlIixlLkNPT0tJRV9TVE9SQUdFPSJDb29raWVTdG9yYWdlIixlLk1FTU9SWV9TVE9SQUdFPSJNZW1vcnlTdG9yYWdlIixlKSkoQWl8fHt9KTtjbGFzcyB4Y3tjb25zdHJ1Y3Rvcigpe3RoaXMuZ2V0PW49Pntjb25zdCByPU1jKG4pO3JldHVybiByP0pTT04ucGFyc2Uocik6bnVsbH0sdGhpcy5zZXQ9KG4scixvPXt9KT0+e2xldCB0PXt9O3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbD09PSJodHRwczoiJiYodD17c2VjdXJlOiEwLHNhbWVTaXRlOiJub25lIn0pLG8mJm8uZGF5c1VudGlsRXhwaXJlP3QuZXhwaXJlcz1vLmRheXNVbnRpbEV4cGlyZTp0LmV4cGlyZXM9MSxUbyhgQ29va2llU3RvcmFnZS5zZXQ6IGtleTogJHtufSwgdmFsdWU6IFske3J9XWApLFhjKG4sSlNPTi5zdHJpbmdpZnkociksdCl9LHRoaXMucmVtb3ZlPW49PntqYyhuKX19fWNsYXNzIEZje2NvbnN0cnVjdG9yKCl7dGhpcy5nZXQ9bj0+e2NvbnN0IHI9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShuKTtyZXR1cm4gdHlwZW9mIHI9PSJ1bmRlZmluZWQifHxyPT09bnVsbD9udWxsOkpTT04ucGFyc2Uocil9LHRoaXMuc2V0PShuLHIpPT57VG8oYFNlc3Npb25TdG9yYWdlLnNldDoga2V5OiAke259LCB2YWx1ZTogWyR7cn1dYCksc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShuLEpTT04uc3RyaW5naWZ5KHIpKX0sdGhpcy5yZW1vdmU9bj0+e3Nlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0obil9fX1jbGFzcyBWY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZ2V0PW49Pntjb25zdCByPWxvY2FsU3RvcmFnZS5nZXRJdGVtKG4pO3JldHVybiB0eXBlb2Ygcj09InVuZGVmaW5lZCJ8fHI9PT1udWxsP251bGw6SlNPTi5wYXJzZShyKX0sdGhpcy5zZXQ9KG4scik9PntUbyhgTG9jYWxTdG9yYWdlLnNldDoga2V5OiAke259LCB2YWx1ZTogWyR7cn1dYCksbG9jYWxTdG9yYWdlLnNldEl0ZW0obixKU09OLnN0cmluZ2lmeShyKSl9LHRoaXMucmVtb3ZlPW49Pntsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuKX19fWNsYXNzIEtje2NvbnN0cnVjdG9yKCl7SWUodGhpcyx4bix2b2lkIDApO3VlKHRoaXMseG4se30pLHRoaXMuZ2V0PW49Pntjb25zdCByPVgodGhpcyx4bilbbl07cmV0dXJuIHR5cGVvZiByPT0idW5kZWZpbmVkInx8cj09PW51bGw/bnVsbDpyfSx0aGlzLnNldD0obixyKT0+e1RvKGBNZW1vcnlTdG9yYWdlLnNldDoga2V5OiAke259LCB2YWx1ZTogWyR7cn1dYCksWCh0aGlzLHhuKVtuXT1yfSx0aGlzLnJlbW92ZT1uPT57ZGVsZXRlIFgodGhpcyx4bilbbl19fX14bj1uZXcgV2Vha01hcDtjbGFzcyBXY3tjb25zdHJ1Y3RvcihuKXtJZSh0aGlzLFVuLG51bGwpO3N3aXRjaChuLmNsaWVudFN0b3JhZ2VUeXBlKXtjYXNlIlNlc3Npb25TdG9yYWdlIjp1ZSh0aGlzLFVuLG5ldyBGYyk7YnJlYWs7Y2FzZSJMb2NhbFN0b3JhZ2UiOnVlKHRoaXMsVW4sbmV3IFZjKTticmVhaztjYXNlIkNvb2tpZVN0b3JhZ2UiOnVlKHRoaXMsVW4sbmV3IHhjKTticmVhaztjYXNlIk1lbW9yeVN0b3JhZ2UiOnVlKHRoaXMsVW4sbmV3IEtjKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBbJHtuLmNsaWVudFN0b3JhZ2VUeXBlfV0gc3RvcmFnZSB0eXBlLmApfX1HZXRTdG9yYWdlKCl7cmV0dXJuIFgodGhpcyxVbil9fVVuPW5ldyBXZWFrTWFwO3ZhciB1cjsoZnVuY3Rpb24oZSl7ZVtlLkFDQ0VQVEVEPTIwMl09IkFDQ0VQVEVEIixlW2UuQkFEX0dBVEVXQVk9NTAyXT0iQkFEX0dBVEVXQVkiLGVbZS5CQURfUkVRVUVTVD00MDBdPSJCQURfUkVRVUVTVCIsZVtlLkNPTkZMSUNUPTQwOV09IkNPTkZMSUNUIixlW2UuQ09OVElOVUU9MTAwXT0iQ09OVElOVUUiLGVbZS5DUkVBVEVEPTIwMV09IkNSRUFURUQiLGVbZS5FWFBFQ1RBVElPTl9GQUlMRUQ9NDE3XT0iRVhQRUNUQVRJT05fRkFJTEVEIixlW2UuRkFJTEVEX0RFUEVOREVOQ1k9NDI0XT0iRkFJTEVEX0RFUEVOREVOQ1kiLGVbZS5GT1JCSURERU49NDAzXT0iRk9SQklEREVOIixlW2UuR0FURVdBWV9USU1FT1VUPTUwNF09IkdBVEVXQVlfVElNRU9VVCIsZVtlLkdPTkU9NDEwXT0iR09ORSIsZVtlLkhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEPTUwNV09IkhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEIixlW2UuSU1fQV9URUFQT1Q9NDE4XT0iSU1fQV9URUFQT1QiLGVbZS5JTlNVRkZJQ0lFTlRfU1BBQ0VfT05fUkVTT1VSQ0U9NDE5XT0iSU5TVUZGSUNJRU5UX1NQQUNFX09OX1JFU09VUkNFIixlW2UuSU5TVUZGSUNJRU5UX1NUT1JBR0U9NTA3XT0iSU5TVUZGSUNJRU5UX1NUT1JBR0UiLGVbZS5JTlRFUk5BTF9TRVJWRVJfRVJST1I9NTAwXT0iSU5URVJOQUxfU0VSVkVSX0VSUk9SIixlW2UuTEVOR1RIX1JFUVVJUkVEPTQxMV09IkxFTkdUSF9SRVFVSVJFRCIsZVtlLkxPQ0tFRD00MjNdPSJMT0NLRUQiLGVbZS5NRVRIT0RfRkFJTFVSRT00MjBdPSJNRVRIT0RfRkFJTFVSRSIsZVtlLk1FVEhPRF9OT1RfQUxMT1dFRD00MDVdPSJNRVRIT0RfTk9UX0FMTE9XRUQiLGVbZS5NT1ZFRF9QRVJNQU5FTlRMWT0zMDFdPSJNT1ZFRF9QRVJNQU5FTlRMWSIsZVtlLk1PVkVEX1RFTVBPUkFSSUxZPTMwMl09Ik1PVkVEX1RFTVBPUkFSSUxZIixlW2UuTVVMVElfU1RBVFVTPTIwN109Ik1VTFRJX1NUQVRVUyIsZVtlLk1VTFRJUExFX0NIT0lDRVM9MzAwXT0iTVVMVElQTEVfQ0hPSUNFUyIsZVtlLk5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQ9NTExXT0iTkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRCIsZVtlLk5PX0NPTlRFTlQ9MjA0XT0iTk9fQ09OVEVOVCIsZVtlLk5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OPTIwM109Ik5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OIixlW2UuTk9UX0FDQ0VQVEFCTEU9NDA2XT0iTk9UX0FDQ0VQVEFCTEUiLGVbZS5OT1RfRk9VTkQ9NDA0XT0iTk9UX0ZPVU5EIixlW2UuTk9UX0lNUExFTUVOVEVEPTUwMV09Ik5PVF9JTVBMRU1FTlRFRCIsZVtlLk5PVF9NT0RJRklFRD0zMDRdPSJOT1RfTU9ESUZJRUQiLGVbZS5PSz0yMDBdPSJPSyIsZVtlLlBBUlRJQUxfQ09OVEVOVD0yMDZdPSJQQVJUSUFMX0NPTlRFTlQiLGVbZS5QQVlNRU5UX1JFUVVJUkVEPTQwMl09IlBBWU1FTlRfUkVRVUlSRUQiLGVbZS5QRVJNQU5FTlRfUkVESVJFQ1Q9MzA4XT0iUEVSTUFORU5UX1JFRElSRUNUIixlW2UuUFJFQ09ORElUSU9OX0ZBSUxFRD00MTJdPSJQUkVDT05ESVRJT05fRkFJTEVEIixlW2UuUFJFQ09ORElUSU9OX1JFUVVJUkVEPTQyOF09IlBSRUNPTkRJVElPTl9SRVFVSVJFRCIsZVtlLlBST0NFU1NJTkc9MTAyXT0iUFJPQ0VTU0lORyIsZVtlLlBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEPTQwN109IlBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEIixlW2UuUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRT00MzFdPSJSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFIixlW2UuUkVRVUVTVF9USU1FT1VUPTQwOF09IlJFUVVFU1RfVElNRU9VVCIsZVtlLlJFUVVFU1RfVE9PX0xPTkc9NDEzXT0iUkVRVUVTVF9UT09fTE9ORyIsZVtlLlJFUVVFU1RfVVJJX1RPT19MT05HPTQxNF09IlJFUVVFU1RfVVJJX1RPT19MT05HIixlW2UuUkVRVUVTVEVEX1JBTkdFX05PVF9TQVRJU0ZJQUJMRT00MTZdPSJSRVFVRVNURURfUkFOR0VfTk9UX1NBVElTRklBQkxFIixlW2UuUkVTRVRfQ09OVEVOVD0yMDVdPSJSRVNFVF9DT05URU5UIixlW2UuU0VFX09USEVSPTMwM109IlNFRV9PVEhFUiIsZVtlLlNFUlZJQ0VfVU5BVkFJTEFCTEU9NTAzXT0iU0VSVklDRV9VTkFWQUlMQUJMRSIsZVtlLlNXSVRDSElOR19QUk9UT0NPTFM9MTAxXT0iU1dJVENISU5HX1BST1RPQ09MUyIsZVtlLlRFTVBPUkFSWV9SRURJUkVDVD0zMDddPSJURU1QT1JBUllfUkVESVJFQ1QiLGVbZS5UT09fTUFOWV9SRVFVRVNUUz00MjldPSJUT09fTUFOWV9SRVFVRVNUUyIsZVtlLlVOQVVUSE9SSVpFRD00MDFdPSJVTkFVVEhPUklaRUQiLGVbZS5VTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUz00NTFdPSJVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUyIsZVtlLlVOUFJPQ0VTU0FCTEVfRU5USVRZPTQyMl09IlVOUFJPQ0VTU0FCTEVfRU5USVRZIixlW2UuVU5TVVBQT1JURURfTUVESUFfVFlQRT00MTVdPSJVTlNVUFBPUlRFRF9NRURJQV9UWVBFIixlW2UuVVNFX1BST1hZPTMwNV09IlVTRV9QUk9YWSIsZVtlLk1JU0RJUkVDVEVEX1JFUVVFU1Q9NDIxXT0iTUlTRElSRUNURURfUkVRVUVTVCJ9KSh1cnx8KHVyPXt9KSk7dmFyIFVpPShlPT4oZS5DT0RFPSJjb2RlIixlLklEX1RPS0VOPSJpZF90b2tlbiIsZS5UT0tFTj0idG9rZW4iLGUpKShVaXx8e30pLEhpPShlPT4oZS5RVUVSWT0icXVlcnkiLGUuRlJBR01FTlQ9ImZyYWdtZW50IixlLkZPUk1fUE9TVD0iZm9ybV9wb3N0IixlKSkoSGl8fHt9KSxBdD0oZT0+KGUuQ0xJRU5UX0NSRURFTlRJQUxTPSJjbGllbnRfY3JlZGVudGlhbHMiLGUuQVVUSE9SSVpBVElPTl9DT0RFPSJhdXRob3JpemF0aW9uX2NvZGUiLGUuUkVGUkVTSF9UT0tFTj0icmVmcmVzaF90b2tlbiIsZSkpKEF0fHx7fSksam49KGU9PihlLlJFU1RPUkVfU0VTU0lPTj0iUmVzdG9yZVNlc3Npb24iLGUuQVVUSE9SSVpFPSJBdXRob3JpemUiLGUuSEFORExFX1JFRElSRUNUPSJIYW5kbGVSZWRpcmVjdCIsZS5MT0dPVVQ9IkxvZ291dCIsZS5BVVRIRU5USUNBVEVfRVZFTlQ9IkF1dGhlbnRpY2F0ZUV2ZW50IixlLkVSUk9SPSJFcnJvciIsZSkpKGpufHx7fSk7dnQoYHByb2M6JHswfTpzdHNvYXV0aDJ3b3JrZXIudHNgKTtjbGFzcyBZY3tjb25zdHJ1Y3RvcihuKXtJZSh0aGlzLEJlLHZvaWQgMCk7SWUodGhpcyxIbix2b2lkIDApO0llKHRoaXMsUHIsdm9pZCAwKTtJZSh0aGlzLE5vLHZvaWQgMCk7SWUodGhpcyxqZSx2b2lkIDApO0llKHRoaXMsZm4sdm9pZCAwKTtJZSh0aGlzLHZuLHZvaWQgMCk7SWUodGhpcyx4ZSx2b2lkIDApO0llKHRoaXMsRm4sdm9pZCAwKTtJZSh0aGlzLGdvLHZvaWQgMCk7SWUodGhpcyxubix2b2lkIDApO0llKHRoaXMsd3Isdm9pZCAwKTtJZSh0aGlzLEdyLHZvaWQgMCk7SWUodGhpcyxDcix2b2lkIDApO0llKHRoaXMsX3Isdm9pZCAwKTtJZSh0aGlzLHlyLHZvaWQgMCk7SWUodGhpcyxMcix2b2lkIDApO0llKHRoaXMsQnIsdm9pZCAwKTt1ZSh0aGlzLEJlLG51bGwpLHVlKHRoaXMsSG4sbmV3IFNjKSx1ZSh0aGlzLFByLG5ldyBQYyksdWUodGhpcyxObywiYXV0aG9yaXplX29wdGlvbnMuc3RzbWRhLmNvbS5hdSIpLHVlKHRoaXMsamUsInNlc3Npb24uc3RzbWRhLmNvbS5hdSIpLHVlKHRoaXMsZm4sbnVsbCksdWUodGhpcyx2bixudWxsKSx1ZSh0aGlzLHhlLG51bGwpLHVlKHRoaXMsRm4sbnVsbCksdWUodGhpcyxnbywwKSx0aGlzLlNldHVwTGlzdGVuZXI9KCk9PntYKHRoaXMsRm4pLm9ubWVzc2FnZT1hc3luYyByPT57Y29uc3Qgbz1yLmRhdGE7c3dpdGNoKG8uY29tbWFuZCl7Y2FzZSBqbi5SRVNUT1JFX1NFU1NJT046WCh0aGlzLG5uKS5jYWxsKHRoaXMsbyxhd2FpdCBYKHRoaXMsd3IpLmNhbGwodGhpcykpO2JyZWFrO2Nhc2Ugam4uQVVUSE9SSVpFOlgodGhpcyxubikuY2FsbCh0aGlzLG8sYXdhaXQgWCh0aGlzLEdyKS5jYWxsKHRoaXMpKTticmVhaztjYXNlIGpuLkhBTkRMRV9SRURJUkVDVDpYKHRoaXMsbm4pLmNhbGwodGhpcyxvLGF3YWl0IFgodGhpcyxDcikuY2FsbCh0aGlzLG8ucGF5bG9hZCkpO2JyZWFrO2Nhc2Ugam4uTE9HT1VUOlgodGhpcyxubikuY2FsbCh0aGlzLG8sYXdhaXQgWCh0aGlzLEJyKS5jYWxsKHRoaXMpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgQ29tbWFuZDogWyR7by5jb21tYW5kfSddIG5vdCBmb3VuZC5gKX19fSx1ZSh0aGlzLG5uLGFzeW5jKHIsbyk9Pntjb25zdCB0PXttZXNzYWdlSWQ6ci5tZXNzYWdlSWQsY29tbWFuZDpyLmNvbW1hbmQscGF5bG9hZDpvfTtYKHRoaXMsRm4pLnBvc3RNZXNzYWdlKHQpfSksdWUodGhpcyx3cixhc3luYygpPT57bGV0IHI9bnVsbDtpZihyPVgodGhpcyxCZSkuZ2V0KFgodGhpcyxqZSkpLHIhPT1udWxsKWNvbnNvbGUubG9nKCJTZXNzaW9uIHJlc3RvcmVkIGZyb20gY2xpZW50IHN0b3JhZ2UuIiksWCh0aGlzLGZuKSYmWCh0aGlzLGZuKS5VcGRhdGVJbnN0cnVtZW50KCJtIix7TG9nTWVzc2FnZToiU2Vzc2lvbiByZXN0b3JlZCBmcm9tIGNsaWVudCBzdG9yYWdlLiJ9KTtlbHNle2NvbnN0IG89YCR7e0RFUExPWU1FTlRfQkFTRVBBVEg6Ii9vcHQvcnVubmVyIixET1RORVRfTk9MT0dPOiIxIixVU0VSOiJydW5uZXIiLG5wbV9jb25maWdfYWx3YXlzX2F1dGg6IiIsbnBtX2NvbmZpZ191c2VyX2FnZW50OiJucG0vOC4xMS4wIG5vZGUvdjE4LjMuMCBsaW51eCB4NjQgd29ya3NwYWNlcy9mYWxzZSBjaS9naXRodWItYWN0aW9ucyIsQ0k6InRydWUiLEdJVEhVQl9FTlY6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zZXRfZW52XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsUElQWF9IT01FOiIvb3B0L3BpcHgiLG5wbV9ub2RlX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLEpBVkFfSE9NRV84X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tOC1qZGstYW1kNjQiLE5PREVfQVVUSF9UT0tFTjoiWFhYWFgtWFhYWFgtWFhYWFgtWFhYWFgiLFNITFZMOiIxIixucG1fY29uZmlnX25vcHJveHk6IiIsSE9NRToiL2hvbWUvcnVubmVyIixSVU5ORVJfVEVNUDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAiLEdJVEhVQl9FVkVOVF9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fZ2l0aHViX3dvcmtmbG93L2V2ZW50Lmpzb24iLG5wbV9wYWNrYWdlX2pzb246Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vcGFja2FnZS5qc29uIixKQVZBX0hPTUVfMTFfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBJUFhfQklOX0RJUjoiL29wdC9waXB4X2JpbiIsR1JBQUxWTV8xMV9ST09UOiIvdXNyL2xvY2FsL2dyYWFsdm0vZ3JhYWx2bS1jZS1qYXZhMTEtMjIuMS4wIixHSVRIVUJfUkVQT1NJVE9SWV9PV05FUjoibnNzaHVudCIsR1JBRExFX0hPTUU6Ii91c3Ivc2hhcmUvZ3JhZGxlLTcuNC4yIixIT01FQlJFV19QUkVGSVg6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3IixBTkRST0lEX05ES19MQVRFU1RfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLzI0LjAuODIxNTg4OCIsR0lUSFVCX1JFVEVOVElPTl9EQVlTOiI5MCIsUE9XRVJTSEVMTF9ESVNUUklCVVRJT05fQ0hBTk5FTDoiR2l0SHViLUFjdGlvbnMtdWJ1bnR1MjAiLEFaVVJFX0VYVEVOU0lPTl9ESVI6Ii9vcHQvYXovYXpjbGlleHRlbnNpb25zIixHSVRIVUJfSEVBRF9SRUY6IiIsbnBtX2NvbmZpZ19sb2NhbF9wcmVmaXg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9HUkFQSFFMX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsIixDT0xPUjoiMCIsTlZNX0RJUjoiL2hvbWUvcnVubmVyLy5udm0iLG5wbV9jb25maWdfbWV0cmljc19yZWdpc3RyeToiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvIixET1RORVRfU0tJUF9GSVJTVF9USU1FX0VYUEVSSUVOQ0U6IjEiLEpBVkFfSE9NRV8xN19YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTE3LWpkay1hbWQ2NCIsSW1hZ2VWZXJzaW9uOiIyMDIyMDYwNS4xIixSVU5ORVJfT1M6IkxpbnV4IixHSVRIVUJfQVBJX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSIsU1dJRlRfUEFUSDoiL3Vzci9zaGFyZS9zd2lmdC91c3IvYmluIixSVU5ORVJfVVNFUjoicnVubmVyIixDSFJPTUVXRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvY2hyb21lX2RyaXZlciIsSk9VUk5BTF9TVFJFQU06Ijg6MjE4MzQiLEdJVEhVQl9XT1JLRkxPVzoiTm9kZS5qcyBQYWNrYWdlIixfOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25wbSIsbnBtX2NvbmZpZ19wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsR0lUSFVCX1JVTl9JRDoiMjQ4MzUwNjAzNSIsR09ST09UXzFfMTZfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE2LjE1L3g2NCIsbnBtX2NvbmZpZ19jYWNoZToiL2hvbWUvcnVubmVyLy5ucG0iLEdPUk9PVF8xXzE3X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNy4xMS94NjQiLEdJVEhVQl9SRUZfVFlQRToiYnJhbmNoIixCT09UU1RSQVBfSEFTS0VMTF9OT05JTlRFUkFDVElWRToiMSIsR0lUSFVCX0JBU0VfUkVGOiIiLEltYWdlT1M6InVidW50dTIwIixQRVJGTE9HX0xPQ0FUSU9OX1NFVFRJTkc6IlJVTk5FUl9QRVJGTE9HIixHT1JPT1RfMV8xOF9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTguMy94NjQiLEdJVEhVQl9BQ1RJT05fUkVQT1NJVE9SWToiIixucG1fY29uZmlnX25vZGVfZ3lwOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL25vZGUtZ3lwL2Jpbi9ub2RlLWd5cC5qcyIsUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL25vZGVfbW9kdWxlcy8uYmluOi9ub2RlX21vZHVsZXMvLmJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL0BucG1jbGkvcnVuLXNjcmlwdC9saWIvbm9kZS1neXAtYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L3NiaW46L2hvbWUvcnVubmVyLy5sb2NhbC9iaW46L29wdC9waXB4X2JpbjovaG9tZS9ydW5uZXIvLmNhcmdvL2JpbjovaG9tZS9ydW5uZXIvLmNvbmZpZy9jb21wb3Nlci92ZW5kb3IvYmluOi91c3IvbG9jYWwvLmdoY3VwL2JpbjovaG9tZS9ydW5uZXIvLmRvdG5ldC90b29sczovc25hcC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluOi91c3IvZ2FtZXM6L3Vzci9sb2NhbC9nYW1lczovc25hcC9iaW4iLEFOVF9IT01FOiIvdXNyL3NoYXJlL2FudCIsRE9UTkVUX01VTFRJTEVWRUxfTE9PS1VQOiIwIixSVU5ORVJfVFJBQ0tJTkdfSUQ6ImdpdGh1Yl85ZTBhNWM3YS05NzhmLTRmY2UtYmU5Zi0xNTk3YTQ1ZDNmOGQiLElOVk9DQVRJT05fSUQ6IjgyMzE1MDQwZjZjYjRiMTg5MWI4NzU1MDc1ZGJlNzQ5IixIT01FQlJFV19DRUxMQVI6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0NlbGxhciIsTlBNX0NPTkZJR19VU0VSQ09ORklHOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC8ubnBtcmMiLFJVTk5FUl9UT09MX0NBQ0hFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTk9ERToiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixucG1fcGFja2FnZV9uYW1lOiJAbnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9BQ1RJT046Il9fcnVuXzIiLEdJVEhVQl9SVU5fTlVNQkVSOiIyNCIsUlVOTkVSX0FSQ0g6Ilg2NCIsQUdFTlRfVE9PTFNESVJFQ1RPUlk6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixMQU5HOiJDLlVURi04IixWQ1BLR19JTlNUQUxMQVRJT05fUk9PVDoiL3Vzci9sb2NhbC9zaGFyZS92Y3BrZyIsQ09OREE6Ii91c3Ivc2hhcmUvbWluaWNvbmRhIixSVU5ORVJfTkFNRToiSG9zdGVkIEFnZW50IixYREdfQ09ORklHX0hPTUU6Ii9ob21lL3J1bm5lci8uY29uZmlnIixHSVRIVUJfUkVGX05BTUU6Im1haW4iLEdJVEhVQl9SRVBPU0lUT1JZOiJuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsbnBtX2xpZmVjeWNsZV9zY3JpcHQ6InZpdGUgYnVpbGQiLEFORFJPSURfTkRLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9BQ1RJT05fUkVGOiIiLERFQklBTl9GUk9OVEVORDoibm9uaW50ZXJhY3RpdmUiLEdJVEhVQl9BQ1RJT05TOiJ0cnVlIixucG1fcGFja2FnZV92ZXJzaW9uOiIwLjEuMTMiLG5wbV9saWZlY3ljbGVfZXZlbnQ6ImJ1aWxkIixHSVRIVUJfUkVGX1BST1RFQ1RFRDoiZmFsc2UiLEdJVEhVQl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEFDQ0VQVF9FVUxBOiJZIixHSVRIVUJfSk9COiJwdWJsaXNoLW5wbSIsUlVOTkVSX1BFUkZMT0c6Ii9ob21lL3J1bm5lci9wZXJmbG9nIixHSVRIVUJfU0hBOiJmNjU5OGQxODg2MWM2MDg0YTMwMjQzYzlkNmE5ZDAyMDBlMWY5ZTk2IixHSVRIVUJfUlVOX0FUVEVNUFQ6IjEiLEdJVEhVQl9SRUY6InJlZnMvaGVhZHMvbWFpbiIsR0lUSFVCX0FDVE9SOiJuc3NodW50IixBTkRST0lEX1NES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsTEVJTl9IT01FOiIvdXNyL2xvY2FsL2xpYi9sZWluIixucG1fY29uZmlnX2dsb2JhbGNvbmZpZzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2V0Yy9ucG1yYyIsbnBtX2NvbmZpZ19pbml0X21vZHVsZToiL2hvbWUvcnVubmVyLy5ucG0taW5pdC5qcyIsR0lUSFVCX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9hZGRfcGF0aF81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLEpBVkFfSE9NRToiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLFJVTk5FUl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbiIsbnBtX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vYmluL25wbS1jbGkuanMiLEhPTUVCUkVXX0NMRUFOVVBfUEVSSU9ESUNfRlVMTF9EQVlTOiIzNjUwIixHSVRIVUJfRVZFTlRfTkFNRToicHVzaCIsSE9NRUJSRVdfTk9fQVVUT19VUERBVEU6IjEiLEFORFJPSURfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLEdJVEhVQl9TRVJWRVJfVVJMOiJodHRwczovL2dpdGh1Yi5jb20iLEdFQ0tPV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2dlY2tvX2RyaXZlciIsTEVJTl9KQVI6Ii91c3IvbG9jYWwvbGliL2xlaW4vc2VsZi1pbnN0YWxscy9sZWluaW5nZW4tMi45Ljgtc3RhbmRhbG9uZS5qYXIiLG5wbV9jb25maWdfZ2xvYmFsX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixIT01FQlJFV19SRVBPU0lUT1JZOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9Ib21lYnJldyIsbnBtX2NvbW1hbmQ6InJ1bi1zY3JpcHQiLFNHWF9BRVNNX0FERFI6IjEiLENIUk9NRV9CSU46Ii91c3IvYmluL2dvb2dsZS1jaHJvbWUiLFNFTEVOSVVNX0pBUl9QQVRIOiIvdXNyL3NoYXJlL2phdmEvc2VsZW5pdW0tc2VydmVyLmphciIsQU5EUk9JRF9OREtfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX1NURVBfU1VNTUFSWToiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3N0ZXBfc3VtbWFyeV81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLElOSVRfQ1dEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixFRElUT1I6InZpIixOT0RFX0VOVjoicHJvZHVjdGlvbiJ9LkJST0tFUl9FTkRQT0lOVH06JHt7REVQTE9ZTUVOVF9CQVNFUEFUSDoiL29wdC9ydW5uZXIiLERPVE5FVF9OT0xPR086IjEiLFVTRVI6InJ1bm5lciIsbnBtX2NvbmZpZ19hbHdheXNfYXV0aDoiIixucG1fY29uZmlnX3VzZXJfYWdlbnQ6Im5wbS84LjExLjAgbm9kZS92MTguMy4wIGxpbnV4IHg2NCB3b3Jrc3BhY2VzL2ZhbHNlIGNpL2dpdGh1Yi1hY3Rpb25zIixDSToidHJ1ZSIsR0lUSFVCX0VOVjoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3NldF9lbnZfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixQSVBYX0hPTUU6Ii9vcHQvcGlweCIsbnBtX25vZGVfZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsSkFWQV9IT01FXzhfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi04LWpkay1hbWQ2NCIsTk9ERV9BVVRIX1RPS0VOOiJYWFhYWC1YWFhYWC1YWFhYWC1YWFhYWCIsU0hMVkw6IjEiLG5wbV9jb25maWdfbm9wcm94eToiIixIT01FOiIvaG9tZS9ydW5uZXIiLFJVTk5FUl9URU1QOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcCIsR0lUSFVCX0VWRU5UX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19naXRodWJfd29ya2Zsb3cvZXZlbnQuanNvbiIsbnBtX3BhY2thZ2VfanNvbjoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9wYWNrYWdlLmpzb24iLEpBVkFfSE9NRV8xMV9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUElQWF9CSU5fRElSOiIvb3B0L3BpcHhfYmluIixHUkFBTFZNXzExX1JPT1Q6Ii91c3IvbG9jYWwvZ3JhYWx2bS9ncmFhbHZtLWNlLWphdmExMS0yMi4xLjAiLEdJVEhVQl9SRVBPU0lUT1JZX09XTkVSOiJuc3NodW50IixHUkFETEVfSE9NRToiL3Vzci9zaGFyZS9ncmFkbGUtNy40LjIiLEhPTUVCUkVXX1BSRUZJWDoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXciLEFORFJPSURfTkRLX0xBVEVTVF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGsvMjQuMC44MjE1ODg4IixHSVRIVUJfUkVURU5USU9OX0RBWVM6IjkwIixQT1dFUlNIRUxMX0RJU1RSSUJVVElPTl9DSEFOTkVMOiJHaXRIdWItQWN0aW9ucy11YnVudHUyMCIsQVpVUkVfRVhURU5TSU9OX0RJUjoiL29wdC9hei9hemNsaWV4dGVuc2lvbnMiLEdJVEhVQl9IRUFEX1JFRjoiIixucG1fY29uZmlnX2xvY2FsX3ByZWZpeDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0dSQVBIUUxfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWwiLENPTE9SOiIwIixOVk1fRElSOiIvaG9tZS9ydW5uZXIvLm52bSIsbnBtX2NvbmZpZ19tZXRyaWNzX3JlZ2lzdHJ5OiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8iLERPVE5FVF9TS0lQX0ZJUlNUX1RJTUVfRVhQRVJJRU5DRToiMSIsSkFWQV9IT01FXzE3X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTctamRrLWFtZDY0IixJbWFnZVZlcnNpb246IjIwMjIwNjA1LjEiLFJVTk5FUl9PUzoiTGludXgiLEdJVEhVQl9BUElfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tIixTV0lGVF9QQVRIOiIvdXNyL3NoYXJlL3N3aWZ0L3Vzci9iaW4iLFJVTk5FUl9VU0VSOiJydW5uZXIiLENIUk9NRVdFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9jaHJvbWVfZHJpdmVyIixKT1VSTkFMX1NUUkVBTToiODoyMTgzNCIsR0lUSFVCX1dPUktGTE9XOiJOb2RlLmpzIFBhY2thZ2UiLF86Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbnBtIixucG1fY29uZmlnX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixHSVRIVUJfUlVOX0lEOiIyNDgzNTA2MDM1IixHT1JPT1RfMV8xNl9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTYuMTUveDY0IixucG1fY29uZmlnX2NhY2hlOiIvaG9tZS9ydW5uZXIvLm5wbSIsR09ST09UXzFfMTdfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE3LjExL3g2NCIsR0lUSFVCX1JFRl9UWVBFOiJicmFuY2giLEJPT1RTVFJBUF9IQVNLRUxMX05PTklOVEVSQUNUSVZFOiIxIixHSVRIVUJfQkFTRV9SRUY6IiIsSW1hZ2VPUzoidWJ1bnR1MjAiLFBFUkZMT0dfTE9DQVRJT05fU0VUVElORzoiUlVOTkVSX1BFUkZMT0ciLEdPUk9PVF8xXzE4X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xOC4zL3g2NCIsR0lUSFVCX0FDVElPTl9SRVBPU0lUT1JZOiIiLG5wbV9jb25maWdfbm9kZV9neXA6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvbm9kZS1neXAvYmluL25vZGUtZ3lwLmpzIixQQVRIOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvbm9kZV9tb2R1bGVzLy5iaW46L25vZGVfbW9kdWxlcy8uYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvQG5wbWNsaS9ydW4tc2NyaXB0L2xpYi9ub2RlLWd5cC1iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvc2JpbjovaG9tZS9ydW5uZXIvLmxvY2FsL2Jpbjovb3B0L3BpcHhfYmluOi9ob21lL3J1bm5lci8uY2FyZ28vYmluOi9ob21lL3J1bm5lci8uY29uZmlnL2NvbXBvc2VyL3ZlbmRvci9iaW46L3Vzci9sb2NhbC8uZ2hjdXAvYmluOi9ob21lL3J1bm5lci8uZG90bmV0L3Rvb2xzOi9zbmFwL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIsQU5UX0hPTUU6Ii91c3Ivc2hhcmUvYW50IixET1RORVRfTVVMVElMRVZFTF9MT09LVVA6IjAiLFJVTk5FUl9UUkFDS0lOR19JRDoiZ2l0aHViXzllMGE1YzdhLTk3OGYtNGZjZS1iZTlmLTE1OTdhNDVkM2Y4ZCIsSU5WT0NBVElPTl9JRDoiODIzMTUwNDBmNmNiNGIxODkxYjg3NTUwNzVkYmU3NDkiLEhPTUVCUkVXX0NFTExBUjoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvQ2VsbGFyIixOUE1fQ09ORklHX1VTRVJDT05GSUc6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wLy5ucG1yYyIsUlVOTkVSX1RPT0xfQ0FDSEU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixOT0RFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLG5wbV9wYWNrYWdlX25hbWU6IkBuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0FDVElPTjoiX19ydW5fMiIsR0lUSFVCX1JVTl9OVU1CRVI6IjI0IixSVU5ORVJfQVJDSDoiWDY0IixBR0VOVF9UT09MU0RJUkVDVE9SWToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLExBTkc6IkMuVVRGLTgiLFZDUEtHX0lOU1RBTExBVElPTl9ST09UOiIvdXNyL2xvY2FsL3NoYXJlL3ZjcGtnIixDT05EQToiL3Vzci9zaGFyZS9taW5pY29uZGEiLFJVTk5FUl9OQU1FOiJIb3N0ZWQgQWdlbnQiLFhER19DT05GSUdfSE9NRToiL2hvbWUvcnVubmVyLy5jb25maWciLEdJVEhVQl9SRUZfTkFNRToibWFpbiIsR0lUSFVCX1JFUE9TSVRPUlk6Im5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixucG1fbGlmZWN5Y2xlX3NjcmlwdDoidml0ZSBidWlsZCIsQU5EUk9JRF9OREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX0FDVElPTl9SRUY6IiIsREVCSUFOX0ZST05URU5EOiJub25pbnRlcmFjdGl2ZSIsR0lUSFVCX0FDVElPTlM6InRydWUiLG5wbV9wYWNrYWdlX3ZlcnNpb246IjAuMS4xMyIsbnBtX2xpZmVjeWNsZV9ldmVudDoiYnVpbGQiLEdJVEhVQl9SRUZfUFJPVEVDVEVEOiJmYWxzZSIsR0lUSFVCX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsQUNDRVBUX0VVTEE6IlkiLEdJVEhVQl9KT0I6InB1Ymxpc2gtbnBtIixSVU5ORVJfUEVSRkxPRzoiL2hvbWUvcnVubmVyL3BlcmZsb2ciLEdJVEhVQl9TSEE6ImY2NTk4ZDE4ODYxYzYwODRhMzAyNDNjOWQ2YTlkMDIwMGUxZjllOTYiLEdJVEhVQl9SVU5fQVRURU1QVDoiMSIsR0lUSFVCX1JFRjoicmVmcy9oZWFkcy9tYWluIixHSVRIVUJfQUNUT1I6Im5zc2h1bnQiLEFORFJPSURfU0RLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixMRUlOX0hPTUU6Ii91c3IvbG9jYWwvbGliL2xlaW4iLG5wbV9jb25maWdfZ2xvYmFsY29uZmlnOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvZXRjL25wbXJjIixucG1fY29uZmlnX2luaXRfbW9kdWxlOiIvaG9tZS9ydW5uZXIvLm5wbS1pbml0LmpzIixHSVRIVUJfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL2FkZF9wYXRoXzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSkFWQV9IT01FOiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsUlVOTkVSX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luIixucG1fZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9iaW4vbnBtLWNsaS5qcyIsSE9NRUJSRVdfQ0xFQU5VUF9QRVJJT0RJQ19GVUxMX0RBWVM6IjM2NTAiLEdJVEhVQl9FVkVOVF9OQU1FOiJwdXNoIixIT01FQlJFV19OT19BVVRPX1VQREFURToiMSIsQU5EUk9JRF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsR0lUSFVCX1NFUlZFUl9VUkw6Imh0dHBzOi8vZ2l0aHViLmNvbSIsR0VDS09XRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvZ2Vja29fZHJpdmVyIixMRUlOX0pBUjoiL3Vzci9sb2NhbC9saWIvbGVpbi9zZWxmLWluc3RhbGxzL2xlaW5pbmdlbi0yLjkuOC1zdGFuZGFsb25lLmphciIsbnBtX2NvbmZpZ19nbG9iYWxfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEhPTUVCUkVXX1JFUE9TSVRPUlk6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0hvbWVicmV3IixucG1fY29tbWFuZDoicnVuLXNjcmlwdCIsU0dYX0FFU01fQUREUjoiMSIsQ0hST01FX0JJTjoiL3Vzci9iaW4vZ29vZ2xlLWNocm9tZSIsU0VMRU5JVU1fSkFSX1BBVEg6Ii91c3Ivc2hhcmUvamF2YS9zZWxlbml1bS1zZXJ2ZXIuamFyIixBTkRST0lEX05ES19IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfU1RFUF9TVU1NQVJZOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc3RlcF9zdW1tYXJ5XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSU5JVF9DV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEVESVRPUjoidmkiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn0uQlJPS0VSX1BPUlR9JHt7REVQTE9ZTUVOVF9CQVNFUEFUSDoiL29wdC9ydW5uZXIiLERPVE5FVF9OT0xPR086IjEiLFVTRVI6InJ1bm5lciIsbnBtX2NvbmZpZ19hbHdheXNfYXV0aDoiIixucG1fY29uZmlnX3VzZXJfYWdlbnQ6Im5wbS84LjExLjAgbm9kZS92MTguMy4wIGxpbnV4IHg2NCB3b3Jrc3BhY2VzL2ZhbHNlIGNpL2dpdGh1Yi1hY3Rpb25zIixDSToidHJ1ZSIsR0lUSFVCX0VOVjoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3NldF9lbnZfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixQSVBYX0hPTUU6Ii9vcHQvcGlweCIsbnBtX25vZGVfZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsSkFWQV9IT01FXzhfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi04LWpkay1hbWQ2NCIsTk9ERV9BVVRIX1RPS0VOOiJYWFhYWC1YWFhYWC1YWFhYWC1YWFhYWCIsU0hMVkw6IjEiLG5wbV9jb25maWdfbm9wcm94eToiIixIT01FOiIvaG9tZS9ydW5uZXIiLFJVTk5FUl9URU1QOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcCIsR0lUSFVCX0VWRU5UX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19naXRodWJfd29ya2Zsb3cvZXZlbnQuanNvbiIsbnBtX3BhY2thZ2VfanNvbjoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9wYWNrYWdlLmpzb24iLEpBVkFfSE9NRV8xMV9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUElQWF9CSU5fRElSOiIvb3B0L3BpcHhfYmluIixHUkFBTFZNXzExX1JPT1Q6Ii91c3IvbG9jYWwvZ3JhYWx2bS9ncmFhbHZtLWNlLWphdmExMS0yMi4xLjAiLEdJVEhVQl9SRVBPU0lUT1JZX09XTkVSOiJuc3NodW50IixHUkFETEVfSE9NRToiL3Vzci9zaGFyZS9ncmFkbGUtNy40LjIiLEhPTUVCUkVXX1BSRUZJWDoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXciLEFORFJPSURfTkRLX0xBVEVTVF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGsvMjQuMC44MjE1ODg4IixHSVRIVUJfUkVURU5USU9OX0RBWVM6IjkwIixQT1dFUlNIRUxMX0RJU1RSSUJVVElPTl9DSEFOTkVMOiJHaXRIdWItQWN0aW9ucy11YnVudHUyMCIsQVpVUkVfRVhURU5TSU9OX0RJUjoiL29wdC9hei9hemNsaWV4dGVuc2lvbnMiLEdJVEhVQl9IRUFEX1JFRjoiIixucG1fY29uZmlnX2xvY2FsX3ByZWZpeDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0dSQVBIUUxfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWwiLENPTE9SOiIwIixOVk1fRElSOiIvaG9tZS9ydW5uZXIvLm52bSIsbnBtX2NvbmZpZ19tZXRyaWNzX3JlZ2lzdHJ5OiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8iLERPVE5FVF9TS0lQX0ZJUlNUX1RJTUVfRVhQRVJJRU5DRToiMSIsSkFWQV9IT01FXzE3X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTctamRrLWFtZDY0IixJbWFnZVZlcnNpb246IjIwMjIwNjA1LjEiLFJVTk5FUl9PUzoiTGludXgiLEdJVEhVQl9BUElfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tIixTV0lGVF9QQVRIOiIvdXNyL3NoYXJlL3N3aWZ0L3Vzci9iaW4iLFJVTk5FUl9VU0VSOiJydW5uZXIiLENIUk9NRVdFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9jaHJvbWVfZHJpdmVyIixKT1VSTkFMX1NUUkVBTToiODoyMTgzNCIsR0lUSFVCX1dPUktGTE9XOiJOb2RlLmpzIFBhY2thZ2UiLF86Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbnBtIixucG1fY29uZmlnX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixHSVRIVUJfUlVOX0lEOiIyNDgzNTA2MDM1IixHT1JPT1RfMV8xNl9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTYuMTUveDY0IixucG1fY29uZmlnX2NhY2hlOiIvaG9tZS9ydW5uZXIvLm5wbSIsR09ST09UXzFfMTdfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE3LjExL3g2NCIsR0lUSFVCX1JFRl9UWVBFOiJicmFuY2giLEJPT1RTVFJBUF9IQVNLRUxMX05PTklOVEVSQUNUSVZFOiIxIixHSVRIVUJfQkFTRV9SRUY6IiIsSW1hZ2VPUzoidWJ1bnR1MjAiLFBFUkZMT0dfTE9DQVRJT05fU0VUVElORzoiUlVOTkVSX1BFUkZMT0ciLEdPUk9PVF8xXzE4X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xOC4zL3g2NCIsR0lUSFVCX0FDVElPTl9SRVBPU0lUT1JZOiIiLG5wbV9jb25maWdfbm9kZV9neXA6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvbm9kZS1neXAvYmluL25vZGUtZ3lwLmpzIixQQVRIOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvbm9kZV9tb2R1bGVzLy5iaW46L25vZGVfbW9kdWxlcy8uYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvQG5wbWNsaS9ydW4tc2NyaXB0L2xpYi9ub2RlLWd5cC1iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvc2JpbjovaG9tZS9ydW5uZXIvLmxvY2FsL2Jpbjovb3B0L3BpcHhfYmluOi9ob21lL3J1bm5lci8uY2FyZ28vYmluOi9ob21lL3J1bm5lci8uY29uZmlnL2NvbXBvc2VyL3ZlbmRvci9iaW46L3Vzci9sb2NhbC8uZ2hjdXAvYmluOi9ob21lL3J1bm5lci8uZG90bmV0L3Rvb2xzOi9zbmFwL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIsQU5UX0hPTUU6Ii91c3Ivc2hhcmUvYW50IixET1RORVRfTVVMVElMRVZFTF9MT09LVVA6IjAiLFJVTk5FUl9UUkFDS0lOR19JRDoiZ2l0aHViXzllMGE1YzdhLTk3OGYtNGZjZS1iZTlmLTE1OTdhNDVkM2Y4ZCIsSU5WT0NBVElPTl9JRDoiODIzMTUwNDBmNmNiNGIxODkxYjg3NTUwNzVkYmU3NDkiLEhPTUVCUkVXX0NFTExBUjoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvQ2VsbGFyIixOUE1fQ09ORklHX1VTRVJDT05GSUc6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wLy5ucG1yYyIsUlVOTkVSX1RPT0xfQ0FDSEU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixOT0RFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLG5wbV9wYWNrYWdlX25hbWU6IkBuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0FDVElPTjoiX19ydW5fMiIsR0lUSFVCX1JVTl9OVU1CRVI6IjI0IixSVU5ORVJfQVJDSDoiWDY0IixBR0VOVF9UT09MU0RJUkVDVE9SWToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLExBTkc6IkMuVVRGLTgiLFZDUEtHX0lOU1RBTExBVElPTl9ST09UOiIvdXNyL2xvY2FsL3NoYXJlL3ZjcGtnIixDT05EQToiL3Vzci9zaGFyZS9taW5pY29uZGEiLFJVTk5FUl9OQU1FOiJIb3N0ZWQgQWdlbnQiLFhER19DT05GSUdfSE9NRToiL2hvbWUvcnVubmVyLy5jb25maWciLEdJVEhVQl9SRUZfTkFNRToibWFpbiIsR0lUSFVCX1JFUE9TSVRPUlk6Im5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixucG1fbGlmZWN5Y2xlX3NjcmlwdDoidml0ZSBidWlsZCIsQU5EUk9JRF9OREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX0FDVElPTl9SRUY6IiIsREVCSUFOX0ZST05URU5EOiJub25pbnRlcmFjdGl2ZSIsR0lUSFVCX0FDVElPTlM6InRydWUiLG5wbV9wYWNrYWdlX3ZlcnNpb246IjAuMS4xMyIsbnBtX2xpZmVjeWNsZV9ldmVudDoiYnVpbGQiLEdJVEhVQl9SRUZfUFJPVEVDVEVEOiJmYWxzZSIsR0lUSFVCX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsQUNDRVBUX0VVTEE6IlkiLEdJVEhVQl9KT0I6InB1Ymxpc2gtbnBtIixSVU5ORVJfUEVSRkxPRzoiL2hvbWUvcnVubmVyL3BlcmZsb2ciLEdJVEhVQl9TSEE6ImY2NTk4ZDE4ODYxYzYwODRhMzAyNDNjOWQ2YTlkMDIwMGUxZjllOTYiLEdJVEhVQl9SVU5fQVRURU1QVDoiMSIsR0lUSFVCX1JFRjoicmVmcy9oZWFkcy9tYWluIixHSVRIVUJfQUNUT1I6Im5zc2h1bnQiLEFORFJPSURfU0RLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixMRUlOX0hPTUU6Ii91c3IvbG9jYWwvbGliL2xlaW4iLG5wbV9jb25maWdfZ2xvYmFsY29uZmlnOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvZXRjL25wbXJjIixucG1fY29uZmlnX2luaXRfbW9kdWxlOiIvaG9tZS9ydW5uZXIvLm5wbS1pbml0LmpzIixHSVRIVUJfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL2FkZF9wYXRoXzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSkFWQV9IT01FOiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsUlVOTkVSX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luIixucG1fZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9iaW4vbnBtLWNsaS5qcyIsSE9NRUJSRVdfQ0xFQU5VUF9QRVJJT0RJQ19GVUxMX0RBWVM6IjM2NTAiLEdJVEhVQl9FVkVOVF9OQU1FOiJwdXNoIixIT01FQlJFV19OT19BVVRPX1VQREFURToiMSIsQU5EUk9JRF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsR0lUSFVCX1NFUlZFUl9VUkw6Imh0dHBzOi8vZ2l0aHViLmNvbSIsR0VDS09XRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvZ2Vja29fZHJpdmVyIixMRUlOX0pBUjoiL3Vzci9sb2NhbC9saWIvbGVpbi9zZWxmLWluc3RhbGxzL2xlaW5pbmdlbi0yLjkuOC1zdGFuZGFsb25lLmphciIsbnBtX2NvbmZpZ19nbG9iYWxfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEhPTUVCUkVXX1JFUE9TSVRPUlk6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0hvbWVicmV3IixucG1fY29tbWFuZDoicnVuLXNjcmlwdCIsU0dYX0FFU01fQUREUjoiMSIsQ0hST01FX0JJTjoiL3Vzci9iaW4vZ29vZ2xlLWNocm9tZSIsU0VMRU5JVU1fSkFSX1BBVEg6Ii91c3Ivc2hhcmUvamF2YS9zZWxlbml1bS1zZXJ2ZXIuamFyIixBTkRST0lEX05ES19IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfU1RFUF9TVU1NQVJZOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc3RlcF9zdW1tYXJ5XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSU5JVF9DV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEVESVRPUjoidmkiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn0uQlJPS0VSX0FQSV9ST09UfS9zZXNzaW9uYDtjb25zb2xlLmxvZygiUmVzdG9yZVNlc3Npb24iKSxjb25zb2xlLmxvZyhvKSxYKHRoaXMsZm4pJiYoWCh0aGlzLGZuKS5VcGRhdGVJbnN0cnVtZW50KCJtIix7TG9nTWVzc2FnZToiUmVzdG9yZVNlc3Npb24ifSksWCh0aGlzLGZuKS5VcGRhdGVJbnN0cnVtZW50KCJtIix7TG9nTWVzc2FnZTpvfSkpO3RyeXtjb25zdCB0PWF3YWl0ICRvKHttZXRob2Q6InBvc3QiLHVybDpvLGRhdGE6e1t3bi5PQXV0aDJQYXJhbWV0ZXJUeXBlLkNMSUVOVF9JRF06e0RFUExPWU1FTlRfQkFTRVBBVEg6Ii9vcHQvcnVubmVyIixET1RORVRfTk9MT0dPOiIxIixVU0VSOiJydW5uZXIiLG5wbV9jb25maWdfYWx3YXlzX2F1dGg6IiIsbnBtX2NvbmZpZ191c2VyX2FnZW50OiJucG0vOC4xMS4wIG5vZGUvdjE4LjMuMCBsaW51eCB4NjQgd29ya3NwYWNlcy9mYWxzZSBjaS9naXRodWItYWN0aW9ucyIsQ0k6InRydWUiLEdJVEhVQl9FTlY6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zZXRfZW52XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsUElQWF9IT01FOiIvb3B0L3BpcHgiLG5wbV9ub2RlX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLEpBVkFfSE9NRV84X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tOC1qZGstYW1kNjQiLE5PREVfQVVUSF9UT0tFTjoiWFhYWFgtWFhYWFgtWFhYWFgtWFhYWFgiLFNITFZMOiIxIixucG1fY29uZmlnX25vcHJveHk6IiIsSE9NRToiL2hvbWUvcnVubmVyIixSVU5ORVJfVEVNUDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAiLEdJVEhVQl9FVkVOVF9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fZ2l0aHViX3dvcmtmbG93L2V2ZW50Lmpzb24iLG5wbV9wYWNrYWdlX2pzb246Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vcGFja2FnZS5qc29uIixKQVZBX0hPTUVfMTFfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBJUFhfQklOX0RJUjoiL29wdC9waXB4X2JpbiIsR1JBQUxWTV8xMV9ST09UOiIvdXNyL2xvY2FsL2dyYWFsdm0vZ3JhYWx2bS1jZS1qYXZhMTEtMjIuMS4wIixHSVRIVUJfUkVQT1NJVE9SWV9PV05FUjoibnNzaHVudCIsR1JBRExFX0hPTUU6Ii91c3Ivc2hhcmUvZ3JhZGxlLTcuNC4yIixIT01FQlJFV19QUkVGSVg6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3IixBTkRST0lEX05ES19MQVRFU1RfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLzI0LjAuODIxNTg4OCIsR0lUSFVCX1JFVEVOVElPTl9EQVlTOiI5MCIsUE9XRVJTSEVMTF9ESVNUUklCVVRJT05fQ0hBTk5FTDoiR2l0SHViLUFjdGlvbnMtdWJ1bnR1MjAiLEFaVVJFX0VYVEVOU0lPTl9ESVI6Ii9vcHQvYXovYXpjbGlleHRlbnNpb25zIixHSVRIVUJfSEVBRF9SRUY6IiIsbnBtX2NvbmZpZ19sb2NhbF9wcmVmaXg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9HUkFQSFFMX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsIixDT0xPUjoiMCIsTlZNX0RJUjoiL2hvbWUvcnVubmVyLy5udm0iLG5wbV9jb25maWdfbWV0cmljc19yZWdpc3RyeToiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvIixET1RORVRfU0tJUF9GSVJTVF9USU1FX0VYUEVSSUVOQ0U6IjEiLEpBVkFfSE9NRV8xN19YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTE3LWpkay1hbWQ2NCIsSW1hZ2VWZXJzaW9uOiIyMDIyMDYwNS4xIixSVU5ORVJfT1M6IkxpbnV4IixHSVRIVUJfQVBJX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSIsU1dJRlRfUEFUSDoiL3Vzci9zaGFyZS9zd2lmdC91c3IvYmluIixSVU5ORVJfVVNFUjoicnVubmVyIixDSFJPTUVXRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvY2hyb21lX2RyaXZlciIsSk9VUk5BTF9TVFJFQU06Ijg6MjE4MzQiLEdJVEhVQl9XT1JLRkxPVzoiTm9kZS5qcyBQYWNrYWdlIixfOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25wbSIsbnBtX2NvbmZpZ19wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsR0lUSFVCX1JVTl9JRDoiMjQ4MzUwNjAzNSIsR09ST09UXzFfMTZfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE2LjE1L3g2NCIsbnBtX2NvbmZpZ19jYWNoZToiL2hvbWUvcnVubmVyLy5ucG0iLEdPUk9PVF8xXzE3X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNy4xMS94NjQiLEdJVEhVQl9SRUZfVFlQRToiYnJhbmNoIixCT09UU1RSQVBfSEFTS0VMTF9OT05JTlRFUkFDVElWRToiMSIsR0lUSFVCX0JBU0VfUkVGOiIiLEltYWdlT1M6InVidW50dTIwIixQRVJGTE9HX0xPQ0FUSU9OX1NFVFRJTkc6IlJVTk5FUl9QRVJGTE9HIixHT1JPT1RfMV8xOF9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTguMy94NjQiLEdJVEhVQl9BQ1RJT05fUkVQT1NJVE9SWToiIixucG1fY29uZmlnX25vZGVfZ3lwOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL25vZGUtZ3lwL2Jpbi9ub2RlLWd5cC5qcyIsUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL25vZGVfbW9kdWxlcy8uYmluOi9ub2RlX21vZHVsZXMvLmJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL0BucG1jbGkvcnVuLXNjcmlwdC9saWIvbm9kZS1neXAtYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L3NiaW46L2hvbWUvcnVubmVyLy5sb2NhbC9iaW46L29wdC9waXB4X2JpbjovaG9tZS9ydW5uZXIvLmNhcmdvL2JpbjovaG9tZS9ydW5uZXIvLmNvbmZpZy9jb21wb3Nlci92ZW5kb3IvYmluOi91c3IvbG9jYWwvLmdoY3VwL2JpbjovaG9tZS9ydW5uZXIvLmRvdG5ldC90b29sczovc25hcC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluOi91c3IvZ2FtZXM6L3Vzci9sb2NhbC9nYW1lczovc25hcC9iaW4iLEFOVF9IT01FOiIvdXNyL3NoYXJlL2FudCIsRE9UTkVUX01VTFRJTEVWRUxfTE9PS1VQOiIwIixSVU5ORVJfVFJBQ0tJTkdfSUQ6ImdpdGh1Yl85ZTBhNWM3YS05NzhmLTRmY2UtYmU5Zi0xNTk3YTQ1ZDNmOGQiLElOVk9DQVRJT05fSUQ6IjgyMzE1MDQwZjZjYjRiMTg5MWI4NzU1MDc1ZGJlNzQ5IixIT01FQlJFV19DRUxMQVI6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0NlbGxhciIsTlBNX0NPTkZJR19VU0VSQ09ORklHOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC8ubnBtcmMiLFJVTk5FUl9UT09MX0NBQ0hFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTk9ERToiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixucG1fcGFja2FnZV9uYW1lOiJAbnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9BQ1RJT046Il9fcnVuXzIiLEdJVEhVQl9SVU5fTlVNQkVSOiIyNCIsUlVOTkVSX0FSQ0g6Ilg2NCIsQUdFTlRfVE9PTFNESVJFQ1RPUlk6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixMQU5HOiJDLlVURi04IixWQ1BLR19JTlNUQUxMQVRJT05fUk9PVDoiL3Vzci9sb2NhbC9zaGFyZS92Y3BrZyIsQ09OREE6Ii91c3Ivc2hhcmUvbWluaWNvbmRhIixSVU5ORVJfTkFNRToiSG9zdGVkIEFnZW50IixYREdfQ09ORklHX0hPTUU6Ii9ob21lL3J1bm5lci8uY29uZmlnIixHSVRIVUJfUkVGX05BTUU6Im1haW4iLEdJVEhVQl9SRVBPU0lUT1JZOiJuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsbnBtX2xpZmVjeWNsZV9zY3JpcHQ6InZpdGUgYnVpbGQiLEFORFJPSURfTkRLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9BQ1RJT05fUkVGOiIiLERFQklBTl9GUk9OVEVORDoibm9uaW50ZXJhY3RpdmUiLEdJVEhVQl9BQ1RJT05TOiJ0cnVlIixucG1fcGFja2FnZV92ZXJzaW9uOiIwLjEuMTMiLG5wbV9saWZlY3ljbGVfZXZlbnQ6ImJ1aWxkIixHSVRIVUJfUkVGX1BST1RFQ1RFRDoiZmFsc2UiLEdJVEhVQl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEFDQ0VQVF9FVUxBOiJZIixHSVRIVUJfSk9COiJwdWJsaXNoLW5wbSIsUlVOTkVSX1BFUkZMT0c6Ii9ob21lL3J1bm5lci9wZXJmbG9nIixHSVRIVUJfU0hBOiJmNjU5OGQxODg2MWM2MDg0YTMwMjQzYzlkNmE5ZDAyMDBlMWY5ZTk2IixHSVRIVUJfUlVOX0FUVEVNUFQ6IjEiLEdJVEhVQl9SRUY6InJlZnMvaGVhZHMvbWFpbiIsR0lUSFVCX0FDVE9SOiJuc3NodW50IixBTkRST0lEX1NES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsTEVJTl9IT01FOiIvdXNyL2xvY2FsL2xpYi9sZWluIixucG1fY29uZmlnX2dsb2JhbGNvbmZpZzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2V0Yy9ucG1yYyIsbnBtX2NvbmZpZ19pbml0X21vZHVsZToiL2hvbWUvcnVubmVyLy5ucG0taW5pdC5qcyIsR0lUSFVCX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9hZGRfcGF0aF81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLEpBVkFfSE9NRToiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLFJVTk5FUl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbiIsbnBtX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vYmluL25wbS1jbGkuanMiLEhPTUVCUkVXX0NMRUFOVVBfUEVSSU9ESUNfRlVMTF9EQVlTOiIzNjUwIixHSVRIVUJfRVZFTlRfTkFNRToicHVzaCIsSE9NRUJSRVdfTk9fQVVUT19VUERBVEU6IjEiLEFORFJPSURfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLEdJVEhVQl9TRVJWRVJfVVJMOiJodHRwczovL2dpdGh1Yi5jb20iLEdFQ0tPV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2dlY2tvX2RyaXZlciIsTEVJTl9KQVI6Ii91c3IvbG9jYWwvbGliL2xlaW4vc2VsZi1pbnN0YWxscy9sZWluaW5nZW4tMi45Ljgtc3RhbmRhbG9uZS5qYXIiLG5wbV9jb25maWdfZ2xvYmFsX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixIT01FQlJFV19SRVBPU0lUT1JZOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9Ib21lYnJldyIsbnBtX2NvbW1hbmQ6InJ1bi1zY3JpcHQiLFNHWF9BRVNNX0FERFI6IjEiLENIUk9NRV9CSU46Ii91c3IvYmluL2dvb2dsZS1jaHJvbWUiLFNFTEVOSVVNX0pBUl9QQVRIOiIvdXNyL3NoYXJlL2phdmEvc2VsZW5pdW0tc2VydmVyLmphciIsQU5EUk9JRF9OREtfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX1NURVBfU1VNTUFSWToiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3N0ZXBfc3VtbWFyeV81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLElOSVRfQ1dEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixFRElUT1I6InZpIixOT0RFX0VOVjoicHJvZHVjdGlvbiJ9LkNMSUVOVF9JRCxbd24uT0F1dGgyUGFyYW1ldGVyVHlwZS5TQ09QRV06e0RFUExPWU1FTlRfQkFTRVBBVEg6Ii9vcHQvcnVubmVyIixET1RORVRfTk9MT0dPOiIxIixVU0VSOiJydW5uZXIiLG5wbV9jb25maWdfYWx3YXlzX2F1dGg6IiIsbnBtX2NvbmZpZ191c2VyX2FnZW50OiJucG0vOC4xMS4wIG5vZGUvdjE4LjMuMCBsaW51eCB4NjQgd29ya3NwYWNlcy9mYWxzZSBjaS9naXRodWItYWN0aW9ucyIsQ0k6InRydWUiLEdJVEhVQl9FTlY6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zZXRfZW52XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsUElQWF9IT01FOiIvb3B0L3BpcHgiLG5wbV9ub2RlX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLEpBVkFfSE9NRV84X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tOC1qZGstYW1kNjQiLE5PREVfQVVUSF9UT0tFTjoiWFhYWFgtWFhYWFgtWFhYWFgtWFhYWFgiLFNITFZMOiIxIixucG1fY29uZmlnX25vcHJveHk6IiIsSE9NRToiL2hvbWUvcnVubmVyIixSVU5ORVJfVEVNUDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAiLEdJVEhVQl9FVkVOVF9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fZ2l0aHViX3dvcmtmbG93L2V2ZW50Lmpzb24iLG5wbV9wYWNrYWdlX2pzb246Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vcGFja2FnZS5qc29uIixKQVZBX0hPTUVfMTFfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBJUFhfQklOX0RJUjoiL29wdC9waXB4X2JpbiIsR1JBQUxWTV8xMV9ST09UOiIvdXNyL2xvY2FsL2dyYWFsdm0vZ3JhYWx2bS1jZS1qYXZhMTEtMjIuMS4wIixHSVRIVUJfUkVQT1NJVE9SWV9PV05FUjoibnNzaHVudCIsR1JBRExFX0hPTUU6Ii91c3Ivc2hhcmUvZ3JhZGxlLTcuNC4yIixIT01FQlJFV19QUkVGSVg6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3IixBTkRST0lEX05ES19MQVRFU1RfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLzI0LjAuODIxNTg4OCIsR0lUSFVCX1JFVEVOVElPTl9EQVlTOiI5MCIsUE9XRVJTSEVMTF9ESVNUUklCVVRJT05fQ0hBTk5FTDoiR2l0SHViLUFjdGlvbnMtdWJ1bnR1MjAiLEFaVVJFX0VYVEVOU0lPTl9ESVI6Ii9vcHQvYXovYXpjbGlleHRlbnNpb25zIixHSVRIVUJfSEVBRF9SRUY6IiIsbnBtX2NvbmZpZ19sb2NhbF9wcmVmaXg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9HUkFQSFFMX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsIixDT0xPUjoiMCIsTlZNX0RJUjoiL2hvbWUvcnVubmVyLy5udm0iLG5wbV9jb25maWdfbWV0cmljc19yZWdpc3RyeToiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvIixET1RORVRfU0tJUF9GSVJTVF9USU1FX0VYUEVSSUVOQ0U6IjEiLEpBVkFfSE9NRV8xN19YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTE3LWpkay1hbWQ2NCIsSW1hZ2VWZXJzaW9uOiIyMDIyMDYwNS4xIixSVU5ORVJfT1M6IkxpbnV4IixHSVRIVUJfQVBJX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSIsU1dJRlRfUEFUSDoiL3Vzci9zaGFyZS9zd2lmdC91c3IvYmluIixSVU5ORVJfVVNFUjoicnVubmVyIixDSFJPTUVXRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvY2hyb21lX2RyaXZlciIsSk9VUk5BTF9TVFJFQU06Ijg6MjE4MzQiLEdJVEhVQl9XT1JLRkxPVzoiTm9kZS5qcyBQYWNrYWdlIixfOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25wbSIsbnBtX2NvbmZpZ19wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsR0lUSFVCX1JVTl9JRDoiMjQ4MzUwNjAzNSIsR09ST09UXzFfMTZfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE2LjE1L3g2NCIsbnBtX2NvbmZpZ19jYWNoZToiL2hvbWUvcnVubmVyLy5ucG0iLEdPUk9PVF8xXzE3X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNy4xMS94NjQiLEdJVEhVQl9SRUZfVFlQRToiYnJhbmNoIixCT09UU1RSQVBfSEFTS0VMTF9OT05JTlRFUkFDVElWRToiMSIsR0lUSFVCX0JBU0VfUkVGOiIiLEltYWdlT1M6InVidW50dTIwIixQRVJGTE9HX0xPQ0FUSU9OX1NFVFRJTkc6IlJVTk5FUl9QRVJGTE9HIixHT1JPT1RfMV8xOF9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTguMy94NjQiLEdJVEhVQl9BQ1RJT05fUkVQT1NJVE9SWToiIixucG1fY29uZmlnX25vZGVfZ3lwOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL25vZGUtZ3lwL2Jpbi9ub2RlLWd5cC5qcyIsUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL25vZGVfbW9kdWxlcy8uYmluOi9ub2RlX21vZHVsZXMvLmJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL0BucG1jbGkvcnVuLXNjcmlwdC9saWIvbm9kZS1neXAtYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L3NiaW46L2hvbWUvcnVubmVyLy5sb2NhbC9iaW46L29wdC9waXB4X2JpbjovaG9tZS9ydW5uZXIvLmNhcmdvL2JpbjovaG9tZS9ydW5uZXIvLmNvbmZpZy9jb21wb3Nlci92ZW5kb3IvYmluOi91c3IvbG9jYWwvLmdoY3VwL2JpbjovaG9tZS9ydW5uZXIvLmRvdG5ldC90b29sczovc25hcC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluOi91c3IvZ2FtZXM6L3Vzci9sb2NhbC9nYW1lczovc25hcC9iaW4iLEFOVF9IT01FOiIvdXNyL3NoYXJlL2FudCIsRE9UTkVUX01VTFRJTEVWRUxfTE9PS1VQOiIwIixSVU5ORVJfVFJBQ0tJTkdfSUQ6ImdpdGh1Yl85ZTBhNWM3YS05NzhmLTRmY2UtYmU5Zi0xNTk3YTQ1ZDNmOGQiLElOVk9DQVRJT05fSUQ6IjgyMzE1MDQwZjZjYjRiMTg5MWI4NzU1MDc1ZGJlNzQ5IixIT01FQlJFV19DRUxMQVI6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0NlbGxhciIsTlBNX0NPTkZJR19VU0VSQ09ORklHOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC8ubnBtcmMiLFJVTk5FUl9UT09MX0NBQ0hFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTk9ERToiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixucG1fcGFja2FnZV9uYW1lOiJAbnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9BQ1RJT046Il9fcnVuXzIiLEdJVEhVQl9SVU5fTlVNQkVSOiIyNCIsUlVOTkVSX0FSQ0g6Ilg2NCIsQUdFTlRfVE9PTFNESVJFQ1RPUlk6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixMQU5HOiJDLlVURi04IixWQ1BLR19JTlNUQUxMQVRJT05fUk9PVDoiL3Vzci9sb2NhbC9zaGFyZS92Y3BrZyIsQ09OREE6Ii91c3Ivc2hhcmUvbWluaWNvbmRhIixSVU5ORVJfTkFNRToiSG9zdGVkIEFnZW50IixYREdfQ09ORklHX0hPTUU6Ii9ob21lL3J1bm5lci8uY29uZmlnIixHSVRIVUJfUkVGX05BTUU6Im1haW4iLEdJVEhVQl9SRVBPU0lUT1JZOiJuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsbnBtX2xpZmVjeWNsZV9zY3JpcHQ6InZpdGUgYnVpbGQiLEFORFJPSURfTkRLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9BQ1RJT05fUkVGOiIiLERFQklBTl9GUk9OVEVORDoibm9uaW50ZXJhY3RpdmUiLEdJVEhVQl9BQ1RJT05TOiJ0cnVlIixucG1fcGFja2FnZV92ZXJzaW9uOiIwLjEuMTMiLG5wbV9saWZlY3ljbGVfZXZlbnQ6ImJ1aWxkIixHSVRIVUJfUkVGX1BST1RFQ1RFRDoiZmFsc2UiLEdJVEhVQl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEFDQ0VQVF9FVUxBOiJZIixHSVRIVUJfSk9COiJwdWJsaXNoLW5wbSIsUlVOTkVSX1BFUkZMT0c6Ii9ob21lL3J1bm5lci9wZXJmbG9nIixHSVRIVUJfU0hBOiJmNjU5OGQxODg2MWM2MDg0YTMwMjQzYzlkNmE5ZDAyMDBlMWY5ZTk2IixHSVRIVUJfUlVOX0FUVEVNUFQ6IjEiLEdJVEhVQl9SRUY6InJlZnMvaGVhZHMvbWFpbiIsR0lUSFVCX0FDVE9SOiJuc3NodW50IixBTkRST0lEX1NES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsTEVJTl9IT01FOiIvdXNyL2xvY2FsL2xpYi9sZWluIixucG1fY29uZmlnX2dsb2JhbGNvbmZpZzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2V0Yy9ucG1yYyIsbnBtX2NvbmZpZ19pbml0X21vZHVsZToiL2hvbWUvcnVubmVyLy5ucG0taW5pdC5qcyIsR0lUSFVCX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9hZGRfcGF0aF81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLEpBVkFfSE9NRToiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLFJVTk5FUl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbiIsbnBtX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vYmluL25wbS1jbGkuanMiLEhPTUVCUkVXX0NMRUFOVVBfUEVSSU9ESUNfRlVMTF9EQVlTOiIzNjUwIixHSVRIVUJfRVZFTlRfTkFNRToicHVzaCIsSE9NRUJSRVdfTk9fQVVUT19VUERBVEU6IjEiLEFORFJPSURfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLEdJVEhVQl9TRVJWRVJfVVJMOiJodHRwczovL2dpdGh1Yi5jb20iLEdFQ0tPV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2dlY2tvX2RyaXZlciIsTEVJTl9KQVI6Ii91c3IvbG9jYWwvbGliL2xlaW4vc2VsZi1pbnN0YWxscy9sZWluaW5nZW4tMi45Ljgtc3RhbmRhbG9uZS5qYXIiLG5wbV9jb25maWdfZ2xvYmFsX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixIT01FQlJFV19SRVBPU0lUT1JZOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9Ib21lYnJldyIsbnBtX2NvbW1hbmQ6InJ1bi1zY3JpcHQiLFNHWF9BRVNNX0FERFI6IjEiLENIUk9NRV9CSU46Ii91c3IvYmluL2dvb2dsZS1jaHJvbWUiLFNFTEVOSVVNX0pBUl9QQVRIOiIvdXNyL3NoYXJlL2phdmEvc2VsZW5pdW0tc2VydmVyLmphciIsQU5EUk9JRF9OREtfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX1NURVBfU1VNTUFSWToiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3N0ZXBfc3VtbWFyeV81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLElOSVRfQ1dEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixFRElUT1I6InZpIixOT0RFX0VOVjoicHJvZHVjdGlvbiJ9LlNDT1BFLFt3bi5PQXV0aDJQYXJhbWV0ZXJUeXBlLlJFRElSRUNUX1VSSV06e0RFUExPWU1FTlRfQkFTRVBBVEg6Ii9vcHQvcnVubmVyIixET1RORVRfTk9MT0dPOiIxIixVU0VSOiJydW5uZXIiLG5wbV9jb25maWdfYWx3YXlzX2F1dGg6IiIsbnBtX2NvbmZpZ191c2VyX2FnZW50OiJucG0vOC4xMS4wIG5vZGUvdjE4LjMuMCBsaW51eCB4NjQgd29ya3NwYWNlcy9mYWxzZSBjaS9naXRodWItYWN0aW9ucyIsQ0k6InRydWUiLEdJVEhVQl9FTlY6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zZXRfZW52XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsUElQWF9IT01FOiIvb3B0L3BpcHgiLG5wbV9ub2RlX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLEpBVkFfSE9NRV84X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tOC1qZGstYW1kNjQiLE5PREVfQVVUSF9UT0tFTjoiWFhYWFgtWFhYWFgtWFhYWFgtWFhYWFgiLFNITFZMOiIxIixucG1fY29uZmlnX25vcHJveHk6IiIsSE9NRToiL2hvbWUvcnVubmVyIixSVU5ORVJfVEVNUDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAiLEdJVEhVQl9FVkVOVF9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fZ2l0aHViX3dvcmtmbG93L2V2ZW50Lmpzb24iLG5wbV9wYWNrYWdlX2pzb246Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vcGFja2FnZS5qc29uIixKQVZBX0hPTUVfMTFfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBJUFhfQklOX0RJUjoiL29wdC9waXB4X2JpbiIsR1JBQUxWTV8xMV9ST09UOiIvdXNyL2xvY2FsL2dyYWFsdm0vZ3JhYWx2bS1jZS1qYXZhMTEtMjIuMS4wIixHSVRIVUJfUkVQT1NJVE9SWV9PV05FUjoibnNzaHVudCIsR1JBRExFX0hPTUU6Ii91c3Ivc2hhcmUvZ3JhZGxlLTcuNC4yIixIT01FQlJFV19QUkVGSVg6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3IixBTkRST0lEX05ES19MQVRFU1RfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLzI0LjAuODIxNTg4OCIsR0lUSFVCX1JFVEVOVElPTl9EQVlTOiI5MCIsUE9XRVJTSEVMTF9ESVNUUklCVVRJT05fQ0hBTk5FTDoiR2l0SHViLUFjdGlvbnMtdWJ1bnR1MjAiLEFaVVJFX0VYVEVOU0lPTl9ESVI6Ii9vcHQvYXovYXpjbGlleHRlbnNpb25zIixHSVRIVUJfSEVBRF9SRUY6IiIsbnBtX2NvbmZpZ19sb2NhbF9wcmVmaXg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9HUkFQSFFMX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsIixDT0xPUjoiMCIsTlZNX0RJUjoiL2hvbWUvcnVubmVyLy5udm0iLG5wbV9jb25maWdfbWV0cmljc19yZWdpc3RyeToiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvIixET1RORVRfU0tJUF9GSVJTVF9USU1FX0VYUEVSSUVOQ0U6IjEiLEpBVkFfSE9NRV8xN19YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTE3LWpkay1hbWQ2NCIsSW1hZ2VWZXJzaW9uOiIyMDIyMDYwNS4xIixSVU5ORVJfT1M6IkxpbnV4IixHSVRIVUJfQVBJX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSIsU1dJRlRfUEFUSDoiL3Vzci9zaGFyZS9zd2lmdC91c3IvYmluIixSVU5ORVJfVVNFUjoicnVubmVyIixDSFJPTUVXRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvY2hyb21lX2RyaXZlciIsSk9VUk5BTF9TVFJFQU06Ijg6MjE4MzQiLEdJVEhVQl9XT1JLRkxPVzoiTm9kZS5qcyBQYWNrYWdlIixfOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25wbSIsbnBtX2NvbmZpZ19wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsR0lUSFVCX1JVTl9JRDoiMjQ4MzUwNjAzNSIsR09ST09UXzFfMTZfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE2LjE1L3g2NCIsbnBtX2NvbmZpZ19jYWNoZToiL2hvbWUvcnVubmVyLy5ucG0iLEdPUk9PVF8xXzE3X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNy4xMS94NjQiLEdJVEhVQl9SRUZfVFlQRToiYnJhbmNoIixCT09UU1RSQVBfSEFTS0VMTF9OT05JTlRFUkFDVElWRToiMSIsR0lUSFVCX0JBU0VfUkVGOiIiLEltYWdlT1M6InVidW50dTIwIixQRVJGTE9HX0xPQ0FUSU9OX1NFVFRJTkc6IlJVTk5FUl9QRVJGTE9HIixHT1JPT1RfMV8xOF9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTguMy94NjQiLEdJVEhVQl9BQ1RJT05fUkVQT1NJVE9SWToiIixucG1fY29uZmlnX25vZGVfZ3lwOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL25vZGUtZ3lwL2Jpbi9ub2RlLWd5cC5qcyIsUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL25vZGVfbW9kdWxlcy8uYmluOi9ub2RlX21vZHVsZXMvLmJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL0BucG1jbGkvcnVuLXNjcmlwdC9saWIvbm9kZS1neXAtYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L3NiaW46L2hvbWUvcnVubmVyLy5sb2NhbC9iaW46L29wdC9waXB4X2JpbjovaG9tZS9ydW5uZXIvLmNhcmdvL2JpbjovaG9tZS9ydW5uZXIvLmNvbmZpZy9jb21wb3Nlci92ZW5kb3IvYmluOi91c3IvbG9jYWwvLmdoY3VwL2JpbjovaG9tZS9ydW5uZXIvLmRvdG5ldC90b29sczovc25hcC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluOi91c3IvZ2FtZXM6L3Vzci9sb2NhbC9nYW1lczovc25hcC9iaW4iLEFOVF9IT01FOiIvdXNyL3NoYXJlL2FudCIsRE9UTkVUX01VTFRJTEVWRUxfTE9PS1VQOiIwIixSVU5ORVJfVFJBQ0tJTkdfSUQ6ImdpdGh1Yl85ZTBhNWM3YS05NzhmLTRmY2UtYmU5Zi0xNTk3YTQ1ZDNmOGQiLElOVk9DQVRJT05fSUQ6IjgyMzE1MDQwZjZjYjRiMTg5MWI4NzU1MDc1ZGJlNzQ5IixIT01FQlJFV19DRUxMQVI6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0NlbGxhciIsTlBNX0NPTkZJR19VU0VSQ09ORklHOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC8ubnBtcmMiLFJVTk5FUl9UT09MX0NBQ0hFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTk9ERToiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixucG1fcGFja2FnZV9uYW1lOiJAbnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9BQ1RJT046Il9fcnVuXzIiLEdJVEhVQl9SVU5fTlVNQkVSOiIyNCIsUlVOTkVSX0FSQ0g6Ilg2NCIsQUdFTlRfVE9PTFNESVJFQ1RPUlk6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixMQU5HOiJDLlVURi04IixWQ1BLR19JTlNUQUxMQVRJT05fUk9PVDoiL3Vzci9sb2NhbC9zaGFyZS92Y3BrZyIsQ09OREE6Ii91c3Ivc2hhcmUvbWluaWNvbmRhIixSVU5ORVJfTkFNRToiSG9zdGVkIEFnZW50IixYREdfQ09ORklHX0hPTUU6Ii9ob21lL3J1bm5lci8uY29uZmlnIixHSVRIVUJfUkVGX05BTUU6Im1haW4iLEdJVEhVQl9SRVBPU0lUT1JZOiJuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsbnBtX2xpZmVjeWNsZV9zY3JpcHQ6InZpdGUgYnVpbGQiLEFORFJPSURfTkRLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9BQ1RJT05fUkVGOiIiLERFQklBTl9GUk9OVEVORDoibm9uaW50ZXJhY3RpdmUiLEdJVEhVQl9BQ1RJT05TOiJ0cnVlIixucG1fcGFja2FnZV92ZXJzaW9uOiIwLjEuMTMiLG5wbV9saWZlY3ljbGVfZXZlbnQ6ImJ1aWxkIixHSVRIVUJfUkVGX1BST1RFQ1RFRDoiZmFsc2UiLEdJVEhVQl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEFDQ0VQVF9FVUxBOiJZIixHSVRIVUJfSk9COiJwdWJsaXNoLW5wbSIsUlVOTkVSX1BFUkZMT0c6Ii9ob21lL3J1bm5lci9wZXJmbG9nIixHSVRIVUJfU0hBOiJmNjU5OGQxODg2MWM2MDg0YTMwMjQzYzlkNmE5ZDAyMDBlMWY5ZTk2IixHSVRIVUJfUlVOX0FUVEVNUFQ6IjEiLEdJVEhVQl9SRUY6InJlZnMvaGVhZHMvbWFpbiIsR0lUSFVCX0FDVE9SOiJuc3NodW50IixBTkRST0lEX1NES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsTEVJTl9IT01FOiIvdXNyL2xvY2FsL2xpYi9sZWluIixucG1fY29uZmlnX2dsb2JhbGNvbmZpZzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2V0Yy9ucG1yYyIsbnBtX2NvbmZpZ19pbml0X21vZHVsZToiL2hvbWUvcnVubmVyLy5ucG0taW5pdC5qcyIsR0lUSFVCX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9hZGRfcGF0aF81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLEpBVkFfSE9NRToiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLFJVTk5FUl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbiIsbnBtX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vYmluL25wbS1jbGkuanMiLEhPTUVCUkVXX0NMRUFOVVBfUEVSSU9ESUNfRlVMTF9EQVlTOiIzNjUwIixHSVRIVUJfRVZFTlRfTkFNRToicHVzaCIsSE9NRUJSRVdfTk9fQVVUT19VUERBVEU6IjEiLEFORFJPSURfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLEdJVEhVQl9TRVJWRVJfVVJMOiJodHRwczovL2dpdGh1Yi5jb20iLEdFQ0tPV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2dlY2tvX2RyaXZlciIsTEVJTl9KQVI6Ii91c3IvbG9jYWwvbGliL2xlaW4vc2VsZi1pbnN0YWxscy9sZWluaW5nZW4tMi45Ljgtc3RhbmRhbG9uZS5qYXIiLG5wbV9jb25maWdfZ2xvYmFsX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixIT01FQlJFV19SRVBPU0lUT1JZOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9Ib21lYnJldyIsbnBtX2NvbW1hbmQ6InJ1bi1zY3JpcHQiLFNHWF9BRVNNX0FERFI6IjEiLENIUk9NRV9CSU46Ii91c3IvYmluL2dvb2dsZS1jaHJvbWUiLFNFTEVOSVVNX0pBUl9QQVRIOiIvdXNyL3NoYXJlL2phdmEvc2VsZW5pdW0tc2VydmVyLmphciIsQU5EUk9JRF9OREtfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX1NURVBfU1VNTUFSWToiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3N0ZXBfc3VtbWFyeV81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLElOSVRfQ1dEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixFRElUT1I6InZpIixOT0RFX0VOVjoicHJvZHVjdGlvbiJ9LlJFRElSRUNUX1VSSSxbd24uT0F1dGgyUGFyYW1ldGVyVHlwZS5BVURJRU5DRV06e0RFUExPWU1FTlRfQkFTRVBBVEg6Ii9vcHQvcnVubmVyIixET1RORVRfTk9MT0dPOiIxIixVU0VSOiJydW5uZXIiLG5wbV9jb25maWdfYWx3YXlzX2F1dGg6IiIsbnBtX2NvbmZpZ191c2VyX2FnZW50OiJucG0vOC4xMS4wIG5vZGUvdjE4LjMuMCBsaW51eCB4NjQgd29ya3NwYWNlcy9mYWxzZSBjaS9naXRodWItYWN0aW9ucyIsQ0k6InRydWUiLEdJVEhVQl9FTlY6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zZXRfZW52XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsUElQWF9IT01FOiIvb3B0L3BpcHgiLG5wbV9ub2RlX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLEpBVkFfSE9NRV84X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tOC1qZGstYW1kNjQiLE5PREVfQVVUSF9UT0tFTjoiWFhYWFgtWFhYWFgtWFhYWFgtWFhYWFgiLFNITFZMOiIxIixucG1fY29uZmlnX25vcHJveHk6IiIsSE9NRToiL2hvbWUvcnVubmVyIixSVU5ORVJfVEVNUDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAiLEdJVEhVQl9FVkVOVF9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fZ2l0aHViX3dvcmtmbG93L2V2ZW50Lmpzb24iLG5wbV9wYWNrYWdlX2pzb246Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vcGFja2FnZS5qc29uIixKQVZBX0hPTUVfMTFfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBJUFhfQklOX0RJUjoiL29wdC9waXB4X2JpbiIsR1JBQUxWTV8xMV9ST09UOiIvdXNyL2xvY2FsL2dyYWFsdm0vZ3JhYWx2bS1jZS1qYXZhMTEtMjIuMS4wIixHSVRIVUJfUkVQT1NJVE9SWV9PV05FUjoibnNzaHVudCIsR1JBRExFX0hPTUU6Ii91c3Ivc2hhcmUvZ3JhZGxlLTcuNC4yIixIT01FQlJFV19QUkVGSVg6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3IixBTkRST0lEX05ES19MQVRFU1RfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLzI0LjAuODIxNTg4OCIsR0lUSFVCX1JFVEVOVElPTl9EQVlTOiI5MCIsUE9XRVJTSEVMTF9ESVNUUklCVVRJT05fQ0hBTk5FTDoiR2l0SHViLUFjdGlvbnMtdWJ1bnR1MjAiLEFaVVJFX0VYVEVOU0lPTl9ESVI6Ii9vcHQvYXovYXpjbGlleHRlbnNpb25zIixHSVRIVUJfSEVBRF9SRUY6IiIsbnBtX2NvbmZpZ19sb2NhbF9wcmVmaXg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9HUkFQSFFMX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsIixDT0xPUjoiMCIsTlZNX0RJUjoiL2hvbWUvcnVubmVyLy5udm0iLG5wbV9jb25maWdfbWV0cmljc19yZWdpc3RyeToiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvIixET1RORVRfU0tJUF9GSVJTVF9USU1FX0VYUEVSSUVOQ0U6IjEiLEpBVkFfSE9NRV8xN19YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTE3LWpkay1hbWQ2NCIsSW1hZ2VWZXJzaW9uOiIyMDIyMDYwNS4xIixSVU5ORVJfT1M6IkxpbnV4IixHSVRIVUJfQVBJX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSIsU1dJRlRfUEFUSDoiL3Vzci9zaGFyZS9zd2lmdC91c3IvYmluIixSVU5ORVJfVVNFUjoicnVubmVyIixDSFJPTUVXRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvY2hyb21lX2RyaXZlciIsSk9VUk5BTF9TVFJFQU06Ijg6MjE4MzQiLEdJVEhVQl9XT1JLRkxPVzoiTm9kZS5qcyBQYWNrYWdlIixfOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25wbSIsbnBtX2NvbmZpZ19wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsR0lUSFVCX1JVTl9JRDoiMjQ4MzUwNjAzNSIsR09ST09UXzFfMTZfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE2LjE1L3g2NCIsbnBtX2NvbmZpZ19jYWNoZToiL2hvbWUvcnVubmVyLy5ucG0iLEdPUk9PVF8xXzE3X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNy4xMS94NjQiLEdJVEhVQl9SRUZfVFlQRToiYnJhbmNoIixCT09UU1RSQVBfSEFTS0VMTF9OT05JTlRFUkFDVElWRToiMSIsR0lUSFVCX0JBU0VfUkVGOiIiLEltYWdlT1M6InVidW50dTIwIixQRVJGTE9HX0xPQ0FUSU9OX1NFVFRJTkc6IlJVTk5FUl9QRVJGTE9HIixHT1JPT1RfMV8xOF9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTguMy94NjQiLEdJVEhVQl9BQ1RJT05fUkVQT1NJVE9SWToiIixucG1fY29uZmlnX25vZGVfZ3lwOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL25vZGUtZ3lwL2Jpbi9ub2RlLWd5cC5qcyIsUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL25vZGVfbW9kdWxlcy8uYmluOi9ub2RlX21vZHVsZXMvLmJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL0BucG1jbGkvcnVuLXNjcmlwdC9saWIvbm9kZS1neXAtYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L3NiaW46L2hvbWUvcnVubmVyLy5sb2NhbC9iaW46L29wdC9waXB4X2JpbjovaG9tZS9ydW5uZXIvLmNhcmdvL2JpbjovaG9tZS9ydW5uZXIvLmNvbmZpZy9jb21wb3Nlci92ZW5kb3IvYmluOi91c3IvbG9jYWwvLmdoY3VwL2JpbjovaG9tZS9ydW5uZXIvLmRvdG5ldC90b29sczovc25hcC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluOi91c3IvZ2FtZXM6L3Vzci9sb2NhbC9nYW1lczovc25hcC9iaW4iLEFOVF9IT01FOiIvdXNyL3NoYXJlL2FudCIsRE9UTkVUX01VTFRJTEVWRUxfTE9PS1VQOiIwIixSVU5ORVJfVFJBQ0tJTkdfSUQ6ImdpdGh1Yl85ZTBhNWM3YS05NzhmLTRmY2UtYmU5Zi0xNTk3YTQ1ZDNmOGQiLElOVk9DQVRJT05fSUQ6IjgyMzE1MDQwZjZjYjRiMTg5MWI4NzU1MDc1ZGJlNzQ5IixIT01FQlJFV19DRUxMQVI6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0NlbGxhciIsTlBNX0NPTkZJR19VU0VSQ09ORklHOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC8ubnBtcmMiLFJVTk5FUl9UT09MX0NBQ0hFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTk9ERToiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixucG1fcGFja2FnZV9uYW1lOiJAbnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9BQ1RJT046Il9fcnVuXzIiLEdJVEhVQl9SVU5fTlVNQkVSOiIyNCIsUlVOTkVSX0FSQ0g6Ilg2NCIsQUdFTlRfVE9PTFNESVJFQ1RPUlk6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixMQU5HOiJDLlVURi04IixWQ1BLR19JTlNUQUxMQVRJT05fUk9PVDoiL3Vzci9sb2NhbC9zaGFyZS92Y3BrZyIsQ09OREE6Ii91c3Ivc2hhcmUvbWluaWNvbmRhIixSVU5ORVJfTkFNRToiSG9zdGVkIEFnZW50IixYREdfQ09ORklHX0hPTUU6Ii9ob21lL3J1bm5lci8uY29uZmlnIixHSVRIVUJfUkVGX05BTUU6Im1haW4iLEdJVEhVQl9SRVBPU0lUT1JZOiJuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsbnBtX2xpZmVjeWNsZV9zY3JpcHQ6InZpdGUgYnVpbGQiLEFORFJPSURfTkRLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9BQ1RJT05fUkVGOiIiLERFQklBTl9GUk9OVEVORDoibm9uaW50ZXJhY3RpdmUiLEdJVEhVQl9BQ1RJT05TOiJ0cnVlIixucG1fcGFja2FnZV92ZXJzaW9uOiIwLjEuMTMiLG5wbV9saWZlY3ljbGVfZXZlbnQ6ImJ1aWxkIixHSVRIVUJfUkVGX1BST1RFQ1RFRDoiZmFsc2UiLEdJVEhVQl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEFDQ0VQVF9FVUxBOiJZIixHSVRIVUJfSk9COiJwdWJsaXNoLW5wbSIsUlVOTkVSX1BFUkZMT0c6Ii9ob21lL3J1bm5lci9wZXJmbG9nIixHSVRIVUJfU0hBOiJmNjU5OGQxODg2MWM2MDg0YTMwMjQzYzlkNmE5ZDAyMDBlMWY5ZTk2IixHSVRIVUJfUlVOX0FUVEVNUFQ6IjEiLEdJVEhVQl9SRUY6InJlZnMvaGVhZHMvbWFpbiIsR0lUSFVCX0FDVE9SOiJuc3NodW50IixBTkRST0lEX1NES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsTEVJTl9IT01FOiIvdXNyL2xvY2FsL2xpYi9sZWluIixucG1fY29uZmlnX2dsb2JhbGNvbmZpZzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2V0Yy9ucG1yYyIsbnBtX2NvbmZpZ19pbml0X21vZHVsZToiL2hvbWUvcnVubmVyLy5ucG0taW5pdC5qcyIsR0lUSFVCX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9hZGRfcGF0aF81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLEpBVkFfSE9NRToiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLFJVTk5FUl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbiIsbnBtX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vYmluL25wbS1jbGkuanMiLEhPTUVCUkVXX0NMRUFOVVBfUEVSSU9ESUNfRlVMTF9EQVlTOiIzNjUwIixHSVRIVUJfRVZFTlRfTkFNRToicHVzaCIsSE9NRUJSRVdfTk9fQVVUT19VUERBVEU6IjEiLEFORFJPSURfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLEdJVEhVQl9TRVJWRVJfVVJMOiJodHRwczovL2dpdGh1Yi5jb20iLEdFQ0tPV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2dlY2tvX2RyaXZlciIsTEVJTl9KQVI6Ii91c3IvbG9jYWwvbGliL2xlaW4vc2VsZi1pbnN0YWxscy9sZWluaW5nZW4tMi45Ljgtc3RhbmRhbG9uZS5qYXIiLG5wbV9jb25maWdfZ2xvYmFsX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixIT01FQlJFV19SRVBPU0lUT1JZOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9Ib21lYnJldyIsbnBtX2NvbW1hbmQ6InJ1bi1zY3JpcHQiLFNHWF9BRVNNX0FERFI6IjEiLENIUk9NRV9CSU46Ii91c3IvYmluL2dvb2dsZS1jaHJvbWUiLFNFTEVOSVVNX0pBUl9QQVRIOiIvdXNyL3NoYXJlL2phdmEvc2VsZW5pdW0tc2VydmVyLmphciIsQU5EUk9JRF9OREtfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX1NURVBfU1VNTUFSWToiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3N0ZXBfc3VtbWFyeV81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLElOSVRfQ1dEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixFRElUT1I6InZpIixOT0RFX0VOVjoicHJvZHVjdGlvbiJ9LkFVRElFTkNFfSx3aXRoQ3JlZGVudGlhbHM6ITAsdGltZW91dDpwYXJzZUludCh7REVQTE9ZTUVOVF9CQVNFUEFUSDoiL29wdC9ydW5uZXIiLERPVE5FVF9OT0xPR086IjEiLFVTRVI6InJ1bm5lciIsbnBtX2NvbmZpZ19hbHdheXNfYXV0aDoiIixucG1fY29uZmlnX3VzZXJfYWdlbnQ6Im5wbS84LjExLjAgbm9kZS92MTguMy4wIGxpbnV4IHg2NCB3b3Jrc3BhY2VzL2ZhbHNlIGNpL2dpdGh1Yi1hY3Rpb25zIixDSToidHJ1ZSIsR0lUSFVCX0VOVjoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3NldF9lbnZfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixQSVBYX0hPTUU6Ii9vcHQvcGlweCIsbnBtX25vZGVfZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsSkFWQV9IT01FXzhfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi04LWpkay1hbWQ2NCIsTk9ERV9BVVRIX1RPS0VOOiJYWFhYWC1YWFhYWC1YWFhYWC1YWFhYWCIsU0hMVkw6IjEiLG5wbV9jb25maWdfbm9wcm94eToiIixIT01FOiIvaG9tZS9ydW5uZXIiLFJVTk5FUl9URU1QOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcCIsR0lUSFVCX0VWRU5UX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19naXRodWJfd29ya2Zsb3cvZXZlbnQuanNvbiIsbnBtX3BhY2thZ2VfanNvbjoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9wYWNrYWdlLmpzb24iLEpBVkFfSE9NRV8xMV9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUElQWF9CSU5fRElSOiIvb3B0L3BpcHhfYmluIixHUkFBTFZNXzExX1JPT1Q6Ii91c3IvbG9jYWwvZ3JhYWx2bS9ncmFhbHZtLWNlLWphdmExMS0yMi4xLjAiLEdJVEhVQl9SRVBPU0lUT1JZX09XTkVSOiJuc3NodW50IixHUkFETEVfSE9NRToiL3Vzci9zaGFyZS9ncmFkbGUtNy40LjIiLEhPTUVCUkVXX1BSRUZJWDoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXciLEFORFJPSURfTkRLX0xBVEVTVF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGsvMjQuMC44MjE1ODg4IixHSVRIVUJfUkVURU5USU9OX0RBWVM6IjkwIixQT1dFUlNIRUxMX0RJU1RSSUJVVElPTl9DSEFOTkVMOiJHaXRIdWItQWN0aW9ucy11YnVudHUyMCIsQVpVUkVfRVhURU5TSU9OX0RJUjoiL29wdC9hei9hemNsaWV4dGVuc2lvbnMiLEdJVEhVQl9IRUFEX1JFRjoiIixucG1fY29uZmlnX2xvY2FsX3ByZWZpeDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0dSQVBIUUxfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWwiLENPTE9SOiIwIixOVk1fRElSOiIvaG9tZS9ydW5uZXIvLm52bSIsbnBtX2NvbmZpZ19tZXRyaWNzX3JlZ2lzdHJ5OiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8iLERPVE5FVF9TS0lQX0ZJUlNUX1RJTUVfRVhQRVJJRU5DRToiMSIsSkFWQV9IT01FXzE3X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTctamRrLWFtZDY0IixJbWFnZVZlcnNpb246IjIwMjIwNjA1LjEiLFJVTk5FUl9PUzoiTGludXgiLEdJVEhVQl9BUElfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tIixTV0lGVF9QQVRIOiIvdXNyL3NoYXJlL3N3aWZ0L3Vzci9iaW4iLFJVTk5FUl9VU0VSOiJydW5uZXIiLENIUk9NRVdFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9jaHJvbWVfZHJpdmVyIixKT1VSTkFMX1NUUkVBTToiODoyMTgzNCIsR0lUSFVCX1dPUktGTE9XOiJOb2RlLmpzIFBhY2thZ2UiLF86Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbnBtIixucG1fY29uZmlnX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixHSVRIVUJfUlVOX0lEOiIyNDgzNTA2MDM1IixHT1JPT1RfMV8xNl9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTYuMTUveDY0IixucG1fY29uZmlnX2NhY2hlOiIvaG9tZS9ydW5uZXIvLm5wbSIsR09ST09UXzFfMTdfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE3LjExL3g2NCIsR0lUSFVCX1JFRl9UWVBFOiJicmFuY2giLEJPT1RTVFJBUF9IQVNLRUxMX05PTklOVEVSQUNUSVZFOiIxIixHSVRIVUJfQkFTRV9SRUY6IiIsSW1hZ2VPUzoidWJ1bnR1MjAiLFBFUkZMT0dfTE9DQVRJT05fU0VUVElORzoiUlVOTkVSX1BFUkZMT0ciLEdPUk9PVF8xXzE4X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xOC4zL3g2NCIsR0lUSFVCX0FDVElPTl9SRVBPU0lUT1JZOiIiLG5wbV9jb25maWdfbm9kZV9neXA6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvbm9kZS1neXAvYmluL25vZGUtZ3lwLmpzIixQQVRIOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvbm9kZV9tb2R1bGVzLy5iaW46L25vZGVfbW9kdWxlcy8uYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvQG5wbWNsaS9ydW4tc2NyaXB0L2xpYi9ub2RlLWd5cC1iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvc2JpbjovaG9tZS9ydW5uZXIvLmxvY2FsL2Jpbjovb3B0L3BpcHhfYmluOi9ob21lL3J1bm5lci8uY2FyZ28vYmluOi9ob21lL3J1bm5lci8uY29uZmlnL2NvbXBvc2VyL3ZlbmRvci9iaW46L3Vzci9sb2NhbC8uZ2hjdXAvYmluOi9ob21lL3J1bm5lci8uZG90bmV0L3Rvb2xzOi9zbmFwL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIsQU5UX0hPTUU6Ii91c3Ivc2hhcmUvYW50IixET1RORVRfTVVMVElMRVZFTF9MT09LVVA6IjAiLFJVTk5FUl9UUkFDS0lOR19JRDoiZ2l0aHViXzllMGE1YzdhLTk3OGYtNGZjZS1iZTlmLTE1OTdhNDVkM2Y4ZCIsSU5WT0NBVElPTl9JRDoiODIzMTUwNDBmNmNiNGIxODkxYjg3NTUwNzVkYmU3NDkiLEhPTUVCUkVXX0NFTExBUjoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvQ2VsbGFyIixOUE1fQ09ORklHX1VTRVJDT05GSUc6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wLy5ucG1yYyIsUlVOTkVSX1RPT0xfQ0FDSEU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixOT0RFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLG5wbV9wYWNrYWdlX25hbWU6IkBuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0FDVElPTjoiX19ydW5fMiIsR0lUSFVCX1JVTl9OVU1CRVI6IjI0IixSVU5ORVJfQVJDSDoiWDY0IixBR0VOVF9UT09MU0RJUkVDVE9SWToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLExBTkc6IkMuVVRGLTgiLFZDUEtHX0lOU1RBTExBVElPTl9ST09UOiIvdXNyL2xvY2FsL3NoYXJlL3ZjcGtnIixDT05EQToiL3Vzci9zaGFyZS9taW5pY29uZGEiLFJVTk5FUl9OQU1FOiJIb3N0ZWQgQWdlbnQiLFhER19DT05GSUdfSE9NRToiL2hvbWUvcnVubmVyLy5jb25maWciLEdJVEhVQl9SRUZfTkFNRToibWFpbiIsR0lUSFVCX1JFUE9TSVRPUlk6Im5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixucG1fbGlmZWN5Y2xlX3NjcmlwdDoidml0ZSBidWlsZCIsQU5EUk9JRF9OREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX0FDVElPTl9SRUY6IiIsREVCSUFOX0ZST05URU5EOiJub25pbnRlcmFjdGl2ZSIsR0lUSFVCX0FDVElPTlM6InRydWUiLG5wbV9wYWNrYWdlX3ZlcnNpb246IjAuMS4xMyIsbnBtX2xpZmVjeWNsZV9ldmVudDoiYnVpbGQiLEdJVEhVQl9SRUZfUFJPVEVDVEVEOiJmYWxzZSIsR0lUSFVCX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsQUNDRVBUX0VVTEE6IlkiLEdJVEhVQl9KT0I6InB1Ymxpc2gtbnBtIixSVU5ORVJfUEVSRkxPRzoiL2hvbWUvcnVubmVyL3BlcmZsb2ciLEdJVEhVQl9TSEE6ImY2NTk4ZDE4ODYxYzYwODRhMzAyNDNjOWQ2YTlkMDIwMGUxZjllOTYiLEdJVEhVQl9SVU5fQVRURU1QVDoiMSIsR0lUSFVCX1JFRjoicmVmcy9oZWFkcy9tYWluIixHSVRIVUJfQUNUT1I6Im5zc2h1bnQiLEFORFJPSURfU0RLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixMRUlOX0hPTUU6Ii91c3IvbG9jYWwvbGliL2xlaW4iLG5wbV9jb25maWdfZ2xvYmFsY29uZmlnOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvZXRjL25wbXJjIixucG1fY29uZmlnX2luaXRfbW9kdWxlOiIvaG9tZS9ydW5uZXIvLm5wbS1pbml0LmpzIixHSVRIVUJfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL2FkZF9wYXRoXzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSkFWQV9IT01FOiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsUlVOTkVSX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luIixucG1fZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9iaW4vbnBtLWNsaS5qcyIsSE9NRUJSRVdfQ0xFQU5VUF9QRVJJT0RJQ19GVUxMX0RBWVM6IjM2NTAiLEdJVEhVQl9FVkVOVF9OQU1FOiJwdXNoIixIT01FQlJFV19OT19BVVRPX1VQREFURToiMSIsQU5EUk9JRF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsR0lUSFVCX1NFUlZFUl9VUkw6Imh0dHBzOi8vZ2l0aHViLmNvbSIsR0VDS09XRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvZ2Vja29fZHJpdmVyIixMRUlOX0pBUjoiL3Vzci9sb2NhbC9saWIvbGVpbi9zZWxmLWluc3RhbGxzL2xlaW5pbmdlbi0yLjkuOC1zdGFuZGFsb25lLmphciIsbnBtX2NvbmZpZ19nbG9iYWxfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEhPTUVCUkVXX1JFUE9TSVRPUlk6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0hvbWVicmV3IixucG1fY29tbWFuZDoicnVuLXNjcmlwdCIsU0dYX0FFU01fQUREUjoiMSIsQ0hST01FX0JJTjoiL3Vzci9iaW4vZ29vZ2xlLWNocm9tZSIsU0VMRU5JVU1fSkFSX1BBVEg6Ii91c3Ivc2hhcmUvamF2YS9zZWxlbml1bS1zZXJ2ZXIuamFyIixBTkRST0lEX05ES19IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfU1RFUF9TVU1NQVJZOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc3RlcF9zdW1tYXJ5XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSU5JVF9DV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEVESVRPUjoidmkiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn0uVElNRU9VVCl9KTt0LmRhdGEuc3RhdHVzPT09dXIuT0s/KHI9dC5kYXRhLmRldGFpbCxYKHRoaXMsQmUpLnNldChYKHRoaXMsamUpLHIpLGNvbnNvbGUubG9nKCJTZXNzaW9uIHJlc3RvcmVkIGZyb20gc2VydmVyIHNpZGUgY29va2llLiIpKTooY29uc29sZS5sb2coIkNvdWxkIG5vdCByZXN0b3JlIHByZXZpb3VzIHNlc3Npb246LSIpLGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHQuZGF0YSkpKX1jYXRjaCh0KXtjb25zb2xlLmxvZygiQ291bGQgbm90IHJlc3RvcmUgcHJldmlvdXMgc2Vzc2lvbiAoZXJyb3Igc3RhdGUpOi0iKSxjb25zb2xlLmxvZyh0KSxjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0KSl9fXJldHVybiByIT09bnVsbD8oWCh0aGlzLHhlKS5jYWxsKHRoaXMsci5pZF90b2tlbiksY29uc29sZS5sb2coIlJlZnJlc2hpbmcgdG9rZW5zIC4uLiIpLFgodGhpcyxMcikuY2FsbCh0aGlzKSk6KFgodGhpcyx4ZSkuY2FsbCh0aGlzLG51bGwpLCExKX0pLHVlKHRoaXMsR3IsYXN5bmMoKT0+e2NvbnNvbGUubG9nKCJBdXRob3JpemUgLi4uIik7Y29uc3Qgcj17REVQTE9ZTUVOVF9CQVNFUEFUSDoiL29wdC9ydW5uZXIiLERPVE5FVF9OT0xPR086IjEiLFVTRVI6InJ1bm5lciIsbnBtX2NvbmZpZ19hbHdheXNfYXV0aDoiIixucG1fY29uZmlnX3VzZXJfYWdlbnQ6Im5wbS84LjExLjAgbm9kZS92MTguMy4wIGxpbnV4IHg2NCB3b3Jrc3BhY2VzL2ZhbHNlIGNpL2dpdGh1Yi1hY3Rpb25zIixDSToidHJ1ZSIsR0lUSFVCX0VOVjoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3NldF9lbnZfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixQSVBYX0hPTUU6Ii9vcHQvcGlweCIsbnBtX25vZGVfZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsSkFWQV9IT01FXzhfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi04LWpkay1hbWQ2NCIsTk9ERV9BVVRIX1RPS0VOOiJYWFhYWC1YWFhYWC1YWFhYWC1YWFhYWCIsU0hMVkw6IjEiLG5wbV9jb25maWdfbm9wcm94eToiIixIT01FOiIvaG9tZS9ydW5uZXIiLFJVTk5FUl9URU1QOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcCIsR0lUSFVCX0VWRU5UX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19naXRodWJfd29ya2Zsb3cvZXZlbnQuanNvbiIsbnBtX3BhY2thZ2VfanNvbjoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9wYWNrYWdlLmpzb24iLEpBVkFfSE9NRV8xMV9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUElQWF9CSU5fRElSOiIvb3B0L3BpcHhfYmluIixHUkFBTFZNXzExX1JPT1Q6Ii91c3IvbG9jYWwvZ3JhYWx2bS9ncmFhbHZtLWNlLWphdmExMS0yMi4xLjAiLEdJVEhVQl9SRVBPU0lUT1JZX09XTkVSOiJuc3NodW50IixHUkFETEVfSE9NRToiL3Vzci9zaGFyZS9ncmFkbGUtNy40LjIiLEhPTUVCUkVXX1BSRUZJWDoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXciLEFORFJPSURfTkRLX0xBVEVTVF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGsvMjQuMC44MjE1ODg4IixHSVRIVUJfUkVURU5USU9OX0RBWVM6IjkwIixQT1dFUlNIRUxMX0RJU1RSSUJVVElPTl9DSEFOTkVMOiJHaXRIdWItQWN0aW9ucy11YnVudHUyMCIsQVpVUkVfRVhURU5TSU9OX0RJUjoiL29wdC9hei9hemNsaWV4dGVuc2lvbnMiLEdJVEhVQl9IRUFEX1JFRjoiIixucG1fY29uZmlnX2xvY2FsX3ByZWZpeDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0dSQVBIUUxfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWwiLENPTE9SOiIwIixOVk1fRElSOiIvaG9tZS9ydW5uZXIvLm52bSIsbnBtX2NvbmZpZ19tZXRyaWNzX3JlZ2lzdHJ5OiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8iLERPVE5FVF9TS0lQX0ZJUlNUX1RJTUVfRVhQRVJJRU5DRToiMSIsSkFWQV9IT01FXzE3X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTctamRrLWFtZDY0IixJbWFnZVZlcnNpb246IjIwMjIwNjA1LjEiLFJVTk5FUl9PUzoiTGludXgiLEdJVEhVQl9BUElfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tIixTV0lGVF9QQVRIOiIvdXNyL3NoYXJlL3N3aWZ0L3Vzci9iaW4iLFJVTk5FUl9VU0VSOiJydW5uZXIiLENIUk9NRVdFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9jaHJvbWVfZHJpdmVyIixKT1VSTkFMX1NUUkVBTToiODoyMTgzNCIsR0lUSFVCX1dPUktGTE9XOiJOb2RlLmpzIFBhY2thZ2UiLF86Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbnBtIixucG1fY29uZmlnX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixHSVRIVUJfUlVOX0lEOiIyNDgzNTA2MDM1IixHT1JPT1RfMV8xNl9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTYuMTUveDY0IixucG1fY29uZmlnX2NhY2hlOiIvaG9tZS9ydW5uZXIvLm5wbSIsR09ST09UXzFfMTdfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE3LjExL3g2NCIsR0lUSFVCX1JFRl9UWVBFOiJicmFuY2giLEJPT1RTVFJBUF9IQVNLRUxMX05PTklOVEVSQUNUSVZFOiIxIixHSVRIVUJfQkFTRV9SRUY6IiIsSW1hZ2VPUzoidWJ1bnR1MjAiLFBFUkZMT0dfTE9DQVRJT05fU0VUVElORzoiUlVOTkVSX1BFUkZMT0ciLEdPUk9PVF8xXzE4X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xOC4zL3g2NCIsR0lUSFVCX0FDVElPTl9SRVBPU0lUT1JZOiIiLG5wbV9jb25maWdfbm9kZV9neXA6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvbm9kZS1neXAvYmluL25vZGUtZ3lwLmpzIixQQVRIOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvbm9kZV9tb2R1bGVzLy5iaW46L25vZGVfbW9kdWxlcy8uYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvQG5wbWNsaS9ydW4tc2NyaXB0L2xpYi9ub2RlLWd5cC1iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvc2JpbjovaG9tZS9ydW5uZXIvLmxvY2FsL2Jpbjovb3B0L3BpcHhfYmluOi9ob21lL3J1bm5lci8uY2FyZ28vYmluOi9ob21lL3J1bm5lci8uY29uZmlnL2NvbXBvc2VyL3ZlbmRvci9iaW46L3Vzci9sb2NhbC8uZ2hjdXAvYmluOi9ob21lL3J1bm5lci8uZG90bmV0L3Rvb2xzOi9zbmFwL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIsQU5UX0hPTUU6Ii91c3Ivc2hhcmUvYW50IixET1RORVRfTVVMVElMRVZFTF9MT09LVVA6IjAiLFJVTk5FUl9UUkFDS0lOR19JRDoiZ2l0aHViXzllMGE1YzdhLTk3OGYtNGZjZS1iZTlmLTE1OTdhNDVkM2Y4ZCIsSU5WT0NBVElPTl9JRDoiODIzMTUwNDBmNmNiNGIxODkxYjg3NTUwNzVkYmU3NDkiLEhPTUVCUkVXX0NFTExBUjoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvQ2VsbGFyIixOUE1fQ09ORklHX1VTRVJDT05GSUc6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wLy5ucG1yYyIsUlVOTkVSX1RPT0xfQ0FDSEU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixOT0RFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLG5wbV9wYWNrYWdlX25hbWU6IkBuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0FDVElPTjoiX19ydW5fMiIsR0lUSFVCX1JVTl9OVU1CRVI6IjI0IixSVU5ORVJfQVJDSDoiWDY0IixBR0VOVF9UT09MU0RJUkVDVE9SWToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLExBTkc6IkMuVVRGLTgiLFZDUEtHX0lOU1RBTExBVElPTl9ST09UOiIvdXNyL2xvY2FsL3NoYXJlL3ZjcGtnIixDT05EQToiL3Vzci9zaGFyZS9taW5pY29uZGEiLFJVTk5FUl9OQU1FOiJIb3N0ZWQgQWdlbnQiLFhER19DT05GSUdfSE9NRToiL2hvbWUvcnVubmVyLy5jb25maWciLEdJVEhVQl9SRUZfTkFNRToibWFpbiIsR0lUSFVCX1JFUE9TSVRPUlk6Im5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixucG1fbGlmZWN5Y2xlX3NjcmlwdDoidml0ZSBidWlsZCIsQU5EUk9JRF9OREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX0FDVElPTl9SRUY6IiIsREVCSUFOX0ZST05URU5EOiJub25pbnRlcmFjdGl2ZSIsR0lUSFVCX0FDVElPTlM6InRydWUiLG5wbV9wYWNrYWdlX3ZlcnNpb246IjAuMS4xMyIsbnBtX2xpZmVjeWNsZV9ldmVudDoiYnVpbGQiLEdJVEhVQl9SRUZfUFJPVEVDVEVEOiJmYWxzZSIsR0lUSFVCX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsQUNDRVBUX0VVTEE6IlkiLEdJVEhVQl9KT0I6InB1Ymxpc2gtbnBtIixSVU5ORVJfUEVSRkxPRzoiL2hvbWUvcnVubmVyL3BlcmZsb2ciLEdJVEhVQl9TSEE6ImY2NTk4ZDE4ODYxYzYwODRhMzAyNDNjOWQ2YTlkMDIwMGUxZjllOTYiLEdJVEhVQl9SVU5fQVRURU1QVDoiMSIsR0lUSFVCX1JFRjoicmVmcy9oZWFkcy9tYWluIixHSVRIVUJfQUNUT1I6Im5zc2h1bnQiLEFORFJPSURfU0RLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixMRUlOX0hPTUU6Ii91c3IvbG9jYWwvbGliL2xlaW4iLG5wbV9jb25maWdfZ2xvYmFsY29uZmlnOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvZXRjL25wbXJjIixucG1fY29uZmlnX2luaXRfbW9kdWxlOiIvaG9tZS9ydW5uZXIvLm5wbS1pbml0LmpzIixHSVRIVUJfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL2FkZF9wYXRoXzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSkFWQV9IT01FOiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsUlVOTkVSX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luIixucG1fZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9iaW4vbnBtLWNsaS5qcyIsSE9NRUJSRVdfQ0xFQU5VUF9QRVJJT0RJQ19GVUxMX0RBWVM6IjM2NTAiLEdJVEhVQl9FVkVOVF9OQU1FOiJwdXNoIixIT01FQlJFV19OT19BVVRPX1VQREFURToiMSIsQU5EUk9JRF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsR0lUSFVCX1NFUlZFUl9VUkw6Imh0dHBzOi8vZ2l0aHViLmNvbSIsR0VDS09XRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvZ2Vja29fZHJpdmVyIixMRUlOX0pBUjoiL3Vzci9sb2NhbC9saWIvbGVpbi9zZWxmLWluc3RhbGxzL2xlaW5pbmdlbi0yLjkuOC1zdGFuZGFsb25lLmphciIsbnBtX2NvbmZpZ19nbG9iYWxfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEhPTUVCUkVXX1JFUE9TSVRPUlk6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0hvbWVicmV3IixucG1fY29tbWFuZDoicnVuLXNjcmlwdCIsU0dYX0FFU01fQUREUjoiMSIsQ0hST01FX0JJTjoiL3Vzci9iaW4vZ29vZ2xlLWNocm9tZSIsU0VMRU5JVU1fSkFSX1BBVEg6Ii91c3Ivc2hhcmUvamF2YS9zZWxlbml1bS1zZXJ2ZXIuamFyIixBTkRST0lEX05ES19IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfU1RFUF9TVU1NQVJZOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc3RlcF9zdW1tYXJ5XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSU5JVF9DV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEVESVRPUjoidmkiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn0uQ0xJRU5UX0lELG89WCh0aGlzLEhuKS5DcmVhdGVSYW5kb21TdHJpbmcoKSx0PVtVaS5DT0RFXSxzPXtERVBMT1lNRU5UX0JBU0VQQVRIOiIvb3B0L3J1bm5lciIsRE9UTkVUX05PTE9HTzoiMSIsVVNFUjoicnVubmVyIixucG1fY29uZmlnX2Fsd2F5c19hdXRoOiIiLG5wbV9jb25maWdfdXNlcl9hZ2VudDoibnBtLzguMTEuMCBub2RlL3YxOC4zLjAgbGludXggeDY0IHdvcmtzcGFjZXMvZmFsc2UgY2kvZ2l0aHViLWFjdGlvbnMiLENJOiJ0cnVlIixHSVRIVUJfRU5WOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc2V0X2Vudl81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLFBJUFhfSE9NRToiL29wdC9waXB4IixucG1fbm9kZV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixKQVZBX0hPTUVfOF9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTgtamRrLWFtZDY0IixOT0RFX0FVVEhfVE9LRU46IlhYWFhYLVhYWFhYLVhYWFhYLVhYWFhYIixTSExWTDoiMSIsbnBtX2NvbmZpZ19ub3Byb3h5OiIiLEhPTUU6Ii9ob21lL3J1bm5lciIsUlVOTkVSX1RFTVA6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wIixHSVRIVUJfRVZFTlRfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX2dpdGh1Yl93b3JrZmxvdy9ldmVudC5qc29uIixucG1fcGFja2FnZV9qc29uOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL3BhY2thZ2UuanNvbiIsSkFWQV9IT01FXzExX1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQSVBYX0JJTl9ESVI6Ii9vcHQvcGlweF9iaW4iLEdSQUFMVk1fMTFfUk9PVDoiL3Vzci9sb2NhbC9ncmFhbHZtL2dyYWFsdm0tY2UtamF2YTExLTIyLjEuMCIsR0lUSFVCX1JFUE9TSVRPUllfT1dORVI6Im5zc2h1bnQiLEdSQURMRV9IT01FOiIvdXNyL3NoYXJlL2dyYWRsZS03LjQuMiIsSE9NRUJSRVdfUFJFRklYOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldyIsQU5EUk9JRF9OREtfTEFURVNUX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay8yNC4wLjgyMTU4ODgiLEdJVEhVQl9SRVRFTlRJT05fREFZUzoiOTAiLFBPV0VSU0hFTExfRElTVFJJQlVUSU9OX0NIQU5ORUw6IkdpdEh1Yi1BY3Rpb25zLXVidW50dTIwIixBWlVSRV9FWFRFTlNJT05fRElSOiIvb3B0L2F6L2F6Y2xpZXh0ZW5zaW9ucyIsR0lUSFVCX0hFQURfUkVGOiIiLG5wbV9jb25maWdfbG9jYWxfcHJlZml4OiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfR1JBUEhRTF9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbCIsQ09MT1I6IjAiLE5WTV9ESVI6Ii9ob21lL3J1bm5lci8ubnZtIixucG1fY29uZmlnX21ldHJpY3NfcmVnaXN0cnk6Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyIsRE9UTkVUX1NLSVBfRklSU1RfVElNRV9FWFBFUklFTkNFOiIxIixKQVZBX0hPTUVfMTdfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xNy1qZGstYW1kNjQiLEltYWdlVmVyc2lvbjoiMjAyMjA2MDUuMSIsUlVOTkVSX09TOiJMaW51eCIsR0lUSFVCX0FQSV9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20iLFNXSUZUX1BBVEg6Ii91c3Ivc2hhcmUvc3dpZnQvdXNyL2JpbiIsUlVOTkVSX1VTRVI6InJ1bm5lciIsQ0hST01FV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2Nocm9tZV9kcml2ZXIiLEpPVVJOQUxfU1RSRUFNOiI4OjIxODM0IixHSVRIVUJfV09SS0ZMT1c6Ik5vZGUuanMgUGFja2FnZSIsXzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ucG0iLG5wbV9jb25maWdfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEdJVEhVQl9SVU5fSUQ6IjI0ODM1MDYwMzUiLEdPUk9PVF8xXzE2X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNi4xNS94NjQiLG5wbV9jb25maWdfY2FjaGU6Ii9ob21lL3J1bm5lci8ubnBtIixHT1JPT1RfMV8xN19YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTcuMTEveDY0IixHSVRIVUJfUkVGX1RZUEU6ImJyYW5jaCIsQk9PVFNUUkFQX0hBU0tFTExfTk9OSU5URVJBQ1RJVkU6IjEiLEdJVEhVQl9CQVNFX1JFRjoiIixJbWFnZU9TOiJ1YnVudHUyMCIsUEVSRkxPR19MT0NBVElPTl9TRVRUSU5HOiJSVU5ORVJfUEVSRkxPRyIsR09ST09UXzFfMThfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE4LjMveDY0IixHSVRIVUJfQUNUSU9OX1JFUE9TSVRPUlk6IiIsbnBtX2NvbmZpZ19ub2RlX2d5cDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9ub2RlLWd5cC9iaW4vbm9kZS1neXAuanMiLFBBVEg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ub2RlX21vZHVsZXMvLmJpbjovbm9kZV9tb2R1bGVzLy5iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9AbnBtY2xpL3J1bi1zY3JpcHQvbGliL25vZGUtZ3lwLWJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9zYmluOi9ob21lL3J1bm5lci8ubG9jYWwvYmluOi9vcHQvcGlweF9iaW46L2hvbWUvcnVubmVyLy5jYXJnby9iaW46L2hvbWUvcnVubmVyLy5jb25maWcvY29tcG9zZXIvdmVuZG9yL2JpbjovdXNyL2xvY2FsLy5naGN1cC9iaW46L2hvbWUvcnVubmVyLy5kb3RuZXQvdG9vbHM6L3NuYXAvYmluOi91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2dhbWVzOi91c3IvbG9jYWwvZ2FtZXM6L3NuYXAvYmluIixBTlRfSE9NRToiL3Vzci9zaGFyZS9hbnQiLERPVE5FVF9NVUxUSUxFVkVMX0xPT0tVUDoiMCIsUlVOTkVSX1RSQUNLSU5HX0lEOiJnaXRodWJfOWUwYTVjN2EtOTc4Zi00ZmNlLWJlOWYtMTU5N2E0NWQzZjhkIixJTlZPQ0FUSU9OX0lEOiI4MjMxNTA0MGY2Y2I0YjE4OTFiODc1NTA3NWRiZTc0OSIsSE9NRUJSRVdfQ0VMTEFSOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9DZWxsYXIiLE5QTV9DT05GSUdfVVNFUkNPTkZJRzoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvLm5wbXJjIixSVU5ORVJfVE9PTF9DQUNIRToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLE5PREU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsbnBtX3BhY2thZ2VfbmFtZToiQG5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfQUNUSU9OOiJfX3J1bl8yIixHSVRIVUJfUlVOX05VTUJFUjoiMjQiLFJVTk5FUl9BUkNIOiJYNjQiLEFHRU5UX1RPT0xTRElSRUNUT1JZOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTEFORzoiQy5VVEYtOCIsVkNQS0dfSU5TVEFMTEFUSU9OX1JPT1Q6Ii91c3IvbG9jYWwvc2hhcmUvdmNwa2ciLENPTkRBOiIvdXNyL3NoYXJlL21pbmljb25kYSIsUlVOTkVSX05BTUU6Ikhvc3RlZCBBZ2VudCIsWERHX0NPTkZJR19IT01FOiIvaG9tZS9ydW5uZXIvLmNvbmZpZyIsR0lUSFVCX1JFRl9OQU1FOiJtYWluIixHSVRIVUJfUkVQT1NJVE9SWToibnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLG5wbV9saWZlY3ljbGVfc2NyaXB0OiJ2aXRlIGJ1aWxkIixBTkRST0lEX05ES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfQUNUSU9OX1JFRjoiIixERUJJQU5fRlJPTlRFTkQ6Im5vbmludGVyYWN0aXZlIixHSVRIVUJfQUNUSU9OUzoidHJ1ZSIsbnBtX3BhY2thZ2VfdmVyc2lvbjoiMC4xLjEzIixucG1fbGlmZWN5Y2xlX2V2ZW50OiJidWlsZCIsR0lUSFVCX1JFRl9QUk9URUNURUQ6ImZhbHNlIixHSVRIVUJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixBQ0NFUFRfRVVMQToiWSIsR0lUSFVCX0pPQjoicHVibGlzaC1ucG0iLFJVTk5FUl9QRVJGTE9HOiIvaG9tZS9ydW5uZXIvcGVyZmxvZyIsR0lUSFVCX1NIQToiZjY1OThkMTg4NjFjNjA4NGEzMDI0M2M5ZDZhOWQwMjAwZTFmOWU5NiIsR0lUSFVCX1JVTl9BVFRFTVBUOiIxIixHSVRIVUJfUkVGOiJyZWZzL2hlYWRzL21haW4iLEdJVEhVQl9BQ1RPUjoibnNzaHVudCIsQU5EUk9JRF9TREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLExFSU5fSE9NRToiL3Vzci9sb2NhbC9saWIvbGVpbiIsbnBtX2NvbmZpZ19nbG9iYWxjb25maWc6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9ldGMvbnBtcmMiLG5wbV9jb25maWdfaW5pdF9tb2R1bGU6Ii9ob21lL3J1bm5lci8ubnBtLWluaXQuanMiLEdJVEhVQl9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvYWRkX3BhdGhfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixKQVZBX0hPTUU6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUFdEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixSVU5ORVJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4iLG5wbV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL2Jpbi9ucG0tY2xpLmpzIixIT01FQlJFV19DTEVBTlVQX1BFUklPRElDX0ZVTExfREFZUzoiMzY1MCIsR0lUSFVCX0VWRU5UX05BTUU6InB1c2giLEhPTUVCUkVXX05PX0FVVE9fVVBEQVRFOiIxIixBTkRST0lEX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixHSVRIVUJfU0VSVkVSX1VSTDoiaHR0cHM6Ly9naXRodWIuY29tIixHRUNLT1dFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9nZWNrb19kcml2ZXIiLExFSU5fSkFSOiIvdXNyL2xvY2FsL2xpYi9sZWluL3NlbGYtaW5zdGFsbHMvbGVpbmluZ2VuLTIuOS44LXN0YW5kYWxvbmUuamFyIixucG1fY29uZmlnX2dsb2JhbF9wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsSE9NRUJSRVdfUkVQT1NJVE9SWToiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvSG9tZWJyZXciLG5wbV9jb21tYW5kOiJydW4tc2NyaXB0IixTR1hfQUVTTV9BRERSOiIxIixDSFJPTUVfQklOOiIvdXNyL2Jpbi9nb29nbGUtY2hyb21lIixTRUxFTklVTV9KQVJfUEFUSDoiL3Vzci9zaGFyZS9qYXZhL3NlbGVuaXVtLXNlcnZlci5qYXIiLEFORFJPSURfTkRLX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9TVEVQX1NVTU1BUlk6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zdGVwX3N1bW1hcnlfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixJTklUX0NXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsRURJVE9SOiJ2aSIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifS5SRURJUkVDVF9VUkksaT1IaS5RVUVSWSxsPXtERVBMT1lNRU5UX0JBU0VQQVRIOiIvb3B0L3J1bm5lciIsRE9UTkVUX05PTE9HTzoiMSIsVVNFUjoicnVubmVyIixucG1fY29uZmlnX2Fsd2F5c19hdXRoOiIiLG5wbV9jb25maWdfdXNlcl9hZ2VudDoibnBtLzguMTEuMCBub2RlL3YxOC4zLjAgbGludXggeDY0IHdvcmtzcGFjZXMvZmFsc2UgY2kvZ2l0aHViLWFjdGlvbnMiLENJOiJ0cnVlIixHSVRIVUJfRU5WOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc2V0X2Vudl81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLFBJUFhfSE9NRToiL29wdC9waXB4IixucG1fbm9kZV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixKQVZBX0hPTUVfOF9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTgtamRrLWFtZDY0IixOT0RFX0FVVEhfVE9LRU46IlhYWFhYLVhYWFhYLVhYWFhYLVhYWFhYIixTSExWTDoiMSIsbnBtX2NvbmZpZ19ub3Byb3h5OiIiLEhPTUU6Ii9ob21lL3J1bm5lciIsUlVOTkVSX1RFTVA6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wIixHSVRIVUJfRVZFTlRfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX2dpdGh1Yl93b3JrZmxvdy9ldmVudC5qc29uIixucG1fcGFja2FnZV9qc29uOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL3BhY2thZ2UuanNvbiIsSkFWQV9IT01FXzExX1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQSVBYX0JJTl9ESVI6Ii9vcHQvcGlweF9iaW4iLEdSQUFMVk1fMTFfUk9PVDoiL3Vzci9sb2NhbC9ncmFhbHZtL2dyYWFsdm0tY2UtamF2YTExLTIyLjEuMCIsR0lUSFVCX1JFUE9TSVRPUllfT1dORVI6Im5zc2h1bnQiLEdSQURMRV9IT01FOiIvdXNyL3NoYXJlL2dyYWRsZS03LjQuMiIsSE9NRUJSRVdfUFJFRklYOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldyIsQU5EUk9JRF9OREtfTEFURVNUX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay8yNC4wLjgyMTU4ODgiLEdJVEhVQl9SRVRFTlRJT05fREFZUzoiOTAiLFBPV0VSU0hFTExfRElTVFJJQlVUSU9OX0NIQU5ORUw6IkdpdEh1Yi1BY3Rpb25zLXVidW50dTIwIixBWlVSRV9FWFRFTlNJT05fRElSOiIvb3B0L2F6L2F6Y2xpZXh0ZW5zaW9ucyIsR0lUSFVCX0hFQURfUkVGOiIiLG5wbV9jb25maWdfbG9jYWxfcHJlZml4OiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfR1JBUEhRTF9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbCIsQ09MT1I6IjAiLE5WTV9ESVI6Ii9ob21lL3J1bm5lci8ubnZtIixucG1fY29uZmlnX21ldHJpY3NfcmVnaXN0cnk6Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyIsRE9UTkVUX1NLSVBfRklSU1RfVElNRV9FWFBFUklFTkNFOiIxIixKQVZBX0hPTUVfMTdfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xNy1qZGstYW1kNjQiLEltYWdlVmVyc2lvbjoiMjAyMjA2MDUuMSIsUlVOTkVSX09TOiJMaW51eCIsR0lUSFVCX0FQSV9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20iLFNXSUZUX1BBVEg6Ii91c3Ivc2hhcmUvc3dpZnQvdXNyL2JpbiIsUlVOTkVSX1VTRVI6InJ1bm5lciIsQ0hST01FV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2Nocm9tZV9kcml2ZXIiLEpPVVJOQUxfU1RSRUFNOiI4OjIxODM0IixHSVRIVUJfV09SS0ZMT1c6Ik5vZGUuanMgUGFja2FnZSIsXzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ucG0iLG5wbV9jb25maWdfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEdJVEhVQl9SVU5fSUQ6IjI0ODM1MDYwMzUiLEdPUk9PVF8xXzE2X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNi4xNS94NjQiLG5wbV9jb25maWdfY2FjaGU6Ii9ob21lL3J1bm5lci8ubnBtIixHT1JPT1RfMV8xN19YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTcuMTEveDY0IixHSVRIVUJfUkVGX1RZUEU6ImJyYW5jaCIsQk9PVFNUUkFQX0hBU0tFTExfTk9OSU5URVJBQ1RJVkU6IjEiLEdJVEhVQl9CQVNFX1JFRjoiIixJbWFnZU9TOiJ1YnVudHUyMCIsUEVSRkxPR19MT0NBVElPTl9TRVRUSU5HOiJSVU5ORVJfUEVSRkxPRyIsR09ST09UXzFfMThfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE4LjMveDY0IixHSVRIVUJfQUNUSU9OX1JFUE9TSVRPUlk6IiIsbnBtX2NvbmZpZ19ub2RlX2d5cDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9ub2RlLWd5cC9iaW4vbm9kZS1neXAuanMiLFBBVEg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ub2RlX21vZHVsZXMvLmJpbjovbm9kZV9tb2R1bGVzLy5iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9AbnBtY2xpL3J1bi1zY3JpcHQvbGliL25vZGUtZ3lwLWJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9zYmluOi9ob21lL3J1bm5lci8ubG9jYWwvYmluOi9vcHQvcGlweF9iaW46L2hvbWUvcnVubmVyLy5jYXJnby9iaW46L2hvbWUvcnVubmVyLy5jb25maWcvY29tcG9zZXIvdmVuZG9yL2JpbjovdXNyL2xvY2FsLy5naGN1cC9iaW46L2hvbWUvcnVubmVyLy5kb3RuZXQvdG9vbHM6L3NuYXAvYmluOi91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2dhbWVzOi91c3IvbG9jYWwvZ2FtZXM6L3NuYXAvYmluIixBTlRfSE9NRToiL3Vzci9zaGFyZS9hbnQiLERPVE5FVF9NVUxUSUxFVkVMX0xPT0tVUDoiMCIsUlVOTkVSX1RSQUNLSU5HX0lEOiJnaXRodWJfOWUwYTVjN2EtOTc4Zi00ZmNlLWJlOWYtMTU5N2E0NWQzZjhkIixJTlZPQ0FUSU9OX0lEOiI4MjMxNTA0MGY2Y2I0YjE4OTFiODc1NTA3NWRiZTc0OSIsSE9NRUJSRVdfQ0VMTEFSOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9DZWxsYXIiLE5QTV9DT05GSUdfVVNFUkNPTkZJRzoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvLm5wbXJjIixSVU5ORVJfVE9PTF9DQUNIRToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLE5PREU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsbnBtX3BhY2thZ2VfbmFtZToiQG5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfQUNUSU9OOiJfX3J1bl8yIixHSVRIVUJfUlVOX05VTUJFUjoiMjQiLFJVTk5FUl9BUkNIOiJYNjQiLEFHRU5UX1RPT0xTRElSRUNUT1JZOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTEFORzoiQy5VVEYtOCIsVkNQS0dfSU5TVEFMTEFUSU9OX1JPT1Q6Ii91c3IvbG9jYWwvc2hhcmUvdmNwa2ciLENPTkRBOiIvdXNyL3NoYXJlL21pbmljb25kYSIsUlVOTkVSX05BTUU6Ikhvc3RlZCBBZ2VudCIsWERHX0NPTkZJR19IT01FOiIvaG9tZS9ydW5uZXIvLmNvbmZpZyIsR0lUSFVCX1JFRl9OQU1FOiJtYWluIixHSVRIVUJfUkVQT1NJVE9SWToibnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLG5wbV9saWZlY3ljbGVfc2NyaXB0OiJ2aXRlIGJ1aWxkIixBTkRST0lEX05ES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfQUNUSU9OX1JFRjoiIixERUJJQU5fRlJPTlRFTkQ6Im5vbmludGVyYWN0aXZlIixHSVRIVUJfQUNUSU9OUzoidHJ1ZSIsbnBtX3BhY2thZ2VfdmVyc2lvbjoiMC4xLjEzIixucG1fbGlmZWN5Y2xlX2V2ZW50OiJidWlsZCIsR0lUSFVCX1JFRl9QUk9URUNURUQ6ImZhbHNlIixHSVRIVUJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixBQ0NFUFRfRVVMQToiWSIsR0lUSFVCX0pPQjoicHVibGlzaC1ucG0iLFJVTk5FUl9QRVJGTE9HOiIvaG9tZS9ydW5uZXIvcGVyZmxvZyIsR0lUSFVCX1NIQToiZjY1OThkMTg4NjFjNjA4NGEzMDI0M2M5ZDZhOWQwMjAwZTFmOWU5NiIsR0lUSFVCX1JVTl9BVFRFTVBUOiIxIixHSVRIVUJfUkVGOiJyZWZzL2hlYWRzL21haW4iLEdJVEhVQl9BQ1RPUjoibnNzaHVudCIsQU5EUk9JRF9TREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLExFSU5fSE9NRToiL3Vzci9sb2NhbC9saWIvbGVpbiIsbnBtX2NvbmZpZ19nbG9iYWxjb25maWc6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9ldGMvbnBtcmMiLG5wbV9jb25maWdfaW5pdF9tb2R1bGU6Ii9ob21lL3J1bm5lci8ubnBtLWluaXQuanMiLEdJVEhVQl9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvYWRkX3BhdGhfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixKQVZBX0hPTUU6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUFdEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixSVU5ORVJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4iLG5wbV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL2Jpbi9ucG0tY2xpLmpzIixIT01FQlJFV19DTEVBTlVQX1BFUklPRElDX0ZVTExfREFZUzoiMzY1MCIsR0lUSFVCX0VWRU5UX05BTUU6InB1c2giLEhPTUVCUkVXX05PX0FVVE9fVVBEQVRFOiIxIixBTkRST0lEX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixHSVRIVUJfU0VSVkVSX1VSTDoiaHR0cHM6Ly9naXRodWIuY29tIixHRUNLT1dFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9nZWNrb19kcml2ZXIiLExFSU5fSkFSOiIvdXNyL2xvY2FsL2xpYi9sZWluL3NlbGYtaW5zdGFsbHMvbGVpbmluZ2VuLTIuOS44LXN0YW5kYWxvbmUuamFyIixucG1fY29uZmlnX2dsb2JhbF9wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsSE9NRUJSRVdfUkVQT1NJVE9SWToiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvSG9tZWJyZXciLG5wbV9jb21tYW5kOiJydW4tc2NyaXB0IixTR1hfQUVTTV9BRERSOiIxIixDSFJPTUVfQklOOiIvdXNyL2Jpbi9nb29nbGUtY2hyb21lIixTRUxFTklVTV9KQVJfUEFUSDoiL3Vzci9zaGFyZS9qYXZhL3NlbGVuaXVtLXNlcnZlci5qYXIiLEFORFJPSURfTkRLX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9TVEVQX1NVTU1BUlk6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zdGVwX3N1bW1hcnlfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixJTklUX0NXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsRURJVE9SOiJ2aSIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifS5TQ09QRSxjPVgodGhpcyxIbikuQ3JlYXRlUmFuZG9tU3RyaW5nKCksbT1YKHRoaXMsSG4pLkNyZWF0ZVJhbmRvbVN0cmluZygpLGE9YXdhaXQgWCh0aGlzLEhuKS5EaWdlc3RNZXNzYWdlKG0pLE89e2NsaWVudF9pZDpyLG5vbmNlOm8scmVzcG9uc2VfdHlwZTp0LHJlZGlyZWN0X3VyaTpzLHJlc3BvbnNlX21vZGU6aSxzY29wZTpsLHN0YXRlOmMsY29kZV9jaGFsbGVuZ2U6YSxjb2RlX2NoYWxsZW5nZV9tZXRob2Q6IlMyNTYifSxEPWAke3tERVBMT1lNRU5UX0JBU0VQQVRIOiIvb3B0L3J1bm5lciIsRE9UTkVUX05PTE9HTzoiMSIsVVNFUjoicnVubmVyIixucG1fY29uZmlnX2Fsd2F5c19hdXRoOiIiLG5wbV9jb25maWdfdXNlcl9hZ2VudDoibnBtLzguMTEuMCBub2RlL3YxOC4zLjAgbGludXggeDY0IHdvcmtzcGFjZXMvZmFsc2UgY2kvZ2l0aHViLWFjdGlvbnMiLENJOiJ0cnVlIixHSVRIVUJfRU5WOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc2V0X2Vudl81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLFBJUFhfSE9NRToiL29wdC9waXB4IixucG1fbm9kZV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixKQVZBX0hPTUVfOF9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTgtamRrLWFtZDY0IixOT0RFX0FVVEhfVE9LRU46IlhYWFhYLVhYWFhYLVhYWFhYLVhYWFhYIixTSExWTDoiMSIsbnBtX2NvbmZpZ19ub3Byb3h5OiIiLEhPTUU6Ii9ob21lL3J1bm5lciIsUlVOTkVSX1RFTVA6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wIixHSVRIVUJfRVZFTlRfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX2dpdGh1Yl93b3JrZmxvdy9ldmVudC5qc29uIixucG1fcGFja2FnZV9qc29uOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL3BhY2thZ2UuanNvbiIsSkFWQV9IT01FXzExX1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQSVBYX0JJTl9ESVI6Ii9vcHQvcGlweF9iaW4iLEdSQUFMVk1fMTFfUk9PVDoiL3Vzci9sb2NhbC9ncmFhbHZtL2dyYWFsdm0tY2UtamF2YTExLTIyLjEuMCIsR0lUSFVCX1JFUE9TSVRPUllfT1dORVI6Im5zc2h1bnQiLEdSQURMRV9IT01FOiIvdXNyL3NoYXJlL2dyYWRsZS03LjQuMiIsSE9NRUJSRVdfUFJFRklYOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldyIsQU5EUk9JRF9OREtfTEFURVNUX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay8yNC4wLjgyMTU4ODgiLEdJVEhVQl9SRVRFTlRJT05fREFZUzoiOTAiLFBPV0VSU0hFTExfRElTVFJJQlVUSU9OX0NIQU5ORUw6IkdpdEh1Yi1BY3Rpb25zLXVidW50dTIwIixBWlVSRV9FWFRFTlNJT05fRElSOiIvb3B0L2F6L2F6Y2xpZXh0ZW5zaW9ucyIsR0lUSFVCX0hFQURfUkVGOiIiLG5wbV9jb25maWdfbG9jYWxfcHJlZml4OiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfR1JBUEhRTF9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbCIsQ09MT1I6IjAiLE5WTV9ESVI6Ii9ob21lL3J1bm5lci8ubnZtIixucG1fY29uZmlnX21ldHJpY3NfcmVnaXN0cnk6Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyIsRE9UTkVUX1NLSVBfRklSU1RfVElNRV9FWFBFUklFTkNFOiIxIixKQVZBX0hPTUVfMTdfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xNy1qZGstYW1kNjQiLEltYWdlVmVyc2lvbjoiMjAyMjA2MDUuMSIsUlVOTkVSX09TOiJMaW51eCIsR0lUSFVCX0FQSV9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20iLFNXSUZUX1BBVEg6Ii91c3Ivc2hhcmUvc3dpZnQvdXNyL2JpbiIsUlVOTkVSX1VTRVI6InJ1bm5lciIsQ0hST01FV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2Nocm9tZV9kcml2ZXIiLEpPVVJOQUxfU1RSRUFNOiI4OjIxODM0IixHSVRIVUJfV09SS0ZMT1c6Ik5vZGUuanMgUGFja2FnZSIsXzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ucG0iLG5wbV9jb25maWdfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEdJVEhVQl9SVU5fSUQ6IjI0ODM1MDYwMzUiLEdPUk9PVF8xXzE2X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNi4xNS94NjQiLG5wbV9jb25maWdfY2FjaGU6Ii9ob21lL3J1bm5lci8ubnBtIixHT1JPT1RfMV8xN19YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTcuMTEveDY0IixHSVRIVUJfUkVGX1RZUEU6ImJyYW5jaCIsQk9PVFNUUkFQX0hBU0tFTExfTk9OSU5URVJBQ1RJVkU6IjEiLEdJVEhVQl9CQVNFX1JFRjoiIixJbWFnZU9TOiJ1YnVudHUyMCIsUEVSRkxPR19MT0NBVElPTl9TRVRUSU5HOiJSVU5ORVJfUEVSRkxPRyIsR09ST09UXzFfMThfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE4LjMveDY0IixHSVRIVUJfQUNUSU9OX1JFUE9TSVRPUlk6IiIsbnBtX2NvbmZpZ19ub2RlX2d5cDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9ub2RlLWd5cC9iaW4vbm9kZS1neXAuanMiLFBBVEg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ub2RlX21vZHVsZXMvLmJpbjovbm9kZV9tb2R1bGVzLy5iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9AbnBtY2xpL3J1bi1zY3JpcHQvbGliL25vZGUtZ3lwLWJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9zYmluOi9ob21lL3J1bm5lci8ubG9jYWwvYmluOi9vcHQvcGlweF9iaW46L2hvbWUvcnVubmVyLy5jYXJnby9iaW46L2hvbWUvcnVubmVyLy5jb25maWcvY29tcG9zZXIvdmVuZG9yL2JpbjovdXNyL2xvY2FsLy5naGN1cC9iaW46L2hvbWUvcnVubmVyLy5kb3RuZXQvdG9vbHM6L3NuYXAvYmluOi91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2dhbWVzOi91c3IvbG9jYWwvZ2FtZXM6L3NuYXAvYmluIixBTlRfSE9NRToiL3Vzci9zaGFyZS9hbnQiLERPVE5FVF9NVUxUSUxFVkVMX0xPT0tVUDoiMCIsUlVOTkVSX1RSQUNLSU5HX0lEOiJnaXRodWJfOWUwYTVjN2EtOTc4Zi00ZmNlLWJlOWYtMTU5N2E0NWQzZjhkIixJTlZPQ0FUSU9OX0lEOiI4MjMxNTA0MGY2Y2I0YjE4OTFiODc1NTA3NWRiZTc0OSIsSE9NRUJSRVdfQ0VMTEFSOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9DZWxsYXIiLE5QTV9DT05GSUdfVVNFUkNPTkZJRzoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvLm5wbXJjIixSVU5ORVJfVE9PTF9DQUNIRToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLE5PREU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsbnBtX3BhY2thZ2VfbmFtZToiQG5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfQUNUSU9OOiJfX3J1bl8yIixHSVRIVUJfUlVOX05VTUJFUjoiMjQiLFJVTk5FUl9BUkNIOiJYNjQiLEFHRU5UX1RPT0xTRElSRUNUT1JZOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTEFORzoiQy5VVEYtOCIsVkNQS0dfSU5TVEFMTEFUSU9OX1JPT1Q6Ii91c3IvbG9jYWwvc2hhcmUvdmNwa2ciLENPTkRBOiIvdXNyL3NoYXJlL21pbmljb25kYSIsUlVOTkVSX05BTUU6Ikhvc3RlZCBBZ2VudCIsWERHX0NPTkZJR19IT01FOiIvaG9tZS9ydW5uZXIvLmNvbmZpZyIsR0lUSFVCX1JFRl9OQU1FOiJtYWluIixHSVRIVUJfUkVQT1NJVE9SWToibnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLG5wbV9saWZlY3ljbGVfc2NyaXB0OiJ2aXRlIGJ1aWxkIixBTkRST0lEX05ES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfQUNUSU9OX1JFRjoiIixERUJJQU5fRlJPTlRFTkQ6Im5vbmludGVyYWN0aXZlIixHSVRIVUJfQUNUSU9OUzoidHJ1ZSIsbnBtX3BhY2thZ2VfdmVyc2lvbjoiMC4xLjEzIixucG1fbGlmZWN5Y2xlX2V2ZW50OiJidWlsZCIsR0lUSFVCX1JFRl9QUk9URUNURUQ6ImZhbHNlIixHSVRIVUJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixBQ0NFUFRfRVVMQToiWSIsR0lUSFVCX0pPQjoicHVibGlzaC1ucG0iLFJVTk5FUl9QRVJGTE9HOiIvaG9tZS9ydW5uZXIvcGVyZmxvZyIsR0lUSFVCX1NIQToiZjY1OThkMTg4NjFjNjA4NGEzMDI0M2M5ZDZhOWQwMjAwZTFmOWU5NiIsR0lUSFVCX1JVTl9BVFRFTVBUOiIxIixHSVRIVUJfUkVGOiJyZWZzL2hlYWRzL21haW4iLEdJVEhVQl9BQ1RPUjoibnNzaHVudCIsQU5EUk9JRF9TREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLExFSU5fSE9NRToiL3Vzci9sb2NhbC9saWIvbGVpbiIsbnBtX2NvbmZpZ19nbG9iYWxjb25maWc6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9ldGMvbnBtcmMiLG5wbV9jb25maWdfaW5pdF9tb2R1bGU6Ii9ob21lL3J1bm5lci8ubnBtLWluaXQuanMiLEdJVEhVQl9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvYWRkX3BhdGhfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixKQVZBX0hPTUU6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUFdEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixSVU5ORVJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4iLG5wbV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL2Jpbi9ucG0tY2xpLmpzIixIT01FQlJFV19DTEVBTlVQX1BFUklPRElDX0ZVTExfREFZUzoiMzY1MCIsR0lUSFVCX0VWRU5UX05BTUU6InB1c2giLEhPTUVCUkVXX05PX0FVVE9fVVBEQVRFOiIxIixBTkRST0lEX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixHSVRIVUJfU0VSVkVSX1VSTDoiaHR0cHM6Ly9naXRodWIuY29tIixHRUNLT1dFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9nZWNrb19kcml2ZXIiLExFSU5fSkFSOiIvdXNyL2xvY2FsL2xpYi9sZWluL3NlbGYtaW5zdGFsbHMvbGVpbmluZ2VuLTIuOS44LXN0YW5kYWxvbmUuamFyIixucG1fY29uZmlnX2dsb2JhbF9wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsSE9NRUJSRVdfUkVQT1NJVE9SWToiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvSG9tZWJyZXciLG5wbV9jb21tYW5kOiJydW4tc2NyaXB0IixTR1hfQUVTTV9BRERSOiIxIixDSFJPTUVfQklOOiIvdXNyL2Jpbi9nb29nbGUtY2hyb21lIixTRUxFTklVTV9KQVJfUEFUSDoiL3Vzci9zaGFyZS9qYXZhL3NlbGVuaXVtLXNlcnZlci5qYXIiLEFORFJPSURfTkRLX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9TVEVQX1NVTU1BUlk6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zdGVwX3N1bW1hcnlfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixJTklUX0NXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsRURJVE9SOiJ2aSIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifS5BVVRIX0VORFBPSU5UfToke3tERVBMT1lNRU5UX0JBU0VQQVRIOiIvb3B0L3J1bm5lciIsRE9UTkVUX05PTE9HTzoiMSIsVVNFUjoicnVubmVyIixucG1fY29uZmlnX2Fsd2F5c19hdXRoOiIiLG5wbV9jb25maWdfdXNlcl9hZ2VudDoibnBtLzguMTEuMCBub2RlL3YxOC4zLjAgbGludXggeDY0IHdvcmtzcGFjZXMvZmFsc2UgY2kvZ2l0aHViLWFjdGlvbnMiLENJOiJ0cnVlIixHSVRIVUJfRU5WOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc2V0X2Vudl81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLFBJUFhfSE9NRToiL29wdC9waXB4IixucG1fbm9kZV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixKQVZBX0hPTUVfOF9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTgtamRrLWFtZDY0IixOT0RFX0FVVEhfVE9LRU46IlhYWFhYLVhYWFhYLVhYWFhYLVhYWFhYIixTSExWTDoiMSIsbnBtX2NvbmZpZ19ub3Byb3h5OiIiLEhPTUU6Ii9ob21lL3J1bm5lciIsUlVOTkVSX1RFTVA6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wIixHSVRIVUJfRVZFTlRfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX2dpdGh1Yl93b3JrZmxvdy9ldmVudC5qc29uIixucG1fcGFja2FnZV9qc29uOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL3BhY2thZ2UuanNvbiIsSkFWQV9IT01FXzExX1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQSVBYX0JJTl9ESVI6Ii9vcHQvcGlweF9iaW4iLEdSQUFMVk1fMTFfUk9PVDoiL3Vzci9sb2NhbC9ncmFhbHZtL2dyYWFsdm0tY2UtamF2YTExLTIyLjEuMCIsR0lUSFVCX1JFUE9TSVRPUllfT1dORVI6Im5zc2h1bnQiLEdSQURMRV9IT01FOiIvdXNyL3NoYXJlL2dyYWRsZS03LjQuMiIsSE9NRUJSRVdfUFJFRklYOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldyIsQU5EUk9JRF9OREtfTEFURVNUX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay8yNC4wLjgyMTU4ODgiLEdJVEhVQl9SRVRFTlRJT05fREFZUzoiOTAiLFBPV0VSU0hFTExfRElTVFJJQlVUSU9OX0NIQU5ORUw6IkdpdEh1Yi1BY3Rpb25zLXVidW50dTIwIixBWlVSRV9FWFRFTlNJT05fRElSOiIvb3B0L2F6L2F6Y2xpZXh0ZW5zaW9ucyIsR0lUSFVCX0hFQURfUkVGOiIiLG5wbV9jb25maWdfbG9jYWxfcHJlZml4OiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfR1JBUEhRTF9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbCIsQ09MT1I6IjAiLE5WTV9ESVI6Ii9ob21lL3J1bm5lci8ubnZtIixucG1fY29uZmlnX21ldHJpY3NfcmVnaXN0cnk6Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyIsRE9UTkVUX1NLSVBfRklSU1RfVElNRV9FWFBFUklFTkNFOiIxIixKQVZBX0hPTUVfMTdfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xNy1qZGstYW1kNjQiLEltYWdlVmVyc2lvbjoiMjAyMjA2MDUuMSIsUlVOTkVSX09TOiJMaW51eCIsR0lUSFVCX0FQSV9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20iLFNXSUZUX1BBVEg6Ii91c3Ivc2hhcmUvc3dpZnQvdXNyL2JpbiIsUlVOTkVSX1VTRVI6InJ1bm5lciIsQ0hST01FV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2Nocm9tZV9kcml2ZXIiLEpPVVJOQUxfU1RSRUFNOiI4OjIxODM0IixHSVRIVUJfV09SS0ZMT1c6Ik5vZGUuanMgUGFja2FnZSIsXzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ucG0iLG5wbV9jb25maWdfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEdJVEhVQl9SVU5fSUQ6IjI0ODM1MDYwMzUiLEdPUk9PVF8xXzE2X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNi4xNS94NjQiLG5wbV9jb25maWdfY2FjaGU6Ii9ob21lL3J1bm5lci8ubnBtIixHT1JPT1RfMV8xN19YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTcuMTEveDY0IixHSVRIVUJfUkVGX1RZUEU6ImJyYW5jaCIsQk9PVFNUUkFQX0hBU0tFTExfTk9OSU5URVJBQ1RJVkU6IjEiLEdJVEhVQl9CQVNFX1JFRjoiIixJbWFnZU9TOiJ1YnVudHUyMCIsUEVSRkxPR19MT0NBVElPTl9TRVRUSU5HOiJSVU5ORVJfUEVSRkxPRyIsR09ST09UXzFfMThfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE4LjMveDY0IixHSVRIVUJfQUNUSU9OX1JFUE9TSVRPUlk6IiIsbnBtX2NvbmZpZ19ub2RlX2d5cDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9ub2RlLWd5cC9iaW4vbm9kZS1neXAuanMiLFBBVEg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ub2RlX21vZHVsZXMvLmJpbjovbm9kZV9tb2R1bGVzLy5iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9AbnBtY2xpL3J1bi1zY3JpcHQvbGliL25vZGUtZ3lwLWJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9zYmluOi9ob21lL3J1bm5lci8ubG9jYWwvYmluOi9vcHQvcGlweF9iaW46L2hvbWUvcnVubmVyLy5jYXJnby9iaW46L2hvbWUvcnVubmVyLy5jb25maWcvY29tcG9zZXIvdmVuZG9yL2JpbjovdXNyL2xvY2FsLy5naGN1cC9iaW46L2hvbWUvcnVubmVyLy5kb3RuZXQvdG9vbHM6L3NuYXAvYmluOi91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2dhbWVzOi91c3IvbG9jYWwvZ2FtZXM6L3NuYXAvYmluIixBTlRfSE9NRToiL3Vzci9zaGFyZS9hbnQiLERPVE5FVF9NVUxUSUxFVkVMX0xPT0tVUDoiMCIsUlVOTkVSX1RSQUNLSU5HX0lEOiJnaXRodWJfOWUwYTVjN2EtOTc4Zi00ZmNlLWJlOWYtMTU5N2E0NWQzZjhkIixJTlZPQ0FUSU9OX0lEOiI4MjMxNTA0MGY2Y2I0YjE4OTFiODc1NTA3NWRiZTc0OSIsSE9NRUJSRVdfQ0VMTEFSOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9DZWxsYXIiLE5QTV9DT05GSUdfVVNFUkNPTkZJRzoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvLm5wbXJjIixSVU5ORVJfVE9PTF9DQUNIRToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLE5PREU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsbnBtX3BhY2thZ2VfbmFtZToiQG5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfQUNUSU9OOiJfX3J1bl8yIixHSVRIVUJfUlVOX05VTUJFUjoiMjQiLFJVTk5FUl9BUkNIOiJYNjQiLEFHRU5UX1RPT0xTRElSRUNUT1JZOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTEFORzoiQy5VVEYtOCIsVkNQS0dfSU5TVEFMTEFUSU9OX1JPT1Q6Ii91c3IvbG9jYWwvc2hhcmUvdmNwa2ciLENPTkRBOiIvdXNyL3NoYXJlL21pbmljb25kYSIsUlVOTkVSX05BTUU6Ikhvc3RlZCBBZ2VudCIsWERHX0NPTkZJR19IT01FOiIvaG9tZS9ydW5uZXIvLmNvbmZpZyIsR0lUSFVCX1JFRl9OQU1FOiJtYWluIixHSVRIVUJfUkVQT1NJVE9SWToibnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLG5wbV9saWZlY3ljbGVfc2NyaXB0OiJ2aXRlIGJ1aWxkIixBTkRST0lEX05ES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfQUNUSU9OX1JFRjoiIixERUJJQU5fRlJPTlRFTkQ6Im5vbmludGVyYWN0aXZlIixHSVRIVUJfQUNUSU9OUzoidHJ1ZSIsbnBtX3BhY2thZ2VfdmVyc2lvbjoiMC4xLjEzIixucG1fbGlmZWN5Y2xlX2V2ZW50OiJidWlsZCIsR0lUSFVCX1JFRl9QUk9URUNURUQ6ImZhbHNlIixHSVRIVUJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixBQ0NFUFRfRVVMQToiWSIsR0lUSFVCX0pPQjoicHVibGlzaC1ucG0iLFJVTk5FUl9QRVJGTE9HOiIvaG9tZS9ydW5uZXIvcGVyZmxvZyIsR0lUSFVCX1NIQToiZjY1OThkMTg4NjFjNjA4NGEzMDI0M2M5ZDZhOWQwMjAwZTFmOWU5NiIsR0lUSFVCX1JVTl9BVFRFTVBUOiIxIixHSVRIVUJfUkVGOiJyZWZzL2hlYWRzL21haW4iLEdJVEhVQl9BQ1RPUjoibnNzaHVudCIsQU5EUk9JRF9TREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLExFSU5fSE9NRToiL3Vzci9sb2NhbC9saWIvbGVpbiIsbnBtX2NvbmZpZ19nbG9iYWxjb25maWc6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9ldGMvbnBtcmMiLG5wbV9jb25maWdfaW5pdF9tb2R1bGU6Ii9ob21lL3J1bm5lci8ubnBtLWluaXQuanMiLEdJVEhVQl9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvYWRkX3BhdGhfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixKQVZBX0hPTUU6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUFdEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixSVU5ORVJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4iLG5wbV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL2Jpbi9ucG0tY2xpLmpzIixIT01FQlJFV19DTEVBTlVQX1BFUklPRElDX0ZVTExfREFZUzoiMzY1MCIsR0lUSFVCX0VWRU5UX05BTUU6InB1c2giLEhPTUVCUkVXX05PX0FVVE9fVVBEQVRFOiIxIixBTkRST0lEX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixHSVRIVUJfU0VSVkVSX1VSTDoiaHR0cHM6Ly9naXRodWIuY29tIixHRUNLT1dFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9nZWNrb19kcml2ZXIiLExFSU5fSkFSOiIvdXNyL2xvY2FsL2xpYi9sZWluL3NlbGYtaW5zdGFsbHMvbGVpbmluZ2VuLTIuOS44LXN0YW5kYWxvbmUuamFyIixucG1fY29uZmlnX2dsb2JhbF9wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsSE9NRUJSRVdfUkVQT1NJVE9SWToiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvSG9tZWJyZXciLG5wbV9jb21tYW5kOiJydW4tc2NyaXB0IixTR1hfQUVTTV9BRERSOiIxIixDSFJPTUVfQklOOiIvdXNyL2Jpbi9nb29nbGUtY2hyb21lIixTRUxFTklVTV9KQVJfUEFUSDoiL3Vzci9zaGFyZS9qYXZhL3NlbGVuaXVtLXNlcnZlci5qYXIiLEFORFJPSURfTkRLX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9TVEVQX1NVTU1BUlk6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zdGVwX3N1bW1hcnlfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixJTklUX0NXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsRURJVE9SOiJ2aSIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifS5BVVRIX1BPUlR9JHt7REVQTE9ZTUVOVF9CQVNFUEFUSDoiL29wdC9ydW5uZXIiLERPVE5FVF9OT0xPR086IjEiLFVTRVI6InJ1bm5lciIsbnBtX2NvbmZpZ19hbHdheXNfYXV0aDoiIixucG1fY29uZmlnX3VzZXJfYWdlbnQ6Im5wbS84LjExLjAgbm9kZS92MTguMy4wIGxpbnV4IHg2NCB3b3Jrc3BhY2VzL2ZhbHNlIGNpL2dpdGh1Yi1hY3Rpb25zIixDSToidHJ1ZSIsR0lUSFVCX0VOVjoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3NldF9lbnZfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixQSVBYX0hPTUU6Ii9vcHQvcGlweCIsbnBtX25vZGVfZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsSkFWQV9IT01FXzhfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi04LWpkay1hbWQ2NCIsTk9ERV9BVVRIX1RPS0VOOiJYWFhYWC1YWFhYWC1YWFhYWC1YWFhYWCIsU0hMVkw6IjEiLG5wbV9jb25maWdfbm9wcm94eToiIixIT01FOiIvaG9tZS9ydW5uZXIiLFJVTk5FUl9URU1QOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcCIsR0lUSFVCX0VWRU5UX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19naXRodWJfd29ya2Zsb3cvZXZlbnQuanNvbiIsbnBtX3BhY2thZ2VfanNvbjoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9wYWNrYWdlLmpzb24iLEpBVkFfSE9NRV8xMV9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUElQWF9CSU5fRElSOiIvb3B0L3BpcHhfYmluIixHUkFBTFZNXzExX1JPT1Q6Ii91c3IvbG9jYWwvZ3JhYWx2bS9ncmFhbHZtLWNlLWphdmExMS0yMi4xLjAiLEdJVEhVQl9SRVBPU0lUT1JZX09XTkVSOiJuc3NodW50IixHUkFETEVfSE9NRToiL3Vzci9zaGFyZS9ncmFkbGUtNy40LjIiLEhPTUVCUkVXX1BSRUZJWDoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXciLEFORFJPSURfTkRLX0xBVEVTVF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGsvMjQuMC44MjE1ODg4IixHSVRIVUJfUkVURU5USU9OX0RBWVM6IjkwIixQT1dFUlNIRUxMX0RJU1RSSUJVVElPTl9DSEFOTkVMOiJHaXRIdWItQWN0aW9ucy11YnVudHUyMCIsQVpVUkVfRVhURU5TSU9OX0RJUjoiL29wdC9hei9hemNsaWV4dGVuc2lvbnMiLEdJVEhVQl9IRUFEX1JFRjoiIixucG1fY29uZmlnX2xvY2FsX3ByZWZpeDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0dSQVBIUUxfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWwiLENPTE9SOiIwIixOVk1fRElSOiIvaG9tZS9ydW5uZXIvLm52bSIsbnBtX2NvbmZpZ19tZXRyaWNzX3JlZ2lzdHJ5OiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8iLERPVE5FVF9TS0lQX0ZJUlNUX1RJTUVfRVhQRVJJRU5DRToiMSIsSkFWQV9IT01FXzE3X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTctamRrLWFtZDY0IixJbWFnZVZlcnNpb246IjIwMjIwNjA1LjEiLFJVTk5FUl9PUzoiTGludXgiLEdJVEhVQl9BUElfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tIixTV0lGVF9QQVRIOiIvdXNyL3NoYXJlL3N3aWZ0L3Vzci9iaW4iLFJVTk5FUl9VU0VSOiJydW5uZXIiLENIUk9NRVdFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9jaHJvbWVfZHJpdmVyIixKT1VSTkFMX1NUUkVBTToiODoyMTgzNCIsR0lUSFVCX1dPUktGTE9XOiJOb2RlLmpzIFBhY2thZ2UiLF86Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbnBtIixucG1fY29uZmlnX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixHSVRIVUJfUlVOX0lEOiIyNDgzNTA2MDM1IixHT1JPT1RfMV8xNl9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTYuMTUveDY0IixucG1fY29uZmlnX2NhY2hlOiIvaG9tZS9ydW5uZXIvLm5wbSIsR09ST09UXzFfMTdfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE3LjExL3g2NCIsR0lUSFVCX1JFRl9UWVBFOiJicmFuY2giLEJPT1RTVFJBUF9IQVNLRUxMX05PTklOVEVSQUNUSVZFOiIxIixHSVRIVUJfQkFTRV9SRUY6IiIsSW1hZ2VPUzoidWJ1bnR1MjAiLFBFUkZMT0dfTE9DQVRJT05fU0VUVElORzoiUlVOTkVSX1BFUkZMT0ciLEdPUk9PVF8xXzE4X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xOC4zL3g2NCIsR0lUSFVCX0FDVElPTl9SRVBPU0lUT1JZOiIiLG5wbV9jb25maWdfbm9kZV9neXA6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvbm9kZS1neXAvYmluL25vZGUtZ3lwLmpzIixQQVRIOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvbm9kZV9tb2R1bGVzLy5iaW46L25vZGVfbW9kdWxlcy8uYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvQG5wbWNsaS9ydW4tc2NyaXB0L2xpYi9ub2RlLWd5cC1iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvc2JpbjovaG9tZS9ydW5uZXIvLmxvY2FsL2Jpbjovb3B0L3BpcHhfYmluOi9ob21lL3J1bm5lci8uY2FyZ28vYmluOi9ob21lL3J1bm5lci8uY29uZmlnL2NvbXBvc2VyL3ZlbmRvci9iaW46L3Vzci9sb2NhbC8uZ2hjdXAvYmluOi9ob21lL3J1bm5lci8uZG90bmV0L3Rvb2xzOi9zbmFwL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIsQU5UX0hPTUU6Ii91c3Ivc2hhcmUvYW50IixET1RORVRfTVVMVElMRVZFTF9MT09LVVA6IjAiLFJVTk5FUl9UUkFDS0lOR19JRDoiZ2l0aHViXzllMGE1YzdhLTk3OGYtNGZjZS1iZTlmLTE1OTdhNDVkM2Y4ZCIsSU5WT0NBVElPTl9JRDoiODIzMTUwNDBmNmNiNGIxODkxYjg3NTUwNzVkYmU3NDkiLEhPTUVCUkVXX0NFTExBUjoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvQ2VsbGFyIixOUE1fQ09ORklHX1VTRVJDT05GSUc6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wLy5ucG1yYyIsUlVOTkVSX1RPT0xfQ0FDSEU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixOT0RFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLG5wbV9wYWNrYWdlX25hbWU6IkBuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0FDVElPTjoiX19ydW5fMiIsR0lUSFVCX1JVTl9OVU1CRVI6IjI0IixSVU5ORVJfQVJDSDoiWDY0IixBR0VOVF9UT09MU0RJUkVDVE9SWToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLExBTkc6IkMuVVRGLTgiLFZDUEtHX0lOU1RBTExBVElPTl9ST09UOiIvdXNyL2xvY2FsL3NoYXJlL3ZjcGtnIixDT05EQToiL3Vzci9zaGFyZS9taW5pY29uZGEiLFJVTk5FUl9OQU1FOiJIb3N0ZWQgQWdlbnQiLFhER19DT05GSUdfSE9NRToiL2hvbWUvcnVubmVyLy5jb25maWciLEdJVEhVQl9SRUZfTkFNRToibWFpbiIsR0lUSFVCX1JFUE9TSVRPUlk6Im5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixucG1fbGlmZWN5Y2xlX3NjcmlwdDoidml0ZSBidWlsZCIsQU5EUk9JRF9OREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX0FDVElPTl9SRUY6IiIsREVCSUFOX0ZST05URU5EOiJub25pbnRlcmFjdGl2ZSIsR0lUSFVCX0FDVElPTlM6InRydWUiLG5wbV9wYWNrYWdlX3ZlcnNpb246IjAuMS4xMyIsbnBtX2xpZmVjeWNsZV9ldmVudDoiYnVpbGQiLEdJVEhVQl9SRUZfUFJPVEVDVEVEOiJmYWxzZSIsR0lUSFVCX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsQUNDRVBUX0VVTEE6IlkiLEdJVEhVQl9KT0I6InB1Ymxpc2gtbnBtIixSVU5ORVJfUEVSRkxPRzoiL2hvbWUvcnVubmVyL3BlcmZsb2ciLEdJVEhVQl9TSEE6ImY2NTk4ZDE4ODYxYzYwODRhMzAyNDNjOWQ2YTlkMDIwMGUxZjllOTYiLEdJVEhVQl9SVU5fQVRURU1QVDoiMSIsR0lUSFVCX1JFRjoicmVmcy9oZWFkcy9tYWluIixHSVRIVUJfQUNUT1I6Im5zc2h1bnQiLEFORFJPSURfU0RLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixMRUlOX0hPTUU6Ii91c3IvbG9jYWwvbGliL2xlaW4iLG5wbV9jb25maWdfZ2xvYmFsY29uZmlnOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvZXRjL25wbXJjIixucG1fY29uZmlnX2luaXRfbW9kdWxlOiIvaG9tZS9ydW5uZXIvLm5wbS1pbml0LmpzIixHSVRIVUJfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL2FkZF9wYXRoXzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSkFWQV9IT01FOiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsUlVOTkVSX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luIixucG1fZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9iaW4vbnBtLWNsaS5qcyIsSE9NRUJSRVdfQ0xFQU5VUF9QRVJJT0RJQ19GVUxMX0RBWVM6IjM2NTAiLEdJVEhVQl9FVkVOVF9OQU1FOiJwdXNoIixIT01FQlJFV19OT19BVVRPX1VQREFURToiMSIsQU5EUk9JRF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsR0lUSFVCX1NFUlZFUl9VUkw6Imh0dHBzOi8vZ2l0aHViLmNvbSIsR0VDS09XRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvZ2Vja29fZHJpdmVyIixMRUlOX0pBUjoiL3Vzci9sb2NhbC9saWIvbGVpbi9zZWxmLWluc3RhbGxzL2xlaW5pbmdlbi0yLjkuOC1zdGFuZGFsb25lLmphciIsbnBtX2NvbmZpZ19nbG9iYWxfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEhPTUVCUkVXX1JFUE9TSVRPUlk6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0hvbWVicmV3IixucG1fY29tbWFuZDoicnVuLXNjcmlwdCIsU0dYX0FFU01fQUREUjoiMSIsQ0hST01FX0JJTjoiL3Vzci9iaW4vZ29vZ2xlLWNocm9tZSIsU0VMRU5JVU1fSkFSX1BBVEg6Ii91c3Ivc2hhcmUvamF2YS9zZWxlbml1bS1zZXJ2ZXIuamFyIixBTkRST0lEX05ES19IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfU1RFUF9TVU1NQVJZOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc3RlcF9zdW1tYXJ5XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSU5JVF9DV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEVESVRPUjoidmkiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn0uQVVUSF9BUElST09UfT8ke1godGhpcyxQcikuQ3JlYXRlUXVlcnlQYXJhbXMoTyl9YDtyZXR1cm4gY29uc29sZS5sb2coRCksTy5jb2RlX3ZlcmlmaWVyPW0sY29uc29sZS5sb2coYEF1dGhvcml6ZTphdXRob3JpemVPcHRpb25zOiBbJHtKU09OLnN0cmluZ2lmeShPKX1dYCkse3VybDpELGF1dGhvcml6ZU9wdGlvbnM6T319KSx1ZSh0aGlzLENyLGFzeW5jIHI9Pntjb25zdCBvPXIucXVlcnlWYXJzLHQ9ci5hdXRob3JpemVPcHRpb25zO2lmKGNvbnNvbGUubG9nKCJIYW5kbGVSZWRpcmVjdCIpLGNvbnNvbGUubG9nKGBIYW5kbGVSZWRpcmVjdDpRdWVyeSBWYXJzOiBbJHtKU09OLnN0cmluZ2lmeShvKX1dYCksb1t3bi5PQXV0aDJQYXJhbWV0ZXJUeXBlLkNPREVdKXtjb25zdCBzPW87Y29uc29sZS5sb2coYGF1dGhvcml6ZU9wdGlvbnMgZnJvbSB0cmFuc2FjdGlvbiBzdGF0ZTogWyR7SlNPTi5zdHJpbmdpZnkodCl9XWApO2NvbnN0IGk9cy5zdGF0ZTtyZXR1cm4gdC5zdGF0ZS5sb2NhbGVDb21wYXJlKGkpPT09MD8oY29uc29sZS5sb2coInJlZGlyZWN0ZWQgc3RhdGUgKGZyb20gcXVlcnlWYXJzKSBtYXRjaGVkIHByZXZpb3VzbHkgc2F2ZWQgdHJhbnNhY3Rpb24gYXV0aG9yaXplT3B0aW9ucyBzdGF0ZSIpLGF3YWl0IFgodGhpcyx5cikuY2FsbCh0aGlzLHQscykpOihjb25zb2xlLmxvZygicmVkaXJlY3RlZCBzdGF0ZSAoZnJvbSBxdWVyeVZhcnMpIGRpZCBOT1QgbWF0Y2ggcHJldmlvdXNseSBzYXZlZCB0cmFuc2FjdGlvbiBhdXRob3JpemVPcHRpb25zIHN0YXRlIiksWCh0aGlzLHZuKS5jYWxsKHRoaXMse21lc3NhZ2U6IlN0YXRlIHVuLW1hdGNoZWQifSksITEpfWVsc2UgaWYob1t3bi5PQXV0aDJQYXJhbWV0ZXJUeXBlLkVSUk9SXSl7Y29uc3Qgcz1vO3JldHVybiBzLmVycm9yLHMuZXJyb3JfZGVzY3JpcHRpb24sWCh0aGlzLHZuKS5jYWxsKHRoaXMse21lc3NhZ2U6IlN0YXRlIHVuLW1hdGNoZWQifSksITF9ZWxzZSByZXR1cm4gWCh0aGlzLHZuKS5jYWxsKHRoaXMse21lc3NhZ2U6IlN0YXRlIHVuLW1hdGNoZWQifSksITF9KSx1ZSh0aGlzLF9yLGFzeW5jIHI9Pntjb25zb2xlLmxvZygiI0dldFRva2VuRnJvbUJyb2tlciIpLFgodGhpcyxCZSkucmVtb3ZlKFgodGhpcyxqZSkpO2NvbnN0IG89YCR7e0RFUExPWU1FTlRfQkFTRVBBVEg6Ii9vcHQvcnVubmVyIixET1RORVRfTk9MT0dPOiIxIixVU0VSOiJydW5uZXIiLG5wbV9jb25maWdfYWx3YXlzX2F1dGg6IiIsbnBtX2NvbmZpZ191c2VyX2FnZW50OiJucG0vOC4xMS4wIG5vZGUvdjE4LjMuMCBsaW51eCB4NjQgd29ya3NwYWNlcy9mYWxzZSBjaS9naXRodWItYWN0aW9ucyIsQ0k6InRydWUiLEdJVEhVQl9FTlY6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zZXRfZW52XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsUElQWF9IT01FOiIvb3B0L3BpcHgiLG5wbV9ub2RlX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLEpBVkFfSE9NRV84X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tOC1qZGstYW1kNjQiLE5PREVfQVVUSF9UT0tFTjoiWFhYWFgtWFhYWFgtWFhYWFgtWFhYWFgiLFNITFZMOiIxIixucG1fY29uZmlnX25vcHJveHk6IiIsSE9NRToiL2hvbWUvcnVubmVyIixSVU5ORVJfVEVNUDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAiLEdJVEhVQl9FVkVOVF9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fZ2l0aHViX3dvcmtmbG93L2V2ZW50Lmpzb24iLG5wbV9wYWNrYWdlX2pzb246Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vcGFja2FnZS5qc29uIixKQVZBX0hPTUVfMTFfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBJUFhfQklOX0RJUjoiL29wdC9waXB4X2JpbiIsR1JBQUxWTV8xMV9ST09UOiIvdXNyL2xvY2FsL2dyYWFsdm0vZ3JhYWx2bS1jZS1qYXZhMTEtMjIuMS4wIixHSVRIVUJfUkVQT1NJVE9SWV9PV05FUjoibnNzaHVudCIsR1JBRExFX0hPTUU6Ii91c3Ivc2hhcmUvZ3JhZGxlLTcuNC4yIixIT01FQlJFV19QUkVGSVg6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3IixBTkRST0lEX05ES19MQVRFU1RfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLzI0LjAuODIxNTg4OCIsR0lUSFVCX1JFVEVOVElPTl9EQVlTOiI5MCIsUE9XRVJTSEVMTF9ESVNUUklCVVRJT05fQ0hBTk5FTDoiR2l0SHViLUFjdGlvbnMtdWJ1bnR1MjAiLEFaVVJFX0VYVEVOU0lPTl9ESVI6Ii9vcHQvYXovYXpjbGlleHRlbnNpb25zIixHSVRIVUJfSEVBRF9SRUY6IiIsbnBtX2NvbmZpZ19sb2NhbF9wcmVmaXg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9HUkFQSFFMX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsIixDT0xPUjoiMCIsTlZNX0RJUjoiL2hvbWUvcnVubmVyLy5udm0iLG5wbV9jb25maWdfbWV0cmljc19yZWdpc3RyeToiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvIixET1RORVRfU0tJUF9GSVJTVF9USU1FX0VYUEVSSUVOQ0U6IjEiLEpBVkFfSE9NRV8xN19YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTE3LWpkay1hbWQ2NCIsSW1hZ2VWZXJzaW9uOiIyMDIyMDYwNS4xIixSVU5ORVJfT1M6IkxpbnV4IixHSVRIVUJfQVBJX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSIsU1dJRlRfUEFUSDoiL3Vzci9zaGFyZS9zd2lmdC91c3IvYmluIixSVU5ORVJfVVNFUjoicnVubmVyIixDSFJPTUVXRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvY2hyb21lX2RyaXZlciIsSk9VUk5BTF9TVFJFQU06Ijg6MjE4MzQiLEdJVEhVQl9XT1JLRkxPVzoiTm9kZS5qcyBQYWNrYWdlIixfOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25wbSIsbnBtX2NvbmZpZ19wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsR0lUSFVCX1JVTl9JRDoiMjQ4MzUwNjAzNSIsR09ST09UXzFfMTZfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE2LjE1L3g2NCIsbnBtX2NvbmZpZ19jYWNoZToiL2hvbWUvcnVubmVyLy5ucG0iLEdPUk9PVF8xXzE3X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNy4xMS94NjQiLEdJVEhVQl9SRUZfVFlQRToiYnJhbmNoIixCT09UU1RSQVBfSEFTS0VMTF9OT05JTlRFUkFDVElWRToiMSIsR0lUSFVCX0JBU0VfUkVGOiIiLEltYWdlT1M6InVidW50dTIwIixQRVJGTE9HX0xPQ0FUSU9OX1NFVFRJTkc6IlJVTk5FUl9QRVJGTE9HIixHT1JPT1RfMV8xOF9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTguMy94NjQiLEdJVEhVQl9BQ1RJT05fUkVQT1NJVE9SWToiIixucG1fY29uZmlnX25vZGVfZ3lwOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL25vZGUtZ3lwL2Jpbi9ub2RlLWd5cC5qcyIsUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL25vZGVfbW9kdWxlcy8uYmluOi9ub2RlX21vZHVsZXMvLmJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL0BucG1jbGkvcnVuLXNjcmlwdC9saWIvbm9kZS1neXAtYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L3NiaW46L2hvbWUvcnVubmVyLy5sb2NhbC9iaW46L29wdC9waXB4X2JpbjovaG9tZS9ydW5uZXIvLmNhcmdvL2JpbjovaG9tZS9ydW5uZXIvLmNvbmZpZy9jb21wb3Nlci92ZW5kb3IvYmluOi91c3IvbG9jYWwvLmdoY3VwL2JpbjovaG9tZS9ydW5uZXIvLmRvdG5ldC90b29sczovc25hcC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluOi91c3IvZ2FtZXM6L3Vzci9sb2NhbC9nYW1lczovc25hcC9iaW4iLEFOVF9IT01FOiIvdXNyL3NoYXJlL2FudCIsRE9UTkVUX01VTFRJTEVWRUxfTE9PS1VQOiIwIixSVU5ORVJfVFJBQ0tJTkdfSUQ6ImdpdGh1Yl85ZTBhNWM3YS05NzhmLTRmY2UtYmU5Zi0xNTk3YTQ1ZDNmOGQiLElOVk9DQVRJT05fSUQ6IjgyMzE1MDQwZjZjYjRiMTg5MWI4NzU1MDc1ZGJlNzQ5IixIT01FQlJFV19DRUxMQVI6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0NlbGxhciIsTlBNX0NPTkZJR19VU0VSQ09ORklHOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC8ubnBtcmMiLFJVTk5FUl9UT09MX0NBQ0hFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTk9ERToiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixucG1fcGFja2FnZV9uYW1lOiJAbnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9BQ1RJT046Il9fcnVuXzIiLEdJVEhVQl9SVU5fTlVNQkVSOiIyNCIsUlVOTkVSX0FSQ0g6Ilg2NCIsQUdFTlRfVE9PTFNESVJFQ1RPUlk6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixMQU5HOiJDLlVURi04IixWQ1BLR19JTlNUQUxMQVRJT05fUk9PVDoiL3Vzci9sb2NhbC9zaGFyZS92Y3BrZyIsQ09OREE6Ii91c3Ivc2hhcmUvbWluaWNvbmRhIixSVU5ORVJfTkFNRToiSG9zdGVkIEFnZW50IixYREdfQ09ORklHX0hPTUU6Ii9ob21lL3J1bm5lci8uY29uZmlnIixHSVRIVUJfUkVGX05BTUU6Im1haW4iLEdJVEhVQl9SRVBPU0lUT1JZOiJuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsbnBtX2xpZmVjeWNsZV9zY3JpcHQ6InZpdGUgYnVpbGQiLEFORFJPSURfTkRLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9BQ1RJT05fUkVGOiIiLERFQklBTl9GUk9OVEVORDoibm9uaW50ZXJhY3RpdmUiLEdJVEhVQl9BQ1RJT05TOiJ0cnVlIixucG1fcGFja2FnZV92ZXJzaW9uOiIwLjEuMTMiLG5wbV9saWZlY3ljbGVfZXZlbnQ6ImJ1aWxkIixHSVRIVUJfUkVGX1BST1RFQ1RFRDoiZmFsc2UiLEdJVEhVQl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEFDQ0VQVF9FVUxBOiJZIixHSVRIVUJfSk9COiJwdWJsaXNoLW5wbSIsUlVOTkVSX1BFUkZMT0c6Ii9ob21lL3J1bm5lci9wZXJmbG9nIixHSVRIVUJfU0hBOiJmNjU5OGQxODg2MWM2MDg0YTMwMjQzYzlkNmE5ZDAyMDBlMWY5ZTk2IixHSVRIVUJfUlVOX0FUVEVNUFQ6IjEiLEdJVEhVQl9SRUY6InJlZnMvaGVhZHMvbWFpbiIsR0lUSFVCX0FDVE9SOiJuc3NodW50IixBTkRST0lEX1NES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsTEVJTl9IT01FOiIvdXNyL2xvY2FsL2xpYi9sZWluIixucG1fY29uZmlnX2dsb2JhbGNvbmZpZzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2V0Yy9ucG1yYyIsbnBtX2NvbmZpZ19pbml0X21vZHVsZToiL2hvbWUvcnVubmVyLy5ucG0taW5pdC5qcyIsR0lUSFVCX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9hZGRfcGF0aF81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLEpBVkFfSE9NRToiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLFJVTk5FUl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbiIsbnBtX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vYmluL25wbS1jbGkuanMiLEhPTUVCUkVXX0NMRUFOVVBfUEVSSU9ESUNfRlVMTF9EQVlTOiIzNjUwIixHSVRIVUJfRVZFTlRfTkFNRToicHVzaCIsSE9NRUJSRVdfTk9fQVVUT19VUERBVEU6IjEiLEFORFJPSURfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLEdJVEhVQl9TRVJWRVJfVVJMOiJodHRwczovL2dpdGh1Yi5jb20iLEdFQ0tPV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2dlY2tvX2RyaXZlciIsTEVJTl9KQVI6Ii91c3IvbG9jYWwvbGliL2xlaW4vc2VsZi1pbnN0YWxscy9sZWluaW5nZW4tMi45Ljgtc3RhbmRhbG9uZS5qYXIiLG5wbV9jb25maWdfZ2xvYmFsX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixIT01FQlJFV19SRVBPU0lUT1JZOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9Ib21lYnJldyIsbnBtX2NvbW1hbmQ6InJ1bi1zY3JpcHQiLFNHWF9BRVNNX0FERFI6IjEiLENIUk9NRV9CSU46Ii91c3IvYmluL2dvb2dsZS1jaHJvbWUiLFNFTEVOSVVNX0pBUl9QQVRIOiIvdXNyL3NoYXJlL2phdmEvc2VsZW5pdW0tc2VydmVyLmphciIsQU5EUk9JRF9OREtfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX1NURVBfU1VNTUFSWToiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3N0ZXBfc3VtbWFyeV81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLElOSVRfQ1dEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixFRElUT1I6InZpIixOT0RFX0VOVjoicHJvZHVjdGlvbiJ9LkJST0tFUl9FTkRQT0lOVH06JHt7REVQTE9ZTUVOVF9CQVNFUEFUSDoiL29wdC9ydW5uZXIiLERPVE5FVF9OT0xPR086IjEiLFVTRVI6InJ1bm5lciIsbnBtX2NvbmZpZ19hbHdheXNfYXV0aDoiIixucG1fY29uZmlnX3VzZXJfYWdlbnQ6Im5wbS84LjExLjAgbm9kZS92MTguMy4wIGxpbnV4IHg2NCB3b3Jrc3BhY2VzL2ZhbHNlIGNpL2dpdGh1Yi1hY3Rpb25zIixDSToidHJ1ZSIsR0lUSFVCX0VOVjoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3NldF9lbnZfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixQSVBYX0hPTUU6Ii9vcHQvcGlweCIsbnBtX25vZGVfZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsSkFWQV9IT01FXzhfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi04LWpkay1hbWQ2NCIsTk9ERV9BVVRIX1RPS0VOOiJYWFhYWC1YWFhYWC1YWFhYWC1YWFhYWCIsU0hMVkw6IjEiLG5wbV9jb25maWdfbm9wcm94eToiIixIT01FOiIvaG9tZS9ydW5uZXIiLFJVTk5FUl9URU1QOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcCIsR0lUSFVCX0VWRU5UX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19naXRodWJfd29ya2Zsb3cvZXZlbnQuanNvbiIsbnBtX3BhY2thZ2VfanNvbjoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9wYWNrYWdlLmpzb24iLEpBVkFfSE9NRV8xMV9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUElQWF9CSU5fRElSOiIvb3B0L3BpcHhfYmluIixHUkFBTFZNXzExX1JPT1Q6Ii91c3IvbG9jYWwvZ3JhYWx2bS9ncmFhbHZtLWNlLWphdmExMS0yMi4xLjAiLEdJVEhVQl9SRVBPU0lUT1JZX09XTkVSOiJuc3NodW50IixHUkFETEVfSE9NRToiL3Vzci9zaGFyZS9ncmFkbGUtNy40LjIiLEhPTUVCUkVXX1BSRUZJWDoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXciLEFORFJPSURfTkRLX0xBVEVTVF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGsvMjQuMC44MjE1ODg4IixHSVRIVUJfUkVURU5USU9OX0RBWVM6IjkwIixQT1dFUlNIRUxMX0RJU1RSSUJVVElPTl9DSEFOTkVMOiJHaXRIdWItQWN0aW9ucy11YnVudHUyMCIsQVpVUkVfRVhURU5TSU9OX0RJUjoiL29wdC9hei9hemNsaWV4dGVuc2lvbnMiLEdJVEhVQl9IRUFEX1JFRjoiIixucG1fY29uZmlnX2xvY2FsX3ByZWZpeDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0dSQVBIUUxfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWwiLENPTE9SOiIwIixOVk1fRElSOiIvaG9tZS9ydW5uZXIvLm52bSIsbnBtX2NvbmZpZ19tZXRyaWNzX3JlZ2lzdHJ5OiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8iLERPVE5FVF9TS0lQX0ZJUlNUX1RJTUVfRVhQRVJJRU5DRToiMSIsSkFWQV9IT01FXzE3X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTctamRrLWFtZDY0IixJbWFnZVZlcnNpb246IjIwMjIwNjA1LjEiLFJVTk5FUl9PUzoiTGludXgiLEdJVEhVQl9BUElfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tIixTV0lGVF9QQVRIOiIvdXNyL3NoYXJlL3N3aWZ0L3Vzci9iaW4iLFJVTk5FUl9VU0VSOiJydW5uZXIiLENIUk9NRVdFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9jaHJvbWVfZHJpdmVyIixKT1VSTkFMX1NUUkVBTToiODoyMTgzNCIsR0lUSFVCX1dPUktGTE9XOiJOb2RlLmpzIFBhY2thZ2UiLF86Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbnBtIixucG1fY29uZmlnX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixHSVRIVUJfUlVOX0lEOiIyNDgzNTA2MDM1IixHT1JPT1RfMV8xNl9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTYuMTUveDY0IixucG1fY29uZmlnX2NhY2hlOiIvaG9tZS9ydW5uZXIvLm5wbSIsR09ST09UXzFfMTdfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE3LjExL3g2NCIsR0lUSFVCX1JFRl9UWVBFOiJicmFuY2giLEJPT1RTVFJBUF9IQVNLRUxMX05PTklOVEVSQUNUSVZFOiIxIixHSVRIVUJfQkFTRV9SRUY6IiIsSW1hZ2VPUzoidWJ1bnR1MjAiLFBFUkZMT0dfTE9DQVRJT05fU0VUVElORzoiUlVOTkVSX1BFUkZMT0ciLEdPUk9PVF8xXzE4X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xOC4zL3g2NCIsR0lUSFVCX0FDVElPTl9SRVBPU0lUT1JZOiIiLG5wbV9jb25maWdfbm9kZV9neXA6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvbm9kZS1neXAvYmluL25vZGUtZ3lwLmpzIixQQVRIOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvbm9kZV9tb2R1bGVzLy5iaW46L25vZGVfbW9kdWxlcy8uYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvQG5wbWNsaS9ydW4tc2NyaXB0L2xpYi9ub2RlLWd5cC1iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvc2JpbjovaG9tZS9ydW5uZXIvLmxvY2FsL2Jpbjovb3B0L3BpcHhfYmluOi9ob21lL3J1bm5lci8uY2FyZ28vYmluOi9ob21lL3J1bm5lci8uY29uZmlnL2NvbXBvc2VyL3ZlbmRvci9iaW46L3Vzci9sb2NhbC8uZ2hjdXAvYmluOi9ob21lL3J1bm5lci8uZG90bmV0L3Rvb2xzOi9zbmFwL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIsQU5UX0hPTUU6Ii91c3Ivc2hhcmUvYW50IixET1RORVRfTVVMVElMRVZFTF9MT09LVVA6IjAiLFJVTk5FUl9UUkFDS0lOR19JRDoiZ2l0aHViXzllMGE1YzdhLTk3OGYtNGZjZS1iZTlmLTE1OTdhNDVkM2Y4ZCIsSU5WT0NBVElPTl9JRDoiODIzMTUwNDBmNmNiNGIxODkxYjg3NTUwNzVkYmU3NDkiLEhPTUVCUkVXX0NFTExBUjoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvQ2VsbGFyIixOUE1fQ09ORklHX1VTRVJDT05GSUc6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wLy5ucG1yYyIsUlVOTkVSX1RPT0xfQ0FDSEU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixOT0RFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLG5wbV9wYWNrYWdlX25hbWU6IkBuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0FDVElPTjoiX19ydW5fMiIsR0lUSFVCX1JVTl9OVU1CRVI6IjI0IixSVU5ORVJfQVJDSDoiWDY0IixBR0VOVF9UT09MU0RJUkVDVE9SWToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLExBTkc6IkMuVVRGLTgiLFZDUEtHX0lOU1RBTExBVElPTl9ST09UOiIvdXNyL2xvY2FsL3NoYXJlL3ZjcGtnIixDT05EQToiL3Vzci9zaGFyZS9taW5pY29uZGEiLFJVTk5FUl9OQU1FOiJIb3N0ZWQgQWdlbnQiLFhER19DT05GSUdfSE9NRToiL2hvbWUvcnVubmVyLy5jb25maWciLEdJVEhVQl9SRUZfTkFNRToibWFpbiIsR0lUSFVCX1JFUE9TSVRPUlk6Im5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixucG1fbGlmZWN5Y2xlX3NjcmlwdDoidml0ZSBidWlsZCIsQU5EUk9JRF9OREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX0FDVElPTl9SRUY6IiIsREVCSUFOX0ZST05URU5EOiJub25pbnRlcmFjdGl2ZSIsR0lUSFVCX0FDVElPTlM6InRydWUiLG5wbV9wYWNrYWdlX3ZlcnNpb246IjAuMS4xMyIsbnBtX2xpZmVjeWNsZV9ldmVudDoiYnVpbGQiLEdJVEhVQl9SRUZfUFJPVEVDVEVEOiJmYWxzZSIsR0lUSFVCX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsQUNDRVBUX0VVTEE6IlkiLEdJVEhVQl9KT0I6InB1Ymxpc2gtbnBtIixSVU5ORVJfUEVSRkxPRzoiL2hvbWUvcnVubmVyL3BlcmZsb2ciLEdJVEhVQl9TSEE6ImY2NTk4ZDE4ODYxYzYwODRhMzAyNDNjOWQ2YTlkMDIwMGUxZjllOTYiLEdJVEhVQl9SVU5fQVRURU1QVDoiMSIsR0lUSFVCX1JFRjoicmVmcy9oZWFkcy9tYWluIixHSVRIVUJfQUNUT1I6Im5zc2h1bnQiLEFORFJPSURfU0RLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixMRUlOX0hPTUU6Ii91c3IvbG9jYWwvbGliL2xlaW4iLG5wbV9jb25maWdfZ2xvYmFsY29uZmlnOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvZXRjL25wbXJjIixucG1fY29uZmlnX2luaXRfbW9kdWxlOiIvaG9tZS9ydW5uZXIvLm5wbS1pbml0LmpzIixHSVRIVUJfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL2FkZF9wYXRoXzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSkFWQV9IT01FOiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsUlVOTkVSX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luIixucG1fZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9iaW4vbnBtLWNsaS5qcyIsSE9NRUJSRVdfQ0xFQU5VUF9QRVJJT0RJQ19GVUxMX0RBWVM6IjM2NTAiLEdJVEhVQl9FVkVOVF9OQU1FOiJwdXNoIixIT01FQlJFV19OT19BVVRPX1VQREFURToiMSIsQU5EUk9JRF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsR0lUSFVCX1NFUlZFUl9VUkw6Imh0dHBzOi8vZ2l0aHViLmNvbSIsR0VDS09XRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvZ2Vja29fZHJpdmVyIixMRUlOX0pBUjoiL3Vzci9sb2NhbC9saWIvbGVpbi9zZWxmLWluc3RhbGxzL2xlaW5pbmdlbi0yLjkuOC1zdGFuZGFsb25lLmphciIsbnBtX2NvbmZpZ19nbG9iYWxfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEhPTUVCUkVXX1JFUE9TSVRPUlk6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0hvbWVicmV3IixucG1fY29tbWFuZDoicnVuLXNjcmlwdCIsU0dYX0FFU01fQUREUjoiMSIsQ0hST01FX0JJTjoiL3Vzci9iaW4vZ29vZ2xlLWNocm9tZSIsU0VMRU5JVU1fSkFSX1BBVEg6Ii91c3Ivc2hhcmUvamF2YS9zZWxlbml1bS1zZXJ2ZXIuamFyIixBTkRST0lEX05ES19IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfU1RFUF9TVU1NQVJZOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc3RlcF9zdW1tYXJ5XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSU5JVF9DV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEVESVRPUjoidmkiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn0uQlJPS0VSX1BPUlR9JHt7REVQTE9ZTUVOVF9CQVNFUEFUSDoiL29wdC9ydW5uZXIiLERPVE5FVF9OT0xPR086IjEiLFVTRVI6InJ1bm5lciIsbnBtX2NvbmZpZ19hbHdheXNfYXV0aDoiIixucG1fY29uZmlnX3VzZXJfYWdlbnQ6Im5wbS84LjExLjAgbm9kZS92MTguMy4wIGxpbnV4IHg2NCB3b3Jrc3BhY2VzL2ZhbHNlIGNpL2dpdGh1Yi1hY3Rpb25zIixDSToidHJ1ZSIsR0lUSFVCX0VOVjoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3NldF9lbnZfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixQSVBYX0hPTUU6Ii9vcHQvcGlweCIsbnBtX25vZGVfZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsSkFWQV9IT01FXzhfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi04LWpkay1hbWQ2NCIsTk9ERV9BVVRIX1RPS0VOOiJYWFhYWC1YWFhYWC1YWFhYWC1YWFhYWCIsU0hMVkw6IjEiLG5wbV9jb25maWdfbm9wcm94eToiIixIT01FOiIvaG9tZS9ydW5uZXIiLFJVTk5FUl9URU1QOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcCIsR0lUSFVCX0VWRU5UX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19naXRodWJfd29ya2Zsb3cvZXZlbnQuanNvbiIsbnBtX3BhY2thZ2VfanNvbjoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9wYWNrYWdlLmpzb24iLEpBVkFfSE9NRV8xMV9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUElQWF9CSU5fRElSOiIvb3B0L3BpcHhfYmluIixHUkFBTFZNXzExX1JPT1Q6Ii91c3IvbG9jYWwvZ3JhYWx2bS9ncmFhbHZtLWNlLWphdmExMS0yMi4xLjAiLEdJVEhVQl9SRVBPU0lUT1JZX09XTkVSOiJuc3NodW50IixHUkFETEVfSE9NRToiL3Vzci9zaGFyZS9ncmFkbGUtNy40LjIiLEhPTUVCUkVXX1BSRUZJWDoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXciLEFORFJPSURfTkRLX0xBVEVTVF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGsvMjQuMC44MjE1ODg4IixHSVRIVUJfUkVURU5USU9OX0RBWVM6IjkwIixQT1dFUlNIRUxMX0RJU1RSSUJVVElPTl9DSEFOTkVMOiJHaXRIdWItQWN0aW9ucy11YnVudHUyMCIsQVpVUkVfRVhURU5TSU9OX0RJUjoiL29wdC9hei9hemNsaWV4dGVuc2lvbnMiLEdJVEhVQl9IRUFEX1JFRjoiIixucG1fY29uZmlnX2xvY2FsX3ByZWZpeDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0dSQVBIUUxfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWwiLENPTE9SOiIwIixOVk1fRElSOiIvaG9tZS9ydW5uZXIvLm52bSIsbnBtX2NvbmZpZ19tZXRyaWNzX3JlZ2lzdHJ5OiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8iLERPVE5FVF9TS0lQX0ZJUlNUX1RJTUVfRVhQRVJJRU5DRToiMSIsSkFWQV9IT01FXzE3X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTctamRrLWFtZDY0IixJbWFnZVZlcnNpb246IjIwMjIwNjA1LjEiLFJVTk5FUl9PUzoiTGludXgiLEdJVEhVQl9BUElfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tIixTV0lGVF9QQVRIOiIvdXNyL3NoYXJlL3N3aWZ0L3Vzci9iaW4iLFJVTk5FUl9VU0VSOiJydW5uZXIiLENIUk9NRVdFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9jaHJvbWVfZHJpdmVyIixKT1VSTkFMX1NUUkVBTToiODoyMTgzNCIsR0lUSFVCX1dPUktGTE9XOiJOb2RlLmpzIFBhY2thZ2UiLF86Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbnBtIixucG1fY29uZmlnX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixHSVRIVUJfUlVOX0lEOiIyNDgzNTA2MDM1IixHT1JPT1RfMV8xNl9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTYuMTUveDY0IixucG1fY29uZmlnX2NhY2hlOiIvaG9tZS9ydW5uZXIvLm5wbSIsR09ST09UXzFfMTdfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE3LjExL3g2NCIsR0lUSFVCX1JFRl9UWVBFOiJicmFuY2giLEJPT1RTVFJBUF9IQVNLRUxMX05PTklOVEVSQUNUSVZFOiIxIixHSVRIVUJfQkFTRV9SRUY6IiIsSW1hZ2VPUzoidWJ1bnR1MjAiLFBFUkZMT0dfTE9DQVRJT05fU0VUVElORzoiUlVOTkVSX1BFUkZMT0ciLEdPUk9PVF8xXzE4X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xOC4zL3g2NCIsR0lUSFVCX0FDVElPTl9SRVBPU0lUT1JZOiIiLG5wbV9jb25maWdfbm9kZV9neXA6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvbm9kZS1neXAvYmluL25vZGUtZ3lwLmpzIixQQVRIOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvbm9kZV9tb2R1bGVzLy5iaW46L25vZGVfbW9kdWxlcy8uYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvQG5wbWNsaS9ydW4tc2NyaXB0L2xpYi9ub2RlLWd5cC1iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvc2JpbjovaG9tZS9ydW5uZXIvLmxvY2FsL2Jpbjovb3B0L3BpcHhfYmluOi9ob21lL3J1bm5lci8uY2FyZ28vYmluOi9ob21lL3J1bm5lci8uY29uZmlnL2NvbXBvc2VyL3ZlbmRvci9iaW46L3Vzci9sb2NhbC8uZ2hjdXAvYmluOi9ob21lL3J1bm5lci8uZG90bmV0L3Rvb2xzOi9zbmFwL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIsQU5UX0hPTUU6Ii91c3Ivc2hhcmUvYW50IixET1RORVRfTVVMVElMRVZFTF9MT09LVVA6IjAiLFJVTk5FUl9UUkFDS0lOR19JRDoiZ2l0aHViXzllMGE1YzdhLTk3OGYtNGZjZS1iZTlmLTE1OTdhNDVkM2Y4ZCIsSU5WT0NBVElPTl9JRDoiODIzMTUwNDBmNmNiNGIxODkxYjg3NTUwNzVkYmU3NDkiLEhPTUVCUkVXX0NFTExBUjoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvQ2VsbGFyIixOUE1fQ09ORklHX1VTRVJDT05GSUc6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wLy5ucG1yYyIsUlVOTkVSX1RPT0xfQ0FDSEU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixOT0RFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLG5wbV9wYWNrYWdlX25hbWU6IkBuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0FDVElPTjoiX19ydW5fMiIsR0lUSFVCX1JVTl9OVU1CRVI6IjI0IixSVU5ORVJfQVJDSDoiWDY0IixBR0VOVF9UT09MU0RJUkVDVE9SWToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLExBTkc6IkMuVVRGLTgiLFZDUEtHX0lOU1RBTExBVElPTl9ST09UOiIvdXNyL2xvY2FsL3NoYXJlL3ZjcGtnIixDT05EQToiL3Vzci9zaGFyZS9taW5pY29uZGEiLFJVTk5FUl9OQU1FOiJIb3N0ZWQgQWdlbnQiLFhER19DT05GSUdfSE9NRToiL2hvbWUvcnVubmVyLy5jb25maWciLEdJVEhVQl9SRUZfTkFNRToibWFpbiIsR0lUSFVCX1JFUE9TSVRPUlk6Im5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixucG1fbGlmZWN5Y2xlX3NjcmlwdDoidml0ZSBidWlsZCIsQU5EUk9JRF9OREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX0FDVElPTl9SRUY6IiIsREVCSUFOX0ZST05URU5EOiJub25pbnRlcmFjdGl2ZSIsR0lUSFVCX0FDVElPTlM6InRydWUiLG5wbV9wYWNrYWdlX3ZlcnNpb246IjAuMS4xMyIsbnBtX2xpZmVjeWNsZV9ldmVudDoiYnVpbGQiLEdJVEhVQl9SRUZfUFJPVEVDVEVEOiJmYWxzZSIsR0lUSFVCX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsQUNDRVBUX0VVTEE6IlkiLEdJVEhVQl9KT0I6InB1Ymxpc2gtbnBtIixSVU5ORVJfUEVSRkxPRzoiL2hvbWUvcnVubmVyL3BlcmZsb2ciLEdJVEhVQl9TSEE6ImY2NTk4ZDE4ODYxYzYwODRhMzAyNDNjOWQ2YTlkMDIwMGUxZjllOTYiLEdJVEhVQl9SVU5fQVRURU1QVDoiMSIsR0lUSFVCX1JFRjoicmVmcy9oZWFkcy9tYWluIixHSVRIVUJfQUNUT1I6Im5zc2h1bnQiLEFORFJPSURfU0RLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixMRUlOX0hPTUU6Ii91c3IvbG9jYWwvbGliL2xlaW4iLG5wbV9jb25maWdfZ2xvYmFsY29uZmlnOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvZXRjL25wbXJjIixucG1fY29uZmlnX2luaXRfbW9kdWxlOiIvaG9tZS9ydW5uZXIvLm5wbS1pbml0LmpzIixHSVRIVUJfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL2FkZF9wYXRoXzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSkFWQV9IT01FOiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsUlVOTkVSX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luIixucG1fZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9iaW4vbnBtLWNsaS5qcyIsSE9NRUJSRVdfQ0xFQU5VUF9QRVJJT0RJQ19GVUxMX0RBWVM6IjM2NTAiLEdJVEhVQl9FVkVOVF9OQU1FOiJwdXNoIixIT01FQlJFV19OT19BVVRPX1VQREFURToiMSIsQU5EUk9JRF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsR0lUSFVCX1NFUlZFUl9VUkw6Imh0dHBzOi8vZ2l0aHViLmNvbSIsR0VDS09XRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvZ2Vja29fZHJpdmVyIixMRUlOX0pBUjoiL3Vzci9sb2NhbC9saWIvbGVpbi9zZWxmLWluc3RhbGxzL2xlaW5pbmdlbi0yLjkuOC1zdGFuZGFsb25lLmphciIsbnBtX2NvbmZpZ19nbG9iYWxfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEhPTUVCUkVXX1JFUE9TSVRPUlk6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0hvbWVicmV3IixucG1fY29tbWFuZDoicnVuLXNjcmlwdCIsU0dYX0FFU01fQUREUjoiMSIsQ0hST01FX0JJTjoiL3Vzci9iaW4vZ29vZ2xlLWNocm9tZSIsU0VMRU5JVU1fSkFSX1BBVEg6Ii91c3Ivc2hhcmUvamF2YS9zZWxlbml1bS1zZXJ2ZXIuamFyIixBTkRST0lEX05ES19IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfU1RFUF9TVU1NQVJZOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc3RlcF9zdW1tYXJ5XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSU5JVF9DV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEVESVRPUjoidmkiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn0uQlJPS0VSX0FQSV9ST09UfS90b2tlbmA7Y29uc29sZS5sb2coYCNHZXRUb2tlbkZyb21Ccm9rZXI6dXJsID0gWyR7b31dYCksY29uc29sZS5sb2cocik7dHJ5e2NvbnN0IHQ9YXdhaXQgJG8oe21ldGhvZDoicG9zdCIsdXJsOm8sZGF0YTpyLHdpdGhDcmVkZW50aWFsczohMCx0aW1lb3V0OnBhcnNlSW50KHtERVBMT1lNRU5UX0JBU0VQQVRIOiIvb3B0L3J1bm5lciIsRE9UTkVUX05PTE9HTzoiMSIsVVNFUjoicnVubmVyIixucG1fY29uZmlnX2Fsd2F5c19hdXRoOiIiLG5wbV9jb25maWdfdXNlcl9hZ2VudDoibnBtLzguMTEuMCBub2RlL3YxOC4zLjAgbGludXggeDY0IHdvcmtzcGFjZXMvZmFsc2UgY2kvZ2l0aHViLWFjdGlvbnMiLENJOiJ0cnVlIixHSVRIVUJfRU5WOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc2V0X2Vudl81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLFBJUFhfSE9NRToiL29wdC9waXB4IixucG1fbm9kZV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixKQVZBX0hPTUVfOF9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTgtamRrLWFtZDY0IixOT0RFX0FVVEhfVE9LRU46IlhYWFhYLVhYWFhYLVhYWFhYLVhYWFhYIixTSExWTDoiMSIsbnBtX2NvbmZpZ19ub3Byb3h5OiIiLEhPTUU6Ii9ob21lL3J1bm5lciIsUlVOTkVSX1RFTVA6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wIixHSVRIVUJfRVZFTlRfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX2dpdGh1Yl93b3JrZmxvdy9ldmVudC5qc29uIixucG1fcGFja2FnZV9qc29uOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL3BhY2thZ2UuanNvbiIsSkFWQV9IT01FXzExX1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQSVBYX0JJTl9ESVI6Ii9vcHQvcGlweF9iaW4iLEdSQUFMVk1fMTFfUk9PVDoiL3Vzci9sb2NhbC9ncmFhbHZtL2dyYWFsdm0tY2UtamF2YTExLTIyLjEuMCIsR0lUSFVCX1JFUE9TSVRPUllfT1dORVI6Im5zc2h1bnQiLEdSQURMRV9IT01FOiIvdXNyL3NoYXJlL2dyYWRsZS03LjQuMiIsSE9NRUJSRVdfUFJFRklYOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldyIsQU5EUk9JRF9OREtfTEFURVNUX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay8yNC4wLjgyMTU4ODgiLEdJVEhVQl9SRVRFTlRJT05fREFZUzoiOTAiLFBPV0VSU0hFTExfRElTVFJJQlVUSU9OX0NIQU5ORUw6IkdpdEh1Yi1BY3Rpb25zLXVidW50dTIwIixBWlVSRV9FWFRFTlNJT05fRElSOiIvb3B0L2F6L2F6Y2xpZXh0ZW5zaW9ucyIsR0lUSFVCX0hFQURfUkVGOiIiLG5wbV9jb25maWdfbG9jYWxfcHJlZml4OiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfR1JBUEhRTF9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbCIsQ09MT1I6IjAiLE5WTV9ESVI6Ii9ob21lL3J1bm5lci8ubnZtIixucG1fY29uZmlnX21ldHJpY3NfcmVnaXN0cnk6Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyIsRE9UTkVUX1NLSVBfRklSU1RfVElNRV9FWFBFUklFTkNFOiIxIixKQVZBX0hPTUVfMTdfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xNy1qZGstYW1kNjQiLEltYWdlVmVyc2lvbjoiMjAyMjA2MDUuMSIsUlVOTkVSX09TOiJMaW51eCIsR0lUSFVCX0FQSV9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20iLFNXSUZUX1BBVEg6Ii91c3Ivc2hhcmUvc3dpZnQvdXNyL2JpbiIsUlVOTkVSX1VTRVI6InJ1bm5lciIsQ0hST01FV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2Nocm9tZV9kcml2ZXIiLEpPVVJOQUxfU1RSRUFNOiI4OjIxODM0IixHSVRIVUJfV09SS0ZMT1c6Ik5vZGUuanMgUGFja2FnZSIsXzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ucG0iLG5wbV9jb25maWdfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEdJVEhVQl9SVU5fSUQ6IjI0ODM1MDYwMzUiLEdPUk9PVF8xXzE2X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNi4xNS94NjQiLG5wbV9jb25maWdfY2FjaGU6Ii9ob21lL3J1bm5lci8ubnBtIixHT1JPT1RfMV8xN19YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTcuMTEveDY0IixHSVRIVUJfUkVGX1RZUEU6ImJyYW5jaCIsQk9PVFNUUkFQX0hBU0tFTExfTk9OSU5URVJBQ1RJVkU6IjEiLEdJVEhVQl9CQVNFX1JFRjoiIixJbWFnZU9TOiJ1YnVudHUyMCIsUEVSRkxPR19MT0NBVElPTl9TRVRUSU5HOiJSVU5ORVJfUEVSRkxPRyIsR09ST09UXzFfMThfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE4LjMveDY0IixHSVRIVUJfQUNUSU9OX1JFUE9TSVRPUlk6IiIsbnBtX2NvbmZpZ19ub2RlX2d5cDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9ub2RlLWd5cC9iaW4vbm9kZS1neXAuanMiLFBBVEg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ub2RlX21vZHVsZXMvLmJpbjovbm9kZV9tb2R1bGVzLy5iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9AbnBtY2xpL3J1bi1zY3JpcHQvbGliL25vZGUtZ3lwLWJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9zYmluOi9ob21lL3J1bm5lci8ubG9jYWwvYmluOi9vcHQvcGlweF9iaW46L2hvbWUvcnVubmVyLy5jYXJnby9iaW46L2hvbWUvcnVubmVyLy5jb25maWcvY29tcG9zZXIvdmVuZG9yL2JpbjovdXNyL2xvY2FsLy5naGN1cC9iaW46L2hvbWUvcnVubmVyLy5kb3RuZXQvdG9vbHM6L3NuYXAvYmluOi91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2dhbWVzOi91c3IvbG9jYWwvZ2FtZXM6L3NuYXAvYmluIixBTlRfSE9NRToiL3Vzci9zaGFyZS9hbnQiLERPVE5FVF9NVUxUSUxFVkVMX0xPT0tVUDoiMCIsUlVOTkVSX1RSQUNLSU5HX0lEOiJnaXRodWJfOWUwYTVjN2EtOTc4Zi00ZmNlLWJlOWYtMTU5N2E0NWQzZjhkIixJTlZPQ0FUSU9OX0lEOiI4MjMxNTA0MGY2Y2I0YjE4OTFiODc1NTA3NWRiZTc0OSIsSE9NRUJSRVdfQ0VMTEFSOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9DZWxsYXIiLE5QTV9DT05GSUdfVVNFUkNPTkZJRzoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvLm5wbXJjIixSVU5ORVJfVE9PTF9DQUNIRToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLE5PREU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsbnBtX3BhY2thZ2VfbmFtZToiQG5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfQUNUSU9OOiJfX3J1bl8yIixHSVRIVUJfUlVOX05VTUJFUjoiMjQiLFJVTk5FUl9BUkNIOiJYNjQiLEFHRU5UX1RPT0xTRElSRUNUT1JZOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTEFORzoiQy5VVEYtOCIsVkNQS0dfSU5TVEFMTEFUSU9OX1JPT1Q6Ii91c3IvbG9jYWwvc2hhcmUvdmNwa2ciLENPTkRBOiIvdXNyL3NoYXJlL21pbmljb25kYSIsUlVOTkVSX05BTUU6Ikhvc3RlZCBBZ2VudCIsWERHX0NPTkZJR19IT01FOiIvaG9tZS9ydW5uZXIvLmNvbmZpZyIsR0lUSFVCX1JFRl9OQU1FOiJtYWluIixHSVRIVUJfUkVQT1NJVE9SWToibnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLG5wbV9saWZlY3ljbGVfc2NyaXB0OiJ2aXRlIGJ1aWxkIixBTkRST0lEX05ES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfQUNUSU9OX1JFRjoiIixERUJJQU5fRlJPTlRFTkQ6Im5vbmludGVyYWN0aXZlIixHSVRIVUJfQUNUSU9OUzoidHJ1ZSIsbnBtX3BhY2thZ2VfdmVyc2lvbjoiMC4xLjEzIixucG1fbGlmZWN5Y2xlX2V2ZW50OiJidWlsZCIsR0lUSFVCX1JFRl9QUk9URUNURUQ6ImZhbHNlIixHSVRIVUJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixBQ0NFUFRfRVVMQToiWSIsR0lUSFVCX0pPQjoicHVibGlzaC1ucG0iLFJVTk5FUl9QRVJGTE9HOiIvaG9tZS9ydW5uZXIvcGVyZmxvZyIsR0lUSFVCX1NIQToiZjY1OThkMTg4NjFjNjA4NGEzMDI0M2M5ZDZhOWQwMjAwZTFmOWU5NiIsR0lUSFVCX1JVTl9BVFRFTVBUOiIxIixHSVRIVUJfUkVGOiJyZWZzL2hlYWRzL21haW4iLEdJVEhVQl9BQ1RPUjoibnNzaHVudCIsQU5EUk9JRF9TREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLExFSU5fSE9NRToiL3Vzci9sb2NhbC9saWIvbGVpbiIsbnBtX2NvbmZpZ19nbG9iYWxjb25maWc6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9ldGMvbnBtcmMiLG5wbV9jb25maWdfaW5pdF9tb2R1bGU6Ii9ob21lL3J1bm5lci8ubnBtLWluaXQuanMiLEdJVEhVQl9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvYWRkX3BhdGhfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixKQVZBX0hPTUU6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUFdEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixSVU5ORVJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4iLG5wbV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL2Jpbi9ucG0tY2xpLmpzIixIT01FQlJFV19DTEVBTlVQX1BFUklPRElDX0ZVTExfREFZUzoiMzY1MCIsR0lUSFVCX0VWRU5UX05BTUU6InB1c2giLEhPTUVCUkVXX05PX0FVVE9fVVBEQVRFOiIxIixBTkRST0lEX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixHSVRIVUJfU0VSVkVSX1VSTDoiaHR0cHM6Ly9naXRodWIuY29tIixHRUNLT1dFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9nZWNrb19kcml2ZXIiLExFSU5fSkFSOiIvdXNyL2xvY2FsL2xpYi9sZWluL3NlbGYtaW5zdGFsbHMvbGVpbmluZ2VuLTIuOS44LXN0YW5kYWxvbmUuamFyIixucG1fY29uZmlnX2dsb2JhbF9wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsSE9NRUJSRVdfUkVQT1NJVE9SWToiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvSG9tZWJyZXciLG5wbV9jb21tYW5kOiJydW4tc2NyaXB0IixTR1hfQUVTTV9BRERSOiIxIixDSFJPTUVfQklOOiIvdXNyL2Jpbi9nb29nbGUtY2hyb21lIixTRUxFTklVTV9KQVJfUEFUSDoiL3Vzci9zaGFyZS9qYXZhL3NlbGVuaXVtLXNlcnZlci5qYXIiLEFORFJPSURfTkRLX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9TVEVQX1NVTU1BUlk6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zdGVwX3N1bW1hcnlfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixJTklUX0NXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsRURJVE9SOiJ2aSIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifS5USU1FT1VUKX0pO2lmKGNvbnNvbGUubG9nKGByZXRWYWw6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCksdC5zdGF0dXM9PT11ci5PSyl7Y29uc29sZS5sb2coIlN0b3JpbmcgdG9rZW5zLi4uIik7Y29uc3Qgcz10LmRhdGE7cmV0dXJuIFgodGhpcyx4ZSkuY2FsbCh0aGlzLHMuaWRfdG9rZW4pLFgodGhpcyxCZSkuc2V0KFgodGhpcyxqZSkscyksITB9ZWxzZSBpZih0LnN0YXR1cz09PXVyLlVOQVVUSE9SSVpFRCl7Y29uc29sZS5sb2coIk5PVCBTdG9yaW5nIHRva2Vucy4uLiIpLGNvbnNvbGUubG9nKHQuc3RhdHVzKSxYKHRoaXMseGUpLmNhbGwodGhpcyxudWxsKTtjb25zdCBzPXQuZGF0YTtyZXR1cm4hMX1lbHNlIHJldHVybiBjb25zb2xlLmxvZygiTk9UIFN0b3JpbmcgdG9rZW5zLi4uIiksY29uc29sZS5sb2codC5zdGF0dXMpLFgodGhpcyx4ZSkuY2FsbCh0aGlzLG51bGwpLGNvbnNvbGUubG9nKCJDb3VsZCBub3Qgb2J0YWluIGFjY2Vzc190b2tlbiBmcm9tIHRva2VuIGVuZC1wb2ludDotIiksY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodC5kYXRhKSksITF9Y2F0Y2godCl7cmV0dXJuIFgodGhpcyx4ZSkuY2FsbCh0aGlzLG51bGwpLGNvbnNvbGUubG9nKHQpLGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHQpKSwhMX19KSx1ZSh0aGlzLHlyLGFzeW5jKHIsbyk9Pntjb25zb2xlLmxvZygiI0dldFRva2VuIiksY29uc29sZS5sb2cobyksWCh0aGlzLEJlKS5zZXQoWCh0aGlzLGplKSxudWxsKTtjb25zdCB0PXtjbGllbnRfaWQ6e0RFUExPWU1FTlRfQkFTRVBBVEg6Ii9vcHQvcnVubmVyIixET1RORVRfTk9MT0dPOiIxIixVU0VSOiJydW5uZXIiLG5wbV9jb25maWdfYWx3YXlzX2F1dGg6IiIsbnBtX2NvbmZpZ191c2VyX2FnZW50OiJucG0vOC4xMS4wIG5vZGUvdjE4LjMuMCBsaW51eCB4NjQgd29ya3NwYWNlcy9mYWxzZSBjaS9naXRodWItYWN0aW9ucyIsQ0k6InRydWUiLEdJVEhVQl9FTlY6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zZXRfZW52XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsUElQWF9IT01FOiIvb3B0L3BpcHgiLG5wbV9ub2RlX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLEpBVkFfSE9NRV84X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tOC1qZGstYW1kNjQiLE5PREVfQVVUSF9UT0tFTjoiWFhYWFgtWFhYWFgtWFhYWFgtWFhYWFgiLFNITFZMOiIxIixucG1fY29uZmlnX25vcHJveHk6IiIsSE9NRToiL2hvbWUvcnVubmVyIixSVU5ORVJfVEVNUDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAiLEdJVEhVQl9FVkVOVF9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fZ2l0aHViX3dvcmtmbG93L2V2ZW50Lmpzb24iLG5wbV9wYWNrYWdlX2pzb246Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vcGFja2FnZS5qc29uIixKQVZBX0hPTUVfMTFfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBJUFhfQklOX0RJUjoiL29wdC9waXB4X2JpbiIsR1JBQUxWTV8xMV9ST09UOiIvdXNyL2xvY2FsL2dyYWFsdm0vZ3JhYWx2bS1jZS1qYXZhMTEtMjIuMS4wIixHSVRIVUJfUkVQT1NJVE9SWV9PV05FUjoibnNzaHVudCIsR1JBRExFX0hPTUU6Ii91c3Ivc2hhcmUvZ3JhZGxlLTcuNC4yIixIT01FQlJFV19QUkVGSVg6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3IixBTkRST0lEX05ES19MQVRFU1RfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLzI0LjAuODIxNTg4OCIsR0lUSFVCX1JFVEVOVElPTl9EQVlTOiI5MCIsUE9XRVJTSEVMTF9ESVNUUklCVVRJT05fQ0hBTk5FTDoiR2l0SHViLUFjdGlvbnMtdWJ1bnR1MjAiLEFaVVJFX0VYVEVOU0lPTl9ESVI6Ii9vcHQvYXovYXpjbGlleHRlbnNpb25zIixHSVRIVUJfSEVBRF9SRUY6IiIsbnBtX2NvbmZpZ19sb2NhbF9wcmVmaXg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9HUkFQSFFMX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsIixDT0xPUjoiMCIsTlZNX0RJUjoiL2hvbWUvcnVubmVyLy5udm0iLG5wbV9jb25maWdfbWV0cmljc19yZWdpc3RyeToiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvIixET1RORVRfU0tJUF9GSVJTVF9USU1FX0VYUEVSSUVOQ0U6IjEiLEpBVkFfSE9NRV8xN19YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTE3LWpkay1hbWQ2NCIsSW1hZ2VWZXJzaW9uOiIyMDIyMDYwNS4xIixSVU5ORVJfT1M6IkxpbnV4IixHSVRIVUJfQVBJX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSIsU1dJRlRfUEFUSDoiL3Vzci9zaGFyZS9zd2lmdC91c3IvYmluIixSVU5ORVJfVVNFUjoicnVubmVyIixDSFJPTUVXRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvY2hyb21lX2RyaXZlciIsSk9VUk5BTF9TVFJFQU06Ijg6MjE4MzQiLEdJVEhVQl9XT1JLRkxPVzoiTm9kZS5qcyBQYWNrYWdlIixfOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25wbSIsbnBtX2NvbmZpZ19wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsR0lUSFVCX1JVTl9JRDoiMjQ4MzUwNjAzNSIsR09ST09UXzFfMTZfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE2LjE1L3g2NCIsbnBtX2NvbmZpZ19jYWNoZToiL2hvbWUvcnVubmVyLy5ucG0iLEdPUk9PVF8xXzE3X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNy4xMS94NjQiLEdJVEhVQl9SRUZfVFlQRToiYnJhbmNoIixCT09UU1RSQVBfSEFTS0VMTF9OT05JTlRFUkFDVElWRToiMSIsR0lUSFVCX0JBU0VfUkVGOiIiLEltYWdlT1M6InVidW50dTIwIixQRVJGTE9HX0xPQ0FUSU9OX1NFVFRJTkc6IlJVTk5FUl9QRVJGTE9HIixHT1JPT1RfMV8xOF9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTguMy94NjQiLEdJVEhVQl9BQ1RJT05fUkVQT1NJVE9SWToiIixucG1fY29uZmlnX25vZGVfZ3lwOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL25vZGUtZ3lwL2Jpbi9ub2RlLWd5cC5qcyIsUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL25vZGVfbW9kdWxlcy8uYmluOi9ub2RlX21vZHVsZXMvLmJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL0BucG1jbGkvcnVuLXNjcmlwdC9saWIvbm9kZS1neXAtYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L3NiaW46L2hvbWUvcnVubmVyLy5sb2NhbC9iaW46L29wdC9waXB4X2JpbjovaG9tZS9ydW5uZXIvLmNhcmdvL2JpbjovaG9tZS9ydW5uZXIvLmNvbmZpZy9jb21wb3Nlci92ZW5kb3IvYmluOi91c3IvbG9jYWwvLmdoY3VwL2JpbjovaG9tZS9ydW5uZXIvLmRvdG5ldC90b29sczovc25hcC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluOi91c3IvZ2FtZXM6L3Vzci9sb2NhbC9nYW1lczovc25hcC9iaW4iLEFOVF9IT01FOiIvdXNyL3NoYXJlL2FudCIsRE9UTkVUX01VTFRJTEVWRUxfTE9PS1VQOiIwIixSVU5ORVJfVFJBQ0tJTkdfSUQ6ImdpdGh1Yl85ZTBhNWM3YS05NzhmLTRmY2UtYmU5Zi0xNTk3YTQ1ZDNmOGQiLElOVk9DQVRJT05fSUQ6IjgyMzE1MDQwZjZjYjRiMTg5MWI4NzU1MDc1ZGJlNzQ5IixIT01FQlJFV19DRUxMQVI6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0NlbGxhciIsTlBNX0NPTkZJR19VU0VSQ09ORklHOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC8ubnBtcmMiLFJVTk5FUl9UT09MX0NBQ0hFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTk9ERToiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixucG1fcGFja2FnZV9uYW1lOiJAbnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9BQ1RJT046Il9fcnVuXzIiLEdJVEhVQl9SVU5fTlVNQkVSOiIyNCIsUlVOTkVSX0FSQ0g6Ilg2NCIsQUdFTlRfVE9PTFNESVJFQ1RPUlk6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixMQU5HOiJDLlVURi04IixWQ1BLR19JTlNUQUxMQVRJT05fUk9PVDoiL3Vzci9sb2NhbC9zaGFyZS92Y3BrZyIsQ09OREE6Ii91c3Ivc2hhcmUvbWluaWNvbmRhIixSVU5ORVJfTkFNRToiSG9zdGVkIEFnZW50IixYREdfQ09ORklHX0hPTUU6Ii9ob21lL3J1bm5lci8uY29uZmlnIixHSVRIVUJfUkVGX05BTUU6Im1haW4iLEdJVEhVQl9SRVBPU0lUT1JZOiJuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsbnBtX2xpZmVjeWNsZV9zY3JpcHQ6InZpdGUgYnVpbGQiLEFORFJPSURfTkRLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9BQ1RJT05fUkVGOiIiLERFQklBTl9GUk9OVEVORDoibm9uaW50ZXJhY3RpdmUiLEdJVEhVQl9BQ1RJT05TOiJ0cnVlIixucG1fcGFja2FnZV92ZXJzaW9uOiIwLjEuMTMiLG5wbV9saWZlY3ljbGVfZXZlbnQ6ImJ1aWxkIixHSVRIVUJfUkVGX1BST1RFQ1RFRDoiZmFsc2UiLEdJVEhVQl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEFDQ0VQVF9FVUxBOiJZIixHSVRIVUJfSk9COiJwdWJsaXNoLW5wbSIsUlVOTkVSX1BFUkZMT0c6Ii9ob21lL3J1bm5lci9wZXJmbG9nIixHSVRIVUJfU0hBOiJmNjU5OGQxODg2MWM2MDg0YTMwMjQzYzlkNmE5ZDAyMDBlMWY5ZTk2IixHSVRIVUJfUlVOX0FUVEVNUFQ6IjEiLEdJVEhVQl9SRUY6InJlZnMvaGVhZHMvbWFpbiIsR0lUSFVCX0FDVE9SOiJuc3NodW50IixBTkRST0lEX1NES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsTEVJTl9IT01FOiIvdXNyL2xvY2FsL2xpYi9sZWluIixucG1fY29uZmlnX2dsb2JhbGNvbmZpZzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2V0Yy9ucG1yYyIsbnBtX2NvbmZpZ19pbml0X21vZHVsZToiL2hvbWUvcnVubmVyLy5ucG0taW5pdC5qcyIsR0lUSFVCX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9hZGRfcGF0aF81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLEpBVkFfSE9NRToiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLFJVTk5FUl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbiIsbnBtX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vYmluL25wbS1jbGkuanMiLEhPTUVCUkVXX0NMRUFOVVBfUEVSSU9ESUNfRlVMTF9EQVlTOiIzNjUwIixHSVRIVUJfRVZFTlRfTkFNRToicHVzaCIsSE9NRUJSRVdfTk9fQVVUT19VUERBVEU6IjEiLEFORFJPSURfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLEdJVEhVQl9TRVJWRVJfVVJMOiJodHRwczovL2dpdGh1Yi5jb20iLEdFQ0tPV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2dlY2tvX2RyaXZlciIsTEVJTl9KQVI6Ii91c3IvbG9jYWwvbGliL2xlaW4vc2VsZi1pbnN0YWxscy9sZWluaW5nZW4tMi45Ljgtc3RhbmRhbG9uZS5qYXIiLG5wbV9jb25maWdfZ2xvYmFsX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixIT01FQlJFV19SRVBPU0lUT1JZOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9Ib21lYnJldyIsbnBtX2NvbW1hbmQ6InJ1bi1zY3JpcHQiLFNHWF9BRVNNX0FERFI6IjEiLENIUk9NRV9CSU46Ii91c3IvYmluL2dvb2dsZS1jaHJvbWUiLFNFTEVOSVVNX0pBUl9QQVRIOiIvdXNyL3NoYXJlL2phdmEvc2VsZW5pdW0tc2VydmVyLmphciIsQU5EUk9JRF9OREtfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX1NURVBfU1VNTUFSWToiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3N0ZXBfc3VtbWFyeV81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLElOSVRfQ1dEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixFRElUT1I6InZpIixOT0RFX0VOVjoicHJvZHVjdGlvbiJ9LkNMSUVOVF9JRCxzY29wZTp7REVQTE9ZTUVOVF9CQVNFUEFUSDoiL29wdC9ydW5uZXIiLERPVE5FVF9OT0xPR086IjEiLFVTRVI6InJ1bm5lciIsbnBtX2NvbmZpZ19hbHdheXNfYXV0aDoiIixucG1fY29uZmlnX3VzZXJfYWdlbnQ6Im5wbS84LjExLjAgbm9kZS92MTguMy4wIGxpbnV4IHg2NCB3b3Jrc3BhY2VzL2ZhbHNlIGNpL2dpdGh1Yi1hY3Rpb25zIixDSToidHJ1ZSIsR0lUSFVCX0VOVjoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3NldF9lbnZfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixQSVBYX0hPTUU6Ii9vcHQvcGlweCIsbnBtX25vZGVfZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsSkFWQV9IT01FXzhfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi04LWpkay1hbWQ2NCIsTk9ERV9BVVRIX1RPS0VOOiJYWFhYWC1YWFhYWC1YWFhYWC1YWFhYWCIsU0hMVkw6IjEiLG5wbV9jb25maWdfbm9wcm94eToiIixIT01FOiIvaG9tZS9ydW5uZXIiLFJVTk5FUl9URU1QOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcCIsR0lUSFVCX0VWRU5UX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19naXRodWJfd29ya2Zsb3cvZXZlbnQuanNvbiIsbnBtX3BhY2thZ2VfanNvbjoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9wYWNrYWdlLmpzb24iLEpBVkFfSE9NRV8xMV9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUElQWF9CSU5fRElSOiIvb3B0L3BpcHhfYmluIixHUkFBTFZNXzExX1JPT1Q6Ii91c3IvbG9jYWwvZ3JhYWx2bS9ncmFhbHZtLWNlLWphdmExMS0yMi4xLjAiLEdJVEhVQl9SRVBPU0lUT1JZX09XTkVSOiJuc3NodW50IixHUkFETEVfSE9NRToiL3Vzci9zaGFyZS9ncmFkbGUtNy40LjIiLEhPTUVCUkVXX1BSRUZJWDoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXciLEFORFJPSURfTkRLX0xBVEVTVF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGsvMjQuMC44MjE1ODg4IixHSVRIVUJfUkVURU5USU9OX0RBWVM6IjkwIixQT1dFUlNIRUxMX0RJU1RSSUJVVElPTl9DSEFOTkVMOiJHaXRIdWItQWN0aW9ucy11YnVudHUyMCIsQVpVUkVfRVhURU5TSU9OX0RJUjoiL29wdC9hei9hemNsaWV4dGVuc2lvbnMiLEdJVEhVQl9IRUFEX1JFRjoiIixucG1fY29uZmlnX2xvY2FsX3ByZWZpeDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0dSQVBIUUxfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWwiLENPTE9SOiIwIixOVk1fRElSOiIvaG9tZS9ydW5uZXIvLm52bSIsbnBtX2NvbmZpZ19tZXRyaWNzX3JlZ2lzdHJ5OiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8iLERPVE5FVF9TS0lQX0ZJUlNUX1RJTUVfRVhQRVJJRU5DRToiMSIsSkFWQV9IT01FXzE3X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTctamRrLWFtZDY0IixJbWFnZVZlcnNpb246IjIwMjIwNjA1LjEiLFJVTk5FUl9PUzoiTGludXgiLEdJVEhVQl9BUElfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tIixTV0lGVF9QQVRIOiIvdXNyL3NoYXJlL3N3aWZ0L3Vzci9iaW4iLFJVTk5FUl9VU0VSOiJydW5uZXIiLENIUk9NRVdFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9jaHJvbWVfZHJpdmVyIixKT1VSTkFMX1NUUkVBTToiODoyMTgzNCIsR0lUSFVCX1dPUktGTE9XOiJOb2RlLmpzIFBhY2thZ2UiLF86Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbnBtIixucG1fY29uZmlnX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixHSVRIVUJfUlVOX0lEOiIyNDgzNTA2MDM1IixHT1JPT1RfMV8xNl9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTYuMTUveDY0IixucG1fY29uZmlnX2NhY2hlOiIvaG9tZS9ydW5uZXIvLm5wbSIsR09ST09UXzFfMTdfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE3LjExL3g2NCIsR0lUSFVCX1JFRl9UWVBFOiJicmFuY2giLEJPT1RTVFJBUF9IQVNLRUxMX05PTklOVEVSQUNUSVZFOiIxIixHSVRIVUJfQkFTRV9SRUY6IiIsSW1hZ2VPUzoidWJ1bnR1MjAiLFBFUkZMT0dfTE9DQVRJT05fU0VUVElORzoiUlVOTkVSX1BFUkZMT0ciLEdPUk9PVF8xXzE4X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xOC4zL3g2NCIsR0lUSFVCX0FDVElPTl9SRVBPU0lUT1JZOiIiLG5wbV9jb25maWdfbm9kZV9neXA6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvbm9kZS1neXAvYmluL25vZGUtZ3lwLmpzIixQQVRIOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvbm9kZV9tb2R1bGVzLy5iaW46L25vZGVfbW9kdWxlcy8uYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvQG5wbWNsaS9ydW4tc2NyaXB0L2xpYi9ub2RlLWd5cC1iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvc2JpbjovaG9tZS9ydW5uZXIvLmxvY2FsL2Jpbjovb3B0L3BpcHhfYmluOi9ob21lL3J1bm5lci8uY2FyZ28vYmluOi9ob21lL3J1bm5lci8uY29uZmlnL2NvbXBvc2VyL3ZlbmRvci9iaW46L3Vzci9sb2NhbC8uZ2hjdXAvYmluOi9ob21lL3J1bm5lci8uZG90bmV0L3Rvb2xzOi9zbmFwL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIsQU5UX0hPTUU6Ii91c3Ivc2hhcmUvYW50IixET1RORVRfTVVMVElMRVZFTF9MT09LVVA6IjAiLFJVTk5FUl9UUkFDS0lOR19JRDoiZ2l0aHViXzllMGE1YzdhLTk3OGYtNGZjZS1iZTlmLTE1OTdhNDVkM2Y4ZCIsSU5WT0NBVElPTl9JRDoiODIzMTUwNDBmNmNiNGIxODkxYjg3NTUwNzVkYmU3NDkiLEhPTUVCUkVXX0NFTExBUjoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvQ2VsbGFyIixOUE1fQ09ORklHX1VTRVJDT05GSUc6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wLy5ucG1yYyIsUlVOTkVSX1RPT0xfQ0FDSEU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixOT0RFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLG5wbV9wYWNrYWdlX25hbWU6IkBuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0FDVElPTjoiX19ydW5fMiIsR0lUSFVCX1JVTl9OVU1CRVI6IjI0IixSVU5ORVJfQVJDSDoiWDY0IixBR0VOVF9UT09MU0RJUkVDVE9SWToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLExBTkc6IkMuVVRGLTgiLFZDUEtHX0lOU1RBTExBVElPTl9ST09UOiIvdXNyL2xvY2FsL3NoYXJlL3ZjcGtnIixDT05EQToiL3Vzci9zaGFyZS9taW5pY29uZGEiLFJVTk5FUl9OQU1FOiJIb3N0ZWQgQWdlbnQiLFhER19DT05GSUdfSE9NRToiL2hvbWUvcnVubmVyLy5jb25maWciLEdJVEhVQl9SRUZfTkFNRToibWFpbiIsR0lUSFVCX1JFUE9TSVRPUlk6Im5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixucG1fbGlmZWN5Y2xlX3NjcmlwdDoidml0ZSBidWlsZCIsQU5EUk9JRF9OREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX0FDVElPTl9SRUY6IiIsREVCSUFOX0ZST05URU5EOiJub25pbnRlcmFjdGl2ZSIsR0lUSFVCX0FDVElPTlM6InRydWUiLG5wbV9wYWNrYWdlX3ZlcnNpb246IjAuMS4xMyIsbnBtX2xpZmVjeWNsZV9ldmVudDoiYnVpbGQiLEdJVEhVQl9SRUZfUFJPVEVDVEVEOiJmYWxzZSIsR0lUSFVCX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsQUNDRVBUX0VVTEE6IlkiLEdJVEhVQl9KT0I6InB1Ymxpc2gtbnBtIixSVU5ORVJfUEVSRkxPRzoiL2hvbWUvcnVubmVyL3BlcmZsb2ciLEdJVEhVQl9TSEE6ImY2NTk4ZDE4ODYxYzYwODRhMzAyNDNjOWQ2YTlkMDIwMGUxZjllOTYiLEdJVEhVQl9SVU5fQVRURU1QVDoiMSIsR0lUSFVCX1JFRjoicmVmcy9oZWFkcy9tYWluIixHSVRIVUJfQUNUT1I6Im5zc2h1bnQiLEFORFJPSURfU0RLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixMRUlOX0hPTUU6Ii91c3IvbG9jYWwvbGliL2xlaW4iLG5wbV9jb25maWdfZ2xvYmFsY29uZmlnOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvZXRjL25wbXJjIixucG1fY29uZmlnX2luaXRfbW9kdWxlOiIvaG9tZS9ydW5uZXIvLm5wbS1pbml0LmpzIixHSVRIVUJfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL2FkZF9wYXRoXzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSkFWQV9IT01FOiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsUlVOTkVSX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luIixucG1fZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9iaW4vbnBtLWNsaS5qcyIsSE9NRUJSRVdfQ0xFQU5VUF9QRVJJT0RJQ19GVUxMX0RBWVM6IjM2NTAiLEdJVEhVQl9FVkVOVF9OQU1FOiJwdXNoIixIT01FQlJFV19OT19BVVRPX1VQREFURToiMSIsQU5EUk9JRF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsR0lUSFVCX1NFUlZFUl9VUkw6Imh0dHBzOi8vZ2l0aHViLmNvbSIsR0VDS09XRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvZ2Vja29fZHJpdmVyIixMRUlOX0pBUjoiL3Vzci9sb2NhbC9saWIvbGVpbi9zZWxmLWluc3RhbGxzL2xlaW5pbmdlbi0yLjkuOC1zdGFuZGFsb25lLmphciIsbnBtX2NvbmZpZ19nbG9iYWxfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEhPTUVCUkVXX1JFUE9TSVRPUlk6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0hvbWVicmV3IixucG1fY29tbWFuZDoicnVuLXNjcmlwdCIsU0dYX0FFU01fQUREUjoiMSIsQ0hST01FX0JJTjoiL3Vzci9iaW4vZ29vZ2xlLWNocm9tZSIsU0VMRU5JVU1fSkFSX1BBVEg6Ii91c3Ivc2hhcmUvamF2YS9zZWxlbml1bS1zZXJ2ZXIuamFyIixBTkRST0lEX05ES19IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfU1RFUF9TVU1NQVJZOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc3RlcF9zdW1tYXJ5XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSU5JVF9DV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEVESVRPUjoidmkiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn0uU0NPUEUsY29kZTpvLmNvZGUscmVkaXJlY3RfdXJpOntERVBMT1lNRU5UX0JBU0VQQVRIOiIvb3B0L3J1bm5lciIsRE9UTkVUX05PTE9HTzoiMSIsVVNFUjoicnVubmVyIixucG1fY29uZmlnX2Fsd2F5c19hdXRoOiIiLG5wbV9jb25maWdfdXNlcl9hZ2VudDoibnBtLzguMTEuMCBub2RlL3YxOC4zLjAgbGludXggeDY0IHdvcmtzcGFjZXMvZmFsc2UgY2kvZ2l0aHViLWFjdGlvbnMiLENJOiJ0cnVlIixHSVRIVUJfRU5WOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc2V0X2Vudl81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLFBJUFhfSE9NRToiL29wdC9waXB4IixucG1fbm9kZV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixKQVZBX0hPTUVfOF9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTgtamRrLWFtZDY0IixOT0RFX0FVVEhfVE9LRU46IlhYWFhYLVhYWFhYLVhYWFhYLVhYWFhYIixTSExWTDoiMSIsbnBtX2NvbmZpZ19ub3Byb3h5OiIiLEhPTUU6Ii9ob21lL3J1bm5lciIsUlVOTkVSX1RFTVA6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wIixHSVRIVUJfRVZFTlRfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX2dpdGh1Yl93b3JrZmxvdy9ldmVudC5qc29uIixucG1fcGFja2FnZV9qc29uOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL3BhY2thZ2UuanNvbiIsSkFWQV9IT01FXzExX1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQSVBYX0JJTl9ESVI6Ii9vcHQvcGlweF9iaW4iLEdSQUFMVk1fMTFfUk9PVDoiL3Vzci9sb2NhbC9ncmFhbHZtL2dyYWFsdm0tY2UtamF2YTExLTIyLjEuMCIsR0lUSFVCX1JFUE9TSVRPUllfT1dORVI6Im5zc2h1bnQiLEdSQURMRV9IT01FOiIvdXNyL3NoYXJlL2dyYWRsZS03LjQuMiIsSE9NRUJSRVdfUFJFRklYOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldyIsQU5EUk9JRF9OREtfTEFURVNUX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay8yNC4wLjgyMTU4ODgiLEdJVEhVQl9SRVRFTlRJT05fREFZUzoiOTAiLFBPV0VSU0hFTExfRElTVFJJQlVUSU9OX0NIQU5ORUw6IkdpdEh1Yi1BY3Rpb25zLXVidW50dTIwIixBWlVSRV9FWFRFTlNJT05fRElSOiIvb3B0L2F6L2F6Y2xpZXh0ZW5zaW9ucyIsR0lUSFVCX0hFQURfUkVGOiIiLG5wbV9jb25maWdfbG9jYWxfcHJlZml4OiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfR1JBUEhRTF9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbCIsQ09MT1I6IjAiLE5WTV9ESVI6Ii9ob21lL3J1bm5lci8ubnZtIixucG1fY29uZmlnX21ldHJpY3NfcmVnaXN0cnk6Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyIsRE9UTkVUX1NLSVBfRklSU1RfVElNRV9FWFBFUklFTkNFOiIxIixKQVZBX0hPTUVfMTdfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xNy1qZGstYW1kNjQiLEltYWdlVmVyc2lvbjoiMjAyMjA2MDUuMSIsUlVOTkVSX09TOiJMaW51eCIsR0lUSFVCX0FQSV9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20iLFNXSUZUX1BBVEg6Ii91c3Ivc2hhcmUvc3dpZnQvdXNyL2JpbiIsUlVOTkVSX1VTRVI6InJ1bm5lciIsQ0hST01FV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2Nocm9tZV9kcml2ZXIiLEpPVVJOQUxfU1RSRUFNOiI4OjIxODM0IixHSVRIVUJfV09SS0ZMT1c6Ik5vZGUuanMgUGFja2FnZSIsXzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ucG0iLG5wbV9jb25maWdfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEdJVEhVQl9SVU5fSUQ6IjI0ODM1MDYwMzUiLEdPUk9PVF8xXzE2X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNi4xNS94NjQiLG5wbV9jb25maWdfY2FjaGU6Ii9ob21lL3J1bm5lci8ubnBtIixHT1JPT1RfMV8xN19YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTcuMTEveDY0IixHSVRIVUJfUkVGX1RZUEU6ImJyYW5jaCIsQk9PVFNUUkFQX0hBU0tFTExfTk9OSU5URVJBQ1RJVkU6IjEiLEdJVEhVQl9CQVNFX1JFRjoiIixJbWFnZU9TOiJ1YnVudHUyMCIsUEVSRkxPR19MT0NBVElPTl9TRVRUSU5HOiJSVU5ORVJfUEVSRkxPRyIsR09ST09UXzFfMThfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE4LjMveDY0IixHSVRIVUJfQUNUSU9OX1JFUE9TSVRPUlk6IiIsbnBtX2NvbmZpZ19ub2RlX2d5cDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9ub2RlLWd5cC9iaW4vbm9kZS1neXAuanMiLFBBVEg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ub2RlX21vZHVsZXMvLmJpbjovbm9kZV9tb2R1bGVzLy5iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9AbnBtY2xpL3J1bi1zY3JpcHQvbGliL25vZGUtZ3lwLWJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9zYmluOi9ob21lL3J1bm5lci8ubG9jYWwvYmluOi9vcHQvcGlweF9iaW46L2hvbWUvcnVubmVyLy5jYXJnby9iaW46L2hvbWUvcnVubmVyLy5jb25maWcvY29tcG9zZXIvdmVuZG9yL2JpbjovdXNyL2xvY2FsLy5naGN1cC9iaW46L2hvbWUvcnVubmVyLy5kb3RuZXQvdG9vbHM6L3NuYXAvYmluOi91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2dhbWVzOi91c3IvbG9jYWwvZ2FtZXM6L3NuYXAvYmluIixBTlRfSE9NRToiL3Vzci9zaGFyZS9hbnQiLERPVE5FVF9NVUxUSUxFVkVMX0xPT0tVUDoiMCIsUlVOTkVSX1RSQUNLSU5HX0lEOiJnaXRodWJfOWUwYTVjN2EtOTc4Zi00ZmNlLWJlOWYtMTU5N2E0NWQzZjhkIixJTlZPQ0FUSU9OX0lEOiI4MjMxNTA0MGY2Y2I0YjE4OTFiODc1NTA3NWRiZTc0OSIsSE9NRUJSRVdfQ0VMTEFSOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9DZWxsYXIiLE5QTV9DT05GSUdfVVNFUkNPTkZJRzoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvLm5wbXJjIixSVU5ORVJfVE9PTF9DQUNIRToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLE5PREU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsbnBtX3BhY2thZ2VfbmFtZToiQG5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfQUNUSU9OOiJfX3J1bl8yIixHSVRIVUJfUlVOX05VTUJFUjoiMjQiLFJVTk5FUl9BUkNIOiJYNjQiLEFHRU5UX1RPT0xTRElSRUNUT1JZOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTEFORzoiQy5VVEYtOCIsVkNQS0dfSU5TVEFMTEFUSU9OX1JPT1Q6Ii91c3IvbG9jYWwvc2hhcmUvdmNwa2ciLENPTkRBOiIvdXNyL3NoYXJlL21pbmljb25kYSIsUlVOTkVSX05BTUU6Ikhvc3RlZCBBZ2VudCIsWERHX0NPTkZJR19IT01FOiIvaG9tZS9ydW5uZXIvLmNvbmZpZyIsR0lUSFVCX1JFRl9OQU1FOiJtYWluIixHSVRIVUJfUkVQT1NJVE9SWToibnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLG5wbV9saWZlY3ljbGVfc2NyaXB0OiJ2aXRlIGJ1aWxkIixBTkRST0lEX05ES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfQUNUSU9OX1JFRjoiIixERUJJQU5fRlJPTlRFTkQ6Im5vbmludGVyYWN0aXZlIixHSVRIVUJfQUNUSU9OUzoidHJ1ZSIsbnBtX3BhY2thZ2VfdmVyc2lvbjoiMC4xLjEzIixucG1fbGlmZWN5Y2xlX2V2ZW50OiJidWlsZCIsR0lUSFVCX1JFRl9QUk9URUNURUQ6ImZhbHNlIixHSVRIVUJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixBQ0NFUFRfRVVMQToiWSIsR0lUSFVCX0pPQjoicHVibGlzaC1ucG0iLFJVTk5FUl9QRVJGTE9HOiIvaG9tZS9ydW5uZXIvcGVyZmxvZyIsR0lUSFVCX1NIQToiZjY1OThkMTg4NjFjNjA4NGEzMDI0M2M5ZDZhOWQwMjAwZTFmOWU5NiIsR0lUSFVCX1JVTl9BVFRFTVBUOiIxIixHSVRIVUJfUkVGOiJyZWZzL2hlYWRzL21haW4iLEdJVEhVQl9BQ1RPUjoibnNzaHVudCIsQU5EUk9JRF9TREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLExFSU5fSE9NRToiL3Vzci9sb2NhbC9saWIvbGVpbiIsbnBtX2NvbmZpZ19nbG9iYWxjb25maWc6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9ldGMvbnBtcmMiLG5wbV9jb25maWdfaW5pdF9tb2R1bGU6Ii9ob21lL3J1bm5lci8ubnBtLWluaXQuanMiLEdJVEhVQl9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvYWRkX3BhdGhfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixKQVZBX0hPTUU6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUFdEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixSVU5ORVJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4iLG5wbV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL2Jpbi9ucG0tY2xpLmpzIixIT01FQlJFV19DTEVBTlVQX1BFUklPRElDX0ZVTExfREFZUzoiMzY1MCIsR0lUSFVCX0VWRU5UX05BTUU6InB1c2giLEhPTUVCUkVXX05PX0FVVE9fVVBEQVRFOiIxIixBTkRST0lEX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixHSVRIVUJfU0VSVkVSX1VSTDoiaHR0cHM6Ly9naXRodWIuY29tIixHRUNLT1dFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9nZWNrb19kcml2ZXIiLExFSU5fSkFSOiIvdXNyL2xvY2FsL2xpYi9sZWluL3NlbGYtaW5zdGFsbHMvbGVpbmluZ2VuLTIuOS44LXN0YW5kYWxvbmUuamFyIixucG1fY29uZmlnX2dsb2JhbF9wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsSE9NRUJSRVdfUkVQT1NJVE9SWToiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvSG9tZWJyZXciLG5wbV9jb21tYW5kOiJydW4tc2NyaXB0IixTR1hfQUVTTV9BRERSOiIxIixDSFJPTUVfQklOOiIvdXNyL2Jpbi9nb29nbGUtY2hyb21lIixTRUxFTklVTV9KQVJfUEFUSDoiL3Vzci9zaGFyZS9qYXZhL3NlbGVuaXVtLXNlcnZlci5qYXIiLEFORFJPSURfTkRLX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9TVEVQX1NVTU1BUlk6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zdGVwX3N1bW1hcnlfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixJTklUX0NXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsRURJVE9SOiJ2aSIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifS5SRURJUkVDVF9VUkksZ3JhbnRfdHlwZTpBdC5BVVRIT1JJWkFUSU9OX0NPREUsY29kZV92ZXJpZmllcjpyLmNvZGVfdmVyaWZpZXJ9O3JldHVybiBYKHRoaXMsX3IpLmNhbGwodGhpcyx0KX0pLHVlKHRoaXMsTHIsYXN5bmMoKT0+e2NvbnNvbGUubG9nKCJSZWZyZXNoVG9rZW4iKTtjb25zdCByPVgodGhpcyxCZSkuZ2V0KFgodGhpcyxqZSkpO2lmKHIpe2NvbnN0IG89e2NsaWVudF9pZDp7REVQTE9ZTUVOVF9CQVNFUEFUSDoiL29wdC9ydW5uZXIiLERPVE5FVF9OT0xPR086IjEiLFVTRVI6InJ1bm5lciIsbnBtX2NvbmZpZ19hbHdheXNfYXV0aDoiIixucG1fY29uZmlnX3VzZXJfYWdlbnQ6Im5wbS84LjExLjAgbm9kZS92MTguMy4wIGxpbnV4IHg2NCB3b3Jrc3BhY2VzL2ZhbHNlIGNpL2dpdGh1Yi1hY3Rpb25zIixDSToidHJ1ZSIsR0lUSFVCX0VOVjoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3NldF9lbnZfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixQSVBYX0hPTUU6Ii9vcHQvcGlweCIsbnBtX25vZGVfZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsSkFWQV9IT01FXzhfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi04LWpkay1hbWQ2NCIsTk9ERV9BVVRIX1RPS0VOOiJYWFhYWC1YWFhYWC1YWFhYWC1YWFhYWCIsU0hMVkw6IjEiLG5wbV9jb25maWdfbm9wcm94eToiIixIT01FOiIvaG9tZS9ydW5uZXIiLFJVTk5FUl9URU1QOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcCIsR0lUSFVCX0VWRU5UX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19naXRodWJfd29ya2Zsb3cvZXZlbnQuanNvbiIsbnBtX3BhY2thZ2VfanNvbjoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9wYWNrYWdlLmpzb24iLEpBVkFfSE9NRV8xMV9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUElQWF9CSU5fRElSOiIvb3B0L3BpcHhfYmluIixHUkFBTFZNXzExX1JPT1Q6Ii91c3IvbG9jYWwvZ3JhYWx2bS9ncmFhbHZtLWNlLWphdmExMS0yMi4xLjAiLEdJVEhVQl9SRVBPU0lUT1JZX09XTkVSOiJuc3NodW50IixHUkFETEVfSE9NRToiL3Vzci9zaGFyZS9ncmFkbGUtNy40LjIiLEhPTUVCUkVXX1BSRUZJWDoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXciLEFORFJPSURfTkRLX0xBVEVTVF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGsvMjQuMC44MjE1ODg4IixHSVRIVUJfUkVURU5USU9OX0RBWVM6IjkwIixQT1dFUlNIRUxMX0RJU1RSSUJVVElPTl9DSEFOTkVMOiJHaXRIdWItQWN0aW9ucy11YnVudHUyMCIsQVpVUkVfRVhURU5TSU9OX0RJUjoiL29wdC9hei9hemNsaWV4dGVuc2lvbnMiLEdJVEhVQl9IRUFEX1JFRjoiIixucG1fY29uZmlnX2xvY2FsX3ByZWZpeDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0dSQVBIUUxfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWwiLENPTE9SOiIwIixOVk1fRElSOiIvaG9tZS9ydW5uZXIvLm52bSIsbnBtX2NvbmZpZ19tZXRyaWNzX3JlZ2lzdHJ5OiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8iLERPVE5FVF9TS0lQX0ZJUlNUX1RJTUVfRVhQRVJJRU5DRToiMSIsSkFWQV9IT01FXzE3X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTctamRrLWFtZDY0IixJbWFnZVZlcnNpb246IjIwMjIwNjA1LjEiLFJVTk5FUl9PUzoiTGludXgiLEdJVEhVQl9BUElfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tIixTV0lGVF9QQVRIOiIvdXNyL3NoYXJlL3N3aWZ0L3Vzci9iaW4iLFJVTk5FUl9VU0VSOiJydW5uZXIiLENIUk9NRVdFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9jaHJvbWVfZHJpdmVyIixKT1VSTkFMX1NUUkVBTToiODoyMTgzNCIsR0lUSFVCX1dPUktGTE9XOiJOb2RlLmpzIFBhY2thZ2UiLF86Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbnBtIixucG1fY29uZmlnX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixHSVRIVUJfUlVOX0lEOiIyNDgzNTA2MDM1IixHT1JPT1RfMV8xNl9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTYuMTUveDY0IixucG1fY29uZmlnX2NhY2hlOiIvaG9tZS9ydW5uZXIvLm5wbSIsR09ST09UXzFfMTdfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE3LjExL3g2NCIsR0lUSFVCX1JFRl9UWVBFOiJicmFuY2giLEJPT1RTVFJBUF9IQVNLRUxMX05PTklOVEVSQUNUSVZFOiIxIixHSVRIVUJfQkFTRV9SRUY6IiIsSW1hZ2VPUzoidWJ1bnR1MjAiLFBFUkZMT0dfTE9DQVRJT05fU0VUVElORzoiUlVOTkVSX1BFUkZMT0ciLEdPUk9PVF8xXzE4X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xOC4zL3g2NCIsR0lUSFVCX0FDVElPTl9SRVBPU0lUT1JZOiIiLG5wbV9jb25maWdfbm9kZV9neXA6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvbm9kZS1neXAvYmluL25vZGUtZ3lwLmpzIixQQVRIOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvbm9kZV9tb2R1bGVzLy5iaW46L25vZGVfbW9kdWxlcy8uYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvQG5wbWNsaS9ydW4tc2NyaXB0L2xpYi9ub2RlLWd5cC1iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvc2JpbjovaG9tZS9ydW5uZXIvLmxvY2FsL2Jpbjovb3B0L3BpcHhfYmluOi9ob21lL3J1bm5lci8uY2FyZ28vYmluOi9ob21lL3J1bm5lci8uY29uZmlnL2NvbXBvc2VyL3ZlbmRvci9iaW46L3Vzci9sb2NhbC8uZ2hjdXAvYmluOi9ob21lL3J1bm5lci8uZG90bmV0L3Rvb2xzOi9zbmFwL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIsQU5UX0hPTUU6Ii91c3Ivc2hhcmUvYW50IixET1RORVRfTVVMVElMRVZFTF9MT09LVVA6IjAiLFJVTk5FUl9UUkFDS0lOR19JRDoiZ2l0aHViXzllMGE1YzdhLTk3OGYtNGZjZS1iZTlmLTE1OTdhNDVkM2Y4ZCIsSU5WT0NBVElPTl9JRDoiODIzMTUwNDBmNmNiNGIxODkxYjg3NTUwNzVkYmU3NDkiLEhPTUVCUkVXX0NFTExBUjoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvQ2VsbGFyIixOUE1fQ09ORklHX1VTRVJDT05GSUc6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wLy5ucG1yYyIsUlVOTkVSX1RPT0xfQ0FDSEU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixOT0RFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLG5wbV9wYWNrYWdlX25hbWU6IkBuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0FDVElPTjoiX19ydW5fMiIsR0lUSFVCX1JVTl9OVU1CRVI6IjI0IixSVU5ORVJfQVJDSDoiWDY0IixBR0VOVF9UT09MU0RJUkVDVE9SWToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLExBTkc6IkMuVVRGLTgiLFZDUEtHX0lOU1RBTExBVElPTl9ST09UOiIvdXNyL2xvY2FsL3NoYXJlL3ZjcGtnIixDT05EQToiL3Vzci9zaGFyZS9taW5pY29uZGEiLFJVTk5FUl9OQU1FOiJIb3N0ZWQgQWdlbnQiLFhER19DT05GSUdfSE9NRToiL2hvbWUvcnVubmVyLy5jb25maWciLEdJVEhVQl9SRUZfTkFNRToibWFpbiIsR0lUSFVCX1JFUE9TSVRPUlk6Im5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixucG1fbGlmZWN5Y2xlX3NjcmlwdDoidml0ZSBidWlsZCIsQU5EUk9JRF9OREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX0FDVElPTl9SRUY6IiIsREVCSUFOX0ZST05URU5EOiJub25pbnRlcmFjdGl2ZSIsR0lUSFVCX0FDVElPTlM6InRydWUiLG5wbV9wYWNrYWdlX3ZlcnNpb246IjAuMS4xMyIsbnBtX2xpZmVjeWNsZV9ldmVudDoiYnVpbGQiLEdJVEhVQl9SRUZfUFJPVEVDVEVEOiJmYWxzZSIsR0lUSFVCX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsQUNDRVBUX0VVTEE6IlkiLEdJVEhVQl9KT0I6InB1Ymxpc2gtbnBtIixSVU5ORVJfUEVSRkxPRzoiL2hvbWUvcnVubmVyL3BlcmZsb2ciLEdJVEhVQl9TSEE6ImY2NTk4ZDE4ODYxYzYwODRhMzAyNDNjOWQ2YTlkMDIwMGUxZjllOTYiLEdJVEhVQl9SVU5fQVRURU1QVDoiMSIsR0lUSFVCX1JFRjoicmVmcy9oZWFkcy9tYWluIixHSVRIVUJfQUNUT1I6Im5zc2h1bnQiLEFORFJPSURfU0RLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixMRUlOX0hPTUU6Ii91c3IvbG9jYWwvbGliL2xlaW4iLG5wbV9jb25maWdfZ2xvYmFsY29uZmlnOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvZXRjL25wbXJjIixucG1fY29uZmlnX2luaXRfbW9kdWxlOiIvaG9tZS9ydW5uZXIvLm5wbS1pbml0LmpzIixHSVRIVUJfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL2FkZF9wYXRoXzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSkFWQV9IT01FOiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsUlVOTkVSX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luIixucG1fZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9iaW4vbnBtLWNsaS5qcyIsSE9NRUJSRVdfQ0xFQU5VUF9QRVJJT0RJQ19GVUxMX0RBWVM6IjM2NTAiLEdJVEhVQl9FVkVOVF9OQU1FOiJwdXNoIixIT01FQlJFV19OT19BVVRPX1VQREFURToiMSIsQU5EUk9JRF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsR0lUSFVCX1NFUlZFUl9VUkw6Imh0dHBzOi8vZ2l0aHViLmNvbSIsR0VDS09XRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvZ2Vja29fZHJpdmVyIixMRUlOX0pBUjoiL3Vzci9sb2NhbC9saWIvbGVpbi9zZWxmLWluc3RhbGxzL2xlaW5pbmdlbi0yLjkuOC1zdGFuZGFsb25lLmphciIsbnBtX2NvbmZpZ19nbG9iYWxfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEhPTUVCUkVXX1JFUE9TSVRPUlk6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0hvbWVicmV3IixucG1fY29tbWFuZDoicnVuLXNjcmlwdCIsU0dYX0FFU01fQUREUjoiMSIsQ0hST01FX0JJTjoiL3Vzci9iaW4vZ29vZ2xlLWNocm9tZSIsU0VMRU5JVU1fSkFSX1BBVEg6Ii91c3Ivc2hhcmUvamF2YS9zZWxlbml1bS1zZXJ2ZXIuamFyIixBTkRST0lEX05ES19IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfU1RFUF9TVU1NQVJZOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc3RlcF9zdW1tYXJ5XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSU5JVF9DV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEVESVRPUjoidmkiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn0uQ0xJRU5UX0lELHNjb3BlOntERVBMT1lNRU5UX0JBU0VQQVRIOiIvb3B0L3J1bm5lciIsRE9UTkVUX05PTE9HTzoiMSIsVVNFUjoicnVubmVyIixucG1fY29uZmlnX2Fsd2F5c19hdXRoOiIiLG5wbV9jb25maWdfdXNlcl9hZ2VudDoibnBtLzguMTEuMCBub2RlL3YxOC4zLjAgbGludXggeDY0IHdvcmtzcGFjZXMvZmFsc2UgY2kvZ2l0aHViLWFjdGlvbnMiLENJOiJ0cnVlIixHSVRIVUJfRU5WOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc2V0X2Vudl81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLFBJUFhfSE9NRToiL29wdC9waXB4IixucG1fbm9kZV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixKQVZBX0hPTUVfOF9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTgtamRrLWFtZDY0IixOT0RFX0FVVEhfVE9LRU46IlhYWFhYLVhYWFhYLVhYWFhYLVhYWFhYIixTSExWTDoiMSIsbnBtX2NvbmZpZ19ub3Byb3h5OiIiLEhPTUU6Ii9ob21lL3J1bm5lciIsUlVOTkVSX1RFTVA6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wIixHSVRIVUJfRVZFTlRfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX2dpdGh1Yl93b3JrZmxvdy9ldmVudC5qc29uIixucG1fcGFja2FnZV9qc29uOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL3BhY2thZ2UuanNvbiIsSkFWQV9IT01FXzExX1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQSVBYX0JJTl9ESVI6Ii9vcHQvcGlweF9iaW4iLEdSQUFMVk1fMTFfUk9PVDoiL3Vzci9sb2NhbC9ncmFhbHZtL2dyYWFsdm0tY2UtamF2YTExLTIyLjEuMCIsR0lUSFVCX1JFUE9TSVRPUllfT1dORVI6Im5zc2h1bnQiLEdSQURMRV9IT01FOiIvdXNyL3NoYXJlL2dyYWRsZS03LjQuMiIsSE9NRUJSRVdfUFJFRklYOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldyIsQU5EUk9JRF9OREtfTEFURVNUX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay8yNC4wLjgyMTU4ODgiLEdJVEhVQl9SRVRFTlRJT05fREFZUzoiOTAiLFBPV0VSU0hFTExfRElTVFJJQlVUSU9OX0NIQU5ORUw6IkdpdEh1Yi1BY3Rpb25zLXVidW50dTIwIixBWlVSRV9FWFRFTlNJT05fRElSOiIvb3B0L2F6L2F6Y2xpZXh0ZW5zaW9ucyIsR0lUSFVCX0hFQURfUkVGOiIiLG5wbV9jb25maWdfbG9jYWxfcHJlZml4OiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfR1JBUEhRTF9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbCIsQ09MT1I6IjAiLE5WTV9ESVI6Ii9ob21lL3J1bm5lci8ubnZtIixucG1fY29uZmlnX21ldHJpY3NfcmVnaXN0cnk6Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyIsRE9UTkVUX1NLSVBfRklSU1RfVElNRV9FWFBFUklFTkNFOiIxIixKQVZBX0hPTUVfMTdfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xNy1qZGstYW1kNjQiLEltYWdlVmVyc2lvbjoiMjAyMjA2MDUuMSIsUlVOTkVSX09TOiJMaW51eCIsR0lUSFVCX0FQSV9VUkw6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20iLFNXSUZUX1BBVEg6Ii91c3Ivc2hhcmUvc3dpZnQvdXNyL2JpbiIsUlVOTkVSX1VTRVI6InJ1bm5lciIsQ0hST01FV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2Nocm9tZV9kcml2ZXIiLEpPVVJOQUxfU1RSRUFNOiI4OjIxODM0IixHSVRIVUJfV09SS0ZMT1c6Ik5vZGUuanMgUGFja2FnZSIsXzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ucG0iLG5wbV9jb25maWdfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEdJVEhVQl9SVU5fSUQ6IjI0ODM1MDYwMzUiLEdPUk9PVF8xXzE2X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNi4xNS94NjQiLG5wbV9jb25maWdfY2FjaGU6Ii9ob21lL3J1bm5lci8ubnBtIixHT1JPT1RfMV8xN19YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTcuMTEveDY0IixHSVRIVUJfUkVGX1RZUEU6ImJyYW5jaCIsQk9PVFNUUkFQX0hBU0tFTExfTk9OSU5URVJBQ1RJVkU6IjEiLEdJVEhVQl9CQVNFX1JFRjoiIixJbWFnZU9TOiJ1YnVudHUyMCIsUEVSRkxPR19MT0NBVElPTl9TRVRUSU5HOiJSVU5ORVJfUEVSRkxPRyIsR09ST09UXzFfMThfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE4LjMveDY0IixHSVRIVUJfQUNUSU9OX1JFUE9TSVRPUlk6IiIsbnBtX2NvbmZpZ19ub2RlX2d5cDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9ub2RlLWd5cC9iaW4vbm9kZS1neXAuanMiLFBBVEg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ub2RlX21vZHVsZXMvLmJpbjovbm9kZV9tb2R1bGVzLy5iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL25vZGVfbW9kdWxlcy9AbnBtY2xpL3J1bi1zY3JpcHQvbGliL25vZGUtZ3lwLWJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9zYmluOi9ob21lL3J1bm5lci8ubG9jYWwvYmluOi9vcHQvcGlweF9iaW46L2hvbWUvcnVubmVyLy5jYXJnby9iaW46L2hvbWUvcnVubmVyLy5jb25maWcvY29tcG9zZXIvdmVuZG9yL2JpbjovdXNyL2xvY2FsLy5naGN1cC9iaW46L2hvbWUvcnVubmVyLy5kb3RuZXQvdG9vbHM6L3NuYXAvYmluOi91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2dhbWVzOi91c3IvbG9jYWwvZ2FtZXM6L3NuYXAvYmluIixBTlRfSE9NRToiL3Vzci9zaGFyZS9hbnQiLERPVE5FVF9NVUxUSUxFVkVMX0xPT0tVUDoiMCIsUlVOTkVSX1RSQUNLSU5HX0lEOiJnaXRodWJfOWUwYTVjN2EtOTc4Zi00ZmNlLWJlOWYtMTU5N2E0NWQzZjhkIixJTlZPQ0FUSU9OX0lEOiI4MjMxNTA0MGY2Y2I0YjE4OTFiODc1NTA3NWRiZTc0OSIsSE9NRUJSRVdfQ0VMTEFSOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9DZWxsYXIiLE5QTV9DT05GSUdfVVNFUkNPTkZJRzoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvLm5wbXJjIixSVU5ORVJfVE9PTF9DQUNIRToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLE5PREU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsbnBtX3BhY2thZ2VfbmFtZToiQG5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixHSVRIVUJfQUNUSU9OOiJfX3J1bl8yIixHSVRIVUJfUlVOX05VTUJFUjoiMjQiLFJVTk5FUl9BUkNIOiJYNjQiLEFHRU5UX1RPT0xTRElSRUNUT1JZOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTEFORzoiQy5VVEYtOCIsVkNQS0dfSU5TVEFMTEFUSU9OX1JPT1Q6Ii91c3IvbG9jYWwvc2hhcmUvdmNwa2ciLENPTkRBOiIvdXNyL3NoYXJlL21pbmljb25kYSIsUlVOTkVSX05BTUU6Ikhvc3RlZCBBZ2VudCIsWERHX0NPTkZJR19IT01FOiIvaG9tZS9ydW5uZXIvLmNvbmZpZyIsR0lUSFVCX1JFRl9OQU1FOiJtYWluIixHSVRIVUJfUkVQT1NJVE9SWToibnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLG5wbV9saWZlY3ljbGVfc2NyaXB0OiJ2aXRlIGJ1aWxkIixBTkRST0lEX05ES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfQUNUSU9OX1JFRjoiIixERUJJQU5fRlJPTlRFTkQ6Im5vbmludGVyYWN0aXZlIixHSVRIVUJfQUNUSU9OUzoidHJ1ZSIsbnBtX3BhY2thZ2VfdmVyc2lvbjoiMC4xLjEzIixucG1fbGlmZWN5Y2xlX2V2ZW50OiJidWlsZCIsR0lUSFVCX1JFRl9QUk9URUNURUQ6ImZhbHNlIixHSVRIVUJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixBQ0NFUFRfRVVMQToiWSIsR0lUSFVCX0pPQjoicHVibGlzaC1ucG0iLFJVTk5FUl9QRVJGTE9HOiIvaG9tZS9ydW5uZXIvcGVyZmxvZyIsR0lUSFVCX1NIQToiZjY1OThkMTg4NjFjNjA4NGEzMDI0M2M5ZDZhOWQwMjAwZTFmOWU5NiIsR0lUSFVCX1JVTl9BVFRFTVBUOiIxIixHSVRIVUJfUkVGOiJyZWZzL2hlYWRzL21haW4iLEdJVEhVQl9BQ1RPUjoibnNzaHVudCIsQU5EUk9JRF9TREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLExFSU5fSE9NRToiL3Vzci9sb2NhbC9saWIvbGVpbiIsbnBtX2NvbmZpZ19nbG9iYWxjb25maWc6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9ldGMvbnBtcmMiLG5wbV9jb25maWdfaW5pdF9tb2R1bGU6Ii9ob21lL3J1bm5lci8ubnBtLWluaXQuanMiLEdJVEhVQl9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvYWRkX3BhdGhfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixKQVZBX0hPTUU6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUFdEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixSVU5ORVJfV09SS1NQQUNFOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4iLG5wbV9leGVjcGF0aDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL2Jpbi9ucG0tY2xpLmpzIixIT01FQlJFV19DTEVBTlVQX1BFUklPRElDX0ZVTExfREFZUzoiMzY1MCIsR0lUSFVCX0VWRU5UX05BTUU6InB1c2giLEhPTUVCUkVXX05PX0FVVE9fVVBEQVRFOiIxIixBTkRST0lEX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixHSVRIVUJfU0VSVkVSX1VSTDoiaHR0cHM6Ly9naXRodWIuY29tIixHRUNLT1dFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9nZWNrb19kcml2ZXIiLExFSU5fSkFSOiIvdXNyL2xvY2FsL2xpYi9sZWluL3NlbGYtaW5zdGFsbHMvbGVpbmluZ2VuLTIuOS44LXN0YW5kYWxvbmUuamFyIixucG1fY29uZmlnX2dsb2JhbF9wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsSE9NRUJSRVdfUkVQT1NJVE9SWToiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvSG9tZWJyZXciLG5wbV9jb21tYW5kOiJydW4tc2NyaXB0IixTR1hfQUVTTV9BRERSOiIxIixDSFJPTUVfQklOOiIvdXNyL2Jpbi9nb29nbGUtY2hyb21lIixTRUxFTklVTV9KQVJfUEFUSDoiL3Vzci9zaGFyZS9qYXZhL3NlbGVuaXVtLXNlcnZlci5qYXIiLEFORFJPSURfTkRLX0hPTUU6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9TVEVQX1NVTU1BUlk6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zdGVwX3N1bW1hcnlfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixJTklUX0NXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsRURJVE9SOiJ2aSIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifS5TQ09QRSxyZWZyZXNoX3Rva2VuOnIucmVmcmVzaF90b2tlbixncmFudF90eXBlOkF0LlJFRlJFU0hfVE9LRU59O3JldHVybiBYKHRoaXMsX3IpLmNhbGwodGhpcyxvKX1lbHNlIHJldHVybiExfSksdWUodGhpcyxCcixhc3luYygpPT57Y29uc29sZS5sb2coIkxvZ291dCIpO2NvbnN0IHI9YCR7e0RFUExPWU1FTlRfQkFTRVBBVEg6Ii9vcHQvcnVubmVyIixET1RORVRfTk9MT0dPOiIxIixVU0VSOiJydW5uZXIiLG5wbV9jb25maWdfYWx3YXlzX2F1dGg6IiIsbnBtX2NvbmZpZ191c2VyX2FnZW50OiJucG0vOC4xMS4wIG5vZGUvdjE4LjMuMCBsaW51eCB4NjQgd29ya3NwYWNlcy9mYWxzZSBjaS9naXRodWItYWN0aW9ucyIsQ0k6InRydWUiLEdJVEhVQl9FTlY6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zZXRfZW52XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsUElQWF9IT01FOiIvb3B0L3BpcHgiLG5wbV9ub2RlX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLEpBVkFfSE9NRV84X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tOC1qZGstYW1kNjQiLE5PREVfQVVUSF9UT0tFTjoiWFhYWFgtWFhYWFgtWFhYWFgtWFhYWFgiLFNITFZMOiIxIixucG1fY29uZmlnX25vcHJveHk6IiIsSE9NRToiL2hvbWUvcnVubmVyIixSVU5ORVJfVEVNUDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAiLEdJVEhVQl9FVkVOVF9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fZ2l0aHViX3dvcmtmbG93L2V2ZW50Lmpzb24iLG5wbV9wYWNrYWdlX2pzb246Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vcGFja2FnZS5qc29uIixKQVZBX0hPTUVfMTFfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBJUFhfQklOX0RJUjoiL29wdC9waXB4X2JpbiIsR1JBQUxWTV8xMV9ST09UOiIvdXNyL2xvY2FsL2dyYWFsdm0vZ3JhYWx2bS1jZS1qYXZhMTEtMjIuMS4wIixHSVRIVUJfUkVQT1NJVE9SWV9PV05FUjoibnNzaHVudCIsR1JBRExFX0hPTUU6Ii91c3Ivc2hhcmUvZ3JhZGxlLTcuNC4yIixIT01FQlJFV19QUkVGSVg6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3IixBTkRST0lEX05ES19MQVRFU1RfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLzI0LjAuODIxNTg4OCIsR0lUSFVCX1JFVEVOVElPTl9EQVlTOiI5MCIsUE9XRVJTSEVMTF9ESVNUUklCVVRJT05fQ0hBTk5FTDoiR2l0SHViLUFjdGlvbnMtdWJ1bnR1MjAiLEFaVVJFX0VYVEVOU0lPTl9ESVI6Ii9vcHQvYXovYXpjbGlleHRlbnNpb25zIixHSVRIVUJfSEVBRF9SRUY6IiIsbnBtX2NvbmZpZ19sb2NhbF9wcmVmaXg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9HUkFQSFFMX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsIixDT0xPUjoiMCIsTlZNX0RJUjoiL2hvbWUvcnVubmVyLy5udm0iLG5wbV9jb25maWdfbWV0cmljc19yZWdpc3RyeToiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvIixET1RORVRfU0tJUF9GSVJTVF9USU1FX0VYUEVSSUVOQ0U6IjEiLEpBVkFfSE9NRV8xN19YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTE3LWpkay1hbWQ2NCIsSW1hZ2VWZXJzaW9uOiIyMDIyMDYwNS4xIixSVU5ORVJfT1M6IkxpbnV4IixHSVRIVUJfQVBJX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSIsU1dJRlRfUEFUSDoiL3Vzci9zaGFyZS9zd2lmdC91c3IvYmluIixSVU5ORVJfVVNFUjoicnVubmVyIixDSFJPTUVXRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvY2hyb21lX2RyaXZlciIsSk9VUk5BTF9TVFJFQU06Ijg6MjE4MzQiLEdJVEhVQl9XT1JLRkxPVzoiTm9kZS5qcyBQYWNrYWdlIixfOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25wbSIsbnBtX2NvbmZpZ19wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsR0lUSFVCX1JVTl9JRDoiMjQ4MzUwNjAzNSIsR09ST09UXzFfMTZfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE2LjE1L3g2NCIsbnBtX2NvbmZpZ19jYWNoZToiL2hvbWUvcnVubmVyLy5ucG0iLEdPUk9PVF8xXzE3X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNy4xMS94NjQiLEdJVEhVQl9SRUZfVFlQRToiYnJhbmNoIixCT09UU1RSQVBfSEFTS0VMTF9OT05JTlRFUkFDVElWRToiMSIsR0lUSFVCX0JBU0VfUkVGOiIiLEltYWdlT1M6InVidW50dTIwIixQRVJGTE9HX0xPQ0FUSU9OX1NFVFRJTkc6IlJVTk5FUl9QRVJGTE9HIixHT1JPT1RfMV8xOF9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTguMy94NjQiLEdJVEhVQl9BQ1RJT05fUkVQT1NJVE9SWToiIixucG1fY29uZmlnX25vZGVfZ3lwOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL25vZGUtZ3lwL2Jpbi9ub2RlLWd5cC5qcyIsUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL25vZGVfbW9kdWxlcy8uYmluOi9ub2RlX21vZHVsZXMvLmJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL0BucG1jbGkvcnVuLXNjcmlwdC9saWIvbm9kZS1neXAtYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L3NiaW46L2hvbWUvcnVubmVyLy5sb2NhbC9iaW46L29wdC9waXB4X2JpbjovaG9tZS9ydW5uZXIvLmNhcmdvL2JpbjovaG9tZS9ydW5uZXIvLmNvbmZpZy9jb21wb3Nlci92ZW5kb3IvYmluOi91c3IvbG9jYWwvLmdoY3VwL2JpbjovaG9tZS9ydW5uZXIvLmRvdG5ldC90b29sczovc25hcC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluOi91c3IvZ2FtZXM6L3Vzci9sb2NhbC9nYW1lczovc25hcC9iaW4iLEFOVF9IT01FOiIvdXNyL3NoYXJlL2FudCIsRE9UTkVUX01VTFRJTEVWRUxfTE9PS1VQOiIwIixSVU5ORVJfVFJBQ0tJTkdfSUQ6ImdpdGh1Yl85ZTBhNWM3YS05NzhmLTRmY2UtYmU5Zi0xNTk3YTQ1ZDNmOGQiLElOVk9DQVRJT05fSUQ6IjgyMzE1MDQwZjZjYjRiMTg5MWI4NzU1MDc1ZGJlNzQ5IixIT01FQlJFV19DRUxMQVI6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0NlbGxhciIsTlBNX0NPTkZJR19VU0VSQ09ORklHOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC8ubnBtcmMiLFJVTk5FUl9UT09MX0NBQ0hFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTk9ERToiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixucG1fcGFja2FnZV9uYW1lOiJAbnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9BQ1RJT046Il9fcnVuXzIiLEdJVEhVQl9SVU5fTlVNQkVSOiIyNCIsUlVOTkVSX0FSQ0g6Ilg2NCIsQUdFTlRfVE9PTFNESVJFQ1RPUlk6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixMQU5HOiJDLlVURi04IixWQ1BLR19JTlNUQUxMQVRJT05fUk9PVDoiL3Vzci9sb2NhbC9zaGFyZS92Y3BrZyIsQ09OREE6Ii91c3Ivc2hhcmUvbWluaWNvbmRhIixSVU5ORVJfTkFNRToiSG9zdGVkIEFnZW50IixYREdfQ09ORklHX0hPTUU6Ii9ob21lL3J1bm5lci8uY29uZmlnIixHSVRIVUJfUkVGX05BTUU6Im1haW4iLEdJVEhVQl9SRVBPU0lUT1JZOiJuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsbnBtX2xpZmVjeWNsZV9zY3JpcHQ6InZpdGUgYnVpbGQiLEFORFJPSURfTkRLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9BQ1RJT05fUkVGOiIiLERFQklBTl9GUk9OVEVORDoibm9uaW50ZXJhY3RpdmUiLEdJVEhVQl9BQ1RJT05TOiJ0cnVlIixucG1fcGFja2FnZV92ZXJzaW9uOiIwLjEuMTMiLG5wbV9saWZlY3ljbGVfZXZlbnQ6ImJ1aWxkIixHSVRIVUJfUkVGX1BST1RFQ1RFRDoiZmFsc2UiLEdJVEhVQl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEFDQ0VQVF9FVUxBOiJZIixHSVRIVUJfSk9COiJwdWJsaXNoLW5wbSIsUlVOTkVSX1BFUkZMT0c6Ii9ob21lL3J1bm5lci9wZXJmbG9nIixHSVRIVUJfU0hBOiJmNjU5OGQxODg2MWM2MDg0YTMwMjQzYzlkNmE5ZDAyMDBlMWY5ZTk2IixHSVRIVUJfUlVOX0FUVEVNUFQ6IjEiLEdJVEhVQl9SRUY6InJlZnMvaGVhZHMvbWFpbiIsR0lUSFVCX0FDVE9SOiJuc3NodW50IixBTkRST0lEX1NES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsTEVJTl9IT01FOiIvdXNyL2xvY2FsL2xpYi9sZWluIixucG1fY29uZmlnX2dsb2JhbGNvbmZpZzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2V0Yy9ucG1yYyIsbnBtX2NvbmZpZ19pbml0X21vZHVsZToiL2hvbWUvcnVubmVyLy5ucG0taW5pdC5qcyIsR0lUSFVCX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9hZGRfcGF0aF81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLEpBVkFfSE9NRToiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLFJVTk5FUl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbiIsbnBtX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vYmluL25wbS1jbGkuanMiLEhPTUVCUkVXX0NMRUFOVVBfUEVSSU9ESUNfRlVMTF9EQVlTOiIzNjUwIixHSVRIVUJfRVZFTlRfTkFNRToicHVzaCIsSE9NRUJSRVdfTk9fQVVUT19VUERBVEU6IjEiLEFORFJPSURfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLEdJVEhVQl9TRVJWRVJfVVJMOiJodHRwczovL2dpdGh1Yi5jb20iLEdFQ0tPV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2dlY2tvX2RyaXZlciIsTEVJTl9KQVI6Ii91c3IvbG9jYWwvbGliL2xlaW4vc2VsZi1pbnN0YWxscy9sZWluaW5nZW4tMi45Ljgtc3RhbmRhbG9uZS5qYXIiLG5wbV9jb25maWdfZ2xvYmFsX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixIT01FQlJFV19SRVBPU0lUT1JZOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9Ib21lYnJldyIsbnBtX2NvbW1hbmQ6InJ1bi1zY3JpcHQiLFNHWF9BRVNNX0FERFI6IjEiLENIUk9NRV9CSU46Ii91c3IvYmluL2dvb2dsZS1jaHJvbWUiLFNFTEVOSVVNX0pBUl9QQVRIOiIvdXNyL3NoYXJlL2phdmEvc2VsZW5pdW0tc2VydmVyLmphciIsQU5EUk9JRF9OREtfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX1NURVBfU1VNTUFSWToiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3N0ZXBfc3VtbWFyeV81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLElOSVRfQ1dEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixFRElUT1I6InZpIixOT0RFX0VOVjoicHJvZHVjdGlvbiJ9LkJST0tFUl9FTkRQT0lOVH06JHt7REVQTE9ZTUVOVF9CQVNFUEFUSDoiL29wdC9ydW5uZXIiLERPVE5FVF9OT0xPR086IjEiLFVTRVI6InJ1bm5lciIsbnBtX2NvbmZpZ19hbHdheXNfYXV0aDoiIixucG1fY29uZmlnX3VzZXJfYWdlbnQ6Im5wbS84LjExLjAgbm9kZS92MTguMy4wIGxpbnV4IHg2NCB3b3Jrc3BhY2VzL2ZhbHNlIGNpL2dpdGh1Yi1hY3Rpb25zIixDSToidHJ1ZSIsR0lUSFVCX0VOVjoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3NldF9lbnZfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixQSVBYX0hPTUU6Ii9vcHQvcGlweCIsbnBtX25vZGVfZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsSkFWQV9IT01FXzhfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi04LWpkay1hbWQ2NCIsTk9ERV9BVVRIX1RPS0VOOiJYWFhYWC1YWFhYWC1YWFhYWC1YWFhYWCIsU0hMVkw6IjEiLG5wbV9jb25maWdfbm9wcm94eToiIixIT01FOiIvaG9tZS9ydW5uZXIiLFJVTk5FUl9URU1QOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcCIsR0lUSFVCX0VWRU5UX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19naXRodWJfd29ya2Zsb3cvZXZlbnQuanNvbiIsbnBtX3BhY2thZ2VfanNvbjoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9wYWNrYWdlLmpzb24iLEpBVkFfSE9NRV8xMV9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUElQWF9CSU5fRElSOiIvb3B0L3BpcHhfYmluIixHUkFBTFZNXzExX1JPT1Q6Ii91c3IvbG9jYWwvZ3JhYWx2bS9ncmFhbHZtLWNlLWphdmExMS0yMi4xLjAiLEdJVEhVQl9SRVBPU0lUT1JZX09XTkVSOiJuc3NodW50IixHUkFETEVfSE9NRToiL3Vzci9zaGFyZS9ncmFkbGUtNy40LjIiLEhPTUVCUkVXX1BSRUZJWDoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXciLEFORFJPSURfTkRLX0xBVEVTVF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGsvMjQuMC44MjE1ODg4IixHSVRIVUJfUkVURU5USU9OX0RBWVM6IjkwIixQT1dFUlNIRUxMX0RJU1RSSUJVVElPTl9DSEFOTkVMOiJHaXRIdWItQWN0aW9ucy11YnVudHUyMCIsQVpVUkVfRVhURU5TSU9OX0RJUjoiL29wdC9hei9hemNsaWV4dGVuc2lvbnMiLEdJVEhVQl9IRUFEX1JFRjoiIixucG1fY29uZmlnX2xvY2FsX3ByZWZpeDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0dSQVBIUUxfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWwiLENPTE9SOiIwIixOVk1fRElSOiIvaG9tZS9ydW5uZXIvLm52bSIsbnBtX2NvbmZpZ19tZXRyaWNzX3JlZ2lzdHJ5OiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8iLERPVE5FVF9TS0lQX0ZJUlNUX1RJTUVfRVhQRVJJRU5DRToiMSIsSkFWQV9IT01FXzE3X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTctamRrLWFtZDY0IixJbWFnZVZlcnNpb246IjIwMjIwNjA1LjEiLFJVTk5FUl9PUzoiTGludXgiLEdJVEhVQl9BUElfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tIixTV0lGVF9QQVRIOiIvdXNyL3NoYXJlL3N3aWZ0L3Vzci9iaW4iLFJVTk5FUl9VU0VSOiJydW5uZXIiLENIUk9NRVdFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9jaHJvbWVfZHJpdmVyIixKT1VSTkFMX1NUUkVBTToiODoyMTgzNCIsR0lUSFVCX1dPUktGTE9XOiJOb2RlLmpzIFBhY2thZ2UiLF86Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbnBtIixucG1fY29uZmlnX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixHSVRIVUJfUlVOX0lEOiIyNDgzNTA2MDM1IixHT1JPT1RfMV8xNl9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTYuMTUveDY0IixucG1fY29uZmlnX2NhY2hlOiIvaG9tZS9ydW5uZXIvLm5wbSIsR09ST09UXzFfMTdfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE3LjExL3g2NCIsR0lUSFVCX1JFRl9UWVBFOiJicmFuY2giLEJPT1RTVFJBUF9IQVNLRUxMX05PTklOVEVSQUNUSVZFOiIxIixHSVRIVUJfQkFTRV9SRUY6IiIsSW1hZ2VPUzoidWJ1bnR1MjAiLFBFUkZMT0dfTE9DQVRJT05fU0VUVElORzoiUlVOTkVSX1BFUkZMT0ciLEdPUk9PVF8xXzE4X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xOC4zL3g2NCIsR0lUSFVCX0FDVElPTl9SRVBPU0lUT1JZOiIiLG5wbV9jb25maWdfbm9kZV9neXA6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvbm9kZS1neXAvYmluL25vZGUtZ3lwLmpzIixQQVRIOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvbm9kZV9tb2R1bGVzLy5iaW46L25vZGVfbW9kdWxlcy8uYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvQG5wbWNsaS9ydW4tc2NyaXB0L2xpYi9ub2RlLWd5cC1iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvc2JpbjovaG9tZS9ydW5uZXIvLmxvY2FsL2Jpbjovb3B0L3BpcHhfYmluOi9ob21lL3J1bm5lci8uY2FyZ28vYmluOi9ob21lL3J1bm5lci8uY29uZmlnL2NvbXBvc2VyL3ZlbmRvci9iaW46L3Vzci9sb2NhbC8uZ2hjdXAvYmluOi9ob21lL3J1bm5lci8uZG90bmV0L3Rvb2xzOi9zbmFwL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIsQU5UX0hPTUU6Ii91c3Ivc2hhcmUvYW50IixET1RORVRfTVVMVElMRVZFTF9MT09LVVA6IjAiLFJVTk5FUl9UUkFDS0lOR19JRDoiZ2l0aHViXzllMGE1YzdhLTk3OGYtNGZjZS1iZTlmLTE1OTdhNDVkM2Y4ZCIsSU5WT0NBVElPTl9JRDoiODIzMTUwNDBmNmNiNGIxODkxYjg3NTUwNzVkYmU3NDkiLEhPTUVCUkVXX0NFTExBUjoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvQ2VsbGFyIixOUE1fQ09ORklHX1VTRVJDT05GSUc6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wLy5ucG1yYyIsUlVOTkVSX1RPT0xfQ0FDSEU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixOT0RFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLG5wbV9wYWNrYWdlX25hbWU6IkBuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0FDVElPTjoiX19ydW5fMiIsR0lUSFVCX1JVTl9OVU1CRVI6IjI0IixSVU5ORVJfQVJDSDoiWDY0IixBR0VOVF9UT09MU0RJUkVDVE9SWToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLExBTkc6IkMuVVRGLTgiLFZDUEtHX0lOU1RBTExBVElPTl9ST09UOiIvdXNyL2xvY2FsL3NoYXJlL3ZjcGtnIixDT05EQToiL3Vzci9zaGFyZS9taW5pY29uZGEiLFJVTk5FUl9OQU1FOiJIb3N0ZWQgQWdlbnQiLFhER19DT05GSUdfSE9NRToiL2hvbWUvcnVubmVyLy5jb25maWciLEdJVEhVQl9SRUZfTkFNRToibWFpbiIsR0lUSFVCX1JFUE9TSVRPUlk6Im5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixucG1fbGlmZWN5Y2xlX3NjcmlwdDoidml0ZSBidWlsZCIsQU5EUk9JRF9OREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX0FDVElPTl9SRUY6IiIsREVCSUFOX0ZST05URU5EOiJub25pbnRlcmFjdGl2ZSIsR0lUSFVCX0FDVElPTlM6InRydWUiLG5wbV9wYWNrYWdlX3ZlcnNpb246IjAuMS4xMyIsbnBtX2xpZmVjeWNsZV9ldmVudDoiYnVpbGQiLEdJVEhVQl9SRUZfUFJPVEVDVEVEOiJmYWxzZSIsR0lUSFVCX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsQUNDRVBUX0VVTEE6IlkiLEdJVEhVQl9KT0I6InB1Ymxpc2gtbnBtIixSVU5ORVJfUEVSRkxPRzoiL2hvbWUvcnVubmVyL3BlcmZsb2ciLEdJVEhVQl9TSEE6ImY2NTk4ZDE4ODYxYzYwODRhMzAyNDNjOWQ2YTlkMDIwMGUxZjllOTYiLEdJVEhVQl9SVU5fQVRURU1QVDoiMSIsR0lUSFVCX1JFRjoicmVmcy9oZWFkcy9tYWluIixHSVRIVUJfQUNUT1I6Im5zc2h1bnQiLEFORFJPSURfU0RLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixMRUlOX0hPTUU6Ii91c3IvbG9jYWwvbGliL2xlaW4iLG5wbV9jb25maWdfZ2xvYmFsY29uZmlnOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvZXRjL25wbXJjIixucG1fY29uZmlnX2luaXRfbW9kdWxlOiIvaG9tZS9ydW5uZXIvLm5wbS1pbml0LmpzIixHSVRIVUJfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL2FkZF9wYXRoXzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSkFWQV9IT01FOiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsUlVOTkVSX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luIixucG1fZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9iaW4vbnBtLWNsaS5qcyIsSE9NRUJSRVdfQ0xFQU5VUF9QRVJJT0RJQ19GVUxMX0RBWVM6IjM2NTAiLEdJVEhVQl9FVkVOVF9OQU1FOiJwdXNoIixIT01FQlJFV19OT19BVVRPX1VQREFURToiMSIsQU5EUk9JRF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsR0lUSFVCX1NFUlZFUl9VUkw6Imh0dHBzOi8vZ2l0aHViLmNvbSIsR0VDS09XRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvZ2Vja29fZHJpdmVyIixMRUlOX0pBUjoiL3Vzci9sb2NhbC9saWIvbGVpbi9zZWxmLWluc3RhbGxzL2xlaW5pbmdlbi0yLjkuOC1zdGFuZGFsb25lLmphciIsbnBtX2NvbmZpZ19nbG9iYWxfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEhPTUVCUkVXX1JFUE9TSVRPUlk6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0hvbWVicmV3IixucG1fY29tbWFuZDoicnVuLXNjcmlwdCIsU0dYX0FFU01fQUREUjoiMSIsQ0hST01FX0JJTjoiL3Vzci9iaW4vZ29vZ2xlLWNocm9tZSIsU0VMRU5JVU1fSkFSX1BBVEg6Ii91c3Ivc2hhcmUvamF2YS9zZWxlbml1bS1zZXJ2ZXIuamFyIixBTkRST0lEX05ES19IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfU1RFUF9TVU1NQVJZOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc3RlcF9zdW1tYXJ5XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSU5JVF9DV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEVESVRPUjoidmkiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn0uQlJPS0VSX1BPUlR9JHt7REVQTE9ZTUVOVF9CQVNFUEFUSDoiL29wdC9ydW5uZXIiLERPVE5FVF9OT0xPR086IjEiLFVTRVI6InJ1bm5lciIsbnBtX2NvbmZpZ19hbHdheXNfYXV0aDoiIixucG1fY29uZmlnX3VzZXJfYWdlbnQ6Im5wbS84LjExLjAgbm9kZS92MTguMy4wIGxpbnV4IHg2NCB3b3Jrc3BhY2VzL2ZhbHNlIGNpL2dpdGh1Yi1hY3Rpb25zIixDSToidHJ1ZSIsR0lUSFVCX0VOVjoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3NldF9lbnZfNWM0ZjZmMTgtMTY2NS00NjM4LWI0MjAtYmNkMDJmNjY1ODEwIixQSVBYX0hPTUU6Ii9vcHQvcGlweCIsbnBtX25vZGVfZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbm9kZSIsSkFWQV9IT01FXzhfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi04LWpkay1hbWQ2NCIsTk9ERV9BVVRIX1RPS0VOOiJYWFhYWC1YWFhYWC1YWFhYWC1YWFhYWCIsU0hMVkw6IjEiLG5wbV9jb25maWdfbm9wcm94eToiIixIT01FOiIvaG9tZS9ydW5uZXIiLFJVTk5FUl9URU1QOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcCIsR0lUSFVCX0VWRU5UX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19naXRodWJfd29ya2Zsb3cvZXZlbnQuanNvbiIsbnBtX3BhY2thZ2VfanNvbjoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9wYWNrYWdlLmpzb24iLEpBVkFfSE9NRV8xMV9YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTExLWpkay1hbWQ2NCIsUElQWF9CSU5fRElSOiIvb3B0L3BpcHhfYmluIixHUkFBTFZNXzExX1JPT1Q6Ii91c3IvbG9jYWwvZ3JhYWx2bS9ncmFhbHZtLWNlLWphdmExMS0yMi4xLjAiLEdJVEhVQl9SRVBPU0lUT1JZX09XTkVSOiJuc3NodW50IixHUkFETEVfSE9NRToiL3Vzci9zaGFyZS9ncmFkbGUtNy40LjIiLEhPTUVCUkVXX1BSRUZJWDoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXciLEFORFJPSURfTkRLX0xBVEVTVF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGsvMjQuMC44MjE1ODg4IixHSVRIVUJfUkVURU5USU9OX0RBWVM6IjkwIixQT1dFUlNIRUxMX0RJU1RSSUJVVElPTl9DSEFOTkVMOiJHaXRIdWItQWN0aW9ucy11YnVudHUyMCIsQVpVUkVfRVhURU5TSU9OX0RJUjoiL29wdC9hei9hemNsaWV4dGVuc2lvbnMiLEdJVEhVQl9IRUFEX1JFRjoiIixucG1fY29uZmlnX2xvY2FsX3ByZWZpeDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0dSQVBIUUxfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWwiLENPTE9SOiIwIixOVk1fRElSOiIvaG9tZS9ydW5uZXIvLm52bSIsbnBtX2NvbmZpZ19tZXRyaWNzX3JlZ2lzdHJ5OiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8iLERPVE5FVF9TS0lQX0ZJUlNUX1RJTUVfRVhQRVJJRU5DRToiMSIsSkFWQV9IT01FXzE3X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tMTctamRrLWFtZDY0IixJbWFnZVZlcnNpb246IjIwMjIwNjA1LjEiLFJVTk5FUl9PUzoiTGludXgiLEdJVEhVQl9BUElfVVJMOiJodHRwczovL2FwaS5naXRodWIuY29tIixTV0lGVF9QQVRIOiIvdXNyL3NoYXJlL3N3aWZ0L3Vzci9iaW4iLFJVTk5FUl9VU0VSOiJydW5uZXIiLENIUk9NRVdFQkRSSVZFUjoiL3Vzci9sb2NhbC9zaGFyZS9jaHJvbWVfZHJpdmVyIixKT1VSTkFMX1NUUkVBTToiODoyMTgzNCIsR0lUSFVCX1dPUktGTE9XOiJOb2RlLmpzIFBhY2thZ2UiLF86Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW4vbnBtIixucG1fY29uZmlnX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixHSVRIVUJfUlVOX0lEOiIyNDgzNTA2MDM1IixHT1JPT1RfMV8xNl9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTYuMTUveDY0IixucG1fY29uZmlnX2NhY2hlOiIvaG9tZS9ydW5uZXIvLm5wbSIsR09ST09UXzFfMTdfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE3LjExL3g2NCIsR0lUSFVCX1JFRl9UWVBFOiJicmFuY2giLEJPT1RTVFJBUF9IQVNLRUxMX05PTklOVEVSQUNUSVZFOiIxIixHSVRIVUJfQkFTRV9SRUY6IiIsSW1hZ2VPUzoidWJ1bnR1MjAiLFBFUkZMT0dfTE9DQVRJT05fU0VUVElORzoiUlVOTkVSX1BFUkZMT0ciLEdPUk9PVF8xXzE4X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xOC4zL3g2NCIsR0lUSFVCX0FDVElPTl9SRVBPU0lUT1JZOiIiLG5wbV9jb25maWdfbm9kZV9neXA6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvbm9kZS1neXAvYmluL25vZGUtZ3lwLmpzIixQQVRIOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvbm9kZV9tb2R1bGVzLy5iaW46L25vZGVfbW9kdWxlcy8uYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9ub2RlX21vZHVsZXMvQG5wbWNsaS9ydW4tc2NyaXB0L2xpYi9ub2RlLWd5cC1iaW46L29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2JpbjovaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvc2JpbjovaG9tZS9ydW5uZXIvLmxvY2FsL2Jpbjovb3B0L3BpcHhfYmluOi9ob21lL3J1bm5lci8uY2FyZ28vYmluOi9ob21lL3J1bm5lci8uY29uZmlnL2NvbXBvc2VyL3ZlbmRvci9iaW46L3Vzci9sb2NhbC8uZ2hjdXAvYmluOi9ob21lL3J1bm5lci8uZG90bmV0L3Rvb2xzOi9zbmFwL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIsQU5UX0hPTUU6Ii91c3Ivc2hhcmUvYW50IixET1RORVRfTVVMVElMRVZFTF9MT09LVVA6IjAiLFJVTk5FUl9UUkFDS0lOR19JRDoiZ2l0aHViXzllMGE1YzdhLTk3OGYtNGZjZS1iZTlmLTE1OTdhNDVkM2Y4ZCIsSU5WT0NBVElPTl9JRDoiODIzMTUwNDBmNmNiNGIxODkxYjg3NTUwNzVkYmU3NDkiLEhPTUVCUkVXX0NFTExBUjoiL2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvQ2VsbGFyIixOUE1fQ09ORklHX1VTRVJDT05GSUc6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wLy5ucG1yYyIsUlVOTkVSX1RPT0xfQ0FDSEU6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixOT0RFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLG5wbV9wYWNrYWdlX25hbWU6IkBuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsR0lUSFVCX0FDVElPTjoiX19ydW5fMiIsR0lUSFVCX1JVTl9OVU1CRVI6IjI0IixSVU5ORVJfQVJDSDoiWDY0IixBR0VOVF9UT09MU0RJUkVDVE9SWToiL29wdC9ob3N0ZWR0b29sY2FjaGUiLExBTkc6IkMuVVRGLTgiLFZDUEtHX0lOU1RBTExBVElPTl9ST09UOiIvdXNyL2xvY2FsL3NoYXJlL3ZjcGtnIixDT05EQToiL3Vzci9zaGFyZS9taW5pY29uZGEiLFJVTk5FUl9OQU1FOiJIb3N0ZWQgQWdlbnQiLFhER19DT05GSUdfSE9NRToiL2hvbWUvcnVubmVyLy5jb25maWciLEdJVEhVQl9SRUZfTkFNRToibWFpbiIsR0lUSFVCX1JFUE9TSVRPUlk6Im5zc2h1bnQvc3Rzb2F1dGgycGx1Z2luIixucG1fbGlmZWN5Y2xlX3NjcmlwdDoidml0ZSBidWlsZCIsQU5EUk9JRF9OREtfUk9PVDoiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX0FDVElPTl9SRUY6IiIsREVCSUFOX0ZST05URU5EOiJub25pbnRlcmFjdGl2ZSIsR0lUSFVCX0FDVElPTlM6InRydWUiLG5wbV9wYWNrYWdlX3ZlcnNpb246IjAuMS4xMyIsbnBtX2xpZmVjeWNsZV9ldmVudDoiYnVpbGQiLEdJVEhVQl9SRUZfUFJPVEVDVEVEOiJmYWxzZSIsR0lUSFVCX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsQUNDRVBUX0VVTEE6IlkiLEdJVEhVQl9KT0I6InB1Ymxpc2gtbnBtIixSVU5ORVJfUEVSRkxPRzoiL2hvbWUvcnVubmVyL3BlcmZsb2ciLEdJVEhVQl9TSEE6ImY2NTk4ZDE4ODYxYzYwODRhMzAyNDNjOWQ2YTlkMDIwMGUxZjllOTYiLEdJVEhVQl9SVU5fQVRURU1QVDoiMSIsR0lUSFVCX1JFRjoicmVmcy9oZWFkcy9tYWluIixHSVRIVUJfQUNUT1I6Im5zc2h1bnQiLEFORFJPSURfU0RLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrIixMRUlOX0hPTUU6Ii91c3IvbG9jYWwvbGliL2xlaW4iLG5wbV9jb25maWdfZ2xvYmFsY29uZmlnOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvZXRjL25wbXJjIixucG1fY29uZmlnX2luaXRfbW9kdWxlOiIvaG9tZS9ydW5uZXIvLm5wbS1pbml0LmpzIixHSVRIVUJfUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL2FkZF9wYXRoXzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSkFWQV9IT01FOiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBXRDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbiIsUlVOTkVSX1dPUktTUEFDRToiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luIixucG1fZXhlY3BhdGg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9saWIvbm9kZV9tb2R1bGVzL25wbS9iaW4vbnBtLWNsaS5qcyIsSE9NRUJSRVdfQ0xFQU5VUF9QRVJJT0RJQ19GVUxMX0RBWVM6IjM2NTAiLEdJVEhVQl9FVkVOVF9OQU1FOiJwdXNoIixIT01FQlJFV19OT19BVVRPX1VQREFURToiMSIsQU5EUk9JRF9IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsR0lUSFVCX1NFUlZFUl9VUkw6Imh0dHBzOi8vZ2l0aHViLmNvbSIsR0VDS09XRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvZ2Vja29fZHJpdmVyIixMRUlOX0pBUjoiL3Vzci9sb2NhbC9saWIvbGVpbi9zZWxmLWluc3RhbGxzL2xlaW5pbmdlbi0yLjkuOC1zdGFuZGFsb25lLmphciIsbnBtX2NvbmZpZ19nbG9iYWxfcHJlZml4OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQiLEhPTUVCUkVXX1JFUE9TSVRPUlk6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0hvbWVicmV3IixucG1fY29tbWFuZDoicnVuLXNjcmlwdCIsU0dYX0FFU01fQUREUjoiMSIsQ0hST01FX0JJTjoiL3Vzci9iaW4vZ29vZ2xlLWNocm9tZSIsU0VMRU5JVU1fSkFSX1BBVEg6Ii91c3Ivc2hhcmUvamF2YS9zZWxlbml1bS1zZXJ2ZXIuamFyIixBTkRST0lEX05ES19IT01FOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3Nkay9uZGstYnVuZGxlIixHSVRIVUJfU1RFUF9TVU1NQVJZOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fcnVubmVyX2ZpbGVfY29tbWFuZHMvc3RlcF9zdW1tYXJ5XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsSU5JVF9DV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEVESVRPUjoidmkiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn0uQlJPS0VSX0FQSV9ST09UfS9sb2dvdXRgO2NvbnNvbGUubG9nKHIpO2NvbnN0IHQ9WCh0aGlzLEJlKS5nZXQoWCh0aGlzLGplKSkucmVmcmVzaF90b2tlbjtjb25zb2xlLmxvZyh0KTtjb25zdCBzPUdjKHQpO2NvbnNvbGUubG9nKHMpO2NvbnN0IGk9cy5zdHNfc2Vzc2lvbjtjb25zb2xlLmxvZyhpKSxYKHRoaXMsQmUpLnJlbW92ZShYKHRoaXMsamUpKSxYKHRoaXMseGUpLmNhbGwodGhpcyxudWxsKTt0cnl7Y29uc3QgbD1hd2FpdCAkbyh7bWV0aG9kOiJwb3N0Iix1cmw6cixkYXRhOntzZXNzaW9uSWQ6aX0sd2l0aENyZWRlbnRpYWxzOiEwLHRpbWVvdXQ6cGFyc2VJbnQoe0RFUExPWU1FTlRfQkFTRVBBVEg6Ii9vcHQvcnVubmVyIixET1RORVRfTk9MT0dPOiIxIixVU0VSOiJydW5uZXIiLG5wbV9jb25maWdfYWx3YXlzX2F1dGg6IiIsbnBtX2NvbmZpZ191c2VyX2FnZW50OiJucG0vOC4xMS4wIG5vZGUvdjE4LjMuMCBsaW51eCB4NjQgd29ya3NwYWNlcy9mYWxzZSBjaS9naXRodWItYWN0aW9ucyIsQ0k6InRydWUiLEdJVEhVQl9FTlY6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9zZXRfZW52XzVjNGY2ZjE4LTE2NjUtNDYzOC1iNDIwLWJjZDAyZjY2NTgxMCIsUElQWF9IT01FOiIvb3B0L3BpcHgiLG5wbV9ub2RlX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25vZGUiLEpBVkFfSE9NRV84X1g2NDoiL3Vzci9saWIvanZtL3RlbXVyaW4tOC1qZGstYW1kNjQiLE5PREVfQVVUSF9UT0tFTjoiWFhYWFgtWFhYWFgtWFhYWFgtWFhYWFgiLFNITFZMOiIxIixucG1fY29uZmlnX25vcHJveHk6IiIsSE9NRToiL2hvbWUvcnVubmVyIixSVU5ORVJfVEVNUDoiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAiLEdJVEhVQl9FVkVOVF9QQVRIOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC9fZ2l0aHViX3dvcmtmbG93L2V2ZW50Lmpzb24iLG5wbV9wYWNrYWdlX2pzb246Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4vcGFja2FnZS5qc29uIixKQVZBX0hPTUVfMTFfWDY0OiIvdXNyL2xpYi9qdm0vdGVtdXJpbi0xMS1qZGstYW1kNjQiLFBJUFhfQklOX0RJUjoiL29wdC9waXB4X2JpbiIsR1JBQUxWTV8xMV9ST09UOiIvdXNyL2xvY2FsL2dyYWFsdm0vZ3JhYWx2bS1jZS1qYXZhMTEtMjIuMS4wIixHSVRIVUJfUkVQT1NJVE9SWV9PV05FUjoibnNzaHVudCIsR1JBRExFX0hPTUU6Ii91c3Ivc2hhcmUvZ3JhZGxlLTcuNC4yIixIT01FQlJFV19QUkVGSVg6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3IixBTkRST0lEX05ES19MQVRFU1RfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLzI0LjAuODIxNTg4OCIsR0lUSFVCX1JFVEVOVElPTl9EQVlTOiI5MCIsUE9XRVJTSEVMTF9ESVNUUklCVVRJT05fQ0hBTk5FTDoiR2l0SHViLUFjdGlvbnMtdWJ1bnR1MjAiLEFaVVJFX0VYVEVOU0lPTl9ESVI6Ii9vcHQvYXovYXpjbGlleHRlbnNpb25zIixHSVRIVUJfSEVBRF9SRUY6IiIsbnBtX2NvbmZpZ19sb2NhbF9wcmVmaXg6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9HUkFQSFFMX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsIixDT0xPUjoiMCIsTlZNX0RJUjoiL2hvbWUvcnVubmVyLy5udm0iLG5wbV9jb25maWdfbWV0cmljc19yZWdpc3RyeToiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvIixET1RORVRfU0tJUF9GSVJTVF9USU1FX0VYUEVSSUVOQ0U6IjEiLEpBVkFfSE9NRV8xN19YNjQ6Ii91c3IvbGliL2p2bS90ZW11cmluLTE3LWpkay1hbWQ2NCIsSW1hZ2VWZXJzaW9uOiIyMDIyMDYwNS4xIixSVU5ORVJfT1M6IkxpbnV4IixHSVRIVUJfQVBJX1VSTDoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSIsU1dJRlRfUEFUSDoiL3Vzci9zaGFyZS9zd2lmdC91c3IvYmluIixSVU5ORVJfVVNFUjoicnVubmVyIixDSFJPTUVXRUJEUklWRVI6Ii91c3IvbG9jYWwvc2hhcmUvY2hyb21lX2RyaXZlciIsSk9VUk5BTF9TVFJFQU06Ijg6MjE4MzQiLEdJVEhVQl9XT1JLRkxPVzoiTm9kZS5qcyBQYWNrYWdlIixfOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvYmluL25wbSIsbnBtX2NvbmZpZ19wcmVmaXg6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NCIsR0lUSFVCX1JVTl9JRDoiMjQ4MzUwNjAzNSIsR09ST09UXzFfMTZfWDY0OiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9nby8xLjE2LjE1L3g2NCIsbnBtX2NvbmZpZ19jYWNoZToiL2hvbWUvcnVubmVyLy5ucG0iLEdPUk9PVF8xXzE3X1g2NDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvZ28vMS4xNy4xMS94NjQiLEdJVEhVQl9SRUZfVFlQRToiYnJhbmNoIixCT09UU1RSQVBfSEFTS0VMTF9OT05JTlRFUkFDVElWRToiMSIsR0lUSFVCX0JBU0VfUkVGOiIiLEltYWdlT1M6InVidW50dTIwIixQRVJGTE9HX0xPQ0FUSU9OX1NFVFRJTkc6IlJVTk5FUl9QRVJGTE9HIixHT1JPT1RfMV8xOF9YNjQ6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlL2dvLzEuMTguMy94NjQiLEdJVEhVQl9BQ1RJT05fUkVQT1NJVE9SWToiIixucG1fY29uZmlnX25vZGVfZ3lwOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL25vZGUtZ3lwL2Jpbi9ub2RlLWd5cC5qcyIsUEFUSDoiL2hvbWUvcnVubmVyL3dvcmsvc3Rzb2F1dGgycGx1Z2luL3N0c29hdXRoMnBsdWdpbi9ub2RlX21vZHVsZXMvLmJpbjovaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL3dvcmsvbm9kZV9tb2R1bGVzLy5iaW46L2hvbWUvcnVubmVyL25vZGVfbW9kdWxlcy8uYmluOi9ob21lL25vZGVfbW9kdWxlcy8uYmluOi9ub2RlX21vZHVsZXMvLmJpbjovb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vbm9kZV9tb2R1bGVzL0BucG1jbGkvcnVuLXNjcmlwdC9saWIvbm9kZS1neXAtYmluOi9vcHQvaG9zdGVkdG9vbGNhY2hlL25vZGUvMTguMy4wL3g2NC9iaW46L2hvbWUvbGludXhicmV3Ly5saW51eGJyZXcvYmluOi9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L3NiaW46L2hvbWUvcnVubmVyLy5sb2NhbC9iaW46L29wdC9waXB4X2JpbjovaG9tZS9ydW5uZXIvLmNhcmdvL2JpbjovaG9tZS9ydW5uZXIvLmNvbmZpZy9jb21wb3Nlci92ZW5kb3IvYmluOi91c3IvbG9jYWwvLmdoY3VwL2JpbjovaG9tZS9ydW5uZXIvLmRvdG5ldC90b29sczovc25hcC9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluOi91c3IvZ2FtZXM6L3Vzci9sb2NhbC9nYW1lczovc25hcC9iaW4iLEFOVF9IT01FOiIvdXNyL3NoYXJlL2FudCIsRE9UTkVUX01VTFRJTEVWRUxfTE9PS1VQOiIwIixSVU5ORVJfVFJBQ0tJTkdfSUQ6ImdpdGh1Yl85ZTBhNWM3YS05NzhmLTRmY2UtYmU5Zi0xNTk3YTQ1ZDNmOGQiLElOVk9DQVRJT05fSUQ6IjgyMzE1MDQwZjZjYjRiMTg5MWI4NzU1MDc1ZGJlNzQ5IixIT01FQlJFV19DRUxMQVI6Ii9ob21lL2xpbnV4YnJldy8ubGludXhicmV3L0NlbGxhciIsTlBNX0NPTkZJR19VU0VSQ09ORklHOiIvaG9tZS9ydW5uZXIvd29yay9fdGVtcC8ubnBtcmMiLFJVTk5FUl9UT09MX0NBQ0hFOiIvb3B0L2hvc3RlZHRvb2xjYWNoZSIsTk9ERToiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2Jpbi9ub2RlIixucG1fcGFja2FnZV9uYW1lOiJAbnNzaHVudC9zdHNvYXV0aDJwbHVnaW4iLEdJVEhVQl9BQ1RJT046Il9fcnVuXzIiLEdJVEhVQl9SVU5fTlVNQkVSOiIyNCIsUlVOTkVSX0FSQ0g6Ilg2NCIsQUdFTlRfVE9PTFNESVJFQ1RPUlk6Ii9vcHQvaG9zdGVkdG9vbGNhY2hlIixMQU5HOiJDLlVURi04IixWQ1BLR19JTlNUQUxMQVRJT05fUk9PVDoiL3Vzci9sb2NhbC9zaGFyZS92Y3BrZyIsQ09OREE6Ii91c3Ivc2hhcmUvbWluaWNvbmRhIixSVU5ORVJfTkFNRToiSG9zdGVkIEFnZW50IixYREdfQ09ORklHX0hPTUU6Ii9ob21lL3J1bm5lci8uY29uZmlnIixHSVRIVUJfUkVGX05BTUU6Im1haW4iLEdJVEhVQl9SRVBPU0lUT1JZOiJuc3NodW50L3N0c29hdXRoMnBsdWdpbiIsbnBtX2xpZmVjeWNsZV9zY3JpcHQ6InZpdGUgYnVpbGQiLEFORFJPSURfTkRLX1JPT1Q6Ii91c3IvbG9jYWwvbGliL2FuZHJvaWQvc2RrL25kay1idW5kbGUiLEdJVEhVQl9BQ1RJT05fUkVGOiIiLERFQklBTl9GUk9OVEVORDoibm9uaW50ZXJhY3RpdmUiLEdJVEhVQl9BQ1RJT05TOiJ0cnVlIixucG1fcGFja2FnZV92ZXJzaW9uOiIwLjEuMTMiLG5wbV9saWZlY3ljbGVfZXZlbnQ6ImJ1aWxkIixHSVRIVUJfUkVGX1BST1RFQ1RFRDoiZmFsc2UiLEdJVEhVQl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLEFDQ0VQVF9FVUxBOiJZIixHSVRIVUJfSk9COiJwdWJsaXNoLW5wbSIsUlVOTkVSX1BFUkZMT0c6Ii9ob21lL3J1bm5lci9wZXJmbG9nIixHSVRIVUJfU0hBOiJmNjU5OGQxODg2MWM2MDg0YTMwMjQzYzlkNmE5ZDAyMDBlMWY5ZTk2IixHSVRIVUJfUlVOX0FUVEVNUFQ6IjEiLEdJVEhVQl9SRUY6InJlZnMvaGVhZHMvbWFpbiIsR0lUSFVCX0FDVE9SOiJuc3NodW50IixBTkRST0lEX1NES19ST09UOiIvdXNyL2xvY2FsL2xpYi9hbmRyb2lkL3NkayIsTEVJTl9IT01FOiIvdXNyL2xvY2FsL2xpYi9sZWluIixucG1fY29uZmlnX2dsb2JhbGNvbmZpZzoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0L2V0Yy9ucG1yYyIsbnBtX2NvbmZpZ19pbml0X21vZHVsZToiL2hvbWUvcnVubmVyLy5ucG0taW5pdC5qcyIsR0lUSFVCX1BBVEg6Ii9ob21lL3J1bm5lci93b3JrL190ZW1wL19ydW5uZXJfZmlsZV9jb21tYW5kcy9hZGRfcGF0aF81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLEpBVkFfSE9NRToiL3Vzci9saWIvanZtL3RlbXVyaW4tMTEtamRrLWFtZDY0IixQV0Q6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbi9zdHNvYXV0aDJwbHVnaW4iLFJVTk5FUl9XT1JLU1BBQ0U6Ii9ob21lL3J1bm5lci93b3JrL3N0c29hdXRoMnBsdWdpbiIsbnBtX2V4ZWNwYXRoOiIvb3B0L2hvc3RlZHRvb2xjYWNoZS9ub2RlLzE4LjMuMC94NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vYmluL25wbS1jbGkuanMiLEhPTUVCUkVXX0NMRUFOVVBfUEVSSU9ESUNfRlVMTF9EQVlTOiIzNjUwIixHSVRIVUJfRVZFTlRfTkFNRToicHVzaCIsSE9NRUJSRVdfTk9fQVVUT19VUERBVEU6IjEiLEFORFJPSURfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsiLEdJVEhVQl9TRVJWRVJfVVJMOiJodHRwczovL2dpdGh1Yi5jb20iLEdFQ0tPV0VCRFJJVkVSOiIvdXNyL2xvY2FsL3NoYXJlL2dlY2tvX2RyaXZlciIsTEVJTl9KQVI6Ii91c3IvbG9jYWwvbGliL2xlaW4vc2VsZi1pbnN0YWxscy9sZWluaW5nZW4tMi45Ljgtc3RhbmRhbG9uZS5qYXIiLG5wbV9jb25maWdfZ2xvYmFsX3ByZWZpeDoiL29wdC9ob3N0ZWR0b29sY2FjaGUvbm9kZS8xOC4zLjAveDY0IixIT01FQlJFV19SRVBPU0lUT1JZOiIvaG9tZS9saW51eGJyZXcvLmxpbnV4YnJldy9Ib21lYnJldyIsbnBtX2NvbW1hbmQ6InJ1bi1zY3JpcHQiLFNHWF9BRVNNX0FERFI6IjEiLENIUk9NRV9CSU46Ii91c3IvYmluL2dvb2dsZS1jaHJvbWUiLFNFTEVOSVVNX0pBUl9QQVRIOiIvdXNyL3NoYXJlL2phdmEvc2VsZW5pdW0tc2VydmVyLmphciIsQU5EUk9JRF9OREtfSE9NRToiL3Vzci9sb2NhbC9saWIvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZSIsR0lUSFVCX1NURVBfU1VNTUFSWToiL2hvbWUvcnVubmVyL3dvcmsvX3RlbXAvX3J1bm5lcl9maWxlX2NvbW1hbmRzL3N0ZXBfc3VtbWFyeV81YzRmNmYxOC0xNjY1LTQ2MzgtYjQyMC1iY2QwMmY2NjU4MTAiLElOSVRfQ1dEOiIvaG9tZS9ydW5uZXIvd29yay9zdHNvYXV0aDJwbHVnaW4vc3Rzb2F1dGgycGx1Z2luIixFRElUT1I6InZpIixOT0RFX0VOVjoicHJvZHVjdGlvbiJ9LlRJTUVPVVQpfSk7cmV0dXJuIGwuZGF0YS5zdGF0dXM9PT11ci5PSz8hMDooY29uc29sZS5sb2coIkVycm9yIGR1cmluZyBsb2dvdXQgKHNlcnZlciBzaWRlKSIpLGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGwuZGF0YSkpLCExKX1jYXRjaChsKXtyZXR1cm4gY29uc29sZS5sb2coIkVycm9yIGR1cmluZyBsb2dvdXQgKHNlcnZlciBzaWRlKSIpLGNvbnNvbGUubG9nKGwpLGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGwpKSwhMX19KSx1ZSh0aGlzLEJlLG5ldyBXYyh7Y2xpZW50U3RvcmFnZVR5cGU6QWkuTUVNT1JZX1NUT1JBR0V9KS5HZXRTdG9yYWdlKCkpLHVlKHRoaXMseGUscj0+e2NvbnN0IG89e21lc3NhZ2VJZDotMSxjb21tYW5kOmpuLkFVVEhFTlRJQ0FURV9FVkVOVH07WCh0aGlzLG5uKS5jYWxsKHRoaXMsbyxyKX0pLHVlKHRoaXMsdm4scj0+e2NvbnN0IG89e21lc3NhZ2VJZDotMSxjb21tYW5kOmpuLkVSUk9SfTtYKHRoaXMsbm4pLmNhbGwodGhpcyxvLHIpfSksdWUodGhpcyxGbixuKSx0aGlzLlNldHVwTGlzdGVuZXIoKX19QmU9bmV3IFdlYWtNYXAsSG49bmV3IFdlYWtNYXAsUHI9bmV3IFdlYWtNYXAsTm89bmV3IFdlYWtNYXAsamU9bmV3IFdlYWtNYXAsZm49bmV3IFdlYWtNYXAsdm49bmV3IFdlYWtNYXAseGU9bmV3IFdlYWtNYXAsRm49bmV3IFdlYWtNYXAsZ289bmV3IFdlYWtNYXAsbm49bmV3IFdlYWtNYXAsd3I9bmV3IFdlYWtNYXAsR3I9bmV3IFdlYWtNYXAsQ3I9bmV3IFdlYWtNYXAsX3I9bmV3IFdlYWtNYXAseXI9bmV3IFdlYWtNYXAsTHI9bmV3IFdlYWtNYXAsQnI9bmV3IFdlYWtNYXAsb25tZXNzYWdlPWFzeW5jIGZ1bmN0aW9uKGUpe2NvbnN0IG49ZS5kYXRhO25ldyBZYyhuKX19KSgpOwo=",X9=typeof window!="undefined"&&window.Blob&&new Blob([atob(L9)],{type:"text/javascript;charset=utf-8"});function Um(){const i=X9&&(window.URL||window.webkitURL).createObjectURL(X9);try{return i?new Worker(i,{}):new Worker("data:application/javascript;base64,"+L9,{type:"module"})}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}const ym=BV(`proc:${0}:stsoauth2manager.ts`);class G9{constructor(l,b){oi(this,Wb,void 0);oi(this,kl,void 0);oi(this,Rl,void 0);oi(this,$b,void 0);oi(this,qb,void 0);oi(this,xl,void 0);oi(this,iV,void 0);oi(this,ob,void 0);oi(this,fl,void 0);oi(this,lV,void 0);oi(this,Kl,void 0);oi(this,Rb,void 0);oi(this,Ll,void 0);oi(this,Pl,void 0);oi(this,Xl,void 0);oi(this,Gl,void 0);oi(this,Lb,void 0);oi(this,ml,void 0);oi(this,Xb,void 0);oi(this,Gb,void 0);oi(this,hb,void 0);oi(this,vb,void 0);bi(this,Wb,null),bi(this,kl,null),bi(this,Rl,null),bi(this,$b,new dm),bi(this,qb,new Zm),bi(this,xl,"authorize_options.stsmda.com.au"),bi(this,iV,"session.stsmda.com.au"),bi(this,ob,null),bi(this,fl,null),bi(this,lV,{}),bi(this,Rb,0),bi(this,Ll,{}),bi(this,Pl,1e3),bi(this,Xl,null),bi(this,Gl,null),bi(this,Lb,d=>{const e=d.data;if(e.messageId===-1)switch(e.command){case Zl.AUTHENTICATE_EVENT:P(this,Gb).call(this,e.payload);break;case Zl.ERROR:P(this,Xb).call(this,e.payload);break;default:throw new Error(`ProcessMessageResponse command [${e.command}] not valid.`)}else{const u=P(this,Ll)[e.messageId];if(u)u(e);else throw new Error(`Message: [${e.messageId}] does not exists in callBacks.`)}}),bi(this,ml,d=>(d.messageId=f9(this,Rb)._++,new Promise((e,u)=>{const o=setTimeout(()=>{delete P(this,Ll)[d.messageId],u(`Message: [${d.messageId}] timeout error after: [${P(this,Pl)}] ms.`)},P(this,Pl));P(this,Ll)[d.messageId]=I=>{clearTimeout(o),delete P(this,Ll)[d.messageId],e(I)},P(this,Kl).postMessage(d)}))),bi(this,Xb,d=>{P(this,Rl).commit("AuthorizeError",{message:d}),setTimeout(()=>{P(this,kl).replace("/error")},0)}),bi(this,Gb,d=>{P(this,fl).authenticateEvent&&P(this,fl).authenticateEvent(d),P(this,Rl).commit("stsOAuth2SDK/SessionData",d)}),bi(this,hb,(d,e)=>{e.beforeEach(async(u,o)=>{const I=d.config.globalProperties.$store,s=d.config.globalProperties.$sts;if(ym(`beforeEach: from: [${o.path}], to: [${u.path}]`),I.getters["stsOAuth2SDK/LoggedIn"]===!1){if(console.log("Not logged in"),u.path.localeCompare("/authorize")===0)return console.log("to = /authorize"),!0;if(u.path.localeCompare("/consent")===0&&typeof I.getters.Session.sessionId!="undefined"||u.path.localeCompare("/logout")===0||u.path.localeCompare("/error")===0||u.path.localeCompare("/logout")===0)return!0;const W=u.query;if(W[kb.OAuth2ParameterType.CODE]||W[kb.OAuth2ParameterType.ERROR])return console.log(`#SetupRout:str = [${W}]`),await s.om.HandleRedirect(W)?(setTimeout(()=>{window.history.replaceState({},document.title,window.location.origin+"/")},0),!0):(P(this,kl).replace("/error"),!1);const y=await s.om.RestoreSession();return console.log(`#SetupRoute:sessionRestored [${y}]`),y!==!0?(console.log("Session not restored - Need to Authorize"),s.om.Authorize(),!1):"/"}else return u.path.localeCompare("/consent")===0?"/":u.path.localeCompare("/authorize")===0?(e.replace({path:"/"}),!1):u.path.localeCompare("/logout")===0?(e.replace({path:"/"}),!1):!0})}),bi(this,vb,()=>{P(this,Rl).registerModule("stsOAuth2SDK",{namespaced:!0,state(){return{sessionData:{}}},getters:{SessionData(d){return d.sessionData},LoggedIn(d){return!(typeof d.sessionData=="undefined"||d.sessionData===null)},UserDetails(d){if(d.sessionData){const e=d.sessionData;return vm(e)}else return null}},mutations:{SessionData(d,e){d.sessionData=e,console.log(`commit [sessionData]: ${JSON.stringify(e)}`)}}},{preserveState:!0})}),this.RestoreSession=async()=>{try{return(await P(this,ml).call(this,{command:Zl.RESTORE_SESSION})).payload}catch(d){return console.log(`RestoreSession Error: ${d}`),!1}},this.Authorize=async()=>{try{const d=await P(this,ml).call(this,{command:Zl.AUTHORIZE});P(this,Gl).set(P(this,xl),d.payload.authorizeOptions);const e=d.payload.url;window.location.replace(e)}catch(d){console.log(`Authorize Error: ${d}`)}},this.HandleRedirect=async d=>{try{let e=null;if(d[kb.OAuth2ParameterType.CODE]){const u=P(this,Gl).get(P(this,xl));P(this,Gl).remove(P(this,xl)),e=await P(this,ml).call(this,{command:Zl.HANDLE_REDIRECT,payload:{queryVars:d,authorizeOptions:u}})}else e=await P(this,ml).call(this,{command:Zl.HANDLE_REDIRECT,payload:d});return e.payload}catch(e){return console.log(`HandleRedirect Error: ${e}`),!1}},this.Logout=async()=>{try{return(await P(this,ml).call(this,{command:Zl.LOGOUT})).payload}catch(d){return console.log(`Logout Error: ${d}`),!1}},bi(this,fl,b),bi(this,Wb,l.config.globalProperties.$sts.storage),bi(this,Rl,l.config.globalProperties.$store),bi(this,ob,l.config.globalProperties.$sts.aic.PrimaryPublishInstrumentController),bi(this,kl,l.config.globalProperties.$router),bi(this,Gl,new Gm({clientStorageType:o9.SESSION_STORAGE}).GetStorage()),bi(this,Xl,new Um),P(this,Xl).onmessage=d=>{console.log(`this.#worker.onmessage = [${d}]`)},P(this,Xl).onerror=function(d){console.log(`this.#worker.onerror = [${d}]`)};const{port1:V,port2:c}=new MessageChannel;bi(this,Kl,V),P(this,Xl).postMessage(c,[c]),P(this,Kl).onmessage=d=>{P(this,Lb).call(this,d)},P(this,vb).call(this),P(this,hb).call(this,l,b.router)}}Wb=new WeakMap,kl=new WeakMap,Rl=new WeakMap,$b=new WeakMap,qb=new WeakMap,xl=new WeakMap,iV=new WeakMap,ob=new WeakMap,fl=new WeakMap,lV=new WeakMap,Kl=new WeakMap,Rb=new WeakMap,Ll=new WeakMap,Pl=new WeakMap,Xl=new WeakMap,Gl=new WeakMap,Lb=new WeakMap,ml=new WeakMap,Xb=new WeakMap,Gb=new WeakMap,hb=new WeakMap,vb=new WeakMap;const Sm={install:(i,l)=>{const b=new G9(i,l);i.config.globalProperties.$sts.om=b}};K.AuthorizeOptionsResponseMode=u9,K.AuthorizeOptionsResponseType=n9,K.IOauth2ListenerCommand=Zl,K.OAuthGrantTypes=I9,K.STSOAuth2Manager=G9,K.STSOAuth2ManagerPlugin=Sm,Object.defineProperties(K,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});