var _t=Object.create;var me=Object.defineProperty;var Rt=Object.getOwnPropertyDescriptor;var kt=Object.getOwnPropertyNames;var Pt=Object.getPrototypeOf,St=Object.prototype.hasOwnProperty;var It=(t,e,r)=>e in t?me(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Ft=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var Ke=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Tt=(t,e)=>{for(var r in e)me(t,r,{get:e[r],enumerable:!0})},Mt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of kt(e))!St.call(t,i)&&i!==r&&me(t,i,{get:()=>e[i],enumerable:!(n=Rt(e,i))||n.enumerable});return t};var Ie=(t,e,r)=>(r=t!=null?_t(Pt(t)):{},Mt(e||!t||!t.__esModule?me(r,"default",{value:t,enumerable:!0}):r,t));var l=(t,e,r)=>It(t,typeof e!="symbol"?e+"":e,r);var Te=Ke((wr,Fe)=>{"use strict";var q=typeof Reflect=="object"?Reflect:null,qe=q&&typeof q.apply=="function"?q.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},ye;q&&typeof q.ownKeys=="function"?ye=q.ownKeys:Object.getOwnPropertySymbols?ye=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:ye=function(e){return Object.getOwnPropertyNames(e)};function Ut(t){console&&console.warn&&console.warn(t)}var Ve=Number.isNaN||function(e){return e!==e};function v(){v.init.call(this)}Fe.exports=v;Fe.exports.once=Jt;v.EventEmitter=v;v.prototype._events=void 0;v.prototype._eventsCount=0;v.prototype._maxListeners=void 0;var $e=10;function ve(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(v,"defaultMaxListeners",{enumerable:!0,get:function(){return $e},set:function(t){if(typeof t!="number"||t<0||Ve(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");$e=t}});v.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};v.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Ve(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function Qe(t){return t._maxListeners===void 0?v.defaultMaxListeners:t._maxListeners}v.prototype.getMaxListeners=function(){return Qe(this)};v.prototype.emit=function(e){for(var r=[],n=1;n0&&(s=r[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var u=o[e];if(u===void 0)return!1;if(typeof u=="function")qe(u,this,r);else for(var f=u.length,h=tt(u,f),n=0;n0&&s.length>i&&!s.warned){s.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=t,a.type=e,a.count=s.length,Ut(a)}return t}v.prototype.addListener=function(e,r){return Xe(this,e,r,!1)};v.prototype.on=v.prototype.addListener;v.prototype.prependListener=function(e,r){return Xe(this,e,r,!0)};function Bt(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Ze(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},i=Bt.bind(n);return i.listener=r,n.wrapFn=i,i}v.prototype.once=function(e,r){return ve(r),this.on(e,Ze(this,e,r)),this};v.prototype.prependOnceListener=function(e,r){return ve(r),this.prependListener(e,Ze(this,e,r)),this};v.prototype.removeListener=function(e,r){var n,i,o,s,a;if(ve(r),i=this._events,i===void 0)return this;if(n=i[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(o=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){a=n[s].listener,o=s;break}if(o<0)return this;o===0?n.shift():Nt(n,o),n.length===1&&(i[e]=n[0]),i.removeListener!==void 0&&this.emit("removeListener",e,a||r)}return this};v.prototype.off=v.prototype.removeListener;v.prototype.removeAllListeners=function(e){var r,n,i;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var o=Object.keys(n),s;for(i=0;i=0;i--)this.removeListener(e,r[i]);return this};function Ye(t,e,r){var n=t._events;if(n===void 0)return[];var i=n[e];return i===void 0?[]:typeof i=="function"?r?[i.listener||i]:[i]:r?jt(i):tt(i,i.length)}v.prototype.listeners=function(e){return Ye(this,e,!0)};v.prototype.rawListeners=function(e){return Ye(this,e,!1)};v.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):et.call(t,e)};v.prototype.listenerCount=et;function et(t){var e=this._events;if(e!==void 0){var r=e[t];if(typeof r=="function")return 1;if(r!==void 0)return r.length}return 0}v.prototype.eventNames=function(){return this._eventsCount>0?ye(this._events):[]};function tt(t,e){for(var r=new Array(e),n=0;n{"use strict";var c={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(t){this.toString=function(){return"CORRUPT: "+this.message},this.message=t},invalid:function(t){this.toString=function(){return"INVALID: "+this.message},this.message=t},bug:function(t){this.toString=function(){return"BUG: "+this.message},this.message=t},notReady:function(t){this.toString=function(){return"NOT READY: "+this.message},this.message=t}}};c.cipher.aes=function(t){this.w[0][0][0]||this.C();var e,r,n,i,o=this.w[0][4],s=this.w[1];e=t.length;var a=1;if(e!==4&&e!==6&&e!==8)throw new c.exception.invalid("invalid aes key size");for(this.b=[n=t.slice(0),i=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=o[r>>>24]<<24^o[r>>16&255]<<16^o[r>>8&255]<<8^o[r&255],t%e===0&&(r=r<<8^r>>>24^a<<24,a=a<<1^283*(a>>7))),n[t]=n[t-e]^r;for(e=0;t;e++,t--)r=n[e&3?t:t-4],i[e]=4>=t||4>e?r:s[0][o[r>>>24]]^s[1][o[r>>16&255]]^s[2][o[r>>8&255]]^s[3][o[r&255]]};c.cipher.aes.prototype={encrypt:function(t){return lt(this,t,0)},decrypt:function(t){return lt(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],i,o,s,a=[],u=[],f,h,p,d;for(i=0;256>i;i++)u[(a[i]=i<<1^283*(i>>7))^i]=i;for(o=s=0;!r[o];o^=f||1,s=u[s]||1)for(p=s^s<<1^s<<2^s<<3^s<<4,p=p>>8^p&255^99,r[o]=p,n[p]=o,h=a[i=a[f=a[o]]],d=16843009*h^65537*i^257*f^16843008*o,h=257*a[p]^16843008*p,i=0;4>i;i++)t[i][o]=h=h<<24^h>>>8,e[i][p]=d=d<<24^d>>>8;for(i=0;5>i;i++)t[i]=t[i].slice(0),e[i]=e[i].slice(0)}};function lt(t,e,r){if(e.length!==4)throw new c.exception.invalid("invalid aes block size");var n=t.b[r],i=e[0]^n[0],o=e[r?3:1]^n[1],s=e[2]^n[2];e=e[r?1:3]^n[3];var a,u,f,h=n.length/4-2,p,d=4,m=[0,0,0,0];a=t.w[r],t=a[0];var E=a[1],R=a[2],S=a[3],J=a[4];for(p=0;p>>24]^E[o>>16&255]^R[s>>8&255]^S[e&255]^n[d],u=t[o>>>24]^E[s>>16&255]^R[e>>8&255]^S[i&255]^n[d+1],f=t[s>>>24]^E[e>>16&255]^R[i>>8&255]^S[o&255]^n[d+2],e=t[e>>>24]^E[i>>16&255]^R[o>>8&255]^S[s&255]^n[d+3],d+=4,i=a,o=u,s=f;for(p=0;4>p;p++)m[r?3&-p:p]=J[i>>>24]<<24^J[o>>16&255]<<16^J[s>>8&255]<<8^J[e&255]^n[d++],a=i,i=o,o=s,s=e,e=a;return m}c.bitArray={bitSlice:function(t,e,r){return t=c.bitArray.Y(t.slice(e/32),32-(e&31)).slice(1),r===void 0?t:c.bitArray.clamp(t,r-e)},extract:function(t,e,r){var n=Math.floor(-e-r&31);return((e+r-1^e)&-32?t[e/32|0]<<32-n^t[e/32+1|0]>>>n:t[e/32|0]>>>n)&(1<>e-1,1)),t},partial:function(t,e,r){return t===32?e:(r?e|0:e<<32-t)+1099511627776*t},getPartial:function(t){return Math.round(t/1099511627776)||32},equal:function(t,e){if(c.bitArray.bitLength(t)!==c.bitArray.bitLength(e))return!1;var r=0,n;for(n=0;n>>e),r=t[i]<<32-e;return i=t.length?t[t.length-1]:0,t=c.bitArray.getPartial(i),n.push(c.bitArray.partial(e+t&31,32>>24|r>>>8&65280|(r&65280)<<8|r<<24;return t}};c.codec.utf8String={fromBits:function(t){var e="",r=c.bitArray.bitLength(t),n,i;for(n=0;n>>8>>>8>>>8),i<<=8;return decodeURIComponent(escape(e))},toBits:function(t){t=unescape(encodeURIComponent(t));var e=[],r,n=0;for(r=0;r>>i)>>>26),6>i?(s=t[r]<<6-i,i+=26,r++):(s<<=6,i-=6);for(;n.length&3&&!e;)n+="=";return n},toBits:function(t,e){t=t.replace(/\s|=/g,"");var r=[],n,i=0,o=c.codec.base64.S,s=0,a;for(e&&(o=o.substr(0,62)+"-_"),n=0;na)throw new c.exception.invalid("this isn't base64!");26>>i),s=a<<32-i):(i+=6,s^=a<<32-i)}return i&56&&r.push(c.bitArray.partial(i&56,s,1)),r}};c.codec.base64url={fromBits:function(t){return c.codec.base64.fromBits(t,1,1)},toBits:function(t){return c.codec.base64.toBits(t,1)}};c.hash.sha256=function(t){this.b[0]||this.C(),t?(this.g=t.g.slice(0),this.f=t.f.slice(0),this.c=t.c):this.reset()};c.hash.sha256.hash=function(t){return new c.hash.sha256().update(t).finalize()};c.hash.sha256.prototype={blockSize:512,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(t){typeof t=="string"&&(t=c.codec.utf8String.toBits(t));var e,r=this.f=c.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+c.bitArray.bitLength(t),9007199254740991e;r++){for(i=!0,n=2;n*n<=r;n++)if(r%n===0){i=!1;break}i&&(8>e&&(this.o[e]=t(Math.pow(r,.5))),this.b[e]=t(Math.pow(r,1/3)),e++)}},l:function(t){var e,r,n,i=this.g,o=this.b,s=i[0],a=i[1],u=i[2],f=i[3],h=i[4],p=i[5],d=i[6],m=i[7];for(e=0;64>e;e++)16>e?r=t[e]:(r=t[e+1&15],n=t[e+14&15],r=t[e&15]=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(n>>>17^n>>>19^n>>>10^n<<15^n<<13)+t[e&15]+t[e+9&15]|0),r=r+m+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(d^h&(p^d))+o[e],m=d,d=p,p=h,h=f+r|0,f=u,u=a,a=s,s=r+(a&u^f&(a^u))+(a>>>2^a>>>13^a>>>22^a<<30^a<<19^a<<10)|0;i[0]=i[0]+s|0,i[1]=i[1]+a|0,i[2]=i[2]+u|0,i[3]=i[3]+f|0,i[4]=i[4]+h|0,i[5]=i[5]+p|0,i[6]=i[6]+d|0,i[7]=i[7]+m|0}};c.hash.sha512=function(t){this.b[0]||this.C(),t?(this.g=t.g.slice(0),this.f=t.f.slice(0),this.c=t.c):this.reset()};c.hash.sha512.hash=function(t){return new c.hash.sha512().update(t).finalize()};c.hash.sha512.prototype={blockSize:1024,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(t){typeof t=="string"&&(t=c.codec.utf8String.toBits(t));var e,r=this.f=c.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+c.bitArray.bitLength(t),9007199254740991r;n++){for(o=!0,i=2;i*i<=n;i++)if(n%i===0){o=!1;break}o&&(8>r&&(this.o[2*r]=t(Math.pow(n,.5)),this.o[2*r+1]=e(Math.pow(n,.5))<<24|this.ia[r]),this.b[2*r]=t(Math.pow(n,1/3)),this.b[2*r+1]=e(Math.pow(n,1/3))<<24|this.ka[r],r++)}},l:function(t){var e,r,n=this.g,i=this.b,o=n[0],s=n[1],a=n[2],u=n[3],f=n[4],h=n[5],p=n[6],d=n[7],m=n[8],E=n[9],R=n[10],S=n[11],J=n[12],he=n[13],We=n[14],le=n[15],D;if(typeof Uint32Array<"u"){D=Array(160);for(var b=0;32>b;b++)D[b]=t[b]}else D=t;var b=o,C=s,Y=a,G=u,ee=f,K=h,Re=p,te=d,I=m,_=E,pe=R,re=S,de=J,ne=he,ke=We,ie=le;for(t=0;80>t;t++){if(16>t)e=D[2*t],r=D[2*t+1];else{r=D[2*(t-15)];var w=D[2*(t-15)+1];e=(w<<31|r>>>1)^(w<<24|r>>>8)^r>>>7;var F=(r<<31|w>>>1)^(r<<24|w>>>8)^(r<<25|w>>>7);r=D[2*(t-2)];var M=D[2*(t-2)+1],w=(M<<13|r>>>19)^(r<<3|M>>>29)^r>>>6,M=(r<<13|M>>>19)^(M<<3|r>>>29)^(r<<26|M>>>6),Pe=D[2*(t-7)],Se=D[2*(t-16)],oe=D[2*(t-16)+1];r=F+D[2*(t-7)+1],e=e+Pe+(r>>>0>>0?1:0),r+=M,e+=w+(r>>>0>>0?1:0),r+=oe,e+=Se+(r>>>0>>0?1:0)}D[2*t]=e|=0,D[2*t+1]=r|=0;var Pe=I&pe^~I&de,ze=_&re^~_&ne,M=b&Y^b&ee^Y&ee,Ot=C&G^C&K^G&K,Se=(C<<4|b>>>28)^(b<<30|C>>>2)^(b<<25|C>>>7),oe=(b<<4|C>>>28)^(C<<30|b>>>2)^(C<<25|b>>>7),Ct=i[2*t],Ge=i[2*t+1],w=ie+((I<<18|_>>>14)^(I<<14|_>>>18)^(_<<23|I>>>9)),F=ke+((_<<18|I>>>14)^(_<<14|I>>>18)^(I<<23|_>>>9))+(w>>>0>>0?1:0),w=w+ze,F=F+(Pe+(w>>>0>>0?1:0)),w=w+Ge,F=F+(Ct+(w>>>0>>0?1:0)),w=w+r|0,F=F+(e+(w>>>0>>0?1:0));r=oe+Ot,e=Se+M+(r>>>0>>0?1:0),ke=de,ie=ne,de=pe,ne=re,pe=I,re=_,_=te+w|0,I=Re+F+(_>>>0>>0?1:0)|0,Re=ee,te=K,ee=Y,K=G,Y=b,G=C,C=w+r|0,b=F+e+(C>>>0>>0?1:0)|0}s=n[1]=s+C|0,n[0]=o+b+(s>>>0>>0?1:0)|0,u=n[3]=u+G|0,n[2]=a+Y+(u>>>0>>0?1:0)|0,h=n[5]=h+K|0,n[4]=f+ee+(h>>>0>>0?1:0)|0,d=n[7]=d+te|0,n[6]=p+Re+(d>>>0>>0?1:0)|0,E=n[9]=E+_|0,n[8]=m+I+(E>>>0<_>>>0?1:0)|0,S=n[11]=S+re|0,n[10]=R+pe+(S>>>0>>0?1:0)|0,he=n[13]=he+ne|0,n[12]=J+de+(he>>>0>>0?1:0)|0,le=n[15]=le+ie|0,n[14]=We+ke+(le>>>0>>0?1:0)|0}};c.mode.ccm={name:"ccm",F:[],listenProgress:function(t){c.mode.ccm.F.push(t)},unListenProgress:function(t){t=c.mode.ccm.F.indexOf(t),-1u)throw new c.exception.invalid("ccm: iv must be at least 7 bytes");for(o=2;4>o&&f>>>8*o;o++);return o<15-u&&(o=15-u),r=a.clamp(r,8*(15-o)),e=c.mode.ccm.U(t,e,r,n,i,o),s=c.mode.ccm.V(t,s,r,e,i,o),a.concat(s.data,s.tag)},decrypt:function(t,e,r,n,i){i=i||64,n=n||[];var o=c.bitArray,s=o.bitLength(r)/8,f=o.bitLength(e),a=o.clamp(e,f-i),u=o.bitSlice(e,f-i),f=(f-i)/8;if(7>s)throw new c.exception.invalid("ccm: iv must be at least 7 bytes");for(e=2;4>e&&f>>>8*e;e++);if(e<15-s&&(e=15-s),r=o.clamp(r,8*(15-e)),a=c.mode.ccm.V(t,a,r,u,i,e),t=c.mode.ccm.U(t,a.data,r,n,i,e),!o.equal(a.tag,t))throw new c.exception.corrupt("ccm: tag doesn't match");return a.data},ma:function(t,e,r,n,i,o){var s=[],a=c.bitArray,u=a.P;if(n=[a.partial(8,(e.length?64:0)|n-2<<2|o-1)],n=a.concat(n,r),n[3]|=i,n=t.encrypt(n),e.length)for(r=a.bitLength(e)/8,65279>=r?s=[a.partial(16,r)]:4294967295>=r&&(s=a.concat([a.partial(16,65534)],[r])),s=a.concat(s,e),e=0;ei||16h&&(c.mode.ccm.da(s/u),h+=p),r[3]++,i=t.encrypt(r),e[s]^=i[0],e[s+1]^=i[1],e[s+2]^=i[2],e[s+3]^=i[3];return{tag:n,data:a.clamp(e,f)}}};c.misc.hmac=function(t,e){this.W=e=e||c.hash.sha256;var r=[[],[]],n,i=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>i&&(t=e.hash(t)),n=0;nn||0>r)throw new c.exception.invalid("invalid params to pbkdf2");typeof t=="string"&&(t=c.codec.utf8String.toBits(t)),typeof e=="string"&&(e=c.codec.utf8String.toBits(e)),i=i||c.misc.hmac,t=new i(t);var o,s,a,u,f=[],h=c.bitArray;for(u=1;32*f.length<(n||1);u++){for(i=o=t.encrypt(h.concat(e,[u])),s=1;ss;s++)i.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=o),this.N++,this.b=c.hash.sha256.hash(this.b.concat(i)),this.K=new c.cipher.aes(this.b),n=0;4>n&&(this.m[n]=this.m[n]+1|0,!this.m[n]);n++);}for(n=0;n>>1;this.h[s].update([n,this.M++,2,e,o,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,o,t.length]),this.h[s].update(t);break;default:u=1}if(u)throw new c.exception.bug("random: addEntropy only supports number, array of numbers or string");this.s[s]+=e,this.i+=e,a===this.A&&(this.isReady()!==this.A&&pt("seeded",Math.max(this.u,this.i)),pt("progress",this.getProgress()))},isReady:function(t){return t=this.R[t!==void 0?t:this.L],this.u&&this.u>=t?this.s[0]>this.$&&new Date().valueOf()>this.X?this.I|this.H:this.H:this.i>=t?this.I|this.A:this.A},getProgress:function(t){return t=this.R[t||this.L],this.u>=t||this.i>t?1:this.i/t},startCollectors:function(){if(!this.D){if(this.a={loadTimeCollector:ce(this,this.la),mouseCollector:ce(this,this.na),keyboardCollector:ce(this,this.ja),accelerometerCollector:ce(this,this.ca),touchCollector:ce(this,this.pa)},window.addEventListener)window.addEventListener("load",this.a.loadTimeCollector,!1),window.addEventListener("mousemove",this.a.mouseCollector,!1),window.addEventListener("keypress",this.a.keyboardCollector,!1),window.addEventListener("devicemotion",this.a.accelerometerCollector,!1),window.addEventListener("touchmove",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector);else throw new c.exception.bug("can't attach event");this.D=!0}},stopCollectors:function(){this.D&&(window.removeEventListener?(window.removeEventListener("load",this.a.loadTimeCollector,!1),window.removeEventListener("mousemove",this.a.mouseCollector,!1),window.removeEventListener("keypress",this.a.keyboardCollector,!1),window.removeEventListener("devicemotion",this.a.accelerometerCollector,!1),window.removeEventListener("touchmove",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove",this.a.mouseCollector),document.detachEvent("keypress",this.a.keyboardCollector)),this.D=!1)},addEventListener:function(t,e){this.J[t][this.ea++]=e},removeEventListener:function(t,e){var r,n,i=this.J[t],o=[];for(n in i)i.hasOwnProperty(n)&&i[n]===e&&o.push(n);for(r=0;re&&(t.m[e]=t.m[e]+1|0,!t.m[e]);e++);return t.K.encrypt(t.m)}function ce(t,e){return function(){e.apply(t,arguments)}}c.random=new c.prng(6);e:try{if(Ae=typeof X<"u"&&X.exports){try{Le=Ft("crypto")}catch{Le=null}Ae=Ee=Le}if(Ae&&Ee.randomBytes)ae=Ee.randomBytes(128),ae=new Uint32Array(new Uint8Array(ae).buffer),c.random.addEntropy(ae,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(ue=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(ue);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(ue);else break e;c.random.addEntropy(ue,1024,"crypto['getRandomValues']")}}catch(t){typeof window<"u"&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(t))}var ae,Ee,ue,Ae,Le;c.json={defaults:{v:1,iter:1e4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ha:function(t,e,r,n){r=r||{},n=n||{};var i=c.json,o=i.j({iv:c.random.randomWords(4,0)},i.defaults),s;if(i.j(o,r),r=o.adata,typeof o.salt=="string"&&(o.salt=c.codec.base64.toBits(o.salt)),typeof o.iv=="string"&&(o.iv=c.codec.base64.toBits(o.iv)),!c.mode[o.mode]||!c.cipher[o.cipher]||typeof t=="string"&&100>=o.iter||o.ts!==64&&o.ts!==96&&o.ts!==128||o.ks!==128&&o.ks!==192&&o.ks!==256||2>o.iv.length||4=e.iter||e.ts!==64&&e.ts!==96&&e.ts!==128||e.ks!==128&&e.ks!==192&&e.ks!==256||!e.iv||2>e.iv.length||4Lt,cancel:()=>cr,compress:()=>bt,decompress:()=>ar,download:()=>ur,events:()=>_e,getFileIndexInQueue:()=>vr,infos:()=>fr,pause:()=>hr,remove:()=>lr,resume:()=>pr,upload:()=>mr});var At=Ie(Te());var Wt={withStackTrace:!1},ot=(t,e,r=Wt)=>{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},i=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:i}};function $(t,e,r,n){function i(o){return o instanceof r?o:new r(function(s){s(o)})}return new(r||(r=Promise))(function(o,s){function a(h){try{f(n.next(h))}catch(p){s(p)}}function u(h){try{f(n.throw(h))}catch(p){s(p)}}function f(h){h.done?o(h.value):i(h.value).then(a,u)}f((n=n.apply(t,e||[])).next())})}function nt(t){var e=typeof Symbol=="function"&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function U(t){return this instanceof U?(this.v=t,this):new U(t)}function it(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),i,o=[];return i=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),i[Symbol.asyncIterator]=function(){return this},i;function s(m){return function(E){return Promise.resolve(E).then(m,p)}}function a(m,E){n[m]&&(i[m]=function(R){return new Promise(function(S,J){o.push([m,R,S,J])>1||u(m,R)})},E&&(i[m]=E(i[m])))}function u(m,E){try{f(n[m](E))}catch(R){d(o[0][3],R)}}function f(m){m.value instanceof U?Promise.resolve(m.value.v).then(h,p):d(o[0][2],m)}function h(m){u("next",m)}function p(m){u("throw",m)}function d(m,E){m(E),o.shift(),o.length&&u(o[0][0],o[0][1])}}function zt(t){var e,r;return e={},n("next"),n("throw",function(i){throw i}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(i,o){e[i]=t[i]?function(s){return(r=!r)?{value:U(t[i](s)),done:!1}:o?o(s):s}:o}}function Gt(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],r;return e?e.call(t):(t=typeof nt=="function"?nt(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(o){r[o]=t[o]&&function(s){return new Promise(function(a,u){s=t[o](s),i(a,u,s.done,s.value)})}}function i(o,s,a,u){Promise.resolve(u).then(function(f){o({value:f,done:a})},s)}}var y=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new k(n));return new t(r)}static fromPromise(e,r){let n=e.then(i=>new k(i)).catch(i=>new P(r(i)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t($(this,void 0,void 0,function*(){try{return new k(yield e(...n))}catch(i){return new P(r?r(i):i)}}))}static combine(e){return Kt(e)}static combineWithAllErrors(e){return qt(e)}map(e){return new t(this._promise.then(r=>$(this,void 0,void 0,function*(){return r.isErr()?new P(r.error):new k(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>$(this,void 0,void 0,function*(){if(r.isErr())return new P(r.error);let n=yield e(r.value);return n.isErr()?new P(n.error):new k(r.value)})))}andTee(e){return new t(this._promise.then(r=>$(this,void 0,void 0,function*(){if(r.isErr())return new P(r.error);try{yield e(r.value)}catch{}return new k(r.value)})))}mapErr(e){return new t(this._promise.then(r=>$(this,void 0,void 0,function*(){return r.isOk()?new k(r.value):new P(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new P(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>$(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new k(r.value)})))}match(e,r){return this._promise.then(n=>n.match(e,r))}unwrapOr(e){return this._promise.then(r=>r.unwrapOr(e))}safeUnwrap(){return it(this,arguments,function*(){return yield U(yield U(yield*zt(Gt(yield U(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return it(this,arguments,function*(){let r=yield U(this._promise);return r.isErr()&&(yield yield U(L(r.error))),yield U(r.value)})}},A=t=>new y(Promise.resolve(new k(t))),L=t=>new y(Promise.resolve(new P(t))),Er=y.fromPromise,Ar=y.fromSafePromise,Lr=y.fromThrowable,st=t=>{let e=H([]);for(let r of t)if(r.isErr()){e=B(r.error);break}else e.map(n=>n.push(r.value));return e},Kt=t=>y.fromSafePromise(Promise.all(t)).andThen(st),ct=t=>{let e=H([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=B([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},qt=t=>y.fromSafePromise(Promise.all(t)).andThen(ct),Me;(function(t){function e(i,o){return(...s)=>{try{let a=i(...s);return H(a)}catch(a){return B(o?o(a):a)}}}t.fromThrowable=e;function r(i){return st(i)}t.combine=r;function n(i){return ct(i)}t.combineWithAllErrors=n})(Me||(Me={}));var H=t=>new k(t);function B(t){return new P(t)}var k=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return H(e(this.value))}mapErr(e){return H(this.value)}andThen(e){return e(this.value)}andThrough(e){return e(this.value).map(r=>this.value)}andTee(e){try{e(this.value)}catch{}return H(this.value)}orElse(e){return H(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return y.fromSafePromise(e(this.value))}unwrapOr(e){return this.value}match(e,r){return e(this.value)}safeUnwrap(){let e=this.value;return function*(){return e}()}_unsafeUnwrap(e){return this.value}_unsafeUnwrapErr(e){throw ot("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},P=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return B(this.error)}mapErr(e){return B(e(this.error))}andThrough(e){return B(this.error)}andTee(e){return B(this.error)}andThen(e){return B(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return L(this.error)}asyncAndThrough(e){return L(this.error)}asyncMap(e){return L(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield B(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw ot("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},br=Me.fromThrowable;var N=class t{constructor(e,r){l(this,"actionToken","");l(this,"chunksReady",0);l(this,"createdAt",0);l(this,"delay",0);l(this,"delAtFirstView",!1);l(this,"keys",{client:"",server:""});l(this,"name","");l(this,"password","");l(this,"queueIndex",0);l(this,"serverUrl");l(this,"size",0);l(this,"uploadStatus",3);l(this,"totalChunks",0);l(this,"type","");l(this,"zipped",!1);this.serverUrl=e,Object.assign(this,r)}downloadUrl(){let e=new URL(this.serverUrl);return new URL(`${e.origin+e.pathname}r/${this.keys.server}#${this.keys.client}`)}removeUrl(){let e=new URL(this.serverUrl);return new URL(`${e.origin+e.pathname}d/${this.keys.server}/${this.actionToken}`)}static fromDownloadUrl(e,r=""){let n=e.pathname.split("r/"),i={client:e.hash.slice(1).split("&")[0],server:n[1]};return new t(e.origin+n[0],{keys:i,password:r})}static fromRemoveUrl(e,r=""){let n=e.pathname.split("d/"),i=n[1].split("/"),o={client:"",server:i[0]};return new t(e.origin+n[0],{keys:o,password:r,actionToken:i[1]})}};var ht=Ie(Te());var x=class extends Error{constructor(r,n={}){let{cause:i,context:o}=n;super(r,{cause:i});l(this,"context");this.name=this.constructor.name,this.context=o}};var ge=class extends x{constructor(){super(...arguments);l(this,"message","Unable to connect. Is the computer able to access the url?")}};var we=class extends x{constructor(){super(...arguments);l(this,"message","The server returned an error")}};var g=t=>{if(t instanceof Error)return t;let e="[Unable to stringify the thrown value]";try{e=JSON.stringify(t)}catch{}return new Error(e)},ut=t=>{let e=t.href.match(/(.*?)\/?(?:\/[dr]{1}\/|login\/?|files\/?)/),r=e&&e[1]?e[1]:t.origin;return y.fromPromise(fetch(r+"/about/config"),n=>new ge(void 0,{cause:g(n)})).andThen(n=>n.ok?y.fromPromise(n.json(),i=>g(i)):L(new we(void 0,{context:n.statusText})))},ft=()=>typeof Deno<"u",Ue=()=>ft()||globalThis.isSecureContext||globalThis.location.protocol==="https:",W=t=>ft()?new URL(`./worker/${t}.ts`,new URL(".",import.meta.url).href):new URL(import.meta.resolve(`./${t!=="encrypt"?`worker/${t}`:t}.js`));var j=class{constructor(e,r){l(this,"events",new ht.default);l(this,"lufiFile");l(this,"status",2);l(this,"archiveFile");l(this,"archiveFiles",[]);l(this,"downloadedFile");l(this,"worker");l(this,"isTerminated",!1);l(this,"complete",()=>{this.status=0,this.events.emit("JOB_TERMINATED")});l(this,"hasFailed",()=>this.status===1);l(this,"onError",e=>(this.worker.onerror=r=>{e(r)},this));l(this,"onMessage",e=>(this.worker.onmessage=r=>{e&&e(r);let n=r.data.event;n&&(n==="FILE_UPDATED"?Object.assign(this.lufiFile,r.data.lufiFile):this.dispatchEvent(n,r.data.error))},this));l(this,"onMessageError",e=>(this.worker.onmessageerror=r=>{e(r)},this));l(this,"onProgress",e=>(this.events.on("CHUNK_UPLOADED",()=>{e()}),this.events.on("CHUNK_DOWNLOADED",()=>{e()}),this));l(this,"requestMessage",(e,r=[])=>(this.worker.postMessage(e,r),this));l(this,"terminate",()=>(this.worker.terminate(),this));l(this,"waitForCompletion",()=>this.isTerminated?this.status===0?A(this):L(g("Job has failed")):y.fromPromise(new Promise((e,r)=>{this.events.once("OPERATION_FAILED",n=>{r(n)}),this.events.once("JOB_TERMINATED",()=>{this.status===0&&e(this)})}),e=>g(e)));l(this,"waitForStart",()=>y.fromPromise(new Promise((e,r)=>{this.events.once("OPERATION_FAILED",n=>{r(n)}),this.events.once("UPLOAD_STARTED",()=>{e(this)}),this.events.once("DOWNLOAD_STARTED",()=>{e(this)})}),e=>g(e)));l(this,"dispatchEvent",(e,r)=>{this.events.emit(e,r)});switch(r){case 0:this.worker=new Worker(W("cancel"),{type:"module"});break;case 1:this.worker=new Worker(W("compress"),{type:"module"});break;case 2:this.worker=new Worker(W("decompress"),{type:"module"});break;case 3:this.worker=new Worker(W("download"),{type:"module"});break;case 4:this.worker=new Worker(W("infos"),{type:"module"});break;case 5:this.worker=new Worker(W("remove"),{type:"module"});break;case 6:this.worker=new Worker(W("upload"),{type:"module"});break}this.lufiFile=e,this.events.once("JOB_TERMINATED",()=>{this.isTerminated=!0,this.terminate()}),this.events.once("OPERATION_FAILED",n=>{this.status=1,this.lufiFile.uploadStatus=2,this.events.emit("JOB_TERMINATED",n)}),this.onError(n=>console.error(n.error))}};var V=(r=>(r[r.Sjcl=0]="Sjcl",r[r.WebCrypto=1]="WebCrypto",r))(V||{});var Q=class{constructor(e,r){if(!e||e.length!=64)throw Error("Charset must contain 64 characters");this._charset=e,this._noPadding=!!r,this._valid=new RegExp("^["+this._charset.replace("-","\\-")+"]+={0,2}$")}Encode(e){let r=e.byteLength;if(!r)return"";let n=new Uint8Array(e),i="";for(let o=0;o>2]+this._charset[(n[o]&3)<<4|n[o+1]>>4]+this._charset[(n[o+1]&15)<<2|n[o+2]>>6]+this._charset[n[o+2]&63];return r%3==2?(i=i.substring(0,i.length-1),this._noPadding||(i+="=")):r%3==1&&(i=i.substring(0,i.length-2),this._noPadding||(i+="==")),i}Decode(e){if(e=(e||"").replace(/[\s]/g,""),!e)return new ArrayBuffer(0);if(!this._valid.test(e))throw Error("Invalid base64 input sequence");let r=Math.floor(e.length*.75);e[e.length-2]=="="?r-=2:e[e.length-1]=="="&&r--;let n=new Uint8Array(r),i,o,s,a,u=0,f=0;for(;u>4,n[u++]=(o&15)<<4|s>>2,n[u++]=(s&3)<<6|a;return n.buffer}};var rn=new Q("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");var Xt=new Q("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function Be(t){return Xt.Encode(t)}var fe=Ie(mt());var T=class extends x{};var Z=class extends T{constructor(){super(...arguments);l(this,"message","Unable to hash the provided string")}};var yt=()=>{try{return A(fe.default.codec.base64.fromBits(fe.default.random.randomWords(8,10)))}catch(t){return L(new T("Unable to generate key",{cause:g(t)}))}},vt=t=>{try{return A(fe.default.codec.hex.fromBits(fe.default.hash.sha512.hash(t)))}catch(e){return L(new Z(void 0,{cause:g(e)}))}};var gt=()=>y.fromPromise(new Promise((t,e)=>crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]).then(r=>crypto.subtle.exportKey("raw",r).then(n=>t(Be(n))).catch(n=>{e(new T("Unable to base64 encode the url",{cause:g(n)}))})).catch(r=>e(r))),t=>new T("Unable to generate key",{cause:g(t)})),wt=t=>{let e=async()=>Array.from(new Uint8Array(await crypto.subtle.digest("SHA-512",new TextEncoder().encode(t)))).map(r=>r.toString(16).padStart(2,"0")).join("");return y.fromPromise(e(),r=>new Z(void 0,{cause:g(r)}))};var Et=(t=1)=>t===0?yt():gt(),je=(t,e)=>e===0?vt(t):wt(t);var be=class extends x{constructor(){super(...arguments);l(this,"message","An error occured while downloading the data")}};var xe=class extends x{constructor(){super(...arguments);l(this,"message","An error occured while trying to retrieve server informations")}};var O=class extends x{};var De=class extends O{constructor(){super(...arguments);l(this,"message","An error occured while trying to pause the job")}};var Oe=class extends O{constructor(){super(...arguments);l(this,"message","An error occured while trying to resume the job")}};var Ce=class extends x{constructor(){super(...arguments);l(this,"message","An error occured while uploading the data")}};var sr=15e5,z={},_e=new At.default,cr=t=>{t.terminate();let e=new j(t.lufiFile,0);return y.fromPromise(new Promise((r,n)=>{e.onMessage(i=>{i.data.event==="UPLOAD_CANCELLED"&&(z[e.lufiFile.keys.client].uploadStatus=0,r(e)),i.data.event==="OPERATION_FAILED"&&n(new O("An error occured while trying to cancel an upload",{cause:i.data.error}))}).requestMessage({args:{lufiFile:e.lufiFile}})}),r=>g(r))},Lt=(t,e={})=>{let r=async n=>{var i;for(let o of n){let s=((i=o.name.split("/"))==null?void 0:i.pop())||o.name,a=s.split(".").shift(),u=s.split(".").length>1?`.${s.split(".").pop()}`:"",f=s;if(e[f]!==void 0){let h=1;do f=`${a}(${h})${u}`,h++;while(e[f]!==void 0)}_e.emit("ARCHIVE_ADDED_FILE",{name:f,size:o.size}),e[f]=await o.bytes()}};return y.fromPromise(r(t),n=>g(n)).andThen(()=>A(e))},bt=(t,e)=>{let r=new N(""),n=new j(r,1);return y.fromPromise(new Promise((i,o)=>{n.onMessage(s=>{s.data.event==="ARCHIVE_CREATED"&&(n.archiveFile=new File([s.data.buffer],e,{type:"application/zip"}),n.complete(),i(n)),s.data.event==="OPERATION_FAILED"&&o(new O("An error occured while trying to compress a file",{cause:s.data.error}))}).requestMessage({args:{lufiFile:r,archive:{entries:t}}})}),i=>g(i))},ar=t=>{let e=new N(""),r=new j(e,2);return y.fromPromise(new Promise((n,i)=>{r.onMessage(o=>{o.data.event==="ARCHIVE_DECOMPRESSED"&&(r.complete(),n(r)),o.data.event==="ARCHIVE_RETRIEVED_FILE"&&r.archiveFiles.push(new File([o.data.file.buffer],o.data.file.path)),o.data.event==="OPERATION_FAILED"&&i(new O("An error occured while trying to decompress a file",{cause:o.data.error}))}).requestMessage({args:{lufiFile:e,archive:{file:t}}})}),n=>g(n))},xt=(t,e)=>e?ut(t).andThen(r=>{if(r.version.tag>"0.07.0"){let n=Ue()?1:0;return je(e,n).andThen(i=>A(N.fromDownloadUrl(t,i)))}else return A(N.fromDownloadUrl(t,e))}):A(N.fromDownloadUrl(t)),ur=(t,e)=>xt(t,e).andThen(r=>{let n=new j(r,3);return y.fromPromise(new Promise((i,o)=>{let s=[];return n.onMessage(a=>{Dt(i,o,n,a),a.data.event==="CHUNK_DOWNLOADED"&&(s.push(a.data.chunk.buffer),s.length>=50&&(n.downloadedFile=new File(n.downloadedFile?[n.downloadedFile.slice()].concat(s):s,r.name,{type:r.type}),s.length=0)),a.data.event==="DOWNLOAD_COMPLETE"&&(n.downloadedFile=new File(n.downloadedFile?[n.downloadedFile.slice()].concat(s):s,r.name,{type:r.type}),s.length=0,n.complete())}).requestMessage({args:{lufiFile:r}})}),i=>new be(void 0,{cause:g(i)}))}),fr=(t,e)=>xt(t,e).andThen(r=>A(new j(r,4))).andThen(r=>y.fromPromise(new Promise((n,i)=>{r.onMessage(o=>{o.data.event==="INFOS_RETRIEVED"&&(r.complete(),n(r)),o.data.event==="OPERATION_FAILED"&&i(new O("An error occured while trying to retrieve informations of the file",{cause:o.data.error}))}).requestMessage({args:{lufiFile:r.lufiFile}})}),n=>new xe(void 0,{cause:g(n)}))),hr=t=>{try{return t.status=3,A(t.requestMessage({action:0,args:{lufiFile:t.lufiFile}}))}catch(e){return L(new De(void 0,{cause:g(e)}))}},lr=(t,e)=>{let r=N.fromRemoveUrl(t,e),n=new j(r,5);return y.fromPromise(new Promise((i,o)=>{n.onMessage(s=>{s.data.event==="FILE_REMOVED"&&(n.complete(),i(n)),s.data.event==="OPERATION_FAILED"&&o(new O("An error occured while trying to remove a file",{cause:s.data.error}))}).requestMessage({args:{lufiFile:r}})}),i=>g(i))},pr=t=>{try{return t.status=2,A(t.requestMessage({action:2,args:{lufiFile:t.lufiFile}}))}catch(e){return L(new Oe(void 0,{cause:g(e)}))}},dr=(t,e,r,n=sr)=>{_e.emit("SLICE_STARTED",z[t.lufiFile.keys.client]);let i=Math.ceil(e.size/n)||1,o=navigator.hardwareConcurrency||1;return z[t.lufiFile.keys.client].totalChunks=i,(async()=>{for(let a=0;a{t.events.once("UPLOAD_STARTED",()=>{d(void 0)})}):a%o===0&&await new Promise(d=>{t.events.once("CHUNK_UPLOADED",()=>{d(void 0)})})}})(),A(void 0)},Je=(t,e,r,n,i,o,s)=>Et(s).andThen(a=>o?je(o,s).andThen(u=>A({password:u,clientKey:a})):A({password:o,clientKey:a})).andThen(({password:a,clientKey:u})=>{z[u]=new N(t.toString(),{delay:r,delAtFirstView:n,zipped:i,password:a,name:e.name.split("/").pop(),size:e.size,type:e.type,keys:{client:u,server:""}});let f=new j(z[u],6);return z[u].uploadStatus=4,dr(f,e,s).andThen(()=>y.fromPromise(new Promise((h,p)=>{f.onMessage(d=>{switch(Dt(h,p,f,d),d.data.event){case"UPLOAD_COMPLETE":f.complete(),f.lufiFile.uploadStatus=1;break}})}),h=>g(h)))}),mr=(t,e,r=0,n=!1,i=!1,o="documents.zip",s="",a=1)=>{let u=[];return i?e.length===1&&e[0].type==="application/zip"?u.push(Je(t,e[0],r,n,i,s,a)):u.push(Lt(e).andThen(f=>bt(f,o).andThen(h=>h.archiveFile?(_e.emit("ARCHIVE_CREATED",h.archiveFile),Je(t,h.archiveFile,r,n,i,s,a)):L(new O("archiveFile must be defined"))))):e.forEach(f=>{u.push(Je(t,f,r,n,i,s,a))}),y.combine(u).orElse(f=>L(new Ce(void 0,{cause:f})))},Dt=(t,e,r,n)=>{n.data.event==="SOCKET_OPENED"&&t(r),n.data.event==="OPERATION_FAILED"&&e(new O("The job returned an error",{cause:n.data.error}))},yr=()=>Object.values(z).filter(t=>t.uploadStatus===4),vr=t=>Object.keys(yr()).indexOf(t);export{V as CryptoAlgorithm,y as ResultAsync,B as err,L as errAsync,Ue as isSecureContext,He as lufi,H as ok,A as okAsync}; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLmRlbm8vbHVmaS1zamNsQDEuMC44L25vZGVfbW9kdWxlcy9sdWZpLXNqY2wvc2pjbC5qcyIsICIuLi9zcmMvYXBpL2x1ZmkudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5kZW5vL25ldmVydGhyb3dAOC4xLjEvbm9kZV9tb2R1bGVzL25ldmVydGhyb3cvZGlzdC9pbmRleC5lcy5qcyIsICIuLi9zcmMvZW50aXRpZXMvbHVmaS1maWxlLnRzIiwgIi4uL3NyYy9lbnRpdGllcy9sdWZpLWpvYi50cyIsICIuLi9zcmMvZXJyb3IvYmFzZS1lcnJvci50cyIsICIuLi9zcmMvZXJyb3IvY29ubmVjdGlvbi1lcnJvci50cyIsICIuLi9zcmMvZXJyb3Ivc2VydmVyLWVycm9yLnRzIiwgIi4uL3NyYy91dGlscy50cyIsICIuLi9zcmMvZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8uZGVuby9hcnJheWJ1ZmZlci1lbmNvZGluZ0AxLjEuMC9ub2RlX21vZHVsZXMvYXJyYXlidWZmZXItZW5jb2Rpbmcvc3JjL2Jhc2U2NC9lbmNvZGluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLmRlbm8vYXJyYXlidWZmZXItZW5jb2RpbmdAMS4xLjAvbm9kZV9tb2R1bGVzL2FycmF5YnVmZmVyLWVuY29kaW5nL3NyYy9iYXNlNjQvc3RhbmRhcmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2FycmF5YnVmZmVyLWVuY29kaW5nQDEuMS4wL25vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci1lbmNvZGluZy9zcmMvYmFzZTY0L3VybC50cyIsICIuLi9zcmMvYXBpL2NyeXB0by9zamNsLnRzIiwgIi4uL3NyYy9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzIiwgIi4uL3NyYy9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50cyIsICIuLi9zcmMvYXBpL2NyeXB0by93ZWIudHMiLCAiLi4vc3JjL2FwaS9jcnlwdG8udHMiLCAiLi4vc3JjL2Vycm9yL2Rvd25sb2FkL2Rvd25sb2FkLWVycm9yLnRzIiwgIi4uL3NyYy9lcnJvci9pbmZvcy1lcnJvci50cyIsICIuLi9zcmMvZXJyb3Ivam9iL2pvYi1lcnJvci50cyIsICIuLi9zcmMvZXJyb3Ivam9iL2pvYi1wYXVzZS1lcnJvci50cyIsICIuLi9zcmMvZXJyb3Ivam9iL2pvYi1yZXN1bWUtZXJyb3IudHMiLCAiLi4vc3JjL2Vycm9yL3VwbG9hZC91cGxvYWQtZXJyb3IudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnID8gUmVmbGVjdCA6IG51bGxcbnZhciBSZWZsZWN0QXBwbHkgPSBSICYmIHR5cGVvZiBSLmFwcGx5ID09PSAnZnVuY3Rpb24nXG4gID8gUi5hcHBseVxuICA6IGZ1bmN0aW9uIFJlZmxlY3RBcHBseSh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpO1xuICB9XG5cbnZhciBSZWZsZWN0T3duS2V5c1xuaWYgKFIgJiYgdHlwZW9mIFIub3duS2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWZsZWN0T3duS2V5cyA9IFIub3duS2V5c1xufSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldClcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NFbWl0V2FybmluZyh3YXJuaW5nKSB7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUud2FybikgY29uc29sZS53YXJuKHdhcm5pbmcpO1xufVxuXG52YXIgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5tb2R1bGUuZXhwb3J0cy5vbmNlID0gb25jZTtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHNDb3VudCA9IDA7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbnZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgbGlzdGVuZXIpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICdkZWZhdWx0TWF4TGlzdGVuZXJzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwIHx8IE51bWJlcklzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIGFyZyArICcuJyk7XG4gICAgfVxuICAgIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSBhcmc7XG4gIH1cbn0pO1xuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICh0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgTnVtYmVySXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBuICsgJy4nKTtcbiAgfVxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICB2YXIgZG9FcnJvciA9ICh0eXBlID09PSAnZXJyb3InKTtcblxuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpXG4gICAgZG9FcnJvciA9IChkb0Vycm9yICYmIGV2ZW50cy5lcnJvciA9PT0gdW5kZWZpbmVkKTtcbiAgZWxzZSBpZiAoIWRvRXJyb3IpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKGRvRXJyb3IpIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMClcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLy8gTm90ZTogVGhlIGNvbW1lbnRzIG9uIHRoZSBgdGhyb3dgIGxpbmVzIGFyZSBpbnRlbnRpb25hbCwgdGhleSBzaG93XG4gICAgICAvLyB1cCBpbiBOb2RlJ3Mgb3V0cHV0IGlmIHRoaXMgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLlxuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgfVxuICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmhhbmRsZWQgZXJyb3IuJyArIChlciA/ICcgKCcgKyBlci5tZXNzYWdlICsgJyknIDogJycpKTtcbiAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgIHRocm93IGVycjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgfVxuXG4gIHZhciBoYW5kbGVyID0gZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFJlZmxlY3RBcHBseShoYW5kbGVyLCB0aGlzLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuID0gaGFuZGxlci5sZW5ndGg7XG4gICAgdmFyIGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlciwgbGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgUmVmbGVjdEFwcGx5KGxpc3RlbmVyc1tpXSwgdGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9hZGRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBwcmVwZW5kKSB7XG4gIHZhciBtO1xuICB2YXIgZXZlbnRzO1xuICB2YXIgZXhpc3Rpbmc7XG5cbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0YXJnZXQuX2V2ZW50c0NvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgICBpZiAoZXZlbnRzLm5ld0xpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldC5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA/IGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gICAgICAvLyBSZS1hc3NpZ24gYGV2ZW50c2AgYmVjYXVzZSBhIG5ld0xpc3RlbmVyIGhhbmRsZXIgY291bGQgaGF2ZSBjYXVzZWQgdGhlXG4gICAgICAvLyB0aGlzLl9ldmVudHMgdG8gYmUgYXNzaWduZWQgdG8gYSBuZXcgb2JqZWN0XG4gICAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgICB9XG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV07XG4gIH1cblxuICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPVxuICAgICAgICBwcmVwZW5kID8gW2xpc3RlbmVyLCBleGlzdGluZ10gOiBbZXhpc3RpbmcsIGxpc3RlbmVyXTtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB9IGVsc2UgaWYgKHByZXBlbmQpIHtcbiAgICAgIGV4aXN0aW5nLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdGluZy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICAgIG0gPSBfZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCk7XG4gICAgaWYgKG0gPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0gJiYgIWV4aXN0aW5nLndhcm5lZCkge1xuICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTtcbiAgICAgIC8vIE5vIGVycm9yIGNvZGUgZm9yIHRoaXMgc2luY2UgaXQgaXMgYSBXYXJuaW5nXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIHZhciB3ID0gbmV3IEVycm9yKCdQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5sZW5ndGggKyAnICcgKyBTdHJpbmcodHlwZSkgKyAnIGxpc3RlbmVycyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlYXNlIGxpbWl0Jyk7XG4gICAgICB3Lm5hbWUgPSAnTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nJztcbiAgICAgIHcuZW1pdHRlciA9IHRhcmdldDtcbiAgICAgIHcudHlwZSA9IHR5cGU7XG4gICAgICB3LmNvdW50ID0gZXhpc3RpbmcubGVuZ3RoO1xuICAgICAgUHJvY2Vzc0VtaXRXYXJuaW5nKHcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgfTtcblxuZnVuY3Rpb24gb25jZVdyYXBwZXIoKSB7XG4gIGlmICghdGhpcy5maXJlZCkge1xuICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSwgdGhpcy53cmFwRm4pO1xuICAgIHRoaXMuZmlyZWQgPSB0cnVlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX29uY2VXcmFwKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIHN0YXRlID0geyBmaXJlZDogZmFsc2UsIHdyYXBGbjogdW5kZWZpbmVkLCB0YXJnZXQ6IHRhcmdldCwgdHlwZTogdHlwZSwgbGlzdGVuZXI6IGxpc3RlbmVyIH07XG4gIHZhciB3cmFwcGVkID0gb25jZVdyYXBwZXIuYmluZChzdGF0ZSk7XG4gIHdyYXBwZWQubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgc3RhdGUud3JhcEZuID0gd3JhcHBlZDtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UodHlwZSwgbGlzdGVuZXIpIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gIHRoaXMub24odHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGxpc3QgPSBldmVudHNbdHlwZV07XG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8IGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwb3NpdGlvbiA9IC0xO1xuXG4gICAgICAgIGZvciAoaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHwgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0W2ldLmxpc3RlbmVyO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAocG9zaXRpb24gPT09IDApXG4gICAgICAgICAgbGlzdC5zaGlmdCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IGxpc3RbMF07XG5cbiAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBvcmlnaW5hbExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMsIGV2ZW50cywgaTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50cyk7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lcnMgPSBldmVudHNbdHlwZV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTElGTyBvcmRlclxuICAgICAgICBmb3IgKGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuZnVuY3Rpb24gX2xpc3RlbmVycyh0YXJnZXQsIHR5cGUsIHVud3JhcCkge1xuICB2YXIgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcbiAgaWYgKGV2bGlzdGVuZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiB1bndyYXAgPyBbZXZsaXN0ZW5lci5saXN0ZW5lciB8fCBldmxpc3RlbmVyXSA6IFtldmxpc3RlbmVyXTtcblxuICByZXR1cm4gdW53cmFwID9cbiAgICB1bndyYXBMaXN0ZW5lcnMoZXZsaXN0ZW5lcikgOiBhcnJheUNsb25lKGV2bGlzdGVuZXIsIGV2bGlzdGVuZXIubGVuZ3RoKTtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCB0cnVlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzID0gZnVuY3Rpb24gcmF3TGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGlzdGVuZXJDb3VudC5jYWxsKGVtaXR0ZXIsIHR5cGUpO1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBsaXN0ZW5lckNvdW50O1xuZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7XG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG5cbiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHJldHVybiB0aGlzLl9ldmVudHNDb3VudCA+IDAgPyBSZWZsZWN0T3duS2V5cyh0aGlzLl9ldmVudHMpIDogW107XG59O1xuXG5mdW5jdGlvbiBhcnJheUNsb25lKGFyciwgbikge1xuICB2YXIgY29weSA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpXG4gICAgY29weVtpXSA9IGFycltpXTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKDsgaW5kZXggKyAxIDwgbGlzdC5sZW5ndGg7IGluZGV4KyspXG4gICAgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07XG4gIGxpc3QucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpIHtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyArK2kpIHtcbiAgICByZXRbaV0gPSBhcnJbaV0ubGlzdGVuZXIgfHwgYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG9uY2UoZW1pdHRlciwgbmFtZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXJyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKG5hbWUsIHJlc29sdmVyKTtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgaWYgKHR5cGVvZiBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCByZXNvbHZlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBlcnJvckxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgaGFuZGxlciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsICdlcnJvcicsIGhhbmRsZXIsIGZsYWdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICBlbWl0dGVyLm9uY2UobmFtZSwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0dGVyLm9uKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEV2ZW50VGFyZ2V0IGRvZXMgbm90IGhhdmUgYGVycm9yYCBldmVudCBzZW1hbnRpY3MgbGlrZSBOb2RlXG4gICAgLy8gRXZlbnRFbWl0dGVycywgd2UgZG8gbm90IGxpc3RlbiBmb3IgYGVycm9yYCBldmVudHMgaGVyZS5cbiAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZnVuY3Rpb24gd3JhcExpc3RlbmVyKGFyZykge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBidWlsdGluIGB7IG9uY2U6IHRydWUgfWAgc3VwcG9ydCBzbyB3ZVxuICAgICAgLy8gaGF2ZSB0byBkbyBpdCBtYW51YWxseS5cbiAgICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXIoYXJnKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJlbWl0dGVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGVtaXR0ZXIpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7dmFyIHNqY2w9e2NpcGhlcjp7fSxoYXNoOnt9LGtleWV4Y2hhbmdlOnt9LG1vZGU6e30sbWlzYzp7fSxjb2RlYzp7fSxleGNlcHRpb246e2NvcnJ1cHQ6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiQ09SUlVQVDogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0saW52YWxpZDpmdW5jdGlvbihhKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJJTlZBTElEOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfSxidWc6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiQlVHOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfSxub3RSZWFkeTpmdW5jdGlvbihhKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJOT1QgUkVBRFk6IFwiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPWF9fX07XG5zamNsLmNpcGhlci5hZXM9ZnVuY3Rpb24oYSl7dGhpcy53WzBdWzBdWzBdfHx0aGlzLkMoKTt2YXIgYixjLGQsZSxmPXRoaXMud1swXVs0XSxnPXRoaXMud1sxXTtiPWEubGVuZ3RoO3ZhciBoPTE7aWYoNCE9PWImJjYhPT1iJiY4IT09Yil0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgYWVzIGtleSBzaXplXCIpO3RoaXMuYj1bZD1hLnNsaWNlKDApLGU9W11dO2ZvcihhPWI7YTw0KmIrMjg7YSsrKXtjPWRbYS0xXTtpZigwPT09YSVifHw4PT09YiYmND09PWElYiljPWZbYz4+PjI0XTw8MjReZltjPj4xNiYyNTVdPDwxNl5mW2M+PjgmMjU1XTw8OF5mW2MmMjU1XSwwPT09YSViJiYoYz1jPDw4XmM+Pj4yNF5oPDwyNCxoPWg8PDFeMjgzKihoPj43KSk7ZFthXT1kW2EtYl1eY31mb3IoYj0wO2E7YisrLGEtLSljPWRbYiYzP2E6YS00XSxlW2JdPTQ+PWF8fDQ+Yj9jOmdbMF1bZltjPj4+MjRdXV5nWzFdW2ZbYz4+MTYmMjU1XV1eZ1syXVtmW2M+PjgmMjU1XV1eZ1szXVtmW2MmXG4yNTVdXX07XG5zamNsLmNpcGhlci5hZXMucHJvdG90eXBlPXtlbmNyeXB0OmZ1bmN0aW9uKGEpe3JldHVybiBhYSh0aGlzLGEsMCl9LGRlY3J5cHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFhKHRoaXMsYSwxKX0sdzpbW1tdLFtdLFtdLFtdLFtdXSxbW10sW10sW10sW10sW11dXSxDOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy53WzBdLGI9dGhpcy53WzFdLGM9YVs0XSxkPWJbNF0sZSxmLGcsaD1bXSxrPVtdLG4sbCxtLHA7Zm9yKGU9MDsweDEwMD5lO2UrKylrWyhoW2VdPWU8PDFeMjgzKihlPj43KSleZV09ZTtmb3IoZj1nPTA7IWNbZl07Zl49bnx8MSxnPWtbZ118fDEpZm9yKG09Z15nPDwxXmc8PDJeZzw8M15nPDw0LG09bT4+OF5tJjI1NV45OSxjW2ZdPW0sZFttXT1mLGw9aFtlPWhbbj1oW2ZdXV0scD0weDEwMTAxMDEqbF4weDEwMDAxKmVeMHgxMDEqbl4weDEwMTAxMDAqZixsPTB4MTAxKmhbbV1eMHgxMDEwMTAwKm0sZT0wOzQ+ZTtlKyspYVtlXVtmXT1sPWw8PDI0Xmw+Pj44LGJbZV1bbV09cD1wPDwyNF5wPj4+ODtmb3IoZT1cbjA7NT5lO2UrKylhW2VdPWFbZV0uc2xpY2UoMCksYltlXT1iW2VdLnNsaWNlKDApfX07XG5mdW5jdGlvbiBhYShhLGIsYyl7aWYoNCE9PWIubGVuZ3RoKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiaW52YWxpZCBhZXMgYmxvY2sgc2l6ZVwiKTt2YXIgZD1hLmJbY10sZT1iWzBdXmRbMF0sZj1iW2M/MzoxXV5kWzFdLGc9YlsyXV5kWzJdO2I9YltjPzE6M11eZFszXTt2YXIgaCxrLG4sbD1kLmxlbmd0aC80LTIsbSxwPTQsej1bMCwwLDAsMF07aD1hLndbY107YT1oWzBdO3ZhciBBPWhbMV0sQz1oWzJdLEI9aFszXSxEPWhbNF07Zm9yKG09MDttPGw7bSsrKWg9YVtlPj4+MjRdXkFbZj4+MTYmMjU1XV5DW2c+PjgmMjU1XV5CW2ImMjU1XV5kW3BdLGs9YVtmPj4+MjRdXkFbZz4+MTYmMjU1XV5DW2I+PjgmMjU1XV5CW2UmMjU1XV5kW3ArMV0sbj1hW2c+Pj4yNF1eQVtiPj4xNiYyNTVdXkNbZT4+OCYyNTVdXkJbZiYyNTVdXmRbcCsyXSxiPWFbYj4+PjI0XV5BW2U+PjE2JjI1NV1eQ1tmPj44JjI1NV1eQltnJjI1NV1eZFtwKzNdLHArPTQsZT1oLGY9ayxnPW47Zm9yKG09XG4wOzQ+bTttKyspeltjPzMmLW06bV09RFtlPj4+MjRdPDwyNF5EW2Y+PjE2JjI1NV08PDE2XkRbZz4+OCYyNTVdPDw4XkRbYiYyNTVdXmRbcCsrXSxoPWUsZT1mLGY9ZyxnPWIsYj1oO3JldHVybiB6fVxuc2pjbC5iaXRBcnJheT17Yml0U2xpY2U6ZnVuY3Rpb24oYSxiLGMpe2E9c2pjbC5iaXRBcnJheS5ZKGEuc2xpY2UoYi8zMiksMzItKGImMzEpKS5zbGljZSgxKTtyZXR1cm4gdm9pZCAwPT09Yz9hOnNqY2wuYml0QXJyYXkuY2xhbXAoYSxjLWIpfSxleHRyYWN0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLmZsb29yKC1iLWMmMzEpO3JldHVybigoYitjLTFeYikmLTMyP2FbYi8zMnwwXTw8MzItZF5hW2IvMzIrMXwwXT4+PmQ6YVtiLzMyfDBdPj4+ZCkmKDE8PGMpLTF9LGNvbmNhdDpmdW5jdGlvbihhLGIpe2lmKDA9PT1hLmxlbmd0aHx8MD09PWIubGVuZ3RoKXJldHVybiBhLmNvbmNhdChiKTt2YXIgYz1hW2EubGVuZ3RoLTFdLGQ9c2pjbC5iaXRBcnJheS5nZXRQYXJ0aWFsKGMpO3JldHVybiAzMj09PWQ/YS5jb25jYXQoYik6c2pjbC5iaXRBcnJheS5ZKGIsZCxjfDAsYS5zbGljZSgwLGEubGVuZ3RoLTEpKX0sYml0TGVuZ3RoOmZ1bmN0aW9uKGEpe3ZhciBiPWEubGVuZ3RoO3JldHVybiAwPT09XG5iPzA6MzIqKGItMSkrc2pjbC5iaXRBcnJheS5nZXRQYXJ0aWFsKGFbYi0xXSl9LGNsYW1wOmZ1bmN0aW9uKGEsYil7aWYoMzIqYS5sZW5ndGg8YilyZXR1cm4gYTthPWEuc2xpY2UoMCxNYXRoLmNlaWwoYi8zMikpO3ZhciBjPWEubGVuZ3RoO2I9YiYzMTswPGMmJmImJihhW2MtMV09c2pjbC5iaXRBcnJheS5wYXJ0aWFsKGIsYVtjLTFdJjIxNDc0ODM2NDg+PmItMSwxKSk7cmV0dXJuIGF9LHBhcnRpYWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiAzMj09PWE/YjooYz9ifDA6Yjw8MzItYSkrMHgxMDAwMDAwMDAwMCphfSxnZXRQYXJ0aWFsOmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnJvdW5kKGEvMHgxMDAwMDAwMDAwMCl8fDMyfSxlcXVhbDpmdW5jdGlvbihhLGIpe2lmKHNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpIT09c2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYikpcmV0dXJuITE7dmFyIGM9MCxkO2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspY3w9YVtkXV5iW2RdO3JldHVybiAwPT09XG5jfSxZOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlO2U9MDtmb3Iodm9pZCAwPT09ZCYmKGQ9W10pOzMyPD1iO2ItPTMyKWQucHVzaChjKSxjPTA7aWYoMD09PWIpcmV0dXJuIGQuY29uY2F0KGEpO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspZC5wdXNoKGN8YVtlXT4+PmIpLGM9YVtlXTw8MzItYjtlPWEubGVuZ3RoP2FbYS5sZW5ndGgtMV06MDthPXNqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChlKTtkLnB1c2goc2pjbC5iaXRBcnJheS5wYXJ0aWFsKGIrYSYzMSwzMjxiK2E/YzpkLnBvcCgpLDEpKTtyZXR1cm4gZH0sUDpmdW5jdGlvbihhLGIpe3JldHVyblthWzBdXmJbMF0sYVsxXV5iWzFdLGFbMl1eYlsyXSxhWzNdXmJbM11dfSxieXRlc3dhcE06ZnVuY3Rpb24oYSl7dmFyIGIsYztmb3IoYj0wO2I8YS5sZW5ndGg7KytiKWM9YVtiXSxhW2JdPWM+Pj4yNHxjPj4+OCYweGZmMDB8KGMmMHhmZjAwKTw8OHxjPDwyNDtyZXR1cm4gYX19O1xuc2pjbC5jb2RlYy51dGY4U3RyaW5nPXtmcm9tQml0czpmdW5jdGlvbihhKXt2YXIgYj1cIlwiLGM9c2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSksZCxlO2ZvcihkPTA7ZDxjLzg7ZCsrKTA9PT0oZCYzKSYmKGU9YVtkLzRdKSxiKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGU+Pj44Pj4+OD4+PjgpLGU8PD04O3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGIpKX0sdG9CaXRzOmZ1bmN0aW9uKGEpe2E9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGEpKTt2YXIgYj1bXSxjLGQ9MDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWQ9ZDw8OHxhLmNoYXJDb2RlQXQoYyksMz09PShjJjMpJiYoYi5wdXNoKGQpLGQ9MCk7YyYzJiZiLnB1c2goc2pjbC5iaXRBcnJheS5wYXJ0aWFsKDgqKGMmMyksZCkpO3JldHVybiBifX07XG5zamNsLmNvZGVjLmhleD17ZnJvbUJpdHM6ZnVuY3Rpb24oYSl7dmFyIGI9XCJcIixjO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYis9KChhW2NdfDApKzB4ZjAwMDAwMDAwMDAwKS50b1N0cmluZygxNikuc3Vic3RyKDQpO3JldHVybiBiLnN1YnN0cigwLHNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpLzQpfSx0b0JpdHM6ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXSxkO2E9YS5yZXBsYWNlKC9cXHN8MHgvZyxcIlwiKTtkPWEubGVuZ3RoO2E9YStcIjAwMDAwMDAwXCI7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrPTgpYy5wdXNoKHBhcnNlSW50KGEuc3Vic3RyKGIsOCksMTYpXjApO3JldHVybiBzamNsLmJpdEFycmF5LmNsYW1wKGMsNCpkKX19O1xuc2pjbC5jb2RlYy5iYXNlNjQ9e1M6XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIsZnJvbUJpdHM6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVwiXCIsZT0wLGY9c2pjbC5jb2RlYy5iYXNlNjQuUyxnPTAsaD1zamNsLmJpdEFycmF5LmJpdExlbmd0aChhKTtjJiYoZj1mLnN1YnN0cigwLDYyKStcIi1fXCIpO2ZvcihjPTA7NipkLmxlbmd0aDxoOylkKz1mLmNoYXJBdCgoZ15hW2NdPj4+ZSk+Pj4yNiksNj5lPyhnPWFbY108PDYtZSxlKz0yNixjKyspOihnPDw9NixlLT02KTtmb3IoO2QubGVuZ3RoJjMmJiFiOylkKz1cIj1cIjtyZXR1cm4gZH0sdG9CaXRzOmZ1bmN0aW9uKGEsYil7YT1hLnJlcGxhY2UoL1xcc3w9L2csXCJcIik7dmFyIGM9W10sZCxlPTAsZj1zamNsLmNvZGVjLmJhc2U2NC5TLGc9MCxoO2ImJihmPWYuc3Vic3RyKDAsNjIpK1wiLV9cIik7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKyl7aD1mLmluZGV4T2YoYS5jaGFyQXQoZCkpO1xuaWYoMD5oKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwidGhpcyBpc24ndCBiYXNlNjQhXCIpOzI2PGU/KGUtPTI2LGMucHVzaChnXmg+Pj5lKSxnPWg8PDMyLWUpOihlKz02LGdePWg8PDMyLWUpfWUmNTYmJmMucHVzaChzamNsLmJpdEFycmF5LnBhcnRpYWwoZSY1NixnLDEpKTtyZXR1cm4gY319O3NqY2wuY29kZWMuYmFzZTY0dXJsPXtmcm9tQml0czpmdW5jdGlvbihhKXtyZXR1cm4gc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMoYSwxLDEpfSx0b0JpdHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhhLDEpfX07c2pjbC5oYXNoLnNoYTI1Nj1mdW5jdGlvbihhKXt0aGlzLmJbMF18fHRoaXMuQygpO2E/KHRoaXMuZz1hLmcuc2xpY2UoMCksdGhpcy5mPWEuZi5zbGljZSgwKSx0aGlzLmM9YS5jKTp0aGlzLnJlc2V0KCl9O3NqY2wuaGFzaC5zaGEyNTYuaGFzaD1mdW5jdGlvbihhKXtyZXR1cm4obmV3IHNqY2wuaGFzaC5zaGEyNTYpLnVwZGF0ZShhKS5maW5hbGl6ZSgpfTtcbnNqY2wuaGFzaC5zaGEyNTYucHJvdG90eXBlPXtibG9ja1NpemU6NTEyLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5nPXRoaXMuby5zbGljZSgwKTt0aGlzLmY9W107dGhpcy5jPTA7cmV0dXJuIHRoaXN9LHVwZGF0ZTpmdW5jdGlvbihhKXtcInN0cmluZ1wiPT09dHlwZW9mIGEmJihhPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYSkpO3ZhciBiLGM9dGhpcy5mPXNqY2wuYml0QXJyYXkuY29uY2F0KHRoaXMuZixhKTtiPXRoaXMuYzthPXRoaXMuYz1iK3NqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpO2lmKDB4MWZmZmZmZmZmZmZmZmY8YSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcIkNhbm5vdCBoYXNoIG1vcmUgdGhhbiAyXjUzIC0gMSBiaXRzXCIpO2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgVWludDMyQXJyYXkpe3ZhciBkPW5ldyBVaW50MzJBcnJheShjKSxlPTA7Zm9yKGI9NTEyK2ItKDUxMitiJjB4MWZmKTtiPD1hO2IrPTUxMil0aGlzLmwoZC5zdWJhcnJheSgxNiplLFxuMTYqKGUrMSkpKSxlKz0xO2Muc3BsaWNlKDAsMTYqZSl9ZWxzZSBmb3IoYj01MTIrYi0oNTEyK2ImMHgxZmYpO2I8PWE7Yis9NTEyKXRoaXMubChjLnNwbGljZSgwLDE2KSk7cmV0dXJuIHRoaXN9LGZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLmYsYz10aGlzLmcsYj1zamNsLmJpdEFycmF5LmNvbmNhdChiLFtzamNsLmJpdEFycmF5LnBhcnRpYWwoMSwxKV0pO2ZvcihhPWIubGVuZ3RoKzI7YSYxNTthKyspYi5wdXNoKDApO2IucHVzaChNYXRoLmZsb29yKHRoaXMuYy8weDEwMDAwMDAwMCkpO2ZvcihiLnB1c2godGhpcy5jfDApO2IubGVuZ3RoOyl0aGlzLmwoYi5zcGxpY2UoMCwxNikpO3RoaXMucmVzZXQoKTtyZXR1cm4gY30sbzpbXSxiOltdLEM6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybiAweDEwMDAwMDAwMCooYS1NYXRoLmZsb29yKGEpKXwwfWZvcih2YXIgYj0wLGM9MixkLGU7NjQ+YjtjKyspe2U9ITA7Zm9yKGQ9MjtkKmQ8PWM7ZCsrKWlmKDA9PT1jJWQpe2U9XG4hMTticmVha31lJiYoOD5iJiYodGhpcy5vW2JdPWEoTWF0aC5wb3coYywuNSkpKSx0aGlzLmJbYl09YShNYXRoLnBvdyhjLDEvMykpLGIrKyl9fSxsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXMuZyxmPXRoaXMuYixnPWVbMF0saD1lWzFdLGs9ZVsyXSxuPWVbM10sbD1lWzRdLG09ZVs1XSxwPWVbNl0sej1lWzddO2ZvcihiPTA7NjQ+YjtiKyspMTY+Yj9jPWFbYl06KGM9YVtiKzEmMTVdLGQ9YVtiKzE0JjE1XSxjPWFbYiYxNV09KGM+Pj43XmM+Pj4xOF5jPj4+M15jPDwyNV5jPDwxNCkrKGQ+Pj4xN15kPj4+MTleZD4+PjEwXmQ8PDE1XmQ8PDEzKSthW2ImMTVdK2FbYis5JjE1XXwwKSxjPWMreisobD4+PjZebD4+PjExXmw+Pj4yNV5sPDwyNl5sPDwyMV5sPDw3KSsocF5sJihtXnApKStmW2JdLHo9cCxwPW0sbT1sLGw9bitjfDAsbj1rLGs9aCxoPWcsZz1jKyhoJmtebiYoaF5rKSkrKGg+Pj4yXmg+Pj4xM15oPj4+MjJeaDw8MzBeaDw8MTleaDw8MTApfDA7ZVswXT1lWzBdK2d8XG4wO2VbMV09ZVsxXStofDA7ZVsyXT1lWzJdK2t8MDtlWzNdPWVbM10rbnwwO2VbNF09ZVs0XStsfDA7ZVs1XT1lWzVdK218MDtlWzZdPWVbNl0rcHwwO2VbN109ZVs3XSt6fDB9fTtzamNsLmhhc2guc2hhNTEyPWZ1bmN0aW9uKGEpe3RoaXMuYlswXXx8dGhpcy5DKCk7YT8odGhpcy5nPWEuZy5zbGljZSgwKSx0aGlzLmY9YS5mLnNsaWNlKDApLHRoaXMuYz1hLmMpOnRoaXMucmVzZXQoKX07c2pjbC5oYXNoLnNoYTUxMi5oYXNoPWZ1bmN0aW9uKGEpe3JldHVybihuZXcgc2pjbC5oYXNoLnNoYTUxMikudXBkYXRlKGEpLmZpbmFsaXplKCl9O1xuc2pjbC5oYXNoLnNoYTUxMi5wcm90b3R5cGU9e2Jsb2NrU2l6ZToxMDI0LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5nPXRoaXMuby5zbGljZSgwKTt0aGlzLmY9W107dGhpcy5jPTA7cmV0dXJuIHRoaXN9LHVwZGF0ZTpmdW5jdGlvbihhKXtcInN0cmluZ1wiPT09dHlwZW9mIGEmJihhPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYSkpO3ZhciBiLGM9dGhpcy5mPXNqY2wuYml0QXJyYXkuY29uY2F0KHRoaXMuZixhKTtiPXRoaXMuYzthPXRoaXMuYz1iK3NqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpO2lmKDB4MWZmZmZmZmZmZmZmZmY8YSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcIkNhbm5vdCBoYXNoIG1vcmUgdGhhbiAyXjUzIC0gMSBiaXRzXCIpO2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgVWludDMyQXJyYXkpe3ZhciBkPW5ldyBVaW50MzJBcnJheShjKSxlPTA7Zm9yKGI9MTAyNCtiLSgxMDI0K2ImMTAyMyk7Yjw9YTtiKz0xMDI0KXRoaXMubChkLnN1YmFycmF5KDMyKlxuZSwzMiooZSsxKSkpLGUrPTE7Yy5zcGxpY2UoMCwzMiplKX1lbHNlIGZvcihiPTEwMjQrYi0oMTAyNCtiJjEwMjMpO2I8PWE7Yis9MTAyNCl0aGlzLmwoYy5zcGxpY2UoMCwzMikpO3JldHVybiB0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5mLGM9dGhpcy5nLGI9c2pjbC5iaXRBcnJheS5jb25jYXQoYixbc2pjbC5iaXRBcnJheS5wYXJ0aWFsKDEsMSldKTtmb3IoYT1iLmxlbmd0aCs0O2EmMzE7YSsrKWIucHVzaCgwKTtiLnB1c2goMCk7Yi5wdXNoKDApO2IucHVzaChNYXRoLmZsb29yKHRoaXMuYy8weDEwMDAwMDAwMCkpO2ZvcihiLnB1c2godGhpcy5jfDApO2IubGVuZ3RoOyl0aGlzLmwoYi5zcGxpY2UoMCwzMikpO3RoaXMucmVzZXQoKTtyZXR1cm4gY30sbzpbXSxpYTpbMTIzNzIyMzIsMTMyODEwODMsOTc2Mjg1OSwxOTE0NjA5LDE1MTA2NzY5LDQwOTA5MTEsNDMwODMzMSw4MjY2MTA1XSxiOltdLGthOlsyNjY2MDE4LDE1Njg5MTY1LDUwNjE0MjMsOTAzNDY4NCxcbjQ3NjQ5ODQsMzgwOTUzLDE2NTg3NzksNzE3NjQ3MiwxOTcxODYsNzM2ODYzOCwxNDk4NzkxNiwxNjc1Nzk4Niw4MDk2MTExLDE0ODAzNjksMTMwNDYzMjUsNjg5MTE1NiwxNTgxMzMzMCw1MTg3MDQzLDkyMjk3NDksMTEzMTIyMjksMjgxODY3NywxMDkzNzQ3NSw0MzI0MzA4LDExMzU1NDEsNjc0MTkzMSwxMTgwOTI5NiwxNjQ1ODA0NywxNTY2NjkxNiwxMTA0Njg1MCw2OTgxNDksMjI5OTk5LDk0NTc3NiwxMzc3NDg0NCwyNTQxODYyLDEyODU2MDQ1LDk4MTA5MTEsMTE0OTQzNjYsNzg0NDUyMCwxNTU3NjgwNiw4NTMzMzA3LDE1Nzk1MDQ0LDQzMzc2NjUsMTYyOTE3MjksNTU1MzcxMiwxNTY4NDEyMCw2NjYyNDE2LDc0MTM4MDIsMTIzMDg5MjAsMTM4MTYwMDgsNDMwMzY5OSw5MzY2NDI1LDEwMTc2NjgwLDEzMTk1ODc1LDQyOTUzNzEsNjU0NjI5MSwxMTcxMjY3NSwxNTcwODkyNCwxNTE5NDU2LDE1NzcyNTMwLDY1Njg0MjgsNjQ5NTc4NCw4NTY4Mjk3LDEzMDA3MTI1LDc0OTIzOTUsMjUxNTM1NixcbjEyNjMyNTgzLDE0NzQwMjU0LDcyNjI1ODQsMTUzNTkzMCwxMzE0NjI3OCwxNjMyMTk2NiwxODUzMjExLDI5NDI3NiwxMzA1MTAyNywxMzIyMTU2NCwxMDUxOTgwLDQwODAzMTAsNjY1MTQzNCwxNDA4ODk0MCw0Njc1NjA3XSxDOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gMHgxMDAwMDAwMDAqKGEtTWF0aC5mbG9vcihhKSl8MH1mdW5jdGlvbiBiKGEpe3JldHVybiAweDEwMDAwMDAwMDAwKihhLU1hdGguZmxvb3IoYSkpJjI1NX1mb3IodmFyIGM9MCxkPTIsZSxmOzgwPmM7ZCsrKXtmPSEwO2ZvcihlPTI7ZSplPD1kO2UrKylpZigwPT09ZCVlKXtmPSExO2JyZWFrfWYmJig4PmMmJih0aGlzLm9bMipjXT1hKE1hdGgucG93KGQsLjUpKSx0aGlzLm9bMipjKzFdPWIoTWF0aC5wb3coZCwuNSkpPDwyNHx0aGlzLmlhW2NdKSx0aGlzLmJbMipjXT1hKE1hdGgucG93KGQsMS8zKSksdGhpcy5iWzIqYysxXT1iKE1hdGgucG93KGQsMS8zKSk8PDI0fHRoaXMua2FbY10sYysrKX19LGw6ZnVuY3Rpb24oYSl7dmFyIGIsXG5jLGQ9dGhpcy5nLGU9dGhpcy5iLGY9ZFswXSxnPWRbMV0saD1kWzJdLGs9ZFszXSxuPWRbNF0sbD1kWzVdLG09ZFs2XSxwPWRbN10sej1kWzhdLEE9ZFs5XSxDPWRbMTBdLEI9ZFsxMV0sRD1kWzEyXSxQPWRbMTNdLGVhPWRbMTRdLFE9ZFsxNV0sdDtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXt0PUFycmF5KDE2MCk7Zm9yKHZhciByPTA7MzI+cjtyKyspdFtyXT1hW3JdfWVsc2UgdD1hO3ZhciByPWYsdT1nLEc9aCxFPWssSD1uLEY9bCxWPW0sST1wLHc9eix2PUEsUj1DLEo9QixTPUQsSz1QLFc9ZWEsTD1RO2ZvcihhPTA7ODA+YTthKyspe2lmKDE2PmEpYj10WzIqYV0sYz10WzIqYSsxXTtlbHNle2M9dFsyKihhLTE1KV07dmFyIHE9dFsyKihhLTE1KSsxXTtiPShxPDwzMXxjPj4+MSleKHE8PDI0fGM+Pj44KV5jPj4+Nzt2YXIgeD0oYzw8MzF8cT4+PjEpXihjPDwyNHxxPj4+OCleKGM8PDI1fHE+Pj43KTtjPXRbMiooYS0yKV07dmFyIHk9dFsyKihhLTIpKzFdLFxucT0oeTw8MTN8Yz4+PjE5KV4oYzw8M3x5Pj4+MjkpXmM+Pj42LHk9KGM8PDEzfHk+Pj4xOSleKHk8PDN8Yz4+PjI5KV4oYzw8MjZ8eT4+PjYpLFg9dFsyKihhLTcpXSxZPXRbMiooYS0xNildLE09dFsyKihhLTE2KSsxXTtjPXgrdFsyKihhLTcpKzFdO2I9YitYKyhjPj4+MDx4Pj4+MD8xOjApO2MrPXk7Yis9cSsoYz4+PjA8eT4+PjA/MTowKTtjKz1NO2IrPVkrKGM+Pj4wPE0+Pj4wPzE6MCl9dFsyKmFdPWJ8PTA7dFsyKmErMV09Y3w9MDt2YXIgWD13JlJefncmUyxmYT12JkpefnYmSyx5PXImR15yJkheRyZILGphPXUmRV51JkZeRSZGLFk9KHU8PDR8cj4+PjI4KV4ocjw8MzB8dT4+PjIpXihyPDwyNXx1Pj4+NyksTT0ocjw8NHx1Pj4+MjgpXih1PDwzMHxyPj4+MileKHU8PDI1fHI+Pj43KSxrYT1lWzIqYV0sZ2E9ZVsyKmErMV0scT1MKygodzw8MTh8dj4+PjE0KV4odzw8MTR8dj4+PjE4KV4odjw8MjN8dz4+PjkpKSx4PVcrKCh2PDwxOHx3Pj4+MTQpXih2PDwxNHx3Pj4+MTgpXih3PDxcbjIzfHY+Pj45KSkrKHE+Pj4wPEw+Pj4wPzE6MCkscT1xK2ZhLHg9eCsoWCsocT4+PjA8ZmE+Pj4wPzE6MCkpLHE9cStnYSx4PXgrKGthKyhxPj4+MDxnYT4+PjA/MTowKSkscT1xK2N8MCx4PXgrKGIrKHE+Pj4wPGM+Pj4wPzE6MCkpO2M9TStqYTtiPVkreSsoYz4+PjA8TT4+PjA/MTowKTtXPVM7TD1LO1M9UjtLPUo7Uj13O0o9djt2PUkrcXwwO3c9Vit4Kyh2Pj4+MDxJPj4+MD8xOjApfDA7Vj1IO0k9RjtIPUc7Rj1FO0c9cjtFPXU7dT1xK2N8MDtyPXgrYisodT4+PjA8cT4+PjA/MTowKXwwfWc9ZFsxXT1nK3V8MDtkWzBdPWYrcisoZz4+PjA8dT4+PjA/MTowKXwwO2s9ZFszXT1rK0V8MDtkWzJdPWgrRysoaz4+PjA8RT4+PjA/MTowKXwwO2w9ZFs1XT1sK0Z8MDtkWzRdPW4rSCsobD4+PjA8Rj4+PjA/MTowKXwwO3A9ZFs3XT1wK0l8MDtkWzZdPW0rVisocD4+PjA8ST4+PjA/MTowKXwwO0E9ZFs5XT1BK3Z8MDtkWzhdPXordysoQT4+PjA8dj4+PjA/MTowKXwwO0I9ZFsxMV09QitKfFxuMDtkWzEwXT1DK1IrKEI+Pj4wPEo+Pj4wPzE6MCl8MDtQPWRbMTNdPVArS3wwO2RbMTJdPUQrUysoUD4+PjA8Sz4+PjA/MTowKXwwO1E9ZFsxNV09UStMfDA7ZFsxNF09ZWErVysoUT4+PjA8TD4+PjA/MTowKXwwfX07XG5zamNsLm1vZGUuY2NtPXtuYW1lOlwiY2NtXCIsRjpbXSxsaXN0ZW5Qcm9ncmVzczpmdW5jdGlvbihhKXtzamNsLm1vZGUuY2NtLkYucHVzaChhKX0sdW5MaXN0ZW5Qcm9ncmVzczpmdW5jdGlvbihhKXthPXNqY2wubW9kZS5jY20uRi5pbmRleE9mKGEpOy0xPGEmJnNqY2wubW9kZS5jY20uRi5zcGxpY2UoYSwxKX0sZGE6ZnVuY3Rpb24oYSl7dmFyIGI9c2pjbC5tb2RlLmNjbS5GLnNsaWNlKCksYztmb3IoYz0wO2M8Yi5sZW5ndGg7Yys9MSliW2NdKGEpfSxlbmNyeXB0OmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZz1iLnNsaWNlKDApLGg9c2pjbC5iaXRBcnJheSxrPWguYml0TGVuZ3RoKGMpLzgsbj1oLmJpdExlbmd0aChnKS84O2U9ZXx8NjQ7ZD1kfHxbXTtpZig3PmspdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJjY206IGl2IG11c3QgYmUgYXQgbGVhc3QgNyBieXRlc1wiKTtmb3IoZj0yOzQ+ZiYmbj4+PjgqZjtmKyspO2Y8MTUtayYmKGY9MTUtayk7Yz1oLmNsYW1wKGMsXG44KigxNS1mKSk7Yj1zamNsLm1vZGUuY2NtLlUoYSxiLGMsZCxlLGYpO2c9c2pjbC5tb2RlLmNjbS5WKGEsZyxjLGIsZSxmKTtyZXR1cm4gaC5jb25jYXQoZy5kYXRhLGcudGFnKX0sZGVjcnlwdDpmdW5jdGlvbihhLGIsYyxkLGUpe2U9ZXx8NjQ7ZD1kfHxbXTt2YXIgZj1zamNsLmJpdEFycmF5LGc9Zi5iaXRMZW5ndGgoYykvOCxoPWYuYml0TGVuZ3RoKGIpLGs9Zi5jbGFtcChiLGgtZSksbj1mLmJpdFNsaWNlKGIsaC1lKSxoPShoLWUpLzg7aWYoNz5nKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiY2NtOiBpdiBtdXN0IGJlIGF0IGxlYXN0IDcgYnl0ZXNcIik7Zm9yKGI9Mjs0PmImJmg+Pj44KmI7YisrKTtiPDE1LWcmJihiPTE1LWcpO2M9Zi5jbGFtcChjLDgqKDE1LWIpKTtrPXNqY2wubW9kZS5jY20uVihhLGssYyxuLGUsYik7YT1zamNsLm1vZGUuY2NtLlUoYSxrLmRhdGEsYyxkLGUsYik7aWYoIWYuZXF1YWwoay50YWcsYSkpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmNvcnJ1cHQoXCJjY206IHRhZyBkb2Vzbid0IG1hdGNoXCIpO1xucmV0dXJuIGsuZGF0YX0sbWE6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPVtdLGg9c2pjbC5iaXRBcnJheSxrPWguUDtkPVtoLnBhcnRpYWwoOCwoYi5sZW5ndGg/NjQ6MCl8ZC0yPDwyfGYtMSldO2Q9aC5jb25jYXQoZCxjKTtkWzNdfD1lO2Q9YS5lbmNyeXB0KGQpO2lmKGIubGVuZ3RoKWZvcihjPWguYml0TGVuZ3RoKGIpLzgsNjUyNzk+PWM/Zz1baC5wYXJ0aWFsKDE2LGMpXToweGZmZmZmZmZmPj1jJiYoZz1oLmNvbmNhdChbaC5wYXJ0aWFsKDE2LDY1NTM0KV0sW2NdKSksZz1oLmNvbmNhdChnLGIpLGI9MDtiPGcubGVuZ3RoO2IrPTQpZD1hLmVuY3J5cHQoayhkLGcuc2xpY2UoYixiKzQpLmNvbmNhdChbMCwwLDBdKSkpO3JldHVybiBkfSxVOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1zamNsLmJpdEFycmF5LGg9Zy5QO2UvPTg7aWYoZSUyfHw0PmV8fDE2PGUpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJjY206IGludmFsaWQgdGFnIGxlbmd0aFwiKTtcbmlmKDB4ZmZmZmZmZmY8ZC5sZW5ndGh8fDB4ZmZmZmZmZmY8Yi5sZW5ndGgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmJ1ZyhcImNjbTogY2FuJ3QgZGVhbCB3aXRoIDRHaUIgb3IgbW9yZSBkYXRhXCIpO2M9c2pjbC5tb2RlLmNjbS5tYShhLGQsYyxlLGcuYml0TGVuZ3RoKGIpLzgsZik7Zm9yKGQ9MDtkPGIubGVuZ3RoO2QrPTQpYz1hLmVuY3J5cHQoaChjLGIuc2xpY2UoZCxkKzQpLmNvbmNhdChbMCwwLDBdKSkpO3JldHVybiBnLmNsYW1wKGMsOCplKX0sVjpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGcsaD1zamNsLmJpdEFycmF5O2c9aC5QO3ZhciBrPWIubGVuZ3RoLG49aC5iaXRMZW5ndGgoYiksbD1rLzUwLG09bDtjPWguY29uY2F0KFtoLnBhcnRpYWwoOCxmLTEpXSxjKS5jb25jYXQoWzAsMCwwXSkuc2xpY2UoMCw0KTtkPWguYml0U2xpY2UoZyhkLGEuZW5jcnlwdChjKSksMCxlKTtpZighaylyZXR1cm57dGFnOmQsZGF0YTpbXX07Zm9yKGc9MDtnPGs7Zys9NClnPmwmJihzamNsLm1vZGUuY2NtLmRhKGcvXG5rKSxsKz1tKSxjWzNdKyssZT1hLmVuY3J5cHQoYyksYltnXV49ZVswXSxiW2crMV1ePWVbMV0sYltnKzJdXj1lWzJdLGJbZyszXV49ZVszXTtyZXR1cm57dGFnOmQsZGF0YTpoLmNsYW1wKGIsbil9fX07c2pjbC5taXNjLmhtYWM9ZnVuY3Rpb24oYSxiKXt0aGlzLlc9Yj1ifHxzamNsLmhhc2guc2hhMjU2O3ZhciBjPVtbXSxbXV0sZCxlPWIucHJvdG90eXBlLmJsb2NrU2l6ZS8zMjt0aGlzLkI9W25ldyBiLG5ldyBiXTthLmxlbmd0aD5lJiYoYT1iLmhhc2goYSkpO2ZvcihkPTA7ZDxlO2QrKyljWzBdW2RdPWFbZF1eOTA5NTIyNDg2LGNbMV1bZF09YVtkXV4xNTQ5NTU2ODI4O3RoaXMuQlswXS51cGRhdGUoY1swXSk7dGhpcy5CWzFdLnVwZGF0ZShjWzFdKTt0aGlzLk89bmV3IGIodGhpcy5CWzBdKX07XG5zamNsLm1pc2MuaG1hYy5wcm90b3R5cGUuZW5jcnlwdD1zamNsLm1pc2MuaG1hYy5wcm90b3R5cGUubWFjPWZ1bmN0aW9uKGEpe2lmKHRoaXMuWil0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImVuY3J5cHQgb24gYWxyZWFkeSB1cGRhdGVkIGhtYWMgY2FsbGVkIVwiKTt0aGlzLnVwZGF0ZShhKTtyZXR1cm4gdGhpcy5kaWdlc3QoYSl9O3NqY2wubWlzYy5obWFjLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuTz1uZXcgdGhpcy5XKHRoaXMuQlswXSk7dGhpcy5aPSExfTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGEpe3RoaXMuWj0hMDt0aGlzLk8udXBkYXRlKGEpfTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5PLmZpbmFsaXplKCksYT0obmV3IHRoaXMuVyh0aGlzLkJbMV0pKS51cGRhdGUoYSkuZmluYWxpemUoKTt0aGlzLnJlc2V0KCk7cmV0dXJuIGF9O1xuc2pjbC5taXNjLnBia2RmMj1mdW5jdGlvbihhLGIsYyxkLGUpe2M9Y3x8MUU0O2lmKDA+ZHx8MD5jKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiaW52YWxpZCBwYXJhbXMgdG8gcGJrZGYyXCIpO1wic3RyaW5nXCI9PT10eXBlb2YgYSYmKGE9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhhKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBiJiYoYj1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGIpKTtlPWV8fHNqY2wubWlzYy5obWFjO2E9bmV3IGUoYSk7dmFyIGYsZyxoLGssbj1bXSxsPXNqY2wuYml0QXJyYXk7Zm9yKGs9MTszMipuLmxlbmd0aDwoZHx8MSk7aysrKXtlPWY9YS5lbmNyeXB0KGwuY29uY2F0KGIsW2tdKSk7Zm9yKGc9MTtnPGM7ZysrKWZvcihmPWEuZW5jcnlwdChmKSxoPTA7aDxmLmxlbmd0aDtoKyspZVtoXV49ZltoXTtuPW4uY29uY2F0KGUpfWQmJihuPWwuY2xhbXAobixkKSk7cmV0dXJuIG59O1xuc2pjbC5wcm5nPWZ1bmN0aW9uKGEpe3RoaXMuaD1bbmV3IHNqY2wuaGFzaC5zaGEyNTZdO3RoaXMucz1bMF07dGhpcy5OPTA7dGhpcy5HPXt9O3RoaXMuTT0wO3RoaXMuVD17fTt0aGlzLlg9dGhpcy5pPXRoaXMudT10aGlzLmZhPTA7dGhpcy5iPVswLDAsMCwwLDAsMCwwLDBdO3RoaXMubT1bMCwwLDAsMF07dGhpcy5LPXZvaWQgMDt0aGlzLkw9YTt0aGlzLkQ9ITE7dGhpcy5KPXtwcm9ncmVzczp7fSxzZWVkZWQ6e319O3RoaXMuQT10aGlzLmVhPTA7dGhpcy5IPTE7dGhpcy5JPTI7dGhpcy5hYT0weDEwMDAwO3RoaXMuUj1bMCw0OCw2NCw5NiwxMjgsMTkyLDB4MTAwLDM4NCw1MTIsNzY4LDEwMjRdO3RoaXMuYmE9M0U0O3RoaXMuJD04MH07XG5zamNsLnBybmcucHJvdG90eXBlPXtyYW5kb21Xb3JkczpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ7ZD10aGlzLmlzUmVhZHkoYik7dmFyIGU7aWYoZD09PXRoaXMuQSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24ubm90UmVhZHkoXCJnZW5lcmF0b3IgaXNuJ3Qgc2VlZGVkXCIpO2lmKGQmdGhpcy5JKXtkPSEoZCZ0aGlzLkgpO2U9W107dmFyIGY9MCxnO3RoaXMuWD1lWzBdPShuZXcgRGF0ZSkudmFsdWVPZigpK3RoaXMuYmE7Zm9yKGc9MDsxNj5nO2crKyllLnB1c2goMHgxMDAwMDAwMDAqTWF0aC5yYW5kb20oKXwwKTtmb3IoZz0wO2c8dGhpcy5oLmxlbmd0aCYmKGU9ZS5jb25jYXQodGhpcy5oW2ddLmZpbmFsaXplKCkpLGYrPXRoaXMuc1tnXSx0aGlzLnNbZ109MCxkfHwhKHRoaXMuTiYxPDxnKSk7ZysrKTt0aGlzLk4+PTE8PHRoaXMuaC5sZW5ndGgmJih0aGlzLmgucHVzaChuZXcgc2pjbC5oYXNoLnNoYTI1NiksdGhpcy5zLnB1c2goMCkpO3RoaXMuaS09ZjtmPnRoaXMudSYmKHRoaXMudT1cbmYpO3RoaXMuTisrO3RoaXMuYj1zamNsLmhhc2guc2hhMjU2Lmhhc2godGhpcy5iLmNvbmNhdChlKSk7dGhpcy5LPW5ldyBzamNsLmNpcGhlci5hZXModGhpcy5iKTtmb3IoZD0wOzQ+ZCYmKHRoaXMubVtkXT10aGlzLm1bZF0rMXwwLCF0aGlzLm1bZF0pO2QrKyk7fWZvcihkPTA7ZDxhO2QrPTQpMD09PShkKzEpJXRoaXMuYWEmJmJhKHRoaXMpLGU9Tih0aGlzKSxjLnB1c2goZVswXSxlWzFdLGVbMl0sZVszXSk7YmEodGhpcyk7cmV0dXJuIGMuc2xpY2UoMCxhKX0sc2V0RGVmYXVsdFBhcmFub2lhOmZ1bmN0aW9uKGEsYil7aWYoMD09PWEmJlwiU2V0dGluZyBwYXJhbm9pYT0wIHdpbGwgcnVpbiB5b3VyIHNlY3VyaXR5OyB1c2UgaXQgb25seSBmb3IgdGVzdGluZ1wiIT09Yil0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcIlNldHRpbmcgcGFyYW5vaWE9MCB3aWxsIHJ1aW4geW91ciBzZWN1cml0eTsgdXNlIGl0IG9ubHkgZm9yIHRlc3RpbmdcIik7dGhpcy5MPWF9LGFkZEVudHJvcHk6ZnVuY3Rpb24oYSxcbmIsYyl7Yz1jfHxcInVzZXJcIjt2YXIgZCxlLGY9KG5ldyBEYXRlKS52YWx1ZU9mKCksZz10aGlzLkdbY10saD10aGlzLmlzUmVhZHkoKSxrPTA7ZD10aGlzLlRbY107dm9pZCAwPT09ZCYmKGQ9dGhpcy5UW2NdPXRoaXMuZmErKyk7dm9pZCAwPT09ZyYmKGc9dGhpcy5HW2NdPTApO3RoaXMuR1tjXT0odGhpcy5HW2NdKzEpJXRoaXMuaC5sZW5ndGg7c3dpdGNoKHR5cGVvZiBhKXtjYXNlIFwibnVtYmVyXCI6dm9pZCAwPT09YiYmKGI9MSk7dGhpcy5oW2ddLnVwZGF0ZShbZCx0aGlzLk0rKywxLGIsZiwxLGF8MF0pO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKTtpZihcIltvYmplY3QgVWludDMyQXJyYXldXCI9PT1jKXtlPVtdO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspZS5wdXNoKGFbY10pO2E9ZX1lbHNlIGZvcihcIltvYmplY3QgQXJyYXldXCIhPT1jJiYoaz0xKSxjPTA7YzxhLmxlbmd0aCYmIWs7YysrKVwibnVtYmVyXCIhPT10eXBlb2YgYVtjXSYmXG4oaz0xKTtpZighayl7aWYodm9pZCAwPT09Yilmb3IoYz1iPTA7YzxhLmxlbmd0aDtjKyspZm9yKGU9YVtjXTswPGU7KWIrKyxlPWU+Pj4xO3RoaXMuaFtnXS51cGRhdGUoW2QsdGhpcy5NKyssMixiLGYsYS5sZW5ndGhdLmNvbmNhdChhKSl9YnJlYWs7Y2FzZSBcInN0cmluZ1wiOnZvaWQgMD09PWImJihiPWEubGVuZ3RoKTt0aGlzLmhbZ10udXBkYXRlKFtkLHRoaXMuTSsrLDMsYixmLGEubGVuZ3RoXSk7dGhpcy5oW2ddLnVwZGF0ZShhKTticmVhaztkZWZhdWx0Oms9MX1pZihrKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJyYW5kb206IGFkZEVudHJvcHkgb25seSBzdXBwb3J0cyBudW1iZXIsIGFycmF5IG9mIG51bWJlcnMgb3Igc3RyaW5nXCIpO3RoaXMuc1tnXSs9Yjt0aGlzLmkrPWI7aD09PXRoaXMuQSYmKHRoaXMuaXNSZWFkeSgpIT09dGhpcy5BJiZjYShcInNlZWRlZFwiLE1hdGgubWF4KHRoaXMudSx0aGlzLmkpKSxjYShcInByb2dyZXNzXCIsdGhpcy5nZXRQcm9ncmVzcygpKSl9LFxuaXNSZWFkeTpmdW5jdGlvbihhKXthPXRoaXMuUlt2b2lkIDAhPT1hP2E6dGhpcy5MXTtyZXR1cm4gdGhpcy51JiZ0aGlzLnU+PWE/dGhpcy5zWzBdPnRoaXMuJCYmKG5ldyBEYXRlKS52YWx1ZU9mKCk+dGhpcy5YP3RoaXMuSXx0aGlzLkg6dGhpcy5IOnRoaXMuaT49YT90aGlzLkl8dGhpcy5BOnRoaXMuQX0sZ2V0UHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7YT10aGlzLlJbYT9hOnRoaXMuTF07cmV0dXJuIHRoaXMudT49YT8xOnRoaXMuaT5hPzE6dGhpcy5pL2F9LHN0YXJ0Q29sbGVjdG9yczpmdW5jdGlvbigpe2lmKCF0aGlzLkQpe3RoaXMuYT17bG9hZFRpbWVDb2xsZWN0b3I6Tyh0aGlzLHRoaXMubGEpLG1vdXNlQ29sbGVjdG9yOk8odGhpcyx0aGlzLm5hKSxrZXlib2FyZENvbGxlY3RvcjpPKHRoaXMsdGhpcy5qYSksYWNjZWxlcm9tZXRlckNvbGxlY3RvcjpPKHRoaXMsdGhpcy5jYSksdG91Y2hDb2xsZWN0b3I6Tyh0aGlzLHRoaXMucGEpfTtpZih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixcbnRoaXMuYS5sb2FkVGltZUNvbGxlY3RvciwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0aGlzLmEubW91c2VDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIix0aGlzLmEua2V5Ym9hcmRDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZGV2aWNlbW90aW9uXCIsdGhpcy5hLmFjY2VsZXJvbWV0ZXJDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsdGhpcy5hLnRvdWNoQ29sbGVjdG9yLCExKTtlbHNlIGlmKGRvY3VtZW50LmF0dGFjaEV2ZW50KWRvY3VtZW50LmF0dGFjaEV2ZW50KFwib25sb2FkXCIsdGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yKSxkb2N1bWVudC5hdHRhY2hFdmVudChcIm9ubW91c2Vtb3ZlXCIsdGhpcy5hLm1vdXNlQ29sbGVjdG9yKSxkb2N1bWVudC5hdHRhY2hFdmVudChcImtleXByZXNzXCIsdGhpcy5hLmtleWJvYXJkQ29sbGVjdG9yKTtlbHNlIHRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJjYW4ndCBhdHRhY2ggZXZlbnRcIik7XG50aGlzLkQ9ITB9fSxzdG9wQ29sbGVjdG9yczpmdW5jdGlvbigpe3RoaXMuRCYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyPyh3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIix0aGlzLmEubG9hZFRpbWVDb2xsZWN0b3IsITEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5hLm1vdXNlQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsdGhpcy5hLmtleWJvYXJkQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImRldmljZW1vdGlvblwiLHRoaXMuYS5hY2NlbGVyb21ldGVyQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHRoaXMuYS50b3VjaENvbGxlY3RvciwhMSkpOmRvY3VtZW50LmRldGFjaEV2ZW50JiYoZG9jdW1lbnQuZGV0YWNoRXZlbnQoXCJvbmxvYWRcIix0aGlzLmEubG9hZFRpbWVDb2xsZWN0b3IpLGRvY3VtZW50LmRldGFjaEV2ZW50KFwib25tb3VzZW1vdmVcIixcbnRoaXMuYS5tb3VzZUNvbGxlY3RvciksZG9jdW1lbnQuZGV0YWNoRXZlbnQoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3RvcikpLHRoaXMuRD0hMSl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLkpbYV1bdGhpcy5lYSsrXT1ifSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPXRoaXMuSlthXSxmPVtdO2ZvcihkIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShkKSYmZVtkXT09PWImJmYucHVzaChkKTtmb3IoYz0wO2M8Zi5sZW5ndGg7YysrKWQ9ZltjXSxkZWxldGUgZVtkXX0samE6ZnVuY3Rpb24oKXtUKHRoaXMsMSl9LG5hOmZ1bmN0aW9uKGEpe3ZhciBiLGM7dHJ5e2I9YS54fHxhLmNsaWVudFh8fGEub2Zmc2V0WHx8MCxjPWEueXx8YS5jbGllbnRZfHxhLm9mZnNldFl8fDB9Y2F0Y2goZCl7Yz1iPTB9MCE9YiYmMCE9YyYmdGhpcy5hZGRFbnRyb3B5KFtiLGNdLDIsXCJtb3VzZVwiKTtUKHRoaXMsMCl9LHBhOmZ1bmN0aW9uKGEpe2E9XG5hLnRvdWNoZXNbMF18fGEuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5hZGRFbnRyb3B5KFthLnBhZ2VYfHxhLmNsaWVudFgsYS5wYWdlWXx8YS5jbGllbnRZXSwxLFwidG91Y2hcIik7VCh0aGlzLDApfSxsYTpmdW5jdGlvbigpe1QodGhpcywyKX0sY2E6ZnVuY3Rpb24oYSl7YT1hLmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkueHx8YS5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5Lnl8fGEuYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eS56O2lmKHdpbmRvdy5vcmllbnRhdGlvbil7dmFyIGI9d2luZG93Lm9yaWVudGF0aW9uO1wibnVtYmVyXCI9PT10eXBlb2YgYiYmdGhpcy5hZGRFbnRyb3B5KGIsMSxcImFjY2VsZXJvbWV0ZXJcIil9YSYmdGhpcy5hZGRFbnRyb3B5KGEsMixcImFjY2VsZXJvbWV0ZXJcIik7VCh0aGlzLDApfX07XG5mdW5jdGlvbiBjYShhLGIpe3ZhciBjLGQ9c2pjbC5yYW5kb20uSlthXSxlPVtdO2ZvcihjIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShjKSYmZS5wdXNoKGRbY10pO2ZvcihjPTA7YzxlLmxlbmd0aDtjKyspZVtjXShiKX1mdW5jdGlvbiBUKGEsYil7XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5wZXJmb3JtYW5jZSYmXCJmdW5jdGlvblwiPT09dHlwZW9mIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3c/YS5hZGRFbnRyb3B5KHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSxiLFwibG9hZHRpbWVcIik6YS5hZGRFbnRyb3B5KChuZXcgRGF0ZSkudmFsdWVPZigpLGIsXCJsb2FkdGltZVwiKX1mdW5jdGlvbiBiYShhKXthLmI9TihhKS5jb25jYXQoTihhKSk7YS5LPW5ldyBzamNsLmNpcGhlci5hZXMoYS5iKX1mdW5jdGlvbiBOKGEpe2Zvcih2YXIgYj0wOzQ+YiYmKGEubVtiXT1hLm1bYl0rMXwwLCFhLm1bYl0pO2IrKyk7cmV0dXJuIGEuSy5lbmNyeXB0KGEubSl9XG5mdW5jdGlvbiBPKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7Yi5hcHBseShhLGFyZ3VtZW50cyl9fXNqY2wucmFuZG9tPW5ldyBzamNsLnBybmcoNik7XG5hOnRyeXt2YXIgVSxkYSxaLGhhO2lmKGhhPVwidW5kZWZpbmVkXCIhPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cyl7dmFyIGlhO3RyeXtpYT1yZXF1aXJlKFwiY3J5cHRvXCIpfWNhdGNoKGEpe2lhPW51bGx9aGE9ZGE9aWF9aWYoaGEmJmRhLnJhbmRvbUJ5dGVzKVU9ZGEucmFuZG9tQnl0ZXMoMTI4KSxVPW5ldyBVaW50MzJBcnJheSgobmV3IFVpbnQ4QXJyYXkoVSkpLmJ1ZmZlciksc2pjbC5yYW5kb20uYWRkRW50cm9weShVLDEwMjQsXCJjcnlwdG9bJ3JhbmRvbUJ5dGVzJ11cIik7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIHdpbmRvdyYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBVaW50MzJBcnJheSl7Wj1uZXcgVWludDMyQXJyYXkoMzIpO2lmKHdpbmRvdy5jcnlwdG8mJndpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFopO2Vsc2UgaWYod2luZG93Lm1zQ3J5cHRvJiZ3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoWik7XG5lbHNlIGJyZWFrIGE7c2pjbC5yYW5kb20uYWRkRW50cm9weShaLDEwMjQsXCJjcnlwdG9bJ2dldFJhbmRvbVZhbHVlcyddXCIpfX1jYXRjaChhKXtcInVuZGVmaW5lZFwiIT09dHlwZW9mIHdpbmRvdyYmd2luZG93LmNvbnNvbGUmJihjb25zb2xlLmxvZyhcIlRoZXJlIHdhcyBhbiBlcnJvciBjb2xsZWN0aW5nIGVudHJvcHkgZnJvbSB0aGUgYnJvd3NlcjpcIiksY29uc29sZS5sb2coYSkpfVxuc2pjbC5qc29uPXtkZWZhdWx0czp7djoxLGl0ZXI6MUU0LGtzOjEyOCx0czo2NCxtb2RlOlwiY2NtXCIsYWRhdGE6XCJcIixjaXBoZXI6XCJhZXNcIn0saGE6ZnVuY3Rpb24oYSxiLGMsZCl7Yz1jfHx7fTtkPWR8fHt9O3ZhciBlPXNqY2wuanNvbixmPWUuaih7aXY6c2pjbC5yYW5kb20ucmFuZG9tV29yZHMoNCwwKX0sZS5kZWZhdWx0cyksZztlLmooZixjKTtjPWYuYWRhdGE7XCJzdHJpbmdcIj09PXR5cGVvZiBmLnNhbHQmJihmLnNhbHQ9c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGYuc2FsdCkpO1wic3RyaW5nXCI9PT10eXBlb2YgZi5pdiYmKGYuaXY9c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGYuaXYpKTtpZighc2pjbC5tb2RlW2YubW9kZV18fCFzamNsLmNpcGhlcltmLmNpcGhlcl18fFwic3RyaW5nXCI9PT10eXBlb2YgYSYmMTAwPj1mLml0ZXJ8fDY0IT09Zi50cyYmOTYhPT1mLnRzJiYxMjghPT1mLnRzfHwxMjghPT1mLmtzJiYxOTIhPT1mLmtzJiYweDEwMCE9PWYua3N8fDI+Zi5pdi5sZW5ndGh8fFxuNDxmLml2Lmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZW5jcnlwdDogaW52YWxpZCBwYXJhbWV0ZXJzXCIpO1wic3RyaW5nXCI9PT10eXBlb2YgYT8oZz1zamNsLm1pc2MuY2FjaGVkUGJrZGYyKGEsZiksYT1nLmtleS5zbGljZSgwLGYua3MvMzIpLGYuc2FsdD1nLnNhbHQpOnNqY2wuZWNjJiZhIGluc3RhbmNlb2Ygc2pjbC5lY2MuZWxHYW1hbC5wdWJsaWNLZXkmJihnPWEua2VtKCksZi5rZW10YWc9Zy50YWcsYT1nLmtleS5zbGljZSgwLGYua3MvMzIpKTtcInN0cmluZ1wiPT09dHlwZW9mIGImJihiPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYikpO1wic3RyaW5nXCI9PT10eXBlb2YgYyYmKGYuYWRhdGE9Yz1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGMpKTtnPW5ldyBzamNsLmNpcGhlcltmLmNpcGhlcl0oYSk7ZS5qKGQsZik7ZC5rZXk9YTtmLmN0PVwiY2NtXCI9PT1mLm1vZGUmJnNqY2wuYXJyYXlCdWZmZXImJnNqY2wuYXJyYXlCdWZmZXIuY2NtJiZcbmIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9zamNsLmFycmF5QnVmZmVyLmNjbS5lbmNyeXB0KGcsYixmLml2LGMsZi50cyk6c2pjbC5tb2RlW2YubW9kZV0uZW5jcnlwdChnLGIsZi5pdixjLGYudHMpO3JldHVybiBmfSxlbmNyeXB0OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXNqY2wuanNvbixmPWUuaGEuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiBlLmVuY29kZShmKX0sZ2E6ZnVuY3Rpb24oYSxiLGMsZCl7Yz1jfHx7fTtkPWR8fHt9O3ZhciBlPXNqY2wuanNvbjtiPWUuaihlLmooZS5qKHt9LGUuZGVmYXVsdHMpLGIpLGMsITApO3ZhciBmLGc7Zj1iLmFkYXRhO1wic3RyaW5nXCI9PT10eXBlb2YgYi5zYWx0JiYoYi5zYWx0PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhiLnNhbHQpKTtcInN0cmluZ1wiPT09dHlwZW9mIGIuaXYmJihiLml2PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhiLml2KSk7aWYoIXNqY2wubW9kZVtiLm1vZGVdfHwhc2pjbC5jaXBoZXJbYi5jaXBoZXJdfHxcInN0cmluZ1wiPT09XG50eXBlb2YgYSYmMTAwPj1iLml0ZXJ8fDY0IT09Yi50cyYmOTYhPT1iLnRzJiYxMjghPT1iLnRzfHwxMjghPT1iLmtzJiYxOTIhPT1iLmtzJiYweDEwMCE9PWIua3N8fCFiLml2fHwyPmIuaXYubGVuZ3RofHw0PGIuaXYubGVuZ3RoKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBkZWNyeXB0OiBpbnZhbGlkIHBhcmFtZXRlcnNcIik7XCJzdHJpbmdcIj09PXR5cGVvZiBhPyhnPXNqY2wubWlzYy5jYWNoZWRQYmtkZjIoYSxiKSxhPWcua2V5LnNsaWNlKDAsYi5rcy8zMiksYi5zYWx0PWcuc2FsdCk6c2pjbC5lY2MmJmEgaW5zdGFuY2VvZiBzamNsLmVjYy5lbEdhbWFsLnNlY3JldEtleSYmKGE9YS51bmtlbShzamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYi5rZW10YWcpKS5zbGljZSgwLGIua3MvMzIpKTtcInN0cmluZ1wiPT09dHlwZW9mIGYmJihmPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoZikpO2c9bmV3IHNqY2wuY2lwaGVyW2IuY2lwaGVyXShhKTtmPVwiY2NtXCI9PT1cbmIubW9kZSYmc2pjbC5hcnJheUJ1ZmZlciYmc2pjbC5hcnJheUJ1ZmZlci5jY20mJmIuY3QgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9zamNsLmFycmF5QnVmZmVyLmNjbS5kZWNyeXB0KGcsYi5jdCxiLml2LGIudGFnLGYsYi50cyk6c2pjbC5tb2RlW2IubW9kZV0uZGVjcnlwdChnLGIuY3QsYi5pdixmLGIudHMpO2UuaihkLGIpO2Qua2V5PWE7cmV0dXJuIDE9PT1jLnJhdz9mOnNqY2wuY29kZWMudXRmOFN0cmluZy5mcm9tQml0cyhmKX0sZGVjcnlwdDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1zamNsLmpzb247cmV0dXJuIGUuZ2EoYSxlLmRlY29kZShiKSxjLGQpfSxlbmNvZGU6ZnVuY3Rpb24oYSl7dmFyIGIsYz1cIntcIixkPVwiXCI7Zm9yKGIgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGIpKXtpZighYi5tYXRjaCgvXlthLXowLTldKyQvaSkpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGVuY29kZTogaW52YWxpZCBwcm9wZXJ0eSBuYW1lXCIpO2MrPWQrJ1wiJytcbmIrJ1wiOic7ZD1cIixcIjtzd2l0Y2godHlwZW9mIGFbYl0pe2Nhc2UgXCJudW1iZXJcIjpjYXNlIFwiYm9vbGVhblwiOmMrPWFbYl07YnJlYWs7Y2FzZSBcInN0cmluZ1wiOmMrPSdcIicrZXNjYXBlKGFbYl0pKydcIic7YnJlYWs7Y2FzZSBcIm9iamVjdFwiOmMrPSdcIicrc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMoYVtiXSwwKSsnXCInO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmJ1ZyhcImpzb24gZW5jb2RlOiB1bnN1cHBvcnRlZCB0eXBlXCIpO319cmV0dXJuIGMrXCJ9XCJ9LGRlY29kZTpmdW5jdGlvbihhKXthPWEucmVwbGFjZSgvXFxzL2csXCJcIik7aWYoIWEubWF0Y2goL15cXHsuKlxcfSQvKSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZGVjb2RlOiB0aGlzIGlzbid0IGpzb24hXCIpO2E9YS5yZXBsYWNlKC9eXFx7fFxcfSQvZyxcIlwiKS5zcGxpdCgvLC8pO3ZhciBiPXt9LGMsZDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXtpZighKGQ9YVtjXS5tYXRjaCgvXlxccyooPzooW1wiJ10/KShbYS16XVthLXowLTldKilcXDEpXFxzKjpcXHMqKD86KC0/XFxkKyl8XCIoW2EtejAtOStcXC8lKl8uQD1cXC1dKilcInwodHJ1ZXxmYWxzZSkpJC9pKSkpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGRlY29kZTogdGhpcyBpc24ndCBqc29uIVwiKTtcbm51bGwhPWRbM10/YltkWzJdXT1wYXJzZUludChkWzNdLDEwKTpudWxsIT1kWzRdP2JbZFsyXV09ZFsyXS5tYXRjaCgvXihjdHxhZGF0YXxzYWx0fGl2KSQvKT9zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoZFs0XSk6dW5lc2NhcGUoZFs0XSk6bnVsbCE9ZFs1XSYmKGJbZFsyXV09XCJ0cnVlXCI9PT1kWzVdKX1yZXR1cm4gYn0sajpmdW5jdGlvbihhLGIsYyl7dm9pZCAwPT09YSYmKGE9e30pO2lmKHZvaWQgMD09PWIpcmV0dXJuIGE7Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSl7aWYoYyYmdm9pZCAwIT09YVtkXSYmYVtkXSE9PWJbZF0pdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJyZXF1aXJlZCBwYXJhbWV0ZXIgb3ZlcnJpZGRlblwiKTthW2RdPWJbZF19cmV0dXJuIGF9LHJhOmZ1bmN0aW9uKGEsYil7dmFyIGM9e30sZDtmb3IoZCBpbiBhKWEuaGFzT3duUHJvcGVydHkoZCkmJmFbZF0hPT1iW2RdJiYoY1tkXT1hW2RdKTtyZXR1cm4gY30scWE6ZnVuY3Rpb24oYSxcbmIpe3ZhciBjPXt9LGQ7Zm9yKGQ9MDtkPGIubGVuZ3RoO2QrKyl2b2lkIDAhPT1hW2JbZF1dJiYoY1tiW2RdXT1hW2JbZF1dKTtyZXR1cm4gY319O3NqY2wuZW5jcnlwdD1zamNsLmpzb24uZW5jcnlwdDtzamNsLmRlY3J5cHQ9c2pjbC5qc29uLmRlY3J5cHQ7c2pjbC5taXNjLm9hPXt9O3NqY2wubWlzYy5jYWNoZWRQYmtkZjI9ZnVuY3Rpb24oYSxiKXt2YXIgYz1zamNsLm1pc2Mub2EsZDtiPWJ8fHt9O2Q9Yi5pdGVyfHwxRTM7Yz1jW2FdPWNbYV18fHt9O2Q9Y1tkXT1jW2RdfHx7Zmlyc3RTYWx0OmIuc2FsdCYmYi5zYWx0Lmxlbmd0aD9iLnNhbHQuc2xpY2UoMCk6c2pjbC5yYW5kb20ucmFuZG9tV29yZHMoMiwwKX07Yz12b2lkIDA9PT1iLnNhbHQ/ZC5maXJzdFNhbHQ6Yi5zYWx0O2RbY109ZFtjXXx8c2pjbC5taXNjLnBia2RmMihhLGMsYi5pdGVyKTtyZXR1cm57a2V5OmRbY10uc2xpY2UoMCksc2FsdDpjLnNsaWNlKDApfX07XG5cInVuZGVmaW5lZFwiIT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1zamNsKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gc2pjbH0pO1xuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgZXJyQXN5bmMsIG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IEx1ZmlGaWxlIH0gZnJvbSBcIn4vZW50aXRpZXMvbHVmaS1maWxlLnRzXCI7XG5pbXBvcnQgeyBMdWZpSm9iIH0gZnJvbSBcIn4vZW50aXRpZXMvbHVmaS1qb2IudHNcIjtcbmltcG9ydCB7IEpvYlN0YXR1cyB9IGZyb20gXCJ+L2VudW0vam9iLXN0YXR1cy50c1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuaW1wb3J0IHsgV09SS0VSX0FDVElPTiB9IGZyb20gXCJ+L2VudW0vd29ya2VyLWFjdGlvbi50c1wiO1xuaW1wb3J0IHsgZW5zdXJlRXJyb3IsIGZldGNoU2VydmVyQ29uZmlnLCBpc1NlY3VyZUNvbnRleHQgfSBmcm9tIFwifi91dGlscy50c1wiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJ+L2FwaS9jcnlwdG8udHNcIjtcbmltcG9ydCB7IEZpbGVTbGljaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9maWxlL2ZpbGUtc2xpY2luZy1lcnJvci50c1wiO1xuaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9jcnlwdG8tZXJyb3IudHNcIjtcbmltcG9ydCB7IERvd25sb2FkRXJyb3IgfSBmcm9tIFwifi9lcnJvci9kb3dubG9hZC9kb3dubG9hZC1lcnJvci50c1wiO1xuaW1wb3J0IHsgSW5mb3NFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2luZm9zLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBKb2JQYXVzZUVycm9yIH0gZnJvbSBcIi4uL2Vycm9yL2pvYi9qb2ItcGF1c2UtZXJyb3IudHNcIjtcbmltcG9ydCB7IEpvYlJlc3VtZUVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivam9iL2pvYi1yZXN1bWUtZXJyb3IudHNcIjtcbmltcG9ydCB7IEpvYkVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivam9iL2pvYi1lcnJvci50c1wiO1xuaW1wb3J0IHsgVXBsb2FkRXJyb3IgfSBmcm9tIFwifi9lcnJvci91cGxvYWQvdXBsb2FkLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBoYXNoUGFzc3dvcmQgfSBmcm9tIFwifi9hcGkvY3J5cHRvLnRzXCI7XG5pbXBvcnQgeyBXT1JLRVJfVFlQRSB9IGZyb20gXCJ+L2VudW0vd29ya2VyLXR5cGUudHNcIjtcbmltcG9ydCB7IHR5cGUgQXN5bmNaaXBwYWJsZSB9IGZyb20gXCJmZmxhdGVcIjtcblxuY29uc3QgQ0hVTktfTEVOR1RIID0gMV81MDBfMDAwOyAvLyAxLjUgTUJcblxuY29uc3QgZmlsZXM6IHsgW2NsaWVudEtleTogc3RyaW5nXTogTHVmaUZpbGUgfSA9IHt9O1xuZXhwb3J0IGNvbnN0IGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuLyoqXG4gKiBDYW5jZWwgYW4gdXBsb2FkXG4gKlxuICogQHBhcmFtIHVwbG9hZEpvYlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbmNlbCA9ICh1cGxvYWRKb2I6IEx1ZmlKb2IpOiBSZXN1bHRBc3luYzxMdWZpSm9iLCBFcnJvcj4gPT4ge1xuICB1cGxvYWRKb2IudGVybWluYXRlKCk7XG5cbiAgY29uc3Qgam9iID0gbmV3IEx1ZmlKb2IodXBsb2FkSm9iLmx1ZmlGaWxlLCBXT1JLRVJfVFlQRS5DQU5DRUwpO1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBqb2JcbiAgICAgICAgLm9uTWVzc2FnZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuVVBMT0FEX0NBTkNFTExFRCkge1xuICAgICAgICAgICAgZmlsZXNbam9iLmx1ZmlGaWxlLmtleXMuY2xpZW50XS51cGxvYWRTdGF0dXMgPVxuICAgICAgICAgICAgICBVUExPQURfU1RBVFVTLkNBTkNFTEVEO1xuXG4gICAgICAgICAgICByZXNvbHZlKGpvYik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXZlbnQgPT09IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQpIHtcbiAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgbmV3IEpvYkVycm9yKFxuICAgICAgICAgICAgICAgIFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gY2FuY2VsIGFuIHVwbG9hZFwiLFxuICAgICAgICAgICAgICAgIHsgY2F1c2U6IGV2ZW50LmRhdGEuZXJyb3IgfSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucmVxdWVzdE1lc3NhZ2Uoe1xuICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgIGx1ZmlGaWxlOiBqb2IubHVmaUZpbGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSksXG4gICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICk7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgZmlsZXMgdG8gYmUgcGFzc2VkIHRvIGNvbXByZXNzKClcbiAqXG4gKiBAcGFyYW0gZmlsZXNcbiAqIEBwYXJhbSBhcmNoaXZlRW50cmllc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbGVzVG9BcmNoaXZlID0gKFxuICBmaWxlczogRmlsZVtdLFxuICBhcmNoaXZlRW50cmllczogQXN5bmNaaXBwYWJsZSA9IHt9LFxuKTogUmVzdWx0QXN5bmM8QXN5bmNaaXBwYWJsZSwgRXJyb3I+ID0+IHtcbiAgY29uc3QgYXN5bmNMb29wID0gYXN5bmMgKFxuICAgIGZpbGVzOiBGaWxlW10sXG4gICkgPT4ge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgY29uc3QgbmFtZVdpdGhFeHRlbnNpb24gPSBmaWxlLm5hbWUuc3BsaXQoXCIvXCIpPy5wb3AoKSB8fCBmaWxlLm5hbWU7XG5cbiAgICAgIGNvbnN0IG5hbWVXaXRob3V0RXh0ZW5zaW9uID0gbmFtZVdpdGhFeHRlbnNpb24uc3BsaXQoXCIuXCIpLnNoaWZ0KCk7XG4gICAgICBjb25zdCBleHRlbnNpb24gPSBuYW1lV2l0aEV4dGVuc2lvbi5zcGxpdChcIi5cIikubGVuZ3RoID4gMVxuICAgICAgICA/IGAuJHtuYW1lV2l0aEV4dGVuc2lvbi5zcGxpdChcIi5cIikucG9wKCl9YFxuICAgICAgICA6IFwiXCI7XG5cbiAgICAgIGxldCBuYW1lID0gbmFtZVdpdGhFeHRlbnNpb247XG5cbiAgICAgIGlmIChhcmNoaXZlRW50cmllc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBpID0gMTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIG5hbWUgPSBgJHtuYW1lV2l0aG91dEV4dGVuc2lvbn0oJHtpfSkke2V4dGVuc2lvbn1gO1xuXG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IHdoaWxlIChhcmNoaXZlRW50cmllc1tuYW1lXSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuQVJDSElWRV9BRERFRF9GSUxFLCB7IG5hbWUsIHNpemU6IGZpbGUuc2l6ZSB9KTtcblxuICAgICAgYXJjaGl2ZUVudHJpZXNbbmFtZV0gPSBhd2FpdCBmaWxlLmJ5dGVzKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBhc3luY0xvb3AoZmlsZXMpLFxuICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICApLmFuZFRoZW4oKCkgPT4gb2tBc3luYyhhcmNoaXZlRW50cmllcykpO1xufTtcblxuLyoqXG4gKiBDb21wcmVzcyBmaWxlcyBpbnRvIGEgemlwXG4gKlxuICogQHBhcmFtIGFyY2hpdmVFbnRyaWVzXG4gKiBAcGFyYW0gYXJjaGl2ZU5hbWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wcmVzcyA9IChcbiAgYXJjaGl2ZUVudHJpZXM6IEFzeW5jWmlwcGFibGUsXG4gIGFyY2hpdmVOYW1lOiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxMdWZpSm9iLCBFcnJvcj4gPT4ge1xuICBjb25zdCBsdWZpRmlsZSA9IG5ldyBMdWZpRmlsZShcIlwiKTsgLy8gRHVtbXkgTHVmaSBGaWxlIHRvIGF2b2lkIHRvIGNoZWNrIGZvciBMdWZpRmlsZSBleGlzdGFuY2UgaW4gb3RoZXIgam9ic1xuICBjb25zdCBqb2IgPSBuZXcgTHVmaUpvYihsdWZpRmlsZSwgV09SS0VSX1RZUEUuQ09NUFJFU1MpO1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBqb2JcbiAgICAgICAgLm9uTWVzc2FnZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuQVJDSElWRV9DUkVBVEVEKSB7XG4gICAgICAgICAgICBqb2IuYXJjaGl2ZUZpbGUgPSBuZXcgRmlsZShbZXZlbnQuZGF0YS5idWZmZXJdLCBhcmNoaXZlTmFtZSwge1xuICAgICAgICAgICAgICB0eXBlOiBcImFwcGxpY2F0aW9uL3ppcFwiLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGpvYi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmVzb2x2ZShqb2IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5PUEVSQVRJT05fRkFJTEVEKSB7XG4gICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgIG5ldyBKb2JFcnJvcihcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbXByZXNzIGEgZmlsZVwiLCB7XG4gICAgICAgICAgICAgICAgY2F1c2U6IGV2ZW50LmRhdGEuZXJyb3IsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXF1ZXN0TWVzc2FnZSh7XG4gICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgbHVmaUZpbGUsXG4gICAgICAgICAgICBhcmNoaXZlOiB7IGVudHJpZXM6IGFyY2hpdmVFbnRyaWVzIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSksXG4gICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICk7XG59O1xuXG4vKipcbiAqIERlY29tcHJlc3MgYSB6aXAgZmlsZVxuICpcbiAqIEBwYXJhbSB6aXBGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZGVjb21wcmVzcyA9IChcbiAgemlwRmlsZTogRmlsZSxcbik6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEVycm9yPiA9PiB7XG4gIGNvbnN0IGx1ZmlGaWxlID0gbmV3IEx1ZmlGaWxlKFwiXCIpOyAvLyBEdW1teSBMdWZpIEZpbGUgdG8gYXZvaWQgdG8gY2hlY2sgZm9yIEx1ZmlGaWxlIGV4aXN0YW5jZSBpbiBvdGhlciBqb2JzXG4gIGNvbnN0IGpvYiA9IG5ldyBMdWZpSm9iKGx1ZmlGaWxlLCBXT1JLRVJfVFlQRS5ERUNPTVBSRVNTKTtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgam9iXG4gICAgICAgIC5vbk1lc3NhZ2UoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXZlbnQgPT09IEVWRU5ULkFSQ0hJVkVfREVDT01QUkVTU0VEKSB7XG4gICAgICAgICAgICBqb2IuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHJlc29sdmUoam9iKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuQVJDSElWRV9SRVRSSUVWRURfRklMRSkge1xuICAgICAgICAgICAgam9iLmFyY2hpdmVGaWxlcy5wdXNoKFxuICAgICAgICAgICAgICBuZXcgRmlsZShbZXZlbnQuZGF0YS5maWxlLmJ1ZmZlcl0sIGV2ZW50LmRhdGEuZmlsZS5wYXRoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXZlbnQgPT09IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQpIHtcbiAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgbmV3IEpvYkVycm9yKFxuICAgICAgICAgICAgICAgIFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gZGVjb21wcmVzcyBhIGZpbGVcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjYXVzZTogZXZlbnQuZGF0YS5lcnJvcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXF1ZXN0TWVzc2FnZSh7XG4gICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgbHVmaUZpbGUsXG4gICAgICAgICAgICBhcmNoaXZlOiB7IGZpbGU6IHppcEZpbGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KSxcbiAgICAoZXJyb3IpID0+IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgKTtcbn07XG5cbi8qKlxuICogSGFuZGxlIGxvZ2ljcyBvZiBwYXNzd29yZCBoYXNoaW5nXG4gKlxuICogQHBhcmFtIGRvd25sb2FkVXJsXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IGhhbmRsZVBhc3N3b3JkSGFzaGluZyA9IChcbiAgZG93bmxvYWRVcmw6IFVSTCxcbiAgcGFzc3dvcmQ/OiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxMdWZpRmlsZSwgRXJyb3I+ID0+IHtcbiAgaWYgKHBhc3N3b3JkKSB7XG4gICAgcmV0dXJuIGZldGNoU2VydmVyQ29uZmlnKGRvd25sb2FkVXJsKS5hbmRUaGVuKChjb25maWcpID0+IHtcbiAgICAgIC8vIFBhc3N3b3JkIGhhc2hpbmcgb24gY2xpZW50IHNpZGUgaXMgb25seSBzdXBwb3J0ZWQgYnkgcmVjZW50IHZlcnNpb25zIG9mIEx1ZmkgU2VydmVyXG4gICAgICBpZiAoXG4gICAgICAgIGNvbmZpZy52ZXJzaW9uLnRhZyA+IFwiMC4wNy4wXCJcbiAgICAgICkge1xuICAgICAgICBjb25zdCBhbGdvID0gaXNTZWN1cmVDb250ZXh0KClcbiAgICAgICAgICA/IENyeXB0b0FsZ29yaXRobS5XZWJDcnlwdG9cbiAgICAgICAgICA6IENyeXB0b0FsZ29yaXRobS5TamNsO1xuXG4gICAgICAgIHJldHVybiBoYXNoUGFzc3dvcmQocGFzc3dvcmQsIGFsZ28pLmFuZFRoZW4oKGhhc2hlZFBhc3N3b3JkKSA9PlxuICAgICAgICAgIG9rQXN5bmMoTHVmaUZpbGUuZnJvbURvd25sb2FkVXJsKGRvd25sb2FkVXJsLCBoYXNoZWRQYXNzd29yZCkpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2tBc3luYyhMdWZpRmlsZS5mcm9tRG93bmxvYWRVcmwoZG93bmxvYWRVcmwsIHBhc3N3b3JkKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoTHVmaUZpbGUuZnJvbURvd25sb2FkVXJsKGRvd25sb2FkVXJsKSk7XG4gIH1cbn07XG5cbi8qKlxuICogRG93bmxvYWQgYSBmaWxlIGZyb20gdGhlIHNlcnZlclxuICpcbiAqIEBwYXJhbSBkb3dubG9hZFVybFxuICogQHBhcmFtIHBhc3N3b3JkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZG93bmxvYWQgPSAoXG4gIGRvd25sb2FkVXJsOiBVUkwsXG4gIHBhc3N3b3JkPzogc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8THVmaUpvYiwgRXJyb3I+ID0+XG4gIGhhbmRsZVBhc3N3b3JkSGFzaGluZyhkb3dubG9hZFVybCwgcGFzc3dvcmQpLmFuZFRoZW4oXG4gICAgKGx1ZmlGaWxlOiBMdWZpRmlsZSkgPT4ge1xuICAgICAgY29uc3Qgam9iID0gbmV3IEx1ZmlKb2IobHVmaUZpbGUsIFdPUktFUl9UWVBFLkRPV05MT0FEKTtcblxuICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29uc3QgY2h1bmtzOiBCbG9iW10gPSBbXTtcblxuICAgICAgICAgIHJldHVybiBqb2JcbiAgICAgICAgICAgIC5vbk1lc3NhZ2UoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGhhbmRsZVNvY2tldFJlc3VsdHMocmVzb2x2ZSwgcmVqZWN0LCBqb2IsIGV2ZW50KTtcblxuICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuQ0hVTktfRE9XTkxPQURFRCkge1xuICAgICAgICAgICAgICAgIGNodW5rcy5wdXNoKGV2ZW50LmRhdGEuY2h1bmsuYnVmZmVyKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaHVua3MubGVuZ3RoID49IDUwKSB7XG4gICAgICAgICAgICAgICAgICBqb2IuZG93bmxvYWRlZEZpbGUgPSBuZXcgRmlsZShcbiAgICAgICAgICAgICAgICAgICAgam9iLmRvd25sb2FkZWRGaWxlXG4gICAgICAgICAgICAgICAgICAgICAgPyBbam9iLmRvd25sb2FkZWRGaWxlLnNsaWNlKCldLmNvbmNhdChjaHVua3MpXG4gICAgICAgICAgICAgICAgICAgICAgOiBjaHVua3MsXG4gICAgICAgICAgICAgICAgICAgIGx1ZmlGaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBsdWZpRmlsZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgY2h1bmtzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXZlbnQgPT09IEVWRU5ULkRPV05MT0FEX0NPTVBMRVRFKSB7XG4gICAgICAgICAgICAgICAgam9iLmRvd25sb2FkZWRGaWxlID0gbmV3IEZpbGUoXG4gICAgICAgICAgICAgICAgICBqb2IuZG93bmxvYWRlZEZpbGVcbiAgICAgICAgICAgICAgICAgICAgPyBbam9iLmRvd25sb2FkZWRGaWxlLnNsaWNlKCldLmNvbmNhdChjaHVua3MpXG4gICAgICAgICAgICAgICAgICAgIDogY2h1bmtzLFxuICAgICAgICAgICAgICAgICAgbHVmaUZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogbHVmaUZpbGUudHlwZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGNodW5rcy5sZW5ndGggPSAwO1xuXG4gICAgICAgICAgICAgICAgam9iLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVxdWVzdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgbHVmaUZpbGUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkgYXMgUHJvbWlzZTxMdWZpSm9iPixcbiAgICAgICAgKGVycm9yKSA9PiBuZXcgRG93bmxvYWRFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICAgICk7XG4gICAgfSxcbiAgKTtcblxuLyoqXG4gKiBSZXRyaWV2ZSBpbmZvcm1hdGlvbnMgYWJvdXQgYSBmaWxlXG4gKlxuICogQHBhcmFtIGRvd25sb2FkVXJsXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpbmZvcyA9IChcbiAgZG93bmxvYWRVcmw6IFVSTCxcbiAgcGFzc3dvcmQ/OiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxMdWZpSm9iLCBJbmZvc0Vycm9yIHwgQ3J5cHRvRXJyb3I+ID0+XG4gIGhhbmRsZVBhc3N3b3JkSGFzaGluZyhkb3dubG9hZFVybCwgcGFzc3dvcmQpLmFuZFRoZW4oKGx1ZmlGaWxlKSA9PlxuICAgIG9rQXN5bmMobmV3IEx1ZmlKb2IobHVmaUZpbGUsIFdPUktFUl9UWVBFLklORk9TKSlcbiAgKVxuICAgIC5hbmRUaGVuKChqb2I6IEx1ZmlKb2IpID0+XG4gICAgICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGpvYlxuICAgICAgICAgICAgLm9uTWVzc2FnZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXZlbnQgPT09IEVWRU5ULklORk9TX1JFVFJJRVZFRCkge1xuICAgICAgICAgICAgICAgIGpvYi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoam9iKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5PUEVSQVRJT05fRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgICAgbmV3IEpvYkVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIHJldHJpZXZlIGluZm9ybWF0aW9ucyBvZiB0aGUgZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICB7IGNhdXNlOiBldmVudC5kYXRhLmVycm9yIH0sXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVxdWVzdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICBhcmdzOiB7IGx1ZmlGaWxlOiBqb2IubHVmaUZpbGUgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSBhcyBQcm9taXNlPEx1ZmlKb2I+LFxuICAgICAgICAoZXJyb3IpID0+IG5ldyBJbmZvc0Vycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICAgICAgKVxuICAgICk7XG5cbi8qKlxuICogUGF1c2UgYW4gdXBsb2FkL2Rvd25sb2FkIGpvYlxuICogQHBhcmFtIGpvYlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHBhdXNlID0gKGpvYjogTHVmaUpvYik6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEVycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgam9iLnN0YXR1cyA9IEpvYlN0YXR1cy5QQVVTRUQ7XG4gICAgcmV0dXJuIG9rQXN5bmMoXG4gICAgICBqb2IucmVxdWVzdE1lc3NhZ2Uoe1xuICAgICAgICBhY3Rpb246IFdPUktFUl9BQ1RJT04uUEFVU0UsXG4gICAgICAgIGFyZ3M6IHsgbHVmaUZpbGU6IGpvYi5sdWZpRmlsZSB9LFxuICAgICAgfSksXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICBuZXcgSm9iUGF1c2VFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGZpbGUgdXBsb2FkZWQgb24gdGhlIHNlcnZlclxuICogQHBhcmFtIHJlbW92ZVVybFxuICogQHBhcmFtIHBhc3N3b3JkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlID0gKFxuICByZW1vdmVVcmw6IFVSTCxcbiAgcGFzc3dvcmQ/OiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxMdWZpSm9iLCBFcnJvcj4gPT4ge1xuICBjb25zdCBsdWZpRmlsZSA9IEx1ZmlGaWxlLmZyb21SZW1vdmVVcmwocmVtb3ZlVXJsLCBwYXNzd29yZCk7XG4gIGNvbnN0IGpvYiA9IG5ldyBMdWZpSm9iKGx1ZmlGaWxlLCBXT1JLRVJfVFlQRS5SRU1PVkUpO1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBqb2JcbiAgICAgICAgLm9uTWVzc2FnZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuRklMRV9SRU1PVkVEKSB7XG4gICAgICAgICAgICBqb2IuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHJlc29sdmUoam9iKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCkge1xuICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICBuZXcgSm9iRXJyb3IoXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byByZW1vdmUgYSBmaWxlXCIsIHtcbiAgICAgICAgICAgICAgICBjYXVzZTogZXZlbnQuZGF0YS5lcnJvcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnJlcXVlc3RNZXNzYWdlKHsgYXJnczogeyBsdWZpRmlsZSB9IH0pO1xuICAgIH0pLFxuICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICApO1xufTtcblxuLyoqXG4gKiBSZXN1bWUgYW4gdXBsb2FkL2Rvd25sb2FkIGpvYlxuICogQHBhcmFtIGpvYlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc3VtZSA9IChqb2I6IEx1ZmlKb2IpOiBSZXN1bHRBc3luYzxMdWZpSm9iLCBFcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIGpvYi5zdGF0dXMgPSBKb2JTdGF0dXMuT05HT0lORztcbiAgICByZXR1cm4gb2tBc3luYyhcbiAgICAgIGpvYi5yZXF1ZXN0TWVzc2FnZSh7XG4gICAgICAgIGFjdGlvbjogV09SS0VSX0FDVElPTi5SRVNVTUUsXG4gICAgICAgIGFyZ3M6IHsgbHVmaUZpbGU6IGpvYi5sdWZpRmlsZSB9LFxuICAgICAgfSksXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICBuZXcgSm9iUmVzdW1lRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBTbGljZSBhIGZpbGUgaW4gbXVsdGlwbGUgY2h1bmtzXG4gKlxuICogQHBhcmFtIGNodW5rTGVuZ3RoXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBzbGljZUFuZFVwbG9hZCA9IChcbiAgam9iOiBMdWZpSm9iLFxuICBmaWxlOiBGaWxlLFxuICBhbGdvOiBDcnlwdG9BbGdvcml0aG0sXG4gIGNodW5rTGVuZ3RoOiBudW1iZXIgPSBDSFVOS19MRU5HVEgsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBGaWxlU2xpY2luZ0Vycm9yPiA9PiB7XG4gIGV2ZW50cy5lbWl0KEVWRU5ULlNMSUNFX1NUQVJURUQsIGZpbGVzW2pvYi5sdWZpRmlsZS5rZXlzLmNsaWVudF0pO1xuICBjb25zdCB0b3RhbENodW5rcyA9IE1hdGguY2VpbChmaWxlLnNpemUgLyBjaHVua0xlbmd0aCkgfHwgMTtcbiAgY29uc3QgY29uY3VycmVuY3kgPSBuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeSB8fCAxO1xuXG4gIGZpbGVzW2pvYi5sdWZpRmlsZS5rZXlzLmNsaWVudF0udG90YWxDaHVua3MgPSB0b3RhbENodW5rcztcblxuICBjb25zdCBzZXF1ZW50aWFsTG9vcCA9IGFzeW5jICgpID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaSAqIGNodW5rTGVuZ3RoO1xuICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oc3RhcnQgKyBjaHVua0xlbmd0aCwgZmlsZS5zaXplKTtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGZpbGUuc2xpY2Uoc3RhcnQsIGVuZCwgZmlsZS50eXBlKS5hcnJheUJ1ZmZlcigpO1xuXG4gICAgICBqb2IucmVxdWVzdE1lc3NhZ2UoXG4gICAgICAgIHtcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBjaHVuazoge1xuICAgICAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGx1ZmlGaWxlOiBmaWxlc1tqb2IubHVmaUZpbGUua2V5cy5jbGllbnRdLFxuICAgICAgICAgICAgYWxnbyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBbYnVmZmVyXSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHdhaXRVbnRpbFVwbG9hZFN0YXJ0ZWQgPSAoKSA9PlxuICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBqb2IuZXZlbnRzLm9uY2UoRVZFTlQuVVBMT0FEX1NUQVJURUQsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgd2FpdFVudGlsVXBsb2FkU3RhcnRlZCgpO1xuICAgICAgfSBlbHNlIGlmIChpICUgY29uY3VycmVuY3kgPT09IDApIHtcbiAgICAgICAgY29uc3Qgd2FpdEZvclF1ZXVlQXZhaWxhYmlsaXR5ID0gKCkgPT5cbiAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgam9iLmV2ZW50cy5vbmNlKEVWRU5ULkNIVU5LX1VQTE9BREVELCAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHdhaXRGb3JRdWV1ZUF2YWlsYWJpbGl0eSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBzZXF1ZW50aWFsTG9vcCgpO1xuXG4gIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIFN0YXJ0IHRoZSB1cGxvYWQgb24gdGhlIHNlcnZlclxuICogQHBhcmFtIHNlcnZlclVybFxuICogQHBhcmFtIGZpbGVcbiAqIEBwYXJhbSBkZWxheVxuICogQHBhcmFtIGRlbEF0Rmlyc3RWaWV3XG4gKiBAcGFyYW0gemlwcGVkXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBzdGFydFVwbG9hZCA9IChcbiAgc2VydmVyVXJsOiBVUkwsXG4gIGZpbGU6IEZpbGUsXG4gIGRlbGF5OiBudW1iZXIsXG4gIGRlbEF0Rmlyc3RWaWV3OiBib29sZWFuLFxuICB6aXBwZWQ6IGJvb2xlYW4sXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4gIGFsZ286IENyeXB0b0FsZ29yaXRobSxcbikgPT5cbiAgY3J5cHRvLmdlbmVyYXRlS2V5KFxuICAgIGFsZ28sXG4gICkuYW5kVGhlbihcbiAgICAoY2xpZW50S2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChwYXNzd29yZCkge1xuICAgICAgICByZXR1cm4gaGFzaFBhc3N3b3JkKHBhc3N3b3JkLCBhbGdvKS5hbmRUaGVuKChoYXNoZWRQYXNzd29yZCkgPT5cbiAgICAgICAgICBva0FzeW5jKHsgcGFzc3dvcmQ6IGhhc2hlZFBhc3N3b3JkLCBjbGllbnRLZXkgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBva0FzeW5jKHsgcGFzc3dvcmQsIGNsaWVudEtleSB9KTtcbiAgICAgIH1cbiAgICB9LFxuICApLmFuZFRoZW4oKHsgcGFzc3dvcmQsIGNsaWVudEtleSB9KSA9PiB7XG4gICAgZmlsZXNbY2xpZW50S2V5XSA9IG5ldyBMdWZpRmlsZShzZXJ2ZXJVcmwudG9TdHJpbmcoKSwge1xuICAgICAgZGVsYXksXG4gICAgICBkZWxBdEZpcnN0VmlldyxcbiAgICAgIHppcHBlZCxcbiAgICAgIHBhc3N3b3JkLFxuICAgICAgbmFtZTogZmlsZS5uYW1lLnNwbGl0KFwiL1wiKS5wb3AoKSwgLy8gUmVtb3ZlIHBhdGggZnJvbSBmaWxlbmFtZVxuICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgdHlwZTogZmlsZS50eXBlLFxuICAgICAga2V5czogeyBjbGllbnQ6IGNsaWVudEtleSwgc2VydmVyOiBcIlwiIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBqb2IgPSBuZXcgTHVmaUpvYihmaWxlc1tjbGllbnRLZXldLCBXT1JLRVJfVFlQRS5VUExPQUQpO1xuXG4gICAgZmlsZXNbY2xpZW50S2V5XS51cGxvYWRTdGF0dXMgPSBVUExPQURfU1RBVFVTLlFVRVVFRDtcblxuICAgIHJldHVybiBzbGljZUFuZFVwbG9hZChqb2IsIGZpbGUsIGFsZ28pLmFuZFRoZW4oKCkgPT5cbiAgICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgam9iLm9uTWVzc2FnZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVNvY2tldFJlc3VsdHMocmVzb2x2ZSwgcmVqZWN0LCBqb2IsIGV2ZW50KTtcblxuICAgICAgICAgICAgc3dpdGNoIChldmVudC5kYXRhLmV2ZW50KSB7XG4gICAgICAgICAgICAgIGNhc2UgRVZFTlQuVVBMT0FEX0NPTVBMRVRFOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGpvYi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgam9iLmx1ZmlGaWxlLnVwbG9hZFN0YXR1cyA9IFVQTE9BRF9TVEFUVVMuQ09NUExFVEU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSBhcyBQcm9taXNlPEx1ZmlKb2I+LFxuICAgICAgICAoZXJyb3IpID0+IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgIClcbiAgICApO1xuICB9KTtcblxuLyoqXG4gKiBVcGxvYWQgYSBmaWxlIHRvIHRoZSBzZXJ2ZXJcbiAqXG4gKiBAcGFyYW0gc2VydmVyVXJsXG4gKiBAcGFyYW0gZmlsZXNUb1VwbG9hZFxuICogQHBhcmFtIGRlbGF5XG4gKiBAcGFyYW0gZGVsQXRGaXJzdFZpZXdcbiAqIEBwYXJhbSB6aXBwZWRcbiAqIEBwYXJhbSB6aXBOYW1lXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdXBsb2FkID0gKFxuICBzZXJ2ZXJVcmw6IFVSTCxcbiAgZmlsZXNUb1VwbG9hZDogRmlsZVtdLFxuICBkZWxheTogbnVtYmVyID0gMCxcbiAgZGVsQXRGaXJzdFZpZXc6IGJvb2xlYW4gPSBmYWxzZSxcbiAgemlwcGVkOiBib29sZWFuID0gZmFsc2UsXG4gIHppcE5hbWU6IHN0cmluZyA9IFwiZG9jdW1lbnRzLnppcFwiLFxuICBwYXNzd29yZDogc3RyaW5nID0gXCJcIixcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtLldlYkNyeXB0byxcbik6IFJlc3VsdEFzeW5jPEx1ZmlKb2JbXSwgRXJyb3I+ID0+IHtcbiAgY29uc3Qgb3BlcmF0aW9uczogUmVzdWx0QXN5bmM8THVmaUpvYiwgRXJyb3I+W10gPSBbXTtcblxuICBpZiAoIXppcHBlZCkge1xuICAgIGZpbGVzVG9VcGxvYWQuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgb3BlcmF0aW9ucy5wdXNoKHN0YXJ0VXBsb2FkKFxuICAgICAgICBzZXJ2ZXJVcmwsXG4gICAgICAgIGZpbGUsXG4gICAgICAgIGRlbGF5LFxuICAgICAgICBkZWxBdEZpcnN0VmlldyxcbiAgICAgICAgemlwcGVkLFxuICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgYWxnbyxcbiAgICAgICkpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGp1c3Qgd2FudCB0byB1cGxvYWQgYSBzaW5nbGUgemlwIGZpbGUgKHByb2JhYmx5IGNyZWF0ZWQgYnkgbWFudWFsbHkgdXNpbmcgY29tcHJlc3MoKSlcbiAgICBpZiAoXG4gICAgICBmaWxlc1RvVXBsb2FkLmxlbmd0aCA9PT0gMSAmJiBmaWxlc1RvVXBsb2FkWzBdLnR5cGUgPT09IFwiYXBwbGljYXRpb24vemlwXCJcbiAgICApIHtcbiAgICAgIG9wZXJhdGlvbnMucHVzaChcbiAgICAgICAgc3RhcnRVcGxvYWQoXG4gICAgICAgICAgc2VydmVyVXJsLFxuICAgICAgICAgIGZpbGVzVG9VcGxvYWRbMF0sXG4gICAgICAgICAgZGVsYXksXG4gICAgICAgICAgZGVsQXRGaXJzdFZpZXcsXG4gICAgICAgICAgemlwcGVkLFxuICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgIGFsZ28sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcGVyYXRpb25zLnB1c2goXG4gICAgICAgIGFkZEZpbGVzVG9BcmNoaXZlKGZpbGVzVG9VcGxvYWQpXG4gICAgICAgICAgLmFuZFRoZW4oKGFyY2hpdmVFbnRyaWVzKSA9PlxuICAgICAgICAgICAgY29tcHJlc3MoXG4gICAgICAgICAgICAgIGFyY2hpdmVFbnRyaWVzLFxuICAgICAgICAgICAgICB6aXBOYW1lLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuYW5kVGhlbigoam9iKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGpvYi5hcmNoaXZlRmlsZSkge1xuICAgICAgICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuQVJDSElWRV9DUkVBVEVELCBqb2IuYXJjaGl2ZUZpbGUpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRVcGxvYWQoXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlclVybCxcbiAgICAgICAgICAgICAgICAgICAgam9iLmFyY2hpdmVGaWxlLFxuICAgICAgICAgICAgICAgICAgICBkZWxheSxcbiAgICAgICAgICAgICAgICAgICAgZGVsQXRGaXJzdFZpZXcsXG4gICAgICAgICAgICAgICAgICAgIHppcHBlZCxcbiAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgICAgICAgICAgIGFsZ28sXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZXJyQXN5bmMobmV3IEpvYkVycm9yKFwiYXJjaGl2ZUZpbGUgbXVzdCBiZSBkZWZpbmVkXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmNvbWJpbmUob3BlcmF0aW9ucykub3JFbHNlKChlcnJvcikgPT5cbiAgICBlcnJBc3luYyhuZXcgVXBsb2FkRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlcnJvciB9KSlcbiAgKTtcbn07XG5cbi8qKlxuICogSGFuZGxlIHNvY2tldCBvcGVuaW5nIG9wZXJhdGlvbiBpbiBhIHByb21pc2VcbiAqXG4gKiBAcGFyYW0gcmVzb2x2ZVxuICogQHBhcmFtIHJlamVjdFxuICogQHBhcmFtIGpvYlxuICogQHBhcmFtIGV2ZW50XG4gKi9cbmNvbnN0IGhhbmRsZVNvY2tldFJlc3VsdHMgPSAoXG4gIHJlc29sdmU6IHtcbiAgICAodmFsdWU6IEx1ZmlKb2IgfCBQcm9taXNlTGlrZTxMdWZpSm9iPik6IHZvaWQ7XG4gICAgKGFyZzA6IEx1ZmlKb2IpOiB2b2lkO1xuICB9LFxuICByZWplY3Q6IHsgKHJlYXNvbj86IHVua25vd24pOiB2b2lkOyAoYXJnMDogdW5rbm93bik6IHZvaWQgfSxcbiAgam9iOiBMdWZpSm9iLFxuICBldmVudDogTWVzc2FnZUV2ZW50LFxuKSA9PiB7XG4gIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5TT0NLRVRfT1BFTkVEKSB7XG4gICAgcmVzb2x2ZShqb2IpO1xuICB9XG5cbiAgaWYgKGV2ZW50LmRhdGEuZXZlbnQgPT09IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQpIHtcbiAgICByZWplY3QoXG4gICAgICBuZXcgSm9iRXJyb3IoXCJUaGUgam9iIHJldHVybmVkIGFuIGVycm9yXCIsIHsgY2F1c2U6IGV2ZW50LmRhdGEuZXJyb3IgfSksXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgZ2V0RmlsZXNRdWV1ZWQgPSAoKTogTHVmaUZpbGVbXSA9PlxuICBPYmplY3QudmFsdWVzKGZpbGVzKS5maWx0ZXIoKGZpbGUpID0+XG4gICAgZmlsZS51cGxvYWRTdGF0dXMgPT09IFVQTE9BRF9TVEFUVVMuUVVFVUVEXG4gICk7XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlSW5kZXhJblF1ZXVlID0gKGNsaWVudEtleTogc3RyaW5nKTogbnVtYmVyID0+XG4gIE9iamVjdC5rZXlzKGdldEZpbGVzUXVldWVkKCkpLmluZGV4T2YoY2xpZW50S2V5KTtcbiIsICJjb25zdCBkZWZhdWx0RXJyb3JDb25maWcgPSB7XHJcbiAgICB3aXRoU3RhY2tUcmFjZTogZmFsc2UsXHJcbn07XHJcbi8vIEN1c3RvbSBlcnJvciBvYmplY3RcclxuLy8gQ29udGV4dCAvIGRpc2N1c3Npb246IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBlcm1hY3JvL25ldmVydGhyb3cvcHVsbC8yMTVcclxuY29uc3QgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yID0gKG1lc3NhZ2UsIHJlc3VsdCwgY29uZmlnID0gZGVmYXVsdEVycm9yQ29uZmlnKSA9PiB7XHJcbiAgICBjb25zdCBkYXRhID0gcmVzdWx0LmlzT2soKVxyXG4gICAgICAgID8geyB0eXBlOiAnT2snLCB2YWx1ZTogcmVzdWx0LnZhbHVlIH1cclxuICAgICAgICA6IHsgdHlwZTogJ0VycicsIHZhbHVlOiByZXN1bHQuZXJyb3IgfTtcclxuICAgIGNvbnN0IG1heWJlU3RhY2sgPSBjb25maWcud2l0aFN0YWNrVHJhY2UgPyBuZXcgRXJyb3IoKS5zdGFjayA6IHVuZGVmaW5lZDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgIHN0YWNrOiBtYXliZVN0YWNrLFxyXG4gICAgfTtcclxufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG5jbGFzcyBSZXN1bHRBc3luYyB7XHJcbiAgICBjb25zdHJ1Y3RvcihyZXMpIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlID0gcmVzO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21TYWZlUHJvbWlzZShwcm9taXNlKSB7XHJcbiAgICAgICAgY29uc3QgbmV3UHJvbWlzZSA9IHByb21pc2UudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMobmV3UHJvbWlzZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbVByb21pc2UocHJvbWlzZSwgZXJyb3JGbikge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlXHJcbiAgICAgICAgICAgIC50aGVuKCh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKSlcclxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiBuZXcgRXJyKGVycm9yRm4oZSkpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIHN0YXRpYyBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMoKCgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPayh5aWVsZCBmbiguLi5hcmdzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihlcnJvckZuID8gZXJyb3JGbihlcnJvcikgOiBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKSgpKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNvbWJpbmUoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3QoYXN5bmNSZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lV2l0aEFsbEVycm9ycyhhc3luY1Jlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIG1hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayh5aWVsZCBmKHJlcy52YWx1ZSkpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBuZXdSZXMgPSB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChuZXdSZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIobmV3UmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHlpZWxkIGYocmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVGVlIGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc09rKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycih5aWVsZCBmKHJlcy5lcnJvcikpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZSBpbnN0YW5jZW9mIFJlc3VsdEFzeW5jID8gbmV3VmFsdWUuX3Byb21pc2UgOiBuZXdWYWx1ZTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGYocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIG1hdGNoKG9rLCBfZXJyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMubWF0Y2gob2ssIF9lcnIpKTtcclxuICAgIH1cclxuICAgIHVud3JhcE9yKHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy51bndyYXBPcih0KSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiA5LjAuMC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIHVzZSBgc2FmZVRyeWAgd2l0aG91dCB0aGlzIG1ldGhvZC5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBzYWZlVHJ5KGFzeW5jIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgKiAgIGNvbnN0IG9rVmFsdWUgPSB5aWVsZCogeW91clJlc3VsdFxyXG4gICAgICogfSlcclxuICAgICAqIGBgYFxyXG4gICAgICogRW11bGF0ZXMgUnVzdCdzIGA/YCBvcGVyYXRvciBpbiBgc2FmZVRyeWAncyBib2R5LiBTZWUgYWxzbyBgc2FmZVRyeWAuXHJcbiAgICAgKi9cclxuICAgIHNhZmVVbndyYXAoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogc2FmZVVud3JhcF8xKCkge1xyXG4gICAgICAgICAgICByZXR1cm4geWllbGQgX19hd2FpdCh5aWVsZCBfX2F3YWl0KHlpZWxkKiBfX2FzeW5jRGVsZWdhdG9yKF9fYXN5bmNWYWx1ZXMoeWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLnNhZmVVbndyYXAoKSkpKSkpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIE1ha2VzIFJlc3VsdEFzeW5jIGltcGxlbWVudCBQcm9taXNlTGlrZTxSZXN1bHQ+XHJcbiAgICB0aGVuKHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIF9hKCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBfX2F3YWl0KHRoaXMuX3Byb21pc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgICAgICAgICAgeWllbGQgeWllbGQgX19hd2FpdChlcnJBc3luYyhyZXN1bHQuZXJyb3IpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5jb25zdCBva0FzeW5jID0gKHZhbHVlKSA9PiBuZXcgUmVzdWx0QXN5bmMoUHJvbWlzZS5yZXNvbHZlKG5ldyBPayh2YWx1ZSkpKTtcclxuY29uc3QgZXJyQXN5bmMgPSAoZXJyKSA9PiBuZXcgUmVzdWx0QXN5bmMoUHJvbWlzZS5yZXNvbHZlKG5ldyBFcnIoZXJyKSkpO1xyXG5jb25zdCBmcm9tUHJvbWlzZSA9IFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlO1xyXG5jb25zdCBmcm9tU2FmZVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2U7XHJcbmNvbnN0IGZyb21Bc3luY1Rocm93YWJsZSA9IFJlc3VsdEFzeW5jLmZyb21UaHJvd2FibGU7XG5cbi8qKlxyXG4gKiBTaG9ydCBjaXJjdWl0cyBvbiB0aGUgRklSU1QgRXJyIHZhbHVlIHRoYXQgd2UgZmluZFxyXG4gKi9cclxuY29uc3QgY29tYmluZVJlc3VsdExpc3QgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjID0gZXJyKHJlc3VsdC5lcnJvcik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYWNjLm1hcCgobGlzdCkgPT4gbGlzdC5wdXNoKHJlc3VsdC52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbi8qIFRoaXMgaXMgdGhlIHR5cGVzYWZlIHZlcnNpb24gb2YgUHJvbWlzZS5hbGxcclxuICpcclxuICogVGFrZXMgYSBsaXN0IG9mIFJlc3VsdEFzeW5jPFQsIEU+IGFuZCBzdWNjZXNzIGlmIGFsbCBpbm5lciByZXN1bHRzIGFyZSBPayB2YWx1ZXNcclxuICogb3IgZmFpbHMgaWYgb25lIChvciBtb3JlKSBvZiB0aGUgaW5uZXIgcmVzdWx0cyBhcmUgRXJyIHZhbHVlc1xyXG4gKi9cclxuY29uc3QgY29tYmluZVJlc3VsdEFzeW5jTGlzdCA9IChhc3luY1Jlc3VsdExpc3QpID0+IFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZShQcm9taXNlLmFsbChhc3luY1Jlc3VsdExpc3QpKS5hbmRUaGVuKGNvbWJpbmVSZXN1bHRMaXN0KTtcclxuLyoqXHJcbiAqIEdpdmUgYSBsaXN0IG9mIGFsbCB0aGUgZXJyb3JzIHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyA9IChyZXN1bHRMaXN0KSA9PiB7XHJcbiAgICBsZXQgYWNjID0gb2soW10pO1xyXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0TGlzdCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSAmJiBhY2MuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICBhY2MuZXJyb3IucHVzaChyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNFcnIoKSAmJiBhY2MuaXNPaygpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihbcmVzdWx0LmVycm9yXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MudmFsdWUucHVzaChyZXN1bHQudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gcmVzdWx0LmlzT2soKSAmJiBhY2MuaXNFcnIoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjYztcclxufTtcclxuY29uc3QgY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxyXG52YXIgUmVzdWx0O1xyXG4oZnVuY3Rpb24gKFJlc3VsdCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBXcmFwcyBhIGZ1bmN0aW9uIHdpdGggYSB0cnkgY2F0Y2gsIGNyZWF0aW5nIGEgbmV3IGZ1bmN0aW9uIHdpdGggdGhlIHNhbWVcclxuICAgICAqIGFyZ3VtZW50cyBidXQgcmV0dXJuaW5nIGBPa2AgaWYgc3VjY2Vzc2Z1bCwgYEVycmAgaWYgdGhlIGZ1bmN0aW9uIHRocm93c1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmbiBmdW5jdGlvbiB0byB3cmFwIHdpdGggb2sgb24gc3VjY2VzcyBvciBlcnIgb24gZmFpbHVyZVxyXG4gICAgICogQHBhcmFtIGVycm9yRm4gd2hlbiBhbiBlcnJvciBpcyB0aHJvd24sIHRoaXMgd2lsbCB3cmFwIHRoZSBlcnJvciByZXN1bHQgaWYgcHJvdmlkZWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIGZ1bmN0aW9uIGZyb21UaHJvd2FibGUoZm4sIGVycm9yRm4pIHtcclxuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9rKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnIoZXJyb3JGbiA/IGVycm9yRm4oZSkgOiBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuZnJvbVRocm93YWJsZSA9IGZyb21UaHJvd2FibGU7XHJcbiAgICBmdW5jdGlvbiBjb21iaW5lKHJlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdExpc3QocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZSA9IGNvbWJpbmU7XHJcbiAgICBmdW5jdGlvbiBjb21iaW5lV2l0aEFsbEVycm9ycyhyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyhyZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIFJlc3VsdC5jb21iaW5lV2l0aEFsbEVycm9ycyA9IGNvbWJpbmVXaXRoQWxsRXJyb3JzO1xyXG59KShSZXN1bHQgfHwgKFJlc3VsdCA9IHt9KSk7XHJcbmNvbnN0IG9rID0gKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpO1xyXG5mdW5jdGlvbiBlcnIoZXJyKSB7XHJcbiAgICByZXR1cm4gbmV3IEVycihlcnIpO1xyXG59XHJcbmZ1bmN0aW9uIHNhZmVUcnkoYm9keSkge1xyXG4gICAgY29uc3QgbiA9IGJvZHkoKS5uZXh0KCk7XHJcbiAgICBpZiAobiBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG4udGhlbigocikgPT4gci52YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG4udmFsdWU7XHJcbn1cclxuY2xhc3MgT2sge1xyXG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBpc09rKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIG1hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKGYodGhpcy52YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWFwRXJyKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRocm91Z2goZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpLm1hcCgoX3ZhbHVlKSA9PiB0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShmKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZih0aGlzLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gVGVlIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZXJyb3JcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhlbihmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYXN5bmNBbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKCkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY01hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZShmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIHVud3JhcE9yKF92KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHNhZmVVbndyYXAoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLXlpZWxkICovXHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfSkoKTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXAoXykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihjb25maWcpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVOZXZlclRocm93RXJyb3IoJ0NhbGxlZCBgX3Vuc2FmZVVud3JhcEVycmAgb24gYW4gT2snLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzLCByZXF1aXJlLXlpZWxkXHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbn1cclxuY2xhc3MgRXJyIHtcclxuICAgIGNvbnN0cnVjdG9yKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpc0VycigpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNPaygpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIG1hcEVycihmKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycihmKHRoaXMuZXJyb3IpKTtcclxuICAgIH1cclxuICAgIGFuZFRocm91Z2goX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgYW5kVGVlKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYXN5bmNBbmRUaGVuKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNBbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYXN5bmNNYXAoX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyQXN5bmModGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih2KSB7XHJcbiAgICAgICAgcmV0dXJuIHY7XHJcbiAgICB9XHJcbiAgICBtYXRjaChfb2ssIGVycikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5lcnJvcjtcclxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHlpZWxkIGVycihlcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG8gbm90IHVzZSB0aGlzIGdlbmVyYXRvciBvdXQgb2YgYHNhZmVUcnlgJyk7XHJcbiAgICAgICAgfSkoKTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXAoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBgIG9uIGFuIEVycicsIHRoaXMsIGNvbmZpZyk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwRXJyKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvcjtcclxuICAgIH1cclxuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICB5aWVsZCBzZWxmO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IGZyb21UaHJvd2FibGUgPSBSZXN1bHQuZnJvbVRocm93YWJsZTtcclxuLy8jZW5kcmVnaW9uXG5cbmV4cG9ydCB7IEVyciwgT2ssIFJlc3VsdCwgUmVzdWx0QXN5bmMsIGVyciwgZXJyQXN5bmMsIGZyb21Bc3luY1Rocm93YWJsZSwgZnJvbVByb21pc2UsIGZyb21TYWZlUHJvbWlzZSwgZnJvbVRocm93YWJsZSwgb2ssIG9rQXN5bmMsIHNhZmVUcnkgfTtcbiIsICJpbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuXG5leHBvcnQgY2xhc3MgTHVmaUZpbGUge1xuICBwdWJsaWMgYWN0aW9uVG9rZW46IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBjaHVua3NSZWFkeTogbnVtYmVyID0gMDtcbiAgcHVibGljIGNyZWF0ZWRBdDogbnVtYmVyID0gMDtcbiAgcHVibGljIGRlbGF5OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgZGVsQXRGaXJzdFZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGtleXM6IHsgY2xpZW50OiBzdHJpbmc7IHNlcnZlcjogc3RyaW5nIH0gPSB7IGNsaWVudDogXCJcIiwgc2VydmVyOiBcIlwiIH07XG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgcGFzc3dvcmQgPSBcIlwiO1xuICBwdWJsaWMgcXVldWVJbmRleDogbnVtYmVyID0gMDtcbiAgcHVibGljIHNlcnZlclVybDogc3RyaW5nO1xuICBwdWJsaWMgc2l6ZTogbnVtYmVyID0gMDtcbiAgcHVibGljIHVwbG9hZFN0YXR1czogVVBMT0FEX1NUQVRVUyA9IFVQTE9BRF9TVEFUVVMuSU5JVElBTElaRUQ7XG4gIHB1YmxpYyB0b3RhbENodW5rczogbnVtYmVyID0gMDtcbiAgcHVibGljIHR5cGU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyB6aXBwZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihzZXJ2ZXJVcmw6IHN0cmluZywgcHJvcGVydGllcz86IFBhcnRpYWw8THVmaUZpbGU+KSB7XG4gICAgdGhpcy5zZXJ2ZXJVcmwgPSBzZXJ2ZXJVcmw7XG5cbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgcHVibGljIGRvd25sb2FkVXJsKCk6IFVSTCB7XG4gICAgY29uc3Qgc2VydmVyVXJsID0gbmV3IFVSTCh0aGlzLnNlcnZlclVybCk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChcbiAgICAgIGAke1xuICAgICAgICBzZXJ2ZXJVcmwub3JpZ2luICsgc2VydmVyVXJsLnBhdGhuYW1lXG4gICAgICB9ci8ke3RoaXMua2V5cy5zZXJ2ZXJ9IyR7dGhpcy5rZXlzLmNsaWVudH1gLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlVXJsKCk6IFVSTCB7XG4gICAgY29uc3Qgc2VydmVyVXJsID0gbmV3IFVSTCh0aGlzLnNlcnZlclVybCk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChcbiAgICAgIGAke1xuICAgICAgICBzZXJ2ZXJVcmwub3JpZ2luICsgc2VydmVyVXJsLnBhdGhuYW1lXG4gICAgICB9ZC8ke3RoaXMua2V5cy5zZXJ2ZXJ9LyR7dGhpcy5hY3Rpb25Ub2tlbn1gLFxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZnJvbURvd25sb2FkVXJsKGRvd25sb2FkVXJsOiBVUkwsIHBhc3N3b3JkID0gXCJcIik6IEx1ZmlGaWxlIHtcbiAgICBjb25zdCBwYXRoaW5mb3MgPSBkb3dubG9hZFVybC5wYXRobmFtZS5zcGxpdChcInIvXCIpO1xuXG4gICAgY29uc3Qga2V5cyA9IHtcbiAgICAgIGNsaWVudDogZG93bmxvYWRVcmwuaGFzaC5zbGljZSgxKS5zcGxpdChcIiZcIilbMF0sXG4gICAgICBzZXJ2ZXI6IHBhdGhpbmZvc1sxXSxcbiAgICB9OyAvLyBzcGxpdChcIiZcIikgaXMgaGVyZSB0byByZW1vdmUgcGFyYW1ldGVycyBsaWtlICZ1dG1fc291cmNlIGZyb20gVVJMLCBzb21ldGltZXMgYWRkZWQgYXV0b21hdGljYWxseSBieSB0aGlyZCBwYXJ0aWVzLlxuXG4gICAgcmV0dXJuIG5ldyBMdWZpRmlsZShkb3dubG9hZFVybC5vcmlnaW4gKyBwYXRoaW5mb3NbMF0sIHtcbiAgICAgIGtleXMsXG4gICAgICBwYXNzd29yZCxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUmVtb3ZlVXJsKHJlbW92ZVVybDogVVJMLCBwYXNzd29yZCA9IFwiXCIpOiBMdWZpRmlsZSB7XG4gICAgY29uc3QgcGF0aEluZm9zID0gcmVtb3ZlVXJsLnBhdGhuYW1lLnNwbGl0KFwiZC9cIik7XG4gICAgY29uc3Qgc3BsaXR0ZWRQYXRoID0gcGF0aEluZm9zWzFdLnNwbGl0KFwiL1wiKTtcblxuICAgIGNvbnN0IGtleXMgPSB7IGNsaWVudDogXCJcIiwgc2VydmVyOiBzcGxpdHRlZFBhdGhbMF0gfTtcblxuICAgIHJldHVybiBuZXcgTHVmaUZpbGUocmVtb3ZlVXJsLm9yaWdpbiArIHBhdGhJbmZvc1swXSwge1xuICAgICAga2V5cyxcbiAgICAgIHBhc3N3b3JkLFxuICAgICAgYWN0aW9uVG9rZW46IHNwbGl0dGVkUGF0aFsxXSxcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgZXJyQXN5bmMsIG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB0eXBlIHsgTHVmaUZpbGUgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWZpbGUudHNcIjtcbmltcG9ydCB7IEVWRU5UIH0gZnJvbSBcIn4vZW51bS9ldmVudC50c1wiO1xuaW1wb3J0IHsgSm9iU3RhdHVzIH0gZnJvbSBcIn4vZW51bS9qb2Itc3RhdHVzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlclJlcXVlc3RNZXNzYWdlIH0gZnJvbSBcIn4vdHlwZS93b3JrZXItcmVxdWVzdC1tZXNzYWdlLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciwgd29ya2VyVXJsIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IFVQTE9BRF9TVEFUVVMgfSBmcm9tIFwifi9lbnVtL2ZpbGUtc3RhdHVzLnRzXCI7XG5pbXBvcnQgeyBXT1JLRVJfVFlQRSB9IGZyb20gXCJ+L2VudW0vd29ya2VyLXR5cGUudHNcIjtcblxuZXhwb3J0IGNsYXNzIEx1ZmlKb2Ige1xuICBwdWJsaWMgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgbHVmaUZpbGU6IEx1ZmlGaWxlO1xuICBwdWJsaWMgc3RhdHVzID0gSm9iU3RhdHVzLk9OR09JTkc7XG4gIHB1YmxpYyBhcmNoaXZlRmlsZTogRmlsZSB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGFyY2hpdmVGaWxlczogRmlsZVtdID0gW107XG4gIHB1YmxpYyBkb3dubG9hZGVkRmlsZTogRmlsZSB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHdvcmtlcjogV29ya2VyO1xuXG4gIHByaXZhdGUgaXNUZXJtaW5hdGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IobHVmaUZpbGU6IEx1ZmlGaWxlLCB3b3JrZXJUeXBlOiBXT1JLRVJfVFlQRSkge1xuICAgIHN3aXRjaCAod29ya2VyVHlwZSkge1xuICAgICAgY2FzZSBXT1JLRVJfVFlQRS5DQU5DRUw6XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLndvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVXJsKFwiY2FuY2VsXCIpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgV09SS0VSX1RZUEUuQ09NUFJFU1M6XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLndvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVXJsKFwiY29tcHJlc3NcIiksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBXT1JLRVJfVFlQRS5ERUNPTVBSRVNTOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVybChcImRlY29tcHJlc3NcIiksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBXT1JLRVJfVFlQRS5ET1dOTE9BRDpcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMud29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJVcmwoXCJkb3dubG9hZFwiKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFdPUktFUl9UWVBFLklORk9TOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVybChcImluZm9zXCIpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgV09SS0VSX1RZUEUuUkVNT1ZFOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVybChcInJlbW92ZVwiKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFdPUktFUl9UWVBFLlVQTE9BRDpcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMud29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJVcmwoXCJ1cGxvYWRcIiksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLmx1ZmlGaWxlID0gbHVmaUZpbGU7XG4gICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5KT0JfVEVSTUlOQVRFRCwgKCkgPT4ge1xuICAgICAgdGhpcy5pc1Rlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy50ZXJtaW5hdGUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRzLm9uY2UoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhpcy5zdGF0dXMgPSBKb2JTdGF0dXMuRkFJTEVEO1xuICAgICAgdGhpcy5sdWZpRmlsZS51cGxvYWRTdGF0dXMgPSBVUExPQURfU1RBVFVTLkZBSUxFRDtcblxuICAgICAgdGhpcy5ldmVudHMuZW1pdChFVkVOVC5KT0JfVEVSTUlOQVRFRCwgZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vbkVycm9yKChldmVudCkgPT4gY29uc29sZS5lcnJvcihldmVudC5lcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlbGxzIHRoZSB3b3JrZXIgdGhlIGpvYiBpcyBjb21wbGV0ZVxuICAgKi9cbiAgcHVibGljIGNvbXBsZXRlID0gKCkgPT4ge1xuICAgIHRoaXMuc3RhdHVzID0gSm9iU3RhdHVzLkNPTVBMRVRFO1xuICAgIHRoaXMuZXZlbnRzLmVtaXQoRVZFTlQuSk9CX1RFUk1JTkFURUQpO1xuICB9O1xuXG4gIHB1YmxpYyBoYXNGYWlsZWQgPSAoKSA9PiB0aGlzLnN0YXR1cyA9PT0gSm9iU3RhdHVzLkZBSUxFRDtcblxuICBwdWJsaWMgb25FcnJvciA9IChjYWxsYmFjazogKGFyZzogRXJyb3JFdmVudCkgPT4gdm9pZCkgPT4ge1xuICAgIHRoaXMud29ya2VyLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcbiAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcHVibGljIG9uTWVzc2FnZSA9IChjYWxsYmFjaz86IChhcmc6IE1lc3NhZ2VFdmVudCkgPT4gdm9pZCkgPT4ge1xuICAgIHRoaXMud29ya2VyLm9ubWVzc2FnZSA9IChlKSA9PiB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV2ZW50ID0gZS5kYXRhLmV2ZW50O1xuXG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50ID09PSBFVkVOVC5GSUxFX1VQREFURUQpIHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubHVmaUZpbGUsIGUuZGF0YS5sdWZpRmlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50LCBlLmRhdGEuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHB1YmxpYyBvbk1lc3NhZ2VFcnJvciA9IChjYWxsYmFjazogKGFyZzogTWVzc2FnZUV2ZW50KSA9PiB2b2lkKSA9PiB7XG4gICAgdGhpcy53b3JrZXIub25tZXNzYWdlZXJyb3IgPSAoZXZlbnQpID0+IHtcbiAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcHVibGljIG9uUHJvZ3Jlc3MgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcbiAgICB0aGlzLmV2ZW50cy5vbihFVkVOVC5DSFVOS19VUExPQURFRCwgKCkgPT4ge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50cy5vbihFVkVOVC5DSFVOS19ET1dOTE9BREVELCAoKSA9PiB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcHVibGljIHJlcXVlc3RNZXNzYWdlID0gKFxuICAgIG1zZzogV29ya2VyUmVxdWVzdE1lc3NhZ2UsXG4gICAgdHJhbnNmZXJhYmxlOiBUcmFuc2ZlcmFibGVbXSA9IFtdLFxuICApID0+IHtcbiAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZShtc2csIHRyYW5zZmVyYWJsZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBwdWJsaWMgdGVybWluYXRlID0gKCkgPT4ge1xuICAgIHRoaXMud29ya2VyLnRlcm1pbmF0ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcHVibGljIHdhaXRGb3JDb21wbGV0aW9uID0gKCk6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEVycm9yPiA9PiB7XG4gICAgaWYgKHRoaXMuaXNUZXJtaW5hdGVkKSB7XG4gICAgICBpZiAodGhpcy5zdGF0dXMgPT09IEpvYlN0YXR1cy5DT01QTEVURSkge1xuICAgICAgICByZXR1cm4gb2tBc3luYyh0aGlzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlcnJBc3luYyhlbnN1cmVFcnJvcihcIkpvYiBoYXMgZmFpbGVkXCIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5PUEVSQVRJT05fRkFJTEVELCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5KT0JfVEVSTUlOQVRFRCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSBKb2JTdGF0dXMuQ09NUExFVEUpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgcHVibGljIHdhaXRGb3JTdGFydCA9ICgpOiBSZXN1bHRBc3luYzxMdWZpSm9iLCBFcnJvcj4gPT4ge1xuICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5PUEVSQVRJT05fRkFJTEVELCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5VUExPQURfU1RBUlRFRCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodGhpcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXZlbnRzLm9uY2UoRVZFTlQuRE9XTkxPQURfU1RBUlRFRCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodGhpcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICAoZXJyb3IpID0+IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICApO1xuICB9O1xuXG4gIHByaXZhdGUgZGlzcGF0Y2hFdmVudCA9IChldmVudDogRVZFTlQsIGVycm9yOiB1bmRlZmluZWQgfCBFcnJvcikgPT4ge1xuICAgIHRoaXMuZXZlbnRzLmVtaXQoZXZlbnQsIGVycm9yKTtcbiAgfTtcbn1cbiIsICJ0eXBlIEpzb25hYmxlID1cbiAgfCBzdHJpbmdcbiAgfCBudW1iZXJcbiAgfCBib29sZWFuXG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZFxuICB8IHJlYWRvbmx5IEpzb25hYmxlW11cbiAgfCB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IEpzb25hYmxlIH1cbiAgfCB7IHRvSlNPTigpOiBKc29uYWJsZSB9O1xuXG5leHBvcnQgY2xhc3MgQmFzZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGV4dD86IEpzb25hYmxlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgb3B0aW9uczogeyBjYXVzZT86IEVycm9yOyBjb250ZXh0PzogSnNvbmFibGUgfSA9IHt9LFxuICApIHtcbiAgICBjb25zdCB7IGNhdXNlLCBjb250ZXh0IH0gPSBvcHRpb25zO1xuXG4gICAgc3VwZXIobWVzc2FnZSwgeyBjYXVzZSB9KTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQmFzZUVycm9yIH0gZnJvbSBcIn4vZXJyb3IvYmFzZS1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbkVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgb3ZlcnJpZGUgbWVzc2FnZTogc3RyaW5nID1cbiAgICBcIlVuYWJsZSB0byBjb25uZWN0LiBJcyB0aGUgY29tcHV0ZXIgYWJsZSB0byBhY2Nlc3MgdGhlIHVybD9cIjtcbn1cbiIsICJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwifi9lcnJvci9iYXNlLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBTZXJ2ZXJFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2UgPSBcIlRoZSBzZXJ2ZXIgcmV0dXJuZWQgYW4gZXJyb3JcIjtcbn1cbiIsICJpbXBvcnQgeyBlcnJBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY29ubmVjdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgU2VydmVyRXJyb3IgfSBmcm9tIFwifi9lcnJvci9zZXJ2ZXItZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyQ29uZmlnIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1jb25maWcudHNcIjtcblxuLyoqXG4gKiBFbnN1cmUgYW4gZXJyb3IgbWVzc2FnZSBpcyB0cmFuc2Zvcm1lZCBpbiBhbiBFcnJvciBvYmplY3RcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbnN1cmVFcnJvciA9ICh2YWx1ZTogdW5rbm93bik6IEVycm9yID0+IHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiB2YWx1ZTtcblxuICBsZXQgc3RyaW5naWZpZWQgPSBcIltVbmFibGUgdG8gc3RyaW5naWZ5IHRoZSB0aHJvd24gdmFsdWVdXCI7XG4gIHRyeSB7XG4gICAgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgIC8qIGVtcHR5ICovXG4gIH1cblxuICByZXR1cm4gbmV3IEVycm9yKHN0cmluZ2lmaWVkKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgTHVmaSdzIGNvbmZpZyBmcm9tIGl0cyBBUElcbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2VVcmxcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBmZXRjaFNlcnZlckNvbmZpZyA9IChcbiAgaW5zdGFuY2VVcmw6IFVSTCxcbik6IFJlc3VsdEFzeW5jPFNlcnZlckNvbmZpZywgRXJyb3I+ID0+IHtcbiAgY29uc3Qgb3JpZ2luTWF0Y2hlcyA9IGluc3RhbmNlVXJsLmhyZWYubWF0Y2goXG4gICAgLyguKj8pXFwvPyg/OlxcL1tkcl17MX1cXC98bG9naW5cXC8/fGZpbGVzXFwvPykvLFxuICApO1xuXG4gIGNvbnN0IHVybE9yaWdpbiA9IG9yaWdpbk1hdGNoZXMgJiYgb3JpZ2luTWF0Y2hlc1sxXVxuICAgID8gb3JpZ2luTWF0Y2hlc1sxXVxuICAgIDogaW5zdGFuY2VVcmwub3JpZ2luO1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBmZXRjaCh1cmxPcmlnaW4gKyBcIi9hYm91dC9jb25maWdcIiksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENvbm5lY3Rpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgIH0pLFxuICApLmFuZFRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIHJlc3BvbnNlLmpzb24oKSxcbiAgICAgICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgIG5ldyBTZXJ2ZXJFcnJvcih1bmRlZmluZWQsIHsgY29udGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Rlbm9SdW50aW1lID0gKCk6IGJvb2xlYW4gPT4gdHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCI7XG5cbmV4cG9ydCBjb25zdCBpc1NlY3VyZUNvbnRleHQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKCkgfHwgZ2xvYmFsVGhpcy5pc1NlY3VyZUNvbnRleHQgfHxcbiAgICBnbG9iYWxUaGlzLmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiO1xufTtcblxuZXhwb3J0IGNvbnN0IHdvcmtlclVybCA9IChyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IFVSTCA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKClcbiAgICA/IG5ldyBVUkwoYC4vd29ya2VyLyR7cmVsYXRpdmVQYXRofS50c2AsIG5ldyBVUkwoXCIuXCIsIGltcG9ydC5tZXRhLnVybCkuaHJlZilcbiAgICA6IG5ldyBVUkwoXG4gICAgICBpbXBvcnQubWV0YS5yZXNvbHZlKFxuICAgICAgICBgLi8ke1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCAhPT0gXCJlbmNyeXB0XCIgPyBgd29ya2VyLyR7cmVsYXRpdmVQYXRofWAgOiByZWxhdGl2ZVBhdGhcbiAgICAgICAgfS5qc2AsXG4gICAgICApLFxuICAgICk7XG59O1xuIiwgImV4cG9ydCBlbnVtIENyeXB0b0FsZ29yaXRobSB7XG4gIFNqY2wsXG4gIFdlYkNyeXB0byxcbn1cbiIsIG51bGwsIG51bGwsIG51bGwsICJpbXBvcnQge1xuICBEZWNvZGUgYXMgYjY0ZGVjb2RlLFxuICBFbmNvZGUgYXMgYjY0ZW5jb2RlLFxufSBmcm9tIFwiYXJyYXlidWZmZXItZW5jb2RpbmcvYmFzZTY0XCI7XG5pbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHNqY2wgZnJvbSBcImx1Zmktc2pjbFwiO1xuaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9jcnlwdG8tZXJyb3IudHNcIjtcbmltcG9ydCB7IERlY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9kZWNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBIYXNoaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50c1wiO1xuXG4vKipcbiAqIERlY3J5cHQgYW4gRW5jcnlwdGVkRGF0YSBvciBhIHN0cmluZyB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb24uXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGVuY3J5cHRlZERhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgZW5jcnlwdGVkRGF0YTogRW5jcnlwdGVkRGF0YSB8IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPEFycmF5QnVmZmVyLCBEZWNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gdHlwZW9mIGVuY3J5cHRlZERhdGEgPT09IFwic3RyaW5nXCJcbiAgICAgID8gZW5jcnlwdGVkRGF0YVxuICAgICAgOiAoZW5jcnlwdGVkRGF0YS5kYXRhKTtcblxuICAgIHJldHVybiBva0FzeW5jKGI2NGRlY29kZShzamNsLmRlY3J5cHQoa2V5LCBkYXRhKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBEZWNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFbmNyeXB0IGFuIEFycmF5QnVmZmVyIGludG8gYW4gRW5jcnlwdGVkRGF0YSB1c2luZyB0aGUgcHJvdmlkZWQga2V5XG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbik6IFJlc3VsdEFzeW5jPEVuY3J5cHRlZERhdGEsIEVuY3J5cHRpb25FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGVuY3J5cHRlZCA9IHNqY2wuZW5jcnlwdChrZXksIGI2NGVuY29kZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIG9rQXN5bmMoe1xuICAgICAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLlNqY2wsXG4gICAgICBkYXRhOiBlbmNyeXB0ZWQsXG4gICAgICBpdjogSlNPTi5wYXJzZShlbmNyeXB0ZWQgYXMgdW5rbm93biBhcyBzdHJpbmcpLml2LFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBFbmNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmRvbSBzdHJpbmcgdXNpbmcgU2pjbCBBUElcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVLZXkgPSAoKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBDcnlwdG9FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBva0FzeW5jKHNqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKHNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDgsIDEwKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBnZW5lcmF0ZSBrZXlcIiwge1xuICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBIYXNoIGEgcGFzc3dvcmQgdXNpbmcgU2pjbCBBUElcbiAqXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNoUGFzc3dvcmQgPSAoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIEhhc2hpbmdFcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBva0FzeW5jKHNqY2wuY29kZWMuaGV4LmZyb21CaXRzKHNqY2wuaGFzaC5zaGE1MTIuaGFzaChwYXNzd29yZCkpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyQXN5bmMobmV3IEhhc2hpbmdFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSk7XG4gIH1cbn07XG5cbi8qKlxuICogRGV0ZWN0IGlmIHRoZSBrZXkgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IFNqY2wuIFNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5nIGFuIGVxdWFsIHN5bWJvbCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgV2ViQ3J5cHRvIEFQSSAoYnkgdXNpbmcgYmFzZTY0dXJsKSwgaXQncyBlYXN5IHRvIGRldGVjdFxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NqY2xLZXkgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGtleVtrZXkubGVuZ3RoIC0gMV0gPT09IFwiPVwiO1xufTtcbiIsICJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwifi9lcnJvci9iYXNlLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBDcnlwdG9FcnJvciBleHRlbmRzIEJhc2VFcnJvciB7fVxuIiwgImltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgSGFzaGluZ0Vycm9yIGV4dGVuZHMgQ3J5cHRvRXJyb3Ige1xuICBvdmVycmlkZSBtZXNzYWdlOiBzdHJpbmcgPSBcIlVuYWJsZSB0byBoYXNoIHRoZSBwcm92aWRlZCBzdHJpbmdcIjtcbn1cbiIsICJpbXBvcnQge1xuICBEZWNvZGUgYXMgYjY0dXJsZGVjb2RlLFxuICBFbmNvZGUgYXMgYjY0dXJsZW5jb2RlLFxufSBmcm9tIFwiYXJyYXlidWZmZXItZW5jb2RpbmcvYmFzZTY0L3VybFwiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IERlY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9kZWNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBIYXNoaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50c1wiO1xuXG4vKipcbiAqIERlY3J5cHQgYW4gZW5jcnlwdGVkRGF0YSB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gZW5jcnlwdGVkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZGVjcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIGVuY3J5cHRlZDogRW5jcnlwdGVkRGF0YSxcbik6IFJlc3VsdEFzeW5jPEFycmF5QnVmZmVyLCBEZWNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgcmV0dXJuIGltcG9ydEtleShrZXkpLmFuZFRoZW4oKGltcG9ydGVkS2V5KSA9PlxuICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgY3J5cHRvLnN1YnRsZS5kZWNyeXB0KFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICAgICAgaXY6IGVuY3J5cHRlZC5pdiBhcyBVaW50OEFycmF5LFxuICAgICAgICB9LFxuICAgICAgICBpbXBvcnRlZEtleSxcbiAgICAgICAgZW5jcnlwdGVkLmRhdGEgYXMgQXJyYXlCdWZmZXIsXG4gICAgICApLFxuICAgICAgKGVycm9yKSA9PiBuZXcgRGVjcnlwdGlvbkVycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICAgIClcbiAgKTtcbn07XG5cbi8qKlxuICogRW5jcnlwdCBhbiBBcnJheUJ1ZmZlciBpbnRvIGFuIEVuY3J5cHRlZERhdGEgdXNpbmcgdGhlIHByb3ZpZGVkIGtleVxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbik6IFJlc3VsdEFzeW5jPEVuY3J5cHRlZERhdGEsIEVuY3J5cHRpb25FcnJvcj4gPT4ge1xuICByZXR1cm4gaW1wb3J0S2V5KGtleSkuYW5kVGhlbigoaW1wb3J0ZWRLZXkpID0+IHtcbiAgICBjb25zdCBpdiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTIpKTtcbiAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICBjcnlwdG8uc3VidGxlLmVuY3J5cHQoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgICAgICBpdixcbiAgICAgICAgfSxcbiAgICAgICAgaW1wb3J0ZWRLZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgKSxcbiAgICAgIChlcnJvcikgPT5cbiAgICAgICAgbmV3IEVuY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgICB9KSxcbiAgICApLmFuZFRoZW4oKGVuY3J5cHRlZCkgPT4ge1xuICAgICAgcmV0dXJuIG9rQXN5bmMoe1xuICAgICAgICBhbGdvOiBDcnlwdG9BbGdvcml0aG0uV2ViQ3J5cHRvLFxuICAgICAgICBkYXRhOiBlbmNyeXB0ZWQsXG4gICAgICAgIGl2LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBzdHJpbmcgaW50byBhIENyeXB0b0tleSwgdXNhYmxlIGluIFdlYiBDcnlwdG8gQVBJXG4gKlxuICogQHBhcmFtIGtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGltcG9ydEtleSA9IChrZXk6IHN0cmluZyk6IFJlc3VsdEFzeW5jPENyeXB0b0tleSwgQ3J5cHRvRXJyb3I+ID0+IHtcbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICAgXCJyYXdcIixcbiAgICAgIGI2NHVybGRlY29kZShrZXkpLFxuICAgICAgeyBuYW1lOiBcIkFFUy1HQ01cIiB9LFxuICAgICAgZmFsc2UsXG4gICAgICBbXG4gICAgICAgIFwiZW5jcnlwdFwiLFxuICAgICAgICBcImRlY3J5cHRcIixcbiAgICAgIF0sXG4gICAgKSxcbiAgICAoZXJyb3IpID0+XG4gICAgICBuZXcgQ3J5cHRvRXJyb3IoXCJVbmFibGUgdG8gaW1wb3J0IGNyeXB0b2dyYXBoeSBrZXlcIiwge1xuICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSksXG4gICk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyB1c2luZyBXZWIgQ3J5cHRvIEFQSS5cbiAqXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVLZXkgPSAoKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBDcnlwdG9FcnJvcj4gPT4ge1xuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgIGNyeXB0by5zdWJ0bGVcbiAgICAgICAgLmdlbmVyYXRlS2V5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQUVTLUdDTVwiLFxuICAgICAgICAgICAgbGVuZ3RoOiAyNTYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCJdLFxuICAgICAgICApXG4gICAgICAgIC50aGVuKChnZW5lcmF0ZWRLZXkpID0+XG4gICAgICAgICAgY3J5cHRvLnN1YnRsZVxuICAgICAgICAgICAgLmV4cG9ydEtleShcInJhd1wiLCBnZW5lcmF0ZWRLZXkpXG4gICAgICAgICAgICAudGhlbigoa2V5KSA9PiByZXNvbHZlKGI2NHVybGVuY29kZShrZXkpKSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBiYXNlNjQgZW5jb2RlIHRoZSB1cmxcIiwge1xuICAgICAgICAgICAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gcmVqZWN0KGVycm9yKSlcbiAgICApLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBnZW5lcmF0ZSBrZXlcIiwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICApO1xufTtcblxuLyoqXG4gKiBIYXNoIGEgcGFzc3dvcmQgdXNpbmcgV2ViQ3J5cHRvIEFQSVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PiB7XG4gIGNvbnN0IHByb21pc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICBuZXcgVWludDhBcnJheShcbiAgICAgICAgYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXG4gICAgICAgICAgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBhc3N3b3JkKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKS5tYXAoKGIpID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKSkuam9pbihcIlwiKTtcbiAgfTtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgcHJvbWlzZSgpLFxuICAgIChlcnJvcikgPT4gbmV3IEhhc2hpbmdFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgKTtcbn07XG4iLCAiaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgdHlwZSB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBEZWNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgKiBhcyBzamNsIGZyb20gXCJ+L2FwaS9jcnlwdG8vc2pjbC50c1wiO1xuaW1wb3J0ICogYXMgd2ViIGZyb20gXCJ+L2FwaS9jcnlwdG8vd2ViLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBFbmNyeXB0ZWREYXRhIG9iamVjdCB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEVuY3J5cHRlZERhdGEsXG4pOiBSZXN1bHRBc3luYzxBcnJheUJ1ZmZlciwgRGVjcnlwdGlvbkVycm9yPiA9PlxuICB2YWx1ZS5hbGdvID09PSB1bmRlZmluZWQgfHwgdmFsdWUuYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2xcbiAgICA/IHNqY2wuZGVjcnlwdChrZXksIHZhbHVlKVxuICAgIDogd2ViLmRlY3J5cHQoa2V5LCB2YWx1ZSk7XG5cbi8qKlxuICogRW5jcnlwdCBhbiBBcnJheUJ1ZmZlciB1c2luZyB0aGUgcHJvdmlkZWQga2V5IGFuZCBhbGdvcml0aG1cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PlxuICAoYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2wpXG4gICAgPyBzamNsLmVuY3J5cHQoa2V5LCB2YWx1ZSlcbiAgICA6IHdlYi5lbmNyeXB0KGtleSwgdmFsdWUpO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgbmV3IGtleSBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uXG4gKlxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9IChcbiAgYWxnbyA9IENyeXB0b0FsZ29yaXRobS5XZWJDcnlwdG8sXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PlxuICBhbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbCA/IHNqY2wuZ2VuZXJhdGVLZXkoKSA6IHdlYi5nZW5lcmF0ZUtleSgpO1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyB0aGUgcHJvdmlkZWQgYWxnb3JpdGhtXG4gKlxuICogQHBhcmFtIHBhc3N3b3JkXG4gKiBAcGFyYW0gYWxnb1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBIYXNoaW5nRXJyb3I+ID0+XG4gIGFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsXG4gICAgPyBzamNsLmhhc2hQYXNzd29yZChwYXNzd29yZClcbiAgICA6IHdlYi5oYXNoUGFzc3dvcmQocGFzc3dvcmQpO1xuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIERvd25sb2FkRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige1xuICBvdmVycmlkZSBtZXNzYWdlOiBzdHJpbmcgPSBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgZG93bmxvYWRpbmcgdGhlIGRhdGFcIjtcbn1cbiIsICJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwifi9lcnJvci9iYXNlLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBJbmZvc0Vycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgb3ZlcnJpZGUgbWVzc2FnZTogc3RyaW5nID1cbiAgICBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIHJldHJpZXZlIHNlcnZlciBpbmZvcm1hdGlvbnNcIjtcbn1cbiIsICJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwifi9lcnJvci9iYXNlLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBKb2JFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7fVxuIiwgImltcG9ydCB7IEpvYkVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivam9iL2pvYi1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgSm9iUGF1c2VFcnJvciBleHRlbmRzIEpvYkVycm9yIHtcbiAgb3ZlcnJpZGUgbWVzc2FnZTogc3RyaW5nID0gXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byBwYXVzZSB0aGUgam9iXCI7XG59XG4iLCAiaW1wb3J0IHsgSm9iRXJyb3IgfSBmcm9tIFwifi9lcnJvci9qb2Ivam9iLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBKb2JSZXN1bWVFcnJvciBleHRlbmRzIEpvYkVycm9yIHtcbiAgb3ZlcnJpZGUgbWVzc2FnZTogc3RyaW5nID0gXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byByZXN1bWUgdGhlIGpvYlwiO1xufVxuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFVwbG9hZEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgb3ZlcnJpZGUgbWVzc2FnZTogc3RyaW5nID0gXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHVwbG9hZGluZyB0aGUgZGF0YVwiO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogInU5QkFBQSxJQUFBQSxHQUFBQyxHQUFBLENBQUFDLEdBQUFDLEtBQUEsY0F1QkEsSUFBSUMsRUFBSSxPQUFPLFNBQVksU0FBVyxRQUFVLEtBQzVDQyxHQUFlRCxHQUFLLE9BQU9BLEVBQUUsT0FBVSxXQUN2Q0EsRUFBRSxNQUNGLFNBQXNCRSxFQUFRQyxFQUFVQyxFQUFNLENBQzlDLE9BQU8sU0FBUyxVQUFVLE1BQU0sS0FBS0YsRUFBUUMsRUFBVUMsQ0FBSSxDQUM3RCxFQUVFQyxHQUNBTCxHQUFLLE9BQU9BLEVBQUUsU0FBWSxXQUM1QkssR0FBaUJMLEVBQUUsUUFDVixPQUFPLHNCQUNoQkssR0FBaUIsU0FBd0JILEVBQVEsQ0FDL0MsT0FBTyxPQUFPLG9CQUFvQkEsQ0FBTSxFQUNyQyxPQUFPLE9BQU8sc0JBQXNCQSxDQUFNLENBQUMsQ0FDaEQsRUFFQUcsR0FBaUIsU0FBd0JILEVBQVEsQ0FDL0MsT0FBTyxPQUFPLG9CQUFvQkEsQ0FBTSxDQUMxQyxFQUdGLFNBQVNJLEdBQW1CQyxFQUFTLENBQy9CLFNBQVcsUUFBUSxNQUFNLFFBQVEsS0FBS0EsQ0FBTyxDQUNuRCxDQUVBLElBQUlDLEdBQWMsT0FBTyxPQUFTLFNBQXFCQyxFQUFPLENBQzVELE9BQU9BLElBQVVBLENBQ25CLEVBRUEsU0FBU0MsR0FBZSxDQUN0QkEsRUFBYSxLQUFLLEtBQUssSUFBSSxDQUM3QixDQUNBWCxHQUFPLFFBQVVXLEVBQ2pCWCxHQUFPLFFBQVEsS0FBT1ksR0FHdEJELEVBQWEsYUFBZUEsRUFFNUJBLEVBQWEsVUFBVSxRQUFVLE9BQ2pDQSxFQUFhLFVBQVUsYUFBZSxFQUN0Q0EsRUFBYSxVQUFVLGNBQWdCLE9BSXZDLElBQUlFLEdBQXNCLEdBRTFCLFNBQVNDLEdBQWNDLEVBQVUsQ0FDL0IsR0FBSSxPQUFPQSxHQUFhLFdBQ3RCLE1BQU0sSUFBSSxVQUFVLG1FQUFxRSxPQUFPQSxDQUFRLENBRTVHLENBRUEsT0FBTyxlQUFlSixFQUFjLHNCQUF1QixDQUN6RCxXQUFZLEdBQ1osSUFBSyxVQUFXLENBQ2QsT0FBT0UsRUFDVCxFQUNBLElBQUssU0FBU0csRUFBSyxDQUNqQixHQUFJLE9BQU9BLEdBQVEsVUFBWUEsRUFBTSxHQUFLUCxHQUFZTyxDQUFHLEVBQ3ZELE1BQU0sSUFBSSxXQUFXLGtHQUFvR0EsRUFBTSxHQUFHLEVBRXBJSCxHQUFzQkcsQ0FDeEIsQ0FDRixDQUFDLEVBRURMLEVBQWEsS0FBTyxVQUFXLEVBRXpCLEtBQUssVUFBWSxRQUNqQixLQUFLLFVBQVksT0FBTyxlQUFlLElBQUksRUFBRSxXQUMvQyxLQUFLLFFBQVUsT0FBTyxPQUFPLElBQUksRUFDakMsS0FBSyxhQUFlLEdBR3RCLEtBQUssY0FBZ0IsS0FBSyxlQUFpQixNQUM3QyxFQUlBQSxFQUFhLFVBQVUsZ0JBQWtCLFNBQXlCTSxFQUFHLENBQ25FLEdBQUksT0FBT0EsR0FBTSxVQUFZQSxFQUFJLEdBQUtSLEdBQVlRLENBQUMsRUFDakQsTUFBTSxJQUFJLFdBQVcsZ0ZBQWtGQSxFQUFJLEdBQUcsRUFFaEgsWUFBSyxjQUFnQkEsRUFDZCxJQUNULEVBRUEsU0FBU0MsR0FBaUJDLEVBQU0sQ0FDOUIsT0FBSUEsRUFBSyxnQkFBa0IsT0FDbEJSLEVBQWEsb0JBQ2ZRLEVBQUssYUFDZCxDQUVBUixFQUFhLFVBQVUsZ0JBQWtCLFVBQTJCLENBQ2xFLE9BQU9PLEdBQWlCLElBQUksQ0FDOUIsRUFFQVAsRUFBYSxVQUFVLEtBQU8sU0FBY1MsRUFBTSxDQUVoRCxRQURJZixFQUFPLENBQUMsRUFDSGdCLEVBQUksRUFBR0EsRUFBSSxVQUFVLE9BQVFBLElBQUtoQixFQUFLLEtBQUssVUFBVWdCLENBQUMsQ0FBQyxFQUNqRSxJQUFJQyxFQUFXRixJQUFTLFFBRXBCRyxFQUFTLEtBQUssUUFDbEIsR0FBSUEsSUFBVyxPQUNiRCxFQUFXQSxHQUFXQyxFQUFPLFFBQVUsZUFDaEMsQ0FBQ0QsRUFDUixNQUFPLEdBR1QsR0FBSUEsRUFBUyxDQUNYLElBQUlFLEVBR0osR0FGSW5CLEVBQUssT0FBUyxJQUNoQm1CLEVBQUtuQixFQUFLLENBQUMsR0FDVG1CLGFBQWMsTUFHaEIsTUFBTUEsRUFHUixJQUFJQyxFQUFNLElBQUksTUFBTSxvQkFBc0JELEVBQUssS0FBT0EsRUFBRyxRQUFVLElBQU0sR0FBRyxFQUM1RSxNQUFBQyxFQUFJLFFBQVVELEVBQ1JDLENBQ1IsQ0FFQSxJQUFJQyxFQUFVSCxFQUFPSCxDQUFJLEVBRXpCLEdBQUlNLElBQVksT0FDZCxNQUFPLEdBRVQsR0FBSSxPQUFPQSxHQUFZLFdBQ3JCeEIsR0FBYXdCLEVBQVMsS0FBTXJCLENBQUksTUFJaEMsU0FGSXNCLEVBQU1ELEVBQVEsT0FDZEUsRUFBWUMsR0FBV0gsRUFBU0MsQ0FBRyxFQUM5Qk4sRUFBSSxFQUFHQSxFQUFJTSxFQUFLLEVBQUVOLEVBQ3pCbkIsR0FBYTBCLEVBQVVQLENBQUMsRUFBRyxLQUFNaEIsQ0FBSSxFQUd6QyxNQUFPLEVBQ1QsRUFFQSxTQUFTeUIsR0FBYTNCLEVBQVFpQixFQUFNTCxFQUFVZ0IsRUFBUyxDQUNyRCxJQUFJQyxFQUNBVCxFQUNBVSxFQXNCSixHQXBCQW5CLEdBQWNDLENBQVEsRUFFdEJRLEVBQVNwQixFQUFPLFFBQ1pvQixJQUFXLFFBQ2JBLEVBQVNwQixFQUFPLFFBQVUsT0FBTyxPQUFPLElBQUksRUFDNUNBLEVBQU8sYUFBZSxJQUlsQm9CLEVBQU8sY0FBZ0IsU0FDekJwQixFQUFPLEtBQUssY0FBZWlCLEVBQ2ZMLEVBQVMsU0FBV0EsRUFBUyxTQUFXQSxDQUFRLEVBSTVEUSxFQUFTcEIsRUFBTyxTQUVsQjhCLEVBQVdWLEVBQU9ILENBQUksR0FHcEJhLElBQWEsT0FFZkEsRUFBV1YsRUFBT0gsQ0FBSSxFQUFJTCxFQUMxQixFQUFFWixFQUFPLHFCQUVMLE9BQU84QixHQUFhLFdBRXRCQSxFQUFXVixFQUFPSCxDQUFJLEVBQ3BCVyxFQUFVLENBQUNoQixFQUFVa0IsQ0FBUSxFQUFJLENBQUNBLEVBQVVsQixDQUFRLEVBRTdDZ0IsRUFDVEUsRUFBUyxRQUFRbEIsQ0FBUSxFQUV6QmtCLEVBQVMsS0FBS2xCLENBQVEsRUFJeEJpQixFQUFJZCxHQUFpQmYsQ0FBTSxFQUN2QjZCLEVBQUksR0FBS0MsRUFBUyxPQUFTRCxHQUFLLENBQUNDLEVBQVMsT0FBUSxDQUNwREEsRUFBUyxPQUFTLEdBR2xCLElBQUlDLEVBQUksSUFBSSxNQUFNLCtDQUNFRCxFQUFTLE9BQVMsSUFBTSxPQUFPYixDQUFJLEVBQUksbUVBRXZCLEVBQ3BDYyxFQUFFLEtBQU8sOEJBQ1RBLEVBQUUsUUFBVS9CLEVBQ1orQixFQUFFLEtBQU9kLEVBQ1RjLEVBQUUsTUFBUUQsRUFBUyxPQUNuQjFCLEdBQW1CMkIsQ0FBQyxDQUN0QixDQUdGLE9BQU8vQixDQUNULENBRUFRLEVBQWEsVUFBVSxZQUFjLFNBQXFCUyxFQUFNTCxFQUFVLENBQ3hFLE9BQU9lLEdBQWEsS0FBTVYsRUFBTUwsRUFBVSxFQUFLLENBQ2pELEVBRUFKLEVBQWEsVUFBVSxHQUFLQSxFQUFhLFVBQVUsWUFFbkRBLEVBQWEsVUFBVSxnQkFDbkIsU0FBeUJTLEVBQU1MLEVBQVUsQ0FDdkMsT0FBT2UsR0FBYSxLQUFNVixFQUFNTCxFQUFVLEVBQUksQ0FDaEQsRUFFSixTQUFTb0IsSUFBYyxDQUNyQixHQUFJLENBQUMsS0FBSyxNQUdSLE9BRkEsS0FBSyxPQUFPLGVBQWUsS0FBSyxLQUFNLEtBQUssTUFBTSxFQUNqRCxLQUFLLE1BQVEsR0FDVCxVQUFVLFNBQVcsRUFDaEIsS0FBSyxTQUFTLEtBQUssS0FBSyxNQUFNLEVBQ2hDLEtBQUssU0FBUyxNQUFNLEtBQUssT0FBUSxTQUFTLENBRXJELENBRUEsU0FBU0MsR0FBVWpDLEVBQVFpQixFQUFNTCxFQUFVLENBQ3pDLElBQUlzQixFQUFRLENBQUUsTUFBTyxHQUFPLE9BQVEsT0FBVyxPQUFRbEMsRUFBUSxLQUFNaUIsRUFBTSxTQUFVTCxDQUFTLEVBQzFGdUIsRUFBVUgsR0FBWSxLQUFLRSxDQUFLLEVBQ3BDLE9BQUFDLEVBQVEsU0FBV3ZCLEVBQ25Cc0IsRUFBTSxPQUFTQyxFQUNSQSxDQUNULENBRUEzQixFQUFhLFVBQVUsS0FBTyxTQUFjUyxFQUFNTCxFQUFVLENBQzFELE9BQUFELEdBQWNDLENBQVEsRUFDdEIsS0FBSyxHQUFHSyxFQUFNZ0IsR0FBVSxLQUFNaEIsRUFBTUwsQ0FBUSxDQUFDLEVBQ3RDLElBQ1QsRUFFQUosRUFBYSxVQUFVLG9CQUNuQixTQUE2QlMsRUFBTUwsRUFBVSxDQUMzQyxPQUFBRCxHQUFjQyxDQUFRLEVBQ3RCLEtBQUssZ0JBQWdCSyxFQUFNZ0IsR0FBVSxLQUFNaEIsRUFBTUwsQ0FBUSxDQUFDLEVBQ25ELElBQ1QsRUFHSkosRUFBYSxVQUFVLGVBQ25CLFNBQXdCUyxFQUFNTCxFQUFVLENBQ3RDLElBQUl3QixFQUFNaEIsRUFBUWlCLEVBQVVuQixFQUFHb0IsRUFLL0IsR0FIQTNCLEdBQWNDLENBQVEsRUFFdEJRLEVBQVMsS0FBSyxRQUNWQSxJQUFXLE9BQ2IsT0FBTyxLQUdULEdBREFnQixFQUFPaEIsRUFBT0gsQ0FBSSxFQUNkbUIsSUFBUyxPQUNYLE9BQU8sS0FFVCxHQUFJQSxJQUFTeEIsR0FBWXdCLEVBQUssV0FBYXhCLEVBQ3JDLEVBQUUsS0FBSyxlQUFpQixFQUMxQixLQUFLLFFBQVUsT0FBTyxPQUFPLElBQUksR0FFakMsT0FBT1EsRUFBT0gsQ0FBSSxFQUNkRyxFQUFPLGdCQUNULEtBQUssS0FBSyxpQkFBa0JILEVBQU1tQixFQUFLLFVBQVl4QixDQUFRLFdBRXRELE9BQU93QixHQUFTLFdBQVksQ0FHckMsSUFGQUMsRUFBVyxHQUVObkIsRUFBSWtCLEVBQUssT0FBUyxFQUFHbEIsR0FBSyxFQUFHQSxJQUNoQyxHQUFJa0IsRUFBS2xCLENBQUMsSUFBTU4sR0FBWXdCLEVBQUtsQixDQUFDLEVBQUUsV0FBYU4sRUFBVSxDQUN6RDBCLEVBQW1CRixFQUFLbEIsQ0FBQyxFQUFFLFNBQzNCbUIsRUFBV25CLEVBQ1gsS0FDRixDQUdGLEdBQUltQixFQUFXLEVBQ2IsT0FBTyxLQUVMQSxJQUFhLEVBQ2ZELEVBQUssTUFBTSxFQUVYRyxHQUFVSCxFQUFNQyxDQUFRLEVBR3RCRCxFQUFLLFNBQVcsSUFDbEJoQixFQUFPSCxDQUFJLEVBQUltQixFQUFLLENBQUMsR0FFbkJoQixFQUFPLGlCQUFtQixRQUM1QixLQUFLLEtBQUssaUJBQWtCSCxFQUFNcUIsR0FBb0IxQixDQUFRLENBQ2xFLENBRUEsT0FBTyxJQUNULEVBRUpKLEVBQWEsVUFBVSxJQUFNQSxFQUFhLFVBQVUsZUFFcERBLEVBQWEsVUFBVSxtQkFDbkIsU0FBNEJTLEVBQU0sQ0FDaEMsSUFBSVEsRUFBV0wsRUFBUSxFQUd2QixHQURBQSxFQUFTLEtBQUssUUFDVkEsSUFBVyxPQUNiLE9BQU8sS0FHVCxHQUFJQSxFQUFPLGlCQUFtQixPQUM1QixPQUFJLFVBQVUsU0FBVyxHQUN2QixLQUFLLFFBQVUsT0FBTyxPQUFPLElBQUksRUFDakMsS0FBSyxhQUFlLEdBQ1hBLEVBQU9ILENBQUksSUFBTSxTQUN0QixFQUFFLEtBQUssZUFBaUIsRUFDMUIsS0FBSyxRQUFVLE9BQU8sT0FBTyxJQUFJLEVBRWpDLE9BQU9HLEVBQU9ILENBQUksR0FFZixLQUlULEdBQUksVUFBVSxTQUFXLEVBQUcsQ0FDMUIsSUFBSXVCLEVBQU8sT0FBTyxLQUFLcEIsQ0FBTSxFQUN6QnFCLEVBQ0osSUFBSyxFQUFJLEVBQUcsRUFBSUQsRUFBSyxPQUFRLEVBQUUsRUFDN0JDLEVBQU1ELEVBQUssQ0FBQyxFQUNSQyxJQUFRLGtCQUNaLEtBQUssbUJBQW1CQSxDQUFHLEVBRTdCLFlBQUssbUJBQW1CLGdCQUFnQixFQUN4QyxLQUFLLFFBQVUsT0FBTyxPQUFPLElBQUksRUFDakMsS0FBSyxhQUFlLEVBQ2IsSUFDVCxDQUlBLEdBRkFoQixFQUFZTCxFQUFPSCxDQUFJLEVBRW5CLE9BQU9RLEdBQWMsV0FDdkIsS0FBSyxlQUFlUixFQUFNUSxDQUFTLFVBQzFCQSxJQUFjLE9BRXZCLElBQUssRUFBSUEsRUFBVSxPQUFTLEVBQUcsR0FBSyxFQUFHLElBQ3JDLEtBQUssZUFBZVIsRUFBTVEsRUFBVSxDQUFDLENBQUMsRUFJMUMsT0FBTyxJQUNULEVBRUosU0FBU2lCLEdBQVcxQyxFQUFRaUIsRUFBTTBCLEVBQVEsQ0FDeEMsSUFBSXZCLEVBQVNwQixFQUFPLFFBRXBCLEdBQUlvQixJQUFXLE9BQ2IsTUFBTyxDQUFDLEVBRVYsSUFBSXdCLEVBQWF4QixFQUFPSCxDQUFJLEVBQzVCLE9BQUkyQixJQUFlLE9BQ1YsQ0FBQyxFQUVOLE9BQU9BLEdBQWUsV0FDakJELEVBQVMsQ0FBQ0MsRUFBVyxVQUFZQSxDQUFVLEVBQUksQ0FBQ0EsQ0FBVSxFQUU1REQsRUFDTEUsR0FBZ0JELENBQVUsRUFBSWxCLEdBQVdrQixFQUFZQSxFQUFXLE1BQU0sQ0FDMUUsQ0FFQXBDLEVBQWEsVUFBVSxVQUFZLFNBQW1CUyxFQUFNLENBQzFELE9BQU95QixHQUFXLEtBQU16QixFQUFNLEVBQUksQ0FDcEMsRUFFQVQsRUFBYSxVQUFVLGFBQWUsU0FBc0JTLEVBQU0sQ0FDaEUsT0FBT3lCLEdBQVcsS0FBTXpCLEVBQU0sRUFBSyxDQUNyQyxFQUVBVCxFQUFhLGNBQWdCLFNBQVNzQyxFQUFTN0IsRUFBTSxDQUNuRCxPQUFJLE9BQU82QixFQUFRLGVBQWtCLFdBQzVCQSxFQUFRLGNBQWM3QixDQUFJLEVBRTFCOEIsR0FBYyxLQUFLRCxFQUFTN0IsQ0FBSSxDQUUzQyxFQUVBVCxFQUFhLFVBQVUsY0FBZ0J1QyxHQUN2QyxTQUFTQSxHQUFjOUIsRUFBTSxDQUMzQixJQUFJRyxFQUFTLEtBQUssUUFFbEIsR0FBSUEsSUFBVyxPQUFXLENBQ3hCLElBQUl3QixFQUFheEIsRUFBT0gsQ0FBSSxFQUU1QixHQUFJLE9BQU8yQixHQUFlLFdBQ3hCLE1BQU8sR0FDRixHQUFJQSxJQUFlLE9BQ3hCLE9BQU9BLEVBQVcsTUFFdEIsQ0FFQSxNQUFPLEVBQ1QsQ0FFQXBDLEVBQWEsVUFBVSxXQUFhLFVBQXNCLENBQ3hELE9BQU8sS0FBSyxhQUFlLEVBQUlMLEdBQWUsS0FBSyxPQUFPLEVBQUksQ0FBQyxDQUNqRSxFQUVBLFNBQVN1QixHQUFXc0IsRUFBS2xDLEVBQUcsQ0FFMUIsUUFESW1DLEVBQU8sSUFBSSxNQUFNbkMsQ0FBQyxFQUNiSSxFQUFJLEVBQUdBLEVBQUlKLEVBQUcsRUFBRUksRUFDdkIrQixFQUFLL0IsQ0FBQyxFQUFJOEIsRUFBSTlCLENBQUMsRUFDakIsT0FBTytCLENBQ1QsQ0FFQSxTQUFTVixHQUFVSCxFQUFNYyxFQUFPLENBQzlCLEtBQU9BLEVBQVEsRUFBSWQsRUFBSyxPQUFRYyxJQUM5QmQsRUFBS2MsQ0FBSyxFQUFJZCxFQUFLYyxFQUFRLENBQUMsRUFDOUJkLEVBQUssSUFBSSxDQUNYLENBRUEsU0FBU1MsR0FBZ0JHLEVBQUssQ0FFNUIsUUFESUcsRUFBTSxJQUFJLE1BQU1ILEVBQUksTUFBTSxFQUNyQjlCLEVBQUksRUFBR0EsRUFBSWlDLEVBQUksT0FBUSxFQUFFakMsRUFDaENpQyxFQUFJakMsQ0FBQyxFQUFJOEIsRUFBSTlCLENBQUMsRUFBRSxVQUFZOEIsRUFBSTlCLENBQUMsRUFFbkMsT0FBT2lDLENBQ1QsQ0FFQSxTQUFTMUMsR0FBS3FDLEVBQVNNLEVBQU0sQ0FDM0IsT0FBTyxJQUFJLFFBQVEsU0FBVUMsRUFBU0MsRUFBUSxDQUM1QyxTQUFTQyxFQUFjakMsRUFBSyxDQUMxQndCLEVBQVEsZUFBZU0sRUFBTUksQ0FBUSxFQUNyQ0YsRUFBT2hDLENBQUcsQ0FDWixDQUVBLFNBQVNrQyxHQUFXLENBQ2QsT0FBT1YsRUFBUSxnQkFBbUIsWUFDcENBLEVBQVEsZUFBZSxRQUFTUyxDQUFhLEVBRS9DRixFQUFRLENBQUMsRUFBRSxNQUFNLEtBQUssU0FBUyxDQUFDLENBQ2xDLENBRUFJLEdBQStCWCxFQUFTTSxFQUFNSSxFQUFVLENBQUUsS0FBTSxFQUFLLENBQUMsRUFDbEVKLElBQVMsU0FDWE0sR0FBOEJaLEVBQVNTLEVBQWUsQ0FBRSxLQUFNLEVBQUssQ0FBQyxDQUV4RSxDQUFDLENBQ0gsQ0FFQSxTQUFTRyxHQUE4QlosRUFBU3ZCLEVBQVNvQyxFQUFPLENBQzFELE9BQU9iLEVBQVEsSUFBTyxZQUN4QlcsR0FBK0JYLEVBQVMsUUFBU3ZCLEVBQVNvQyxDQUFLLENBRW5FLENBRUEsU0FBU0YsR0FBK0JYLEVBQVNNLEVBQU14QyxFQUFVK0MsRUFBTyxDQUN0RSxHQUFJLE9BQU9iLEVBQVEsSUFBTyxXQUNwQmEsRUFBTSxLQUNSYixFQUFRLEtBQUtNLEVBQU14QyxDQUFRLEVBRTNCa0MsRUFBUSxHQUFHTSxFQUFNeEMsQ0FBUSxVQUVsQixPQUFPa0MsRUFBUSxrQkFBcUIsV0FHN0NBLEVBQVEsaUJBQWlCTSxFQUFNLFNBQVNRLEVBQWEvQyxFQUFLLENBR3BEOEMsRUFBTSxNQUNSYixFQUFRLG9CQUFvQk0sRUFBTVEsQ0FBWSxFQUVoRGhELEVBQVNDLENBQUcsQ0FDZCxDQUFDLE1BRUQsT0FBTSxJQUFJLFVBQVUsc0VBQXdFLE9BQU9pQyxDQUFPLENBRTlHLElDaGZBLElBQUFlLEdBQUFDLEdBQUEsQ0FBQUMsR0FBQUMsSUFBQSxjQUFhLElBQUlDLEVBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsUUFBUSxTQUFTQyxFQUFFLENBQUMsS0FBSyxTQUFTLFVBQVUsQ0FBQyxNQUFNLFlBQVksS0FBSyxPQUFPLEVBQUUsS0FBSyxRQUFRQSxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFLENBQUMsS0FBSyxTQUFTLFVBQVUsQ0FBQyxNQUFNLFlBQVksS0FBSyxPQUFPLEVBQUUsS0FBSyxRQUFRQSxDQUFDLEVBQUUsSUFBSSxTQUFTQSxFQUFFLENBQUMsS0FBSyxTQUFTLFVBQVUsQ0FBQyxNQUFNLFFBQVEsS0FBSyxPQUFPLEVBQUUsS0FBSyxRQUFRQSxDQUFDLEVBQUUsU0FBUyxTQUFTQSxFQUFFLENBQUMsS0FBSyxTQUFTLFVBQVUsQ0FBQyxNQUFNLGNBQWMsS0FBSyxPQUFPLEVBQUUsS0FBSyxRQUFRQSxDQUFDLENBQUMsQ0FBQyxFQUMzY0QsRUFBSyxPQUFPLElBQUksU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxJQUFJQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUVMLEVBQUVELEVBQUUsT0FBTyxJQUFJTyxFQUFFLEVBQUUsR0FBT04sSUFBSixHQUFXQSxJQUFKLEdBQVdBLElBQUosRUFBTSxNQUFNLElBQUlGLEVBQUssVUFBVSxRQUFRLHNCQUFzQixFQUE2QixJQUEzQixLQUFLLEVBQUUsQ0FBQ0ksRUFBRUgsRUFBRSxNQUFNLENBQUMsRUFBRUksRUFBRSxDQUFDLENBQUMsRUFBTUosRUFBRUMsRUFBRUQsRUFBRSxFQUFFQyxFQUFFLEdBQUdELElBQUtFLEVBQUVDLEVBQUVILEVBQUUsQ0FBQyxHQUFTQSxFQUFFQyxJQUFOLEdBQWFBLElBQUosR0FBV0QsRUFBRUMsSUFBTixLQUFRQyxFQUFFRyxFQUFFSCxJQUFJLEVBQUUsR0FBRyxHQUFHRyxFQUFFSCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUdHLEVBQUVILEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRUcsRUFBRUgsRUFBRSxHQUFHLEVBQU1GLEVBQUVDLElBQU4sSUFBVUMsRUFBRUEsR0FBRyxFQUFFQSxJQUFJLEdBQUdLLEdBQUcsR0FBR0EsRUFBRUEsR0FBRyxFQUFFLEtBQUtBLEdBQUcsS0FBSUosRUFBRUgsQ0FBQyxFQUFFRyxFQUFFSCxFQUFFQyxDQUFDLEVBQUVDLEVBQUUsSUFBSUQsRUFBRSxFQUFFRCxFQUFFQyxJQUFJRCxJQUFJRSxFQUFFQyxFQUFFRixFQUFFLEVBQUVELEVBQUVBLEVBQUUsQ0FBQyxFQUFFSSxFQUFFSCxDQUFDLEVBQUUsR0FBR0QsR0FBRyxFQUFFQyxFQUFFQyxFQUFFSSxFQUFFLENBQUMsRUFBRUQsRUFBRUgsSUFBSSxFQUFFLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEVBQzNmLEdBQUcsQ0FBQyxDQUFDLEVBQ0xILEVBQUssT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLFNBQVNDLEVBQUUsQ0FBQyxPQUFPUSxHQUFHLEtBQUtSLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFLENBQUMsT0FBT1EsR0FBRyxLQUFLUixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUlBLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUYsRUFBRSxDQUFDLEVBQUVHLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxJQUFJVCxFQUFFLEVBQUUsSUFBTUEsRUFBRUEsSUFBSUssR0FBR0YsRUFBRUgsQ0FBQyxFQUFFQSxHQUFHLEVBQUUsS0FBS0EsR0FBRyxJQUFJQSxDQUFDLEVBQUVBLEVBQUUsSUFBSUMsRUFBRUMsRUFBRSxFQUFFLENBQUNKLEVBQUVHLENBQUMsRUFBRUEsR0FBR0ssR0FBRyxFQUFFSixFQUFFRyxFQUFFSCxDQUFDLEdBQUcsRUFBRSxJQUFJTSxFQUFFTixFQUFFQSxHQUFHLEVBQUVBLEdBQUcsRUFBRUEsR0FBRyxFQUFFQSxHQUFHLEVBQUVNLEVBQUVBLEdBQUcsRUFBRUEsRUFBRSxJQUFJLEdBQUdWLEVBQUVHLENBQUMsRUFBRU8sRUFBRVQsRUFBRVMsQ0FBQyxFQUFFUCxFQUFFTSxFQUFFSixFQUFFSCxFQUFFRyxFQUFFRyxFQUFFSCxFQUFFRixDQUFDLENBQUMsQ0FBQyxFQUFFUSxFQUFFLFNBQVVGLEVBQUUsTUFBUVAsRUFBRSxJQUFNTSxFQUFFLFNBQVVMLEVBQUVNLEVBQUUsSUFBTUosRUFBRUssQ0FBQyxFQUFFLFNBQVVBLEVBQUVSLEVBQUUsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVDLENBQUMsRUFBRU0sRUFBRUEsR0FBRyxHQUFHQSxJQUFJLEVBQUVWLEVBQUVHLENBQUMsRUFBRVEsQ0FBQyxFQUFFQyxFQUFFQSxHQUFHLEdBQUdBLElBQUksRUFBRSxJQUFJVCxFQUNsZ0IsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVKLEVBQUVJLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNoRCxTQUFTSSxHQUFHUixFQUFFQyxFQUFFQyxFQUFFLENBQUMsR0FBT0QsRUFBRSxTQUFOLEVBQWEsTUFBTSxJQUFJRixFQUFLLFVBQVUsUUFBUSx3QkFBd0IsRUFBRSxJQUFJSSxFQUFFSCxFQUFFLEVBQUVFLENBQUMsRUFBRUUsRUFBRUgsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRSxFQUFFSixFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUcsRUFBRUwsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRixFQUFFQSxFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRSxJQUFJSSxFQUFFRSxFQUFFQyxFQUFFQyxFQUFFUixFQUFFLE9BQU8sRUFBRSxFQUFFUyxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUVQLEVBQUVQLEVBQUUsRUFBRUUsQ0FBQyxFQUFFRixFQUFFTyxFQUFFLENBQUMsRUFBRSxJQUFJUSxFQUFFUixFQUFFLENBQUMsRUFBRVMsRUFBRVQsRUFBRSxDQUFDLEVBQUVVLEVBQUVWLEVBQUUsQ0FBQyxFQUFFVyxFQUFFWCxFQUFFLENBQUMsRUFBRSxJQUFJSyxFQUFFLEVBQUVBLEVBQUVELEVBQUVDLElBQUlMLEVBQUVQLEVBQUVJLElBQUksRUFBRSxFQUFFVyxFQUFFVixHQUFHLEdBQUcsR0FBRyxFQUFFVyxFQUFFVixHQUFHLEVBQUUsR0FBRyxFQUFFVyxFQUFFaEIsRUFBRSxHQUFHLEVBQUVFLEVBQUVVLENBQUMsRUFBRUosRUFBRVQsRUFBRUssSUFBSSxFQUFFLEVBQUVVLEVBQUVULEdBQUcsR0FBRyxHQUFHLEVBQUVVLEVBQUVmLEdBQUcsRUFBRSxHQUFHLEVBQUVnQixFQUFFYixFQUFFLEdBQUcsRUFBRUQsRUFBRVUsRUFBRSxDQUFDLEVBQUVILEVBQUVWLEVBQUVNLElBQUksRUFBRSxFQUFFUyxFQUFFZCxHQUFHLEdBQUcsR0FBRyxFQUFFZSxFQUFFWixHQUFHLEVBQUUsR0FB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YSxHQUFHLEVBQUUsRUFBRSxNQUFNLFNBQVNBLEVBQUVDLEVBQUUsQ0FBQyxHQUFHRixFQUFLLFNBQVMsVUFBVUMsQ0FBQyxJQUFJRCxFQUFLLFNBQVMsVUFBVUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJQyxFQUFFLEVBQUVDLEVBQUUsSUFBSUEsRUFBRSxFQUFFQSxFQUFFSCxFQUFFLE9BQU9HLElBQUlELEdBQUdGLEVBQUVHLENBQUMsRUFBRUYsRUFBRUUsQ0FBQyxFQUFFLE9BQzNlRCxJQURrZixDQUNqZixFQUFFLEVBQUUsU0FBU0YsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQU0sSUFBSkEsRUFBRSxFQUFlRCxJQUFULFNBQWFBLEVBQUUsQ0FBQyxHQUFHLElBQUlGLEVBQUVBLEdBQUcsR0FBR0UsRUFBRSxLQUFLRCxDQUFDLEVBQUVBLEVBQUUsRUFBRSxHQUFPRCxJQUFKLEVBQU0sT0FBT0UsRUFBRSxPQUFPSCxDQUFDLEVBQUUsSUFBSUksRUFBRSxFQUFFQSxFQUFFSixFQUFFLE9BQU9JLElBQUlELEVBQUUsS0FBS0QsRUFBRUYsRUFBRUksQ0FBQyxJQUFJSCxDQUFDLEVBQUVDLEVBQUVGLEVBQUVJLENBQUMsR0FBRyxHQUFHSCxFQUFFLE9BQUFHLEVBQUVKLEVBQUUsT0FBT0EsRUFBRUEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFQSxFQUFFRCxFQUFLLFNBQVMsV0FBV0ssQ0FBQyxFQUFFRCxFQUFFLEtBQUtKLEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFLEdBQUcsR0FBR0MsRUFBRUQsRUFBRUUsRUFBRUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQVNBLENBQUMsRUFBRSxFQUFFLFNBQVNILEVBQUVDLEVBQUUsQ0FBQyxNQUFNLENBQUNELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUQsRUFBRSxDQUFDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRCxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENB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SUFBSUQsRUFBSyxLQUFLLFNBQVEsT0FBT0MsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUN4Z0JELEVBQUssS0FBSyxPQUFPLFVBQVUsQ0FBQyxVQUFVLElBQUksTUFBTSxVQUFVLENBQUMsWUFBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFTLElBQUksRUFBRSxPQUFPLFNBQVNDLEVBQUUsQ0FBWSxPQUFPQSxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFHLElBQUlDLEVBQUVDLEVBQUUsS0FBSyxFQUFFSCxFQUFLLFNBQVMsT0FBTyxLQUFLLEVBQUVDLENBQUMsRUFBaUQsR0FBL0NDLEVBQUUsS0FBSyxFQUFFRCxFQUFFLEtBQUssRUFBRUMsRUFBRUYsRUFBSyxTQUFTLFVBQVVDLENBQUMsRUFBSyxpQkFBaUJBLEVBQUUsTUFBTSxJQUFJRCxFQUFLLFVBQVUsUUFBUSxxQ0FBcUMsRUFBRSxHQUFpQixPQUFPLFlBQXJCLElBQWlDLENBQUMsSUFBSUksRUFBRSxJQUFJLFlBQVlELENBQUMsRUFBRUUsRUFBRSxFQUFFLElBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVFLEVBQUUsU0FBUyxHQUFHQyxFQUN0ZixJQUFJQSxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxHQUFHLEVBQUVGLEVBQUUsT0FBTyxFQUFFLEdBQUdFLENBQUMsQ0FBQyxLQUFNLEtBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUlGLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFLEtBQUssRUFBRUQsRUFBRUYsRUFBSyxTQUFTLE9BQU9FLEVBQUUsQ0FBQ0YsRUFBSyxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUlDLEVBQUVDLEVBQUUsT0FBTyxFQUFFRCxFQUFFLEdBQUdBLElBQUlDLEVBQUUsS0FBSyxDQUFDLEVBQXlDLElBQXZDQSxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssRUFBRSxVQUFXLENBQUMsRUFBTUEsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQUVBLEVBQUUsUUFBUSxLQUFLLEVBQUVBLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQUssTUFBTSxFQUFTQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBU0YsRUFBRUEsRUFBRSxDQUFDLE1BQU8sYUFBYUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUN6ZixHQUFHLEtBQUssQ0FBQ0EsSUFBSSxFQUFFSCxJQUFJLEtBQUssRUFBRUEsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUVELENBQUMsRUFBRUQsRUFBRSxLQUFLLElBQUlFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUgsRUFBRSxDQUFDLEVBQUVLLEVBQUVMLEVBQUUsQ0FBQyxFQUFFTSxFQUFFTixFQUFFLENBQUMsRUFBRU8sRUFBRVAsRUFBRSxDQUFDLEVBQUVRLEVBQUVSLEVBQUUsQ0FBQyxFQUFFUyxFQUFFVCxFQUFFLENBQUMsRUFBRVUsRUFBRVYsRUFBRSxDQUFDLEVBQUUsSUFBSUgsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUksR0FBR0EsRUFBRUMsRUFBRUYsRUFBRUMsQ0FBQyxHQUFHQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsRUFBRSxFQUFFRSxFQUFFSCxFQUFFQyxFQUFFLEdBQUcsRUFBRSxFQUFFQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsR0FBR0MsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksRUFBRUEsR0FBRyxHQUFHQSxHQUFHLEtBQUtDLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJSCxFQUFFQyxFQUFFLEVBQUUsRUFBRUQsRUFBRUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHQyxFQUFFQSxFQUFFWSxHQUFHSCxJQUFJLEVBQUVBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJRSxFQUFFRixHQUFHQyxFQUFFQyxJQUFJUixFQUFFSixDQUFDLEVBQUVhLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVSLEVBQUUsRUFBRVEsRUFBRUQsRUFBRUEsRUFBRUYsRUFBRUEsRUFBRUQsRUFBRUEsRUFBRUosR0FBR0ssRUFBRUUsRUFBRUMsR0FBR0gsRUFBRUUsS0FBS0YsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksR0FBR0EsR0FBRyxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVFLEVBQ3BmLEVBQUVGLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRUcsRUFBRSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVLLEVBQUUsRUFBRUwsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFTSxFQUFFLEVBQUVOLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRU8sRUFBRSxFQUFFUCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVRLEVBQUUsRUFBRVIsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFUyxFQUFFLEVBQUVULEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRVUsRUFBRSxDQUFDLENBQUMsRUFBRWYsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRUQsRUFBSyxLQUFLLE9BQU8sS0FBSyxTQUFTQyxFQUFFLENBQUMsT0FBTyxJQUFJRCxFQUFLLEtBQUssU0FBUSxPQUFPQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQy9TRCxFQUFLLEtBQUssT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sVUFBVSxDQUFDLFlBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBUyxJQUFJLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQVksT0FBT0EsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFLEtBQUssRUFBRUgsRUFBSyxTQUFTLE9BQU8sS0FBSyxFQUFFQyxDQUFDLEVBQWlELEdBQS9DQyxFQUFFLEtBQUssRUFBRUQsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUssU0FBUyxVQUFVQyxDQUFDLEVBQUssaUJBQWlCQSxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEscUNBQXFDLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDLElBQUlJLEVBQUUsSUFBSSxZQUFZRCxDQUFDLEVBQUVFLEVBQUUsRUFBRSxJQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFRSxFQUFFLFNBQVMsR0FDdGZDLEVBQUUsSUFBSUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsR0FBRyxFQUFFRixFQUFFLE9BQU8sRUFBRSxHQUFHRSxDQUFDLENBQUMsS0FBTSxLQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJRixFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVELEVBQUVGLEVBQUssU0FBUyxPQUFPRSxFQUFFLENBQUNGLEVBQUssU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFQyxFQUFFLE9BQU8sRUFBRUQsRUFBRSxHQUFHQSxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUE2RCxJQUEzREEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUUsVUFBVyxDQUFDLEVBQU1BLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLFFBQVEsS0FBSyxFQUFFQSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFLLE1BQU0sRUFBU0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFDbGYsUUFBUSxPQUFPLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsU0FBUyxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFDcGYsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxPQUFPLFNBQVMsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTQyxFQUFFRCxFQUFFLENBQUMsTUFBTyxnQkFBZUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUUUsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUFFLEdBQUcsS0FBSyxDQUFDQSxJQUFJLEVBQUVILElBQUksS0FBSyxFQUFFLEVBQUVBLENBQUMsRUFBRUYsRUFBRSxLQUFLLElBQUlHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUVELEVBQUUsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBR0QsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFQSxDQUFDLEVBQUVGLEVBQUUsS0FBSyxJQUFJRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUVELEVBQUUsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHRCxDQUFDLEVBQUVBLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBU0YsRUFBRSxDQUFDLElBQUlDLEVBQ3ZnQkMsRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUgsRUFBRSxDQUFDLEVBQUVJLEVBQUVKLEVBQUUsQ0FBQyxFQUFFTSxFQUFFTixFQUFFLENBQUMsRUFBRU8sRUFBRVAsRUFBRSxDQUFDLEVBQUVRLEVBQUVSLEVBQUUsQ0FBQyxFQUFFUyxFQUFFVCxFQUFFLENBQUMsRUFBRVUsRUFBRVYsRUFBRSxDQUFDLEVBQUVXLEVBQUVYLEVBQUUsQ0FBQyxFQUFFWSxFQUFFWixFQUFFLENBQUMsRUFBRWEsRUFBRWIsRUFBRSxFQUFFLEVBQUVjLEVBQUVkLEVBQUUsRUFBRSxFQUFFZSxFQUFFZixFQUFFLEVBQUUsRUFBRWdCLEdBQUVoQixFQUFFLEVBQUUsRUFBRWlCLEdBQUdqQixFQUFFLEVBQUUsRUFBRWtCLEdBQUVsQixFQUFFLEVBQUUsRUFBRW1CLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDQSxFQUFFLE1BQU0sR0FBRyxFQUFFLFFBQVFDLEVBQUUsRUFBRSxHQUFHQSxFQUFFQSxJQUFJRCxFQUFFQyxDQUFDLEVBQUV2QixFQUFFdUIsQ0FBQyxDQUFDLE1BQU1ELEVBQUV0QixFQUFFLElBQUl1QixFQUFFbEIsRUFBRW1CLEVBQUVsQixFQUFFbUIsRUFBRWxCLEVBQUVtQixFQUFFakIsRUFBRWtCLEdBQUVqQixFQUFFa0IsRUFBRWpCLEVBQUVrQixHQUFFakIsRUFBRWtCLEdBQUVqQixFQUFFa0IsRUFBRWpCLEVBQUVrQixFQUFFakIsRUFBRWtCLEdBQUVqQixFQUFFa0IsR0FBRWpCLEVBQUVrQixHQUFFakIsRUFBRWtCLEdBQUVqQixHQUFFa0IsR0FBRWpCLEdBQUdrQixHQUFFakIsR0FBRSxJQUFJckIsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUksQ0FBQyxHQUFHLEdBQUdBLEVBQUVDLEVBQUVxQixFQUFFLEVBQUV0QixDQUFDLEVBQUVFLEVBQUVvQixFQUFFLEVBQUV0QixFQUFFLENBQUMsTUFBTSxDQUFDRSxFQUFFb0IsRUFBRSxHQUFHdEIsRUFBRSxHQUFHLEVBQUUsSUFBSXVDLEVBQUVqQixFQUFFLEdBQUd0QixFQUFFLElBQUksQ0FBQyxFQUFFQyxHQUFHc0MsR0FBRyxHQUFHckMsSUFBSSxJQUFJcUMsR0FBRyxHQUFHckMsSUFBSSxHQUFHQSxJQUFJLEVBQUUsSUFBSXNDLEdBQUd0QyxHQUFHLEdBQUdxQyxJQUFJLElBQUlyQyxHQUFHLEdBQUdxQyxJQUFJLElBQUlyQyxHQUFHLEdBQUdxQyxJQUFJLEdBQUdyQyxFQUFFb0IsRUFBRSxHQUFHdEIsRUFBRSxFQUFFLEVBQUUsSUFBSXlDLEVBQUVuQixFQUFFLEdBQUd0QixFQUFFLEdBQUcsQ0FBQyxFQUNuZnVDLEdBQUdFLEdBQUcsR0FBR3ZDLElBQUksS0FBS0EsR0FBRyxFQUFFdUMsSUFBSSxJQUFJdkMsSUFBSSxFQUFFdUMsR0FBR3ZDLEdBQUcsR0FBR3VDLElBQUksS0FBS0EsR0FBRyxFQUFFdkMsSUFBSSxLQUFLQSxHQUFHLEdBQUd1QyxJQUFJLEdBQUdDLEdBQUVwQixFQUFFLEdBQUd0QixFQUFFLEVBQUUsRUFBRTJDLEdBQUVyQixFQUFFLEdBQUd0QixFQUFFLEdBQUcsRUFBRTRDLEdBQUV0QixFQUFFLEdBQUd0QixFQUFFLElBQUksQ0FBQyxFQUFFRSxFQUFFc0MsRUFBRWxCLEVBQUUsR0FBR3RCLEVBQUUsR0FBRyxDQUFDLEVBQUVDLEVBQUVBLEVBQUV5QyxJQUFHeEMsSUFBSSxFQUFFc0MsSUFBSSxFQUFFLEVBQUUsR0FBR3RDLEdBQUd1QyxFQUFFeEMsR0FBR3NDLEdBQUdyQyxJQUFJLEVBQUV1QyxJQUFJLEVBQUUsRUFBRSxHQUFHdkMsR0FBRzBDLEdBQUUzQyxHQUFHMEMsSUFBR3pDLElBQUksRUFBRTBDLEtBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQ3RCLEVBQUUsRUFBRXRCLENBQUMsRUFBRUMsR0FBRyxFQUFFcUIsRUFBRSxFQUFFdEIsRUFBRSxDQUFDLEVBQUVFLEdBQUcsRUFBRSxJQUFJd0MsR0FBRVgsRUFBRUUsR0FBRSxDQUFDRixFQUFFSSxHQUFFVSxHQUFHYixFQUFFRSxHQUFFLENBQUNGLEVBQUVJLEdBQUVLLEVBQUVsQixFQUFFRSxFQUFFRixFQUFFSSxHQUFFRixFQUFFRSxHQUFFbUIsR0FBR3RCLEVBQUVFLEVBQUVGLEVBQUVJLEVBQUVGLEVBQUVFLEVBQUVlLElBQUduQixHQUFHLEVBQUVELElBQUksS0FBS0EsR0FBRyxHQUFHQyxJQUFJLElBQUlELEdBQUcsR0FBR0MsSUFBSSxHQUFHb0IsSUFBR3JCLEdBQUcsRUFBRUMsSUFBSSxLQUFLQSxHQUFHLEdBQUdELElBQUksSUFBSUMsR0FBRyxHQUFHRCxJQUFJLEdBQUd3QixHQUFHM0MsRUFBRSxFQUFFSixDQUFDLEVBQUVnRCxHQUFHNUMsRUFBRSxFQUFFSixFQUFFLENBQUMsRUFBRXVDLEVBQUVELEtBQUlQLEdBQUcsR0FBR0MsSUFBSSxLQUFLRCxHQUFHLEdBQUdDLElBQUksS0FBS0EsR0FBRyxHQUFHRCxJQUFJLElBQUlTLEVBQUVILEtBQUlMLEdBQUcsR0FBR0QsSUFBSSxLQUFLQyxHQUFHLEdBQUdELElBQUksS0FBS0EsR0FDcGYsR0FBR0MsSUFBSSxLQUFLTyxJQUFJLEVBQUVELEtBQUksRUFBRSxFQUFFLEdBQUdDLEVBQUVBLEVBQUVNLEdBQUdMLEVBQUVBLEdBQUdFLElBQUdILElBQUksRUFBRU0sS0FBSyxFQUFFLEVBQUUsSUFBSU4sRUFBRUEsRUFBRVMsR0FBR1IsRUFBRUEsR0FBR08sSUFBSVIsSUFBSSxFQUFFUyxLQUFLLEVBQUUsRUFBRSxJQUFJVCxFQUFFQSxFQUFFckMsRUFBRSxFQUFFc0MsRUFBRUEsR0FBR3ZDLEdBQUdzQyxJQUFJLEVBQUVyQyxJQUFJLEVBQUUsRUFBRSxJQUFJQSxFQUFFMEMsR0FBRUUsR0FBRzdDLEVBQUUwQyxHQUFFRixHQUFHdkMsSUFBSSxFQUFFMEMsS0FBSSxFQUFFLEVBQUUsR0FBR1AsR0FBRUYsR0FBRUcsR0FBRUYsR0FBRUQsR0FBRUYsR0FBRUcsR0FBRUYsR0FBRUQsR0FBRUYsRUFBRUcsR0FBRUYsRUFBRUEsRUFBRUYsR0FBRVMsRUFBRSxFQUFFUixFQUFFRixHQUFFVyxHQUFHUixJQUFJLEVBQUVGLEtBQUksRUFBRSxFQUFFLEdBQUcsRUFBRUQsR0FBRUYsR0FBRUcsR0FBRUYsRUFBRUQsR0FBRUYsRUFBRUcsRUFBRUYsRUFBRUQsRUFBRUYsRUFBRUcsRUFBRUYsRUFBRUEsRUFBRWUsRUFBRXJDLEVBQUUsRUFBRXFCLEVBQUVpQixFQUFFdkMsR0FBR3VCLElBQUksRUFBRWUsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUNqQyxFQUFFSCxFQUFFLENBQUMsRUFBRUcsRUFBRWtCLEVBQUUsRUFBRXJCLEVBQUUsQ0FBQyxFQUFFRSxFQUFFa0IsR0FBR2pCLElBQUksRUFBRWtCLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRWYsRUFBRU4sRUFBRSxDQUFDLEVBQUVNLEVBQUVpQixFQUFFLEVBQUV2QixFQUFFLENBQUMsRUFBRUksRUFBRWtCLEdBQUdoQixJQUFJLEVBQUVpQixJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUVmLEVBQUVSLEVBQUUsQ0FBQyxFQUFFUSxFQUFFaUIsRUFBRSxFQUFFekIsRUFBRSxDQUFDLEVBQUVPLEVBQUVpQixJQUFHaEIsSUFBSSxFQUFFaUIsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFZixFQUFFVixFQUFFLENBQUMsRUFBRVUsRUFBRWlCLEdBQUUsRUFBRTNCLEVBQUUsQ0FBQyxFQUFFUyxFQUFFaUIsSUFBR2hCLElBQUksRUFBRWlCLEtBQUksRUFBRSxFQUFFLEdBQUcsRUFBRWYsRUFBRVosRUFBRSxDQUFDLEVBQUVZLEVBQUVpQixFQUFFLEVBQUU3QixFQUFFLENBQUMsRUFBRVcsRUFBRWlCLEdBQUdoQixJQUFJLEVBQUVpQixJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUVmLEVBQUVkLEVBQUUsRUFBRSxFQUFFYyxFQUFFaUIsR0FDbmYsRUFBRS9CLEVBQUUsRUFBRSxFQUFFYSxFQUFFaUIsSUFBR2hCLElBQUksRUFBRWlCLEtBQUksRUFBRSxFQUFFLEdBQUcsRUFBRWYsR0FBRWhCLEVBQUUsRUFBRSxFQUFFZ0IsR0FBRWlCLEdBQUUsRUFBRWpDLEVBQUUsRUFBRSxFQUFFZSxFQUFFaUIsSUFBR2hCLEtBQUksRUFBRWlCLEtBQUksRUFBRSxFQUFFLEdBQUcsRUFBRWYsR0FBRWxCLEVBQUUsRUFBRSxFQUFFa0IsR0FBRWlCLEdBQUUsRUFBRW5DLEVBQUUsRUFBRSxFQUFFaUIsR0FBR2lCLElBQUdoQixLQUFJLEVBQUVpQixLQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUN6SHZDLEVBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQyxFQUFFLGVBQWUsU0FBU0MsRUFBRSxDQUFDRCxFQUFLLEtBQUssSUFBSSxFQUFFLEtBQUtDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixTQUFTQSxFQUFFLENBQUNBLEVBQUVELEVBQUssS0FBSyxJQUFJLEVBQUUsUUFBUUMsQ0FBQyxFQUFFLEdBQUdBLEdBQUdELEVBQUssS0FBSyxJQUFJLEVBQUUsT0FBT0MsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNBLEVBQUUsQ0FBQyxJQUFJQyxFQUFFRixFQUFLLEtBQUssSUFBSSxFQUFFLE1BQU0sRUFBRUcsRUFBRSxJQUFJQSxFQUFFLEVBQUVBLEVBQUVELEVBQUUsT0FBT0MsR0FBRyxFQUFFRCxFQUFFQyxDQUFDLEVBQUVGLENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBU0EsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUVDLEVBQUVMLEVBQUUsTUFBTSxDQUFDLEVBQUVNLEVBQUVSLEVBQUssU0FBU1UsRUFBRUYsRUFBRSxVQUFVTCxDQUFDLEVBQUUsRUFBRVEsRUFBRUgsRUFBRSxVQUFVRCxDQUFDLEVBQUUsRUFBa0IsR0FBaEJGLEVBQUVBLEdBQUcsR0FBR0QsRUFBRUEsR0FBRyxDQUFDLEVBQUssRUFBRU0sRUFBRSxNQUFNLElBQUlWLEVBQUssVUFBVSxRQUFRLGtDQUFrQyxFQUFFLElBQUlNLEVBQUUsRUFBRSxFQUFFQSxHQUFHSyxJQUFJLEVBQUVMLEVBQUVBLElBQUksQ0FBQyxPQUFBQSxFQUFFLEdBQUdJLElBQUlKLEVBQUUsR0FBR0ksR0FBR1AsRUFBRUssRUFBRSxNQUFNTCxFQUN0ZixHQUFHLEdBQUdHLEVBQUUsRUFBRUosRUFBRUYsRUFBSyxLQUFLLElBQUksRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsQ0FBQyxFQUFFQyxFQUFFUCxFQUFLLEtBQUssSUFBSSxFQUFFQyxFQUFFTSxFQUFFSixFQUFFRCxFQUFFRyxFQUFFQyxDQUFDLEVBQVNFLEVBQUUsT0FBT0QsRUFBRSxLQUFLQSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFFBQVEsU0FBU04sRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDQSxFQUFFQSxHQUFHLEdBQUdELEVBQUVBLEdBQUcsQ0FBQyxFQUFFLElBQUlFLEVBQUVOLEVBQUssU0FBU08sRUFBRUQsRUFBRSxVQUFVSCxDQUFDLEVBQUUsRUFBRUssRUFBRUYsRUFBRSxVQUFVSixDQUFDLEVBQUVRLEVBQUVKLEVBQUUsTUFBTUosRUFBRU0sRUFBRUgsQ0FBQyxFQUFFTSxFQUFFTCxFQUFFLFNBQVNKLEVBQUVNLEVBQUVILENBQUMsRUFBRUcsR0FBR0EsRUFBRUgsR0FBRyxFQUFFLEdBQUcsRUFBRUUsRUFBRSxNQUFNLElBQUlQLEVBQUssVUFBVSxRQUFRLGtDQUFrQyxFQUFFLElBQUlFLEVBQUUsRUFBRSxFQUFFQSxHQUFHTSxJQUFJLEVBQUVOLEVBQUVBLElBQUksQ0FBMkcsR0FBMUdBLEVBQUUsR0FBR0ssSUFBSUwsRUFBRSxHQUFHSyxHQUFHSixFQUFFRyxFQUFFLE1BQU1ILEVBQUUsR0FBRyxHQUFHRCxFQUFFLEVBQUVRLEVBQUVWLEVBQUssS0FBSyxJQUFJLEVBQUVDLEVBQUVTLEVBQUVQLEVBQUVRLEVBQUVOLEVBQUVILENBQUMsRUFBRUQsRUFBRUQsRUFBSyxLQUFLLElBQUksRUFBRUMsRUFBRVMsRUFBRSxLQUFLUCxFQUFFQyxFQUFFQyxFQUFFSCxDQUFDLEVBQUssQ0FBQ0ksRUFBRSxNQUFNSSxFQUFFLElBQUlULENBQUMsRUFBRSxNQUFNLElBQUlELEVBQUssVUFBVSxRQUFRLHdCQUF3QixFQUN4aEIsT0FBT1UsRUFBRSxJQUFJLEVBQUUsR0FBRyxTQUFTVCxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUVSLEVBQUssU0FBU1UsRUFBRUYsRUFBRSxFQUFxRixHQUFuRkosRUFBRSxDQUFDSSxFQUFFLFFBQVEsR0FBR04sRUFBRSxPQUFPLEdBQUcsR0FBR0UsRUFBRSxHQUFHLEVBQUVFLEVBQUUsQ0FBQyxDQUFDLEVBQUVGLEVBQUVJLEVBQUUsT0FBT0osRUFBRUQsQ0FBQyxFQUFFQyxFQUFFLENBQUMsR0FBR0MsRUFBRUQsRUFBRUgsRUFBRSxRQUFRRyxDQUFDLEVBQUtGLEVBQUUsT0FBTyxJQUFJQyxFQUFFSyxFQUFFLFVBQVVOLENBQUMsRUFBRSxFQUFFLE9BQU9DLEVBQUVJLEVBQUUsQ0FBQ0MsRUFBRSxRQUFRLEdBQUdMLENBQUMsQ0FBQyxFQUFFLFlBQVlBLElBQUlJLEVBQUVDLEVBQUUsT0FBTyxDQUFDQSxFQUFFLFFBQVEsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDTCxDQUFDLENBQUMsR0FBR0ksRUFBRUMsRUFBRSxPQUFPRCxFQUFFTCxDQUFDLEVBQUVBLEVBQUUsRUFBRUEsRUFBRUssRUFBRSxPQUFPTCxHQUFHLEVBQUVFLEVBQUVILEVBQUUsUUFBUVMsRUFBRU4sRUFBRUcsRUFBRSxNQUFNTCxFQUFFQSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPRSxDQUFDLEVBQUUsRUFBRSxTQUFTSCxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRVAsRUFBSyxTQUFTUSxFQUFFRCxFQUFFLEVBQU8sR0FBTEYsR0FBRyxFQUFLQSxFQUFFLEdBQUcsRUFBRUEsR0FBRyxHQUFHQSxFQUFFLE1BQU0sSUFBSUwsRUFBSyxVQUFVLFFBQVEseUJBQXlCLEVBQ25mLEdBQUcsV0FBV0ksRUFBRSxRQUFRLFdBQVdGLEVBQUUsT0FBTyxNQUFNLElBQUlGLEVBQUssVUFBVSxJQUFJLHdDQUF3QyxFQUFpRCxJQUEvQ0csRUFBRUgsRUFBSyxLQUFLLElBQUksR0FBR0MsRUFBRUcsRUFBRUQsRUFBRUUsRUFBRUUsRUFBRSxVQUFVTCxDQUFDLEVBQUUsRUFBRUksQ0FBQyxFQUFNRixFQUFFLEVBQUVBLEVBQUVGLEVBQUUsT0FBT0UsR0FBRyxFQUFFRCxFQUFFRixFQUFFLFFBQVFPLEVBQUVMLEVBQUVELEVBQUUsTUFBTUUsRUFBRUEsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBT0csRUFBRSxNQUFNSixFQUFFLEVBQUVFLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBU0osRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUVDLEVBQUVSLEVBQUssU0FBU08sRUFBRUMsRUFBRSxFQUFFLElBQUlFLEVBQUVSLEVBQUUsT0FBT1MsRUFBRUgsRUFBRSxVQUFVTixDQUFDLEVBQUVVLEVBQUVGLEVBQUUsR0FBR0csRUFBRUQsRUFBa0csR0FBaEdULEVBQUVLLEVBQUUsT0FBTyxDQUFDQSxFQUFFLFFBQVEsRUFBRUYsRUFBRSxDQUFDLENBQUMsRUFBRUgsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRUMsRUFBRUksRUFBRSxTQUFTRCxFQUFFSCxFQUFFSCxFQUFFLFFBQVFFLENBQUMsQ0FBQyxFQUFFLEVBQUVFLENBQUMsRUFBSyxDQUFDSyxFQUFFLE1BQU0sQ0FBQyxJQUFJTixFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSUcsRUFBRSxFQUFFQSxFQUFFRyxFQUFFSCxHQUFHLEVBQUVBLEVBQUVLLElBQUlaLEVBQUssS0FBSyxJQUFJLEdBQUdPLEVBQ3JnQkcsQ0FBQyxFQUFFRSxHQUFHQyxHQUFHVixFQUFFLENBQUMsSUFBSUUsRUFBRUosRUFBRSxRQUFRRSxDQUFDLEVBQUVELEVBQUVLLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUVILEVBQUVLLEVBQUUsQ0FBQyxHQUFHRixFQUFFLENBQUMsRUFBRUgsRUFBRUssRUFBRSxDQUFDLEdBQUdGLEVBQUUsQ0FBQyxFQUFFSCxFQUFFSyxFQUFFLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUlELEVBQUUsS0FBS0ksRUFBRSxNQUFNTixFQUFFUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVYLEVBQUssS0FBSyxLQUFLLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxLQUFLLEVBQUVBLEVBQUVBLEdBQUdGLEVBQUssS0FBSyxPQUFPLElBQUlHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUVDLEVBQUVDLEVBQUVILEVBQUUsVUFBVSxVQUFVLEdBQWtELElBQS9DLEtBQUssRUFBRSxDQUFDLElBQUlBLEVBQUUsSUFBSUEsQ0FBQyxFQUFFRCxFQUFFLE9BQU9JLElBQUlKLEVBQUVDLEVBQUUsS0FBS0QsQ0FBQyxHQUFPRyxFQUFFLEVBQUVBLEVBQUVDLEVBQUVELElBQUlELEVBQUUsQ0FBQyxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRSxVQUFVRCxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU9ELEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPQSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJRCxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzWUYsRUFBSyxLQUFL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RUFBRSxPQUFPRSxFQUFFRCxDQUFDLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQ2tELEdBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNyRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxHQUFHLENBQUNELEVBQUVELEVBQUUsR0FBR0EsRUFBRSxTQUFTQSxFQUFFLFNBQVMsRUFBRUUsRUFBRUYsRUFBRSxHQUFHQSxFQUFFLFNBQVNBLEVBQUUsU0FBUyxDQUFDLE1BQVMsQ0FBQ0UsRUFBRUQsRUFBRSxDQUFDLENBQUlBLEdBQUgsR0FBU0MsR0FBSCxHQUFNLEtBQUssV0FBVyxDQUFDRCxFQUFFQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUVtRCxHQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTckQsRUFBRSxDQUFDQSxFQUN2ZkEsRUFBRSxRQUFRLENBQUMsR0FBR0EsRUFBRSxlQUFlLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQ0EsRUFBRSxPQUFPQSxFQUFFLFFBQVFBLEVBQUUsT0FBT0EsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUVxRCxHQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUNBLEdBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNyRCxFQUFFLENBQXdHLEdBQXZHQSxFQUFFQSxFQUFFLDZCQUE2QixHQUFHQSxFQUFFLDZCQUE2QixHQUFHQSxFQUFFLDZCQUE2QixFQUFLLE9BQU8sWUFBWSxDQUFDLElBQUlDLEVBQUUsT0FBTyxZQUF1QixPQUFPQSxHQUFsQixVQUFxQixLQUFLLFdBQVdBLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQ0QsR0FBRyxLQUFLLFdBQVdBLEVBQUUsRUFBRSxlQUFlLEVBQUVxRCxHQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDM1osU0FBU0YsR0FBR25ELEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFQyxFQUFFSixFQUFLLE9BQU8sRUFBRUMsQ0FBQyxFQUFFSSxFQUFFLENBQUMsRUFBRSxJQUFJ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QUNyQixPQUFPLE9BQU94RSxDQUFLLEVBQUUsT0FBUWtCLEdBQzNCQSxFQUFLLGVBQWlCLENBQ3hCLEVBRVd1RCxHQUF1QlAsR0FDbEMsT0FBTyxLQUFLTSxHQUFlLENBQUMsRUFBRSxRQUFRTixDQUFTIiwKICAibmFtZXMiOiBbInJlcXVpcmVfZXZlbnRzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUiIsICJSZWZsZWN0QXBwbHkiLCAidGFyZ2V0IiwgInJlY2VpdmVyIiwgImFyZ3MiLCAiUmVmbGVjdE93bktleXMiLCAiUHJvY2Vzc0VtaXRXYXJuaW5nIiwgIndhcm5pbmciLCAiTnVtYmVySXNOYU4iLCAidmFsdWUiLCAiRXZlbnRFbWl0dGVyIiwgIm9uY2UiLCAiZGVmYXVsdE1heExpc3RlbmVycyIsICJjaGVja0xpc3RlbmVyIiwgImxpc3RlbmVyIiwgImFyZyIsICJuIiwgIl9nZXRNYXhMaXN0ZW5lcnMiLCAidGhhdCIsICJ0eXBlIiwgImkiLCAiZG9FcnJvciIsICJldmVudHMiLCAiZXIiLCAiZXJyIiwgImhhbmRsZXIiLCAibGVuIiwgImxpc3RlbmVycyIsICJhcnJheUNsb25lIiwgIl9hZGRMaXN0ZW5lciIsICJwcmVwZW5kIiwgIm0iLCAiZXhpc3RpbmciLCAidyIsICJvbmNlV3JhcHBlciIsICJfb25jZVdyYXAiLCAic3RhdGUiLCAid3JhcHBlZCIsICJsaXN0IiwgInBvc2l0aW9uIiwgIm9yaWdpbmFsTGlzdGVuZXIiLCAic3BsaWNlT25lIiwgImtleXMiLCAia2V5IiwgIl9saXN0ZW5lcnMiLCAidW53cmFwIiwgImV2bGlzdGVuZXIiLCAidW53cmFwTGlzdGVuZXJzIiwgImVtaXR0ZXIiLCAibGlzdGVuZXJDb3VudCIsICJhcnIiLCAiY29weSIsICJpbmRleCIsICJyZXQiLCAibmFtZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJlcnJvckxpc3RlbmVyIiwgInJlc29sdmVyIiwgImV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lciIsICJhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlciIsICJmbGFncyIsICJ3cmFwTGlzdGVuZXIiLCAicmVxdWlyZV9zamNsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAic2pjbCIsICJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiIsICJnIiwgImgiLCAiYWEiLCAiayIsICJuIiwgImwiLCAibSIsICJwIiwgInoiLCAiQSIsICJDIiwgIkIiLCAiRCIsICJQIiwgImVhIiwgIlEiLCAidCIsICJyIiwgInUiLCAiRyIsICJFIiwgIkgiLCAiRiIsICJWIiwgIkkiLCAidyIsICJ2IiwgIlIiLCAiSiIsICJTIiwgIksiLCAiVyIsICJMIiwgInEiLCAieCIsICJ5IiwgIlgiLCAiWSIsICJNIiwgImZhIiwgImphIiwgImthIiwgImdhIiwgImJhIiwgIk4iLCAiY2EiLCAiTyIsICJUIiwgImhhIiwgImlhIiwgImRhIiwgIlUiLCAiWiIsICJsdWZpX2V4cG9ydHMiLCAiX19leHBvcnQiLCAiYWRkRmlsZXNUb0FyY2hpdmUiLCAiY2FuY2VsIiwgImNvbXByZXNzIiwgImRlY29tcHJlc3MiLCAiZG93bmxvYWQiLCAiZXZlbnRzIiwgImdldEZpbGVJbmRleEluUXVldWUiLCAiaW5mb3MiLCAicGF1c2UiLCAicmVtb3ZlIiwgInJlc3VtZSIsICJ1cGxvYWQiLCAiaW1wb3J0X2V2ZW50cyIsICJkZWZhdWx0RXJyb3JDb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIm1lc3NhZ2UiLCAicmVzdWx0IiwgImNvbmZpZyIsICJkYXRhIiwgIm1heWJlU3RhY2siLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19hd2FpdCIsICJ2IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiZyIsICJxIiwgInZlcmIiLCAiYXdhaXRSZXR1cm4iLCAiZiIsICJuIiwgImEiLCAiYiIsICJyZXN1bWUiLCAic2V0dGxlIiwgInIiLCAiZnVsZmlsbCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgInAiLCAiX19hc3luY1ZhbHVlcyIsICJkIiwgIlJlc3VsdEFzeW5jIiwgIl9SZXN1bHRBc3luYyIsICJyZXMiLCAicHJvbWlzZSIsICJuZXdQcm9taXNlIiwgInZhbHVlIiwgIk9rIiwgImVycm9yRm4iLCAiZSIsICJFcnIiLCAiZm4iLCAiYXJncyIsICJfX2F3YWl0ZXIiLCAiZXJyb3IiLCAiYXN5bmNSZXN1bHRMaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3QiLCAiY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMiLCAiZiIsICJuZXdSZXMiLCAibmV3VmFsdWUiLCAib2siLCAiX2VyciIsICJ0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiX19hd2FpdCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgIl9fYXN5bmNWYWx1ZXMiLCAic3VjY2Vzc0NhbGxiYWNrIiwgImZhaWx1cmVDYWxsYmFjayIsICJyZXN1bHQiLCAiZXJyQXN5bmMiLCAib2tBc3luYyIsICJlcnIiLCAiZnJvbVByb21pc2UiLCAiZnJvbVNhZmVQcm9taXNlIiwgImZyb21Bc3luY1Rocm93YWJsZSIsICJjb21iaW5lUmVzdWx0TGlzdCIsICJyZXN1bHRMaXN0IiwgImFjYyIsICJsaXN0IiwgImNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyIsICJSZXN1bHQiLCAiZnJvbVRocm93YWJsZSIsICJjb21iaW5lIiwgImNvbWJpbmVXaXRoQWxsRXJyb3JzIiwgIk9rIiwgInZhbHVlIiwgImYiLCAib2siLCAiX2YiLCAiX3ZhbHVlIiwgIlJlc3VsdEFzeW5jIiwgIl92IiwgIl9lcnIiLCAiXyIsICJjb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIkVyciIsICJlcnJvciIsICJlcnIiLCAiZXJyQXN5bmMiLCAidiIsICJfb2siLCAic2VsZiIsICJmcm9tVGhyb3dhYmxlIiwgIlJlc3VsdCIsICJMdWZpRmlsZSIsICJfTHVmaUZpbGUiLCAic2VydmVyVXJsIiwgInByb3BlcnRpZXMiLCAiX19wdWJsaWNGaWVsZCIsICJkb3dubG9hZFVybCIsICJwYXNzd29yZCIsICJwYXRoaW5mb3MiLCAia2V5cyIsICJyZW1vdmVVcmwiLCAicGF0aEluZm9zIiwgInNwbGl0dGVkUGF0aCIsICJpbXBvcnRfZXZlbnRzIiwgIkJhc2VFcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiY2F1c2UiLCAiY29udGV4dCIsICJfX3B1YmxpY0ZpZWxkIiwgIkNvbm5lY3Rpb25FcnJvciIsICJCYXNlRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJTZXJ2ZXJFcnJvciIsICJCYXNlRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJlbnN1cmVFcnJvciIsICJ2YWx1ZSIsICJzdHJpbmdpZmllZCIsICJmZXRjaFNlcnZlckNvbmZpZyIsICJpbnN0YW5jZVVybCIsICJvcmlnaW5NYXRjaGVzIiwgInVybE9yaWdpbiIsICJSZXN1bHRBc3luYyIsICJlcnJvciIsICJDb25uZWN0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyQXN5bmMiLCAiU2VydmVyRXJyb3IiLCAiaXNEZW5vUnVudGltZSIsICJpc1NlY3VyZUNvbnRleHQiLCAid29ya2VyVXJsIiwgInJlbGF0aXZlUGF0aCIsICJMdWZpSm9iIiwgImx1ZmlGaWxlIiwgIndvcmtlclR5cGUiLCAiX19wdWJsaWNGaWVsZCIsICJFdmVudEVtaXR0ZXIiLCAiY2FsbGJhY2siLCAiZXZlbnQiLCAiZSIsICJtc2ciLCAidHJhbnNmZXJhYmxlIiwgIm9rQXN5bmMiLCAiZXJyQXN5bmMiLCAiZW5zdXJlRXJyb3IiLCAiUmVzdWx0QXN5bmMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZXJyb3IiLCAid29ya2VyVXJsIiwgIkNyeXB0b0FsZ29yaXRobSIsICJFbmNvZGluZyIsICJjaGFyc2V0IiwgIm5vUGFkZGluZyIsICJhYiIsICJsZW4iLCAidmlldyIsICJyZXMiLCAiaSIsICJzdHIiLCAidmlld0xlbiIsICJlbmMxIiwgImVuYzIiLCAiZW5jMyIsICJlbmM0IiwgImoiLCAib2JqIiwgIkVuY29kaW5nIiwgIm9iaiIsICJFbmNvZGluZyIsICJFbmNvZGUiLCAiYWIiLCAiaW1wb3J0X2x1Zmlfc2pjbCIsICJDcnlwdG9FcnJvciIsICJCYXNlRXJyb3IiLCAiSGFzaGluZ0Vycm9yIiwgIkNyeXB0b0Vycm9yIiwgIl9fcHVibGljRmllbGQiLCAiZ2VuZXJhdGVLZXkiLCAib2tBc3luYyIsICJzamNsIiwgImVycm9yIiwgImVyckFzeW5jIiwgIkNyeXB0b0Vycm9yIiwgImVuc3VyZUVycm9yIiwgImhhc2hQYXNzd29yZCIsICJwYXNzd29yZCIsICJIYXNoaW5nRXJyb3IiLCAiZ2VuZXJhdGVLZXkiLCAiUmVzdWx0QXN5bmMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZ2VuZXJhdGVkS2V5IiwgImtleSIsICJFbmNvZGUiLCAiZXJyb3IiLCAiQ3J5cHRvRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiaGFzaFBhc3N3b3JkIiwgInBhc3N3b3JkIiwgInByb21pc2UiLCAiYiIsICJIYXNoaW5nRXJyb3IiLCAiZ2VuZXJhdGVLZXkiLCAiYWxnbyIsICJoYXNoUGFzc3dvcmQiLCAicGFzc3dvcmQiLCAiRG93bmxvYWRFcnJvciIsICJCYXNlRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJJbmZvc0Vycm9yIiwgIkJhc2VFcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgIkpvYkVycm9yIiwgIkJhc2VFcnJvciIsICJKb2JQYXVzZUVycm9yIiwgIkpvYkVycm9yIiwgIl9fcHVibGljRmllbGQiLCAiSm9iUmVzdW1lRXJyb3IiLCAiSm9iRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJVcGxvYWRFcnJvciIsICJCYXNlRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJDSFVOS19MRU5HVEgiLCAiZmlsZXMiLCAiZXZlbnRzIiwgIkV2ZW50RW1pdHRlciIsICJjYW5jZWwiLCAidXBsb2FkSm9iIiwgImpvYiIsICJMdWZpSm9iIiwgIlJlc3VsdEFzeW5jIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImV2ZW50IiwgIkpvYkVycm9yIiwgImVycm9yIiwgImVuc3VyZUVycm9yIiwgImFkZEZpbGVzVG9BcmNoaXZlIiwgImFyY2hpdmVFbnRyaWVzIiwgImFzeW5jTG9vcCIsICJfYSIsICJmaWxlIiwgIm5hbWVXaXRoRXh0ZW5zaW9uIiwgIm5hbWVXaXRob3V0RXh0ZW5zaW9uIiwgImV4dGVuc2lvbiIsICJuYW1lIiwgImkiLCAib2tBc3luYyIsICJjb21wcmVzcyIsICJhcmNoaXZlTmFtZSIsICJsdWZpRmlsZSIsICJMdWZpRmlsZSIsICJkZWNvbXByZXNzIiwgInppcEZpbGUiLCAiaGFuZGxlUGFzc3dvcmRIYXNoaW5nIiwgImRvd25sb2FkVXJsIiwgInBhc3N3b3JkIiwgImZldGNoU2VydmVyQ29uZmlnIiwgImNvbmZpZyIsICJhbGdvIiwgImlzU2VjdXJlQ29udGV4dCIsICJoYXNoUGFzc3dvcmQiLCAiaGFzaGVkUGFzc3dvcmQiLCAiZG93bmxvYWQiLCAiY2h1bmtzIiwgImhhbmRsZVNvY2tldFJlc3VsdHMiLCAiRG93bmxvYWRFcnJvciIsICJpbmZvcyIsICJJbmZvc0Vycm9yIiwgInBhdXNlIiwgImVyckFzeW5jIiwgIkpvYlBhdXNlRXJyb3IiLCAicmVtb3ZlIiwgInJlbW92ZVVybCIsICJyZXN1bWUiLCAiSm9iUmVzdW1lRXJyb3IiLCAic2xpY2VBbmRVcGxvYWQiLCAiY2h1bmtMZW5ndGgiLCAidG90YWxDaHVua3MiLCAiY29uY3VycmVuY3kiLCAic3RhcnQiLCAiZW5kIiwgImJ1ZmZlciIsICJzdGFydFVwbG9hZCIsICJzZXJ2ZXJVcmwiLCAiZGVsYXkiLCAiZGVsQXRGaXJzdFZpZXciLCAiemlwcGVkIiwgImdlbmVyYXRlS2V5IiwgImNsaWVudEtleSIsICJ1cGxvYWQiLCAiZmlsZXNUb1VwbG9hZCIsICJ6aXBOYW1lIiwgIm9wZXJhdGlvbnMiLCAiVXBsb2FkRXJyb3IiLCAiZ2V0RmlsZXNRdWV1ZWQiLCAiZ2V0RmlsZUluZGV4SW5RdWV1ZSJdCn0K