diff --git a/themes/default/public/js/lufi-down.js b/themes/default/public/js/lufi-down.js index 226c67a..86f6530 100755 --- a/themes/default/public/js/lufi-down.js +++ b/themes/default/public/js/lufi-down.js @@ -190,13 +190,16 @@ const showZipContent = (zipFile) => { showZipContentDOM.onclick = () => {}; document.body.style.cursor = "wait"; - lufi.decompress(zipFile).andThen((files) => { - const newElement = document.createElement("div"); + lufi + .decompress(zipFile) + .andThen((job) => job.waitForCompletion()) + .andThen((job) => { + const newElement = document.createElement("div"); - let innerHTML = `

${i18n.zipContent}

"; - - newElement.innerHTML = innerHTML; - - pbd.append(newElement); - - document.querySelectorAll(".download-zip-content").forEach((element) => { - const elementListener = (e) => { - e.preventDefault(); - - const filename = element.getAttribute("download"); - const file = files.find((file) => file.name === filename); - - element.removeEventListener("click", elementListener); - element.setAttribute("href", URL.createObjectURL(file)); - element.click(); - }; - element.addEventListener("click", elementListener); - - showZipContentDOM.style.display = "none"; - document.body.style.cursor = "auto"; - }); - }); }; showZipContentDOM.onclick = showZipContentDOMListener; diff --git a/themes/default/public/js/lufi-up.js b/themes/default/public/js/lufi-up.js index 4e48ccc..bcd9027 100755 --- a/themes/default/public/js/lufi-up.js +++ b/themes/default/public/js/lufi-up.js @@ -2,6 +2,7 @@ import { lufi, + errAsync, okAsync, ResultAsync, isSecureContext, @@ -169,7 +170,7 @@ const uploadZip = (e) => { lufi .compress(archiveEntries, zipname) - .andThen((zipFile) => { + .andThen((job) => { // if '#zipping' is hidden, the zipping has been aborted if (!document.getElementById("zipping").classList.contains("hide")) { document.getElementById("zipping").classList.add("hide"); @@ -192,7 +193,7 @@ const uploadZip = (e) => { ); startUpload( - [zipFile], + [job.archiveFile], delay.value, del_at_first_view.checked, true, @@ -387,7 +388,7 @@ const startUpload = ( return okAsync(job); }) - .mapErr((error) => { + .orElse((error) => { if (clientKey) { showAlertOnFile(error.message, clientKey); } else { @@ -397,6 +398,8 @@ const startUpload = ( if (isGuest) { sendFilesURLs(); } + + return errAsync(error); }); }) ) @@ -428,14 +431,7 @@ const handleFiles = (files = []) => { document.body.style.cursor = "auto"; - startUpload( - files, - delay, - delAtFirstView, - isZipped, - undefined, - password - ); + startUpload(files, delay, delAtFirstView, isZipped, undefined, password); } else { lufi .addFilesToArchive(files, archiveEntries) @@ -530,8 +526,8 @@ const uploadBoxComplete = (lufiFile) => { lufiFile.delay === 0 ? i18n.noLimit : `${i18n.expiration} ${formatDate( - lufiFile.delay * 86400 + lufiFile.createdAt - )}`; + lufiFile.delay * 86400 + lufiFile.createdAt + )}`; if (!isGuest) { nameDOM.innerHTML += `${sizeDOM.innerHTML}
${limit}`; diff --git a/themes/default/public/js/lufi.js b/themes/default/public/js/lufi.js index f688227..540eb3c 100755 --- a/themes/default/public/js/lufi.js +++ b/themes/default/public/js/lufi.js @@ -1 +1,2 @@ -var Hr=Object.create;var $e=Object.defineProperty;var qr=Object.getOwnPropertyDescriptor;var Kr=Object.getOwnPropertyNames;var Zr=Object.getPrototypeOf,$r=Object.prototype.hasOwnProperty;var Vr=(t,e,r)=>e in t?$e(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Qr=(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 Jt=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Xr=(t,e)=>{for(var r in e)$e(t,r,{get:e[r],enumerable:!0})},Yr=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Kr(e))!$r.call(t,i)&&i!==r&&$e(t,i,{get:()=>e[i],enumerable:!(n=qr(e,i))||n.enumerable});return t};var Et=(t,e,r)=>(r=t!=null?Hr(Zr(t)):{},Yr(e||!t||!t.__esModule?$e(r,"default",{value:t,enumerable:!0}):r,t));var d=(t,e,r)=>Vr(t,typeof e!="symbol"?e+"":e,r);var xt=Jt((Yn,At)=>{"use strict";var Oe=typeof Reflect=="object"?Reflect:null,Gt=Oe&&typeof Oe.apply=="function"?Oe.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},Ve;Oe&&typeof Oe.ownKeys=="function"?Ve=Oe.ownKeys:Object.getOwnPropertySymbols?Ve=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Ve=function(e){return Object.getOwnPropertyNames(e)};function en(t){console&&console.warn&&console.warn(t)}var Ht=Number.isNaN||function(e){return e!==e};function M(){M.init.call(this)}At.exports=M;At.exports.once=on;M.EventEmitter=M;M.prototype._events=void 0;M.prototype._eventsCount=0;M.prototype._maxListeners=void 0;var Wt=10;function Qe(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(M,"defaultMaxListeners",{enumerable:!0,get:function(){return Wt},set:function(t){if(typeof t!="number"||t<0||Ht(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Wt=t}});M.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};M.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Ht(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 qt(t){return t._maxListeners===void 0?M.defaultMaxListeners:t._maxListeners}M.prototype.getMaxListeners=function(){return qt(this)};M.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 f=o[e];if(f===void 0)return!1;if(typeof f=="function")Gt(f,this,r);else for(var c=f.length,h=Qt(f,c),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,en(a)}return t}M.prototype.addListener=function(e,r){return Kt(this,e,r,!1)};M.prototype.on=M.prototype.addListener;M.prototype.prependListener=function(e,r){return Kt(this,e,r,!0)};function tn(){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 Zt(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},i=tn.bind(n);return i.listener=r,n.wrapFn=i,i}M.prototype.once=function(e,r){return Qe(r),this.on(e,Zt(this,e,r)),this};M.prototype.prependOnceListener=function(e,r){return Qe(r),this.prependListener(e,Zt(this,e,r)),this};M.prototype.removeListener=function(e,r){var n,i,o,s,a;if(Qe(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():rn(n,o),n.length===1&&(i[e]=n[0]),i.removeListener!==void 0&&this.emit("removeListener",e,a||r)}return this};M.prototype.off=M.prototype.removeListener;M.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 $t(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?nn(i):Qt(i,i.length)}M.prototype.listeners=function(e){return $t(this,e,!0)};M.prototype.rawListeners=function(e){return $t(this,e,!1)};M.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):Vt.call(t,e)};M.prototype.listenerCount=Vt;function Vt(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}M.prototype.eventNames=function(){return this._eventsCount>0?Ve(this._events):[]};function Qt(t,e){for(var r=new Array(e),n=0;n{"use strict";var u={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}}};u.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 u.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]]};u.cipher.aes.prototype={encrypt:function(t){return ur(this,t,0)},decrypt:function(t){return ur(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=[],f=[],c,h,l,p;for(i=0;256>i;i++)f[(a[i]=i<<1^283*(i>>7))^i]=i;for(o=s=0;!r[o];o^=c||1,s=f[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[o]=l,n[l]=o,h=a[i=a[c=a[o]]],p=16843009*h^65537*i^257*c^16843008*o,h=257*a[l]^16843008*l,i=0;4>i;i++)t[i][o]=h=h<<24^h>>>8,e[i][l]=p=p<<24^p>>>8;for(i=0;5>i;i++)t[i]=t[i].slice(0),e[i]=e[i].slice(0)}};function ur(t,e,r){if(e.length!==4)throw new u.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,f,c,h=n.length/4-2,l,p=4,v=[0,0,0,0];a=t.w[r],t=a[0];var A=a[1],E=a[2],y=a[3],b=a[4];for(l=0;l>>24]^A[o>>16&255]^E[s>>8&255]^y[e&255]^n[p],f=t[o>>>24]^A[s>>16&255]^E[e>>8&255]^y[i&255]^n[p+1],c=t[s>>>24]^A[e>>16&255]^E[i>>8&255]^y[o&255]^n[p+2],e=t[e>>>24]^A[i>>16&255]^E[o>>8&255]^y[s&255]^n[p+3],p+=4,i=a,o=f,s=c;for(l=0;4>l;l++)v[r?3&-l:l]=b[i>>>24]<<24^b[o>>16&255]<<16^b[s>>8&255]<<8^b[e&255]^n[p++],a=i,i=o,o=s,s=e,e=a;return v}u.bitArray={bitSlice:function(t,e,r){return t=u.bitArray.Y(t.slice(e/32),32-(e&31)).slice(1),r===void 0?t:u.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(u.bitArray.bitLength(t)!==u.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=u.bitArray.getPartial(i),n.push(u.bitArray.partial(e+t&31,32>>24|r>>>8&65280|(r&65280)<<8|r<<24;return t}};u.codec.utf8String={fromBits:function(t){var e="",r=u.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=u.codec.base64.S,s=0,a;for(e&&(o=o.substr(0,62)+"-_"),n=0;na)throw new u.exception.invalid("this isn't base64!");26>>i),s=a<<32-i):(i+=6,s^=a<<32-i)}return i&56&&r.push(u.bitArray.partial(i&56,s,1)),r}};u.codec.base64url={fromBits:function(t){return u.codec.base64.fromBits(t,1,1)},toBits:function(t){return u.codec.base64.toBits(t,1)}};u.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()};u.hash.sha256.hash=function(t){return new u.hash.sha256().update(t).finalize()};u.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=u.codec.utf8String.toBits(t));var e,r=this.f=u.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+u.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],f=i[2],c=i[3],h=i[4],l=i[5],p=i[6],v=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+v+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(p^h&(l^p))+o[e],v=p,p=l,l=h,h=c+r|0,c=f,f=a,a=s,s=r+(a&f^c&(a^f))+(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]+f|0,i[3]=i[3]+c|0,i[4]=i[4]+h|0,i[5]=i[5]+l|0,i[6]=i[6]+p|0,i[7]=i[7]+v|0}};u.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()};u.hash.sha512.hash=function(t){return new u.hash.sha512().update(t).finalize()};u.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=u.codec.utf8String.toBits(t));var e,r=this.f=u.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+u.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],f=n[3],c=n[4],h=n[5],l=n[6],p=n[7],v=n[8],A=n[9],E=n[10],y=n[11],b=n[12],I=n[13],O=n[14],w=n[15],x;if(typeof Uint32Array<"u"){x=Array(160);for(var L=0;32>L;L++)x[L]=t[L]}else x=t;var L=o,D=s,g=a,m=f,k=c,C=h,F=l,V=p,P=v,S=A,_=E,R=y,K=b,G=I,me=O,Z=w;for(t=0;80>t;t++){if(16>t)e=x[2*t],r=x[2*t+1];else{r=x[2*(t-15)];var z=x[2*(t-15)+1];e=(z<<31|r>>>1)^(z<<24|r>>>8)^r>>>7;var Q=(r<<31|z>>>1)^(r<<24|z>>>8)^(r<<25|z>>>7);r=x[2*(t-2)];var N=x[2*(t-2)+1],z=(N<<13|r>>>19)^(r<<3|N>>>29)^r>>>6,N=(r<<13|N>>>19)^(N<<3|r>>>29)^(r<<26|N>>>6),re=x[2*(t-7)],te=x[2*(t-16)],ne=x[2*(t-16)+1];r=Q+x[2*(t-7)+1],e=e+re+(r>>>0>>0?1:0),r+=N,e+=z+(r>>>0>>0?1:0),r+=ne,e+=te+(r>>>0>>0?1:0)}x[2*t]=e|=0,x[2*t+1]=r|=0;var re=P&_^~P&K,Y=S&R^~S&G,N=L&g^L&k^g&k,j=D&m^D&C^m&C,te=(D<<4|L>>>28)^(L<<30|D>>>2)^(L<<25|D>>>7),ne=(L<<4|D>>>28)^(D<<30|L>>>2)^(D<<25|L>>>7),ge=i[2*t],Le=i[2*t+1],z=Z+((P<<18|S>>>14)^(P<<14|S>>>18)^(S<<23|P>>>9)),Q=me+((S<<18|P>>>14)^(S<<14|P>>>18)^(P<<23|S>>>9))+(z>>>0>>0?1:0),z=z+Y,Q=Q+(re+(z>>>0>>0?1:0)),z=z+Le,Q=Q+(ge+(z>>>0>>0?1:0)),z=z+r|0,Q=Q+(e+(z>>>0>>0?1:0));r=ne+j,e=te+N+(r>>>0>>0?1:0),me=K,Z=G,K=_,G=R,_=P,R=S,S=V+z|0,P=F+Q+(S>>>0>>0?1:0)|0,F=k,V=C,k=g,C=m,g=L,m=D,D=z+r|0,L=Q+e+(D>>>0>>0?1:0)|0}s=n[1]=s+D|0,n[0]=o+L+(s>>>0>>0?1:0)|0,f=n[3]=f+m|0,n[2]=a+g+(f>>>0>>0?1:0)|0,h=n[5]=h+C|0,n[4]=c+k+(h>>>0>>0?1:0)|0,p=n[7]=p+V|0,n[6]=l+F+(p>>>0>>0?1:0)|0,A=n[9]=A+S|0,n[8]=v+P+(A>>>0>>0?1:0)|0,y=n[11]=y+R|0,n[10]=E+_+(y>>>0>>0?1:0)|0,I=n[13]=I+G|0,n[12]=b+K+(I>>>0>>0?1:0)|0,w=n[15]=w+Z|0,n[14]=O+me+(w>>>0>>0?1:0)|0}};u.mode.ccm={name:"ccm",F:[],listenProgress:function(t){u.mode.ccm.F.push(t)},unListenProgress:function(t){t=u.mode.ccm.F.indexOf(t),-1f)throw new u.exception.invalid("ccm: iv must be at least 7 bytes");for(o=2;4>o&&c>>>8*o;o++);return o<15-f&&(o=15-f),r=a.clamp(r,8*(15-o)),e=u.mode.ccm.U(t,e,r,n,i,o),s=u.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=u.bitArray,s=o.bitLength(r)/8,c=o.bitLength(e),a=o.clamp(e,c-i),f=o.bitSlice(e,c-i),c=(c-i)/8;if(7>s)throw new u.exception.invalid("ccm: iv must be at least 7 bytes");for(e=2;4>e&&c>>>8*e;e++);if(e<15-s&&(e=15-s),r=o.clamp(r,8*(15-e)),a=u.mode.ccm.V(t,a,r,f,i,e),t=u.mode.ccm.U(t,a.data,r,n,i,e),!o.equal(a.tag,t))throw new u.exception.corrupt("ccm: tag doesn't match");return a.data},ma:function(t,e,r,n,i,o){var s=[],a=u.bitArray,f=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&&(u.mode.ccm.da(s/f),h+=l),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,c)}}};u.misc.hmac=function(t,e){this.W=e=e||u.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 u.exception.invalid("invalid params to pbkdf2");typeof t=="string"&&(t=u.codec.utf8String.toBits(t)),typeof e=="string"&&(e=u.codec.utf8String.toBits(e)),i=i||u.misc.hmac,t=new i(t);var o,s,a,f,c=[],h=u.bitArray;for(f=1;32*c.length<(n||1);f++){for(i=o=t.encrypt(h.concat(e,[f])),s=1;ss;s++)i.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=o),this.N++,this.b=u.hash.sha256.hash(this.b.concat(i)),this.K=new u.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:f=1}if(f)throw new u.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&&fr("seeded",Math.max(this.u,this.i)),fr("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:je(this,this.la),mouseCollector:je(this,this.na),keyboardCollector:je(this,this.ja),accelerometerCollector:je(this,this.ca),touchCollector:je(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 u.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 je(t,e){return function(){e.apply(t,arguments)}}u.random=new u.prng(6);e:try{if(tt=typeof Re<"u"&&Re.exports){try{rt=Qr("crypto")}catch{rt=null}tt=et=rt}if(tt&&et.randomBytes)Je=et.randomBytes(128),Je=new Uint32Array(new Uint8Array(Je).buffer),u.random.addEntropy(Je,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(Ge=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(Ge);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(Ge);else break e;u.random.addEntropy(Ge,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 Je,et,Ge,tt,rt;u.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=u.json,o=i.j({iv:u.random.randomWords(4,0)},i.defaults),s;if(i.j(o,r),r=o.adata,typeof o.salt=="string"&&(o.salt=u.codec.base64.toBits(o.salt)),typeof o.iv=="string"&&(o.iv=u.codec.base64.toBits(o.iv)),!u.mode[o.mode]||!u.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||4jr,cancel:()=>jn,compress:()=>Jr,decompress:()=>Jn,download:()=>Gn,events:()=>gt,getFileIndexInQueue:()=>Qn,infos:()=>Wn,pause:()=>Hn,remove:()=>qn,resume:()=>Kn,upload:()=>$n});var Nr=Et(xt());var an={withStackTrace:!1},tr=(t,e,r=an)=>{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 Ce(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{c(n.next(h))}catch(l){s(l)}}function f(h){try{c(n.throw(h))}catch(l){s(l)}}function c(h){h.done?o(h.value):i(h.value).then(a,f)}c((n=n.apply(t,e||[])).next())})}function Yt(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 he(t){return this instanceof he?(this.v=t,this):new he(t)}function er(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(v){return function(A){return Promise.resolve(A).then(v,l)}}function a(v,A){n[v]&&(i[v]=function(E){return new Promise(function(y,b){o.push([v,E,y,b])>1||f(v,E)})},A&&(i[v]=A(i[v])))}function f(v,A){try{c(n[v](A))}catch(E){p(o[0][3],E)}}function c(v){v.value instanceof he?Promise.resolve(v.value.v).then(h,l):p(o[0][2],v)}function h(v){f("next",v)}function l(v){f("throw",v)}function p(v,A){v(A),o.shift(),o.length&&f(o[0][0],o[0][1])}}function un(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:he(t[i](s)),done:!1}:o?o(s):s}:o}}function fn(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 Yt=="function"?Yt(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,f){s=t[o](s),i(a,f,s.done,s.value)})}}function i(o,s,a,f){Promise.resolve(f).then(function(c){o({value:c,done:a})},s)}}var U=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new ie(n));return new t(r)}static fromPromise(e,r){let n=e.then(i=>new ie(i)).catch(i=>new oe(r(i)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(Ce(this,void 0,void 0,function*(){try{return new ie(yield e(...n))}catch(i){return new oe(r?r(i):i)}}))}static combine(e){return cn(e)}static combineWithAllErrors(e){return hn(e)}map(e){return new t(this._promise.then(r=>Ce(this,void 0,void 0,function*(){return r.isErr()?new oe(r.error):new ie(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>Ce(this,void 0,void 0,function*(){if(r.isErr())return new oe(r.error);let n=yield e(r.value);return n.isErr()?new oe(n.error):new ie(r.value)})))}andTee(e){return new t(this._promise.then(r=>Ce(this,void 0,void 0,function*(){if(r.isErr())return new oe(r.error);try{yield e(r.value)}catch{}return new ie(r.value)})))}mapErr(e){return new t(this._promise.then(r=>Ce(this,void 0,void 0,function*(){return r.isOk()?new ie(r.value):new oe(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new oe(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>Ce(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new ie(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 er(this,arguments,function*(){return yield he(yield he(yield*un(fn(yield he(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return er(this,arguments,function*(){let r=yield he(this._promise);return r.isErr()&&(yield yield he(W(r.error))),yield he(r.value)})}},H=t=>new U(Promise.resolve(new ie(t))),W=t=>new U(Promise.resolve(new oe(t))),ei=U.fromPromise,ti=U.fromSafePromise,ri=U.fromThrowable,rr=t=>{let e=we([]);for(let r of t)if(r.isErr()){e=le(r.error);break}else e.map(n=>n.push(r.value));return e},cn=t=>U.fromSafePromise(Promise.all(t)).andThen(rr),nr=t=>{let e=we([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=le([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},hn=t=>U.fromSafePromise(Promise.all(t)).andThen(nr),Lt;(function(t){function e(i,o){return(...s)=>{try{let a=i(...s);return we(a)}catch(a){return le(o?o(a):a)}}}t.fromThrowable=e;function r(i){return rr(i)}t.combine=r;function n(i){return nr(i)}t.combineWithAllErrors=n})(Lt||(Lt={}));var we=t=>new ie(t);function le(t){return new oe(t)}var ie=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return we(e(this.value))}mapErr(e){return we(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 we(this.value)}orElse(e){return we(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return U.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 tr("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},oe=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return le(this.error)}mapErr(e){return le(e(this.error))}andThrough(e){return le(this.error)}andTee(e){return le(this.error)}andThen(e){return le(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return W(this.error)}asyncAndThrough(e){return W(this.error)}asyncMap(e){return W(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield le(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw tr("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},ni=Lt.fromThrowable;var Ee=class t{constructor(e,r){d(this,"actionToken","");d(this,"chunksReady",0);d(this,"createdAt",0);d(this,"delay",0);d(this,"delAtFirstView",!1);d(this,"keys",{client:"",server:""});d(this,"name","");d(this,"password","");d(this,"queueIndex",0);d(this,"serverUrl");d(this,"size",0);d(this,"uploadStatus",3);d(this,"totalChunks",0);d(this,"type","");d(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 ar=Et(xt());var $=class extends Error{constructor(r,n={}){let{cause:i,context:o}=n;super(r,{cause:i});d(this,"context");this.name=this.constructor.name,this.context=o}};var Xe=class extends ${constructor(){super(...arguments);d(this,"message","Unable to connect. Is the computer able to access the url?")}};var Ye=class extends ${constructor(){super(...arguments);d(this,"message","The server returned an error")}};var J=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)},or=t=>{let e=t.href.match(/(.*?)\/?(?:\/[dr]{1}\/|login\/?|files\/?)/),r=e&&e[1]?e[1]:t.origin;return U.fromPromise(fetch(r+"/about/config"),n=>new Xe(void 0,{cause:J(n)})).andThen(n=>n.ok?U.fromPromise(n.json(),i=>J(i)):W(new Ye(void 0,{context:n.statusText})))},sr=()=>typeof Deno<"u",Dt=()=>sr()||globalThis.isSecureContext||globalThis.location.protocol==="https:",Se=t=>sr()?new URL(`./worker/${t}.ts`,new URL(".",import.meta.url).href):new URL(import.meta.resolve(`./${t!=="encrypt"?`worker/${t}`:t}.js`));var Ae=class{constructor(e,r){d(this,"events",new ar.default);d(this,"lufiFile");d(this,"status",2);d(this,"downloadedFile");d(this,"worker");d(this,"isTerminated",!1);d(this,"complete",()=>{this.status=0,this.events.emit("JOB_TERMINATED")});d(this,"hasFailed",()=>this.status===1);d(this,"onError",e=>(this.worker.onerror=r=>{e(r)},this));d(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));d(this,"onMessageError",e=>(this.worker.onmessageerror=r=>{e(r)},this));d(this,"onProgress",e=>(this.events.on("CHUNK_UPLOADED",()=>{e()}),this.events.on("CHUNK_DOWNLOADED",()=>{e()}),this));d(this,"requestMessage",(e,r=[])=>(this.worker.postMessage(e,r),this));d(this,"terminate",()=>(this.worker.terminate(),this));d(this,"waitForCompletion",()=>this.isTerminated?this.status===0?H(this):W(J("Job has failed")):U.fromPromise(new Promise((e,r)=>{this.events.once("OPERATION_FAILED",n=>{r(n)}),this.events.once("JOB_TERMINATED",()=>{this.status===0&&e(this)})}),e=>J(e)));d(this,"waitForStart",()=>U.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=>J(e)));d(this,"dispatchEvent",(e,r)=>{this.events.emit(e,r)});switch(r){case 0:this.worker=new Worker(Se("cancel"),{type:"module"});break;case 1:this.worker=new Worker(Se("download"),{type:"module"});break;case 2:this.worker=new Worker(Se("infos"),{type:"module"});break;case 3:this.worker=new Worker(Se("remove"),{type:"module"});break;case 4:this.worker=new Worker(Se("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 ke=(r=>(r[r.Sjcl=0]="Sjcl",r[r.WebCrypto=1]="WebCrypto",r))(ke||{});var Pe=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,f=0,c=0;for(;f>4,n[f++]=(o&15)<<4|s>>2,n[f++]=(s&3)<<6|a;return n.buffer}};var Fi=new Pe("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");var mn=new Pe("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function bt(t){return mn.Encode(t)}var We=Et(hr());var ue=class extends ${};var Te=class extends ue{constructor(){super(...arguments);d(this,"message","Unable to hash the provided string")}};var lr=()=>{try{return H(We.default.codec.base64.fromBits(We.default.random.randomWords(8,10)))}catch(t){return W(new ue("Unable to generate key",{cause:J(t)}))}},pr=t=>{try{return H(We.default.codec.hex.fromBits(We.default.hash.sha512.hash(t)))}catch(e){return W(new Te(void 0,{cause:J(e)}))}};var vr=()=>U.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(bt(n))).catch(n=>{e(new ue("Unable to base64 encode the url",{cause:J(n)}))})).catch(r=>e(r))),t=>new ue("Unable to generate key",{cause:J(t)})),mr=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 U.fromPromise(e(),r=>new Te(void 0,{cause:J(r)}))};var dr=(t=1)=>t===0?lr():vr(),Ct=(t,e)=>e===0?pr(t):mr(t);var yr={},Dn=function(t,e,r,n,i){var o=new Worker(yr[e]||(yr[e]=URL.createObjectURL(new Blob([t+';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'],{type:"text/javascript"}))));return o.onmessage=function(s){var a=s.data,f=a.$e$;if(f){var c=new Error(f[0]);c.code=f[1],c.stack=f[2],i(c,null)}else i(null,a)},o.postMessage(r,n),o},B=Uint8Array,ee=Uint16Array,Ke=Int32Array,Fe=new B([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),ze=new B([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),He=new B([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),xr=function(t,e){for(var r=new ee(31),n=0;n<31;++n)r[n]=e+=1<>1|(T&21845)<<1,de=(de&52428)>>2|(de&13107)<<2,de=(de&61680)>>4|(de&3855)<<4,qe[T]=((de&65280)>>8|(de&255)<<8)>>1;var de,T,ae=function(t,e,r){for(var n=t.length,i=0,o=new ee(e);i>f]=c}else for(a=new ee(n),i=0;i>15-t[i]);return a},ye=new B(288);for(T=0;T<144;++T)ye[T]=8;var T;for(T=144;T<256;++T)ye[T]=9;var T;for(T=256;T<280;++T)ye[T]=7;var T;for(T=280;T<288;++T)ye[T]=8;var T,Me=new B(32);for(T=0;T<32;++T)Me[T]=5;var T,Or=ae(ye,9,0),Cr=ae(ye,9,1),Sr=ae(Me,5,0),kr=ae(Me,5,1),it=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},se=function(t,e,r){var n=e/8|0;return(t[n]|t[n+1]<<8)>>(e&7)&r},ot=function(t,e){var r=e/8|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(e&7)},Ze=function(t){return(t+7)/8|0},De=function(t,e,r){return(e==null||e<0)&&(e=0),(r==null||r>t.length)&&(r=t.length),new B(t.subarray(e,r))};var Pr=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],q=function(t,e,r){var n=new Error(e||Pr[t]);if(n.code=t,Error.captureStackTrace&&Error.captureStackTrace(n,q),!r)throw n;return n},Rr=function(t,e,r,n){var i=t.length,o=n?n.length:0;if(!i||e.f&&!e.l)return r||new B(0);var s=!r,a=s||e.i!=2,f=e.i;s&&(r=new B(i*3));var c=function(Q){var _e=r.length;if(Q>_e){var be=new B(Math.max(_e*2,Q));be.set(r),r=be}},h=e.f||0,l=e.p||0,p=e.b||0,v=e.l,A=e.d,E=e.m,y=e.n,b=i*8;do{if(!v){h=se(t,l,1);var I=se(t,l+1,3);if(l+=3,I)if(I==1)v=Cr,A=kr,E=9,y=5;else if(I==2){var L=se(t,l,31)+257,D=se(t,l+10,15)+4,g=L+se(t,l+5,31)+1;l+=14;for(var m=new B(g),k=new B(19),C=0;C>4;if(O<16)m[C++]=O;else{var _=0,R=0;for(O==16?(R=3+se(t,l,3),l+=2,_=m[C-1]):O==17?(R=3+se(t,l,7),l+=3):O==18&&(R=11+se(t,l,127),l+=7);R--;)m[C++]=_}}var K=m.subarray(0,L),G=m.subarray(L);E=it(K),y=it(G),v=ae(K,E,1),A=ae(G,y,1)}else q(1);else{var O=Ze(l)+4,w=t[O-4]|t[O-3]<<8,x=O+w;if(x>i){f&&q(0);break}a&&c(p+w),r.set(t.subarray(O,x),p),e.b=p+=w,e.p=l=x*8,e.f=h;continue}if(l>b){f&&q(0);break}}a&&c(p+131072);for(var me=(1<>4;if(l+=_&15,l>b){f&&q(0);break}if(_||q(2),Y<256)r[p++]=Y;else if(Y==256){re=l,v=null;break}else{var N=Y-254;if(Y>264){var C=Y-257,j=Fe[C];N=se(t,l,(1<>4;te||q(3),l+=te&15;var G=br[ne];if(ne>3){var j=ze[ne];G+=ot(t,l)&(1<b){f&&q(0);break}a&&c(p+131072);var ge=p+N;if(p>8},Ue=function(t,e,r){r<<=e&7;var n=e/8|0;t[n]|=r,t[n+1]|=r>>8,t[n+2]|=r>>16},st=function(t,e){for(var r=[],n=0;np&&(p=o[n].s);var v=new ee(p+1),A=ut(r[h-1],v,0);if(A>e){var n=0,E=0,y=A-e,b=1<e)E+=b-(1<>=y;E>0;){var O=o[n].s;v[O]=0&&E;--n){var w=o[n].s;v[w]==e&&(--v[w],++E)}A=e}return{t:new B(v),l:A}},ut=function(t,e,r){return t.s==-1?Math.max(ut(t.l,e,r+1),ut(t.r,e,r+1)):e[t.s]=r},Pt=function(t){for(var e=t.length;e&&!t[--e];);for(var r=new ee(++e),n=0,i=t[0],o=1,s=function(f){r[n++]=f},a=1;a<=e;++a)if(t[a]==i&&a!=e)++o;else{if(!i&&o>2){for(;o>138;o-=138)s(32754);o>2&&(s(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(s(i),--o;o>6;o-=6)s(8304);o>2&&(s(o-3<<5|8208),o=0)}for(;o--;)s(i);o=1,i=t[a]}return{c:r.subarray(0,n),n:e}},Ie=function(t,e){for(var r=0,n=0;n>8,t[i+2]=t[i]^255,t[i+3]=t[i+1]^255;for(var o=0;o4&&!k[He[F-1]];--F);var V=c+5<<3,P=Ie(i,ye)+Ie(o,Me)+s,S=Ie(i,p)+Ie(o,E)+s+14+3*F+Ie(D,k)+2*D[16]+3*D[17]+7*D[18];if(f>=0&&V<=P&&V<=S)return Mt(e,h,t.subarray(f,f+c));var _,R,K,G;if(pe(e,h,1+(S15&&(pe(e,h,Y[g]>>5&127),h+=Y[g]>>12)}}else _=Or,R=ye,K=Sr,G=Me;for(var g=0;g255){var N=j>>18&31;Ue(e,h,_[N+257]),h+=R[N+257],N>7&&(pe(e,h,j>>23&31),h+=Fe[N]);var te=j&31;Ue(e,h,K[te]),h+=G[te],te>3&&(Ue(e,h,j>>5&8191),h+=ze[te])}else Ue(e,h,_[j]),h+=R[j]}return Ue(e,h,_[256]),h+R[256]},Tr=new Ke([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Ft=new B(0),Ur=function(t,e,r,n,i,o){var s=o.z||t.length,a=new B(n+s+5*(1+Math.ceil(s/7e3))+i),f=a.subarray(n,a.length-i),c=o.l,h=(o.r||0)&7;if(e){h&&(f[0]=o.r>>3);for(var l=Tr[e-1],p=l>>13,v=l&8191,A=(1<7e3||k>24576)&&(_>423||!c)){h=Rt(t,f,0,w,x,L,g,k,F,m-F,h),k=D=g=0,F=m;for(var R=0;R<286;++R)x[R]=0;for(var R=0;R<30;++R)L[R]=0}var K=2,G=0,me=v,Z=P-S&32767;if(_>2&&V==O(m-Z))for(var re=Math.min(p,_)-1,Y=Math.min(32767,m),N=Math.min(258,_);Z<=Y&&--me&&P!=S;){if(t[m+K]==t[m+K-Z]){for(var j=0;jK){if(K=j,G=Z,j>re)break;for(var te=Math.min(Z,j-2),ne=0,R=0;Rne&&(ne=z,S=ge)}}}P=S,S=E[P],Z+=P-S&32767}if(G){w[k++]=268435456|at[K]<<18|kt[G];var Q=at[K]&31,_e=kt[G]&31;g+=Fe[Q]+ze[_e],++x[257+Q],++L[_e],C=m+K,++D}else w[k++]=t[m],++x[t[m]]}}for(m=Math.max(m,C);m=s&&(f[h/8|0]=c,be=s),h=Mt(f,h+1,t.subarray(m,be))}o.i=s}return De(a,0,n+Ze(h)+i)},bn=function(){for(var t=new Int32Array(256),e=0;e<256;++e){for(var r=e,n=9;--n;)r=(r&1&&-306674912)^r>>>1;t[e]=r}return t}(),On=function(){var t=-1;return{p:function(e){for(var r=t,n=0;n>>8;t=r},d:function(){return~t}}};var Ir=function(t,e,r,n,i){if(!i&&(i={l:1},e.dictionary)){var o=e.dictionary.subarray(-32768),s=new B(o.length+t.length);s.set(o),s.set(t,o.length),t=s,i.w=o.length}return Ur(t,e.level==null?6:e.level,e.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(t.length)))*1.5):20:12+e.mem,r,n,i)},zt=function(t,e){var r={};for(var n in t)r[n]=t[n];for(var n in e)r[n]=e[n];return r},gr=function(t,e,r){for(var n=t(),i=t.toString(),o=i.slice(i.indexOf("[")+1,i.lastIndexOf("]")).replace(/\s+/g,"").split(","),s=0;s>>0},St=function(t,e){return fe(t,e)+fe(t,e+4)*4294967296},X=function(t,e,r){for(;r;++e)t[e]=r,r>>>=8};function Rn(t,e,r){return r||(r=e,e={}),typeof r!="function"&&q(7),Fr(t,e,[Pn],function(n){return ct(Bt(n.data[0],n.data[1]))},0,r)}function Bt(t,e){return Ir(t,e||{},0,0)}function Tn(t,e,r){return r||(r=e,e={}),typeof r!="function"&&q(7),Fr(t,e,[kn],function(n){return ct(_t(n.data[0],Mr(n.data[1])))},1,r)}function _t(t,e){return Rr(t,{i:2},e&&e.out,e&&e.dictionary)}var zr=function(t,e,r,n){for(var i in t){var o=t[i],s=e+i,a=n;Array.isArray(o)&&(a=zt(n,o[1]),o=o[0]),o instanceof B?r[s]=[o,a]:(r[s+="/"]=[new B(0),a],zr(o,s,r,n))}},wr=typeof TextEncoder<"u"&&new TextEncoder,Tt=typeof TextDecoder<"u"&&new TextDecoder,Un=0;try{Tt.decode(Ft,{stream:!0}),Un=1}catch{}var In=function(t){for(var e="",r=0;;){var n=t[r++],i=(n>127)+(n>223)+(n>239);if(r+i>t.length)return{s:e,r:De(t,r-1)};i?i==3?(n=((n&15)<<18|(t[r++]&63)<<12|(t[r++]&63)<<6|t[r++]&63)-65536,e+=String.fromCharCode(55296|n>>10,56320|n&1023)):i&1?e+=String.fromCharCode((n&31)<<6|t[r++]&63):e+=String.fromCharCode((n&15)<<12|(t[r++]&63)<<6|t[r++]&63):e+=String.fromCharCode(n)}};function Er(t,e){if(e){for(var r=new B(t.length),n=0;n>1)),s=0,a=function(h){o[s++]=h},n=0;no.length){var f=new B(s+8+(i-n<<1));f.set(o),o=f}var c=t.charCodeAt(n);c<128||e?a(c):c<2048?(a(192|c>>6),a(128|c&63)):c>55295&&c<57344?(c=65536+(c&1047552)|t.charCodeAt(++n)&1023,a(240|c>>18),a(128|c>>12&63),a(128|c>>6&63),a(128|c&63)):(a(224|c>>12),a(128|c>>6&63),a(128|c&63))}return De(o,0,s)}function Mn(t,e){if(e){for(var r="",n=0;n65535&&q(9),e+=n+4}return e},Ar=function(t,e,r,n,i,o,s,a){var f=n.length,c=r.extra,h=a&&a.length,l=Ut(c);X(t,e,s!=null?33639248:67324752),e+=4,s!=null&&(t[e++]=20,t[e++]=r.os),t[e]=20,e+=2,t[e++]=r.flag<<1|(o<0&&8),t[e++]=i&&8,t[e++]=r.compression&255,t[e++]=r.compression>>8;var p=new Date(r.mtime==null?Date.now():r.mtime),v=p.getFullYear()-1980;if((v<0||v>119)&&q(10),X(t,e,v<<25|p.getMonth()+1<<21|p.getDate()<<16|p.getHours()<<11|p.getMinutes()<<5|p.getSeconds()>>1),e+=4,o!=-1&&(X(t,e,r.crc),X(t,e+4,o<0?-o-2:o),X(t,e+8,r.size)),X(t,e+12,f),X(t,e+14,l),e+=16,s!=null&&(X(t,e,h),X(t,e+6,r.attrs),X(t,e+10,s),e+=14),t.set(n,e),e+=f,l)for(var A in c){var E=c[A],y=E.length;X(t,e,+A),X(t,e+2,y),t.set(E,e+4),e+=4+y}return h&&(t.set(a,e),e+=h),e},_n=function(t,e,r,n,i){X(t,e,101010256),X(t,e+8,r),X(t,e+10,r),X(t,e+12,n),X(t,e+16,i)};function Br(t,e,r){r||(r=e,e={}),typeof r!="function"&&q(7);var n={};zr(t,"",n,e);var i=Object.keys(n),o=i.length,s=0,a=0,f=o,c=new Array(o),h=[],l=function(){for(var y=0;y65535&&P(q(11,0,1),null),!V)P(null,O);else if(L<16e4)try{P(null,Bt(O,w))}catch(S){P(S,null)}else h.push(Rn(O,w,P))},E=0;E65558)return s(q(13,0,1),null),i;var f=ve(t,a+8);if(f){var c=f,h=fe(t,a+16),l=h==4294967295||c==65535;if(l){var p=fe(t,a-12);l=fe(t,p)==101075792,l&&(c=f=fe(t,p+32),h=fe(t,p+48))}for(var v=e&&e.filter,A=function(y){var b=zn(t,h,l),I=b[0],O=b[1],w=b[2],x=b[3],L=b[4],D=b[5],g=Fn(t,D);h=L;var m=function(C,F){C?(i(),s(C,null)):(F&&(o[x]=F),--f||s(null,o))};if(!v||v({name:x,size:O,originalSize:w,compression:I}))if(!I)m(null,De(t,g,g+O));else if(I==8){var k=t.subarray(g,g+O);if(w<524288||O>.8*w)try{m(null,_t(k,{out:new B(w)}))}catch(C){m(C,null)}else n.push(Tn(k,{size:w},m))}else m(q(14,"unknown compression type "+I,1),null);else m(null,null)},E=0;E{t.terminate();let e=new Ae(t.lufiFile,0);return U.fromPromise(new Promise((r,n)=>{e.onMessage(i=>{i.data.event==="UPLOAD_CANCELLED"&&(xe[e.lufiFile.keys.client].uploadStatus=0,r(e)),i.data.event==="OPERATION_FAILED"&&n(new ce("An error occured while trying to cancel an upload",{cause:i.data.error}))}).requestMessage({args:{lufiFile:e.lufiFile}})}),r=>J(r))},jr=(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(),f=s.split(".").pop(),c=s;if(e[c]!==void 0){let h=1;do c=`${a}_(${h}).${f}`,h++;while(e[c]!==void 0)}gt.emit("ARCHIVE_ADDED_FILE",{name:c,size:o.size}),e[c]=await o.bytes()}};return U.fromPromise(r(t),n=>J(n)).andThen(()=>H(e))},Jr=(t,e)=>{let r=()=>new Promise((n,i)=>{Br(t,(o,s)=>{o&&i(o),n(s)})});return U.fromPromise(r(),n=>n).andThen(n=>{try{return H(new File([new Blob([n])],e,{type:"application/zip"}))}catch(i){return W(i)}}).orElse(n=>W(new ht(void 0,{cause:J(n)})))},Jn=t=>{let e=async()=>{let r=await t.bytes();return new Promise((n,i)=>{_r(r,(o,s)=>{o&&i(o),n(s)})})};return U.fromPromise(e(),r=>r).andThen(r=>{try{let n=[];for(let i in r)n.push(new File([new Blob([r[i]])],i));return H(n)}catch(n){return W(n)}}).orElse(r=>W(new lt(void 0,{cause:J(r)})))},Gr=(t,e)=>e?or(t).andThen(r=>{if(r.version.tag>"0.07.0"){let n=Dt()?1:0;return Ct(e,n).andThen(i=>H(Ee.fromDownloadUrl(t,i)))}else return H(Ee.fromDownloadUrl(t,e))}):H(Ee.fromDownloadUrl(t)),Gn=(t,e)=>Gr(t,e).andThen(r=>{let n=new Ae(r,1);return U.fromPromise(new Promise((i,o)=>{let s=[];return n.onMessage(a=>{Wr(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 pt(void 0,{cause:J(i)}))}),Wn=(t,e)=>Gr(t,e).andThen(r=>H(new Ae(r,2))).andThen(r=>U.fromPromise(new Promise((n,i)=>{r.onMessage(o=>{o.data.event==="INFOS_RETRIEVED"&&(r.complete(),n(r)),o.data.event==="OPERATION_FAILED"&&i(new ce("An error occured while trying to retrieve informations of the file",{cause:o.data.error}))}).requestMessage({args:{lufiFile:r.lufiFile}})}),n=>new vt(void 0,{cause:J(n)}))),Hn=t=>{try{return t.status=3,H(t.requestMessage({action:0,args:{lufiFile:t.lufiFile}}))}catch(e){return W(new mt(void 0,{cause:J(e)}))}},qn=(t,e)=>{let r=Ee.fromRemoveUrl(t,e),n=new Ae(r,3);return U.fromPromise(new Promise((i,o)=>{n.onMessage(s=>{s.data.event==="FILE_REMOVED"&&(n.complete(),i(n)),s.data.event==="OPERATION_FAILED"&&o(new ce("An error occured while trying to remove a file",{cause:s.data.error()}))}).requestMessage({args:{lufiFile:r}})}),i=>J(i))},Kn=t=>{try{return t.status=2,H(t.requestMessage({action:2,args:{lufiFile:t.lufiFile}}))}catch(e){return W(new dt(void 0,{cause:J(e)}))}},Zn=(t,e,r,n=Nn)=>{gt.emit("SLICE_STARTED",xe[t.lufiFile.keys.client]);let i=Math.ceil(e.size/n)||1,o=navigator.hardwareConcurrency||1;return xe[t.lufiFile.keys.client].totalChunks=i,(async()=>{for(let a=0;a{t.events.once("UPLOAD_STARTED",()=>{p(void 0)})}):a%o===0&&await new Promise(p=>{t.events.once("CHUNK_UPLOADED",()=>{p(void 0)})})}})(),H(void 0)},Nt=(t,e,r,n,i,o,s)=>dr(s).andThen(a=>o?Ct(o,s).andThen(f=>H({password:f,clientKey:a})):H({password:o,clientKey:a})).andThen(({password:a,clientKey:f})=>{xe[f]=new Ee(t.toString(),{delay:r,delAtFirstView:n,zipped:i,password:a,name:e.name.split("/").pop(),size:e.size,type:e.type,keys:{client:f,server:""}});let c=new Ae(xe[f],4);return xe[f].uploadStatus=4,Zn(c,e,s).andThen(()=>U.fromPromise(new Promise((h,l)=>{c.onMessage(p=>{switch(Wr(h,l,c,p),p.data.event){case"UPLOAD_COMPLETE":c.complete(),c.lufiFile.uploadStatus=1;break}})}),h=>J(h)))}),$n=(t,e,r=0,n=!1,i=!1,o="documents.zip",s="",a=1)=>{let f=[];return i?e.length===1&&e[0].type==="application/zip"?f.push(Nt(t,e[0],r,n,i,s,a)):f.push(jr(e).andThen(c=>Jr(c,o).andThen(h=>(gt.emit("ARCHIVE_CREATED",h),Nt(t,h,r,n,i,s,a))))):e.forEach(c=>{f.push(Nt(t,c,r,n,i,s,a))}),U.combine(f).orElse(c=>W(new yt(void 0,{cause:c})))},Wr=(t,e,r,n)=>{n.data.event==="SOCKET_OPENED"&&t(r),n.data.event==="OPERATION_FAILED"&&e(new ce("The job returned an error",{cause:n.data.error}))},Vn=()=>Object.values(xe).filter(t=>t.uploadStatus===4),Qn=t=>Object.keys(Vn()).indexOf(t);export{ke as CryptoAlgorithm,U as ResultAsync,le as err,W as errAsync,Dt as isSecureContext,jt as lufi,we as ok,H as okAsync}; +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+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFVwbG9hZEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgb3ZlcnJpZGUgbWVzc2FnZTogc3RyaW5nID0gXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHVwbG9hZGluZyB0aGUgZGF0YVwiO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogInU5QkFBQSxJQUFBQSxHQUFBQyxHQUFBLENBQUFDLEdBQUFDLEtBQUEsY0F1QkEsSUFBSUMsRUFBSSxPQUFPLFNBQVksU0FBVyxRQUFVLEtBQzVDQyxHQUFlRCxHQUFLLE9BQU9BLEVBQUUsT0FBVSxXQUN2Q0EsRUFBRSxNQUNGLFNBQXNCRSxFQUFRQyxFQUFVQyxFQUFNLENBQzlDLE9BQU8sU0FBUyxVQUFVLE1BQU0sS0FBS0YsRUFBUUMsRUFBVUMsQ0FBSSxDQUM3RCxFQUVFQyxHQUNBTCxHQUFLLE9BQU9BLEVBQUUsU0FBWSxXQUM1QkssR0FBaUJMLEVBQUUsUUFDVixPQUFPLHNCQUNoQkssR0FBaUIsU0FBd0JILEVBQVEsQ0FDL0MsT0FBTyxPQUFPLG9CQUFvQkEsQ0FBTSxFQUNyQyxPQUFPLE9BQU8sc0JBQXNCQSxDQUFNLENBQUMsQ0FDaEQsRUFF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RUFBRSxZQUFZLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsUUFBUSxTQUFTQyxFQUFFLENBQUMsS0FBSyxTQUFTLFVBQVUsQ0FBQyxNQUFNLFlBQVksS0FBSyxPQUFPLEVBQUUsS0FBSyxRQUFRQSxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFLENBQUMsS0FBSyxTQUFTLFVBQVUsQ0FBQyxNQUFNLFlBQVksS0FBSyxPQUFPLEVBQUUsS0FBSyxRQUFRQSxDQUFDLEVBQUUsSUFBSSxTQUFTQSxFQUFFLENBQUMsS0FBSyxTQUFTLFVBQVUsQ0FBQyxNQUFNLFFBQVEsS0FBSyxPQUFPLEVBQUUsS0FBSyxRQUFRQSxDQUFDLEVBQUUsU0FBUyxTQUFTQSxFQUFFLENBQUMsS0FBSyxTQUFTLFVBQVUsQ0FBQyxNQUFNLGNBQWMsS0FBSyxPQUFPLEVBQUUsS0FBSyxRQUFRQSxDQUFDLENBQUMsQ0FBQyxFQUMzY0QsRUFBSyxPQUFPLElBQUksU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxJQUFJQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUVMLEVBQUVELEVBQUUsT0FBTyxJQUFJTyxFQUFFLEVBQUUsR0FBT04sSUFBSixHQUFXQSxJQUFKLEdBQVdBLElBQUosRUFBTSxNQUFNLElBQUlGLEVBQUssVUFBVSxRQUFRLHNCQUFzQixFQUE2QixJQUEzQixLQUFLLEVBQUUsQ0FBQ0ksRUFBRUgsRUFBRSxNQUFNLENBQUMsRUFBRUksRUFBRSxDQUFDLENBQUMsRUFBTUosRUFBRUMsRUFBRUQsRUFBRSxFQUFFQyxFQUFFLEdBQUdELElBQUtFLEVBQUVDLEVBQUVILEVBQUUsQ0FBQyxHQUFTQSxFQUFFQyxJQUFOLEdBQWFBLElBQUosR0FBV0QsRUFBRUMsSUFBTixLQUFRQyxFQUFFRyxFQUFFSCxJQUFJLEVBQUUsR0FBRyxHQUFHRyxFQUFFSCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUdHLEVBQUVILEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRUcsRUFBRUgsRUFBRSxHQUFHLEVBQU1GLEVBQUVDLElBQU4sSUFBVUMsRUFBRUEsR0FBRyxFQUFFQSxJQUFJLEdBQUdLLEdBQUcsR0FBR0EsRUFBRUEsR0FBRyxFQUFFLEtBQUtBLEdBQUcsS0FBSUosRUFBRUgsQ0FBQyxFQUFFRyxFQUFFSCxFQUFFQyxDQUFDLEVBQUVDLEVBQUUsSUFBSUQsRUFBRSxFQUFFRCxFQUFFQyxJQUFJRCxJQUFJRSxFQUFFQyxFQUFFRixFQUFFLEVBQUVELEVBQUVBLEVBQUUsQ0FBQyxFQUFFSSxFQUFFSCxDQUFDLEVBQUUsR0FBR0QsR0FBRyxFQUFFQyxFQUFFQyxFQUFFSSxFQUFFLENBQUMsRUFBRUQsRUFBRUgsSUFBSSxFQUFFLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEVBQzNmLEdBQUcsQ0FBQyxDQUFDLEVBQ0xILEVBQUssT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLFNBQVNDLEVBQUUsQ0FBQyxPQUFPUSxHQUFHLEtBQUtSLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFLENBQUMsT0FBT1EsR0FBRyxLQUFLUixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUlBLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUYsRUFBRSxDQUFDLEVBQUVHLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxJQUFJVCxFQUFFLEVBQUUsSUFBTUEsRUFBRUEsSUFBSUssR0FBR0YsRUFBRUgsQ0FBQyxFQUFFQSxHQUFHLEVBQUUsS0FBS0EsR0FBRyxJQUFJQSxDQUFDLEVBQUVBLEVBQUUsSUFBSUMsRUFBRUMsRUFBRSxFQUFFLENBQUNKLEVBQUVHLENBQUMsRUFBRUEsR0FBR0ssR0FBRyxFQUFFSixFQUFFRyxFQUFFSCxDQUFDLEdBQUcsRUFBRSxJQUFJTSxFQUFFTixFQUFFQSxHQUFHLEVBQUVBLEdBQUcsRUFBRUEsR0FBRyxFQUFFQSxHQUFHLEVBQUVNLEVBQUVBLEdBQUcsRUFBRUEsRUFBRSxJQUFJLEdBQUdWLEVBQUVHLENBQUMsRUFBRU8sRUFBRVQsRUFBRVMsQ0FBQyxFQUFFUCxFQUFFTSxFQUFFSixFQUFFSCxFQUFFRyxFQUFFRyxFQUFFSCxFQUFFRixDQUFDLENBQUMsQ0FBQyxFQUFFUSxFQUFFLFNBQVVGLEVBQUUsTUFBUVAsRUFBRSxJQUFNTSxFQUFFLFNBQVVMLEVBQUVNLEVBQUUsSUFBTUosRUFBRUssQ0FBQyxFQUFFLFNBQVVBLEVBQUVSLEVBQUUsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVDLENBQUMsRUFBRU0sRUFBRUEsR0FBRyxHQUFHQSxJQUFJLEVBQUVWLEVBQUVHLENBQUMsRUFBRVEsQ0FBQyxFQUFFQyxFQUFFQSxHQUFHLEdBQUdBLElBQUksRUFBRSxJQUFJVCxFQUNsZ0IsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVKLEVBQUVJLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNoRCxTQUFTSSxHQUFHUixFQUFFQyxFQUFFQyxFQUFFLENBQUMsR0FBT0QsRUFBRSxTQUFOLEVBQWEsTUFBTSxJQUFJRixFQUFLLFVBQVUsUUFBUSx3QkFBd0IsRUFBRSxJQUFJSSxFQUFFSCxFQUFFLEVBQUVFLENBQUMsRUFBRUUsRUFBRUgsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRSxFQUFFSixFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUcsRUFBRUwsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRixFQUFFQSxFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRSxJQUFJSSxFQUFFRSxFQUFFQyxFQUFFQyxFQUFFUixFQUFFLE9BQU8sRUFBRSxFQUFFUyxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUVQLEVBQUVQLEVBQUUsRUFBRUUsQ0FBQyxFQUFFRixFQUFFTyxFQUFFLENBQUMsRUFBRSxJQUFJUSxFQUFFUixFQUFFLENBQUMsRUFBRVMsRUFBRVQsRUFBRSxDQUFDLEVBQUVVLEVBQUVWLEVBQUUsQ0FBQyxFQUFFVyxFQUFFWCxFQUFFLENBQUMsRUFBRSxJQUFJSyxFQUFFLEVBQUVBLEVBQUVELEVBQUVDLElBQUlMLEVBQUVQLEVBQUVJLElBQUksRUFBRSxFQUFFVyxFQUFFVixHQUFHLEdBQUcsR0FBRyxFQUFFVyxFQUFFVixHQUFHLEVBQUUsR0FBRyxFQUFFVyxFQUFFaEIsRUFBRSxHQUFHLEVBQUVFLEVBQUVVLENBQUMsRUFBRUosRUFBRVQsRUFBRUssSUFBSSxFQUFFLEVBQUVVLEVBQUVULEdBQUcsR0FBRyxHQUFHLEVBQUVVLEVBQUVmLEdBQUcsRUFBRSxHQUFHLEVBQUVnQixFQUFFYixFQUFFLEdBQUcsRUFBRUQsRUFBRVUsRUFBRSxDQUFDLEVBQUVILEVBQUVWLEVBQUVNLElBQUksRUFBRSxFQUFFUyxFQUFFZCxHQUFHLEdBQUcsR0FBRyxFQUFFZSxFQUFFWixHQUFHLEVBQUUsR0FB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YSxHQUFHLEVBQUUsRUFBRSxNQUFNLFNBQVNBLEVBQUVDLEVBQUUsQ0FBQyxHQUFHRixFQUFLLFNBQVMsVUFBVUMsQ0FBQyxJQUFJRCxFQUFLLFNBQVMsVUFBVUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJQyxFQUFFLEVBQUVDLEVBQUUsSUFBSUEsRUFBRSxFQUFFQSxFQUFFSCxFQUFFLE9BQU9HLElBQUlELEdBQUdGLEVBQUVHLENBQUMsRUFBRUYsRUFBRUUsQ0FBQyxFQUFFLE9BQzNlRCxJQURrZixDQUNqZixFQUFFLEVBQUUsU0FBU0YsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQU0sSUFBSkEsRUFBRSxFQUFlRCxJQUFULFNBQWFBLEVBQUUsQ0FBQyxHQUFHLElBQUlGLEVBQUVBLEdBQUcsR0FBR0UsRUFBRSxLQUFLRCxDQUFDLEVBQUVBLEVBQUUsRUFBRSxHQUFPRCxJQUFKLEVBQU0sT0FBT0UsRUFBRSxPQUFPSCxDQUFDLEVBQUUsSUFBSUksRUFBRSxFQUFFQSxFQUFFSixFQUFFLE9BQU9JLElBQUlELEVBQUUsS0FBS0QsRUFBRUYsRUFBRUksQ0FBQyxJQUFJSCxDQUFDLEVBQUVDLEVBQUVGLEVBQUVJLENBQUMsR0FBRyxHQUFHSCxFQUFFLE9BQUFHLEVBQUVKLEVBQUUsT0FBT0EsRUFBRUEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFQSxFQUFFRCxFQUFLLFNBQVMsV0FBV0ssQ0FBQyxFQUFFRCxFQUFFLEtBQUtKLEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFLEdBQUcsR0FBR0MsRUFBRUQsRUFBRUUsRUFBRUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQVNBLENBQUMsRUFBRSxFQUFFLFNBQVNILEVBQUVDLEVBQUUsQ0FBQyxNQUFNLENBQUNELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUQsRUFBRSxDQUFDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRCxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENB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SUFBSUQsRUFBSyxLQUFLLFNBQVEsT0FBT0MsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUN4Z0JELEVBQUssS0FBSyxPQUFPLFVBQVUsQ0FBQyxVQUFVLElBQUksTUFBTSxVQUFVLENBQUMsWUFBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFTLElBQUksRUFBRSxPQUFPLFNBQVNDLEVBQUUsQ0FBWSxPQUFPQSxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFHLElBQUlDLEVBQUVDLEVBQUUsS0FBSyxFQUFFSCxFQUFLLFNBQVMsT0FBTyxLQUFLLEVBQUVDLENBQUMsRUFBaUQsR0FBL0NDLEVBQUUsS0FBSyxFQUFFRCxFQUFFLEtBQUssRUFBRUMsRUFBRUYsRUFBSyxTQUFTLFVBQVVDLENBQUMsRUFBSyxpQkFBaUJBLEVBQUUsTUFBTSxJQUFJRCxFQUFLLFVBQVUsUUFBUSxxQ0FBcUMsRUFBRSxHQUFpQixPQUFPLFlBQXJCLElBQWlDLENBQUMsSUFBSUksRUFBRSxJQUFJLFlBQVlELENBQUMsRUFBRUUsRUFBRSxFQUFFLElBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVFLEVBQUUsU0FBUyxHQUFHQyxFQUN0ZixJQUFJQSxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxHQUFHLEVBQUVGLEVBQUUsT0FBTyxFQUFFLEdBQUdFLENBQUMsQ0FBQyxLQUFNLEtBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUlGLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFLEtBQUssRUFBRUQsRUFBRUYsRUFBSyxTQUFTLE9BQU9FLEVBQUUsQ0FBQ0YsRUFBSyxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUlDLEVBQUVDLEVBQUUsT0FBTyxFQUFFRCxFQUFFLEdBQUdBLElBQUlDLEVBQUUsS0FBSyxDQUFDLEVBQXlDLElBQXZDQSxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssRUFBRSxVQUFXLENBQUMsRUFBTUEsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQUVBLEVBQUUsUUFBUSxLQUFLLEVBQUVBLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQUssTUFBTSxFQUFTQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBU0YsRUFBRUEsRUFBRSxDQUFDLE1BQU8sYUFBYUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUN6ZixHQUFHLEtBQUssQ0FBQ0EsSUFBSSxFQUFFSCxJQUFJLEtBQUssRUFBRUEsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUVELENBQUMsRUFBRUQsRUFBRSxLQUFLLElBQUlFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUgsRUFBRSxDQUFDLEVBQUVLLEVBQUVMLEVBQUUsQ0FBQyxFQUFFTSxFQUFFTixFQUFFLENBQUMsRUFBRU8sRUFBRVAsRUFBRSxDQUFDLEVBQUVRLEVBQUVSLEVBQUUsQ0FBQyxFQUFFUyxFQUFFVCxFQUFFLENBQUMsRUFBRVUsRUFBRVYsRUFBRSxDQUFDLEVBQUUsSUFBSUgsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUksR0FBR0EsRUFBRUMsRUFBRUYsRUFBRUMsQ0FBQyxHQUFHQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsRUFBRSxFQUFFRSxFQUFFSCxFQUFFQyxFQUFFLEdBQUcsRUFBRSxFQUFFQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsR0FBR0MsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksRUFBRUEsR0FBRyxHQUFHQSxHQUFHLEtBQUtDLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJSCxFQUFFQyxFQUFFLEVBQUUsRUFBRUQsRUFBRUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHQyxFQUFFQSxFQUFFWSxHQUFHSCxJQUFJLEVBQUVBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJRSxFQUFFRixHQUFHQyxFQUFFQyxJQUFJUixFQUFFSixDQUFDLEVBQUVhLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVSLEVBQUUsRUFBRVEsRUFBRUQsRUFBRUEsRUFBRUYsRUFBRUEsRUFBRUQsRUFBRUEsRUFBRUosR0FBR0ssRUFBRUUsRUFBRUMsR0FBR0gsRUFBRUUsS0FBS0YsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksR0FBR0EsR0FBRyxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVFLEVBQ3BmLEVBQUVGLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRUcsRUFBRSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVLLEVBQUUsRUFBRUwsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFTSxFQUFFLEVBQUVOLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRU8sRUFBRSxFQUFFUCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVRLEVBQUUsRUFBRVIsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFUyxFQUFFLEVBQUVULEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRVUsRUFBRSxDQUFDLENBQUMsRUFBRWYsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRUQsRUFBSyxLQUFLLE9BQU8sS0FBSyxTQUFTQyxFQUFFLENBQUMsT0FBTyxJQUFJRCxFQUFLLEtBQUssU0FBUSxPQUFPQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQy9TRCxFQUFLLEtBQUssT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sVUFBVSxDQUFDLFlBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBUyxJQUFJLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQVksT0FBT0EsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFLEtBQUssRUFBRUgsRUFBSyxTQUFTLE9BQU8sS0FBSyxFQUFFQyxDQUFDLEVBQWlELEdBQS9DQyxFQUFFLEtBQUssRUFBRUQsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUssU0FBUyxVQUFVQyxDQUFDLEVBQUssaUJBQWlCQSxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEscUNBQXFDLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDLElBQUlJLEVBQUUsSUFBSSxZQUFZRCxDQUFDLEVBQUVFLEVBQUUsRUFBRSxJQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFRSxFQUFFLFNBQVMsR0FDdGZDLEVBQUUsSUFBSUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsR0FBRyxFQUFFRixFQUFFLE9BQU8sRUFBRSxHQUFHRSxDQUFDLENBQUMsS0FBTSxLQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJRixFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVELEVBQUVGLEVBQUssU0FBUyxPQUFPRSxFQUFFLENBQUNGLEVBQUssU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFQyxFQUFFLE9BQU8sRUFBRUQsRUFBRSxHQUFHQSxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUE2RCxJQUEzREEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUUsVUFBVyxDQUFDLEVBQU1BLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLFFBQVEsS0FBSyxFQUFFQSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFLLE1BQU0sRUFBU0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFDbGYsUUFBUSxPQUFPLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsU0FBUyxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFDcGYsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxPQUFPLFNBQVMsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTQyxFQUFFRCxFQUFFLENBQUMsTUFBTyxnQkFBZUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUUUsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUFFLEdBQUcsS0FBSyxDQUFDQSxJQUFJLEVBQUVILElBQUksS0FBSyxFQUFFLEVBQUVBLENBQUMsRUFBRUYsRUFBRSxLQUFLLElBQUlHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUVELEVBQUUsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBR0QsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFQSxDQUFDLEVBQUVGLEVBQUUsS0FBSyxJQUFJRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUVELEVBQUUsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFB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RUFBRUQsRUFBRUQsRUFBSyxLQUFLLElBQUksRUFBRUMsRUFBRVMsRUFBRSxLQUFLUCxFQUFFQyxFQUFFQyxFQUFFSCxDQUFDLEVBQUssQ0FBQ0ksRUFBRSxNQUFNSSxFQUFFLElBQUlULENBQUMsRUFBRSxNQUFNLElBQUlELEVBQUssVUFBVSxRQUFRLHdCQUF3QixFQUN4aEIsT0FBT1UsRUFBRSxJQUFJLEVBQUUsR0FBRyxTQUFTVCxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUVSLEVBQUssU0FBU1UsRUFBRUYsRUFBRSxFQUFxRixHQUFuRkosRUFBRSxDQUFDSSxFQUFFLFFBQVEsR0FBR04sRUFBRSxPQUFPLEdBQUcsR0FBR0UsRUFBRSxHQUFHLEVBQUVFLEVBQUUsQ0FBQyxDQUFDLEVBQUVGLEVBQUVJLEVBQUUsT0FBT0osRUFBRUQsQ0FBQyxFQUFFQyxFQUFFLENBQUMsR0FBR0MsRUFBRUQsRUFBRUgsRUFBRSxRQUFRRyxDQUFDLEVBQUtGLEVBQUUsT0FBTyxJQUFJQyxFQUFFSyxFQUFFLFVBQVVOLENBQUMsRUFBRSxFQUFFLE9BQU9DLEVBQUVJLEVBQUUsQ0FBQ0MsRUFBRSxRQUFRLEdBQUdMLENBQUMsQ0FBQyxFQUFFLFlBQVlBLElBQUlJLEVBQUVDLEVBQUUsT0FBTyxDQUFDQSxFQUFFLFFBQVEsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDTCxDQUFDLENBQUMsR0FBR0ksRUFBRUMsRUFBRSxPQUFPRCxFQUFFTCxDQUFDLEVBQUVBLEVBQUUsRUFBRUEsRUFBRUssRUFBRSxPQUFPTCxHQUFHLEVBQUVFLEVBQUVILEVBQUUsUUFBUVMsRUFBRU4sRUFBRUcsRUFBRSxNQUFNTCxFQUFFQSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPRSxDQUFDLEVBQUUsRUFBRSxTQUFTSCxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRVAsRUFBSyxTQUFTUSxFQUFFRCxFQUFFLEVBQU8sR0FBTEYsR0FBRyxFQUFLQSxFQUFFLEdBQUcsRUFBRUEsR0FBRyxHQUFHQSxFQUFFLE1BQU0sSUFBSUwsRUFBSyxVQUFVLFFBQVEseUJBQXlCLEVBQ25mLEdBQUcsV0FBV0ksRUFBRSxRQUFRLFdBQVdGLEVBQUUsT0FBTyxNQUFNLElBQUlGLEVBQUssVUFBVSxJQUFJLHdDQUF3QyxFQUFpRCxJQUEvQ0csRUFBRUgsRUFBSyxLQUFLLElBQUksR0FBR0MsRUFBRUcsRUFBRUQsRUFBRUUsRUFBRUUsRUFBRSxVQUFVTCxDQUFDLEVBQUUsRUFBRUksQ0FBQyxFQUFNRixFQUFFLEVBQUVBLEVBQUVGLEVBQUUsT0FBT0UsR0FBRyxFQUFFRCxFQUFFRixFQUFFLFFBQVFPLEVBQUVMLEVBQUVELEVBQUUsTUFBTUUsRUFBRUEsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBT0csRUFBRSxNQUFNSixFQUFFLEVBQUVFLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBU0osRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUVDLEVBQUVSLEVBQUssU0FBU08sRUFBRUMsRUFBRSxFQUFFLElBQUlFLEVBQUVSLEVBQUUsT0FBT1MsRUFBRUgsRUFBRSxVQUFVTixDQUFDLEVBQUVVLEVBQUVGLEVBQUUsR0FBR0csRUFBRUQsRUFBa0csR0FBaEdULEVBQUVLLEVBQUUsT0FBTyxDQUFDQSxFQUFFLFFBQVEsRUFBRUYsRUFBRSxDQUFDLENBQUMsRUFBRUgsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRUMsRUFBRUksRUFBRSxTQUFTRCxFQUFFSCxFQUFFSCxFQUFFLFFBQVFFLENBQUMsQ0FBQyxFQUFFLEVBQUVFLENBQUMsRUFBSyxDQUFDSyxFQUFFLE1BQU0sQ0FBQyxJQUFJTixFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSUcsRUFBRSxFQUFFQSxFQUFFRyxFQUFFSCxHQUFHLEVBQUVBLEVBQUVLLElBQUlaLEVBQUssS0FBSyxJQUFJLEdBQUdPLEVBQ3JnQkcsQ0FBQyxFQUFFRSxHQUFHQyxHQUFHVixFQUFFLENBQUMsSUFBSUUsRUFBRUosRUFBRSxRQUFRRSxDQUFDLEVBQUVELEVBQUVLLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUVILEVBQUVLLEVBQUUsQ0FBQyxHQUFHRixFQUFFLENBQUMsRUFBRUgsRUFBRUssRUFBRSxDQUFDLEdBQUdGLEVBQUUsQ0FBQyxFQUFFSCxFQUFFSyxFQUFFLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUlELEVBQUUsS0FBS0ksRUFBRSxNQUFNTixFQUFFUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVYLEVBQUssS0FBSyxLQUFLLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxLQUFLLEVBQUVBLEVBQUVBLEdBQUdGLEVBQUssS0FBSyxPQUFPLElBQUlHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUVDLEVBQUVDLEVBQUVILEVBQUUsVUFBVSxVQUFVLEdBQWtELElBQS9DLEtBQUssRUFBRSxDQUFDLElBQUlBLEVBQUUsSUFBSUEsQ0FBQyxFQUFFRCxFQUFFLE9BQU9JLElBQUlKLEVBQUVDLEVBQUUsS0FBS0QsQ0FBQyxHQUFPRyxFQUFFLEVBQUVBLEVBQUVDLEVBQUVELElBQUlELEVBQUUsQ0FBQyxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRSxVQUFVRCxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU9ELEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPQSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJRCxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzWUYsRUFBSyxLQUFL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RUFBRSxPQUFPRSxFQUFFRCxDQUFDLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQ2tELEdBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNyRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxHQUFHLENBQUNELEVBQUVELEVBQUUsR0FBR0EsRUFBRSxTQUFTQSxFQUFFLFNBQVMsRUFBRUUsRUFBRUYsRUFBRSxHQUFHQSxFQUFFLFNBQVNBLEVBQUUsU0FBUyxDQUFDLE1BQVMsQ0FBQ0UsRUFBRUQsRUFBRSxDQUFDLENBQUlBLEdBQUgsR0FBU0MsR0FBSCxHQUFNLEtBQUssV0FBVyxDQUFDRCxFQUFFQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUVtRCxHQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTckQsRUFBRSxDQUFDQSxFQUN2ZkEsRUFBRSxRQUFRLENBQUMsR0FBR0EsRUFBRSxlQUFlLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQ0EsRUFBRSxPQUFPQSxFQUFFLFFBQVFBLEVBQUUsT0FBT0EsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUVxRCxHQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUNBLEdBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNyRCxFQUFFLENBQXdHLEdBQXZHQSxFQUFFQSxFQUFFLDZCQUE2QixHQUFHQSxFQUFFLDZCQUE2QixHQUFHQSxFQUFFLDZCQUE2QixFQUFLLE9BQU8sWUFBWSxDQUFDLElBQUlDLEVBQUUsT0FBTyxZQUF1QixPQUFPQSxHQUFsQixVQUFxQixLQUFLLFdBQVdBLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQ0QsR0FBRyxLQUFLLFdBQVdBLEVBQUUsRUFBRSxlQUFlLEVBQUVxRCxHQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDM1osU0FBU0YsR0FBR25ELEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFQyxFQUFFSixFQUFLLE9BQU8sRUFBRUMsQ0FBQyxFQUFFSSxFQUFFLENBQUMsRUFBRSxJQUFJ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QUNyQixPQUFPLE9BQU94RSxDQUFLLEVBQUUsT0FBUWtCLEdBQzNCQSxFQUFLLGVBQWlCLENBQ3hCLEVBRVd1RCxHQUF1QlAsR0FDbEMsT0FBTyxLQUFLTSxHQUFlLENBQUMsRUFBRSxRQUFRTixDQUFTIiwKICAibmFtZXMiOiBbInJlcXVpcmVfZXZlbnRzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUiIsICJSZWZsZWN0QXBwbHkiLCAidGFyZ2V0IiwgInJlY2VpdmVyIiwgImFyZ3MiLCAiUmVmbGVjdE93bktleXMiLCAiUHJvY2Vzc0VtaXRXYXJuaW5nIiwgIndhcm5pbmciLCAiTnVtYmVySXNOYU4iLCAidmFsdWUiLCAiRXZlbnRFbWl0dGVyIiwgIm9uY2UiLCAiZGVmYXVsdE1heExpc3RlbmVycyIsICJjaGVja0xpc3RlbmVyIiwgImxpc3RlbmVyIiwgImFyZyIsICJuIiwgIl9nZXRNYXhMaXN0ZW5lcnMiLCAidGhhdCIsICJ0eXBlIiwgImkiLCAiZG9FcnJvciIsICJldmVudHMiLCAiZXIiLCAiZXJyIiwgImhhbmRsZXIiLCAibGVuIiwgImxpc3RlbmVycyIsICJhcnJheUNsb25lIiwgIl9hZGRMaXN0ZW5lciIsICJwcmVwZW5kIiwgIm0iLCAiZXhpc3RpbmciLCAidyIsICJvbmNlV3JhcHBlciIsICJfb25jZVdyYXAiLCAic3RhdGUiLCAid3JhcHBlZCIsICJsaXN0IiwgInBvc2l0aW9uIiwgIm9yaWdpbmFsTGlzdGVuZXIiLCAic3BsaWNlT25lIiwgImtleXMiLCAia2V5IiwgIl9saXN0ZW5lcnMiLCAidW53cmFwIiwgImV2bGlzdGVuZXIiLCAidW53cmFwTGlzdGVuZXJzIiwgImVtaXR0ZXIiLCAibGlzdGVuZXJDb3VudCIsICJhcnIiLCAiY29weSIsICJpbmRleCIsICJyZXQiLCAibmFtZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJlcnJvckxpc3RlbmVyIiwgInJlc29sdmVyIiwgImV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lciIsICJhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlciIsICJmbGFncyIsICJ3cmFwTGlzdGVuZXIiLCAicmVxdWlyZV9zamNsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAic2pjbCIsICJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiIsICJnIiwgImgiLCAiYWEiLCAiayIsICJuIiwgImwiLCAibSIsICJwIiwgInoiLCAiQSIsICJDIiwgIkIiLCAiRCIsICJQIiwgImVhIiwgIlEiLCAidCIsICJyIiwgInUiLCAiRyIsICJFIiwgIkgiLCAiRiIsICJWIiwgIkkiLCAidyIsICJ2IiwgIlIiLCAiSiIsICJTIiwgIksiLCAiVyIsICJMIiwgInEiLCAieCIsICJ5IiwgIlgiLCAiWSIsICJNIiwgImZhIiwgImphIiwgImthIiwgImdhIiwgImJhIiwgIk4iLCAiY2EiLCAiTyIsICJUIiwgImhhIiwgImlhIiwgImRhIiwgIlUiLCAiWiIsICJsdWZpX2V4cG9ydHMiLCAiX19leHBvcnQiLCAiYWRkRmlsZXNUb0FyY2hpdmUiLCAiY2FuY2VsIiwgImNvbXByZXNzIiwgImRlY29tcHJlc3MiLCAiZG93bmxvYWQiLCAiZXZlbnRzIiwgImdldEZpbGVJbmRleEluUXVldWUiLCAiaW5mb3MiLCAicGF1c2UiLCAicmVtb3ZlIiwgInJlc3VtZSIsICJ1cGxvYWQiLCAiaW1wb3J0X2V2ZW50cyIsICJkZWZhdWx0RXJyb3JDb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIm1lc3NhZ2UiLCAicmVzdWx0IiwgImNvbmZpZyIsICJkYXRhIiwgIm1heWJlU3RhY2siLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19hd2FpdCIsICJ2IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiZyIsICJxIiwgInZlcmIiLCAiYXdhaXRSZXR1cm4iLCAiZiIsICJuIiwgImEiLCAiYiIsICJyZXN1bWUiLCAic2V0dGxlIiwgInIiLCAiZnVsZmlsbCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgInAiLCAiX19hc3luY1ZhbHVlcyIsICJkIiwgIlJlc3VsdEFzeW5jIiwgIl9SZXN1bHRBc3luYyIsICJyZXMiLCAicHJvbWlzZSIsICJuZXdQcm9taXNlIiwgInZhbHVlIiwgIk9rIiwgImVycm9yRm4iLCAiZSIsICJFcnIiLCAiZm4iLCAiYXJncyIsICJfX2F3YWl0ZXIiLCAiZXJyb3IiLCAiYXN5bmNSZXN1bHRMaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3QiLCAiY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMiLCAiZiIsICJuZXdSZXMiLCAibmV3VmFsdWUiLCAib2siLCAiX2VyciIsICJ0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiX19hd2FpdCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgIl9fYXN5bmNWYWx1ZXMiLCAic3VjY2Vzc0NhbGxiYWNrIiwgImZhaWx1cmVDYWxsYmFjayIsICJyZXN1bHQiLCAiZXJyQXN5bmMiLCAib2tBc3luYyIsICJlcnIiLCAiZnJvbVByb21pc2UiLCAiZnJvbVNhZmVQcm9taXNlIiwgImZyb21Bc3luY1Rocm93YWJsZSIsICJjb21iaW5lUmVzdWx0TGlzdCIsICJyZXN1bHRMaXN0IiwgImFjYyIsICJsaXN0IiwgImNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyIsICJSZXN1bHQiLCAiZnJvbVRocm93YWJsZSIsICJjb21iaW5lIiwgImNvbWJpbmVXaXRoQWxsRXJyb3JzIiwgIk9rIiwgInZhbHVlIiwgImYiLCAib2siLCAiX2YiLCAiX3ZhbHVlIiwgIlJlc3VsdEFzeW5jIiwgIl92IiwgIl9lcnIiLCAiXyIsICJjb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIkVyciIsICJlcnJvciIsICJlcnIiLCAiZXJyQXN5bmMiLCAidiIsICJfb2siLCAic2VsZiIsICJmcm9tVGhyb3dhYmxlIiwgIlJlc3VsdCIsICJMdWZpRmlsZSIsICJfTHVmaUZpbGUiLCAic2VydmVyVXJsIiwgInByb3BlcnRpZXMiLCAiX19wdWJsaWNGaWVsZCIsICJkb3dubG9hZFVybCIsICJwYXNzd29yZCIsICJwYXRoaW5mb3MiLCAia2V5cyIsICJyZW1vdmVVcmwiLCAicGF0aEluZm9zIiwgInNwbGl0dGVkUGF0aCIsICJpbXBvcnRfZXZlbnRzIiwgIkJhc2VFcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiY2F1c2UiLCAiY29udGV4dCIsICJfX3B1YmxpY0ZpZWxkIiwgIkNvbm5lY3Rpb25FcnJvciIsICJCYXNlRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJTZXJ2ZXJFcnJvciIsICJCYXNlRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJlbnN1cmVFcnJvciIsICJ2YWx1ZSIsICJzdHJpbmdpZmllZCIsICJmZXRjaFNlcnZlckNvbmZpZyIsICJpbnN0YW5jZVVybCIsICJvcmlnaW5NYXRjaGVzIiwgInVybE9yaWdpbiIsICJSZXN1bHRBc3luYyIsICJlcnJvciIsICJDb25uZWN0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyQXN5bmMiLCAiU2VydmVyRXJyb3IiLCAiaXNEZW5vUnVudGltZSIsICJpc1NlY3VyZUNvbnRleHQiLCAid29ya2VyVXJsIiwgInJlbGF0aXZlUGF0aCIsICJMdWZpSm9iIiwgImx1ZmlGaWxlIiwgIndvcmtlclR5cGUiLCAiX19wdWJsaWNGaWVsZCIsICJFdmVudEVtaXR0ZXIiLCAiY2FsbGJhY2siLCAiZXZlbnQiLCAiZSIsICJtc2ciLCAidHJhbnNmZXJhYmxlIiwgIm9rQXN5bmMiLCAiZXJyQXN5bmMiLCAiZW5zdXJlRXJyb3IiLCAiUmVzdWx0QXN5bmMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZXJyb3IiLCAid29ya2VyVXJsIiwgIkNyeXB0b0FsZ29yaXRobSIsICJFbmNvZGluZyIsICJjaGFyc2V0IiwgIm5vUGFkZGluZyIsICJhYiIsICJsZW4iLCAidmlldyIsICJyZXMiLCAiaSIsICJzdHIiLCAidmlld0xlbiIsICJlbmMxIiwgImVuYzIiLCAiZW5jMyIsICJlbmM0IiwgImoiLCAib2JqIiwgIkVuY29kaW5nIiwgIm9iaiIsICJFbmNvZGluZyIsICJFbmNvZGUiLCAiYWIiLCAiaW1wb3J0X2x1Zmlfc2pjbCIsICJDcnlwdG9FcnJvciIsICJCYXNlRXJyb3IiLCAiSGFzaGluZ0Vycm9yIiwgIkNyeXB0b0Vycm9yIiwgIl9fcHVibGljRmllbGQiLCAiZ2VuZXJhdGVLZXkiLCAib2tBc3luYyIsICJzamNsIiwgImVycm9yIiwgImVyckFzeW5jIiwgIkNyeXB0b0Vycm9yIiwgImVuc3VyZUVycm9yIiwgImhhc2hQYXNzd29yZCIsICJwYXNzd29yZCIsICJIYXNoaW5nRXJyb3IiLCAiZ2VuZXJhdGVLZXkiLCAiUmVzdWx0QXN5bmMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZ2VuZXJhdGVkS2V5IiwgImtleSIsICJFbmNvZGUiLCAiZXJyb3IiLCAiQ3J5cHRvRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiaGFzaFBhc3N3b3JkIiwgInBhc3N3b3JkIiwgInByb21pc2UiLCAiYiIsICJIYXNoaW5nRXJyb3IiLCAiZ2VuZXJhdGVLZXkiLCAiYWxnbyIsICJoYXNoUGFzc3dvcmQiLCAicGFzc3dvcmQiLCAiRG93bmxvYWRFcnJvciIsICJCYXNlRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJJbmZvc0Vycm9yIiwgIkJhc2VFcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgIkpvYkVycm9yIiwgIkJhc2VFcnJvciIsICJKb2JQYXVzZUVycm9yIiwgIkpvYkVycm9yIiwgIl9fcHVibGljRmllbGQiLCAiSm9iUmVzdW1lRXJyb3IiLCAiSm9iRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJVcGxvYWRFcnJvciIsICJCYXNlRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJDSFVOS19MRU5HVEgiLCAiZmlsZXMiLCAiZXZlbnRzIiwgIkV2ZW50RW1pdHRlciIsICJjYW5jZWwiLCAidXBsb2FkSm9iIiwgImpvYiIsICJMdWZpSm9iIiwgIlJlc3VsdEFzeW5jIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImV2ZW50IiwgIkpvYkVycm9yIiwgImVycm9yIiwgImVuc3VyZUVycm9yIiwgImFkZEZpbGVzVG9BcmNoaXZlIiwgImFyY2hpdmVFbnRyaWVzIiwgImFzeW5jTG9vcCIsICJfYSIsICJmaWxlIiwgIm5hbWVXaXRoRXh0ZW5zaW9uIiwgIm5hbWVXaXRob3V0RXh0ZW5zaW9uIiwgImV4dGVuc2lvbiIsICJuYW1lIiwgImkiLCAib2tBc3luYyIsICJjb21wcmVzcyIsICJhcmNoaXZlTmFtZSIsICJsdWZpRmlsZSIsICJMdWZpRmlsZSIsICJkZWNvbXByZXNzIiwgInppcEZpbGUiLCAiaGFuZGxlUGFzc3dvcmRIYXNoaW5nIiwgImRvd25sb2FkVXJsIiwgInBhc3N3b3JkIiwgImZldGNoU2VydmVyQ29uZmlnIiwgImNvbmZpZyIsICJhbGdvIiwgImlzU2VjdXJlQ29udGV4dCIsICJoYXNoUGFzc3dvcmQiLCAiaGFzaGVkUGFzc3dvcmQiLCAiZG93bmxvYWQiLCAiY2h1bmtzIiwgImhhbmRsZVNvY2tldFJlc3VsdHMiLCAiRG93bmxvYWRFcnJvciIsICJpbmZvcyIsICJJbmZvc0Vycm9yIiwgInBhdXNlIiwgImVyckFzeW5jIiwgIkpvYlBhdXNlRXJyb3IiLCAicmVtb3ZlIiwgInJlbW92ZVVybCIsICJyZXN1bWUiLCAiSm9iUmVzdW1lRXJyb3IiLCAic2xpY2VBbmRVcGxvYWQiLCAiY2h1bmtMZW5ndGgiLCAidG90YWxDaHVua3MiLCAiY29uY3VycmVuY3kiLCAic3RhcnQiLCAiZW5kIiwgImJ1ZmZlciIsICJzdGFydFVwbG9hZCIsICJzZXJ2ZXJVcmwiLCAiZGVsYXkiLCAiZGVsQXRGaXJzdFZpZXciLCAiemlwcGVkIiwgImdlbmVyYXRlS2V5IiwgImNsaWVudEtleSIsICJ1cGxvYWQiLCAiZmlsZXNUb1VwbG9hZCIsICJ6aXBOYW1lIiwgIm9wZXJhdGlvbnMiLCAiVXBsb2FkRXJyb3IiLCAiZ2V0RmlsZXNRdWV1ZWQiLCAiZ2V0RmlsZUluZGV4SW5RdWV1ZSJdCn0K diff --git a/themes/default/public/js/worker/cancel.js b/themes/default/public/js/worker/cancel.js index 86eafb6..af8b6af 100644 --- a/themes/default/public/js/worker/cancel.js +++ b/themes/default/public/js/worker/cancel.js @@ -1 +1,2 @@ -var vt=Object.create;var Le=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var Et=Object.getPrototypeOf,At=Object.prototype.hasOwnProperty;var Ot=(t,e,r)=>e in t?Le(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Lt=(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 Te=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var xt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of wt(e))!At.call(t,o)&&o!==r&&Le(t,o,{get:()=>e[o],enumerable:!(n=gt(e,o))||n.enumerable});return t};var Ie=(t,e,r)=>(r=t!=null?vt(Et(t)):{},xt(e||!t||!t.__esModule?Le(r,"default",{value:t,enumerable:!0}):r,t));var T=(t,e,r)=>Ot(t,typeof e!="symbol"?e+"":e,r);var Ke=Te((sr,xe)=>{"use strict";var K=typeof Reflect=="object"?Reflect:null,Me=K&&typeof K.apply=="function"?K.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},pe;K&&typeof K.ownKeys=="function"?pe=K.ownKeys:Object.getOwnPropertySymbols?pe=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:pe=function(e){return Object.getOwnPropertyNames(e)};function _t(t){console&&console.warn&&console.warn(t)}var je=Number.isNaN||function(e){return e!==e};function p(){p.init.call(this)}xe.exports=p;xe.exports.once=Ct;p.EventEmitter=p;p.prototype._events=void 0;p.prototype._eventsCount=0;p.prototype._maxListeners=void 0;var Ue=10;function me(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(p,"defaultMaxListeners",{enumerable:!0,get:function(){return Ue},set:function(t){if(typeof t!="number"||t<0||je(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Ue=t}});p.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};p.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||je(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 Ne(t){return t._maxListeners===void 0?p.defaultMaxListeners:t._maxListeners}p.prototype.getMaxListeners=function(){return Ne(this)};p.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=i[e];if(u===void 0)return!1;if(typeof u=="function")Me(u,this,r);else for(var f=u.length,h=ze(u,f),n=0;n0&&s.length>o&&!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,_t(a)}return t}p.prototype.addListener=function(e,r){return Be(this,e,r,!1)};p.prototype.on=p.prototype.addListener;p.prototype.prependListener=function(e,r){return Be(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 We(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},o=bt.bind(n);return o.listener=r,n.wrapFn=o,o}p.prototype.once=function(e,r){return me(r),this.on(e,We(this,e,r)),this};p.prototype.prependOnceListener=function(e,r){return me(r),this.prependListener(e,We(this,e,r)),this};p.prototype.removeListener=function(e,r){var n,o,i,s,a;if(me(r),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){a=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():Dt(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||r)}return this};p.prototype.off=p.prototype.removeListener;p.prototype.removeAllListeners=function(e){var r,n,o;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 i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,r[o]);return this};function Je(t,e,r){var n=t._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?r?[o.listener||o]:[o]:r?St(o):ze(o,o.length)}p.prototype.listeners=function(e){return Je(this,e,!0)};p.prototype.rawListeners=function(e){return Je(this,e,!1)};p.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):Fe.call(t,e)};p.prototype.listenerCount=Fe;function Fe(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}p.prototype.eventNames=function(){return this._eventsCount>0?pe(this._events):[]};function ze(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,o,i=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),o=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=i[r>>>24]<<24^i[r>>16&255]<<16^i[r>>8&255]<<8^i[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],o[e]=4>=t||4>e?r:s[0][i[r>>>24]]^s[1][i[r>>16&255]]^s[2][i[r>>8&255]]^s[3][i[r&255]]};c.cipher.aes.prototype={encrypt:function(t){return tt(this,t,0)},decrypt:function(t){return tt(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],o,i,s,a=[],u=[],f,h,l,y;for(o=0;256>o;o++)u[(a[o]=o<<1^283*(o>>7))^o]=o;for(i=s=0;!r[i];i^=f||1,s=u[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[i]=l,n[l]=i,h=a[o=a[f=a[i]]],y=16843009*h^65537*o^257*f^16843008*i,h=257*a[l]^16843008*l,o=0;4>o;o++)t[o][i]=h=h<<24^h>>>8,e[o][l]=y=y<<24^y>>>8;for(o=0;5>o;o++)t[o]=t[o].slice(0),e[o]=e[o].slice(0)}};function tt(t,e,r){if(e.length!==4)throw new c.exception.invalid("invalid aes block size");var n=t.b[r],o=e[0]^n[0],i=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,l,y=4,d=[0,0,0,0];a=t.w[r],t=a[0];var g=a[1],b=a[2],C=a[3],j=a[4];for(l=0;l>>24]^g[i>>16&255]^b[s>>8&255]^C[e&255]^n[y],u=t[i>>>24]^g[s>>16&255]^b[e>>8&255]^C[o&255]^n[y+1],f=t[s>>>24]^g[e>>16&255]^b[o>>8&255]^C[i&255]^n[y+2],e=t[e>>>24]^g[o>>16&255]^b[i>>8&255]^C[s&255]^n[y+3],y+=4,o=a,i=u,s=f;for(l=0;4>l;l++)d[r?3&-l:l]=j[o>>>24]<<24^j[i>>16&255]<<16^j[s>>8&255]<<8^j[e&255]^n[y++],a=o,o=i,i=s,s=e,e=a;return d}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[o]<<32-e;return o=t.length?t[t.length-1]:0,t=c.bitArray.getPartial(o),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,o;for(n=0;n>>8>>>8>>>8),o<<=8;return decodeURIComponent(escape(e))},toBits:function(t){t=unescape(encodeURIComponent(t));var e=[],r,n=0;for(r=0;r>>o)>>>26),6>o?(s=t[r]<<6-o,o+=26,r++):(s<<=6,o-=6);for(;n.length&3&&!e;)n+="=";return n},toBits:function(t,e){t=t.replace(/\s|=/g,"");var r=[],n,o=0,i=c.codec.base64.S,s=0,a;for(e&&(i=i.substr(0,62)+"-_"),n=0;na)throw new c.exception.invalid("this isn't base64!");26>>o),s=a<<32-o):(o+=6,s^=a<<32-o)}return o&56&&r.push(c.bitArray.partial(o&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(o=!0,n=2;n*n<=r;n++)if(r%n===0){o=!1;break}o&&(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,o=this.g,i=this.b,s=o[0],a=o[1],u=o[2],f=o[3],h=o[4],l=o[5],y=o[6],d=o[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+d+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(y^h&(l^y))+i[e],d=y,y=l,l=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;o[0]=o[0]+s|0,o[1]=o[1]+a|0,o[2]=o[2]+u|0,o[3]=o[3]+f|0,o[4]=o[4]+h|0,o[5]=o[5]+l|0,o[6]=o[6]+y|0,o[7]=o[7]+d|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(i=!0,o=2;o*o<=n;o++)if(n%o===0){i=!1;break}i&&(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,o=this.b,i=n[0],s=n[1],a=n[2],u=n[3],f=n[4],h=n[5],l=n[6],y=n[7],d=n[8],g=n[9],b=n[10],C=n[11],j=n[12],fe=n[13],Re=n[14],he=n[15],A;if(typeof Uint32Array<"u"){A=Array(160);for(var w=0;32>w;w++)A[w]=t[w]}else A=t;var w=i,L=s,V=a,z=u,Q=f,H=h,we=l,Z=y,R=d,x=g,le=b,ee=C,de=j,te=fe,Ee=Re,re=he;for(t=0;80>t;t++){if(16>t)e=A[2*t],r=A[2*t+1];else{r=A[2*(t-15)];var v=A[2*(t-15)+1];e=(v<<31|r>>>1)^(v<<24|r>>>8)^r>>>7;var k=(r<<31|v>>>1)^(r<<24|v>>>8)^(r<<25|v>>>7);r=A[2*(t-2)];var P=A[2*(t-2)+1],v=(P<<13|r>>>19)^(r<<3|P>>>29)^r>>>6,P=(r<<13|P>>>19)^(P<<3|r>>>29)^(r<<26|P>>>6),Ae=A[2*(t-7)],Oe=A[2*(t-16)],ne=A[2*(t-16)+1];r=k+A[2*(t-7)+1],e=e+Ae+(r>>>0>>0?1:0),r+=P,e+=v+(r>>>0

>>0?1:0),r+=ne,e+=Oe+(r>>>0>>0?1:0)}A[2*t]=e|=0,A[2*t+1]=r|=0;var Ae=R&le^~R&de,ke=x&ee^~x&te,P=w&V^w&Q^V&Q,mt=L&z^L&H^z&H,Oe=(L<<4|w>>>28)^(w<<30|L>>>2)^(w<<25|L>>>7),ne=(w<<4|L>>>28)^(L<<30|w>>>2)^(L<<25|w>>>7),yt=o[2*t],Pe=o[2*t+1],v=re+((R<<18|x>>>14)^(R<<14|x>>>18)^(x<<23|R>>>9)),k=Ee+((x<<18|R>>>14)^(x<<14|R>>>18)^(R<<23|x>>>9))+(v>>>0>>0?1:0),v=v+ke,k=k+(Ae+(v>>>0>>0?1:0)),v=v+Pe,k=k+(yt+(v>>>0>>0?1:0)),v=v+r|0,k=k+(e+(v>>>0>>0?1:0));r=ne+mt,e=Oe+P+(r>>>0>>0?1:0),Ee=de,re=te,de=le,te=ee,le=R,ee=x,x=Z+v|0,R=we+k+(x>>>0>>0?1:0)|0,we=Q,Z=H,Q=V,H=z,V=w,z=L,L=v+r|0,w=k+e+(L>>>0>>0?1:0)|0}s=n[1]=s+L|0,n[0]=i+w+(s>>>0>>0?1:0)|0,u=n[3]=u+z|0,n[2]=a+V+(u>>>0>>0?1:0)|0,h=n[5]=h+H|0,n[4]=f+Q+(h>>>0>>0?1:0)|0,y=n[7]=y+Z|0,n[6]=l+we+(y>>>0>>0?1:0)|0,g=n[9]=g+x|0,n[8]=d+R+(g>>>0>>0?1:0)|0,C=n[11]=C+ee|0,n[10]=b+le+(C>>>0>>0?1:0)|0,fe=n[13]=fe+te|0,n[12]=j+de+(fe>>>0>>0?1:0)|0,he=n[15]=he+re|0,n[14]=Re+Ee+(he>>>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(i=2;4>i&&f>>>8*i;i++);return i<15-u&&(i=15-u),r=a.clamp(r,8*(15-i)),e=c.mode.ccm.U(t,e,r,n,o,i),s=c.mode.ccm.V(t,s,r,e,o,i),a.concat(s.data,s.tag)},decrypt:function(t,e,r,n,o){o=o||64,n=n||[];var i=c.bitArray,s=i.bitLength(r)/8,f=i.bitLength(e),a=i.clamp(e,f-o),u=i.bitSlice(e,f-o),f=(f-o)/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=i.clamp(r,8*(15-e)),a=c.mode.ccm.V(t,a,r,u,o,e),t=c.mode.ccm.U(t,a.data,r,n,o,e),!i.equal(a.tag,t))throw new c.exception.corrupt("ccm: tag doesn't match");return a.data},ma:function(t,e,r,n,o,i){var s=[],a=c.bitArray,u=a.P;if(n=[a.partial(8,(e.length?64:0)|n-2<<2|i-1)],n=a.concat(n,r),n[3]|=o,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;eo||16h&&(c.mode.ccm.da(s/u),h+=l),r[3]++,o=t.encrypt(r),e[s]^=o[0],e[s+1]^=o[1],e[s+2]^=o[2],e[s+3]^=o[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,o=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>o&&(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)),o=o||c.misc.hmac,t=new o(t);var i,s,a,u,f=[],h=c.bitArray;for(u=1;32*f.length<(n||1);u++){for(o=i=t.encrypt(h.concat(e,[u])),s=1;ss;s++)o.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=i),this.N++,this.b=c.hash.sha256.hash(this.b.concat(o)),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,i,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,i,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&&rt("seeded",Math.max(this.u,this.i)),rt("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,o=this.J[t],i=[];for(n in o)o.hasOwnProperty(n)&&o[n]===e&&i.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(ve=typeof Y<"u"&&Y.exports){try{ge=Lt("crypto")}catch{ge=null}ve=ye=ge}if(ve&&ye.randomBytes)ae=ye.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,ye,ue,ve,ge;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 o=c.json,i=o.j({iv:c.random.randomWords(4,0)},o.defaults),s;if(o.j(i,r),r=i.adata,typeof i.salt=="string"&&(i.salt=c.codec.base64.toBits(i.salt)),typeof i.iv=="string"&&(i.iv=c.codec.base64.toBits(i.iv)),!c.mode[i.mode]||!c.cipher[i.cipher]||typeof t=="string"&&100>=i.iter||i.ts!==64&&i.ts!==96&&i.ts!==128||i.ks!==128&&i.ks!==192&&i.ks!==256||2>i.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||4(Object.assign(t,e),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:t}),t);var $e=()=>{m.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),m.once("OPERATION_FAILED",t=>{self.postMessage({event:"OPERATION_FAILED",error:t})})};var Pt={withStackTrace:!1},Ve=(t,e,r=Pt)=>{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:o}};function G(t,e,r,n){function o(i){return i instanceof r?i:new r(function(s){s(i)})}return new(r||(r=Promise))(function(i,s){function a(h){try{f(n.next(h))}catch(l){s(l)}}function u(h){try{f(n.throw(h))}catch(l){s(l)}}function f(h){h.done?i(h.value):o(h.value).then(a,u)}f((n=n.apply(t,e||[])).next())})}function Ye(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 I(t){return this instanceof I?(this.v=t,this):new I(t)}function qe(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(d){return function(g){return Promise.resolve(g).then(d,l)}}function a(d,g){n[d]&&(o[d]=function(b){return new Promise(function(C,j){i.push([d,b,C,j])>1||u(d,b)})},g&&(o[d]=g(o[d])))}function u(d,g){try{f(n[d](g))}catch(b){y(i[0][3],b)}}function f(d){d.value instanceof I?Promise.resolve(d.value.v).then(h,l):y(i[0][2],d)}function h(d){u("next",d)}function l(d){u("throw",d)}function y(d,g){d(g),i.shift(),i.length&&u(i[0][0],i[0][1])}}function Tt(t){var e,r;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=t[o]?function(s){return(r=!r)?{value:I(t[o](s)),done:!1}:i?i(s):s}:i}}function It(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 Ye=="function"?Ye(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=t[i]&&function(s){return new Promise(function(a,u){s=t[i](s),o(a,u,s.done,s.value)})}}function o(i,s,a,u){Promise.resolve(u).then(function(f){i({value:f,done:a})},s)}}var E=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new D(n));return new t(r)}static fromPromise(e,r){let n=e.then(o=>new D(o)).catch(o=>new S(r(o)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(G(this,void 0,void 0,function*(){try{return new D(yield e(...n))}catch(o){return new S(r?r(o):o)}}))}static combine(e){return Mt(e)}static combineWithAllErrors(e){return Ut(e)}map(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){return r.isErr()?new S(r.error):new D(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);let n=yield e(r.value);return n.isErr()?new S(n.error):new D(r.value)})))}andTee(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);try{yield e(r.value)}catch{}return new D(r.value)})))}mapErr(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){return r.isOk()?new D(r.value):new S(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new S(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new D(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 qe(this,arguments,function*(){return yield I(yield I(yield*Tt(It(yield I(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return qe(this,arguments,function*(){let r=yield I(this._promise);return r.isErr()&&(yield yield I(O(r.error))),yield I(r.value)})}},M=t=>new E(Promise.resolve(new D(t))),O=t=>new E(Promise.resolve(new S(t))),pr=E.fromPromise,mr=E.fromSafePromise,yr=E.fromThrowable,Qe=t=>{let e=J([]);for(let r of t)if(r.isErr()){e=N(r.error);break}else e.map(n=>n.push(r.value));return e},Mt=t=>E.fromSafePromise(Promise.all(t)).andThen(Qe),Ze=t=>{let e=J([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=N([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},Ut=t=>E.fromSafePromise(Promise.all(t)).andThen(Ze),_e;(function(t){function e(o,i){return(...s)=>{try{let a=o(...s);return J(a)}catch(a){return N(i?i(a):a)}}}t.fromThrowable=e;function r(o){return Qe(o)}t.combine=r;function n(o){return Ze(o)}t.combineWithAllErrors=n})(_e||(_e={}));var J=t=>new D(t);function N(t){return new S(t)}var D=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return J(e(this.value))}mapErr(e){return J(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 J(this.value)}orElse(e){return J(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return E.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 Ve("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},S=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return N(this.error)}mapErr(e){return N(e(this.error))}andThrough(e){return N(this.error)}andTee(e){return N(this.error)}andThen(e){return N(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return O(this.error)}asyncAndThrough(e){return O(this.error)}asyncMap(e){return O(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield N(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw Ve("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},vr=_e.fromThrowable;var W=class extends Error{constructor(r,n={}){let{cause:o,context:i}=n;super(r,{cause:o});T(this,"context");this.name=this.constructor.name,this.context=i}};var U=class extends W{};var oe=class extends U{constructor(){super(...arguments);T(this,"message","An error occured while trying to connect to WebSocket")}};var F=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)};var $=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),o="";for(let i=0;i>2]+this._charset[(n[i]&3)<<4|n[i+1]>>4]+this._charset[(n[i+1]&15)<<2|n[i+2]>>6]+this._charset[n[i+2]&63];return r%3==2?(o=o.substring(0,o.length-1),this._noPadding||(o+="=")):r%3==1&&(o=o.substring(0,o.length-2),this._noPadding||(o+="==")),o}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),o,i,s,a,u=0,f=0;for(;u>4,n[u++]=(i&15)<<4|s>>2,n[u++]=(s&3)<<6|a;return n.buffer}};var jt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function ie(t){return jt.Decode(t)}var Nt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function be(t){return Nt.Decode(t)}var st=Ie(ot());var B=class extends W{};var q=class extends B{constructor(){super(...arguments);T(this,"message","Unable to decrypt the provided data")}};var ct=(t,e)=>{try{let r=typeof e=="string"?e:e.data;return M(ie(st.default.decrypt(t,r)))}catch(r){return O(new q(void 0,{cause:F(r)}))}};var at=(t,e)=>zt(t).andThen(r=>E.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:e.iv},r,e.data),n=>new q(void 0,{cause:F(n)})));var zt=t=>E.fromPromise(crypto.subtle.importKey("raw",be(t),{name:"AES-GCM"},!1,["encrypt","decrypt"]),e=>new B("Unable to import cryptography key",{cause:F(e)}));var ut=(t,e)=>e.algo===void 0||e.algo===0?ct(t,e):at(t,e);var _={},ft=5,Xt=t=>(m.emit("UPLOAD_CANCELLED",t.success),M(void 0)),Gt=(t,e)=>{let r=t.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let o=JSON.parse(n);if(rr(o)){let i=r.shift();if(i){let s=JSON.parse(i);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=ie(s.data)),ut(e.keys.client,s).andThen(a=>{let u=typeof a=="string"?new TextEncoder().encode(a).buffer:a;return o.part===0?(X(e,{chunksReady:e.chunksReady+1,delAtFirstView:o.del_at_first_view,delay:o.delay,name:o.name,size:o.size,totalChunks:o.total,type:o.type,zipped:o.zipped}),m.emit("DOWNLOAD_STARTED")):X(e,{chunksReady:e.chunksReady+1}),m.emit("CHUNK_DOWNLOADED",u,o.part),e.chunksReady===o.total?Vt(e).andThen(()=>(m.emit("DOWNLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED"),M(void 0))):M(void 0)})}else{let s=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",s),O(s)}}else{let i=new U(o.msg);return m.emit("OPERATION_FAILED",i),O(i)}}else{let o=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",o),O(o)}},$t=(t,e)=>{if(t.success)return t.j===0&&(X(e,{keys:{client:e.keys.client,server:t.short},actionToken:t.token,queueIndex:t.i}),m.emit("UPLOAD_STARTED")),X(e,{chunksReady:e.chunksReady+1,createdAt:t.created_at}),m.emit("CHUNK_UPLOADED"),e.chunksReady===e.totalChunks&&(X(e,{uploadStatus:1}),m.emit("UPLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED")),M(void 0);{let r=new U(t.msg);return m.emit("OPERATION_FAILED",r),O(r)}},Yt=(t,e)=>{let r=tr(t.data),n;if(r)if(!r.action&&r.msg){let o=new U(r.msg);return m.emit("OPERATION_FAILED",o),O(o)}else"delay"in r?n=$t(r,e):n=Xt(r);else n=Gt(t.data,e);return n},qt=t=>_!==void 0&&_[t]!==void 0&&_[t].readyState===WebSocket.CONNECTING,Se=t=>_!==void 0&&_[t]!==void 0&&_[t].readyState===WebSocket.OPEN,ht=t=>Ce(er(t),t,`${JSON.stringify({id:t.keys.server,mod_token:t.actionToken,cancel:!0,i:t.queueIndex})}XXMOJOXXuseless`);var Vt=t=>{let e;return t.password?e={ended:!0,file_pwd:t.password}:e={ended:!0},Ce(Zt(t),t,JSON.stringify(e))};var Ce=(t,e,r)=>Se(t)?(_[t].send(r),M(void 0)):lt(t).andThen(()=>(_[t].onmessage=n=>Yt(n,e),Ce(t,e,r))),lt=(t,e=0)=>(!Se(t)&&!qt(t)&&(_[t]=new WebSocket(t),m.once("SOCKET_OPERATION_TERMINATED",()=>{_[t].close()}),m.once("OPERATION_FAILED",()=>{m.emit("SOCKET_OPERATION_TERMINATED")}),_[t].onopen=()=>{m.emit("SOCKET_OPENED")},_[t].onclose=()=>{},_[t].onerror=()=>++e<=ft?(console.error(`An error happened while trying to connect to WebSocket ${t}. Trying again. ${e} / ${ft}`),lt(t,e)):(m.emit("SOCKET_ONERROR"),O(new oe(`Unable to connect to WebSocket ${t}.`)))),Qt(t).andThen(()=>M(t)).orElse(r=>O(r))),Qt=t=>E.fromPromise(new Promise((e,r)=>{Se(t)?e(void 0):(m.once("SOCKET_OPENED",()=>{e(void 0)}),m.on("SOCKET_ONERROR",()=>{r(new oe)}))}),e=>F(e));var dt=(t,e)=>{let r=new URL(t);return r.protocol=r.protocol==="http:"?"ws:":"wss:",r.pathname+=e,new URL(r.origin+r.pathname)},Zt=t=>dt(new URL(t.serverUrl),"download"+`/${t.keys.server}`).toString(),er=t=>dt(new URL(t.serverUrl),"upload").toString(),tr=t=>{try{let e=JSON.parse(t);if(e&&typeof e=="object")return e}catch{}return!1},rr=t=>typeof t=="object"&&t!==null&&!("msg"in t);var pt=!1;self.onmessage=t=>{pt||($e(),pt=!0),m.on("UPLOAD_CANCELLED",e=>{self.postMessage({event:"UPLOAD_CANCELLED",success:e})}),nr(t.data).mapErr(e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})};var nr=t=>ht(t.args.lufiFile); +var vt=Object.create;var Le=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var Et=Object.getPrototypeOf,At=Object.prototype.hasOwnProperty;var Ot=(t,e,r)=>e in t?Le(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Lt=(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 Te=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var xt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of wt(e))!At.call(t,o)&&o!==r&&Le(t,o,{get:()=>e[o],enumerable:!(n=gt(e,o))||n.enumerable});return t};var Ie=(t,e,r)=>(r=t!=null?vt(Et(t)):{},xt(e||!t||!t.__esModule?Le(r,"default",{value:t,enumerable:!0}):r,t));var T=(t,e,r)=>Ot(t,typeof e!="symbol"?e+"":e,r);var Ke=Te((sr,xe)=>{"use strict";var K=typeof Reflect=="object"?Reflect:null,Me=K&&typeof K.apply=="function"?K.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},pe;K&&typeof K.ownKeys=="function"?pe=K.ownKeys:Object.getOwnPropertySymbols?pe=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:pe=function(e){return Object.getOwnPropertyNames(e)};function _t(t){console&&console.warn&&console.warn(t)}var je=Number.isNaN||function(e){return e!==e};function p(){p.init.call(this)}xe.exports=p;xe.exports.once=Ct;p.EventEmitter=p;p.prototype._events=void 0;p.prototype._eventsCount=0;p.prototype._maxListeners=void 0;var Ue=10;function me(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(p,"defaultMaxListeners",{enumerable:!0,get:function(){return Ue},set:function(t){if(typeof t!="number"||t<0||je(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Ue=t}});p.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};p.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||je(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 Ne(t){return t._maxListeners===void 0?p.defaultMaxListeners:t._maxListeners}p.prototype.getMaxListeners=function(){return Ne(this)};p.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=i[e];if(u===void 0)return!1;if(typeof u=="function")Me(u,this,r);else for(var f=u.length,h=He(u,f),n=0;n0&&s.length>o&&!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,_t(a)}return t}p.prototype.addListener=function(e,r){return Be(this,e,r,!1)};p.prototype.on=p.prototype.addListener;p.prototype.prependListener=function(e,r){return Be(this,e,r,!0)};function Dt(){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 We(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},o=Dt.bind(n);return o.listener=r,n.wrapFn=o,o}p.prototype.once=function(e,r){return me(r),this.on(e,We(this,e,r)),this};p.prototype.prependOnceListener=function(e,r){return me(r),this.prependListener(e,We(this,e,r)),this};p.prototype.removeListener=function(e,r){var n,o,i,s,a;if(me(r),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){a=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():bt(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||r)}return this};p.prototype.off=p.prototype.removeListener;p.prototype.removeAllListeners=function(e){var r,n,o;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 i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,r[o]);return this};function Fe(t,e,r){var n=t._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?r?[o.listener||o]:[o]:r?St(o):He(o,o.length)}p.prototype.listeners=function(e){return Fe(this,e,!0)};p.prototype.rawListeners=function(e){return Fe(this,e,!1)};p.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):Je.call(t,e)};p.prototype.listenerCount=Je;function Je(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}p.prototype.eventNames=function(){return this._eventsCount>0?pe(this._events):[]};function He(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,o,i=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),o=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=i[r>>>24]<<24^i[r>>16&255]<<16^i[r>>8&255]<<8^i[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],o[e]=4>=t||4>e?r:s[0][i[r>>>24]]^s[1][i[r>>16&255]]^s[2][i[r>>8&255]]^s[3][i[r&255]]};c.cipher.aes.prototype={encrypt:function(t){return tt(this,t,0)},decrypt:function(t){return tt(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],o,i,s,a=[],u=[],f,h,l,y;for(o=0;256>o;o++)u[(a[o]=o<<1^283*(o>>7))^o]=o;for(i=s=0;!r[i];i^=f||1,s=u[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[i]=l,n[l]=i,h=a[o=a[f=a[i]]],y=16843009*h^65537*o^257*f^16843008*i,h=257*a[l]^16843008*l,o=0;4>o;o++)t[o][i]=h=h<<24^h>>>8,e[o][l]=y=y<<24^y>>>8;for(o=0;5>o;o++)t[o]=t[o].slice(0),e[o]=e[o].slice(0)}};function tt(t,e,r){if(e.length!==4)throw new c.exception.invalid("invalid aes block size");var n=t.b[r],o=e[0]^n[0],i=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,l,y=4,d=[0,0,0,0];a=t.w[r],t=a[0];var g=a[1],D=a[2],C=a[3],j=a[4];for(l=0;l>>24]^g[i>>16&255]^D[s>>8&255]^C[e&255]^n[y],u=t[i>>>24]^g[s>>16&255]^D[e>>8&255]^C[o&255]^n[y+1],f=t[s>>>24]^g[e>>16&255]^D[o>>8&255]^C[i&255]^n[y+2],e=t[e>>>24]^g[o>>16&255]^D[i>>8&255]^C[s&255]^n[y+3],y+=4,o=a,i=u,s=f;for(l=0;4>l;l++)d[r?3&-l:l]=j[o>>>24]<<24^j[i>>16&255]<<16^j[s>>8&255]<<8^j[e&255]^n[y++],a=o,o=i,i=s,s=e,e=a;return d}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[o]<<32-e;return o=t.length?t[t.length-1]:0,t=c.bitArray.getPartial(o),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,o;for(n=0;n>>8>>>8>>>8),o<<=8;return decodeURIComponent(escape(e))},toBits:function(t){t=unescape(encodeURIComponent(t));var e=[],r,n=0;for(r=0;r>>o)>>>26),6>o?(s=t[r]<<6-o,o+=26,r++):(s<<=6,o-=6);for(;n.length&3&&!e;)n+="=";return n},toBits:function(t,e){t=t.replace(/\s|=/g,"");var r=[],n,o=0,i=c.codec.base64.S,s=0,a;for(e&&(i=i.substr(0,62)+"-_"),n=0;na)throw new c.exception.invalid("this isn't base64!");26>>o),s=a<<32-o):(o+=6,s^=a<<32-o)}return o&56&&r.push(c.bitArray.partial(o&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(o=!0,n=2;n*n<=r;n++)if(r%n===0){o=!1;break}o&&(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,o=this.g,i=this.b,s=o[0],a=o[1],u=o[2],f=o[3],h=o[4],l=o[5],y=o[6],d=o[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+d+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(y^h&(l^y))+i[e],d=y,y=l,l=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;o[0]=o[0]+s|0,o[1]=o[1]+a|0,o[2]=o[2]+u|0,o[3]=o[3]+f|0,o[4]=o[4]+h|0,o[5]=o[5]+l|0,o[6]=o[6]+y|0,o[7]=o[7]+d|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(i=!0,o=2;o*o<=n;o++)if(n%o===0){i=!1;break}i&&(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,o=this.b,i=n[0],s=n[1],a=n[2],u=n[3],f=n[4],h=n[5],l=n[6],y=n[7],d=n[8],g=n[9],D=n[10],C=n[11],j=n[12],fe=n[13],Re=n[14],he=n[15],A;if(typeof Uint32Array<"u"){A=Array(160);for(var w=0;32>w;w++)A[w]=t[w]}else A=t;var w=i,L=s,q=a,H=u,Q=f,z=h,we=l,Z=y,R=d,x=g,le=D,ee=C,de=j,te=fe,Ee=Re,re=he;for(t=0;80>t;t++){if(16>t)e=A[2*t],r=A[2*t+1];else{r=A[2*(t-15)];var v=A[2*(t-15)+1];e=(v<<31|r>>>1)^(v<<24|r>>>8)^r>>>7;var k=(r<<31|v>>>1)^(r<<24|v>>>8)^(r<<25|v>>>7);r=A[2*(t-2)];var P=A[2*(t-2)+1],v=(P<<13|r>>>19)^(r<<3|P>>>29)^r>>>6,P=(r<<13|P>>>19)^(P<<3|r>>>29)^(r<<26|P>>>6),Ae=A[2*(t-7)],Oe=A[2*(t-16)],ne=A[2*(t-16)+1];r=k+A[2*(t-7)+1],e=e+Ae+(r>>>0>>0?1:0),r+=P,e+=v+(r>>>0

>>0?1:0),r+=ne,e+=Oe+(r>>>0>>0?1:0)}A[2*t]=e|=0,A[2*t+1]=r|=0;var Ae=R&le^~R&de,ke=x&ee^~x&te,P=w&q^w&Q^q&Q,mt=L&H^L&z^H&z,Oe=(L<<4|w>>>28)^(w<<30|L>>>2)^(w<<25|L>>>7),ne=(w<<4|L>>>28)^(L<<30|w>>>2)^(L<<25|w>>>7),yt=o[2*t],Pe=o[2*t+1],v=re+((R<<18|x>>>14)^(R<<14|x>>>18)^(x<<23|R>>>9)),k=Ee+((x<<18|R>>>14)^(x<<14|R>>>18)^(R<<23|x>>>9))+(v>>>0>>0?1:0),v=v+ke,k=k+(Ae+(v>>>0>>0?1:0)),v=v+Pe,k=k+(yt+(v>>>0>>0?1:0)),v=v+r|0,k=k+(e+(v>>>0>>0?1:0));r=ne+mt,e=Oe+P+(r>>>0>>0?1:0),Ee=de,re=te,de=le,te=ee,le=R,ee=x,x=Z+v|0,R=we+k+(x>>>0>>0?1:0)|0,we=Q,Z=z,Q=q,z=H,q=w,H=L,L=v+r|0,w=k+e+(L>>>0>>0?1:0)|0}s=n[1]=s+L|0,n[0]=i+w+(s>>>0>>0?1:0)|0,u=n[3]=u+H|0,n[2]=a+q+(u>>>0>>0?1:0)|0,h=n[5]=h+z|0,n[4]=f+Q+(h>>>0>>0?1:0)|0,y=n[7]=y+Z|0,n[6]=l+we+(y>>>0>>0?1:0)|0,g=n[9]=g+x|0,n[8]=d+R+(g>>>0>>0?1:0)|0,C=n[11]=C+ee|0,n[10]=D+le+(C>>>0>>0?1:0)|0,fe=n[13]=fe+te|0,n[12]=j+de+(fe>>>0>>0?1:0)|0,he=n[15]=he+re|0,n[14]=Re+Ee+(he>>>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(i=2;4>i&&f>>>8*i;i++);return i<15-u&&(i=15-u),r=a.clamp(r,8*(15-i)),e=c.mode.ccm.U(t,e,r,n,o,i),s=c.mode.ccm.V(t,s,r,e,o,i),a.concat(s.data,s.tag)},decrypt:function(t,e,r,n,o){o=o||64,n=n||[];var i=c.bitArray,s=i.bitLength(r)/8,f=i.bitLength(e),a=i.clamp(e,f-o),u=i.bitSlice(e,f-o),f=(f-o)/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=i.clamp(r,8*(15-e)),a=c.mode.ccm.V(t,a,r,u,o,e),t=c.mode.ccm.U(t,a.data,r,n,o,e),!i.equal(a.tag,t))throw new c.exception.corrupt("ccm: tag doesn't match");return a.data},ma:function(t,e,r,n,o,i){var s=[],a=c.bitArray,u=a.P;if(n=[a.partial(8,(e.length?64:0)|n-2<<2|i-1)],n=a.concat(n,r),n[3]|=o,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;eo||16h&&(c.mode.ccm.da(s/u),h+=l),r[3]++,o=t.encrypt(r),e[s]^=o[0],e[s+1]^=o[1],e[s+2]^=o[2],e[s+3]^=o[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,o=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>o&&(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)),o=o||c.misc.hmac,t=new o(t);var i,s,a,u,f=[],h=c.bitArray;for(u=1;32*f.length<(n||1);u++){for(o=i=t.encrypt(h.concat(e,[u])),s=1;ss;s++)o.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=i),this.N++,this.b=c.hash.sha256.hash(this.b.concat(o)),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,i,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,i,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&&rt("seeded",Math.max(this.u,this.i)),rt("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,o=this.J[t],i=[];for(n in o)o.hasOwnProperty(n)&&o[n]===e&&i.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(ve=typeof Y<"u"&&Y.exports){try{ge=Lt("crypto")}catch{ge=null}ve=ye=ge}if(ve&&ye.randomBytes)ae=ye.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,ye,ue,ve,ge;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 o=c.json,i=o.j({iv:c.random.randomWords(4,0)},o.defaults),s;if(o.j(i,r),r=i.adata,typeof i.salt=="string"&&(i.salt=c.codec.base64.toBits(i.salt)),typeof i.iv=="string"&&(i.iv=c.codec.base64.toBits(i.iv)),!c.mode[i.mode]||!c.cipher[i.cipher]||typeof t=="string"&&100>=i.iter||i.ts!==64&&i.ts!==96&&i.ts!==128||i.ks!==128&&i.ks!==192&&i.ks!==256||2>i.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||4(Object.assign(t,e),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:t}),t);var $e=()=>{m.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),m.once("OPERATION_FAILED",t=>{self.postMessage({event:"OPERATION_FAILED",error:t})})};var Pt={withStackTrace:!1},qe=(t,e,r=Pt)=>{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:o}};function G(t,e,r,n){function o(i){return i instanceof r?i:new r(function(s){s(i)})}return new(r||(r=Promise))(function(i,s){function a(h){try{f(n.next(h))}catch(l){s(l)}}function u(h){try{f(n.throw(h))}catch(l){s(l)}}function f(h){h.done?i(h.value):o(h.value).then(a,u)}f((n=n.apply(t,e||[])).next())})}function Ye(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 I(t){return this instanceof I?(this.v=t,this):new I(t)}function Ve(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(d){return function(g){return Promise.resolve(g).then(d,l)}}function a(d,g){n[d]&&(o[d]=function(D){return new Promise(function(C,j){i.push([d,D,C,j])>1||u(d,D)})},g&&(o[d]=g(o[d])))}function u(d,g){try{f(n[d](g))}catch(D){y(i[0][3],D)}}function f(d){d.value instanceof I?Promise.resolve(d.value.v).then(h,l):y(i[0][2],d)}function h(d){u("next",d)}function l(d){u("throw",d)}function y(d,g){d(g),i.shift(),i.length&&u(i[0][0],i[0][1])}}function Tt(t){var e,r;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=t[o]?function(s){return(r=!r)?{value:I(t[o](s)),done:!1}:i?i(s):s}:i}}function It(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 Ye=="function"?Ye(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=t[i]&&function(s){return new Promise(function(a,u){s=t[i](s),o(a,u,s.done,s.value)})}}function o(i,s,a,u){Promise.resolve(u).then(function(f){i({value:f,done:a})},s)}}var E=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new b(n));return new t(r)}static fromPromise(e,r){let n=e.then(o=>new b(o)).catch(o=>new S(r(o)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(G(this,void 0,void 0,function*(){try{return new b(yield e(...n))}catch(o){return new S(r?r(o):o)}}))}static combine(e){return Mt(e)}static combineWithAllErrors(e){return Ut(e)}map(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){return r.isErr()?new S(r.error):new b(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);let n=yield e(r.value);return n.isErr()?new S(n.error):new b(r.value)})))}andTee(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);try{yield e(r.value)}catch{}return new b(r.value)})))}mapErr(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){return r.isOk()?new b(r.value):new S(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new S(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new b(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 Ve(this,arguments,function*(){return yield I(yield I(yield*Tt(It(yield I(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return Ve(this,arguments,function*(){let r=yield I(this._promise);return r.isErr()&&(yield yield I(O(r.error))),yield I(r.value)})}},M=t=>new E(Promise.resolve(new b(t))),O=t=>new E(Promise.resolve(new S(t))),pr=E.fromPromise,mr=E.fromSafePromise,yr=E.fromThrowable,Qe=t=>{let e=F([]);for(let r of t)if(r.isErr()){e=N(r.error);break}else e.map(n=>n.push(r.value));return e},Mt=t=>E.fromSafePromise(Promise.all(t)).andThen(Qe),Ze=t=>{let e=F([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=N([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},Ut=t=>E.fromSafePromise(Promise.all(t)).andThen(Ze),_e;(function(t){function e(o,i){return(...s)=>{try{let a=o(...s);return F(a)}catch(a){return N(i?i(a):a)}}}t.fromThrowable=e;function r(o){return Qe(o)}t.combine=r;function n(o){return Ze(o)}t.combineWithAllErrors=n})(_e||(_e={}));var F=t=>new b(t);function N(t){return new S(t)}var b=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return F(e(this.value))}mapErr(e){return F(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 F(this.value)}orElse(e){return F(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return E.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 qe("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},S=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return N(this.error)}mapErr(e){return N(e(this.error))}andThrough(e){return N(this.error)}andTee(e){return N(this.error)}andThen(e){return N(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return O(this.error)}asyncAndThrough(e){return O(this.error)}asyncMap(e){return O(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield N(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw qe("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},vr=_e.fromThrowable;var W=class extends Error{constructor(r,n={}){let{cause:o,context:i}=n;super(r,{cause:o});T(this,"context");this.name=this.constructor.name,this.context=i}};var U=class extends W{};var oe=class extends U{constructor(){super(...arguments);T(this,"message","An error occured while trying to connect to WebSocket")}};var J=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)};var $=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),o="";for(let i=0;i>2]+this._charset[(n[i]&3)<<4|n[i+1]>>4]+this._charset[(n[i+1]&15)<<2|n[i+2]>>6]+this._charset[n[i+2]&63];return r%3==2?(o=o.substring(0,o.length-1),this._noPadding||(o+="=")):r%3==1&&(o=o.substring(0,o.length-2),this._noPadding||(o+="==")),o}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),o,i,s,a,u=0,f=0;for(;u>4,n[u++]=(i&15)<<4|s>>2,n[u++]=(s&3)<<6|a;return n.buffer}};var jt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function ie(t){return jt.Decode(t)}var Nt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function De(t){return Nt.Decode(t)}var st=Ie(ot());var B=class extends W{};var V=class extends B{constructor(){super(...arguments);T(this,"message","Unable to decrypt the provided data")}};var ct=(t,e)=>{try{let r=typeof e=="string"?e:e.data;return M(ie(st.default.decrypt(t,r)))}catch(r){return O(new V(void 0,{cause:J(r)}))}};var at=(t,e)=>Ht(t).andThen(r=>E.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:e.iv},r,e.data),n=>new V(void 0,{cause:J(n)})));var Ht=t=>E.fromPromise(crypto.subtle.importKey("raw",De(t),{name:"AES-GCM"},!1,["encrypt","decrypt"]),e=>new B("Unable to import cryptography key",{cause:J(e)}));var ut=(t,e)=>e.algo===void 0||e.algo===0?ct(t,e):at(t,e);var _={},ft=5,Xt=t=>(m.emit("UPLOAD_CANCELLED",t.success),M(void 0)),Gt=(t,e)=>{let r=t.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let o=JSON.parse(n);if(rr(o)){let i=r.shift();if(i){let s=JSON.parse(i);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=ie(s.data)),ut(e.keys.client,s).andThen(a=>{let u=typeof a=="string"?new TextEncoder().encode(a).buffer:a;return o.part===0?(X(e,{chunksReady:e.chunksReady+1,delAtFirstView:o.del_at_first_view,delay:o.delay,name:o.name,size:o.size,totalChunks:o.total,type:o.type,zipped:o.zipped}),m.emit("DOWNLOAD_STARTED")):X(e,{chunksReady:e.chunksReady+1}),m.emit("CHUNK_DOWNLOADED",u,o.part),e.chunksReady===o.total?qt(e).andThen(()=>(m.emit("DOWNLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED"),M(void 0))):M(void 0)})}else{let s=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",s),O(s)}}else{let i=new U(o.msg);return m.emit("OPERATION_FAILED",i),O(i)}}else{let o=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",o),O(o)}},$t=(t,e)=>{if(t.success)return t.j===0&&(X(e,{keys:{client:e.keys.client,server:t.short},actionToken:t.token,queueIndex:t.i}),m.emit("UPLOAD_STARTED")),X(e,{chunksReady:e.chunksReady+1,createdAt:t.created_at}),m.emit("CHUNK_UPLOADED"),e.chunksReady===e.totalChunks&&(X(e,{uploadStatus:1}),m.emit("UPLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED")),M(void 0);{let r=new U(t.msg);return m.emit("OPERATION_FAILED",r),O(r)}},Yt=(t,e)=>{let r=tr(t.data),n;if(r)if(!r.action&&r.msg){let o=new U(r.msg);return m.emit("OPERATION_FAILED",o),O(o)}else"delay"in r?n=$t(r,e):n=Xt(r);else n=Gt(t.data,e);return n},Vt=t=>_!==void 0&&_[t]!==void 0&&_[t].readyState===WebSocket.CONNECTING,Se=t=>_!==void 0&&_[t]!==void 0&&_[t].readyState===WebSocket.OPEN,ht=t=>Ce(er(t),t,`${JSON.stringify({id:t.keys.server,mod_token:t.actionToken,cancel:!0,i:t.queueIndex})}XXMOJOXXuseless`);var qt=t=>{let e;return t.password?e={ended:!0,file_pwd:t.password}:e={ended:!0},Ce(Zt(t),t,JSON.stringify(e))};var Ce=(t,e,r)=>Se(t)?(_[t].send(r),M(void 0)):lt(t).andThen(()=>(_[t].onmessage=n=>Yt(n,e),Ce(t,e,r))),lt=(t,e=0)=>(!Se(t)&&!Vt(t)&&(_[t]=new WebSocket(t),m.once("SOCKET_OPERATION_TERMINATED",()=>{_[t].close()}),m.once("OPERATION_FAILED",()=>{m.emit("SOCKET_OPERATION_TERMINATED")}),_[t].onopen=()=>{m.emit("SOCKET_OPENED")},_[t].onclose=()=>{},_[t].onerror=()=>++e<=ft?(console.error(`An error happened while trying to connect to WebSocket ${t}. Trying again. ${e} / ${ft}`),lt(t,e)):(m.emit("SOCKET_ONERROR"),O(new oe(`Unable to connect to WebSocket ${t}.`)))),Qt(t).andThen(()=>M(t)).orElse(r=>O(r))),Qt=t=>E.fromPromise(new Promise((e,r)=>{Se(t)?e(void 0):(m.once("SOCKET_OPENED",()=>{e(void 0)}),m.on("SOCKET_ONERROR",()=>{r(new oe)}))}),e=>J(e));var dt=(t,e)=>{let r=new URL(t);return r.protocol=r.protocol==="http:"?"ws:":"wss:",r.pathname+=e,new URL(r.origin+r.pathname)},Zt=t=>dt(new URL(t.serverUrl),"download"+`/${t.keys.server}`).toString(),er=t=>dt(new URL(t.serverUrl),"upload").toString(),tr=t=>{try{let e=JSON.parse(t);if(e&&typeof e=="object")return e}catch{}return!1},rr=t=>typeof t=="object"&&t!==null&&!("msg"in t);var pt=!1;self.onmessage=t=>{pt||($e(),pt=!0),m.on("UPLOAD_CANCELLED",e=>{self.postMessage({event:"UPLOAD_CANCELLED",success:e})}),nr(t.data).mapErr(e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})};var nr=t=>ht(t.args.lufiFile); +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbHVmaS1zamNsQDEuMC44L25vZGVfbW9kdWxlcy9sdWZpLXNqY2wvc2pjbC5qcyIsICIuLi8uLi9zcmMvd29ya2VyL3NoYXJlZC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbmV2ZXJ0aHJvd0A4LjEuMS9ub2RlX21vZHVsZXMvbmV2ZXJ0aHJvdy9kaXN0L2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9lcnJvci9iYXNlLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWNvbm5lY3Rpb24tZXJyb3IudHMiLCAiLi4vLi4vc3JjL3V0aWxzLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9hcnJheWJ1ZmZlci1lbmNvZGluZ0AxLjEuMC9ub2RlX21vZHVsZXMvYXJyYXlidWZmZXItZW5jb2Rpbmcvc3JjL2Jhc2U2NC9lbmNvZGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vYXJyYXlidWZmZXItZW5jb2RpbmdAMS4xLjAvbm9kZV9tb2R1bGVzL2FycmF5YnVmZmVyLWVuY29kaW5nL3NyYy9iYXNlNjQvc3RhbmRhcmQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2FycmF5YnVmZmVyLWVuY29kaW5nQDEuMS4wL25vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci1lbmNvZGluZy9zcmMvYmFzZTY0L3VybC50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by9zamNsLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by93ZWIudHMiLCAiLi4vLi4vc3JjL2FwaS9jcnlwdG8udHMiLCAiLi4vLi4vc3JjL2FwaS93ZWJzb2NrZXQudHMiLCAiLi4vLi4vc3JjL3dvcmtlci9jYW5jZWwudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnID8gUmVmbGVjdCA6IG51bGxcbnZhciBSZWZsZWN0QXBwbHkgPSBSICYmIHR5cGVvZiBSLmFwcGx5ID09PSAnZnVuY3Rpb24nXG4gID8gUi5hcHBseVxuICA6IGZ1bmN0aW9uIFJlZmxlY3RBcHBseSh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpO1xuICB9XG5cbnZhciBSZWZsZWN0T3duS2V5c1xuaWYgKFIgJiYgdHlwZW9mIFIub3duS2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWZsZWN0T3duS2V5cyA9IFIub3duS2V5c1xufSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldClcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NFbWl0V2FybmluZyh3YXJuaW5nKSB7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUud2FybikgY29uc29sZS53YXJuKHdhcm5pbmcpO1xufVxuXG52YXIgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5tb2R1bGUuZXhwb3J0cy5vbmNlID0gb25jZTtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHNDb3VudCA9IDA7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbnZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgbGlzdGVuZXIpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICdkZWZhdWx0TWF4TGlzdGVuZXJzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwIHx8IE51bWJlcklzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIGFyZyArICcuJyk7XG4gICAgfVxuICAgIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSBhcmc7XG4gIH1cbn0pO1xuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICh0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgTnVtYmVySXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBuICsgJy4nKTtcbiAgfVxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICB2YXIgZG9FcnJvciA9ICh0eXBlID09PSAnZXJyb3InKTtcblxuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpXG4gICAgZG9FcnJvciA9IChkb0Vycm9yICYmIGV2ZW50cy5lcnJvciA9PT0gdW5kZWZpbmVkKTtcbiAgZWxzZSBpZiAoIWRvRXJyb3IpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKGRvRXJyb3IpIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMClcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLy8gTm90ZTogVGhlIGNvbW1lbnRzIG9uIHRoZSBgdGhyb3dgIGxpbmVzIGFyZSBpbnRlbnRpb25hbCwgdGhleSBzaG93XG4gICAgICAvLyB1cCBpbiBOb2RlJ3Mgb3V0cHV0IGlmIHRoaXMgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLlxuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgfVxuICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmhhbmRsZWQgZXJyb3IuJyArIChlciA/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/ZC5maXJzdFNhbHQ6Yi5zYWx0O2RbY109ZFtjXXx8c2pjbC5taXNjLnBia2RmMihhLGMsYi5pdGVyKTtyZXR1cm57a2V5OmRbY10uc2xpY2UoMCksc2FsdDpjLnNsaWNlKDApfX07XG5cInVuZGVmaW5lZFwiIT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1zamNsKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gc2pjbH0pO1xuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgV09SS0VSX0FDVElPTiB9IGZyb20gXCJ+L2VudW0vd29ya2VyLWFjdGlvbi50c1wiO1xuaW1wb3J0IHR5cGUgeyBMdWZpRmlsZSB9IGZyb20gXCJ+L2VudGl0aWVzL2x1ZmktZmlsZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJBY3Rpb25NZXNzYWdlIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1hY3Rpb24tbWVzc2FnZS50c1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJFdmVudCB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItZXZlbnQudHNcIjtcblxuZGVjbGFyZSBsZXQgc2VsZjogV29ya2VyO1xuXG5leHBvcnQgY29uc3QgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4vKipcbiAqIFVwZGF0ZSBmaWxlIGluIHdvcmtlcnMgYW5kIHByb3ZpZGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWFpbiB0aHJlYWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBhcmdzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsZSA9IChsdWZpRmlsZTogTHVmaUZpbGUsIGFyZ3M6IFBhcnRpYWw8THVmaUZpbGU+KSA9PiB7XG4gIE9iamVjdC5hc3NpZ24obHVmaUZpbGUsIGFyZ3MpO1xuXG4gIGlmICh0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGV2ZW50OiBFVkVOVC5GSUxFX1VQREFURUQsXG4gICAgICBsdWZpRmlsZSxcbiAgICB9IGFzIFdvcmtlckV2ZW50KTtcbiAgfVxuXG4gIHJldHVybiBsdWZpRmlsZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kRmlsZUVycm9yID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSwgZXJyb3I6IEVycm9yKSA9PiB7XG4gIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgdXBsb2FkU3RhdHVzOiBVUExPQURfU1RBVFVTLkZBSUxFRCB9KTtcblxuICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0gYXMgV29ya2VyRXZlbnQpO1xufTtcblxuLyoqXG4gKiBJbml0IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggY2hpbGQgd29ya2VyJ3Mgb25tZXNzYWdlIGV2ZW50LlxuICovXG5leHBvcnQgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRU5FRCwgKCkgPT4ge1xuICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgZXZlbnQ6IEVWRU5ULlNPQ0tFVF9PUEVORUQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGV2ZW50cy5vbmNlKEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1dvcmtlckFjdGlvbk1lc3NhZ2UgPSAoXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIG1lc3NhZ2U6IGFueSxcbik6IG1lc3NhZ2UgaXMgV29ya2VyQWN0aW9uTWVzc2FnZSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG1lc3NhZ2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICBtZXNzYWdlICE9PSBudWxsICYmXG4gICAgXCJhY3Rpb25cIiBpbiBtZXNzYWdlICYmXG4gICAgT2JqZWN0LnZhbHVlcyhXT1JLRVJfQUNUSU9OKS5pbmNsdWRlcyhtZXNzYWdlLmFjdGlvbilcbiAgKTtcbn07XG4iLCAiY29uc3QgZGVmYXVsdEVycm9yQ29uZmlnID0ge1xyXG4gICAgd2l0aFN0YWNrVHJhY2U6IGZhbHNlLFxyXG59O1xyXG4vLyBDdXN0b20gZXJyb3Igb2JqZWN0XHJcbi8vIENvbnRleHQgLyBkaXNjdXNzaW9uOiBodHRwczovL2dpdGh1Yi5jb20vc3VwZXJtYWNyby9uZXZlcnRocm93L3B1bGwvMjE1XHJcbmNvbnN0IGNyZWF0ZU5ldmVyVGhyb3dFcnJvciA9IChtZXNzYWdlLCByZXN1bHQsIGNvbmZpZyA9IGRlZmF1bHRFcnJvckNvbmZpZykgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHJlc3VsdC5pc09rKClcclxuICAgICAgICA/IHsgdHlwZTogJ09rJywgdmFsdWU6IHJlc3VsdC52YWx1ZSB9XHJcbiAgICAgICAgOiB7IHR5cGU6ICdFcnInLCB2YWx1ZTogcmVzdWx0LmVycm9yIH07XHJcbiAgICBjb25zdCBtYXliZVN0YWNrID0gY29uZmlnLndpdGhTdGFja1RyYWNlID8gbmV3IEVycm9yKCkuc3RhY2sgOiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICBzdGFjazogbWF5YmVTdGFjayxcclxuICAgIH07XHJcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuY2xhc3MgUmVzdWx0QXN5bmMge1xyXG4gICAgY29uc3RydWN0b3IocmVzKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IHJlcztcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tU2FmZVByb21pc2UocHJvbWlzZSkge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlLnRoZW4oKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21Qcm9taXNlKHByb21pc2UsIGVycm9yRm4pIHtcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gcHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gbmV3IEVycihlcnJvckZuKGUpKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuZXdQcm9taXNlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBzdGF0aWMgZnJvbVRocm93YWJsZShmbiwgZXJyb3JGbikge1xyXG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZm4oLi4uYXJncykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoZXJyb3JGbiA/IGVycm9yRm4oZXJyb3IpIDogZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSkoKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lKGFzeW5jUmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0QXN5bmNMaXN0KGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY29tYmluZVdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzKGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZihyZXMudmFsdWUpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgYW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3UmVzID0geWllbGQgZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAobmV3UmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKG5ld1Jlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRlZSBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSBlcnJvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgbWFwRXJyKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNPaygpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoeWllbGQgZihyZXMuZXJyb3IpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWUgaW5zdGFuY2VvZiBSZXN1bHRBc3luYyA/IG5ld1ZhbHVlLl9wcm9taXNlIDogbmV3VmFsdWU7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLm1hdGNoKG9rLCBfZXJyKSk7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMudW53cmFwT3IodCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gOS4wLjAuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiB1c2UgYHNhZmVUcnlgIHdpdGhvdXQgdGhpcyBtZXRob2QuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogc2FmZVRyeShhc3luYyBmdW5jdGlvbiogKCkge1xyXG4gICAgICogICBjb25zdCBva1ZhbHVlID0geWllbGQqIHlvdXJSZXN1bHRcclxuICAgICAqIH0pXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEVtdWxhdGVzIFJ1c3QncyBgP2Agb3BlcmF0b3IgaW4gYHNhZmVUcnlgJ3MgYm9keS4gU2VlIGFsc28gYHNhZmVUcnlgLlxyXG4gICAgICovXHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIHNhZmVVbndyYXBfMSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQoeWllbGQgX19hd2FpdCh5aWVsZCogX19hc3luY0RlbGVnYXRvcihfX2FzeW5jVmFsdWVzKHlpZWxkIF9fYXdhaXQodGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy5zYWZlVW53cmFwKCkpKSkpKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBNYWtlcyBSZXN1bHRBc3luYyBpbXBsZW1lbnQgUHJvbWlzZUxpa2U8UmVzdWx0PlxyXG4gICAgdGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBfYSgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIF9fYXdhaXQoZXJyQXN5bmMocmVzdWx0LmVycm9yKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBfX2F3YWl0KHJlc3VsdC52YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgb2tBc3luYyA9ICh2YWx1ZSkgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgT2sodmFsdWUpKSk7XHJcbmNvbnN0IGVyckFzeW5jID0gKGVycikgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgRXJyKGVycikpKTtcclxuY29uc3QgZnJvbVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZTtcclxuY29uc3QgZnJvbVNhZmVQcm9taXNlID0gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlO1xyXG5jb25zdCBmcm9tQXN5bmNUaHJvd2FibGUgPSBSZXN1bHRBc3luYy5mcm9tVGhyb3dhYmxlO1xuXG4vKipcclxuICogU2hvcnQgY2lyY3VpdHMgb24gdGhlIEZJUlNUIEVyciB2YWx1ZSB0aGF0IHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0ID0gKHJlc3VsdExpc3QpID0+IHtcclxuICAgIGxldCBhY2MgPSBvayhbXSk7XHJcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFjYy5tYXAoKGxpc3QpID0+IGxpc3QucHVzaChyZXN1bHQudmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjO1xyXG59O1xyXG4vKiBUaGlzIGlzIHRoZSB0eXBlc2FmZSB2ZXJzaW9uIG9mIFByb21pc2UuYWxsXHJcbiAqXHJcbiAqIFRha2VzIGEgbGlzdCBvZiBSZXN1bHRBc3luYzxULCBFPiBhbmQgc3VjY2VzcyBpZiBhbGwgaW5uZXIgcmVzdWx0cyBhcmUgT2sgdmFsdWVzXHJcbiAqIG9yIGZhaWxzIGlmIG9uZSAob3IgbW9yZSkgb2YgdGhlIGlubmVyIHJlc3VsdHMgYXJlIEVyciB2YWx1ZXNcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3QgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdCk7XHJcbi8qKlxyXG4gKiBHaXZlIGEgbGlzdCBvZiBhbGwgdGhlIGVycm9ycyB3ZSBmaW5kXHJcbiAqL1xyXG5jb25zdCBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjLmVycm9yLnB1c2gocmVzdWx0LmVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MgPSBlcnIoW3Jlc3VsdC5lcnJvcl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNPaygpICYmIGFjYy5pc09rKCkpIHtcclxuICAgICAgICAgICAgYWNjLnZhbHVlLnB1c2gocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzRXJyKClcclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzID0gKGFzeW5jUmVzdWx0TGlzdCkgPT4gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlKFByb21pc2UuYWxsKGFzeW5jUmVzdWx0TGlzdCkpLmFuZFRoZW4oY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcclxudmFyIFJlc3VsdDtcclxuKGZ1bmN0aW9uIChSZXN1bHQpIHtcclxuICAgIC8qKlxyXG4gICAgICogV3JhcHMgYSBmdW5jdGlvbiB3aXRoIGEgdHJ5IGNhdGNoLCBjcmVhdGluZyBhIG5ldyBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lXHJcbiAgICAgKiBhcmd1bWVudHMgYnV0IHJldHVybmluZyBgT2tgIGlmIHN1Y2Nlc3NmdWwsIGBFcnJgIGlmIHRoZSBmdW5jdGlvbiB0aHJvd3NcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm4gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIG9rIG9uIHN1Y2Nlc3Mgb3IgZXJyIG9uIGZhaWx1cmVcclxuICAgICAqIEBwYXJhbSBlcnJvckZuIHdoZW4gYW4gZXJyb3IgaXMgdGhyb3duLCB0aGlzIHdpbGwgd3JhcCB0aGUgZXJyb3IgcmVzdWx0IGlmIHByb3ZpZGVkXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBmdW5jdGlvbiBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbiguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvayhyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyKGVycm9yRm4gPyBlcnJvckZuKGUpIDogZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmZyb21UaHJvd2FibGUgPSBmcm9tVGhyb3dhYmxlO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZShyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0KHJlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmNvbWJpbmUgPSBjb21iaW5lO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZVdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZVdpdGhBbGxFcnJvcnMgPSBjb21iaW5lV2l0aEFsbEVycm9ycztcclxufSkoUmVzdWx0IHx8IChSZXN1bHQgPSB7fSkpO1xyXG5jb25zdCBvayA9ICh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKTtcclxuZnVuY3Rpb24gZXJyKGVycikge1xyXG4gICAgcmV0dXJuIG5ldyBFcnIoZXJyKTtcclxufVxyXG5mdW5jdGlvbiBzYWZlVHJ5KGJvZHkpIHtcclxuICAgIGNvbnN0IG4gPSBib2R5KCkubmV4dCgpO1xyXG4gICAgaWYgKG4gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuLnRoZW4oKHIpID0+IHIudmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuLnZhbHVlO1xyXG59XHJcbmNsYXNzIE9rIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlzRXJyKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pc09rKCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBvayhmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcEVycihfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKF92YWx1ZSkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGYodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIFRlZSBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoX2YpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY0FuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFzeW5jQW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSkubWFwKCgpID0+IHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNNYXAoZikge1xyXG4gICAgICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoZih0aGlzLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICB1bndyYXBPcihfdikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWF0Y2gob2ssIF9lcnIpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS15aWVsZCAqL1xyXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXBFcnIoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBFcnJgIG9uIGFuIE9rJywgdGhpcywgY29uZmlnKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcywgcmVxdWlyZS15aWVsZFxyXG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG59XHJcbmNsYXNzIEVyciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgIH1cclxuICAgIGlzT2soKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBlcnIoZih0aGlzLmVycm9yKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jQW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhyb3VnaChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jTWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgdW53cmFwT3Iodikge1xyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG4gICAgbWF0Y2goX29rLCBlcnIpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgc2FmZVVud3JhcCgpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB5aWVsZCBlcnIoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvIG5vdCB1c2UgdGhpcyBnZW5lcmF0b3Igb3V0IG9mIGBzYWZlVHJ5YCcpO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKGNvbmZpZykge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZU5ldmVyVGhyb3dFcnJvcignQ2FsbGVkIGBfdW5zYWZlVW53cmFwYCBvbiBhbiBFcnInLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihfKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3I7XHJcbiAgICB9XHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgeWllbGQgc2VsZjtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgIH1cclxufVxyXG5jb25zdCBmcm9tVGhyb3dhYmxlID0gUmVzdWx0LmZyb21UaHJvd2FibGU7XHJcbi8vI2VuZHJlZ2lvblxuXG5leHBvcnQgeyBFcnIsIE9rLCBSZXN1bHQsIFJlc3VsdEFzeW5jLCBlcnIsIGVyckFzeW5jLCBmcm9tQXN5bmNUaHJvd2FibGUsIGZyb21Qcm9taXNlLCBmcm9tU2FmZVByb21pc2UsIGZyb21UaHJvd2FibGUsIG9rLCBva0FzeW5jLCBzYWZlVHJ5IH07XG4iLCAidHlwZSBKc29uYWJsZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IG51bGxcbiAgfCB1bmRlZmluZWRcbiAgfCByZWFkb25seSBKc29uYWJsZVtdXG4gIHwgeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBKc29uYWJsZSB9XG4gIHwgeyB0b0pTT04oKTogSnNvbmFibGUgfTtcblxuZXhwb3J0IGNsYXNzIEJhc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ/OiBKc29uYWJsZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgY2F1c2U/OiBFcnJvcjsgY29udGV4dD86IEpzb25hYmxlIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgeyBjYXVzZSwgY29udGV4dCB9ID0gb3B0aW9ucztcblxuICAgIHN1cGVyKG1lc3NhZ2UsIHsgY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgV2ViU29ja2V0RXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBXZWJTb2NrZXRFcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2UgPSBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0XCI7XG59XG4iLCAiaW1wb3J0IHsgZXJyQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Nvbm5lY3Rpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivc2VydmVyLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckNvbmZpZyB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItY29uZmlnLnRzXCI7XG5cbi8qKlxuICogRW5zdXJlIGFuIGVycm9yIG1lc3NhZ2UgaXMgdHJhbnNmb3JtZWQgaW4gYW4gRXJyb3Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5zdXJlRXJyb3IgPSAodmFsdWU6IHVua25vd24pOiBFcnJvciA9PiB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gdmFsdWU7XG5cbiAgbGV0IHN0cmluZ2lmaWVkID0gXCJbVW5hYmxlIHRvIHN0cmluZ2lmeSB0aGUgdGhyb3duIHZhbHVlXVwiO1xuICB0cnkge1xuICAgIHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAvKiBlbXB0eSAqL1xuICB9XG5cbiAgcmV0dXJuIG5ldyBFcnJvcihzdHJpbmdpZmllZCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIEx1ZmkncyBjb25maWcgZnJvbSBpdHMgQVBJXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVXJsXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZmV0Y2hTZXJ2ZXJDb25maWcgPSAoXG4gIGluc3RhbmNlVXJsOiBVUkwsXG4pOiBSZXN1bHRBc3luYzxTZXJ2ZXJDb25maWcsIEVycm9yPiA9PiB7XG4gIGNvbnN0IG9yaWdpbk1hdGNoZXMgPSBpbnN0YW5jZVVybC5ocmVmLm1hdGNoKFxuICAgIC8oLio/KVxcLz8oPzpcXC9bZHJdezF9XFwvfGxvZ2luXFwvP3xmaWxlc1xcLz8pLyxcbiAgKTtcblxuICBjb25zdCB1cmxPcmlnaW4gPSBvcmlnaW5NYXRjaGVzICYmIG9yaWdpbk1hdGNoZXNbMV1cbiAgICA/IG9yaWdpbk1hdGNoZXNbMV1cbiAgICA6IGluc3RhbmNlVXJsLm9yaWdpbjtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgZmV0Y2godXJsT3JpZ2luICsgXCIvYWJvdXQvY29uZmlnXCIpLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDb25uZWN0aW9uRXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgKS5hbmRUaGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICByZXNwb25zZS5qc29uKCksXG4gICAgICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgICBuZXcgU2VydmVyRXJyb3IodW5kZWZpbmVkLCB7IGNvbnRleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQgfSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEZW5vUnVudGltZSA9ICgpOiBib29sZWFuID0+IHR5cGVvZiBEZW5vICE9PSBcInVuZGVmaW5lZFwiO1xuXG5leHBvcnQgY29uc3QgaXNTZWN1cmVDb250ZXh0ID0gKCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpIHx8IGdsb2JhbFRoaXMuaXNTZWN1cmVDb250ZXh0IHx8XG4gICAgZ2xvYmFsVGhpcy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJodHRwczpcIjtcbn07XG5cbmV4cG9ydCBjb25zdCB3b3JrZXJVcmwgPSAocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBVUkwgPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpXG4gICAgPyBuZXcgVVJMKGAuL3dvcmtlci8ke3JlbGF0aXZlUGF0aH0udHNgLCBuZXcgVVJMKFwiLlwiLCBpbXBvcnQubWV0YS51cmwpLmhyZWYpXG4gICAgOiBuZXcgVVJMKFxuICAgICAgaW1wb3J0Lm1ldGEucmVzb2x2ZShcbiAgICAgICAgYC4vJHtcbiAgICAgICAgICByZWxhdGl2ZVBhdGggIT09IFwiZW5jcnlwdFwiID8gYHdvcmtlci8ke3JlbGF0aXZlUGF0aH1gIDogcmVsYXRpdmVQYXRoXG4gICAgICAgIH0uanNgLFxuICAgICAgKSxcbiAgICApO1xufTtcbiIsIG51bGwsIG51bGwsIG51bGwsICJpbXBvcnQge1xuICBEZWNvZGUgYXMgYjY0ZGVjb2RlLFxuICBFbmNvZGUgYXMgYjY0ZW5jb2RlLFxufSBmcm9tIFwiYXJyYXlidWZmZXItZW5jb2RpbmcvYmFzZTY0XCI7XG5pbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHNqY2wgZnJvbSBcImx1Zmktc2pjbFwiO1xuaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9jcnlwdG8tZXJyb3IudHNcIjtcbmltcG9ydCB7IERlY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9kZWNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBIYXNoaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50c1wiO1xuXG4vKipcbiAqIERlY3J5cHQgYW4gRW5jcnlwdGVkRGF0YSBvciBhIHN0cmluZyB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb24uXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGVuY3J5cHRlZERhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgZW5jcnlwdGVkRGF0YTogRW5jcnlwdGVkRGF0YSB8IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPEFycmF5QnVmZmVyLCBEZWNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gdHlwZW9mIGVuY3J5cHRlZERhdGEgPT09IFwic3RyaW5nXCJcbiAgICAgID8gZW5jcnlwdGVkRGF0YVxuICAgICAgOiAoZW5jcnlwdGVkRGF0YS5kYXRhKTtcblxuICAgIHJldHVybiBva0FzeW5jKGI2NGRlY29kZShzamNsLmRlY3J5cHQoa2V5LCBkYXRhKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBEZWNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFbmNyeXB0IGFuIEFycmF5QnVmZmVyIGludG8gYW4gRW5jcnlwdGVkRGF0YSB1c2luZyB0aGUgcHJvdmlkZWQga2V5XG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbik6IFJlc3VsdEFzeW5jPEVuY3J5cHRlZERhdGEsIEVuY3J5cHRpb25FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGVuY3J5cHRlZCA9IHNqY2wuZW5jcnlwdChrZXksIGI2NGVuY29kZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIG9rQXN5bmMoe1xuICAgICAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLlNqY2wsXG4gICAgICBkYXRhOiBlbmNyeXB0ZWQsXG4gICAgICBpdjogSlNPTi5wYXJzZShlbmNyeXB0ZWQgYXMgdW5rbm93biBhcyBzdHJpbmcpLml2LFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBFbmNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmRvbSBzdHJpbmcgdXNpbmcgU2pjbCBBUElcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVLZXkgPSAoKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBDcnlwdG9FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBva0FzeW5jKHNqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKHNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDgsIDEwKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBnZW5lcmF0ZSBrZXlcIiwge1xuICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBIYXNoIGEgcGFzc3dvcmQgdXNpbmcgU2pjbCBBUElcbiAqXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNoUGFzc3dvcmQgPSAoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIEhhc2hpbmdFcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBva0FzeW5jKHNqY2wuY29kZWMuaGV4LmZyb21CaXRzKHNqY2wuaGFzaC5zaGE1MTIuaGFzaChwYXNzd29yZCkpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyQXN5bmMobmV3IEhhc2hpbmdFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSk7XG4gIH1cbn07XG5cbi8qKlxuICogRGV0ZWN0IGlmIHRoZSBrZXkgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IFNqY2wuIFNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5nIGFuIGVxdWFsIHN5bWJvbCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgV2ViQ3J5cHRvIEFQSSAoYnkgdXNpbmcgYmFzZTY0dXJsKSwgaXQncyBlYXN5IHRvIGRldGVjdFxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NqY2xLZXkgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGtleVtrZXkubGVuZ3RoIC0gMV0gPT09IFwiPVwiO1xufTtcbiIsICJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwifi9lcnJvci9iYXNlLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBDcnlwdG9FcnJvciBleHRlbmRzIEJhc2VFcnJvciB7fVxuIiwgImltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgRGVjcnlwdGlvbkVycm9yIGV4dGVuZHMgQ3J5cHRvRXJyb3Ige1xuICBvdmVycmlkZSBtZXNzYWdlOiBzdHJpbmcgPSBcIlVuYWJsZSB0byBkZWNyeXB0IHRoZSBwcm92aWRlZCBkYXRhXCI7XG59XG4iLCAiaW1wb3J0IHtcbiAgRGVjb2RlIGFzIGI2NHVybGRlY29kZSxcbiAgRW5jb2RlIGFzIGI2NHVybGVuY29kZSxcbn0gZnJvbSBcImFycmF5YnVmZmVyLWVuY29kaW5nL2Jhc2U2NC91cmxcIjtcbmltcG9ydCB7IHR5cGUgRW5jcnlwdGVkRGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9lbmNyeXB0ZWQtZGF0YS50c1wiO1xuaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBEZWNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgZW5zdXJlRXJyb3IgfSBmcm9tIFwifi91dGlscy50c1wiO1xuaW1wb3J0IHsgRW5jcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2VuY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHsgSGFzaGluZ0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2hhc2hpbmctZXJyb3IudHNcIjtcblxuLyoqXG4gKiBEZWNyeXB0IGFuIGVuY3J5cHRlZERhdGEgdXNpbmcgdGhlIGtleSB1c2VkIGZvciBlbmNyeXB0aW9uXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGVuY3J5cHRlZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICBlbmNyeXB0ZWQ6IEVuY3J5cHRlZERhdGEsXG4pOiBSZXN1bHRBc3luYzxBcnJheUJ1ZmZlciwgRGVjcnlwdGlvbkVycm9yPiA9PiB7XG4gIHJldHVybiBpbXBvcnRLZXkoa2V5KS5hbmRUaGVuKChpbXBvcnRlZEtleSkgPT5cbiAgICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgIGNyeXB0by5zdWJ0bGUuZGVjcnlwdChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQUVTLUdDTVwiLFxuICAgICAgICAgIGl2OiBlbmNyeXB0ZWQuaXYgYXMgVWludDhBcnJheSxcbiAgICAgICAgfSxcbiAgICAgICAgaW1wb3J0ZWRLZXksXG4gICAgICAgIGVuY3J5cHRlZC5kYXRhIGFzIEFycmF5QnVmZmVyLFxuICAgICAgKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IERlY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApXG4gICk7XG59O1xuXG4vKipcbiAqIEVuY3J5cHQgYW4gQXJyYXlCdWZmZXIgaW50byBhbiBFbmNyeXB0ZWREYXRhIHVzaW5nIHRoZSBwcm92aWRlZCBrZXlcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogQXJyYXlCdWZmZXIsXG4pOiBSZXN1bHRBc3luYzxFbmNyeXB0ZWREYXRhLCBFbmNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgcmV0dXJuIGltcG9ydEtleShrZXkpLmFuZFRoZW4oKGltcG9ydGVkS2V5KSA9PiB7XG4gICAgY29uc3QgaXYgPSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEyKSk7XG4gICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgY3J5cHRvLnN1YnRsZS5lbmNyeXB0KFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICAgICAgaXYsXG4gICAgICAgIH0sXG4gICAgICAgIGltcG9ydGVkS2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICksXG4gICAgICAoZXJyb3IpID0+XG4gICAgICAgIG5ldyBFbmNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgICAgfSksXG4gICAgKS5hbmRUaGVuKChlbmNyeXB0ZWQpID0+IHtcbiAgICAgIHJldHVybiBva0FzeW5jKHtcbiAgICAgICAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLldlYkNyeXB0byxcbiAgICAgICAgZGF0YTogZW5jcnlwdGVkLFxuICAgICAgICBpdixcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbi8qKlxuICogVHJhbnNmb3JtIGEgc3RyaW5nIGludG8gYSBDcnlwdG9LZXksIHVzYWJsZSBpbiBXZWIgQ3J5cHRvIEFQSVxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpbXBvcnRLZXkgPSAoa2V5OiBzdHJpbmcpOiBSZXN1bHRBc3luYzxDcnlwdG9LZXksIENyeXB0b0Vycm9yPiA9PiB7XG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBjcnlwdG8uc3VidGxlLmltcG9ydEtleShcbiAgICAgIFwicmF3XCIsXG4gICAgICBiNjR1cmxkZWNvZGUoa2V5KSxcbiAgICAgIHsgbmFtZTogXCJBRVMtR0NNXCIgfSxcbiAgICAgIGZhbHNlLFxuICAgICAgW1xuICAgICAgICBcImVuY3J5cHRcIixcbiAgICAgICAgXCJkZWNyeXB0XCIsXG4gICAgICBdLFxuICAgICksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGltcG9ydCBjcnlwdG9ncmFwaHkga2V5XCIsIHtcbiAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgIH0pLFxuICApO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmRvbSBzdHJpbmcgdXNpbmcgV2ViIENyeXB0byBBUEkuXG4gKlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlS2V5ID0gKCk6IFJlc3VsdEFzeW5jPHN0cmluZywgQ3J5cHRvRXJyb3I+ID0+IHtcbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAgICBjcnlwdG8uc3VidGxlXG4gICAgICAgIC5nZW5lcmF0ZUtleShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgICAgICAgIGxlbmd0aDogMjU2LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiXSxcbiAgICAgICAgKVxuICAgICAgICAudGhlbigoZ2VuZXJhdGVkS2V5KSA9PlxuICAgICAgICAgIGNyeXB0by5zdWJ0bGVcbiAgICAgICAgICAgIC5leHBvcnRLZXkoXCJyYXdcIiwgZ2VuZXJhdGVkS2V5KVxuICAgICAgICAgICAgLnRoZW4oKGtleSkgPT4gcmVzb2x2ZShiNjR1cmxlbmNvZGUoa2V5KSkpXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICBuZXcgQ3J5cHRvRXJyb3IoXCJVbmFibGUgdG8gYmFzZTY0IGVuY29kZSB0aGUgdXJsXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHJlamVjdChlcnJvcikpXG4gICAgKSxcbiAgICAoZXJyb3IpID0+XG4gICAgICBuZXcgQ3J5cHRvRXJyb3IoXCJVbmFibGUgdG8gZ2VuZXJhdGUga2V5XCIsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgKTtcbn07XG5cbi8qKlxuICogSGFzaCBhIHBhc3N3b3JkIHVzaW5nIFdlYkNyeXB0byBBUElcbiAqXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNoUGFzc3dvcmQgPSAoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIEhhc2hpbmdFcnJvcj4gPT4ge1xuICBjb25zdCBwcm9taXNlID0gYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgbmV3IFVpbnQ4QXJyYXkoXG4gICAgICAgIGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KFxuICAgICAgICAgIFwiU0hBLTUxMlwiLFxuICAgICAgICAgIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShwYXNzd29yZCksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICkubWFwKChiKSA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIikpLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIHByb21pc2UoKSxcbiAgICAoZXJyb3IpID0+IG5ldyBIYXNoaW5nRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICk7XG59O1xuIiwgImltcG9ydCB7IENyeXB0b0FsZ29yaXRobSB9IGZyb20gXCJ+L2VudW0vY3J5cHRvLWFsZ29yaXRobS50c1wiO1xuaW1wb3J0IHsgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHR5cGUgeyBDcnlwdG9FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9jcnlwdG8tZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgRGVjcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2RlY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgRW5jcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2VuY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IHR5cGUgRW5jcnlwdGVkRGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9lbmNyeXB0ZWQtZGF0YS50c1wiO1xuaW1wb3J0ICogYXMgc2pjbCBmcm9tIFwifi9hcGkvY3J5cHRvL3NqY2wudHNcIjtcbmltcG9ydCAqIGFzIHdlYiBmcm9tIFwifi9hcGkvY3J5cHRvL3dlYi50c1wiO1xuaW1wb3J0IHR5cGUgeyBIYXNoaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50c1wiO1xuXG4vKipcbiAqIERlY3J5cHQgYW4gRW5jcnlwdGVkRGF0YSBvYmplY3QgdXNpbmcgdGhlIGtleSB1c2VkIGZvciBlbmNyeXB0aW9uXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZGVjcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBFbmNyeXB0ZWREYXRhLFxuKTogUmVzdWx0QXN5bmM8QXJyYXlCdWZmZXIsIERlY3J5cHRpb25FcnJvcj4gPT5cbiAgdmFsdWUuYWxnbyA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsXG4gICAgPyBzamNsLmRlY3J5cHQoa2V5LCB2YWx1ZSlcbiAgICA6IHdlYi5kZWNyeXB0KGtleSwgdmFsdWUpO1xuXG4vKipcbiAqIEVuY3J5cHQgYW4gQXJyYXlCdWZmZXIgdXNpbmcgdGhlIHByb3ZpZGVkIGtleSBhbmQgYWxnb3JpdGhtXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcGFyYW0gYWxnb1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogQXJyYXlCdWZmZXIsXG4gIGFsZ286IENyeXB0b0FsZ29yaXRobSxcbik6IFJlc3VsdEFzeW5jPEVuY3J5cHRlZERhdGEsIEVuY3J5cHRpb25FcnJvcj4gPT5cbiAgKGFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsKVxuICAgID8gc2pjbC5lbmNyeXB0KGtleSwgdmFsdWUpXG4gICAgOiB3ZWIuZW5jcnlwdChrZXksIHZhbHVlKTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG5ldyBrZXkgZm9yIGVuY3J5cHRpb24vZGVjcnlwdGlvblxuICpcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVLZXkgPSAoXG4gIGFsZ28gPSBDcnlwdG9BbGdvcml0aG0uV2ViQ3J5cHRvLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBDcnlwdG9FcnJvcj4gPT5cbiAgYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2wgPyBzamNsLmdlbmVyYXRlS2V5KCkgOiB3ZWIuZ2VuZXJhdGVLZXkoKTtcblxuLyoqXG4gKiBIYXNoIGEgcGFzc3dvcmQgdXNpbmcgdGhlIHByb3ZpZGVkIGFsZ29yaXRobVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNoUGFzc3dvcmQgPSAoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4gIGFsZ286IENyeXB0b0FsZ29yaXRobSxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PlxuICBhbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbFxuICAgID8gc2pjbC5oYXNoUGFzc3dvcmQocGFzc3dvcmQpXG4gICAgOiB3ZWIuaGFzaFBhc3N3b3JkKHBhc3N3b3JkKTtcbiIsICJpbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgTHVmaUZpbGUgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWZpbGUudHNcIjtcbmltcG9ydCB7IEVWRU5UIH0gZnJvbSBcIn4vZW51bS9ldmVudC50c1wiO1xuaW1wb3J0IHsgVVBMT0FEX1NUQVRVUyB9IGZyb20gXCJ+L2VudW0vZmlsZS1zdGF0dXMudHNcIjtcbmltcG9ydCB7IFNvY2tldFBhdGggfSBmcm9tIFwifi9lbnVtL3NvY2tldC1wYXRoLnRzXCI7XG5pbXBvcnQgeyBVcGxvYWRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3VwbG9hZC91cGxvYWQtZXJyb3IudHNcIjtcbmltcG9ydCB7IFdlYlNvY2tldENvbm5lY3Rpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtY29ubmVjdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgV2ViU29ja2V0RXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IENsaWVudFVwbG9hZENodW5rTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvY2xpZW50LXVwbG9hZC1jaHVuay1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckNhbmNlbE1ldGFkYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1jYW5jZWwtbWV0YWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItZG93bmxvYWQtY2h1bmstc3VjY2Vzcy1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJVcGxvYWRDaHVua01ldGFkYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci11cGxvYWQtY2h1bmstbWV0YWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhIH0gZnJvbSBcIn4vdHlwZS9zZXJ2ZXItZG93bmxvYWQtY2h1bmstbWV0YWRhdGEudHNcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IGV2ZW50cywgdXBkYXRlRmlsZSB9IGZyb20gXCJ+L3dvcmtlci9zaGFyZWQudHNcIjtcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwifi9hcGkvY3J5cHRvLnRzXCI7XG5pbXBvcnQge1xuICBEZWNvZGUgYXMgYjY0ZGVjb2RlLFxuICBFbmNvZGUgYXMgYjY0ZW5jb2RlLFxufSBmcm9tIFwiYXJyYXlidWZmZXItZW5jb2RpbmcvYmFzZTY0XCI7XG5cbmV4cG9ydCBjb25zdCBzb2NrZXRzOiB7XG4gIFtrZXk6IHN0cmluZ106IFdlYlNvY2tldDtcbn0gPSB7fTtcblxuY29uc3QgTUFYX0VSUk9SUyA9IDU7XG5cbi8qKlxuICogSGFuZGxlIFdlYlNvY2tldCByZXNwb25zZSBmb3IgY2FuY2VsIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgb25DYW5jZWxNZXNzYWdlID0gKFxuICBkYXRhOiBTZXJ2ZXJDYW5jZWxNZXRhZGF0YSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIEVycm9yPiA9PiB7XG4gIGV2ZW50cy5lbWl0KEVWRU5ULlVQTE9BRF9DQU5DRUxMRUQsIGRhdGEuc3VjY2Vzcyk7XG5cbiAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogSGFuZGxlIFdlYlNvY2tldCByZXNwb25zZSBmb3IgZG93bmxvYWQgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSByZXNwb25zZVxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvbkRvd25sb2FkTWVzc2FnZSA9IChcbiAgcmVzcG9uc2U6IHN0cmluZyxcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2Uuc3BsaXQoXCJYWE1PSk9YWFwiKTtcbiAgY29uc3QgbWV0YWRhdGFTdHJpbmcgPSByZXN1bHQuc2hpZnQoKTtcblxuICBpZiAobWV0YWRhdGFTdHJpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gSlNPTi5wYXJzZShtZXRhZGF0YVN0cmluZykgYXMgU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhO1xuXG4gICAgaWYgKGlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YShtZXRhZGF0YSkpIHtcbiAgICAgIGNvbnN0IGRhdGFTdHJpbmcgPSByZXN1bHQuc2hpZnQoKTtcblxuICAgICAgaWYgKGRhdGFTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZW5jcnlwdGVkRGF0YTogRW5jcnlwdGVkRGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cmluZyk7XG5cbiAgICAgICAgLy8gSWYgZmlsZSB3YXMgdXBsb2FkZWQgdXNpbmcgTHVmaSBBUElcbiAgICAgICAgaWYgKGVuY3J5cHRlZERhdGEuaXYpIHtcbiAgICAgICAgICBlbmNyeXB0ZWREYXRhLml2ID0gbmV3IFVpbnQ4QXJyYXkoT2JqZWN0LnZhbHVlcyhlbmNyeXB0ZWREYXRhLml2KSk7XG4gICAgICAgICAgZW5jcnlwdGVkRGF0YS5kYXRhID0gYjY0ZGVjb2RlKGVuY3J5cHRlZERhdGEuZGF0YSBhcyBzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyeXB0by5kZWNyeXB0KGx1ZmlGaWxlLmtleXMuY2xpZW50LCBlbmNyeXB0ZWREYXRhKS5hbmRUaGVuKFxuICAgICAgICAgIChkZWNyeXB0ZWRQYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSB0eXBlb2YgZGVjcnlwdGVkUGFydCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICA/IChuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZGVjcnlwdGVkUGFydCkuYnVmZmVyIGFzIEFycmF5QnVmZmVyKVxuICAgICAgICAgICAgICA6IGRlY3J5cHRlZFBhcnQ7XG5cbiAgICAgICAgICAgIC8vIElmIGZpcnN0IGNodW5rXG4gICAgICAgICAgICBpZiAobWV0YWRhdGEucGFydCA9PT0gMCkge1xuICAgICAgICAgICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7XG4gICAgICAgICAgICAgICAgY2h1bmtzUmVhZHk6IGx1ZmlGaWxlLmNodW5rc1JlYWR5ICsgMSxcbiAgICAgICAgICAgICAgICBkZWxBdEZpcnN0VmlldzogbWV0YWRhdGEuZGVsX2F0X2ZpcnN0X3ZpZXcsXG4gICAgICAgICAgICAgICAgZGVsYXk6IG1ldGFkYXRhLmRlbGF5LFxuICAgICAgICAgICAgICAgIG5hbWU6IG1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgc2l6ZTogbWV0YWRhdGEuc2l6ZSxcbiAgICAgICAgICAgICAgICB0b3RhbENodW5rczogbWV0YWRhdGEudG90YWwsXG4gICAgICAgICAgICAgICAgdHlwZTogbWV0YWRhdGEudHlwZSxcbiAgICAgICAgICAgICAgICB6aXBwZWQ6IG1ldGFkYXRhLnppcHBlZCxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuRE9XTkxPQURfU1RBUlRFRCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7IGNodW5rc1JlYWR5OiBsdWZpRmlsZS5jaHVua3NSZWFkeSArIDEgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULkNIVU5LX0RPV05MT0FERUQsIGJ1ZmZlciwgbWV0YWRhdGEucGFydCk7XG5cbiAgICAgICAgICAgIGlmIChsdWZpRmlsZS5jaHVua3NSZWFkeSA9PT0gbWV0YWRhdGEudG90YWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVuZERvd25sb2FkKGx1ZmlGaWxlKS5hbmRUaGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5ET1dOTE9BRF9DT01QTEVURSk7XG4gICAgICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuU09DS0VUX09QRVJBVElPTl9URVJNSU5BVEVEKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCByZXRyaWV2ZSBtZXRhZGF0YSBmcm9tIGRhdGEgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlclwiLFxuICAgICAgICApO1xuXG4gICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IobWV0YWRhdGEubXNnKTtcblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IoXG4gICAgICBcIkNhbm5vdCByZXRyaWV2ZSBtZXRhZGF0YSBmcm9tIGRhdGEgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlclwiLFxuICAgICk7XG5cbiAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG4gICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgfVxufTtcblxuLyoqXG4gKiBIYW5kbGUgV2ViU29ja2V0IHJlc3BvbnNlIGZvciB1cGxvYWQgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSByZXNwb25zZVxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvblVwbG9hZE1lc3NhZ2UgPSAoXG4gIHJlc3BvbnNlOiBTZXJ2ZXJVcGxvYWRDaHVua01ldGFkYXRhLFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBVcGxvYWRFcnJvcj4gPT4ge1xuICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgIC8vIElmIGZpcnN0IGNodW5rXG4gICAgaWYgKHJlc3BvbnNlLmogPT09IDApIHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbyhgVXBsb2FkIG9mICR7bHVmaUZpbGUua2V5cy5jbGllbnR9IHN0YXJ0ZWRgKTtcblxuICAgICAgdXBkYXRlRmlsZShsdWZpRmlsZSwge1xuICAgICAgICBrZXlzOiB7IGNsaWVudDogbHVmaUZpbGUua2V5cy5jbGllbnQsIHNlcnZlcjogcmVzcG9uc2Uuc2hvcnQgfSxcbiAgICAgICAgYWN0aW9uVG9rZW46IHJlc3BvbnNlLnRva2VuLFxuICAgICAgICBxdWV1ZUluZGV4OiByZXNwb25zZS5pLFxuICAgICAgfSk7XG5cbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlVQTE9BRF9TVEFSVEVEKTtcbiAgICB9XG5cbiAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7XG4gICAgICBjaHVua3NSZWFkeTogbHVmaUZpbGUuY2h1bmtzUmVhZHkgKyAxLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkX2F0LFxuICAgIH0pO1xuXG4gICAgZXZlbnRzLmVtaXQoRVZFTlQuQ0hVTktfVVBMT0FERUQpO1xuXG4gICAgaWYgKGx1ZmlGaWxlLmNodW5rc1JlYWR5ID09PSBsdWZpRmlsZS50b3RhbENodW5rcykge1xuICAgICAgdXBkYXRlRmlsZShsdWZpRmlsZSwgeyB1cGxvYWRTdGF0dXM6IFVQTE9BRF9TVEFUVVMuQ09NUExFVEUgfSk7XG5cbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlVQTE9BRF9DT01QTEVURSk7XG4gICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFUkFUSU9OX1RFUk1JTkFURUQpO1xuICAgIH1cblxuICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IocmVzcG9uc2UubXNnKTtcbiAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG5cbiAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICB9XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbiBzb2NrZXRzIFwib25tZXNzYWdlXCIgZXZlbnRcbiAqXG4gKiBAcGFyYW0gZVxuICogQHBhcmFtIHNvY2tldFVybFxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgb25NZXNzYWdlID0gKFxuICBlOiBNZXNzYWdlRXZlbnQsXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFVwbG9hZEVycm9yPiA9PiB7XG4gIGNvbnN0IGRhdGEgPSB0cnlQYXJzZUpzb24oZS5kYXRhKTtcbiAgbGV0IGNhbGxiYWNrO1xuXG4gIGlmIChkYXRhKSB7XG4gICAgaWYgKCFkYXRhLmFjdGlvbiAmJiBkYXRhLm1zZykge1xuICAgICAgLy8gSWYgZXJyb3JcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKGRhdGEubXNnKTtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcblxuICAgICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFwiZGVsYXlcIiBpbiBkYXRhKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25VcGxvYWRNZXNzYWdlKGRhdGEsIGx1ZmlGaWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25DYW5jZWxNZXNzYWdlKGRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjayA9IG9uRG93bmxvYWRNZXNzYWdlKGUuZGF0YSwgbHVmaUZpbGUpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGxiYWNrO1xufTtcblxuLyoqXG4gKiBJcyBzb2NrZXQgY29ubmVjdGluZz9cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNDb25uZWN0aW5nID0gKHNvY2tldEtleTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBzb2NrZXRzICE9PSB1bmRlZmluZWQgJiZcbiAgc29ja2V0c1tzb2NrZXRLZXldICE9PSB1bmRlZmluZWQgJiZcbiAgc29ja2V0c1tzb2NrZXRLZXldLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HO1xuXG4vKipcbiAqIElzIHNvY2tldCBzcGF3bmVkP1xuICpcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NwYXduZWQgPSAoc29ja2V0S2V5OiBzdHJpbmcpOiBib29sZWFuID0+XG4gIHNvY2tldHMgIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0gIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU47XG5cbi8qKlxuICogQXNrIFdlYlNvY2tldCB0byBjYW5jZWwgYW4gdXBsb2FkXG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgY2FuY2VsVXBsb2FkID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICByZXR1cm4gc2VuZE1lc3NhZ2UoXG4gICAgdXBsb2FkU29ja2V0VXJsKGx1ZmlGaWxlKSxcbiAgICBsdWZpRmlsZSxcbiAgICBgJHtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgaWQ6IGx1ZmlGaWxlLmtleXMuc2VydmVyLFxuICAgICAgICBtb2RfdG9rZW46IGx1ZmlGaWxlLmFjdGlvblRva2VuLFxuICAgICAgICBjYW5jZWw6IHRydWUsXG4gICAgICAgIGk6IGx1ZmlGaWxlLnF1ZXVlSW5kZXgsXG4gICAgICB9KVxuICAgIH1YWE1PSk9YWHVzZWxlc3NgLFxuICApO1xufTtcblxuLyoqXG4gKiBEb3dubG9hZCBhIHBhcnQgb2YgdGhlIGZpbGUgdGhyb3VnaCB0aGUgV2ViU29ja2V0XG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcGFyYW0gY2h1bmtOdW1iZXJcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZENodW5rID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4gIGNodW5rTnVtYmVyOiBudW1iZXIsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBsZXQgbWVzc2FnZTtcblxuICBpZiAobHVmaUZpbGUucGFzc3dvcmQpIHtcbiAgICBtZXNzYWdlID0geyBwYXJ0OiBjaHVua051bWJlciwgZmlsZV9wd2Q6IGx1ZmlGaWxlLnBhc3N3b3JkIH07XG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZSA9IHsgcGFydDogY2h1bmtOdW1iZXIgfTtcbiAgfVxuXG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICBkb3dubG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksXG4gICk7XG59O1xuXG4vKipcbiAqIFRlbGwgdGhlIFdlYlNvY2tldCB0aGUgZG93bmxvYWQgZW5kZWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmREb3dubG9hZCA9IChcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgbGV0IG1lc3NhZ2U6IHsgZW5kZWQ6IHRydWU7IGZpbGVfcHdkPzogc3RyaW5nIH07XG5cbiAgaWYgKGx1ZmlGaWxlLnBhc3N3b3JkKSB7XG4gICAgbWVzc2FnZSA9IHsgZW5kZWQ6IHRydWUsIGZpbGVfcHdkOiBsdWZpRmlsZS5wYXNzd29yZCB9O1xuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgPSB7IGVuZGVkOiB0cnVlIH07XG4gIH1cblxuICByZXR1cm4gc2VuZE1lc3NhZ2UoXG4gICAgZG93bmxvYWRTb2NrZXRVcmwobHVmaUZpbGUpLFxuICAgIGx1ZmlGaWxlLFxuICAgIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLFxuICApO1xufTtcblxuLyoqXG4gKiBVcGxvYWQgYSBjaHVuayBvZiB0aGUgZmlsZSB0aHJvdWdoIHRoZSBXZWJTb2NrZXRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBtZXRhZGF0YVxuICogQHBhcmFtIGVuY3J5cHRlZERhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGxvYWRDaHVuayA9IChcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuICBtZXRhZGF0YTogQ2xpZW50VXBsb2FkQ2h1bmtNZXRhZGF0YSxcbiAgZW5jcnlwdGVkRGF0YTogRW5jcnlwdGVkRGF0YSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGVuY3J5cHRlZERhdGEuZGF0YSA9IGI2NGVuY29kZShlbmNyeXB0ZWREYXRhLmRhdGEgYXMgQXJyYXlCdWZmZXIpO1xuXG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICB1cGxvYWRTb2NrZXRVcmwobHVmaUZpbGUpLFxuICAgIGx1ZmlGaWxlLFxuICAgIGAke0pTT04uc3RyaW5naWZ5KG1ldGFkYXRhKX1YWE1PSk9YWCR7SlNPTi5zdHJpbmdpZnkoZW5jcnlwdGVkRGF0YSl9YCxcbiAgKTtcbn07XG5cbi8qKlxuICogU2VuZCBhIG1lc3NhZ2UgdG8gdGhlIFdlYlNvY2tldFxuICpcbiAqIEBwYXJhbSBzb2NrZXRVcmxcbiAqIEBwYXJhbSBtZXNzYWdlXG4gKiBAcGFyYW0gaGFzUHJpb3JpdHlcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IHNlbmRNZXNzYWdlID0gKFxuICBzb2NrZXRVcmw6IHN0cmluZyxcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBpZiAoIWlzU3Bhd25lZChzb2NrZXRVcmwpKSB7XG4gICAgcmV0dXJuIHNwYXduKHNvY2tldFVybCkuYW5kVGhlbigoKSA9PiB7XG4gICAgICBzb2NrZXRzW3NvY2tldFVybF0ub25tZXNzYWdlID0gKGUpID0+IG9uTWVzc2FnZShlLCBsdWZpRmlsZSk7XG4gICAgICByZXR1cm4gc2VuZE1lc3NhZ2Uoc29ja2V0VXJsLCBsdWZpRmlsZSwgbWVzc2FnZSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc29ja2V0c1tzb2NrZXRVcmxdLnNlbmQobWVzc2FnZSk7XG5cbiAgICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xuICB9XG59O1xuXG4vKipcbiAqIFNwYXduIGEgbmV3IFdlYlNvY2tldCBvciByZXVzZSBhbiBleGlzdGluZyBvbmUuXG4gKlxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHBhcmFtIGVycm9yQ291bnRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBzcGF3biA9IChcbiAgc29ja2V0S2V5OiBzdHJpbmcsXG4gIGVycm9yQ291bnQgPSAwLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBpZiAoIWlzU3Bhd25lZChzb2NrZXRLZXkpICYmICFpc0Nvbm5lY3Rpbmcoc29ja2V0S2V5KSkge1xuICAgIC8vIGNvbnNvbGUuaW5mbyhgU3Bhd25pbmcgV2ViU29ja2V0ICR7c29ja2V0VXJsfWApO1xuICAgIHNvY2tldHNbc29ja2V0S2V5XSA9IG5ldyBXZWJTb2NrZXQoc29ja2V0S2V5KTtcblxuICAgIGV2ZW50cy5vbmNlKEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCwgKCkgPT4ge1xuICAgICAgc29ja2V0c1tzb2NrZXRLZXldLmNsb3NlKCk7XG4gICAgfSk7XG5cbiAgICBldmVudHMub25jZShFVkVOVC5PUEVSQVRJT05fRkFJTEVELCAoKSA9PiB7XG4gICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFUkFUSU9OX1RFUk1JTkFURUQpO1xuICAgIH0pO1xuXG4gICAgc29ja2V0c1tzb2NrZXRLZXldLm9ub3BlbiA9ICgpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbyhgV2Vic29ja2V0ICR7c29ja2V0S2V5fSBoYXMgYmVlbiBvcGVuYCk7XG4gICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFTkVEKTtcbiAgICB9O1xuXG4gICAgc29ja2V0c1tzb2NrZXRLZXldLm9uY2xvc2UgPSAoKSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oYFdlYnNvY2tldCAke3NvY2tldEtleX0gaGFzIGJlZW4gY2xvc2VkYCk7XG4gICAgfTtcblxuICAgIHNvY2tldHNbc29ja2V0S2V5XS5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgaWYgKCsrZXJyb3JDb3VudCA8PSBNQVhfRVJST1JTKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYEFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHRyeWluZyB0byBjb25uZWN0IHRvIFdlYlNvY2tldCAke3NvY2tldEtleX0uIFRyeWluZyBhZ2Fpbi4gJHtlcnJvckNvdW50fSAvICR7TUFYX0VSUk9SU31gLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBzcGF3bihzb2NrZXRLZXksIGVycm9yQ291bnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuU09DS0VUX09ORVJST1IpO1xuICAgICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgICAgbmV3IFdlYlNvY2tldENvbm5lY3Rpb25FcnJvcihcbiAgICAgICAgICAgIGBVbmFibGUgdG8gY29ubmVjdCB0byBXZWJTb2NrZXQgJHtzb2NrZXRLZXl9LmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHdhaXRGb3JDb25uZWN0aW9uKHNvY2tldEtleSlcbiAgICAuYW5kVGhlbigoKSA9PiBva0FzeW5jKHNvY2tldEtleSkpXG4gICAgLm9yRWxzZSgoZXJyb3IpID0+IGVyckFzeW5jKGVycm9yKSk7XG59O1xuXG4vKipcbiAqIFdhaXQgZm9yIFdlYlNvY2tldCB0byBvcGVuLiBSZXR1cm5zIGFuIGVycm9yIGlmIHRvbyBtYW55IGNvbm5lY3Rpb24gYXR0ZW1wdHMgYXJlIG1hZGUuXG4gKlxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHdhaXRGb3JDb25uZWN0aW9uID0gKFxuICBzb2NrZXRLZXk6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIWlzU3Bhd25lZChzb2NrZXRLZXkpKSB7XG4gICAgICAgIGV2ZW50cy5vbmNlKEVWRU5ULlNPQ0tFVF9PUEVORUQsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV2ZW50cy5vbihFVkVOVC5TT0NLRVRfT05FUlJPUiwgKCkgPT4ge1xuICAgICAgICAgIHJlamVjdChuZXcgV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICAoZXJyb3IpID0+IHtcbiAgICAgIHJldHVybiBlbnN1cmVFcnJvcihlcnJvcik7XG4gICAgfSxcbiAgKTtcblxuLyoqXG4gKiBDbG9zZSB0aGUgV2ViU29ja2V0XG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgY2xvc2UgPSAoc29ja2V0S2V5OiBzdHJpbmcpOiBSZXN1bHRBc3luYzxzdHJpbmcsIFdlYlNvY2tldEVycm9yPiA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoaXNTcGF3bmVkKHNvY2tldEtleSkpIHtcbiAgICAgICAgY29uc3QgdGltZW91dElEID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBXZWJTb2NrZXRFcnJvcihcIlVuYWJsZSB0byBjbG9zZSB0aGUgV2ViU29ja2V0XCIpKTtcbiAgICAgICAgfSwgMTAwMCk7XG5cbiAgICAgICAgc29ja2V0c1tzb2NrZXRLZXldLm9uY2xvc2UgPSAoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7XG4gICAgICAgICAgcmVzb2x2ZShzb2NrZXRLZXkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvY2tldHNbc29ja2V0S2V5XS5jbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShzb2NrZXRLZXkpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICApO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYW4gaW5zdGFuY2UgVVJMIGluIGEgV2ViU29ja2V0IFVSTFxuICpcbiAqIEBwYXJhbSBpbnN0YW5jZVVybFxuICogQHBhcmFtIHBhdGhuYW1lXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgYnVpbGRTb2NrZXRVcmwgPSAoaW5zdGFuY2VVcmw6IFVSTCwgcGF0aG5hbWU6IHN0cmluZyk6IFVSTCA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaW5zdGFuY2VVcmwpO1xuICB1cmwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09IFwiaHR0cDpcIiA/IFwid3M6XCIgOiBcIndzczpcIjtcbiAgdXJsLnBhdGhuYW1lICs9IHBhdGhuYW1lO1xuXG4gIHJldHVybiBuZXcgVVJMKHVybC5vcmlnaW4gKyB1cmwucGF0aG5hbWUpO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgZG93bmxvYWQgVVJMIGZvciB0aGUgc29ja2V0LiBSZXR1cm5zIGEgc3RyaW5nIHNpbmNlIGl0J3MgbW9zdGx5IHVzZWQgYXMgc29ja2V0cyBrZXlcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZFNvY2tldFVybCA9IChsdWZpRmlsZTogTHVmaUZpbGUpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gYnVpbGRTb2NrZXRVcmwoXG4gICAgbmV3IFVSTChsdWZpRmlsZS5zZXJ2ZXJVcmwpLFxuICAgIFNvY2tldFBhdGguRE9XTkxPQUQgKyBgLyR7bHVmaUZpbGUua2V5cy5zZXJ2ZXJ9YCxcbiAgKS50b1N0cmluZygpO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgdXBsb2FkIFVSTCBmb3IgdGhlIHNvY2tldC4gUmV0dXJucyBhIHN0cmluZyBzaW5jZSBpdCdzIG1vc3RseSB1c2VkIGFzIHNvY2tldHMga2V5XG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdXBsb2FkU29ja2V0VXJsID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBidWlsZFNvY2tldFVybChuZXcgVVJMKGx1ZmlGaWxlLnNlcnZlclVybCksIFNvY2tldFBhdGguVVBMT0FEKVxuICAgIC50b1N0cmluZygpO1xufTtcblxuLyoqXG4gKiBUcnkgdG8gcGFyc2UgYSBzdHJpbmcgaW50byBhIEpTT04uIFJldHVybnMgZmFsc2UgaWYgbm90IHBvc3NpYmxlLlxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCB0cnlQYXJzZUpzb24gPSAoZGF0YTogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkT2JqZWN0ID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgIGlmIChwYXJzZWRPYmplY3QgJiYgdHlwZW9mIHBhcnNlZE9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIHBhcnNlZE9iamVjdDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICB9IGNhdGNoIChfZSkge1xuICAgIC8qIGVtcHR5ICovXG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdHlwZSBvZiB0aGUgbWVzc2FnZSByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgaXMgU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhXG4gKlxuICogQHBhcmFtIG1lc3NhZ2VcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEgPSAoXG4gIG1lc3NhZ2U6IFNlcnZlckRvd25sb2FkQ2h1bmtNZXRhZGF0YSxcbik6IG1lc3NhZ2UgaXMgU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSA9PlxuICB0eXBlb2YgbWVzc2FnZSA9PT0gXCJvYmplY3RcIiAmJiBtZXNzYWdlICE9PSBudWxsICYmICEoXCJtc2dcIiBpbiBtZXNzYWdlKTtcbiIsICJpbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcbmltcG9ydCB7IGV2ZW50cywgaW5pdCB9IGZyb20gXCJ+L3dvcmtlci9zaGFyZWQudHNcIjtcbmltcG9ydCB7IGNhbmNlbFVwbG9hZCBhcyB3c0NhbmNlbFVwbG9hZCB9IGZyb20gXCJ+L2FwaS93ZWJzb2NrZXQudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyQWN0aW9uTWVzc2FnZSB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItYWN0aW9uLW1lc3NhZ2UudHNcIjtcbmltcG9ydCB0eXBlIHsgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJFdmVudCB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItZXZlbnQudHNcIjtcbmltcG9ydCB0eXBlIHsgV2ViU29ja2V0RXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzXCI7XG5cbmRlY2xhcmUgY29uc3Qgc2VsZjogV29ya2VyO1xubGV0IGlzSW5pdGlhdGVkID0gZmFsc2U7XG5cbnNlbGYub25tZXNzYWdlID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgaWYgKCFpc0luaXRpYXRlZCkge1xuICAgIGluaXQoKTtcbiAgICBpc0luaXRpYXRlZCA9IHRydWU7XG4gIH1cblxuICBldmVudHMub24oRVZFTlQuVVBMT0FEX0NBTkNFTExFRCwgKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULlVQTE9BRF9DQU5DRUxMRUQsIHN1Y2Nlc3MgfSk7XG4gIH0pO1xuXG4gIGNhbmNlbFVwbG9hZChldmVudC5kYXRhKS5tYXBFcnIoKGVycm9yKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCxcbiAgICAgIGVycm9yLFxuICAgIH0gYXMgV29ya2VyRXZlbnQpO1xuICB9KTtcbn07XG5cbmNvbnN0IGNhbmNlbFVwbG9hZCA9IChcbiAgd29ya2VyTWVzc2FnZTogV29ya2VyQWN0aW9uTWVzc2FnZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PlxuICB3c0Nh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RUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxJQUFJQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUVMLEVBQUVELEVBQUUsT0FBTyxJQUFJTyxFQUFFLEVBQUUsR0FBT04sSUFBSixHQUFXQSxJQUFKLEdBQVdBLElBQUosRUFBTSxNQUFNLElBQUlGLEVBQUssVUFBVSxRQUFRLHNCQUFzQixFQUE2QixJQUEzQixLQUFLLEVBQUUsQ0FBQ0ksRUFBRUgsRUFBRSxNQUFNLENBQUMsRUFBRUksRUFBRSxDQUFDLENBQUMsRUFBTUosRUFBRUMsRUFBRUQsRUFBRSxFQUFFQyxFQUFFLEdBQUdELElBQUtFLEVBQUVDLEVBQUVILEVBQUUsQ0FBQyxHQUFTQSxFQUFFQyxJQUFOLEdBQWFBLElBQUosR0FBV0QsRUFBRUMsSUFBTixLQUFRQyxFQUFFRyxFQUFFSCxJQUFJLEVBQUUsR0FBRyxHQUFHRyxFQUFFSCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUdHLEVBQUVILEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRUcsRUFBRUgsRUFBRSxHQUFHLEVBQU1GLEVBQUVDLElBQU4sSUFBVUMsRUFBRUEsR0FBRyxFQUFFQSxJQUFJLEdBQUdLLEdBQUcsR0FBR0EsRUFBRUEsR0FBRyxFQUFFLEtBQUtBLEdBQUcsS0FBSUosRUFBRUgsQ0FBQyxFQUFFRyxFQUFFSCxFQUFFQyxDQUFDLEVBQUVDLEVBQUUsSUFBSUQsRUFBRSxFQUFFRCxFQUFFQyxJQUFJRCxJQUFJRSxFQUFFQyxFQUFFRixFQUFFLEVBQUVELEVBQUVBLEVBQUUsQ0FBQyxFQUFFSSxFQUFFSCxDQUFDLEVBQUUsR0FBR0QsR0FBRyxFQUFFQyxFQUFFQyxFQUFFSSxFQUFFLENBQUMsRUFBRUQsRUFBRUgsSUFBSSxFQUFFLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEVBQzNmLEdBQUcsQ0FBQyxDQUFDLEVBQ0xILEVBQUssT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLFNBQVNDLEVBQUUsQ0FBQyxPQUFPUSxHQUFHLEtBQUtSLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFLENBQUMsT0FBT1EsR0FBRyxLQUFLUixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUlBLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUYsRUFBRSxDQUFDLEVBQUVHLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxJQUFJVCxFQUFFLEVBQUUsSUFBTUEsRUFBRUEsSUFBSUssR0FBR0YsRUFBRUgsQ0FBQyxFQUFFQSxHQUFHLEVBQUUsS0FBS0EsR0FBRyxJQUFJQSxDQUFDLEVBQUVBLEVBQUUsSUFBSUMsRUFBRUMsRUFBRSxFQUFFLENBQUNKLEVBQUVHLENBQUMsRUFBRUEsR0FBR0ssR0FBRyxFQUFFSixFQUFFRyxFQUFFSCxDQUFDLEdBQUcsRUFBRSxJQUFJTSxFQUFFTixFQUFFQSxHQUFHLEVBQUVBLEdBQUcsRUFBRUEsR0FBRyxFQUFFQSxHQUFHLEVBQUVNLEVBQUVBLEdBQUcsRUFBRUEsRUFBRSxJQUFJLEdBQUdWLEVBQUVHLENBQUMsRUFBRU8sRUFBRVQsRUFBRVMsQ0FBQyxFQUFFUCxFQUFFTSxFQUFFSixFQUFFSCxFQUFFRyxFQUFFRyxFQUFFSCxFQUFFRixDQUFDLENBQUMsQ0FBQyxFQUFFUSxFQUFFLFNBQVVGLEVBQUUsTUFBUVAsRUFBRSxJQUFNTSxFQUFFLFNBQVVMLEVBQUVNLEVBQUUsSUFBTUosRUFBRUssQ0FBQyxFQUFFLFNBQVVBLEVBQUVSLEVBQUUsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVDLENBQUMsRUFBRU0sRUFBRUEsR0FBRyxHQUFHQSxJQUFJLEVBQUVWLEVBQUVHLENBQUMsRUFBRVEsQ0FBQyxFQUFFQyxFQUFFQSxHQUFHLEdBQUdBLElBQUksRUFBRSxJQUFJVCxFQUNsZ0IsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVKLEVBQUVJLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNoRCxTQUFTSSxHQUFHUixFQUFFQyxFQUFFQyxFQUFFLENBQUMsR0FBT0QsRUFBRSxTQUFOLEVBQWEsTUFBTSxJQUFJRixFQUFLLFVBQVUsUUFBUSx3QkFBd0IsRUFBRSxJQUFJSSxFQUFFSCxFQUFFLEVBQUVFLENBQUMsRUFBRUUsRUFBRUgsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRSxFQUFFSixFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUcsRUFBRUwsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRixFQUFFQSxFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRSxJQUFJSSxFQUFFRSxFQUFFQyxFQUFFQyxFQUFFUixFQUFFLE9BQU8sRUFBRSxFQUFFUyxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUVQLEVBQUVQLEVBQUUsRUFBRUUsQ0FBQyxFQUFFRixFQUFFTyxFQUFFLENBQUMsRUFBRSxJQUFJUSxFQUFFUixFQUFFLENBQUMsRUFBRVMsRUFBRVQsRUFBRSxDQUFDLEVBQUVVLEVBQUVWLEVBQUUsQ0FBQyxFQUFFVyxFQUFFWCxFQUFFLENBQUMsRUFBRSxJQUFJSyxFQUFFLEVBQUVBLEVBQUVELEVBQUVDLElBQUlMLEVBQUVQLEVBQUVJLElBQUksRUFBRSxFQUFFVyxFQUFFVixHQUFHLEdBQUcsR0FBRyxFQUFFVyxFQUFFVixHQUFHLEVBQUUsR0FBRyxFQUFFVyxFQUFFaEIsRUFBRSxHQUFHLEVBQUVFLEVBQUVVLENBQUMsRUFBRUosRUFBRVQsRUFBRUssSUFBSSxFQUFFLEVBQUVVLEVBQUVULEdBQUcsR0FBRyxHQUFHLEVBQUVVLEVBQUVmLEdBQUcsRUFBRSxHQUFHLEVBQUVnQixFQUFFYixFQUFFLEdBQUcsRUFBRUQsRUFBRVUsRUFBRSxDQUFDLEVBQUVILEVBQUVWLEVBQUVNLElBQUksRUFBRSxFQUFFUyxFQUFFZCxHQUFHLEdBQUcsR0FBRyxFQUFFZSxFQUFFWixHQUFHLEVBQUUsR0FBRyxFQUFFYSxFQUFFWixFQUFFLEdBQUcsRUFBRUYsRUFBRVUsRUFBRSxDQUFDLEVBQUVaLEVBQUVELEVBQUVDLElBQUksRUFBRSxFQUFFYyxFQUFFWCxHQUFHLEdBQUcsR0FBRyxFQUFFWSxFQUFFWCxHQUFHLEVBQUUsR0FBRyxFQUFFWSxFQUFFWCxFQUFFLEdBQUcsRUFBRUgsRUFBRVUsRUFBRSxDQUFDLEVBQUVBLEdBQUcsRUFBRVQsRUFBRUcsRUFBRUYsRUFBRUksRUFBRUgsRUFBRUksRUFBRSxJQUFJRSxFQUNyZixFQUFFLEVBQUVBLEVBQUVBLElBQUlFLEVBQUVaLEVBQUUsRUFBRSxDQUFDVSxFQUFFQSxDQUFDLEVBQUVNLEVBQUVkLElBQUksRUFBRSxHQUFHLEdBQUdjLEVBQUViLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBR2EsRUFBRVosR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFWSxFQUFFakIsRUFBRSxHQUFHLEVBQUVFLEVBQUVVLEdBQUcsRUFBRU4sRUFBRUgsRUFBRUEsRUFBRUMsRUFBRUEsRUFBRUMsRUFBRUEsRUFBRUwsRUFBRUEsRUFBRU0sRUFBRSxPQUFPTyxDQUFDLENBQ2hIZixFQUFLLFNBQVMsQ0FBQyxTQUFTLFNBQVNDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxPQUFBRixFQUFFRCxFQUFLLFNBQVMsRUFBRUMsRUFBRSxNQUFNQyxFQUFFLEVBQUUsRUFBRSxJQUFJQSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBa0JDLElBQVQsT0FBV0YsRUFBRUQsRUFBSyxTQUFTLE1BQU1DLEVBQUVFLEVBQUVELENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBU0QsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUUsS0FBSyxNQUFNLENBQUNGLEVBQUVDLEVBQUUsRUFBRSxFQUFFLFFBQVFELEVBQUVDLEVBQUUsRUFBRUQsR0FBRyxJQUFJRCxFQUFFQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUdFLEVBQUVILEVBQUVDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUUsRUFBRUgsRUFBRUMsRUFBRSxHQUFHLENBQUMsSUFBSUUsSUFBSSxHQUFHRCxHQUFHLENBQUMsRUFBRSxPQUFPLFNBQVNGLEVBQUVDLEVBQUUsQ0FBQyxHQUFPRCxFQUFFLFNBQU4sR0FBa0JDLEVBQUUsU0FBTixFQUFhLE9BQU9ELEVBQUUsT0FBT0MsQ0FBQyxFQUFFLElBQUlDLEVBQUVGLEVBQUVBLEVBQUUsT0FBTyxDQUFDLEVBQUVHLEVBQUVKLEVBQUssU0FBUyxXQUFXRyxDQUFDLEVBQUUsT0FBWUMsSUFBTCxHQUFPSCxFQUFFLE9BQU9DLENBQUMsRUFBRUYsRUFBSyxTQUFTLEVBQUVFLEVBQUVFLEVBQUVELEVBQUUsRUFBRUYsRUFBRSxNQUFNLEVBQUVBLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsU0FBU0EsRUFBRSxDQUFDLElBQUlDLEVBQUVELEVBQUUsT0FBTyxPQUNuZkMsSUFEMGYsRUFDeGYsRUFBRSxJQUFJQSxFQUFFLEdBQUdGLEVBQUssU0FBUyxXQUFXQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxTQUFTRCxFQUFFQyxFQUFFLENBQUMsR0FBRyxHQUFHRCxFQUFFLE9BQU9DLEVBQUUsT0FBT0QsRUFBRUEsRUFBRUEsRUFBRSxNQUFNLEVBQUUsS0FBSyxLQUFLQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUVGLEVBQUUsT0FBTyxPQUFBQyxFQUFFQSxFQUFFLEdBQUcsRUFBRUMsR0FBR0QsSUFBSUQsRUFBRUUsRUFBRSxDQUFDLEVBQUVILEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFRSxFQUFFLENBQUMsRUFBRSxZQUFZRCxFQUFFLEVBQUUsQ0FBQyxHQUFVRCxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFQyxFQUFFQyxFQUFFLENBQUMsT0FBWUYsSUFBTCxHQUFPQyxHQUFHQyxFQUFFRCxFQUFFLEVBQUVBLEdBQUcsR0FBR0QsR0FBRyxjQUFjQSxDQUFDLEVBQUUsV0FBVyxTQUFTQSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU1BLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxNQUFNLFNBQVNBLEVBQUVDLEVBQUUsQ0FBQyxHQUFHRixFQUFLLFNBQVMsVUFBVUMsQ0FBQyxJQUFJRCxFQUFLLFNBQVMsVUFBVUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJQyxFQUFFLEVBQUVDLEVBQUUsSUFBSUEsRUFBRSxFQUFFQSxFQUFFSCxFQUFFLE9BQU9HLElBQUlELEdBQUdGLEVBQUVHLENBQUMsRUFBRUYsRUFBRUUsQ0FBQyxFQUFFLE9BQzNlRCxJQURrZixDQUNqZixFQUFFLEVBQUUsU0FBU0YsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQU0sSUFBSkEsRUFBRSxFQUFlRCxJQUFULFNBQWFBLEVBQUUsQ0FBQyxHQUFHLElBQUlGLEVBQUVBLEdBQUcsR0FBR0UsRUFBRSxLQUFLRCxDQUFDLEVBQUVBLEVBQUUsRUFBRSxHQUFPRCxJQUFKLEVBQU0sT0FBT0UsRUFBRSxPQUFPSCxDQUFDLEVBQUUsSUFBSUksRUFBRSxFQUFFQSxFQUFFSixFQUFFLE9BQU9JLElBQUlELEVBQUUsS0FBS0QsRUFBRUYsRUFBRUksQ0FBQyxJQUFJSCxDQUFDLEVBQUVDLEVBQUVGLEVBQUVJLENBQUMsR0FBRyxHQUFHSCxFQUFFLE9BQUFHLEVBQUVKLEVBQUUsT0FBT0EsRUFBRUEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFQSxFQUFFRCxFQUFLLFNBQVMsV0FBV0ssQ0FBQyxFQUFFRCxFQUFFLEtBQUtKLEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFLEdBQUcsR0FBR0MsRUFBRUQsRUFBRUUsRUFBRUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQVNBLENBQUMsRUFBRSxFQUFFLFNBQVNILEVBQUVDLEVBQUUsQ0FBQyxNQUFNLENBQUNELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUQsRUFBRSxDQUFDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRCxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxJQUFJRCxFQUFFLEVBQUVBLEVBQUVELEVBQUUsT0FBTyxFQUFFQyxFQUFFQyxFQUFFRixFQUFFQyxDQUFDLEVBQUVELEVBQUVDLENBQUMsRUFBRUMsSUFBSSxHQUFHQSxJQUFJLEVBQUUsT0FBUUEsRUFBRSxRQUFTLEVBQUVBLEdBQUcsR0FBRyxPQUFPRixDQUFDLENBQUMsRUFDcGRELEVBQUssTUFBTSxXQUFXLENBQUMsU0FBUyxTQUFTQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxHQUFHQyxFQUFFSCxFQUFLLFNBQVMsVUFBVUMsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUEsRUFBRUQsRUFBRSxFQUFFQyxJQUFTLEVBQUFBLEVBQUUsS0FBS0MsRUFBRUosRUFBRUcsRUFBRSxDQUFDLEdBQUdGLEdBQUcsT0FBTyxhQUFhRyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUVBLElBQUksRUFBRSxP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SyxFQUFFLEdBQUdFLEVBQUUsQ0FBQyxDQUFDLEVBQVNKLENBQUMsQ0FBQyxFQUFFSCxFQUFLLE1BQU0sVUFBVSxDQUFDLFNBQVMsU0FBU0MsRUFBRSxDQUFDLE9BQU9ELEVBQUssTUFBTSxPQUFPLFNBQVNDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLFNBQVNBLEVBQUUsQ0FBQyxPQUFPRCxFQUFLLE1BQU0sT0FBTyxPQUFPQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLFNBQVNDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFQSxHQUFHLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLEtBQUssU0FBU0MsRUFBRSxDQUFDLE9BQU8sSUFBSUQsRUFBSyxLQUFLLFNBQVEsT0FBT0MsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUN4Z0JELEVBQUssS0FBSyxPQUFPLFVBQVUsQ0FBQyxVQUFVLElBQUksTUFBTSxVQUFVLENBQUMsWUFBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFTLElBQUksRUFBRSxPQUFPLFNBQVNDLEVBQUUsQ0FBWSxPQUFPQSxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFHLElBQUlDLEVBQUVDLEVBQUUsS0FBSyxFQUFFSCxFQUFLLFNBQVMsT0FBTyxLQUFLLEVBQUVDLENBQUMsRUFBaUQsR0FBL0NDLEVBQUUsS0FBSyxFQUFFRCxFQUFFLEtBQUssRUFBRUMsRUFBRUYsRUFBSyxTQUFTLFVBQVVDLENBQUMsRUFBSyxpQkFBaUJBLEVBQUUsTUFBTSxJQUFJRCxFQUFLLFVBQVUsUUFBUSxxQ0FBcUMsRUFBRSxHQUFpQixPQUFPLFlBQXJCLElBQWlDLENBQUMsSUFBSUksRUFBRSxJQUFJLFlBQVlELENBQUMsRUFBRUUsRUFBRSxFQUFFLElBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVFLEVBQUUsU0FBUyxHQUFHQyxFQUN0ZixJQUFJQSxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxHQUFHLEVBQUVGLEVBQUUsT0FBTyxFQUFFLEdBQUdFLENBQUMsQ0FBQyxLQUFNLEtBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUlGLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFLEtBQUssRUFBRUQsRUFBRUYsRUFBSyxTQUFTLE9BQU9FLEVBQUUsQ0FBQ0YsRUFBSyxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUlDLEVBQUVDLEVBQUUsT0FBTyxFQUFFRCxFQUFFLEdBQUdBLElBQUlDLEVBQUUsS0FBSyxDQUFDLEVBQXlDLElBQXZDQSxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssRUFBRSxVQUFXLENBQUMsRUFBTUEsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQUVBLEVBQUUsUUFBUSxLQUFLLEVBQUVBLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQUssTUFBTSxFQUFTQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBU0YsRUFBRUEsRUFBRSxDQUFDLE1BQU8sYUFBYUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUN6ZixHQUFHLEtBQUssQ0FBQ0EsSUFBSSxFQUFFSCxJQUFJLEtBQUssRUFBRUEsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUVELENBQUMsRUFBRUQsRUFBRSxLQUFLLElBQUlFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUgsRUFBRSxDQUFDLEVBQUVLLEVBQUVMLEVBQUUsQ0FBQyxFQUFFTSxFQUFFTixFQUFFLENBQUMsRUFBRU8sRUFBRVAsRUFBRSxDQUFDLEVBQUVRLEVBQUVSLEVBQUUsQ0FBQyxFQUFFUyxFQUFFVCxFQUFFLENBQUMsRUFBRVUsRUFBRVYsRUFBRSxDQUFDLEVBQUUsSUFBSUgsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUksR0FBR0EsRUFBRUMsRUFBRUYsRUFBRUMsQ0FBQyxHQUFHQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsRUFBRSxFQUFFRSxFQUFFSCxFQUFFQyxFQUFFLEdBQUcsRUFBRSxFQUFFQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsR0FBR0MsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksRUFBRUEsR0FBRyxHQUFHQSxHQUFHLEtBQUtDLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJSCxFQUFFQyxFQUFFLEVBQUUsRUFBRUQsRUFBRUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHQyxFQUFFQSxFQUFFWSxHQUFHSCxJQUFJLEVBQUVBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJRSxFQUFFRixHQUFHQyxFQUFFQyxJQUFJUixFQUFFSixDQUFDLEVBQUVhLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVSLEVBQUUsRUFBRVEsRUFBRUQsRUFBRUEsRUFBRUYsRUFBRUEsRUFBRUQsRUFBRUEsRUFBRUosR0FBR0ssRUFBRUUsRUFBRUMsR0FBR0gsRUFBRUUsS0FBS0YsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksR0FBR0EsR0FBRyxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVFLEVBQ3BmLEVBQUVGLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRUcsRUFBRSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVLLEVBQUUsRUFBRUwsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFTSxFQUFFLEVBQUVOLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRU8sRUFBRSxFQUFFUCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVRLEVBQUUsRUFBRVIsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFUyxFQUFFLEVBQUVULEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRVUsRUFBRSxDQUFDLENBQUMsRUFBRWYsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRUQsRUFBSyxLQUFLLE9BQU8sS0FBSyxTQUFTQyxFQUFFLENBQUMsT0FBTyxJQUFJRCxFQUFLLEtBQUssU0FBUSxPQUFPQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQy9TRCxFQUFLLEtBQUssT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sVUFBVSxDQUFDLFlBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBUyxJQUFJLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQVksT0FBT0EsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFLEtBQUssRUFBRUgsRUFBSyxTQUFTLE9BQU8sS0FBSyxFQUFFQyxDQUFDLEVBQWlELEdBQS9DQyxFQUFFLEtBQUssRUFBRUQsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUssU0FBUyxVQUFVQyxDQUFDLEVBQUssaUJBQWlCQSxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEscUNBQXFDLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDLElBQUlJLEVBQUUsSUFBSSxZQUFZRCxDQUFDLEVBQUVFLEVBQUUsRUFBRSxJQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFRSxFQUFFLFNBQVMsR0FDdGZDLEVBQUUsSUFBSUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsR0FBRyxFQUFFRixFQUFFLE9BQU8sRUFBRSxHQUFHRSxDQUFDLENBQUMsS0FBTSxLQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJRixFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVELEVBQUVGLEVBQUssU0FBUyxPQUFPRSxFQUFFLENBQUNGLEVBQUssU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFQyxFQUFFLE9BQU8sRUFBRUQsRUFBRSxHQUFHQSxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUE2RCxJQUEzREEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUUsVUFBVyxDQUFDLEVBQU1BLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLFFBQVEsS0FBSyxFQUFFQSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFLLE1BQU0sRUFBU0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFDbGYsUUFBUSxPQUFPLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsU0FBUyxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFDcGYsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxPQUFPLFNBQVMsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTQyxFQUFFRCxFQUFFLENBQUMsTUFBTyxnQkFBZUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUUUsRUFB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QUFFLEVBQUVFLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBU0osRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUVDLEVBQUVSLEVBQUssU0FBU08sRUFBRUMsRUFBRSxFQUFFLElBQUlFLEVBQUVSLEVBQUUsT0FBT1MsRUFBRUgsRUFBRSxVQUFVTixDQUFDLEVBQUVVLEVBQUVGLEVBQUUsR0FBR0csRUFBRUQsRUFBa0csR0FBaEdULEVBQUVLLEVBQUUsT0FBTyxDQUFDQSxFQUFFLFFBQVEsRUFBRUYsRUFBRSxDQUFDLENBQUMsRUFBRUgsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRUMsRUFBRUksRUFBRSxTQUFTRCxFQUFFSCxFQUFFSCxFQUFFLFFBQVFFLENBQUMsQ0FBQyxFQUFFLEVBQUVFLENBQUMsRUFBSyxDQUFDSyxFQUFFLE1BQU0sQ0FBQyxJQUFJTixFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSUcsRUFBRSxFQUFFQSxFQUFFRyxFQUFFSCxHQUFHLEVBQUVBLEVBQUVLLElBQUlaLEVBQUssS0FBSyxJQUFJLEdBQUdPLEVBQ3JnQkcsQ0FBQyxFQUFFRSxHQUFHQyxHQUFHVixFQUFFLENBQUMsSUFBSUUsRUFBRUosRUFBRSxRQUFRRSxDQUFDLEVBQUVELEVBQUVLLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUVILEVBQUVLLEVBQUUsQ0FBQyxHQUFHRixFQUFFLENBQUMsRUFBRUgsRUFBRUssRUFBRSxDQUFDLEdBQUdGLEVBQUUsQ0FBQyxFQUFFSCxFQUFFSyxFQUFFLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUlELEVBQUUsS0FBS0ksRUFBRSxNQUFNTixFQUFFUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVYLEVBQUssS0FBSyxLQUFLLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxLQUFLLEVBQUVBLEVBQUVBLEdBQUdGLEVBQUssS0FBSyxPQUFPLElBQUlHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUVDLEVBQUVDLEVBQUVILEVBQUUsVUFBVSxVQUFVLEdBQWtELElBQS9DLEtBQUssRUFBRSxDQUFDLElBQUlBLEVBQUUsSUFBSUEsQ0FBQyxFQUFFRCxFQUFFLE9BQU9JLElBQUlKLEVBQUVDLEVBQUUsS0FBS0QsQ0FBQyxHQUFPRyxFQUFFLEVBQUVBLEVBQUVDLEVBQUVELElBQUlELEVBQUUsQ0FBQyxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRSxVQUFVRCxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU9ELEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPQSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJRCxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzWUYsRUFBSyxLQUFLLEtBQUssVUFBVSxRQUFRQSxFQUFLLEtBQUssS0FBSyxVQUFVLElBQUksU0FBU0MsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEseUNBQXlDLEVBQUUsWUFBSyxPQUFPQyxDQUFDLEVBQVMsS0FBSyxPQUFPQSxDQUFDLENBQUMsRUFBRUQsRUFBSyxLQUFLLEtBQUssVUFBVSxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUVBLEVBQUssS0FBSyxLQUFLLFVBQVUsT0FBTyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU9BLENBQUMsQ0FBQyxFQUFFRCxFQUFLLEtBQUssS0FBSyxVQUFVLE9BQU8sVUFBVSxDQUFDLElBQUlDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRUEsRUFBRyxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUcsT0FBT0EsQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFLLE1BQU0sRUFBU0EsQ0FBQyxFQUN2ZUQsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFVLEdBQVRGLEVBQUVBLEdBQUcsSUFBTyxFQUFFQyxHQUFHLEVBQUVELEVBQUUsTUFBTSxJQUFJSCxFQUFLLFVBQVUsUUFBUSwwQkFBMEIsRUFBYSxPQUFPQyxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFjLE9BQU9DLEdBQWxCLFdBQXNCQSxFQUFFRixFQUFLLE1BQU0sV0FBVyxPQUFPRSxDQUFDLEdBQUdHLEVBQUVBLEdBQUdMLEVBQUssS0FBSyxLQUFLQyxFQUFFLElBQUlJLEVBQUVKLENBQUMsRUFBRSxJQUFJSyxFQUFFQyxFQUFFQyxFQUFFRSxFQUFFQyxFQUFFLENBQUMsRUFBRUMsRUFBRVosRUFBSyxTQUFTLElBQUlVLEVBQUUsRUFBRSxHQUFHQyxFQUFFLFFBQVFQLEdBQUcsR0FBR00sSUFBSSxDQUFnQyxJQUEvQkwsRUFBRUMsRUFBRUwsRUFBRSxRQUFRVyxFQUFFLE9BQU9WLEVBQUUsQ0FBQ1EsQ0FBQyxDQUFDLENBQUMsRUFBTUgsRUFBRSxFQUFFQSxFQUFFSixFQUFFSSxJQUFJLElBQUlELEVBQUVMLEVBQUUsUUFBUUssQ0FBQyxFQUFFRSxFQUFFLEVBQUVBLEVBQUVGLEVBQUUsT0FBT0UsSUFBSUgsRUFBRUcsQ0FBQyxHQUFHRixFQUFFRSxDQUFDLEVBQUVHLEVBQUVBLEVBQUUsT0FBT04sQ0FBQyxDQUFDLENBQUMsT0FBQUQsSUFBSU8sRUFBRUMsRUFBRSxNQUFNRCxFQUFFUCxDQUFDLEdBQVVPLENBQUMsRUFDbmRYLEVBQUssS0FBSyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSUQsRUFBSyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxHQUFHLE1BQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLEVBQUUsRUFDeldELEVBQUssS0FBSyxVQUFVLENBQUMsWUFBWSxTQUFTQyxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUVBLEVBQUUsS0FBSyxRQUFRRixDQUFDLEVBQUUsSUFBSUcsRUFBRSxHQUFHRCxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUlKLEVBQUssVUFBVSxTQUFTLHdCQUF3QixFQUFFLEdBQUdJLEVBQUUsS0FBSyxFQUFFLENBQUNBLEVBQUUsRUFBRUEsRUFBRSxLQUFLLEdBQUdDLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUUsRUFBRUMsRUFBMkMsSUFBekMsS0FBSyxFQUFFRixFQUFFLENBQUMsRUFBRyxJQUFJLE9BQU0sUUFBUSxFQUFFLEtBQUssR0FBT0UsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUlGLEVBQUUsS0FBSyxXQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJRSxFQUFFLEVBQUVBLEVBQUUsS0FBSyxFQUFFLFNBQVNGLEVBQUVB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RUFBRUcsQ0FBQyxJQUFJRixFQUFFRSxDQUFDLEVBQUUsTUFBTSxJQUFJSixFQUFLLFVBQVUsUUFBUSwrQkFBK0IsRUFBRUMsRUFBRUcsQ0FBQyxFQUFFRixFQUFFRSxDQUFDLENBQUMsQ0FBQyxPQUFPSCxDQUFDLEVBQUUsR0FBRyxTQUFTQSxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUUsSUFBSUEsS0FBS0gsRUFBRUEsRUFBRSxlQUFlRyxDQUFDLEdBQUdILEVBQUVHLENBQUMsSUFBSUYsRUFBRUUsQ0FBQyxJQUFJRCxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsR0FBRyxPQUFPRCxDQUFDLEVBQUUsR0FBRyxTQUFTRixFQUM1ZkMsRUFBRSxDQUFDLElBQUlDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLElBQUlBLEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxJQUFhSCxFQUFFQyxFQUFFRSxDQUFDLENBQUMsSUFBZixTQUFtQkQsRUFBRUQsRUFBRUUsQ0FBQyxDQUFDLEVBQUVILEVBQUVDLEVBQUVFLENBQUMsQ0FBQyxHQUFHLE9BQU9ELENBQUMsQ0FBQyxFQUFFSCxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLEtBQUssR0FBRyxDQUFDLEVBQUVBLEVBQUssS0FBSyxhQUFhLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFSCxFQUFLLEtBQUssR0FBR0ksRUFBRSxPQUFBRixFQUFFQSxHQUFHLENBQUMsRUFBRUUsRUFBRUYsRUFBRSxNQUFNLElBQUlDLEVBQUVBLEVBQUVGLENBQUMsRUFBRUUsRUFBRUYsQ0FBQyxHQUFHLENBQUMsRUFBRUcsRUFBRUQsRUFBRUMsQ0FBQyxFQUFFRCxFQUFFQyxDQUFDLEdBQUcsQ0FBQyxVQUFVRixFQUFFLE1BQU1BLEVBQUUsS0FBSyxPQUFPQSxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUVGLEVBQUssT0FBTyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUVHLEVB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QUksSUFBSUYsQ0FBVyxFQUMvQixPQUFBRSxFQUFJLFNBQVdBLEVBQUksV0FBYSxRQUFVLE1BQVEsT0FDbERBLEVBQUksVUFBWUQsRUFFVCxJQUFJLElBQUlDLEVBQUksT0FBU0EsRUFBSSxRQUFRLENBQzFDLEVBUWFDLEdBQXFCQyxHQUN6QkwsR0FDTCxJQUFJLElBQUlLLEVBQVMsU0FBUyxFQUMxQixXQUFzQixJQUFJQSxFQUFTLEtBQUssTUFBTSxFQUNoRCxFQUFFLFNBQVMsRUFTQUMsR0FBbUJELEdBQ3ZCTCxHQUFlLElBQUksSUFBSUssRUFBUyxTQUFTLFVBQW9CLEVBQ2pFLFNBQVMsRUFTUkUsR0FBZ0JDLEdBQWlCLENBQ3JDLEdBQUksQ0FDRixJQUFNQyxFQUFlLEtBQUssTUFBTUQsQ0FBSSxFQUVwQyxHQUFJQyxHQUFnQixPQUFPQSxHQUFpQixTQUMxQyxPQUFPQSxDQUdYLE1BQWEsQ0FFYixDQUNBLE1BQU8sRUFDVCxFQVFhQyxHQUNYQyxHQUVBLE9BQU9BLEdBQVksVUFBWUEsSUFBWSxNQUFRLEVBQUUsUUFBU0EsR0M5Z0JoRSxJQUFJQyxHQUFjLEdBRWxCLEtBQUssVUFBYUMsR0FBd0IsQ0FDbkNELEtBQ0hFLEdBQUssRUFDTEYsR0FBYyxJQUdoQkcsRUFBTyxzQkFBNEJDLEdBQXFCLENBQ3RELEtBQUssWUFBWSxDQUFFLHlCQUErQixRQUFBQSxDQUFRLENBQUMsQ0FDN0QsQ0FBQyxFQUVEQyxHQUFhSixFQUFNLElBQUksRUFBRSxPQUFRSyxHQUFVLENBQ3pDLEtBQUssWUFBWSxDQUNmLHlCQUNBLE1BQUFBLENBQ0YsQ0FBZ0IsQ0FDbEIsQ0FBQyxDQUNILEVBRUEsSUFBTUQsR0FDSkUsR0FFQUYsR0FBZUUsRUFBYyxLQUFLLFFBQVEiLAogICJuYW1lcyI6IFsicmVxdWlyZV9ldmVudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSIiwgIlJlZmxlY3RBcHBseSIsICJ0YXJnZXQiLCAicmVjZWl2ZXIiLCAiYXJncyIsICJSZWZsZWN0T3duS2V5cyIsICJQcm9jZXNzRW1pdFdhcm5pbmciLCAid2FybmluZyIsICJOdW1iZXJJc05hTiIsICJ2YWx1ZSIsICJFdmVudEVtaXR0ZXIiLCAib25jZSIsICJkZWZhdWx0TWF4TGlzdGVuZXJzIiwgImNoZWNrTGlzdGVuZXIiLCAibGlzdGVuZXIiLCAiYXJnIiwgIm4iLCAiX2dldE1heExpc3RlbmVycyIsICJ0aGF0IiwgInR5cGUiLCAiaSIsICJkb0Vycm9yIiwgImV2ZW50cyIsICJlciIsICJlcnIiLCAiaGFuZGxlciIsICJsZW4iLCAibGlzdGVuZXJzIiwgImFycmF5Q2xvbmUiLCAiX2FkZExpc3RlbmVyIiwgInByZXBlbmQiLCAibSIsICJleGlzdGluZyIsICJ3IiwgIm9uY2VXcmFwcGVyIiwgIl9vbmNlV3JhcCIsICJzdGF0ZSIsICJ3cmFwcGVkIiwgImxpc3QiLCAicG9zaXRpb24iLCAib3JpZ2luYWxMaXN0ZW5lciIsICJzcGxpY2VPbmUiLCAia2V5cyIsICJrZXkiLCAiX2xpc3RlbmVycyIsICJ1bndyYXAiLCAiZXZsaXN0ZW5lciIsICJ1bndyYXBMaXN0ZW5lcnMiLCAiZW1pdHRlciIsICJsaXN0ZW5lckNvdW50IiwgImFyciIsICJjb3B5IiwgImluZGV4IiwgInJldCIsICJuYW1lIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVycm9yTGlzdGVuZXIiLCAicmVzb2x2ZXIiLCAiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwgImFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyIiwgImZsYWdzIiwgIndyYXBMaXN0ZW5lciIsICJyZXF1aXJlX3NqY2wiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzamNsIiwgImEiLCAiYiIsICJjIiwgImQiLCAiZSIsICJmIiwgImciLCAiaCIsICJhYSIsICJrIiwgIm4iLCAibCIsICJtIiwgInAiLCAieiIsICJBIiwgIkMiLCAiQiIsICJEIiwgIlAiLCAiZWEiLCAiUSIsICJ0IiwgInIiLCAidSIsICJHIiwgIkUiLCAiSCIsICJGIiwgIlYiLCAiSSIsICJ3IiwgInYiLCAiUiIsICJKIiwgIlMiLCAiSyIsICJXIiwgIkwiLCAicSIsICJ4IiwgInkiLCAiWCIsICJZIiwgIk0iLCAiZmEiLCAiamEiLCAia2EiLCAiZ2EiLCAiYmEiLCAiTiIsICJjYSIsICJPIiwgIlQiLCAiaGEiLCAiaWEiLCAiZGEiLCAiVSIsICJaIiwgImltcG9ydF9ldmVudHMiLCAiZXZlbnRzIiwgIkV2ZW50RW1pdHRlciIsICJ1cGRhdGVGaWxlIiwgImx1ZmlGaWxlIiwgImFyZ3MiLCAiaW5pdCIsICJldmVudHMiLCAiZXJyb3IiLCAiZGVmYXVsdEVycm9yQ29uZmlnIiwgImNyZWF0ZU5ldmVyVGhyb3dFcnJvciIsICJtZXNzYWdlIiwgInJlc3VsdCIsICJjb25maWciLCAiZGF0YSIsICJtYXliZVN0YWNrIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fYXdhaXQiLCAidiIsICJfX2FzeW5jR2VuZXJhdG9yIiwgImciLCAicSIsICJ2ZXJiIiwgImF3YWl0UmV0dXJuIiwgImYiLCAibiIsICJhIiwgImIiLCAicmVzdW1lIiwgInNldHRsZSIsICJyIiwgImZ1bGZpbGwiLCAiX19hc3luY0RlbGVnYXRvciIsICJwIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZCIsICJSZXN1bHRBc3luYyIsICJfUmVzdWx0QXN5bmMiLCAicmVzIiwgInByb21pc2UiLCAibmV3UHJvbWlzZSIsICJ2YWx1ZSIsICJPayIsICJlcnJvckZuIiwgImUiLCAiRXJyIiwgImZuIiwgImFyZ3MiLCAiX19hd2FpdGVyIiwgImVycm9yIiwgImFzeW5jUmVzdWx0TGlzdCIsICJjb21iaW5lUmVzdWx0QXN5bmNMaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzIiwgImYiLCAibmV3UmVzIiwgIm5ld1ZhbHVlIiwgIm9rIiwgIl9lcnIiLCAidCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiX19hc3luY0RlbGVnYXRvciIsICJfX2FzeW5jVmFsdWVzIiwgInN1Y2Nlc3NDYWxsYmFjayIsICJmYWlsdXJlQ2FsbGJhY2siLCAicmVzdWx0IiwgImVyckFzeW5jIiwgIm9rQXN5bmMiLCAiZXJyIiwgImZyb21Qcm9taXNlIiwgImZyb21TYWZlUHJvbWlzZSIsICJmcm9tQXN5bmNUaHJvd2FibGUiLCAiY29tYmluZVJlc3VsdExpc3QiLCAicmVzdWx0TGlzdCIsICJhY2MiLCAibGlzdCIsICJjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMiLCAiUmVzdWx0IiwgImZyb21UaHJvd2FibGUiLCAiY29tYmluZSIsICJjb21iaW5lV2l0aEFsbEVycm9ycyIsICJPayIsICJ2YWx1ZSIsICJmIiwgIm9rIiwgIl9mIiwgIl92YWx1ZSIsICJSZXN1bHRBc3luYyIsICJfdiIsICJfZXJyIiwgIl8iLCAiY29uZmlnIiwgImNyZWF0ZU5ldmVyVGhyb3dFcnJvciIsICJFcnIiLCAiZXJyb3IiLCAiZXJyIiwgImVyckFzeW5jIiwgInYiLCAiX29rIiwgInNlbGYiLCAiZnJvbVRocm93YWJsZSIsICJSZXN1bHQiLCAiQmFzZUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJjYXVzZSIsICJjb250ZXh0IiwgIl9fcHVibGljRmllbGQiLCAiV2ViU29ja2V0RXJyb3IiLCAiQmFzZUVycm9yIiwgIldlYlNvY2tldENvbm5lY3Rpb25FcnJvciIsICJXZWJTb2NrZXRFcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImVuc3VyZUVycm9yIiwgInZhbHVlIiwgInN0cmluZ2lmaWVkIiwgIkVuY29kaW5nIiwgImNoYXJzZXQiLCAibm9QYWRkaW5nIiwgImFiIiwgImxlbiIsICJ2aWV3IiwgInJlcyIsICJzdHIiLCAidmlld0xlbiIsICJlbmMxIiwgImVuYzIiLCAiZW5jMyIsICJlbmM0IiwgImkiLCAiaiIsICJvYmoiLCAiRW5jb2RpbmciLCAiRGVjb2RlIiwgInN0ciIsICJvYmoiLCAib2JqIiwgIkVuY29kaW5nIiwgIkRlY29kZSIsICJzdHIiLCAib2JqIiwgImltcG9ydF9sdWZpX3NqY2wiLCAiQ3J5cHRvRXJyb3IiLCAiQmFzZUVycm9yIiwgIkRlY3J5cHRpb25FcnJvciIsICJDcnlwdG9FcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImRlY3J5cHQiLCAia2V5IiwgImVuY3J5cHRlZERhdGEiLCAiZGF0YSIsICJva0FzeW5jIiwgIkRlY29kZSIsICJzamNsIiwgImVycm9yIiwgImVyckFzeW5jIiwgIkRlY3J5cHRpb25FcnJvciIsICJlbnN1cmVFcnJvciIsICJkZWNyeXB0IiwgImtleSIsICJlbmNyeXB0ZWQiLCAiaW1wb3J0S2V5IiwgImltcG9ydGVkS2V5IiwgIlJlc3VsdEFzeW5jIiwgImVycm9yIiwgIkRlY3J5cHRpb25FcnJvciIsICJlbnN1cmVFcnJvciIsICJpbXBvcnRLZXkiLCAia2V5IiwgIlJlc3VsdEFzeW5jIiwgIkRlY29kZSIsICJlcnJvciIsICJDcnlwdG9FcnJvciIsICJlbnN1cmVFcnJvciIsICJkZWNyeXB0IiwgImtleSIsICJ2YWx1ZSIsICJzb2NrZXRzIiwgIk1BWF9FUlJPUlMiLCAib25DYW5jZWxNZXNzYWdlIiwgImRhdGEiLCAiZXZlbnRzIiwgIm9rQXN5bmMiLCAib25Eb3dubG9hZE1lc3NhZ2UiLCAicmVzcG9uc2UiLCAibHVmaUZpbGUiLCAicmVzdWx0IiwgIm1ldGFkYXRhU3RyaW5nIiwgIm1ldGFkYXRhIiwgImlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSIsICJkYXRhU3RyaW5nIiwgImVuY3J5cHRlZERhdGEiLCAiRGVjb2RlIiwgImRlY3J5cHQiLCAiZGVjcnlwdGVkUGFydCIsICJidWZmZXIiLCAidXBkYXRlRmlsZSIsICJlbmREb3dubG9hZCIsICJlcnJvciIsICJXZWJTb2NrZXRFcnJvciIsICJlcnJBc3luYyIsICJvblVwbG9hZE1lc3NhZ2UiLCAib25NZXNzYWdlIiwgImUiLCAidHJ5UGFyc2VKc29uIiwgImNhbGxiYWNrIiwgImlzQ29ubmVjdGluZyIsICJzb2NrZXRLZXkiLCAiaXNTcGF3bmVkIiwgImNhbmNlbFVwbG9hZCIsICJzZW5kTWVzc2FnZSIsICJ1cGxvYWRTb2NrZXRVcmwiLCAiZW5kRG93bmxvYWQiLCAibHVmaUZpbGUiLCAibWVzc2FnZSIsICJzZW5kTWVzc2FnZSIsICJkb3dubG9hZFNvY2tldFVybCIsICJzZW5kTWVzc2FnZSIsICJzb2NrZXRVcmwiLCAibHVmaUZpbGUiLCAibWVzc2FnZSIsICJpc1NwYXduZWQiLCAic29ja2V0cyIsICJva0FzeW5jIiwgInNwYXduIiwgImUiLCAib25NZXNzYWdlIiwgInNvY2tldEtleSIsICJlcnJvckNvdW50IiwgImlzQ29ubmVjdGluZyIsICJldmVudHMiLCAiTUFYX0VSUk9SUyIsICJlcnJBc3luYyIsICJXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IiLCAid2FpdEZvckNvbm5lY3Rpb24iLCAiZXJyb3IiLCAiUmVzdWx0QXN5bmMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZW5zdXJlRXJyb3IiLCAiYnVpbGRTb2NrZXRVcmwiLCAiaW5zdGFuY2VVcmwiLCAicGF0aG5hbWUiLCAidXJsIiwgImRvd25sb2FkU29ja2V0VXJsIiwgImx1ZmlGaWxlIiwgInVwbG9hZFNvY2tldFVybCIsICJ0cnlQYXJzZUpzb24iLCAiZGF0YSIsICJwYXJzZWRPYmplY3QiLCAiaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhIiwgIm1lc3NhZ2UiLCAiaXNJbml0aWF0ZWQiLCAiZXZlbnQiLCAiaW5pdCIsICJldmVudHMiLCAic3VjY2VzcyIsICJjYW5jZWxVcGxvYWQiLCAiZXJyb3IiLCAid29ya2VyTWVzc2FnZSJdCn0K diff --git a/themes/default/public/js/worker/compress.js b/themes/default/public/js/worker/compress.js new file mode 100644 index 0000000..c064e62 --- /dev/null +++ b/themes/default/public/js/worker/compress.js @@ -0,0 +1,2 @@ +var ve=Object.defineProperty;var pe=(e,r,n)=>r in e?ve(e,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[r]=n;var Y=(e,r,n)=>pe(e,typeof r!="symbol"?r+"":r,n);var Q=class extends Error{constructor(n,t={}){let{cause:o,context:i}=t;super(n,{cause:o});Y(this,"context");this.name=this.constructor.name,this.context=i}};var lr=class extends Q{};var cr=class extends lr{constructor(){super(...arguments);Y(this,"message","An error occured while trying to compress the data")}};var Hr={},me=function(e,r,n,t,o){var i=new Worker(Hr[r]||(Hr[r]=URL.createObjectURL(new Blob([e+';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'],{type:"text/javascript"}))));return i.onmessage=function(a){var s=a.data,h=s.$e$;if(h){var f=new Error(h[0]);f.code=h[1],f.stack=h[2],o(f,null)}else o(null,s)},i.postMessage(n,t),i},S=Uint8Array,b=Uint16Array,wr=Int32Array,Er=new S([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),xr=new S([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),zr=new S([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),$r=function(e,r){for(var n=new b(31),t=0;t<31;++t)n[t]=r+=1<>1|(g&21845)<<1,K=(K&52428)>>2|(K&13107)<<2,K=(K&61680)>>4|(K&3855)<<4,gr[g]=((K&65280)>>8|(K&255)<<8)>>1;var K,g,or=function(e,r,n){for(var t=e.length,o=0,i=new b(r);o>h]=f}else for(s=new b(t),o=0;o>15-e[o]);return s},X=new S(288);for(g=0;g<144;++g)X[g]=8;var g;for(g=144;g<256;++g)X[g]=9;var g;for(g=256;g<280;++g)X[g]=7;var g;for(g=280;g<288;++g)X[g]=8;var g,fr=new S(32);for(g=0;g<32;++g)fr[g]=5;var g,Qr=or(X,9,0);var Xr=or(fr,5,0);var Rr=function(e){return(e+7)/8|0},Lr=function(e,r,n){return(r==null||r<0)&&(r=0),(n==null||n>e.length)&&(n=e.length),new S(e.subarray(r,n))};var ye=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],ar=function(e,r,n){var t=new Error(r||ye[e]);if(t.code=e,Error.captureStackTrace&&Error.captureStackTrace(t,ar),!n)throw t;return t};var J=function(e,r,n){n<<=r&7;var t=r/8|0;e[t]|=n,e[t+1]|=n>>8},tr=function(e,r,n){n<<=r&7;var t=r/8|0;e[t]|=n,e[t+1]|=n>>8,e[t+2]|=n>>16},pr=function(e,r){for(var n=[],t=0;tE&&(E=i[t].s);var l=new b(E+1),x=yr(n[u-1],l,0);if(x>r){var t=0,y=0,w=x-r,z=1<r)y+=z-(1<>=w;y>0;){var T=i[t].s;l[T]=0&&y;--t){var p=i[t].s;l[p]==r&&(--l[p],++y)}x=r}return{t:new S(l),l:x}},yr=function(e,r,n){return e.s==-1?Math.max(yr(e.l,r,n+1),yr(e.r,r,n+1)):r[e.s]=n},Ir=function(e){for(var r=e.length;r&&!e[--r];);for(var n=new b(++r),t=0,o=e[0],i=1,a=function(h){n[t++]=h},s=1;s<=r;++s)if(e[s]==o&&s!=r)++i;else{if(!o&&i>2){for(;i>138;i-=138)a(32754);i>2&&(a(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(a(o),--i;i>6;i-=6)a(8304);i>2&&(a(i-3<<5|8208),i=0)}for(;i--;)a(o);i=1,o=e[s]}return{c:n.subarray(0,t),n:r}},ir=function(e,r){for(var n=0,t=0;t>8,e[o+2]=e[o]^255,e[o+3]=e[o+1]^255;for(var i=0;i4&&!O[zr[R-1]];--R);var q=f+5<<3,U=ir(o,X)+ir(i,fr)+a,L=ir(o,E)+ir(i,y)+a+14+3*R+ir(A,O)+2*A[16]+3*A[17]+7*A[18];if(h>=0&&q<=U&&q<=L)return Mr(r,u,e.subarray(h,h+f));var F,D,W,j;if(J(r,u,1+(L15&&(J(r,u,er[v]>>5&127),u+=er[v]>>12)}}else F=Qr,D=X,W=Xr,j=fr;for(var v=0;v255){var H=M>>18&31;tr(r,u,F[H+257]),u+=D[H+257],H>7&&(J(r,u,M>>23&31),u+=Er[H]);var nr=M&31;tr(r,u,W[nr]),u+=j[nr],nr>3&&(tr(r,u,M>>5&8191),u+=xr[nr])}else tr(r,u,F[M]),u+=D[M]}return tr(r,u,F[256]),u+D[256]},Vr=new wr([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Pr=new S(0),re=function(e,r,n,t,o,i){var a=i.z||e.length,s=new S(t+a+5*(1+Math.ceil(a/7e3))+o),h=s.subarray(t,s.length-o),f=i.l,u=(i.r||0)&7;if(r){u&&(h[0]=i.r>>3);for(var m=Vr[r-1],E=m>>13,l=m&8191,x=(1<7e3||O>24576)&&(F>423||!f)){u=Ur(e,h,0,p,d,I,v,O,R,c-R,u),O=A=v=0,R=c;for(var D=0;D<286;++D)d[D]=0;for(var D=0;D<30;++D)I[D]=0}var W=2,j=0,Dr=l,Z=U-L&32767;if(F>2&&q==T(c-Z))for(var ur=Math.min(E,F)-1,er=Math.min(32767,c),H=Math.min(258,F);Z<=er&&--Dr&&U!=L;){if(e[c+W]==e[c+W-Z]){for(var M=0;MW){if(W=M,j=Z,M>ur)break;for(var nr=Math.min(Z,M-2),_r=0,D=0;D_r&&(_r=Br,L=dr)}}}U=L,L=y[U],Z+=U-L&32767}if(j){p[O++]=268435456|mr[W]<<18|Tr[j];var Wr=mr[W]&31,Zr=Tr[j]&31;v+=Er[Wr]+xr[Zr],++d[257+Wr],++I[Zr],N=c+W,++A}else p[O++]=e[c],++d[e[c]]}}for(c=Math.max(c,N);c=a&&(h[u/8|0]=f,Or=a),u=Mr(h,u+1,e.subarray(c,Or))}i.i=a}return Lr(s,0,t+Rr(u)+o)},we=function(){for(var e=new Int32Array(256),r=0;r<256;++r){for(var n=r,t=9;--t;)n=(n&1&&-306674912)^n>>>1;e[r]=n}return e}(),Ee=function(){var e=-1;return{p:function(r){for(var n=e,t=0;t>>8;e=n},d:function(){return~e}}};var ee=function(e,r,n,t,o){if(!o&&(o={l:1},r.dictionary)){var i=r.dictionary.subarray(-32768),a=new S(i.length+e.length);a.set(i),a.set(e,i.length),e=a,o.w=i.length}return re(e,r.level==null?6:r.level,r.mem==null?o.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+r.mem,n,t,o)},br=function(e,r){var n={};for(var t in e)n[t]=e[t];for(var t in r)n[t]=r[t];return n},Jr=function(e,r,n){for(var t=e(),o=e.toString(),i=o.slice(o.indexOf("[")+1,o.lastIndexOf("]")).replace(/\s+/g,"").split(","),a=0;a>>=8};function Oe(e,r,n){return n||(n=r,r={}),typeof n!="function"&&ar(7),de(e,r,[De],function(t){return ne(Fr(t.data[0],t.data[1]))},0,n)}function Fr(e,r){return ee(e,r||{},0,0)}var te=function(e,r,n,t){for(var o in e){var i=e[o],a=r+o,s=t;Array.isArray(i)&&(s=br(t,i[1]),i=i[0]),i instanceof S?n[a]=[i,s]:(n[a+="/"]=[new S(0),s],te(i,a,n,t))}},Gr=typeof TextEncoder<"u"&&new TextEncoder,Se=typeof TextDecoder<"u"&&new TextDecoder,ze=0;try{Se.decode(Pr,{stream:!0}),ze=1}catch{}function Nr(e,r){if(r){for(var n=new S(e.length),t=0;t>1)),a=0,s=function(u){i[a++]=u},t=0;ti.length){var h=new S(a+8+(o-t<<1));h.set(i),i=h}var f=e.charCodeAt(t);f<128||r?s(f):f<2048?(s(192|f>>6),s(128|f&63)):f>55295&&f<57344?(f=65536+(f&1047552)|e.charCodeAt(++t)&1023,s(240|f>>18),s(128|f>>12&63),s(128|f>>6&63),s(128|f&63)):(s(224|f>>12),s(128|f>>6&63),s(128|f&63))}return Lr(i,0,a)}var Cr=function(e){var r=0;if(e)for(var n in e){var t=e[n].length;t>65535&&ar(9),r+=t+4}return r},qr=function(e,r,n,t,o,i,a,s){var h=t.length,f=n.extra,u=s&&s.length,m=Cr(f);C(e,r,a!=null?33639248:67324752),r+=4,a!=null&&(e[r++]=20,e[r++]=n.os),e[r]=20,r+=2,e[r++]=n.flag<<1|(i<0&&8),e[r++]=o&&8,e[r++]=n.compression&255,e[r++]=n.compression>>8;var E=new Date(n.mtime==null?Date.now():n.mtime),l=E.getFullYear()-1980;if((l<0||l>119)&&ar(10),C(e,r,l<<25|E.getMonth()+1<<21|E.getDate()<<16|E.getHours()<<11|E.getMinutes()<<5|E.getSeconds()>>1),r+=4,i!=-1&&(C(e,r,n.crc),C(e,r+4,i<0?-i-2:i),C(e,r+8,n.size)),C(e,r+12,h),C(e,r+14,m),r+=16,a!=null&&(C(e,r,u),C(e,r+6,n.attrs),C(e,r+10,a),r+=14),e.set(t,r),r+=h,m)for(var x in f){var y=f[x],w=y.length;C(e,r,+x),C(e,r+2,w),e.set(y,r+4),r+=4+w}return u&&(e.set(s,r),r+=u),r},Te=function(e,r,n,t,o){C(e,r,101010256),C(e,r+8,n),C(e,r+10,n),C(e,r+12,t),C(e,r+16,o)};function ie(e,r,n){n||(n=r,r={}),typeof n!="function"&&ar(7);var t={};te(e,"",t,r);var o=Object.keys(t),i=o.length,a=0,s=0,h=i,f=new Array(i),u=[],m=function(){for(var w=0;w65535&&U(ar(11,0,1),null),!q)U(null,T);else if(I<16e4)try{U(null,Fr(T,p))}catch(L){U(L,null)}else u.push(Oe(T,p,U))},y=0;y{let t=r.isOk()?{type:"Ok",value:r.value}:{type:"Err",value:r.error},o=n.withStackTrace?new Error().stack:void 0;return{data:t,message:e,stack:o}};function sr(e,r,n,t){function o(i){return i instanceof n?i:new n(function(a){a(i)})}return new(n||(n=Promise))(function(i,a){function s(u){try{f(t.next(u))}catch(m){a(m)}}function h(u){try{f(t.throw(u))}catch(m){a(m)}}function f(u){u.done?i(u.value):o(u.value).then(s,h)}f((t=t.apply(e,r||[])).next())})}function oe(e){var r=typeof Symbol=="function"&&Symbol.iterator,n=r&&e[r],t=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&t>=e.length&&(e=void 0),{value:e&&e[t++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}function G(e){return this instanceof G?(this.v=e,this):new G(e)}function ae(e,r,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=n.apply(e,r||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",a),o[Symbol.asyncIterator]=function(){return this},o;function a(l){return function(x){return Promise.resolve(x).then(l,m)}}function s(l,x){t[l]&&(o[l]=function(y){return new Promise(function(w,z){i.push([l,y,w,z])>1||h(l,y)})},x&&(o[l]=x(o[l])))}function h(l,x){try{f(t[l](x))}catch(y){E(i[0][3],y)}}function f(l){l.value instanceof G?Promise.resolve(l.value.v).then(u,m):E(i[0][2],l)}function u(l){h("next",l)}function m(l){h("throw",l)}function E(l,x){l(x),i.shift(),i.length&&h(i[0][0],i[0][1])}}function Ue(e){var r,n;return r={},t("next"),t("throw",function(o){throw o}),t("return"),r[Symbol.iterator]=function(){return this},r;function t(o,i){r[o]=e[o]?function(a){return(n=!n)?{value:G(e[o](a)),done:!1}:i?i(a):a}:i}}function Ce(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=e[Symbol.asyncIterator],n;return r?r.call(e):(e=typeof oe=="function"?oe(e):e[Symbol.iterator](),n={},t("next"),t("throw"),t("return"),n[Symbol.asyncIterator]=function(){return this},n);function t(i){n[i]=e[i]&&function(a){return new Promise(function(s,h){a=e[i](a),o(s,h,a.done,a.value)})}}function o(i,a,s,h){Promise.resolve(h).then(function(f){i({value:f,done:s})},a)}}var k=class e{constructor(r){this._promise=r}static fromSafePromise(r){let n=r.then(t=>new _(t));return new e(n)}static fromPromise(r,n){let t=r.then(o=>new _(o)).catch(o=>new B(n(o)));return new e(t)}static fromThrowable(r,n){return(...t)=>new e(sr(this,void 0,void 0,function*(){try{return new _(yield r(...t))}catch(o){return new B(n?n(o):o)}}))}static combine(r){return Re(r)}static combineWithAllErrors(r){return Le(r)}map(r){return new e(this._promise.then(n=>sr(this,void 0,void 0,function*(){return n.isErr()?new B(n.error):new _(yield r(n.value))})))}andThrough(r){return new e(this._promise.then(n=>sr(this,void 0,void 0,function*(){if(n.isErr())return new B(n.error);let t=yield r(n.value);return t.isErr()?new B(t.error):new _(n.value)})))}andTee(r){return new e(this._promise.then(n=>sr(this,void 0,void 0,function*(){if(n.isErr())return new B(n.error);try{yield r(n.value)}catch{}return new _(n.value)})))}mapErr(r){return new e(this._promise.then(n=>sr(this,void 0,void 0,function*(){return n.isOk()?new _(n.value):new B(yield r(n.error))})))}andThen(r){return new e(this._promise.then(n=>{if(n.isErr())return new B(n.error);let t=r(n.value);return t instanceof e?t._promise:t}))}orElse(r){return new e(this._promise.then(n=>sr(this,void 0,void 0,function*(){return n.isErr()?r(n.error):new _(n.value)})))}match(r,n){return this._promise.then(t=>t.match(r,n))}unwrapOr(r){return this._promise.then(n=>n.unwrapOr(r))}safeUnwrap(){return ae(this,arguments,function*(){return yield G(yield G(yield*Ue(Ce(yield G(this._promise.then(n=>n.safeUnwrap()))))))})}then(r,n){return this._promise.then(r,n)}[Symbol.asyncIterator](){return ae(this,arguments,function*(){let n=yield G(this._promise);return n.isErr()&&(yield yield G(V(n.error))),yield G(n.value)})}},ue=e=>new k(Promise.resolve(new _(e))),V=e=>new k(Promise.resolve(new B(e))),Ge=k.fromPromise,Ne=k.fromSafePromise,qe=k.fromThrowable,fe=e=>{let r=rr([]);for(let n of e)if(n.isErr()){r=$(n.error);break}else r.map(t=>t.push(n.value));return r},Re=e=>k.fromSafePromise(Promise.all(e)).andThen(fe),he=e=>{let r=rr([]);for(let n of e)n.isErr()&&r.isErr()?r.error.push(n.error):n.isErr()&&r.isOk()?r=$([n.error]):n.isOk()&&r.isOk()&&r.value.push(n.value);return r},Le=e=>k.fromSafePromise(Promise.all(e)).andThen(he),kr;(function(e){function r(o,i){return(...a)=>{try{let s=o(...a);return rr(s)}catch(s){return $(i?i(s):s)}}}e.fromThrowable=r;function n(o){return fe(o)}e.combine=n;function t(o){return he(o)}e.combineWithAllErrors=t})(kr||(kr={}));var rr=e=>new _(e);function $(e){return new B(e)}var _=class{constructor(r){this.value=r}isOk(){return!0}isErr(){return!this.isOk()}map(r){return rr(r(this.value))}mapErr(r){return rr(this.value)}andThen(r){return r(this.value)}andThrough(r){return r(this.value).map(n=>this.value)}andTee(r){try{r(this.value)}catch{}return rr(this.value)}orElse(r){return rr(this.value)}asyncAndThen(r){return r(this.value)}asyncAndThrough(r){return r(this.value).map(()=>this.value)}asyncMap(r){return k.fromSafePromise(r(this.value))}unwrapOr(r){return this.value}match(r,n){return r(this.value)}safeUnwrap(){let r=this.value;return function*(){return r}()}_unsafeUnwrap(r){return this.value}_unsafeUnwrapErr(r){throw se("Called `_unsafeUnwrapErr` on an Ok",this,r)}*[Symbol.iterator](){return this.value}},B=class{constructor(r){this.error=r}isOk(){return!1}isErr(){return!this.isOk()}map(r){return $(this.error)}mapErr(r){return $(r(this.error))}andThrough(r){return $(this.error)}andTee(r){return $(this.error)}andThen(r){return $(this.error)}orElse(r){return r(this.error)}asyncAndThen(r){return V(this.error)}asyncAndThrough(r){return V(this.error)}asyncMap(r){return V(this.error)}unwrapOr(r){return r}match(r,n){return n(this.error)}safeUnwrap(){let r=this.error;return function*(){throw yield $(r),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(r){throw se("Called `_unsafeUnwrap` on an Err",this,r)}_unsafeUnwrapErr(r){return this.error}*[Symbol.iterator](){let r=this;return yield r,r}},Ke=kr.fromThrowable;var Ar=class extends Q{};var hr=class extends Ar{constructor(){super(...arguments);Y(this,"message","Parameter must be defined")}};var le=e=>{if(e instanceof Error)return e;let r="[Unable to stringify the thrown value]";try{r=JSON.stringify(e)}catch{}return new Error(r)};self.onmessage=e=>{Me(e.data).map(r=>{self.postMessage({event:"ARCHIVE_CREATED",buffer:r.buffer},[r.buffer])}).mapErr(r=>{self.postMessage({event:"OPERATION_FAILED",error:r})})};var Me=e=>{let{archive:r}=e.args;if(r){let n=()=>new Promise((t,o)=>{r.entries?ie(r.entries,(i,a)=>{i&&o(i),t(a)}):o(new hr("archive.entries must be defined"))});return k.fromPromise(n(),t=>t).andThen(t=>ue(t)).orElse(t=>V(new cr(void 0,{cause:le(t)})))}else return V(new hr("archive must be defined"))}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2Vycm9yL2Jhc2UtZXJyb3IudHMiLCAiLi4vLi4vc3JjL2Vycm9yL3ppcC96aXAtZXJyb3IudHMiLCAiLi4vLi4vc3JjL2Vycm9yL3ppcC96aXAtY29tcHJlc3Npb24tZXJyb3IudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2ZmbGF0ZUAwLjguMi9ub2RlX21vZHVsZXMvZmZsYXRlL2VzbS9icm93c2VyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9uZXZlcnRocm93QDguMS4xL25vZGVfbW9kdWxlcy9uZXZlcnRocm93L2Rpc3QvaW5kZXguZXMuanMiLCAiLi4vLi4vc3JjL2Vycm9yL3dvcmtlci93b3JrZXItZXJyb3IudHMiLCAiLi4vLi4vc3JjL2Vycm9yL3dvcmtlci93b3JrZXItdW5kZWZpbmVkLXBhcmFtZXRlci1lcnJvci50cyIsICIuLi8uLi9zcmMvdXRpbHMudHMiLCAiLi4vLi4vc3JjL3dvcmtlci9jb21wcmVzcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidHlwZSBKc29uYWJsZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IG51bGxcbiAgfCB1bmRlZmluZWRcbiAgfCByZWFkb25seSBKc29uYWJsZVtdXG4gIHwgeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBKc29uYWJsZSB9XG4gIHwgeyB0b0pTT04oKTogSnNvbmFibGUgfTtcblxuZXhwb3J0IGNsYXNzIEJhc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ/OiBKc29uYWJsZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgY2F1c2U/OiBFcnJvcjsgY29udGV4dD86IEpzb25hYmxlIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgeyBjYXVzZSwgY29udGV4dCB9ID0gb3B0aW9ucztcblxuICAgIHN1cGVyKG1lc3NhZ2UsIHsgY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFppcEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgWmlwRXJyb3IgfSBmcm9tIFwifi9lcnJvci96aXAvemlwLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBaaXBDb21wcmVzc2lvbkVycm9yIGV4dGVuZHMgWmlwRXJyb3Ige1xuICBvdmVycmlkZSBtZXNzYWdlID0gXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byBjb21wcmVzcyB0aGUgZGF0YVwiO1xufVxuIiwgIi8vIERFRkxBVEUgaXMgYSBjb21wbGV4IGZvcm1hdDsgdG8gcmVhZCB0aGlzIGNvZGUsIHlvdSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIFJGQyBmaXJzdDpcbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxXG4vLyBZb3UgbWF5IGFsc28gd2lzaCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZ3VpZGUgSSBtYWRlIGFib3V0IHRoaXMgcHJvZ3JhbTpcbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzEwMWFycm93ei8yNTNmMzFlYjVhYmMzZDkyNzVhYjk0MzAwM2ZmZWNhZFxuLy8gU29tZSBvZiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgc2ltaWxhciB0byB0aGF0IG9mIFVaSVAuanM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9wZWEvVVpJUC5qc1xuLy8gSG93ZXZlciwgdGhlIHZhc3QgbWFqb3JpdHkgb2YgdGhlIGNvZGViYXNlIGhhcyBkaXZlcmdlZCBmcm9tIFVaSVAuanMgdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UgYW5kIHJlZHVjZSBidW5kbGUgc2l6ZS5cbi8vIFNvbWV0aW1lcyAwIHdpbGwgYXBwZWFyIHdoZXJlIC0xIHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUuIFRoaXMgaXMgYmVjYXVzZSB1c2luZyBhIHVpbnRcbi8vIGlzIGJldHRlciBmb3IgbWVtb3J5IGluIG1vc3QgZW5naW5lcyAoSSAqdGhpbmsqKS5cbnZhciBjaDIgPSB7fTtcbnZhciB3ayA9IChmdW5jdGlvbiAoYywgaWQsIG1zZywgdHJhbnNmZXIsIGNiKSB7XG4gICAgdmFyIHcgPSBuZXcgV29ya2VyKGNoMltpZF0gfHwgKGNoMltpZF0gPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtcbiAgICAgICAgYyArICc7YWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsZnVuY3Rpb24oZSl7ZT1lLmVycm9yO3Bvc3RNZXNzYWdlKHskZSQ6W2UubWVzc2FnZSxlLmNvZGUsZS5zdGFja119KX0pJ1xuICAgIF0sIHsgdHlwZTogJ3RleHQvamF2YXNjcmlwdCcgfSkpKSk7XG4gICAgdy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgZCA9IGUuZGF0YSwgZWQgPSBkLiRlJDtcbiAgICAgICAgaWYgKGVkKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKGVkWzBdKTtcbiAgICAgICAgICAgIGVyclsnY29kZSddID0gZWRbMV07XG4gICAgICAgICAgICBlcnIuc3RhY2sgPSBlZFsyXTtcbiAgICAgICAgICAgIGNiKGVyciwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY2IobnVsbCwgZCk7XG4gICAgfTtcbiAgICB3LnBvc3RNZXNzYWdlKG1zZywgdHJhbnNmZXIpO1xuICAgIHJldHVybiB3O1xufSk7XG5cbi8vIGFsaWFzZXMgZm9yIHNob3J0ZXIgY29tcHJlc3NlZCBjb2RlIChtb3N0IG1pbmlmZXJzIGRvbid0IGRvIHRoaXMpXG52YXIgdTggPSBVaW50OEFycmF5LCB1MTYgPSBVaW50MTZBcnJheSwgaTMyID0gSW50MzJBcnJheTtcbi8vIGZpeGVkIGxlbmd0aCBleHRyYSBiaXRzXG52YXIgZmxlYiA9IG5ldyB1OChbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSwgMCwgLyogdW51c2VkICovIDAsIDAsIC8qIGltcG9zc2libGUgKi8gMF0pO1xuLy8gZml4ZWQgZGlzdGFuY2UgZXh0cmEgYml0c1xudmFyIGZkZWIgPSBuZXcgdTgoWzAsIDAsIDAsIDAsIDEsIDEsIDIsIDIsIDMsIDMsIDQsIDQsIDUsIDUsIDYsIDYsIDcsIDcsIDgsIDgsIDksIDksIDEwLCAxMCwgMTEsIDExLCAxMiwgMTIsIDEzLCAxMywgLyogdW51c2VkICovIDAsIDBdKTtcbi8vIGNvZGUgbGVuZ3RoIGluZGV4IG1hcFxudmFyIGNsaW0gPSBuZXcgdTgoWzE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTVdKTtcbi8vIGdldCBiYXNlLCByZXZlcnNlIGluZGV4IG1hcCBmcm9tIGV4dHJhIGJpdHNcbnZhciBmcmViID0gZnVuY3Rpb24gKGViLCBzdGFydCkge1xuICAgIHZhciBiID0gbmV3IHUxNigzMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMTsgKytpKSB7XG4gICAgICAgIGJbaV0gPSBzdGFydCArPSAxIDw8IGViW2kgLSAxXTtcbiAgICB9XG4gICAgLy8gbnVtYmVycyBoZXJlIGFyZSBhdCBtYXggMTggYml0c1xuICAgIHZhciByID0gbmV3IGkzMihiWzMwXSk7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCAzMDsgKytpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBiW2ldOyBqIDwgYltpICsgMV07ICsraikge1xuICAgICAgICAgICAgcltqXSA9ICgoaiAtIGJbaV0pIDw8IDUpIHwgaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBiOiBiLCByOiByIH07XG59O1xudmFyIF9hID0gZnJlYihmbGViLCAyKSwgZmwgPSBfYS5iLCByZXZmbCA9IF9hLnI7XG4vLyB3ZSBjYW4gaWdub3JlIHRoZSBmYWN0IHRoYXQgdGhlIG90aGVyIG51bWJlcnMgYXJlIHdyb25nOyB0aGV5IG5ldmVyIGhhcHBlbiBhbnl3YXlcbmZsWzI4XSA9IDI1OCwgcmV2ZmxbMjU4XSA9IDI4O1xudmFyIF9iID0gZnJlYihmZGViLCAwKSwgZmQgPSBfYi5iLCByZXZmZCA9IF9iLnI7XG4vLyBtYXAgb2YgdmFsdWUgdG8gcmV2ZXJzZSAoYXNzdW1pbmcgMTYgYml0cylcbnZhciByZXYgPSBuZXcgdTE2KDMyNzY4KTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMzI3Njg7ICsraSkge1xuICAgIC8vIHJldmVyc2UgdGFibGUgYWxnb3JpdGhtIGZyb20gU09cbiAgICB2YXIgeCA9ICgoaSAmIDB4QUFBQSkgPj4gMSkgfCAoKGkgJiAweDU1NTUpIDw8IDEpO1xuICAgIHggPSAoKHggJiAweENDQ0MpID4+IDIpIHwgKCh4ICYgMHgzMzMzKSA8PCAyKTtcbiAgICB4ID0gKCh4ICYgMHhGMEYwKSA+PiA0KSB8ICgoeCAmIDB4MEYwRikgPDwgNCk7XG4gICAgcmV2W2ldID0gKCgoeCAmIDB4RkYwMCkgPj4gOCkgfCAoKHggJiAweDAwRkYpIDw8IDgpKSA+PiAxO1xufVxuLy8gY3JlYXRlIGh1ZmZtYW4gdHJlZSBmcm9tIHU4IFwibWFwXCI6IGluZGV4IC0+IGNvZGUgbGVuZ3RoIGZvciBjb2RlIGluZGV4XG4vLyBtYiAobWF4IGJpdHMpIG11c3QgYmUgYXQgbW9zdCAxNVxuLy8gVE9ETzogb3B0aW1pemUvc3BsaXQgdXA/XG52YXIgaE1hcCA9IChmdW5jdGlvbiAoY2QsIG1iLCByKSB7XG4gICAgdmFyIHMgPSBjZC5sZW5ndGg7XG4gICAgLy8gaW5kZXhcbiAgICB2YXIgaSA9IDA7XG4gICAgLy8gdTE2IFwibWFwXCI6IGluZGV4IC0+ICMgb2YgY29kZXMgd2l0aCBiaXQgbGVuZ3RoID0gaW5kZXhcbiAgICB2YXIgbCA9IG5ldyB1MTYobWIpO1xuICAgIC8vIGxlbmd0aCBvZiBjZCBtdXN0IGJlIDI4OCAodG90YWwgIyBvZiBjb2RlcylcbiAgICBmb3IgKDsgaSA8IHM7ICsraSkge1xuICAgICAgICBpZiAoY2RbaV0pXG4gICAgICAgICAgICArK2xbY2RbaV0gLSAxXTtcbiAgICB9XG4gICAgLy8gdTE2IFwibWFwXCI6IGluZGV4IC0+IG1pbmltdW0gY29kZSBmb3IgYml0IGxlbmd0aCA9IGluZGV4XG4gICAgdmFyIGxlID0gbmV3IHUxNihtYik7XG4gICAgZm9yIChpID0gMTsgaSA8IG1iOyArK2kpIHtcbiAgICAgICAgbGVbaV0gPSAobGVbaSAtIDFdICsgbFtpIC0gMV0pIDw8IDE7XG4gICAgfVxuICAgIHZhciBjbztcbiAgICBpZiAocikge1xuICAgICAgICAvLyB1MTYgXCJtYXBcIjogaW5kZXggLT4gbnVtYmVyIG9mIGFjdHVhbCBiaXRzLCBzeW1ib2wgZm9yIGNvZGVcbiAgICAgICAgY28gPSBuZXcgdTE2KDEgPDwgbWIpO1xuICAgICAgICAvLyBiaXRzIHRvIHJlbW92ZSBmb3IgcmV2ZXJzZXJcbiAgICAgICAgdmFyIHJ2YiA9IDE1IC0gbWI7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSAwIGxlbmd0aHNcbiAgICAgICAgICAgIGlmIChjZFtpXSkge1xuICAgICAgICAgICAgICAgIC8vIG51bSBlbmNvZGluZyBib3RoIHN5bWJvbCBhbmQgYml0cyByZWFkXG4gICAgICAgICAgICAgICAgdmFyIHN2ID0gKGkgPDwgNCkgfCBjZFtpXTtcbiAgICAgICAgICAgICAgICAvLyBmcmVlIGJpdHNcbiAgICAgICAgICAgICAgICB2YXIgcl8xID0gbWIgLSBjZFtpXTtcbiAgICAgICAgICAgICAgICAvLyBzdGFydCB2YWx1ZVxuICAgICAgICAgICAgICAgIHZhciB2ID0gbGVbY2RbaV0gLSAxXSsrIDw8IHJfMTtcbiAgICAgICAgICAgICAgICAvLyBtIGlzIGVuZCB2YWx1ZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIG0gPSB2IHwgKCgxIDw8IHJfMSkgLSAxKTsgdiA8PSBtOyArK3YpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXZlcnkgMTYgYml0IHZhbHVlIHN0YXJ0aW5nIHdpdGggdGhlIGNvZGUgeWllbGRzIHRoZSBzYW1lIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICBjb1tyZXZbdl0gPj4gcnZiXSA9IHN2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY28gPSBuZXcgdTE2KHMpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgczsgKytpKSB7XG4gICAgICAgICAgICBpZiAoY2RbaV0pIHtcbiAgICAgICAgICAgICAgICBjb1tpXSA9IHJldltsZVtjZFtpXSAtIDFdKytdID4+ICgxNSAtIGNkW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY287XG59KTtcbi8vIGZpeGVkIGxlbmd0aCB0cmVlXG52YXIgZmx0ID0gbmV3IHU4KDI4OCk7XG5mb3IgKHZhciBpID0gMDsgaSA8IDE0NDsgKytpKVxuICAgIGZsdFtpXSA9IDg7XG5mb3IgKHZhciBpID0gMTQ0OyBpIDwgMjU2OyArK2kpXG4gICAgZmx0W2ldID0gOTtcbmZvciAodmFyIGkgPSAyNTY7IGkgPCAyODA7ICsraSlcbiAgICBmbHRbaV0gPSA3O1xuZm9yICh2YXIgaSA9IDI4MDsgaSA8IDI4ODsgKytpKVxuICAgIGZsdFtpXSA9IDg7XG4vLyBmaXhlZCBkaXN0YW5jZSB0cmVlXG52YXIgZmR0ID0gbmV3IHU4KDMyKTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMzI7ICsraSlcbiAgICBmZHRbaV0gPSA1O1xuLy8gZml4ZWQgbGVuZ3RoIG1hcFxudmFyIGZsbSA9IC8qI19fUFVSRV9fKi8gaE1hcChmbHQsIDksIDApLCBmbHJtID0gLyojX19QVVJFX18qLyBoTWFwKGZsdCwgOSwgMSk7XG4vLyBmaXhlZCBkaXN0YW5jZSBtYXBcbnZhciBmZG0gPSAvKiNfX1BVUkVfXyovIGhNYXAoZmR0LCA1LCAwKSwgZmRybSA9IC8qI19fUFVSRV9fKi8gaE1hcChmZHQsIDUsIDEpO1xuLy8gZmluZCBtYXggb2YgYXJyYXlcbnZhciBtYXggPSBmdW5jdGlvbiAoYSkge1xuICAgIHZhciBtID0gYVswXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGFbaV0gPiBtKVxuICAgICAgICAgICAgbSA9IGFbaV07XG4gICAgfVxuICAgIHJldHVybiBtO1xufTtcbi8vIHJlYWQgZCwgc3RhcnRpbmcgYXQgYml0IHAgYW5kIG1hc2sgd2l0aCBtXG52YXIgYml0cyA9IGZ1bmN0aW9uIChkLCBwLCBtKSB7XG4gICAgdmFyIG8gPSAocCAvIDgpIHwgMDtcbiAgICByZXR1cm4gKChkW29dIHwgKGRbbyArIDFdIDw8IDgpKSA+PiAocCAmIDcpKSAmIG07XG59O1xuLy8gcmVhZCBkLCBzdGFydGluZyBhdCBiaXQgcCBjb250aW51aW5nIGZvciBhdCBsZWFzdCAxNiBiaXRzXG52YXIgYml0czE2ID0gZnVuY3Rpb24gKGQsIHApIHtcbiAgICB2YXIgbyA9IChwIC8gOCkgfCAwO1xuICAgIHJldHVybiAoKGRbb10gfCAoZFtvICsgMV0gPDwgOCkgfCAoZFtvICsgMl0gPDwgMTYpKSA+PiAocCAmIDcpKTtcbn07XG4vLyBnZXQgZW5kIG9mIGJ5dGVcbnZhciBzaGZ0ID0gZnVuY3Rpb24gKHApIHsgcmV0dXJuICgocCArIDcpIC8gOCkgfCAwOyB9O1xuLy8gdHlwZWQgYXJyYXkgc2xpY2UgLSBhbGxvd3MgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gZnJlZSBvcmlnaW5hbCByZWZlcmVuY2UsXG4vLyB3aGlsZSBiZWluZyBtb3JlIGNvbXBhdGlibGUgdGhhbiAuc2xpY2VcbnZhciBzbGMgPSBmdW5jdGlvbiAodiwgcywgZSkge1xuICAgIGlmIChzID09IG51bGwgfHwgcyA8IDApXG4gICAgICAgIHMgPSAwO1xuICAgIGlmIChlID09IG51bGwgfHwgZSA+IHYubGVuZ3RoKVxuICAgICAgICBlID0gdi5sZW5ndGg7XG4gICAgLy8gY2FuJ3QgdXNlIC5jb25zdHJ1Y3RvciBpbiBjYXNlIHVzZXItc3VwcGxpZWRcbiAgICByZXR1cm4gbmV3IHU4KHYuc3ViYXJyYXkocywgZSkpO1xufTtcbi8qKlxuICogQ29kZXMgZm9yIGVycm9ycyBnZW5lcmF0ZWQgd2l0aGluIHRoaXMgbGlicmFyeVxuICovXG5leHBvcnQgdmFyIEZsYXRlRXJyb3JDb2RlID0ge1xuICAgIFVuZXhwZWN0ZWRFT0Y6IDAsXG4gICAgSW52YWxpZEJsb2NrVHlwZTogMSxcbiAgICBJbnZhbGlkTGVuZ3RoTGl0ZXJhbDogMixcbiAgICBJbnZhbGlkRGlzdGFuY2U6IDMsXG4gICAgU3RyZWFtRmluaXNoZWQ6IDQsXG4gICAgTm9TdHJlYW1IYW5kbGVyOiA1LFxuICAgIEludmFsaWRIZWFkZXI6IDYsXG4gICAgTm9DYWxsYmFjazogNyxcbiAgICBJbnZhbGlkVVRGODogOCxcbiAgICBFeHRyYUZpZWxkVG9vTG9uZzogOSxcbiAgICBJbnZhbGlkRGF0ZTogMTAsXG4gICAgRmlsZW5hbWVUb29Mb25nOiAxMSxcbiAgICBTdHJlYW1GaW5pc2hpbmc6IDEyLFxuICAgIEludmFsaWRaaXBEYXRhOiAxMyxcbiAgICBVbmtub3duQ29tcHJlc3Npb25NZXRob2Q6IDE0XG59O1xuLy8gZXJyb3IgY29kZXNcbnZhciBlYyA9IFtcbiAgICAndW5leHBlY3RlZCBFT0YnLFxuICAgICdpbnZhbGlkIGJsb2NrIHR5cGUnLFxuICAgICdpbnZhbGlkIGxlbmd0aC9saXRlcmFsJyxcbiAgICAnaW52YWxpZCBkaXN0YW5jZScsXG4gICAgJ3N0cmVhbSBmaW5pc2hlZCcsXG4gICAgJ25vIHN0cmVhbSBoYW5kbGVyJyxcbiAgICAsXG4gICAgJ25vIGNhbGxiYWNrJyxcbiAgICAnaW52YWxpZCBVVEYtOCBkYXRhJyxcbiAgICAnZXh0cmEgZmllbGQgdG9vIGxvbmcnLFxuICAgICdkYXRlIG5vdCBpbiByYW5nZSAxOTgwLTIwOTknLFxuICAgICdmaWxlbmFtZSB0b28gbG9uZycsXG4gICAgJ3N0cmVhbSBmaW5pc2hpbmcnLFxuICAgICdpbnZhbGlkIHppcCBkYXRhJ1xuICAgIC8vIGRldGVybWluZWQgYnkgdW5rbm93biBjb21wcmVzc2lvbiBtZXRob2Rcbl07XG47XG52YXIgZXJyID0gZnVuY3Rpb24gKGluZCwgbXNnLCBudCkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKG1zZyB8fCBlY1tpbmRdKTtcbiAgICBlLmNvZGUgPSBpbmQ7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlLCBlcnIpO1xuICAgIGlmICghbnQpXG4gICAgICAgIHRocm93IGU7XG4gICAgcmV0dXJuIGU7XG59O1xuLy8gZXhwYW5kcyByYXcgREVGTEFURSBkYXRhXG52YXIgaW5mbHQgPSBmdW5jdGlvbiAoZGF0LCBzdCwgYnVmLCBkaWN0KSB7XG4gICAgLy8gc291cmNlIGxlbmd0aCAgICAgICBkaWN0IGxlbmd0aFxuICAgIHZhciBzbCA9IGRhdC5sZW5ndGgsIGRsID0gZGljdCA/IGRpY3QubGVuZ3RoIDogMDtcbiAgICBpZiAoIXNsIHx8IHN0LmYgJiYgIXN0LmwpXG4gICAgICAgIHJldHVybiBidWYgfHwgbmV3IHU4KDApO1xuICAgIHZhciBub0J1ZiA9ICFidWY7XG4gICAgLy8gaGF2ZSB0byBlc3RpbWF0ZSBzaXplXG4gICAgdmFyIHJlc2l6ZSA9IG5vQnVmIHx8IHN0LmkgIT0gMjtcbiAgICAvLyBubyBzdGF0ZVxuICAgIHZhciBub1N0ID0gc3QuaTtcbiAgICAvLyBBc3N1bWVzIHJvdWdobHkgMzMlIGNvbXByZXNzaW9uIHJhdGlvIGF2ZXJhZ2VcbiAgICBpZiAobm9CdWYpXG4gICAgICAgIGJ1ZiA9IG5ldyB1OChzbCAqIDMpO1xuICAgIC8vIGVuc3VyZSBidWZmZXIgY2FuIGZpdCBhdCBsZWFzdCBsIGVsZW1lbnRzXG4gICAgdmFyIGNidWYgPSBmdW5jdGlvbiAobCkge1xuICAgICAgICB2YXIgYmwgPSBidWYubGVuZ3RoO1xuICAgICAgICAvLyBuZWVkIHRvIGluY3JlYXNlIHNpemUgdG8gZml0XG4gICAgICAgIGlmIChsID4gYmwpIHtcbiAgICAgICAgICAgIC8vIERvdWJsZSBvciBzZXQgdG8gbmVjZXNzYXJ5LCB3aGljaGV2ZXIgaXMgZ3JlYXRlclxuICAgICAgICAgICAgdmFyIG5idWYgPSBuZXcgdTgoTWF0aC5tYXgoYmwgKiAyLCBsKSk7XG4gICAgICAgICAgICBuYnVmLnNldChidWYpO1xuICAgICAgICAgICAgYnVmID0gbmJ1ZjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy8gIGxhc3QgY2h1bmsgICAgICAgICBiaXRwb3MgICAgICAgICAgIGJ5dGVzXG4gICAgdmFyIGZpbmFsID0gc3QuZiB8fCAwLCBwb3MgPSBzdC5wIHx8IDAsIGJ0ID0gc3QuYiB8fCAwLCBsbSA9IHN0LmwsIGRtID0gc3QuZCwgbGJ0ID0gc3QubSwgZGJ0ID0gc3QubjtcbiAgICAvLyB0b3RhbCBiaXRzXG4gICAgdmFyIHRidHMgPSBzbCAqIDg7XG4gICAgZG8ge1xuICAgICAgICBpZiAoIWxtKSB7XG4gICAgICAgICAgICAvLyBCRklOQUwgLSB0aGlzIGlzIG9ubHkgMSB3aGVuIGxhc3QgY2h1bmsgaXMgbmV4dFxuICAgICAgICAgICAgZmluYWwgPSBiaXRzKGRhdCwgcG9zLCAxKTtcbiAgICAgICAgICAgIC8vIHR5cGU6IDAgPSBubyBjb21wcmVzc2lvbiwgMSA9IGZpeGVkIGh1ZmZtYW4sIDIgPSBkeW5hbWljIGh1ZmZtYW5cbiAgICAgICAgICAgIHZhciB0eXBlID0gYml0cyhkYXQsIHBvcyArIDEsIDMpO1xuICAgICAgICAgICAgcG9zICs9IDM7XG4gICAgICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICAgICAgICAvLyBnbyB0byBlbmQgb2YgYnl0ZSBib3VuZGFyeVxuICAgICAgICAgICAgICAgIHZhciBzID0gc2hmdChwb3MpICsgNCwgbCA9IGRhdFtzIC0gNF0gfCAoZGF0W3MgLSAzXSA8PCA4KSwgdCA9IHMgKyBsO1xuICAgICAgICAgICAgICAgIGlmICh0ID4gc2wpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vU3QpXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIoMCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbnN1cmUgc2l6ZVxuICAgICAgICAgICAgICAgIGlmIChyZXNpemUpXG4gICAgICAgICAgICAgICAgICAgIGNidWYoYnQgKyBsKTtcbiAgICAgICAgICAgICAgICAvLyBDb3B5IG92ZXIgdW5jb21wcmVzc2VkIGRhdGFcbiAgICAgICAgICAgICAgICBidWYuc2V0KGRhdC5zdWJhcnJheShzLCB0KSwgYnQpO1xuICAgICAgICAgICAgICAgIC8vIEdldCBuZXcgYml0cG9zLCB1cGRhdGUgYnl0ZSBjb3VudFxuICAgICAgICAgICAgICAgIHN0LmIgPSBidCArPSBsLCBzdC5wID0gcG9zID0gdCAqIDgsIHN0LmYgPSBmaW5hbDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMSlcbiAgICAgICAgICAgICAgICBsbSA9IGZscm0sIGRtID0gZmRybSwgbGJ0ID0gOSwgZGJ0ID0gNTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMikge1xuICAgICAgICAgICAgICAgIC8vICBsaXRlcmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aHNcbiAgICAgICAgICAgICAgICB2YXIgaExpdCA9IGJpdHMoZGF0LCBwb3MsIDMxKSArIDI1NywgaGNMZW4gPSBiaXRzKGRhdCwgcG9zICsgMTAsIDE1KSArIDQ7XG4gICAgICAgICAgICAgICAgdmFyIHRsID0gaExpdCArIGJpdHMoZGF0LCBwb3MgKyA1LCAzMSkgKyAxO1xuICAgICAgICAgICAgICAgIHBvcyArPSAxNDtcbiAgICAgICAgICAgICAgICAvLyBsZW5ndGgrZGlzdGFuY2UgdHJlZVxuICAgICAgICAgICAgICAgIHZhciBsZHQgPSBuZXcgdTgodGwpO1xuICAgICAgICAgICAgICAgIC8vIGNvZGUgbGVuZ3RoIHRyZWVcbiAgICAgICAgICAgICAgICB2YXIgY2x0ID0gbmV3IHU4KDE5KTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhjTGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGluZGV4IG1hcCB0byBnZXQgcmVhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgIGNsdFtjbGltW2ldXSA9IGJpdHMoZGF0LCBwb3MgKyBpICogMywgNyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBvcyArPSBoY0xlbiAqIDM7XG4gICAgICAgICAgICAgICAgLy8gY29kZSBsZW5ndGhzIGJpdHNcbiAgICAgICAgICAgICAgICB2YXIgY2xiID0gbWF4KGNsdCksIGNsYm1zayA9ICgxIDw8IGNsYikgLSAxO1xuICAgICAgICAgICAgICAgIC8vIGNvZGUgbGVuZ3RocyBtYXBcbiAgICAgICAgICAgICAgICB2YXIgY2xtID0gaE1hcChjbHQsIGNsYiwgMSk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0bDspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBjbG1bYml0cyhkYXQsIHBvcywgY2xibXNrKV07XG4gICAgICAgICAgICAgICAgICAgIC8vIGJpdHMgcmVhZFxuICAgICAgICAgICAgICAgICAgICBwb3MgKz0gciAmIDE1O1xuICAgICAgICAgICAgICAgICAgICAvLyBzeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSByID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvZGUgbGVuZ3RoIHRvIGNvcHlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMgPCAxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGR0W2krK10gPSBzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGNvcHkgICBjb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSAwLCBuID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID09IDE2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAzICsgYml0cyhkYXQsIHBvcywgMyksIHBvcyArPSAyLCBjID0gbGR0W2kgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHMgPT0gMTcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDMgKyBiaXRzKGRhdCwgcG9zLCA3KSwgcG9zICs9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzID09IDE4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAxMSArIGJpdHMoZGF0LCBwb3MsIDEyNyksIHBvcyArPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4tLSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZHRbaSsrXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgbGVuZ3RoIHRyZWUgICAgICAgICAgICAgICAgIGRpc3RhbmNlIHRyZWVcbiAgICAgICAgICAgICAgICB2YXIgbHQgPSBsZHQuc3ViYXJyYXkoMCwgaExpdCksIGR0ID0gbGR0LnN1YmFycmF5KGhMaXQpO1xuICAgICAgICAgICAgICAgIC8vIG1heCBsZW5ndGggYml0c1xuICAgICAgICAgICAgICAgIGxidCA9IG1heChsdCk7XG4gICAgICAgICAgICAgICAgLy8gbWF4IGRpc3QgYml0c1xuICAgICAgICAgICAgICAgIGRidCA9IG1heChkdCk7XG4gICAgICAgICAgICAgICAgbG0gPSBoTWFwKGx0LCBsYnQsIDEpO1xuICAgICAgICAgICAgICAgIGRtID0gaE1hcChkdCwgZGJ0LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBlcnIoMSk7XG4gICAgICAgICAgICBpZiAocG9zID4gdGJ0cykge1xuICAgICAgICAgICAgICAgIGlmIChub1N0KVxuICAgICAgICAgICAgICAgICAgICBlcnIoMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBidWZmZXIgY2FuIGhvbGQgdGhpcyArIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGFkZGl0aW9uXG4gICAgICAgIC8vIE1heGltdW0gY2h1bmsgc2l6ZSAocHJhY3RpY2FsbHksIHRoZW9yZXRpY2FsbHkgaW5maW5pdGUpIGlzIDJeMTdcbiAgICAgICAgaWYgKHJlc2l6ZSlcbiAgICAgICAgICAgIGNidWYoYnQgKyAxMzEwNzIpO1xuICAgICAgICB2YXIgbG1zID0gKDEgPDwgbGJ0KSAtIDEsIGRtcyA9ICgxIDw8IGRidCkgLSAxO1xuICAgICAgICB2YXIgbHBvcyA9IHBvcztcbiAgICAgICAgZm9yICg7OyBscG9zID0gcG9zKSB7XG4gICAgICAgICAgICAvLyBiaXRzIHJlYWQsIGNvZGVcbiAgICAgICAgICAgIHZhciBjID0gbG1bYml0czE2KGRhdCwgcG9zKSAmIGxtc10sIHN5bSA9IGMgPj4gNDtcbiAgICAgICAgICAgIHBvcyArPSBjICYgMTU7XG4gICAgICAgICAgICBpZiAocG9zID4gdGJ0cykge1xuICAgICAgICAgICAgICAgIGlmIChub1N0KVxuICAgICAgICAgICAgICAgICAgICBlcnIoMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWMpXG4gICAgICAgICAgICAgICAgZXJyKDIpO1xuICAgICAgICAgICAgaWYgKHN5bSA8IDI1NilcbiAgICAgICAgICAgICAgICBidWZbYnQrK10gPSBzeW07XG4gICAgICAgICAgICBlbHNlIGlmIChzeW0gPT0gMjU2KSB7XG4gICAgICAgICAgICAgICAgbHBvcyA9IHBvcywgbG0gPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IHN5bSAtIDI1NDtcbiAgICAgICAgICAgICAgICAvLyBubyBleHRyYSBiaXRzIG5lZWRlZCBpZiBsZXNzXG4gICAgICAgICAgICAgICAgaWYgKHN5bSA+IDI2NCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmRleFxuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHN5bSAtIDI1NywgYiA9IGZsZWJbaV07XG4gICAgICAgICAgICAgICAgICAgIGFkZCA9IGJpdHMoZGF0LCBwb3MsICgxIDw8IGIpIC0gMSkgKyBmbFtpXTtcbiAgICAgICAgICAgICAgICAgICAgcG9zICs9IGI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGRpc3RcbiAgICAgICAgICAgICAgICB2YXIgZCA9IGRtW2JpdHMxNihkYXQsIHBvcykgJiBkbXNdLCBkc3ltID0gZCA+PiA0O1xuICAgICAgICAgICAgICAgIGlmICghZClcbiAgICAgICAgICAgICAgICAgICAgZXJyKDMpO1xuICAgICAgICAgICAgICAgIHBvcyArPSBkICYgMTU7XG4gICAgICAgICAgICAgICAgdmFyIGR0ID0gZmRbZHN5bV07XG4gICAgICAgICAgICAgICAgaWYgKGRzeW0gPiAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiID0gZmRlYltkc3ltXTtcbiAgICAgICAgICAgICAgICAgICAgZHQgKz0gYml0czE2KGRhdCwgcG9zKSAmICgxIDw8IGIpIC0gMSwgcG9zICs9IGI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwb3MgPiB0YnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub1N0KVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyKDApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc2l6ZSlcbiAgICAgICAgICAgICAgICAgICAgY2J1ZihidCArIDEzMTA3Mik7XG4gICAgICAgICAgICAgICAgdmFyIGVuZCA9IGJ0ICsgYWRkO1xuICAgICAgICAgICAgICAgIGlmIChidCA8IGR0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaGlmdCA9IGRsIC0gZHQsIGRlbmQgPSBNYXRoLm1pbihkdCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoaWZ0ICsgYnQgPCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyKDMpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgYnQgPCBkZW5kOyArK2J0KVxuICAgICAgICAgICAgICAgICAgICAgICAgYnVmW2J0XSA9IGRpY3Rbc2hpZnQgKyBidF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoOyBidCA8IGVuZDsgKytidClcbiAgICAgICAgICAgICAgICAgICAgYnVmW2J0XSA9IGJ1ZltidCAtIGR0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdC5sID0gbG0sIHN0LnAgPSBscG9zLCBzdC5iID0gYnQsIHN0LmYgPSBmaW5hbDtcbiAgICAgICAgaWYgKGxtKVxuICAgICAgICAgICAgZmluYWwgPSAxLCBzdC5tID0gbGJ0LCBzdC5kID0gZG0sIHN0Lm4gPSBkYnQ7XG4gICAgfSB3aGlsZSAoIWZpbmFsKTtcbiAgICAvLyBkb24ndCByZWFsbG9jYXRlIGZvciBzdHJlYW1zIG9yIHVzZXIgYnVmZmVyc1xuICAgIHJldHVybiBidCAhPSBidWYubGVuZ3RoICYmIG5vQnVmID8gc2xjKGJ1ZiwgMCwgYnQpIDogYnVmLnN1YmFycmF5KDAsIGJ0KTtcbn07XG4vLyBzdGFydGluZyBhdCBwLCB3cml0ZSB0aGUgbWluaW11bSBudW1iZXIgb2YgYml0cyB0aGF0IGNhbiBob2xkIHYgdG8gZFxudmFyIHdiaXRzID0gZnVuY3Rpb24gKGQsIHAsIHYpIHtcbiAgICB2IDw8PSBwICYgNztcbiAgICB2YXIgbyA9IChwIC8gOCkgfCAwO1xuICAgIGRbb10gfD0gdjtcbiAgICBkW28gKyAxXSB8PSB2ID4+IDg7XG59O1xuLy8gc3RhcnRpbmcgYXQgcCwgd3JpdGUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGJpdHMgKD44KSB0aGF0IGNhbiBob2xkIHYgdG8gZFxudmFyIHdiaXRzMTYgPSBmdW5jdGlvbiAoZCwgcCwgdikge1xuICAgIHYgPDw9IHAgJiA3O1xuICAgIHZhciBvID0gKHAgLyA4KSB8IDA7XG4gICAgZFtvXSB8PSB2O1xuICAgIGRbbyArIDFdIHw9IHYgPj4gODtcbiAgICBkW28gKyAyXSB8PSB2ID4+IDE2O1xufTtcbi8vIGNyZWF0ZXMgY29kZSBsZW5ndGhzIGZyb20gYSBmcmVxdWVuY3kgdGFibGVcbnZhciBoVHJlZSA9IGZ1bmN0aW9uIChkLCBtYikge1xuICAgIC8vIE5lZWQgZXh0cmEgaW5mbyB0byBtYWtlIGEgdHJlZVxuICAgIHZhciB0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChkW2ldKVxuICAgICAgICAgICAgdC5wdXNoKHsgczogaSwgZjogZFtpXSB9KTtcbiAgICB9XG4gICAgdmFyIHMgPSB0Lmxlbmd0aDtcbiAgICB2YXIgdDIgPSB0LnNsaWNlKCk7XG4gICAgaWYgKCFzKVxuICAgICAgICByZXR1cm4geyB0OiBldCwgbDogMCB9O1xuICAgIGlmIChzID09IDEpIHtcbiAgICAgICAgdmFyIHYgPSBuZXcgdTgodFswXS5zICsgMSk7XG4gICAgICAgIHZbdFswXS5zXSA9IDE7XG4gICAgICAgIHJldHVybiB7IHQ6IHYsIGw6IDEgfTtcbiAgICB9XG4gICAgdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmYgLSBiLmY7IH0pO1xuICAgIC8vIGFmdGVyIGkyIHJlYWNoZXMgbGFzdCBpbmQsIHdpbGwgYmUgc3RvcHBlZFxuICAgIC8vIGZyZXEgbXVzdCBiZSBncmVhdGVyIHRoYW4gbGFyZ2VzdCBwb3NzaWJsZSBudW1iZXIgb2Ygc3ltYm9sc1xuICAgIHQucHVzaCh7IHM6IC0xLCBmOiAyNTAwMSB9KTtcbiAgICB2YXIgbCA9IHRbMF0sIHIgPSB0WzFdLCBpMCA9IDAsIGkxID0gMSwgaTIgPSAyO1xuICAgIHRbMF0gPSB7IHM6IC0xLCBmOiBsLmYgKyByLmYsIGw6IGwsIHI6IHIgfTtcbiAgICAvLyBlZmZpY2llbnQgYWxnb3JpdGhtIGZyb20gVVpJUC5qc1xuICAgIC8vIGkwIGlzIGxvb2tiZWhpbmQsIGkyIGlzIGxvb2thaGVhZCAtIGFmdGVyIHByb2Nlc3NpbmcgdHdvIGxvdy1mcmVxXG4gICAgLy8gc3ltYm9scyB0aGF0IGNvbWJpbmVkIGhhdmUgaGlnaCBmcmVxLCB3aWxsIHN0YXJ0IHByb2Nlc3NpbmcgaTIgKGhpZ2gtZnJlcSxcbiAgICAvLyBub24tY29tcG9zaXRlKSBzeW1ib2xzIGluc3RlYWRcbiAgICAvLyBzZWUgaHR0cHM6Ly9yZWRkaXQuY29tL3IvcGhvdG9wZWEvY29tbWVudHMvaWtla2h0L3V6aXBqc19xdWVzdGlvbnMvXG4gICAgd2hpbGUgKGkxICE9IHMgLSAxKSB7XG4gICAgICAgIGwgPSB0W3RbaTBdLmYgPCB0W2kyXS5mID8gaTArKyA6IGkyKytdO1xuICAgICAgICByID0gdFtpMCAhPSBpMSAmJiB0W2kwXS5mIDwgdFtpMl0uZiA/IGkwKysgOiBpMisrXTtcbiAgICAgICAgdFtpMSsrXSA9IHsgczogLTEsIGY6IGwuZiArIHIuZiwgbDogbCwgcjogciB9O1xuICAgIH1cbiAgICB2YXIgbWF4U3ltID0gdDJbMF0ucztcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHM7ICsraSkge1xuICAgICAgICBpZiAodDJbaV0ucyA+IG1heFN5bSlcbiAgICAgICAgICAgIG1heFN5bSA9IHQyW2ldLnM7XG4gICAgfVxuICAgIC8vIGNvZGUgbGVuZ3Roc1xuICAgIHZhciB0ciA9IG5ldyB1MTYobWF4U3ltICsgMSk7XG4gICAgLy8gbWF4IGJpdHMgaW4gdHJlZVxuICAgIHZhciBtYnQgPSBsbih0W2kxIC0gMV0sIHRyLCAwKTtcbiAgICBpZiAobWJ0ID4gbWIpIHtcbiAgICAgICAgLy8gbW9yZSBhbGdvcml0aG1zIGZyb20gVVpJUC5qc1xuICAgICAgICAvLyBUT0RPOiBmaW5kIG91dCBob3cgdGhpcyBjb2RlIHdvcmtzIChkZWJ0KVxuICAgICAgICAvLyAgaW5kICAgIGRlYnRcbiAgICAgICAgdmFyIGkgPSAwLCBkdCA9IDA7XG4gICAgICAgIC8vICAgIGxlZnQgICAgICAgICAgICBjb3N0XG4gICAgICAgIHZhciBsZnQgPSBtYnQgLSBtYiwgY3N0ID0gMSA8PCBsZnQ7XG4gICAgICAgIHQyLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRyW2Iuc10gLSB0clthLnNdIHx8IGEuZiAtIGIuZjsgfSk7XG4gICAgICAgIGZvciAoOyBpIDwgczsgKytpKSB7XG4gICAgICAgICAgICB2YXIgaTJfMSA9IHQyW2ldLnM7XG4gICAgICAgICAgICBpZiAodHJbaTJfMV0gPiBtYikge1xuICAgICAgICAgICAgICAgIGR0ICs9IGNzdCAtICgxIDw8IChtYnQgLSB0cltpMl8xXSkpO1xuICAgICAgICAgICAgICAgIHRyW2kyXzFdID0gbWI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZHQgPj49IGxmdDtcbiAgICAgICAgd2hpbGUgKGR0ID4gMCkge1xuICAgICAgICAgICAgdmFyIGkyXzIgPSB0MltpXS5zO1xuICAgICAgICAgICAgaWYgKHRyW2kyXzJdIDwgbWIpXG4gICAgICAgICAgICAgICAgZHQgLT0gMSA8PCAobWIgLSB0cltpMl8yXSsrIC0gMSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgKytpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoOyBpID49IDAgJiYgZHQ7IC0taSkge1xuICAgICAgICAgICAgdmFyIGkyXzMgPSB0MltpXS5zO1xuICAgICAgICAgICAgaWYgKHRyW2kyXzNdID09IG1iKSB7XG4gICAgICAgICAgICAgICAgLS10cltpMl8zXTtcbiAgICAgICAgICAgICAgICArK2R0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1idCA9IG1iO1xuICAgIH1cbiAgICByZXR1cm4geyB0OiBuZXcgdTgodHIpLCBsOiBtYnQgfTtcbn07XG4vLyBnZXQgdGhlIG1heCBsZW5ndGggYW5kIGFzc2lnbiBsZW5ndGggY29kZXNcbnZhciBsbiA9IGZ1bmN0aW9uIChuLCBsLCBkKSB7XG4gICAgcmV0dXJuIG4ucyA9PSAtMVxuICAgICAgICA/IE1hdGgubWF4KGxuKG4ubCwgbCwgZCArIDEpLCBsbihuLnIsIGwsIGQgKyAxKSlcbiAgICAgICAgOiAobFtuLnNdID0gZCk7XG59O1xuLy8gbGVuZ3RoIGNvZGVzIGdlbmVyYXRpb25cbnZhciBsYyA9IGZ1bmN0aW9uIChjKSB7XG4gICAgdmFyIHMgPSBjLmxlbmd0aDtcbiAgICAvLyBOb3RlIHRoYXQgdGhlIHNlbWljb2xvbiB3YXMgaW50ZW50aW9uYWxcbiAgICB3aGlsZSAocyAmJiAhY1stLXNdKVxuICAgICAgICA7XG4gICAgdmFyIGNsID0gbmV3IHUxNigrK3MpO1xuICAgIC8vICBpbmQgICAgICBudW0gICAgICAgICBzdHJlYWtcbiAgICB2YXIgY2xpID0gMCwgY2xuID0gY1swXSwgY2xzID0gMTtcbiAgICB2YXIgdyA9IGZ1bmN0aW9uICh2KSB7IGNsW2NsaSsrXSA9IHY7IH07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gczsgKytpKSB7XG4gICAgICAgIGlmIChjW2ldID09IGNsbiAmJiBpICE9IHMpXG4gICAgICAgICAgICArK2NscztcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWNsbiAmJiBjbHMgPiAyKSB7XG4gICAgICAgICAgICAgICAgZm9yICg7IGNscyA+IDEzODsgY2xzIC09IDEzOClcbiAgICAgICAgICAgICAgICAgICAgdygzMjc1NCk7XG4gICAgICAgICAgICAgICAgaWYgKGNscyA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgdyhjbHMgPiAxMCA/ICgoY2xzIC0gMTEpIDw8IDUpIHwgMjg2OTAgOiAoKGNscyAtIDMpIDw8IDUpIHwgMTIzMDUpO1xuICAgICAgICAgICAgICAgICAgICBjbHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNscyA+IDMpIHtcbiAgICAgICAgICAgICAgICB3KGNsbiksIC0tY2xzO1xuICAgICAgICAgICAgICAgIGZvciAoOyBjbHMgPiA2OyBjbHMgLT0gNilcbiAgICAgICAgICAgICAgICAgICAgdyg4MzA0KTtcbiAgICAgICAgICAgICAgICBpZiAoY2xzID4gMilcbiAgICAgICAgICAgICAgICAgICAgdygoKGNscyAtIDMpIDw8IDUpIHwgODIwOCksIGNscyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY2xzLS0pXG4gICAgICAgICAgICAgICAgdyhjbG4pO1xuICAgICAgICAgICAgY2xzID0gMTtcbiAgICAgICAgICAgIGNsbiA9IGNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgYzogY2wuc3ViYXJyYXkoMCwgY2xpKSwgbjogcyB9O1xufTtcbi8vIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIG91dHB1dCBmcm9tIHRyZWUsIGNvZGUgbGVuZ3Roc1xudmFyIGNsZW4gPSBmdW5jdGlvbiAoY2YsIGNsKSB7XG4gICAgdmFyIGwgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2wubGVuZ3RoOyArK2kpXG4gICAgICAgIGwgKz0gY2ZbaV0gKiBjbFtpXTtcbiAgICByZXR1cm4gbDtcbn07XG4vLyB3cml0ZXMgYSBmaXhlZCBibG9ja1xuLy8gcmV0dXJucyB0aGUgbmV3IGJpdCBwb3NcbnZhciB3ZmJsayA9IGZ1bmN0aW9uIChvdXQsIHBvcywgZGF0KSB7XG4gICAgLy8gbm8gbmVlZCB0byB3cml0ZSAwMCBhcyB0eXBlOiBUeXBlZEFycmF5IGRlZmF1bHRzIHRvIDBcbiAgICB2YXIgcyA9IGRhdC5sZW5ndGg7XG4gICAgdmFyIG8gPSBzaGZ0KHBvcyArIDIpO1xuICAgIG91dFtvXSA9IHMgJiAyNTU7XG4gICAgb3V0W28gKyAxXSA9IHMgPj4gODtcbiAgICBvdXRbbyArIDJdID0gb3V0W29dIF4gMjU1O1xuICAgIG91dFtvICsgM10gPSBvdXRbbyArIDFdIF4gMjU1O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgczsgKytpKVxuICAgICAgICBvdXRbbyArIGkgKyA0XSA9IGRhdFtpXTtcbiAgICByZXR1cm4gKG8gKyA0ICsgcykgKiA4O1xufTtcbi8vIHdyaXRlcyBhIGJsb2NrXG52YXIgd2JsayA9IGZ1bmN0aW9uIChkYXQsIG91dCwgZmluYWwsIHN5bXMsIGxmLCBkZiwgZWIsIGxpLCBicywgYmwsIHApIHtcbiAgICB3Yml0cyhvdXQsIHArKywgZmluYWwpO1xuICAgICsrbGZbMjU2XTtcbiAgICB2YXIgX2EgPSBoVHJlZShsZiwgMTUpLCBkbHQgPSBfYS50LCBtbGIgPSBfYS5sO1xuICAgIHZhciBfYiA9IGhUcmVlKGRmLCAxNSksIGRkdCA9IF9iLnQsIG1kYiA9IF9iLmw7XG4gICAgdmFyIF9jID0gbGMoZGx0KSwgbGNsdCA9IF9jLmMsIG5sYyA9IF9jLm47XG4gICAgdmFyIF9kID0gbGMoZGR0KSwgbGNkdCA9IF9kLmMsIG5kYyA9IF9kLm47XG4gICAgdmFyIGxjZnJlcSA9IG5ldyB1MTYoMTkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGNsdC5sZW5ndGg7ICsraSlcbiAgICAgICAgKytsY2ZyZXFbbGNsdFtpXSAmIDMxXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxjZHQubGVuZ3RoOyArK2kpXG4gICAgICAgICsrbGNmcmVxW2xjZHRbaV0gJiAzMV07XG4gICAgdmFyIF9lID0gaFRyZWUobGNmcmVxLCA3KSwgbGN0ID0gX2UudCwgbWxjYiA9IF9lLmw7XG4gICAgdmFyIG5sY2MgPSAxOTtcbiAgICBmb3IgKDsgbmxjYyA+IDQgJiYgIWxjdFtjbGltW25sY2MgLSAxXV07IC0tbmxjYylcbiAgICAgICAgO1xuICAgIHZhciBmbGVuID0gKGJsICsgNSkgPDwgMztcbiAgICB2YXIgZnRsZW4gPSBjbGVuKGxmLCBmbHQpICsgY2xlbihkZiwgZmR0KSArIGViO1xuICAgIHZhciBkdGxlbiA9IGNsZW4obGYsIGRsdCkgKyBjbGVuKGRmLCBkZHQpICsgZWIgKyAxNCArIDMgKiBubGNjICsgY2xlbihsY2ZyZXEsIGxjdCkgKyAyICogbGNmcmVxWzE2XSArIDMgKiBsY2ZyZXFbMTddICsgNyAqIGxjZnJlcVsxOF07XG4gICAgaWYgKGJzID49IDAgJiYgZmxlbiA8PSBmdGxlbiAmJiBmbGVuIDw9IGR0bGVuKVxuICAgICAgICByZXR1cm4gd2ZibGsob3V0LCBwLCBkYXQuc3ViYXJyYXkoYnMsIGJzICsgYmwpKTtcbiAgICB2YXIgbG0sIGxsLCBkbSwgZGw7XG4gICAgd2JpdHMob3V0LCBwLCAxICsgKGR0bGVuIDwgZnRsZW4pKSwgcCArPSAyO1xuICAgIGlmIChkdGxlbiA8IGZ0bGVuKSB7XG4gICAgICAgIGxtID0gaE1hcChkbHQsIG1sYiwgMCksIGxsID0gZGx0LCBkbSA9IGhNYXAoZGR0LCBtZGIsIDApLCBkbCA9IGRkdDtcbiAgICAgICAgdmFyIGxsbSA9IGhNYXAobGN0LCBtbGNiLCAwKTtcbiAgICAgICAgd2JpdHMob3V0LCBwLCBubGMgLSAyNTcpO1xuICAgICAgICB3Yml0cyhvdXQsIHAgKyA1LCBuZGMgLSAxKTtcbiAgICAgICAgd2JpdHMob3V0LCBwICsgMTAsIG5sY2MgLSA0KTtcbiAgICAgICAgcCArPSAxNDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBubGNjOyArK2kpXG4gICAgICAgICAgICB3Yml0cyhvdXQsIHAgKyAzICogaSwgbGN0W2NsaW1baV1dKTtcbiAgICAgICAgcCArPSAzICogbmxjYztcbiAgICAgICAgdmFyIGxjdHMgPSBbbGNsdCwgbGNkdF07XG4gICAgICAgIGZvciAodmFyIGl0ID0gMDsgaXQgPCAyOyArK2l0KSB7XG4gICAgICAgICAgICB2YXIgY2xjdCA9IGxjdHNbaXRdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGNsY3RbaV0gJiAzMTtcbiAgICAgICAgICAgICAgICB3Yml0cyhvdXQsIHAsIGxsbVtsZW5dKSwgcCArPSBsY3RbbGVuXTtcbiAgICAgICAgICAgICAgICBpZiAobGVuID4gMTUpXG4gICAgICAgICAgICAgICAgICAgIHdiaXRzKG91dCwgcCwgKGNsY3RbaV0gPj4gNSkgJiAxMjcpLCBwICs9IGNsY3RbaV0gPj4gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxtID0gZmxtLCBsbCA9IGZsdCwgZG0gPSBmZG0sIGRsID0gZmR0O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpOyArK2kpIHtcbiAgICAgICAgdmFyIHN5bSA9IHN5bXNbaV07XG4gICAgICAgIGlmIChzeW0gPiAyNTUpIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSAoc3ltID4+IDE4KSAmIDMxO1xuICAgICAgICAgICAgd2JpdHMxNihvdXQsIHAsIGxtW2xlbiArIDI1N10pLCBwICs9IGxsW2xlbiArIDI1N107XG4gICAgICAgICAgICBpZiAobGVuID4gNylcbiAgICAgICAgICAgICAgICB3Yml0cyhvdXQsIHAsIChzeW0gPj4gMjMpICYgMzEpLCBwICs9IGZsZWJbbGVuXTtcbiAgICAgICAgICAgIHZhciBkc3QgPSBzeW0gJiAzMTtcbiAgICAgICAgICAgIHdiaXRzMTYob3V0LCBwLCBkbVtkc3RdKSwgcCArPSBkbFtkc3RdO1xuICAgICAgICAgICAgaWYgKGRzdCA+IDMpXG4gICAgICAgICAgICAgICAgd2JpdHMxNihvdXQsIHAsIChzeW0gPj4gNSkgJiA4MTkxKSwgcCArPSBmZGViW2RzdF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB3Yml0czE2KG91dCwgcCwgbG1bc3ltXSksIHAgKz0gbGxbc3ltXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3Yml0czE2KG91dCwgcCwgbG1bMjU2XSk7XG4gICAgcmV0dXJuIHAgKyBsbFsyNTZdO1xufTtcbi8vIGRlZmxhdGUgb3B0aW9ucyAobmljZSA8PCAxMykgfCBjaGFpblxudmFyIGRlbyA9IC8qI19fUFVSRV9fKi8gbmV3IGkzMihbNjU1NDAsIDEzMTA4MCwgMTMxMDg4LCAxMzExMDQsIDI2MjE3NiwgMTA0ODcwNCwgMTA0ODgzMiwgMjExNDU2MCwgMjExNzYzMl0pO1xuLy8gZW1wdHlcbnZhciBldCA9IC8qI19fUFVSRV9fKi8gbmV3IHU4KDApO1xuLy8gY29tcHJlc3NlcyBkYXRhIGludG8gYSByYXcgREVGTEFURSBidWZmZXJcbnZhciBkZmx0ID0gZnVuY3Rpb24gKGRhdCwgbHZsLCBwbHZsLCBwcmUsIHBvc3QsIHN0KSB7XG4gICAgdmFyIHMgPSBzdC56IHx8IGRhdC5sZW5ndGg7XG4gICAgdmFyIG8gPSBuZXcgdTgocHJlICsgcyArIDUgKiAoMSArIE1hdGguY2VpbChzIC8gNzAwMCkpICsgcG9zdCk7XG4gICAgLy8gd3JpdGluZyB0byB0aGlzIHdyaXRlcyB0byB0aGUgb3V0cHV0IGJ1ZmZlclxuICAgIHZhciB3ID0gby5zdWJhcnJheShwcmUsIG8ubGVuZ3RoIC0gcG9zdCk7XG4gICAgdmFyIGxzdCA9IHN0Lmw7XG4gICAgdmFyIHBvcyA9IChzdC5yIHx8IDApICYgNztcbiAgICBpZiAobHZsKSB7XG4gICAgICAgIGlmIChwb3MpXG4gICAgICAgICAgICB3WzBdID0gc3QuciA+PiAzO1xuICAgICAgICB2YXIgb3B0ID0gZGVvW2x2bCAtIDFdO1xuICAgICAgICB2YXIgbiA9IG9wdCA+PiAxMywgYyA9IG9wdCAmIDgxOTE7XG4gICAgICAgIHZhciBtc2tfMSA9ICgxIDw8IHBsdmwpIC0gMTtcbiAgICAgICAgLy8gICAgcHJldiAyLWJ5dGUgdmFsIG1hcCAgICBjdXJyIDItYnl0ZSB2YWwgbWFwXG4gICAgICAgIHZhciBwcmV2ID0gc3QucCB8fCBuZXcgdTE2KDMyNzY4KSwgaGVhZCA9IHN0LmggfHwgbmV3IHUxNihtc2tfMSArIDEpO1xuICAgICAgICB2YXIgYnMxXzEgPSBNYXRoLmNlaWwocGx2bCAvIDMpLCBiczJfMSA9IDIgKiBiczFfMTtcbiAgICAgICAgdmFyIGhzaCA9IGZ1bmN0aW9uIChpKSB7IHJldHVybiAoZGF0W2ldIF4gKGRhdFtpICsgMV0gPDwgYnMxXzEpIF4gKGRhdFtpICsgMl0gPDwgYnMyXzEpKSAmIG1za18xOyB9O1xuICAgICAgICAvLyAyNDU3NiBpcyBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIG1heGltdW0gc3ltYm9scyBwZXIgYmxvY2tcbiAgICAgICAgLy8gNDI0IGJ1ZmZlciBmb3IgbGFzdCBibG9ja1xuICAgICAgICB2YXIgc3ltcyA9IG5ldyBpMzIoMjUwMDApO1xuICAgICAgICAvLyBsZW5ndGgvbGl0ZXJhbCBmcmVxICAgZGlzdGFuY2UgZnJlcVxuICAgICAgICB2YXIgbGYgPSBuZXcgdTE2KDI4OCksIGRmID0gbmV3IHUxNigzMik7XG4gICAgICAgIC8vICBsL2xjbnQgIGV4Yml0cyAgaW5kZXggICAgICAgICAgbC9saW5kICB3YWl0ZHggICAgICAgICAgYmxrcG9zXG4gICAgICAgIHZhciBsY18xID0gMCwgZWIgPSAwLCBpID0gc3QuaSB8fCAwLCBsaSA9IDAsIHdpID0gc3QudyB8fCAwLCBicyA9IDA7XG4gICAgICAgIGZvciAoOyBpICsgMiA8IHM7ICsraSkge1xuICAgICAgICAgICAgLy8gaGFzaCB2YWx1ZVxuICAgICAgICAgICAgdmFyIGh2ID0gaHNoKGkpO1xuICAgICAgICAgICAgLy8gaW5kZXggbW9kIDMyNzY4ICAgIHByZXZpb3VzIGluZGV4IG1vZFxuICAgICAgICAgICAgdmFyIGltb2QgPSBpICYgMzI3NjcsIHBpbW9kID0gaGVhZFtodl07XG4gICAgICAgICAgICBwcmV2W2ltb2RdID0gcGltb2Q7XG4gICAgICAgICAgICBoZWFkW2h2XSA9IGltb2Q7XG4gICAgICAgICAgICAvLyBXZSBhbHdheXMgc2hvdWxkIG1vZGlmeSBoZWFkIGFuZCBwcmV2LCBidXQgb25seSBhZGQgc3ltYm9scyBpZlxuICAgICAgICAgICAgLy8gdGhpcyBkYXRhIGlzIG5vdCB5ZXQgcHJvY2Vzc2VkIChcIndhaXRcIiBmb3Igd2FpdCBpbmRleClcbiAgICAgICAgICAgIGlmICh3aSA8PSBpKSB7XG4gICAgICAgICAgICAgICAgLy8gYnl0ZXMgcmVtYWluaW5nXG4gICAgICAgICAgICAgICAgdmFyIHJlbSA9IHMgLSBpO1xuICAgICAgICAgICAgICAgIGlmICgobGNfMSA+IDcwMDAgfHwgbGkgPiAyNDU3NikgJiYgKHJlbSA+IDQyMyB8fCAhbHN0KSkge1xuICAgICAgICAgICAgICAgICAgICBwb3MgPSB3YmxrKGRhdCwgdywgMCwgc3ltcywgbGYsIGRmLCBlYiwgbGksIGJzLCBpIC0gYnMsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgIGxpID0gbGNfMSA9IGViID0gMCwgYnMgPSBpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDI4NjsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGZbal0gPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDMwOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICBkZltqXSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vICBsZW4gICAgZGlzdCAgIGNoYWluXG4gICAgICAgICAgICAgICAgdmFyIGwgPSAyLCBkID0gMCwgY2hfMSA9IGMsIGRpZiA9IGltb2QgLSBwaW1vZCAmIDMyNzY3O1xuICAgICAgICAgICAgICAgIGlmIChyZW0gPiAyICYmIGh2ID09IGhzaChpIC0gZGlmKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4biA9IE1hdGgubWluKG4sIHJlbSkgLSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ZCA9IE1hdGgubWluKDMyNzY3LCBpKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF4IHBvc3NpYmxlIGxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAvLyBub3QgY2FwcGVkIGF0IGRpZiBiZWNhdXNlIGRlY29tcHJlc3NvcnMgaW1wbGVtZW50IFwicm9sbGluZ1wiIGluZGV4IHBvcHVsYXRpb25cbiAgICAgICAgICAgICAgICAgICAgdmFyIG1sID0gTWF0aC5taW4oMjU4LCByZW0pO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZGlmIDw9IG1heGQgJiYgLS1jaF8xICYmIGltb2QgIT0gcGltb2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRbaSArIGxdID09IGRhdFtpICsgbCAtIGRpZl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmwgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBubCA8IG1sICYmIGRhdFtpICsgbmxdID09IGRhdFtpICsgbmwgLSBkaWZdOyArK25sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5sID4gbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gbmwsIGQgPSBkaWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJyZWFrIG91dCBlYXJseSB3aGVuIHdlIHJlYWNoIFwibmljZVwiICh3ZSBhcmUgc2F0aXNmaWVkIGVub3VnaClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5sID4gbWF4bilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3csIGZpbmQgdGhlIHJhcmVzdCAyLWJ5dGUgc2VxdWVuY2Ugd2l0aGluIHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVuZ3RoIG9mIGxpdGVyYWxzIGFuZCBzZWFyY2ggZm9yIHRoYXQgaW5zdGVhZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTXVjaCBmYXN0ZXIgdGhhbiBqdXN0IHVzaW5nIHRoZSBzdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW1kID0gTWF0aC5taW4oZGlmLCBubCAtIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1tZDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGkgPSBpIC0gZGlmICsgaiAmIDMyNzY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB0aSA9IHByZXZbdGldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNkID0gdGkgLSBwdGkgJiAzMjc2NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZCA+IG1kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kID0gY2QsIHBpbW9kID0gdGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB0aGUgcHJldmlvdXMgbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgIGltb2QgPSBwaW1vZCwgcGltb2QgPSBwcmV2W2ltb2RdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlmICs9IGltb2QgLSBwaW1vZCAmIDMyNzY3O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGQgd2lsbCBiZSBub256ZXJvIG9ubHkgd2hlbiBhIG1hdGNoIHdhcyBmb3VuZFxuICAgICAgICAgICAgICAgIGlmIChkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIGJvdGggZGlzdCBhbmQgbGVuIGRhdGEgaW4gb25lIGludDMyXG4gICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGlzIGlzIHJlY29nbml6ZWQgYXMgYSBsZW4vZGlzdCB3aXRoIDI4dGggYml0ICgyXjI4KVxuICAgICAgICAgICAgICAgICAgICBzeW1zW2xpKytdID0gMjY4NDM1NDU2IHwgKHJldmZsW2xdIDw8IDE4KSB8IHJldmZkW2RdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluID0gcmV2ZmxbbF0gJiAzMSwgZGluID0gcmV2ZmRbZF0gJiAzMTtcbiAgICAgICAgICAgICAgICAgICAgZWIgKz0gZmxlYltsaW5dICsgZmRlYltkaW5dO1xuICAgICAgICAgICAgICAgICAgICArK2xmWzI1NyArIGxpbl07XG4gICAgICAgICAgICAgICAgICAgICsrZGZbZGluXTtcbiAgICAgICAgICAgICAgICAgICAgd2kgPSBpICsgbDtcbiAgICAgICAgICAgICAgICAgICAgKytsY18xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3ltc1tsaSsrXSA9IGRhdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgKytsZltkYXRbaV1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSBNYXRoLm1heChpLCB3aSk7IGkgPCBzOyArK2kpIHtcbiAgICAgICAgICAgIHN5bXNbbGkrK10gPSBkYXRbaV07XG4gICAgICAgICAgICArK2xmW2RhdFtpXV07XG4gICAgICAgIH1cbiAgICAgICAgcG9zID0gd2JsayhkYXQsIHcsIGxzdCwgc3ltcywgbGYsIGRmLCBlYiwgbGksIGJzLCBpIC0gYnMsIHBvcyk7XG4gICAgICAgIGlmICghbHN0KSB7XG4gICAgICAgICAgICBzdC5yID0gKHBvcyAmIDcpIHwgd1socG9zIC8gOCkgfCAwXSA8PCAzO1xuICAgICAgICAgICAgLy8gc2hmdChwb3MpIG5vdyAxIGxlc3MgaWYgcG9zICYgNyAhPSAwXG4gICAgICAgICAgICBwb3MgLT0gNztcbiAgICAgICAgICAgIHN0LmggPSBoZWFkLCBzdC5wID0gcHJldiwgc3QuaSA9IGksIHN0LncgPSB3aTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0LncgfHwgMDsgaSA8IHMgKyBsc3Q7IGkgKz0gNjU1MzUpIHtcbiAgICAgICAgICAgIC8vIGVuZFxuICAgICAgICAgICAgdmFyIGUgPSBpICsgNjU1MzU7XG4gICAgICAgICAgICBpZiAoZSA+PSBzKSB7XG4gICAgICAgICAgICAgICAgLy8gd3JpdGUgZmluYWwgYmxvY2tcbiAgICAgICAgICAgICAgICB3Wyhwb3MgLyA4KSB8IDBdID0gbHN0O1xuICAgICAgICAgICAgICAgIGUgPSBzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9zID0gd2ZibGsodywgcG9zICsgMSwgZGF0LnN1YmFycmF5KGksIGUpKTtcbiAgICAgICAgfVxuICAgICAgICBzdC5pID0gcztcbiAgICB9XG4gICAgcmV0dXJuIHNsYyhvLCAwLCBwcmUgKyBzaGZ0KHBvcykgKyBwb3N0KTtcbn07XG4vLyBDUkMzMiB0YWJsZVxudmFyIGNyY3QgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHQgPSBuZXcgSW50MzJBcnJheSgyNTYpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSBpLCBrID0gOTtcbiAgICAgICAgd2hpbGUgKC0taylcbiAgICAgICAgICAgIGMgPSAoKGMgJiAxKSAmJiAtMzA2Njc0OTEyKSBeIChjID4+PiAxKTtcbiAgICAgICAgdFtpXSA9IGM7XG4gICAgfVxuICAgIHJldHVybiB0O1xufSkoKTtcbi8vIENSQzMyXG52YXIgY3JjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjID0gLTE7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcDogZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIC8vIGNsb3N1cmVzIGhhdmUgYXdmdWwgcGVyZm9ybWFuY2VcbiAgICAgICAgICAgIHZhciBjciA9IGM7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGQubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgY3IgPSBjcmN0WyhjciAmIDI1NSkgXiBkW2ldXSBeIChjciA+Pj4gOCk7XG4gICAgICAgICAgICBjID0gY3I7XG4gICAgICAgIH0sXG4gICAgICAgIGQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIH5jOyB9XG4gICAgfTtcbn07XG4vLyBBZGxlcjMyXG52YXIgYWRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGEgPSAxLCBiID0gMDtcbiAgICByZXR1cm4ge1xuICAgICAgICBwOiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgLy8gY2xvc3VyZXMgaGF2ZSBhd2Z1bCBwZXJmb3JtYW5jZVxuICAgICAgICAgICAgdmFyIG4gPSBhLCBtID0gYjtcbiAgICAgICAgICAgIHZhciBsID0gZC5sZW5ndGggfCAwO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIT0gbDspIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IE1hdGgubWluKGkgKyAyNjU1LCBsKTtcbiAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGU7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgbSArPSBuICs9IGRbaV07XG4gICAgICAgICAgICAgICAgbiA9IChuICYgNjU1MzUpICsgMTUgKiAobiA+PiAxNiksIG0gPSAobSAmIDY1NTM1KSArIDE1ICogKG0gPj4gMTYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYSA9IG4sIGIgPSBtO1xuICAgICAgICB9LFxuICAgICAgICBkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhICU9IDY1NTIxLCBiICU9IDY1NTIxO1xuICAgICAgICAgICAgcmV0dXJuIChhICYgMjU1KSA8PCAyNCB8IChhICYgMHhGRjAwKSA8PCA4IHwgKGIgJiAyNTUpIDw8IDggfCAoYiA+PiA4KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuO1xuLy8gZGVmbGF0ZSB3aXRoIG9wdHNcbnZhciBkb3B0ID0gZnVuY3Rpb24gKGRhdCwgb3B0LCBwcmUsIHBvc3QsIHN0KSB7XG4gICAgaWYgKCFzdCkge1xuICAgICAgICBzdCA9IHsgbDogMSB9O1xuICAgICAgICBpZiAob3B0LmRpY3Rpb25hcnkpIHtcbiAgICAgICAgICAgIHZhciBkaWN0ID0gb3B0LmRpY3Rpb25hcnkuc3ViYXJyYXkoLTMyNzY4KTtcbiAgICAgICAgICAgIHZhciBuZXdEYXQgPSBuZXcgdTgoZGljdC5sZW5ndGggKyBkYXQubGVuZ3RoKTtcbiAgICAgICAgICAgIG5ld0RhdC5zZXQoZGljdCk7XG4gICAgICAgICAgICBuZXdEYXQuc2V0KGRhdCwgZGljdC5sZW5ndGgpO1xuICAgICAgICAgICAgZGF0ID0gbmV3RGF0O1xuICAgICAgICAgICAgc3QudyA9IGRpY3QubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZmx0KGRhdCwgb3B0LmxldmVsID09IG51bGwgPyA2IDogb3B0LmxldmVsLCBvcHQubWVtID09IG51bGwgPyAoc3QubCA/IE1hdGguY2VpbChNYXRoLm1heCg4LCBNYXRoLm1pbigxMywgTWF0aC5sb2coZGF0Lmxlbmd0aCkpKSAqIDEuNSkgOiAyMCkgOiAoMTIgKyBvcHQubWVtKSwgcHJlLCBwb3N0LCBzdCk7XG59O1xuLy8gV2FsbWFydCBvYmplY3Qgc3ByZWFkXG52YXIgbXJnID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgbyA9IHt9O1xuICAgIGZvciAodmFyIGsgaW4gYSlcbiAgICAgICAgb1trXSA9IGFba107XG4gICAgZm9yICh2YXIgayBpbiBiKVxuICAgICAgICBvW2tdID0gYltrXTtcbiAgICByZXR1cm4gbztcbn07XG4vLyB3b3JrZXIgY2xvbmVcbi8vIFRoaXMgaXMgcG9zc2libHkgdGhlIGNyYXppZXN0IHBhcnQgb2YgdGhlIGVudGlyZSBjb2RlYmFzZSwgZGVzcGl0ZSBob3cgc2ltcGxlIGl0IG1heSBzZWVtLlxuLy8gVGhlIG9ubHkgcGFyYW1ldGVyIHRvIHRoaXMgZnVuY3Rpb24gaXMgYSBjbG9zdXJlIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiB2YXJpYWJsZXMgb3V0c2lkZSBvZiB0aGUgZnVuY3Rpb24gc2NvcGUuXG4vLyBXZSdyZSBnb2luZyB0byB0cnkgdG8gZmlndXJlIG91dCB0aGUgdmFyaWFibGUgbmFtZXMgdXNlZCBpbiB0aGUgY2xvc3VyZSBhcyBzdHJpbmdzIGJlY2F1c2UgdGhhdCBpcyBjcnVjaWFsIGZvciB3b3JrZXJpemF0aW9uLlxuLy8gV2Ugd2lsbCByZXR1cm4gYW4gb2JqZWN0IG1hcHBpbmcgb2YgdHJ1ZSB2YXJpYWJsZSBuYW1lIHRvIHZhbHVlIChiYXNpY2FsbHksIHRoZSBjdXJyZW50IHNjb3BlIGFzIGEgSlMgb2JqZWN0KS5cbi8vIFRoZSByZWFzb24gd2UgY2FuJ3QganVzdCB1c2UgdGhlIG9yaWdpbmFsIHZhcmlhYmxlIG5hbWVzIGlzIG1pbmlmaWVycyBtYW5nbGluZyB0aGUgdG9wbGV2ZWwgc2NvcGUuXG4vLyBUaGlzIHRvb2sgbWUgdGhyZWUgd2Vla3MgdG8gZmlndXJlIG91dCBob3cgdG8gZG8uXG52YXIgd2NsbiA9IGZ1bmN0aW9uIChmbiwgZm5TdHIsIHRkKSB7XG4gICAgdmFyIGR0ID0gZm4oKTtcbiAgICB2YXIgc3QgPSBmbi50b1N0cmluZygpO1xuICAgIHZhciBrcyA9IHN0LnNsaWNlKHN0LmluZGV4T2YoJ1snKSArIDEsIHN0Lmxhc3RJbmRleE9mKCddJykpLnJlcGxhY2UoL1xccysvZywgJycpLnNwbGl0KCcsJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkdC5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgdiA9IGR0W2ldLCBrID0ga3NbaV07XG4gICAgICAgIGlmICh0eXBlb2YgdiA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBmblN0ciArPSAnOycgKyBrICsgJz0nO1xuICAgICAgICAgICAgdmFyIHN0XzEgPSB2LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAodi5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgICAgICAvLyBmb3IgZ2xvYmFsIG9iamVjdHNcbiAgICAgICAgICAgICAgICBpZiAoc3RfMS5pbmRleE9mKCdbbmF0aXZlIGNvZGVdJykgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNwSW5kID0gc3RfMS5pbmRleE9mKCcgJywgOCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBmblN0ciArPSBzdF8xLnNsaWNlKHNwSW5kLCBzdF8xLmluZGV4T2YoJygnLCBzcEluZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm5TdHIgKz0gc3RfMTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdCBpbiB2LnByb3RvdHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuU3RyICs9ICc7JyArIGsgKyAnLnByb3RvdHlwZS4nICsgdCArICc9JyArIHYucHJvdG90eXBlW3RdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZuU3RyICs9IHN0XzE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGRba10gPSB2O1xuICAgIH1cbiAgICByZXR1cm4gZm5TdHI7XG59O1xudmFyIGNoID0gW107XG4vLyBjbG9uZSBidWZzXG52YXIgY2JmcyA9IGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIHRsID0gW107XG4gICAgZm9yICh2YXIgayBpbiB2KSB7XG4gICAgICAgIGlmICh2W2tdLmJ1ZmZlcikge1xuICAgICAgICAgICAgdGwucHVzaCgodltrXSA9IG5ldyB2W2tdLmNvbnN0cnVjdG9yKHZba10pKS5idWZmZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0bDtcbn07XG4vLyB1c2UgYSB3b3JrZXIgdG8gZXhlY3V0ZSBjb2RlXG52YXIgd3JrciA9IGZ1bmN0aW9uIChmbnMsIGluaXQsIGlkLCBjYikge1xuICAgIGlmICghY2hbaWRdKSB7XG4gICAgICAgIHZhciBmblN0ciA9ICcnLCB0ZF8xID0ge30sIG0gPSBmbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtOyArK2kpXG4gICAgICAgICAgICBmblN0ciA9IHdjbG4oZm5zW2ldLCBmblN0ciwgdGRfMSk7XG4gICAgICAgIGNoW2lkXSA9IHsgYzogd2NsbihmbnNbbV0sIGZuU3RyLCB0ZF8xKSwgZTogdGRfMSB9O1xuICAgIH1cbiAgICB2YXIgdGQgPSBtcmcoe30sIGNoW2lkXS5lKTtcbiAgICByZXR1cm4gd2soY2hbaWRdLmMgKyAnO29ubWVzc2FnZT1mdW5jdGlvbihlKXtmb3IodmFyIGsgaW4gZS5kYXRhKXNlbGZba109ZS5kYXRhW2tdO29ubWVzc2FnZT0nICsgaW5pdC50b1N0cmluZygpICsgJ30nLCBpZCwgdGQsIGNiZnModGQpLCBjYik7XG59O1xuLy8gYmFzZSBhc3luYyBpbmZsYXRlIGZuXG52YXIgYkluZmx0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW3U4LCB1MTYsIGkzMiwgZmxlYiwgZmRlYiwgY2xpbSwgZmwsIGZkLCBmbHJtLCBmZHJtLCByZXYsIGVjLCBoTWFwLCBtYXgsIGJpdHMsIGJpdHMxNiwgc2hmdCwgc2xjLCBlcnIsIGluZmx0LCBpbmZsYXRlU3luYywgcGJmLCBnb3B0XTsgfTtcbnZhciBiRGZsdCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFt1OCwgdTE2LCBpMzIsIGZsZWIsIGZkZWIsIGNsaW0sIHJldmZsLCByZXZmZCwgZmxtLCBmbHQsIGZkbSwgZmR0LCByZXYsIGRlbywgZXQsIGhNYXAsIHdiaXRzLCB3Yml0czE2LCBoVHJlZSwgbG4sIGxjLCBjbGVuLCB3ZmJsaywgd2Jsaywgc2hmdCwgc2xjLCBkZmx0LCBkb3B0LCBkZWZsYXRlU3luYywgcGJmXTsgfTtcbi8vIGd6aXAgZXh0cmFcbnZhciBnemUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbZ3poLCBnemhsLCB3Ynl0ZXMsIGNyYywgY3JjdF07IH07XG4vLyBndW56aXAgZXh0cmFcbnZhciBndXplID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW2d6cywgZ3psXTsgfTtcbi8vIHpsaWIgZXh0cmFcbnZhciB6bGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbemxoLCB3Ynl0ZXMsIGFkbGVyXTsgfTtcbi8vIHVuemxpYiBleHRyYVxudmFyIHp1bGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbemxzXTsgfTtcbi8vIHBvc3QgYnVmXG52YXIgcGJmID0gZnVuY3Rpb24gKG1zZykgeyByZXR1cm4gcG9zdE1lc3NhZ2UobXNnLCBbbXNnLmJ1ZmZlcl0pOyB9O1xuLy8gZ2V0IG9wdHNcbnZhciBnb3B0ID0gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYge1xuICAgIG91dDogby5zaXplICYmIG5ldyB1OChvLnNpemUpLFxuICAgIGRpY3Rpb25hcnk6IG8uZGljdGlvbmFyeVxufTsgfTtcbi8vIGFzeW5jIGhlbHBlclxudmFyIGNiaWZ5ID0gZnVuY3Rpb24gKGRhdCwgb3B0cywgZm5zLCBpbml0LCBpZCwgY2IpIHtcbiAgICB2YXIgdyA9IHdya3IoZm5zLCBpbml0LCBpZCwgZnVuY3Rpb24gKGVyciwgZGF0KSB7XG4gICAgICAgIHcudGVybWluYXRlKCk7XG4gICAgICAgIGNiKGVyciwgZGF0KTtcbiAgICB9KTtcbiAgICB3LnBvc3RNZXNzYWdlKFtkYXQsIG9wdHNdLCBvcHRzLmNvbnN1bWUgPyBbZGF0LmJ1ZmZlcl0gOiBbXSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdy50ZXJtaW5hdGUoKTsgfTtcbn07XG4vLyBhdXRvIHN0cmVhbVxudmFyIGFzdHJtID0gZnVuY3Rpb24gKHN0cm0pIHtcbiAgICBzdHJtLm9uZGF0YSA9IGZ1bmN0aW9uIChkYXQsIGZpbmFsKSB7IHJldHVybiBwb3N0TWVzc2FnZShbZGF0LCBmaW5hbF0sIFtkYXQuYnVmZmVyXSk7IH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChldikge1xuICAgICAgICBpZiAoZXYuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0cm0ucHVzaChldi5kYXRhWzBdLCBldi5kYXRhWzFdKTtcbiAgICAgICAgICAgIHBvc3RNZXNzYWdlKFtldi5kYXRhWzBdLmxlbmd0aF0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN0cm0uZmx1c2goKTtcbiAgICB9O1xufTtcbi8vIGFzeW5jIHN0cmVhbSBhdHRhY2hcbnZhciBhc3RybWlmeSA9IGZ1bmN0aW9uIChmbnMsIHN0cm0sIG9wdHMsIGluaXQsIGlkLCBmbHVzaCwgZXh0KSB7XG4gICAgdmFyIHQ7XG4gICAgdmFyIHcgPSB3cmtyKGZucywgaW5pdCwgaWQsIGZ1bmN0aW9uIChlcnIsIGRhdCkge1xuICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgdy50ZXJtaW5hdGUoKSwgc3RybS5vbmRhdGEuY2FsbChzdHJtLCBlcnIpO1xuICAgICAgICBlbHNlIGlmICghQXJyYXkuaXNBcnJheShkYXQpKVxuICAgICAgICAgICAgZXh0KGRhdCk7XG4gICAgICAgIGVsc2UgaWYgKGRhdC5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgc3RybS5xdWV1ZWRTaXplIC09IGRhdFswXTtcbiAgICAgICAgICAgIGlmIChzdHJtLm9uZHJhaW4pXG4gICAgICAgICAgICAgICAgc3RybS5vbmRyYWluKGRhdFswXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZGF0WzFdKVxuICAgICAgICAgICAgICAgIHcudGVybWluYXRlKCk7XG4gICAgICAgICAgICBzdHJtLm9uZGF0YS5jYWxsKHN0cm0sIGVyciwgZGF0WzBdLCBkYXRbMV0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgdy5wb3N0TWVzc2FnZShvcHRzKTtcbiAgICBzdHJtLnF1ZXVlZFNpemUgPSAwO1xuICAgIHN0cm0ucHVzaCA9IGZ1bmN0aW9uIChkLCBmKSB7XG4gICAgICAgIGlmICghc3RybS5vbmRhdGEpXG4gICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgIGlmICh0KVxuICAgICAgICAgICAgc3RybS5vbmRhdGEoZXJyKDQsIDAsIDEpLCBudWxsLCAhIWYpO1xuICAgICAgICBzdHJtLnF1ZXVlZFNpemUgKz0gZC5sZW5ndGg7XG4gICAgICAgIHcucG9zdE1lc3NhZ2UoW2QsIHQgPSBmXSwgW2QuYnVmZmVyXSk7XG4gICAgfTtcbiAgICBzdHJtLnRlcm1pbmF0ZSA9IGZ1bmN0aW9uICgpIHsgdy50ZXJtaW5hdGUoKTsgfTtcbiAgICBpZiAoZmx1c2gpIHtcbiAgICAgICAgc3RybS5mbHVzaCA9IGZ1bmN0aW9uICgpIHsgdy5wb3N0TWVzc2FnZShbXSk7IH07XG4gICAgfVxufTtcbi8vIHJlYWQgMiBieXRlc1xudmFyIGIyID0gZnVuY3Rpb24gKGQsIGIpIHsgcmV0dXJuIGRbYl0gfCAoZFtiICsgMV0gPDwgOCk7IH07XG4vLyByZWFkIDQgYnl0ZXNcbnZhciBiNCA9IGZ1bmN0aW9uIChkLCBiKSB7IHJldHVybiAoZFtiXSB8IChkW2IgKyAxXSA8PCA4KSB8IChkW2IgKyAyXSA8PCAxNikgfCAoZFtiICsgM10gPDwgMjQpKSA+Pj4gMDsgfTtcbnZhciBiOCA9IGZ1bmN0aW9uIChkLCBiKSB7IHJldHVybiBiNChkLCBiKSArIChiNChkLCBiICsgNCkgKiA0Mjk0OTY3Mjk2KTsgfTtcbi8vIHdyaXRlIGJ5dGVzXG52YXIgd2J5dGVzID0gZnVuY3Rpb24gKGQsIGIsIHYpIHtcbiAgICBmb3IgKDsgdjsgKytiKVxuICAgICAgICBkW2JdID0gdiwgdiA+Pj49IDg7XG59O1xuLy8gZ3ppcCBoZWFkZXJcbnZhciBnemggPSBmdW5jdGlvbiAoYywgbykge1xuICAgIHZhciBmbiA9IG8uZmlsZW5hbWU7XG4gICAgY1swXSA9IDMxLCBjWzFdID0gMTM5LCBjWzJdID0gOCwgY1s4XSA9IG8ubGV2ZWwgPCAyID8gNCA6IG8ubGV2ZWwgPT0gOSA/IDIgOiAwLCBjWzldID0gMzsgLy8gYXNzdW1lIFVuaXhcbiAgICBpZiAoby5tdGltZSAhPSAwKVxuICAgICAgICB3Ynl0ZXMoYywgNCwgTWF0aC5mbG9vcihuZXcgRGF0ZShvLm10aW1lIHx8IERhdGUubm93KCkpIC8gMTAwMCkpO1xuICAgIGlmIChmbikge1xuICAgICAgICBjWzNdID0gODtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gZm4ubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICBjW2kgKyAxMF0gPSBmbi5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbn07XG4vLyBnemlwIGZvb3RlcjogLTggdG8gLTQgPSBDUkMsIC00IHRvIC0wIGlzIGxlbmd0aFxuLy8gZ3ppcCBzdGFydFxudmFyIGd6cyA9IGZ1bmN0aW9uIChkKSB7XG4gICAgaWYgKGRbMF0gIT0gMzEgfHwgZFsxXSAhPSAxMzkgfHwgZFsyXSAhPSA4KVxuICAgICAgICBlcnIoNiwgJ2ludmFsaWQgZ3ppcCBkYXRhJyk7XG4gICAgdmFyIGZsZyA9IGRbM107XG4gICAgdmFyIHN0ID0gMTA7XG4gICAgaWYgKGZsZyAmIDQpXG4gICAgICAgIHN0ICs9IChkWzEwXSB8IGRbMTFdIDw8IDgpICsgMjtcbiAgICBmb3IgKHZhciB6cyA9IChmbGcgPj4gMyAmIDEpICsgKGZsZyA+PiA0ICYgMSk7IHpzID4gMDsgenMgLT0gIWRbc3QrK10pXG4gICAgICAgIDtcbiAgICByZXR1cm4gc3QgKyAoZmxnICYgMik7XG59O1xuLy8gZ3ppcCBsZW5ndGhcbnZhciBnemwgPSBmdW5jdGlvbiAoZCkge1xuICAgIHZhciBsID0gZC5sZW5ndGg7XG4gICAgcmV0dXJuIChkW2wgLSA0XSB8IGRbbCAtIDNdIDw8IDggfCBkW2wgLSAyXSA8PCAxNiB8IGRbbCAtIDFdIDw8IDI0KSA+Pj4gMDtcbn07XG4vLyBnemlwIGhlYWRlciBsZW5ndGhcbnZhciBnemhsID0gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIDEwICsgKG8uZmlsZW5hbWUgPyBvLmZpbGVuYW1lLmxlbmd0aCArIDEgOiAwKTsgfTtcbi8vIHpsaWIgaGVhZGVyXG52YXIgemxoID0gZnVuY3Rpb24gKGMsIG8pIHtcbiAgICB2YXIgbHYgPSBvLmxldmVsLCBmbCA9IGx2ID09IDAgPyAwIDogbHYgPCA2ID8gMSA6IGx2ID09IDkgPyAzIDogMjtcbiAgICBjWzBdID0gMTIwLCBjWzFdID0gKGZsIDw8IDYpIHwgKG8uZGljdGlvbmFyeSAmJiAzMik7XG4gICAgY1sxXSB8PSAzMSAtICgoY1swXSA8PCA4KSB8IGNbMV0pICUgMzE7XG4gICAgaWYgKG8uZGljdGlvbmFyeSkge1xuICAgICAgICB2YXIgaCA9IGFkbGVyKCk7XG4gICAgICAgIGgucChvLmRpY3Rpb25hcnkpO1xuICAgICAgICB3Ynl0ZXMoYywgMiwgaC5kKCkpO1xuICAgIH1cbn07XG4vLyB6bGliIHN0YXJ0XG52YXIgemxzID0gZnVuY3Rpb24gKGQsIGRpY3QpIHtcbiAgICBpZiAoKGRbMF0gJiAxNSkgIT0gOCB8fCAoZFswXSA+PiA0KSA+IDcgfHwgKChkWzBdIDw8IDggfCBkWzFdKSAlIDMxKSlcbiAgICAgICAgZXJyKDYsICdpbnZhbGlkIHpsaWIgZGF0YScpO1xuICAgIGlmICgoZFsxXSA+PiA1ICYgMSkgPT0gKyFkaWN0KVxuICAgICAgICBlcnIoNiwgJ2ludmFsaWQgemxpYiBkYXRhOiAnICsgKGRbMV0gJiAzMiA/ICduZWVkJyA6ICd1bmV4cGVjdGVkJykgKyAnIGRpY3Rpb25hcnknKTtcbiAgICByZXR1cm4gKGRbMV0gPj4gMyAmIDQpICsgMjtcbn07XG5mdW5jdGlvbiBTdHJtT3B0KG9wdHMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzID09ICdmdW5jdGlvbicpXG4gICAgICAgIGNiID0gb3B0cywgb3B0cyA9IHt9O1xuICAgIHRoaXMub25kYXRhID0gY2I7XG4gICAgcmV0dXJuIG9wdHM7XG59XG4vKipcbiAqIFN0cmVhbWluZyBERUZMQVRFIGNvbXByZXNzaW9uXG4gKi9cbnZhciBEZWZsYXRlID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERlZmxhdGUob3B0cywgY2IpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzID09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICAgICAgdGhpcy5vbmRhdGEgPSBjYjtcbiAgICAgICAgdGhpcy5vID0gb3B0cyB8fCB7fTtcbiAgICAgICAgdGhpcy5zID0geyBsOiAwLCBpOiAzMjc2OCwgdzogMzI3NjgsIHo6IDMyNzY4IH07XG4gICAgICAgIC8vIEJ1ZmZlciBsZW5ndGggbXVzdCBhbHdheXMgYmUgMCBtb2QgMzI3NjggZm9yIGluZGV4IGNhbGN1bGF0aW9ucyB0byBiZSBjb3JyZWN0IHdoZW4gbW9kaWZ5aW5nIGhlYWQgYW5kIHByZXZcbiAgICAgICAgLy8gOTgzMDQgPSAzMjc2OCAobG9va2JhY2spICsgNjU1MzYgKGNvbW1vbiBjaHVuayBzaXplKVxuICAgICAgICB0aGlzLmIgPSBuZXcgdTgoOTgzMDQpO1xuICAgICAgICBpZiAodGhpcy5vLmRpY3Rpb25hcnkpIHtcbiAgICAgICAgICAgIHZhciBkaWN0ID0gdGhpcy5vLmRpY3Rpb25hcnkuc3ViYXJyYXkoLTMyNzY4KTtcbiAgICAgICAgICAgIHRoaXMuYi5zZXQoZGljdCwgMzI3NjggLSBkaWN0Lmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLnMuaSA9IDMyNzY4IC0gZGljdC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgRGVmbGF0ZS5wcm90b3R5cGUucCA9IGZ1bmN0aW9uIChjLCBmKSB7XG4gICAgICAgIHRoaXMub25kYXRhKGRvcHQoYywgdGhpcy5vLCAwLCAwLCB0aGlzLnMpLCBmKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIGRlZmxhdGVkXG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIERlZmxhdGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIGlmICghdGhpcy5vbmRhdGEpXG4gICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgIGlmICh0aGlzLnMubClcbiAgICAgICAgICAgIGVycig0KTtcbiAgICAgICAgdmFyIGVuZExlbiA9IGNodW5rLmxlbmd0aCArIHRoaXMucy56O1xuICAgICAgICBpZiAoZW5kTGVuID4gdGhpcy5iLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGVuZExlbiA+IDIgKiB0aGlzLmIubGVuZ3RoIC0gMzI3NjgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3QnVmID0gbmV3IHU4KGVuZExlbiAmIC0zMjc2OCk7XG4gICAgICAgICAgICAgICAgbmV3QnVmLnNldCh0aGlzLmIuc3ViYXJyYXkoMCwgdGhpcy5zLnopKTtcbiAgICAgICAgICAgICAgICB0aGlzLmIgPSBuZXdCdWY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgc3BsaXQgPSB0aGlzLmIubGVuZ3RoIC0gdGhpcy5zLno7XG4gICAgICAgICAgICB0aGlzLmIuc2V0KGNodW5rLnN1YmFycmF5KDAsIHNwbGl0KSwgdGhpcy5zLnopO1xuICAgICAgICAgICAgdGhpcy5zLnogPSB0aGlzLmIubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5wKHRoaXMuYiwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5iLnNldCh0aGlzLmIuc3ViYXJyYXkoLTMyNzY4KSk7XG4gICAgICAgICAgICB0aGlzLmIuc2V0KGNodW5rLnN1YmFycmF5KHNwbGl0KSwgMzI3NjgpO1xuICAgICAgICAgICAgdGhpcy5zLnogPSBjaHVuay5sZW5ndGggLSBzcGxpdCArIDMyNzY4O1xuICAgICAgICAgICAgdGhpcy5zLmkgPSAzMjc2NiwgdGhpcy5zLncgPSAzMjc2ODtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYi5zZXQoY2h1bmssIHRoaXMucy56KTtcbiAgICAgICAgICAgIHRoaXMucy56ICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnMubCA9IGZpbmFsICYgMTtcbiAgICAgICAgaWYgKHRoaXMucy56ID4gdGhpcy5zLncgKyA4MTkxIHx8IGZpbmFsKSB7XG4gICAgICAgICAgICB0aGlzLnAodGhpcy5iLCBmaW5hbCB8fCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnMudyA9IHRoaXMucy5pLCB0aGlzLnMuaSAtPSAyO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGbHVzaGVzIGJ1ZmZlcmVkIHVuY29tcHJlc3NlZCBkYXRhLiBVc2VmdWwgdG8gaW1tZWRpYXRlbHkgcmV0cmlldmUgdGhlXG4gICAgICogZGVmbGF0ZWQgb3V0cHV0IGZvciBzbWFsbCBpbnB1dHMuXG4gICAgICovXG4gICAgRGVmbGF0ZS5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5vbmRhdGEpXG4gICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgIGlmICh0aGlzLnMubClcbiAgICAgICAgICAgIGVycig0KTtcbiAgICAgICAgdGhpcy5wKHRoaXMuYiwgZmFsc2UpO1xuICAgICAgICB0aGlzLnMudyA9IHRoaXMucy5pLCB0aGlzLnMuaSAtPSAyO1xuICAgIH07XG4gICAgcmV0dXJuIERlZmxhdGU7XG59KCkpO1xuZXhwb3J0IHsgRGVmbGF0ZSB9O1xuLyoqXG4gKiBBc3luY2hyb25vdXMgc3RyZWFtaW5nIERFRkxBVEUgY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jRGVmbGF0ZSA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBc3luY0RlZmxhdGUob3B0cywgY2IpIHtcbiAgICAgICAgYXN0cm1pZnkoW1xuICAgICAgICAgICAgYkRmbHQsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbYXN0cm0sIERlZmxhdGVdOyB9XG4gICAgICAgIF0sIHRoaXMsIFN0cm1PcHQuY2FsbCh0aGlzLCBvcHRzLCBjYiksIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgdmFyIHN0cm0gPSBuZXcgRGVmbGF0ZShldi5kYXRhKTtcbiAgICAgICAgICAgIG9ubWVzc2FnZSA9IGFzdHJtKHN0cm0pO1xuICAgICAgICB9LCA2LCAxKTtcbiAgICB9XG4gICAgcmV0dXJuIEFzeW5jRGVmbGF0ZTtcbn0oKSk7XG5leHBvcnQgeyBBc3luY0RlZmxhdGUgfTtcbmV4cG9ydCBmdW5jdGlvbiBkZWZsYXRlKGRhdGEsIG9wdHMsIGNiKSB7XG4gICAgaWYgKCFjYilcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBjYiAhPSAnZnVuY3Rpb24nKVxuICAgICAgICBlcnIoNyk7XG4gICAgcmV0dXJuIGNiaWZ5KGRhdGEsIG9wdHMsIFtcbiAgICAgICAgYkRmbHQsXG4gICAgXSwgZnVuY3Rpb24gKGV2KSB7IHJldHVybiBwYmYoZGVmbGF0ZVN5bmMoZXYuZGF0YVswXSwgZXYuZGF0YVsxXSkpOyB9LCAwLCBjYik7XG59XG4vKipcbiAqIENvbXByZXNzZXMgZGF0YSB3aXRoIERFRkxBVEUgd2l0aG91dCBhbnkgd3JhcHBlclxuICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gY29tcHJlc3NcbiAqIEBwYXJhbSBvcHRzIFRoZSBjb21wcmVzc2lvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZGVmbGF0ZWQgdmVyc2lvbiBvZiB0aGUgZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmbGF0ZVN5bmMoZGF0YSwgb3B0cykge1xuICAgIHJldHVybiBkb3B0KGRhdGEsIG9wdHMgfHwge30sIDAsIDApO1xufVxuLyoqXG4gKiBTdHJlYW1pbmcgREVGTEFURSBkZWNvbXByZXNzaW9uXG4gKi9cbnZhciBJbmZsYXRlID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEluZmxhdGUob3B0cywgY2IpIHtcbiAgICAgICAgLy8gbm8gU3RybU9wdCBoZXJlIHRvIGF2b2lkIGFkZGluZyB0byB3b3JrZXJpemVyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cyA9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgICAgIHRoaXMub25kYXRhID0gY2I7XG4gICAgICAgIHZhciBkaWN0ID0gb3B0cyAmJiBvcHRzLmRpY3Rpb25hcnkgJiYgb3B0cy5kaWN0aW9uYXJ5LnN1YmFycmF5KC0zMjc2OCk7XG4gICAgICAgIHRoaXMucyA9IHsgaTogMCwgYjogZGljdCA/IGRpY3QubGVuZ3RoIDogMCB9O1xuICAgICAgICB0aGlzLm8gPSBuZXcgdTgoMzI3NjgpO1xuICAgICAgICB0aGlzLnAgPSBuZXcgdTgoMCk7XG4gICAgICAgIGlmIChkaWN0KVxuICAgICAgICAgICAgdGhpcy5vLnNldChkaWN0KTtcbiAgICB9XG4gICAgSW5mbGF0ZS5wcm90b3R5cGUuZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmICghdGhpcy5vbmRhdGEpXG4gICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgIGlmICh0aGlzLmQpXG4gICAgICAgICAgICBlcnIoNCk7XG4gICAgICAgIGlmICghdGhpcy5wLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXMucCA9IGM7XG4gICAgICAgIGVsc2UgaWYgKGMubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgbiA9IG5ldyB1OCh0aGlzLnAubGVuZ3RoICsgYy5sZW5ndGgpO1xuICAgICAgICAgICAgbi5zZXQodGhpcy5wKSwgbi5zZXQoYywgdGhpcy5wLmxlbmd0aCksIHRoaXMucCA9IG47XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEluZmxhdGUucHJvdG90eXBlLmMgPSBmdW5jdGlvbiAoZmluYWwpIHtcbiAgICAgICAgdGhpcy5zLmkgPSArKHRoaXMuZCA9IGZpbmFsIHx8IGZhbHNlKTtcbiAgICAgICAgdmFyIGJ0cyA9IHRoaXMucy5iO1xuICAgICAgICB2YXIgZHQgPSBpbmZsdCh0aGlzLnAsIHRoaXMucywgdGhpcy5vKTtcbiAgICAgICAgdGhpcy5vbmRhdGEoc2xjKGR0LCBidHMsIHRoaXMucy5iKSwgdGhpcy5kKTtcbiAgICAgICAgdGhpcy5vID0gc2xjKGR0LCB0aGlzLnMuYiAtIDMyNzY4KSwgdGhpcy5zLmIgPSB0aGlzLm8ubGVuZ3RoO1xuICAgICAgICB0aGlzLnAgPSBzbGModGhpcy5wLCAodGhpcy5zLnAgLyA4KSB8IDApLCB0aGlzLnMucCAmPSA3O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgaW5mbGF0ZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBmaW5hbCBjaHVua1xuICAgICAqL1xuICAgIEluZmxhdGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIHRoaXMuZShjaHVuayksIHRoaXMuYyhmaW5hbCk7XG4gICAgfTtcbiAgICByZXR1cm4gSW5mbGF0ZTtcbn0oKSk7XG5leHBvcnQgeyBJbmZsYXRlIH07XG4vKipcbiAqIEFzeW5jaHJvbm91cyBzdHJlYW1pbmcgREVGTEFURSBkZWNvbXByZXNzaW9uXG4gKi9cbnZhciBBc3luY0luZmxhdGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQXN5bmNJbmZsYXRlKG9wdHMsIGNiKSB7XG4gICAgICAgIGFzdHJtaWZ5KFtcbiAgICAgICAgICAgIGJJbmZsdCxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFthc3RybSwgSW5mbGF0ZV07IH1cbiAgICAgICAgXSwgdGhpcywgU3RybU9wdC5jYWxsKHRoaXMsIG9wdHMsIGNiKSwgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICB2YXIgc3RybSA9IG5ldyBJbmZsYXRlKGV2LmRhdGEpO1xuICAgICAgICAgICAgb25tZXNzYWdlID0gYXN0cm0oc3RybSk7XG4gICAgICAgIH0sIDcsIDApO1xuICAgIH1cbiAgICByZXR1cm4gQXN5bmNJbmZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jSW5mbGF0ZSB9O1xuZXhwb3J0IGZ1bmN0aW9uIGluZmxhdGUoZGF0YSwgb3B0cywgY2IpIHtcbiAgICBpZiAoIWNiKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNiICE9ICdmdW5jdGlvbicpXG4gICAgICAgIGVycig3KTtcbiAgICByZXR1cm4gY2JpZnkoZGF0YSwgb3B0cywgW1xuICAgICAgICBiSW5mbHRcbiAgICBdLCBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIHBiZihpbmZsYXRlU3luYyhldi5kYXRhWzBdLCBnb3B0KGV2LmRhdGFbMV0pKSk7IH0sIDEsIGNiKTtcbn1cbi8qKlxuICogRXhwYW5kcyBERUZMQVRFIGRhdGEgd2l0aCBubyB3cmFwcGVyXG4gKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBkZWNvbXByZXNzXG4gKiBAcGFyYW0gb3B0cyBUaGUgZGVjb21wcmVzc2lvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZGVjb21wcmVzc2VkIHZlcnNpb24gb2YgdGhlIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZmxhdGVTeW5jKGRhdGEsIG9wdHMpIHtcbiAgICByZXR1cm4gaW5mbHQoZGF0YSwgeyBpOiAyIH0sIG9wdHMgJiYgb3B0cy5vdXQsIG9wdHMgJiYgb3B0cy5kaWN0aW9uYXJ5KTtcbn1cbi8vIGJlZm9yZSB5b3UgeWVsbCBhdCBtZSBmb3Igbm90IGp1c3QgdXNpbmcgZXh0ZW5kcywgbXkgcmVhc29uIGlzIHRoYXQgVFMgaW5oZXJpdGFuY2UgaXMgaGFyZCB0byB3b3JrZXJpemUuXG4vKipcbiAqIFN0cmVhbWluZyBHWklQIGNvbXByZXNzaW9uXG4gKi9cbnZhciBHemlwID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEd6aXAob3B0cywgY2IpIHtcbiAgICAgICAgdGhpcy5jID0gY3JjKCk7XG4gICAgICAgIHRoaXMubCA9IDA7XG4gICAgICAgIHRoaXMudiA9IDE7XG4gICAgICAgIERlZmxhdGUuY2FsbCh0aGlzLCBvcHRzLCBjYik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIEdaSVBwZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgR3ppcC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdGhpcy5jLnAoY2h1bmspO1xuICAgICAgICB0aGlzLmwgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICBEZWZsYXRlLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGZpbmFsKTtcbiAgICB9O1xuICAgIEd6aXAucHJvdG90eXBlLnAgPSBmdW5jdGlvbiAoYywgZikge1xuICAgICAgICB2YXIgcmF3ID0gZG9wdChjLCB0aGlzLm8sIHRoaXMudiAmJiBnemhsKHRoaXMubyksIGYgJiYgOCwgdGhpcy5zKTtcbiAgICAgICAgaWYgKHRoaXMudilcbiAgICAgICAgICAgIGd6aChyYXcsIHRoaXMubyksIHRoaXMudiA9IDA7XG4gICAgICAgIGlmIChmKVxuICAgICAgICAgICAgd2J5dGVzKHJhdywgcmF3Lmxlbmd0aCAtIDgsIHRoaXMuYy5kKCkpLCB3Ynl0ZXMocmF3LCByYXcubGVuZ3RoIC0gNCwgdGhpcy5sKTtcbiAgICAgICAgdGhpcy5vbmRhdGEocmF3LCBmKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEZsdXNoZXMgYnVmZmVyZWQgdW5jb21wcmVzc2VkIGRhdGEuIFVzZWZ1bCB0byBpbW1lZGlhdGVseSByZXRyaWV2ZSB0aGVcbiAgICAgKiBHWklQcGVkIG91dHB1dCBmb3Igc21hbGwgaW5wdXRzLlxuICAgICAqL1xuICAgIEd6aXAucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBEZWZsYXRlLnByb3RvdHlwZS5mbHVzaC5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgcmV0dXJuIEd6aXA7XG59KCkpO1xuZXhwb3J0IHsgR3ppcCB9O1xuLyoqXG4gKiBBc3luY2hyb25vdXMgc3RyZWFtaW5nIEdaSVAgY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jR3ppcCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBc3luY0d6aXAob3B0cywgY2IpIHtcbiAgICAgICAgYXN0cm1pZnkoW1xuICAgICAgICAgICAgYkRmbHQsXG4gICAgICAgICAgICBnemUsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbYXN0cm0sIERlZmxhdGUsIEd6aXBdOyB9XG4gICAgICAgIF0sIHRoaXMsIFN0cm1PcHQuY2FsbCh0aGlzLCBvcHRzLCBjYiksIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgdmFyIHN0cm0gPSBuZXcgR3ppcChldi5kYXRhKTtcbiAgICAgICAgICAgIG9ubWVzc2FnZSA9IGFzdHJtKHN0cm0pO1xuICAgICAgICB9LCA4LCAxKTtcbiAgICB9XG4gICAgcmV0dXJuIEFzeW5jR3ppcDtcbn0oKSk7XG5leHBvcnQgeyBBc3luY0d6aXAgfTtcbmV4cG9ydCBmdW5jdGlvbiBnemlwKGRhdGEsIG9wdHMsIGNiKSB7XG4gICAgaWYgKCFjYilcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBjYiAhPSAnZnVuY3Rpb24nKVxuICAgICAgICBlcnIoNyk7XG4gICAgcmV0dXJuIGNiaWZ5KGRhdGEsIG9wdHMsIFtcbiAgICAgICAgYkRmbHQsXG4gICAgICAgIGd6ZSxcbiAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gW2d6aXBTeW5jXTsgfVxuICAgIF0sIGZ1bmN0aW9uIChldikgeyByZXR1cm4gcGJmKGd6aXBTeW5jKGV2LmRhdGFbMF0sIGV2LmRhdGFbMV0pKTsgfSwgMiwgY2IpO1xufVxuLyoqXG4gKiBDb21wcmVzc2VzIGRhdGEgd2l0aCBHWklQXG4gKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBjb21wcmVzc1xuICogQHBhcmFtIG9wdHMgVGhlIGNvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBnemlwcGVkIHZlcnNpb24gb2YgdGhlIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd6aXBTeW5jKGRhdGEsIG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpXG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICB2YXIgYyA9IGNyYygpLCBsID0gZGF0YS5sZW5ndGg7XG4gICAgYy5wKGRhdGEpO1xuICAgIHZhciBkID0gZG9wdChkYXRhLCBvcHRzLCBnemhsKG9wdHMpLCA4KSwgcyA9IGQubGVuZ3RoO1xuICAgIHJldHVybiBnemgoZCwgb3B0cyksIHdieXRlcyhkLCBzIC0gOCwgYy5kKCkpLCB3Ynl0ZXMoZCwgcyAtIDQsIGwpLCBkO1xufVxuLyoqXG4gKiBTdHJlYW1pbmcgc2luZ2xlIG9yIG11bHRpLW1lbWJlciBHWklQIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEd1bnppcCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBHdW56aXAob3B0cywgY2IpIHtcbiAgICAgICAgdGhpcy52ID0gMTtcbiAgICAgICAgdGhpcy5yID0gMDtcbiAgICAgICAgSW5mbGF0ZS5jYWxsKHRoaXMsIG9wdHMsIGNiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgR1VOWklQcGVkXG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIEd1bnppcC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgSW5mbGF0ZS5wcm90b3R5cGUuZS5jYWxsKHRoaXMsIGNodW5rKTtcbiAgICAgICAgdGhpcy5yICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMudikge1xuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLnAuc3ViYXJyYXkodGhpcy52IC0gMSk7XG4gICAgICAgICAgICB2YXIgcyA9IHAubGVuZ3RoID4gMyA/IGd6cyhwKSA6IDQ7XG4gICAgICAgICAgICBpZiAocyA+IHAubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaW5hbClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52ID4gMSAmJiB0aGlzLm9ubWVtYmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbm1lbWJlcih0aGlzLnIgLSBwLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnAgPSBwLnN1YmFycmF5KHMpLCB0aGlzLnYgPSAwO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5lY2Vzc2FyeSB0byBwcmV2ZW50IFRTIGZyb20gdXNpbmcgdGhlIGNsb3N1cmUgdmFsdWVcbiAgICAgICAgLy8gVGhpcyBhbGxvd3MgZm9yIHdvcmtlcml6YXRpb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5XG4gICAgICAgIEluZmxhdGUucHJvdG90eXBlLmMuY2FsbCh0aGlzLCBmaW5hbCk7XG4gICAgICAgIC8vIHByb2Nlc3MgY29uY2F0ZW5hdGVkIEdaSVBcbiAgICAgICAgaWYgKHRoaXMucy5mICYmICF0aGlzLnMubCAmJiAhZmluYWwpIHtcbiAgICAgICAgICAgIHRoaXMudiA9IHNoZnQodGhpcy5zLnApICsgOTtcbiAgICAgICAgICAgIHRoaXMucyA9IHsgaTogMCB9O1xuICAgICAgICAgICAgdGhpcy5vID0gbmV3IHU4KDApO1xuICAgICAgICAgICAgdGhpcy5wdXNoKG5ldyB1OCgwKSwgZmluYWwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gR3VuemlwO1xufSgpKTtcbmV4cG9ydCB7IEd1bnppcCB9O1xuLyoqXG4gKiBBc3luY2hyb25vdXMgc3RyZWFtaW5nIHNpbmdsZSBvciBtdWx0aS1tZW1iZXIgR1pJUCBkZWNvbXByZXNzaW9uXG4gKi9cbnZhciBBc3luY0d1bnppcCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBc3luY0d1bnppcChvcHRzLCBjYikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBhc3RybWlmeShbXG4gICAgICAgICAgICBiSW5mbHQsXG4gICAgICAgICAgICBndXplLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gW2FzdHJtLCBJbmZsYXRlLCBHdW56aXBdOyB9XG4gICAgICAgIF0sIHRoaXMsIFN0cm1PcHQuY2FsbCh0aGlzLCBvcHRzLCBjYiksIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgdmFyIHN0cm0gPSBuZXcgR3VuemlwKGV2LmRhdGEpO1xuICAgICAgICAgICAgc3RybS5vbm1lbWJlciA9IGZ1bmN0aW9uIChvZmZzZXQpIHsgcmV0dXJuIHBvc3RNZXNzYWdlKG9mZnNldCk7IH07XG4gICAgICAgICAgICBvbm1lc3NhZ2UgPSBhc3RybShzdHJtKTtcbiAgICAgICAgfSwgOSwgMCwgZnVuY3Rpb24gKG9mZnNldCkgeyByZXR1cm4gX3RoaXMub25tZW1iZXIgJiYgX3RoaXMub25tZW1iZXIob2Zmc2V0KTsgfSk7XG4gICAgfVxuICAgIHJldHVybiBBc3luY0d1bnppcDtcbn0oKSk7XG5leHBvcnQgeyBBc3luY0d1bnppcCB9O1xuZXhwb3J0IGZ1bmN0aW9uIGd1bnppcChkYXRhLCBvcHRzLCBjYikge1xuICAgIGlmICghY2IpXG4gICAgICAgIGNiID0gb3B0cywgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2YgY2IgIT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZXJyKDcpO1xuICAgIHJldHVybiBjYmlmeShkYXRhLCBvcHRzLCBbXG4gICAgICAgIGJJbmZsdCxcbiAgICAgICAgZ3V6ZSxcbiAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gW2d1bnppcFN5bmNdOyB9XG4gICAgXSwgZnVuY3Rpb24gKGV2KSB7IHJldHVybiBwYmYoZ3VuemlwU3luYyhldi5kYXRhWzBdLCBldi5kYXRhWzFdKSk7IH0sIDMsIGNiKTtcbn1cbi8qKlxuICogRXhwYW5kcyBHWklQIGRhdGFcbiAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGRlY29tcHJlc3NcbiAqIEBwYXJhbSBvcHRzIFRoZSBkZWNvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBkZWNvbXByZXNzZWQgdmVyc2lvbiBvZiB0aGUgZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3VuemlwU3luYyhkYXRhLCBvcHRzKSB7XG4gICAgdmFyIHN0ID0gZ3pzKGRhdGEpO1xuICAgIGlmIChzdCArIDggPiBkYXRhLmxlbmd0aClcbiAgICAgICAgZXJyKDYsICdpbnZhbGlkIGd6aXAgZGF0YScpO1xuICAgIHJldHVybiBpbmZsdChkYXRhLnN1YmFycmF5KHN0LCAtOCksIHsgaTogMiB9LCBvcHRzICYmIG9wdHMub3V0IHx8IG5ldyB1OChnemwoZGF0YSkpLCBvcHRzICYmIG9wdHMuZGljdGlvbmFyeSk7XG59XG4vKipcbiAqIFN0cmVhbWluZyBabGliIGNvbXByZXNzaW9uXG4gKi9cbnZhciBabGliID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFpsaWIob3B0cywgY2IpIHtcbiAgICAgICAgdGhpcy5jID0gYWRsZXIoKTtcbiAgICAgICAgdGhpcy52ID0gMTtcbiAgICAgICAgRGVmbGF0ZS5jYWxsKHRoaXMsIG9wdHMsIGNiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgemxpYmJlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBabGliLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICB0aGlzLmMucChjaHVuayk7XG4gICAgICAgIERlZmxhdGUucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZmluYWwpO1xuICAgIH07XG4gICAgWmxpYi5wcm90b3R5cGUucCA9IGZ1bmN0aW9uIChjLCBmKSB7XG4gICAgICAgIHZhciByYXcgPSBkb3B0KGMsIHRoaXMubywgdGhpcy52ICYmICh0aGlzLm8uZGljdGlvbmFyeSA/IDYgOiAyKSwgZiAmJiA0LCB0aGlzLnMpO1xuICAgICAgICBpZiAodGhpcy52KVxuICAgICAgICAgICAgemxoKHJhdywgdGhpcy5vKSwgdGhpcy52ID0gMDtcbiAgICAgICAgaWYgKGYpXG4gICAgICAgICAgICB3Ynl0ZXMocmF3LCByYXcubGVuZ3RoIC0gNCwgdGhpcy5jLmQoKSk7XG4gICAgICAgIHRoaXMub25kYXRhKHJhdywgZik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGbHVzaGVzIGJ1ZmZlcmVkIHVuY29tcHJlc3NlZCBkYXRhLiBVc2VmdWwgdG8gaW1tZWRpYXRlbHkgcmV0cmlldmUgdGhlXG4gICAgICogemxpYmJlZCBvdXRwdXQgZm9yIHNtYWxsIGlucHV0cy5cbiAgICAgKi9cbiAgICBabGliLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgRGVmbGF0ZS5wcm90b3R5cGUuZmx1c2guY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIHJldHVybiBabGliO1xufSgpKTtcbmV4cG9ydCB7IFpsaWIgfTtcbi8qKlxuICogQXN5bmNocm9ub3VzIHN0cmVhbWluZyBabGliIGNvbXByZXNzaW9uXG4gKi9cbnZhciBBc3luY1psaWIgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQXN5bmNabGliKG9wdHMsIGNiKSB7XG4gICAgICAgIGFzdHJtaWZ5KFtcbiAgICAgICAgICAgIGJEZmx0LFxuICAgICAgICAgICAgemxlLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gW2FzdHJtLCBEZWZsYXRlLCBabGliXTsgfVxuICAgICAgICBdLCB0aGlzLCBTdHJtT3B0LmNhbGwodGhpcywgb3B0cywgY2IpLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIHZhciBzdHJtID0gbmV3IFpsaWIoZXYuZGF0YSk7XG4gICAgICAgICAgICBvbm1lc3NhZ2UgPSBhc3RybShzdHJtKTtcbiAgICAgICAgfSwgMTAsIDEpO1xuICAgIH1cbiAgICByZXR1cm4gQXN5bmNabGliO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jWmxpYiB9O1xuZXhwb3J0IGZ1bmN0aW9uIHpsaWIoZGF0YSwgb3B0cywgY2IpIHtcbiAgICBpZiAoIWNiKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNiICE9ICdmdW5jdGlvbicpXG4gICAgICAgIGVycig3KTtcbiAgICByZXR1cm4gY2JpZnkoZGF0YSwgb3B0cywgW1xuICAgICAgICBiRGZsdCxcbiAgICAgICAgemxlLFxuICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbemxpYlN5bmNdOyB9XG4gICAgXSwgZnVuY3Rpb24gKGV2KSB7IHJldHVybiBwYmYoemxpYlN5bmMoZXYuZGF0YVswXSwgZXYuZGF0YVsxXSkpOyB9LCA0LCBjYik7XG59XG4vKipcbiAqIENvbXByZXNzIGRhdGEgd2l0aCBabGliXG4gKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBjb21wcmVzc1xuICogQHBhcmFtIG9wdHMgVGhlIGNvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSB6bGliLWNvbXByZXNzZWQgdmVyc2lvbiBvZiB0aGUgZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gemxpYlN5bmMoZGF0YSwgb3B0cykge1xuICAgIGlmICghb3B0cylcbiAgICAgICAgb3B0cyA9IHt9O1xuICAgIHZhciBhID0gYWRsZXIoKTtcbiAgICBhLnAoZGF0YSk7XG4gICAgdmFyIGQgPSBkb3B0KGRhdGEsIG9wdHMsIG9wdHMuZGljdGlvbmFyeSA/IDYgOiAyLCA0KTtcbiAgICByZXR1cm4gemxoKGQsIG9wdHMpLCB3Ynl0ZXMoZCwgZC5sZW5ndGggLSA0LCBhLmQoKSksIGQ7XG59XG4vKipcbiAqIFN0cmVhbWluZyBabGliIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIFVuemxpYiA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBVbnpsaWIob3B0cywgY2IpIHtcbiAgICAgICAgSW5mbGF0ZS5jYWxsKHRoaXMsIG9wdHMsIGNiKTtcbiAgICAgICAgdGhpcy52ID0gb3B0cyAmJiBvcHRzLmRpY3Rpb25hcnkgPyAyIDogMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgdW56bGliYmVkXG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIFVuemxpYi5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgSW5mbGF0ZS5wcm90b3R5cGUuZS5jYWxsKHRoaXMsIGNodW5rKTtcbiAgICAgICAgaWYgKHRoaXMudikge1xuICAgICAgICAgICAgaWYgKHRoaXMucC5sZW5ndGggPCA2ICYmICFmaW5hbClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnAgPSB0aGlzLnAuc3ViYXJyYXkoemxzKHRoaXMucCwgdGhpcy52IC0gMSkpLCB0aGlzLnYgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5hbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucC5sZW5ndGggPCA0KVxuICAgICAgICAgICAgICAgIGVycig2LCAnaW52YWxpZCB6bGliIGRhdGEnKTtcbiAgICAgICAgICAgIHRoaXMucCA9IHRoaXMucC5zdWJhcnJheSgwLCAtNCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbmVjZXNzYXJ5IHRvIHByZXZlbnQgVFMgZnJvbSB1c2luZyB0aGUgY2xvc3VyZSB2YWx1ZVxuICAgICAgICAvLyBUaGlzIGFsbG93cyBmb3Igd29ya2VyaXphdGlvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHlcbiAgICAgICAgSW5mbGF0ZS5wcm90b3R5cGUuYy5jYWxsKHRoaXMsIGZpbmFsKTtcbiAgICB9O1xuICAgIHJldHVybiBVbnpsaWI7XG59KCkpO1xuZXhwb3J0IHsgVW56bGliIH07XG4vKipcbiAqIEFzeW5jaHJvbm91cyBzdHJlYW1pbmcgWmxpYiBkZWNvbXByZXNzaW9uXG4gKi9cbnZhciBBc3luY1VuemxpYiA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBc3luY1VuemxpYihvcHRzLCBjYikge1xuICAgICAgICBhc3RybWlmeShbXG4gICAgICAgICAgICBiSW5mbHQsXG4gICAgICAgICAgICB6dWxlLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gW2FzdHJtLCBJbmZsYXRlLCBVbnpsaWJdOyB9XG4gICAgICAgIF0sIHRoaXMsIFN0cm1PcHQuY2FsbCh0aGlzLCBvcHRzLCBjYiksIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgdmFyIHN0cm0gPSBuZXcgVW56bGliKGV2LmRhdGEpO1xuICAgICAgICAgICAgb25tZXNzYWdlID0gYXN0cm0oc3RybSk7XG4gICAgICAgIH0sIDExLCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIEFzeW5jVW56bGliO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jVW56bGliIH07XG5leHBvcnQgZnVuY3Rpb24gdW56bGliKGRhdGEsIG9wdHMsIGNiKSB7XG4gICAgaWYgKCFjYilcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBjYiAhPSAnZnVuY3Rpb24nKVxuICAgICAgICBlcnIoNyk7XG4gICAgcmV0dXJuIGNiaWZ5KGRhdGEsIG9wdHMsIFtcbiAgICAgICAgYkluZmx0LFxuICAgICAgICB6dWxlLFxuICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbdW56bGliU3luY107IH1cbiAgICBdLCBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIHBiZih1bnpsaWJTeW5jKGV2LmRhdGFbMF0sIGdvcHQoZXYuZGF0YVsxXSkpKTsgfSwgNSwgY2IpO1xufVxuLyoqXG4gKiBFeHBhbmRzIFpsaWIgZGF0YVxuICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gZGVjb21wcmVzc1xuICogQHBhcmFtIG9wdHMgVGhlIGRlY29tcHJlc3Npb24gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnpsaWJTeW5jKGRhdGEsIG9wdHMpIHtcbiAgICByZXR1cm4gaW5mbHQoZGF0YS5zdWJhcnJheSh6bHMoZGF0YSwgb3B0cyAmJiBvcHRzLmRpY3Rpb25hcnkpLCAtNCksIHsgaTogMiB9LCBvcHRzICYmIG9wdHMub3V0LCBvcHRzICYmIG9wdHMuZGljdGlvbmFyeSk7XG59XG4vLyBEZWZhdWx0IGFsZ29yaXRobSBmb3IgY29tcHJlc3Npb24gKHVzZWQgYmVjYXVzZSBoYXZpbmcgYSBrbm93biBvdXRwdXQgc2l6ZSBhbGxvd3MgZmFzdGVyIGRlY29tcHJlc3Npb24pXG5leHBvcnQgeyBnemlwIGFzIGNvbXByZXNzLCBBc3luY0d6aXAgYXMgQXN5bmNDb21wcmVzcyB9O1xuZXhwb3J0IHsgZ3ppcFN5bmMgYXMgY29tcHJlc3NTeW5jLCBHemlwIGFzIENvbXByZXNzIH07XG4vKipcbiAqIFN0cmVhbWluZyBHWklQLCBabGliLCBvciByYXcgREVGTEFURSBkZWNvbXByZXNzaW9uXG4gKi9cbnZhciBEZWNvbXByZXNzID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERlY29tcHJlc3Mob3B0cywgY2IpIHtcbiAgICAgICAgdGhpcy5vID0gU3RybU9wdC5jYWxsKHRoaXMsIG9wdHMsIGNiKSB8fCB7fTtcbiAgICAgICAgdGhpcy5HID0gR3VuemlwO1xuICAgICAgICB0aGlzLkkgPSBJbmZsYXRlO1xuICAgICAgICB0aGlzLlogPSBVbnpsaWI7XG4gICAgfVxuICAgIC8vIGluaXQgc3Vic3RyZWFtXG4gICAgLy8gb3ZlcnJpZGVuIGJ5IEFzeW5jRGVjb21wcmVzc1xuICAgIERlY29tcHJlc3MucHJvdG90eXBlLmkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMucy5vbmRhdGEgPSBmdW5jdGlvbiAoZGF0LCBmaW5hbCkge1xuICAgICAgICAgICAgX3RoaXMub25kYXRhKGRhdCwgZmluYWwpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgZGVjb21wcmVzc2VkXG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIERlY29tcHJlc3MucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIGlmICghdGhpcy5vbmRhdGEpXG4gICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgIGlmICghdGhpcy5zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wICYmIHRoaXMucC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IG5ldyB1OCh0aGlzLnAubGVuZ3RoICsgY2h1bmsubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBuLnNldCh0aGlzLnApLCBuLnNldChjaHVuaywgdGhpcy5wLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5wID0gY2h1bms7XG4gICAgICAgICAgICBpZiAodGhpcy5wLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnMgPSAodGhpcy5wWzBdID09IDMxICYmIHRoaXMucFsxXSA9PSAxMzkgJiYgdGhpcy5wWzJdID09IDgpXG4gICAgICAgICAgICAgICAgICAgID8gbmV3IHRoaXMuRyh0aGlzLm8pXG4gICAgICAgICAgICAgICAgICAgIDogKCh0aGlzLnBbMF0gJiAxNSkgIT0gOCB8fCAodGhpcy5wWzBdID4+IDQpID4gNyB8fCAoKHRoaXMucFswXSA8PCA4IHwgdGhpcy5wWzFdKSAlIDMxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IHRoaXMuSSh0aGlzLm8pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyB0aGlzLloodGhpcy5vKTtcbiAgICAgICAgICAgICAgICB0aGlzLmkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnMucHVzaCh0aGlzLnAsIGZpbmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnAgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMucy5wdXNoKGNodW5rLCBmaW5hbCk7XG4gICAgfTtcbiAgICByZXR1cm4gRGVjb21wcmVzcztcbn0oKSk7XG5leHBvcnQgeyBEZWNvbXByZXNzIH07XG4vKipcbiAqIEFzeW5jaHJvbm91cyBzdHJlYW1pbmcgR1pJUCwgWmxpYiwgb3IgcmF3IERFRkxBVEUgZGVjb21wcmVzc2lvblxuICovXG52YXIgQXN5bmNEZWNvbXByZXNzID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFzeW5jRGVjb21wcmVzcyhvcHRzLCBjYikge1xuICAgICAgICBEZWNvbXByZXNzLmNhbGwodGhpcywgb3B0cywgY2IpO1xuICAgICAgICB0aGlzLnF1ZXVlZFNpemUgPSAwO1xuICAgICAgICB0aGlzLkcgPSBBc3luY0d1bnppcDtcbiAgICAgICAgdGhpcy5JID0gQXN5bmNJbmZsYXRlO1xuICAgICAgICB0aGlzLlogPSBBc3luY1VuemxpYjtcbiAgICB9XG4gICAgQXN5bmNEZWNvbXByZXNzLnByb3RvdHlwZS5pID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnMub25kYXRhID0gZnVuY3Rpb24gKGVyciwgZGF0LCBmaW5hbCkge1xuICAgICAgICAgICAgX3RoaXMub25kYXRhKGVyciwgZGF0LCBmaW5hbCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucy5vbmRyYWluID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgICAgIF90aGlzLnF1ZXVlZFNpemUgLT0gc2l6ZTtcbiAgICAgICAgICAgIGlmIChfdGhpcy5vbmRyYWluKVxuICAgICAgICAgICAgICAgIF90aGlzLm9uZHJhaW4oc2l6ZSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSBkZWNvbXByZXNzZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgQXN5bmNEZWNvbXByZXNzLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICB0aGlzLnF1ZXVlZFNpemUgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICBEZWNvbXByZXNzLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGZpbmFsKTtcbiAgICB9O1xuICAgIHJldHVybiBBc3luY0RlY29tcHJlc3M7XG59KCkpO1xuZXhwb3J0IHsgQXN5bmNEZWNvbXByZXNzIH07XG5leHBvcnQgZnVuY3Rpb24gZGVjb21wcmVzcyhkYXRhLCBvcHRzLCBjYikge1xuICAgIGlmICghY2IpXG4gICAgICAgIGNiID0gb3B0cywgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2YgY2IgIT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZXJyKDcpO1xuICAgIHJldHVybiAoZGF0YVswXSA9PSAzMSAmJiBkYXRhWzFdID09IDEzOSAmJiBkYXRhWzJdID09IDgpXG4gICAgICAgID8gZ3VuemlwKGRhdGEsIG9wdHMsIGNiKVxuICAgICAgICA6ICgoZGF0YVswXSAmIDE1KSAhPSA4IHx8IChkYXRhWzBdID4+IDQpID4gNyB8fCAoKGRhdGFbMF0gPDwgOCB8IGRhdGFbMV0pICUgMzEpKVxuICAgICAgICAgICAgPyBpbmZsYXRlKGRhdGEsIG9wdHMsIGNiKVxuICAgICAgICAgICAgOiB1bnpsaWIoZGF0YSwgb3B0cywgY2IpO1xufVxuLyoqXG4gKiBFeHBhbmRzIGNvbXByZXNzZWQgR1pJUCwgWmxpYiwgb3IgcmF3IERFRkxBVEUgZGF0YSwgYXV0b21hdGljYWxseSBkZXRlY3RpbmcgdGhlIGZvcm1hdFxuICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gZGVjb21wcmVzc1xuICogQHBhcmFtIG9wdHMgVGhlIGRlY29tcHJlc3Npb24gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvbXByZXNzU3luYyhkYXRhLCBvcHRzKSB7XG4gICAgcmV0dXJuIChkYXRhWzBdID09IDMxICYmIGRhdGFbMV0gPT0gMTM5ICYmIGRhdGFbMl0gPT0gOClcbiAgICAgICAgPyBndW56aXBTeW5jKGRhdGEsIG9wdHMpXG4gICAgICAgIDogKChkYXRhWzBdICYgMTUpICE9IDggfHwgKGRhdGFbMF0gPj4gNCkgPiA3IHx8ICgoZGF0YVswXSA8PCA4IHwgZGF0YVsxXSkgJSAzMSkpXG4gICAgICAgICAgICA/IGluZmxhdGVTeW5jKGRhdGEsIG9wdHMpXG4gICAgICAgICAgICA6IHVuemxpYlN5bmMoZGF0YSwgb3B0cyk7XG59XG4vLyBmbGF0dGVuIGEgZGlyZWN0b3J5IHN0cnVjdHVyZVxudmFyIGZsdG4gPSBmdW5jdGlvbiAoZCwgcCwgdCwgbykge1xuICAgIGZvciAodmFyIGsgaW4gZCkge1xuICAgICAgICB2YXIgdmFsID0gZFtrXSwgbiA9IHAgKyBrLCBvcCA9IG87XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICAgICAgICBvcCA9IG1yZyhvLCB2YWxbMV0pLCB2YWwgPSB2YWxbMF07XG4gICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiB1OClcbiAgICAgICAgICAgIHRbbl0gPSBbdmFsLCBvcF07XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdFtuICs9ICcvJ10gPSBbbmV3IHU4KDApLCBvcF07XG4gICAgICAgICAgICBmbHRuKHZhbCwgbiwgdCwgbyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuLy8gdGV4dCBlbmNvZGVyXG52YXIgdGUgPSB0eXBlb2YgVGV4dEVuY29kZXIgIT0gJ3VuZGVmaW5lZCcgJiYgLyojX19QVVJFX18qLyBuZXcgVGV4dEVuY29kZXIoKTtcbi8vIHRleHQgZGVjb2RlclxudmFyIHRkID0gdHlwZW9mIFRleHREZWNvZGVyICE9ICd1bmRlZmluZWQnICYmIC8qI19fUFVSRV9fKi8gbmV3IFRleHREZWNvZGVyKCk7XG4vLyB0ZXh0IGRlY29kZXIgc3RyZWFtXG52YXIgdGRzID0gMDtcbnRyeSB7XG4gICAgdGQuZGVjb2RlKGV0LCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICB0ZHMgPSAxO1xufVxuY2F0Y2ggKGUpIHsgfVxuLy8gZGVjb2RlIFVURjhcbnZhciBkdXRmOCA9IGZ1bmN0aW9uIChkKSB7XG4gICAgZm9yICh2YXIgciA9ICcnLCBpID0gMDs7KSB7XG4gICAgICAgIHZhciBjID0gZFtpKytdO1xuICAgICAgICB2YXIgZWIgPSAoYyA+IDEyNykgKyAoYyA+IDIyMykgKyAoYyA+IDIzOSk7XG4gICAgICAgIGlmIChpICsgZWIgPiBkLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiB7IHM6IHIsIHI6IHNsYyhkLCBpIC0gMSkgfTtcbiAgICAgICAgaWYgKCFlYilcbiAgICAgICAgICAgIHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgICAgZWxzZSBpZiAoZWIgPT0gMykge1xuICAgICAgICAgICAgYyA9ICgoYyAmIDE1KSA8PCAxOCB8IChkW2krK10gJiA2MykgPDwgMTIgfCAoZFtpKytdICYgNjMpIDw8IDYgfCAoZFtpKytdICYgNjMpKSAtIDY1NTM2LFxuICAgICAgICAgICAgICAgIHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NiB8IChjID4+IDEwKSwgNTYzMjAgfCAoYyAmIDEwMjMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlYiAmIDEpXG4gICAgICAgICAgICByICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiAzMSkgPDwgNiB8IChkW2krK10gJiA2MykpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiAxNSkgPDwgMTIgfCAoZFtpKytdICYgNjMpIDw8IDYgfCAoZFtpKytdICYgNjMpKTtcbiAgICB9XG59O1xuLyoqXG4gKiBTdHJlYW1pbmcgVVRGLTggZGVjb2RpbmdcbiAqL1xudmFyIERlY29kZVVURjggPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFVURi04IGRlY29kaW5nIHN0cmVhbVxuICAgICAqIEBwYXJhbSBjYiBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuZXZlciBkYXRhIGlzIGRlY29kZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBEZWNvZGVVVEY4KGNiKSB7XG4gICAgICAgIHRoaXMub25kYXRhID0gY2I7XG4gICAgICAgIGlmICh0ZHMpXG4gICAgICAgICAgICB0aGlzLnQgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wID0gZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIGRlY29kZWQgZnJvbSBVVEYtOCBiaW5hcnlcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgRGVjb2RlVVRGOC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgZmluYWwgPSAhIWZpbmFsO1xuICAgICAgICBpZiAodGhpcy50KSB7XG4gICAgICAgICAgICB0aGlzLm9uZGF0YSh0aGlzLnQuZGVjb2RlKGNodW5rLCB7IHN0cmVhbTogdHJ1ZSB9KSwgZmluYWwpO1xuICAgICAgICAgICAgaWYgKGZpbmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudC5kZWNvZGUoKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGVycig4KTtcbiAgICAgICAgICAgICAgICB0aGlzLnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5wKVxuICAgICAgICAgICAgZXJyKDQpO1xuICAgICAgICB2YXIgZGF0ID0gbmV3IHU4KHRoaXMucC5sZW5ndGggKyBjaHVuay5sZW5ndGgpO1xuICAgICAgICBkYXQuc2V0KHRoaXMucCk7XG4gICAgICAgIGRhdC5zZXQoY2h1bmssIHRoaXMucC5sZW5ndGgpO1xuICAgICAgICB2YXIgX2EgPSBkdXRmOChkYXQpLCBzID0gX2EucywgciA9IF9hLnI7XG4gICAgICAgIGlmIChmaW5hbCkge1xuICAgICAgICAgICAgaWYgKHIubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGVycig4KTtcbiAgICAgICAgICAgIHRoaXMucCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wID0gcjtcbiAgICAgICAgdGhpcy5vbmRhdGEocywgZmluYWwpO1xuICAgIH07XG4gICAgcmV0dXJuIERlY29kZVVURjg7XG59KCkpO1xuZXhwb3J0IHsgRGVjb2RlVVRGOCB9O1xuLyoqXG4gKiBTdHJlYW1pbmcgVVRGLTggZW5jb2RpbmdcbiAqL1xudmFyIEVuY29kZVVURjggPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFVURi04IGRlY29kaW5nIHN0cmVhbVxuICAgICAqIEBwYXJhbSBjYiBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuZXZlciBkYXRhIGlzIGVuY29kZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBFbmNvZGVVVEY4KGNiKSB7XG4gICAgICAgIHRoaXMub25kYXRhID0gY2I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIGVuY29kZWQgdG8gVVRGLThcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIHN0cmluZyBkYXRhIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgRW5jb2RlVVRGOC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgaWYgKHRoaXMuZClcbiAgICAgICAgICAgIGVycig0KTtcbiAgICAgICAgdGhpcy5vbmRhdGEoc3RyVG9VOChjaHVuayksIHRoaXMuZCA9IGZpbmFsIHx8IGZhbHNlKTtcbiAgICB9O1xuICAgIHJldHVybiBFbmNvZGVVVEY4O1xufSgpKTtcbmV4cG9ydCB7IEVuY29kZVVURjggfTtcbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgaW50byBhIFVpbnQ4QXJyYXkgZm9yIHVzZSB3aXRoIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbWV0aG9kc1xuICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIGVuY29kZVxuICogQHBhcmFtIGxhdGluMSBXaGV0aGVyIG9yIG5vdCB0byBpbnRlcnByZXQgdGhlIGRhdGEgYXMgTGF0aW4tMS4gVGhpcyBzaG91bGRcbiAqICAgICAgICAgICAgICAgbm90IG5lZWQgdG8gYmUgdHJ1ZSB1bmxlc3MgZGVjb2RpbmcgYSBiaW5hcnkgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIHN0cmluZyBlbmNvZGVkIGluIFVURi04L0xhdGluLTEgYmluYXJ5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJUb1U4KHN0ciwgbGF0aW4xKSB7XG4gICAgaWYgKGxhdGluMSkge1xuICAgICAgICB2YXIgYXJfMSA9IG5ldyB1OChzdHIubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICBhcl8xW2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHJldHVybiBhcl8xO1xuICAgIH1cbiAgICBpZiAodGUpXG4gICAgICAgIHJldHVybiB0ZS5lbmNvZGUoc3RyKTtcbiAgICB2YXIgbCA9IHN0ci5sZW5ndGg7XG4gICAgdmFyIGFyID0gbmV3IHU4KHN0ci5sZW5ndGggKyAoc3RyLmxlbmd0aCA+PiAxKSk7XG4gICAgdmFyIGFpID0gMDtcbiAgICB2YXIgdyA9IGZ1bmN0aW9uICh2KSB7IGFyW2FpKytdID0gdjsgfTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7ICsraSkge1xuICAgICAgICBpZiAoYWkgKyA1ID4gYXIubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgbiA9IG5ldyB1OChhaSArIDggKyAoKGwgLSBpKSA8PCAxKSk7XG4gICAgICAgICAgICBuLnNldChhcik7XG4gICAgICAgICAgICBhciA9IG47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGMgPCAxMjggfHwgbGF0aW4xKVxuICAgICAgICAgICAgdyhjKTtcbiAgICAgICAgZWxzZSBpZiAoYyA8IDIwNDgpXG4gICAgICAgICAgICB3KDE5MiB8IChjID4+IDYpKSwgdygxMjggfCAoYyAmIDYzKSk7XG4gICAgICAgIGVsc2UgaWYgKGMgPiA1NTI5NSAmJiBjIDwgNTczNDQpXG4gICAgICAgICAgICBjID0gNjU1MzYgKyAoYyAmIDEwMjMgPDwgMTApIHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAxMDIzKSxcbiAgICAgICAgICAgICAgICB3KDI0MCB8IChjID4+IDE4KSksIHcoMTI4IHwgKChjID4+IDEyKSAmIDYzKSksIHcoMTI4IHwgKChjID4+IDYpICYgNjMpKSwgdygxMjggfCAoYyAmIDYzKSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHcoMjI0IHwgKGMgPj4gMTIpKSwgdygxMjggfCAoKGMgPj4gNikgJiA2MykpLCB3KDEyOCB8IChjICYgNjMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNsYyhhciwgMCwgYWkpO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhIFVpbnQ4QXJyYXkgdG8gYSBzdHJpbmdcbiAqIEBwYXJhbSBkYXQgVGhlIGRhdGEgdG8gZGVjb2RlIHRvIHN0cmluZ1xuICogQHBhcmFtIGxhdGluMSBXaGV0aGVyIG9yIG5vdCB0byBpbnRlcnByZXQgdGhlIGRhdGEgYXMgTGF0aW4tMS4gVGhpcyBzaG91bGRcbiAqICAgICAgICAgICAgICAgbm90IG5lZWQgdG8gYmUgdHJ1ZSB1bmxlc3MgZW5jb2RpbmcgdG8gYmluYXJ5IHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBvcmlnaW5hbCBVVEYtOC9MYXRpbi0xIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyRnJvbVU4KGRhdCwgbGF0aW4xKSB7XG4gICAgaWYgKGxhdGluMSkge1xuICAgICAgICB2YXIgciA9ICcnO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdC5sZW5ndGg7IGkgKz0gMTYzODQpXG4gICAgICAgICAgICByICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgZGF0LnN1YmFycmF5KGksIGkgKyAxNjM4NCkpO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG4gICAgZWxzZSBpZiAodGQpIHtcbiAgICAgICAgcmV0dXJuIHRkLmRlY29kZShkYXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIF9hID0gZHV0ZjgoZGF0KSwgcyA9IF9hLnMsIHIgPSBfYS5yO1xuICAgICAgICBpZiAoci5sZW5ndGgpXG4gICAgICAgICAgICBlcnIoOCk7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbn1cbjtcbi8vIGRlZmxhdGUgYml0IGZsYWdcbnZhciBkYmYgPSBmdW5jdGlvbiAobCkgeyByZXR1cm4gbCA9PSAxID8gMyA6IGwgPCA2ID8gMiA6IGwgPT0gOSA/IDEgOiAwOyB9O1xuLy8gc2tpcCBsb2NhbCB6aXAgaGVhZGVyXG52YXIgc2x6aCA9IGZ1bmN0aW9uIChkLCBiKSB7IHJldHVybiBiICsgMzAgKyBiMihkLCBiICsgMjYpICsgYjIoZCwgYiArIDI4KTsgfTtcbi8vIHJlYWQgemlwIGhlYWRlclxudmFyIHpoID0gZnVuY3Rpb24gKGQsIGIsIHopIHtcbiAgICB2YXIgZm5sID0gYjIoZCwgYiArIDI4KSwgZm4gPSBzdHJGcm9tVTgoZC5zdWJhcnJheShiICsgNDYsIGIgKyA0NiArIGZubCksICEoYjIoZCwgYiArIDgpICYgMjA0OCkpLCBlcyA9IGIgKyA0NiArIGZubCwgYnMgPSBiNChkLCBiICsgMjApO1xuICAgIHZhciBfYSA9IHogJiYgYnMgPT0gNDI5NDk2NzI5NSA/IHo2NGUoZCwgZXMpIDogW2JzLCBiNChkLCBiICsgMjQpLCBiNChkLCBiICsgNDIpXSwgc2MgPSBfYVswXSwgc3UgPSBfYVsxXSwgb2ZmID0gX2FbMl07XG4gICAgcmV0dXJuIFtiMihkLCBiICsgMTApLCBzYywgc3UsIGZuLCBlcyArIGIyKGQsIGIgKyAzMCkgKyBiMihkLCBiICsgMzIpLCBvZmZdO1xufTtcbi8vIHJlYWQgemlwNjQgZXh0cmEgZmllbGRcbnZhciB6NjRlID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKDsgYjIoZCwgYikgIT0gMTsgYiArPSA0ICsgYjIoZCwgYiArIDIpKVxuICAgICAgICA7XG4gICAgcmV0dXJuIFtiOChkLCBiICsgMTIpLCBiOChkLCBiICsgNCksIGI4KGQsIGIgKyAyMCldO1xufTtcbi8vIGV4dHJhIGZpZWxkIGxlbmd0aFxudmFyIGV4ZmwgPSBmdW5jdGlvbiAoZXgpIHtcbiAgICB2YXIgbGUgPSAwO1xuICAgIGlmIChleCkge1xuICAgICAgICBmb3IgKHZhciBrIGluIGV4KSB7XG4gICAgICAgICAgICB2YXIgbCA9IGV4W2tdLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChsID4gNjU1MzUpXG4gICAgICAgICAgICAgICAgZXJyKDkpO1xuICAgICAgICAgICAgbGUgKz0gbCArIDQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxlO1xufTtcbi8vIHdyaXRlIHppcCBoZWFkZXJcbnZhciB3emggPSBmdW5jdGlvbiAoZCwgYiwgZiwgZm4sIHUsIGMsIGNlLCBjbykge1xuICAgIHZhciBmbCA9IGZuLmxlbmd0aCwgZXggPSBmLmV4dHJhLCBjb2wgPSBjbyAmJiBjby5sZW5ndGg7XG4gICAgdmFyIGV4bCA9IGV4ZmwoZXgpO1xuICAgIHdieXRlcyhkLCBiLCBjZSAhPSBudWxsID8gMHgyMDE0QjUwIDogMHg0MDM0QjUwKSwgYiArPSA0O1xuICAgIGlmIChjZSAhPSBudWxsKVxuICAgICAgICBkW2IrK10gPSAyMCwgZFtiKytdID0gZi5vcztcbiAgICBkW2JdID0gMjAsIGIgKz0gMjsgLy8gc3BlYyBjb21wbGlhbmNlPyB3aGF0J3MgdGhhdD9cbiAgICBkW2IrK10gPSAoZi5mbGFnIDw8IDEpIHwgKGMgPCAwICYmIDgpLCBkW2IrK10gPSB1ICYmIDg7XG4gICAgZFtiKytdID0gZi5jb21wcmVzc2lvbiAmIDI1NSwgZFtiKytdID0gZi5jb21wcmVzc2lvbiA+PiA4O1xuICAgIHZhciBkdCA9IG5ldyBEYXRlKGYubXRpbWUgPT0gbnVsbCA/IERhdGUubm93KCkgOiBmLm10aW1lKSwgeSA9IGR0LmdldEZ1bGxZZWFyKCkgLSAxOTgwO1xuICAgIGlmICh5IDwgMCB8fCB5ID4gMTE5KVxuICAgICAgICBlcnIoMTApO1xuICAgIHdieXRlcyhkLCBiLCAoeSA8PCAyNSkgfCAoKGR0LmdldE1vbnRoKCkgKyAxKSA8PCAyMSkgfCAoZHQuZ2V0RGF0ZSgpIDw8IDE2KSB8IChkdC5nZXRIb3VycygpIDw8IDExKSB8IChkdC5nZXRNaW51dGVzKCkgPDwgNSkgfCAoZHQuZ2V0U2Vjb25kcygpID4+IDEpKSwgYiArPSA0O1xuICAgIGlmIChjICE9IC0xKSB7XG4gICAgICAgIHdieXRlcyhkLCBiLCBmLmNyYyk7XG4gICAgICAgIHdieXRlcyhkLCBiICsgNCwgYyA8IDAgPyAtYyAtIDIgOiBjKTtcbiAgICAgICAgd2J5dGVzKGQsIGIgKyA4LCBmLnNpemUpO1xuICAgIH1cbiAgICB3Ynl0ZXMoZCwgYiArIDEyLCBmbCk7XG4gICAgd2J5dGVzKGQsIGIgKyAxNCwgZXhsKSwgYiArPSAxNjtcbiAgICBpZiAoY2UgIT0gbnVsbCkge1xuICAgICAgICB3Ynl0ZXMoZCwgYiwgY29sKTtcbiAgICAgICAgd2J5dGVzKGQsIGIgKyA2LCBmLmF0dHJzKTtcbiAgICAgICAgd2J5dGVzKGQsIGIgKyAxMCwgY2UpLCBiICs9IDE0O1xuICAgIH1cbiAgICBkLnNldChmbiwgYik7XG4gICAgYiArPSBmbDtcbiAgICBpZiAoZXhsKSB7XG4gICAgICAgIGZvciAodmFyIGsgaW4gZXgpIHtcbiAgICAgICAgICAgIHZhciBleGYgPSBleFtrXSwgbCA9IGV4Zi5sZW5ndGg7XG4gICAgICAgICAgICB3Ynl0ZXMoZCwgYiwgK2spO1xuICAgICAgICAgICAgd2J5dGVzKGQsIGIgKyAyLCBsKTtcbiAgICAgICAgICAgIGQuc2V0KGV4ZiwgYiArIDQpLCBiICs9IDQgKyBsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb2wpXG4gICAgICAgIGQuc2V0KGNvLCBiKSwgYiArPSBjb2w7XG4gICAgcmV0dXJuIGI7XG59O1xuLy8gd3JpdGUgemlwIGZvb3RlciAoZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5KVxudmFyIHd6ZiA9IGZ1bmN0aW9uIChvLCBiLCBjLCBkLCBlKSB7XG4gICAgd2J5dGVzKG8sIGIsIDB4NjA1NEI1MCk7IC8vIHNraXAgZGlza1xuICAgIHdieXRlcyhvLCBiICsgOCwgYyk7XG4gICAgd2J5dGVzKG8sIGIgKyAxMCwgYyk7XG4gICAgd2J5dGVzKG8sIGIgKyAxMiwgZCk7XG4gICAgd2J5dGVzKG8sIGIgKyAxNiwgZSk7XG59O1xuLyoqXG4gKiBBIHBhc3MtdGhyb3VnaCBzdHJlYW0gdG8ga2VlcCBkYXRhIHVuY29tcHJlc3NlZCBpbiBhIFpJUCBhcmNoaXZlLlxuICovXG52YXIgWmlwUGFzc1Rocm91Z2ggPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHBhc3MtdGhyb3VnaCBzdHJlYW0gdGhhdCBjYW4gYmUgYWRkZWQgdG8gWklQIGFyY2hpdmVzXG4gICAgICogQHBhcmFtIGZpbGVuYW1lIFRoZSBmaWxlbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGRhdGEgc3RyZWFtXG4gICAgICovXG4gICAgZnVuY3Rpb24gWmlwUGFzc1Rocm91Z2goZmlsZW5hbWUpIHtcbiAgICAgICAgdGhpcy5maWxlbmFtZSA9IGZpbGVuYW1lO1xuICAgICAgICB0aGlzLmMgPSBjcmMoKTtcbiAgICAgICAgdGhpcy5zaXplID0gMDtcbiAgICAgICAgdGhpcy5jb21wcmVzc2lvbiA9IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2Nlc3NlcyBhIGNodW5rIGFuZCBwdXNoZXMgdG8gdGhlIG91dHB1dCBzdHJlYW0uIFlvdSBjYW4gb3ZlcnJpZGUgdGhpc1xuICAgICAqIG1ldGhvZCBpbiBhIHN1YmNsYXNzIGZvciBjdXN0b20gYmVoYXZpb3IsIGJ1dCBieSBkZWZhdWx0IHRoaXMgcGFzc2VzXG4gICAgICogdGhlIGRhdGEgdGhyb3VnaC4gWW91IG11c3QgY2FsbCB0aGlzLm9uZGF0YShlcnIsIGNodW5rLCBmaW5hbCkgYXQgc29tZVxuICAgICAqIHBvaW50IGluIHRoaXMgbWV0aG9kLlxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHJvY2Vzc1xuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBaaXBQYXNzVGhyb3VnaC5wcm90b3R5cGUucHJvY2VzcyA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdGhpcy5vbmRhdGEobnVsbCwgY2h1bmssIGZpbmFsKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIGFkZGVkLiBJZiB5b3UgYXJlIHN1YmNsYXNzaW5nIHRoaXMgd2l0aCBhIGN1c3RvbVxuICAgICAqIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgbm90ZSB0aGF0IHlvdSBtdXN0IHB1c2ggZGF0YSBmcm9tIHRoZSBzb3VyY2VcbiAgICAgKiBmaWxlIG9ubHksIHByZS1jb21wcmVzc2lvbi5cbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgWmlwUGFzc1Rocm91Z2gucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIGlmICghdGhpcy5vbmRhdGEpXG4gICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgIHRoaXMuYy5wKGNodW5rKTtcbiAgICAgICAgdGhpcy5zaXplICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgaWYgKGZpbmFsKVxuICAgICAgICAgICAgdGhpcy5jcmMgPSB0aGlzLmMuZCgpO1xuICAgICAgICB0aGlzLnByb2Nlc3MoY2h1bmssIGZpbmFsIHx8IGZhbHNlKTtcbiAgICB9O1xuICAgIHJldHVybiBaaXBQYXNzVGhyb3VnaDtcbn0oKSk7XG5leHBvcnQgeyBaaXBQYXNzVGhyb3VnaCB9O1xuLy8gSSBkb24ndCBleHRlbmQgYmVjYXVzZSBUeXBlU2NyaXB0IGV4dGVuc2lvbiBhZGRzIDFrQiBvZiBydW50aW1lIGJsb2F0XG4vKipcbiAqIFN0cmVhbWluZyBERUZMQVRFIGNvbXByZXNzaW9uIGZvciBaSVAgYXJjaGl2ZXMuIFByZWZlciB1c2luZyBBc3luY1ppcERlZmxhdGVcbiAqIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAqL1xudmFyIFppcERlZmxhdGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIERFRkxBVEUgc3RyZWFtIHRoYXQgY2FuIGJlIGFkZGVkIHRvIFpJUCBhcmNoaXZlc1xuICAgICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgZmlsZW5hbWUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBkYXRhIHN0cmVhbVxuICAgICAqIEBwYXJhbSBvcHRzIFRoZSBjb21wcmVzc2lvbiBvcHRpb25zXG4gICAgICovXG4gICAgZnVuY3Rpb24gWmlwRGVmbGF0ZShmaWxlbmFtZSwgb3B0cykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoIW9wdHMpXG4gICAgICAgICAgICBvcHRzID0ge307XG4gICAgICAgIFppcFBhc3NUaHJvdWdoLmNhbGwodGhpcywgZmlsZW5hbWUpO1xuICAgICAgICB0aGlzLmQgPSBuZXcgRGVmbGF0ZShvcHRzLCBmdW5jdGlvbiAoZGF0LCBmaW5hbCkge1xuICAgICAgICAgICAgX3RoaXMub25kYXRhKG51bGwsIGRhdCwgZmluYWwpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb21wcmVzc2lvbiA9IDg7XG4gICAgICAgIHRoaXMuZmxhZyA9IGRiZihvcHRzLmxldmVsKTtcbiAgICB9XG4gICAgWmlwRGVmbGF0ZS5wcm90b3R5cGUucHJvY2VzcyA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZC5wdXNoKGNodW5rLCBmaW5hbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMub25kYXRhKGUsIG51bGwsIGZpbmFsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgZGVmbGF0ZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgWmlwRGVmbGF0ZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgWmlwUGFzc1Rocm91Z2gucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZmluYWwpO1xuICAgIH07XG4gICAgcmV0dXJuIFppcERlZmxhdGU7XG59KCkpO1xuZXhwb3J0IHsgWmlwRGVmbGF0ZSB9O1xuLyoqXG4gKiBBc3luY2hyb25vdXMgc3RyZWFtaW5nIERFRkxBVEUgY29tcHJlc3Npb24gZm9yIFpJUCBhcmNoaXZlc1xuICovXG52YXIgQXN5bmNaaXBEZWZsYXRlID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXN5bmNocm9ub3VzIERFRkxBVEUgc3RyZWFtIHRoYXQgY2FuIGJlIGFkZGVkIHRvIFpJUCBhcmNoaXZlc1xuICAgICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgZmlsZW5hbWUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBkYXRhIHN0cmVhbVxuICAgICAqIEBwYXJhbSBvcHRzIFRoZSBjb21wcmVzc2lvbiBvcHRpb25zXG4gICAgICovXG4gICAgZnVuY3Rpb24gQXN5bmNaaXBEZWZsYXRlKGZpbGVuYW1lLCBvcHRzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghb3B0cylcbiAgICAgICAgICAgIG9wdHMgPSB7fTtcbiAgICAgICAgWmlwUGFzc1Rocm91Z2guY2FsbCh0aGlzLCBmaWxlbmFtZSk7XG4gICAgICAgIHRoaXMuZCA9IG5ldyBBc3luY0RlZmxhdGUob3B0cywgZnVuY3Rpb24gKGVyciwgZGF0LCBmaW5hbCkge1xuICAgICAgICAgICAgX3RoaXMub25kYXRhKGVyciwgZGF0LCBmaW5hbCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbXByZXNzaW9uID0gODtcbiAgICAgICAgdGhpcy5mbGFnID0gZGJmKG9wdHMubGV2ZWwpO1xuICAgICAgICB0aGlzLnRlcm1pbmF0ZSA9IHRoaXMuZC50ZXJtaW5hdGU7XG4gICAgfVxuICAgIEFzeW5jWmlwRGVmbGF0ZS5wcm90b3R5cGUucHJvY2VzcyA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdGhpcy5kLnB1c2goY2h1bmssIGZpbmFsKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIGRlZmxhdGVkXG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIEFzeW5jWmlwRGVmbGF0ZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgWmlwUGFzc1Rocm91Z2gucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZmluYWwpO1xuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jWmlwRGVmbGF0ZTtcbn0oKSk7XG5leHBvcnQgeyBBc3luY1ppcERlZmxhdGUgfTtcbi8vIFRPRE86IEJldHRlciB0cmVlIHNoYWtpbmdcbi8qKlxuICogQSB6aXBwYWJsZSBhcmNoaXZlIHRvIHdoaWNoIGZpbGVzIGNhbiBpbmNyZW1lbnRhbGx5IGJlIGFkZGVkXG4gKi9cbnZhciBaaXAgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBlbXB0eSBaSVAgYXJjaGl2ZSB0byB3aGljaCBmaWxlcyBjYW4gYmUgYWRkZWRcbiAgICAgKiBAcGFyYW0gY2IgVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbmV2ZXIgZGF0YSBmb3IgdGhlIGdlbmVyYXRlZCBaSVAgYXJjaGl2ZVxuICAgICAqICAgICAgICAgICBpcyBhdmFpbGFibGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBaaXAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmRhdGEgPSBjYjtcbiAgICAgICAgdGhpcy51ID0gW107XG4gICAgICAgIHRoaXMuZCA9IDE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBmaWxlIHRvIHRoZSBaSVAgYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHN0cmVhbSB0byBhZGRcbiAgICAgKi9cbiAgICBaaXAucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghdGhpcy5vbmRhdGEpXG4gICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgIC8vIGZpbmlzaGluZyBvciBmaW5pc2hlZFxuICAgICAgICBpZiAodGhpcy5kICYgMilcbiAgICAgICAgICAgIHRoaXMub25kYXRhKGVycig0ICsgKHRoaXMuZCAmIDEpICogOCwgMCwgMSksIG51bGwsIGZhbHNlKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgZiA9IHN0clRvVTgoZmlsZS5maWxlbmFtZSksIGZsXzEgPSBmLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBjb20gPSBmaWxlLmNvbW1lbnQsIG8gPSBjb20gJiYgc3RyVG9VOChjb20pO1xuICAgICAgICAgICAgdmFyIHUgPSBmbF8xICE9IGZpbGUuZmlsZW5hbWUubGVuZ3RoIHx8IChvICYmIChjb20ubGVuZ3RoICE9IG8ubGVuZ3RoKSk7XG4gICAgICAgICAgICB2YXIgaGxfMSA9IGZsXzEgKyBleGZsKGZpbGUuZXh0cmEpICsgMzA7XG4gICAgICAgICAgICBpZiAoZmxfMSA+IDY1NTM1KVxuICAgICAgICAgICAgICAgIHRoaXMub25kYXRhKGVycigxMSwgMCwgMSksIG51bGwsIGZhbHNlKTtcbiAgICAgICAgICAgIHZhciBoZWFkZXIgPSBuZXcgdTgoaGxfMSk7XG4gICAgICAgICAgICB3emgoaGVhZGVyLCAwLCBmaWxlLCBmLCB1LCAtMSk7XG4gICAgICAgICAgICB2YXIgY2hrc18xID0gW2hlYWRlcl07XG4gICAgICAgICAgICB2YXIgcEFsbF8xID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgY2hrc18yID0gY2hrc18xOyBfaSA8IGNoa3NfMi5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoayA9IGNoa3NfMltfaV07XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm9uZGF0YShudWxsLCBjaGssIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hrc18xID0gW107XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHRyXzEgPSB0aGlzLmQ7XG4gICAgICAgICAgICB0aGlzLmQgPSAwO1xuICAgICAgICAgICAgdmFyIGluZF8xID0gdGhpcy51Lmxlbmd0aDtcbiAgICAgICAgICAgIHZhciB1Zl8xID0gbXJnKGZpbGUsIHtcbiAgICAgICAgICAgICAgICBmOiBmLFxuICAgICAgICAgICAgICAgIHU6IHUsXG4gICAgICAgICAgICAgICAgbzogbyxcbiAgICAgICAgICAgICAgICB0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlLnRlcm1pbmF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHBBbGxfMSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJfMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG54dCA9IF90aGlzLnVbaW5kXzEgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChueHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnh0LnIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5kID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0cl8xID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBjbF8xID0gMDtcbiAgICAgICAgICAgIGZpbGUub25kYXRhID0gZnVuY3Rpb24gKGVyciwgZGF0LCBmaW5hbCkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMub25kYXRhKGVyciwgZGF0LCBmaW5hbCk7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2xfMSArPSBkYXQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBjaGtzXzEucHVzaChkYXQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZCA9IG5ldyB1OCgxNik7XG4gICAgICAgICAgICAgICAgICAgICAgICB3Ynl0ZXMoZGQsIDAsIDB4ODA3NEI1MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3Ynl0ZXMoZGQsIDQsIGZpbGUuY3JjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdieXRlcyhkZCwgOCwgY2xfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3Ynl0ZXMoZGQsIDEyLCBmaWxlLnNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hrc18xLnB1c2goZGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdWZfMS5jID0gY2xfMSwgdWZfMS5iID0gaGxfMSArIGNsXzEgKyAxNiwgdWZfMS5jcmMgPSBmaWxlLmNyYywgdWZfMS5zaXplID0gZmlsZS5zaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyXzEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWZfMS5yKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cl8xID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0cl8xKVxuICAgICAgICAgICAgICAgICAgICAgICAgcEFsbF8xKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMudS5wdXNoKHVmXzEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBFbmRzIHRoZSBwcm9jZXNzIG9mIGFkZGluZyBmaWxlcyBhbmQgcHJlcGFyZXMgdG8gZW1pdCB0aGUgZmluYWwgY2h1bmtzLlxuICAgICAqIFRoaXMgKm11c3QqIGJlIGNhbGxlZCBhZnRlciBhZGRpbmcgYWxsIGRlc2lyZWQgZmlsZXMgZm9yIHRoZSByZXN1bHRpbmdcbiAgICAgKiBaSVAgZmlsZSB0byB3b3JrIHByb3Blcmx5LlxuICAgICAqL1xuICAgIFppcC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5kICYgMikge1xuICAgICAgICAgICAgdGhpcy5vbmRhdGEoZXJyKDQgKyAodGhpcy5kICYgMSkgKiA4LCAwLCAxKSwgbnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZClcbiAgICAgICAgICAgIHRoaXMuZSgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnUucHVzaCh7XG4gICAgICAgICAgICAgICAgcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShfdGhpcy5kICYgMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnUuc3BsaWNlKC0xLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdDogZnVuY3Rpb24gKCkgeyB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kID0gMztcbiAgICB9O1xuICAgIFppcC5wcm90b3R5cGUuZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGJ0ID0gMCwgbCA9IDAsIHRsID0gMDtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMudTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHZhciBmID0gX2FbX2ldO1xuICAgICAgICAgICAgdGwgKz0gNDYgKyBmLmYubGVuZ3RoICsgZXhmbChmLmV4dHJhKSArIChmLm8gPyBmLm8ubGVuZ3RoIDogMCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG91dCA9IG5ldyB1OCh0bCArIDIyKTtcbiAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBfYyA9IHRoaXMudTsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHtcbiAgICAgICAgICAgIHZhciBmID0gX2NbX2JdO1xuICAgICAgICAgICAgd3poKG91dCwgYnQsIGYsIGYuZiwgZi51LCAtZi5jIC0gMiwgbCwgZi5vKTtcbiAgICAgICAgICAgIGJ0ICs9IDQ2ICsgZi5mLmxlbmd0aCArIGV4ZmwoZi5leHRyYSkgKyAoZi5vID8gZi5vLmxlbmd0aCA6IDApLCBsICs9IGYuYjtcbiAgICAgICAgfVxuICAgICAgICB3emYob3V0LCBidCwgdGhpcy51Lmxlbmd0aCwgdGwsIGwpO1xuICAgICAgICB0aGlzLm9uZGF0YShudWxsLCBvdXQsIHRydWUpO1xuICAgICAgICB0aGlzLmQgPSAyO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQSBtZXRob2QgdG8gdGVybWluYXRlIGFueSBpbnRlcm5hbCB3b3JrZXJzIHVzZWQgYnkgdGhlIHN0cmVhbS4gU3Vic2VxdWVudFxuICAgICAqIGNhbGxzIHRvIGFkZCgpIHdpbGwgZmFpbC5cbiAgICAgKi9cbiAgICBaaXAucHJvdG90eXBlLnRlcm1pbmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMudTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHZhciBmID0gX2FbX2ldO1xuICAgICAgICAgICAgZi50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kID0gMjtcbiAgICB9O1xuICAgIHJldHVybiBaaXA7XG59KCkpO1xuZXhwb3J0IHsgWmlwIH07XG5leHBvcnQgZnVuY3Rpb24gemlwKGRhdGEsIG9wdHMsIGNiKSB7XG4gICAgaWYgKCFjYilcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBjYiAhPSAnZnVuY3Rpb24nKVxuICAgICAgICBlcnIoNyk7XG4gICAgdmFyIHIgPSB7fTtcbiAgICBmbHRuKGRhdGEsICcnLCByLCBvcHRzKTtcbiAgICB2YXIgayA9IE9iamVjdC5rZXlzKHIpO1xuICAgIHZhciBsZnQgPSBrLmxlbmd0aCwgbyA9IDAsIHRvdCA9IDA7XG4gICAgdmFyIHNsZnQgPSBsZnQsIGZpbGVzID0gbmV3IEFycmF5KGxmdCk7XG4gICAgdmFyIHRlcm0gPSBbXTtcbiAgICB2YXIgdEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXJtLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgdGVybVtpXSgpO1xuICAgIH07XG4gICAgdmFyIGNiZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIG10KGZ1bmN0aW9uICgpIHsgY2IoYSwgYik7IH0pO1xuICAgIH07XG4gICAgbXQoZnVuY3Rpb24gKCkgeyBjYmQgPSBjYjsgfSk7XG4gICAgdmFyIGNiZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG91dCA9IG5ldyB1OCh0b3QgKyAyMiksIG9lID0gbywgY2RsID0gdG90IC0gbztcbiAgICAgICAgdG90ID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGZ0OyArK2kpIHtcbiAgICAgICAgICAgIHZhciBmID0gZmlsZXNbaV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhciBsID0gZi5jLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB3emgob3V0LCB0b3QsIGYsIGYuZiwgZi51LCBsKTtcbiAgICAgICAgICAgICAgICB2YXIgYmFkZCA9IDMwICsgZi5mLmxlbmd0aCArIGV4ZmwoZi5leHRyYSk7XG4gICAgICAgICAgICAgICAgdmFyIGxvYyA9IHRvdCArIGJhZGQ7XG4gICAgICAgICAgICAgICAgb3V0LnNldChmLmMsIGxvYyk7XG4gICAgICAgICAgICAgICAgd3poKG91dCwgbywgZiwgZi5mLCBmLnUsIGwsIHRvdCwgZi5tKSwgbyArPSAxNiArIGJhZGQgKyAoZi5tID8gZi5tLmxlbmd0aCA6IDApLCB0b3QgPSBsb2MgKyBsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2JkKGUsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHd6ZihvdXQsIG8sIGZpbGVzLmxlbmd0aCwgY2RsLCBvZSk7XG4gICAgICAgIGNiZChudWxsLCBvdXQpO1xuICAgIH07XG4gICAgaWYgKCFsZnQpXG4gICAgICAgIGNiZigpO1xuICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgdmFyIGZuID0ga1tpXTtcbiAgICAgICAgdmFyIF9hID0gcltmbl0sIGZpbGUgPSBfYVswXSwgcCA9IF9hWzFdO1xuICAgICAgICB2YXIgYyA9IGNyYygpLCBzaXplID0gZmlsZS5sZW5ndGg7XG4gICAgICAgIGMucChmaWxlKTtcbiAgICAgICAgdmFyIGYgPSBzdHJUb1U4KGZuKSwgcyA9IGYubGVuZ3RoO1xuICAgICAgICB2YXIgY29tID0gcC5jb21tZW50LCBtID0gY29tICYmIHN0clRvVTgoY29tKSwgbXMgPSBtICYmIG0ubGVuZ3RoO1xuICAgICAgICB2YXIgZXhsID0gZXhmbChwLmV4dHJhKTtcbiAgICAgICAgdmFyIGNvbXByZXNzaW9uID0gcC5sZXZlbCA9PSAwID8gMCA6IDg7XG4gICAgICAgIHZhciBjYmwgPSBmdW5jdGlvbiAoZSwgZCkge1xuICAgICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgICAgICB0QWxsKCk7XG4gICAgICAgICAgICAgICAgY2JkKGUsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGwgPSBkLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmaWxlc1tpXSA9IG1yZyhwLCB7XG4gICAgICAgICAgICAgICAgICAgIHNpemU6IHNpemUsXG4gICAgICAgICAgICAgICAgICAgIGNyYzogYy5kKCksXG4gICAgICAgICAgICAgICAgICAgIGM6IGQsXG4gICAgICAgICAgICAgICAgICAgIGY6IGYsXG4gICAgICAgICAgICAgICAgICAgIG06IG0sXG4gICAgICAgICAgICAgICAgICAgIHU6IHMgIT0gZm4ubGVuZ3RoIHx8IChtICYmIChjb20ubGVuZ3RoICE9IG1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uOiBjb21wcmVzc2lvblxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG8gKz0gMzAgKyBzICsgZXhsICsgbDtcbiAgICAgICAgICAgICAgICB0b3QgKz0gNzYgKyAyICogKHMgKyBleGwpICsgKG1zIHx8IDApICsgbDtcbiAgICAgICAgICAgICAgICBpZiAoIS0tbGZ0KVxuICAgICAgICAgICAgICAgICAgICBjYmYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHMgPiA2NTUzNSlcbiAgICAgICAgICAgIGNibChlcnIoMTEsIDAsIDEpLCBudWxsKTtcbiAgICAgICAgaWYgKCFjb21wcmVzc2lvbilcbiAgICAgICAgICAgIGNibChudWxsLCBmaWxlKTtcbiAgICAgICAgZWxzZSBpZiAoc2l6ZSA8IDE2MDAwMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjYmwobnVsbCwgZGVmbGF0ZVN5bmMoZmlsZSwgcCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjYmwoZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGVybS5wdXNoKGRlZmxhdGUoZmlsZSwgcCwgY2JsKSk7XG4gICAgfTtcbiAgICAvLyBDYW5ub3QgdXNlIGxmdCBiZWNhdXNlIGl0IGNhbiBkZWNyZWFzZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xmdDsgKytpKSB7XG4gICAgICAgIF9sb29wXzEoaSk7XG4gICAgfVxuICAgIHJldHVybiB0QWxsO1xufVxuLyoqXG4gKiBTeW5jaHJvbm91c2x5IGNyZWF0ZXMgYSBaSVAgZmlsZS4gUHJlZmVyIHVzaW5nIGB6aXBgIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAqIHdpdGggbW9yZSB0aGFuIG9uZSBmaWxlLlxuICogQHBhcmFtIGRhdGEgVGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIHRoZSBaSVAgYXJjaGl2ZVxuICogQHBhcmFtIG9wdHMgVGhlIG1haW4gb3B0aW9ucywgbWVyZ2VkIHdpdGggcGVyLWZpbGUgb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGdlbmVyYXRlZCBaSVAgYXJjaGl2ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gemlwU3luYyhkYXRhLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKVxuICAgICAgICBvcHRzID0ge307XG4gICAgdmFyIHIgPSB7fTtcbiAgICB2YXIgZmlsZXMgPSBbXTtcbiAgICBmbHRuKGRhdGEsICcnLCByLCBvcHRzKTtcbiAgICB2YXIgbyA9IDA7XG4gICAgdmFyIHRvdCA9IDA7XG4gICAgZm9yICh2YXIgZm4gaW4gcikge1xuICAgICAgICB2YXIgX2EgPSByW2ZuXSwgZmlsZSA9IF9hWzBdLCBwID0gX2FbMV07XG4gICAgICAgIHZhciBjb21wcmVzc2lvbiA9IHAubGV2ZWwgPT0gMCA/IDAgOiA4O1xuICAgICAgICB2YXIgZiA9IHN0clRvVTgoZm4pLCBzID0gZi5sZW5ndGg7XG4gICAgICAgIHZhciBjb20gPSBwLmNvbW1lbnQsIG0gPSBjb20gJiYgc3RyVG9VOChjb20pLCBtcyA9IG0gJiYgbS5sZW5ndGg7XG4gICAgICAgIHZhciBleGwgPSBleGZsKHAuZXh0cmEpO1xuICAgICAgICBpZiAocyA+IDY1NTM1KVxuICAgICAgICAgICAgZXJyKDExKTtcbiAgICAgICAgdmFyIGQgPSBjb21wcmVzc2lvbiA/IGRlZmxhdGVTeW5jKGZpbGUsIHApIDogZmlsZSwgbCA9IGQubGVuZ3RoO1xuICAgICAgICB2YXIgYyA9IGNyYygpO1xuICAgICAgICBjLnAoZmlsZSk7XG4gICAgICAgIGZpbGVzLnB1c2gobXJnKHAsIHtcbiAgICAgICAgICAgIHNpemU6IGZpbGUubGVuZ3RoLFxuICAgICAgICAgICAgY3JjOiBjLmQoKSxcbiAgICAgICAgICAgIGM6IGQsXG4gICAgICAgICAgICBmOiBmLFxuICAgICAgICAgICAgbTogbSxcbiAgICAgICAgICAgIHU6IHMgIT0gZm4ubGVuZ3RoIHx8IChtICYmIChjb20ubGVuZ3RoICE9IG1zKSksXG4gICAgICAgICAgICBvOiBvLFxuICAgICAgICAgICAgY29tcHJlc3Npb246IGNvbXByZXNzaW9uXG4gICAgICAgIH0pKTtcbiAgICAgICAgbyArPSAzMCArIHMgKyBleGwgKyBsO1xuICAgICAgICB0b3QgKz0gNzYgKyAyICogKHMgKyBleGwpICsgKG1zIHx8IDApICsgbDtcbiAgICB9XG4gICAgdmFyIG91dCA9IG5ldyB1OCh0b3QgKyAyMiksIG9lID0gbywgY2RsID0gdG90IC0gbztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBmID0gZmlsZXNbaV07XG4gICAgICAgIHd6aChvdXQsIGYubywgZiwgZi5mLCBmLnUsIGYuYy5sZW5ndGgpO1xuICAgICAgICB2YXIgYmFkZCA9IDMwICsgZi5mLmxlbmd0aCArIGV4ZmwoZi5leHRyYSk7XG4gICAgICAgIG91dC5zZXQoZi5jLCBmLm8gKyBiYWRkKTtcbiAgICAgICAgd3poKG91dCwgbywgZiwgZi5mLCBmLnUsIGYuYy5sZW5ndGgsIGYubywgZi5tKSwgbyArPSAxNiArIGJhZGQgKyAoZi5tID8gZi5tLmxlbmd0aCA6IDApO1xuICAgIH1cbiAgICB3emYob3V0LCBvLCBmaWxlcy5sZW5ndGgsIGNkbCwgb2UpO1xuICAgIHJldHVybiBvdXQ7XG59XG4vKipcbiAqIFN0cmVhbWluZyBwYXNzLXRocm91Z2ggZGVjb21wcmVzc2lvbiBmb3IgWklQIGFyY2hpdmVzXG4gKi9cbnZhciBVbnppcFBhc3NUaHJvdWdoID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFVuemlwUGFzc1Rocm91Z2goKSB7XG4gICAgfVxuICAgIFVuemlwUGFzc1Rocm91Z2gucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgZmluYWwpIHtcbiAgICAgICAgdGhpcy5vbmRhdGEobnVsbCwgZGF0YSwgZmluYWwpO1xuICAgIH07XG4gICAgVW56aXBQYXNzVGhyb3VnaC5jb21wcmVzc2lvbiA9IDA7XG4gICAgcmV0dXJuIFVuemlwUGFzc1Rocm91Z2g7XG59KCkpO1xuZXhwb3J0IHsgVW56aXBQYXNzVGhyb3VnaCB9O1xuLyoqXG4gKiBTdHJlYW1pbmcgREVGTEFURSBkZWNvbXByZXNzaW9uIGZvciBaSVAgYXJjaGl2ZXMuIFByZWZlciBBc3luY1ppcEluZmxhdGUgZm9yXG4gKiBiZXR0ZXIgcGVyZm9ybWFuY2UuXG4gKi9cbnZhciBVbnppcEluZmxhdGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIERFRkxBVEUgZGVjb21wcmVzc2lvbiB0aGF0IGNhbiBiZSB1c2VkIGluIFpJUCBhcmNoaXZlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIFVuemlwSW5mbGF0ZSgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5pID0gbmV3IEluZmxhdGUoZnVuY3Rpb24gKGRhdCwgZmluYWwpIHtcbiAgICAgICAgICAgIF90aGlzLm9uZGF0YShudWxsLCBkYXQsIGZpbmFsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIFVuemlwSW5mbGF0ZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBmaW5hbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5pLnB1c2goZGF0YSwgZmluYWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLm9uZGF0YShlLCBudWxsLCBmaW5hbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFVuemlwSW5mbGF0ZS5jb21wcmVzc2lvbiA9IDg7XG4gICAgcmV0dXJuIFVuemlwSW5mbGF0ZTtcbn0oKSk7XG5leHBvcnQgeyBVbnppcEluZmxhdGUgfTtcbi8qKlxuICogQXN5bmNocm9ub3VzIHN0cmVhbWluZyBERUZMQVRFIGRlY29tcHJlc3Npb24gZm9yIFpJUCBhcmNoaXZlc1xuICovXG52YXIgQXN5bmNVbnppcEluZmxhdGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIERFRkxBVEUgZGVjb21wcmVzc2lvbiB0aGF0IGNhbiBiZSB1c2VkIGluIFpJUCBhcmNoaXZlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIEFzeW5jVW56aXBJbmZsYXRlKF8sIHN6KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChzeiA8IDMyMDAwMCkge1xuICAgICAgICAgICAgdGhpcy5pID0gbmV3IEluZmxhdGUoZnVuY3Rpb24gKGRhdCwgZmluYWwpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5vbmRhdGEobnVsbCwgZGF0LCBmaW5hbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaSA9IG5ldyBBc3luY0luZmxhdGUoZnVuY3Rpb24gKGVyciwgZGF0LCBmaW5hbCkge1xuICAgICAgICAgICAgICAgIF90aGlzLm9uZGF0YShlcnIsIGRhdCwgZmluYWwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnRlcm1pbmF0ZSA9IHRoaXMuaS50ZXJtaW5hdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQXN5bmNVbnppcEluZmxhdGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgZmluYWwpIHtcbiAgICAgICAgaWYgKHRoaXMuaS50ZXJtaW5hdGUpXG4gICAgICAgICAgICBkYXRhID0gc2xjKGRhdGEsIDApO1xuICAgICAgICB0aGlzLmkucHVzaChkYXRhLCBmaW5hbCk7XG4gICAgfTtcbiAgICBBc3luY1VuemlwSW5mbGF0ZS5jb21wcmVzc2lvbiA9IDg7XG4gICAgcmV0dXJuIEFzeW5jVW56aXBJbmZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jVW56aXBJbmZsYXRlIH07XG4vKipcbiAqIEEgWklQIGFyY2hpdmUgZGVjb21wcmVzc2lvbiBzdHJlYW0gdGhhdCBlbWl0cyBmaWxlcyBhcyB0aGV5IGFyZSBkaXNjb3ZlcmVkXG4gKi9cbnZhciBVbnppcCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgWklQIGRlY29tcHJlc3Npb24gc3RyZWFtXG4gICAgICogQHBhcmFtIGNiIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW5ldmVyIGEgZmlsZSBpbiB0aGUgWklQIGFyY2hpdmUgaXMgZm91bmRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBVbnppcChjYikge1xuICAgICAgICB0aGlzLm9uZmlsZSA9IGNiO1xuICAgICAgICB0aGlzLmsgPSBbXTtcbiAgICAgICAgdGhpcy5vID0ge1xuICAgICAgICAgICAgMDogVW56aXBQYXNzVGhyb3VnaFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnAgPSBldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgdW56aXBwZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgVW56aXAucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghdGhpcy5vbmZpbGUpXG4gICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgIGlmICghdGhpcy5wKVxuICAgICAgICAgICAgZXJyKDQpO1xuICAgICAgICBpZiAodGhpcy5jID4gMCkge1xuICAgICAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKHRoaXMuYywgY2h1bmsubGVuZ3RoKTtcbiAgICAgICAgICAgIHZhciB0b0FkZCA9IGNodW5rLnN1YmFycmF5KDAsIGxlbik7XG4gICAgICAgICAgICB0aGlzLmMgLT0gbGVuO1xuICAgICAgICAgICAgaWYgKHRoaXMuZClcbiAgICAgICAgICAgICAgICB0aGlzLmQucHVzaCh0b0FkZCwgIXRoaXMuYyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5rWzBdLnB1c2godG9BZGQpO1xuICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5zdWJhcnJheShsZW4pO1xuICAgICAgICAgICAgaWYgKGNodW5rLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoKGNodW5rLCBmaW5hbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgZiA9IDAsIGkgPSAwLCBpcyA9IHZvaWQgMCwgYnVmID0gdm9pZCAwO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnAubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGJ1ZiA9IGNodW5rO1xuICAgICAgICAgICAgZWxzZSBpZiAoIWNodW5rLmxlbmd0aClcbiAgICAgICAgICAgICAgICBidWYgPSB0aGlzLnA7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBidWYgPSBuZXcgdTgodGhpcy5wLmxlbmd0aCArIGNodW5rLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgYnVmLnNldCh0aGlzLnApLCBidWYuc2V0KGNodW5rLCB0aGlzLnAubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBsID0gYnVmLmxlbmd0aCwgb2MgPSB0aGlzLmMsIGFkZCA9IG9jICYmIHRoaXMuZDtcbiAgICAgICAgICAgIHZhciBfbG9vcF8yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICB2YXIgc2lnID0gYjQoYnVmLCBpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2lnID09IDB4NDAzNEI1MCkge1xuICAgICAgICAgICAgICAgICAgICBmID0gMSwgaXMgPSBpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzXzEuZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNfMS5jID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJmID0gYjIoYnVmLCBpICsgNiksIGNtcF8xID0gYjIoYnVmLCBpICsgOCksIHUgPSBiZiAmIDIwNDgsIGRkID0gYmYgJiA4LCBmbmwgPSBiMihidWYsIGkgKyAyNiksIGVzID0gYjIoYnVmLCBpICsgMjgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobCA+IGkgKyAzMCArIGZubCArIGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hrc18zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzXzEuay51bnNoaWZ0KGNoa3NfMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY18xID0gYjQoYnVmLCBpICsgMTgpLCBzdV8xID0gYjQoYnVmLCBpICsgMjIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuXzEgPSBzdHJGcm9tVTgoYnVmLnN1YmFycmF5KGkgKyAzMCwgaSArPSAzMCArIGZubCksICF1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY18xID09IDQyOTQ5NjcyOTUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYSA9IGRkID8gWy0yXSA6IHo2NGUoYnVmLCBpKSwgc2NfMSA9IF9hWzBdLCBzdV8xID0gX2FbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY18xID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18xLmMgPSBzY18xO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxlXzEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZm5fMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbjogY21wXzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWxlXzEub25kYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKDUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNjXzEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlXzEub25kYXRhKG51bGwsIGV0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3RyID0gX3RoaXMub1tjbXBfMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN0cilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlXzEub25kYXRhKGVycigxNCwgJ3Vua25vd24gY29tcHJlc3Npb24gdHlwZSAnICsgY21wXzEsIDEpLCBudWxsLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkXzEgPSBzY18xIDwgMCA/IG5ldyBjdHIoZm5fMSkgOiBuZXcgY3RyKGZuXzEsIHNjXzEsIHN1XzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZF8xLm9uZGF0YSA9IGZ1bmN0aW9uIChlcnIsIGRhdCwgZmluYWwpIHsgZmlsZV8xLm9uZGF0YShlcnIsIGRhdCwgZmluYWwpOyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBjaGtzXzQgPSBjaGtzXzM7IF9pIDwgY2hrc180Lmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXQgPSBjaGtzXzRbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfMS5wdXNoKGRhdCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmtbMF0gPT0gY2hrc18zICYmIF90aGlzLmMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZCA9IGRfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkXzEucHVzaChldCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZF8xICYmIGRfMS50ZXJtaW5hdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkXzEudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY18xID49IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV8xLnNpemUgPSBzY18xLCBmaWxlXzEub3JpZ2luYWxTaXplID0gc3VfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfMS5vbmZpbGUoZmlsZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChvYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2lnID09IDB4ODA3NEI1MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXMgPSBpICs9IDEyICsgKG9jID09IC0yICYmIDgpLCBmID0gMywgdGhpc18xLmMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzaWcgPT0gMHgyMDE0QjUwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpcyA9IGkgLT0gNCwgZiA9IDMsIHRoaXNfMS5jID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHRoaXNfMSA9IHRoaXM7XG4gICAgICAgICAgICBmb3IgKDsgaSA8IGwgLSA0OyArK2kpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGVfMSA9IF9sb29wXzIoKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVfMSA9PT0gXCJicmVha1wiKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucCA9IGV0O1xuICAgICAgICAgICAgaWYgKG9jIDwgMCkge1xuICAgICAgICAgICAgICAgIHZhciBkYXQgPSBmID8gYnVmLnN1YmFycmF5KDAsIGlzIC0gMTIgLSAob2MgPT0gLTIgJiYgOCkgLSAoYjQoYnVmLCBpcyAtIDE2KSA9PSAweDgwNzRCNTAgJiYgNCkpIDogYnVmLnN1YmFycmF5KDAsIGkpO1xuICAgICAgICAgICAgICAgIGlmIChhZGQpXG4gICAgICAgICAgICAgICAgICAgIGFkZC5wdXNoKGRhdCwgISFmKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMua1srKGYgPT0gMildLnB1c2goZGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmICYgMilcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoKGJ1Zi5zdWJhcnJheShpKSwgZmluYWwpO1xuICAgICAgICAgICAgdGhpcy5wID0gYnVmLnN1YmFycmF5KGkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5hbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYylcbiAgICAgICAgICAgICAgICBlcnIoMTMpO1xuICAgICAgICAgICAgdGhpcy5wID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIGEgZGVjb2RlciB3aXRoIHRoZSBzdHJlYW0sIGFsbG93aW5nIGZvciBmaWxlcyBjb21wcmVzc2VkIHdpdGhcbiAgICAgKiB0aGUgY29tcHJlc3Npb24gdHlwZSBwcm92aWRlZCB0byBiZSBleHBhbmRlZCBjb3JyZWN0bHlcbiAgICAgKiBAcGFyYW0gZGVjb2RlciBUaGUgZGVjb2RlciBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIFVuemlwLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIChkZWNvZGVyKSB7XG4gICAgICAgIHRoaXMub1tkZWNvZGVyLmNvbXByZXNzaW9uXSA9IGRlY29kZXI7XG4gICAgfTtcbiAgICByZXR1cm4gVW56aXA7XG59KCkpO1xuZXhwb3J0IHsgVW56aXAgfTtcbnZhciBtdCA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PSAnZnVuY3Rpb24nID8gcXVldWVNaWNyb3Rhc2sgOiB0eXBlb2Ygc2V0VGltZW91dCA9PSAnZnVuY3Rpb24nID8gc2V0VGltZW91dCA6IGZ1bmN0aW9uIChmbikgeyBmbigpOyB9O1xuZXhwb3J0IGZ1bmN0aW9uIHVuemlwKGRhdGEsIG9wdHMsIGNiKSB7XG4gICAgaWYgKCFjYilcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBjYiAhPSAnZnVuY3Rpb24nKVxuICAgICAgICBlcnIoNyk7XG4gICAgdmFyIHRlcm0gPSBbXTtcbiAgICB2YXIgdEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXJtLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgdGVybVtpXSgpO1xuICAgIH07XG4gICAgdmFyIGZpbGVzID0ge307XG4gICAgdmFyIGNiZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIG10KGZ1bmN0aW9uICgpIHsgY2IoYSwgYik7IH0pO1xuICAgIH07XG4gICAgbXQoZnVuY3Rpb24gKCkgeyBjYmQgPSBjYjsgfSk7XG4gICAgdmFyIGUgPSBkYXRhLmxlbmd0aCAtIDIyO1xuICAgIGZvciAoOyBiNChkYXRhLCBlKSAhPSAweDYwNTRCNTA7IC0tZSkge1xuICAgICAgICBpZiAoIWUgfHwgZGF0YS5sZW5ndGggLSBlID4gNjU1NTgpIHtcbiAgICAgICAgICAgIGNiZChlcnIoMTMsIDAsIDEpLCBudWxsKTtcbiAgICAgICAgICAgIHJldHVybiB0QWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIDtcbiAgICB2YXIgbGZ0ID0gYjIoZGF0YSwgZSArIDgpO1xuICAgIGlmIChsZnQpIHtcbiAgICAgICAgdmFyIGMgPSBsZnQ7XG4gICAgICAgIHZhciBvID0gYjQoZGF0YSwgZSArIDE2KTtcbiAgICAgICAgdmFyIHogPSBvID09IDQyOTQ5NjcyOTUgfHwgYyA9PSA2NTUzNTtcbiAgICAgICAgaWYgKHopIHtcbiAgICAgICAgICAgIHZhciB6ZSA9IGI0KGRhdGEsIGUgLSAxMik7XG4gICAgICAgICAgICB6ID0gYjQoZGF0YSwgemUpID09IDB4NjA2NEI1MDtcbiAgICAgICAgICAgIGlmICh6KSB7XG4gICAgICAgICAgICAgICAgYyA9IGxmdCA9IGI0KGRhdGEsIHplICsgMzIpO1xuICAgICAgICAgICAgICAgIG8gPSBiNChkYXRhLCB6ZSArIDQ4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZmx0ciA9IG9wdHMgJiYgb3B0cy5maWx0ZXI7XG4gICAgICAgIHZhciBfbG9vcF8zID0gZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHpoKGRhdGEsIG8sIHopLCBjXzEgPSBfYVswXSwgc2MgPSBfYVsxXSwgc3UgPSBfYVsyXSwgZm4gPSBfYVszXSwgbm8gPSBfYVs0XSwgb2ZmID0gX2FbNV0sIGIgPSBzbHpoKGRhdGEsIG9mZik7XG4gICAgICAgICAgICBvID0gbm87XG4gICAgICAgICAgICB2YXIgY2JsID0gZnVuY3Rpb24gKGUsIGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0QWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIGNiZChlLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbZm5dID0gZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEtLWxmdClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiZChudWxsLCBmaWxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghZmx0ciB8fCBmbHRyKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBmbixcbiAgICAgICAgICAgICAgICBzaXplOiBzYyxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFNpemU6IHN1LFxuICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uOiBjXzFcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjXzEpXG4gICAgICAgICAgICAgICAgICAgIGNibChudWxsLCBzbGMoZGF0YSwgYiwgYiArIHNjKSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY18xID09IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZmwgPSBkYXRhLnN1YmFycmF5KGIsIGIgKyBzYyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN5bmNocm9ub3VzbHkgZGVjb21wcmVzcyB1bmRlciA1MTJLQiwgb3IgYmFyZWx5LWNvbXByZXNzZWQgZGF0YVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3UgPCA1MjQyODggfHwgc2MgPiAwLjggKiBzdSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYmwobnVsbCwgaW5mbGF0ZVN5bmMoaW5mbCwgeyBvdXQ6IG5ldyB1OChzdSkgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYmwoZSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGVybS5wdXNoKGluZmxhdGUoaW5mbCwgeyBzaXplOiBzdSB9LCBjYmwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBjYmwoZXJyKDE0LCAndW5rbm93biBjb21wcmVzc2lvbiB0eXBlICcgKyBjXzEsIDEpLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjYmwobnVsbCwgbnVsbCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYzsgKytpKSB7XG4gICAgICAgICAgICBfbG9vcF8zKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgY2JkKG51bGwsIHt9KTtcbiAgICByZXR1cm4gdEFsbDtcbn1cbi8qKlxuICogU3luY2hyb25vdXNseSBkZWNvbXByZXNzZXMgYSBaSVAgYXJjaGl2ZS4gUHJlZmVyIHVzaW5nIGB1bnppcGAgZm9yIGJldHRlclxuICogcGVyZm9ybWFuY2Ugd2l0aCBtb3JlIHRoYW4gb25lIGZpbGUuXG4gKiBAcGFyYW0gZGF0YSBUaGUgcmF3IGNvbXByZXNzZWQgWklQIGZpbGVcbiAqIEBwYXJhbSBvcHRzIFRoZSBaSVAgZXh0cmFjdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZGVjb21wcmVzc2VkIGZpbGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnppcFN5bmMoZGF0YSwgb3B0cykge1xuICAgIHZhciBmaWxlcyA9IHt9O1xuICAgIHZhciBlID0gZGF0YS5sZW5ndGggLSAyMjtcbiAgICBmb3IgKDsgYjQoZGF0YSwgZSkgIT0gMHg2MDU0QjUwOyAtLWUpIHtcbiAgICAgICAgaWYgKCFlIHx8IGRhdGEubGVuZ3RoIC0gZSA+IDY1NTU4KVxuICAgICAgICAgICAgZXJyKDEzKTtcbiAgICB9XG4gICAgO1xuICAgIHZhciBjID0gYjIoZGF0YSwgZSArIDgpO1xuICAgIGlmICghYylcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIHZhciBvID0gYjQoZGF0YSwgZSArIDE2KTtcbiAgICB2YXIgeiA9IG8gPT0gNDI5NDk2NzI5NSB8fCBjID09IDY1NTM1O1xuICAgIGlmICh6KSB7XG4gICAgICAgIHZhciB6ZSA9IGI0KGRhdGEsIGUgLSAxMik7XG4gICAgICAgIHogPSBiNChkYXRhLCB6ZSkgPT0gMHg2MDY0QjUwO1xuICAgICAgICBpZiAoeikge1xuICAgICAgICAgICAgYyA9IGI0KGRhdGEsIHplICsgMzIpO1xuICAgICAgICAgICAgbyA9IGI0KGRhdGEsIHplICsgNDgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBmbHRyID0gb3B0cyAmJiBvcHRzLmZpbHRlcjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGM7ICsraSkge1xuICAgICAgICB2YXIgX2EgPSB6aChkYXRhLCBvLCB6KSwgY18yID0gX2FbMF0sIHNjID0gX2FbMV0sIHN1ID0gX2FbMl0sIGZuID0gX2FbM10sIG5vID0gX2FbNF0sIG9mZiA9IF9hWzVdLCBiID0gc2x6aChkYXRhLCBvZmYpO1xuICAgICAgICBvID0gbm87XG4gICAgICAgIGlmICghZmx0ciB8fCBmbHRyKHtcbiAgICAgICAgICAgIG5hbWU6IGZuLFxuICAgICAgICAgICAgc2l6ZTogc2MsXG4gICAgICAgICAgICBvcmlnaW5hbFNpemU6IHN1LFxuICAgICAgICAgICAgY29tcHJlc3Npb246IGNfMlxuICAgICAgICB9KSkge1xuICAgICAgICAgICAgaWYgKCFjXzIpXG4gICAgICAgICAgICAgICAgZmlsZXNbZm5dID0gc2xjKGRhdGEsIGIsIGIgKyBzYyk7XG4gICAgICAgICAgICBlbHNlIGlmIChjXzIgPT0gOClcbiAgICAgICAgICAgICAgICBmaWxlc1tmbl0gPSBpbmZsYXRlU3luYyhkYXRhLnN1YmFycmF5KGIsIGIgKyBzYyksIHsgb3V0OiBuZXcgdTgoc3UpIH0pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGVycigxNCwgJ3Vua25vd24gY29tcHJlc3Npb24gdHlwZSAnICsgY18yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsZXM7XG59XG4iLCAiY29uc3QgZGVmYXVsdEVycm9yQ29uZmlnID0ge1xyXG4gICAgd2l0aFN0YWNrVHJhY2U6IGZhbHNlLFxyXG59O1xyXG4vLyBDdXN0b20gZXJyb3Igb2JqZWN0XHJcbi8vIENvbnRleHQgLyBkaXNjdXNzaW9uOiBodHRwczovL2dpdGh1Yi5jb20vc3VwZXJtYWNyby9uZXZlcnRocm93L3B1bGwvMjE1XHJcbmNvbnN0IGNyZWF0ZU5ldmVyVGhyb3dFcnJvciA9IChtZXNzYWdlLCByZXN1bHQsIGNvbmZpZyA9IGRlZmF1bHRFcnJvckNvbmZpZykgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHJlc3VsdC5pc09rKClcclxuICAgICAgICA/IHsgdHlwZTogJ09rJywgdmFsdWU6IHJlc3VsdC52YWx1ZSB9XHJcbiAgICAgICAgOiB7IHR5cGU6ICdFcnInLCB2YWx1ZTogcmVzdWx0LmVycm9yIH07XHJcbiAgICBjb25zdCBtYXliZVN0YWNrID0gY29uZmlnLndpdGhTdGFja1RyYWNlID8gbmV3IEVycm9yKCkuc3RhY2sgOiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICBzdGFjazogbWF5YmVTdGFjayxcclxuICAgIH07XHJcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuY2xhc3MgUmVzdWx0QXN5bmMge1xyXG4gICAgY29uc3RydWN0b3IocmVzKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IHJlcztcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tU2FmZVByb21pc2UocHJvbWlzZSkge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlLnRoZW4oKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21Qcm9taXNlKHByb21pc2UsIGVycm9yRm4pIHtcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gcHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gbmV3IEVycihlcnJvckZuKGUpKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuZXdQcm9taXNlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBzdGF0aWMgZnJvbVRocm93YWJsZShmbiwgZXJyb3JGbikge1xyXG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZm4oLi4uYXJncykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoZXJyb3JGbiA/IGVycm9yRm4oZXJyb3IpIDogZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSkoKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lKGFzeW5jUmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0QXN5bmNMaXN0KGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY29tYmluZVdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzKGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZihyZXMudmFsdWUpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgYW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3UmVzID0geWllbGQgZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAobmV3UmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKG5ld1Jlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRlZSBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSBlcnJvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgbWFwRXJyKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNPaygpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoeWllbGQgZihyZXMuZXJyb3IpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWUgaW5zdGFuY2VvZiBSZXN1bHRBc3luYyA/IG5ld1ZhbHVlLl9wcm9taXNlIDogbmV3VmFsdWU7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLm1hdGNoKG9rLCBfZXJyKSk7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMudW53cmFwT3IodCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gOS4wLjAuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiB1c2UgYHNhZmVUcnlgIHdpdGhvdXQgdGhpcyBtZXRob2QuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogc2FmZVRyeShhc3luYyBmdW5jdGlvbiogKCkge1xyXG4gICAgICogICBjb25zdCBva1ZhbHVlID0geWllbGQqIHlvdXJSZXN1bHRcclxuICAgICAqIH0pXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEVtdWxhdGVzIFJ1c3QncyBgP2Agb3BlcmF0b3IgaW4gYHNhZmVUcnlgJ3MgYm9keS4gU2VlIGFsc28gYHNhZmVUcnlgLlxyXG4gICAgICovXHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIHNhZmVVbndyYXBfMSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQoeWllbGQgX19hd2FpdCh5aWVsZCogX19hc3luY0RlbGVnYXRvcihfX2FzeW5jVmFsdWVzKHlpZWxkIF9fYXdhaXQodGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy5zYWZlVW53cmFwKCkpKSkpKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBNYWtlcyBSZXN1bHRBc3luYyBpbXBsZW1lbnQgUHJvbWlzZUxpa2U8UmVzdWx0PlxyXG4gICAgdGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBfYSgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIF9fYXdhaXQoZXJyQXN5bmMocmVzdWx0LmVycm9yKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBfX2F3YWl0KHJlc3VsdC52YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgb2tBc3luYyA9ICh2YWx1ZSkgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgT2sodmFsdWUpKSk7XHJcbmNvbnN0IGVyckFzeW5jID0gKGVycikgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgRXJyKGVycikpKTtcclxuY29uc3QgZnJvbVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZTtcclxuY29uc3QgZnJvbVNhZmVQcm9taXNlID0gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlO1xyXG5jb25zdCBmcm9tQXN5bmNUaHJvd2FibGUgPSBSZXN1bHRBc3luYy5mcm9tVGhyb3dhYmxlO1xuXG4vKipcclxuICogU2hvcnQgY2lyY3VpdHMgb24gdGhlIEZJUlNUIEVyciB2YWx1ZSB0aGF0IHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0ID0gKHJlc3VsdExpc3QpID0+IHtcclxuICAgIGxldCBhY2MgPSBvayhbXSk7XHJcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFjYy5tYXAoKGxpc3QpID0+IGxpc3QucHVzaChyZXN1bHQudmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjO1xyXG59O1xyXG4vKiBUaGlzIGlzIHRoZSB0eXBlc2FmZSB2ZXJzaW9uIG9mIFByb21pc2UuYWxsXHJcbiAqXHJcbiAqIFRha2VzIGEgbGlzdCBvZiBSZXN1bHRBc3luYzxULCBFPiBhbmQgc3VjY2VzcyBpZiBhbGwgaW5uZXIgcmVzdWx0cyBhcmUgT2sgdmFsdWVzXHJcbiAqIG9yIGZhaWxzIGlmIG9uZSAob3IgbW9yZSkgb2YgdGhlIGlubmVyIHJlc3VsdHMgYXJlIEVyciB2YWx1ZXNcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3QgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdCk7XHJcbi8qKlxyXG4gKiBHaXZlIGEgbGlzdCBvZiBhbGwgdGhlIGVycm9ycyB3ZSBmaW5kXHJcbiAqL1xyXG5jb25zdCBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjLmVycm9yLnB1c2gocmVzdWx0LmVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MgPSBlcnIoW3Jlc3VsdC5lcnJvcl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNPaygpICYmIGFjYy5pc09rKCkpIHtcclxuICAgICAgICAgICAgYWNjLnZhbHVlLnB1c2gocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzRXJyKClcclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzID0gKGFzeW5jUmVzdWx0TGlzdCkgPT4gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlKFByb21pc2UuYWxsKGFzeW5jUmVzdWx0TGlzdCkpLmFuZFRoZW4oY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcclxudmFyIFJlc3VsdDtcclxuKGZ1bmN0aW9uIChSZXN1bHQpIHtcclxuICAgIC8qKlxyXG4gICAgICogV3JhcHMgYSBmdW5jdGlvbiB3aXRoIGEgdHJ5IGNhdGNoLCBjcmVhdGluZyBhIG5ldyBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lXHJcbiAgICAgKiBhcmd1bWVudHMgYnV0IHJldHVybmluZyBgT2tgIGlmIHN1Y2Nlc3NmdWwsIGBFcnJgIGlmIHRoZSBmdW5jdGlvbiB0aHJvd3NcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm4gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIG9rIG9uIHN1Y2Nlc3Mgb3IgZXJyIG9uIGZhaWx1cmVcclxuICAgICAqIEBwYXJhbSBlcnJvckZuIHdoZW4gYW4gZXJyb3IgaXMgdGhyb3duLCB0aGlzIHdpbGwgd3JhcCB0aGUgZXJyb3IgcmVzdWx0IGlmIHByb3ZpZGVkXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBmdW5jdGlvbiBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbiguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvayhyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyKGVycm9yRm4gPyBlcnJvckZuKGUpIDogZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmZyb21UaHJvd2FibGUgPSBmcm9tVGhyb3dhYmxlO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZShyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0KHJlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmNvbWJpbmUgPSBjb21iaW5lO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZVdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZVdpdGhBbGxFcnJvcnMgPSBjb21iaW5lV2l0aEFsbEVycm9ycztcclxufSkoUmVzdWx0IHx8IChSZXN1bHQgPSB7fSkpO1xyXG5jb25zdCBvayA9ICh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKTtcclxuZnVuY3Rpb24gZXJyKGVycikge1xyXG4gICAgcmV0dXJuIG5ldyBFcnIoZXJyKTtcclxufVxyXG5mdW5jdGlvbiBzYWZlVHJ5KGJvZHkpIHtcclxuICAgIGNvbnN0IG4gPSBib2R5KCkubmV4dCgpO1xyXG4gICAgaWYgKG4gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuLnRoZW4oKHIpID0+IHIudmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuLnZhbHVlO1xyXG59XHJcbmNsYXNzIE9rIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlzRXJyKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pc09rKCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBvayhmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcEVycihfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKF92YWx1ZSkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGYodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIFRlZSBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoX2YpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY0FuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFzeW5jQW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSkubWFwKCgpID0+IHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNNYXAoZikge1xyXG4gICAgICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoZih0aGlzLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICB1bndyYXBPcihfdikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWF0Y2gob2ssIF9lcnIpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS15aWVsZCAqL1xyXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXBFcnIoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBFcnJgIG9uIGFuIE9rJywgdGhpcywgY29uZmlnKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcywgcmVxdWlyZS15aWVsZFxyXG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG59XHJcbmNsYXNzIEVyciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgIH1cclxuICAgIGlzT2soKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBlcnIoZih0aGlzLmVycm9yKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jQW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhyb3VnaChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jTWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgdW53cmFwT3Iodikge1xyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG4gICAgbWF0Y2goX29rLCBlcnIpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgc2FmZVVud3JhcCgpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB5aWVsZCBlcnIoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvIG5vdCB1c2UgdGhpcyBnZW5lcmF0b3Igb3V0IG9mIGBzYWZlVHJ5YCcpO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKGNvbmZpZykge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZU5ldmVyVGhyb3dFcnJvcignQ2FsbGVkIGBfdW5zYWZlVW53cmFwYCBvbiBhbiBFcnInLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihfKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3I7XHJcbiAgICB9XHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgeWllbGQgc2VsZjtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgIH1cclxufVxyXG5jb25zdCBmcm9tVGhyb3dhYmxlID0gUmVzdWx0LmZyb21UaHJvd2FibGU7XHJcbi8vI2VuZHJlZ2lvblxuXG5leHBvcnQgeyBFcnIsIE9rLCBSZXN1bHQsIFJlc3VsdEFzeW5jLCBlcnIsIGVyckFzeW5jLCBmcm9tQXN5bmNUaHJvd2FibGUsIGZyb21Qcm9taXNlLCBmcm9tU2FmZVByb21pc2UsIGZyb21UaHJvd2FibGUsIG9rLCBva0FzeW5jLCBzYWZlVHJ5IH07XG4iLCAiaW1wb3J0IHsgQmFzZUVycm9yIH0gZnJvbSBcIn4vZXJyb3IvYmFzZS1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgV29ya2VyRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige31cbiIsICJpbXBvcnQgeyBXb3JrZXJFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dvcmtlci93b3JrZXItZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdvcmtlclVuZGVmaW5lZFBhcmFtZXRlckVycm9yIGV4dGVuZHMgV29ya2VyRXJyb3Ige1xuICBvdmVycmlkZSBtZXNzYWdlID0gXCJQYXJhbWV0ZXIgbXVzdCBiZSBkZWZpbmVkXCI7XG59XG4iLCAiaW1wb3J0IHsgZXJyQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Nvbm5lY3Rpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivc2VydmVyLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckNvbmZpZyB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItY29uZmlnLnRzXCI7XG5cbi8qKlxuICogRW5zdXJlIGFuIGVycm9yIG1lc3NhZ2UgaXMgdHJhbnNmb3JtZWQgaW4gYW4gRXJyb3Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5zdXJlRXJyb3IgPSAodmFsdWU6IHVua25vd24pOiBFcnJvciA9PiB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gdmFsdWU7XG5cbiAgbGV0IHN0cmluZ2lmaWVkID0gXCJbVW5hYmxlIHRvIHN0cmluZ2lmeSB0aGUgdGhyb3duIHZhbHVlXVwiO1xuICB0cnkge1xuICAgIHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAvKiBlbXB0eSAqL1xuICB9XG5cbiAgcmV0dXJuIG5ldyBFcnJvcihzdHJpbmdpZmllZCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIEx1ZmkncyBjb25maWcgZnJvbSBpdHMgQVBJXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVXJsXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZmV0Y2hTZXJ2ZXJDb25maWcgPSAoXG4gIGluc3RhbmNlVXJsOiBVUkwsXG4pOiBSZXN1bHRBc3luYzxTZXJ2ZXJDb25maWcsIEVycm9yPiA9PiB7XG4gIGNvbnN0IG9yaWdpbk1hdGNoZXMgPSBpbnN0YW5jZVVybC5ocmVmLm1hdGNoKFxuICAgIC8oLio/KVxcLz8oPzpcXC9bZHJdezF9XFwvfGxvZ2luXFwvP3xmaWxlc1xcLz8pLyxcbiAgKTtcblxuICBjb25zdCB1cmxPcmlnaW4gPSBvcmlnaW5NYXRjaGVzICYmIG9yaWdpbk1hdGNoZXNbMV1cbiAgICA/IG9yaWdpbk1hdGNoZXNbMV1cbiAgICA6IGluc3RhbmNlVXJsLm9yaWdpbjtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgZmV0Y2godXJsT3JpZ2luICsgXCIvYWJvdXQvY29uZmlnXCIpLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDb25uZWN0aW9uRXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgKS5hbmRUaGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICByZXNwb25zZS5qc29uKCksXG4gICAgICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgICBuZXcgU2VydmVyRXJyb3IodW5kZWZpbmVkLCB7IGNvbnRleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQgfSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEZW5vUnVudGltZSA9ICgpOiBib29sZWFuID0+IHR5cGVvZiBEZW5vICE9PSBcInVuZGVmaW5lZFwiO1xuXG5leHBvcnQgY29uc3QgaXNTZWN1cmVDb250ZXh0ID0gKCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpIHx8IGdsb2JhbFRoaXMuaXNTZWN1cmVDb250ZXh0IHx8XG4gICAgZ2xvYmFsVGhpcy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJodHRwczpcIjtcbn07XG5cbmV4cG9ydCBjb25zdCB3b3JrZXJVcmwgPSAocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBVUkwgPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpXG4gICAgPyBuZXcgVVJMKGAuL3dvcmtlci8ke3JlbGF0aXZlUGF0aH0udHNgLCBuZXcgVVJMKFwiLlwiLCBpbXBvcnQubWV0YS51cmwpLmhyZWYpXG4gICAgOiBuZXcgVVJMKFxuICAgICAgaW1wb3J0Lm1ldGEucmVzb2x2ZShcbiAgICAgICAgYC4vJHtcbiAgICAgICAgICByZWxhdGl2ZVBhdGggIT09IFwiZW5jcnlwdFwiID8gYHdvcmtlci8ke3JlbGF0aXZlUGF0aH1gIDogcmVsYXRpdmVQYXRoXG4gICAgICAgIH0uanNgLFxuICAgICAgKSxcbiAgICApO1xufTtcbiIsICJpbXBvcnQgeyBaaXBDb21wcmVzc2lvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvemlwL3ppcC1jb21wcmVzc2lvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgemlwIH0gZnJvbSBcImZmbGF0ZVwiO1xuaW1wb3J0IHsgZXJyQXN5bmMsIG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IFdvcmtlclVuZGVmaW5lZFBhcmFtZXRlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd29ya2VyL3dvcmtlci11bmRlZmluZWQtcGFyYW1ldGVyLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckFjdGlvbk1lc3NhZ2UgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWFjdGlvbi1tZXNzYWdlLnRzXCI7XG5pbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcblxuZGVjbGFyZSBjb25zdCBzZWxmOiBXb3JrZXI7XG5cbnNlbGYub25tZXNzYWdlID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgY29tcHJlc3MoZXZlbnQuZGF0YSkubWFwKChieXRlcykgPT4ge1xuICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuQVJDSElWRV9DUkVBVEVELCBidWZmZXI6IGJ5dGVzLmJ1ZmZlciB9LCBbXG4gICAgICBieXRlcy5idWZmZXIsXG4gICAgXSk7XG4gIH0pLm1hcEVycigoZXJyb3IpID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0pO1xuICB9KTtcbn07XG5cbmNvbnN0IGNvbXByZXNzID0gKFxuICB3b3JrZXJNZXNzYWdlOiBXb3JrZXJBY3Rpb25NZXNzYWdlLFxuKTogUmVzdWx0QXN5bmM8VWludDhBcnJheSwgRXJyb3I+ID0+IHtcbiAgY29uc3QgeyBhcmNoaXZlIH0gPSB3b3JrZXJNZXNzYWdlLmFyZ3M7XG5cbiAgaWYgKGFyY2hpdmUpIHtcbiAgICBjb25zdCBwcm9taXNlWmlwID0gKCk6IFByb21pc2U8VWludDhBcnJheT4gPT5cbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYgKGFyY2hpdmUuZW50cmllcykge1xuICAgICAgICAgIHppcChhcmNoaXZlLmVudHJpZXMsIChlcnJvciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yKSByZWplY3QoZXJyb3IpO1xuXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgIG5ldyBXb3JrZXJVbmRlZmluZWRQYXJhbWV0ZXJFcnJvcihcbiAgICAgICAgICAgICAgXCJhcmNoaXZlLmVudHJpZXMgbXVzdCBiZSBkZWZpbmVkXCIsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgIHByb21pc2VaaXAoKSxcbiAgICAgIChlcnJvcikgPT4gZXJyb3IsXG4gICAgKS5hbmRUaGVuKChieXRlcykgPT4gb2tBc3luYyhieXRlcykpLm9yRWxzZSgoZXJyb3IpID0+XG4gICAgICBlcnJBc3luYyhcbiAgICAgICAgbmV3IFppcENvbXByZXNzaW9uRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgICApXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICBuZXcgV29ya2VyVW5kZWZpbmVkUGFyYW1ldGVyRXJyb3IoXCJhcmNoaXZlIG11c3QgYmUgZGVmaW5lZFwiKSxcbiAgICApO1xuICB9XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIndLQVVPLElBQU1BLEVBQU4sY0FBd0IsS0FBTSxDQUduQyxZQUNFQyxFQUNBQyxFQUFpRCxDQUFDLEVBQ2xELENBQ0EsR0FBTSxDQUFFLE1BQUFDLEVBQU8sUUFBQUMsQ0FBUSxFQUFJRixFQUUz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QUVKLENBQUMsRUFDSCxPQUFPQyxFQUFZLFlBQ2pCTixFQUFXLEVBQ1ZILEdBQVVBLENBQ2IsRUFBRSxRQUFTRCxHQUFVVyxHQUFRWCxDQUFLLENBQUMsRUFBRSxPQUFRQyxHQUMzQ1csRUFDRSxJQUFJQyxHQUFvQixPQUFXLENBQUUsTUFBT0MsR0FBWWIsQ0FBSyxDQUFFLENBQUMsQ0FDbEUsQ0FDRixDQUNGLEtBQ0UsUUFBT1csRUFDTCxJQUFJSCxHQUE4Qix5QkFBeUIsQ0FDN0QsQ0FFSiIsCiAgIm5hbWVzIjogWyJCYXNlRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgImNhdXNlIiwgImNvbnRleHQiLCAiX19wdWJsaWNGaWVsZCIsICJaaXBFcnJvciIsICJCYXNlRXJyb3IiLCAiWmlwQ29tcHJlc3Npb25FcnJvciIsICJaaXBFcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImNoMiIsICJ3ayIsICJjIiwgImlkIiwgIm1zZyIsICJ0cmFuc2ZlciIsICJjYiIsICJ3IiwgImUiLCAiZCIsICJlZCIsICJlcnIiLCAidTgiLCAidTE2IiwgImkzMiIsICJmbGViIiwgImZkZWIiLCAiY2xpbSIsICJmcmViIiwgImViIiwgInN0YXJ0IiwgImIiLCAiaSIsICJyIiwgImoiLCAiX2EiLCAiZmwiLCAicmV2ZmwiLCAiX2IiLCAiZmQiLCAicmV2ZmQiLCAicmV2IiwgIngiLCAiaE1hcCIsICJjZCIsICJtYiIsICJzIiwgImwiLCAibGUiLCAiY28iLCAicnZiIiwgInN2IiwgInJfMSIsICJ2IiwgIm0iLCAiZmx0IiwgImZkdCIsICJmbG0iLCAiZmRtIiwgImhNYXAiLCAiZmR0IiwgInNoZnQiLCAicCIsICJzbGMiLCAidiIsICJzIiwgImUiLCAidTgiLCAiZWMiLCAiZXJyIiwgImluZCIsICJtc2ciLCAibnQiLCAiZSIsICJ3Yml0cyIsICJkIiwgInAiLCAidiIsICJvIiwgIndiaXRzMTYiLCAiaFRyZWUiLCAibWIiLCAidCIsICJpIiwgInMiLCAidDIiLCAiZXQiLCAidTgiLCAiYSIsICJiIiwgImwiLCAiciIsICJpMCIsICJpMSIsICJpMiIsICJtYXhTeW0iLCAidHIiLCAidTE2IiwgIm1idCIsICJsbiIsICJkdCIsICJsZnQiLCAiY3N0IiwgImkyXzEiLCAiaTJfMiIsICJpMl8zIiwgIm4iLCAibGMiLCAiYyIsICJjbCIsICJjbGkiLCAiY2xuIiwgImNscyIsICJ3IiwgImNsZW4iLCAiY2YiLCAid2ZibGsiLCAib3V0IiwgInBvcyIsICJkYXQiLCAic2hmdCIsICJ3YmxrIiwgImZpbmFsIiwgInN5bXMiLCAibGYiLCAiZGYiLCAiZWIiLCAibGkiLCAiYnMiLCAiYmwiLCAiX2EiLCAiZGx0IiwgIm1sYiIsICJfYiIsICJkZHQiLCAibWRiIiwgIl9jIiwgImxjbHQiLCAibmxjIiwgIl9kIiwgImxjZHQiLCAibmRjIiwgImxjZnJlcSIsICJfZSIsICJsY3QiLCAibWxjYiIsICJubGNjIiwgImNsaW0iLCAiZmxlbiIsICJmdGxlbiIsICJmbHQiLCAiZmR0IiwgImR0bGVuIiwgImxtIiwgImxsIiwgImRtIiwgImRsIiwgImhNYXAiLCAibGxtIiwgImxjdHMiLCAiaXQiLCAiY2xjdCIsICJsZW4iLCAiZmxtIiwgImZkbSIsICJzeW0iLCAiZmxlYiIsICJkc3QiLCAiZmRlYiIsICJkZW8iLCAiaTMyIiwgImRmbHQiLCAibHZsIiwgInBsdmwiLCAicHJlIiwgInBvc3QiLCAic3QiLCAibHN0IiwgIm9wdCIsICJtc2tfMSIsICJwcmV2IiwgImhlYWQiLCAiYnMxXzEiLCAiYnMyXzEiLCAiaHNoIiwgImxjXzEiLCAid2kiLCAiaHYiLCAiaW1vZCIsICJwaW1vZCIsICJyZW0iLCAiaiIsICJjaF8xIiwgImRpZiIsICJtYXhuIiwgIm1heGQiLCAibWwiLCAibmwiLCAibW1kIiwgIm1kIiwgInRpIiwgInB0aSIsICJjZCIsICJyZXZmbCIsICJyZXZmZCIsICJsaW4iLCAiZGluIiwgImUiLCAic2xjIiwgImNyY3QiLCAiayIsICJjcmMiLCAiY3IiLCAiZG9wdCIsICJkYXQiLCAib3B0IiwgInByZSIsICJwb3N0IiwgInN0IiwgImRpY3QiLCAibmV3RGF0IiwgInU4IiwgImRmbHQiLCAibXJnIiwgImEiLCAiYiIsICJvIiwgImsiLCAid2NsbiIsICJmbiIsICJmblN0ciIsICJ0ZCIsICJkdCIsICJrcyIsICJpIiwgInYiLCAic3RfMSIsICJzcEluZCIsICJ0IiwgImNoIiwgImNiZnMiLCAidGwiLCAid3JrciIsICJmbnMiLCAiaW5pdCIsICJpZCIsICJjYiIsICJ0ZF8xIiwgIm0iLCAid2siLCAiYkRmbHQiLCAidTgiLCAidTE2IiwgImkzMiIsICJmbGViIiwgImZkZWIiLCAiY2xpbSIsICJyZXZmbCIsICJyZXZmZCIsICJmbG0iLCAiZmx0IiwgImZkbSIsICJmZHQiLCAicmV2IiwgImRlbyIsICJldCIsICJoTWFwIiwgIndiaXRzIiwgIndiaXRzMTYiLCAiaFRyZWUiLCAibG4iLCAibGMiLCAiY2xlbiIsICJ3ZmJsayIsICJ3YmxrIiwgInNoZnQiLCAic2xjIiwgImRmbHQiLCAiZG9wdCIsICJkZWZsYXRlU3luYyIsICJwYmYiLCAicGJmIiwgIm1zZyIsICJjYmlmeSIsICJkYXQiLCAib3B0cyIsICJmbnMiLCAiaW5pdCIsICJpZCIsICJjYiIsICJ3IiwgIndya3IiLCAiZXJyIiwgIndieXRlcyIsICJkIiwgImIiLCAidiIsICJkZWZsYXRlIiwgImRhdGEiLCAib3B0cyIsICJjYiIsICJlcnIiLCAiY2JpZnkiLCAiYkRmbHQiLCAiZXYiLCAicGJmIiwgImRlZmxhdGVTeW5jIiwgImRvcHQiLCAiZmx0biIsICJkIiwgInAiLCAidCIsICJvIiwgImsiLCAidmFsIiwgIm4iLCAib3AiLCAibXJnIiwgInU4IiwgInRlIiwgInRkIiwgInRkcyIsICJldCIsICJzdHJUb1U4IiwgInN0ciIsICJsYXRpbjEiLCAiYXJfMSIsICJ1OCIsICJpIiwgInRlIiwgImwiLCAiYXIiLCAiYWkiLCAidyIsICJ2IiwgIm4iLCAiYyIsICJzbGMiLCAiZXhmbCIsICJleCIsICJsZSIsICJrIiwgImwiLCAiZXJyIiwgInd6aCIsICJkIiwgImIiLCAiZiIsICJmbiIsICJ1IiwgImMiLCAiY2UiLCAiY28iLCAiZmwiLCAiY29sIiwgImV4bCIsICJ3Ynl0ZXMiLCAiZHQiLCAieSIsICJleGYiLCAid3pmIiwgIm8iLCAiZSIsICJ6aXAiLCAiZGF0YSIsICJvcHRzIiwgImNiIiwgImVyciIsICJyIiwgImZsdG4iLCAiayIsICJsZnQiLCAibyIsICJ0b3QiLCAic2xmdCIsICJmaWxlcyIsICJ0ZXJtIiwgInRBbGwiLCAiaSIsICJjYmQiLCAiYSIsICJiIiwgIm10IiwgImNiZiIsICJvdXQiLCAidTgiLCAib2UiLCAiY2RsIiwgImYiLCAibCIsICJ3emgiLCAiYmFkZCIsICJleGZsIiwgImxvYyIsICJlIiwgInd6ZiIsICJfbG9vcF8xIiwgImZuIiwgIl9hIiwgImZpbGUiLCAiYyIsICJjcmMiLCAic2l6ZSIsICJzdHJUb1U4IiwgInMiLCAiY29tIiwgIm0iLCAibXMiLCAiZXhsIiwgImNvbXByZXNzaW9uIiwgImNibCIsICJkIiwgIm1yZyIsICJkZWZsYXRlU3luYyIsICJkZWZsYXRlIiwgIm10IiwgImZuIiwgImRlZmF1bHRFcnJvckNvbmZpZyIsICJjcmVhdGVOZXZlclRocm93RXJyb3IiLCAibWVzc2FnZSIsICJyZXN1bHQiLCAiY29uZmlnIiwgImRhdGEiLCAibWF5YmVTdGFjayIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgInZhbHVlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgImUiLCAicmVqZWN0ZWQiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX2F3YWl0IiwgInYiLCAiX19hc3luY0dlbmVyYXRvciIsICJnIiwgInEiLCAidmVyYiIsICJhd2FpdFJldHVybiIsICJmIiwgIm4iLCAiYSIsICJiIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiciIsICJmdWxmaWxsIiwgIl9fYXN5bmNEZWxlZ2F0b3IiLCAicCIsICJfX2FzeW5jVmFsdWVzIiwgImQiLCAiUmVzdWx0QXN5bmMiLCAiX1Jlc3VsdEFzeW5jIiwgInJlcyIsICJwcm9taXNlIiwgIm5ld1Byb21pc2UiLCAidmFsdWUiLCAiT2siLCAiZXJyb3JGbiIsICJlIiwgIkVyciIsICJmbiIsICJhcmdzIiwgIl9fYXdhaXRlciIsICJlcnJvciIsICJhc3luY1Jlc3VsdExpc3QiLCAiY29tYmluZVJlc3VsdEFzeW5jTGlzdCIsICJjb21iaW5lUmVzdWx0QXN5bmNMaXN0V2l0aEFsbEVycm9ycyIsICJmIiwgIm5ld1JlcyIsICJuZXdWYWx1ZSIsICJvayIsICJfZXJyIiwgInQiLCAiX19hc3luY0dlbmVyYXRvciIsICJfX2F3YWl0IiwgIl9fYXN5bmNEZWxlZ2F0b3IiLCAiX19hc3luY1ZhbHVlcyIsICJzdWNjZXNzQ2FsbGJhY2siLCAiZmFpbHVyZUNhbGxiYWNrIiwgInJlc3VsdCIsICJlcnJBc3luYyIsICJva0FzeW5jIiwgImVyciIsICJmcm9tUHJvbWlzZSIsICJmcm9tU2FmZVByb21pc2UiLCAiZnJvbUFzeW5jVGhyb3dhYmxlIiwgImNvbWJpbmVSZXN1bHRMaXN0IiwgInJlc3VsdExpc3QiLCAiYWNjIiwgImxpc3QiLCAiY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzIiwgIlJlc3VsdCIsICJmcm9tVGhyb3dhYmxlIiwgImNvbWJpbmUiLCAiY29tYmluZVdpdGhBbGxFcnJvcnMiLCAiT2siLCAidmFsdWUiLCAiZiIsICJvayIsICJfZiIsICJfdmFsdWUiLCAiUmVzdWx0QXN5bmMiLCAiX3YiLCAiX2VyciIsICJfIiwgImNvbmZpZyIsICJjcmVhdGVOZXZlclRocm93RXJyb3IiLCAiRXJyIiwgImVycm9yIiwgImVyciIsICJlcnJBc3luYyIsICJ2IiwgIl9vayIsICJzZWxmIiwgImZyb21UaHJvd2FibGUiLCAiUmVzdWx0IiwgIldvcmtlckVycm9yIiwgIkJhc2VFcnJvciIsICJXb3JrZXJVbmRlZmluZWRQYXJhbWV0ZXJFcnJvciIsICJXb3JrZXJFcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImVuc3VyZUVycm9yIiwgInZhbHVlIiwgInN0cmluZ2lmaWVkIiwgImV2ZW50IiwgImNvbXByZXNzIiwgImJ5dGVzIiwgImVycm9yIiwgIndvcmtlck1lc3NhZ2UiLCAiYXJjaGl2ZSIsICJwcm9taXNlWmlwIiwgInJlc29sdmUiLCAicmVqZWN0IiwgInppcCIsICJkYXRhIiwgIldvcmtlclVuZGVmaW5lZFBhcmFtZXRlckVycm9yIiwgIlJlc3VsdEFzeW5jIiwgIm9rQXN5bmMiLCAiZXJyQXN5bmMiLCAiWmlwQ29tcHJlc3Npb25FcnJvciIsICJlbnN1cmVFcnJvciJdCn0K diff --git a/themes/default/public/js/worker/decompress.js b/themes/default/public/js/worker/decompress.js new file mode 100644 index 0000000..e78aa7f --- /dev/null +++ b/themes/default/public/js/worker/decompress.js @@ -0,0 +1,2 @@ +var te=Object.defineProperty;var ie=(e,r,n)=>r in e?te(e,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[r]=n;var k=(e,r,n)=>ie(e,typeof r!="symbol"?r+"":r,n);var _=class extends Error{constructor(n,t={}){let{cause:i,context:o}=t;super(n,{cause:i});k(this,"context");this.name=this.constructor.name,this.context=o}};var er=class extends _{};var nr=class extends er{constructor(){super(...arguments);k(this,"message","An error occured while trying to decompress the data")}};var Tr={},oe=function(e,r,n,t,i){var o=new Worker(Tr[r]||(Tr[r]=URL.createObjectURL(new Blob([e+';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'],{type:"text/javascript"}))));return o.onmessage=function(a){var s=a.data,f=s.$e$;if(f){var c=new Error(f[0]);c.code=f[1],c.stack=f[2],i(c,null)}else i(null,s)},o.postMessage(n,t),o},E=Uint8Array,H=Uint16Array,Rr=Int32Array,pr=new E([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),mr=new E([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Ur=new E([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Lr=function(e,r){for(var n=new H(31),t=0;t<31;++t)n[t]=r+=1<>1|(l&21845)<<1,L=(L&52428)>>2|(L&13107)<<2,L=(L&61680)>>4|(L&3855)<<4,ar[l]=((L&65280)>>8|(L&255)<<8)>>1;var L,l,q=function(e,r,n){for(var t=e.length,i=0,o=new H(r);i>f]=c}else for(s=new H(t),i=0;i>15-e[i]);return s},Q=new E(288);for(l=0;l<144;++l)Q[l]=8;var l;for(l=144;l<256;++l)Q[l]=9;var l;for(l=256;l<280;++l)Q[l]=7;var l;for(l=280;l<288;++l)Q[l]=8;var l,Fr=new E(32);for(l=0;l<32;++l)Fr[l]=5;var l;var kr=q(Q,9,1);var _r=q(Fr,5,1),ir=function(e){for(var r=e[0],n=1;nr&&(r=e[n]);return r},S=function(e,r,n){var t=r/8|0;return(e[t]|e[t+1]<<8)>>(r&7)&n},or=function(e,r){var n=r/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(r&7)},Br=function(e){return(e+7)/8|0},sr=function(e,r,n){return(r==null||r<0)&&(r=0),(n==null||n>e.length)&&(n=e.length),new E(e.subarray(r,n))};var Hr=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],w=function(e,r,n){var t=new Error(r||Hr[e]);if(t.code=e,Error.captureStackTrace&&Error.captureStackTrace(t,w),!n)throw t;return t},Wr=function(e,r,n,t){var i=e.length,o=t?t.length:0;if(!i||r.f&&!r.l)return n||new E(0);var a=!n,s=a||r.i!=2,f=r.i;a&&(n=new E(i*3));var c=function(Or){var Sr=n.length;if(Or>Sr){var zr=new E(Math.max(Sr*2,Or));zr.set(n),n=zr}},p=r.f||0,u=r.p||0,v=r.b||0,h=r.l,g=r.d,x=r.m,A=r.n,D=i*8;do{if(!h){p=S(e,u,1);var b=S(e,u+1,3);if(u+=3,b)if(b==1)h=kr,g=_r,x=9,A=5;else if(b==2){var j=S(e,u,31)+257,V=S(e,u+10,15)+4,B=j+S(e,u+5,31)+1;u+=14;for(var O=new E(B),J=new E(19),m=0;m>4;if(y<16)O[m++]=y;else{var G=0,rr=0;for(y==16?(rr=3+S(e,u,3),u+=2,G=O[m-1]):y==17?(rr=3+S(e,u,7),u+=3):y==18&&(rr=11+S(e,u,127),u+=7);rr--;)O[m++]=G}}var xr=O.subarray(0,j),F=O.subarray(j);x=ir(xr),A=ir(F),h=q(xr,x,1),g=q(F,A,1)}else w(1);else{var y=Br(u)+4,U=e[y-4]|e[y-3]<<8,Z=y+U;if(Z>i){f&&w(0);break}s&&c(v+U),n.set(e.subarray(y,Z),v),r.b=v+=U,r.p=u=Z*8,r.f=p;continue}if(u>D){f&&w(0);break}}s&&c(v+131072);for(var re=(1<>4;if(u+=G&15,u>D){f&&w(0);break}if(G||w(2),N<256)n[v++]=N;else if(N==256){fr=u,h=null;break}else{var Ar=N-254;if(N>264){var m=N-257,Y=pr[m];Ar=S(e,u,(1<>4;hr||w(3),u+=hr&15;var F=br[lr];if(lr>3){var Y=mr[lr];F+=or(e,u)&(1<D){f&&w(0);break}s&&c(v+131072);var Dr=v+Ar;if(v>>0},cr=function(e,r){return I(e,r)+I(e,r+4)*4294967296};function ve(e,r,n){return n||(n=r,r={}),typeof n!="function"&&w(7),ce(e,r,[le],function(t){return Zr(yr(t.data[0],Jr(t.data[1])))},1,n)}function yr(e,r){return Wr(e,{i:2},r&&r.out,r&&r.dictionary)}var vr=typeof TextDecoder<"u"&&new TextDecoder,pe=0;try{vr.decode(se,{stream:!0}),pe=1}catch{}var me=function(e){for(var r="",n=0;;){var t=e[n++],i=(t>127)+(t>223)+(t>239);if(n+i>e.length)return{s:r,r:sr(e,n-1)};i?i==3?(t=((t&15)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)-65536,r+=String.fromCharCode(55296|t>>10,56320|t&1023)):i&1?r+=String.fromCharCode((t&31)<<6|e[n++]&63):r+=String.fromCharCode((t&15)<<12|(e[n++]&63)<<6|e[n++]&63):r+=String.fromCharCode(t)}};function ge(e,r){if(r){for(var n="",t=0;t65558)return a(w(13,0,1),null),i;var f=C(e,s+8);if(f){var c=f,p=I(e,s+16),u=p==4294967295||c==65535;if(u){var v=I(e,s-12);u=I(e,v)==101075792,u&&(c=f=I(e,v+32),p=I(e,v+48))}for(var h=r&&r.filter,g=function(A){var D=we(e,p,u),b=D[0],y=D[1],U=D[2],Z=D[3],j=D[4],V=D[5],B=ye(e,V);p=j;var O=function(m,$){m?(i(),a(m,null)):($&&(o[Z]=$),--f||a(null,o))};if(!h||h({name:Z,size:y,originalSize:U,compression:b}))if(!b)O(null,sr(e,B,B+y));else if(b==8){var J=e.subarray(B,B+y);if(U<524288||y>.8*U)try{O(null,yr(J,{out:new E(U)}))}catch(m){O(m,null)}else t.push(ve(J,{size:U},O))}else O(w(14,"unknown compression type "+b,1),null);else O(null,null)},x=0;x{let t=r.isOk()?{type:"Ok",value:r.value}:{type:"Err",value:r.error},i=n.withStackTrace?new Error().stack:void 0;return{data:t,message:e,stack:i}};function K(e,r,n,t){function i(o){return o instanceof n?o:new n(function(a){a(o)})}return new(n||(n=Promise))(function(o,a){function s(p){try{c(t.next(p))}catch(u){a(u)}}function f(p){try{c(t.throw(p))}catch(u){a(u)}}function c(p){p.done?o(p.value):i(p.value).then(s,f)}c((t=t.apply(e,r||[])).next())})}function Nr(e){var r=typeof Symbol=="function"&&Symbol.iterator,n=r&&e[r],t=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&t>=e.length&&(e=void 0),{value:e&&e[t++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}function R(e){return this instanceof R?(this.v=e,this):new R(e)}function qr(e,r,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=n.apply(e,r||[]),i,o=[];return i=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",a),i[Symbol.asyncIterator]=function(){return this},i;function a(h){return function(g){return Promise.resolve(g).then(h,u)}}function s(h,g){t[h]&&(i[h]=function(x){return new Promise(function(A,D){o.push([h,x,A,D])>1||f(h,x)})},g&&(i[h]=g(i[h])))}function f(h,g){try{c(t[h](g))}catch(x){v(o[0][3],x)}}function c(h){h.value instanceof R?Promise.resolve(h.value.v).then(p,u):v(o[0][2],h)}function p(h){f("next",h)}function u(h){f("throw",h)}function v(h,g){h(g),o.shift(),o.length&&f(o[0][0],o[0][1])}}function Ae(e){var r,n;return r={},t("next"),t("throw",function(i){throw i}),t("return"),r[Symbol.iterator]=function(){return this},r;function t(i,o){r[i]=e[i]?function(a){return(n=!n)?{value:R(e[i](a)),done:!1}:o?o(a):a}:o}}function De(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=e[Symbol.asyncIterator],n;return r?r.call(e):(e=typeof Nr=="function"?Nr(e):e[Symbol.iterator](),n={},t("next"),t("throw"),t("return"),n[Symbol.asyncIterator]=function(){return this},n);function t(o){n[o]=e[o]&&function(a){return new Promise(function(s,f){a=e[o](a),i(s,f,a.done,a.value)})}}function i(o,a,s,f){Promise.resolve(f).then(function(c){o({value:c,done:s})},a)}}var d=class e{constructor(r){this._promise=r}static fromSafePromise(r){let n=r.then(t=>new z(t));return new e(n)}static fromPromise(r,n){let t=r.then(i=>new z(i)).catch(i=>new T(n(i)));return new e(t)}static fromThrowable(r,n){return(...t)=>new e(K(this,void 0,void 0,function*(){try{return new z(yield r(...t))}catch(i){return new T(n?n(i):i)}}))}static combine(r){return de(r)}static combineWithAllErrors(r){return Oe(r)}map(r){return new e(this._promise.then(n=>K(this,void 0,void 0,function*(){return n.isErr()?new T(n.error):new z(yield r(n.value))})))}andThrough(r){return new e(this._promise.then(n=>K(this,void 0,void 0,function*(){if(n.isErr())return new T(n.error);let t=yield r(n.value);return t.isErr()?new T(t.error):new z(n.value)})))}andTee(r){return new e(this._promise.then(n=>K(this,void 0,void 0,function*(){if(n.isErr())return new T(n.error);try{yield r(n.value)}catch{}return new z(n.value)})))}mapErr(r){return new e(this._promise.then(n=>K(this,void 0,void 0,function*(){return n.isOk()?new z(n.value):new T(yield r(n.error))})))}andThen(r){return new e(this._promise.then(n=>{if(n.isErr())return new T(n.error);let t=r(n.value);return t instanceof e?t._promise:t}))}orElse(r){return new e(this._promise.then(n=>K(this,void 0,void 0,function*(){return n.isErr()?r(n.error):new z(n.value)})))}match(r,n){return this._promise.then(t=>t.match(r,n))}unwrapOr(r){return this._promise.then(n=>n.unwrapOr(r))}safeUnwrap(){return qr(this,arguments,function*(){return yield R(yield R(yield*Ae(De(yield R(this._promise.then(n=>n.safeUnwrap()))))))})}then(r,n){return this._promise.then(r,n)}[Symbol.asyncIterator](){return qr(this,arguments,function*(){let n=yield R(this._promise);return n.isErr()&&(yield yield R(P(n.error))),yield R(n.value)})}},jr=e=>new d(Promise.resolve(new z(e))),P=e=>new d(Promise.resolve(new T(e))),Fe=d.fromPromise,ke=d.fromSafePromise,_e=d.fromThrowable,$r=e=>{let r=W([]);for(let n of e)if(n.isErr()){r=M(n.error);break}else r.map(t=>t.push(n.value));return r},de=e=>d.fromSafePromise(Promise.all(e)).andThen($r),Yr=e=>{let r=W([]);for(let n of e)n.isErr()&&r.isErr()?r.error.push(n.error):n.isErr()&&r.isOk()?r=M([n.error]):n.isOk()&&r.isOk()&&r.value.push(n.value);return r},Oe=e=>d.fromSafePromise(Promise.all(e)).andThen(Yr),wr;(function(e){function r(i,o){return(...a)=>{try{let s=i(...a);return W(s)}catch(s){return M(o?o(s):s)}}}e.fromThrowable=r;function n(i){return $r(i)}e.combine=n;function t(i){return Yr(i)}e.combineWithAllErrors=t})(wr||(wr={}));var W=e=>new z(e);function M(e){return new T(e)}var z=class{constructor(r){this.value=r}isOk(){return!0}isErr(){return!this.isOk()}map(r){return W(r(this.value))}mapErr(r){return W(this.value)}andThen(r){return r(this.value)}andThrough(r){return r(this.value).map(n=>this.value)}andTee(r){try{r(this.value)}catch{}return W(this.value)}orElse(r){return W(this.value)}asyncAndThen(r){return r(this.value)}asyncAndThrough(r){return r(this.value).map(()=>this.value)}asyncMap(r){return d.fromSafePromise(r(this.value))}unwrapOr(r){return this.value}match(r,n){return r(this.value)}safeUnwrap(){let r=this.value;return function*(){return r}()}_unsafeUnwrap(r){return this.value}_unsafeUnwrapErr(r){throw Kr("Called `_unsafeUnwrapErr` on an Ok",this,r)}*[Symbol.iterator](){return this.value}},T=class{constructor(r){this.error=r}isOk(){return!1}isErr(){return!this.isOk()}map(r){return M(this.error)}mapErr(r){return M(r(this.error))}andThrough(r){return M(this.error)}andTee(r){return M(this.error)}andThen(r){return M(this.error)}orElse(r){return r(this.error)}asyncAndThen(r){return P(this.error)}asyncAndThrough(r){return P(this.error)}asyncMap(r){return P(this.error)}unwrapOr(r){return r}match(r,n){return n(this.error)}safeUnwrap(){let r=this.error;return function*(){throw yield M(r),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(r){throw Kr("Called `_unsafeUnwrap` on an Err",this,r)}_unsafeUnwrapErr(r){return this.error}*[Symbol.iterator](){let r=this;return yield r,r}},Be=wr.fromThrowable;var ur=class extends _{};var X=class extends ur{constructor(){super(...arguments);k(this,"message","Parameter must be defined")}};var Qr=e=>{if(e instanceof Error)return e;let r="[Unable to stringify the thrown value]";try{r=JSON.stringify(e)}catch{}return new Error(r)};self.onmessage=e=>{Se(e.data).map(()=>{self.postMessage({event:"ARCHIVE_DECOMPRESSED"})}).mapErr(r=>{self.postMessage({event:"OPERATION_FAILED",error:r})})};var Se=e=>{let{archive:r}=e.args;if(r){let n=async()=>{if(r.file){let t=await r.file.bytes();return new Promise((i,o)=>{Gr(t,(a,s)=>{a&&o(a),i(s)})})}else return Promise.reject(new X("archive.file must be defined"))};return d.fromPromise(n(),t=>t).andThen(t=>{try{for(let i in t)self.postMessage({event:"ARCHIVE_RETRIEVED_FILE",file:{buffer:t[i].buffer,path:i}},[t[i].buffer]);return jr(void 0)}catch(i){return P(i)}}).orElse(t=>P(new nr(void 0,{cause:Qr(t)})))}else return P(new X("archive must be defined"))}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2Vycm9yL2Jhc2UtZXJyb3IudHMiLCAiLi4vLi4vc3JjL2Vycm9yL3ppcC96aXAtZXJyb3IudHMiLCAiLi4vLi4vc3JjL2Vycm9yL3ppcC96aXAtZGVjb21wcmVzc2lvbi1lcnJvci50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vZmZsYXRlQDAuOC4yL25vZGVfbW9kdWxlcy9mZmxhdGUvZXNtL2Jyb3dzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL25ldmVydGhyb3dAOC4xLjEvbm9kZV9tb2R1bGVzL25ldmVydGhyb3cvZGlzdC9pbmRleC5lcy5qcyIsICIuLi8uLi9zcmMvZXJyb3Ivd29ya2VyL3dvcmtlci1lcnJvci50cyIsICIuLi8uLi9zcmMvZXJyb3Ivd29ya2VyL3dvcmtlci11bmRlZmluZWQtcGFyYW1ldGVyLWVycm9yLnRzIiwgIi4uLy4uL3NyYy91dGlscy50cyIsICIuLi8uLi9zcmMvd29ya2VyL2RlY29tcHJlc3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInR5cGUgSnNvbmFibGUgPVxuICB8IHN0cmluZ1xuICB8IG51bWJlclxuICB8IGJvb2xlYW5cbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkXG4gIHwgcmVhZG9ubHkgSnNvbmFibGVbXVxuICB8IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogSnNvbmFibGUgfVxuICB8IHsgdG9KU09OKCk6IEpzb25hYmxlIH07XG5cbmV4cG9ydCBjbGFzcyBCYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBjb250ZXh0PzogSnNvbmFibGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZT86IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IGNhdXNlPzogRXJyb3I7IGNvbnRleHQ/OiBKc29uYWJsZSB9ID0ge30sXG4gICkge1xuICAgIGNvbnN0IHsgY2F1c2UsIGNvbnRleHQgfSA9IG9wdGlvbnM7XG5cbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwifi9lcnJvci9iYXNlLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBaaXBFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7fVxuIiwgImltcG9ydCB7IFppcEVycm9yIH0gZnJvbSBcIn4vZXJyb3IvemlwL3ppcC1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgWmlwRGVjb21wcmVzc2lvbkVycm9yIGV4dGVuZHMgWmlwRXJyb3Ige1xuICBvdmVycmlkZSBtZXNzYWdlID0gXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byBkZWNvbXByZXNzIHRoZSBkYXRhXCI7XG59XG4iLCAiLy8gREVGTEFURSBpcyBhIGNvbXBsZXggZm9ybWF0OyB0byByZWFkIHRoaXMgY29kZSwgeW91IHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgUkZDIGZpcnN0OlxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTFcbi8vIFlvdSBtYXkgYWxzbyB3aXNoIHRvIHRha2UgYSBsb29rIGF0IHRoZSBndWlkZSBJIG1hZGUgYWJvdXQgdGhpcyBwcm9ncmFtOlxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTAxYXJyb3d6LzI1M2YzMWViNWFiYzNkOTI3NWFiOTQzMDAzZmZlY2FkXG4vLyBTb21lIG9mIHRoZSBmb2xsb3dpbmcgY29kZSBpcyBzaW1pbGFyIHRvIHRoYXQgb2YgVVpJUC5qczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9waG90b3BlYS9VWklQLmpzXG4vLyBIb3dldmVyLCB0aGUgdmFzdCBtYWpvcml0eSBvZiB0aGUgY29kZWJhc2UgaGFzIGRpdmVyZ2VkIGZyb20gVVpJUC5qcyB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZSBhbmQgcmVkdWNlIGJ1bmRsZSBzaXplLlxuLy8gU29tZXRpbWVzIDAgd2lsbCBhcHBlYXIgd2hlcmUgLTEgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZS4gVGhpcyBpcyBiZWNhdXNlIHVzaW5nIGEgdWludFxuLy8gaXMgYmV0dGVyIGZvciBtZW1vcnkgaW4gbW9zdCBlbmdpbmVzIChJICp0aGluayopLlxudmFyIGNoMiA9IHt9O1xudmFyIHdrID0gKGZ1bmN0aW9uIChjLCBpZCwgbXNnLCB0cmFuc2ZlciwgY2IpIHtcbiAgICB2YXIgdyA9IG5ldyBXb3JrZXIoY2gyW2lkXSB8fCAoY2gyW2lkXSA9IFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW1xuICAgICAgICBjICsgJzthZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixmdW5jdGlvbihlKXtlPWUuZXJyb3I7cG9zdE1lc3NhZ2UoeyRlJDpbZS5tZXNzYWdlLGUuY29kZSxlLnN0YWNrXX0pfSknXG4gICAgXSwgeyB0eXBlOiAndGV4dC9qYXZhc2NyaXB0JyB9KSkpKTtcbiAgICB3Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBkID0gZS5kYXRhLCBlZCA9IGQuJGUkO1xuICAgICAgICBpZiAoZWQpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoZWRbMF0pO1xuICAgICAgICAgICAgZXJyWydjb2RlJ10gPSBlZFsxXTtcbiAgICAgICAgICAgIGVyci5zdGFjayA9IGVkWzJdO1xuICAgICAgICAgICAgY2IoZXJyLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjYihudWxsLCBkKTtcbiAgICB9O1xuICAgIHcucG9zdE1lc3NhZ2UobXNnLCB0cmFuc2Zlcik7XG4gICAgcmV0dXJuIHc7XG59KTtcblxuLy8gYWxpYXNlcyBmb3Igc2hvcnRlciBjb21wcmVzc2VkIGNvZGUgKG1vc3QgbWluaWZlcnMgZG9uJ3QgZG8gdGhpcylcbnZhciB1OCA9IFVpbnQ4QXJyYXksIHUxNiA9IFVpbnQxNkFycmF5LCBpMzIgPSBJbnQzMkFycmF5O1xuLy8gZml4ZWQgbGVuZ3RoIGV4dHJhIGJpdHNcbnZhciBmbGViID0gbmV3IHU4KFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCAwLCAvKiB1bnVzZWQgKi8gMCwgMCwgLyogaW1wb3NzaWJsZSAqLyAwXSk7XG4vLyBmaXhlZCBkaXN0YW5jZSBleHRyYSBiaXRzXG52YXIgZmRlYiA9IG5ldyB1OChbMCwgMCwgMCwgMCwgMSwgMSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwgNiwgNywgNywgOCwgOCwgOSwgOSwgMTAsIDEwLCAxMSwgMTEsIDEyLCAxMiwgMTMsIDEzLCAvKiB1bnVzZWQgKi8gMCwgMF0pO1xuLy8gY29kZSBsZW5ndGggaW5kZXggbWFwXG52YXIgY2xpbSA9IG5ldyB1OChbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV0pO1xuLy8gZ2V0IGJhc2UsIHJldmVyc2UgaW5kZXggbWFwIGZyb20gZXh0cmEgYml0c1xudmFyIGZyZWIgPSBmdW5jdGlvbiAoZWIsIHN0YXJ0KSB7XG4gICAgdmFyIGIgPSBuZXcgdTE2KDMxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDMxOyArK2kpIHtcbiAgICAgICAgYltpXSA9IHN0YXJ0ICs9IDEgPDwgZWJbaSAtIDFdO1xuICAgIH1cbiAgICAvLyBudW1iZXJzIGhlcmUgYXJlIGF0IG1heCAxOCBiaXRzXG4gICAgdmFyIHIgPSBuZXcgaTMyKGJbMzBdKTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IDMwOyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IGJbaV07IGogPCBiW2kgKyAxXTsgKytqKSB7XG4gICAgICAgICAgICByW2pdID0gKChqIC0gYltpXSkgPDwgNSkgfCBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGI6IGIsIHI6IHIgfTtcbn07XG52YXIgX2EgPSBmcmViKGZsZWIsIDIpLCBmbCA9IF9hLmIsIHJldmZsID0gX2Eucjtcbi8vIHdlIGNhbiBpZ25vcmUgdGhlIGZhY3QgdGhhdCB0aGUgb3RoZXIgbnVtYmVycyBhcmUgd3Jvbmc7IHRoZXkgbmV2ZXIgaGFwcGVuIGFueXdheVxuZmxbMjhdID0gMjU4LCByZXZmbFsyNThdID0gMjg7XG52YXIgX2IgPSBmcmViKGZkZWIsIDApLCBmZCA9IF9iLmIsIHJldmZkID0gX2Iucjtcbi8vIG1hcCBvZiB2YWx1ZSB0byByZXZlcnNlIChhc3N1bWluZyAxNiBiaXRzKVxudmFyIHJldiA9IG5ldyB1MTYoMzI3NjgpO1xuZm9yICh2YXIgaSA9IDA7IGkgPCAzMjc2ODsgKytpKSB7XG4gICAgLy8gcmV2ZXJzZSB0YWJsZSBhbGdvcml0aG0gZnJvbSBTT1xuICAgIHZhciB4ID0gKChpICYgMHhBQUFBKSA+PiAxKSB8ICgoaSAmIDB4NTU1NSkgPDwgMSk7XG4gICAgeCA9ICgoeCAmIDB4Q0NDQykgPj4gMikgfCAoKHggJiAweDMzMzMpIDw8IDIpO1xuICAgIHggPSAoKHggJiAweEYwRjApID4+IDQpIHwgKCh4ICYgMHgwRjBGKSA8PCA0KTtcbiAgICByZXZbaV0gPSAoKCh4ICYgMHhGRjAwKSA+PiA4KSB8ICgoeCAmIDB4MDBGRikgPDwgOCkpID4+IDE7XG59XG4vLyBjcmVhdGUgaHVmZm1hbiB0cmVlIGZyb20gdTggXCJtYXBcIjogaW5kZXggLT4gY29kZSBsZW5ndGggZm9yIGNvZGUgaW5kZXhcbi8vIG1iIChtYXggYml0cykgbXVzdCBiZSBhdCBtb3N0IDE1XG4vLyBUT0RPOiBvcHRpbWl6ZS9zcGxpdCB1cD9cbnZhciBoTWFwID0gKGZ1bmN0aW9uIChjZCwgbWIsIHIpIHtcbiAgICB2YXIgcyA9IGNkLmxlbmd0aDtcbiAgICAvLyBpbmRleFxuICAgIHZhciBpID0gMDtcbiAgICAvLyB1MTYgXCJtYXBcIjogaW5kZXggLT4gIyBvZiBjb2RlcyB3aXRoIGJpdCBsZW5ndGggPSBpbmRleFxuICAgIHZhciBsID0gbmV3IHUxNihtYik7XG4gICAgLy8gbGVuZ3RoIG9mIGNkIG11c3QgYmUgMjg4ICh0b3RhbCAjIG9mIGNvZGVzKVxuICAgIGZvciAoOyBpIDwgczsgKytpKSB7XG4gICAgICAgIGlmIChjZFtpXSlcbiAgICAgICAgICAgICsrbFtjZFtpXSAtIDFdO1xuICAgIH1cbiAgICAvLyB1MTYgXCJtYXBcIjogaW5kZXggLT4gbWluaW11bSBjb2RlIGZvciBiaXQgbGVuZ3RoID0gaW5kZXhcbiAgICB2YXIgbGUgPSBuZXcgdTE2KG1iKTtcbiAgICBmb3IgKGkgPSAxOyBpIDwgbWI7ICsraSkge1xuICAgICAgICBsZVtpXSA9IChsZVtpIC0gMV0gKyBsW2kgLSAxXSkgPDwgMTtcbiAgICB9XG4gICAgdmFyIGNvO1xuICAgIGlmIChyKSB7XG4gICAgICAgIC8vIHUxNiBcIm1hcFwiOiBpbmRleCAtPiBudW1iZXIgb2YgYWN0dWFsIGJpdHMsIHN5bWJvbCBmb3IgY29kZVxuICAgICAgICBjbyA9IG5ldyB1MTYoMSA8PCBtYik7XG4gICAgICAgIC8vIGJpdHMgdG8gcmVtb3ZlIGZvciByZXZlcnNlclxuICAgICAgICB2YXIgcnZiID0gMTUgLSBtYjtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHM7ICsraSkge1xuICAgICAgICAgICAgLy8gaWdub3JlIDAgbGVuZ3Roc1xuICAgICAgICAgICAgaWYgKGNkW2ldKSB7XG4gICAgICAgICAgICAgICAgLy8gbnVtIGVuY29kaW5nIGJvdGggc3ltYm9sIGFuZCBiaXRzIHJlYWRcbiAgICAgICAgICAgICAgICB2YXIgc3YgPSAoaSA8PCA0KSB8IGNkW2ldO1xuICAgICAgICAgICAgICAgIC8vIGZyZWUgYml0c1xuICAgICAgICAgICAgICAgIHZhciByXzEgPSBtYiAtIGNkW2ldO1xuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IHZhbHVlXG4gICAgICAgICAgICAgICAgdmFyIHYgPSBsZVtjZFtpXSAtIDFdKysgPDwgcl8xO1xuICAgICAgICAgICAgICAgIC8vIG0gaXMgZW5kIHZhbHVlXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IHYgfCAoKDEgPDwgcl8xKSAtIDEpOyB2IDw9IG07ICsrdikge1xuICAgICAgICAgICAgICAgICAgICAvLyBldmVyeSAxNiBiaXQgdmFsdWUgc3RhcnRpbmcgd2l0aCB0aGUgY29kZSB5aWVsZHMgdGhlIHNhbWUgcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgIGNvW3Jldlt2XSA+PiBydmJdID0gc3Y7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjbyA9IG5ldyB1MTYocyk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChjZFtpXSkge1xuICAgICAgICAgICAgICAgIGNvW2ldID0gcmV2W2xlW2NkW2ldIC0gMV0rK10gPj4gKDE1IC0gY2RbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbztcbn0pO1xuLy8gZml4ZWQgbGVuZ3RoIHRyZWVcbnZhciBmbHQgPSBuZXcgdTgoMjg4KTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMTQ0OyArK2kpXG4gICAgZmx0W2ldID0gODtcbmZvciAodmFyIGkgPSAxNDQ7IGkgPCAyNTY7ICsraSlcbiAgICBmbHRbaV0gPSA5O1xuZm9yICh2YXIgaSA9IDI1NjsgaSA8IDI4MDsgKytpKVxuICAgIGZsdFtpXSA9IDc7XG5mb3IgKHZhciBpID0gMjgwOyBpIDwgMjg4OyArK2kpXG4gICAgZmx0W2ldID0gODtcbi8vIGZpeGVkIGRpc3RhbmNlIHRyZWVcbnZhciBmZHQgPSBuZXcgdTgoMzIpO1xuZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgKytpKVxuICAgIGZkdFtpXSA9IDU7XG4vLyBmaXhlZCBsZW5ndGggbWFwXG52YXIgZmxtID0gLyojX19QVVJFX18qLyBoTWFwKGZsdCwgOSwgMCksIGZscm0gPSAvKiNfX1BVUkVfXyovIGhNYXAoZmx0LCA5LCAxKTtcbi8vIGZpeGVkIGRpc3RhbmNlIG1hcFxudmFyIGZkbSA9IC8qI19fUFVSRV9fKi8gaE1hcChmZHQsIDUsIDApLCBmZHJtID0gLyojX19QVVJFX18qLyBoTWFwKGZkdCwgNSwgMSk7XG4vLyBmaW5kIG1heCBvZiBhcnJheVxudmFyIG1heCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIG0gPSBhWzBdO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoYVtpXSA+IG0pXG4gICAgICAgICAgICBtID0gYVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIG07XG59O1xuLy8gcmVhZCBkLCBzdGFydGluZyBhdCBiaXQgcCBhbmQgbWFzayB3aXRoIG1cbnZhciBiaXRzID0gZnVuY3Rpb24gKGQsIHAsIG0pIHtcbiAgICB2YXIgbyA9IChwIC8gOCkgfCAwO1xuICAgIHJldHVybiAoKGRbb10gfCAoZFtvICsgMV0gPDwgOCkpID4+IChwICYgNykpICYgbTtcbn07XG4vLyByZWFkIGQsIHN0YXJ0aW5nIGF0IGJpdCBwIGNvbnRpbnVpbmcgZm9yIGF0IGxlYXN0IDE2IGJpdHNcbnZhciBiaXRzMTYgPSBmdW5jdGlvbiAoZCwgcCkge1xuICAgIHZhciBvID0gKHAgLyA4KSB8IDA7XG4gICAgcmV0dXJuICgoZFtvXSB8IChkW28gKyAxXSA8PCA4KSB8IChkW28gKyAyXSA8PCAxNikpID4+IChwICYgNykpO1xufTtcbi8vIGdldCBlbmQgb2YgYnl0ZVxudmFyIHNoZnQgPSBmdW5jdGlvbiAocCkgeyByZXR1cm4gKChwICsgNykgLyA4KSB8IDA7IH07XG4vLyB0eXBlZCBhcnJheSBzbGljZSAtIGFsbG93cyBnYXJiYWdlIGNvbGxlY3RvciB0byBmcmVlIG9yaWdpbmFsIHJlZmVyZW5jZSxcbi8vIHdoaWxlIGJlaW5nIG1vcmUgY29tcGF0aWJsZSB0aGFuIC5zbGljZVxudmFyIHNsYyA9IGZ1bmN0aW9uICh2LCBzLCBlKSB7XG4gICAgaWYgKHMgPT0gbnVsbCB8fCBzIDwgMClcbiAgICAgICAgcyA9IDA7XG4gICAgaWYgKGUgPT0gbnVsbCB8fCBlID4gdi5sZW5ndGgpXG4gICAgICAgIGUgPSB2Lmxlbmd0aDtcbiAgICAvLyBjYW4ndCB1c2UgLmNvbnN0cnVjdG9yIGluIGNhc2UgdXNlci1zdXBwbGllZFxuICAgIHJldHVybiBuZXcgdTgodi5zdWJhcnJheShzLCBlKSk7XG59O1xuLyoqXG4gKiBDb2RlcyBmb3IgZXJyb3JzIGdlbmVyYXRlZCB3aXRoaW4gdGhpcyBsaWJyYXJ5XG4gKi9cbmV4cG9ydCB2YXIgRmxhdGVFcnJvckNvZGUgPSB7XG4gICAgVW5leHBlY3RlZEVPRjogMCxcbiAgICBJbnZhbGlkQmxvY2tUeXBlOiAxLFxuICAgIEludmFsaWRMZW5ndGhMaXRlcmFsOiAyLFxuICAgIEludmFsaWREaXN0YW5jZTogMyxcbiAgICBTdHJlYW1GaW5pc2hlZDogNCxcbiAgICBOb1N0cmVhbUhhbmRsZXI6IDUsXG4gICAgSW52YWxpZEhlYWRlcjogNixcbiAgICBOb0NhbGxiYWNrOiA3LFxuICAgIEludmFsaWRVVEY4OiA4LFxuICAgIEV4dHJhRmllbGRUb29Mb25nOiA5LFxuICAgIEludmFsaWREYXRlOiAxMCxcbiAgICBGaWxlbmFtZVRvb0xvbmc6IDExLFxuICAgIFN0cmVhbUZpbmlzaGluZzogMTIsXG4gICAgSW52YWxpZFppcERhdGE6IDEzLFxuICAgIFVua25vd25Db21wcmVzc2lvbk1ldGhvZDogMTRcbn07XG4vLyBlcnJvciBjb2Rlc1xudmFyIGVjID0gW1xuICAgICd1bmV4cGVjdGVkIEVPRicsXG4gICAgJ2ludmFsaWQgYmxvY2sgdHlwZScsXG4gICAgJ2ludmFsaWQgbGVuZ3RoL2xpdGVyYWwnLFxuICAgICdpbnZhbGlkIGRpc3RhbmNlJyxcbiAgICAnc3RyZWFtIGZpbmlzaGVkJyxcbiAgICAnbm8gc3RyZWFtIGhhbmRsZXInLFxuICAgICxcbiAgICAnbm8gY2FsbGJhY2snLFxuICAgICdpbnZhbGlkIFVURi04IGRhdGEnLFxuICAgICdleHRyYSBmaWVsZCB0b28gbG9uZycsXG4gICAgJ2RhdGUgbm90IGluIHJhbmdlIDE5ODAtMjA5OScsXG4gICAgJ2ZpbGVuYW1lIHRvbyBsb25nJyxcbiAgICAnc3RyZWFtIGZpbmlzaGluZycsXG4gICAgJ2ludmFsaWQgemlwIGRhdGEnXG4gICAgLy8gZGV0ZXJtaW5lZCBieSB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZFxuXTtcbjtcbnZhciBlcnIgPSBmdW5jdGlvbiAoaW5kLCBtc2csIG50KSB7XG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnIHx8IGVjW2luZF0pO1xuICAgIGUuY29kZSA9IGluZDtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGUsIGVycik7XG4gICAgaWYgKCFudClcbiAgICAgICAgdGhyb3cgZTtcbiAgICByZXR1cm4gZTtcbn07XG4vLyBleHBhbmRzIHJhdyBERUZMQVRFIGRhdGFcbnZhciBpbmZsdCA9IGZ1bmN0aW9uIChkYXQsIHN0LCBidWYsIGRpY3QpIHtcbiAgICAvLyBzb3VyY2UgbGVuZ3RoICAgICAgIGRpY3QgbGVuZ3RoXG4gICAgdmFyIHNsID0gZGF0Lmxlbmd0aCwgZGwgPSBkaWN0ID8gZGljdC5sZW5ndGggOiAwO1xuICAgIGlmICghc2wgfHwgc3QuZiAmJiAhc3QubClcbiAgICAgICAgcmV0dXJuIGJ1ZiB8fCBuZXcgdTgoMCk7XG4gICAgdmFyIG5vQnVmID0gIWJ1ZjtcbiAgICAvLyBoYXZlIHRvIGVzdGltYXRlIHNpemVcbiAgICB2YXIgcmVzaXplID0gbm9CdWYgfHwgc3QuaSAhPSAyO1xuICAgIC8vIG5vIHN0YXRlXG4gICAgdmFyIG5vU3QgPSBzdC5pO1xuICAgIC8vIEFzc3VtZXMgcm91Z2hseSAzMyUgY29tcHJlc3Npb24gcmF0aW8gYXZlcmFnZVxuICAgIGlmIChub0J1ZilcbiAgICAgICAgYnVmID0gbmV3IHU4KHNsICogMyk7XG4gICAgLy8gZW5zdXJlIGJ1ZmZlciBjYW4gZml0IGF0IGxlYXN0IGwgZWxlbWVudHNcbiAgICB2YXIgY2J1ZiA9IGZ1bmN0aW9uIChsKSB7XG4gICAgICAgIHZhciBibCA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIC8vIG5lZWQgdG8gaW5jcmVhc2Ugc2l6ZSB0byBmaXRcbiAgICAgICAgaWYgKGwgPiBibCkge1xuICAgICAgICAgICAgLy8gRG91YmxlIG9yIHNldCB0byBuZWNlc3NhcnksIHdoaWNoZXZlciBpcyBncmVhdGVyXG4gICAgICAgICAgICB2YXIgbmJ1ZiA9IG5ldyB1OChNYXRoLm1heChibCAqIDIsIGwpKTtcbiAgICAgICAgICAgIG5idWYuc2V0KGJ1Zik7XG4gICAgICAgICAgICBidWYgPSBuYnVmO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvLyAgbGFzdCBjaHVuayAgICAgICAgIGJpdHBvcyAgICAgICAgICAgYnl0ZXNcbiAgICB2YXIgZmluYWwgPSBzdC5mIHx8IDAsIHBvcyA9IHN0LnAgfHwgMCwgYnQgPSBzdC5iIHx8IDAsIGxtID0gc3QubCwgZG0gPSBzdC5kLCBsYnQgPSBzdC5tLCBkYnQgPSBzdC5uO1xuICAgIC8vIHRvdGFsIGJpdHNcbiAgICB2YXIgdGJ0cyA9IHNsICogODtcbiAgICBkbyB7XG4gICAgICAgIGlmICghbG0pIHtcbiAgICAgICAgICAgIC8vIEJGSU5BTCAtIHRoaXMgaXMgb25seSAxIHdoZW4gbGFzdCBjaHVuayBpcyBuZXh0XG4gICAgICAgICAgICBmaW5hbCA9IGJpdHMoZGF0LCBwb3MsIDEpO1xuICAgICAgICAgICAgLy8gdHlwZTogMCA9IG5vIGNvbXByZXNzaW9uLCAxID0gZml4ZWQgaHVmZm1hbiwgMiA9IGR5bmFtaWMgaHVmZm1hblxuICAgICAgICAgICAgdmFyIHR5cGUgPSBiaXRzKGRhdCwgcG9zICsgMSwgMyk7XG4gICAgICAgICAgICBwb3MgKz0gMztcbiAgICAgICAgICAgIGlmICghdHlwZSkge1xuICAgICAgICAgICAgICAgIC8vIGdvIHRvIGVuZCBvZiBieXRlIGJvdW5kYXJ5XG4gICAgICAgICAgICAgICAgdmFyIHMgPSBzaGZ0KHBvcykgKyA0LCBsID0gZGF0W3MgLSA0XSB8IChkYXRbcyAtIDNdIDw8IDgpLCB0ID0gcyArIGw7XG4gICAgICAgICAgICAgICAgaWYgKHQgPiBzbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9TdClcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycigwKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGVuc3VyZSBzaXplXG4gICAgICAgICAgICAgICAgaWYgKHJlc2l6ZSlcbiAgICAgICAgICAgICAgICAgICAgY2J1ZihidCArIGwpO1xuICAgICAgICAgICAgICAgIC8vIENvcHkgb3ZlciB1bmNvbXByZXNzZWQgZGF0YVxuICAgICAgICAgICAgICAgIGJ1Zi5zZXQoZGF0LnN1YmFycmF5KHMsIHQpLCBidCk7XG4gICAgICAgICAgICAgICAgLy8gR2V0IG5ldyBiaXRwb3MsIHVwZGF0ZSBieXRlIGNvdW50XG4gICAgICAgICAgICAgICAgc3QuYiA9IGJ0ICs9IGwsIHN0LnAgPSBwb3MgPSB0ICogOCwgc3QuZiA9IGZpbmFsO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAxKVxuICAgICAgICAgICAgICAgIGxtID0gZmxybSwgZG0gPSBmZHJtLCBsYnQgPSA5LCBkYnQgPSA1O1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAyKSB7XG4gICAgICAgICAgICAgICAgLy8gIGxpdGVyYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3Roc1xuICAgICAgICAgICAgICAgIHZhciBoTGl0ID0gYml0cyhkYXQsIHBvcywgMzEpICsgMjU3LCBoY0xlbiA9IGJpdHMoZGF0LCBwb3MgKyAxMCwgMTUpICsgNDtcbiAgICAgICAgICAgICAgICB2YXIgdGwgPSBoTGl0ICsgYml0cyhkYXQsIHBvcyArIDUsIDMxKSArIDE7XG4gICAgICAgICAgICAgICAgcG9zICs9IDE0O1xuICAgICAgICAgICAgICAgIC8vIGxlbmd0aCtkaXN0YW5jZSB0cmVlXG4gICAgICAgICAgICAgICAgdmFyIGxkdCA9IG5ldyB1OCh0bCk7XG4gICAgICAgICAgICAgICAgLy8gY29kZSBsZW5ndGggdHJlZVxuICAgICAgICAgICAgICAgIHZhciBjbHQgPSBuZXcgdTgoMTkpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGNMZW47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1c2UgaW5kZXggbWFwIHRvIGdldCByZWFsIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgY2x0W2NsaW1baV1dID0gYml0cyhkYXQsIHBvcyArIGkgKiAzLCA3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcG9zICs9IGhjTGVuICogMztcbiAgICAgICAgICAgICAgICAvLyBjb2RlIGxlbmd0aHMgYml0c1xuICAgICAgICAgICAgICAgIHZhciBjbGIgPSBtYXgoY2x0KSwgY2xibXNrID0gKDEgPDwgY2xiKSAtIDE7XG4gICAgICAgICAgICAgICAgLy8gY29kZSBsZW5ndGhzIG1hcFxuICAgICAgICAgICAgICAgIHZhciBjbG0gPSBoTWFwKGNsdCwgY2xiLCAxKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRsOykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGNsbVtiaXRzKGRhdCwgcG9zLCBjbGJtc2spXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gYml0cyByZWFkXG4gICAgICAgICAgICAgICAgICAgIHBvcyArPSByICYgMTU7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN5bWJvbFxuICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IHIgPj4gNDtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29kZSBsZW5ndGggdG8gY29weVxuICAgICAgICAgICAgICAgICAgICBpZiAocyA8IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZHRbaSsrXSA9IHM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgY29weSAgIGNvdW50XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IDAsIG4gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT0gMTYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDMgKyBiaXRzKGRhdCwgcG9zLCAzKSwgcG9zICs9IDIsIGMgPSBsZHRbaSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocyA9PSAxNylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMyArIGJpdHMoZGF0LCBwb3MsIDcpLCBwb3MgKz0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHMgPT0gMTgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDExICsgYml0cyhkYXQsIHBvcywgMTI3KSwgcG9zICs9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobi0tKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxkdFtpKytdID0gYztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAgICBsZW5ndGggdHJlZSAgICAgICAgICAgICAgICAgZGlzdGFuY2UgdHJlZVxuICAgICAgICAgICAgICAgIHZhciBsdCA9IGxkdC5zdWJhcnJheSgwLCBoTGl0KSwgZHQgPSBsZHQuc3ViYXJyYXkoaExpdCk7XG4gICAgICAgICAgICAgICAgLy8gbWF4IGxlbmd0aCBiaXRzXG4gICAgICAgICAgICAgICAgbGJ0ID0gbWF4KGx0KTtcbiAgICAgICAgICAgICAgICAvLyBtYXggZGlzdCBiaXRzXG4gICAgICAgICAgICAgICAgZGJ0ID0gbWF4KGR0KTtcbiAgICAgICAgICAgICAgICBsbSA9IGhNYXAobHQsIGxidCwgMSk7XG4gICAgICAgICAgICAgICAgZG0gPSBoTWFwKGR0LCBkYnQsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGVycigxKTtcbiAgICAgICAgICAgIGlmIChwb3MgPiB0YnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vU3QpXG4gICAgICAgICAgICAgICAgICAgIGVycigwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGJ1ZmZlciBjYW4gaG9sZCB0aGlzICsgdGhlIGxhcmdlc3QgcG9zc2libGUgYWRkaXRpb25cbiAgICAgICAgLy8gTWF4aW11bSBjaHVuayBzaXplIChwcmFjdGljYWxseSwgdGhlb3JldGljYWxseSBpbmZpbml0ZSkgaXMgMl4xN1xuICAgICAgICBpZiAocmVzaXplKVxuICAgICAgICAgICAgY2J1ZihidCArIDEzMTA3Mik7XG4gICAgICAgIHZhciBsbXMgPSAoMSA8PCBsYnQpIC0gMSwgZG1zID0gKDEgPDwgZGJ0KSAtIDE7XG4gICAgICAgIHZhciBscG9zID0gcG9zO1xuICAgICAgICBmb3IgKDs7IGxwb3MgPSBwb3MpIHtcbiAgICAgICAgICAgIC8vIGJpdHMgcmVhZCwgY29kZVxuICAgICAgICAgICAgdmFyIGMgPSBsbVtiaXRzMTYoZGF0LCBwb3MpICYgbG1zXSwgc3ltID0gYyA+PiA0O1xuICAgICAgICAgICAgcG9zICs9IGMgJiAxNTtcbiAgICAgICAgICAgIGlmIChwb3MgPiB0YnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vU3QpXG4gICAgICAgICAgICAgICAgICAgIGVycigwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYylcbiAgICAgICAgICAgICAgICBlcnIoMik7XG4gICAgICAgICAgICBpZiAoc3ltIDwgMjU2KVxuICAgICAgICAgICAgICAgIGJ1ZltidCsrXSA9IHN5bTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHN5bSA9PSAyNTYpIHtcbiAgICAgICAgICAgICAgICBscG9zID0gcG9zLCBsbSA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgYWRkID0gc3ltIC0gMjU0O1xuICAgICAgICAgICAgICAgIC8vIG5vIGV4dHJhIGJpdHMgbmVlZGVkIGlmIGxlc3NcbiAgICAgICAgICAgICAgICBpZiAoc3ltID4gMjY0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluZGV4XG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gc3ltIC0gMjU3LCBiID0gZmxlYltpXTtcbiAgICAgICAgICAgICAgICAgICAgYWRkID0gYml0cyhkYXQsIHBvcywgKDEgPDwgYikgLSAxKSArIGZsW2ldO1xuICAgICAgICAgICAgICAgICAgICBwb3MgKz0gYjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZGlzdFxuICAgICAgICAgICAgICAgIHZhciBkID0gZG1bYml0czE2KGRhdCwgcG9zKSAmIGRtc10sIGRzeW0gPSBkID4+IDQ7XG4gICAgICAgICAgICAgICAgaWYgKCFkKVxuICAgICAgICAgICAgICAgICAgICBlcnIoMyk7XG4gICAgICAgICAgICAgICAgcG9zICs9IGQgJiAxNTtcbiAgICAgICAgICAgICAgICB2YXIgZHQgPSBmZFtkc3ltXTtcbiAgICAgICAgICAgICAgICBpZiAoZHN5bSA+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBmZGViW2RzeW1dO1xuICAgICAgICAgICAgICAgICAgICBkdCArPSBiaXRzMTYoZGF0LCBwb3MpICYgKDEgPDwgYikgLSAxLCBwb3MgKz0gYjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBvcyA+IHRidHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vU3QpXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIoMCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzaXplKVxuICAgICAgICAgICAgICAgICAgICBjYnVmKGJ0ICsgMTMxMDcyKTtcbiAgICAgICAgICAgICAgICB2YXIgZW5kID0gYnQgKyBhZGQ7XG4gICAgICAgICAgICAgICAgaWYgKGJ0IDwgZHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNoaWZ0ID0gZGwgLSBkdCwgZGVuZCA9IE1hdGgubWluKGR0LCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hpZnQgKyBidCA8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIoMyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBidCA8IGRlbmQ7ICsrYnQpXG4gICAgICAgICAgICAgICAgICAgICAgICBidWZbYnRdID0gZGljdFtzaGlmdCArIGJ0XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICg7IGJ0IDwgZW5kOyArK2J0KVxuICAgICAgICAgICAgICAgICAgICBidWZbYnRdID0gYnVmW2J0IC0gZHRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0LmwgPSBsbSwgc3QucCA9IGxwb3MsIHN0LmIgPSBidCwgc3QuZiA9IGZpbmFsO1xuICAgICAgICBpZiAobG0pXG4gICAgICAgICAgICBmaW5hbCA9IDEsIHN0Lm0gPSBsYnQsIHN0LmQgPSBkbSwgc3QubiA9IGRidDtcbiAgICB9IHdoaWxlICghZmluYWwpO1xuICAgIC8vIGRvbid0IHJlYWxsb2NhdGUgZm9yIHN0cmVhbXMgb3IgdXNlciBidWZmZXJzXG4gICAgcmV0dXJuIGJ0ICE9IGJ1Zi5sZW5ndGggJiYgbm9CdWYgPyBzbGMoYnVmLCAwLCBidCkgOiBidWYuc3ViYXJyYXkoMCwgYnQpO1xufTtcbi8vIHN0YXJ0aW5nIGF0IHAsIHdyaXRlIHRoZSBtaW5pbXVtIG51bWJlciBvZiBiaXRzIHRoYXQgY2FuIGhvbGQgdiB0byBkXG52YXIgd2JpdHMgPSBmdW5jdGlvbiAoZCwgcCwgdikge1xuICAgIHYgPDw9IHAgJiA3O1xuICAgIHZhciBvID0gKHAgLyA4KSB8IDA7XG4gICAgZFtvXSB8PSB2O1xuICAgIGRbbyArIDFdIHw9IHYgPj4gODtcbn07XG4vLyBzdGFydGluZyBhdCBwLCB3cml0ZSB0aGUgbWluaW11bSBudW1iZXIgb2YgYml0cyAoPjgpIHRoYXQgY2FuIGhvbGQgdiB0byBkXG52YXIgd2JpdHMxNiA9IGZ1bmN0aW9uIChkLCBwLCB2KSB7XG4gICAgdiA8PD0gcCAmIDc7XG4gICAgdmFyIG8gPSAocCAvIDgpIHwgMDtcbiAgICBkW29dIHw9IHY7XG4gICAgZFtvICsgMV0gfD0gdiA+PiA4O1xuICAgIGRbbyArIDJdIHw9IHYgPj4gMTY7XG59O1xuLy8gY3JlYXRlcyBjb2RlIGxlbmd0aHMgZnJvbSBhIGZyZXF1ZW5jeSB0YWJsZVxudmFyIGhUcmVlID0gZnVuY3Rpb24gKGQsIG1iKSB7XG4gICAgLy8gTmVlZCBleHRyYSBpbmZvIHRvIG1ha2UgYSB0cmVlXG4gICAgdmFyIHQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGRbaV0pXG4gICAgICAgICAgICB0LnB1c2goeyBzOiBpLCBmOiBkW2ldIH0pO1xuICAgIH1cbiAgICB2YXIgcyA9IHQubGVuZ3RoO1xuICAgIHZhciB0MiA9IHQuc2xpY2UoKTtcbiAgICBpZiAoIXMpXG4gICAgICAgIHJldHVybiB7IHQ6IGV0LCBsOiAwIH07XG4gICAgaWYgKHMgPT0gMSkge1xuICAgICAgICB2YXIgdiA9IG5ldyB1OCh0WzBdLnMgKyAxKTtcbiAgICAgICAgdlt0WzBdLnNdID0gMTtcbiAgICAgICAgcmV0dXJuIHsgdDogdiwgbDogMSB9O1xuICAgIH1cbiAgICB0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZiAtIGIuZjsgfSk7XG4gICAgLy8gYWZ0ZXIgaTIgcmVhY2hlcyBsYXN0IGluZCwgd2lsbCBiZSBzdG9wcGVkXG4gICAgLy8gZnJlcSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBsYXJnZXN0IHBvc3NpYmxlIG51bWJlciBvZiBzeW1ib2xzXG4gICAgdC5wdXNoKHsgczogLTEsIGY6IDI1MDAxIH0pO1xuICAgIHZhciBsID0gdFswXSwgciA9IHRbMV0sIGkwID0gMCwgaTEgPSAxLCBpMiA9IDI7XG4gICAgdFswXSA9IHsgczogLTEsIGY6IGwuZiArIHIuZiwgbDogbCwgcjogciB9O1xuICAgIC8vIGVmZmljaWVudCBhbGdvcml0aG0gZnJvbSBVWklQLmpzXG4gICAgLy8gaTAgaXMgbG9va2JlaGluZCwgaTIgaXMgbG9va2FoZWFkIC0gYWZ0ZXIgcHJvY2Vzc2luZyB0d28gbG93LWZyZXFcbiAgICAvLyBzeW1ib2xzIHRoYXQgY29tYmluZWQgaGF2ZSBoaWdoIGZyZXEsIHdpbGwgc3RhcnQgcHJvY2Vzc2luZyBpMiAoaGlnaC1mcmVxLFxuICAgIC8vIG5vbi1jb21wb3NpdGUpIHN5bWJvbHMgaW5zdGVhZFxuICAgIC8vIHNlZSBodHRwczovL3JlZGRpdC5jb20vci9waG90b3BlYS9jb21tZW50cy9pa2VraHQvdXppcGpzX3F1ZXN0aW9ucy9cbiAgICB3aGlsZSAoaTEgIT0gcyAtIDEpIHtcbiAgICAgICAgbCA9IHRbdFtpMF0uZiA8IHRbaTJdLmYgPyBpMCsrIDogaTIrK107XG4gICAgICAgIHIgPSB0W2kwICE9IGkxICYmIHRbaTBdLmYgPCB0W2kyXS5mID8gaTArKyA6IGkyKytdO1xuICAgICAgICB0W2kxKytdID0geyBzOiAtMSwgZjogbC5mICsgci5mLCBsOiBsLCByOiByIH07XG4gICAgfVxuICAgIHZhciBtYXhTeW0gPSB0MlswXS5zO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgczsgKytpKSB7XG4gICAgICAgIGlmICh0MltpXS5zID4gbWF4U3ltKVxuICAgICAgICAgICAgbWF4U3ltID0gdDJbaV0ucztcbiAgICB9XG4gICAgLy8gY29kZSBsZW5ndGhzXG4gICAgdmFyIHRyID0gbmV3IHUxNihtYXhTeW0gKyAxKTtcbiAgICAvLyBtYXggYml0cyBpbiB0cmVlXG4gICAgdmFyIG1idCA9IGxuKHRbaTEgLSAxXSwgdHIsIDApO1xuICAgIGlmIChtYnQgPiBtYikge1xuICAgICAgICAvLyBtb3JlIGFsZ29yaXRobXMgZnJvbSBVWklQLmpzXG4gICAgICAgIC8vIFRPRE86IGZpbmQgb3V0IGhvdyB0aGlzIGNvZGUgd29ya3MgKGRlYnQpXG4gICAgICAgIC8vICBpbmQgICAgZGVidFxuICAgICAgICB2YXIgaSA9IDAsIGR0ID0gMDtcbiAgICAgICAgLy8gICAgbGVmdCAgICAgICAgICAgIGNvc3RcbiAgICAgICAgdmFyIGxmdCA9IG1idCAtIG1iLCBjc3QgPSAxIDw8IGxmdDtcbiAgICAgICAgdDIuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdHJbYi5zXSAtIHRyW2Euc10gfHwgYS5mIC0gYi5mOyB9KTtcbiAgICAgICAgZm9yICg7IGkgPCBzOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBpMl8xID0gdDJbaV0ucztcbiAgICAgICAgICAgIGlmICh0cltpMl8xXSA+IG1iKSB7XG4gICAgICAgICAgICAgICAgZHQgKz0gY3N0IC0gKDEgPDwgKG1idCAtIHRyW2kyXzFdKSk7XG4gICAgICAgICAgICAgICAgdHJbaTJfMV0gPSBtYjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkdCA+Pj0gbGZ0O1xuICAgICAgICB3aGlsZSAoZHQgPiAwKSB7XG4gICAgICAgICAgICB2YXIgaTJfMiA9IHQyW2ldLnM7XG4gICAgICAgICAgICBpZiAodHJbaTJfMl0gPCBtYilcbiAgICAgICAgICAgICAgICBkdCAtPSAxIDw8IChtYiAtIHRyW2kyXzJdKysgLSAxKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICArK2k7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICg7IGkgPj0gMCAmJiBkdDsgLS1pKSB7XG4gICAgICAgICAgICB2YXIgaTJfMyA9IHQyW2ldLnM7XG4gICAgICAgICAgICBpZiAodHJbaTJfM10gPT0gbWIpIHtcbiAgICAgICAgICAgICAgICAtLXRyW2kyXzNdO1xuICAgICAgICAgICAgICAgICsrZHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWJ0ID0gbWI7XG4gICAgfVxuICAgIHJldHVybiB7IHQ6IG5ldyB1OCh0ciksIGw6IG1idCB9O1xufTtcbi8vIGdldCB0aGUgbWF4IGxlbmd0aCBhbmQgYXNzaWduIGxlbmd0aCBjb2Rlc1xudmFyIGxuID0gZnVuY3Rpb24gKG4sIGwsIGQpIHtcbiAgICByZXR1cm4gbi5zID09IC0xXG4gICAgICAgID8gTWF0aC5tYXgobG4obi5sLCBsLCBkICsgMSksIGxuKG4uciwgbCwgZCArIDEpKVxuICAgICAgICA6IChsW24uc10gPSBkKTtcbn07XG4vLyBsZW5ndGggY29kZXMgZ2VuZXJhdGlvblxudmFyIGxjID0gZnVuY3Rpb24gKGMpIHtcbiAgICB2YXIgcyA9IGMubGVuZ3RoO1xuICAgIC8vIE5vdGUgdGhhdCB0aGUgc2VtaWNvbG9uIHdhcyBpbnRlbnRpb25hbFxuICAgIHdoaWxlIChzICYmICFjWy0tc10pXG4gICAgICAgIDtcbiAgICB2YXIgY2wgPSBuZXcgdTE2KCsrcyk7XG4gICAgLy8gIGluZCAgICAgIG51bSAgICAgICAgIHN0cmVha1xuICAgIHZhciBjbGkgPSAwLCBjbG4gPSBjWzBdLCBjbHMgPSAxO1xuICAgIHZhciB3ID0gZnVuY3Rpb24gKHYpIHsgY2xbY2xpKytdID0gdjsgfTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBzOyArK2kpIHtcbiAgICAgICAgaWYgKGNbaV0gPT0gY2xuICYmIGkgIT0gcylcbiAgICAgICAgICAgICsrY2xzO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghY2xuICYmIGNscyA+IDIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKDsgY2xzID4gMTM4OyBjbHMgLT0gMTM4KVxuICAgICAgICAgICAgICAgICAgICB3KDMyNzU0KTtcbiAgICAgICAgICAgICAgICBpZiAoY2xzID4gMikge1xuICAgICAgICAgICAgICAgICAgICB3KGNscyA+IDEwID8gKChjbHMgLSAxMSkgPDwgNSkgfCAyODY5MCA6ICgoY2xzIC0gMykgPDwgNSkgfCAxMjMwNSk7XG4gICAgICAgICAgICAgICAgICAgIGNscyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2xzID4gMykge1xuICAgICAgICAgICAgICAgIHcoY2xuKSwgLS1jbHM7XG4gICAgICAgICAgICAgICAgZm9yICg7IGNscyA+IDY7IGNscyAtPSA2KVxuICAgICAgICAgICAgICAgICAgICB3KDgzMDQpO1xuICAgICAgICAgICAgICAgIGlmIChjbHMgPiAyKVxuICAgICAgICAgICAgICAgICAgICB3KCgoY2xzIC0gMykgPDwgNSkgfCA4MjA4KSwgY2xzID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjbHMtLSlcbiAgICAgICAgICAgICAgICB3KGNsbik7XG4gICAgICAgICAgICBjbHMgPSAxO1xuICAgICAgICAgICAgY2xuID0gY1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBjOiBjbC5zdWJhcnJheSgwLCBjbGkpLCBuOiBzIH07XG59O1xuLy8gY2FsY3VsYXRlIHRoZSBsZW5ndGggb2Ygb3V0cHV0IGZyb20gdHJlZSwgY29kZSBsZW5ndGhzXG52YXIgY2xlbiA9IGZ1bmN0aW9uIChjZiwgY2wpIHtcbiAgICB2YXIgbCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbC5sZW5ndGg7ICsraSlcbiAgICAgICAgbCArPSBjZltpXSAqIGNsW2ldO1xuICAgIHJldHVybiBsO1xufTtcbi8vIHdyaXRlcyBhIGZpeGVkIGJsb2NrXG4vLyByZXR1cm5zIHRoZSBuZXcgYml0IHBvc1xudmFyIHdmYmxrID0gZnVuY3Rpb24gKG91dCwgcG9zLCBkYXQpIHtcbiAgICAvLyBubyBuZWVkIHRvIHdyaXRlIDAwIGFzIHR5cGU6IFR5cGVkQXJyYXkgZGVmYXVsdHMgdG8gMFxuICAgIHZhciBzID0gZGF0Lmxlbmd0aDtcbiAgICB2YXIgbyA9IHNoZnQocG9zICsgMik7XG4gICAgb3V0W29dID0gcyAmIDI1NTtcbiAgICBvdXRbbyArIDFdID0gcyA+PiA4O1xuICAgIG91dFtvICsgMl0gPSBvdXRbb10gXiAyNTU7XG4gICAgb3V0W28gKyAzXSA9IG91dFtvICsgMV0gXiAyNTU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyArK2kpXG4gICAgICAgIG91dFtvICsgaSArIDRdID0gZGF0W2ldO1xuICAgIHJldHVybiAobyArIDQgKyBzKSAqIDg7XG59O1xuLy8gd3JpdGVzIGEgYmxvY2tcbnZhciB3YmxrID0gZnVuY3Rpb24gKGRhdCwgb3V0LCBmaW5hbCwgc3ltcywgbGYsIGRmLCBlYiwgbGksIGJzLCBibCwgcCkge1xuICAgIHdiaXRzKG91dCwgcCsrLCBmaW5hbCk7XG4gICAgKytsZlsyNTZdO1xuICAgIHZhciBfYSA9IGhUcmVlKGxmLCAxNSksIGRsdCA9IF9hLnQsIG1sYiA9IF9hLmw7XG4gICAgdmFyIF9iID0gaFRyZWUoZGYsIDE1KSwgZGR0ID0gX2IudCwgbWRiID0gX2IubDtcbiAgICB2YXIgX2MgPSBsYyhkbHQpLCBsY2x0ID0gX2MuYywgbmxjID0gX2MubjtcbiAgICB2YXIgX2QgPSBsYyhkZHQpLCBsY2R0ID0gX2QuYywgbmRjID0gX2QubjtcbiAgICB2YXIgbGNmcmVxID0gbmV3IHUxNigxOSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsY2x0Lmxlbmd0aDsgKytpKVxuICAgICAgICArK2xjZnJlcVtsY2x0W2ldICYgMzFdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGNkdC5sZW5ndGg7ICsraSlcbiAgICAgICAgKytsY2ZyZXFbbGNkdFtpXSAmIDMxXTtcbiAgICB2YXIgX2UgPSBoVHJlZShsY2ZyZXEsIDcpLCBsY3QgPSBfZS50LCBtbGNiID0gX2UubDtcbiAgICB2YXIgbmxjYyA9IDE5O1xuICAgIGZvciAoOyBubGNjID4gNCAmJiAhbGN0W2NsaW1bbmxjYyAtIDFdXTsgLS1ubGNjKVxuICAgICAgICA7XG4gICAgdmFyIGZsZW4gPSAoYmwgKyA1KSA8PCAzO1xuICAgIHZhciBmdGxlbiA9IGNsZW4obGYsIGZsdCkgKyBjbGVuKGRmLCBmZHQpICsgZWI7XG4gICAgdmFyIGR0bGVuID0gY2xlbihsZiwgZGx0KSArIGNsZW4oZGYsIGRkdCkgKyBlYiArIDE0ICsgMyAqIG5sY2MgKyBjbGVuKGxjZnJlcSwgbGN0KSArIDIgKiBsY2ZyZXFbMTZdICsgMyAqIGxjZnJlcVsxN10gKyA3ICogbGNmcmVxWzE4XTtcbiAgICBpZiAoYnMgPj0gMCAmJiBmbGVuIDw9IGZ0bGVuICYmIGZsZW4gPD0gZHRsZW4pXG4gICAgICAgIHJldHVybiB3ZmJsayhvdXQsIHAsIGRhdC5zdWJhcnJheShicywgYnMgKyBibCkpO1xuICAgIHZhciBsbSwgbGwsIGRtLCBkbDtcbiAgICB3Yml0cyhvdXQsIHAsIDEgKyAoZHRsZW4gPCBmdGxlbikpLCBwICs9IDI7XG4gICAgaWYgKGR0bGVuIDwgZnRsZW4pIHtcbiAgICAgICAgbG0gPSBoTWFwKGRsdCwgbWxiLCAwKSwgbGwgPSBkbHQsIGRtID0gaE1hcChkZHQsIG1kYiwgMCksIGRsID0gZGR0O1xuICAgICAgICB2YXIgbGxtID0gaE1hcChsY3QsIG1sY2IsIDApO1xuICAgICAgICB3Yml0cyhvdXQsIHAsIG5sYyAtIDI1Nyk7XG4gICAgICAgIHdiaXRzKG91dCwgcCArIDUsIG5kYyAtIDEpO1xuICAgICAgICB3Yml0cyhvdXQsIHAgKyAxMCwgbmxjYyAtIDQpO1xuICAgICAgICBwICs9IDE0O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5sY2M7ICsraSlcbiAgICAgICAgICAgIHdiaXRzKG91dCwgcCArIDMgKiBpLCBsY3RbY2xpbVtpXV0pO1xuICAgICAgICBwICs9IDMgKiBubGNjO1xuICAgICAgICB2YXIgbGN0cyA9IFtsY2x0LCBsY2R0XTtcbiAgICAgICAgZm9yICh2YXIgaXQgPSAwOyBpdCA8IDI7ICsraXQpIHtcbiAgICAgICAgICAgIHZhciBjbGN0ID0gbGN0c1tpdF07XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsY3QubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGVuID0gY2xjdFtpXSAmIDMxO1xuICAgICAgICAgICAgICAgIHdiaXRzKG91dCwgcCwgbGxtW2xlbl0pLCBwICs9IGxjdFtsZW5dO1xuICAgICAgICAgICAgICAgIGlmIChsZW4gPiAxNSlcbiAgICAgICAgICAgICAgICAgICAgd2JpdHMob3V0LCBwLCAoY2xjdFtpXSA+PiA1KSAmIDEyNyksIHAgKz0gY2xjdFtpXSA+PiAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbG0gPSBmbG0sIGxsID0gZmx0LCBkbSA9IGZkbSwgZGwgPSBmZHQ7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGk7ICsraSkge1xuICAgICAgICB2YXIgc3ltID0gc3ltc1tpXTtcbiAgICAgICAgaWYgKHN5bSA+IDI1NSkge1xuICAgICAgICAgICAgdmFyIGxlbiA9IChzeW0gPj4gMTgpICYgMzE7XG4gICAgICAgICAgICB3Yml0czE2KG91dCwgcCwgbG1bbGVuICsgMjU3XSksIHAgKz0gbGxbbGVuICsgMjU3XTtcbiAgICAgICAgICAgIGlmIChsZW4gPiA3KVxuICAgICAgICAgICAgICAgIHdiaXRzKG91dCwgcCwgKHN5bSA+PiAyMykgJiAzMSksIHAgKz0gZmxlYltsZW5dO1xuICAgICAgICAgICAgdmFyIGRzdCA9IHN5bSAmIDMxO1xuICAgICAgICAgICAgd2JpdHMxNihvdXQsIHAsIGRtW2RzdF0pLCBwICs9IGRsW2RzdF07XG4gICAgICAgICAgICBpZiAoZHN0ID4gMylcbiAgICAgICAgICAgICAgICB3Yml0czE2KG91dCwgcCwgKHN5bSA+PiA1KSAmIDgxOTEpLCBwICs9IGZkZWJbZHN0XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHdiaXRzMTYob3V0LCBwLCBsbVtzeW1dKSwgcCArPSBsbFtzeW1dO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdiaXRzMTYob3V0LCBwLCBsbVsyNTZdKTtcbiAgICByZXR1cm4gcCArIGxsWzI1Nl07XG59O1xuLy8gZGVmbGF0ZSBvcHRpb25zIChuaWNlIDw8IDEzKSB8IGNoYWluXG52YXIgZGVvID0gLyojX19QVVJFX18qLyBuZXcgaTMyKFs2NTU0MCwgMTMxMDgwLCAxMzEwODgsIDEzMTEwNCwgMjYyMTc2LCAxMDQ4NzA0LCAxMDQ4ODMyLCAyMTE0NTYwLCAyMTE3NjMyXSk7XG4vLyBlbXB0eVxudmFyIGV0ID0gLyojX19QVVJFX18qLyBuZXcgdTgoMCk7XG4vLyBjb21wcmVzc2VzIGRhdGEgaW50byBhIHJhdyBERUZMQVRFIGJ1ZmZlclxudmFyIGRmbHQgPSBmdW5jdGlvbiAoZGF0LCBsdmwsIHBsdmwsIHByZSwgcG9zdCwgc3QpIHtcbiAgICB2YXIgcyA9IHN0LnogfHwgZGF0Lmxlbmd0aDtcbiAgICB2YXIgbyA9IG5ldyB1OChwcmUgKyBzICsgNSAqICgxICsgTWF0aC5jZWlsKHMgLyA3MDAwKSkgKyBwb3N0KTtcbiAgICAvLyB3cml0aW5nIHRvIHRoaXMgd3JpdGVzIHRvIHRoZSBvdXRwdXQgYnVmZmVyXG4gICAgdmFyIHcgPSBvLnN1YmFycmF5KHByZSwgby5sZW5ndGggLSBwb3N0KTtcbiAgICB2YXIgbHN0ID0gc3QubDtcbiAgICB2YXIgcG9zID0gKHN0LnIgfHwgMCkgJiA3O1xuICAgIGlmIChsdmwpIHtcbiAgICAgICAgaWYgKHBvcylcbiAgICAgICAgICAgIHdbMF0gPSBzdC5yID4+IDM7XG4gICAgICAgIHZhciBvcHQgPSBkZW9bbHZsIC0gMV07XG4gICAgICAgIHZhciBuID0gb3B0ID4+IDEzLCBjID0gb3B0ICYgODE5MTtcbiAgICAgICAgdmFyIG1za18xID0gKDEgPDwgcGx2bCkgLSAxO1xuICAgICAgICAvLyAgICBwcmV2IDItYnl0ZSB2YWwgbWFwICAgIGN1cnIgMi1ieXRlIHZhbCBtYXBcbiAgICAgICAgdmFyIHByZXYgPSBzdC5wIHx8IG5ldyB1MTYoMzI3NjgpLCBoZWFkID0gc3QuaCB8fCBuZXcgdTE2KG1za18xICsgMSk7XG4gICAgICAgIHZhciBiczFfMSA9IE1hdGguY2VpbChwbHZsIC8gMyksIGJzMl8xID0gMiAqIGJzMV8xO1xuICAgICAgICB2YXIgaHNoID0gZnVuY3Rpb24gKGkpIHsgcmV0dXJuIChkYXRbaV0gXiAoZGF0W2kgKyAxXSA8PCBiczFfMSkgXiAoZGF0W2kgKyAyXSA8PCBiczJfMSkpICYgbXNrXzE7IH07XG4gICAgICAgIC8vIDI0NTc2IGlzIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgbWF4aW11bSBzeW1ib2xzIHBlciBibG9ja1xuICAgICAgICAvLyA0MjQgYnVmZmVyIGZvciBsYXN0IGJsb2NrXG4gICAgICAgIHZhciBzeW1zID0gbmV3IGkzMigyNTAwMCk7XG4gICAgICAgIC8vIGxlbmd0aC9saXRlcmFsIGZyZXEgICBkaXN0YW5jZSBmcmVxXG4gICAgICAgIHZhciBsZiA9IG5ldyB1MTYoMjg4KSwgZGYgPSBuZXcgdTE2KDMyKTtcbiAgICAgICAgLy8gIGwvbGNudCAgZXhiaXRzICBpbmRleCAgICAgICAgICBsL2xpbmQgIHdhaXRkeCAgICAgICAgICBibGtwb3NcbiAgICAgICAgdmFyIGxjXzEgPSAwLCBlYiA9IDAsIGkgPSBzdC5pIHx8IDAsIGxpID0gMCwgd2kgPSBzdC53IHx8IDAsIGJzID0gMDtcbiAgICAgICAgZm9yICg7IGkgKyAyIDwgczsgKytpKSB7XG4gICAgICAgICAgICAvLyBoYXNoIHZhbHVlXG4gICAgICAgICAgICB2YXIgaHYgPSBoc2goaSk7XG4gICAgICAgICAgICAvLyBpbmRleCBtb2QgMzI3NjggICAgcHJldmlvdXMgaW5kZXggbW9kXG4gICAgICAgICAgICB2YXIgaW1vZCA9IGkgJiAzMjc2NywgcGltb2QgPSBoZWFkW2h2XTtcbiAgICAgICAgICAgIHByZXZbaW1vZF0gPSBwaW1vZDtcbiAgICAgICAgICAgIGhlYWRbaHZdID0gaW1vZDtcbiAgICAgICAgICAgIC8vIFdlIGFsd2F5cyBzaG91bGQgbW9kaWZ5IGhlYWQgYW5kIHByZXYsIGJ1dCBvbmx5IGFkZCBzeW1ib2xzIGlmXG4gICAgICAgICAgICAvLyB0aGlzIGRhdGEgaXMgbm90IHlldCBwcm9jZXNzZWQgKFwid2FpdFwiIGZvciB3YWl0IGluZGV4KVxuICAgICAgICAgICAgaWYgKHdpIDw9IGkpIHtcbiAgICAgICAgICAgICAgICAvLyBieXRlcyByZW1haW5pbmdcbiAgICAgICAgICAgICAgICB2YXIgcmVtID0gcyAtIGk7XG4gICAgICAgICAgICAgICAgaWYgKChsY18xID4gNzAwMCB8fCBsaSA+IDI0NTc2KSAmJiAocmVtID4gNDIzIHx8ICFsc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IHdibGsoZGF0LCB3LCAwLCBzeW1zLCBsZiwgZGYsIGViLCBsaSwgYnMsIGkgLSBicywgcG9zKTtcbiAgICAgICAgICAgICAgICAgICAgbGkgPSBsY18xID0gZWIgPSAwLCBicyA9IGk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMjg2OyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICBsZltqXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzA7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgIGRmW2pdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gIGxlbiAgICBkaXN0ICAgY2hhaW5cbiAgICAgICAgICAgICAgICB2YXIgbCA9IDIsIGQgPSAwLCBjaF8xID0gYywgZGlmID0gaW1vZCAtIHBpbW9kICYgMzI3Njc7XG4gICAgICAgICAgICAgICAgaWYgKHJlbSA+IDIgJiYgaHYgPT0gaHNoKGkgLSBkaWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXhuID0gTWF0aC5taW4obiwgcmVtKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXhkID0gTWF0aC5taW4oMzI3NjcsIGkpO1xuICAgICAgICAgICAgICAgICAgICAvLyBtYXggcG9zc2libGUgbGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vdCBjYXBwZWQgYXQgZGlmIGJlY2F1c2UgZGVjb21wcmVzc29ycyBpbXBsZW1lbnQgXCJyb2xsaW5nXCIgaW5kZXggcG9wdWxhdGlvblxuICAgICAgICAgICAgICAgICAgICB2YXIgbWwgPSBNYXRoLm1pbigyNTgsIHJlbSk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChkaWYgPD0gbWF4ZCAmJiAtLWNoXzEgJiYgaW1vZCAhPSBwaW1vZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdFtpICsgbF0gPT0gZGF0W2kgKyBsIC0gZGlmXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBubCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IG5sIDwgbWwgJiYgZGF0W2kgKyBubF0gPT0gZGF0W2kgKyBubCAtIGRpZl07ICsrbmwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmwgPiBsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBubCwgZCA9IGRpZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnJlYWsgb3V0IGVhcmx5IHdoZW4gd2UgcmVhY2ggXCJuaWNlXCIgKHdlIGFyZSBzYXRpc2ZpZWQgZW5vdWdoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmwgPiBtYXhuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdywgZmluZCB0aGUgcmFyZXN0IDItYnl0ZSBzZXF1ZW5jZSB3aXRoaW4gdGhpc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZW5ndGggb2YgbGl0ZXJhbHMgYW5kIHNlYXJjaCBmb3IgdGhhdCBpbnN0ZWFkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNdWNoIGZhc3RlciB0aGFuIGp1c3QgdXNpbmcgdGhlIHN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtbWQgPSBNYXRoLm1pbihkaWYsIG5sIC0gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbW1kOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aSA9IGkgLSBkaWYgKyBqICYgMzI3Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHRpID0gcHJldlt0aV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2QgPSB0aSAtIHB0aSAmIDMyNzY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNkID4gbWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWQgPSBjZCwgcGltb2QgPSB0aTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBwcmV2aW91cyBtYXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1vZCA9IHBpbW9kLCBwaW1vZCA9IHByZXZbaW1vZF07XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWYgKz0gaW1vZCAtIHBpbW9kICYgMzI3Njc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZCB3aWxsIGJlIG5vbnplcm8gb25seSB3aGVuIGEgbWF0Y2ggd2FzIGZvdW5kXG4gICAgICAgICAgICAgICAgaWYgKGQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmUgYm90aCBkaXN0IGFuZCBsZW4gZGF0YSBpbiBvbmUgaW50MzJcbiAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoaXMgaXMgcmVjb2duaXplZCBhcyBhIGxlbi9kaXN0IHdpdGggMjh0aCBiaXQgKDJeMjgpXG4gICAgICAgICAgICAgICAgICAgIHN5bXNbbGkrK10gPSAyNjg0MzU0NTYgfCAocmV2ZmxbbF0gPDwgMTgpIHwgcmV2ZmRbZF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW4gPSByZXZmbFtsXSAmIDMxLCBkaW4gPSByZXZmZFtkXSAmIDMxO1xuICAgICAgICAgICAgICAgICAgICBlYiArPSBmbGViW2xpbl0gKyBmZGViW2Rpbl07XG4gICAgICAgICAgICAgICAgICAgICsrbGZbMjU3ICsgbGluXTtcbiAgICAgICAgICAgICAgICAgICAgKytkZltkaW5dO1xuICAgICAgICAgICAgICAgICAgICB3aSA9IGkgKyBsO1xuICAgICAgICAgICAgICAgICAgICArK2xjXzE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzeW1zW2xpKytdID0gZGF0W2ldO1xuICAgICAgICAgICAgICAgICAgICArK2xmW2RhdFtpXV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IE1hdGgubWF4KGksIHdpKTsgaSA8IHM7ICsraSkge1xuICAgICAgICAgICAgc3ltc1tsaSsrXSA9IGRhdFtpXTtcbiAgICAgICAgICAgICsrbGZbZGF0W2ldXTtcbiAgICAgICAgfVxuICAgICAgICBwb3MgPSB3YmxrKGRhdCwgdywgbHN0LCBzeW1zLCBsZiwgZGYsIGViLCBsaSwgYnMsIGkgLSBicywgcG9zKTtcbiAgICAgICAgaWYgKCFsc3QpIHtcbiAgICAgICAgICAgIHN0LnIgPSAocG9zICYgNykgfCB3Wyhwb3MgLyA4KSB8IDBdIDw8IDM7XG4gICAgICAgICAgICAvLyBzaGZ0KHBvcykgbm93IDEgbGVzcyBpZiBwb3MgJiA3ICE9IDBcbiAgICAgICAgICAgIHBvcyAtPSA3O1xuICAgICAgICAgICAgc3QuaCA9IGhlYWQsIHN0LnAgPSBwcmV2LCBzdC5pID0gaSwgc3QudyA9IHdpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gc3QudyB8fCAwOyBpIDwgcyArIGxzdDsgaSArPSA2NTUzNSkge1xuICAgICAgICAgICAgLy8gZW5kXG4gICAgICAgICAgICB2YXIgZSA9IGkgKyA2NTUzNTtcbiAgICAgICAgICAgIGlmIChlID49IHMpIHtcbiAgICAgICAgICAgICAgICAvLyB3cml0ZSBmaW5hbCBibG9ja1xuICAgICAgICAgICAgICAgIHdbKHBvcyAvIDgpIHwgMF0gPSBsc3Q7XG4gICAgICAgICAgICAgICAgZSA9IHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb3MgPSB3ZmJsayh3LCBwb3MgKyAxLCBkYXQuc3ViYXJyYXkoaSwgZSkpO1xuICAgICAgICB9XG4gICAgICAgIHN0LmkgPSBzO1xuICAgIH1cbiAgICByZXR1cm4gc2xjKG8sIDAsIHByZSArIHNoZnQocG9zKSArIHBvc3QpO1xufTtcbi8vIENSQzMyIHRhYmxlXG52YXIgY3JjdCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdCA9IG5ldyBJbnQzMkFycmF5KDI1Nik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICB2YXIgYyA9IGksIGsgPSA5O1xuICAgICAgICB3aGlsZSAoLS1rKVxuICAgICAgICAgICAgYyA9ICgoYyAmIDEpICYmIC0zMDY2NzQ5MTIpIF4gKGMgPj4+IDEpO1xuICAgICAgICB0W2ldID0gYztcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG59KSgpO1xuLy8gQ1JDMzJcbnZhciBjcmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGMgPSAtMTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwOiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgLy8gY2xvc3VyZXMgaGF2ZSBhd2Z1bCBwZXJmb3JtYW5jZVxuICAgICAgICAgICAgdmFyIGNyID0gYztcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZC5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICBjciA9IGNyY3RbKGNyICYgMjU1KSBeIGRbaV1dIF4gKGNyID4+PiA4KTtcbiAgICAgICAgICAgIGMgPSBjcjtcbiAgICAgICAgfSxcbiAgICAgICAgZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gfmM7IH1cbiAgICB9O1xufTtcbi8vIEFkbGVyMzJcbnZhciBhZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYSA9IDEsIGIgPSAwO1xuICAgIHJldHVybiB7XG4gICAgICAgIHA6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAvLyBjbG9zdXJlcyBoYXZlIGF3ZnVsIHBlcmZvcm1hbmNlXG4gICAgICAgICAgICB2YXIgbiA9IGEsIG0gPSBiO1xuICAgICAgICAgICAgdmFyIGwgPSBkLmxlbmd0aCB8IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSAhPSBsOykge1xuICAgICAgICAgICAgICAgIHZhciBlID0gTWF0aC5taW4oaSArIDI2NTUsIGwpO1xuICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgZTsgKytpKVxuICAgICAgICAgICAgICAgICAgICBtICs9IG4gKz0gZFtpXTtcbiAgICAgICAgICAgICAgICBuID0gKG4gJiA2NTUzNSkgKyAxNSAqIChuID4+IDE2KSwgbSA9IChtICYgNjU1MzUpICsgMTUgKiAobSA+PiAxNik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhID0gbiwgYiA9IG07XG4gICAgICAgIH0sXG4gICAgICAgIGQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGEgJT0gNjU1MjEsIGIgJT0gNjU1MjE7XG4gICAgICAgICAgICByZXR1cm4gKGEgJiAyNTUpIDw8IDI0IHwgKGEgJiAweEZGMDApIDw8IDggfCAoYiAmIDI1NSkgPDwgOCB8IChiID4+IDgpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG47XG4vLyBkZWZsYXRlIHdpdGggb3B0c1xudmFyIGRvcHQgPSBmdW5jdGlvbiAoZGF0LCBvcHQsIHByZSwgcG9zdCwgc3QpIHtcbiAgICBpZiAoIXN0KSB7XG4gICAgICAgIHN0ID0geyBsOiAxIH07XG4gICAgICAgIGlmIChvcHQuZGljdGlvbmFyeSkge1xuICAgICAgICAgICAgdmFyIGRpY3QgPSBvcHQuZGljdGlvbmFyeS5zdWJhcnJheSgtMzI3NjgpO1xuICAgICAgICAgICAgdmFyIG5ld0RhdCA9IG5ldyB1OChkaWN0Lmxlbmd0aCArIGRhdC5sZW5ndGgpO1xuICAgICAgICAgICAgbmV3RGF0LnNldChkaWN0KTtcbiAgICAgICAgICAgIG5ld0RhdC5zZXQoZGF0LCBkaWN0Lmxlbmd0aCk7XG4gICAgICAgICAgICBkYXQgPSBuZXdEYXQ7XG4gICAgICAgICAgICBzdC53ID0gZGljdC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRmbHQoZGF0LCBvcHQubGV2ZWwgPT0gbnVsbCA/IDYgOiBvcHQubGV2ZWwsIG9wdC5tZW0gPT0gbnVsbCA/IChzdC5sID8gTWF0aC5jZWlsKE1hdGgubWF4KDgsIE1hdGgubWluKDEzLCBNYXRoLmxvZyhkYXQubGVuZ3RoKSkpICogMS41KSA6IDIwKSA6ICgxMiArIG9wdC5tZW0pLCBwcmUsIHBvc3QsIHN0KTtcbn07XG4vLyBXYWxtYXJ0IG9iamVjdCBzcHJlYWRcbnZhciBtcmcgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBvID0ge307XG4gICAgZm9yICh2YXIgayBpbiBhKVxuICAgICAgICBvW2tdID0gYVtrXTtcbiAgICBmb3IgKHZhciBrIGluIGIpXG4gICAgICAgIG9ba10gPSBiW2tdO1xuICAgIHJldHVybiBvO1xufTtcbi8vIHdvcmtlciBjbG9uZVxuLy8gVGhpcyBpcyBwb3NzaWJseSB0aGUgY3Jhemllc3QgcGFydCBvZiB0aGUgZW50aXJlIGNvZGViYXNlLCBkZXNwaXRlIGhvdyBzaW1wbGUgaXQgbWF5IHNlZW0uXG4vLyBUaGUgb25seSBwYXJhbWV0ZXIgdG8gdGhpcyBmdW5jdGlvbiBpcyBhIGNsb3N1cmUgdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIHZhcmlhYmxlcyBvdXRzaWRlIG9mIHRoZSBmdW5jdGlvbiBzY29wZS5cbi8vIFdlJ3JlIGdvaW5nIHRvIHRyeSB0byBmaWd1cmUgb3V0IHRoZSB2YXJpYWJsZSBuYW1lcyB1c2VkIGluIHRoZSBjbG9zdXJlIGFzIHN0cmluZ3MgYmVjYXVzZSB0aGF0IGlzIGNydWNpYWwgZm9yIHdvcmtlcml6YXRpb24uXG4vLyBXZSB3aWxsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBvZiB0cnVlIHZhcmlhYmxlIG5hbWUgdG8gdmFsdWUgKGJhc2ljYWxseSwgdGhlIGN1cnJlbnQgc2NvcGUgYXMgYSBKUyBvYmplY3QpLlxuLy8gVGhlIHJlYXNvbiB3ZSBjYW4ndCBqdXN0IHVzZSB0aGUgb3JpZ2luYWwgdmFyaWFibGUgbmFtZXMgaXMgbWluaWZpZXJzIG1hbmdsaW5nIHRoZSB0b3BsZXZlbCBzY29wZS5cbi8vIFRoaXMgdG9vayBtZSB0aHJlZSB3ZWVrcyB0byBmaWd1cmUgb3V0IGhvdyB0byBkby5cbnZhciB3Y2xuID0gZnVuY3Rpb24gKGZuLCBmblN0ciwgdGQpIHtcbiAgICB2YXIgZHQgPSBmbigpO1xuICAgIHZhciBzdCA9IGZuLnRvU3RyaW5nKCk7XG4gICAgdmFyIGtzID0gc3Quc2xpY2Uoc3QuaW5kZXhPZignWycpICsgMSwgc3QubGFzdEluZGV4T2YoJ10nKSkucmVwbGFjZSgvXFxzKy9nLCAnJykuc3BsaXQoJywnKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGR0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciB2ID0gZHRbaV0sIGsgPSBrc1tpXTtcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGZuU3RyICs9ICc7JyArIGsgKyAnPSc7XG4gICAgICAgICAgICB2YXIgc3RfMSA9IHYudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmICh2LnByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAgIC8vIGZvciBnbG9iYWwgb2JqZWN0c1xuICAgICAgICAgICAgICAgIGlmIChzdF8xLmluZGV4T2YoJ1tuYXRpdmUgY29kZV0nKSAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3BJbmQgPSBzdF8xLmluZGV4T2YoJyAnLCA4KSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGZuU3RyICs9IHN0XzEuc2xpY2Uoc3BJbmQsIHN0XzEuaW5kZXhPZignKCcsIHNwSW5kKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmblN0ciArPSBzdF8xO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB0IGluIHYucHJvdG90eXBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZm5TdHIgKz0gJzsnICsgayArICcucHJvdG90eXBlLicgKyB0ICsgJz0nICsgdi5wcm90b3R5cGVbdF0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZm5TdHIgKz0gc3RfMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0ZFtrXSA9IHY7XG4gICAgfVxuICAgIHJldHVybiBmblN0cjtcbn07XG52YXIgY2ggPSBbXTtcbi8vIGNsb25lIGJ1ZnNcbnZhciBjYmZzID0gZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgdGwgPSBbXTtcbiAgICBmb3IgKHZhciBrIGluIHYpIHtcbiAgICAgICAgaWYgKHZba10uYnVmZmVyKSB7XG4gICAgICAgICAgICB0bC5wdXNoKCh2W2tdID0gbmV3IHZba10uY29uc3RydWN0b3IodltrXSkpLmJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRsO1xufTtcbi8vIHVzZSBhIHdvcmtlciB0byBleGVjdXRlIGNvZGVcbnZhciB3cmtyID0gZnVuY3Rpb24gKGZucywgaW5pdCwgaWQsIGNiKSB7XG4gICAgaWYgKCFjaFtpZF0pIHtcbiAgICAgICAgdmFyIGZuU3RyID0gJycsIHRkXzEgPSB7fSwgbSA9IGZucy5sZW5ndGggLSAxO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG07ICsraSlcbiAgICAgICAgICAgIGZuU3RyID0gd2NsbihmbnNbaV0sIGZuU3RyLCB0ZF8xKTtcbiAgICAgICAgY2hbaWRdID0geyBjOiB3Y2xuKGZuc1ttXSwgZm5TdHIsIHRkXzEpLCBlOiB0ZF8xIH07XG4gICAgfVxuICAgIHZhciB0ZCA9IG1yZyh7fSwgY2hbaWRdLmUpO1xuICAgIHJldHVybiB3ayhjaFtpZF0uYyArICc7b25tZXNzYWdlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgayBpbiBlLmRhdGEpc2VsZltrXT1lLmRhdGFba107b25tZXNzYWdlPScgKyBpbml0LnRvU3RyaW5nKCkgKyAnfScsIGlkLCB0ZCwgY2Jmcyh0ZCksIGNiKTtcbn07XG4vLyBiYXNlIGFzeW5jIGluZmxhdGUgZm5cbnZhciBiSW5mbHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbdTgsIHUxNiwgaTMyLCBmbGViLCBmZGViLCBjbGltLCBmbCwgZmQsIGZscm0sIGZkcm0sIHJldiwgZWMsIGhNYXAsIG1heCwgYml0cywgYml0czE2LCBzaGZ0LCBzbGMsIGVyciwgaW5mbHQsIGluZmxhdGVTeW5jLCBwYmYsIGdvcHRdOyB9O1xudmFyIGJEZmx0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW3U4LCB1MTYsIGkzMiwgZmxlYiwgZmRlYiwgY2xpbSwgcmV2ZmwsIHJldmZkLCBmbG0sIGZsdCwgZmRtLCBmZHQsIHJldiwgZGVvLCBldCwgaE1hcCwgd2JpdHMsIHdiaXRzMTYsIGhUcmVlLCBsbiwgbGMsIGNsZW4sIHdmYmxrLCB3YmxrLCBzaGZ0LCBzbGMsIGRmbHQsIGRvcHQsIGRlZmxhdGVTeW5jLCBwYmZdOyB9O1xuLy8gZ3ppcCBleHRyYVxudmFyIGd6ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtnemgsIGd6aGwsIHdieXRlcywgY3JjLCBjcmN0XTsgfTtcbi8vIGd1bnppcCBleHRyYVxudmFyIGd1emUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbZ3pzLCBnemxdOyB9O1xuLy8gemxpYiBleHRyYVxudmFyIHpsZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFt6bGgsIHdieXRlcywgYWRsZXJdOyB9O1xuLy8gdW56bGliIGV4dHJhXG52YXIgenVsZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFt6bHNdOyB9O1xuLy8gcG9zdCBidWZcbnZhciBwYmYgPSBmdW5jdGlvbiAobXNnKSB7IHJldHVybiBwb3N0TWVzc2FnZShtc2csIFttc2cuYnVmZmVyXSk7IH07XG4vLyBnZXQgb3B0c1xudmFyIGdvcHQgPSBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiB7XG4gICAgb3V0OiBvLnNpemUgJiYgbmV3IHU4KG8uc2l6ZSksXG4gICAgZGljdGlvbmFyeTogby5kaWN0aW9uYXJ5XG59OyB9O1xuLy8gYXN5bmMgaGVscGVyXG52YXIgY2JpZnkgPSBmdW5jdGlvbiAoZGF0LCBvcHRzLCBmbnMsIGluaXQsIGlkLCBjYikge1xuICAgIHZhciB3ID0gd3JrcihmbnMsIGluaXQsIGlkLCBmdW5jdGlvbiAoZXJyLCBkYXQpIHtcbiAgICAgICAgdy50ZXJtaW5hdGUoKTtcbiAgICAgICAgY2IoZXJyLCBkYXQpO1xuICAgIH0pO1xuICAgIHcucG9zdE1lc3NhZ2UoW2RhdCwgb3B0c10sIG9wdHMuY29uc3VtZSA/IFtkYXQuYnVmZmVyXSA6IFtdKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyB3LnRlcm1pbmF0ZSgpOyB9O1xufTtcbi8vIGF1dG8gc3RyZWFtXG52YXIgYXN0cm0gPSBmdW5jdGlvbiAoc3RybSkge1xuICAgIHN0cm0ub25kYXRhID0gZnVuY3Rpb24gKGRhdCwgZmluYWwpIHsgcmV0dXJuIHBvc3RNZXNzYWdlKFtkYXQsIGZpbmFsXSwgW2RhdC5idWZmZXJdKTsgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIGlmIChldi5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgc3RybS5wdXNoKGV2LmRhdGFbMF0sIGV2LmRhdGFbMV0pO1xuICAgICAgICAgICAgcG9zdE1lc3NhZ2UoW2V2LmRhdGFbMF0ubGVuZ3RoXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3RybS5mbHVzaCgpO1xuICAgIH07XG59O1xuLy8gYXN5bmMgc3RyZWFtIGF0dGFjaFxudmFyIGFzdHJtaWZ5ID0gZnVuY3Rpb24gKGZucywgc3RybSwgb3B0cywgaW5pdCwgaWQsIGZsdXNoLCBleHQpIHtcbiAgICB2YXIgdDtcbiAgICB2YXIgdyA9IHdya3IoZm5zLCBpbml0LCBpZCwgZnVuY3Rpb24gKGVyciwgZGF0KSB7XG4gICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgICB3LnRlcm1pbmF0ZSgpLCBzdHJtLm9uZGF0YS5jYWxsKHN0cm0sIGVycik7XG4gICAgICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGRhdCkpXG4gICAgICAgICAgICBleHQoZGF0KTtcbiAgICAgICAgZWxzZSBpZiAoZGF0Lmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICBzdHJtLnF1ZXVlZFNpemUgLT0gZGF0WzBdO1xuICAgICAgICAgICAgaWYgKHN0cm0ub25kcmFpbilcbiAgICAgICAgICAgICAgICBzdHJtLm9uZHJhaW4oZGF0WzBdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkYXRbMV0pXG4gICAgICAgICAgICAgICAgdy50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIHN0cm0ub25kYXRhLmNhbGwoc3RybSwgZXJyLCBkYXRbMF0sIGRhdFsxXSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICB3LnBvc3RNZXNzYWdlKG9wdHMpO1xuICAgIHN0cm0ucXVldWVkU2l6ZSA9IDA7XG4gICAgc3RybS5wdXNoID0gZnVuY3Rpb24gKGQsIGYpIHtcbiAgICAgICAgaWYgKCFzdHJtLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgaWYgKHQpXG4gICAgICAgICAgICBzdHJtLm9uZGF0YShlcnIoNCwgMCwgMSksIG51bGwsICEhZik7XG4gICAgICAgIHN0cm0ucXVldWVkU2l6ZSArPSBkLmxlbmd0aDtcbiAgICAgICAgdy5wb3N0TWVzc2FnZShbZCwgdCA9IGZdLCBbZC5idWZmZXJdKTtcbiAgICB9O1xuICAgIHN0cm0udGVybWluYXRlID0gZnVuY3Rpb24gKCkgeyB3LnRlcm1pbmF0ZSgpOyB9O1xuICAgIGlmIChmbHVzaCkge1xuICAgICAgICBzdHJtLmZsdXNoID0gZnVuY3Rpb24gKCkgeyB3LnBvc3RNZXNzYWdlKFtdKTsgfTtcbiAgICB9XG59O1xuLy8gcmVhZCAyIGJ5dGVzXG52YXIgYjIgPSBmdW5jdGlvbiAoZCwgYikgeyByZXR1cm4gZFtiXSB8IChkW2IgKyAxXSA8PCA4KTsgfTtcbi8vIHJlYWQgNCBieXRlc1xudmFyIGI0ID0gZnVuY3Rpb24gKGQsIGIpIHsgcmV0dXJuIChkW2JdIHwgKGRbYiArIDFdIDw8IDgpIHwgKGRbYiArIDJdIDw8IDE2KSB8IChkW2IgKyAzXSA8PCAyNCkpID4+PiAwOyB9O1xudmFyIGI4ID0gZnVuY3Rpb24gKGQsIGIpIHsgcmV0dXJuIGI0KGQsIGIpICsgKGI0KGQsIGIgKyA0KSAqIDQyOTQ5NjcyOTYpOyB9O1xuLy8gd3JpdGUgYnl0ZXNcbnZhciB3Ynl0ZXMgPSBmdW5jdGlvbiAoZCwgYiwgdikge1xuICAgIGZvciAoOyB2OyArK2IpXG4gICAgICAgIGRbYl0gPSB2LCB2ID4+Pj0gODtcbn07XG4vLyBnemlwIGhlYWRlclxudmFyIGd6aCA9IGZ1bmN0aW9uIChjLCBvKSB7XG4gICAgdmFyIGZuID0gby5maWxlbmFtZTtcbiAgICBjWzBdID0gMzEsIGNbMV0gPSAxMzksIGNbMl0gPSA4LCBjWzhdID0gby5sZXZlbCA8IDIgPyA0IDogby5sZXZlbCA9PSA5ID8gMiA6IDAsIGNbOV0gPSAzOyAvLyBhc3N1bWUgVW5peFxuICAgIGlmIChvLm10aW1lICE9IDApXG4gICAgICAgIHdieXRlcyhjLCA0LCBNYXRoLmZsb29yKG5ldyBEYXRlKG8ubXRpbWUgfHwgRGF0ZS5ub3coKSkgLyAxMDAwKSk7XG4gICAgaWYgKGZuKSB7XG4gICAgICAgIGNbM10gPSA4O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBmbi5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGNbaSArIDEwXSA9IGZuLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxufTtcbi8vIGd6aXAgZm9vdGVyOiAtOCB0byAtNCA9IENSQywgLTQgdG8gLTAgaXMgbGVuZ3RoXG4vLyBnemlwIHN0YXJ0XG52YXIgZ3pzID0gZnVuY3Rpb24gKGQpIHtcbiAgICBpZiAoZFswXSAhPSAzMSB8fCBkWzFdICE9IDEzOSB8fCBkWzJdICE9IDgpXG4gICAgICAgIGVycig2LCAnaW52YWxpZCBnemlwIGRhdGEnKTtcbiAgICB2YXIgZmxnID0gZFszXTtcbiAgICB2YXIgc3QgPSAxMDtcbiAgICBpZiAoZmxnICYgNClcbiAgICAgICAgc3QgKz0gKGRbMTBdIHwgZFsxMV0gPDwgOCkgKyAyO1xuICAgIGZvciAodmFyIHpzID0gKGZsZyA+PiAzICYgMSkgKyAoZmxnID4+IDQgJiAxKTsgenMgPiAwOyB6cyAtPSAhZFtzdCsrXSlcbiAgICAgICAgO1xuICAgIHJldHVybiBzdCArIChmbGcgJiAyKTtcbn07XG4vLyBnemlwIGxlbmd0aFxudmFyIGd6bCA9IGZ1bmN0aW9uIChkKSB7XG4gICAgdmFyIGwgPSBkLmxlbmd0aDtcbiAgICByZXR1cm4gKGRbbCAtIDRdIHwgZFtsIC0gM10gPDwgOCB8IGRbbCAtIDJdIDw8IDE2IHwgZFtsIC0gMV0gPDwgMjQpID4+PiAwO1xufTtcbi8vIGd6aXAgaGVhZGVyIGxlbmd0aFxudmFyIGd6aGwgPSBmdW5jdGlvbiAobykgeyByZXR1cm4gMTAgKyAoby5maWxlbmFtZSA/IG8uZmlsZW5hbWUubGVuZ3RoICsgMSA6IDApOyB9O1xuLy8gemxpYiBoZWFkZXJcbnZhciB6bGggPSBmdW5jdGlvbiAoYywgbykge1xuICAgIHZhciBsdiA9IG8ubGV2ZWwsIGZsID0gbHYgPT0gMCA/IDAgOiBsdiA8IDYgPyAxIDogbHYgPT0gOSA/IDMgOiAyO1xuICAgIGNbMF0gPSAxMjAsIGNbMV0gPSAoZmwgPDwgNikgfCAoby5kaWN0aW9uYXJ5ICYmIDMyKTtcbiAgICBjWzFdIHw9IDMxIC0gKChjWzBdIDw8IDgpIHwgY1sxXSkgJSAzMTtcbiAgICBpZiAoby5kaWN0aW9uYXJ5KSB7XG4gICAgICAgIHZhciBoID0gYWRsZXIoKTtcbiAgICAgICAgaC5wKG8uZGljdGlvbmFyeSk7XG4gICAgICAgIHdieXRlcyhjLCAyLCBoLmQoKSk7XG4gICAgfVxufTtcbi8vIHpsaWIgc3RhcnRcbnZhciB6bHMgPSBmdW5jdGlvbiAoZCwgZGljdCkge1xuICAgIGlmICgoZFswXSAmIDE1KSAhPSA4IHx8IChkWzBdID4+IDQpID4gNyB8fCAoKGRbMF0gPDwgOCB8IGRbMV0pICUgMzEpKVxuICAgICAgICBlcnIoNiwgJ2ludmFsaWQgemxpYiBkYXRhJyk7XG4gICAgaWYgKChkWzFdID4+IDUgJiAxKSA9PSArIWRpY3QpXG4gICAgICAgIGVycig2LCAnaW52YWxpZCB6bGliIGRhdGE6ICcgKyAoZFsxXSAmIDMyID8gJ25lZWQnIDogJ3VuZXhwZWN0ZWQnKSArICcgZGljdGlvbmFyeScpO1xuICAgIHJldHVybiAoZFsxXSA+PiAzICYgNCkgKyAyO1xufTtcbmZ1bmN0aW9uIFN0cm1PcHQob3B0cywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgdGhpcy5vbmRhdGEgPSBjYjtcbiAgICByZXR1cm4gb3B0cztcbn1cbi8qKlxuICogU3RyZWFtaW5nIERFRkxBVEUgY29tcHJlc3Npb25cbiAqL1xudmFyIERlZmxhdGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGVmbGF0ZShvcHRzLCBjYikge1xuICAgICAgICBpZiAodHlwZW9mIG9wdHMgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiID0gb3B0cywgb3B0cyA9IHt9O1xuICAgICAgICB0aGlzLm9uZGF0YSA9IGNiO1xuICAgICAgICB0aGlzLm8gPSBvcHRzIHx8IHt9O1xuICAgICAgICB0aGlzLnMgPSB7IGw6IDAsIGk6IDMyNzY4LCB3OiAzMjc2OCwgejogMzI3NjggfTtcbiAgICAgICAgLy8gQnVmZmVyIGxlbmd0aCBtdXN0IGFsd2F5cyBiZSAwIG1vZCAzMjc2OCBmb3IgaW5kZXggY2FsY3VsYXRpb25zIHRvIGJlIGNvcnJlY3Qgd2hlbiBtb2RpZnlpbmcgaGVhZCBhbmQgcHJldlxuICAgICAgICAvLyA5ODMwNCA9IDMyNzY4IChsb29rYmFjaykgKyA2NTUzNiAoY29tbW9uIGNodW5rIHNpemUpXG4gICAgICAgIHRoaXMuYiA9IG5ldyB1OCg5ODMwNCk7XG4gICAgICAgIGlmICh0aGlzLm8uZGljdGlvbmFyeSkge1xuICAgICAgICAgICAgdmFyIGRpY3QgPSB0aGlzLm8uZGljdGlvbmFyeS5zdWJhcnJheSgtMzI3NjgpO1xuICAgICAgICAgICAgdGhpcy5iLnNldChkaWN0LCAzMjc2OCAtIGRpY3QubGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMucy5pID0gMzI3NjggLSBkaWN0Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBEZWZsYXRlLnByb3RvdHlwZS5wID0gZnVuY3Rpb24gKGMsIGYpIHtcbiAgICAgICAgdGhpcy5vbmRhdGEoZG9wdChjLCB0aGlzLm8sIDAsIDAsIHRoaXMucyksIGYpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgZGVmbGF0ZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgRGVmbGF0ZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgaWYgKHRoaXMucy5sKVxuICAgICAgICAgICAgZXJyKDQpO1xuICAgICAgICB2YXIgZW5kTGVuID0gY2h1bmsubGVuZ3RoICsgdGhpcy5zLno7XG4gICAgICAgIGlmIChlbmRMZW4gPiB0aGlzLmIubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoZW5kTGVuID4gMiAqIHRoaXMuYi5sZW5ndGggLSAzMjc2OCkge1xuICAgICAgICAgICAgICAgIHZhciBuZXdCdWYgPSBuZXcgdTgoZW5kTGVuICYgLTMyNzY4KTtcbiAgICAgICAgICAgICAgICBuZXdCdWYuc2V0KHRoaXMuYi5zdWJhcnJheSgwLCB0aGlzLnMueikpO1xuICAgICAgICAgICAgICAgIHRoaXMuYiA9IG5ld0J1ZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzcGxpdCA9IHRoaXMuYi5sZW5ndGggLSB0aGlzLnMuejtcbiAgICAgICAgICAgIHRoaXMuYi5zZXQoY2h1bmsuc3ViYXJyYXkoMCwgc3BsaXQpLCB0aGlzLnMueik7XG4gICAgICAgICAgICB0aGlzLnMueiA9IHRoaXMuYi5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnAodGhpcy5iLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmIuc2V0KHRoaXMuYi5zdWJhcnJheSgtMzI3NjgpKTtcbiAgICAgICAgICAgIHRoaXMuYi5zZXQoY2h1bmsuc3ViYXJyYXkoc3BsaXQpLCAzMjc2OCk7XG4gICAgICAgICAgICB0aGlzLnMueiA9IGNodW5rLmxlbmd0aCAtIHNwbGl0ICsgMzI3Njg7XG4gICAgICAgICAgICB0aGlzLnMuaSA9IDMyNzY2LCB0aGlzLnMudyA9IDMyNzY4O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5iLnNldChjaHVuaywgdGhpcy5zLnopO1xuICAgICAgICAgICAgdGhpcy5zLnogKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucy5sID0gZmluYWwgJiAxO1xuICAgICAgICBpZiAodGhpcy5zLnogPiB0aGlzLnMudyArIDgxOTEgfHwgZmluYWwpIHtcbiAgICAgICAgICAgIHRoaXMucCh0aGlzLmIsIGZpbmFsIHx8IGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMucy53ID0gdGhpcy5zLmksIHRoaXMucy5pIC09IDI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEZsdXNoZXMgYnVmZmVyZWQgdW5jb21wcmVzc2VkIGRhdGEuIFVzZWZ1bCB0byBpbW1lZGlhdGVseSByZXRyaWV2ZSB0aGVcbiAgICAgKiBkZWZsYXRlZCBvdXRwdXQgZm9yIHNtYWxsIGlucHV0cy5cbiAgICAgKi9cbiAgICBEZWZsYXRlLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgaWYgKHRoaXMucy5sKVxuICAgICAgICAgICAgZXJyKDQpO1xuICAgICAgICB0aGlzLnAodGhpcy5iLCBmYWxzZSk7XG4gICAgICAgIHRoaXMucy53ID0gdGhpcy5zLmksIHRoaXMucy5pIC09IDI7XG4gICAgfTtcbiAgICByZXR1cm4gRGVmbGF0ZTtcbn0oKSk7XG5leHBvcnQgeyBEZWZsYXRlIH07XG4vKipcbiAqIEFzeW5jaHJvbm91cyBzdHJlYW1pbmcgREVGTEFURSBjb21wcmVzc2lvblxuICovXG52YXIgQXN5bmNEZWZsYXRlID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFzeW5jRGVmbGF0ZShvcHRzLCBjYikge1xuICAgICAgICBhc3RybWlmeShbXG4gICAgICAgICAgICBiRGZsdCxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFthc3RybSwgRGVmbGF0ZV07IH1cbiAgICAgICAgXSwgdGhpcywgU3RybU9wdC5jYWxsKHRoaXMsIG9wdHMsIGNiKSwgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICB2YXIgc3RybSA9IG5ldyBEZWZsYXRlKGV2LmRhdGEpO1xuICAgICAgICAgICAgb25tZXNzYWdlID0gYXN0cm0oc3RybSk7XG4gICAgICAgIH0sIDYsIDEpO1xuICAgIH1cbiAgICByZXR1cm4gQXN5bmNEZWZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jRGVmbGF0ZSB9O1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmxhdGUoZGF0YSwgb3B0cywgY2IpIHtcbiAgICBpZiAoIWNiKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNiICE9ICdmdW5jdGlvbicpXG4gICAgICAgIGVycig3KTtcbiAgICByZXR1cm4gY2JpZnkoZGF0YSwgb3B0cywgW1xuICAgICAgICBiRGZsdCxcbiAgICBdLCBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIHBiZihkZWZsYXRlU3luYyhldi5kYXRhWzBdLCBldi5kYXRhWzFdKSk7IH0sIDAsIGNiKTtcbn1cbi8qKlxuICogQ29tcHJlc3NlcyBkYXRhIHdpdGggREVGTEFURSB3aXRob3V0IGFueSB3cmFwcGVyXG4gKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBjb21wcmVzc1xuICogQHBhcmFtIG9wdHMgVGhlIGNvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBkZWZsYXRlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZsYXRlU3luYyhkYXRhLCBvcHRzKSB7XG4gICAgcmV0dXJuIGRvcHQoZGF0YSwgb3B0cyB8fCB7fSwgMCwgMCk7XG59XG4vKipcbiAqIFN0cmVhbWluZyBERUZMQVRFIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEluZmxhdGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gSW5mbGF0ZShvcHRzLCBjYikge1xuICAgICAgICAvLyBubyBTdHJtT3B0IGhlcmUgdG8gYXZvaWQgYWRkaW5nIHRvIHdvcmtlcml6ZXJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzID09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICAgICAgdGhpcy5vbmRhdGEgPSBjYjtcbiAgICAgICAgdmFyIGRpY3QgPSBvcHRzICYmIG9wdHMuZGljdGlvbmFyeSAmJiBvcHRzLmRpY3Rpb25hcnkuc3ViYXJyYXkoLTMyNzY4KTtcbiAgICAgICAgdGhpcy5zID0geyBpOiAwLCBiOiBkaWN0ID8gZGljdC5sZW5ndGggOiAwIH07XG4gICAgICAgIHRoaXMubyA9IG5ldyB1OCgzMjc2OCk7XG4gICAgICAgIHRoaXMucCA9IG5ldyB1OCgwKTtcbiAgICAgICAgaWYgKGRpY3QpXG4gICAgICAgICAgICB0aGlzLm8uc2V0KGRpY3QpO1xuICAgIH1cbiAgICBJbmZsYXRlLnByb3RvdHlwZS5lID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgaWYgKHRoaXMuZClcbiAgICAgICAgICAgIGVycig0KTtcbiAgICAgICAgaWYgKCF0aGlzLnAubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy5wID0gYztcbiAgICAgICAgZWxzZSBpZiAoYy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBuID0gbmV3IHU4KHRoaXMucC5sZW5ndGggKyBjLmxlbmd0aCk7XG4gICAgICAgICAgICBuLnNldCh0aGlzLnApLCBuLnNldChjLCB0aGlzLnAubGVuZ3RoKSwgdGhpcy5wID0gbjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgSW5mbGF0ZS5wcm90b3R5cGUuYyA9IGZ1bmN0aW9uIChmaW5hbCkge1xuICAgICAgICB0aGlzLnMuaSA9ICsodGhpcy5kID0gZmluYWwgfHwgZmFsc2UpO1xuICAgICAgICB2YXIgYnRzID0gdGhpcy5zLmI7XG4gICAgICAgIHZhciBkdCA9IGluZmx0KHRoaXMucCwgdGhpcy5zLCB0aGlzLm8pO1xuICAgICAgICB0aGlzLm9uZGF0YShzbGMoZHQsIGJ0cywgdGhpcy5zLmIpLCB0aGlzLmQpO1xuICAgICAgICB0aGlzLm8gPSBzbGMoZHQsIHRoaXMucy5iIC0gMzI3NjgpLCB0aGlzLnMuYiA9IHRoaXMuby5sZW5ndGg7XG4gICAgICAgIHRoaXMucCA9IHNsYyh0aGlzLnAsICh0aGlzLnMucCAvIDgpIHwgMCksIHRoaXMucy5wICY9IDc7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSBpbmZsYXRlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGZpbmFsIGNodW5rXG4gICAgICovXG4gICAgSW5mbGF0ZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdGhpcy5lKGNodW5rKSwgdGhpcy5jKGZpbmFsKTtcbiAgICB9O1xuICAgIHJldHVybiBJbmZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IEluZmxhdGUgfTtcbi8qKlxuICogQXN5bmNocm9ub3VzIHN0cmVhbWluZyBERUZMQVRFIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jSW5mbGF0ZSA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBc3luY0luZmxhdGUob3B0cywgY2IpIHtcbiAgICAgICAgYXN0cm1pZnkoW1xuICAgICAgICAgICAgYkluZmx0LFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gW2FzdHJtLCBJbmZsYXRlXTsgfVxuICAgICAgICBdLCB0aGlzLCBTdHJtT3B0LmNhbGwodGhpcywgb3B0cywgY2IpLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIHZhciBzdHJtID0gbmV3IEluZmxhdGUoZXYuZGF0YSk7XG4gICAgICAgICAgICBvbm1lc3NhZ2UgPSBhc3RybShzdHJtKTtcbiAgICAgICAgfSwgNywgMCk7XG4gICAgfVxuICAgIHJldHVybiBBc3luY0luZmxhdGU7XG59KCkpO1xuZXhwb3J0IHsgQXN5bmNJbmZsYXRlIH07XG5leHBvcnQgZnVuY3Rpb24gaW5mbGF0ZShkYXRhLCBvcHRzLCBjYikge1xuICAgIGlmICghY2IpXG4gICAgICAgIGNiID0gb3B0cywgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2YgY2IgIT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZXJyKDcpO1xuICAgIHJldHVybiBjYmlmeShkYXRhLCBvcHRzLCBbXG4gICAgICAgIGJJbmZsdFxuICAgIF0sIGZ1bmN0aW9uIChldikgeyByZXR1cm4gcGJmKGluZmxhdGVTeW5jKGV2LmRhdGFbMF0sIGdvcHQoZXYuZGF0YVsxXSkpKTsgfSwgMSwgY2IpO1xufVxuLyoqXG4gKiBFeHBhbmRzIERFRkxBVEUgZGF0YSB3aXRoIG5vIHdyYXBwZXJcbiAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGRlY29tcHJlc3NcbiAqIEBwYXJhbSBvcHRzIFRoZSBkZWNvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBkZWNvbXByZXNzZWQgdmVyc2lvbiBvZiB0aGUgZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5mbGF0ZVN5bmMoZGF0YSwgb3B0cykge1xuICAgIHJldHVybiBpbmZsdChkYXRhLCB7IGk6IDIgfSwgb3B0cyAmJiBvcHRzLm91dCwgb3B0cyAmJiBvcHRzLmRpY3Rpb25hcnkpO1xufVxuLy8gYmVmb3JlIHlvdSB5ZWxsIGF0IG1lIGZvciBub3QganVzdCB1c2luZyBleHRlbmRzLCBteSByZWFzb24gaXMgdGhhdCBUUyBpbmhlcml0YW5jZSBpcyBoYXJkIHRvIHdvcmtlcml6ZS5cbi8qKlxuICogU3RyZWFtaW5nIEdaSVAgY29tcHJlc3Npb25cbiAqL1xudmFyIEd6aXAgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gR3ppcChvcHRzLCBjYikge1xuICAgICAgICB0aGlzLmMgPSBjcmMoKTtcbiAgICAgICAgdGhpcy5sID0gMDtcbiAgICAgICAgdGhpcy52ID0gMTtcbiAgICAgICAgRGVmbGF0ZS5jYWxsKHRoaXMsIG9wdHMsIGNiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgR1pJUHBlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBHemlwLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICB0aGlzLmMucChjaHVuayk7XG4gICAgICAgIHRoaXMubCArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIERlZmxhdGUucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZmluYWwpO1xuICAgIH07XG4gICAgR3ppcC5wcm90b3R5cGUucCA9IGZ1bmN0aW9uIChjLCBmKSB7XG4gICAgICAgIHZhciByYXcgPSBkb3B0KGMsIHRoaXMubywgdGhpcy52ICYmIGd6aGwodGhpcy5vKSwgZiAmJiA4LCB0aGlzLnMpO1xuICAgICAgICBpZiAodGhpcy52KVxuICAgICAgICAgICAgZ3poKHJhdywgdGhpcy5vKSwgdGhpcy52ID0gMDtcbiAgICAgICAgaWYgKGYpXG4gICAgICAgICAgICB3Ynl0ZXMocmF3LCByYXcubGVuZ3RoIC0gOCwgdGhpcy5jLmQoKSksIHdieXRlcyhyYXcsIHJhdy5sZW5ndGggLSA0LCB0aGlzLmwpO1xuICAgICAgICB0aGlzLm9uZGF0YShyYXcsIGYpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRmx1c2hlcyBidWZmZXJlZCB1bmNvbXByZXNzZWQgZGF0YS4gVXNlZnVsIHRvIGltbWVkaWF0ZWx5IHJldHJpZXZlIHRoZVxuICAgICAqIEdaSVBwZWQgb3V0cHV0IGZvciBzbWFsbCBpbnB1dHMuXG4gICAgICovXG4gICAgR3ppcC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIERlZmxhdGUucHJvdG90eXBlLmZsdXNoLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICByZXR1cm4gR3ppcDtcbn0oKSk7XG5leHBvcnQgeyBHemlwIH07XG4vKipcbiAqIEFzeW5jaHJvbm91cyBzdHJlYW1pbmcgR1pJUCBjb21wcmVzc2lvblxuICovXG52YXIgQXN5bmNHemlwID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFzeW5jR3ppcChvcHRzLCBjYikge1xuICAgICAgICBhc3RybWlmeShbXG4gICAgICAgICAgICBiRGZsdCxcbiAgICAgICAgICAgIGd6ZSxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFthc3RybSwgRGVmbGF0ZSwgR3ppcF07IH1cbiAgICAgICAgXSwgdGhpcywgU3RybU9wdC5jYWxsKHRoaXMsIG9wdHMsIGNiKSwgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICB2YXIgc3RybSA9IG5ldyBHemlwKGV2LmRhdGEpO1xuICAgICAgICAgICAgb25tZXNzYWdlID0gYXN0cm0oc3RybSk7XG4gICAgICAgIH0sIDgsIDEpO1xuICAgIH1cbiAgICByZXR1cm4gQXN5bmNHemlwO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jR3ppcCB9O1xuZXhwb3J0IGZ1bmN0aW9uIGd6aXAoZGF0YSwgb3B0cywgY2IpIHtcbiAgICBpZiAoIWNiKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNiICE9ICdmdW5jdGlvbicpXG4gICAgICAgIGVycig3KTtcbiAgICByZXR1cm4gY2JpZnkoZGF0YSwgb3B0cywgW1xuICAgICAgICBiRGZsdCxcbiAgICAgICAgZ3plLFxuICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbZ3ppcFN5bmNdOyB9XG4gICAgXSwgZnVuY3Rpb24gKGV2KSB7IHJldHVybiBwYmYoZ3ppcFN5bmMoZXYuZGF0YVswXSwgZXYuZGF0YVsxXSkpOyB9LCAyLCBjYik7XG59XG4vKipcbiAqIENvbXByZXNzZXMgZGF0YSB3aXRoIEdaSVBcbiAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGNvbXByZXNzXG4gKiBAcGFyYW0gb3B0cyBUaGUgY29tcHJlc3Npb24gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGd6aXBwZWQgdmVyc2lvbiBvZiB0aGUgZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3ppcFN5bmMoZGF0YSwgb3B0cykge1xuICAgIGlmICghb3B0cylcbiAgICAgICAgb3B0cyA9IHt9O1xuICAgIHZhciBjID0gY3JjKCksIGwgPSBkYXRhLmxlbmd0aDtcbiAgICBjLnAoZGF0YSk7XG4gICAgdmFyIGQgPSBkb3B0KGRhdGEsIG9wdHMsIGd6aGwob3B0cyksIDgpLCBzID0gZC5sZW5ndGg7XG4gICAgcmV0dXJuIGd6aChkLCBvcHRzKSwgd2J5dGVzKGQsIHMgLSA4LCBjLmQoKSksIHdieXRlcyhkLCBzIC0gNCwgbCksIGQ7XG59XG4vKipcbiAqIFN0cmVhbWluZyBzaW5nbGUgb3IgbXVsdGktbWVtYmVyIEdaSVAgZGVjb21wcmVzc2lvblxuICovXG52YXIgR3VuemlwID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEd1bnppcChvcHRzLCBjYikge1xuICAgICAgICB0aGlzLnYgPSAxO1xuICAgICAgICB0aGlzLnIgPSAwO1xuICAgICAgICBJbmZsYXRlLmNhbGwodGhpcywgb3B0cywgY2IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSBHVU5aSVBwZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgR3VuemlwLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBJbmZsYXRlLnByb3RvdHlwZS5lLmNhbGwodGhpcywgY2h1bmspO1xuICAgICAgICB0aGlzLnIgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy52KSB7XG4gICAgICAgICAgICB2YXIgcCA9IHRoaXMucC5zdWJhcnJheSh0aGlzLnYgLSAxKTtcbiAgICAgICAgICAgIHZhciBzID0gcC5sZW5ndGggPiAzID8gZ3pzKHApIDogNDtcbiAgICAgICAgICAgIGlmIChzID4gcC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbmFsKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnYgPiAxICYmIHRoaXMub25tZW1iZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9ubWVtYmVyKHRoaXMuciAtIHAubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucCA9IHAuc3ViYXJyYXkocyksIHRoaXMudiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbmVjZXNzYXJ5IHRvIHByZXZlbnQgVFMgZnJvbSB1c2luZyB0aGUgY2xvc3VyZSB2YWx1ZVxuICAgICAgICAvLyBUaGlzIGFsbG93cyBmb3Igd29ya2VyaXphdGlvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHlcbiAgICAgICAgSW5mbGF0ZS5wcm90b3R5cGUuYy5jYWxsKHRoaXMsIGZpbmFsKTtcbiAgICAgICAgLy8gcHJvY2VzcyBjb25jYXRlbmF0ZWQgR1pJUFxuICAgICAgICBpZiAodGhpcy5zLmYgJiYgIXRoaXMucy5sICYmICFmaW5hbCkge1xuICAgICAgICAgICAgdGhpcy52ID0gc2hmdCh0aGlzLnMucCkgKyA5O1xuICAgICAgICAgICAgdGhpcy5zID0geyBpOiAwIH07XG4gICAgICAgICAgICB0aGlzLm8gPSBuZXcgdTgoMCk7XG4gICAgICAgICAgICB0aGlzLnB1c2gobmV3IHU4KDApLCBmaW5hbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBHdW56aXA7XG59KCkpO1xuZXhwb3J0IHsgR3VuemlwIH07XG4vKipcbiAqIEFzeW5jaHJvbm91cyBzdHJlYW1pbmcgc2luZ2xlIG9yIG11bHRpLW1lbWJlciBHWklQIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jR3VuemlwID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFzeW5jR3VuemlwKG9wdHMsIGNiKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGFzdHJtaWZ5KFtcbiAgICAgICAgICAgIGJJbmZsdCxcbiAgICAgICAgICAgIGd1emUsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbYXN0cm0sIEluZmxhdGUsIEd1bnppcF07IH1cbiAgICAgICAgXSwgdGhpcywgU3RybU9wdC5jYWxsKHRoaXMsIG9wdHMsIGNiKSwgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICB2YXIgc3RybSA9IG5ldyBHdW56aXAoZXYuZGF0YSk7XG4gICAgICAgICAgICBzdHJtLm9ubWVtYmVyID0gZnVuY3Rpb24gKG9mZnNldCkgeyByZXR1cm4gcG9zdE1lc3NhZ2Uob2Zmc2V0KTsgfTtcbiAgICAgICAgICAgIG9ubWVzc2FnZSA9IGFzdHJtKHN0cm0pO1xuICAgICAgICB9LCA5LCAwLCBmdW5jdGlvbiAob2Zmc2V0KSB7IHJldHVybiBfdGhpcy5vbm1lbWJlciAmJiBfdGhpcy5vbm1lbWJlcihvZmZzZXQpOyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIEFzeW5jR3VuemlwO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jR3VuemlwIH07XG5leHBvcnQgZnVuY3Rpb24gZ3VuemlwKGRhdGEsIG9wdHMsIGNiKSB7XG4gICAgaWYgKCFjYilcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBjYiAhPSAnZnVuY3Rpb24nKVxuICAgICAgICBlcnIoNyk7XG4gICAgcmV0dXJuIGNiaWZ5KGRhdGEsIG9wdHMsIFtcbiAgICAgICAgYkluZmx0LFxuICAgICAgICBndXplLFxuICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbZ3VuemlwU3luY107IH1cbiAgICBdLCBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIHBiZihndW56aXBTeW5jKGV2LmRhdGFbMF0sIGV2LmRhdGFbMV0pKTsgfSwgMywgY2IpO1xufVxuLyoqXG4gKiBFeHBhbmRzIEdaSVAgZGF0YVxuICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gZGVjb21wcmVzc1xuICogQHBhcmFtIG9wdHMgVGhlIGRlY29tcHJlc3Npb24gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBndW56aXBTeW5jKGRhdGEsIG9wdHMpIHtcbiAgICB2YXIgc3QgPSBnenMoZGF0YSk7XG4gICAgaWYgKHN0ICsgOCA+IGRhdGEubGVuZ3RoKVxuICAgICAgICBlcnIoNiwgJ2ludmFsaWQgZ3ppcCBkYXRhJyk7XG4gICAgcmV0dXJuIGluZmx0KGRhdGEuc3ViYXJyYXkoc3QsIC04KSwgeyBpOiAyIH0sIG9wdHMgJiYgb3B0cy5vdXQgfHwgbmV3IHU4KGd6bChkYXRhKSksIG9wdHMgJiYgb3B0cy5kaWN0aW9uYXJ5KTtcbn1cbi8qKlxuICogU3RyZWFtaW5nIFpsaWIgY29tcHJlc3Npb25cbiAqL1xudmFyIFpsaWIgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gWmxpYihvcHRzLCBjYikge1xuICAgICAgICB0aGlzLmMgPSBhZGxlcigpO1xuICAgICAgICB0aGlzLnYgPSAxO1xuICAgICAgICBEZWZsYXRlLmNhbGwodGhpcywgb3B0cywgY2IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSB6bGliYmVkXG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIFpsaWIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIHRoaXMuYy5wKGNodW5rKTtcbiAgICAgICAgRGVmbGF0ZS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBmaW5hbCk7XG4gICAgfTtcbiAgICBabGliLnByb3RvdHlwZS5wID0gZnVuY3Rpb24gKGMsIGYpIHtcbiAgICAgICAgdmFyIHJhdyA9IGRvcHQoYywgdGhpcy5vLCB0aGlzLnYgJiYgKHRoaXMuby5kaWN0aW9uYXJ5ID8gNiA6IDIpLCBmICYmIDQsIHRoaXMucyk7XG4gICAgICAgIGlmICh0aGlzLnYpXG4gICAgICAgICAgICB6bGgocmF3LCB0aGlzLm8pLCB0aGlzLnYgPSAwO1xuICAgICAgICBpZiAoZilcbiAgICAgICAgICAgIHdieXRlcyhyYXcsIHJhdy5sZW5ndGggLSA0LCB0aGlzLmMuZCgpKTtcbiAgICAgICAgdGhpcy5vbmRhdGEocmF3LCBmKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEZsdXNoZXMgYnVmZmVyZWQgdW5jb21wcmVzc2VkIGRhdGEuIFVzZWZ1bCB0byBpbW1lZGlhdGVseSByZXRyaWV2ZSB0aGVcbiAgICAgKiB6bGliYmVkIG91dHB1dCBmb3Igc21hbGwgaW5wdXRzLlxuICAgICAqL1xuICAgIFpsaWIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBEZWZsYXRlLnByb3RvdHlwZS5mbHVzaC5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgcmV0dXJuIFpsaWI7XG59KCkpO1xuZXhwb3J0IHsgWmxpYiB9O1xuLyoqXG4gKiBBc3luY2hyb25vdXMgc3RyZWFtaW5nIFpsaWIgY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jWmxpYiA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBc3luY1psaWIob3B0cywgY2IpIHtcbiAgICAgICAgYXN0cm1pZnkoW1xuICAgICAgICAgICAgYkRmbHQsXG4gICAgICAgICAgICB6bGUsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbYXN0cm0sIERlZmxhdGUsIFpsaWJdOyB9XG4gICAgICAgIF0sIHRoaXMsIFN0cm1PcHQuY2FsbCh0aGlzLCBvcHRzLCBjYiksIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgdmFyIHN0cm0gPSBuZXcgWmxpYihldi5kYXRhKTtcbiAgICAgICAgICAgIG9ubWVzc2FnZSA9IGFzdHJtKHN0cm0pO1xuICAgICAgICB9LCAxMCwgMSk7XG4gICAgfVxuICAgIHJldHVybiBBc3luY1psaWI7XG59KCkpO1xuZXhwb3J0IHsgQXN5bmNabGliIH07XG5leHBvcnQgZnVuY3Rpb24gemxpYihkYXRhLCBvcHRzLCBjYikge1xuICAgIGlmICghY2IpXG4gICAgICAgIGNiID0gb3B0cywgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2YgY2IgIT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZXJyKDcpO1xuICAgIHJldHVybiBjYmlmeShkYXRhLCBvcHRzLCBbXG4gICAgICAgIGJEZmx0LFxuICAgICAgICB6bGUsXG4gICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFt6bGliU3luY107IH1cbiAgICBdLCBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIHBiZih6bGliU3luYyhldi5kYXRhWzBdLCBldi5kYXRhWzFdKSk7IH0sIDQsIGNiKTtcbn1cbi8qKlxuICogQ29tcHJlc3MgZGF0YSB3aXRoIFpsaWJcbiAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGNvbXByZXNzXG4gKiBAcGFyYW0gb3B0cyBUaGUgY29tcHJlc3Npb24gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIHpsaWItY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6bGliU3luYyhkYXRhLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKVxuICAgICAgICBvcHRzID0ge307XG4gICAgdmFyIGEgPSBhZGxlcigpO1xuICAgIGEucChkYXRhKTtcbiAgICB2YXIgZCA9IGRvcHQoZGF0YSwgb3B0cywgb3B0cy5kaWN0aW9uYXJ5ID8gNiA6IDIsIDQpO1xuICAgIHJldHVybiB6bGgoZCwgb3B0cyksIHdieXRlcyhkLCBkLmxlbmd0aCAtIDQsIGEuZCgpKSwgZDtcbn1cbi8qKlxuICogU3RyZWFtaW5nIFpsaWIgZGVjb21wcmVzc2lvblxuICovXG52YXIgVW56bGliID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFVuemxpYihvcHRzLCBjYikge1xuICAgICAgICBJbmZsYXRlLmNhbGwodGhpcywgb3B0cywgY2IpO1xuICAgICAgICB0aGlzLnYgPSBvcHRzICYmIG9wdHMuZGljdGlvbmFyeSA/IDIgOiAxO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSB1bnpsaWJiZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgVW56bGliLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBJbmZsYXRlLnByb3RvdHlwZS5lLmNhbGwodGhpcywgY2h1bmspO1xuICAgICAgICBpZiAodGhpcy52KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wLmxlbmd0aCA8IDYgJiYgIWZpbmFsKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMucCA9IHRoaXMucC5zdWJhcnJheSh6bHModGhpcy5wLCB0aGlzLnYgLSAxKSksIHRoaXMudiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbmFsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wLmxlbmd0aCA8IDQpXG4gICAgICAgICAgICAgICAgZXJyKDYsICdpbnZhbGlkIHpsaWIgZGF0YScpO1xuICAgICAgICAgICAgdGhpcy5wID0gdGhpcy5wLnN1YmFycmF5KDAsIC00KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBuZWNlc3NhcnkgdG8gcHJldmVudCBUUyBmcm9tIHVzaW5nIHRoZSBjbG9zdXJlIHZhbHVlXG4gICAgICAgIC8vIFRoaXMgYWxsb3dzIGZvciB3b3JrZXJpemF0aW9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseVxuICAgICAgICBJbmZsYXRlLnByb3RvdHlwZS5jLmNhbGwodGhpcywgZmluYWwpO1xuICAgIH07XG4gICAgcmV0dXJuIFVuemxpYjtcbn0oKSk7XG5leHBvcnQgeyBVbnpsaWIgfTtcbi8qKlxuICogQXN5bmNocm9ub3VzIHN0cmVhbWluZyBabGliIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jVW56bGliID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFzeW5jVW56bGliKG9wdHMsIGNiKSB7XG4gICAgICAgIGFzdHJtaWZ5KFtcbiAgICAgICAgICAgIGJJbmZsdCxcbiAgICAgICAgICAgIHp1bGUsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbYXN0cm0sIEluZmxhdGUsIFVuemxpYl07IH1cbiAgICAgICAgXSwgdGhpcywgU3RybU9wdC5jYWxsKHRoaXMsIG9wdHMsIGNiKSwgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICB2YXIgc3RybSA9IG5ldyBVbnpsaWIoZXYuZGF0YSk7XG4gICAgICAgICAgICBvbm1lc3NhZ2UgPSBhc3RybShzdHJtKTtcbiAgICAgICAgfSwgMTEsIDApO1xuICAgIH1cbiAgICByZXR1cm4gQXN5bmNVbnpsaWI7XG59KCkpO1xuZXhwb3J0IHsgQXN5bmNVbnpsaWIgfTtcbmV4cG9ydCBmdW5jdGlvbiB1bnpsaWIoZGF0YSwgb3B0cywgY2IpIHtcbiAgICBpZiAoIWNiKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNiICE9ICdmdW5jdGlvbicpXG4gICAgICAgIGVycig3KTtcbiAgICByZXR1cm4gY2JpZnkoZGF0YSwgb3B0cywgW1xuICAgICAgICBiSW5mbHQsXG4gICAgICAgIHp1bGUsXG4gICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFt1bnpsaWJTeW5jXTsgfVxuICAgIF0sIGZ1bmN0aW9uIChldikgeyByZXR1cm4gcGJmKHVuemxpYlN5bmMoZXYuZGF0YVswXSwgZ29wdChldi5kYXRhWzFdKSkpOyB9LCA1LCBjYik7XG59XG4vKipcbiAqIEV4cGFuZHMgWmxpYiBkYXRhXG4gKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBkZWNvbXByZXNzXG4gKiBAcGFyYW0gb3B0cyBUaGUgZGVjb21wcmVzc2lvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZGVjb21wcmVzc2VkIHZlcnNpb24gb2YgdGhlIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuemxpYlN5bmMoZGF0YSwgb3B0cykge1xuICAgIHJldHVybiBpbmZsdChkYXRhLnN1YmFycmF5KHpscyhkYXRhLCBvcHRzICYmIG9wdHMuZGljdGlvbmFyeSksIC00KSwgeyBpOiAyIH0sIG9wdHMgJiYgb3B0cy5vdXQsIG9wdHMgJiYgb3B0cy5kaWN0aW9uYXJ5KTtcbn1cbi8vIERlZmF1bHQgYWxnb3JpdGhtIGZvciBjb21wcmVzc2lvbiAodXNlZCBiZWNhdXNlIGhhdmluZyBhIGtub3duIG91dHB1dCBzaXplIGFsbG93cyBmYXN0ZXIgZGVjb21wcmVzc2lvbilcbmV4cG9ydCB7IGd6aXAgYXMgY29tcHJlc3MsIEFzeW5jR3ppcCBhcyBBc3luY0NvbXByZXNzIH07XG5leHBvcnQgeyBnemlwU3luYyBhcyBjb21wcmVzc1N5bmMsIEd6aXAgYXMgQ29tcHJlc3MgfTtcbi8qKlxuICogU3RyZWFtaW5nIEdaSVAsIFpsaWIsIG9yIHJhdyBERUZMQVRFIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIERlY29tcHJlc3MgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGVjb21wcmVzcyhvcHRzLCBjYikge1xuICAgICAgICB0aGlzLm8gPSBTdHJtT3B0LmNhbGwodGhpcywgb3B0cywgY2IpIHx8IHt9O1xuICAgICAgICB0aGlzLkcgPSBHdW56aXA7XG4gICAgICAgIHRoaXMuSSA9IEluZmxhdGU7XG4gICAgICAgIHRoaXMuWiA9IFVuemxpYjtcbiAgICB9XG4gICAgLy8gaW5pdCBzdWJzdHJlYW1cbiAgICAvLyBvdmVycmlkZW4gYnkgQXN5bmNEZWNvbXByZXNzXG4gICAgRGVjb21wcmVzcy5wcm90b3R5cGUuaSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5zLm9uZGF0YSA9IGZ1bmN0aW9uIChkYXQsIGZpbmFsKSB7XG4gICAgICAgICAgICBfdGhpcy5vbmRhdGEoZGF0LCBmaW5hbCk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSBkZWNvbXByZXNzZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgRGVjb21wcmVzcy5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgaWYgKCF0aGlzLnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnAgJiYgdGhpcy5wLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IHU4KHRoaXMucC5sZW5ndGggKyBjaHVuay5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIG4uc2V0KHRoaXMucCksIG4uc2V0KGNodW5rLCB0aGlzLnAubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLnAgPSBjaHVuaztcbiAgICAgICAgICAgIGlmICh0aGlzLnAubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIHRoaXMucyA9ICh0aGlzLnBbMF0gPT0gMzEgJiYgdGhpcy5wWzFdID09IDEzOSAmJiB0aGlzLnBbMl0gPT0gOClcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgdGhpcy5HKHRoaXMubylcbiAgICAgICAgICAgICAgICAgICAgOiAoKHRoaXMucFswXSAmIDE1KSAhPSA4IHx8ICh0aGlzLnBbMF0gPj4gNCkgPiA3IHx8ICgodGhpcy5wWzBdIDw8IDggfCB0aGlzLnBbMV0pICUgMzEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgdGhpcy5JKHRoaXMubylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IHRoaXMuWih0aGlzLm8pO1xuICAgICAgICAgICAgICAgIHRoaXMuaSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucy5wdXNoKHRoaXMucCwgZmluYWwpO1xuICAgICAgICAgICAgICAgIHRoaXMucCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zLnB1c2goY2h1bmssIGZpbmFsKTtcbiAgICB9O1xuICAgIHJldHVybiBEZWNvbXByZXNzO1xufSgpKTtcbmV4cG9ydCB7IERlY29tcHJlc3MgfTtcbi8qKlxuICogQXN5bmNocm9ub3VzIHN0cmVhbWluZyBHWklQLCBabGliLCBvciByYXcgREVGTEFURSBkZWNvbXByZXNzaW9uXG4gKi9cbnZhciBBc3luY0RlY29tcHJlc3MgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQXN5bmNEZWNvbXByZXNzKG9wdHMsIGNiKSB7XG4gICAgICAgIERlY29tcHJlc3MuY2FsbCh0aGlzLCBvcHRzLCBjYik7XG4gICAgICAgIHRoaXMucXVldWVkU2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuRyA9IEFzeW5jR3VuemlwO1xuICAgICAgICB0aGlzLkkgPSBBc3luY0luZmxhdGU7XG4gICAgICAgIHRoaXMuWiA9IEFzeW5jVW56bGliO1xuICAgIH1cbiAgICBBc3luY0RlY29tcHJlc3MucHJvdG90eXBlLmkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMucy5vbmRhdGEgPSBmdW5jdGlvbiAoZXJyLCBkYXQsIGZpbmFsKSB7XG4gICAgICAgICAgICBfdGhpcy5vbmRhdGEoZXJyLCBkYXQsIGZpbmFsKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zLm9uZHJhaW4gPSBmdW5jdGlvbiAoc2l6ZSkge1xuICAgICAgICAgICAgX3RoaXMucXVldWVkU2l6ZSAtPSBzaXplO1xuICAgICAgICAgICAgaWYgKF90aGlzLm9uZHJhaW4pXG4gICAgICAgICAgICAgICAgX3RoaXMub25kcmFpbihzaXplKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIGRlY29tcHJlc3NlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBBc3luY0RlY29tcHJlc3MucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIHRoaXMucXVldWVkU2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIERlY29tcHJlc3MucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZmluYWwpO1xuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jRGVjb21wcmVzcztcbn0oKSk7XG5leHBvcnQgeyBBc3luY0RlY29tcHJlc3MgfTtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvbXByZXNzKGRhdGEsIG9wdHMsIGNiKSB7XG4gICAgaWYgKCFjYilcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBjYiAhPSAnZnVuY3Rpb24nKVxuICAgICAgICBlcnIoNyk7XG4gICAgcmV0dXJuIChkYXRhWzBdID09IDMxICYmIGRhdGFbMV0gPT0gMTM5ICYmIGRhdGFbMl0gPT0gOClcbiAgICAgICAgPyBndW56aXAoZGF0YSwgb3B0cywgY2IpXG4gICAgICAgIDogKChkYXRhWzBdICYgMTUpICE9IDggfHwgKGRhdGFbMF0gPj4gNCkgPiA3IHx8ICgoZGF0YVswXSA8PCA4IHwgZGF0YVsxXSkgJSAzMSkpXG4gICAgICAgICAgICA/IGluZmxhdGUoZGF0YSwgb3B0cywgY2IpXG4gICAgICAgICAgICA6IHVuemxpYihkYXRhLCBvcHRzLCBjYik7XG59XG4vKipcbiAqIEV4cGFuZHMgY29tcHJlc3NlZCBHWklQLCBabGliLCBvciByYXcgREVGTEFURSBkYXRhLCBhdXRvbWF0aWNhbGx5IGRldGVjdGluZyB0aGUgZm9ybWF0XG4gKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBkZWNvbXByZXNzXG4gKiBAcGFyYW0gb3B0cyBUaGUgZGVjb21wcmVzc2lvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZGVjb21wcmVzc2VkIHZlcnNpb24gb2YgdGhlIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29tcHJlc3NTeW5jKGRhdGEsIG9wdHMpIHtcbiAgICByZXR1cm4gKGRhdGFbMF0gPT0gMzEgJiYgZGF0YVsxXSA9PSAxMzkgJiYgZGF0YVsyXSA9PSA4KVxuICAgICAgICA/IGd1bnppcFN5bmMoZGF0YSwgb3B0cylcbiAgICAgICAgOiAoKGRhdGFbMF0gJiAxNSkgIT0gOCB8fCAoZGF0YVswXSA+PiA0KSA+IDcgfHwgKChkYXRhWzBdIDw8IDggfCBkYXRhWzFdKSAlIDMxKSlcbiAgICAgICAgICAgID8gaW5mbGF0ZVN5bmMoZGF0YSwgb3B0cylcbiAgICAgICAgICAgIDogdW56bGliU3luYyhkYXRhLCBvcHRzKTtcbn1cbi8vIGZsYXR0ZW4gYSBkaXJlY3Rvcnkgc3RydWN0dXJlXG52YXIgZmx0biA9IGZ1bmN0aW9uIChkLCBwLCB0LCBvKSB7XG4gICAgZm9yICh2YXIgayBpbiBkKSB7XG4gICAgICAgIHZhciB2YWwgPSBkW2tdLCBuID0gcCArIGssIG9wID0gbztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgICAgICAgIG9wID0gbXJnKG8sIHZhbFsxXSksIHZhbCA9IHZhbFswXTtcbiAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIHU4KVxuICAgICAgICAgICAgdFtuXSA9IFt2YWwsIG9wXTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0W24gKz0gJy8nXSA9IFtuZXcgdTgoMCksIG9wXTtcbiAgICAgICAgICAgIGZsdG4odmFsLCBuLCB0LCBvKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4vLyB0ZXh0IGVuY29kZXJcbnZhciB0ZSA9IHR5cGVvZiBUZXh0RW5jb2RlciAhPSAndW5kZWZpbmVkJyAmJiAvKiNfX1BVUkVfXyovIG5ldyBUZXh0RW5jb2RlcigpO1xuLy8gdGV4dCBkZWNvZGVyXG52YXIgdGQgPSB0eXBlb2YgVGV4dERlY29kZXIgIT0gJ3VuZGVmaW5lZCcgJiYgLyojX19QVVJFX18qLyBuZXcgVGV4dERlY29kZXIoKTtcbi8vIHRleHQgZGVjb2RlciBzdHJlYW1cbnZhciB0ZHMgPSAwO1xudHJ5IHtcbiAgICB0ZC5kZWNvZGUoZXQsIHsgc3RyZWFtOiB0cnVlIH0pO1xuICAgIHRkcyA9IDE7XG59XG5jYXRjaCAoZSkgeyB9XG4vLyBkZWNvZGUgVVRGOFxudmFyIGR1dGY4ID0gZnVuY3Rpb24gKGQpIHtcbiAgICBmb3IgKHZhciByID0gJycsIGkgPSAwOzspIHtcbiAgICAgICAgdmFyIGMgPSBkW2krK107XG4gICAgICAgIHZhciBlYiA9IChjID4gMTI3KSArIChjID4gMjIzKSArIChjID4gMjM5KTtcbiAgICAgICAgaWYgKGkgKyBlYiA+IGQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHsgczogciwgcjogc2xjKGQsIGkgLSAxKSB9O1xuICAgICAgICBpZiAoIWViKVxuICAgICAgICAgICAgciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgICBlbHNlIGlmIChlYiA9PSAzKSB7XG4gICAgICAgICAgICBjID0gKChjICYgMTUpIDw8IDE4IHwgKGRbaSsrXSAmIDYzKSA8PCAxMiB8IChkW2krK10gJiA2MykgPDwgNiB8IChkW2krK10gJiA2MykpIC0gNjU1MzYsXG4gICAgICAgICAgICAgICAgciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2IHwgKGMgPj4gMTApLCA1NjMyMCB8IChjICYgMTAyMykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGViICYgMSlcbiAgICAgICAgICAgIHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyAmIDMxKSA8PCA2IHwgKGRbaSsrXSAmIDYzKSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyAmIDE1KSA8PCAxMiB8IChkW2krK10gJiA2MykgPDwgNiB8IChkW2krK10gJiA2MykpO1xuICAgIH1cbn07XG4vKipcbiAqIFN0cmVhbWluZyBVVEYtOCBkZWNvZGluZ1xuICovXG52YXIgRGVjb2RlVVRGOCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgVVRGLTggZGVjb2Rpbmcgc3RyZWFtXG4gICAgICogQHBhcmFtIGNiIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW5ldmVyIGRhdGEgaXMgZGVjb2RlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIERlY29kZVVURjgoY2IpIHtcbiAgICAgICAgdGhpcy5vbmRhdGEgPSBjYjtcbiAgICAgICAgaWYgKHRkcylcbiAgICAgICAgICAgIHRoaXMudCA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnAgPSBldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgZGVjb2RlZCBmcm9tIFVURi04IGJpbmFyeVxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBEZWNvZGVVVEY4LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBpZiAoIXRoaXMub25kYXRhKVxuICAgICAgICAgICAgZXJyKDUpO1xuICAgICAgICBmaW5hbCA9ICEhZmluYWw7XG4gICAgICAgIGlmICh0aGlzLnQpIHtcbiAgICAgICAgICAgIHRoaXMub25kYXRhKHRoaXMudC5kZWNvZGUoY2h1bmssIHsgc3RyZWFtOiB0cnVlIH0pLCBmaW5hbCk7XG4gICAgICAgICAgICBpZiAoZmluYWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50LmRlY29kZSgpLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgZXJyKDgpO1xuICAgICAgICAgICAgICAgIHRoaXMudCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnApXG4gICAgICAgICAgICBlcnIoNCk7XG4gICAgICAgIHZhciBkYXQgPSBuZXcgdTgodGhpcy5wLmxlbmd0aCArIGNodW5rLmxlbmd0aCk7XG4gICAgICAgIGRhdC5zZXQodGhpcy5wKTtcbiAgICAgICAgZGF0LnNldChjaHVuaywgdGhpcy5wLmxlbmd0aCk7XG4gICAgICAgIHZhciBfYSA9IGR1dGY4KGRhdCksIHMgPSBfYS5zLCByID0gX2EucjtcbiAgICAgICAgaWYgKGZpbmFsKSB7XG4gICAgICAgICAgICBpZiAoci5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZXJyKDgpO1xuICAgICAgICAgICAgdGhpcy5wID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnAgPSByO1xuICAgICAgICB0aGlzLm9uZGF0YShzLCBmaW5hbCk7XG4gICAgfTtcbiAgICByZXR1cm4gRGVjb2RlVVRGODtcbn0oKSk7XG5leHBvcnQgeyBEZWNvZGVVVEY4IH07XG4vKipcbiAqIFN0cmVhbWluZyBVVEYtOCBlbmNvZGluZ1xuICovXG52YXIgRW5jb2RlVVRGOCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgVVRGLTggZGVjb2Rpbmcgc3RyZWFtXG4gICAgICogQHBhcmFtIGNiIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW5ldmVyIGRhdGEgaXMgZW5jb2RlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIEVuY29kZVVURjgoY2IpIHtcbiAgICAgICAgdGhpcy5vbmRhdGEgPSBjYjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgZW5jb2RlZCB0byBVVEYtOFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgc3RyaW5nIGRhdGEgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBFbmNvZGVVVEY4LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBpZiAoIXRoaXMub25kYXRhKVxuICAgICAgICAgICAgZXJyKDUpO1xuICAgICAgICBpZiAodGhpcy5kKVxuICAgICAgICAgICAgZXJyKDQpO1xuICAgICAgICB0aGlzLm9uZGF0YShzdHJUb1U4KGNodW5rKSwgdGhpcy5kID0gZmluYWwgfHwgZmFsc2UpO1xuICAgIH07XG4gICAgcmV0dXJuIEVuY29kZVVURjg7XG59KCkpO1xuZXhwb3J0IHsgRW5jb2RlVVRGOCB9O1xuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyBpbnRvIGEgVWludDhBcnJheSBmb3IgdXNlIHdpdGggY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBtZXRob2RzXG4gKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gZW5jb2RlXG4gKiBAcGFyYW0gbGF0aW4xIFdoZXRoZXIgb3Igbm90IHRvIGludGVycHJldCB0aGUgZGF0YSBhcyBMYXRpbi0xLiBUaGlzIHNob3VsZFxuICogICAgICAgICAgICAgICBub3QgbmVlZCB0byBiZSB0cnVlIHVubGVzcyBkZWNvZGluZyBhIGJpbmFyeSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIGVuY29kZWQgaW4gVVRGLTgvTGF0aW4tMSBiaW5hcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0clRvVTgoc3RyLCBsYXRpbjEpIHtcbiAgICBpZiAobGF0aW4xKSB7XG4gICAgICAgIHZhciBhcl8xID0gbmV3IHU4KHN0ci5sZW5ndGgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGFyXzFbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgcmV0dXJuIGFyXzE7XG4gICAgfVxuICAgIGlmICh0ZSlcbiAgICAgICAgcmV0dXJuIHRlLmVuY29kZShzdHIpO1xuICAgIHZhciBsID0gc3RyLmxlbmd0aDtcbiAgICB2YXIgYXIgPSBuZXcgdTgoc3RyLmxlbmd0aCArIChzdHIubGVuZ3RoID4+IDEpKTtcbiAgICB2YXIgYWkgPSAwO1xuICAgIHZhciB3ID0gZnVuY3Rpb24gKHYpIHsgYXJbYWkrK10gPSB2OyB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgKytpKSB7XG4gICAgICAgIGlmIChhaSArIDUgPiBhci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBuID0gbmV3IHU4KGFpICsgOCArICgobCAtIGkpIDw8IDEpKTtcbiAgICAgICAgICAgIG4uc2V0KGFyKTtcbiAgICAgICAgICAgIGFyID0gbjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoYyA8IDEyOCB8fCBsYXRpbjEpXG4gICAgICAgICAgICB3KGMpO1xuICAgICAgICBlbHNlIGlmIChjIDwgMjA0OClcbiAgICAgICAgICAgIHcoMTkyIHwgKGMgPj4gNikpLCB3KDEyOCB8IChjICYgNjMpKTtcbiAgICAgICAgZWxzZSBpZiAoYyA+IDU1Mjk1ICYmIGMgPCA1NzM0NClcbiAgICAgICAgICAgIGMgPSA2NTUzNiArIChjICYgMTAyMyA8PCAxMCkgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDEwMjMpLFxuICAgICAgICAgICAgICAgIHcoMjQwIHwgKGMgPj4gMTgpKSwgdygxMjggfCAoKGMgPj4gMTIpICYgNjMpKSwgdygxMjggfCAoKGMgPj4gNikgJiA2MykpLCB3KDEyOCB8IChjICYgNjMpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdygyMjQgfCAoYyA+PiAxMikpLCB3KDEyOCB8ICgoYyA+PiA2KSAmIDYzKSksIHcoMTI4IHwgKGMgJiA2MykpO1xuICAgIH1cbiAgICByZXR1cm4gc2xjKGFyLCAwLCBhaSk7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgVWludDhBcnJheSB0byBhIHN0cmluZ1xuICogQHBhcmFtIGRhdCBUaGUgZGF0YSB0byBkZWNvZGUgdG8gc3RyaW5nXG4gKiBAcGFyYW0gbGF0aW4xIFdoZXRoZXIgb3Igbm90IHRvIGludGVycHJldCB0aGUgZGF0YSBhcyBMYXRpbi0xLiBUaGlzIHNob3VsZFxuICogICAgICAgICAgICAgICBub3QgbmVlZCB0byBiZSB0cnVlIHVubGVzcyBlbmNvZGluZyB0byBiaW5hcnkgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIG9yaWdpbmFsIFVURi04L0xhdGluLTEgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJGcm9tVTgoZGF0LCBsYXRpbjEpIHtcbiAgICBpZiAobGF0aW4xKSB7XG4gICAgICAgIHZhciByID0gJyc7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0Lmxlbmd0aDsgaSArPSAxNjM4NClcbiAgICAgICAgICAgIHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBkYXQuc3ViYXJyYXkoaSwgaSArIDE2Mzg0KSk7XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cbiAgICBlbHNlIGlmICh0ZCkge1xuICAgICAgICByZXR1cm4gdGQuZGVjb2RlKGRhdCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgX2EgPSBkdXRmOChkYXQpLCBzID0gX2EucywgciA9IF9hLnI7XG4gICAgICAgIGlmIChyLmxlbmd0aClcbiAgICAgICAgICAgIGVycig4KTtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxufVxuO1xuLy8gZGVmbGF0ZSBiaXQgZmxhZ1xudmFyIGRiZiA9IGZ1bmN0aW9uIChsKSB7IHJldHVybiBsID09IDEgPyAzIDogbCA8IDYgPyAyIDogbCA9PSA5ID8gMSA6IDA7IH07XG4vLyBza2lwIGxvY2FsIHppcCBoZWFkZXJcbnZhciBzbHpoID0gZnVuY3Rpb24gKGQsIGIpIHsgcmV0dXJuIGIgKyAzMCArIGIyKGQsIGIgKyAyNikgKyBiMihkLCBiICsgMjgpOyB9O1xuLy8gcmVhZCB6aXAgaGVhZGVyXG52YXIgemggPSBmdW5jdGlvbiAoZCwgYiwgeikge1xuICAgIHZhciBmbmwgPSBiMihkLCBiICsgMjgpLCBmbiA9IHN0ckZyb21VOChkLnN1YmFycmF5KGIgKyA0NiwgYiArIDQ2ICsgZm5sKSwgIShiMihkLCBiICsgOCkgJiAyMDQ4KSksIGVzID0gYiArIDQ2ICsgZm5sLCBicyA9IGI0KGQsIGIgKyAyMCk7XG4gICAgdmFyIF9hID0geiAmJiBicyA9PSA0Mjk0OTY3Mjk1ID8gejY0ZShkLCBlcykgOiBbYnMsIGI0KGQsIGIgKyAyNCksIGI0KGQsIGIgKyA0MildLCBzYyA9IF9hWzBdLCBzdSA9IF9hWzFdLCBvZmYgPSBfYVsyXTtcbiAgICByZXR1cm4gW2IyKGQsIGIgKyAxMCksIHNjLCBzdSwgZm4sIGVzICsgYjIoZCwgYiArIDMwKSArIGIyKGQsIGIgKyAzMiksIG9mZl07XG59O1xuLy8gcmVhZCB6aXA2NCBleHRyYSBmaWVsZFxudmFyIHo2NGUgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAoOyBiMihkLCBiKSAhPSAxOyBiICs9IDQgKyBiMihkLCBiICsgMikpXG4gICAgICAgIDtcbiAgICByZXR1cm4gW2I4KGQsIGIgKyAxMiksIGI4KGQsIGIgKyA0KSwgYjgoZCwgYiArIDIwKV07XG59O1xuLy8gZXh0cmEgZmllbGQgbGVuZ3RoXG52YXIgZXhmbCA9IGZ1bmN0aW9uIChleCkge1xuICAgIHZhciBsZSA9IDA7XG4gICAgaWYgKGV4KSB7XG4gICAgICAgIGZvciAodmFyIGsgaW4gZXgpIHtcbiAgICAgICAgICAgIHZhciBsID0gZXhba10ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGwgPiA2NTUzNSlcbiAgICAgICAgICAgICAgICBlcnIoOSk7XG4gICAgICAgICAgICBsZSArPSBsICsgNDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGU7XG59O1xuLy8gd3JpdGUgemlwIGhlYWRlclxudmFyIHd6aCA9IGZ1bmN0aW9uIChkLCBiLCBmLCBmbiwgdSwgYywgY2UsIGNvKSB7XG4gICAgdmFyIGZsID0gZm4ubGVuZ3RoLCBleCA9IGYuZXh0cmEsIGNvbCA9IGNvICYmIGNvLmxlbmd0aDtcbiAgICB2YXIgZXhsID0gZXhmbChleCk7XG4gICAgd2J5dGVzKGQsIGIsIGNlICE9IG51bGwgPyAweDIwMTRCNTAgOiAweDQwMzRCNTApLCBiICs9IDQ7XG4gICAgaWYgKGNlICE9IG51bGwpXG4gICAgICAgIGRbYisrXSA9IDIwLCBkW2IrK10gPSBmLm9zO1xuICAgIGRbYl0gPSAyMCwgYiArPSAyOyAvLyBzcGVjIGNvbXBsaWFuY2U/IHdoYXQncyB0aGF0P1xuICAgIGRbYisrXSA9IChmLmZsYWcgPDwgMSkgfCAoYyA8IDAgJiYgOCksIGRbYisrXSA9IHUgJiYgODtcbiAgICBkW2IrK10gPSBmLmNvbXByZXNzaW9uICYgMjU1LCBkW2IrK10gPSBmLmNvbXByZXNzaW9uID4+IDg7XG4gICAgdmFyIGR0ID0gbmV3IERhdGUoZi5tdGltZSA9PSBudWxsID8gRGF0ZS5ub3coKSA6IGYubXRpbWUpLCB5ID0gZHQuZ2V0RnVsbFllYXIoKSAtIDE5ODA7XG4gICAgaWYgKHkgPCAwIHx8IHkgPiAxMTkpXG4gICAgICAgIGVycigxMCk7XG4gICAgd2J5dGVzKGQsIGIsICh5IDw8IDI1KSB8ICgoZHQuZ2V0TW9udGgoKSArIDEpIDw8IDIxKSB8IChkdC5nZXREYXRlKCkgPDwgMTYpIHwgKGR0LmdldEhvdXJzKCkgPDwgMTEpIHwgKGR0LmdldE1pbnV0ZXMoKSA8PCA1KSB8IChkdC5nZXRTZWNvbmRzKCkgPj4gMSkpLCBiICs9IDQ7XG4gICAgaWYgKGMgIT0gLTEpIHtcbiAgICAgICAgd2J5dGVzKGQsIGIsIGYuY3JjKTtcbiAgICAgICAgd2J5dGVzKGQsIGIgKyA0LCBjIDwgMCA/IC1jIC0gMiA6IGMpO1xuICAgICAgICB3Ynl0ZXMoZCwgYiArIDgsIGYuc2l6ZSk7XG4gICAgfVxuICAgIHdieXRlcyhkLCBiICsgMTIsIGZsKTtcbiAgICB3Ynl0ZXMoZCwgYiArIDE0LCBleGwpLCBiICs9IDE2O1xuICAgIGlmIChjZSAhPSBudWxsKSB7XG4gICAgICAgIHdieXRlcyhkLCBiLCBjb2wpO1xuICAgICAgICB3Ynl0ZXMoZCwgYiArIDYsIGYuYXR0cnMpO1xuICAgICAgICB3Ynl0ZXMoZCwgYiArIDEwLCBjZSksIGIgKz0gMTQ7XG4gICAgfVxuICAgIGQuc2V0KGZuLCBiKTtcbiAgICBiICs9IGZsO1xuICAgIGlmIChleGwpIHtcbiAgICAgICAgZm9yICh2YXIgayBpbiBleCkge1xuICAgICAgICAgICAgdmFyIGV4ZiA9IGV4W2tdLCBsID0gZXhmLmxlbmd0aDtcbiAgICAgICAgICAgIHdieXRlcyhkLCBiLCArayk7XG4gICAgICAgICAgICB3Ynl0ZXMoZCwgYiArIDIsIGwpO1xuICAgICAgICAgICAgZC5zZXQoZXhmLCBiICsgNCksIGIgKz0gNCArIGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbClcbiAgICAgICAgZC5zZXQoY28sIGIpLCBiICs9IGNvbDtcbiAgICByZXR1cm4gYjtcbn07XG4vLyB3cml0ZSB6aXAgZm9vdGVyIChlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkpXG52YXIgd3pmID0gZnVuY3Rpb24gKG8sIGIsIGMsIGQsIGUpIHtcbiAgICB3Ynl0ZXMobywgYiwgMHg2MDU0QjUwKTsgLy8gc2tpcCBkaXNrXG4gICAgd2J5dGVzKG8sIGIgKyA4LCBjKTtcbiAgICB3Ynl0ZXMobywgYiArIDEwLCBjKTtcbiAgICB3Ynl0ZXMobywgYiArIDEyLCBkKTtcbiAgICB3Ynl0ZXMobywgYiArIDE2LCBlKTtcbn07XG4vKipcbiAqIEEgcGFzcy10aHJvdWdoIHN0cmVhbSB0byBrZWVwIGRhdGEgdW5jb21wcmVzc2VkIGluIGEgWklQIGFyY2hpdmUuXG4gKi9cbnZhciBaaXBQYXNzVGhyb3VnaCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcGFzcy10aHJvdWdoIHN0cmVhbSB0aGF0IGNhbiBiZSBhZGRlZCB0byBaSVAgYXJjaGl2ZXNcbiAgICAgKiBAcGFyYW0gZmlsZW5hbWUgVGhlIGZpbGVuYW1lIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgZGF0YSBzdHJlYW1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBaaXBQYXNzVGhyb3VnaChmaWxlbmFtZSkge1xuICAgICAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWU7XG4gICAgICAgIHRoaXMuYyA9IGNyYygpO1xuICAgICAgICB0aGlzLnNpemUgPSAwO1xuICAgICAgICB0aGlzLmNvbXByZXNzaW9uID0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGEgY2h1bmsgYW5kIHB1c2hlcyB0byB0aGUgb3V0cHV0IHN0cmVhbS4gWW91IGNhbiBvdmVycmlkZSB0aGlzXG4gICAgICogbWV0aG9kIGluIGEgc3ViY2xhc3MgZm9yIGN1c3RvbSBiZWhhdmlvciwgYnV0IGJ5IGRlZmF1bHQgdGhpcyBwYXNzZXNcbiAgICAgKiB0aGUgZGF0YSB0aHJvdWdoLiBZb3UgbXVzdCBjYWxsIHRoaXMub25kYXRhKGVyciwgY2h1bmssIGZpbmFsKSBhdCBzb21lXG4gICAgICogcG9pbnQgaW4gdGhpcyBtZXRob2QuXG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwcm9jZXNzXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIFppcFBhc3NUaHJvdWdoLnByb3RvdHlwZS5wcm9jZXNzID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICB0aGlzLm9uZGF0YShudWxsLCBjaHVuaywgZmluYWwpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgYWRkZWQuIElmIHlvdSBhcmUgc3ViY2xhc3NpbmcgdGhpcyB3aXRoIGEgY3VzdG9tXG4gICAgICogY29tcHJlc3Npb24gYWxnb3JpdGhtLCBub3RlIHRoYXQgeW91IG11c3QgcHVzaCBkYXRhIGZyb20gdGhlIHNvdXJjZVxuICAgICAqIGZpbGUgb25seSwgcHJlLWNvbXByZXNzaW9uLlxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBaaXBQYXNzVGhyb3VnaC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgdGhpcy5jLnAoY2h1bmspO1xuICAgICAgICB0aGlzLnNpemUgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICBpZiAoZmluYWwpXG4gICAgICAgICAgICB0aGlzLmNyYyA9IHRoaXMuYy5kKCk7XG4gICAgICAgIHRoaXMucHJvY2VzcyhjaHVuaywgZmluYWwgfHwgZmFsc2UpO1xuICAgIH07XG4gICAgcmV0dXJuIFppcFBhc3NUaHJvdWdoO1xufSgpKTtcbmV4cG9ydCB7IFppcFBhc3NUaHJvdWdoIH07XG4vLyBJIGRvbid0IGV4dGVuZCBiZWNhdXNlIFR5cGVTY3JpcHQgZXh0ZW5zaW9uIGFkZHMgMWtCIG9mIHJ1bnRpbWUgYmxvYXRcbi8qKlxuICogU3RyZWFtaW5nIERFRkxBVEUgY29tcHJlc3Npb24gZm9yIFpJUCBhcmNoaXZlcy4gUHJlZmVyIHVzaW5nIEFzeW5jWmlwRGVmbGF0ZVxuICogZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICovXG52YXIgWmlwRGVmbGF0ZSA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgREVGTEFURSBzdHJlYW0gdGhhdCBjYW4gYmUgYWRkZWQgdG8gWklQIGFyY2hpdmVzXG4gICAgICogQHBhcmFtIGZpbGVuYW1lIFRoZSBmaWxlbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGRhdGEgc3RyZWFtXG4gICAgICogQHBhcmFtIG9wdHMgVGhlIGNvbXByZXNzaW9uIG9wdGlvbnNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBaaXBEZWZsYXRlKGZpbGVuYW1lLCBvcHRzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghb3B0cylcbiAgICAgICAgICAgIG9wdHMgPSB7fTtcbiAgICAgICAgWmlwUGFzc1Rocm91Z2guY2FsbCh0aGlzLCBmaWxlbmFtZSk7XG4gICAgICAgIHRoaXMuZCA9IG5ldyBEZWZsYXRlKG9wdHMsIGZ1bmN0aW9uIChkYXQsIGZpbmFsKSB7XG4gICAgICAgICAgICBfdGhpcy5vbmRhdGEobnVsbCwgZGF0LCBmaW5hbCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbXByZXNzaW9uID0gODtcbiAgICAgICAgdGhpcy5mbGFnID0gZGJmKG9wdHMubGV2ZWwpO1xuICAgIH1cbiAgICBaaXBEZWZsYXRlLnByb3RvdHlwZS5wcm9jZXNzID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kLnB1c2goY2h1bmssIGZpbmFsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5vbmRhdGEoZSwgbnVsbCwgZmluYWwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSBkZWZsYXRlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBaaXBEZWZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBaaXBQYXNzVGhyb3VnaC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBmaW5hbCk7XG4gICAgfTtcbiAgICByZXR1cm4gWmlwRGVmbGF0ZTtcbn0oKSk7XG5leHBvcnQgeyBaaXBEZWZsYXRlIH07XG4vKipcbiAqIEFzeW5jaHJvbm91cyBzdHJlYW1pbmcgREVGTEFURSBjb21wcmVzc2lvbiBmb3IgWklQIGFyY2hpdmVzXG4gKi9cbnZhciBBc3luY1ppcERlZmxhdGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhc3luY2hyb25vdXMgREVGTEFURSBzdHJlYW0gdGhhdCBjYW4gYmUgYWRkZWQgdG8gWklQIGFyY2hpdmVzXG4gICAgICogQHBhcmFtIGZpbGVuYW1lIFRoZSBmaWxlbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGRhdGEgc3RyZWFtXG4gICAgICogQHBhcmFtIG9wdHMgVGhlIGNvbXByZXNzaW9uIG9wdGlvbnNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBBc3luY1ppcERlZmxhdGUoZmlsZW5hbWUsIG9wdHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCFvcHRzKVxuICAgICAgICAgICAgb3B0cyA9IHt9O1xuICAgICAgICBaaXBQYXNzVGhyb3VnaC5jYWxsKHRoaXMsIGZpbGVuYW1lKTtcbiAgICAgICAgdGhpcy5kID0gbmV3IEFzeW5jRGVmbGF0ZShvcHRzLCBmdW5jdGlvbiAoZXJyLCBkYXQsIGZpbmFsKSB7XG4gICAgICAgICAgICBfdGhpcy5vbmRhdGEoZXJyLCBkYXQsIGZpbmFsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tcHJlc3Npb24gPSA4O1xuICAgICAgICB0aGlzLmZsYWcgPSBkYmYob3B0cy5sZXZlbCk7XG4gICAgICAgIHRoaXMudGVybWluYXRlID0gdGhpcy5kLnRlcm1pbmF0ZTtcbiAgICB9XG4gICAgQXN5bmNaaXBEZWZsYXRlLnByb3RvdHlwZS5wcm9jZXNzID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICB0aGlzLmQucHVzaChjaHVuaywgZmluYWwpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgZGVmbGF0ZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgQXN5bmNaaXBEZWZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBaaXBQYXNzVGhyb3VnaC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBmaW5hbCk7XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNaaXBEZWZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jWmlwRGVmbGF0ZSB9O1xuLy8gVE9ETzogQmV0dGVyIHRyZWUgc2hha2luZ1xuLyoqXG4gKiBBIHppcHBhYmxlIGFyY2hpdmUgdG8gd2hpY2ggZmlsZXMgY2FuIGluY3JlbWVudGFsbHkgYmUgYWRkZWRcbiAqL1xudmFyIFppcCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGVtcHR5IFpJUCBhcmNoaXZlIHRvIHdoaWNoIGZpbGVzIGNhbiBiZSBhZGRlZFxuICAgICAqIEBwYXJhbSBjYiBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuZXZlciBkYXRhIGZvciB0aGUgZ2VuZXJhdGVkIFpJUCBhcmNoaXZlXG4gICAgICogICAgICAgICAgIGlzIGF2YWlsYWJsZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFppcChjYikge1xuICAgICAgICB0aGlzLm9uZGF0YSA9IGNiO1xuICAgICAgICB0aGlzLnUgPSBbXTtcbiAgICAgICAgdGhpcy5kID0gMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZpbGUgdG8gdGhlIFpJUCBhcmNoaXZlXG4gICAgICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgc3RyZWFtIHRvIGFkZFxuICAgICAqL1xuICAgIFppcC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgLy8gZmluaXNoaW5nIG9yIGZpbmlzaGVkXG4gICAgICAgIGlmICh0aGlzLmQgJiAyKVxuICAgICAgICAgICAgdGhpcy5vbmRhdGEoZXJyKDQgKyAodGhpcy5kICYgMSkgKiA4LCAwLCAxKSwgbnVsbCwgZmFsc2UpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBmID0gc3RyVG9VOChmaWxlLmZpbGVuYW1lKSwgZmxfMSA9IGYubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGNvbSA9IGZpbGUuY29tbWVudCwgbyA9IGNvbSAmJiBzdHJUb1U4KGNvbSk7XG4gICAgICAgICAgICB2YXIgdSA9IGZsXzEgIT0gZmlsZS5maWxlbmFtZS5sZW5ndGggfHwgKG8gJiYgKGNvbS5sZW5ndGggIT0gby5sZW5ndGgpKTtcbiAgICAgICAgICAgIHZhciBobF8xID0gZmxfMSArIGV4ZmwoZmlsZS5leHRyYSkgKyAzMDtcbiAgICAgICAgICAgIGlmIChmbF8xID4gNjU1MzUpXG4gICAgICAgICAgICAgICAgdGhpcy5vbmRhdGEoZXJyKDExLCAwLCAxKSwgbnVsbCwgZmFsc2UpO1xuICAgICAgICAgICAgdmFyIGhlYWRlciA9IG5ldyB1OChobF8xKTtcbiAgICAgICAgICAgIHd6aChoZWFkZXIsIDAsIGZpbGUsIGYsIHUsIC0xKTtcbiAgICAgICAgICAgIHZhciBjaGtzXzEgPSBbaGVhZGVyXTtcbiAgICAgICAgICAgIHZhciBwQWxsXzEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBjaGtzXzIgPSBjaGtzXzE7IF9pIDwgY2hrc18yLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hrID0gY2hrc18yW19pXTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMub25kYXRhKG51bGwsIGNoaywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGtzXzEgPSBbXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgdHJfMSA9IHRoaXMuZDtcbiAgICAgICAgICAgIHRoaXMuZCA9IDA7XG4gICAgICAgICAgICB2YXIgaW5kXzEgPSB0aGlzLnUubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIHVmXzEgPSBtcmcoZmlsZSwge1xuICAgICAgICAgICAgICAgIGY6IGYsXG4gICAgICAgICAgICAgICAgdTogdSxcbiAgICAgICAgICAgICAgICBvOiBvLFxuICAgICAgICAgICAgICAgIHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGUudGVybWluYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcEFsbF8xKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0cl8xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnh0ID0gX3RoaXMudVtpbmRfMSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG54dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHQucigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmQgPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRyXzEgPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGNsXzEgPSAwO1xuICAgICAgICAgICAgZmlsZS5vbmRhdGEgPSBmdW5jdGlvbiAoZXJyLCBkYXQsIGZpbmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5vbmRhdGEoZXJyLCBkYXQsIGZpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjbF8xICs9IGRhdC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGNoa3NfMS5wdXNoKGRhdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRkID0gbmV3IHU4KDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdieXRlcyhkZCwgMCwgMHg4MDc0QjUwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdieXRlcyhkZCwgNCwgZmlsZS5jcmMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2J5dGVzKGRkLCA4LCBjbF8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdieXRlcyhkZCwgMTIsIGZpbGUuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGtzXzEucHVzaChkZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1Zl8xLmMgPSBjbF8xLCB1Zl8xLmIgPSBobF8xICsgY2xfMSArIDE2LCB1Zl8xLmNyYyA9IGZpbGUuY3JjLCB1Zl8xLnNpemUgPSBmaWxlLnNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJfMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Zl8xLnIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyXzEgPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRyXzEpXG4gICAgICAgICAgICAgICAgICAgICAgICBwQWxsXzEoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy51LnB1c2godWZfMSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEVuZHMgdGhlIHByb2Nlc3Mgb2YgYWRkaW5nIGZpbGVzIGFuZCBwcmVwYXJlcyB0byBlbWl0IHRoZSBmaW5hbCBjaHVua3MuXG4gICAgICogVGhpcyAqbXVzdCogYmUgY2FsbGVkIGFmdGVyIGFkZGluZyBhbGwgZGVzaXJlZCBmaWxlcyBmb3IgdGhlIHJlc3VsdGluZ1xuICAgICAqIFpJUCBmaWxlIHRvIHdvcmsgcHJvcGVybHkuXG4gICAgICovXG4gICAgWmlwLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLmQgJiAyKSB7XG4gICAgICAgICAgICB0aGlzLm9uZGF0YShlcnIoNCArICh0aGlzLmQgJiAxKSAqIDgsIDAsIDEpLCBudWxsLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kKVxuICAgICAgICAgICAgdGhpcy5lKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMudS5wdXNoKHtcbiAgICAgICAgICAgICAgICByOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKF90aGlzLmQgJiAxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudS5zcGxpY2UoLTEsIDEpO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5lKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0OiBmdW5jdGlvbiAoKSB7IH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmQgPSAzO1xuICAgIH07XG4gICAgWmlwLnByb3RvdHlwZS5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYnQgPSAwLCBsID0gMCwgdGwgPSAwO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy51OyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgdmFyIGYgPSBfYVtfaV07XG4gICAgICAgICAgICB0bCArPSA0NiArIGYuZi5sZW5ndGggKyBleGZsKGYuZXh0cmEpICsgKGYubyA/IGYuby5sZW5ndGggOiAwKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3V0ID0gbmV3IHU4KHRsICsgMjIpO1xuICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gdGhpcy51OyBfYiA8IF9jLmxlbmd0aDsgX2IrKykge1xuICAgICAgICAgICAgdmFyIGYgPSBfY1tfYl07XG4gICAgICAgICAgICB3emgob3V0LCBidCwgZiwgZi5mLCBmLnUsIC1mLmMgLSAyLCBsLCBmLm8pO1xuICAgICAgICAgICAgYnQgKz0gNDYgKyBmLmYubGVuZ3RoICsgZXhmbChmLmV4dHJhKSArIChmLm8gPyBmLm8ubGVuZ3RoIDogMCksIGwgKz0gZi5iO1xuICAgICAgICB9XG4gICAgICAgIHd6ZihvdXQsIGJ0LCB0aGlzLnUubGVuZ3RoLCB0bCwgbCk7XG4gICAgICAgIHRoaXMub25kYXRhKG51bGwsIG91dCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZCA9IDI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBIG1ldGhvZCB0byB0ZXJtaW5hdGUgYW55IGludGVybmFsIHdvcmtlcnMgdXNlZCBieSB0aGUgc3RyZWFtLiBTdWJzZXF1ZW50XG4gICAgICogY2FsbHMgdG8gYWRkKCkgd2lsbCBmYWlsLlxuICAgICAqL1xuICAgIFppcC5wcm90b3R5cGUudGVybWluYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy51OyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgdmFyIGYgPSBfYVtfaV07XG4gICAgICAgICAgICBmLnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmQgPSAyO1xuICAgIH07XG4gICAgcmV0dXJuIFppcDtcbn0oKSk7XG5leHBvcnQgeyBaaXAgfTtcbmV4cG9ydCBmdW5jdGlvbiB6aXAoZGF0YSwgb3B0cywgY2IpIHtcbiAgICBpZiAoIWNiKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNiICE9ICdmdW5jdGlvbicpXG4gICAgICAgIGVycig3KTtcbiAgICB2YXIgciA9IHt9O1xuICAgIGZsdG4oZGF0YSwgJycsIHIsIG9wdHMpO1xuICAgIHZhciBrID0gT2JqZWN0LmtleXMocik7XG4gICAgdmFyIGxmdCA9IGsubGVuZ3RoLCBvID0gMCwgdG90ID0gMDtcbiAgICB2YXIgc2xmdCA9IGxmdCwgZmlsZXMgPSBuZXcgQXJyYXkobGZ0KTtcbiAgICB2YXIgdGVybSA9IFtdO1xuICAgIHZhciB0QWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlcm0ubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICB0ZXJtW2ldKCk7XG4gICAgfTtcbiAgICB2YXIgY2JkID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgbXQoZnVuY3Rpb24gKCkgeyBjYihhLCBiKTsgfSk7XG4gICAgfTtcbiAgICBtdChmdW5jdGlvbiAoKSB7IGNiZCA9IGNiOyB9KTtcbiAgICB2YXIgY2JmID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3V0ID0gbmV3IHU4KHRvdCArIDIyKSwgb2UgPSBvLCBjZGwgPSB0b3QgLSBvO1xuICAgICAgICB0b3QgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsZnQ7ICsraSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmaWxlc1tpXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGwgPSBmLmMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHd6aChvdXQsIHRvdCwgZiwgZi5mLCBmLnUsIGwpO1xuICAgICAgICAgICAgICAgIHZhciBiYWRkID0gMzAgKyBmLmYubGVuZ3RoICsgZXhmbChmLmV4dHJhKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9jID0gdG90ICsgYmFkZDtcbiAgICAgICAgICAgICAgICBvdXQuc2V0KGYuYywgbG9jKTtcbiAgICAgICAgICAgICAgICB3emgob3V0LCBvLCBmLCBmLmYsIGYudSwgbCwgdG90LCBmLm0pLCBvICs9IDE2ICsgYmFkZCArIChmLm0gPyBmLm0ubGVuZ3RoIDogMCksIHRvdCA9IGxvYyArIGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYmQoZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd3pmKG91dCwgbywgZmlsZXMubGVuZ3RoLCBjZGwsIG9lKTtcbiAgICAgICAgY2JkKG51bGwsIG91dCk7XG4gICAgfTtcbiAgICBpZiAoIWxmdClcbiAgICAgICAgY2JmKCk7XG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICB2YXIgZm4gPSBrW2ldO1xuICAgICAgICB2YXIgX2EgPSByW2ZuXSwgZmlsZSA9IF9hWzBdLCBwID0gX2FbMV07XG4gICAgICAgIHZhciBjID0gY3JjKCksIHNpemUgPSBmaWxlLmxlbmd0aDtcbiAgICAgICAgYy5wKGZpbGUpO1xuICAgICAgICB2YXIgZiA9IHN0clRvVTgoZm4pLCBzID0gZi5sZW5ndGg7XG4gICAgICAgIHZhciBjb20gPSBwLmNvbW1lbnQsIG0gPSBjb20gJiYgc3RyVG9VOChjb20pLCBtcyA9IG0gJiYgbS5sZW5ndGg7XG4gICAgICAgIHZhciBleGwgPSBleGZsKHAuZXh0cmEpO1xuICAgICAgICB2YXIgY29tcHJlc3Npb24gPSBwLmxldmVsID09IDAgPyAwIDogODtcbiAgICAgICAgdmFyIGNibCA9IGZ1bmN0aW9uIChlLCBkKSB7XG4gICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgIHRBbGwoKTtcbiAgICAgICAgICAgICAgICBjYmQoZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IGQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZpbGVzW2ldID0gbXJnKHAsIHtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgY3JjOiBjLmQoKSxcbiAgICAgICAgICAgICAgICAgICAgYzogZCxcbiAgICAgICAgICAgICAgICAgICAgZjogZixcbiAgICAgICAgICAgICAgICAgICAgbTogbSxcbiAgICAgICAgICAgICAgICAgICAgdTogcyAhPSBmbi5sZW5ndGggfHwgKG0gJiYgKGNvbS5sZW5ndGggIT0gbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb246IGNvbXByZXNzaW9uXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbyArPSAzMCArIHMgKyBleGwgKyBsO1xuICAgICAgICAgICAgICAgIHRvdCArPSA3NiArIDIgKiAocyArIGV4bCkgKyAobXMgfHwgMCkgKyBsO1xuICAgICAgICAgICAgICAgIGlmICghLS1sZnQpXG4gICAgICAgICAgICAgICAgICAgIGNiZigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAocyA+IDY1NTM1KVxuICAgICAgICAgICAgY2JsKGVycigxMSwgMCwgMSksIG51bGwpO1xuICAgICAgICBpZiAoIWNvbXByZXNzaW9uKVxuICAgICAgICAgICAgY2JsKG51bGwsIGZpbGUpO1xuICAgICAgICBlbHNlIGlmIChzaXplIDwgMTYwMDAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNibChudWxsLCBkZWZsYXRlU3luYyhmaWxlLCBwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNibChlLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0ZXJtLnB1c2goZGVmbGF0ZShmaWxlLCBwLCBjYmwpKTtcbiAgICB9O1xuICAgIC8vIENhbm5vdCB1c2UgbGZ0IGJlY2F1c2UgaXQgY2FuIGRlY3JlYXNlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGZ0OyArK2kpIHtcbiAgICAgICAgX2xvb3BfMShpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRBbGw7XG59XG4vKipcbiAqIFN5bmNocm9ub3VzbHkgY3JlYXRlcyBhIFpJUCBmaWxlLiBQcmVmZXIgdXNpbmcgYHppcGAgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICogd2l0aCBtb3JlIHRoYW4gb25lIGZpbGUuXG4gKiBAcGFyYW0gZGF0YSBUaGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgdGhlIFpJUCBhcmNoaXZlXG4gKiBAcGFyYW0gb3B0cyBUaGUgbWFpbiBvcHRpb25zLCBtZXJnZWQgd2l0aCBwZXItZmlsZSBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZ2VuZXJhdGVkIFpJUCBhcmNoaXZlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6aXBTeW5jKGRhdGEsIG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpXG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICB2YXIgciA9IHt9O1xuICAgIHZhciBmaWxlcyA9IFtdO1xuICAgIGZsdG4oZGF0YSwgJycsIHIsIG9wdHMpO1xuICAgIHZhciBvID0gMDtcbiAgICB2YXIgdG90ID0gMDtcbiAgICBmb3IgKHZhciBmbiBpbiByKSB7XG4gICAgICAgIHZhciBfYSA9IHJbZm5dLCBmaWxlID0gX2FbMF0sIHAgPSBfYVsxXTtcbiAgICAgICAgdmFyIGNvbXByZXNzaW9uID0gcC5sZXZlbCA9PSAwID8gMCA6IDg7XG4gICAgICAgIHZhciBmID0gc3RyVG9VOChmbiksIHMgPSBmLmxlbmd0aDtcbiAgICAgICAgdmFyIGNvbSA9IHAuY29tbWVudCwgbSA9IGNvbSAmJiBzdHJUb1U4KGNvbSksIG1zID0gbSAmJiBtLmxlbmd0aDtcbiAgICAgICAgdmFyIGV4bCA9IGV4ZmwocC5leHRyYSk7XG4gICAgICAgIGlmIChzID4gNjU1MzUpXG4gICAgICAgICAgICBlcnIoMTEpO1xuICAgICAgICB2YXIgZCA9IGNvbXByZXNzaW9uID8gZGVmbGF0ZVN5bmMoZmlsZSwgcCkgOiBmaWxlLCBsID0gZC5sZW5ndGg7XG4gICAgICAgIHZhciBjID0gY3JjKCk7XG4gICAgICAgIGMucChmaWxlKTtcbiAgICAgICAgZmlsZXMucHVzaChtcmcocCwge1xuICAgICAgICAgICAgc2l6ZTogZmlsZS5sZW5ndGgsXG4gICAgICAgICAgICBjcmM6IGMuZCgpLFxuICAgICAgICAgICAgYzogZCxcbiAgICAgICAgICAgIGY6IGYsXG4gICAgICAgICAgICBtOiBtLFxuICAgICAgICAgICAgdTogcyAhPSBmbi5sZW5ndGggfHwgKG0gJiYgKGNvbS5sZW5ndGggIT0gbXMpKSxcbiAgICAgICAgICAgIG86IG8sXG4gICAgICAgICAgICBjb21wcmVzc2lvbjogY29tcHJlc3Npb25cbiAgICAgICAgfSkpO1xuICAgICAgICBvICs9IDMwICsgcyArIGV4bCArIGw7XG4gICAgICAgIHRvdCArPSA3NiArIDIgKiAocyArIGV4bCkgKyAobXMgfHwgMCkgKyBsO1xuICAgIH1cbiAgICB2YXIgb3V0ID0gbmV3IHU4KHRvdCArIDIyKSwgb2UgPSBvLCBjZGwgPSB0b3QgLSBvO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGYgPSBmaWxlc1tpXTtcbiAgICAgICAgd3poKG91dCwgZi5vLCBmLCBmLmYsIGYudSwgZi5jLmxlbmd0aCk7XG4gICAgICAgIHZhciBiYWRkID0gMzAgKyBmLmYubGVuZ3RoICsgZXhmbChmLmV4dHJhKTtcbiAgICAgICAgb3V0LnNldChmLmMsIGYubyArIGJhZGQpO1xuICAgICAgICB3emgob3V0LCBvLCBmLCBmLmYsIGYudSwgZi5jLmxlbmd0aCwgZi5vLCBmLm0pLCBvICs9IDE2ICsgYmFkZCArIChmLm0gPyBmLm0ubGVuZ3RoIDogMCk7XG4gICAgfVxuICAgIHd6ZihvdXQsIG8sIGZpbGVzLmxlbmd0aCwgY2RsLCBvZSk7XG4gICAgcmV0dXJuIG91dDtcbn1cbi8qKlxuICogU3RyZWFtaW5nIHBhc3MtdGhyb3VnaCBkZWNvbXByZXNzaW9uIGZvciBaSVAgYXJjaGl2ZXNcbiAqL1xudmFyIFVuemlwUGFzc1Rocm91Z2ggPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVW56aXBQYXNzVGhyb3VnaCgpIHtcbiAgICB9XG4gICAgVW56aXBQYXNzVGhyb3VnaC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBmaW5hbCkge1xuICAgICAgICB0aGlzLm9uZGF0YShudWxsLCBkYXRhLCBmaW5hbCk7XG4gICAgfTtcbiAgICBVbnppcFBhc3NUaHJvdWdoLmNvbXByZXNzaW9uID0gMDtcbiAgICByZXR1cm4gVW56aXBQYXNzVGhyb3VnaDtcbn0oKSk7XG5leHBvcnQgeyBVbnppcFBhc3NUaHJvdWdoIH07XG4vKipcbiAqIFN0cmVhbWluZyBERUZMQVRFIGRlY29tcHJlc3Npb24gZm9yIFpJUCBhcmNoaXZlcy4gUHJlZmVyIEFzeW5jWmlwSW5mbGF0ZSBmb3JcbiAqIGJldHRlciBwZXJmb3JtYW5jZS5cbiAqL1xudmFyIFVuemlwSW5mbGF0ZSA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgREVGTEFURSBkZWNvbXByZXNzaW9uIHRoYXQgY2FuIGJlIHVzZWQgaW4gWklQIGFyY2hpdmVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gVW56aXBJbmZsYXRlKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmkgPSBuZXcgSW5mbGF0ZShmdW5jdGlvbiAoZGF0LCBmaW5hbCkge1xuICAgICAgICAgICAgX3RoaXMub25kYXRhKG51bGwsIGRhdCwgZmluYWwpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgVW56aXBJbmZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIGZpbmFsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmkucHVzaChkYXRhLCBmaW5hbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMub25kYXRhKGUsIG51bGwsIGZpbmFsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVW56aXBJbmZsYXRlLmNvbXByZXNzaW9uID0gODtcbiAgICByZXR1cm4gVW56aXBJbmZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IFVuemlwSW5mbGF0ZSB9O1xuLyoqXG4gKiBBc3luY2hyb25vdXMgc3RyZWFtaW5nIERFRkxBVEUgZGVjb21wcmVzc2lvbiBmb3IgWklQIGFyY2hpdmVzXG4gKi9cbnZhciBBc3luY1VuemlwSW5mbGF0ZSA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgREVGTEFURSBkZWNvbXByZXNzaW9uIHRoYXQgY2FuIGJlIHVzZWQgaW4gWklQIGFyY2hpdmVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gQXN5bmNVbnppcEluZmxhdGUoXywgc3opIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHN6IDwgMzIwMDAwKSB7XG4gICAgICAgICAgICB0aGlzLmkgPSBuZXcgSW5mbGF0ZShmdW5jdGlvbiAoZGF0LCBmaW5hbCkge1xuICAgICAgICAgICAgICAgIF90aGlzLm9uZGF0YShudWxsLCBkYXQsIGZpbmFsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pID0gbmV3IEFzeW5jSW5mbGF0ZShmdW5jdGlvbiAoZXJyLCBkYXQsIGZpbmFsKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMub25kYXRhKGVyciwgZGF0LCBmaW5hbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGVybWluYXRlID0gdGhpcy5pLnRlcm1pbmF0ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBBc3luY1VuemlwSW5mbGF0ZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBmaW5hbCkge1xuICAgICAgICBpZiAodGhpcy5pLnRlcm1pbmF0ZSlcbiAgICAgICAgICAgIGRhdGEgPSBzbGMoZGF0YSwgMCk7XG4gICAgICAgIHRoaXMuaS5wdXNoKGRhdGEsIGZpbmFsKTtcbiAgICB9O1xuICAgIEFzeW5jVW56aXBJbmZsYXRlLmNvbXByZXNzaW9uID0gODtcbiAgICByZXR1cm4gQXN5bmNVbnppcEluZmxhdGU7XG59KCkpO1xuZXhwb3J0IHsgQXN5bmNVbnppcEluZmxhdGUgfTtcbi8qKlxuICogQSBaSVAgYXJjaGl2ZSBkZWNvbXByZXNzaW9uIHN0cmVhbSB0aGF0IGVtaXRzIGZpbGVzIGFzIHRoZXkgYXJlIGRpc2NvdmVyZWRcbiAqL1xudmFyIFVuemlwID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBaSVAgZGVjb21wcmVzc2lvbiBzdHJlYW1cbiAgICAgKiBAcGFyYW0gY2IgVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbmV2ZXIgYSBmaWxlIGluIHRoZSBaSVAgYXJjaGl2ZSBpcyBmb3VuZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFVuemlwKGNiKSB7XG4gICAgICAgIHRoaXMub25maWxlID0gY2I7XG4gICAgICAgIHRoaXMuayA9IFtdO1xuICAgICAgICB0aGlzLm8gPSB7XG4gICAgICAgICAgICAwOiBVbnppcFBhc3NUaHJvdWdoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucCA9IGV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSB1bnppcHBlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBVbnppcC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLm9uZmlsZSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgaWYgKCF0aGlzLnApXG4gICAgICAgICAgICBlcnIoNCk7XG4gICAgICAgIGlmICh0aGlzLmMgPiAwKSB7XG4gICAgICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4odGhpcy5jLCBjaHVuay5sZW5ndGgpO1xuICAgICAgICAgICAgdmFyIHRvQWRkID0gY2h1bmsuc3ViYXJyYXkoMCwgbGVuKTtcbiAgICAgICAgICAgIHRoaXMuYyAtPSBsZW47XG4gICAgICAgICAgICBpZiAodGhpcy5kKVxuICAgICAgICAgICAgICAgIHRoaXMuZC5wdXNoKHRvQWRkLCAhdGhpcy5jKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmtbMF0ucHVzaCh0b0FkZCk7XG4gICAgICAgICAgICBjaHVuayA9IGNodW5rLnN1YmFycmF5KGxlbik7XG4gICAgICAgICAgICBpZiAoY2h1bmsubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2goY2h1bmssIGZpbmFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBmID0gMCwgaSA9IDAsIGlzID0gdm9pZCAwLCBidWYgPSB2b2lkIDA7XG4gICAgICAgICAgICBpZiAoIXRoaXMucC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYnVmID0gY2h1bms7XG4gICAgICAgICAgICBlbHNlIGlmICghY2h1bmsubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGJ1ZiA9IHRoaXMucDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1ZiA9IG5ldyB1OCh0aGlzLnAubGVuZ3RoICsgY2h1bmsubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBidWYuc2V0KHRoaXMucCksIGJ1Zi5zZXQoY2h1bmssIHRoaXMucC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGwgPSBidWYubGVuZ3RoLCBvYyA9IHRoaXMuYywgYWRkID0gb2MgJiYgdGhpcy5kO1xuICAgICAgICAgICAgdmFyIF9sb29wXzIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHZhciBzaWcgPSBiNChidWYsIGkpO1xuICAgICAgICAgICAgICAgIGlmIChzaWcgPT0gMHg0MDM0QjUwKSB7XG4gICAgICAgICAgICAgICAgICAgIGYgPSAxLCBpcyA9IGk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNfMS5kID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpc18xLmMgPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmYgPSBiMihidWYsIGkgKyA2KSwgY21wXzEgPSBiMihidWYsIGkgKyA4KSwgdSA9IGJmICYgMjA0OCwgZGQgPSBiZiAmIDgsIGZubCA9IGIyKGJ1ZiwgaSArIDI2KSwgZXMgPSBiMihidWYsIGkgKyAyOCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsID4gaSArIDMwICsgZm5sICsgZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGtzXzMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfMS5rLnVuc2hpZnQoY2hrc18zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjXzEgPSBiNChidWYsIGkgKyAxOCksIHN1XzEgPSBiNChidWYsIGkgKyAyMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5fMSA9IHN0ckZyb21VOChidWYuc3ViYXJyYXkoaSArIDMwLCBpICs9IDMwICsgZm5sKSwgIXUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjXzEgPT0gNDI5NDk2NzI5NSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hID0gZGQgPyBbLTJdIDogejY0ZShidWYsIGkpLCBzY18xID0gX2FbMF0sIHN1XzEgPSBfYVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjXzEgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzXzEuYyA9IHNjXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZF8xO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGVfMSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmbl8xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uOiBjbXBfMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfMS5vbmRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2NfMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfMS5vbmRhdGEobnVsbCwgZXQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHIgPSBfdGhpcy5vW2NtcF8xXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3RyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfMS5vbmRhdGEoZXJyKDE0LCAndW5rbm93biBjb21wcmVzc2lvbiB0eXBlICcgKyBjbXBfMSwgMSksIG51bGwsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfMSA9IHNjXzEgPCAwID8gbmV3IGN0cihmbl8xKSA6IG5ldyBjdHIoZm5fMSwgc2NfMSwgc3VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkXzEub25kYXRhID0gZnVuY3Rpb24gKGVyciwgZGF0LCBmaW5hbCkgeyBmaWxlXzEub25kYXRhKGVyciwgZGF0LCBmaW5hbCk7IH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGNoa3NfNCA9IGNoa3NfMzsgX2kgPCBjaGtzXzQubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdCA9IGNoa3NfNFtfaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZF8xLnB1c2goZGF0LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMua1swXSA9PSBjaGtzXzMgJiYgX3RoaXMuYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5kID0gZF8xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfMS5wdXNoKGV0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkXzEgJiYgZF8xLnRlcm1pbmF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfMS50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjXzEgPj0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlXzEuc2l6ZSA9IHNjXzEsIGZpbGVfMS5vcmlnaW5hbFNpemUgPSBzdV8xO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18xLm9uZmlsZShmaWxlXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9jKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaWcgPT0gMHg4MDc0QjUwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpcyA9IGkgKz0gMTIgKyAob2MgPT0gLTIgJiYgOCksIGYgPSAzLCB0aGlzXzEuYyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpZyA9PSAweDIwMTRCNTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzID0gaSAtPSA0LCBmID0gMywgdGhpc18xLmMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgdGhpc18xID0gdGhpcztcbiAgICAgICAgICAgIGZvciAoOyBpIDwgbCAtIDQ7ICsraSkge1xuICAgICAgICAgICAgICAgIHZhciBzdGF0ZV8xID0gX2xvb3BfMigpO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZV8xID09PSBcImJyZWFrXCIpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wID0gZXQ7XG4gICAgICAgICAgICBpZiAob2MgPCAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdCA9IGYgPyBidWYuc3ViYXJyYXkoMCwgaXMgLSAxMiAtIChvYyA9PSAtMiAmJiA4KSAtIChiNChidWYsIGlzIC0gMTYpID09IDB4ODA3NEI1MCAmJiA0KSkgOiBidWYuc3ViYXJyYXkoMCwgaSk7XG4gICAgICAgICAgICAgICAgaWYgKGFkZClcbiAgICAgICAgICAgICAgICAgICAgYWRkLnB1c2goZGF0LCAhIWYpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5rWysoZiA9PSAyKV0ucHVzaChkYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGYgJiAyKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2goYnVmLnN1YmFycmF5KGkpLCBmaW5hbCk7XG4gICAgICAgICAgICB0aGlzLnAgPSBidWYuc3ViYXJyYXkoaSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbmFsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jKVxuICAgICAgICAgICAgICAgIGVycigxMyk7XG4gICAgICAgICAgICB0aGlzLnAgPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBkZWNvZGVyIHdpdGggdGhlIHN0cmVhbSwgYWxsb3dpbmcgZm9yIGZpbGVzIGNvbXByZXNzZWQgd2l0aFxuICAgICAqIHRoZSBjb21wcmVzc2lvbiB0eXBlIHByb3ZpZGVkIHRvIGJlIGV4cGFuZGVkIGNvcnJlY3RseVxuICAgICAqIEBwYXJhbSBkZWNvZGVyIFRoZSBkZWNvZGVyIGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgVW56aXAucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gKGRlY29kZXIpIHtcbiAgICAgICAgdGhpcy5vW2RlY29kZXIuY29tcHJlc3Npb25dID0gZGVjb2RlcjtcbiAgICB9O1xuICAgIHJldHVybiBVbnppcDtcbn0oKSk7XG5leHBvcnQgeyBVbnppcCB9O1xudmFyIG10ID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrID09ICdmdW5jdGlvbicgPyBxdWV1ZU1pY3JvdGFzayA6IHR5cGVvZiBzZXRUaW1lb3V0ID09ICdmdW5jdGlvbicgPyBzZXRUaW1lb3V0IDogZnVuY3Rpb24gKGZuKSB7IGZuKCk7IH07XG5leHBvcnQgZnVuY3Rpb24gdW56aXAoZGF0YSwgb3B0cywgY2IpIHtcbiAgICBpZiAoIWNiKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNiICE9ICdmdW5jdGlvbicpXG4gICAgICAgIGVycig3KTtcbiAgICB2YXIgdGVybSA9IFtdO1xuICAgIHZhciB0QWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlcm0ubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICB0ZXJtW2ldKCk7XG4gICAgfTtcbiAgICB2YXIgZmlsZXMgPSB7fTtcbiAgICB2YXIgY2JkID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgbXQoZnVuY3Rpb24gKCkgeyBjYihhLCBiKTsgfSk7XG4gICAgfTtcbiAgICBtdChmdW5jdGlvbiAoKSB7IGNiZCA9IGNiOyB9KTtcbiAgICB2YXIgZSA9IGRhdGEubGVuZ3RoIC0gMjI7XG4gICAgZm9yICg7IGI0KGRhdGEsIGUpICE9IDB4NjA1NEI1MDsgLS1lKSB7XG4gICAgICAgIGlmICghZSB8fCBkYXRhLmxlbmd0aCAtIGUgPiA2NTU1OCkge1xuICAgICAgICAgICAgY2JkKGVycigxMywgMCwgMSksIG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuIHRBbGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgO1xuICAgIHZhciBsZnQgPSBiMihkYXRhLCBlICsgOCk7XG4gICAgaWYgKGxmdCkge1xuICAgICAgICB2YXIgYyA9IGxmdDtcbiAgICAgICAgdmFyIG8gPSBiNChkYXRhLCBlICsgMTYpO1xuICAgICAgICB2YXIgeiA9IG8gPT0gNDI5NDk2NzI5NSB8fCBjID09IDY1NTM1O1xuICAgICAgICBpZiAoeikge1xuICAgICAgICAgICAgdmFyIHplID0gYjQoZGF0YSwgZSAtIDEyKTtcbiAgICAgICAgICAgIHogPSBiNChkYXRhLCB6ZSkgPT0gMHg2MDY0QjUwO1xuICAgICAgICAgICAgaWYgKHopIHtcbiAgICAgICAgICAgICAgICBjID0gbGZ0ID0gYjQoZGF0YSwgemUgKyAzMik7XG4gICAgICAgICAgICAgICAgbyA9IGI0KGRhdGEsIHplICsgNDgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBmbHRyID0gb3B0cyAmJiBvcHRzLmZpbHRlcjtcbiAgICAgICAgdmFyIF9sb29wXzMgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgdmFyIF9hID0gemgoZGF0YSwgbywgeiksIGNfMSA9IF9hWzBdLCBzYyA9IF9hWzFdLCBzdSA9IF9hWzJdLCBmbiA9IF9hWzNdLCBubyA9IF9hWzRdLCBvZmYgPSBfYVs1XSwgYiA9IHNsemgoZGF0YSwgb2ZmKTtcbiAgICAgICAgICAgIG8gPSBubztcbiAgICAgICAgICAgIHZhciBjYmwgPSBmdW5jdGlvbiAoZSwgZCkge1xuICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgY2JkKGUsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGQpXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1tmbl0gPSBkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIS0tbGZ0KVxuICAgICAgICAgICAgICAgICAgICAgICAgY2JkKG51bGwsIGZpbGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCFmbHRyIHx8IGZsdHIoe1xuICAgICAgICAgICAgICAgIG5hbWU6IGZuLFxuICAgICAgICAgICAgICAgIHNpemU6IHNjLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsU2l6ZTogc3UsXG4gICAgICAgICAgICAgICAgY29tcHJlc3Npb246IGNfMVxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNfMSlcbiAgICAgICAgICAgICAgICAgICAgY2JsKG51bGwsIHNsYyhkYXRhLCBiLCBiICsgc2MpKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjXzEgPT0gOCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5mbCA9IGRhdGEuc3ViYXJyYXkoYiwgYiArIHNjKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3luY2hyb25vdXNseSBkZWNvbXByZXNzIHVuZGVyIDUxMktCLCBvciBiYXJlbHktY29tcHJlc3NlZCBkYXRhXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdSA8IDUyNDI4OCB8fCBzYyA+IDAuOCAqIHN1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNibChudWxsLCBpbmZsYXRlU3luYyhpbmZsLCB7IG91dDogbmV3IHU4KHN1KSB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNibChlLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtLnB1c2goaW5mbGF0ZShpbmZsLCB7IHNpemU6IHN1IH0sIGNibCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGNibChlcnIoMTQsICd1bmtub3duIGNvbXByZXNzaW9uIHR5cGUgJyArIGNfMSwgMSksIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGNibChudWxsLCBudWxsKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjOyArK2kpIHtcbiAgICAgICAgICAgIF9sb29wXzMoaSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgICAgICBjYmQobnVsbCwge30pO1xuICAgIHJldHVybiB0QWxsO1xufVxuLyoqXG4gKiBTeW5jaHJvbm91c2x5IGRlY29tcHJlc3NlcyBhIFpJUCBhcmNoaXZlLiBQcmVmZXIgdXNpbmcgYHVuemlwYCBmb3IgYmV0dGVyXG4gKiBwZXJmb3JtYW5jZSB3aXRoIG1vcmUgdGhhbiBvbmUgZmlsZS5cbiAqIEBwYXJhbSBkYXRhIFRoZSByYXcgY29tcHJlc3NlZCBaSVAgZmlsZVxuICogQHBhcmFtIG9wdHMgVGhlIFpJUCBleHRyYWN0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBkZWNvbXByZXNzZWQgZmlsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuemlwU3luYyhkYXRhLCBvcHRzKSB7XG4gICAgdmFyIGZpbGVzID0ge307XG4gICAgdmFyIGUgPSBkYXRhLmxlbmd0aCAtIDIyO1xuICAgIGZvciAoOyBiNChkYXRhLCBlKSAhPSAweDYwNTRCNTA7IC0tZSkge1xuICAgICAgICBpZiAoIWUgfHwgZGF0YS5sZW5ndGggLSBlID4gNjU1NTgpXG4gICAgICAgICAgICBlcnIoMTMpO1xuICAgIH1cbiAgICA7XG4gICAgdmFyIGMgPSBiMihkYXRhLCBlICsgOCk7XG4gICAgaWYgKCFjKVxuICAgICAgICByZXR1cm4ge307XG4gICAgdmFyIG8gPSBiNChkYXRhLCBlICsgMTYpO1xuICAgIHZhciB6ID0gbyA9PSA0Mjk0OTY3Mjk1IHx8IGMgPT0gNjU1MzU7XG4gICAgaWYgKHopIHtcbiAgICAgICAgdmFyIHplID0gYjQoZGF0YSwgZSAtIDEyKTtcbiAgICAgICAgeiA9IGI0KGRhdGEsIHplKSA9PSAweDYwNjRCNTA7XG4gICAgICAgIGlmICh6KSB7XG4gICAgICAgICAgICBjID0gYjQoZGF0YSwgemUgKyAzMik7XG4gICAgICAgICAgICBvID0gYjQoZGF0YSwgemUgKyA0OCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGZsdHIgPSBvcHRzICYmIG9wdHMuZmlsdGVyO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYzsgKytpKSB7XG4gICAgICAgIHZhciBfYSA9IHpoKGRhdGEsIG8sIHopLCBjXzIgPSBfYVswXSwgc2MgPSBfYVsxXSwgc3UgPSBfYVsyXSwgZm4gPSBfYVszXSwgbm8gPSBfYVs0XSwgb2ZmID0gX2FbNV0sIGIgPSBzbHpoKGRhdGEsIG9mZik7XG4gICAgICAgIG8gPSBubztcbiAgICAgICAgaWYgKCFmbHRyIHx8IGZsdHIoe1xuICAgICAgICAgICAgbmFtZTogZm4sXG4gICAgICAgICAgICBzaXplOiBzYyxcbiAgICAgICAgICAgIG9yaWdpbmFsU2l6ZTogc3UsXG4gICAgICAgICAgICBjb21wcmVzc2lvbjogY18yXG4gICAgICAgIH0pKSB7XG4gICAgICAgICAgICBpZiAoIWNfMilcbiAgICAgICAgICAgICAgICBmaWxlc1tmbl0gPSBzbGMoZGF0YSwgYiwgYiArIHNjKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNfMiA9PSA4KVxuICAgICAgICAgICAgICAgIGZpbGVzW2ZuXSA9IGluZmxhdGVTeW5jKGRhdGEuc3ViYXJyYXkoYiwgYiArIHNjKSwgeyBvdXQ6IG5ldyB1OChzdSkgfSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZXJyKDE0LCAndW5rbm93biBjb21wcmVzc2lvbiB0eXBlICcgKyBjXzIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWxlcztcbn1cbiIsICJjb25zdCBkZWZhdWx0RXJyb3JDb25maWcgPSB7XHJcbiAgICB3aXRoU3RhY2tUcmFjZTogZmFsc2UsXHJcbn07XHJcbi8vIEN1c3RvbSBlcnJvciBvYmplY3RcclxuLy8gQ29udGV4dCAvIGRpc2N1c3Npb246IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBlcm1hY3JvL25ldmVydGhyb3cvcHVsbC8yMTVcclxuY29uc3QgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yID0gKG1lc3NhZ2UsIHJlc3VsdCwgY29uZmlnID0gZGVmYXVsdEVycm9yQ29uZmlnKSA9PiB7XHJcbiAgICBjb25zdCBkYXRhID0gcmVzdWx0LmlzT2soKVxyXG4gICAgICAgID8geyB0eXBlOiAnT2snLCB2YWx1ZTogcmVzdWx0LnZhbHVlIH1cclxuICAgICAgICA6IHsgdHlwZTogJ0VycicsIHZhbHVlOiByZXN1bHQuZXJyb3IgfTtcclxuICAgIGNvbnN0IG1heWJlU3RhY2sgPSBjb25maWcud2l0aFN0YWNrVHJhY2UgPyBuZXcgRXJyb3IoKS5zdGFjayA6IHVuZGVmaW5lZDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgIHN0YWNrOiBtYXliZVN0YWNrLFxyXG4gICAgfTtcclxufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG5jbGFzcyBSZXN1bHRBc3luYyB7XHJcbiAgICBjb25zdHJ1Y3RvcihyZXMpIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlID0gcmVzO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21TYWZlUHJvbWlzZShwcm9taXNlKSB7XHJcbiAgICAgICAgY29uc3QgbmV3UHJvbWlzZSA9IHByb21pc2UudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMobmV3UHJvbWlzZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbVByb21pc2UocHJvbWlzZSwgZXJyb3JGbikge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlXHJcbiAgICAgICAgICAgIC50aGVuKCh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKSlcclxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiBuZXcgRXJyKGVycm9yRm4oZSkpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIHN0YXRpYyBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMoKCgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPayh5aWVsZCBmbiguLi5hcmdzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihlcnJvckZuID8gZXJyb3JGbihlcnJvcikgOiBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKSgpKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNvbWJpbmUoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3QoYXN5bmNSZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lV2l0aEFsbEVycm9ycyhhc3luY1Jlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIG1hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayh5aWVsZCBmKHJlcy52YWx1ZSkpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBuZXdSZXMgPSB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChuZXdSZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIobmV3UmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHlpZWxkIGYocmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVGVlIGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc09rKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycih5aWVsZCBmKHJlcy5lcnJvcikpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZSBpbnN0YW5jZW9mIFJlc3VsdEFzeW5jID8gbmV3VmFsdWUuX3Byb21pc2UgOiBuZXdWYWx1ZTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGYocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIG1hdGNoKG9rLCBfZXJyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMubWF0Y2gob2ssIF9lcnIpKTtcclxuICAgIH1cclxuICAgIHVud3JhcE9yKHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy51bndyYXBPcih0KSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiA5LjAuMC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIHVzZSBgc2FmZVRyeWAgd2l0aG91dCB0aGlzIG1ldGhvZC5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBzYWZlVHJ5KGFzeW5jIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgKiAgIGNvbnN0IG9rVmFsdWUgPSB5aWVsZCogeW91clJlc3VsdFxyXG4gICAgICogfSlcclxuICAgICAqIGBgYFxyXG4gICAgICogRW11bGF0ZXMgUnVzdCdzIGA/YCBvcGVyYXRvciBpbiBgc2FmZVRyeWAncyBib2R5LiBTZWUgYWxzbyBgc2FmZVRyeWAuXHJcbiAgICAgKi9cclxuICAgIHNhZmVVbndyYXAoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogc2FmZVVud3JhcF8xKCkge1xyXG4gICAgICAgICAgICByZXR1cm4geWllbGQgX19hd2FpdCh5aWVsZCBfX2F3YWl0KHlpZWxkKiBfX2FzeW5jRGVsZWdhdG9yKF9fYXN5bmNWYWx1ZXMoeWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLnNhZmVVbndyYXAoKSkpKSkpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIE1ha2VzIFJlc3VsdEFzeW5jIGltcGxlbWVudCBQcm9taXNlTGlrZTxSZXN1bHQ+XHJcbiAgICB0aGVuKHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIF9hKCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBfX2F3YWl0KHRoaXMuX3Byb21pc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgICAgICAgICAgeWllbGQgeWllbGQgX19hd2FpdChlcnJBc3luYyhyZXN1bHQuZXJyb3IpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5jb25zdCBva0FzeW5jID0gKHZhbHVlKSA9PiBuZXcgUmVzdWx0QXN5bmMoUHJvbWlzZS5yZXNvbHZlKG5ldyBPayh2YWx1ZSkpKTtcclxuY29uc3QgZXJyQXN5bmMgPSAoZXJyKSA9PiBuZXcgUmVzdWx0QXN5bmMoUHJvbWlzZS5yZXNvbHZlKG5ldyBFcnIoZXJyKSkpO1xyXG5jb25zdCBmcm9tUHJvbWlzZSA9IFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlO1xyXG5jb25zdCBmcm9tU2FmZVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2U7XHJcbmNvbnN0IGZyb21Bc3luY1Rocm93YWJsZSA9IFJlc3VsdEFzeW5jLmZyb21UaHJvd2FibGU7XG5cbi8qKlxyXG4gKiBTaG9ydCBjaXJjdWl0cyBvbiB0aGUgRklSU1QgRXJyIHZhbHVlIHRoYXQgd2UgZmluZFxyXG4gKi9cclxuY29uc3QgY29tYmluZVJlc3VsdExpc3QgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjID0gZXJyKHJlc3VsdC5lcnJvcik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYWNjLm1hcCgobGlzdCkgPT4gbGlzdC5wdXNoKHJlc3VsdC52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbi8qIFRoaXMgaXMgdGhlIHR5cGVzYWZlIHZlcnNpb24gb2YgUHJvbWlzZS5hbGxcclxuICpcclxuICogVGFrZXMgYSBsaXN0IG9mIFJlc3VsdEFzeW5jPFQsIEU+IGFuZCBzdWNjZXNzIGlmIGFsbCBpbm5lciByZXN1bHRzIGFyZSBPayB2YWx1ZXNcclxuICogb3IgZmFpbHMgaWYgb25lIChvciBtb3JlKSBvZiB0aGUgaW5uZXIgcmVzdWx0cyBhcmUgRXJyIHZhbHVlc1xyXG4gKi9cclxuY29uc3QgY29tYmluZVJlc3VsdEFzeW5jTGlzdCA9IChhc3luY1Jlc3VsdExpc3QpID0+IFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZShQcm9taXNlLmFsbChhc3luY1Jlc3VsdExpc3QpKS5hbmRUaGVuKGNvbWJpbmVSZXN1bHRMaXN0KTtcclxuLyoqXHJcbiAqIEdpdmUgYSBsaXN0IG9mIGFsbCB0aGUgZXJyb3JzIHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyA9IChyZXN1bHRMaXN0KSA9PiB7XHJcbiAgICBsZXQgYWNjID0gb2soW10pO1xyXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0TGlzdCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSAmJiBhY2MuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICBhY2MuZXJyb3IucHVzaChyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNFcnIoKSAmJiBhY2MuaXNPaygpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihbcmVzdWx0LmVycm9yXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MudmFsdWUucHVzaChyZXN1bHQudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gcmVzdWx0LmlzT2soKSAmJiBhY2MuaXNFcnIoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjYztcclxufTtcclxuY29uc3QgY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxyXG52YXIgUmVzdWx0O1xyXG4oZnVuY3Rpb24gKFJlc3VsdCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBXcmFwcyBhIGZ1bmN0aW9uIHdpdGggYSB0cnkgY2F0Y2gsIGNyZWF0aW5nIGEgbmV3IGZ1bmN0aW9uIHdpdGggdGhlIHNhbWVcclxuICAgICAqIGFyZ3VtZW50cyBidXQgcmV0dXJuaW5nIGBPa2AgaWYgc3VjY2Vzc2Z1bCwgYEVycmAgaWYgdGhlIGZ1bmN0aW9uIHRocm93c1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmbiBmdW5jdGlvbiB0byB3cmFwIHdpdGggb2sgb24gc3VjY2VzcyBvciBlcnIgb24gZmFpbHVyZVxyXG4gICAgICogQHBhcmFtIGVycm9yRm4gd2hlbiBhbiBlcnJvciBpcyB0aHJvd24sIHRoaXMgd2lsbCB3cmFwIHRoZSBlcnJvciByZXN1bHQgaWYgcHJvdmlkZWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIGZ1bmN0aW9uIGZyb21UaHJvd2FibGUoZm4sIGVycm9yRm4pIHtcclxuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9rKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnIoZXJyb3JGbiA/IGVycm9yRm4oZSkgOiBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuZnJvbVRocm93YWJsZSA9IGZyb21UaHJvd2FibGU7XHJcbiAgICBmdW5jdGlvbiBjb21iaW5lKHJlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdExpc3QocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZSA9IGNvbWJpbmU7XHJcbiAgICBmdW5jdGlvbiBjb21iaW5lV2l0aEFsbEVycm9ycyhyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyhyZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIFJlc3VsdC5jb21iaW5lV2l0aEFsbEVycm9ycyA9IGNvbWJpbmVXaXRoQWxsRXJyb3JzO1xyXG59KShSZXN1bHQgfHwgKFJlc3VsdCA9IHt9KSk7XHJcbmNvbnN0IG9rID0gKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpO1xyXG5mdW5jdGlvbiBlcnIoZXJyKSB7XHJcbiAgICByZXR1cm4gbmV3IEVycihlcnIpO1xyXG59XHJcbmZ1bmN0aW9uIHNhZmVUcnkoYm9keSkge1xyXG4gICAgY29uc3QgbiA9IGJvZHkoKS5uZXh0KCk7XHJcbiAgICBpZiAobiBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG4udGhlbigocikgPT4gci52YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG4udmFsdWU7XHJcbn1cclxuY2xhc3MgT2sge1xyXG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBpc09rKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIG1hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKGYodGhpcy52YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWFwRXJyKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRocm91Z2goZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpLm1hcCgoX3ZhbHVlKSA9PiB0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShmKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZih0aGlzLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gVGVlIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZXJyb3JcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhlbihmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYXN5bmNBbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKCkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY01hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZShmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIHVud3JhcE9yKF92KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHNhZmVVbndyYXAoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLXlpZWxkICovXHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfSkoKTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXAoXykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihjb25maWcpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVOZXZlclRocm93RXJyb3IoJ0NhbGxlZCBgX3Vuc2FmZVVud3JhcEVycmAgb24gYW4gT2snLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzLCByZXF1aXJlLXlpZWxkXHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbn1cclxuY2xhc3MgRXJyIHtcclxuICAgIGNvbnN0cnVjdG9yKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpc0VycigpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNPaygpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIG1hcEVycihmKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycihmKHRoaXMuZXJyb3IpKTtcclxuICAgIH1cclxuICAgIGFuZFRocm91Z2goX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgYW5kVGVlKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYXN5bmNBbmRUaGVuKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNBbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYXN5bmNNYXAoX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyQXN5bmModGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih2KSB7XHJcbiAgICAgICAgcmV0dXJuIHY7XHJcbiAgICB9XHJcbiAgICBtYXRjaChfb2ssIGVycikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5lcnJvcjtcclxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHlpZWxkIGVycihlcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG8gbm90IHVzZSB0aGlzIGdlbmVyYXRvciBvdXQgb2YgYHNhZmVUcnlgJyk7XHJcbiAgICAgICAgfSkoKTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXAoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBgIG9uIGFuIEVycicsIHRoaXMsIGNvbmZpZyk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwRXJyKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvcjtcclxuICAgIH1cclxuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICB5aWVsZCBzZWxmO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IGZyb21UaHJvd2FibGUgPSBSZXN1bHQuZnJvbVRocm93YWJsZTtcclxuLy8jZW5kcmVnaW9uXG5cbmV4cG9ydCB7IEVyciwgT2ssIFJlc3VsdCwgUmVzdWx0QXN5bmMsIGVyciwgZXJyQXN5bmMsIGZyb21Bc3luY1Rocm93YWJsZSwgZnJvbVByb21pc2UsIGZyb21TYWZlUHJvbWlzZSwgZnJvbVRocm93YWJsZSwgb2ssIG9rQXN5bmMsIHNhZmVUcnkgfTtcbiIsICJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwifi9lcnJvci9iYXNlLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBXb3JrZXJFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7fVxuIiwgImltcG9ydCB7IFdvcmtlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd29ya2VyL3dvcmtlci1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgV29ya2VyVW5kZWZpbmVkUGFyYW1ldGVyRXJyb3IgZXh0ZW5kcyBXb3JrZXJFcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2UgPSBcIlBhcmFtZXRlciBtdXN0IGJlIGRlZmluZWRcIjtcbn1cbiIsICJpbXBvcnQgeyBlcnJBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY29ubmVjdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgU2VydmVyRXJyb3IgfSBmcm9tIFwifi9lcnJvci9zZXJ2ZXItZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyQ29uZmlnIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1jb25maWcudHNcIjtcblxuLyoqXG4gKiBFbnN1cmUgYW4gZXJyb3IgbWVzc2FnZSBpcyB0cmFuc2Zvcm1lZCBpbiBhbiBFcnJvciBvYmplY3RcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbnN1cmVFcnJvciA9ICh2YWx1ZTogdW5rbm93bik6IEVycm9yID0+IHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiB2YWx1ZTtcblxuICBsZXQgc3RyaW5naWZpZWQgPSBcIltVbmFibGUgdG8gc3RyaW5naWZ5IHRoZSB0aHJvd24gdmFsdWVdXCI7XG4gIHRyeSB7XG4gICAgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgIC8qIGVtcHR5ICovXG4gIH1cblxuICByZXR1cm4gbmV3IEVycm9yKHN0cmluZ2lmaWVkKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgTHVmaSdzIGNvbmZpZyBmcm9tIGl0cyBBUElcbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2VVcmxcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBmZXRjaFNlcnZlckNvbmZpZyA9IChcbiAgaW5zdGFuY2VVcmw6IFVSTCxcbik6IFJlc3VsdEFzeW5jPFNlcnZlckNvbmZpZywgRXJyb3I+ID0+IHtcbiAgY29uc3Qgb3JpZ2luTWF0Y2hlcyA9IGluc3RhbmNlVXJsLmhyZWYubWF0Y2goXG4gICAgLyguKj8pXFwvPyg/OlxcL1tkcl17MX1cXC98bG9naW5cXC8/fGZpbGVzXFwvPykvLFxuICApO1xuXG4gIGNvbnN0IHVybE9yaWdpbiA9IG9yaWdpbk1hdGNoZXMgJiYgb3JpZ2luTWF0Y2hlc1sxXVxuICAgID8gb3JpZ2luTWF0Y2hlc1sxXVxuICAgIDogaW5zdGFuY2VVcmwub3JpZ2luO1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBmZXRjaCh1cmxPcmlnaW4gKyBcIi9hYm91dC9jb25maWdcIiksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENvbm5lY3Rpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgIH0pLFxuICApLmFuZFRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIHJlc3BvbnNlLmpzb24oKSxcbiAgICAgICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgIG5ldyBTZXJ2ZXJFcnJvcih1bmRlZmluZWQsIHsgY29udGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Rlbm9SdW50aW1lID0gKCk6IGJvb2xlYW4gPT4gdHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCI7XG5cbmV4cG9ydCBjb25zdCBpc1NlY3VyZUNvbnRleHQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKCkgfHwgZ2xvYmFsVGhpcy5pc1NlY3VyZUNvbnRleHQgfHxcbiAgICBnbG9iYWxUaGlzLmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiO1xufTtcblxuZXhwb3J0IGNvbnN0IHdvcmtlclVybCA9IChyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IFVSTCA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKClcbiAgICA/IG5ldyBVUkwoYC4vd29ya2VyLyR7cmVsYXRpdmVQYXRofS50c2AsIG5ldyBVUkwoXCIuXCIsIGltcG9ydC5tZXRhLnVybCkuaHJlZilcbiAgICA6IG5ldyBVUkwoXG4gICAgICBpbXBvcnQubWV0YS5yZXNvbHZlKFxuICAgICAgICBgLi8ke1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCAhPT0gXCJlbmNyeXB0XCIgPyBgd29ya2VyLyR7cmVsYXRpdmVQYXRofWAgOiByZWxhdGl2ZVBhdGhcbiAgICAgICAgfS5qc2AsXG4gICAgICApLFxuICAgICk7XG59O1xuIiwgImltcG9ydCB7IFppcERlY29tcHJlc3Npb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL3ppcC96aXAtZGVjb21wcmVzc2lvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgdW56aXAsIHR5cGUgVW56aXBwZWQgfSBmcm9tIFwiZmZsYXRlXCI7XG5pbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgV29ya2VyVW5kZWZpbmVkUGFyYW1ldGVyRXJyb3IgfSBmcm9tIFwifi9lcnJvci93b3JrZXIvd29ya2VyLXVuZGVmaW5lZC1wYXJhbWV0ZXItZXJyb3IudHNcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyQWN0aW9uTWVzc2FnZSB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItYWN0aW9uLW1lc3NhZ2UudHNcIjtcbmltcG9ydCB7IEVWRU5UIH0gZnJvbSBcIn4vZW51bS9ldmVudC50c1wiO1xuXG5kZWNsYXJlIGNvbnN0IHNlbGY6IFdvcmtlcjtcblxuc2VsZi5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICBkZWNvbXByZXNzKGV2ZW50LmRhdGEpLm1hcCgoKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5BUkNISVZFX0RFQ09NUFJFU1NFRCB9KTtcbiAgfSkubWFwRXJyKChlcnJvcikgPT4ge1xuICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IgfSk7XG4gIH0pO1xufTtcblxuY29uc3QgZGVjb21wcmVzcyA9IChcbiAgd29ya2VyTWVzc2FnZTogV29ya2VyQWN0aW9uTWVzc2FnZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIEVycm9yPiA9PiB7XG4gIGNvbnN0IHsgYXJjaGl2ZSB9ID0gd29ya2VyTWVzc2FnZS5hcmdzO1xuXG4gIGlmIChhcmNoaXZlKSB7XG4gICAgY29uc3QgdW56aXBQcm9taXNlID0gYXN5bmMgKCk6IFByb21pc2U8VW56aXBwZWQ+ID0+IHtcbiAgICAgIGlmIChhcmNoaXZlLmZpbGUpIHtcbiAgICAgICAgY29uc3QgZmlsZUJ5dGVzID0gYXdhaXQgYXJjaGl2ZS5maWxlLmJ5dGVzKCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICB1bnppcChmaWxlQnl0ZXMsIChlcnJvciwgZmlsZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikgcmVqZWN0KGVycm9yKTtcblxuICAgICAgICAgICAgcmVzb2x2ZShmaWxlcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICAgIG5ldyBXb3JrZXJVbmRlZmluZWRQYXJhbWV0ZXJFcnJvcihcImFyY2hpdmUuZmlsZSBtdXN0IGJlIGRlZmluZWRcIiksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZSh1bnppcFByb21pc2UoKSwgKGVycm9yKSA9PiBlcnJvcilcbiAgICAgIC5hbmRUaGVuKChmaWxlcykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAoY29uc3QgcGF0aCBpbiBmaWxlcykge1xuICAgICAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgIGV2ZW50OiBFVkVOVC5BUkNISVZFX1JFVFJJRVZFRF9GSUxFLFxuICAgICAgICAgICAgICBmaWxlOiB7IGJ1ZmZlcjogZmlsZXNbcGF0aF0uYnVmZmVyLCBwYXRoIH0sXG4gICAgICAgICAgICB9LCBbZmlsZXNbcGF0aF0uYnVmZmVyXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSkub3JFbHNlKChlcnJvcikgPT5cbiAgICAgICAgZXJyQXN5bmMoXG4gICAgICAgICAgbmV3IFppcERlY29tcHJlc3Npb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICBuZXcgV29ya2VyVW5kZWZpbmVkUGFyYW1ldGVyRXJyb3IoXCJhcmNoaXZlIG11c3QgYmUgZGVmaW5lZFwiKSxcbiAgICApO1xuICB9XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIndLQVVPLElBQU1BLEVBQU4sY0FBd0IsS0FBTSxDQUduQyxZQUNFQyxFQUNBQyxFQUFpRCxDQUFDLEVBQ2xELENBQ0EsR0FBTSxDQUFFLE1BQUFDLEVBQU8sUUFBQUMsQ0FBUSxFQUFJRixFQUUzQixNQUFNRCxFQUFTLENBQUUsTUFBQUUsQ0FBTSxDQUFDLEVBUjFCRSxFQUFBLEtBQWdCLFdBU2QsS0FBSyxLQUFPLEtBQUssWUFBWSxLQUU3QixLQUFLLFFBQVVELENBQ2pCLENBQ0YsRUN0Qk8sSUFBTUUsR0FBTixjQUF1QkMsQ0FBVSxDQUFDLEVDQWxDLElBQU1DLEdBQU4sY0FBb0NDLEVBQVMsQ0FBN0Msa0NBQ0xDLEVBQUEsS0FBUyxVQUFVLHdEQUNyQixFQ0tBLElBQUlDLEdBQU0sQ0FBQyxFQUNQQyxHQUFNLFNBQVVDLEVBQUdDLEVBQUlDLEVBQUtDLEVBQVVDLEVBQUksQ0FDMUMsSUFBSUMsRUFBSSxJQUFJLE9BQU9QLEdBQUlHLENBQUUsSUFBTUgsR0FBSUcsQ0FBRSxFQUFJLElBQUksZ0JBQWdCLElBQUksS0FBSyxDQUNsRUQsRUFBSSxpR0FDUixFQUFHLENBQUUsS0FBTSxpQkFBa0IsQ0FBQyxDQUFDLEVBQUUsRUFDakMsT0FBQUssRUFBRSxVQUFZLFNBQVVDLEVBQUcsQ0FDdkIsSUFBSUMsRUFBSUQsRUFBRSxLQUFNRSxFQUFLRCxFQUFFLElBQ3ZCLEdBQUlDLEVBQUksQ0FDSixJQUFJQyxFQUFNLElBQUksTUFB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SyxDQUFFLENBQUMsQ0FDcEUsQ0FDRixDQUNKLEtBQ0UsUUFBT2EsRUFDTCxJQUFJSixFQUE4Qix5QkFBeUIsQ0FDN0QsQ0FFSiIsCiAgIm5hbWVzIjogWyJCYXNlRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgImNhdXNlIiwgImNvbnRleHQiLCAiX19wdWJsaWNGaWVsZCIsICJaaXBFcnJvciIsICJCYXNlRXJyb3IiLCAiWmlwRGVjb21wcmVzc2lvbkVycm9yIiwgIlppcEVycm9yIiwgIl9fcHVibGljRmllbGQiLCAiY2gyIiwgIndrIiwgImMiLCAiaWQiLCAibXNnIiwgInRyYW5zZmVyIiwgImNiIiwgInciLCAiZSIsICJkIiwgImVkIiwgImVyciIsICJ1OCIsICJ1MTYiLCAiaTMyIiwgImZsZWIiLCAiZmRlYiIsICJjbGltIiwgImZyZWIiLCAiZWIiLCAic3RhcnQiLCAiYiIsICJpIiwgInIiLCAiaiIsICJfYSIsICJmbCIsICJyZXZmbCIsICJfYiIsICJmZCIsICJyZXZmZCIsICJyZXYiLCAieCIsICJoTWFwIiwgImNkIiwgIm1iIiwgInMiLCAibCIsICJsZSIsICJjbyIsICJydmIiLCAic3YiLCAicl8xIiwgInYiLCAibSIsICJmbHQiLCAiZmR0IiwgImZscm0iLCAiaE1hcCIsICJmbHQiLCAiZmRybSIsICJoTWFwIiwgImZkdCIsICJtYXgiLCAiYSIsICJtIiwgImkiLCAiYml0cyIsICJkIiwgInAiLCAibyIsICJiaXRzMTYiLCAic2hmdCIsICJzbGMiLCAidiIsICJzIiwgImUiLCAidTgiLCAiZWMiLCAiZXJyIiwgImluZCIsICJtc2ciLCAibnQiLCAiZSIsICJpbmZsdCIsICJkYXQiLCAic3QiLCAiYnVmIiwgImRpY3QiLCAic2wiLCAiZGwiLCAidTgiLCAibm9CdWYiLCAicmVzaXplIiwgIm5vU3QiLCAiY2J1ZiIsICJsIiwgImJsIiwgIm5idWYiLCAiZmluYWwiLCAicG9zIiwgImJ0IiwgImxtIiwgImRtIiwgImxidCIsICJkYnQiLCAidGJ0cyIsICJiaXRzIiwgInR5cGUiLCAiZmxybSIsICJmZHJtIiwgImhMaXQiLCAiaGNMZW4iLCAidGwiLCAibGR0IiwgImNsdCIsICJpIiwgImNsaW0iLCAiY2xiIiwgIm1heCIsICJjbGJtc2siLCAiY2xtIiwgImhNYXAiLCAiciIsICJzIiwgImMiLCAibiIsICJsdCIsICJkdCIsICJzaGZ0IiwgInQiLCAibG1zIiwgImRtcyIsICJscG9zIiwgImJpdHMxNiIsICJzeW0iLCAiYWRkIiwgImIiLCAiZmxlYiIsICJmbCIsICJkIiwgImRzeW0iLCAiZmQiLCAiZmRlYiIsICJlbmQiLCAic2hpZnQiLCAiZGVuZCIsICJzbGMiLCAiZXQiLCAidTgiLCAibXJnIiwgImEiLCAiYiIsICJvIiwgImsiLCAid2NsbiIsICJmbiIsICJmblN0ciIsICJ0ZCIsICJkdCIsICJzdCIsICJrcyIsICJpIiwgInYiLCAic3RfMSIsICJzcEluZCIsICJ0IiwgImNoIiwgImNiZnMiLCAidGwiLCAid3JrciIsICJmbnMiLCAiaW5pdCIsICJpZCIsICJjYiIsICJ0ZF8xIiwgIm0iLCAid2siLCAiYkluZmx0IiwgInU4IiwgInUxNiIsICJpMzIiLCAiZmxlYiIsICJmZGViIiwgImNsaW0iLCAiZmwiLCAiZmQiLCAiZmxybSIsICJmZHJtIiwgInJldiIsICJlYyIsICJoTWFwIiwgIm1heCIsICJiaXRzIiwgImJpdHMxNiIsICJzaGZ0IiwgInNsYyIsICJlcnIiLCAiaW5mbHQiLCAiaW5mbGF0ZVN5bmMiLCAicGJmIiwgImdvcHQiLCAicGJmIiwgIm1zZyIsICJnb3B0IiwgIm8iLCAidTgiLCAiY2JpZnkiLCAiZGF0IiwgIm9wdHMiLCAiZm5zIiwgImluaXQiLCAiaWQiLCAiY2IiLCAidyIsICJ3cmtyIiwgImVyciIsICJiMiIsICJkIiwgImIiLCAiYjQiLCAiYjgiLCAiaW5mbGF0ZSIsICJkYXRhIiwgIm9wdHMiLCAiY2IiLCAiZXJyIiwgImNiaWZ5IiwgImJJbmZsdCIsICJldiIsICJwYmYiLCAiaW5mbGF0ZVN5bmMiLCAiZ29wdCIsICJpbmZsdCIsICJ0ZCIsICJ0ZHMiLCAiZXQiLCAiZHV0ZjgiLCAiZCIsICJpIiwgImMiLCAiZWIiLCAic2xjIiwgInN0ckZyb21VOCIsICJkYXQiLCAibGF0aW4xIiwgInIiLCAiaSIsICJ0ZCIsICJfYSIsICJkdXRmOCIsICJzIiwgImVyciIsICJzbHpoIiwgImQiLCAiYiIsICJiMiIsICJ6aCIsICJ6IiwgImZubCIsICJmbiIsICJzdHJGcm9tVTgiLCAiZXMiLCAiYnMiLCAiYjQiLCAiX2EiLCAiejY0ZSIsICJzYyIsICJzdSIsICJvZmYiLCAiYjgiLCAibXQiLCAiZm4iLCAidW56aXAiLCAiZGF0YSIsICJvcHRzIiwgImNiIiwgImVyciIsICJ0ZXJtIiwgInRBbGwiLCAiaSIsICJmaWxlcyIsICJjYmQiLCAiYSIsICJiIiwgImUiLCAiYjQiLCAibGZ0IiwgImIyIiwgIm8iLCAieiIsICJ6ZSIsICJmbHRyIiwgIl9sb29wXzMiLCAiX2EiLCAiemgiLCAiY18xIiwgInNjIiwgInN1IiwgIm5vIiwgIm9mZiIsICJzbHpoIiwgImNibCIsICJkIiwgInNsYyIsICJpbmZsIiwgImluZmxhdGVTeW5jIiwgInU4IiwgImluZmxhdGUiLCAiZGVmYXVsdEVycm9yQ29uZmlnIiwgImNyZWF0ZU5ldmVyVGhyb3dFcnJvciIsICJtZXNzYWdlIiwgInJlc3VsdCIsICJjb25maWciLCAiZGF0YSIsICJtYXliZVN0YWNrIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fYXdhaXQiLCAidiIsICJfX2FzeW5jR2VuZXJhdG9yIiwgImciLCAicSIsICJ2ZXJiIiwgImF3YWl0UmV0dXJuIiwgImYiLCAibiIsICJhIiwgImIiLCAicmVzdW1lIiwgInNldHRsZSIsICJyIiwgImZ1bGZpbGwiLCAiX19hc3luY0RlbGVnYXRvciIsICJwIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZCIsICJSZXN1bHRBc3luYyIsICJfUmVzdWx0QXN5bmMiLCAicmVzIiwgInByb21pc2UiLCAibmV3UHJvbWlzZSIsICJ2YWx1ZSIsICJPayIsICJlcnJvckZuIiwgImUiLCAiRXJyIiwgImZuIiwgImFyZ3MiLCAiX19hd2FpdGVyIiwgImVycm9yIiwgImFzeW5jUmVzdWx0TGlzdCIsICJjb21iaW5lUmVzdWx0QXN5bmNMaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzIiwgImYiLCAibmV3UmVzIiwgIm5ld1ZhbHVlIiwgIm9rIiwgIl9lcnIiLCAidCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiX19hc3luY0RlbGVnYXRvciIsICJfX2FzeW5jVmFsdWVzIiwgInN1Y2Nlc3NDYWxsYmFjayIsICJmYWlsdXJlQ2FsbGJhY2siLCAicmVzdWx0IiwgImVyckFzeW5jIiwgIm9rQXN5bmMiLCAiZXJyIiwgImZyb21Qcm9taXNlIiwgImZyb21TYWZlUHJvbWlzZSIsICJmcm9tQXN5bmNUaHJvd2FibGUiLCAiY29tYmluZVJlc3VsdExpc3QiLCAicmVzdWx0TGlzdCIsICJhY2MiLCAibGlzdCIsICJjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMiLCAiUmVzdWx0IiwgImZyb21UaHJvd2FibGUiLCAiY29tYmluZSIsICJjb21iaW5lV2l0aEFsbEVycm9ycyIsICJPayIsICJ2YWx1ZSIsICJmIiwgIm9rIiwgIl9mIiwgIl92YWx1ZSIsICJSZXN1bHRBc3luYyIsICJfdiIsICJfZXJyIiwgIl8iLCAiY29uZmlnIiwgImNyZWF0ZU5ldmVyVGhyb3dFcnJvciIsICJFcnIiLCAiZXJyb3IiLCAiZXJyIiwgImVyckFzeW5jIiwgInYiLCAiX29rIiwgInNlbGYiLCAiZnJvbVRocm93YWJsZSIsICJSZXN1bHQiLCAiV29ya2VyRXJyb3IiLCAiQmFzZUVycm9yIiwgIldvcmtlclVuZGVmaW5lZFBhcmFtZXRlckVycm9yIiwgIldvcmtlckVycm9yIiwgIl9fcHVibGljRmllbGQiLCAiZW5zdXJlRXJyb3IiLCAidmFsdWUiLCAic3RyaW5naWZpZWQiLCAiZXZlbnQiLCAiZGVjb21wcmVzcyIsICJlcnJvciIsICJ3b3JrZXJNZXNzYWdlIiwgImFyY2hpdmUiLCAidW56aXBQcm9taXNlIiwgImZpbGVCeXRlcyIsICJyZXNvbHZlIiwgInJlamVjdCIsICJ1bnppcCIsICJmaWxlcyIsICJXb3JrZXJVbmRlZmluZWRQYXJhbWV0ZXJFcnJvciIsICJSZXN1bHRBc3luYyIsICJwYXRoIiwgIm9rQXN5bmMiLCAiZXJyQXN5bmMiLCAiWmlwRGVjb21wcmVzc2lvbkVycm9yIiwgImVuc3VyZUVycm9yIl0KfQo= diff --git a/themes/default/public/js/worker/download.js b/themes/default/public/js/worker/download.js index 768cd44..95a6443 100644 --- a/themes/default/public/js/worker/download.js +++ b/themes/default/public/js/worker/download.js @@ -1 +1,2 @@ -var gr=Object.create;var ot=Object.defineProperty;var wr=Object.getOwnPropertyDescriptor;var Er=Object.getOwnPropertyNames;var Ar=Object.getPrototypeOf,Or=Object.prototype.hasOwnProperty;var _t=t=>{throw TypeError(t)};var xr=(t,e,r)=>e in t?ot(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Lr=(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 it=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var _r=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Er(e))!Or.call(t,o)&&o!==r&&ot(t,o,{get:()=>e[o],enumerable:!(n=wr(e,o))||n.enumerable});return t};var st=(t,e,r)=>(r=t!=null?gr(Ar(t)):{},_r(e||!t||!t.__esModule?ot(r,"default",{value:t,enumerable:!0}):r,t));var M=(t,e,r)=>xr(t,typeof e!="symbol"?e+"":e,r),at=(t,e,r)=>e.has(t)||_t("Cannot "+r);var d=(t,e,r)=>(at(t,e,"read from private field"),r?r.call(t):e.get(t)),O=(t,e,r)=>e.has(t)?_t("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),w=(t,e,r,n)=>(at(t,e,"write to private field"),n?n.call(t,r):e.set(t,r),r),x=(t,e,r)=>(at(t,e,"access private method"),r);var Fe=(t,e,r,n)=>({set _(o){w(t,e,o,r)},get _(){return d(t,e,n)}});var Nt=it((fn,ct)=>{"use strict";var ie=typeof Reflect=="object"?Reflect:null,bt=ie&&typeof ie.apply=="function"?ie.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},Je;ie&&typeof ie.ownKeys=="function"?Je=ie.ownKeys:Object.getOwnPropertySymbols?Je=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Je=function(e){return Object.getOwnPropertyNames(e)};function br(t){console&&console.warn&&console.warn(t)}var Ct=Number.isNaN||function(e){return e!==e};function g(){g.init.call(this)}ct.exports=g;ct.exports.once=Rr;g.EventEmitter=g;g.prototype._events=void 0;g.prototype._eventsCount=0;g.prototype._maxListeners=void 0;var Dt=10;function He(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(g,"defaultMaxListeners",{enumerable:!0,get:function(){return Dt},set:function(t){if(typeof t!="number"||t<0||Ct(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Dt=t}});g.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};g.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Ct(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 St(t){return t._maxListeners===void 0?g.defaultMaxListeners:t._maxListeners}g.prototype.getMaxListeners=function(){return St(this)};g.prototype.emit=function(e){for(var r=[],n=1;n0&&(s=r[0]),s instanceof Error)throw s;var c=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw c.context=s,c}var u=i[e];if(u===void 0)return!1;if(typeof u=="function")bt(u,this,r);else for(var f=u.length,h=It(u,f),n=0;n0&&s.length>o&&!s.warned){s.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=t,c.type=e,c.count=s.length,br(c)}return t}g.prototype.addListener=function(e,r){return Rt(this,e,r,!1)};g.prototype.on=g.prototype.addListener;g.prototype.prependListener=function(e,r){return Rt(this,e,r,!0)};function Dr(){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 kt(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},o=Dr.bind(n);return o.listener=r,n.wrapFn=o,o}g.prototype.once=function(e,r){return He(r),this.on(e,kt(this,e,r)),this};g.prototype.prependOnceListener=function(e,r){return He(r),this.prependListener(e,kt(this,e,r)),this};g.prototype.removeListener=function(e,r){var n,o,i,s,c;if(He(r),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){c=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():Cr(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,c||r)}return this};g.prototype.off=g.prototype.removeListener;g.prototype.removeAllListeners=function(e){var r,n,o;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 i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,r[o]);return this};function Tt(t,e,r){var n=t._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?r?[o.listener||o]:[o]:r?Sr(o):It(o,o.length)}g.prototype.listeners=function(e){return Tt(this,e,!0)};g.prototype.rawListeners=function(e){return Tt(this,e,!1)};g.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):Pt.call(t,e)};g.prototype.listenerCount=Pt;function Pt(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}g.prototype.eventNames=function(){return this._eventsCount>0?Je(this._events):[]};function It(t,e){for(var r=new Array(e),n=0;n{"use strict";var a={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}}};a.cipher.aes=function(t){this.w[0][0][0]||this.C();var e,r,n,o,i=this.w[0][4],s=this.w[1];e=t.length;var c=1;if(e!==4&&e!==6&&e!==8)throw new a.exception.invalid("invalid aes key size");for(this.b=[n=t.slice(0),o=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=i[r>>>24]<<24^i[r>>16&255]<<16^i[r>>8&255]<<8^i[r&255],t%e===0&&(r=r<<8^r>>>24^c<<24,c=c<<1^283*(c>>7))),n[t]=n[t-e]^r;for(e=0;t;e++,t--)r=n[e&3?t:t-4],o[e]=4>=t||4>e?r:s[0][i[r>>>24]]^s[1][i[r>>16&255]]^s[2][i[r>>8&255]]^s[3][i[r&255]]};a.cipher.aes.prototype={encrypt:function(t){return Xt(this,t,0)},decrypt:function(t){return Xt(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],o,i,s,c=[],u=[],f,h,l,m;for(o=0;256>o;o++)u[(c[o]=o<<1^283*(o>>7))^o]=o;for(i=s=0;!r[i];i^=f||1,s=u[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[i]=l,n[l]=i,h=c[o=c[f=c[i]]],m=16843009*h^65537*o^257*f^16843008*i,h=257*c[l]^16843008*l,o=0;4>o;o++)t[o][i]=h=h<<24^h>>>8,e[o][l]=m=m<<24^m>>>8;for(o=0;5>o;o++)t[o]=t[o].slice(0),e[o]=e[o].slice(0)}};function Xt(t,e,r){if(e.length!==4)throw new a.exception.invalid("invalid aes block size");var n=t.b[r],o=e[0]^n[0],i=e[r?3:1]^n[1],s=e[2]^n[2];e=e[r?1:3]^n[3];var c,u,f,h=n.length/4-2,l,m=4,p=[0,0,0,0];c=t.w[r],t=c[0];var A=c[1],I=c[2],W=c[3],G=c[4];for(l=0;l>>24]^A[i>>16&255]^I[s>>8&255]^W[e&255]^n[m],u=t[i>>>24]^A[s>>16&255]^I[e>>8&255]^W[o&255]^n[m+1],f=t[s>>>24]^A[e>>16&255]^I[o>>8&255]^W[i&255]^n[m+2],e=t[e>>>24]^A[o>>16&255]^I[i>>8&255]^W[s&255]^n[m+3],m+=4,o=c,i=u,s=f;for(l=0;4>l;l++)p[r?3&-l:l]=G[o>>>24]<<24^G[i>>16&255]<<16^G[s>>8&255]<<8^G[e&255]^n[m++],c=o,o=i,i=s,s=e,e=c;return p}a.bitArray={bitSlice:function(t,e,r){return t=a.bitArray.Y(t.slice(e/32),32-(e&31)).slice(1),r===void 0?t:a.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(a.bitArray.bitLength(t)!==a.bitArray.bitLength(e))return!1;var r=0,n;for(n=0;n>>e),r=t[o]<<32-e;return o=t.length?t[t.length-1]:0,t=a.bitArray.getPartial(o),n.push(a.bitArray.partial(e+t&31,32>>24|r>>>8&65280|(r&65280)<<8|r<<24;return t}};a.codec.utf8String={fromBits:function(t){var e="",r=a.bitArray.bitLength(t),n,o;for(n=0;n>>8>>>8>>>8),o<<=8;return decodeURIComponent(escape(e))},toBits:function(t){t=unescape(encodeURIComponent(t));var e=[],r,n=0;for(r=0;r>>o)>>>26),6>o?(s=t[r]<<6-o,o+=26,r++):(s<<=6,o-=6);for(;n.length&3&&!e;)n+="=";return n},toBits:function(t,e){t=t.replace(/\s|=/g,"");var r=[],n,o=0,i=a.codec.base64.S,s=0,c;for(e&&(i=i.substr(0,62)+"-_"),n=0;nc)throw new a.exception.invalid("this isn't base64!");26>>o),s=c<<32-o):(o+=6,s^=c<<32-o)}return o&56&&r.push(a.bitArray.partial(o&56,s,1)),r}};a.codec.base64url={fromBits:function(t){return a.codec.base64.fromBits(t,1,1)},toBits:function(t){return a.codec.base64.toBits(t,1)}};a.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()};a.hash.sha256.hash=function(t){return new a.hash.sha256().update(t).finalize()};a.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=a.codec.utf8String.toBits(t));var e,r=this.f=a.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+a.bitArray.bitLength(t),9007199254740991e;r++){for(o=!0,n=2;n*n<=r;n++)if(r%n===0){o=!1;break}o&&(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,o=this.g,i=this.b,s=o[0],c=o[1],u=o[2],f=o[3],h=o[4],l=o[5],m=o[6],p=o[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+p+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(m^h&(l^m))+i[e],p=m,m=l,l=h,h=f+r|0,f=u,u=c,c=s,s=r+(c&u^f&(c^u))+(c>>>2^c>>>13^c>>>22^c<<30^c<<19^c<<10)|0;o[0]=o[0]+s|0,o[1]=o[1]+c|0,o[2]=o[2]+u|0,o[3]=o[3]+f|0,o[4]=o[4]+h|0,o[5]=o[5]+l|0,o[6]=o[6]+m|0,o[7]=o[7]+p|0}};a.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()};a.hash.sha512.hash=function(t){return new a.hash.sha512().update(t).finalize()};a.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=a.codec.utf8String.toBits(t));var e,r=this.f=a.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+a.bitArray.bitLength(t),9007199254740991r;n++){for(i=!0,o=2;o*o<=n;o++)if(n%o===0){i=!1;break}i&&(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,o=this.b,i=n[0],s=n[1],c=n[2],u=n[3],f=n[4],h=n[5],l=n[6],m=n[7],p=n[8],A=n[9],I=n[10],W=n[11],G=n[12],Be=n[13],Ot=n[14],je=n[15],D;if(typeof Uint32Array<"u"){D=Array(160);for(var L=0;32>L;L++)D[L]=t[L]}else D=t;var L=i,k=s,ye=c,ne=u,ve=f,oe=h,et=l,ge=m,z=p,T=A,We=I,we=W,ze=G,Ee=Be,tt=Ot,Ae=je;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 E=D[2*(t-15)+1];e=(E<<31|r>>>1)^(E<<24|r>>>8)^r>>>7;var F=(r<<31|E>>>1)^(r<<24|E>>>8)^(r<<25|E>>>7);r=D[2*(t-2)];var J=D[2*(t-2)+1],E=(J<<13|r>>>19)^(r<<3|J>>>29)^r>>>6,J=(r<<13|J>>>19)^(J<<3|r>>>29)^(r<<26|J>>>6),rt=D[2*(t-7)],nt=D[2*(t-16)],Oe=D[2*(t-16)+1];r=F+D[2*(t-7)+1],e=e+rt+(r>>>0>>0?1:0),r+=J,e+=E+(r>>>0>>0?1:0),r+=Oe,e+=nt+(r>>>0>>0?1:0)}D[2*t]=e|=0,D[2*t+1]=r|=0;var rt=z&We^~z&ze,xt=T&we^~T&Ee,J=L&ye^L&ve^ye&ve,yr=k&ne^k&oe^ne&oe,nt=(k<<4|L>>>28)^(L<<30|k>>>2)^(L<<25|k>>>7),Oe=(L<<4|k>>>28)^(k<<30|L>>>2)^(k<<25|L>>>7),vr=o[2*t],Lt=o[2*t+1],E=Ae+((z<<18|T>>>14)^(z<<14|T>>>18)^(T<<23|z>>>9)),F=tt+((T<<18|z>>>14)^(T<<14|z>>>18)^(z<<23|T>>>9))+(E>>>0>>0?1:0),E=E+xt,F=F+(rt+(E>>>0>>0?1:0)),E=E+Lt,F=F+(vr+(E>>>0>>0?1:0)),E=E+r|0,F=F+(e+(E>>>0>>0?1:0));r=Oe+yr,e=nt+J+(r>>>0>>0?1:0),tt=ze,Ae=Ee,ze=We,Ee=we,We=z,we=T,T=ge+E|0,z=et+F+(T>>>0>>0?1:0)|0,et=ve,ge=oe,ve=ye,oe=ne,ye=L,ne=k,k=E+r|0,L=F+e+(k>>>0>>0?1:0)|0}s=n[1]=s+k|0,n[0]=i+L+(s>>>0>>0?1:0)|0,u=n[3]=u+ne|0,n[2]=c+ye+(u>>>0>>0?1:0)|0,h=n[5]=h+oe|0,n[4]=f+ve+(h>>>0>>0?1:0)|0,m=n[7]=m+ge|0,n[6]=l+et+(m>>>0>>0?1:0)|0,A=n[9]=A+T|0,n[8]=p+z+(A>>>0>>0?1:0)|0,W=n[11]=W+we|0,n[10]=I+We+(W>>>0>>0?1:0)|0,Be=n[13]=Be+Ee|0,n[12]=G+ze+(Be>>>0>>0?1:0)|0,je=n[15]=je+Ae|0,n[14]=Ot+tt+(je>>>0>>0?1:0)|0}};a.mode.ccm={name:"ccm",F:[],listenProgress:function(t){a.mode.ccm.F.push(t)},unListenProgress:function(t){t=a.mode.ccm.F.indexOf(t),-1u)throw new a.exception.invalid("ccm: iv must be at least 7 bytes");for(i=2;4>i&&f>>>8*i;i++);return i<15-u&&(i=15-u),r=c.clamp(r,8*(15-i)),e=a.mode.ccm.U(t,e,r,n,o,i),s=a.mode.ccm.V(t,s,r,e,o,i),c.concat(s.data,s.tag)},decrypt:function(t,e,r,n,o){o=o||64,n=n||[];var i=a.bitArray,s=i.bitLength(r)/8,f=i.bitLength(e),c=i.clamp(e,f-o),u=i.bitSlice(e,f-o),f=(f-o)/8;if(7>s)throw new a.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=i.clamp(r,8*(15-e)),c=a.mode.ccm.V(t,c,r,u,o,e),t=a.mode.ccm.U(t,c.data,r,n,o,e),!i.equal(c.tag,t))throw new a.exception.corrupt("ccm: tag doesn't match");return c.data},ma:function(t,e,r,n,o,i){var s=[],c=a.bitArray,u=c.P;if(n=[c.partial(8,(e.length?64:0)|n-2<<2|i-1)],n=c.concat(n,r),n[3]|=o,n=t.encrypt(n),e.length)for(r=c.bitLength(e)/8,65279>=r?s=[c.partial(16,r)]:4294967295>=r&&(s=c.concat([c.partial(16,65534)],[r])),s=c.concat(s,e),e=0;eo||16h&&(a.mode.ccm.da(s/u),h+=l),r[3]++,o=t.encrypt(r),e[s]^=o[0],e[s+1]^=o[1],e[s+2]^=o[2],e[s+3]^=o[3];return{tag:n,data:c.clamp(e,f)}}};a.misc.hmac=function(t,e){this.W=e=e||a.hash.sha256;var r=[[],[]],n,o=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>o&&(t=e.hash(t)),n=0;nn||0>r)throw new a.exception.invalid("invalid params to pbkdf2");typeof t=="string"&&(t=a.codec.utf8String.toBits(t)),typeof e=="string"&&(e=a.codec.utf8String.toBits(e)),o=o||a.misc.hmac,t=new o(t);var i,s,c,u,f=[],h=a.bitArray;for(u=1;32*f.length<(n||1);u++){for(o=i=t.encrypt(h.concat(e,[u])),s=1;ss;s++)o.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=i),this.N++,this.b=a.hash.sha256.hash(this.b.concat(o)),this.K=new a.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,i,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,i,t.length]),this.h[s].update(t);break;default:u=1}if(u)throw new a.exception.bug("random: addEntropy only supports number, array of numbers or string");this.s[s]+=e,this.i+=e,c===this.A&&(this.isReady()!==this.A&&Gt("seeded",Math.max(this.u,this.i)),Gt("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:be(this,this.la),mouseCollector:be(this,this.na),keyboardCollector:be(this,this.ja),accelerometerCollector:be(this,this.ca),touchCollector:be(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 a.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,o=this.J[t],i=[];for(n in o)o.hasOwnProperty(n)&&o[n]===e&&i.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 be(t,e){return function(){e.apply(t,arguments)}}a.random=new a.prng(6);e:try{if($e=typeof ce<"u"&&ce.exports){try{Xe=Lr("crypto")}catch{Xe=null}$e=Ke=Xe}if($e&&Ke.randomBytes)De=Ke.randomBytes(128),De=new Uint32Array(new Uint8Array(De).buffer),a.random.addEntropy(De,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(Ce=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(Ce);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(Ce);else break e;a.random.addEntropy(Ce,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 De,Ke,Ce,$e,Xe;a.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 o=a.json,i=o.j({iv:a.random.randomWords(4,0)},o.defaults),s;if(o.j(i,r),r=i.adata,typeof i.salt=="string"&&(i.salt=a.codec.base64.toBits(i.salt)),typeof i.iv=="string"&&(i.iv=a.codec.base64.toBits(i.iv)),!a.mode[i.mode]||!a.cipher[i.cipher]||typeof t=="string"&&100>=i.iter||i.ts!==64&&i.ts!==96&&i.ts!==128||i.ks!==128&&i.ks!==192&&i.ks!==256||2>i.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||4{"use strict";var on=Object.prototype.hasOwnProperty,S="~";function Se(){}Object.create&&(Se.prototype=Object.create(null),new Se().__proto__||(S=!1));function sn(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function ir(t,e,r,n,o){if(typeof r!="function")throw new TypeError("The listener must be a function");var i=new sn(r,n||t,o),s=S?S+e:e;return t._events[s]?t._events[s].fn?t._events[s]=[t._events[s],i]:t._events[s].push(i):(t._events[s]=i,t._eventsCount++),t}function Ge(t,e){--t._eventsCount===0?t._events=new Se:delete t._events[e]}function b(){this._events=new Se,this._eventsCount=0}b.prototype.eventNames=function(){var e=[],r,n;if(this._eventsCount===0)return e;for(n in r=this._events)on.call(r,n)&&e.push(S?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(r)):e};b.prototype.listeners=function(e){var r=S?S+e:e,n=this._events[r];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o(Object.assign(t,e),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:t}),t),jt=(t,e)=>{q(t,{uploadStatus:2}),self.postMessage({event:"OPERATION_FAILED",error:e})},Wt=()=>{v.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),v.once("OPERATION_FAILED",t=>{self.postMessage({event:"OPERATION_FAILED",error:t})})};var Ir={withStackTrace:!1},Jt=(t,e,r=Ir)=>{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:o}};function se(t,e,r,n){function o(i){return i instanceof r?i:new r(function(s){s(i)})}return new(r||(r=Promise))(function(i,s){function c(h){try{f(n.next(h))}catch(l){s(l)}}function u(h){try{f(n.throw(h))}catch(l){s(l)}}function f(h){h.done?i(h.value):o(h.value).then(c,u)}f((n=n.apply(t,e||[])).next())})}function zt(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 H(t){return this instanceof H?(this.v=t,this):new H(t)}function Ft(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),c("next"),c("throw"),c("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(p){return function(A){return Promise.resolve(A).then(p,l)}}function c(p,A){n[p]&&(o[p]=function(I){return new Promise(function(W,G){i.push([p,I,W,G])>1||u(p,I)})},A&&(o[p]=A(o[p])))}function u(p,A){try{f(n[p](A))}catch(I){m(i[0][3],I)}}function f(p){p.value instanceof H?Promise.resolve(p.value.v).then(h,l):m(i[0][2],p)}function h(p){u("next",p)}function l(p){u("throw",p)}function m(p,A){p(A),i.shift(),i.length&&u(i[0][0],i[0][1])}}function Mr(t){var e,r;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=t[o]?function(s){return(r=!r)?{value:H(t[o](s)),done:!1}:i?i(s):s}:i}}function Nr(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 zt=="function"?zt(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=t[i]&&function(s){return new Promise(function(c,u){s=t[i](s),o(c,u,s.done,s.value)})}}function o(i,s,c,u){Promise.resolve(u).then(function(f){i({value:f,done:c})},s)}}var _=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new N(n));return new t(r)}static fromPromise(e,r){let n=e.then(o=>new N(o)).catch(o=>new U(r(o)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(se(this,void 0,void 0,function*(){try{return new N(yield e(...n))}catch(o){return new U(r?r(o):o)}}))}static combine(e){return Ur(e)}static combineWithAllErrors(e){return Br(e)}map(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){return r.isErr()?new U(r.error):new N(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){if(r.isErr())return new U(r.error);let n=yield e(r.value);return n.isErr()?new U(n.error):new N(r.value)})))}andTee(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){if(r.isErr())return new U(r.error);try{yield e(r.value)}catch{}return new N(r.value)})))}mapErr(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){return r.isOk()?new N(r.value):new U(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new U(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new N(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 Ft(this,arguments,function*(){return yield H(yield H(yield*Mr(Nr(yield H(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return Ft(this,arguments,function*(){let r=yield H(this._promise);return r.isErr()&&(yield yield H(C(r.error))),yield H(r.value)})}},K=t=>new _(Promise.resolve(new N(t))),C=t=>new _(Promise.resolve(new U(t))),vn=_.fromPromise,gn=_.fromSafePromise,wn=_.fromThrowable,Ht=t=>{let e=te([]);for(let r of t)if(r.isErr()){e=Y(r.error);break}else e.map(n=>n.push(r.value));return e},Ur=t=>_.fromSafePromise(Promise.all(t)).andThen(Ht),Kt=t=>{let e=te([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=Y([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},Br=t=>_.fromSafePromise(Promise.all(t)).andThen(Kt),ut;(function(t){function e(o,i){return(...s)=>{try{let c=o(...s);return te(c)}catch(c){return Y(i?i(c):c)}}}t.fromThrowable=e;function r(o){return Ht(o)}t.combine=r;function n(o){return Kt(o)}t.combineWithAllErrors=n})(ut||(ut={}));var te=t=>new N(t);function Y(t){return new U(t)}var N=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return te(e(this.value))}mapErr(e){return te(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 te(this.value)}orElse(e){return te(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return _.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 Jt("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},U=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return Y(this.error)}mapErr(e){return Y(e(this.error))}andThrough(e){return Y(this.error)}andTee(e){return Y(this.error)}andThen(e){return Y(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return C(this.error)}asyncAndThrough(e){return C(this.error)}asyncMap(e){return C(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield Y(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw Jt("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},En=ut.fromThrowable;var Z=class extends Error{constructor(r,n={}){let{cause:o,context:i}=n;super(r,{cause:o});M(this,"context");this.name=this.constructor.name,this.context=i}};var $=class extends Z{};var xe=class extends ${constructor(){super(...arguments);M(this,"message","An error occured while trying to connect to WebSocket")}};var re=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)};var ae=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),o="";for(let i=0;i>2]+this._charset[(n[i]&3)<<4|n[i+1]>>4]+this._charset[(n[i+1]&15)<<2|n[i+2]>>6]+this._charset[n[i+2]&63];return r%3==2?(o=o.substring(0,o.length-1),this._noPadding||(o+="=")):r%3==1&&(o=o.substring(0,o.length-2),this._noPadding||(o+="==")),o}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),o,i,s,c,u=0,f=0;for(;u>4,n[u++]=(i&15)<<4|s>>2,n[u++]=(s&3)<<6|c;return n.buffer}};var jr=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function Le(t){return jr.Decode(t)}var Wr=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function ft(t){return Wr.Decode(t)}var Qt=st(Yt());var V=class extends Z{};var ue=class extends V{constructor(){super(...arguments);M(this,"message","Unable to decrypt the provided data")}};var Zt=(t,e)=>{try{let r=typeof e=="string"?e:e.data;return K(Le(Qt.default.decrypt(t,r)))}catch(r){return C(new ue(void 0,{cause:re(r)}))}};var er=(t,e)=>Kr(t).andThen(r=>_.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:e.iv},r,e.data),n=>new ue(void 0,{cause:re(n)})));var Kr=t=>_.fromPromise(crypto.subtle.importKey("raw",ft(t),{name:"AES-GCM"},!1,["encrypt","decrypt"]),e=>new V("Unable to import cryptography key",{cause:re(e)}));var tr=(t,e)=>e.algo===void 0||e.algo===0?Zt(t,e):er(t,e);var P={},rr=5,Gr=t=>(v.emit("UPLOAD_CANCELLED",t.success),K(void 0)),qr=(t,e)=>{let r=t.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let o=JSON.parse(n);if(nn(o)){let i=r.shift();if(i){let s=JSON.parse(i);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=Le(s.data)),tr(e.keys.client,s).andThen(c=>{let u=typeof c=="string"?new TextEncoder().encode(c).buffer:c;return o.part===0?(q(e,{chunksReady:e.chunksReady+1,delAtFirstView:o.del_at_first_view,delay:o.delay,name:o.name,size:o.size,totalChunks:o.total,type:o.type,zipped:o.zipped}),v.emit("DOWNLOAD_STARTED")):q(e,{chunksReady:e.chunksReady+1}),v.emit("CHUNK_DOWNLOADED",u,o.part),e.chunksReady===o.total?Zr(e).andThen(()=>(v.emit("DOWNLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED"),K(void 0))):K(void 0)})}else{let s=new $("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",s),C(s)}}else{let i=new $(o.msg);return v.emit("OPERATION_FAILED",i),C(i)}}else{let o=new $("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",o),C(o)}},Yr=(t,e)=>{if(t.success)return t.j===0&&(q(e,{keys:{client:e.keys.client,server:t.short},actionToken:t.token,queueIndex:t.i}),v.emit("UPLOAD_STARTED")),q(e,{chunksReady:e.chunksReady+1,createdAt:t.created_at}),v.emit("CHUNK_UPLOADED"),e.chunksReady===e.totalChunks&&(q(e,{uploadStatus:1}),v.emit("UPLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED")),K(void 0);{let r=new $(t.msg);return v.emit("OPERATION_FAILED",r),C(r)}},Vr=(t,e)=>{let r=rn(t.data),n;if(r)if(!r.action&&r.msg){let o=new $(r.msg);return v.emit("OPERATION_FAILED",o),C(o)}else"delay"in r?n=Yr(r,e):n=Gr(r);else n=qr(t.data,e);return n},Qr=t=>P!==void 0&&P[t]!==void 0&&P[t].readyState===WebSocket.CONNECTING,lt=t=>P!==void 0&&P[t]!==void 0&&P[t].readyState===WebSocket.OPEN;var dt=(t,e)=>{let r;return t.password?r={part:e,file_pwd:t.password}:r={part:e},pt(or(t),t,JSON.stringify(r))},Zr=t=>{let e;return t.password?e={ended:!0,file_pwd:t.password}:e={ended:!0},pt(or(t),t,JSON.stringify(e))};var pt=(t,e,r)=>lt(t)?(P[t].send(r),K(void 0)):nr(t).andThen(()=>(P[t].onmessage=n=>Vr(n,e),pt(t,e,r))),nr=(t,e=0)=>(!lt(t)&&!Qr(t)&&(P[t]=new WebSocket(t),v.once("SOCKET_OPERATION_TERMINATED",()=>{P[t].close()}),v.once("OPERATION_FAILED",()=>{v.emit("SOCKET_OPERATION_TERMINATED")}),P[t].onopen=()=>{v.emit("SOCKET_OPENED")},P[t].onclose=()=>{},P[t].onerror=()=>++e<=rr?(console.error(`An error happened while trying to connect to WebSocket ${t}. Trying again. ${e} / ${rr}`),nr(t,e)):(v.emit("SOCKET_ONERROR"),C(new xe(`Unable to connect to WebSocket ${t}.`)))),en(t).andThen(()=>K(t)).orElse(r=>C(r))),en=t=>_.fromPromise(new Promise((e,r)=>{lt(t)?e(void 0):(v.once("SOCKET_OPENED",()=>{e(void 0)}),v.on("SOCKET_ONERROR",()=>{r(new xe)}))}),e=>re(e));var tn=(t,e)=>{let r=new URL(t);return r.protocol=r.protocol==="http:"?"ws:":"wss:",r.pathname+=e,new URL(r.origin+r.pathname)},or=t=>tn(new URL(t.serverUrl),"download"+`/${t.keys.server}`).toString();var rn=t=>{try{let e=JSON.parse(t);if(e&&typeof e=="object")return e}catch{}return!1},nn=t=>typeof t=="object"&&t!==null&&!("msg"in t);var yt=st(sr(),1);var Re=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},vt=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},ar=t=>globalThis.DOMException===void 0?new vt(t):new DOMException(t),cr=t=>{let e=t.reason===void 0?ar("This operation was aborted."):t.reason;return e instanceof Error?e:ar(e)};function gt(t,e){let{milliseconds:r,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,u=new Promise((f,h)=>{if(typeof r!="number"||Math.sign(r)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(e.signal){let{signal:m}=e;m.aborted&&h(cr(m));let p=()=>{h(cr(m))};m.addEventListener("abort",p,{once:!0}),t.finally(()=>{m.removeEventListener("abort",p)})}if(r===Number.POSITIVE_INFINITY){t.then(f,h);return}let l=new Re;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(m){h(m)}return}typeof t.cancel=="function"&&t.cancel(),o===!1?f():o instanceof Error?h(o):(l.message=o!=null?o:`Promise timed out after ${r} milliseconds`,h(l))},r),(async()=>{try{f(await t)}catch(m){h(m)}})()}).finally(()=>{u.clear()});return u.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},u}function wt(t,e,r){let n=0,o=t.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;r(t[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var X,ke=class{constructor(){O(this,X,[])}enqueue(e,r){r={priority:0,...r};let n={priority:r.priority,run:e};if(this.size&&d(this,X)[this.size-1].priority>=r.priority){d(this,X).push(n);return}let o=wt(d(this,X),n,(i,s)=>s.priority-i.priority);d(this,X).splice(o,0,n)}dequeue(){let e=d(this,X).shift();return e==null?void 0:e.run}filter(e){return d(this,X).filter(r=>r.priority===e.priority).map(r=>r.run)}get size(){return d(this,X).length}};X=new WeakMap;var fe,he,ee,Pe,le,Ie,B,de,R,Me,j,pe,Q,Ne,y,ur,fr,hr,lr,dr,qe,Et,At,Ye,pr,Ve,Te=class extends yt.default{constructor(r){var n,o,i,s;super();O(this,y);O(this,fe);O(this,he);O(this,ee,0);O(this,Pe);O(this,le);O(this,Ie,0);O(this,B);O(this,de);O(this,R);O(this,Me);O(this,j,0);O(this,pe);O(this,Q);O(this,Ne);M(this,"timeout");if(r={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:ke,...r},!(typeof r.intervalCap=="number"&&r.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${(o=(n=r.intervalCap)==null?void 0:n.toString())!=null?o:""}\` (${typeof r.intervalCap})`);if(r.interval===void 0||!(Number.isFinite(r.interval)&&r.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${(s=(i=r.interval)==null?void 0:i.toString())!=null?s:""}\` (${typeof r.interval})`);w(this,fe,r.carryoverConcurrencyCount),w(this,he,r.intervalCap===Number.POSITIVE_INFINITY||r.interval===0),w(this,Pe,r.intervalCap),w(this,le,r.interval),w(this,R,new r.queueClass),w(this,Me,r.queueClass),this.concurrency=r.concurrency,this.timeout=r.timeout,w(this,Ne,r.throwOnTimeout===!0),w(this,Q,r.autoStart===!1)}get concurrency(){return d(this,pe)}set concurrency(r){if(!(typeof r=="number"&&r>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${r}\` (${typeof r})`);w(this,pe,r),x(this,y,Ye).call(this)}async add(r,n={}){return n={timeout:this.timeout,throwOnTimeout:d(this,Ne),...n},new Promise((o,i)=>{d(this,R).enqueue(async()=>{var s;Fe(this,j)._++,Fe(this,ee)._++;try{(s=n.signal)==null||s.throwIfAborted();let c=r({signal:n.signal});n.timeout&&(c=gt(Promise.resolve(c),{milliseconds:n.timeout})),n.signal&&(c=Promise.race([c,x(this,y,pr).call(this,n.signal)]));let u=await c;o(u),this.emit("completed",u)}catch(c){if(c instanceof Re&&!n.throwOnTimeout){o();return}i(c),this.emit("error",c)}finally{x(this,y,hr).call(this)}},n),this.emit("add"),x(this,y,qe).call(this)})}async addAll(r,n){return Promise.all(r.map(async o=>this.add(o,n)))}start(){return d(this,Q)?(w(this,Q,!1),x(this,y,Ye).call(this),this):this}pause(){w(this,Q,!0)}clear(){w(this,R,new(d(this,Me)))}async onEmpty(){d(this,R).size!==0&&await x(this,y,Ve).call(this,"empty")}async onSizeLessThan(r){d(this,R).sized(this,R).size{x(this,y,lr).call(this)},n)),!0}return!1},qe=function(){if(d(this,R).size===0)return d(this,B)&&clearInterval(d(this,B)),w(this,B,void 0),this.emit("empty"),d(this,j)===0&&this.emit("idle"),!1;if(!d(this,Q)){let r=!d(this,y,dr);if(d(this,y,ur)&&d(this,y,fr)){let n=d(this,R).dequeue();return n?(this.emit("active"),n(),r&&x(this,y,Et).call(this),!0):!1}}return!1},Et=function(){d(this,he)||d(this,B)!==void 0||(w(this,B,setInterval(()=>{x(this,y,At).call(this)},d(this,le))),w(this,Ie,Date.now()+d(this,le)))},At=function(){d(this,ee)===0&&d(this,j)===0&&d(this,B)&&(clearInterval(d(this,B)),w(this,B,void 0)),w(this,ee,d(this,fe)?d(this,j):0),x(this,y,Ye).call(this)},Ye=function(){for(;x(this,y,qe).call(this););},pr=async function(r){return new Promise((n,o)=>{r.addEventListener("abort",()=>{o(r.reason)},{once:!0})})},Ve=async function(r,n){return new Promise(o=>{let i=()=>{n&&!n()||(this.off(r,i),o())};this.on(r,i)})};var Ze=navigator.hardwareConcurrency||1,Qe=new Te({concurrency:Ze}),me=0,mr=!1,Ue=!1;self.onmessage=t=>{mr||(Wt(),mr=!0,v.once("DOWNLOAD_STARTED",()=>{self.postMessage({event:"DOWNLOAD_STARTED"})}),v.once("DOWNLOAD_COMPLETE",()=>{self.postMessage({event:"DOWNLOAD_COMPLETE"})}),v.on("FILE_UPDATED",q),v.on("CHUNK_DOWNLOADED",(r,n)=>{me--,!Ue&&me{jt(e.args.lufiFile,r)})}};var an=t=>{let{lufiFile:e}=t.args;return v.on("DOWNLOAD_STARTED",async()=>{for(let r=1;r{await dt(e,r),me++,(Ue||me===Ze)&&Qe.pause()})}),me++,dt(e,0)}; +var gr=Object.create;var ot=Object.defineProperty;var wr=Object.getOwnPropertyDescriptor;var Er=Object.getOwnPropertyNames;var Ar=Object.getPrototypeOf,Or=Object.prototype.hasOwnProperty;var Lt=t=>{throw TypeError(t)};var _r=(t,e,r)=>e in t?ot(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var xr=(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 it=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Lr=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Er(e))!Or.call(t,o)&&o!==r&&ot(t,o,{get:()=>e[o],enumerable:!(n=wr(e,o))||n.enumerable});return t};var st=(t,e,r)=>(r=t!=null?gr(Ar(t)):{},Lr(e||!t||!t.__esModule?ot(r,"default",{value:t,enumerable:!0}):r,t));var M=(t,e,r)=>_r(t,typeof e!="symbol"?e+"":e,r),at=(t,e,r)=>e.has(t)||Lt("Cannot "+r);var d=(t,e,r)=>(at(t,e,"read from private field"),r?r.call(t):e.get(t)),O=(t,e,r)=>e.has(t)?Lt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),w=(t,e,r,n)=>(at(t,e,"write to private field"),n?n.call(t,r):e.set(t,r),r),_=(t,e,r)=>(at(t,e,"access private method"),r);var ze=(t,e,r,n)=>({set _(o){w(t,e,o,r)},get _(){return d(t,e,n)}});var Nt=it((fn,ct)=>{"use strict";var ie=typeof Reflect=="object"?Reflect:null,bt=ie&&typeof ie.apply=="function"?ie.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},Je;ie&&typeof ie.ownKeys=="function"?Je=ie.ownKeys:Object.getOwnPropertySymbols?Je=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Je=function(e){return Object.getOwnPropertyNames(e)};function br(t){console&&console.warn&&console.warn(t)}var Ct=Number.isNaN||function(e){return e!==e};function g(){g.init.call(this)}ct.exports=g;ct.exports.once=Rr;g.EventEmitter=g;g.prototype._events=void 0;g.prototype._eventsCount=0;g.prototype._maxListeners=void 0;var Dt=10;function He(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(g,"defaultMaxListeners",{enumerable:!0,get:function(){return Dt},set:function(t){if(typeof t!="number"||t<0||Ct(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Dt=t}});g.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};g.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Ct(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 St(t){return t._maxListeners===void 0?g.defaultMaxListeners:t._maxListeners}g.prototype.getMaxListeners=function(){return St(this)};g.prototype.emit=function(e){for(var r=[],n=1;n0&&(s=r[0]),s instanceof Error)throw s;var c=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw c.context=s,c}var u=i[e];if(u===void 0)return!1;if(typeof u=="function")bt(u,this,r);else for(var f=u.length,h=Pt(u,f),n=0;n0&&s.length>o&&!s.warned){s.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=t,c.type=e,c.count=s.length,br(c)}return t}g.prototype.addListener=function(e,r){return Rt(this,e,r,!1)};g.prototype.on=g.prototype.addListener;g.prototype.prependListener=function(e,r){return Rt(this,e,r,!0)};function Dr(){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 kt(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},o=Dr.bind(n);return o.listener=r,n.wrapFn=o,o}g.prototype.once=function(e,r){return He(r),this.on(e,kt(this,e,r)),this};g.prototype.prependOnceListener=function(e,r){return He(r),this.prependListener(e,kt(this,e,r)),this};g.prototype.removeListener=function(e,r){var n,o,i,s,c;if(He(r),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){c=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():Cr(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,c||r)}return this};g.prototype.off=g.prototype.removeListener;g.prototype.removeAllListeners=function(e){var r,n,o;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 i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,r[o]);return this};function Tt(t,e,r){var n=t._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?r?[o.listener||o]:[o]:r?Sr(o):Pt(o,o.length)}g.prototype.listeners=function(e){return Tt(this,e,!0)};g.prototype.rawListeners=function(e){return Tt(this,e,!1)};g.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):It.call(t,e)};g.prototype.listenerCount=It;function It(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}g.prototype.eventNames=function(){return this._eventsCount>0?Je(this._events):[]};function Pt(t,e){for(var r=new Array(e),n=0;n{"use strict";var a={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}}};a.cipher.aes=function(t){this.w[0][0][0]||this.C();var e,r,n,o,i=this.w[0][4],s=this.w[1];e=t.length;var c=1;if(e!==4&&e!==6&&e!==8)throw new a.exception.invalid("invalid aes key size");for(this.b=[n=t.slice(0),o=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=i[r>>>24]<<24^i[r>>16&255]<<16^i[r>>8&255]<<8^i[r&255],t%e===0&&(r=r<<8^r>>>24^c<<24,c=c<<1^283*(c>>7))),n[t]=n[t-e]^r;for(e=0;t;e++,t--)r=n[e&3?t:t-4],o[e]=4>=t||4>e?r:s[0][i[r>>>24]]^s[1][i[r>>16&255]]^s[2][i[r>>8&255]]^s[3][i[r&255]]};a.cipher.aes.prototype={encrypt:function(t){return Xt(this,t,0)},decrypt:function(t){return Xt(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],o,i,s,c=[],u=[],f,h,l,m;for(o=0;256>o;o++)u[(c[o]=o<<1^283*(o>>7))^o]=o;for(i=s=0;!r[i];i^=f||1,s=u[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[i]=l,n[l]=i,h=c[o=c[f=c[i]]],m=16843009*h^65537*o^257*f^16843008*i,h=257*c[l]^16843008*l,o=0;4>o;o++)t[o][i]=h=h<<24^h>>>8,e[o][l]=m=m<<24^m>>>8;for(o=0;5>o;o++)t[o]=t[o].slice(0),e[o]=e[o].slice(0)}};function Xt(t,e,r){if(e.length!==4)throw new a.exception.invalid("invalid aes block size");var n=t.b[r],o=e[0]^n[0],i=e[r?3:1]^n[1],s=e[2]^n[2];e=e[r?1:3]^n[3];var c,u,f,h=n.length/4-2,l,m=4,p=[0,0,0,0];c=t.w[r],t=c[0];var A=c[1],P=c[2],W=c[3],G=c[4];for(l=0;l>>24]^A[i>>16&255]^P[s>>8&255]^W[e&255]^n[m],u=t[i>>>24]^A[s>>16&255]^P[e>>8&255]^W[o&255]^n[m+1],f=t[s>>>24]^A[e>>16&255]^P[o>>8&255]^W[i&255]^n[m+2],e=t[e>>>24]^A[o>>16&255]^P[i>>8&255]^W[s&255]^n[m+3],m+=4,o=c,i=u,s=f;for(l=0;4>l;l++)p[r?3&-l:l]=G[o>>>24]<<24^G[i>>16&255]<<16^G[s>>8&255]<<8^G[e&255]^n[m++],c=o,o=i,i=s,s=e,e=c;return p}a.bitArray={bitSlice:function(t,e,r){return t=a.bitArray.Y(t.slice(e/32),32-(e&31)).slice(1),r===void 0?t:a.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(a.bitArray.bitLength(t)!==a.bitArray.bitLength(e))return!1;var r=0,n;for(n=0;n>>e),r=t[o]<<32-e;return o=t.length?t[t.length-1]:0,t=a.bitArray.getPartial(o),n.push(a.bitArray.partial(e+t&31,32>>24|r>>>8&65280|(r&65280)<<8|r<<24;return t}};a.codec.utf8String={fromBits:function(t){var e="",r=a.bitArray.bitLength(t),n,o;for(n=0;n>>8>>>8>>>8),o<<=8;return decodeURIComponent(escape(e))},toBits:function(t){t=unescape(encodeURIComponent(t));var e=[],r,n=0;for(r=0;r>>o)>>>26),6>o?(s=t[r]<<6-o,o+=26,r++):(s<<=6,o-=6);for(;n.length&3&&!e;)n+="=";return n},toBits:function(t,e){t=t.replace(/\s|=/g,"");var r=[],n,o=0,i=a.codec.base64.S,s=0,c;for(e&&(i=i.substr(0,62)+"-_"),n=0;nc)throw new a.exception.invalid("this isn't base64!");26>>o),s=c<<32-o):(o+=6,s^=c<<32-o)}return o&56&&r.push(a.bitArray.partial(o&56,s,1)),r}};a.codec.base64url={fromBits:function(t){return a.codec.base64.fromBits(t,1,1)},toBits:function(t){return a.codec.base64.toBits(t,1)}};a.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()};a.hash.sha256.hash=function(t){return new a.hash.sha256().update(t).finalize()};a.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=a.codec.utf8String.toBits(t));var e,r=this.f=a.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+a.bitArray.bitLength(t),9007199254740991e;r++){for(o=!0,n=2;n*n<=r;n++)if(r%n===0){o=!1;break}o&&(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,o=this.g,i=this.b,s=o[0],c=o[1],u=o[2],f=o[3],h=o[4],l=o[5],m=o[6],p=o[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+p+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(m^h&(l^m))+i[e],p=m,m=l,l=h,h=f+r|0,f=u,u=c,c=s,s=r+(c&u^f&(c^u))+(c>>>2^c>>>13^c>>>22^c<<30^c<<19^c<<10)|0;o[0]=o[0]+s|0,o[1]=o[1]+c|0,o[2]=o[2]+u|0,o[3]=o[3]+f|0,o[4]=o[4]+h|0,o[5]=o[5]+l|0,o[6]=o[6]+m|0,o[7]=o[7]+p|0}};a.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()};a.hash.sha512.hash=function(t){return new a.hash.sha512().update(t).finalize()};a.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=a.codec.utf8String.toBits(t));var e,r=this.f=a.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+a.bitArray.bitLength(t),9007199254740991r;n++){for(i=!0,o=2;o*o<=n;o++)if(n%o===0){i=!1;break}i&&(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,o=this.b,i=n[0],s=n[1],c=n[2],u=n[3],f=n[4],h=n[5],l=n[6],m=n[7],p=n[8],A=n[9],P=n[10],W=n[11],G=n[12],Be=n[13],Ot=n[14],je=n[15],D;if(typeof Uint32Array<"u"){D=Array(160);for(var x=0;32>x;x++)D[x]=t[x]}else D=t;var x=i,k=s,ye=c,ne=u,ve=f,oe=h,et=l,ge=m,F=p,T=A,We=P,we=W,Fe=G,Ee=Be,tt=Ot,Ae=je;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 E=D[2*(t-15)+1];e=(E<<31|r>>>1)^(E<<24|r>>>8)^r>>>7;var z=(r<<31|E>>>1)^(r<<24|E>>>8)^(r<<25|E>>>7);r=D[2*(t-2)];var J=D[2*(t-2)+1],E=(J<<13|r>>>19)^(r<<3|J>>>29)^r>>>6,J=(r<<13|J>>>19)^(J<<3|r>>>29)^(r<<26|J>>>6),rt=D[2*(t-7)],nt=D[2*(t-16)],Oe=D[2*(t-16)+1];r=z+D[2*(t-7)+1],e=e+rt+(r>>>0>>0?1:0),r+=J,e+=E+(r>>>0>>0?1:0),r+=Oe,e+=nt+(r>>>0>>0?1:0)}D[2*t]=e|=0,D[2*t+1]=r|=0;var rt=F&We^~F&Fe,_t=T&we^~T&Ee,J=x&ye^x&ve^ye&ve,yr=k&ne^k&oe^ne&oe,nt=(k<<4|x>>>28)^(x<<30|k>>>2)^(x<<25|k>>>7),Oe=(x<<4|k>>>28)^(k<<30|x>>>2)^(k<<25|x>>>7),vr=o[2*t],xt=o[2*t+1],E=Ae+((F<<18|T>>>14)^(F<<14|T>>>18)^(T<<23|F>>>9)),z=tt+((T<<18|F>>>14)^(T<<14|F>>>18)^(F<<23|T>>>9))+(E>>>0>>0?1:0),E=E+_t,z=z+(rt+(E>>>0<_t>>>0?1:0)),E=E+xt,z=z+(vr+(E>>>0>>0?1:0)),E=E+r|0,z=z+(e+(E>>>0>>0?1:0));r=Oe+yr,e=nt+J+(r>>>0>>0?1:0),tt=Fe,Ae=Ee,Fe=We,Ee=we,We=F,we=T,T=ge+E|0,F=et+z+(T>>>0>>0?1:0)|0,et=ve,ge=oe,ve=ye,oe=ne,ye=x,ne=k,k=E+r|0,x=z+e+(k>>>0>>0?1:0)|0}s=n[1]=s+k|0,n[0]=i+x+(s>>>0>>0?1:0)|0,u=n[3]=u+ne|0,n[2]=c+ye+(u>>>0>>0?1:0)|0,h=n[5]=h+oe|0,n[4]=f+ve+(h>>>0>>0?1:0)|0,m=n[7]=m+ge|0,n[6]=l+et+(m>>>0>>0?1:0)|0,A=n[9]=A+T|0,n[8]=p+F+(A>>>0>>0?1:0)|0,W=n[11]=W+we|0,n[10]=P+We+(W>>>0>>0?1:0)|0,Be=n[13]=Be+Ee|0,n[12]=G+Fe+(Be>>>0>>0?1:0)|0,je=n[15]=je+Ae|0,n[14]=Ot+tt+(je>>>0>>0?1:0)|0}};a.mode.ccm={name:"ccm",F:[],listenProgress:function(t){a.mode.ccm.F.push(t)},unListenProgress:function(t){t=a.mode.ccm.F.indexOf(t),-1u)throw new a.exception.invalid("ccm: iv must be at least 7 bytes");for(i=2;4>i&&f>>>8*i;i++);return i<15-u&&(i=15-u),r=c.clamp(r,8*(15-i)),e=a.mode.ccm.U(t,e,r,n,o,i),s=a.mode.ccm.V(t,s,r,e,o,i),c.concat(s.data,s.tag)},decrypt:function(t,e,r,n,o){o=o||64,n=n||[];var i=a.bitArray,s=i.bitLength(r)/8,f=i.bitLength(e),c=i.clamp(e,f-o),u=i.bitSlice(e,f-o),f=(f-o)/8;if(7>s)throw new a.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=i.clamp(r,8*(15-e)),c=a.mode.ccm.V(t,c,r,u,o,e),t=a.mode.ccm.U(t,c.data,r,n,o,e),!i.equal(c.tag,t))throw new a.exception.corrupt("ccm: tag doesn't match");return c.data},ma:function(t,e,r,n,o,i){var s=[],c=a.bitArray,u=c.P;if(n=[c.partial(8,(e.length?64:0)|n-2<<2|i-1)],n=c.concat(n,r),n[3]|=o,n=t.encrypt(n),e.length)for(r=c.bitLength(e)/8,65279>=r?s=[c.partial(16,r)]:4294967295>=r&&(s=c.concat([c.partial(16,65534)],[r])),s=c.concat(s,e),e=0;eo||16h&&(a.mode.ccm.da(s/u),h+=l),r[3]++,o=t.encrypt(r),e[s]^=o[0],e[s+1]^=o[1],e[s+2]^=o[2],e[s+3]^=o[3];return{tag:n,data:c.clamp(e,f)}}};a.misc.hmac=function(t,e){this.W=e=e||a.hash.sha256;var r=[[],[]],n,o=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>o&&(t=e.hash(t)),n=0;nn||0>r)throw new a.exception.invalid("invalid params to pbkdf2");typeof t=="string"&&(t=a.codec.utf8String.toBits(t)),typeof e=="string"&&(e=a.codec.utf8String.toBits(e)),o=o||a.misc.hmac,t=new o(t);var i,s,c,u,f=[],h=a.bitArray;for(u=1;32*f.length<(n||1);u++){for(o=i=t.encrypt(h.concat(e,[u])),s=1;ss;s++)o.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=i),this.N++,this.b=a.hash.sha256.hash(this.b.concat(o)),this.K=new a.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,i,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,i,t.length]),this.h[s].update(t);break;default:u=1}if(u)throw new a.exception.bug("random: addEntropy only supports number, array of numbers or string");this.s[s]+=e,this.i+=e,c===this.A&&(this.isReady()!==this.A&&Gt("seeded",Math.max(this.u,this.i)),Gt("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:be(this,this.la),mouseCollector:be(this,this.na),keyboardCollector:be(this,this.ja),accelerometerCollector:be(this,this.ca),touchCollector:be(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 a.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,o=this.J[t],i=[];for(n in o)o.hasOwnProperty(n)&&o[n]===e&&i.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 be(t,e){return function(){e.apply(t,arguments)}}a.random=new a.prng(6);e:try{if($e=typeof ce<"u"&&ce.exports){try{Xe=xr("crypto")}catch{Xe=null}$e=Ke=Xe}if($e&&Ke.randomBytes)De=Ke.randomBytes(128),De=new Uint32Array(new Uint8Array(De).buffer),a.random.addEntropy(De,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(Ce=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(Ce);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(Ce);else break e;a.random.addEntropy(Ce,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 De,Ke,Ce,$e,Xe;a.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 o=a.json,i=o.j({iv:a.random.randomWords(4,0)},o.defaults),s;if(o.j(i,r),r=i.adata,typeof i.salt=="string"&&(i.salt=a.codec.base64.toBits(i.salt)),typeof i.iv=="string"&&(i.iv=a.codec.base64.toBits(i.iv)),!a.mode[i.mode]||!a.cipher[i.cipher]||typeof t=="string"&&100>=i.iter||i.ts!==64&&i.ts!==96&&i.ts!==128||i.ks!==128&&i.ks!==192&&i.ks!==256||2>i.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||4{"use strict";var on=Object.prototype.hasOwnProperty,S="~";function Se(){}Object.create&&(Se.prototype=Object.create(null),new Se().__proto__||(S=!1));function sn(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function ir(t,e,r,n,o){if(typeof r!="function")throw new TypeError("The listener must be a function");var i=new sn(r,n||t,o),s=S?S+e:e;return t._events[s]?t._events[s].fn?t._events[s]=[t._events[s],i]:t._events[s].push(i):(t._events[s]=i,t._eventsCount++),t}function Ge(t,e){--t._eventsCount===0?t._events=new Se:delete t._events[e]}function b(){this._events=new Se,this._eventsCount=0}b.prototype.eventNames=function(){var e=[],r,n;if(this._eventsCount===0)return e;for(n in r=this._events)on.call(r,n)&&e.push(S?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(r)):e};b.prototype.listeners=function(e){var r=S?S+e:e,n=this._events[r];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o(Object.assign(t,e),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:t}),t),jt=(t,e)=>{q(t,{uploadStatus:2}),self.postMessage({event:"OPERATION_FAILED",error:e})},Wt=()=>{v.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),v.once("OPERATION_FAILED",t=>{self.postMessage({event:"OPERATION_FAILED",error:t})})};var Pr={withStackTrace:!1},Jt=(t,e,r=Pr)=>{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:o}};function se(t,e,r,n){function o(i){return i instanceof r?i:new r(function(s){s(i)})}return new(r||(r=Promise))(function(i,s){function c(h){try{f(n.next(h))}catch(l){s(l)}}function u(h){try{f(n.throw(h))}catch(l){s(l)}}function f(h){h.done?i(h.value):o(h.value).then(c,u)}f((n=n.apply(t,e||[])).next())})}function Ft(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 H(t){return this instanceof H?(this.v=t,this):new H(t)}function zt(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),c("next"),c("throw"),c("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(p){return function(A){return Promise.resolve(A).then(p,l)}}function c(p,A){n[p]&&(o[p]=function(P){return new Promise(function(W,G){i.push([p,P,W,G])>1||u(p,P)})},A&&(o[p]=A(o[p])))}function u(p,A){try{f(n[p](A))}catch(P){m(i[0][3],P)}}function f(p){p.value instanceof H?Promise.resolve(p.value.v).then(h,l):m(i[0][2],p)}function h(p){u("next",p)}function l(p){u("throw",p)}function m(p,A){p(A),i.shift(),i.length&&u(i[0][0],i[0][1])}}function Mr(t){var e,r;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=t[o]?function(s){return(r=!r)?{value:H(t[o](s)),done:!1}:i?i(s):s}:i}}function Nr(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 Ft=="function"?Ft(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=t[i]&&function(s){return new Promise(function(c,u){s=t[i](s),o(c,u,s.done,s.value)})}}function o(i,s,c,u){Promise.resolve(u).then(function(f){i({value:f,done:c})},s)}}var L=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new N(n));return new t(r)}static fromPromise(e,r){let n=e.then(o=>new N(o)).catch(o=>new U(r(o)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(se(this,void 0,void 0,function*(){try{return new N(yield e(...n))}catch(o){return new U(r?r(o):o)}}))}static combine(e){return Ur(e)}static combineWithAllErrors(e){return Br(e)}map(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){return r.isErr()?new U(r.error):new N(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){if(r.isErr())return new U(r.error);let n=yield e(r.value);return n.isErr()?new U(n.error):new N(r.value)})))}andTee(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){if(r.isErr())return new U(r.error);try{yield e(r.value)}catch{}return new N(r.value)})))}mapErr(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){return r.isOk()?new N(r.value):new U(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new U(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new N(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 zt(this,arguments,function*(){return yield H(yield H(yield*Mr(Nr(yield H(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return zt(this,arguments,function*(){let r=yield H(this._promise);return r.isErr()&&(yield yield H(C(r.error))),yield H(r.value)})}},K=t=>new L(Promise.resolve(new N(t))),C=t=>new L(Promise.resolve(new U(t))),vn=L.fromPromise,gn=L.fromSafePromise,wn=L.fromThrowable,Ht=t=>{let e=te([]);for(let r of t)if(r.isErr()){e=Y(r.error);break}else e.map(n=>n.push(r.value));return e},Ur=t=>L.fromSafePromise(Promise.all(t)).andThen(Ht),Kt=t=>{let e=te([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=Y([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},Br=t=>L.fromSafePromise(Promise.all(t)).andThen(Kt),ut;(function(t){function e(o,i){return(...s)=>{try{let c=o(...s);return te(c)}catch(c){return Y(i?i(c):c)}}}t.fromThrowable=e;function r(o){return Ht(o)}t.combine=r;function n(o){return Kt(o)}t.combineWithAllErrors=n})(ut||(ut={}));var te=t=>new N(t);function Y(t){return new U(t)}var N=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return te(e(this.value))}mapErr(e){return te(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 te(this.value)}orElse(e){return te(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return L.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 Jt("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},U=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return Y(this.error)}mapErr(e){return Y(e(this.error))}andThrough(e){return Y(this.error)}andTee(e){return Y(this.error)}andThen(e){return Y(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return C(this.error)}asyncAndThrough(e){return C(this.error)}asyncMap(e){return C(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield Y(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw Jt("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},En=ut.fromThrowable;var Z=class extends Error{constructor(r,n={}){let{cause:o,context:i}=n;super(r,{cause:o});M(this,"context");this.name=this.constructor.name,this.context=i}};var $=class extends Z{};var _e=class extends ${constructor(){super(...arguments);M(this,"message","An error occured while trying to connect to WebSocket")}};var re=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)};var ae=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),o="";for(let i=0;i>2]+this._charset[(n[i]&3)<<4|n[i+1]>>4]+this._charset[(n[i+1]&15)<<2|n[i+2]>>6]+this._charset[n[i+2]&63];return r%3==2?(o=o.substring(0,o.length-1),this._noPadding||(o+="=")):r%3==1&&(o=o.substring(0,o.length-2),this._noPadding||(o+="==")),o}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),o,i,s,c,u=0,f=0;for(;u>4,n[u++]=(i&15)<<4|s>>2,n[u++]=(s&3)<<6|c;return n.buffer}};var jr=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function xe(t){return jr.Decode(t)}var Wr=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function ft(t){return Wr.Decode(t)}var Qt=st(Yt());var V=class extends Z{};var ue=class extends V{constructor(){super(...arguments);M(this,"message","Unable to decrypt the provided data")}};var Zt=(t,e)=>{try{let r=typeof e=="string"?e:e.data;return K(xe(Qt.default.decrypt(t,r)))}catch(r){return C(new ue(void 0,{cause:re(r)}))}};var er=(t,e)=>Kr(t).andThen(r=>L.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:e.iv},r,e.data),n=>new ue(void 0,{cause:re(n)})));var Kr=t=>L.fromPromise(crypto.subtle.importKey("raw",ft(t),{name:"AES-GCM"},!1,["encrypt","decrypt"]),e=>new V("Unable to import cryptography key",{cause:re(e)}));var tr=(t,e)=>e.algo===void 0||e.algo===0?Zt(t,e):er(t,e);var I={},rr=5,Gr=t=>(v.emit("UPLOAD_CANCELLED",t.success),K(void 0)),qr=(t,e)=>{let r=t.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let o=JSON.parse(n);if(nn(o)){let i=r.shift();if(i){let s=JSON.parse(i);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=xe(s.data)),tr(e.keys.client,s).andThen(c=>{let u=typeof c=="string"?new TextEncoder().encode(c).buffer:c;return o.part===0?(q(e,{chunksReady:e.chunksReady+1,delAtFirstView:o.del_at_first_view,delay:o.delay,name:o.name,size:o.size,totalChunks:o.total,type:o.type,zipped:o.zipped}),v.emit("DOWNLOAD_STARTED")):q(e,{chunksReady:e.chunksReady+1}),v.emit("CHUNK_DOWNLOADED",u,o.part),e.chunksReady===o.total?Zr(e).andThen(()=>(v.emit("DOWNLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED"),K(void 0))):K(void 0)})}else{let s=new $("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",s),C(s)}}else{let i=new $(o.msg);return v.emit("OPERATION_FAILED",i),C(i)}}else{let o=new $("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",o),C(o)}},Yr=(t,e)=>{if(t.success)return t.j===0&&(q(e,{keys:{client:e.keys.client,server:t.short},actionToken:t.token,queueIndex:t.i}),v.emit("UPLOAD_STARTED")),q(e,{chunksReady:e.chunksReady+1,createdAt:t.created_at}),v.emit("CHUNK_UPLOADED"),e.chunksReady===e.totalChunks&&(q(e,{uploadStatus:1}),v.emit("UPLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED")),K(void 0);{let r=new $(t.msg);return v.emit("OPERATION_FAILED",r),C(r)}},Vr=(t,e)=>{let r=rn(t.data),n;if(r)if(!r.action&&r.msg){let o=new $(r.msg);return v.emit("OPERATION_FAILED",o),C(o)}else"delay"in r?n=Yr(r,e):n=Gr(r);else n=qr(t.data,e);return n},Qr=t=>I!==void 0&&I[t]!==void 0&&I[t].readyState===WebSocket.CONNECTING,lt=t=>I!==void 0&&I[t]!==void 0&&I[t].readyState===WebSocket.OPEN;var dt=(t,e)=>{let r;return t.password?r={part:e,file_pwd:t.password}:r={part:e},pt(or(t),t,JSON.stringify(r))},Zr=t=>{let e;return t.password?e={ended:!0,file_pwd:t.password}:e={ended:!0},pt(or(t),t,JSON.stringify(e))};var pt=(t,e,r)=>lt(t)?(I[t].send(r),K(void 0)):nr(t).andThen(()=>(I[t].onmessage=n=>Vr(n,e),pt(t,e,r))),nr=(t,e=0)=>(!lt(t)&&!Qr(t)&&(I[t]=new WebSocket(t),v.once("SOCKET_OPERATION_TERMINATED",()=>{I[t].close()}),v.once("OPERATION_FAILED",()=>{v.emit("SOCKET_OPERATION_TERMINATED")}),I[t].onopen=()=>{v.emit("SOCKET_OPENED")},I[t].onclose=()=>{},I[t].onerror=()=>++e<=rr?(console.error(`An error happened while trying to connect to WebSocket ${t}. Trying again. ${e} / ${rr}`),nr(t,e)):(v.emit("SOCKET_ONERROR"),C(new _e(`Unable to connect to WebSocket ${t}.`)))),en(t).andThen(()=>K(t)).orElse(r=>C(r))),en=t=>L.fromPromise(new Promise((e,r)=>{lt(t)?e(void 0):(v.once("SOCKET_OPENED",()=>{e(void 0)}),v.on("SOCKET_ONERROR",()=>{r(new _e)}))}),e=>re(e));var tn=(t,e)=>{let r=new URL(t);return r.protocol=r.protocol==="http:"?"ws:":"wss:",r.pathname+=e,new URL(r.origin+r.pathname)},or=t=>tn(new URL(t.serverUrl),"download"+`/${t.keys.server}`).toString();var rn=t=>{try{let e=JSON.parse(t);if(e&&typeof e=="object")return e}catch{}return!1},nn=t=>typeof t=="object"&&t!==null&&!("msg"in t);var yt=st(sr(),1);var Re=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},vt=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},ar=t=>globalThis.DOMException===void 0?new vt(t):new DOMException(t),cr=t=>{let e=t.reason===void 0?ar("This operation was aborted."):t.reason;return e instanceof Error?e:ar(e)};function gt(t,e){let{milliseconds:r,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,u=new Promise((f,h)=>{if(typeof r!="number"||Math.sign(r)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(e.signal){let{signal:m}=e;m.aborted&&h(cr(m));let p=()=>{h(cr(m))};m.addEventListener("abort",p,{once:!0}),t.finally(()=>{m.removeEventListener("abort",p)})}if(r===Number.POSITIVE_INFINITY){t.then(f,h);return}let l=new Re;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(m){h(m)}return}typeof t.cancel=="function"&&t.cancel(),o===!1?f():o instanceof Error?h(o):(l.message=o!=null?o:`Promise timed out after ${r} milliseconds`,h(l))},r),(async()=>{try{f(await t)}catch(m){h(m)}})()}).finally(()=>{u.clear()});return u.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},u}function wt(t,e,r){let n=0,o=t.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;r(t[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var X,ke=class{constructor(){O(this,X,[])}enqueue(e,r){r={priority:0,...r};let n={priority:r.priority,run:e};if(this.size&&d(this,X)[this.size-1].priority>=r.priority){d(this,X).push(n);return}let o=wt(d(this,X),n,(i,s)=>s.priority-i.priority);d(this,X).splice(o,0,n)}dequeue(){let e=d(this,X).shift();return e==null?void 0:e.run}filter(e){return d(this,X).filter(r=>r.priority===e.priority).map(r=>r.run)}get size(){return d(this,X).length}};X=new WeakMap;var fe,he,ee,Ie,le,Pe,B,de,R,Me,j,pe,Q,Ne,y,ur,fr,hr,lr,dr,qe,Et,At,Ye,pr,Ve,Te=class extends yt.default{constructor(r){var n,o,i,s;super();O(this,y);O(this,fe);O(this,he);O(this,ee,0);O(this,Ie);O(this,le);O(this,Pe,0);O(this,B);O(this,de);O(this,R);O(this,Me);O(this,j,0);O(this,pe);O(this,Q);O(this,Ne);M(this,"timeout");if(r={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:ke,...r},!(typeof r.intervalCap=="number"&&r.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${(o=(n=r.intervalCap)==null?void 0:n.toString())!=null?o:""}\` (${typeof r.intervalCap})`);if(r.interval===void 0||!(Number.isFinite(r.interval)&&r.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${(s=(i=r.interval)==null?void 0:i.toString())!=null?s:""}\` (${typeof r.interval})`);w(this,fe,r.carryoverConcurrencyCount),w(this,he,r.intervalCap===Number.POSITIVE_INFINITY||r.interval===0),w(this,Ie,r.intervalCap),w(this,le,r.interval),w(this,R,new r.queueClass),w(this,Me,r.queueClass),this.concurrency=r.concurrency,this.timeout=r.timeout,w(this,Ne,r.throwOnTimeout===!0),w(this,Q,r.autoStart===!1)}get concurrency(){return d(this,pe)}set concurrency(r){if(!(typeof r=="number"&&r>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${r}\` (${typeof r})`);w(this,pe,r),_(this,y,Ye).call(this)}async add(r,n={}){return n={timeout:this.timeout,throwOnTimeout:d(this,Ne),...n},new Promise((o,i)=>{d(this,R).enqueue(async()=>{var s;ze(this,j)._++,ze(this,ee)._++;try{(s=n.signal)==null||s.throwIfAborted();let c=r({signal:n.signal});n.timeout&&(c=gt(Promise.resolve(c),{milliseconds:n.timeout})),n.signal&&(c=Promise.race([c,_(this,y,pr).call(this,n.signal)]));let u=await c;o(u),this.emit("completed",u)}catch(c){if(c instanceof Re&&!n.throwOnTimeout){o();return}i(c),this.emit("error",c)}finally{_(this,y,hr).call(this)}},n),this.emit("add"),_(this,y,qe).call(this)})}async addAll(r,n){return Promise.all(r.map(async o=>this.add(o,n)))}start(){return d(this,Q)?(w(this,Q,!1),_(this,y,Ye).call(this),this):this}pause(){w(this,Q,!0)}clear(){w(this,R,new(d(this,Me)))}async onEmpty(){d(this,R).size!==0&&await _(this,y,Ve).call(this,"empty")}async onSizeLessThan(r){d(this,R).sized(this,R).size{_(this,y,lr).call(this)},n)),!0}return!1},qe=function(){if(d(this,R).size===0)return d(this,B)&&clearInterval(d(this,B)),w(this,B,void 0),this.emit("empty"),d(this,j)===0&&this.emit("idle"),!1;if(!d(this,Q)){let r=!d(this,y,dr);if(d(this,y,ur)&&d(this,y,fr)){let n=d(this,R).dequeue();return n?(this.emit("active"),n(),r&&_(this,y,Et).call(this),!0):!1}}return!1},Et=function(){d(this,he)||d(this,B)!==void 0||(w(this,B,setInterval(()=>{_(this,y,At).call(this)},d(this,le))),w(this,Pe,Date.now()+d(this,le)))},At=function(){d(this,ee)===0&&d(this,j)===0&&d(this,B)&&(clearInterval(d(this,B)),w(this,B,void 0)),w(this,ee,d(this,fe)?d(this,j):0),_(this,y,Ye).call(this)},Ye=function(){for(;_(this,y,qe).call(this););},pr=async function(r){return new Promise((n,o)=>{r.addEventListener("abort",()=>{o(r.reason)},{once:!0})})},Ve=async function(r,n){return new Promise(o=>{let i=()=>{n&&!n()||(this.off(r,i),o())};this.on(r,i)})};var Ze=navigator.hardwareConcurrency||1,Qe=new Te({concurrency:Ze}),me=0,mr=!1,Ue=!1;self.onmessage=t=>{mr||(Wt(),mr=!0,v.once("DOWNLOAD_STARTED",()=>{self.postMessage({event:"DOWNLOAD_STARTED"})}),v.once("DOWNLOAD_COMPLETE",()=>{self.postMessage({event:"DOWNLOAD_COMPLETE"})}),v.on("FILE_UPDATED",q),v.on("CHUNK_DOWNLOADED",(r,n)=>{me--,!Ue&&me{jt(e.args.lufiFile,r)})}};var an=t=>{let{lufiFile:e}=t.args;return v.on("DOWNLOAD_STARTED",async()=>{for(let r=1;r{await dt(e,r),me++,(Ue||me===Ze)&&Qe.pause()})}),me++,dt(e,0)}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbHVmaS1zamNsQDEuMC44L25vZGVfbW9kdWxlcy9sdWZpLXNqY2wvc2pjbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vZXZlbnRlbWl0dGVyM0A1LjAuMS9ub2RlX21vZHVsZXMvZXZlbnRlbWl0dGVyMy9pbmRleC5qcyIsICIuLi8uLi9zcmMvd29ya2VyL3NoYXJlZC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbmV2ZXJ0aHJvd0A4LjEuMS9ub2RlX21vZHVsZXMvbmV2ZXJ0aHJvdy9kaXN0L2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9lcnJvci9iYXNlLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWNvbm5lY3Rpb24tZXJyb3IudHMiLCAiLi4vLi4vc3JjL3V0aWxzLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9hcnJheWJ1ZmZlci1lbmNvZGluZ0AxLjEuMC9ub2RlX21vZHVsZXMvYXJyYXlidWZmZXItZW5jb2Rpbmcvc3JjL2Jhc2U2NC9lbmNvZGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vYXJyYXlidWZmZXItZW5jb2RpbmdAMS4xLjAvbm9kZV9tb2R1bGVzL2FycmF5YnVmZmVyLWVuY29kaW5nL3NyYy9iYXNlNjQvc3RhbmRhcmQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2FycmF5YnVmZmVyLWVuY29kaW5nQDEuMS4wL25vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci1lbmNvZGluZy9zcmMvYmFzZTY0L3VybC50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by9zamNsLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by93ZWIudHMiLCAiLi4vLi4vc3JjL2FwaS9jcnlwdG8udHMiLCAiLi4vLi4vc3JjL2FwaS93ZWJzb2NrZXQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50ZW1pdHRlcjNANS4wLjEvbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXgubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9wLXRpbWVvdXRANi4xLjMvbm9kZV9tb2R1bGVzL3AtdGltZW91dC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vcC1xdWV1ZUA4LjAuMS9ub2RlX21vZHVsZXMvcC1xdWV1ZS9kaXN0L2xvd2VyLWJvdW5kLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9wLXF1ZXVlQDguMC4xL25vZGVfbW9kdWxlcy9wLXF1ZXVlL2Rpc3QvcHJpb3JpdHktcXVldWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL3AtcXVldWVAOC4wLjEvbm9kZV9tb2R1bGVzL3AtcXVldWUvZGlzdC9pbmRleC5qcyIsICIuLi8uLi9zcmMvd29ya2VyL2Rvd25sb2FkLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO3ZhciBzamNsPXtjaXBoZXI6e30saGFzaDp7fSxrZXlleGNoYW5nZTp7fSxtb2RlOnt9LG1pc2M6e30sY29kZWM6e30sZXhjZXB0aW9uOntjb3JydXB0OmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkNPUlJVUFQ6IFwiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPWF9LGludmFsaWQ6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiSU5WQUxJRDogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0sYnVnOmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkJVRzogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0sbm90UmVhZHk6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiTk9UIFJFQURZOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfX19O1xuc2pjbC5jaXBoZXIuYWVzPWZ1bmN0aW9uKGEpe3RoaXMud1swXVswXVswXXx8dGhpcy5DKCk7dmFyIGIsYyxkLGUsZj10aGlzLndbMF1bNF0sZz10aGlzLndbMV07Yj1hLmxlbmd0aDt2YXIgaD0xO2lmKDQhPT1iJiY2IT09YiYmOCE9PWIpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJpbnZhbGlkIGFlcyBrZXkgc2l6ZVwiKTt0aGlzLmI9W2Q9YS5zbGljZSgwKSxlPVtdXTtmb3IoYT1iO2E8NCpiKzI4O2ErKyl7Yz1kW2EtMV07aWYoMD09PWElYnx8OD09PWImJjQ9PT1hJWIpYz1mW2M+Pj4yNF08PDI0XmZbYz4+MTYmMjU1XTw8MTZeZltjPj44JjI1NV08PDheZltjJjI1NV0sMD09PWElYiYmKGM9Yzw8OF5jPj4+MjReaDw8MjQsaD1oPDwxXjI4MyooaD4+NykpO2RbYV09ZFthLWJdXmN9Zm9yKGI9MDthO2IrKyxhLS0pYz1kW2ImMz9hOmEtNF0sZVtiXT00Pj1hfHw0PmI/YzpnWzBdW2ZbYz4+PjI0XV1eZ1sxXVtmW2M+PjE2JjI1NV1dXmdbMl1bZltjPj44JjI1NV1dXmdbM11bZltjJlxuMjU1XV19O1xuc2pjbC5jaXBoZXIuYWVzLnByb3RvdHlwZT17ZW5jcnlwdDpmdW5jdGlvbihhKXtyZXR1cm4gYWEodGhpcyxhLDApfSxkZWNyeXB0OmZ1bmN0aW9uKGEpe3JldHVybiBhYSh0aGlzLGEsMSl9LHc6W1tbXSxbXSxbXSxbXSxbXV0sW1tdLFtdLFtdLFtdLFtdXV0sQzpmdW5jdGlvbigpe3ZhciBhPXRoaXMud1swXSxiPXRoaXMud1sxXSxjPWFbNF0sZD1iWzRdLGUsZixnLGg9W10saz1bXSxuLGwsbSxwO2ZvcihlPTA7MHgxMDA+ZTtlKyspa1soaFtlXT1lPDwxXjI4MyooZT4+NykpXmVdPWU7Zm9yKGY9Zz0wOyFjW2ZdO2ZePW58fDEsZz1rW2ddfHwxKWZvcihtPWdeZzw8MV5nPDwyXmc8PDNeZzw8NCxtPW0+PjhebSYyNTVeOTksY1tmXT1tLGRbbV09ZixsPWhbZT1oW249aFtmXV1dLHA9MHgxMDEwMTAxKmxeMHgxMDAwMSplXjB4MTAxKm5eMHgxMDEwMTAwKmYsbD0weDEwMSpoW21dXjB4MTAxMDEwMCptLGU9MDs0PmU7ZSsrKWFbZV1bZl09bD1sPDwyNF5sPj4+OCxiW2VdW21dPXA9cDw8MjRecD4+Pjg7Zm9yKGU9XG4wOzU+ZTtlKyspYVtlXT1hW2VdLnNsaWNlKDApLGJbZV09YltlXS5zbGljZSgwKX19O1xuZnVuY3Rpb24gYWEoYSxiLGMpe2lmKDQhPT1iLmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgYWVzIGJsb2NrIHNpemVcIik7dmFyIGQ9YS5iW2NdLGU9YlswXV5kWzBdLGY9YltjPzM6MV1eZFsxXSxnPWJbMl1eZFsyXTtiPWJbYz8xOjNdXmRbM107dmFyIGgsayxuLGw9ZC5sZW5ndGgvNC0yLG0scD00LHo9WzAsMCwwLDBdO2g9YS53W2NdO2E9aFswXTt2YXIgQT1oWzFdLEM9aFsyXSxCPWhbM10sRD1oWzRdO2ZvcihtPTA7bTxsO20rKyloPWFbZT4+PjI0XV5BW2Y+PjE2JjI1NV1eQ1tnPj44JjI1NV1eQltiJjI1NV1eZFtwXSxrPWFbZj4+PjI0XV5BW2c+PjE2JjI1NV1eQ1tiPj44JjI1NV1eQltlJjI1NV1eZFtwKzFdLG49YVtnPj4+MjRdXkFbYj4+MTYmMjU1XV5DW2U+PjgmMjU1XV5CW2YmMjU1XV5kW3ArMl0sYj1hW2I+Pj4yNF1eQVtlPj4xNiYyNTVdXkNbZj4+OCYyNTVdXkJbZyYyNTVdXmRbcCszXSxwKz00LGU9aCxmPWssZz1uO2ZvcihtPVxuMDs0Pm07bSsrKXpbYz8zJi1tOm1dPURbZT4+PjI0XTw8MjReRFtmPj4xNiYyNTVdPDwxNl5EW2c+PjgmMjU1XTw8OF5EW2ImMjU1XV5kW3ArK10saD1lLGU9ZixmPWcsZz1iLGI9aDtyZXR1cm4gen1cbnNqY2wuYml0QXJyYXk9e2JpdFNsaWNlOmZ1bmN0aW9uKGEsYixjKXthPXNqY2wuYml0QXJyYXkuWShhLnNsaWNlKGIvMzIpLDMyLShiJjMxKSkuc2xpY2UoMSk7cmV0dXJuIHZvaWQgMD09PWM/YTpzamNsLmJpdEFycmF5LmNsYW1wKGEsYy1iKX0sZXh0cmFjdDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TWF0aC5mbG9vcigtYi1jJjMxKTtyZXR1cm4oKGIrYy0xXmIpJi0zMj9hW2IvMzJ8MF08PDMyLWReYVtiLzMyKzF8MF0+Pj5kOmFbYi8zMnwwXT4+PmQpJigxPDxjKS0xfSxjb25jYXQ6ZnVuY3Rpb24oYSxiKXtpZigwPT09YS5sZW5ndGh8fDA9PT1iLmxlbmd0aClyZXR1cm4gYS5jb25jYXQoYik7dmFyIGM9YVthLmxlbmd0aC0xXSxkPXNqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChjKTtyZXR1cm4gMzI9PT1kP2EuY29uY2F0KGIpOnNqY2wuYml0QXJyYXkuWShiLGQsY3wwLGEuc2xpY2UoMCxhLmxlbmd0aC0xKSl9LGJpdExlbmd0aDpmdW5jdGlvbihhKXt2YXIgYj1hLmxlbmd0aDtyZXR1cm4gMD09PVxuYj8wOjMyKihiLTEpK3NqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChhW2ItMV0pfSxjbGFtcDpmdW5jdGlvbihhLGIpe2lmKDMyKmEubGVuZ3RoPGIpcmV0dXJuIGE7YT1hLnNsaWNlKDAsTWF0aC5jZWlsKGIvMzIpKTt2YXIgYz1hLmxlbmd0aDtiPWImMzE7MDxjJiZiJiYoYVtjLTFdPXNqY2wuYml0QXJyYXkucGFydGlhbChiLGFbYy0xXSYyMTQ3NDgzNjQ4Pj5iLTEsMSkpO3JldHVybiBhfSxwYXJ0aWFsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMzI9PT1hP2I6KGM/YnwwOmI8PDMyLWEpKzB4MTAwMDAwMDAwMDAqYX0sZ2V0UGFydGlhbDpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChhLzB4MTAwMDAwMDAwMDApfHwzMn0sZXF1YWw6ZnVuY3Rpb24oYSxiKXtpZihzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKSE9PXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGIpKXJldHVybiExO3ZhciBjPTAsZDtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKWN8PWFbZF1eYltkXTtyZXR1cm4gMD09PVxuY30sWTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZTtlPTA7Zm9yKHZvaWQgMD09PWQmJihkPVtdKTszMjw9YjtiLT0zMilkLnB1c2goYyksYz0wO2lmKDA9PT1iKXJldHVybiBkLmNvbmNhdChhKTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWQucHVzaChjfGFbZV0+Pj5iKSxjPWFbZV08PDMyLWI7ZT1hLmxlbmd0aD9hW2EubGVuZ3RoLTFdOjA7YT1zamNsLmJpdEFycmF5LmdldFBhcnRpYWwoZSk7ZC5wdXNoKHNqY2wuYml0QXJyYXkucGFydGlhbChiK2EmMzEsMzI8YithP2M6ZC5wb3AoKSwxKSk7cmV0dXJuIGR9LFA6ZnVuY3Rpb24oYSxiKXtyZXR1cm5bYVswXV5iWzBdLGFbMV1eYlsxXSxhWzJdXmJbMl0sYVszXV5iWzNdXX0sYnl0ZXN3YXBNOmZ1bmN0aW9uKGEpe3ZhciBiLGM7Zm9yKGI9MDtiPGEubGVuZ3RoOysrYiljPWFbYl0sYVtiXT1jPj4+MjR8Yz4+PjgmMHhmZjAwfChjJjB4ZmYwMCk8PDh8Yzw8MjQ7cmV0dXJuIGF9fTtcbnNqY2wuY29kZWMudXRmOFN0cmluZz17ZnJvbUJpdHM6ZnVuY3Rpb24oYSl7dmFyIGI9XCJcIixjPXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpLGQsZTtmb3IoZD0wO2Q8Yy84O2QrKykwPT09KGQmMykmJihlPWFbZC80XSksYis9U3RyaW5nLmZyb21DaGFyQ29kZShlPj4+OD4+Pjg+Pj44KSxlPDw9ODtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShiKSl9LHRvQml0czpmdW5jdGlvbihhKXthPXVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhKSk7dmFyIGI9W10sYyxkPTA7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKylkPWQ8PDh8YS5jaGFyQ29kZUF0KGMpLDM9PT0oYyYzKSYmKGIucHVzaChkKSxkPTApO2MmMyYmYi5wdXNoKHNqY2wuYml0QXJyYXkucGFydGlhbCg4KihjJjMpLGQpKTtyZXR1cm4gYn19O1xuc2pjbC5jb2RlYy5oZXg9e2Zyb21CaXRzOmZ1bmN0aW9uKGEpe3ZhciBiPVwiXCIsYztmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWIrPSgoYVtjXXwwKSsweGYwMDAwMDAwMDAwMCkudG9TdHJpbmcoMTYpLnN1YnN0cig0KTtyZXR1cm4gYi5zdWJzdHIoMCxzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKS80KX0sdG9CaXRzOmZ1bmN0aW9uKGEpe3ZhciBiLGM9W10sZDthPWEucmVwbGFjZSgvXFxzfDB4L2csXCJcIik7ZD1hLmxlbmd0aDthPWErXCIwMDAwMDAwMFwiO2ZvcihiPTA7YjxhLmxlbmd0aDtiKz04KWMucHVzaChwYXJzZUludChhLnN1YnN0cihiLDgpLDE2KV4wKTtyZXR1cm4gc2pjbC5iaXRBcnJheS5jbGFtcChjLDQqZCl9fTtcbnNqY2wuY29kZWMuYmFzZTY0PXtTOlwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLGZyb21CaXRzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cIlwiLGU9MCxmPXNqY2wuY29kZWMuYmFzZTY0LlMsZz0wLGg9c2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSk7YyYmKGY9Zi5zdWJzdHIoMCw2MikrXCItX1wiKTtmb3IoYz0wOzYqZC5sZW5ndGg8aDspZCs9Zi5jaGFyQXQoKGdeYVtjXT4+PmUpPj4+MjYpLDY+ZT8oZz1hW2NdPDw2LWUsZSs9MjYsYysrKTooZzw8PTYsZS09Nik7Zm9yKDtkLmxlbmd0aCYzJiYhYjspZCs9XCI9XCI7cmV0dXJuIGR9LHRvQml0czpmdW5jdGlvbihhLGIpe2E9YS5yZXBsYWNlKC9cXHN8PS9nLFwiXCIpO3ZhciBjPVtdLGQsZT0wLGY9c2pjbC5jb2RlYy5iYXNlNjQuUyxnPTAsaDtiJiYoZj1mLnN1YnN0cigwLDYyKStcIi1fXCIpO2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspe2g9Zi5pbmRleE9mKGEuY2hhckF0KGQpKTtcbmlmKDA+aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcInRoaXMgaXNuJ3QgYmFzZTY0IVwiKTsyNjxlPyhlLT0yNixjLnB1c2goZ15oPj4+ZSksZz1oPDwzMi1lKTooZSs9NixnXj1oPDwzMi1lKX1lJjU2JiZjLnB1c2goc2pjbC5iaXRBcnJheS5wYXJ0aWFsKGUmNTYsZywxKSk7cmV0dXJuIGN9fTtzamNsLmNvZGVjLmJhc2U2NHVybD17ZnJvbUJpdHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHNqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKGEsMSwxKX0sdG9CaXRzOmZ1bmN0aW9uKGEpe3JldHVybiBzamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYSwxKX19O3NqY2wuaGFzaC5zaGEyNTY9ZnVuY3Rpb24oYSl7dGhpcy5iWzBdfHx0aGlzLkMoKTthPyh0aGlzLmc9YS5nLnNsaWNlKDApLHRoaXMuZj1hLmYuc2xpY2UoMCksdGhpcy5jPWEuYyk6dGhpcy5yZXNldCgpfTtzamNsLmhhc2guc2hhMjU2Lmhhc2g9ZnVuY3Rpb24oYSl7cmV0dXJuKG5ldyBzamNsLmhhc2guc2hhMjU2KS51cGRhdGUoYSkuZmluYWxpemUoKX07XG5zamNsLmhhc2guc2hhMjU2LnByb3RvdHlwZT17YmxvY2tTaXplOjUxMixyZXNldDpmdW5jdGlvbigpe3RoaXMuZz10aGlzLm8uc2xpY2UoMCk7dGhpcy5mPVtdO3RoaXMuYz0wO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYoYT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGEpKTt2YXIgYixjPXRoaXMuZj1zamNsLmJpdEFycmF5LmNvbmNhdCh0aGlzLmYsYSk7Yj10aGlzLmM7YT10aGlzLmM9YitzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKTtpZigweDFmZmZmZmZmZmZmZmZmPGEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJDYW5ub3QgaGFzaCBtb3JlIHRoYW4gMl41MyAtIDEgYml0c1wiKTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXt2YXIgZD1uZXcgVWludDMyQXJyYXkoYyksZT0wO2ZvcihiPTUxMitiLSg1MTIrYiYweDFmZik7Yjw9YTtiKz01MTIpdGhpcy5sKGQuc3ViYXJyYXkoMTYqZSxcbjE2KihlKzEpKSksZSs9MTtjLnNwbGljZSgwLDE2KmUpfWVsc2UgZm9yKGI9NTEyK2ItKDUxMitiJjB4MWZmKTtiPD1hO2IrPTUxMil0aGlzLmwoYy5zcGxpY2UoMCwxNikpO3JldHVybiB0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5mLGM9dGhpcy5nLGI9c2pjbC5iaXRBcnJheS5jb25jYXQoYixbc2pjbC5iaXRBcnJheS5wYXJ0aWFsKDEsMSldKTtmb3IoYT1iLmxlbmd0aCsyO2EmMTU7YSsrKWIucHVzaCgwKTtiLnB1c2goTWF0aC5mbG9vcih0aGlzLmMvMHgxMDAwMDAwMDApKTtmb3IoYi5wdXNoKHRoaXMuY3wwKTtiLmxlbmd0aDspdGhpcy5sKGIuc3BsaWNlKDAsMTYpKTt0aGlzLnJlc2V0KCk7cmV0dXJuIGN9LG86W10sYjpbXSxDOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gMHgxMDAwMDAwMDAqKGEtTWF0aC5mbG9vcihhKSl8MH1mb3IodmFyIGI9MCxjPTIsZCxlOzY0PmI7YysrKXtlPSEwO2ZvcihkPTI7ZCpkPD1jO2QrKylpZigwPT09YyVkKXtlPVxuITE7YnJlYWt9ZSYmKDg+YiYmKHRoaXMub1tiXT1hKE1hdGgucG93KGMsLjUpKSksdGhpcy5iW2JdPWEoTWF0aC5wb3coYywxLzMpKSxiKyspfX0sbDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT10aGlzLmcsZj10aGlzLmIsZz1lWzBdLGg9ZVsxXSxrPWVbMl0sbj1lWzNdLGw9ZVs0XSxtPWVbNV0scD1lWzZdLHo9ZVs3XTtmb3IoYj0wOzY0PmI7YisrKTE2PmI/Yz1hW2JdOihjPWFbYisxJjE1XSxkPWFbYisxNCYxNV0sYz1hW2ImMTVdPShjPj4+N15jPj4+MTheYz4+PjNeYzw8MjVeYzw8MTQpKyhkPj4+MTdeZD4+PjE5XmQ+Pj4xMF5kPDwxNV5kPDwxMykrYVtiJjE1XSthW2IrOSYxNV18MCksYz1jK3orKGw+Pj42Xmw+Pj4xMV5sPj4+MjVebDw8MjZebDw8MjFebDw8NykrKHBebCYobV5wKSkrZltiXSx6PXAscD1tLG09bCxsPW4rY3wwLG49ayxrPWgsaD1nLGc9YysoaCZrXm4mKGheaykpKyhoPj4+Ml5oPj4+MTNeaD4+PjIyXmg8PDMwXmg8PDE5Xmg8PDEwKXwwO2VbMF09ZVswXStnfFxuMDtlWzFdPWVbMV0raHwwO2VbMl09ZVsyXStrfDA7ZVszXT1lWzNdK258MDtlWzRdPWVbNF0rbHwwO2VbNV09ZVs1XSttfDA7ZVs2XT1lWzZdK3B8MDtlWzddPWVbN10renwwfX07c2pjbC5oYXNoLnNoYTUxMj1mdW5jdGlvbihhKXt0aGlzLmJbMF18fHRoaXMuQygpO2E/KHRoaXMuZz1hLmcuc2xpY2UoMCksdGhpcy5mPWEuZi5zbGljZSgwKSx0aGlzLmM9YS5jKTp0aGlzLnJlc2V0KCl9O3NqY2wuaGFzaC5zaGE1MTIuaGFzaD1mdW5jdGlvbihhKXtyZXR1cm4obmV3IHNqY2wuaGFzaC5zaGE1MTIpLnVwZGF0ZShhKS5maW5hbGl6ZSgpfTtcbnNqY2wuaGFzaC5zaGE1MTIucHJvdG90eXBlPXtibG9ja1NpemU6MTAyNCxyZXNldDpmdW5jdGlvbigpe3RoaXMuZz10aGlzLm8uc2xpY2UoMCk7dGhpcy5mPVtdO3RoaXMuYz0wO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYoYT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGEpKTt2YXIgYixjPXRoaXMuZj1zamNsLmJpdEFycmF5LmNvbmNhdCh0aGlzLmYsYSk7Yj10aGlzLmM7YT10aGlzLmM9YitzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKTtpZigweDFmZmZmZmZmZmZmZmZmPGEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJDYW5ub3QgaGFzaCBtb3JlIHRoYW4gMl41MyAtIDEgYml0c1wiKTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXt2YXIgZD1uZXcgVWludDMyQXJyYXkoYyksZT0wO2ZvcihiPTEwMjQrYi0oMTAyNCtiJjEwMjMpO2I8PWE7Yis9MTAyNCl0aGlzLmwoZC5zdWJhcnJheSgzMipcbmUsMzIqKGUrMSkpKSxlKz0xO2Muc3BsaWNlKDAsMzIqZSl9ZWxzZSBmb3IoYj0xMDI0K2ItKDEwMjQrYiYxMDIzKTtiPD1hO2IrPTEwMjQpdGhpcy5sKGMuc3BsaWNlKDAsMzIpKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuZixjPXRoaXMuZyxiPXNqY2wuYml0QXJyYXkuY29uY2F0KGIsW3NqY2wuYml0QXJyYXkucGFydGlhbCgxLDEpXSk7Zm9yKGE9Yi5sZW5ndGgrNDthJjMxO2ErKyliLnB1c2goMCk7Yi5wdXNoKDApO2IucHVzaCgwKTtiLnB1c2goTWF0aC5mbG9vcih0aGlzLmMvMHgxMDAwMDAwMDApKTtmb3IoYi5wdXNoKHRoaXMuY3wwKTtiLmxlbmd0aDspdGhpcy5sKGIuc3BsaWNlKDAsMzIpKTt0aGlzLnJlc2V0KCk7cmV0dXJuIGN9LG86W10saWE6WzEyMzcyMjMyLDEzMjgxMDgzLDk3NjI4NTksMTkxNDYwOSwxNTEwNjc2OSw0MDkwOTExLDQzMDgzMzEsODI2NjEwNV0sYjpbXSxrYTpbMjY2NjAxOCwxNTY4OTE2NSw1MDYxNDIzLDkwMzQ2ODQsXG40NzY0OTg0LDM4MDk1MywxNjU4Nzc5LDcxNzY0NzIsMTk3MTg2LDczNjg2MzgsMTQ5ODc5MTYsMTY3NTc5ODYsODA5NjExMSwxNDgwMzY5LDEzMDQ2MzI1LDY4OTExNTYsMTU4MTMzMzAsNTE4NzA0Myw5MjI5NzQ5LDExMzEyMjI5LDI4MTg2NzcsMTA5Mzc0NzUsNDMyNDMwOCwxMTM1NTQxLDY3NDE5MzEsMTE4MDkyOTYsMTY0NTgwNDcsMTU2NjY5MTYsMTEwNDY4NTAsNjk4MTQ5LDIyOTk5OSw5NDU3NzYsMTM3NzQ4NDQsMjU0MTg2MiwxMjg1NjA0NSw5ODEwOTExLDExNDk0MzY2LDc4NDQ1MjAsMTU1NzY4MDYsODUzMzMwNywxNTc5NTA0NCw0MzM3NjY1LDE2MjkxNzI5LDU1NTM3MTIsMTU2ODQxMjAsNjY2MjQxNiw3NDEzODAyLDEyMzA4OTIwLDEzODE2MDA4LDQzMDM2OTksOTM2NjQyNSwxMDE3NjY4MCwxMzE5NTg3NSw0Mjk1MzcxLDY1NDYyOTEsMTE3MTI2NzUsMTU3MDg5MjQsMTUxOTQ1NiwxNTc3MjUzMCw2NTY4NDI4LDY0OTU3ODQsODU2ODI5NywxMzAwNzEyNSw3NDkyMzk1LDI1MTUzNTYsXG4xMjYzMjU4MywxNDc0MDI1NCw3MjYyNTg0LDE1MzU5MzAsMTMxNDYyNzgsMTYzMjE5NjYsMTg1MzIxMSwyOTQyNzYsMTMwNTEwMjcsMTMyMjE1NjQsMTA1MTk4MCw0MDgwMzEwLDY2NTE0MzQsMTQwODg5NDAsNDY3NTYwN10sQzpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIDB4MTAwMDAwMDAwKihhLU1hdGguZmxvb3IoYSkpfDB9ZnVuY3Rpb24gYihhKXtyZXR1cm4gMHgxMDAwMDAwMDAwMCooYS1NYXRoLmZsb29yKGEpKSYyNTV9Zm9yKHZhciBjPTAsZD0yLGUsZjs4MD5jO2QrKyl7Zj0hMDtmb3IoZT0yO2UqZTw9ZDtlKyspaWYoMD09PWQlZSl7Zj0hMTticmVha31mJiYoOD5jJiYodGhpcy5vWzIqY109YShNYXRoLnBvdyhkLC41KSksdGhpcy5vWzIqYysxXT1iKE1hdGgucG93KGQsLjUpKTw8MjR8dGhpcy5pYVtjXSksdGhpcy5iWzIqY109YShNYXRoLnBvdyhkLDEvMykpLHRoaXMuYlsyKmMrMV09YihNYXRoLnBvdyhkLDEvMykpPDwyNHx0aGlzLmthW2NdLGMrKyl9fSxsOmZ1bmN0aW9uKGEpe3ZhciBiLFxuYyxkPXRoaXMuZyxlPXRoaXMuYixmPWRbMF0sZz1kWzFdLGg9ZFsyXSxrPWRbM10sbj1kWzRdLGw9ZFs1XSxtPWRbNl0scD1kWzddLHo9ZFs4XSxBPWRbOV0sQz1kWzEwXSxCPWRbMTFdLEQ9ZFsxMl0sUD1kWzEzXSxlYT1kWzE0XSxRPWRbMTVdLHQ7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBVaW50MzJBcnJheSl7dD1BcnJheSgxNjApO2Zvcih2YXIgcj0wOzMyPnI7cisrKXRbcl09YVtyXX1lbHNlIHQ9YTt2YXIgcj1mLHU9ZyxHPWgsRT1rLEg9bixGPWwsVj1tLEk9cCx3PXosdj1BLFI9QyxKPUIsUz1ELEs9UCxXPWVhLEw9UTtmb3IoYT0wOzgwPmE7YSsrKXtpZigxNj5hKWI9dFsyKmFdLGM9dFsyKmErMV07ZWxzZXtjPXRbMiooYS0xNSldO3ZhciBxPXRbMiooYS0xNSkrMV07Yj0ocTw8MzF8Yz4+PjEpXihxPDwyNHxjPj4+OCleYz4+Pjc7dmFyIHg9KGM8PDMxfHE+Pj4xKV4oYzw8MjR8cT4+PjgpXihjPDwyNXxxPj4+Nyk7Yz10WzIqKGEtMildO3ZhciB5PXRbMiooYS0yKSsxXSxcbnE9KHk8PDEzfGM+Pj4xOSleKGM8PDN8eT4+PjI5KV5jPj4+Nix5PShjPDwxM3x5Pj4+MTkpXih5PDwzfGM+Pj4yOSleKGM8PDI2fHk+Pj42KSxYPXRbMiooYS03KV0sWT10WzIqKGEtMTYpXSxNPXRbMiooYS0xNikrMV07Yz14K3RbMiooYS03KSsxXTtiPWIrWCsoYz4+PjA8eD4+PjA/MTowKTtjKz15O2IrPXErKGM+Pj4wPHk+Pj4wPzE6MCk7Yys9TTtiKz1ZKyhjPj4+MDxNPj4+MD8xOjApfXRbMiphXT1ifD0wO3RbMiphKzFdPWN8PTA7dmFyIFg9dyZSXn53JlMsZmE9diZKXn52JksseT1yJkdeciZIXkcmSCxqYT11JkVedSZGXkUmRixZPSh1PDw0fHI+Pj4yOCleKHI8PDMwfHU+Pj4yKV4ocjw8MjV8dT4+PjcpLE09KHI8PDR8dT4+PjI4KV4odTw8MzB8cj4+PjIpXih1PDwyNXxyPj4+Nyksa2E9ZVsyKmFdLGdhPWVbMiphKzFdLHE9TCsoKHc8PDE4fHY+Pj4xNCleKHc8PDE0fHY+Pj4xOCleKHY8PDIzfHc+Pj45KSkseD1XKygodjw8MTh8dz4+PjE0KV4odjw8MTR8dz4+PjE4KV4odzw8XG4yM3x2Pj4+OSkpKyhxPj4+MDxMPj4+MD8xOjApLHE9cStmYSx4PXgrKFgrKHE+Pj4wPGZhPj4+MD8xOjApKSxxPXErZ2EseD14KyhrYSsocT4+PjA8Z2E+Pj4wPzE6MCkpLHE9cStjfDAseD14KyhiKyhxPj4+MDxjPj4+MD8xOjApKTtjPU0ramE7Yj1ZK3krKGM+Pj4wPE0+Pj4wPzE6MCk7Vz1TO0w9SztTPVI7Sz1KO1I9dztKPXY7dj1JK3F8MDt3PVYreCsodj4+PjA8ST4+PjA/MTowKXwwO1Y9SDtJPUY7SD1HO0Y9RTtHPXI7RT11O3U9cStjfDA7cj14K2IrKHU+Pj4wPHE+Pj4wPzE6MCl8MH1nPWRbMV09Zyt1fDA7ZFswXT1mK3IrKGc+Pj4wPHU+Pj4wPzE6MCl8MDtrPWRbM109aytFfDA7ZFsyXT1oK0crKGs+Pj4wPEU+Pj4wPzE6MCl8MDtsPWRbNV09bCtGfDA7ZFs0XT1uK0grKGw+Pj4wPEY+Pj4wPzE6MCl8MDtwPWRbN109cCtJfDA7ZFs2XT1tK1YrKHA+Pj4wPEk+Pj4wPzE6MCl8MDtBPWRbOV09QSt2fDA7ZFs4XT16K3crKEE+Pj4wPHY+Pj4wPzE6MCl8MDtCPWRbMTFdPUIrSnxcbjA7ZFsxMF09QytSKyhCPj4+MDxKPj4+MD8xOjApfDA7UD1kWzEzXT1QK0t8MDtkWzEyXT1EK1MrKFA+Pj4wPEs+Pj4wPzE6MCl8MDtRPWRbMTVdPVErTHwwO2RbMTRdPWVhK1crKFE+Pj4wPEw+Pj4wPzE6MCl8MH19O1xuc2pjbC5tb2RlLmNjbT17bmFtZTpcImNjbVwiLEY6W10sbGlzdGVuUHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7c2pjbC5tb2RlLmNjbS5GLnB1c2goYSl9LHVuTGlzdGVuUHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7YT1zamNsLm1vZGUuY2NtLkYuaW5kZXhPZihhKTstMTxhJiZzamNsLm1vZGUuY2NtLkYuc3BsaWNlKGEsMSl9LGRhOmZ1bmN0aW9uKGEpe3ZhciBiPXNqY2wubW9kZS5jY20uRi5zbGljZSgpLGM7Zm9yKGM9MDtjPGIubGVuZ3RoO2MrPTEpYltjXShhKX0sZW5jcnlwdDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc9Yi5zbGljZSgwKSxoPXNqY2wuYml0QXJyYXksaz1oLmJpdExlbmd0aChjKS84LG49aC5iaXRMZW5ndGgoZykvODtlPWV8fDY0O2Q9ZHx8W107aWYoNz5rKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiY2NtOiBpdiBtdXN0IGJlIGF0IGxlYXN0IDcgYnl0ZXNcIik7Zm9yKGY9Mjs0PmYmJm4+Pj44KmY7ZisrKTtmPDE1LWsmJihmPTE1LWspO2M9aC5jbGFtcChjLFxuOCooMTUtZikpO2I9c2pjbC5tb2RlLmNjbS5VKGEsYixjLGQsZSxmKTtnPXNqY2wubW9kZS5jY20uVihhLGcsYyxiLGUsZik7cmV0dXJuIGguY29uY2F0KGcuZGF0YSxnLnRhZyl9LGRlY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXtlPWV8fDY0O2Q9ZHx8W107dmFyIGY9c2pjbC5iaXRBcnJheSxnPWYuYml0TGVuZ3RoKGMpLzgsaD1mLmJpdExlbmd0aChiKSxrPWYuY2xhbXAoYixoLWUpLG49Zi5iaXRTbGljZShiLGgtZSksaD0oaC1lKS84O2lmKDc+Zyl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImNjbTogaXYgbXVzdCBiZSBhdCBsZWFzdCA3IGJ5dGVzXCIpO2ZvcihiPTI7ND5iJiZoPj4+OCpiO2IrKyk7YjwxNS1nJiYoYj0xNS1nKTtjPWYuY2xhbXAoYyw4KigxNS1iKSk7az1zamNsLm1vZGUuY2NtLlYoYSxrLGMsbixlLGIpO2E9c2pjbC5tb2RlLmNjbS5VKGEsay5kYXRhLGMsZCxlLGIpO2lmKCFmLmVxdWFsKGsudGFnLGEpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5jb3JydXB0KFwiY2NtOiB0YWcgZG9lc24ndCBtYXRjaFwiKTtcbnJldHVybiBrLmRhdGF9LG1hOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1bXSxoPXNqY2wuYml0QXJyYXksaz1oLlA7ZD1baC5wYXJ0aWFsKDgsKGIubGVuZ3RoPzY0OjApfGQtMjw8MnxmLTEpXTtkPWguY29uY2F0KGQsYyk7ZFszXXw9ZTtkPWEuZW5jcnlwdChkKTtpZihiLmxlbmd0aClmb3IoYz1oLmJpdExlbmd0aChiKS84LDY1Mjc5Pj1jP2c9W2gucGFydGlhbCgxNixjKV06MHhmZmZmZmZmZj49YyYmKGc9aC5jb25jYXQoW2gucGFydGlhbCgxNiw2NTUzNCldLFtjXSkpLGc9aC5jb25jYXQoZyxiKSxiPTA7YjxnLmxlbmd0aDtiKz00KWQ9YS5lbmNyeXB0KGsoZCxnLnNsaWNlKGIsYis0KS5jb25jYXQoWzAsMCwwXSkpKTtyZXR1cm4gZH0sVTpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9c2pjbC5iaXRBcnJheSxoPWcuUDtlLz04O2lmKGUlMnx8ND5lfHwxNjxlKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiY2NtOiBpbnZhbGlkIHRhZyBsZW5ndGhcIik7XG5pZigweGZmZmZmZmZmPGQubGVuZ3RofHwweGZmZmZmZmZmPGIubGVuZ3RoKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJjY206IGNhbid0IGRlYWwgd2l0aCA0R2lCIG9yIG1vcmUgZGF0YVwiKTtjPXNqY2wubW9kZS5jY20ubWEoYSxkLGMsZSxnLmJpdExlbmd0aChiKS84LGYpO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKz00KWM9YS5lbmNyeXB0KGgoYyxiLnNsaWNlKGQsZCs0KS5jb25jYXQoWzAsMCwwXSkpKTtyZXR1cm4gZy5jbGFtcChjLDgqZSl9LFY6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnLGg9c2pjbC5iaXRBcnJheTtnPWguUDt2YXIgaz1iLmxlbmd0aCxuPWguYml0TGVuZ3RoKGIpLGw9ay81MCxtPWw7Yz1oLmNvbmNhdChbaC5wYXJ0aWFsKDgsZi0xKV0sYykuY29uY2F0KFswLDAsMF0pLnNsaWNlKDAsNCk7ZD1oLmJpdFNsaWNlKGcoZCxhLmVuY3J5cHQoYykpLDAsZSk7aWYoIWspcmV0dXJue3RhZzpkLGRhdGE6W119O2ZvcihnPTA7ZzxrO2crPTQpZz5sJiYoc2pjbC5tb2RlLmNjbS5kYShnL1xuayksbCs9bSksY1szXSsrLGU9YS5lbmNyeXB0KGMpLGJbZ11ePWVbMF0sYltnKzFdXj1lWzFdLGJbZysyXV49ZVsyXSxiW2crM11ePWVbM107cmV0dXJue3RhZzpkLGRhdGE6aC5jbGFtcChiLG4pfX19O3NqY2wubWlzYy5obWFjPWZ1bmN0aW9uKGEsYil7dGhpcy5XPWI9Ynx8c2pjbC5oYXNoLnNoYTI1Njt2YXIgYz1bW10sW11dLGQsZT1iLnByb3RvdHlwZS5ibG9ja1NpemUvMzI7dGhpcy5CPVtuZXcgYixuZXcgYl07YS5sZW5ndGg+ZSYmKGE9Yi5oYXNoKGEpKTtmb3IoZD0wO2Q8ZTtkKyspY1swXVtkXT1hW2RdXjkwOTUyMjQ4NixjWzFdW2RdPWFbZF1eMTU0OTU1NjgyODt0aGlzLkJbMF0udXBkYXRlKGNbMF0pO3RoaXMuQlsxXS51cGRhdGUoY1sxXSk7dGhpcy5PPW5ldyBiKHRoaXMuQlswXSl9O1xuc2pjbC5taXNjLmhtYWMucHJvdG90eXBlLmVuY3J5cHQ9c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLm1hYz1mdW5jdGlvbihhKXtpZih0aGlzLlopdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJlbmNyeXB0IG9uIGFscmVhZHkgdXBkYXRlZCBobWFjIGNhbGxlZCFcIik7dGhpcy51cGRhdGUoYSk7cmV0dXJuIHRoaXMuZGlnZXN0KGEpfTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLk89bmV3IHRoaXMuVyh0aGlzLkJbMF0pO3RoaXMuWj0hMX07c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLlo9ITA7dGhpcy5PLnVwZGF0ZShhKX07c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuTy5maW5hbGl6ZSgpLGE9KG5ldyB0aGlzLlcodGhpcy5CWzFdKSkudXBkYXRlKGEpLmZpbmFsaXplKCk7dGhpcy5yZXNldCgpO3JldHVybiBhfTtcbnNqY2wubWlzYy5wYmtkZjI9ZnVuY3Rpb24oYSxiLGMsZCxlKXtjPWN8fDFFNDtpZigwPmR8fDA+Yyl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgcGFyYW1zIHRvIHBia2RmMlwiKTtcInN0cmluZ1wiPT09dHlwZW9mIGEmJihhPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYSkpO1wic3RyaW5nXCI9PT10eXBlb2YgYiYmKGI9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhiKSk7ZT1lfHxzamNsLm1pc2MuaG1hYzthPW5ldyBlKGEpO3ZhciBmLGcsaCxrLG49W10sbD1zamNsLmJpdEFycmF5O2ZvcihrPTE7MzIqbi5sZW5ndGg8KGR8fDEpO2srKyl7ZT1mPWEuZW5jcnlwdChsLmNvbmNhdChiLFtrXSkpO2ZvcihnPTE7ZzxjO2crKylmb3IoZj1hLmVuY3J5cHQoZiksaD0wO2g8Zi5sZW5ndGg7aCsrKWVbaF1ePWZbaF07bj1uLmNvbmNhdChlKX1kJiYobj1sLmNsYW1wKG4sZCkpO3JldHVybiBufTtcbnNqY2wucHJuZz1mdW5jdGlvbihhKXt0aGlzLmg9W25ldyBzamNsLmhhc2guc2hhMjU2XTt0aGlzLnM9WzBdO3RoaXMuTj0wO3RoaXMuRz17fTt0aGlzLk09MDt0aGlzLlQ9e307dGhpcy5YPXRoaXMuaT10aGlzLnU9dGhpcy5mYT0wO3RoaXMuYj1bMCwwLDAsMCwwLDAsMCwwXTt0aGlzLm09WzAsMCwwLDBdO3RoaXMuSz12b2lkIDA7dGhpcy5MPWE7dGhpcy5EPSExO3RoaXMuSj17cHJvZ3Jlc3M6e30sc2VlZGVkOnt9fTt0aGlzLkE9dGhpcy5lYT0wO3RoaXMuSD0xO3RoaXMuST0yO3RoaXMuYWE9MHgxMDAwMDt0aGlzLlI9WzAsNDgsNjQsOTYsMTI4LDE5MiwweDEwMCwzODQsNTEyLDc2OCwxMDI0XTt0aGlzLmJhPTNFNDt0aGlzLiQ9ODB9O1xuc2pjbC5wcm5nLnByb3RvdHlwZT17cmFuZG9tV29yZHM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkO2Q9dGhpcy5pc1JlYWR5KGIpO3ZhciBlO2lmKGQ9PT10aGlzLkEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLm5vdFJlYWR5KFwiZ2VuZXJhdG9yIGlzbid0IHNlZWRlZFwiKTtpZihkJnRoaXMuSSl7ZD0hKGQmdGhpcy5IKTtlPVtdO3ZhciBmPTAsZzt0aGlzLlg9ZVswXT0obmV3IERhdGUpLnZhbHVlT2YoKSt0aGlzLmJhO2ZvcihnPTA7MTY+ZztnKyspZS5wdXNoKDB4MTAwMDAwMDAwKk1hdGgucmFuZG9tKCl8MCk7Zm9yKGc9MDtnPHRoaXMuaC5sZW5ndGgmJihlPWUuY29uY2F0KHRoaXMuaFtnXS5maW5hbGl6ZSgpKSxmKz10aGlzLnNbZ10sdGhpcy5zW2ddPTAsZHx8ISh0aGlzLk4mMTw8ZykpO2crKyk7dGhpcy5OPj0xPDx0aGlzLmgubGVuZ3RoJiYodGhpcy5oLnB1c2gobmV3IHNqY2wuaGFzaC5zaGEyNTYpLHRoaXMucy5wdXNoKDApKTt0aGlzLmktPWY7Zj50aGlzLnUmJih0aGlzLnU9XG5mKTt0aGlzLk4rKzt0aGlzLmI9c2pjbC5oYXNoLnNoYTI1Ni5oYXNoKHRoaXMuYi5jb25jYXQoZSkpO3RoaXMuSz1uZXcgc2pjbC5jaXBoZXIuYWVzKHRoaXMuYik7Zm9yKGQ9MDs0PmQmJih0aGlzLm1bZF09dGhpcy5tW2RdKzF8MCwhdGhpcy5tW2RdKTtkKyspO31mb3IoZD0wO2Q8YTtkKz00KTA9PT0oZCsxKSV0aGlzLmFhJiZiYSh0aGlzKSxlPU4odGhpcyksYy5wdXNoKGVbMF0sZVsxXSxlWzJdLGVbM10pO2JhKHRoaXMpO3JldHVybiBjLnNsaWNlKDAsYSl9LHNldERlZmF1bHRQYXJhbm9pYTpmdW5jdGlvbihhLGIpe2lmKDA9PT1hJiZcIlNldHRpbmcgcGFyYW5vaWE9MCB3aWxsIHJ1aW4geW91ciBzZWN1cml0eTsgdXNlIGl0IG9ubHkgZm9yIHRlc3RpbmdcIiE9PWIpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJTZXR0aW5nIHBhcmFub2lhPTAgd2lsbCBydWluIHlvdXIgc2VjdXJpdHk7IHVzZSBpdCBvbmx5IGZvciB0ZXN0aW5nXCIpO3RoaXMuTD1hfSxhZGRFbnRyb3B5OmZ1bmN0aW9uKGEsXG5iLGMpe2M9Y3x8XCJ1c2VyXCI7dmFyIGQsZSxmPShuZXcgRGF0ZSkudmFsdWVPZigpLGc9dGhpcy5HW2NdLGg9dGhpcy5pc1JlYWR5KCksaz0wO2Q9dGhpcy5UW2NdO3ZvaWQgMD09PWQmJihkPXRoaXMuVFtjXT10aGlzLmZhKyspO3ZvaWQgMD09PWcmJihnPXRoaXMuR1tjXT0wKTt0aGlzLkdbY109KHRoaXMuR1tjXSsxKSV0aGlzLmgubGVuZ3RoO3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSBcIm51bWJlclwiOnZvaWQgMD09PWImJihiPTEpO3RoaXMuaFtnXS51cGRhdGUoW2QsdGhpcy5NKyssMSxiLGYsMSxhfDBdKTticmVhaztjYXNlIFwib2JqZWN0XCI6Yz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk7aWYoXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiPT09Yyl7ZT1bXTtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWUucHVzaChhW2NdKTthPWV9ZWxzZSBmb3IoXCJbb2JqZWN0IEFycmF5XVwiIT09YyYmKGs9MSksYz0wO2M8YS5sZW5ndGgmJiFrO2MrKylcIm51bWJlclwiIT09dHlwZW9mIGFbY10mJlxuKGs9MSk7aWYoIWspe2lmKHZvaWQgMD09PWIpZm9yKGM9Yj0wO2M8YS5sZW5ndGg7YysrKWZvcihlPWFbY107MDxlOyliKyssZT1lPj4+MTt0aGlzLmhbZ10udXBkYXRlKFtkLHRoaXMuTSsrLDIsYixmLGEubGVuZ3RoXS5jb25jYXQoYSkpfWJyZWFrO2Nhc2UgXCJzdHJpbmdcIjp2b2lkIDA9PT1iJiYoYj1hLmxlbmd0aCk7dGhpcy5oW2ddLnVwZGF0ZShbZCx0aGlzLk0rKywzLGIsZixhLmxlbmd0aF0pO3RoaXMuaFtnXS51cGRhdGUoYSk7YnJlYWs7ZGVmYXVsdDprPTF9aWYoayl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwicmFuZG9tOiBhZGRFbnRyb3B5IG9ubHkgc3VwcG9ydHMgbnVtYmVyLCBhcnJheSBvZiBudW1iZXJzIG9yIHN0cmluZ1wiKTt0aGlzLnNbZ10rPWI7dGhpcy5pKz1iO2g9PT10aGlzLkEmJih0aGlzLmlzUmVhZHkoKSE9PXRoaXMuQSYmY2EoXCJzZWVkZWRcIixNYXRoLm1heCh0aGlzLnUsdGhpcy5pKSksY2EoXCJwcm9ncmVzc1wiLHRoaXMuZ2V0UHJvZ3Jlc3MoKSkpfSxcbmlzUmVhZHk6ZnVuY3Rpb24oYSl7YT10aGlzLlJbdm9pZCAwIT09YT9hOnRoaXMuTF07cmV0dXJuIHRoaXMudSYmdGhpcy51Pj1hP3RoaXMuc1swXT50aGlzLiQmJihuZXcgRGF0ZSkudmFsdWVPZigpPnRoaXMuWD90aGlzLkl8dGhpcy5IOnRoaXMuSDp0aGlzLmk+PWE/dGhpcy5JfHRoaXMuQTp0aGlzLkF9LGdldFByb2dyZXNzOmZ1bmN0aW9uKGEpe2E9dGhpcy5SW2E/YTp0aGlzLkxdO3JldHVybiB0aGlzLnU+PWE/MTp0aGlzLmk+YT8xOnRoaXMuaS9hfSxzdGFydENvbGxlY3RvcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5EKXt0aGlzLmE9e2xvYWRUaW1lQ29sbGVjdG9yOk8odGhpcyx0aGlzLmxhKSxtb3VzZUNvbGxlY3RvcjpPKHRoaXMsdGhpcy5uYSksa2V5Ym9hcmRDb2xsZWN0b3I6Tyh0aGlzLHRoaXMuamEpLGFjY2VsZXJvbWV0ZXJDb2xsZWN0b3I6Tyh0aGlzLHRoaXMuY2EpLHRvdWNoQ29sbGVjdG9yOk8odGhpcyx0aGlzLnBhKX07aWYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsXG50aGlzLmEubG9hZFRpbWVDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5hLm1vdXNlQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsdGhpcy5hLmtleWJvYXJkQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImRldmljZW1vdGlvblwiLHRoaXMuYS5hY2NlbGVyb21ldGVyQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHRoaXMuYS50b3VjaENvbGxlY3RvciwhMSk7ZWxzZSBpZihkb2N1bWVudC5hdHRhY2hFdmVudClkb2N1bWVudC5hdHRhY2hFdmVudChcIm9ubG9hZFwiLHRoaXMuYS5sb2FkVGltZUNvbGxlY3RvciksZG9jdW1lbnQuYXR0YWNoRXZlbnQoXCJvbm1vdXNlbW92ZVwiLHRoaXMuYS5tb3VzZUNvbGxlY3RvciksZG9jdW1lbnQuYXR0YWNoRXZlbnQoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3Rvcik7ZWxzZSB0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwiY2FuJ3QgYXR0YWNoIGV2ZW50XCIpO1xudGhpcy5EPSEwfX0sc3RvcENvbGxlY3RvcnM6ZnVuY3Rpb24oKXt0aGlzLkQmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcj8od2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsdGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuYS5tb3VzZUNvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJkZXZpY2Vtb3Rpb25cIix0aGlzLmEuYWNjZWxlcm9tZXRlckNvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIix0aGlzLmEudG91Y2hDb2xsZWN0b3IsITEpKTpkb2N1bWVudC5kZXRhY2hFdmVudCYmKGRvY3VtZW50LmRldGFjaEV2ZW50KFwib25sb2FkXCIsdGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yKSxkb2N1bWVudC5kZXRhY2hFdmVudChcIm9ubW91c2Vtb3ZlXCIsXG50aGlzLmEubW91c2VDb2xsZWN0b3IpLGRvY3VtZW50LmRldGFjaEV2ZW50KFwia2V5cHJlc3NcIix0aGlzLmEua2V5Ym9hcmRDb2xsZWN0b3IpKSx0aGlzLkQ9ITEpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dGhpcy5KW2FdW3RoaXMuZWErK109Yn0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT10aGlzLkpbYV0sZj1bXTtmb3IoZCBpbiBlKWUuaGFzT3duUHJvcGVydHkoZCkmJmVbZF09PT1iJiZmLnB1c2goZCk7Zm9yKGM9MDtjPGYubGVuZ3RoO2MrKylkPWZbY10sZGVsZXRlIGVbZF19LGphOmZ1bmN0aW9uKCl7VCh0aGlzLDEpfSxuYTpmdW5jdGlvbihhKXt2YXIgYixjO3RyeXtiPWEueHx8YS5jbGllbnRYfHxhLm9mZnNldFh8fDAsYz1hLnl8fGEuY2xpZW50WXx8YS5vZmZzZXRZfHwwfWNhdGNoKGQpe2M9Yj0wfTAhPWImJjAhPWMmJnRoaXMuYWRkRW50cm9weShbYixjXSwyLFwibW91c2VcIik7VCh0aGlzLDApfSxwYTpmdW5jdGlvbihhKXthPVxuYS50b3VjaGVzWzBdfHxhLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuYWRkRW50cm9weShbYS5wYWdlWHx8YS5jbGllbnRYLGEucGFnZVl8fGEuY2xpZW50WV0sMSxcInRvdWNoXCIpO1QodGhpcywwKX0sbGE6ZnVuY3Rpb24oKXtUKHRoaXMsMil9LGNhOmZ1bmN0aW9uKGEpe2E9YS5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5Lnh8fGEuYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eS55fHxhLmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkuejtpZih3aW5kb3cub3JpZW50YXRpb24pe3ZhciBiPXdpbmRvdy5vcmllbnRhdGlvbjtcIm51bWJlclwiPT09dHlwZW9mIGImJnRoaXMuYWRkRW50cm9weShiLDEsXCJhY2NlbGVyb21ldGVyXCIpfWEmJnRoaXMuYWRkRW50cm9weShhLDIsXCJhY2NlbGVyb21ldGVyXCIpO1QodGhpcywwKX19O1xuZnVuY3Rpb24gY2EoYSxiKXt2YXIgYyxkPXNqY2wucmFuZG9tLkpbYV0sZT1bXTtmb3IoYyBpbiBkKWQuaGFzT3duUHJvcGVydHkoYykmJmUucHVzaChkW2NdKTtmb3IoYz0wO2M8ZS5sZW5ndGg7YysrKWVbY10oYil9ZnVuY3Rpb24gVChhLGIpe1widW5kZWZpbmVkXCIhPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucGVyZm9ybWFuY2UmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiB3aW5kb3cucGVyZm9ybWFuY2Uubm93P2EuYWRkRW50cm9weSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCksYixcImxvYWR0aW1lXCIpOmEuYWRkRW50cm9weSgobmV3IERhdGUpLnZhbHVlT2YoKSxiLFwibG9hZHRpbWVcIil9ZnVuY3Rpb24gYmEoYSl7YS5iPU4oYSkuY29uY2F0KE4oYSkpO2EuSz1uZXcgc2pjbC5jaXBoZXIuYWVzKGEuYil9ZnVuY3Rpb24gTihhKXtmb3IodmFyIGI9MDs0PmImJihhLm1bYl09YS5tW2JdKzF8MCwhYS5tW2JdKTtiKyspO3JldHVybiBhLksuZW5jcnlwdChhLm0pfVxuZnVuY3Rpb24gTyhhLGIpe3JldHVybiBmdW5jdGlvbigpe2IuYXBwbHkoYSxhcmd1bWVudHMpfX1zamNsLnJhbmRvbT1uZXcgc2pjbC5wcm5nKDYpO1xuYTp0cnl7dmFyIFUsZGEsWixoYTtpZihoYT1cInVuZGVmaW5lZFwiIT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMpe3ZhciBpYTt0cnl7aWE9cmVxdWlyZShcImNyeXB0b1wiKX1jYXRjaChhKXtpYT1udWxsfWhhPWRhPWlhfWlmKGhhJiZkYS5yYW5kb21CeXRlcylVPWRhLnJhbmRvbUJ5dGVzKDEyOCksVT1uZXcgVWludDMyQXJyYXkoKG5ldyBVaW50OEFycmF5KFUpKS5idWZmZXIpLHNqY2wucmFuZG9tLmFkZEVudHJvcHkoVSwxMDI0LFwiY3J5cHRvWydyYW5kb21CeXRlcyddXCIpO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgVWludDMyQXJyYXkpe1o9bmV3IFVpbnQzMkFycmF5KDMyKTtpZih3aW5kb3cuY3J5cHRvJiZ3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyl3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhaKTtlbHNlIGlmKHdpbmRvdy5tc0NyeXB0byYmd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyl3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFopO1xuZWxzZSBicmVhayBhO3NqY2wucmFuZG9tLmFkZEVudHJvcHkoWiwxMDI0LFwiY3J5cHRvWydnZXRSYW5kb21WYWx1ZXMnXVwiKX19Y2F0Y2goYSl7XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5jb25zb2xlJiYoY29uc29sZS5sb2coXCJUaGVyZSB3YXMgYW4gZXJyb3IgY29sbGVjdGluZyBlbnRyb3B5IGZyb20gdGhlIGJyb3dzZXI6XCIpLGNvbnNvbGUubG9nKGEpKX1cbnNqY2wuanNvbj17ZGVmYXVsdHM6e3Y6MSxpdGVyOjFFNCxrczoxMjgsdHM6NjQsbW9kZTpcImNjbVwiLGFkYXRhOlwiXCIsY2lwaGVyOlwiYWVzXCJ9LGhhOmZ1bmN0aW9uKGEsYixjLGQpe2M9Y3x8e307ZD1kfHx7fTt2YXIgZT1zamNsLmpzb24sZj1lLmooe2l2OnNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDQsMCl9LGUuZGVmYXVsdHMpLGc7ZS5qKGYsYyk7Yz1mLmFkYXRhO1wic3RyaW5nXCI9PT10eXBlb2YgZi5zYWx0JiYoZi5zYWx0PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhmLnNhbHQpKTtcInN0cmluZ1wiPT09dHlwZW9mIGYuaXYmJihmLml2PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhmLml2KSk7aWYoIXNqY2wubW9kZVtmLm1vZGVdfHwhc2pjbC5jaXBoZXJbZi5jaXBoZXJdfHxcInN0cmluZ1wiPT09dHlwZW9mIGEmJjEwMD49Zi5pdGVyfHw2NCE9PWYudHMmJjk2IT09Zi50cyYmMTI4IT09Zi50c3x8MTI4IT09Zi5rcyYmMTkyIT09Zi5rcyYmMHgxMDAhPT1mLmtzfHwyPmYuaXYubGVuZ3RofHxcbjQ8Zi5pdi5sZW5ndGgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGVuY3J5cHQ6IGludmFsaWQgcGFyYW1ldGVyc1wiKTtcInN0cmluZ1wiPT09dHlwZW9mIGE/KGc9c2pjbC5taXNjLmNhY2hlZFBia2RmMihhLGYpLGE9Zy5rZXkuc2xpY2UoMCxmLmtzLzMyKSxmLnNhbHQ9Zy5zYWx0KTpzamNsLmVjYyYmYSBpbnN0YW5jZW9mIHNqY2wuZWNjLmVsR2FtYWwucHVibGljS2V5JiYoZz1hLmtlbSgpLGYua2VtdGFnPWcudGFnLGE9Zy5rZXkuc2xpY2UoMCxmLmtzLzMyKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBiJiYoYj1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGIpKTtcInN0cmluZ1wiPT09dHlwZW9mIGMmJihmLmFkYXRhPWM9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhjKSk7Zz1uZXcgc2pjbC5jaXBoZXJbZi5jaXBoZXJdKGEpO2UuaihkLGYpO2Qua2V5PWE7Zi5jdD1cImNjbVwiPT09Zi5tb2RlJiZzamNsLmFycmF5QnVmZmVyJiZzamNsLmFycmF5QnVmZmVyLmNjbSYmXG5iIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/c2pjbC5hcnJheUJ1ZmZlci5jY20uZW5jcnlwdChnLGIsZi5pdixjLGYudHMpOnNqY2wubW9kZVtmLm1vZGVdLmVuY3J5cHQoZyxiLGYuaXYsYyxmLnRzKTtyZXR1cm4gZn0sZW5jcnlwdDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1zamNsLmpzb24sZj1lLmhhLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gZS5lbmNvZGUoZil9LGdhOmZ1bmN0aW9uKGEsYixjLGQpe2M9Y3x8e307ZD1kfHx7fTt2YXIgZT1zamNsLmpzb247Yj1lLmooZS5qKGUuaih7fSxlLmRlZmF1bHRzKSxiKSxjLCEwKTt2YXIgZixnO2Y9Yi5hZGF0YTtcInN0cmluZ1wiPT09dHlwZW9mIGIuc2FsdCYmKGIuc2FsdD1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYi5zYWx0KSk7XCJzdHJpbmdcIj09PXR5cGVvZiBiLml2JiYoYi5pdj1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYi5pdikpO2lmKCFzamNsLm1vZGVbYi5tb2RlXXx8IXNqY2wuY2lwaGVyW2IuY2lwaGVyXXx8XCJzdHJpbmdcIj09PVxudHlwZW9mIGEmJjEwMD49Yi5pdGVyfHw2NCE9PWIudHMmJjk2IT09Yi50cyYmMTI4IT09Yi50c3x8MTI4IT09Yi5rcyYmMTkyIT09Yi5rcyYmMHgxMDAhPT1iLmtzfHwhYi5pdnx8Mj5iLml2Lmxlbmd0aHx8NDxiLml2Lmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZGVjcnlwdDogaW52YWxpZCBwYXJhbWV0ZXJzXCIpO1wic3RyaW5nXCI9PT10eXBlb2YgYT8oZz1zamNsLm1pc2MuY2FjaGVkUGJrZGYyKGEsYiksYT1nLmtleS5zbGljZSgwLGIua3MvMzIpLGIuc2FsdD1nLnNhbHQpOnNqY2wuZWNjJiZhIGluc3RhbmNlb2Ygc2pjbC5lY2MuZWxHYW1hbC5zZWNyZXRLZXkmJihhPWEudW5rZW0oc2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGIua2VtdGFnKSkuc2xpY2UoMCxiLmtzLzMyKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBmJiYoZj1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGYpKTtnPW5ldyBzamNsLmNpcGhlcltiLmNpcGhlcl0oYSk7Zj1cImNjbVwiPT09XG5iLm1vZGUmJnNqY2wuYXJyYXlCdWZmZXImJnNqY2wuYXJyYXlCdWZmZXIuY2NtJiZiLmN0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/c2pjbC5hcnJheUJ1ZmZlci5jY20uZGVjcnlwdChnLGIuY3QsYi5pdixiLnRhZyxmLGIudHMpOnNqY2wubW9kZVtiLm1vZGVdLmRlY3J5cHQoZyxiLmN0LGIuaXYsZixiLnRzKTtlLmooZCxiKTtkLmtleT1hO3JldHVybiAxPT09Yy5yYXc/ZjpzamNsLmNvZGVjLnV0ZjhTdHJpbmcuZnJvbUJpdHMoZil9LGRlY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9c2pjbC5qc29uO3JldHVybiBlLmdhKGEsZS5kZWNvZGUoYiksYyxkKX0sZW5jb2RlOmZ1bmN0aW9uKGEpe3ZhciBiLGM9XCJ7XCIsZD1cIlwiO2ZvcihiIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShiKSl7aWYoIWIubWF0Y2goL15bYS16MC05XSskL2kpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBlbmNvZGU6IGludmFsaWQgcHJvcGVydHkgbmFtZVwiKTtjKz1kKydcIicrXG5iKydcIjonO2Q9XCIsXCI7c3dpdGNoKHR5cGVvZiBhW2JdKXtjYXNlIFwibnVtYmVyXCI6Y2FzZSBcImJvb2xlYW5cIjpjKz1hW2JdO2JyZWFrO2Nhc2UgXCJzdHJpbmdcIjpjKz0nXCInK2VzY2FwZShhW2JdKSsnXCInO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpjKz0nXCInK3NqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKGFbYl0sMCkrJ1wiJzticmVhaztkZWZhdWx0OnRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJqc29uIGVuY29kZTogdW5zdXBwb3J0ZWQgdHlwZVwiKTt9fXJldHVybiBjK1wifVwifSxkZWNvZGU6ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoL1xccy9nLFwiXCIpO2lmKCFhLm1hdGNoKC9eXFx7LipcXH0kLykpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGRlY29kZTogdGhpcyBpc24ndCBqc29uIVwiKTthPWEucmVwbGFjZSgvXlxce3xcXH0kL2csXCJcIikuc3BsaXQoLywvKTt2YXIgYj17fSxjLGQ7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7aWYoIShkPWFbY10ubWF0Y2goL15cXHMqKD86KFtcIiddPykoW2Etel1bYS16MC05XSopXFwxKVxccyo6XFxzKig/OigtP1xcZCspfFwiKFthLXowLTkrXFwvJSpfLkA9XFwtXSopXCJ8KHRydWV8ZmFsc2UpKSQvaSkpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBkZWNvZGU6IHRoaXMgaXNuJ3QganNvbiFcIik7XG5udWxsIT1kWzNdP2JbZFsyXV09cGFyc2VJbnQoZFszXSwxMCk6bnVsbCE9ZFs0XT9iW2RbMl1dPWRbMl0ubWF0Y2goL14oY3R8YWRhdGF8c2FsdHxpdikkLyk/c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGRbNF0pOnVuZXNjYXBlKGRbNF0pOm51bGwhPWRbNV0mJihiW2RbMl1dPVwidHJ1ZVwiPT09ZFs1XSl9cmV0dXJuIGJ9LGo6ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWEmJihhPXt9KTtpZih2b2lkIDA9PT1iKXJldHVybiBhO2Zvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkpe2lmKGMmJnZvaWQgMCE9PWFbZF0mJmFbZF0hPT1iW2RdKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwicmVxdWlyZWQgcGFyYW1ldGVyIG92ZXJyaWRkZW5cIik7YVtkXT1iW2RdfXJldHVybiBhfSxyYTpmdW5jdGlvbihhLGIpe3ZhciBjPXt9LGQ7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZhW2RdIT09YltkXSYmKGNbZF09YVtkXSk7cmV0dXJuIGN9LHFhOmZ1bmN0aW9uKGEsXG5iKXt2YXIgYz17fSxkO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKyspdm9pZCAwIT09YVtiW2RdXSYmKGNbYltkXV09YVtiW2RdXSk7cmV0dXJuIGN9fTtzamNsLmVuY3J5cHQ9c2pjbC5qc29uLmVuY3J5cHQ7c2pjbC5kZWNyeXB0PXNqY2wuanNvbi5kZWNyeXB0O3NqY2wubWlzYy5vYT17fTtzamNsLm1pc2MuY2FjaGVkUGJrZGYyPWZ1bmN0aW9uKGEsYil7dmFyIGM9c2pjbC5taXNjLm9hLGQ7Yj1ifHx7fTtkPWIuaXRlcnx8MUUzO2M9Y1thXT1jW2FdfHx7fTtkPWNbZF09Y1tkXXx8e2ZpcnN0U2FsdDpiLnNhbHQmJmIuc2FsdC5sZW5ndGg/Yi5zYWx0LnNsaWNlKDApOnNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDIsMCl9O2M9dm9pZCAwPT09Yi5zYWx0P2QuZmlyc3RTYWx0OmIuc2FsdDtkW2NdPWRbY118fHNqY2wubWlzYy5wYmtkZjIoYSxjLGIuaXRlcik7cmV0dXJue2tleTpkW2NdLnNsaWNlKDApLHNhbHQ6Yy5zbGljZSgwKX19O1xuXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzJiYobW9kdWxlLmV4cG9ydHM9c2pjbCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHNqY2x9KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgcHJlZml4ID0gJ34nO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIHN0b3JhZ2UgZm9yIG91ciBgRUVgIG9iamVjdHMuXG4gKiBBbiBgRXZlbnRzYCBpbnN0YW5jZSBpcyBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEV2ZW50cygpIHt9XG5cbi8vXG4vLyBXZSB0cnkgdG8gbm90IGluaGVyaXQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuIEluIHNvbWUgZW5naW5lcyBjcmVhdGluZyBhblxuLy8gaW5zdGFuY2UgaW4gdGhpcyB3YXkgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBgT2JqZWN0LmNyZWF0ZShudWxsKWAgZGlyZWN0bHkuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gY2hhcmFjdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90XG4vLyBvdmVycmlkZGVuIG9yIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vXG5pZiAoT2JqZWN0LmNyZWF0ZSkge1xuICBFdmVudHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvL1xuICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGBfX3Byb3RvX19gIHByb3BlcnR5IGlzIHN0aWxsIGluaGVyaXRlZCBpblxuICAvLyBzb21lIG9sZCBicm93c2VycyBsaWtlIEFuZHJvaWQgNCwgaVBob25lIDUuMSwgT3BlcmEgMTEgYW5kIFNhZmFyaSA1LlxuICAvL1xuICBpZiAoIW5ldyBFdmVudHMoKS5fX3Byb3RvX18pIHByZWZpeCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmNlPWZhbHNlXSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCBlbWl0dGVyLCBvbmNlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdKSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyLCBlbWl0dGVyLl9ldmVudHNDb3VudCsrO1xuICBlbHNlIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0uZm4pIGVtaXR0ZXIuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gW2VtaXR0ZXIuX2V2ZW50c1tldnRdLCBsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIGVtaXR0ZXI7XG59XG5cbi8qKlxuICogQ2xlYXIgZXZlbnQgYnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2dCBUaGUgRXZlbnQgbmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyRXZlbnQoZW1pdHRlciwgZXZ0KSB7XG4gIGlmICgtLWVtaXR0ZXIuX2V2ZW50c0NvdW50ID09PSAwKSBlbWl0dGVyLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIGVsc2UgZGVsZXRlIGVtaXR0ZXIuX2V2ZW50c1tldnRdO1xufVxuXG4vKipcbiAqIE1pbmltYWwgYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgbGlzdGluZyB0aGUgZXZlbnRzIGZvciB3aGljaCB0aGUgZW1pdHRlciBoYXMgcmVnaXN0ZXJlZFxuICogbGlzdGVuZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgdmFyIG5hbWVzID0gW11cbiAgICAsIGV2ZW50c1xuICAgICwgbmFtZTtcblxuICBpZiAodGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHJldHVybiBuYW1lcztcblxuICBmb3IgKG5hbWUgaW4gKGV2ZW50cyA9IHRoaXMuX2V2ZW50cykpIHtcbiAgICBpZiAoaGFzLmNhbGwoZXZlbnRzLCBuYW1lKSkgbmFtZXMucHVzaChwcmVmaXggPyBuYW1lLnNsaWNlKDEpIDogbmFtZSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHJldHVybiBuYW1lcy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhldmVudHMpKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lcztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGhhbmRsZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFoYW5kbGVycykgcmV0dXJuIFtdO1xuICBpZiAoaGFuZGxlcnMuZm4pIHJldHVybiBbaGFuZGxlcnMuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoLCBlZSA9IG5ldyBBcnJheShsKTsgaSA8IGw7IGkrKykge1xuICAgIGVlW2ldID0gaGFuZGxlcnNbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpc3RlbmVycyBsaXN0ZW5pbmcgdG8gYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtYmVyIG9mIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudChldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFsaXN0ZW5lcnMpIHJldHVybiAwO1xuICBpZiAobGlzdGVuZXJzLmZuKSByZXR1cm4gMTtcbiAgcmV0dXJuIGxpc3RlbmVycy5sZW5ndGg7XG59O1xuXG4vKipcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGhhZCBsaXN0ZW5lcnMsIGVsc2UgYGZhbHNlYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiBmYWxzZTtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGFyZ3NcbiAgICAsIGk7XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgY2FzZSA0OiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyLCBhMyk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgb25lLXRpbWUgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIHRydWUpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGxpc3RlbmVycyBvZiBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBtYXRjaCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmUtdGltZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG4gIGlmICghZm4pIHtcbiAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChcbiAgICAgIGxpc3RlbmVycy5mbiA9PT0gZm4gJiZcbiAgICAgICghb25jZSB8fCBsaXN0ZW5lcnMub25jZSkgJiZcbiAgICAgICghY29udGV4dCB8fCBsaXN0ZW5lcnMuY29udGV4dCA9PT0gY29udGV4dClcbiAgICApIHtcbiAgICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGV2ZW50cyA9IFtdLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGlzdGVuZXJzW2ldLmZuICE9PSBmbiB8fFxuICAgICAgICAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpIHx8XG4gICAgICAgIChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gICAgLy9cbiAgICBpZiAoZXZlbnRzLmxlbmd0aCkgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICAgIGVsc2UgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzLCBvciB0aG9zZSBvZiB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBbZXZlbnRdIFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0O1xuXG4gIGlmIChldmVudCkge1xuICAgIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50c1tldnRdKSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBFeHBvc2UgdGhlIHByZWZpeC5cbi8vXG5FdmVudEVtaXR0ZXIucHJlZml4ZWQgPSBwcmVmaXg7XG5cbi8vXG4vLyBBbGxvdyBgRXZlbnRFbWl0dGVyYCB0byBiZSBpbXBvcnRlZCBhcyBtb2R1bGUgbmFtZXNwYWNlLlxuLy9cbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5pZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG59XG4iLCAiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgeyBXT1JLRVJfQUNUSU9OIH0gZnJvbSBcIn4vZW51bS93b3JrZXItYWN0aW9uLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEx1ZmlGaWxlIH0gZnJvbSBcIn4vZW50aXRpZXMvbHVmaS1maWxlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckFjdGlvbk1lc3NhZ2UgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWFjdGlvbi1tZXNzYWdlLnRzXCI7XG5pbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcbmltcG9ydCB7IFVQTE9BRF9TVEFUVVMgfSBmcm9tIFwifi9lbnVtL2ZpbGUtc3RhdHVzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckV2ZW50IH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1ldmVudC50c1wiO1xuXG5kZWNsYXJlIGxldCBzZWxmOiBXb3JrZXI7XG5cbmV4cG9ydCBjb25zdCBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbi8qKlxuICogVXBkYXRlIGZpbGUgaW4gd29ya2VycyBhbmQgcHJvdmlkZSBtb2RpZmljYXRpb25zIHRvIHRoZSBtYWluIHRocmVhZFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHBhcmFtIGFyZ3NcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWxlID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSwgYXJnczogUGFydGlhbDxMdWZpRmlsZT4pID0+IHtcbiAgT2JqZWN0LmFzc2lnbihsdWZpRmlsZSwgYXJncyk7XG5cbiAgaWYgKHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgZXZlbnQ6IEVWRU5ULkZJTEVfVVBEQVRFRCxcbiAgICAgIGx1ZmlGaWxlLFxuICAgIH0gYXMgV29ya2VyRXZlbnQpO1xuICB9XG5cbiAgcmV0dXJuIGx1ZmlGaWxlO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbmRGaWxlRXJyb3IgPSAobHVmaUZpbGU6IEx1ZmlGaWxlLCBlcnJvcjogRXJyb3IpID0+IHtcbiAgdXBkYXRlRmlsZShsdWZpRmlsZSwgeyB1cGxvYWRTdGF0dXM6IFVQTE9BRF9TVEFUVVMuRkFJTEVEIH0pO1xuXG4gIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IgfSBhcyBXb3JrZXJFdmVudCk7XG59O1xuXG4vKipcbiAqIEluaXQgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBjaGlsZCB3b3JrZXIncyBvbm1lc3NhZ2UgZXZlbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0ID0gKCkgPT4ge1xuICBldmVudHMub25jZShFVkVOVC5TT0NLRVRfT1BFTkVELCAoKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBldmVudDogRVZFTlQuU09DS0VUX09QRU5FRCxcbiAgICB9KTtcbiAgfSk7XG5cbiAgZXZlbnRzLm9uY2UoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzV29ya2VyQWN0aW9uTWVzc2FnZSA9IChcbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgbWVzc2FnZTogYW55LFxuKTogbWVzc2FnZSBpcyBXb3JrZXJBY3Rpb25NZXNzYWdlID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgbWVzc2FnZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIG1lc3NhZ2UgIT09IG51bGwgJiZcbiAgICBcImFjdGlvblwiIGluIG1lc3NhZ2UgJiZcbiAgICBPYmplY3QudmFsdWVzKFdPUktFUl9BQ1RJT04pLmluY2x1ZGVzKG1lc3NhZ2UuYWN0aW9uKVxuICApO1xufTtcbiIsICJjb25zdCBkZWZhdWx0RXJyb3JDb25maWcgPSB7XHJcbiAgICB3aXRoU3RhY2tUcmFjZTogZmFsc2UsXHJcbn07XHJcbi8vIEN1c3RvbSBlcnJvciBvYmplY3RcclxuLy8gQ29udGV4dCAvIGRpc2N1c3Npb246IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBlcm1hY3JvL25ldmVydGhyb3cvcHVsbC8yMTVcclxuY29uc3QgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yID0gKG1lc3NhZ2UsIHJlc3VsdCwgY29uZmlnID0gZGVmYXVsdEVycm9yQ29uZmlnKSA9PiB7XHJcbiAgICBjb25zdCBkYXRhID0gcmVzdWx0LmlzT2soKVxyXG4gICAgICAgID8geyB0eXBlOiAnT2snLCB2YWx1ZTogcmVzdWx0LnZhbHVlIH1cclxuICAgICAgICA6IHsgdHlwZTogJ0VycicsIHZhbHVlOiByZXN1bHQuZXJyb3IgfTtcclxuICAgIGNvbnN0IG1heWJlU3RhY2sgPSBjb25maWcud2l0aFN0YWNrVHJhY2UgPyBuZXcgRXJyb3IoKS5zdGFjayA6IHVuZGVmaW5lZDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgIHN0YWNrOiBtYXliZVN0YWNrLFxyXG4gICAgfTtcclxufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG5jbGFzcyBSZXN1bHRBc3luYyB7XHJcbiAgICBjb25zdHJ1Y3RvcihyZXMpIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlID0gcmVzO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21TYWZlUHJvbWlzZShwcm9taXNlKSB7XHJcbiAgICAgICAgY29uc3QgbmV3UHJvbWlzZSA9IHByb21pc2UudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMobmV3UHJvbWlzZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbVByb21pc2UocHJvbWlzZSwgZXJyb3JGbikge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlXHJcbiAgICAgICAgICAgIC50aGVuKCh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKSlcclxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiBuZXcgRXJyKGVycm9yRm4oZSkpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIHN0YXRpYyBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMoKCgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPayh5aWVsZCBmbiguLi5hcmdzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihlcnJvckZuID8gZXJyb3JGbihlcnJvcikgOiBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKSgpKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNvbWJpbmUoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3QoYXN5bmNSZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lV2l0aEFsbEVycm9ycyhhc3luY1Jlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIG1hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayh5aWVsZCBmKHJlcy52YWx1ZSkpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBuZXdSZXMgPSB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChuZXdSZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIobmV3UmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHlpZWxkIGYocmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVGVlIGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc09rKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycih5aWVsZCBmKHJlcy5lcnJvcikpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZSBpbnN0YW5jZW9mIFJlc3VsdEFzeW5jID8gbmV3VmFsdWUuX3Byb21pc2UgOiBuZXdWYWx1ZTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGYocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIG1hdGNoKG9rLCBfZXJyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMubWF0Y2gob2ssIF9lcnIpKTtcclxuICAgIH1cclxuICAgIHVud3JhcE9yKHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy51bndyYXBPcih0KSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiA5LjAuMC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIHVzZSBgc2FmZVRyeWAgd2l0aG91dCB0aGlzIG1ldGhvZC5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBzYWZlVHJ5KGFzeW5jIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgKiAgIGNvbnN0IG9rVmFsdWUgPSB5aWVsZCogeW91clJlc3VsdFxyXG4gICAgICogfSlcclxuICAgICAqIGBgYFxyXG4gICAgICogRW11bGF0ZXMgUnVzdCdzIGA/YCBvcGVyYXRvciBpbiBgc2FmZVRyeWAncyBib2R5LiBTZWUgYWxzbyBgc2FmZVRyeWAuXHJcbiAgICAgKi9cclxuICAgIHNhZmVVbndyYXAoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogc2FmZVVud3JhcF8xKCkge1xyXG4gICAgICAgICAgICByZXR1cm4geWllbGQgX19hd2FpdCh5aWVsZCBfX2F3YWl0KHlpZWxkKiBfX2FzeW5jRGVsZWdhdG9yKF9fYXN5bmNWYWx1ZXMoeWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLnNhZmVVbndyYXAoKSkpKSkpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIE1ha2VzIFJlc3VsdEFzeW5jIGltcGxlbWVudCBQcm9taXNlTGlrZTxSZXN1bHQ+XHJcbiAgICB0aGVuKHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIF9hKCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBfX2F3YWl0KHRoaXMuX3Byb21pc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgICAgICAgICAgeWllbGQgeWllbGQgX19hd2FpdChlcnJBc3luYyhyZXN1bHQuZXJyb3IpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5jb25zdCBva0FzeW5jID0gKHZhbHVlKSA9PiBuZXcgUmVzdWx0QXN5bmMoUHJvbWlzZS5yZXNvbHZlKG5ldyBPayh2YWx1ZSkpKTtcclxuY29uc3QgZXJyQXN5bmMgPSAoZXJyKSA9PiBuZXcgUmVzdWx0QXN5bmMoUHJvbWlzZS5yZXNvbHZlKG5ldyBFcnIoZXJyKSkpO1xyXG5jb25zdCBmcm9tUHJvbWlzZSA9IFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlO1xyXG5jb25zdCBmcm9tU2FmZVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2U7XHJcbmNvbnN0IGZyb21Bc3luY1Rocm93YWJsZSA9IFJlc3VsdEFzeW5jLmZyb21UaHJvd2FibGU7XG5cbi8qKlxyXG4gKiBTaG9ydCBjaXJjdWl0cyBvbiB0aGUgRklSU1QgRXJyIHZhbHVlIHRoYXQgd2UgZmluZFxyXG4gKi9cclxuY29uc3QgY29tYmluZVJlc3VsdExpc3QgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjID0gZXJyKHJlc3VsdC5lcnJvcik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYWNjLm1hcCgobGlzdCkgPT4gbGlzdC5wdXNoKHJlc3VsdC52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbi8qIFRoaXMgaXMgdGhlIHR5cGVzYWZlIHZlcnNpb24gb2YgUHJvbWlzZS5hbGxcclxuICpcclxuICogVGFrZXMgYSBsaXN0IG9mIFJlc3VsdEFzeW5jPFQsIEU+IGFuZCBzdWNjZXNzIGlmIGFsbCBpbm5lciByZXN1bHRzIGFyZSBPayB2YWx1ZXNcclxuICogb3IgZmFpbHMgaWYgb25lIChvciBtb3JlKSBvZiB0aGUgaW5uZXIgcmVzdWx0cyBhcmUgRXJyIHZhbHVlc1xyXG4gKi9cclxuY29uc3QgY29tYmluZVJlc3VsdEFzeW5jTGlzdCA9IChhc3luY1Jlc3VsdExpc3QpID0+IFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZShQcm9taXNlLmFsbChhc3luY1Jlc3VsdExpc3QpKS5hbmRUaGVuKGNvbWJpbmVSZXN1bHRMaXN0KTtcclxuLyoqXHJcbiAqIEdpdmUgYSBsaXN0IG9mIGFsbCB0aGUgZXJyb3JzIHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyA9IChyZXN1bHRMaXN0KSA9PiB7XHJcbiAgICBsZXQgYWNjID0gb2soW10pO1xyXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0TGlzdCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSAmJiBhY2MuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICBhY2MuZXJyb3IucHVzaChyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNFcnIoKSAmJiBhY2MuaXNPaygpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihbcmVzdWx0LmVycm9yXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MudmFsdWUucHVzaChyZXN1bHQudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gcmVzdWx0LmlzT2soKSAmJiBhY2MuaXNFcnIoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjYztcclxufTtcclxuY29uc3QgY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxyXG52YXIgUmVzdWx0O1xyXG4oZnVuY3Rpb24gKFJlc3VsdCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBXcmFwcyBhIGZ1bmN0aW9uIHdpdGggYSB0cnkgY2F0Y2gsIGNyZWF0aW5nIGEgbmV3IGZ1bmN0aW9uIHdpdGggdGhlIHNhbWVcclxuICAgICAqIGFyZ3VtZW50cyBidXQgcmV0dXJuaW5nIGBPa2AgaWYgc3VjY2Vzc2Z1bCwgYEVycmAgaWYgdGhlIGZ1bmN0aW9uIHRocm93c1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmbiBmdW5jdGlvbiB0byB3cmFwIHdpdGggb2sgb24gc3VjY2VzcyBvciBlcnIgb24gZmFpbHVyZVxyXG4gICAgICogQHBhcmFtIGVycm9yRm4gd2hlbiBhbiBlcnJvciBpcyB0aHJvd24sIHRoaXMgd2lsbCB3cmFwIHRoZSBlcnJvciByZXN1bHQgaWYgcHJvdmlkZWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIGZ1bmN0aW9uIGZyb21UaHJvd2FibGUoZm4sIGVycm9yRm4pIHtcclxuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9rKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnIoZXJyb3JGbiA/IGVycm9yRm4oZSkgOiBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuZnJvbVRocm93YWJsZSA9IGZyb21UaHJvd2FibGU7XHJcbiAgICBmdW5jdGlvbiBjb21iaW5lKHJlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdExpc3QocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZSA9IGNvbWJpbmU7XHJcbiAgICBmdW5jdGlvbiBjb21iaW5lV2l0aEFsbEVycm9ycyhyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyhyZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIFJlc3VsdC5jb21iaW5lV2l0aEFsbEVycm9ycyA9IGNvbWJpbmVXaXRoQWxsRXJyb3JzO1xyXG59KShSZXN1bHQgfHwgKFJlc3VsdCA9IHt9KSk7XHJcbmNvbnN0IG9rID0gKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpO1xyXG5mdW5jdGlvbiBlcnIoZXJyKSB7XHJcbiAgICByZXR1cm4gbmV3IEVycihlcnIpO1xyXG59XHJcbmZ1bmN0aW9uIHNhZmVUcnkoYm9keSkge1xyXG4gICAgY29uc3QgbiA9IGJvZHkoKS5uZXh0KCk7XHJcbiAgICBpZiAobiBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG4udGhlbigocikgPT4gci52YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG4udmFsdWU7XHJcbn1cclxuY2xhc3MgT2sge1xyXG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBpc09rKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIG1hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKGYodGhpcy52YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWFwRXJyKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRocm91Z2goZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpLm1hcCgoX3ZhbHVlKSA9PiB0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShmKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZih0aGlzLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gVGVlIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZXJyb3JcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhlbihmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYXN5bmNBbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKCkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY01hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZShmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIHVud3JhcE9yKF92KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHNhZmVVbndyYXAoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLXlpZWxkICovXHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfSkoKTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXAoXykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihjb25maWcpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVOZXZlclRocm93RXJyb3IoJ0NhbGxlZCBgX3Vuc2FmZVVud3JhcEVycmAgb24gYW4gT2snLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzLCByZXF1aXJlLXlpZWxkXHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbn1cclxuY2xhc3MgRXJyIHtcclxuICAgIGNvbnN0cnVjdG9yKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpc0VycigpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNPaygpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIG1hcEVycihmKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycihmKHRoaXMuZXJyb3IpKTtcclxuICAgIH1cclxuICAgIGFuZFRocm91Z2goX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgYW5kVGVlKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYXN5bmNBbmRUaGVuKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNBbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYXN5bmNNYXAoX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyQXN5bmModGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih2KSB7XHJcbiAgICAgICAgcmV0dXJuIHY7XHJcbiAgICB9XHJcbiAgICBtYXRjaChfb2ssIGVycikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5lcnJvcjtcclxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHlpZWxkIGVycihlcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG8gbm90IHVzZSB0aGlzIGdlbmVyYXRvciBvdXQgb2YgYHNhZmVUcnlgJyk7XHJcbiAgICAgICAgfSkoKTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXAoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBgIG9uIGFuIEVycicsIHRoaXMsIGNvbmZpZyk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwRXJyKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvcjtcclxuICAgIH1cclxuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICB5aWVsZCBzZWxmO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IGZyb21UaHJvd2FibGUgPSBSZXN1bHQuZnJvbVRocm93YWJsZTtcclxuLy8jZW5kcmVnaW9uXG5cbmV4cG9ydCB7IEVyciwgT2ssIFJlc3VsdCwgUmVzdWx0QXN5bmMsIGVyciwgZXJyQXN5bmMsIGZyb21Bc3luY1Rocm93YWJsZSwgZnJvbVByb21pc2UsIGZyb21TYWZlUHJvbWlzZSwgZnJvbVRocm93YWJsZSwgb2ssIG9rQXN5bmMsIHNhZmVUcnkgfTtcbiIsICJ0eXBlIEpzb25hYmxlID1cbiAgfCBzdHJpbmdcbiAgfCBudW1iZXJcbiAgfCBib29sZWFuXG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZFxuICB8IHJlYWRvbmx5IEpzb25hYmxlW11cbiAgfCB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IEpzb25hYmxlIH1cbiAgfCB7IHRvSlNPTigpOiBKc29uYWJsZSB9O1xuXG5leHBvcnQgY2xhc3MgQmFzZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGV4dD86IEpzb25hYmxlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgb3B0aW9uczogeyBjYXVzZT86IEVycm9yOyBjb250ZXh0PzogSnNvbmFibGUgfSA9IHt9LFxuICApIHtcbiAgICBjb25zdCB7IGNhdXNlLCBjb250ZXh0IH0gPSBvcHRpb25zO1xuXG4gICAgc3VwZXIobWVzc2FnZSwgeyBjYXVzZSB9KTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQmFzZUVycm9yIH0gZnJvbSBcIn4vZXJyb3IvYmFzZS1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0RXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige31cbiIsICJpbXBvcnQgeyBXZWJTb2NrZXRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldENvbm5lY3Rpb25FcnJvciBleHRlbmRzIFdlYlNvY2tldEVycm9yIHtcbiAgb3ZlcnJpZGUgbWVzc2FnZSA9IFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gY29ubmVjdCB0byBXZWJTb2NrZXRcIjtcbn1cbiIsICJpbXBvcnQgeyBlcnJBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY29ubmVjdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgU2VydmVyRXJyb3IgfSBmcm9tIFwifi9lcnJvci9zZXJ2ZXItZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyQ29uZmlnIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1jb25maWcudHNcIjtcblxuLyoqXG4gKiBFbnN1cmUgYW4gZXJyb3IgbWVzc2FnZSBpcyB0cmFuc2Zvcm1lZCBpbiBhbiBFcnJvciBvYmplY3RcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbnN1cmVFcnJvciA9ICh2YWx1ZTogdW5rbm93bik6IEVycm9yID0+IHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiB2YWx1ZTtcblxuICBsZXQgc3RyaW5naWZpZWQgPSBcIltVbmFibGUgdG8gc3RyaW5naWZ5IHRoZSB0aHJvd24gdmFsdWVdXCI7XG4gIHRyeSB7XG4gICAgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgIC8qIGVtcHR5ICovXG4gIH1cblxuICByZXR1cm4gbmV3IEVycm9yKHN0cmluZ2lmaWVkKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgTHVmaSdzIGNvbmZpZyBmcm9tIGl0cyBBUElcbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2VVcmxcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBmZXRjaFNlcnZlckNvbmZpZyA9IChcbiAgaW5zdGFuY2VVcmw6IFVSTCxcbik6IFJlc3VsdEFzeW5jPFNlcnZlckNvbmZpZywgRXJyb3I+ID0+IHtcbiAgY29uc3Qgb3JpZ2luTWF0Y2hlcyA9IGluc3RhbmNlVXJsLmhyZWYubWF0Y2goXG4gICAgLyguKj8pXFwvPyg/OlxcL1tkcl17MX1cXC98bG9naW5cXC8/fGZpbGVzXFwvPykvLFxuICApO1xuXG4gIGNvbnN0IHVybE9yaWdpbiA9IG9yaWdpbk1hdGNoZXMgJiYgb3JpZ2luTWF0Y2hlc1sxXVxuICAgID8gb3JpZ2luTWF0Y2hlc1sxXVxuICAgIDogaW5zdGFuY2VVcmwub3JpZ2luO1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBmZXRjaCh1cmxPcmlnaW4gKyBcIi9hYm91dC9jb25maWdcIiksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENvbm5lY3Rpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgIH0pLFxuICApLmFuZFRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIHJlc3BvbnNlLmpzb24oKSxcbiAgICAgICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgIG5ldyBTZXJ2ZXJFcnJvcih1bmRlZmluZWQsIHsgY29udGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Rlbm9SdW50aW1lID0gKCk6IGJvb2xlYW4gPT4gdHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCI7XG5cbmV4cG9ydCBjb25zdCBpc1NlY3VyZUNvbnRleHQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKCkgfHwgZ2xvYmFsVGhpcy5pc1NlY3VyZUNvbnRleHQgfHxcbiAgICBnbG9iYWxUaGlzLmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiO1xufTtcblxuZXhwb3J0IGNvbnN0IHdvcmtlclVybCA9IChyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IFVSTCA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKClcbiAgICA/IG5ldyBVUkwoYC4vd29ya2VyLyR7cmVsYXRpdmVQYXRofS50c2AsIG5ldyBVUkwoXCIuXCIsIGltcG9ydC5tZXRhLnVybCkuaHJlZilcbiAgICA6IG5ldyBVUkwoXG4gICAgICBpbXBvcnQubWV0YS5yZXNvbHZlKFxuICAgICAgICBgLi8ke1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCAhPT0gXCJlbmNyeXB0XCIgPyBgd29ya2VyLyR7cmVsYXRpdmVQYXRofWAgOiByZWxhdGl2ZVBhdGhcbiAgICAgICAgfS5qc2AsXG4gICAgICApLFxuICAgICk7XG59O1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgImltcG9ydCB7XG4gIERlY29kZSBhcyBiNjRkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjRlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjRcIjtcbmltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgc2pjbCBmcm9tIFwibHVmaS1zamNsXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHsgRGVjcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2RlY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyB0eXBlIEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBFbmNyeXB0ZWREYXRhIG9yIGEgc3RyaW5nIHVzaW5nIHRoZSBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvbi5cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gZW5jcnlwdGVkRGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhIHwgc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8QXJyYXlCdWZmZXIsIERlY3J5cHRpb25FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgZW5jcnlwdGVkRGF0YSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBlbmNyeXB0ZWREYXRhXG4gICAgICA6IChlbmNyeXB0ZWREYXRhLmRhdGEpO1xuXG4gICAgcmV0dXJuIG9rQXN5bmMoYjY0ZGVjb2RlKHNqY2wuZGVjcnlwdChrZXksIGRhdGEpKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IERlY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEVuY3J5cHQgYW4gQXJyYXlCdWZmZXIgaW50byBhbiBFbmNyeXB0ZWREYXRhIHVzaW5nIHRoZSBwcm92aWRlZCBrZXlcbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEFycmF5QnVmZmVyLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZW5jcnlwdGVkID0gc2pjbC5lbmNyeXB0KGtleSwgYjY0ZW5jb2RlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gb2tBc3luYyh7XG4gICAgICBhbGdvOiBDcnlwdG9BbGdvcml0aG0uU2pjbCxcbiAgICAgIGRhdGE6IGVuY3J5cHRlZCxcbiAgICAgIGl2OiBKU09OLnBhcnNlKGVuY3J5cHRlZCBhcyB1bmtub3duIGFzIHN0cmluZykuaXYsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IEVuY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyB1c2luZyBTamNsIEFQSVxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9ICgpOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMoc2pjbC5yYW5kb20ucmFuZG9tV29yZHMoOCwgMTApKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGdlbmVyYXRlIGtleVwiLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyBTamNsIEFQSVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5oZXguZnJvbUJpdHMoc2pjbC5oYXNoLnNoYTUxMi5oYXNoKHBhc3N3b3JkKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhuZXcgSGFzaGluZ0Vycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXRlY3QgaWYgdGhlIGtleSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgU2pjbC4gU2luY2Ugd2UncmUgbm90IGdlbmVyYXRpbmcgYW4gZXF1YWwgc3ltYm9sIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBXZWJDcnlwdG8gQVBJIChieSB1c2luZyBiYXNlNjR1cmwpLCBpdCdzIGVhc3kgdG8gZGV0ZWN0XG4gKlxuICogQHBhcmFtIGtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2pjbEtleSA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4ga2V5W2tleS5sZW5ndGggLSAxXSA9PT0gXCI9XCI7XG59O1xuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBEZWNyeXB0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2U6IHN0cmluZyA9IFwiVW5hYmxlIHRvIGRlY3J5cHQgdGhlIHByb3ZpZGVkIGRhdGFcIjtcbn1cbiIsICJpbXBvcnQge1xuICBEZWNvZGUgYXMgYjY0dXJsZGVjb2RlLFxuICBFbmNvZGUgYXMgYjY0dXJsZW5jb2RlLFxufSBmcm9tIFwiYXJyYXlidWZmZXItZW5jb2RpbmcvYmFzZTY0L3VybFwiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IERlY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9kZWNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBIYXNoaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50c1wiO1xuXG4vKipcbiAqIERlY3J5cHQgYW4gZW5jcnlwdGVkRGF0YSB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gZW5jcnlwdGVkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZGVjcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIGVuY3J5cHRlZDogRW5jcnlwdGVkRGF0YSxcbik6IFJlc3VsdEFzeW5jPEFycmF5QnVmZmVyLCBEZWNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgcmV0dXJuIGltcG9ydEtleShrZXkpLmFuZFRoZW4oKGltcG9ydGVkS2V5KSA9PlxuICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgY3J5cHRvLnN1YnRsZS5kZWNyeXB0KFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICAgICAgaXY6IGVuY3J5cHRlZC5pdiBhcyBVaW50OEFycmF5LFxuICAgICAgICB9LFxuICAgICAgICBpbXBvcnRlZEtleSxcbiAgICAgICAgZW5jcnlwdGVkLmRhdGEgYXMgQXJyYXlCdWZmZXIsXG4gICAgICApLFxuICAgICAgKGVycm9yKSA9PiBuZXcgRGVjcnlwdGlvbkVycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICAgIClcbiAgKTtcbn07XG5cbi8qKlxuICogRW5jcnlwdCBhbiBBcnJheUJ1ZmZlciBpbnRvIGFuIEVuY3J5cHRlZERhdGEgdXNpbmcgdGhlIHByb3ZpZGVkIGtleVxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbik6IFJlc3VsdEFzeW5jPEVuY3J5cHRlZERhdGEsIEVuY3J5cHRpb25FcnJvcj4gPT4ge1xuICByZXR1cm4gaW1wb3J0S2V5KGtleSkuYW5kVGhlbigoaW1wb3J0ZWRLZXkpID0+IHtcbiAgICBjb25zdCBpdiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTIpKTtcbiAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICBjcnlwdG8uc3VidGxlLmVuY3J5cHQoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgICAgICBpdixcbiAgICAgICAgfSxcbiAgICAgICAgaW1wb3J0ZWRLZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgKSxcbiAgICAgIChlcnJvcikgPT5cbiAgICAgICAgbmV3IEVuY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgICB9KSxcbiAgICApLmFuZFRoZW4oKGVuY3J5cHRlZCkgPT4ge1xuICAgICAgcmV0dXJuIG9rQXN5bmMoe1xuICAgICAgICBhbGdvOiBDcnlwdG9BbGdvcml0aG0uV2ViQ3J5cHRvLFxuICAgICAgICBkYXRhOiBlbmNyeXB0ZWQsXG4gICAgICAgIGl2LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBzdHJpbmcgaW50byBhIENyeXB0b0tleSwgdXNhYmxlIGluIFdlYiBDcnlwdG8gQVBJXG4gKlxuICogQHBhcmFtIGtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGltcG9ydEtleSA9IChrZXk6IHN0cmluZyk6IFJlc3VsdEFzeW5jPENyeXB0b0tleSwgQ3J5cHRvRXJyb3I+ID0+IHtcbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICAgXCJyYXdcIixcbiAgICAgIGI2NHVybGRlY29kZShrZXkpLFxuICAgICAgeyBuYW1lOiBcIkFFUy1HQ01cIiB9LFxuICAgICAgZmFsc2UsXG4gICAgICBbXG4gICAgICAgIFwiZW5jcnlwdFwiLFxuICAgICAgICBcImRlY3J5cHRcIixcbiAgICAgIF0sXG4gICAgKSxcbiAgICAoZXJyb3IpID0+XG4gICAgICBuZXcgQ3J5cHRvRXJyb3IoXCJVbmFibGUgdG8gaW1wb3J0IGNyeXB0b2dyYXBoeSBrZXlcIiwge1xuICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSksXG4gICk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyB1c2luZyBXZWIgQ3J5cHRvIEFQSS5cbiAqXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVLZXkgPSAoKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBDcnlwdG9FcnJvcj4gPT4ge1xuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgIGNyeXB0by5zdWJ0bGVcbiAgICAgICAgLmdlbmVyYXRlS2V5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQUVTLUdDTVwiLFxuICAgICAgICAgICAgbGVuZ3RoOiAyNTYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCJdLFxuICAgICAgICApXG4gICAgICAgIC50aGVuKChnZW5lcmF0ZWRLZXkpID0+XG4gICAgICAgICAgY3J5cHRvLnN1YnRsZVxuICAgICAgICAgICAgLmV4cG9ydEtleShcInJhd1wiLCBnZW5lcmF0ZWRLZXkpXG4gICAgICAgICAgICAudGhlbigoa2V5KSA9PiByZXNvbHZlKGI2NHVybGVuY29kZShrZXkpKSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBiYXNlNjQgZW5jb2RlIHRoZSB1cmxcIiwge1xuICAgICAgICAgICAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gcmVqZWN0KGVycm9yKSlcbiAgICApLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBnZW5lcmF0ZSBrZXlcIiwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICApO1xufTtcblxuLyoqXG4gKiBIYXNoIGEgcGFzc3dvcmQgdXNpbmcgV2ViQ3J5cHRvIEFQSVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PiB7XG4gIGNvbnN0IHByb21pc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICBuZXcgVWludDhBcnJheShcbiAgICAgICAgYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXG4gICAgICAgICAgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBhc3N3b3JkKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKS5tYXAoKGIpID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKSkuam9pbihcIlwiKTtcbiAgfTtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgcHJvbWlzZSgpLFxuICAgIChlcnJvcikgPT4gbmV3IEhhc2hpbmdFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgKTtcbn07XG4iLCAiaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgdHlwZSB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBEZWNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgKiBhcyBzamNsIGZyb20gXCJ+L2FwaS9jcnlwdG8vc2pjbC50c1wiO1xuaW1wb3J0ICogYXMgd2ViIGZyb20gXCJ+L2FwaS9jcnlwdG8vd2ViLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBFbmNyeXB0ZWREYXRhIG9iamVjdCB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEVuY3J5cHRlZERhdGEsXG4pOiBSZXN1bHRBc3luYzxBcnJheUJ1ZmZlciwgRGVjcnlwdGlvbkVycm9yPiA9PlxuICB2YWx1ZS5hbGdvID09PSB1bmRlZmluZWQgfHwgdmFsdWUuYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2xcbiAgICA/IHNqY2wuZGVjcnlwdChrZXksIHZhbHVlKVxuICAgIDogd2ViLmRlY3J5cHQoa2V5LCB2YWx1ZSk7XG5cbi8qKlxuICogRW5jcnlwdCBhbiBBcnJheUJ1ZmZlciB1c2luZyB0aGUgcHJvdmlkZWQga2V5IGFuZCBhbGdvcml0aG1cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PlxuICAoYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2wpXG4gICAgPyBzamNsLmVuY3J5cHQoa2V5LCB2YWx1ZSlcbiAgICA6IHdlYi5lbmNyeXB0KGtleSwgdmFsdWUpO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgbmV3IGtleSBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uXG4gKlxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9IChcbiAgYWxnbyA9IENyeXB0b0FsZ29yaXRobS5XZWJDcnlwdG8sXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PlxuICBhbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbCA/IHNqY2wuZ2VuZXJhdGVLZXkoKSA6IHdlYi5nZW5lcmF0ZUtleSgpO1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyB0aGUgcHJvdmlkZWQgYWxnb3JpdGhtXG4gKlxuICogQHBhcmFtIHBhc3N3b3JkXG4gKiBAcGFyYW0gYWxnb1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBIYXNoaW5nRXJyb3I+ID0+XG4gIGFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsXG4gICAgPyBzamNsLmhhc2hQYXNzd29yZChwYXNzd29yZClcbiAgICA6IHdlYi5oYXNoUGFzc3dvcmQocGFzc3dvcmQpO1xuIiwgImltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgeyBMdWZpRmlsZSB9IGZyb20gXCJ+L2VudGl0aWVzL2x1ZmktZmlsZS50c1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuaW1wb3J0IHsgU29ja2V0UGF0aCB9IGZyb20gXCJ+L2VudW0vc29ja2V0LXBhdGgudHNcIjtcbmltcG9ydCB7IFVwbG9hZEVycm9yIH0gZnJvbSBcIn4vZXJyb3IvdXBsb2FkL3VwbG9hZC1lcnJvci50c1wiO1xuaW1wb3J0IHsgV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd2Vic29ja2V0L3dlYnNvY2tldC1jb25uZWN0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBXZWJTb2NrZXRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50VXBsb2FkQ2h1bmtNZXRhZGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9jbGllbnQtdXBsb2FkLWNodW5rLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyQ2FuY2VsTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2Uvc2VydmVyLWNhbmNlbC1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1kb3dubG9hZC1jaHVuay1zdWNjZXNzLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlclVwbG9hZENodW5rTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2Uvc2VydmVyLXVwbG9hZC1jaHVuay1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGEgfSBmcm9tIFwifi90eXBlL3NlcnZlci1kb3dubG9hZC1jaHVuay1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHsgZW5zdXJlRXJyb3IgfSBmcm9tIFwifi91dGlscy50c1wiO1xuaW1wb3J0IHsgZXZlbnRzLCB1cGRhdGVGaWxlIH0gZnJvbSBcIn4vd29ya2VyL3NoYXJlZC50c1wiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJ+L2FwaS9jcnlwdG8udHNcIjtcbmltcG9ydCB7XG4gIERlY29kZSBhcyBiNjRkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjRlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjRcIjtcblxuZXhwb3J0IGNvbnN0IHNvY2tldHM6IHtcbiAgW2tleTogc3RyaW5nXTogV2ViU29ja2V0O1xufSA9IHt9O1xuXG5jb25zdCBNQVhfRVJST1JTID0gNTtcblxuLyoqXG4gKiBIYW5kbGUgV2ViU29ja2V0IHJlc3BvbnNlIGZvciBjYW5jZWwgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvbkNhbmNlbE1lc3NhZ2UgPSAoXG4gIGRhdGE6IFNlcnZlckNhbmNlbE1ldGFkYXRhLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgRXJyb3I+ID0+IHtcbiAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX0NBTkNFTExFRCwgZGF0YS5zdWNjZXNzKTtcblxuICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBIYW5kbGUgV2ViU29ja2V0IHJlc3BvbnNlIGZvciBkb3dubG9hZCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHJlc3BvbnNlXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uRG93bmxvYWRNZXNzYWdlID0gKFxuICByZXNwb25zZTogc3RyaW5nLFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBjb25zdCByZXN1bHQgPSByZXNwb25zZS5zcGxpdChcIlhYTU9KT1hYXCIpO1xuICBjb25zdCBtZXRhZGF0YVN0cmluZyA9IHJlc3VsdC5zaGlmdCgpO1xuXG4gIGlmIChtZXRhZGF0YVN0cmluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKG1ldGFkYXRhU3RyaW5nKSBhcyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGE7XG5cbiAgICBpZiAoaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhKG1ldGFkYXRhKSkge1xuICAgICAgY29uc3QgZGF0YVN0cmluZyA9IHJlc3VsdC5zaGlmdCgpO1xuXG4gICAgICBpZiAoZGF0YVN0cmluZykge1xuICAgICAgICBjb25zdCBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyaW5nKTtcblxuICAgICAgICAvLyBJZiBmaWxlIHdhcyB1cGxvYWRlZCB1c2luZyBMdWZpIEFQSVxuICAgICAgICBpZiAoZW5jcnlwdGVkRGF0YS5pdikge1xuICAgICAgICAgIGVuY3J5cHRlZERhdGEuaXYgPSBuZXcgVWludDhBcnJheShPYmplY3QudmFsdWVzKGVuY3J5cHRlZERhdGEuaXYpKTtcbiAgICAgICAgICBlbmNyeXB0ZWREYXRhLmRhdGEgPSBiNjRkZWNvZGUoZW5jcnlwdGVkRGF0YS5kYXRhIGFzIHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3J5cHRvLmRlY3J5cHQobHVmaUZpbGUua2V5cy5jbGllbnQsIGVuY3J5cHRlZERhdGEpLmFuZFRoZW4oXG4gICAgICAgICAgKGRlY3J5cHRlZFBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHR5cGVvZiBkZWNyeXB0ZWRQYXJ0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgID8gKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkZWNyeXB0ZWRQYXJ0KS5idWZmZXIgYXMgQXJyYXlCdWZmZXIpXG4gICAgICAgICAgICAgIDogZGVjcnlwdGVkUGFydDtcblxuICAgICAgICAgICAgLy8gSWYgZmlyc3QgY2h1bmtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5wYXJ0ID09PSAwKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHtcbiAgICAgICAgICAgICAgICBjaHVua3NSZWFkeTogbHVmaUZpbGUuY2h1bmtzUmVhZHkgKyAxLFxuICAgICAgICAgICAgICAgIGRlbEF0Rmlyc3RWaWV3OiBtZXRhZGF0YS5kZWxfYXRfZmlyc3RfdmlldyxcbiAgICAgICAgICAgICAgICBkZWxheTogbWV0YWRhdGEuZGVsYXksXG4gICAgICAgICAgICAgICAgbmFtZTogbWV0YWRhdGEubmFtZSxcbiAgICAgICAgICAgICAgICBzaXplOiBtZXRhZGF0YS5zaXplLFxuICAgICAgICAgICAgICAgIHRvdGFsQ2h1bmtzOiBtZXRhZGF0YS50b3RhbCxcbiAgICAgICAgICAgICAgICB0eXBlOiBtZXRhZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgIHppcHBlZDogbWV0YWRhdGEuemlwcGVkLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5ET1dOTE9BRF9TVEFSVEVEKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgY2h1bmtzUmVhZHk6IGx1ZmlGaWxlLmNodW5rc1JlYWR5ICsgMSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuQ0hVTktfRE9XTkxPQURFRCwgYnVmZmVyLCBtZXRhZGF0YS5wYXJ0KTtcblxuICAgICAgICAgICAgaWYgKGx1ZmlGaWxlLmNodW5rc1JlYWR5ID09PSBtZXRhZGF0YS50b3RhbCkge1xuICAgICAgICAgICAgICByZXR1cm4gZW5kRG93bmxvYWQobHVmaUZpbGUpLmFuZFRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULkRPV05MT0FEX0NPTVBMRVRFKTtcbiAgICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFUkFUSU9OX1RFUk1JTkFURUQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IHJldHJpZXZlIG1ldGFkYXRhIGZyb20gZGF0YSByZWNlaXZlZCBieSB0aGUgc2VydmVyXCIsXG4gICAgICAgICk7XG5cbiAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuICAgICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihtZXRhZGF0YS5tc2cpO1xuXG4gICAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG4gICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihcbiAgICAgIFwiQ2Fubm90IHJldHJpZXZlIG1ldGFkYXRhIGZyb20gZGF0YSByZWNlaXZlZCBieSB0aGUgc2VydmVyXCIsXG4gICAgKTtcblxuICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcbiAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICB9XG59O1xuXG4vKipcbiAqIEhhbmRsZSBXZWJTb2NrZXQgcmVzcG9uc2UgZm9yIHVwbG9hZCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHJlc3BvbnNlXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uVXBsb2FkTWVzc2FnZSA9IChcbiAgcmVzcG9uc2U6IFNlcnZlclVwbG9hZENodW5rTWV0YWRhdGEsXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFVwbG9hZEVycm9yPiA9PiB7XG4gIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgLy8gSWYgZmlyc3QgY2h1bmtcbiAgICBpZiAocmVzcG9uc2UuaiA9PT0gMCkge1xuICAgICAgLy8gY29uc29sZS5pbmZvKGBVcGxvYWQgb2YgJHtsdWZpRmlsZS5rZXlzLmNsaWVudH0gc3RhcnRlZGApO1xuXG4gICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7XG4gICAgICAgIGtleXM6IHsgY2xpZW50OiBsdWZpRmlsZS5rZXlzLmNsaWVudCwgc2VydmVyOiByZXNwb25zZS5zaG9ydCB9LFxuICAgICAgICBhY3Rpb25Ub2tlbjogcmVzcG9uc2UudG9rZW4sXG4gICAgICAgIHF1ZXVlSW5kZXg6IHJlc3BvbnNlLmksXG4gICAgICB9KTtcblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX1NUQVJURUQpO1xuICAgIH1cblxuICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHtcbiAgICAgIGNodW5rc1JlYWR5OiBsdWZpRmlsZS5jaHVua3NSZWFkeSArIDEsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRfYXQsXG4gICAgfSk7XG5cbiAgICBldmVudHMuZW1pdChFVkVOVC5DSFVOS19VUExPQURFRCk7XG5cbiAgICBpZiAobHVmaUZpbGUuY2h1bmtzUmVhZHkgPT09IGx1ZmlGaWxlLnRvdGFsQ2h1bmtzKSB7XG4gICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7IHVwbG9hZFN0YXR1czogVVBMT0FEX1NUQVRVUy5DT01QTEVURSB9KTtcblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX0NPTVBMRVRFKTtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihyZXNwb25zZS5tc2cpO1xuICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcblxuICAgIHJldHVybiBlcnJBc3luYyhlcnJvcik7XG4gIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIG9uIHNvY2tldHMgXCJvbm1lc3NhZ2VcIiBldmVudFxuICpcbiAqIEBwYXJhbSBlXG4gKiBAcGFyYW0gc29ja2V0VXJsXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvbk1lc3NhZ2UgPSAoXG4gIGU6IE1lc3NhZ2VFdmVudCxcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgVXBsb2FkRXJyb3I+ID0+IHtcbiAgY29uc3QgZGF0YSA9IHRyeVBhcnNlSnNvbihlLmRhdGEpO1xuICBsZXQgY2FsbGJhY2s7XG5cbiAgaWYgKGRhdGEpIHtcbiAgICBpZiAoIWRhdGEuYWN0aW9uICYmIGRhdGEubXNnKSB7XG4gICAgICAvLyBJZiBlcnJvclxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IoZGF0YS5tc2cpO1xuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuXG4gICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXCJkZWxheVwiIGluIGRhdGEpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvblVwbG9hZE1lc3NhZ2UoZGF0YSwgbHVmaUZpbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbkNhbmNlbE1lc3NhZ2UoZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrID0gb25Eb3dubG9hZE1lc3NhZ2UoZS5kYXRhLCBsdWZpRmlsZSk7XG4gIH1cblxuICByZXR1cm4gY2FsbGJhY2s7XG59O1xuXG4vKipcbiAqIElzIHNvY2tldCBjb25uZWN0aW5nP1xuICpcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Nvbm5lY3RpbmcgPSAoc29ja2V0S2V5OiBzdHJpbmcpOiBib29sZWFuID0+XG4gIHNvY2tldHMgIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0gIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNPTk5FQ1RJTkc7XG5cbi8qKlxuICogSXMgc29ja2V0IHNwYXduZWQ/XG4gKlxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU3Bhd25lZCA9IChzb2NrZXRLZXk6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgc29ja2V0cyAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XSAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XS5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTjtcblxuLyoqXG4gKiBBc2sgV2ViU29ja2V0IHRvIGNhbmNlbCBhbiB1cGxvYWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjYW5jZWxVcGxvYWQgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICB1cGxvYWRTb2NrZXRVcmwobHVmaUZpbGUpLFxuICAgIGx1ZmlGaWxlLFxuICAgIGAke1xuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBpZDogbHVmaUZpbGUua2V5cy5zZXJ2ZXIsXG4gICAgICAgIG1vZF90b2tlbjogbHVmaUZpbGUuYWN0aW9uVG9rZW4sXG4gICAgICAgIGNhbmNlbDogdHJ1ZSxcbiAgICAgICAgaTogbHVmaUZpbGUucXVldWVJbmRleCxcbiAgICAgIH0pXG4gICAgfVhYTU9KT1hYdXNlbGVzc2AsXG4gICk7XG59O1xuXG4vKipcbiAqIERvd25sb2FkIGEgcGFydCBvZiB0aGUgZmlsZSB0aHJvdWdoIHRoZSBXZWJTb2NrZXRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBjaHVua051bWJlclxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkQ2h1bmsgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbiAgY2h1bmtOdW1iZXI6IG51bWJlcixcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGxldCBtZXNzYWdlO1xuXG4gIGlmIChsdWZpRmlsZS5wYXNzd29yZCkge1xuICAgIG1lc3NhZ2UgPSB7IHBhcnQ6IGNodW5rTnVtYmVyLCBmaWxlX3B3ZDogbHVmaUZpbGUucGFzc3dvcmQgfTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0geyBwYXJ0OiBjaHVua051bWJlciB9O1xuICB9XG5cbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIGRvd25sb2FkU29ja2V0VXJsKGx1ZmlGaWxlKSxcbiAgICBsdWZpRmlsZSxcbiAgICBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSxcbiAgKTtcbn07XG5cbi8qKlxuICogVGVsbCB0aGUgV2ViU29ja2V0IHRoZSBkb3dubG9hZCBlbmRlZFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGVuZERvd25sb2FkID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBsZXQgbWVzc2FnZTogeyBlbmRlZDogdHJ1ZTsgZmlsZV9wd2Q/OiBzdHJpbmcgfTtcblxuICBpZiAobHVmaUZpbGUucGFzc3dvcmQpIHtcbiAgICBtZXNzYWdlID0geyBlbmRlZDogdHJ1ZSwgZmlsZV9wd2Q6IGx1ZmlGaWxlLnBhc3N3b3JkIH07XG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZSA9IHsgZW5kZWQ6IHRydWUgfTtcbiAgfVxuXG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICBkb3dubG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksXG4gICk7XG59O1xuXG4vKipcbiAqIFVwbG9hZCBhIGNodW5rIG9mIHRoZSBmaWxlIHRocm91Z2ggdGhlIFdlYlNvY2tldFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHBhcmFtIG1ldGFkYXRhXG4gKiBAcGFyYW0gZW5jcnlwdGVkRGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwbG9hZENodW5rID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4gIG1ldGFkYXRhOiBDbGllbnRVcGxvYWRDaHVua01ldGFkYXRhLFxuICBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgZW5jcnlwdGVkRGF0YS5kYXRhID0gYjY0ZW5jb2RlKGVuY3J5cHRlZERhdGEuZGF0YSBhcyBBcnJheUJ1ZmZlcik7XG5cbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIHVwbG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgYCR7SlNPTi5zdHJpbmdpZnkobWV0YWRhdGEpfVhYTU9KT1hYJHtKU09OLnN0cmluZ2lmeShlbmNyeXB0ZWREYXRhKX1gLFxuICApO1xufTtcblxuLyoqXG4gKiBTZW5kIGEgbWVzc2FnZSB0byB0aGUgV2ViU29ja2V0XG4gKlxuICogQHBhcmFtIHNvY2tldFVybFxuICogQHBhcmFtIG1lc3NhZ2VcbiAqIEBwYXJhbSBoYXNQcmlvcml0eVxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgc2VuZE1lc3NhZ2UgPSAoXG4gIHNvY2tldFVybDogc3RyaW5nLFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGlmICghaXNTcGF3bmVkKHNvY2tldFVybCkpIHtcbiAgICByZXR1cm4gc3Bhd24oc29ja2V0VXJsKS5hbmRUaGVuKCgpID0+IHtcbiAgICAgIHNvY2tldHNbc29ja2V0VXJsXS5vbm1lc3NhZ2UgPSAoZSkgPT4gb25NZXNzYWdlKGUsIGx1ZmlGaWxlKTtcbiAgICAgIHJldHVybiBzZW5kTWVzc2FnZShzb2NrZXRVcmwsIGx1ZmlGaWxlLCBtZXNzYWdlKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzb2NrZXRzW3NvY2tldFVybF0uc2VuZChtZXNzYWdlKTtcblxuICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbi8qKlxuICogU3Bhd24gYSBuZXcgV2ViU29ja2V0IG9yIHJldXNlIGFuIGV4aXN0aW5nIG9uZS5cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcGFyYW0gZXJyb3JDb3VudFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNwYXduID0gKFxuICBzb2NrZXRLZXk6IHN0cmluZyxcbiAgZXJyb3JDb3VudCA9IDAsXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGlmICghaXNTcGF3bmVkKHNvY2tldEtleSkgJiYgIWlzQ29ubmVjdGluZyhzb2NrZXRLZXkpKSB7XG4gICAgLy8gY29uc29sZS5pbmZvKGBTcGF3bmluZyBXZWJTb2NrZXQgJHtzb2NrZXRVcmx9YCk7XG4gICAgc29ja2V0c1tzb2NrZXRLZXldID0gbmV3IFdlYlNvY2tldChzb2NrZXRLZXkpO1xuXG4gICAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRVJBVElPTl9URVJNSU5BVEVELCAoKSA9PiB7XG4gICAgICBzb2NrZXRzW3NvY2tldEtleV0uY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIGV2ZW50cy5vbmNlKEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsICgpID0+IHtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCk7XG4gICAgfSk7XG5cbiAgICBzb2NrZXRzW3NvY2tldEtleV0ub25vcGVuID0gKCkgPT4ge1xuICAgICAgLy8gY29uc29sZS5pbmZvKGBXZWJzb2NrZXQgJHtzb2NrZXRLZXl9IGhhcyBiZWVuIG9wZW5gKTtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVORUQpO1xuICAgIH07XG5cbiAgICBzb2NrZXRzW3NvY2tldEtleV0ub25jbG9zZSA9ICgpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbyhgV2Vic29ja2V0ICR7c29ja2V0S2V5fSBoYXMgYmVlbiBjbG9zZWRgKTtcbiAgICB9O1xuXG4gICAgc29ja2V0c1tzb2NrZXRLZXldLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBpZiAoKytlcnJvckNvdW50IDw9IE1BWF9FUlJPUlMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0ICR7c29ja2V0S2V5fS4gVHJ5aW5nIGFnYWluLiAke2Vycm9yQ291bnR9IC8gJHtNQVhfRVJST1JTfWAsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHNwYXduKHNvY2tldEtleSwgZXJyb3JDb3VudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT05FUlJPUik7XG4gICAgICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgICAgICBuZXcgV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yKFxuICAgICAgICAgICAgYFVuYWJsZSB0byBjb25uZWN0IHRvIFdlYlNvY2tldCAke3NvY2tldEtleX0uYCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gd2FpdEZvckNvbm5lY3Rpb24oc29ja2V0S2V5KVxuICAgIC5hbmRUaGVuKCgpID0+IG9rQXN5bmMoc29ja2V0S2V5KSlcbiAgICAub3JFbHNlKChlcnJvcikgPT4gZXJyQXN5bmMoZXJyb3IpKTtcbn07XG5cbi8qKlxuICogV2FpdCBmb3IgV2ViU29ja2V0IHRvIG9wZW4uIFJldHVybnMgYW4gZXJyb3IgaWYgdG9vIG1hbnkgY29ubmVjdGlvbiBhdHRlbXB0cyBhcmUgbWFkZS5cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3Qgd2FpdEZvckNvbm5lY3Rpb24gPSAoXG4gIHNvY2tldEtleTogc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+XG4gIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghaXNTcGF3bmVkKHNvY2tldEtleSkpIHtcbiAgICAgICAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRU5FRCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXZlbnRzLm9uKEVWRU5ULlNPQ0tFVF9PTkVSUk9SLCAoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgcmV0dXJuIGVuc3VyZUVycm9yKGVycm9yKTtcbiAgICB9LFxuICApO1xuXG4vKipcbiAqIENsb3NlIHRoZSBXZWJTb2NrZXRcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9zZSA9IChzb2NrZXRLZXk6IHN0cmluZyk6IFJlc3VsdEFzeW5jPHN0cmluZywgV2ViU29ja2V0RXJyb3I+ID0+XG4gIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChpc1NwYXduZWQoc29ja2V0S2V5KSkge1xuICAgICAgICBjb25zdCB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZWplY3QobmV3IFdlYlNvY2tldEVycm9yKFwiVW5hYmxlIHRvIGNsb3NlIHRoZSBXZWJTb2NrZXRcIikpO1xuICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgICBzb2NrZXRzW3NvY2tldEtleV0ub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTtcbiAgICAgICAgICByZXNvbHZlKHNvY2tldEtleSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc29ja2V0c1tzb2NrZXRLZXldLmNsb3NlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHNvY2tldEtleSk7XG4gICAgICB9XG4gICAgfSksXG4gICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICk7XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhbiBpbnN0YW5jZSBVUkwgaW4gYSBXZWJTb2NrZXQgVVJMXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVXJsXG4gKiBAcGFyYW0gcGF0aG5hbWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZFNvY2tldFVybCA9IChpbnN0YW5jZVVybDogVVJMLCBwYXRobmFtZTogc3RyaW5nKTogVVJMID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChpbnN0YW5jZVVybCk7XG4gIHVybC5wcm90b2NvbCA9IHVybC5wcm90b2NvbCA9PT0gXCJodHRwOlwiID8gXCJ3czpcIiA6IFwid3NzOlwiO1xuICB1cmwucGF0aG5hbWUgKz0gcGF0aG5hbWU7XG5cbiAgcmV0dXJuIG5ldyBVUkwodXJsLm9yaWdpbiArIHVybC5wYXRobmFtZSk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBkb3dubG9hZCBVUkwgZm9yIHRoZSBzb2NrZXQuIFJldHVybnMgYSBzdHJpbmcgc2luY2UgaXQncyBtb3N0bHkgdXNlZCBhcyBzb2NrZXRzIGtleVxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkU29ja2V0VXJsID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBidWlsZFNvY2tldFVybChcbiAgICBuZXcgVVJMKGx1ZmlGaWxlLnNlcnZlclVybCksXG4gICAgU29ja2V0UGF0aC5ET1dOTE9BRCArIGAvJHtsdWZpRmlsZS5rZXlzLnNlcnZlcn1gLFxuICApLnRvU3RyaW5nKCk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSB1cGxvYWQgVVJMIGZvciB0aGUgc29ja2V0LiBSZXR1cm5zIGEgc3RyaW5nIHNpbmNlIGl0J3MgbW9zdGx5IHVzZWQgYXMgc29ja2V0cyBrZXlcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGxvYWRTb2NrZXRVcmwgPSAobHVmaUZpbGU6IEx1ZmlGaWxlKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGJ1aWxkU29ja2V0VXJsKG5ldyBVUkwobHVmaUZpbGUuc2VydmVyVXJsKSwgU29ja2V0UGF0aC5VUExPQUQpXG4gICAgLnRvU3RyaW5nKCk7XG59O1xuXG4vKipcbiAqIFRyeSB0byBwYXJzZSBhIHN0cmluZyBpbnRvIGEgSlNPTi4gUmV0dXJucyBmYWxzZSBpZiBub3QgcG9zc2libGUuXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IHRyeVBhcnNlSnNvbiA9IChkYXRhOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWRPYmplY3QgPSBKU09OLnBhcnNlKGRhdGEpO1xuXG4gICAgaWYgKHBhcnNlZE9iamVjdCAmJiB0eXBlb2YgcGFyc2VkT2JqZWN0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gcGFyc2VkT2JqZWN0O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKF9lKSB7XG4gICAgLyogZW1wdHkgKi9cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBpcyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGFcbiAqXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSA9IChcbiAgbWVzc2FnZTogU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhLFxuKTogbWVzc2FnZSBpcyBTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhID0+XG4gIHR5cGVvZiBtZXNzYWdlID09PSBcIm9iamVjdFwiICYmIG1lc3NhZ2UgIT09IG51bGwgJiYgIShcIm1zZ1wiIGluIG1lc3NhZ2UpO1xuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnLi9pbmRleC5qcydcblxuZXhwb3J0IHsgRXZlbnRFbWl0dGVyIH1cbmV4cG9ydCBkZWZhdWx0IEV2ZW50RW1pdHRlclxuIiwgImV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcblx0fVxufVxuXG4vKipcbkFuIGVycm9yIHRvIGJlIHRocm93biB3aGVuIHRoZSByZXF1ZXN0IGlzIGFib3J0ZWQgYnkgQWJvcnRDb250cm9sbGVyLlxuRE9NRXhjZXB0aW9uIGlzIHRocm93biBpbnN0ZWFkIG9mIHRoaXMgRXJyb3Igd2hlbiBET01FeGNlcHRpb24gaXMgYXZhaWxhYmxlLlxuKi9cbmV4cG9ydCBjbGFzcyBBYm9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm5hbWUgPSAnQWJvcnRFcnJvcic7XG5cdFx0dGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblx0fVxufVxuXG4vKipcblRPRE86IFJlbW92ZSBBYm9ydEVycm9yIGFuZCBqdXN0IHRocm93IERPTUV4Y2VwdGlvbiB3aGVuIHRhcmdldGluZyBOb2RlIDE4LlxuKi9cbmNvbnN0IGdldERPTUV4Y2VwdGlvbiA9IGVycm9yTWVzc2FnZSA9PiBnbG9iYWxUaGlzLkRPTUV4Y2VwdGlvbiA9PT0gdW5kZWZpbmVkXG5cdD8gbmV3IEFib3J0RXJyb3IoZXJyb3JNZXNzYWdlKVxuXHQ6IG5ldyBET01FeGNlcHRpb24oZXJyb3JNZXNzYWdlKTtcblxuLyoqXG5UT0RPOiBSZW1vdmUgYmVsb3cgZnVuY3Rpb24gYW5kIGp1c3QgJ3JlamVjdChzaWduYWwucmVhc29uKScgd2hlbiB0YXJnZXRpbmcgTm9kZSAxOC5cbiovXG5jb25zdCBnZXRBYm9ydGVkUmVhc29uID0gc2lnbmFsID0+IHtcblx0Y29uc3QgcmVhc29uID0gc2lnbmFsLnJlYXNvbiA9PT0gdW5kZWZpbmVkXG5cdFx0PyBnZXRET01FeGNlcHRpb24oJ1RoaXMgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicpXG5cdFx0OiBzaWduYWwucmVhc29uO1xuXG5cdHJldHVybiByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbiA6IGdldERPTUV4Y2VwdGlvbihyZWFzb24pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcFRpbWVvdXQocHJvbWlzZSwgb3B0aW9ucykge1xuXHRjb25zdCB7XG5cdFx0bWlsbGlzZWNvbmRzLFxuXHRcdGZhbGxiYWNrLFxuXHRcdG1lc3NhZ2UsXG5cdFx0Y3VzdG9tVGltZXJzID0ge3NldFRpbWVvdXQsIGNsZWFyVGltZW91dH0sXG5cdH0gPSBvcHRpb25zO1xuXG5cdGxldCB0aW1lcjtcblxuXHRjb25zdCB3cmFwcGVkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRpZiAodHlwZW9mIG1pbGxpc2Vjb25kcyAhPT0gJ251bWJlcicgfHwgTWF0aC5zaWduKG1pbGxpc2Vjb25kcykgIT09IDEpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYG1pbGxpc2Vjb25kc1xcYCB0byBiZSBhIHBvc2l0aXZlIG51bWJlciwgZ290IFxcYCR7bWlsbGlzZWNvbmRzfVxcYGApO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25zLnNpZ25hbCkge1xuXHRcdFx0Y29uc3Qge3NpZ25hbH0gPSBvcHRpb25zO1xuXHRcdFx0aWYgKHNpZ25hbC5hYm9ydGVkKSB7XG5cdFx0XHRcdHJlamVjdChnZXRBYm9ydGVkUmVhc29uKHNpZ25hbCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG5cdFx0XHRcdHJlamVjdChnZXRBYm9ydGVkUmVhc29uKHNpZ25hbCkpO1xuXHRcdFx0fTtcblxuXHRcdFx0c2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRIYW5kbGVyLCB7b25jZTogdHJ1ZX0pO1xuXG5cdFx0XHRwcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEhhbmRsZXIpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKG1pbGxpc2Vjb25kcyA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB7XG5cdFx0XHRwcm9taXNlLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBXZSBjcmVhdGUgdGhlIGVycm9yIG91dHNpZGUgb2YgYHNldFRpbWVvdXRgIHRvIHByZXNlcnZlIHRoZSBzdGFjayB0cmFjZS5cblx0XHRjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgVGltZW91dEVycm9yKCk7XG5cblx0XHR0aW1lciA9IGN1c3RvbVRpbWVycy5zZXRUaW1lb3V0LmNhbGwodW5kZWZpbmVkLCAoKSA9PiB7XG5cdFx0XHRpZiAoZmFsbGJhY2spIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbGxiYWNrKCkpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgcHJvbWlzZS5jYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0cHJvbWlzZS5jYW5jZWwoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1lc3NhZ2UgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH0gZWxzZSBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0XHRcdHJlamVjdChtZXNzYWdlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRpbWVvdXRFcnJvci5tZXNzYWdlID0gbWVzc2FnZSA/PyBgUHJvbWlzZSB0aW1lZCBvdXQgYWZ0ZXIgJHttaWxsaXNlY29uZHN9IG1pbGxpc2Vjb25kc2A7XG5cdFx0XHRcdHJlamVjdCh0aW1lb3V0RXJyb3IpO1xuXHRcdFx0fVxuXHRcdH0sIG1pbGxpc2Vjb25kcyk7XG5cblx0XHQoYXN5bmMgKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShhd2FpdCBwcm9taXNlKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0fSkoKTtcblx0fSk7XG5cblx0Y29uc3QgY2FuY2VsYWJsZVByb21pc2UgPSB3cmFwcGVkUHJvbWlzZS5maW5hbGx5KCgpID0+IHtcblx0XHRjYW5jZWxhYmxlUHJvbWlzZS5jbGVhcigpO1xuXHR9KTtcblxuXHRjYW5jZWxhYmxlUHJvbWlzZS5jbGVhciA9ICgpID0+IHtcblx0XHRjdXN0b21UaW1lcnMuY2xlYXJUaW1lb3V0LmNhbGwodW5kZWZpbmVkLCB0aW1lcik7XG5cdFx0dGltZXIgPSB1bmRlZmluZWQ7XG5cdH07XG5cblx0cmV0dXJuIGNhbmNlbGFibGVQcm9taXNlO1xufVxuIiwgIi8vIFBvcnQgb2YgbG93ZXJfYm91bmQgZnJvbSBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvYWxnb3JpdGhtL2xvd2VyX2JvdW5kXG4vLyBVc2VkIHRvIGNvbXB1dGUgaW5zZXJ0aW9uIGluZGV4IHRvIGtlZXAgcXVldWUgc29ydGVkIGFmdGVyIGluc2VydGlvblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG93ZXJCb3VuZChhcnJheSwgdmFsdWUsIGNvbXBhcmF0b3IpIHtcbiAgICBsZXQgZmlyc3QgPSAwO1xuICAgIGxldCBjb3VudCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoY291bnQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBNYXRoLnRydW5jKGNvdW50IC8gMik7XG4gICAgICAgIGxldCBpdCA9IGZpcnN0ICsgc3RlcDtcbiAgICAgICAgaWYgKGNvbXBhcmF0b3IoYXJyYXlbaXRdLCB2YWx1ZSkgPD0gMCkge1xuICAgICAgICAgICAgZmlyc3QgPSArK2l0O1xuICAgICAgICAgICAgY291bnQgLT0gc3RlcCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb3VudCA9IHN0ZXA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpcnN0O1xufVxuIiwgImltcG9ydCBsb3dlckJvdW5kIGZyb20gJy4vbG93ZXItYm91bmQuanMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJpb3JpdHlRdWV1ZSB7XG4gICAgI3F1ZXVlID0gW107XG4gICAgZW5xdWV1ZShydW4sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHByaW9yaXR5OiAwLFxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHtcbiAgICAgICAgICAgIHByaW9yaXR5OiBvcHRpb25zLnByaW9yaXR5LFxuICAgICAgICAgICAgcnVuLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5zaXplICYmIHRoaXMuI3F1ZXVlW3RoaXMuc2l6ZSAtIDFdLnByaW9yaXR5ID49IG9wdGlvbnMucHJpb3JpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuI3F1ZXVlLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBsb3dlckJvdW5kKHRoaXMuI3F1ZXVlLCBlbGVtZW50LCAoYSwgYikgPT4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHkpO1xuICAgICAgICB0aGlzLiNxdWV1ZS5zcGxpY2UoaW5kZXgsIDAsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBkZXF1ZXVlKCkge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy4jcXVldWUuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIGl0ZW0/LnJ1bjtcbiAgICB9XG4gICAgZmlsdGVyKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3F1ZXVlLmZpbHRlcigoZWxlbWVudCkgPT4gZWxlbWVudC5wcmlvcml0eSA9PT0gb3B0aW9ucy5wcmlvcml0eSkubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LnJ1bik7XG4gICAgfVxuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcXVldWUubGVuZ3RoO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudGVtaXR0ZXIzJztcbmltcG9ydCBwVGltZW91dCwgeyBUaW1lb3V0RXJyb3IgfSBmcm9tICdwLXRpbWVvdXQnO1xuaW1wb3J0IFByaW9yaXR5UXVldWUgZnJvbSAnLi9wcmlvcml0eS1xdWV1ZS5qcyc7XG4vKipcblByb21pc2UgcXVldWUgd2l0aCBjb25jdXJyZW5jeSBjb250cm9sLlxuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBRdWV1ZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgI2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQ7XG4gICAgI2lzSW50ZXJ2YWxJZ25vcmVkO1xuICAgICNpbnRlcnZhbENvdW50ID0gMDtcbiAgICAjaW50ZXJ2YWxDYXA7XG4gICAgI2ludGVydmFsO1xuICAgICNpbnRlcnZhbEVuZCA9IDA7XG4gICAgI2ludGVydmFsSWQ7XG4gICAgI3RpbWVvdXRJZDtcbiAgICAjcXVldWU7XG4gICAgI3F1ZXVlQ2xhc3M7XG4gICAgI3BlbmRpbmcgPSAwO1xuICAgIC8vIFRoZSBgIWAgaXMgbmVlZGVkIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8zMjE5NFxuICAgICNjb25jdXJyZW5jeTtcbiAgICAjaXNQYXVzZWQ7XG4gICAgI3Rocm93T25UaW1lb3V0O1xuICAgIC8qKlxuICAgIFBlci1vcGVyYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuIE9wZXJhdGlvbnMgZnVsZmlsbCBvbmNlIGB0aW1lb3V0YCBlbGFwc2VzIGlmIHRoZXkgaGF2ZW4ndCBhbHJlYWR5LlxuXG4gICAgQXBwbGllcyB0byBlYWNoIGZ1dHVyZSBvcGVyYXRpb24uXG4gICAgKi9cbiAgICB0aW1lb3V0O1xuICAgIC8vIFRPRE86IFRoZSBgdGhyb3dPblRpbWVvdXRgIG9wdGlvbiBzaG91bGQgYWZmZWN0IHRoZSByZXR1cm4gdHlwZXMgb2YgYGFkZCgpYCBhbmQgYGFkZEFsbCgpYFxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtYXNzZXJ0aW9uc1xuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudDogZmFsc2UsXG4gICAgICAgICAgICBpbnRlcnZhbENhcDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IDAsXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgICAgYXV0b1N0YXJ0OiB0cnVlLFxuICAgICAgICAgICAgcXVldWVDbGFzczogUHJpb3JpdHlRdWV1ZSxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgICAgIGlmICghKHR5cGVvZiBvcHRpb25zLmludGVydmFsQ2FwID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLmludGVydmFsQ2FwID49IDEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBpbnRlcnZhbENhcFxcYCB0byBiZSBhIG51bWJlciBmcm9tIDEgYW5kIHVwLCBnb3QgXFxgJHtvcHRpb25zLmludGVydmFsQ2FwPy50b1N0cmluZygpID8/ICcnfVxcYCAoJHt0eXBlb2Ygb3B0aW9ucy5pbnRlcnZhbENhcH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJ2YWwgPT09IHVuZGVmaW5lZCB8fCAhKE51bWJlci5pc0Zpbml0ZShvcHRpb25zLmludGVydmFsKSAmJiBvcHRpb25zLmludGVydmFsID49IDApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBpbnRlcnZhbFxcYCB0byBiZSBhIGZpbml0ZSBudW1iZXIgPj0gMCwgZ290IFxcYCR7b3B0aW9ucy5pbnRlcnZhbD8udG9TdHJpbmcoKSA/PyAnJ31cXGAgKCR7dHlwZW9mIG9wdGlvbnMuaW50ZXJ2YWx9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQgPSBvcHRpb25zLmNhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQ7XG4gICAgICAgIHRoaXMuI2lzSW50ZXJ2YWxJZ25vcmVkID0gb3B0aW9ucy5pbnRlcnZhbENhcCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IG9wdGlvbnMuaW50ZXJ2YWwgPT09IDA7XG4gICAgICAgIHRoaXMuI2ludGVydmFsQ2FwID0gb3B0aW9ucy5pbnRlcnZhbENhcDtcbiAgICAgICAgdGhpcy4jaW50ZXJ2YWwgPSBvcHRpb25zLmludGVydmFsO1xuICAgICAgICB0aGlzLiNxdWV1ZSA9IG5ldyBvcHRpb25zLnF1ZXVlQ2xhc3MoKTtcbiAgICAgICAgdGhpcy4jcXVldWVDbGFzcyA9IG9wdGlvbnMucXVldWVDbGFzcztcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSA9IG9wdGlvbnMuY29uY3VycmVuY3k7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dDtcbiAgICAgICAgdGhpcy4jdGhyb3dPblRpbWVvdXQgPSBvcHRpb25zLnRocm93T25UaW1lb3V0ID09PSB0cnVlO1xuICAgICAgICB0aGlzLiNpc1BhdXNlZCA9IG9wdGlvbnMuYXV0b1N0YXJ0ID09PSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0ICNkb2VzSW50ZXJ2YWxBbGxvd0Fub3RoZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc0ludGVydmFsSWdub3JlZCB8fCB0aGlzLiNpbnRlcnZhbENvdW50IDwgdGhpcy4jaW50ZXJ2YWxDYXA7XG4gICAgfVxuICAgIGdldCAjZG9lc0NvbmN1cnJlbnRBbGxvd0Fub3RoZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwZW5kaW5nIDwgdGhpcy4jY29uY3VycmVuY3k7XG4gICAgfVxuICAgICNuZXh0KCkge1xuICAgICAgICB0aGlzLiNwZW5kaW5nLS07XG4gICAgICAgIHRoaXMuI3RyeVRvU3RhcnRBbm90aGVyKCk7XG4gICAgICAgIHRoaXMuZW1pdCgnbmV4dCcpO1xuICAgIH1cbiAgICAjb25SZXN1bWVJbnRlcnZhbCgpIHtcbiAgICAgICAgdGhpcy4jb25JbnRlcnZhbCgpO1xuICAgICAgICB0aGlzLiNpbml0aWFsaXplSW50ZXJ2YWxJZk5lZWRlZCgpO1xuICAgICAgICB0aGlzLiN0aW1lb3V0SWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCAjaXNJbnRlcnZhbFBhdXNlZCgpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKHRoaXMuI2ludGVydmFsSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgZGVsYXkgPSB0aGlzLiNpbnRlcnZhbEVuZCAtIG5vdztcbiAgICAgICAgICAgIGlmIChkZWxheSA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBBY3QgYXMgdGhlIGludGVydmFsIHdhcyBkb25lXG4gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZXN1bWUgaXQgaGVyZSBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzdW1lZCBvbiBsaW5lIDE2MFxuICAgICAgICAgICAgICAgIHRoaXMuI2ludGVydmFsQ291bnQgPSAodGhpcy4jY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudCkgPyB0aGlzLiNwZW5kaW5nIDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFjdCBhcyB0aGUgaW50ZXJ2YWwgaXMgcGVuZGluZ1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiN0aW1lb3V0SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiN0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI29uUmVzdW1lSW50ZXJ2YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgICN0cnlUb1N0YXJ0QW5vdGhlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI3F1ZXVlLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFdlIGNhbiBjbGVhciB0aGUgaW50ZXJ2YWwgKFwicGF1c2VcIilcbiAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2UgY2FuIHJlZG8gaXQgbGF0ZXIgKFwicmVzdW1lXCIpXG4gICAgICAgICAgICBpZiAodGhpcy4jaW50ZXJ2YWxJZCkge1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy4jaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNpbnRlcnZhbElkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdlbXB0eScpO1xuICAgICAgICAgICAgaWYgKHRoaXMuI3BlbmRpbmcgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2lkbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuI2lzUGF1c2VkKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5Jbml0aWFsaXplSW50ZXJ2YWwgPSAhdGhpcy4jaXNJbnRlcnZhbFBhdXNlZDtcbiAgICAgICAgICAgIGlmICh0aGlzLiNkb2VzSW50ZXJ2YWxBbGxvd0Fub3RoZXIgJiYgdGhpcy4jZG9lc0NvbmN1cnJlbnRBbGxvd0Fub3RoZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqb2IgPSB0aGlzLiNxdWV1ZS5kZXF1ZXVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFqb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGpvYigpO1xuICAgICAgICAgICAgICAgIGlmIChjYW5Jbml0aWFsaXplSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaW5pdGlhbGl6ZUludGVydmFsSWZOZWVkZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAjaW5pdGlhbGl6ZUludGVydmFsSWZOZWVkZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNpc0ludGVydmFsSWdub3JlZCB8fCB0aGlzLiNpbnRlcnZhbElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4jb25JbnRlcnZhbCgpO1xuICAgICAgICB9LCB0aGlzLiNpbnRlcnZhbCk7XG4gICAgICAgIHRoaXMuI2ludGVydmFsRW5kID0gRGF0ZS5ub3coKSArIHRoaXMuI2ludGVydmFsO1xuICAgIH1cbiAgICAjb25JbnRlcnZhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2ludGVydmFsQ291bnQgPT09IDAgJiYgdGhpcy4jcGVuZGluZyA9PT0gMCAmJiB0aGlzLiNpbnRlcnZhbElkKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuI2ludGVydmFsSWQpO1xuICAgICAgICAgICAgdGhpcy4jaW50ZXJ2YWxJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNpbnRlcnZhbENvdW50ID0gdGhpcy4jY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudCA/IHRoaXMuI3BlbmRpbmcgOiAwO1xuICAgICAgICB0aGlzLiNwcm9jZXNzUXVldWUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgRXhlY3V0ZXMgYWxsIHF1ZXVlZCBmdW5jdGlvbnMgdW50aWwgaXQgcmVhY2hlcyB0aGUgbGltaXQuXG4gICAgKi9cbiAgICAjcHJvY2Vzc1F1ZXVlKCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICAgICAgd2hpbGUgKHRoaXMuI3RyeVRvU3RhcnRBbm90aGVyKCkpIHsgfVxuICAgIH1cbiAgICBnZXQgY29uY3VycmVuY3koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjb25jdXJyZW5jeTtcbiAgICB9XG4gICAgc2V0IGNvbmN1cnJlbmN5KG5ld0NvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmICghKHR5cGVvZiBuZXdDb25jdXJyZW5jeSA9PT0gJ251bWJlcicgJiYgbmV3Q29uY3VycmVuY3kgPj0gMSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYGNvbmN1cnJlbmN5XFxgIHRvIGJlIGEgbnVtYmVyIGZyb20gMSBhbmQgdXAsIGdvdCBcXGAke25ld0NvbmN1cnJlbmN5fVxcYCAoJHt0eXBlb2YgbmV3Q29uY3VycmVuY3l9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2NvbmN1cnJlbmN5ID0gbmV3Q29uY3VycmVuY3k7XG4gICAgICAgIHRoaXMuI3Byb2Nlc3NRdWV1ZSgpO1xuICAgIH1cbiAgICBhc3luYyAjdGhyb3dPbkFib3J0KHNpZ25hbCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKF9yZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB9LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBhZGQoZnVuY3Rpb25fLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgIHRocm93T25UaW1lb3V0OiB0aGlzLiN0aHJvd09uVGltZW91dCxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNxdWV1ZS5lbnF1ZXVlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNwZW5kaW5nKys7XG4gICAgICAgICAgICAgICAgdGhpcy4jaW50ZXJ2YWxDb3VudCsrO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmF0aW9uID0gZnVuY3Rpb25fKHsgc2lnbmFsOiBvcHRpb25zLnNpZ25hbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gcFRpbWVvdXQoUHJvbWlzZS5yZXNvbHZlKG9wZXJhdGlvbiksIHsgbWlsbGlzZWNvbmRzOiBvcHRpb25zLnRpbWVvdXQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBQcm9taXNlLnJhY2UoW29wZXJhdGlvbiwgdGhpcy4jdGhyb3dPbkFib3J0KG9wdGlvbnMuc2lnbmFsKV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2NvbXBsZXRlZCcsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IgJiYgIW9wdGlvbnMudGhyb3dPblRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbmV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdhZGQnKTtcbiAgICAgICAgICAgIHRoaXMuI3RyeVRvU3RhcnRBbm90aGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBhZGRBbGwoZnVuY3Rpb25zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChmdW5jdGlvbnMubWFwKGFzeW5jIChmdW5jdGlvbl8pID0+IHRoaXMuYWRkKGZ1bmN0aW9uXywgb3B0aW9ucykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgU3RhcnQgKG9yIHJlc3VtZSkgZXhlY3V0aW5nIGVucXVldWVkIHRhc2tzIHdpdGhpbiBjb25jdXJyZW5jeSBsaW1pdC4gTm8gbmVlZCB0byBjYWxsIHRoaXMgaWYgcXVldWUgaXMgbm90IHBhdXNlZCAodmlhIGBvcHRpb25zLmF1dG9TdGFydCA9IGZhbHNlYCBvciBieSBgLnBhdXNlKClgIG1ldGhvZC4pXG4gICAgKi9cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLiNpc1BhdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy4jcHJvY2Vzc1F1ZXVlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICBQdXQgcXVldWUgZXhlY3V0aW9uIG9uIGhvbGQuXG4gICAgKi9cbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdGhpcy4jaXNQYXVzZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICBDbGVhciB0aGUgcXVldWUuXG4gICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy4jcXVldWUgPSBuZXcgdGhpcy4jcXVldWVDbGFzcygpO1xuICAgIH1cbiAgICAvKipcbiAgICBDYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBVc2VmdWwgaWYgeW91IGZvciBleGFtcGxlIGFkZCBhZGRpdGlvbmFsIGl0ZW1zIGF0IGEgbGF0ZXIgdGltZS5cblxuICAgIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHNldHRsZXMgd2hlbiB0aGUgcXVldWUgYmVjb21lcyBlbXB0eS5cbiAgICAqL1xuICAgIGFzeW5jIG9uRW1wdHkoKSB7XG4gICAgICAgIC8vIEluc3RhbnRseSByZXNvbHZlIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eVxuICAgICAgICBpZiAodGhpcy4jcXVldWUuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuI29uRXZlbnQoJ2VtcHR5Jyk7XG4gICAgfVxuICAgIC8qKlxuICAgIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHNldHRsZXMgd2hlbiB0aGUgcXVldWUgc2l6ZSBpcyBsZXNzIHRoYW4gdGhlIGdpdmVuIGxpbWl0OiBgcXVldWUuc2l6ZSA8IGxpbWl0YC5cblxuICAgIElmIHlvdSB3YW50IHRvIGF2b2lkIGhhdmluZyB0aGUgcXVldWUgZ3JvdyBiZXlvbmQgYSBjZXJ0YWluIHNpemUgeW91IGNhbiBgYXdhaXQgcXVldWUub25TaXplTGVzc1RoYW4oKWAgYmVmb3JlIGFkZGluZyBhIG5ldyBpdGVtLlxuXG4gICAgTm90ZSB0aGF0IHRoaXMgb25seSBsaW1pdHMgdGhlIG51bWJlciBvZiBpdGVtcyB3YWl0aW5nIHRvIHN0YXJ0LiBUaGVyZSBjb3VsZCBzdGlsbCBiZSB1cCB0byBgY29uY3VycmVuY3lgIGpvYnMgYWxyZWFkeSBydW5uaW5nIHRoYXQgdGhpcyBjYWxsIGRvZXMgbm90IGluY2x1ZGUgaW4gaXRzIGNhbGN1bGF0aW9uLlxuICAgICovXG4gICAgYXN5bmMgb25TaXplTGVzc1RoYW4obGltaXQpIHtcbiAgICAgICAgLy8gSW5zdGFudGx5IHJlc29sdmUgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICBpZiAodGhpcy4jcXVldWUuc2l6ZSA8IGxpbWl0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy4jb25FdmVudCgnbmV4dCcsICgpID0+IHRoaXMuI3F1ZXVlLnNpemUgPCBsaW1pdCk7XG4gICAgfVxuICAgIC8qKlxuICAgIFRoZSBkaWZmZXJlbmNlIHdpdGggYC5vbkVtcHR5YCBpcyB0aGF0IGAub25JZGxlYCBndWFyYW50ZWVzIHRoYXQgYWxsIHdvcmsgZnJvbSB0aGUgcXVldWUgaGFzIGZpbmlzaGVkLiBgLm9uRW1wdHlgIG1lcmVseSBzaWduYWxzIHRoYXQgdGhlIHF1ZXVlIGlzIGVtcHR5LCBidXQgaXQgY291bGQgbWVhbiB0aGF0IHNvbWUgcHJvbWlzZXMgaGF2ZW4ndCBjb21wbGV0ZWQgeWV0LlxuXG4gICAgQHJldHVybnMgQSBwcm9taXNlIHRoYXQgc2V0dGxlcyB3aGVuIHRoZSBxdWV1ZSBiZWNvbWVzIGVtcHR5LCBhbmQgYWxsIHByb21pc2VzIGhhdmUgY29tcGxldGVkOyBgcXVldWUuc2l6ZSA9PT0gMCAmJiBxdWV1ZS5wZW5kaW5nID09PSAwYC5cbiAgICAqL1xuICAgIGFzeW5jIG9uSWRsZSgpIHtcbiAgICAgICAgLy8gSW5zdGFudGx5IHJlc29sdmUgaWYgbm9uZSBwZW5kaW5nIGFuZCBpZiBub3RoaW5nIGVsc2UgaXMgcXVldWVkXG4gICAgICAgIGlmICh0aGlzLiNwZW5kaW5nID09PSAwICYmIHRoaXMuI3F1ZXVlLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLiNvbkV2ZW50KCdpZGxlJyk7XG4gICAgfVxuICAgIGFzeW5jICNvbkV2ZW50KGV2ZW50LCBmaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9mZihldmVudCwgbGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm9uKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICBTaXplIG9mIHRoZSBxdWV1ZSwgdGhlIG51bWJlciBvZiBxdWV1ZWQgaXRlbXMgd2FpdGluZyB0byBydW4uXG4gICAgKi9cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3F1ZXVlLnNpemU7XG4gICAgfVxuICAgIC8qKlxuICAgIFNpemUgb2YgdGhlIHF1ZXVlLCBmaWx0ZXJlZCBieSB0aGUgZ2l2ZW4gb3B0aW9ucy5cblxuICAgIEZvciBleGFtcGxlLCB0aGlzIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIG51bWJlciBvZiBpdGVtcyByZW1haW5pbmcgaW4gdGhlIHF1ZXVlIHdpdGggYSBzcGVjaWZpYyBwcmlvcml0eSBsZXZlbC5cbiAgICAqL1xuICAgIHNpemVCeShvcHRpb25zKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWFycmF5LWNhbGxiYWNrLXJlZmVyZW5jZVxuICAgICAgICByZXR1cm4gdGhpcy4jcXVldWUuZmlsdGVyKG9wdGlvbnMpLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgTnVtYmVyIG9mIHJ1bm5pbmcgaXRlbXMgKG5vIGxvbmdlciBpbiB0aGUgcXVldWUpLlxuICAgICovXG4gICAgZ2V0IHBlbmRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwZW5kaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICBXaGV0aGVyIHRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgcGF1c2VkLlxuICAgICovXG4gICAgZ2V0IGlzUGF1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jaXNQYXVzZWQ7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBldmVudHMsIGluaXQsIHNlbmRGaWxlRXJyb3IsIHVwZGF0ZUZpbGUgfSBmcm9tIFwifi93b3JrZXIvc2hhcmVkLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckFjdGlvbk1lc3NhZ2UgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWFjdGlvbi1tZXNzYWdlLnRzXCI7XG5pbXBvcnQgeyBkb3dubG9hZENodW5rIH0gZnJvbSBcIn4vYXBpL3dlYnNvY2tldC50c1wiO1xuaW1wb3J0IFBRdWV1ZSBmcm9tIFwicC1xdWV1ZVwiO1xuaW1wb3J0IHsgV09SS0VSX0FDVElPTiB9IGZyb20gXCJ+L2VudW0vd29ya2VyLWFjdGlvbi50c1wiO1xuaW1wb3J0IHR5cGUgeyBXZWJTb2NrZXRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtZXJyb3IudHNcIjtcblxuZGVjbGFyZSBjb25zdCBzZWxmOiBXb3JrZXI7XG5cbmNvbnN0IFFVRVVFX0NPTkNVUlJFTkNZX0xJTUlUID0gbmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kgfHwgMTtcbmNvbnN0IHF1ZXVlID0gbmV3IFBRdWV1ZSh7XG4gIGNvbmN1cnJlbmN5OiBRVUVVRV9DT05DVVJSRU5DWV9MSU1JVCxcbn0pO1xubGV0IGl0ZW1zSW5RdWV1ZSA9IDA7XG5sZXQgaXNJbml0aWF0ZWQgPSBmYWxzZTtcbmxldCBpc1BhdXNlZCA9IGZhbHNlO1xuXG5zZWxmLm9ubWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gIGlmICghaXNJbml0aWF0ZWQpIHtcbiAgICBpbml0KCk7XG4gICAgaXNJbml0aWF0ZWQgPSB0cnVlO1xuXG4gICAgZXZlbnRzLm9uY2UoRVZFTlQuRE9XTkxPQURfU1RBUlRFRCwgKCkgPT4ge1xuICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5ET1dOTE9BRF9TVEFSVEVEIH0pO1xuICAgIH0pO1xuXG4gICAgZXZlbnRzLm9uY2UoRVZFTlQuRE9XTkxPQURfQ09NUExFVEUsICgpID0+IHtcbiAgICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuRE9XTkxPQURfQ09NUExFVEUgfSk7XG4gICAgfSk7XG5cbiAgICBldmVudHMub24oRVZFTlQuRklMRV9VUERBVEVELCB1cGRhdGVGaWxlKTtcblxuICAgIGV2ZW50cy5vbihcbiAgICAgIEVWRU5ULkNIVU5LX0RPV05MT0FERUQsXG4gICAgICAoYnVmZmVyOiBBcnJheUJ1ZmZlciwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpdGVtc0luUXVldWUtLTtcblxuICAgICAgICBpZiAoIWlzUGF1c2VkICYmIGl0ZW1zSW5RdWV1ZSA8IFFVRVVFX0NPTkNVUlJFTkNZX0xJTUlUKSB7XG4gICAgICAgICAgcXVldWUuc3RhcnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIGV2ZW50OiBFVkVOVC5DSFVOS19ET1dOTE9BREVELFxuICAgICAgICAgIGNodW5rOiB7IGJ1ZmZlciwgaW5kZXggfSxcbiAgICAgICAgfSwgW2J1ZmZlcl0pO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGEgYXMgV29ya2VyQWN0aW9uTWVzc2FnZTtcblxuICBzd2l0Y2ggKGRhdGEuYWN0aW9uKSB7XG4gICAgY2FzZSBXT1JLRVJfQUNUSU9OLlBBVVNFOlxuICAgICAge1xuICAgICAgICBpc1BhdXNlZCA9IHRydWU7XG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuSk9CX1BBVVNFRCB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBXT1JLRVJfQUNUSU9OLlJFU1VNRTpcbiAgICAgIHtcbiAgICAgICAgaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5KT0JfUkVTVU1FRCB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGRvd25sb2FkKGRhdGEpLm1hcEVycigoZXJyb3IpID0+IHtcbiAgICAgICAgc2VuZEZpbGVFcnJvcihkYXRhLmFyZ3MubHVmaUZpbGUsIGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG59O1xuXG5jb25zdCBkb3dubG9hZCA9IChcbiAgd29ya2VyTWVzc2FnZTogV29ya2VyQWN0aW9uTWVzc2FnZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGNvbnN0IHsgbHVmaUZpbGUgfSA9IHdvcmtlck1lc3NhZ2UuYXJncztcblxuICBldmVudHMub24oRVZFTlQuRE9XTkxPQURfU1RBUlRFRCwgYXN5bmMgKCkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbHVmaUZpbGUudG90YWxDaHVua3M7IGkrKykge1xuICAgICAgaWYgKCFpc1BhdXNlZCAmJiBpdGVtc0luUXVldWUgPCBRVUVVRV9DT05DVVJSRU5DWV9MSU1JVCkge1xuICAgICAgICBxdWV1ZS5zdGFydCgpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBxdWV1ZS5hZGQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBkb3dubG9hZENodW5rKGx1ZmlGaWxlLCBpKTtcblxuICAgICAgICBpdGVtc0luUXVldWUrKztcblxuICAgICAgICBpZiAoaXNQYXVzZWQgfHwgaXRlbXNJblF1ZXVlID09PSBRVUVVRV9DT05DVVJSRU5DWV9MSU1JVCkge1xuICAgICAgICAgIHF1ZXVlLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgaXRlbXNJblF1ZXVlKys7XG5cbiAgcmV0dXJuIGRvd25sb2FkQ2h1bmsobHVmaUZpbGUsIDApO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICIrMUNBQUEsSUFBQUEsR0FBQUMsR0FBQSxDQUFBQyxHQUFBQyxLQUFBLGNBdUJBLElBQUlDLEdBQUksT0FBTyxT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SUFBSSxVQUFVLENBQUMsUUFBUSxTQUFTQyxFQUFFLENBQUMsT0FBT1EsR0FBRyxLQUFLUixFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBU0EsRUFBRSxDQUFDLE9BQU9RLEdBQUcsS0FBS1IsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxJQUFJQSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUVDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRUMsRUFBRUYsRUFBRSxDQUFDLEVBQUVHLEVBQUVGLEVBQUUsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLENBQUMsRUFBRUUsRUFBRSxDQUFDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsSUFBSVQsRUFBRSxFQUFFLElBQU1BLEVBQUVBLElBQUlLLEdBQUdGLEVBQUVILENBQUMsRUFBRUEsR0FBRyxFQUFFLEtBQUtBLEdBQUcsSUFBSUEsQ0FBQyxFQUFFQSxFQUFFLElBQUlDLEVBQUVDLEVBQUUsRUFBRSxDQUFDSixFQUFFRyxDQUFDLEVBQUVBLEdBQUdLLEdBQUcsRUFBRUosRUFBRUcsRUFBRUgsQ0FBQyxHQUFHLEVBQUUsSUFBSU0sRUFBRU4sRUFBRUEsR0FBRyxFQUFFQSxHQUFHLEVBQUVBLEdBQUcsRUFBRUEsR0FBRyxFQUFFTSxFQUFFQSxHQUFHLEVBQUVBLEVBQUUsSUFBSSxHQUFHVixFQUFFRyxDQUFDLEVBQUVPLEVBQUVULEVBQUVTLENBQUMsRUFBRVAsRUFBRU0sRUFBRUosRUFBRUgsRUFBRUcsRUFBRUcsRUFBRUgsRUFBRUYsQ0FBQyxDQUFDLENBQUMsRUFBRVEsRUFBRSxTQUFVRixFQUFFLE1BQVFQLEVBQUUsSUFBTU0sRUFBRSxTQUFVTCxFQUFFTSxFQUFFLElBQU1KLEVBQUVLLENBQUMsRUFBRSxTQUFVQSxFQUFFUixFQUFFLEVBQUUsRUFBRUEsRUFBRUEsSUFBSUosRUFBRUksQ0FBQyxFQUFFQyxDQUFDLEVBQUVNLEVBQUVBLEdBQUcsR0FBR0EsSUFBSSxFQUFFVixFQUFFRyxDQUFDLEVBQUVRLENBQUMsRUFBRUMsRUFBRUEsR0FBRyxHQUFHQSxJQUFJLEVBQUUsSUFBSVQsRUFDbGdCLEVBQUUsRUFBRUEsRUFBRUEsSUFBSUosRUFBRUksQ0FBQyxFQUFFSixFQUFFSSxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDaEQsU0FBU0ksR0FBR1IsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLEdBQU9ELEVBQUUsU0FBTixFQUFhLE1BQU0sSUFBSUYsRUFBSyxVQUFVLFFBQVEsd0JBQXdCLEVBQUUsSUFBSUksRUFBRUgsRUFBRSxFQUFFRSxDQUFDLEVBQUVFLEVBQUVILEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUUsRUFBRUosRUFBRUMsRUFBRSxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVHLEVBQUVMLEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUYsRUFBRUEsRUFBRUMsRUFBRSxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUUsSUFBSUksRUFBRUUsRUFBRUMsRUFBRUMsRUFBRVIsRUFBRSxPQUFPLEVBQUUsRUFBRVMsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFUCxFQUFFUCxFQUFFLEVBQUVFLENBQUMsRUFBRUYsRUFBRU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFQSxFQUFFLENBQUMsRUFBRVEsRUFBRVIsRUFBRSxDQUFDLEVBQUVTLEVBQUVULEVBQUUsQ0FBQyxFQUFFVSxFQUFFVixFQUFFLENBQUMsRUFBRSxJQUFJSyxFQUFFLEVBQUVBLEVBQUVELEVBQUVDLElBQUlMLEVBQUVQ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QUlDLEVBQUVGLEVBQUUsT0FBTyxPQUFBQyxFQUFFQSxFQUFFLEdBQUcsRUFBRUMsR0FBR0QsSUFBSUQsRUFBRUUsRUFBRSxDQUFDLEVBQUVILEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFRSxFQUFFLENBQUMsRUFBRSxZQUFZRCxFQUFFLEVBQUUsQ0FBQyxHQUFVRCxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFQyxFQUFFQyxFQUFFLENBQUMsT0FBWUYsSUFBTCxHQUFPQyxHQUFHQyxFQUFFRCxFQUFFLEVBQUVBLEdBQUcsR0FBR0QsR0FBRyxjQUFjQSxDQUFDLEVBQUUsV0FBVyxTQUFTQSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU1BLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxNQUFNLFNBQVNBLEVBQUVDLEVBQUUsQ0FBQyxHQUFHRixFQUFLLFNBQVMsVUFBVUMsQ0FBQyxJQUFJRCxFQUFLLFNBQVMsVUFBVUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJQyxFQUFFLEVBQUVDLEVBQUUsSUFBSUEsRUFBRSxFQUFFQSxFQUFFSCxFQUFFLE9BQU9HLElBQUlELEdBQUdGLEVBQUVHLENBQUMsRUFBRUYsRUFBRUUsQ0FBQyxFQUFFLE9BQzNlRCxJQURrZixDQUNqZixFQUFFLEVBQUUsU0FBU0YsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQU0sSUFBSkEsRUFBRSxFQUFlRCxJQUFULFNBQWFBLEVBQUUsQ0FBQyxHQUFHLElBQUlGLEVBQUVBLEdBQUcsR0FBR0UsRUFBRSxLQUFLRCxDQUFDLEVBQUVBLEVBQUUsRUFBRSxHQUFPRCxJQUFKLEVBQU0sT0FBT0UsRUFBRSxPQUFPSCxDQUFDLEVBQUUsSUFBSUksRUFBRSxFQUFFQSxFQUFFSixFQUFFLE9BQU9JLElBQUlELEVBQUUsS0FBS0QsRUFBRUYsRUFBRUksQ0FBQyxJQUFJSCxDQUFDLEVBQUVDLEVBQUVGLEVBQUVJLENBQUMsR0FBRyxHQUFHSCxFQUFFLE9BQUFHLEVBQUVKLEVBQUUsT0FBT0EsRUFBRUEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFQSxFQUFFRCxFQUFLLFNBQVMsV0FBV0ssQ0FBQyxFQUFFRCxFQUFFLEtBQUtKLEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFLEdBQUcsR0FBR0MsRUFBRUQsRUFBRUUsRUFBRUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQVNBLENBQUMsRUFBRSxFQUFFLFNBQVNILEVBQUVDLEVBQUUsQ0FBQyxNQUFNLENBQUNELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUQsRUFBRSxDQUFDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRCxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxJQUFJRCxFQUFFLEVBQUVBLEVBQUVELEVBQUUsT0FBTyxFQUFFQyxFQUFFQyxFQUFFRixFQUFFQyxDQUFDLEVBQUVELEVBQUVDLENBQUMsRUFBRUMsSUFBSSxHQUFHQSxJQUFJLEVBQUUsT0FBUUEsRUFBRSxRQUFTLEVBQUVBLEdBQUcsR0FBRyxPQUFPRixDQUFDLENBQUMsRUFDcGRELEVBQUssTUFBTSxXQUFXLENBQUMsU0FBUyxTQUFTQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxHQUFHQyxFQUFFSCxFQUFLLFNBQVMsVUFBVUMsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUEsRUFBRUQsRUFBRSxFQUFFQyxJQUFTLEVBQUFBLEVBQUUsS0FBS0MsRUFBRUosRUFBRUcsRUFBRSxDQUFDLEdBQUdGLEdBQUcsT0FBTyxhQUFhRyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUVBLElBQUksRUFBRSxPQUFPLG1CQUFtQixPQUFPSCxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sU0FBU0QsRUFBRSxDQUFDQSxFQUFFLFNBQVMsbUJBQW1CQSxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFLENBQUMsRUFBRUMsRUFBRUMsRUFBRSxFQUFFLElB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LENBQUMsRUFBRSxPQUFPLFNBQVNBLEVBQUUsQ0FBQyxPQUFPRCxFQUFLLE1BQU0sT0FBTyxPQUFPQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLFNBQVNDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFQSxHQUFHLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLEtBQUssU0FBU0MsRUFBRSxDQUFDLE9BQU8sSUFBSUQsRUFBSyxLQUFLLFNBQVEsT0FBT0MsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUN4Z0JELEVBQUssS0FBSyxPQUFPLFVBQVUsQ0FBQyxVQUFVLElBQUksTUFBTSxVQUFVLENBQUMsWUFBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFTLElBQUksRUFBRSxPQUFPLFNBQVNDLEVBQUUsQ0FBWSxPQUFPQSxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFHLElBQUlDLEVBQUVDLEVBQUUsS0FBSyxFQUFFSCxFQUFLLFNBQVMsT0FBTyxLQUFLLEVBQUVDLENBQUMsRUFBaUQsR0FBL0NDLEVBQUUsS0FBSyxFQUFFRCxFQUFFLEtBQUssRUFBRUMsRUFBRUYsRUFBSyxTQUFTLFVBQVVDLENBQUMsRUFBSyxpQkFBaUJBLEVBQUUsTUFBTSxJQUFJRCxFQUFLLFVBQVUsUUFBUSxxQ0FBcUMsRUFBRSxHQUFpQixPQUFPLFlBQXJCLElBQWlDLENBQUMsSUFBSUksRUFBRSxJQUFJLFlBQVlELENBQUMsRUFBRUUsRUFBRSxFQUFFLElBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVFLEVBQUUsU0FBUyxHQUFHQyxFQUN0ZixJQUFJQSxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxHQUFHLEVBQUVGLEVBQUUsT0FBTyxFQUFFLEdBQUdFLENBQUMsQ0FBQyxLQUFNLEtBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUlGLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFLEtBQUssRUFBRUQsRUFBRUYsRUFBSyxTQUFTLE9BQU9FLEVBQUUsQ0FBQ0YsRUFBSyxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUlDLEVBQUVDLEVBQUUsT0FBTyxFQUFFRCxFQUFFLEdBQUdBLElBQUlDLEVBQUUsS0FBSyxDQUFDLEVBQXlDLElBQXZDQSxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssRUFBRSxVQUFXLENBQUMsRUFBTUEsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQUVBLEVBQUUsUUFBUSxLQUFLLEVBQUVBLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQUssTUFBTSxFQUFTQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBU0YsRUFBRUEsRUFBRSxDQUFDLE1BQU8sYUFBYUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUN6ZixHQUFHLEtBQUssQ0FBQ0EsSUFBSSxFQUFFSCxJQUFJLEtBQUssRUFBRUEsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUVELENBQUMsRUFBRUQsRUFBRSxLQUFLLElBQUlFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUgsRUFBRSxDQUFDLEVBQUVLLEVBQUVMLEVBQUUsQ0FBQyxFQUFFTSxFQUFFTixFQUFFLENBQUMsRUFBRU8sRUFBRVAsRUFBRSxDQUFDLEVBQUVRLEVBQUVSLEVBQUUsQ0FBQyxFQUFFUyxFQUFFVCxFQUFFLENBQUMsRUFBRVUsRUFBRVYsRUFBRSxDQUFDLEVBQUUsSUFBSUgsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUksR0FBR0EsRUFBRUMsRUFBRUYsRUFBRUMsQ0FBQyxHQUFHQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsRUFBRSxFQUFFRSxFQUFFSCxFQUFFQyxFQUFFLEdBQUcsRUFBRSxFQUFFQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsR0FBR0MsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksRUFBRUEsR0FBRyxHQUFHQSxHQUFHLEtBQUtDLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJSCxFQUFFQyxFQUFFLEVBQUUsRUFBRUQsRUFBRUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHQyxFQUFFQSxFQUFFWSxHQUFHSCxJQUFJLEVBQUVBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJRSxFQUFFRixHQUFHQyxFQUFFQyxJQUFJUixFQUFFSixDQUFDLEVBQUVhLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVSLEVBQUUsRUFBRVEsRUFBRUQsRUFBRUEsRUFBRUYsRUFBRUEsRUFBRUQsRUFBRUEsRUFBRUosR0FBR0ssRUFBRUUsRUFBRUMsR0FBR0gsRUFBRUUsS0FBS0YsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksR0FBR0EsR0FBRyxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVFLEVBQ3BmLEVBQUVGLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRUcsRUFBRSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVLLEVBQUUsRUFBRUwsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFTSxFQUFFLEVBQUVOLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRU8sRUFBRSxFQUFFUCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVRLEVBQUUsRUFBRVIsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFUyxFQUFFLEVBQUVULEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRVUsRUFBRSxDQUFDLENBQUMsRUFBRWYsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRUQsRUFBSyxLQUFLLE9BQU8sS0FBSyxTQUFTQyxFQUFFLENBQUMsT0FBTyxJQUFJRCxFQUFLLEtBQUssU0FBUSxPQUFPQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQy9TRCxFQUFLLEtBQUssT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sVUFBVSxDQUFDLFlBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBUyxJQUFJLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQVksT0FBT0EsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFLEtBQUssRUFBRUgsRUFBSyxTQUFTLE9BQU8sS0FBSyxFQUFFQyxDQUFDLEVBQWlELEdBQS9DQyxFQUFFLEtBQUssRUFBRUQsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUssU0FBUyxVQUFVQyxDQUFDLEVBQUssaUJBQWlCQSxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEscUNBQXFDLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDLElBQUlJLEVBQUUsSUFBSSxZQUFZRCxDQUFDLEVBQUVFLEVBQUUsRUFBRSxJQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFRSxFQUFFLFNBQVMsR0FDdGZDLEVBQUUsSUFBSUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsR0FBRyxFQUFFRixFQUFFLE9BQU8sRUFBRSxHQUFHRSxDQUFDLENBQUMsS0FBTSxLQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJRixFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVELEVBQUVGLEVBQUssU0FBUyxPQUFPRSxFQUFFLENBQUNGLEVBQUssU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFQyxFQUFFLE9BQU8sRUFBRUQsRUFBRSxHQUFHQSxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUE2RCxJQUEzREEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUUsVUFBVyxDQUFDLEVBQU1BLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLFFBQVEsS0FBSyxFQUFFQSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFLLE1BQU0sRUFBU0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFDbGYsUUFBUSxPQUFPLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsU0FBUyxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFDcGYsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxPQUFPLFNBQVMsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTQyxFQUFFRCxFQUFFLENBQUMsTUFBTyxnQkFBZUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUUUsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxF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S0FBS0QsQ0FBQyxHQUFPRyxFQUFFLEVBQUVBLEVBQUVDLEVBQUVELElBQUlELEVBQUUsQ0FBQyxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRSxVQUFVRCxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU9ELEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPQSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJRCxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzWUYsRUFBSyxLQUFLLEtBQUssVUFBVSxRQUFRQSxFQUFLLEtBQUssS0FBSyxVQUFVLElBQUksU0FBU0MsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEseUNBQXlDLEVBQUUsWUFBSyxPQUFPQyxDQUFDLEVBQVMsS0FBSyxPQUFPQSxDQUFDLENBQUMsRUFBRUQsRUFBSyxLQUFLLEtBQUssVUFBVSxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUVBLEVBQUssS0FBSyxLQUFLLFVBQVUsT0FBTyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU9BLENBQUMsQ0FBQyxFQUFFRCxFQUFLLEtBQUssS0FBSyxVQUFVLE9BQU8sVUFBVSxDQUFDLElBQUlDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRUEsRUFBRyxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUcsT0FBT0EsQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFLLE1BQU0sRUFBU0EsQ0FBQyxFQUN2ZUQsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFVLEdBQVRGLEVBQUVBLEdBQUcsSUFBTyxFQUFFQyxHQUFHLEVBQUVELEVBQUUsTUFBTSxJQUFJSCxFQUFLLFVBQVUsUUFBUSwwQkFBMEIsRUFBYSxPQUFPQyxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFjLE9BQU9DLEdBQWxCLFdBQXNCQSxFQUFFRixFQUFLLE1BQU0sV0FBVyxPQUFPRSxDQUFDLEdBQUdHLEVBQUVBLEdBQUdMLEVBQUssS0FBSyxLQUFLQyxFQUFFLElBQUlJLEVBQUVKLENBQUMsRUFBRSxJQUFJSyxFQUFFQyxFQUFFQyxFQUFFRSxFQUFFQyxFQUFFLENBQUMsRUFBRUMsRUFBRVosRUFBSyxTQUFTLElBQUlVLEVBQUUsRUFBRSxHQUFHQyxFQUFFLFFBQVFQLEdBQUcsR0FBR00sSUFBSSxDQUFnQyxJQUEvQkwsRUFBRUMsRUFBRUwsRUFBRSxRQUFRVyxFQUFFLE9BQU9WLEVBQUUsQ0FBQ1EsQ0FBQyxDQUFDLENBQUMsRUFBTUgsRUFBRSxFQUFFQSxFQUFFSixFQUFFSSxJQUFJLElBQUlELEVBQUVMLEVBQUUsUUFBUUssQ0FBQyxFQUFFRSxFQUFFLEVBQUVBLEVBQUVGLEVBQUUsT0FBT0UsSUFBSUgsRUFBRUcsQ0FBQyxHQUFHRixFQUFFRSxDQUFDLEVBQUVHLEVBQUVBLEVBQUUsT0FBT04sQ0FBQyxDQUFDLENBQUMsT0FBQUQsSUFBSU8sRUFBRUMsRUFBRSxNQUFNRCxFQUFFUCxDQUFDLEdBQVVPLENBQUMsRUFDbmRYLEVBQUssS0FBSyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSUQsRUFBSyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxHQUFHLE1BQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLEVBQUUsRUFDeldELEVBQUssS0FBSyxVQUFVLENBQUMsWUFBWSxTQUFTQyxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUVBLEVBQUUsS0FBSyxRQUFRRixDQUFDLEVBQUUsSUFBSUcsRUFBRSxHQUFHRCxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUlKLEVBQUssVUFBVSxTQUFTLHdCQUF3QixFQUFFLEdBQUdJLEVBQUUsS0FBSyxFQUFFLENBQUNBLEVBQUUsRUFBRUEsRUFBRSxLQUFLLEdBQUdDLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUUsRUFBRUMsRUFBMkMsSUFBekMsS0FBSyxFQUFFRixFQUFFLENBQUMsRUFBRyxJQUFJLE9BQU0sUUFBUSxFQUFFLEtBQUssR0FBT0UsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUlGLEVBQUUsS0FBSyxXQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJRSxFQUFFLEVBQUVBLEVBQUUsS0FBSyxFQUFFLFNBQVNGLEVBQUVBLEVBQUUsT0FBTyxLQUFLLEVBQUVFLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRUQsR0FBRyxLQUFLLEVBQUVDLENBQUMsRUFBRSxLQUFLLEVBQUVBLENBQUMsRUFBRSxFQUFFSCxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUdHLElBQUlBLElBQUksQ0FDalQsSUFE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QVNDLEVBQUVDLEVBQUUsQ0FBQyxLQUFLLEVBQUVELENBQUMsRUFBRSxLQUFLLElBQUksRUFBRUMsQ0FBQyxFQUFFLG9CQUFvQixTQUFTRCxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVKLENBQUMsRUFBRUssRUFBRSxDQUFDLEVBQUUsSUFBSUYsS0FBS0MsRUFBRUEsRUFBRSxlQUFlRCxDQUFDLEdBQUdDLEVBQUVELENBQUMsSUFBSUYsR0FBR0ksRUFBRSxLQUFLRixDQUFDLEVBQUUsSUFBSUQsRUFBRSxFQUFFQSxFQUFFRyxFQUFFLE9BQU9ILElBQUlDLEVBQUVFLEVBQUVILENBQUMsRUFBRSxPQUFPRSxFQUFFRCxDQUFDLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQ2lELEdBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNwRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxHQUFHLENBQUNELEVBQUVELEVBQUUsR0FBR0EsRUFBRSxTQUFTQSxFQUFFLFNBQVMsRUFBRUUsRUFBRUYsRUFBRSxHQUFHQSxFQUFFLFNBQVNBLEVBQUUsU0FBUyxDQUFDLE1BQVMsQ0FBQ0UsRUFBRUQsRUFBRSxDQUFDLENBQUlBLEdBQUgsR0FBU0MsR0FBSCxHQUFNLEtBQUssV0FBVyxDQUFDRCxFQUFFQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUVrRCxHQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTcEQsRUFBRSxDQUFDQSxFQUN2ZkEsRUFBRSxRQUFRLENBQUMsR0FBR0EsRUFBRSxlQUFlLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQ0EsRUFBRSxPQUFPQSxFQUFFLFFBQVFBLEVBQUUsT0FBT0EsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUVvRCxHQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUNBLEdBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNwRCxFQUFFLENBQXdHLEdBQXZHQSxFQUFFQSxFQUFFLDZCQUE2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LENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUUsSUFBSUEsS0FBS0gsRUFBRUEsRUFBRSxlQUFlRyxDQUFDLEdBQUdILEVBQUVHLENBQUMsSUFBSUYsRUFBRUUsQ0FBQyxJQUFJRCxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsR0FBRyxPQUFPRCxDQUFDLEVBQUUsR0FBRyxTQUFTRixFQUM1ZkMsRUFBRSxDQUFDLElBQUlDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLElBQUlBLEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxJQUFhSCxFQUFFQyxFQUFFRSxDQUFDLENBQUMsSUFBZixTQUFtQkQsRUFBRUQsRUFBRUUsQ0FBQyxDQUFDLEVBQUVILEVBQUVDLEVBQUVFLENBQUMsQ0FBQyxHQUFHLE9BQU9ELENBQUMsQ0FBQyxFQUFFSCxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLEtBQUssR0FBRyxDQUFDLEVBQUVBLEVBQUssS0FBSyxhQUFhLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFSCxFQUFLLEtBQUssR0FBR0ksRUFBRSxPQUFBRixFQUFFQSxHQUFHLENBQUMsRUFBRUUsRUFBRUYsRUFBRSxNQUFNLElBQUlDLEVBQUVBLEVBQUVGLENBQUMsRUFBRUUsRUFBRUYsQ0FBQyxHQUFHLENBQUMsRUFBRUcsRUFBRUQsRUFBRUMsQ0FBQyxFQUFFRCxFQUFFQyxDQUFDLEdBQUcsQ0FBQyxVQUFVRixFQUFFLE1BQU1BLEVBQUUsS0FBSyxPQUFPQSxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUVGLEVBQUssT0FBTyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUVHLEVBQVdELEVBQUUsT0FBWCxPQUFnQkUsRUFBRSxVQUFVRixFQUFFLEtBQUtFLEVBQUVELENBQUMsRUFBRUMsRUFBRUQsQ0FBQyxHQUFHSCxFQUFLLEtBQUssT0FBT0MsRUFBRUUsRUFBRUQsRUFBRSxJQUFJLEVBQVEsQ0FBQyxJQUFJRSxFQUFFRCxDQUFDLEVBQUUs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UUFBU1UsRUFBSSxFQUFHQSxFQUFJRCxFQUFTLFlBQWFDLElBQ3BDLENBQUNiLElBQVlGLEdBQWVILElBQzlCQyxHQUFNLE1BQU0sRUFHZCxNQUFNQSxHQUFNLElBQUksU0FBWSxDQUMxQixNQUFNa0IsR0FBY0YsRUFBVUMsQ0FBQyxFQUUvQmYsTUFFSUUsSUFBWUYsS0FBaUJILEtBQy9CQyxHQUFNLE1BQU0sQ0FFaEIsQ0FBQyxDQUVMLENBQUMsRUFFREUsS0FFT2dCLEdBQWNGLEVBQVUsQ0FBQyxDQUNsQyIsCiAgIm5hbWVzIjogWyJyZXF1aXJlX2V2ZW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlIiLCAiUmVmbGVjdEFwcGx5IiwgInRhcmdldCIsICJyZWNlaXZlciIsICJhcmdzIiwgIlJlZmxlY3RPd25LZXlzIiwgIlByb2Nlc3NFbWl0V2FybmluZyIsICJ3YXJuaW5nIiwgIk51bWJlcklzTmFOIiwgInZhbHVlIiwgIkV2ZW50RW1pdHRlciIsICJvbmNlIiwgImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCAiY2hlY2tMaXN0ZW5lciIsICJsaXN0ZW5lciIsICJhcmciLCAibiIsICJfZ2V0TWF4TGlzdGVuZXJzIiwgInRoYXQiLCAidHlwZSIsICJpIiwgImRvRXJyb3IiLCAiZXZlbnRzIiwgImVyIiwgImVyciIsICJoYW5kbGVyIiwgImxlbiIsICJsaXN0ZW5lcnMiLCAiYXJyYXlDbG9uZSIsICJfYWRkTGlzdGVuZXIiLCAicHJlcGVuZCIsICJtIiwgImV4aXN0aW5nIiwgInciLCAib25jZVdyYXBwZXIiLCAiX29uY2VXcmFwIiwgInN0YXRlIiwgIndyYXBwZWQiLCAibGlzdCIsICJwb3NpdGlvbiIsICJvcmlnaW5hbExpc3RlbmVyIiwgInNwbGljZU9uZSIsICJrZXlzIiwgImtleSIsICJfbGlzdGVuZXJzIiwgInVud3JhcCIsICJldmxpc3RlbmVyIiwgInVud3JhcExpc3RlbmVycyIsICJlbWl0dGVyIiwgImxpc3RlbmVyQ291bnQiLCAiYXJyIiwgImNvcHkiLCAiaW5kZXgiLCAicmV0IiwgIm5hbWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZXJyb3JMaXN0ZW5lciIsICJyZXNvbHZlciIsICJldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIiLCAiYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIiLCAiZmxhZ3MiLCAid3JhcExpc3RlbmVyIiwgInJlcXVpcmVfc2pjbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNqY2wiLCAiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAiZyIsICJoIiwgImFhIiwgImsiLCAibiIsICJsIiwgIm0iLCAicCIsICJ6IiwgIkMiLCAiQiIsICJEIiwgIlAiLCAiZWEiLCAiUSIsICJ0IiwgInIiLCAidSIsICJHIiwgIkUiLCAiSCIsICJGIiwgIlYiLCAiSSIsICJ3IiwgInYiLCAiUiIsICJKIiwgIlMiLCAiSyIsICJXIiwgIkwiLCAicSIsICJ4IiwgInkiLCAiWCIsICJZIiwgIk0iLCAiZmEiLCAiamEiLCAia2EiLCAiZ2EiLCAiYmEiLCAiTiIsICJjYSIsICJPIiwgIlQiLCAiaGEiLCAiaWEiLCAiZGEiLCAiVSIsICJaIiwgInJlcXVpcmVfZXZlbnRlbWl0dGVyMyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImhhcyIsICJwcmVmaXgiLCAiRXZlbnRzIiwgIkVFIiwgImZuIiwgImNvbnRleHQiLCAib25jZSIsICJhZGRMaXN0ZW5lciIsICJlbWl0dGVyIiwgImV2ZW50IiwgImxpc3RlbmVyIiwgImV2dCIsICJjbGVhckV2ZW50IiwgIkV2ZW50RW1pdHRlciIsICJuYW1lcyIsICJldmVudHMiLCAibmFtZSIsICJoYW5kbGVycyIsICJpIiwgImwiLCAiZWUiLCAibGlzdGVuZXJzIiwgImExIiwgImEyIiwgImEzIiwgImE0IiwgImE1IiwgImxlbiIsICJhcmdzIiwgImxlbmd0aCIsICJqIiwgImltcG9ydF9ldmVudHMiLCAiZXZlbnRzIiwgIkV2ZW50RW1pdHRlciIsICJ1cGRhdGVGaWxlIiwgImx1ZmlGaWxlIiwgImFyZ3MiLCAic2VuZEZpbGVFcnJvciIsICJlcnJvciIsICJpbml0IiwgImRlZmF1bHRFcnJvckNvbmZpZyIsICJjcmVhdGVOZXZlclRocm93RXJyb3IiLCAibWVzc2FnZSIsICJyZXN1bHQiLCAiY29uZmlnIiwgImRhdGEiLCAibWF5YmVTdGFjayIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgInZhbHVlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgImUiLCAicmVqZWN0ZWQiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX2F3YWl0IiwgInYiLCAiX19hc3luY0dlbmVyYXRvciIsICJnIiwgInEiLCAidmVyYiIsICJhd2FpdFJldHVybiIsICJmIiwgIm4iLCAiYSIsICJiIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiciIsICJmdWxmaWxsIiwgIl9fYXN5bmNEZWxlZ2F0b3IiLCAicCIsICJfX2FzeW5jVmFsdWVzIiwgImQiLCAiUmVzdWx0QXN5bmMiLCAiX1Jlc3VsdEFzeW5jIiwgInJlcyIsICJwcm9taXNlIiwgIm5ld1Byb21pc2UiLCAidmFsdWUiLCAiT2siLCAiZXJyb3JGbiIsICJlIiwgIkVyciIsICJmbiIsICJhcmdzIiwgIl9fYXdhaXRlciIsICJlcnJvciIsICJhc3luY1Jlc3VsdExpc3QiLCAiY29tYmluZVJlc3VsdEFzeW5jTGlzdCIsICJjb21iaW5lUmVzdWx0QXN5bmNMaXN0V2l0aEFsbEVycm9ycyIsICJmIiwgIm5ld1JlcyIsICJuZXdWYWx1ZSIsICJvayIsICJfZXJyIiwgInQiLCAiX19hc3luY0dlbmVyYXRvciIsICJfX2F3YWl0IiwgIl9fYXN5bmNEZWxlZ2F0b3IiLCAiX19hc3luY1ZhbHVlcyIsICJzdWNjZXNzQ2FsbGJhY2siLCAiZmFpbHVyZUNhbGxiYWNrIiwgInJlc3VsdCIsICJlcnJBc3luYyIsICJva0FzeW5jIiwgImVyciIsICJmcm9tUHJvbWlzZSIsICJmcm9tU2FmZVByb21pc2UiLCAiZnJvbUFzeW5jVGhyb3dhYmxlIiwgImNvbWJpbmVSZXN1bHRMaXN0IiwgInJlc3VsdExpc3QiLCAiYWNjIiwgImxpc3QiLCAiY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzIiwgIlJlc3VsdCIsICJmcm9tVGhyb3dhYmxlIiwgImNvbWJpbmUiLCAiY29tYmluZVdpdGhBbGxFcnJvcnMiLCAiT2siLCAidmFsdWUiLCAiZiIsICJvayIsICJfZiIsICJfdmFsdWUiLCAiUmVzdWx0QXN5bmMiLCAiX3YiLCAiX2VyciIsICJfIiwgImNvbmZpZyIsICJjcmVhdGVOZXZlclRocm93RXJyb3IiLCAiRXJyIiwgImVycm9yIiwgImVyciIsICJlcnJBc3luYyIsICJ2IiwgIl9vayIsICJzZWxmIiwgImZyb21UaHJvd2FibGUiLCAiUmVzdWx0IiwgIkJhc2VFcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiY2F1c2UiLCAiY29udGV4dCIsICJfX3B1YmxpY0ZpZWxkIiwgIldlYlNvY2tldEVycm9yIiwgIkJhc2VFcnJvciIsICJXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IiLCAiV2ViU29ja2V0RXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJlbnN1cmVFcnJvciIsICJ2YWx1ZSIsICJzdHJpbmdpZmllZCIsICJFbmNvZGluZyIsICJjaGFyc2V0IiwgIm5vUGFkZGluZyIsICJhYiIsICJsZW4iLCAidmlldyIsICJyZXMiLCAic3RyIiwgInZpZXdMZW4iLCAiZW5jMSIsICJlbmMyIiwgImVuYzMiLCAiZW5jNCIsICJpIiwgImoiLCAib2JqIiwgIkVuY29kaW5nIiwgIkRlY29kZSIsICJzdHIiLCAib2JqIiwgIm9iaiIsICJFbmNvZGluZyIsICJEZWNvZGUiLCAic3RyIiwgIm9iaiIsICJpbXBvcnRfbHVmaV9zamNsIiwgIkNyeXB0b0Vycm9yIiwgIkJhc2VFcnJvciIsICJEZWNyeXB0aW9uRXJyb3IiLCAiQ3J5cHRvRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJkZWNyeXB0IiwgImtleSIsICJlbmNyeXB0ZWREYXRhIiwgImRhdGEiLCAib2tBc3luYyIsICJEZWNvZGUiLCAic2pjbCIsICJlcnJvciIsICJlcnJBc3luYyIsICJEZWNyeXB0aW9uRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiZGVjcnlwdCIsICJrZXkiLCAiZW5jcnlwdGVkIiwgImltcG9ydEtleSIsICJpbXBvcnRlZEtleSIsICJSZXN1bHRBc3luYyIsICJlcnJvciIsICJEZWNyeXB0aW9uRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiaW1wb3J0S2V5IiwgImtleSIsICJSZXN1bHRBc3luYyIsICJEZWNvZGUiLCAiZXJyb3IiLCAiQ3J5cHRvRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiZGVjcnlwdCIsICJrZXkiLCAidmFsdWUiLCAic29ja2V0cyIsICJNQVhfRVJST1JTIiwgIm9uQ2FuY2VsTWVzc2FnZSIsICJkYXRhIiwgImV2ZW50cyIsICJva0FzeW5jIiwgIm9uRG93bmxvYWRNZXNzYWdlIiwgInJlc3BvbnNlIiwgImx1ZmlGaWxlIiwgInJlc3VsdCIsICJtZXRhZGF0YVN0cmluZyIsICJtZXRhZGF0YSIsICJpc1NlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEiLCAiZGF0YVN0cmluZyIsICJlbmNyeXB0ZWREYXRhIiwgIkRlY29kZSIsICJkZWNyeXB0IiwgImRlY3J5cHRlZFBhcnQiLCAiYnVmZmVyIiwgInVwZGF0ZUZpbGUiLCAiZW5kRG93bmxvYWQiLCAiZXJyb3IiLCAiV2ViU29ja2V0RXJyb3IiLCAiZXJyQXN5bmMiLCAib25VcGxvYWRNZXNzYWdlIiwgIm9uTWVzc2FnZSIsICJlIiwgInRyeVBhcnNlSnNvbiIsICJjYWxsYmFjayIsICJpc0Nvbm5lY3RpbmciLCAic29ja2V0S2V5IiwgImlzU3Bhd25lZCIsICJkb3dubG9hZENodW5rIiwgImx1ZmlGaWxlIiwgImNodW5rTnVtYmVyIiwgIm1lc3NhZ2UiLCAic2VuZE1lc3NhZ2UiLCAiZG93bmxvYWRTb2NrZXRVcmwiLCAiZW5kRG93bmxvYWQiLCAic2VuZE1lc3NhZ2UiLCAic29ja2V0VXJsIiwgImx1ZmlGaWxlIiwgIm1lc3NhZ2UiLCAiaXNTcGF3bmVkIiwgInNvY2tldHMiLCAib2tBc3luYyIsICJzcGF3biIsICJlIiwgIm9uTWVzc2FnZSIsICJzb2NrZXRLZXkiLCAiZXJyb3JDb3VudCIsICJpc0Nvbm5lY3RpbmciLCAiZXZlbnRzIiwgIk1BWF9FUlJPUlMiLCAiZXJyQXN5bmMiLCAiV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIiwgIndhaXRGb3JDb25uZWN0aW9uIiwgImVycm9yIiwgIlJlc3VsdEFzeW5jIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVuc3VyZUVycm9yIiwgImJ1aWxkU29ja2V0VXJsIiwgImluc3RhbmNlVXJsIiwgInBhdGhuYW1lIiwgInVybCIsICJkb3dubG9hZFNvY2tldFVybCIsICJsdWZpRmlsZSIsICJ0cnlQYXJzZUpzb24iLCAiZGF0YSIsICJwYXJzZWRPYmplY3QiLCAiaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhIiwgIm1lc3NhZ2UiLCAiaW1wb3J0X2luZGV4IiwgIlRpbWVvdXRFcnJvciIsICJtZXNzYWdlIiwgIkFib3J0RXJyb3IiLCAiZ2V0RE9NRXhjZXB0aW9uIiwgImVycm9yTWVzc2FnZSIsICJnZXRBYm9ydGVkUmVhc29uIiwgInNpZ25hbCIsICJyZWFzb24iLCAicFRpbWVvdXQiLCAicHJvbWlzZSIsICJvcHRpb25zIiwgIm1pbGxpc2Vjb25kcyIsICJmYWxsYmFjayIsICJjdXN0b21UaW1lcnMiLCAidGltZXIiLCAiY2FuY2VsYWJsZVByb21pc2UiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiYWJvcnRIYW5kbGVyIiwgInRpbWVvdXRFcnJvciIsICJlcnJvciIsICJsb3dlckJvdW5kIiwgImFycmF5IiwgInZhbHVlIiwgImNvbXBhcmF0b3IiLCAiZmlyc3QiLCAiY291bnQiLCAic3RlcCIsICJpdCIsICJfcXVldWUiLCAiUHJpb3JpdHlRdWV1ZSIsICJfX3ByaXZhdGVBZGQiLCAicnVuIiwgIm9wdGlvbnMiLCAiZWxlbWVudCIsICJfX3ByaXZhdGVHZXQiLCAiaW5kZXgiLCAibG93ZXJCb3VuZCIsICJhIiwgImIiLCAiaXRlbSIsICJfY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudCIsICJfaXNJbnRlcnZhbElnbm9yZWQiLCAiX2ludGVydmFsQ291bnQiLCAiX2ludGVydmFsQ2FwIiwgIl9pbnRlcnZhbCIsICJfaW50ZXJ2YWxFbmQiLCAiX2ludGVydmFsSWQiLCAiX3RpbWVvdXRJZCIsICJfcXVldWUiLCAiX3F1ZXVlQ2xhc3MiLCAiX3BlbmRpbmciLCAiX2NvbmN1cnJlbmN5IiwgIl9pc1BhdXNlZCIsICJfdGhyb3dPblRpbWVvdXQiLCAiX1BRdWV1ZV9pbnN0YW5jZXMiLCAiZG9lc0ludGVydmFsQWxsb3dBbm90aGVyX2dldCIsICJkb2VzQ29uY3VycmVudEFsbG93QW5vdGhlcl9nZXQiLCAibmV4dF9mbiIsICJvblJlc3VtZUludGVydmFsX2ZuIiwgImlzSW50ZXJ2YWxQYXVzZWRfZ2V0IiwgInRyeVRvU3RhcnRBbm90aGVyX2ZuIiwgImluaXRpYWxpemVJbnRlcnZhbElmTmVlZGVkX2ZuIiwgIm9uSW50ZXJ2YWxfZm4iLCAicHJvY2Vzc1F1ZXVlX2ZuIiwgInRocm93T25BYm9ydF9mbiIsICJvbkV2ZW50X2ZuIiwgIlBRdWV1ZSIsICJFdmVudEVtaXR0ZXIiLCAib3B0aW9ucyIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJfX3ByaXZhdGVBZGQiLCAiX19wdWJsaWNGaWVsZCIsICJQcmlvcml0eVF1ZXVlIiwgIl9fcHJpdmF0ZVNldCIsICJfX3ByaXZhdGVHZXQiLCAibmV3Q29uY3VycmVuY3kiLCAiX19wcml2YXRlTWV0aG9kIiwgImZ1bmN0aW9uXyIsICJyZXNvbHZlIiwgInJlamVjdCIsICJfX3ByaXZhdGVXcmFwcGVyIiwgIm9wZXJhdGlvbiIsICJwVGltZW91dCIsICJyZXN1bHQiLCAiZXJyb3IiLCAiVGltZW91dEVycm9yIiwgImZ1bmN0aW9ucyIsICJsaW1pdCIsICJub3ciLCAiZGVsYXkiLCAiY2FuSW5pdGlhbGl6ZUludGVydmFsIiwgImpvYiIsICJzaWduYWwiLCAiX3Jlc29sdmUiLCAiZXZlbnQiLCAiZmlsdGVyIiwgImxpc3RlbmVyIiwgIlFVRVVFX0NPTkNVUlJFTkNZX0xJTUlUIiwgInF1ZXVlIiwgIlBRdWV1ZSIsICJpdGVtc0luUXVldWUiLCAiaXNJbml0aWF0ZWQiLCAiaXNQYXVzZWQiLCAiZXZlbnQiLCAiaW5pdCIsICJldmVudHMiLCAidXBkYXRlRmlsZSIsICJidWZmZXIiLCAiaW5kZXgiLCAiZGF0YSIsICJkb3dubG9hZCIsICJlcnJvciIsICJzZW5kRmlsZUVycm9yIiwgIndvcmtlck1lc3NhZ2UiLCAibHVmaUZpbGUiLCAiaSIsICJkb3dubG9hZENodW5rIl0KfQo= diff --git a/themes/default/public/js/worker/encrypt.js b/themes/default/public/js/worker/encrypt.js index cfa1b9e..8f28f8b 100644 --- a/themes/default/public/js/worker/encrypt.js +++ b/themes/default/public/js/worker/encrypt.js @@ -1 +1,2 @@ -var at=Object.create;var Ee=Object.defineProperty;var ft=Object.getOwnPropertyDescriptor;var ut=Object.getOwnPropertyNames;var ht=Object.getPrototypeOf,lt=Object.prototype.hasOwnProperty;var pt=(t,e,r)=>e in t?Ee(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var dt=(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 Ce=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var mt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ut(e))!lt.call(t,o)&&o!==r&&Ee(t,o,{get:()=>e[o],enumerable:!(n=ft(e,o))||n.enumerable});return t};var Se=(t,e,r)=>(r=t!=null?at(ht(t)):{},mt(e||!t||!t.__esModule?Ee(r,"default",{value:t,enumerable:!0}):r,t));var b=(t,e,r)=>pt(t,typeof e!="symbol"?e+"":e,r);var Fe=Ce((Vt,K)=>{"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,o,i=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),o=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=i[r>>>24]<<24^i[r>>16&255]<<16^i[r>>8&255]<<8^i[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],o[e]=4>=t||4>e?r:s[0][i[r>>>24]]^s[1][i[r>>16&255]]^s[2][i[r>>8&255]]^s[3][i[r&255]]};c.cipher.aes.prototype={encrypt:function(t){return Te(this,t,0)},decrypt:function(t){return Te(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],o,i,s,a=[],f=[],u,h,l,m;for(o=0;256>o;o++)f[(a[o]=o<<1^283*(o>>7))^o]=o;for(i=s=0;!r[i];i^=u||1,s=f[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[i]=l,n[l]=i,h=a[o=a[u=a[i]]],m=16843009*h^65537*o^257*u^16843008*i,h=257*a[l]^16843008*l,o=0;4>o;o++)t[o][i]=h=h<<24^h>>>8,e[o][l]=m=m<<24^m>>>8;for(o=0;5>o;o++)t[o]=t[o].slice(0),e[o]=e[o].slice(0)}};function Te(t,e,r){if(e.length!==4)throw new c.exception.invalid("invalid aes block size");var n=t.b[r],o=e[0]^n[0],i=e[r?3:1]^n[1],s=e[2]^n[2];e=e[r?1:3]^n[3];var a,f,u,h=n.length/4-2,l,m=4,p=[0,0,0,0];a=t.w[r],t=a[0];var v=a[1],L=a[2],D=a[3],P=a[4];for(l=0;l>>24]^v[i>>16&255]^L[s>>8&255]^D[e&255]^n[m],f=t[i>>>24]^v[s>>16&255]^L[e>>8&255]^D[o&255]^n[m+1],u=t[s>>>24]^v[e>>16&255]^L[o>>8&255]^D[i&255]^n[m+2],e=t[e>>>24]^v[o>>16&255]^L[i>>8&255]^D[s&255]^n[m+3],m+=4,o=a,i=f,s=u;for(l=0;4>l;l++)p[r?3&-l:l]=P[o>>>24]<<24^P[i>>16&255]<<16^P[s>>8&255]<<8^P[e&255]^n[m++],a=o,o=i,i=s,s=e,e=a;return p}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[o]<<32-e;return o=t.length?t[t.length-1]:0,t=c.bitArray.getPartial(o),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,o;for(n=0;n>>8>>>8>>>8),o<<=8;return decodeURIComponent(escape(e))},toBits:function(t){t=unescape(encodeURIComponent(t));var e=[],r,n=0;for(r=0;r>>o)>>>26),6>o?(s=t[r]<<6-o,o+=26,r++):(s<<=6,o-=6);for(;n.length&3&&!e;)n+="=";return n},toBits:function(t,e){t=t.replace(/\s|=/g,"");var r=[],n,o=0,i=c.codec.base64.S,s=0,a;for(e&&(i=i.substr(0,62)+"-_"),n=0;na)throw new c.exception.invalid("this isn't base64!");26>>o),s=a<<32-o):(o+=6,s^=a<<32-o)}return o&56&&r.push(c.bitArray.partial(o&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(o=!0,n=2;n*n<=r;n++)if(r%n===0){o=!1;break}o&&(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,o=this.g,i=this.b,s=o[0],a=o[1],f=o[2],u=o[3],h=o[4],l=o[5],m=o[6],p=o[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+p+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(m^h&(l^m))+i[e],p=m,m=l,l=h,h=u+r|0,u=f,f=a,a=s,s=r+(a&f^u&(a^f))+(a>>>2^a>>>13^a>>>22^a<<30^a<<19^a<<10)|0;o[0]=o[0]+s|0,o[1]=o[1]+a|0,o[2]=o[2]+f|0,o[3]=o[3]+u|0,o[4]=o[4]+h|0,o[5]=o[5]+l|0,o[6]=o[6]+m|0,o[7]=o[7]+p|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(i=!0,o=2;o*o<=n;o++)if(n%o===0){i=!1;break}i&&(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,o=this.b,i=n[0],s=n[1],a=n[2],f=n[3],u=n[4],h=n[5],l=n[6],m=n[7],p=n[8],v=n[9],L=n[10],D=n[11],P=n[12],ie=n[13],Oe=n[14],se=n[15],w;if(typeof Uint32Array<"u"){w=Array(160);for(var g=0;32>g;g++)w[g]=t[g]}else w=t;var g=i,A=s,G=a,U=f,Y=u,F=h,ye=l,X=m,k=p,x=v,ce=L,$=D,ae=P,q=ie,ve=Oe,Q=se;for(t=0;80>t;t++){if(16>t)e=w[2*t],r=w[2*t+1];else{r=w[2*(t-15)];var y=w[2*(t-15)+1];e=(y<<31|r>>>1)^(y<<24|r>>>8)^r>>>7;var C=(r<<31|y>>>1)^(r<<24|y>>>8)^(r<<25|y>>>7);r=w[2*(t-2)];var S=w[2*(t-2)+1],y=(S<<13|r>>>19)^(r<<3|S>>>29)^r>>>6,S=(r<<13|S>>>19)^(S<<3|r>>>29)^(r<<26|S>>>6),ge=w[2*(t-7)],we=w[2*(t-16)],V=w[2*(t-16)+1];r=C+w[2*(t-7)+1],e=e+ge+(r>>>0>>0?1:0),r+=S,e+=y+(r>>>0>>0?1:0),r+=V,e+=we+(r>>>0>>0?1:0)}w[2*t]=e|=0,w[2*t+1]=r|=0;var ge=k&ce^~k&ae,De=x&$^~x&q,S=g&G^g&Y^G&Y,st=A&U^A&F^U&F,we=(A<<4|g>>>28)^(g<<30|A>>>2)^(g<<25|A>>>7),V=(g<<4|A>>>28)^(A<<30|g>>>2)^(A<<25|g>>>7),ct=o[2*t],ke=o[2*t+1],y=Q+((k<<18|x>>>14)^(k<<14|x>>>18)^(x<<23|k>>>9)),C=ve+((x<<18|k>>>14)^(x<<14|k>>>18)^(k<<23|x>>>9))+(y>>>0>>0?1:0),y=y+De,C=C+(ge+(y>>>0>>0?1:0)),y=y+ke,C=C+(ct+(y>>>0>>0?1:0)),y=y+r|0,C=C+(e+(y>>>0>>0?1:0));r=V+st,e=we+S+(r>>>0>>0?1:0),ve=ae,Q=q,ae=ce,q=$,ce=k,$=x,x=X+y|0,k=ye+C+(x>>>0>>0?1:0)|0,ye=Y,X=F,Y=G,F=U,G=g,U=A,A=y+r|0,g=C+e+(A>>>0>>0?1:0)|0}s=n[1]=s+A|0,n[0]=i+g+(s>>>0>>0?1:0)|0,f=n[3]=f+U|0,n[2]=a+G+(f>>>0>>0?1:0)|0,h=n[5]=h+F|0,n[4]=u+Y+(h>>>0>>0?1:0)|0,m=n[7]=m+X|0,n[6]=l+ye+(m>>>0>>0?1:0)|0,v=n[9]=v+x|0,n[8]=p+k+(v>>>0>>0?1:0)|0,D=n[11]=D+$|0,n[10]=L+ce+(D>>>0<$>>>0?1:0)|0,ie=n[13]=ie+q|0,n[12]=P+ae+(ie>>>0>>0?1:0)|0,se=n[15]=se+Q|0,n[14]=Oe+ve+(se>>>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),-1f)throw new c.exception.invalid("ccm: iv must be at least 7 bytes");for(i=2;4>i&&u>>>8*i;i++);return i<15-f&&(i=15-f),r=a.clamp(r,8*(15-i)),e=c.mode.ccm.U(t,e,r,n,o,i),s=c.mode.ccm.V(t,s,r,e,o,i),a.concat(s.data,s.tag)},decrypt:function(t,e,r,n,o){o=o||64,n=n||[];var i=c.bitArray,s=i.bitLength(r)/8,u=i.bitLength(e),a=i.clamp(e,u-o),f=i.bitSlice(e,u-o),u=(u-o)/8;if(7>s)throw new c.exception.invalid("ccm: iv must be at least 7 bytes");for(e=2;4>e&&u>>>8*e;e++);if(e<15-s&&(e=15-s),r=i.clamp(r,8*(15-e)),a=c.mode.ccm.V(t,a,r,f,o,e),t=c.mode.ccm.U(t,a.data,r,n,o,e),!i.equal(a.tag,t))throw new c.exception.corrupt("ccm: tag doesn't match");return a.data},ma:function(t,e,r,n,o,i){var s=[],a=c.bitArray,f=a.P;if(n=[a.partial(8,(e.length?64:0)|n-2<<2|i-1)],n=a.concat(n,r),n[3]|=o,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;eo||16h&&(c.mode.ccm.da(s/f),h+=l),r[3]++,o=t.encrypt(r),e[s]^=o[0],e[s+1]^=o[1],e[s+2]^=o[2],e[s+3]^=o[3];return{tag:n,data:a.clamp(e,u)}}};c.misc.hmac=function(t,e){this.W=e=e||c.hash.sha256;var r=[[],[]],n,o=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>o&&(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)),o=o||c.misc.hmac,t=new o(t);var i,s,a,f,u=[],h=c.bitArray;for(f=1;32*u.length<(n||1);f++){for(o=i=t.encrypt(h.concat(e,[f])),s=1;ss;s++)o.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=i),this.N++,this.b=c.hash.sha256.hash(this.b.concat(o)),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,i,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,i,t.length]),this.h[s].update(t);break;default:f=1}if(f)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&&Be("seeded",Math.max(this.u,this.i)),Be("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:ee(this,this.la),mouseCollector:ee(this,this.na),keyboardCollector:ee(this,this.ja),accelerometerCollector:ee(this,this.ca),touchCollector:ee(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,o=this.J[t],i=[];for(n in o)o.hasOwnProperty(n)&&o[n]===e&&i.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 ee(t,e){return function(){e.apply(t,arguments)}}c.random=new c.prng(6);e:try{if(he=typeof K<"u"&&K.exports){try{le=dt("crypto")}catch{le=null}he=ue=le}if(he&&ue.randomBytes)te=ue.randomBytes(128),te=new Uint32Array(new Uint8Array(te).buffer),c.random.addEntropy(te,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(re=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(re);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(re);else break e;c.random.addEntropy(re,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 te,ue,re,he,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 o=c.json,i=o.j({iv:c.random.randomWords(4,0)},o.defaults),s;if(o.j(i,r),r=i.adata,typeof i.salt=="string"&&(i.salt=c.codec.base64.toBits(i.salt)),typeof i.iv=="string"&&(i.iv=c.codec.base64.toBits(i.iv)),!c.mode[i.mode]||!c.cipher[i.cipher]||typeof t=="string"&&100>=i.iter||i.ts!==64&&i.ts!==96&&i.ts!==128||i.ks!==128&&i.ks!==192&&i.ks!==256||2>i.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||4{"use strict";var H=typeof Reflect=="object"?Reflect:null,Je=H&&typeof H.apply=="function"?H.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},pe;H&&typeof H.ownKeys=="function"?pe=H.ownKeys:Object.getOwnPropertySymbols?pe=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:pe=function(e){return Object.getOwnPropertyNames(e)};function St(t){console&&console.warn&&console.warn(t)}var Ye=Number.isNaN||function(e){return e!==e};function d(){d.init.call(this)}_e.exports=d;_e.exports.once=jt;d.EventEmitter=d;d.prototype._events=void 0;d.prototype._eventsCount=0;d.prototype._maxListeners=void 0;var Ge=10;function de(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(d,"defaultMaxListeners",{enumerable:!0,get:function(){return Ge},set:function(t){if(typeof t!="number"||t<0||Ye(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Ge=t}});d.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};d.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Ye(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 Xe(t){return t._maxListeners===void 0?d.defaultMaxListeners:t._maxListeners}d.prototype.getMaxListeners=function(){return Xe(this)};d.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 f=i[e];if(f===void 0)return!1;if(typeof f=="function")Je(f,this,r);else for(var u=f.length,h=Ze(f,u),n=0;n0&&s.length>o&&!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,St(a)}return t}d.prototype.addListener=function(e,r){return $e(this,e,r,!1)};d.prototype.on=d.prototype.addListener;d.prototype.prependListener=function(e,r){return $e(this,e,r,!0)};function Rt(){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 qe(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},o=Rt.bind(n);return o.listener=r,n.wrapFn=o,o}d.prototype.once=function(e,r){return de(r),this.on(e,qe(this,e,r)),this};d.prototype.prependOnceListener=function(e,r){return de(r),this.prependListener(e,qe(this,e,r)),this};d.prototype.removeListener=function(e,r){var n,o,i,s,a;if(de(r),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){a=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():Pt(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||r)}return this};d.prototype.off=d.prototype.removeListener;d.prototype.removeAllListeners=function(e){var r,n,o;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 i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,r[o]);return this};function Qe(t,e,r){var n=t._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?r?[o.listener||o]:[o]:r?It(o):Ze(o,o.length)}d.prototype.listeners=function(e){return Qe(this,e,!0)};d.prototype.rawListeners=function(e){return Qe(this,e,!1)};d.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):Ve.call(t,e)};d.prototype.listenerCount=Ve;function Ve(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}d.prototype.eventNames=function(){return this._eventsCount>0?pe(this._events):[]};function Ze(t,e){for(var r=new Array(e),n=0;n>2]+this._charset[(n[i]&3)<<4|n[i+1]>>4]+this._charset[(n[i+1]&15)<<2|n[i+2]>>6]+this._charset[n[i+2]&63];return r%3==2?(o=o.substring(0,o.length-1),this._noPadding||(o+="=")):r%3==1&&(o=o.substring(0,o.length-2),this._noPadding||(o+="==")),o}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),o,i,s,a,f=0,u=0;for(;f>4,n[f++]=(i&15)<<4|s>>2,n[f++]=(s&3)<<6|a;return n.buffer}};var yt=new W("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function Ae(t){return yt.Encode(t)}var vt=new W("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function xe(t){return vt.Decode(t)}var Et={withStackTrace:!1},Ie=(t,e,r=Et)=>{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:o}};function N(t,e,r,n){function o(i){return i instanceof r?i:new r(function(s){s(i)})}return new(r||(r=Promise))(function(i,s){function a(h){try{u(n.next(h))}catch(l){s(l)}}function f(h){try{u(n.throw(h))}catch(l){s(l)}}function u(h){h.done?i(h.value):o(h.value).then(a,f)}u((n=n.apply(t,e||[])).next())})}function Re(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 R(t){return this instanceof R?(this.v=t,this):new R(t)}function Pe(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(p){return function(v){return Promise.resolve(v).then(p,l)}}function a(p,v){n[p]&&(o[p]=function(L){return new Promise(function(D,P){i.push([p,L,D,P])>1||f(p,L)})},v&&(o[p]=v(o[p])))}function f(p,v){try{u(n[p](v))}catch(L){m(i[0][3],L)}}function u(p){p.value instanceof R?Promise.resolve(p.value.v).then(h,l):m(i[0][2],p)}function h(p){f("next",p)}function l(p){f("throw",p)}function m(p,v){p(v),i.shift(),i.length&&f(i[0][0],i[0][1])}}function At(t){var e,r;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=t[o]?function(s){return(r=!r)?{value:R(t[o](s)),done:!1}:i?i(s):s}:i}}function xt(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 Re=="function"?Re(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=t[i]&&function(s){return new Promise(function(a,f){s=t[i](s),o(a,f,s.done,s.value)})}}function o(i,s,a,f){Promise.resolve(f).then(function(u){i({value:u,done:a})},s)}}var E=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new _(n));return new t(r)}static fromPromise(e,r){let n=e.then(o=>new _(o)).catch(o=>new O(r(o)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(N(this,void 0,void 0,function*(){try{return new _(yield e(...n))}catch(o){return new O(r?r(o):o)}}))}static combine(e){return Lt(e)}static combineWithAllErrors(e){return bt(e)}map(e){return new t(this._promise.then(r=>N(this,void 0,void 0,function*(){return r.isErr()?new O(r.error):new _(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>N(this,void 0,void 0,function*(){if(r.isErr())return new O(r.error);let n=yield e(r.value);return n.isErr()?new O(n.error):new _(r.value)})))}andTee(e){return new t(this._promise.then(r=>N(this,void 0,void 0,function*(){if(r.isErr())return new O(r.error);try{yield e(r.value)}catch{}return new _(r.value)})))}mapErr(e){return new t(this._promise.then(r=>N(this,void 0,void 0,function*(){return r.isOk()?new _(r.value):new O(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new O(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>N(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new _(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 Pe(this,arguments,function*(){return yield R(yield R(yield*At(xt(yield R(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return Pe(this,arguments,function*(){let r=yield R(this._promise);return r.isErr()&&(yield yield R(B(r.error))),yield R(r.value)})}},fe=t=>new E(Promise.resolve(new _(t))),B=t=>new E(Promise.resolve(new O(t))),Yt=E.fromPromise,Xt=E.fromSafePromise,$t=E.fromThrowable,je=t=>{let e=T([]);for(let r of t)if(r.isErr()){e=I(r.error);break}else e.map(n=>n.push(r.value));return e},Lt=t=>E.fromSafePromise(Promise.all(t)).andThen(je),Me=t=>{let e=T([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=I([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},bt=t=>E.fromSafePromise(Promise.all(t)).andThen(Me),Le;(function(t){function e(o,i){return(...s)=>{try{let a=o(...s);return T(a)}catch(a){return I(i?i(a):a)}}}t.fromThrowable=e;function r(o){return je(o)}t.combine=r;function n(o){return Me(o)}t.combineWithAllErrors=n})(Le||(Le={}));var T=t=>new _(t);function I(t){return new O(t)}var _=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return T(e(this.value))}mapErr(e){return T(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 T(this.value)}orElse(e){return T(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return E.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 Ie("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},O=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return I(this.error)}mapErr(e){return I(e(this.error))}andThrough(e){return I(this.error)}andTee(e){return I(this.error)}andThen(e){return I(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return B(this.error)}asyncAndThrough(e){return B(this.error)}asyncMap(e){return B(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield I(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw Ie("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},qt=Le.fromThrowable;var Ne=Se(Fe());var M=class extends Error{constructor(r,n={}){let{cause:o,context:i}=n;super(r,{cause:o});b(this,"context");this.name=this.constructor.name,this.context=i}};var j=class extends M{};var z=class extends j{constructor(){super(...arguments);b(this,"message","Unable to encrypt the provided data")}};var ne=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)};var Ke=(t,e)=>{try{let r=Ne.default.encrypt(t,Ae(e));return fe({algo:0,data:r,iv:JSON.parse(r).iv})}catch(r){return B(new z(void 0,{cause:ne(r)}))}};var ze=(t,e)=>kt(t).andThen(r=>{let n=crypto.getRandomValues(new Uint8Array(12));return E.fromPromise(crypto.subtle.encrypt({name:"AES-GCM",iv:n},r,e),o=>new z(void 0,{cause:ne(o)})).andThen(o=>fe({algo:1,data:o,iv:n}))}),kt=t=>E.fromPromise(crypto.subtle.importKey("raw",xe(t),{name:"AES-GCM"},!1,["encrypt","decrypt"]),e=>new j("Unable to import cryptography key",{cause:ne(e)}));var He=(t,e,r)=>r===0?Ke(t,e):ze(t,e);var nt=Se(tt());var rt=new nt.default;var ot=()=>{rt.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),rt.once("OPERATION_FAILED",t=>{self.postMessage({event:"OPERATION_FAILED",error:t})})};var J=class extends M{};var oe=class extends J{constructor(){super(...arguments);b(this,"message","Parameter cannot be undefined")}};var me=class extends J{constructor(){super(...arguments);b(this,"message","File upload already failed")}};var it=!1;self.onmessage=t=>{it||(ot(),it=!0);let{lufiFile:e,chunk:r,algo:n}=t.data.args;r&&typeof n<"u"?e.uploadStatus!==2?He(e.keys.client,r.buffer,n).map(o=>{self.postMessage({encryptedData:o,chunkIndex:r.index},[typeof o.data=="string"?new TextEncoder().encode(o.data):o.data])}).mapErr(o=>{self.postMessage({error:o})}):self.postMessage({error:new me("File upload already failed")}):(r||self.postMessage({error:new oe("chunk buffer cannot be undefined")}),typeof n>"u"&&self.postMessage({error:new oe("algo cannot be undefined")}))}; +var at=Object.create;var Ee=Object.defineProperty;var ft=Object.getOwnPropertyDescriptor;var ut=Object.getOwnPropertyNames;var ht=Object.getPrototypeOf,lt=Object.prototype.hasOwnProperty;var pt=(t,e,r)=>e in t?Ee(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var dt=(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);var mt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ut(e))!lt.call(t,o)&&o!==r&&Ee(t,o,{get:()=>e[o],enumerable:!(n=ft(e,o))||n.enumerable});return t};var Re=(t,e,r)=>(r=t!=null?at(ht(t)):{},mt(e||!t||!t.__esModule?Ee(r,"default",{value:t,enumerable:!0}):r,t));var _=(t,e,r)=>pt(t,typeof e!="symbol"?e+"":e,r);var Fe=ke((Qt,K)=>{"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,o,i=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),o=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=i[r>>>24]<<24^i[r>>16&255]<<16^i[r>>8&255]<<8^i[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],o[e]=4>=t||4>e?r:s[0][i[r>>>24]]^s[1][i[r>>16&255]]^s[2][i[r>>8&255]]^s[3][i[r&255]]};c.cipher.aes.prototype={encrypt:function(t){return Te(this,t,0)},decrypt:function(t){return Te(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],o,i,s,a=[],f=[],u,h,l,m;for(o=0;256>o;o++)f[(a[o]=o<<1^283*(o>>7))^o]=o;for(i=s=0;!r[i];i^=u||1,s=f[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[i]=l,n[l]=i,h=a[o=a[u=a[i]]],m=16843009*h^65537*o^257*u^16843008*i,h=257*a[l]^16843008*l,o=0;4>o;o++)t[o][i]=h=h<<24^h>>>8,e[o][l]=m=m<<24^m>>>8;for(o=0;5>o;o++)t[o]=t[o].slice(0),e[o]=e[o].slice(0)}};function Te(t,e,r){if(e.length!==4)throw new c.exception.invalid("invalid aes block size");var n=t.b[r],o=e[0]^n[0],i=e[r?3:1]^n[1],s=e[2]^n[2];e=e[r?1:3]^n[3];var a,f,u,h=n.length/4-2,l,m=4,p=[0,0,0,0];a=t.w[r],t=a[0];var v=a[1],L=a[2],D=a[3],P=a[4];for(l=0;l>>24]^v[i>>16&255]^L[s>>8&255]^D[e&255]^n[m],f=t[i>>>24]^v[s>>16&255]^L[e>>8&255]^D[o&255]^n[m+1],u=t[s>>>24]^v[e>>16&255]^L[o>>8&255]^D[i&255]^n[m+2],e=t[e>>>24]^v[o>>16&255]^L[i>>8&255]^D[s&255]^n[m+3],m+=4,o=a,i=f,s=u;for(l=0;4>l;l++)p[r?3&-l:l]=P[o>>>24]<<24^P[i>>16&255]<<16^P[s>>8&255]<<8^P[e&255]^n[m++],a=o,o=i,i=s,s=e,e=a;return p}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[o]<<32-e;return o=t.length?t[t.length-1]:0,t=c.bitArray.getPartial(o),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,o;for(n=0;n>>8>>>8>>>8),o<<=8;return decodeURIComponent(escape(e))},toBits:function(t){t=unescape(encodeURIComponent(t));var e=[],r,n=0;for(r=0;r>>o)>>>26),6>o?(s=t[r]<<6-o,o+=26,r++):(s<<=6,o-=6);for(;n.length&3&&!e;)n+="=";return n},toBits:function(t,e){t=t.replace(/\s|=/g,"");var r=[],n,o=0,i=c.codec.base64.S,s=0,a;for(e&&(i=i.substr(0,62)+"-_"),n=0;na)throw new c.exception.invalid("this isn't base64!");26>>o),s=a<<32-o):(o+=6,s^=a<<32-o)}return o&56&&r.push(c.bitArray.partial(o&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(o=!0,n=2;n*n<=r;n++)if(r%n===0){o=!1;break}o&&(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,o=this.g,i=this.b,s=o[0],a=o[1],f=o[2],u=o[3],h=o[4],l=o[5],m=o[6],p=o[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+p+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(m^h&(l^m))+i[e],p=m,m=l,l=h,h=u+r|0,u=f,f=a,a=s,s=r+(a&f^u&(a^f))+(a>>>2^a>>>13^a>>>22^a<<30^a<<19^a<<10)|0;o[0]=o[0]+s|0,o[1]=o[1]+a|0,o[2]=o[2]+f|0,o[3]=o[3]+u|0,o[4]=o[4]+h|0,o[5]=o[5]+l|0,o[6]=o[6]+m|0,o[7]=o[7]+p|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(i=!0,o=2;o*o<=n;o++)if(n%o===0){i=!1;break}i&&(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,o=this.b,i=n[0],s=n[1],a=n[2],f=n[3],u=n[4],h=n[5],l=n[6],m=n[7],p=n[8],v=n[9],L=n[10],D=n[11],P=n[12],ie=n[13],Oe=n[14],se=n[15],w;if(typeof Uint32Array<"u"){w=Array(160);for(var g=0;32>g;g++)w[g]=t[g]}else w=t;var g=i,A=s,G=a,U=f,Y=u,F=h,ye=l,X=m,C=p,x=v,ce=L,$=D,ae=P,V=ie,ve=Oe,q=se;for(t=0;80>t;t++){if(16>t)e=w[2*t],r=w[2*t+1];else{r=w[2*(t-15)];var y=w[2*(t-15)+1];e=(y<<31|r>>>1)^(y<<24|r>>>8)^r>>>7;var k=(r<<31|y>>>1)^(r<<24|y>>>8)^(r<<25|y>>>7);r=w[2*(t-2)];var R=w[2*(t-2)+1],y=(R<<13|r>>>19)^(r<<3|R>>>29)^r>>>6,R=(r<<13|R>>>19)^(R<<3|r>>>29)^(r<<26|R>>>6),ge=w[2*(t-7)],we=w[2*(t-16)],Q=w[2*(t-16)+1];r=k+w[2*(t-7)+1],e=e+ge+(r>>>0>>0?1:0),r+=R,e+=y+(r>>>0>>0?1:0),r+=Q,e+=we+(r>>>0>>0?1:0)}w[2*t]=e|=0,w[2*t+1]=r|=0;var ge=C&ce^~C&ae,De=x&$^~x&V,R=g&G^g&Y^G&Y,st=A&U^A&F^U&F,we=(A<<4|g>>>28)^(g<<30|A>>>2)^(g<<25|A>>>7),Q=(g<<4|A>>>28)^(A<<30|g>>>2)^(A<<25|g>>>7),ct=o[2*t],Ce=o[2*t+1],y=q+((C<<18|x>>>14)^(C<<14|x>>>18)^(x<<23|C>>>9)),k=ve+((x<<18|C>>>14)^(x<<14|C>>>18)^(C<<23|x>>>9))+(y>>>0>>0?1:0),y=y+De,k=k+(ge+(y>>>0>>0?1:0)),y=y+Ce,k=k+(ct+(y>>>0>>0?1:0)),y=y+r|0,k=k+(e+(y>>>0>>0?1:0));r=Q+st,e=we+R+(r>>>0>>0?1:0),ve=ae,q=V,ae=ce,V=$,ce=C,$=x,x=X+y|0,C=ye+k+(x>>>0>>0?1:0)|0,ye=Y,X=F,Y=G,F=U,G=g,U=A,A=y+r|0,g=k+e+(A>>>0>>0?1:0)|0}s=n[1]=s+A|0,n[0]=i+g+(s>>>0>>0?1:0)|0,f=n[3]=f+U|0,n[2]=a+G+(f>>>0>>0?1:0)|0,h=n[5]=h+F|0,n[4]=u+Y+(h>>>0>>0?1:0)|0,m=n[7]=m+X|0,n[6]=l+ye+(m>>>0>>0?1:0)|0,v=n[9]=v+x|0,n[8]=p+C+(v>>>0>>0?1:0)|0,D=n[11]=D+$|0,n[10]=L+ce+(D>>>0<$>>>0?1:0)|0,ie=n[13]=ie+V|0,n[12]=P+ae+(ie>>>0>>0?1:0)|0,se=n[15]=se+q|0,n[14]=Oe+ve+(se>>>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),-1f)throw new c.exception.invalid("ccm: iv must be at least 7 bytes");for(i=2;4>i&&u>>>8*i;i++);return i<15-f&&(i=15-f),r=a.clamp(r,8*(15-i)),e=c.mode.ccm.U(t,e,r,n,o,i),s=c.mode.ccm.V(t,s,r,e,o,i),a.concat(s.data,s.tag)},decrypt:function(t,e,r,n,o){o=o||64,n=n||[];var i=c.bitArray,s=i.bitLength(r)/8,u=i.bitLength(e),a=i.clamp(e,u-o),f=i.bitSlice(e,u-o),u=(u-o)/8;if(7>s)throw new c.exception.invalid("ccm: iv must be at least 7 bytes");for(e=2;4>e&&u>>>8*e;e++);if(e<15-s&&(e=15-s),r=i.clamp(r,8*(15-e)),a=c.mode.ccm.V(t,a,r,f,o,e),t=c.mode.ccm.U(t,a.data,r,n,o,e),!i.equal(a.tag,t))throw new c.exception.corrupt("ccm: tag doesn't match");return a.data},ma:function(t,e,r,n,o,i){var s=[],a=c.bitArray,f=a.P;if(n=[a.partial(8,(e.length?64:0)|n-2<<2|i-1)],n=a.concat(n,r),n[3]|=o,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;eo||16h&&(c.mode.ccm.da(s/f),h+=l),r[3]++,o=t.encrypt(r),e[s]^=o[0],e[s+1]^=o[1],e[s+2]^=o[2],e[s+3]^=o[3];return{tag:n,data:a.clamp(e,u)}}};c.misc.hmac=function(t,e){this.W=e=e||c.hash.sha256;var r=[[],[]],n,o=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>o&&(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)),o=o||c.misc.hmac,t=new o(t);var i,s,a,f,u=[],h=c.bitArray;for(f=1;32*u.length<(n||1);f++){for(o=i=t.encrypt(h.concat(e,[f])),s=1;ss;s++)o.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=i),this.N++,this.b=c.hash.sha256.hash(this.b.concat(o)),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,i,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,i,t.length]),this.h[s].update(t);break;default:f=1}if(f)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&&Be("seeded",Math.max(this.u,this.i)),Be("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:ee(this,this.la),mouseCollector:ee(this,this.na),keyboardCollector:ee(this,this.ja),accelerometerCollector:ee(this,this.ca),touchCollector:ee(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,o=this.J[t],i=[];for(n in o)o.hasOwnProperty(n)&&o[n]===e&&i.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 ee(t,e){return function(){e.apply(t,arguments)}}c.random=new c.prng(6);e:try{if(he=typeof K<"u"&&K.exports){try{le=dt("crypto")}catch{le=null}he=ue=le}if(he&&ue.randomBytes)te=ue.randomBytes(128),te=new Uint32Array(new Uint8Array(te).buffer),c.random.addEntropy(te,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(re=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(re);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(re);else break e;c.random.addEntropy(re,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 te,ue,re,he,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 o=c.json,i=o.j({iv:c.random.randomWords(4,0)},o.defaults),s;if(o.j(i,r),r=i.adata,typeof i.salt=="string"&&(i.salt=c.codec.base64.toBits(i.salt)),typeof i.iv=="string"&&(i.iv=c.codec.base64.toBits(i.iv)),!c.mode[i.mode]||!c.cipher[i.cipher]||typeof t=="string"&&100>=i.iter||i.ts!==64&&i.ts!==96&&i.ts!==128||i.ks!==128&&i.ks!==192&&i.ks!==256||2>i.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||4{"use strict";var z=typeof Reflect=="object"?Reflect:null,Je=z&&typeof z.apply=="function"?z.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},pe;z&&typeof z.ownKeys=="function"?pe=z.ownKeys:Object.getOwnPropertySymbols?pe=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:pe=function(e){return Object.getOwnPropertyNames(e)};function Rt(t){console&&console.warn&&console.warn(t)}var Ye=Number.isNaN||function(e){return e!==e};function d(){d.init.call(this)}be.exports=d;be.exports.once=Mt;d.EventEmitter=d;d.prototype._events=void 0;d.prototype._eventsCount=0;d.prototype._maxListeners=void 0;var Ge=10;function de(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(d,"defaultMaxListeners",{enumerable:!0,get:function(){return Ge},set:function(t){if(typeof t!="number"||t<0||Ye(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Ge=t}});d.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};d.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Ye(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 Xe(t){return t._maxListeners===void 0?d.defaultMaxListeners:t._maxListeners}d.prototype.getMaxListeners=function(){return Xe(this)};d.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 f=i[e];if(f===void 0)return!1;if(typeof f=="function")Je(f,this,r);else for(var u=f.length,h=Ze(f,u),n=0;n0&&s.length>o&&!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,Rt(a)}return t}d.prototype.addListener=function(e,r){return $e(this,e,r,!1)};d.prototype.on=d.prototype.addListener;d.prototype.prependListener=function(e,r){return $e(this,e,r,!0)};function St(){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 Ve(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},o=St.bind(n);return o.listener=r,n.wrapFn=o,o}d.prototype.once=function(e,r){return de(r),this.on(e,Ve(this,e,r)),this};d.prototype.prependOnceListener=function(e,r){return de(r),this.prependListener(e,Ve(this,e,r)),this};d.prototype.removeListener=function(e,r){var n,o,i,s,a;if(de(r),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){a=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():Pt(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||r)}return this};d.prototype.off=d.prototype.removeListener;d.prototype.removeAllListeners=function(e){var r,n,o;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 i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,r[o]);return this};function qe(t,e,r){var n=t._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?r?[o.listener||o]:[o]:r?It(o):Ze(o,o.length)}d.prototype.listeners=function(e){return qe(this,e,!0)};d.prototype.rawListeners=function(e){return qe(this,e,!1)};d.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):Qe.call(t,e)};d.prototype.listenerCount=Qe;function Qe(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}d.prototype.eventNames=function(){return this._eventsCount>0?pe(this._events):[]};function Ze(t,e){for(var r=new Array(e),n=0;n>2]+this._charset[(n[i]&3)<<4|n[i+1]>>4]+this._charset[(n[i+1]&15)<<2|n[i+2]>>6]+this._charset[n[i+2]&63];return r%3==2?(o=o.substring(0,o.length-1),this._noPadding||(o+="=")):r%3==1&&(o=o.substring(0,o.length-2),this._noPadding||(o+="==")),o}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),o,i,s,a,f=0,u=0;for(;f>4,n[f++]=(i&15)<<4|s>>2,n[f++]=(s&3)<<6|a;return n.buffer}};var yt=new W("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function Ae(t){return yt.Encode(t)}var vt=new W("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function xe(t){return vt.Decode(t)}var Et={withStackTrace:!1},Ie=(t,e,r=Et)=>{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:o}};function N(t,e,r,n){function o(i){return i instanceof r?i:new r(function(s){s(i)})}return new(r||(r=Promise))(function(i,s){function a(h){try{u(n.next(h))}catch(l){s(l)}}function f(h){try{u(n.throw(h))}catch(l){s(l)}}function u(h){h.done?i(h.value):o(h.value).then(a,f)}u((n=n.apply(t,e||[])).next())})}function Se(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 S(t){return this instanceof S?(this.v=t,this):new S(t)}function Pe(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(p){return function(v){return Promise.resolve(v).then(p,l)}}function a(p,v){n[p]&&(o[p]=function(L){return new Promise(function(D,P){i.push([p,L,D,P])>1||f(p,L)})},v&&(o[p]=v(o[p])))}function f(p,v){try{u(n[p](v))}catch(L){m(i[0][3],L)}}function u(p){p.value instanceof S?Promise.resolve(p.value.v).then(h,l):m(i[0][2],p)}function h(p){f("next",p)}function l(p){f("throw",p)}function m(p,v){p(v),i.shift(),i.length&&f(i[0][0],i[0][1])}}function At(t){var e,r;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=t[o]?function(s){return(r=!r)?{value:S(t[o](s)),done:!1}:i?i(s):s}:i}}function xt(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 Se=="function"?Se(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=t[i]&&function(s){return new Promise(function(a,f){s=t[i](s),o(a,f,s.done,s.value)})}}function o(i,s,a,f){Promise.resolve(f).then(function(u){i({value:u,done:a})},s)}}var E=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new b(n));return new t(r)}static fromPromise(e,r){let n=e.then(o=>new b(o)).catch(o=>new O(r(o)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(N(this,void 0,void 0,function*(){try{return new b(yield e(...n))}catch(o){return new O(r?r(o):o)}}))}static combine(e){return Lt(e)}static combineWithAllErrors(e){return _t(e)}map(e){return new t(this._promise.then(r=>N(this,void 0,void 0,function*(){return r.isErr()?new O(r.error):new b(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>N(this,void 0,void 0,function*(){if(r.isErr())return new O(r.error);let n=yield e(r.value);return n.isErr()?new O(n.error):new b(r.value)})))}andTee(e){return new t(this._promise.then(r=>N(this,void 0,void 0,function*(){if(r.isErr())return new O(r.error);try{yield e(r.value)}catch{}return new b(r.value)})))}mapErr(e){return new t(this._promise.then(r=>N(this,void 0,void 0,function*(){return r.isOk()?new b(r.value):new O(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new O(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>N(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new b(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 Pe(this,arguments,function*(){return yield S(yield S(yield*At(xt(yield S(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return Pe(this,arguments,function*(){let r=yield S(this._promise);return r.isErr()&&(yield yield S(B(r.error))),yield S(r.value)})}},fe=t=>new E(Promise.resolve(new b(t))),B=t=>new E(Promise.resolve(new O(t))),Yt=E.fromPromise,Xt=E.fromSafePromise,$t=E.fromThrowable,Me=t=>{let e=T([]);for(let r of t)if(r.isErr()){e=I(r.error);break}else e.map(n=>n.push(r.value));return e},Lt=t=>E.fromSafePromise(Promise.all(t)).andThen(Me),je=t=>{let e=T([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=I([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},_t=t=>E.fromSafePromise(Promise.all(t)).andThen(je),Le;(function(t){function e(o,i){return(...s)=>{try{let a=o(...s);return T(a)}catch(a){return I(i?i(a):a)}}}t.fromThrowable=e;function r(o){return Me(o)}t.combine=r;function n(o){return je(o)}t.combineWithAllErrors=n})(Le||(Le={}));var T=t=>new b(t);function I(t){return new O(t)}var b=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return T(e(this.value))}mapErr(e){return T(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 T(this.value)}orElse(e){return T(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return E.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 Ie("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},O=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return I(this.error)}mapErr(e){return I(e(this.error))}andThrough(e){return I(this.error)}andTee(e){return I(this.error)}andThen(e){return I(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return B(this.error)}asyncAndThrough(e){return B(this.error)}asyncMap(e){return B(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield I(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw Ie("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},Vt=Le.fromThrowable;var Ne=Re(Fe());var j=class extends Error{constructor(r,n={}){let{cause:o,context:i}=n;super(r,{cause:o});_(this,"context");this.name=this.constructor.name,this.context=i}};var M=class extends j{};var H=class extends M{constructor(){super(...arguments);_(this,"message","Unable to encrypt the provided data")}};var ne=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)};var Ke=(t,e)=>{try{let r=Ne.default.encrypt(t,Ae(e));return fe({algo:0,data:r,iv:JSON.parse(r).iv})}catch(r){return B(new H(void 0,{cause:ne(r)}))}};var He=(t,e)=>Ct(t).andThen(r=>{let n=crypto.getRandomValues(new Uint8Array(12));return E.fromPromise(crypto.subtle.encrypt({name:"AES-GCM",iv:n},r,e),o=>new H(void 0,{cause:ne(o)})).andThen(o=>fe({algo:1,data:o,iv:n}))}),Ct=t=>E.fromPromise(crypto.subtle.importKey("raw",xe(t),{name:"AES-GCM"},!1,["encrypt","decrypt"]),e=>new M("Unable to import cryptography key",{cause:ne(e)}));var ze=(t,e,r)=>r===0?Ke(t,e):He(t,e);var nt=Re(tt());var rt=new nt.default;var ot=()=>{rt.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),rt.once("OPERATION_FAILED",t=>{self.postMessage({event:"OPERATION_FAILED",error:t})})};var J=class extends j{};var oe=class extends J{constructor(){super(...arguments);_(this,"message","Parameter must be defined")}};var me=class extends J{constructor(){super(...arguments);_(this,"message","File upload already failed")}};var it=!1;self.onmessage=t=>{it||(ot(),it=!0);let{lufiFile:e,chunk:r,algo:n}=t.data.args;r&&typeof n<"u"?e.uploadStatus!==2?ze(e.keys.client,r.buffer,n).map(o=>{self.postMessage({encryptedData:o,chunkIndex:r.index},[typeof o.data=="string"?new TextEncoder().encode(o.data):o.data])}).mapErr(o=>{self.postMessage({error:o})}):self.postMessage({error:new me("File upload already failed")}):(r||self.postMessage({error:new oe("chunk buffer must be defined")}),typeof n>"u"&&self.postMessage({error:new oe("algo must be defined")}))}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2x1Zmktc2pjbEAxLjAuOC9ub2RlX21vZHVsZXMvbHVmaS1zamNsL3NqY2wuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vYXJyYXlidWZmZXItZW5jb2RpbmdAMS4xLjAvbm9kZV9tb2R1bGVzL2FycmF5YnVmZmVyLWVuY29kaW5nL3NyYy9iYXNlNjQvZW5jb2RpbmcudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2FycmF5YnVmZmVyLWVuY29kaW5nQDEuMS4wL25vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci1lbmNvZGluZy9zcmMvYmFzZTY0L3N0YW5kYXJkLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9hcnJheWJ1ZmZlci1lbmNvZGluZ0AxLjEuMC9ub2RlX21vZHVsZXMvYXJyYXlidWZmZXItZW5jb2Rpbmcvc3JjL2Jhc2U2NC91cmwudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL25ldmVydGhyb3dAOC4xLjEvbm9kZV9tb2R1bGVzL25ldmVydGhyb3cvZGlzdC9pbmRleC5lcy5qcyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by9zamNsLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9iYXNlLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50cyIsICIuLi8uLi9zcmMvdXRpbHMudHMiLCAiLi4vLi4vc3JjL2FwaS9jcnlwdG8vd2ViLnRzIiwgIi4uLy4uL3NyYy9hcGkvY3J5cHRvLnRzIiwgIi4uLy4uL3NyYy93b3JrZXIvc2hhcmVkLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93b3JrZXIvd29ya2VyLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93b3JrZXIvd29ya2VyLXVuZGVmaW5lZC1wYXJhbWV0ZXItZXJyb3IudHMiLCAiLi4vLi4vc3JjL2Vycm9yL3dvcmtlci93b3JrZXItdXBsb2FkLWFscmVhZHktZmFpbGVkLWVycm9yLnRzIiwgIi4uLy4uL3NyYy93b3JrZXIvZW5jcnlwdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiXCJ1c2Ugc3RyaWN0XCI7dmFyIHNqY2w9e2NpcGhlcjp7fSxoYXNoOnt9LGtleWV4Y2hhbmdlOnt9LG1vZGU6e30sbWlzYzp7fSxjb2RlYzp7fSxleGNlcHRpb246e2NvcnJ1cHQ6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiQ09SUlVQVDogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0saW52YWxpZDpmdW5jdGlvbihhKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJJTlZBTElEOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfSxidWc6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiQlVHOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfSxub3RSZWFkeTpmdW5jdGlvbihhKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJOT1QgUkVBRFk6IFwiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPWF9fX07XG5zamNsLmNpcGhlci5hZXM9ZnVuY3Rpb24oYSl7dGhpcy53WzBdWzBdWzBdfHx0aGlzLkMoKTt2YXIgYixjLGQsZSxmPXRoaXMud1swXVs0XSxnPXRoaXMud1sxXTtiPWEubGVuZ3RoO3ZhciBoPTE7aWYoNCE9PWImJjYhPT1iJiY4IT09Yil0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgYWVzIGtleSBzaXplXCIpO3RoaXMuYj1bZD1hLnNsaWNlKDApLGU9W11dO2ZvcihhPWI7YTw0KmIrMjg7YSsrKXtjPWRbYS0xXTtpZigwPT09YSVifHw4PT09YiYmND09PWElYiljPWZbYz4+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/ZC5maXJzdFNhbHQ6Yi5zYWx0O2RbY109ZFtjXXx8c2pjbC5taXNjLnBia2RmMihhLGMsYi5pdGVyKTtyZXR1cm57a2V5OmRbY10uc2xpY2UoMCksc2FsdDpjLnNsaWNlKDApfX07XG5cInVuZGVmaW5lZFwiIT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1zamNsKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gc2pjbH0pO1xuIiwgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnID8gUmVmbGVjdCA6IG51bGxcbnZhciBSZWZsZWN0QXBwbHkgPSBSICYmIHR5cGVvZiBSLmFwcGx5ID09PSAnZnVuY3Rpb24nXG4gID8gUi5hcHBseVxuICA6IGZ1bmN0aW9uIFJlZmxlY3RBcHBseSh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpO1xuICB9XG5cbnZhciBSZWZsZWN0T3duS2V5c1xuaWYgKFIgJiYgdHlwZW9mIFIub3duS2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWZsZWN0T3duS2V5cyA9IFIub3duS2V5c1xufSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldClcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NFbWl0V2FybmluZyh3YXJuaW5nKSB7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUud2FybikgY29uc29sZS53YXJuKHdhcm5pbmcpO1xufVxuXG52YXIgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5tb2R1bGUuZXhwb3J0cy5vbmNlID0gb25jZTtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHNDb3VudCA9IDA7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbnZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgbGlzdGVuZXIpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICdkZWZhdWx0TWF4TGlzdGVuZXJzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwIHx8IE51bWJlcklzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIGFyZyArICcuJyk7XG4gICAgfVxuICAgIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSBhcmc7XG4gIH1cbn0pO1xuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICh0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgTnVtYmVySXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBuICsgJy4nKTtcbiAgfVxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICB2YXIgZG9FcnJvciA9ICh0eXBlID09PSAnZXJyb3InKTtcblxuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpXG4gICAgZG9FcnJvciA9IChkb0Vycm9yICYmIGV2ZW50cy5lcnJvciA9PT0gdW5kZWZpbmVkKTtcbiAgZWxzZSBpZiAoIWRvRXJyb3IpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKGRvRXJyb3IpIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMClcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLy8gTm90ZTogVGhlIGNvbW1lbnRzIG9uIHRoZSBgdGhyb3dgIGxpbmVzIGFyZSBpbnRlbnRpb25hbCwgdGhleSBzaG93XG4gICAgICAvLyB1cCBpbiBOb2RlJ3Mgb3V0cHV0IGlmIHRoaXMgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLlxuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgfVxuICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmhhbmRsZWQgZXJyb3IuJyArIChlciA/ICcgKCcgKyBlci5tZXNzYWdlICsgJyknIDogJycpKTtcbiAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgIHRocm93IGVycjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgfVxuXG4gIHZhciBoYW5kbGVyID0gZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFJlZmxlY3RBcHBseShoYW5kbGVyLCB0aGlzLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuID0gaGFuZGxlci5sZW5ndGg7XG4gICAgdmFyIGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlciwgbGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgUmVmbGVjdEFwcGx5KGxpc3RlbmVyc1tpXSwgdGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9hZGRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBwcmVwZW5kKSB7XG4gIHZhciBtO1xuICB2YXIgZXZlbnRzO1xuICB2YXIgZXhpc3Rpbmc7XG5cbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0YXJnZXQuX2V2ZW50c0NvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgICBpZiAoZXZlbnRzLm5ld0xpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldC5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA/IGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gICAgICAvLyBSZS1hc3NpZ24gYGV2ZW50c2AgYmVjYXVzZSBhIG5ld0xpc3RlbmVyIGhhbmRsZXIgY291bGQgaGF2ZSBjYXVzZWQgdGhlXG4gICAgICAvLyB0aGlzLl9ldmVudHMgdG8gYmUgYXNzaWduZWQgdG8gYSBuZXcgb2JqZWN0XG4gICAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgICB9XG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV07XG4gIH1cblxuICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPVxuICAgICAgICBwcmVwZW5kID8gW2xpc3RlbmVyLCBleGlzdGluZ10gOiBbZXhpc3RpbmcsIGxpc3RlbmVyXTtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB9IGVsc2UgaWYgKHByZXBlbmQpIHtcbiAgICAgIGV4aXN0aW5nLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdGluZy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICAgIG0gPSBfZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCk7XG4gICAgaWYgKG0gPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0gJiYgIWV4aXN0aW5nLndhcm5lZCkge1xuICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTtcbiAgICAgIC8vIE5vIGVycm9yIGNvZGUgZm9yIHRoaXMgc2luY2UgaXQgaXMgYSBXYXJuaW5nXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIHZhciB3ID0gbmV3IEVycm9yKCdQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5sZW5ndGggKyAnICcgKyBTdHJpbmcodHlwZSkgKyAnIGxpc3RlbmVycyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlYXNlIGxpbWl0Jyk7XG4gICAgICB3Lm5hbWUgPSAnTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nJztcbiAgICAgIHcuZW1pdHRlciA9IHRhcmdldDtcbiAgICAgIHcudHlwZSA9IHR5cGU7XG4gICAgICB3LmNvdW50ID0gZXhpc3RpbmcubGVuZ3RoO1xuICAgICAgUHJvY2Vzc0VtaXRXYXJuaW5nKHcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgfTtcblxuZnVuY3Rpb24gb25jZVdyYXBwZXIoKSB7XG4gIGlmICghdGhpcy5maXJlZCkge1xuICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSwgdGhpcy53cmFwRm4pO1xuICAgIHRoaXMuZmlyZWQgPSB0cnVlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX29uY2VXcmFwKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIHN0YXRlID0geyBmaXJlZDogZmFsc2UsIHdyYXBGbjogdW5kZWZpbmVkLCB0YXJnZXQ6IHRhcmdldCwgdHlwZTogdHlwZSwgbGlzdGVuZXI6IGxpc3RlbmVyIH07XG4gIHZhciB3cmFwcGVkID0gb25jZVdyYXBwZXIuYmluZChzdGF0ZSk7XG4gIHdyYXBwZWQubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgc3RhdGUud3JhcEZuID0gd3JhcHBlZDtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UodHlwZSwgbGlzdGVuZXIpIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gIHRoaXMub24odHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGxpc3QgPSBldmVudHNbdHlwZV07XG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8IGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwb3NpdGlvbiA9IC0xO1xuXG4gICAgICAgIGZvciAoaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHwgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0W2ldLmxpc3RlbmVyO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAocG9zaXRpb24gPT09IDApXG4gICAgICAgICAgbGlzdC5zaGlmdCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IGxpc3RbMF07XG5cbiAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBvcmlnaW5hbExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMsIGV2ZW50cywgaTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50cyk7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lcnMgPSBldmVudHNbdHlwZV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTElGTyBvcmRlclxuICAgICAgICBmb3IgKGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuZnVuY3Rpb24gX2xpc3RlbmVycyh0YXJnZXQsIHR5cGUsIHVud3JhcCkge1xuICB2YXIgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcbiAgaWYgKGV2bGlzdGVuZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiB1bndyYXAgPyBbZXZsaXN0ZW5lci5saXN0ZW5lciB8fCBldmxpc3RlbmVyXSA6IFtldmxpc3RlbmVyXTtcblxuICByZXR1cm4gdW53cmFwID9cbiAgICB1bndyYXBMaXN0ZW5lcnMoZXZsaXN0ZW5lcikgOiBhcnJheUNsb25lKGV2bGlzdGVuZXIsIGV2bGlzdGVuZXIubGVuZ3RoKTtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCB0cnVlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzID0gZnVuY3Rpb24gcmF3TGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGlzdGVuZXJDb3VudC5jYWxsKGVtaXR0ZXIsIHR5cGUpO1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBsaXN0ZW5lckNvdW50O1xuZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7XG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG5cbiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHJldHVybiB0aGlzLl9ldmVudHNDb3VudCA+IDAgPyBSZWZsZWN0T3duS2V5cyh0aGlzLl9ldmVudHMpIDogW107XG59O1xuXG5mdW5jdGlvbiBhcnJheUNsb25lKGFyciwgbikge1xuICB2YXIgY29weSA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpXG4gICAgY29weVtpXSA9IGFycltpXTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKDsgaW5kZXggKyAxIDwgbGlzdC5sZW5ndGg7IGluZGV4KyspXG4gICAgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07XG4gIGxpc3QucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpIHtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyArK2kpIHtcbiAgICByZXRbaV0gPSBhcnJbaV0ubGlzdGVuZXIgfHwgYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG9uY2UoZW1pdHRlciwgbmFtZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXJyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKG5hbWUsIHJlc29sdmVyKTtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgaWYgKHR5cGVvZiBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCByZXNvbHZlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBlcnJvckxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgaGFuZGxlciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsICdlcnJvcicsIGhhbmRsZXIsIGZsYWdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICBlbWl0dGVyLm9uY2UobmFtZSwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0dGVyLm9uKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEV2ZW50VGFyZ2V0IGRvZXMgbm90IGhhdmUgYGVycm9yYCBldmVudCBzZW1hbnRpY3MgbGlrZSBOb2RlXG4gICAgLy8gRXZlbnRFbWl0dGVycywgd2UgZG8gbm90IGxpc3RlbiBmb3IgYGVycm9yYCBldmVudHMgaGVyZS5cbiAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZnVuY3Rpb24gd3JhcExpc3RlbmVyKGFyZykge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBidWlsdGluIGB7IG9uY2U6IHRydWUgfWAgc3VwcG9ydCBzbyB3ZVxuICAgICAgLy8gaGF2ZSB0byBkbyBpdCBtYW51YWxseS5cbiAgICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXIoYXJnKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJlbWl0dGVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGVtaXR0ZXIpO1xuICB9XG59XG4iLCBudWxsLCBudWxsLCBudWxsLCAiY29uc3QgZGVmYXVsdEVycm9yQ29uZmlnID0ge1xyXG4gICAgd2l0aFN0YWNrVHJhY2U6IGZhbHNlLFxyXG59O1xyXG4vLyBDdXN0b20gZXJyb3Igb2JqZWN0XHJcbi8vIENvbnRleHQgLyBkaXNjdXNzaW9uOiBodHRwczovL2dpdGh1Yi5jb20vc3VwZXJtYWNyby9uZXZlcnRocm93L3B1bGwvMjE1XHJcbmNvbnN0IGNyZWF0ZU5ldmVyVGhyb3dFcnJvciA9IChtZXNzYWdlLCByZXN1bHQsIGNvbmZpZyA9IGRlZmF1bHRFcnJvckNvbmZpZykgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHJlc3VsdC5pc09rKClcclxuICAgICAgICA/IHsgdHlwZTogJ09rJywgdmFsdWU6IHJlc3VsdC52YWx1ZSB9XHJcbiAgICAgICAgOiB7IHR5cGU6ICdFcnInLCB2YWx1ZTogcmVzdWx0LmVycm9yIH07XHJcbiAgICBjb25zdCBtYXliZVN0YWNrID0gY29uZmlnLndpdGhTdGFja1RyYWNlID8gbmV3IEVycm9yKCkuc3RhY2sgOiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICBzdGFjazogbWF5YmVTdGFjayxcclxuICAgIH07XHJcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuY2xhc3MgUmVzdWx0QXN5bmMge1xyXG4gICAgY29uc3RydWN0b3IocmVzKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IHJlcztcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tU2FmZVByb21pc2UocHJvbWlzZSkge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlLnRoZW4oKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21Qcm9taXNlKHByb21pc2UsIGVycm9yRm4pIHtcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gcHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gbmV3IEVycihlcnJvckZuKGUpKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuZXdQcm9taXNlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBzdGF0aWMgZnJvbVRocm93YWJsZShmbiwgZXJyb3JGbikge1xyXG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZm4oLi4uYXJncykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoZXJyb3JGbiA/IGVycm9yRm4oZXJyb3IpIDogZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSkoKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lKGFzeW5jUmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0QXN5bmNMaXN0KGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY29tYmluZVdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzKGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZihyZXMudmFsdWUpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgYW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3UmVzID0geWllbGQgZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAobmV3UmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKG5ld1Jlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRlZSBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSBlcnJvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgbWFwRXJyKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNPaygpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoeWllbGQgZihyZXMuZXJyb3IpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWUgaW5zdGFuY2VvZiBSZXN1bHRBc3luYyA/IG5ld1ZhbHVlLl9wcm9taXNlIDogbmV3VmFsdWU7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLm1hdGNoKG9rLCBfZXJyKSk7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMudW53cmFwT3IodCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gOS4wLjAuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiB1c2UgYHNhZmVUcnlgIHdpdGhvdXQgdGhpcyBtZXRob2QuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogc2FmZVRyeShhc3luYyBmdW5jdGlvbiogKCkge1xyXG4gICAgICogICBjb25zdCBva1ZhbHVlID0geWllbGQqIHlvdXJSZXN1bHRcclxuICAgICAqIH0pXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEVtdWxhdGVzIFJ1c3QncyBgP2Agb3BlcmF0b3IgaW4gYHNhZmVUcnlgJ3MgYm9keS4gU2VlIGFsc28gYHNhZmVUcnlgLlxyXG4gICAgICovXHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIHNhZmVVbndyYXBfMSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQoeWllbGQgX19hd2FpdCh5aWVsZCogX19hc3luY0RlbGVnYXRvcihfX2FzeW5jVmFsdWVzKHlpZWxkIF9fYXdhaXQodGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy5zYWZlVW53cmFwKCkpKSkpKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBNYWtlcyBSZXN1bHRBc3luYyBpbXBsZW1lbnQgUHJvbWlzZUxpa2U8UmVzdWx0PlxyXG4gICAgdGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBfYSgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIF9fYXdhaXQoZXJyQXN5bmMocmVzdWx0LmVycm9yKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBfX2F3YWl0KHJlc3VsdC52YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgb2tBc3luYyA9ICh2YWx1ZSkgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgT2sodmFsdWUpKSk7XHJcbmNvbnN0IGVyckFzeW5jID0gKGVycikgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgRXJyKGVycikpKTtcclxuY29uc3QgZnJvbVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZTtcclxuY29uc3QgZnJvbVNhZmVQcm9taXNlID0gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlO1xyXG5jb25zdCBmcm9tQXN5bmNUaHJvd2FibGUgPSBSZXN1bHRBc3luYy5mcm9tVGhyb3dhYmxlO1xuXG4vKipcclxuICogU2hvcnQgY2lyY3VpdHMgb24gdGhlIEZJUlNUIEVyciB2YWx1ZSB0aGF0IHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0ID0gKHJlc3VsdExpc3QpID0+IHtcclxuICAgIGxldCBhY2MgPSBvayhbXSk7XHJcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFjYy5tYXAoKGxpc3QpID0+IGxpc3QucHVzaChyZXN1bHQudmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjO1xyXG59O1xyXG4vKiBUaGlzIGlzIHRoZSB0eXBlc2FmZSB2ZXJzaW9uIG9mIFByb21pc2UuYWxsXHJcbiAqXHJcbiAqIFRha2VzIGEgbGlzdCBvZiBSZXN1bHRBc3luYzxULCBFPiBhbmQgc3VjY2VzcyBpZiBhbGwgaW5uZXIgcmVzdWx0cyBhcmUgT2sgdmFsdWVzXHJcbiAqIG9yIGZhaWxzIGlmIG9uZSAob3IgbW9yZSkgb2YgdGhlIGlubmVyIHJlc3VsdHMgYXJlIEVyciB2YWx1ZXNcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3QgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdCk7XHJcbi8qKlxyXG4gKiBHaXZlIGEgbGlzdCBvZiBhbGwgdGhlIGVycm9ycyB3ZSBmaW5kXHJcbiAqL1xyXG5jb25zdCBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjLmVycm9yLnB1c2gocmVzdWx0LmVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MgPSBlcnIoW3Jlc3VsdC5lcnJvcl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNPaygpICYmIGFjYy5pc09rKCkpIHtcclxuICAgICAgICAgICAgYWNjLnZhbHVlLnB1c2gocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzRXJyKClcclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzID0gKGFzeW5jUmVzdWx0TGlzdCkgPT4gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlKFByb21pc2UuYWxsKGFzeW5jUmVzdWx0TGlzdCkpLmFuZFRoZW4oY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcclxudmFyIFJlc3VsdDtcclxuKGZ1bmN0aW9uIChSZXN1bHQpIHtcclxuICAgIC8qKlxyXG4gICAgICogV3JhcHMgYSBmdW5jdGlvbiB3aXRoIGEgdHJ5IGNhdGNoLCBjcmVhdGluZyBhIG5ldyBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lXHJcbiAgICAgKiBhcmd1bWVudHMgYnV0IHJldHVybmluZyBgT2tgIGlmIHN1Y2Nlc3NmdWwsIGBFcnJgIGlmIHRoZSBmdW5jdGlvbiB0aHJvd3NcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm4gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIG9rIG9uIHN1Y2Nlc3Mgb3IgZXJyIG9uIGZhaWx1cmVcclxuICAgICAqIEBwYXJhbSBlcnJvckZuIHdoZW4gYW4gZXJyb3IgaXMgdGhyb3duLCB0aGlzIHdpbGwgd3JhcCB0aGUgZXJyb3IgcmVzdWx0IGlmIHByb3ZpZGVkXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBmdW5jdGlvbiBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbiguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvayhyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyKGVycm9yRm4gPyBlcnJvckZuKGUpIDogZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmZyb21UaHJvd2FibGUgPSBmcm9tVGhyb3dhYmxlO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZShyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0KHJlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmNvbWJpbmUgPSBjb21iaW5lO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZVdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZVdpdGhBbGxFcnJvcnMgPSBjb21iaW5lV2l0aEFsbEVycm9ycztcclxufSkoUmVzdWx0IHx8IChSZXN1bHQgPSB7fSkpO1xyXG5jb25zdCBvayA9ICh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKTtcclxuZnVuY3Rpb24gZXJyKGVycikge1xyXG4gICAgcmV0dXJuIG5ldyBFcnIoZXJyKTtcclxufVxyXG5mdW5jdGlvbiBzYWZlVHJ5KGJvZHkpIHtcclxuICAgIGNvbnN0IG4gPSBib2R5KCkubmV4dCgpO1xyXG4gICAgaWYgKG4gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuLnRoZW4oKHIpID0+IHIudmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuLnZhbHVlO1xyXG59XHJcbmNsYXNzIE9rIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlzRXJyKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pc09rKCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBvayhmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcEVycihfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKF92YWx1ZSkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGYodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIFRlZSBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoX2YpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY0FuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFzeW5jQW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSkubWFwKCgpID0+IHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNNYXAoZikge1xyXG4gICAgICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoZih0aGlzLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICB1bndyYXBPcihfdikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWF0Y2gob2ssIF9lcnIpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS15aWVsZCAqL1xyXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXBFcnIoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBFcnJgIG9uIGFuIE9rJywgdGhpcywgY29uZmlnKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcywgcmVxdWlyZS15aWVsZFxyXG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG59XHJcbmNsYXNzIEVyciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgIH1cclxuICAgIGlzT2soKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBlcnIoZih0aGlzLmVycm9yKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jQW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhyb3VnaChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jTWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgdW53cmFwT3Iodikge1xyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG4gICAgbWF0Y2goX29rLCBlcnIpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgc2FmZVVud3JhcCgpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB5aWVsZCBlcnIoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvIG5vdCB1c2UgdGhpcyBnZW5lcmF0b3Igb3V0IG9mIGBzYWZlVHJ5YCcpO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKGNvbmZpZykge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZU5ldmVyVGhyb3dFcnJvcignQ2FsbGVkIGBfdW5zYWZlVW53cmFwYCBvbiBhbiBFcnInLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihfKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3I7XHJcbiAgICB9XHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgeWllbGQgc2VsZjtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgIH1cclxufVxyXG5jb25zdCBmcm9tVGhyb3dhYmxlID0gUmVzdWx0LmZyb21UaHJvd2FibGU7XHJcbi8vI2VuZHJlZ2lvblxuXG5leHBvcnQgeyBFcnIsIE9rLCBSZXN1bHQsIFJlc3VsdEFzeW5jLCBlcnIsIGVyckFzeW5jLCBmcm9tQXN5bmNUaHJvd2FibGUsIGZyb21Qcm9taXNlLCBmcm9tU2FmZVByb21pc2UsIGZyb21UaHJvd2FibGUsIG9rLCBva0FzeW5jLCBzYWZlVHJ5IH07XG4iLCAiaW1wb3J0IHtcbiAgRGVjb2RlIGFzIGI2NGRlY29kZSxcbiAgRW5jb2RlIGFzIGI2NGVuY29kZSxcbn0gZnJvbSBcImFycmF5YnVmZmVyLWVuY29kaW5nL2Jhc2U2NFwiO1xuaW1wb3J0IHsgZXJyQXN5bmMsIG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCBzamNsIGZyb20gXCJsdWZpLXNqY2xcIjtcbmltcG9ydCB7IENyeXB0b0FsZ29yaXRobSB9IGZyb20gXCJ+L2VudW0vY3J5cHRvLWFsZ29yaXRobS50c1wiO1xuaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBEZWNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgRW5jcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2VuY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IHR5cGUgRW5jcnlwdGVkRGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9lbmNyeXB0ZWQtZGF0YS50c1wiO1xuaW1wb3J0IHsgZW5zdXJlRXJyb3IgfSBmcm9tIFwifi91dGlscy50c1wiO1xuaW1wb3J0IHsgSGFzaGluZ0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2hhc2hpbmctZXJyb3IudHNcIjtcblxuLyoqXG4gKiBEZWNyeXB0IGFuIEVuY3J5cHRlZERhdGEgb3IgYSBzdHJpbmcgdXNpbmcgdGhlIGtleSB1c2VkIGZvciBlbmNyeXB0aW9uLlxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBlbmNyeXB0ZWREYXRhXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZGVjcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIGVuY3J5cHRlZERhdGE6IEVuY3J5cHRlZERhdGEgfCBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxBcnJheUJ1ZmZlciwgRGVjcnlwdGlvbkVycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IHR5cGVvZiBlbmNyeXB0ZWREYXRhID09PSBcInN0cmluZ1wiXG4gICAgICA/IGVuY3J5cHRlZERhdGFcbiAgICAgIDogKGVuY3J5cHRlZERhdGEuZGF0YSk7XG5cbiAgICByZXR1cm4gb2tBc3luYyhiNjRkZWNvZGUoc2pjbC5kZWNyeXB0KGtleSwgZGF0YSkpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICBuZXcgRGVjcnlwdGlvbkVycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICAgICk7XG4gIH1cbn07XG5cbi8qKlxuICogRW5jcnlwdCBhbiBBcnJheUJ1ZmZlciBpbnRvIGFuIEVuY3J5cHRlZERhdGEgdXNpbmcgdGhlIHByb3ZpZGVkIGtleVxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogQXJyYXlCdWZmZXIsXG4pOiBSZXN1bHRBc3luYzxFbmNyeXB0ZWREYXRhLCBFbmNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSBzamNsLmVuY3J5cHQoa2V5LCBiNjRlbmNvZGUodmFsdWUpKTtcblxuICAgIHJldHVybiBva0FzeW5jKHtcbiAgICAgIGFsZ286IENyeXB0b0FsZ29yaXRobS5TamNsLFxuICAgICAgZGF0YTogZW5jcnlwdGVkLFxuICAgICAgaXY6IEpTT04ucGFyc2UoZW5jcnlwdGVkIGFzIHVua25vd24gYXMgc3RyaW5nKS5pdixcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICBuZXcgRW5jcnlwdGlvbkVycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICAgICk7XG4gIH1cbn07XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gc3RyaW5nIHVzaW5nIFNqY2wgQVBJXG4gKlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlS2V5ID0gKCk6IFJlc3VsdEFzeW5jPHN0cmluZywgQ3J5cHRvRXJyb3I+ID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gb2tBc3luYyhzamNsLmNvZGVjLmJhc2U2NC5mcm9tQml0cyhzamNsLnJhbmRvbS5yYW5kb21Xb3Jkcyg4LCAxMCkpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICBuZXcgQ3J5cHRvRXJyb3IoXCJVbmFibGUgdG8gZ2VuZXJhdGUga2V5XCIsIHtcbiAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn07XG5cbi8qKlxuICogSGFzaCBhIHBhc3N3b3JkIHVzaW5nIFNqY2wgQVBJXG4gKlxuICogQHBhcmFtIHBhc3N3b3JkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaGFzaFBhc3N3b3JkID0gKFxuICBwYXNzd29yZDogc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBIYXNoaW5nRXJyb3I+ID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gb2tBc3luYyhzamNsLmNvZGVjLmhleC5mcm9tQml0cyhzamNsLmhhc2guc2hhNTEyLmhhc2gocGFzc3dvcmQpKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKG5ldyBIYXNoaW5nRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSkpO1xuICB9XG59O1xuXG4vKipcbiAqIERldGVjdCBpZiB0aGUga2V5IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBTamNsLiBTaW5jZSB3ZSdyZSBub3QgZ2VuZXJhdGluZyBhbiBlcXVhbCBzeW1ib2wgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIHdpdGggdGhlIFdlYkNyeXB0byBBUEkgKGJ5IHVzaW5nIGJhc2U2NHVybCksIGl0J3MgZWFzeSB0byBkZXRlY3RcbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNTamNsS2V5ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBrZXlba2V5Lmxlbmd0aCAtIDFdID09PSBcIj1cIjtcbn07XG4iLCAidHlwZSBKc29uYWJsZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IG51bGxcbiAgfCB1bmRlZmluZWRcbiAgfCByZWFkb25seSBKc29uYWJsZVtdXG4gIHwgeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBKc29uYWJsZSB9XG4gIHwgeyB0b0pTT04oKTogSnNvbmFibGUgfTtcblxuZXhwb3J0IGNsYXNzIEJhc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ/OiBKc29uYWJsZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgY2F1c2U/OiBFcnJvcjsgY29udGV4dD86IEpzb25hYmxlIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgeyBjYXVzZSwgY29udGV4dCB9ID0gb3B0aW9ucztcblxuICAgIHN1cGVyKG1lc3NhZ2UsIHsgY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBFbmNyeXB0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2U6IHN0cmluZyA9IFwiVW5hYmxlIHRvIGVuY3J5cHQgdGhlIHByb3ZpZGVkIGRhdGFcIjtcbn1cbiIsICJpbXBvcnQgeyBlcnJBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY29ubmVjdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgU2VydmVyRXJyb3IgfSBmcm9tIFwifi9lcnJvci9zZXJ2ZXItZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyQ29uZmlnIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1jb25maWcudHNcIjtcblxuLyoqXG4gKiBFbnN1cmUgYW4gZXJyb3IgbWVzc2FnZSBpcyB0cmFuc2Zvcm1lZCBpbiBhbiBFcnJvciBvYmplY3RcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbnN1cmVFcnJvciA9ICh2YWx1ZTogdW5rbm93bik6IEVycm9yID0+IHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiB2YWx1ZTtcblxuICBsZXQgc3RyaW5naWZpZWQgPSBcIltVbmFibGUgdG8gc3RyaW5naWZ5IHRoZSB0aHJvd24gdmFsdWVdXCI7XG4gIHRyeSB7XG4gICAgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgIC8qIGVtcHR5ICovXG4gIH1cblxuICByZXR1cm4gbmV3IEVycm9yKHN0cmluZ2lmaWVkKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgTHVmaSdzIGNvbmZpZyBmcm9tIGl0cyBBUElcbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2VVcmxcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBmZXRjaFNlcnZlckNvbmZpZyA9IChcbiAgaW5zdGFuY2VVcmw6IFVSTCxcbik6IFJlc3VsdEFzeW5jPFNlcnZlckNvbmZpZywgRXJyb3I+ID0+IHtcbiAgY29uc3Qgb3JpZ2luTWF0Y2hlcyA9IGluc3RhbmNlVXJsLmhyZWYubWF0Y2goXG4gICAgLyguKj8pXFwvPyg/OlxcL1tkcl17MX1cXC98bG9naW5cXC8/fGZpbGVzXFwvPykvLFxuICApO1xuXG4gIGNvbnN0IHVybE9yaWdpbiA9IG9yaWdpbk1hdGNoZXMgJiYgb3JpZ2luTWF0Y2hlc1sxXVxuICAgID8gb3JpZ2luTWF0Y2hlc1sxXVxuICAgIDogaW5zdGFuY2VVcmwub3JpZ2luO1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBmZXRjaCh1cmxPcmlnaW4gKyBcIi9hYm91dC9jb25maWdcIiksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENvbm5lY3Rpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgIH0pLFxuICApLmFuZFRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIHJlc3BvbnNlLmpzb24oKSxcbiAgICAgICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgIG5ldyBTZXJ2ZXJFcnJvcih1bmRlZmluZWQsIHsgY29udGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Rlbm9SdW50aW1lID0gKCk6IGJvb2xlYW4gPT4gdHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCI7XG5cbmV4cG9ydCBjb25zdCBpc1NlY3VyZUNvbnRleHQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKCkgfHwgZ2xvYmFsVGhpcy5pc1NlY3VyZUNvbnRleHQgfHxcbiAgICBnbG9iYWxUaGlzLmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiO1xufTtcblxuZXhwb3J0IGNvbnN0IHdvcmtlclVybCA9IChyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IFVSTCA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKClcbiAgICA/IG5ldyBVUkwoYC4vd29ya2VyLyR7cmVsYXRpdmVQYXRofS50c2AsIG5ldyBVUkwoXCIuXCIsIGltcG9ydC5tZXRhLnVybCkuaHJlZilcbiAgICA6IG5ldyBVUkwoXG4gICAgICBpbXBvcnQubWV0YS5yZXNvbHZlKFxuICAgICAgICBgLi8ke1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCAhPT0gXCJlbmNyeXB0XCIgPyBgd29ya2VyLyR7cmVsYXRpdmVQYXRofWAgOiByZWxhdGl2ZVBhdGhcbiAgICAgICAgfS5qc2AsXG4gICAgICApLFxuICAgICk7XG59O1xuIiwgImltcG9ydCB7XG4gIERlY29kZSBhcyBiNjR1cmxkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjR1cmxlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjQvdXJsXCI7XG5pbXBvcnQgeyB0eXBlIEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB7IENyeXB0b0FsZ29yaXRobSB9IGZyb20gXCJ+L2VudW0vY3J5cHRvLWFsZ29yaXRobS50c1wiO1xuaW1wb3J0IHsgRGVjcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2RlY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9jcnlwdG8tZXJyb3IudHNcIjtcbmltcG9ydCB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBlbmNyeXB0ZWREYXRhIHVzaW5nIHRoZSBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvblxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBlbmNyeXB0ZWRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgZW5jcnlwdGVkOiBFbmNyeXB0ZWREYXRhLFxuKTogUmVzdWx0QXN5bmM8QXJyYXlCdWZmZXIsIERlY3J5cHRpb25FcnJvcj4gPT4ge1xuICByZXR1cm4gaW1wb3J0S2V5KGtleSkuYW5kVGhlbigoaW1wb3J0ZWRLZXkpID0+XG4gICAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICBjcnlwdG8uc3VidGxlLmRlY3J5cHQoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgICAgICBpdjogZW5jcnlwdGVkLml2IGFzIFVpbnQ4QXJyYXksXG4gICAgICAgIH0sXG4gICAgICAgIGltcG9ydGVkS2V5LFxuICAgICAgICBlbmNyeXB0ZWQuZGF0YSBhcyBBcnJheUJ1ZmZlcixcbiAgICAgICksXG4gICAgICAoZXJyb3IpID0+IG5ldyBEZWNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgKVxuICApO1xufTtcblxuLyoqXG4gKiBFbmNyeXB0IGFuIEFycmF5QnVmZmVyIGludG8gYW4gRW5jcnlwdGVkRGF0YSB1c2luZyB0aGUgcHJvdmlkZWQga2V5XG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEFycmF5QnVmZmVyLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PiB7XG4gIHJldHVybiBpbXBvcnRLZXkoa2V5KS5hbmRUaGVuKChpbXBvcnRlZEtleSkgPT4ge1xuICAgIGNvbnN0IGl2ID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxMikpO1xuICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgIGNyeXB0by5zdWJ0bGUuZW5jcnlwdChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQUVTLUdDTVwiLFxuICAgICAgICAgIGl2LFxuICAgICAgICB9LFxuICAgICAgICBpbXBvcnRlZEtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICApLFxuICAgICAgKGVycm9yKSA9PlxuICAgICAgICBuZXcgRW5jcnlwdGlvbkVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICAgIH0pLFxuICAgICkuYW5kVGhlbigoZW5jcnlwdGVkKSA9PiB7XG4gICAgICByZXR1cm4gb2tBc3luYyh7XG4gICAgICAgIGFsZ286IENyeXB0b0FsZ29yaXRobS5XZWJDcnlwdG8sXG4gICAgICAgIGRhdGE6IGVuY3J5cHRlZCxcbiAgICAgICAgaXYsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybSBhIHN0cmluZyBpbnRvIGEgQ3J5cHRvS2V5LCB1c2FibGUgaW4gV2ViIENyeXB0byBBUElcbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaW1wb3J0S2V5ID0gKGtleTogc3RyaW5nKTogUmVzdWx0QXN5bmM8Q3J5cHRvS2V5LCBDcnlwdG9FcnJvcj4gPT4ge1xuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXG4gICAgICBcInJhd1wiLFxuICAgICAgYjY0dXJsZGVjb2RlKGtleSksXG4gICAgICB7IG5hbWU6IFwiQUVTLUdDTVwiIH0sXG4gICAgICBmYWxzZSxcbiAgICAgIFtcbiAgICAgICAgXCJlbmNyeXB0XCIsXG4gICAgICAgIFwiZGVjcnlwdFwiLFxuICAgICAgXSxcbiAgICApLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBpbXBvcnQgY3J5cHRvZ3JhcGh5IGtleVwiLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgKTtcbn07XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gc3RyaW5nIHVzaW5nIFdlYiBDcnlwdG8gQVBJLlxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9ICgpOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PiB7XG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgICAgY3J5cHRvLnN1YnRsZVxuICAgICAgICAuZ2VuZXJhdGVLZXkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICAgICAgICBsZW5ndGg6IDI1NixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIl0sXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKGdlbmVyYXRlZEtleSkgPT5cbiAgICAgICAgICBjcnlwdG8uc3VidGxlXG4gICAgICAgICAgICAuZXhwb3J0S2V5KFwicmF3XCIsIGdlbmVyYXRlZEtleSlcbiAgICAgICAgICAgIC50aGVuKChrZXkpID0+IHJlc29sdmUoYjY0dXJsZW5jb2RlKGtleSkpKVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGJhc2U2NCBlbmNvZGUgdGhlIHVybFwiLCB7XG4gICAgICAgICAgICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiByZWplY3QoZXJyb3IpKVxuICAgICksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGdlbmVyYXRlIGtleVwiLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICk7XG59O1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyBXZWJDcnlwdG8gQVBJXG4gKlxuICogQHBhcmFtIHBhc3N3b3JkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaGFzaFBhc3N3b3JkID0gKFxuICBwYXNzd29yZDogc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBIYXNoaW5nRXJyb3I+ID0+IHtcbiAgY29uc3QgcHJvbWlzZSA9IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBVaW50OEFycmF5KFxuICAgICAgICBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdChcbiAgICAgICAgICBcIlNIQS01MTJcIixcbiAgICAgICAgICBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUocGFzc3dvcmQpLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKS5qb2luKFwiXCIpO1xuICB9O1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBwcm9taXNlKCksXG4gICAgKGVycm9yKSA9PiBuZXcgSGFzaGluZ0Vycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICApO1xufTtcbiIsICJpbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB0eXBlIHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IERlY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9kZWNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyB0eXBlIEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCAqIGFzIHNqY2wgZnJvbSBcIn4vYXBpL2NyeXB0by9zamNsLnRzXCI7XG5pbXBvcnQgKiBhcyB3ZWIgZnJvbSBcIn4vYXBpL2NyeXB0by93ZWIudHNcIjtcbmltcG9ydCB0eXBlIHsgSGFzaGluZ0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2hhc2hpbmctZXJyb3IudHNcIjtcblxuLyoqXG4gKiBEZWNyeXB0IGFuIEVuY3J5cHRlZERhdGEgb2JqZWN0IHVzaW5nIHRoZSBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvblxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogRW5jcnlwdGVkRGF0YSxcbik6IFJlc3VsdEFzeW5jPEFycmF5QnVmZmVyLCBEZWNyeXB0aW9uRXJyb3I+ID0+XG4gIHZhbHVlLmFsZ28gPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5hbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbFxuICAgID8gc2pjbC5kZWNyeXB0KGtleSwgdmFsdWUpXG4gICAgOiB3ZWIuZGVjcnlwdChrZXksIHZhbHVlKTtcblxuLyoqXG4gKiBFbmNyeXB0IGFuIEFycmF5QnVmZmVyIHVzaW5nIHRoZSBwcm92aWRlZCBrZXkgYW5kIGFsZ29yaXRobVxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEFycmF5QnVmZmVyLFxuICBhbGdvOiBDcnlwdG9BbGdvcml0aG0sXG4pOiBSZXN1bHRBc3luYzxFbmNyeXB0ZWREYXRhLCBFbmNyeXB0aW9uRXJyb3I+ID0+XG4gIChhbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbClcbiAgICA/IHNqY2wuZW5jcnlwdChrZXksIHZhbHVlKVxuICAgIDogd2ViLmVuY3J5cHQoa2V5LCB2YWx1ZSk7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBuZXcga2V5IGZvciBlbmNyeXB0aW9uL2RlY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0gYWxnb1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlS2V5ID0gKFxuICBhbGdvID0gQ3J5cHRvQWxnb3JpdGhtLldlYkNyeXB0byxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgQ3J5cHRvRXJyb3I+ID0+XG4gIGFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsID8gc2pjbC5nZW5lcmF0ZUtleSgpIDogd2ViLmdlbmVyYXRlS2V5KCk7XG5cbi8qKlxuICogSGFzaCBhIHBhc3N3b3JkIHVzaW5nIHRoZSBwcm92aWRlZCBhbGdvcml0aG1cbiAqXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaGFzaFBhc3N3b3JkID0gKFxuICBwYXNzd29yZDogc3RyaW5nLFxuICBhbGdvOiBDcnlwdG9BbGdvcml0aG0sXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIEhhc2hpbmdFcnJvcj4gPT5cbiAgYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2xcbiAgICA/IHNqY2wuaGFzaFBhc3N3b3JkKHBhc3N3b3JkKVxuICAgIDogd2ViLmhhc2hQYXNzd29yZChwYXNzd29yZCk7XG4iLCAiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgeyBXT1JLRVJfQUNUSU9OIH0gZnJvbSBcIn4vZW51bS93b3JrZXItYWN0aW9uLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEx1ZmlGaWxlIH0gZnJvbSBcIn4vZW50aXRpZXMvbHVmaS1maWxlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckFjdGlvbk1lc3NhZ2UgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWFjdGlvbi1tZXNzYWdlLnRzXCI7XG5pbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcbmltcG9ydCB7IFVQTE9BRF9TVEFUVVMgfSBmcm9tIFwifi9lbnVtL2ZpbGUtc3RhdHVzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckV2ZW50IH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1ldmVudC50c1wiO1xuXG5kZWNsYXJlIGxldCBzZWxmOiBXb3JrZXI7XG5cbmV4cG9ydCBjb25zdCBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbi8qKlxuICogVXBkYXRlIGZpbGUgaW4gd29ya2VycyBhbmQgcHJvdmlkZSBtb2RpZmljYXRpb25zIHRvIHRoZSBtYWluIHRocmVhZFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHBhcmFtIGFyZ3NcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWxlID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSwgYXJnczogUGFydGlhbDxMdWZpRmlsZT4pID0+IHtcbiAgT2JqZWN0LmFzc2lnbihsdWZpRmlsZSwgYXJncyk7XG5cbiAgaWYgKHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgZXZlbnQ6IEVWRU5ULkZJTEVfVVBEQVRFRCxcbiAgICAgIGx1ZmlGaWxlLFxuICAgIH0gYXMgV29ya2VyRXZlbnQpO1xuICB9XG5cbiAgcmV0dXJuIGx1ZmlGaWxlO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbmRGaWxlRXJyb3IgPSAobHVmaUZpbGU6IEx1ZmlGaWxlLCBlcnJvcjogRXJyb3IpID0+IHtcbiAgdXBkYXRlRmlsZShsdWZpRmlsZSwgeyB1cGxvYWRTdGF0dXM6IFVQTE9BRF9TVEFUVVMuRkFJTEVEIH0pO1xuXG4gIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IgfSBhcyBXb3JrZXJFdmVudCk7XG59O1xuXG4vKipcbiAqIEluaXQgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBjaGlsZCB3b3JrZXIncyBvbm1lc3NhZ2UgZXZlbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0ID0gKCkgPT4ge1xuICBldmVudHMub25jZShFVkVOVC5TT0NLRVRfT1BFTkVELCAoKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBldmVudDogRVZFTlQuU09DS0VUX09QRU5FRCxcbiAgICB9KTtcbiAgfSk7XG5cbiAgZXZlbnRzLm9uY2UoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzV29ya2VyQWN0aW9uTWVzc2FnZSA9IChcbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgbWVzc2FnZTogYW55LFxuKTogbWVzc2FnZSBpcyBXb3JrZXJBY3Rpb25NZXNzYWdlID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgbWVzc2FnZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIG1lc3NhZ2UgIT09IG51bGwgJiZcbiAgICBcImFjdGlvblwiIGluIG1lc3NhZ2UgJiZcbiAgICBPYmplY3QudmFsdWVzKFdPUktFUl9BQ1RJT04pLmluY2x1ZGVzKG1lc3NhZ2UuYWN0aW9uKVxuICApO1xufTtcbiIsICJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwifi9lcnJvci9iYXNlLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBXb3JrZXJFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7fVxuIiwgImltcG9ydCB7IFdvcmtlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd29ya2VyL3dvcmtlci1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgV29ya2VyVW5kZWZpbmVkUGFyYW1ldGVyRXJyb3IgZXh0ZW5kcyBXb3JrZXJFcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2UgPSBcIlBhcmFtZXRlciBtdXN0IGJlIGRlZmluZWRcIjtcbn1cbiIsICJpbXBvcnQgeyBXb3JrZXJFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dvcmtlci93b3JrZXItZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdvcmtlclVwbG9hZEFscmVhZHlGYWlsZWRFcnJvciBleHRlbmRzIFdvcmtlckVycm9yIHtcbiAgb3ZlcnJpZGUgbWVzc2FnZSA9IFwiRmlsZSB1cGxvYWQgYWxyZWFkeSBmYWlsZWRcIjtcbn1cbiIsICJpbXBvcnQgeyBlbmNyeXB0IH0gZnJvbSBcIn4vYXBpL2NyeXB0by50c1wiO1xuaW1wb3J0IHsgVVBMT0FEX1NUQVRVUyB9IGZyb20gXCJ+L2VudW0vZmlsZS1zdGF0dXMudHNcIjtcbmltcG9ydCB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBpbml0IH0gZnJvbSBcIn4vd29ya2VyL3NoYXJlZC50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJBY3Rpb25NZXNzYWdlIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1hY3Rpb24tbWVzc2FnZS50c1wiO1xuaW1wb3J0IHsgV29ya2VyVW5kZWZpbmVkUGFyYW1ldGVyRXJyb3IgfSBmcm9tIFwifi9lcnJvci93b3JrZXIvd29ya2VyLXVuZGVmaW5lZC1wYXJhbWV0ZXItZXJyb3IudHNcIjtcbmltcG9ydCB7IFdvcmtlclVwbG9hZEFscmVhZHlGYWlsZWRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dvcmtlci93b3JrZXItdXBsb2FkLWFscmVhZHktZmFpbGVkLWVycm9yLnRzXCI7XG5cbmRlY2xhcmUgY29uc3Qgc2VsZjogV29ya2VyO1xuXG5sZXQgaXNJbml0aWF0ZWQgPSBmYWxzZTtcblxuc2VsZi5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICBpZiAoIWlzSW5pdGlhdGVkKSB7XG4gICAgaW5pdCgpO1xuICAgIGlzSW5pdGlhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHsgbHVmaUZpbGUsIGNodW5rLCBhbGdvIH0gPSAoZXZlbnQuZGF0YSBhcyBXb3JrZXJBY3Rpb25NZXNzYWdlKS5hcmdzO1xuXG4gIGlmIChjaHVuayAmJiB0eXBlb2YgYWxnbyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGlmIChsdWZpRmlsZS51cGxvYWRTdGF0dXMgIT09IFVQTE9BRF9TVEFUVVMuRkFJTEVEKSB7XG4gICAgICBlbmNyeXB0KGx1ZmlGaWxlLmtleXMuY2xpZW50LCBjaHVuay5idWZmZXIsIGFsZ28pXG4gICAgICAgIC5tYXAoKGVuY3J5cHRlZERhdGEpID0+IHtcbiAgICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZW5jcnlwdGVkRGF0YSwgY2h1bmtJbmRleDogY2h1bmsuaW5kZXggfSwgW1xuICAgICAgICAgICAgdHlwZW9mIGVuY3J5cHRlZERhdGEuZGF0YSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShlbmNyeXB0ZWREYXRhLmRhdGEpXG4gICAgICAgICAgICAgIDogZW5jcnlwdGVkRGF0YS5kYXRhLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9KVxuICAgICAgICAubWFwRXJyKChlcnJvcjogRW5jcnlwdGlvbkVycm9yKSA9PiB7XG4gICAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7IGVycm9yIH0pO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgIGVycm9yOiBuZXcgV29ya2VyVXBsb2FkQWxyZWFkeUZhaWxlZEVycm9yKFwiRmlsZSB1cGxvYWQgYWxyZWFkeSBmYWlsZWRcIiksXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFjaHVuaykge1xuICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgIGVycm9yOiBuZXcgV29ya2VyVW5kZWZpbmVkUGFyYW1ldGVyRXJyb3IoXG4gICAgICAgICAgXCJjaHVuayBidWZmZXIgbXVzdCBiZSBkZWZpbmVkXCIsXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFsZ28gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgICBlcnJvcjogbmV3IFdvcmtlclVuZGVmaW5lZFBhcmFtZXRlckVycm9yKFwiYWxnbyBtdXN0IGJlIGRlZmluZWRcIiksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG4iXSwKICAibWFwcGluZ3MiOiAiKzVCQUFBLElBQUFBLEdBQUFDLEdBQUEsQ0FBQUMsR0FBQUMsSUFBQSxjQUFhLElBQUlDLEVBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsUUFBUSxTQUFTQyxFQUFFLENBQUMsS0FBSyxTQUFTLFVBQVUsQ0FBQyxNQUFNLFlBQVksS0FBSyxPQUFPLEVBQUUsS0FBSyxRQUFRQSxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFLENBQUMsS0FBSyxTQUFTLFVBQVUsQ0FBQyxNQUFNLFlBQVksS0FBSyxPQUFPLEVBQUUsS0FBSyxRQUFRQSxDQUFDLEVBQUUsSUFBSSxTQUFTQSxFQUFFLENBQUMsS0FBSyxTQUFTLFVBQVUsQ0FBQyxNQUFNLFFBQVEsS0FBSyxPQUFPLEVBQUUsS0FBSyxRQUFRQSxDQUFDLEVBQUUsU0FBUyxTQUFTQSxFQUFFLENBQUMsS0FBSyxTQUFTLFVBQVUsQ0FBQyxNQUFNLGNBQWMsS0FBSyxPQUFPLEVBQUUsS0FBSyxRQUFRQSxDQUFDLENBQUMsQ0FBQyxFQUMzY0QsRUFBSyxPQUFPLElBQUksU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxJQUFJQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUVMLEVBQUVELEVBQUUsT0FBTyxJQUFJTyxFQUFFLEVBQUUsR0FBT04sSUFBSixHQUFXQSxJQUFKLEdBQVdBLElBQUosRUFBTSxNQUFNLElBQUlGLEVBQUssVUFBVSxRQUFRLHNCQUFzQixFQUE2QixJQUEzQixLQUFLLEVBQUUsQ0FBQ0ksRUFBRUgsRUFBRSxNQUFNLENBQUMsRUFBRUksRUFBRSxDQUFDLENBQUMsRUFBTUosRUFBRUMsRUFBRUQsRUFBRSxFQUFFQyxFQUFFLEdBQUdELElBQUtFLEVBQUVDLEVBQUVILEVBQUUsQ0FBQyxHQUFTQSxFQUFFQyxJQUFOLEdBQWFBLElBQUosR0FBV0QsRUFBRUMsSUFBTixLQUFRQyxFQUFFRyxFQUFFSCxJQUFJLEVBQUUsR0FBRyxHQUFHRyxFQUFFSCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUdHLEVBQUVILEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRUcsRUFBRUgsRUFBRSxHQUFHLEVBQU1GLEVBQUVDLElBQU4sSUFBVUMsRUFBRUEsR0FBRyxFQUFFQSxJQUFJLEdBQUdLLEdBQUcsR0FBR0EsRUFBRUEsR0FBRyxFQUFFLEtBQUtBLEdBQUcsS0FBSUosRUFBRUgsQ0FBQyxFQUFFRyxFQUFFSCxFQUFFQyxDQUFDLEVBQUVDLEVBQUUsSUFBSUQsRUFBRSxFQUFFRCxFQUFFQyxJQUFJRCxJQUFJRSxFQUFFQyxFQUFFRixFQUFFLEVBQUVELEVBQUVBLEVBQUUsQ0FBQyxFQUFFSSxFQUFFSCxDQUFDLEVBQUUsR0FBR0QsR0FBRyxFQUFFQyxFQUFFQyxFQUFFSSxFQUFFLENBQUMsRUFBRUQsRUFBRUgsSUFBSSxFQUFFLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEVBQzNmLEdBQUcsQ0FBQyxDQUFDLEVBQ0xILEVBQUssT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLFNBQVNDLEVBQUUsQ0FBQyxPQUFPUSxHQUFHLEtBQUtSLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFLENBQUMsT0FBT1EsR0FBRyxLQUFLUixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUlBLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUYsRUFBRSxDQUFDLEVBQUVHLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxJQUFJVCxFQUFFLEVBQUUsSUFBTUEsRUFBRUEsSUFBSUssR0FBR0YsRUFBRUgsQ0FBQyxFQUFFQSxHQUFHLEVBQUUsS0FBS0EsR0FBRyxJQUFJQSxDQUFDLEVBQUVBLEVBQUUsSUFBSUMsRUFBRUMsRUFBRSxFQUFFLENBQUNKLEVBQUVHLENBQUMsRUFBRUEsR0FBR0ssR0FBRyxFQUFFSixFQUFFRyxFQUFFSCxDQUFDLEdBQUcsRUFBRSxJQUFJTSxFQUFFTixFQUFFQSxHQUFHLEVBQUVBLEdBQUcsRUFBRUEsR0FBRyxFQUFFQSxHQUFHLEVBQUVNLEVBQUVBLEdBQUcsRUFBRUEsRUFBRSxJQUFJLEdBQUdWLEVBQUVHLENBQUMsRUFBRU8sRUFBRVQsRUFBRVMsQ0FBQyxFQUFFUCxFQUFFTSxFQUFFSixFQUFFSCxFQUFFRyxFQUFFRyxFQUFFSCxFQUFFRixDQUFDLENBQUMsQ0FBQyxFQUFFUSxFQUFFLFNBQVVGLEVBQUUsTUFBUVAsRUFBRSxJQUFNTSxFQUFFLFNBQVVMLEVBQUVNLEVBQUUsSUFBTUosRUFBRUssQ0FBQyxFQUFFLFNBQVVBLEVBQUVSLEVBQUUsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVDLENBQUMsRUFBRU0sRUFBRUEsR0FBRyxHQUFHQSxJQUFJLEVBQUVWLEVBQUVHLENBQUMsRUFBRVEsQ0FBQyxFQUFFQyxFQUFFQSxHQUFHLEdBQUdBLElBQUksRUFBRSxJQUFJVCxFQUNsZ0IsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVKLEVBQUVJLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNoRCxTQUFTSSxHQUFHUixFQUFFQyxFQUFFQyxFQUFFLENBQUMsR0FBT0QsRUFBRSxTQUFOLEVBQWEsTUFBTSxJQUFJRixFQUFLLFVBQVUsUUFBUSx3QkFBd0IsRUFBRSxJQUFJSSxFQUFFSCxFQUFFLEVBQUVFLENBQUMsRUFBRUUsRUFBRUgsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRSxFQUFFSixFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUcsRUFBRUwsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRixFQUFFQSxFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRSxJQUFJSSxFQUFFRSxFQUFFQyxFQUFFQyxFQUFFUixFQUFFLE9BQU8sRUFBRSxFQUFFUyxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUVQLEVBQUVQLEVBQUUsRUFBRUUsQ0FBQyxFQUFFRixFQUFFTyxFQUFFLENBQUMsRUFBRSxJQUFJUSxFQUFFUixFQUFFLENBQUMsRUFBRVMsRUFBRVQsRUFBRSxDQUFDLEVBQUVVLEVBQUVWLEVBQUUsQ0FBQyxFQUFFVyxFQUFFWCxFQUFFLENBQUMsRUFBRSxJQUFJSyxFQUFFLEVBQUVBLEVBQUVELEVBQUVDLElBQUlMLEVBQUVQLEVBQUVJLElBQUksRUFBRSxFQUFFVyxFQUFFVixHQUFHLEdBQUcsR0FBRyxFQUFFVyxFQUFFVixHQUFHLEVBQUUsR0FBRyxFQUFFVyxFQUFFaEIsRUFBRSxHQUFHLEVBQUVFLEVBQUVVLENBQUMsRUFBRUosRUFBRVQsRUFBRUssSUFBSSxFQUFFLEVBQUVVLEVBQUVULEdBQUcsR0FBRyxHQUFHLEVBQUVVLEVBQUVmLEdBQUcsRUFB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QUFFQyxFQUFFLENBQUMsT0FBWUYsSUFBTCxHQUFPQyxHQUFHQyxFQUFFRCxFQUFFLEVBQUVBLEdBQUcsR0FBR0QsR0FBRyxjQUFjQSxDQUFDLEVBQUUsV0FBVyxTQUFTQSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU1BLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxNQUFNLFNBQVNBLEVBQUVDLEVBQUUsQ0FBQyxHQUFHRixFQUFLLFNBQVMsVUFBVUMsQ0FBQyxJQUFJRCxFQUFLLFNBQVMsVUFBVUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJQyxFQUFFLEVBQUVDLEVBQUUsSUFBSUEsRUFBRSxFQUFFQSxFQUFFSCxFQUFFLE9BQU9HLElBQUlELEdBQUdGLEVBQUVHLENBQUMsRUFBRUYsRUFBRUUsQ0FBQyxFQUFFLE9BQzNlRCxJQURrZixDQUNqZixFQUFFLEVBQUUsU0FBU0YsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQU0sSUFBSkEsRUFBRSxFQUFlRCxJQUFULFNBQWFBLEVBQUUsQ0FBQyxHQUFHLElBQUlGLEVBQUVBLEdBQUcsR0FBR0UsRUFBRSxLQUFLRCxDQUFDLEVBQUVBLEVBQUUsRUFBRSxHQUFPRCxJQUFKLEVBQU0sT0FBT0UsRUFBRSxPQUFPSCxDQUFDLEVBQUUsSUFBSUksRUFBRSxFQUFFQSxFQUFFSixFQUFFLE9BQU9JLElBQUlELEVBQUUsS0FBS0QsRUFBRUYsRUFBRUksQ0FBQyxJQUFJSCxDQUFDLEVBQUVDLEVBQUVGLEVBQUVJLENBQUMsR0FBRyxHQUFHSCxFQUFFLE9BQUFHLEVBQUVKLEVBQUUsT0FBT0EsRUFBRUEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFQSxFQUFFRCxFQUFLLFNBQVMsV0FBV0ssQ0FBQyxFQUFFRCxFQUFFLEtBQUtKLEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFLEdBQUcsR0FBR0MsRUFBRUQsRUFBRUUsRUFBRUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQVNBLENBQUMsRUFBRSxFQUFFLFNBQVNILEVBQUVDLEVBQUUsQ0FBQyxNQUFNLENBQUNELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUQsRUFBRSxDQUFDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRCxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxJQUFJRCxFQUFFLEVBQUVBLEVBQUVELEVBQUUsT0FBTyxFQUFFQyxFQUFFQyxFQUFFRixFQUFFQyxDQUFDLEVBQUVELEVBQUVDLENBQUMsRUFBRUMsSUFBSSxHQUFHQSxJQUFJLEVBQUUsT0FBUUEsRUFBRSxRQUFTLEVBQUVBLEdBQUcsR0FBRyxPQUFPRixDQUFDLENBQUMsRUFDcGRELEVBQUssTUFBTSxXQUFXLENBQUMsU0FBUyxTQUFTQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxHQUFHQyxFQUFFSCxFQUFLLFNBQVMsVUFBVUMsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUEsRUFBRUQsRUFBRSxFQUFFQyxJQUFTLEVBQUFBLEVBQUUsS0FBS0MsRUFBRUosRUFBRUcsRUFBRSxDQUFDLEdBQUdGLEdBQUcsT0FBTyxhQUFhRyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUVBLElBQUksRUFBRSxPQUFPLG1CQUFtQixPQUFPSCxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sU0FBU0QsRUFBRSxDQUFDQSxFQUFFLFNBQVMsbUJBQW1CQSxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFLENBQUMsRUFBRUMsRUFBRUMsRUFBRSxFQUFFLElBQUlELEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxJQUFJQyxFQUFFQSxHQUFHLEVBQUVILEVBQUUsV0FBV0UsQ0FBQyxHQUFPQSxFQUFFLEtBQVAsSUFBWUQsRUFBRSxLQUFLRSxDQUFDLEVBQUVBLEVBQUUsR0FBRyxPQUFBRCxFQUFFLEdBQUdELEVBQUUsS0FBS0YsRUFBSyxTQUFTLFFBQVEsR0FBR0csRUFBRSxH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TyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUlGLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFLEtBQUssRUFBRUQsRUFBRUYsRUFBSyxTQUFTLE9BQU9FLEVBQUUsQ0FBQ0YsRUFBSyxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUlDLEVBQUVDLEVBQUUsT0FBTyxFQUFFRCxFQUFFLEdBQUdBLElBQUlDLEVBQUUsS0FBSyxDQUFDLEVBQXlDLElBQXZDQSxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssRUFBRSxVQUFXLENBQUMsRUFBTUEsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQUVBLEVBQUUsUUFBUSxLQUFLLEVBQUVBLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQUssTUFBTSxFQUFTQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBU0YsRUFBRUEsRUFBRSxDQUFDLE1BQU8sYUFBYUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUN6ZixHQUFHLEtBQUssQ0FBQ0EsSUFBSSxFQUFFSCxJQUFJLEtBQUssRUFBRUEsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUVELENBQUMsRUFBRUQsRUFBRSxLQUFLLElBQUlFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUgsRUFBRSxDQUFDLEVBQUVLLEVBQUVMLEVBQUUsQ0FBQyxFQUFFTSxFQUFFTixFQUFFLENBQUMsRUFBRU8sRUFBRVAsRUFBRSxDQUFDLEVBQUVRLEVBQUVSLEVBQUUsQ0FBQyxFQUFFUyxFQUFFVCxFQUFFLENBQUMsRUFBRVUsRUFBRVYsRUFBRSxDQUFDLEVBQUUsSUFBSUgsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUksR0FBR0EsRUFBRUMsRUFBRUYsRUFBRUMsQ0FBQyxHQUFHQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsRUFBRSxFQUFFRSxFQUFFSCxFQUFFQyxFQUFFLEdBQUcsRUFBRSxFQUFFQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsR0FBR0MsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksRUFBRUEsR0FBRyxHQUFHQSxHQUFHLEtBQUtDLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJSCxFQUFFQyxFQUFFLEVBQUUsRUFBRUQsRUFBRUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHQyxFQUFFQSxFQUFFWSxHQUFHSCxJQUFJLEVBQUVBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJRSxFQUFFRixHQUFHQyxFQUFFQyxJQUFJUixFQUFFSixDQUFDLEVBQUVhLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVSLEVBQUUsRUFBRVEsRUFBRUQsRUFBRUEsRUFBRUYsRUFBRUEsRUFBRUQsRUFBRUEsRUFBRUosR0FBR0ssRUFBRUUsRUFBRUMsR0FBR0gsRUFBRUUsS0FBS0YsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksR0FBR0EsR0FBRyxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVFLEVBQ3BmLEVBQUVGLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRUcsRUFBRSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVLLEVBQUUsRUFBRUwsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFTSxFQUFFLEVBQUVOLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRU8sRUFBRSxFQUFFUCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVRLEVBQUUsRUFBRVIsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFUyxFQUFFLEVBQUVULEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRVUsRUFBRSxDQUFDLENBQUMsRUFBRWYsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRUQsRUFBSyxLQUFLLE9BQU8sS0FBSyxTQUFTQyxFQUFFLENBQUMsT0FBTyxJQUFJRCxFQUFLLEtBQUssU0FBUSxPQUFPQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQy9TRCxFQUFLLEtBQUssT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sVUFBVSxDQUFDLFlBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBUyxJQUFJLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQVksT0FBT0EsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFLEtBQUssRUFBRUgsRUFBSyxTQUFTLE9BQU8sS0FBSyxFQUFFQyxDQUFDLEVBQWlELEdBQS9DQyxFQUFFLEtBQUssRUFBRUQsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUssU0FBUyxVQUFVQyxDQUFDLEVBQUssaUJBQWlCQSxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEscUNBQXFDLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDLElBQUlJLEVBQUUsSUFBSSxZQUFZRCxDQUFDLEVBQUVFLEVBQUUsRUFBRSxJQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFRSxFQUFFLFNBQVMsR0FDdGZDLEVBQUUsSUFBSUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsR0FBRyxFQUFFRixFQUFFLE9BQU8sRUFBRSxHQUFHRSxDQUFDLENBQUMsS0FBTSxLQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJRixFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVELEVBQUVGLEVBQUssU0FBUyxPQUFPRSxFQUFFLENBQUNGLEVBQUssU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFQyxFQUFFLE9BQU8sRUFBRUQsRUFBRSxHQUFHQSxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUE2RCxJQUEzREEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUUsVUFBVyxDQUFDLEVBQU1BLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLFFBQVEsS0FBSyxFQUFFQSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFLLE1BQU0sRUFBU0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFDbGYsUUFBUSxPQUFPLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsU0FBUyxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFDcGYsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxPQUFPLFNBQVMsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTQyxFQUFFRCxFQUFFLENBQUMsTUFBTyxnQkFBZUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUUUsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUFFLEdBQUcsS0FBSyxDQUFDQSxJQUFJLEVBQUVILElBQUksS0FBSyxFQUFFLEVBQUVBLENBQUMsRUFBRUYsRUFBRSxLQUFLLElBQUlHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUVELEVBQUUsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FB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LFFBQVFFLENBQUMsQ0FBQyxFQUFFLEVBQUVFLENBQUMsRUFBSyxDQUFDSyxFQUFFLE1BQU0sQ0FBQyxJQUFJTixFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSUcsRUFBRSxFQUFFQSxFQUFFRyxFQUFFSCxHQUFHLEVBQUVBLEVBQUVLLElBQUlaLEVBQUssS0FBSyxJQUFJLEdBQUdPLEVBQ3JnQkcsQ0FBQyxFQUFFRSxHQUFHQyxHQUFHVixFQUFFLENBQUMsSUFBSUUsRUFBRUosRUFBRSxRQUFRRSxDQUFDLEVBQUVELEVBQUVLLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUVILEVBQUVLLEVBQUUsQ0FBQyxHQUFHRixFQUFFLENBQUMsRUFBRUgsRUFBRUssRUFBRSxDQUFDLEdBQUdGLEVBQUUsQ0FBQyxFQUFFSCxFQUFFSyxFQUFFLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUlELEVBQUUsS0FBS0ksRUFBRSxNQUFNTixFQUFFUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVYLEVBQUssS0FBSyxLQUFLLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxLQUFLLEVBQUVBLEVBQUVBLEdBQUdGLEVBQUssS0FBSyxPQUFPLElBQUlHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUVDLEVBQUVDLEVBQUVILEVBQUUsVUFBVSxVQUFVLEdBQWtELElBQS9DLEtBQUssRUFBRSxDQUFDLElBQUlBLEVBQUUsSUFBSUEsQ0FBQyxFQUFFRCxFQUFFLE9BQU9JLElBQUlKLEVBQUVDLEVBQUUsS0FBS0QsQ0FBQyxHQUFPRyxFQUFFLEVBQUVBLEVBQUVDLEVBQUVELElBQUlELEVBQUUsQ0FBQyxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRSxVQUFVRCxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU9ELEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPQSxFQUFF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RUFBTSxPQUFRQyxDQUFJLEVBQzdDLElBQUtFLEdBQWtCLENBQ3RCLEtBQUssWUFBWSxDQUFFLGNBQUFBLEVBQWUsV0FBWUgsRUFBTSxLQUFNLEVBQUcsQ0FDM0QsT0FBT0csRUFBYyxNQUFTLFNBQzFCLElBQUksWUFBWSxFQUFFLE9BQU9BLEVBQWMsSUFBSSxFQUMzQ0EsRUFBYyxJQUNwQixDQUFDLENBQ0gsQ0FBQyxFQUNBLE9BQVFDLEdBQTJCLENBQ2xDLEtBQUssWUFBWSxDQUFFLE1BQUFBLENBQU0sQ0FBQyxDQUM1QixDQUFDLEVBRUgsS0FBSyxZQUFZLENBQ2YsTUFBTyxJQUFJQyxHQUErQiw0QkFBNEIsQ0FDeEUsQ0FBQyxHQUdFTCxHQUNILEtBQUssWUFBWSxDQUNmLE1BQU8sSUFBSU0sR0FDVCw4QkFDRixDQUNGLENBQUMsRUFHQyxPQUFPTCxFQUFTLEtBQ2xCLEtBQUssWUFBWSxDQUNmLE1BQU8sSUFBSUssR0FBOEIsc0JBQXNCLENBQ2pFLENBQUMsRUFHUCIsCiAgIm5hbWVzIjogWyJyZXF1aXJlX3NqY2wiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzamNsIiwgImEiLCAiYiIsICJjIiwgImQiLCAiZSIsICJmIiwgImciLCAiaCIsICJhYSIsICJrIiwgIm4iLCAibCIsICJtIiwgInAiLCAieiIsICJBIiwgIkMiLCAiQiIsICJEIiwgIlAiLCAiZWEiLCAiUSIsICJ0IiwgInIiLCAidSIsICJFIiwgIkgiLCAiViIsICJJIiwgInciLCAidiIsICJSIiwgIkoiLCAiUyIsICJLIiwgIlciLCAiTCIsICJxIiwgIngiLCAieSIsICJYIiwgIlkiLCAiTSIsICJmYSIsICJqYSIsICJrYSIsICJnYSIsICJiYSIsICJOIiwgImNhIiwgIk8iLCAiVCIsICJoYSIsICJpYSIsICJkYSIsICJVIiwgIloiLCAicmVxdWlyZV9ldmVudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSIiwgIlJlZmxlY3RBcHBseSIsICJ0YXJnZXQiLCAicmVjZWl2ZXIiLCAiYXJncyIsICJSZWZsZWN0T3duS2V5cyIsICJQcm9jZXNzRW1pdFdhcm5pbmciLCAid2FybmluZyIsICJOdW1iZXJJc05hTiIsICJ2YWx1ZSIsICJFdmVudEVtaXR0ZXIiLCAib25jZSIsICJkZWZhdWx0TWF4TGlzdGVuZXJzIiwgImNoZWNrTGlzdGVuZXIiLCAibGlzdGVuZXIiLCAiYXJnIiwgIm4iLCAiX2dldE1heExpc3RlbmVycyIsICJ0aGF0IiwgInR5cGUiLCAiaSIsICJkb0Vycm9yIiwgImV2ZW50cyIsICJlciIsICJlcnIiLCAiaGFuZGxlciIsICJsZW4iLCAibGlzdGVuZXJzIiwgImFycmF5Q2xvbmUiLCAiX2FkZExpc3RlbmVyIiwgInByZXBlbmQiLCAibSIsICJleGlzdGluZyIsICJ3IiwgIm9uY2VXcmFwcGVyIiwgIl9vbmNlV3JhcCIsICJzdGF0ZSIsICJ3cmFwcGVkIiwgImxpc3QiLCAicG9zaXRpb24iLCAib3JpZ2luYWxMaXN0ZW5lciIsICJzcGxpY2VPbmUiLCAia2V5cyIsICJrZXkiLCAiX2xpc3RlbmVycyIsICJ1bndyYXAiLCAiZXZsaXN0ZW5lciIsICJ1bndyYXBMaXN0ZW5lcnMiLCAiZW1pdHRlciIsICJsaXN0ZW5lckNvdW50IiwgImFyciIsICJjb3B5IiwgImluZGV4IiwgInJldCIsICJuYW1lIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVycm9yTGlzdGVuZXIiLCAicmVzb2x2ZXIiLCAiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwgImFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyIiwgImZsYWdzIiwgIndyYXBMaXN0ZW5lciIsICJFbmNvZGluZyIsICJjaGFyc2V0IiwgIm5vUGFkZGluZyIsICJhYiIsICJsZW4iLCAidmlldyIsICJyZXMiLCAic3RyIiwgInZpZXdMZW4iLCAiZW5jMSIsICJlbmMyIiwgImVuYzMiLCAiZW5jNCIsICJpIiwgImoiLCAib2JqIiwgIkVuY29kaW5nIiwgIkVuY29kZSIsICJhYiIsICJvYmoiLCAiRW5jb2RpbmciLCAiRGVjb2RlIiwgInN0ciIsICJvYmoiLCAiZGVmYXVsdEVycm9yQ29uZmlnIiwgImNyZWF0ZU5ldmVyVGhyb3dFcnJvciIsICJtZXNzYWdlIiwgInJlc3VsdCIsICJjb25maWciLCAiZGF0YSIsICJtYXliZVN0YWNrIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fYXdhaXQiLCAidiIsICJfX2FzeW5jR2VuZXJhdG9yIiwgImciLCAicSIsICJ2ZXJiIiwgImF3YWl0UmV0dXJuIiwgImYiLCAibiIsICJhIiwgImIiLCAicmVzdW1lIiwgInNldHRsZSIsICJyIiwgImZ1bGZpbGwiLCAiX19hc3luY0RlbGVnYXRvciIsICJwIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZCIsICJSZXN1bHRBc3luYyIsICJfUmVzdWx0QXN5bmMiLCAicmVzIiwgInByb21pc2UiLCAibmV3UHJvbWlzZSIsICJ2YWx1ZSIsICJPayIsICJlcnJvckZuIiwgImUiLCAiRXJyIiwgImZuIiwgImFyZ3MiLCAiX19hd2FpdGVyIiwgImVycm9yIiwgImFzeW5jUmVzdWx0TGlzdCIsICJjb21iaW5lUmVzdWx0QXN5bmNMaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzIiwgImYiLCAibmV3UmVzIiwgIm5ld1ZhbHVlIiwgIm9rIiwgIl9lcnIiLCAidCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiX19hc3luY0RlbGVnYXRvciIsICJfX2FzeW5jVmFsdWVzIiwgInN1Y2Nlc3NDYWxsYmFjayIsICJmYWlsdXJlQ2FsbGJhY2siLCAicmVzdWx0IiwgImVyckFzeW5jIiwgIm9rQXN5bmMiLCAiZXJyIiwgImZyb21Qcm9taXNlIiwgImZyb21TYWZlUHJvbWlzZSIsICJmcm9tQXN5bmNUaHJvd2FibGUiLCAiY29tYmluZVJlc3VsdExpc3QiLCAicmVzdWx0TGlzdCIsICJhY2MiLCAibGlzdCIsICJjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMiLCAiUmVzdWx0IiwgImZyb21UaHJvd2FibGUiLCAiY29tYmluZSIsICJjb21iaW5lV2l0aEFsbEVycm9ycyIsICJPayIsICJ2YWx1ZSIsICJmIiwgIm9rIiwgIl9mIiwgIl92YWx1ZSIsICJSZXN1bHRBc3luYyIsICJfdiIsICJfZXJyIiwgIl8iLCAiY29uZmlnIiwgImNyZWF0ZU5ldmVyVGhyb3dFcnJvciIsICJFcnIiLCAiZXJyb3IiLCAiZXJyIiwgImVyckFzeW5jIiwgInYiLCAiX29rIiwgInNlbGYiLCAiZnJvbVRocm93YWJsZSIsICJSZXN1bHQiLCAiaW1wb3J0X2x1Zmlfc2pjbCIsICJCYXNlRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgImNhdXNlIiwgImNvbnRleHQiLCAiX19wdWJsaWNGaWVsZCIsICJDcnlwdG9FcnJvciIsICJCYXNlRXJyb3IiLCAiRW5jcnlwdGlvbkVycm9yIiwgIkNyeXB0b0Vycm9yIiwgIl9fcHVibGljRmllbGQiLCAiZW5zdXJlRXJyb3IiLCAidmFsdWUiLCAic3RyaW5naWZpZWQiLCAiZW5jcnlwdCIsICJrZXkiLCAidmFsdWUiLCAiZW5jcnlwdGVkIiwgInNqY2wiLCAiRW5jb2RlIiwgIm9rQXN5bmMiLCAiZXJyb3IiLCAiZXJyQXN5bmMiLCAiRW5jcnlwdGlvbkVycm9yIiwgImVuc3VyZUVycm9yIiwgImVuY3J5cHQiLCAia2V5IiwgInZhbHVlIiwgImltcG9ydEtleSIsICJpbXBvcnRlZEtleSIsICJpdiIsICJSZXN1bHRBc3luYyIsICJlcnJvciIsICJFbmNyeXB0aW9uRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiZW5jcnlwdGVkIiwgIm9rQXN5bmMiLCAiRGVjb2RlIiwgIkNyeXB0b0Vycm9yIiwgImVuY3J5cHQiLCAia2V5IiwgInZhbHVlIiwgImFsZ28iLCAiaW1wb3J0X2V2ZW50cyIsICJldmVudHMiLCAiRXZlbnRFbWl0dGVyIiwgImluaXQiLCAiZXZlbnRzIiwgImVycm9yIiwgIldvcmtlckVycm9yIiwgIkJhc2VFcnJvciIsICJXb3JrZXJVbmRlZmluZWRQYXJhbWV0ZXJFcnJvciIsICJXb3JrZXJFcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgIldvcmtlclVwbG9hZEFscmVhZHlGYWlsZWRFcnJvciIsICJXb3JrZXJFcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImlzSW5pdGlhdGVkIiwgImV2ZW50IiwgImluaXQiLCAibHVmaUZpbGUiLCAiY2h1bmsiLCAiYWxnbyIsICJlbmNyeXB0IiwgImVuY3J5cHRlZERhdGEiLCAiZXJyb3IiLCAiV29ya2VyVXBsb2FkQWxyZWFkeUZhaWxlZEVycm9yIiwgIldvcmtlclVuZGVmaW5lZFBhcmFtZXRlckVycm9yIl0KfQo= diff --git a/themes/default/public/js/worker/infos.js b/themes/default/public/js/worker/infos.js index 125d862..bf16fc3 100644 --- a/themes/default/public/js/worker/infos.js +++ b/themes/default/public/js/worker/infos.js @@ -1 +1,2 @@ -var vt=Object.create;var xe=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var Et=Object.getPrototypeOf,At=Object.prototype.hasOwnProperty;var Ot=(t,e,r)=>e in t?xe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Lt=(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 Ie=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var xt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of wt(e))!At.call(t,o)&&o!==r&&xe(t,o,{get:()=>e[o],enumerable:!(n=gt(e,o))||n.enumerable});return t};var Me=(t,e,r)=>(r=t!=null?vt(Et(t)):{},xt(e||!t||!t.__esModule?xe(r,"default",{value:t,enumerable:!0}):r,t));var P=(t,e,r)=>Ot(t,typeof e!="symbol"?e+"":e,r);var Ve=Ie((Cr,be)=>{"use strict";var X=typeof Reflect=="object"?Reflect:null,Fe=X&&typeof X.apply=="function"?X.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},pe;X&&typeof X.ownKeys=="function"?pe=X.ownKeys:Object.getOwnPropertySymbols?pe=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:pe=function(e){return Object.getOwnPropertyNames(e)};function kt(t){console&&console.warn&&console.warn(t)}var ze=Number.isNaN||function(e){return e!==e};function p(){p.init.call(this)}be.exports=p;be.exports.once=It;p.EventEmitter=p;p.prototype._events=void 0;p.prototype._eventsCount=0;p.prototype._maxListeners=void 0;var Je=10;function me(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(p,"defaultMaxListeners",{enumerable:!0,get:function(){return Je},set:function(t){if(typeof t!="number"||t<0||ze(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Je=t}});p.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};p.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||ze(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 He(t){return t._maxListeners===void 0?p.defaultMaxListeners:t._maxListeners}p.prototype.getMaxListeners=function(){return He(this)};p.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=i[e];if(u===void 0)return!1;if(typeof u=="function")Fe(u,this,r);else for(var f=u.length,h=Ye(u,f),n=0;n0&&s.length>o&&!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,kt(a)}return t}p.prototype.addListener=function(e,r){return Ke(this,e,r,!1)};p.prototype.on=p.prototype.addListener;p.prototype.prependListener=function(e,r){return Ke(this,e,r,!0)};function Ct(){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 Xe(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},o=Ct.bind(n);return o.listener=r,n.wrapFn=o,o}p.prototype.once=function(e,r){return me(r),this.on(e,Xe(this,e,r)),this};p.prototype.prependOnceListener=function(e,r){return me(r),this.prependListener(e,Xe(this,e,r)),this};p.prototype.removeListener=function(e,r){var n,o,i,s,a;if(me(r),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){a=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():Tt(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||r)}return this};p.prototype.off=p.prototype.removeListener;p.prototype.removeAllListeners=function(e){var r,n,o;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 i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,r[o]);return this};function Ge(t,e,r){var n=t._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?r?[o.listener||o]:[o]:r?Pt(o):Ye(o,o.length)}p.prototype.listeners=function(e){return Ge(this,e,!0)};p.prototype.rawListeners=function(e){return Ge(this,e,!1)};p.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):$e.call(t,e)};p.prototype.listenerCount=$e;function $e(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}p.prototype.eventNames=function(){return this._eventsCount>0?pe(this._events):[]};function Ye(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,o,i=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),o=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=i[r>>>24]<<24^i[r>>16&255]<<16^i[r>>8&255]<<8^i[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],o[e]=4>=t||4>e?r:s[0][i[r>>>24]]^s[1][i[r>>16&255]]^s[2][i[r>>8&255]]^s[3][i[r&255]]};c.cipher.aes.prototype={encrypt:function(t){return rt(this,t,0)},decrypt:function(t){return rt(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],o,i,s,a=[],u=[],f,h,l,y;for(o=0;256>o;o++)u[(a[o]=o<<1^283*(o>>7))^o]=o;for(i=s=0;!r[i];i^=f||1,s=u[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[i]=l,n[l]=i,h=a[o=a[f=a[i]]],y=16843009*h^65537*o^257*f^16843008*i,h=257*a[l]^16843008*l,o=0;4>o;o++)t[o][i]=h=h<<24^h>>>8,e[o][l]=y=y<<24^y>>>8;for(o=0;5>o;o++)t[o]=t[o].slice(0),e[o]=e[o].slice(0)}};function rt(t,e,r){if(e.length!==4)throw new c.exception.invalid("invalid aes block size");var n=t.b[r],o=e[0]^n[0],i=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,l,y=4,d=[0,0,0,0];a=t.w[r],t=a[0];var g=a[1],b=a[2],R=a[3],j=a[4];for(l=0;l>>24]^g[i>>16&255]^b[s>>8&255]^R[e&255]^n[y],u=t[i>>>24]^g[s>>16&255]^b[e>>8&255]^R[o&255]^n[y+1],f=t[s>>>24]^g[e>>16&255]^b[o>>8&255]^R[i&255]^n[y+2],e=t[e>>>24]^g[o>>16&255]^b[i>>8&255]^R[s&255]^n[y+3],y+=4,o=a,i=u,s=f;for(l=0;4>l;l++)d[r?3&-l:l]=j[o>>>24]<<24^j[i>>16&255]<<16^j[s>>8&255]<<8^j[e&255]^n[y++],a=o,o=i,i=s,s=e,e=a;return d}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[o]<<32-e;return o=t.length?t[t.length-1]:0,t=c.bitArray.getPartial(o),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,o;for(n=0;n>>8>>>8>>>8),o<<=8;return decodeURIComponent(escape(e))},toBits:function(t){t=unescape(encodeURIComponent(t));var e=[],r,n=0;for(r=0;r>>o)>>>26),6>o?(s=t[r]<<6-o,o+=26,r++):(s<<=6,o-=6);for(;n.length&3&&!e;)n+="=";return n},toBits:function(t,e){t=t.replace(/\s|=/g,"");var r=[],n,o=0,i=c.codec.base64.S,s=0,a;for(e&&(i=i.substr(0,62)+"-_"),n=0;na)throw new c.exception.invalid("this isn't base64!");26>>o),s=a<<32-o):(o+=6,s^=a<<32-o)}return o&56&&r.push(c.bitArray.partial(o&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(o=!0,n=2;n*n<=r;n++)if(r%n===0){o=!1;break}o&&(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,o=this.g,i=this.b,s=o[0],a=o[1],u=o[2],f=o[3],h=o[4],l=o[5],y=o[6],d=o[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+d+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(y^h&(l^y))+i[e],d=y,y=l,l=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;o[0]=o[0]+s|0,o[1]=o[1]+a|0,o[2]=o[2]+u|0,o[3]=o[3]+f|0,o[4]=o[4]+h|0,o[5]=o[5]+l|0,o[6]=o[6]+y|0,o[7]=o[7]+d|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(i=!0,o=2;o*o<=n;o++)if(n%o===0){i=!1;break}i&&(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,o=this.b,i=n[0],s=n[1],a=n[2],u=n[3],f=n[4],h=n[5],l=n[6],y=n[7],d=n[8],g=n[9],b=n[10],R=n[11],j=n[12],fe=n[13],Ce=n[14],he=n[15],A;if(typeof Uint32Array<"u"){A=Array(160);for(var w=0;32>w;w++)A[w]=t[w]}else A=t;var w=i,x=s,V=a,z=u,Q=f,H=h,Ee=l,Z=y,k=d,_=g,le=b,ee=R,de=j,te=fe,Ae=Ce,re=he;for(t=0;80>t;t++){if(16>t)e=A[2*t],r=A[2*t+1];else{r=A[2*(t-15)];var v=A[2*(t-15)+1];e=(v<<31|r>>>1)^(v<<24|r>>>8)^r>>>7;var C=(r<<31|v>>>1)^(r<<24|v>>>8)^(r<<25|v>>>7);r=A[2*(t-2)];var T=A[2*(t-2)+1],v=(T<<13|r>>>19)^(r<<3|T>>>29)^r>>>6,T=(r<<13|T>>>19)^(T<<3|r>>>29)^(r<<26|T>>>6),Oe=A[2*(t-7)],Le=A[2*(t-16)],ne=A[2*(t-16)+1];r=C+A[2*(t-7)+1],e=e+Oe+(r>>>0>>0?1:0),r+=T,e+=v+(r>>>0>>0?1:0),r+=ne,e+=Le+(r>>>0>>0?1:0)}A[2*t]=e|=0,A[2*t+1]=r|=0;var Oe=k&le^~k&de,Te=_&ee^~_&te,T=w&V^w&Q^V&Q,mt=x&z^x&H^z&H,Le=(x<<4|w>>>28)^(w<<30|x>>>2)^(w<<25|x>>>7),ne=(w<<4|x>>>28)^(x<<30|w>>>2)^(x<<25|w>>>7),yt=o[2*t],Pe=o[2*t+1],v=re+((k<<18|_>>>14)^(k<<14|_>>>18)^(_<<23|k>>>9)),C=Ae+((_<<18|k>>>14)^(_<<14|k>>>18)^(k<<23|_>>>9))+(v>>>0>>0?1:0),v=v+Te,C=C+(Oe+(v>>>0>>0?1:0)),v=v+Pe,C=C+(yt+(v>>>0>>0?1:0)),v=v+r|0,C=C+(e+(v>>>0>>0?1:0));r=ne+mt,e=Le+T+(r>>>0>>0?1:0),Ae=de,re=te,de=le,te=ee,le=k,ee=_,_=Z+v|0,k=Ee+C+(_>>>0>>0?1:0)|0,Ee=Q,Z=H,Q=V,H=z,V=w,z=x,x=v+r|0,w=C+e+(x>>>0>>0?1:0)|0}s=n[1]=s+x|0,n[0]=i+w+(s>>>0>>0?1:0)|0,u=n[3]=u+z|0,n[2]=a+V+(u>>>0>>0?1:0)|0,h=n[5]=h+H|0,n[4]=f+Q+(h>>>0>>0?1:0)|0,y=n[7]=y+Z|0,n[6]=l+Ee+(y>>>0>>0?1:0)|0,g=n[9]=g+_|0,n[8]=d+k+(g>>>0<_>>>0?1:0)|0,R=n[11]=R+ee|0,n[10]=b+le+(R>>>0>>0?1:0)|0,fe=n[13]=fe+te|0,n[12]=j+de+(fe>>>0>>0?1:0)|0,he=n[15]=he+re|0,n[14]=Ce+Ae+(he>>>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(i=2;4>i&&f>>>8*i;i++);return i<15-u&&(i=15-u),r=a.clamp(r,8*(15-i)),e=c.mode.ccm.U(t,e,r,n,o,i),s=c.mode.ccm.V(t,s,r,e,o,i),a.concat(s.data,s.tag)},decrypt:function(t,e,r,n,o){o=o||64,n=n||[];var i=c.bitArray,s=i.bitLength(r)/8,f=i.bitLength(e),a=i.clamp(e,f-o),u=i.bitSlice(e,f-o),f=(f-o)/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=i.clamp(r,8*(15-e)),a=c.mode.ccm.V(t,a,r,u,o,e),t=c.mode.ccm.U(t,a.data,r,n,o,e),!i.equal(a.tag,t))throw new c.exception.corrupt("ccm: tag doesn't match");return a.data},ma:function(t,e,r,n,o,i){var s=[],a=c.bitArray,u=a.P;if(n=[a.partial(8,(e.length?64:0)|n-2<<2|i-1)],n=a.concat(n,r),n[3]|=o,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;eo||16h&&(c.mode.ccm.da(s/u),h+=l),r[3]++,o=t.encrypt(r),e[s]^=o[0],e[s+1]^=o[1],e[s+2]^=o[2],e[s+3]^=o[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,o=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>o&&(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)),o=o||c.misc.hmac,t=new o(t);var i,s,a,u,f=[],h=c.bitArray;for(u=1;32*f.length<(n||1);u++){for(o=i=t.encrypt(h.concat(e,[u])),s=1;ss;s++)o.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=i),this.N++,this.b=c.hash.sha256.hash(this.b.concat(o)),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,i,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,i,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&&nt("seeded",Math.max(this.u,this.i)),nt("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,o=this.J[t],i=[];for(n in o)o.hasOwnProperty(n)&&o[n]===e&&i.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(ve=typeof Y<"u"&&Y.exports){try{ge=Lt("crypto")}catch{ge=null}ve=ye=ge}if(ve&&ye.randomBytes)ae=ye.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,ye,ue,ve,ge;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 o=c.json,i=o.j({iv:c.random.randomWords(4,0)},o.defaults),s;if(o.j(i,r),r=i.adata,typeof i.salt=="string"&&(i.salt=c.codec.base64.toBits(i.salt)),typeof i.iv=="string"&&(i.iv=c.codec.base64.toBits(i.iv)),!c.mode[i.mode]||!c.cipher[i.cipher]||typeof t=="string"&&100>=i.iter||i.ts!==64&&i.ts!==96&&i.ts!==128||i.ks!==128&&i.ks!==192&&i.ks!==256||2>i.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||4{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:o}};function K(t,e,r,n){function o(i){return i instanceof r?i:new r(function(s){s(i)})}return new(r||(r=Promise))(function(i,s){function a(h){try{f(n.next(h))}catch(l){s(l)}}function u(h){try{f(n.throw(h))}catch(l){s(l)}}function f(h){h.done?i(h.value):o(h.value).then(a,u)}f((n=n.apply(t,e||[])).next())})}function Ue(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 I(t){return this instanceof I?(this.v=t,this):new I(t)}function je(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(d){return function(g){return Promise.resolve(g).then(d,l)}}function a(d,g){n[d]&&(o[d]=function(b){return new Promise(function(R,j){i.push([d,b,R,j])>1||u(d,b)})},g&&(o[d]=g(o[d])))}function u(d,g){try{f(n[d](g))}catch(b){y(i[0][3],b)}}function f(d){d.value instanceof I?Promise.resolve(d.value.v).then(h,l):y(i[0][2],d)}function h(d){u("next",d)}function l(d){u("throw",d)}function y(d,g){d(g),i.shift(),i.length&&u(i[0][0],i[0][1])}}function bt(t){var e,r;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=t[o]?function(s){return(r=!r)?{value:I(t[o](s)),done:!1}:i?i(s):s}:i}}function Dt(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 Ue=="function"?Ue(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=t[i]&&function(s){return new Promise(function(a,u){s=t[i](s),o(a,u,s.done,s.value)})}}function o(i,s,a,u){Promise.resolve(u).then(function(f){i({value:f,done:a})},s)}}var E=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new D(n));return new t(r)}static fromPromise(e,r){let n=e.then(o=>new D(o)).catch(o=>new S(r(o)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(K(this,void 0,void 0,function*(){try{return new D(yield e(...n))}catch(o){return new S(r?r(o):o)}}))}static combine(e){return St(e)}static combineWithAllErrors(e){return Rt(e)}map(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){return r.isErr()?new S(r.error):new D(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);let n=yield e(r.value);return n.isErr()?new S(n.error):new D(r.value)})))}andTee(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);try{yield e(r.value)}catch{}return new D(r.value)})))}mapErr(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){return r.isOk()?new D(r.value):new S(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new S(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new D(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 je(this,arguments,function*(){return yield I(yield I(yield*bt(Dt(yield I(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return je(this,arguments,function*(){let r=yield I(this._promise);return r.isErr()&&(yield yield I(O(r.error))),yield I(r.value)})}},M=t=>new E(Promise.resolve(new D(t))),O=t=>new E(Promise.resolve(new S(t))),or=E.fromPromise,ir=E.fromSafePromise,sr=E.fromThrowable,Be=t=>{let e=F([]);for(let r of t)if(r.isErr()){e=N(r.error);break}else e.map(n=>n.push(r.value));return e},St=t=>E.fromSafePromise(Promise.all(t)).andThen(Be),We=t=>{let e=F([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=N([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},Rt=t=>E.fromSafePromise(Promise.all(t)).andThen(We),_e;(function(t){function e(o,i){return(...s)=>{try{let a=o(...s);return F(a)}catch(a){return N(i?i(a):a)}}}t.fromThrowable=e;function r(o){return Be(o)}t.combine=r;function n(o){return We(o)}t.combineWithAllErrors=n})(_e||(_e={}));var F=t=>new D(t);function N(t){return new S(t)}var D=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return F(e(this.value))}mapErr(e){return F(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 F(this.value)}orElse(e){return F(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return E.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 Ne("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},S=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return N(this.error)}mapErr(e){return N(e(this.error))}andThrough(e){return N(this.error)}andTee(e){return N(this.error)}andThen(e){return N(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return O(this.error)}asyncAndThrough(e){return O(this.error)}asyncMap(e){return O(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield N(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw Ne("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},cr=_e.fromThrowable;var W=class extends Error{constructor(r,n={}){let{cause:o,context:i}=n;super(r,{cause:o});P(this,"context");this.name=this.constructor.name,this.context=i}};var U=class extends W{};var oe=class extends U{constructor(){super(...arguments);P(this,"message","An error occured while trying to connect to WebSocket")}};var J=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)};var Ze=Me(Ve());var m=new Ze.default,G=(t,e)=>(Object.assign(t,e),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:t}),t);var et=()=>{m.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),m.once("OPERATION_FAILED",t=>{self.postMessage({event:"OPERATION_FAILED",error:t})})};var $=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),o="";for(let i=0;i>2]+this._charset[(n[i]&3)<<4|n[i+1]>>4]+this._charset[(n[i+1]&15)<<2|n[i+2]>>6]+this._charset[n[i+2]&63];return r%3==2?(o=o.substring(0,o.length-1),this._noPadding||(o+="=")):r%3==1&&(o=o.substring(0,o.length-2),this._noPadding||(o+="==")),o}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),o,i,s,a,u=0,f=0;for(;u>4,n[u++]=(i&15)<<4|s>>2,n[u++]=(s&3)<<6|a;return n.buffer}};var jt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function ie(t){return jt.Decode(t)}var Nt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function De(t){return Nt.Decode(t)}var ct=Me(it());var B=class extends W{};var q=class extends B{constructor(){super(...arguments);P(this,"message","Unable to decrypt the provided data")}};var at=(t,e)=>{try{let r=typeof e=="string"?e:e.data;return M(ie(ct.default.decrypt(t,r)))}catch(r){return O(new q(void 0,{cause:J(r)}))}};var ut=(t,e)=>zt(t).andThen(r=>E.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:e.iv},r,e.data),n=>new q(void 0,{cause:J(n)})));var zt=t=>E.fromPromise(crypto.subtle.importKey("raw",De(t),{name:"AES-GCM"},!1,["encrypt","decrypt"]),e=>new B("Unable to import cryptography key",{cause:J(e)}));var ft=(t,e)=>e.algo===void 0||e.algo===0?at(t,e):ut(t,e);var L={},ht=5,Xt=t=>(m.emit("UPLOAD_CANCELLED",t.success),M(void 0)),Gt=(t,e)=>{let r=t.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let o=JSON.parse(n);if(tr(o)){let i=r.shift();if(i){let s=JSON.parse(i);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=ie(s.data)),ft(e.keys.client,s).andThen(a=>{let u=typeof a=="string"?new TextEncoder().encode(a).buffer:a;return o.part===0?(G(e,{chunksReady:e.chunksReady+1,delAtFirstView:o.del_at_first_view,delay:o.delay,name:o.name,size:o.size,totalChunks:o.total,type:o.type,zipped:o.zipped}),m.emit("DOWNLOAD_STARTED")):G(e,{chunksReady:e.chunksReady+1}),m.emit("CHUNK_DOWNLOADED",u,o.part),e.chunksReady===o.total?Vt(e).andThen(()=>(m.emit("DOWNLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED"),M(void 0))):M(void 0)})}else{let s=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",s),O(s)}}else{let i=new U(o.msg);return m.emit("OPERATION_FAILED",i),O(i)}}else{let o=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",o),O(o)}},$t=(t,e)=>{if(t.success)return t.j===0&&(G(e,{keys:{client:e.keys.client,server:t.short},actionToken:t.token,queueIndex:t.i}),m.emit("UPLOAD_STARTED")),G(e,{chunksReady:e.chunksReady+1,createdAt:t.created_at}),m.emit("CHUNK_UPLOADED"),e.chunksReady===e.totalChunks&&(G(e,{uploadStatus:1}),m.emit("UPLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED")),M(void 0);{let r=new U(t.msg);return m.emit("OPERATION_FAILED",r),O(r)}},Yt=(t,e)=>{let r=er(t.data),n;if(r)if(!r.action&&r.msg){let o=new U(r.msg);return m.emit("OPERATION_FAILED",o),O(o)}else"delay"in r?n=$t(r,e):n=Xt(r);else n=Gt(t.data,e);return n},qt=t=>L!==void 0&&L[t]!==void 0&&L[t].readyState===WebSocket.CONNECTING,Re=t=>L!==void 0&&L[t]!==void 0&&L[t].readyState===WebSocket.OPEN;var lt=(t,e)=>{let r;return t.password?r={part:e,file_pwd:t.password}:r={part:e},ke(we(t),t,JSON.stringify(r))},Vt=t=>{let e;return t.password?e={ended:!0,file_pwd:t.password}:e={ended:!0},ke(we(t),t,JSON.stringify(e))};var ke=(t,e,r)=>Re(t)?(L[t].send(r),M(void 0)):dt(t).andThen(()=>(L[t].onmessage=n=>Yt(n,e),ke(t,e,r))),dt=(t,e=0)=>(!Re(t)&&!qt(t)&&(L[t]=new WebSocket(t),m.once("SOCKET_OPERATION_TERMINATED",()=>{L[t].close()}),m.once("OPERATION_FAILED",()=>{m.emit("SOCKET_OPERATION_TERMINATED")}),L[t].onopen=()=>{m.emit("SOCKET_OPENED")},L[t].onclose=()=>{},L[t].onerror=()=>++e<=ht?(console.error(`An error happened while trying to connect to WebSocket ${t}. Trying again. ${e} / ${ht}`),dt(t,e)):(m.emit("SOCKET_ONERROR"),O(new oe(`Unable to connect to WebSocket ${t}.`)))),Qt(t).andThen(()=>M(t)).orElse(r=>O(r))),Qt=t=>E.fromPromise(new Promise((e,r)=>{Re(t)?e(void 0):(m.once("SOCKET_OPENED",()=>{e(void 0)}),m.on("SOCKET_ONERROR",()=>{r(new oe)}))}),e=>J(e));var Zt=(t,e)=>{let r=new URL(t);return r.protocol=r.protocol==="http:"?"ws:":"wss:",r.pathname+=e,new URL(r.origin+r.pathname)},we=t=>Zt(new URL(t.serverUrl),"download"+`/${t.keys.server}`).toString();var er=t=>{try{let e=JSON.parse(t);if(e&&typeof e=="object")return e}catch{}return!1},tr=t=>typeof t=="object"&&t!==null&&!("msg"in t);var pt=!1;self.onmessage=t=>{pt||(et(),pt=!0),m.on("DOWNLOAD_STARTED",()=>{L[we(t.data.args.lufiFile)].close(),self.postMessage({event:"INFOS_RETRIEVED"})}),rr(t.data).mapErr(e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})};var rr=t=>lt(t.args.lufiFile,0); +var vt=Object.create;var xe=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var Et=Object.getPrototypeOf,At=Object.prototype.hasOwnProperty;var Ot=(t,e,r)=>e in t?xe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Lt=(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 Ie=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var xt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of wt(e))!At.call(t,o)&&o!==r&&xe(t,o,{get:()=>e[o],enumerable:!(n=gt(e,o))||n.enumerable});return t};var Me=(t,e,r)=>(r=t!=null?vt(Et(t)):{},xt(e||!t||!t.__esModule?xe(r,"default",{value:t,enumerable:!0}):r,t));var T=(t,e,r)=>Ot(t,typeof e!="symbol"?e+"":e,r);var qe=Ie((kr,De)=>{"use strict";var X=typeof Reflect=="object"?Reflect:null,Fe=X&&typeof X.apply=="function"?X.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},pe;X&&typeof X.ownKeys=="function"?pe=X.ownKeys:Object.getOwnPropertySymbols?pe=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:pe=function(e){return Object.getOwnPropertyNames(e)};function Ct(t){console&&console.warn&&console.warn(t)}var He=Number.isNaN||function(e){return e!==e};function p(){p.init.call(this)}De.exports=p;De.exports.once=It;p.EventEmitter=p;p.prototype._events=void 0;p.prototype._eventsCount=0;p.prototype._maxListeners=void 0;var Je=10;function me(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(p,"defaultMaxListeners",{enumerable:!0,get:function(){return Je},set:function(t){if(typeof t!="number"||t<0||He(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Je=t}});p.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};p.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||He(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 ze(t){return t._maxListeners===void 0?p.defaultMaxListeners:t._maxListeners}p.prototype.getMaxListeners=function(){return ze(this)};p.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=i[e];if(u===void 0)return!1;if(typeof u=="function")Fe(u,this,r);else for(var f=u.length,h=Ve(u,f),n=0;n0&&s.length>o&&!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,Ct(a)}return t}p.prototype.addListener=function(e,r){return Ke(this,e,r,!1)};p.prototype.on=p.prototype.addListener;p.prototype.prependListener=function(e,r){return Ke(this,e,r,!0)};function kt(){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 Xe(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},o=kt.bind(n);return o.listener=r,n.wrapFn=o,o}p.prototype.once=function(e,r){return me(r),this.on(e,Xe(this,e,r)),this};p.prototype.prependOnceListener=function(e,r){return me(r),this.prependListener(e,Xe(this,e,r)),this};p.prototype.removeListener=function(e,r){var n,o,i,s,a;if(me(r),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){a=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():Pt(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||r)}return this};p.prototype.off=p.prototype.removeListener;p.prototype.removeAllListeners=function(e){var r,n,o;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 i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,r[o]);return this};function Ge(t,e,r){var n=t._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?r?[o.listener||o]:[o]:r?Tt(o):Ve(o,o.length)}p.prototype.listeners=function(e){return Ge(this,e,!0)};p.prototype.rawListeners=function(e){return Ge(this,e,!1)};p.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):$e.call(t,e)};p.prototype.listenerCount=$e;function $e(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}p.prototype.eventNames=function(){return this._eventsCount>0?pe(this._events):[]};function Ve(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,o,i=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),o=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=i[r>>>24]<<24^i[r>>16&255]<<16^i[r>>8&255]<<8^i[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],o[e]=4>=t||4>e?r:s[0][i[r>>>24]]^s[1][i[r>>16&255]]^s[2][i[r>>8&255]]^s[3][i[r&255]]};c.cipher.aes.prototype={encrypt:function(t){return rt(this,t,0)},decrypt:function(t){return rt(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],o,i,s,a=[],u=[],f,h,l,y;for(o=0;256>o;o++)u[(a[o]=o<<1^283*(o>>7))^o]=o;for(i=s=0;!r[i];i^=f||1,s=u[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[i]=l,n[l]=i,h=a[o=a[f=a[i]]],y=16843009*h^65537*o^257*f^16843008*i,h=257*a[l]^16843008*l,o=0;4>o;o++)t[o][i]=h=h<<24^h>>>8,e[o][l]=y=y<<24^y>>>8;for(o=0;5>o;o++)t[o]=t[o].slice(0),e[o]=e[o].slice(0)}};function rt(t,e,r){if(e.length!==4)throw new c.exception.invalid("invalid aes block size");var n=t.b[r],o=e[0]^n[0],i=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,l,y=4,d=[0,0,0,0];a=t.w[r],t=a[0];var g=a[1],D=a[2],R=a[3],j=a[4];for(l=0;l>>24]^g[i>>16&255]^D[s>>8&255]^R[e&255]^n[y],u=t[i>>>24]^g[s>>16&255]^D[e>>8&255]^R[o&255]^n[y+1],f=t[s>>>24]^g[e>>16&255]^D[o>>8&255]^R[i&255]^n[y+2],e=t[e>>>24]^g[o>>16&255]^D[i>>8&255]^R[s&255]^n[y+3],y+=4,o=a,i=u,s=f;for(l=0;4>l;l++)d[r?3&-l:l]=j[o>>>24]<<24^j[i>>16&255]<<16^j[s>>8&255]<<8^j[e&255]^n[y++],a=o,o=i,i=s,s=e,e=a;return d}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[o]<<32-e;return o=t.length?t[t.length-1]:0,t=c.bitArray.getPartial(o),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,o;for(n=0;n>>8>>>8>>>8),o<<=8;return decodeURIComponent(escape(e))},toBits:function(t){t=unescape(encodeURIComponent(t));var e=[],r,n=0;for(r=0;r>>o)>>>26),6>o?(s=t[r]<<6-o,o+=26,r++):(s<<=6,o-=6);for(;n.length&3&&!e;)n+="=";return n},toBits:function(t,e){t=t.replace(/\s|=/g,"");var r=[],n,o=0,i=c.codec.base64.S,s=0,a;for(e&&(i=i.substr(0,62)+"-_"),n=0;na)throw new c.exception.invalid("this isn't base64!");26>>o),s=a<<32-o):(o+=6,s^=a<<32-o)}return o&56&&r.push(c.bitArray.partial(o&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(o=!0,n=2;n*n<=r;n++)if(r%n===0){o=!1;break}o&&(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,o=this.g,i=this.b,s=o[0],a=o[1],u=o[2],f=o[3],h=o[4],l=o[5],y=o[6],d=o[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+d+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(y^h&(l^y))+i[e],d=y,y=l,l=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;o[0]=o[0]+s|0,o[1]=o[1]+a|0,o[2]=o[2]+u|0,o[3]=o[3]+f|0,o[4]=o[4]+h|0,o[5]=o[5]+l|0,o[6]=o[6]+y|0,o[7]=o[7]+d|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(i=!0,o=2;o*o<=n;o++)if(n%o===0){i=!1;break}i&&(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,o=this.b,i=n[0],s=n[1],a=n[2],u=n[3],f=n[4],h=n[5],l=n[6],y=n[7],d=n[8],g=n[9],D=n[10],R=n[11],j=n[12],fe=n[13],ke=n[14],he=n[15],A;if(typeof Uint32Array<"u"){A=Array(160);for(var w=0;32>w;w++)A[w]=t[w]}else A=t;var w=i,x=s,q=a,H=u,Q=f,z=h,Ee=l,Z=y,C=d,_=g,le=D,ee=R,de=j,te=fe,Ae=ke,re=he;for(t=0;80>t;t++){if(16>t)e=A[2*t],r=A[2*t+1];else{r=A[2*(t-15)];var v=A[2*(t-15)+1];e=(v<<31|r>>>1)^(v<<24|r>>>8)^r>>>7;var k=(r<<31|v>>>1)^(r<<24|v>>>8)^(r<<25|v>>>7);r=A[2*(t-2)];var P=A[2*(t-2)+1],v=(P<<13|r>>>19)^(r<<3|P>>>29)^r>>>6,P=(r<<13|P>>>19)^(P<<3|r>>>29)^(r<<26|P>>>6),Oe=A[2*(t-7)],Le=A[2*(t-16)],ne=A[2*(t-16)+1];r=k+A[2*(t-7)+1],e=e+Oe+(r>>>0>>0?1:0),r+=P,e+=v+(r>>>0

>>0?1:0),r+=ne,e+=Le+(r>>>0>>0?1:0)}A[2*t]=e|=0,A[2*t+1]=r|=0;var Oe=C&le^~C&de,Pe=_&ee^~_&te,P=w&q^w&Q^q&Q,mt=x&H^x&z^H&z,Le=(x<<4|w>>>28)^(w<<30|x>>>2)^(w<<25|x>>>7),ne=(w<<4|x>>>28)^(x<<30|w>>>2)^(x<<25|w>>>7),yt=o[2*t],Te=o[2*t+1],v=re+((C<<18|_>>>14)^(C<<14|_>>>18)^(_<<23|C>>>9)),k=Ae+((_<<18|C>>>14)^(_<<14|C>>>18)^(C<<23|_>>>9))+(v>>>0>>0?1:0),v=v+Pe,k=k+(Oe+(v>>>0>>0?1:0)),v=v+Te,k=k+(yt+(v>>>0>>0?1:0)),v=v+r|0,k=k+(e+(v>>>0>>0?1:0));r=ne+mt,e=Le+P+(r>>>0>>0?1:0),Ae=de,re=te,de=le,te=ee,le=C,ee=_,_=Z+v|0,C=Ee+k+(_>>>0>>0?1:0)|0,Ee=Q,Z=z,Q=q,z=H,q=w,H=x,x=v+r|0,w=k+e+(x>>>0>>0?1:0)|0}s=n[1]=s+x|0,n[0]=i+w+(s>>>0>>0?1:0)|0,u=n[3]=u+H|0,n[2]=a+q+(u>>>0>>0?1:0)|0,h=n[5]=h+z|0,n[4]=f+Q+(h>>>0>>0?1:0)|0,y=n[7]=y+Z|0,n[6]=l+Ee+(y>>>0>>0?1:0)|0,g=n[9]=g+_|0,n[8]=d+C+(g>>>0<_>>>0?1:0)|0,R=n[11]=R+ee|0,n[10]=D+le+(R>>>0>>0?1:0)|0,fe=n[13]=fe+te|0,n[12]=j+de+(fe>>>0>>0?1:0)|0,he=n[15]=he+re|0,n[14]=ke+Ae+(he>>>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(i=2;4>i&&f>>>8*i;i++);return i<15-u&&(i=15-u),r=a.clamp(r,8*(15-i)),e=c.mode.ccm.U(t,e,r,n,o,i),s=c.mode.ccm.V(t,s,r,e,o,i),a.concat(s.data,s.tag)},decrypt:function(t,e,r,n,o){o=o||64,n=n||[];var i=c.bitArray,s=i.bitLength(r)/8,f=i.bitLength(e),a=i.clamp(e,f-o),u=i.bitSlice(e,f-o),f=(f-o)/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=i.clamp(r,8*(15-e)),a=c.mode.ccm.V(t,a,r,u,o,e),t=c.mode.ccm.U(t,a.data,r,n,o,e),!i.equal(a.tag,t))throw new c.exception.corrupt("ccm: tag doesn't match");return a.data},ma:function(t,e,r,n,o,i){var s=[],a=c.bitArray,u=a.P;if(n=[a.partial(8,(e.length?64:0)|n-2<<2|i-1)],n=a.concat(n,r),n[3]|=o,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;eo||16h&&(c.mode.ccm.da(s/u),h+=l),r[3]++,o=t.encrypt(r),e[s]^=o[0],e[s+1]^=o[1],e[s+2]^=o[2],e[s+3]^=o[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,o=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>o&&(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)),o=o||c.misc.hmac,t=new o(t);var i,s,a,u,f=[],h=c.bitArray;for(u=1;32*f.length<(n||1);u++){for(o=i=t.encrypt(h.concat(e,[u])),s=1;ss;s++)o.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=i),this.N++,this.b=c.hash.sha256.hash(this.b.concat(o)),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,i,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,i,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&&nt("seeded",Math.max(this.u,this.i)),nt("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,o=this.J[t],i=[];for(n in o)o.hasOwnProperty(n)&&o[n]===e&&i.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(ve=typeof V<"u"&&V.exports){try{ge=Lt("crypto")}catch{ge=null}ve=ye=ge}if(ve&&ye.randomBytes)ae=ye.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,ye,ue,ve,ge;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 o=c.json,i=o.j({iv:c.random.randomWords(4,0)},o.defaults),s;if(o.j(i,r),r=i.adata,typeof i.salt=="string"&&(i.salt=c.codec.base64.toBits(i.salt)),typeof i.iv=="string"&&(i.iv=c.codec.base64.toBits(i.iv)),!c.mode[i.mode]||!c.cipher[i.cipher]||typeof t=="string"&&100>=i.iter||i.ts!==64&&i.ts!==96&&i.ts!==128||i.ks!==128&&i.ks!==192&&i.ks!==256||2>i.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||4{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:o}};function K(t,e,r,n){function o(i){return i instanceof r?i:new r(function(s){s(i)})}return new(r||(r=Promise))(function(i,s){function a(h){try{f(n.next(h))}catch(l){s(l)}}function u(h){try{f(n.throw(h))}catch(l){s(l)}}function f(h){h.done?i(h.value):o(h.value).then(a,u)}f((n=n.apply(t,e||[])).next())})}function Ue(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 I(t){return this instanceof I?(this.v=t,this):new I(t)}function je(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(d){return function(g){return Promise.resolve(g).then(d,l)}}function a(d,g){n[d]&&(o[d]=function(D){return new Promise(function(R,j){i.push([d,D,R,j])>1||u(d,D)})},g&&(o[d]=g(o[d])))}function u(d,g){try{f(n[d](g))}catch(D){y(i[0][3],D)}}function f(d){d.value instanceof I?Promise.resolve(d.value.v).then(h,l):y(i[0][2],d)}function h(d){u("next",d)}function l(d){u("throw",d)}function y(d,g){d(g),i.shift(),i.length&&u(i[0][0],i[0][1])}}function Dt(t){var e,r;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=t[o]?function(s){return(r=!r)?{value:I(t[o](s)),done:!1}:i?i(s):s}:i}}function bt(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 Ue=="function"?Ue(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=t[i]&&function(s){return new Promise(function(a,u){s=t[i](s),o(a,u,s.done,s.value)})}}function o(i,s,a,u){Promise.resolve(u).then(function(f){i({value:f,done:a})},s)}}var E=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new b(n));return new t(r)}static fromPromise(e,r){let n=e.then(o=>new b(o)).catch(o=>new S(r(o)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(K(this,void 0,void 0,function*(){try{return new b(yield e(...n))}catch(o){return new S(r?r(o):o)}}))}static combine(e){return St(e)}static combineWithAllErrors(e){return Rt(e)}map(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){return r.isErr()?new S(r.error):new b(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);let n=yield e(r.value);return n.isErr()?new S(n.error):new b(r.value)})))}andTee(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);try{yield e(r.value)}catch{}return new b(r.value)})))}mapErr(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){return r.isOk()?new b(r.value):new S(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new S(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new b(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 je(this,arguments,function*(){return yield I(yield I(yield*Dt(bt(yield I(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return je(this,arguments,function*(){let r=yield I(this._promise);return r.isErr()&&(yield yield I(O(r.error))),yield I(r.value)})}},M=t=>new E(Promise.resolve(new b(t))),O=t=>new E(Promise.resolve(new S(t))),or=E.fromPromise,ir=E.fromSafePromise,sr=E.fromThrowable,Be=t=>{let e=F([]);for(let r of t)if(r.isErr()){e=N(r.error);break}else e.map(n=>n.push(r.value));return e},St=t=>E.fromSafePromise(Promise.all(t)).andThen(Be),We=t=>{let e=F([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=N([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},Rt=t=>E.fromSafePromise(Promise.all(t)).andThen(We),_e;(function(t){function e(o,i){return(...s)=>{try{let a=o(...s);return F(a)}catch(a){return N(i?i(a):a)}}}t.fromThrowable=e;function r(o){return Be(o)}t.combine=r;function n(o){return We(o)}t.combineWithAllErrors=n})(_e||(_e={}));var F=t=>new b(t);function N(t){return new S(t)}var b=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return F(e(this.value))}mapErr(e){return F(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 F(this.value)}orElse(e){return F(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return E.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 Ne("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},S=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return N(this.error)}mapErr(e){return N(e(this.error))}andThrough(e){return N(this.error)}andTee(e){return N(this.error)}andThen(e){return N(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return O(this.error)}asyncAndThrough(e){return O(this.error)}asyncMap(e){return O(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield N(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw Ne("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},cr=_e.fromThrowable;var W=class extends Error{constructor(r,n={}){let{cause:o,context:i}=n;super(r,{cause:o});T(this,"context");this.name=this.constructor.name,this.context=i}};var U=class extends W{};var oe=class extends U{constructor(){super(...arguments);T(this,"message","An error occured while trying to connect to WebSocket")}};var J=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)};var Ze=Me(qe());var m=new Ze.default,G=(t,e)=>(Object.assign(t,e),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:t}),t);var et=()=>{m.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),m.once("OPERATION_FAILED",t=>{self.postMessage({event:"OPERATION_FAILED",error:t})})};var $=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),o="";for(let i=0;i>2]+this._charset[(n[i]&3)<<4|n[i+1]>>4]+this._charset[(n[i+1]&15)<<2|n[i+2]>>6]+this._charset[n[i+2]&63];return r%3==2?(o=o.substring(0,o.length-1),this._noPadding||(o+="=")):r%3==1&&(o=o.substring(0,o.length-2),this._noPadding||(o+="==")),o}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),o,i,s,a,u=0,f=0;for(;u>4,n[u++]=(i&15)<<4|s>>2,n[u++]=(s&3)<<6|a;return n.buffer}};var jt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function ie(t){return jt.Decode(t)}var Nt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function be(t){return Nt.Decode(t)}var ct=Me(it());var B=class extends W{};var Y=class extends B{constructor(){super(...arguments);T(this,"message","Unable to decrypt the provided data")}};var at=(t,e)=>{try{let r=typeof e=="string"?e:e.data;return M(ie(ct.default.decrypt(t,r)))}catch(r){return O(new Y(void 0,{cause:J(r)}))}};var ut=(t,e)=>Ht(t).andThen(r=>E.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:e.iv},r,e.data),n=>new Y(void 0,{cause:J(n)})));var Ht=t=>E.fromPromise(crypto.subtle.importKey("raw",be(t),{name:"AES-GCM"},!1,["encrypt","decrypt"]),e=>new B("Unable to import cryptography key",{cause:J(e)}));var ft=(t,e)=>e.algo===void 0||e.algo===0?at(t,e):ut(t,e);var L={},ht=5,Xt=t=>(m.emit("UPLOAD_CANCELLED",t.success),M(void 0)),Gt=(t,e)=>{let r=t.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let o=JSON.parse(n);if(tr(o)){let i=r.shift();if(i){let s=JSON.parse(i);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=ie(s.data)),ft(e.keys.client,s).andThen(a=>{let u=typeof a=="string"?new TextEncoder().encode(a).buffer:a;return o.part===0?(G(e,{chunksReady:e.chunksReady+1,delAtFirstView:o.del_at_first_view,delay:o.delay,name:o.name,size:o.size,totalChunks:o.total,type:o.type,zipped:o.zipped}),m.emit("DOWNLOAD_STARTED")):G(e,{chunksReady:e.chunksReady+1}),m.emit("CHUNK_DOWNLOADED",u,o.part),e.chunksReady===o.total?qt(e).andThen(()=>(m.emit("DOWNLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED"),M(void 0))):M(void 0)})}else{let s=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",s),O(s)}}else{let i=new U(o.msg);return m.emit("OPERATION_FAILED",i),O(i)}}else{let o=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",o),O(o)}},$t=(t,e)=>{if(t.success)return t.j===0&&(G(e,{keys:{client:e.keys.client,server:t.short},actionToken:t.token,queueIndex:t.i}),m.emit("UPLOAD_STARTED")),G(e,{chunksReady:e.chunksReady+1,createdAt:t.created_at}),m.emit("CHUNK_UPLOADED"),e.chunksReady===e.totalChunks&&(G(e,{uploadStatus:1}),m.emit("UPLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED")),M(void 0);{let r=new U(t.msg);return m.emit("OPERATION_FAILED",r),O(r)}},Vt=(t,e)=>{let r=er(t.data),n;if(r)if(!r.action&&r.msg){let o=new U(r.msg);return m.emit("OPERATION_FAILED",o),O(o)}else"delay"in r?n=$t(r,e):n=Xt(r);else n=Gt(t.data,e);return n},Yt=t=>L!==void 0&&L[t]!==void 0&&L[t].readyState===WebSocket.CONNECTING,Re=t=>L!==void 0&&L[t]!==void 0&&L[t].readyState===WebSocket.OPEN;var lt=(t,e)=>{let r;return t.password?r={part:e,file_pwd:t.password}:r={part:e},Ce(we(t),t,JSON.stringify(r))},qt=t=>{let e;return t.password?e={ended:!0,file_pwd:t.password}:e={ended:!0},Ce(we(t),t,JSON.stringify(e))};var Ce=(t,e,r)=>Re(t)?(L[t].send(r),M(void 0)):dt(t).andThen(()=>(L[t].onmessage=n=>Vt(n,e),Ce(t,e,r))),dt=(t,e=0)=>(!Re(t)&&!Yt(t)&&(L[t]=new WebSocket(t),m.once("SOCKET_OPERATION_TERMINATED",()=>{L[t].close()}),m.once("OPERATION_FAILED",()=>{m.emit("SOCKET_OPERATION_TERMINATED")}),L[t].onopen=()=>{m.emit("SOCKET_OPENED")},L[t].onclose=()=>{},L[t].onerror=()=>++e<=ht?(console.error(`An error happened while trying to connect to WebSocket ${t}. Trying again. ${e} / ${ht}`),dt(t,e)):(m.emit("SOCKET_ONERROR"),O(new oe(`Unable to connect to WebSocket ${t}.`)))),Qt(t).andThen(()=>M(t)).orElse(r=>O(r))),Qt=t=>E.fromPromise(new Promise((e,r)=>{Re(t)?e(void 0):(m.once("SOCKET_OPENED",()=>{e(void 0)}),m.on("SOCKET_ONERROR",()=>{r(new oe)}))}),e=>J(e));var Zt=(t,e)=>{let r=new URL(t);return r.protocol=r.protocol==="http:"?"ws:":"wss:",r.pathname+=e,new URL(r.origin+r.pathname)},we=t=>Zt(new URL(t.serverUrl),"download"+`/${t.keys.server}`).toString();var er=t=>{try{let e=JSON.parse(t);if(e&&typeof e=="object")return e}catch{}return!1},tr=t=>typeof t=="object"&&t!==null&&!("msg"in t);var pt=!1;self.onmessage=t=>{pt||(et(),pt=!0),m.on("DOWNLOAD_STARTED",()=>{L[we(t.data.args.lufiFile)].close(),self.postMessage({event:"INFOS_RETRIEVED"})}),rr(t.data).mapErr(e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})};var rr=t=>lt(t.args.lufiFile,0); +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbHVmaS1zamNsQDEuMC44L25vZGVfbW9kdWxlcy9sdWZpLXNqY2wvc2pjbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbmV2ZXJ0aHJvd0A4LjEuMS9ub2RlX21vZHVsZXMvbmV2ZXJ0aHJvdy9kaXN0L2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9lcnJvci9iYXNlLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWNvbm5lY3Rpb24tZXJyb3IudHMiLCAiLi4vLi4vc3JjL3V0aWxzLnRzIiwgIi4uLy4uL3NyYy93b3JrZXIvc2hhcmVkLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9hcnJheWJ1ZmZlci1lbmNvZGluZ0AxLjEuMC9ub2RlX21vZHVsZXMvYXJyYXlidWZmZXItZW5jb2Rpbmcvc3JjL2Jhc2U2NC9lbmNvZGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vYXJyYXlidWZmZXItZW5jb2RpbmdAMS4xLjAvbm9kZV9tb2R1bGVzL2FycmF5YnVmZmVyLWVuY29kaW5nL3NyYy9iYXNlNjQvc3RhbmRhcmQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2FycmF5YnVmZmVyLWVuY29kaW5nQDEuMS4wL25vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci1lbmNvZGluZy9zcmMvYmFzZTY0L3VybC50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by9zamNsLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by93ZWIudHMiLCAiLi4vLi4vc3JjL2FwaS9jcnlwdG8udHMiLCAiLi4vLi4vc3JjL2FwaS93ZWJzb2NrZXQudHMiLCAiLi4vLi4vc3JjL3dvcmtlci9pbmZvcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbm1vZHVsZS5leHBvcnRzLm9uY2UgPSBvbmNlO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25jZShlbWl0dGVyLCBuYW1lKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIHJlc29sdmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgaWYgKG5hbWUgIT09ICdlcnJvcicpIHtcbiAgICAgIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGVycm9yTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBoYW5kbGVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgJ2Vycm9yJywgaGFuZGxlciwgZmxhZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCBsaXN0ZW5lciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgIGVtaXR0ZXIub25jZShuYW1lLCBsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRXZlbnRUYXJnZXQgZG9lcyBub3QgaGF2ZSBgZXJyb3JgIGV2ZW50IHNlbWFudGljcyBsaWtlIE5vZGVcbiAgICAvLyBFdmVudEVtaXR0ZXJzLCB3ZSBkbyBub3QgbGlzdGVuIGZvciBgZXJyb3JgIGV2ZW50cyBoZXJlLlxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jdGlvbiB3cmFwTGlzdGVuZXIoYXJnKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGJ1aWx0aW4gYHsgb25jZTogdHJ1ZSB9YCBzdXBwb3J0IHNvIHdlXG4gICAgICAvLyBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LlxuICAgICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIHdyYXBMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lcihhcmcpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgZW1pdHRlcik7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjt2YXIgc2pjbD17Y2lwaGVyOnt9LGhhc2g6e30sa2V5ZXhjaGFuZ2U6e30sbW9kZTp7fSxtaXNjOnt9LGNvZGVjOnt9LGV4Y2VwdGlvbjp7Y29ycnVwdDpmdW5jdGlvbihhKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJDT1JSVVBUOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfSxpbnZhbGlkOmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIklOVkFMSUQ6IFwiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPWF9LGJ1ZzpmdW5jdGlvbihhKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJCVUc6IFwiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPWF9LG5vdFJlYWR5OmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIk5PVCBSRUFEWTogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX19fTtcbnNqY2wuY2lwaGVyLmFlcz1mdW5jdGlvbihhKXt0aGlzLndbMF1bMF1bMF18fHRoaXMuQygpO3ZhciBiLGMsZCxlLGY9dGhpcy53WzBdWzRdLGc9dGhpcy53WzFdO2I9YS5sZW5ndGg7dmFyIGg9MTtpZig0IT09YiYmNiE9PWImJjghPT1iKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiaW52YWxpZCBhZXMga2V5IHNpemVcIik7dGhpcy5iPVtkPWEuc2xpY2UoMCksZT1bXV07Zm9yKGE9YjthPDQqYisyODthKyspe2M9ZFthLTFdO2lmKDA9PT1hJWJ8fDg9PT1iJiY0PT09YSViKWM9ZltjPj4+MjRdPDwyNF5mW2M+PjE2JjI1NV08PDE2XmZbYz4+OCYyNTVdPDw4XmZbYyYyNTVdLDA9PT1hJWImJihjPWM8PDheYz4+PjI0Xmg8PDI0LGg9aDw8MV4yODMqKGg+PjcpKTtkW2FdPWRbYS1iXV5jfWZvcihiPTA7YTtiKyssYS0tKWM9ZFtiJjM/YTphLTRdLGVbYl09ND49YXx8ND5iP2M6Z1swXVtmW2M+Pj4yNF1dXmdbMV1bZltjPj4xNiYyNTVdXV5nWzJdW2ZbYz4+OCYyNTVdXV5nWzNdW2ZbYyZcbjI1NV1dfTtcbnNqY2wuY2lwaGVyLmFlcy5wcm90b3R5cGU9e2VuY3J5cHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFhKHRoaXMsYSwwKX0sZGVjcnlwdDpmdW5jdGlvbihhKXtyZXR1cm4gYWEodGhpcyxhLDEpfSx3OltbW10sW10sW10sW10sW11dLFtbXSxbXSxbXSxbXSxbXV1dLEM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLndbMF0sYj10aGlzLndbMV0sYz1hWzRdLGQ9Yls0XSxlLGYsZyxoPVtdLGs9W10sbixsLG0scDtmb3IoZT0wOzB4MTAwPmU7ZSsrKWtbKGhbZV09ZTw8MV4yODMqKGU+PjcpKV5lXT1lO2ZvcihmPWc9MDshY1tmXTtmXj1ufHwxLGc9a1tnXXx8MSlmb3IobT1nXmc8PDFeZzw8Ml5nPDwzXmc8PDQsbT1tPj44Xm0mMjU1Xjk5LGNbZl09bSxkW21dPWYsbD1oW2U9aFtuPWhbZl1dXSxwPTB4MTAxMDEwMSpsXjB4MTAwMDEqZV4weDEwMSpuXjB4MTAxMDEwMCpmLGw9MHgxMDEqaFttXV4weDEwMTAxMDAqbSxlPTA7ND5lO2UrKylhW2VdW2ZdPWw9bDw8MjRebD4+PjgsYltlXVttXT1wPXA8PDI0XnA+Pj44O2ZvcihlPVxuMDs1PmU7ZSsrKWFbZV09YVtlXS5zbGljZSgwKSxiW2VdPWJbZV0uc2xpY2UoMCl9fTtcbmZ1bmN0aW9uIGFhKGEsYixjKXtpZig0IT09Yi5sZW5ndGgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJpbnZhbGlkIGFlcyBibG9jayBzaXplXCIpO3ZhciBkPWEuYltjXSxlPWJbMF1eZFswXSxmPWJbYz8zOjFdXmRbMV0sZz1iWzJdXmRbMl07Yj1iW2M/MTozXV5kWzNdO3ZhciBoLGssbixsPWQubGVuZ3RoLzQtMixtLHA9NCx6PVswLDAsMCwwXTtoPWEud1tjXTthPWhbMF07dmFyIEE9aFsxXSxDPWhbMl0sQj1oWzNdLEQ9aFs0XTtmb3IobT0wO208bDttKyspaD1hW2U+Pj4yNF1eQVtmPj4xNiYyNTVdXkNbZz4+OCYyNTVdXkJbYiYyNTVdXmRbcF0saz1hW2Y+Pj4yNF1eQVtnPj4xNiYyNTVdXkNbYj4+OCYyNTVdXkJbZSYyNTVdXmRbcCsxXSxuPWFbZz4+PjI0XV5BW2I+PjE2JjI1NV1eQ1tlPj44JjI1NV1eQltmJjI1NV1eZFtwKzJdLGI9YVtiPj4+MjRdXkFbZT4+MTYmMjU1XV5DW2Y+PjgmMjU1XV5CW2cmMjU1XV5kW3ArM10scCs9NCxlPWgsZj1rLGc9bjtmb3IobT1cbjA7ND5tO20rKyl6W2M/MyYtbTptXT1EW2U+Pj4yNF08PDI0XkRbZj4+MTYmMjU1XTw8MTZeRFtnPj44JjI1NV08PDheRFtiJjI1NV1eZFtwKytdLGg9ZSxlPWYsZj1nLGc9YixiPWg7cmV0dXJuIHp9XG5zamNsLmJpdEFycmF5PXtiaXRTbGljZTpmdW5jdGlvbihhLGIsYyl7YT1zamNsLmJpdEFycmF5LlkoYS5zbGljZShiLzMyKSwzMi0oYiYzMSkpLnNsaWNlKDEpO3JldHVybiB2b2lkIDA9PT1jP2E6c2pjbC5iaXRBcnJheS5jbGFtcChhLGMtYil9LGV4dHJhY3Q6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU1hdGguZmxvb3IoLWItYyYzMSk7cmV0dXJuKChiK2MtMV5iKSYtMzI/YVtiLzMyfDBdPDwzMi1kXmFbYi8zMisxfDBdPj4+ZDphW2IvMzJ8MF0+Pj5kKSYoMTw8YyktMX0sY29uY2F0OmZ1bmN0aW9uKGEsYil7aWYoMD09PWEubGVuZ3RofHwwPT09Yi5sZW5ndGgpcmV0dXJuIGEuY29uY2F0KGIpO3ZhciBjPWFbYS5sZW5ndGgtMV0sZD1zamNsLmJpdEFycmF5LmdldFBhcnRpYWwoYyk7cmV0dXJuIDMyPT09ZD9hLmNvbmNhdChiKTpzamNsLmJpdEFycmF5LlkoYixkLGN8MCxhLnNsaWNlKDAsYS5sZW5ndGgtMSkpfSxiaXRMZW5ndGg6ZnVuY3Rpb24oYSl7dmFyIGI9YS5sZW5ndGg7cmV0dXJuIDA9PT1cbmI/MDozMiooYi0xKStzamNsLmJpdEFycmF5LmdldFBhcnRpYWwoYVtiLTFdKX0sY2xhbXA6ZnVuY3Rpb24oYSxiKXtpZigzMiphLmxlbmd0aDxiKXJldHVybiBhO2E9YS5zbGljZSgwLE1hdGguY2VpbChiLzMyKSk7dmFyIGM9YS5sZW5ndGg7Yj1iJjMxOzA8YyYmYiYmKGFbYy0xXT1zamNsLmJpdEFycmF5LnBhcnRpYWwoYixhW2MtMV0mMjE0NzQ4MzY0OD4+Yi0xLDEpKTtyZXR1cm4gYX0scGFydGlhbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIDMyPT09YT9iOihjP2J8MDpiPDwzMi1hKSsweDEwMDAwMDAwMDAwKmF9LGdldFBhcnRpYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgucm91bmQoYS8weDEwMDAwMDAwMDAwKXx8MzJ9LGVxdWFsOmZ1bmN0aW9uKGEsYil7aWYoc2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSkhPT1zamNsLmJpdEFycmF5LmJpdExlbmd0aChiKSlyZXR1cm4hMTt2YXIgYz0wLGQ7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKyljfD1hW2RdXmJbZF07cmV0dXJuIDA9PT1cbmN9LFk6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU7ZT0wO2Zvcih2b2lkIDA9PT1kJiYoZD1bXSk7MzI8PWI7Yi09MzIpZC5wdXNoKGMpLGM9MDtpZigwPT09YilyZXR1cm4gZC5jb25jYXQoYSk7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylkLnB1c2goY3xhW2VdPj4+YiksYz1hW2VdPDwzMi1iO2U9YS5sZW5ndGg/YVthLmxlbmd0aC0xXTowO2E9c2pjbC5iaXRBcnJheS5nZXRQYXJ0aWFsKGUpO2QucHVzaChzamNsLmJpdEFycmF5LnBhcnRpYWwoYithJjMxLDMyPGIrYT9jOmQucG9wKCksMSkpO3JldHVybiBkfSxQOmZ1bmN0aW9uKGEsYil7cmV0dXJuW2FbMF1eYlswXSxhWzFdXmJbMV0sYVsyXV5iWzJdLGFbM11eYlszXV19LGJ5dGVzd2FwTTpmdW5jdGlvbihhKXt2YXIgYixjO2ZvcihiPTA7YjxhLmxlbmd0aDsrK2IpYz1hW2JdLGFbYl09Yz4+PjI0fGM+Pj44JjB4ZmYwMHwoYyYweGZmMDApPDw4fGM8PDI0O3JldHVybiBhfX07XG5zamNsLmNvZGVjLnV0ZjhTdHJpbmc9e2Zyb21CaXRzOmZ1bmN0aW9uKGEpe3ZhciBiPVwiXCIsYz1zamNsLmJpdEFycmF5LmJpdExlbmd0aChhKSxkLGU7Zm9yKGQ9MDtkPGMvODtkKyspMD09PShkJjMpJiYoZT1hW2QvNF0pLGIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZT4+Pjg+Pj44Pj4+OCksZTw8PTg7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoYikpfSx0b0JpdHM6ZnVuY3Rpb24oYSl7YT11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYSkpO3ZhciBiPVtdLGMsZD0wO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspZD1kPDw4fGEuY2hhckNvZGVBdChjKSwzPT09KGMmMykmJihiLnB1c2goZCksZD0wKTtjJjMmJmIucHVzaChzamNsLmJpdEFycmF5LnBhcnRpYWwoOCooYyYzKSxkKSk7cmV0dXJuIGJ9fTtcbnNqY2wuY29kZWMuaGV4PXtmcm9tQml0czpmdW5jdGlvbihhKXt2YXIgYj1cIlwiLGM7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyliKz0oKGFbY118MCkrMHhmMDAwMDAwMDAwMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoNCk7cmV0dXJuIGIuc3Vic3RyKDAsc2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSkvNCl9LHRvQml0czpmdW5jdGlvbihhKXt2YXIgYixjPVtdLGQ7YT1hLnJlcGxhY2UoL1xcc3wweC9nLFwiXCIpO2Q9YS5sZW5ndGg7YT1hK1wiMDAwMDAwMDBcIjtmb3IoYj0wO2I8YS5sZW5ndGg7Yis9OCljLnB1c2gocGFyc2VJbnQoYS5zdWJzdHIoYiw4KSwxNileMCk7cmV0dXJuIHNqY2wuYml0QXJyYXkuY2xhbXAoYyw0KmQpfX07XG5zamNsLmNvZGVjLmJhc2U2ND17UzpcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIixmcm9tQml0czpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9XCJcIixlPTAsZj1zamNsLmNvZGVjLmJhc2U2NC5TLGc9MCxoPXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpO2MmJihmPWYuc3Vic3RyKDAsNjIpK1wiLV9cIik7Zm9yKGM9MDs2KmQubGVuZ3RoPGg7KWQrPWYuY2hhckF0KChnXmFbY10+Pj5lKT4+PjI2KSw2PmU/KGc9YVtjXTw8Ni1lLGUrPTI2LGMrKyk6KGc8PD02LGUtPTYpO2Zvcig7ZC5sZW5ndGgmMyYmIWI7KWQrPVwiPVwiO3JldHVybiBkfSx0b0JpdHM6ZnVuY3Rpb24oYSxiKXthPWEucmVwbGFjZSgvXFxzfD0vZyxcIlwiKTt2YXIgYz1bXSxkLGU9MCxmPXNqY2wuY29kZWMuYmFzZTY0LlMsZz0wLGg7YiYmKGY9Zi5zdWJzdHIoMCw2MikrXCItX1wiKTtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKXtoPWYuaW5kZXhPZihhLmNoYXJBdChkKSk7XG5pZigwPmgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJ0aGlzIGlzbid0IGJhc2U2NCFcIik7MjY8ZT8oZS09MjYsYy5wdXNoKGdeaD4+PmUpLGc9aDw8MzItZSk6KGUrPTYsZ149aDw8MzItZSl9ZSY1NiYmYy5wdXNoKHNqY2wuYml0QXJyYXkucGFydGlhbChlJjU2LGcsMSkpO3JldHVybiBjfX07c2pjbC5jb2RlYy5iYXNlNjR1cmw9e2Zyb21CaXRzOmZ1bmN0aW9uKGEpe3JldHVybiBzamNsLmNvZGVjLmJhc2U2NC5mcm9tQml0cyhhLDEsMSl9LHRvQml0czpmdW5jdGlvbihhKXtyZXR1cm4gc2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGEsMSl9fTtzamNsLmhhc2guc2hhMjU2PWZ1bmN0aW9uKGEpe3RoaXMuYlswXXx8dGhpcy5DKCk7YT8odGhpcy5nPWEuZy5zbGljZSgwKSx0aGlzLmY9YS5mLnNsaWNlKDApLHRoaXMuYz1hLmMpOnRoaXMucmVzZXQoKX07c2pjbC5oYXNoLnNoYTI1Ni5oYXNoPWZ1bmN0aW9uKGEpe3JldHVybihuZXcgc2pjbC5oYXNoLnNoYTI1NikudXBkYXRlKGEpLmZpbmFsaXplKCl9O1xuc2pjbC5oYXNoLnNoYTI1Ni5wcm90b3R5cGU9e2Jsb2NrU2l6ZTo1MTIscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmc9dGhpcy5vLnNsaWNlKDApO3RoaXMuZj1bXTt0aGlzLmM9MDtyZXR1cm4gdGhpc30sdXBkYXRlOmZ1bmN0aW9uKGEpe1wic3RyaW5nXCI9PT10eXBlb2YgYSYmKGE9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhhKSk7dmFyIGIsYz10aGlzLmY9c2pjbC5iaXRBcnJheS5jb25jYXQodGhpcy5mLGEpO2I9dGhpcy5jO2E9dGhpcy5jPWIrc2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSk7aWYoMHgxZmZmZmZmZmZmZmZmZjxhKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiQ2Fubm90IGhhc2ggbW9yZSB0aGFuIDJeNTMgLSAxIGJpdHNcIik7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBVaW50MzJBcnJheSl7dmFyIGQ9bmV3IFVpbnQzMkFycmF5KGMpLGU9MDtmb3IoYj01MTIrYi0oNTEyK2ImMHgxZmYpO2I8PWE7Yis9NTEyKXRoaXMubChkLnN1YmFycmF5KDE2KmUsXG4xNiooZSsxKSkpLGUrPTE7Yy5zcGxpY2UoMCwxNiplKX1lbHNlIGZvcihiPTUxMitiLSg1MTIrYiYweDFmZik7Yjw9YTtiKz01MTIpdGhpcy5sKGMuc3BsaWNlKDAsMTYpKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuZixjPXRoaXMuZyxiPXNqY2wuYml0QXJyYXkuY29uY2F0KGIsW3NqY2wuYml0QXJyYXkucGFydGlhbCgxLDEpXSk7Zm9yKGE9Yi5sZW5ndGgrMjthJjE1O2ErKyliLnB1c2goMCk7Yi5wdXNoKE1hdGguZmxvb3IodGhpcy5jLzB4MTAwMDAwMDAwKSk7Zm9yKGIucHVzaCh0aGlzLmN8MCk7Yi5sZW5ndGg7KXRoaXMubChiLnNwbGljZSgwLDE2KSk7dGhpcy5yZXNldCgpO3JldHVybiBjfSxvOltdLGI6W10sQzpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIDB4MTAwMDAwMDAwKihhLU1hdGguZmxvb3IoYSkpfDB9Zm9yKHZhciBiPTAsYz0yLGQsZTs2ND5iO2MrKyl7ZT0hMDtmb3IoZD0yO2QqZDw9YztkKyspaWYoMD09PWMlZCl7ZT1cbiExO2JyZWFrfWUmJig4PmImJih0aGlzLm9bYl09YShNYXRoLnBvdyhjLC41KSkpLHRoaXMuYltiXT1hKE1hdGgucG93KGMsMS8zKSksYisrKX19LGw6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9dGhpcy5nLGY9dGhpcy5iLGc9ZVswXSxoPWVbMV0saz1lWzJdLG49ZVszXSxsPWVbNF0sbT1lWzVdLHA9ZVs2XSx6PWVbN107Zm9yKGI9MDs2ND5iO2IrKykxNj5iP2M9YVtiXTooYz1hW2IrMSYxNV0sZD1hW2IrMTQmMTVdLGM9YVtiJjE1XT0oYz4+PjdeYz4+PjE4XmM+Pj4zXmM8PDI1XmM8PDE0KSsoZD4+PjE3XmQ+Pj4xOV5kPj4+MTBeZDw8MTVeZDw8MTMpK2FbYiYxNV0rYVtiKzkmMTVdfDApLGM9Yyt6KyhsPj4+Nl5sPj4+MTFebD4+PjI1Xmw8PDI2Xmw8PDIxXmw8PDcpKyhwXmwmKG1ecCkpK2ZbYl0sej1wLHA9bSxtPWwsbD1uK2N8MCxuPWssaz1oLGg9ZyxnPWMrKGgma15uJihoXmspKSsoaD4+PjJeaD4+PjEzXmg+Pj4yMl5oPDwzMF5oPDwxOV5oPDwxMCl8MDtlWzBdPWVbMF0rZ3xcbjA7ZVsxXT1lWzFdK2h8MDtlWzJdPWVbMl0ra3wwO2VbM109ZVszXStufDA7ZVs0XT1lWzRdK2x8MDtlWzVdPWVbNV0rbXwwO2VbNl09ZVs2XStwfDA7ZVs3XT1lWzddK3p8MH19O3NqY2wuaGFzaC5zaGE1MTI9ZnVuY3Rpb24oYSl7dGhpcy5iWzBdfHx0aGlzLkMoKTthPyh0aGlzLmc9YS5nLnNsaWNlKDApLHRoaXMuZj1hLmYuc2xpY2UoMCksdGhpcy5jPWEuYyk6dGhpcy5yZXNldCgpfTtzamNsLmhhc2guc2hhNTEyLmhhc2g9ZnVuY3Rpb24oYSl7cmV0dXJuKG5ldyBzamNsLmhhc2guc2hhNTEyKS51cGRhdGUoYSkuZmluYWxpemUoKX07XG5zamNsLmhhc2guc2hhNTEyLnByb3RvdHlwZT17YmxvY2tTaXplOjEwMjQscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmc9dGhpcy5vLnNsaWNlKDApO3RoaXMuZj1bXTt0aGlzLmM9MDtyZXR1cm4gdGhpc30sdXBkYXRlOmZ1bmN0aW9uKGEpe1wic3RyaW5nXCI9PT10eXBlb2YgYSYmKGE9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhhKSk7dmFyIGIsYz10aGlzLmY9c2pjbC5iaXRBcnJheS5jb25jYXQodGhpcy5mLGEpO2I9dGhpcy5jO2E9dGhpcy5jPWIrc2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSk7aWYoMHgxZmZmZmZmZmZmZmZmZjxhKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiQ2Fubm90IGhhc2ggbW9yZSB0aGFuIDJeNTMgLSAxIGJpdHNcIik7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBVaW50MzJBcnJheSl7dmFyIGQ9bmV3IFVpbnQzMkFycmF5KGMpLGU9MDtmb3IoYj0xMDI0K2ItKDEwMjQrYiYxMDIzKTtiPD1hO2IrPTEwMjQpdGhpcy5sKGQuc3ViYXJyYXkoMzIqXG5lLDMyKihlKzEpKSksZSs9MTtjLnNwbGljZSgwLDMyKmUpfWVsc2UgZm9yKGI9MTAyNCtiLSgxMDI0K2ImMTAyMyk7Yjw9YTtiKz0xMDI0KXRoaXMubChjLnNwbGljZSgwLDMyKSk7cmV0dXJuIHRoaXN9LGZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLmYsYz10aGlzLmcsYj1zamNsLmJpdEFycmF5LmNvbmNhdChiLFtzamNsLmJpdEFycmF5LnBhcnRpYWwoMSwxKV0pO2ZvcihhPWIubGVuZ3RoKzQ7YSYzMTthKyspYi5wdXNoKDApO2IucHVzaCgwKTtiLnB1c2goMCk7Yi5wdXNoKE1hdGguZmxvb3IodGhpcy5jLzB4MTAwMDAwMDAwKSk7Zm9yKGIucHVzaCh0aGlzLmN8MCk7Yi5sZW5ndGg7KXRoaXMubChiLnNwbGljZSgwLDMyKSk7dGhpcy5yZXNldCgpO3JldHVybiBjfSxvOltdLGlhOlsxMjM3MjIzMiwxMzI4MTA4Myw5NzYyODU5LDE5MTQ2MDksMTUxMDY3NjksNDA5MDkxMSw0MzA4MzMxLDgyNjYxMDVdLGI6W10sa2E6WzI2NjYwMTgsMTU2ODkxNjUsNTA2MTQyMyw5MDM0Njg0LFxuNDc2NDk4NCwzODA5NTMsMTY1ODc3OSw3MTc2NDcyLDE5NzE4Niw3MzY4NjM4LDE0OTg3OTE2LDE2NzU3OTg2LDgwOTYxMTEsMTQ4MDM2OSwxMzA0NjMyNSw2ODkxMTU2LDE1ODEzMzMwLDUxODcwNDMsOTIyOTc0OSwxMTMxMjIyOSwyODE4Njc3LDEwOTM3NDc1LDQzMjQzMDgsMTEzNTU0MSw2NzQxOTMxLDExODA5Mjk2LDE2NDU4MDQ3LDE1NjY2OTE2LDExMDQ2ODUwLDY5ODE0OSwyMjk5OTksOTQ1Nzc2LDEzNzc0ODQ0LDI1NDE4NjIsMTI4NTYwNDUsOTgxMDkxMSwxMTQ5NDM2Niw3ODQ0NTIwLDE1NTc2ODA2LDg1MzMzMDcsMTU3OTUwNDQsNDMzNzY2NSwxNjI5MTcyOSw1NTUzNzEyLDE1Njg0MTIwLDY2NjI0MTYsNzQxMzgwMiwxMjMwODkyMCwxMzgxNjAwOCw0MzAzNjk5LDkzNjY0MjUsMTAxNzY2ODAsMTMxOTU4NzUsNDI5NTM3MSw2NTQ2MjkxLDExNzEyNjc1LDE1NzA4OTI0LDE1MTk0NTYsMTU3NzI1MzAsNjU2ODQyOCw2NDk1Nzg0LDg1NjgyOTcsMTMwMDcxMjUsNzQ5MjM5NSwyNTE1MzU2LFxuMTI2MzI1ODMsMTQ3NDAyNTQsNzI2MjU4NCwxNTM1OTMwLDEzMTQ2Mjc4LDE2MzIxOTY2LDE4NTMyMTEsMjk0Mjc2LDEzMDUxMDI3LDEzMjIxNTY0LDEwNTE5ODAsNDA4MDMxMCw2NjUxNDM0LDE0MDg4OTQwLDQ2NzU2MDddLEM6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybiAweDEwMDAwMDAwMCooYS1NYXRoLmZsb29yKGEpKXwwfWZ1bmN0aW9uIGIoYSl7cmV0dXJuIDB4MTAwMDAwMDAwMDAqKGEtTWF0aC5mbG9vcihhKSkmMjU1fWZvcih2YXIgYz0wLGQ9MixlLGY7ODA+YztkKyspe2Y9ITA7Zm9yKGU9MjtlKmU8PWQ7ZSsrKWlmKDA9PT1kJWUpe2Y9ITE7YnJlYWt9ZiYmKDg+YyYmKHRoaXMub1syKmNdPWEoTWF0aC5wb3coZCwuNSkpLHRoaXMub1syKmMrMV09YihNYXRoLnBvdyhkLC41KSk8PDI0fHRoaXMuaWFbY10pLHRoaXMuYlsyKmNdPWEoTWF0aC5wb3coZCwxLzMpKSx0aGlzLmJbMipjKzFdPWIoTWF0aC5wb3coZCwxLzMpKTw8MjR8dGhpcy5rYVtjXSxjKyspfX0sbDpmdW5jdGlvbihhKXt2YXIgYixcbmMsZD10aGlzLmcsZT10aGlzLmIsZj1kWzBdLGc9ZFsxXSxoPWRbMl0saz1kWzNdLG49ZFs0XSxsPWRbNV0sbT1kWzZdLHA9ZFs3XSx6PWRbOF0sQT1kWzldLEM9ZFsxMF0sQj1kWzExXSxEPWRbMTJdLFA9ZFsxM10sZWE9ZFsxNF0sUT1kWzE1XSx0O2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgVWludDMyQXJyYXkpe3Q9QXJyYXkoMTYwKTtmb3IodmFyIHI9MDszMj5yO3IrKyl0W3JdPWFbcl19ZWxzZSB0PWE7dmFyIHI9Zix1PWcsRz1oLEU9ayxIPW4sRj1sLFY9bSxJPXAsdz16LHY9QSxSPUMsSj1CLFM9RCxLPVAsVz1lYSxMPVE7Zm9yKGE9MDs4MD5hO2ErKyl7aWYoMTY+YSliPXRbMiphXSxjPXRbMiphKzFdO2Vsc2V7Yz10WzIqKGEtMTUpXTt2YXIgcT10WzIqKGEtMTUpKzFdO2I9KHE8PDMxfGM+Pj4xKV4ocTw8MjR8Yz4+PjgpXmM+Pj43O3ZhciB4PShjPDwzMXxxPj4+MSleKGM8PDI0fHE+Pj44KV4oYzw8MjV8cT4+PjcpO2M9dFsyKihhLTIpXTt2YXIgeT10WzIqKGEtMikrMV0sXG5xPSh5PDwxM3xjPj4+MTkpXihjPDwzfHk+Pj4yOSleYz4+PjYseT0oYzw8MTN8eT4+PjE5KV4oeTw8M3xjPj4+MjkpXihjPDwyNnx5Pj4+NiksWD10WzIqKGEtNyldLFk9dFsyKihhLTE2KV0sTT10WzIqKGEtMTYpKzFdO2M9eCt0WzIqKGEtNykrMV07Yj1iK1grKGM+Pj4wPHg+Pj4wPzE6MCk7Yys9eTtiKz1xKyhjPj4+MDx5Pj4+MD8xOjApO2MrPU07Yis9WSsoYz4+PjA8TT4+PjA/MTowKX10WzIqYV09Ynw9MDt0WzIqYSsxXT1jfD0wO3ZhciBYPXcmUl5+dyZTLGZhPXYmSl5+diZLLHk9ciZHXnImSF5HJkgsamE9dSZFXnUmRl5FJkYsWT0odTw8NHxyPj4+MjgpXihyPDwzMHx1Pj4+MileKHI8PDI1fHU+Pj43KSxNPShyPDw0fHU+Pj4yOCleKHU8PDMwfHI+Pj4yKV4odTw8MjV8cj4+PjcpLGthPWVbMiphXSxnYT1lWzIqYSsxXSxxPUwrKCh3PDwxOHx2Pj4+MTQpXih3PDwxNHx2Pj4+MTgpXih2PDwyM3x3Pj4+OSkpLHg9VysoKHY8PDE4fHc+Pj4xNCleKHY8PDE0fHc+Pj4xOCleKHc8PFxuMjN8dj4+PjkpKSsocT4+PjA8TD4+PjA/MTowKSxxPXErZmEseD14KyhYKyhxPj4+MDxmYT4+PjA/MTowKSkscT1xK2dhLHg9eCsoa2ErKHE+Pj4wPGdhPj4+MD8xOjApKSxxPXErY3wwLHg9eCsoYisocT4+PjA8Yz4+PjA/MTowKSk7Yz1NK2phO2I9WSt5KyhjPj4+MDxNPj4+MD8xOjApO1c9UztMPUs7Uz1SO0s9SjtSPXc7Sj12O3Y9SStxfDA7dz1WK3grKHY+Pj4wPEk+Pj4wPzE6MCl8MDtWPUg7ST1GO0g9RztGPUU7Rz1yO0U9dTt1PXErY3wwO3I9eCtiKyh1Pj4+MDxxPj4+MD8xOjApfDB9Zz1kWzFdPWcrdXwwO2RbMF09ZityKyhnPj4+MDx1Pj4+MD8xOjApfDA7az1kWzNdPWsrRXwwO2RbMl09aCtHKyhrPj4+MDxFPj4+MD8xOjApfDA7bD1kWzVdPWwrRnwwO2RbNF09bitIKyhsPj4+MDxGPj4+MD8xOjApfDA7cD1kWzddPXArSXwwO2RbNl09bStWKyhwPj4+MDxJPj4+MD8xOjApfDA7QT1kWzldPUErdnwwO2RbOF09eit3KyhBPj4+MDx2Pj4+MD8xOjApfDA7Qj1kWzExXT1CK0p8XG4wO2RbMTBdPUMrUisoQj4+PjA8Sj4+PjA/MTowKXwwO1A9ZFsxM109UCtLfDA7ZFsxMl09RCtTKyhQPj4+MDxLPj4+MD8xOjApfDA7UT1kWzE1XT1RK0x8MDtkWzE0XT1lYStXKyhRPj4+MDxMPj4+MD8xOjApfDB9fTtcbnNqY2wubW9kZS5jY209e25hbWU6XCJjY21cIixGOltdLGxpc3RlblByb2dyZXNzOmZ1bmN0aW9uKGEpe3NqY2wubW9kZS5jY20uRi5wdXNoKGEpfSx1bkxpc3RlblByb2dyZXNzOmZ1bmN0aW9uKGEpe2E9c2pjbC5tb2RlLmNjbS5GLmluZGV4T2YoYSk7LTE8YSYmc2pjbC5tb2RlLmNjbS5GLnNwbGljZShhLDEpfSxkYTpmdW5jdGlvbihhKXt2YXIgYj1zamNsLm1vZGUuY2NtLkYuc2xpY2UoKSxjO2ZvcihjPTA7YzxiLmxlbmd0aDtjKz0xKWJbY10oYSl9LGVuY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnPWIuc2xpY2UoMCksaD1zamNsLmJpdEFycmF5LGs9aC5iaXRMZW5ndGgoYykvOCxuPWguYml0TGVuZ3RoKGcpLzg7ZT1lfHw2NDtkPWR8fFtdO2lmKDc+ayl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImNjbTogaXYgbXVzdCBiZSBhdCBsZWFzdCA3IGJ5dGVzXCIpO2ZvcihmPTI7ND5mJiZuPj4+OCpmO2YrKyk7ZjwxNS1rJiYoZj0xNS1rKTtjPWguY2xhbXAoYyxcbjgqKDE1LWYpKTtiPXNqY2wubW9kZS5jY20uVShhLGIsYyxkLGUsZik7Zz1zamNsLm1vZGUuY2NtLlYoYSxnLGMsYixlLGYpO3JldHVybiBoLmNvbmNhdChnLmRhdGEsZy50YWcpfSxkZWNyeXB0OmZ1bmN0aW9uKGEsYixjLGQsZSl7ZT1lfHw2NDtkPWR8fFtdO3ZhciBmPXNqY2wuYml0QXJyYXksZz1mLmJpdExlbmd0aChjKS84LGg9Zi5iaXRMZW5ndGgoYiksaz1mLmNsYW1wKGIsaC1lKSxuPWYuYml0U2xpY2UoYixoLWUpLGg9KGgtZSkvODtpZig3PmcpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJjY206IGl2IG11c3QgYmUgYXQgbGVhc3QgNyBieXRlc1wiKTtmb3IoYj0yOzQ+YiYmaD4+PjgqYjtiKyspO2I8MTUtZyYmKGI9MTUtZyk7Yz1mLmNsYW1wKGMsOCooMTUtYikpO2s9c2pjbC5tb2RlLmNjbS5WKGEsayxjLG4sZSxiKTthPXNqY2wubW9kZS5jY20uVShhLGsuZGF0YSxjLGQsZSxiKTtpZighZi5lcXVhbChrLnRhZyxhKSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uY29ycnVwdChcImNjbTogdGFnIGRvZXNuJ3QgbWF0Y2hcIik7XG5yZXR1cm4gay5kYXRhfSxtYTpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9W10saD1zamNsLmJpdEFycmF5LGs9aC5QO2Q9W2gucGFydGlhbCg4LChiLmxlbmd0aD82NDowKXxkLTI8PDJ8Zi0xKV07ZD1oLmNvbmNhdChkLGMpO2RbM118PWU7ZD1hLmVuY3J5cHQoZCk7aWYoYi5sZW5ndGgpZm9yKGM9aC5iaXRMZW5ndGgoYikvOCw2NTI3OT49Yz9nPVtoLnBhcnRpYWwoMTYsYyldOjB4ZmZmZmZmZmY+PWMmJihnPWguY29uY2F0KFtoLnBhcnRpYWwoMTYsNjU1MzQpXSxbY10pKSxnPWguY29uY2F0KGcsYiksYj0wO2I8Zy5sZW5ndGg7Yis9NClkPWEuZW5jcnlwdChrKGQsZy5zbGljZShiLGIrNCkuY29uY2F0KFswLDAsMF0pKSk7cmV0dXJuIGR9LFU6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPXNqY2wuYml0QXJyYXksaD1nLlA7ZS89ODtpZihlJTJ8fDQ+ZXx8MTY8ZSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImNjbTogaW52YWxpZCB0YWcgbGVuZ3RoXCIpO1xuaWYoMHhmZmZmZmZmZjxkLmxlbmd0aHx8MHhmZmZmZmZmZjxiLmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwiY2NtOiBjYW4ndCBkZWFsIHdpdGggNEdpQiBvciBtb3JlIGRhdGFcIik7Yz1zamNsLm1vZGUuY2NtLm1hKGEsZCxjLGUsZy5iaXRMZW5ndGgoYikvOCxmKTtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCs9NCljPWEuZW5jcnlwdChoKGMsYi5zbGljZShkLGQrNCkuY29uY2F0KFswLDAsMF0pKSk7cmV0dXJuIGcuY2xhbXAoYyw4KmUpfSxWOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZyxoPXNqY2wuYml0QXJyYXk7Zz1oLlA7dmFyIGs9Yi5sZW5ndGgsbj1oLmJpdExlbmd0aChiKSxsPWsvNTAsbT1sO2M9aC5jb25jYXQoW2gucGFydGlhbCg4LGYtMSldLGMpLmNvbmNhdChbMCwwLDBdKS5zbGljZSgwLDQpO2Q9aC5iaXRTbGljZShnKGQsYS5lbmNyeXB0KGMpKSwwLGUpO2lmKCFrKXJldHVybnt0YWc6ZCxkYXRhOltdfTtmb3IoZz0wO2c8aztnKz00KWc+bCYmKHNqY2wubW9kZS5jY20uZGEoZy9cbmspLGwrPW0pLGNbM10rKyxlPWEuZW5jcnlwdChjKSxiW2ddXj1lWzBdLGJbZysxXV49ZVsxXSxiW2crMl1ePWVbMl0sYltnKzNdXj1lWzNdO3JldHVybnt0YWc6ZCxkYXRhOmguY2xhbXAoYixuKX19fTtzamNsLm1pc2MuaG1hYz1mdW5jdGlvbihhLGIpe3RoaXMuVz1iPWJ8fHNqY2wuaGFzaC5zaGEyNTY7dmFyIGM9W1tdLFtdXSxkLGU9Yi5wcm90b3R5cGUuYmxvY2tTaXplLzMyO3RoaXMuQj1bbmV3IGIsbmV3IGJdO2EubGVuZ3RoPmUmJihhPWIuaGFzaChhKSk7Zm9yKGQ9MDtkPGU7ZCsrKWNbMF1bZF09YVtkXV45MDk1MjI0ODYsY1sxXVtkXT1hW2RdXjE1NDk1NTY4Mjg7dGhpcy5CWzBdLnVwZGF0ZShjWzBdKTt0aGlzLkJbMV0udXBkYXRlKGNbMV0pO3RoaXMuTz1uZXcgYih0aGlzLkJbMF0pfTtcbnNqY2wubWlzYy5obWFjLnByb3RvdHlwZS5lbmNyeXB0PXNqY2wubWlzYy5obWFjLnByb3RvdHlwZS5tYWM9ZnVuY3Rpb24oYSl7aWYodGhpcy5aKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiZW5jcnlwdCBvbiBhbHJlYWR5IHVwZGF0ZWQgaG1hYyBjYWxsZWQhXCIpO3RoaXMudXBkYXRlKGEpO3JldHVybiB0aGlzLmRpZ2VzdChhKX07c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5PPW5ldyB0aGlzLlcodGhpcy5CWzBdKTt0aGlzLlo9ITF9O3NqY2wubWlzYy5obWFjLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oYSl7dGhpcy5aPSEwO3RoaXMuTy51cGRhdGUoYSl9O3NqY2wubWlzYy5obWFjLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLk8uZmluYWxpemUoKSxhPShuZXcgdGhpcy5XKHRoaXMuQlsxXSkpLnVwZGF0ZShhKS5maW5hbGl6ZSgpO3RoaXMucmVzZXQoKTtyZXR1cm4gYX07XG5zamNsLm1pc2MucGJrZGYyPWZ1bmN0aW9uKGEsYixjLGQsZSl7Yz1jfHwxRTQ7aWYoMD5kfHwwPmMpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJpbnZhbGlkIHBhcmFtcyB0byBwYmtkZjJcIik7XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYoYT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGEpKTtcInN0cmluZ1wiPT09dHlwZW9mIGImJihiPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYikpO2U9ZXx8c2pjbC5taXNjLmhtYWM7YT1uZXcgZShhKTt2YXIgZixnLGgsayxuPVtdLGw9c2pjbC5iaXRBcnJheTtmb3Ioaz0xOzMyKm4ubGVuZ3RoPChkfHwxKTtrKyspe2U9Zj1hLmVuY3J5cHQobC5jb25jYXQoYixba10pKTtmb3IoZz0xO2c8YztnKyspZm9yKGY9YS5lbmNyeXB0KGYpLGg9MDtoPGYubGVuZ3RoO2grKyllW2hdXj1mW2hdO249bi5jb25jYXQoZSl9ZCYmKG49bC5jbGFtcChuLGQpKTtyZXR1cm4gbn07XG5zamNsLnBybmc9ZnVuY3Rpb24oYSl7dGhpcy5oPVtuZXcgc2pjbC5oYXNoLnNoYTI1Nl07dGhpcy5zPVswXTt0aGlzLk49MDt0aGlzLkc9e307dGhpcy5NPTA7dGhpcy5UPXt9O3RoaXMuWD10aGlzLmk9dGhpcy51PXRoaXMuZmE9MDt0aGlzLmI9WzAsMCwwLDAsMCwwLDAsMF07dGhpcy5tPVswLDAsMCwwXTt0aGlzLks9dm9pZCAwO3RoaXMuTD1hO3RoaXMuRD0hMTt0aGlzLko9e3Byb2dyZXNzOnt9LHNlZWRlZDp7fX07dGhpcy5BPXRoaXMuZWE9MDt0aGlzLkg9MTt0aGlzLkk9Mjt0aGlzLmFhPTB4MTAwMDA7dGhpcy5SPVswLDQ4LDY0LDk2LDEyOCwxOTIsMHgxMDAsMzg0LDUxMiw3NjgsMTAyNF07dGhpcy5iYT0zRTQ7dGhpcy4kPTgwfTtcbnNqY2wucHJuZy5wcm90b3R5cGU9e3JhbmRvbVdvcmRzOmZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZDtkPXRoaXMuaXNSZWFkeShiKTt2YXIgZTtpZihkPT09dGhpcy5BKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5ub3RSZWFkeShcImdlbmVyYXRvciBpc24ndCBzZWVkZWRcIik7aWYoZCZ0aGlzLkkpe2Q9IShkJnRoaXMuSCk7ZT1bXTt2YXIgZj0wLGc7dGhpcy5YPWVbMF09KG5ldyBEYXRlKS52YWx1ZU9mKCkrdGhpcy5iYTtmb3IoZz0wOzE2Pmc7ZysrKWUucHVzaCgweDEwMDAwMDAwMCpNYXRoLnJhbmRvbSgpfDApO2ZvcihnPTA7Zzx0aGlzLmgubGVuZ3RoJiYoZT1lLmNvbmNhdCh0aGlzLmhbZ10uZmluYWxpemUoKSksZis9dGhpcy5zW2ddLHRoaXMuc1tnXT0wLGR8fCEodGhpcy5OJjE8PGcpKTtnKyspO3RoaXMuTj49MTw8dGhpcy5oLmxlbmd0aCYmKHRoaXMuaC5wdXNoKG5ldyBzamNsLmhhc2guc2hhMjU2KSx0aGlzLnMucHVzaCgwKSk7dGhpcy5pLT1mO2Y+dGhpcy51JiYodGhpcy51PVxuZik7dGhpcy5OKys7dGhpcy5iPXNqY2wuaGFzaC5zaGEyNTYuaGFzaCh0aGlzLmIuY29uY2F0KGUpKTt0aGlzLks9bmV3IHNqY2wuY2lwaGVyLmFlcyh0aGlzLmIpO2ZvcihkPTA7ND5kJiYodGhpcy5tW2RdPXRoaXMubVtkXSsxfDAsIXRoaXMubVtkXSk7ZCsrKTt9Zm9yKGQ9MDtkPGE7ZCs9NCkwPT09KGQrMSkldGhpcy5hYSYmYmEodGhpcyksZT1OKHRoaXMpLGMucHVzaChlWzBdLGVbMV0sZVsyXSxlWzNdKTtiYSh0aGlzKTtyZXR1cm4gYy5zbGljZSgwLGEpfSxzZXREZWZhdWx0UGFyYW5vaWE6ZnVuY3Rpb24oYSxiKXtpZigwPT09YSYmXCJTZXR0aW5nIHBhcmFub2lhPTAgd2lsbCBydWluIHlvdXIgc2VjdXJpdHk7IHVzZSBpdCBvbmx5IGZvciB0ZXN0aW5nXCIhPT1iKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiU2V0dGluZyBwYXJhbm9pYT0wIHdpbGwgcnVpbiB5b3VyIHNlY3VyaXR5OyB1c2UgaXQgb25seSBmb3IgdGVzdGluZ1wiKTt0aGlzLkw9YX0sYWRkRW50cm9weTpmdW5jdGlvbihhLFxuYixjKXtjPWN8fFwidXNlclwiO3ZhciBkLGUsZj0obmV3IERhdGUpLnZhbHVlT2YoKSxnPXRoaXMuR1tjXSxoPXRoaXMuaXNSZWFkeSgpLGs9MDtkPXRoaXMuVFtjXTt2b2lkIDA9PT1kJiYoZD10aGlzLlRbY109dGhpcy5mYSsrKTt2b2lkIDA9PT1nJiYoZz10aGlzLkdbY109MCk7dGhpcy5HW2NdPSh0aGlzLkdbY10rMSkldGhpcy5oLmxlbmd0aDtzd2l0Y2godHlwZW9mIGEpe2Nhc2UgXCJudW1iZXJcIjp2b2lkIDA9PT1iJiYoYj0xKTt0aGlzLmhbZ10udXBkYXRlKFtkLHRoaXMuTSsrLDEsYixmLDEsYXwwXSk7YnJlYWs7Y2FzZSBcIm9iamVjdFwiOmM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpO2lmKFwiW29iamVjdCBVaW50MzJBcnJheV1cIj09PWMpe2U9W107Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyllLnB1c2goYVtjXSk7YT1lfWVsc2UgZm9yKFwiW29iamVjdCBBcnJheV1cIiE9PWMmJihrPTEpLGM9MDtjPGEubGVuZ3RoJiYhaztjKyspXCJudW1iZXJcIiE9PXR5cGVvZiBhW2NdJiZcbihrPTEpO2lmKCFrKXtpZih2b2lkIDA9PT1iKWZvcihjPWI9MDtjPGEubGVuZ3RoO2MrKylmb3IoZT1hW2NdOzA8ZTspYisrLGU9ZT4+PjE7dGhpcy5oW2ddLnVwZGF0ZShbZCx0aGlzLk0rKywyLGIsZixhLmxlbmd0aF0uY29uY2F0KGEpKX1icmVhaztjYXNlIFwic3RyaW5nXCI6dm9pZCAwPT09YiYmKGI9YS5sZW5ndGgpO3RoaXMuaFtnXS51cGRhdGUoW2QsdGhpcy5NKyssMyxiLGYsYS5sZW5ndGhdKTt0aGlzLmhbZ10udXBkYXRlKGEpO2JyZWFrO2RlZmF1bHQ6az0xfWlmKGspdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmJ1ZyhcInJhbmRvbTogYWRkRW50cm9weSBvbmx5IHN1cHBvcnRzIG51bWJlciwgYXJyYXkgb2YgbnVtYmVycyBvciBzdHJpbmdcIik7dGhpcy5zW2ddKz1iO3RoaXMuaSs9YjtoPT09dGhpcy5BJiYodGhpcy5pc1JlYWR5KCkhPT10aGlzLkEmJmNhKFwic2VlZGVkXCIsTWF0aC5tYXgodGhpcy51LHRoaXMuaSkpLGNhKFwicHJvZ3Jlc3NcIix0aGlzLmdldFByb2dyZXNzKCkpKX0sXG5pc1JlYWR5OmZ1bmN0aW9uKGEpe2E9dGhpcy5SW3ZvaWQgMCE9PWE/YTp0aGlzLkxdO3JldHVybiB0aGlzLnUmJnRoaXMudT49YT90aGlzLnNbMF0+dGhpcy4kJiYobmV3IERhdGUpLnZhbHVlT2YoKT50aGlzLlg/dGhpcy5JfHRoaXMuSDp0aGlzLkg6dGhpcy5pPj1hP3RoaXMuSXx0aGlzLkE6dGhpcy5BfSxnZXRQcm9ncmVzczpmdW5jdGlvbihhKXthPXRoaXMuUlthP2E6dGhpcy5MXTtyZXR1cm4gdGhpcy51Pj1hPzE6dGhpcy5pPmE/MTp0aGlzLmkvYX0sc3RhcnRDb2xsZWN0b3JzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuRCl7dGhpcy5hPXtsb2FkVGltZUNvbGxlY3RvcjpPKHRoaXMsdGhpcy5sYSksbW91c2VDb2xsZWN0b3I6Tyh0aGlzLHRoaXMubmEpLGtleWJvYXJkQ29sbGVjdG9yOk8odGhpcyx0aGlzLmphKSxhY2NlbGVyb21ldGVyQ29sbGVjdG9yOk8odGhpcyx0aGlzLmNhKSx0b3VjaENvbGxlY3RvcjpPKHRoaXMsdGhpcy5wYSl9O2lmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLFxudGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuYS5tb3VzZUNvbGxlY3RvciwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3RvciwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJkZXZpY2Vtb3Rpb25cIix0aGlzLmEuYWNjZWxlcm9tZXRlckNvbGxlY3RvciwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIix0aGlzLmEudG91Y2hDb2xsZWN0b3IsITEpO2Vsc2UgaWYoZG9jdW1lbnQuYXR0YWNoRXZlbnQpZG9jdW1lbnQuYXR0YWNoRXZlbnQoXCJvbmxvYWRcIix0aGlzLmEubG9hZFRpbWVDb2xsZWN0b3IpLGRvY3VtZW50LmF0dGFjaEV2ZW50KFwib25tb3VzZW1vdmVcIix0aGlzLmEubW91c2VDb2xsZWN0b3IpLGRvY3VtZW50LmF0dGFjaEV2ZW50KFwia2V5cHJlc3NcIix0aGlzLmEua2V5Ym9hcmRDb2xsZWN0b3IpO2Vsc2UgdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmJ1ZyhcImNhbid0IGF0dGFjaCBldmVudFwiKTtcbnRoaXMuRD0hMH19LHN0b3BDb2xsZWN0b3JzOmZ1bmN0aW9uKCl7dGhpcy5EJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXI/KHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLHRoaXMuYS5sb2FkVGltZUNvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0aGlzLmEubW91c2VDb2xsZWN0b3IsITEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIix0aGlzLmEua2V5Ym9hcmRDb2xsZWN0b3IsITEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZGV2aWNlbW90aW9uXCIsdGhpcy5hLmFjY2VsZXJvbWV0ZXJDb2xsZWN0b3IsITEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsdGhpcy5hLnRvdWNoQ29sbGVjdG9yLCExKSk6ZG9jdW1lbnQuZGV0YWNoRXZlbnQmJihkb2N1bWVudC5kZXRhY2hFdmVudChcIm9ubG9hZFwiLHRoaXMuYS5sb2FkVGltZUNvbGxlY3RvciksZG9jdW1lbnQuZGV0YWNoRXZlbnQoXCJvbm1vdXNlbW92ZVwiLFxudGhpcy5hLm1vdXNlQ29sbGVjdG9yKSxkb2N1bWVudC5kZXRhY2hFdmVudChcImtleXByZXNzXCIsdGhpcy5hLmtleWJvYXJkQ29sbGVjdG9yKSksdGhpcy5EPSExKX0sYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe3RoaXMuSlthXVt0aGlzLmVhKytdPWJ9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9dGhpcy5KW2FdLGY9W107Zm9yKGQgaW4gZSllLmhhc093blByb3BlcnR5KGQpJiZlW2RdPT09YiYmZi5wdXNoKGQpO2ZvcihjPTA7YzxmLmxlbmd0aDtjKyspZD1mW2NdLGRlbGV0ZSBlW2RdfSxqYTpmdW5jdGlvbigpe1QodGhpcywxKX0sbmE6ZnVuY3Rpb24oYSl7dmFyIGIsYzt0cnl7Yj1hLnh8fGEuY2xpZW50WHx8YS5vZmZzZXRYfHwwLGM9YS55fHxhLmNsaWVudFl8fGEub2Zmc2V0WXx8MH1jYXRjaChkKXtjPWI9MH0wIT1iJiYwIT1jJiZ0aGlzLmFkZEVudHJvcHkoW2IsY10sMixcIm1vdXNlXCIpO1QodGhpcywwKX0scGE6ZnVuY3Rpb24oYSl7YT1cbmEudG91Y2hlc1swXXx8YS5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmFkZEVudHJvcHkoW2EucGFnZVh8fGEuY2xpZW50WCxhLnBhZ2VZfHxhLmNsaWVudFldLDEsXCJ0b3VjaFwiKTtUKHRoaXMsMCl9LGxhOmZ1bmN0aW9uKCl7VCh0aGlzLDIpfSxjYTpmdW5jdGlvbihhKXthPWEuYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eS54fHxhLmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkueXx8YS5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5Lno7aWYod2luZG93Lm9yaWVudGF0aW9uKXt2YXIgYj13aW5kb3cub3JpZW50YXRpb247XCJudW1iZXJcIj09PXR5cGVvZiBiJiZ0aGlzLmFkZEVudHJvcHkoYiwxLFwiYWNjZWxlcm9tZXRlclwiKX1hJiZ0aGlzLmFkZEVudHJvcHkoYSwyLFwiYWNjZWxlcm9tZXRlclwiKTtUKHRoaXMsMCl9fTtcbmZ1bmN0aW9uIGNhKGEsYil7dmFyIGMsZD1zamNsLnJhbmRvbS5KW2FdLGU9W107Zm9yKGMgaW4gZClkLmhhc093blByb3BlcnR5KGMpJiZlLnB1c2goZFtjXSk7Zm9yKGM9MDtjPGUubGVuZ3RoO2MrKyllW2NdKGIpfWZ1bmN0aW9uIFQoYSxiKXtcInVuZGVmaW5lZFwiIT09dHlwZW9mIHdpbmRvdyYmd2luZG93LnBlcmZvcm1hbmNlJiZcImZ1bmN0aW9uXCI9PT10eXBlb2Ygd2luZG93LnBlcmZvcm1hbmNlLm5vdz9hLmFkZEVudHJvcHkod2luZG93LnBlcmZvcm1hbmNlLm5vdygpLGIsXCJsb2FkdGltZVwiKTphLmFkZEVudHJvcHkoKG5ldyBEYXRlKS52YWx1ZU9mKCksYixcImxvYWR0aW1lXCIpfWZ1bmN0aW9uIGJhKGEpe2EuYj1OKGEpLmNvbmNhdChOKGEpKTthLks9bmV3IHNqY2wuY2lwaGVyLmFlcyhhLmIpfWZ1bmN0aW9uIE4oYSl7Zm9yKHZhciBiPTA7ND5iJiYoYS5tW2JdPWEubVtiXSsxfDAsIWEubVtiXSk7YisrKTtyZXR1cm4gYS5LLmVuY3J5cHQoYS5tKX1cbmZ1bmN0aW9uIE8oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtiLmFwcGx5KGEsYXJndW1lbnRzKX19c2pjbC5yYW5kb209bmV3IHNqY2wucHJuZyg2KTtcbmE6dHJ5e3ZhciBVLGRhLFosaGE7aWYoaGE9XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzKXt2YXIgaWE7dHJ5e2lhPXJlcXVpcmUoXCJjcnlwdG9cIil9Y2F0Y2goYSl7aWE9bnVsbH1oYT1kYT1pYX1pZihoYSYmZGEucmFuZG9tQnl0ZXMpVT1kYS5yYW5kb21CeXRlcygxMjgpLFU9bmV3IFVpbnQzMkFycmF5KChuZXcgVWludDhBcnJheShVKSkuYnVmZmVyKSxzamNsLnJhbmRvbS5hZGRFbnRyb3B5KFUsMTAyNCxcImNyeXB0b1sncmFuZG9tQnl0ZXMnXVwiKTtlbHNlIGlmKFwidW5kZWZpbmVkXCIhPT10eXBlb2Ygd2luZG93JiZcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXtaPW5ldyBVaW50MzJBcnJheSgzMik7aWYod2luZG93LmNyeXB0byYmd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoWik7ZWxzZSBpZih3aW5kb3cubXNDcnlwdG8mJndpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMpd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhaKTtcbmVsc2UgYnJlYWsgYTtzamNsLnJhbmRvbS5hZGRFbnRyb3B5KFosMTAyNCxcImNyeXB0b1snZ2V0UmFuZG9tVmFsdWVzJ11cIil9fWNhdGNoKGEpe1widW5kZWZpbmVkXCIhPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuY29uc29sZSYmKGNvbnNvbGUubG9nKFwiVGhlcmUgd2FzIGFuIGVycm9yIGNvbGxlY3RpbmcgZW50cm9weSBmcm9tIHRoZSBicm93c2VyOlwiKSxjb25zb2xlLmxvZyhhKSl9XG5zamNsLmpzb249e2RlZmF1bHRzOnt2OjEsaXRlcjoxRTQsa3M6MTI4LHRzOjY0LG1vZGU6XCJjY21cIixhZGF0YTpcIlwiLGNpcGhlcjpcImFlc1wifSxoYTpmdW5jdGlvbihhLGIsYyxkKXtjPWN8fHt9O2Q9ZHx8e307dmFyIGU9c2pjbC5qc29uLGY9ZS5qKHtpdjpzamNsLnJhbmRvbS5yYW5kb21Xb3Jkcyg0LDApfSxlLmRlZmF1bHRzKSxnO2UuaihmLGMpO2M9Zi5hZGF0YTtcInN0cmluZ1wiPT09dHlwZW9mIGYuc2FsdCYmKGYuc2FsdD1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoZi5zYWx0KSk7XCJzdHJpbmdcIj09PXR5cGVvZiBmLml2JiYoZi5pdj1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoZi5pdikpO2lmKCFzamNsLm1vZGVbZi5tb2RlXXx8IXNqY2wuY2lwaGVyW2YuY2lwaGVyXXx8XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYxMDA+PWYuaXRlcnx8NjQhPT1mLnRzJiY5NiE9PWYudHMmJjEyOCE9PWYudHN8fDEyOCE9PWYua3MmJjE5MiE9PWYua3MmJjB4MTAwIT09Zi5rc3x8Mj5mLml2Lmxlbmd0aHx8XG40PGYuaXYubGVuZ3RoKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBlbmNyeXB0OiBpbnZhbGlkIHBhcmFtZXRlcnNcIik7XCJzdHJpbmdcIj09PXR5cGVvZiBhPyhnPXNqY2wubWlzYy5jYWNoZWRQYmtkZjIoYSxmKSxhPWcua2V5LnNsaWNlKDAsZi5rcy8zMiksZi5zYWx0PWcuc2FsdCk6c2pjbC5lY2MmJmEgaW5zdGFuY2VvZiBzamNsLmVjYy5lbEdhbWFsLnB1YmxpY0tleSYmKGc9YS5rZW0oKSxmLmtlbXRhZz1nLnRhZyxhPWcua2V5LnNsaWNlKDAsZi5rcy8zMikpO1wic3RyaW5nXCI9PT10eXBlb2YgYiYmKGI9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhiKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBjJiYoZi5hZGF0YT1jPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYykpO2c9bmV3IHNqY2wuY2lwaGVyW2YuY2lwaGVyXShhKTtlLmooZCxmKTtkLmtleT1hO2YuY3Q9XCJjY21cIj09PWYubW9kZSYmc2pjbC5hcnJheUJ1ZmZlciYmc2pjbC5hcnJheUJ1ZmZlci5jY20mJlxuYiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP3NqY2wuYXJyYXlCdWZmZXIuY2NtLmVuY3J5cHQoZyxiLGYuaXYsYyxmLnRzKTpzamNsLm1vZGVbZi5tb2RlXS5lbmNyeXB0KGcsYixmLml2LGMsZi50cyk7cmV0dXJuIGZ9LGVuY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9c2pjbC5qc29uLGY9ZS5oYS5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIGUuZW5jb2RlKGYpfSxnYTpmdW5jdGlvbihhLGIsYyxkKXtjPWN8fHt9O2Q9ZHx8e307dmFyIGU9c2pjbC5qc29uO2I9ZS5qKGUuaihlLmooe30sZS5kZWZhdWx0cyksYiksYywhMCk7dmFyIGYsZztmPWIuYWRhdGE7XCJzdHJpbmdcIj09PXR5cGVvZiBiLnNhbHQmJihiLnNhbHQ9c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGIuc2FsdCkpO1wic3RyaW5nXCI9PT10eXBlb2YgYi5pdiYmKGIuaXY9c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGIuaXYpKTtpZighc2pjbC5tb2RlW2IubW9kZV18fCFzamNsLmNpcGhlcltiLmNpcGhlcl18fFwic3RyaW5nXCI9PT1cbnR5cGVvZiBhJiYxMDA+PWIuaXRlcnx8NjQhPT1iLnRzJiY5NiE9PWIudHMmJjEyOCE9PWIudHN8fDEyOCE9PWIua3MmJjE5MiE9PWIua3MmJjB4MTAwIT09Yi5rc3x8IWIuaXZ8fDI+Yi5pdi5sZW5ndGh8fDQ8Yi5pdi5sZW5ndGgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGRlY3J5cHQ6IGludmFsaWQgcGFyYW1ldGVyc1wiKTtcInN0cmluZ1wiPT09dHlwZW9mIGE/KGc9c2pjbC5taXNjLmNhY2hlZFBia2RmMihhLGIpLGE9Zy5rZXkuc2xpY2UoMCxiLmtzLzMyKSxiLnNhbHQ9Zy5zYWx0KTpzamNsLmVjYyYmYSBpbnN0YW5jZW9mIHNqY2wuZWNjLmVsR2FtYWwuc2VjcmV0S2V5JiYoYT1hLnVua2VtKHNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhiLmtlbXRhZykpLnNsaWNlKDAsYi5rcy8zMikpO1wic3RyaW5nXCI9PT10eXBlb2YgZiYmKGY9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhmKSk7Zz1uZXcgc2pjbC5jaXBoZXJbYi5jaXBoZXJdKGEpO2Y9XCJjY21cIj09PVxuYi5tb2RlJiZzamNsLmFycmF5QnVmZmVyJiZzamNsLmFycmF5QnVmZmVyLmNjbSYmYi5jdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP3NqY2wuYXJyYXlCdWZmZXIuY2NtLmRlY3J5cHQoZyxiLmN0LGIuaXYsYi50YWcsZixiLnRzKTpzamNsLm1vZGVbYi5tb2RlXS5kZWNyeXB0KGcsYi5jdCxiLml2LGYsYi50cyk7ZS5qKGQsYik7ZC5rZXk9YTtyZXR1cm4gMT09PWMucmF3P2Y6c2pjbC5jb2RlYy51dGY4U3RyaW5nLmZyb21CaXRzKGYpfSxkZWNyeXB0OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXNqY2wuanNvbjtyZXR1cm4gZS5nYShhLGUuZGVjb2RlKGIpLGMsZCl9LGVuY29kZTpmdW5jdGlvbihhKXt2YXIgYixjPVwie1wiLGQ9XCJcIjtmb3IoYiBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoYikpe2lmKCFiLm1hdGNoKC9eW2EtejAtOV0rJC9pKSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZW5jb2RlOiBpbnZhbGlkIHByb3BlcnR5IG5hbWVcIik7Yys9ZCsnXCInK1xuYisnXCI6JztkPVwiLFwiO3N3aXRjaCh0eXBlb2YgYVtiXSl7Y2FzZSBcIm51bWJlclwiOmNhc2UgXCJib29sZWFuXCI6Yys9YVtiXTticmVhaztjYXNlIFwic3RyaW5nXCI6Yys9J1wiJytlc2NhcGUoYVtiXSkrJ1wiJzticmVhaztjYXNlIFwib2JqZWN0XCI6Yys9J1wiJytzamNsLmNvZGVjLmJhc2U2NC5mcm9tQml0cyhhW2JdLDApKydcIic7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwianNvbiBlbmNvZGU6IHVuc3VwcG9ydGVkIHR5cGVcIik7fX1yZXR1cm4gYytcIn1cIn0sZGVjb2RlOmZ1bmN0aW9uKGEpe2E9YS5yZXBsYWNlKC9cXHMvZyxcIlwiKTtpZighYS5tYXRjaCgvXlxcey4qXFx9JC8pKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBkZWNvZGU6IHRoaXMgaXNuJ3QganNvbiFcIik7YT1hLnJlcGxhY2UoL15cXHt8XFx9JC9nLFwiXCIpLnNwbGl0KC8sLyk7dmFyIGI9e30sYyxkO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspe2lmKCEoZD1hW2NdLm1hdGNoKC9eXFxzKig/OihbXCInXT8pKFthLXpdW2EtejAtOV0qKVxcMSlcXHMqOlxccyooPzooLT9cXGQrKXxcIihbYS16MC05K1xcLyUqXy5APVxcLV0qKVwifCh0cnVlfGZhbHNlKSkkL2kpKSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZGVjb2RlOiB0aGlzIGlzbid0IGpzb24hXCIpO1xubnVsbCE9ZFszXT9iW2RbMl1dPXBhcnNlSW50KGRbM10sMTApOm51bGwhPWRbNF0/YltkWzJdXT1kWzJdLm1hdGNoKC9eKGN0fGFkYXRhfHNhbHR8aXYpJC8pP3NqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhkWzRdKTp1bmVzY2FwZShkWzRdKTpudWxsIT1kWzVdJiYoYltkWzJdXT1cInRydWVcIj09PWRbNV0pfXJldHVybiBifSxqOmZ1bmN0aW9uKGEsYixjKXt2b2lkIDA9PT1hJiYoYT17fSk7aWYodm9pZCAwPT09YilyZXR1cm4gYTtmb3IodmFyIGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpKXtpZihjJiZ2b2lkIDAhPT1hW2RdJiZhW2RdIT09YltkXSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcInJlcXVpcmVkIHBhcmFtZXRlciBvdmVycmlkZGVuXCIpO2FbZF09YltkXX1yZXR1cm4gYX0scmE6ZnVuY3Rpb24oYSxiKXt2YXIgYz17fSxkO2ZvcihkIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShkKSYmYVtkXSE9PWJbZF0mJihjW2RdPWFbZF0pO3JldHVybiBjfSxxYTpmdW5jdGlvbihhLFxuYil7dmFyIGM9e30sZDtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCsrKXZvaWQgMCE9PWFbYltkXV0mJihjW2JbZF1dPWFbYltkXV0pO3JldHVybiBjfX07c2pjbC5lbmNyeXB0PXNqY2wuanNvbi5lbmNyeXB0O3NqY2wuZGVjcnlwdD1zamNsLmpzb24uZGVjcnlwdDtzamNsLm1pc2Mub2E9e307c2pjbC5taXNjLmNhY2hlZFBia2RmMj1mdW5jdGlvbihhLGIpe3ZhciBjPXNqY2wubWlzYy5vYSxkO2I9Ynx8e307ZD1iLml0ZXJ8fDFFMztjPWNbYV09Y1thXXx8e307ZD1jW2RdPWNbZF18fHtmaXJzdFNhbHQ6Yi5zYWx0JiZiLnNhbHQubGVuZ3RoP2Iuc2FsdC5zbGljZSgwKTpzamNsLnJhbmRvbS5yYW5kb21Xb3JkcygyLDApfTtjPXZvaWQgMD09PWIuc2FsdD9kLmZpcnN0U2FsdDpiLnNhbHQ7ZFtjXT1kW2NdfHxzamNsLm1pc2MucGJrZGYyKGEsYyxiLml0ZXIpO3JldHVybntrZXk6ZFtjXS5zbGljZSgwKSxzYWx0OmMuc2xpY2UoMCl9fTtcblwidW5kZWZpbmVkXCIhPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cyYmKG1vZHVsZS5leHBvcnRzPXNqY2wpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiBzamNsfSk7XG4iLCAiY29uc3QgZGVmYXVsdEVycm9yQ29uZmlnID0ge1xyXG4gICAgd2l0aFN0YWNrVHJhY2U6IGZhbHNlLFxyXG59O1xyXG4vLyBDdXN0b20gZXJyb3Igb2JqZWN0XHJcbi8vIENvbnRleHQgLyBkaXNjdXNzaW9uOiBodHRwczovL2dpdGh1Yi5jb20vc3VwZXJtYWNyby9uZXZlcnRocm93L3B1bGwvMjE1XHJcbmNvbnN0IGNyZWF0ZU5ldmVyVGhyb3dFcnJvciA9IChtZXNzYWdlLCByZXN1bHQsIGNvbmZpZyA9IGRlZmF1bHRFcnJvckNvbmZpZykgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHJlc3VsdC5pc09rKClcclxuICAgICAgICA/IHsgdHlwZTogJ09rJywgdmFsdWU6IHJlc3VsdC52YWx1ZSB9XHJcbiAgICAgICAgOiB7IHR5cGU6ICdFcnInLCB2YWx1ZTogcmVzdWx0LmVycm9yIH07XHJcbiAgICBjb25zdCBtYXliZVN0YWNrID0gY29uZmlnLndpdGhTdGFja1RyYWNlID8gbmV3IEVycm9yKCkuc3RhY2sgOiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICBzdGFjazogbWF5YmVTdGFjayxcclxuICAgIH07XHJcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuY2xhc3MgUmVzdWx0QXN5bmMge1xyXG4gICAgY29uc3RydWN0b3IocmVzKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IHJlcztcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tU2FmZVByb21pc2UocHJvbWlzZSkge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlLnRoZW4oKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21Qcm9taXNlKHByb21pc2UsIGVycm9yRm4pIHtcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gcHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gbmV3IEVycihlcnJvckZuKGUpKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuZXdQcm9taXNlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBzdGF0aWMgZnJvbVRocm93YWJsZShmbiwgZXJyb3JGbikge1xyXG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZm4oLi4uYXJncykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoZXJyb3JGbiA/IGVycm9yRm4oZXJyb3IpIDogZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSkoKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lKGFzeW5jUmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0QXN5bmNMaXN0KGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY29tYmluZVdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzKGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZihyZXMudmFsdWUpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgYW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3UmVzID0geWllbGQgZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAobmV3UmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKG5ld1Jlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRlZSBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSBlcnJvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgbWFwRXJyKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNPaygpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoeWllbGQgZihyZXMuZXJyb3IpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWUgaW5zdGFuY2VvZiBSZXN1bHRBc3luYyA/IG5ld1ZhbHVlLl9wcm9taXNlIDogbmV3VmFsdWU7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLm1hdGNoKG9rLCBfZXJyKSk7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMudW53cmFwT3IodCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gOS4wLjAuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiB1c2UgYHNhZmVUcnlgIHdpdGhvdXQgdGhpcyBtZXRob2QuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogc2FmZVRyeShhc3luYyBmdW5jdGlvbiogKCkge1xyXG4gICAgICogICBjb25zdCBva1ZhbHVlID0geWllbGQqIHlvdXJSZXN1bHRcclxuICAgICAqIH0pXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEVtdWxhdGVzIFJ1c3QncyBgP2Agb3BlcmF0b3IgaW4gYHNhZmVUcnlgJ3MgYm9keS4gU2VlIGFsc28gYHNhZmVUcnlgLlxyXG4gICAgICovXHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIHNhZmVVbndyYXBfMSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQoeWllbGQgX19hd2FpdCh5aWVsZCogX19hc3luY0RlbGVnYXRvcihfX2FzeW5jVmFsdWVzKHlpZWxkIF9fYXdhaXQodGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy5zYWZlVW53cmFwKCkpKSkpKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBNYWtlcyBSZXN1bHRBc3luYyBpbXBsZW1lbnQgUHJvbWlzZUxpa2U8UmVzdWx0PlxyXG4gICAgdGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBfYSgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIF9fYXdhaXQoZXJyQXN5bmMocmVzdWx0LmVycm9yKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBfX2F3YWl0KHJlc3VsdC52YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgb2tBc3luYyA9ICh2YWx1ZSkgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgT2sodmFsdWUpKSk7XHJcbmNvbnN0IGVyckFzeW5jID0gKGVycikgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgRXJyKGVycikpKTtcclxuY29uc3QgZnJvbVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZTtcclxuY29uc3QgZnJvbVNhZmVQcm9taXNlID0gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlO1xyXG5jb25zdCBmcm9tQXN5bmNUaHJvd2FibGUgPSBSZXN1bHRBc3luYy5mcm9tVGhyb3dhYmxlO1xuXG4vKipcclxuICogU2hvcnQgY2lyY3VpdHMgb24gdGhlIEZJUlNUIEVyciB2YWx1ZSB0aGF0IHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0ID0gKHJlc3VsdExpc3QpID0+IHtcclxuICAgIGxldCBhY2MgPSBvayhbXSk7XHJcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFjYy5tYXAoKGxpc3QpID0+IGxpc3QucHVzaChyZXN1bHQudmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjO1xyXG59O1xyXG4vKiBUaGlzIGlzIHRoZSB0eXBlc2FmZSB2ZXJzaW9uIG9mIFByb21pc2UuYWxsXHJcbiAqXHJcbiAqIFRha2VzIGEgbGlzdCBvZiBSZXN1bHRBc3luYzxULCBFPiBhbmQgc3VjY2VzcyBpZiBhbGwgaW5uZXIgcmVzdWx0cyBhcmUgT2sgdmFsdWVzXHJcbiAqIG9yIGZhaWxzIGlmIG9uZSAob3IgbW9yZSkgb2YgdGhlIGlubmVyIHJlc3VsdHMgYXJlIEVyciB2YWx1ZXNcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3QgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdCk7XHJcbi8qKlxyXG4gKiBHaXZlIGEgbGlzdCBvZiBhbGwgdGhlIGVycm9ycyB3ZSBmaW5kXHJcbiAqL1xyXG5jb25zdCBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjLmVycm9yLnB1c2gocmVzdWx0LmVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MgPSBlcnIoW3Jlc3VsdC5lcnJvcl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNPaygpICYmIGFjYy5pc09rKCkpIHtcclxuICAgICAgICAgICAgYWNjLnZhbHVlLnB1c2gocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzRXJyKClcclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzID0gKGFzeW5jUmVzdWx0TGlzdCkgPT4gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlKFByb21pc2UuYWxsKGFzeW5jUmVzdWx0TGlzdCkpLmFuZFRoZW4oY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcclxudmFyIFJlc3VsdDtcclxuKGZ1bmN0aW9uIChSZXN1bHQpIHtcclxuICAgIC8qKlxyXG4gICAgICogV3JhcHMgYSBmdW5jdGlvbiB3aXRoIGEgdHJ5IGNhdGNoLCBjcmVhdGluZyBhIG5ldyBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lXHJcbiAgICAgKiBhcmd1bWVudHMgYnV0IHJldHVybmluZyBgT2tgIGlmIHN1Y2Nlc3NmdWwsIGBFcnJgIGlmIHRoZSBmdW5jdGlvbiB0aHJvd3NcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm4gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIG9rIG9uIHN1Y2Nlc3Mgb3IgZXJyIG9uIGZhaWx1cmVcclxuICAgICAqIEBwYXJhbSBlcnJvckZuIHdoZW4gYW4gZXJyb3IgaXMgdGhyb3duLCB0aGlzIHdpbGwgd3JhcCB0aGUgZXJyb3IgcmVzdWx0IGlmIHByb3ZpZGVkXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBmdW5jdGlvbiBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbiguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvayhyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyKGVycm9yRm4gPyBlcnJvckZuKGUpIDogZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmZyb21UaHJvd2FibGUgPSBmcm9tVGhyb3dhYmxlO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZShyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0KHJlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmNvbWJpbmUgPSBjb21iaW5lO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZVdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZVdpdGhBbGxFcnJvcnMgPSBjb21iaW5lV2l0aEFsbEVycm9ycztcclxufSkoUmVzdWx0IHx8IChSZXN1bHQgPSB7fSkpO1xyXG5jb25zdCBvayA9ICh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKTtcclxuZnVuY3Rpb24gZXJyKGVycikge1xyXG4gICAgcmV0dXJuIG5ldyBFcnIoZXJyKTtcclxufVxyXG5mdW5jdGlvbiBzYWZlVHJ5KGJvZHkpIHtcclxuICAgIGNvbnN0IG4gPSBib2R5KCkubmV4dCgpO1xyXG4gICAgaWYgKG4gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuLnRoZW4oKHIpID0+IHIudmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuLnZhbHVlO1xyXG59XHJcbmNsYXNzIE9rIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlzRXJyKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pc09rKCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBvayhmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcEVycihfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKF92YWx1ZSkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGYodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIFRlZSBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoX2YpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY0FuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFzeW5jQW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSkubWFwKCgpID0+IHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNNYXAoZikge1xyXG4gICAgICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoZih0aGlzLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICB1bndyYXBPcihfdikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWF0Y2gob2ssIF9lcnIpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS15aWVsZCAqL1xyXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXBFcnIoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBFcnJgIG9uIGFuIE9rJywgdGhpcywgY29uZmlnKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcywgcmVxdWlyZS15aWVsZFxyXG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG59XHJcbmNsYXNzIEVyciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgIH1cclxuICAgIGlzT2soKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBlcnIoZih0aGlzLmVycm9yKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jQW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhyb3VnaChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jTWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgdW53cmFwT3Iodikge1xyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG4gICAgbWF0Y2goX29rLCBlcnIpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgc2FmZVVud3JhcCgpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB5aWVsZCBlcnIoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvIG5vdCB1c2UgdGhpcyBnZW5lcmF0b3Igb3V0IG9mIGBzYWZlVHJ5YCcpO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKGNvbmZpZykge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZU5ldmVyVGhyb3dFcnJvcignQ2FsbGVkIGBfdW5zYWZlVW53cmFwYCBvbiBhbiBFcnInLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihfKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3I7XHJcbiAgICB9XHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgeWllbGQgc2VsZjtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgIH1cclxufVxyXG5jb25zdCBmcm9tVGhyb3dhYmxlID0gUmVzdWx0LmZyb21UaHJvd2FibGU7XHJcbi8vI2VuZHJlZ2lvblxuXG5leHBvcnQgeyBFcnIsIE9rLCBSZXN1bHQsIFJlc3VsdEFzeW5jLCBlcnIsIGVyckFzeW5jLCBmcm9tQXN5bmNUaHJvd2FibGUsIGZyb21Qcm9taXNlLCBmcm9tU2FmZVByb21pc2UsIGZyb21UaHJvd2FibGUsIG9rLCBva0FzeW5jLCBzYWZlVHJ5IH07XG4iLCAidHlwZSBKc29uYWJsZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IG51bGxcbiAgfCB1bmRlZmluZWRcbiAgfCByZWFkb25seSBKc29uYWJsZVtdXG4gIHwgeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBKc29uYWJsZSB9XG4gIHwgeyB0b0pTT04oKTogSnNvbmFibGUgfTtcblxuZXhwb3J0IGNsYXNzIEJhc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ/OiBKc29uYWJsZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgY2F1c2U/OiBFcnJvcjsgY29udGV4dD86IEpzb25hYmxlIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgeyBjYXVzZSwgY29udGV4dCB9ID0gb3B0aW9ucztcblxuICAgIHN1cGVyKG1lc3NhZ2UsIHsgY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgV2ViU29ja2V0RXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBXZWJTb2NrZXRFcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2UgPSBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0XCI7XG59XG4iLCAiaW1wb3J0IHsgZXJyQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Nvbm5lY3Rpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivc2VydmVyLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckNvbmZpZyB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItY29uZmlnLnRzXCI7XG5cbi8qKlxuICogRW5zdXJlIGFuIGVycm9yIG1lc3NhZ2UgaXMgdHJhbnNmb3JtZWQgaW4gYW4gRXJyb3Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5zdXJlRXJyb3IgPSAodmFsdWU6IHVua25vd24pOiBFcnJvciA9PiB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gdmFsdWU7XG5cbiAgbGV0IHN0cmluZ2lmaWVkID0gXCJbVW5hYmxlIHRvIHN0cmluZ2lmeSB0aGUgdGhyb3duIHZhbHVlXVwiO1xuICB0cnkge1xuICAgIHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAvKiBlbXB0eSAqL1xuICB9XG5cbiAgcmV0dXJuIG5ldyBFcnJvcihzdHJpbmdpZmllZCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIEx1ZmkncyBjb25maWcgZnJvbSBpdHMgQVBJXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVXJsXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZmV0Y2hTZXJ2ZXJDb25maWcgPSAoXG4gIGluc3RhbmNlVXJsOiBVUkwsXG4pOiBSZXN1bHRBc3luYzxTZXJ2ZXJDb25maWcsIEVycm9yPiA9PiB7XG4gIGNvbnN0IG9yaWdpbk1hdGNoZXMgPSBpbnN0YW5jZVVybC5ocmVmLm1hdGNoKFxuICAgIC8oLio/KVxcLz8oPzpcXC9bZHJdezF9XFwvfGxvZ2luXFwvP3xmaWxlc1xcLz8pLyxcbiAgKTtcblxuICBjb25zdCB1cmxPcmlnaW4gPSBvcmlnaW5NYXRjaGVzICYmIG9yaWdpbk1hdGNoZXNbMV1cbiAgICA/IG9yaWdpbk1hdGNoZXNbMV1cbiAgICA6IGluc3RhbmNlVXJsLm9yaWdpbjtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgZmV0Y2godXJsT3JpZ2luICsgXCIvYWJvdXQvY29uZmlnXCIpLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDb25uZWN0aW9uRXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgKS5hbmRUaGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICByZXNwb25zZS5qc29uKCksXG4gICAgICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgICBuZXcgU2VydmVyRXJyb3IodW5kZWZpbmVkLCB7IGNvbnRleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQgfSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEZW5vUnVudGltZSA9ICgpOiBib29sZWFuID0+IHR5cGVvZiBEZW5vICE9PSBcInVuZGVmaW5lZFwiO1xuXG5leHBvcnQgY29uc3QgaXNTZWN1cmVDb250ZXh0ID0gKCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpIHx8IGdsb2JhbFRoaXMuaXNTZWN1cmVDb250ZXh0IHx8XG4gICAgZ2xvYmFsVGhpcy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJodHRwczpcIjtcbn07XG5cbmV4cG9ydCBjb25zdCB3b3JrZXJVcmwgPSAocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBVUkwgPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpXG4gICAgPyBuZXcgVVJMKGAuL3dvcmtlci8ke3JlbGF0aXZlUGF0aH0udHNgLCBuZXcgVVJMKFwiLlwiLCBpbXBvcnQubWV0YS51cmwpLmhyZWYpXG4gICAgOiBuZXcgVVJMKFxuICAgICAgaW1wb3J0Lm1ldGEucmVzb2x2ZShcbiAgICAgICAgYC4vJHtcbiAgICAgICAgICByZWxhdGl2ZVBhdGggIT09IFwiZW5jcnlwdFwiID8gYHdvcmtlci8ke3JlbGF0aXZlUGF0aH1gIDogcmVsYXRpdmVQYXRoXG4gICAgICAgIH0uanNgLFxuICAgICAgKSxcbiAgICApO1xufTtcbiIsICJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCB7IFdPUktFUl9BQ1RJT04gfSBmcm9tIFwifi9lbnVtL3dvcmtlci1hY3Rpb24udHNcIjtcbmltcG9ydCB0eXBlIHsgTHVmaUZpbGUgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWZpbGUudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyQWN0aW9uTWVzc2FnZSB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItYWN0aW9uLW1lc3NhZ2UudHNcIjtcbmltcG9ydCB7IEVWRU5UIH0gZnJvbSBcIn4vZW51bS9ldmVudC50c1wiO1xuaW1wb3J0IHsgVVBMT0FEX1NUQVRVUyB9IGZyb20gXCJ+L2VudW0vZmlsZS1zdGF0dXMudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyRXZlbnQgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWV2ZW50LnRzXCI7XG5cbmRlY2xhcmUgbGV0IHNlbGY6IFdvcmtlcjtcblxuZXhwb3J0IGNvbnN0IGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsZSBpbiB3b3JrZXJzIGFuZCBwcm92aWRlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1haW4gdGhyZWFkXG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcGFyYW0gYXJnc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbGUgPSAobHVmaUZpbGU6IEx1ZmlGaWxlLCBhcmdzOiBQYXJ0aWFsPEx1ZmlGaWxlPikgPT4ge1xuICBPYmplY3QuYXNzaWduKGx1ZmlGaWxlLCBhcmdzKTtcblxuICBpZiAodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBldmVudDogRVZFTlQuRklMRV9VUERBVEVELFxuICAgICAgbHVmaUZpbGUsXG4gICAgfSBhcyBXb3JrZXJFdmVudCk7XG4gIH1cblxuICByZXR1cm4gbHVmaUZpbGU7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZEZpbGVFcnJvciA9IChsdWZpRmlsZTogTHVmaUZpbGUsIGVycm9yOiBFcnJvcikgPT4ge1xuICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7IHVwbG9hZFN0YXR1czogVVBMT0FEX1NUQVRVUy5GQUlMRUQgfSk7XG5cbiAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvciB9IGFzIFdvcmtlckV2ZW50KTtcbn07XG5cbi8qKlxuICogSW5pdCBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGNoaWxkIHdvcmtlcidzIG9ubWVzc2FnZSBldmVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gIGV2ZW50cy5vbmNlKEVWRU5ULlNPQ0tFVF9PUEVORUQsICgpID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGV2ZW50OiBFVkVOVC5TT0NLRVRfT1BFTkVELFxuICAgIH0pO1xuICB9KTtcblxuICBldmVudHMub25jZShFVkVOVC5PUEVSQVRJT05fRkFJTEVELCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvciB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNXb3JrZXJBY3Rpb25NZXNzYWdlID0gKFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBtZXNzYWdlOiBhbnksXG4pOiBtZXNzYWdlIGlzIFdvcmtlckFjdGlvbk1lc3NhZ2UgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBtZXNzYWdlID09PSBcIm9iamVjdFwiICYmXG4gICAgbWVzc2FnZSAhPT0gbnVsbCAmJlxuICAgIFwiYWN0aW9uXCIgaW4gbWVzc2FnZSAmJlxuICAgIE9iamVjdC52YWx1ZXMoV09SS0VSX0FDVElPTikuaW5jbHVkZXMobWVzc2FnZS5hY3Rpb24pXG4gICk7XG59O1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgImltcG9ydCB7XG4gIERlY29kZSBhcyBiNjRkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjRlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjRcIjtcbmltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgc2pjbCBmcm9tIFwibHVmaS1zamNsXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHsgRGVjcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2RlY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyB0eXBlIEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBFbmNyeXB0ZWREYXRhIG9yIGEgc3RyaW5nIHVzaW5nIHRoZSBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvbi5cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gZW5jcnlwdGVkRGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhIHwgc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8QXJyYXlCdWZmZXIsIERlY3J5cHRpb25FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgZW5jcnlwdGVkRGF0YSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBlbmNyeXB0ZWREYXRhXG4gICAgICA6IChlbmNyeXB0ZWREYXRhLmRhdGEpO1xuXG4gICAgcmV0dXJuIG9rQXN5bmMoYjY0ZGVjb2RlKHNqY2wuZGVjcnlwdChrZXksIGRhdGEpKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IERlY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEVuY3J5cHQgYW4gQXJyYXlCdWZmZXIgaW50byBhbiBFbmNyeXB0ZWREYXRhIHVzaW5nIHRoZSBwcm92aWRlZCBrZXlcbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEFycmF5QnVmZmVyLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZW5jcnlwdGVkID0gc2pjbC5lbmNyeXB0KGtleSwgYjY0ZW5jb2RlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gb2tBc3luYyh7XG4gICAgICBhbGdvOiBDcnlwdG9BbGdvcml0aG0uU2pjbCxcbiAgICAgIGRhdGE6IGVuY3J5cHRlZCxcbiAgICAgIGl2OiBKU09OLnBhcnNlKGVuY3J5cHRlZCBhcyB1bmtub3duIGFzIHN0cmluZykuaXYsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IEVuY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyB1c2luZyBTamNsIEFQSVxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9ICgpOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMoc2pjbC5yYW5kb20ucmFuZG9tV29yZHMoOCwgMTApKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGdlbmVyYXRlIGtleVwiLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyBTamNsIEFQSVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5oZXguZnJvbUJpdHMoc2pjbC5oYXNoLnNoYTUxMi5oYXNoKHBhc3N3b3JkKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhuZXcgSGFzaGluZ0Vycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXRlY3QgaWYgdGhlIGtleSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgU2pjbC4gU2luY2Ugd2UncmUgbm90IGdlbmVyYXRpbmcgYW4gZXF1YWwgc3ltYm9sIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBXZWJDcnlwdG8gQVBJIChieSB1c2luZyBiYXNlNjR1cmwpLCBpdCdzIGVhc3kgdG8gZGV0ZWN0XG4gKlxuICogQHBhcmFtIGtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2pjbEtleSA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4ga2V5W2tleS5sZW5ndGggLSAxXSA9PT0gXCI9XCI7XG59O1xuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBEZWNyeXB0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2U6IHN0cmluZyA9IFwiVW5hYmxlIHRvIGRlY3J5cHQgdGhlIHByb3ZpZGVkIGRhdGFcIjtcbn1cbiIsICJpbXBvcnQge1xuICBEZWNvZGUgYXMgYjY0dXJsZGVjb2RlLFxuICBFbmNvZGUgYXMgYjY0dXJsZW5jb2RlLFxufSBmcm9tIFwiYXJyYXlidWZmZXItZW5jb2RpbmcvYmFzZTY0L3VybFwiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IERlY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9kZWNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBIYXNoaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50c1wiO1xuXG4vKipcbiAqIERlY3J5cHQgYW4gZW5jcnlwdGVkRGF0YSB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gZW5jcnlwdGVkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZGVjcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIGVuY3J5cHRlZDogRW5jcnlwdGVkRGF0YSxcbik6IFJlc3VsdEFzeW5jPEFycmF5QnVmZmVyLCBEZWNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgcmV0dXJuIGltcG9ydEtleShrZXkpLmFuZFRoZW4oKGltcG9ydGVkS2V5KSA9PlxuICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgY3J5cHRvLnN1YnRsZS5kZWNyeXB0KFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICAgICAgaXY6IGVuY3J5cHRlZC5pdiBhcyBVaW50OEFycmF5LFxuICAgICAgICB9LFxuICAgICAgICBpbXBvcnRlZEtleSxcbiAgICAgICAgZW5jcnlwdGVkLmRhdGEgYXMgQXJyYXlCdWZmZXIsXG4gICAgICApLFxuICAgICAgKGVycm9yKSA9PiBuZXcgRGVjcnlwdGlvbkVycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICAgIClcbiAgKTtcbn07XG5cbi8qKlxuICogRW5jcnlwdCBhbiBBcnJheUJ1ZmZlciBpbnRvIGFuIEVuY3J5cHRlZERhdGEgdXNpbmcgdGhlIHByb3ZpZGVkIGtleVxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbik6IFJlc3VsdEFzeW5jPEVuY3J5cHRlZERhdGEsIEVuY3J5cHRpb25FcnJvcj4gPT4ge1xuICByZXR1cm4gaW1wb3J0S2V5KGtleSkuYW5kVGhlbigoaW1wb3J0ZWRLZXkpID0+IHtcbiAgICBjb25zdCBpdiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTIpKTtcbiAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICBjcnlwdG8uc3VidGxlLmVuY3J5cHQoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgICAgICBpdixcbiAgICAgICAgfSxcbiAgICAgICAgaW1wb3J0ZWRLZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgKSxcbiAgICAgIChlcnJvcikgPT5cbiAgICAgICAgbmV3IEVuY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgICB9KSxcbiAgICApLmFuZFRoZW4oKGVuY3J5cHRlZCkgPT4ge1xuICAgICAgcmV0dXJuIG9rQXN5bmMoe1xuICAgICAgICBhbGdvOiBDcnlwdG9BbGdvcml0aG0uV2ViQ3J5cHRvLFxuICAgICAgICBkYXRhOiBlbmNyeXB0ZWQsXG4gICAgICAgIGl2LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBzdHJpbmcgaW50byBhIENyeXB0b0tleSwgdXNhYmxlIGluIFdlYiBDcnlwdG8gQVBJXG4gKlxuICogQHBhcmFtIGtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGltcG9ydEtleSA9IChrZXk6IHN0cmluZyk6IFJlc3VsdEFzeW5jPENyeXB0b0tleSwgQ3J5cHRvRXJyb3I+ID0+IHtcbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICAgXCJyYXdcIixcbiAgICAgIGI2NHVybGRlY29kZShrZXkpLFxuICAgICAgeyBuYW1lOiBcIkFFUy1HQ01cIiB9LFxuICAgICAgZmFsc2UsXG4gICAgICBbXG4gICAgICAgIFwiZW5jcnlwdFwiLFxuICAgICAgICBcImRlY3J5cHRcIixcbiAgICAgIF0sXG4gICAgKSxcbiAgICAoZXJyb3IpID0+XG4gICAgICBuZXcgQ3J5cHRvRXJyb3IoXCJVbmFibGUgdG8gaW1wb3J0IGNyeXB0b2dyYXBoeSBrZXlcIiwge1xuICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSksXG4gICk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyB1c2luZyBXZWIgQ3J5cHRvIEFQSS5cbiAqXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVLZXkgPSAoKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBDcnlwdG9FcnJvcj4gPT4ge1xuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgIGNyeXB0by5zdWJ0bGVcbiAgICAgICAgLmdlbmVyYXRlS2V5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQUVTLUdDTVwiLFxuICAgICAgICAgICAgbGVuZ3RoOiAyNTYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCJdLFxuICAgICAgICApXG4gICAgICAgIC50aGVuKChnZW5lcmF0ZWRLZXkpID0+XG4gICAgICAgICAgY3J5cHRvLnN1YnRsZVxuICAgICAgICAgICAgLmV4cG9ydEtleShcInJhd1wiLCBnZW5lcmF0ZWRLZXkpXG4gICAgICAgICAgICAudGhlbigoa2V5KSA9PiByZXNvbHZlKGI2NHVybGVuY29kZShrZXkpKSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBiYXNlNjQgZW5jb2RlIHRoZSB1cmxcIiwge1xuICAgICAgICAgICAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gcmVqZWN0KGVycm9yKSlcbiAgICApLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBnZW5lcmF0ZSBrZXlcIiwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICApO1xufTtcblxuLyoqXG4gKiBIYXNoIGEgcGFzc3dvcmQgdXNpbmcgV2ViQ3J5cHRvIEFQSVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PiB7XG4gIGNvbnN0IHByb21pc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICBuZXcgVWludDhBcnJheShcbiAgICAgICAgYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXG4gICAgICAgICAgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBhc3N3b3JkKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKS5tYXAoKGIpID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKSkuam9pbihcIlwiKTtcbiAgfTtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgcHJvbWlzZSgpLFxuICAgIChlcnJvcikgPT4gbmV3IEhhc2hpbmdFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgKTtcbn07XG4iLCAiaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgdHlwZSB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBEZWNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgKiBhcyBzamNsIGZyb20gXCJ+L2FwaS9jcnlwdG8vc2pjbC50c1wiO1xuaW1wb3J0ICogYXMgd2ViIGZyb20gXCJ+L2FwaS9jcnlwdG8vd2ViLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBFbmNyeXB0ZWREYXRhIG9iamVjdCB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEVuY3J5cHRlZERhdGEsXG4pOiBSZXN1bHRBc3luYzxBcnJheUJ1ZmZlciwgRGVjcnlwdGlvbkVycm9yPiA9PlxuICB2YWx1ZS5hbGdvID09PSB1bmRlZmluZWQgfHwgdmFsdWUuYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2xcbiAgICA/IHNqY2wuZGVjcnlwdChrZXksIHZhbHVlKVxuICAgIDogd2ViLmRlY3J5cHQoa2V5LCB2YWx1ZSk7XG5cbi8qKlxuICogRW5jcnlwdCBhbiBBcnJheUJ1ZmZlciB1c2luZyB0aGUgcHJvdmlkZWQga2V5IGFuZCBhbGdvcml0aG1cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PlxuICAoYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2wpXG4gICAgPyBzamNsLmVuY3J5cHQoa2V5LCB2YWx1ZSlcbiAgICA6IHdlYi5lbmNyeXB0KGtleSwgdmFsdWUpO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgbmV3IGtleSBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uXG4gKlxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9IChcbiAgYWxnbyA9IENyeXB0b0FsZ29yaXRobS5XZWJDcnlwdG8sXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PlxuICBhbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbCA/IHNqY2wuZ2VuZXJhdGVLZXkoKSA6IHdlYi5nZW5lcmF0ZUtleSgpO1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyB0aGUgcHJvdmlkZWQgYWxnb3JpdGhtXG4gKlxuICogQHBhcmFtIHBhc3N3b3JkXG4gKiBAcGFyYW0gYWxnb1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBIYXNoaW5nRXJyb3I+ID0+XG4gIGFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsXG4gICAgPyBzamNsLmhhc2hQYXNzd29yZChwYXNzd29yZClcbiAgICA6IHdlYi5oYXNoUGFzc3dvcmQocGFzc3dvcmQpO1xuIiwgImltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgeyBMdWZpRmlsZSB9IGZyb20gXCJ+L2VudGl0aWVzL2x1ZmktZmlsZS50c1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuaW1wb3J0IHsgU29ja2V0UGF0aCB9IGZyb20gXCJ+L2VudW0vc29ja2V0LXBhdGgudHNcIjtcbmltcG9ydCB7IFVwbG9hZEVycm9yIH0gZnJvbSBcIn4vZXJyb3IvdXBsb2FkL3VwbG9hZC1lcnJvci50c1wiO1xuaW1wb3J0IHsgV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd2Vic29ja2V0L3dlYnNvY2tldC1jb25uZWN0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBXZWJTb2NrZXRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50VXBsb2FkQ2h1bmtNZXRhZGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9jbGllbnQtdXBsb2FkLWNodW5rLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyQ2FuY2VsTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2Uvc2VydmVyLWNhbmNlbC1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1kb3dubG9hZC1jaHVuay1zdWNjZXNzLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlclVwbG9hZENodW5rTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2Uvc2VydmVyLXVwbG9hZC1jaHVuay1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGEgfSBmcm9tIFwifi90eXBlL3NlcnZlci1kb3dubG9hZC1jaHVuay1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHsgZW5zdXJlRXJyb3IgfSBmcm9tIFwifi91dGlscy50c1wiO1xuaW1wb3J0IHsgZXZlbnRzLCB1cGRhdGVGaWxlIH0gZnJvbSBcIn4vd29ya2VyL3NoYXJlZC50c1wiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJ+L2FwaS9jcnlwdG8udHNcIjtcbmltcG9ydCB7XG4gIERlY29kZSBhcyBiNjRkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjRlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjRcIjtcblxuZXhwb3J0IGNvbnN0IHNvY2tldHM6IHtcbiAgW2tleTogc3RyaW5nXTogV2ViU29ja2V0O1xufSA9IHt9O1xuXG5jb25zdCBNQVhfRVJST1JTID0gNTtcblxuLyoqXG4gKiBIYW5kbGUgV2ViU29ja2V0IHJlc3BvbnNlIGZvciBjYW5jZWwgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvbkNhbmNlbE1lc3NhZ2UgPSAoXG4gIGRhdGE6IFNlcnZlckNhbmNlbE1ldGFkYXRhLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgRXJyb3I+ID0+IHtcbiAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX0NBTkNFTExFRCwgZGF0YS5zdWNjZXNzKTtcblxuICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBIYW5kbGUgV2ViU29ja2V0IHJlc3BvbnNlIGZvciBkb3dubG9hZCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHJlc3BvbnNlXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uRG93bmxvYWRNZXNzYWdlID0gKFxuICByZXNwb25zZTogc3RyaW5nLFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBjb25zdCByZXN1bHQgPSByZXNwb25zZS5zcGxpdChcIlhYTU9KT1hYXCIpO1xuICBjb25zdCBtZXRhZGF0YVN0cmluZyA9IHJlc3VsdC5zaGlmdCgpO1xuXG4gIGlmIChtZXRhZGF0YVN0cmluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKG1ldGFkYXRhU3RyaW5nKSBhcyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGE7XG5cbiAgICBpZiAoaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhKG1ldGFkYXRhKSkge1xuICAgICAgY29uc3QgZGF0YVN0cmluZyA9IHJlc3VsdC5zaGlmdCgpO1xuXG4gICAgICBpZiAoZGF0YVN0cmluZykge1xuICAgICAgICBjb25zdCBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyaW5nKTtcblxuICAgICAgICAvLyBJZiBmaWxlIHdhcyB1cGxvYWRlZCB1c2luZyBMdWZpIEFQSVxuICAgICAgICBpZiAoZW5jcnlwdGVkRGF0YS5pdikge1xuICAgICAgICAgIGVuY3J5cHRlZERhdGEuaXYgPSBuZXcgVWludDhBcnJheShPYmplY3QudmFsdWVzKGVuY3J5cHRlZERhdGEuaXYpKTtcbiAgICAgICAgICBlbmNyeXB0ZWREYXRhLmRhdGEgPSBiNjRkZWNvZGUoZW5jcnlwdGVkRGF0YS5kYXRhIGFzIHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3J5cHRvLmRlY3J5cHQobHVmaUZpbGUua2V5cy5jbGllbnQsIGVuY3J5cHRlZERhdGEpLmFuZFRoZW4oXG4gICAgICAgICAgKGRlY3J5cHRlZFBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHR5cGVvZiBkZWNyeXB0ZWRQYXJ0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgID8gKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkZWNyeXB0ZWRQYXJ0KS5idWZmZXIgYXMgQXJyYXlCdWZmZXIpXG4gICAgICAgICAgICAgIDogZGVjcnlwdGVkUGFydDtcblxuICAgICAgICAgICAgLy8gSWYgZmlyc3QgY2h1bmtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5wYXJ0ID09PSAwKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHtcbiAgICAgICAgICAgICAgICBjaHVua3NSZWFkeTogbHVmaUZpbGUuY2h1bmtzUmVhZHkgKyAxLFxuICAgICAgICAgICAgICAgIGRlbEF0Rmlyc3RWaWV3OiBtZXRhZGF0YS5kZWxfYXRfZmlyc3RfdmlldyxcbiAgICAgICAgICAgICAgICBkZWxheTogbWV0YWRhdGEuZGVsYXksXG4gICAgICAgICAgICAgICAgbmFtZTogbWV0YWRhdGEubmFtZSxcbiAgICAgICAgICAgICAgICBzaXplOiBtZXRhZGF0YS5zaXplLFxuICAgICAgICAgICAgICAgIHRvdGFsQ2h1bmtzOiBtZXRhZGF0YS50b3RhbCxcbiAgICAgICAgICAgICAgICB0eXBlOiBtZXRhZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgIHppcHBlZDogbWV0YWRhdGEuemlwcGVkLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5ET1dOTE9BRF9TVEFSVEVEKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgY2h1bmtzUmVhZHk6IGx1ZmlGaWxlLmNodW5rc1JlYWR5ICsgMSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuQ0hVTktfRE9XTkxPQURFRCwgYnVmZmVyLCBtZXRhZGF0YS5wYXJ0KTtcblxuICAgICAgICAgICAgaWYgKGx1ZmlGaWxlLmNodW5rc1JlYWR5ID09PSBtZXRhZGF0YS50b3RhbCkge1xuICAgICAgICAgICAgICByZXR1cm4gZW5kRG93bmxvYWQobHVmaUZpbGUpLmFuZFRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULkRPV05MT0FEX0NPTVBMRVRFKTtcbiAgICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFUkFUSU9OX1RFUk1JTkFURUQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IHJldHJpZXZlIG1ldGFkYXRhIGZyb20gZGF0YSByZWNlaXZlZCBieSB0aGUgc2VydmVyXCIsXG4gICAgICAgICk7XG5cbiAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuICAgICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihtZXRhZGF0YS5tc2cpO1xuXG4gICAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG4gICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihcbiAgICAgIFwiQ2Fubm90IHJldHJpZXZlIG1ldGFkYXRhIGZyb20gZGF0YSByZWNlaXZlZCBieSB0aGUgc2VydmVyXCIsXG4gICAgKTtcblxuICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcbiAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICB9XG59O1xuXG4vKipcbiAqIEhhbmRsZSBXZWJTb2NrZXQgcmVzcG9uc2UgZm9yIHVwbG9hZCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHJlc3BvbnNlXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uVXBsb2FkTWVzc2FnZSA9IChcbiAgcmVzcG9uc2U6IFNlcnZlclVwbG9hZENodW5rTWV0YWRhdGEsXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFVwbG9hZEVycm9yPiA9PiB7XG4gIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgLy8gSWYgZmlyc3QgY2h1bmtcbiAgICBpZiAocmVzcG9uc2UuaiA9PT0gMCkge1xuICAgICAgLy8gY29uc29sZS5pbmZvKGBVcGxvYWQgb2YgJHtsdWZpRmlsZS5rZXlzLmNsaWVudH0gc3RhcnRlZGApO1xuXG4gICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7XG4gICAgICAgIGtleXM6IHsgY2xpZW50OiBsdWZpRmlsZS5rZXlzLmNsaWVudCwgc2VydmVyOiByZXNwb25zZS5zaG9ydCB9LFxuICAgICAgICBhY3Rpb25Ub2tlbjogcmVzcG9uc2UudG9rZW4sXG4gICAgICAgIHF1ZXVlSW5kZXg6IHJlc3BvbnNlLmksXG4gICAgICB9KTtcblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX1NUQVJURUQpO1xuICAgIH1cblxuICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHtcbiAgICAgIGNodW5rc1JlYWR5OiBsdWZpRmlsZS5jaHVua3NSZWFkeSArIDEsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRfYXQsXG4gICAgfSk7XG5cbiAgICBldmVudHMuZW1pdChFVkVOVC5DSFVOS19VUExPQURFRCk7XG5cbiAgICBpZiAobHVmaUZpbGUuY2h1bmtzUmVhZHkgPT09IGx1ZmlGaWxlLnRvdGFsQ2h1bmtzKSB7XG4gICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7IHVwbG9hZFN0YXR1czogVVBMT0FEX1NUQVRVUy5DT01QTEVURSB9KTtcblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX0NPTVBMRVRFKTtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihyZXNwb25zZS5tc2cpO1xuICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcblxuICAgIHJldHVybiBlcnJBc3luYyhlcnJvcik7XG4gIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIG9uIHNvY2tldHMgXCJvbm1lc3NhZ2VcIiBldmVudFxuICpcbiAqIEBwYXJhbSBlXG4gKiBAcGFyYW0gc29ja2V0VXJsXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvbk1lc3NhZ2UgPSAoXG4gIGU6IE1lc3NhZ2VFdmVudCxcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgVXBsb2FkRXJyb3I+ID0+IHtcbiAgY29uc3QgZGF0YSA9IHRyeVBhcnNlSnNvbihlLmRhdGEpO1xuICBsZXQgY2FsbGJhY2s7XG5cbiAgaWYgKGRhdGEpIHtcbiAgICBpZiAoIWRhdGEuYWN0aW9uICYmIGRhdGEubXNnKSB7XG4gICAgICAvLyBJZiBlcnJvclxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IoZGF0YS5tc2cpO1xuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuXG4gICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXCJkZWxheVwiIGluIGRhdGEpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvblVwbG9hZE1lc3NhZ2UoZGF0YSwgbHVmaUZpbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbkNhbmNlbE1lc3NhZ2UoZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrID0gb25Eb3dubG9hZE1lc3NhZ2UoZS5kYXRhLCBsdWZpRmlsZSk7XG4gIH1cblxuICByZXR1cm4gY2FsbGJhY2s7XG59O1xuXG4vKipcbiAqIElzIHNvY2tldCBjb25uZWN0aW5nP1xuICpcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Nvbm5lY3RpbmcgPSAoc29ja2V0S2V5OiBzdHJpbmcpOiBib29sZWFuID0+XG4gIHNvY2tldHMgIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0gIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNPTk5FQ1RJTkc7XG5cbi8qKlxuICogSXMgc29ja2V0IHNwYXduZWQ/XG4gKlxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU3Bhd25lZCA9IChzb2NrZXRLZXk6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgc29ja2V0cyAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XSAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XS5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTjtcblxuLyoqXG4gKiBBc2sgV2ViU29ja2V0IHRvIGNhbmNlbCBhbiB1cGxvYWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjYW5jZWxVcGxvYWQgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICB1cGxvYWRTb2NrZXRVcmwobHVmaUZpbGUpLFxuICAgIGx1ZmlGaWxlLFxuICAgIGAke1xuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBpZDogbHVmaUZpbGUua2V5cy5zZXJ2ZXIsXG4gICAgICAgIG1vZF90b2tlbjogbHVmaUZpbGUuYWN0aW9uVG9rZW4sXG4gICAgICAgIGNhbmNlbDogdHJ1ZSxcbiAgICAgICAgaTogbHVmaUZpbGUucXVldWVJbmRleCxcbiAgICAgIH0pXG4gICAgfVhYTU9KT1hYdXNlbGVzc2AsXG4gICk7XG59O1xuXG4vKipcbiAqIERvd25sb2FkIGEgcGFydCBvZiB0aGUgZmlsZSB0aHJvdWdoIHRoZSBXZWJTb2NrZXRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBjaHVua051bWJlclxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkQ2h1bmsgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbiAgY2h1bmtOdW1iZXI6IG51bWJlcixcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGxldCBtZXNzYWdlO1xuXG4gIGlmIChsdWZpRmlsZS5wYXNzd29yZCkge1xuICAgIG1lc3NhZ2UgPSB7IHBhcnQ6IGNodW5rTnVtYmVyLCBmaWxlX3B3ZDogbHVmaUZpbGUucGFzc3dvcmQgfTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0geyBwYXJ0OiBjaHVua051bWJlciB9O1xuICB9XG5cbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIGRvd25sb2FkU29ja2V0VXJsKGx1ZmlGaWxlKSxcbiAgICBsdWZpRmlsZSxcbiAgICBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSxcbiAgKTtcbn07XG5cbi8qKlxuICogVGVsbCB0aGUgV2ViU29ja2V0IHRoZSBkb3dubG9hZCBlbmRlZFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGVuZERvd25sb2FkID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBsZXQgbWVzc2FnZTogeyBlbmRlZDogdHJ1ZTsgZmlsZV9wd2Q/OiBzdHJpbmcgfTtcblxuICBpZiAobHVmaUZpbGUucGFzc3dvcmQpIHtcbiAgICBtZXNzYWdlID0geyBlbmRlZDogdHJ1ZSwgZmlsZV9wd2Q6IGx1ZmlGaWxlLnBhc3N3b3JkIH07XG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZSA9IHsgZW5kZWQ6IHRydWUgfTtcbiAgfVxuXG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICBkb3dubG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksXG4gICk7XG59O1xuXG4vKipcbiAqIFVwbG9hZCBhIGNodW5rIG9mIHRoZSBmaWxlIHRocm91Z2ggdGhlIFdlYlNvY2tldFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHBhcmFtIG1ldGFkYXRhXG4gKiBAcGFyYW0gZW5jcnlwdGVkRGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwbG9hZENodW5rID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4gIG1ldGFkYXRhOiBDbGllbnRVcGxvYWRDaHVua01ldGFkYXRhLFxuICBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgZW5jcnlwdGVkRGF0YS5kYXRhID0gYjY0ZW5jb2RlKGVuY3J5cHRlZERhdGEuZGF0YSBhcyBBcnJheUJ1ZmZlcik7XG5cbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIHVwbG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgYCR7SlNPTi5zdHJpbmdpZnkobWV0YWRhdGEpfVhYTU9KT1hYJHtKU09OLnN0cmluZ2lmeShlbmNyeXB0ZWREYXRhKX1gLFxuICApO1xufTtcblxuLyoqXG4gKiBTZW5kIGEgbWVzc2FnZSB0byB0aGUgV2ViU29ja2V0XG4gKlxuICogQHBhcmFtIHNvY2tldFVybFxuICogQHBhcmFtIG1lc3NhZ2VcbiAqIEBwYXJhbSBoYXNQcmlvcml0eVxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgc2VuZE1lc3NhZ2UgPSAoXG4gIHNvY2tldFVybDogc3RyaW5nLFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGlmICghaXNTcGF3bmVkKHNvY2tldFVybCkpIHtcbiAgICByZXR1cm4gc3Bhd24oc29ja2V0VXJsKS5hbmRUaGVuKCgpID0+IHtcbiAgICAgIHNvY2tldHNbc29ja2V0VXJsXS5vbm1lc3NhZ2UgPSAoZSkgPT4gb25NZXNzYWdlKGUsIGx1ZmlGaWxlKTtcbiAgICAgIHJldHVybiBzZW5kTWVzc2FnZShzb2NrZXRVcmwsIGx1ZmlGaWxlLCBtZXNzYWdlKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzb2NrZXRzW3NvY2tldFVybF0uc2VuZChtZXNzYWdlKTtcblxuICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbi8qKlxuICogU3Bhd24gYSBuZXcgV2ViU29ja2V0IG9yIHJldXNlIGFuIGV4aXN0aW5nIG9uZS5cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcGFyYW0gZXJyb3JDb3VudFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNwYXduID0gKFxuICBzb2NrZXRLZXk6IHN0cmluZyxcbiAgZXJyb3JDb3VudCA9IDAsXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGlmICghaXNTcGF3bmVkKHNvY2tldEtleSkgJiYgIWlzQ29ubmVjdGluZyhzb2NrZXRLZXkpKSB7XG4gICAgLy8gY29uc29sZS5pbmZvKGBTcGF3bmluZyBXZWJTb2NrZXQgJHtzb2NrZXRVcmx9YCk7XG4gICAgc29ja2V0c1tzb2NrZXRLZXldID0gbmV3IFdlYlNvY2tldChzb2NrZXRLZXkpO1xuXG4gICAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRVJBVElPTl9URVJNSU5BVEVELCAoKSA9PiB7XG4gICAgICBzb2NrZXRzW3NvY2tldEtleV0uY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIGV2ZW50cy5vbmNlKEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsICgpID0+IHtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCk7XG4gICAgfSk7XG5cbiAgICBzb2NrZXRzW3NvY2tldEtleV0ub25vcGVuID0gKCkgPT4ge1xuICAgICAgLy8gY29uc29sZS5pbmZvKGBXZWJzb2NrZXQgJHtzb2NrZXRLZXl9IGhhcyBiZWVuIG9wZW5gKTtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVORUQpO1xuICAgIH07XG5cbiAgICBzb2NrZXRzW3NvY2tldEtleV0ub25jbG9zZSA9ICgpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbyhgV2Vic29ja2V0ICR7c29ja2V0S2V5fSBoYXMgYmVlbiBjbG9zZWRgKTtcbiAgICB9O1xuXG4gICAgc29ja2V0c1tzb2NrZXRLZXldLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBpZiAoKytlcnJvckNvdW50IDw9IE1BWF9FUlJPUlMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0ICR7c29ja2V0S2V5fS4gVHJ5aW5nIGFnYWluLiAke2Vycm9yQ291bnR9IC8gJHtNQVhfRVJST1JTfWAsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHNwYXduKHNvY2tldEtleSwgZXJyb3JDb3VudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT05FUlJPUik7XG4gICAgICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgICAgICBuZXcgV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yKFxuICAgICAgICAgICAgYFVuYWJsZSB0byBjb25uZWN0IHRvIFdlYlNvY2tldCAke3NvY2tldEtleX0uYCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gd2FpdEZvckNvbm5lY3Rpb24oc29ja2V0S2V5KVxuICAgIC5hbmRUaGVuKCgpID0+IG9rQXN5bmMoc29ja2V0S2V5KSlcbiAgICAub3JFbHNlKChlcnJvcikgPT4gZXJyQXN5bmMoZXJyb3IpKTtcbn07XG5cbi8qKlxuICogV2FpdCBmb3IgV2ViU29ja2V0IHRvIG9wZW4uIFJldHVybnMgYW4gZXJyb3IgaWYgdG9vIG1hbnkgY29ubmVjdGlvbiBhdHRlbXB0cyBhcmUgbWFkZS5cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3Qgd2FpdEZvckNvbm5lY3Rpb24gPSAoXG4gIHNvY2tldEtleTogc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+XG4gIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghaXNTcGF3bmVkKHNvY2tldEtleSkpIHtcbiAgICAgICAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRU5FRCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXZlbnRzLm9uKEVWRU5ULlNPQ0tFVF9PTkVSUk9SLCAoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgcmV0dXJuIGVuc3VyZUVycm9yKGVycm9yKTtcbiAgICB9LFxuICApO1xuXG4vKipcbiAqIENsb3NlIHRoZSBXZWJTb2NrZXRcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9zZSA9IChzb2NrZXRLZXk6IHN0cmluZyk6IFJlc3VsdEFzeW5jPHN0cmluZywgV2ViU29ja2V0RXJyb3I+ID0+XG4gIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChpc1NwYXduZWQoc29ja2V0S2V5KSkge1xuICAgICAgICBjb25zdCB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZWplY3QobmV3IFdlYlNvY2tldEVycm9yKFwiVW5hYmxlIHRvIGNsb3NlIHRoZSBXZWJTb2NrZXRcIikpO1xuICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgICBzb2NrZXRzW3NvY2tldEtleV0ub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTtcbiAgICAgICAgICByZXNvbHZlKHNvY2tldEtleSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc29ja2V0c1tzb2NrZXRLZXldLmNsb3NlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHNvY2tldEtleSk7XG4gICAgICB9XG4gICAgfSksXG4gICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICk7XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhbiBpbnN0YW5jZSBVUkwgaW4gYSBXZWJTb2NrZXQgVVJMXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVXJsXG4gKiBAcGFyYW0gcGF0aG5hbWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZFNvY2tldFVybCA9IChpbnN0YW5jZVVybDogVVJMLCBwYXRobmFtZTogc3RyaW5nKTogVVJMID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChpbnN0YW5jZVVybCk7XG4gIHVybC5wcm90b2NvbCA9IHVybC5wcm90b2NvbCA9PT0gXCJodHRwOlwiID8gXCJ3czpcIiA6IFwid3NzOlwiO1xuICB1cmwucGF0aG5hbWUgKz0gcGF0aG5hbWU7XG5cbiAgcmV0dXJuIG5ldyBVUkwodXJsLm9yaWdpbiArIHVybC5wYXRobmFtZSk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBkb3dubG9hZCBVUkwgZm9yIHRoZSBzb2NrZXQuIFJldHVybnMgYSBzdHJpbmcgc2luY2UgaXQncyBtb3N0bHkgdXNlZCBhcyBzb2NrZXRzIGtleVxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkU29ja2V0VXJsID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBidWlsZFNvY2tldFVybChcbiAgICBuZXcgVVJMKGx1ZmlGaWxlLnNlcnZlclVybCksXG4gICAgU29ja2V0UGF0aC5ET1dOTE9BRCArIGAvJHtsdWZpRmlsZS5rZXlzLnNlcnZlcn1gLFxuICApLnRvU3RyaW5nKCk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSB1cGxvYWQgVVJMIGZvciB0aGUgc29ja2V0LiBSZXR1cm5zIGEgc3RyaW5nIHNpbmNlIGl0J3MgbW9zdGx5IHVzZWQgYXMgc29ja2V0cyBrZXlcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGxvYWRTb2NrZXRVcmwgPSAobHVmaUZpbGU6IEx1ZmlGaWxlKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGJ1aWxkU29ja2V0VXJsKG5ldyBVUkwobHVmaUZpbGUuc2VydmVyVXJsKSwgU29ja2V0UGF0aC5VUExPQUQpXG4gICAgLnRvU3RyaW5nKCk7XG59O1xuXG4vKipcbiAqIFRyeSB0byBwYXJzZSBhIHN0cmluZyBpbnRvIGEgSlNPTi4gUmV0dXJucyBmYWxzZSBpZiBub3QgcG9zc2libGUuXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IHRyeVBhcnNlSnNvbiA9IChkYXRhOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWRPYmplY3QgPSBKU09OLnBhcnNlKGRhdGEpO1xuXG4gICAgaWYgKHBhcnNlZE9iamVjdCAmJiB0eXBlb2YgcGFyc2VkT2JqZWN0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gcGFyc2VkT2JqZWN0O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKF9lKSB7XG4gICAgLyogZW1wdHkgKi9cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBpcyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGFcbiAqXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSA9IChcbiAgbWVzc2FnZTogU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhLFxuKTogbWVzc2FnZSBpcyBTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhID0+XG4gIHR5cGVvZiBtZXNzYWdlID09PSBcIm9iamVjdFwiICYmIG1lc3NhZ2UgIT09IG51bGwgJiYgIShcIm1zZ1wiIGluIG1lc3NhZ2UpO1xuIiwgImltcG9ydCB0eXBlIHsgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgZG93bmxvYWRDaHVuaywgZG93bmxvYWRTb2NrZXRVcmwsIHNvY2tldHMgfSBmcm9tIFwifi9hcGkvd2Vic29ja2V0LnRzXCI7XG5pbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyQWN0aW9uTWVzc2FnZSB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItYWN0aW9uLW1lc3NhZ2UudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyRXZlbnQgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWV2ZW50LnRzXCI7XG5pbXBvcnQgeyBldmVudHMsIGluaXQgfSBmcm9tIFwifi93b3JrZXIvc2hhcmVkLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdlYlNvY2tldEVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd2Vic29ja2V0L3dlYnNvY2tldC1lcnJvci50c1wiO1xuXG5kZWNsYXJlIGNvbnN0IHNlbGY6IFdvcmtlcjtcbmxldCBpc0luaXRpYXRlZCA9IGZhbHNlO1xuXG5zZWxmLm9ubWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gIGlmICghaXNJbml0aWF0ZWQpIHtcbiAgICBpbml0KCk7XG4gICAgaXNJbml0aWF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgZXZlbnRzLm9uKEVWRU5ULkRPV05MT0FEX1NUQVJURUQsICgpID0+IHtcbiAgICBzb2NrZXRzW2Rvd25sb2FkU29ja2V0VXJsKGV2ZW50LmRhdGEuYXJncy5sdWZpRmlsZSldLmNsb3NlKCk7XG5cbiAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULklORk9TX1JFVFJJRVZFRCB9KTtcbiAgfSk7XG5cbiAgcmV0cmlldmVJbmZvcyhldmVudC5kYXRhKS5tYXBFcnIoKGVycm9yKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCxcbiAgICAgIGVycm9yLFxuICAgIH0gYXMgV29ya2VyRXZlbnQpO1xuICB9KTtcbn07XG5cbmNvbnN0IHJldHJpZXZlSW5mb3MgPSAoXG4gIHdvcmtlck1lc3NhZ2U6IFdvcmtlckFjdGlvbk1lc3NhZ2UsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT5cbiAgZG93bmxvYWRDaHVuayh3b3JrZXJNZXNzYWdlLmFyZ3MubHVmaUZpbGUsIDApO1xuIl0sCiAgIm1hcHBpbmdzIjogIis1QkFBQSxJQUFBQSxHQUFBQyxHQUFBLENBQUFDLEdBQUFDLEtBQUEsY0F1QkEsSUFBSUMsRUFBSSxPQUFPLFNBQVksU0FBVyxRQUFVLEtBQzVDQyxHQUFlRCxHQUFLLE9BQU9BLEVBQUUsT0FBVSxXQUN2Q0EsRUFBRSxNQUNGLFNBQXNCRSxFQUFRQyxFQUFVQyxFQUFNLENBQzlDLE9BQU8sU0FBUyxVQUFVLE1BQU0sS0FBS0YsRUFBUUMsRUFBVUMsQ0FBSSxDQUM3RCxFQUVFQyxHQUNBTCxHQUFLLE9BQU9BLEVBQUUsU0FBWSxXQUM1QkssR0FBaUJMLEVBQUUsUUFDVixPQUFPLHNCQUNoQkssR0FBaUIsU0FBd0JILEVBQVEsQ0FDL0MsT0FBTyxPQUFPLG9CQUFvQkEsQ0FBTSxFQUNyQyxPQUFPLE9BQU8sc0JBQXNCQSxDQUFNLENBQUMsQ0FDaEQsRUFFQUcsR0FBaUIsU0FBd0JILEVBQVEsQ0FDL0MsT0FBTyxPQUFPLG9CQUFvQkEsQ0FBTSxDQUMxQyxFQUdGLFNBQVNJLEdBQW1CQyxFQUFTLENBQy9CLFNBQVcsUUFBUSxNQUFNLFFBQVEsS0FBS0EsQ0FBTyxDQUNuRCxDQUVBLElBQUlDLEdBQWMsT0FBTyxPQUFTLFNBQXFCQyxFQUFPLENBQzVELE9BQU9BLElBQVVBLENBQ25CLEVBRUEsU0FBU0MsR0FBZSxDQUN0QkEsRUFBYSxLQUFLLEtBQUssSUFBSSxDQUM3QixDQUNBWCxHQUFPLFFBQVVXLEVBQ2pCWCxHQUFPLFFBQVEsS0FBT1ksR0FHdEJELEVBQWEsYUFBZUEsRUFFNUJBLEVBQWEsVUFBVSxRQUFVLE9BQ2pDQSxFQUFhLFVBQVUsYUFBZSxFQUN0Q0EsRUFBYSxVQUFVLGNBQWdCLE9BSXZDLElBQUlFLEdBQXNCLEdBRTFCLFNBQVNDLEdBQWNDLEVBQVUsQ0FDL0IsR0FBSSxPQUFP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RUFBRUgsSUFBSSxFQUFFLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEVBQzNmLEdBQUcsQ0FBQyxDQUFDLEVBQ0xILEVBQUssT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLFNBQVNDLEVBQUUsQ0FBQyxPQUFPUSxHQUFHLEtBQUtSLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFLENBQUMsT0FBT1EsR0FBRyxLQUFLUixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUlBLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUYsRUFBRSxDQUFDLEVBQUVHLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxJQUFJVCxFQUFFLEVBQUUsSUFBTUEsRUFBRUEsSUFBSUssR0FBR0YsRUFBRUgsQ0FBQyxFQUFFQSxHQUFHLEVBQUUsS0FBS0EsR0FBRyxJQUFJQSxDQUFDLEVBQUVBLEVBQUUsSUFBSUMsRUFBRUMsRUFBRSxFQUFFLENBQUNKLEVBQUVHLENBQUMsRUFBRUEsR0FBR0ssR0FBRyxFQUFFSixFQUFFRyxFQUFFSCxDQUFDLEdBQUcsRUFBRSxJQUFJTSxFQUFFTixFQUFFQSxHQUFHLEVBQUVBLEdBQUcsRUFBRUEsR0FBRyxFQUFFQSxHQUFHLEVBQUVNLEVBQUVBLEdBQUcsRUFBRUEsRUFBRSxJQUFJLEdBQUdWLEVBQUVHLENBQUMsRUFBRU8sRUFBRVQsRUFBRVMsQ0FBQyxFQUFFUCxFQUFFTSxFQUFFSixFQUFFSCxFQUFFRyxFQUFFRyxFQUFFSCxFQUFFRixDQUFDLENBQUMsQ0FBQyxFQUFFUSxFQUFFLFNBQVVGLEVBQUUsTUFBUVAsRUFBRSxJQUFNTSxFQUFFLFNBQVVMLEVBQUVNLEVBQUUsSUFBTUosRUFBRUssQ0FBQyxFQUFFLFNBQVVBLEVBQUVSLEVBQUUsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVDLENBQUMsRUFBRU0sRUFBRUEsR0FBRyxHQUFHQSxJQUFJLEVBQUVWLEVBQUVHLENBQUMsRUFBRVEsQ0FBQyxFQUFFQyxFQUFFQSxHQUFHLEdBQUdBLElBQUksRUFBRSxJQUFJVCxFQUNsZ0IsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVKLEVBQUVJLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNoRCxTQUFTSSxHQUFHUixFQUFFQyxFQUFFQyxFQUFFLENBQUMsR0FBT0QsRUFBRSxTQUFOLEVBQWEsTUFBTSxJQUFJRixFQUFLLFVBQVUsUUFBUSx3QkFBd0IsRUFBRSxJQUFJSSxFQUFFSCxFQUFFLEVBQUVFLENBQUMsRUFBRUUsRUFBRUgsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRSxFQUFFSixFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUcsRUFBRUwsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRixFQUFFQSxFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRSxJQUFJSSxFQUFFRSxFQUFFQyxFQUFFQyxFQUFFUixFQUFFLE9BQU8sRUFBRSxFQUFFUyxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUVQLEVBQUVQLEVBQUUsRUFBRUUsQ0FBQyxFQUFFRixFQUFFTyxFQUFFLENBQUMsRUFBRSxJQUFJUSxFQUFFUixFQUFFLENBQUMsRUFBRVMsRUFBRVQsRUFBRSxDQUFDLEVBQUVVLEVBQUVWLEVBQUUsQ0FBQyxFQUFFVyxFQUFFWCxFQUFFLENBQUMsRUFBRSxJQUFJSyxFQUFFLEVBQUVBLEVBQUVELEVBQUVDLElBQUlMLEVBQUVQLEVBQUVJLElBQUksRUFBRSxFQUFFVyxFQUFFVixHQUFHLEdBQUcsR0FBRyxFQUFFVyxFQUFFVixHQUFHLEVBQUUsR0FBRyxFQUFFVyxFQUFFaEIsRUFBRSxHQUFHLEVBQUVFLEVBQUVVLENBQUMsRUFBRUosRUFBRVQsRUFBRUssSUFBSSxFQUFFLEVBQUVVLEVBQUVULEdBQUcsR0FBRyxHQUFHLEVBQUVVLEVBQUVmLEdBQUcsRUFBRSxHQUFHLEVBQUVnQixFQUFFYixFQUFFLEdBQUcsRUFBRUQsRUFBRVUsRUFBRSxDQUFDLEVBQUVILEVBQUVWLEVBQUVNLElBQUksRUFBRSxFQUFFUyxFQUFFZCxHQUFHLEdBQUcsR0FBRyxFQUFFZSxFQUFFWixHQUFHLEVBQUUsR0FBRyxFQUFFYSxFQUFFWixFQUFFLEdBQUcsRUFBRUYsRUFBRVUsRUFBRSxDQUFDLEVBQUVaLEVBQUVELEVBQUVDLElBQUksRUFBRSxFQUFFYyxFQUFFWCxHQUFHLEdBQUcsR0FBRyxFQUFFWSxFQUFFWCxHQUFHLEVBQUUsR0FBRyxFQUFFWSxFQUFFWCxFQUFFLEdBQUcsRUFBRUgsRUFBRVUsRUFBRSxDQUFDLEVBQUVBLEdBQUcsRUFBRVQsRUFBRUcsRUFBRUYsRUFBRUksRUFBRUgsRUFBRUksRUFBRSxJQUFJRSxFQUNyZixFQUFFLEVBQUVBLEVBQUVBLElBQUlFLEVBQUVaLEVBQUUsRUFBRSxDQUFDVSxFQUFFQSxDQUFDLEVBQUVNLEVBQUVkLElBQUksRUFBRSxHQUFHLEdBQUdjLEVBQUViLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBR2EsRUFBRVosR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFWSxFQUFFakIsRUFBRSxHQUFHLEVBQUVFLEVBQUVVLEdBQUcsRUFBRU4sRUFBRUgsRUFBRUEsRUFBRUMsRUFBRUEsRUFBRUMsRUFBRUEsRUFBRUwsRUFBRUEsRUFBRU0sRUFBRSxPQUFPTyxDQUFDLENBQ2hIZixFQUFLLFNBQVMsQ0FBQyxTQUFTLFNBQVNDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxPQUFBRixFQUFFRCxFQUFLLFNBQVMsRUFBRUMsRUFBRSxNQUFNQyxFQUFFLEVBQUUsRUFBRSxJQUFJQSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBa0JDLElBQVQsT0FBV0YsRUFBRUQsRUFBSyxTQUFTLE1BQU1DLEVBQUVFLEVBQUVELENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBU0QsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUUsS0FBSyxNQUFNLENBQUNGLEVBQUVDLEVBQUUsRUFBRSxFQUFFLFFBQVFELEVBQUVDLEVBQUUsRUFBRUQsR0FBRyxJQUFJRCxFQUFFQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUdFLEVBQUVILEVBQUVDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUUsRUFBRUgsRUFBRUMsRUFBRSxHQUFHLENBQUMsSUFBSUUsSUFBSSxHQUFHRCxHQUFHLENBQUMsRUFBRSxPQUFPLFNBQVNGLEVBQUVDLEVBQUUsQ0FBQyxHQUFPRCxFQUFFLFNBQU4sR0FBa0JDLEVBQUUsU0FBTixFQUFhLE9BQU9ELEVBQUUsT0FBT0MsQ0FBQyxFQUFFLElBQUlDLEVBQUVGLEVBQUVBLEVBQUUsT0FBTyxDQUFDLEVBQUVHLEVBQUVKLEVBQUssU0FBUyxXQUFXRyxDQUFDLEVBQUUsT0FBWUMsSUFBTCxHQUFPSCxFQUFFLE9BQU9DLENBQUMsRUFBRUYsRUFBSyxTQUFTLEVBQUVFLEVBQUVFLEVBQUVELEVBQUUsRUFBRUYsRUFBRSxNQUFNLEVBQUVBLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsU0FBU0EsRUFBRSxDQUFDLElBQUlDLEVBQUVELEVBQUUsT0FBTyxPQUNuZkMsSUFEMGYsRUFDeGYsRUFBRSxJQUFJQSxFQUFFLEdBQUdGLEVBQUssU0FBUyxXQUFXQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxTQUFTRCxFQUFFQyxFQUFFLENBQUMsR0FBRyxHQUFHRCxFQUFFLE9BQU9DLEVBQUUsT0FBT0QsRUFBRUEsRUFBRUEsRUFBRSxNQUFNLEVBQUUsS0FBSyxLQUFLQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUVGLEVBQUUsT0FBTyxPQUFBQyxFQUFFQSxFQUFFLEdBQUcsRUFBRUMsR0FBR0QsSUFBSUQsRUFBRUUsRUFBRSxDQUFDLEVBQUVILEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFRSxFQUFFLENBQUMsRUFBRSxZQUFZRCxFQUFFLEVBQUUsQ0FBQyxHQUFVRCxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFQyxFQUFFQyxFQUFFLENBQUMsT0FBWUYsSUFBTCxHQUFPQyxHQUFHQyxFQUFFRCxFQUFFLEVBQUVBLEdBQUcsR0FBR0QsR0FBRyxjQUFjQSxDQUFDLEVBQUUsV0FBVyxTQUFTQSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU1BLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxNQUFNLFNBQVNBLEVBQUVDLEVBQUUsQ0FBQyxHQUFHRixFQUFLLFNBQVMsVUFBVUMsQ0FBQyxJQUFJRCxFQUFLLFNBQVMsVUFBVUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJQyxFQUFFLEVBQUVDLEVBQUUsSUFBSUEsRUFBRSxFQUFFQSxFQUFFSCxFQUFFLE9BQU9HLElBQUlELEdBQUdGLEVBQUVHLENBQUMsRUFBRUYsRUFBRUUsQ0FBQyxFQUFFLE9BQzNlRCxJQURrZixDQUNqZixFQUFFLEVBQUUsU0FBU0YsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQU0sSUFBSkEsRUFBRSxFQUFlRCxJQUFULFNBQWFBLEVBQUUsQ0FBQyxHQUFHLElBQUlGLEVBQUVBLEdBQUcsR0FBR0UsRUFBRSxLQUFLRCxDQUFDLEVBQUVBLEVBQUUsRUFBRSxHQUFPRCxJQUFKLEVBQU0sT0FBT0UsRUFBRSxPQUFPSCxDQUFDLEVBQUUsSUFBSUksRUFBRSxFQUFFQSxFQUFFSixFQUFFLE9BQU9JLElBQUlELEVBQUUsS0FBS0QsRUFBRUYsRUFBRUksQ0FBQyxJQUFJSCxDQUFDLEVBQUVDLEVBQUVGLEVBQUVJLENBQUMsR0FBRyxHQUFHSCxFQUFFLE9BQUFHLEVBQUVKLEVBQUUsT0FBT0EsRUFBRUEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFQSxFQUFFRCxFQUFLLFNBQVMsV0FBV0ssQ0FBQyxFQUFFRCxFQUFFLEtBQUtKLEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFLEdBQUcsR0FBR0MsRUFBRUQsRUFBRUUsRUFBRUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQVNBLENBQUMsRUFBRSxFQUFFLFNBQVNILEVBQUVDLEVBQUUsQ0FBQyxNQUFNLENBQUNELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUQsRUFBRSxDQUFDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRCxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxJQUFJRCxFQUFFLEVBQUVBLEVBQUVELEVBQUUsT0FBTyxFQUFFQyxFQUFFQyxFQUFFRixFQUFFQyxDQUFDLEVBQUVELEVBQUVDLENBQUMsRUFBRUMsSUFBSSxHQUFHQSxJQUFJLEVBQUUsT0FBUUEsRUFBRSxRQUFTLEVBQUVBLEdBQUcsR0FBRyxPQUFPRixDQUFDLENBQUMsRUFDcGRELEVBQUssTUFBTSxXQUFXLENBQUMsU0FBUyxTQUFTQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxHQUFHQyxFQUFFSCxFQUFLLFNBQVMsVUFBVUMsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUEsRUFBRUQsRUFBRSxFQUFFQyxJQUFTLEVBQUFBLEVBQUUsS0FBS0MsRUFBRUosRUFBRUcsRUFBRSxDQUFDLEdB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QkFBaUJBLEVBQUUsTUFBTSxJQUFJRCxFQUFLLFVBQVUsUUFBUSxxQ0FBcUMsRUFBRSxHQUFpQixPQUFPLFlBQXJCLElBQWlDLENBQUMsSUFBSUksRUFBRSxJQUFJLFlBQVlELENBQUMsRUFBRUUsRUFBRSxFQUFFLElBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVFLEVBQUUsU0FBUyxHQUFHQyxFQUN0ZixJQUFJQSxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxHQUFHLEVBQUVGLEVBQUUsT0FBTyxFQUFFLEdBQUdFLENBQUMsQ0FBQyxLQUFNLEtBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUlGLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFLEtBQUssRUFBRUQsRUFBRUYsRUFBSyxTQUFTLE9BQU9FLEVBQUUsQ0FBQ0YsRUFBSyxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUlDLEVBQUVDLEVBQUUsT0FBTyxFQUFFRCxFQUFFLEdBQUdBLElBQUlDLEVBQUUsS0FBSyxDQUFDLEVBQXlDLElBQXZDQSxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssRUFBRSxVQUFXLENBQUMsRUFBTUEsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQUVBLEVBQUUsUUFBUSxLQUFLLEVBQUVBLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQUssTUFBTSxFQUFTQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBU0YsRUFBRUEsRUFBRSxDQUFDLE1BQU8sYUFBYUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUN6ZixHQUFHLEtBQUssQ0FBQ0EsSUFBSSxFQUFFSCxJQUFJLEtBQUssRUFBRUEsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUVELENBQUMsRUFBRUQsRUFBRSxLQUFLLElBQUlFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUgsRUFBRSxDQUFDLEVBQUVLLEVBQUVMLEVBQUUsQ0FBQyxFQUFFTSxFQUFFTixFQUFFLENBQUMsRUFBRU8sRUFBRVAsRUFBRSxDQUFDLEVBQUVRLEVBQUVSLEVBQUUsQ0FBQyxFQUFFUyxFQUFFVCxFQUFFLENBQUMsRUFBRVUsRUFBRVYsRUFBRSxDQUFDLEVBQUUsSUFBSUgsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUksR0FBR0EsRUFBRUMsRUFBRUYsRUFBRUMsQ0FBQyxHQUFHQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsRUFBRSxFQUFFRSxFQUFFSCxFQUFFQyxFQUFFLEdBQUcsRUFBRSxFQUFFQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsR0FBR0MsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksRUFBRUEsR0FBRyxHQUFHQSxHQUFHLEtBQUtDLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJSCxFQUFFQyxFQUFFLEVBQUUsRUFBRUQsRUFBRUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHQyxFQUFFQSxFQUFFWSxHQUFHSCxJQUFJLEVBQUVBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJRSxFQUFFRixHQUFHQyxFQUFFQyxJQUFJUixFQUFFSixDQUFDLEVBQUVhLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVSLEVBQUUsRUFBRVEsRUFBRUQsRUFBRUEsRUFBRUYsRUFBRUEsRUFBRUQsRUFBRUEsRUFBRUosR0FBR0ssRUFBRUUsRUFBRUMsR0FBR0gsRUFBRUUsS0FBS0YsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksR0FBR0EsR0FBRyxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVFLEVBQ3BmLEVBQUVGLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRUcsRUFBRSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVLLEVBQUUsRUFBRUwsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFTSxFQUFFLEVBQUVOLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRU8sRUFBRSxFQUFFUCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVRLEVBQUUsRUFBRVIsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFUyxFQUFFLEVBQUVULEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRVUsRUFBRSxDQUFDLENBQUMsRUFBRWYsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRUQsRUFBSyxLQUFLLE9BQU8sS0FBSyxTQUFTQyxFQUFFLENBQUMsT0FBTyxJQUFJRCxFQUFLLEtBQUssU0FBUSxPQUFPQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQy9TRCxFQUFLLEtBQUssT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sVUFBVSxDQUFDLFlBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBUyxJQUFJLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQVksT0FBT0EsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFLEtBQUssRUFBRUgsRUFBSyxTQUFTLE9BQU8sS0FBSyxFQUFFQyxDQUFDLEVBQWlELEdBQS9DQyxFQUFFLEtBQUssRUFBRUQsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUssU0FBUyxVQUFVQyxDQUFDLEVBQUssaUJBQWlCQSxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEscUNBQXFDLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDLElBQUlJLEVBQUUsSUFBSSxZQUFZRCxDQUFDLEVBQUVFLEVBQUUsRUFBRSxJQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFRSxFQUFFLFNBQVMsR0FDdGZDLEVBQUUsSUFBSUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsR0FBRyxFQUFFRixFQUFFLE9BQU8sRUFBRSxHQUFHRSxDQUFDLENBQUMsS0FBTSxLQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJRixFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVELEVBQUVGLEVBQUssU0FBUyxPQUFPRSxFQUFFLENBQUNGLEVBQUssU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFQyxFQUFFLE9BQU8sRUFBRUQsRUFBRSxHQUFHQSxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUE2RCxJQUEzREEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUUsVUFBVyxDQUFDLEVBQU1BLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLFFBQVEsS0FBSyxFQUFFQSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFLLE1BQU0sRUFBU0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFDbGYsUUFBUSxPQUFPLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsU0FBUyxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFDcGYsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxPQUFPLFNBQVMsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTQyxFQUFFRCxFQUFFLENBQUMs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QUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBT0csRUFBRSxNQUFNSixFQUFFLEVBQUVFLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBU0osRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUVDLEVBQUVSLEVBQUssU0FBU08sRUFBRUMsRUFBRSxFQUFFLElBQUlFLEVBQUVSLEVBQUUsT0FBT1MsRUFBRUgsRUFBRSxVQUFVTixDQUFDLEVBQUVVLEVBQUVGLEVBQUUsR0FBR0csRUFBRUQsRUFBa0csR0FBaEdULEVBQUVLLEVBQUUsT0FBTyxDQUFDQSxFQUFFLFFBQVEsRUFBRUYsRUFBRSxDQUFDLENBQUMsRUFBRUgsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRUMsRUFBRUksRUFBRSxTQUFTRCxFQUFFSCxFQUFFSCxFQUFFLFFBQVFFLENBQUMsQ0FBQyxFQUFFLEVBQUVFLENBQUMsRUFBSyxDQUFDSyxFQUFFLE1BQU0sQ0FBQyxJQUFJTixFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSUcsRUFBRSxFQUFFQSxFQUFFRyxFQUFFSCxHQUFHLEVBQUVBLEVBQUVLLElBQUlaLEVBQUssS0FBSyxJQUFJLEdBQUdPLEVBQ3JnQkcsQ0FBQyxFQUFFRSxHQUFHQyxHQUFHVixFQUFFLENBQUMsSUFBSUUsRUFBRUosRUFBRSxRQUFRRSxDQUFDLEVBQUVELEVBQUVLLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUVILEVBQUVLLEVBQUUsQ0FBQyxHQUFHRixFQUFFLENBQUMsRUFBRUgsRUFBRUssRUFBRSxDQUFDLEdBQUdGLEVBQUUsQ0FBQyxFQUFFSCxFQUFFSyxFQUFFLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUlELEVBQUUsS0FBS0ksRUFBRSxNQUFNTixFQUFFUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVYLEVBQUssS0FBSyxLQUFLLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxLQUFLLEVBQUVBLEVBQUVBLEdBQUdGLEVBQUssS0FBSyxPQUFPLElBQUlHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUVDLEVBQUVDLEVBQUVILEVBQUUsVUFBVSxVQUFVLEdBQWtELElBQS9DLEtBQUssRUFBRSxDQUFDLElBQUlBLEVBQUUsSUFBSUEsQ0FBQyxFQUFFRCxFQUFFLE9BQU9JLElBQUlKLEVBQUVDLEVBQUUsS0FBS0QsQ0FBQyxHQUFPRyxFQUFFLEVBQUVBLEVBQUVDLEVBQUVELElBQUlELEVBQUUsQ0FBQyxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRSxVQUFVRCxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU9ELEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPQSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJRCxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzWUYsRUFBSyxLQUFLLEtBQUssVUFBVSxRQUFRQSxFQUFLLEtBQUssS0FBSyxVQUFVLElBQUksU0FBU0MsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEseUNBQXlDLEVBQUUsWUFBSyxPQUFPQyxDQUFDLEVBQVMsS0FBSyxPQUFPQSxDQUFDLENBQUMsRUFBRUQsRUFBSyxLQUFLLEtBQUssVUFBVSxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUVBLEVBQUssS0FBSyxLQUFLLFVBQVUsT0FBTyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU9BLENBQUMsQ0FBQyxFQUFFRCxFQUFLLEtBQUssS0FBSyxVQUFVLE9BQU8sVUFBVSxDQUFDLElBQUlDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRUEsRUFBRyxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUcsT0FBT0EsQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFLLE1BQU0sRUFBU0EsQ0FBQyxFQUN2ZUQsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFVLEdBQVRGLEVBQUVBLEdBQUcsSUFBTyxFQUFFQyxHQUFHLEVBQUVELEVBQUUsTUFBTSxJQUFJSCxFQUFLLFVBQVUsUUFBUSwwQkFBMEIsRUFBYSxPQUFPQyxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFjLE9BQU9DLEdBQWxCLFdBQXNCQSxFQUFFRixFQUFLLE1BQU0sV0FBVyxPQUFPRSxDQUFDLEdBQUdHLEVBQUVBLEdBQUdMLEVBQUssS0FBSyxLQUFLQyxFQUFFLElBQUlJLEVBQUVKLENBQUMsRUFBRSxJQUFJSyxFQUFFQyxFQUFFQyxFQUFFRSxFQUFFQyxFQUFFLENBQUMsRUFBRUMsRUFBRVosRUFBSyxTQUFTLElBQUlVLEVBQUUsRUFBRSxHQUFHQyxFQUFFLFFBQVFQLEdBQUcsR0FBR00sSUFBSSxDQUFnQyxJQUEvQkwsRUFBRUMsRUFBRUwsRUFBRSxRQUFRVyxFQUFFLE9BQU9WLEVBQUUsQ0FBQ1EsQ0FBQyxDQUFDLENBQUMsRUFBTUgsRUFBRSxFQUFFQSxFQUFFSixFQUFFSSxJQUFJLElBQUlELEVBQUVMLEVBQUUsUUFBUUssQ0FBQyxFQUFFRSxFQUFFLEVBQUVBLEVBQUVGLEVBQUUsT0FBT0UsSUFBSUgsRUFBRUcsQ0FBQyxHQUFHRixFQUFFRSxDQUFDLEVBQUVHLEVBQUVBLEVBQUUsT0FBT04sQ0FBQyxDQUFDLENBQUMsT0FBQUQsSUFBSU8sRUFBRUMsRUFBRSxNQUFNRCxFQUFFUCxDQUFDLEdBQVVPLENBQUMsRUFDbmRYLEVBQUssS0FBSyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSUQsRUFBSyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxHQUFHLE1BQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLEVBQUUsRUFDeldELEVBQUssS0FBSyxVQUFVLENBQUMsWUFBWSxTQUFTQyxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUVBLEVBQUUsS0FBSyxRQUFRRixDQUFDLEVBQUUsSUFBSUcsRUFBRSxHQUFHRCxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUlKLEVBQUssVUFBVSxTQUFTLHdCQUF3QixFQUFFLEdBQUdJLEVBQUUsS0FBSyxFQUFFLENBQUNBLEVBQUUsRUFBRUEsRUFBRSxLQUFLLEdBQUdDLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUUsRUFBRUMsRUFBMkMsSUFBekMsS0FBSyxFQUFFRixFQUFFLENBQUMsRUFBRyxJQUFJLE9BQU0sUUFBUSxFQUFFLEtBQUssR0FBT0UsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUlGLEVBQUUsS0FBSyxXQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJRSxFQUFFLEVBQUVBLEVBQUUsS0FBSyxFQUFFLFNBQVNGLEVBQUVBLEVBQUUsT0FBTyxLQUFLLEVBQUVFLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRUQsR0FBRyxLQUFLLEVBQUVDLENBQUMsRUFBRSxLQUFLLEVBQUVBLENBQUMsRUFBRSxFQUFFSCxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUdHLElBQUlBLElBQUksQ0FDalQsSUFEa1QsS0FBSyxHQUFHLEdBQUcsS0FBSyxFQUFFLFNBQVMsS0FBSyxFQUFFLEtBQUssSUFBSVAsRUFBSyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHTSxFQUFFQSxFQUFFLEtBQUssSUFBSSxLQUFLLEVBQ3ZmQSxHQUFHLEtBQUssSUFBSSxLQUFLLEVBQUVOLEVBQUssS0FBSyxPQUFPLEtBQUssS0FBSyxFQUFFLE9BQU9LLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJTCxFQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsRUFBTUksRUFBRSxFQUFFLEVBQUVBLElBQUksS0FBSyxFQUFFQSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFQSxDQUFDLEdBQUdBLElBQUksQ0FBQyxDQUFDLElBQUlBLEVBQUUsRUFBRUEsRUFBRUgsRUFBRUcsR0FBRyxHQUFPQSxFQUFFLEdBQUcsS0FBSyxLQUFmLEdBQW1COEMsR0FBRyxJQUFJLEVBQUU3QyxFQUFFOEMsR0FBRSxJQUFJLEVBQUVoRCxFQUFFLEtBQUtFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBQTZDLEdBQUcsSUFBSSxFQUFTL0MsRUFBRSxNQUFNLEVBQUVGLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixTQUFTQSxFQUFFQyxFQUFFLENBQUMsR0FBT0QsSUFBSixHQUErRUMsSUFBeEUsc0VBQTBFLE1BQU0sSUFBSUYsRUFBSyxVQUFVLFFBQVEscUVBQXFFLEVBQUUsS0FBSyxFQUFFQyxDQUFDLEVBQUUsV0FBVyxTQUFTQSxFQUNsZ0JDLEVBQUVDLEVBQUUsQ0FBQ0EsRUFBRUEsR0FBRyxPQUFPLElBQUlDLEVBQUVDLEVBQUVDLEVBQUcsSUFBSSxPQUFNLFFBQVEsRUFBRUMsRUFBRSxLQUFLLEVBQUVKLENBQUMsRUFBRUssRUFBRSxLQUFLLFFBQVEsRUFBRUUsRUFBRSxFQUFvSCxPQUFsSE4sRUFBRSxLQUFLLEVBQUVELENBQUMsRUFBV0MsSUFBVCxTQUFhQSxFQUFFLEtBQUssRUFBRUQsQ0FBQyxFQUFFLEtBQUssTUFBZUksSUFBVCxTQUFhQSxFQUFFLEtBQUssRUFBRUosQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFQSxDQUFDLEdBQUcsS0FBSyxFQUFFQSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsT0FBYyxPQUFPRixFQUFFLENBQUMsSUFBSyxTQUFrQkMsSUFBVCxTQUFhQSxFQUFFLEdBQUcsS0FBSyxFQUFFSyxDQUFDLEVBQUUsT0FBTyxDQUFDSCxFQUFFLEtBQUssSUFBSSxFQUFFRixFQUFFSSxFQUFFLEVBQUVMLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFLLFNBQTZDLEdBQXBDRSxFQUFFLE9BQU8sVUFBVSxTQUFTLEtBQUtGLENBQUMsRUFBOEJFLElBQXpCLHVCQUEyQixDQUFNLElBQUxFLEVBQUUsQ0FBQyxFQUFNRixFQUFFLEVBQUVBLEVBQUVGLEVBQUUsT0FBT0UsSUFBSUUsRUFBRSxLQUFLSixFQUFFRSxDQUFDLENBQUMsRUFBRUYsRUFBRUksQ0FBQyxLQUFNLEtBQXVCRixJQUFuQixtQkFBdUJPLEVBQUUsR0FBR1AsRUFBRSxFQUFFQSxFQUFFRixFQUFFLFFBQVEsQ0FBQ1MsRUFBRVAsSUFBZSxPQUFPRixFQUFFRSxDQUFDLEdBQXJCLFdBQzlkTyxFQUFFLEdBQUcsR0FBRyxDQUFDQSxFQUFFLENBQUMsR0FBWVIsSUFBVCxPQUFXLElBQUlDLEVBQUVELEVBQUUsRUFBRUMsRUFBRUYsRUFBRSxPQUFPRSxJQUFJLElBQUlFLEVBQUVKLEVBQUVFLENBQUMsRUFBRSxFQUFFRSxHQUFHSCxJQUFJRyxFQUFFQSxJQUFJLEVBQUUsS0FBSyxFQUFFRSxDQUFDLEVBQUUsT0FBTyxDQUFDSCxFQUFFLEtBQUssSUFBSSxFQUFFRixFQUFFSSxFQUFFTCxFQUFFLE1BQU0sRUFBRSxPQUFPQSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSyxTQUFrQkMsSUFBVCxTQUFhQSxFQUFFRCxFQUFFLFFBQVEsS0FBSyxFQUFFTSxDQUFDLEVBQUUsT0FBTyxDQUFDSCxFQUFFLEtBQUssSUFBSSxFQUFFRixFQUFFSSxFQUFFTCxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRU0sQ0FBQyxFQUFFLE9BQU9OLENBQUMsRUFBRSxNQUFNLFFBQVFTLEVBQUUsQ0FBQyxDQUFDLEdBQUdBLEVBQUUsTUFBTSxJQUFJVixFQUFLLFVBQVUsSUFBSSxxRUFBcUUsRUFBRSxLQUFLLEVBQUVPLENBQUMsR0FBR0wsRUFBRSxLQUFLLEdBQUdBLEVBQUVNLElBQUksS0FBSyxJQUFJLEtBQUssUUFBUSxJQUFJLEtBQUssR0FBRzRDLEdBQUcsU0FBUyxLQUFLLElBQUksS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUVBLEdBQUcsV0FBVyxLQUFLLFlBQVksQ0FBQyxFQUFFLEVBQ3RmLFFBQVEsU0FBU25ELEVBQUUsQ0FBQyxPQUFBQSxFQUFFLEtBQUssRUFBV0EsSUFBVCxPQUFXQSxFQUFFLEtBQUssQ0FBQyxFQUFTLEtBQUssR0FBRyxLQUFLLEdBQUdBLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUksSUFBSSxPQUFNLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHQSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsWUFBWSxTQUFTQSxFQUFFLENBQUMsT0FBQUEsRUFBRSxLQUFLLEVBQUVBLEdBQUksS0FBSyxDQUFDLEVBQVMsS0FBSyxHQUFHQSxHQUFJLEtBQUssRUFBRUEsRUFBVCxFQUFhLEtBQUssRUFBRUEsQ0FBQyxFQUFFLGdCQUFnQixVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFtTCxHQUFsTCxLQUFLLEVBQUUsQ0FBQyxrQkFBa0JvRCxHQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsZUFBZUEsR0FBRSxLQUFLLEtBQUssRUFBRSxFQUFFLGtCQUFrQkEsR0FBRSxLQUFLLEtBQUssRUFBRSxFQUFFLHVCQUF1QkEsR0FBRSxLQUFLLEtBQUssRUFBRSxFQUFFLGVBQWVBLEdBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFLLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLE9BQy9nQixLQUFLLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxPQUFPLGlCQUFpQixZQUFZLEtBQUssRUFBRSxlQUFlLEVBQUUsRUFBRSxPQUFPLGlCQUFpQixXQUFXLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxFQUFFLE9BQU8saUJBQWlCLGVBQWUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLEVBQUUsT0FBTyxpQkFBaUIsWUFBWSxLQUFLLEVBQUUsZUFBZSxFQUFFLFVBQVUsU0FBUyxZQUFZLFNBQVMsWUFBWSxTQUFTLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxTQUFTLFlBQVksY0FBYyxLQUFLLEVBQUUsY0FBYyxFQUFFLFNBQVMsWUFBWSxXQUFXLEtBQUssRUFBRSxpQkFBaUIsTUFBTyxPQUFNLElBQUlyRCxFQUFLLFVBQVUsSUFBSSxvQkFBb0IsRUFDamlCLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxlQUFlLFVBQVUsQ0FBQyxLQUFLLElBQUksT0FBTyxxQkFBcUIsT0FBTyxvQkFBb0IsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxPQUFPLG9CQUFvQixZQUFZLEtBQUssRUFBRSxlQUFlLEVBQUUsRUFBRSxPQUFPLG9CQUFvQixXQUFXLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxFQUFFLE9BQU8sb0JBQW9CLGVBQWUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLEVBQUUsT0FBTyxvQkFBb0IsWUFBWSxLQUFLLEVBQUUsZUFBZSxFQUFFLEdBQUcsU0FBUyxjQUFjLFNBQVMsWUFBWSxTQUFTLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxTQUFTLFlBQVksY0FDaGdCLEtBQUssRUFBRSxjQUFjLEVBQUUsU0FBUyxZQUFZLFdBQVcsS0FBSyxFQUFFLGlCQUFpQixHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsaUJBQWlCLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxLQUFLLEVBQUVELENBQUMsRUFBRSxLQUFLLElBQUksRUFBRUMsQ0FBQyxFQUFFLG9CQUFvQixTQUFTRCxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVKLENBQUMsRUFBRUssRUFBRSxDQUFDLEVBQUUsSUFBSUYsS0FBS0MsRUFBRUEsRUFBRSxlQUFlRCxDQUFDLEdBQUdDLEVBQUVELENBQUMsSUFBSUYsR0FBR0ksRUFBRSxLQUFLRixDQUFDLEVBQUUsSUFBSUQsRUFBRSxFQUFFQSxFQUFFRyxFQUFFLE9BQU9ILElBQUlDLEVBQUVFLEVBQUVILENBQUMsRUFBRSxPQUFPRSxFQUFFRCxDQUFDLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQ2tELEdBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNyRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxHQUFHLENBQUNELEVBQUVELEVBQUUsR0FBR0EsRUFBRSxTQUFTQSxFQUFFLFNBQVMsRUFBRUUsRUFBRUYsRUFBRSxHQUFHQSxFQUFFLFNBQVNBLEVBQUUsU0FBUyxDQUFDLE1BQVMsQ0FBQ0UsRUFBRUQsRUFBRSxDQUFDLENBQUlBLEdBQUgsR0FBU0MsR0FBSCxHQUFNLEtBQUssV0FBVyxDQUFDRCxFQUFFQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUVtRCxHQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTckQsRUFBRSxDQUFDQSxFQUN2ZkEsRUFBRSxRQUFRLENBQUMsR0FBR0EsRUFBRSxlQUFlLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQ0EsRUFBRSxPQUFPQSxFQUFFLFFBQVFBLEVBQUUsT0FBT0EsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUVxRCxHQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUNBLEdBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNyRCxFQUFFLENBQXdHLEdBQXZHQSxFQUFFQSxFQUFFLDZCQUE2QixHQUFHQSxFQUFFLDZCQUE2QixHQUFHQSxFQUFFLDZCQUE2QixFQUFLLE9BQU8sWUFBWSxDQUFDLElBQUlDLEVBQUUsT0FBTyxZQUF1QixPQUFPQSxHQUFsQixVQUFxQixLQUFLLFdBQVdBLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQ0QsR0FBRyxLQUFLLFdBQVdBLEVBQUUsRUFBRSxlQUFlLEVBQUVxRCxHQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDM1osU0FBU0YsR0FBR25ELEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFQyxFQUFFSixFQUFLLE9BQU8sRUFBRUMsQ0FBQyxFQUFFSSxFQUFFLENBQUMsRUFBRSxJQUFJRixLQUFLQyxFQUFFQSxFQUFFLGVBQWVELENBQUMsR0FBR0UsRUFBRSxLQUFLRCxFQUFFRCxDQUFDLENBQUMsRUFBRSxJQUFJQSxFQUFFLEVBQUVBLEVBQUVFLEVBQUUsT0FBT0YsSUFBSUUsRUFBRUYsQ0FBQyxFQUFFRCxDQUFDLENBQUMsQ0FBQyxTQUFTb0QsR0FBRXJELEVBQUVDLEVBQUUsQ0FBZSxPQUFPLE9BQXJCLEtBQTZCLE9BQU8sYUFBMEIsT0FBTyxPQUFPLFlBQVksS0FBdkMsV0FBMkNELEVBQUUsV0FBVyxPQUFPLFlBQVksSUFBSSxFQUFFQyxFQUFFLFVBQVUsRUFBRUQsRUFBRSxXQUFZLElBQUksT0FBTSxRQUFRLEVBQUVDLEVBQUUsVUFBVSxDQUFDLENBQUMsU0FBU2dELEdBQUdqRCxFQUFFLENBQUNBLEVBQUUsRUFBRWtELEdBQUVsRCxDQUFDLEVBQUUsT0FBT2tELEdBQUVsRCxDQUFDLENBQUMsRUFBRUEsRUFBRSxFQUFFLElBQUlELEVBQUssT0FBTyxJQUFJQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVNrRCxHQUFFbEQsRUFBRSxDQUFDLFFBQVFDLEVBQUUsRUFBRSxFQUFFQSxJQUFJRCxFQUFFLEVBQUVDLENBQUMsRUFBRUQsRUFBRSxFQUFFQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUNELEVBQUUsRUFBRUMsQ0FBQyxHQUFHQSxJQUFJLENBQUMsT0FBT0QsRUFBRSxFQUFFLFFBQVFBLEVBQUUsQ0FBQyxDQUFDLENBQ3BlLFNBQVNvRCxHQUFFcEQsRUFBRUMsRUFBRSxDQUFDLE9BQU8sVUFBVSxDQUFDQSxFQUFFLE1BQU1ELEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQ0QsRUFBSyxPQUFPLElBQUlBLEVBQUssS0FBSyxDQUFDLEVBQ25GQyxFQUFFLEdBQUcsQ0FBZSxHQUFHc0QsR0FBaUIsT0FBT3hELEVBQXJCLEtBQTZCQSxFQUFPLFFBQVEsQ0FBUSxHQUFHLENBQUN5RCxHQUFHLEdBQVEsUUFBUSxDQUFDLE1BQVMsQ0FBQ0EsR0FBRyxJQUFJLENBQUNELEdBQUdFLEdBQUdELEVBQUUsQ0FBQyxHQUFHRCxJQUFJRSxHQUFHLFlBQVlDLEdBQUVELEdBQUcsWUFBWSxHQUFHLEVBQUVDLEdBQUUsSUFBSSxZQUFhLElBQUksV0FBV0EsRUFBQyxFQUFHLE1BQU0sRUFBRTFELEVBQUssT0FBTyxXQUFXMEQsR0FBRSxLQUFLLHVCQUF1QixVQUF3QixPQUFPLE9BQXJCLEtBQTJDLE9BQU8sWUFBckIsSUFBaUMsQ0FBdUIsR0FBdEJDLEdBQUUsSUFBSSxZQUFZLEVBQUUsRUFBSyxPQUFPLFFBQVEsT0FBTyxPQUFPLGdCQUFnQixPQUFPLE9BQU8sZ0JBQWdCQSxFQUFDLFVBQVUsT0FBTyxVQUFVLE9BQU8sU0FBUyxnQkFBZ0IsT0FBTyxTQUFTLGdCQUFnQkEsRUFBQyxNQUNyaEIsT0FBTTFELEVBQUVELEVBQUssT0FBTyxXQUFXMkQsR0FBRSxLQUFLLDJCQUEyQixDQUFDLENBQUMsT0FBTzFELEVBQUUsQ0FBZSxPQUFPLE9BQXJCLEtBQTZCLE9BQU8sVUFBVSxRQUFRLElBQUkseURBQXlELEVBQUUsUUFBUSxJQUFJQSxDQUFDLEVBQUUsQ0FENU0sSUFBQXlELEdBQUVELEdBQUdFLEdBQUVKLEdBQTBEQyxHQUUzRXhELEVBQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsS0FBSyxNQUFNLE1BQU0sR0FBRyxPQUFPLEtBQUssRUFBRSxHQUFHLFNBQVNDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQ0QsRUFBRUEsR0FBRyxDQUFDLEVBQUVDLEVBQUVBLEdBQUcsQ0FBQyxFQUFFLElBQUlDLEVBQUVMLEVBQUssS0FBS00sRUFBRUQsRUFBRSxFQUFFLENBQUMsR0FBR0wsRUFBSyxPQUFPLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRUssRUFBRSxRQUFRLEVBQUVFLEVBQXVKLEdBQXJKRixFQUFFLEVBQUVDLEVBQUVILENBQUMsRUFBRUEsRUFBRUcsRUFBRSxNQUFpQixPQUFPQSxFQUFFLE1BQXBCLFdBQTJCQSxFQUFFLEtBQUtOLEVBQUssTUFBTSxPQUFPLE9BQU9NLEVBQUUsSUFBSSxHQUFjLE9BQU9BLEVBQUUsSUFBcEIsV0FBeUJBLEVBQUUsR0FBR04sRUFBSyxNQUFNLE9BQU8sT0FBT00sRUFBRSxFQUFFLEdBQU0sQ0FBQ04sRUFBSyxLQUFLTSxFQUFFLElBQUksR0FBRyxDQUFDTixFQUFLLE9BQU9NLEVBQUUsTUFBTSxHQUFjLE9BQU9MLEdBQWxCLFVBQXFCLEtBQUtLLEVBQUUsTUFBV0EsRUFBRSxLQUFQLElBQWdCQSxFQUFFLEtBQVAsSUFBaUJBLEVBQUUsS0FBUixLQUFrQkEsRUFBRSxLQUFSLEtBQWtCQSxFQUFFLEtBQVIsS0FBb0JBLEVBQUUsS0FBVixLQUFjLEVBQUVBLEVBQUUsR0FBRyxRQUNqZixFQUFFQSxFQUFFLEdBQUcsT0FBTyxNQUFNLElBQUlOLEVBQUssVUFBVSxRQUFRLGtDQUFrQyxFQUFFLE9BQVcsT0FBT0MsR0FBbEIsVUFBcUJNLEVBQUVQLEVBQUssS0FBSyxhQUFhQyxFQUFFSyxDQUFDLEVBQUVMLEVBQUVNLEVBQUUsSUFBSSxNQUFNLEVBQUVELEVBQUUsR0FBRyxFQUFFLEVBQUVBLEVBQUUsS0FBS0MsRUFBRSxNQUFNUCxFQUFLLEtBQUtDLGFBQWFELEVBQUssSUFBSSxRQUFRLFlBQVlPLEVBQUVOLEVBQUUsSUFBSSxFQUFFSyxFQUFFLE9BQU9DLEVBQUUsSUFBSU4sRUFBRU0sRUFBRSxJQUFJLE1BQU0sRUFBRUQsRUFBRSxHQUFHLEVBQUUsR0FBYyxPQUFPSixHQUFsQixXQUFzQkEsRUFBRUYsRUFBSyxNQUFNLFdBQVcsT0FBT0UsQ0FBQyxHQUFjLE9BQU9DLEdBQWxCLFdBQXNCRyxFQUFFLE1BQU1ILEVBQUVILEVBQUssTUFBTSxXQUFXLE9BQU9HLENBQUMsR0FBR0ksRUFBRSxJQUFJUCxFQUFLLE9BQU9NLEVBQUUsTUFBTSxFQUFFTCxDQUFDLEVBQUVJLEVBQUUsRUFBRUQsRUFBRUUsQ0FBQyxFQUFFRixFQUFFLElBQUlILEVBQUVLLEVBQUUsR0FBV0EsRUFBRSxPQUFWLE9BQWdCTixFQUFLLGFBQWFBLEVBQUssWUFBWSxLQUN2ZkUsYUFBYSxZQUFZRixFQUFLLFlBQVksSUFBSSxRQUFRTyxFQUFFTCxFQUFFSSxFQUFFLEdBQUdILEVBQUVHLEVBQUUsRUFBRSxFQUFFTixFQUFLLEtBQUtNLEVBQUUsSUFBSSxFQUFFLFFBQVFDLEVBQUVMLEVBQUVJLEVBQUUsR0FBR0gsRUFBRUcsRUFBRSxFQUFFLEVBQVNBLENBQUMsRUFBRSxRQUFRLFNBQVNMLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFTCxFQUFLLEtBQUtNLEVBQUVELEVBQUUsR0FBRyxNQUFNQSxFQUFFLFNBQVMsRUFBRSxPQUFPQSxFQUFFLE9BQU9DLENBQUMsQ0FBQyxFQUFFLEdBQUcsU0FBU0wsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDRCxFQUFFQSxHQUFHLENBQUMsRUFBRUMsRUFBRUEsR0FBRyxDQUFDLEVBQUUsSUFBSUMsRUFBRUwsRUFBSyxLQUFLRSxFQUFFRyxFQUFFLEVBQUVBLEVBQUUsRUFBRUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsRUFBRSxRQUFRLEVBQUVILENBQUMsRUFBRUMsRUFBRSxFQUFFLEVBQUUsSUFBSUcsRUFBRUMsRUFBOEksR0FBNUlELEVBQUVKLEVBQUUsTUFBaUIsT0FBT0EsRUFBRSxNQUFwQixXQUEyQkEsRUFBRSxLQUFLRixFQUFLLE1BQU0sT0FBTyxPQUFPRSxFQUFFLElBQUksR0FBYyxPQUFPQSxFQUFFLElBQXBCLFdBQXlCQSxFQUFFLEdBQUdGLEVBQUssTUFBTSxPQUFPLE9BQU9FLEVBQUUsRUFBRSxHQUFNLENBQUNGLEVBQUssS0FBS0UsRUFBRSxJQUFJLEdBQUcsQ0FBQ0YsRUFBSyxPQUFPRSxFQUFFLE1BQU0sR0FDL2UsT0FBT0QsR0FEMmUsVUFDeGUsS0FBS0MsRUFBRSxNQUFXQSxFQUFFLEtBQVAsSUFBZ0JBLEVBQUUsS0FBUCxJQUFpQkEsRUFBRSxLQUFSLEtBQWtCQSxFQUFFLEtBQVIsS0FBa0JBLEVBQUUsS0FBUixLQUFvQkEsRUFBRSxLQUFWLEtBQWMsQ0FBQ0EsRUFBRSxJQUFJLEVBQUVBLEVBQUUsR0FBRyxRQUFRLEVBQUVBLEVBQUUsR0FBRyxPQUFPLE1BQU0sSUFBSUYsRUFBSyxVQUFVLFFBQVEsa0NBQWtDLEVBQUUsT0FBVyxPQUFPQyxHQUFsQixVQUFxQk0sRUFBRVAsRUFBSyxLQUFLLGFBQWFDLEVBQUVDLENBQUMsRUFBRUQsRUFBRU0sRUFBRSxJQUFJLE1BQU0sRUFBRUwsRUFBRSxHQUFHLEVBQUUsRUFBRUEsRUFBRSxLQUFLSyxFQUFFLE1BQU1QLEVBQUssS0FBS0MsYUFBYUQsRUFBSyxJQUFJLFFBQVEsWUFBWUMsRUFBRUEsRUFBRSxNQUFNRCxFQUFLLE1BQU0sT0FBTyxPQUFPRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRUEsRUFBRSxHQUFHLEVBQUUsR0FBYyxPQUFPSSxHQUFsQixXQUFzQkEsRUFBRU4sRUFBSyxNQUFNLFdBQVcsT0FBT00sQ0FBQyxHQUFHQyxFQUFFLElBQUlQLEVBQUssT0FBT0UsRUFBRSxNQUFNLEVBQUVELENBQUMsRUFBRUssRUFDL2VKLEVBQUUsT0FEK2UsT0FDemVGLEVBQUssYUFBYUEsRUFBSyxZQUFZLEtBQUtFLEVBQUUsY0FBYyxZQUFZRixFQUFLLFlBQVksSUFBSSxRQUFRTyxFQUFFTCxFQUFFLEdBQUdBLEVBQUUsR0FBR0EsRUFBRSxJQUFJSSxFQUFFSixFQUFFLEVBQUUsRUFBRUYsRUFBSyxLQUFLRSxFQUFFLElBQUksRUFBRSxRQUFRSyxFQUFFTCxFQUFFLEdBQUdBLEVBQUUsR0FBR0ksRUFBRUosRUFBRSxFQUFFLEVBQUVHLEVBQUUsRUFBRUQsRUFBRUYsQ0FBQyxFQUFFRSxFQUFFLElBQUlILEVBQWFFLEVBQUUsTUFBTixFQUFVRyxFQUFFTixFQUFLLE1BQU0sV0FBVyxTQUFTTSxDQUFDLENBQUMsRUFBRSxRQUFRLFNBQVNMLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFTCxFQUFLLEtBQUssT0FBT0ssRUFBRSxHQUFHSixFQUFFSSxFQUFFLE9BQU9ILENBQUMsRUFBRUMsRUFBRUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxTQUFTSCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxJQUFJQyxFQUFFLEdBQUcsSUFBSUYsS0FBS0QsRUFBRSxHQUFHQSxFQUFFLGVBQWVDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQ0EsRUFBRSxNQUFNLGNBQWMsRUFBRSxNQUFNLElBQUlGLEVBQUssVUFBVSxRQUFRLG9DQUFvQyxFQUM3ZCxPQUQrZEcsR0FBR0MsRUFBRSxJQUNqZkYsRUFBRSxLQUFLRSxFQUFFLElBQVcsT0FBT0gsRUFBRUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxTQUFTLElBQUssVUFBVUMsR0FBR0YsRUFBRUMsQ0FBQyxFQUFFLE1BQU0sSUFBSyxTQUFTQyxHQUFHLElBQUksT0FBT0YsRUFBRUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFNLElBQUssU0FBU0MsR0FBRyxJQUFJSCxFQUFLLE1BQU0sT0FBTyxTQUFTQyxFQUFFQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksTUFBTSxRQUFRLE1BQU0sSUFBSUYsRUFBSyxVQUFVLElBQUksK0JBQStCLENBQUUsQ0FBQyxDQUFDLE9BQU9HLEVBQUUsR0FBRyxFQUFFLE9BQU8sU0FBU0YsRUFBRSxDQUF1QixHQUF0QkEsRUFBRUEsRUFBRSxRQUFRLE1BQU0sRUFBRSxFQUFLLENBQUNBLEVBQUUsTUFBTSxVQUFVLEVBQUUsTUFBTSxJQUFJRCxFQUFLLFVBQVUsUUFBUSwrQkFBK0IsRUFBRUMsRUFBRUEsRUFBRSxRQUFRLFdBQVcsRUFBRSxFQUFFLE1BQU0sR0FBRyxFQUFFLElBQUlDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxJQUFJLENBQUMsR0FBRyxFQUFFQyxFQUFFSCxFQUFFRSxDQUFDLEVBQUUsTUFBTSw2RkFBNkYsR0FBRyxNQUFNLElBQUlILEVBQUssVUFBVSxRQUFRLCtCQUErQixFQUMxb0JJLEVBQUUsQ0FBQyxHQUFULEtBQVdGLEVBQUVFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBU0EsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFRQSxFQUFFLENBQUMsR0FBVCxLQUFXRixFQUFFRSxFQUFFLENBQUMsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRSxNQUFNLHNCQUFzQixFQUFFSixFQUFLLE1BQU0sT0FBTyxPQUFPSSxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVNBLEVBQUUsQ0FBQyxDQUFDLEVBQVFBLEVBQUUsQ0FBQyxHQUFULE9BQWFGLEVBQUVFLEVBQUUsQ0FBQyxDQUFDLEVBQVdBLEVBQUUsQ0FBQyxJQUFaLE9BQWMsQ0FBQyxPQUFPRixDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFQyxFQUFFQyxFQUFFLENBQW9CLEdBQVZGLElBQVQsU0FBYUEsRUFBRSxDQUFDLEdBQWVDLElBQVQsT0FBVyxPQUFPRCxFQUFFLFFBQVFHLEtBQUtGLEVBQUUsR0FBR0EsRUFBRSxlQUFlRSxDQUFDLEVBQUUsQ0FBQyxHQUFHRCxHQUFZRixFQUFFRyxDQUFDLElBQVosUUFBZUgsRUFBRUcsQ0FBQyxJQUFJRixFQUFFRSxDQUFDLEVBQUUsTUFBTSxJQUFJSixFQUFLLFVBQVUsUUFBUSwrQkFBK0IsRUFBRUMsRUFBRUcsQ0FBQyxFQUFFRixFQUFFRSxDQUFDLENBQUMsQ0FBQyxPQUFPSCxDQUFDLEVBQUUsR0FBRyxTQUFTQSxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUUsSUFBSUEsS0FBS0gsRUFBRUEsRUFBRSxlQUFlRyxDQUFDLEdBQUdILEVBQUVHLENBQUMsSUFBSUYsRUFBRUUsQ0FBQyxJQUFJRCxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsR0FBRyxPQUFPRCxDQUFDLEVBQUUsR0FBRyxTQUFTRixFQUM1ZkMsRUFBRSxDQUFDLElBQUlDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLElBQUlBLEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxJQUFhSCxFQUFFQyxFQUFFRSxDQUFDLENBQUMsSUFBZixTQUFtQkQsRUFBRUQsRUFBRUUsQ0FBQyxDQUFDLEVBQUVILEVBQUVDLEVBQUVFLENBQUMsQ0FBQyxHQUFHLE9BQU9ELENBQUMsQ0FBQyxFQUFFSCxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLEtBQUssR0FBRyxDQUFDLEVBQUVBLEVBQUssS0FBSyxhQUFhLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFSCxFQUFLLEtBQUssR0FBR0ksRUFBRSxPQUFBRixFQUFFQSxHQUFHLENBQUMsRUFBRUUsRUFBRUYsRUFBRSxNQUFNLElBQUlDLEVBQUVBLEVBQUVGLENBQUMsRUFBRUUsRUFBRUYsQ0FBQyxHQUFHLENBQUMsRUFBRUcsRUFBRUQsRUFBRUMsQ0FBQyxFQUFFRCxFQUFFQyxDQUFDLEdBQUcsQ0FBQyxVQUFVRixFQUFFLE1BQU1BLEVBQUUsS0FBSyxPQUFPQSxFQUFFLEtB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b3J0cyIsICJtb2R1bGUiLCAiUiIsICJSZWZsZWN0QXBwbHkiLCAidGFyZ2V0IiwgInJlY2VpdmVyIiwgImFyZ3MiLCAiUmVmbGVjdE93bktleXMiLCAiUHJvY2Vzc0VtaXRXYXJuaW5nIiwgIndhcm5pbmciLCAiTnVtYmVySXNOYU4iLCAidmFsdWUiLCAiRXZlbnRFbWl0dGVyIiwgIm9uY2UiLCAiZGVmYXVsdE1heExpc3RlbmVycyIsICJjaGVja0xpc3RlbmVyIiwgImxpc3RlbmVyIiwgImFyZyIsICJuIiwgIl9nZXRNYXhMaXN0ZW5lcnMiLCAidGhhdCIsICJ0eXBlIiwgImkiLCAiZG9FcnJvciIsICJldmVudHMiLCAiZXIiLCAiZXJyIiwgImhhbmRsZXIiLCAibGVuIiwgImxpc3RlbmVycyIsICJhcnJheUNsb25lIiwgIl9hZGRMaXN0ZW5lciIsICJwcmVwZW5kIiwgIm0iLCAiZXhpc3RpbmciLCAidyIsICJvbmNlV3JhcHBlciIsICJfb25jZVdyYXAiLCAic3RhdGUiLCAid3JhcHBlZCIsICJsaXN0IiwgInBvc2l0aW9uIiwgIm9yaWdpbmFsTGlzdGVuZXIiLCAic3BsaWNlT25lIiwgImtleXMiLCAia2V5IiwgIl9saXN0ZW5lcnMiLCAidW53cmFwIiwgImV2bGlzdGVuZXIiLCAidW53cmFwTGlzdGVuZXJzIiwgImVtaXR0ZXIiLCAibGlzdGVuZXJDb3VudCIsICJhcnIiLCAiY29weSIsICJpbmRleCIsICJyZXQiLCAibmFtZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJlcnJvckxpc3RlbmVyIiwgInJlc29sdmVyIiwgImV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lciIsICJhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlciIsICJmbGFncyIsICJ3cmFwTGlzdGVuZXIiLCAicmVxdWlyZV9zamNsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAic2pjbCIsICJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiIsICJnIiwgImgiLCAiYWEiLCAiayIsICJuIiwgImwiLCAibSIsICJwIiwgInoiLCAiQSIsICJDIiwgIkIiLCAiRCIsICJQIiwgImVhIiwgIlEiLCAidCIsICJyIiwgInUiLCAiRyIsICJFIiwgIkgiLCAiRiIsICJWIiwgIkkiLCAidyIsICJ2IiwgIlIiLCAiSiIsICJTIiwgIksiLCAiVyIsICJMIiwgInEiLCAieCIsICJ5IiwgIlgiLCAiWSIsICJNIiwgImZhIiwgImphIiwgImthIiwgImdhIiwgImJhIiwgIk4iLCAiY2EiLCAiTyIsICJUIiwgImhhIiwgImlhIiwgImRhIiwgIlUiLCAiWiIsICJkZWZhdWx0RXJyb3JDb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIm1lc3NhZ2UiLCAicmVzdWx0IiwgImNvbmZpZyIsICJkYXRhIiwgIm1heWJlU3RhY2siLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19hd2FpdCIsICJ2IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiZyIsICJxIiwgInZlcmIiLCAiYXdhaXRSZXR1cm4iLCAiZiIsICJuIiwgImEiLCAiYiIsICJyZXN1bWUiLCAic2V0dGxlIiwgInIiLCAiZnVsZmlsbCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgInAiLCAiX19hc3luY1ZhbHVlcyIsICJkIiwgIlJlc3VsdEFzeW5jIiwgIl9SZXN1bHRBc3luYyIsICJyZXMiLCAicHJvbWlzZSIsICJuZXdQcm9taXNlIiwgInZhbHVlIiwgIk9rIiwgImVycm9yRm4iLCAiZSIsICJFcnIiLCAiZm4iLCAiYXJncyIsICJfX2F3YWl0ZXIiLCAiZXJyb3IiLCAiYXN5bmNSZXN1bHRMaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3QiLCAiY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMiLCAiZiIsICJuZXdSZXMiLCAibmV3VmFsdWUiLCAib2siLCAiX2VyciIsICJ0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiX19hd2FpdCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgIl9fYXN5bmNWYWx1ZXMiLCAic3VjY2Vzc0NhbGxiYWNrIiwgImZhaWx1cmVDYWxsYmFjayIsICJyZXN1bHQiLCAiZXJyQXN5bmMiLCAib2tBc3luYyIsICJlcnIiLCAiZnJvbVByb21pc2UiLCAiZnJvbVNhZmVQcm9taXNlIiwgImZyb21Bc3luY1Rocm93YWJsZSIsICJjb21iaW5lUmVzdWx0TGlzdCIsICJyZXN1bHRMaXN0IiwgImFjYyIsICJsaXN0IiwgImNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyIsICJSZXN1bHQiLCAiZnJvbVRocm93YWJsZSIsICJjb21iaW5lIiwgImNvbWJpbmVXaXRoQWxsRXJyb3JzIiwgIk9rIiwgInZhbHVlIiwgImYiLCAib2siLCAiX2YiLCAiX3ZhbHVlIiwgIlJlc3VsdEFzeW5jIiwgIl92IiwgIl9lcnIiLCAiXyIsICJjb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIkVyciIsICJlcnJvciIsICJlcnIiLCAiZXJyQXN5bmMiLCAidiIsICJfb2siLCAic2VsZiIsICJmcm9tVGhyb3dhYmxlIiwgIlJlc3VsdCIsICJCYXNlRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgImNhdXNlIiwgImNvbnRleHQiLCAiX19wdWJsaWNGaWVsZCIsICJXZWJTb2NrZXRFcnJvciIsICJCYXNlRXJyb3IiLCAiV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIiwgIldlYlNvY2tldEVycm9yIiwgIl9fcHVibGljRmllbGQiLCAiZW5zdXJlRXJyb3IiLCAidmFsdWUiLCAic3RyaW5naWZpZWQiLCAiaW1wb3J0X2V2ZW50cyIsICJldmVudHMiLCAiRXZlbnRFbWl0dGVyIiwgInVwZGF0ZUZpbGUiLCAibHVmaUZpbGUiLCAiYXJncyIsICJpbml0IiwgImV2ZW50cyIsICJlcnJvciIsICJFbmNvZGluZyIsICJjaGFyc2V0IiwgIm5vUGFkZGluZyIsICJhYiIsICJsZW4iLCAidmlldyIsICJyZXMiLCAic3RyIiwgInZpZXdMZW4iLCAiZW5jMSIsICJlbmMyIiwgImVuYzMiLCAiZW5jNCIsICJpIiwgImoiLCAib2JqIiwgIkVuY29kaW5nIiwgIkRlY29kZSIsICJzdHIiLCAib2JqIiwgIm9iaiIsICJFbmNvZGluZyIsICJEZWNvZGUiLCAic3RyIiwgIm9iaiIsICJpbXBvcnRfbHVmaV9zamNsIiwgIkNyeXB0b0Vycm9yIiwgIkJhc2VFcnJvciIsICJEZWNyeXB0aW9uRXJyb3IiLCAiQ3J5cHRvRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJkZWNyeXB0IiwgImtleSIsICJlbmNyeXB0ZWREYXRhIiwgImRhdGEiLCAib2tBc3luYyIsICJEZWNvZGUiLCAic2pjbCIsICJlcnJvciIsICJlcnJBc3luYyIsICJEZWNyeXB0aW9uRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiZGVjcnlwdCIsICJrZXkiLCAiZW5jcnlwdGVkIiwgImltcG9ydEtleSIsICJpbXBvcnRlZEtleSIsICJSZXN1bHRBc3luYyIsICJlcnJvciIsICJEZWNyeXB0aW9uRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiaW1wb3J0S2V5IiwgImtleSIsICJSZXN1bHRBc3luYyIsICJEZWNvZGUiLCAiZXJyb3IiLCAiQ3J5cHRvRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiZGVjcnlwdCIsICJrZXkiLCAidmFsdWUiLCAic29ja2V0cyIsICJNQVhfRVJST1JTIiwgIm9uQ2FuY2VsTWVzc2FnZSIsICJkYXRhIiwgImV2ZW50cyIsICJva0FzeW5jIiwgIm9uRG93bmxvYWRNZXNzYWdlIiwgInJlc3BvbnNlIiwgImx1ZmlGaWxlIiwgInJlc3VsdCIsICJtZXRhZGF0YVN0cmluZyIsICJtZXRhZGF0YSIsICJpc1NlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEiLCAiZGF0YVN0cmluZyIsICJlbmNyeXB0ZWREYXRhIiwgIkRlY29kZSIsICJkZWNyeXB0IiwgImRlY3J5cHRlZFBhcnQiLCAiYnVmZmVyIiwgInVwZGF0ZUZpbGUiLCAiZW5kRG93bmxvYWQiLCAiZXJyb3IiLCAiV2ViU29ja2V0RXJyb3IiLCAiZXJyQXN5bmMiLCAib25VcGxvYWRNZXNzYWdlIiwgIm9uTWVzc2FnZSIsICJlIiwgInRyeVBhcnNlSnNvbiIsICJjYWxsYmFjayIsICJpc0Nvbm5lY3RpbmciLCAic29ja2V0S2V5IiwgImlzU3Bhd25lZCIsICJkb3dubG9hZENodW5rIiwgImx1ZmlGaWxlIiwgImNodW5rTnVtYmVyIiwgIm1lc3NhZ2UiLCAic2VuZE1lc3NhZ2UiLCAiZG93bmxvYWRTb2NrZXRVcmwiLCAiZW5kRG93bmxvYWQiLCAic2VuZE1lc3NhZ2UiLCAic29ja2V0VXJsIiwgImx1ZmlGaWxlIiwgIm1lc3NhZ2UiLCAiaXNTcGF3bmVkIiwgInNvY2tldHMiLCAib2tBc3luYyIsICJzcGF3biIsICJlIiwgIm9uTWVzc2FnZSIsICJzb2NrZXRLZXkiLCAiZXJyb3JDb3VudCIsICJpc0Nvbm5lY3RpbmciLCAiZXZlbnRzIiwgIk1BWF9FUlJPUlMiLCAiZXJyQXN5bmMiLCAiV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIiwgIndhaXRGb3JDb25uZWN0aW9uIiwgImVycm9yIiwgIlJlc3VsdEFzeW5jIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVuc3VyZUVycm9yIiwgImJ1aWxkU29ja2V0VXJsIiwgImluc3RhbmNlVXJsIiwgInBhdGhuYW1lIiwgInVybCIsICJkb3dubG9hZFNvY2tldFVybCIsICJsdWZpRmlsZSIsICJ0cnlQYXJzZUpzb24iLCAiZGF0YSIsICJwYXJzZWRPYmplY3QiLCAiaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhIiwgIm1lc3NhZ2UiLCAiaXNJbml0aWF0ZWQiLCAiZXZlbnQiLCAiaW5pdCIsICJldmVudHMiLCAic29ja2V0cyIsICJkb3dubG9hZFNvY2tldFVybCIsICJyZXRyaWV2ZUluZm9zIiwgImVycm9yIiwgIndvcmtlck1lc3NhZ2UiLCAiZG93bmxvYWRDaHVuayJdCn0K diff --git a/themes/default/public/js/worker/remove.js b/themes/default/public/js/worker/remove.js index 531e9a4..9fc462c 100644 --- a/themes/default/public/js/worker/remove.js +++ b/themes/default/public/js/worker/remove.js @@ -1 +1,2 @@ -var oe=Object.create;var T=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var ue=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var fe=(r,e,t)=>e in r?T(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var ce=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var le=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of se(e))!ae.call(r,o)&&o!==t&&T(r,o,{get:()=>e[o],enumerable:!(n=ie(e,o))||n.enumerable});return r};var he=(r,e,t)=>(t=r!=null?oe(ue(r)):{},le(e||!r||!r.__esModule?T(t,"default",{value:r,enumerable:!0}):t,r));var L=(r,e,t)=>fe(r,typeof e!="symbol"?e+"":e,t);var X=ce((qe,S)=>{"use strict";var g=typeof Reflect=="object"?Reflect:null,J=g&&typeof g.apply=="function"?g.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)},x;g&&typeof g.ownKeys=="function"?x=g.ownKeys:Object.getOwnPropertySymbols?x=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:x=function(e){return Object.getOwnPropertyNames(e)};function ye(r){console&&console.warn&&console.warn(r)}var H=Number.isNaN||function(e){return e!==e};function u(){u.init.call(this)}S.exports=u;S.exports.once=Oe;u.EventEmitter=u;u.prototype._events=void 0;u.prototype._eventsCount=0;u.prototype._maxListeners=void 0;var K=10;function I(r){if(typeof r!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof r)}Object.defineProperty(u,"defaultMaxListeners",{enumerable:!0,get:function(){return K},set:function(r){if(typeof r!="number"||r<0||H(r))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+r+".");K=r}});u.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};u.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||H(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 B(r){return r._maxListeners===void 0?u.defaultMaxListeners:r._maxListeners}u.prototype.getMaxListeners=function(){return B(this)};u.prototype.emit=function(e){for(var t=[],n=1;n0&&(s=t[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var c=i[e];if(c===void 0)return!1;if(typeof c=="function")J(c,this,t);else for(var d=c.length,p=Z(c,d),n=0;n0&&s.length>o&&!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=r,a.type=e,a.count=s.length,ye(a)}return r}u.prototype.addListener=function(e,t){return $(this,e,t,!1)};u.prototype.on=u.prototype.addListener;u.prototype.prependListener=function(e,t){return $(this,e,t,!0)};function we(){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 G(r,e,t){var n={fired:!1,wrapFn:void 0,target:r,type:e,listener:t},o=we.bind(n);return o.listener=t,n.wrapFn=o,o}u.prototype.once=function(e,t){return I(t),this.on(e,G(this,e,t)),this};u.prototype.prependOnceListener=function(e,t){return I(t),this.prependListener(e,G(this,e,t)),this};u.prototype.removeListener=function(e,t){var n,o,i,s,a;if(I(t),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===t||n.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||t));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===t||n[s].listener===t){a=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():_e(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||t)}return this};u.prototype.off=u.prototype.removeListener;u.prototype.removeAllListeners=function(e){var t,n,o;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 i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,t[o]);return this};function q(r,e,t){var n=r._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?t?[o.listener||o]:[o]:t?Le(o):Z(o,o.length)}u.prototype.listeners=function(e){return q(this,e,!0)};u.prototype.rawListeners=function(e){return q(this,e,!1)};u.listenerCount=function(r,e){return typeof r.listenerCount=="function"?r.listenerCount(e):Q.call(r,e)};u.prototype.listenerCount=Q;function Q(r){var e=this._events;if(e!==void 0){var t=e[r];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}u.prototype.eventNames=function(){return this._eventsCount>0?x(this._events):[]};function Z(r,e){for(var t=new Array(e),n=0;n{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=t.withStackTrace?new Error().stack:void 0;return{data:n,message:r,stack:o}};function O(r,e,t,n){function o(i){return i instanceof t?i:new t(function(s){s(i)})}return new(t||(t=Promise))(function(i,s){function a(p){try{d(n.next(p))}catch(_){s(_)}}function c(p){try{d(n.throw(p))}catch(_){s(_)}}function d(p){p.done?i(p.value):o(p.value).then(a,c)}d((n=n.apply(r,e||[])).next())})}function F(r){var e=typeof Symbol=="function"&&Symbol.iterator,t=e&&r[e],n=0;if(t)return t.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&n>=r.length&&(r=void 0),{value:r&&r[n++],done:!r}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function v(r){return this instanceof v?(this.v=r,this):new v(r)}function U(r,e,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=t.apply(r,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(f){return function(y){return Promise.resolve(y).then(f,_)}}function a(f,y){n[f]&&(o[f]=function(A){return new Promise(function(te,ne){i.push([f,A,te,ne])>1||c(f,A)})},y&&(o[f]=y(o[f])))}function c(f,y){try{d(n[f](y))}catch(A){M(i[0][3],A)}}function d(f){f.value instanceof v?Promise.resolve(f.value.v).then(p,_):M(i[0][2],f)}function p(f){c("next",f)}function _(f){c("throw",f)}function M(f,y){f(y),i.shift(),i.length&&c(i[0][0],i[0][1])}}function me(r){var e,t;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=r[o]?function(s){return(t=!t)?{value:v(r[o](s)),done:!1}:i?i(s):s}:i}}function de(r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=r[Symbol.asyncIterator],t;return e?e.call(r):(r=typeof F=="function"?F(r):r[Symbol.iterator](),t={},n("next"),n("throw"),n("return"),t[Symbol.asyncIterator]=function(){return this},t);function n(i){t[i]=r[i]&&function(s){return new Promise(function(a,c){s=r[i](s),o(a,c,s.done,s.value)})}}function o(i,s,a,c){Promise.resolve(c).then(function(d){i({value:d,done:a})},s)}}var h=class r{constructor(e){this._promise=e}static fromSafePromise(e){let t=e.then(n=>new m(n));return new r(t)}static fromPromise(e,t){let n=e.then(o=>new m(o)).catch(o=>new l(t(o)));return new r(n)}static fromThrowable(e,t){return(...n)=>new r(O(this,void 0,void 0,function*(){try{return new m(yield e(...n))}catch(o){return new l(t?t(o):o)}}))}static combine(e){return ve(e)}static combineWithAllErrors(e){return Ee(e)}map(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){return t.isErr()?new l(t.error):new m(yield e(t.value))})))}andThrough(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){if(t.isErr())return new l(t.error);let n=yield e(t.value);return n.isErr()?new l(n.error):new m(t.value)})))}andTee(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){if(t.isErr())return new l(t.error);try{yield e(t.value)}catch{}return new m(t.value)})))}mapErr(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){return t.isOk()?new m(t.value):new l(yield e(t.error))})))}andThen(e){return new r(this._promise.then(t=>{if(t.isErr())return new l(t.error);let n=e(t.value);return n instanceof r?n._promise:n}))}orElse(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){return t.isErr()?e(t.error):new m(t.value)})))}match(e,t){return this._promise.then(n=>n.match(e,t))}unwrapOr(e){return this._promise.then(t=>t.unwrapOr(e))}safeUnwrap(){return U(this,arguments,function*(){return yield v(yield v(yield*me(de(yield v(this._promise.then(t=>t.safeUnwrap()))))))})}then(e,t){return this._promise.then(e,t)}[Symbol.asyncIterator](){return U(this,arguments,function*(){let t=yield v(this._promise);return t.isErr()&&(yield yield v(D(t.error))),yield v(t.value)})}};var D=r=>new h(Promise.resolve(new l(r))),Ie=h.fromPromise,Re=h.fromSafePromise,Pe=h.fromThrowable,W=r=>{let e=w([]);for(let t of r)if(t.isErr()){e=E(t.error);break}else e.map(n=>n.push(t.value));return e},ve=r=>h.fromSafePromise(Promise.all(r)).andThen(W),j=r=>{let e=w([]);for(let t of r)t.isErr()&&e.isErr()?e.error.push(t.error):t.isErr()&&e.isOk()?e=E([t.error]):t.isOk()&&e.isOk()&&e.value.push(t.value);return e},Ee=r=>h.fromSafePromise(Promise.all(r)).andThen(j),C;(function(r){function e(o,i){return(...s)=>{try{let a=o(...s);return w(a)}catch(a){return E(i?i(a):a)}}}r.fromThrowable=e;function t(o){return W(o)}r.combine=t;function n(o){return j(o)}r.combineWithAllErrors=n})(C||(C={}));var w=r=>new m(r);function E(r){return new l(r)}var m=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return w(e(this.value))}mapErr(e){return w(this.value)}andThen(e){return e(this.value)}andThrough(e){return e(this.value).map(t=>this.value)}andTee(e){try{e(this.value)}catch{}return w(this.value)}orElse(e){return w(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return h.fromSafePromise(e(this.value))}unwrapOr(e){return this.value}match(e,t){return e(this.value)}safeUnwrap(){let e=this.value;return function*(){return e}()}_unsafeUnwrap(e){return this.value}_unsafeUnwrapErr(e){throw N("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},l=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return E(this.error)}mapErr(e){return E(e(this.error))}andThrough(e){return E(this.error)}andTee(e){return E(this.error)}andThen(e){return E(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return D(this.error)}asyncAndThrough(e){return D(this.error)}asyncMap(e){return D(this.error)}unwrapOr(e){return e}match(e,t){return t(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield E(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw N("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},Te=C.fromThrowable;var b=class extends Error{constructor(t,n={}){let{cause:o,context:i}=n;super(t,{cause:o});L(this,"context");this.name=this.constructor.name,this.context=i}};var k=r=>{if(r instanceof Error)return r;let e="[Unable to stringify the thrown value]";try{e=JSON.stringify(r)}catch{}return new Error(e)};var V=he(X());var Y=new V.default;var ee=()=>{Y.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),Y.once("OPERATION_FAILED",r=>{self.postMessage({event:"OPERATION_FAILED",error:r})})};var R=class extends b{};var P=class extends R{constructor(){super(...arguments);L(this,"message","Failed to remove the file")}};var re=!1;self.onmessage=r=>{re||(ee(),re=!0),De(r.data).map(()=>{self.postMessage({event:"FILE_REMOVED"})}).mapErr(e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})};var De=r=>h.fromPromise(new Promise((e,t)=>{let n=r.args.lufiFile;fetch(`${new URL(n.serverUrl).href}d/${n.keys.server}/${n.actionToken}`).then(o=>o.ok?e(void 0):t(new P(void 0,{cause:k(o.statusText)})))}),e=>k(e)); +var oe=Object.create;var C=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var ue=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var fe=(r,e,t)=>e in r?C(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var ce=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var le=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of se(e))!ae.call(r,o)&&o!==t&&C(r,o,{get:()=>e[o],enumerable:!(n=ie(e,o))||n.enumerable});return r};var he=(r,e,t)=>(t=r!=null?oe(ue(r)):{},le(e||!r||!r.__esModule?C(t,"default",{value:r,enumerable:!0}):t,r));var L=(r,e,t)=>fe(r,typeof e!="symbol"?e+"":e,t);var X=ce((qe,k)=>{"use strict";var g=typeof Reflect=="object"?Reflect:null,J=g&&typeof g.apply=="function"?g.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)},R;g&&typeof g.ownKeys=="function"?R=g.ownKeys:Object.getOwnPropertySymbols?R=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:R=function(e){return Object.getOwnPropertyNames(e)};function ye(r){console&&console.warn&&console.warn(r)}var K=Number.isNaN||function(e){return e!==e};function u(){u.init.call(this)}k.exports=u;k.exports.once=Oe;u.EventEmitter=u;u.prototype._events=void 0;u.prototype._eventsCount=0;u.prototype._maxListeners=void 0;var H=10;function I(r){if(typeof r!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof r)}Object.defineProperty(u,"defaultMaxListeners",{enumerable:!0,get:function(){return H},set:function(r){if(typeof r!="number"||r<0||K(r))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+r+".");H=r}});u.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};u.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||K(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 B(r){return r._maxListeners===void 0?u.defaultMaxListeners:r._maxListeners}u.prototype.getMaxListeners=function(){return B(this)};u.prototype.emit=function(e){for(var t=[],n=1;n0&&(s=t[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var c=i[e];if(c===void 0)return!1;if(typeof c=="function")J(c,this,t);else for(var d=c.length,p=Z(c,d),n=0;n0&&s.length>o&&!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=r,a.type=e,a.count=s.length,ye(a)}return r}u.prototype.addListener=function(e,t){return $(this,e,t,!1)};u.prototype.on=u.prototype.addListener;u.prototype.prependListener=function(e,t){return $(this,e,t,!0)};function we(){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 G(r,e,t){var n={fired:!1,wrapFn:void 0,target:r,type:e,listener:t},o=we.bind(n);return o.listener=t,n.wrapFn=o,o}u.prototype.once=function(e,t){return I(t),this.on(e,G(this,e,t)),this};u.prototype.prependOnceListener=function(e,t){return I(t),this.prependListener(e,G(this,e,t)),this};u.prototype.removeListener=function(e,t){var n,o,i,s,a;if(I(t),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===t||n.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||t));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===t||n[s].listener===t){a=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():_e(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||t)}return this};u.prototype.off=u.prototype.removeListener;u.prototype.removeAllListeners=function(e){var t,n,o;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 i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,t[o]);return this};function q(r,e,t){var n=r._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?t?[o.listener||o]:[o]:t?Le(o):Z(o,o.length)}u.prototype.listeners=function(e){return q(this,e,!0)};u.prototype.rawListeners=function(e){return q(this,e,!1)};u.listenerCount=function(r,e){return typeof r.listenerCount=="function"?r.listenerCount(e):Q.call(r,e)};u.prototype.listenerCount=Q;function Q(r){var e=this._events;if(e!==void 0){var t=e[r];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}u.prototype.eventNames=function(){return this._eventsCount>0?R(this._events):[]};function Z(r,e){for(var t=new Array(e),n=0;n{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=t.withStackTrace?new Error().stack:void 0;return{data:n,message:r,stack:o}};function O(r,e,t,n){function o(i){return i instanceof t?i:new t(function(s){s(i)})}return new(t||(t=Promise))(function(i,s){function a(p){try{d(n.next(p))}catch(_){s(_)}}function c(p){try{d(n.throw(p))}catch(_){s(_)}}function d(p){p.done?i(p.value):o(p.value).then(a,c)}d((n=n.apply(r,e||[])).next())})}function F(r){var e=typeof Symbol=="function"&&Symbol.iterator,t=e&&r[e],n=0;if(t)return t.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&n>=r.length&&(r=void 0),{value:r&&r[n++],done:!r}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function v(r){return this instanceof v?(this.v=r,this):new v(r)}function U(r,e,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=t.apply(r,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(f){return function(y){return Promise.resolve(y).then(f,_)}}function a(f,y){n[f]&&(o[f]=function(A){return new Promise(function(te,ne){i.push([f,A,te,ne])>1||c(f,A)})},y&&(o[f]=y(o[f])))}function c(f,y){try{d(n[f](y))}catch(A){M(i[0][3],A)}}function d(f){f.value instanceof v?Promise.resolve(f.value.v).then(p,_):M(i[0][2],f)}function p(f){c("next",f)}function _(f){c("throw",f)}function M(f,y){f(y),i.shift(),i.length&&c(i[0][0],i[0][1])}}function me(r){var e,t;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=r[o]?function(s){return(t=!t)?{value:v(r[o](s)),done:!1}:i?i(s):s}:i}}function de(r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=r[Symbol.asyncIterator],t;return e?e.call(r):(r=typeof F=="function"?F(r):r[Symbol.iterator](),t={},n("next"),n("throw"),n("return"),t[Symbol.asyncIterator]=function(){return this},t);function n(i){t[i]=r[i]&&function(s){return new Promise(function(a,c){s=r[i](s),o(a,c,s.done,s.value)})}}function o(i,s,a,c){Promise.resolve(c).then(function(d){i({value:d,done:a})},s)}}var h=class r{constructor(e){this._promise=e}static fromSafePromise(e){let t=e.then(n=>new m(n));return new r(t)}static fromPromise(e,t){let n=e.then(o=>new m(o)).catch(o=>new l(t(o)));return new r(n)}static fromThrowable(e,t){return(...n)=>new r(O(this,void 0,void 0,function*(){try{return new m(yield e(...n))}catch(o){return new l(t?t(o):o)}}))}static combine(e){return ve(e)}static combineWithAllErrors(e){return Ee(e)}map(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){return t.isErr()?new l(t.error):new m(yield e(t.value))})))}andThrough(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){if(t.isErr())return new l(t.error);let n=yield e(t.value);return n.isErr()?new l(n.error):new m(t.value)})))}andTee(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){if(t.isErr())return new l(t.error);try{yield e(t.value)}catch{}return new m(t.value)})))}mapErr(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){return t.isOk()?new m(t.value):new l(yield e(t.error))})))}andThen(e){return new r(this._promise.then(t=>{if(t.isErr())return new l(t.error);let n=e(t.value);return n instanceof r?n._promise:n}))}orElse(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){return t.isErr()?e(t.error):new m(t.value)})))}match(e,t){return this._promise.then(n=>n.match(e,t))}unwrapOr(e){return this._promise.then(t=>t.unwrapOr(e))}safeUnwrap(){return U(this,arguments,function*(){return yield v(yield v(yield*me(de(yield v(this._promise.then(t=>t.safeUnwrap()))))))})}then(e,t){return this._promise.then(e,t)}[Symbol.asyncIterator](){return U(this,arguments,function*(){let t=yield v(this._promise);return t.isErr()&&(yield yield v(D(t.error))),yield v(t.value)})}};var D=r=>new h(Promise.resolve(new l(r))),Ie=h.fromPromise,xe=h.fromSafePromise,Pe=h.fromThrowable,W=r=>{let e=w([]);for(let t of r)if(t.isErr()){e=E(t.error);break}else e.map(n=>n.push(t.value));return e},ve=r=>h.fromSafePromise(Promise.all(r)).andThen(W),j=r=>{let e=w([]);for(let t of r)t.isErr()&&e.isErr()?e.error.push(t.error):t.isErr()&&e.isOk()?e=E([t.error]):t.isOk()&&e.isOk()&&e.value.push(t.value);return e},Ee=r=>h.fromSafePromise(Promise.all(r)).andThen(j),T;(function(r){function e(o,i){return(...s)=>{try{let a=o(...s);return w(a)}catch(a){return E(i?i(a):a)}}}r.fromThrowable=e;function t(o){return W(o)}r.combine=t;function n(o){return j(o)}r.combineWithAllErrors=n})(T||(T={}));var w=r=>new m(r);function E(r){return new l(r)}var m=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return w(e(this.value))}mapErr(e){return w(this.value)}andThen(e){return e(this.value)}andThrough(e){return e(this.value).map(t=>this.value)}andTee(e){try{e(this.value)}catch{}return w(this.value)}orElse(e){return w(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return h.fromSafePromise(e(this.value))}unwrapOr(e){return this.value}match(e,t){return e(this.value)}safeUnwrap(){let e=this.value;return function*(){return e}()}_unsafeUnwrap(e){return this.value}_unsafeUnwrapErr(e){throw N("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},l=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return E(this.error)}mapErr(e){return E(e(this.error))}andThrough(e){return E(this.error)}andTee(e){return E(this.error)}andThen(e){return E(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return D(this.error)}asyncAndThrough(e){return D(this.error)}asyncMap(e){return D(this.error)}unwrapOr(e){return e}match(e,t){return t(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield E(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw N("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},Ce=T.fromThrowable;var b=class extends Error{constructor(t,n={}){let{cause:o,context:i}=n;super(t,{cause:o});L(this,"context");this.name=this.constructor.name,this.context=i}};var S=r=>{if(r instanceof Error)return r;let e="[Unable to stringify the thrown value]";try{e=JSON.stringify(r)}catch{}return new Error(e)};var V=he(X());var Y=new V.default;var ee=()=>{Y.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),Y.once("OPERATION_FAILED",r=>{self.postMessage({event:"OPERATION_FAILED",error:r})})};var x=class extends b{};var P=class extends x{constructor(){super(...arguments);L(this,"message","Failed to remove the file")}};var re=!1;self.onmessage=r=>{re||(ee(),re=!0),De(r.data).map(()=>{self.postMessage({event:"FILE_REMOVED"})}).mapErr(e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})};var De=r=>h.fromPromise(new Promise((e,t)=>{let n=r.args.lufiFile;fetch(`${new URL(n.serverUrl).href}d/${n.keys.server}/${n.actionToken}`).then(o=>o.ok?e(void 0):t(new P(void 0,{cause:S(o.statusText)})))}),e=>S(e)); +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbmV2ZXJ0aHJvd0A4LjEuMS9ub2RlX21vZHVsZXMvbmV2ZXJ0aHJvdy9kaXN0L2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9lcnJvci9iYXNlLWVycm9yLnRzIiwgIi4uLy4uL3NyYy91dGlscy50cyIsICIuLi8uLi9zcmMvd29ya2VyL3NoYXJlZC50cyIsICIuLi8uLi9zcmMvZXJyb3Ivd29ya2VyL3dvcmtlci1lcnJvci50cyIsICIuLi8uLi9zcmMvZXJyb3Ivd29ya2VyL3dvcmtlci1yZW1vdmUtZmFpbGVkLWVycm9yLnRzIiwgIi4uLy4uL3NyYy93b3JrZXIvcmVtb3ZlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwgImNvbnN0IGRlZmF1bHRFcnJvckNvbmZpZyA9IHtcclxuICAgIHdpdGhTdGFja1RyYWNlOiBmYWxzZSxcclxufTtcclxuLy8gQ3VzdG9tIGVycm9yIG9iamVjdFxyXG4vLyBDb250ZXh0IC8gZGlzY3Vzc2lvbjogaHR0cHM6Ly9naXRodWIuY29tL3N1cGVybWFjcm8vbmV2ZXJ0aHJvdy9wdWxsLzIxNVxyXG5jb25zdCBjcmVhdGVOZXZlclRocm93RXJyb3IgPSAobWVzc2FnZSwgcmVzdWx0LCBjb25maWcgPSBkZWZhdWx0RXJyb3JDb25maWcpID0+IHtcclxuICAgIGNvbnN0IGRhdGEgPSByZXN1bHQuaXNPaygpXHJcbiAgICAgICAgPyB7IHR5cGU6ICdPaycsIHZhbHVlOiByZXN1bHQudmFsdWUgfVxyXG4gICAgICAgIDogeyB0eXBlOiAnRXJyJywgdmFsdWU6IHJlc3VsdC5lcnJvciB9O1xyXG4gICAgY29uc3QgbWF5YmVTdGFjayA9IGNvbmZpZy53aXRoU3RhY2tUcmFjZSA/IG5ldyBFcnJvcigpLnN0YWNrIDogdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgc3RhY2s6IG1heWJlU3RhY2ssXHJcbiAgICB9O1xyXG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xyXG5cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XG5cbmNsYXNzIFJlc3VsdEFzeW5jIHtcclxuICAgIGNvbnN0cnVjdG9yKHJlcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSByZXM7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbVNhZmVQcm9taXNlKHByb21pc2UpIHtcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gcHJvbWlzZS50aGVuKCh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuZXdQcm9taXNlKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tUHJvbWlzZShwcm9taXNlLCBlcnJvckZuKSB7XHJcbiAgICAgICAgY29uc3QgbmV3UHJvbWlzZSA9IHByb21pc2VcclxuICAgICAgICAgICAgLnRoZW4oKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpKVxyXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IG5ldyBFcnIoZXJyb3JGbihlKSkpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMobmV3UHJvbWlzZSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgc3RhdGljIGZyb21UaHJvd2FibGUoZm4sIGVycm9yRm4pIHtcclxuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYygoKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9rKHlpZWxkIGZuKC4uLmFyZ3MpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKGVycm9yRm4gPyBlcnJvckZuKGVycm9yKSA6IGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkpKCkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY29tYmluZShhc3luY1Jlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdEFzeW5jTGlzdChhc3luY1Jlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNvbWJpbmVXaXRoQWxsRXJyb3JzKGFzeW5jUmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0QXN5bmNMaXN0V2l0aEFsbEVycm9ycyhhc3luY1Jlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgbWFwKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHlpZWxkIGYocmVzLnZhbHVlKSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIGFuZFRocm91Z2goZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1JlcyA9IHlpZWxkIGYocmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKG5ld1Jlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihuZXdSZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgYW5kVGVlKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgeWllbGQgZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUZWUgZG9lcyBub3QgY2FyZSBhYm91dCB0aGUgZXJyb3JcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIG1hcEVycihmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzT2soKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHlpZWxkIGYocmVzLmVycm9yKSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGYocmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlIGluc3RhbmNlb2YgUmVzdWx0QXN5bmMgPyBuZXdWYWx1ZS5fcHJvbWlzZSA6IG5ld1ZhbHVlO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgbWF0Y2gob2ssIF9lcnIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy5tYXRjaChvaywgX2VycikpO1xyXG4gICAgfVxyXG4gICAgdW53cmFwT3IodCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLnVud3JhcE9yKHQpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWQgd2lsbCBiZSByZW1vdmVkIGluIDkuMC4wLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gdXNlIGBzYWZlVHJ5YCB3aXRob3V0IHRoaXMgbWV0aG9kLlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHNhZmVUcnkoYXN5bmMgZnVuY3Rpb24qICgpIHtcclxuICAgICAqICAgY29uc3Qgb2tWYWx1ZSA9IHlpZWxkKiB5b3VyUmVzdWx0XHJcbiAgICAgKiB9KVxyXG4gICAgICogYGBgXHJcbiAgICAgKiBFbXVsYXRlcyBSdXN0J3MgYD9gIG9wZXJhdG9yIGluIGBzYWZlVHJ5YCdzIGJvZHkuIFNlZSBhbHNvIGBzYWZlVHJ5YC5cclxuICAgICAqL1xyXG4gICAgc2FmZVVud3JhcCgpIHtcclxuICAgICAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBzYWZlVW53cmFwXzEoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBfX2F3YWl0KHlpZWxkIF9fYXdhaXQoeWllbGQqIF9fYXN5bmNEZWxlZ2F0b3IoX19hc3luY1ZhbHVlcyh5aWVsZCBfX2F3YWl0KHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMuc2FmZVVud3JhcCgpKSkpKSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gTWFrZXMgUmVzdWx0QXN5bmMgaW1wbGVtZW50IFByb21pc2VMaWtlPFJlc3VsdD5cclxuICAgIHRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZS50aGVuKHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogX2EoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIF9fYXdhaXQodGhpcy5fcHJvbWlzZSk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCBfX2F3YWl0KGVyckFzeW5jKHJlc3VsdC5lcnJvcikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgICAgICByZXR1cm4geWllbGQgX19hd2FpdChyZXN1bHQudmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IG9rQXN5bmMgPSAodmFsdWUpID0+IG5ldyBSZXN1bHRBc3luYyhQcm9taXNlLnJlc29sdmUobmV3IE9rKHZhbHVlKSkpO1xyXG5jb25zdCBlcnJBc3luYyA9IChlcnIpID0+IG5ldyBSZXN1bHRBc3luYyhQcm9taXNlLnJlc29sdmUobmV3IEVycihlcnIpKSk7XHJcbmNvbnN0IGZyb21Qcm9taXNlID0gUmVzdWx0QXN5bmMuZnJvbVByb21pc2U7XHJcbmNvbnN0IGZyb21TYWZlUHJvbWlzZSA9IFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZTtcclxuY29uc3QgZnJvbUFzeW5jVGhyb3dhYmxlID0gUmVzdWx0QXN5bmMuZnJvbVRocm93YWJsZTtcblxuLyoqXHJcbiAqIFNob3J0IGNpcmN1aXRzIG9uIHRoZSBGSVJTVCBFcnIgdmFsdWUgdGhhdCB3ZSBmaW5kXHJcbiAqL1xyXG5jb25zdCBjb21iaW5lUmVzdWx0TGlzdCA9IChyZXN1bHRMaXN0KSA9PiB7XHJcbiAgICBsZXQgYWNjID0gb2soW10pO1xyXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0TGlzdCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICBhY2MgPSBlcnIocmVzdWx0LmVycm9yKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhY2MubWFwKChsaXN0KSA9PiBsaXN0LnB1c2gocmVzdWx0LnZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjYztcclxufTtcclxuLyogVGhpcyBpcyB0aGUgdHlwZXNhZmUgdmVyc2lvbiBvZiBQcm9taXNlLmFsbFxyXG4gKlxyXG4gKiBUYWtlcyBhIGxpc3Qgb2YgUmVzdWx0QXN5bmM8VCwgRT4gYW5kIHN1Y2Nlc3MgaWYgYWxsIGlubmVyIHJlc3VsdHMgYXJlIE9rIHZhbHVlc1xyXG4gKiBvciBmYWlscyBpZiBvbmUgKG9yIG1vcmUpIG9mIHRoZSBpbm5lciByZXN1bHRzIGFyZSBFcnIgdmFsdWVzXHJcbiAqL1xyXG5jb25zdCBjb21iaW5lUmVzdWx0QXN5bmNMaXN0ID0gKGFzeW5jUmVzdWx0TGlzdCkgPT4gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlKFByb21pc2UuYWxsKGFzeW5jUmVzdWx0TGlzdCkpLmFuZFRoZW4oY29tYmluZVJlc3VsdExpc3QpO1xyXG4vKipcclxuICogR2l2ZSBhIGxpc3Qgb2YgYWxsIHRoZSBlcnJvcnMgd2UgZmluZFxyXG4gKi9cclxuY29uc3QgY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzID0gKHJlc3VsdExpc3QpID0+IHtcclxuICAgIGxldCBhY2MgPSBvayhbXSk7XHJcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpICYmIGFjYy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgIGFjYy5lcnJvci5wdXNoKHJlc3VsdC5lcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdC5pc0VycigpICYmIGFjYy5pc09rKCkpIHtcclxuICAgICAgICAgICAgYWNjID0gZXJyKFtyZXN1bHQuZXJyb3JdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzT2soKSAmJiBhY2MuaXNPaygpKSB7XHJcbiAgICAgICAgICAgIGFjYy52YWx1ZS5wdXNoKHJlc3VsdC52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiByZXN1bHQuaXNPaygpICYmIGFjYy5pc0VycigpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjO1xyXG59O1xyXG5jb25zdCBjb21iaW5lUmVzdWx0QXN5bmNMaXN0V2l0aEFsbEVycm9ycyA9IChhc3luY1Jlc3VsdExpc3QpID0+IFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZShQcm9taXNlLmFsbChhc3luY1Jlc3VsdExpc3QpKS5hbmRUaGVuKGNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXHJcbnZhciBSZXN1bHQ7XHJcbihmdW5jdGlvbiAoUmVzdWx0KSB7XHJcbiAgICAvKipcclxuICAgICAqIFdyYXBzIGEgZnVuY3Rpb24gd2l0aCBhIHRyeSBjYXRjaCwgY3JlYXRpbmcgYSBuZXcgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZVxyXG4gICAgICogYXJndW1lbnRzIGJ1dCByZXR1cm5pbmcgYE9rYCBpZiBzdWNjZXNzZnVsLCBgRXJyYCBpZiB0aGUgZnVuY3Rpb24gdGhyb3dzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZuIGZ1bmN0aW9uIHRvIHdyYXAgd2l0aCBvayBvbiBzdWNjZXNzIG9yIGVyciBvbiBmYWlsdXJlXHJcbiAgICAgKiBAcGFyYW0gZXJyb3JGbiB3aGVuIGFuIGVycm9yIGlzIHRocm93biwgdGhpcyB3aWxsIHdyYXAgdGhlIGVycm9yIHJlc3VsdCBpZiBwcm92aWRlZFxyXG4gICAgICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgZnVuY3Rpb24gZnJvbVRocm93YWJsZShmbiwgZXJyb3JGbikge1xyXG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm4oLi4uYXJncyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2socmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycihlcnJvckZuID8gZXJyb3JGbihlKSA6IGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIFJlc3VsdC5mcm9tVGhyb3dhYmxlID0gZnJvbVRocm93YWJsZTtcclxuICAgIGZ1bmN0aW9uIGNvbWJpbmUocmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0TGlzdChyZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIFJlc3VsdC5jb21iaW5lID0gY29tYmluZTtcclxuICAgIGZ1bmN0aW9uIGNvbWJpbmVXaXRoQWxsRXJyb3JzKHJlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzKHJlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmNvbWJpbmVXaXRoQWxsRXJyb3JzID0gY29tYmluZVdpdGhBbGxFcnJvcnM7XHJcbn0pKFJlc3VsdCB8fCAoUmVzdWx0ID0ge30pKTtcclxuY29uc3Qgb2sgPSAodmFsdWUpID0+IG5ldyBPayh2YWx1ZSk7XHJcbmZ1bmN0aW9uIGVycihlcnIpIHtcclxuICAgIHJldHVybiBuZXcgRXJyKGVycik7XHJcbn1cclxuZnVuY3Rpb24gc2FmZVRyeShib2R5KSB7XHJcbiAgICBjb25zdCBuID0gYm9keSgpLm5leHQoKTtcclxuICAgIGlmIChuIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMobi50aGVuKChyKSA9PiByLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbi52YWx1ZTtcclxufVxyXG5jbGFzcyBPayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGlzT2soKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpc0VycigpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNPaygpO1xyXG4gICAgfVxyXG4gICAgbWFwKGYpIHtcclxuICAgICAgICByZXR1cm4gb2soZih0aGlzLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBtYXBFcnIoX2YpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSkubWFwKChfdmFsdWUpID0+IHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgYW5kVGVlKGYpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBUZWUgZG9lc24ndCBjYXJlIGFib3V0IHRoZSBlcnJvclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNBbmRUaGVuKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhc3luY0FuZFRocm91Z2goZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpLm1hcCgoKSA9PiB0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFzeW5jTWFwKGYpIHtcclxuICAgICAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlKGYodGhpcy52YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgdW53cmFwT3IoX3YpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hdGNoKG9rLCBfZXJyKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgc2FmZVVud3JhcCgpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUteWllbGQgKi9cclxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9KSgpO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcChfKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwRXJyKGNvbmZpZykge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZU5ldmVyVGhyb3dFcnJvcignQ2FsbGVkIGBfdW5zYWZlVW53cmFwRXJyYCBvbiBhbiBPaycsIHRoaXMsIGNvbmZpZyk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXMsIHJlcXVpcmUteWllbGRcclxuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxufVxyXG5jbGFzcyBFcnIge1xyXG4gICAgY29uc3RydWN0b3IoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XHJcbiAgICB9XHJcbiAgICBpc09rKCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlzRXJyKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pc09rKCk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBtYXAoX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgbWFwRXJyKGYpIHtcclxuICAgICAgICByZXR1cm4gZXJyKGYodGhpcy5lcnJvcikpO1xyXG4gICAgfVxyXG4gICAgYW5kVGhyb3VnaChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBhc3luY0FuZFRoZW4oX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyQXN5bmModGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBhc3luY0FuZFRocm91Z2goX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyQXN5bmModGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBhc3luY01hcChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIHVud3JhcE9yKHYpIHtcclxuICAgICAgICByZXR1cm4gdjtcclxuICAgIH1cclxuICAgIG1hdGNoKF9vaywgZXJyKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIHNhZmVVbndyYXAoKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmVycm9yO1xyXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgeWllbGQgZXJyKGVycm9yKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEbyBub3QgdXNlIHRoaXMgZ2VuZXJhdG9yIG91dCBvZiBgc2FmZVRyeWAnKTtcclxuICAgICAgICB9KSgpO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcChjb25maWcpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVOZXZlclRocm93RXJyb3IoJ0NhbGxlZCBgX3Vuc2FmZVVud3JhcGAgb24gYW4gRXJyJywgdGhpcywgY29uZmlnKTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXBFcnIoXykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yO1xyXG4gICAgfVxyXG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgIHlpZWxkIHNlbGY7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgcmV0dXJuIHNlbGY7XHJcbiAgICB9XHJcbn1cclxuY29uc3QgZnJvbVRocm93YWJsZSA9IFJlc3VsdC5mcm9tVGhyb3dhYmxlO1xyXG4vLyNlbmRyZWdpb25cblxuZXhwb3J0IHsgRXJyLCBPaywgUmVzdWx0LCBSZXN1bHRBc3luYywgZXJyLCBlcnJBc3luYywgZnJvbUFzeW5jVGhyb3dhYmxlLCBmcm9tUHJvbWlzZSwgZnJvbVNhZmVQcm9taXNlLCBmcm9tVGhyb3dhYmxlLCBvaywgb2tBc3luYywgc2FmZVRyeSB9O1xuIiwgInR5cGUgSnNvbmFibGUgPVxuICB8IHN0cmluZ1xuICB8IG51bWJlclxuICB8IGJvb2xlYW5cbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkXG4gIHwgcmVhZG9ubHkgSnNvbmFibGVbXVxuICB8IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogSnNvbmFibGUgfVxuICB8IHsgdG9KU09OKCk6IEpzb25hYmxlIH07XG5cbmV4cG9ydCBjbGFzcyBCYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBjb250ZXh0PzogSnNvbmFibGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZT86IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IGNhdXNlPzogRXJyb3I7IGNvbnRleHQ/OiBKc29uYWJsZSB9ID0ge30sXG4gICkge1xuICAgIGNvbnN0IHsgY2F1c2UsIGNvbnRleHQgfSA9IG9wdGlvbnM7XG5cbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBlcnJBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY29ubmVjdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgU2VydmVyRXJyb3IgfSBmcm9tIFwifi9lcnJvci9zZXJ2ZXItZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyQ29uZmlnIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1jb25maWcudHNcIjtcblxuLyoqXG4gKiBFbnN1cmUgYW4gZXJyb3IgbWVzc2FnZSBpcyB0cmFuc2Zvcm1lZCBpbiBhbiBFcnJvciBvYmplY3RcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbnN1cmVFcnJvciA9ICh2YWx1ZTogdW5rbm93bik6IEVycm9yID0+IHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiB2YWx1ZTtcblxuICBsZXQgc3RyaW5naWZpZWQgPSBcIltVbmFibGUgdG8gc3RyaW5naWZ5IHRoZSB0aHJvd24gdmFsdWVdXCI7XG4gIHRyeSB7XG4gICAgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgIC8qIGVtcHR5ICovXG4gIH1cblxuICByZXR1cm4gbmV3IEVycm9yKHN0cmluZ2lmaWVkKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgTHVmaSdzIGNvbmZpZyBmcm9tIGl0cyBBUElcbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2VVcmxcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBmZXRjaFNlcnZlckNvbmZpZyA9IChcbiAgaW5zdGFuY2VVcmw6IFVSTCxcbik6IFJlc3VsdEFzeW5jPFNlcnZlckNvbmZpZywgRXJyb3I+ID0+IHtcbiAgY29uc3Qgb3JpZ2luTWF0Y2hlcyA9IGluc3RhbmNlVXJsLmhyZWYubWF0Y2goXG4gICAgLyguKj8pXFwvPyg/OlxcL1tkcl17MX1cXC98bG9naW5cXC8/fGZpbGVzXFwvPykvLFxuICApO1xuXG4gIGNvbnN0IHVybE9yaWdpbiA9IG9yaWdpbk1hdGNoZXMgJiYgb3JpZ2luTWF0Y2hlc1sxXVxuICAgID8gb3JpZ2luTWF0Y2hlc1sxXVxuICAgIDogaW5zdGFuY2VVcmwub3JpZ2luO1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBmZXRjaCh1cmxPcmlnaW4gKyBcIi9hYm91dC9jb25maWdcIiksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENvbm5lY3Rpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgIH0pLFxuICApLmFuZFRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIHJlc3BvbnNlLmpzb24oKSxcbiAgICAgICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgIG5ldyBTZXJ2ZXJFcnJvcih1bmRlZmluZWQsIHsgY29udGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Rlbm9SdW50aW1lID0gKCk6IGJvb2xlYW4gPT4gdHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCI7XG5cbmV4cG9ydCBjb25zdCBpc1NlY3VyZUNvbnRleHQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKCkgfHwgZ2xvYmFsVGhpcy5pc1NlY3VyZUNvbnRleHQgfHxcbiAgICBnbG9iYWxUaGlzLmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiO1xufTtcblxuZXhwb3J0IGNvbnN0IHdvcmtlclVybCA9IChyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IFVSTCA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKClcbiAgICA/IG5ldyBVUkwoYC4vd29ya2VyLyR7cmVsYXRpdmVQYXRofS50c2AsIG5ldyBVUkwoXCIuXCIsIGltcG9ydC5tZXRhLnVybCkuaHJlZilcbiAgICA6IG5ldyBVUkwoXG4gICAgICBpbXBvcnQubWV0YS5yZXNvbHZlKFxuICAgICAgICBgLi8ke1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCAhPT0gXCJlbmNyeXB0XCIgPyBgd29ya2VyLyR7cmVsYXRpdmVQYXRofWAgOiByZWxhdGl2ZVBhdGhcbiAgICAgICAgfS5qc2AsXG4gICAgICApLFxuICAgICk7XG59O1xuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgV09SS0VSX0FDVElPTiB9IGZyb20gXCJ+L2VudW0vd29ya2VyLWFjdGlvbi50c1wiO1xuaW1wb3J0IHR5cGUgeyBMdWZpRmlsZSB9IGZyb20gXCJ+L2VudGl0aWVzL2x1ZmktZmlsZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJBY3Rpb25NZXNzYWdlIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1hY3Rpb24tbWVzc2FnZS50c1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJFdmVudCB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItZXZlbnQudHNcIjtcblxuZGVjbGFyZSBsZXQgc2VsZjogV29ya2VyO1xuXG5leHBvcnQgY29uc3QgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4vKipcbiAqIFVwZGF0ZSBmaWxlIGluIHdvcmtlcnMgYW5kIHByb3ZpZGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWFpbiB0aHJlYWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBhcmdzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsZSA9IChsdWZpRmlsZTogTHVmaUZpbGUsIGFyZ3M6IFBhcnRpYWw8THVmaUZpbGU+KSA9PiB7XG4gIE9iamVjdC5hc3NpZ24obHVmaUZpbGUsIGFyZ3MpO1xuXG4gIGlmICh0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGV2ZW50OiBFVkVOVC5GSUxFX1VQREFURUQsXG4gICAgICBsdWZpRmlsZSxcbiAgICB9IGFzIFdvcmtlckV2ZW50KTtcbiAgfVxuXG4gIHJldHVybiBsdWZpRmlsZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kRmlsZUVycm9yID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSwgZXJyb3I6IEVycm9yKSA9PiB7XG4gIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgdXBsb2FkU3RhdHVzOiBVUExPQURfU1RBVFVTLkZBSUxFRCB9KTtcblxuICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0gYXMgV29ya2VyRXZlbnQpO1xufTtcblxuLyoqXG4gKiBJbml0IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggY2hpbGQgd29ya2VyJ3Mgb25tZXNzYWdlIGV2ZW50LlxuICovXG5leHBvcnQgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRU5FRCwgKCkgPT4ge1xuICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgZXZlbnQ6IEVWRU5ULlNPQ0tFVF9PUEVORUQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGV2ZW50cy5vbmNlKEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1dvcmtlckFjdGlvbk1lc3NhZ2UgPSAoXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIG1lc3NhZ2U6IGFueSxcbik6IG1lc3NhZ2UgaXMgV29ya2VyQWN0aW9uTWVzc2FnZSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG1lc3NhZ2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICBtZXNzYWdlICE9PSBudWxsICYmXG4gICAgXCJhY3Rpb25cIiBpbiBtZXNzYWdlICYmXG4gICAgT2JqZWN0LnZhbHVlcyhXT1JLRVJfQUNUSU9OKS5pbmNsdWRlcyhtZXNzYWdlLmFjdGlvbilcbiAgKTtcbn07XG4iLCAiaW1wb3J0IHsgQmFzZUVycm9yIH0gZnJvbSBcIn4vZXJyb3IvYmFzZS1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgV29ya2VyRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige31cbiIsICJpbXBvcnQgeyBXb3JrZXJFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dvcmtlci93b3JrZXItZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdvcmtlclJlbW92ZUZhaWxlZEVycm9yIGV4dGVuZHMgV29ya2VyRXJyb3Ige1xuICBvdmVycmlkZSBtZXNzYWdlID0gXCJGYWlsZWQgdG8gcmVtb3ZlIHRoZSBmaWxlXCI7XG59XG4iLCAiaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckFjdGlvbk1lc3NhZ2UgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWFjdGlvbi1tZXNzYWdlLnRzXCI7XG5pbXBvcnQgeyBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckV2ZW50IH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1ldmVudC50c1wiO1xuaW1wb3J0IHsgZW5zdXJlRXJyb3IgfSBmcm9tIFwifi91dGlscy50c1wiO1xuaW1wb3J0IHsgaW5pdCB9IGZyb20gXCJ+L3dvcmtlci9zaGFyZWQudHNcIjtcbmltcG9ydCB7IFdvcmtlclJlbW92ZUZhaWxlZEVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd29ya2VyL3dvcmtlci1yZW1vdmUtZmFpbGVkLWVycm9yLnRzXCI7XG5cbmRlY2xhcmUgY29uc3Qgc2VsZjogV29ya2VyO1xuXG5sZXQgaXNJbml0aWF0ZWQgPSBmYWxzZTtcblxuc2VsZi5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICBpZiAoIWlzSW5pdGlhdGVkKSB7XG4gICAgaW5pdCgpO1xuICAgIGlzSW5pdGlhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHJlbW92ZUZpbGUoZXZlbnQuZGF0YSlcbiAgICAubWFwKCgpID0+IHtcbiAgICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuRklMRV9SRU1PVkVEIH0pO1xuICAgIH0pXG4gICAgLm1hcEVycigoZXJyb3IpID0+IHtcbiAgICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgICBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCxcbiAgICAgICAgZXJyb3IsXG4gICAgICB9IGFzIFdvcmtlckV2ZW50KTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IHJlbW92ZUZpbGUgPSAoXG4gIHdvcmtlck1lc3NhZ2U6IFdvcmtlckFjdGlvbk1lc3NhZ2UsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBFcnJvcj4gPT5cbiAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgbHVmaUZpbGUgPSB3b3JrZXJNZXNzYWdlLmFyZ3MubHVmaUZpbGU7XG5cbiAgICAgIGZldGNoKFxuICAgICAgICBgJHtcbiAgICAgICAgICBuZXcgVVJMKGx1ZmlGaWxlLnNlcnZlclVybCkuaHJlZlxuICAgICAgICB9ZC8ke2x1ZmlGaWxlLmtleXMuc2VydmVyfS8ke2x1ZmlGaWxlLmFjdGlvblRva2VufWAsXG4gICAgICApLnRoZW4oKFxuICAgICAgICByZXNwb25zZSxcbiAgICAgICkgPT4gKHJlc3BvbnNlLm9rID8gcmVzb2x2ZSh1bmRlZmluZWQpIDogcmVqZWN0KFxuICAgICAgICBuZXcgV29ya2VyUmVtb3ZlRmFpbGVkRXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQpLFxuICAgICAgICB9KSxcbiAgICAgICkpKTtcbiAgICB9KSxcbiAgICAoZXJyb3IpID0+IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgKTtcbiJdLAogICJtYXBwaW5ncyI6ICJpcUJBQUEsSUFBQUEsRUFBQUMsR0FBQSxDQUFBQyxHQUFBQyxJQUFBLGNBdUJBLElBQUlDLEVBQUksT0FBTyxTQUFZLFNBQVcsUUFBVSxLQUM1Q0MsRUFBZUQsR0FBSyxPQUFPQSxFQUFFLE9BQVUsV0FDdkNBLEVBQUUsTUFDRixTQUFzQkUsRUFBUUMsRUFBVUMsRUFBTSxDQUM5QyxPQUFPLFNBQVMsVUFBVSxNQUFNLEtBQUtGLEVBQVFDLEVBQVVDLENBQUksQ0FDN0QsRUFFRUMsRUFDQUwsR0FBSyxPQUFPQSxFQUFFLFNBQVksV0FDNUJLLEVBQWlCTCxFQUFFLFFBQ1YsT0FBTyxzQkFDaEJLLEVBQWlCLFNBQXdCSCxFQUFRLENBQy9DLE9BQU8sT0FBTyxvQkFBb0JBLENBQU0sRUFDckMsT0FBTyxPQUFPLHNCQUFzQkEsQ0FBTSxDQUFDLENBQ2hELEVBRUFHLEVBQWlCLFNBQXdCSCxFQUFRLENBQy9DLE9BQU8sT0FBTyxvQkFBb0JBLENBQU0sQ0FDMUMsRUFHRixTQUFTSSxHQUFtQkMsRUFBUyxDQUMvQixTQUFXLFFBQVEsTUFBTSxRQUFRLEtBQUtBLENBQU8sQ0FDbkQsQ0FFQSxJQUFJQyxFQUFjLE9BQU8sT0FBUyxTQUFxQkMsRUFBTyxDQUM1RCxPQUFPQSxJQUFVQSxDQUNuQixFQUVBLFNBQVNDLEdBQWUsQ0FDdEJBLEVBQWEsS0FBSyxLQUFLLElBQUksQ0FDN0IsQ0FDQVgsRUFBTyxRQUFVVyxFQUNqQlgsRUFBTyxRQUFRLEtBQU9ZLEdBR3RCRCxFQUFhLGFBQWVBLEVBRTVCQSxFQUFhLFVBQVUsUUFBVSxPQUNqQ0EsRUFBYSxVQUFVLGFBQWUsRUFDdENBLEVBQWEsVUFBVSxjQUFnQixP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VCxLQUFLLFlBQVksQ0FBRSxvQkFBMEIsQ0FBQyxDQUNoRCxDQUFDLEVBQ0EsT0FBUUcsR0FBVSxDQUNqQixLQUFLLFlBQVksQ0FDZix5QkFDQSxNQUFBQSxDQUNGLENBQWdCLENBQ2xCLENBQUMsQ0FDTCxFQUVBLElBQU1ELEdBQ0pFLEdBRUFDLEVBQVksWUFDVixJQUFJLFFBQVEsQ0FBQ0MsRUFBU0MsSUFBVyxDQUMvQixJQUFNQyxFQUFXSixFQUFjLEtBQUssU0FFcEMsTUFDRSxHQUNFLElBQUksSUFBSUksRUFBUyxTQUFTLEVBQUUsSUFDOUIsS0FBS0EsRUFBUyxLQUFLLE1BQU0sSUFBSUEsRUFBUyxXQUFXLEVBQ25ELEVBQUUsS0FDQUMsR0FDSUEsRUFBUyxHQUFLSCxFQUFRLE1BQVMsRUFBSUMsRUFDdkMsSUFBSUcsRUFBd0IsT0FBVyxDQUNyQyxNQUFPQyxFQUFZRixFQUFTLFVBQVUsQ0FDeEMsQ0FBQyxDQUNILENBQUUsQ0FDSixDQUFDLEVBQ0FOLEdBQVVRLEVBQVlSLENBQUssQ0FDOUIiLAogICJuYW1lcyI6IFsicmVxdWlyZV9ldmVudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSIiwgIlJlZmxlY3RBcHBseSIsICJ0YXJnZXQiLCAicmVjZWl2ZXIiLCAiYXJncyIsICJSZWZsZWN0T3duS2V5cyIsICJQcm9jZXNzRW1pdFdhcm5pbmciLCAid2FybmluZyIsICJOdW1iZXJJc05hTiIsICJ2YWx1ZSIsICJFdmVudEVtaXR0ZXIiLCAib25jZSIsICJkZWZhdWx0TWF4TGlzdGVuZXJzIiwgImNoZWNrTGlzdGVuZXIiLCAibGlzdGVuZXIiLCAiYXJnIiwgIm4iLCAiX2dldE1heExpc3RlbmVycyIsICJ0aGF0IiwgInR5cGUiLCAiaSIsICJkb0Vycm9yIiwgImV2ZW50cyIsICJlciIsICJlcnIiLCAiaGFuZGxlciIsICJsZW4iLCAibGlzdGVuZXJzIiwgImFycmF5Q2xvbmUiLCAiX2FkZExpc3RlbmVyIiwgInByZXBlbmQiLCAibSIsICJleGlzdGluZyIsICJ3IiwgIm9uY2VXcmFwcGVyIiwgIl9vbmNlV3JhcCIsICJzdGF0ZSIsICJ3cmFwcGVkIiwgImxpc3QiLCAicG9zaXRpb24iLCAib3JpZ2luYWxMaXN0ZW5lciIsICJzcGxpY2VPbmUiLCAia2V5cyIsICJrZXkiLCAiX2xpc3RlbmVycyIsICJ1bndyYXAiLCAiZXZsaXN0ZW5lciIsICJ1bndyYXBMaXN0ZW5lcnMiLCAiZW1pdHRlciIsICJsaXN0ZW5lckNvdW50IiwgImFyciIsICJjb3B5IiwgImluZGV4IiwgInJldCIsICJuYW1lIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVycm9yTGlzdGVuZXIiLCAicmVzb2x2ZXIiLCAiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwgImFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyIiwgImZsYWdzIiwgIndyYXBMaXN0ZW5lciIsICJkZWZhdWx0RXJyb3JDb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIm1lc3NhZ2UiLCAicmVzdWx0IiwgImNvbmZpZyIsICJkYXRhIiwgIm1heWJlU3RhY2siLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19hd2FpdCIsICJ2IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiZyIsICJxIiwgInZlcmIiLCAiYXdhaXRSZXR1cm4iLCAibiIsICJmIiwgImEiLCAiYiIsICJyZXN1bWUiLCAic2V0dGxlIiwgInIiLCAiZnVsZmlsbCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgInAiLCAiX19hc3luY1ZhbHVlcyIsICJkIiwgIlJlc3VsdEFzeW5jIiwgIl9SZXN1bHRBc3luYyIsICJyZXMiLCAicHJvbWlzZSIsICJuZXdQcm9taXNlIiwgInZhbHVlIiwgIk9rIiwgImVycm9yRm4iLCAiZSIsICJFcnIiLCAiZm4iLCAiYXJncyIsICJfX2F3YWl0ZXIiLCAiZXJyb3IiLCAiYXN5bmNSZXN1bHRMaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3QiLCAiY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMiLCAiZiIsICJuZXdSZXMiLCAibmV3VmFsdWUiLCAib2siLCAiX2VyciIsICJ0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiX19hd2FpdCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgIl9fYXN5bmNWYWx1ZXMiLCAic3VjY2Vzc0NhbGxiYWNrIiwgImZhaWx1cmVDYWxsYmFjayIsICJyZXN1bHQiLCAiZXJyQXN5bmMiLCAiZXJyQXN5bmMiLCAiZXJyIiwgIlJlc3VsdEFzeW5jIiwgIkVyciIsICJmcm9tUHJvbWlzZSIsICJmcm9tU2FmZVByb21pc2UiLCAiZnJvbUFzeW5jVGhyb3dhYmxlIiwgImNvbWJpbmVSZXN1bHRMaXN0IiwgInJlc3VsdExpc3QiLCAiYWNjIiwgIm9rIiwgInJlc3VsdCIsICJsaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3QiLCAiYXN5bmNSZXN1bHRMaXN0IiwgImNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyIsICJjb21iaW5lUmVzdWx0QXN5bmNMaXN0V2l0aEFsbEVycm9ycyIsICJSZXN1bHQiLCAiZnJvbVRocm93YWJsZSIsICJmbiIsICJlcnJvckZuIiwgImFyZ3MiLCAiZSIsICJjb21iaW5lIiwgImNvbWJpbmVXaXRoQWxsRXJyb3JzIiwgInZhbHVlIiwgIk9rIiwgIk9rIiwgInZhbHVlIiwgImYiLCAib2siLCAiX2YiLCAiX3ZhbHVlIiwgIlJlc3VsdEFzeW5jIiwgIl92IiwgIl9lcnIiLCAiXyIsICJjb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIkVyciIsICJlcnJvciIsICJlcnIiLCAiZXJyQXN5bmMiLCAidiIsICJfb2siLCAic2VsZiIsICJmcm9tVGhyb3dhYmxlIiwgIlJlc3VsdCIsICJCYXNlRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgImNhdXNlIiwgImNvbnRleHQiLCAiX19wdWJsaWNGaWVsZCIsICJlbnN1cmVFcnJvciIsICJ2YWx1ZSIsICJzdHJpbmdpZmllZCIsICJpbXBvcnRfZXZlbnRzIiwgImV2ZW50cyIsICJFdmVudEVtaXR0ZXIiLCAiaW5pdCIsICJldmVudHMiLCAiZXJyb3IiLCAiV29ya2VyRXJyb3IiLCAiQmFzZUVycm9yIiwgIldvcmtlclJlbW92ZUZhaWxlZEVycm9yIiwgIldvcmtlckVycm9yIiwgIl9fcHVibGljRmllbGQiLCAiaXNJbml0aWF0ZWQiLCAiZXZlbnQiLCAiaW5pdCIsICJyZW1vdmVGaWxlIiwgImVycm9yIiwgIndvcmtlck1lc3NhZ2UiLCAiUmVzdWx0QXN5bmMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAibHVmaUZpbGUiLCAicmVzcG9uc2UiLCAiV29ya2VyUmVtb3ZlRmFpbGVkRXJyb3IiLCAiZW5zdXJlRXJyb3IiXQp9Cg== diff --git a/themes/default/public/js/worker/shared.js b/themes/default/public/js/worker/shared.js index 3a49269..f3e96bd 100644 --- a/themes/default/public/js/worker/shared.js +++ b/themes/default/public/js/worker/shared.js @@ -1 +1,2 @@ -var M=Object.create;var d=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var W=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var K=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of x(t))!j.call(e,i)&&i!==n&&d(e,i,{get:()=>t[i],enumerable:!(r=F(t,i))||r.enumerable});return e};var k=(e,t,n)=>(n=e!=null?M(N(e)):{},K(t||!e||!e.__esModule?d(n,"default",{value:e,enumerable:!0}):n,e));var C=W((Z,v)=>{"use strict";var a=typeof Reflect=="object"?Reflect:null,h=a&&typeof a.apply=="function"?a.apply:function(t,n,r){return Function.prototype.apply.call(t,n,r)},l;a&&typeof a.ownKeys=="function"?l=a.ownKeys:Object.getOwnPropertySymbols?l=function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:l=function(t){return Object.getOwnPropertyNames(t)};function S(e){console&&console.warn&&console.warn(e)}var _=Number.isNaN||function(t){return t!==t};function s(){s.init.call(this)}v.exports=s;v.exports.once=B;s.EventEmitter=s;s.prototype._events=void 0;s.prototype._eventsCount=0;s.prototype._maxListeners=void 0;var O=10;function p(e){if(typeof e!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return O},set:function(e){if(typeof e!="number"||e<0||_(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");O=e}});s.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};s.prototype.setMaxListeners=function(t){if(typeof t!="number"||t<0||_(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this};function m(e){return e._maxListeners===void 0?s.defaultMaxListeners:e._maxListeners}s.prototype.getMaxListeners=function(){return m(this)};s.prototype.emit=function(t){for(var n=[],r=1;r0&&(o=n[0]),o instanceof Error)throw o;var u=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw u.context=o,u}var c=f[t];if(c===void 0)return!1;if(typeof c=="function")h(c,this,n);else for(var E=c.length,P=I(c,E),r=0;r0&&o.length>i&&!o.warned){o.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=e,u.type=t,u.count=o.length,S(u)}return e}s.prototype.addListener=function(t,n){return D(this,t,n,!1)};s.prototype.on=s.prototype.addListener;s.prototype.prependListener=function(t,n){return D(this,t,n,!0)};function T(){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 y(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=T.bind(r);return i.listener=n,r.wrapFn=i,i}s.prototype.once=function(t,n){return p(n),this.on(t,y(this,t,n)),this};s.prototype.prependOnceListener=function(t,n){return p(n),this.prependListener(t,y(this,t,n)),this};s.prototype.removeListener=function(t,n){var r,i,f,o,u;if(p(n),i=this._events,i===void 0)return this;if(r=i[t],r===void 0)return this;if(r===n||r.listener===n)--this._eventsCount===0?this._events=Object.create(null):(delete i[t],i.removeListener&&this.emit("removeListener",t,r.listener||n));else if(typeof r!="function"){for(f=-1,o=r.length-1;o>=0;o--)if(r[o]===n||r[o].listener===n){u=r[o].listener,f=o;break}if(f<0)return this;f===0?r.shift():H(r,f),r.length===1&&(i[t]=r[0]),i.removeListener!==void 0&&this.emit("removeListener",t,u||n)}return this};s.prototype.off=s.prototype.removeListener;s.prototype.removeAllListeners=function(t){var n,r,i;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[t]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[t]),this;if(arguments.length===0){var f=Object.keys(r),o;for(i=0;i=0;i--)this.removeListener(t,n[i]);return this};function A(e,t,n){var r=e._events;if(r===void 0)return[];var i=r[t];return i===void 0?[]:typeof i=="function"?n?[i.listener||i]:[i]:n?U(i):I(i,i.length)}s.prototype.listeners=function(t){return A(this,t,!0)};s.prototype.rawListeners=function(t){return A(this,t,!1)};s.listenerCount=function(e,t){return typeof e.listenerCount=="function"?e.listenerCount(t):g.call(e,t)};s.prototype.listenerCount=g;function g(e){var t=this._events;if(t!==void 0){var n=t[e];if(typeof n=="function")return 1;if(n!==void 0)return n.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?l(this._events):[]};function I(e,t){for(var n=new Array(t),r=0;r(r[r.PAUSE=0]="PAUSE",r[r.PROVIDE_FILE=1]="PROVIDE_FILE",r[r.RESUME=2]="RESUME",r))(L||{});var w=new b.default,G=(e,t)=>(Object.assign(e,t),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:e}),e),ne=(e,t)=>{G(e,{uploadStatus:2}),self.postMessage({event:"OPERATION_FAILED",error:t})},re=()=>{w.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),w.once("OPERATION_FAILED",e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})},ie=e=>typeof e=="object"&&e!==null&&"action"in e&&Object.values(L).includes(e.action);export{w as events,re as init,ie as isWorkerActionMessage,ne as sendFileError,G as updateFile}; +var M=Object.create;var d=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var S=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var W=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of x(t))!j.call(e,i)&&i!==n&&d(e,i,{get:()=>t[i],enumerable:!(r=F(t,i))||r.enumerable});return e};var H=(e,t,n)=>(n=e!=null?M(N(e)):{},W(t||!e||!e.__esModule?d(n,"default",{value:e,enumerable:!0}):n,e));var C=S((Z,v)=>{"use strict";var a=typeof Reflect=="object"?Reflect:null,h=a&&typeof a.apply=="function"?a.apply:function(t,n,r){return Function.prototype.apply.call(t,n,r)},l;a&&typeof a.ownKeys=="function"?l=a.ownKeys:Object.getOwnPropertySymbols?l=function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:l=function(t){return Object.getOwnPropertyNames(t)};function K(e){console&&console.warn&&console.warn(e)}var O=Number.isNaN||function(t){return t!==t};function s(){s.init.call(this)}v.exports=s;v.exports.once=B;s.EventEmitter=s;s.prototype._events=void 0;s.prototype._eventsCount=0;s.prototype._maxListeners=void 0;var _=10;function p(e){if(typeof e!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return _},set:function(e){if(typeof e!="number"||e<0||O(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");_=e}});s.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};s.prototype.setMaxListeners=function(t){if(typeof t!="number"||t<0||O(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this};function D(e){return e._maxListeners===void 0?s.defaultMaxListeners:e._maxListeners}s.prototype.getMaxListeners=function(){return D(this)};s.prototype.emit=function(t){for(var n=[],r=1;r0&&(o=n[0]),o instanceof Error)throw o;var u=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw u.context=o,u}var c=f[t];if(c===void 0)return!1;if(typeof c=="function")h(c,this,n);else for(var L=c.length,b=R(c,L),r=0;r0&&o.length>i&&!o.warned){o.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=e,u.type=t,u.count=o.length,K(u)}return e}s.prototype.addListener=function(t,n){return m(this,t,n,!1)};s.prototype.on=s.prototype.addListener;s.prototype.prependListener=function(t,n){return m(this,t,n,!0)};function k(){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 y(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=k.bind(r);return i.listener=n,r.wrapFn=i,i}s.prototype.once=function(t,n){return p(n),this.on(t,y(this,t,n)),this};s.prototype.prependOnceListener=function(t,n){return p(n),this.prependListener(t,y(this,t,n)),this};s.prototype.removeListener=function(t,n){var r,i,f,o,u;if(p(n),i=this._events,i===void 0)return this;if(r=i[t],r===void 0)return this;if(r===n||r.listener===n)--this._eventsCount===0?this._events=Object.create(null):(delete i[t],i.removeListener&&this.emit("removeListener",t,r.listener||n));else if(typeof r!="function"){for(f=-1,o=r.length-1;o>=0;o--)if(r[o]===n||r[o].listener===n){u=r[o].listener,f=o;break}if(f<0)return this;f===0?r.shift():T(r,f),r.length===1&&(i[t]=r[0]),i.removeListener!==void 0&&this.emit("removeListener",t,u||n)}return this};s.prototype.off=s.prototype.removeListener;s.prototype.removeAllListeners=function(t){var n,r,i;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[t]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[t]),this;if(arguments.length===0){var f=Object.keys(r),o;for(i=0;i=0;i--)this.removeListener(t,n[i]);return this};function A(e,t,n){var r=e._events;if(r===void 0)return[];var i=r[t];return i===void 0?[]:typeof i=="function"?n?[i.listener||i]:[i]:n?U(i):R(i,i.length)}s.prototype.listeners=function(t){return A(this,t,!0)};s.prototype.rawListeners=function(t){return A(this,t,!1)};s.listenerCount=function(e,t){return typeof e.listenerCount=="function"?e.listenerCount(t):I.call(e,t)};s.prototype.listenerCount=I;function I(e){var t=this._events;if(t!==void 0){var n=t[e];if(typeof n=="function")return 1;if(n!==void 0)return n.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?l(this._events):[]};function R(e,t){for(var n=new Array(t),r=0;r(r[r.PAUSE=0]="PAUSE",r[r.PROVIDE_FILE=1]="PROVIDE_FILE",r[r.RESUME=2]="RESUME",r))(E||{});var w=new P.default,G=(e,t)=>(Object.assign(e,t),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:e}),e),ne=(e,t)=>{G(e,{uploadStatus:2}),self.postMessage({event:"OPERATION_FAILED",error:t})},re=()=>{w.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),w.once("OPERATION_FAILED",e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})},ie=e=>typeof e=="object"&&e!==null&&"action"in e&&Object.values(E).includes(e.action);export{w as events,re as init,ie as isWorkerActionMessage,ne as sendFileError,G as updateFile}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9zcmMvd29ya2VyL3NoYXJlZC50cyIsICIuLi8uLi9zcmMvZW51bS93b3JrZXItYWN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgV09SS0VSX0FDVElPTiB9IGZyb20gXCJ+L2VudW0vd29ya2VyLWFjdGlvbi50c1wiO1xuaW1wb3J0IHR5cGUgeyBMdWZpRmlsZSB9IGZyb20gXCJ+L2VudGl0aWVzL2x1ZmktZmlsZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJBY3Rpb25NZXNzYWdlIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1hY3Rpb24tbWVzc2FnZS50c1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJFdmVudCB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItZXZlbnQudHNcIjtcblxuZGVjbGFyZSBsZXQgc2VsZjogV29ya2VyO1xuXG5leHBvcnQgY29uc3QgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4vKipcbiAqIFVwZGF0ZSBmaWxlIGluIHdvcmtlcnMgYW5kIHByb3ZpZGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWFpbiB0aHJlYWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBhcmdzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsZSA9IChsdWZpRmlsZTogTHVmaUZpbGUsIGFyZ3M6IFBhcnRpYWw8THVmaUZpbGU+KSA9PiB7XG4gIE9iamVjdC5hc3NpZ24obHVmaUZpbGUsIGFyZ3MpO1xuXG4gIGlmICh0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGV2ZW50OiBFVkVOVC5GSUxFX1VQREFURUQsXG4gICAgICBsdWZpRmlsZSxcbiAgICB9IGFzIFdvcmtlckV2ZW50KTtcbiAgfVxuXG4gIHJldHVybiBsdWZpRmlsZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kRmlsZUVycm9yID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSwgZXJyb3I6IEVycm9yKSA9PiB7XG4gIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgdXBsb2FkU3RhdHVzOiBVUExPQURfU1RBVFVTLkZBSUxFRCB9KTtcblxuICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0gYXMgV29ya2VyRXZlbnQpO1xufTtcblxuLyoqXG4gKiBJbml0IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggY2hpbGQgd29ya2VyJ3Mgb25tZXNzYWdlIGV2ZW50LlxuICovXG5leHBvcnQgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRU5FRCwgKCkgPT4ge1xuICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgZXZlbnQ6IEVWRU5ULlNPQ0tFVF9PUEVORUQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGV2ZW50cy5vbmNlKEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1dvcmtlckFjdGlvbk1lc3NhZ2UgPSAoXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIG1lc3NhZ2U6IGFueSxcbik6IG1lc3NhZ2UgaXMgV29ya2VyQWN0aW9uTWVzc2FnZSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG1lc3NhZ2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICBtZXNzYWdlICE9PSBudWxsICYmXG4gICAgXCJhY3Rpb25cIiBpbiBtZXNzYWdlICYmXG4gICAgT2JqZWN0LnZhbHVlcyhXT1JLRVJfQUNUSU9OKS5pbmNsdWRlcyhtZXNzYWdlLmFjdGlvbilcbiAgKTtcbn07XG4iLCAiZXhwb3J0IGVudW0gV09SS0VSX0FDVElPTiB7XG4gIFBBVVNFLFxuICBQUk9WSURFX0ZJTEUsXG4gIFJFU1VNRSxcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJ5Z0JBQUEsSUFBQUEsRUFBQUMsRUFBQSxDQUFBQyxFQUFBQyxJQUFBLGNBdUJBLElBQUlDLEVBQUksT0FBTyxTQUFZLFNBQVcsUUFBVSxLQUM1Q0MsRUFBZUQsR0FBSyxPQUFPQSxFQUFFLE9BQVUsV0FDdkNBLEVBQUUsTUFDRixTQUFzQkUsRUFBUUMsRUFBVUMsRUFBTSxDQUM5QyxPQUFPLFNBQVMsVUFBVSxNQUFNLEtBQUtGLEVBQVFDLEVBQVVDLENBQUksQ0FDN0QsRUFFRUMsRUFDQUwsR0FBSyxPQUFPQSxFQUFFLFNBQVksV0FDNUJLLEVBQWlCTCxFQUFFLFFBQ1YsT0FBTyxzQkFDaEJLLEVBQWlCLFNBQXdCSCxFQUFRLENBQy9DLE9BQU8sT0FBTyxvQkFBb0JBLENBQU0sRUFDckMsT0FBTyxPQUFPLHNCQUFzQkEsQ0FBTSxDQUFDLENBQ2hELEVBRUFHLEVBQWlCLFNBQXdCSCxFQUFRLENBQy9DLE9BQU8sT0FBTyxvQkFBb0JBLENBQU0sQ0FDMUMsRUFHRixTQUFTSSxFQUFtQkMsRUFBUyxDQUMvQixTQUFXLFFBQVEsTUFBTSxRQUFR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Q0FDZixxQkFDQSxTQUFBRCxDQUNGLENBQWdCLEVBR1hBLEdBR0lFLEdBQWdCLENBQUNGLEVBQW9CRyxJQUFpQixDQUNqRUosRUFBV0MsRUFBVSxDQUFFLGNBQW1DLENBQUMsRUFFM0QsS0FBSyxZQUFZLENBQUUseUJBQStCLE1BQUFHLENBQU0sQ0FBZ0IsQ0FDMUUsRUFLYUMsR0FBTyxJQUFNLENBQ3hCUCxFQUFPLHFCQUEwQixJQUFNLENBQ3JDLEtBQUssWUFBWSxDQUNmLHFCQUNGLENBQUMsQ0FDSCxDQUFDLEVBRURBLEVBQU8sd0JBQThCTSxHQUFpQixDQUNwRCxLQUFLLFlBQVksQ0FBRSx5QkFBK0IsTUFBQUEsQ0FBTSxDQUFDLENBQzNELENBQUMsQ0FDSCxFQUVhRSxHQUVYQyxHQUdFLE9BQU9BLEdBQVksVUFDbkJBLElBQVksTUFDWixXQUFZQSxHQUNaLE9BQU8sT0FBT0MsQ0FBYSxFQUFFLFNBQVNELEVBQVEsTUFBTSIsCiAgIm5hbWVzIjogWyJyZXF1aXJlX2V2ZW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlIiLCAiUmVmbGVjdEFwcGx5IiwgInRhcmdldCIsICJyZWNlaXZlciIsICJhcmdzIiwgIlJlZmxlY3RPd25LZXlzIiwgIlByb2Nlc3NFbWl0V2FybmluZyIsICJ3YXJuaW5nIiwgIk51bWJlcklzTmFOIiwgInZhbHVlIiwgIkV2ZW50RW1pdHRlciIsICJvbmNlIiwgImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCAiY2hlY2tMaXN0ZW5lciIsICJsaXN0ZW5lciIsICJhcmciLCAibiIsICJfZ2V0TWF4TGlzdGVuZXJzIiwgInRoYXQiLCAidHlwZSIsICJpIiwgImRvRXJyb3IiLCAiZXZlbnRzIiwgImVyIiwgImVyciIsICJoYW5kbGVyIiwgImxlbiIsICJsaXN0ZW5lcnMiLCAiYXJyYXlDbG9uZSIsICJfYWRkTGlzdGVuZXIiLCAicHJlcGVuZCIsICJtIiwgImV4aXN0aW5nIiwgInciLCAib25jZVdyYXBwZXIiLCAiX29uY2VXcmFwIiwgInN0YXRlIiwgIndyYXBwZWQiLCAibGlzdCIsICJwb3NpdGlvbiIsICJvcmlnaW5hbExpc3RlbmVyIiwgInNwbGljZU9uZSIsICJrZXlzIiwgImtleSIsICJfbGlzdGVuZXJzIiwgInVud3JhcCIsICJldmxpc3RlbmVyIiwgInVud3JhcExpc3RlbmVycyIsICJlbWl0dGVyIiwgImxpc3RlbmVyQ291bnQiLCAiYXJyIiwgImNvcHkiLCAiaW5kZXgiLCAicmV0IiwgIm5hbWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZXJyb3JMaXN0ZW5lciIsICJyZXNvbHZlciIsICJldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIiLCAiYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIiLCAiZmxhZ3MiLCAid3JhcExpc3RlbmVyIiwgImltcG9ydF9ldmVudHMiLCAiV09SS0VSX0FDVElPTiIsICJldmVudHMiLCAiRXZlbnRFbWl0dGVyIiwgInVwZGF0ZUZpbGUiLCAibHVmaUZpbGUiLCAiYXJncyIsICJzZW5kRmlsZUVycm9yIiwgImVycm9yIiwgImluaXQiLCAiaXNXb3JrZXJBY3Rpb25NZXNzYWdlIiwgIm1lc3NhZ2UiLCAiV09SS0VSX0FDVElPTiJdCn0K diff --git a/themes/default/public/js/worker/upload.js b/themes/default/public/js/worker/upload.js index bb1cc07..afd0d08 100644 --- a/themes/default/public/js/worker/upload.js +++ b/themes/default/public/js/worker/upload.js @@ -1 +1,2 @@ -var Nr=Object.create;var ht=Object.defineProperty;var Fr=Object.getOwnPropertyDescriptor;var Br=Object.getOwnPropertyNames;var Wr=Object.getPrototypeOf,jr=Object.prototype.hasOwnProperty;var Nt=e=>{throw TypeError(e)};var zr=(e,t,r)=>t in e?ht(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var Jr=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var pt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Hr=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Br(t))!jr.call(e,i)&&i!==r&&ht(e,i,{get:()=>t[i],enumerable:!(n=Fr(t,i))||n.enumerable});return e};var be=(e,t,r)=>(r=e!=null?Nr(Wr(e)):{},Hr(t||!e||!e.__esModule?ht(r,"default",{value:e,enumerable:!0}):r,e));var w=(e,t,r)=>zr(e,typeof t!="symbol"?t+"":t,r),dt=(e,t,r)=>t.has(e)||Nt("Cannot "+r);var p=(e,t,r)=>(dt(e,t,"read from private field"),r?r.call(e):t.get(e)),x=(e,t,r)=>t.has(e)?Nt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),E=(e,t,r,n)=>(dt(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r),D=(e,t,r)=>(dt(e,t,"access private method"),r);var Ge=(e,t,r,n)=>({set _(i){E(e,t,i,r)},get _(){return p(e,t,n)}});var Ve=pt((ni,vt)=>{"use strict";var se=typeof Reflect=="object"?Reflect:null,Jt=se&&typeof se.apply=="function"?se.apply:function(t,r,n){return Function.prototype.apply.call(t,r,n)},Ke;se&&typeof se.ownKeys=="function"?Ke=se.ownKeys:Object.getOwnPropertySymbols?Ke=function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:Ke=function(t){return Object.getOwnPropertyNames(t)};function Qr(e){console&&console.warn&&console.warn(e)}var $t=Number.isNaN||function(t){return t!==t};function g(){g.init.call(this)}vt.exports=g;vt.exports.once=tn;g.EventEmitter=g;g.prototype._events=void 0;g.prototype._eventsCount=0;g.prototype._maxListeners=void 0;var Ht=10;function Xe(e){if(typeof e!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}Object.defineProperty(g,"defaultMaxListeners",{enumerable:!0,get:function(){return Ht},set:function(e){if(typeof e!="number"||e<0||$t(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");Ht=e}});g.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};g.prototype.setMaxListeners=function(t){if(typeof t!="number"||t<0||$t(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this};function qt(e){return e._maxListeners===void 0?g.defaultMaxListeners:e._maxListeners}g.prototype.getMaxListeners=function(){return qt(this)};g.prototype.emit=function(t){for(var r=[],n=1;n0&&(s=r[0]),s instanceof Error)throw s;var c=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw c.context=s,c}var u=o[t];if(u===void 0)return!1;if(typeof u=="function")Jt(u,this,r);else for(var f=u.length,l=Qt(u,f),n=0;n0&&s.length>i&&!s.warned){s.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=s.length,Qr(c)}return e}g.prototype.addListener=function(t,r){return Gt(this,t,r,!1)};g.prototype.on=g.prototype.addListener;g.prototype.prependListener=function(t,r){return Gt(this,t,r,!0)};function Yr(){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 Kt(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=Yr.bind(n);return i.listener=r,n.wrapFn=i,i}g.prototype.once=function(t,r){return Xe(r),this.on(t,Kt(this,t,r)),this};g.prototype.prependOnceListener=function(t,r){return Xe(r),this.prependListener(t,Kt(this,t,r)),this};g.prototype.removeListener=function(t,r){var n,i,o,s,c;if(Xe(r),i=this._events,i===void 0)return this;if(n=i[t],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete i[t],i.removeListener&&this.emit("removeListener",t,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){c=n[s].listener,o=s;break}if(o<0)return this;o===0?n.shift():Zr(n,o),n.length===1&&(i[t]=n[0]),i.removeListener!==void 0&&this.emit("removeListener",t,c||r)}return this};g.prototype.off=g.prototype.removeListener;g.prototype.removeAllListeners=function(t){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[t]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[t]),this;if(arguments.length===0){var o=Object.keys(n),s;for(i=0;i=0;i--)this.removeListener(t,r[i]);return this};function Xt(e,t,r){var n=e._events;if(n===void 0)return[];var i=n[t];return i===void 0?[]:typeof i=="function"?r?[i.listener||i]:[i]:r?en(i):Qt(i,i.length)}g.prototype.listeners=function(t){return Xt(this,t,!0)};g.prototype.rawListeners=function(t){return Xt(this,t,!1)};g.listenerCount=function(e,t){return typeof e.listenerCount=="function"?e.listenerCount(t):Vt.call(e,t)};g.prototype.listenerCount=Vt;function Vt(e){var t=this._events;if(t!==void 0){var r=t[e];if(typeof r=="function")return 1;if(r!==void 0)return r.length}return 0}g.prototype.eventNames=function(){return this._eventsCount>0?Ke(this._events):[]};function Qt(e,t){for(var r=new Array(t),n=0;n{"use strict";var a={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(e){this.toString=function(){return"CORRUPT: "+this.message},this.message=e},invalid:function(e){this.toString=function(){return"INVALID: "+this.message},this.message=e},bug:function(e){this.toString=function(){return"BUG: "+this.message},this.message=e},notReady:function(e){this.toString=function(){return"NOT READY: "+this.message},this.message=e}}};a.cipher.aes=function(e){this.w[0][0][0]||this.C();var t,r,n,i,o=this.w[0][4],s=this.w[1];t=e.length;var c=1;if(t!==4&&t!==6&&t!==8)throw new a.exception.invalid("invalid aes key size");for(this.b=[n=e.slice(0),i=[]],e=t;e<4*t+28;e++)r=n[e-1],(e%t===0||t===8&&e%t===4)&&(r=o[r>>>24]<<24^o[r>>16&255]<<16^o[r>>8&255]<<8^o[r&255],e%t===0&&(r=r<<8^r>>>24^c<<24,c=c<<1^283*(c>>7))),n[e]=n[e-t]^r;for(t=0;e;t++,e--)r=n[t&3?e:e-4],i[t]=4>=e||4>t?r:s[0][o[r>>>24]]^s[1][o[r>>16&255]]^s[2][o[r>>8&255]]^s[3][o[r&255]]};a.cipher.aes.prototype={encrypt:function(e){return nr(this,e,0)},decrypt:function(e){return nr(this,e,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var e=this.w[0],t=this.w[1],r=e[4],n=t[4],i,o,s,c=[],u=[],f,l,h,m;for(i=0;256>i;i++)u[(c[i]=i<<1^283*(i>>7))^i]=i;for(o=s=0;!r[o];o^=f||1,s=u[s]||1)for(h=s^s<<1^s<<2^s<<3^s<<4,h=h>>8^h&255^99,r[o]=h,n[h]=o,l=c[i=c[f=c[o]]],m=16843009*l^65537*i^257*f^16843008*o,l=257*c[h]^16843008*h,i=0;4>i;i++)e[i][o]=l=l<<24^l>>>8,t[i][h]=m=m<<24^m>>>8;for(i=0;5>i;i++)e[i]=e[i].slice(0),t[i]=t[i].slice(0)}};function nr(e,t,r){if(t.length!==4)throw new a.exception.invalid("invalid aes block size");var n=e.b[r],i=t[0]^n[0],o=t[r?3:1]^n[1],s=t[2]^n[2];t=t[r?1:3]^n[3];var c,u,f,l=n.length/4-2,h,m=4,d=[0,0,0,0];c=e.w[r],e=c[0];var O=c[1],N=c[2],z=c[3],Q=c[4];for(h=0;h>>24]^O[o>>16&255]^N[s>>8&255]^z[t&255]^n[m],u=e[o>>>24]^O[s>>16&255]^N[t>>8&255]^z[i&255]^n[m+1],f=e[s>>>24]^O[t>>16&255]^N[i>>8&255]^z[o&255]^n[m+2],t=e[t>>>24]^O[i>>16&255]^N[o>>8&255]^z[s&255]^n[m+3],m+=4,i=c,o=u,s=f;for(h=0;4>h;h++)d[r?3&-h:h]=Q[i>>>24]<<24^Q[o>>16&255]<<16^Q[s>>8&255]<<8^Q[t&255]^n[m++],c=i,i=o,o=s,s=t,t=c;return d}a.bitArray={bitSlice:function(e,t,r){return e=a.bitArray.Y(e.slice(t/32),32-(t&31)).slice(1),r===void 0?e:a.bitArray.clamp(e,r-t)},extract:function(e,t,r){var n=Math.floor(-t-r&31);return((t+r-1^t)&-32?e[t/32|0]<<32-n^e[t/32+1|0]>>>n:e[t/32|0]>>>n)&(1<>t-1,1)),e},partial:function(e,t,r){return e===32?t:(r?t|0:t<<32-e)+1099511627776*e},getPartial:function(e){return Math.round(e/1099511627776)||32},equal:function(e,t){if(a.bitArray.bitLength(e)!==a.bitArray.bitLength(t))return!1;var r=0,n;for(n=0;n>>t),r=e[i]<<32-t;return i=e.length?e[e.length-1]:0,e=a.bitArray.getPartial(i),n.push(a.bitArray.partial(t+e&31,32>>24|r>>>8&65280|(r&65280)<<8|r<<24;return e}};a.codec.utf8String={fromBits:function(e){var t="",r=a.bitArray.bitLength(e),n,i;for(n=0;n>>8>>>8>>>8),i<<=8;return decodeURIComponent(escape(t))},toBits:function(e){e=unescape(encodeURIComponent(e));var t=[],r,n=0;for(r=0;r>>i)>>>26),6>i?(s=e[r]<<6-i,i+=26,r++):(s<<=6,i-=6);for(;n.length&3&&!t;)n+="=";return n},toBits:function(e,t){e=e.replace(/\s|=/g,"");var r=[],n,i=0,o=a.codec.base64.S,s=0,c;for(t&&(o=o.substr(0,62)+"-_"),n=0;nc)throw new a.exception.invalid("this isn't base64!");26>>i),s=c<<32-i):(i+=6,s^=c<<32-i)}return i&56&&r.push(a.bitArray.partial(i&56,s,1)),r}};a.codec.base64url={fromBits:function(e){return a.codec.base64.fromBits(e,1,1)},toBits:function(e){return a.codec.base64.toBits(e,1)}};a.hash.sha256=function(e){this.b[0]||this.C(),e?(this.g=e.g.slice(0),this.f=e.f.slice(0),this.c=e.c):this.reset()};a.hash.sha256.hash=function(e){return new a.hash.sha256().update(e).finalize()};a.hash.sha256.prototype={blockSize:512,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(e){typeof e=="string"&&(e=a.codec.utf8String.toBits(e));var t,r=this.f=a.bitArray.concat(this.f,e);if(t=this.c,e=this.c=t+a.bitArray.bitLength(e),9007199254740991t;r++){for(i=!0,n=2;n*n<=r;n++)if(r%n===0){i=!1;break}i&&(8>t&&(this.o[t]=e(Math.pow(r,.5))),this.b[t]=e(Math.pow(r,1/3)),t++)}},l:function(e){var t,r,n,i=this.g,o=this.b,s=i[0],c=i[1],u=i[2],f=i[3],l=i[4],h=i[5],m=i[6],d=i[7];for(t=0;64>t;t++)16>t?r=e[t]:(r=e[t+1&15],n=e[t+14&15],r=e[t&15]=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(n>>>17^n>>>19^n>>>10^n<<15^n<<13)+e[t&15]+e[t+9&15]|0),r=r+d+(l>>>6^l>>>11^l>>>25^l<<26^l<<21^l<<7)+(m^l&(h^m))+o[t],d=m,m=h,h=l,l=f+r|0,f=u,u=c,c=s,s=r+(c&u^f&(c^u))+(c>>>2^c>>>13^c>>>22^c<<30^c<<19^c<<10)|0;i[0]=i[0]+s|0,i[1]=i[1]+c|0,i[2]=i[2]+u|0,i[3]=i[3]+f|0,i[4]=i[4]+l|0,i[5]=i[5]+h|0,i[6]=i[6]+m|0,i[7]=i[7]+d|0}};a.hash.sha512=function(e){this.b[0]||this.C(),e?(this.g=e.g.slice(0),this.f=e.f.slice(0),this.c=e.c):this.reset()};a.hash.sha512.hash=function(e){return new a.hash.sha512().update(e).finalize()};a.hash.sha512.prototype={blockSize:1024,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(e){typeof e=="string"&&(e=a.codec.utf8String.toBits(e));var t,r=this.f=a.bitArray.concat(this.f,e);if(t=this.c,e=this.c=t+a.bitArray.bitLength(e),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]=e(Math.pow(n,.5)),this.o[2*r+1]=t(Math.pow(n,.5))<<24|this.ia[r]),this.b[2*r]=e(Math.pow(n,1/3)),this.b[2*r+1]=t(Math.pow(n,1/3))<<24|this.ka[r],r++)}},l:function(e){var t,r,n=this.g,i=this.b,o=n[0],s=n[1],c=n[2],u=n[3],f=n[4],l=n[5],h=n[6],m=n[7],d=n[8],O=n[9],N=n[10],z=n[11],Q=n[12],Je=n[13],It=n[14],He=n[15],P;if(typeof Uint32Array<"u"){P=Array(160);for(var _=0;32>_;_++)P[_]=e[_]}else P=e;var _=o,I=s,ye=c,ne=u,ve=f,ie=l,ct=h,ge=m,J=d,U=O,$e=N,we=z,qe=Q,Ee=Je,ut=It,Ae=He;for(e=0;80>e;e++){if(16>e)t=P[2*e],r=P[2*e+1];else{r=P[2*(e-15)];var A=P[2*(e-15)+1];t=(A<<31|r>>>1)^(A<<24|r>>>8)^r>>>7;var H=(r<<31|A>>>1)^(r<<24|A>>>8)^(r<<25|A>>>7);r=P[2*(e-2)];var q=P[2*(e-2)+1],A=(q<<13|r>>>19)^(r<<3|q>>>29)^r>>>6,q=(r<<13|q>>>19)^(q<<3|r>>>29)^(r<<26|q>>>6),ft=P[2*(e-7)],lt=P[2*(e-16)],Le=P[2*(e-16)+1];r=H+P[2*(e-7)+1],t=t+ft+(r>>>0>>0?1:0),r+=q,t+=A+(r>>>0>>0?1:0),r+=Le,t+=lt+(r>>>0>>0?1:0)}P[2*e]=t|=0,P[2*e+1]=r|=0;var ft=J&$e^~J&qe,Ut=U&we^~U&Ee,q=_&ye^_&ve^ye&ve,Ur=I&ne^I&ie^ne&ie,lt=(I<<4|_>>>28)^(_<<30|I>>>2)^(_<<25|I>>>7),Le=(_<<4|I>>>28)^(I<<30|_>>>2)^(I<<25|_>>>7),Mr=i[2*e],Mt=i[2*e+1],A=Ae+((J<<18|U>>>14)^(J<<14|U>>>18)^(U<<23|J>>>9)),H=ut+((U<<18|J>>>14)^(U<<14|J>>>18)^(J<<23|U>>>9))+(A>>>0>>0?1:0),A=A+Ut,H=H+(ft+(A>>>0>>0?1:0)),A=A+Mt,H=H+(Mr+(A>>>0>>0?1:0)),A=A+r|0,H=H+(t+(A>>>0>>0?1:0));r=Le+Ur,t=lt+q+(r>>>0>>0?1:0),ut=qe,Ae=Ee,qe=$e,Ee=we,$e=J,we=U,U=ge+A|0,J=ct+H+(U>>>0>>0?1:0)|0,ct=ve,ge=ie,ve=ye,ie=ne,ye=_,ne=I,I=A+r|0,_=H+t+(I>>>0>>0?1:0)|0}s=n[1]=s+I|0,n[0]=o+_+(s>>>0>>0?1:0)|0,u=n[3]=u+ne|0,n[2]=c+ye+(u>>>0>>0?1:0)|0,l=n[5]=l+ie|0,n[4]=f+ve+(l>>>0>>0?1:0)|0,m=n[7]=m+ge|0,n[6]=h+ct+(m>>>0>>0?1:0)|0,O=n[9]=O+U|0,n[8]=d+J+(O>>>0>>0?1:0)|0,z=n[11]=z+we|0,n[10]=N+$e+(z>>>0>>0?1:0)|0,Je=n[13]=Je+Ee|0,n[12]=Q+qe+(Je>>>0>>0?1:0)|0,He=n[15]=He+Ae|0,n[14]=It+ut+(He>>>0>>0?1:0)|0}};a.mode.ccm={name:"ccm",F:[],listenProgress:function(e){a.mode.ccm.F.push(e)},unListenProgress:function(e){e=a.mode.ccm.F.indexOf(e),-1u)throw new a.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=c.clamp(r,8*(15-o)),t=a.mode.ccm.U(e,t,r,n,i,o),s=a.mode.ccm.V(e,s,r,t,i,o),c.concat(s.data,s.tag)},decrypt:function(e,t,r,n,i){i=i||64,n=n||[];var o=a.bitArray,s=o.bitLength(r)/8,f=o.bitLength(t),c=o.clamp(t,f-i),u=o.bitSlice(t,f-i),f=(f-i)/8;if(7>s)throw new a.exception.invalid("ccm: iv must be at least 7 bytes");for(t=2;4>t&&f>>>8*t;t++);if(t<15-s&&(t=15-s),r=o.clamp(r,8*(15-t)),c=a.mode.ccm.V(e,c,r,u,i,t),e=a.mode.ccm.U(e,c.data,r,n,i,t),!o.equal(c.tag,e))throw new a.exception.corrupt("ccm: tag doesn't match");return c.data},ma:function(e,t,r,n,i,o){var s=[],c=a.bitArray,u=c.P;if(n=[c.partial(8,(t.length?64:0)|n-2<<2|o-1)],n=c.concat(n,r),n[3]|=i,n=e.encrypt(n),t.length)for(r=c.bitLength(t)/8,65279>=r?s=[c.partial(16,r)]:4294967295>=r&&(s=c.concat([c.partial(16,65534)],[r])),s=c.concat(s,t),t=0;ti||16l&&(a.mode.ccm.da(s/u),l+=h),r[3]++,i=e.encrypt(r),t[s]^=i[0],t[s+1]^=i[1],t[s+2]^=i[2],t[s+3]^=i[3];return{tag:n,data:c.clamp(t,f)}}};a.misc.hmac=function(e,t){this.W=t=t||a.hash.sha256;var r=[[],[]],n,i=t.prototype.blockSize/32;for(this.B=[new t,new t],e.length>i&&(e=t.hash(e)),n=0;nn||0>r)throw new a.exception.invalid("invalid params to pbkdf2");typeof e=="string"&&(e=a.codec.utf8String.toBits(e)),typeof t=="string"&&(t=a.codec.utf8String.toBits(t)),i=i||a.misc.hmac,e=new i(e);var o,s,c,u,f=[],l=a.bitArray;for(u=1;32*f.length<(n||1);u++){for(i=o=e.encrypt(l.concat(t,[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=a.hash.sha256.hash(this.b.concat(i)),this.K=new a.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,t,o,e.length].concat(e))}break;case"string":t===void 0&&(t=e.length),this.h[s].update([n,this.M++,3,t,o,e.length]),this.h[s].update(e);break;default:u=1}if(u)throw new a.exception.bug("random: addEntropy only supports number, array of numbers or string");this.s[s]+=t,this.i+=t,c===this.A&&(this.isReady()!==this.A&&ir("seeded",Math.max(this.u,this.i)),ir("progress",this.getProgress()))},isReady:function(e){return e=this.R[e!==void 0?e:this.L],this.u&&this.u>=e?this.s[0]>this.$&&new Date().valueOf()>this.X?this.I|this.H:this.H:this.i>=e?this.I|this.A:this.A},getProgress:function(e){return e=this.R[e||this.L],this.u>=e||this.i>e?1:this.i/e},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 a.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(e,t){this.J[e][this.ea++]=t},removeEventListener:function(e,t){var r,n,i=this.J[e],o=[];for(n in i)i.hasOwnProperty(n)&&i[n]===t&&o.push(n);for(r=0;rt&&(e.m[t]=e.m[t]+1|0,!e.m[t]);t++);return e.K.encrypt(e.m)}function Ce(e,t){return function(){t.apply(e,arguments)}}a.random=new a.prng(6);e:try{if(et=typeof ce<"u"&&ce.exports){try{tt=Jr("crypto")}catch{tt=null}et=Ze=tt}if(et&&Ze.randomBytes)Te=Ze.randomBytes(128),Te=new Uint32Array(new Uint8Array(Te).buffer),a.random.addEntropy(Te,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(Pe=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(Pe);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(Pe);else break e;a.random.addEntropy(Pe,1024,"crypto['getRandomValues']")}}catch(e){typeof window<"u"&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(e))}var Te,Ze,Pe,et,tt;a.json={defaults:{v:1,iter:1e4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ha:function(e,t,r,n){r=r||{},n=n||{};var i=a.json,o=i.j({iv:a.random.randomWords(4,0)},i.defaults),s;if(i.j(o,r),r=o.adata,typeof o.salt=="string"&&(o.salt=a.codec.base64.toBits(o.salt)),typeof o.iv=="string"&&(o.iv=a.codec.base64.toBits(o.iv)),!a.mode[o.mode]||!a.cipher[o.cipher]||typeof e=="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=t.iter||t.ts!==64&&t.ts!==96&&t.ts!==128||t.ks!==128&&t.ks!==192&&t.ks!==256||!t.iv||2>t.iv.length||4{"use strict";var Dn=Object.prototype.hasOwnProperty,k="~";function Re(){}Object.create&&(Re.prototype=Object.create(null),new Re().__proto__||(k=!1));function _n(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function Ar(e,t,r,n,i){if(typeof r!="function")throw new TypeError("The listener must be a function");var o=new _n(r,n||e,i),s=k?k+t:t;return e._events[s]?e._events[s].fn?e._events[s]=[e._events[s],o]:e._events[s].push(o):(e._events[s]=o,e._eventsCount++),e}function rt(e,t){--e._eventsCount===0?e._events=new Re:delete e._events[t]}function T(){this._events=new Re,this._eventsCount=0}T.prototype.eventNames=function(){var t=[],r,n;if(this._eventsCount===0)return t;for(n in r=this._events)Dn.call(r,n)&&t.push(k?n.slice(1):n);return Object.getOwnPropertySymbols?t.concat(Object.getOwnPropertySymbols(r)):t};T.prototype.listeners=function(t){var r=k?k+t:t,n=this._events[r];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,o=n.length,s=new Array(o);i{let n=t.isOk()?{type:"Ok",value:t.value}:{type:"Err",value:t.error},i=r.withStackTrace?new Error().stack:void 0;return{data:n,message:e,stack:i}};function oe(e,t,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 c(l){try{f(n.next(l))}catch(h){s(h)}}function u(l){try{f(n.throw(l))}catch(h){s(h)}}function f(l){l.done?o(l.value):i(l.value).then(c,u)}f((n=n.apply(e,t||[])).next())})}function Ft(e){var t=typeof Symbol=="function"&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function G(e){return this instanceof G?(this.v=e,this):new G(e)}function Bt(e,t,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(e,t||[]),i,o=[];return i=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),c("next"),c("throw"),c("return",s),i[Symbol.asyncIterator]=function(){return this},i;function s(d){return function(O){return Promise.resolve(O).then(d,h)}}function c(d,O){n[d]&&(i[d]=function(N){return new Promise(function(z,Q){o.push([d,N,z,Q])>1||u(d,N)})},O&&(i[d]=O(i[d])))}function u(d,O){try{f(n[d](O))}catch(N){m(o[0][3],N)}}function f(d){d.value instanceof G?Promise.resolve(d.value.v).then(l,h):m(o[0][2],d)}function l(d){u("next",d)}function h(d){u("throw",d)}function m(d,O){d(O),o.shift(),o.length&&u(o[0][0],o[0][1])}}function qr(e){var t,r;return t={},n("next"),n("throw",function(i){throw i}),n("return"),t[Symbol.iterator]=function(){return this},t;function n(i,o){t[i]=e[i]?function(s){return(r=!r)?{value:G(e[i](s)),done:!1}:o?o(s):s}:o}}function Gr(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Ft=="function"?Ft(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(o){r[o]=e[o]&&function(s){return new Promise(function(c,u){s=e[o](s),i(c,u,s.done,s.value)})}}function i(o,s,c,u){Promise.resolve(u).then(function(f){o({value:f,done:c})},s)}}var b=class e{constructor(t){this._promise=t}static fromSafePromise(t){let r=t.then(n=>new F(n));return new e(r)}static fromPromise(t,r){let n=t.then(i=>new F(i)).catch(i=>new B(r(i)));return new e(n)}static fromThrowable(t,r){return(...n)=>new e(oe(this,void 0,void 0,function*(){try{return new F(yield t(...n))}catch(i){return new B(r?r(i):i)}}))}static combine(t){return Kr(t)}static combineWithAllErrors(t){return Xr(t)}map(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){return r.isErr()?new B(r.error):new F(yield t(r.value))})))}andThrough(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){if(r.isErr())return new B(r.error);let n=yield t(r.value);return n.isErr()?new B(n.error):new F(r.value)})))}andTee(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){if(r.isErr())return new B(r.error);try{yield t(r.value)}catch{}return new F(r.value)})))}mapErr(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){return r.isOk()?new F(r.value):new B(yield t(r.error))})))}andThen(t){return new e(this._promise.then(r=>{if(r.isErr())return new B(r.error);let n=t(r.value);return n instanceof e?n._promise:n}))}orElse(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){return r.isErr()?t(r.error):new F(r.value)})))}match(t,r){return this._promise.then(n=>n.match(t,r))}unwrapOr(t){return this._promise.then(r=>r.unwrapOr(t))}safeUnwrap(){return Bt(this,arguments,function*(){return yield G(yield G(yield*qr(Gr(yield G(this._promise.then(r=>r.safeUnwrap()))))))})}then(t,r){return this._promise.then(t,r)}[Symbol.asyncIterator](){return Bt(this,arguments,function*(){let r=yield G(this._promise);return r.isErr()&&(yield yield G(L(r.error))),yield G(r.value)})}},C=e=>new b(Promise.resolve(new F(e))),L=e=>new b(Promise.resolve(new B(e))),Pn=b.fromPromise,Rn=b.fromSafePromise,kn=b.fromThrowable,jt=e=>{let t=re([]);for(let r of e)if(r.isErr()){t=Y(r.error);break}else t.map(n=>n.push(r.value));return t},Kr=e=>b.fromSafePromise(Promise.all(e)).andThen(jt),zt=e=>{let t=re([]);for(let r of e)r.isErr()&&t.isErr()?t.error.push(r.error):r.isErr()&&t.isOk()?t=Y([r.error]):r.isOk()&&t.isOk()&&t.value.push(r.value);return t},Xr=e=>b.fromSafePromise(Promise.all(e)).andThen(zt),mt;(function(e){function t(i,o){return(...s)=>{try{let c=i(...s);return re(c)}catch(c){return Y(o?o(c):c)}}}e.fromThrowable=t;function r(i){return jt(i)}e.combine=r;function n(i){return zt(i)}e.combineWithAllErrors=n})(mt||(mt={}));var re=e=>new F(e);function Y(e){return new B(e)}var F=class{constructor(t){this.value=t}isOk(){return!0}isErr(){return!this.isOk()}map(t){return re(t(this.value))}mapErr(t){return re(this.value)}andThen(t){return t(this.value)}andThrough(t){return t(this.value).map(r=>this.value)}andTee(t){try{t(this.value)}catch{}return re(this.value)}orElse(t){return re(this.value)}asyncAndThen(t){return t(this.value)}asyncAndThrough(t){return t(this.value).map(()=>this.value)}asyncMap(t){return b.fromSafePromise(t(this.value))}unwrapOr(t){return this.value}match(t,r){return t(this.value)}safeUnwrap(){let t=this.value;return function*(){return t}()}_unsafeUnwrap(t){return this.value}_unsafeUnwrapErr(t){throw Wt("Called `_unsafeUnwrapErr` on an Ok",this,t)}*[Symbol.iterator](){return this.value}},B=class{constructor(t){this.error=t}isOk(){return!1}isErr(){return!this.isOk()}map(t){return Y(this.error)}mapErr(t){return Y(t(this.error))}andThrough(t){return Y(this.error)}andTee(t){return Y(this.error)}andThen(t){return Y(this.error)}orElse(t){return t(this.error)}asyncAndThen(t){return L(this.error)}asyncAndThrough(t){return L(this.error)}asyncMap(t){return L(this.error)}unwrapOr(t){return t}match(t,r){return r(this.error)}safeUnwrap(){let t=this.error;return function*(){throw yield Y(t),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(t){throw Wt("Called `_unsafeUnwrap` on an Err",this,t)}_unsafeUnwrapErr(t){return this.error}*[Symbol.iterator](){let t=this;return yield t,t}},Sn=mt.fromThrowable;var R=class extends Error{constructor(r,n={}){let{cause:i,context:o}=n;super(r,{cause:i});w(this,"context");this.name=this.constructor.name,this.context=o}};var K=class extends R{};var Oe=class extends K{constructor(){super(...arguments);w(this,"message","An error occured while trying to connect to WebSocket")}};var $=e=>{if(e instanceof Error)return e;let t="[Unable to stringify the thrown value]";try{t=JSON.stringify(e)}catch{}return new Error(t)};var Vr=()=>typeof Deno<"u";var yt=e=>Vr()?new URL(`./worker/${e}.ts`,new URL(".",import.meta.url).href):new URL(import.meta.resolve(`./${e!=="encrypt"?`worker/${e}`:e}.js`));var er=be(Ve());var v=new er.default,Z=(e,t)=>(Object.assign(e,t),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:e}),e),gt=(e,t)=>{Z(e,{uploadStatus:2}),self.postMessage({event:"OPERATION_FAILED",error:t})},tr=()=>{v.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),v.once("OPERATION_FAILED",e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})};var ae=class{constructor(t,r){if(!t||t.length!=64)throw Error("Charset must contain 64 characters");this._charset=t,this._noPadding=!!r,this._valid=new RegExp("^["+this._charset.replace("-","\\-")+"]+={0,2}$")}Encode(t){let r=t.byteLength;if(!r)return"";let n=new Uint8Array(t),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(t){if(t=(t||"").replace(/[\s]/g,""),!t)return new ArrayBuffer(0);if(!this._valid.test(t))throw Error("Invalid base64 input sequence");let r=Math.floor(t.length*.75);t[t.length-2]=="="?r-=2:t[t.length-1]=="="&&r--;let n=new Uint8Array(r),i,o,s,c,u=0,f=0;for(;u>4,n[u++]=(o&15)<<4|s>>2,n[u++]=(s&3)<<6|c;return n.buffer}};var rr=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function xe(e){return rr.Encode(e)}function De(e){return rr.Decode(e)}var nn=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function wt(e){return nn.Decode(e)}var Lt=be(sr());var X=class extends R{};var ue=class extends X{constructor(){super(...arguments);w(this,"message","Unable to decrypt the provided data")}};var fe=class extends X{constructor(){super(...arguments);w(this,"message","Unable to encrypt the provided data")}};var ar=(e,t)=>{try{let r=typeof t=="string"?t:t.data;return C(De(Lt.default.decrypt(e,r)))}catch(r){return L(new ue(void 0,{cause:$(r)}))}},cr=(e,t)=>{try{let r=Lt.default.encrypt(e,xe(t));return C({algo:0,data:r,iv:JSON.parse(r).iv})}catch(r){return L(new fe(void 0,{cause:$(r)}))}};var ur=(e,t)=>lr(e).andThen(r=>b.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:t.iv},r,t.data),n=>new ue(void 0,{cause:$(n)}))),fr=(e,t)=>lr(e).andThen(r=>{let n=crypto.getRandomValues(new Uint8Array(12));return b.fromPromise(crypto.subtle.encrypt({name:"AES-GCM",iv:n},r,t),i=>new fe(void 0,{cause:$(i)})).andThen(i=>C({algo:1,data:i,iv:n}))}),lr=e=>b.fromPromise(crypto.subtle.importKey("raw",wt(e),{name:"AES-GCM"},!1,["encrypt","decrypt"]),t=>new X("Unable to import cryptography key",{cause:$(t)}));var hr=(e,t)=>t.algo===void 0||t.algo===0?ar(e,t):ur(e,t),pr=(e,t,r)=>r===0?cr(e,t):fr(e,t);var M={},mr=5,un=e=>(v.emit("UPLOAD_CANCELLED",e.success),C(void 0)),fn=(e,t)=>{let r=e.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let i=JSON.parse(n);if(wn(i)){let o=r.shift();if(o){let s=JSON.parse(o);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=De(s.data)),hr(t.keys.client,s).andThen(c=>{let u=typeof c=="string"?new TextEncoder().encode(c).buffer:c;return i.part===0?(Z(t,{chunksReady:t.chunksReady+1,delAtFirstView:i.del_at_first_view,delay:i.delay,name:i.name,size:i.size,totalChunks:i.total,type:i.type,zipped:i.zipped}),v.emit("DOWNLOAD_STARTED")):Z(t,{chunksReady:t.chunksReady+1}),v.emit("CHUNK_DOWNLOADED",u,i.part),t.chunksReady===i.total?dn(t).andThen(()=>(v.emit("DOWNLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED"),C(void 0))):C(void 0)})}else{let s=new K("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",s),L(s)}}else{let o=new K(i.msg);return v.emit("OPERATION_FAILED",o),L(o)}}else{let i=new K("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",i),L(i)}},ln=(e,t)=>{if(e.success)return e.j===0&&(Z(t,{keys:{client:t.keys.client,server:e.short},actionToken:e.token,queueIndex:e.i}),v.emit("UPLOAD_STARTED")),Z(t,{chunksReady:t.chunksReady+1,createdAt:e.created_at}),v.emit("CHUNK_UPLOADED"),t.chunksReady===t.totalChunks&&(Z(t,{uploadStatus:1}),v.emit("UPLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED")),C(void 0);{let r=new K(e.msg);return v.emit("OPERATION_FAILED",r),L(r)}},hn=(e,t)=>{let r=gn(e.data),n;if(r)if(!r.action&&r.msg){let i=new K(r.msg);return v.emit("OPERATION_FAILED",i),L(i)}else"delay"in r?n=ln(r,t):n=un(r);else n=fn(e.data,t);return n},pn=e=>M!==void 0&&M[e]!==void 0&&M[e].readyState===WebSocket.CONNECTING,bt=e=>M!==void 0&&M[e]!==void 0&&M[e].readyState===WebSocket.OPEN;var dn=e=>{let t;return e.password?t={ended:!0,file_pwd:e.password}:t={ended:!0},xt(yn(e),e,JSON.stringify(t))},Ot=(e,t,r)=>(r.data=xe(r.data),xt(vn(e),e,`${JSON.stringify(t)}XXMOJOXX${JSON.stringify(r)}`)),xt=(e,t,r)=>bt(e)?(M[e].send(r),C(void 0)):yr(e).andThen(()=>(M[e].onmessage=n=>hn(n,t),xt(e,t,r))),yr=(e,t=0)=>(!bt(e)&&!pn(e)&&(M[e]=new WebSocket(e),v.once("SOCKET_OPERATION_TERMINATED",()=>{M[e].close()}),v.once("OPERATION_FAILED",()=>{v.emit("SOCKET_OPERATION_TERMINATED")}),M[e].onopen=()=>{v.emit("SOCKET_OPENED")},M[e].onclose=()=>{},M[e].onerror=()=>++t<=mr?(console.error(`An error happened while trying to connect to WebSocket ${e}. Trying again. ${t} / ${mr}`),yr(e,t)):(v.emit("SOCKET_ONERROR"),L(new Oe(`Unable to connect to WebSocket ${e}.`)))),mn(e).andThen(()=>C(e)).orElse(r=>L(r))),mn=e=>b.fromPromise(new Promise((t,r)=>{bt(e)?t(void 0):(v.once("SOCKET_OPENED",()=>{t(void 0)}),v.on("SOCKET_ONERROR",()=>{r(new Oe)}))}),t=>$(t));var vr=(e,t)=>{let r=new URL(e);return r.protocol=r.protocol==="http:"?"ws:":"wss:",r.pathname+=t,new URL(r.origin+r.pathname)},yn=e=>vr(new URL(e.serverUrl),"download"+`/${e.keys.server}`).toString(),vn=e=>vr(new URL(e.serverUrl),"upload").toString(),gn=e=>{try{let t=JSON.parse(e);if(t&&typeof t=="object")return t}catch{}return!1},wn=e=>typeof e=="object"&&e!==null&&!("msg"in e);var wr=be(Ve());var Ln=be(Ve());var On={},Ds=new wr.default;var xn=()=>Object.values(On).filter(e=>e.uploadStatus===4),Er=e=>Object.keys(xn()).indexOf(e);var _t=be(Lr(),1);var ke=class extends Error{constructor(t){super(t),this.name="TimeoutError"}},Ct=class extends Error{constructor(t){super(),this.name="AbortError",this.message=t}},br=e=>globalThis.DOMException===void 0?new Ct(e):new DOMException(e),Or=e=>{let t=e.reason===void 0?br("This operation was aborted."):e.reason;return t instanceof Error?t:br(t)};function Tt(e,t){let{milliseconds:r,fallback:n,message:i,customTimers:o={setTimeout,clearTimeout}}=t,s,u=new Promise((f,l)=>{if(typeof r!="number"||Math.sign(r)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(t.signal){let{signal:m}=t;m.aborted&&l(Or(m));let d=()=>{l(Or(m))};m.addEventListener("abort",d,{once:!0}),e.finally(()=>{m.removeEventListener("abort",d)})}if(r===Number.POSITIVE_INFINITY){e.then(f,l);return}let h=new ke;s=o.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(m){l(m)}return}typeof e.cancel=="function"&&e.cancel(),i===!1?f():i instanceof Error?l(i):(h.message=i!=null?i:`Promise timed out after ${r} milliseconds`,l(h))},r),(async()=>{try{f(await e)}catch(m){l(m)}})()}).finally(()=>{u.clear()});return u.clear=()=>{o.clearTimeout.call(void 0,s),s=void 0},u}function Pt(e,t,r){let n=0,i=e.length;for(;i>0;){let o=Math.trunc(i/2),s=n+o;r(e[s],t)<=0?(n=++s,i-=o+1):i=o}return n}var V,Se=class{constructor(){x(this,V,[])}enqueue(t,r){r={priority:0,...r};let n={priority:r.priority,run:t};if(this.size&&p(this,V)[this.size-1].priority>=r.priority){p(this,V).push(n);return}let i=Pt(p(this,V),n,(o,s)=>s.priority-o.priority);p(this,V).splice(i,0,n)}dequeue(){let t=p(this,V).shift();return t==null?void 0:t.run}filter(t){return p(this,V).filter(r=>r.priority===t.priority).map(r=>r.run)}get size(){return p(this,V).length}};V=new WeakMap;var le,he,te,Ue,pe,Me,W,de,S,Ne,j,me,ee,Fe,y,xr,Dr,_r,Cr,Tr,nt,Rt,kt,it,Pr,ot,Ie=class extends _t.default{constructor(r){var n,i,o,s;super();x(this,y);x(this,le);x(this,he);x(this,te,0);x(this,Ue);x(this,pe);x(this,Me,0);x(this,W);x(this,de);x(this,S);x(this,Ne);x(this,j,0);x(this,me);x(this,ee);x(this,Fe);w(this,"timeout");if(r={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Se,...r},!(typeof r.intervalCap=="number"&&r.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${(i=(n=r.intervalCap)==null?void 0:n.toString())!=null?i:""}\` (${typeof r.intervalCap})`);if(r.interval===void 0||!(Number.isFinite(r.interval)&&r.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${(s=(o=r.interval)==null?void 0:o.toString())!=null?s:""}\` (${typeof r.interval})`);E(this,le,r.carryoverConcurrencyCount),E(this,he,r.intervalCap===Number.POSITIVE_INFINITY||r.interval===0),E(this,Ue,r.intervalCap),E(this,pe,r.interval),E(this,S,new r.queueClass),E(this,Ne,r.queueClass),this.concurrency=r.concurrency,this.timeout=r.timeout,E(this,Fe,r.throwOnTimeout===!0),E(this,ee,r.autoStart===!1)}get concurrency(){return p(this,me)}set concurrency(r){if(!(typeof r=="number"&&r>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${r}\` (${typeof r})`);E(this,me,r),D(this,y,it).call(this)}async add(r,n={}){return n={timeout:this.timeout,throwOnTimeout:p(this,Fe),...n},new Promise((i,o)=>{p(this,S).enqueue(async()=>{var s;Ge(this,j)._++,Ge(this,te)._++;try{(s=n.signal)==null||s.throwIfAborted();let c=r({signal:n.signal});n.timeout&&(c=Tt(Promise.resolve(c),{milliseconds:n.timeout})),n.signal&&(c=Promise.race([c,D(this,y,Pr).call(this,n.signal)]));let u=await c;i(u),this.emit("completed",u)}catch(c){if(c instanceof ke&&!n.throwOnTimeout){i();return}o(c),this.emit("error",c)}finally{D(this,y,_r).call(this)}},n),this.emit("add"),D(this,y,nt).call(this)})}async addAll(r,n){return Promise.all(r.map(async i=>this.add(i,n)))}start(){return p(this,ee)?(E(this,ee,!1),D(this,y,it).call(this),this):this}pause(){E(this,ee,!0)}clear(){E(this,S,new(p(this,Ne)))}async onEmpty(){p(this,S).size!==0&&await D(this,y,ot).call(this,"empty")}async onSizeLessThan(r){p(this,S).sizep(this,S).size{D(this,y,Cr).call(this)},n)),!0}return!1},nt=function(){if(p(this,S).size===0)return p(this,W)&&clearInterval(p(this,W)),E(this,W,void 0),this.emit("empty"),p(this,j)===0&&this.emit("idle"),!1;if(!p(this,ee)){let r=!p(this,y,Tr);if(p(this,y,xr)&&p(this,y,Dr)){let n=p(this,S).dequeue();return n?(this.emit("active"),n(),r&&D(this,y,Rt).call(this),!0):!1}}return!1},Rt=function(){p(this,he)||p(this,W)!==void 0||(E(this,W,setInterval(()=>{D(this,y,kt).call(this)},p(this,pe))),E(this,Me,Date.now()+p(this,pe)))},kt=function(){p(this,te)===0&&p(this,j)===0&&p(this,W)&&(clearInterval(p(this,W)),E(this,W,void 0)),E(this,te,p(this,le)?p(this,j):0),D(this,y,it).call(this)},it=function(){for(;D(this,y,nt).call(this););},Pr=async function(r){return new Promise((n,i)=>{r.addEventListener("abort",()=>{i(r.reason)},{once:!0})})},ot=async function(r,n){return new Promise(i=>{let o=()=>{n&&!n()||(this.off(r,o),i())};this.on(r,o)})};var st=class extends R{};var Be=class extends st{constructor(){super(...arguments);w(this,"message","Parameter cannot be undefined")}};var Rr=!1,St=navigator.hardwareConcurrency||1,ze=new Ie({concurrency:St,autoStart:!1}),je=0,at=!1,We,kr=new Worker(yt("encrypt"),{type:"module"});self.onmessage=e=>{if(Rr||(tr(),Rr=!0,We=e.data.args.lufiFile,v.once("UPLOAD_STARTED",()=>{self.postMessage({event:"UPLOAD_STARTED"})}),v.on("CHUNK_UPLOADED",()=>{self.postMessage({event:"CHUNK_UPLOADED"}),je--,ze.isPaused&&!at&&je{self.postMessage({event:"UPLOAD_COMPLETE"})}),v.on("FILE_UPDATED",Z)),e.data.args.chunk)return e.data.args.lufiFile=We,Cn(e.data,Er(We.keys.client)).mapErr(t=>{gt(We,t)});e.data.action===0?(at=!0,Ir()):e.data.action===2?(at=!1,Sr()):gt(We,new Be)};var Cn=(e,t)=>{let{lufiFile:r,algo:n}=e.args;if(e.args.chunk&&n)e.args.chunk.index===0?pr(r.keys.client,e.args.chunk.buffer,n).map(i=>{Ot(r,{total:r.totalChunks,part:0,size:r.size,name:r.name,type:r.type,delay:r.delay,del_at_first_view:r.delAtFirstView,zipped:r.zipped,id:null,i:t,file_pwd:r.password},i),je++}):ze.add(()=>{if(e.args.chunk){let i=()=>(je++,new Promise(o=>{kr.onmessage=s=>{o(Ot(r,{total:r.totalChunks,part:s.data.chunkIndex,size:r.size,name:r.name,type:r.type,delay:r.delay,del_at_first_view:r.delAtFirstView,zipped:r.zipped,id:r.keys.server,i:t,file_pwd:r.password},s.data.encryptedData))}}));kr.postMessage(e,[e.args.chunk.buffer]),!ze.isPaused&&(at||je===St)&&Ir(),i()}});else return L(new Be("algo must be defined"));return C(void 0)},Ir=()=>{ze.pause(),self.postMessage({event:"JOB_PAUSED"})},Sr=()=>{ze.start(),self.postMessage({event:"JOB_RESUMED"})}; +var Nr=Object.create;var ht=Object.defineProperty;var Fr=Object.getOwnPropertyDescriptor;var Br=Object.getOwnPropertyNames;var jr=Object.getPrototypeOf,Wr=Object.prototype.hasOwnProperty;var Nt=e=>{throw TypeError(e)};var Jr=(e,t,r)=>t in e?ht(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var zr=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var dt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Hr=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Br(t))!Wr.call(e,i)&&i!==r&&ht(e,i,{get:()=>t[i],enumerable:!(n=Fr(t,i))||n.enumerable});return e};var Oe=(e,t,r)=>(r=e!=null?Nr(jr(e)):{},Hr(t||!e||!e.__esModule?ht(r,"default",{value:e,enumerable:!0}):r,e));var g=(e,t,r)=>Jr(e,typeof t!="symbol"?t+"":t,r),pt=(e,t,r)=>t.has(e)||Nt("Cannot "+r);var d=(e,t,r)=>(pt(e,t,"read from private field"),r?r.call(e):t.get(e)),D=(e,t,r)=>t.has(e)?Nt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),w=(e,t,r,n)=>(pt(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r),x=(e,t,r)=>(pt(e,t,"access private method"),r);var Ge=(e,t,r,n)=>({set _(i){w(e,t,i,r)},get _(){return d(e,t,n)}});var Ke=dt((ri,vt)=>{"use strict";var se=typeof Reflect=="object"?Reflect:null,zt=se&&typeof se.apply=="function"?se.apply:function(t,r,n){return Function.prototype.apply.call(t,r,n)},Ve;se&&typeof se.ownKeys=="function"?Ve=se.ownKeys:Object.getOwnPropertySymbols?Ve=function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:Ve=function(t){return Object.getOwnPropertyNames(t)};function Qr(e){console&&console.warn&&console.warn(e)}var $t=Number.isNaN||function(t){return t!==t};function E(){E.init.call(this)}vt.exports=E;vt.exports.once=tn;E.EventEmitter=E;E.prototype._events=void 0;E.prototype._eventsCount=0;E.prototype._maxListeners=void 0;var Ht=10;function Xe(e){if(typeof e!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}Object.defineProperty(E,"defaultMaxListeners",{enumerable:!0,get:function(){return Ht},set:function(e){if(typeof e!="number"||e<0||$t(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");Ht=e}});E.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};E.prototype.setMaxListeners=function(t){if(typeof t!="number"||t<0||$t(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this};function qt(e){return e._maxListeners===void 0?E.defaultMaxListeners:e._maxListeners}E.prototype.getMaxListeners=function(){return qt(this)};E.prototype.emit=function(t){for(var r=[],n=1;n0&&(s=r[0]),s instanceof Error)throw s;var c=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw c.context=s,c}var u=o[t];if(u===void 0)return!1;if(typeof u=="function")zt(u,this,r);else for(var f=u.length,l=Qt(u,f),n=0;n0&&s.length>i&&!s.warned){s.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=s.length,Qr(c)}return e}E.prototype.addListener=function(t,r){return Gt(this,t,r,!1)};E.prototype.on=E.prototype.addListener;E.prototype.prependListener=function(t,r){return Gt(this,t,r,!0)};function Zr(){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 Vt(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=Zr.bind(n);return i.listener=r,n.wrapFn=i,i}E.prototype.once=function(t,r){return Xe(r),this.on(t,Vt(this,t,r)),this};E.prototype.prependOnceListener=function(t,r){return Xe(r),this.prependListener(t,Vt(this,t,r)),this};E.prototype.removeListener=function(t,r){var n,i,o,s,c;if(Xe(r),i=this._events,i===void 0)return this;if(n=i[t],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete i[t],i.removeListener&&this.emit("removeListener",t,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){c=n[s].listener,o=s;break}if(o<0)return this;o===0?n.shift():Yr(n,o),n.length===1&&(i[t]=n[0]),i.removeListener!==void 0&&this.emit("removeListener",t,c||r)}return this};E.prototype.off=E.prototype.removeListener;E.prototype.removeAllListeners=function(t){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[t]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[t]),this;if(arguments.length===0){var o=Object.keys(n),s;for(i=0;i=0;i--)this.removeListener(t,r[i]);return this};function Xt(e,t,r){var n=e._events;if(n===void 0)return[];var i=n[t];return i===void 0?[]:typeof i=="function"?r?[i.listener||i]:[i]:r?en(i):Qt(i,i.length)}E.prototype.listeners=function(t){return Xt(this,t,!0)};E.prototype.rawListeners=function(t){return Xt(this,t,!1)};E.listenerCount=function(e,t){return typeof e.listenerCount=="function"?e.listenerCount(t):Kt.call(e,t)};E.prototype.listenerCount=Kt;function Kt(e){var t=this._events;if(t!==void 0){var r=t[e];if(typeof r=="function")return 1;if(r!==void 0)return r.length}return 0}E.prototype.eventNames=function(){return this._eventsCount>0?Ve(this._events):[]};function Qt(e,t){for(var r=new Array(t),n=0;n{"use strict";var a={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(e){this.toString=function(){return"CORRUPT: "+this.message},this.message=e},invalid:function(e){this.toString=function(){return"INVALID: "+this.message},this.message=e},bug:function(e){this.toString=function(){return"BUG: "+this.message},this.message=e},notReady:function(e){this.toString=function(){return"NOT READY: "+this.message},this.message=e}}};a.cipher.aes=function(e){this.w[0][0][0]||this.C();var t,r,n,i,o=this.w[0][4],s=this.w[1];t=e.length;var c=1;if(t!==4&&t!==6&&t!==8)throw new a.exception.invalid("invalid aes key size");for(this.b=[n=e.slice(0),i=[]],e=t;e<4*t+28;e++)r=n[e-1],(e%t===0||t===8&&e%t===4)&&(r=o[r>>>24]<<24^o[r>>16&255]<<16^o[r>>8&255]<<8^o[r&255],e%t===0&&(r=r<<8^r>>>24^c<<24,c=c<<1^283*(c>>7))),n[e]=n[e-t]^r;for(t=0;e;t++,e--)r=n[t&3?e:e-4],i[t]=4>=e||4>t?r:s[0][o[r>>>24]]^s[1][o[r>>16&255]]^s[2][o[r>>8&255]]^s[3][o[r&255]]};a.cipher.aes.prototype={encrypt:function(e){return nr(this,e,0)},decrypt:function(e){return nr(this,e,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var e=this.w[0],t=this.w[1],r=e[4],n=t[4],i,o,s,c=[],u=[],f,l,h,m;for(i=0;256>i;i++)u[(c[i]=i<<1^283*(i>>7))^i]=i;for(o=s=0;!r[o];o^=f||1,s=u[s]||1)for(h=s^s<<1^s<<2^s<<3^s<<4,h=h>>8^h&255^99,r[o]=h,n[h]=o,l=c[i=c[f=c[o]]],m=16843009*l^65537*i^257*f^16843008*o,l=257*c[h]^16843008*h,i=0;4>i;i++)e[i][o]=l=l<<24^l>>>8,t[i][h]=m=m<<24^m>>>8;for(i=0;5>i;i++)e[i]=e[i].slice(0),t[i]=t[i].slice(0)}};function nr(e,t,r){if(t.length!==4)throw new a.exception.invalid("invalid aes block size");var n=e.b[r],i=t[0]^n[0],o=t[r?3:1]^n[1],s=t[2]^n[2];t=t[r?1:3]^n[3];var c,u,f,l=n.length/4-2,h,m=4,p=[0,0,0,0];c=e.w[r],e=c[0];var b=c[1],N=c[2],J=c[3],Q=c[4];for(h=0;h>>24]^b[o>>16&255]^N[s>>8&255]^J[t&255]^n[m],u=e[o>>>24]^b[s>>16&255]^N[t>>8&255]^J[i&255]^n[m+1],f=e[s>>>24]^b[t>>16&255]^N[i>>8&255]^J[o&255]^n[m+2],t=e[t>>>24]^b[i>>16&255]^N[o>>8&255]^J[s&255]^n[m+3],m+=4,i=c,o=u,s=f;for(h=0;4>h;h++)p[r?3&-h:h]=Q[i>>>24]<<24^Q[o>>16&255]<<16^Q[s>>8&255]<<8^Q[t&255]^n[m++],c=i,i=o,o=s,s=t,t=c;return p}a.bitArray={bitSlice:function(e,t,r){return e=a.bitArray.Y(e.slice(t/32),32-(t&31)).slice(1),r===void 0?e:a.bitArray.clamp(e,r-t)},extract:function(e,t,r){var n=Math.floor(-t-r&31);return((t+r-1^t)&-32?e[t/32|0]<<32-n^e[t/32+1|0]>>>n:e[t/32|0]>>>n)&(1<>t-1,1)),e},partial:function(e,t,r){return e===32?t:(r?t|0:t<<32-e)+1099511627776*e},getPartial:function(e){return Math.round(e/1099511627776)||32},equal:function(e,t){if(a.bitArray.bitLength(e)!==a.bitArray.bitLength(t))return!1;var r=0,n;for(n=0;n>>t),r=e[i]<<32-t;return i=e.length?e[e.length-1]:0,e=a.bitArray.getPartial(i),n.push(a.bitArray.partial(t+e&31,32>>24|r>>>8&65280|(r&65280)<<8|r<<24;return e}};a.codec.utf8String={fromBits:function(e){var t="",r=a.bitArray.bitLength(e),n,i;for(n=0;n>>8>>>8>>>8),i<<=8;return decodeURIComponent(escape(t))},toBits:function(e){e=unescape(encodeURIComponent(e));var t=[],r,n=0;for(r=0;r>>i)>>>26),6>i?(s=e[r]<<6-i,i+=26,r++):(s<<=6,i-=6);for(;n.length&3&&!t;)n+="=";return n},toBits:function(e,t){e=e.replace(/\s|=/g,"");var r=[],n,i=0,o=a.codec.base64.S,s=0,c;for(t&&(o=o.substr(0,62)+"-_"),n=0;nc)throw new a.exception.invalid("this isn't base64!");26>>i),s=c<<32-i):(i+=6,s^=c<<32-i)}return i&56&&r.push(a.bitArray.partial(i&56,s,1)),r}};a.codec.base64url={fromBits:function(e){return a.codec.base64.fromBits(e,1,1)},toBits:function(e){return a.codec.base64.toBits(e,1)}};a.hash.sha256=function(e){this.b[0]||this.C(),e?(this.g=e.g.slice(0),this.f=e.f.slice(0),this.c=e.c):this.reset()};a.hash.sha256.hash=function(e){return new a.hash.sha256().update(e).finalize()};a.hash.sha256.prototype={blockSize:512,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(e){typeof e=="string"&&(e=a.codec.utf8String.toBits(e));var t,r=this.f=a.bitArray.concat(this.f,e);if(t=this.c,e=this.c=t+a.bitArray.bitLength(e),9007199254740991t;r++){for(i=!0,n=2;n*n<=r;n++)if(r%n===0){i=!1;break}i&&(8>t&&(this.o[t]=e(Math.pow(r,.5))),this.b[t]=e(Math.pow(r,1/3)),t++)}},l:function(e){var t,r,n,i=this.g,o=this.b,s=i[0],c=i[1],u=i[2],f=i[3],l=i[4],h=i[5],m=i[6],p=i[7];for(t=0;64>t;t++)16>t?r=e[t]:(r=e[t+1&15],n=e[t+14&15],r=e[t&15]=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(n>>>17^n>>>19^n>>>10^n<<15^n<<13)+e[t&15]+e[t+9&15]|0),r=r+p+(l>>>6^l>>>11^l>>>25^l<<26^l<<21^l<<7)+(m^l&(h^m))+o[t],p=m,m=h,h=l,l=f+r|0,f=u,u=c,c=s,s=r+(c&u^f&(c^u))+(c>>>2^c>>>13^c>>>22^c<<30^c<<19^c<<10)|0;i[0]=i[0]+s|0,i[1]=i[1]+c|0,i[2]=i[2]+u|0,i[3]=i[3]+f|0,i[4]=i[4]+l|0,i[5]=i[5]+h|0,i[6]=i[6]+m|0,i[7]=i[7]+p|0}};a.hash.sha512=function(e){this.b[0]||this.C(),e?(this.g=e.g.slice(0),this.f=e.f.slice(0),this.c=e.c):this.reset()};a.hash.sha512.hash=function(e){return new a.hash.sha512().update(e).finalize()};a.hash.sha512.prototype={blockSize:1024,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(e){typeof e=="string"&&(e=a.codec.utf8String.toBits(e));var t,r=this.f=a.bitArray.concat(this.f,e);if(t=this.c,e=this.c=t+a.bitArray.bitLength(e),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]=e(Math.pow(n,.5)),this.o[2*r+1]=t(Math.pow(n,.5))<<24|this.ia[r]),this.b[2*r]=e(Math.pow(n,1/3)),this.b[2*r+1]=t(Math.pow(n,1/3))<<24|this.ka[r],r++)}},l:function(e){var t,r,n=this.g,i=this.b,o=n[0],s=n[1],c=n[2],u=n[3],f=n[4],l=n[5],h=n[6],m=n[7],p=n[8],b=n[9],N=n[10],J=n[11],Q=n[12],ze=n[13],It=n[14],He=n[15],S;if(typeof Uint32Array<"u"){S=Array(160);for(var _=0;32>_;_++)S[_]=e[_]}else S=e;var _=o,I=s,ye=c,ne=u,ve=f,ie=l,ct=h,Ee=m,z=p,U=b,$e=N,ge=J,qe=Q,we=ze,ut=It,Ae=He;for(e=0;80>e;e++){if(16>e)t=S[2*e],r=S[2*e+1];else{r=S[2*(e-15)];var A=S[2*(e-15)+1];t=(A<<31|r>>>1)^(A<<24|r>>>8)^r>>>7;var H=(r<<31|A>>>1)^(r<<24|A>>>8)^(r<<25|A>>>7);r=S[2*(e-2)];var q=S[2*(e-2)+1],A=(q<<13|r>>>19)^(r<<3|q>>>29)^r>>>6,q=(r<<13|q>>>19)^(q<<3|r>>>29)^(r<<26|q>>>6),ft=S[2*(e-7)],lt=S[2*(e-16)],Le=S[2*(e-16)+1];r=H+S[2*(e-7)+1],t=t+ft+(r>>>0>>0?1:0),r+=q,t+=A+(r>>>0>>0?1:0),r+=Le,t+=lt+(r>>>0>>0?1:0)}S[2*e]=t|=0,S[2*e+1]=r|=0;var ft=z&$e^~z&qe,Ut=U&ge^~U&we,q=_&ye^_&ve^ye&ve,Ur=I&ne^I&ie^ne&ie,lt=(I<<4|_>>>28)^(_<<30|I>>>2)^(_<<25|I>>>7),Le=(_<<4|I>>>28)^(I<<30|_>>>2)^(I<<25|_>>>7),Mr=i[2*e],Mt=i[2*e+1],A=Ae+((z<<18|U>>>14)^(z<<14|U>>>18)^(U<<23|z>>>9)),H=ut+((U<<18|z>>>14)^(U<<14|z>>>18)^(z<<23|U>>>9))+(A>>>0>>0?1:0),A=A+Ut,H=H+(ft+(A>>>0>>0?1:0)),A=A+Mt,H=H+(Mr+(A>>>0>>0?1:0)),A=A+r|0,H=H+(t+(A>>>0>>0?1:0));r=Le+Ur,t=lt+q+(r>>>0>>0?1:0),ut=qe,Ae=we,qe=$e,we=ge,$e=z,ge=U,U=Ee+A|0,z=ct+H+(U>>>0>>0?1:0)|0,ct=ve,Ee=ie,ve=ye,ie=ne,ye=_,ne=I,I=A+r|0,_=H+t+(I>>>0>>0?1:0)|0}s=n[1]=s+I|0,n[0]=o+_+(s>>>0>>0?1:0)|0,u=n[3]=u+ne|0,n[2]=c+ye+(u>>>0>>0?1:0)|0,l=n[5]=l+ie|0,n[4]=f+ve+(l>>>0>>0?1:0)|0,m=n[7]=m+Ee|0,n[6]=h+ct+(m>>>0>>0?1:0)|0,b=n[9]=b+U|0,n[8]=p+z+(b>>>0>>0?1:0)|0,J=n[11]=J+ge|0,n[10]=N+$e+(J>>>0>>0?1:0)|0,ze=n[13]=ze+we|0,n[12]=Q+qe+(ze>>>0>>0?1:0)|0,He=n[15]=He+Ae|0,n[14]=It+ut+(He>>>0>>0?1:0)|0}};a.mode.ccm={name:"ccm",F:[],listenProgress:function(e){a.mode.ccm.F.push(e)},unListenProgress:function(e){e=a.mode.ccm.F.indexOf(e),-1u)throw new a.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=c.clamp(r,8*(15-o)),t=a.mode.ccm.U(e,t,r,n,i,o),s=a.mode.ccm.V(e,s,r,t,i,o),c.concat(s.data,s.tag)},decrypt:function(e,t,r,n,i){i=i||64,n=n||[];var o=a.bitArray,s=o.bitLength(r)/8,f=o.bitLength(t),c=o.clamp(t,f-i),u=o.bitSlice(t,f-i),f=(f-i)/8;if(7>s)throw new a.exception.invalid("ccm: iv must be at least 7 bytes");for(t=2;4>t&&f>>>8*t;t++);if(t<15-s&&(t=15-s),r=o.clamp(r,8*(15-t)),c=a.mode.ccm.V(e,c,r,u,i,t),e=a.mode.ccm.U(e,c.data,r,n,i,t),!o.equal(c.tag,e))throw new a.exception.corrupt("ccm: tag doesn't match");return c.data},ma:function(e,t,r,n,i,o){var s=[],c=a.bitArray,u=c.P;if(n=[c.partial(8,(t.length?64:0)|n-2<<2|o-1)],n=c.concat(n,r),n[3]|=i,n=e.encrypt(n),t.length)for(r=c.bitLength(t)/8,65279>=r?s=[c.partial(16,r)]:4294967295>=r&&(s=c.concat([c.partial(16,65534)],[r])),s=c.concat(s,t),t=0;ti||16l&&(a.mode.ccm.da(s/u),l+=h),r[3]++,i=e.encrypt(r),t[s]^=i[0],t[s+1]^=i[1],t[s+2]^=i[2],t[s+3]^=i[3];return{tag:n,data:c.clamp(t,f)}}};a.misc.hmac=function(e,t){this.W=t=t||a.hash.sha256;var r=[[],[]],n,i=t.prototype.blockSize/32;for(this.B=[new t,new t],e.length>i&&(e=t.hash(e)),n=0;nn||0>r)throw new a.exception.invalid("invalid params to pbkdf2");typeof e=="string"&&(e=a.codec.utf8String.toBits(e)),typeof t=="string"&&(t=a.codec.utf8String.toBits(t)),i=i||a.misc.hmac,e=new i(e);var o,s,c,u,f=[],l=a.bitArray;for(u=1;32*f.length<(n||1);u++){for(i=o=e.encrypt(l.concat(t,[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=a.hash.sha256.hash(this.b.concat(i)),this.K=new a.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,t,o,e.length].concat(e))}break;case"string":t===void 0&&(t=e.length),this.h[s].update([n,this.M++,3,t,o,e.length]),this.h[s].update(e);break;default:u=1}if(u)throw new a.exception.bug("random: addEntropy only supports number, array of numbers or string");this.s[s]+=t,this.i+=t,c===this.A&&(this.isReady()!==this.A&&ir("seeded",Math.max(this.u,this.i)),ir("progress",this.getProgress()))},isReady:function(e){return e=this.R[e!==void 0?e:this.L],this.u&&this.u>=e?this.s[0]>this.$&&new Date().valueOf()>this.X?this.I|this.H:this.H:this.i>=e?this.I|this.A:this.A},getProgress:function(e){return e=this.R[e||this.L],this.u>=e||this.i>e?1:this.i/e},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 a.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(e,t){this.J[e][this.ea++]=t},removeEventListener:function(e,t){var r,n,i=this.J[e],o=[];for(n in i)i.hasOwnProperty(n)&&i[n]===t&&o.push(n);for(r=0;rt&&(e.m[t]=e.m[t]+1|0,!e.m[t]);t++);return e.K.encrypt(e.m)}function Ce(e,t){return function(){t.apply(e,arguments)}}a.random=new a.prng(6);e:try{if(et=typeof ce<"u"&&ce.exports){try{tt=zr("crypto")}catch{tt=null}et=Ye=tt}if(et&&Ye.randomBytes)Re=Ye.randomBytes(128),Re=new Uint32Array(new Uint8Array(Re).buffer),a.random.addEntropy(Re,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(Se=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(Se);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(Se);else break e;a.random.addEntropy(Se,1024,"crypto['getRandomValues']")}}catch(e){typeof window<"u"&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(e))}var Re,Ye,Se,et,tt;a.json={defaults:{v:1,iter:1e4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ha:function(e,t,r,n){r=r||{},n=n||{};var i=a.json,o=i.j({iv:a.random.randomWords(4,0)},i.defaults),s;if(i.j(o,r),r=o.adata,typeof o.salt=="string"&&(o.salt=a.codec.base64.toBits(o.salt)),typeof o.iv=="string"&&(o.iv=a.codec.base64.toBits(o.iv)),!a.mode[o.mode]||!a.cipher[o.cipher]||typeof e=="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=t.iter||t.ts!==64&&t.ts!==96&&t.ts!==128||t.ks!==128&&t.ks!==192&&t.ks!==256||!t.iv||2>t.iv.length||4{"use strict";var Dn=Object.prototype.hasOwnProperty,k="~";function ke(){}Object.create&&(ke.prototype=Object.create(null),new ke().__proto__||(k=!1));function xn(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function Ar(e,t,r,n,i){if(typeof r!="function")throw new TypeError("The listener must be a function");var o=new xn(r,n||e,i),s=k?k+t:t;return e._events[s]?e._events[s].fn?e._events[s]=[e._events[s],o]:e._events[s].push(o):(e._events[s]=o,e._eventsCount++),e}function rt(e,t){--e._eventsCount===0?e._events=new ke:delete e._events[t]}function R(){this._events=new ke,this._eventsCount=0}R.prototype.eventNames=function(){var t=[],r,n;if(this._eventsCount===0)return t;for(n in r=this._events)Dn.call(r,n)&&t.push(k?n.slice(1):n);return Object.getOwnPropertySymbols?t.concat(Object.getOwnPropertySymbols(r)):t};R.prototype.listeners=function(t){var r=k?k+t:t,n=this._events[r];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,o=n.length,s=new Array(o);i{let n=t.isOk()?{type:"Ok",value:t.value}:{type:"Err",value:t.error},i=r.withStackTrace?new Error().stack:void 0;return{data:n,message:e,stack:i}};function oe(e,t,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 c(l){try{f(n.next(l))}catch(h){s(h)}}function u(l){try{f(n.throw(l))}catch(h){s(h)}}function f(l){l.done?o(l.value):i(l.value).then(c,u)}f((n=n.apply(e,t||[])).next())})}function Ft(e){var t=typeof Symbol=="function"&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function G(e){return this instanceof G?(this.v=e,this):new G(e)}function Bt(e,t,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(e,t||[]),i,o=[];return i=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),c("next"),c("throw"),c("return",s),i[Symbol.asyncIterator]=function(){return this},i;function s(p){return function(b){return Promise.resolve(b).then(p,h)}}function c(p,b){n[p]&&(i[p]=function(N){return new Promise(function(J,Q){o.push([p,N,J,Q])>1||u(p,N)})},b&&(i[p]=b(i[p])))}function u(p,b){try{f(n[p](b))}catch(N){m(o[0][3],N)}}function f(p){p.value instanceof G?Promise.resolve(p.value.v).then(l,h):m(o[0][2],p)}function l(p){u("next",p)}function h(p){u("throw",p)}function m(p,b){p(b),o.shift(),o.length&&u(o[0][0],o[0][1])}}function qr(e){var t,r;return t={},n("next"),n("throw",function(i){throw i}),n("return"),t[Symbol.iterator]=function(){return this},t;function n(i,o){t[i]=e[i]?function(s){return(r=!r)?{value:G(e[i](s)),done:!1}:o?o(s):s}:o}}function Gr(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Ft=="function"?Ft(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(o){r[o]=e[o]&&function(s){return new Promise(function(c,u){s=e[o](s),i(c,u,s.done,s.value)})}}function i(o,s,c,u){Promise.resolve(u).then(function(f){o({value:f,done:c})},s)}}var O=class e{constructor(t){this._promise=t}static fromSafePromise(t){let r=t.then(n=>new F(n));return new e(r)}static fromPromise(t,r){let n=t.then(i=>new F(i)).catch(i=>new B(r(i)));return new e(n)}static fromThrowable(t,r){return(...n)=>new e(oe(this,void 0,void 0,function*(){try{return new F(yield t(...n))}catch(i){return new B(r?r(i):i)}}))}static combine(t){return Vr(t)}static combineWithAllErrors(t){return Xr(t)}map(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){return r.isErr()?new B(r.error):new F(yield t(r.value))})))}andThrough(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){if(r.isErr())return new B(r.error);let n=yield t(r.value);return n.isErr()?new B(n.error):new F(r.value)})))}andTee(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){if(r.isErr())return new B(r.error);try{yield t(r.value)}catch{}return new F(r.value)})))}mapErr(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){return r.isOk()?new F(r.value):new B(yield t(r.error))})))}andThen(t){return new e(this._promise.then(r=>{if(r.isErr())return new B(r.error);let n=t(r.value);return n instanceof e?n._promise:n}))}orElse(t){return new e(this._promise.then(r=>oe(this,void 0,void 0,function*(){return r.isErr()?t(r.error):new F(r.value)})))}match(t,r){return this._promise.then(n=>n.match(t,r))}unwrapOr(t){return this._promise.then(r=>r.unwrapOr(t))}safeUnwrap(){return Bt(this,arguments,function*(){return yield G(yield G(yield*qr(Gr(yield G(this._promise.then(r=>r.safeUnwrap()))))))})}then(t,r){return this._promise.then(t,r)}[Symbol.asyncIterator](){return Bt(this,arguments,function*(){let r=yield G(this._promise);return r.isErr()&&(yield yield G(L(r.error))),yield G(r.value)})}},C=e=>new O(Promise.resolve(new F(e))),L=e=>new O(Promise.resolve(new B(e))),Rn=O.fromPromise,Sn=O.fromSafePromise,kn=O.fromThrowable,Wt=e=>{let t=re([]);for(let r of e)if(r.isErr()){t=Z(r.error);break}else t.map(n=>n.push(r.value));return t},Vr=e=>O.fromSafePromise(Promise.all(e)).andThen(Wt),Jt=e=>{let t=re([]);for(let r of e)r.isErr()&&t.isErr()?t.error.push(r.error):r.isErr()&&t.isOk()?t=Z([r.error]):r.isOk()&&t.isOk()&&t.value.push(r.value);return t},Xr=e=>O.fromSafePromise(Promise.all(e)).andThen(Jt),mt;(function(e){function t(i,o){return(...s)=>{try{let c=i(...s);return re(c)}catch(c){return Z(o?o(c):c)}}}e.fromThrowable=t;function r(i){return Wt(i)}e.combine=r;function n(i){return Jt(i)}e.combineWithAllErrors=n})(mt||(mt={}));var re=e=>new F(e);function Z(e){return new B(e)}var F=class{constructor(t){this.value=t}isOk(){return!0}isErr(){return!this.isOk()}map(t){return re(t(this.value))}mapErr(t){return re(this.value)}andThen(t){return t(this.value)}andThrough(t){return t(this.value).map(r=>this.value)}andTee(t){try{t(this.value)}catch{}return re(this.value)}orElse(t){return re(this.value)}asyncAndThen(t){return t(this.value)}asyncAndThrough(t){return t(this.value).map(()=>this.value)}asyncMap(t){return O.fromSafePromise(t(this.value))}unwrapOr(t){return this.value}match(t,r){return t(this.value)}safeUnwrap(){let t=this.value;return function*(){return t}()}_unsafeUnwrap(t){return this.value}_unsafeUnwrapErr(t){throw jt("Called `_unsafeUnwrapErr` on an Ok",this,t)}*[Symbol.iterator](){return this.value}},B=class{constructor(t){this.error=t}isOk(){return!1}isErr(){return!this.isOk()}map(t){return Z(this.error)}mapErr(t){return Z(t(this.error))}andThrough(t){return Z(this.error)}andTee(t){return Z(this.error)}andThen(t){return Z(this.error)}orElse(t){return t(this.error)}asyncAndThen(t){return L(this.error)}asyncAndThrough(t){return L(this.error)}asyncMap(t){return L(this.error)}unwrapOr(t){return t}match(t,r){return r(this.error)}safeUnwrap(){let t=this.error;return function*(){throw yield Z(t),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(t){throw jt("Called `_unsafeUnwrap` on an Err",this,t)}_unsafeUnwrapErr(t){return this.error}*[Symbol.iterator](){let t=this;return yield t,t}},Pn=mt.fromThrowable;var P=class extends Error{constructor(r,n={}){let{cause:i,context:o}=n;super(r,{cause:i});g(this,"context");this.name=this.constructor.name,this.context=o}};var V=class extends P{};var be=class extends V{constructor(){super(...arguments);g(this,"message","An error occured while trying to connect to WebSocket")}};var $=e=>{if(e instanceof Error)return e;let t="[Unable to stringify the thrown value]";try{t=JSON.stringify(e)}catch{}return new Error(t)};var Kr=()=>typeof Deno<"u";var yt=e=>Kr()?new URL(`./worker/${e}.ts`,new URL(".",import.meta.url).href):new URL(import.meta.resolve(`./${e!=="encrypt"?`worker/${e}`:e}.js`));var er=Oe(Ke());var v=new er.default,Y=(e,t)=>(Object.assign(e,t),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:e}),e),Et=(e,t)=>{Y(e,{uploadStatus:2}),self.postMessage({event:"OPERATION_FAILED",error:t})},tr=()=>{v.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),v.once("OPERATION_FAILED",e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})};var ae=class{constructor(t,r){if(!t||t.length!=64)throw Error("Charset must contain 64 characters");this._charset=t,this._noPadding=!!r,this._valid=new RegExp("^["+this._charset.replace("-","\\-")+"]+={0,2}$")}Encode(t){let r=t.byteLength;if(!r)return"";let n=new Uint8Array(t),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(t){if(t=(t||"").replace(/[\s]/g,""),!t)return new ArrayBuffer(0);if(!this._valid.test(t))throw Error("Invalid base64 input sequence");let r=Math.floor(t.length*.75);t[t.length-2]=="="?r-=2:t[t.length-1]=="="&&r--;let n=new Uint8Array(r),i,o,s,c,u=0,f=0;for(;u>4,n[u++]=(o&15)<<4|s>>2,n[u++]=(s&3)<<6|c;return n.buffer}};var rr=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function De(e){return rr.Encode(e)}function xe(e){return rr.Decode(e)}var nn=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function gt(e){return nn.Decode(e)}var Lt=Oe(sr());var X=class extends P{};var ue=class extends X{constructor(){super(...arguments);g(this,"message","Unable to decrypt the provided data")}};var fe=class extends X{constructor(){super(...arguments);g(this,"message","Unable to encrypt the provided data")}};var ar=(e,t)=>{try{let r=typeof t=="string"?t:t.data;return C(xe(Lt.default.decrypt(e,r)))}catch(r){return L(new ue(void 0,{cause:$(r)}))}},cr=(e,t)=>{try{let r=Lt.default.encrypt(e,De(t));return C({algo:0,data:r,iv:JSON.parse(r).iv})}catch(r){return L(new fe(void 0,{cause:$(r)}))}};var ur=(e,t)=>lr(e).andThen(r=>O.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:t.iv},r,t.data),n=>new ue(void 0,{cause:$(n)}))),fr=(e,t)=>lr(e).andThen(r=>{let n=crypto.getRandomValues(new Uint8Array(12));return O.fromPromise(crypto.subtle.encrypt({name:"AES-GCM",iv:n},r,t),i=>new fe(void 0,{cause:$(i)})).andThen(i=>C({algo:1,data:i,iv:n}))}),lr=e=>O.fromPromise(crypto.subtle.importKey("raw",gt(e),{name:"AES-GCM"},!1,["encrypt","decrypt"]),t=>new X("Unable to import cryptography key",{cause:$(t)}));var hr=(e,t)=>t.algo===void 0||t.algo===0?ar(e,t):ur(e,t),dr=(e,t,r)=>r===0?cr(e,t):fr(e,t);var M={},mr=5,un=e=>(v.emit("UPLOAD_CANCELLED",e.success),C(void 0)),fn=(e,t)=>{let r=e.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let i=JSON.parse(n);if(gn(i)){let o=r.shift();if(o){let s=JSON.parse(o);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=xe(s.data)),hr(t.keys.client,s).andThen(c=>{let u=typeof c=="string"?new TextEncoder().encode(c).buffer:c;return i.part===0?(Y(t,{chunksReady:t.chunksReady+1,delAtFirstView:i.del_at_first_view,delay:i.delay,name:i.name,size:i.size,totalChunks:i.total,type:i.type,zipped:i.zipped}),v.emit("DOWNLOAD_STARTED")):Y(t,{chunksReady:t.chunksReady+1}),v.emit("CHUNK_DOWNLOADED",u,i.part),t.chunksReady===i.total?pn(t).andThen(()=>(v.emit("DOWNLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED"),C(void 0))):C(void 0)})}else{let s=new V("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",s),L(s)}}else{let o=new V(i.msg);return v.emit("OPERATION_FAILED",o),L(o)}}else{let i=new V("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",i),L(i)}},ln=(e,t)=>{if(e.success)return e.j===0&&(Y(t,{keys:{client:t.keys.client,server:e.short},actionToken:e.token,queueIndex:e.i}),v.emit("UPLOAD_STARTED")),Y(t,{chunksReady:t.chunksReady+1,createdAt:e.created_at}),v.emit("CHUNK_UPLOADED"),t.chunksReady===t.totalChunks&&(Y(t,{uploadStatus:1}),v.emit("UPLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED")),C(void 0);{let r=new V(e.msg);return v.emit("OPERATION_FAILED",r),L(r)}},hn=(e,t)=>{let r=En(e.data),n;if(r)if(!r.action&&r.msg){let i=new V(r.msg);return v.emit("OPERATION_FAILED",i),L(i)}else"delay"in r?n=ln(r,t):n=un(r);else n=fn(e.data,t);return n},dn=e=>M!==void 0&&M[e]!==void 0&&M[e].readyState===WebSocket.CONNECTING,Ot=e=>M!==void 0&&M[e]!==void 0&&M[e].readyState===WebSocket.OPEN;var pn=e=>{let t;return e.password?t={ended:!0,file_pwd:e.password}:t={ended:!0},Dt(yn(e),e,JSON.stringify(t))},bt=(e,t,r)=>(r.data=De(r.data),Dt(vn(e),e,`${JSON.stringify(t)}XXMOJOXX${JSON.stringify(r)}`)),Dt=(e,t,r)=>Ot(e)?(M[e].send(r),C(void 0)):yr(e).andThen(()=>(M[e].onmessage=n=>hn(n,t),Dt(e,t,r))),yr=(e,t=0)=>(!Ot(e)&&!dn(e)&&(M[e]=new WebSocket(e),v.once("SOCKET_OPERATION_TERMINATED",()=>{M[e].close()}),v.once("OPERATION_FAILED",()=>{v.emit("SOCKET_OPERATION_TERMINATED")}),M[e].onopen=()=>{v.emit("SOCKET_OPENED")},M[e].onclose=()=>{},M[e].onerror=()=>++t<=mr?(console.error(`An error happened while trying to connect to WebSocket ${e}. Trying again. ${t} / ${mr}`),yr(e,t)):(v.emit("SOCKET_ONERROR"),L(new be(`Unable to connect to WebSocket ${e}.`)))),mn(e).andThen(()=>C(e)).orElse(r=>L(r))),mn=e=>O.fromPromise(new Promise((t,r)=>{Ot(e)?t(void 0):(v.once("SOCKET_OPENED",()=>{t(void 0)}),v.on("SOCKET_ONERROR",()=>{r(new be)}))}),t=>$(t));var vr=(e,t)=>{let r=new URL(e);return r.protocol=r.protocol==="http:"?"ws:":"wss:",r.pathname+=t,new URL(r.origin+r.pathname)},yn=e=>vr(new URL(e.serverUrl),"download"+`/${e.keys.server}`).toString(),vn=e=>vr(new URL(e.serverUrl),"upload").toString(),En=e=>{try{let t=JSON.parse(e);if(t&&typeof t=="object")return t}catch{}return!1},gn=e=>typeof e=="object"&&e!==null&&!("msg"in e);var gr=Oe(Ke());var Ln=Oe(Ke());var On={},ds=new gr.default;var bn=()=>Object.values(On).filter(e=>e.uploadStatus===4),wr=e=>Object.keys(bn()).indexOf(e);var _t=Oe(Lr(),1);var Pe=class extends Error{constructor(t){super(t),this.name="TimeoutError"}},Ct=class extends Error{constructor(t){super(),this.name="AbortError",this.message=t}},Or=e=>globalThis.DOMException===void 0?new Ct(e):new DOMException(e),br=e=>{let t=e.reason===void 0?Or("This operation was aborted."):e.reason;return t instanceof Error?t:Or(t)};function Rt(e,t){let{milliseconds:r,fallback:n,message:i,customTimers:o={setTimeout,clearTimeout}}=t,s,u=new Promise((f,l)=>{if(typeof r!="number"||Math.sign(r)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(t.signal){let{signal:m}=t;m.aborted&&l(br(m));let p=()=>{l(br(m))};m.addEventListener("abort",p,{once:!0}),e.finally(()=>{m.removeEventListener("abort",p)})}if(r===Number.POSITIVE_INFINITY){e.then(f,l);return}let h=new Pe;s=o.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(m){l(m)}return}typeof e.cancel=="function"&&e.cancel(),i===!1?f():i instanceof Error?l(i):(h.message=i!=null?i:`Promise timed out after ${r} milliseconds`,l(h))},r),(async()=>{try{f(await e)}catch(m){l(m)}})()}).finally(()=>{u.clear()});return u.clear=()=>{o.clearTimeout.call(void 0,s),s=void 0},u}function St(e,t,r){let n=0,i=e.length;for(;i>0;){let o=Math.trunc(i/2),s=n+o;r(e[s],t)<=0?(n=++s,i-=o+1):i=o}return n}var K,Te=class{constructor(){D(this,K,[])}enqueue(t,r){r={priority:0,...r};let n={priority:r.priority,run:t};if(this.size&&d(this,K)[this.size-1].priority>=r.priority){d(this,K).push(n);return}let i=St(d(this,K),n,(o,s)=>s.priority-o.priority);d(this,K).splice(i,0,n)}dequeue(){let t=d(this,K).shift();return t==null?void 0:t.run}filter(t){return d(this,K).filter(r=>r.priority===t.priority).map(r=>r.run)}get size(){return d(this,K).length}};K=new WeakMap;var le,he,te,Ue,de,Me,j,pe,T,Ne,W,me,ee,Fe,y,Dr,xr,_r,Cr,Rr,nt,kt,Pt,it,Sr,ot,Ie=class extends _t.default{constructor(r){var n,i,o,s;super();D(this,y);D(this,le);D(this,he);D(this,te,0);D(this,Ue);D(this,de);D(this,Me,0);D(this,j);D(this,pe);D(this,T);D(this,Ne);D(this,W,0);D(this,me);D(this,ee);D(this,Fe);g(this,"timeout");if(r={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Te,...r},!(typeof r.intervalCap=="number"&&r.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${(i=(n=r.intervalCap)==null?void 0:n.toString())!=null?i:""}\` (${typeof r.intervalCap})`);if(r.interval===void 0||!(Number.isFinite(r.interval)&&r.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${(s=(o=r.interval)==null?void 0:o.toString())!=null?s:""}\` (${typeof r.interval})`);w(this,le,r.carryoverConcurrencyCount),w(this,he,r.intervalCap===Number.POSITIVE_INFINITY||r.interval===0),w(this,Ue,r.intervalCap),w(this,de,r.interval),w(this,T,new r.queueClass),w(this,Ne,r.queueClass),this.concurrency=r.concurrency,this.timeout=r.timeout,w(this,Fe,r.throwOnTimeout===!0),w(this,ee,r.autoStart===!1)}get concurrency(){return d(this,me)}set concurrency(r){if(!(typeof r=="number"&&r>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${r}\` (${typeof r})`);w(this,me,r),x(this,y,it).call(this)}async add(r,n={}){return n={timeout:this.timeout,throwOnTimeout:d(this,Fe),...n},new Promise((i,o)=>{d(this,T).enqueue(async()=>{var s;Ge(this,W)._++,Ge(this,te)._++;try{(s=n.signal)==null||s.throwIfAborted();let c=r({signal:n.signal});n.timeout&&(c=Rt(Promise.resolve(c),{milliseconds:n.timeout})),n.signal&&(c=Promise.race([c,x(this,y,Sr).call(this,n.signal)]));let u=await c;i(u),this.emit("completed",u)}catch(c){if(c instanceof Pe&&!n.throwOnTimeout){i();return}o(c),this.emit("error",c)}finally{x(this,y,_r).call(this)}},n),this.emit("add"),x(this,y,nt).call(this)})}async addAll(r,n){return Promise.all(r.map(async i=>this.add(i,n)))}start(){return d(this,ee)?(w(this,ee,!1),x(this,y,it).call(this),this):this}pause(){w(this,ee,!0)}clear(){w(this,T,new(d(this,Ne)))}async onEmpty(){d(this,T).size!==0&&await x(this,y,ot).call(this,"empty")}async onSizeLessThan(r){d(this,T).sized(this,T).size{x(this,y,Cr).call(this)},n)),!0}return!1},nt=function(){if(d(this,T).size===0)return d(this,j)&&clearInterval(d(this,j)),w(this,j,void 0),this.emit("empty"),d(this,W)===0&&this.emit("idle"),!1;if(!d(this,ee)){let r=!d(this,y,Rr);if(d(this,y,Dr)&&d(this,y,xr)){let n=d(this,T).dequeue();return n?(this.emit("active"),n(),r&&x(this,y,kt).call(this),!0):!1}}return!1},kt=function(){d(this,he)||d(this,j)!==void 0||(w(this,j,setInterval(()=>{x(this,y,Pt).call(this)},d(this,de))),w(this,Me,Date.now()+d(this,de)))},Pt=function(){d(this,te)===0&&d(this,W)===0&&d(this,j)&&(clearInterval(d(this,j)),w(this,j,void 0)),w(this,te,d(this,le)?d(this,W):0),x(this,y,it).call(this)},it=function(){for(;x(this,y,nt).call(this););},Sr=async function(r){return new Promise((n,i)=>{r.addEventListener("abort",()=>{i(r.reason)},{once:!0})})},ot=async function(r,n){return new Promise(i=>{let o=()=>{n&&!n()||(this.off(r,o),i())};this.on(r,o)})};var st=class extends P{};var Be=class extends st{constructor(){super(...arguments);g(this,"message","Parameter must be defined")}};var kr=!1,Tt=navigator.hardwareConcurrency||1,Je=new Ie({concurrency:Tt,autoStart:!1}),We=0,at=!1,je,Pr=new Worker(yt("encrypt"),{type:"module"});self.onmessage=e=>{if(kr||(tr(),kr=!0,je=e.data.args.lufiFile,v.once("UPLOAD_STARTED",()=>{self.postMessage({event:"UPLOAD_STARTED"})}),v.on("CHUNK_UPLOADED",()=>{self.postMessage({event:"CHUNK_UPLOADED"}),We--,Je.isPaused&&!at&&We{self.postMessage({event:"UPLOAD_COMPLETE"})}),v.on("FILE_UPDATED",Y)),e.data.args.chunk)return e.data.args.lufiFile=je,_n(e.data,wr(je.keys.client)).mapErr(t=>{Et(je,t)});e.data.action===0?(at=!0,Ir()):e.data.action===2?(at=!1,Tr()):Et(je,new Be)};var _n=(e,t)=>{let{lufiFile:r,algo:n}=e.args;if(e.args.chunk&&n)e.args.chunk.index===0?dr(r.keys.client,e.args.chunk.buffer,n).map(i=>{bt(r,{total:r.totalChunks,part:0,size:r.size,name:r.name,type:r.type,delay:r.delay,del_at_first_view:r.delAtFirstView,zipped:r.zipped,id:null,i:t,file_pwd:r.password},i),We++}):Je.add(()=>{if(e.args.chunk){let i=()=>(We++,new Promise(o=>{Pr.onmessage=s=>{o(bt(r,{total:r.totalChunks,part:s.data.chunkIndex,size:r.size,name:r.name,type:r.type,delay:r.delay,del_at_first_view:r.delAtFirstView,zipped:r.zipped,id:r.keys.server,i:t,file_pwd:r.password},s.data.encryptedData))}}));Pr.postMessage(e,[e.args.chunk.buffer]),!Je.isPaused&&(at||We===Tt)&&Ir(),i()}});else return L(new Be("algo must be defined"));return C(void 0)},Ir=()=>{Je.pause(),self.postMessage({event:"JOB_PAUSED"})},Tr=()=>{Je.start(),self.postMessage({event:"JOB_RESUMED"})}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbHVmaS1zamNsQDEuMC44L25vZGVfbW9kdWxlcy9sdWZpLXNqY2wvc2pjbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vZXZlbnRlbWl0dGVyM0A1LjAuMS9ub2RlX21vZHVsZXMvZXZlbnRlbWl0dGVyMy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbmV2ZXJ0aHJvd0A4LjEuMS9ub2RlX21vZHVsZXMvbmV2ZXJ0aHJvdy9kaXN0L2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9lcnJvci9iYXNlLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWNvbm5lY3Rpb24tZXJyb3IudHMiLCAiLi4vLi4vc3JjL3V0aWxzLnRzIiwgIi4uLy4uL3NyYy93b3JrZXIvc2hhcmVkLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9hcnJheWJ1ZmZlci1lbmNvZGluZ0AxLjEuMC9ub2RlX21vZHVsZXMvYXJyYXlidWZmZXItZW5jb2Rpbmcvc3JjL2Jhc2U2NC9lbmNvZGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vYXJyYXlidWZmZXItZW5jb2RpbmdAMS4xLjAvbm9kZV9tb2R1bGVzL2FycmF5YnVmZmVyLWVuY29kaW5nL3NyYy9iYXNlNjQvc3RhbmRhcmQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2FycmF5YnVmZmVyLWVuY29kaW5nQDEuMS4wL25vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci1lbmNvZGluZy9zcmMvYmFzZTY0L3VybC50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by9zamNsLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50cyIsICIuLi8uLi9zcmMvZXJyb3IvY3J5cHRvL2VuY3J5cHRpb24tZXJyb3IudHMiLCAiLi4vLi4vc3JjL2FwaS9jcnlwdG8vd2ViLnRzIiwgIi4uLy4uL3NyYy9hcGkvY3J5cHRvLnRzIiwgIi4uLy4uL3NyYy9hcGkvd2Vic29ja2V0LnRzIiwgIi4uLy4uL3NyYy9hcGkvbHVmaS50cyIsICIuLi8uLi9zcmMvZW50aXRpZXMvbHVmaS1qb2IudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50ZW1pdHRlcjNANS4wLjEvbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXgubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9wLXRpbWVvdXRANi4xLjMvbm9kZV9tb2R1bGVzL3AtdGltZW91dC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vcC1xdWV1ZUA4LjAuMS9ub2RlX21vZHVsZXMvcC1xdWV1ZS9kaXN0L2xvd2VyLWJvdW5kLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9wLXF1ZXVlQDguMC4xL25vZGVfbW9kdWxlcy9wLXF1ZXVlL2Rpc3QvcHJpb3JpdHktcXVldWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL3AtcXVldWVAOC4wLjEvbm9kZV9tb2R1bGVzL3AtcXVldWUvZGlzdC9pbmRleC5qcyIsICIuLi8uLi9zcmMvZXJyb3Ivd29ya2VyL3dvcmtlci1lcnJvci50cyIsICIuLi8uLi9zcmMvZXJyb3Ivd29ya2VyL3dvcmtlci11bmRlZmluZWQtcGFyYW1ldGVyLWVycm9yLnRzIiwgIi4uLy4uL3NyYy93b3JrZXIvdXBsb2FkLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO3ZhciBzamNsPXtjaXBoZXI6e30saGFzaDp7fSxrZXlleGNoYW5nZTp7fSxtb2RlOnt9LG1pc2M6e30sY29kZWM6e30sZXhjZXB0aW9uOntjb3JydXB0OmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkNPUlJVUFQ6IFwiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPWF9LGludmFsaWQ6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiSU5WQUxJRDogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0sYnVnOmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkJVRzogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0sbm90UmVhZHk6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiTk9UIFJFQURZOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfX19O1xuc2pjbC5jaXBoZXIuYWVzPWZ1bmN0aW9uKGEpe3RoaXMud1swXVswXVswXXx8dGhpcy5DKCk7dmFyIGIsYyxkLGUsZj10aGlzLndbMF1bNF0sZz10aGlzLndbMV07Yj1hLmxlbmd0aDt2YXIgaD0xO2lmKDQhPT1iJiY2IT09YiYmOCE9PWIpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJpbnZhbGlkIGFlcyBrZXkgc2l6ZVwiKTt0aGlzLmI9W2Q9YS5zbGljZSgwKSxlPVtdXTtmb3IoYT1iO2E8NCpiKzI4O2ErKyl7Yz1kW2EtMV07aWYoMD09PWElYnx8OD09PWImJjQ9PT1hJWIpYz1mW2M+Pj4yNF08PDI0XmZbYz4+MTYmMjU1XTw8MTZeZltjPj44JjI1NV08PDheZltjJjI1NV0sMD09PWElYiYmKGM9Yzw8OF5jPj4+MjReaDw8MjQsaD1oPDwxXjI4MyooaD4+NykpO2RbYV09ZFthLWJdXmN9Zm9yKGI9MDthO2IrKyxhLS0pYz1kW2ImMz9hOmEtNF0sZVtiXT00Pj1hfHw0PmI/YzpnWzBdW2ZbYz4+PjI0XV1eZ1sxXVtmW2M+PjE2JjI1NV1dXmdbMl1bZltjPj44JjI1NV1dXmdbM11bZltjJlxuMjU1XV19O1xuc2pjbC5jaXBoZXIuYWVzLnByb3RvdHlwZT17ZW5jcnlwdDpmdW5jdGlvbihhKXtyZXR1cm4gYWEodGhpcyxhLDApfSxkZWNyeXB0OmZ1bmN0aW9uKGEpe3JldHVybiBhYSh0aGlzLGEsMSl9LHc6W1tbXSxbXSxbXSxbXSxbXV0sW1tdLFtdLFtdLFtdLFtdXV0sQzpmdW5jdGlvbigpe3ZhciBhPXRoaXMud1swXSxiPXRoaXMud1sxXSxjPWFbNF0sZD1iWzRdLGUsZixnLGg9W10saz1bXSxuLGwsbSxwO2ZvcihlPTA7MHgxMDA+ZTtlKyspa1soaFtlXT1lPDwxXjI4MyooZT4+NykpXmVdPWU7Zm9yKGY9Zz0wOyFjW2ZdO2ZePW58fDEsZz1rW2ddfHwxKWZvcihtPWdeZzw8MV5nPDwyXmc8PDNeZzw8NCxtPW0+PjhebSYyNTVeOTksY1tmXT1tLGRbbV09ZixsPWhbZT1oW249aFtmXV1dLHA9MHgxMDEwMTAxKmxeMHgxMDAwMSplXjB4MTAxKm5eMHgxMDEwMTAwKmYsbD0weDEwMSpoW21dXjB4MTAxMDEwMCptLGU9MDs0PmU7ZSsrKWFbZV1bZl09bD1sPDwyNF5sPj4+OCxiW2VdW21dPXA9cDw8MjRecD4+Pjg7Zm9yKGU9XG4wOzU+ZTtlKyspYVtlXT1hW2VdLnNsaWNlKDApLGJbZV09YltlXS5zbGljZSgwKX19O1xuZnVuY3Rpb24gYWEoYSxiLGMpe2lmKDQhPT1iLmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgYWVzIGJsb2NrIHNpemVcIik7dmFyIGQ9YS5iW2NdLGU9YlswXV5kWzBdLGY9YltjPzM6MV1eZFsxXSxnPWJbMl1eZFsyXTtiPWJbYz8xOjNdXmRbM107dmFyIGgsayxuLGw9ZC5sZW5ndGgvNC0yLG0scD00LHo9WzAsMCwwLDBdO2g9YS53W2NdO2E9aFswXTt2YXIgQT1oWzFdLEM9aFsyXSxCPWhbM10sRD1oWzRdO2ZvcihtPTA7bTxsO20rKyloPWFbZT4+PjI0XV5BW2Y+PjE2JjI1NV1eQ1tnPj44JjI1NV1eQltiJjI1NV1eZFtwXSxrPWFbZj4+PjI0XV5BW2c+PjE2JjI1NV1eQ1tiPj44JjI1NV1eQltlJjI1NV1eZFtwKzFdLG49YVtnPj4+MjRdXkFbYj4+MTYmMjU1XV5DW2U+PjgmMjU1XV5CW2YmMjU1XV5kW3ArMl0sYj1hW2I+Pj4yNF1eQVtlPj4xNiYyNTVdXkNbZj4+OCYyNTVdXkJbZyYyNTVdXmRbcCszXSxwKz00LGU9aCxmPWssZz1uO2ZvcihtPVxuMDs0Pm07bSsrKXpbYz8zJi1tOm1dPURbZT4+PjI0XTw8MjReRFtmPj4xNiYyNTVdPDwxNl5EW2c+PjgmMjU1XTw8OF5EW2ImMjU1XV5kW3ArK10saD1lLGU9ZixmPWcsZz1iLGI9aDtyZXR1cm4gen1cbnNqY2wuYml0QXJyYXk9e2JpdFNsaWNlOmZ1bmN0aW9uKGEsYixjKXthPXNqY2wuYml0QXJyYXkuWShhLnNsaWNlKGIvMzIpLDMyLShiJjMxKSkuc2xpY2UoMSk7cmV0dXJuIHZvaWQgMD09PWM/YTpzamNsLmJpdEFycmF5LmNsYW1wKGEsYy1iKX0sZXh0cmFjdDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TWF0aC5mbG9vcigtYi1jJjMxKTtyZXR1cm4oKGIrYy0xXmIpJi0zMj9hW2IvMzJ8MF08PDMyLWReYVtiLzMyKzF8MF0+Pj5kOmFbYi8zMnwwXT4+PmQpJigxPDxjKS0xfSxjb25jYXQ6ZnVuY3Rpb24oYSxiKXtpZigwPT09YS5sZW5ndGh8fDA9PT1iLmxlbmd0aClyZXR1cm4gYS5jb25jYXQoYik7dmFyIGM9YVthLmxlbmd0aC0xXSxkPXNqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChjKTtyZXR1cm4gMzI9PT1kP2EuY29uY2F0KGIpOnNqY2wuYml0QXJyYXkuWShiLGQsY3wwLGEuc2xpY2UoMCxhLmxlbmd0aC0xKSl9LGJpdExlbmd0aDpmdW5jdGlvbihhKXt2YXIgYj1hLmxlbmd0aDtyZXR1cm4gMD09PVxuYj8wOjMyKihiLTEpK3NqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChhW2ItMV0pfSxjbGFtcDpmdW5jdGlvbihhLGIpe2lmKDMyKmEubGVuZ3RoPGIpcmV0dXJuIGE7YT1hLnNsaWNlKDAsTWF0aC5jZWlsKGIvMzIpKTt2YXIgYz1hLmxlbmd0aDtiPWImMzE7MDxjJiZiJiYoYVtjLTFdPXNqY2wuYml0QXJyYXkucGFydGlhbChiLGFbYy0xXSYyMTQ3NDgzNjQ4Pj5iLTEsMSkpO3JldHVybiBhfSxwYXJ0aWFsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMzI9PT1hP2I6KGM/YnwwOmI8PDMyLWEpKzB4MTAwMDAwMDAwMDAqYX0sZ2V0UGFydGlhbDpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChhLzB4MTAwMDAwMDAwMDApfHwzMn0sZXF1YWw6ZnVuY3Rpb24oYSxiKXtpZihzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKSE9PXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGIpKXJldHVybiExO3ZhciBjPTAsZDtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKWN8PWFbZF1eYltkXTtyZXR1cm4gMD09PVxuY30sWTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZTtlPTA7Zm9yKHZvaWQgMD09PWQmJihkPVtdKTszMjw9YjtiLT0zMilkLnB1c2goYyksYz0wO2lmKDA9PT1iKXJldHVybiBkLmNvbmNhdChhKTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWQucHVzaChjfGFbZV0+Pj5iKSxjPWFbZV08PDMyLWI7ZT1hLmxlbmd0aD9hW2EubGVuZ3RoLTFdOjA7YT1zamNsLmJpdEFycmF5LmdldFBhcnRpYWwoZSk7ZC5wdXNoKHNqY2wuYml0QXJyYXkucGFydGlhbChiK2EmMzEsMzI8YithP2M6ZC5wb3AoKSwxKSk7cmV0dXJuIGR9LFA6ZnVuY3Rpb24oYSxiKXtyZXR1cm5bYVswXV5iWzBdLGFbMV1eYlsxXSxhWzJdXmJbMl0sYVszXV5iWzNdXX0sYnl0ZXN3YXBNOmZ1bmN0aW9uKGEpe3ZhciBiLGM7Zm9yKGI9MDtiPGEubGVuZ3RoOysrYiljPWFbYl0sYVtiXT1jPj4+MjR8Yz4+PjgmMHhmZjAwfChjJjB4ZmYwMCk8PDh8Yzw8MjQ7cmV0dXJuIGF9fTtcbnNqY2wuY29kZWMudXRmOFN0cmluZz17ZnJvbUJpdHM6ZnVuY3Rpb24oYSl7dmFyIGI9XCJcIixjPXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpLGQsZTtmb3IoZD0wO2Q8Yy84O2QrKykwPT09KGQmMykmJihlPWFbZC80XSksYis9U3RyaW5nLmZyb21DaGFyQ29kZShlPj4+OD4+Pjg+Pj44KSxlPDw9ODtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShiKSl9LHRvQml0czpmdW5jdGlvbihhKXthPXVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhKSk7dmFyIGI9W10sYyxkPTA7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKylkPWQ8PDh8YS5jaGFyQ29kZUF0KGMpLDM9PT0oYyYzKSYmKGIucHVzaChkKSxkPTApO2MmMyYmYi5wdXNoKHNqY2wuYml0QXJyYXkucGFydGlhbCg4KihjJjMpLGQpKTtyZXR1cm4gYn19O1xuc2pjbC5jb2RlYy5oZXg9e2Zyb21CaXRzOmZ1bmN0aW9uKGEpe3ZhciBiPVwiXCIsYztmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWIrPSgoYVtjXXwwKSsweGYwMDAwMDAwMDAwMCkudG9TdHJpbmcoMTYpLnN1YnN0cig0KTtyZXR1cm4gYi5zdWJzdHIoMCxzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKS80KX0sdG9CaXRzOmZ1bmN0aW9uKGEpe3ZhciBiLGM9W10sZDthPWEucmVwbGFjZSgvXFxzfDB4L2csXCJcIik7ZD1hLmxlbmd0aDthPWErXCIwMDAwMDAwMFwiO2ZvcihiPTA7YjxhLmxlbmd0aDtiKz04KWMucHVzaChwYXJzZUludChhLnN1YnN0cihiLDgpLDE2KV4wKTtyZXR1cm4gc2pjbC5iaXRBcnJheS5jbGFtcChjLDQqZCl9fTtcbnNqY2wuY29kZWMuYmFzZTY0PXtTOlwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLGZyb21CaXRzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cIlwiLGU9MCxmPXNqY2wuY29kZWMuYmFzZTY0LlMsZz0wLGg9c2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSk7YyYmKGY9Zi5zdWJzdHIoMCw2MikrXCItX1wiKTtmb3IoYz0wOzYqZC5sZW5ndGg8aDspZCs9Zi5jaGFyQXQoKGdeYVtjXT4+PmUpPj4+MjYpLDY+ZT8oZz1hW2NdPDw2LWUsZSs9MjYsYysrKTooZzw8PTYsZS09Nik7Zm9yKDtkLmxlbmd0aCYzJiYhYjspZCs9XCI9XCI7cmV0dXJuIGR9LHRvQml0czpmdW5jdGlvbihhLGIpe2E9YS5yZXBsYWNlKC9cXHN8PS9nLFwiXCIpO3ZhciBjPVtdLGQsZT0wLGY9c2pjbC5jb2RlYy5iYXNlNjQuUyxnPTAsaDtiJiYoZj1mLnN1YnN0cigwLDYyKStcIi1fXCIpO2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspe2g9Zi5pbmRleE9mKGEuY2hhckF0KGQpKTtcbmlmKDA+aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcInRoaXMgaXNuJ3QgYmFzZTY0IVwiKTsyNjxlPyhlLT0yNixjLnB1c2goZ15oPj4+ZSksZz1oPDwzMi1lKTooZSs9NixnXj1oPDwzMi1lKX1lJjU2JiZjLnB1c2goc2pjbC5iaXRBcnJheS5wYXJ0aWFsKGUmNTYsZywxKSk7cmV0dXJuIGN9fTtzamNsLmNvZGVjLmJhc2U2NHVybD17ZnJvbUJpdHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHNqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKGEsMSwxKX0sdG9CaXRzOmZ1bmN0aW9uKGEpe3JldHVybiBzamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYSwxKX19O3NqY2wuaGFzaC5zaGEyNTY9ZnVuY3Rpb24oYSl7dGhpcy5iWzBdfHx0aGlzLkMoKTthPyh0aGlzLmc9YS5nLnNsaWNlKDApLHRoaXMuZj1hLmYuc2xpY2UoMCksdGhpcy5jPWEuYyk6dGhpcy5yZXNldCgpfTtzamNsLmhhc2guc2hhMjU2Lmhhc2g9ZnVuY3Rpb24oYSl7cmV0dXJuKG5ldyBzamNsLmhhc2guc2hhMjU2KS51cGRhdGUoYSkuZmluYWxpemUoKX07XG5zamNsLmhhc2guc2hhMjU2LnByb3RvdHlwZT17YmxvY2tTaXplOjUxMixyZXNldDpmdW5jdGlvbigpe3RoaXMuZz10aGlzLm8uc2xpY2UoMCk7dGhpcy5mPVtdO3RoaXMuYz0wO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYoYT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGEpKTt2YXIgYixjPXRoaXMuZj1zamNsLmJpdEFycmF5LmNvbmNhdCh0aGlzLmYsYSk7Yj10aGlzLmM7YT10aGlzLmM9YitzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKTtpZigweDFmZmZmZmZmZmZmZmZmPGEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJDYW5ub3QgaGFzaCBtb3JlIHRoYW4gMl41MyAtIDEgYml0c1wiKTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXt2YXIgZD1uZXcgVWludDMyQXJyYXkoYyksZT0wO2ZvcihiPTUxMitiLSg1MTIrYiYweDFmZik7Yjw9YTtiKz01MTIpdGhpcy5sKGQuc3ViYXJyYXkoMTYqZSxcbjE2KihlKzEpKSksZSs9MTtjLnNwbGljZSgwLDE2KmUpfWVsc2UgZm9yKGI9NTEyK2ItKDUxMitiJjB4MWZmKTtiPD1hO2IrPTUxMil0aGlzLmwoYy5zcGxpY2UoMCwxNikpO3JldHVybiB0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5mLGM9dGhpcy5nLGI9c2pjbC5iaXRBcnJheS5jb25jYXQoYixbc2pjbC5iaXRBcnJheS5wYXJ0aWFsKDEsMSldKTtmb3IoYT1iLmxlbmd0aCsyO2EmMTU7YSsrKWIucHVzaCgwKTtiLnB1c2goTWF0aC5mbG9vcih0aGlzLmMvMHgxMDAwMDAwMDApKTtmb3IoYi5wdXNoKHRoaXMuY3wwKTtiLmxlbmd0aDspdGhpcy5sKGIuc3BsaWNlKDAsMTYpKTt0aGlzLnJlc2V0KCk7cmV0dXJuIGN9LG86W10sYjpbXSxDOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gMHgxMDAwMDAwMDAqKGEtTWF0aC5mbG9vcihhKSl8MH1mb3IodmFyIGI9MCxjPTIsZCxlOzY0PmI7YysrKXtlPSEwO2ZvcihkPTI7ZCpkPD1jO2QrKylpZigwPT09YyVkKXtlPVxuITE7YnJlYWt9ZSYmKDg+YiYmKHRoaXMub1tiXT1hKE1hdGgucG93KGMsLjUpKSksdGhpcy5iW2JdPWEoTWF0aC5wb3coYywxLzMpKSxiKyspfX0sbDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT10aGlzLmcsZj10aGlzLmIsZz1lWzBdLGg9ZVsxXSxrPWVbMl0sbj1lWzNdLGw9ZVs0XSxtPWVbNV0scD1lWzZdLHo9ZVs3XTtmb3IoYj0wOzY0PmI7YisrKTE2PmI/Yz1hW2JdOihjPWFbYisxJjE1XSxkPWFbYisxNCYxNV0sYz1hW2ImMTVdPShjPj4+N15jPj4+MTheYz4+PjNeYzw8MjVeYzw8MTQpKyhkPj4+MTdeZD4+PjE5XmQ+Pj4xMF5kPDwxNV5kPDwxMykrYVtiJjE1XSthW2IrOSYxNV18MCksYz1jK3orKGw+Pj42Xmw+Pj4xMV5sPj4+MjVebDw8MjZebDw8MjFebDw8NykrKHBebCYobV5wKSkrZltiXSx6PXAscD1tLG09bCxsPW4rY3wwLG49ayxrPWgsaD1nLGc9YysoaCZrXm4mKGheaykpKyhoPj4+Ml5oPj4+MTNeaD4+PjIyXmg8PDMwXmg8PDE5Xmg8PDEwKXwwO2VbMF09ZVswXStnfFxuMDtlWzFdPWVbMV0raHwwO2VbMl09ZVsyXStrfDA7ZVszXT1lWzNdK258MDtlWzRdPWVbNF0rbHwwO2VbNV09ZVs1XSttfDA7ZVs2XT1lWzZdK3B8MDtlWzddPWVbN10renwwfX07c2pjbC5oYXNoLnNoYTUxMj1mdW5jdGlvbihhKXt0aGlzLmJbMF18fHRoaXMuQygpO2E/KHRoaXMuZz1hLmcuc2xpY2UoMCksdGhpcy5mPWEuZi5zbGljZSgwKSx0aGlzLmM9YS5jKTp0aGlzLnJlc2V0KCl9O3NqY2wuaGFzaC5zaGE1MTIuaGFzaD1mdW5jdGlvbihhKXtyZXR1cm4obmV3IHNqY2wuaGFzaC5zaGE1MTIpLnVwZGF0ZShhKS5maW5hbGl6ZSgpfTtcbnNqY2wuaGFzaC5zaGE1MTIucHJvdG90eXBlPXtibG9ja1NpemU6MTAyNCxyZXNldDpmdW5jdGlvbigpe3RoaXMuZz10aGlzLm8uc2xpY2UoMCk7dGhpcy5mPVtdO3RoaXMuYz0wO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYoYT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGEpKTt2YXIgYixjPXRoaXMuZj1zamNsLmJpdEFycmF5LmNvbmNhdCh0aGlzLmYsYSk7Yj10aGlzLmM7YT10aGlzLmM9YitzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKTtpZigweDFmZmZmZmZmZmZmZmZmPGEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJDYW5ub3QgaGFzaCBtb3JlIHRoYW4gMl41MyAtIDEgYml0c1wiKTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXt2YXIgZD1uZXcgVWludDMyQXJyYXkoYyksZT0wO2ZvcihiPTEwMjQrYi0oMTAyNCtiJjEwMjMpO2I8PWE7Yis9MTAyNCl0aGlzLmwoZC5zdWJhcnJheSgzMipcbmUsMzIqKGUrMSkpKSxlKz0xO2Muc3BsaWNlKDAsMzIqZSl9ZWxzZSBmb3IoYj0xMDI0K2ItKDEwMjQrYiYxMDIzKTtiPD1hO2IrPTEwMjQpdGhpcy5sKGMuc3BsaWNlKDAsMzIpKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuZixjPXRoaXMuZyxiPXNqY2wuYml0QXJyYXkuY29uY2F0KGIsW3NqY2wuYml0QXJyYXkucGFydGlhbCgxLDEpXSk7Zm9yKGE9Yi5sZW5ndGgrNDthJjMxO2ErKyliLnB1c2goMCk7Yi5wdXNoKDApO2IucHVzaCgwKTtiLnB1c2goTWF0aC5mbG9vcih0aGlzLmMvMHgxMDAwMDAwMDApKTtmb3IoYi5wdXNoKHRoaXMuY3wwKTtiLmxlbmd0aDspdGhpcy5sKGIuc3BsaWNlKDAsMzIpKTt0aGlzLnJlc2V0KCk7cmV0dXJuIGN9LG86W10saWE6WzEyMzcyMjMyLDEzMjgxMDgzLDk3NjI4NTksMTkxNDYwOSwxNTEwNjc2OSw0MDkwOTExLDQzMDgzMzEsODI2NjEwNV0sYjpbXSxrYTpbMjY2NjAxOCwxNTY4OTE2NSw1MDYxNDIzLDkwMzQ2ODQsXG40NzY0OTg0LDM4MDk1MywxNjU4Nzc5LDcxNzY0NzIsMTk3MTg2LDczNjg2MzgsMTQ5ODc5MTYsMTY3NTc5ODYsODA5NjExMSwxNDgwMzY5LDEzMDQ2MzI1LDY4OTExNTYsMTU4MTMzMzAsNTE4NzA0Myw5MjI5NzQ5LDExMzEyMjI5LDI4MTg2NzcsMTA5Mzc0NzUsNDMyNDMwOCwxMTM1NTQxLDY3NDE5MzEsMTE4MDkyOTYsMTY0NTgwNDcsMTU2NjY5MTYsMTEwNDY4NTAsNjk4MTQ5LDIyOTk5OSw5NDU3NzYsMTM3NzQ4NDQsMjU0MTg2MiwxMjg1NjA0NSw5ODEwOTExLDExNDk0MzY2LDc4NDQ1MjAsMTU1NzY4MDYsODUzMzMwNywxNTc5NTA0NCw0MzM3NjY1LDE2MjkxNzI5LDU1NTM3MTIsMTU2ODQxMjAsNjY2MjQxNiw3NDEzODAyLDEyMzA4OTIwLDEzODE2MDA4LDQzMDM2OTksOTM2NjQyNSwxMDE3NjY4MCwxMzE5NTg3NSw0Mjk1MzcxLDY1NDYyOTEsMTE3MTI2NzUsMTU3MDg5MjQsMTUxOTQ1NiwxNTc3MjUzMCw2NTY4NDI4LDY0OTU3ODQsODU2ODI5NywxMzAwNzEyNSw3NDkyMzk1LDI1MTUzNTYsXG4xMjYzMjU4MywxNDc0MDI1NCw3MjYyNTg0LDE1MzU5MzAsMTMxNDYyNzgsMTYzMjE5NjYsMTg1MzIxMSwyOTQyNzYsMTMwNTEwMjcsMTMyMjE1NjQsMTA1MTk4MCw0MDgwMzEwLDY2NTE0MzQsMTQwODg5NDAsNDY3NTYwN10sQzpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIDB4MTAwMDAwMDAwKihhLU1hdGguZmxvb3IoYSkpfDB9ZnVuY3Rpb24gYihhKXtyZXR1cm4gMHgxMDAwMDAwMDAwMCooYS1NYXRoLmZsb29yKGEpKSYyNTV9Zm9yKHZhciBjPTAsZD0yLGUsZjs4MD5jO2QrKyl7Zj0hMDtmb3IoZT0yO2UqZTw9ZDtlKyspaWYoMD09PWQlZSl7Zj0hMTticmVha31mJiYoOD5jJiYodGhpcy5vWzIqY109YShNYXRoLnBvdyhkLC41KSksdGhpcy5vWzIqYysxXT1iKE1hdGgucG93KGQsLjUpKTw8MjR8dGhpcy5pYVtjXSksdGhpcy5iWzIqY109YShNYXRoLnBvdyhkLDEvMykpLHRoaXMuYlsyKmMrMV09YihNYXRoLnBvdyhkLDEvMykpPDwyNHx0aGlzLmthW2NdLGMrKyl9fSxsOmZ1bmN0aW9uKGEpe3ZhciBiLFxuYyxkPXRoaXMuZyxlPXRoaXMuYixmPWRbMF0sZz1kWzFdLGg9ZFsyXSxrPWRbM10sbj1kWzRdLGw9ZFs1XSxtPWRbNl0scD1kWzddLHo9ZFs4XSxBPWRbOV0sQz1kWzEwXSxCPWRbMTFdLEQ9ZFsxMl0sUD1kWzEzXSxlYT1kWzE0XSxRPWRbMTVdLHQ7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBVaW50MzJBcnJheSl7dD1BcnJheSgxNjApO2Zvcih2YXIgcj0wOzMyPnI7cisrKXRbcl09YVtyXX1lbHNlIHQ9YTt2YXIgcj1mLHU9ZyxHPWgsRT1rLEg9bixGPWwsVj1tLEk9cCx3PXosdj1BLFI9QyxKPUIsUz1ELEs9UCxXPWVhLEw9UTtmb3IoYT0wOzgwPmE7YSsrKXtpZigxNj5hKWI9dFsyKmFdLGM9dFsyKmErMV07ZWxzZXtjPXRbMiooYS0xNSldO3ZhciBxPXRbMiooYS0xNSkrMV07Yj0ocTw8MzF8Yz4+PjEpXihxPDwyNHxjPj4+OCleYz4+Pjc7dmFyIHg9KGM8PDMxfHE+Pj4xKV4oYzw8MjR8cT4+PjgpXihjPDwyNXxxPj4+Nyk7Yz10WzIqKGEtMildO3ZhciB5PXRbMiooYS0yKSsxXSxcbnE9KHk8PDEzfGM+Pj4xOSleKGM8PDN8eT4+PjI5KV5jPj4+Nix5PShjPDwxM3x5Pj4+MTkpXih5PDwzfGM+Pj4yOSleKGM8PDI2fHk+Pj42KSxYPXRbMiooYS03KV0sWT10WzIqKGEtMTYpXSxNPXRbMiooYS0xNikrMV07Yz14K3RbMiooYS03KSsxXTtiPWIrWCsoYz4+PjA8eD4+PjA/MTowKTtjKz15O2IrPXErKGM+Pj4wPHk+Pj4wPzE6MCk7Yys9TTtiKz1ZKyhjPj4+MDxNPj4+MD8xOjApfXRbMiphXT1ifD0wO3RbMiphKzFdPWN8PTA7dmFyIFg9dyZSXn53JlMsZmE9diZKXn52JksseT1yJkdeciZIXkcmSCxqYT11JkVedSZGXkUmRixZPSh1PDw0fHI+Pj4yOCleKHI8PDMwfHU+Pj4yKV4ocjw8MjV8dT4+PjcpLE09KHI8PDR8dT4+PjI4KV4odTw8MzB8cj4+PjIpXih1PDwyNXxyPj4+Nyksa2E9ZVsyKmFdLGdhPWVbMiphKzFdLHE9TCsoKHc8PDE4fHY+Pj4xNCleKHc8PDE0fHY+Pj4xOCleKHY8PDIzfHc+Pj45KSkseD1XKygodjw8MTh8dz4+PjE0KV4odjw8MTR8dz4+PjE4KV4odzw8XG4yM3x2Pj4+OSkpKyhxPj4+MDxMPj4+MD8xOjApLHE9cStmYSx4PXgrKFgrKHE+Pj4wPGZhPj4+MD8xOjApKSxxPXErZ2EseD14KyhrYSsocT4+PjA8Z2E+Pj4wPzE6MCkpLHE9cStjfDAseD14KyhiKyhxPj4+MDxjPj4+MD8xOjApKTtjPU0ramE7Yj1ZK3krKGM+Pj4wPE0+Pj4wPzE6MCk7Vz1TO0w9SztTPVI7Sz1KO1I9dztKPXY7dj1JK3F8MDt3PVYreCsodj4+PjA8ST4+PjA/MTowKXwwO1Y9SDtJPUY7SD1HO0Y9RTtHPXI7RT11O3U9cStjfDA7cj14K2IrKHU+Pj4wPHE+Pj4wPzE6MCl8MH1nPWRbMV09Zyt1fDA7ZFswXT1mK3IrKGc+Pj4wPHU+Pj4wPzE6MCl8MDtrPWRbM109aytFfDA7ZFsyXT1oK0crKGs+Pj4wPEU+Pj4wPzE6MCl8MDtsPWRbNV09bCtGfDA7ZFs0XT1uK0grKGw+Pj4wPEY+Pj4wPzE6MCl8MDtwPWRbN109cCtJfDA7ZFs2XT1tK1YrKHA+Pj4wPEk+Pj4wPzE6MCl8MDtBPWRbOV09QSt2fDA7ZFs4XT16K3crKEE+Pj4wPHY+Pj4wPzE6MCl8MDtCPWRbMTFdPUIrSnxcbjA7ZFsxMF09QytSKyhCPj4+MDxKPj4+MD8xOjApfDA7UD1kWzEzXT1QK0t8MDtkWzEyXT1EK1MrKFA+Pj4wPEs+Pj4wPzE6MCl8MDtRPWRbMTVdPVErTHwwO2RbMTRdPWVhK1crKFE+Pj4wPEw+Pj4wPzE6MCl8MH19O1xuc2pjbC5tb2RlLmNjbT17bmFtZTpcImNjbVwiLEY6W10sbGlzdGVuUHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7c2pjbC5tb2RlLmNjbS5GLnB1c2goYSl9LHVuTGlzdGVuUHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7YT1zamNsLm1vZGUuY2NtLkYuaW5kZXhPZihhKTstMTxhJiZzamNsLm1vZGUuY2NtLkYuc3BsaWNlKGEsMSl9LGRhOmZ1bmN0aW9uKGEpe3ZhciBiPXNqY2wubW9kZS5jY20uRi5zbGljZSgpLGM7Zm9yKGM9MDtjPGIubGVuZ3RoO2MrPTEpYltjXShhKX0sZW5jcnlwdDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc9Yi5zbGljZSgwKSxoPXNqY2wuYml0QXJyYXksaz1oLmJpdExlbmd0aChjKS84LG49aC5iaXRMZW5ndGgoZykvODtlPWV8fDY0O2Q9ZHx8W107aWYoNz5rKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiY2NtOiBpdiBtdXN0IGJlIGF0IGxlYXN0IDcgYnl0ZXNcIik7Zm9yKGY9Mjs0PmYmJm4+Pj44KmY7ZisrKTtmPDE1LWsmJihmPTE1LWspO2M9aC5jbGFtcChjLFxuOCooMTUtZikpO2I9c2pjbC5tb2RlLmNjbS5VKGEsYixjLGQsZSxmKTtnPXNqY2wubW9kZS5jY20uVihhLGcsYyxiLGUsZik7cmV0dXJuIGguY29uY2F0KGcuZGF0YSxnLnRhZyl9LGRlY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXtlPWV8fDY0O2Q9ZHx8W107dmFyIGY9c2pjbC5iaXRBcnJheSxnPWYuYml0TGVuZ3RoKGMpLzgsaD1mLmJpdExlbmd0aChiKSxrPWYuY2xhbXAoYixoLWUpLG49Zi5iaXRTbGljZShiLGgtZSksaD0oaC1lKS84O2lmKDc+Zyl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImNjbTogaXYgbXVzdCBiZSBhdCBsZWFzdCA3IGJ5dGVzXCIpO2ZvcihiPTI7ND5iJiZoPj4+OCpiO2IrKyk7YjwxNS1nJiYoYj0xNS1nKTtjPWYuY2xhbXAoYyw4KigxNS1iKSk7az1zamNsLm1vZGUuY2NtLlYoYSxrLGMsbixlLGIpO2E9c2pjbC5tb2RlLmNjbS5VKGEsay5kYXRhLGMsZCxlLGIpO2lmKCFmLmVxdWFsKGsudGFnLGEpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5jb3JydXB0KFwiY2NtOiB0YWcgZG9lc24ndCBtYXRjaFwiKTtcbnJldHVybiBrLmRhdGF9LG1hOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1bXSxoPXNqY2wuYml0QXJyYXksaz1oLlA7ZD1baC5wYXJ0aWFsKDgsKGIubGVuZ3RoPzY0OjApfGQtMjw8MnxmLTEpXTtkPWguY29uY2F0KGQsYyk7ZFszXXw9ZTtkPWEuZW5jcnlwdChkKTtpZihiLmxlbmd0aClmb3IoYz1oLmJpdExlbmd0aChiKS84LDY1Mjc5Pj1jP2c9W2gucGFydGlhbCgxNixjKV06MHhmZmZmZmZmZj49YyYmKGc9aC5jb25jYXQoW2gucGFydGlhbCgxNiw2NTUzNCldLFtjXSkpLGc9aC5jb25jYXQoZyxiKSxiPTA7YjxnLmxlbmd0aDtiKz00KWQ9YS5lbmNyeXB0KGsoZCxnLnNsaWNlKGIsYis0KS5jb25jYXQoWzAsMCwwXSkpKTtyZXR1cm4gZH0sVTpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9c2pjbC5iaXRBcnJheSxoPWcuUDtlLz04O2lmKGUlMnx8ND5lfHwxNjxlKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiY2NtOiBpbnZhbGlkIHRhZyBsZW5ndGhcIik7XG5pZigweGZmZmZmZmZmPGQubGVuZ3RofHwweGZmZmZmZmZmPGIubGVuZ3RoKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJjY206IGNhbid0IGRlYWwgd2l0aCA0R2lCIG9yIG1vcmUgZGF0YVwiKTtjPXNqY2wubW9kZS5jY20ubWEoYSxkLGMsZSxnLmJpdExlbmd0aChiKS84LGYpO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKz00KWM9YS5lbmNyeXB0KGgoYyxiLnNsaWNlKGQsZCs0KS5jb25jYXQoWzAsMCwwXSkpKTtyZXR1cm4gZy5jbGFtcChjLDgqZSl9LFY6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnLGg9c2pjbC5iaXRBcnJheTtnPWguUDt2YXIgaz1iLmxlbmd0aCxuPWguYml0TGVuZ3RoKGIpLGw9ay81MCxtPWw7Yz1oLmNvbmNhdChbaC5wYXJ0aWFsKDgsZi0xKV0sYykuY29uY2F0KFswLDAsMF0pLnNsaWNlKDAsNCk7ZD1oLmJpdFNsaWNlKGcoZCxhLmVuY3J5cHQoYykpLDAsZSk7aWYoIWspcmV0dXJue3RhZzpkLGRhdGE6W119O2ZvcihnPTA7ZzxrO2crPTQpZz5sJiYoc2pjbC5tb2RlLmNjbS5kYShnL1xuayksbCs9bSksY1szXSsrLGU9YS5lbmNyeXB0KGMpLGJbZ11ePWVbMF0sYltnKzFdXj1lWzFdLGJbZysyXV49ZVsyXSxiW2crM11ePWVbM107cmV0dXJue3RhZzpkLGRhdGE6aC5jbGFtcChiLG4pfX19O3NqY2wubWlzYy5obWFjPWZ1bmN0aW9uKGEsYil7dGhpcy5XPWI9Ynx8c2pjbC5oYXNoLnNoYTI1Njt2YXIgYz1bW10sW11dLGQsZT1iLnByb3RvdHlwZS5ibG9ja1NpemUvMzI7dGhpcy5CPVtuZXcgYixuZXcgYl07YS5sZW5ndGg+ZSYmKGE9Yi5oYXNoKGEpKTtmb3IoZD0wO2Q8ZTtkKyspY1swXVtkXT1hW2RdXjkwOTUyMjQ4NixjWzFdW2RdPWFbZF1eMTU0OTU1NjgyODt0aGlzLkJbMF0udXBkYXRlKGNbMF0pO3RoaXMuQlsxXS51cGRhdGUoY1sxXSk7dGhpcy5PPW5ldyBiKHRoaXMuQlswXSl9O1xuc2pjbC5taXNjLmhtYWMucHJvdG90eXBlLmVuY3J5cHQ9c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLm1hYz1mdW5jdGlvbihhKXtpZih0aGlzLlopdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJlbmNyeXB0IG9uIGFscmVhZHkgdXBkYXRlZCBobWFjIGNhbGxlZCFcIik7dGhpcy51cGRhdGUoYSk7cmV0dXJuIHRoaXMuZGlnZXN0KGEpfTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLk89bmV3IHRoaXMuVyh0aGlzLkJbMF0pO3RoaXMuWj0hMX07c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLlo9ITA7dGhpcy5PLnVwZGF0ZShhKX07c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuTy5maW5hbGl6ZSgpLGE9KG5ldyB0aGlzLlcodGhpcy5CWzFdKSkudXBkYXRlKGEpLmZpbmFsaXplKCk7dGhpcy5yZXNldCgpO3JldHVybiBhfTtcbnNqY2wubWlzYy5wYmtkZjI9ZnVuY3Rpb24oYSxiLGMsZCxlKXtjPWN8fDFFNDtpZigwPmR8fDA+Yyl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgcGFyYW1zIHRvIHBia2RmMlwiKTtcInN0cmluZ1wiPT09dHlwZW9mIGEmJihhPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYSkpO1wic3RyaW5nXCI9PT10eXBlb2YgYiYmKGI9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhiKSk7ZT1lfHxzamNsLm1pc2MuaG1hYzthPW5ldyBlKGEpO3ZhciBmLGcsaCxrLG49W10sbD1zamNsLmJpdEFycmF5O2ZvcihrPTE7MzIqbi5sZW5ndGg8KGR8fDEpO2srKyl7ZT1mPWEuZW5jcnlwdChsLmNvbmNhdChiLFtrXSkpO2ZvcihnPTE7ZzxjO2crKylmb3IoZj1hLmVuY3J5cHQoZiksaD0wO2g8Zi5sZW5ndGg7aCsrKWVbaF1ePWZbaF07bj1uLmNvbmNhdChlKX1kJiYobj1sLmNsYW1wKG4sZCkpO3JldHVybiBufTtcbnNqY2wucHJuZz1mdW5jdGlvbihhKXt0aGlzLmg9W25ldyBzamNsLmhhc2guc2hhMjU2XTt0aGlzLnM9WzBdO3RoaXMuTj0wO3RoaXMuRz17fTt0aGlzLk09MDt0aGlzLlQ9e307dGhpcy5YPXRoaXMuaT10aGlzLnU9dGhpcy5mYT0wO3RoaXMuYj1bMCwwLDAsMCwwLDAsMCwwXTt0aGlzLm09WzAsMCwwLDBdO3RoaXMuSz12b2lkIDA7dGhpcy5MPWE7dGhpcy5EPSExO3RoaXMuSj17cHJvZ3Jlc3M6e30sc2VlZGVkOnt9fTt0aGlzLkE9dGhpcy5lYT0wO3RoaXMuSD0xO3RoaXMuST0yO3RoaXMuYWE9MHgxMDAwMDt0aGlzLlI9WzAsNDgsNjQsOTYsMTI4LDE5MiwweDEwMCwzODQsNTEyLDc2OCwxMDI0XTt0aGlzLmJhPTNFNDt0aGlzLiQ9ODB9O1xuc2pjbC5wcm5nLnByb3RvdHlwZT17cmFuZG9tV29yZHM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkO2Q9dGhpcy5pc1JlYWR5KGIpO3ZhciBlO2lmKGQ9PT10aGlzLkEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLm5vdFJlYWR5KFwiZ2VuZXJhdG9yIGlzbid0IHNlZWRlZFwiKTtpZihkJnRoaXMuSSl7ZD0hKGQmdGhpcy5IKTtlPVtdO3ZhciBmPTAsZzt0aGlzLlg9ZVswXT0obmV3IERhdGUpLnZhbHVlT2YoKSt0aGlzLmJhO2ZvcihnPTA7MTY+ZztnKyspZS5wdXNoKDB4MTAwMDAwMDAwKk1hdGgucmFuZG9tKCl8MCk7Zm9yKGc9MDtnPHRoaXMuaC5sZW5ndGgmJihlPWUuY29uY2F0KHRoaXMuaFtnXS5maW5hbGl6ZSgpKSxmKz10aGlzLnNbZ10sdGhpcy5zW2ddPTAsZHx8ISh0aGlzLk4mMTw8ZykpO2crKyk7dGhpcy5OPj0xPDx0aGlzLmgubGVuZ3RoJiYodGhpcy5oLnB1c2gobmV3IHNqY2wuaGFzaC5zaGEyNTYpLHRoaXMucy5wdXNoKDApKTt0aGlzLmktPWY7Zj50aGlzLnUmJih0aGlzLnU9XG5mKTt0aGlzLk4rKzt0aGlzLmI9c2pjbC5oYXNoLnNoYTI1Ni5oYXNoKHRoaXMuYi5jb25jYXQoZSkpO3RoaXMuSz1uZXcgc2pjbC5jaXBoZXIuYWVzKHRoaXMuYik7Zm9yKGQ9MDs0PmQmJih0aGlzLm1bZF09dGhpcy5tW2RdKzF8MCwhdGhpcy5tW2RdKTtkKyspO31mb3IoZD0wO2Q8YTtkKz00KTA9PT0oZCsxKSV0aGlzLmFhJiZiYSh0aGlzKSxlPU4odGhpcyksYy5wdXNoKGVbMF0sZVsxXSxlWzJdLGVbM10pO2JhKHRoaXMpO3JldHVybiBjLnNsaWNlKDAsYSl9LHNldERlZmF1bHRQYXJhbm9pYTpmdW5jdGlvbihhLGIpe2lmKDA9PT1hJiZcIlNldHRpbmcgcGFyYW5vaWE9MCB3aWxsIHJ1aW4geW91ciBzZWN1cml0eTsgdXNlIGl0IG9ubHkgZm9yIHRlc3RpbmdcIiE9PWIpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJTZXR0aW5nIHBhcmFub2lhPTAgd2lsbCBydWluIHlvdXIgc2VjdXJpdHk7IHVzZSBpdCBvbmx5IGZvciB0ZXN0aW5nXCIpO3RoaXMuTD1hfSxhZGRFbnRyb3B5OmZ1bmN0aW9uKGEsXG5iLGMpe2M9Y3x8XCJ1c2VyXCI7dmFyIGQsZSxmPShuZXcgRGF0ZSkudmFsdWVPZigpLGc9dGhpcy5HW2NdLGg9dGhpcy5pc1JlYWR5KCksaz0wO2Q9dGhpcy5UW2NdO3ZvaWQgMD09PWQmJihkPXRoaXMuVFtjXT10aGlzLmZhKyspO3ZvaWQgMD09PWcmJihnPXRoaXMuR1tjXT0wKTt0aGlzLkdbY109KHRoaXMuR1tjXSsxKSV0aGlzLmgubGVuZ3RoO3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSBcIm51bWJlclwiOnZvaWQgMD09PWImJihiPTEpO3RoaXMuaFtnXS51cGRhdGUoW2QsdGhpcy5NKyssMSxiLGYsMSxhfDBdKTticmVhaztjYXNlIFwib2JqZWN0XCI6Yz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk7aWYoXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiPT09Yyl7ZT1bXTtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWUucHVzaChhW2NdKTthPWV9ZWxzZSBmb3IoXCJbb2JqZWN0IEFycmF5XVwiIT09YyYmKGs9MSksYz0wO2M8YS5sZW5ndGgmJiFrO2MrKylcIm51bWJlclwiIT09dHlwZW9mIGFbY10mJlxuKGs9MSk7aWYoIWspe2lmKHZvaWQgMD09PWIpZm9yKGM9Yj0wO2M8YS5sZW5ndGg7YysrKWZvcihlPWFbY107MDxlOyliKyssZT1lPj4+MTt0aGlzLmhbZ10udXBkYXRlKFtkLHRoaXMuTSsrLDIsYixmLGEubGVuZ3RoXS5jb25jYXQoYSkpfWJyZWFrO2Nhc2UgXCJzdHJpbmdcIjp2b2lkIDA9PT1iJiYoYj1hLmxlbmd0aCk7dGhpcy5oW2ddLnVwZGF0ZShbZCx0aGlzLk0rKywzLGIsZixhLmxlbmd0aF0pO3RoaXMuaFtnXS51cGRhdGUoYSk7YnJlYWs7ZGVmYXVsdDprPTF9aWYoayl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwicmFuZG9tOiBhZGRFbnRyb3B5IG9ubHkgc3VwcG9ydHMgbnVtYmVyLCBhcnJheSBvZiBudW1iZXJzIG9yIHN0cmluZ1wiKTt0aGlzLnNbZ10rPWI7dGhpcy5pKz1iO2g9PT10aGlzLkEmJih0aGlzLmlzUmVhZHkoKSE9PXRoaXMuQSYmY2EoXCJzZWVkZWRcIixNYXRoLm1heCh0aGlzLnUsdGhpcy5pKSksY2EoXCJwcm9ncmVzc1wiLHRoaXMuZ2V0UHJvZ3Jlc3MoKSkpfSxcbmlzUmVhZHk6ZnVuY3Rpb24oYSl7YT10aGlzLlJbdm9pZCAwIT09YT9hOnRoaXMuTF07cmV0dXJuIHRoaXMudSYmdGhpcy51Pj1hP3RoaXMuc1swXT50aGlzLiQmJihuZXcgRGF0ZSkudmFsdWVPZigpPnRoaXMuWD90aGlzLkl8dGhpcy5IOnRoaXMuSDp0aGlzLmk+PWE/dGhpcy5JfHRoaXMuQTp0aGlzLkF9LGdldFByb2dyZXNzOmZ1bmN0aW9uKGEpe2E9dGhpcy5SW2E/YTp0aGlzLkxdO3JldHVybiB0aGlzLnU+PWE/MTp0aGlzLmk+YT8xOnRoaXMuaS9hfSxzdGFydENvbGxlY3RvcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5EKXt0aGlzLmE9e2xvYWRUaW1lQ29sbGVjdG9yOk8odGhpcyx0aGlzLmxhKSxtb3VzZUNvbGxlY3RvcjpPKHRoaXMsdGhpcy5uYSksa2V5Ym9hcmRDb2xsZWN0b3I6Tyh0aGlzLHRoaXMuamEpLGFjY2VsZXJvbWV0ZXJDb2xsZWN0b3I6Tyh0aGlzLHRoaXMuY2EpLHRvdWNoQ29sbGVjdG9yOk8odGhpcyx0aGlzLnBhKX07aWYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsXG50aGlzLmEubG9hZFRpbWVDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5hLm1vdXNlQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsdGhpcy5hLmtleWJvYXJkQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImRldmljZW1vdGlvblwiLHRoaXMuYS5hY2NlbGVyb21ldGVyQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHRoaXMuYS50b3VjaENvbGxlY3RvciwhMSk7ZWxzZSBpZihkb2N1bWVudC5hdHRhY2hFdmVudClkb2N1bWVudC5hdHRhY2hFdmVudChcIm9ubG9hZFwiLHRoaXMuYS5sb2FkVGltZUNvbGxlY3RvciksZG9jdW1lbnQuYXR0YWNoRXZlbnQoXCJvbm1vdXNlbW92ZVwiLHRoaXMuYS5tb3VzZUNvbGxlY3RvciksZG9jdW1lbnQuYXR0YWNoRXZlbnQoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3Rvcik7ZWxzZSB0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwiY2FuJ3QgYXR0YWNoIGV2ZW50XCIpO1xudGhpcy5EPSEwfX0sc3RvcENvbGxlY3RvcnM6ZnVuY3Rpb24oKXt0aGlzLkQmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcj8od2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsdGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuYS5tb3VzZUNvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJkZXZpY2Vtb3Rpb25cIix0aGlzLmEuYWNjZWxlcm9tZXRlckNvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIix0aGlzLmEudG91Y2hDb2xsZWN0b3IsITEpKTpkb2N1bWVudC5kZXRhY2hFdmVudCYmKGRvY3VtZW50LmRldGFjaEV2ZW50KFwib25sb2FkXCIsdGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yKSxkb2N1bWVudC5kZXRhY2hFdmVudChcIm9ubW91c2Vtb3ZlXCIsXG50aGlzLmEubW91c2VDb2xsZWN0b3IpLGRvY3VtZW50LmRldGFjaEV2ZW50KFwia2V5cHJlc3NcIix0aGlzLmEua2V5Ym9hcmRDb2xsZWN0b3IpKSx0aGlzLkQ9ITEpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dGhpcy5KW2FdW3RoaXMuZWErK109Yn0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT10aGlzLkpbYV0sZj1bXTtmb3IoZCBpbiBlKWUuaGFzT3duUHJvcGVydHkoZCkmJmVbZF09PT1iJiZmLnB1c2goZCk7Zm9yKGM9MDtjPGYubGVuZ3RoO2MrKylkPWZbY10sZGVsZXRlIGVbZF19LGphOmZ1bmN0aW9uKCl7VCh0aGlzLDEpfSxuYTpmdW5jdGlvbihhKXt2YXIgYixjO3RyeXtiPWEueHx8YS5jbGllbnRYfHxhLm9mZnNldFh8fDAsYz1hLnl8fGEuY2xpZW50WXx8YS5vZmZzZXRZfHwwfWNhdGNoKGQpe2M9Yj0wfTAhPWImJjAhPWMmJnRoaXMuYWRkRW50cm9weShbYixjXSwyLFwibW91c2VcIik7VCh0aGlzLDApfSxwYTpmdW5jdGlvbihhKXthPVxuYS50b3VjaGVzWzBdfHxhLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuYWRkRW50cm9weShbYS5wYWdlWHx8YS5jbGllbnRYLGEucGFnZVl8fGEuY2xpZW50WV0sMSxcInRvdWNoXCIpO1QodGhpcywwKX0sbGE6ZnVuY3Rpb24oKXtUKHRoaXMsMil9LGNhOmZ1bmN0aW9uKGEpe2E9YS5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5Lnh8fGEuYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eS55fHxhLmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkuejtpZih3aW5kb3cub3JpZW50YXRpb24pe3ZhciBiPXdpbmRvdy5vcmllbnRhdGlvbjtcIm51bWJlclwiPT09dHlwZW9mIGImJnRoaXMuYWRkRW50cm9weShiLDEsXCJhY2NlbGVyb21ldGVyXCIpfWEmJnRoaXMuYWRkRW50cm9weShhLDIsXCJhY2NlbGVyb21ldGVyXCIpO1QodGhpcywwKX19O1xuZnVuY3Rpb24gY2EoYSxiKXt2YXIgYyxkPXNqY2wucmFuZG9tLkpbYV0sZT1bXTtmb3IoYyBpbiBkKWQuaGFzT3duUHJvcGVydHkoYykmJmUucHVzaChkW2NdKTtmb3IoYz0wO2M8ZS5sZW5ndGg7YysrKWVbY10oYil9ZnVuY3Rpb24gVChhLGIpe1widW5kZWZpbmVkXCIhPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucGVyZm9ybWFuY2UmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiB3aW5kb3cucGVyZm9ybWFuY2Uubm93P2EuYWRkRW50cm9weSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCksYixcImxvYWR0aW1lXCIpOmEuYWRkRW50cm9weSgobmV3IERhdGUpLnZhbHVlT2YoKSxiLFwibG9hZHRpbWVcIil9ZnVuY3Rpb24gYmEoYSl7YS5iPU4oYSkuY29uY2F0KE4oYSkpO2EuSz1uZXcgc2pjbC5jaXBoZXIuYWVzKGEuYil9ZnVuY3Rpb24gTihhKXtmb3IodmFyIGI9MDs0PmImJihhLm1bYl09YS5tW2JdKzF8MCwhYS5tW2JdKTtiKyspO3JldHVybiBhLksuZW5jcnlwdChhLm0pfVxuZnVuY3Rpb24gTyhhLGIpe3JldHVybiBmdW5jdGlvbigpe2IuYXBwbHkoYSxhcmd1bWVudHMpfX1zamNsLnJhbmRvbT1uZXcgc2pjbC5wcm5nKDYpO1xuYTp0cnl7dmFyIFUsZGEsWixoYTtpZihoYT1cInVuZGVmaW5lZFwiIT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMpe3ZhciBpYTt0cnl7aWE9cmVxdWlyZShcImNyeXB0b1wiKX1jYXRjaChhKXtpYT1udWxsfWhhPWRhPWlhfWlmKGhhJiZkYS5yYW5kb21CeXRlcylVPWRhLnJhbmRvbUJ5dGVzKDEyOCksVT1uZXcgVWludDMyQXJyYXkoKG5ldyBVaW50OEFycmF5KFUpKS5idWZmZXIpLHNqY2wucmFuZG9tLmFkZEVudHJvcHkoVSwxMDI0LFwiY3J5cHRvWydyYW5kb21CeXRlcyddXCIpO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgVWludDMyQXJyYXkpe1o9bmV3IFVpbnQzMkFycmF5KDMyKTtpZih3aW5kb3cuY3J5cHRvJiZ3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyl3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhaKTtlbHNlIGlmKHdpbmRvdy5tc0NyeXB0byYmd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyl3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFopO1xuZWxzZSBicmVhayBhO3NqY2wucmFuZG9tLmFkZEVudHJvcHkoWiwxMDI0LFwiY3J5cHRvWydnZXRSYW5kb21WYWx1ZXMnXVwiKX19Y2F0Y2goYSl7XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5jb25zb2xlJiYoY29uc29sZS5sb2coXCJUaGVyZSB3YXMgYW4gZXJyb3IgY29sbGVjdGluZyBlbnRyb3B5IGZyb20gdGhlIGJyb3dzZXI6XCIpLGNvbnNvbGUubG9nKGEpKX1cbnNqY2wuanNvbj17ZGVmYXVsdHM6e3Y6MSxpdGVyOjFFNCxrczoxMjgsdHM6NjQsbW9kZTpcImNjbVwiLGFkYXRhOlwiXCIsY2lwaGVyOlwiYWVzXCJ9LGhhOmZ1bmN0aW9uKGEsYixjLGQpe2M9Y3x8e307ZD1kfHx7fTt2YXIgZT1zamNsLmpzb24sZj1lLmooe2l2OnNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDQsMCl9LGUuZGVmYXVsdHMpLGc7ZS5qKGYsYyk7Yz1mLmFkYXRhO1wic3RyaW5nXCI9PT10eXBlb2YgZi5zYWx0JiYoZi5zYWx0PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhmLnNhbHQpKTtcInN0cmluZ1wiPT09dHlwZW9mIGYuaXYmJihmLml2PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhmLml2KSk7aWYoIXNqY2wubW9kZVtmLm1vZGVdfHwhc2pjbC5jaXBoZXJbZi5jaXBoZXJdfHxcInN0cmluZ1wiPT09dHlwZW9mIGEmJjEwMD49Zi5pdGVyfHw2NCE9PWYudHMmJjk2IT09Zi50cyYmMTI4IT09Zi50c3x8MTI4IT09Zi5rcyYmMTkyIT09Zi5rcyYmMHgxMDAhPT1mLmtzfHwyPmYuaXYubGVuZ3RofHxcbjQ8Zi5pdi5sZW5ndGgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGVuY3J5cHQ6IGludmFsaWQgcGFyYW1ldGVyc1wiKTtcInN0cmluZ1wiPT09dHlwZW9mIGE/KGc9c2pjbC5taXNjLmNhY2hlZFBia2RmMihhLGYpLGE9Zy5rZXkuc2xpY2UoMCxmLmtzLzMyKSxmLnNhbHQ9Zy5zYWx0KTpzamNsLmVjYyYmYSBpbnN0YW5jZW9mIHNqY2wuZWNjLmVsR2FtYWwucHVibGljS2V5JiYoZz1hLmtlbSgpLGYua2VtdGFnPWcudGFnLGE9Zy5rZXkuc2xpY2UoMCxmLmtzLzMyKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBiJiYoYj1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGIpKTtcInN0cmluZ1wiPT09dHlwZW9mIGMmJihmLmFkYXRhPWM9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhjKSk7Zz1uZXcgc2pjbC5jaXBoZXJbZi5jaXBoZXJdKGEpO2UuaihkLGYpO2Qua2V5PWE7Zi5jdD1cImNjbVwiPT09Zi5tb2RlJiZzamNsLmFycmF5QnVmZmVyJiZzamNsLmFycmF5QnVmZmVyLmNjbSYmXG5iIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/c2pjbC5hcnJheUJ1ZmZlci5jY20uZW5jcnlwdChnLGIsZi5pdixjLGYudHMpOnNqY2wubW9kZVtmLm1vZGVdLmVuY3J5cHQoZyxiLGYuaXYsYyxmLnRzKTtyZXR1cm4gZn0sZW5jcnlwdDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1zamNsLmpzb24sZj1lLmhhLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gZS5lbmNvZGUoZil9LGdhOmZ1bmN0aW9uKGEsYixjLGQpe2M9Y3x8e307ZD1kfHx7fTt2YXIgZT1zamNsLmpzb247Yj1lLmooZS5qKGUuaih7fSxlLmRlZmF1bHRzKSxiKSxjLCEwKTt2YXIgZixnO2Y9Yi5hZGF0YTtcInN0cmluZ1wiPT09dHlwZW9mIGIuc2FsdCYmKGIuc2FsdD1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYi5zYWx0KSk7XCJzdHJpbmdcIj09PXR5cGVvZiBiLml2JiYoYi5pdj1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYi5pdikpO2lmKCFzamNsLm1vZGVbYi5tb2RlXXx8IXNqY2wuY2lwaGVyW2IuY2lwaGVyXXx8XCJzdHJpbmdcIj09PVxudHlwZW9mIGEmJjEwMD49Yi5pdGVyfHw2NCE9PWIudHMmJjk2IT09Yi50cyYmMTI4IT09Yi50c3x8MTI4IT09Yi5rcyYmMTkyIT09Yi5rcyYmMHgxMDAhPT1iLmtzfHwhYi5pdnx8Mj5iLml2Lmxlbmd0aHx8NDxiLml2Lmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZGVjcnlwdDogaW52YWxpZCBwYXJhbWV0ZXJzXCIpO1wic3RyaW5nXCI9PT10eXBlb2YgYT8oZz1zamNsLm1pc2MuY2FjaGVkUGJrZGYyKGEsYiksYT1nLmtleS5zbGljZSgwLGIua3MvMzIpLGIuc2FsdD1nLnNhbHQpOnNqY2wuZWNjJiZhIGluc3RhbmNlb2Ygc2pjbC5lY2MuZWxHYW1hbC5zZWNyZXRLZXkmJihhPWEudW5rZW0oc2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGIua2VtdGFnKSkuc2xpY2UoMCxiLmtzLzMyKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBmJiYoZj1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGYpKTtnPW5ldyBzamNsLmNpcGhlcltiLmNpcGhlcl0oYSk7Zj1cImNjbVwiPT09XG5iLm1vZGUmJnNqY2wuYXJyYXlCdWZmZXImJnNqY2wuYXJyYXlCdWZmZXIuY2NtJiZiLmN0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/c2pjbC5hcnJheUJ1ZmZlci5jY20uZGVjcnlwdChnLGIuY3QsYi5pdixiLnRhZyxmLGIudHMpOnNqY2wubW9kZVtiLm1vZGVdLmRlY3J5cHQoZyxiLmN0LGIuaXYsZixiLnRzKTtlLmooZCxiKTtkLmtleT1hO3JldHVybiAxPT09Yy5yYXc/ZjpzamNsLmNvZGVjLnV0ZjhTdHJpbmcuZnJvbUJpdHMoZil9LGRlY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9c2pjbC5qc29uO3JldHVybiBlLmdhKGEsZS5kZWNvZGUoYiksYyxkKX0sZW5jb2RlOmZ1bmN0aW9uKGEpe3ZhciBiLGM9XCJ7XCIsZD1cIlwiO2ZvcihiIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShiKSl7aWYoIWIubWF0Y2goL15bYS16MC05XSskL2kpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBlbmNvZGU6IGludmFsaWQgcHJvcGVydHkgbmFtZVwiKTtjKz1kKydcIicrXG5iKydcIjonO2Q9XCIsXCI7c3dpdGNoKHR5cGVvZiBhW2JdKXtjYXNlIFwibnVtYmVyXCI6Y2FzZSBcImJvb2xlYW5cIjpjKz1hW2JdO2JyZWFrO2Nhc2UgXCJzdHJpbmdcIjpjKz0nXCInK2VzY2FwZShhW2JdKSsnXCInO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpjKz0nXCInK3NqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKGFbYl0sMCkrJ1wiJzticmVhaztkZWZhdWx0OnRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJqc29uIGVuY29kZTogdW5zdXBwb3J0ZWQgdHlwZVwiKTt9fXJldHVybiBjK1wifVwifSxkZWNvZGU6ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoL1xccy9nLFwiXCIpO2lmKCFhLm1hdGNoKC9eXFx7LipcXH0kLykpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGRlY29kZTogdGhpcyBpc24ndCBqc29uIVwiKTthPWEucmVwbGFjZSgvXlxce3xcXH0kL2csXCJcIikuc3BsaXQoLywvKTt2YXIgYj17fSxjLGQ7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7aWYoIShkPWFbY10ubWF0Y2goL15cXHMqKD86KFtcIiddPykoW2Etel1bYS16MC05XSopXFwxKVxccyo6XFxzKig/OigtP1xcZCspfFwiKFthLXowLTkrXFwvJSpfLkA9XFwtXSopXCJ8KHRydWV8ZmFsc2UpKSQvaSkpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBkZWNvZGU6IHRoaXMgaXNuJ3QganNvbiFcIik7XG5udWxsIT1kWzNdP2JbZFsyXV09cGFyc2VJbnQoZFszXSwxMCk6bnVsbCE9ZFs0XT9iW2RbMl1dPWRbMl0ubWF0Y2goL14oY3R8YWRhdGF8c2FsdHxpdikkLyk/c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGRbNF0pOnVuZXNjYXBlKGRbNF0pOm51bGwhPWRbNV0mJihiW2RbMl1dPVwidHJ1ZVwiPT09ZFs1XSl9cmV0dXJuIGJ9LGo6ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWEmJihhPXt9KTtpZih2b2lkIDA9PT1iKXJldHVybiBhO2Zvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkpe2lmKGMmJnZvaWQgMCE9PWFbZF0mJmFbZF0hPT1iW2RdKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwicmVxdWlyZWQgcGFyYW1ldGVyIG92ZXJyaWRkZW5cIik7YVtkXT1iW2RdfXJldHVybiBhfSxyYTpmdW5jdGlvbihhLGIpe3ZhciBjPXt9LGQ7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZhW2RdIT09YltkXSYmKGNbZF09YVtkXSk7cmV0dXJuIGN9LHFhOmZ1bmN0aW9uKGEsXG5iKXt2YXIgYz17fSxkO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKyspdm9pZCAwIT09YVtiW2RdXSYmKGNbYltkXV09YVtiW2RdXSk7cmV0dXJuIGN9fTtzamNsLmVuY3J5cHQ9c2pjbC5qc29uLmVuY3J5cHQ7c2pjbC5kZWNyeXB0PXNqY2wuanNvbi5kZWNyeXB0O3NqY2wubWlzYy5vYT17fTtzamNsLm1pc2MuY2FjaGVkUGJrZGYyPWZ1bmN0aW9uKGEsYil7dmFyIGM9c2pjbC5taXNjLm9hLGQ7Yj1ifHx7fTtkPWIuaXRlcnx8MUUzO2M9Y1thXT1jW2FdfHx7fTtkPWNbZF09Y1tkXXx8e2ZpcnN0U2FsdDpiLnNhbHQmJmIuc2FsdC5sZW5ndGg/Yi5zYWx0LnNsaWNlKDApOnNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDIsMCl9O2M9dm9pZCAwPT09Yi5zYWx0P2QuZmlyc3RTYWx0OmIuc2FsdDtkW2NdPWRbY118fHNqY2wubWlzYy5wYmtkZjIoYSxjLGIuaXRlcik7cmV0dXJue2tleTpkW2NdLnNsaWNlKDApLHNhbHQ6Yy5zbGljZSgwKX19O1xuXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzJiYobW9kdWxlLmV4cG9ydHM9c2pjbCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHNqY2x9KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgcHJlZml4ID0gJ34nO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIHN0b3JhZ2UgZm9yIG91ciBgRUVgIG9iamVjdHMuXG4gKiBBbiBgRXZlbnRzYCBpbnN0YW5jZSBpcyBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEV2ZW50cygpIHt9XG5cbi8vXG4vLyBXZSB0cnkgdG8gbm90IGluaGVyaXQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuIEluIHNvbWUgZW5naW5lcyBjcmVhdGluZyBhblxuLy8gaW5zdGFuY2UgaW4gdGhpcyB3YXkgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBgT2JqZWN0LmNyZWF0ZShudWxsKWAgZGlyZWN0bHkuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gY2hhcmFjdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90XG4vLyBvdmVycmlkZGVuIG9yIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vXG5pZiAoT2JqZWN0LmNyZWF0ZSkge1xuICBFdmVudHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvL1xuICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGBfX3Byb3RvX19gIHByb3BlcnR5IGlzIHN0aWxsIGluaGVyaXRlZCBpblxuICAvLyBzb21lIG9sZCBicm93c2VycyBsaWtlIEFuZHJvaWQgNCwgaVBob25lIDUuMSwgT3BlcmEgMTEgYW5kIFNhZmFyaSA1LlxuICAvL1xuICBpZiAoIW5ldyBFdmVudHMoKS5fX3Byb3RvX18pIHByZWZpeCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmNlPWZhbHNlXSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCBlbWl0dGVyLCBvbmNlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdKSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyLCBlbWl0dGVyLl9ldmVudHNDb3VudCsrO1xuICBlbHNlIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0uZm4pIGVtaXR0ZXIuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gW2VtaXR0ZXIuX2V2ZW50c1tldnRdLCBsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIGVtaXR0ZXI7XG59XG5cbi8qKlxuICogQ2xlYXIgZXZlbnQgYnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2dCBUaGUgRXZlbnQgbmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyRXZlbnQoZW1pdHRlciwgZXZ0KSB7XG4gIGlmICgtLWVtaXR0ZXIuX2V2ZW50c0NvdW50ID09PSAwKSBlbWl0dGVyLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIGVsc2UgZGVsZXRlIGVtaXR0ZXIuX2V2ZW50c1tldnRdO1xufVxuXG4vKipcbiAqIE1pbmltYWwgYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgbGlzdGluZyB0aGUgZXZlbnRzIGZvciB3aGljaCB0aGUgZW1pdHRlciBoYXMgcmVnaXN0ZXJlZFxuICogbGlzdGVuZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgdmFyIG5hbWVzID0gW11cbiAgICAsIGV2ZW50c1xuICAgICwgbmFtZTtcblxuICBpZiAodGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHJldHVybiBuYW1lcztcblxuICBmb3IgKG5hbWUgaW4gKGV2ZW50cyA9IHRoaXMuX2V2ZW50cykpIHtcbiAgICBpZiAoaGFzLmNhbGwoZXZlbnRzLCBuYW1lKSkgbmFtZXMucHVzaChwcmVmaXggPyBuYW1lLnNsaWNlKDEpIDogbmFtZSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHJldHVybiBuYW1lcy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhldmVudHMpKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lcztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGhhbmRsZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFoYW5kbGVycykgcmV0dXJuIFtdO1xuICBpZiAoaGFuZGxlcnMuZm4pIHJldHVybiBbaGFuZGxlcnMuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoLCBlZSA9IG5ldyBBcnJheShsKTsgaSA8IGw7IGkrKykge1xuICAgIGVlW2ldID0gaGFuZGxlcnNbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpc3RlbmVycyBsaXN0ZW5pbmcgdG8gYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtYmVyIG9mIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudChldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFsaXN0ZW5lcnMpIHJldHVybiAwO1xuICBpZiAobGlzdGVuZXJzLmZuKSByZXR1cm4gMTtcbiAgcmV0dXJuIGxpc3RlbmVycy5sZW5ndGg7XG59O1xuXG4vKipcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGhhZCBsaXN0ZW5lcnMsIGVsc2UgYGZhbHNlYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiBmYWxzZTtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGFyZ3NcbiAgICAsIGk7XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgY2FzZSA0OiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyLCBhMyk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgb25lLXRpbWUgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIHRydWUpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGxpc3RlbmVycyBvZiBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBtYXRjaCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmUtdGltZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG4gIGlmICghZm4pIHtcbiAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChcbiAgICAgIGxpc3RlbmVycy5mbiA9PT0gZm4gJiZcbiAgICAgICghb25jZSB8fCBsaXN0ZW5lcnMub25jZSkgJiZcbiAgICAgICghY29udGV4dCB8fCBsaXN0ZW5lcnMuY29udGV4dCA9PT0gY29udGV4dClcbiAgICApIHtcbiAgICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGV2ZW50cyA9IFtdLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGlzdGVuZXJzW2ldLmZuICE9PSBmbiB8fFxuICAgICAgICAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpIHx8XG4gICAgICAgIChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gICAgLy9cbiAgICBpZiAoZXZlbnRzLmxlbmd0aCkgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICAgIGVsc2UgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzLCBvciB0aG9zZSBvZiB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBbZXZlbnRdIFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0O1xuXG4gIGlmIChldmVudCkge1xuICAgIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50c1tldnRdKSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBFeHBvc2UgdGhlIHByZWZpeC5cbi8vXG5FdmVudEVtaXR0ZXIucHJlZml4ZWQgPSBwcmVmaXg7XG5cbi8vXG4vLyBBbGxvdyBgRXZlbnRFbWl0dGVyYCB0byBiZSBpbXBvcnRlZCBhcyBtb2R1bGUgbmFtZXNwYWNlLlxuLy9cbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5pZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG59XG4iLCAiY29uc3QgZGVmYXVsdEVycm9yQ29uZmlnID0ge1xyXG4gICAgd2l0aFN0YWNrVHJhY2U6IGZhbHNlLFxyXG59O1xyXG4vLyBDdXN0b20gZXJyb3Igb2JqZWN0XHJcbi8vIENvbnRleHQgLyBkaXNjdXNzaW9uOiBodHRwczovL2dpdGh1Yi5jb20vc3VwZXJtYWNyby9uZXZlcnRocm93L3B1bGwvMjE1XHJcbmNvbnN0IGNyZWF0ZU5ldmVyVGhyb3dFcnJvciA9IChtZXNzYWdlLCByZXN1bHQsIGNvbmZpZyA9IGRlZmF1bHRFcnJvckNvbmZpZykgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHJlc3VsdC5pc09rKClcclxuICAgICAgICA/IHsgdHlwZTogJ09rJywgdmFsdWU6IHJlc3VsdC52YWx1ZSB9XHJcbiAgICAgICAgOiB7IHR5cGU6ICdFcnInLCB2YWx1ZTogcmVzdWx0LmVycm9yIH07XHJcbiAgICBjb25zdCBtYXliZVN0YWNrID0gY29uZmlnLndpdGhTdGFja1RyYWNlID8gbmV3IEVycm9yKCkuc3RhY2sgOiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICBzdGFjazogbWF5YmVTdGFjayxcclxuICAgIH07XHJcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuY2xhc3MgUmVzdWx0QXN5bmMge1xyXG4gICAgY29uc3RydWN0b3IocmVzKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IHJlcztcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tU2FmZVByb21pc2UocHJvbWlzZSkge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlLnRoZW4oKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21Qcm9taXNlKHByb21pc2UsIGVycm9yRm4pIHtcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gcHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gbmV3IEVycihlcnJvckZuKGUpKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuZXdQcm9taXNlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBzdGF0aWMgZnJvbVRocm93YWJsZShmbiwgZXJyb3JGbikge1xyXG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZm4oLi4uYXJncykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoZXJyb3JGbiA/IGVycm9yRm4oZXJyb3IpIDogZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSkoKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lKGFzeW5jUmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0QXN5bmNMaXN0KGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY29tYmluZVdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzKGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZihyZXMudmFsdWUpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgYW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3UmVzID0geWllbGQgZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAobmV3UmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKG5ld1Jlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRlZSBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSBlcnJvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgbWFwRXJyKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNPaygpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoeWllbGQgZihyZXMuZXJyb3IpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWUgaW5zdGFuY2VvZiBSZXN1bHRBc3luYyA/IG5ld1ZhbHVlLl9wcm9taXNlIDogbmV3VmFsdWU7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLm1hdGNoKG9rLCBfZXJyKSk7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMudW53cmFwT3IodCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gOS4wLjAuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiB1c2UgYHNhZmVUcnlgIHdpdGhvdXQgdGhpcyBtZXRob2QuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogc2FmZVRyeShhc3luYyBmdW5jdGlvbiogKCkge1xyXG4gICAgICogICBjb25zdCBva1ZhbHVlID0geWllbGQqIHlvdXJSZXN1bHRcclxuICAgICAqIH0pXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEVtdWxhdGVzIFJ1c3QncyBgP2Agb3BlcmF0b3IgaW4gYHNhZmVUcnlgJ3MgYm9keS4gU2VlIGFsc28gYHNhZmVUcnlgLlxyXG4gICAgICovXHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIHNhZmVVbndyYXBfMSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQoeWllbGQgX19hd2FpdCh5aWVsZCogX19hc3luY0RlbGVnYXRvcihfX2FzeW5jVmFsdWVzKHlpZWxkIF9fYXdhaXQodGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy5zYWZlVW53cmFwKCkpKSkpKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBNYWtlcyBSZXN1bHRBc3luYyBpbXBsZW1lbnQgUHJvbWlzZUxpa2U8UmVzdWx0PlxyXG4gICAgdGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBfYSgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIF9fYXdhaXQoZXJyQXN5bmMocmVzdWx0LmVycm9yKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBfX2F3YWl0KHJlc3VsdC52YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgb2tBc3luYyA9ICh2YWx1ZSkgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgT2sodmFsdWUpKSk7XHJcbmNvbnN0IGVyckFzeW5jID0gKGVycikgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgRXJyKGVycikpKTtcclxuY29uc3QgZnJvbVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZTtcclxuY29uc3QgZnJvbVNhZmVQcm9taXNlID0gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlO1xyXG5jb25zdCBmcm9tQXN5bmNUaHJvd2FibGUgPSBSZXN1bHRBc3luYy5mcm9tVGhyb3dhYmxlO1xuXG4vKipcclxuICogU2hvcnQgY2lyY3VpdHMgb24gdGhlIEZJUlNUIEVyciB2YWx1ZSB0aGF0IHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0ID0gKHJlc3VsdExpc3QpID0+IHtcclxuICAgIGxldCBhY2MgPSBvayhbXSk7XHJcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFjYy5tYXAoKGxpc3QpID0+IGxpc3QucHVzaChyZXN1bHQudmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjO1xyXG59O1xyXG4vKiBUaGlzIGlzIHRoZSB0eXBlc2FmZSB2ZXJzaW9uIG9mIFByb21pc2UuYWxsXHJcbiAqXHJcbiAqIFRha2VzIGEgbGlzdCBvZiBSZXN1bHRBc3luYzxULCBFPiBhbmQgc3VjY2VzcyBpZiBhbGwgaW5uZXIgcmVzdWx0cyBhcmUgT2sgdmFsdWVzXHJcbiAqIG9yIGZhaWxzIGlmIG9uZSAob3IgbW9yZSkgb2YgdGhlIGlubmVyIHJlc3VsdHMgYXJlIEVyciB2YWx1ZXNcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3QgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdCk7XHJcbi8qKlxyXG4gKiBHaXZlIGEgbGlzdCBvZiBhbGwgdGhlIGVycm9ycyB3ZSBmaW5kXHJcbiAqL1xyXG5jb25zdCBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjLmVycm9yLnB1c2gocmVzdWx0LmVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MgPSBlcnIoW3Jlc3VsdC5lcnJvcl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNPaygpICYmIGFjYy5pc09rKCkpIHtcclxuICAgICAgICAgICAgYWNjLnZhbHVlLnB1c2gocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzRXJyKClcclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzID0gKGFzeW5jUmVzdWx0TGlzdCkgPT4gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlKFByb21pc2UuYWxsKGFzeW5jUmVzdWx0TGlzdCkpLmFuZFRoZW4oY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcclxudmFyIFJlc3VsdDtcclxuKGZ1bmN0aW9uIChSZXN1bHQpIHtcclxuICAgIC8qKlxyXG4gICAgICogV3JhcHMgYSBmdW5jdGlvbiB3aXRoIGEgdHJ5IGNhdGNoLCBjcmVhdGluZyBhIG5ldyBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lXHJcbiAgICAgKiBhcmd1bWVudHMgYnV0IHJldHVybmluZyBgT2tgIGlmIHN1Y2Nlc3NmdWwsIGBFcnJgIGlmIHRoZSBmdW5jdGlvbiB0aHJvd3NcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm4gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIG9rIG9uIHN1Y2Nlc3Mgb3IgZXJyIG9uIGZhaWx1cmVcclxuICAgICAqIEBwYXJhbSBlcnJvckZuIHdoZW4gYW4gZXJyb3IgaXMgdGhyb3duLCB0aGlzIHdpbGwgd3JhcCB0aGUgZXJyb3IgcmVzdWx0IGlmIHByb3ZpZGVkXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBmdW5jdGlvbiBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbiguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvayhyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyKGVycm9yRm4gPyBlcnJvckZuKGUpIDogZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmZyb21UaHJvd2FibGUgPSBmcm9tVGhyb3dhYmxlO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZShyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0KHJlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmNvbWJpbmUgPSBjb21iaW5lO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZVdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZVdpdGhBbGxFcnJvcnMgPSBjb21iaW5lV2l0aEFsbEVycm9ycztcclxufSkoUmVzdWx0IHx8IChSZXN1bHQgPSB7fSkpO1xyXG5jb25zdCBvayA9ICh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKTtcclxuZnVuY3Rpb24gZXJyKGVycikge1xyXG4gICAgcmV0dXJuIG5ldyBFcnIoZXJyKTtcclxufVxyXG5mdW5jdGlvbiBzYWZlVHJ5KGJvZHkpIHtcclxuICAgIGNvbnN0IG4gPSBib2R5KCkubmV4dCgpO1xyXG4gICAgaWYgKG4gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuLnRoZW4oKHIpID0+IHIudmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuLnZhbHVlO1xyXG59XHJcbmNsYXNzIE9rIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlzRXJyKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pc09rKCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBvayhmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcEVycihfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKF92YWx1ZSkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGYodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIFRlZSBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoX2YpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY0FuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFzeW5jQW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSkubWFwKCgpID0+IHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNNYXAoZikge1xyXG4gICAgICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoZih0aGlzLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICB1bndyYXBPcihfdikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWF0Y2gob2ssIF9lcnIpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS15aWVsZCAqL1xyXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXBFcnIoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBFcnJgIG9uIGFuIE9rJywgdGhpcywgY29uZmlnKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcywgcmVxdWlyZS15aWVsZFxyXG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG59XHJcbmNsYXNzIEVyciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgIH1cclxuICAgIGlzT2soKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBlcnIoZih0aGlzLmVycm9yKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jQW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhyb3VnaChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jTWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgdW53cmFwT3Iodikge1xyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG4gICAgbWF0Y2goX29rLCBlcnIpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgc2FmZVVud3JhcCgpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB5aWVsZCBlcnIoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvIG5vdCB1c2UgdGhpcyBnZW5lcmF0b3Igb3V0IG9mIGBzYWZlVHJ5YCcpO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKGNvbmZpZykge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZU5ldmVyVGhyb3dFcnJvcignQ2FsbGVkIGBfdW5zYWZlVW53cmFwYCBvbiBhbiBFcnInLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihfKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3I7XHJcbiAgICB9XHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgeWllbGQgc2VsZjtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgIH1cclxufVxyXG5jb25zdCBmcm9tVGhyb3dhYmxlID0gUmVzdWx0LmZyb21UaHJvd2FibGU7XHJcbi8vI2VuZHJlZ2lvblxuXG5leHBvcnQgeyBFcnIsIE9rLCBSZXN1bHQsIFJlc3VsdEFzeW5jLCBlcnIsIGVyckFzeW5jLCBmcm9tQXN5bmNUaHJvd2FibGUsIGZyb21Qcm9taXNlLCBmcm9tU2FmZVByb21pc2UsIGZyb21UaHJvd2FibGUsIG9rLCBva0FzeW5jLCBzYWZlVHJ5IH07XG4iLCAidHlwZSBKc29uYWJsZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IG51bGxcbiAgfCB1bmRlZmluZWRcbiAgfCByZWFkb25seSBKc29uYWJsZVtdXG4gIHwgeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBKc29uYWJsZSB9XG4gIHwgeyB0b0pTT04oKTogSnNvbmFibGUgfTtcblxuZXhwb3J0IGNsYXNzIEJhc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ/OiBKc29uYWJsZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgY2F1c2U/OiBFcnJvcjsgY29udGV4dD86IEpzb25hYmxlIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgeyBjYXVzZSwgY29udGV4dCB9ID0gb3B0aW9ucztcblxuICAgIHN1cGVyKG1lc3NhZ2UsIHsgY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgV2ViU29ja2V0RXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBXZWJTb2NrZXRFcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2UgPSBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0XCI7XG59XG4iLCAiaW1wb3J0IHsgZXJyQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Nvbm5lY3Rpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivc2VydmVyLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckNvbmZpZyB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItY29uZmlnLnRzXCI7XG5cbi8qKlxuICogRW5zdXJlIGFuIGVycm9yIG1lc3NhZ2UgaXMgdHJhbnNmb3JtZWQgaW4gYW4gRXJyb3Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5zdXJlRXJyb3IgPSAodmFsdWU6IHVua25vd24pOiBFcnJvciA9PiB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gdmFsdWU7XG5cbiAgbGV0IHN0cmluZ2lmaWVkID0gXCJbVW5hYmxlIHRvIHN0cmluZ2lmeSB0aGUgdGhyb3duIHZhbHVlXVwiO1xuICB0cnkge1xuICAgIHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAvKiBlbXB0eSAqL1xuICB9XG5cbiAgcmV0dXJuIG5ldyBFcnJvcihzdHJpbmdpZmllZCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIEx1ZmkncyBjb25maWcgZnJvbSBpdHMgQVBJXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVXJsXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZmV0Y2hTZXJ2ZXJDb25maWcgPSAoXG4gIGluc3RhbmNlVXJsOiBVUkwsXG4pOiBSZXN1bHRBc3luYzxTZXJ2ZXJDb25maWcsIEVycm9yPiA9PiB7XG4gIGNvbnN0IG9yaWdpbk1hdGNoZXMgPSBpbnN0YW5jZVVybC5ocmVmLm1hdGNoKFxuICAgIC8oLio/KVxcLz8oPzpcXC9bZHJdezF9XFwvfGxvZ2luXFwvP3xmaWxlc1xcLz8pLyxcbiAgKTtcblxuICBjb25zdCB1cmxPcmlnaW4gPSBvcmlnaW5NYXRjaGVzICYmIG9yaWdpbk1hdGNoZXNbMV1cbiAgICA/IG9yaWdpbk1hdGNoZXNbMV1cbiAgICA6IGluc3RhbmNlVXJsLm9yaWdpbjtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgZmV0Y2godXJsT3JpZ2luICsgXCIvYWJvdXQvY29uZmlnXCIpLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDb25uZWN0aW9uRXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgKS5hbmRUaGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICByZXNwb25zZS5qc29uKCksXG4gICAgICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgICBuZXcgU2VydmVyRXJyb3IodW5kZWZpbmVkLCB7IGNvbnRleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQgfSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEZW5vUnVudGltZSA9ICgpOiBib29sZWFuID0+IHR5cGVvZiBEZW5vICE9PSBcInVuZGVmaW5lZFwiO1xuXG5leHBvcnQgY29uc3QgaXNTZWN1cmVDb250ZXh0ID0gKCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpIHx8IGdsb2JhbFRoaXMuaXNTZWN1cmVDb250ZXh0IHx8XG4gICAgZ2xvYmFsVGhpcy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJodHRwczpcIjtcbn07XG5cbmV4cG9ydCBjb25zdCB3b3JrZXJVcmwgPSAocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBVUkwgPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpXG4gICAgPyBuZXcgVVJMKGAuL3dvcmtlci8ke3JlbGF0aXZlUGF0aH0udHNgLCBuZXcgVVJMKFwiLlwiLCBpbXBvcnQubWV0YS51cmwpLmhyZWYpXG4gICAgOiBuZXcgVVJMKFxuICAgICAgaW1wb3J0Lm1ldGEucmVzb2x2ZShcbiAgICAgICAgYC4vJHtcbiAgICAgICAgICByZWxhdGl2ZVBhdGggIT09IFwiZW5jcnlwdFwiID8gYHdvcmtlci8ke3JlbGF0aXZlUGF0aH1gIDogcmVsYXRpdmVQYXRoXG4gICAgICAgIH0uanNgLFxuICAgICAgKSxcbiAgICApO1xufTtcbiIsICJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCB7IFdPUktFUl9BQ1RJT04gfSBmcm9tIFwifi9lbnVtL3dvcmtlci1hY3Rpb24udHNcIjtcbmltcG9ydCB0eXBlIHsgTHVmaUZpbGUgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWZpbGUudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyQWN0aW9uTWVzc2FnZSB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItYWN0aW9uLW1lc3NhZ2UudHNcIjtcbmltcG9ydCB7IEVWRU5UIH0gZnJvbSBcIn4vZW51bS9ldmVudC50c1wiO1xuaW1wb3J0IHsgVVBMT0FEX1NUQVRVUyB9IGZyb20gXCJ+L2VudW0vZmlsZS1zdGF0dXMudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyRXZlbnQgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWV2ZW50LnRzXCI7XG5cbmRlY2xhcmUgbGV0IHNlbGY6IFdvcmtlcjtcblxuZXhwb3J0IGNvbnN0IGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsZSBpbiB3b3JrZXJzIGFuZCBwcm92aWRlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1haW4gdGhyZWFkXG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcGFyYW0gYXJnc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbGUgPSAobHVmaUZpbGU6IEx1ZmlGaWxlLCBhcmdzOiBQYXJ0aWFsPEx1ZmlGaWxlPikgPT4ge1xuICBPYmplY3QuYXNzaWduKGx1ZmlGaWxlLCBhcmdzKTtcblxuICBpZiAodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBldmVudDogRVZFTlQuRklMRV9VUERBVEVELFxuICAgICAgbHVmaUZpbGUsXG4gICAgfSBhcyBXb3JrZXJFdmVudCk7XG4gIH1cblxuICByZXR1cm4gbHVmaUZpbGU7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZEZpbGVFcnJvciA9IChsdWZpRmlsZTogTHVmaUZpbGUsIGVycm9yOiBFcnJvcikgPT4ge1xuICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7IHVwbG9hZFN0YXR1czogVVBMT0FEX1NUQVRVUy5GQUlMRUQgfSk7XG5cbiAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvciB9IGFzIFdvcmtlckV2ZW50KTtcbn07XG5cbi8qKlxuICogSW5pdCBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGNoaWxkIHdvcmtlcidzIG9ubWVzc2FnZSBldmVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gIGV2ZW50cy5vbmNlKEVWRU5ULlNPQ0tFVF9PUEVORUQsICgpID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGV2ZW50OiBFVkVOVC5TT0NLRVRfT1BFTkVELFxuICAgIH0pO1xuICB9KTtcblxuICBldmVudHMub25jZShFVkVOVC5PUEVSQVRJT05fRkFJTEVELCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvciB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNXb3JrZXJBY3Rpb25NZXNzYWdlID0gKFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBtZXNzYWdlOiBhbnksXG4pOiBtZXNzYWdlIGlzIFdvcmtlckFjdGlvbk1lc3NhZ2UgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBtZXNzYWdlID09PSBcIm9iamVjdFwiICYmXG4gICAgbWVzc2FnZSAhPT0gbnVsbCAmJlxuICAgIFwiYWN0aW9uXCIgaW4gbWVzc2FnZSAmJlxuICAgIE9iamVjdC52YWx1ZXMoV09SS0VSX0FDVElPTikuaW5jbHVkZXMobWVzc2FnZS5hY3Rpb24pXG4gICk7XG59O1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgImltcG9ydCB7XG4gIERlY29kZSBhcyBiNjRkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjRlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjRcIjtcbmltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgc2pjbCBmcm9tIFwibHVmaS1zamNsXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHsgRGVjcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2RlY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyB0eXBlIEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBFbmNyeXB0ZWREYXRhIG9yIGEgc3RyaW5nIHVzaW5nIHRoZSBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvbi5cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gZW5jcnlwdGVkRGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhIHwgc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8QXJyYXlCdWZmZXIsIERlY3J5cHRpb25FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgZW5jcnlwdGVkRGF0YSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBlbmNyeXB0ZWREYXRhXG4gICAgICA6IChlbmNyeXB0ZWREYXRhLmRhdGEpO1xuXG4gICAgcmV0dXJuIG9rQXN5bmMoYjY0ZGVjb2RlKHNqY2wuZGVjcnlwdChrZXksIGRhdGEpKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IERlY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEVuY3J5cHQgYW4gQXJyYXlCdWZmZXIgaW50byBhbiBFbmNyeXB0ZWREYXRhIHVzaW5nIHRoZSBwcm92aWRlZCBrZXlcbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEFycmF5QnVmZmVyLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZW5jcnlwdGVkID0gc2pjbC5lbmNyeXB0KGtleSwgYjY0ZW5jb2RlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gb2tBc3luYyh7XG4gICAgICBhbGdvOiBDcnlwdG9BbGdvcml0aG0uU2pjbCxcbiAgICAgIGRhdGE6IGVuY3J5cHRlZCxcbiAgICAgIGl2OiBKU09OLnBhcnNlKGVuY3J5cHRlZCBhcyB1bmtub3duIGFzIHN0cmluZykuaXYsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IEVuY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyB1c2luZyBTamNsIEFQSVxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9ICgpOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMoc2pjbC5yYW5kb20ucmFuZG9tV29yZHMoOCwgMTApKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGdlbmVyYXRlIGtleVwiLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyBTamNsIEFQSVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5oZXguZnJvbUJpdHMoc2pjbC5oYXNoLnNoYTUxMi5oYXNoKHBhc3N3b3JkKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhuZXcgSGFzaGluZ0Vycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXRlY3QgaWYgdGhlIGtleSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgU2pjbC4gU2luY2Ugd2UncmUgbm90IGdlbmVyYXRpbmcgYW4gZXF1YWwgc3ltYm9sIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBXZWJDcnlwdG8gQVBJIChieSB1c2luZyBiYXNlNjR1cmwpLCBpdCdzIGVhc3kgdG8gZGV0ZWN0XG4gKlxuICogQHBhcmFtIGtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2pjbEtleSA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4ga2V5W2tleS5sZW5ndGggLSAxXSA9PT0gXCI9XCI7XG59O1xuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBEZWNyeXB0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2U6IHN0cmluZyA9IFwiVW5hYmxlIHRvIGRlY3J5cHQgdGhlIHByb3ZpZGVkIGRhdGFcIjtcbn1cbiIsICJpbXBvcnQgeyBDcnlwdG9FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9jcnlwdG8tZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIEVuY3J5cHRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbiAgb3ZlcnJpZGUgbWVzc2FnZTogc3RyaW5nID0gXCJVbmFibGUgdG8gZW5jcnlwdCB0aGUgcHJvdmlkZWQgZGF0YVwiO1xufVxuIiwgImltcG9ydCB7XG4gIERlY29kZSBhcyBiNjR1cmxkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjR1cmxlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjQvdXJsXCI7XG5pbXBvcnQgeyB0eXBlIEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB7IENyeXB0b0FsZ29yaXRobSB9IGZyb20gXCJ+L2VudW0vY3J5cHRvLWFsZ29yaXRobS50c1wiO1xuaW1wb3J0IHsgRGVjcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2RlY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9jcnlwdG8tZXJyb3IudHNcIjtcbmltcG9ydCB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBlbmNyeXB0ZWREYXRhIHVzaW5nIHRoZSBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvblxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBlbmNyeXB0ZWRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgZW5jcnlwdGVkOiBFbmNyeXB0ZWREYXRhLFxuKTogUmVzdWx0QXN5bmM8QXJyYXlCdWZmZXIsIERlY3J5cHRpb25FcnJvcj4gPT4ge1xuICByZXR1cm4gaW1wb3J0S2V5KGtleSkuYW5kVGhlbigoaW1wb3J0ZWRLZXkpID0+XG4gICAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICBjcnlwdG8uc3VidGxlLmRlY3J5cHQoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgICAgICBpdjogZW5jcnlwdGVkLml2IGFzIFVpbnQ4QXJyYXksXG4gICAgICAgIH0sXG4gICAgICAgIGltcG9ydGVkS2V5LFxuICAgICAgICBlbmNyeXB0ZWQuZGF0YSBhcyBBcnJheUJ1ZmZlcixcbiAgICAgICksXG4gICAgICAoZXJyb3IpID0+IG5ldyBEZWNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgKVxuICApO1xufTtcblxuLyoqXG4gKiBFbmNyeXB0IGFuIEFycmF5QnVmZmVyIGludG8gYW4gRW5jcnlwdGVkRGF0YSB1c2luZyB0aGUgcHJvdmlkZWQga2V5XG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEFycmF5QnVmZmVyLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PiB7XG4gIHJldHVybiBpbXBvcnRLZXkoa2V5KS5hbmRUaGVuKChpbXBvcnRlZEtleSkgPT4ge1xuICAgIGNvbnN0IGl2ID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxMikpO1xuICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgIGNyeXB0by5zdWJ0bGUuZW5jcnlwdChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQUVTLUdDTVwiLFxuICAgICAgICAgIGl2LFxuICAgICAgICB9LFxuICAgICAgICBpbXBvcnRlZEtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICApLFxuICAgICAgKGVycm9yKSA9PlxuICAgICAgICBuZXcgRW5jcnlwdGlvbkVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICAgIH0pLFxuICAgICkuYW5kVGhlbigoZW5jcnlwdGVkKSA9PiB7XG4gICAgICByZXR1cm4gb2tBc3luYyh7XG4gICAgICAgIGFsZ286IENyeXB0b0FsZ29yaXRobS5XZWJDcnlwdG8sXG4gICAgICAgIGRhdGE6IGVuY3J5cHRlZCxcbiAgICAgICAgaXYsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybSBhIHN0cmluZyBpbnRvIGEgQ3J5cHRvS2V5LCB1c2FibGUgaW4gV2ViIENyeXB0byBBUElcbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaW1wb3J0S2V5ID0gKGtleTogc3RyaW5nKTogUmVzdWx0QXN5bmM8Q3J5cHRvS2V5LCBDcnlwdG9FcnJvcj4gPT4ge1xuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXG4gICAgICBcInJhd1wiLFxuICAgICAgYjY0dXJsZGVjb2RlKGtleSksXG4gICAgICB7IG5hbWU6IFwiQUVTLUdDTVwiIH0sXG4gICAgICBmYWxzZSxcbiAgICAgIFtcbiAgICAgICAgXCJlbmNyeXB0XCIsXG4gICAgICAgIFwiZGVjcnlwdFwiLFxuICAgICAgXSxcbiAgICApLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBpbXBvcnQgY3J5cHRvZ3JhcGh5IGtleVwiLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgKTtcbn07XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gc3RyaW5nIHVzaW5nIFdlYiBDcnlwdG8gQVBJLlxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9ICgpOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PiB7XG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgICAgY3J5cHRvLnN1YnRsZVxuICAgICAgICAuZ2VuZXJhdGVLZXkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICAgICAgICBsZW5ndGg6IDI1NixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIl0sXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKGdlbmVyYXRlZEtleSkgPT5cbiAgICAgICAgICBjcnlwdG8uc3VidGxlXG4gICAgICAgICAgICAuZXhwb3J0S2V5KFwicmF3XCIsIGdlbmVyYXRlZEtleSlcbiAgICAgICAgICAgIC50aGVuKChrZXkpID0+IHJlc29sdmUoYjY0dXJsZW5jb2RlKGtleSkpKVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGJhc2U2NCBlbmNvZGUgdGhlIHVybFwiLCB7XG4gICAgICAgICAgICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiByZWplY3QoZXJyb3IpKVxuICAgICksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGdlbmVyYXRlIGtleVwiLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICk7XG59O1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyBXZWJDcnlwdG8gQVBJXG4gKlxuICogQHBhcmFtIHBhc3N3b3JkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaGFzaFBhc3N3b3JkID0gKFxuICBwYXNzd29yZDogc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBIYXNoaW5nRXJyb3I+ID0+IHtcbiAgY29uc3QgcHJvbWlzZSA9IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBVaW50OEFycmF5KFxuICAgICAgICBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdChcbiAgICAgICAgICBcIlNIQS01MTJcIixcbiAgICAgICAgICBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUocGFzc3dvcmQpLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKS5qb2luKFwiXCIpO1xuICB9O1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBwcm9taXNlKCksXG4gICAgKGVycm9yKSA9PiBuZXcgSGFzaGluZ0Vycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICApO1xufTtcbiIsICJpbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB0eXBlIHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IERlY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9kZWNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyB0eXBlIEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCAqIGFzIHNqY2wgZnJvbSBcIn4vYXBpL2NyeXB0by9zamNsLnRzXCI7XG5pbXBvcnQgKiBhcyB3ZWIgZnJvbSBcIn4vYXBpL2NyeXB0by93ZWIudHNcIjtcbmltcG9ydCB0eXBlIHsgSGFzaGluZ0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2hhc2hpbmctZXJyb3IudHNcIjtcblxuLyoqXG4gKiBEZWNyeXB0IGFuIEVuY3J5cHRlZERhdGEgb2JqZWN0IHVzaW5nIHRoZSBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvblxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogRW5jcnlwdGVkRGF0YSxcbik6IFJlc3VsdEFzeW5jPEFycmF5QnVmZmVyLCBEZWNyeXB0aW9uRXJyb3I+ID0+XG4gIHZhbHVlLmFsZ28gPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5hbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbFxuICAgID8gc2pjbC5kZWNyeXB0KGtleSwgdmFsdWUpXG4gICAgOiB3ZWIuZGVjcnlwdChrZXksIHZhbHVlKTtcblxuLyoqXG4gKiBFbmNyeXB0IGFuIEFycmF5QnVmZmVyIHVzaW5nIHRoZSBwcm92aWRlZCBrZXkgYW5kIGFsZ29yaXRobVxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEFycmF5QnVmZmVyLFxuICBhbGdvOiBDcnlwdG9BbGdvcml0aG0sXG4pOiBSZXN1bHRBc3luYzxFbmNyeXB0ZWREYXRhLCBFbmNyeXB0aW9uRXJyb3I+ID0+XG4gIChhbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbClcbiAgICA/IHNqY2wuZW5jcnlwdChrZXksIHZhbHVlKVxuICAgIDogd2ViLmVuY3J5cHQoa2V5LCB2YWx1ZSk7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBuZXcga2V5IGZvciBlbmNyeXB0aW9uL2RlY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0gYWxnb1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlS2V5ID0gKFxuICBhbGdvID0gQ3J5cHRvQWxnb3JpdGhtLldlYkNyeXB0byxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgQ3J5cHRvRXJyb3I+ID0+XG4gIGFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsID8gc2pjbC5nZW5lcmF0ZUtleSgpIDogd2ViLmdlbmVyYXRlS2V5KCk7XG5cbi8qKlxuICogSGFzaCBhIHBhc3N3b3JkIHVzaW5nIHRoZSBwcm92aWRlZCBhbGdvcml0aG1cbiAqXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaGFzaFBhc3N3b3JkID0gKFxuICBwYXNzd29yZDogc3RyaW5nLFxuICBhbGdvOiBDcnlwdG9BbGdvcml0aG0sXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIEhhc2hpbmdFcnJvcj4gPT5cbiAgYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2xcbiAgICA/IHNqY2wuaGFzaFBhc3N3b3JkKHBhc3N3b3JkKVxuICAgIDogd2ViLmhhc2hQYXNzd29yZChwYXNzd29yZCk7XG4iLCAiaW1wb3J0IHsgZXJyQXN5bmMsIG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IEx1ZmlGaWxlIH0gZnJvbSBcIn4vZW50aXRpZXMvbHVmaS1maWxlLnRzXCI7XG5pbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcbmltcG9ydCB7IFVQTE9BRF9TVEFUVVMgfSBmcm9tIFwifi9lbnVtL2ZpbGUtc3RhdHVzLnRzXCI7XG5pbXBvcnQgeyBTb2NrZXRQYXRoIH0gZnJvbSBcIn4vZW51bS9zb2NrZXQtcGF0aC50c1wiO1xuaW1wb3J0IHsgVXBsb2FkRXJyb3IgfSBmcm9tIFwifi9lcnJvci91cGxvYWQvdXBsb2FkLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWNvbm5lY3Rpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IFdlYlNvY2tldEVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd2Vic29ja2V0L3dlYnNvY2tldC1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBDbGllbnRVcGxvYWRDaHVua01ldGFkYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2NsaWVudC11cGxvYWQtY2h1bmstbWV0YWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgRW5jcnlwdGVkRGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9lbmNyeXB0ZWQtZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJDYW5jZWxNZXRhZGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItY2FuY2VsLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2Uvc2VydmVyLWRvd25sb2FkLWNodW5rLXN1Y2Nlc3MtbWV0YWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyVXBsb2FkQ2h1bmtNZXRhZGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItdXBsb2FkLWNodW5rLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckRvd25sb2FkQ2h1bmtNZXRhZGF0YSB9IGZyb20gXCJ+L3R5cGUvc2VydmVyLWRvd25sb2FkLWNodW5rLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBldmVudHMsIHVwZGF0ZUZpbGUgfSBmcm9tIFwifi93b3JrZXIvc2hhcmVkLnRzXCI7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcIn4vYXBpL2NyeXB0by50c1wiO1xuaW1wb3J0IHtcbiAgRGVjb2RlIGFzIGI2NGRlY29kZSxcbiAgRW5jb2RlIGFzIGI2NGVuY29kZSxcbn0gZnJvbSBcImFycmF5YnVmZmVyLWVuY29kaW5nL2Jhc2U2NFwiO1xuXG5leHBvcnQgY29uc3Qgc29ja2V0czoge1xuICBba2V5OiBzdHJpbmddOiBXZWJTb2NrZXQ7XG59ID0ge307XG5cbmNvbnN0IE1BWF9FUlJPUlMgPSA1O1xuXG4vKipcbiAqIEhhbmRsZSBXZWJTb2NrZXQgcmVzcG9uc2UgZm9yIGNhbmNlbCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uQ2FuY2VsTWVzc2FnZSA9IChcbiAgZGF0YTogU2VydmVyQ2FuY2VsTWV0YWRhdGEsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBFcnJvcj4gPT4ge1xuICBldmVudHMuZW1pdChFVkVOVC5VUExPQURfQ0FOQ0VMTEVELCBkYXRhLnN1Y2Nlc3MpO1xuXG4gIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZSBXZWJTb2NrZXQgcmVzcG9uc2UgZm9yIGRvd25sb2FkIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0gcmVzcG9uc2VcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgb25Eb3dubG9hZE1lc3NhZ2UgPSAoXG4gIHJlc3BvbnNlOiBzdHJpbmcsXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlLnNwbGl0KFwiWFhNT0pPWFhcIik7XG4gIGNvbnN0IG1ldGFkYXRhU3RyaW5nID0gcmVzdWx0LnNoaWZ0KCk7XG5cbiAgaWYgKG1ldGFkYXRhU3RyaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IEpTT04ucGFyc2UobWV0YWRhdGFTdHJpbmcpIGFzIFNlcnZlckRvd25sb2FkQ2h1bmtNZXRhZGF0YTtcblxuICAgIGlmIChpc1NlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEobWV0YWRhdGEpKSB7XG4gICAgICBjb25zdCBkYXRhU3RyaW5nID0gcmVzdWx0LnNoaWZ0KCk7XG5cbiAgICAgIGlmIChkYXRhU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGVuY3J5cHRlZERhdGE6IEVuY3J5cHRlZERhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHJpbmcpO1xuXG4gICAgICAgIC8vIElmIGZpbGUgd2FzIHVwbG9hZGVkIHVzaW5nIEx1ZmkgQVBJXG4gICAgICAgIGlmIChlbmNyeXB0ZWREYXRhLml2KSB7XG4gICAgICAgICAgZW5jcnlwdGVkRGF0YS5pdiA9IG5ldyBVaW50OEFycmF5KE9iamVjdC52YWx1ZXMoZW5jcnlwdGVkRGF0YS5pdikpO1xuICAgICAgICAgIGVuY3J5cHRlZERhdGEuZGF0YSA9IGI2NGRlY29kZShlbmNyeXB0ZWREYXRhLmRhdGEgYXMgc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcnlwdG8uZGVjcnlwdChsdWZpRmlsZS5rZXlzLmNsaWVudCwgZW5jcnlwdGVkRGF0YSkuYW5kVGhlbihcbiAgICAgICAgICAoZGVjcnlwdGVkUGFydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gdHlwZW9mIGRlY3J5cHRlZFBhcnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgPyAobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGRlY3J5cHRlZFBhcnQpLmJ1ZmZlciBhcyBBcnJheUJ1ZmZlcilcbiAgICAgICAgICAgICAgOiBkZWNyeXB0ZWRQYXJ0O1xuXG4gICAgICAgICAgICAvLyBJZiBmaXJzdCBjaHVua1xuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLnBhcnQgPT09IDApIHtcbiAgICAgICAgICAgICAgdXBkYXRlRmlsZShsdWZpRmlsZSwge1xuICAgICAgICAgICAgICAgIGNodW5rc1JlYWR5OiBsdWZpRmlsZS5jaHVua3NSZWFkeSArIDEsXG4gICAgICAgICAgICAgICAgZGVsQXRGaXJzdFZpZXc6IG1ldGFkYXRhLmRlbF9hdF9maXJzdF92aWV3LFxuICAgICAgICAgICAgICAgIGRlbGF5OiBtZXRhZGF0YS5kZWxheSxcbiAgICAgICAgICAgICAgICBuYW1lOiBtZXRhZGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgIHNpemU6IG1ldGFkYXRhLnNpemUsXG4gICAgICAgICAgICAgICAgdG90YWxDaHVua3M6IG1ldGFkYXRhLnRvdGFsLFxuICAgICAgICAgICAgICAgIHR5cGU6IG1ldGFkYXRhLnR5cGUsXG4gICAgICAgICAgICAgICAgemlwcGVkOiBtZXRhZGF0YS56aXBwZWQsXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULkRPV05MT0FEX1NUQVJURUQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdXBkYXRlRmlsZShsdWZpRmlsZSwgeyBjaHVua3NSZWFkeTogbHVmaUZpbGUuY2h1bmtzUmVhZHkgKyAxIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5DSFVOS19ET1dOTE9BREVELCBidWZmZXIsIG1ldGFkYXRhLnBhcnQpO1xuXG4gICAgICAgICAgICBpZiAobHVmaUZpbGUuY2h1bmtzUmVhZHkgPT09IG1ldGFkYXRhLnRvdGFsKSB7XG4gICAgICAgICAgICAgIHJldHVybiBlbmREb3dubG9hZChsdWZpRmlsZSkuYW5kVGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuRE9XTkxPQURfQ09NUExFVEUpO1xuICAgICAgICAgICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IoXG4gICAgICAgICAgXCJDYW5ub3QgcmV0cmlldmUgbWV0YWRhdGEgZnJvbSBkYXRhIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXJcIixcbiAgICAgICAgKTtcblxuICAgICAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG4gICAgICAgIHJldHVybiBlcnJBc3luYyhlcnJvcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKG1ldGFkYXRhLm1zZyk7XG5cbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcbiAgICAgIHJldHVybiBlcnJBc3luYyhlcnJvcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKFxuICAgICAgXCJDYW5ub3QgcmV0cmlldmUgbWV0YWRhdGEgZnJvbSBkYXRhIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXJcIixcbiAgICApO1xuXG4gICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuICAgIHJldHVybiBlcnJBc3luYyhlcnJvcik7XG4gIH1cbn07XG5cbi8qKlxuICogSGFuZGxlIFdlYlNvY2tldCByZXNwb25zZSBmb3IgdXBsb2FkIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0gcmVzcG9uc2VcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgb25VcGxvYWRNZXNzYWdlID0gKFxuICByZXNwb25zZTogU2VydmVyVXBsb2FkQ2h1bmtNZXRhZGF0YSxcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgVXBsb2FkRXJyb3I+ID0+IHtcbiAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAvLyBJZiBmaXJzdCBjaHVua1xuICAgIGlmIChyZXNwb25zZS5qID09PSAwKSB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oYFVwbG9hZCBvZiAke2x1ZmlGaWxlLmtleXMuY2xpZW50fSBzdGFydGVkYCk7XG5cbiAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHtcbiAgICAgICAga2V5czogeyBjbGllbnQ6IGx1ZmlGaWxlLmtleXMuY2xpZW50LCBzZXJ2ZXI6IHJlc3BvbnNlLnNob3J0IH0sXG4gICAgICAgIGFjdGlvblRva2VuOiByZXNwb25zZS50b2tlbixcbiAgICAgICAgcXVldWVJbmRleDogcmVzcG9uc2UuaSxcbiAgICAgIH0pO1xuXG4gICAgICBldmVudHMuZW1pdChFVkVOVC5VUExPQURfU1RBUlRFRCk7XG4gICAgfVxuXG4gICAgdXBkYXRlRmlsZShsdWZpRmlsZSwge1xuICAgICAgY2h1bmtzUmVhZHk6IGx1ZmlGaWxlLmNodW5rc1JlYWR5ICsgMSxcbiAgICAgIGNyZWF0ZWRBdDogcmVzcG9uc2UuY3JlYXRlZF9hdCxcbiAgICB9KTtcblxuICAgIGV2ZW50cy5lbWl0KEVWRU5ULkNIVU5LX1VQTE9BREVEKTtcblxuICAgIGlmIChsdWZpRmlsZS5jaHVua3NSZWFkeSA9PT0gbHVmaUZpbGUudG90YWxDaHVua3MpIHtcbiAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgdXBsb2FkU3RhdHVzOiBVUExPQURfU1RBVFVTLkNPTVBMRVRFIH0pO1xuXG4gICAgICBldmVudHMuZW1pdChFVkVOVC5VUExPQURfQ09NUExFVEUpO1xuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuU09DS0VUX09QRVJBVElPTl9URVJNSU5BVEVEKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKHJlc3BvbnNlLm1zZyk7XG4gICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuXG4gICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgb24gc29ja2V0cyBcIm9ubWVzc2FnZVwiIGV2ZW50XG4gKlxuICogQHBhcmFtIGVcbiAqIEBwYXJhbSBzb2NrZXRVcmxcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uTWVzc2FnZSA9IChcbiAgZTogTWVzc2FnZUV2ZW50LFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBVcGxvYWRFcnJvcj4gPT4ge1xuICBjb25zdCBkYXRhID0gdHJ5UGFyc2VKc29uKGUuZGF0YSk7XG4gIGxldCBjYWxsYmFjaztcblxuICBpZiAoZGF0YSkge1xuICAgIGlmICghZGF0YS5hY3Rpb24gJiYgZGF0YS5tc2cpIHtcbiAgICAgIC8vIElmIGVycm9yXG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihkYXRhLm1zZyk7XG4gICAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG5cbiAgICAgIHJldHVybiBlcnJBc3luYyhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcImRlbGF5XCIgaW4gZGF0YSkge1xuICAgICAgICBjYWxsYmFjayA9IG9uVXBsb2FkTWVzc2FnZShkYXRhLCBsdWZpRmlsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayA9IG9uQ2FuY2VsTWVzc2FnZShkYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2sgPSBvbkRvd25sb2FkTWVzc2FnZShlLmRhdGEsIGx1ZmlGaWxlKTtcbiAgfVxuXG4gIHJldHVybiBjYWxsYmFjaztcbn07XG5cbi8qKlxuICogSXMgc29ja2V0IGNvbm5lY3Rpbmc/XG4gKlxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQ29ubmVjdGluZyA9IChzb2NrZXRLZXk6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgc29ja2V0cyAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XSAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XS5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuQ09OTkVDVElORztcblxuLyoqXG4gKiBJcyBzb2NrZXQgc3Bhd25lZD9cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNTcGF3bmVkID0gKHNvY2tldEtleTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBzb2NrZXRzICE9PSB1bmRlZmluZWQgJiZcbiAgc29ja2V0c1tzb2NrZXRLZXldICE9PSB1bmRlZmluZWQgJiZcbiAgc29ja2V0c1tzb2NrZXRLZXldLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOO1xuXG4vKipcbiAqIEFzayBXZWJTb2NrZXQgdG8gY2FuY2VsIGFuIHVwbG9hZFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbmNlbFVwbG9hZCA9IChcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIHVwbG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgYCR7XG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGlkOiBsdWZpRmlsZS5rZXlzLnNlcnZlcixcbiAgICAgICAgbW9kX3Rva2VuOiBsdWZpRmlsZS5hY3Rpb25Ub2tlbixcbiAgICAgICAgY2FuY2VsOiB0cnVlLFxuICAgICAgICBpOiBsdWZpRmlsZS5xdWV1ZUluZGV4LFxuICAgICAgfSlcbiAgICB9WFhNT0pPWFh1c2VsZXNzYCxcbiAgKTtcbn07XG5cbi8qKlxuICogRG93bmxvYWQgYSBwYXJ0IG9mIHRoZSBmaWxlIHRocm91Z2ggdGhlIFdlYlNvY2tldFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHBhcmFtIGNodW5rTnVtYmVyXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZG93bmxvYWRDaHVuayA9IChcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuICBjaHVua051bWJlcjogbnVtYmVyLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgbGV0IG1lc3NhZ2U7XG5cbiAgaWYgKGx1ZmlGaWxlLnBhc3N3b3JkKSB7XG4gICAgbWVzc2FnZSA9IHsgcGFydDogY2h1bmtOdW1iZXIsIGZpbGVfcHdkOiBsdWZpRmlsZS5wYXNzd29yZCB9O1xuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgPSB7IHBhcnQ6IGNodW5rTnVtYmVyIH07XG4gIH1cblxuICByZXR1cm4gc2VuZE1lc3NhZ2UoXG4gICAgZG93bmxvYWRTb2NrZXRVcmwobHVmaUZpbGUpLFxuICAgIGx1ZmlGaWxlLFxuICAgIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLFxuICApO1xufTtcblxuLyoqXG4gKiBUZWxsIHRoZSBXZWJTb2NrZXQgdGhlIGRvd25sb2FkIGVuZGVkXG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5kRG93bmxvYWQgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGxldCBtZXNzYWdlOiB7IGVuZGVkOiB0cnVlOyBmaWxlX3B3ZD86IHN0cmluZyB9O1xuXG4gIGlmIChsdWZpRmlsZS5wYXNzd29yZCkge1xuICAgIG1lc3NhZ2UgPSB7IGVuZGVkOiB0cnVlLCBmaWxlX3B3ZDogbHVmaUZpbGUucGFzc3dvcmQgfTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0geyBlbmRlZDogdHJ1ZSB9O1xuICB9XG5cbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIGRvd25sb2FkU29ja2V0VXJsKGx1ZmlGaWxlKSxcbiAgICBsdWZpRmlsZSxcbiAgICBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSxcbiAgKTtcbn07XG5cbi8qKlxuICogVXBsb2FkIGEgY2h1bmsgb2YgdGhlIGZpbGUgdGhyb3VnaCB0aGUgV2ViU29ja2V0XG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcGFyYW0gbWV0YWRhdGFcbiAqIEBwYXJhbSBlbmNyeXB0ZWREYXRhXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdXBsb2FkQ2h1bmsgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbiAgbWV0YWRhdGE6IENsaWVudFVwbG9hZENodW5rTWV0YWRhdGEsXG4gIGVuY3J5cHRlZERhdGE6IEVuY3J5cHRlZERhdGEsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBlbmNyeXB0ZWREYXRhLmRhdGEgPSBiNjRlbmNvZGUoZW5jcnlwdGVkRGF0YS5kYXRhIGFzIEFycmF5QnVmZmVyKTtcblxuICByZXR1cm4gc2VuZE1lc3NhZ2UoXG4gICAgdXBsb2FkU29ja2V0VXJsKGx1ZmlGaWxlKSxcbiAgICBsdWZpRmlsZSxcbiAgICBgJHtKU09OLnN0cmluZ2lmeShtZXRhZGF0YSl9WFhNT0pPWFgke0pTT04uc3RyaW5naWZ5KGVuY3J5cHRlZERhdGEpfWAsXG4gICk7XG59O1xuXG4vKipcbiAqIFNlbmQgYSBtZXNzYWdlIHRvIHRoZSBXZWJTb2NrZXRcbiAqXG4gKiBAcGFyYW0gc29ja2V0VXJsXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIGhhc1ByaW9yaXR5XG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBzZW5kTWVzc2FnZSA9IChcbiAgc29ja2V0VXJsOiBzdHJpbmcsXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbiAgbWVzc2FnZTogc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgaWYgKCFpc1NwYXduZWQoc29ja2V0VXJsKSkge1xuICAgIHJldHVybiBzcGF3bihzb2NrZXRVcmwpLmFuZFRoZW4oKCkgPT4ge1xuICAgICAgc29ja2V0c1tzb2NrZXRVcmxdLm9ubWVzc2FnZSA9IChlKSA9PiBvbk1lc3NhZ2UoZSwgbHVmaUZpbGUpO1xuICAgICAgcmV0dXJuIHNlbmRNZXNzYWdlKHNvY2tldFVybCwgbHVmaUZpbGUsIG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHNvY2tldHNbc29ja2V0VXJsXS5zZW5kKG1lc3NhZ2UpO1xuXG4gICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgfVxufTtcblxuLyoqXG4gKiBTcGF3biBhIG5ldyBXZWJTb2NrZXQgb3IgcmV1c2UgYW4gZXhpc3Rpbmcgb25lLlxuICpcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEBwYXJhbSBlcnJvckNvdW50XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3Qgc3Bhd24gPSAoXG4gIHNvY2tldEtleTogc3RyaW5nLFxuICBlcnJvckNvdW50ID0gMCxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgaWYgKCFpc1NwYXduZWQoc29ja2V0S2V5KSAmJiAhaXNDb25uZWN0aW5nKHNvY2tldEtleSkpIHtcbiAgICAvLyBjb25zb2xlLmluZm8oYFNwYXduaW5nIFdlYlNvY2tldCAke3NvY2tldFVybH1gKTtcbiAgICBzb2NrZXRzW3NvY2tldEtleV0gPSBuZXcgV2ViU29ja2V0KHNvY2tldEtleSk7XG5cbiAgICBldmVudHMub25jZShFVkVOVC5TT0NLRVRfT1BFUkFUSU9OX1RFUk1JTkFURUQsICgpID0+IHtcbiAgICAgIHNvY2tldHNbc29ja2V0S2V5XS5jbG9zZSgpO1xuICAgIH0pO1xuXG4gICAgZXZlbnRzLm9uY2UoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgKCkgPT4ge1xuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuU09DS0VUX09QRVJBVElPTl9URVJNSU5BVEVEKTtcbiAgICB9KTtcblxuICAgIHNvY2tldHNbc29ja2V0S2V5XS5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oYFdlYnNvY2tldCAke3NvY2tldEtleX0gaGFzIGJlZW4gb3BlbmApO1xuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuU09DS0VUX09QRU5FRCk7XG4gICAgfTtcblxuICAgIHNvY2tldHNbc29ja2V0S2V5XS5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgLy8gY29uc29sZS5pbmZvKGBXZWJzb2NrZXQgJHtzb2NrZXRLZXl9IGhhcyBiZWVuIGNsb3NlZGApO1xuICAgIH07XG5cbiAgICBzb2NrZXRzW3NvY2tldEtleV0ub25lcnJvciA9ICgpID0+IHtcbiAgICAgIGlmICgrK2Vycm9yQ291bnQgPD0gTUFYX0VSUk9SUykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB0cnlpbmcgdG8gY29ubmVjdCB0byBXZWJTb2NrZXQgJHtzb2NrZXRLZXl9LiBUcnlpbmcgYWdhaW4uICR7ZXJyb3JDb3VudH0gLyAke01BWF9FUlJPUlN9YCxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gc3Bhd24oc29ja2V0S2V5LCBlcnJvckNvdW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PTkVSUk9SKTtcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgICAgIG5ldyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IoXG4gICAgICAgICAgICBgVW5hYmxlIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0ICR7c29ja2V0S2V5fS5gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB3YWl0Rm9yQ29ubmVjdGlvbihzb2NrZXRLZXkpXG4gICAgLmFuZFRoZW4oKCkgPT4gb2tBc3luYyhzb2NrZXRLZXkpKVxuICAgIC5vckVsc2UoKGVycm9yKSA9PiBlcnJBc3luYyhlcnJvcikpO1xufTtcblxuLyoqXG4gKiBXYWl0IGZvciBXZWJTb2NrZXQgdG8gb3Blbi4gUmV0dXJucyBhbiBlcnJvciBpZiB0b28gbWFueSBjb25uZWN0aW9uIGF0dGVtcHRzIGFyZSBtYWRlLlxuICpcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB3YWl0Rm9yQ29ubmVjdGlvbiA9IChcbiAgc29ja2V0S2V5OiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT5cbiAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFpc1NwYXduZWQoc29ja2V0S2V5KSkge1xuICAgICAgICBldmVudHMub25jZShFVkVOVC5TT0NLRVRfT1BFTkVELCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBldmVudHMub24oRVZFTlQuU09DS0VUX09ORVJST1IsICgpID0+IHtcbiAgICAgICAgICByZWplY3QobmV3IFdlYlNvY2tldENvbm5lY3Rpb25FcnJvcigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSksXG4gICAgKGVycm9yKSA9PiB7XG4gICAgICByZXR1cm4gZW5zdXJlRXJyb3IoZXJyb3IpO1xuICAgIH0sXG4gICk7XG5cbi8qKlxuICogQ2xvc2UgdGhlIFdlYlNvY2tldFxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNsb3NlID0gKHNvY2tldEtleTogc3RyaW5nKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBXZWJTb2NrZXRFcnJvcj4gPT5cbiAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGlzU3Bhd25lZChzb2NrZXRLZXkpKSB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlamVjdChuZXcgV2ViU29ja2V0RXJyb3IoXCJVbmFibGUgdG8gY2xvc2UgdGhlIFdlYlNvY2tldFwiKSk7XG4gICAgICAgIH0sIDEwMDApO1xuXG4gICAgICAgIHNvY2tldHNbc29ja2V0S2V5XS5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SUQpO1xuICAgICAgICAgIHJlc29sdmUoc29ja2V0S2V5KTtcbiAgICAgICAgfTtcblxuICAgICAgICBzb2NrZXRzW3NvY2tldEtleV0uY2xvc2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoc29ja2V0S2V5KTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICAoZXJyb3IpID0+IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGFuIGluc3RhbmNlIFVSTCBpbiBhIFdlYlNvY2tldCBVUkxcbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2VVcmxcbiAqIEBwYXJhbSBwYXRobmFtZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkU29ja2V0VXJsID0gKGluc3RhbmNlVXJsOiBVUkwsIHBhdGhuYW1lOiBzdHJpbmcpOiBVUkwgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGluc3RhbmNlVXJsKTtcbiAgdXJsLnByb3RvY29sID0gdXJsLnByb3RvY29sID09PSBcImh0dHA6XCIgPyBcIndzOlwiIDogXCJ3c3M6XCI7XG4gIHVybC5wYXRobmFtZSArPSBwYXRobmFtZTtcblxuICByZXR1cm4gbmV3IFVSTCh1cmwub3JpZ2luICsgdXJsLnBhdGhuYW1lKTtcbn07XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIGRvd25sb2FkIFVSTCBmb3IgdGhlIHNvY2tldC4gUmV0dXJucyBhIHN0cmluZyBzaW5jZSBpdCdzIG1vc3RseSB1c2VkIGFzIHNvY2tldHMga2V5XG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZG93bmxvYWRTb2NrZXRVcmwgPSAobHVmaUZpbGU6IEx1ZmlGaWxlKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGJ1aWxkU29ja2V0VXJsKFxuICAgIG5ldyBVUkwobHVmaUZpbGUuc2VydmVyVXJsKSxcbiAgICBTb2NrZXRQYXRoLkRPV05MT0FEICsgYC8ke2x1ZmlGaWxlLmtleXMuc2VydmVyfWAsXG4gICkudG9TdHJpbmcoKTtcbn07XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIHVwbG9hZCBVUkwgZm9yIHRoZSBzb2NrZXQuIFJldHVybnMgYSBzdHJpbmcgc2luY2UgaXQncyBtb3N0bHkgdXNlZCBhcyBzb2NrZXRzIGtleVxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwbG9hZFNvY2tldFVybCA9IChsdWZpRmlsZTogTHVmaUZpbGUpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gYnVpbGRTb2NrZXRVcmwobmV3IFVSTChsdWZpRmlsZS5zZXJ2ZXJVcmwpLCBTb2NrZXRQYXRoLlVQTE9BRClcbiAgICAudG9TdHJpbmcoKTtcbn07XG5cbi8qKlxuICogVHJ5IHRvIHBhcnNlIGEgc3RyaW5nIGludG8gYSBKU09OLiBSZXR1cm5zIGZhbHNlIGlmIG5vdCBwb3NzaWJsZS5cbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHJldHVybnNcbiAqL1xuY29uc3QgdHJ5UGFyc2VKc29uID0gKGRhdGE6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZE9iamVjdCA9IEpTT04ucGFyc2UoZGF0YSk7XG5cbiAgICBpZiAocGFyc2VkT2JqZWN0ICYmIHR5cGVvZiBwYXJzZWRPYmplY3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiBwYXJzZWRPYmplY3Q7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoX2UpIHtcbiAgICAvKiBlbXB0eSAqL1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyIGlzIFNlcnZlckRvd25sb2FkQ2h1bmtNZXRhZGF0YVxuICpcbiAqIEBwYXJhbSBtZXNzYWdlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhID0gKFxuICBtZXNzYWdlOiBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGEsXG4pOiBtZXNzYWdlIGlzIFNlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEgPT5cbiAgdHlwZW9mIG1lc3NhZ2UgPT09IFwib2JqZWN0XCIgJiYgbWVzc2FnZSAhPT0gbnVsbCAmJiAhKFwibXNnXCIgaW4gbWVzc2FnZSk7XG4iLCAiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgTHVmaUZpbGUgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWZpbGUudHNcIjtcbmltcG9ydCB7IEx1ZmlKb2IgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWpvYi50c1wiO1xuaW1wb3J0IHsgSm9iU3RhdHVzIH0gZnJvbSBcIn4vZW51bS9qb2Itc3RhdHVzLnRzXCI7XG5pbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcbmltcG9ydCB7IFVQTE9BRF9TVEFUVVMgfSBmcm9tIFwifi9lbnVtL2ZpbGUtc3RhdHVzLnRzXCI7XG5pbXBvcnQgeyBXT1JLRVJfQUNUSU9OIH0gZnJvbSBcIn4vZW51bS93b3JrZXItYWN0aW9uLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciwgZmV0Y2hTZXJ2ZXJDb25maWcsIGlzU2VjdXJlQ29udGV4dCB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcIn4vYXBpL2NyeXB0by50c1wiO1xuaW1wb3J0IHsgRmlsZVNsaWNpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2ZpbGUvZmlsZS1zbGljaW5nLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHsgRG93bmxvYWRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Rvd25sb2FkL2Rvd25sb2FkLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBJbmZvc0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvaW5mb3MtZXJyb3IudHNcIjtcbmltcG9ydCB7IEpvYlBhdXNlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3Ivam9iL2pvYi1wYXVzZS1lcnJvci50c1wiO1xuaW1wb3J0IHsgSm9iUmVzdW1lRXJyb3IgfSBmcm9tIFwifi9lcnJvci9qb2Ivam9iLXJlc3VtZS1lcnJvci50c1wiO1xuaW1wb3J0IHsgSm9iRXJyb3IgfSBmcm9tIFwifi9lcnJvci9qb2Ivam9iLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBVcGxvYWRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3VwbG9hZC91cGxvYWQtZXJyb3IudHNcIjtcbmltcG9ydCB7IGhhc2hQYXNzd29yZCB9IGZyb20gXCJ+L2FwaS9jcnlwdG8udHNcIjtcbmltcG9ydCB7IFdPUktFUl9UWVBFIH0gZnJvbSBcIn4vZW51bS93b3JrZXItdHlwZS50c1wiO1xuaW1wb3J0IHsgdHlwZSBBc3luY1ppcHBhYmxlIH0gZnJvbSBcImZmbGF0ZVwiO1xuXG5jb25zdCBDSFVOS19MRU5HVEggPSAxXzUwMF8wMDA7IC8vIDEuNSBNQlxuXG5jb25zdCBmaWxlczogeyBbY2xpZW50S2V5OiBzdHJpbmddOiBMdWZpRmlsZSB9ID0ge307XG5leHBvcnQgY29uc3QgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4vKipcbiAqIENhbmNlbCBhbiB1cGxvYWRcbiAqXG4gKiBAcGFyYW0gdXBsb2FkSm9iXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgY2FuY2VsID0gKHVwbG9hZEpvYjogTHVmaUpvYik6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEVycm9yPiA9PiB7XG4gIHVwbG9hZEpvYi50ZXJtaW5hdGUoKTtcblxuICBjb25zdCBqb2IgPSBuZXcgTHVmaUpvYih1cGxvYWRKb2IubHVmaUZpbGUsIFdPUktFUl9UWVBFLkNBTkNFTCk7XG5cbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGpvYlxuICAgICAgICAub25NZXNzYWdlKChldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5VUExPQURfQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgICBmaWxlc1tqb2IubHVmaUZpbGUua2V5cy5jbGllbnRdLnVwbG9hZFN0YXR1cyA9XG4gICAgICAgICAgICAgIFVQTE9BRF9TVEFUVVMuQ0FOQ0VMRUQ7XG5cbiAgICAgICAgICAgIHJlc29sdmUoam9iKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCkge1xuICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICBuZXcgSm9iRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byBjYW5jZWwgYW4gdXBsb2FkXCIsXG4gICAgICAgICAgICAgICAgeyBjYXVzZTogZXZlbnQuZGF0YS5lcnJvciB9LFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXF1ZXN0TWVzc2FnZSh7XG4gICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgbHVmaUZpbGU6IGpvYi5sdWZpRmlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KSxcbiAgICAoZXJyb3IpID0+IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBmaWxlcyB0byBiZSBwYXNzZWQgdG8gY29tcHJlc3MoKVxuICpcbiAqIEBwYXJhbSBmaWxlc1xuICogQHBhcmFtIGFyY2hpdmVFbnRyaWVzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsZXNUb0FyY2hpdmUgPSAoXG4gIGZpbGVzOiBGaWxlW10sXG4gIGFyY2hpdmVFbnRyaWVzOiBBc3luY1ppcHBhYmxlID0ge30sXG4pOiBSZXN1bHRBc3luYzxBc3luY1ppcHBhYmxlLCBFcnJvcj4gPT4ge1xuICBjb25zdCBhc3luY0xvb3AgPSBhc3luYyAoXG4gICAgZmlsZXM6IEZpbGVbXSxcbiAgKSA9PiB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBuYW1lV2l0aEV4dGVuc2lvbiA9IGZpbGUubmFtZS5zcGxpdChcIi9cIik/LnBvcCgpIHx8IGZpbGUubmFtZTtcblxuICAgICAgY29uc3QgbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBuYW1lV2l0aEV4dGVuc2lvbi5zcGxpdChcIi5cIikuc2hpZnQoKTtcbiAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IG5hbWVXaXRoRXh0ZW5zaW9uLnNwbGl0KFwiLlwiKS5sZW5ndGggPiAxXG4gICAgICAgID8gYC4ke25hbWVXaXRoRXh0ZW5zaW9uLnNwbGl0KFwiLlwiKS5wb3AoKX1gXG4gICAgICAgIDogXCJcIjtcblxuICAgICAgbGV0IG5hbWUgPSBuYW1lV2l0aEV4dGVuc2lvbjtcblxuICAgICAgaWYgKGFyY2hpdmVFbnRyaWVzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IGkgPSAxO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgbmFtZSA9IGAke25hbWVXaXRob3V0RXh0ZW5zaW9ufSgke2l9KSR7ZXh0ZW5zaW9ufWA7XG5cbiAgICAgICAgICBpKys7XG4gICAgICAgIH0gd2hpbGUgKGFyY2hpdmVFbnRyaWVzW25hbWVdICE9PSB1bmRlZmluZWQpO1xuICAgICAgfVxuXG4gICAgICBldmVudHMuZW1pdChFVkVOVC5BUkNISVZFX0FEREVEX0ZJTEUsIHsgbmFtZSwgc2l6ZTogZmlsZS5zaXplIH0pO1xuXG4gICAgICBhcmNoaXZlRW50cmllc1tuYW1lXSA9IGF3YWl0IGZpbGUuYnl0ZXMoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIGFzeW5jTG9vcChmaWxlcyksXG4gICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICkuYW5kVGhlbigoKSA9PiBva0FzeW5jKGFyY2hpdmVFbnRyaWVzKSk7XG59O1xuXG4vKipcbiAqIENvbXByZXNzIGZpbGVzIGludG8gYSB6aXBcbiAqXG4gKiBAcGFyYW0gYXJjaGl2ZUVudHJpZXNcbiAqIEBwYXJhbSBhcmNoaXZlTmFtZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXByZXNzID0gKFxuICBhcmNoaXZlRW50cmllczogQXN5bmNaaXBwYWJsZSxcbiAgYXJjaGl2ZU5hbWU6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEVycm9yPiA9PiB7XG4gIGNvbnN0IGx1ZmlGaWxlID0gbmV3IEx1ZmlGaWxlKFwiXCIpOyAvLyBEdW1teSBMdWZpIEZpbGUgdG8gYXZvaWQgdG8gY2hlY2sgZm9yIEx1ZmlGaWxlIGV4aXN0YW5jZSBpbiBvdGhlciBqb2JzXG4gIGNvbnN0IGpvYiA9IG5ldyBMdWZpSm9iKGx1ZmlGaWxlLCBXT1JLRVJfVFlQRS5DT01QUkVTUyk7XG5cbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGpvYlxuICAgICAgICAub25NZXNzYWdlKChldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5BUkNISVZFX0NSRUFURUQpIHtcbiAgICAgICAgICAgIGpvYi5hcmNoaXZlRmlsZSA9IG5ldyBGaWxlKFtldmVudC5kYXRhLmJ1ZmZlcl0sIGFyY2hpdmVOYW1lLCB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiYXBwbGljYXRpb24vemlwXCIsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgam9iLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXNvbHZlKGpvYik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXZlbnQgPT09IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQpIHtcbiAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgbmV3IEpvYkVycm9yKFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gY29tcHJlc3MgYSBmaWxlXCIsIHtcbiAgICAgICAgICAgICAgICBjYXVzZTogZXZlbnQuZGF0YS5lcnJvcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnJlcXVlc3RNZXNzYWdlKHtcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBsdWZpRmlsZSxcbiAgICAgICAgICAgIGFyY2hpdmU6IHsgZW50cmllczogYXJjaGl2ZUVudHJpZXMgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KSxcbiAgICAoZXJyb3IpID0+IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgKTtcbn07XG5cbi8qKlxuICogRGVjb21wcmVzcyBhIHppcCBmaWxlXG4gKlxuICogQHBhcmFtIHppcEZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNvbXByZXNzID0gKFxuICB6aXBGaWxlOiBGaWxlLFxuKTogUmVzdWx0QXN5bmM8THVmaUpvYiwgRXJyb3I+ID0+IHtcbiAgY29uc3QgbHVmaUZpbGUgPSBuZXcgTHVmaUZpbGUoXCJcIik7IC8vIER1bW15IEx1ZmkgRmlsZSB0byBhdm9pZCB0byBjaGVjayBmb3IgTHVmaUZpbGUgZXhpc3RhbmNlIGluIG90aGVyIGpvYnNcbiAgY29uc3Qgam9iID0gbmV3IEx1ZmlKb2IobHVmaUZpbGUsIFdPUktFUl9UWVBFLkRFQ09NUFJFU1MpO1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBqb2JcbiAgICAgICAgLm9uTWVzc2FnZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuQVJDSElWRV9ERUNPTVBSRVNTRUQpIHtcbiAgICAgICAgICAgIGpvYi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmVzb2x2ZShqb2IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5BUkNISVZFX1JFVFJJRVZFRF9GSUxFKSB7XG4gICAgICAgICAgICBqb2IuYXJjaGl2ZUZpbGVzLnB1c2goXG4gICAgICAgICAgICAgIG5ldyBGaWxlKFtldmVudC5kYXRhLmZpbGUuYnVmZmVyXSwgZXZlbnQuZGF0YS5maWxlLnBhdGgpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCkge1xuICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICBuZXcgSm9iRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byBkZWNvbXByZXNzIGEgZmlsZVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNhdXNlOiBldmVudC5kYXRhLmVycm9yLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnJlcXVlc3RNZXNzYWdlKHtcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBsdWZpRmlsZSxcbiAgICAgICAgICAgIGFyY2hpdmU6IHsgZmlsZTogemlwRmlsZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pLFxuICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICApO1xufTtcblxuLyoqXG4gKiBIYW5kbGUgbG9naWNzIG9mIHBhc3N3b3JkIGhhc2hpbmdcbiAqXG4gKiBAcGFyYW0gZG93bmxvYWRVcmxcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuY29uc3QgaGFuZGxlUGFzc3dvcmRIYXNoaW5nID0gKFxuICBkb3dubG9hZFVybDogVVJMLFxuICBwYXNzd29yZD86IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPEx1ZmlGaWxlLCBFcnJvcj4gPT4ge1xuICBpZiAocGFzc3dvcmQpIHtcbiAgICByZXR1cm4gZmV0Y2hTZXJ2ZXJDb25maWcoZG93bmxvYWRVcmwpLmFuZFRoZW4oKGNvbmZpZykgPT4ge1xuICAgICAgLy8gUGFzc3dvcmQgaGFzaGluZyBvbiBjbGllbnQgc2lkZSBpcyBvbmx5IHN1cHBvcnRlZCBieSByZWNlbnQgdmVyc2lvbnMgb2YgTHVmaSBTZXJ2ZXJcbiAgICAgIGlmIChcbiAgICAgICAgY29uZmlnLnZlcnNpb24udGFnID4gXCIwLjA3LjBcIlxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGFsZ28gPSBpc1NlY3VyZUNvbnRleHQoKVxuICAgICAgICAgID8gQ3J5cHRvQWxnb3JpdGhtLldlYkNyeXB0b1xuICAgICAgICAgIDogQ3J5cHRvQWxnb3JpdGhtLlNqY2w7XG5cbiAgICAgICAgcmV0dXJuIGhhc2hQYXNzd29yZChwYXNzd29yZCwgYWxnbykuYW5kVGhlbigoaGFzaGVkUGFzc3dvcmQpID0+XG4gICAgICAgICAgb2tBc3luYyhMdWZpRmlsZS5mcm9tRG93bmxvYWRVcmwoZG93bmxvYWRVcmwsIGhhc2hlZFBhc3N3b3JkKSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBva0FzeW5jKEx1ZmlGaWxlLmZyb21Eb3dubG9hZFVybChkb3dubG9hZFVybCwgcGFzc3dvcmQpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2tBc3luYyhMdWZpRmlsZS5mcm9tRG93bmxvYWRVcmwoZG93bmxvYWRVcmwpKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEb3dubG9hZCBhIGZpbGUgZnJvbSB0aGUgc2VydmVyXG4gKlxuICogQHBhcmFtIGRvd25sb2FkVXJsXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZCA9IChcbiAgZG93bmxvYWRVcmw6IFVSTCxcbiAgcGFzc3dvcmQ/OiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxMdWZpSm9iLCBFcnJvcj4gPT5cbiAgaGFuZGxlUGFzc3dvcmRIYXNoaW5nKGRvd25sb2FkVXJsLCBwYXNzd29yZCkuYW5kVGhlbihcbiAgICAobHVmaUZpbGU6IEx1ZmlGaWxlKSA9PiB7XG4gICAgICBjb25zdCBqb2IgPSBuZXcgTHVmaUpvYihsdWZpRmlsZSwgV09SS0VSX1RZUEUuRE9XTkxPQUQpO1xuXG4gICAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCBjaHVua3M6IEJsb2JbXSA9IFtdO1xuXG4gICAgICAgICAgcmV0dXJuIGpvYlxuICAgICAgICAgICAgLm9uTWVzc2FnZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgaGFuZGxlU29ja2V0UmVzdWx0cyhyZXNvbHZlLCByZWplY3QsIGpvYiwgZXZlbnQpO1xuXG4gICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5DSFVOS19ET1dOTE9BREVEKSB7XG4gICAgICAgICAgICAgICAgY2h1bmtzLnB1c2goZXZlbnQuZGF0YS5jaHVuay5idWZmZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNodW5rcy5sZW5ndGggPj0gNTApIHtcbiAgICAgICAgICAgICAgICAgIGpvYi5kb3dubG9hZGVkRmlsZSA9IG5ldyBGaWxlKFxuICAgICAgICAgICAgICAgICAgICBqb2IuZG93bmxvYWRlZEZpbGVcbiAgICAgICAgICAgICAgICAgICAgICA/IFtqb2IuZG93bmxvYWRlZEZpbGUuc2xpY2UoKV0uY29uY2F0KGNodW5rcylcbiAgICAgICAgICAgICAgICAgICAgICA6IGNodW5rcyxcbiAgICAgICAgICAgICAgICAgICAgbHVmaUZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGx1ZmlGaWxlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICBjaHVua3MubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuRE9XTkxPQURfQ09NUExFVEUpIHtcbiAgICAgICAgICAgICAgICBqb2IuZG93bmxvYWRlZEZpbGUgPSBuZXcgRmlsZShcbiAgICAgICAgICAgICAgICAgIGpvYi5kb3dubG9hZGVkRmlsZVxuICAgICAgICAgICAgICAgICAgICA/IFtqb2IuZG93bmxvYWRlZEZpbGUuc2xpY2UoKV0uY29uY2F0KGNodW5rcylcbiAgICAgICAgICAgICAgICAgICAgOiBjaHVua3MsXG4gICAgICAgICAgICAgICAgICBsdWZpRmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBsdWZpRmlsZS50eXBlLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY2h1bmtzLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgICAgICAgICBqb2IuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXF1ZXN0TWVzc2FnZSh7XG4gICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICBsdWZpRmlsZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSBhcyBQcm9taXNlPEx1ZmlKb2I+LFxuICAgICAgICAoZXJyb3IpID0+IG5ldyBEb3dubG9hZEVycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICAgICAgKTtcbiAgICB9LFxuICApO1xuXG4vKipcbiAqIFJldHJpZXZlIGluZm9ybWF0aW9ucyBhYm91dCBhIGZpbGVcbiAqXG4gKiBAcGFyYW0gZG93bmxvYWRVcmxcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGluZm9zID0gKFxuICBkb3dubG9hZFVybDogVVJMLFxuICBwYXNzd29yZD86IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEluZm9zRXJyb3IgfCBDcnlwdG9FcnJvcj4gPT5cbiAgaGFuZGxlUGFzc3dvcmRIYXNoaW5nKGRvd25sb2FkVXJsLCBwYXNzd29yZCkuYW5kVGhlbigobHVmaUZpbGUpID0+XG4gICAgb2tBc3luYyhuZXcgTHVmaUpvYihsdWZpRmlsZSwgV09SS0VSX1RZUEUuSU5GT1MpKVxuICApXG4gICAgLmFuZFRoZW4oKGpvYjogTHVmaUpvYikgPT5cbiAgICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgam9iXG4gICAgICAgICAgICAub25NZXNzYWdlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuSU5GT1NfUkVUUklFVkVEKSB7XG4gICAgICAgICAgICAgICAgam9iLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShqb2IpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXZlbnQgPT09IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgICAgICBuZXcgSm9iRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gcmV0cmlldmUgaW5mb3JtYXRpb25zIG9mIHRoZSBmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgIHsgY2F1c2U6IGV2ZW50LmRhdGEuZXJyb3IgfSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXF1ZXN0TWVzc2FnZSh7XG4gICAgICAgICAgICAgIGFyZ3M6IHsgbHVmaUZpbGU6IGpvYi5sdWZpRmlsZSB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pIGFzIFByb21pc2U8THVmaUpvYj4sXG4gICAgICAgIChlcnJvcikgPT4gbmV3IEluZm9zRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgICApXG4gICAgKTtcblxuLyoqXG4gKiBQYXVzZSBhbiB1cGxvYWQvZG93bmxvYWQgam9iXG4gKiBAcGFyYW0gam9iXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgcGF1c2UgPSAoam9iOiBMdWZpSm9iKTogUmVzdWx0QXN5bmM8THVmaUpvYiwgRXJyb3I+ID0+IHtcbiAgdHJ5IHtcbiAgICBqb2Iuc3RhdHVzID0gSm9iU3RhdHVzLlBBVVNFRDtcbiAgICByZXR1cm4gb2tBc3luYyhcbiAgICAgIGpvYi5yZXF1ZXN0TWVzc2FnZSh7XG4gICAgICAgIGFjdGlvbjogV09SS0VSX0FDVElPTi5QQVVTRSxcbiAgICAgICAgYXJnczogeyBsdWZpRmlsZTogam9iLmx1ZmlGaWxlIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBKb2JQYXVzZUVycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICAgICk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsZSB1cGxvYWRlZCBvbiB0aGUgc2VydmVyXG4gKiBAcGFyYW0gcmVtb3ZlVXJsXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmUgPSAoXG4gIHJlbW92ZVVybDogVVJMLFxuICBwYXNzd29yZD86IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEVycm9yPiA9PiB7XG4gIGNvbnN0IGx1ZmlGaWxlID0gTHVmaUZpbGUuZnJvbVJlbW92ZVVybChyZW1vdmVVcmwsIHBhc3N3b3JkKTtcbiAgY29uc3Qgam9iID0gbmV3IEx1ZmlKb2IobHVmaUZpbGUsIFdPUktFUl9UWVBFLlJFTU9WRSk7XG5cbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGpvYlxuICAgICAgICAub25NZXNzYWdlKChldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5GSUxFX1JFTU9WRUQpIHtcbiAgICAgICAgICAgIGpvYi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmVzb2x2ZShqb2IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50ID09PSBFVkVOVC5PUEVSQVRJT05fRkFJTEVEKSB7XG4gICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgIG5ldyBKb2JFcnJvcihcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlbW92ZSBhIGZpbGVcIiwge1xuICAgICAgICAgICAgICAgIGNhdXNlOiBldmVudC5kYXRhLmVycm9yLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucmVxdWVzdE1lc3NhZ2UoeyBhcmdzOiB7IGx1ZmlGaWxlIH0gfSk7XG4gICAgfSksXG4gICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICk7XG59O1xuXG4vKipcbiAqIFJlc3VtZSBhbiB1cGxvYWQvZG93bmxvYWQgam9iXG4gKiBAcGFyYW0gam9iXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgcmVzdW1lID0gKGpvYjogTHVmaUpvYik6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEVycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgam9iLnN0YXR1cyA9IEpvYlN0YXR1cy5PTkdPSU5HO1xuICAgIHJldHVybiBva0FzeW5jKFxuICAgICAgam9iLnJlcXVlc3RNZXNzYWdlKHtcbiAgICAgICAgYWN0aW9uOiBXT1JLRVJfQUNUSU9OLlJFU1VNRSxcbiAgICAgICAgYXJnczogeyBsdWZpRmlsZTogam9iLmx1ZmlGaWxlIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBKb2JSZXN1bWVFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIFNsaWNlIGEgZmlsZSBpbiBtdWx0aXBsZSBjaHVua3NcbiAqXG4gKiBAcGFyYW0gY2h1bmtMZW5ndGhcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IHNsaWNlQW5kVXBsb2FkID0gKFxuICBqb2I6IEx1ZmlKb2IsXG4gIGZpbGU6IEZpbGUsXG4gIGFsZ286IENyeXB0b0FsZ29yaXRobSxcbiAgY2h1bmtMZW5ndGg6IG51bWJlciA9IENIVU5LX0xFTkdUSCxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIEZpbGVTbGljaW5nRXJyb3I+ID0+IHtcbiAgZXZlbnRzLmVtaXQoRVZFTlQuU0xJQ0VfU1RBUlRFRCwgZmlsZXNbam9iLmx1ZmlGaWxlLmtleXMuY2xpZW50XSk7XG4gIGNvbnN0IHRvdGFsQ2h1bmtzID0gTWF0aC5jZWlsKGZpbGUuc2l6ZSAvIGNodW5rTGVuZ3RoKSB8fCAxO1xuICBjb25zdCBjb25jdXJyZW5jeSA9IG5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5IHx8IDE7XG5cbiAgZmlsZXNbam9iLmx1ZmlGaWxlLmtleXMuY2xpZW50XS50b3RhbENodW5rcyA9IHRvdGFsQ2h1bmtzO1xuXG4gIGNvbnN0IHNlcXVlbnRpYWxMb29wID0gYXN5bmMgKCkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxDaHVua3M7IGkrKykge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpICogY2h1bmtMZW5ndGg7XG4gICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihzdGFydCArIGNodW5rTGVuZ3RoLCBmaWxlLnNpemUpO1xuICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgZmlsZS5zbGljZShzdGFydCwgZW5kLCBmaWxlLnR5cGUpLmFycmF5QnVmZmVyKCk7XG5cbiAgICAgIGpvYi5yZXF1ZXN0TWVzc2FnZShcbiAgICAgICAge1xuICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgIGNodW5rOiB7XG4gICAgICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbHVmaUZpbGU6IGZpbGVzW2pvYi5sdWZpRmlsZS5rZXlzLmNsaWVudF0sXG4gICAgICAgICAgICBhbGdvLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFtidWZmZXJdLFxuICAgICAgKTtcblxuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgY29uc3Qgd2FpdFVudGlsVXBsb2FkU3RhcnRlZCA9ICgpID0+XG4gICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGpvYi5ldmVudHMub25jZShFVkVOVC5VUExPQURfU1RBUlRFRCwgKCkgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB3YWl0VW50aWxVcGxvYWRTdGFydGVkKCk7XG4gICAgICB9IGVsc2UgaWYgKGkgJSBjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICBjb25zdCB3YWl0Rm9yUXVldWVBdmFpbGFiaWxpdHkgPSAoKSA9PlxuICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBqb2IuZXZlbnRzLm9uY2UoRVZFTlQuQ0hVTktfVVBMT0FERUQsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgd2FpdEZvclF1ZXVlQXZhaWxhYmlsaXR5KCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHNlcXVlbnRpYWxMb29wKCk7XG5cbiAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogU3RhcnQgdGhlIHVwbG9hZCBvbiB0aGUgc2VydmVyXG4gKiBAcGFyYW0gc2VydmVyVXJsXG4gKiBAcGFyYW0gZmlsZVxuICogQHBhcmFtIGRlbGF5XG4gKiBAcGFyYW0gZGVsQXRGaXJzdFZpZXdcbiAqIEBwYXJhbSB6aXBwZWRcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IHN0YXJ0VXBsb2FkID0gKFxuICBzZXJ2ZXJVcmw6IFVSTCxcbiAgZmlsZTogRmlsZSxcbiAgZGVsYXk6IG51bWJlcixcbiAgZGVsQXRGaXJzdFZpZXc6IGJvb2xlYW4sXG4gIHppcHBlZDogYm9vbGVhbixcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKSA9PlxuICBjcnlwdG8uZ2VuZXJhdGVLZXkoXG4gICAgYWxnbyxcbiAgKS5hbmRUaGVuKFxuICAgIChjbGllbnRLZXk6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHBhc3N3b3JkKSB7XG4gICAgICAgIHJldHVybiBoYXNoUGFzc3dvcmQocGFzc3dvcmQsIGFsZ28pLmFuZFRoZW4oKGhhc2hlZFBhc3N3b3JkKSA9PlxuICAgICAgICAgIG9rQXN5bmMoeyBwYXNzd29yZDogaGFzaGVkUGFzc3dvcmQsIGNsaWVudEtleSB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9rQXN5bmMoeyBwYXNzd29yZCwgY2xpZW50S2V5IH0pO1xuICAgICAgfVxuICAgIH0sXG4gICkuYW5kVGhlbigoeyBwYXNzd29yZCwgY2xpZW50S2V5IH0pID0+IHtcbiAgICBmaWxlc1tjbGllbnRLZXldID0gbmV3IEx1ZmlGaWxlKHNlcnZlclVybC50b1N0cmluZygpLCB7XG4gICAgICBkZWxheSxcbiAgICAgIGRlbEF0Rmlyc3RWaWV3LFxuICAgICAgemlwcGVkLFxuICAgICAgcGFzc3dvcmQsXG4gICAgICBuYW1lOiBmaWxlLm5hbWUuc3BsaXQoXCIvXCIpLnBvcCgpLCAvLyBSZW1vdmUgcGF0aCBmcm9tIGZpbGVuYW1lXG4gICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICBrZXlzOiB7IGNsaWVudDogY2xpZW50S2V5LCBzZXJ2ZXI6IFwiXCIgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGpvYiA9IG5ldyBMdWZpSm9iKGZpbGVzW2NsaWVudEtleV0sIFdPUktFUl9UWVBFLlVQTE9BRCk7XG5cbiAgICBmaWxlc1tjbGllbnRLZXldLnVwbG9hZFN0YXR1cyA9IFVQTE9BRF9TVEFUVVMuUVVFVUVEO1xuXG4gICAgcmV0dXJuIHNsaWNlQW5kVXBsb2FkKGpvYiwgZmlsZSwgYWxnbykuYW5kVGhlbigoKSA9PlxuICAgICAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBqb2Iub25NZXNzYWdlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU29ja2V0UmVzdWx0cyhyZXNvbHZlLCByZWplY3QsIGpvYiwgZXZlbnQpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmRhdGEuZXZlbnQpIHtcbiAgICAgICAgICAgICAgY2FzZSBFVkVOVC5VUExPQURfQ09NUExFVEU6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgam9iLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICBqb2IubHVmaUZpbGUudXBsb2FkU3RhdHVzID0gVVBMT0FEX1NUQVRVUy5DT01QTEVURTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pIGFzIFByb21pc2U8THVmaUpvYj4sXG4gICAgICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgKVxuICAgICk7XG4gIH0pO1xuXG4vKipcbiAqIFVwbG9hZCBhIGZpbGUgdG8gdGhlIHNlcnZlclxuICpcbiAqIEBwYXJhbSBzZXJ2ZXJVcmxcbiAqIEBwYXJhbSBmaWxlc1RvVXBsb2FkXG4gKiBAcGFyYW0gZGVsYXlcbiAqIEBwYXJhbSBkZWxBdEZpcnN0Vmlld1xuICogQHBhcmFtIHppcHBlZFxuICogQHBhcmFtIHppcE5hbWVcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGxvYWQgPSAoXG4gIHNlcnZlclVybDogVVJMLFxuICBmaWxlc1RvVXBsb2FkOiBGaWxlW10sXG4gIGRlbGF5OiBudW1iZXIgPSAwLFxuICBkZWxBdEZpcnN0VmlldzogYm9vbGVhbiA9IGZhbHNlLFxuICB6aXBwZWQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgemlwTmFtZTogc3RyaW5nID0gXCJkb2N1bWVudHMuemlwXCIsXG4gIHBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiLFxuICBhbGdvOiBDcnlwdG9BbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG0uV2ViQ3J5cHRvLFxuKTogUmVzdWx0QXN5bmM8THVmaUpvYltdLCBFcnJvcj4gPT4ge1xuICBjb25zdCBvcGVyYXRpb25zOiBSZXN1bHRBc3luYzxMdWZpSm9iLCBFcnJvcj5bXSA9IFtdO1xuXG4gIGlmICghemlwcGVkKSB7XG4gICAgZmlsZXNUb1VwbG9hZC5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICBvcGVyYXRpb25zLnB1c2goc3RhcnRVcGxvYWQoXG4gICAgICAgIHNlcnZlclVybCxcbiAgICAgICAgZmlsZSxcbiAgICAgICAgZGVsYXksXG4gICAgICAgIGRlbEF0Rmlyc3RWaWV3LFxuICAgICAgICB6aXBwZWQsXG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBhbGdvLFxuICAgICAgKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UganVzdCB3YW50IHRvIHVwbG9hZCBhIHNpbmdsZSB6aXAgZmlsZSAocHJvYmFibHkgY3JlYXRlZCBieSBtYW51YWxseSB1c2luZyBjb21wcmVzcygpKVxuICAgIGlmIChcbiAgICAgIGZpbGVzVG9VcGxvYWQubGVuZ3RoID09PSAxICYmIGZpbGVzVG9VcGxvYWRbMF0udHlwZSA9PT0gXCJhcHBsaWNhdGlvbi96aXBcIlxuICAgICkge1xuICAgICAgb3BlcmF0aW9ucy5wdXNoKFxuICAgICAgICBzdGFydFVwbG9hZChcbiAgICAgICAgICBzZXJ2ZXJVcmwsXG4gICAgICAgICAgZmlsZXNUb1VwbG9hZFswXSxcbiAgICAgICAgICBkZWxheSxcbiAgICAgICAgICBkZWxBdEZpcnN0VmlldyxcbiAgICAgICAgICB6aXBwZWQsXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgYWxnbyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wZXJhdGlvbnMucHVzaChcbiAgICAgICAgYWRkRmlsZXNUb0FyY2hpdmUoZmlsZXNUb1VwbG9hZClcbiAgICAgICAgICAuYW5kVGhlbigoYXJjaGl2ZUVudHJpZXMpID0+XG4gICAgICAgICAgICBjb21wcmVzcyhcbiAgICAgICAgICAgICAgYXJjaGl2ZUVudHJpZXMsXG4gICAgICAgICAgICAgIHppcE5hbWUsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5hbmRUaGVuKChqb2IpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoam9iLmFyY2hpdmVGaWxlKSB7XG4gICAgICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5BUkNISVZFX0NSRUFURUQsIGpvYi5hcmNoaXZlRmlsZSk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydFVwbG9hZChcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyVXJsLFxuICAgICAgICAgICAgICAgICAgICBqb2IuYXJjaGl2ZUZpbGUsXG4gICAgICAgICAgICAgICAgICAgIGRlbGF5LFxuICAgICAgICAgICAgICAgICAgICBkZWxBdEZpcnN0VmlldyxcbiAgICAgICAgICAgICAgICAgICAgemlwcGVkLFxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICAgYWxnbyxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJBc3luYyhuZXcgSm9iRXJyb3IoXCJhcmNoaXZlRmlsZSBtdXN0IGJlIGRlZmluZWRcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gUmVzdWx0QXN5bmMuY29tYmluZShvcGVyYXRpb25zKS5vckVsc2UoKGVycm9yKSA9PlxuICAgIGVyckFzeW5jKG5ldyBVcGxvYWRFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVycm9yIH0pKVxuICApO1xufTtcblxuLyoqXG4gKiBIYW5kbGUgc29ja2V0IG9wZW5pbmcgb3BlcmF0aW9uIGluIGEgcHJvbWlzZVxuICpcbiAqIEBwYXJhbSByZXNvbHZlXG4gKiBAcGFyYW0gcmVqZWN0XG4gKiBAcGFyYW0gam9iXG4gKiBAcGFyYW0gZXZlbnRcbiAqL1xuY29uc3QgaGFuZGxlU29ja2V0UmVzdWx0cyA9IChcbiAgcmVzb2x2ZToge1xuICAgICh2YWx1ZTogTHVmaUpvYiB8IFByb21pc2VMaWtlPEx1ZmlKb2I+KTogdm9pZDtcbiAgICAoYXJnMDogTHVmaUpvYik6IHZvaWQ7XG4gIH0sXG4gIHJlamVjdDogeyAocmVhc29uPzogdW5rbm93bik6IHZvaWQ7IChhcmcwOiB1bmtub3duKTogdm9pZCB9LFxuICBqb2I6IEx1ZmlKb2IsXG4gIGV2ZW50OiBNZXNzYWdlRXZlbnQsXG4pID0+IHtcbiAgaWYgKGV2ZW50LmRhdGEuZXZlbnQgPT09IEVWRU5ULlNPQ0tFVF9PUEVORUQpIHtcbiAgICByZXNvbHZlKGpvYik7XG4gIH1cblxuICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCkge1xuICAgIHJlamVjdChcbiAgICAgIG5ldyBKb2JFcnJvcihcIlRoZSBqb2IgcmV0dXJuZWQgYW4gZXJyb3JcIiwgeyBjYXVzZTogZXZlbnQuZGF0YS5lcnJvciB9KSxcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBnZXRGaWxlc1F1ZXVlZCA9ICgpOiBMdWZpRmlsZVtdID0+XG4gIE9iamVjdC52YWx1ZXMoZmlsZXMpLmZpbHRlcigoZmlsZSkgPT5cbiAgICBmaWxlLnVwbG9hZFN0YXR1cyA9PT0gVVBMT0FEX1NUQVRVUy5RVUVVRURcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVJbmRleEluUXVldWUgPSAoY2xpZW50S2V5OiBzdHJpbmcpOiBudW1iZXIgPT5cbiAgT2JqZWN0LmtleXMoZ2V0RmlsZXNRdWV1ZWQoKSkuaW5kZXhPZihjbGllbnRLZXkpO1xuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgZXJyQXN5bmMsIG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB0eXBlIHsgTHVmaUZpbGUgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWZpbGUudHNcIjtcbmltcG9ydCB7IEVWRU5UIH0gZnJvbSBcIn4vZW51bS9ldmVudC50c1wiO1xuaW1wb3J0IHsgSm9iU3RhdHVzIH0gZnJvbSBcIn4vZW51bS9qb2Itc3RhdHVzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlclJlcXVlc3RNZXNzYWdlIH0gZnJvbSBcIn4vdHlwZS93b3JrZXItcmVxdWVzdC1tZXNzYWdlLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciwgd29ya2VyVXJsIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IFVQTE9BRF9TVEFUVVMgfSBmcm9tIFwifi9lbnVtL2ZpbGUtc3RhdHVzLnRzXCI7XG5pbXBvcnQgeyBXT1JLRVJfVFlQRSB9IGZyb20gXCJ+L2VudW0vd29ya2VyLXR5cGUudHNcIjtcblxuZXhwb3J0IGNsYXNzIEx1ZmlKb2Ige1xuICBwdWJsaWMgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgbHVmaUZpbGU6IEx1ZmlGaWxlO1xuICBwdWJsaWMgc3RhdHVzID0gSm9iU3RhdHVzLk9OR09JTkc7XG4gIHB1YmxpYyBhcmNoaXZlRmlsZTogRmlsZSB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGFyY2hpdmVGaWxlczogRmlsZVtdID0gW107XG4gIHB1YmxpYyBkb3dubG9hZGVkRmlsZTogRmlsZSB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHdvcmtlcjogV29ya2VyO1xuXG4gIHByaXZhdGUgaXNUZXJtaW5hdGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IobHVmaUZpbGU6IEx1ZmlGaWxlLCB3b3JrZXJUeXBlOiBXT1JLRVJfVFlQRSkge1xuICAgIHN3aXRjaCAod29ya2VyVHlwZSkge1xuICAgICAgY2FzZSBXT1JLRVJfVFlQRS5DQU5DRUw6XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLndvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVXJsKFwiY2FuY2VsXCIpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgV09SS0VSX1RZUEUuQ09NUFJFU1M6XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLndvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVXJsKFwiY29tcHJlc3NcIiksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBXT1JLRVJfVFlQRS5ERUNPTVBSRVNTOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVybChcImRlY29tcHJlc3NcIiksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBXT1JLRVJfVFlQRS5ET1dOTE9BRDpcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMud29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJVcmwoXCJkb3dubG9hZFwiKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFdPUktFUl9UWVBFLklORk9TOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVybChcImluZm9zXCIpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgV09SS0VSX1RZUEUuUkVNT1ZFOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVybChcInJlbW92ZVwiKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFdPUktFUl9UWVBFLlVQTE9BRDpcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMud29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJVcmwoXCJ1cGxvYWRcIiksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLmx1ZmlGaWxlID0gbHVmaUZpbGU7XG4gICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5KT0JfVEVSTUlOQVRFRCwgKCkgPT4ge1xuICAgICAgdGhpcy5pc1Rlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy50ZXJtaW5hdGUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRzLm9uY2UoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhpcy5zdGF0dXMgPSBKb2JTdGF0dXMuRkFJTEVEO1xuICAgICAgdGhpcy5sdWZpRmlsZS51cGxvYWRTdGF0dXMgPSBVUExPQURfU1RBVFVTLkZBSUxFRDtcblxuICAgICAgdGhpcy5ldmVudHMuZW1pdChFVkVOVC5KT0JfVEVSTUlOQVRFRCwgZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vbkVycm9yKChldmVudCkgPT4gY29uc29sZS5lcnJvcihldmVudC5lcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlbGxzIHRoZSB3b3JrZXIgdGhlIGpvYiBpcyBjb21wbGV0ZVxuICAgKi9cbiAgcHVibGljIGNvbXBsZXRlID0gKCkgPT4ge1xuICAgIHRoaXMuc3RhdHVzID0gSm9iU3RhdHVzLkNPTVBMRVRFO1xuICAgIHRoaXMuZXZlbnRzLmVtaXQoRVZFTlQuSk9CX1RFUk1JTkFURUQpO1xuICB9O1xuXG4gIHB1YmxpYyBoYXNGYWlsZWQgPSAoKSA9PiB0aGlzLnN0YXR1cyA9PT0gSm9iU3RhdHVzLkZBSUxFRDtcblxuICBwdWJsaWMgb25FcnJvciA9IChjYWxsYmFjazogKGFyZzogRXJyb3JFdmVudCkgPT4gdm9pZCkgPT4ge1xuICAgIHRoaXMud29ya2VyLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcbiAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcHVibGljIG9uTWVzc2FnZSA9IChjYWxsYmFjaz86IChhcmc6IE1lc3NhZ2VFdmVudCkgPT4gdm9pZCkgPT4ge1xuICAgIHRoaXMud29ya2VyLm9ubWVzc2FnZSA9IChlKSA9PiB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV2ZW50ID0gZS5kYXRhLmV2ZW50O1xuXG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50ID09PSBFVkVOVC5GSUxFX1VQREFURUQpIHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubHVmaUZpbGUsIGUuZGF0YS5sdWZpRmlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50LCBlLmRhdGEuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHB1YmxpYyBvbk1lc3NhZ2VFcnJvciA9IChjYWxsYmFjazogKGFyZzogTWVzc2FnZUV2ZW50KSA9PiB2b2lkKSA9PiB7XG4gICAgdGhpcy53b3JrZXIub25tZXNzYWdlZXJyb3IgPSAoZXZlbnQpID0+IHtcbiAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcHVibGljIG9uUHJvZ3Jlc3MgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcbiAgICB0aGlzLmV2ZW50cy5vbihFVkVOVC5DSFVOS19VUExPQURFRCwgKCkgPT4ge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50cy5vbihFVkVOVC5DSFVOS19ET1dOTE9BREVELCAoKSA9PiB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcHVibGljIHJlcXVlc3RNZXNzYWdlID0gKFxuICAgIG1zZzogV29ya2VyUmVxdWVzdE1lc3NhZ2UsXG4gICAgdHJhbnNmZXJhYmxlOiBUcmFuc2ZlcmFibGVbXSA9IFtdLFxuICApID0+IHtcbiAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZShtc2csIHRyYW5zZmVyYWJsZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBwdWJsaWMgdGVybWluYXRlID0gKCkgPT4ge1xuICAgIHRoaXMud29ya2VyLnRlcm1pbmF0ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcHVibGljIHdhaXRGb3JDb21wbGV0aW9uID0gKCk6IFJlc3VsdEFzeW5jPEx1ZmlKb2IsIEVycm9yPiA9PiB7XG4gICAgaWYgKHRoaXMuaXNUZXJtaW5hdGVkKSB7XG4gICAgICBpZiAodGhpcy5zdGF0dXMgPT09IEpvYlN0YXR1cy5DT01QTEVURSkge1xuICAgICAgICByZXR1cm4gb2tBc3luYyh0aGlzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlcnJBc3luYyhlbnN1cmVFcnJvcihcIkpvYiBoYXMgZmFpbGVkXCIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5PUEVSQVRJT05fRkFJTEVELCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5KT0JfVEVSTUlOQVRFRCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSBKb2JTdGF0dXMuQ09NUExFVEUpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgcHVibGljIHdhaXRGb3JTdGFydCA9ICgpOiBSZXN1bHRBc3luYzxMdWZpSm9iLCBFcnJvcj4gPT4ge1xuICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5PUEVSQVRJT05fRkFJTEVELCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ldmVudHMub25jZShFVkVOVC5VUExPQURfU1RBUlRFRCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodGhpcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXZlbnRzLm9uY2UoRVZFTlQuRE9XTkxPQURfU1RBUlRFRCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodGhpcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICAoZXJyb3IpID0+IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICApO1xuICB9O1xuXG4gIHByaXZhdGUgZGlzcGF0Y2hFdmVudCA9IChldmVudDogRVZFTlQsIGVycm9yOiB1bmRlZmluZWQgfCBFcnJvcikgPT4ge1xuICAgIHRoaXMuZXZlbnRzLmVtaXQoZXZlbnQsIGVycm9yKTtcbiAgfTtcbn1cbiIsICJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJy4vaW5kZXguanMnXG5cbmV4cG9ydCB7IEV2ZW50RW1pdHRlciB9XG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXJcbiIsICJleHBvcnQgY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG5cdH1cbn1cblxuLyoqXG5BbiBlcnJvciB0byBiZSB0aHJvd24gd2hlbiB0aGUgcmVxdWVzdCBpcyBhYm9ydGVkIGJ5IEFib3J0Q29udHJvbGxlci5cbkRPTUV4Y2VwdGlvbiBpcyB0aHJvd24gaW5zdGVhZCBvZiB0aGlzIEVycm9yIHdoZW4gRE9NRXhjZXB0aW9uIGlzIGF2YWlsYWJsZS5cbiovXG5leHBvcnQgY2xhc3MgQWJvcnRFcnJvciBleHRlbmRzIEVycm9yIHtcblx0Y29uc3RydWN0b3IobWVzc2FnZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InO1xuXHRcdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cdH1cbn1cblxuLyoqXG5UT0RPOiBSZW1vdmUgQWJvcnRFcnJvciBhbmQganVzdCB0aHJvdyBET01FeGNlcHRpb24gd2hlbiB0YXJnZXRpbmcgTm9kZSAxOC5cbiovXG5jb25zdCBnZXRET01FeGNlcHRpb24gPSBlcnJvck1lc3NhZ2UgPT4gZ2xvYmFsVGhpcy5ET01FeGNlcHRpb24gPT09IHVuZGVmaW5lZFxuXHQ/IG5ldyBBYm9ydEVycm9yKGVycm9yTWVzc2FnZSlcblx0OiBuZXcgRE9NRXhjZXB0aW9uKGVycm9yTWVzc2FnZSk7XG5cbi8qKlxuVE9ETzogUmVtb3ZlIGJlbG93IGZ1bmN0aW9uIGFuZCBqdXN0ICdyZWplY3Qoc2lnbmFsLnJlYXNvbiknIHdoZW4gdGFyZ2V0aW5nIE5vZGUgMTguXG4qL1xuY29uc3QgZ2V0QWJvcnRlZFJlYXNvbiA9IHNpZ25hbCA9PiB7XG5cdGNvbnN0IHJlYXNvbiA9IHNpZ25hbC5yZWFzb24gPT09IHVuZGVmaW5lZFxuXHRcdD8gZ2V0RE9NRXhjZXB0aW9uKCdUaGlzIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nKVxuXHRcdDogc2lnbmFsLnJlYXNvbjtcblxuXHRyZXR1cm4gcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24gOiBnZXRET01FeGNlcHRpb24ocmVhc29uKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBUaW1lb3V0KHByb21pc2UsIG9wdGlvbnMpIHtcblx0Y29uc3Qge1xuXHRcdG1pbGxpc2Vjb25kcyxcblx0XHRmYWxsYmFjayxcblx0XHRtZXNzYWdlLFxuXHRcdGN1c3RvbVRpbWVycyA9IHtzZXRUaW1lb3V0LCBjbGVhclRpbWVvdXR9LFxuXHR9ID0gb3B0aW9ucztcblxuXHRsZXQgdGltZXI7XG5cblx0Y29uc3Qgd3JhcHBlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBtaWxsaXNlY29uZHMgIT09ICdudW1iZXInIHx8IE1hdGguc2lnbihtaWxsaXNlY29uZHMpICE9PSAxKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBtaWxsaXNlY29uZHNcXGAgdG8gYmUgYSBwb3NpdGl2ZSBudW1iZXIsIGdvdCBcXGAke21pbGxpc2Vjb25kc31cXGBgKTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9ucy5zaWduYWwpIHtcblx0XHRcdGNvbnN0IHtzaWduYWx9ID0gb3B0aW9ucztcblx0XHRcdGlmIChzaWduYWwuYWJvcnRlZCkge1xuXHRcdFx0XHRyZWplY3QoZ2V0QWJvcnRlZFJlYXNvbihzaWduYWwpKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYWJvcnRIYW5kbGVyID0gKCkgPT4ge1xuXHRcdFx0XHRyZWplY3QoZ2V0QWJvcnRlZFJlYXNvbihzaWduYWwpKTtcblx0XHRcdH07XG5cblx0XHRcdHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0SGFuZGxlciwge29uY2U6IHRydWV9KTtcblxuXHRcdFx0cHJvbWlzZS5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0c2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRIYW5kbGVyKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChtaWxsaXNlY29uZHMgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuXHRcdFx0cHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY3JlYXRlIHRoZSBlcnJvciBvdXRzaWRlIG9mIGBzZXRUaW1lb3V0YCB0byBwcmVzZXJ2ZSB0aGUgc3RhY2sgdHJhY2UuXG5cdFx0Y29uc3QgdGltZW91dEVycm9yID0gbmV3IFRpbWVvdXRFcnJvcigpO1xuXG5cdFx0dGltZXIgPSBjdXN0b21UaW1lcnMuc2V0VGltZW91dC5jYWxsKHVuZGVmaW5lZCwgKCkgPT4ge1xuXHRcdFx0aWYgKGZhbGxiYWNrKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxsYmFjaygpKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZW9mIHByb21pc2UuY2FuY2VsID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHByb21pc2UuY2FuY2VsKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtZXNzYWdlID09PSBmYWxzZSkge1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0XHRyZWplY3QobWVzc2FnZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aW1lb3V0RXJyb3IubWVzc2FnZSA9IG1lc3NhZ2UgPz8gYFByb21pc2UgdGltZWQgb3V0IGFmdGVyICR7bWlsbGlzZWNvbmRzfSBtaWxsaXNlY29uZHNgO1xuXHRcdFx0XHRyZWplY3QodGltZW91dEVycm9yKTtcblx0XHRcdH1cblx0XHR9LCBtaWxsaXNlY29uZHMpO1xuXG5cdFx0KGFzeW5jICgpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc29sdmUoYXdhaXQgcHJvbWlzZSk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH0pKCk7XG5cdH0pO1xuXG5cdGNvbnN0IGNhbmNlbGFibGVQcm9taXNlID0gd3JhcHBlZFByb21pc2UuZmluYWxseSgoKSA9PiB7XG5cdFx0Y2FuY2VsYWJsZVByb21pc2UuY2xlYXIoKTtcblx0fSk7XG5cblx0Y2FuY2VsYWJsZVByb21pc2UuY2xlYXIgPSAoKSA9PiB7XG5cdFx0Y3VzdG9tVGltZXJzLmNsZWFyVGltZW91dC5jYWxsKHVuZGVmaW5lZCwgdGltZXIpO1xuXHRcdHRpbWVyID0gdW5kZWZpbmVkO1xuXHR9O1xuXG5cdHJldHVybiBjYW5jZWxhYmxlUHJvbWlzZTtcbn1cbiIsICIvLyBQb3J0IG9mIGxvd2VyX2JvdW5kIGZyb20gaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2FsZ29yaXRobS9sb3dlcl9ib3VuZFxuLy8gVXNlZCB0byBjb21wdXRlIGluc2VydGlvbiBpbmRleCB0byBrZWVwIHF1ZXVlIHNvcnRlZCBhZnRlciBpbnNlcnRpb25cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvd2VyQm91bmQoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gICAgbGV0IGZpcnN0ID0gMDtcbiAgICBsZXQgY291bnQgPSBhcnJheS5sZW5ndGg7XG4gICAgd2hpbGUgKGNvdW50ID4gMCkge1xuICAgICAgICBjb25zdCBzdGVwID0gTWF0aC50cnVuYyhjb3VudCAvIDIpO1xuICAgICAgICBsZXQgaXQgPSBmaXJzdCArIHN0ZXA7XG4gICAgICAgIGlmIChjb21wYXJhdG9yKGFycmF5W2l0XSwgdmFsdWUpIDw9IDApIHtcbiAgICAgICAgICAgIGZpcnN0ID0gKytpdDtcbiAgICAgICAgICAgIGNvdW50IC09IHN0ZXAgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY291bnQgPSBzdGVwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaXJzdDtcbn1cbiIsICJpbXBvcnQgbG93ZXJCb3VuZCBmcm9tICcuL2xvd2VyLWJvdW5kLmpzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByaW9yaXR5UXVldWUge1xuICAgICNxdWV1ZSA9IFtdO1xuICAgIGVucXVldWUocnVuLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBwcmlvcml0eTogMCxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICAgICAgICBwcmlvcml0eTogb3B0aW9ucy5wcmlvcml0eSxcbiAgICAgICAgICAgIHJ1bixcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuc2l6ZSAmJiB0aGlzLiNxdWV1ZVt0aGlzLnNpemUgLSAxXS5wcmlvcml0eSA+PSBvcHRpb25zLnByaW9yaXR5KSB7XG4gICAgICAgICAgICB0aGlzLiNxdWV1ZS5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbG93ZXJCb3VuZCh0aGlzLiNxdWV1ZSwgZWxlbWVudCwgKGEsIGIpID0+IGIucHJpb3JpdHkgLSBhLnByaW9yaXR5KTtcbiAgICAgICAgdGhpcy4jcXVldWUuc3BsaWNlKGluZGV4LCAwLCBlbGVtZW50KTtcbiAgICB9XG4gICAgZGVxdWV1ZSgpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuI3F1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIHJldHVybiBpdGVtPy5ydW47XG4gICAgfVxuICAgIGZpbHRlcihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNxdWV1ZS5maWx0ZXIoKGVsZW1lbnQpID0+IGVsZW1lbnQucHJpb3JpdHkgPT09IG9wdGlvbnMucHJpb3JpdHkpLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC5ydW4pO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3F1ZXVlLmxlbmd0aDtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRlbWl0dGVyMyc7XG5pbXBvcnQgcFRpbWVvdXQsIHsgVGltZW91dEVycm9yIH0gZnJvbSAncC10aW1lb3V0JztcbmltcG9ydCBQcmlvcml0eVF1ZXVlIGZyb20gJy4vcHJpb3JpdHktcXVldWUuanMnO1xuLyoqXG5Qcm9taXNlIHF1ZXVlIHdpdGggY29uY3VycmVuY3kgY29udHJvbC5cbiovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQUXVldWUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgICNjYXJyeW92ZXJDb25jdXJyZW5jeUNvdW50O1xuICAgICNpc0ludGVydmFsSWdub3JlZDtcbiAgICAjaW50ZXJ2YWxDb3VudCA9IDA7XG4gICAgI2ludGVydmFsQ2FwO1xuICAgICNpbnRlcnZhbDtcbiAgICAjaW50ZXJ2YWxFbmQgPSAwO1xuICAgICNpbnRlcnZhbElkO1xuICAgICN0aW1lb3V0SWQ7XG4gICAgI3F1ZXVlO1xuICAgICNxdWV1ZUNsYXNzO1xuICAgICNwZW5kaW5nID0gMDtcbiAgICAvLyBUaGUgYCFgIGlzIG5lZWRlZCBiZWNhdXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMzIxOTRcbiAgICAjY29uY3VycmVuY3k7XG4gICAgI2lzUGF1c2VkO1xuICAgICN0aHJvd09uVGltZW91dDtcbiAgICAvKipcbiAgICBQZXItb3BlcmF0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBPcGVyYXRpb25zIGZ1bGZpbGwgb25jZSBgdGltZW91dGAgZWxhcHNlcyBpZiB0aGV5IGhhdmVuJ3QgYWxyZWFkeS5cblxuICAgIEFwcGxpZXMgdG8gZWFjaCBmdXR1cmUgb3BlcmF0aW9uLlxuICAgICovXG4gICAgdGltZW91dDtcbiAgICAvLyBUT0RPOiBUaGUgYHRocm93T25UaW1lb3V0YCBvcHRpb24gc2hvdWxkIGFmZmVjdCB0aGUgcmV0dXJuIHR5cGVzIG9mIGBhZGQoKWAgYW5kIGBhZGRBbGwoKWBcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvY29uc2lzdGVudC10eXBlLWFzc2VydGlvbnNcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQ6IGZhbHNlLFxuICAgICAgICAgICAgaW50ZXJ2YWxDYXA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgICAgICAgICAgIGludGVydmFsOiAwLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgICAgICAgICAgIGF1dG9TdGFydDogdHJ1ZSxcbiAgICAgICAgICAgIHF1ZXVlQ2xhc3M6IFByaW9yaXR5UXVldWUsXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoISh0eXBlb2Ygb3B0aW9ucy5pbnRlcnZhbENhcCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5pbnRlcnZhbENhcCA+PSAxKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgaW50ZXJ2YWxDYXBcXGAgdG8gYmUgYSBudW1iZXIgZnJvbSAxIGFuZCB1cCwgZ290IFxcYCR7b3B0aW9ucy5pbnRlcnZhbENhcD8udG9TdHJpbmcoKSA/PyAnJ31cXGAgKCR7dHlwZW9mIG9wdGlvbnMuaW50ZXJ2YWxDYXB9KWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmludGVydmFsID09PSB1bmRlZmluZWQgfHwgIShOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5pbnRlcnZhbCkgJiYgb3B0aW9ucy5pbnRlcnZhbCA+PSAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgaW50ZXJ2YWxcXGAgdG8gYmUgYSBmaW5pdGUgbnVtYmVyID49IDAsIGdvdCBcXGAke29wdGlvbnMuaW50ZXJ2YWw/LnRvU3RyaW5nKCkgPz8gJyd9XFxgICgke3R5cGVvZiBvcHRpb25zLmludGVydmFsfSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNjYXJyeW92ZXJDb25jdXJyZW5jeUNvdW50ID0gb3B0aW9ucy5jYXJyeW92ZXJDb25jdXJyZW5jeUNvdW50O1xuICAgICAgICB0aGlzLiNpc0ludGVydmFsSWdub3JlZCA9IG9wdGlvbnMuaW50ZXJ2YWxDYXAgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fCBvcHRpb25zLmludGVydmFsID09PSAwO1xuICAgICAgICB0aGlzLiNpbnRlcnZhbENhcCA9IG9wdGlvbnMuaW50ZXJ2YWxDYXA7XG4gICAgICAgIHRoaXMuI2ludGVydmFsID0gb3B0aW9ucy5pbnRlcnZhbDtcbiAgICAgICAgdGhpcy4jcXVldWUgPSBuZXcgb3B0aW9ucy5xdWV1ZUNsYXNzKCk7XG4gICAgICAgIHRoaXMuI3F1ZXVlQ2xhc3MgPSBvcHRpb25zLnF1ZXVlQ2xhc3M7XG4gICAgICAgIHRoaXMuY29uY3VycmVuY3kgPSBvcHRpb25zLmNvbmN1cnJlbmN5O1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQ7XG4gICAgICAgIHRoaXMuI3Rocm93T25UaW1lb3V0ID0gb3B0aW9ucy50aHJvd09uVGltZW91dCA9PT0gdHJ1ZTtcbiAgICAgICAgdGhpcy4jaXNQYXVzZWQgPSBvcHRpb25zLmF1dG9TdGFydCA9PT0gZmFsc2U7XG4gICAgfVxuICAgIGdldCAjZG9lc0ludGVydmFsQWxsb3dBbm90aGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jaXNJbnRlcnZhbElnbm9yZWQgfHwgdGhpcy4jaW50ZXJ2YWxDb3VudCA8IHRoaXMuI2ludGVydmFsQ2FwO1xuICAgIH1cbiAgICBnZXQgI2RvZXNDb25jdXJyZW50QWxsb3dBbm90aGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGVuZGluZyA8IHRoaXMuI2NvbmN1cnJlbmN5O1xuICAgIH1cbiAgICAjbmV4dCgpIHtcbiAgICAgICAgdGhpcy4jcGVuZGluZy0tO1xuICAgICAgICB0aGlzLiN0cnlUb1N0YXJ0QW5vdGhlcigpO1xuICAgICAgICB0aGlzLmVtaXQoJ25leHQnKTtcbiAgICB9XG4gICAgI29uUmVzdW1lSW50ZXJ2YWwoKSB7XG4gICAgICAgIHRoaXMuI29uSW50ZXJ2YWwoKTtcbiAgICAgICAgdGhpcy4jaW5pdGlhbGl6ZUludGVydmFsSWZOZWVkZWQoKTtcbiAgICAgICAgdGhpcy4jdGltZW91dElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgI2lzSW50ZXJ2YWxQYXVzZWQoKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGlmICh0aGlzLiNpbnRlcnZhbElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbGF5ID0gdGhpcy4jaW50ZXJ2YWxFbmQgLSBub3c7XG4gICAgICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQWN0IGFzIHRoZSBpbnRlcnZhbCB3YXMgZG9uZVxuICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVzdW1lIGl0IGhlcmUgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc3VtZWQgb24gbGluZSAxNjBcbiAgICAgICAgICAgICAgICB0aGlzLiNpbnRlcnZhbENvdW50ID0gKHRoaXMuI2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQpID8gdGhpcy4jcGVuZGluZyA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBY3QgYXMgdGhlIGludGVydmFsIGlzIHBlbmRpbmdcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jdGltZW91dElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNvblJlc3VtZUludGVydmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAjdHJ5VG9TdGFydEFub3RoZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLiNxdWV1ZS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAvLyBXZSBjYW4gY2xlYXIgdGhlIGludGVydmFsIChcInBhdXNlXCIpXG4gICAgICAgICAgICAvLyBCZWNhdXNlIHdlIGNhbiByZWRvIGl0IGxhdGVyIChcInJlc3VtZVwiKVxuICAgICAgICAgICAgaWYgKHRoaXMuI2ludGVydmFsSWQpIHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuI2ludGVydmFsSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jaW50ZXJ2YWxJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZW1wdHknKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiNwZW5kaW5nID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdpZGxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLiNpc1BhdXNlZCkge1xuICAgICAgICAgICAgY29uc3QgY2FuSW5pdGlhbGl6ZUludGVydmFsID0gIXRoaXMuI2lzSW50ZXJ2YWxQYXVzZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy4jZG9lc0ludGVydmFsQWxsb3dBbm90aGVyICYmIHRoaXMuI2RvZXNDb25jdXJyZW50QWxsb3dBbm90aGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgam9iID0gdGhpcy4jcXVldWUuZGVxdWV1ZSgpO1xuICAgICAgICAgICAgICAgIGlmICgham9iKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBqb2IoKTtcbiAgICAgICAgICAgICAgICBpZiAoY2FuSW5pdGlhbGl6ZUludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2luaXRpYWxpemVJbnRlcnZhbElmTmVlZGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgI2luaXRpYWxpemVJbnRlcnZhbElmTmVlZGVkKCkge1xuICAgICAgICBpZiAodGhpcy4jaXNJbnRlcnZhbElnbm9yZWQgfHwgdGhpcy4jaW50ZXJ2YWxJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuI29uSW50ZXJ2YWwoKTtcbiAgICAgICAgfSwgdGhpcy4jaW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLiNpbnRlcnZhbEVuZCA9IERhdGUubm93KCkgKyB0aGlzLiNpbnRlcnZhbDtcbiAgICB9XG4gICAgI29uSW50ZXJ2YWwoKSB7XG4gICAgICAgIGlmICh0aGlzLiNpbnRlcnZhbENvdW50ID09PSAwICYmIHRoaXMuI3BlbmRpbmcgPT09IDAgJiYgdGhpcy4jaW50ZXJ2YWxJZCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiNpbnRlcnZhbElkKTtcbiAgICAgICAgICAgIHRoaXMuI2ludGVydmFsSWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jaW50ZXJ2YWxDb3VudCA9IHRoaXMuI2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQgPyB0aGlzLiNwZW5kaW5nIDogMDtcbiAgICAgICAgdGhpcy4jcHJvY2Vzc1F1ZXVlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgIEV4ZWN1dGVzIGFsbCBxdWV1ZWQgZnVuY3Rpb25zIHVudGlsIGl0IHJlYWNoZXMgdGhlIGxpbWl0LlxuICAgICovXG4gICAgI3Byb2Nlc3NRdWV1ZSgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgICAgIHdoaWxlICh0aGlzLiN0cnlUb1N0YXJ0QW5vdGhlcigpKSB7IH1cbiAgICB9XG4gICAgZ2V0IGNvbmN1cnJlbmN5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY29uY3VycmVuY3k7XG4gICAgfVxuICAgIHNldCBjb25jdXJyZW5jeShuZXdDb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoISh0eXBlb2YgbmV3Q29uY3VycmVuY3kgPT09ICdudW1iZXInICYmIG5ld0NvbmN1cnJlbmN5ID49IDEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBjb25jdXJyZW5jeVxcYCB0byBiZSBhIG51bWJlciBmcm9tIDEgYW5kIHVwLCBnb3QgXFxgJHtuZXdDb25jdXJyZW5jeX1cXGAgKCR7dHlwZW9mIG5ld0NvbmN1cnJlbmN5fSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNjb25jdXJyZW5jeSA9IG5ld0NvbmN1cnJlbmN5O1xuICAgICAgICB0aGlzLiNwcm9jZXNzUXVldWUoKTtcbiAgICB9XG4gICAgYXN5bmMgI3Rocm93T25BYm9ydChzaWduYWwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgfSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgYWRkKGZ1bmN0aW9uXywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgICAgICB0aHJvd09uVGltZW91dDogdGhpcy4jdGhyb3dPblRpbWVvdXQsXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4jcXVldWUuZW5xdWV1ZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcGVuZGluZysrO1xuICAgICAgICAgICAgICAgIHRoaXMuI2ludGVydmFsQ291bnQrKztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wZXJhdGlvbiA9IGZ1bmN0aW9uXyh7IHNpZ25hbDogb3B0aW9ucy5zaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IHBUaW1lb3V0KFByb21pc2UucmVzb2x2ZShvcGVyYXRpb24pLCB7IG1pbGxpc2Vjb25kczogb3B0aW9ucy50aW1lb3V0IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNpZ25hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gUHJvbWlzZS5yYWNlKFtvcGVyYXRpb24sIHRoaXMuI3Rocm93T25BYm9ydChvcHRpb25zLnNpZ25hbCldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcGVyYXRpb247XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdjb21wbGV0ZWQnLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgVGltZW91dEVycm9yICYmICFvcHRpb25zLnRocm93T25UaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI25leHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnYWRkJyk7XG4gICAgICAgICAgICB0aGlzLiN0cnlUb1N0YXJ0QW5vdGhlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgYWRkQWxsKGZ1bmN0aW9ucywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZnVuY3Rpb25zLm1hcChhc3luYyAoZnVuY3Rpb25fKSA9PiB0aGlzLmFkZChmdW5jdGlvbl8sIG9wdGlvbnMpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgIFN0YXJ0IChvciByZXN1bWUpIGV4ZWN1dGluZyBlbnF1ZXVlZCB0YXNrcyB3aXRoaW4gY29uY3VycmVuY3kgbGltaXQuIE5vIG5lZWQgdG8gY2FsbCB0aGlzIGlmIHF1ZXVlIGlzIG5vdCBwYXVzZWQgKHZpYSBgb3B0aW9ucy5hdXRvU3RhcnQgPSBmYWxzZWAgb3IgYnkgYC5wYXVzZSgpYCBtZXRob2QuKVxuICAgICovXG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy4jaXNQYXVzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2lzUGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuI3Byb2Nlc3NRdWV1ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgUHV0IHF1ZXVlIGV4ZWN1dGlvbiBvbiBob2xkLlxuICAgICovXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXMuI2lzUGF1c2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ2xlYXIgdGhlIHF1ZXVlLlxuICAgICovXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuI3F1ZXVlID0gbmV3IHRoaXMuI3F1ZXVlQ2xhc3MoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gVXNlZnVsIGlmIHlvdSBmb3IgZXhhbXBsZSBhZGQgYWRkaXRpb25hbCBpdGVtcyBhdCBhIGxhdGVyIHRpbWUuXG5cbiAgICBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBzZXR0bGVzIHdoZW4gdGhlIHF1ZXVlIGJlY29tZXMgZW1wdHkuXG4gICAgKi9cbiAgICBhc3luYyBvbkVtcHR5KCkge1xuICAgICAgICAvLyBJbnN0YW50bHkgcmVzb2x2ZSBpZiB0aGUgcXVldWUgaXMgZW1wdHlcbiAgICAgICAgaWYgKHRoaXMuI3F1ZXVlLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLiNvbkV2ZW50KCdlbXB0eScpO1xuICAgIH1cbiAgICAvKipcbiAgICBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBzZXR0bGVzIHdoZW4gdGhlIHF1ZXVlIHNpemUgaXMgbGVzcyB0aGFuIHRoZSBnaXZlbiBsaW1pdDogYHF1ZXVlLnNpemUgPCBsaW1pdGAuXG5cbiAgICBJZiB5b3Ugd2FudCB0byBhdm9pZCBoYXZpbmcgdGhlIHF1ZXVlIGdyb3cgYmV5b25kIGEgY2VydGFpbiBzaXplIHlvdSBjYW4gYGF3YWl0IHF1ZXVlLm9uU2l6ZUxlc3NUaGFuKClgIGJlZm9yZSBhZGRpbmcgYSBuZXcgaXRlbS5cblxuICAgIE5vdGUgdGhhdCB0aGlzIG9ubHkgbGltaXRzIHRoZSBudW1iZXIgb2YgaXRlbXMgd2FpdGluZyB0byBzdGFydC4gVGhlcmUgY291bGQgc3RpbGwgYmUgdXAgdG8gYGNvbmN1cnJlbmN5YCBqb2JzIGFscmVhZHkgcnVubmluZyB0aGF0IHRoaXMgY2FsbCBkb2VzIG5vdCBpbmNsdWRlIGluIGl0cyBjYWxjdWxhdGlvbi5cbiAgICAqL1xuICAgIGFzeW5jIG9uU2l6ZUxlc3NUaGFuKGxpbWl0KSB7XG4gICAgICAgIC8vIEluc3RhbnRseSByZXNvbHZlIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eS5cbiAgICAgICAgaWYgKHRoaXMuI3F1ZXVlLnNpemUgPCBsaW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuI29uRXZlbnQoJ25leHQnLCAoKSA9PiB0aGlzLiNxdWV1ZS5zaXplIDwgbGltaXQpO1xuICAgIH1cbiAgICAvKipcbiAgICBUaGUgZGlmZmVyZW5jZSB3aXRoIGAub25FbXB0eWAgaXMgdGhhdCBgLm9uSWRsZWAgZ3VhcmFudGVlcyB0aGF0IGFsbCB3b3JrIGZyb20gdGhlIHF1ZXVlIGhhcyBmaW5pc2hlZC4gYC5vbkVtcHR5YCBtZXJlbHkgc2lnbmFscyB0aGF0IHRoZSBxdWV1ZSBpcyBlbXB0eSwgYnV0IGl0IGNvdWxkIG1lYW4gdGhhdCBzb21lIHByb21pc2VzIGhhdmVuJ3QgY29tcGxldGVkIHlldC5cblxuICAgIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHNldHRsZXMgd2hlbiB0aGUgcXVldWUgYmVjb21lcyBlbXB0eSwgYW5kIGFsbCBwcm9taXNlcyBoYXZlIGNvbXBsZXRlZDsgYHF1ZXVlLnNpemUgPT09IDAgJiYgcXVldWUucGVuZGluZyA9PT0gMGAuXG4gICAgKi9cbiAgICBhc3luYyBvbklkbGUoKSB7XG4gICAgICAgIC8vIEluc3RhbnRseSByZXNvbHZlIGlmIG5vbmUgcGVuZGluZyBhbmQgaWYgbm90aGluZyBlbHNlIGlzIHF1ZXVlZFxuICAgICAgICBpZiAodGhpcy4jcGVuZGluZyA9PT0gMCAmJiB0aGlzLiNxdWV1ZS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy4jb25FdmVudCgnaWRsZScpO1xuICAgIH1cbiAgICBhc3luYyAjb25FdmVudChldmVudCwgZmlsdGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoZXZlbnQsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vbihldmVudCwgbGlzdGVuZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgU2l6ZSBvZiB0aGUgcXVldWUsIHRoZSBudW1iZXIgb2YgcXVldWVkIGl0ZW1zIHdhaXRpbmcgdG8gcnVuLlxuICAgICovXG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNxdWV1ZS5zaXplO1xuICAgIH1cbiAgICAvKipcbiAgICBTaXplIG9mIHRoZSBxdWV1ZSwgZmlsdGVyZWQgYnkgdGhlIGdpdmVuIG9wdGlvbnMuXG5cbiAgICBGb3IgZXhhbXBsZSwgdGhpcyBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBudW1iZXIgb2YgaXRlbXMgcmVtYWluaW5nIGluIHRoZSBxdWV1ZSB3aXRoIGEgc3BlY2lmaWMgcHJpb3JpdHkgbGV2ZWwuXG4gICAgKi9cbiAgICBzaXplQnkob3B0aW9ucykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1hcnJheS1jYWxsYmFjay1yZWZlcmVuY2VcbiAgICAgICAgcmV0dXJuIHRoaXMuI3F1ZXVlLmZpbHRlcihvcHRpb25zKS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgIE51bWJlciBvZiBydW5uaW5nIGl0ZW1zIChubyBsb25nZXIgaW4gdGhlIHF1ZXVlKS5cbiAgICAqL1xuICAgIGdldCBwZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGVuZGluZztcbiAgICB9XG4gICAgLyoqXG4gICAgV2hldGhlciB0aGUgcXVldWUgaXMgY3VycmVudGx5IHBhdXNlZC5cbiAgICAqL1xuICAgIGdldCBpc1BhdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzUGF1c2VkO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwifi9lcnJvci9iYXNlLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBXb3JrZXJFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7fVxuIiwgImltcG9ydCB7IFdvcmtlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd29ya2VyL3dvcmtlci1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgV29ya2VyVW5kZWZpbmVkUGFyYW1ldGVyRXJyb3IgZXh0ZW5kcyBXb3JrZXJFcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2UgPSBcIlBhcmFtZXRlciBtdXN0IGJlIGRlZmluZWRcIjtcbn1cbiIsICJpbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyB1cGxvYWRDaHVuayB9IGZyb20gXCJ+L2FwaS93ZWJzb2NrZXQudHNcIjtcbmltcG9ydCB7IGdldEZpbGVJbmRleEluUXVldWUgfSBmcm9tIFwifi9hcGkvbHVmaS50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJBY3Rpb25NZXNzYWdlIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1hY3Rpb24tbWVzc2FnZS50c1wiO1xuaW1wb3J0IHsgZXZlbnRzLCBpbml0LCBzZW5kRmlsZUVycm9yLCB1cGRhdGVGaWxlIH0gZnJvbSBcIn4vd29ya2VyL3NoYXJlZC50c1wiO1xuaW1wb3J0IFBRdWV1ZSBmcm9tIFwicC1xdWV1ZVwiO1xuaW1wb3J0IHsgV09SS0VSX0FDVElPTiB9IGZyb20gXCJ+L2VudW0vd29ya2VyLWFjdGlvbi50c1wiO1xuaW1wb3J0IHsgZW5jcnlwdCB9IGZyb20gXCJ+L2FwaS9jcnlwdG8udHNcIjtcbmltcG9ydCB7IFdvcmtlclVuZGVmaW5lZFBhcmFtZXRlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd29ya2VyL3dvcmtlci11bmRlZmluZWQtcGFyYW1ldGVyLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEx1ZmlGaWxlIH0gZnJvbSBcIn4vZW50aXRpZXMvbHVmaS1maWxlLnRzXCI7XG5pbXBvcnQgeyB3b3JrZXJVcmwgfSBmcm9tIFwifi91dGlscy50c1wiO1xuXG5kZWNsYXJlIGNvbnN0IHNlbGY6IFdvcmtlcjtcblxubGV0IGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbmNvbnN0IFFVRVVFX0NPTkNVUlJFTkNZX0xJTUlUID0gbmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kgfHwgMTtcbmNvbnN0IHF1ZXVlID0gbmV3IFBRdWV1ZSh7XG4gIGNvbmN1cnJlbmN5OiBRVUVVRV9DT05DVVJSRU5DWV9MSU1JVCxcbiAgYXV0b1N0YXJ0OiBmYWxzZSxcbn0pO1xubGV0IGl0ZW1zSW5RdWV1ZSA9IDA7XG5sZXQgaXNQYXVzZWQgPSBmYWxzZTtcbmxldCBsdWZpRmlsZTogTHVmaUZpbGU7XG5jb25zdCBlbmNyeXB0Sm9iID0gbmV3IFdvcmtlcih3b3JrZXJVcmwoXCJlbmNyeXB0XCIpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cbnNlbGYub25tZXNzYWdlID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgaWYgKCFpc0luaXRpYWxpemVkKSB7XG4gICAgaW5pdCgpO1xuICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgbHVmaUZpbGUgPSBldmVudC5kYXRhLmFyZ3MubHVmaUZpbGU7XG5cbiAgICBldmVudHMub25jZShFVkVOVC5VUExPQURfU1RBUlRFRCwgKCkgPT4ge1xuICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5VUExPQURfU1RBUlRFRCB9KTtcbiAgICB9KTtcblxuICAgIGV2ZW50cy5vbihFVkVOVC5DSFVOS19VUExPQURFRCwgKCkgPT4ge1xuICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5DSFVOS19VUExPQURFRCB9KTtcblxuICAgICAgaXRlbXNJblF1ZXVlLS07XG5cbiAgICAgIGlmIChcbiAgICAgICAgcXVldWUuaXNQYXVzZWQgJiYgIWlzUGF1c2VkICYmIGl0ZW1zSW5RdWV1ZSA8IFFVRVVFX0NPTkNVUlJFTkNZX0xJTUlUXG4gICAgICApIHtcbiAgICAgICAgcmVzdW1lUXVldWUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGV2ZW50cy5vbmNlKEVWRU5ULlVQTE9BRF9DT01QTEVURSwgKCkgPT4ge1xuICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgIGV2ZW50OiBFVkVOVC5VUExPQURfQ09NUExFVEUsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGV2ZW50cy5vbihFVkVOVC5GSUxFX1VQREFURUQsIHVwZGF0ZUZpbGUpO1xuICB9XG5cbiAgaWYgKGV2ZW50LmRhdGEuYXJncy5jaHVuaykge1xuICAgIGV2ZW50LmRhdGEuYXJncy5sdWZpRmlsZSA9IGx1ZmlGaWxlO1xuICAgIHJldHVybiBzdGFydFVwbG9hZChcbiAgICAgIGV2ZW50LmRhdGEsXG4gICAgICBnZXRGaWxlSW5kZXhJblF1ZXVlKGx1ZmlGaWxlLmtleXMuY2xpZW50KSxcbiAgICApLm1hcEVycigoZXJyb3IpID0+IHtcbiAgICAgIHNlbmRGaWxlRXJyb3IobHVmaUZpbGUsIGVycm9yKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZXZlbnQuZGF0YS5hY3Rpb24gPT09IFdPUktFUl9BQ1RJT04uUEFVU0UpIHtcbiAgICAgIGlzUGF1c2VkID0gdHJ1ZTtcbiAgICAgIHBhdXNlUXVldWUoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEuYWN0aW9uID09PSBXT1JLRVJfQUNUSU9OLlJFU1VNRSkge1xuICAgICAgaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIHJlc3VtZVF1ZXVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbmRGaWxlRXJyb3IobHVmaUZpbGUsIG5ldyBXb3JrZXJVbmRlZmluZWRQYXJhbWV0ZXJFcnJvcigpKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHN0YXJ0VXBsb2FkID0gKFxuICB3b3JrZXJNZXNzYWdlOiBXb3JrZXJBY3Rpb25NZXNzYWdlLFxuICBzZXJ2ZXJRdWV1ZUluZGV4OiBudW1iZXIsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBFcnJvcj4gPT4ge1xuICBjb25zdCB7IGx1ZmlGaWxlLCBhbGdvIH0gPSB3b3JrZXJNZXNzYWdlLmFyZ3M7XG5cbiAgaWYgKHdvcmtlck1lc3NhZ2UuYXJncy5jaHVuayAmJiBhbGdvKSB7XG4gICAgLy8gVXBsb2FkIGZpcnN0IGNodW5rIGJlZm9yZSB0byBnZXQgc2VydmVyS2V5IGluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXBsb2FkIG90aGVyIGNodW5rc1xuICAgIGlmICh3b3JrZXJNZXNzYWdlLmFyZ3MuY2h1bmsuaW5kZXggPT09IDApIHtcbiAgICAgIGVuY3J5cHQobHVmaUZpbGUua2V5cy5jbGllbnQsIHdvcmtlck1lc3NhZ2UuYXJncy5jaHVuay5idWZmZXIsIGFsZ28pLm1hcChcbiAgICAgICAgKGVuY3J5cHRlZERhdGEpID0+IHtcbiAgICAgICAgICB1cGxvYWRDaHVuayhcbiAgICAgICAgICAgIGx1ZmlGaWxlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0b3RhbDogbHVmaUZpbGUudG90YWxDaHVua3MsXG4gICAgICAgICAgICAgIHBhcnQ6IDAsXG4gICAgICAgICAgICAgIHNpemU6IGx1ZmlGaWxlLnNpemUsXG4gICAgICAgICAgICAgIG5hbWU6IGx1ZmlGaWxlLm5hbWUsXG4gICAgICAgICAgICAgIHR5cGU6IGx1ZmlGaWxlLnR5cGUsXG4gICAgICAgICAgICAgIGRlbGF5OiBsdWZpRmlsZS5kZWxheSxcbiAgICAgICAgICAgICAgZGVsX2F0X2ZpcnN0X3ZpZXc6IGx1ZmlGaWxlLmRlbEF0Rmlyc3RWaWV3LFxuICAgICAgICAgICAgICB6aXBwZWQ6IGx1ZmlGaWxlLnppcHBlZCxcbiAgICAgICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgICAgIGk6IHNlcnZlclF1ZXVlSW5kZXgsXG4gICAgICAgICAgICAgIGZpbGVfcHdkOiBsdWZpRmlsZS5wYXNzd29yZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0ZWREYXRhLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpdGVtc0luUXVldWUrKztcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXVlLmFkZCgoKSA9PiB7XG4gICAgICAgIGlmICh3b3JrZXJNZXNzYWdlLmFyZ3MuY2h1bmspIHtcbiAgICAgICAgICBjb25zdCB3YWl0Rm9yRW5jcnlwdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICAgIGl0ZW1zSW5RdWV1ZSsrO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgZW5jcnlwdEpvYi5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHVwbG9hZENodW5rKFxuICAgICAgICAgICAgICAgICAgbHVmaUZpbGUsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiBsdWZpRmlsZS50b3RhbENodW5rcyxcbiAgICAgICAgICAgICAgICAgICAgcGFydDogZXZlbnQuZGF0YS5jaHVua0luZGV4LFxuICAgICAgICAgICAgICAgICAgICBzaXplOiBsdWZpRmlsZS5zaXplLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBsdWZpRmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBsdWZpRmlsZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBkZWxheTogbHVmaUZpbGUuZGVsYXksXG4gICAgICAgICAgICAgICAgICAgIGRlbF9hdF9maXJzdF92aWV3OiBsdWZpRmlsZS5kZWxBdEZpcnN0VmlldyxcbiAgICAgICAgICAgICAgICAgICAgemlwcGVkOiBsdWZpRmlsZS56aXBwZWQsXG4gICAgICAgICAgICAgICAgICAgIGlkOiBsdWZpRmlsZS5rZXlzLnNlcnZlcixcbiAgICAgICAgICAgICAgICAgICAgaTogc2VydmVyUXVldWVJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgZmlsZV9wd2Q6IGx1ZmlGaWxlLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuZW5jcnlwdGVkRGF0YSxcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBlbmNyeXB0Sm9iLnBvc3RNZXNzYWdlKHdvcmtlck1lc3NhZ2UsIFtcbiAgICAgICAgICAgIHdvcmtlck1lc3NhZ2UuYXJncy5jaHVuay5idWZmZXIsXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhcXVldWUuaXNQYXVzZWQgJiYgKGlzUGF1c2VkIHx8XG4gICAgICAgICAgICAgIGl0ZW1zSW5RdWV1ZSA9PT0gUVVFVUVfQ09OQ1VSUkVOQ1lfTElNSVQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwYXVzZVF1ZXVlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2FpdEZvckVuY3J5cHRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBXb3JrZXJVbmRlZmluZWRQYXJhbWV0ZXJFcnJvcihcImFsZ28gbXVzdCBiZSBkZWZpbmVkXCIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbn07XG5cbmNvbnN0IHBhdXNlUXVldWUgPSAoKSA9PiB7XG4gIHF1ZXVlLnBhdXNlKCk7XG4gIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuSk9CX1BBVVNFRCB9KTtcbn07XG5cbmNvbnN0IHJlc3VtZVF1ZXVlID0gKCkgPT4ge1xuICBxdWV1ZS5zdGFydCgpO1xuICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULkpPQl9SRVNVTUVEIH0pO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICIrMUNBQUEsSUFBQUEsR0FBQUMsR0FBQSxDQUFBQyxHQUFBQyxLQUFBLGNBdUJBLElBQUlDLEdBQUksT0FBTyxTQUFZLFNBQVcsUUFBVSxLQUM1Q0MsR0FBZUQsSUFBSyxPQUFPQSxHQUFFLE9BQVUsV0FDdkNBLEdBQUUsTUFDRixTQUFzQkUsRUFBUUMsRUFBVUMsRUFBTSxDQUM5QyxPQUFPLFNBQVMsVUFBVSxNQUFNLEtBQUtGLEVBQVFDLEVBQVVDLENBQUksQ0FDN0QsRUFFRUMsR0FDQUwsSUFBSyxPQUFPQSxHQUFFLFNBQVksV0FDNUJLLEdBQWlCTCxHQUFFLFFBQ1YsT0FBTyxzQkFDaEJLLEdBQWlCLFNBQXdCSCxFQUFRLENBQy9DLE9BQU8sT0FBTyxvQkFBb0JBLENBQU0sRUFDckMsT0FBTyxPQUFPLHNCQUFzQkEsQ0FBTSxDQUFDLENBQ2hELEVBRUFHLEdBQWlCLFNBQXdCSCxFQUFRLENBQy9DLE9BQU8sT0FBTyxvQkFBb0JBLENBQU0sQ0FDMUMsRUFHRixTQUFTSSxHQUFtQkMsRUFBUyxDQUMvQixTQUFXLFFBQVEsTUFBTSxRQUFRLEtBQUtBLENBQU8sQ0FDbkQsQ0FFQSxJQUFJQyxHQUFjLE9BQU8sT0FBUyxTQUFxQkMsRUFBTyxDQUM1RCxPQUFPQSxJQUFVQSxDQUNuQixFQUVBLFNBQVNDLEdBQWUsQ0FDdEJBLEVBQWEsS0FBSyxLQUFLLElBQUksQ0FDN0IsQ0FDQVgsR0FBTyxRQUFVVyxFQUNqQlgsR0FBTyxRQUFRLEtBQU9ZLEdBR3RCRCxFQUFhLGFBQWVBLEVBRTVCQSxFQUFhLFVBQVUsUUFBVSxPQUNqQ0EsRUFBYSxVQUFVLGFBQWUsRUFDdENBLEVBQWEsVUFBVSxjQUFnQixPQUl2QyxJQUFJRSxHQUFzQixHQUUxQixTQUFTQyxHQUFjQyxFQUFVLENBQy9CLEdBQUksT0FBT0EsR0FBYSxXQUN0QixNQUFNLElBQUksVUFBVSxtRUFBcUUsT0FBT0EsQ0FBUSxDQUU1RyxDQUVBLE9BQU8sZUFBZUosRUFBYyxzQkFBdUIsQ0FDekQsV0FBWSxHQUNaLElBQUssVUFBVyxDQUNkLE9BQU9FLEVBQ1QsRUFDQSxJQUFLLFNBQVNHLEVBQUssQ0FDakIsR0FBSSxPQUFPQSxHQUFRLFVBQVlBLEVBQU0sR0FBS1AsR0FBWU8sQ0FBRyxFQUN2RCxNQUFNLElBQUksV0FBVyxrR0FBb0dBLEVBQU0sR0FBRyxFQUVwSUgsR0FBc0JHLENBQ3hCLENBQ0YsQ0FBQyxFQUVETCxFQUFhLEtBQU8sVUFBVyxFQUV6QixLQUFLLFVBQVksUUFDakIsS0FBSyxVQUFZLE9BQU8sZUFBZSxJQUFJLEVBQUUsV0FDL0MsS0FBSyxRQUFVLE9BQU8sT0FBTyxJQUFJLEVBQ2pDLEtBQUssYUFBZSxHQUd0QixLQUFLLGNBQWdCLEtBQUssZUFBaUIsTUFDN0MsRUFJQUEsRUFBYSxVQUFVLGdCQUFrQixTQUF5Qk0sRUFBRyxDQUNuRSxHQUFJLE9BQU9BLEdBQU0sVUFBWUEsRUFBSSxHQUFLUixHQUFZUSxDQUFDLEVBQ2pELE1BQU0sSUFBSSxXQUFXLGdGQUFrRkEsRUFBSSxHQUFHLEVBRWhILFlBQUssY0FBZ0JBLEVBQ2QsSUFDVCxFQUVBLFNBQVNDLEdBQWlCQyxFQUFNLENBQzlCLE9BQUlBLEVBQUssZ0JBQWtCLE9BQ2xCUixFQUFhLG9CQUNmUSxFQUFLLGFBQ2QsQ0FFQVIsRUFBYSxVQUFVLGdCQUFrQixVQUEyQixDQUNsRSxPQUFPTyxHQUFpQixJQUFJLENBQzlCLEVBRUFQLEVBQWEsVUFBVSxLQUFPLFNBQWNTLEVBQU0sQ0FFaEQsUUFESWYsRUFBTyxDQUFDLEVBQ0hnQixFQUFJLEVBQUdBLEVBQUksVUFBVSxPQUFRQSxJQUFLaEIsRUFBSyxLQUFLLFVBQVVnQixDQUFDLENBQUMsRUFDakUsSUFBSUMsRUFBV0YsSUFBUyxRQUVwQkcsRUFBUyxLQUFLLFFBQ2xCLEdBQUlBLElBQVcsT0FDYkQsRUFBV0EsR0FBV0MsRUFBTyxRQUFVLGVBQ2hDLENBQUNELEVBQ1IsTUFBTyxHQUdULEdBQUlBLEVBQVMsQ0FDWCxJQUFJRSxFQUdKLEdBRkluQixFQUFLLE9BQVMsSUFDaEJtQixFQUFLbkIsRUFBSyxDQUFDLEdBQ1RtQixhQUFjLE1BR2hCLE1BQU1BLEVBR1IsSUFBSUMsRUFBTSxJQUFJLE1BQU0sb0JBQXNCRCxFQUFLLEtBQU9BLEVBQUcsUUFBVSxJQUFNLEdBQUcsRUFDNUUsTUFBQUMsRUFBSSxRQUFVRCxFQUNSQyxDQUNSLENBRUEsSUFBSUMsRUFBVUgsRUFBT0gsQ0FBSSxFQUV6QixHQUFJTSxJQUFZLE9BQ2QsTUFBTyxHQUVULEdBQUksT0FBT0EsR0FBWSxXQUNyQnhCLEdBQWF3QixFQUFTLEtBQU1yQixDQUFJLE1BSWhDLFNBRklzQixFQUFNRCxFQUFRLE9BQ2RFLEVBQVlDLEdBQVdILEVBQVNDLENBQUcsRUFDOUJOLEVBQUksRUFBR0EsRUFBSU0sRUFBSyxFQUFFTixFQUN6Qm5CLEdBQWEwQixFQUFVUCxDQUFDLEVBQUcsS0FBTWhCLENBQUksRUFHekMsTUFBTyxFQUNULEVBRUEsU0FBU3lCLEdBQWEzQixFQUFRaUIsRUFBTUwsRUFBVWdCLEVBQVMsQ0FDckQsSUFBSUMsRUFDQVQsRUFDQVUsRUFzQkosR0FwQkFuQixHQUFjQyxDQUFRLEVBRXRCUSxFQUFTcEIsRUFBTyxRQUNab0IsSUFBVyxRQUNiQSxFQUFTcEIsRUFBTyxRQUFVLE9BQU8sT0FBTyxJQUFJLEVBQzVDQSxFQUFPLGFBQWUsSUFJbEJvQixFQUFPLGNBQWdCLFNBQ3pCcEIsRUFBTyxLQUFLLGNBQWVpQixFQUNmTCxFQUFTLFNBQVdBLEVBQVMsU0FBV0EsQ0FBUSxFQUk1RFEsRUFBU3BCLEVBQU8sU0FFbEI4QixFQUFXVixFQUFPSCxDQUFJLEdBR3BCYSxJQUFhLE9BRWZBLEVBQVdWLEVBQU9ILENBQUksRUFBSUwsRUFDMUIsRUFBRVosRUFBTyxxQkFFTCxPQUFPOEIsR0FBYSxXQUV0QkEsRUFBV1YsRUFBT0gsQ0FBSSxFQUNwQlcsRUFBVSxDQUFDaEIsRUFBVWtCLENBQVEsRUFBSSxDQUFDQSxFQUFVbEIsQ0FBUSxFQUU3Q2dCLEVBQ1RFLEVBQVMsUUFBUWxCLENBQVEsRUFFekJrQixFQUFTLEtBQUtsQixDQUFRLEVBSXhCaUIsRUFBSWQsR0FBaUJmLENBQU0sRUFDdkI2QixFQUFJLEdBQUtDLEVBQVMsT0FBU0QsR0FBSyxDQUFDQyxFQUFTLE9BQVEsQ0FDcERBLEVBQVMsT0FBUyxHQUdsQixJQUFJQyxFQUFJLElBQUksTUFBTSwrQ0FDRUQsRUFBUyxPQUFTLElBQU0sT0FBT2IsQ0FBSSxFQUFJLG1FQUV2QixFQUNwQ2MsRUFBRSxLQUFPLDhCQUNUQSxFQUFFLFFBQVUvQixFQUNaK0IsRUFBRSxLQUFPZCxFQUNUYyxFQUFFLE1BQVFELEVBQVMsT0FDbkIxQixHQUFtQjJCLENBQUMsQ0FDdEIsQ0FHRixPQUFPL0IsQ0FDVCxDQUVBUSxFQUFhLFVBQVUsWUFBYyxTQUFxQlMsRUFBTUwsRUFBVSxDQUN4RSxPQUFPZSxHQUFhLEtBQU1WLEVBQU1MLEVBQVUsRUFBSyxDQUNqRCxFQUVBSixFQUFhLFVBQVUsR0FBS0EsRUFBYSxVQUFVLFlBRW5EQSxFQUFhLFVBQVUsZ0JBQ25CLFNBQXlCUyxFQUFNTCxFQUFVLENBQ3ZDLE9BQU9lLEdBQWEsS0FBTVYsRUFBTUwsRUFBVSxFQUFJLENBQ2hELEVBRUosU0FBU29CLElBQWMsQ0FDckIsR0FBSSxDQUFDLEtBQUssTUFHUixPQUZBLEtBQUssT0FBTyxlQUFlLEtBQUssS0FBTSxLQUFLLE1BQU0sRUFDakQsS0FBSyxNQUFRLEdBQ1QsVUFBVSxTQUFXLEVBQ2hCLEtBQUssU0FBUyxLQUFLLEtBQUssTUFBTSxFQUNoQyxLQUFLLFNBQVMsTUFBTSxLQUFLLE9BQVEsU0FBUyxDQUVyRCxDQUVBLFNBQVNDLEdBQVVqQyxFQUFRaUIsRUFBTUwsRUFBVSxDQUN6QyxJQUFJc0IsRUFBUSxDQUFFLE1BQU8sR0FBTyxPQUFRLE9BQVcsT0FBUWxDLEVBQVEsS0FBTWlCLEVBQU0sU0FBVUwsQ0FBUyxFQUMxRnVCLEVBQVVILEdBQVksS0FBS0UsQ0FBSyxFQUNwQyxPQUFBQyxFQUFRLFNBQVd2QixFQUNuQnNCLEVBQU0sT0FBU0MsRUFDUkEsQ0FDVCxDQUVBM0IsRUFBYSxVQUFVLEtBQU8sU0FBY1MsRUFBTUwsRUFBVSxDQUMxRCxPQUFBRCxHQUFjQyxDQUFRLEVBQ3RCLEtBQUssR0FBR0ssRUFBTWdCLEdBQVUsS0FBTWhCLEVBQU1MLENBQVEsQ0FBQyxFQUN0QyxJQUNULEVBRUFKLEVBQWEsVUFBVSxvQkFDbkIsU0FBNkJTLEVBQU1MLEVBQVUsQ0FDM0MsT0FBQUQsR0FBY0MsQ0FBUSxFQUN0QixLQUFLLGdCQUFnQkssRUFBTWdCLEdBQVUsS0FBTWhCLEVBQU1MLENBQVEsQ0FBQyxFQUNuRCxJQUNULEVBR0pKLEVBQWEsVUFBVSxlQUNuQixTQUF3QlMsRUFBTUwsRUFBVSxDQUN0QyxJQUFJd0IsRUFBTWhCLEVBQVFpQixFQUFVbkIsRUFBR29CLEVBSy9CLEdBSEEzQixHQUFjQyxDQUFRLEVBRXRCUSxFQUFTLEtBQUssUUFDVkEsSUFBVyxPQUNiLE9BQU8sS0FHVCxHQURBZ0IsRUFBT2hCLEVBQU9ILENBQUksRUFDZG1CLElBQVMsT0FDWCxPQUFPLEtBRVQsR0FBSUEsSUFBU3hCLEdBQVl3QixFQUFLLFdBQWF4QixFQUNyQyxFQUFFLEtBQUssZUFBaUIsRUFDMUIsS0FBSyxRQUFVLE9BQU8sT0FBTyxJQUFJLEdBRWpDLE9BQU9RLEVBQU9ILENBQUksRUFDZEcsRUFBTyxnQkFDVCxLQUFLLEtBQUssaUJBQWtCSCxFQUFNbUIsRUFBSyxVQUFZeEIsQ0FBUSxXQUV0RCxPQUFPd0IsR0FBUyxXQUFZLENBR3JDLElBRkFDLEVBQVcsR0FFTm5CLEVBQUlrQixFQUFLLE9BQVMsRUFBR2xCLEdBQUssRUFBR0EsSUFDaEMsR0FBSWtCLEVBQUtsQixDQUFDLElBQU1OLEdBQVl3QixFQUFLbEIsQ0FBQyxFQUFFLFdBQWFOLEVBQVUsQ0FDekQwQixFQUFtQkYsRUFBS2xCLENBQUMsRUFBRSxTQUMzQm1CLEVBQVduQixFQUNYLEtBQ0YsQ0FHRixHQUFJbUIsRUFBVyxFQUNiLE9BQU8sS0FFTEEsSUFBYSxFQUNmRCxFQUFLLE1BQU0sRUFFWEcsR0FBVUgsRUFBTUMsQ0FBUSxFQUd0QkQsRUFBSyxTQUFXLElBQ2xCaEIsRUFBT0gsQ0FBSSxFQUFJbUIsRUFBSyxDQUFDLEdBRW5CaEIsRUFBTyxpQkFBbUIsUUFDNUIsS0FBSyxLQUFLLGlCQUFrQkgsRUFBTXFCLEdBQW9CMUIsQ0FBUSxDQUNsRSxDQUVBLE9BQU8sSUFDVCxFQUVKSixFQUFhLFVBQVUsSUFBTUEsRUFBYSxVQUFVLGVBRXBEQSxFQUFhLFVBQVUsbUJBQ25CLFNBQTRCUyxFQUFNLENBQ2hDLElBQUlRLEVBQVdMLEVBQVEsRUFHdkIsR0FEQUEsRUFBUyxLQUFLLFFBQ1ZBLElBQVcsT0FDYixPQUFPLEtBR1QsR0FBSUEsRUFBTyxpQkFBbUIsT0FDNUIsT0FBSSxVQUFVLFNBQVcsR0FDdkIsS0FBSyxRQUFVLE9BQU8sT0FBTyxJQUFJLEVBQ2pDLEtBQUssYUFBZSxHQUNYQSxFQUFPSCxDQUFJLElBQU0sU0FDdEIsRUFBRSxLQUFLLGVBQWlCLEVBQzFCLEtBQUssUUFBVSxPQUFPLE9BQU8sSUFBSSxFQUVqQyxPQUFPRyxFQUFPSCxDQUFJLEdBRWYsS0FJVCxHQUFJLFVBQVUsU0FBVyxFQUFHLENBQzFCLElBQUl1QixFQUFPLE9BQU8sS0FBS3BCLENBQU0sRUFDekJxQixFQUNKLElBQUssRUFBSSxFQUFHLEVBQUlELEVBQUssT0FBUSxFQUFFLEVBQzdCQyxFQUFNRCxFQUFLLENBQUMsRUFDUkMsSUFBUSxrQkFDWixLQUFLLG1CQUFtQkEsQ0FBRyxFQUU3QixZQUFLLG1CQUFtQixnQkFBZ0IsRUFDeEMsS0FBSyxRQUFVLE9BQU8sT0FBTyxJQUFJLEVBQ2pDLEtBQUssYUFBZSxFQUNiLElBQ1QsQ0FJQSxHQUZBaEIsRUFBWUwsRUFBT0gsQ0FBSSxFQUVuQixPQUFPUSxHQUFjLFdBQ3ZCLEtBQUssZUFBZVIsRUFBTVEsQ0FBUyxVQUMxQkEsSUFBYyxPQUV2QixJQUFLLEVBQUlBLEVBQVUsT0FBUyxFQUFHLEdBQUssRUFBRyxJQUNyQyxLQUFLLGVBQWVSLEVBQU1RLEVBQVUsQ0FBQyxDQUFDLEVBSTFDLE9BQU8sSUFDVCxFQUVKLFNBQVNpQixHQUFXMUMsRUFBUWlCLEVBQU0wQixFQUFRLENBQ3hDLElBQUl2QixFQUFTcEIsRUFBTyxRQUVwQixHQUFJb0IsSUFBVyxPQUNiLE1BQU8sQ0FBQyxFQUVWLElBQUl3QixFQUFheEIsRUFBT0gsQ0FBSSxFQUM1QixPQUFJMkIsSUFBZSxPQUNWLENBQUMsRUFFTixPQUFPQSxHQUFlLFdBQ2pCRCxFQUFTLENBQUNDLEVBQVcsVUFBWUEsQ0FBVSxFQUFJLENBQUNBLENBQVUsRUFFNURELEVBQ0xFLEdBQWdCRCxDQUFVLEVBQUlsQixHQUFXa0IsRUFBWUEsRUFBVyxNQUFNLENBQzFFLENBRUFwQyxFQUFhLFVBQVUsVUFBWSxTQUFtQlMsRUFBTSxDQUMxRCxPQUFPeUIsR0FBVyxLQUFNekIsRUFBTSxFQUFJLENBQ3BDLEVBRUFULEVBQWEsVUFBVSxhQUFlLFNBQXNCUyxFQUFNLENBQ2hFLE9BQU95QixHQUFXLEtBQU16QixFQUFNLEVBQUssQ0FDckMsRUFFQVQsRUFBYSxjQUFnQixTQUFTc0MsRUFBUzdCLEVBQU0sQ0FDbkQsT0FBSSxPQUFPNkIsRUFBUSxlQUFrQixXQUM1QkEsRUFBUSxjQUFjN0IsQ0FBSSxFQUUxQjhCLEdBQWMsS0FBS0QsRUFBUzdCLENBQUksQ0FFM0MsRUFFQVQsRUFBYSxVQUFVLGNBQWdCdUMsR0FDdkMsU0FBU0EsR0FBYzlCLEVBQU0sQ0FDM0IsSUFBSUcsRUFBUyxLQUFLLFFBRWxCLEdBQUlBLElBQVcsT0FBVyxDQUN4QixJQUFJd0IsRUFBYXhCLEVBQU9ILENBQUksRUFFNUIsR0FBSSxPQUFPMkIsR0FBZSxXQUN4QixNQUFPLEdBQ0YsR0FBSUEsSUFBZSxPQUN4QixPQUFPQSxFQUFXLE1BRXRCLENBRUEsTUFBTyxFQUNULENBRUFwQyxFQUFhLFVBQVUsV0FBYSxVQUFzQixDQUN4RCxPQUFPLEtBQUssYUFBZSxFQUFJTCxHQUFlLEtBQUssT0FBTyxFQUFJLENBQUMsQ0FDakUsRUFFQSxTQUFTdUIsR0FBV3NCLEVBQUtsQyxFQUFHLENBRTFCLFFBREltQyxFQUFPLElBQUksTUFBTW5DLENBQUMsRUFDYkksRUFBSSxFQUFHQSxFQUFJSixFQUFHLEVBQUVJLEVBQ3ZCK0IsRUFBSy9CLENBQUMsRUFBSThCLEVBQUk5QixDQUFDLEVBQ2pCLE9BQU8rQixDQUNULENBRUEsU0FBU1YsR0FBVUgsRUFBTWMsRUFBTyxDQUM5QixLQUFPQSxFQUFRLEVBQUlkLEVBQUssT0FBUWMsSUFDOUJkLEVBQUtjLENBQUssRUFBSWQsRUFBS2MsRUFBUSxDQUFDLEVBQzlCZCxFQUFLLElBQUksQ0FDWCxDQUVBLFNBQVNTLEdBQWdCRyxFQUFLLENBRTVCLFFBRElHLEVBQU0sSUFBSSxNQUFNSCxFQUFJLE1BQU0sRUFDckI5QixFQUFJLEVBQUdBLEVBQUlpQyxFQUFJLE9BQVEsRUFBRWpDLEVBQ2hDaUMsRUFBSWpDLENBQUMsRUFBSThCLEVBQUk5QixDQUFDLEVBQUUsVUFBWThCLEVBQUk5QixDQUFDLEVBRW5DLE9BQU9pQyxDQUNULENBRUEsU0FBUzFDLEdBQUtxQyxFQUFTTSxFQUFNLENBQzNCLE9BQU8sSUFBSSxRQUFRLFNBQVVDLEVBQVNDLEVBQVEsQ0FDNUMsU0FBU0MsRUFBY2pDLEVBQUssQ0FDMUJ3QixFQUFRLGVBQWVNLEVBQU1JLENBQVEsRUFDckNGLEVBQU9oQyxDQUFHLENBQ1osQ0FFQSxTQUFTa0MsR0FBVyxDQUNkLE9BQU9WLEVBQVEsZ0JBQW1CLFlBQ3BDQSxFQUFRLGVBQWUsUUFBU1MsQ0FBYSxFQUUvQ0YsRUFBUSxDQUFDLEVBQUUsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUNsQyxDQUVBSSxHQUErQlgsRUFBU00sRUFBTUksRUFBVSxDQUFFLEtBQU0sRUFBSyxDQUFDLEVBQ2xFSixJQUFTLFNBQ1hNLEdBQThCWixFQUFTUyxFQUFlLENBQUUsS0FBTSxFQUFLLENBQUMsQ0FFeEUsQ0FBQyxDQUNILENBRUEsU0FBU0csR0FBOEJaLEVBQVN2QixFQUFTb0MsRUFBTyxDQUMxRCxPQUFPYixFQUFRLElBQU8sWUFDeEJXLEdBQStCWCxFQUFTLFFBQVN2QixFQUFTb0MsQ0FBSyxDQUVuRSxDQUVBLFNBQVNGLEdBQStCWCxFQUFTTSxFQUFNeEMsRUFBVStDLEVBQU8sQ0FDdEUsR0FBSSxPQUFPYixFQUFRLElBQU8sV0FDcEJhLEVBQU0sS0FDUmIsRUFBUSxLQUFLTSxFQUFNeEMsQ0FBUSxFQUUzQmtDLEVBQVEsR0FBR00sRUFBTXhDLENBQVEsVUFFbEIsT0FBT2tDLEVBQVEsa0JBQXFCLFdBRzdDQSxFQUFRLGlCQUFpQk0sRUFBTSxTQUFTUSxFQUFhL0MsRUFBSyxDQUdwRDhDLEVBQU0sTUFDUmIsRUFBUSxvQkFBb0JNLEVBQU1RLENBQVksRUFFaERoRCxFQUFTQyxDQUFHLENBQ2QsQ0FBQyxNQUVELE9BQU0sSUFBSSxVQUFVLHNFQUF3RSxPQUFPaUMsQ0FBTyxDQUU5RyxJQ2hmQSxJQUFBZSxHQUFBQyxHQUFBLENBQUFDLEdBQUFDLEtBQUEsY0FBYSxJQUFJQyxFQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDLFFBQVEsU0FBU0MsRUFBRSxDQUFDLEtBQUssU0FBUyxVQUFVLENBQUMsTUFBTSxZQUFZLEtBQUssT0FBTyxFQUFFLEtBQUssUUFBUUEsQ0FBQyxFQUFFLFFBQVEsU0FBU0EsRUFBRSxDQUFDLEtBQUssU0FBUyxVQUFVLENBQUMsTUFBTSxZQUFZLEtBQUssT0FBTyxFQUFFLEtBQUssUUFBUUEsQ0FBQyxFQUFFLElBQUksU0FBU0EsRUFBRSxDQUFDLEtBQUssU0FBUyxVQUFVLENBQUMsTUFBTSxRQUFRLEtBQUssT0FBTyxFQUFFLEtBQUssUUFBUUEsQ0FBQyxFQUFFLFNBQVMsU0FBU0EsRUFBRSxDQUFDLEtBQUssU0FBUyxVQUFVLENBQUMsTUFBTSxjQUFjLEtBQUssT0FBTyxFQUFFLEtBQUssUUFBUUEsQ0FBQyxDQUFDLENBQUMsRUFDM2NELEVBQUssT0FBTyxJQUFJLFNBQVNDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUUsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFTCxFQUFFRCxFQUFFLE9BQU8sSUFBSU8sRUFBRSxFQUFFLEdBQU9OLElBQUosR0FBV0EsSUFBSixHQUFXQSxJQUFKLEVBQU0sTUFBTSxJQUFJRixFQUFLLFVBQVUsUUFBUSxzQkFBc0IsRUFBNkIsSUFBM0IsS0FBSyxFQUFFLENBQUNJLEVBQUVILEVBQUUsTUFBTSxDQUFDLEVBQUVJLEVBQUUsQ0FBQyxDQUFDLEVBQU1KLEVBQUVDLEVBQUVELEVBQUUsRUFBRUMsRUFBRSxHQUFHRCxJQUFLRSxFQUFFQyxFQUFFSCxFQUFFLENBQUMsR0FBU0EsRUFBRUMsSUFBTixHQUFhQSxJQUFKLEdBQVdELEVBQUVDLElBQU4sS0FBUUMsRUFBRUcsRUFBRUgsSUFBSSxFQUFFLEdBQUcsR0FBR0csRUFBRUgsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHRyxFQUFFSCxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUVHLEVBQUVILEVBQUUsR0FBRyxFQUFNRixFQUFFQyxJQUFOLElBQVVDLEVBQUVBLEdBQUcsRUFBRUEsSUFBSSxHQUFHSyxHQUFHLEdBQUdBLEVBQUVBLEdBQUcsRUFBRSxLQUFLQSxHQUFHLEtBQUlKLEVBQUVILENBQUMsRUFBRUcsRUFBRUgsRUFBRUMsQ0FBQyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUQsRUFBRUMsSUFBSUQsSUFBSUUsRUFBRUMsRUFBRUYsRUFBRSxFQUFFRCxFQUFFQSxFQUFFLENBQUMsRUFBRUksRUFBRUgsQ0FBQyxFQUFFLEdBQUdELEdBQUcsRUFBRUMsRUFBRUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILElBQUksRUFBRSxDQUFDLEVBQUVJLEVBQUUsQ0FBQyxFQUFFRCxFQUFFSCxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUVJLEVBQUUsQ0FBQyxFQUFFRCxFQUFFSCxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUVJLEVBQUUsQ0FBQyxFQUFFRCxFQUFFSCxFQUMzZixHQUFHLENBQUMsQ0FBQyxFQUNMSCxFQUFLLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxTQUFTQyxFQUFFLENBQUMsT0FBT1EsR0FBRyxLQUFLUixFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBU0EsRUFBRSxDQUFDLE9BQU9RLEdBQUcsS0FBS1IsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxJQUFJQSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUVDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRUMsRUFBRUYsRUFBRSxDQUFDLEVBQUVHLEVBQUVGLEVBQUUsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLENBQUMsRUFBRUUsRUFBRSxDQUFDLEVBQUVDLEVBQUUsRUFBRUMsRUFBRUMsRUFBRSxJQUFJUixFQUFFLEVBQUUsSUFBTUEsRUFBRUEsSUFBSUssR0FBR0YsRUFBRUgsQ0FBQyxFQUFFQSxHQUFHLEVBQUUsS0FBS0EsR0FBRyxJQUFJQSxDQUFDLEVBQUVBLEVBQUUsSUFBSUMsRUFBRUMsRUFBRSxFQUFFLENBQUNKLEVBQUVHLENBQUMsRUFBRUEsR0FBR0ssR0FBRyxFQUFFSixFQUFFRyxFQUFFSCxDQUFDLEdBQUcsRUFBRSxJQUFJSyxFQUFFTCxFQUFFQSxHQUFHLEVBQUVBLEdBQUcsRUFBRUEsR0FBRyxFQUFFQSxHQUFHLEVBQUVLLEVBQUVBLEdBQUcsRUFBRUEsRUFBRSxJQUFJLEdBQUdULEVBQUVHLENBQUMsRUFBRU0sRUFBRVIsRUFBRVEsQ0FBQyxFQUFFTixFQUFFLEVBQUVFLEVBQUVILEVBQUVHLEVBQUVHLEVBQUVILEVBQUVGLENBQUMsQ0FBQyxDQUFDLEVBQUVPLEVBQUUsU0FBVSxFQUFFLE1BQVFSLEVBQUUsSUFBTU0sRUFBRSxTQUFVTCxFQUFFLEVBQUUsSUFBTUUsRUFBRUksQ0FBQyxFQUFFLFNBQVVBLEVBQUVQLEVBQUUsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVDLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUVKLEVBQUVHLENBQUMsRUFBRU8sQ0FBQyxFQUFFQyxFQUFFQSxHQUFHLEdBQUdBLElBQUksRUFBRSxJQUFJUixFQUNsZ0IsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVKLEVBQUVJLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNoRCxTQUFTSSxHQUFHUixFQUFFQyxFQUFFQyxFQUFFLENBQUMsR0FBT0QsRUFBRSxTQUFOLEVBQWEsTUFBTSxJQUFJRixFQUFLLFVBQVUsUUFBUSx3QkFBd0IsRUFBRSxJQUFJSSxFQUFFSCxFQUFFLEVBQUVFLENBQUMsRUFBRUUsRUFBRUgsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRSxFQUFFSixFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUcsRUFBRUwsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRixFQUFFQSxFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRSxJQUFJSSxFQUFFRSxFQUFFQyxFQUFFLEVBQUVQLEVBQUUsT0FBTyxFQUFFLEVBQUVRLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRU4sRUFBRVAsRUFBRSxFQUFFRSxDQUFDLEVBQUVGLEVBQUVPLEVBQUUsQ0FBQyxFQUFFLElBQUlPLEVBQUVQLEVBQUUsQ0FBQyxFQUFFUSxFQUFFUixFQUFFLENBQUMsRUFBRVMsRUFBRVQsRUFBRSxDQUFDLEVBQUVVLEVBQUVWLEVBQUUsQ0FBQyxFQUFFLElBQUlJLEVBQUUsRUFBRUEsRUFBRSxFQUFFQSxJQUFJSixFQUFFUCxFQUFFSSxJQUFJLEVBQUUsRUFBRVUsRUFBRVQsR0FBRyxHQUFHLEdBQUcsRUFBRVUsRUFBRVQsR0FBRyxFQUFFLEdBQUcsRUFBRVUsRUFBRWYsRUFBRSxHQUFHLEVBQUVFLEVBQUVTLENBQUMsRUFBRUgsRUFBRVQsRUFBRUssSUFBSSxFQUFFLEVBQUVTLEVBQUVSLEdBQUcsR0FBRyxHQUFHLEVBQUVTLEVBQUVkLEdBQUcsRUFBRSxHQUFHLEVBQUVlLEVBQUVaLEVBQUUsR0FBRyxFQUFFRCxFQUFFUyxFQUFFLENBQUMsRUFBRUYsRUFBRVYsRUFBRU0sSUFBSSxFQUFFLEVBQUVRLEVBQUViLEdBQUcsR0FBRyxHQUFHLEVBQUVjLEVBQUVYLEdBQUcsRUFBRSxHQUFHLEVBQUVZLEVBQUVYLEVBQUUsR0FBRyxFQUFFRixFQUFFUyxFQUFFLENBQUMsRUFBRVgsRUFBRUQsRUFBRUMsSUFBSSxFQUFFLEVBQUVhLEVBQUVWLEdBQUcsR0FBRyxHQUFHLEVBQUVXLEVBQUVWLEdBQUcsRUFBRSxHQUFHLEVBQUVXLEVBQUVWLEVBQUUsR0FBRyxFQUFFSCxF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QUFFLEtBQUssS0FBSyxFQUFFLENBQUMsRUFBRUEsRUFBRSxRQUFRLEtBQUssRUFBRUEsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBSyxNQUFNLEVBQVNDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRUMsRUFBRSxHQUFHSCxFQUFFQyxJQUFJLENBQU0sSUFBTEUsRUFBRSxHQUFPRCxFQUFFLEVBQUVBLEVBQUVBLEdBQUdELEVBQUVDLElBQUksR0FBT0QsRUFBRUMsSUFBTixFQUFRLENBQUNDLEVBQ3pmLEdBQUcsS0FBSyxDQUFDQSxJQUFJLEVBQUVILElBQUksS0FBSyxFQUFFQSxDQUFDLEVBQUVELEVBQUUsS0FBSyxJQUFJRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRUQsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFRCxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVNELEVBQUUsQ0FBQyxJQUFJQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUUsQ0FBQyxFQUFFRyxFQUFFSCxFQUFFLENBQUMsRUFBRUssRUFBRUwsRUFBRSxDQUFDLEVBQUVNLEVBQUVOLEVBQUUsQ0FBQyxFQUFFLEVBQUVBLEVBQUUsQ0FBQyxFQUFFTyxFQUFFUCxFQUFFLENBQUMsRUFBRVEsRUFBRVIsRUFBRSxDQUFDLEVBQUVTLEVBQUVULEVBQUUsQ0FBQyxFQUFFLElBQUlILEVBQUUsRUFBRSxHQUFHQSxFQUFFQSxJQUFJLEdBQUdBLEVBQUVDLEVBQUVGLEVBQUVDLENBQUMsR0FBR0MsRUFBRUYsRUFBRUMsRUFBRSxFQUFFLEVBQUUsRUFBRUUsRUFBRUgsRUFBRUMsRUFBRSxHQUFHLEVBQUUsRUFBRUMsRUFBRUYsRUFBRUMsRUFBRSxFQUFFLEdBQUdDLElBQUksRUFBRUEsSUFBSSxHQUFHQSxJQUFJLEVBQUVBLEdBQUcsR0FBR0EsR0FBRyxLQUFLQyxJQUFJLEdBQUdBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsSUFBSUgsRUFBRUMsRUFBRSxFQUFFLEVBQUVELEVBQUVDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBR0MsRUFBRUEsRUFBRVcsR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSUQsRUFBRSxHQUFHRCxFQUFFQyxJQUFJUCxFQUFFSixDQUFDLEVBQUVZLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUUsRUFBRSxFQUFFRCxFQUFFUixFQUFFLEVBQUVRLEVBQUVELEVBQUVBLEVBQUVGLEVBQUVBLEVBQUVELEVBQUVBLEVBQUVKLEdBQUdLLEVBQUVFLEVBQUVDLEdBQUdILEVBQUVFLEtBQUtGLElBQUksRUFBRUEsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxHQUFHQSxHQUFHLElBQUksRUFBRUgsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFRSxFQUNwZixFQUFFRixFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVHLEVBQUUsRUFBRUgsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFSyxFQUFFLEVBQUVMLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRU0sRUFBRSxFQUFFTixFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFQSxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVPLEVBQUUsRUFBRVAsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFUSxFQUFFLEVBQUVSLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRVMsRUFBRSxDQUFDLENBQUMsRUFBRWQsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRUQsRUFBSyxLQUFLLE9BQU8sS0FBSyxTQUFTQyxFQUFFLENBQUMsT0FBTyxJQUFJRCxFQUFLLEtBQUssU0FBUSxPQUFPQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQy9TRCxFQUFLLEtBQUssT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sVUFBVSxDQUFDLFlBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBUyxJQUFJLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQVksT0FBT0EsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFLEtBQUssRUFBRUgsRUFBSyxTQUFTLE9BQU8sS0FBSyxFQUFFQyxDQUFDLEVBQWlELEdBQS9DQyxFQUFFLEtBQUssRUFBRUQsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUssU0FBUyxVQUFVQyxDQUFDLEVBQUssaUJBQWlCQSxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEscUNBQXFDLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDLElBQUlJLEVBQUUsSUFBSSxZQUFZRCxDQUFDLEVBQUVFLEVBQUUsRUFBRSxJQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFRSxFQUFFLFNBQVMsR0FDdGZDLEVBQUUsSUFBSUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsR0FBRyxFQUFFRixFQUFFLE9BQU8sRUFBRSxHQUFHRSxDQUFDLENBQUMsS0FBTSxLQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJRixFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVELEVBQUVGLEVBQUssU0FBUyxPQUFPRSxFQUFFLENBQUNGLEVBQUssU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFQyxFQUFFLE9BQU8sRUFBRUQsRUFBRSxHQUFHQSxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUE2RCxJQUEzREEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUUsVUFBVyxDQUFDLEVBQU1BLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLFFBQVEsS0FBSyxFQUFFQSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFLLE1BQU0sRUFBU0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFDbGYsUUFBUSxPQUFPLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsU0FBUyxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFDcGYsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxPQUFPLFNBQVMsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTQyxFQUFFRCxFQUFFLENBQUMsTUFBTyxnQkFBZUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUUUsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUFFLEdBQUcsS0FBSyxDQUFDQSxJQUFJLEVBQUVILElBQUksS0FBSyxFQUFFLEVBQUVBLENBQUMsRUFBRUYsRUFBRSxLQUFLLElBQUlHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUVELEVBQUUsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBR0QsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFQSxDQUFDLEVBQUVGLEVBQUUsS0FBSyxJQUFJRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUVELEVBQUUsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHRCxDQUFDLEVBQUVBLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBU0YsRUFBRSxDQUFDLElBQUlDLEVBQ3ZnQkMsRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUgsRUFB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QyxFQUFFSCxFQUFFSyxFQUFFLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUVILEVBQUVLLEVBQUUsQ0FBQyxHQUFHRixFQUFFLENBQUMsRUFBRUgsRUFBRUssRUFBRSxDQUFDLEdBQUdGLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJRCxFQUFFLEtBQUtJLEVBQUUsTUFBTU4sRUFBRVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFWCxFQUFLLEtBQUssS0FBSyxTQUFTQyxFQUFFQyxFQUFFLENBQUMsS0FBSyxFQUFFQSxFQUFFQSxHQUFHRixFQUFLLEtBQUssT0FBTyxJQUFJRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFQyxFQUFFQyxFQUFFSCxFQUFFLFVBQVUsVUFBVSxHQUFrRCxJQUEvQyxLQUFLLEVBQUUsQ0FBQyxJQUFJQSxFQUFFLElBQUlBLENBQUMsRUFBRUQsRUFBRSxPQUFPSSxJQUFJSixFQUFFQyxFQUFFLEtBQUtELENBQUMsR0FBT0csRUFBRSxFQUFFQSxFQUFFQyxFQUFFRCxJQUFJRCxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsVUFBVUQsRUFBRSxDQUFDLEVBQUVDLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFLFdBQVcsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPRCxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBT0EsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSUQsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDM1lGLEVBQUssS0FBSyxLQUFLLFVBQVUsUUFBUUEsRUFBSyxLQUFLLEtBQUssVUFBVSxJQUFJLFNBQVNDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxNQUFNLElBQUlELEVBQUssVUFBVSxRQUFRLHlDQUF5QyxFQUFFLFlBQUssT0FBT0MsQ0FBQyxFQUFTLEtBQUssT0FBT0EsQ0FBQyxDQUFDLEVBQUVELEVBQUssS0FBSyxLQUFLLFVBQVUsTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFQSxFQUFLLEtBQUssS0FBSyxVQUFVLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssRUFBRSxPQUFPQSxDQUFDLENBQUMsRUFBRUQsRUFBSyxLQUFLLEtBQUssVUFBVSxPQUFPLFVBQVUsQ0FBQyxJQUFJQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUVBLEVBQUcsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFHLE9BQU9BLENBQUMsRUFBRSxTQUFTLEVBQUUsWUFBSyxNQUFNLEVBQVNBLENBQUMsRUFDdmVELEVBQUssS0FBSyxPQUFPLFNBQVNDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBVSxHQUFURixFQUFFQSxHQUFHLElBQU8sRUFBRUMsR0FBRyxFQUFFRCxFQUFFLE1BQU0sSUFBSUgsRUFBSyxVQUFVLFFBQVEsMEJBQTBCLEVBQWEsT0FBT0MsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBYyxPQUFPQyxHQUFsQixXQUFzQkEsRUFBRUYsRUFBSyxNQUFNLFdBQVcsT0FBT0UsQ0FBQyxHQUFHRyxFQUFFQSxHQUFHTCxFQUFLLEtBQUssS0FBS0MsRUFBRSxJQUFJSSxFQUFFSixDQUFDLEVBQUUsSUFBSUssRUFBRUMsRUFBRUMsRUFBRUUsRUFBRUMsRUFBRSxDQUFDLEVBQUUsRUFBRVgsRUFBSyxTQUFTLElBQUlVLEVBQUUsRUFBRSxHQUFHQyxFQUFFLFFBQVFQLEdBQUcsR0FBR00sSUFBSSxDQUFnQyxJQUEvQkwsRUFBRUMsRUFBRUwsRUFBRSxRQUFRLEVBQUUsT0FBT0MsRUFBRSxDQUFDUSxDQUFDLENBQUMsQ0FBQyxFQUFNSCxFQUFFLEVBQUVBLEVBQUVKLEVBQUVJLElBQUksSUFBSUQsRUFBRUwsRUFBRSxRQUFRSyxDQUFDLEVBQUVFLEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxJQUFJSCxFQUFFRyxDQUFDLEdBQUdGLEVBQUVFLENBQUMsRUFBRUcsRUFBRUEsRUFBRSxPQUFPTixDQUFDLENBQUMsQ0FBQyxPQUFBRCxJQUFJTyxFQUFFLEVBQUUsTUFBTUEsRUFBRVAsQ0FBQyxHQUFVTyxDQUFDLEVBQ25kWCxFQUFLLEtBQUssU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUlELEVBQUssS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sS0FBSyxFQUFFQyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssR0FBRyxNQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQU0sSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxFQUFFLEVBQ3pXRCxFQUFLLEtBQUssVUFBVSxDQUFDLFlBQVksU0FBU0MsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFQSxFQUFFLEtBQUssUUFBUUYsQ0FBQyxFQUFFLElBQUlHLEVBQUUsR0FBR0QsSUFBSSxLQUFLLEVBQUUsTUFBTSxJQUFJSixFQUFLLFVBQVUsU0FBUyx3QkFBd0IsRUFB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SVQsR0FBOEIsc0JBQXNCLENBQzFELEVBRUYsT0FBT1UsRUFBUSxNQUFTLENBQzFCLEVBRU1YLEdBQWEsSUFBTSxDQUN2QmhCLEdBQU0sTUFBTSxFQUNaLEtBQUssWUFBWSxDQUFFLGtCQUF3QixDQUFDLENBQzlDLEVBRU1VLEdBQWMsSUFBTSxDQUN4QlYsR0FBTSxNQUFNLEVBQ1osS0FBSyxZQUFZLENBQUUsbUJBQXlCLENBQUMsQ0FDL0MiLAogICJuYW1lcyI6IFsicmVxdWlyZV9ldmVudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSIiwgIlJlZmxlY3RBcHBseSIsICJ0YXJnZXQiLCAicmVjZWl2ZXIiLCAiYXJncyIsICJSZWZsZWN0T3duS2V5cyIsICJQcm9jZXNzRW1pdFdhcm5pbmciLCAid2FybmluZyIsICJOdW1iZXJJc05hTiIsICJ2YWx1ZSIsICJFdmVudEVtaXR0ZXIiLCAib25jZSIsICJkZWZhdWx0TWF4TGlzdGVuZXJzIiwgImNoZWNrTGlzdGVuZXIiLCAibGlzdGVuZXIiLCAiYXJnIiwgIm4iLCAiX2dldE1heExpc3RlbmVycyIsICJ0aGF0IiwgInR5cGUiLCAiaSIsICJkb0Vycm9yIiwgImV2ZW50cyIsICJlciIsICJlcnIiLCAiaGFuZGxlciIsICJsZW4iLCAibGlzdGVuZXJzIiwgImFycmF5Q2xvbmUiLCAiX2FkZExpc3RlbmVyIiwgInByZXBlbmQiLCAibSIsICJleGlzdGluZyIsICJ3IiwgIm9uY2VXcmFwcGVyIiwgIl9vbmNlV3JhcCIsICJzdGF0ZSIsICJ3cmFwcGVkIiwgImxpc3QiLCAicG9zaXRpb24iLCAib3JpZ2luYWxMaXN0ZW5lciIsICJzcGxpY2VPbmUiLCAia2V5cyIsICJrZXkiLCAiX2xpc3RlbmVycyIsICJ1bndyYXAiLCAiZXZsaXN0ZW5lciIsICJ1bndyYXBMaXN0ZW5lcnMiLCAiZW1pdHRlciIsICJsaXN0ZW5lckNvdW50IiwgImFyciIsICJjb3B5IiwgImluZGV4IiwgInJldCIsICJuYW1lIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVycm9yTGlzdGVuZXIiLCAicmVzb2x2ZXIiLCAiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwgImFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyIiwgImZsYWdzIiwgIndyYXBMaXN0ZW5lciIsICJyZXF1aXJlX3NqY2wiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzamNsIiwgImEiLCAiYiIsICJjIiwgImQiLCAiZSIsICJmIiwgImciLCAiaCIsICJhYSIsICJrIiwgIm4iLCAibSIsICJwIiwgInoiLCAiQSIsICJDIiwgIkIiLCAiRCIsICJQIiwgImVhIiwgIlEiLCAidCIsICJyIiwgInUiLCAiRyIsICJFIiwgIkgiLCAiRiIsICJWIiwgIkkiLCAidyIsICJ2IiwgIlIiLCAiSiIsICJTIiwgIksiLCAiVyIsICJMIiwgInEiLCAieCIsICJ5IiwgIlgiLCAiWSIsICJNIiwgImZhIiwgImphIiwgImthIiwgImdhIiwgImJhIiwgIk4iLCAiY2EiLCAiTyIsICJUIiwgImhhIiwgImlhIiwgImRhIiwgIlUiLCAiWiIsICJyZXF1aXJlX2V2ZW50ZW1pdHRlcjMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYXMiLCAicHJlZml4IiwgIkV2ZW50cyIsICJFRSIsICJmbiIsICJjb250ZXh0IiwgIm9uY2UiLCAiYWRkTGlzdGVuZXIiLCAiZW1pdHRlciIsICJldmVudCIsICJsaXN0ZW5lciIsICJldnQiLCAiY2xlYXJFdmVudCIsICJFdmVudEVtaXR0ZXIiLCAibmFtZXMiLCAiZXZlbnRzIiwgIm5hbWUiLCAiaGFuZGxlcnMiLCAibCIsICJlZSIsICJsaXN0ZW5lcnMiLCAiYTEiLCAiYTIiLCAiYTMiLCAiYTQiLCAiYTUiLCAibGVuIiwgImFyZ3MiLCAiaSIsICJsZW5ndGgiLCAiaiIsICJkZWZhdWx0RXJyb3JDb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIm1lc3NhZ2UiLCAicmVzdWx0IiwgImNvbmZpZyIsICJkYXRhIiwgIm1heWJlU3RhY2siLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19hd2FpdCIsICJ2IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiZyIsICJxIiwgInZlcmIiLCAiYXdhaXRSZXR1cm4iLCAiZiIsICJuIiwgImEiLCAiYiIsICJyZXN1bWUiLCAic2V0dGxlIiwgInIiLCAiZnVsZmlsbCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgInAiLCAiX19hc3luY1ZhbHVlcyIsICJkIiwgIlJlc3VsdEFzeW5jIiwgIl9SZXN1bHRBc3luYyIsICJyZXMiLCAicHJvbWlzZSIsICJuZXdQcm9taXNlIiwgInZhbHVlIiwgIk9rIiwgImVycm9yRm4iLCAiZSIsICJFcnIiLCAiZm4iLCAiYXJncyIsICJfX2F3YWl0ZXIiLCAiZXJyb3IiLCAiYXN5bmNSZXN1bHRMaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3QiLCAiY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMiLCAiZiIsICJuZXdSZXMiLCAibmV3VmFsdWUiLCAib2siLCAiX2VyciIsICJfX2FzeW5jR2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiX19hc3luY0RlbGVnYXRvciIsICJfX2FzeW5jVmFsdWVzIiwgInN1Y2Nlc3NDYWxsYmFjayIsICJmYWlsdXJlQ2FsbGJhY2siLCAicmVzdWx0IiwgImVyckFzeW5jIiwgIm9rQXN5bmMiLCAiZXJyIiwgImZyb21Qcm9taXNlIiwgImZyb21TYWZlUHJvbWlzZSIsICJmcm9tQXN5bmNUaHJvd2FibGUiLCAiY29tYmluZVJlc3VsdExpc3QiLCAicmVzdWx0TGlzdCIsICJhY2MiLCAibGlzdCIsICJjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMiLCAiUmVzdWx0IiwgImZyb21UaHJvd2FibGUiLCAiY29tYmluZSIsICJjb21iaW5lV2l0aEFsbEVycm9ycyIsICJPayIsICJ2YWx1ZSIsICJmIiwgIm9rIiwgIl9mIiwgIl92YWx1ZSIsICJSZXN1bHRBc3luYyIsICJfdiIsICJfZXJyIiwgIl8iLCAiY29uZmlnIiwgImNyZWF0ZU5ldmVyVGhyb3dFcnJvciIsICJFcnIiLCAiZXJyb3IiLCAiZXJyIiwgImVyckFzeW5jIiwgInYiLCAiX29rIiwgInNlbGYiLCAiZnJvbVRocm93YWJsZSIsICJSZXN1bHQiLCAiQmFzZUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJjYXVzZSIsICJjb250ZXh0IiwgIl9fcHVibGljRmllbGQiLCAiV2ViU29ja2V0RXJyb3IiLCAiQmFzZUVycm9yIiwgIldlYlNvY2tldENvbm5lY3Rpb25FcnJvciIsICJXZWJTb2NrZXRFcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImVuc3VyZUVycm9yIiwgInZhbHVlIiwgInN0cmluZ2lmaWVkIiwgImlzRGVub1J1bnRpbWUiLCAid29ya2VyVXJsIiwgInJlbGF0aXZlUGF0aCIsICJpc0Rlbm9SdW50aW1lIiwgImltcG9ydF9ldmVudHMiLCAiZXZlbnRzIiwgIkV2ZW50RW1pdHRlciIsICJ1cGRhdGVGaWxlIiwgImx1ZmlGaWxlIiwgImFyZ3MiLCAic2VuZEZpbGVFcnJvciIsICJlcnJvciIsICJpbml0IiwgIkVuY29kaW5nIiwgImNoYXJzZXQiLCAibm9QYWRkaW5nIiwgImFiIiwgImxlbiIsICJ2aWV3IiwgInJlcyIsICJpIiwgInN0ciIsICJ2aWV3TGVuIiwgImVuYzEiLCAiZW5jMiIsICJlbmMzIiwgImVuYzQiLCAiaiIsICJvYmoiLCAiRW5jb2RpbmciLCAiRW5jb2RlIiwgImFiIiwgIkRlY29kZSIsICJzdHIiLCAib2JqIiwgIkVuY29kaW5nIiwgIkRlY29kZSIsICJzdHIiLCAib2JqIiwgImltcG9ydF9sdWZpX3NqY2wiLCAiQ3J5cHRvRXJyb3IiLCAiQmFzZUVycm9yIiwgIkRlY3J5cHRpb25FcnJvciIsICJDcnlwdG9FcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgIkVuY3J5cHRpb25FcnJvciIsICJDcnlwdG9FcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImRlY3J5cHQiLCAia2V5IiwgImVuY3J5cHRlZERhdGEiLCAiZGF0YSIsICJva0FzeW5jIiwgIkRlY29kZSIsICJzamNsIiwgImVycm9yIiwgImVyckFzeW5jIiwgIkRlY3J5cHRpb25FcnJvciIsICJlbnN1cmVFcnJvciIsICJlbmNyeXB0IiwgInZhbHVlIiwgImVuY3J5cHRlZCIsICJFbmNvZGUiLCAiRW5jcnlwdGlvbkVycm9yIiwgImRlY3J5cHQiLCAia2V5IiwgImVuY3J5cHRlZCIsICJpbXBvcnRLZXkiLCAiaW1wb3J0ZWRLZXkiLCAiUmVzdWx0QXN5bmMiLCAiZXJyb3IiLCAiRGVjcnlwdGlvbkVycm9yIiwgImVuc3VyZUVycm9yIiwgImVuY3J5cHQiLCAidmFsdWUiLCAiaXYiLCAiRW5jcnlwdGlvbkVycm9yIiwgIm9rQXN5bmMiLCAiRGVjb2RlIiwgIkNyeXB0b0Vycm9yIiwgImRlY3J5cHQiLCAia2V5IiwgInZhbHVlIiwgImVuY3J5cHQiLCAiYWxnbyIsICJzb2NrZXRzIiwgIk1BWF9FUlJPUlMiLCAib25DYW5jZWxNZXNzYWdlIiwgImRhdGEiLCAiZXZlbnRzIiwgIm9rQXN5bmMiLCAib25Eb3dubG9hZE1lc3NhZ2UiLCAicmVzcG9uc2UiLCAibHVmaUZpbGUiLCAicmVzdWx0IiwgIm1ldGFkYXRhU3RyaW5nIiwgIm1ldGFkYXRhIiwgImlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSIsICJkYXRhU3RyaW5nIiwgImVuY3J5cHRlZERhdGEiLCAiRGVjb2RlIiwgImRlY3J5cHQiLCAiZGVjcnlwdGVkUGFydCIsICJidWZmZXIiLCAidXBkYXRlRmlsZSIsICJlbmREb3dubG9hZCIsICJlcnJvciIsICJXZWJTb2NrZXRFcnJvciIsICJlcnJBc3luYyIsICJvblVwbG9hZE1lc3NhZ2UiLCAib25NZXNzYWdlIiwgInRyeVBhcnNlSnNvbiIsICJjYWxsYmFjayIsICJpc0Nvbm5lY3RpbmciLCAic29ja2V0S2V5IiwgImlzU3Bhd25lZCIsICJlbmREb3dubG9hZCIsICJsdWZpRmlsZSIsICJtZXNzYWdlIiwgInNlbmRNZXNzYWdlIiwgImRvd25sb2FkU29ja2V0VXJsIiwgInVwbG9hZENodW5rIiwgIm1ldGFkYXRhIiwgImVuY3J5cHRlZERhdGEiLCAiRW5jb2RlIiwgInVwbG9hZFNvY2tldFVybCIsICJzb2NrZXRVcmwiLCAiaXNTcGF3bmVkIiwgInNvY2tldHMiLCAib2tBc3luYyIsICJzcGF3biIsICJlIiwgIm9uTWVzc2FnZSIsICJzb2NrZXRLZXkiLCAiZXJyb3JDb3VudCIsICJpc0Nvbm5lY3RpbmciLCAiZXZlbnRzIiwgIk1BWF9FUlJPUlMiLCAiZXJyQXN5bmMiLCAiV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIiwgIndhaXRGb3JDb25uZWN0aW9uIiwgImVycm9yIiwgIlJlc3VsdEFzeW5jIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVuc3VyZUVycm9yIiwgImJ1aWxkU29ja2V0VXJsIiwgImluc3RhbmNlVXJsIiwgInBhdGhuYW1lIiwgInVybCIsICJkb3dubG9hZFNvY2tldFVybCIsICJsdWZpRmlsZSIsICJ1cGxvYWRTb2NrZXRVcmwiLCAidHJ5UGFyc2VKc29uIiwgImRhdGEiLCAicGFyc2VkT2JqZWN0IiwgImlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSIsICJtZXNzYWdlIiwgImltcG9ydF9ldmVudHMiLCAiaW1wb3J0X2V2ZW50cyIsICJmaWxlcyIsICJldmVudHMiLCAiRXZlbnRFbWl0dGVyIiwgImdldEZpbGVzUXVldWVkIiwgImZpbGVzIiwgImZpbGUiLCAiZ2V0RmlsZUluZGV4SW5RdWV1ZSIsICJjbGllbnRLZXkiLCAiaW1wb3J0X2luZGV4IiwgIlRpbWVvdXRFcnJvciIsICJtZXNzYWdlIiwgIkFib3J0RXJyb3IiLCAiZ2V0RE9NRXhjZXB0aW9uIiwgImVycm9yTWVzc2FnZSIsICJnZXRBYm9ydGVkUmVhc29uIiwgInNpZ25hbCIsICJyZWFzb24iLCAicFRpbWVvdXQiLCAicHJvbWlzZSIsICJvcHRpb25zIiwgIm1pbGxpc2Vjb25kcyIsICJmYWxsYmFjayIsICJjdXN0b21UaW1lcnMiLCAidGltZXIiLCAiY2FuY2VsYWJsZVByb21pc2UiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiYWJvcnRIYW5kbGVyIiwgInRpbWVvdXRFcnJvciIsICJlcnJvciIsICJsb3dlckJvdW5kIiwgImFycmF5IiwgInZhbHVlIiwgImNvbXBhcmF0b3IiLCAiZmlyc3QiLCAiY291bnQiLCAic3RlcCIsICJpdCIsICJfcXVldWUiLCAiUHJpb3JpdHlRdWV1ZSIsICJfX3ByaXZhdGVBZGQiLCAicnVuIiwgIm9wdGlvbnMiLCAiZWxlbWVudCIsICJfX3ByaXZhdGVHZXQiLCAiaW5kZXgiLCAibG93ZXJCb3VuZCIsICJhIiwgImIiLCAiaXRlbSIsICJfY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudCIsICJfaXNJbnRlcnZhbElnbm9yZWQiLCAiX2ludGVydmFsQ291bnQiLCAiX2ludGVydmFsQ2FwIiwgIl9pbnRlcnZhbCIsICJfaW50ZXJ2YWxFbmQiLCAiX2ludGVydmFsSWQiLCAiX3RpbWVvdXRJZCIsICJfcXVldWUiLCAiX3F1ZXVlQ2xhc3MiLCAiX3BlbmRpbmciLCAiX2NvbmN1cnJlbmN5IiwgIl9pc1BhdXNlZCIsICJfdGhyb3dPblRpbWVvdXQiLCAiX1BRdWV1ZV9pbnN0YW5jZXMiLCAiZG9lc0ludGVydmFsQWxsb3dBbm90aGVyX2dldCIsICJkb2VzQ29uY3VycmVudEFsbG93QW5vdGhlcl9nZXQiLCAibmV4dF9mbiIsICJvblJlc3VtZUludGVydmFsX2ZuIiwgImlzSW50ZXJ2YWxQYXVzZWRfZ2V0IiwgInRyeVRvU3RhcnRBbm90aGVyX2ZuIiwgImluaXRpYWxpemVJbnRlcnZhbElmTmVlZGVkX2ZuIiwgIm9uSW50ZXJ2YWxfZm4iLCAicHJvY2Vzc1F1ZXVlX2ZuIiwgInRocm93T25BYm9ydF9mbiIsICJvbkV2ZW50X2ZuIiwgIlBRdWV1ZSIsICJFdmVudEVtaXR0ZXIiLCAib3B0aW9ucyIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJfX3ByaXZhdGVBZGQiLCAiX19wdWJsaWNGaWVsZCIsICJQcmlvcml0eVF1ZXVlIiwgIl9fcHJpdmF0ZVNldCIsICJfX3ByaXZhdGVHZXQiLCAibmV3Q29uY3VycmVuY3kiLCAiX19wcml2YXRlTWV0aG9kIiwgImZ1bmN0aW9uXyIsICJyZXNvbHZlIiwgInJlamVjdCIsICJfX3ByaXZhdGVXcmFwcGVyIiwgIm9wZXJhdGlvbiIsICJwVGltZW91dCIsICJyZXN1bHQiLCAiZXJyb3IiLCAiVGltZW91dEVycm9yIiwgImZ1bmN0aW9ucyIsICJsaW1pdCIsICJub3ciLCAiZGVsYXkiLCAiY2FuSW5pdGlhbGl6ZUludGVydmFsIiwgImpvYiIsICJzaWduYWwiLCAiX3Jlc29sdmUiLCAiZXZlbnQiLCAiZmlsdGVyIiwgImxpc3RlbmVyIiwgIldvcmtlckVycm9yIiwgIkJhc2VFcnJvciIsICJXb3JrZXJVbmRlZmluZWRQYXJhbWV0ZXJFcnJvciIsICJXb3JrZXJFcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImlzSW5pdGlhbGl6ZWQiLCAiUVVFVUVfQ09OQ1VSUkVOQ1lfTElNSVQiLCAicXVldWUiLCAiUFF1ZXVlIiwgIml0ZW1zSW5RdWV1ZSIsICJpc1BhdXNlZCIsICJsdWZpRmlsZSIsICJlbmNyeXB0Sm9iIiwgIndvcmtlclVybCIsICJldmVudCIsICJpbml0IiwgImV2ZW50cyIsICJyZXN1bWVRdWV1ZSIsICJ1cGRhdGVGaWxlIiwgInN0YXJ0VXBsb2FkIiwgImdldEZpbGVJbmRleEluUXVldWUiLCAiZXJyb3IiLCAic2VuZEZpbGVFcnJvciIsICJwYXVzZVF1ZXVlIiwgIldvcmtlclVuZGVmaW5lZFBhcmFtZXRlckVycm9yIiwgIndvcmtlck1lc3NhZ2UiLCAic2VydmVyUXVldWVJbmRleCIsICJhbGdvIiwgImVuY3J5cHQiLCAiZW5jcnlwdGVkRGF0YSIsICJ1cGxvYWRDaHVuayIsICJ3YWl0Rm9yRW5jcnlwdGlvbiIsICJyZXNvbHZlIiwgImVyckFzeW5jIiwgIm9rQXN5bmMiXQp9Cg==