>p,f=a>>p;i(u.mipmask&1<1&&n===r&&('"'===n||"'"===n))return['"'+F(t.substr(1,t.length-2))+'"'];var i=/\[(false|true|null|\d+|'[^']*'|"[^"]*")\]/.exec(t);if(i)return e(t.substr(0,i.index)).concat(e(i[1])).concat(e(t.substr(i.index+i[0].length)));var o=t.split(".");if(1===o.length)return['"'+F(t)+'"'];for(var a=[],s=0;se(t,n+"["+r+"]"))):t instanceof B?t:void O(!1,"invalid option type in uniform "+n)},accessor:z},N={next:"function"==typeof requestAnimationFrame?function(e){return requestAnimationFrame(e)}:function(e){return setTimeout(e,16)},cancel:"function"==typeof cancelAnimationFrame?function(e){return cancelAnimationFrame(e)}:clearTimeout},q="undefined"!=typeof performance&&performance.now?function(){return performance.now()}:function(){return+new Date};function H(e){return"string"==typeof e?e.split():(O(Array.isArray(e),"invalid extension array"),e)}function K(e){return"string"==typeof e?(O("undefined"!=typeof document,"not supported outside of DOM"),document.querySelector(e)):e}function G(e){var n,r,i,o,a,s=e||{},l={},u=[],c=[],p="undefined"==typeof window?1:window.devicePixelRatio,d=!1,h=function(e){e&&O.raise(e)},f=function(){};if("string"==typeof s?(O("undefined"!=typeof document,"selector queries only supported in DOM enviroments"),n=document.querySelector(s),O(n,"invalid query string for element")):"object"==typeof s?"string"==typeof(a=s).nodeName&&"function"==typeof a.appendChild&&"function"==typeof a.getBoundingClientRect?n=s:!function(e){return"function"==typeof e.drawArrays||"function"==typeof e.drawElements}(s)?(O.constructor(s),"gl"in s?o=s.gl:"canvas"in s?i=K(s.canvas):"container"in s&&(r=K(s.container)),"attributes"in s&&O.type(l=s.attributes,"object","invalid context attributes"),"extensions"in s&&(u=H(s.extensions)),"optionalExtensions"in s&&(c=H(s.optionalExtensions)),"onDone"in s&&(O.type(s.onDone,"function","invalid or missing onDone callback"),h=s.onDone),"profile"in s&&(d=!!s.profile),"pixelRatio"in s&&O((p=+s.pixelRatio)>0,"invalid pixel ratio")):i=(o=s).canvas:O.raise("invalid arguments to regl"),n&&("canvas"===n.nodeName.toLowerCase()?i=n:r=n),!o){if(!i){O("undefined"!=typeof document,"must manually specify webgl context outside of DOM environments");var m=function(e,n,r){var i,o=document.createElement("canvas");function a(){var n=window.innerWidth,i=window.innerHeight;if(e!==document.body){var a=e.getBoundingClientRect();n=a.right-a.left,i=a.bottom-a.top}o.width=r*n,o.height=r*i,t(o.style,{width:n+"px",height:i+"px"})}return t(o.style,{border:0,margin:0,padding:0,top:0,left:0}),e.appendChild(o),e===document.body&&(o.style.position="absolute",t(e.style,{margin:0,padding:0})),e!==document.body&&"function"==typeof ResizeObserver?(i=new ResizeObserver(function(){setTimeout(a)})).observe(e):window.addEventListener("resize",a,!1),a(),{canvas:o,onDestroy:function(){i?i.disconnect():window.removeEventListener("resize",a),e.removeChild(o)}}}(r||document.body,0,p);if(!m)return null;i=m.canvas,f=m.onDestroy}void 0===l.premultipliedAlpha&&(l.premultipliedAlpha=!0),o=function(e,t){function n(n){try{return e.getContext(n,t)}catch(e){return null}}return n("webgl")||n("experimental-webgl")||n("webgl-experimental")}(i,l)}return o?{gl:o,canvas:i,container:r,extensions:u,optionalExtensions:c,pixelRatio:p,profile:d,onDone:h,onDestroy:f}:(f(),h("webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org"),null)}function W(e,t){for(var n=Array(e),r=0;r65535)<<4,t|=n=((e>>>=t)>255)<<3,t|=n=((e>>>=n)>15)<<2,(t|=n=((e>>>=n)>3)<<1)|(e>>>=n)>>1}function ne(){var e=W(8,function(){return[]});function t(t){var n=function(e){for(var t=16;t<=1<<28;t*=16)if(e<=t)return t;return 0}(t),r=e[te(n)>>2];return r.length>0?r.pop():new ArrayBuffer(n)}function n(t){e[te(t.byteLength)>>2].push(t)}return{alloc:t,free:n,allocType:function(e,n){var r=null;switch(e){case $:r=new Int8Array(t(n),0,n);break;case Y:r=new Uint8Array(t(n),0,n);break;case Q:r=new Int16Array(t(2*n),0,n);break;case X:r=new Uint16Array(t(2*n),0,n);break;case J:r=new Int32Array(t(4*n),0,n);break;case Z:r=new Uint32Array(t(4*n),0,n);break;case ee:r=new Float32Array(t(4*n),0,n);break;default:return null}return r.length!==n?r.subarray(0,n):r},freeType:function(e){n(e.buffer)}}}var re=ne();re.zero=ne();var ie=function(e,t){var n=1;t.ext_texture_filter_anisotropic&&(n=e.getParameter(34047));var r=1,i=1;t.webgl_draw_buffers&&(r=e.getParameter(34852),i=e.getParameter(36063));var o=!!t.oes_texture_float;if(o){var a=e.createTexture();e.bindTexture(3553,a),e.texImage2D(3553,0,6408,1,1,0,6408,5126,null);var s=e.createFramebuffer();if(e.bindFramebuffer(36160,s),e.framebufferTexture2D(36160,36064,3553,a,0),e.bindTexture(3553,null),36053!==e.checkFramebufferStatus(36160))o=!1;else{e.viewport(0,0,1,1),e.clearColor(1,0,0,1),e.clear(16384);var l=re.allocType(5126,4);e.readPixels(0,0,1,1,6408,5126,l),e.getError()?o=!1:(e.deleteFramebuffer(s),e.deleteTexture(a),o=1===l[0]),re.freeType(l)}}var u=!0;if(!("undefined"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\//.test(navigator.appVersion)||/Edge/.test(navigator.userAgent)))){var c=e.createTexture(),p=re.allocType(5121,36);e.activeTexture(33984),e.bindTexture(34067,c),e.texImage2D(34069,0,6408,3,3,0,6408,5121,p),re.freeType(p),e.bindTexture(34067,null),e.deleteTexture(c),u=!e.getError()}return{colorBits:[e.getParameter(3410),e.getParameter(3411),e.getParameter(3412),e.getParameter(3413)],depthBits:e.getParameter(3414),stencilBits:e.getParameter(3415),subpixelBits:e.getParameter(3408),extensions:Object.keys(t).filter(function(e){return!!t[e]}),maxAnisotropic:n,maxDrawbuffers:r,maxColorAttachments:i,pointSizeDims:e.getParameter(33901),lineWidthDims:e.getParameter(33902),maxViewportDims:e.getParameter(3386),maxCombinedTextureUnits:e.getParameter(35661),maxCubeMapSize:e.getParameter(34076),maxRenderbufferSize:e.getParameter(34024),maxTextureUnits:e.getParameter(34930),maxTextureSize:e.getParameter(3379),maxAttributes:e.getParameter(34921),maxVertexUniforms:e.getParameter(36347),maxVertexTextureUnits:e.getParameter(35660),maxVaryingVectors:e.getParameter(36348),maxFragmentUniforms:e.getParameter(36349),glsl:e.getParameter(35724),renderer:e.getParameter(7937),vendor:e.getParameter(7936),version:e.getParameter(7938),readFloat:o,npotTextureCube:u}};function oe(t){return!!t&&"object"==typeof t&&Array.isArray(t.shape)&&Array.isArray(t.stride)&&"number"==typeof t.offset&&t.shape.length===t.stride.length&&(Array.isArray(t.data)||e(t.data))}var ae=function(e){return Object.keys(e).map(function(t){return e[t]})},se={shape:function(e){for(var t=[],n=e;n.length;n=n[0])t.push(n.length);return t},flatten:function(e,t,n,r){var i=1;if(t.length)for(var o=0;o>>31<<15,o=(r<<1>>>24)-127,a=r>>13&1023;if(o<-24)t[n]=i;else if(o<-14){t[n]=i+(a+1024>>-14-o)}else t[n]=o>15?i+31744:i+(o+15<<10)+a}return t}function Fe(t){return Array.isArray(t)||e(t)}var ze=function(e){return!(e&e-1||!e)},Ue=34467,Ne=3553,qe=34067,He=34069,Ke=6408,Ge=6406,We=6407,$e=6409,Ye=6410,Qe=32854,Xe=32855,Je=36194,Ze=32819,et=32820,tt=33635,nt=34042,rt=6402,it=34041,ot=35904,at=35906,st=36193,lt=33776,ut=33777,ct=33778,pt=33779,dt=35986,ht=35987,ft=34798,mt=35840,vt=35841,bt=35842,gt=35843,yt=36196,wt=5121,xt=5123,_t=5125,kt=5126,Ct=10242,Et=10243,At=10497,Pt=33071,Mt=33648,St=10240,Tt=10241,Vt=9728,jt=9729,Ot=9984,Dt=9985,Lt=9986,Rt=9987,It=33170,Bt=4352,Ft=4353,zt=4354,Ut=34046,Nt=3317,qt=37440,Ht=37441,Kt=37443,Gt=37444,Wt=33984,$t=[Ot,Lt,Dt,Rt],Yt=[0,$e,Ye,We,Ke],Qt={};function Xt(e){return"[object "+e+"]"}Qt[$e]=Qt[Ge]=Qt[rt]=1,Qt[it]=Qt[Ye]=2,Qt[We]=Qt[ot]=3,Qt[Ke]=Qt[at]=4;var Jt=Xt("HTMLCanvasElement"),Zt=Xt("OffscreenCanvas"),en=Xt("CanvasRenderingContext2D"),tn=Xt("ImageBitmap"),nn=Xt("HTMLImageElement"),rn=Xt("HTMLVideoElement"),on=Object.keys(ue).concat([Jt,Zt,en,tn,nn,rn]),an=[];an[wt]=1,an[kt]=4,an[st]=2,an[xt]=2,an[_t]=4;var sn=[];function ln(e){return Array.isArray(e)&&(0===e.length||"number"==typeof e[0])}function un(e){return!!Array.isArray(e)&&!(0===e.length||!Fe(e[0]))}function cn(e){return Object.prototype.toString.call(e)}function pn(e){return cn(e)===Jt}function dn(e){return cn(e)===Zt}function hn(e){if(!e)return!1;var t=cn(e);return on.indexOf(t)>=0||(ln(e)||un(e)||oe(e))}function fn(e){return 0|ue[Object.prototype.toString.call(e)]}function mn(e,t){return re.allocType(e.type===st?kt:e.type,t)}function vn(e,t){e.type===st?(e.data=Be(t),re.freeType(t)):e.data=t}function bn(e,t,n,r,i,o){var a;if(a=void 0!==sn[e]?sn[e]:Qt[e]*an[t],o&&(a*=6),i){for(var s=0,l=n;l>=1;)s+=a*l*l,l/=2;return s}return a*n*r}function gn(n,r,i,o,a,s,l){var u={"don't care":Bt,"dont care":Bt,nice:zt,fast:Ft},c={repeat:At,clamp:Pt,mirror:Mt},p={nearest:Vt,linear:jt},d=t({mipmap:Rt,"nearest mipmap nearest":Ot,"linear mipmap nearest":Dt,"nearest mipmap linear":Lt,"linear mipmap linear":Rt},p),h={none:0,browser:Gt},f={uint8:wt,rgba4:Ze,rgb565:tt,"rgb5 a1":et},m={alpha:Ge,luminance:$e,"luminance alpha":Ye,rgb:We,rgba:Ke,rgba4:Qe,"rgb5 a1":Xe,rgb565:Je},v={};r.ext_srgb&&(m.srgb=ot,m.srgba=at),r.oes_texture_float&&(f.float32=f.float=kt),r.oes_texture_half_float&&(f.float16=f["half float"]=st),r.webgl_depth_texture&&(t(m,{depth:rt,"depth stencil":it}),t(f,{uint16:xt,uint32:_t,"depth stencil":nt})),r.webgl_compressed_texture_s3tc&&t(v,{"rgb s3tc dxt1":lt,"rgba s3tc dxt1":ut,"rgba s3tc dxt3":ct,"rgba s3tc dxt5":pt}),r.webgl_compressed_texture_atc&&t(v,{"rgb atc":dt,"rgba atc explicit alpha":ht,"rgba atc interpolated alpha":ft}),r.webgl_compressed_texture_pvrtc&&t(v,{"rgb pvrtc 4bppv1":mt,"rgb pvrtc 2bppv1":vt,"rgba pvrtc 4bppv1":bt,"rgba pvrtc 2bppv1":gt}),r.webgl_compressed_texture_etc1&&(v["rgb etc1"]=yt);var b=Array.prototype.slice.call(n.getParameter(Ue));Object.keys(v).forEach(function(e){var t=v[e];b.indexOf(t)>=0&&(m[e]=t)});var g=Object.keys(m);i.textureFormats=g;var y=[];Object.keys(m).forEach(function(e){y[m[e]]=e});var w=[];Object.keys(f).forEach(function(e){w[f[e]]=e});var x=[];Object.keys(p).forEach(function(e){x[p[e]]=e});var _=[];Object.keys(d).forEach(function(e){_[d[e]]=e});var k=[];Object.keys(c).forEach(function(e){k[c[e]]=e});var C=g.reduce(function(e,t){var n=m[t];return e[n]=n===$e||n===Ge||n===$e||n===Ye||n===rt||n===it||r.ext_srgb&&(n===ot||n===at)?n:n===Xe||t.indexOf("rgba")>=0?Ke:We,e},{});function E(){this.internalformat=Ke,this.format=Ke,this.type=wt,this.compressed=!1,this.premultiplyAlpha=!1,this.flipY=!1,this.unpackAlignment=1,this.colorSpace=Gt,this.width=0,this.height=0,this.channels=0}function A(e,t){e.internalformat=t.internalformat,e.format=t.format,e.type=t.type,e.compressed=t.compressed,e.premultiplyAlpha=t.premultiplyAlpha,e.flipY=t.flipY,e.unpackAlignment=t.unpackAlignment,e.colorSpace=t.colorSpace,e.width=t.width,e.height=t.height,e.channels=t.channels}function P(e,t){if("object"==typeof t&&t){if("premultiplyAlpha"in t&&(O.type(t.premultiplyAlpha,"boolean","invalid premultiplyAlpha"),e.premultiplyAlpha=t.premultiplyAlpha),"flipY"in t&&(O.type(t.flipY,"boolean","invalid texture flip"),e.flipY=t.flipY),"alignment"in t&&(O.oneOf(t.alignment,[1,2,4,8],"invalid texture unpack alignment"),e.unpackAlignment=t.alignment),"colorSpace"in t&&(O.parameter(t.colorSpace,h,"invalid colorSpace"),e.colorSpace=h[t.colorSpace]),"type"in t){var n=t.type;O(r.oes_texture_float||!("float"===n||"float32"===n),"you must enable the OES_texture_float extension in order to use floating point textures."),O(r.oes_texture_half_float||!("half float"===n||"float16"===n),"you must enable the OES_texture_half_float extension in order to use 16-bit floating point textures."),O(r.webgl_depth_texture||!("uint16"===n||"uint32"===n||"depth stencil"===n),"you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures."),O.parameter(n,f,"invalid texture type"),e.type=f[n]}var o=e.width,a=e.height,s=e.channels,l=!1;"shape"in t?(O(Array.isArray(t.shape)&&t.shape.length>=2,"shape must be an array"),o=t.shape[0],a=t.shape[1],3===t.shape.length&&(O((s=t.shape[2])>0&&s<=4,"invalid number of channels"),l=!0),O(o>=0&&o<=i.maxTextureSize,"invalid width"),O(a>=0&&a<=i.maxTextureSize,"invalid height")):("radius"in t&&(o=a=t.radius,O(o>=0&&o<=i.maxTextureSize,"invalid radius")),"width"in t&&O((o=t.width)>=0&&o<=i.maxTextureSize,"invalid width"),"height"in t&&O((a=t.height)>=0&&a<=i.maxTextureSize,"invalid height"),"channels"in t&&(O((s=t.channels)>0&&s<=4,"invalid number of channels"),l=!0)),e.width=0|o,e.height=0|a,e.channels=0|s;var u=!1;if("format"in t){var c=t.format;O(r.webgl_depth_texture||!("depth"===c||"depth stencil"===c),"you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures."),O.parameter(c,m,"invalid texture format");var p=e.internalformat=m[c];e.format=C[p],c in f&&("type"in t||(e.type=f[c])),c in v&&(e.compressed=!0),u=!0}!l&&u?e.channels=Qt[e.format]:l&&!u?e.channels!==Yt[e.format]&&(e.format=e.internalformat=Yt[e.channels]):u&&l&&O(e.channels===Qt[e.format],"number of channels inconsistent with specified format")}}function M(e){n.pixelStorei(qt,e.flipY),n.pixelStorei(Ht,e.premultiplyAlpha),n.pixelStorei(Kt,e.colorSpace),n.pixelStorei(Nt,e.unpackAlignment)}function S(){E.call(this),this.xOffset=0,this.yOffset=0,this.data=null,this.needsFree=!1,this.element=null,this.needsCopy=!1}function T(t,n){var r=null;if(hn(n)?r=n:n&&(O.type(n,"object","invalid pixel data type"),P(t,n),"x"in n&&(t.xOffset=0|n.x),"y"in n&&(t.yOffset=0|n.y),hn(n.data)&&(r=n.data)),O(!t.compressed||r instanceof Uint8Array,"compressed texture data must be stored in a uint8array"),n.copy){O(!r,"can not specify copy and data field for the same texture");var o=a.viewportWidth,s=a.viewportHeight;t.width=t.width||o-t.xOffset,t.height=t.height||s-t.yOffset,t.needsCopy=!0,O(t.xOffset>=0&&t.xOffset=0&&t.yOffset0&&t.width<=o&&t.height>0&&t.height<=s,"copy texture read out of bounds")}else if(r){if(e(r))t.channels=t.channels||4,t.data=r,"type"in n||t.type!==wt||(t.type=fn(r));else if(ln(r))t.channels=t.channels||4,function(e,t){var n=t.length;switch(e.type){case wt:case xt:case _t:case kt:var r=re.allocType(e.type,n);r.set(t),e.data=r;break;case st:e.data=Be(t);break;default:O.raise("unsupported texture type, must specify a typed array")}}(t,r),t.alignment=1,t.needsFree=!0;else if(oe(r)){var l=r.data;Array.isArray(l)||t.type!==wt||(t.type=fn(l));var u,c,p,d,h,f,m=r.shape,v=r.stride;3===m.length?(p=m[2],f=v[2]):(O(2===m.length,"invalid ndarray pixel data, must be 2 or 3D"),p=1,f=1),u=m[0],c=m[1],d=v[0],h=v[1],t.alignment=1,t.width=u,t.height=c,t.channels=p,t.format=t.internalformat=Yt[p],t.needsFree=!0,function(e,t,n,r,i,o){for(var a=e.width,s=e.height,l=e.channels,u=mn(e,a*s*l),c=0,p=0;p=0,"oes_texture_float extension not enabled"):t.type===st&&O(i.extensions.indexOf("oes_texture_half_float")>=0,"oes_texture_half_float extension not enabled")}function V(e,t,r){var i=e.element,a=e.data,s=e.internalformat,l=e.format,u=e.type,c=e.width,p=e.height;M(e),i?n.texImage2D(t,r,l,l,u,i):e.compressed?n.compressedTexImage2D(t,r,s,c,p,0,a):e.needsCopy?(o(),n.copyTexImage2D(t,r,l,e.xOffset,e.yOffset,c,p,0)):n.texImage2D(t,r,l,c,p,0,l,u,a||null)}function j(e,t,r,i,a){var s=e.element,l=e.data,u=e.internalformat,c=e.format,p=e.type,d=e.width,h=e.height;M(e),s?n.texSubImage2D(t,a,r,i,c,p,s):e.compressed?n.compressedTexSubImage2D(t,a,r,i,u,d,h,l):e.needsCopy?(o(),n.copyTexSubImage2D(t,a,r,i,e.xOffset,e.yOffset,d,h)):n.texSubImage2D(t,a,r,i,d,h,c,p,l)}var D=[];function L(){return D.pop()||new S}function R(e){e.needsFree&&re.freeType(e.data),S.call(e),D.push(e)}function I(){E.call(this),this.genMipmaps=!1,this.mipmapHint=Bt,this.mipmask=0,this.images=Array(16)}function B(e,t,n){var r=e.images[0]=L();e.mipmask=1,r.width=e.width=t,r.height=e.height=n,r.channels=e.channels=4}function F(e,t){var n=null;if(hn(t))A(n=e.images[0]=L(),e),T(n,t),e.mipmask=1;else if(P(e,t),Array.isArray(t.mipmap))for(var r=t.mipmap,i=0;i>=i,n.height>>=i,T(n,r[i]),e.mipmask|=1<=0&&!("faces"in t)&&(e.genMipmaps=!0)}if("mag"in t){var r=t.mag;O.parameter(r,p),e.magFilter=p[r]}var o=e.wrapS,a=e.wrapT;if("wrap"in t){var s=t.wrap;"string"==typeof s?(O.parameter(s,c),o=a=c[s]):Array.isArray(s)&&(O.parameter(s[0],c),O.parameter(s[1],c),o=c[s[0]],a=c[s[1]])}else{if("wrapS"in t){var l=t.wrapS;O.parameter(l,c),o=c[l]}if("wrapT"in t){var h=t.wrapT;O.parameter(h,c),a=c[h]}}if(e.wrapS=o,e.wrapT=a,"anisotropic"in t){var f=t.anisotropic;O("number"==typeof f&&f>=1&&f<=i.maxAnisotropic,"aniso samples must be between 1 and "),e.anisotropic=t.anisotropic}if("mipmap"in t){var m=!1;switch(typeof t.mipmap){case"string":O.parameter(t.mipmap,u,"invalid mipmap hint"),e.mipmapHint=u[t.mipmap],e.genMipmaps=!0,m=!0;break;case"boolean":m=e.genMipmaps=t.mipmap;break;case"object":O(Array.isArray(t.mipmap),"invalid mipmap type"),e.genMipmaps=!1,m=!0;break;default:O.raise("invalid mipmap type")}!m||"min"in t||(e.minFilter=Ot)}}function G(e,t){n.texParameteri(t,Tt,e.minFilter),n.texParameteri(t,St,e.magFilter),n.texParameteri(t,Ct,e.wrapS),n.texParameteri(t,Et,e.wrapT),r.ext_texture_filter_anisotropic&&n.texParameteri(t,Ut,e.anisotropic),e.genMipmaps&&(n.hint(It,e.mipmapHint),n.generateMipmap(t))}var W=0,$={},Y=i.maxTextureUnits,Q=Array(Y).map(function(){return null});function X(e){E.call(this),this.mipmask=0,this.internalformat=Ke,this.id=W++,this.refCount=1,this.target=e,this.texture=n.createTexture(),this.unit=-1,this.bindCount=0,this.texInfo=new H,l.profile&&(this.stats={size:0})}function J(e){n.activeTexture(Wt),n.bindTexture(e.target,e.texture)}function Z(){var e=Q[0];e?n.bindTexture(e.target,e.texture):n.bindTexture(Ne,null)}function ee(e){var t=e.texture;O(t,"must not double destroy texture");var r=e.unit,i=e.target;r>=0&&(n.activeTexture(Wt+r),n.bindTexture(i,null),Q[r]=null),n.deleteTexture(t),e.texture=null,e.params=null,e.pixels=null,e.refCount=0,delete $[e.id],s.textureCount--}return t(X.prototype,{bind:function(){this.bindCount+=1;var e=this.unit;if(e<0){for(var t=0;t0)continue;r.unit=-1}Q[t]=this,e=t;break}e>=Y&&O.raise("insufficient number of texture units"),l.profile&&s.maxTextureUnits>l)-a,u.height=u.height||(r.height>>l)-s,O(r.type===u.type&&r.format===u.format&&r.internalformat===u.internalformat,"incompatible format for texture.subimage"),O(a>=0&&s>=0&&a+u.width<=r.width&&s+u.height<=r.height,"texture.subimage write out of bounds"),O(r.mipmask&1<>s;++s){var u=i>>s,c=a>>s;if(!u||!c)break;n.texImage2D(Ne,s,r.format,u,c,0,r.format,r.type,null)}return Z(),l.profile&&(r.stats.size=bn(r.internalformat,r.type,i,a,!1,!1)),o},o._reglType="texture2d",o._texture=r,l.profile&&(o.stats=r.stats),o.destroy=function(){r.decRef()},o},createCube:function(e,t,r,o,a,u){var c=new X(qe);$[c.id]=c,s.cubeCount++;var p=new Array(6);function d(e,t,n,r,o,a){var s,u=c.texInfo;for(H.call(u),s=0;s<6;++s)p[s]=N();if("number"!=typeof e&&e)if("object"==typeof e)if(t)F(p[0],e),F(p[1],t),F(p[2],n),F(p[3],r),F(p[4],o),F(p[5],a);else if(K(u,e),P(c,e),"faces"in e){var h=e.faces;for(O(Array.isArray(h)&&6===h.length,"cube faces must be a length 6 array"),s=0;s<6;++s)O("object"==typeof h[s]&&!!h[s],"invalid input for cube map face"),A(p[s],c),F(p[s],h[s])}else for(s=0;s<6;++s)F(p[s],e);else O.raise("invalid arguments to cube map");else{var f=0|e||1;for(s=0;s<6;++s)B(p[s],f,f)}for(A(c,p[0]),i.npotTextureCube||O(ze(c.width)&&ze(c.height),"your browser does not support non power or two texture dimensions"),c.mipmask=u.genMipmaps?(p[0].width<<1)-1:p[0].mipmask,O.textureCube(c,u,p,i),c.internalformat=p[0].internalformat,d.width=p[0].width,d.height=p[0].height,J(c),s=0;s<6;++s)z(p[s],He+s);for(G(u,qe),Z(),l.profile&&(c.stats.size=bn(c.internalformat,c.type,d.width,d.height,u.genMipmaps,!0)),d.format=y[c.internalformat],d.type=w[c.type],d.mag=x[u.magFilter],d.min=_[u.minFilter],d.wrapS=k[u.wrapS],d.wrapT=k[u.wrapT],s=0;s<6;++s)q(p[s]);return d}return d(e,t,r,o,a,u),d.subimage=function(e,t,n,r,i){O(!!t,"must specify image data"),O("number"==typeof e&&e===(0|e)&&e>=0&&e<6,"invalid face");var o=0|n,a=0|r,s=0|i,l=L();return A(l,c),l.width=0,l.height=0,T(l,t),l.width=l.width||(c.width>>s)-o,l.height=l.height||(c.height>>s)-a,O(c.type===l.type&&c.format===l.format&&c.internalformat===l.internalformat,"incompatible format for texture.subimage"),O(o>=0&&a>=0&&o+l.width<=c.width&&a+l.height<=c.height,"texture.subimage write out of bounds"),O(c.mipmask&1<>i;++i)n.texImage2D(He+r,i,c.format,t>>i,t>>i,0,c.format,c.type,null);return Z(),l.profile&&(c.stats.size=bn(c.internalformat,c.type,d.width,d.height,!1,!0)),d}},d._reglType="textureCube",d._texture=c,l.profile&&(d.stats=c.stats),d.destroy=function(){c.decRef()},d},clear:function(){for(var e=0;e>t,e.height>>t,0,e.internalformat,e.type,null);else for(var r=0;r<6;++r)n.texImage2D(He+r,t,e.internalformat,e.width>>t,e.height>>t,0,e.internalformat,e.type,null);G(e.texInfo,e.target)})},refresh:function(){for(var e=0;e=2,"invalid renderbuffer shape"),s=0|h[0],l=0|h[1]}else"radius"in d&&(s=l=0|d.radius),"width"in d&&(s=0|d.width),"height"in d&&(l=0|d.height);"format"in d&&(O.parameter(d.format,o,"invalid renderbuffer format"),u=o[d.format])}else"number"==typeof t?(s=0|t,l="number"==typeof r?0|r:s):t?O.raise("invalid arguments to renderbuffer constructor"):s=l=1;if(O(s>0&&l>0&&s<=n.maxRenderbufferSize&&l<=n.maxRenderbufferSize,"invalid renderbuffer size"),s!==c.width||l!==c.height||u!==c.format)return p.width=c.width=s,p.height=c.height=l,c.format=u,e.bindRenderbuffer(yn,c.renderbuffer),e.renderbufferStorage(yn,u,s,l),O(0===e.getError(),"invalid render buffer format"),i.profile&&(c.stats.size=_n(c.format,c.width,c.height)),p.format=a[c.format],p}return l[c.id]=c,r.renderbufferCount++,p(t,s),p.resize=function(t,r){var o=0|t,a=0|r||o;return o===c.width&&a===c.height?p:(O(o>0&&a>0&&o<=n.maxRenderbufferSize&&a<=n.maxRenderbufferSize,"invalid renderbuffer size"),p.width=c.width=o,p.height=c.height=a,e.bindRenderbuffer(yn,c.renderbuffer),e.renderbufferStorage(yn,c.format,o,a),O(0===e.getError(),"invalid render buffer format"),i.profile&&(c.stats.size=_n(c.format,c.width,c.height)),p)},p._reglType="renderbuffer",p._renderbuffer=c,i.profile&&(p.stats=c.stats),p.destroy=function(){c.decRef()},p},clear:function(){ae(l).forEach(c)},restore:function(){ae(l).forEach(function(t){t.renderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(yn,t.renderbuffer),e.renderbufferStorage(yn,t.format,t.width,t.height)}),e.bindRenderbuffer(yn,null)}}},Cn=36160,En=36161,An=3553,Pn=34069,Mn=36064,Sn=36096,Tn=36128,Vn=33306,jn=36053,On=6402,Dn=[6407,6408],Ln=[];Ln[6408]=4,Ln[6407]=3;var Rn=[];Rn[5121]=1,Rn[5126]=4,Rn[36193]=2;var In=33189,Bn=36168,Fn=34041,zn=[32854,32855,36194,35907,34842,34843,34836],Un={};Un[jn]="complete",Un[36054]="incomplete attachment",Un[36057]="incomplete dimensions",Un[36055]="incomplete, missing attachment",Un[36061]="unsupported";var Nn=5126,qn=34962;function Hn(){this.state=0,this.x=0,this.y=0,this.z=0,this.w=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=Nn,this.offset=0,this.stride=0,this.divisor=0}var Kn=35632,Gn=35633,Wn=35718,$n=35721,Yn=6408,Qn=5121,Xn=3333,Jn=5126;function Zn(t,n,r,i,o,a,s){function l(l){var u;null===n.next?(O(o.preserveDrawingBuffer,'you must create a webgl context with "preserveDrawingBuffer":true in order to read pixels from the drawing buffer'),u=Qn):(O(null!==n.next.colorAttachments[0].texture,"You cannot read from a renderbuffer"),u=n.next.colorAttachments[0].texture._texture.type,a.oes_texture_float?(O(u===Qn||u===Jn,"Reading from a framebuffer is only allowed for the types 'uint8' and 'float'"),u===Jn&&O(s.readFloat,"Reading 'float' values is not permitted in your browser. For a fallback, please see: https://www.npmjs.com/package/glsl-read-float")):O(u===Qn,"Reading from a framebuffer is only allowed for the type 'uint8'"));var c=0,p=0,d=i.framebufferWidth,h=i.framebufferHeight,f=null;e(l)?f=l:l&&(O.type(l,"object","invalid arguments to regl.read()"),p=0|l.y,O((c=0|l.x)>=0&&c=0&&p0&&d+c<=i.framebufferWidth,"invalid width for read pixels"),O(h>0&&h+p<=i.framebufferHeight,"invalid height for read pixels"),r();var m=d*h*4;return f||(u===Qn?f=new Uint8Array(m):u===Jn&&(f=f||new Float32Array(m))),O.isTypedArray(f,"data buffer for regl.read() must be a typedarray"),O(f.byteLength>=m,"data buffer for regl.read() too small"),t.pixelStorei(Xn,4),t.readPixels(c,p,d,h,Yn,u,f),f}return function(e){return e&&"framebuffer"in e?function(e){var t;return n.setFBO({framebuffer:e.framebuffer},function(){t=l(e)}),t}(e):l(e)}}function er(e){return Array.prototype.slice.call(e)}function tr(e){return er(e).join("")}var nr="xyzw".split(""),rr=5121,ir=1,or=2,ar=0,sr=1,lr=2,ur=3,cr=4,pr=5,dr=6,hr="dither",fr="blend.enable",mr="blend.color",vr="blend.equation",br="blend.func",gr="depth.enable",yr="depth.func",wr="depth.range",xr="depth.mask",_r="colorMask",kr="cull.enable",Cr="cull.face",Er="frontFace",Ar="lineWidth",Pr="polygonOffset.enable",Mr="polygonOffset.offset",Sr="sample.alpha",Tr="sample.enable",Vr="sample.coverage",jr="stencil.enable",Or="stencil.mask",Dr="stencil.func",Lr="stencil.opFront",Rr="stencil.opBack",Ir="scissor.enable",Br="scissor.box",Fr="viewport",zr="profile",Ur="framebuffer",Nr="vert",qr="frag",Hr="elements",Kr="primitive",Gr="count",Wr="offset",$r="instances",Yr="vao",Qr=Ur+"Width",Xr=Ur+"Height",Jr=Fr+"Width",Zr=Fr+"Height",ei="drawingBufferWidth",ti="drawingBufferHeight",ni=[br,vr,Dr,Lr,Rr,Vr,Fr,Br,Mr],ri=34962,ii=34963,oi=3553,ai=34067,si=2884,li=3042,ui=3024,ci=2960,pi=2929,di=3089,hi=32823,fi=32926,mi=32928,vi=5126,bi=35664,gi=35665,yi=35666,wi=5124,xi=35667,_i=35668,ki=35669,Ci=35670,Ei=35671,Ai=35672,Pi=35673,Mi=35674,Si=35675,Ti=35676,Vi=35678,ji=35680,Oi=4,Di=1028,Li=1029,Ri=2304,Ii=2305,Bi=32775,Fi=32776,zi=519,Ui=7680,Ni=0,qi=1,Hi=32774,Ki=513,Gi=36160,Wi=36064,$i={0:0,1:1,zero:0,one:1,"src color":768,"one minus src color":769,"src alpha":770,"one minus src alpha":771,"dst color":774,"one minus dst color":775,"dst alpha":772,"one minus dst alpha":773,"constant color":32769,"one minus constant color":32770,"constant alpha":32771,"one minus constant alpha":32772,"src alpha saturate":776},Yi=["constant color, constant alpha","one minus constant color, constant alpha","constant color, one minus constant alpha","one minus constant color, one minus constant alpha","constant alpha, constant color","constant alpha, one minus constant color","one minus constant alpha, constant color","one minus constant alpha, one minus constant color"],Qi={never:512,less:513,"<":513,equal:514,"=":514,"==":514,"===":514,lequal:515,"<=":515,greater:516,">":516,notequal:517,"!=":517,"!==":517,gequal:518,">=":518,always:519},Xi={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,"increment wrap":34055,"decrement wrap":34056,invert:5386},Ji={frag:35632,vert:35633},Zi={cw:Ri,ccw:Ii};function eo(t){return Array.isArray(t)||e(t)||oe(t)}function to(e){return e.sort(function(e,t){return e===Fr?-1:t===Fr?1:e=1,r>=2,t)}if(n===cr){var i=e.data;return new no(i.thisDep,i.contextDep,i.propDep,t)}if(n===pr)return new no(!1,!1,!1,t);if(n===dr){for(var o=!1,a=!1,s=!1,l=0;l=1&&(a=!0),c>=2&&(s=!0)}else u.type===cr&&(o=o||u.data.thisDep,a=a||u.data.contextDep,s=s||u.data.propDep)}return new no(o,a,s,t)}return new no(n===ur,n===lr,n===sr,t)}var ao=new no(!1,!1,!1,function(){});function so(e,n,r,i,o,a,s,l,u,c,p,d,h,f,m){var v=c.Record,b={add:32774,subtract:32778,"reverse subtract":32779};r.ext_blend_minmax&&(b.min=Bi,b.max=Fi);var g=r.angle_instanced_arrays,y=r.webgl_draw_buffers,w={dirty:!0,profile:m.profile},x={},_=[],k={},C={};function E(e){return e.replace(".","_")}function A(e,t,n){var r=E(e);_.push(e),x[r]=w[r]=!!n,k[r]=t}function P(e,t,n){var r=E(e);_.push(e),Array.isArray(n)?(w[r]=n.slice(),x[r]=n.slice()):w[r]=x[r]=n,C[r]=t}A(hr,ui),A(fr,li),P(mr,"blendColor",[0,0,0,0]),P(vr,"blendEquationSeparate",[Hi,Hi]),P(br,"blendFuncSeparate",[qi,Ni,qi,Ni]),A(gr,pi,!0),P(yr,"depthFunc",Ki),P(wr,"depthRange",[0,1]),P(xr,"depthMask",!0),P(_r,_r,[!0,!0,!0,!0]),A(kr,si),P(Cr,"cullFace",Li),P(Er,Er,Ii),P(Ar,Ar,1),A(Pr,hi),P(Mr,"polygonOffset",[0,0]),A(Sr,fi),A(Tr,mi),P(Vr,"sampleCoverage",[1,!1]),A(jr,ci),P(Or,"stencilMask",-1),P(Dr,"stencilFunc",[zi,0,-1]),P(Lr,"stencilOpSeparate",[Di,Ui,Ui,Ui]),P(Rr,"stencilOpSeparate",[Li,Ui,Ui,Ui]),A(Ir,di),P(Br,"scissor",[0,0,e.drawingBufferWidth,e.drawingBufferHeight]),P(Fr,Fr,[0,0,e.drawingBufferWidth,e.drawingBufferHeight]);var M={gl:e,context:h,strings:n,next:x,current:w,draw:d,elements:a,buffer:o,shader:p,attributes:c.state,vao:c,uniforms:u,framebuffer:l,extensions:r,timer:f,isBufferArgs:eo},S={primTypes:_e,compareFuncs:Qi,blendFuncs:$i,blendEquations:b,stencilOps:Xi,glTypes:ce,orientationType:Zi};O.optional(function(){M.isArrayLike=Fe}),y&&(S.backBuffer=[Li],S.drawBuffer=W(i.maxDrawbuffers,function(e){return 0===e?[0]:W(e,function(e){return Wi+e})}));var T=0;function V(){var e=function(){var e=0,n=[],r=[];function i(){var n=[],r=[];return t(function(){n.push.apply(n,er(arguments))},{def:function(){var t="v"+e++;return r.push(t),arguments.length>0&&(n.push(t,"="),n.push.apply(n,er(arguments)),n.push(";")),t},toString:function(){return tr([r.length>0?"var "+r.join(",")+";":"",tr(n)])}})}function o(){var e=i(),n=i(),r=e.toString,o=n.toString;function a(t,r){n(t,r,"=",e.def(t,r),";")}return t(function(){e.apply(e,er(arguments))},{def:e.def,entry:e,exit:n,save:a,set:function(t,n,r){a(t,n),e(t,n,"=",r,";")},toString:function(){return r()+o()}})}var a=i(),s={};return{global:a,link:function(t){for(var i=0;i=0,'unknown parameter "'+t+'"',d.commandStr)})}t(h),t(f)});var m=function(e,t){var n=e.static;if("string"==typeof n[qr]&&"string"==typeof n[Nr]){if(Object.keys(t.dynamic).length>0)return null;var r=t.static,i=Object.keys(r);if(i.length>0&&"number"==typeof r[i[0]]){for(var o=[],a=0;a=0,"invalid "+e,n.commandStr):l=!1,"height"in o?O.command((s=0|o.height)>=0,"invalid "+e,n.commandStr):l=!1,new no(!l&&t&&t.thisDep,!l&&t&&t.contextDep,!l&&t&&t.propDep,function(e,t){var n=e.shared.context,r=a;"width"in o||(r=t.def(n,".",Qr,"-",u));var i=s;return"height"in o||(i=t.def(n,".",Xr,"-",c)),[u,c,r,i]})}if(e in i){var p=i[e],d=oo(p,function(t,n){var r=t.invoke(n,p);O.optional(function(){t.assert(n,r+"&&typeof "+r+'==="object"',"invalid "+e)});var i=t.shared.context,o=n.def(r,".x|0"),a=n.def(r,".y|0"),s=n.def('"width" in ',r,"?",r,".width|0:","(",i,".",Qr,"-",o,")"),l=n.def('"height" in ',r,"?",r,".height|0:","(",i,".",Xr,"-",a,")");return O.optional(function(){t.assert(n,s+">=0&&"+l+">=0","invalid "+e)}),[o,a,s,l]});return t&&(d.thisDep=d.thisDep||t.thisDep,d.contextDep=d.contextDep||t.contextDep,d.propDep=d.propDep||t.propDep),d}return t?new no(t.thisDep,t.contextDep,t.propDep,function(e,t){var n=e.shared.context;return[0,0,t.def(n,".",Qr),t.def(n,".",Xr)]}):null}var a=o(Fr);if(a){var s=a;a=new no(a.thisDep,a.contextDep,a.propDep,function(e,t){var n=s.append(e,t),r=e.shared.context;return t.set(r,"."+Jr,n[2]),t.set(r,"."+Zr,n[3]),n})}return{viewport:a,scissor_box:o(Br)}}(e,y,d),x=function(e,t){var n=e.static,r=e.dynamic,i=function(){if(Hr in n){var e=n[Hr];eo(e)?e=a.getElements(a.create(e,!0)):e&&(e=a.getElements(e),O.command(e,"invalid elements",t.commandStr));var i=io(function(t,n){if(e){var r=t.link(e);return t.ELEMENTS=r,r}return t.ELEMENTS=null,null});return i.value=e,i}if(Hr in r){var o=r[Hr];return oo(o,function(e,t){var n=e.shared,r=n.isBufferArgs,i=n.elements,a=e.invoke(t,o),s=t.def("null"),l=t.def(r,"(",a,")"),u=e.cond(l).then(s,"=",i,".createStream(",a,");").else(s,"=",i,".getElements(",a,");");return O.optional(function(){e.assert(u.else,"!"+a+"||"+s,"invalid elements")}),t.entry(u),t.exit(e.cond(l).then(i,".destroyStream(",s,");")),e.ELEMENTS=s,s})}return null}();function o(e,o){if(e in n){var a=0|n[e];return O.command(!o||a>=0,"invalid "+e,t.commandStr),io(function(e,t){return o&&(e.OFFSET=a),a})}if(e in r){var s=r[e];return oo(s,function(t,n){var r=t.invoke(n,s);return o&&(t.OFFSET=r,O.optional(function(){t.assert(n,r+">=0","invalid "+e)})),r})}return o&&i?io(function(e,t){return e.OFFSET="0",0}):null}var s=o(Wr,!0);return{elements:i,primitive:function(){if(Kr in n){var e=n[Kr];return O.commandParameter(e,_e,"invalid primitve",t.commandStr),io(function(t,n){return _e[e]})}if(Kr in r){var o=r[Kr];return oo(o,function(e,t){var n=e.constants.primTypes,r=e.invoke(t,o);return O.optional(function(){e.assert(t,r+" in "+n,"invalid primitive, must be one of "+Object.keys(_e))}),t.def(n,"[",r,"]")})}return i?ro(i)?io(i.value?function(e,t){return t.def(e.ELEMENTS,".primType")}:function(){return Oi}):new no(i.thisDep,i.contextDep,i.propDep,function(e,t){var n=e.ELEMENTS;return t.def(n,"?",n,".primType:",Oi)}):null}(),count:function(){if(Gr in n){var e=0|n[Gr];return O.command("number"==typeof e&&e>=0,"invalid vertex count",t.commandStr),io(function(){return e})}if(Gr in r){var o=r[Gr];return oo(o,function(e,t){var n=e.invoke(t,o);return O.optional(function(){e.assert(t,"typeof "+n+'==="number"&&'+n+">=0&&"+n+"===("+n+"|0)","invalid vertex count")}),n})}if(i){if(ro(i)){if(i)return s?new no(s.thisDep,s.contextDep,s.propDep,function(e,t){var n=t.def(e.ELEMENTS,".vertCount-",e.OFFSET);return O.optional(function(){e.assert(t,n+">=0","invalid vertex offset/element buffer too small")}),n}):io(function(e,t){return t.def(e.ELEMENTS,".vertCount")});var a=io(function(){return-1});return O.optional(function(){a.MISSING=!0}),a}var l=new no(i.thisDep||s.thisDep,i.contextDep||s.contextDep,i.propDep||s.propDep,function(e,t){var n=e.ELEMENTS;return e.OFFSET?t.def(n,"?",n,".vertCount-",e.OFFSET,":-1"):t.def(n,"?",n,".vertCount:-1")});return O.optional(function(){l.DYNAMIC=!0}),l}return null}(),instances:o($r,!1),offset:s}}(e,d),k=function(e,t){var n=e.static,r=e.dynamic,o={};return _.forEach(function(e){var a=E(e);function s(t,i){if(e in n){var s=t(n[e]);o[a]=io(function(){return s})}else if(e in r){var l=r[e];o[a]=oo(l,function(e,t){return i(e,t,e.invoke(t,l))})}}switch(e){case kr:case fr:case hr:case jr:case gr:case Ir:case Pr:case Sr:case Tr:case xr:return s(function(n){return O.commandType(n,"boolean",e,t.commandStr),n},function(t,n,r){return O.optional(function(){t.assert(n,"typeof "+r+'==="boolean"',"invalid flag "+e,t.commandStr)}),r});case yr:return s(function(n){return O.commandParameter(n,Qi,"invalid "+e,t.commandStr),Qi[n]},function(t,n,r){var i=t.constants.compareFuncs;return O.optional(function(){t.assert(n,r+" in "+i,"invalid "+e+", must be one of "+Object.keys(Qi))}),n.def(i,"[",r,"]")});case wr:return s(function(e){return O.command(Fe(e)&&2===e.length&&"number"==typeof e[0]&&"number"==typeof e[1]&&e[0]<=e[1],"depth range is 2d array",t.commandStr),e},function(e,t,n){return O.optional(function(){e.assert(t,e.shared.isArrayLike+"("+n+")&&"+n+".length===2&&typeof "+n+'[0]==="number"&&typeof '+n+'[1]==="number"&&'+n+"[0]<="+n+"[1]","depth range must be a 2d array")}),[t.def("+",n,"[0]"),t.def("+",n,"[1]")]});case br:return s(function(e){O.commandType(e,"object","blend.func",t.commandStr);var n="srcRGB"in e?e.srcRGB:e.src,r="srcAlpha"in e?e.srcAlpha:e.src,i="dstRGB"in e?e.dstRGB:e.dst,o="dstAlpha"in e?e.dstAlpha:e.dst;return O.commandParameter(n,$i,a+".srcRGB",t.commandStr),O.commandParameter(r,$i,a+".srcAlpha",t.commandStr),O.commandParameter(i,$i,a+".dstRGB",t.commandStr),O.commandParameter(o,$i,a+".dstAlpha",t.commandStr),O.command(-1===Yi.indexOf(n+", "+i),"unallowed blending combination (srcRGB, dstRGB) = ("+n+", "+i+")",t.commandStr),[$i[n],$i[i],$i[r],$i[o]]},function(t,n,r){var i=t.constants.blendFuncs;function o(o,a){var s=n.def('"',o,a,'" in ',r,"?",r,".",o,a,":",r,".",o);return O.optional(function(){t.assert(n,s+" in "+i,"invalid "+e+"."+o+a+", must be one of "+Object.keys($i))}),s}O.optional(function(){t.assert(n,r+"&&typeof "+r+'==="object"',"invalid blend func, must be an object")});var a=o("src","RGB"),s=o("dst","RGB");O.optional(function(){t.assert(n,t.constants.invalidBlendCombinations+".indexOf("+a+'+", "+'+s+") === -1 ","unallowed blending combination for (srcRGB, dstRGB)")});var l=n.def(i,"[",a,"]"),u=n.def(i,"[",o("src","Alpha"),"]");return[l,n.def(i,"[",s,"]"),u,n.def(i,"[",o("dst","Alpha"),"]")]});case vr:return s(function(n){return"string"==typeof n?(O.commandParameter(n,b,"invalid "+e,t.commandStr),[b[n],b[n]]):"object"==typeof n?(O.commandParameter(n.rgb,b,e+".rgb",t.commandStr),O.commandParameter(n.alpha,b,e+".alpha",t.commandStr),[b[n.rgb],b[n.alpha]]):void O.commandRaise("invalid blend.equation",t.commandStr)},function(t,n,r){var i=t.constants.blendEquations,o=n.def(),a=n.def(),s=t.cond("typeof ",r,'==="string"');return O.optional(function(){function n(e,n,r){t.assert(e,r+" in "+i,"invalid "+n+", must be one of "+Object.keys(b))}n(s.then,e,r),t.assert(s.else,r+"&&typeof "+r+'==="object"',"invalid "+e),n(s.else,e+".rgb",r+".rgb"),n(s.else,e+".alpha",r+".alpha")}),s.then(o,"=",a,"=",i,"[",r,"];"),s.else(o,"=",i,"[",r,".rgb];",a,"=",i,"[",r,".alpha];"),n(s),[o,a]});case mr:return s(function(e){return O.command(Fe(e)&&4===e.length,"blend.color must be a 4d array",t.commandStr),W(4,function(t){return+e[t]})},function(e,t,n){return O.optional(function(){e.assert(t,e.shared.isArrayLike+"("+n+")&&"+n+".length===4","blend.color must be a 4d array")}),W(4,function(e){return t.def("+",n,"[",e,"]")})});case Or:return s(function(e){return O.commandType(e,"number",a,t.commandStr),0|e},function(e,t,n){return O.optional(function(){e.assert(t,"typeof "+n+'==="number"',"invalid stencil.mask")}),t.def(n,"|0")});case Dr:return s(function(n){O.commandType(n,"object",a,t.commandStr);var r=n.cmp||"keep",i=n.ref||0,o="mask"in n?n.mask:-1;return O.commandParameter(r,Qi,e+".cmp",t.commandStr),O.commandType(i,"number",e+".ref",t.commandStr),O.commandType(o,"number",e+".mask",t.commandStr),[Qi[r],i,o]},function(e,t,n){var r=e.constants.compareFuncs;return O.optional(function(){function i(){e.assert(t,Array.prototype.join.call(arguments,""),"invalid stencil.func")}i(n+"&&typeof ",n,'==="object"'),i('!("cmp" in ',n,")||(",n,".cmp in ",r,")")}),[t.def('"cmp" in ',n,"?",r,"[",n,".cmp]",":",Ui),t.def(n,".ref|0"),t.def('"mask" in ',n,"?",n,".mask|0:-1")]});case Lr:case Rr:return s(function(n){O.commandType(n,"object",a,t.commandStr);var r=n.fail||"keep",i=n.zfail||"keep",o=n.zpass||"keep";return O.commandParameter(r,Xi,e+".fail",t.commandStr),O.commandParameter(i,Xi,e+".zfail",t.commandStr),O.commandParameter(o,Xi,e+".zpass",t.commandStr),[e===Rr?Li:Di,Xi[r],Xi[i],Xi[o]]},function(t,n,r){var i=t.constants.stencilOps;function o(o){return O.optional(function(){t.assert(n,'!("'+o+'" in '+r+")||("+r+"."+o+" in "+i+")","invalid "+e+"."+o+", must be one of "+Object.keys(Xi))}),n.def('"',o,'" in ',r,"?",i,"[",r,".",o,"]:",Ui)}return O.optional(function(){t.assert(n,r+"&&typeof "+r+'==="object"',"invalid "+e)}),[e===Rr?Li:Di,o("fail"),o("zfail"),o("zpass")]});case Mr:return s(function(e){O.commandType(e,"object",a,t.commandStr);var n=0|e.factor,r=0|e.units;return O.commandType(n,"number",a+".factor",t.commandStr),O.commandType(r,"number",a+".units",t.commandStr),[n,r]},function(t,n,r){return O.optional(function(){t.assert(n,r+"&&typeof "+r+'==="object"',"invalid "+e)}),[n.def(r,".factor|0"),n.def(r,".units|0")]});case Cr:return s(function(e){var n=0;return"front"===e?n=Di:"back"===e&&(n=Li),O.command(!!n,a,t.commandStr),n},function(e,t,n){return O.optional(function(){e.assert(t,n+'==="front"||'+n+'==="back"',"invalid cull.face")}),t.def(n,'==="front"?',Di,":",Li)});case Ar:return s(function(e){return O.command("number"==typeof e&&e>=i.lineWidthDims[0]&&e<=i.lineWidthDims[1],"invalid line width, must be a positive number between "+i.lineWidthDims[0]+" and "+i.lineWidthDims[1],t.commandStr),e},function(e,t,n){return O.optional(function(){e.assert(t,"typeof "+n+'==="number"&&'+n+">="+i.lineWidthDims[0]+"&&"+n+"<="+i.lineWidthDims[1],"invalid line width")}),n});case Er:return s(function(e){return O.commandParameter(e,Zi,a,t.commandStr),Zi[e]},function(e,t,n){return O.optional(function(){e.assert(t,n+'==="cw"||'+n+'==="ccw"',"invalid frontFace, must be one of cw,ccw")}),t.def(n+'==="cw"?'+Ri+":"+Ii)});case _r:return s(function(e){return O.command(Fe(e)&&4===e.length,"color.mask must be length 4 array",t.commandStr),e.map(function(e){return!!e})},function(e,t,n){return O.optional(function(){e.assert(t,e.shared.isArrayLike+"("+n+")&&"+n+".length===4","invalid color.mask")}),W(4,function(e){return"!!"+n+"["+e+"]"})});case Vr:return s(function(e){O.command("object"==typeof e&&e,a,t.commandStr);var n="value"in e?e.value:1,r=!!e.invert;return O.command("number"==typeof n&&n>=0&&n<=1,"sample.coverage.value must be a number between 0 and 1",t.commandStr),[n,r]},function(e,t,n){return O.optional(function(){e.assert(t,n+"&&typeof "+n+'==="object"',"invalid sample.coverage")}),[t.def('"value" in ',n,"?+",n,".value:1"),t.def("!!",n,".invert")]})}}),o}(e,d),C=function(e,t,r){var i=e.static,o=e.dynamic;function a(e){if(e in i){var t=n.id(i[e]);O.optional(function(){p.shader(Ji[e],t,O.guessCommand())});var r=io(function(){return t});return r.id=t,r}if(e in o){var a=o[e];return oo(a,function(t,n){var r=t.invoke(n,a),i=n.def(t.shared.strings,".id(",r,")");return O.optional(function(){n(t.shared.shader,".shader(",Ji[e],",",i,",",t.command,");")}),i})}return null}var s,l=a(qr),u=a(Nr),c=null;return ro(l)&&ro(u)?(c=p.program(u.id,l.id,null,r),s=io(function(e,t){return e.link(c)})):s=new no(l&&l.thisDep||u&&u.thisDep,l&&l.contextDep||u&&u.contextDep,l&&l.propDep||u&&u.propDep,function(e,t){var n,r=e.shared.shader;n=l?l.append(e,t):t.def(r,".",qr);var i=r+".program("+(u?u.append(e,t):t.def(r,".",Nr))+","+n;return O.optional(function(){i+=","+e.command}),t.def(i+")")}),{frag:l,vert:u,progVar:s,program:c}}(e,0,m);function A(e){var t=w[e];t&&(k[e]=t)}A(Fr),A(E(Br));var P=Object.keys(k).length>0,M={framebuffer:y,draw:x,shader:C,state:k,dirty:P,scopeVAO:null,drawVAO:null,useVAO:!1,attributes:{}};if(M.profile=function(e){var t,n=e.static,r=e.dynamic;if(zr in n){var i=!!n[zr];(t=io(function(e,t){return i})).enable=i}else if(zr in r){var o=r[zr];t=oo(o,function(e,t){return e.invoke(t,o)})}return t}(e),M.uniforms=function(e,t){var n=e.static,r=e.dynamic,i={};return Object.keys(n).forEach(function(e){var r,o=n[e];if("number"==typeof o||"boolean"==typeof o)r=io(function(){return o});else if("function"==typeof o){var a=o._reglType;"texture2d"===a||"textureCube"===a?r=io(function(e){return e.link(o)}):"framebuffer"===a||"framebufferCube"===a?(O.command(o.color.length>0,'missing color attachment for framebuffer sent to uniform "'+e+'"',t.commandStr),r=io(function(e){return e.link(o.color[0])})):O.commandRaise('invalid data for uniform "'+e+'"',t.commandStr)}else Fe(o)?r=io(function(t){return t.global.def("[",W(o.length,function(n){return O.command("number"==typeof o[n]||"boolean"==typeof o[n],"invalid uniform "+e,t.commandStr),o[n]}),"]")}):O.commandRaise('invalid or missing data for uniform "'+e+'"',t.commandStr);r.value=o,i[e]=r}),Object.keys(r).forEach(function(e){var t=r[e];i[e]=oo(t,function(e,n){return e.invoke(n,t)})}),i}(s,d),M.drawVAO=M.scopeVAO=function(e,t){var n=e.static,r=e.dynamic;if(Yr in n){var i=n[Yr];return null!==i&&null===c.getVAO(i)&&(i=c.createVAO(i)),io(function(e){return e.link(c.getVAO(i))})}if(Yr in r){var o=r[Yr];return oo(o,function(e,t){var n=e.invoke(t,o);return t.def(e.shared.vao+".getVAO("+n+")")})}return null}(e),!M.drawVAO&&C.program&&!m&&r.angle_instanced_arrays){var S=!0,T=C.program.attributes.map(function(e){var n=t.static[e];return S=S&&!!n,n});if(S&&T.length>0){var V=c.getVAO(c.createVAO(T));M.drawVAO=new no(null,null,null,function(e,t){return e.link(V)}),M.useVAO=!0}}return m?M.useVAO=!0:M.attributes=function(e,t){var r=e.static,i=e.dynamic,a={};return Object.keys(r).forEach(function(e){var i=r[e],s=n.id(e),l=new v;if(eo(i))l.state=ir,l.buffer=o.getBuffer(o.create(i,ri,!1,!0)),l.type=0;else{var u=o.getBuffer(i);if(u)l.state=ir,l.buffer=u,l.type=0;else if(O.command("object"==typeof i&&i,"invalid data for attribute "+e,t.commandStr),"constant"in i){var c=i.constant;l.buffer="null",l.state=or,"number"==typeof c?l.x=c:(O.command(Fe(c)&&c.length>0&&c.length<=4,"invalid constant for attribute "+e,t.commandStr),nr.forEach(function(e,t){t=0,'invalid offset for attribute "'+e+'"',t.commandStr);var d=0|i.stride;O.command(d>=0&&d<256,'invalid stride for attribute "'+e+'", must be integer betweeen [0, 255]',t.commandStr);var h=0|i.size;O.command(!("size"in i)||h>0&&h<=4,'invalid size for attribute "'+e+'", must be 1,2,3,4',t.commandStr);var f=!!i.normalized,m=0;"type"in i&&(O.commandParameter(i.type,ce,"invalid type for attribute "+e,t.commandStr),m=ce[i.type]);var b=0|i.divisor;"divisor"in i&&(O.command(0===b||g,'cannot specify divisor for attribute "'+e+'", instancing not supported',t.commandStr),O.command(b>=0,'invalid divisor for attribute "'+e+'"',t.commandStr)),O.optional(function(){var n=t.commandStr,r=["buffer","offset","divisor","normalized","type","size","stride"];Object.keys(i).forEach(function(t){O.command(r.indexOf(t)>=0,'unknown parameter "'+t+'" for attribute pointer "'+e+'" (valid parameters are '+r+")",n)})}),l.buffer=u,l.state=ir,l.size=h,l.normalized=f,l.type=m||u.dtype,l.offset=p,l.stride=d,l.divisor=b}}a[e]=io(function(e,t){var n=e.attribCache;if(s in n)return n[s];var r={isStream:!1};return Object.keys(l).forEach(function(e){r[e]=l[e]}),l.buffer&&(r.buffer=e.link(l.buffer),r.type=r.type||r.buffer+".dtype"),n[s]=r,r})}),Object.keys(i).forEach(function(e){var t=i[e];a[e]=oo(t,function(n,r){var i=n.invoke(r,t),o=n.shared,a=n.constants,s=o.isBufferArgs,l=o.buffer;O.optional(function(){n.assert(r,i+"&&(typeof "+i+'==="object"||typeof '+i+'==="function")&&('+s+"("+i+")||"+l+".getBuffer("+i+")||"+l+".getBuffer("+i+".buffer)||"+s+"("+i+'.buffer)||("constant" in '+i+"&&(typeof "+i+'.constant==="number"||'+o.isArrayLike+"("+i+".constant))))",'invalid dynamic attribute "'+e+'"')});var u={isStream:r.def(!1)},c=new v;c.state=ir,Object.keys(c).forEach(function(e){u[e]=r.def(""+c[e])});var p=u.buffer,d=u.type;function h(e){r(u[e],"=",i,".",e,"|0;")}return r("if(",s,"(",i,")){",u.isStream,"=true;",p,"=",l,".createStream(",ri,",",i,");",d,"=",p,".dtype;","}else{",p,"=",l,".getBuffer(",i,");","if(",p,"){",d,"=",p,".dtype;",'}else if("constant" in ',i,"){",u.state,"=",or,";","if(typeof "+i+'.constant === "number"){',u[nr[0]],"=",i,".constant;",nr.slice(1).map(function(e){return u[e]}).join("="),"=0;","}else{",nr.map(function(e,t){return u[e]+"="+i+".constant.length>"+t+"?"+i+".constant["+t+"]:0;"}).join(""),"}}else{","if(",s,"(",i,".buffer)){",p,"=",l,".createStream(",ri,",",i,".buffer);","}else{",p,"=",l,".getBuffer(",i,".buffer);","}",d,'="type" in ',i,"?",a.glTypes,"[",i,".type]:",p,".dtype;",u.normalized,"=!!",i,".normalized;"),h("size"),h("offset"),h("stride"),h("divisor"),r("}}"),r.exit("if(",u.isStream,"){",l,".destroyStream(",p,");","}"),u})}),a}(t,d),M.context=function(e){var t=e.static,n=e.dynamic,r={};return Object.keys(t).forEach(function(e){var n=t[e];r[e]=io(function(e,t){return"number"==typeof n||"boolean"==typeof n?""+n:e.link(n)})}),Object.keys(n).forEach(function(e){var t=n[e];r[e]=oo(t,function(e,n){return e.invoke(n,t)})}),r}(u),M}function D(e,t,n){var r=e.shared.context,i=e.scope();Object.keys(n).forEach(function(o){t.save(r,"."+o);var a=n[o].append(e,t);Array.isArray(a)?i(r,".",o,"=[",a.join(),"];"):i(r,".",o,"=",a,";")}),t(i)}function L(e,t,n,r){var i,o=e.shared,a=o.gl,s=o.framebuffer;y&&(i=t.def(o.extensions,".webgl_draw_buffers"));var l,u=e.constants,c=u.drawBuffer,p=u.backBuffer;l=n?n.append(e,t):t.def(s,".next"),r||t("if(",l,"!==",s,".cur){"),t("if(",l,"){",a,".bindFramebuffer(",Gi,",",l,".framebuffer);"),y&&t(i,".drawBuffersWEBGL(",c,"[",l,".colorAttachments.length]);"),t("}else{",a,".bindFramebuffer(",Gi,",null);"),y&&t(i,".drawBuffersWEBGL(",p,");"),t("}",s,".cur=",l,";"),r||t("}")}function R(e,t,n){var r=e.shared,i=r.gl,o=e.current,a=e.next,s=r.current,l=r.next,u=e.cond(s,".dirty");_.forEach(function(t){var r,c,p=E(t);if(!(p in n.state))if(p in a){r=a[p],c=o[p];var d=W(w[p].length,function(e){return u.def(r,"[",e,"]")});u(e.cond(d.map(function(e,t){return e+"!=="+c+"["+t+"]"}).join("||")).then(i,".",C[p],"(",d,");",d.map(function(e,t){return c+"["+t+"]="+e}).join(";"),";"))}else{r=u.def(l,".",p);var h=e.cond(r,"!==",s,".",p);u(h),p in k?h(e.cond(r).then(i,".enable(",k[p],");").else(i,".disable(",k[p],");"),s,".",p,"=",r,";"):h(i,".",C[p],"(",r,");",s,".",p,"=",r,";")}}),0===Object.keys(n.state).length&&u(s,".dirty=false;"),t(u)}function I(e,t,n,r){var i=e.shared,o=e.current,a=i.current,s=i.gl;to(Object.keys(n)).forEach(function(i){var l=n[i];if(!r||r(l)){var u=l.append(e,t);if(k[i]){var c=k[i];ro(l)?t(s,u?".enable(":".disable(",c,");"):t(e.cond(u).then(s,".enable(",c,");").else(s,".disable(",c,");")),t(a,".",i,"=",u,";")}else if(Fe(u)){var p=o[i];t(s,".",C[i],"(",u,");",u.map(function(e,t){return p+"["+t+"]="+e}).join(";"),";")}else t(s,".",C[i],"(",u,");",a,".",i,"=",u,";")}})}function B(e,t){g&&(e.instancing=t.def(e.shared.extensions,".angle_instanced_arrays"))}function F(e,t,n,r,i){var o,a,s,l=e.shared,u=e.stats,c=l.current,p=l.timer,d=n.profile;function h(){return"undefined"==typeof performance?"Date.now()":"performance.now()"}function m(e){e(o=t.def(),"=",h(),";"),"string"==typeof i?e(u,".count+=",i,";"):e(u,".count++;"),f&&(r?e(a=t.def(),"=",p,".getNumPendingQueries();"):e(p,".beginQuery(",u,");"))}function v(e){e(u,".cpuTime+=",h(),"-",o,";"),f&&(r?e(p,".pushScopeStats(",a,",",p,".getNumPendingQueries(),",u,");"):e(p,".endQuery();"))}function b(e){var n=t.def(c,".profile");t(c,".profile=",e,";"),t.exit(c,".profile=",n,";")}if(d){if(ro(d))return void(d.enable?(m(t),v(t.exit),b("true")):b("false"));b(s=d.append(e,t))}else s=t.def(c,".profile");var g=e.block();m(g),t("if(",s,"){",g,"}");var y=e.block();v(y),t.exit("if(",s,"){",y,"}")}function z(e,t,n,r,i){var o=e.shared;r.forEach(function(r){var a,s=r.name,l=n.attributes[s];if(l){if(!i(l))return;a=l.append(e,t)}else{if(!i(ao))return;var u=e.scopeAttrib(s);O.optional(function(){e.assert(t,u+".state","missing attribute "+s)}),a={},Object.keys(new v).forEach(function(e){a[e]=t.def(u,".",e)})}!function(n,r,i){var a=o.gl,s=t.def(n,".location"),l=t.def(o.attributes,"[",s,"]"),u=i.state,c=i.buffer,p=[i.x,i.y,i.z,i.w],d=["buffer","normalized","offset","stride"];function h(){t("if(!",l,".buffer){",a,".enableVertexAttribArray(",s,");}");var n,o=i.type;if(n=i.size?t.def(i.size,"||",r):r,t("if(",l,".type!==",o,"||",l,".size!==",n,"||",d.map(function(e){return l+"."+e+"!=="+i[e]}).join("||"),"){",a,".bindBuffer(",ri,",",c,".buffer);",a,".vertexAttribPointer(",[s,n,o,i.normalized,i.stride,i.offset],");",l,".type=",o,";",l,".size=",n,";",d.map(function(e){return l+"."+e+"="+i[e]+";"}).join(""),"}"),g){var u=i.divisor;t("if(",l,".divisor!==",u,"){",e.instancing,".vertexAttribDivisorANGLE(",[s,u],");",l,".divisor=",u,";}")}}function f(){t("if(",l,".buffer){",a,".disableVertexAttribArray(",s,");",l,".buffer=null;","}if(",nr.map(function(e,t){return l+"."+e+"!=="+p[t]}).join("||"),"){",a,".vertexAttrib4f(",s,",",p,");",nr.map(function(e,t){return l+"."+e+"="+p[t]+";"}).join(""),"}")}u===ir?h():u===or?f():(t("if(",u,"===",ir,"){"),h(),t("}else{"),f(),t("}"))}(e.link(r),function(e){switch(e){case bi:case xi:case Ei:return 2;case gi:case _i:case Ai:return 3;case yi:case ki:case Pi:return 4;default:return 1}}(r.info.type),a)})}function N(e,t,r,i,o){for(var a,s=e.shared,l=s.gl,u=0;u1?t(W(w,function(e){return Array.isArray(c)?c[e]:c+"["+e+"]"})):(O(!Array.isArray(c),"uniform value must not be an array"),t(c));t(");")}}function q(e,t,n,r){var i=e.shared,o=i.gl,a=i.draw,s=r.draw;var l=function(){var i,l=s.elements,u=t;return l?((l.contextDep&&r.contextDynamic||l.propDep)&&(u=n),i=l.append(e,u)):i=u.def(a,".",Hr),i&&u("if("+i+")"+o+".bindBuffer("+ii+","+i+".buffer.buffer);"),i}();function u(i){var o=s[i];return o?o.append(e,o.contextDep&&r.contextDynamic||o.propDep?n:t):t.def(a,".",i)}var c,p,d=u(Kr),h=u(Wr),f=function(){var i,o=s.count,l=t;return o?((o.contextDep&&r.contextDynamic||o.propDep)&&(l=n),i=o.append(e,l),O.optional(function(){o.MISSING&&e.assert(t,"false","missing vertex count"),o.DYNAMIC&&e.assert(l,i+">=0","missing vertex count")})):(i=l.def(a,".",Gr),O.optional(function(){e.assert(l,i+">=0","missing vertex count")})),i}();if("number"==typeof f){if(0===f)return}else n("if(",f,"){"),n.exit("}");g&&(c=u($r),p=e.instancing);var m=l+".type",v=s.elements&&ro(s.elements);function b(){function e(){n(p,".drawElementsInstancedANGLE(",[d,f,m,h+"<<(("+m+"-"+rr+")>>1)",c],");")}function t(){n(p,".drawArraysInstancedANGLE(",[d,h,f,c],");")}l?v?e():(n("if(",l,"){"),e(),n("}else{"),t(),n("}")):t()}function y(){function e(){n(o+".drawElements("+[d,f,m,h+"<<(("+m+"-"+rr+")>>1)"]+");")}function t(){n(o+".drawArrays("+[d,h,f]+");")}l?v?e():(n("if(",l,"){"),e(),n("}else{"),t(),n("}")):t()}g&&("number"!=typeof c||c>=0)?"string"==typeof c?(n("if(",c,">0){"),b(),n("}else if(",c,"<0){"),y(),n("}")):b():y()}function H(e,t,n,r,i){var o=V(),a=o.proc("body",i);return O.optional(function(){o.commandStr=t.commandStr,o.command=o.link(t.commandStr)}),g&&(o.instancing=a.def(o.shared.extensions,".angle_instanced_arrays")),e(o,a,n,r),o.compile().body}function K(e,t,n,r){B(e,t),n.useVAO?n.drawVAO?t(e.shared.vao,".setVAO(",n.drawVAO.append(e,t),");"):t(e.shared.vao,".setVAO(",e.shared.vao,".targetVAO);"):(t(e.shared.vao,".setVAO(null);"),z(e,t,n,r.attributes,function(){return!0})),N(e,t,n,r.uniforms,function(){return!0}),q(e,t,t,n)}function G(e,t,n,r){function i(){return!0}e.batchId="a1",B(e,t),z(e,t,n,r.attributes,i),N(e,t,n,r.uniforms,i),q(e,t,t,n)}function $(e,t,n,r){B(e,t);var i=n.contextDep,o=t.def(),a=t.def();e.shared.props=a,e.batchId=o;var s=e.scope(),l=e.scope();function u(e){return e.contextDep&&i||e.propDep}function c(e){return!u(e)}if(t(s.entry,"for(",o,"=0;",o,"<","a1",";++",o,"){",a,"=","a0","[",o,"];",l,"}",s.exit),n.needsContext&&D(e,l,n.context),n.needsFramebuffer&&L(e,l,n.framebuffer),I(e,l,n.state,u),n.profile&&u(n.profile)&&F(e,l,n,!1,!0),r)n.useVAO?n.drawVAO?u(n.drawVAO)?l(e.shared.vao,".setVAO(",n.drawVAO.append(e,l),");"):s(e.shared.vao,".setVAO(",n.drawVAO.append(e,s),");"):s(e.shared.vao,".setVAO(",e.shared.vao,".targetVAO);"):(s(e.shared.vao,".setVAO(null);"),z(e,s,n,r.attributes,c),z(e,l,n,r.attributes,u)),N(e,s,n,r.uniforms,c),N(e,l,n,r.uniforms,u),q(e,s,l,n);else{var p=e.global.def("{}"),d=n.shader.progVar.append(e,l),h=l.def(d,".id"),f=l.def(p,"[",h,"]");l(e.shared.gl,".useProgram(",d,".program);","if(!",f,"){",f,"=",p,"[",h,"]=",e.link(function(t){return H(G,e,n,t,2)}),"(",d,");}",f,".call(this,a0[",o,"],",o,");")}}function Y(e,t,n){var r=t.static[n];if(r&&function(e){if("object"==typeof e&&!Fe(e)){for(var t=Object.keys(e),n=0;n0&&n(e.shared.current,".dirty=true;")}(s,l),function(e,t){var r=e.proc("scope",3);e.batchId="a2";var i=e.shared,o=i.current;function a(n){var o=t.shader[n];o&&r.set(i.shader,"."+n,o.append(e,r))}D(e,r,t.context),t.framebuffer&&t.framebuffer.append(e,r),to(Object.keys(t.state)).forEach(function(n){var o=t.state[n].append(e,r);Fe(o)?o.forEach(function(t,i){r.set(e.next[n],"["+i+"]",t)}):r.set(i.next,"."+n,o)}),F(e,r,t,!0,!0),[Hr,Wr,Gr,$r,Kr].forEach(function(n){var o=t.draw[n];o&&r.set(i.draw,"."+n,""+o.append(e,r))}),Object.keys(t.uniforms).forEach(function(o){var a=t.uniforms[o].append(e,r);Array.isArray(a)&&(a="["+a.join()+"]"),r.set(i.uniforms,"["+n.id(o)+"]",a)}),Object.keys(t.attributes).forEach(function(n){var i=t.attributes[n].append(e,r),o=e.scopeAttrib(n);Object.keys(new v).forEach(function(e){r.set(o,"."+e,i[e])})}),t.scopeVAO&&r.set(i.vao,".targetVAO",t.scopeVAO.append(e,r)),a(Nr),a(qr),Object.keys(t.state).length>0&&(r(o,".dirty=true;"),r.exit(o,".dirty=true;")),r("a1(",e.shared.context,",a0,",e.batchId,");")}(s,l),function(e,t){var n=e.proc("batch",2);e.batchId="0",B(e,n);var r=!1,i=!0;Object.keys(t.context).forEach(function(e){r=r||t.context[e].propDep}),r||(D(e,n,t.context),i=!1);var o=t.framebuffer,a=!1;function s(e){return e.contextDep&&r||e.propDep}o?(o.propDep?r=a=!0:o.contextDep&&r&&(a=!0),a||L(e,n,o)):L(e,n,null),t.state.viewport&&t.state.viewport.propDep&&(r=!0),R(e,n,t),I(e,n,t.state,function(e){return!s(e)}),t.profile&&s(t.profile)||F(e,n,t,!1,"a1"),t.contextDep=r,t.needsContext=i,t.needsFramebuffer=a;var l=t.shader.progVar;if(l.contextDep&&r||l.propDep)$(e,n,t,null);else{var u=l.append(e,n);if(n(e.shared.gl,".useProgram(",u,".program);"),t.shader.program)$(e,n,t,t.shader.program);else{n(e.shared.vao,".setVAO(null);");var c=e.global.def("{}"),p=n.def(u,".id"),d=n.def(c,"[",p,"]");n(e.cond(d).then(d,".call(this,a0,a1);").else(d,"=",c,"[",p,"]=",e.link(function(n){return H($,e,t,n,2)}),"(",u,");",d,".call(this,a0,a1);"))}}Object.keys(t.state).length>0&&n(e.shared.current,".dirty=true;")}(s,l),t(s.compile(),{destroy:function(){l.shader.program.destroy()}})}}}var lo=34918,uo=34919,co=35007,po=function(e,t){if(!t.ext_disjoint_timer_query)return null;var n=[];function r(e){n.push(e)}var i=[];function o(){this.startQueryIndex=-1,this.endQueryIndex=-1,this.sum=0,this.stats=null}var a=[];function s(e){a.push(e)}var l=[];function u(e,t,n){var r=a.pop()||new o;r.startQueryIndex=e,r.endQueryIndex=t,r.sum=0,r.stats=n,l.push(r)}var c=[],p=[];return{beginQuery:function(e){var r=n.pop()||t.ext_disjoint_timer_query.createQueryEXT();t.ext_disjoint_timer_query.beginQueryEXT(co,r),i.push(r),u(i.length-1,i.length,e)},endQuery:function(){t.ext_disjoint_timer_query.endQueryEXT(co)},pushScopeStats:u,update:function(){var e,n,o=i.length;if(0!==o){p.length=Math.max(p.length,o+1),c.length=Math.max(c.length,o+1),c[0]=0,p[0]=0;var a=0;for(e=0,n=0;n0)if(Array.isArray(n[0])){s=he(n);for(var c=1,p=1;p0)if("number"==typeof t[0]){var o=re.allocType(d.dtype,t.length);we(o,t),f(o,i),re.freeType(o)}else if(Array.isArray(t[0])||e(t[0])){r=he(t);var a=de(t,r,d.dtype);f(a,i),re.freeType(a)}else O.raise("invalid buffer data")}else if(oe(t)){var s=t.stride,l=0,u=0,c=0,p=0;1===(r=t.shape).length?(l=r[0],u=1,c=s[0],p=0):2===r.length?(l=r[0],u=r[1],c=s[0],p=s[1]):O.raise("invalid shape");var m=Array.isArray(t.data)?d.dtype:ye(t.data),v=re.allocType(m,l*u);xe(v,t.data,l,u,c,p,t.offset),f(v,i),re.freeType(v)}else O.raise("invalid data for buffer subdata");return h},r.profile&&(h.stats=d.stats),h.destroy=function(){p(d)},h},createStream:function(e,t){var n=l.pop();return n||(n=new s(e)),n.bind(),c(n,t,me,0,1,!1),n},destroyStream:function(e){l.push(e)},clear:function(){ae(a).forEach(p),l.forEach(p)},getBuffer:function(e){return e&&e._buffer instanceof s?e._buffer:null},restore:function(){ae(a).forEach(function(e){e.buffer=t.createBuffer(),t.bindBuffer(e.type,e.buffer),t.bufferData(e.type,e.persistentData||e.byteLength,e.usage)})},_initBuffer:c}}(i,p,r,function(e){return w.destroyBuffer(e)}),w=function(t,n,r,i,o){for(var a=r.maxAttributes,s=new Array(a),l=0;l0,"must specify at least one attribute");var i={},l=r.attributes;l.length=t.length;for(var u=0;u=h.byteLength?c.subdata(h):(c.destroy(),r.buffers[u]=null)),r.buffers[u]||(c=r.buffers[u]=o.create(p,qn,!1,!0)),d.buffer=o.getBuffer(c),d.size=0|d.buffer.dimension,d.normalized=!1,d.type=d.buffer.dtype,d.offset=0,d.stride=0,d.divisor=0,d.state=1,i[u]=1):o.getBuffer(p)?(d.buffer=o.getBuffer(p),d.size=0|d.buffer.dimension,d.normalized=!1,d.type=d.buffer.dtype,d.offset=0,d.stride=0,d.divisor=0,d.state=1):o.getBuffer(p.buffer)?(d.buffer=o.getBuffer(p.buffer),d.size=0|(+p.size||d.buffer.dimension),d.normalized=!!p.normalized||!1,"type"in p?(O.parameter(p.type,ce,"invalid buffer type"),d.type=ce[p.type]):d.type=d.buffer.dtype,d.offset=0|(p.offset||0),d.stride=0|(p.stride||0),d.divisor=0|(p.divisor||0),d.state=1,O(d.size>=1&&d.size<=4,"size must be between 1 and 4"),O(d.offset>=0,"invalid offset"),O(d.stride>=0&&d.stride<=255,"stride must be between 0 and 255"),O(d.divisor>=0,"divisor must be positive"),O(!d.divisor||!!n.angle_instanced_arrays,"ANGLE_instanced_arrays must be enabled to use divisor")):"x"in p?(O(u>0,"first attribute must not be a constant"),d.x=+p.x||0,d.y=+p.y||0,d.z=+p.z||0,d.w=+p.w||0,d.state=2):O(!1,"invalid attribute spec for location "+u)}for(var f=0;f>=1:p===Ve&&(h>>=2)),i.vertCount=h;var f=s;if(s<0){f=Ee;var m=i.buffer.dimension;1===m&&(f=ke),2===m&&(f=Ce),3===m&&(f=Ee)}i.primType=f}function p(e){i.elementsCount--,O(null!==e.buffer,"must not double destroy elements"),delete o[e.id],e.buffer.destroy(),e.buffer=null}return{create:function(t,n){var o=r.create(null,je,!0),a=new l(o._buffer);function u(t){if(t)if("number"==typeof t)o(t),a.primType=Ee,a.vertCount=0|t,a.type=Pe;else{var n=null,r=De,i=-1,l=-1,p=0,d=0;Array.isArray(t)||e(t)||oe(t)?n=t:(O.type(t,"object","invalid arguments for elements"),"data"in t&&(n=t.data,O(Array.isArray(n)||e(n)||oe(n),"invalid data for element buffer")),"usage"in t&&(O.parameter(t.usage,pe,"invalid element buffer usage"),r=pe[t.usage]),"primitive"in t&&(O.parameter(t.primitive,_e,"invalid element buffer primitive"),i=_e[t.primitive]),"count"in t&&(O("number"==typeof t.count&&t.count>=0,"invalid vertex count for elements"),l=0|t.count),"type"in t&&(O.parameter(t.type,s,"invalid buffer type"),d=s[t.type]),"length"in t?p=0|t.length:(p=l,d===Se||d===Me?p*=2:d!==Ve&&d!==Te||(p*=4))),c(a,n,r,i,l,p,d)}else o(),a.primType=Ee,a.vertCount=0,a.type=Pe;return u}return i.elementsCount++,u(t),u._reglType="elements",u._elements=a,u.subdata=function(e,t){return o.subdata(e,t),u},u.destroy=function(){p(a)},u},createStream:function(e){var t=u.pop();return t||(t=new l(r.create(null,je,!0,!1)._buffer)),c(t,e,Oe,-1,-1,0,0),t},destroyStream:function(e){u.push(e)},getElements:function(e){return"function"==typeof e&&e._elements instanceof l?e._elements:null},clear:function(){ae(o).forEach(p)}}}(i,d,y,p),_=function(e,n,r,i){var o={},a={};function s(e,t,n,r){this.name=e,this.id=t,this.location=n,this.info=r}function l(e,t){for(var n=0;n1)for(var b=0;be&&(e=t.stats.uniformsCount)}),e},r.getMaxAttributesCount=function(){var e=0;return p.forEach(function(t){t.stats.attributesCount>e&&(e=t.stats.attributesCount)}),e}),{clear:function(){var t=e.deleteShader.bind(e);ae(o).forEach(t),o={},ae(a).forEach(t),a={},p.forEach(function(t){e.deleteProgram(t.program)}),p.length=0,c={},r.shaderCount=0},program:function(n,i,s,l){O.command(n>=0,"missing vertex shader",s),O.command(i>=0,"missing fragment shader",s);var u=c[i];u||(u=c[i]={});var d=u[n];if(d&&(d.refCount++,!l))return d;var m=new h(i,n);return r.shaderCount++,f(m,s,l),d||(u[n]=m),p.push(m),t(m,{destroy:function(){if(m.refCount--,m.refCount<=0){e.deleteProgram(m.program);var t=p.indexOf(m);p.splice(t,1),r.shaderCount--}u[m.vertId].refCount<=0&&(e.deleteShader(a[m.vertId]),delete a[m.vertId],delete c[m.fragId][m.vertId]),Object.keys(c[m.fragId]).length||(e.deleteShader(o[m.fragId]),delete o[m.fragId],delete c[m.fragId])}})},restore:function(){o={},a={};for(var e=0;e=Pn&&t=2,"invalid shape for framebuffer"),a=V[0],d=V[1]}else"radius"in T&&(a=d=T.radius),"width"in T&&(a=T.width),"height"in T&&(d=T.height);("color"in T||"colors"in T)&&(y=T.color||T.colors,Array.isArray(y)&&O(1===y.length||n.webgl_draw_buffers,"multiple render targets not supported")),y||("colorCount"in T&&O((E=0|T.colorCount)>0,"invalid color buffer count"),"colorTexture"in T&&(w=!!T.colorTexture,x="rgba4"),"colorType"in T&&(k=T.colorType,w?(O(n.oes_texture_float||!("float"===k||"float32"===k),"you must enable OES_texture_float in order to use floating point framebuffer objects"),O(n.oes_texture_half_float||!("half float"===k||"float16"===k),"you must enable OES_texture_half_float in order to use 16-bit floating point framebuffer objects")):"half float"===k||"float16"===k?(O(n.ext_color_buffer_half_float,"you must enable EXT_color_buffer_half_float to use 16-bit render buffers"),x="rgba16f"):"float"!==k&&"float32"!==k||(O(n.webgl_color_buffer_float,"you must enable WEBGL_color_buffer_float in order to use 32-bit floating point renderbuffers"),x="rgba32f"),O.oneOf(k,c,"invalid color type")),"colorFormat"in T&&(l.indexOf(x=T.colorFormat)>=0?w=!0:u.indexOf(x)>=0?w=!1:w?O.oneOf(T.colorFormat,l,"invalid color format for texture"):O.oneOf(T.colorFormat,u,"invalid color format for renderbuffer"))),("depthTexture"in T||"depthStencilTexture"in T)&&O(!(S=!(!T.depthTexture&&!T.depthStencilTexture))||n.webgl_depth_texture,"webgl_depth_texture extension not supported"),"depth"in T&&("boolean"==typeof T.depth?f=T.depth:(A=T.depth,g=!1)),"stencil"in T&&("boolean"==typeof T.stencil?g=T.stencil:(P=T.stencil,f=!1)),"depthStencil"in T&&("boolean"==typeof T.depthStencil?f=g=T.depthStencil:(M=T.depthStencil,f=!1,g=!1))}else a=d=1;var j=null,D=null,L=null,R=null;if(Array.isArray(y))j=y.map(m);else if(y)j=[m(y)];else for(j=new Array(E),i=0;i=0||j[i].renderbuffer&&zn.indexOf(j[i].renderbuffer._renderbuffer.format)>=0,"framebuffer color attachment "+i+" is invalid"),j[i]&&j[i].texture){var B=Ln[j[i].texture._texture.format]*Rn[j[i].texture._texture.type];null===I?I=B:O(I===B,"all color attachments much have the same number of bits per pixel.")}return h(D,a,d),O(!D||D.texture&&D.texture._texture.format===On||D.renderbuffer&&D.renderbuffer._renderbuffer.format===In,"invalid depth attachment for framebuffer object"),h(L,a,d),O(!L||L.renderbuffer&&L.renderbuffer._renderbuffer.format===Bn,"invalid stencil attachment for framebuffer object"),h(R,a,d),O(!R||R.texture&&R.texture._texture.format===Fn||R.renderbuffer&&R.renderbuffer._renderbuffer.format===Fn,"invalid depth-stencil attachment for framebuffer object"),_(o),o.width=a,o.height=d,o.colorAttachments=j,o.depthAttachment=D,o.stencilAttachment=L,o.depthStencilAttachment=R,p.color=j.map(b),p.depth=b(D),p.stencil=b(L),p.depthStencil=b(R),p.width=o.width,p.height=o.height,C(o),p}return a.framebufferCount++,p(e,i),t(p,{resize:function(e,t){O(s.next!==o,"can not resize a framebuffer which is currently in use");var n=Math.max(0|e,1),r=Math.max(0|t||n,1);if(n===o.width&&r===o.height)return p;for(var i=o.colorAttachments,a=0;a=2,"invalid shape for framebuffer"),O(g[0]===g[1],"cube framebuffer must be square"),d=g[0]}else"radius"in b&&(d=0|b.radius),"width"in b?(d=0|b.width,"height"in b&&O(b.height===d,"must be square")):"height"in b&&(d=0|b.height);("color"in b||"colors"in b)&&(h=b.color||b.colors,Array.isArray(h)&&O(1===h.length||n.webgl_draw_buffers,"multiple render targets not supported")),h||("colorCount"in b&&O((v=0|b.colorCount)>0,"invalid color buffer count"),"colorType"in b&&(O.oneOf(b.colorType,c,"invalid color type"),m=b.colorType),"colorFormat"in b&&(f=b.colorFormat,O.oneOf(b.colorFormat,l,"invalid color format for texture"))),"depth"in b&&(p.depth=b.depth),"stencil"in b&&(p.stencil=b.stencil),"depthStencil"in b&&(p.depthStencil=b.depthStencil)}else d=1;if(h)if(Array.isArray(h))for(u=[],r=0;r0&&(p.depth=o[0].depth,p.stencil=o[0].stencil,p.depthStencil=o[0].depthStencil),o[r]?o[r](p):o[r]=E(p)}return t(a,{width:d,height:d,color:u})}return a(e),t(a,{faces:o,resize:function(e){var t,n=0|e;if(O(n>0&&n<=r.maxCubeMapSize,"invalid radius for cube fbo"),n===a.width)return a;var i=a.color;for(t=0;t=0;--e){var t=T[e];t&&t(b,null,0)}i.flush(),h&&h.update()}function I(){!L&&T.length>0&&(L=N.next(R))}function B(){L&&(N.cancel(R),L=null)}function F(e){e.preventDefault(),a=!0,B(),V.forEach(function(e){e()})}function z(e){i.getError(),a=!1,s.restore(),_.restore(),y.restore(),k.restore(),C.restore(),E.restore(),w.restore(),h&&h.restore(),A.procs.refresh(),I(),j.forEach(function(e){e()})}function H(e){function n(e,t){var n={},r={};return Object.keys(e).forEach(function(i){var o=e[i];if(U.isDynamic(o))r[i]=U.unbox(o,i);else{if(t&&Array.isArray(o))for(var a=0;a0)return p.call(this,function(e){for(;h.length=0,"cannot cancel a frame twice"),T[t]=function e(){var t=_o(T,e);T[t]=T[T.length-1],T.length-=1,T.length<=0&&B()}}}}function Y(){var e=M.viewport,t=M.scissor_box;e[0]=e[1]=t[0]=t[1]=0,b.viewportWidth=b.framebufferWidth=b.drawingBufferWidth=e[2]=t[2]=i.drawingBufferWidth,b.viewportHeight=b.framebufferHeight=b.drawingBufferHeight=e[3]=t[3]=i.drawingBufferHeight}function Q(){b.tick+=1,b.time=J(),Y(),A.procs.poll()}function X(){k.refresh(),Y(),A.procs.refresh(),h&&h.update()}function J(){return(q()-f)/1e3}X();var Z=t(H,{clear:function(e){if(O("object"==typeof e&&e,"regl.clear() takes an object as input"),"framebuffer"in e)if(e.framebuffer&&"framebufferCube"===e.framebuffer_reglType)for(var n=0;n<6;++n)K(t({framebuffer:e.framebuffer.faces[n]},e),W);else K(e,W);else W(0,e)},prop:U.define.bind(null,yo),context:U.define.bind(null,wo),this:U.define.bind(null,xo),draw:H({}),buffer:function(e){return y.create(e,vo,!1,!1)},elements:function(e){return x.create(e,!1)},texture:k.create2D,cube:k.createCube,renderbuffer:C.create,framebuffer:E.create,framebufferCube:E.createCube,vao:w.createVAO,attributes:o,frame:$,on:function(e,t){var n;switch(O.type(t,"function","listener callback must be a function"),e){case"frame":return $(t);case"lost":n=V;break;case"restore":n=j;break;case"destroy":n=D;break;default:O.raise("invalid event, must be one of frame,lost,restore,destroy")}return n.push(t),{cancel:function(){for(var e=0;e=0},read:P,destroy:function(){T.length=0,B(),S&&(S.removeEventListener(bo,F),S.removeEventListener(go,z)),_.clear(),E.clear(),C.clear(),k.clear(),x.clear(),y.clear(),w.clear(),h&&h.clear(),D.forEach(function(e){e()})},_gl:i,_refresh:X,poll:function(){Q(),h&&h.update()},now:J,stats:p});return r.onDone(null,Z),Z}},"object"==typeof n&&void 0!==t?t.exports=i():"function"==typeof define&&define.amd?define(i):r.createREGL=i()},{}],48:[function(e,t,n){(function(e){(function(){"use strict";var n=256,r=[],i=void 0===e?window:e,o=Math.pow(n,6),a=Math.pow(2,52),s=2*a,l=n-1,u=Math.random;function c(e){var t,r=e.length,i=this,o=0,a=i.i=i.j=0,s=i.S=[];for(r||(e=[r++]);o=s;)e/=2,t/=2,r>>>=1;return(e+r)/t}},t.exports.resetGlobal=function(){Math.random=u},p(Math.random(),r)}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],49:[function(e,t,n){!function(){"use strict";var e=.5*(Math.sqrt(3)-1),r=(3-Math.sqrt(3))/6,i=1/6,o=(Math.sqrt(5)-1)/4,a=(5-Math.sqrt(5))/20;function s(e){var t;t="function"==typeof e?e:e?function(){var e=0,t=0,n=0,r=1,i=(o=4022871197,function(e){e=e.toString();for(var t=0;t>>0,o=(n*=o)>>>0,o+=4294967296*(n-=o)}return 2.3283064365386963e-10*(o>>>0)});var o;e=i(" "),t=i(" "),n=i(" ");for(var a=0;ab?(i=1,o=0):(i=0,o=1);var g=v-i+r,y=b-o+r,w=v-1+2*r,x=b-1+2*r,_=255&h,k=255&f,C=.5-v*v-b*b;if(C>=0){var E=3*a[_+s[k]];u=(C*=C)*C*(l[E]*v+l[E+1]*b)}var A=.5-g*g-y*y;if(A>=0){var P=3*a[_+i+s[k+o]];c=(A*=A)*A*(l[P]*g+l[P+1]*y)}var M=.5-w*w-x*x;if(M>=0){var S=3*a[_+1+s[k+1]];p=(M*=M)*M*(l[S]*w+l[S+1]*x)}return 70*(u+c+p)},noise3D:function(e,t,n){var r,o,a,s,l,u,c,p,d,h,f=this.permMod12,m=this.perm,v=this.grad3,b=(e+t+n)*(1/3),g=Math.floor(e+b),y=Math.floor(t+b),w=Math.floor(n+b),x=(g+y+w)*i,_=e-(g-x),k=t-(y-x),C=n-(w-x);_>=k?k>=C?(l=1,u=0,c=0,p=1,d=1,h=0):_>=C?(l=1,u=0,c=0,p=1,d=0,h=1):(l=0,u=0,c=1,p=1,d=0,h=1):kj?L++:R++,V>O?L++:I++,V>D?L++:B++,j>O?R++:I++,j>D?R++:B++,O>D?I++:B++;var F=V-(p=L>=3?1:0)+a,z=j-(d=R>=3?1:0)+a,U=O-(h=I>=3?1:0)+a,N=D-(f=B>=3?1:0)+a,q=V-(m=L>=2?1:0)+2*a,H=j-(v=R>=2?1:0)+2*a,K=O-(b=I>=2?1:0)+2*a,G=D-(g=B>=2?1:0)+2*a,W=V-(y=L>=1?1:0)+3*a,$=j-(w=R>=1?1:0)+3*a,Y=O-(x=I>=1?1:0)+3*a,Q=D-(_=B>=1?1:0)+3*a,X=V-1+4*a,J=j-1+4*a,Z=O-1+4*a,ee=D-1+4*a,te=255&A,ne=255&P,re=255&M,ie=255&S,oe=.6-V*V-j*j-O*O-D*D;if(oe<0)i=0;else{var ae=k[te+k[ne+k[re+k[ie]]]]%32*4;i=(oe*=oe)*oe*(C[ae]*V+C[ae+1]*j+C[ae+2]*O+C[ae+3]*D)}var se=.6-F*F-z*z-U*U-N*N;if(se<0)s=0;else{var le=k[te+p+k[ne+d+k[re+h+k[ie+f]]]]%32*4;s=(se*=se)*se*(C[le]*F+C[le+1]*z+C[le+2]*U+C[le+3]*N)}var ue=.6-q*q-H*H-K*K-G*G;if(ue<0)l=0;else{var ce=k[te+m+k[ne+v+k[re+b+k[ie+g]]]]%32*4;l=(ue*=ue)*ue*(C[ce]*q+C[ce+1]*H+C[ce+2]*K+C[ce+3]*G)}var pe=.6-W*W-$*$-Y*Y-Q*Q;if(pe<0)u=0;else{var de=k[te+y+k[ne+w+k[re+x+k[ie+_]]]]%32*4;u=(pe*=pe)*pe*(C[de]*W+C[de+1]*$+C[de+2]*Y+C[de+3]*Q)}var he=.6-X*X-J*J-Z*Z-ee*ee;if(he<0)c=0;else{var fe=k[te+1+k[ne+1+k[re+1+k[ie+1]]]]%32*4;c=(he*=he)*he*(C[fe]*X+C[fe+1]*J+C[fe+2]*Z+C[fe+3]*ee)}return 27*(i+s+l+u+c)}},s._buildPermutationTable=l,"undefined"!=typeof define&&define.amd&&define(function(){return s}),void 0!==n?n.SimplexNoise=s:"undefined"!=typeof window&&(window.SimplexNoise=s),void 0!==t&&(t.exports=s)}()},{}],50:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=2*Math.PI,o=function(e,t,n,r,i,o,a){var s=e.x,l=e.y;return{x:r*(s*=t)-i*(l*=n)+o,y:i*s+r*l+a}},a=function(e,t){var n=1.5707963267948966===t?.551915024494:-1.5707963267948966===t?-.551915024494:4/3*Math.tan(t/4),r=Math.cos(e),i=Math.sin(e),o=Math.cos(e+t),a=Math.sin(e+t);return[{x:r-i*n,y:i+r*n},{x:o+a*n,y:a-o*n},{x:o,y:a}]},s=function(e,t,n,r){var i=e*n+t*r;return i>1&&(i=1),i<-1&&(i=-1),(e*r-t*n<0?-1:1)*Math.acos(i)};n.default=function(e){var t=e.px,n=e.py,l=e.cx,u=e.cy,c=e.rx,p=e.ry,d=e.xAxisRotation,h=void 0===d?0:d,f=e.largeArcFlag,m=void 0===f?0:f,v=e.sweepFlag,b=void 0===v?0:v,g=[];if(0===c||0===p)return[];var y=Math.sin(h*i/360),w=Math.cos(h*i/360),x=w*(t-l)/2+y*(n-u)/2,_=-y*(t-l)/2+w*(n-u)/2;if(0===x&&0===_)return[];c=Math.abs(c),p=Math.abs(p);var k=Math.pow(x,2)/Math.pow(c,2)+Math.pow(_,2)/Math.pow(p,2);k>1&&(c*=Math.sqrt(k),p*=Math.sqrt(k));var C=function(e,t,n,r,o,a,l,u,c,p,d,h){var f=Math.pow(o,2),m=Math.pow(a,2),v=Math.pow(d,2),b=Math.pow(h,2),g=f*m-f*b-m*v;g<0&&(g=0),g/=f*b+m*v;var y=(g=Math.sqrt(g)*(l===u?-1:1))*o/a*h,w=g*-a/o*d,x=p*y-c*w+(e+n)/2,_=c*y+p*w+(t+r)/2,k=(d-y)/o,C=(h-w)/a,E=(-d-y)/o,A=(-h-w)/a,P=s(1,0,k,C),M=s(k,C,E,A);return 0===u&&M>0&&(M-=i),1===u&&M<0&&(M+=i),[x,_,P,M]}(t,n,l,u,c,p,m,b,y,w,x,_),E=r(C,4),A=E[0],P=E[1],M=E[2],S=E[3],T=Math.abs(S)/(i/4);Math.abs(1-T)<1e-7&&(T=1);var V=Math.max(Math.ceil(T),1);S/=V;for(var j=0;j0&&(n.push(p),p=[]);else{if("C"!==e[0])throw new Error("illegal type in SVG: "+e[0]);!function(e,t,n,i){r(n,s(l,i[1],i[2]),s(u,i[3],i[4]),s(c,i[5],i[6]),t,e)}(p,t,d,e),s(d,e[5],e[6])}}),p.length>0&&n.push(p),n}},{"abs-svg-path":5,"adaptive-bezier-curve":7,"normalize-svg-path":52,"vec2-copy":53}],52:[function(e,t,n){var r=Math.PI,i=u(120);function o(e,t,n,r){return["C",e,t,n,r,n,r]}function a(e,t,n,r,i,o){return["C",e/3+2/3*n,t/3+2/3*r,i/3+2/3*n,o/3+2/3*r,i,o]}function s(e,t,n,o,a,u,c,p,d,h){if(h)k=h[0],C=h[1],x=h[2],_=h[3];else{var f=l(e,t,-a);t=f.y;var m=((e=f.x)-(p=(f=l(p,d,-a)).x))/2,v=(t-(d=f.y))/2,b=m*m/(n*n)+v*v/(o*o);b>1&&(n*=b=Math.sqrt(b),o*=b);var g=n*n,y=o*o,w=(u==c?-1:1)*Math.sqrt(Math.abs((g*y-g*v*v-y*m*m)/(g*v*v+y*m*m)));Infinity==w&&(w=1);var x=w*n*v/o+(e+p)/2,_=w*-o*m/n+(t+d)/2,k=Math.asin(((t-_)/o).toFixed(9)),C=Math.asin(((d-_)/o).toFixed(9));(k=eC&&(k-=2*r),!c&&C>k&&(C-=2*r)}if(Math.abs(C-k)>i){var E=C,A=p,P=d;C=k+i*(c&&C>k?1:-1);var M=s(p=x+n*Math.cos(C),d=_+o*Math.sin(C),n,o,a,0,c,A,P,[C,E,x,_])}var S=Math.tan((C-k)/4),T=4/3*n*S,V=4/3*o*S,j=[2*e-(e+T*Math.sin(k)),2*t-(t-V*Math.cos(k)),p+T*Math.sin(C),d-V*Math.cos(C),p,d];if(h)return j;M&&(j=j.concat(M));for(var O=0;O7&&(n.push(b.splice(0,7)),b.unshift("C"));break;case"S":var y=h,w=f;"C"!=t&&"S"!=t||(y+=y-r,w+=w-i),b=["C",y,w,b[1],b[2],b[3],b[4]];break;case"T":"Q"==t||"T"==t?(p=2*h-p,d=2*f-d):(p=h,d=f),b=a(h,f,p,d,b[1],b[2]);break;case"Q":p=b[1],d=b[2],b=a(h,f,b[1],b[2],b[3],b[4]);break;case"L":b=o(h,f,b[1],b[2]);break;case"H":b=o(h,f,b[1],f);break;case"V":b=o(h,f,h,b[1]);break;case"Z":b=o(h,f,l,c)}t=g,h=b[b.length-2],f=b[b.length-1],b.length>4?(r=b[b.length-4],i=b[b.length-3]):(r=h,i=f),n.push(b)}return n}},{}],53:[function(e,t,n){t.exports=function(e,t){return e[0]=t[0],e[1]=t[1],e}},{}],54:[function(e,t,n){const r=e("canvas-sketch"),{random:i,math:o}=e("canvas-sketch-util"),a=e("tweakpane"),s=e("colormap"),{colorCodes:l}=e("../util/colorCodes"),{getRandomColour:u}=e("../util/colorCodes"),c={cols:30,rows:30,scaleMin:.01,scaleMax:21.75,freq:.002,amp:.2,animate:!0,frame:0,lineCap:"round",animateThickness:!0,manualThickness:1,shape:"circle",backgroundColour:"black",particleColour:"white"};let p=u(l);console.log("colour code:",p);(()=>{let e=document.head,t=document.createElement("style");e.appendChild(t),t.appendChild(document.createTextNode("body { background: black; }"))})(),(()=>{const e=new a.Pane;let t;(t=e.addFolder({title:"Grid"})).addInput(c,"lineCap",{options:{butt:"butt",round:"round",square:"square"}}),t.addInput(c,"cols",{min:2,max:50,step:1}),t.addInput(c,"rows",{min:2,max:50,step:1}),t.addInput(c,"scaleMin",{min:.01,max:200}),t.addInput(c,"scaleMax",{min:.01,max:200}),t.addInput(c,"animateThickness"),t.addInput(c,"manualThickness",{min:1,max:30}),t.addInput(c,"shape",{options:{line:"line",circle:"circle"}}),t.addInput(c,"backgroundColour"),t.addInput(c,"particleColour",{options:{...l}}),(t=e.addFolder({title:"Noise"})).addInput(c,"freq",{min:-.01,max:.01}),t.addInput(c,"amp",{min:0,max:1}),t.addInput(c,"animate"),t.addInput(c,"frame",{min:0,max:999})})(),r(()=>({context:e,width:t,height:n,frame:r})=>{e.fillStyle=c.backgroundColour,e.fillRect(0,0,t,n);const a=c.cols,l=c.rows,u=a*l,d=.8*t,h=.8*n,f=d/a,m=h/l,v=.5*(t-d),b=.5*(n-h);for(let t=0;tObject.keys(e)[Math.random()*Object.keys(e).length|0])},{}],56:[function(e,t,n){(function(e){(function(){e.CANVAS_SKETCH_DEFAULT_STORAGE_KEY=window.location.href}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[54,56]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy5udm0vdmVyc2lvbnMvbm9kZS92MTYuMTMuMC9saWIvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi8uLi8ubnZtL3ZlcnNpb25zL25vZGUvdjE2LjEzLjAvbGliL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLWNsaS9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIiwiLi4vLi4vLm52bS92ZXJzaW9ucy9ub2RlL3YxNi4xMy4wL2xpYi9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC1jbGkvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIi4uLy4uLy5udm0vdmVyc2lvbnMvbm9kZS92MTYuMTMuMC9saWIvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3R3ZWFrcGFuZS9kaXN0L3R3ZWFrcGFuZS5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9hYnMtc3ZnLXBhdGgvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvYWRhcHRpdmUtYmV6aWVyLWN1cnZlL2Z1bmN0aW9uLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2FkYXB0aXZlLWJlemllci1jdXJ2ZS9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9hbG1vc3QtZXF1YWwvYWxtb3N0X2VxdWFsLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2FuLWFycmF5L2luZGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2FycmF5LWFsbW9zdC1lcXVhbC9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9hcnJheS1hbG1vc3QtZXF1YWwvbm9kZV9tb2R1bGVzL2FsbW9zdC1lcXVhbC9hbG1vc3RfZXF1YWwuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2NvbG9yLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9nZW9tZXRyeS5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9jbGlwL2NsaXAtbGluZS10by1jaXJjbGUuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9jbGlwL2NsaXAtc2VnbWVudC10by1jaXJjbGUuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9jc3MtY29sb3ItbmFtZXMuanNvbiIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL2Nzcy1jb2xvci5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL2hleC10by1yZ2JhLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvaHNsLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvb3B0aW1pemUtcGVucGxvdC1wYXRocy5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL3JlbGF0aXZlLWx1bWluYW5jZS5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL3JnYmEtdG8taGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvdmVjMi5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL3dyYXAuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL21hdGguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL3BlbnBsb3QuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL3JhbmRvbS5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvc2hhZGVyLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL3JpZ2h0LW5vdy9icm93c2VyLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvaXMtcHJvbWlzZS9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2lzLWRvbS9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL3V0aWwuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L3NrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9yZXBlYXQtc3RyaW5nL2luZGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9saWIva2V5cy5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2lzX2FyZ3VtZW50cy5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L3NrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kYXRlZm9ybWF0L2xpYi9kYXRlZm9ybWF0LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvcGFkLWxlZnQvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L3NrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9zYXZlLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvYWNjZXNzaWJpbGl0eS5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL3BhcGVyLXNpemVzLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVmaW5lZC9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2NvbnZlcnQtbGVuZ3RoL2NvbnZlcnQtbGVuZ3RoLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvZGlzdGFuY2VzLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9yZXNpemVDYW52YXMuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L3NrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9nZXQtY2FudmFzLWNvbnRleHQvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L3NrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL2NyZWF0ZUNhbnZhcy5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUvU2tldGNoTWFuYWdlci5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUva2V5Ym9hcmRTaG9ydGN1dHMuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L3NrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jYW52YXMtc2tldGNoLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2Nsb25lL2Nsb25lLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvY29udmVyc2lvbnMuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY29sb3ItY29udmVydC9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jb2xvcm1hcC9jb2xvclNjYWxlLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NvbG9ybWFwL2luZGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NvbnZlcnQtbGVuZ3RoL2NvbnZlcnQtbGVuZ3RoLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2QzLXBhdGgvZGlzdC9kMy1wYXRoLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2RlZmluZWQvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvZmxvYXQtaHNsMnJnYi9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9mbG9hdC1yZ2IyaHNsL2luZGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2xlcnAvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvbGluZWNsaXAvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXN2Zy1wYXRoL2luZGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL3BhcnNlLWNvbG9yL2luZGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL3BhcnNlLXN2Zy1wYXRoL2luZGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL3ByaW1pdGl2ZS1xdWFkL2luZGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL3JlZ2wvZGlzdC9yZWdsLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL3NpbXBsZXgtbm9pc2Uvc2ltcGxleC1ub2lzZS5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9zdmctYXJjLXRvLWN1YmljLWJlemllci9janMvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvc3ZnLXBhdGgtY29udG91cnMvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvc3ZnLXBhdGgtY29udG91cnMvbm9kZV9tb2R1bGVzL25vcm1hbGl6ZS1zdmctcGF0aC9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy92ZWMyLWNvcHkvaW5kZXguanMiLCJza2V0Y2hlcy9za2V0Y2gtZ3JpZC1wYXJ0aWNsZS1jb2xvdXItZnVuay50cyIsInV0aWwvY29sb3JDb2Rlcy5qcyIsImNhbnZhcy1za2V0Y2gtY2xpL2luamVjdGVkL3N0b3JhZ2Uta2V5LmpzIl0sIm5hbWVzIjpbInIiLCJlIiwibiIsInQiLCJvIiwiaSIsImYiLCJjIiwicmVxdWlyZSIsInUiLCJhIiwiRXJyb3IiLCJjb2RlIiwicCIsImV4cG9ydHMiLCJjYWxsIiwibGVuZ3RoIiwiMSIsIm1vZHVsZSIsImJ5dGVMZW5ndGgiLCJiNjQiLCJsZW5zIiwiZ2V0TGVucyIsInBsYWNlSG9sZGVyc0xlbiIsInRvQnl0ZUFycmF5IiwidG1wIiwidmFsaWRMZW4iLCJhcnIiLCJBcnIiLCJfYnl0ZUxlbmd0aCIsImN1ckJ5dGUiLCJsZW4iLCJyZXZMb29rdXAiLCJjaGFyQ29kZUF0IiwiZnJvbUJ5dGVBcnJheSIsInVpbnQ4IiwiZXh0cmFCeXRlcyIsInBhcnRzIiwibGVuMiIsInB1c2giLCJlbmNvZGVDaHVuayIsImxvb2t1cCIsImpvaW4iLCJVaW50OEFycmF5IiwiQXJyYXkiLCJpbmRleE9mIiwic3RhcnQiLCJlbmQiLCJudW0iLCJvdXRwdXQiLCJiYXNlNjQiLCJpZWVlNzU0IiwiQnVmZmVyIiwiU2xvd0J1ZmZlciIsImFsbG9jIiwiSU5TUEVDVF9NQVhfQllURVMiLCJLX01BWF9MRU5HVEgiLCJjcmVhdGVCdWZmZXIiLCJSYW5nZUVycm9yIiwiYnVmIiwiX19wcm90b19fIiwicHJvdG90eXBlIiwiYXJnIiwiZW5jb2RpbmdPck9mZnNldCIsIlR5cGVFcnJvciIsImFsbG9jVW5zYWZlIiwiZnJvbSIsInZhbHVlIiwic3RyaW5nIiwiZW5jb2RpbmciLCJpc0VuY29kaW5nIiwiYWN0dWFsIiwid3JpdGUiLCJzbGljZSIsImZyb21TdHJpbmciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImZyb21BcnJheUxpa2UiLCJpc0luc3RhbmNlIiwiYnVmZmVyIiwiYXJyYXkiLCJieXRlT2Zmc2V0IiwidW5kZWZpbmVkIiwiZnJvbUFycmF5QnVmZmVyIiwidmFsdWVPZiIsImIiLCJvYmoiLCJpc0J1ZmZlciIsImNoZWNrZWQiLCJjb3B5IiwibnVtYmVySXNOYU4iLCJ0eXBlIiwiaXNBcnJheSIsImRhdGEiLCJmcm9tT2JqZWN0IiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJhc3NlcnRTaXplIiwic2l6ZSIsInRvU3RyaW5nIiwibXVzdE1hdGNoIiwiYXJndW1lbnRzIiwibG93ZXJlZENhc2UiLCJ1dGY4VG9CeXRlcyIsImJhc2U2NFRvQnl0ZXMiLCJ0b0xvd2VyQ2FzZSIsInN3YXAiLCJtIiwiYmlkaXJlY3Rpb25hbEluZGV4T2YiLCJ2YWwiLCJkaXIiLCJhcnJheUluZGV4T2YiLCJsYXN0SW5kZXhPZiIsImluZGV4U2l6ZSIsImFyckxlbmd0aCIsInZhbExlbmd0aCIsIlN0cmluZyIsInJlYWQiLCJyZWFkVUludDE2QkUiLCJmb3VuZEluZGV4IiwiZm91bmQiLCJqIiwiaGV4V3JpdGUiLCJvZmZzZXQiLCJOdW1iZXIiLCJyZW1haW5pbmciLCJzdHJMZW4iLCJwYXJzZWQiLCJwYXJzZUludCIsInN1YnN0ciIsInV0ZjhXcml0ZSIsImJsaXRCdWZmZXIiLCJhc2NpaVdyaXRlIiwic3RyIiwiYnl0ZUFycmF5IiwiYXNjaWlUb0J5dGVzIiwibGF0aW4xV3JpdGUiLCJiYXNlNjRXcml0ZSIsInVjczJXcml0ZSIsInVuaXRzIiwiaGkiLCJ1dGYxNmxlVG9CeXRlcyIsImJhc2U2NFNsaWNlIiwidXRmOFNsaWNlIiwiTWF0aCIsIm1pbiIsInJlcyIsInNlY29uZEJ5dGUiLCJ0aGlyZEJ5dGUiLCJmb3VydGhCeXRlIiwidGVtcENvZGVQb2ludCIsImZpcnN0Qnl0ZSIsImNvZGVQb2ludCIsImJ5dGVzUGVyU2VxdWVuY2UiLCJjb2RlUG9pbnRzIiwiTUFYX0FSR1VNRU5UU19MRU5HVEgiLCJmcm9tQ2hhckNvZGUiLCJhcHBseSIsImRlY29kZUNvZGVQb2ludHNBcnJheSIsImtNYXhMZW5ndGgiLCJUWVBFRF9BUlJBWV9TVVBQT1JUIiwiZm9vIiwidHlwZWRBcnJheVN1cHBvcnQiLCJjb25zb2xlIiwiZXJyb3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJ0aGlzIiwic3BlY2llcyIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwicG9vbFNpemUiLCJmaWxsIiwiYWxsb2NVbnNhZmVTbG93IiwiX2lzQnVmZmVyIiwiY29tcGFyZSIsIngiLCJ5IiwiY29uY2F0IiwibGlzdCIsInBvcyIsInN3YXAxNiIsInN3YXAzMiIsInN3YXA2NCIsInRvTG9jYWxlU3RyaW5nIiwiaGV4U2xpY2UiLCJhc2NpaVNsaWNlIiwibGF0aW4xU2xpY2UiLCJ1dGYxNmxlU2xpY2UiLCJlcXVhbHMiLCJpbnNwZWN0IiwibWF4IiwicmVwbGFjZSIsInRyaW0iLCJ0YXJnZXQiLCJ0aGlzU3RhcnQiLCJ0aGlzRW5kIiwidGhpc0NvcHkiLCJ0YXJnZXRDb3B5IiwiaW5jbHVkZXMiLCJpc0Zpbml0ZSIsInRvSlNPTiIsIl9hcnIiLCJyZXQiLCJvdXQiLCJ0b0hleCIsImJ5dGVzIiwiY2hlY2tPZmZzZXQiLCJleHQiLCJjaGVja0ludCIsImNoZWNrSUVFRTc1NCIsIndyaXRlRmxvYXQiLCJsaXR0bGVFbmRpYW4iLCJub0Fzc2VydCIsIndyaXRlRG91YmxlIiwibmV3QnVmIiwic3ViYXJyYXkiLCJyZWFkVUludExFIiwibXVsIiwicmVhZFVJbnRCRSIsInJlYWRVSW50OCIsInJlYWRVSW50MTZMRSIsInJlYWRVSW50MzJMRSIsInJlYWRVSW50MzJCRSIsInJlYWRJbnRMRSIsInBvdyIsInJlYWRJbnRCRSIsInJlYWRJbnQ4IiwicmVhZEludDE2TEUiLCJyZWFkSW50MTZCRSIsInJlYWRJbnQzMkxFIiwicmVhZEludDMyQkUiLCJyZWFkRmxvYXRMRSIsInJlYWRGbG9hdEJFIiwicmVhZERvdWJsZUxFIiwicmVhZERvdWJsZUJFIiwid3JpdGVVSW50TEUiLCJ3cml0ZVVJbnRCRSIsIndyaXRlVUludDgiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVUludDMyTEUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVJbnRMRSIsImxpbWl0Iiwic3ViIiwid3JpdGVJbnRCRSIsIndyaXRlSW50OCIsIndyaXRlSW50MTZMRSIsIndyaXRlSW50MTZCRSIsIndyaXRlSW50MzJMRSIsIndyaXRlSW50MzJCRSIsIndyaXRlRmxvYXRMRSIsIndyaXRlRmxvYXRCRSIsIndyaXRlRG91YmxlTEUiLCJ3cml0ZURvdWJsZUJFIiwidGFyZ2V0U3RhcnQiLCJjb3B5V2l0aGluIiwic2V0IiwiSU5WQUxJRF9CQVNFNjRfUkUiLCJJbmZpbml0eSIsImxlYWRTdXJyb2dhdGUiLCJzcGxpdCIsImJhc2U2NGNsZWFuIiwic3JjIiwiZHN0IiwiY29uc3RydWN0b3IiLCJuYW1lIiwiaXNMRSIsIm1MZW4iLCJuQnl0ZXMiLCJlTGVuIiwiZU1heCIsImVCaWFzIiwibkJpdHMiLCJkIiwicyIsIk5hTiIsInJ0IiwiYWJzIiwiaXNOYU4iLCJmbG9vciIsImxvZyIsIkxOMiIsImdsb2JhbCIsImZhY3RvcnkiLCJCbGFkZUFwaSIsIltvYmplY3QgT2JqZWN0XSIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyXyIsImRpc2FibGVkIiwidmlld1Byb3BzIiwiaGlkZGVuIiwiVHBFdmVudCIsIlRwQ2hhbmdlRXZlbnQiLCJwcmVzZXRLZXkiLCJsYXN0Iiwic3VwZXIiLCJUcFVwZGF0ZUV2ZW50IiwiVHBGb2xkRXZlbnQiLCJleHBhbmRlZCIsImZvcmNlQ2FzdCIsInYiLCJpc0VtcHR5IiwiZGVlcEVxdWFsc0FycmF5IiwiYTEiLCJhMiIsIkNSRUFURV9NRVNTQUdFX01BUCIsImFscmVhZHlkaXNwb3NlZCIsImludmFsaWRwYXJhbXMiLCJjb250ZXh0Iiwibm9tYXRjaGluZ2NvbnRyb2xsZXIiLCJrZXkiLCJub21hdGNoaW5ndmlldyIsIkpTT04iLCJzdHJpbmdpZnkiLCJwYXJhbXMiLCJub3RiaW5kYWJsZSIsInByb3BlcnR5bm90Zm91bmQiLCJzaG91bGRuZXZlcmhhcHBlbiIsIlRwRXJyb3IiLCJjb25maWciLCJfYSIsIm1lc3NhZ2UiLCJzdGFjayIsIkJpbmRpbmdUYXJnZXQiLCJvcHRfaWQiLCJvYmpfIiwia2V5XyIsInByZXNldEtleV8iLCJ2YWx1ZU9iaiIsImlzQmluZGFibGUiLCJub3RCaW5kYWJsZSIsInByb3BlcnR5Tm90Rm91bmQiLCJCdXR0b25BcGkiLCJsYWJlbCIsInByb3BzIiwidGl0bGUiLCJ2YWx1ZUNvbnRyb2xsZXIiLCJldmVudE5hbWUiLCJoYW5kbGVyIiwiYmgiLCJiaW5kIiwiZW1pdHRlciIsIm9uIiwiRW1pdHRlciIsIm9ic2VydmVyc18iLCJvYnNlcnZlcnMiLCJmaWx0ZXIiLCJvYnNlcnZlciIsImV2ZW50IiwiZm9yRWFjaCIsIlBSRUZJWCIsIkNsYXNzTmFtZSIsInZpZXdOYW1lIiwib3B0X2VsZW1lbnROYW1lIiwib3B0X21vZGlmaWVyIiwiZXh0cmFjdFZhbHVlIiwiZXYiLCJyYXdWYWx1ZSIsImJpbmRWYWx1ZSIsImFwcGx5VmFsdWUiLCJoMSIsImgyIiwiaW5wdXQiLCJiaW5kVmFsdWVNYXAiLCJ2YWx1ZU1hcCIsInZhbHVlVG9DbGFzc05hbWUiLCJlbGVtIiwiY2xhc3NOYW1lIiwiYWN0aXZlIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwiYXBwbHlDbGFzcyIsImJpbmRWYWx1ZVRvVGV4dENvbnRlbnQiLCJ0ZXh0IiwidGV4dENvbnRlbnQiLCJjbGFzc05hbWUkcSIsIkJ1dHRvblZpZXciLCJkb2MiLCJlbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImJpbmRDbGFzc01vZGlmaWVycyIsImJ1dHRvbkVsZW0iLCJiaW5kRGlzYWJsZWQiLCJhcHBlbmRDaGlsZCIsImJ1dHRvbkVsZW1lbnQiLCJ0aXRsZUVsZW0iLCJCdXR0b25Db250cm9sbGVyIiwib25DbGlja18iLCJ2aWV3IiwiYWRkRXZlbnRMaXN0ZW5lciIsImVtaXQiLCJzZW5kZXIiLCJCb3VuZFZhbHVlIiwiaW5pdGlhbFZhbHVlIiwiY29uc3RyYWludF8iLCJjb25zdHJhaW50IiwiZXF1YWxzXyIsInYxIiwidjIiLCJyYXdWYWx1ZV8iLCJzZXRSYXdWYWx1ZSIsImZvcmNlRW1pdCIsIm9wdGlvbnMiLCJvcHRzIiwiY29uc3RyYWluZWRWYWx1ZSIsImNvbnN0cmFpbiIsIlByaW1pdGl2ZVZhbHVlIiwidmFsdWVfIiwiY3JlYXRlVmFsdWUiLCJWYWx1ZU1hcCIsInZhbE1hcF8iLCJrZXlzIiwicmVkdWNlIiwiYXNzaWduIiwiY29yZSIsImNyZWF0ZUNvcmUiLCJjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyIiwicGFyc2UiLCJvcHRpb25hbCIsInN1Y2NlZWRlZCIsInJlc3VsdCIsImNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXJzIiwiY3VzdG9tIiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwiY29uc3RhbnQiLCJyYXciLCJvYmplY3QiLCJrZXlUb1BhcnNlck1hcCIsImlzT2JqZWN0IiwicGFyc2VyIiwicGFyc2VPYmplY3QiLCJpdGVtUGFyc2VyIiwicGFyc2VJdGVtIiwiaXRlbSIsInBhcnNlQXJyYXkiLCJQYXJhbXNQYXJzZXJzIiwicmVxdWlyZWQiLCJwYXJzZVBhcmFtcyIsImNsYXNzTmFtZSRwIiwiUE9TX1RPX0NMQVNTX05BTUVfTUFQIiwidmVyeWZpcnN0IiwiZmlyc3QiLCJ2ZXJ5bGFzdCIsIkJsYWRlQ29udHJvbGxlciIsInBhcmVudF8iLCJibGFkZSIsImhhbmRsZURpc3Bvc2UiLCJwYXJlbnRFbGVtZW50IiwicmVtb3ZlQ2hpbGQiLCJkaXNwb3NlRWxlbWVudCIsInBhcmVudCIsIlNWR19OUyIsInN1cHBvcnRzVG91Y2giLCJvbnRvdWNoc3RhcnQiLCJnZXRXaW5kb3dEb2N1bWVudCIsIkZ1bmN0aW9uIiwiZG9jdW1lbnQiLCJJQ09OX0lEX1RPX0lOTkVSX0hUTUxfTUFQIiwiY2hlY2siLCJkcm9wZG93biIsInAyZHBhZCIsImNyZWF0ZVN2Z0ljb25FbGVtZW50IiwiaWNvbklkIiwiY3JlYXRlRWxlbWVudE5TIiwiaW5uZXJIVE1MIiwiaW5zZXJ0RWxlbWVudEF0IiwiaW5kZXgiLCJpbnNlcnRCZWZvcmUiLCJjaGlsZHJlbiIsInJlbW92ZUVsZW1lbnQiLCJyZW1vdmVDaGlsZEVsZW1lbnRzIiwiZmluZE5leHRUYXJnZXQiLCJyZWxhdGVkVGFyZ2V0IiwiZXhwbGljaXRPcmlnaW5hbFRhcmdldCIsImNsYXNzTmFtZSRvIiwiTGFiZWxWaWV3IiwibGFiZWxFbGVtIiwiY2hpbGROb2RlcyIsInJlbW92ZUNoaWxkTm9kZXMiLCJmcmFnIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsIm1hcCIsImxpbmUiLCJjcmVhdGVUZXh0Tm9kZSIsImxpbmVOb2RlIiwiY3JlYXRlTGFiZWxOb2RlIiwibGFiZWxFbGVtZW50IiwidmFsdWVFbGVtIiwidmFsdWVFbGVtZW50IiwiTGFiZWxDb250cm9sbGVyIiwiQnV0dG9uQmxhZGVQbHVnaW4iLCJpZCIsImFyZ3MiLCJhcGkiLCJWYWx1ZUJsYWRlQ29udHJvbGxlciIsImNyZWF0ZUJsYWRlIiwicG9zaXRpb25zIiwiRm9sZGFibGUiLCJjb21wbGV0ZWQiLCJleHBhbmRlZEhlaWdodCIsInNob3VsZEZpeEhlaWdodCIsInRlbXBvcmFyeUV4cGFuZGVkIiwic3R5bGVFeHBhbmRlZCIsInN0eWxlSGVpZ2h0IiwiZXhIZWlnaHQiLCJleHBhbmRlZENsYXNzTmFtZSIsIm9uRXhwYW5kIiwiYXBwbHlIZWlnaHQiLCJmb2xkYWJsZSIsInN0eWxlIiwiaGVpZ2h0IiwiYmluZEZvbGRhYmxlIiwiZm9sZGVyIiwiY29udGFpbmVyRWxlbWVudCIsImNhbGxiYWNrIiwidHJhbnNpdGlvbiIsImRpc2FibGVUcmFuc2l0aW9uVGVtcG9yYXJpbHkiLCJjbGllbnRIZWlnaHQiLCJjb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQiLCJwcm9wZXJ0eU5hbWUiLCJjbGVhblVwVHJhbnNpdGlvbiIsIlJhY2tMaWtlQXBpIiwicmFja0FwaSIsInJhY2tBcGlfIiwiTmVzdGVkT3JkZXJlZFNldCIsImV4dHJhY3QiLCJpdGVtc18iLCJjYWNoZV8iLCJTZXQiLCJvblN1Ykxpc3RBZGRfIiwib25TdWJMaXN0UmVtb3ZlXyIsImV4dHJhY3RfIiwiaXRlbXMiLCJhbGxJdGVtcyIsImhhcyIsIm9wdF9pbmRleCIsInNob3VsZE5ldmVySGFwcGVuIiwic3BsaWNlIiwic3ViTGlzdCIsInJvb3QiLCJkZWxldGUiLCJvZmYiLCJJbnB1dEJpbmRpbmdBcGkiLCJvbkJpbmRpbmdDaGFuZ2VfIiwiZW1pdHRlcl8iLCJiaW5kaW5nIiwiSW5wdXRCaW5kaW5nQ29udHJvbGxlciIsIk1vbml0b3JCaW5kaW5nQXBpIiwib25CaW5kaW5nVXBkYXRlXyIsIk1vbml0b3JCaW5kaW5nQ29udHJvbGxlciIsInRpY2tlciIsImRpc3Bvc2UiLCJmaW5kU3ViQmxhZGVBcGlTZXQiLCJSYWNrQXBpIiwiZ2V0QXBpQnlDb250cm9sbGVyIiwiYXBpU2V0IiwiZmluZCIsImNyZWF0ZUJpbmRpbmdUYXJnZXQiLCJwb29sIiwib25SYWNrQWRkXyIsIm9uUmFja1JlbW92ZV8iLCJvblJhY2tJbnB1dENoYW5nZV8iLCJvblJhY2tNb25pdG9yVXBkYXRlXyIsImFwaVNldF8iLCJwb29sXyIsInJhY2siLCJiYyIsInNldFVwQXBpXyIsIm9wdF9wYXJhbXMiLCJjcmVhdGVJbnB1dCIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVNb25pdG9yIiwiYWRkQmxhZGUiLCJhZGRGb2xkZXJBc0JsYWRlIiwiYWRkQnV0dG9uQXNCbGFkZSIsImFkZFNlcGFyYXRvckFzQmxhZGUiLCJhZGRUYWJBc0JsYWRlIiwiZ2FwaSIsImNyZWF0ZUJsYWRlQXBpIiwiYmxhZGVDb250cm9sbGVyIiwiaXNSb290IiwiRm9sZGVyQXBpIiwicmFja0NvbnRyb2xsZXIiLCJhZGRJbnB1dCIsImFkZE1vbml0b3IiLCJhZGRGb2xkZXIiLCJhZGRCdXR0b24iLCJhZGRTZXBhcmF0b3IiLCJhZGRUYWIiLCJSYWNrTGlrZUNvbnRyb2xsZXIiLCJQbGFpblZpZXciLCJmaW5kU3ViUmFjayIsIlJhY2tDb250cm9sbGVyIiwiZmluZFN1YkJsYWRlQ29udHJvbGxlclNldCIsIkJsYWRlUmFjayIsIm9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfIiwib25TZXRBZGRfIiwib25TZXRSZW1vdmVfIiwib25DaGlsZERpc3Bvc2VfIiwib25DaGlsZFBvc2l0aW9uc0NoYW5nZV8iLCJvbkNoaWxkSW5wdXRDaGFuZ2VfIiwib25DaGlsZE1vbml0b3JVcGRhdGVfIiwib25DaGlsZFZhbHVlQ2hhbmdlXyIsIm9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfIiwib25EZXNjZW5kYW50TGF5b3V0XyIsIm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyIsIm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfIiwiYmxhZGVfIiwiYmNTZXRfIiwiY29udHJvbGxlckNsYXNzIiwidXBkYXRlUG9zaXRpb25zXyIsInZpc2libGVJdGVtcyIsImZpcnN0VmlzaWJsZUl0ZW0iLCJsYXN0VmlzaWJsZUl0ZW0iLCJwcyIsIl9ldiIsImJjcyIsImZpbmRJbnB1dEJpbmRpbmdDb250cm9sbGVyIiwiZmluZE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciIsImZpbmRWYWx1ZUJsYWRlQ29udHJvbGxlciIsIl8iLCJibGFkZUNvbnRhaW5lckNsYXNzTmFtZSIsIkZvbGRlclZpZXciLCJjbGFzc05hbWVfIiwiZm9sZGFibGVfIiwiYmluZEV4cGFuZGVkQ2xhc3MiLCJ0aXRsZUVsZW1lbnQiLCJtYXJrRWxlbSIsImNvbnRhaW5lckVsZW0iLCJGb2xkZXJDb250cm9sbGVyIiwiY3JlYXRlIiwicmMiLCJvblRpdGxlQ2xpY2tfIiwiRm9sZGVyQmxhZGVQbHVnaW4iLCJMYWJlbGVkVmFsdWVDb250cm9sbGVyIiwiU2VwYXJhdG9yQXBpIiwiY2xhc3NOYW1lJG4iLCJTZXBhcmF0b3JWaWV3IiwiaHJFbGVtIiwiU2VwYXJhdG9yQ29udHJvbGxlciIsIlNlcGFyYXRvckJsYWRlUGx1Z2luIiwiY2xhc3NOYW1lJG0iLCJ2YWx1ZVRvTW9kaWZpZXIiLCJtb2RpZmllciIsIlZpZXdQcm9wcyIsIm9wdF9pbml0aWFsVmFsdWUiLCJfYiIsImNvcmVPYmoiLCJkaXNwb3NlZCIsInRhYkluZGV4IiwiY2xhc3NOYW1lJGwiLCJUYWJJdGVtVmlldyIsInNlbGVjdGVkIiwiVGFiSXRlbUNvbnRyb2xsZXIiLCJUYWJQYWdlQ29udHJvbGxlciIsIm9uSXRlbUNsaWNrXyIsImljXyIsIml0ZW1Qcm9wcyIsImNjXyIsIml0ZW1Db250cm9sbGVyIiwiY29udGVudENvbnRyb2xsZXIiLCJUYWJQYWdlQXBpIiwiY29udGVudFJhY2tBcGkiLCJUYWJBcGkiLCJvblBhZ2VBZGRfIiwib25QYWdlUmVtb3ZlXyIsInBhZ2VBcGlNYXBfIiwiTWFwIiwicGFnZVNldCIsInBjIiwic2V0VXBQYWdlQXBpXyIsInBhZ2VzIiwiY2xhc3NOYW1lJGsiLCJUYWJWaWV3IiwiZW1wdHkiLCJpdGVtc0VsZW0iLCJpdGVtc0VsZW1lbnQiLCJjb250ZW50c0VsZW0iLCJjb250ZW50c0VsZW1lbnQiLCJUYWJDb250cm9sbGVyIiwiY3IiLCJvblBhZ2VTZWxlY3RlZENoYW5nZV8iLCJwYWdlU2V0XyIsImVtcHR5XyIsImFwcGx5UGFnZXNfIiwia2VlcFNlbGVjdGlvbl8iLCJmaXJzdFNlbEluZGV4IiwiZmluZEluZGV4IiwiVGFiQmxhZGVQbHVnaW4iLCJNYW51YWxUaWNrZXIiLCJJbnRlcnZhbFRpY2tlciIsImludGVydmFsIiwiZGlzYWJsZWRfIiwidGltZXJJZF8iLCJvblRpY2tfIiwiZG9jXyIsImludGVydmFsXyIsInNldFRpbWVyXyIsImluYWN0aXZlIiwiY2xlYXJUaW1lcl8iLCJ3aW4iLCJkZWZhdWx0VmlldyIsImNsZWFySW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsIkNvbXBvc2l0ZUNvbnN0cmFpbnQiLCJjb25zdHJhaW50cyIsImZpbmRDb25zdHJhaW50IiwiY29uc3RyYWludENsYXNzIiwidG1wUmVzdWx0Iiwic2MiLCJMaXN0Q29uc3RyYWludCIsIlJhbmdlQ29uc3RyYWludCIsIm1heFZhbHVlIiwibWluVmFsdWUiLCJTdGVwQ29uc3RyYWludCIsInN0ZXAiLCJyb3VuZCIsImNsYXNzTmFtZSRqIiwiTGlzdFZpZXciLCJvblZhbHVlQ2hhbmdlXyIsInByb3BzXyIsInNlbGVjdEVsZW0iLCJvcHRpb25FbGVtIiwiZGF0YXNldCIsInNlbGVjdEVsZW1lbnQiLCJ1cGRhdGVfIiwiTGlzdENvbnRyb2xsZXIiLCJvblNlbGVjdENoYW5nZV8iLCJvcHRFbGVtIiwiY3VycmVudFRhcmdldCIsInNlbGVjdGVkT3B0aW9ucyIsIml0ZW1JbmRleCIsImNsYXNzTmFtZSRpIiwiUG9wdXBWaWV3Iiwic2hvd3MiLCJQb3B1cENvbnRyb2xsZXIiLCJjbGFzc05hbWUkaCIsIlRleHRWaWV3Iiwib25DaGFuZ2VfIiwiaW5wdXRFbGVtIiwiaW5wdXRFbGVtZW50IiwicmVmcmVzaCIsImZvcm1hdHRlciIsIlRleHRDb250cm9sbGVyIiwib25JbnB1dENoYW5nZV8iLCJwYXJzZXJfIiwicGFyc2VkVmFsdWUiLCJib29sRnJvbVVua25vd24iLCJCb29sZWFuRm9ybWF0dGVyIiwiYm9vbFRvU3RyaW5nIiwiTnVtYmVyTGl0ZXJhbE5vZGUiLCJCSU5BUllfT1BFUkFUSU9OX01BUCIsIioqIiwiKiIsIi8iLCIlIiwiKyIsIi0iLCI8PCIsIj4+IiwiPj4+IiwiJiIsIl4iLCJ8IiwiQmluYXJ5T3BlcmF0aW9uTm9kZSIsIm9wZXJhdG9yIiwibGVmdCIsInJpZ2h0Iiwib3AiLCJldmFsdWF0ZSIsIlVOQVJZX09QRVJBVElPTl9NQVAiLCJ+IiwiVW5hcnlPcGVyYXRpb25Ob2RlIiwiZXhwciIsImV4cHJlc3Npb24iLCJjb21iaW5lUmVhZGVyIiwicGFyc2VycyIsImN1cnNvciIsInJlYWRXaGl0ZXNwYWNlIiwibWF0Y2giLCJyZWFkRGVjaW1hbERpZ2l0cyIsInJlYWRFeHBvbmVudFBhcnQiLCJzaSIsImRzIiwic2lnbiIsInNkcyIsInJlYWRTaWduZWRJbnRlZ2VyIiwicmVhZERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCIsImNoIiwibnpkIiwicmVhZE5vblplcm9EaWdpdCIsInJlYWREZWNpbWFsTGl0ZXJhbCIsImRpbCIsImRvdCIsImRkcyIsInJlYWROb25EZWNpbWFsSW50ZWdlckxpdGVyYWwiLCJwcmVmaXgiLCJiZHMiLCJwYXJzZUJpbmFyeURpZ2l0cyIsIm9kcyIsInJlYWRPY3RhbERpZ2l0cyIsImhkcyIsInJlYWRIZXhEaWdpdHMiLCJyZWFkTnVtZXJpY0xpdGVyYWwiLCJwYXJzZVByaW1hcnlFeHByZXNzaW9uIiwiZXZhbHVhYmxlIiwicGFyc2VMaXRlcmFsIiwicGFyc2VFeHByZXNzaW9uIiwiY2wiLCJwYXJzZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uIiwicmVhZEJpbmFyeU9wZXJhdG9yIiwib3BzIiwic3RhcnRzV2l0aCIsInBhcnNlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvbiIsImV4cHJQYXJzZXIiLCJmaXJzdEV4cHIiLCJuZXh0RXhwciIsImNyZWF0ZUJpbmFyeU9wZXJhdGlvbkV4cHJlc3Npb25QYXJzZXIiLCJwYXJzZVVuYXJ5RXhwcmVzc2lvbiIsInBhcnNlTnVtYmVyIiwicGFyc2VFY21hTnVtYmVyRXhwcmVzc2lvbiIsIm51bWJlckZyb21Vbmtub3duIiwicHYiLCJudW1iZXJUb1N0cmluZyIsImNyZWF0ZU51bWJlckZvcm1hdHRlciIsImRpZ2l0cyIsInRvRml4ZWQiLCJpbm5lckZvcm1hdHRlciIsImZvcm1hdFBlcmNlbnRhZ2UiLCJzdHJpbmdGcm9tVW5rbm93biIsImZvcm1hdFN0cmluZyIsImZpbGxCdWZmZXIiLCJidWZmZXJTaXplIiwiaW5pdGlhbGl6ZUJ1ZmZlciIsImNyZWF0ZVRyaW1tZWRCdWZmZXIiLCJjb25uZWN0VmFsdWVzIiwicHJpbWFyeSIsInNlY29uZGFyeSIsImZvcndhcmQiLCJiYWNrd2FyZCIsImNoYW5naW5nIiwicHJldmVudEZlZWRiYWNrIiwiZ2V0U3RlcEZvcktleSIsImJhc2VTdGVwIiwiYWx0S2V5Iiwic2hpZnRLZXkiLCJ1cEtleSIsImRvd25LZXkiLCJnZXRWZXJ0aWNhbFN0ZXBLZXlzIiwiZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzIiwiaXNBcnJvd0tleSIsImlzVmVydGljYWxBcnJvd0tleSIsImNvbXB1dGVPZmZzZXQkMSIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJwYWdlWCIsInNjcm9sbFgiLCJwYWdlWSIsInNjcm9sbFkiLCJ0b3AiLCJQb2ludGVySGFuZGxlciIsImxhc3RUb3VjaF8iLCJvbkRvY3VtZW50TW91c2VNb3ZlXyIsIm9uRG9jdW1lbnRNb3VzZVVwXyIsIm9uTW91c2VEb3duXyIsIm9uVG91Y2hFbmRfIiwib25Ub3VjaE1vdmVfIiwib25Ub3VjaFN0YXJ0XyIsImVsZW1fIiwicGFzc2l2ZSIsImJvdW5kcyIsIndpZHRoIiwicG9pbnQiLCJwcmV2ZW50RGVmYXVsdCIsImZvY3VzIiwiY29tcHV0ZVBvc2l0aW9uXyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ0b3VjaCIsInRhcmdldFRvdWNoZXMiLCJjbGllbnRYIiwiY2xpZW50WSIsIm1hcFJhbmdlIiwic3RhcnQxIiwiZW5kMSIsInN0YXJ0MiIsImVuZDIiLCJnZXREZWNpbWFsRGlnaXRzIiwiY29uc3RyYWluUmFuZ2UiLCJsb29wUmFuZ2UiLCJjbGFzc05hbWUkZyIsIk51bWJlclRleHRWaWV3IiwiYXJyYXlQb3NpdGlvbiIsIm9uRHJhZ2dpbmdDaGFuZ2VfIiwiZHJhZ2dpbmdfIiwiZHJhZ2dpbmciLCJrbm9iRWxlbSIsImtub2JFbGVtZW50IiwiZ3VpZGVFbGVtIiwiYm9keUVsZW0iLCJndWlkZUJvZHlFbGVtXyIsImhlYWRFbGVtIiwiZ3VpZGVIZWFkRWxlbV8iLCJ0b29sdGlwRWxlbSIsInRvb2x0aXBFbGVtXyIsImFveCIsImFkeCIsInNldEF0dHJpYnV0ZU5TIiwiTnVtYmVyVGV4dENvbnRyb2xsZXIiLCJvcmlnaW5SYXdWYWx1ZV8iLCJvbklucHV0S2V5RG93bl8iLCJvbklucHV0S2V5VXBfIiwib25Qb2ludGVyRG93bl8iLCJvblBvaW50ZXJNb3ZlXyIsIm9uUG9pbnRlclVwXyIsImJhc2VTdGVwXyIsInBoIiwiY29tcHV0ZURyYWdnaW5nVmFsdWVfIiwiY2xhc3NOYW1lJGYiLCJTbGlkZXJWaWV3IiwidHJhY2tFbGVtIiwiYmluZFRhYkluZGV4IiwidHJhY2tFbGVtZW50IiwiU2xpZGVyQ29udHJvbGxlciIsIm9uS2V5RG93bl8iLCJvbktleVVwXyIsIm9uUG9pbnRlckRvd25Pck1vdmVfIiwicHRIYW5kbGVyXyIsImhhbmRsZVBvaW50ZXJFdmVudF8iLCJjbGFzc05hbWUkZSIsIlNsaWRlclRleHRWaWV3Iiwic2xpZGVyRWxlbSIsInNsaWRlclZpZXdfIiwic2xpZGVyVmlldyIsInRleHRFbGVtIiwidGV4dFZpZXdfIiwidGV4dFZpZXciLCJTbGlkZXJUZXh0Q29udHJvbGxlciIsInNsaWRlckNfIiwic2xpZGVyUHJvcHMiLCJ0ZXh0Q18iLCJ0ZXh0UHJvcHMiLCJzbGlkZXJDb250cm9sbGVyIiwidGV4dENvbnRyb2xsZXIiLCJ3cml0ZVByaW1pdGl2ZSIsInBhcnNlTGlzdE9wdGlvbnMiLCJwYXJzZVBpY2tlckxheW91dCIsInBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMiLCJub3JtYWxpemVMaXN0T3B0aW9ucyIsImNyZWF0ZUxpc3RDb25zdHJhaW50IiwiZmluZExpc3RJdGVtcyIsImdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyIsImdldEJhc2VTdGVwIiwiZmluZFN0ZXAiLCJnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUiLCJiYXNlIiwibG9nMTAiLCJjbGFzc05hbWUkZCIsIkNoZWNrYm94VmlldyIsIndyYXBwZXJFbGVtIiwiQ2hlY2tib3hDb250cm9sbGVyIiwiQm9vbGVhbklucHV0UGx1Z2luIiwiYWNjZXB0IiwicmVhZGVyIiwiX2FyZ3MiLCJsYyIsImNyZWF0ZUNvbnN0cmFpbnQkNSIsIndyaXRlciIsImNsYXNzTmFtZSRjIiwiQ29sb3JWaWV3Iiwic3dhdGNoRWxlbSIsInN3YXRjaEVsZW1lbnQiLCJ0ZXh0RWxlbWVudCIsInBpY2tlckxheW91dCIsInBpY2tlckVsZW0iLCJwaWNrZXJFbGVtZW50IiwiaHN2VG9SZ2IiLCJoIiwiaHAiLCJzcCIsInZwIiwicnAiLCJncCIsImJwIiwicmVtb3ZlQWxwaGFDb21wb25lbnQiLCJjb21wcyIsImFwcGVuZEFscGhhQ29tcG9uZW50IiwiYWxwaGEiLCJNT0RFX0NPTlZFUlRFUl9NQVAiLCJoc2wiLCJsIiwiaHN2Iiwic2QiLCJyZ2IiLCJscCIsImciLCJjbWF4IiwiY21pbiIsIkNPTlNUUkFJTlRfTUFQIiwiaXNSZ2JDb2xvckNvbXBvbmVudCIsIkNvbG9yIiwibW9kZSIsIm1vZGVfIiwiY29tcHNfIiwiY29sb3IiLCJ0b1JnYmFPYmplY3QiLCJpc1JnYkNvbG9yT2JqZWN0IiwiY29tcHMxIiwiY29tcHMyIiwib3B0X21vZGUiLCJjb21wb25lbnRzIiwicmdiQ29tcHMiLCJnZXRDb21wb25lbnRzIiwiY2xhc3NOYW1lJGIiLCJDb2xvclBpY2tlclZpZXciLCJhbHBoYVZpZXdzXyIsImhzdkVsZW0iLCJzdkVsZW0iLCJzdlBhbGV0dGVWaWV3XyIsInN2UGFsZXR0ZVZpZXciLCJoRWxlbSIsImhQYWxldHRlVmlld18iLCJoUGFsZXR0ZVZpZXciLCJyZ2JFbGVtIiwiYWxwaGFWaWV3cyIsInBhbGV0dGUiLCJhRWxlbSIsImFwRWxlbSIsImF0RWxlbSIsImFsbEZvY3VzYWJsZUVsZW1lbnRzIiwiZWxlbXMiLCJtb2RlU2VsZWN0RWxlbWVudCIsInRleHRWaWV3cyIsInBhcnNlQ29sb3JJbnB1dFBhcmFtcyIsInBpY2tlciIsImdldEJhc2VTdGVwRm9yQ29sb3IiLCJmb3JBbHBoYSIsInBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlIiwicGFyc2VGbG9hdCIsIkFOR0xFX1RPX0RFR19NQVAiLCJkZWciLCJhbmdsZSIsImdyYWQiLCJyYWQiLCJQSSIsInR1cm4iLCJwYXJzZUNzc051bWJlck9yQW5nbGUiLCJOT1RBVElPTl9UT19QQVJTRVJfTUFQIiwiZnVuYy5yZ2IiLCJmdW5jLnJnYmEiLCJmdW5jLmhzbCIsImZ1bmMuaHNsYSIsImhleC5yZ2IiLCJtUmdiIiwibVJyZ2diYiIsImhleC5yZ2JhIiwiZ2V0Q29sb3JOb3RhdGlvbiIsIm5vdGF0aW9uIiwic3VicGFyc2VyIiwiQ29tcG9zaXRlQ29sb3JQYXJzZXIiLCJoYXNBbHBoYUNvbXBvbmVudCIsInplcm9maWxsIiwiY29tcCIsImhleCIsImNvbG9yVG9IZXhSZ2JTdHJpbmciLCJjb2xvclRvSGV4UmdiYVN0cmluZyIsInJnYmFDb21wcyIsImNvbG9yVG9GdW5jdGlvbmFsUmdiU3RyaW5nIiwiY29sb3JUb0Z1bmN0aW9uYWxSZ2JhU3RyaW5nIiwiYUZvcm1hdHRlciIsInJnYkZvcm1hdHRlciIsIk5PVEFUSU9OX1RPX1NUUklOR0lGSUVSX01BUCIsImZvcm1hdHRlcnMiLCJnZXRDb2xvclN0cmluZ2lmaWVyIiwiY2xhc3NOYW1lJGEiLCJBUGFsZXR0ZVZpZXciLCJiYXJFbGVtIiwiY29sb3JFbGVtIiwiY29sb3JFbGVtXyIsIm1hcmtlckVsZW0iLCJtYXJrZXJFbGVtXyIsInByZXZpZXdFbGVtIiwicHJldmlld0VsZW1fIiwibGVmdENvbG9yIiwicmlnaHRDb2xvciIsImdyYWRpZW50Q29tcHMiLCJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZENvbG9yIiwiQVBhbGV0dGVDb250cm9sbGVyIiwiY2xhc3NOYW1lJDkiLCJDb2xvclRleHRWaWV3IiwibW9kZUVsZW0iLCJtb2RlRWxlbV8iLCJjcmVhdGVNb2RlU2VsZWN0RWxlbWVudCIsIm1vZGVNYXJrZXJFbGVtIiwidGV4dHNFbGVtIiwidGV4dHNFbGVtXyIsInRleHRWaWV3c18iLCJhcHBseVRleHRWaWV3c18iLCJjb2xvck1vZGUiLCJjb21wRWxlbSIsIkZPUk1BVFRFUiIsIk1PREVfVE9fQ09OU1RSQUlOVF9NQVAiLCJjcmVhdGVDb21wb25lbnRDb250cm9sbGVyIiwiZHJhZ2dpbmdTY2FsZSIsIkNvbG9yVGV4dENvbnRyb2xsZXIiLCJvbk1vZGVTZWxlY3RDaGFuZ2VfIiwiY2NzXyIsImNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXJzXyIsImNjIiwiY2NzIiwiY3MiLCJwaWNrZWRNb2RlIiwiY2xhc3NOYW1lJDgiLCJIUGFsZXR0ZVZpZXciLCJIUGFsZXR0ZUNvbnRyb2xsZXIiLCJodWUiLCJjbGFzc05hbWUkNyIsIkNBTlZBU19SRVNPTCIsIlN2UGFsZXR0ZVZpZXciLCJjYW52YXNFbGVtIiwiY2FudmFzRWxlbWVudCIsImN0eCIsImdldENvbnRleHQiLCJnZXRDYW52YXNDb250ZXh0IiwiaHN2Q29tcHMiLCJpbWdEYXRhIiwiZ2V0SW1hZ2VEYXRhIiwiaXkiLCJpeCIsInB1dEltYWdlRGF0YSIsIlN2UGFsZXR0ZUNvbnRyb2xsZXIiLCJzYXR1cmF0aW9uIiwiZHYiLCJDb2xvclBpY2tlckNvbnRyb2xsZXIiLCJoUGFsZXR0ZUNfIiwic3ZQYWxldHRlQ18iLCJhbHBoYUljc18iLCJzdXBwb3J0c0FscGhhIiwiY2xhc3NOYW1lJDYiLCJDb2xvclN3YXRjaFZpZXciLCJzd2F0Y2hFbGVtXyIsIkNvbG9yU3dhdGNoQ29udHJvbGxlciIsIkNvbG9yQ29udHJvbGxlciIsIm9uQnV0dG9uQmx1cl8iLCJvbkJ1dHRvbkNsaWNrXyIsIm9uUG9wdXBDaGlsZEJsdXJfIiwib25Qb3B1cENoaWxkS2V5ZG93bl8iLCJzd2F0Y2hDXyIsInBvcENfIiwicGlja2VyQyIsInBpY2tlckNfIiwibmV4dFRhcmdldCIsImNvbnRhaW5zIiwiY29sb3JUb1JnYk51bWJlciIsImNvbG9yVG9SZ2JhTnVtYmVyIiwiY29sb3JGcm9tUmdiTnVtYmVyIiwiYmxhY2siLCJjb2xvckZyb21SZ2JhTnVtYmVyIiwid3JpdGVSZ2JhQ29sb3JPYmplY3QiLCJ3cml0ZVByb3BlcnR5Iiwid3JpdGVSZ2JDb2xvck9iamVjdCIsInNob3VsZFN1cHBvcnRBbHBoYSQxIiwiaW5wdXRQYXJhbXMiLCJjcmVhdGVGb3JtYXR0ZXIkMSIsIk51bWJlckNvbG9ySW5wdXRQbHVnaW4iLCJjb2xvclRvTnVtYmVyIiwiY3JlYXRlQ29sb3JOdW1iZXJXcml0ZXIiLCJPYmplY3RDb2xvcklucHV0UGx1Z2luIiwiaXNDb2xvck9iamVjdCIsImNyZWF0ZUNvbG9yT2JqZWN0V3JpdGVyIiwiaXNSZ2JhQ29sb3JPYmplY3QiLCJzaG91bGRTdXBwb3J0QWxwaGEiLCJTdHJpbmdDb2xvcklucHV0UGx1Z2luIiwiY3YiLCJjcmVhdGVDb2xvclN0cmluZ1dyaXRlciIsInN0cmluZ2lmaWVyIiwiUG9pbnROZENvbnN0cmFpbnQiLCJhc21fIiwiYXNzZW1ibHkiLCJ0b0NvbXBvbmVudHMiLCJmcm9tQ29tcG9uZW50cyIsImNsYXNzTmFtZSQ1IiwiUG9pbnROZFRleHRWaWV3IiwiYXhpc0VsZW0iLCJQb2ludE5kVGV4dENvbnRyb2xsZXIiLCJhY3NfIiwiYXhlcyIsImNyZWF0ZUF4aXNDb250cm9sbGVyIiwiYWMiLCJjcmVhdGVDb25zdHJhaW50JDQiLCJjcmVhdGVTdGVwQ29uc3RyYWludCIsImNyZWF0ZVJhbmdlQ29uc3RyYWludCIsImVzdGltYXRlU3VpdGFibGVSYW5nZSIsImZpbmRSYW5nZSIsIk51bWJlcklucHV0UGx1Z2luIiwiZm9ybWF0IiwiUG9pbnQyZCIsIlBvaW50MmRBc3NlbWJseSIsImNsYXNzTmFtZSQ0IiwiUG9pbnQyZFZpZXciLCJjbGFzc05hbWUkMyIsIlBvaW50MmRQaWNrZXJWaWV3Iiwib25Gb2xkYWJsZUNoYW5nZV8iLCJpbnZlcnRzWV8iLCJpbnZlcnRzWSIsIm1heFZhbHVlXyIsImxheW91dCIsInBhZEVsZW0iLCJwYWRFbGVtZW50Iiwic3ZnRWxlbSIsInN2Z0VsZW1fIiwieEF4aXNFbGVtIiwieUF4aXNFbGVtIiwibGluZUVsZW0iLCJsaW5lRWxlbV8iLCJweCIsInB5IiwiaXB5IiwiY29tcHV0ZU9mZnNldCIsImJhc2VTdGVwcyIsIlBvaW50MmRQaWNrZXJDb250cm9sbGVyIiwib25QYWRLZXlEb3duXyIsIm9uUGFkS2V5VXBfIiwiYmFzZVN0ZXBzXyIsImR4IiwiZHkiLCJQb2ludDJkQ29udHJvbGxlciIsIm9uUGFkQnV0dG9uQmx1cl8iLCJvblBhZEJ1dHRvbkNsaWNrXyIsInBhZEMiLCJjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50JDIiLCJnZXRTdWl0YWJsZU1heERpbWVuc2lvblZhbHVlIiwiZ2V0U3VpdGFibGVNYXhWYWx1ZSIsInljIiwieHIiLCJ5ciIsImNyZWF0ZUF4aXMkMiIsInNob3VsZEludmVydFkiLCJ5UGFyYW1zIiwiaW52ZXJ0ZWQiLCJQb2ludDJkSW5wdXRQbHVnaW4iLCJjcmVhdGVDb25zdHJhaW50JDMiLCJQb2ludDNkIiwieiIsIlBvaW50M2RBc3NlbWJseSIsImNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMSIsImNyZWF0ZUF4aXMkMSIsIlBvaW50M2RJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQkMiIsIlBvaW50NGQiLCJ3IiwiUG9pbnQ0ZEFzc2VtYmx5IiwiY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCIsIlBvaW50NGRJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQkMSIsImNyZWF0ZUF4aXMiLCJTdHJpbmdJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQiLCJDb25zdGFudHMiLCJtb25pdG9yIiwiZGVmYXVsdEludGVydmFsIiwiZGVmYXVsdExpbmVDb3VudCIsImNsYXNzTmFtZSQyIiwiTXVsdGlMb2dWaWV3Iiwib25WYWx1ZVVwZGF0ZV8iLCJmb3JtYXR0ZXJfIiwidGV4dGFyZWFFbGVtIiwibGluZUNvdW50IiwicmVhZE9ubHkiLCJ0ZXh0YXJlYUVsZW1fIiwic2hvdWxkU2Nyb2xsIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwibGluZXMiLCJNdWx0aUxvZ0NvbnRyb2xsZXIiLCJjbGFzc05hbWUkMSIsIlNpbmdsZUxvZ1ZpZXciLCJ2YWx1ZXMiLCJsYXN0VmFsdWUiLCJTaW5nbGVMb2dDb250cm9sbGVyIiwiQm9vbGVhbk1vbml0b3JQbHVnaW4iLCJHcmFwaEN1cnNvciIsImluZGV4XyIsIkdyYXBoTG9nVmlldyIsIm9uQ3Vyc29yQ2hhbmdlXyIsIm1pblZhbHVlXyIsImN1cnNvcl8iLCJncmFwaEVsZW1lbnQiLCJtYXhJbmRleCIsInBvaW50cyIsInR4IiwidHkiLCJHcmFwaExvZ0NvbnRyb2xsZXIiLCJvbkdyYXBoTW91c2VNb3ZlXyIsIm9uR3JhcGhNb3VzZUxlYXZlXyIsIm9uR3JhcGhQb2ludGVyRG93bl8iLCJvbkdyYXBoUG9pbnRlck1vdmVfIiwib25HcmFwaFBvaW50ZXJVcF8iLCJvZmZzZXRYIiwiY3JlYXRlRm9ybWF0dGVyIiwic2hvdWxkU2hvd0dyYXBoIiwiTnVtYmVyTW9uaXRvclBsdWdpbiIsImRlZmF1bHRCdWZmZXJTaXplIiwiX2MiLCJjcmVhdGVHcmFwaE1vbml0b3IiLCJjcmVhdGVUZXh0TW9uaXRvciIsIlN0cmluZ01vbml0b3JQbHVnaW4iLCJtdWx0aWxpbmUiLCJJbnB1dEJpbmRpbmciLCJ0YXJnZXRWYWx1ZSIsIndyaXRlXyIsIk1vbml0b3JCaW5kaW5nIiwicmVhZGVyXyIsIm5ld1ZhbHVlIiwibmV3QnVmZmVyIiwiY3JlYXRlUHVzaGVkQnVmZmVyIiwiY3JlYXRlVGlja2VyIiwiUGx1Z2luUG9vbCIsInBsdWdpbnNNYXBfIiwiYmxhZGVzIiwiaW5wdXRzIiwibW9uaXRvcnMiLCJ1bnNoaWZ0IiwicGx1Z2luIiwidmFsdWVBcmdzIiwiY3JlYXRlSW5wdXRCaW5kaW5nQ29udHJvbGxlciIsIlAiLCJjcmVhdGVNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIiLCJjcmVhdGVCbGFkZUNvbnRyb2xsZXIiLCJMaXN0QXBpIiwiU2xpZGVyQXBpIiwiVGV4dEFwaSIsIkxpc3RCbGFkZVBsdWdpbiIsImljIiwiUm9vdEFwaSIsInByZXNldCIsInRhcmdldHMiLCJpbXBvcnRQcmVzZXRKc29uIiwiaWJjIiwiZXhwb3J0UHJlc2V0SnNvbiIsIm1iYyIsIlJvb3RDb250cm9sbGVyIiwiU2xpZGVyQmxhZGVQbHVnaW4iLCJ2YyIsIlRleHRCbGFkZVBsdWdpbiIsImVtYmVkU3R5bGUiLCJjc3MiLCJxdWVyeVNlbGVjdG9yIiwic3R5bGVFbGVtIiwidHBTdHlsZSIsImhlYWQiLCJWRVJTSU9OIiwicHJlcmVsZWFzZSIsImNvcmVDb21wcyIsIm1ham9yIiwibWlub3IiLCJwYXRjaCIsIlBhbmUiLCJvcHRfY29uZmlnIiwicmVnaXN0ZXIiLCJjcmVhdGVEZWZhdWx0UGx1Z2luUG9vbCIsImNvbnRhaW5lckVsZW1fIiwiY29udGFpbmVyIiwiYm9keSIsImNyZWF0ZURlZmF1bHRXcmFwcGVyRWxlbWVudCIsInVzZXNEZWZhdWx0V3JhcHBlcl8iLCJzZXRVcERlZmF1bHRQbHVnaW5zXyIsImFscmVhZHlEaXNwb3NlZCIsInBhcmVudEVsZW0iLCJidW5kbGUiLCJwbHVnaW5zIiwiZW1iZWRQbHVnaW5TdHlsZV8iLCJnZXRBbGwiLCJyZWdpc3RlclBsdWdpbiIsImRlZmluZSIsImFtZCIsImdsb2JhbFRoaXMiLCJzZWxmIiwiVHdlYWtwYW5lIiwicGF0aCIsInN0YXJ0WCIsInN0YXJ0WSIsInNlZyIsImNvbW1hbmQiLCJ0b1VwcGVyQ2FzZSIsImNsb25lIiwidmVjMiIsIm9wdCIsIlJFQ1VSU0lPTl9MSU1JVCIsInJlY3Vyc2lvbiIsIkZMVF9FUFNJTE9OIiwiZXBzaWxvbiIsIlBBVEhfRElTVEFOQ0VfRVBTSUxPTiIsInBhdGhFcHNpbG9uIiwiY3VydmVfYW5nbGVfdG9sZXJhbmNlX2Vwc2lsb24iLCJhbmdsZUVwc2lsb24iLCJtX2FuZ2xlX3RvbGVyYW5jZSIsImFuZ2xlVG9sZXJhbmNlIiwibV9jdXNwX2xpbWl0IiwiY3VzcExpbWl0IiwiYzEiLCJjMiIsInNjYWxlIiwiZGlzdGFuY2VUb2xlcmFuY2UiLCJyZWN1cnNpdmUiLCJ4MSIsInkxIiwieDIiLCJ5MiIsIngzIiwieTMiLCJ4NCIsInk0IiwibGV2ZWwiLCJwaSIsIngxMiIsInkxMiIsIngyMyIsInkyMyIsIngzNCIsInkzNCIsIngxMjMiLCJ5MTIzIiwieDIzNCIsInkyMzQiLCJ4MTIzNCIsInkxMjM0IiwiZGExIiwiZGEyIiwiZDIiLCJkMyIsImEyMyIsImF0YW4yIiwiYmVnaW4iLCJhbG1vc3RFcXVhbCIsImFic29sdXRlRXJyb3IiLCJyZWxhdGl2ZUVycm9yIiwiREJMX0VQU0lMT04iLCJCWVRFU19QRVJfRUxFTUVOVCIsImFsbW9zdCIsImFic29sdXRlVG9sZXJhbmNlIiwicmVsYXRpdmVUb2xlcmFuY2UiLCJldmVyeSIsImEwIiwiYjAiLCJjc3NDb2xvciIsIm5hbWVzIiwicmdiTHVtaW5hbmNlIiwiSFNMVXRpbCIsImhleFRvUkdCQSIsIlJHQkFUb0hleCIsInJlbGF0aXZlTHVtaW5hbmNlIiwiY29udHJhc3RSYXRpbyIsImNvbG9yQSIsImNvbG9yQiIsIm9mZnNldEhTTCIsImhzbGEiLCJibGVuZCIsImZvcmVncm91bmQiLCJvcGFjaXR5IiwiYmciLCJmZyIsImMwIiwicmdiYSIsIlJHQkFUb0hTTEEiLCJIU0xBVG9SR0JBIiwibGluZWNsaXAiLCJhcnJheUFsbW9zdEVxdWFsIiwic3F1YXJlZERpc3RhbmNlIiwiYXJlUG9pbnRzQ29sbGluZWFyIiwicG9pbnQwIiwicG9pbnQxIiwicG9pbnQyIiwieDAiLCJ5MCIsInJlbW92ZUR1cGxpY2F0ZVBvaW50cyIsImxhc3RQb2ludCIsIm5ld1BhdGgiLCJjdXJQb2ludCIsInJlbW92ZUNvbGxpbmVhclBvaW50cyIsInJlbWFpbmluZ1BvaW50cyIsInAwIiwicDEiLCJwMiIsImNvbGxpbmVhciIsInNoaWZ0IiwiY2xpcFNlZ21lbnRUb0NpcmNsZSIsImNsaXBMaW5lVG9DaXJjbGUiLCJjbGlwUG9seWxpbmVzVG9Cb3giLCJwb2x5bGluZXMiLCJiYm94IiwiYm9yZGVyIiwiY2xvc2VMaW5lcyIsIkJvb2xlYW4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJjcmVhdGVIYXRjaExpbmVzIiwic3BhY2luZyIsInhtaW4iLCJ5bWluIiwieG1heCIsInltYXgiLCJzcXJ0Iiwicm90QW5nbGUiLCJjYSIsImNvcyIsInNhIiwic2luIiwiY3giLCJjeSIsImdldEJvdW5kcyIsImxvIiwicmFuZG9tIiwibWF0aCIsInBlbnBsb3QiLCJnZW9tZXRyeSIsInNoYWRlciIsInNxciIsImNpcmNsZSIsImNpcmNsZVJhZGl1cyIsImhpdHMiLCJkZWx0YSIsImRldCIsInNxcnREZXQiLCJwb2ludEluQ2lyY2xlIiwicmFkaXVzIiwiZGlzdGFuY2UiLCJwcm9qZWN0UG9pbnQiLCJzcmN4Iiwic3JjeSIsImRlc3R4IiwiZGVzdHkiLCJkaXN0IiwiY2xvc2VzdFBvaW50IiwicDFJbkNpcmNsZSIsInAySW5DaXJjbGUiLCJ2eCIsInZ5IiwicmF0aW8iLCJjbG9zZXN0UG9pbnRPbkxpbmVGcm9tUG9pbnQiLCJoaXRBIiwiaGl0QiIsImNsb3Nlc3RQb2ludE9uU2VnbWVudEZyb21Qb2ludCIsImludGVyc2VjdCIsImFsaWNlYmx1ZSIsImFudGlxdWV3aGl0ZSIsImFxdWEiLCJhcXVhbWFyaW5lIiwiYXp1cmUiLCJiZWlnZSIsImJpc3F1ZSIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZSIsImJsdWV2aW9sZXQiLCJicm93biIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyZWQiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiIsIndyYXAiLCJwYXJzZVN0eWxlIiwidGVzdCIsImV4ZWMiLCJyZ2JTdHlsZSIsImhzbFN0eWxlIiwicmdiU3RyIiwicmVwZWF0IiwiZmxvYXRIU0wyUkdCIiwiZmxvYXRSR0IySFNMIiwiZmxvYXRIU0wiLCJmbG9hdFJHQiIsIm1lcmdlUGF0aHMiLCJwYXRocyIsInBhdGgxSWR4IiwicGF0aDJJZHgiLCJtaW5JZHgiLCJtYXhJZHgiLCJtZXJnZWRQYXRoIiwic29ydCIsIm5ld1BhdGhzIiwibGFzdFBhdGgiLCJjdXJQdCIsImNsb3Nlc3QiLCJsYXN0UHQiLCJkaXN0YW5jZVRvRmlyc3QiLCJkaXN0YW5jZVRvTGFzdCIsImlkeCIsInJldmVyc2UiLCJjbG9zZXN0UGF0aCIsIm1lcmdlIiwibWVyZ2VUaHJlaHNvbGQiLCJtZXJnZVRocmVoc29sZFNxIiwiZ2MiLCJsb3djIiwiYWRqdXN0R2FtbWEiLCJyc3JnYiIsImdzcmdiIiwiYnNyZ2IiLCJhbHBoYVBhcmFtIiwicHQxIiwicHQyIiwidG8iLCJjeWNsZSIsImRlZmluZWQiLCJFUFNJTE9OIiwiY2xhbXAiLCJsZXJwIiwiaW52ZXJzZUxlcnAiLCJ0b0Zpbml0ZSIsImRlZmF1bHRWYWx1ZSIsImV4cGFuZFZlY3RvciIsImRpbXMiLCJzY2FsYXIiLCJsZXJwQXJyYXkiLCJuZXdBcnJheSIsIm1vZCIsImRhbXAiLCJsYW1iZGEiLCJkdCIsImV4cCIsImZyYWN0IiwiZGVnVG9SYWQiLCJyYWRUb0RlZyIsInBpbmdQb25nIiwibGluc3BhY2UiLCJlbmRwb2ludCIsImxlcnBGcmFtZXMiLCJ3aG9sZSIsImZyYW1lIiwibmV4dEZyYW1lIiwiY2xhbXAwMSIsInNtb290aHN0ZXAiLCJkYW1wQXJyYXkiLCJpbnB1dE1pbiIsImlucHV0TWF4Iiwib3V0cHV0TWluIiwib3V0cHV0TWF4Iiwib3V0VmFsIiwiZXhwYW5kMkQiLCJleHBhbmQzRCIsImV4cGFuZDREIiwiY29udmVydCIsInN2Z1BhdGhDb250b3VycyIsInN2Z1BhdGhQYXJzZSIsInN2Z1BhdGhBYnMiLCJzdmdQYXRoQXJjcyIsIm9wdGltaXplciIsIkRFRkFVTFRfUEVOX1RISUNLTkVTUyIsIkRFRkFVTFRfUEVOX1RISUNLTkVTU19VTklUIiwiREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0giLCJwYXRoc1RvU1ZHUGF0aHMiLCJzdmdQYXRoIiwiY29udmVydFRvU1ZHUGF0aCIsInBhdGhzVG9Qb2x5bGluZXMiLCJjdXJ2ZVJlc29sdXRpb24iLCJjb250b3VycyIsImVhY2hQYXRoIiwiZmVhdHVyZSIsImNvbW1hbmRzIiwic3ViQ29udG91ciIsInBhdGhzVG9TVkciLCJjb252ZXJ0T3B0aW9ucyIsInZpZXdVbml0cyIsInJvdW5kUGl4ZWwiLCJwcmVjaXNpb24iLCJwaXhlbHNQZXJJbmNoIiwib3B0aW1pemUiLCJvcHRpbWl6ZU9wdHMiLCJyZW1vdmVEdXBsaWNhdGVzIiwicmVtb3ZlQ29sbGluZWFyIiwic2hvdWxkU29ydCIsInNob3VsZE1lcmdlIiwic2hvdWxkUmVtb3ZlQ29sbGluZWFyIiwibWVyZ2VUaHJlc2hvbGQiLCJzdmdQYXRocyIsInZpZXdXaWR0aCIsInZpZXdIZWlnaHQiLCJmaWxsU3R5bGUiLCJzdHJva2VTdHlsZSIsImxpbmVXaWR0aCIsImxpbmVKb2luIiwibGluZUNhcCIsInBhdGhFbGVtZW50cyIsInRvQXR0ckxpc3QiLCJhdHRyIiwicmVuZGVyUGF0aHMiLCJjbGVhclJlY3QiLCJmaWxsUmVjdCIsImJlZ2luUGF0aCIsImRyYXdTVkdQYXRoIiwibGluZVRvIiwic3Ryb2tlIiwiY2FudmFzIiwiZXh0ZW5zaW9uIiwiaXNQYXRoIiwiaXNQb2x5bGluZSIsInBvbHlsaW5lVG9TVkdQYXRoIiwiY2IiLCJtb3ZlVG8iLCJiZXppZXJDdXJ2ZVRvIiwiY3JlYXRlUGF0aCIsImZuIiwicXVhZHJhdGljQ3VydmVUbyIsIl94MSIsIl95MSIsInBvbHlsaW5lc1RvU1ZHIiwid2FybiIsInJlbmRlclBvbHlsaW5lcyIsInNlZWRSYW5kb20iLCJTaW1wbGV4Tm9pc2UiLCJjcmVhdGVSYW5kb20iLCJkZWZhdWx0U2VlZCIsImN1cnJlbnRTZWVkIiwiY3VycmVudFJhbmRvbSIsIm5vaXNlR2VuZXJhdG9yIiwiZGVmYXVsdFJhbmRvbSIsIl9uZXh0R2F1c3NpYW4iLCJfaGFzTmV4dEdhdXNzaWFuIiwic2V0U2VlZCIsImdldFNlZWQiLCJnZXRSYW5kb21TZWVkIiwidmFsdWVOb25aZXJvIiwicGVybXV0ZU5vaXNlIiwiY3JlYXRlTm9pc2UiLCJub2lzZTFEIiwiZnJlcXVlbmN5IiwiYW1wbGl0dWRlIiwibm9pc2UyRCIsIm5vaXNlM0QiLCJub2lzZTREIiwiY2hhbmNlIiwicmFuZ2UiLCJyYW5nZUZsb29yIiwicGljayIsInNodWZmbGUiLCJyYW5kIiwib25DaXJjbGUiLCJpbnNpZGVDaXJjbGUiLCJvblNwaGVyZSIsInBoaSIsInRoZXRhIiwiYWNvcyIsImluc2lkZVNwaGVyZSIsImsiLCJjYnJ0IiwicXVhdGVybmlvbiIsInUxIiwidTIiLCJ1MyIsInNxMSIsInNxMiIsInRoZXRhMSIsInRoZXRhMiIsIndlaWdodGVkIiwid2VpZ2h0ZWRTZXQiLCJ3ZWlnaHRlZFNldEluZGV4IiwiZ2F1c3NpYW4iLCJtZWFuIiwic3RhbmRhcmREZXJpdmF0aW9uIiwibXVsdGlwbGllciIsInNlZWQiLCJ3ZWlnaHQiLCJ3ZWlnaHRzIiwidG90YWxXZWlnaHQiLCJjcmVhdGVSZWdsIiwiY3JlYXRlUXVhZCIsInBhcnNlQ29sb3IiLCJpc1RleHR1cmVMaWtlIiwiZ2wiLCJyZWdsT3B0cyIsImV4dGVuc2lvbnMiLCJvcHRpb25hbEV4dGVuc2lvbnMiLCJwcm9maWxlIiwib25Eb25lIiwiZHJhd1F1YWRDb21tYW5kIiwicmVnbCIsInF1YWQiLCJ0ZXh0dXJlTWFwIiwidW5pZm9ybXNNYXAiLCJ1bmlmb3JtcyIsInN0YXRlIiwiYmF0Y2hJRCIsInByZXZUZXgiLCJ0ZXh0dXJlIiwic2Npc3NvciIsImVuYWJsZSIsImJveCIsInByb3AiLCJ2ZXJ0IiwiZnVuYyIsInNyY1JHQiIsInNyY0FscGhhIiwiZHN0UkdCIiwiZHN0QWxwaGEiLCJhdHRyaWJ1dGVzIiwicG9zaXRpb24iLCJlbGVtZW50cyIsImNlbGxzIiwiZXJyIiwiaGFuZGxlRXJyb3IiLCJjbGVhckNvbG9yIiwiY2xlYXJBbHBoYSIsImNsZWFyIiwicmVuZGVyIiwicG9sbCIsImRlcHRoIiwic3RlbmNpbCIsImRyYXdRdWFkIiwiZmx1c2giLCJ1bmxvYWQiLCJkZXN0cm95IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaGFzT3duUHJvcGVydHkiLCJwcm9wSXNFbnVtZXJhYmxlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJvYmplY3RBc3NpZ24iLCJ0ZXN0MSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsInRlc3QzIiwibGV0dGVyIiwic2hvdWxkVXNlTmF0aXZlIiwic291cmNlIiwic3ltYm9scyIsInRvT2JqZWN0IiwiYnJvd3NlciIsImNvbW1vbmpzR2xvYmFsIiwicGVyZm9ybWFuY2UiLCJub3ciLCJEYXRlIiwiaXNQcm9taXNlXzEiLCJ0aGVuIiwiaXNEb20iLCJ3aW5kb3ciLCJOb2RlIiwibm9kZVR5cGUiLCJub2RlTmFtZSIsImdldENsaWVudEFQSSIsImFyZ3VtZW50cyQxIiwiaXNCcm93c2VyIiwiY2FjaGUiLCJzaGltIiwic3VwcG9ydHNBcmd1bWVudHNDbGFzcyIsInN1cHBvcnRlZCIsInVuc3VwcG9ydGVkIiwicFNsaWNlIiwiZGVlcEVxdWFsIiwiZXhwZWN0ZWQiLCJnZXRUaW1lIiwic3RyaWN0IiwiaXNVbmRlZmluZWRPck51bGwiLCJpc19hcmd1bWVudHMiLCJrYSIsImtiIiwib2JqRXF1aXYiLCJ0b2tlbiIsInRpbWV6b25lIiwidGltZXpvbmVDbGlwIiwiZGF0ZUZvcm1hdCIsImRhdGUiLCJtYXNrIiwidXRjIiwiZ210IiwibWFza1NsaWNlIiwibWFza3MiLCJEIiwiSCIsIk0iLCJMIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJXIiwidGFyZ2V0VGh1cnNkYXkiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInNldERhdGUiLCJnZXREYXkiLCJmaXJzdFRodXJzZGF5Iiwic2V0SG91cnMiLCJnZXRIb3VycyIsImdldFdlZWsiLCJOIiwiZG93IiwiZ2V0RGF5T2ZXZWVrIiwiZmxhZ3MiLCJkZCIsInBhZCIsImRkZCIsImkxOG4iLCJkYXlOYW1lcyIsImRkZGQiLCJtbSIsIm1tbSIsIm1vbnRoTmFtZXMiLCJtbW1tIiwieXkiLCJ5eXl5IiwiaGgiLCJISCIsIk1NIiwic3MiLCJ0aW1lTmFtZXMiLCJ0dCIsIlQiLCJUVCIsIloiLCJwb3AiLCJTIiwiZGVmYXVsdCIsInNob3J0RGF0ZSIsIm1lZGl1bURhdGUiLCJsb25nRGF0ZSIsImZ1bGxEYXRlIiwic2hvcnRUaW1lIiwibWVkaXVtVGltZSIsImxvbmdUaW1lIiwiaXNvRGF0ZSIsImlzb1RpbWUiLCJpc29EYXRlVGltZSIsImlzb1V0Y0RhdGVUaW1lIiwiZXhwaXJlc0hlYWRlckZvcm1hdCIsInJlcGVhdFN0cmluZyIsImxpbmsiLCJwYWRMZWZ0Iiwibm9vcCIsImRlZmF1bHRFeHRzIiwic3VmZml4Iiwic3VwcG9ydGVkRW5jb2RpbmdzIiwic3RyZWFtIiwiaXNTdGFydCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmlsZW5hbWUiLCJyZXNvbHZlRmlsZW5hbWUiLCJjbGllbnQiLCJzYXZlRGF0YVVSTCIsImRhdGFVUkwiLCJzcGxpdEluZGV4IiwiYnl0ZVN0cmluZyIsImF0b2IiLCJtaW1lTWF0Y2giLCJtaW1lIiwiYWIiLCJpYSIsIkJsb2IiLCJjcmVhdGVCbG9iRnJvbURhdGFVUkwiLCJibG9iIiwic2F2ZUJsb2IiLCJ2aXNpYmlsaXR5IiwiZG93bmxvYWQiLCJocmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwib25jbGljayIsInNldFRpbWVvdXQiLCJyZXZva2VPYmplY3RVUkwiLCJyZW1vdmVBdHRyaWJ1dGUiLCJjbGljayIsImZpbGUiLCJ0b3RhbEZyYW1lcyIsImxheWVyU3RyIiwidG90YWxMYXllcnMiLCJsYXllciIsInRpbWVTdGFtcCIsImhhc2giLCJjb21tb25UeXBvcyIsImRpbWVuc2lvbiIsImFuaW1hdGVkIiwiYW5pbWF0aW5nIiwidW5pdCIsIlA1IiwicGl4ZWxsYXRlZCIsImxvb3BpbmciLCJwaXhlbFBlckluY2giLCJhbGxLZXlzIiwiY2hlY2tTZXR0aW5ncyIsInNldHRpbmdzIiwicGFwZXJTaXplcyIsImRpY3QiLCJkaW1lbnNpb25zIiwiZGVmaW5lZCQxIiwiY29udmVyc2lvbnMiLCJzeXN0ZW0iLCJmYWN0b3IiLCJjbSIsInB0IiwiaW4iLCJmdCIsImFuY2hvcnMiLCJtZXRyaWMiLCJpbXBlcmlhbCIsImNvbnZlcnRMZW5ndGgiLCJmcm9tVW5pdCIsInRvVW5pdCIsInRvRmFjdG9yIiwiZnJvbUZhY3RvciIsImlzVG9QaXhlbCIsImZyb21Vbml0RGF0YSIsInRvVW5pdERhdGEiLCJhbmNob3IiLCJkZWNpbWFscyIsImNvbnZlcnREaXN0YW5jZSQxIiwidW5pdHNGcm9tIiwidW5pdHNUbyIsInJlc2l6ZUNhbnZhcyIsInN0eWxlV2lkdGgiLCJjYW52YXNXaWR0aCIsImNhbnZhc0hlaWdodCIsImhhc0RpbWVuc2lvbnMiLCJjaGVja0lmSGFzRGltZW5zaW9ucyIsImV4cG9ydGluZyIsInNjYWxlVG9GaXQiLCJzY2FsZVRvVmlldyIsInBpeGVsUmF0aW8iLCJleHBvcnRQaXhlbFJhdGlvIiwiYmxlZWQiLCJkZXZpY2VQaXhlbFJhdGlvIiwiYmFzZVBpeGVsUmF0aW8iLCJtYXhQaXhlbFJhdGlvIiwidHJpbVdpZHRoIiwidHJpbUhlaWdodCIsInJlZiIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsImdldFBhcmVudFNpemUiLCJwYXJlbnRXaWR0aCIsInBhcmVudEhlaWdodCIsImdldERpbWVuc2lvbnNGcm9tUHJlc2V0IiwiaGlnaGVzdCIsImxvd2VzdCIsIm9yaWVudGF0aW9uIiwibGFuZHNjYXBlIiwicmVhbFdpZHRoIiwicmVhbEhlaWdodCIsImFzcGVjdCIsIndpbmRvd0FzcGVjdCIsInNjYWxlVG9GaXRQYWRkaW5nIiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJnZXRDYW52YXNDb250ZXh0XzEiLCJhdHRyaWJzIiwiY3JlYXRlQ2FudmFzIiwib3duc0NhbnZhcyIsIm5ld0NhbnZhcyIsImNyZWF0ZUNhbnZhc0VsZW1lbnQiLCJwaXhlbGF0ZWQiLCJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCJtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJvSW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwid2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwibXNJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJTa2V0Y2hNYW5hZ2VyIiwiX3NldHRpbmdzIiwiX3Byb3BzIiwiX3NrZXRjaCIsIl9yYWYiLCJfcmVjb3JkVGltZW91dCIsIl9sYXN0UmVkcmF3UmVzdWx0IiwiX2lzUDVSZXNpemluZyIsIl9rZXlib2FyZFNob3J0Y3V0cyIsImVuYWJsZWQiLCJrZXlDb2RlIiwibWV0YUtleSIsImN0cmxLZXkiLCJ0b2dnbGVQbGF5IiwiY29tbWl0Iiwic2F2ZSIsImtleWJvYXJkU2hvcnRjdXRzIiwidGhpcyQxIiwiaG90a2V5cyIsInJlY29yZGluZyIsImVuZFJlY29yZCIsInJ1biIsInJlY29yZCIsImV4cG9ydEZyYW1lIiwicGxheWluZyIsInBhdXNlIiwicGxheSIsIl9hbmltYXRlSGFuZGxlciIsImFuaW1hdGUiLCJfcmVzaXplSGFuZGxlciIsInJlc2l6ZSIsInNrZXRjaCIsIl9jb21wdXRlUGxheWhlYWQiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX2NvbXB1dGVGcmFtZSIsInBsYXloZWFkIiwidGltZSIsImZwcyIsIl9jb21wdXRlQ3VycmVudEZyYW1lIiwiX2dldFNpemVQcm9wcyIsInZpZXdwb3J0V2lkdGgiLCJ2aWV3cG9ydEhlaWdodCIsInN0YXJ0ZWQiLCJfc2lnbmFsQmVnaW4iLCJ0aWNrIiwiX2NhbmNlbFRpbWVvdXRzIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJfbGFzdFRpbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzdG9wIiwiZGVsdGFUaW1lIiwiZXhwb3J0T3B0cyIsIl9jcmVhdGVFeHBvcnRPcHRpb25zIiwiZnJhbWVJbnRlcnZhbCIsIl9zaWduYWxFbmQiLCJiZWdpblJlY29yZCIsIl93cmFwQ29udGV4dFNjYWxlIiwiY2F0Y2giLCJyZXNwb25zZSIsIndhc1JlY29yZGluZyIsInNlcXVlbmNlIiwiZW5jb2RpbmdRdWFsaXR5IiwiZGF0ZWZvcm1hdCIsImFsbCIsInByZUV4cG9ydCIsImNvbW1pdE9wdHMiLCJfZG9FeHBvcnRGcmFtZSIsImRyYXdSZXN1bHQiLCJoYXNEYXRhT2JqZWN0IiwidG9EYXRhVVJMIiwiZXhwb3J0Q2FudmFzIiwibGF5ZXJMaXN0IiwiY3VyT3B0Iiwic2F2ZVBhcmFtIiwic2F2ZVByb21pc2UiLCJzYXZlRmlsZSIsInNhdmVSZXN1bHQiLCJzYXZlZEV2ZW50cyIsImV2ZW50V2l0aE91dHB1dCIsIm91dHB1dE5hbWUiLCJpc0NsaWVudCIsInNvbWUiLCJpc1N0cmVhbWluZyIsIm9mU2VxIiwicG9zdEV4cG9ydCIsIl9wcmVSZW5kZXIiLCJfcG9zdFJlbmRlciIsInA1Iiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVDb250ZXh0IiwicmVzdG9yZSIsInJlZHJhdyIsInN1Ym1pdERyYXdDYWxsIiwidXBkYXRlIiwibm90WWV0U3VwcG9ydGVkIiwib2xkQ2FudmFzIiwib2xkQ29udGV4dCIsInRpbWVPcHRzIiwidGltZVByb3BzIiwiZ2V0VGltZVByb3BzIiwiX3NldHVwR0xLZXkiLCJfYXBwZW5kQ2FudmFzSWZOZWVkZWQiLCJkcmF3Iiwib2xkU2l6ZXMiLCJuZXdQcm9wcyIsInBpeGVsRGVuc2l0eSIsInN0eWxlQ2FudmFzIiwibmV3U2l6ZXMiLCJjaGFuZ2VkIiwiZGVlcEVxdWFsXzEiLCJfc2l6ZUNoYW5nZWQiLCJmcmFtZUludGVydmFsTVMiLCJkZWx0YVRpbWVNUyIsImhhc0R1cmF0aW9uIiwiaXNOZXdGcmFtZSIsInBsYXliYWNrUmF0ZSIsIm5ld1RpbWUiLCJ0aW1lU2NhbGUiLCJpc0ZpbmlzaGVkIiwiaXNMb29wU3RhcnQiLCJsb29wIiwibGFzdEZyYW1lIiwiZGlzcGF0Y2giLCJtb3VudCIsInVubW91bnQiLCJkZXRhY2giLCJidWZmZXJEYXRhIiwiaGFzVG90YWxGcmFtZXMiLCJ0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiIsImR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzIiwic3RhcnRUaW1lIiwic3RhcnRGcmFtZSIsImhhc1N0YXJ0VGltZSIsImhhc1N0YXJ0RnJhbWUiLCJzZXR1cCIsImxvYWRBbmRSdW4iLCJjYW52YXNTa2V0Y2giLCJuZXdTZXR0aW5ncyIsImxvYWQiLCJjcmVhdGVTa2V0Y2giLCJwcmVsb2FkIiwiUDVDb25zdHJ1Y3RvciIsInA1U2tldGNoIiwiaXNHTCIsInJlbmRlcmVyIiwiV0VCR0wiLCJQMkQiLCJub0xvb3AiLCJzZXRBdHRyaWJ1dGVzIiwiX3JlbmRlcmVyIiwiZHJhd2luZ0NvbnRleHQiLCJsb2FkZXIiLCJhdHRhY2giLCJDQUNIRSIsInJ1bnRpbWVDb2xsaXNpb25zIiwiaG90SUQiLCJpc0hvdCIsImhvdCIsImlzSW5qZWN0aW5nIiwicHJldmlvdXNEYXRhIiwiY2FjaGVHZXQiLCJuZXh0Iiwib2xkTWFuYWdlciIsIm1hbmFnZXIiLCJQYXBlclNpemVzIiwiX2luc3RhbmNlb2YiLCJuYXRpdmVNYXAiLCJuYXRpdmVTZXQiLCJuYXRpdmVQcm9taXNlIiwiY2lyY3VsYXIiLCJpbmNsdWRlTm9uRW51bWVyYWJsZSIsImFsbFBhcmVudHMiLCJhbGxDaGlsZHJlbiIsInVzZUJ1ZmZlciIsIl9jbG9uZSIsImNoaWxkIiwicHJvdG8iLCJfX2lzQXJyYXkiLCJfX2lzUmVnRXhwIiwiUmVnRXhwIiwiX19nZXRSZWdFeHBGbGFncyIsImxhc3RJbmRleCIsIl9faXNEYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJrZXlDaGlsZCIsInZhbHVlQ2hpbGQiLCJlbnRyeUNoaWxkIiwiYXR0cnMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJzeW1ib2wiLCJkZXNjcmlwdG9yIiwiYWxsUHJvcGVydHlOYW1lcyIsIl9fb2JqVG9TdHIiLCJyZSIsImlnbm9yZUNhc2UiLCJjbG9uZVByb3RvdHlwZSIsInJnYjJoc2wiLCJyZ2IyaHN2IiwicmdiMmh3YiIsInJnYjJjbXlrIiwicmdiMmtleXdvcmQiLCJyZXZlcnNlS2V5d29yZHMiLCJyZ2IyeHl6IiwicmdiMmxhYiIsInh5eiIsImhzbDJyZ2IiLCJ0MSIsInQyIiwidDMiLCJoc3YycmdiIiwicSIsImh3YjJyZ2IiLCJod2IiLCJ3aCIsImJsIiwiY215azJyZ2IiLCJjbXlrIiwieHl6MnJnYiIsInh5ejJsYWIiLCJsYWIyeHl6IiwibGFiIiwibGFiMmxjaCIsImxhYjJyZ2IiLCJsY2gybGFiIiwibGNoIiwiaHIiLCJrZXl3b3JkMnJnYiIsImtleXdvcmQiLCJjc3NLZXl3b3JkcyIsInJnYjJsY2giLCJoc2wyaHN2IiwiaHNsMmh3YiIsImhzbDJjbXlrIiwiaHNsMmtleXdvcmQiLCJoc3YyaHNsIiwic2wiLCJoc3YyaHdiIiwiaHN2MmNteWsiLCJoc3Yya2V5d29yZCIsImh3YjJoc2wiLCJod2IyaHN2IiwiaHdiMmNteWsiLCJod2Iya2V5d29yZCIsImNteWsyaHNsIiwiY215azJoc3YiLCJjbXlrMmh3YiIsImNteWsya2V5d29yZCIsImtleXdvcmQyaHNsIiwia2V5d29yZDJoc3YiLCJrZXl3b3JkMmh3YiIsImtleXdvcmQyY215ayIsImtleXdvcmQybGFiIiwia2V5d29yZDJ4eXoiLCJ4eXoybGNoIiwibGNoMnh5eiIsImxjaDJyZ2IiLCJDb252ZXJ0ZXIiLCJwYWlyIiwiY29udnMiLCJyb3V0ZVNwYWNlIiwic3BhY2UiLCJnZXRWYWx1ZXMiLCJzZXRWYWx1ZXMiLCJ2YWxzIiwiZnNwYWNlIiwiamV0Iiwic3ByaW5nIiwic3VtbWVyIiwiYXV0dW1uIiwid2ludGVyIiwiYm9uZSIsImNvcHBlciIsImdyZXlzIiwieWlnbmJ1IiwiZ3JlZW5zIiwieWlvcnJkIiwiYmx1ZXJlZCIsInJkYnUiLCJwaWNuaWMiLCJyYWluYm93IiwicG9ydGxhbmQiLCJibGFja2JvZHkiLCJlYXJ0aCIsImVsZWN0cmljIiwidmlyaWRpcyIsImluZmVybm8iLCJtYWdtYSIsInBsYXNtYSIsIndhcm0iLCJjb29sIiwicmFpbmJvdy1zb2Z0IiwiYmF0aHltZXRyeSIsImNkb20iLCJjaGxvcm9waHlsbCIsImRlbnNpdHkiLCJmcmVlc3VyZmFjZS1ibHVlIiwiZnJlZXN1cmZhY2UtcmVkIiwib3h5Z2VuIiwicGFyIiwicGhhc2UiLCJzYWxpbml0eSIsInRlbXBlcmF0dXJlIiwidHVyYmlkaXR5IiwidmVsb2NpdHktYmx1ZSIsInZlbG9jaXR5LWdyZWVuIiwiY3ViZWhlbGl4IiwiY29sb3JTY2FsZSIsInJnYjJmbG9hdCIsInJnYjJoZXgiLCJkaWciLCJyZ2JhU3RyIiwic3BlYyIsImluZGljaWVzIiwiZnJvbXJnYmEiLCJ0b3JnYmEiLCJuc3RlcHMiLCJjbWFwIiwiY29sb3JtYXAiLCJuc2hhZGVzIiwic3RlcHMiLCJjb2xvcnMiLCJhbXQiLCJ0YXUiLCJ0YXVFcHNpbG9uIiwiUGF0aCIsIl94MCIsIl95MCIsImNsb3NlUGF0aCIsImFyY1RvIiwieDIxIiwieTIxIiwieDAxIiwieTAxIiwibDAxXzIiLCJ4MjAiLCJ5MjAiLCJsMjFfMiIsImwyMF8yIiwibDIxIiwibDAxIiwidDAxIiwidDIxIiwiYXJjIiwiY2N3IiwiY3ciLCJkYSIsInYwIiwiY29kZUIiLCJsYXN0Q29kZSIsImNvZGVBIiwiYml0Q29kZSIsInBhcnQiLCJlZGdlIiwicHJldiIsInByZXZJbnNpZGUiLCJpbnNpZGUiLCJiZXppZXJYIiwiYmV6aWVyWSIsInF1YWRYIiwicXVhZFkiLCJjdXJ2ZXMiLCJhcmNUb0N1cnZlIiwicngiLCJyeSIsInhBeGlzUm90YXRpb24iLCJsYXJnZUFyY0ZsYWciLCJzd2VlcEZsYWciLCJxdWFkcmF0aWMiLCJjc3RyIiwiY29udiIsImhzdmEiLCJjbXlrYSIsInNlZ21lbnQiLCJudW1iZXJzIiwicGFyc2VWYWx1ZXMiLCJub3JtYWxzIiwidXZzIiwiaXNUeXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkludDhBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJleHRlbmQiLCJlbmRsIiwicmFpc2UiLCJwcmVkIiwiZW5jb2xvbiIsInN0YW5kYXJkVHlwZUVoIiwiY2hlY2tPbmVPZiIsImNvbnN0cnVjdG9yS2V5cyIsImxlZnRQYWQiLCJTaGFkZXJGaWxlIiwiaGFzRXJyb3JzIiwiU2hhZGVyTGluZSIsImVycm9ycyIsIlNoYWRlckVycm9yIiwiZmlsZU51bWJlciIsImxpbmVOdW1iZXIiLCJndWVzc0NvbW1hbmQiLCJwYXQiLCJwYXQyIiwiZ3Vlc3NDYWxsU2l0ZSIsInBhcnNlU291cmNlIiwiZmlsZXMiLCJ1bmtub3duIiwiMCIsImxpbmVOdW1iZXJJbmZvIiwibmFtZUluZm8iLCJzYXZlQ29tbWFuZFJlZiIsIl9jb21tYW5kUmVmIiwiY29tbWFuZFJhaXNlIiwiY2FsbFNpdGUiLCJjaGVja0NvbW1hbmRUeXBlIiwiR0xfQ0xBTVBfVE9fRURHRSIsIkdMX05FQVJFU1QiLCJHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUIiwiR0xfTElORUFSX01JUE1BUF9ORUFSRVNUIiwiR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSIiwiR0xfTElORUFSX01JUE1BUF9MSU5FQVIiLCJHTF9GTE9BVCIsIkdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQiLCJHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xIiwiR0xfVU5TSUdORURfU0hPUlRfNV82XzUiLCJHTF9VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCIsIlRZUEVfU0laRSIsInBpeGVsU2l6ZSIsImNoYW5uZWxzIiwiaXNQb3cyIiwiY2hlY2skMSIsImJsb2NrIiwicGFyYW1ldGVyIiwicGFyYW0iLCJwb3NzaWJpbGl0aWVzIiwiY29tbWFuZFBhcmFtZXRlciIsImNvbW1hbmRUeXBlIiwibm5pIiwib25lT2YiLCJzaGFkZXJFcnJvciIsImdldFNoYWRlclBhcmFtZXRlciIsIkNPTVBJTEVfU1RBVFVTIiwiZXJyTG9nIiwiZ2V0U2hhZGVySW5mb0xvZyIsInR5cGVOYW1lIiwiRlJBR01FTlRfU0hBREVSIiwiZXJyTXNnIiwicGFyc2VFcnJvckxvZyIsImFubm90YXRlRmlsZXMiLCJzdHJpbmdzIiwic3R5bGVzIiwidG9rZW5QYXQiLCJjaHJvbWUiLCJsaW5rRXJyb3IiLCJwcm9ncmFtIiwiZnJhZ1NoYWRlciIsInZlcnRTaGFkZXIiLCJnZXRQcm9ncmFtUGFyYW1ldGVyIiwiTElOS19TVEFUVVMiLCJnZXRQcm9ncmFtSW5mb0xvZyIsImZyYWdQYXJzZSIsImhlYWRlciIsInNhdmVEcmF3SW5mbyIsInN0cmluZ1N0b3JlIiwiYWRkUHJvcHMiLCJfZnJhZ0lkIiwic3RhdGljIiwiX3ZlcnRJZCIsInVuaWZvcm1TZXQiLCJfdW5pZm9ybVNldCIsImR5bmFtaWMiLCJhdHRyaWJ1dGVTZXQiLCJfYXR0cmlidXRlU2V0IiwiX2hhc0NvdW50IiwiZnJhbWVidWZmZXJGb3JtYXQiLCJhdHRhY2htZW50IiwidGV4Rm9ybWF0cyIsInJiRm9ybWF0cyIsIl90ZXh0dXJlIiwiaW50ZXJuYWxmb3JtYXQiLCJyZW5kZXJidWZmZXIiLCJfcmVuZGVyYnVmZmVyIiwidGV4dHVyZTJEIiwiaW5mbyIsIm1pcERhdGEiLCJsaW1pdHMiLCJtYXhUZXh0dXJlU2l6ZSIsIndyYXBTIiwid3JhcFQiLCJtaXBtYXNrIiwibWluRmlsdGVyIiwibWFnRmlsdGVyIiwiZ2VuTWlwbWFwcyIsIm1pcGltYWdlcyIsImltYWdlcyIsIm13IiwibWgiLCJpbWciLCJjb21wcmVzc2VkIiwicm93U2l6ZSIsImNlaWwiLCJ1bnBhY2tBbGlnbm1lbnQiLCJ0ZXh0dXJlQ3ViZSIsImZhY2VzIiwiZmFjZSIsIm1pcG1hcHMiLCJWQVJJQUJMRV9DT1VOVEVSIiwiRFlOX0ZVTkMiLCJEWU5fQ09OU1RBTlQiLCJEWU5fQVJSQVkiLCJEeW5hbWljVmFyaWFibGUiLCJlc2NhcGVTdHIiLCJ0b0FjY2Vzc29yU3RyaW5nIiwic3BsaXRQYXJ0cyIsImZpcnN0Q2hhciIsImNoYXJBdCIsImxhc3RDaGFyIiwic3VicGFydHMiLCJpc0R5bmFtaWMiLCJfcmVnbFR5cGUiLCJ1bmJveCIsImFjY2Vzc29yIiwicmFmIiwiY2FuY2VsIiwiY2xlYXJUaW1lb3V0IiwiY2xvY2siLCJwYXJzZUV4dGVuc2lvbnMiLCJnZXRFbGVtZW50IiwiZGVzYyIsInBhcnNlQXJncyIsImFyZ3NfIiwiY29udGV4dEF0dHJpYnV0ZXMiLCJvbkRlc3Ryb3kiLCJkcmF3QXJyYXlzIiwiZHJhd0VsZW1lbnRzIiwiaXNXZWJHTENvbnRleHQiLCJyZXNpemVPYnNlcnZlciIsImJvdHRvbSIsIm1hcmdpbiIsInBhZGRpbmciLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJkaXNjb25uZWN0IiwicHJlbXVsdGlwbGllZEFscGhhIiwiY3JlYXRlQ29udGV4dCIsIkdMX0JZVEUkMSIsIkdMX1VOU0lHTkVEX0JZVEUkMiIsIkdMX1NIT1JUJDEiLCJHTF9VTlNJR05FRF9TSE9SVCQxIiwiR0xfSU5UJDEiLCJHTF9VTlNJR05FRF9JTlQkMSIsIkdMX0ZMT0FUJDIiLCJsb2cyIiwiY3JlYXRlUG9vbCIsImJ1ZmZlclBvb2wiLCJzeiIsIm5leHRQb3cxNiIsImJpbiIsImZyZWUiLCJhbGxvY1R5cGUiLCJmcmVlVHlwZSIsInplcm8iLCJ3cmFwTGltaXRzIiwibWF4QW5pc290cm9waWMiLCJleHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiLCJnZXRQYXJhbWV0ZXIiLCJtYXhEcmF3YnVmZmVycyIsIm1heENvbG9yQXR0YWNobWVudHMiLCJ3ZWJnbF9kcmF3X2J1ZmZlcnMiLCJyZWFkRmxvYXQiLCJvZXNfdGV4dHVyZV9mbG9hdCIsInJlYWRGbG9hdFRleHR1cmUiLCJjcmVhdGVUZXh0dXJlIiwiYmluZFRleHR1cmUiLCJ0ZXhJbWFnZTJEIiwiZmJvIiwiY3JlYXRlRnJhbWVidWZmZXIiLCJiaW5kRnJhbWVidWZmZXIiLCJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCJ2aWV3cG9ydCIsInBpeGVscyIsInJlYWRQaXhlbHMiLCJnZXRFcnJvciIsImRlbGV0ZUZyYW1lYnVmZmVyIiwiZGVsZXRlVGV4dHVyZSIsIm5wb3RUZXh0dXJlQ3ViZSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImFwcFZlcnNpb24iLCJjdWJlVGV4dHVyZSIsImFjdGl2ZVRleHR1cmUiLCJjb2xvckJpdHMiLCJkZXB0aEJpdHMiLCJzdGVuY2lsQml0cyIsInN1YnBpeGVsQml0cyIsInBvaW50U2l6ZURpbXMiLCJsaW5lV2lkdGhEaW1zIiwibWF4Vmlld3BvcnREaW1zIiwibWF4Q29tYmluZWRUZXh0dXJlVW5pdHMiLCJtYXhDdWJlTWFwU2l6ZSIsIm1heFJlbmRlcmJ1ZmZlclNpemUiLCJtYXhUZXh0dXJlVW5pdHMiLCJtYXhBdHRyaWJ1dGVzIiwibWF4VmVydGV4VW5pZm9ybXMiLCJtYXhWZXJ0ZXhUZXh0dXJlVW5pdHMiLCJtYXhWYXJ5aW5nVmVjdG9ycyIsIm1heEZyYWdtZW50VW5pZm9ybXMiLCJnbHNsIiwidmVuZG9yIiwidmVyc2lvbiIsImlzTkRBcnJheUxpa2UiLCJzaGFwZSIsInN0cmlkZSIsImZsYXR0ZW5VdGlscyIsImFycmF5XyIsImZsYXR0ZW4iLCJvdXRfIiwibngiLCJmbGF0dGVuMUQiLCJueSIsInB0ciIsInJvdyIsImZsYXR0ZW4yRCIsImZsYXR0ZW4zRCIsImZsYXR0ZW5SZWMiLCJueiIsInB0cl8iLCJjb2wiLCJhcnJheVR5cGVzIiwiW29iamVjdCBJbnQ4QXJyYXldIiwiW29iamVjdCBJbnQxNkFycmF5XSIsIltvYmplY3QgSW50MzJBcnJheV0iLCJbb2JqZWN0IFVpbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLCJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIltvYmplY3QgVWludDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDY0QXJyYXldIiwiW29iamVjdCBBcnJheUJ1ZmZlcl0iLCJnbFR5cGVzIiwiaW50OCIsImludDE2IiwiaW50MzIiLCJ1aW50MTYiLCJ1aW50MzIiLCJmbG9hdCIsImZsb2F0MzIiLCJ1c2FnZVR5cGVzIiwiYXJyYXlGbGF0dGVuIiwiYXJyYXlTaGFwZSIsIkdMX1NUQVRJQ19EUkFXIiwiR0xfU1RSRUFNX0RSQVciLCJHTF9VTlNJR05FRF9CWVRFJDMiLCJHTF9GTE9BVCQzIiwiRFRZUEVTX1NJWkVTIiwidHlwZWRBcnJheUNvZGUiLCJjb3B5QXJyYXkiLCJpbnAiLCJ0cmFuc3Bvc2UiLCJzaGFwZVgiLCJzaGFwZVkiLCJzdHJpZGVYIiwic3RyaWRlWSIsInByaW1UeXBlcyIsInRyaWFuZ2xlcyIsInRyaWFuZ2xlIiwibGluZSBsb29wIiwibGluZSBzdHJpcCIsInRyaWFuZ2xlIHN0cmlwIiwidHJpYW5nbGUgZmFuIiwiR0xfUE9JTlRTIiwiR0xfTElORVMiLCJHTF9UUklBTkdMRVMiLCJHTF9CWVRFJDIiLCJHTF9VTlNJR05FRF9CWVRFJDQiLCJHTF9TSE9SVCQyIiwiR0xfVU5TSUdORURfU0hPUlQkMiIsIkdMX0lOVCQyIiwiR0xfVU5TSUdORURfSU5UJDIiLCJHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiIsIkdMX1NUUkVBTV9EUkFXJDEiLCJHTF9TVEFUSUNfRFJBVyQxIiwiRkxPQVQiLCJJTlQiLCJHTF9VTlNJR05FRF9TSE9SVCQ0IiwiY29udmVydFRvSGFsZkZsb2F0IiwidXNob3J0cyIsInNnbiIsImZyYWMiLCJpc0FycmF5TGlrZSIsImlzUG93MiQxIiwiR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMiLCJHTF9URVhUVVJFXzJEJDEiLCJHTF9URVhUVVJFX0NVQkVfTUFQJDEiLCJHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMSIsIkdMX1JHQkEkMSIsIkdMX0FMUEhBIiwiR0xfUkdCIiwiR0xfTFVNSU5BTkNFIiwiR0xfTFVNSU5BTkNFX0FMUEhBIiwiR0xfUkdCQTQiLCJHTF9SR0I1X0ExIiwiR0xfUkdCNTY1IiwiR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCQxIiwiR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSQxIiwiR0xfVU5TSUdORURfU0hPUlRfNV82XzUkMSIsIkdMX1VOU0lHTkVEX0lOVF8yNF84X1dFQkdMJDEiLCJHTF9ERVBUSF9DT01QT05FTlQiLCJHTF9ERVBUSF9TVEVOQ0lMIiwiR0xfU1JHQl9FWFQiLCJHTF9TUkdCX0FMUEhBX0VYVCIsIkdMX0hBTEZfRkxPQVRfT0VTJDEiLCJHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUIiwiR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQiLCJHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVCIsIkdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUIiwiR0xfQ09NUFJFU1NFRF9SR0JfQVRDX1dFQkdMIiwiR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19FWFBMSUNJVF9BTFBIQV9XRUJHTCIsIkdMX0NPTVBSRVNTRURfUkdCQV9BVENfSU5URVJQT0xBVEVEX0FMUEhBX1dFQkdMIiwiR0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyIsIkdMX0NPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUciLCJHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRyIsIkdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HIiwiR0xfQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTCIsIkdMX1VOU0lHTkVEX0JZVEUkNSIsIkdMX1VOU0lHTkVEX1NIT1JUJDMiLCJHTF9VTlNJR05FRF9JTlQkMyIsIkdMX0ZMT0FUJDQiLCJHTF9URVhUVVJFX1dSQVBfUyIsIkdMX1RFWFRVUkVfV1JBUF9UIiwiR0xfUkVQRUFUIiwiR0xfQ0xBTVBfVE9fRURHRSQxIiwiR0xfTUlSUk9SRURfUkVQRUFUIiwiR0xfVEVYVFVSRV9NQUdfRklMVEVSIiwiR0xfVEVYVFVSRV9NSU5fRklMVEVSIiwiR0xfTkVBUkVTVCQxIiwiR0xfTElORUFSIiwiR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCQxIiwiR0xfTElORUFSX01JUE1BUF9ORUFSRVNUJDEiLCJHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIkMSIsIkdMX0xJTkVBUl9NSVBNQVBfTElORUFSJDEiLCJHTF9HRU5FUkFURV9NSVBNQVBfSElOVCIsIkdMX0RPTlRfQ0FSRSIsIkdMX0ZBU1RFU1QiLCJHTF9OSUNFU1QiLCJHTF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCIsIkdMX1VOUEFDS19BTElHTk1FTlQiLCJHTF9VTlBBQ0tfRkxJUF9ZX1dFQkdMIiwiR0xfVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIiwiR0xfVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIsIkdMX0JST1dTRVJfREVGQVVMVF9XRUJHTCIsIkdMX1RFWFRVUkUwJDEiLCJNSVBNQVBfRklMVEVSUyIsIkNIQU5ORUxTX0ZPUk1BVCIsIkZPUk1BVF9DSEFOTkVMUyIsIm9iamVjdE5hbWUiLCJDQU5WQVNfQ0xBU1MiLCJPRkZTQ1JFRU5DQU5WQVNfQ0xBU1MiLCJDT05URVhUMkRfQ0xBU1MiLCJCSVRNQVBfQ0xBU1MiLCJJTUFHRV9DTEFTUyIsIlZJREVPX0NMQVNTIiwiUElYRUxfQ0xBU1NFUyIsIlRZUEVfU0laRVMiLCJGT1JNQVRfU0laRVNfU1BFQ0lBTCIsImlzTnVtZXJpY0FycmF5IiwiaXNSZWN0QXJyYXkiLCJjbGFzc1N0cmluZyIsImlzQ2FudmFzRWxlbWVudCIsImlzT2Zmc2NyZWVuQ2FudmFzIiwiaXNQaXhlbERhdGEiLCJ0eXBlZEFycmF5Q29kZSQxIiwicHJlQ29udmVydCIsImltYWdlIiwicG9zdENvbnZlcnQiLCJnZXRUZXh0dXJlU2l6ZSIsImlzTWlwbWFwIiwiaXNDdWJlIiwidG90YWwiLCJjcmVhdGVUZXh0dXJlU2V0IiwicmVnbFBvbGwiLCJjb250ZXh0U3RhdGUiLCJzdGF0cyIsIm1pcG1hcEhpbnQiLCJkb24ndCBjYXJlIiwiZG9udCBjYXJlIiwibmljZSIsImZhc3QiLCJ3cmFwTW9kZXMiLCJtaXJyb3IiLCJtYWdGaWx0ZXJzIiwibmVhcmVzdCIsImxpbmVhciIsIm1pbkZpbHRlcnMiLCJtaXBtYXAiLCJuZWFyZXN0IG1pcG1hcCBuZWFyZXN0IiwibGluZWFyIG1pcG1hcCBuZWFyZXN0IiwibmVhcmVzdCBtaXBtYXAgbGluZWFyIiwibGluZWFyIG1pcG1hcCBsaW5lYXIiLCJjb2xvclNwYWNlIiwibm9uZSIsInRleHR1cmVUeXBlcyIsInJnYmE0IiwicmdiNTY1IiwicmdiNSBhMSIsInRleHR1cmVGb3JtYXRzIiwibHVtaW5hbmNlIiwibHVtaW5hbmNlIGFscGhhIiwiY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzIiwiZXh0X3NyZ2IiLCJzcmdiIiwic3JnYmEiLCJvZXNfdGV4dHVyZV9oYWxmX2Zsb2F0Iiwid2ViZ2xfZGVwdGhfdGV4dHVyZSIsImRlcHRoIHN0ZW5jaWwiLCJ3ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIsInJnYiBzM3RjIGR4dDEiLCJyZ2JhIHMzdGMgZHh0MSIsInJnYmEgczN0YyBkeHQzIiwicmdiYSBzM3RjIGR4dDUiLCJ3ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIiwicmdiIGF0YyIsInJnYmEgYXRjIGV4cGxpY2l0IGFscGhhIiwicmdiYSBhdGMgaW50ZXJwb2xhdGVkIGFscGhhIiwid2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIiwicmdiIHB2cnRjIDRicHB2MSIsInJnYiBwdnJ0YyAyYnBwdjEiLCJyZ2JhIHB2cnRjIDRicHB2MSIsInJnYmEgcHZydGMgMmJwcHYxIiwid2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiLCJzdXBwb3J0ZWRDb21wcmVzc2VkRm9ybWF0cyIsInN1cHBvcnRlZEZvcm1hdHMiLCJ0ZXh0dXJlRm9ybWF0c0ludmVydCIsInRleHR1cmVUeXBlc0ludmVydCIsIm1hZ0ZpbHRlcnNJbnZlcnQiLCJtaW5GaWx0ZXJzSW52ZXJ0Iiwid3JhcE1vZGVzSW52ZXJ0IiwiY29sb3JGb3JtYXRzIiwiZ2xlbnVtIiwiVGV4RmxhZ3MiLCJwcmVtdWx0aXBseUFscGhhIiwiZmxpcFkiLCJjb3B5RmxhZ3MiLCJvdGhlciIsInBhcnNlRmxhZ3MiLCJhbGlnbm1lbnQiLCJoYXNDaGFubmVscyIsImhhc0Zvcm1hdCIsImZvcm1hdFN0ciIsInNldEZsYWdzIiwicGl4ZWxTdG9yZWkiLCJUZXhJbWFnZSIsInhPZmZzZXQiLCJ5T2Zmc2V0IiwibmVlZHNGcmVlIiwibmVlZHNDb3B5IiwicGFyc2VJbWFnZSIsInZpZXdXIiwidmlld0giLCJjb252ZXJ0ZWQiLCJjb252ZXJ0RGF0YSIsInNoYXBlQyIsInN0cmlkZUMiLCJ0cmFuc3Bvc2VEYXRhIiwiaXNCaXRtYXAiLCJpc0ltYWdlRWxlbWVudCIsIm5hdHVyYWxXaWR0aCIsIm5hdHVyYWxIZWlnaHQiLCJpc1ZpZGVvRWxlbWVudCIsInZpZGVvV2lkdGgiLCJ2aWRlb0hlaWdodCIsImFsbG9jRGF0YSIsInNldEltYWdlIiwibWlwbGV2ZWwiLCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsImNvcHlUZXhJbWFnZTJEIiwic2V0U3ViSW1hZ2UiLCJ0ZXhTdWJJbWFnZTJEIiwiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCJjb3B5VGV4U3ViSW1hZ2UyRCIsImltYWdlUG9vbCIsImFsbG9jSW1hZ2UiLCJmcmVlSW1hZ2UiLCJNaXBNYXAiLCJwYXJzZU1pcE1hcEZyb21TaGFwZSIsInBhcnNlTWlwTWFwRnJvbU9iamVjdCIsInNldE1pcE1hcCIsIm1pcFBvb2wiLCJhbGxvY01pcE1hcCIsImZyZWVNaXBNYXAiLCJUZXhJbmZvIiwiYW5pc290cm9waWMiLCJwYXJzZVRleEluZm8iLCJtYWciLCJvcHRXcmFwUyIsIm9wdFdyYXBUIiwiaGFzTWlwTWFwIiwic2V0VGV4SW5mbyIsInRleFBhcmFtZXRlcmkiLCJoaW50IiwiZ2VuZXJhdGVNaXBtYXAiLCJ0ZXh0dXJlQ291bnQiLCJ0ZXh0dXJlU2V0IiwibnVtVGV4VW5pdHMiLCJ0ZXh0dXJlVW5pdHMiLCJSRUdMVGV4dHVyZSIsInJlZkNvdW50IiwiYmluZENvdW50IiwidGV4SW5mbyIsInRlbXBCaW5kIiwidGVtcFJlc3RvcmUiLCJoYW5kbGUiLCJ1bmJpbmQiLCJkZWNSZWYiLCJnZXRUb3RhbFRleHR1cmVTaXplIiwiY3JlYXRlMkQiLCJyZWdsVGV4dHVyZTJEIiwic3ViaW1hZ2UiLCJ4XyIsInlfIiwibGV2ZWxfIiwiaW1hZ2VEYXRhIiwid18iLCJoXyIsIl93IiwiX2giLCJjcmVhdGVDdWJlIiwiYTMiLCJhNCIsImE1IiwiY3ViZUNvdW50IiwicmVnbFRleHR1cmVDdWJlIiwiZmFjZUlucHV0IiwicmFkaXVzXyIsImdldFRleHR1cmUiLCJ3cmFwcGVyIiwidGV4IiwiR0xfUkVOREVSQlVGRkVSIiwiR0xfUkdCQTQkMSIsIkZPUk1BVF9TSVpFUyIsImdldFJlbmRlcmJ1ZmZlclNpemUiLCJ3cmFwUmVuZGVyYnVmZmVycyIsImZvcm1hdFR5cGVzIiwiZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iiwid2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0IiwiZm9ybWF0VHlwZXNJbnZlcnQiLCJyZW5kZXJidWZmZXJDb3VudCIsInJlbmRlcmJ1ZmZlclNldCIsIlJFR0xSZW5kZXJidWZmZXIiLCJyYiIsImJpbmRSZW5kZXJidWZmZXIiLCJkZWxldGVSZW5kZXJidWZmZXIiLCJnZXRUb3RhbFJlbmRlcmJ1ZmZlclNpemUiLCJjcmVhdGVSZW5kZXJidWZmZXIiLCJyZWdsUmVuZGVyYnVmZmVyIiwicmVuZGVyYnVmZmVyU3RvcmFnZSIsIkdMX0ZSQU1FQlVGRkVSJDEiLCJHTF9SRU5ERVJCVUZGRVIkMSIsIkdMX1RFWFRVUkVfMkQkMiIsIkdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQyIiwiR0xfQ09MT1JfQVRUQUNITUVOVDAkMSIsIkdMX0RFUFRIX0FUVEFDSE1FTlQiLCJHTF9TVEVOQ0lMX0FUVEFDSE1FTlQiLCJHTF9ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQiLCJHTF9GUkFNRUJVRkZFUl9DT01QTEVURSQxIiwiR0xfREVQVEhfQ09NUE9ORU5UJDEiLCJjb2xvclRleHR1cmVGb3JtYXRFbnVtcyIsInRleHR1cmVGb3JtYXRDaGFubmVscyIsInRleHR1cmVUeXBlU2l6ZXMiLCJHTF9ERVBUSF9DT01QT05FTlQxNiQxIiwiR0xfU1RFTkNJTF9JTkRFWDgkMSIsIkdMX0RFUFRIX1NURU5DSUwkMiIsImNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0RW51bXMiLCJzdGF0dXNDb2RlIiwiR0xfRkxPQVQkNiIsIkdMX0FSUkFZX0JVRkZFUiQxIiwiQXR0cmlidXRlUmVjb3JkIiwibm9ybWFsaXplZCIsImRpdmlzb3IiLCJHTF9GUkFHTUVOVF9TSEFERVIiLCJHTF9WRVJURVhfU0hBREVSIiwiR0xfQUNUSVZFX1VOSUZPUk1TIiwiR0xfQUNUSVZFX0FUVFJJQlVURVMiLCJHTF9SR0JBJDMiLCJHTF9VTlNJR05FRF9CWVRFJDciLCJHTF9QQUNLX0FMSUdOTUVOVCIsIkdMX0ZMT0FUJDciLCJ3cmFwUmVhZFBpeGVscyIsImZyYW1lYnVmZmVyU3RhdGUiLCJnbEF0dHJpYnV0ZXMiLCJyZWFkUGl4ZWxzSW1wbCIsInByZXNlcnZlRHJhd2luZ0J1ZmZlciIsImNvbG9yQXR0YWNobWVudHMiLCJmcmFtZWJ1ZmZlcldpZHRoIiwiZnJhbWVidWZmZXJIZWlnaHQiLCJzZXRGQk8iLCJmcmFtZWJ1ZmZlciIsInJlYWRQaXhlbHNGQk8iLCJDVVRFX0NPTVBPTkVOVFMiLCJHTF9VTlNJR05FRF9CWVRFJDgiLCJBVFRSSUJfU1RBVEVfUE9JTlRFUiIsIkFUVFJJQl9TVEFURV9DT05TVEFOVCIsIkRZTl9GVU5DJDEiLCJEWU5fUFJPUCQxIiwiRFlOX0NPTlRFWFQkMSIsIkRZTl9TVEFURSQxIiwiRFlOX1RIVU5LIiwiRFlOX0NPTlNUQU5UJDEiLCJEWU5fQVJSQVkkMSIsIlNfRElUSEVSIiwiU19CTEVORF9FTkFCTEUiLCJTX0JMRU5EX0NPTE9SIiwiU19CTEVORF9FUVVBVElPTiIsIlNfQkxFTkRfRlVOQyIsIlNfREVQVEhfRU5BQkxFIiwiU19ERVBUSF9GVU5DIiwiU19ERVBUSF9SQU5HRSIsIlNfREVQVEhfTUFTSyIsIlNfQ09MT1JfTUFTSyIsIlNfQ1VMTF9FTkFCTEUiLCJTX0NVTExfRkFDRSIsIlNfRlJPTlRfRkFDRSIsIlNfTElORV9XSURUSCIsIlNfUE9MWUdPTl9PRkZTRVRfRU5BQkxFIiwiU19QT0xZR09OX09GRlNFVF9PRkZTRVQiLCJTX1NBTVBMRV9BTFBIQSIsIlNfU0FNUExFX0VOQUJMRSIsIlNfU0FNUExFX0NPVkVSQUdFIiwiU19TVEVOQ0lMX0VOQUJMRSIsIlNfU1RFTkNJTF9NQVNLIiwiU19TVEVOQ0lMX0ZVTkMiLCJTX1NURU5DSUxfT1BGUk9OVCIsIlNfU1RFTkNJTF9PUEJBQ0siLCJTX1NDSVNTT1JfRU5BQkxFIiwiU19TQ0lTU09SX0JPWCIsIlNfVklFV1BPUlQiLCJTX1BST0ZJTEUiLCJTX0ZSQU1FQlVGRkVSIiwiU19WRVJUIiwiU19GUkFHIiwiU19FTEVNRU5UUyIsIlNfUFJJTUlUSVZFIiwiU19DT1VOVCIsIlNfT0ZGU0VUIiwiU19JTlNUQU5DRVMiLCJTX1ZBTyIsIlNfRlJBTUVCVUZGRVJfV0lEVEgiLCJTX0ZSQU1FQlVGRkVSX0hFSUdIVCIsIlNfVklFV1BPUlRfV0lEVEgiLCJTX1ZJRVdQT1JUX0hFSUdIVCIsIlNfRFJBV0lOR0JVRkZFUl9XSURUSCIsIlNfRFJBV0lOR0JVRkZFUiIsIlNfRFJBV0lOR0JVRkZFUl9IRUlHSFQiLCJORVNURURfT1BUSU9OUyIsIkdMX0FSUkFZX0JVRkZFUiQyIiwiR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIkMSIsIkdMX1RFWFRVUkVfMkQkMyIsIkdMX1RFWFRVUkVfQ1VCRV9NQVAkMiIsIkdMX0NVTExfRkFDRSIsIkdMX0JMRU5EIiwiR0xfRElUSEVSIiwiR0xfU1RFTkNJTF9URVNUIiwiR0xfREVQVEhfVEVTVCIsIkdMX1NDSVNTT1JfVEVTVCIsIkdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwiLCJHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UiLCJHTF9TQU1QTEVfQ09WRVJBR0UiLCJHTF9GTE9BVCQ4IiwiR0xfRkxPQVRfVkVDMiIsIkdMX0ZMT0FUX1ZFQzMiLCJHTF9GTE9BVF9WRUM0IiwiR0xfSU5UJDMiLCJHTF9JTlRfVkVDMiIsIkdMX0lOVF9WRUMzIiwiR0xfSU5UX1ZFQzQiLCJHTF9CT09MIiwiR0xfQk9PTF9WRUMyIiwiR0xfQk9PTF9WRUMzIiwiR0xfQk9PTF9WRUM0IiwiR0xfRkxPQVRfTUFUMiIsIkdMX0ZMT0FUX01BVDMiLCJHTF9GTE9BVF9NQVQ0IiwiR0xfU0FNUExFUl8yRCIsIkdMX1NBTVBMRVJfQ1VCRSIsIkdMX1RSSUFOR0xFUyQxIiwiR0xfRlJPTlQiLCJHTF9CQUNLIiwiR0xfQ1ciLCJHTF9DQ1ciLCJHTF9NSU5fRVhUIiwiR0xfTUFYX0VYVCIsIkdMX0FMV0FZUyIsIkdMX0tFRVAiLCJHTF9aRVJPIiwiR0xfT05FIiwiR0xfRlVOQ19BREQiLCJHTF9MRVNTIiwiR0xfRlJBTUVCVUZGRVIkMiIsIkdMX0NPTE9SX0FUVEFDSE1FTlQwJDIiLCJibGVuZEZ1bmNzIiwib25lIiwic3JjIGNvbG9yIiwib25lIG1pbnVzIHNyYyBjb2xvciIsInNyYyBhbHBoYSIsIm9uZSBtaW51cyBzcmMgYWxwaGEiLCJkc3QgY29sb3IiLCJvbmUgbWludXMgZHN0IGNvbG9yIiwiZHN0IGFscGhhIiwib25lIG1pbnVzIGRzdCBhbHBoYSIsImNvbnN0YW50IGNvbG9yIiwib25lIG1pbnVzIGNvbnN0YW50IGNvbG9yIiwiY29uc3RhbnQgYWxwaGEiLCJvbmUgbWludXMgY29uc3RhbnQgYWxwaGEiLCJzcmMgYWxwaGEgc2F0dXJhdGUiLCJpbnZhbGlkQmxlbmRDb21iaW5hdGlvbnMiLCJjb21wYXJlRnVuY3MiLCJuZXZlciIsImxlc3MiLCI8IiwiZXF1YWwiLCI9IiwiPT0iLCI9PT0iLCJsZXF1YWwiLCI8PSIsImdyZWF0ZXIiLCI+Iiwibm90ZXF1YWwiLCIhPSIsIiE9PSIsImdlcXVhbCIsIj49IiwiYWx3YXlzIiwic3RlbmNpbE9wcyIsImtlZXAiLCJpbmNyZW1lbnQiLCJkZWNyZW1lbnQiLCJpbmNyZW1lbnQgd3JhcCIsImRlY3JlbWVudCB3cmFwIiwiaW52ZXJ0Iiwic2hhZGVyVHlwZSIsIm9yaWVudGF0aW9uVHlwZSIsImlzQnVmZmVyQXJncyIsInNvcnRTdGF0ZSIsIkRlY2xhcmF0aW9uIiwidGhpc0RlcCIsImNvbnRleHREZXAiLCJwcm9wRGVwIiwiYXBwZW5kIiwiaXNTdGF0aWMiLCJkZWNsIiwiY3JlYXRlU3RhdGljRGVjbCIsImNyZWF0ZUR5bmFtaWNEZWNsIiwiZHluIiwibnVtQXJncyIsInN1YkR5biIsInN1YkFyZ3MiLCJTQ09QRV9ERUNMIiwicmVnbENvcmUiLCJidWZmZXJTdGF0ZSIsImVsZW1lbnRTdGF0ZSIsInRleHR1cmVTdGF0ZSIsInVuaWZvcm1TdGF0ZSIsImF0dHJpYnV0ZVN0YXRlIiwic2hhZGVyU3RhdGUiLCJkcmF3U3RhdGUiLCJ0aW1lciIsIlJlY29yZCIsImJsZW5kRXF1YXRpb25zIiwic3VidHJhY3QiLCJyZXZlcnNlIHN1YnRyYWN0IiwiZXh0X2JsZW5kX21pbm1heCIsImV4dEluc3RhbmNpbmciLCJhbmdsZV9pbnN0YW5jZWRfYXJyYXlzIiwiZXh0RHJhd0J1ZmZlcnMiLCJjdXJyZW50U3RhdGUiLCJkaXJ0eSIsIm5leHRTdGF0ZSIsIkdMX1NUQVRFX05BTUVTIiwiR0xfRkxBR1MiLCJHTF9WQVJJQUJMRVMiLCJwcm9wTmFtZSIsInN0YXRlRmxhZyIsInNuYW1lIiwiY2FwIiwiaW5pdCIsInN0YXRlVmFyaWFibGUiLCJkcmF3aW5nQnVmZmVyV2lkdGgiLCJkcmF3aW5nQnVmZmVySGVpZ2h0Iiwic2hhcmVkU3RhdGUiLCJjdXJyZW50IiwidmFvIiwic2hhcmVkQ29uc3RhbnRzIiwiYmFja0J1ZmZlciIsImRyYXdCdWZmZXIiLCJkcmF3Q2FsbENvdW50ZXIiLCJjcmVhdGVSRUdMRW52aXJvbm1lbnQiLCJlbnYiLCJ2YXJDb3VudGVyIiwibGlua2VkTmFtZXMiLCJsaW5rZWRWYWx1ZXMiLCJ2YXJzIiwiZGVmIiwic2NvcGUiLCJlbnRyeSIsImV4aXQiLCJlbnRyeVRvU3RyaW5nIiwiZXhpdFRvU3RyaW5nIiwiZ2xvYmFsQmxvY2siLCJwcm9jZWR1cmVzIiwicHJvYyIsImNvdW50IiwiYm9keVRvU3RyaW5nIiwiY29uZCIsInRoZW5CbG9jayIsImVsc2VCbG9jayIsInRoZW5Ub1N0cmluZyIsImVsc2VUb1N0cmluZyIsImVsc2UiLCJlbHNlQ2xhdXNlIiwiY29tcGlsZSIsImNyZWF0ZUVudmlyb25tZW50IiwiYmF0Y2hJZCIsIlNIQVJFRCIsInNoYXJlZCIsIkNIRUNLIiwiY29tbWFuZFN0ciIsImFzc2VydCIsIm5leHRWYXJzIiwiY3VycmVudFZhcnMiLCJ2YXJpYWJsZSIsImNvbnN0YW50cyIsImludm9rZSIsImFyZ0xpc3QiLCJhdHRyaWJDYWNoZSIsInNjb3BlQXR0cmlicyIsInNjb3BlQXR0cmliIiwicGFyc2VBcmd1bWVudHMiLCJzdGF0aWNPcHRpb25zIiwiZHluYW1pY09wdGlvbnMiLCJLRVlfTkFNRVMiLCJjaGVja0tleXMiLCJhdHRyaWJMb2NhdGlvbnMiLCJzdGF0aWNBdHRyaWJ1dGVzIiwic0F0dHJpYnV0ZXMiLCJiaW5kaW5ncyIsInBhcnNlQXR0cmliTG9jYXRpb25zIiwiZ2V0RnJhbWVidWZmZXIiLCJGUkFNRUJVRkZFUiIsIkNPTlRFWFQiLCJGUkFNRUJVRkZFUl9GVU5DIiwiRlJBTUVCVUZGRVJfU1RBVEUiLCJwYXJzZUZyYW1lYnVmZmVyIiwidmlld3BvcnRBbmRTY2lzc29yIiwicGFyc2VCb3giLCJCT1hfVyIsIkJPWF9IIiwiZHluQm94IiwiQk9YIiwiQk9YX1giLCJCT1hfWSIsInByZXZWaWV3cG9ydCIsIlZJRVdQT1JUIiwic2Npc3Nvcl9ib3giLCJwYXJzZVZpZXdwb3J0U2Npc3NvciIsImdldEVsZW1lbnRzIiwiRUxFTUVOVFMiLCJJU19CVUZGRVJfQVJHUyIsIkVMRU1FTlRfU1RBVEUiLCJlbGVtZW50RGVmbiIsImVsZW1lbnRTdHJlYW0iLCJpZnRlIiwicGFyc2VFbGVtZW50cyIsInBhcnNlUGFyYW0iLCJpc09mZnNldCIsIk9GRlNFVCIsImR5blZhbHVlIiwicHJpbWl0aXZlIiwiZHluUHJpbWl0aXZlIiwiUFJJTV9UWVBFUyIsInByaW0iLCJwYXJzZVByaW1pdGl2ZSIsImR5bkNvdW50IiwiTUlTU0lORyIsIkRZTkFNSUMiLCJwYXJzZVZlcnRDb3VudCIsImluc3RhbmNlcyIsInBhcnNlRHJhdyIsIlNUQVRFIiwicGFyc2VTdGF0aWMiLCJwYXJzZUR5bmFtaWMiLCJDT01QQVJFX0ZVTkNTIiwiQkxFTkRfRlVOQ1MiLCJTUkNfUkdCIiwiU1JDX0FMUEhBIiwiQkxFTkRfRVFVQVRJT05TIiwiUkdCIiwiQUxQSEEiLCJjaGVja1Byb3AiLCJjbXAiLCJmYWlsIiwiemZhaWwiLCJ6cGFzcyIsIlNURU5DSUxfT1BTIiwic2FtcGxlVmFsdWUiLCJzYW1wbGVJbnZlcnQiLCJwYXJzZUdMU3RhdGUiLCJwYXJzZVNoYWRlciIsInByb2dWYXIiLCJmcmFnSWQiLCJTSEFERVJfU1RBVEUiLCJwcm9nRGVmIiwicGFyc2VQcm9ncmFtIiwiY29weUJveCIsImRlZm4iLCJzY29wZVZBTyIsImRyYXdWQU8iLCJ1c2VWQU8iLCJwcm9maWxlRW5hYmxlIiwicGFyc2VQcm9maWxlIiwic3RhdGljVW5pZm9ybXMiLCJkeW5hbWljVW5pZm9ybXMiLCJVTklGT1JNUyIsInJlZ2xUeXBlIiwicGFyc2VVbmlmb3JtcyIsImdldFZBTyIsImNyZWF0ZVZBTyIsInZhb1JlZiIsInBhcnNlVkFPIiwic3RhdGljQmluZGluZ3MiLCJkeW5hbWljQXR0cmlidXRlcyIsImF0dHJpYnV0ZURlZnMiLCJhdHRyaWJ1dGUiLCJnZXRCdWZmZXIiLCJWQUxJRF9LRVlTIiwiZHR5cGUiLCJpc1N0cmVhbSIsIlZBTFVFIiwiQlVGRkVSX1NUQVRFIiwiZGVmYXVsdFJlY29yZCIsIkJVRkZFUiIsIlRZUEUiLCJlbWl0UmVhZFJlY29yZCIsInBhcnNlQXR0cmlidXRlcyIsInN0YXRpY0NvbnRleHQiLCJkeW5hbWljQ29udGV4dCIsInBhcnNlQ29udGV4dCIsImVtaXRDb250ZXh0IiwiY29udGV4dEVudGVyIiwiZW1pdFBvbGxGcmFtZWJ1ZmZlciIsInNraXBDaGVjayIsIkVYVF9EUkFXX0JVRkZFUlMiLCJHTCIsIk5FWFQiLCJEUkFXX0JVRkZFUlMiLCJCQUNLX0JVRkZFUiIsImVtaXRQb2xsU3RhdGUiLCJDVVJSRU5UX1ZBUlMiLCJORVhUX1ZBUlMiLCJDVVJSRU5UX1NUQVRFIiwiTkVYVF9TVEFURSIsIkNVUlJFTlQiLCJlbWl0U2V0T3B0aW9ucyIsImZsYWciLCJpbmplY3RFeHRlbnNpb25zIiwiaW5zdGFuY2luZyIsImVtaXRQcm9maWxlIiwidXNlU2NvcGUiLCJpbmNyZW1lbnRDb3VudGVyIiwiQ1BVX1NUQVJUIiwiUVVFUllfQ09VTlRFUiIsIlVTRV9QUk9GSUxFIiwiU1RBVFMiLCJUSU1FUiIsInByb2ZpbGVBcmciLCJwZXJmQ291bnRlciIsImVtaXRQcm9maWxlU3RhcnQiLCJlbWl0UHJvZmlsZUVuZCIsInNjb3BlUHJvZmlsZSIsImVtaXRBdHRyaWJ1dGVzIiwiQVRUUklCVVRFIiwiTE9DQVRJT04iLCJCSU5ESU5HIiwiQ09OU1RfQ09NUE9ORU5UUyIsIkNPTU1PTl9LRVlTIiwiZW1pdEJ1ZmZlciIsIlNJWkUiLCJESVZJU09SIiwiZW1pdENvbnN0YW50IiwiZW1pdEJpbmRBdHRyaWJ1dGUiLCJ0eXBlTGVuZ3RoIiwiZW1pdFVuaWZvcm1zIiwiaW5maXgiLCJ1bmlmb3JtIiwiVEVYX1ZBTFVFIiwiTUFUX1ZBTFVFIiwiZGltIiwiZW1pdENoZWNrIiwiY2hlY2tUeXBlIiwiY2hlY2tWZWN0b3IiLCJjaGVja1RleHR1cmUiLCJ1bnJvbGwiLCJURVgiLCJtYXRTaXplIiwiU1RPUkFHRSIsImVtaXREcmF3Iiwib3V0ZXIiLCJpbm5lciIsIkRSQVdfU1RBVEUiLCJkcmF3T3B0aW9ucyIsImNvbnRleHREeW5hbWljIiwiZW1pdEVsZW1lbnRzIiwiZW1pdFZhbHVlIiwiSU5TVEFOQ0VTIiwiRVhUX0lOU1RBTkNJTkciLCJQUklNSVRJVkUiLCJDT1VOVCIsImVtaXRDb3VudCIsIkVMRU1FTlRfVFlQRSIsImVsZW1lbnRzU3RhdGljIiwiZW1pdEluc3RhbmNpbmciLCJlbWl0UmVndWxhciIsImNyZWF0ZUJvZHkiLCJlbWl0Qm9keSIsInBhcmVudEVudiIsImVtaXREcmF3Qm9keSIsImVtaXRCYXRjaER5bmFtaWNTaGFkZXJCb2R5IiwiZW1pdEJhdGNoQm9keSIsIkJBVENIX0lEIiwiUFJPUFMiLCJpc0lubmVyRGVmbiIsImlzT3V0ZXJEZWZuIiwibmVlZHNDb250ZXh0IiwibmVlZHNGcmFtZWJ1ZmZlciIsInByb2dDYWNoZSIsIlBST0dSQU0iLCJQUk9HX0lEIiwiQ0FDSEVEX1BST0MiLCJzcGxhdE9iamVjdCIsImlzRHluYW1pY09iamVjdCIsImdsb2JhbHMiLCJvYmplY3RSZWYiLCJkZXBzIiwicHJvY3MiLCJjb21tb24iLCJJTlNUQU5DSU5HIiwib2VzX3ZlcnRleF9hcnJheV9vYmplY3QiLCJkcmF3Q2FjaGUiLCJlbWl0RHJhd1Byb2MiLCJzYXZlU2hhZGVyIiwiZW1pdFNjb3BlUHJvYyIsImJhdGNoIiwicHJvZ0RlZm4iLCJiYXRjaENhY2hlIiwiZW1pdEJhdGNoUHJvYyIsIkdMX1FVRVJZX1JFU1VMVF9FWFQiLCJHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFX0VYVCIsIkdMX1RJTUVfRUxBUFNFRF9FWFQiLCJjcmVhdGVUaW1lciIsImV4dF9kaXNqb2ludF90aW1lcl9xdWVyeSIsInF1ZXJ5UG9vbCIsImZyZWVRdWVyeSIsInF1ZXJ5IiwicGVuZGluZ1F1ZXJpZXMiLCJQZW5kaW5nU3RhdHMiLCJzdGFydFF1ZXJ5SW5kZXgiLCJlbmRRdWVyeUluZGV4Iiwic3VtIiwicGVuZGluZ1N0YXRzUG9vbCIsImZyZWVQZW5kaW5nU3RhdHMiLCJwZW5kaW5nU3RhdHMiLCJwdXNoU2NvcGVTdGF0cyIsInRpbWVTdW0iLCJxdWVyeVB0ciIsImJlZ2luUXVlcnkiLCJjcmVhdGVRdWVyeUVYVCIsImJlZ2luUXVlcnlFWFQiLCJlbmRRdWVyeSIsImVuZFF1ZXJ5RVhUIiwicXVlcnlUaW1lIiwiZ2V0UXVlcnlPYmplY3RFWFQiLCJzdGFydFB0ciIsImVuZFB0ciIsImdwdVRpbWUiLCJnZXROdW1QZW5kaW5nUXVlcmllcyIsImRlbGV0ZVF1ZXJ5RVhUIiwiR0xfQ09MT1JfQlVGRkVSX0JJVCIsIkdMX0RFUFRIX0JVRkZFUl9CSVQiLCJHTF9TVEVOQ0lMX0JVRkZFUl9CSVQiLCJHTF9BUlJBWV9CVUZGRVIiLCJDT05URVhUX0xPU1RfRVZFTlQiLCJDT05URVhUX1JFU1RPUkVEX0VWRU5UIiwiRFlOX1BST1AiLCJEWU5fQ09OVEVYVCIsIkRZTl9TVEFURSIsImhheXN0YWNrIiwibmVlZGxlIiwiZ2V0Q29udGV4dEF0dHJpYnV0ZXMiLCJjb250ZXh0TG9zdCIsImlzQ29udGV4dExvc3QiLCJleHRlbnNpb25TdGF0ZSIsInRyeUxvYWRFeHRlbnNpb24iLCJuYW1lXyIsImdldEV4dGVuc2lvbiIsImNyZWF0ZUV4dGVuc2lvbkNhY2hlIiwic3RyaW5nSWRzIiwic3RyaW5nVmFsdWVzIiwiIiwic3RhdHMkJDEiLCJ2YW9Db3VudCIsImJ1ZmZlckNvdW50IiwiZWxlbWVudHNDb3VudCIsImZyYW1lYnVmZmVyQ291bnQiLCJzaGFkZXJDb3VudCIsIlNUQVJUX1RJTUUiLCJXSURUSCIsIkhFSUdIVCIsImRlc3Ryb3lCdWZmZXIiLCJidWZmZXJTZXQiLCJSRUdMQnVmZmVyIiwidXNhZ2UiLCJwZXJzaXN0ZW50RGF0YSIsImJpbmRCdWZmZXIiLCJzdHJlYW1Qb29sIiwiaW5pdEJ1ZmZlckZyb21UeXBlZEFycmF5IiwiaW5pdEJ1ZmZlckZyb21EYXRhIiwicGVyc2lzdCIsImZsYXREYXRhIiwidHlwZWREYXRhIiwiZGVsZXRlQnVmZmVyIiwiZ2V0VG90YWxCdWZmZXJTaXplIiwiZGVmZXJJbml0IiwicGVyc2lzdGVudCIsInJlZ2xCdWZmZXIiLCJzZXRTdWJEYXRhIiwiYnVmZmVyU3ViRGF0YSIsIl9idWZmZXIiLCJzdWJkYXRhIiwib2Zmc2V0XyIsImNyZWF0ZVN0cmVhbSIsImRlc3Ryb3lTdHJlYW0iLCJzdHJlYW0kJDEiLCJfaW5pdEJ1ZmZlciIsIndyYXBCdWZmZXJTdGF0ZSIsIk5VTV9BVFRSSUJVVEVTIiwiYXR0cmlidXRlQmluZGluZ3MiLCJ2YW9TZXQiLCJjdXJyZW50VkFPIiwidGFyZ2V0VkFPIiwiZXh0VkFPIiwiX2F0dHIiLCJSRUdMVkFPIiwidXBkYXRlVkFPIiwiYnVmVXBkYXRlZCIsIm5hdHRyaWJ1dGVzIiwicmVjIiwiYnVmZmVycyIsIl92YW8iLCJkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkiLCJzZXRWQU8iLCJiaW5kVmVydGV4QXJyYXlPRVMiLCJiaW5kQXR0cnMiLCJleHRpIiwiZXh0SW5zdGFuY2VkIiwiZW5hYmxlVmVydGV4QXR0cmliQXJyYXkiLCJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwib2ZmZnNldCIsInZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSIsInZlcnRleEF0dHJpYjRmIiwiY3JlYXRlVmVydGV4QXJyYXlPRVMiLCJkZWxldGVWZXJ0ZXhBcnJheU9FUyIsIndyYXBBdHRyaWJ1dGVTdGF0ZSIsImVsZW1lbnRTZXQiLCJlbGVtZW50Q291bnQiLCJlbGVtZW50VHlwZXMiLCJSRUdMRWxlbWVudEJ1ZmZlciIsInByaW1UeXBlIiwidmVydENvdW50Iiwib2VzX2VsZW1lbnRfaW5kZXhfdWludCIsImluaXRFbGVtZW50cyIsInByZWRpY3RlZFR5cGUiLCJkZXN0cm95RWxlbWVudHMiLCJyZWdsRWxlbWVudHMiLCJfZWxlbWVudHMiLCJ3cmFwRWxlbWVudHNTdGF0ZSIsImZyYWdTaGFkZXJzIiwidmVydFNoYWRlcnMiLCJBY3RpdmVJbmZvIiwibG9jYXRpb24iLCJpbnNlcnRBY3RpdmVJbmZvIiwiZ2V0U2hhZGVyIiwiY3JlYXRlU2hhZGVyIiwic2hhZGVyU291cmNlIiwiY29tcGlsZVNoYWRlciIsInByb2dyYW1DYWNoZSIsInByb2dyYW1MaXN0IiwiUFJPR1JBTV9DT1VOVEVSIiwiUkVHTFByb2dyYW0iLCJ2ZXJ0SWQiLCJ1bmlmb3Jtc0NvdW50IiwiYXR0cmlidXRlc0NvdW50IiwibGlua1Byb2dyYW0iLCJhdHRyaWJ1dGVMb2NhdGlvbnMiLCJjcmVhdGVQcm9ncmFtIiwiYXR0YWNoU2hhZGVyIiwiYmluZEF0dHJpYkxvY2F0aW9uIiwibnVtVW5pZm9ybXMiLCJnZXRBY3RpdmVVbmlmb3JtIiwiZ2V0VW5pZm9ybUxvY2F0aW9uIiwibnVtQXR0cmlidXRlcyIsImdldEFjdGl2ZUF0dHJpYiIsImdldEF0dHJpYkxvY2F0aW9uIiwiZ2V0TWF4VW5pZm9ybXNDb3VudCIsImdldE1heEF0dHJpYnV0ZXNDb3VudCIsImRlbGV0ZVNoYWRlciIsImRlbGV0ZVByb2dyYW0iLCJwcmV2UHJvZ3JhbSIsIndyYXBTaGFkZXJTdGF0ZSIsInJlbmRlcmJ1ZmZlclN0YXRlIiwiY3VyIiwiY29sb3JUZXh0dXJlRm9ybWF0cyIsImNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0cyIsImNvbG9yVHlwZXMiLCJGcmFtZWJ1ZmZlckF0dGFjaG1lbnQiLCJpbmNSZWZBbmRDaGVja1NoYXBlIiwidHciLCJ0aCIsImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwicGFyc2VBdHRhY2htZW50IiwiYWxsb2NBdHRhY2htZW50IiwiaXNUZXh0dXJlIiwidW53cmFwQXR0YWNobWVudCIsInJlc2l6ZUF0dGFjaG1lbnQiLCJmcmFtZWJ1ZmZlclNldCIsIlJFR0xGcmFtZWJ1ZmZlciIsImRlcHRoQXR0YWNobWVudCIsInN0ZW5jaWxBdHRhY2htZW50IiwiZGVwdGhTdGVuY2lsQXR0YWNobWVudCIsImRlY0ZCT1JlZnMiLCJ1cGRhdGVGcmFtZWJ1ZmZlciIsInN0YXR1cyIsImNyZWF0ZUZCTyIsInJlZ2xGcmFtZWJ1ZmZlciIsIm5lZWRzRGVwdGgiLCJuZWVkc1N0ZW5jaWwiLCJjb2xvckJ1ZmZlciIsImNvbG9yVGV4dHVyZSIsImNvbG9yRm9ybWF0IiwiY29sb3JUeXBlIiwiY29sb3JDb3VudCIsImRlcHRoQnVmZmVyIiwic3RlbmNpbEJ1ZmZlciIsImRlcHRoU3RlbmNpbEJ1ZmZlciIsImRlcHRoU3RlbmNpbFRleHR1cmUiLCJkZXB0aFRleHR1cmUiLCJkZXB0aFN0ZW5jaWwiLCJjb21tb25Db2xvckF0dGFjaG1lbnRTaXplIiwiY29sb3JBdHRhY2htZW50U2l6ZSIsIl9mcmFtZWJ1ZmZlciIsInVzZSIsInJlZ2xGcmFtZWJ1ZmZlckN1YmUiLCJjb2xvckN1YmVzIiwiY3ViZU1hcFBhcmFtcyIsImN1YmUiLCJmYiIsIndyYXBGQk9TdGF0ZSIsInJhZkNhbGxiYWNrcyIsImxvc3NDYWxsYmFja3MiLCJyZXN0b3JlQ2FsbGJhY2tzIiwiZGVzdHJveUNhbGxiYWNrcyIsImFjdGl2ZVJBRiIsImhhbmRsZVJBRiIsInN0YXJ0UkFGIiwic3RvcFJBRiIsImhhbmRsZUNvbnRleHRMb3NzIiwiaGFuZGxlQ29udGV4dFJlc3RvcmVkIiwiY29tcGlsZVByb2NlZHVyZSIsInNlcGFyYXRlRHluYW1pYyIsInVzZUFycmF5cyIsInN0YXRpY0l0ZW1zIiwiZHluYW1pY0l0ZW1zIiwib3B0aW9uIiwib3BCYWNrIiwib3BGcm9udCIsImZsYXR0ZW5OZXN0ZWRPcHRpb25zIiwiY3B1VGltZSIsImNvbXBpbGVkIiwiRU1QVFlfQVJSQVkiLCJyZXNlcnZlIiwiY2xlYXJJbXBsIiwiY2xlYXJGbGFncyIsImNsZWFyRGVwdGgiLCJjbGVhclN0ZW5jaWwiLCJwZW5kaW5nQ2FuY2VsIiwicG9sbFZpZXdwb3J0Iiwic2Npc3NvckJveCIsImZyYW1lYnVmZmVyX3JlZ2xUeXBlIiwiZnJhbWVidWZmZXJDdWJlIiwiY2FsbGJhY2tzIiwiaGFzRXh0ZW5zaW9uIiwiX2dsIiwiX3JlZnJlc2giLCJjcmVhdGVSRUdMIiwiR0xPQkFMIiwic3RhcnRkZW5vbSIsInNpZ25pZmljYW5jZSIsIm92ZXJmbG93Iiwib2xkUmFuZG9tIiwiQVJDNCIsImtleWxlbiIsIm1lIiwibWl4a2V5Iiwic21lYXIiLCJzdHJpbmdzZWVkIiwidG9zdHJpbmciLCJhcmM0IiwidHlwIiwiZW50cm9weSIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsInNjcmVlbiIsImF1dG9zZWVkIiwicmVzZXRHbG9iYWwiLCJGMiIsIkcyIiwiRzMiLCJGNCIsIkc0IiwicmFuZG9tT3JTZWVkIiwiczAiLCJzMSIsInMyIiwibWFzaCIsImFsZWEiLCJidWlsZFBlcm11dGF0aW9uVGFibGUiLCJwZXJtIiwicGVybU1vZDEyIiwiYXV4IiwiZ3JhZDMiLCJncmFkNCIsInhpbiIsInlpbiIsImkxIiwiajEiLCJuMCIsIm4xIiwibjIiLCJpaSIsImpqIiwidDAiLCJnaTAiLCJnaTEiLCJnaTIiLCJ6aW4iLCJuMyIsImsxIiwiaTIiLCJqMiIsImsyIiwiejAiLCJ6MSIsInoyIiwiejMiLCJrayIsImdpMyIsIm40IiwibDEiLCJsMiIsImkzIiwiajMiLCJrMyIsImwzIiwidzAiLCJyYW5reCIsInJhbmt5IiwicmFua3oiLCJyYW5rdyIsIncxIiwidzIiLCJ3MyIsIno0IiwidzQiLCJsbCIsInQ0IiwiZ2k0IiwiX2J1aWxkUGVybXV0YXRpb25UYWJsZSIsIl9zbGljZWRUb0FycmF5IiwiaXRlcmF0b3IiLCJfbiIsIl9kIiwiX2UiLCJfcyIsIl9pIiwiZG9uZSIsInNsaWNlSXRlcmF0b3IiLCJUQVUiLCJtYXBUb0VsbGlwc2UiLCJfcmVmIiwiY29zcGhpIiwic2lucGhpIiwiY2VudGVyeCIsImNlbnRlcnkiLCJhcHByb3hVbml0QXJjIiwiYW5nMSIsImFuZzIiLCJ2ZWN0b3JBbmdsZSIsInV4IiwidXkiLCJfcmVmMiIsIl9yZWYyJHhBeGlzUm90YXRpb24iLCJfcmVmMiRsYXJnZUFyY0ZsYWciLCJfcmVmMiRzd2VlcEZsYWciLCJweHAiLCJweXAiLCJfZ2V0QXJjQ2VudGVyIiwicnhzcSIsInJ5c3EiLCJweHBzcSIsInB5cHNxIiwicmFkaWNhbnQiLCJjZW50ZXJ4cCIsImNlbnRlcnlwIiwidngxIiwidnkxIiwidngyIiwidnkyIiwiZ2V0QXJjQ2VudGVyIiwiX2dldEFyY0NlbnRlcjIiLCJzZWdtZW50cyIsImN1cnZlIiwiX21hcFRvRWxsaXBzZSIsIl9tYXBUb0VsbGlwc2UyIiwiX21hcFRvRWxsaXBzZTMiLCJiZXppZXIiLCJub3JtIiwidG1wMSIsInRtcDIiLCJ0bXAzIiwic3ZnIiwicGVuIiwiYmV6aWVyVG8iLCLPgCIsIl8xMjAiLCJyYWRpYW5zIiwibGFyZ2VfYXJjX2ZsYWciLCJzd2VlcF9mbGFnIiwiZjEiLCJmMiIsInh5Iiwicm90YXRlIiwicngyIiwicnkyIiwiYXNpbiIsImYyb2xkIiwieDJvbGQiLCJ5Mm9sZCIsImh4IiwiaHkiLCJyb3QiLCJkZWdyZXNzIiwiY29sb3JDb2RlcyIsImdldFJhbmRvbUNvbG91ciIsImNvbHMiLCJyb3dzIiwic2NhbGVNaW4iLCJzY2FsZU1heCIsImZyZXEiLCJhbXAiLCJhbmltYXRlVGhpY2tuZXNzIiwibWFudWFsVGhpY2tuZXNzIiwiYmFja2dyb3VuZENvbG91ciIsInBhcnRpY2xlQ29sb3VyIiwicmFuZG9Db2xvdXIiLCJzZXRCYWNrZ3JvdW5kIiwicGFuZSIsImJ1dHQiLCJzcXVhcmUiLCJjcmVhdGVQYW5lIiwibnVtQ2VsbHMiLCJncmlkdyIsImdyaWRoIiwiY2VsbHciLCJjZWxsaCIsIm1hcmd4IiwibWFyZ3kiLCJ0aGlja25lc3MiLCJ0cmFuc2xhdGUiLCJZSUduQnUiLCJZSU9yUmQiLCJSZEJ1IiwicmFpbmJvd1NvZnQiLCJmcmVlc3VyZmFjZUJsdWUiLCJmcmVlc3VyZmFjZVJlZCIsInZlbG9jaXR5Qmx1ZSIsInZlbG9jaXR5R3JlZW4iLCJDQU5WQVNfU0tFVENIX0RFRkFVTFRfU1RPUkFHRV9LRVkiXSwibWFwcGluZ3MiOiJDQUFBLFdBQUEsT0FBQSxTQUFBQSxFQUFBQyxFQUFBQyxFQUFBQyxHQUFBLFNBQUFDLEVBQUFDLEVBQUFDLEdBQUEsSUFBQUosRUFBQUcsR0FBQSxDQUFBLElBQUFKLEVBQUFJLEdBQUEsQ0FBQSxJQUFBRSxFQUFBLG1CQUFBQyxTQUFBQSxRQUFBLElBQUFGLEdBQUFDLEVBQUEsT0FBQUEsRUFBQUYsR0FBQSxHQUFBLEdBQUFJLEVBQUEsT0FBQUEsRUFBQUosR0FBQSxHQUFBLElBQUFLLEVBQUEsSUFBQUMsTUFBQSx1QkFBQU4sRUFBQSxLQUFBLE1BQUFLLEVBQUFFLEtBQUEsbUJBQUFGLEVBQUEsSUFBQUcsRUFBQVgsRUFBQUcsR0FBQSxDQUFBUyxRQUFBLElBQUFiLEVBQUFJLEdBQUEsR0FBQVUsS0FBQUYsRUFBQUMsUUFBQSxTQUFBZCxHQUFBLE9BQUFJLEVBQUFILEVBQUFJLEdBQUEsR0FBQUwsSUFBQUEsSUFBQWEsRUFBQUEsRUFBQUMsUUFBQWQsRUFBQUMsRUFBQUMsRUFBQUMsR0FBQSxPQUFBRCxFQUFBRyxHQUFBUyxRQUFBLElBQUEsSUFBQUwsRUFBQSxtQkFBQUQsU0FBQUEsUUFBQUgsRUFBQSxFQUFBQSxFQUFBRixFQUFBYSxPQUFBWCxJQUFBRCxFQUFBRCxFQUFBRSxJQUFBLE9BQUFELEdBQUEsRUFBQSxDQUFBLENBQUFhLEVBQUEsQ0FBQSxTQUFBVCxFQUFBVSxFQUFBSixHQ0FBLGFBRUFBLEVBQUFLLFdBdUNBLFNBQUFDLEdBQ0EsSUFBQUMsRUFBQUMsRUFBQUYsR0FFQUcsRUFBQUYsRUFBQSxHQUNBLE9BQUEsR0FGQUEsRUFBQSxHQUVBRSxH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WUFBQSxVQUNBQyxlQUFBLFVBQ0FDLFdBQUEsVUFDQUMsV0FBQSxVQUNBQyxRQUFBLFVBQ0FDLFdBQUEsVUFDQUMsYUFBQSxVQUNBQyxjQUFBLFVBQ0FDLGNBQUEsVUFDQUMsY0FBQSxVQUNBQyxjQUFBLFVBQ0FDLFdBQUEsVUFDQUMsU0FBQSxVQUNBQyxZQUFBLFVBQ0FDLFFBQUEsVUFDQUMsUUFBQSxVQUNBQyxXQUFBLFVBQ0FDLFVBQUEsVUFDQUMsWUFBQSxVQUNBQyxZQUFBLFVBQ0FDLFFBQUEsVUFDQUMsVUFBQSxVQUNBQyxXQUFBLFVBQ0FDLEtBQUEsVUFDQUMsVUFBQSxVQUNBQyxLQUFBLFVBQ0FDLE1BQUEsVUFDQUMsWUFBQSxVQUNBQyxLQUFBLFVBQ0FDLFNBQUEsVUFDQUMsUUFBQSxVQUNBQyxVQUFBLFVBQ0FDLE9BQUEsVUFDQUMsTUFBQSxVQUNBQyxNQUFBLFVBQ0FDLFNBQUEsVUFDQUMsY0FBQSxVQUNBQyxVQUFBLFVBQ0FDLGFBQUEsVUFDQUMsVUFBQSxVQUNBQyxXQUFBLFVBQ0FDLFVBQUEsVUFDQUMscUJBQUEsVUFDQUMsVUFBQSxVQUNBQyxXQUFBLFVBQ0FDLFVBQUEsVUFDQUMsVUFBQSxVQUNBQyxZQUFBLFVBQ0FDLGNBQUEsVUFDQUMsYUFBQSxVQUNBQyxlQUFBLFVBQ0FDLGVBQUEsVUFDQUMsZUFBQSxVQUNBQyxZQUFBLFVBQ0FDLEtBQUEsVUFDQUMsVUFBQSxVQUNBQyxNQUFBLFVBQ0FDLFFBQUEsVUFDQUMsT0FBQSxVQUNBQyxpQkFBQSxVQUNBQyxXQUFBLFVBQ0FDLGFBQUEsVUFDQUMsYUFBQSxVQUNBQyxlQUFBLFVBQ0FDLGdCQUFBLFVBQ0FDLGtCQUFBLFVBQ0FDLGdCQUFBLFVBQ0FDLGdCQUFBLFVBQ0FDLGFBQUEsVUFDQUMsVUFBQSxVQUNBQyxVQUFBLFVBQ0FDLFNBQUEsVUFDQUMsWUFBQSxVQUNBQyxLQUFBLFVBQ0FDLFFBQUEsVUFDQUMsTUFBQSxVQUNBQyxVQUFBLFVBQ0FDLE9BQUEsVUFDQUMsVUFBQSxVQUNBQyxPQUFBLFVBQ0FDLGNBQUEsVUFDQUMsVUFB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YixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsTUFBTyxJQUFLLEtBQ2QsQ0FBRSxNQUFPLElBQUssS0FDZCxDQUFFLE1BQU8sSUFBSyxLQUdkLENBQUUsS0FBTSxJQUFLLE1BQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLEdBQUksS0FDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxNQUFPLEdBQUksSUFDYixDQUFFLE1BQU8sS0FBTSxNQUNmLENBQUUsTUFBTyxLQUFNLE1BQ2YsQ0FBRSxLQUFNLElBQU0sTUFDZCxDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsTUFBTyxJQUFLLE1BQ2QsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLE1BQU8sSUFBSyxLQUNkLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLEdBQUksS0FDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxNQUFPLEdBQUksSUFDYixDQUFFLE1BQU8sR0FBSSxJQUNiLENBQUUsTUFBTyxHQUFJLElBQ2IsQ0FBRSxLQUFNLElBQUssTUFDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sR0FBSSxLQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxLQUFNLEdBQUksSUFDWixDQUFFLE1BQU8sR0FBSSxJQUNiLENBQUUsTUFBTyxHQUFJLElBQ2IsQ0FBRSxNQUFPLEdBQUksSUFJ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QUE3M0QsTUErQkEsSUFBQWs0RCxFQUFBLENBQ0F0MkIsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxhQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxFQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxNQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLE1BQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsT0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBMVksTUFBQSxDQUFBLEVBQUEsRUFBQSxHQUNBMlksZUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsRUFBQSxFQUFBLEtBQ0FDLFdBQUEsQ0FBQSxJQUFBLEdBQUEsS0FDQUMsTUFBQSxDQUFBLElBQUEsR0FBQSxJQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxHQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxHQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLElBQ0FDLE1BQUEsQ0FBQSxJQUFBLElBQUEsSUFDQUMsZUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxTQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLEdBQUEsSUFDQUMsS0FBQSxDQUFBLEVBQUEsSUFBQSxLQUNBQyxTQUFBLENBQUEsRUFBQSxFQUFBLEtBQ0FDLFNBQUEsQ0FBQSxFQUFBLElBQUEsS0FDQUMsY0FBQSxDQUFBLElBQUEsSUFBQSxJQUNBQyxTQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxFQUFBLElBQUEsR0FDQUMsU0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFlBQUEsQ0FBQSxJQUFBLEVBQUEsS0FDQUMsZUFBQSxDQUFBLEdBQUEsSUFBQSxJQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEdBQ0FDLFdBQUEsQ0FBQSxJQUFBLEdBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsRUFBQSxHQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsY0FBQSxDQUFBLEdBQUEsR0FBQSxLQUNBQyxjQUFBLENBQUEsR0FBQSxHQUFBLElBQ0FDLGNBQUEsQ0FBQSxHQUFBLEdBQUEsSUFDQUMsY0FBQSxDQUFBLEVBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxFQUFBLEtBQ0FDLFNBQUEsQ0FBQSxJQUFBLEdBQUEsS0FDQUMsWUFBQSxDQUFBLEVBQUEsSUFBQSxLQUNBQyxRQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLEdBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxHQUFBLElBQ0FDLFlBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsWUFBQSxDQUFBLEdBQUEsSUFBQSxJQUNBQyxRQUFBLENBQUEsSUFBQSxFQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLEdBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsSUFDQUMsS0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxNQUFBLENBQUEsRUFBQSxJQUFBLEdBQ0FDLFlBQUEsQ0FBQSxJQUFBLElBQUEsSUFDQUMsS0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxTQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsR0FBQSxJQUNBQyxPQUFBLENBQUEsR0FBQSxFQUFBLEtBQ0FDLE1BQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxTQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxHQUNBQyxhQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLHFCQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsWUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLGFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsZUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxlQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsWUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsRUFBQSxJQUFBLEdBQ0FDLFVBQUEsQ0FBQSxHQUFBLElBQUEsSUFDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxRQUFBLENBQUEsSUFBQSxFQUFBLEtBQ0FDLE9BQUEsQ0FBQSxJQUFBLEVBQUEsR0FDQUMsaUJBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLEVBQUEsRUFBQSxLQUNBQyxhQUFBLENBQUEsSUFBQSxHQUFBLEtBQ0FDLGFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsZUFBQSxDQUFBLEdBQUEsSUFBQSxLQUNBQyxnQkFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxrQkFBQSxDQUFBLEVBQUEsSUFBQSxLQUNBQyxnQkFBQSxDQUFBLEdBQUEsSUFBQSxLQUNBQyxnQkFBQSxDQUFBLElBQUEsR0FBQSxLQUNBQyxhQUFBLENBQUEsR0FBQSxHQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxTQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFlBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsS0FBQSxDQUFBLEVBQUEsRUFBQSxLQUNBQyxRQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLE1BQUEsQ0FBQSxJQUFBLElBQUEsR0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxJQUNBQyxPQUFBLENBQUEsSUFBQSxJQUFBLEdBQ0FDLFVBQUEsQ0FBQSxJQUFBLEdBQUEsR0FDQUMsT0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsY0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFdBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLElBQ0FDLEtBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsS0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLE9BQUEsQ0FBQSxJQUFBLEVBQUEsS0FDQUMsY0FBQSxDQUFBLElBQUEsR0FBQSxLQUNBQyxJQUFBLENBQUEsSUFBQSxFQUFBLEdBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLEdBQUEsSUFBQSxLQUNBQyxZQUFBLENBQUEsSUFBQSxHQUFBLElBQ0FDLE9BQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxJQUNBQyxTQUFBLENBQUEsR0FBQSxJQUFBLElBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsT0FBQSxDQUFBLElBQUEsR0FBQSxJQUNBQyxPQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsR0FBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsS0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxZQUFBLENBQUEsRUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxHQUFBLElBQUEsS0FD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TUFBQSxLQUFBOGdCLElBQUEsQ0FBQSxFQUFBLEdBQUEsTUFBQSxDQUFBOWdCLE1BQUEsS0FBQThnQixJQUFBLENBQUEsRUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEtBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxJQUFBLENBQUE5Z0IsTUFBQSxLQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEVBQUEsSUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxFQUFBLEtBRUFGLElBQUEsQ0FBQSxDQUFBNWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxFQUFBLElBQUEsQ0FBQTlnQixNQUFBLEtBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxJQUFBLENBQUE5Z0IsTUFBQSxLQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsSUFBQSxDQUFBOWdCLE1BQUEsS0FBQThnQixJQUFBLENBQUEsRUFBQSxJQUFBLElBQUEsQ0FBQTlnQixNQUFBLEtBQUE4Z0IsSUFBQSxDQUFBLEVBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxLQUFBOGdCLElBQUEsQ0FBQSxFQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsS0FBQThnQixJQUFBLENBQUEsRUFBQSxFQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEtBQUE4Z0IsSUFBQSxDQUFBLEVBQUEsRUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxLQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEVBQUEsTUFBQSxDQUFBOWdCLE1BQUEsS0FBQThnQixJQUFBLENBQUEsSUFBQSxFQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsRUFBQSxLQUVBdTBDLElBQUEsQ0FBQSxDQUFBcjFELE1BQUEsRUFBQThnQixJQUFBLENBQUEsRUFBQSxFQUFBLElBQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsRUFBQSxJQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsSUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE9BRUFvN0MsT0FBQSxDQUFBLENBQUFsOEQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEVBQUEsTUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBRUFxN0MsT0FBQSxDQUFBLENBQUFuOEQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxFQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE9BRUFzN0MsT0FBQSxDQUFBLENBQUFwOEQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEVBQUEsSUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBRUF1N0MsT0FBQSxDQUFBLENBQUFyOEQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxFQUFBLEVBQUEsTUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsRUFBQSxJQUFBLE9BRUF3N0MsS0FBQSxDQUFBLENBQUF0OEQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxFQUFBLEVBQUEsSUFBQSxDQUFBOWdCLE1BQUEsS0FBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEtBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsT0FFQXk3QyxPQUFBLENBQUEsQ0FBQXY4RCxNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLEVBQUEsRUFBQSxJQUFBLENBQUE5Z0IsTUFBQSxLQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE9BRUEwN0MsTUFBQSxDQUFBLENBQUF4OEQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxFQUFBLEVBQUEsSUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE9BRUEyN0MsT0FBQSxDQUFBLENBQUF6OEQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxFQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsS0FBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsR0FBQSxNQUFBLENBQUE5Z0IsTUFBQSxLQUFBOGdCLElBQUEsQ0FBQSxHQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsR0FBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEtBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsS0FBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxPQUVBNDdDLE9BQUEsQ0FBQSxDQUFBMThELE1BQUEsRUFBQThnQixJQUFBLENBQUEsRUFBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLEtBQUE4Z0IsSUFBQSxDQUFBLEVBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLElBQUEsS0FBQSxDQUFBOWdCLE1BQUEsS0FBQThnQixJQUFBLENBQUEsR0FBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxLQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEtBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsT0FFQTY3QyxPQUFBLENBQUEsQ0FBQTM4RCxNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsRUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxLQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLEtBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsS0FBQSxDQUFBOWdCLE1BQUEsS0FBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxLQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE9BRUE4N0MsUUFBQSxDQUFBLENBQUE1OEQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxFQUFBLEVBQUEsTUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxFQUFBLEtBRUErN0MsS0FBQSxDQUFBLENBQUE3OEQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxFQUFBLEdBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxNQUVBZzhDLE9BQUEsQ0FBQSxDQUFBOThELE1BQUEsRUFBQThnQixJQUFBLENBQUEsRUFBQSxFQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsRUFBQSxLQUVBaThDLFFBQUEsQ0FBQSxDQUFBLzhELE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxFQUFBLEtBQUEsQ0FBQTlnQixNQUFBLEtBQUE4Z0IsSUFBQSxDQUFBLEVBQUEsRUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxFQUFBLEdBQUEsTUFBQSxDQUFBOWdCLE1BQUEsS0FBQThnQixJQUFBLENBQUEsRUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxLQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsSUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLElBQUEsQ0FBQTlnQixNQUFBLEtBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxJQUFBLENBQUE5Z0IsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEVBQUEsS0FFQWs4QyxTQUFBLENBQUEsQ0FBQWg5RCxNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsR0FBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsTUFFQW04QyxVQUFBLENBQUEsQ0FBQWo5RCxNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLEVBQUEsRUFBQSxJQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEVBQUEsSUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLElBQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsT0FFQW84QyxNQUFBLENBQUEsQ0FBQWw5RCxNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLEVBQUEsRUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxFQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsR0FBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE9BRUFxOEMsU0FBQSxDQUFBLENBQUFuOUQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxFQUFBLEVBQUEsSUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxFQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsRUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsSUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLElBQUEsQ0FBQTlnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxPQUVBTixNQUFBLENBQUEsQ0FBQXhnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsQ0FBQTlnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxJQUFBLEtBRUFzOEMsUUFBQSxDQUFBLENBQUFwOUQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxHQUFBLEVBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsR0FBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsR0FBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLElBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUVBdThDLFFBQUEsQ0FBQSxDQUFBcjlELE1BQUEsRUFBQThnQixJQUFBLENBQUEsRUFBQSxFQUFBLElBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLEdBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsT0FFQXc4QyxNQUFBLENBQUEsQ0FBQXQ5RCxNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLEVBQUEsRUFBQSxJQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE9BRUF5OEMsT0FBQSxDQUFBLENBQUF2OUQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxHQUFBLEVBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxFQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsRUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsSUFBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUVBMDhDLEtBQUEsQ0FBQSxDQUFBeDlELE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxFQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsRUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEVBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxFQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsSUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLElBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxJQUFBLENBQUE5Z0IsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsS0FFQTI4QyxLQUFBLENBQUEsQ0FBQXo5RCxNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsRUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEVBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxFQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsRUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEVBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLElBQUEsSUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBRUE0OEMsZUFBQSxDQUFBLENBQUExOUQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEVBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsSUFBQSxFQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsRUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsSUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLElBQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxJQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxFQUFBLElBQUEsS0FBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsRUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsTUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxFQUFBLE9BRUE2OEMsV0FBQSxDQUFBLENBQUEzOUQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxHQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsR0FBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsR0FBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxPQUVBODhDLEtBQUEsQ0FBQSxDQUFBNTlELE1BQUEsRUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsT0FFQSs4QyxZQUFBLENBQUEsQ0FBQTc5RCxNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxHQUFBLElBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE9BRUFnOUMsUUFBQSxDQUFBLENBQUE5OUQsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxHQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxPQUVBaTlDLG1CQUFBLENBQUEsQ0FBQS85RCxNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsRUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLEdBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsR0FBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxHQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE9BRUFrOUMsa0JBQUEsQ0FBQSxDQUFBaCtELE1BQUEsRUFBQThnQixJQUFBLENBQUEsR0FBQSxFQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsT0FFQW05QyxPQUFBLENBQUEsQ0FBQWorRCxNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsRUFBQSxJQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxHQUFBLElBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxJQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsSUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsS0FBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE9BRUFvOUMsSUFBQSxDQUFBLENBQUFsK0QsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxHQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUVBcTlDLE1BQUEsQ0FBQSxDQUFBbitELE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFFQXM5QyxTQUFBLENBQUEsQ0FBQXArRCxNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsR0FBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLEdBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxHQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE9BRUF1OUMsWUFBQSxDQUFBLENBQUFyK0QsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxFQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsR0FBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsSUFBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUVBdzlDLFVBQUEsQ0FBQSxDQUFBdCtELE1BQUEsRUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLEdBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsT0FFQXk5QyxnQkFBQSxDQUFBLENBQUF2K0QsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxHQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsR0FBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsR0FBQThnQixJQUFBLENBQUEsR0FBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsSUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE1BQUEsQ0FBQTlnQixNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxPQUVBMDlDLGlCQUFBLENBQUEsQ0FBQXgrRCxNQUFBLEVBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxHQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxHQUFBLElBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxJQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsTUFBQSxDQUFBOWdCLE1BQUEsRUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLE9BRUEyOUMsVUFBQSxDQUFBLENBQUF6K0QsTUFBQSxFQUFBOGdCLElBQUEsQ0FBQSxFQUFBLEVBQUEsSUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsR0FBQSxFQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLEdBQUEsRUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEVBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxFQUFBLE1BQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsRUFBQSxNQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsTUFBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsR0FBQSxLQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLEdBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThnQixJQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsQ0FBQTlnQixNQUFBLElBQUE4Z0IsSUFBQSxDQUFBLElBQUEsSUFBQSxLQUFBLENBQUE5Z0IsTUFBQSxHQUFBOGdCLElBQUEsQ0FBQSxJQUFBLElBQUEsS0FBQSxDQUFBOWdCLE1BQUEsSUFBQThn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QUFTLFVBQ1RDLFFBQVMsVUFDVEMsTUFBTyxRQUNQQyxPQUFRLFNBQ1JDLEtBQU0sT0FDTkMsS0FBTSxPQUNOb2tELFlBQWEsZUFDYmxrRCxXQUFZLGFBQ1pDLEtBQU0sT0FDTkMsWUFBYSxjQUNiQyxRQUFTLFVBQ1Rna0QsZ0JBQWlCLG1CQUNqQkMsZUFBZ0Isa0JBQ2hCOWpELE9BQVEsU0FDUkMsSUFBSyxNQUNMQyxNQUFPLFFBQ1BDLFNBQVUsV0FDVkMsWUFBYSxjQUNiQyxVQUFXLFlBQ1gwakQsYUFBYyxnQkFDZEMsY0FBZSxpQkFDZnhqRCxVQUFXLCtCQUdrQnNoRCxDQUFBQSxHQUFjbnpILE9BQU8yUCxLQUFLd2pILEdBQWF4MEgsS0FBSysxQyxTQUFXMTBDLE9BQU8yUCxLQUFLd2pILEdBQVl4OEgsT0FBVSxzREM5Q3hIOFEsRUFBQTZ0SCxrQ0FBQXZrRSxPQUFBb3hELFNBQUE5cEQiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxudmFyIEtfTUFYX0xFTkdUSCA9IDB4N2ZmZmZmZmZcbmV4cG9ydHMua01heExlbmd0aCA9IEtfTUFYX0xFTkdUSFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBQcmludCB3YXJuaW5nIGFuZCByZWNvbW1lbmQgdXNpbmcgYGJ1ZmZlcmAgdjQueCB3aGljaCBoYXMgYW4gT2JqZWN0XG4gKiAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBXZSByZXBvcnQgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBpZiB0aGUgYXJlIG5vdCBzdWJjbGFzc2FibGVcbiAqIHVzaW5nIF9fcHJvdG9fXy4gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWBcbiAqIChTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOCkuIElFIDEwIGxhY2tzIHN1cHBvcnRcbiAqIGZvciBfX3Byb3RvX18gYW5kIGhhcyBhIGJ1Z2d5IHR5cGVkIGFycmF5IGltcGxlbWVudGF0aW9uLlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBjb25zb2xlLmVycm9yKFxuICAgICdUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgJyArXG4gICAgJ2BidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuJ1xuICApXG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgLy8gQ2FuIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkP1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7IF9fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfSB9XG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIGJ1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBidWZcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG5pZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnNwZWNpZXMgIT0gbnVsbCAmJlxuICAgIEJ1ZmZlcltTeW1ib2wuc3BlY2llc10gPT09IEJ1ZmZlcikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgIHZhbHVlOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSlcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2UodmFsdWUpXG4gIH1cblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IFR5cGVFcnJvcihcbiAgICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICtcbiAgICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgICApXG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZSh2YWx1ZSwgQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIEFycmF5QnVmZmVyKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgKVxuICB9XG5cbiAgdmFyIHZhbHVlT2YgPSB2YWx1ZS52YWx1ZU9mICYmIHZhbHVlLnZhbHVlT2YoKVxuICBpZiAodmFsdWVPZiAhPSBudWxsICYmIHZhbHVlT2YgIT09IHZhbHVlKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlT2YsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIHZhciBiID0gZnJvbU9iamVjdCh2YWx1ZSlcbiAgaWYgKGIpIHJldHVybiBiXG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1ByaW1pdGl2ZSAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShcbiAgICAgIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0oJ3N0cmluZycpLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGhcbiAgICApXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICtcbiAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gIClcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBOb3RlOiBDaGFuZ2UgcHJvdG90eXBlICphZnRlciogQnVmZmVyLmZyb20gaXMgZGVmaW5lZCB0byB3b3JrYXJvdW5kIENocm9tZSBidWc6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzE0OFxuQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIHNpemUgKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlIChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICB2YXIgYnVmXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBidWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmIChpc0luc3RhbmNlKGJ1ZiwgVWludDhBcnJheSkpIHtcbiAgICAgIGJ1ZiA9IEJ1ZmZlci5mcm9tKGJ1ZilcbiAgICB9XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgaXNJbnN0YW5jZShzdHJpbmcsIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBzdHJpbmdcbiAgICApXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbXVzdE1hdGNoID0gKGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZSlcbiAgaWYgKCFtdXN0TWF0Y2ggJiYgbGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB7XG4gICAgICAgICAgcmV0dXJuIG11c3RNYXRjaCA/IC0xIDogdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgfVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCAoYW5kIHRoZSBgaXMtYnVmZmVyYCBucG0gcGFja2FnZSlcbi8vIHRvIGRldGVjdCBhIEJ1ZmZlciBpbnN0YW5jZS4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlcmBcbi8vIHJlbGlhYmx5IGluIGEgYnJvd3NlcmlmeSBjb250ZXh0IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50XG4vLyBjb3BpZXMgb2YgdGhlICdidWZmZXInIHBhY2thZ2UgaW4gdXNlLiBUaGlzIG1ldGhvZCB3b3JrcyBldmVuIGZvciBCdWZmZXJcbi8vIGluc3RhbmNlcyB0aGF0IHdlcmUgY3JlYXRlZCBmcm9tIGFub3RoZXIgY29weSBvZiB0aGUgYGJ1ZmZlcmAgcGFja2FnZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE1NFxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyA9IEJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmdcblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5yZXBsYWNlKC8oLnsyfSkvZywgJyQxICcpLnRyaW0oKVxuICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmIChpc0luc3RhbmNlKHRhcmdldCwgVWludDhBcnJheSkpIHtcbiAgICB0YXJnZXQgPSBCdWZmZXIuZnJvbSh0YXJnZXQsIHRhcmdldC5vZmZzZXQsIHRhcmdldC5ieXRlTGVuZ3RoKVxuICB9XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdGFyZ2V0KVxuICAgIClcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKG51bWJlcklzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgWyB2YWwgXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+PiAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgKGJ5dGVzW2kgKyAxXSAqIDI1NikpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVXNlIGJ1aWx0LWluIHdoZW4gYXZhaWxhYmxlLCBtaXNzaW5nIGZyb20gSUUxMVxuICAgIHRoaXMuY29weVdpdGhpbih0YXJnZXRTdGFydCwgc3RhcnQsIGVuZClcbiAgfSBlbHNlIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKChlbmNvZGluZyA9PT0gJ3V0ZjgnICYmIGNvZGUgPCAxMjgpIHx8XG4gICAgICAgICAgZW5jb2RpbmcgPT09ICdsYXRpbjEnKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogSWYgYHZhbGAgZml0cyBpbnRvIGEgc2luZ2xlIGJ5dGUsIHVzZSB0aGF0IG51bWVyaWMgdmFsdWUuXG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgdGFrZXMgZXF1YWwgc2lnbnMgYXMgZW5kIG9mIHRoZSBCYXNlNjQgZW5jb2RpbmdcbiAgc3RyID0gc3RyLnNwbGl0KCc9JylbMF1cbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG4vLyBBcnJheUJ1ZmZlciBvciBVaW50OEFycmF5IG9iamVjdHMgZnJvbSBvdGhlciBjb250ZXh0cyAoaS5lLiBpZnJhbWVzKSBkbyBub3QgcGFzc1xuLy8gdGhlIGBpbnN0YW5jZW9mYCBjaGVjayBidXQgdGhleSBzaG91bGQgYmUgdHJlYXRlZCBhcyBvZiB0aGF0IHR5cGUuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNjZcbmZ1bmN0aW9uIGlzSW5zdGFuY2UgKG9iaiwgdHlwZSkge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fFxuICAgIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmXG4gICAgICBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lKVxufVxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICAvLyBGb3IgSUUxMSBzdXBwb3J0XG4gIHJldHVybiBvYmogIT09IG9iaiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuIiwiLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIi8qISBUd2Vha3BhbmUgMy4wLjggKGMpIDIwMTYgY29jb3BvbiwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLiAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5Ud2Vha3BhbmUgPSB7fSkpO1xufSkodGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKipcbiAgICAgKiBBIHNpbXBsZSBzZW1hbnRpYyB2ZXJzaW9uaW5nIHBlcnNlci5cbiAgICAgKi9cbiAgICBjbGFzcyBTZW12ZXIge1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3RydWN0b3IodGV4dCkge1xuICAgICAgICAgICAgY29uc3QgW2NvcmUsIHByZXJlbGVhc2VdID0gdGV4dC5zcGxpdCgnLScpO1xuICAgICAgICAgICAgY29uc3QgY29yZUNvbXBzID0gY29yZS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgdGhpcy5tYWpvciA9IHBhcnNlSW50KGNvcmVDb21wc1swXSwgMTApO1xuICAgICAgICAgICAgdGhpcy5taW5vciA9IHBhcnNlSW50KGNvcmVDb21wc1sxXSwgMTApO1xuICAgICAgICAgICAgdGhpcy5wYXRjaCA9IHBhcnNlSW50KGNvcmVDb21wc1syXSwgMTApO1xuICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gcHJlcmVsZWFzZSAhPT0gbnVsbCAmJiBwcmVyZWxlYXNlICE9PSB2b2lkIDAgPyBwcmVyZWxlYXNlIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSBbdGhpcy5tYWpvciwgdGhpcy5taW5vciwgdGhpcy5wYXRjaF0uam9pbignLicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlcmVsZWFzZSAhPT0gbnVsbCA/IFtjb3JlLCB0aGlzLnByZXJlbGVhc2VdLmpvaW4oJy0nKSA6IGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8gPSBjb250cm9sbGVyO1xuICAgICAgICB9XG4gICAgICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5nZXQoJ2Rpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGRpc2FibGVkKGRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5zZXQoJ2Rpc2FibGVkJywgZGlzYWJsZWQpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBoaWRkZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52aWV3UHJvcHMuZ2V0KCdoaWRkZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgaGlkZGVuKGhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52aWV3UHJvcHMuc2V0KCdoaWRkZW4nLCBoaWRkZW4pO1xuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5zZXQoJ2Rpc3Bvc2VkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGFzcyBUcENoYW5nZUV2ZW50IGV4dGVuZHMgVHBFdmVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgdmFsdWUsIHByZXNldEtleSwgbGFzdCkge1xuICAgICAgICAgICAgc3VwZXIodGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucHJlc2V0S2V5ID0gcHJlc2V0S2V5O1xuICAgICAgICAgICAgdGhpcy5sYXN0ID0gbGFzdCAhPT0gbnVsbCAmJiBsYXN0ICE9PSB2b2lkIDAgPyBsYXN0IDogdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGFzcyBUcFVwZGF0ZUV2ZW50IGV4dGVuZHMgVHBFdmVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgdmFsdWUsIHByZXNldEtleSkge1xuICAgICAgICAgICAgc3VwZXIodGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucHJlc2V0S2V5ID0gcHJlc2V0S2V5O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIFRwRm9sZEV2ZW50IGV4dGVuZHMgVHBFdmVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHN1cGVyKHRhcmdldCk7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkID0gZXhwYW5kZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JjZUNhc3Qodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVlcEVxdWFsc0FycmF5KGExLCBhMikge1xuICAgICAgICBpZiAoYTEubGVuZ3RoICE9PSBhMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGExLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYTFbaV0gIT09IGEyW2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IENSRUFURV9NRVNTQUdFX01BUCA9IHtcbiAgICAgICAgYWxyZWFkeWRpc3Bvc2VkOiAoKSA9PiAnVmlldyBoYXMgYmVlbiBhbHJlYWR5IGRpc3Bvc2VkJyxcbiAgICAgICAgaW52YWxpZHBhcmFtczogKGNvbnRleHQpID0+IGBJbnZhbGlkIHBhcmFtZXRlcnMgZm9yICcke2NvbnRleHQubmFtZX0nYCxcbiAgICAgICAgbm9tYXRjaGluZ2NvbnRyb2xsZXI6IChjb250ZXh0KSA9PiBgTm8gbWF0Y2hpbmcgY29udHJvbGxlciBmb3IgJyR7Y29udGV4dC5rZXl9J2AsXG4gICAgICAgIG5vbWF0Y2hpbmd2aWV3OiAoY29udGV4dCkgPT4gYE5vIG1hdGNoaW5nIHZpZXcgZm9yICcke0pTT04uc3RyaW5naWZ5KGNvbnRleHQucGFyYW1zKX0nYCxcbiAgICAgICAgbm90YmluZGFibGU6ICgpID0+IGBWYWx1ZSBpcyBub3QgYmluZGFibGVgLFxuICAgICAgICBwcm9wZXJ0eW5vdGZvdW5kOiAoY29udGV4dCkgPT4gYFByb3BlcnR5ICcke2NvbnRleHQubmFtZX0nIG5vdCBmb3VuZGAsXG4gICAgICAgIHNob3VsZG5ldmVyaGFwcGVuOiAoKSA9PiAnVGhpcyBlcnJvciBzaG91bGQgbmV2ZXIgaGFwcGVuJyxcbiAgICB9O1xuICAgIGNsYXNzIFRwRXJyb3Ige1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgKF9hID0gQ1JFQVRFX01FU1NBR0VfTUFQW2NvbmZpZy50eXBlXShmb3JjZUNhc3QoY29uZmlnLmNvbnRleHQpKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ1VuZXhwZWN0ZWQgZXJyb3InO1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICAgICAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpLnN0YWNrO1xuICAgICAgICAgICAgdGhpcy50eXBlID0gY29uZmlnLnR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGFscmVhZHlEaXNwb3NlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHBFcnJvcih7IHR5cGU6ICdhbHJlYWR5ZGlzcG9zZWQnIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBub3RCaW5kYWJsZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHBFcnJvcih7XG4gICAgICAgICAgICAgICAgdHlwZTogJ25vdGJpbmRhYmxlJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBwcm9wZXJ0eU5vdEZvdW5kKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHBFcnJvcih7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3Byb3BlcnR5bm90Zm91bmQnLFxuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHNob3VsZE5ldmVySGFwcGVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUcEVycm9yKHsgdHlwZTogJ3Nob3VsZG5ldmVyaGFwcGVuJyB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEJpbmRpbmdUYXJnZXQge1xuICAgICAgICBjb25zdHJ1Y3RvcihvYmosIGtleSwgb3B0X2lkKSB7XG4gICAgICAgICAgICB0aGlzLm9ial8gPSBvYmo7XG4gICAgICAgICAgICB0aGlzLmtleV8gPSBrZXk7XG4gICAgICAgICAgICB0aGlzLnByZXNldEtleV8gPSBvcHRfaWQgIT09IG51bGwgJiYgb3B0X2lkICE9PSB2b2lkIDAgPyBvcHRfaWQgOiBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzQmluZGFibGUob2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGtleSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmtleV87XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHByZXNldEtleSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXNldEtleV87XG4gICAgICAgIH1cbiAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9ial9bdGhpcy5rZXlfXTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZSh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5vYmpfW3RoaXMua2V5X10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZVByb3BlcnR5KG5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZU9iaiA9IHRoaXMucmVhZCgpO1xuICAgICAgICAgICAgaWYgKCFCaW5kaW5nVGFyZ2V0LmlzQmluZGFibGUodmFsdWVPYmopKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5ub3RCaW5kYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEobmFtZSBpbiB2YWx1ZU9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnByb3BlcnR5Tm90Rm91bmQobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZU9ialtuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQnV0dG9uQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRpdGxlKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLmdldCgndGl0bGUnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHRpdGxlKHRpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5zZXQoJ3RpdGxlJywgdGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCBlbWl0dGVyID0gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIuZW1pdHRlcjtcbiAgICAgICAgICAgIGVtaXR0ZXIub24oZXZlbnROYW1lLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYmgobmV3IFRwRXZlbnQodGhpcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEVtaXR0ZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzXyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKCFvYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVyc19bZXZlbnROYW1lXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JzZXJ2ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIG9mZihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKG9ic2VydmVycykge1xuICAgICAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdID0gb2JzZXJ2ZXJzLmZpbHRlcigob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmhhbmRsZXIgIT09IGhhbmRsZXI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBlbWl0KGV2ZW50TmFtZSwgZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKCFvYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYnNlcnZlcnMuZm9yRWFjaCgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5oYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgUFJFRklYID0gJ3RwJztcbiAgICBmdW5jdGlvbiBDbGFzc05hbWUodmlld05hbWUpIHtcbiAgICAgICAgY29uc3QgZm4gPSAob3B0X2VsZW1lbnROYW1lLCBvcHRfbW9kaWZpZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgUFJFRklYLFxuICAgICAgICAgICAgICAgICctJyxcbiAgICAgICAgICAgICAgICB2aWV3TmFtZSxcbiAgICAgICAgICAgICAgICAndicsXG4gICAgICAgICAgICAgICAgb3B0X2VsZW1lbnROYW1lID8gYF8ke29wdF9lbGVtZW50TmFtZX1gIDogJycsXG4gICAgICAgICAgICAgICAgb3B0X21vZGlmaWVyID8gYC0ke29wdF9tb2RpZmllcn1gIDogJycsXG4gICAgICAgICAgICBdLmpvaW4oJycpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcG9zZShoMSwgaDIpIHtcbiAgICAgICAgcmV0dXJuIChpbnB1dCkgPT4gaDIoaDEoaW5wdXQpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXh0cmFjdFZhbHVlKGV2KSB7XG4gICAgICAgIHJldHVybiBldi5yYXdWYWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZFZhbHVlKHZhbHVlLCBhcHBseVZhbHVlKSB7XG4gICAgICAgIHZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIGNvbXBvc2UoZXh0cmFjdFZhbHVlLCBhcHBseVZhbHVlKSk7XG4gICAgICAgIGFwcGx5VmFsdWUodmFsdWUucmF3VmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kVmFsdWVNYXAodmFsdWVNYXAsIGtleSwgYXBwbHlWYWx1ZSkge1xuICAgICAgICBiaW5kVmFsdWUodmFsdWVNYXAudmFsdWUoa2V5KSwgYXBwbHlWYWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXBwbHlDbGFzcyhlbGVtLCBjbGFzc05hbWUsIGFjdGl2ZSkge1xuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbHVlVG9DbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGFwcGx5Q2xhc3MoZWxlbSwgY2xhc3NOYW1lLCB2YWx1ZSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRWYWx1ZVRvVGV4dENvbnRlbnQodmFsdWUsIGVsZW0pIHtcbiAgICAgICAgYmluZFZhbHVlKHZhbHVlLCAodGV4dCkgPT4ge1xuICAgICAgICAgICAgZWxlbS50ZXh0Q29udGVudCA9IHRleHQgIT09IG51bGwgJiYgdGV4dCAhPT0gdm9pZCAwID8gdGV4dCA6ICcnO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkcSA9IENsYXNzTmFtZSgnYnRuJyk7XG4gICAgY2xhc3MgQnV0dG9uVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkcSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRxKCdiJykpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBidXR0b25FbGVtO1xuICAgICAgICAgICAgY29uc3QgdGl0bGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGl0bGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJHEoJ3QnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVUb1RleHRDb250ZW50KGNvbmZpZy5wcm9wcy52YWx1ZSgndGl0bGUnKSwgdGl0bGVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQnV0dG9uQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrXyA9IHRoaXMub25DbGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQnV0dG9uVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGlja18pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2xpY2tfKCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NsaWNrJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQm91bmRWYWx1ZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGluaXRpYWxWYWx1ZSwgY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRfID0gY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICB0aGlzLmVxdWFsc18gPSAoX2EgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuZXF1YWxzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoKHYxLCB2MikgPT4gdjEgPT09IHYyKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnJhd1ZhbHVlXyA9IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY29uc3RyYWludCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cmFpbnRfO1xuICAgICAgICB9XG4gICAgICAgIGdldCByYXdWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhd1ZhbHVlXztcbiAgICAgICAgfVxuICAgICAgICBzZXQgcmF3VmFsdWUocmF3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UmF3VmFsdWUocmF3VmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRSYXdWYWx1ZShyYXdWYWx1ZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY29uc3RyYWluZWRWYWx1ZSA9IHRoaXMuY29uc3RyYWludF9cbiAgICAgICAgICAgICAgICA/IHRoaXMuY29uc3RyYWludF8uY29uc3RyYWluKHJhd1ZhbHVlKVxuICAgICAgICAgICAgICAgIDogcmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VkID0gIXRoaXMuZXF1YWxzXyh0aGlzLnJhd1ZhbHVlXywgY29uc3RyYWluZWRWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZWQgJiYgIW9wdHMuZm9yY2VFbWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2JlZm9yZWNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmF3VmFsdWVfID0gY29uc3RyYWluZWRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0cyxcbiAgICAgICAgICAgICAgICByYXdWYWx1ZTogY29uc3RyYWluZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFByaW1pdGl2ZVZhbHVlIHtcbiAgICAgICAgY29uc3RydWN0b3IoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZV8gPSBpbml0aWFsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHJhd1ZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVfO1xuICAgICAgICB9XG4gICAgICAgIHNldCByYXdWYWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRSYXdWYWx1ZSh2YWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldFJhd1ZhbHVlKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZV8gPT09IHZhbHVlICYmICFvcHRzLmZvcmNlRW1pdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdiZWZvcmVjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlXyA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRzLFxuICAgICAgICAgICAgICAgIHJhd1ZhbHVlOiB0aGlzLnZhbHVlXyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVZhbHVlKGluaXRpYWxWYWx1ZSwgY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuY29uc3RyYWludDtcbiAgICAgICAgY29uc3QgZXF1YWxzID0gY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLmVxdWFscztcbiAgICAgICAgaWYgKCFjb25zdHJhaW50ICYmICFlcXVhbHMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJpbWl0aXZlVmFsdWUoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEJvdW5kVmFsdWUoaW5pdGlhbFZhbHVlLCBjb25maWcpO1xuICAgIH1cblxuICAgIGNsYXNzIFZhbHVlTWFwIHtcbiAgICAgICAgY29uc3RydWN0b3IodmFsdWVNYXApIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnZhbE1hcF8gPSB2YWx1ZU1hcDtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMudmFsTWFwXykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLnZhbE1hcF9ba2V5XTtcbiAgICAgICAgICAgICAgICB2LmVtaXR0ZXIub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgY3JlYXRlQ29yZShpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbml0aWFsVmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGtleXMucmVkdWNlKChvLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvLCB7XG4gICAgICAgICAgICAgICAgICAgIFtrZXldOiBjcmVhdGVWYWx1ZShpbml0aWFsVmFsdWVba2V5XSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGZyb21PYmplY3QoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjb3JlID0gdGhpcy5jcmVhdGVDb3JlKGluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbHVlTWFwKGNvcmUpO1xuICAgICAgICB9XG4gICAgICAgIGdldChrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbE1hcF9ba2V5XS5yYXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWxNYXBfW2tleV0ucmF3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZShrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbE1hcF9ba2V5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0KHZhbHVlLCBrZXlUb1BhcnNlck1hcCkge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoa2V5VG9QYXJzZXJNYXApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBrZXlzLnJlZHVjZSgodG1wLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh0bXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXJzZXIgPSBrZXlUb1BhcnNlck1hcFtrZXldO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyKHZhbHVlW2tleV0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zdWNjZWVkZWRcbiAgICAgICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdG1wKSwgeyBba2V5XTogcmVzdWx0LnZhbHVlIH0pIDogdW5kZWZpbmVkO1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIHJldHVybiBmb3JjZUNhc3QocmVzdWx0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VBcnJheSh2YWx1ZSwgcGFyc2VJdGVtKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZWR1Y2UoKHRtcCwgaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRtcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlSXRlbShpdGVtKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN1Y2NlZWRlZCB8fCByZXN1bHQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gWy4uLnRtcCwgcmVzdWx0LnZhbHVlXTtcbiAgICAgICAgfSwgW10pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcihwYXJzZSkge1xuICAgICAgICByZXR1cm4gKG9wdGlvbmFsKSA9PiAodikgPT4ge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25hbCAmJiB2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZWVkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9uYWwgJiYgdiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VlZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZSh2KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZWVkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZWVkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXJzKG9wdGlvbmFsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXN0b206IChwYXJzZSkgPT4gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcihwYXJzZSkob3B0aW9uYWwpLFxuICAgICAgICAgICAgYm9vbGVhbjogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4gdHlwZW9mIHYgPT09ICdib29sZWFuJyA/IHYgOiB1bmRlZmluZWQpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIG51bWJlcjogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInID8gdiA6IHVuZGVmaW5lZCkob3B0aW9uYWwpLFxuICAgICAgICAgICAgc3RyaW5nOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2IDogdW5kZWZpbmVkKShvcHRpb25hbCksXG4gICAgICAgICAgICBmdW5jdGlvbjogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT5cbiAgICAgICAgICAgIHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nID8gdiA6IHVuZGVmaW5lZCkob3B0aW9uYWwpLFxuICAgICAgICAgICAgY29uc3RhbnQ6ICh2YWx1ZSkgPT4gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4gKHYgPT09IHZhbHVlID8gdmFsdWUgOiB1bmRlZmluZWQpKShvcHRpb25hbCksXG4gICAgICAgICAgICByYXc6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHYpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIG9iamVjdDogKGtleVRvUGFyc2VyTWFwKSA9PiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdCh2KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VPYmplY3Qodiwga2V5VG9QYXJzZXJNYXApO1xuICAgICAgICAgICAgfSkob3B0aW9uYWwpLFxuICAgICAgICAgICAgYXJyYXk6IChpdGVtUGFyc2VyKSA9PiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUFycmF5KHYsIGl0ZW1QYXJzZXIpO1xuICAgICAgICAgICAgfSkob3B0aW9uYWwpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBQYXJhbXNQYXJzZXJzID0ge1xuICAgICAgICBvcHRpb25hbDogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcnModHJ1ZSksXG4gICAgICAgIHJlcXVpcmVkOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVycyhmYWxzZSksXG4gICAgfTtcbiAgICBmdW5jdGlvbiBwYXJzZVBhcmFtcyh2YWx1ZSwga2V5VG9QYXJzZXJNYXApIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gUGFyYW1zUGFyc2Vycy5yZXF1aXJlZC5vYmplY3Qoa2V5VG9QYXJzZXJNYXApKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdWNjZWVkZWQgPyByZXN1bHQudmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlzcG9zZUVsZW1lbnQoZWxlbSkge1xuICAgICAgICBpZiAoZWxlbSAmJiBlbGVtLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW0ucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChlbGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRBbGxCbGFkZVBvc2l0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIFsndmVyeWZpcnN0JywgJ2ZpcnN0JywgJ2xhc3QnLCAndmVyeWxhc3QnXTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkcCA9IENsYXNzTmFtZSgnJyk7XG4gICAgY29uc3QgUE9TX1RPX0NMQVNTX05BTUVfTUFQID0ge1xuICAgICAgICB2ZXJ5Zmlyc3Q6ICd2ZnN0JyxcbiAgICAgICAgZmlyc3Q6ICdmc3QnLFxuICAgICAgICBsYXN0OiAnbHN0JyxcbiAgICAgICAgdmVyeWxhc3Q6ICd2bHN0JyxcbiAgICB9O1xuICAgIGNsYXNzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRfID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuYmxhZGUgPSBjb25maWcuYmxhZGU7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBjb25maWcudmlldztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnZpZXcuZWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuYmxhZGUudmFsdWUoJ3Bvc2l0aW9ucycpLmVtaXR0ZXIub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZXRBbGxCbGFkZVBvc2l0aW9ucygpLmZvckVhY2goKHBvcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lJHAodW5kZWZpbmVkLCBQT1NfVE9fQ0xBU1NfTkFNRV9NQVBbcG9zXSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYmxhZGUuZ2V0KCdwb3NpdGlvbnMnKS5mb3JFYWNoKChwb3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRwKHVuZGVmaW5lZCwgUE9TX1RPX0NMQVNTX05BTUVfTUFQW3Bvc10pKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMuaGFuZGxlRGlzcG9zZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGlzcG9zZUVsZW1lbnQoZWxlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcGFyZW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50XztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFNWR19OUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG4gICAgZnVuY3Rpb24gZm9yY2VSZWZsb3coZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzYWJsZVRyYW5zaXRpb25UZW1wb3JhcmlseShlbGVtZW50LCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCB0ID0gZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbiA9IHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN1cHBvcnRzVG91Y2goZG9jKSB7XG4gICAgICAgIHJldHVybiBkb2Mub250b3VjaHN0YXJ0ICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRXaW5kb3dEb2N1bWVudCgpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFsT2JqID0gZm9yY2VDYXN0KGdldEdsb2JhbE9iamVjdCgpKTtcbiAgICAgICAgcmV0dXJuIGdsb2JhbE9iai5kb2N1bWVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q2FudmFzQ29udGV4dChjYW52YXNFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHdpbiA9IGNhbnZhc0VsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAgICAgaWYgKCF3aW4pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzQnJvd3NlciA9ICdkb2N1bWVudCcgaW4gd2luO1xuICAgICAgICByZXR1cm4gaXNCcm93c2VyID8gY2FudmFzRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpIDogbnVsbDtcbiAgICB9XG4gICAgY29uc3QgSUNPTl9JRF9UT19JTk5FUl9IVE1MX01BUCA9IHtcbiAgICAgICAgY2hlY2s6ICc8cGF0aCBkPVwiTTIgOGw0IDRsOCAtOFwiLz4nLFxuICAgICAgICBkcm9wZG93bjogJzxwYXRoIGQ9XCJNNSA3aDZsLTMgMyB6XCIvPicsXG4gICAgICAgIHAyZHBhZDogJzxwYXRoIGQ9XCJNOCA0djhcIi8+PHBhdGggZD1cIk00IDhoOFwiLz48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEuMlwiLz4nLFxuICAgIH07XG4gICAgZnVuY3Rpb24gY3JlYXRlU3ZnSWNvbkVsZW1lbnQoZG9jdW1lbnQsIGljb25JZCkge1xuICAgICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgICAgICBlbGVtLmlubmVySFRNTCA9IElDT05fSURfVE9fSU5ORVJfSFRNTF9NQVBbaWNvbklkXTtcbiAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc2VydEVsZW1lbnRBdChwYXJlbnRFbGVtZW50LCBlbGVtZW50LCBpbmRleCkge1xuICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShlbGVtZW50LCBwYXJlbnRFbGVtZW50LmNoaWxkcmVuW2luZGV4XSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRFbGVtZW50cyhlbGVtZW50KSB7XG4gICAgICAgIHdoaWxlIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5jaGlsZHJlblswXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGROb2RlcyhlbGVtZW50KSB7XG4gICAgICAgIHdoaWxlIChlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmNoaWxkTm9kZXNbMF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmROZXh0VGFyZ2V0KGV2KSB7XG4gICAgICAgIGlmIChldi5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZm9yY2VDYXN0KGV2LnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgnZXhwbGljaXRPcmlnaW5hbFRhcmdldCcgaW4gZXYpIHtcbiAgICAgICAgICAgIHJldHVybiBldi5leHBsaWNpdE9yaWdpbmFsVGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRvID0gQ2xhc3NOYW1lKCdsYmwnKTtcbiAgICBmdW5jdGlvbiBjcmVhdGVMYWJlbE5vZGUoZG9jLCBsYWJlbCkge1xuICAgICAgICBjb25zdCBmcmFnID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgY29uc3QgbGluZU5vZGVzID0gbGFiZWwuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRvYy5jcmVhdGVUZXh0Tm9kZShsaW5lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxpbmVOb2Rlcy5mb3JFYWNoKChsaW5lTm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVFbGVtZW50KCdicicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQobGluZU5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZyYWc7XG4gICAgfVxuICAgIGNsYXNzIExhYmVsVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbygpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBsYWJlbEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbygnbCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcChjb25maWcucHJvcHMsICdsYWJlbCcsICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbyh1bmRlZmluZWQsICdub2wnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkbyh1bmRlZmluZWQsICdub2wnKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZXMobGFiZWxFbGVtKTtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxFbGVtLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsTm9kZShkb2MsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobGFiZWxFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubGFiZWxFbGVtZW50ID0gbGFiZWxFbGVtO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdmFsdWVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG8oJ3YnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodmFsdWVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVFbGVtZW50ID0gdmFsdWVFbGVtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTGFiZWxDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdQcm9wcyA9IGNvbmZpZy52YWx1ZUNvbnRyb2xsZXIudmlld1Byb3BzO1xuICAgICAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25maWcpLCB7IHZpZXc6IG5ldyBMYWJlbFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pLCB2aWV3UHJvcHM6IHZpZXdQcm9wcyB9KSk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNvbnRyb2xsZXIgPSBjb25maWcudmFsdWVDb250cm9sbGVyO1xuICAgICAgICAgICAgdGhpcy52aWV3LnZhbHVlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnZhbHVlQ29udHJvbGxlci52aWV3LmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgQnV0dG9uQmxhZGVQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnYnV0dG9uJyxcbiAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcC5yZXF1aXJlZC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnYnV0dG9uJyksXG4gICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8geyBwYXJhbXM6IHJlc3VsdCB9IDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IExhYmVsQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogYXJncy5wYXJhbXMubGFiZWwsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWVDb250cm9sbGVyOiBuZXcgQnV0dG9uQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhcmdzLnBhcmFtcy50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIExhYmVsQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlci52YWx1ZUNvbnRyb2xsZXIgaW5zdGFuY2VvZiBCdXR0b25Db250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCdXR0b25BcGkoYXJncy5jb250cm9sbGVyKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgVmFsdWVCbGFkZUNvbnRyb2xsZXIgZXh0ZW5kcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQmxhZGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmFsdWVNYXAoe1xuICAgICAgICAgICAgcG9zaXRpb25zOiBjcmVhdGVWYWx1ZShbXSwge1xuICAgICAgICAgICAgICAgIGVxdWFsczogZGVlcEVxdWFsc0FycmF5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIEZvbGRhYmxlIGV4dGVuZHMgVmFsdWVNYXAge1xuICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZU1hcCkge1xuICAgICAgICAgICAgc3VwZXIodmFsdWVNYXApO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjcmVhdGUoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcmVPYmogPSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCxcbiAgICAgICAgICAgICAgICBleHBhbmRlZEhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICBzaG91bGRGaXhIZWlnaHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRlbXBvcmFyeUV4cGFuZGVkOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSBWYWx1ZU1hcC5jcmVhdGVDb3JlKGNvcmVPYmopO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb2xkYWJsZShjb3JlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgc3R5bGVFeHBhbmRlZCgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSB0aGlzLmdldCgndGVtcG9yYXJ5RXhwYW5kZWQnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5nZXQoJ2V4cGFuZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHN0eWxlSGVpZ2h0KCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN0eWxlRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXhIZWlnaHQgPSB0aGlzLmdldCgnZXhwYW5kZWRIZWlnaHQnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldCgnc2hvdWxkRml4SGVpZ2h0JykgJiYgIWlzRW1wdHkoZXhIZWlnaHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2V4SGVpZ2h0fXB4YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnYXV0byc7XG4gICAgICAgIH1cbiAgICAgICAgYmluZEV4cGFuZGVkQ2xhc3MoZWxlbSwgZXhwYW5kZWRDbGFzc05hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9uRXhwYW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5zdHlsZUV4cGFuZGVkO1xuICAgICAgICAgICAgICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoZXhwYW5kZWRDbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGV4cGFuZGVkQ2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMsICdleHBhbmRlZCcsIG9uRXhwYW5kKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAndGVtcG9yYXJ5RXhwYW5kZWQnLCBvbkV4cGFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYW5VcFRyYW5zaXRpb24oKSB7XG4gICAgICAgICAgICB0aGlzLnNldCgnc2hvdWxkRml4SGVpZ2h0JywgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zZXQoJ2V4cGFuZGVkSGVpZ2h0JywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLnNldCgnY29tcGxldGVkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcHV0ZUV4cGFuZGVkRm9sZGVySGVpZ2h0KGZvbGRlciwgY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICAgICAgZGlzYWJsZVRyYW5zaXRpb25UZW1wb3JhcmlseShjb250YWluZXJFbGVtZW50LCAoKSA9PiB7XG4gICAgICAgICAgICBmb2xkZXIuc2V0KCdleHBhbmRlZEhlaWdodCcsIG51bGwpO1xuICAgICAgICAgICAgZm9sZGVyLnNldCgndGVtcG9yYXJ5RXhwYW5kZWQnLCB0cnVlKTtcbiAgICAgICAgICAgIGZvcmNlUmVmbG93KGNvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgICAgICAgaGVpZ2h0ID0gY29udGFpbmVyRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBmb2xkZXIuc2V0KCd0ZW1wb3JhcnlFeHBhbmRlZCcsIG51bGwpO1xuICAgICAgICAgICAgZm9yY2VSZWZsb3coY29udGFpbmVyRWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaGVpZ2h0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBhcHBseUhlaWdodChmb2xkYWJsZSwgZWxlbSkge1xuICAgICAgICBlbGVtLnN0eWxlLmhlaWdodCA9IGZvbGRhYmxlLnN0eWxlSGVpZ2h0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kRm9sZGFibGUoZm9sZGFibGUsIGVsZW0pIHtcbiAgICAgICAgZm9sZGFibGUudmFsdWUoJ2V4cGFuZGVkJykuZW1pdHRlci5vbignYmVmb3JlY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgZm9sZGFibGUuc2V0KCdjb21wbGV0ZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShmb2xkYWJsZS5nZXQoJ2V4cGFuZGVkSGVpZ2h0JykpKSB7XG4gICAgICAgICAgICAgICAgZm9sZGFibGUuc2V0KCdleHBhbmRlZEhlaWdodCcsIGNvbXB1dGVFeHBhbmRlZEZvbGRlckhlaWdodChmb2xkYWJsZSwgZWxlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9sZGFibGUuc2V0KCdzaG91bGRGaXhIZWlnaHQnLCB0cnVlKTtcbiAgICAgICAgICAgIGZvcmNlUmVmbG93KGVsZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZm9sZGFibGUuZW1pdHRlci5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgYXBwbHlIZWlnaHQoZm9sZGFibGUsIGVsZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBwbHlIZWlnaHQoZm9sZGFibGUsIGVsZW0pO1xuICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCAoZXYpID0+IHtcbiAgICAgICAgICAgIGlmIChldi5wcm9wZXJ0eU5hbWUgIT09ICdoZWlnaHQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9sZGFibGUuY2xlYW5VcFRyYW5zaXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgUmFja0xpa2VBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHJhY2tBcGkpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXyA9IHJhY2tBcGk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRCdXR0b25Bc0JsYWRlKGFwaSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBhcGkuYWRkQmxhZGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCB7IHZpZXc6ICdidXR0b24nIH0pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRm9sZGVyQXNCbGFkZShhcGksIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gYXBpLmFkZEJsYWRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgeyB2aWV3OiAnZm9sZGVyJyB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFNlcGFyYXRvckFzQmxhZGUoYXBpLCBvcHRfcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG9wdF9wYXJhbXMgfHwge307XG4gICAgICAgIHJldHVybiBhcGkuYWRkQmxhZGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCB7IHZpZXc6ICdzZXBhcmF0b3InIH0pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkVGFiQXNCbGFkZShhcGksIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gYXBpLmFkZEJsYWRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgeyB2aWV3OiAndGFiJyB9KSk7XG4gICAgfVxuXG4gICAgY2xhc3MgTmVzdGVkT3JkZXJlZFNldCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGV4dHJhY3QpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLml0ZW1zXyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jYWNoZV8gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB0aGlzLm9uU3ViTGlzdEFkZF8gPSB0aGlzLm9uU3ViTGlzdEFkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25TdWJMaXN0UmVtb3ZlXyA9IHRoaXMub25TdWJMaXN0UmVtb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5leHRyYWN0XyA9IGV4dHJhY3Q7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGl0ZW1zKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNfO1xuICAgICAgICB9XG4gICAgICAgIGFsbEl0ZW1zKCkge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jYWNoZV8pO1xuICAgICAgICB9XG4gICAgICAgIGZpbmQoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmFsbEl0ZW1zKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVkZXMoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVfLmhhcyhpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoaXRlbSwgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3B0X2luZGV4ICE9PSB1bmRlZmluZWQgPyBvcHRfaW5kZXggOiB0aGlzLml0ZW1zXy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLml0ZW1zXy5zcGxpY2UoaW5kZXgsIDAsIGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5jYWNoZV8uYWRkKGl0ZW0pO1xuICAgICAgICAgICAgY29uc3Qgc3ViTGlzdCA9IHRoaXMuZXh0cmFjdF8oaXRlbSk7XG4gICAgICAgICAgICBpZiAoc3ViTGlzdCkge1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuZW1pdHRlci5vbignYWRkJywgdGhpcy5vblN1Ykxpc3RBZGRfKTtcbiAgICAgICAgICAgICAgICBzdWJMaXN0LmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25TdWJMaXN0UmVtb3ZlXyk7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5hbGxJdGVtcygpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZV8uYWRkKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2FkZCcsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICByb290OiB0aGlzLFxuICAgICAgICAgICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShpdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbXNfLmluZGV4T2YoaXRlbSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pdGVtc18uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfLmRlbGV0ZShpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHN1Ykxpc3QgPSB0aGlzLmV4dHJhY3RfKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKHN1Ykxpc3QpIHtcbiAgICAgICAgICAgICAgICBzdWJMaXN0LmVtaXR0ZXIub2ZmKCdhZGQnLCB0aGlzLm9uU3ViTGlzdEFkZF8pO1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuZW1pdHRlci5vZmYoJ3JlbW92ZScsIHRoaXMub25TdWJMaXN0UmVtb3ZlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgncmVtb3ZlJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25TdWJMaXN0QWRkXyhldikge1xuICAgICAgICAgICAgdGhpcy5jYWNoZV8uYWRkKGV2Lml0ZW0pO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2FkZCcsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogZXYuaW5kZXgsXG4gICAgICAgICAgICAgICAgaXRlbTogZXYuaXRlbSxcbiAgICAgICAgICAgICAgICByb290OiB0aGlzLFxuICAgICAgICAgICAgICAgIHRhcmdldDogZXYudGFyZ2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25TdWJMaXN0UmVtb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy5jYWNoZV8uZGVsZXRlKGV2Lml0ZW0pO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3JlbW92ZScsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogZXYuaW5kZXgsXG4gICAgICAgICAgICAgICAgaXRlbTogZXYuaXRlbSxcbiAgICAgICAgICAgICAgICByb290OiB0aGlzLFxuICAgICAgICAgICAgICAgIHRhcmdldDogZXYudGFyZ2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBJbnB1dEJpbmRpbmdBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5vbkJpbmRpbmdDaGFuZ2VfID0gdGhpcy5vbkJpbmRpbmdDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQmluZGluZ0NoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy5yZWFkKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25CaW5kaW5nQ2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldi5zZW5kZXIudGFyZ2V0LnJlYWQoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBDaGFuZ2VFdmVudCh0aGlzLCBmb3JjZUNhc3QodmFsdWUpLCB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcudGFyZ2V0LnByZXNldEtleSwgZXYub3B0aW9ucy5sYXN0KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgSW5wdXRCaW5kaW5nQ29udHJvbGxlciBleHRlbmRzIExhYmVsQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihkb2MsIGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmcgPSBjb25maWcuYmluZGluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIE1vbml0b3JCaW5kaW5nQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMub25CaW5kaW5nVXBkYXRlXyA9IHRoaXMub25CaW5kaW5nVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcuZW1pdHRlci5vbigndXBkYXRlJywgdGhpcy5vbkJpbmRpbmdVcGRhdGVfKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcucmVhZCgpO1xuICAgICAgICB9XG4gICAgICAgIG9uQmluZGluZ1VwZGF0ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXYuc2VuZGVyLnRhcmdldC5yZWFkKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwVXBkYXRlRXZlbnQodGhpcywgZm9yY2VDYXN0KHZhbHVlKSwgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLnRhcmdldC5wcmVzZXRLZXkpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIgZXh0ZW5kcyBMYWJlbENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgc3VwZXIoZG9jLCBjb25maWcpO1xuICAgICAgICAgICAgdGhpcy5iaW5kaW5nID0gY29uZmlnLmJpbmRpbmc7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQodGhpcy5iaW5kaW5nLnRpY2tlcik7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcy5oYW5kbGVEaXNwb3NlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRpbmcuZGlzcG9zZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kU3ViQmxhZGVBcGlTZXQoYXBpKSB7XG4gICAgICAgIGlmIChhcGkgaW5zdGFuY2VvZiBSYWNrQXBpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBpWydhcGlTZXRfJ107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFwaSBpbnN0YW5jZW9mIFJhY2tMaWtlQXBpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBpWydyYWNrQXBpXyddWydhcGlTZXRfJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEFwaUJ5Q29udHJvbGxlcihhcGlTZXQsIGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgYXBpID0gYXBpU2V0LmZpbmQoKGFwaSkgPT4gYXBpLmNvbnRyb2xsZXJfID09PSBjb250cm9sbGVyKTtcbiAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVCaW5kaW5nVGFyZ2V0KG9iaiwga2V5LCBvcHRfaWQpIHtcbiAgICAgICAgaWYgKCFCaW5kaW5nVGFyZ2V0LmlzQmluZGFibGUob2JqKSkge1xuICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5ub3RCaW5kYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ1RhcmdldChvYmosIGtleSwgb3B0X2lkKTtcbiAgICB9XG4gICAgY2xhc3MgUmFja0FwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlciwgcG9vbCkge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLm9uUmFja0FkZF8gPSB0aGlzLm9uUmFja0FkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrUmVtb3ZlXyA9IHRoaXMub25SYWNrUmVtb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tJbnB1dENoYW5nZV8gPSB0aGlzLm9uUmFja0lucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tNb25pdG9yVXBkYXRlXyA9IHRoaXMub25SYWNrTW9uaXRvclVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5hcGlTZXRfID0gbmV3IE5lc3RlZE9yZGVyZWRTZXQoZmluZFN1YkJsYWRlQXBpU2V0KTtcbiAgICAgICAgICAgIHRoaXMucG9vbF8gPSBwb29sO1xuICAgICAgICAgICAgY29uc3QgcmFjayA9IHRoaXMuY29udHJvbGxlcl8ucmFjaztcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbignYWRkJywgdGhpcy5vblJhY2tBZGRfKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblJhY2tSZW1vdmVfKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbignaW5wdXRjaGFuZ2UnLCB0aGlzLm9uUmFja0lucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICByYWNrLmVtaXR0ZXIub24oJ21vbml0b3J1cGRhdGUnLCB0aGlzLm9uUmFja01vbml0b3JVcGRhdGVfKTtcbiAgICAgICAgICAgIHJhY2suY2hpbGRyZW4uZm9yRWFjaCgoYmMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVwQXBpXyhiYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5yYWNrLmNoaWxkcmVuLm1hcCgoYmMpID0+IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGJjKSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkSW5wdXQob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IG9wdF9wYXJhbXMgfHwge307XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmNvbnRyb2xsZXJfLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBvb2xfLmNyZWF0ZUlucHV0KGRvYywgY3JlYXRlQmluZGluZ1RhcmdldChvYmplY3QsIGtleSwgcGFyYW1zLnByZXNldEtleSksIHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSBuZXcgSW5wdXRCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChhcGksIHBhcmFtcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gb3B0X3BhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucG9vbF8uY3JlYXRlTW9uaXRvcihkb2MsIGNyZWF0ZUJpbmRpbmdUYXJnZXQob2JqZWN0LCBrZXkpLCBwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgYXBpID0gbmV3IE1vbml0b3JCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIHJldHVybiBmb3JjZUNhc3QodGhpcy5hZGQoYXBpLCBwYXJhbXMuaW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRGb2xkZXIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkRm9sZGVyQXNCbGFkZSh0aGlzLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJ1dHRvbihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRCdXR0b25Bc0JsYWRlKHRoaXMsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRTZXBhcmF0b3JBc0JsYWRlKHRoaXMsIG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRhYihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRUYWJBc0JsYWRlKHRoaXMsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGFwaSwgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJhY2suYWRkKGFwaS5jb250cm9sbGVyXywgb3B0X2luZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGdhcGkgPSB0aGlzLmFwaVNldF8uZmluZCgoYSkgPT4gYS5jb250cm9sbGVyXyA9PT0gYXBpLmNvbnRyb2xsZXJfKTtcbiAgICAgICAgICAgIGlmIChnYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcGlTZXRfLnJlbW92ZShnYXBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBpU2V0Xy5hZGQoYXBpKTtcbiAgICAgICAgICAgIHJldHVybiBhcGk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGFwaSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yYWNrLnJlbW92ZShhcGkuY29udHJvbGxlcl8pO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJsYWRlKHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5jb250cm9sbGVyXy52aWV3LmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gdGhpcy5wb29sXy5jcmVhdGVCbGFkZShkb2MsIHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLnBvb2xfLmNyZWF0ZUJsYWRlQXBpKGJjKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChhcGksIHBhcmFtcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHNldFVwQXBpXyhiYykge1xuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5hcGlTZXRfLmZpbmQoKGFwaSkgPT4gYXBpLmNvbnRyb2xsZXJfID09PSBiYyk7XG4gICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBpU2V0Xy5hZGQodGhpcy5wb29sXy5jcmVhdGVCbGFkZUFwaShiYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUmFja0FkZF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBBcGlfKGV2LmJsYWRlQ29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrUmVtb3ZlXyhldikge1xuICAgICAgICAgICAgaWYgKGV2LmlzUm9vdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGV2LmJsYWRlQ29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5hcGlTZXRfLnJlbW92ZShhcGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUmFja0lucHV0Q2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBldi5ibGFkZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBJbnB1dEJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpID0gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgYmMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiYy5iaW5kaW5nO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQoYXBpLCBmb3JjZUNhc3QoYmluZGluZy50YXJnZXQucmVhZCgpKSwgYmluZGluZy50YXJnZXQucHJlc2V0S2V5LCBldi5vcHRpb25zLmxhc3QpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBWYWx1ZUJsYWRlQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGJjKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KGFwaSwgYmMudmFsdWUucmF3VmFsdWUsIHVuZGVmaW5lZCwgZXYub3B0aW9ucy5sYXN0KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblJhY2tNb25pdG9yVXBkYXRlXyhldikge1xuICAgICAgICAgICAgaWYgKCEoZXYuYmxhZGVDb250cm9sbGVyIGluc3RhbmNlb2YgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGV2LmJsYWRlQ29udHJvbGxlcik7XG4gICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gZXYuYmxhZGVDb250cm9sbGVyLmJpbmRpbmc7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwVXBkYXRlRXZlbnQoYXBpLCBmb3JjZUNhc3QoYmluZGluZy50YXJnZXQucmVhZCgpKSwgYmluZGluZy50YXJnZXQucHJlc2V0S2V5KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgRm9sZGVyQXBpIGV4dGVuZHMgUmFja0xpa2VBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBwb29sKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyLCBuZXcgUmFja0FwaShjb250cm9sbGVyLnJhY2tDb250cm9sbGVyLCBwb29sKSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uZm9sZGFibGVcbiAgICAgICAgICAgICAgICAudmFsdWUoJ2V4cGFuZGVkJylcbiAgICAgICAgICAgICAgICAuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdmb2xkJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwRm9sZEV2ZW50KHRoaXMsIGV2LnNlbmRlci5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogZXYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ub24oJ3VwZGF0ZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogZXYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5mb2xkYWJsZS5nZXQoJ2V4cGFuZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGV4cGFuZGVkKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmZvbGRhYmxlLnNldCgnZXhwYW5kZWQnLCBleHBhbmRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRpdGxlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCd0aXRsZScpO1xuICAgICAgICB9XG4gICAgICAgIHNldCB0aXRsZSh0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ3RpdGxlJywgdGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIGFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkRm9sZGVyKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkRm9sZGVyKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQnV0dG9uKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkQnV0dG9uKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZFNlcGFyYXRvcihvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUYWIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRUYWIocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoYXBpLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZChhcGksIG9wdF9pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGFwaSkge1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5yZW1vdmUoYXBpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRCbGFkZShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZEJsYWRlKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUmFja0xpa2VDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICB2aWV3OiBjb25maWcudmlldyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy5yYWNrQ29udHJvbGxlci52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0NvbnRyb2xsZXIgPSBjb25maWcucmFja0NvbnRyb2xsZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQbGFpblZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NOYW1lKGNvbmZpZy52aWV3TmFtZSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZElucHV0QmluZGluZ0NvbnRyb2xsZXIoYmNzLCBiKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGJjc1tpXTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIgJiYgYmMuYmluZGluZyA9PT0gYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcihiY3MsIGIpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gYmNzW2ldO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyICYmIGJjLmJpbmRpbmcgPT09IGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRWYWx1ZUJsYWRlQ29udHJvbGxlcihiY3MsIHYpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gYmNzW2ldO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgVmFsdWVCbGFkZUNvbnRyb2xsZXIgJiYgYmMudmFsdWUgPT09IHYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRTdWJSYWNrKGJjKSB7XG4gICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIFJhY2tDb250cm9sbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYmMucmFjaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBSYWNrTGlrZUNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBiYy5yYWNrQ29udHJvbGxlci5yYWNrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kU3ViQmxhZGVDb250cm9sbGVyU2V0KGJjKSB7XG4gICAgICAgIGNvbnN0IHJhY2sgPSBmaW5kU3ViUmFjayhiYyk7XG4gICAgICAgIHJldHVybiByYWNrID8gcmFja1snYmNTZXRfJ10gOiBudWxsO1xuICAgIH1cbiAgICBjbGFzcyBCbGFkZVJhY2sge1xuICAgICAgICBjb25zdHJ1Y3RvcihibGFkZSkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdGhpcy5vbkJsYWRlUG9zaXRpb25zQ2hhbmdlXyA9IHRoaXMub25CbGFkZVBvc2l0aW9uc0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25TZXRBZGRfID0gdGhpcy5vblNldEFkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25TZXRSZW1vdmVfID0gdGhpcy5vblNldFJlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZERpc3Bvc2VfID0gdGhpcy5vbkNoaWxkRGlzcG9zZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZFBvc2l0aW9uc0NoYW5nZV8gPSB0aGlzLm9uQ2hpbGRQb3NpdGlvbnNDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8gPSB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZE1vbml0b3JVcGRhdGVfID0gdGhpcy5vbkNoaWxkTW9uaXRvclVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXyA9IHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkVmlld1Byb3BzQ2hhbmdlXyA9IHRoaXMub25DaGlsZFZpZXdQcm9wc0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25EZXNjZW5kYW50TGF5b3V0XyA9IHRoaXMub25EZXNjZW5kYW50TGF5b3V0Xy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRJbnB1dENoYW5nZV8gPSB0aGlzLm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXyA9XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYmxhZGVfID0gYmxhZGUgIT09IG51bGwgJiYgYmxhZGUgIT09IHZvaWQgMCA/IGJsYWRlIDogbnVsbDtcbiAgICAgICAgICAgIChfYSA9IHRoaXMuYmxhZGVfKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUoJ3Bvc2l0aW9ucycpLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25CbGFkZVBvc2l0aW9uc0NoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8gPSBuZXcgTmVzdGVkT3JkZXJlZFNldChmaW5kU3ViQmxhZGVDb250cm9sbGVyU2V0KTtcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfLmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25TZXRBZGRfKTtcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfLmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25TZXRSZW1vdmVfKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iY1NldF8uaXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGJjLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChiYy5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBiYy5wYXJlbnQucmVtb3ZlKGJjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJjWydwYXJlbnRfJ10gPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8uYWRkKGJjLCBvcHRfaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShiYykge1xuICAgICAgICAgICAgYmNbJ3BhcmVudF8nXSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmJjU2V0Xy5yZW1vdmUoYmMpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmQoY29udHJvbGxlckNsYXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9yY2VDYXN0KHRoaXMuYmNTZXRfLmFsbEl0ZW1zKCkuZmlsdGVyKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYyBpbnN0YW5jZW9mIGNvbnRyb2xsZXJDbGFzcztcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBvblNldEFkZF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgY29uc3QgaXNSb290ID0gZXYudGFyZ2V0ID09PSBldi5yb290O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2FkZCcsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGV2Lml0ZW0sXG4gICAgICAgICAgICAgICAgaW5kZXg6IGV2LmluZGV4LFxuICAgICAgICAgICAgICAgIGlzUm9vdDogaXNSb290LFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFpc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiYyA9IGV2Lml0ZW07XG4gICAgICAgICAgICBiYy52aWV3UHJvcHMuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoaWxkVmlld1Byb3BzQ2hhbmdlXyk7XG4gICAgICAgICAgICBiYy5ibGFkZVxuICAgICAgICAgICAgICAgIC52YWx1ZSgncG9zaXRpb25zJylcbiAgICAgICAgICAgICAgICAuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoaWxkUG9zaXRpb25zQ2hhbmdlXyk7XG4gICAgICAgICAgICBiYy52aWV3UHJvcHMuaGFuZGxlRGlzcG9zZSh0aGlzLm9uQ2hpbGREaXNwb3NlXyk7XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBJbnB1dEJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMuYmluZGluZy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub24oJ3VwZGF0ZScsIHRoaXMub25DaGlsZE1vbml0b3JVcGRhdGVfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJjIGluc3RhbmNlb2YgVmFsdWVCbGFkZUNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRWYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFjayA9IGZpbmRTdWJSYWNrKGJjKTtcbiAgICAgICAgICAgICAgICBpZiAocmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbWl0dGVyID0gcmFjay5lbWl0dGVyO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9uKCdsYXlvdXQnLCB0aGlzLm9uRGVzY2VuZGFudExheW91dF8pO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9uKCdpbnB1dGNoYW5nZScsIHRoaXMub25EZXNjZW5kYW50SW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vbignbW9uaXRvcnVwZGF0ZScsIHRoaXMub25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblNldFJlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgY29uc3QgaXNSb290ID0gZXYudGFyZ2V0ID09PSBldi5yb290O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3JlbW92ZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGV2Lml0ZW0sXG4gICAgICAgICAgICAgICAgaXNSb290OiBpc1Jvb3QsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWlzUm9vdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJjID0gZXYuaXRlbTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub2ZmKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQ2hpbGRNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiYyBpbnN0YW5jZW9mIFZhbHVlQmxhZGVDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMudmFsdWUuZW1pdHRlci5vZmYoJ2NoYW5nZScsIHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYWNrID0gZmluZFN1YlJhY2soYmMpO1xuICAgICAgICAgICAgICAgIGlmIChyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSByYWNrLmVtaXR0ZXI7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub2ZmKCdsYXlvdXQnLCB0aGlzLm9uRGVzY2VuZGFudExheW91dF8pO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9mZignaW5wdXRjaGFuZ2UnLCB0aGlzLm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub2ZmKCdtb25pdG9ydXBkYXRlJywgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVBvc2l0aW9uc18oKSB7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlSXRlbXMgPSB0aGlzLmJjU2V0Xy5pdGVtcy5maWx0ZXIoKGJjKSA9PiAhYmMudmlld1Byb3BzLmdldCgnaGlkZGVuJykpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RWaXNpYmxlSXRlbSA9IHZpc2libGVJdGVtc1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RWaXNpYmxlSXRlbSA9IHZpc2libGVJdGVtc1t2aXNpYmxlSXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB0aGlzLmJjU2V0Xy5pdGVtcy5mb3JFYWNoKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKGJjID09PSBmaXJzdFZpc2libGVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHBzLnB1c2goJ2ZpcnN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5ibGFkZV8gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmxhZGVfLmdldCgncG9zaXRpb25zJykuaW5jbHVkZXMoJ3ZlcnlmaXJzdCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKCd2ZXJ5Zmlyc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYmMgPT09IGxhc3RWaXNpYmxlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKCdsYXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5ibGFkZV8gfHwgdGhpcy5ibGFkZV8uZ2V0KCdwb3NpdGlvbnMnKS5pbmNsdWRlcygndmVyeWxhc3QnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHMucHVzaCgndmVyeWxhc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiYy5ibGFkZS5zZXQoJ3Bvc2l0aW9ucycsIHBzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRQb3NpdGlvbnNDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbGF5b3V0Jywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfKF9ldikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbGF5b3V0Jywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGREaXNwb3NlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3Bvc2VkVWNzID0gdGhpcy5iY1NldF8uaXRlbXMuZmlsdGVyKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYy52aWV3UHJvcHMuZ2V0KCdkaXNwb3NlZCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXNwb3NlZFVjcy5mb3JFYWNoKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmNTZXRfLnJlbW92ZShiYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkSW5wdXRDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGZpbmRJbnB1dEJpbmRpbmdDb250cm9sbGVyKHRoaXMuZmluZChJbnB1dEJpbmRpbmdDb250cm9sbGVyKSwgZXYuc2VuZGVyKTtcbiAgICAgICAgICAgIGlmICghYmMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnaW5wdXRjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBiYyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBldi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRNb25pdG9yVXBkYXRlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBmaW5kTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKHRoaXMuZmluZChNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpLCBldi5zZW5kZXIpO1xuICAgICAgICAgICAgaWYgKCFiYykge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb25pdG9ydXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogYmMsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZFZhbHVlQ2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBmaW5kVmFsdWVCbGFkZUNvbnRyb2xsZXIodGhpcy5maW5kKFZhbHVlQmxhZGVDb250cm9sbGVyKSwgZXYuc2VuZGVyKTtcbiAgICAgICAgICAgIGlmICghYmMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnaW5wdXRjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBiYyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBldi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRGVzY2VuZGFudExheW91dF8oXykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbGF5b3V0Jywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyhldikge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2lucHV0Y2hhbmdlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogZXYuYmxhZGVDb250cm9sbGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb25pdG9ydXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogZXYuYmxhZGVDb250cm9sbGVyLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBSYWNrQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyksIHsgdmlldzogbmV3IFBsYWluVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld05hbWU6ICdicmsnLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSkgfSkpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tBZGRfID0gdGhpcy5vblJhY2tBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja1JlbW92ZV8gPSB0aGlzLm9uUmFja1JlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHJhY2sgPSBuZXcgQmxhZGVSYWNrKGNvbmZpZy5yb290ID8gdW5kZWZpbmVkIDogY29uZmlnLmJsYWRlKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbignYWRkJywgdGhpcy5vblJhY2tBZGRfKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblJhY2tSZW1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMucmFjayA9IHJhY2s7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcy5oYW5kbGVEaXNwb3NlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5yYWNrLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJjID0gdGhpcy5yYWNrLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgICAgICBiYy52aWV3UHJvcHMuc2V0KCdkaXNwb3NlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUmFja0FkZF8oZXYpIHtcbiAgICAgICAgICAgIGlmICghZXYuaXNSb290KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5zZXJ0RWxlbWVudEF0KHRoaXMudmlldy5lbGVtZW50LCBldi5ibGFkZUNvbnRyb2xsZXIudmlldy5lbGVtZW50LCBldi5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrUmVtb3ZlXyhldikge1xuICAgICAgICAgICAgaWYgKCFldi5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW1vdmVFbGVtZW50KGV2LmJsYWRlQ29udHJvbGxlci52aWV3LmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYmxhZGVDb250YWluZXJDbGFzc05hbWUgPSBDbGFzc05hbWUoJ2NudCcpO1xuXG4gICAgY2xhc3MgRm9sZGVyVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZV8gPSBDbGFzc05hbWUoY29uZmlnLnZpZXdOYW1lIHx8ICdmbGQnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygpLCBibGFkZUNvbnRhaW5lckNsYXNzTmFtZSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXyA9IGNvbmZpZy5mb2xkYWJsZTtcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfLmJpbmRFeHBhbmRlZENsYXNzKHRoaXMuZWxlbWVudCwgdGhpcy5jbGFzc05hbWVfKHVuZGVmaW5lZCwgJ2V4cGFuZGVkJykpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMuZm9sZGFibGVfLCAnY29tcGxldGVkJywgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIHRoaXMuY2xhc3NOYW1lXyh1bmRlZmluZWQsICdjcGwnKSkpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8oJ2InKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAoY29uZmlnLnByb3BzLCAndGl0bGUnLCAodGl0bGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSh0aXRsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVfKHVuZGVmaW5lZCwgJ25vdCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuY2xhc3NOYW1lXyh1bmRlZmluZWQsICdub3QnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudCA9IGJ1dHRvbkVsZW07XG4gICAgICAgICAgICBjb25zdCB0aXRsZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aXRsZUVsZW0uY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8oJ3QnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVUb1RleHRDb250ZW50KGNvbmZpZy5wcm9wcy52YWx1ZSgndGl0bGUnKSwgdGl0bGVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy50aXRsZUVsZW1lbnQgPSB0aXRsZUVsZW07XG4gICAgICAgICAgICBjb25zdCBtYXJrRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtFbGVtLmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVfKCdtJykpO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmFwcGVuZENoaWxkKG1hcmtFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW0gPSBjb25maWcuY29udGFpbmVyRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnRhaW5lckVsZW0uY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8oJ2MnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQgPSBjb250YWluZXJFbGVtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgRm9sZGVyQ29udHJvbGxlciBleHRlbmRzIFJhY2tMaWtlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBmb2xkYWJsZSA9IEZvbGRhYmxlLmNyZWF0ZSgoX2EgPSBjb25maWcuZXhwYW5kZWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWUpO1xuICAgICAgICAgICAgY29uc3QgcmMgPSBuZXcgUmFja0NvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICByb290OiBjb25maWcucm9vdCxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN1cGVyKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKSwgeyByYWNrQ29udHJvbGxlcjogcmMsIHZpZXc6IG5ldyBGb2xkZXJWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFbGVtZW50OiByYy52aWV3LmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGZvbGRhYmxlOiBmb2xkYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgdmlld05hbWU6IGNvbmZpZy5yb290ID8gJ3JvdCcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSB9KSk7XG4gICAgICAgICAgICB0aGlzLm9uVGl0bGVDbGlja18gPSB0aGlzLm9uVGl0bGVDbGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlID0gZm9sZGFibGU7XG4gICAgICAgICAgICBiaW5kRm9sZGFibGUodGhpcy5mb2xkYWJsZSwgdGhpcy52aWV3LmNvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5yYWNrQ29udHJvbGxlci5yYWNrLmVtaXR0ZXIub24oJ2FkZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvbGRhYmxlLmNsZWFuVXBUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0NvbnRyb2xsZXIucmFjay5lbWl0dGVyLm9uKCdyZW1vdmUnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2xkYWJsZS5jbGVhblVwVHJhbnNpdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25UaXRsZUNsaWNrXyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGRvY3VtZW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgb25UaXRsZUNsaWNrXygpIHtcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGUuc2V0KCdleHBhbmRlZCcsICF0aGlzLmZvbGRhYmxlLmdldCgnZXhwYW5kZWQnKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBGb2xkZXJCbGFkZVBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdmb2xkZXInLFxuICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBwLnJlcXVpcmVkLnN0cmluZyxcbiAgICAgICAgICAgICAgICB2aWV3OiBwLnJlcXVpcmVkLmNvbnN0YW50KCdmb2xkZXInKSxcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8geyBwYXJhbXM6IHJlc3VsdCB9IDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvbGRlckNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBhcmdzLnBhcmFtcy5leHBhbmRlZCxcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhcmdzLnBhcmFtcy50aXRsZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBGb2xkZXJDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb2xkZXJBcGkoYXJncy5jb250cm9sbGVyLCBhcmdzLnBvb2wpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjbGFzcyBMYWJlbGVkVmFsdWVDb250cm9sbGVyIGV4dGVuZHMgVmFsdWVCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgY29uc3Qgdmlld1Byb3BzID0gY29uZmlnLnZhbHVlQ29udHJvbGxlci52aWV3UHJvcHM7XG4gICAgICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyksIHsgdmFsdWU6IGNvbmZpZy52YWx1ZUNvbnRyb2xsZXIudmFsdWUsIHZpZXc6IG5ldyBMYWJlbFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pLCB2aWV3UHJvcHM6IHZpZXdQcm9wcyB9KSk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNvbnRyb2xsZXIgPSBjb25maWcudmFsdWVDb250cm9sbGVyO1xuICAgICAgICAgICAgdGhpcy52aWV3LnZhbHVlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnZhbHVlQ29udHJvbGxlci52aWV3LmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2VwYXJhdG9yQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRuID0gQ2xhc3NOYW1lKCdzcHInKTtcbiAgICBjbGFzcyBTZXBhcmF0b3JWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRuKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGhyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdocicpO1xuICAgICAgICAgICAgaHJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG4oJ3InKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaHJFbGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNlcGFyYXRvckNvbnRyb2xsZXIgZXh0ZW5kcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25maWcpLCB7IHZpZXc6IG5ldyBTZXBhcmF0b3JWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSkgfSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgU2VwYXJhdG9yQmxhZGVQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnc2VwYXJhdG9yJyxcbiAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICB2aWV3OiBwLnJlcXVpcmVkLmNvbnN0YW50KCdzZXBhcmF0b3InKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXBhcmF0b3JDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogYXJncy5ibGFkZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBTZXBhcmF0b3JDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXBhcmF0b3JBcGkoYXJncy5jb250cm9sbGVyKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgY2xhc3NOYW1lJG0gPSBDbGFzc05hbWUoJycpO1xuICAgIGZ1bmN0aW9uIHZhbHVlVG9Nb2RpZmllcihlbGVtLCBtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gdmFsdWVUb0NsYXNzTmFtZShlbGVtLCBjbGFzc05hbWUkbSh1bmRlZmluZWQsIG1vZGlmaWVyKSk7XG4gICAgfVxuICAgIGNsYXNzIFZpZXdQcm9wcyBleHRlbmRzIFZhbHVlTWFwIHtcbiAgICAgICAgY29uc3RydWN0b3IodmFsdWVNYXApIHtcbiAgICAgICAgICAgIHN1cGVyKHZhbHVlTWFwKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgY3JlYXRlKG9wdF9pbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSBvcHRfaW5pdGlhbFZhbHVlICE9PSBudWxsICYmIG9wdF9pbml0aWFsVmFsdWUgIT09IHZvaWQgMCA/IG9wdF9pbml0aWFsVmFsdWUgOiB7fTtcbiAgICAgICAgICAgIGNvbnN0IGNvcmVPYmogPSB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IChfYSA9IGluaXRpYWxWYWx1ZS5kaXNhYmxlZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGlzcG9zZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogKF9iID0gaW5pdGlhbFZhbHVlLmhpZGRlbikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY29yZSA9IFZhbHVlTWFwLmNyZWF0ZUNvcmUoY29yZU9iaik7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFZpZXdQcm9wcyhjb3JlKTtcbiAgICAgICAgfVxuICAgICAgICBiaW5kQ2xhc3NNb2RpZmllcnMoZWxlbSkge1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMsICdkaXNhYmxlZCcsIHZhbHVlVG9Nb2RpZmllcihlbGVtLCAnZGlzYWJsZWQnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcywgJ2hpZGRlbicsIHZhbHVlVG9Nb2RpZmllcihlbGVtLCAnaGlkZGVuJykpO1xuICAgICAgICB9XG4gICAgICAgIGJpbmREaXNhYmxlZCh0YXJnZXQpIHtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAnZGlzYWJsZWQnLCAoZGlzYWJsZWQpID0+IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJpbmRUYWJJbmRleChlbGVtKSB7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcywgJ2Rpc2FibGVkJywgKGRpc2FibGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbS50YWJJbmRleCA9IGRpc2FibGVkID8gLTEgOiAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlRGlzcG9zZShjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSgnZGlzcG9zZWQnKS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoZGlzcG9zZWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRsID0gQ2xhc3NOYW1lKCd0YmknKTtcbiAgICBjbGFzcyBUYWJJdGVtVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAoY29uZmlnLnByb3BzLCAnc2VsZWN0ZWQnLCAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGwodW5kZWZpbmVkLCAnc2VsJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lJGwodW5kZWZpbmVkLCAnc2VsJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbCgnYicpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRpdGxlRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRsKCd0JykpO1xuICAgICAgICAgICAgYmluZFZhbHVlVG9UZXh0Q29udGVudChjb25maWcucHJvcHMudmFsdWUoJ3RpdGxlJyksIHRpdGxlRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQuYXBwZW5kQ2hpbGQodGl0bGVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudGl0bGVFbGVtZW50ID0gdGl0bGVFbGVtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgVGFiSXRlbUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMub25DbGlja18gPSB0aGlzLm9uQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFRhYkl0ZW1WaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcucHJvcHMsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGlja18pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2xpY2tfKCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NsaWNrJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgVGFiUGFnZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkl0ZW1DbGlja18gPSB0aGlzLm9uSXRlbUNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5pY18gPSBuZXcgVGFiSXRlbUNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5pdGVtUHJvcHMsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBWaWV3UHJvcHMuY3JlYXRlKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuaWNfLmVtaXR0ZXIub24oJ2NsaWNrJywgdGhpcy5vbkl0ZW1DbGlja18pO1xuICAgICAgICAgICAgdGhpcy5jY18gPSBuZXcgUmFja0NvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNyZWF0ZUJsYWRlKCksXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBWaWV3UHJvcHMuY3JlYXRlKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcy5wcm9wcywgJ3NlbGVjdGVkJywgKHNlbGVjdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtQ29udHJvbGxlci5wcm9wcy5zZXQoJ3NlbGVjdGVkJywgc2VsZWN0ZWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGVudENvbnRyb2xsZXIudmlld1Byb3BzLnNldCgnaGlkZGVuJywgIXNlbGVjdGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBpdGVtQ29udHJvbGxlcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmljXztcbiAgICAgICAgfVxuICAgICAgICBnZXQgY29udGVudENvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jY187XG4gICAgICAgIH1cbiAgICAgICAgb25JdGVtQ2xpY2tfKCkge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXQoJ3NlbGVjdGVkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUYWJQYWdlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlciwgY29udGVudFJhY2tBcGkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8gPSBjb250cm9sbGVyO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXyA9IGNvbnRlbnRSYWNrQXBpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB0aXRsZSgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSB0aGlzLmNvbnRyb2xsZXJfLml0ZW1Db250cm9sbGVyLnByb3BzLmdldCgndGl0bGUnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHRpdGxlKHRpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLml0ZW1Db250cm9sbGVyLnByb3BzLnNldCgndGl0bGUnLCB0aXRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHNlbGVjdGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdzZWxlY3RlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBzZWxlY3RlZChzZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ3NlbGVjdGVkJywgc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJ1dHRvbihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZEJ1dHRvbihwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEZvbGRlcihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZEZvbGRlcihwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFNlcGFyYXRvcihvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRTZXBhcmF0b3Iob3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkVGFiKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkVGFiKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGFwaSwgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLmFkZChhcGksIG9wdF9pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGFwaSkge1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5yZW1vdmUoYXBpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkSW5wdXQob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZE1vbml0b3Iob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZE1vbml0b3Iob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJsYWRlKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkQmxhZGUocGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRhYkFwaSBleHRlbmRzIFJhY2tMaWtlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlciwgcG9vbCkge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlciwgbmV3IFJhY2tBcGkoY29udHJvbGxlci5yYWNrQ29udHJvbGxlciwgcG9vbCkpO1xuICAgICAgICAgICAgdGhpcy5vblBhZ2VBZGRfID0gdGhpcy5vblBhZ2VBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZVJlbW92ZV8gPSB0aGlzLm9uUGFnZVJlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5wYWdlQXBpTWFwXyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogZXYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ub24oJ3VwZGF0ZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogZXYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucGFnZVNldC5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uUGFnZUFkZF8pO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wYWdlU2V0LmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25QYWdlUmVtb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnBhZ2VTZXQuaXRlbXMuZm9yRWFjaCgocGMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVwUGFnZUFwaV8ocGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHBhZ2VzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucGFnZVNldC5pdGVtcy5tYXAoKHBjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5wYWdlQXBpTWFwXy5nZXQocGMpO1xuICAgICAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGFkZFBhZ2UocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmNvbnRyb2xsZXJfLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgcGMgPSBuZXcgVGFiUGFnZUNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgaXRlbVByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFyYW1zLnRpdGxlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmFkZChwYywgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMucGFnZUFwaU1hcF8uZ2V0KHBjKTtcbiAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVQYWdlKGluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJlbW92ZShpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHNldFVwUGFnZUFwaV8ocGMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhY2tBcGkgPSB0aGlzLnJhY2tBcGlfWydhcGlTZXRfJ10uZmluZCgoYXBpKSA9PiBhcGkuY29udHJvbGxlcl8gPT09IHBjLmNvbnRlbnRDb250cm9sbGVyKTtcbiAgICAgICAgICAgIGlmICghcmFja0FwaSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IG5ldyBUYWJQYWdlQXBpKHBjLCByYWNrQXBpKTtcbiAgICAgICAgICAgIHRoaXMucGFnZUFwaU1hcF8uc2V0KHBjLCBhcGkpO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFnZUFkZF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBQYWdlQXBpXyhldi5pdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZ2VSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLnBhZ2VBcGlNYXBfLmdldChldi5pdGVtKTtcbiAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWdlQXBpTWFwXy5kZWxldGUoZXYuaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkayA9IENsYXNzTmFtZSgndGFiJyk7XG4gICAgY2xhc3MgVGFiVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaygpLCBibGFkZUNvbnRhaW5lckNsYXNzTmFtZSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLmVtcHR5LCB2YWx1ZVRvQ2xhc3NOYW1lKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJGsodW5kZWZpbmVkLCAnbm9wJykpKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGl0ZW1zRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRrKCdpJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGl0ZW1zRWxlbSk7XG4gICAgICAgICAgICB0aGlzLml0ZW1zRWxlbWVudCA9IGl0ZW1zRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzRWxlbSA9IGNvbmZpZy5jb250ZW50c0VsZW1lbnQ7XG4gICAgICAgICAgICBjb250ZW50c0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaygnYycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250ZW50c0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50c0VsZW1lbnQgPSBjb250ZW50c0VsZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUYWJDb250cm9sbGVyIGV4dGVuZHMgUmFja0xpa2VDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNyID0gbmV3IFJhY2tDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBjb25maWcuYmxhZGUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBlbXB0eSA9IGNyZWF0ZVZhbHVlKHRydWUpO1xuICAgICAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgICAgIGJsYWRlOiBjb25maWcuYmxhZGUsXG4gICAgICAgICAgICAgICAgcmFja0NvbnRyb2xsZXI6IGNyLFxuICAgICAgICAgICAgICAgIHZpZXc6IG5ldyBUYWJWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50c0VsZW1lbnQ6IGNyLnZpZXcuZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgZW1wdHk6IGVtcHR5LFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlQWRkXyA9IHRoaXMub25QYWdlQWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBhZ2VSZW1vdmVfID0gdGhpcy5vblBhZ2VSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZVNlbGVjdGVkQ2hhbmdlXyA9IHRoaXMub25QYWdlU2VsZWN0ZWRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTZXRfID0gbmV3IE5lc3RlZE9yZGVyZWRTZXQoKCkgPT4gbnVsbCk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25QYWdlQWRkXyk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25QYWdlUmVtb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLmVtcHR5XyA9IGVtcHR5O1xuICAgICAgICAgICAgdGhpcy5hcHBseVBhZ2VzXygpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBwYWdlU2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFnZVNldF87XG4gICAgICAgIH1cbiAgICAgICAgYWRkKHBjLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8uYWRkKHBjLCBvcHRfaW5kZXggIT09IG51bGwgJiYgb3B0X2luZGV4ICE9PSB2b2lkIDAgPyBvcHRfaW5kZXggOiB0aGlzLnBhZ2VTZXRfLml0ZW1zLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLnJlbW92ZSh0aGlzLnBhZ2VTZXRfLml0ZW1zW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlQYWdlc18oKSB7XG4gICAgICAgICAgICB0aGlzLmtlZXBTZWxlY3Rpb25fKCk7XG4gICAgICAgICAgICB0aGlzLmVtcHR5Xy5yYXdWYWx1ZSA9IHRoaXMucGFnZVNldF8uaXRlbXMubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFnZUFkZF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHBjID0gZXYuaXRlbTtcbiAgICAgICAgICAgIGluc2VydEVsZW1lbnRBdCh0aGlzLnZpZXcuaXRlbXNFbGVtZW50LCBwYy5pdGVtQ29udHJvbGxlci52aWV3LmVsZW1lbnQsIGV2LmluZGV4KTtcbiAgICAgICAgICAgIHRoaXMucmFja0NvbnRyb2xsZXIucmFjay5hZGQocGMuY29udGVudENvbnRyb2xsZXIsIGV2LmluZGV4KTtcbiAgICAgICAgICAgIHBjLnByb3BzLnZhbHVlKCdzZWxlY3RlZCcpLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25QYWdlU2VsZWN0ZWRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlQYWdlc18oKTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZ2VSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBwYyA9IGV2Lml0ZW07XG4gICAgICAgICAgICByZW1vdmVFbGVtZW50KHBjLml0ZW1Db250cm9sbGVyLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnJhY2tDb250cm9sbGVyLnJhY2sucmVtb3ZlKHBjLmNvbnRlbnRDb250cm9sbGVyKTtcbiAgICAgICAgICAgIHBjLnByb3BzXG4gICAgICAgICAgICAgICAgLnZhbHVlKCdzZWxlY3RlZCcpXG4gICAgICAgICAgICAgICAgLmVtaXR0ZXIub2ZmKCdjaGFuZ2UnLCB0aGlzLm9uUGFnZVNlbGVjdGVkQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UGFnZXNfKCk7XG4gICAgICAgIH1cbiAgICAgICAga2VlcFNlbGVjdGlvbl8oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYWdlU2V0Xy5pdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaXJzdFNlbEluZGV4ID0gdGhpcy5wYWdlU2V0Xy5pdGVtcy5maW5kSW5kZXgoKHBjKSA9PiBwYy5wcm9wcy5nZXQoJ3NlbGVjdGVkJykpO1xuICAgICAgICAgICAgaWYgKGZpcnN0U2VsSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlU2V0Xy5pdGVtcy5mb3JFYWNoKChwYywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYy5wcm9wcy5zZXQoJ3NlbGVjdGVkJywgaSA9PT0gMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLml0ZW1zLmZvckVhY2goKHBjLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBjLnByb3BzLnNldCgnc2VsZWN0ZWQnLCBpID09PSBmaXJzdFNlbEluZGV4KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblBhZ2VTZWxlY3RlZENoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIGlmIChldi5yYXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYWdlU2V0Xy5pdGVtcy5maW5kSW5kZXgoKHBjKSA9PiBwYy5wcm9wcy52YWx1ZSgnc2VsZWN0ZWQnKSA9PT0gZXYuc2VuZGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLml0ZW1zLmZvckVhY2goKHBjLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBjLnByb3BzLnNldCgnc2VsZWN0ZWQnLCBpID09PSBpbmRleCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmtlZXBTZWxlY3Rpb25fKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBUYWJCbGFkZVBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICd0YWInLFxuICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIHBhZ2VzOiBwLnJlcXVpcmVkLmFycmF5KHAucmVxdWlyZWQub2JqZWN0KHsgdGl0bGU6IHAucmVxdWlyZWQuc3RyaW5nIH0pKSxcbiAgICAgICAgICAgICAgICB2aWV3OiBwLnJlcXVpcmVkLmNvbnN0YW50KCd0YWInKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LnBhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgcGFyYW1zOiByZXN1bHQgfTtcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFRhYkNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFyZ3MucGFyYW1zLnBhZ2VzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYyA9IG5ldyBUYWJQYWdlQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Qcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcC50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYy5hZGQocGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIFRhYkNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRhYkFwaShhcmdzLmNvbnRyb2xsZXIsIGFyZ3MucG9vbCk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJsYWRlQ29udHJvbGxlcihwbHVnaW4sIGFyZ3MpIHtcbiAgICAgICAgY29uc3QgYWMgPSBwbHVnaW4uYWNjZXB0KGFyZ3MucGFyYW1zKTtcbiAgICAgICAgaWYgKCFhYykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBQYXJhbXNQYXJzZXJzLm9wdGlvbmFsLmJvb2xlYW4oYXJncy5wYXJhbXNbJ2Rpc2FibGVkJ10pLnZhbHVlO1xuICAgICAgICBjb25zdCBoaWRkZW4gPSBQYXJhbXNQYXJzZXJzLm9wdGlvbmFsLmJvb2xlYW4oYXJncy5wYXJhbXNbJ2hpZGRlbiddKS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHBsdWdpbi5jb250cm9sbGVyKHtcbiAgICAgICAgICAgIGJsYWRlOiBjcmVhdGVCbGFkZSgpLFxuICAgICAgICAgICAgZG9jdW1lbnQ6IGFyZ3MuZG9jdW1lbnQsXG4gICAgICAgICAgICBwYXJhbXM6IGZvcmNlQ2FzdChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGFjLnBhcmFtcyksIHsgZGlzYWJsZWQ6IGRpc2FibGVkLCBoaWRkZW46IGhpZGRlbiB9KSksXG4gICAgICAgICAgICB2aWV3UHJvcHM6IFZpZXdQcm9wcy5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICBoaWRkZW46IGhpZGRlbixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBNYW51YWxUaWNrZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcG9zZSgpIHsgfVxuICAgICAgICB0aWNrKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndGljaycsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEludGVydmFsVGlja2VyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBpbnRlcnZhbCkge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZF8gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudGltZXJJZF8gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5vblRpY2tfID0gdGhpcy5vblRpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRvY18gPSBkb2M7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbF8gPSBpbnRlcnZhbDtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZXJfKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWRfO1xuICAgICAgICB9XG4gICAgICAgIHNldCBkaXNhYmxlZChpbmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZF8gPSBpbmFjdGl2ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkXykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJUaW1lcl8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGltZXJfKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGlzcG9zZSgpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUaW1lcl8oKTtcbiAgICAgICAgfVxuICAgICAgICBjbGVhclRpbWVyXygpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVySWRfID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd2luID0gdGhpcy5kb2NfLmRlZmF1bHRWaWV3O1xuICAgICAgICAgICAgaWYgKHdpbikge1xuICAgICAgICAgICAgICAgIHdpbi5jbGVhckludGVydmFsKHRoaXMudGltZXJJZF8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50aW1lcklkXyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZXJfKCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVyXygpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW50ZXJ2YWxfIDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB3aW4gPSB0aGlzLmRvY18uZGVmYXVsdFZpZXc7XG4gICAgICAgICAgICBpZiAod2luKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lcklkXyA9IHdpbi5zZXRJbnRlcnZhbCh0aGlzLm9uVGlja18sIHRoaXMuaW50ZXJ2YWxfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblRpY2tfKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWRfKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3RpY2snLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBDb21wb3NpdGVDb25zdHJhaW50IHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uc3RyYWludHMpIHtcbiAgICAgICAgICAgIHRoaXMuY29uc3RyYWludHMgPSBjb25zdHJhaW50cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJhaW4odmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cmFpbnRzLnJlZHVjZSgocmVzdWx0LCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuY29uc3RyYWluKHJlc3VsdCk7XG4gICAgICAgICAgICB9LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZENvbnN0cmFpbnQoYywgY29uc3RyYWludENsYXNzKSB7XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgY29uc3RyYWludENsYXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIENvbXBvc2l0ZUNvbnN0cmFpbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGMuY29uc3RyYWludHMucmVkdWNlKCh0bXBSZXN1bHQsIHNjKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRtcFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG1wUmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc2MgaW5zdGFuY2VvZiBjb25zdHJhaW50Q2xhc3MgPyBzYyA6IG51bGw7XG4gICAgICAgICAgICB9LCBudWxsKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNsYXNzIExpc3RDb25zdHJhaW50IHtcbiAgICAgICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJhaW4odmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgICAgICBpZiAob3B0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gb3B0cy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgICAgICB9KS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWQgPyB2YWx1ZSA6IG9wdHNbMF0udmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBSYW5nZUNvbnN0cmFpbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMubWF4VmFsdWUgPSBjb25maWcubWF4O1xuICAgICAgICAgICAgdGhpcy5taW5WYWx1ZSA9IGNvbmZpZy5taW47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluKHZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkodGhpcy5taW5WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBNYXRoLm1heChyZXN1bHQsIHRoaXMubWluVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHRoaXMubWF4VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gTWF0aC5taW4ocmVzdWx0LCB0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTdGVwQ29uc3RyYWludCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHN0ZXApIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCByID0gdmFsdWUgPCAwXG4gICAgICAgICAgICAgICAgPyAtTWF0aC5yb3VuZCgtdmFsdWUgLyB0aGlzLnN0ZXApXG4gICAgICAgICAgICAgICAgOiBNYXRoLnJvdW5kKHZhbHVlIC8gdGhpcy5zdGVwKTtcbiAgICAgICAgICAgIHJldHVybiByICogdGhpcy5zdGVwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGogPSBDbGFzc05hbWUoJ2xzdCcpO1xuICAgIGNsYXNzIExpc3RWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BzXyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRqKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG4gICAgICAgICAgICBzZWxlY3RFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGooJ3MnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcy5wcm9wc18sICdvcHRpb25zJywgKG9wdHMpID0+IHtcbiAgICAgICAgICAgICAgICByZW1vdmVDaGlsZEVsZW1lbnRzKHNlbGVjdEVsZW0pO1xuICAgICAgICAgICAgICAgIG9wdHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbS5kYXRhc2V0LmluZGV4ID0gU3RyaW5nKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbS50ZXh0Q29udGVudCA9IGl0ZW0udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbS52YWx1ZSA9IFN0cmluZyhpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbS5hcHBlbmRDaGlsZChvcHRpb25FbGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoc2VsZWN0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc2VsZWN0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVsZW1lbnQgPSBzZWxlY3RFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtYXJrRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRqKCdtJykpO1xuICAgICAgICAgICAgbWFya0VsZW0uYXBwZW5kQ2hpbGQoY3JlYXRlU3ZnSWNvbkVsZW1lbnQoZG9jLCAnZHJvcGRvd24nKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya0VsZW0pO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZV8gPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFbGVtZW50LnZhbHVlID0gU3RyaW5nKHRoaXMudmFsdWVfLnJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTGlzdENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblNlbGVjdENoYW5nZV8gPSB0aGlzLm9uU2VsZWN0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgTGlzdFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vblNlbGVjdENoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlXyhlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RFbGVtID0gZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCBvcHRFbGVtID0gc2VsZWN0RWxlbS5zZWxlY3RlZE9wdGlvbnMuaXRlbSgwKTtcbiAgICAgICAgICAgIGlmICghb3B0RWxlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IE51bWJlcihvcHRFbGVtLmRhdGFzZXQuaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IHRoaXMucHJvcHMuZ2V0KCdvcHRpb25zJylbaXRlbUluZGV4XS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRpID0gQ2xhc3NOYW1lKCdwb3AnKTtcbiAgICBjbGFzcyBQb3B1cFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGkoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgYmluZFZhbHVlKGNvbmZpZy5zaG93cywgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSRpKHVuZGVmaW5lZCwgJ3YnKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUG9wdXBDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd3MgPSBjcmVhdGVWYWx1ZShmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgUG9wdXBWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHNob3dzOiB0aGlzLnNob3dzLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRoID0gQ2xhc3NOYW1lKCd0eHQnKTtcbiAgICBjbGFzcyBUZXh0VmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlXyA9IHRoaXMub25DaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnByb3BzXyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMucHJvcHNfLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2VfKTtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGgoJ2knKSk7XG4gICAgICAgICAgICBpbnB1dEVsZW0udHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVfID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMucHJvcHNfLmdldCgnZm9ybWF0dGVyJyk7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC52YWx1ZSA9IGZvcm1hdHRlcih0aGlzLnZhbHVlXy5yYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2VfID0gdGhpcy5vbklucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wYXJzZXJfID0gY29uZmlnLnBhcnNlcjtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFRleHRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcucHJvcHMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgfVxuICAgICAgICBvbklucHV0Q2hhbmdlXyhlKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBmb3JjZUNhc3QoZS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXRFbGVtLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnBhcnNlcl8odmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHBhcnNlZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSBwYXJzZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlldy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBib29sVG9TdHJpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJvb2xGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISF2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gQm9vbGVhbkZvcm1hdHRlcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYm9vbFRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICBjbGFzcyBOdW1iZXJMaXRlcmFsTm9kZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgZXZhbHVhdGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMudGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IEJJTkFSWV9PUEVSQVRJT05fTUFQID0ge1xuICAgICAgICAnKionOiAodjEsIHYyKSA9PiBNYXRoLnBvdyh2MSwgdjIpLFxuICAgICAgICAnKic6ICh2MSwgdjIpID0+IHYxICogdjIsXG4gICAgICAgICcvJzogKHYxLCB2MikgPT4gdjEgLyB2MixcbiAgICAgICAgJyUnOiAodjEsIHYyKSA9PiB2MSAlIHYyLFxuICAgICAgICAnKyc6ICh2MSwgdjIpID0+IHYxICsgdjIsXG4gICAgICAgICctJzogKHYxLCB2MikgPT4gdjEgLSB2MixcbiAgICAgICAgJzw8JzogKHYxLCB2MikgPT4gdjEgPDwgdjIsXG4gICAgICAgICc+Pic6ICh2MSwgdjIpID0+IHYxID4+IHYyLFxuICAgICAgICAnPj4+JzogKHYxLCB2MikgPT4gdjEgPj4+IHYyLFxuICAgICAgICAnJic6ICh2MSwgdjIpID0+IHYxICYgdjIsXG4gICAgICAgICdeJzogKHYxLCB2MikgPT4gdjEgXiB2MixcbiAgICAgICAgJ3wnOiAodjEsIHYyKSA9PiB2MSB8IHYyLFxuICAgIH07XG4gICAgY2xhc3MgQmluYXJ5T3BlcmF0aW9uTm9kZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICAgICAgfVxuICAgICAgICBldmFsdWF0ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wID0gQklOQVJZX09QRVJBVElPTl9NQVBbdGhpcy5vcGVyYXRvcl07XG4gICAgICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGJpbmFyeSBvcGVyYXRvcjogJyR7dGhpcy5vcGVyYXRvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcCh0aGlzLmxlZnQuZXZhbHVhdGUoKSwgdGhpcy5yaWdodC5ldmFsdWF0ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgJ2IoJyxcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAnKScsXG4gICAgICAgICAgICBdLmpvaW4oJyAnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBVTkFSWV9PUEVSQVRJT05fTUFQID0ge1xuICAgICAgICAnKyc6ICh2KSA9PiB2LFxuICAgICAgICAnLSc6ICh2KSA9PiAtdixcbiAgICAgICAgJ34nOiAodikgPT4gfnYsXG4gICAgfTtcbiAgICBjbGFzcyBVbmFyeU9wZXJhdGlvbk5vZGUge1xuICAgICAgICBjb25zdHJ1Y3RvcihvcGVyYXRvciwgZXhwcikge1xuICAgICAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcjtcbiAgICAgICAgfVxuICAgICAgICBldmFsdWF0ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wID0gVU5BUllfT1BFUkFUSU9OX01BUFt0aGlzLm9wZXJhdG9yXTtcbiAgICAgICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgdW5hcnkgb3BlcmF0b3I6ICcke3RoaXMub3BlcmF0b3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3AodGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIFsndSgnLCB0aGlzLm9wZXJhdG9yLCB0aGlzLmV4cHJlc3Npb24udG9TdHJpbmcoKSwgJyknXS5qb2luKCcgJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21iaW5lUmVhZGVyKHBhcnNlcnMpIHtcbiAgICAgICAgcmV0dXJuICh0ZXh0LCBjdXJzb3IpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyc2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlcnNbaV0odGV4dCwgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZFdoaXRlc3BhY2UodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbSA9IHRleHQuc3Vic3RyKGN1cnNvcikubWF0Y2goL15cXHMrLyk7XG4gICAgICAgIHJldHVybiAoX2EgPSAobSAmJiBtWzBdKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWROb25aZXJvRGlnaXQodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGNoID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgcmV0dXJuIGNoLm1hdGNoKC9eWzEtOV0kLykgPyBjaCA6ICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRGVjaW1hbERpZ2l0cyh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtID0gdGV4dC5zdWJzdHIoY3Vyc29yKS5tYXRjaCgvXlswLTldKy8pO1xuICAgICAgICByZXR1cm4gKF9hID0gKG0gJiYgbVswXSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkU2lnbmVkSW50ZWdlcih0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZHMgPSByZWFkRGVjaW1hbERpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoZHMgIT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbiA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSAxO1xuICAgICAgICBpZiAoc2lnbiAhPT0gJy0nICYmIHNpZ24gIT09ICcrJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNkcyA9IHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChzZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNpZ24gKyBzZHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRFeHBvbmVudFBhcnQodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGUgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgaWYgKGUudG9Mb3dlckNhc2UoKSAhPT0gJ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2kgPSByZWFkU2lnbmVkSW50ZWdlcih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoc2kgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGUgKyBzaTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgY2ggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBpZiAoY2ggPT09ICcwJykge1xuICAgICAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG56ZCA9IHJlYWROb25aZXJvRGlnaXQodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IG56ZC5sZW5ndGg7XG4gICAgICAgIGlmIChuemQgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG56ZCArIHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWREZWNpbWFsTGl0ZXJhbDEodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGRpbCA9IHJlYWREZWNpbWFsSW50ZWdlckxpdGVyYWwodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IGRpbC5sZW5ndGg7XG4gICAgICAgIGlmIChkaWwgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG90ID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IGRvdC5sZW5ndGg7XG4gICAgICAgIGlmIChkb3QgIT09ICcuJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRkcyA9IHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGN1cnNvciArPSBkZHMubGVuZ3RoO1xuICAgICAgICByZXR1cm4gZGlsICsgZG90ICsgZGRzICsgcmVhZEV4cG9uZW50UGFydCh0ZXh0LCBjdXJzb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRGVjaW1hbExpdGVyYWwyKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBkb3QgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gZG90Lmxlbmd0aDtcbiAgICAgICAgaWYgKGRvdCAhPT0gJy4nKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGRzID0gcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IGRkcy5sZW5ndGg7XG4gICAgICAgIGlmIChkZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRvdCArIGRkcyArIHJlYWRFeHBvbmVudFBhcnQodGV4dCwgY3Vyc29yKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZERlY2ltYWxMaXRlcmFsMyh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZGlsID0gcmVhZERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gZGlsLmxlbmd0aDtcbiAgICAgICAgaWYgKGRpbCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlsICsgcmVhZEV4cG9uZW50UGFydCh0ZXh0LCBjdXJzb3IpO1xuICAgIH1cbiAgICBjb25zdCByZWFkRGVjaW1hbExpdGVyYWwgPSBjb21iaW5lUmVhZGVyKFtcbiAgICAgICAgcmVhZERlY2ltYWxMaXRlcmFsMSxcbiAgICAgICAgcmVhZERlY2ltYWxMaXRlcmFsMixcbiAgICAgICAgcmVhZERlY2ltYWxMaXRlcmFsMyxcbiAgICBdKTtcbiAgICBmdW5jdGlvbiBwYXJzZUJpbmFyeURpZ2l0cyh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtID0gdGV4dC5zdWJzdHIoY3Vyc29yKS5tYXRjaCgvXlswMV0rLyk7XG4gICAgICAgIHJldHVybiAoX2EgPSAobSAmJiBtWzBdKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRCaW5hcnlJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAyKTtcbiAgICAgICAgY3Vyc29yICs9IHByZWZpeC5sZW5ndGg7XG4gICAgICAgIGlmIChwcmVmaXgudG9Mb3dlckNhc2UoKSAhPT0gJzBiJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJkcyA9IHBhcnNlQmluYXJ5RGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChiZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZWZpeCArIGJkcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZE9jdGFsRGlnaXRzKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0LnN1YnN0cihjdXJzb3IpLm1hdGNoKC9eWzAtN10rLyk7XG4gICAgICAgIHJldHVybiAoX2EgPSAobSAmJiBtWzBdKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRPY3RhbEludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBwcmVmaXggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDIpO1xuICAgICAgICBjdXJzb3IgKz0gcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgaWYgKHByZWZpeC50b0xvd2VyQ2FzZSgpICE9PSAnMG8nKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2RzID0gcmVhZE9jdGFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChvZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZWZpeCArIG9kcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEhleERpZ2l0cyh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtID0gdGV4dC5zdWJzdHIoY3Vyc29yKS5tYXRjaCgvXlswLTlhLWZdKy9pKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IChtICYmIG1bMF0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEhleEludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBwcmVmaXggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDIpO1xuICAgICAgICBjdXJzb3IgKz0gcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgaWYgKHByZWZpeC50b0xvd2VyQ2FzZSgpICE9PSAnMHgnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGRzID0gcmVhZEhleERpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoaGRzID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBoZHM7XG4gICAgfVxuICAgIGNvbnN0IHJlYWROb25EZWNpbWFsSW50ZWdlckxpdGVyYWwgPSBjb21iaW5lUmVhZGVyKFtcbiAgICAgICAgcmVhZEJpbmFyeUludGVnZXJMaXRlcmFsLFxuICAgICAgICByZWFkT2N0YWxJbnRlZ2VyTGl0ZXJhbCxcbiAgICAgICAgcmVhZEhleEludGVnZXJMaXRlcmFsLFxuICAgIF0pO1xuICAgIGNvbnN0IHJlYWROdW1lcmljTGl0ZXJhbCA9IGNvbWJpbmVSZWFkZXIoW1xuICAgICAgICByZWFkTm9uRGVjaW1hbEludGVnZXJMaXRlcmFsLFxuICAgICAgICByZWFkRGVjaW1hbExpdGVyYWwsXG4gICAgXSk7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUxpdGVyYWwodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IHJlYWROdW1lcmljTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gbnVtLmxlbmd0aDtcbiAgICAgICAgaWYgKG51bSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmFsdWFibGU6IG5ldyBOdW1iZXJMaXRlcmFsTm9kZShudW0pLFxuICAgICAgICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IG9wID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IG9wLmxlbmd0aDtcbiAgICAgICAgaWYgKG9wICE9PSAnKCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4cHIgPSBwYXJzZUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKCFleHByKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjdXJzb3IgPSBleHByLmN1cnNvcjtcbiAgICAgICAgY3Vyc29yICs9IHJlYWRXaGl0ZXNwYWNlKHRleHQsIGN1cnNvcikubGVuZ3RoO1xuICAgICAgICBjb25zdCBjbCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSBjbC5sZW5ndGg7XG4gICAgICAgIGlmIChjbCAhPT0gJyknKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZhbHVhYmxlOiBleHByLmV2YWx1YWJsZSxcbiAgICAgICAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKHRleHQsIGN1cnNvcikge1xuICAgICAgICByZXR1cm4gKHBhcnNlTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpIHx8IHBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlVW5hcnlFeHByZXNzaW9uKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBleHByID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoZXhwcikge1xuICAgICAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3AgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gb3AubGVuZ3RoO1xuICAgICAgICBpZiAob3AgIT09ICcrJyAmJiBvcCAhPT0gJy0nICYmIG9wICE9PSAnficpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG51bSA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmICghbnVtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjdXJzb3IgPSBudW0uY3Vyc29yO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICAgICAgICBldmFsdWFibGU6IG5ldyBVbmFyeU9wZXJhdGlvbk5vZGUob3AsIG51bS5ldmFsdWFibGUpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkQmluYXJ5T3BlcmF0b3Iob3BzLCB0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY3Vyc29yICs9IHJlYWRXaGl0ZXNwYWNlKHRleHQsIGN1cnNvcikubGVuZ3RoO1xuICAgICAgICBjb25zdCBvcCA9IG9wcy5maWx0ZXIoKG9wKSA9PiB0ZXh0LnN0YXJ0c1dpdGgob3AsIGN1cnNvcikpWzBdO1xuICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjdXJzb3IgKz0gb3AubGVuZ3RoO1xuICAgICAgICBjdXJzb3IgKz0gcmVhZFdoaXRlc3BhY2UodGV4dCwgY3Vyc29yKS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgICAgICAgIG9wZXJhdG9yOiBvcCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvblBhcnNlcihleHByUGFyc2VyLCBvcHMpIHtcbiAgICAgICAgcmV0dXJuICh0ZXh0LCBjdXJzb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0RXhwciA9IGV4cHJQYXJzZXIodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgICAgIGlmICghZmlyc3RFeHByKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJzb3IgPSBmaXJzdEV4cHIuY3Vyc29yO1xuICAgICAgICAgICAgbGV0IGV4cHIgPSBmaXJzdEV4cHIuZXZhbHVhYmxlO1xuICAgICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gcmVhZEJpbmFyeU9wZXJhdG9yKG9wcywgdGV4dCwgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJzb3IgPSBvcC5jdXJzb3I7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEV4cHIgPSBleHByUGFyc2VyKHRleHQsIGN1cnNvcik7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0RXhwcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3Vyc29yID0gbmV4dEV4cHIuY3Vyc29yO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgQmluYXJ5T3BlcmF0aW9uTm9kZShvcC5vcGVyYXRvciwgZXhwciwgbmV4dEV4cHIuZXZhbHVhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBleHByXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgICAgICAgICAgICAgICBldmFsdWFibGU6IGV4cHIsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uID0gW1xuICAgICAgICBbJyoqJ10sXG4gICAgICAgIFsnKicsICcvJywgJyUnXSxcbiAgICAgICAgWycrJywgJy0nXSxcbiAgICAgICAgWyc8PCcsICc+Pj4nLCAnPj4nXSxcbiAgICAgICAgWycmJ10sXG4gICAgICAgIFsnXiddLFxuICAgICAgICBbJ3wnXSxcbiAgICBdLnJlZHVjZSgocGFyc2VyLCBvcHMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJpbmFyeU9wZXJhdGlvbkV4cHJlc3Npb25QYXJzZXIocGFyc2VyLCBvcHMpO1xuICAgIH0sIHBhcnNlVW5hcnlFeHByZXNzaW9uKTtcbiAgICBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGN1cnNvciArPSByZWFkV2hpdGVzcGFjZSh0ZXh0LCBjdXJzb3IpLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHBhcnNlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUVjbWFOdW1iZXJFeHByZXNzaW9uKHRleHQpIHtcbiAgICAgICAgY29uc3QgZXhwciA9IHBhcnNlRXhwcmVzc2lvbih0ZXh0LCAwKTtcbiAgICAgICAgaWYgKCFleHByKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJzb3IgPSBleHByLmN1cnNvciArIHJlYWRXaGl0ZXNwYWNlKHRleHQsIGV4cHIuY3Vyc29yKS5sZW5ndGg7XG4gICAgICAgIGlmIChjdXJzb3IgIT09IHRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwci5ldmFsdWFibGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VOdW1iZXIodGV4dCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHIgPSBwYXJzZUVjbWFOdW1iZXJFeHByZXNzaW9uKHRleHQpO1xuICAgICAgICByZXR1cm4gKF9hID0gciA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmV2YWx1YXRlKCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG51bWJlckZyb21Vbmtub3duKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHB2ID0gcGFyc2VOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHB2KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbnVtYmVyVG9TdHJpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU51bWJlckZvcm1hdHRlcihkaWdpdHMpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoTWF0aC5tYXgoTWF0aC5taW4oZGlnaXRzLCAyMCksIDApKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpbm5lckZvcm1hdHRlciA9IGNyZWF0ZU51bWJlckZvcm1hdHRlcigwKTtcbiAgICBmdW5jdGlvbiBmb3JtYXRQZXJjZW50YWdlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpbm5lckZvcm1hdHRlcih2YWx1ZSkgKyAnJSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RyaW5nRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcm1hdFN0cmluZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsbEJ1ZmZlcihidWZmZXIsIGJ1ZmZlclNpemUpIHtcbiAgICAgICAgd2hpbGUgKGJ1ZmZlci5sZW5ndGggPCBidWZmZXJTaXplKSB7XG4gICAgICAgICAgICBidWZmZXIucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVCdWZmZXIoYnVmZmVyU2l6ZSkge1xuICAgICAgICBjb25zdCBidWZmZXIgPSBbXTtcbiAgICAgICAgZmlsbEJ1ZmZlcihidWZmZXIsIGJ1ZmZlclNpemUpO1xuICAgICAgICByZXR1cm4gY3JlYXRlVmFsdWUoYnVmZmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlVHJpbW1lZEJ1ZmZlcihidWZmZXIpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBidWZmZXIuaW5kZXhPZih1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm4gZm9yY2VDYXN0KGluZGV4IDwgMCA/IGJ1ZmZlciA6IGJ1ZmZlci5zbGljZSgwLCBpbmRleCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVQdXNoZWRCdWZmZXIoYnVmZmVyLCBuZXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBuZXdCdWZmZXIgPSBbLi4uY3JlYXRlVHJpbW1lZEJ1ZmZlcihidWZmZXIpLCBuZXdWYWx1ZV07XG4gICAgICAgIGlmIChuZXdCdWZmZXIubGVuZ3RoID4gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV3QnVmZmVyLnNwbGljZSgwLCBuZXdCdWZmZXIubGVuZ3RoIC0gYnVmZmVyLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmaWxsQnVmZmVyKG5ld0J1ZmZlciwgYnVmZmVyLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0J1ZmZlcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25uZWN0VmFsdWVzKHsgcHJpbWFyeSwgc2Vjb25kYXJ5LCBmb3J3YXJkLCBiYWNrd2FyZCwgfSkge1xuICAgICAgICBsZXQgY2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgICAgZnVuY3Rpb24gcHJldmVudEZlZWRiYWNrKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGFuZ2luZyA9IHRydWU7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgY2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBwcmltYXJ5LmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgcHJldmVudEZlZWRiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZWNvbmRhcnkuc2V0UmF3VmFsdWUoZm9yd2FyZChwcmltYXJ5LCBzZWNvbmRhcnkpLCBldi5vcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgc2Vjb25kYXJ5LmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgcHJldmVudEZlZWRiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBwcmltYXJ5LnNldFJhd1ZhbHVlKGJhY2t3YXJkKHByaW1hcnksIHNlY29uZGFyeSksIGV2Lm9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2ZW50RmVlZGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlY29uZGFyeS5zZXRSYXdWYWx1ZShmb3J3YXJkKHByaW1hcnksIHNlY29uZGFyeSksIGV2Lm9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBwcmV2ZW50RmVlZGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgc2Vjb25kYXJ5LnNldFJhd1ZhbHVlKGZvcndhcmQocHJpbWFyeSwgc2Vjb25kYXJ5KSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBrZXlzKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBiYXNlU3RlcCAqIChrZXlzLmFsdEtleSA/IDAuMSA6IDEpICogKGtleXMuc2hpZnRLZXkgPyAxMCA6IDEpO1xuICAgICAgICBpZiAoa2V5cy51cEtleSkge1xuICAgICAgICAgICAgcmV0dXJuICtzdGVwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGtleXMuZG93bktleSkge1xuICAgICAgICAgICAgcmV0dXJuIC1zdGVwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgIGRvd25LZXk6IGV2LmtleSA9PT0gJ0Fycm93RG93bicsXG4gICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB1cEtleTogZXYua2V5ID09PSAnQXJyb3dVcCcsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEhvcml6b250YWxTdGVwS2V5cyhldikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICBkb3duS2V5OiBldi5rZXkgPT09ICdBcnJvd0xlZnQnLFxuICAgICAgICAgICAgc2hpZnRLZXk6IGV2LnNoaWZ0S2V5LFxuICAgICAgICAgICAgdXBLZXk6IGV2LmtleSA9PT0gJ0Fycm93UmlnaHQnLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1ZlcnRpY2FsQXJyb3dLZXkoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgPT09ICdBcnJvd1VwJyB8fCBrZXkgPT09ICdBcnJvd0Rvd24nO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0Fycm93S2V5KGtleSkge1xuICAgICAgICByZXR1cm4gaXNWZXJ0aWNhbEFycm93S2V5KGtleSkgfHwga2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBrZXkgPT09ICdBcnJvd1JpZ2h0JztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0JDEoZXYsIGVsZW0pIHtcbiAgICAgICAgY29uc3Qgd2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgICAgICBjb25zdCByZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IGV2LnBhZ2VYIC0gKCgod2luICYmIHdpbi5zY3JvbGxYKSB8fCAwKSArIHJlY3QubGVmdCksXG4gICAgICAgICAgICB5OiBldi5wYWdlWSAtICgoKHdpbiAmJiB3aW4uc2Nyb2xsWSkgfHwgMCkgKyByZWN0LnRvcCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNsYXNzIFBvaW50ZXJIYW5kbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5sYXN0VG91Y2hfID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8gPSB0aGlzLm9uRG9jdW1lbnRNb3VzZU1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXyA9IHRoaXMub25Eb2N1bWVudE1vdXNlVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uTW91c2VEb3duXyA9IHRoaXMub25Nb3VzZURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hFbmRfID0gdGhpcy5vblRvdWNoRW5kXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoTW92ZV8gPSB0aGlzLm9uVG91Y2hNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoU3RhcnRfID0gdGhpcy5vblRvdWNoU3RhcnRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1fID0gZWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydF8sIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlXywge1xuICAgICAgICAgICAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uVG91Y2hFbmRfKTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93bl8pO1xuICAgICAgICB9XG4gICAgICAgIGNvbXB1dGVQb3NpdGlvbl8ob2Zmc2V0KSB7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYm91bmRzOiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9pbnQ6IG9mZnNldFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IG9mZnNldC54LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogb2Zmc2V0LnksXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBvbk1vdXNlRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAoX2EgPSBldi5jdXJyZW50VGFyZ2V0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZWxlbV8ub3duZXJEb2N1bWVudDtcbiAgICAgICAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uRG9jdW1lbnRNb3VzZU1vdmVfKTtcbiAgICAgICAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkRvY3VtZW50TW91c2VVcF8pO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2Rvd24nLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKGNvbXB1dGVPZmZzZXQkMShldiwgdGhpcy5lbGVtXykpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkRvY3VtZW50TW91c2VNb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ21vdmUnLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKGNvbXB1dGVPZmZzZXQkMShldiwgdGhpcy5lbGVtXykpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkRvY3VtZW50TW91c2VVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZWxlbV8ub3duZXJEb2N1bWVudDtcbiAgICAgICAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uRG9jdW1lbnRNb3VzZU1vdmVfKTtcbiAgICAgICAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkRvY3VtZW50TW91c2VVcF8pO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3VwJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyhjb21wdXRlT2Zmc2V0JDEoZXYsIHRoaXMuZWxlbV8pKSxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgc2hpZnRLZXk6IGV2LnNoaWZ0S2V5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Ub3VjaFN0YXJ0Xyhldikge1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGNvbnN0IHRvdWNoID0gZXYudGFyZ2V0VG91Y2hlcy5pdGVtKDApO1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnZG93bicsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8odG91Y2hcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB0b3VjaC5jbGllbnRYIC0gcmVjdC5sZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogdG91Y2guY2xpZW50WSAtIHJlY3QudG9wLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgc2hpZnRLZXk6IGV2LnNoaWZ0S2V5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmxhc3RUb3VjaF8gPSB0b3VjaDtcbiAgICAgICAgfVxuICAgICAgICBvblRvdWNoTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvdWNoID0gZXYudGFyZ2V0VG91Y2hlcy5pdGVtKDApO1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbW92ZScsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8odG91Y2hcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB0b3VjaC5jbGllbnRYIC0gcmVjdC5sZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogdG91Y2guY2xpZW50WSAtIHJlY3QudG9wLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgc2hpZnRLZXk6IGV2LnNoaWZ0S2V5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmxhc3RUb3VjaF8gPSB0b3VjaDtcbiAgICAgICAgfVxuICAgICAgICBvblRvdWNoRW5kXyhldikge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSAoX2EgPSBldi50YXJnZXRUb3VjaGVzLml0ZW0oMCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMubGFzdFRvdWNoXztcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmVsZW1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3VwJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyh0b3VjaFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcFJhbmdlKHZhbHVlLCBzdGFydDEsIGVuZDEsIHN0YXJ0MiwgZW5kMikge1xuICAgICAgICBjb25zdCBwID0gKHZhbHVlIC0gc3RhcnQxKSAvIChlbmQxIC0gc3RhcnQxKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0MiArIHAgKiAoZW5kMiAtIHN0YXJ0Mik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldERlY2ltYWxEaWdpdHModmFsdWUpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IFN0cmluZyh2YWx1ZS50b0ZpeGVkKDEwKSk7XG4gICAgICAgIGNvbnN0IGZyYWMgPSB0ZXh0LnNwbGl0KCcuJylbMV07XG4gICAgICAgIHJldHVybiBmcmFjLnJlcGxhY2UoLzArJC8sICcnKS5sZW5ndGg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnN0cmFpblJhbmdlKHZhbHVlLCBtaW4sIG1heCkge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIG1pbiksIG1heCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxvb3BSYW5nZSh2YWx1ZSwgbWF4KSB7XG4gICAgICAgIHJldHVybiAoKHZhbHVlICUgbWF4KSArIG1heCkgJSBtYXg7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGcgPSBDbGFzc05hbWUoJ3R4dCcpO1xuICAgIGNsYXNzIE51bWJlclRleHRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VfID0gdGhpcy5vbkNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHNfID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18uZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoKSwgY2xhc3NOYW1lJGcodW5kZWZpbmVkLCAnbnVtJykpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5hcnJheVBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcodW5kZWZpbmVkLCBjb25maWcuYXJyYXlQb3NpdGlvbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2knKSk7XG4gICAgICAgICAgICBpbnB1dEVsZW0udHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtO1xuICAgICAgICAgICAgdGhpcy5vbkRyYWdnaW5nQ2hhbmdlXyA9IHRoaXMub25EcmFnZ2luZ0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmdfID0gY29uZmlnLmRyYWdnaW5nO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ18uZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkRyYWdnaW5nQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygpKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2knKSk7XG4gICAgICAgICAgICBjb25zdCBrbm9iRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGtub2JFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2snKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoa25vYkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5rbm9iRWxlbWVudCA9IGtub2JFbGVtO1xuICAgICAgICAgICAgY29uc3QgZ3VpZGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmcnKTtcbiAgICAgICAgICAgIGd1aWRlRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKCdnJykpO1xuICAgICAgICAgICAgdGhpcy5rbm9iRWxlbWVudC5hcHBlbmRDaGlsZChndWlkZUVsZW0pO1xuICAgICAgICAgICAgY29uc3QgYm9keUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3BhdGgnKTtcbiAgICAgICAgICAgIGJvZHlFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2diJykpO1xuICAgICAgICAgICAgZ3VpZGVFbGVtLmFwcGVuZENoaWxkKGJvZHlFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZGVCb2R5RWxlbV8gPSBib2R5RWxlbTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdwYXRoJyk7XG4gICAgICAgICAgICBoZWFkRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKCdnaCcpKTtcbiAgICAgICAgICAgIGd1aWRlRWxlbS5hcHBlbmRDaGlsZChoZWFkRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmd1aWRlSGVhZEVsZW1fID0gaGVhZEVsZW07XG4gICAgICAgICAgICBjb25zdCB0b29sdGlwRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRvb2x0aXBFbGVtLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lKCd0dCcpKCkpO1xuICAgICAgICAgICAgdGhpcy5rbm9iRWxlbWVudC5hcHBlbmRDaGlsZCh0b29sdGlwRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBFbGVtXyA9IHRvb2x0aXBFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBvbkRyYWdnaW5nQ2hhbmdlXyhldikge1xuICAgICAgICAgICAgaWYgKGV2LnJhd1ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lJGcodW5kZWZpbmVkLCAnZHJnJykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKHVuZGVmaW5lZCwgJ2RyZycpKTtcbiAgICAgICAgICAgIGNvbnN0IHggPSBldi5yYXdWYWx1ZSAvIHRoaXMucHJvcHNfLmdldCgnZHJhZ2dpbmdTY2FsZScpO1xuICAgICAgICAgICAgY29uc3QgYW94ID0geCArICh4ID4gMCA/IC0xIDogeCA8IDAgPyArMSA6IDApO1xuICAgICAgICAgICAgY29uc3QgYWR4ID0gY29uc3RyYWluUmFuZ2UoLWFveCwgLTQsICs0KTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZGVIZWFkRWxlbV8uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCBbYE0gJHthb3ggKyBhZHh9LDAgTCR7YW94fSw0IEwke2FveCArIGFkeH0sOGAsIGBNICR7eH0sLTEgTCR7eH0sOWBdLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICB0aGlzLmd1aWRlQm9keUVsZW1fLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkJywgYE0gMCw0IEwke3h9LDRgKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMucHJvcHNfLmdldCgnZm9ybWF0dGVyJyk7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBFbGVtXy50ZXh0Q29udGVudCA9IGZvcm1hdHRlcih0aGlzLnZhbHVlLnJhd1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEVsZW1fLnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcbiAgICAgICAgfVxuICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gdGhpcy5wcm9wc18uZ2V0KCdmb3JtYXR0ZXInKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlID0gZm9ybWF0dGVyKHRoaXMudmFsdWUucmF3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTnVtYmVyVGV4dENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5SYXdWYWx1ZV8gPSAwO1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlXyA9IHRoaXMub25JbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dEtleURvd25fID0gdGhpcy5vbklucHV0S2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dEtleVVwXyA9IHRoaXMub25JbnB1dEtleVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZV8gPSB0aGlzLm9uUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmJhc2VTdGVwXyA9IGNvbmZpZy5iYXNlU3RlcDtcbiAgICAgICAgICAgIHRoaXMucGFyc2VyXyA9IGNvbmZpZy5wYXJzZXI7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmdfID0gY3JlYXRlVmFsdWUobnVsbCk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgTnVtYmVyVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgYXJyYXlQb3NpdGlvbjogY29uZmlnLmFycmF5UG9zaXRpb24sXG4gICAgICAgICAgICAgICAgZHJhZ2dpbmc6IHRoaXMuZHJhZ2dpbmdfLFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbklucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uSW5wdXRLZXlEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbklucHV0S2V5VXBfKTtcbiAgICAgICAgICAgIGNvbnN0IHBoID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy5rbm9iRWxlbWVudCk7XG4gICAgICAgICAgICBwaC5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICBwaC5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICBwaC5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25Qb2ludGVyVXBfKTtcbiAgICAgICAgfVxuICAgICAgICBvbklucHV0Q2hhbmdlXyhlKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBmb3JjZUNhc3QoZS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXRFbGVtLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnBhcnNlcl8odmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHBhcnNlZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSBwYXJzZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlldy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25JbnB1dEtleURvd25fKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleSh0aGlzLmJhc2VTdGVwXywgZ2V0VmVydGljYWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUgKyBzdGVwLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uSW5wdXRLZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KHRoaXMuYmFzZVN0ZXBfLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblJhd1ZhbHVlXyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXy5yYXdWYWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY29tcHV0ZURyYWdnaW5nVmFsdWVfKGRhdGEpIHtcbiAgICAgICAgICAgIGlmICghZGF0YS5wb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZHggPSBkYXRhLnBvaW50LnggLSBkYXRhLmJvdW5kcy53aWR0aCAvIDI7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5SYXdWYWx1ZV8gKyBkeCAqIHRoaXMucHJvcHMuZ2V0KCdkcmFnZ2luZ1NjYWxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLmNvbXB1dGVEcmFnZ2luZ1ZhbHVlXyhldi5kYXRhKTtcbiAgICAgICAgICAgIGlmICh2ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh2LCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ18ucmF3VmFsdWUgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlIC0gdGhpcy5vcmlnaW5SYXdWYWx1ZV87XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyVXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy5jb21wdXRlRHJhZ2dpbmdWYWx1ZV8oZXYuZGF0YSk7XG4gICAgICAgICAgICBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodiwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXy5yYXdWYWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZiA9IENsYXNzTmFtZSgnc2xkJyk7XG4gICAgY2xhc3MgU2xpZGVyVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlXyA9IHRoaXMub25DaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BzXyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMucHJvcHNfLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRmKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNrRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRyYWNrRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRmKCd0JykpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgodHJhY2tFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0cmFja0VsZW0pO1xuICAgICAgICAgICAgdGhpcy50cmFja0VsZW1lbnQgPSB0cmFja0VsZW07XG4gICAgICAgICAgICBjb25zdCBrbm9iRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGtub2JFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGYoJ2snKSk7XG4gICAgICAgICAgICB0aGlzLnRyYWNrRWxlbWVudC5hcHBlbmRDaGlsZChrbm9iRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50ID0ga25vYkVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gY29uc3RyYWluUmFuZ2UobWFwUmFuZ2UodGhpcy52YWx1ZS5yYXdWYWx1ZSwgdGhpcy5wcm9wc18uZ2V0KCdtaW5WYWx1ZScpLCB0aGlzLnByb3BzXy5nZXQoJ21heFZhbHVlJyksIDAsIDEwMCksIDAsIDEwMCk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cH0lYDtcbiAgICAgICAgfVxuICAgICAgICBvbkNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNsaWRlckNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbktleURvd25fID0gdGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uS2V5VXBfID0gdGhpcy5vbktleVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duT3JNb3ZlXyA9IHRoaXMub25Qb2ludGVyRG93bk9yTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuYmFzZVN0ZXBfID0gY29uZmlnLmJhc2VTdGVwO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgU2xpZGVyVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LnRyYWNrRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignZG93bicsIHRoaXMub25Qb2ludGVyRG93bk9yTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ21vdmUnLCB0aGlzLm9uUG9pbnRlckRvd25Pck1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25Qb2ludGVyVXBfKTtcbiAgICAgICAgICAgIHRoaXMudmlldy50cmFja0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcudHJhY2tFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG1hcFJhbmdlKGNvbnN0cmFpblJhbmdlKGQucG9pbnQueCwgMCwgZC5ib3VuZHMud2lkdGgpLCAwLCBkLmJvdW5kcy53aWR0aCwgdGhpcy5wcm9wcy5nZXQoJ21pblZhbHVlJyksIHRoaXMucHJvcHMuZ2V0KCdtYXhWYWx1ZScpKSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bk9yTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KHRoaXMuYmFzZVN0ZXBfLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlICsgc3RlcCwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbktleVVwXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkodGhpcy5iYXNlU3RlcF8sIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGUgPSBDbGFzc05hbWUoJ3NsZHR4dCcpO1xuICAgIGNsYXNzIFNsaWRlclRleHRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRlKCkpO1xuICAgICAgICAgICAgY29uc3Qgc2xpZGVyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHNsaWRlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZSgncycpKTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVyVmlld18gPSBjb25maWcuc2xpZGVyVmlldztcbiAgICAgICAgICAgIHNsaWRlckVsZW0uYXBwZW5kQ2hpbGQodGhpcy5zbGlkZXJWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzbGlkZXJFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGV4dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZSgndCcpKTtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdfID0gY29uZmlnLnRleHRWaWV3O1xuICAgICAgICAgICAgdGV4dEVsZW0uYXBwZW5kQ2hpbGQodGhpcy50ZXh0Vmlld18uZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGV4dEVsZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2xpZGVyVGV4dENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuc2xpZGVyQ18gPSBuZXcgU2xpZGVyQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBiYXNlU3RlcDogY29uZmlnLmJhc2VTdGVwLFxuICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcuc2xpZGVyUHJvcHMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNvbmZpZy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnRleHRDXyA9IG5ldyBOdW1iZXJUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBiYXNlU3RlcDogY29uZmlnLmJhc2VTdGVwLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogY29uZmlnLnBhcnNlcixcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnRleHRQcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogY29uZmlnLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFNsaWRlclRleHRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHNsaWRlclZpZXc6IHRoaXMuc2xpZGVyQ18udmlldyxcbiAgICAgICAgICAgICAgICB0ZXh0VmlldzogdGhpcy50ZXh0Q18udmlldyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBzbGlkZXJDb250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVyQ187XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRleHRDb250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dENfO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd3JpdGVQcmltaXRpdmUodGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgICB0YXJnZXQud3JpdGUodmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTGlzdE9wdGlvbnModmFsdWUpIHtcbiAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHAucmVxdWlyZWQuYXJyYXkocC5yZXF1aXJlZC5vYmplY3Qoe1xuICAgICAgICAgICAgICAgIHRleHQ6IHAucmVxdWlyZWQuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwLnJlcXVpcmVkLnJhdyxcbiAgICAgICAgICAgIH0pKSh2YWx1ZSkudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBwLnJlcXVpcmVkLnJhdyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VQaWNrZXJMYXlvdXQodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnaW5saW5lJyB8fCB2YWx1ZSA9PT0gJ3BvcHVwJykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXModmFsdWUpIHtcbiAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgIHJldHVybiBwLnJlcXVpcmVkLm9iamVjdCh7XG4gICAgICAgICAgICBtYXg6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgbWluOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgIHN0ZXA6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICB9KSh2YWx1ZSkudmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxpc3RPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKHRleHQpID0+IHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goeyB0ZXh0OiB0ZXh0LCB2YWx1ZTogb3B0aW9uc1t0ZXh0XSB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTGlzdENvbnN0cmFpbnQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gIWlzRW1wdHkob3B0aW9ucylcbiAgICAgICAgICAgID8gbmV3IExpc3RDb25zdHJhaW50KG5vcm1hbGl6ZUxpc3RPcHRpb25zKGZvcmNlQ2FzdChvcHRpb25zKSkpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRMaXN0SXRlbXMoY29uc3RyYWludCkge1xuICAgICAgICBjb25zdCBjID0gY29uc3RyYWludFxuICAgICAgICAgICAgPyBmaW5kQ29uc3RyYWludChjb25zdHJhaW50LCBMaXN0Q29uc3RyYWludClcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYy5vcHRpb25zO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kU3RlcChjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdHJhaW50ID8gZmluZENvbnN0cmFpbnQoY29uc3RyYWludCwgU3RlcENvbnN0cmFpbnQpIDogbnVsbDtcbiAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYy5zdGVwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMoY29uc3RyYWludCwgcmF3VmFsdWUpIHtcbiAgICAgICAgY29uc3Qgc2MgPSBjb25zdHJhaW50ICYmIGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIFN0ZXBDb25zdHJhaW50KTtcbiAgICAgICAgaWYgKHNjKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGVjaW1hbERpZ2l0cyhzYy5zdGVwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoZ2V0RGVjaW1hbERpZ2l0cyhyYXdWYWx1ZSksIDIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRCYXNlU3RlcChjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBmaW5kU3RlcChjb25zdHJhaW50KTtcbiAgICAgICAgcmV0dXJuIHN0ZXAgIT09IG51bGwgJiYgc3RlcCAhPT0gdm9pZCAwID8gc3RlcCA6IDE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjb25zdHJhaW50LCByYXdWYWx1ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHNjID0gY29uc3RyYWludCAmJiBmaW5kQ29uc3RyYWludChjb25zdHJhaW50LCBTdGVwQ29uc3RyYWludCk7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBNYXRoLmFicygoX2EgPSBzYyA9PT0gbnVsbCB8fCBzYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2Muc3RlcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmF3VmFsdWUpO1xuICAgICAgICByZXR1cm4gYmFzZSA9PT0gMCA/IDAuMSA6IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKE1hdGgubG9nMTAoYmFzZSkpIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGQgPSBDbGFzc05hbWUoJ2NrYicpO1xuICAgIGNsYXNzIENoZWNrYm94VmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VfID0gdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGQoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgbGFiZWxFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG4gICAgICAgICAgICBsYWJlbEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgnbCcpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChsYWJlbEVsZW0pO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ2NoZWNrYm94JztcbiAgICAgICAgICAgIGxhYmVsRWxlbS5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZCh0aGlzLmlucHV0RWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGQoJ3cnKSk7XG4gICAgICAgICAgICBsYWJlbEVsZW0uYXBwZW5kQ2hpbGQod3JhcHBlckVsZW0pO1xuICAgICAgICAgICAgY29uc3QgbWFya0VsZW0gPSBjcmVhdGVTdmdJY29uRWxlbWVudChkb2MsICdjaGVjaycpO1xuICAgICAgICAgICAgd3JhcHBlckVsZW0uYXBwZW5kQ2hpbGQobWFya0VsZW0pO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5jaGVja2VkID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQ2hlY2tib3hDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dENoYW5nZV8gPSB0aGlzLm9uSW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IENoZWNrYm94Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25JbnB1dENoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIG9uSW5wdXRDaGFuZ2VfKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbSA9IGZvcmNlQ2FzdChlLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IGlucHV0RWxlbS5jaGVja2VkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludCQ1KHBhcmFtcykge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBjb25zdCBsYyA9IGNyZWF0ZUxpc3RDb25zdHJhaW50KHBhcmFtcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKGxjKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKGxjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUNvbnN0cmFpbnQoY29uc3RyYWludHMpO1xuICAgIH1cbiAgICBjb25zdCBCb29sZWFuSW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtYm9vbCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZUxpc3RPcHRpb25zKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gYm9vbEZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkNShhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICB3cml0ZXI6IChfYXJncykgPT4gd3JpdGVQcmltaXRpdmUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhcmdzLmRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGlmIChjICYmIGZpbmRDb25zdHJhaW50KGMsIExpc3RDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IChfYSA9IGZpbmRMaXN0SXRlbXMoYykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGVja2JveENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgY2xhc3NOYW1lJGMgPSBDbGFzc05hbWUoJ2NvbCcpO1xuICAgIGNsYXNzIENvbG9yVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygpKTtcbiAgICAgICAgICAgIGNvbmZpZy5mb2xkYWJsZS5iaW5kRXhwYW5kZWRDbGFzcyh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSRjKHVuZGVmaW5lZCwgJ2V4cGFuZGVkJykpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKGNvbmZpZy5mb2xkYWJsZSwgJ2NvbXBsZXRlZCcsIHZhbHVlVG9DbGFzc05hbWUodGhpcy5lbGVtZW50LCBjbGFzc05hbWUkYyh1bmRlZmluZWQsICdjcGwnKSkpO1xuICAgICAgICAgICAgY29uc3QgaGVhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBoZWFkRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRjKCdoJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGhlYWRFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHN3YXRjaEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzd2F0Y2hFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGMoJ3MnKSk7XG4gICAgICAgICAgICBoZWFkRWxlbS5hcHBlbmRDaGlsZChzd2F0Y2hFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc3dhdGNoRWxlbWVudCA9IHN3YXRjaEVsZW07XG4gICAgICAgICAgICBjb25zdCB0ZXh0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRleHRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGMoJ3QnKSk7XG4gICAgICAgICAgICBoZWFkRWxlbS5hcHBlbmRDaGlsZCh0ZXh0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRleHRFbGVtZW50ID0gdGV4dEVsZW07XG4gICAgICAgICAgICBpZiAoY29uZmlnLnBpY2tlckxheW91dCA9PT0gJ2lubGluZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaWNrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIHBpY2tlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygncCcpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQocGlja2VyRWxlbSk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJFbGVtZW50ID0gcGlja2VyRWxlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZ2JUb0hzbChyLCBnLCBiKSB7XG4gICAgICAgIGNvbnN0IHJwID0gY29uc3RyYWluUmFuZ2UociAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGdwID0gY29uc3RyYWluUmFuZ2UoZyAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGJwID0gY29uc3RyYWluUmFuZ2UoYiAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGNtYXggPSBNYXRoLm1heChycCwgZ3AsIGJwKTtcbiAgICAgICAgY29uc3QgY21pbiA9IE1hdGgubWluKHJwLCBncCwgYnApO1xuICAgICAgICBjb25zdCBjID0gY21heCAtIGNtaW47XG4gICAgICAgIGxldCBoID0gMDtcbiAgICAgICAgbGV0IHMgPSAwO1xuICAgICAgICBjb25zdCBsID0gKGNtaW4gKyBjbWF4KSAvIDI7XG4gICAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgICAgICBzID0gYyAvICgxIC0gTWF0aC5hYnMoY21heCArIGNtaW4gLSAxKSk7XG4gICAgICAgICAgICBpZiAocnAgPT09IGNtYXgpIHtcbiAgICAgICAgICAgICAgICBoID0gKGdwIC0gYnApIC8gYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGdwID09PSBjbWF4KSB7XG4gICAgICAgICAgICAgICAgaCA9IDIgKyAoYnAgLSBycCkgLyBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaCA9IDQgKyAocnAgLSBncCkgLyBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaCA9IGggLyA2ICsgKGggPCAwID8gMSA6IDApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbaCAqIDM2MCwgcyAqIDEwMCwgbCAqIDEwMF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhzbFRvUmdiKGgsIHMsIGwpIHtcbiAgICAgICAgY29uc3QgaHAgPSAoKGggJSAzNjApICsgMzYwKSAlIDM2MDtcbiAgICAgICAgY29uc3Qgc3AgPSBjb25zdHJhaW5SYW5nZShzIC8gMTAwLCAwLCAxKTtcbiAgICAgICAgY29uc3QgbHAgPSBjb25zdHJhaW5SYW5nZShsIC8gMTAwLCAwLCAxKTtcbiAgICAgICAgY29uc3QgYyA9ICgxIC0gTWF0aC5hYnMoMiAqIGxwIC0gMSkpICogc3A7XG4gICAgICAgIGNvbnN0IHggPSBjICogKDEgLSBNYXRoLmFicygoKGhwIC8gNjApICUgMikgLSAxKSk7XG4gICAgICAgIGNvbnN0IG0gPSBscCAtIGMgLyAyO1xuICAgICAgICBsZXQgcnAsIGdwLCBicDtcbiAgICAgICAgaWYgKGhwID49IDAgJiYgaHAgPCA2MCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gW2MsIHgsIDBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhwID49IDYwICYmIGhwIDwgMTIwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgYywgMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTIwICYmIGhwIDwgMTgwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgYywgeF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTgwICYmIGhwIDwgMjQwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgeCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMjQwICYmIGhwIDwgMzAwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgMCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbYywgMCwgeF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsocnAgKyBtKSAqIDI1NSwgKGdwICsgbSkgKiAyNTUsIChicCArIG0pICogMjU1XTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmdiVG9Ic3YociwgZywgYikge1xuICAgICAgICBjb25zdCBycCA9IGNvbnN0cmFpblJhbmdlKHIgLyAyNTUsIDAsIDEpO1xuICAgICAgICBjb25zdCBncCA9IGNvbnN0cmFpblJhbmdlKGcgLyAyNTUsIDAsIDEpO1xuICAgICAgICBjb25zdCBicCA9IGNvbnN0cmFpblJhbmdlKGIgLyAyNTUsIDAsIDEpO1xuICAgICAgICBjb25zdCBjbWF4ID0gTWF0aC5tYXgocnAsIGdwLCBicCk7XG4gICAgICAgIGNvbnN0IGNtaW4gPSBNYXRoLm1pbihycCwgZ3AsIGJwKTtcbiAgICAgICAgY29uc3QgZCA9IGNtYXggLSBjbWluO1xuICAgICAgICBsZXQgaDtcbiAgICAgICAgaWYgKGQgPT09IDApIHtcbiAgICAgICAgICAgIGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNtYXggPT09IHJwKSB7XG4gICAgICAgICAgICBoID0gNjAgKiAoKCgoKGdwIC0gYnApIC8gZCkgJSA2KSArIDYpICUgNik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY21heCA9PT0gZ3ApIHtcbiAgICAgICAgICAgIGggPSA2MCAqICgoYnAgLSBycCkgLyBkICsgMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoID0gNjAgKiAoKHJwIC0gZ3ApIC8gZCArIDQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHMgPSBjbWF4ID09PSAwID8gMCA6IGQgLyBjbWF4O1xuICAgICAgICBjb25zdCB2ID0gY21heDtcbiAgICAgICAgcmV0dXJuIFtoLCBzICogMTAwLCB2ICogMTAwXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHN2VG9SZ2IoaCwgcywgdikge1xuICAgICAgICBjb25zdCBocCA9IGxvb3BSYW5nZShoLCAzNjApO1xuICAgICAgICBjb25zdCBzcCA9IGNvbnN0cmFpblJhbmdlKHMgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCB2cCA9IGNvbnN0cmFpblJhbmdlKHYgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCBjID0gdnAgKiBzcDtcbiAgICAgICAgY29uc3QgeCA9IGMgKiAoMSAtIE1hdGguYWJzKCgoaHAgLyA2MCkgJSAyKSAtIDEpKTtcbiAgICAgICAgY29uc3QgbSA9IHZwIC0gYztcbiAgICAgICAgbGV0IHJwLCBncCwgYnA7XG4gICAgICAgIGlmIChocCA+PSAwICYmIGhwIDwgNjApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFtjLCB4LCAwXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSA2MCAmJiBocCA8IDEyMCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gW3gsIGMsIDBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhwID49IDEyMCAmJiBocCA8IDE4MCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gWzAsIGMsIHhdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhwID49IDE4MCAmJiBocCA8IDI0MCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gWzAsIHgsIGNdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhwID49IDI0MCAmJiBocCA8IDMwMCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gW3gsIDAsIGNdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gW2MsIDAsIHhdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbKHJwICsgbSkgKiAyNTUsIChncCArIG0pICogMjU1LCAoYnAgKyBtKSAqIDI1NV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhzbFRvSHN2KGgsIHMsIGwpIHtcbiAgICAgICAgY29uc3Qgc2QgPSBsICsgKHMgKiAoMTAwIC0gTWF0aC5hYnMoMiAqIGwgLSAxMDApKSkgLyAoMiAqIDEwMCk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBoLFxuICAgICAgICAgICAgc2QgIT09IDAgPyAocyAqICgxMDAgLSBNYXRoLmFicygyICogbCAtIDEwMCkpKSAvIHNkIDogMCxcbiAgICAgICAgICAgIGwgKyAocyAqICgxMDAgLSBNYXRoLmFicygyICogbCAtIDEwMCkpKSAvICgyICogMTAwKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHN2VG9Ic2woaCwgcywgdikge1xuICAgICAgICBjb25zdCBzZCA9IDEwMCAtIE1hdGguYWJzKCh2ICogKDIwMCAtIHMpKSAvIDEwMCAtIDEwMCk7XG4gICAgICAgIHJldHVybiBbaCwgc2QgIT09IDAgPyAocyAqIHYpIC8gc2QgOiAwLCAodiAqICgyMDAgLSBzKSkgLyAoMiAqIDEwMCldO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVBbHBoYUNvbXBvbmVudChjb21wcykge1xuICAgICAgICByZXR1cm4gW2NvbXBzWzBdLCBjb21wc1sxXSwgY29tcHNbMl1dO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhcHBlbmRBbHBoYUNvbXBvbmVudChjb21wcywgYWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIFtjb21wc1swXSwgY29tcHNbMV0sIGNvbXBzWzJdLCBhbHBoYV07XG4gICAgfVxuICAgIGNvbnN0IE1PREVfQ09OVkVSVEVSX01BUCA9IHtcbiAgICAgICAgaHNsOiB7XG4gICAgICAgICAgICBoc2w6IChoLCBzLCBsKSA9PiBbaCwgcywgbF0sXG4gICAgICAgICAgICBoc3Y6IGhzbFRvSHN2LFxuICAgICAgICAgICAgcmdiOiBoc2xUb1JnYixcbiAgICAgICAgfSxcbiAgICAgICAgaHN2OiB7XG4gICAgICAgICAgICBoc2w6IGhzdlRvSHNsLFxuICAgICAgICAgICAgaHN2OiAoaCwgcywgdikgPT4gW2gsIHMsIHZdLFxuICAgICAgICAgICAgcmdiOiBoc3ZUb1JnYixcbiAgICAgICAgfSxcbiAgICAgICAgcmdiOiB7XG4gICAgICAgICAgICBoc2w6IHJnYlRvSHNsLFxuICAgICAgICAgICAgaHN2OiByZ2JUb0hzdixcbiAgICAgICAgICAgIHJnYjogKHIsIGcsIGIpID0+IFtyLCBnLCBiXSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGNvbnZlcnRDb2xvck1vZGUoY29tcG9uZW50cywgZnJvbU1vZGUsIHRvTW9kZSkge1xuICAgICAgICByZXR1cm4gTU9ERV9DT05WRVJURVJfTUFQW2Zyb21Nb2RlXVt0b01vZGVdKC4uLmNvbXBvbmVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IENPTlNUUkFJTlRfTUFQID0ge1xuICAgICAgICBoc2w6IChjb21wcykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBsb29wUmFuZ2UoY29tcHNbMF0sIDM2MCksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMV0sIDAsIDEwMCksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMl0sIDAsIDEwMCksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoKF9hID0gY29tcHNbM10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDEsIDAsIDEpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICAgICAgaHN2OiAoY29tcHMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgbG9vcFJhbmdlKGNvbXBzWzBdLCAzNjApLFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpblJhbmdlKGNvbXBzWzFdLCAwLCAxMDApLFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpblJhbmdlKGNvbXBzWzJdLCAwLCAxMDApLFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpblJhbmdlKChfYSA9IGNvbXBzWzNdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAxLCAwLCAxKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH0sXG4gICAgICAgIHJnYjogKGNvbXBzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpblJhbmdlKGNvbXBzWzBdLCAwLCAyNTUpLFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpblJhbmdlKGNvbXBzWzFdLCAwLCAyNTUpLFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpblJhbmdlKGNvbXBzWzJdLCAwLCAyNTUpLFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpblJhbmdlKChfYSA9IGNvbXBzWzNdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAxLCAwLCAxKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBpc0VtcHR5KG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5IGluIG9iaiAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdudW1iZXInO1xuICAgIH1cbiAgICBjbGFzcyBDb2xvciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbXBzLCBtb2RlKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVfID0gbW9kZTtcbiAgICAgICAgICAgIHRoaXMuY29tcHNfID0gQ09OU1RSQUlOVF9NQVBbbW9kZV0oY29tcHMpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBibGFjaygpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoWzAsIDAsIDBdLCAncmdiJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGZyb21PYmplY3Qob2JqKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9ICdhJyBpbiBvYmogPyBbb2JqLnIsIG9iai5nLCBvYmouYiwgb2JqLmFdIDogW29iai5yLCBvYmouZywgb2JqLmJdO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihjb21wcywgJ3JnYicpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyB0b1JnYmFPYmplY3QoY29sb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xvci50b1JnYmFPYmplY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNSZ2JDb2xvck9iamVjdChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiAoaXNSZ2JDb2xvckNvbXBvbmVudChvYmosICdyJykgJiZcbiAgICAgICAgICAgICAgICBpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwgJ2cnKSAmJlxuICAgICAgICAgICAgICAgIGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCAnYicpKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNSZ2JhQ29sb3JPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1JnYkNvbG9yT2JqZWN0KG9iaikgJiYgaXNSZ2JDb2xvckNvbXBvbmVudChvYmosICdhJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzQ29sb3JPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1JnYkNvbG9yT2JqZWN0KG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGVxdWFscyh2MSwgdjIpIHtcbiAgICAgICAgICAgIGlmICh2MS5tb2RlXyAhPT0gdjIubW9kZV8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wczEgPSB2MS5jb21wc187XG4gICAgICAgICAgICBjb25zdCBjb21wczIgPSB2Mi5jb21wc187XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBzMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjb21wczFbaV0gIT09IGNvbXBzMltpXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IG1vZGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlXztcbiAgICAgICAgfVxuICAgICAgICBnZXRDb21wb25lbnRzKG9wdF9tb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwZW5kQWxwaGFDb21wb25lbnQoY29udmVydENvbG9yTW9kZShyZW1vdmVBbHBoYUNvbXBvbmVudCh0aGlzLmNvbXBzXyksIHRoaXMubW9kZV8sIG9wdF9tb2RlIHx8IHRoaXMubW9kZV8pLCB0aGlzLmNvbXBzX1szXSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9SZ2JhT2JqZWN0KCkge1xuICAgICAgICAgICAgY29uc3QgcmdiQ29tcHMgPSB0aGlzLmdldENvbXBvbmVudHMoJ3JnYicpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByOiByZ2JDb21wc1swXSxcbiAgICAgICAgICAgICAgICBnOiByZ2JDb21wc1sxXSxcbiAgICAgICAgICAgICAgICBiOiByZ2JDb21wc1syXSxcbiAgICAgICAgICAgICAgICBhOiByZ2JDb21wc1szXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkYiA9IENsYXNzTmFtZSgnY29scCcpO1xuICAgIGNsYXNzIENvbG9yUGlja2VyVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmFscGhhVmlld3NfID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCkpO1xuICAgICAgICAgICAgY29uc3QgaHN2RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGhzdkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignaHN2JykpO1xuICAgICAgICAgICAgY29uc3Qgc3ZFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc3ZFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ3N2JykpO1xuICAgICAgICAgICAgdGhpcy5zdlBhbGV0dGVWaWV3XyA9IGNvbmZpZy5zdlBhbGV0dGVWaWV3O1xuICAgICAgICAgICAgc3ZFbGVtLmFwcGVuZENoaWxkKHRoaXMuc3ZQYWxldHRlVmlld18uZWxlbWVudCk7XG4gICAgICAgICAgICBoc3ZFbGVtLmFwcGVuZENoaWxkKHN2RWxlbSk7XG4gICAgICAgICAgICBjb25zdCBoRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGhFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ2gnKSk7XG4gICAgICAgICAgICB0aGlzLmhQYWxldHRlVmlld18gPSBjb25maWcuaFBhbGV0dGVWaWV3O1xuICAgICAgICAgICAgaEVsZW0uYXBwZW5kQ2hpbGQodGhpcy5oUGFsZXR0ZVZpZXdfLmVsZW1lbnQpO1xuICAgICAgICAgICAgaHN2RWxlbS5hcHBlbmRDaGlsZChoRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaHN2RWxlbSk7XG4gICAgICAgICAgICBjb25zdCByZ2JFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgcmdiRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdyZ2InKSk7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3XyA9IGNvbmZpZy50ZXh0VmlldztcbiAgICAgICAgICAgIHJnYkVsZW0uYXBwZW5kQ2hpbGQodGhpcy50ZXh0Vmlld18uZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQocmdiRWxlbSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmFscGhhVmlld3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFscGhhVmlld3NfID0ge1xuICAgICAgICAgICAgICAgICAgICBwYWxldHRlOiBjb25maWcuYWxwaGFWaWV3cy5wYWxldHRlLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjb25maWcuYWxwaGFWaWV3cy50ZXh0LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgYUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgYUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignYScpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgYXBFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ2FwJykpO1xuICAgICAgICAgICAgICAgIGFwRWxlbS5hcHBlbmRDaGlsZCh0aGlzLmFscGhhVmlld3NfLnBhbGV0dGUuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYUVsZW0uYXBwZW5kQ2hpbGQoYXBFbGVtKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgYXRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ2F0JykpO1xuICAgICAgICAgICAgICAgIGF0RWxlbS5hcHBlbmRDaGlsZCh0aGlzLmFscGhhVmlld3NfLnRleHQuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYUVsZW0uYXBwZW5kQ2hpbGQoYXRFbGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYUVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCBhbGxGb2N1c2FibGVFbGVtZW50cygpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1zID0gW1xuICAgICAgICAgICAgICAgIHRoaXMuc3ZQYWxldHRlVmlld18uZWxlbWVudCxcbiAgICAgICAgICAgICAgICB0aGlzLmhQYWxldHRlVmlld18uZWxlbWVudCxcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRWaWV3Xy5tb2RlU2VsZWN0RWxlbWVudCxcbiAgICAgICAgICAgICAgICAuLi50aGlzLnRleHRWaWV3Xy50ZXh0Vmlld3MubWFwKCh2KSA9PiB2LmlucHV0RWxlbWVudCksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxwaGFWaWV3c18pIHtcbiAgICAgICAgICAgICAgICBlbGVtcy5wdXNoKHRoaXMuYWxwaGFWaWV3c18ucGFsZXR0ZS5lbGVtZW50LCB0aGlzLmFscGhhVmlld3NfLnRleHQuaW5wdXRFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbGVtcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlQ29sb3JJbnB1dFBhcmFtcyhwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgIHJldHVybiBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgIGFscGhhOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICBleHBhbmRlZDogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgcGlja2VyOiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBpY2tlckxheW91dCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRCYXNlU3RlcEZvckNvbG9yKGZvckFscGhhKSB7XG4gICAgICAgIHJldHVybiBmb3JBbHBoYSA/IDAuMSA6IDE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UodGV4dCwgbWF4VmFsdWUpIHtcbiAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL14oLispJSQvKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4ocGFyc2VGbG9hdCh0ZXh0KSwgbWF4VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihwYXJzZUZsb2F0KG1bMV0pICogMC4wMSAqIG1heFZhbHVlLCBtYXhWYWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IEFOR0xFX1RPX0RFR19NQVAgPSB7XG4gICAgICAgIGRlZzogKGFuZ2xlKSA9PiBhbmdsZSxcbiAgICAgICAgZ3JhZDogKGFuZ2xlKSA9PiAoYW5nbGUgKiAzNjApIC8gNDAwLFxuICAgICAgICByYWQ6IChhbmdsZSkgPT4gKGFuZ2xlICogMzYwKSAvICgyICogTWF0aC5QSSksXG4gICAgICAgIHR1cm46IChhbmdsZSkgPT4gYW5nbGUgKiAzNjAsXG4gICAgfTtcbiAgICBmdW5jdGlvbiBwYXJzZUNzc051bWJlck9yQW5nbGUodGV4dCkge1xuICAgICAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvXihbMC05Ll0rPykoZGVnfGdyYWR8cmFkfHR1cm4pJC8pO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuZ2xlID0gcGFyc2VGbG9hdChtWzFdKTtcbiAgICAgICAgY29uc3QgdW5pdCA9IG1bMl07XG4gICAgICAgIHJldHVybiBBTkdMRV9UT19ERUdfTUFQW3VuaXRdKGFuZ2xlKTtcbiAgICB9XG4gICAgY29uc3QgTk9UQVRJT05fVE9fUEFSU0VSX01BUCA9IHtcbiAgICAgICAgJ2Z1bmMucmdiJzogKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9ecmdiXFwoXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccypcXCkkLyk7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gW1xuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMV0sIDI1NSksXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsyXSwgMjU1KSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzNdLCAyNTUpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChpc05hTihjb21wc1swXSkgfHwgaXNOYU4oY29tcHNbMV0pIHx8IGlzTmFOKGNvbXBzWzJdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihjb21wcywgJ3JnYicpO1xuICAgICAgICB9LFxuICAgICAgICAnZnVuYy5yZ2JhJzogKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9ecmdiYVxcKFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccypcXCkkLyk7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gW1xuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMV0sIDI1NSksXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsyXSwgMjU1KSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzNdLCAyNTUpLFxuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bNF0sIDEpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChpc05hTihjb21wc1swXSkgfHxcbiAgICAgICAgICAgICAgICBpc05hTihjb21wc1sxXSkgfHxcbiAgICAgICAgICAgICAgICBpc05hTihjb21wc1syXSkgfHxcbiAgICAgICAgICAgICAgICBpc05hTihjb21wc1szXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoY29tcHMsICdyZ2InKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ2Z1bmMuaHNsJzogKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9eaHNsXFwoXFxzKihbMC05QS1GYS1mLl0rKD86ZGVnfGdyYWR8cmFkfHR1cm4pPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPckFuZ2xlKG1bMV0pLFxuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMl0sIDEwMCksXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVszXSwgMTAwKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoaXNOYU4oY29tcHNbMF0pIHx8IGlzTmFOKGNvbXBzWzFdKSB8fCBpc05hTihjb21wc1syXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoY29tcHMsICdoc2wnKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ2Z1bmMuaHNsYSc6ICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvXmhzbGFcXChcXHMqKFswLTlBLUZhLWYuXSsoPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccypcXCkkLyk7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gW1xuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JBbmdsZShtWzFdKSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzJdLCAxMDApLFxuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bM10sIDEwMCksXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVs0XSwgMSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGlzTmFOKGNvbXBzWzBdKSB8fFxuICAgICAgICAgICAgICAgIGlzTmFOKGNvbXBzWzFdKSB8fFxuICAgICAgICAgICAgICAgIGlzTmFOKGNvbXBzWzJdKSB8fFxuICAgICAgICAgICAgICAgIGlzTmFOKGNvbXBzWzNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihjb21wcywgJ2hzbCcpO1xuICAgICAgICB9LFxuICAgICAgICAnaGV4LnJnYic6ICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtUmdiID0gdGV4dC5tYXRjaCgvXiMoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKShbMC05QS1GYS1mXSkkLyk7XG4gICAgICAgICAgICBpZiAobVJnYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoW1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUmdiWzFdICsgbVJnYlsxXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUmdiWzJdICsgbVJnYlsyXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUmdiWzNdICsgbVJnYlszXSwgMTYpLFxuICAgICAgICAgICAgICAgIF0sICdyZ2InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1ScmdnYmIgPSB0ZXh0Lm1hdGNoKC9eKD86I3wweCkoWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KShbMC05QS1GYS1mXXsyfSkkLyk7XG4gICAgICAgICAgICBpZiAobVJyZ2diYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoW1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzFdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbMl0sIDE2KSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlszXSwgMTYpLFxuICAgICAgICAgICAgICAgIF0sICdyZ2InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICAnaGV4LnJnYmEnOiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbVJnYiA9IHRleHQubWF0Y2goL14jPyhbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKShbMC05QS1GYS1mXSkkLyk7XG4gICAgICAgICAgICBpZiAobVJnYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoW1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUmdiWzFdICsgbVJnYlsxXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUmdiWzJdICsgbVJnYlsyXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUmdiWzNdICsgbVJnYlszXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBtYXBSYW5nZShwYXJzZUludChtUmdiWzRdICsgbVJnYls0XSwgMTYpLCAwLCAyNTUsIDAsIDEpLFxuICAgICAgICAgICAgICAgIF0sICdyZ2InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1ScmdnYmIgPSB0ZXh0Lm1hdGNoKC9eKD86I3wweCk/KFswLTlBLUZhLWZdezJ9KShbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KSQvKTtcbiAgICAgICAgICAgIGlmIChtUnJnZ2JiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbMV0sIDE2KSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlsyXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIG1hcFJhbmdlKHBhcnNlSW50KG1ScmdnYmJbNF0sIDE2KSwgMCwgMjU1LCAwLCAxKSxcbiAgICAgICAgICAgICAgICBdLCAncmdiJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldENvbG9yTm90YXRpb24odGV4dCkge1xuICAgICAgICBjb25zdCBub3RhdGlvbnMgPSBPYmplY3Qua2V5cyhOT1RBVElPTl9UT19QQVJTRVJfTUFQKTtcbiAgICAgICAgcmV0dXJuIG5vdGF0aW9ucy5yZWR1Y2UoKHJlc3VsdCwgbm90YXRpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3VicGFyc2VyID0gTk9UQVRJT05fVE9fUEFSU0VSX01BUFtub3RhdGlvbl07XG4gICAgICAgICAgICByZXR1cm4gc3VicGFyc2VyKHRleHQpID8gbm90YXRpb24gOiBudWxsO1xuICAgICAgICB9LCBudWxsKTtcbiAgICB9XG4gICAgY29uc3QgQ29tcG9zaXRlQ29sb3JQYXJzZXIgPSAodGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBub3RhdGlvbiA9IGdldENvbG9yTm90YXRpb24odGV4dCk7XG4gICAgICAgIHJldHVybiBub3RhdGlvbiA/IE5PVEFUSU9OX1RPX1BBUlNFUl9NQVBbbm90YXRpb25dKHRleHQpIDogbnVsbDtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGhhc0FscGhhQ29tcG9uZW50KG5vdGF0aW9uKSB7XG4gICAgICAgIHJldHVybiAobm90YXRpb24gPT09ICdmdW5jLmhzbGEnIHx8XG4gICAgICAgICAgICBub3RhdGlvbiA9PT0gJ2Z1bmMucmdiYScgfHxcbiAgICAgICAgICAgIG5vdGF0aW9uID09PSAnaGV4LnJnYmEnKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JGcm9tU3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBjdiA9IENvbXBvc2l0ZUNvbG9yUGFyc2VyKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjdikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQ29sb3IuYmxhY2soKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gemVyb2ZpbGwoY29tcCkge1xuICAgICAgICBjb25zdCBoZXggPSBjb25zdHJhaW5SYW5nZShNYXRoLmZsb29yKGNvbXApLCAwLCAyNTUpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgcmV0dXJuIGhleC5sZW5ndGggPT09IDEgPyBgMCR7aGV4fWAgOiBoZXg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9IZXhSZ2JTdHJpbmcodmFsdWUsIHByZWZpeCA9ICcjJykge1xuICAgICAgICBjb25zdCBoZXhlcyA9IHJlbW92ZUFscGhhQ29tcG9uZW50KHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicpKVxuICAgICAgICAgICAgLm1hcCh6ZXJvZmlsbClcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke2hleGVzfWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9IZXhSZ2JhU3RyaW5nKHZhbHVlLCBwcmVmaXggPSAnIycpIHtcbiAgICAgICAgY29uc3QgcmdiYUNvbXBzID0gdmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJyk7XG4gICAgICAgIGNvbnN0IGhleGVzID0gW3JnYmFDb21wc1swXSwgcmdiYUNvbXBzWzFdLCByZ2JhQ29tcHNbMl0sIHJnYmFDb21wc1szXSAqIDI1NV1cbiAgICAgICAgICAgIC5tYXAoemVyb2ZpbGwpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHtoZXhlc31gO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvRnVuY3Rpb25hbFJnYlN0cmluZyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMCk7XG4gICAgICAgIGNvbnN0IGNvbXBzID0gcmVtb3ZlQWxwaGFDb21wb25lbnQodmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykpLm1hcCgoY29tcCkgPT4gZm9ybWF0dGVyKGNvbXApKTtcbiAgICAgICAgcmV0dXJuIGByZ2IoJHtjb21wcy5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcodmFsdWUpIHtcbiAgICAgICAgY29uc3QgYUZvcm1hdHRlciA9IGNyZWF0ZU51bWJlckZvcm1hdHRlcigyKTtcbiAgICAgICAgY29uc3QgcmdiRm9ybWF0dGVyID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDApO1xuICAgICAgICBjb25zdCBjb21wcyA9IHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicpLm1hcCgoY29tcCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGluZGV4ID09PSAzID8gYUZvcm1hdHRlciA6IHJnYkZvcm1hdHRlcjtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXIoY29tcCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYHJnYmEoJHtjb21wcy5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvRnVuY3Rpb25hbEhzbFN0cmluZyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXJzID0gW1xuICAgICAgICAgICAgY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDApLFxuICAgICAgICAgICAgZm9ybWF0UGVyY2VudGFnZSxcbiAgICAgICAgICAgIGZvcm1hdFBlcmNlbnRhZ2UsXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGNvbXBzID0gcmVtb3ZlQWxwaGFDb21wb25lbnQodmFsdWUuZ2V0Q29tcG9uZW50cygnaHNsJykpLm1hcCgoY29tcCwgaW5kZXgpID0+IGZvcm1hdHRlcnNbaW5kZXhdKGNvbXApKTtcbiAgICAgICAgcmV0dXJuIGBoc2woJHtjb21wcy5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvRnVuY3Rpb25hbEhzbGFTdHJpbmcodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVycyA9IFtcbiAgICAgICAgICAgIGNyZWF0ZU51bWJlckZvcm1hdHRlcigwKSxcbiAgICAgICAgICAgIGZvcm1hdFBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBmb3JtYXRQZXJjZW50YWdlLFxuICAgICAgICAgICAgY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBjb21wcyA9IHZhbHVlXG4gICAgICAgICAgICAuZ2V0Q29tcG9uZW50cygnaHNsJylcbiAgICAgICAgICAgIC5tYXAoKGNvbXAsIGluZGV4KSA9PiBmb3JtYXR0ZXJzW2luZGV4XShjb21wKSk7XG4gICAgICAgIHJldHVybiBgaHNsYSgke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGNvbnN0IE5PVEFUSU9OX1RPX1NUUklOR0lGSUVSX01BUCA9IHtcbiAgICAgICAgJ2Z1bmMuaHNsJzogY29sb3JUb0Z1bmN0aW9uYWxIc2xTdHJpbmcsXG4gICAgICAgICdmdW5jLmhzbGEnOiBjb2xvclRvRnVuY3Rpb25hbEhzbGFTdHJpbmcsXG4gICAgICAgICdmdW5jLnJnYic6IGNvbG9yVG9GdW5jdGlvbmFsUmdiU3RyaW5nLFxuICAgICAgICAnZnVuYy5yZ2JhJzogY29sb3JUb0Z1bmN0aW9uYWxSZ2JhU3RyaW5nLFxuICAgICAgICAnaGV4LnJnYic6IGNvbG9yVG9IZXhSZ2JTdHJpbmcsXG4gICAgICAgICdoZXgucmdiYSc6IGNvbG9yVG9IZXhSZ2JhU3RyaW5nLFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0Q29sb3JTdHJpbmdpZmllcihub3RhdGlvbikge1xuICAgICAgICByZXR1cm4gTk9UQVRJT05fVE9fU1RSSU5HSUZJRVJfTUFQW25vdGF0aW9uXTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkYSA9IENsYXNzTmFtZSgnYXBsJyk7XG4gICAgY2xhc3MgQVBhbGV0dGVWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgodGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGJhckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBiYXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGEoJ2InKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYmFyRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBjb2xvckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb2xvckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYSgnYycpKTtcbiAgICAgICAgICAgIGJhckVsZW0uYXBwZW5kQ2hpbGQoY29sb3JFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuY29sb3JFbGVtXyA9IGNvbG9yRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtYXJrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGEoJ20nKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya2VyRWxlbSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fID0gbWFya2VyRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpZXdFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgcHJldmlld0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYSgncCcpKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8uYXBwZW5kQ2hpbGQocHJldmlld0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3RWxlbV8gPSBwcmV2aWV3RWxlbTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHJnYmFDb21wcyA9IGMuZ2V0Q29tcG9uZW50cygncmdiJyk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0Q29sb3IgPSBuZXcgQ29sb3IoW3JnYmFDb21wc1swXSwgcmdiYUNvbXBzWzFdLCByZ2JhQ29tcHNbMl0sIDBdLCAncmdiJyk7XG4gICAgICAgICAgICBjb25zdCByaWdodENvbG9yID0gbmV3IENvbG9yKFtyZ2JhQ29tcHNbMF0sIHJnYmFDb21wc1sxXSwgcmdiYUNvbXBzWzJdLCAyNTVdLCAncmdiJyk7XG4gICAgICAgICAgICBjb25zdCBncmFkaWVudENvbXBzID0gW1xuICAgICAgICAgICAgICAgICd0byByaWdodCcsXG4gICAgICAgICAgICAgICAgY29sb3JUb0Z1bmN0aW9uYWxSZ2JhU3RyaW5nKGxlZnRDb2xvciksXG4gICAgICAgICAgICAgICAgY29sb3JUb0Z1bmN0aW9uYWxSZ2JhU3RyaW5nKHJpZ2h0Q29sb3IpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHRoaXMuY29sb3JFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kID0gYGxpbmVhci1ncmFkaWVudCgke2dyYWRpZW50Q29tcHMuam9pbignLCcpfSlgO1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3RWxlbV8uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JUb0Z1bmN0aW9uYWxSZ2JhU3RyaW5nKGMpO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IG1hcFJhbmdlKHJnYmFDb21wc1szXSwgMCwgMSwgMCwgMTAwKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8uc3R5bGUubGVmdCA9IGAke2xlZnR9JWA7XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZUNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEFQYWxldHRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5RG93bl8gPSB0aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25LZXlVcF8gPSB0aGlzLm9uS2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQVBhbGV0dGVWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXyA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignZG93bicsIHRoaXMub25Qb2ludGVyRG93bl8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ21vdmUnLCB0aGlzLm9uUG9pbnRlck1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25Qb2ludGVyVXBfKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5RG93bl8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uS2V5VXBfKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVQb2ludGVyRXZlbnRfKGQsIG9wdHMpIHtcbiAgICAgICAgICAgIGlmICghZC5wb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFscGhhID0gZC5wb2ludC54IC8gZC5ib3VuZHMud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IFtoLCBzLCB2XSA9IGMuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBDb2xvcihbaCwgcywgdiwgYWxwaGFdLCAnaHN2JyksIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd25fKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJNb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyVXBfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlEb3duXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkoZ2V0QmFzZVN0ZXBGb3JDb2xvcih0cnVlKSwgZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgW2gsIHMsIHYsIGFdID0gYy5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IENvbG9yKFtoLCBzLCB2LCBhICsgc3RlcF0sICdoc3YnKSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbktleVVwXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkoZ2V0QmFzZVN0ZXBGb3JDb2xvcih0cnVlKSwgZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkOSA9IENsYXNzTmFtZSgnY29sdHh0Jyk7XG4gICAgZnVuY3Rpb24gY3JlYXRlTW9kZVNlbGVjdEVsZW1lbnQoZG9jKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW1xuICAgICAgICAgICAgeyB0ZXh0OiAnUkdCJywgdmFsdWU6ICdyZ2InIH0sXG4gICAgICAgICAgICB7IHRleHQ6ICdIU0wnLCB2YWx1ZTogJ2hzbCcgfSxcbiAgICAgICAgICAgIHsgdGV4dDogJ0hTVicsIHZhbHVlOiAnaHN2JyB9LFxuICAgICAgICBdO1xuICAgICAgICBzZWxlY3RFbGVtLmFwcGVuZENoaWxkKGl0ZW1zLnJlZHVjZSgoZnJhZywgaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3B0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICAgICAgICAgIG9wdEVsZW0udGV4dENvbnRlbnQgPSBpdGVtLnRleHQ7XG4gICAgICAgICAgICBvcHRFbGVtLnZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQob3B0RWxlbSk7XG4gICAgICAgICAgICByZXR1cm4gZnJhZztcbiAgICAgICAgfSwgZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkpO1xuICAgICAgICByZXR1cm4gc2VsZWN0RWxlbTtcbiAgICB9XG4gICAgY2xhc3MgQ29sb3JUZXh0VmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgpKTtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbW9kZUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgnbScpKTtcbiAgICAgICAgICAgIHRoaXMubW9kZUVsZW1fID0gY3JlYXRlTW9kZVNlbGVjdEVsZW1lbnQoZG9jKTtcbiAgICAgICAgICAgIHRoaXMubW9kZUVsZW1fLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDkoJ21zJykpO1xuICAgICAgICAgICAgbW9kZUVsZW0uYXBwZW5kQ2hpbGQodGhpcy5tb2RlU2VsZWN0RWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBtb2RlTWFya2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1vZGVNYXJrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDkoJ21tJykpO1xuICAgICAgICAgICAgbW9kZU1hcmtlckVsZW0uYXBwZW5kQ2hpbGQoY3JlYXRlU3ZnSWNvbkVsZW1lbnQoZG9jLCAnZHJvcGRvd24nKSk7XG4gICAgICAgICAgICBtb2RlRWxlbS5hcHBlbmRDaGlsZChtb2RlTWFya2VyRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobW9kZUVsZW0pO1xuICAgICAgICAgICAgY29uc3QgdGV4dHNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGV4dHNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDkoJ3cnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGV4dHNFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudGV4dHNFbGVtXyA9IHRleHRzRWxlbTtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdzXyA9IGNvbmZpZy50ZXh0Vmlld3M7XG4gICAgICAgICAgICB0aGlzLmFwcGx5VGV4dFZpZXdzXygpO1xuICAgICAgICAgICAgYmluZFZhbHVlKGNvbmZpZy5jb2xvck1vZGUsIChtb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlRWxlbV8udmFsdWUgPSBtb2RlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IG1vZGVTZWxlY3RFbGVtZW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZUVsZW1fO1xuICAgICAgICB9XG4gICAgICAgIGdldCB0ZXh0Vmlld3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0Vmlld3NfO1xuICAgICAgICB9XG4gICAgICAgIHNldCB0ZXh0Vmlld3ModGV4dFZpZXdzKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3c18gPSB0ZXh0Vmlld3M7XG4gICAgICAgICAgICB0aGlzLmFwcGx5VGV4dFZpZXdzXygpO1xuICAgICAgICB9XG4gICAgICAgIGFwcGx5VGV4dFZpZXdzXygpIHtcbiAgICAgICAgICAgIHJlbW92ZUNoaWxkRWxlbWVudHModGhpcy50ZXh0c0VsZW1fKTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld3NfLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBjb21wRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ5KCdjJykpO1xuICAgICAgICAgICAgICAgIGNvbXBFbGVtLmFwcGVuZENoaWxkKHYuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0c0VsZW1fLmFwcGVuZENoaWxkKGNvbXBFbGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgRk9STUFUVEVSID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDApO1xuICAgIGNvbnN0IE1PREVfVE9fQ09OU1RSQUlOVF9NQVAgPSB7XG4gICAgICAgIHJnYjogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZUNvbnN0cmFpbnQoeyBtaW46IDAsIG1heDogMjU1IH0pO1xuICAgICAgICB9LFxuICAgICAgICBoc2w6IChpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ID09PSAwXG4gICAgICAgICAgICAgICAgPyBuZXcgUmFuZ2VDb25zdHJhaW50KHsgbWluOiAwLCBtYXg6IDM2MCB9KVxuICAgICAgICAgICAgICAgIDogbmV3IFJhbmdlQ29uc3RyYWludCh7IG1pbjogMCwgbWF4OiAxMDAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhzdjogKGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXggPT09IDBcbiAgICAgICAgICAgICAgICA/IG5ldyBSYW5nZUNvbnN0cmFpbnQoeyBtaW46IDAsIG1heDogMzYwIH0pXG4gICAgICAgICAgICAgICAgOiBuZXcgUmFuZ2VDb25zdHJhaW50KHsgbWluOiAwLCBtYXg6IDEwMCB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXIoZG9jLCBjb25maWcsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBuZXcgTnVtYmVyVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICBhcnJheVBvc2l0aW9uOiBpbmRleCA9PT0gMCA/ICdmc3QnIDogaW5kZXggPT09IDMgLSAxID8gJ2xzdCcgOiAnbWlkJyxcbiAgICAgICAgICAgIGJhc2VTdGVwOiBnZXRCYXNlU3RlcEZvckNvbG9yKGZhbHNlKSxcbiAgICAgICAgICAgIHBhcnNlcjogY29uZmlnLnBhcnNlcixcbiAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiAxLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogRk9STUFUVEVSLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoMCwge1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IE1PREVfVE9fQ09OU1RSQUlOVF9NQVBbY29uZmlnLmNvbG9yTW9kZV0oaW5kZXgpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjbGFzcyBDb2xvclRleHRDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlU2VsZWN0Q2hhbmdlXyA9IHRoaXMub25Nb2RlU2VsZWN0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wYXJzZXJfID0gY29uZmlnLnBhcnNlcjtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmNvbG9yTW9kZSA9IGNyZWF0ZVZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUubW9kZSk7XG4gICAgICAgICAgICB0aGlzLmNjc18gPSB0aGlzLmNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXJzXyhkb2MpO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IENvbG9yVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgY29sb3JNb2RlOiB0aGlzLmNvbG9yTW9kZSxcbiAgICAgICAgICAgICAgICB0ZXh0Vmlld3M6IFt0aGlzLmNjc19bMF0udmlldywgdGhpcy5jY3NfWzFdLnZpZXcsIHRoaXMuY2NzX1syXS52aWV3XSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3Lm1vZGVTZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25Nb2RlU2VsZWN0Q2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfKGRvYykge1xuICAgICAgICAgICAgY29uc3QgY2MgPSB7XG4gICAgICAgICAgICAgICAgY29sb3JNb2RlOiB0aGlzLmNvbG9yTW9kZS5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHRoaXMucGFyc2VyXyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNjcyA9IFtcbiAgICAgICAgICAgICAgICBjcmVhdGVDb21wb25lbnRDb250cm9sbGVyKGRvYywgY2MsIDApLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXIoZG9jLCBjYywgMSksXG4gICAgICAgICAgICAgICAgY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcihkb2MsIGNjLCAyKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjY3MuZm9yRWFjaCgoY3MsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29ubmVjdFZhbHVlcyh7XG4gICAgICAgICAgICAgICAgICAgIHByaW1hcnk6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeTogY3MudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKHRoaXMuY29sb3JNb2RlLnJhd1ZhbHVlKVtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAocCwgcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGlja2VkTW9kZSA9IHRoaXMuY29sb3JNb2RlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcHMgPSBwLnJhd1ZhbHVlLmdldENvbXBvbmVudHMocGlja2VkTW9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wc1tpbmRleF0gPSBzLnJhd1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihhcHBlbmRBbHBoYUNvbXBvbmVudChyZW1vdmVBbHBoYUNvbXBvbmVudChjb21wcyksIGNvbXBzWzNdKSwgcGlja2VkTW9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBjY3M7XG4gICAgICAgIH1cbiAgICAgICAgb25Nb2RlU2VsZWN0Q2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0RWxlbSA9IGV2LmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgICAgICB0aGlzLmNvbG9yTW9kZS5yYXdWYWx1ZSA9IHNlbGVjdEVsZW0udmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNjc18gPSB0aGlzLmNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXJzXyh0aGlzLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50KTtcbiAgICAgICAgICAgIHRoaXMudmlldy50ZXh0Vmlld3MgPSBbXG4gICAgICAgICAgICAgICAgdGhpcy5jY3NfWzBdLnZpZXcsXG4gICAgICAgICAgICAgICAgdGhpcy5jY3NfWzFdLnZpZXcsXG4gICAgICAgICAgICAgICAgdGhpcy5jY3NfWzJdLnZpZXcsXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDggPSBDbGFzc05hbWUoJ2hwbCcpO1xuICAgIGNsYXNzIEhQYWxldHRlVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VfID0gdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZFRhYkluZGV4KHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBjb2xvckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb2xvckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOCgnYycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb2xvckVsZW0pO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOCgnbScpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgW2hdID0gYy5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JUb0Z1bmN0aW9uYWxSZ2JTdHJpbmcobmV3IENvbG9yKFtoLCAxMDAsIDEwMF0sICdoc3YnKSk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gbWFwUmFuZ2UoaCwgMCwgMzYwLCAwLCAxMDApO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7bGVmdH0lYDtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgSFBhbGV0dGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEb3duXyA9IHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbktleVVwXyA9IHRoaXMub25LZXlVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93bl8gPSB0aGlzLm9uUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVfID0gdGhpcy5vblBvaW50ZXJNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBIUGFsZXR0ZVZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25LZXlVcF8pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVBvaW50ZXJFdmVudF8oZCwgb3B0cykge1xuICAgICAgICAgICAgaWYgKCFkLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaHVlID0gbWFwUmFuZ2UoY29uc3RyYWluUmFuZ2UoZC5wb2ludC54LCAwLCBkLmJvdW5kcy53aWR0aCksIDAsIGQuYm91bmRzLndpZHRoLCAwLCAzNTkpO1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbLCBzLCB2LCBhXSA9IGMuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBDb2xvcihbaHVlLCBzLCB2LCBhXSwgJ2hzdicpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaCwgcywgdiwgYV0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2ggKyBzdGVwLCBzLCB2LCBhXSwgJ2hzdicpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleShnZXRCYXNlU3RlcEZvckNvbG9yKGZhbHNlKSwgZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkNyA9IENsYXNzTmFtZSgnc3ZwJyk7XG4gICAgY29uc3QgQ0FOVkFTX1JFU09MID0gNjQ7XG4gICAgY2xhc3MgU3ZQYWxldHRlVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VfID0gdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNygpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZFRhYkluZGV4KHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBjYW52YXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgY2FudmFzRWxlbS5oZWlnaHQgPSBDQU5WQVNfUkVTT0w7XG4gICAgICAgICAgICBjYW52YXNFbGVtLndpZHRoID0gQ0FOVkFTX1JFU09MO1xuICAgICAgICAgICAgY2FudmFzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ3KCdjJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNhbnZhc0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5jYW52YXNFbGVtZW50ID0gY2FudmFzRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtYXJrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDcoJ20nKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya2VyRWxlbSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fID0gbWFya2VyRWxlbTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSBnZXRDYW52YXNDb250ZXh0KHRoaXMuY2FudmFzRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIWN0eCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaHN2Q29tcHMgPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNhbnZhc0VsZW1lbnQud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmNhbnZhc0VsZW1lbnQuaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgaW1nRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gaW1nRGF0YS5kYXRhO1xuICAgICAgICAgICAgZm9yIChsZXQgaXkgPSAwOyBpeSA8IGhlaWdodDsgaXkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl4ID0gMDsgaXggPCB3aWR0aDsgaXgrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gbWFwUmFuZ2UoaXgsIDAsIHdpZHRoLCAwLCAxMDApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gbWFwUmFuZ2UoaXksIDAsIGhlaWdodCwgMTAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmdiQ29tcHMgPSBoc3ZUb1JnYihoc3ZDb21wc1swXSwgcywgdik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGkgPSAoaXkgKiB3aWR0aCArIGl4KSAqIDQ7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSByZ2JDb21wc1swXTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgMV0gPSByZ2JDb21wc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgMl0gPSByZ2JDb21wc1syXTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgM10gPSAyNTU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWdEYXRhLCAwLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBtYXBSYW5nZShoc3ZDb21wc1sxXSwgMCwgMTAwLCAwLCAxMDApO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7bGVmdH0lYDtcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IG1hcFJhbmdlKGhzdkNvbXBzWzJdLCAwLCAxMDAsIDEwMCwgMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLnRvcCA9IGAke3RvcH0lYDtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU3ZQYWxldHRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5RG93bl8gPSB0aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25LZXlVcF8gPSB0aGlzLm9uS2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgU3ZQYWxldHRlVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzYXR1cmF0aW9uID0gbWFwUmFuZ2UoZC5wb2ludC54LCAwLCBkLmJvdW5kcy53aWR0aCwgMCwgMTAwKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWFwUmFuZ2UoZC5wb2ludC55LCAwLCBkLmJvdW5kcy5oZWlnaHQsIDEwMCwgMCk7XG4gICAgICAgICAgICBjb25zdCBbaCwgLCAsIGFdID0gdGhpcy52YWx1ZS5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IENvbG9yKFtoLCBzYXR1cmF0aW9uLCB2YWx1ZSwgYV0sICdoc3YnKSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbktleURvd25fKGV2KSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJvd0tleShldi5rZXkpKSB7XG4gICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtoLCBzLCB2LCBhXSA9IHRoaXMudmFsdWUucmF3VmFsdWUuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICBjb25zdCBiYXNlU3RlcCA9IGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgZHMgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGNvbnN0IGR2ID0gZ2V0U3RlcEZvcktleShiYXNlU3RlcCwgZ2V0VmVydGljYWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKGRzID09PSAwICYmIGR2ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2gsIHMgKyBkcywgdiArIGR2LCBhXSwgJ2hzdicpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlU3RlcCA9IGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgZHMgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGNvbnN0IGR2ID0gZ2V0U3RlcEZvcktleShiYXNlU3RlcCwgZ2V0VmVydGljYWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKGRzID09PSAwICYmIGR2ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbG9yUGlja2VyQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5oUGFsZXR0ZUNfID0gbmV3IEhQYWxldHRlQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnN2UGFsZXR0ZUNfID0gbmV3IFN2UGFsZXR0ZUNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hbHBoYUljc18gPSBjb25maWcuc3VwcG9ydHNBbHBoYVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBwYWxldHRlOiBuZXcgQVBhbGV0dGVDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogbmV3IE51bWJlclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VTdGVwOiAwLjEsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogMC4wMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZU51bWJlckZvcm1hdHRlcigyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNyZWF0ZVZhbHVlKDAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50OiBuZXcgUmFuZ2VDb25zdHJhaW50KHsgbWluOiAwLCBtYXg6IDEgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5hbHBoYUljc18pIHtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiB0aGlzLmFscGhhSWNzXy50ZXh0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmb3J3YXJkOiAocCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAucmF3VmFsdWUuZ2V0Q29tcG9uZW50cygpWzNdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZDogKHAsIHMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gcC5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wc1szXSA9IHMucmF3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGNvbXBzLCBwLnJhd1ZhbHVlLm1vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50ZXh0Q18gPSBuZXcgQ29sb3JUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBDb2xvclBpY2tlclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgYWxwaGFWaWV3czogdGhpcy5hbHBoYUljc19cbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlOiB0aGlzLmFscGhhSWNzXy5wYWxldHRlLnZpZXcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmFscGhhSWNzXy50ZXh0LnZpZXcsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIGhQYWxldHRlVmlldzogdGhpcy5oUGFsZXR0ZUNfLnZpZXcsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogY29uZmlnLnN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICAgICAgc3ZQYWxldHRlVmlldzogdGhpcy5zdlBhbGV0dGVDXy52aWV3LFxuICAgICAgICAgICAgICAgIHRleHRWaWV3OiB0aGlzLnRleHRDXy52aWV3LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRleHRDb250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dENfO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDYgPSBDbGFzc05hbWUoJ2NvbHN3Jyk7XG4gICAgY2xhc3MgQ29sb3JTd2F0Y2hWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDYoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3Qgc3dhdGNoRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHN3YXRjaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNignc3cnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3dhdGNoRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnN3YXRjaEVsZW1fID0gc3dhdGNoRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDYoJ2InKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudCA9IGJ1dHRvbkVsZW07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zd2F0Y2hFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvclRvSGV4UmdiYVN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZUNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbG9yU3dhdGNoQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IENvbG9yU3dhdGNoVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBDb2xvckNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkJ1dHRvbkJsdXJfID0gdGhpcy5vbkJ1dHRvbkJsdXJfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQnV0dG9uQ2xpY2tfID0gdGhpcy5vbkJ1dHRvbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvcHVwQ2hpbGRCbHVyXyA9IHRoaXMub25Qb3B1cENoaWxkQmx1cl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8gPSB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8gPSBGb2xkYWJsZS5jcmVhdGUoY29uZmlnLmV4cGFuZGVkKTtcbiAgICAgICAgICAgIHRoaXMuc3dhdGNoQ18gPSBuZXcgQ29sb3JTd2F0Y2hDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSB0aGlzLnN3YXRjaENfLnZpZXcuYnV0dG9uRWxlbWVudDtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMub25CdXR0b25CbHVyXyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkJ1dHRvbkNsaWNrXyk7XG4gICAgICAgICAgICB0aGlzLnRleHRDXyA9IG5ldyBUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBwYXJzZXI6IGNvbmZpZy5wYXJzZXIsXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbmZpZy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IENvbG9yVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBmb2xkYWJsZTogdGhpcy5mb2xkYWJsZV8sXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBjb25maWcucGlja2VyTGF5b3V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuc3dhdGNoRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnN3YXRjaENfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnZpZXcudGV4dEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy50ZXh0Q18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucG9wQ18gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5waWNrZXJMYXlvdXQgPT09ICdwb3B1cCdcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgUG9wdXBDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyQyA9IG5ldyBDb2xvclBpY2tlckNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogY29uZmlnLnN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGlja2VyQy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfKTtcbiAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5waWNrZXJDXyA9IHBpY2tlckM7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucG9wQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnZpZXcuZWxlbWVudC5hcHBlbmRDaGlsZChwaWNrZXJDLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29ubmVjdFZhbHVlcyh7XG4gICAgICAgICAgICAgICAgICAgIHByaW1hcnk6IHRoaXMuZm9sZGFibGVfLnZhbHVlKCdleHBhbmRlZCcpLFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IHRoaXMucG9wQ18uc2hvd3MsXG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IChwKSA9PiBwLnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZDogKF8sIHMpID0+IHMucmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZpZXcucGlja2VyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5waWNrZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucGlja2VyQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBiaW5kRm9sZGFibGUodGhpcy5mb2xkYWJsZV8sIHRoaXMudmlldy5waWNrZXJFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXQgdGV4dENvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0Q187XG4gICAgICAgIH1cbiAgICAgICAgb25CdXR0b25CbHVyXyhlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy52aWV3LmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0ID0gZm9yY2VDYXN0KGUucmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgICBpZiAoIW5leHRUYXJnZXQgfHwgIWVsZW0uY29udGFpbnMobmV4dFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25CdXR0b25DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXy5zZXQoJ2V4cGFuZGVkJywgIXRoaXMuZm9sZGFibGVfLmdldCgnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5mb2xkYWJsZV8uZ2V0KCdleHBhbmRlZCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJDXy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25Qb3B1cENoaWxkQmx1cl8oZXYpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnBvcENfLnZpZXcuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUYXJnZXQgPSBmaW5kTmV4dFRhcmdldChldik7XG4gICAgICAgICAgICBpZiAobmV4dFRhcmdldCAmJiBlbGVtLmNvbnRhaW5zKG5leHRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHRUYXJnZXQgJiZcbiAgICAgICAgICAgICAgICBuZXh0VGFyZ2V0ID09PSB0aGlzLnN3YXRjaENfLnZpZXcuYnV0dG9uRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICFzdXBwb3J0c1RvdWNoKGVsZW0ub3duZXJEb2N1bWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb3B1cENoaWxkS2V5ZG93bl8oZXYpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy5waWNrZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zd2F0Y2hDXy52aWV3LmJ1dHRvbkVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb2xvckZyb21PYmplY3QodmFsdWUpIHtcbiAgICAgICAgaWYgKENvbG9yLmlzQ29sb3JPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3IuZnJvbU9iamVjdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENvbG9yLmJsYWNrKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9SZ2JOdW1iZXIodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHJlbW92ZUFscGhhQ29tcG9uZW50KHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicpKS5yZWR1Y2UoKHJlc3VsdCwgY29tcCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgPDwgOCkgfCAoTWF0aC5mbG9vcihjb21wKSAmIDB4ZmYpO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb1JnYmFOdW1iZXIodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKS5yZWR1Y2UoKHJlc3VsdCwgY29tcCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhleCA9IE1hdGguZmxvb3IoaW5kZXggPT09IDMgPyBjb21wICogMjU1IDogY29tcCkgJiAweGZmO1xuICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgPDwgOCkgfCBoZXg7XG4gICAgICAgIH0sIDApID4+PiAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbnVtYmVyVG9SZ2JDb2xvcihudW0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbKG51bSA+PiAxNikgJiAweGZmLCAobnVtID4+IDgpICYgMHhmZiwgbnVtICYgMHhmZl0sICdyZ2InKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbnVtYmVyVG9SZ2JhQ29sb3IobnVtKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IoW1xuICAgICAgICAgICAgKG51bSA+PiAyNCkgJiAweGZmLFxuICAgICAgICAgICAgKG51bSA+PiAxNikgJiAweGZmLFxuICAgICAgICAgICAgKG51bSA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgICBtYXBSYW5nZShudW0gJiAweGZmLCAwLCAyNTUsIDAsIDEpLFxuICAgICAgICBdLCAncmdiJyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yRnJvbVJnYk51bWJlcih2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIENvbG9yLmJsYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlclRvUmdiQ29sb3IodmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvckZyb21SZ2JhTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3IuYmxhY2soKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyVG9SZ2JhQ29sb3IodmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbG9yU3RyaW5nV3JpdGVyKG5vdGF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ2lmeSA9IGdldENvbG9yU3RyaW5naWZpZXIobm90YXRpb24pO1xuICAgICAgICByZXR1cm4gKHRhcmdldCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIHdyaXRlUHJpbWl0aXZlKHRhcmdldCwgc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbG9yTnVtYmVyV3JpdGVyKHN1cHBvcnRzQWxwaGEpIHtcbiAgICAgICAgY29uc3QgY29sb3JUb051bWJlciA9IHN1cHBvcnRzQWxwaGEgPyBjb2xvclRvUmdiYU51bWJlciA6IGNvbG9yVG9SZ2JOdW1iZXI7XG4gICAgICAgIHJldHVybiAodGFyZ2V0LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgd3JpdGVQcmltaXRpdmUodGFyZ2V0LCBjb2xvclRvTnVtYmVyKHZhbHVlKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUmdiYUNvbG9yT2JqZWN0KHRhcmdldCwgdmFsdWUpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gdmFsdWUudG9SZ2JhT2JqZWN0KCk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdyJywgb2JqLnIpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgnZycsIG9iai5nKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ2InLCBvYmouYik7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdhJywgb2JqLmEpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cml0ZVJnYkNvbG9yT2JqZWN0KHRhcmdldCwgdmFsdWUpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gdmFsdWUudG9SZ2JhT2JqZWN0KCk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdyJywgb2JqLnIpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgnZycsIG9iai5nKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ2InLCBvYmouYik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbG9yT2JqZWN0V3JpdGVyKHN1cHBvcnRzQWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRzQWxwaGEgPyB3cml0ZVJnYmFDb2xvck9iamVjdCA6IHdyaXRlUmdiQ29sb3JPYmplY3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hvdWxkU3VwcG9ydEFscGhhJDEoaW5wdXRQYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuICdhbHBoYScgaW4gaW5wdXRQYXJhbXMgJiYgaW5wdXRQYXJhbXMuYWxwaGEgPT09IHRydWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZvcm1hdHRlciQxKHN1cHBvcnRzQWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRzQWxwaGFcbiAgICAgICAgICAgID8gKHYpID0+IGNvbG9yVG9IZXhSZ2JhU3RyaW5nKHYsICcweCcpXG4gICAgICAgICAgICA6ICh2KSA9PiBjb2xvclRvSGV4UmdiU3RyaW5nKHYsICcweCcpO1xuICAgIH1cbiAgICBjb25zdCBOdW1iZXJDb2xvcklucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LWNvbG9yLW51bWJlcicsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISgndmlldycgaW4gcGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcmFtcy52aWV3ICE9PSAnY29sb3InKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUNvbG9ySW5wdXRQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG91bGRTdXBwb3J0QWxwaGEkMShhcmdzLnBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgPyBjb2xvckZyb21SZ2JhTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIDogY29sb3JGcm9tUmdiTnVtYmVyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVxdWFsczogQ29sb3IuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb2xvck51bWJlcldyaXRlcihzaG91bGRTdXBwb3J0QWxwaGEkMShhcmdzLnBhcmFtcykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRzQWxwaGEgPSBzaG91bGRTdXBwb3J0QWxwaGEkMShhcmdzLnBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9ICdleHBhbmRlZCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5leHBhbmRlZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHBpY2tlciA9ICdwaWNrZXInIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMucGlja2VyIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvckNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCAhPT0gbnVsbCAmJiBleHBhbmRlZCAhPT0gdm9pZCAwID8gZXhwYW5kZWQgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZUZvcm1hdHRlciQxKHN1cHBvcnRzQWxwaGEpLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogQ29tcG9zaXRlQ29sb3JQYXJzZXIsXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBwaWNrZXIgIT09IG51bGwgJiYgcGlja2VyICE9PSB2b2lkIDAgPyBwaWNrZXIgOiAncG9wdXAnLFxuICAgICAgICAgICAgICAgIHN1cHBvcnRzQWxwaGE6IHN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBzaG91bGRTdXBwb3J0QWxwaGEoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBDb2xvci5pc1JnYmFDb2xvck9iamVjdChpbml0aWFsVmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBPYmplY3RDb2xvcklucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LWNvbG9yLW9iamVjdCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICghQ29sb3IuaXNDb2xvck9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQ29sb3JJbnB1dFBhcmFtcyhwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gY29sb3JGcm9tT2JqZWN0LFxuICAgICAgICAgICAgZXF1YWxzOiBDb2xvci5lcXVhbHMsXG4gICAgICAgICAgICB3cml0ZXI6IChhcmdzKSA9PiBjcmVhdGVDb2xvck9iamVjdFdyaXRlcihzaG91bGRTdXBwb3J0QWxwaGEoYXJncy5pbml0aWFsVmFsdWUpKSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRzQWxwaGEgPSBDb2xvci5pc1JnYmFDb2xvck9iamVjdChhcmdzLmluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9ICdleHBhbmRlZCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5leHBhbmRlZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHBpY2tlciA9ICdwaWNrZXInIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMucGlja2VyIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc3VwcG9ydHNBbHBoYVxuICAgICAgICAgICAgICAgID8gY29sb3JUb0hleFJnYmFTdHJpbmdcbiAgICAgICAgICAgICAgICA6IGNvbG9yVG9IZXhSZ2JTdHJpbmc7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkICE9PSBudWxsICYmIGV4cGFuZGVkICE9PSB2b2lkIDAgPyBleHBhbmRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogQ29tcG9zaXRlQ29sb3JQYXJzZXIsXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBwaWNrZXIgIT09IG51bGwgJiYgcGlja2VyICE9PSB2b2lkIDAgPyBwaWNrZXIgOiAncG9wdXAnLFxuICAgICAgICAgICAgICAgIHN1cHBvcnRzQWxwaGE6IHN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBTdHJpbmdDb2xvcklucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LWNvbG9yLXN0cmluZycsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoJ3ZpZXcnIGluIHBhcmFtcyAmJiBwYXJhbXMudmlldyA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBub3RhdGlvbiA9IGdldENvbG9yTm90YXRpb24odmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFub3RhdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VDb2xvcklucHV0UGFyYW1zKHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBjb2xvckZyb21TdHJpbmcsXG4gICAgICAgICAgICBlcXVhbHM6IENvbG9yLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3RhdGlvbiA9IGdldENvbG9yTm90YXRpb24oYXJncy5pbml0aWFsVmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICghbm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQ29sb3JTdHJpbmdXcml0ZXIobm90YXRpb24pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdGF0aW9uID0gZ2V0Q29sb3JOb3RhdGlvbihhcmdzLmluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoIW5vdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3RyaW5naWZpZXIgPSBnZXRDb2xvclN0cmluZ2lmaWVyKG5vdGF0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gJ2V4cGFuZGVkJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmV4cGFuZGVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gJ3BpY2tlcicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5waWNrZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkICE9PSBudWxsICYmIGV4cGFuZGVkICE9PSB2b2lkIDAgPyBleHBhbmRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogc3RyaW5naWZpZXIsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBDb21wb3NpdGVDb2xvclBhcnNlcixcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IHBpY2tlciAhPT0gbnVsbCAmJiBwaWNrZXIgIT09IHZvaWQgMCA/IHBpY2tlciA6ICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogaGFzQWxwaGFDb21wb25lbnQobm90YXRpb24pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgUG9pbnROZENvbnN0cmFpbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50cyA9IGNvbmZpZy5jb21wb25lbnRzO1xuICAgICAgICAgICAgdGhpcy5hc21fID0gY29uZmlnLmFzc2VtYmx5O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY29tcHMgPSB0aGlzLmFzbV9cbiAgICAgICAgICAgICAgICAudG9Db21wb25lbnRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNvbXAsIGluZGV4KSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLmNvbXBvbmVudHNbaW5kZXhdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29uc3RyYWluKGNvbXApKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBjb21wOyB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzbV8uZnJvbUNvbXBvbmVudHMoY29tcHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDUgPSBDbGFzc05hbWUoJ3BuZHR4dCcpO1xuICAgIGNsYXNzIFBvaW50TmRUZXh0VmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3cyA9IGNvbmZpZy50ZXh0Vmlld3M7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNSgpKTtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBheGlzRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBheGlzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ1KCdhJykpO1xuICAgICAgICAgICAgICAgIGF4aXNFbGVtLmFwcGVuZENoaWxkKHYuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGF4aXNFbGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQXhpc0NvbnRyb2xsZXIoZG9jLCBjb25maWcsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBuZXcgTnVtYmVyVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICBhcnJheVBvc2l0aW9uOiBpbmRleCA9PT0gMCA/ICdmc3QnIDogaW5kZXggPT09IGNvbmZpZy5heGVzLmxlbmd0aCAtIDEgPyAnbHN0JyA6ICdtaWQnLFxuICAgICAgICAgICAgYmFzZVN0ZXA6IGNvbmZpZy5heGVzW2luZGV4XS5iYXNlU3RlcCxcbiAgICAgICAgICAgIHBhcnNlcjogY29uZmlnLnBhcnNlcixcbiAgICAgICAgICAgIHByb3BzOiBjb25maWcuYXhlc1tpbmRleF0udGV4dFByb3BzLFxuICAgICAgICAgICAgdmFsdWU6IGNyZWF0ZVZhbHVlKDAsIHtcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50OiBjb25maWcuYXhlc1tpbmRleF0uY29uc3RyYWludCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xhc3MgUG9pbnROZFRleHRDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmFjc18gPSBjb25maWcuYXhlcy5tYXAoKF8sIGluZGV4KSA9PiBjcmVhdGVBeGlzQ29udHJvbGxlcihkb2MsIGNvbmZpZywgaW5kZXgpKTtcbiAgICAgICAgICAgIHRoaXMuYWNzXy5mb3JFYWNoKChjLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbm5lY3RWYWx1ZXMoe1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5OiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IGMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmFzc2VtYmx5LnRvQ29tcG9uZW50cyhwLnJhd1ZhbHVlKVtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAocCwgcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcHMgPSBjb25maWcuYXNzZW1ibHkudG9Db21wb25lbnRzKHAucmF3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcHNbaW5kZXhdID0gcy5yYXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuYXNzZW1ibHkuZnJvbUNvbXBvbmVudHMoY29tcHMpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgUG9pbnROZFRleHRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHRleHRWaWV3czogdGhpcy5hY3NfLm1hcCgoYWMpID0+IGFjLnZpZXcpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVTdGVwQ29uc3RyYWludChwYXJhbXMpIHtcbiAgICAgICAgaWYgKCdzdGVwJyBpbiBwYXJhbXMgJiYgIWlzRW1wdHkocGFyYW1zLnN0ZXApKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0ZXBDb25zdHJhaW50KHBhcmFtcy5zdGVwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUmFuZ2VDb25zdHJhaW50KHBhcmFtcykge1xuICAgICAgICBpZiAoKCdtYXgnIGluIHBhcmFtcyAmJiAhaXNFbXB0eShwYXJhbXMubWF4KSkgfHxcbiAgICAgICAgICAgICgnbWluJyBpbiBwYXJhbXMgJiYgIWlzRW1wdHkocGFyYW1zLm1pbikpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlQ29uc3RyYWludCh7XG4gICAgICAgICAgICAgICAgbWF4OiBwYXJhbXMubWF4LFxuICAgICAgICAgICAgICAgIG1pbjogcGFyYW1zLm1pbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDQocGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG4gICAgICAgIGNvbnN0IHNjID0gY3JlYXRlU3RlcENvbnN0cmFpbnQocGFyYW1zKTtcbiAgICAgICAgaWYgKHNjKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHNjKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYyA9IGNyZWF0ZVJhbmdlQ29uc3RyYWludChwYXJhbXMpO1xuICAgICAgICBpZiAocmMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gocmMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxjID0gY3JlYXRlTGlzdENvbnN0cmFpbnQocGFyYW1zLm9wdGlvbnMpO1xuICAgICAgICBpZiAobGMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRSYW5nZShjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdHJhaW50ID8gZmluZENvbnN0cmFpbnQoY29uc3RyYWludCwgUmFuZ2VDb25zdHJhaW50KSA6IG51bGw7XG4gICAgICAgIGlmICghYykge1xuICAgICAgICAgICAgcmV0dXJuIFt1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtjLm1pblZhbHVlLCBjLm1heFZhbHVlXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXN0aW1hdGVTdWl0YWJsZVJhbmdlKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IGZpbmRSYW5nZShjb25zdHJhaW50KTtcbiAgICAgICAgcmV0dXJuIFttaW4gIT09IG51bGwgJiYgbWluICE9PSB2b2lkIDAgPyBtaW4gOiAwLCBtYXggIT09IG51bGwgJiYgbWF4ICE9PSB2b2lkIDAgPyBtYXggOiAxMDBdO1xuICAgIH1cbiAgICBjb25zdCBOdW1iZXJJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1udW1iZXInLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHAub3B0aW9uYWwuZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgbWF4OiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICBtaW46IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlTGlzdE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIHN0ZXA6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBudW1iZXJGcm9tVW5rbm93bixcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IChhcmdzKSA9PiBjcmVhdGVDb25zdHJhaW50JDQoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUHJpbWl0aXZlLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBhcmdzLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICBpZiAoYyAmJiBmaW5kQ29uc3RyYWludChjLCBMaXN0Q29uc3RyYWludCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpc3RDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogKF9hID0gZmluZExpc3RJdGVtcyhjKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSAoX2IgPSAoJ2Zvcm1hdCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5mb3JtYXQgOiB1bmRlZmluZWQpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzKGMsIHZhbHVlLnJhd1ZhbHVlKSk7XG4gICAgICAgICAgICBpZiAoYyAmJiBmaW5kQ29uc3RyYWludChjLCBSYW5nZUNvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IGVzdGltYXRlU3VpdGFibGVSYW5nZShjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNsaWRlclRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwKGMpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBzbGlkZXJQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZTogbWF4LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluVmFsdWU6IG1pbixcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRleHRQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiBnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUoYywgdmFsdWUucmF3VmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IE51bWJlclRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBiYXNlU3RlcDogZ2V0QmFzZVN0ZXAoYyksXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjLCB2YWx1ZS5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIFBvaW50MmQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDApIHtcbiAgICAgICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICB9XG4gICAgICAgIGdldENvbXBvbmVudHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMueCwgdGhpcy55XTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShvYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeCA9IG9iai54O1xuICAgICAgICAgICAgY29uc3QgeSA9IG9iai55O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgeSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZXF1YWxzKHYxLCB2Mikge1xuICAgICAgICAgICAgcmV0dXJuIHYxLnggPT09IHYyLnggJiYgdjEueSA9PT0gdjIueTtcbiAgICAgICAgfVxuICAgICAgICB0b09iamVjdCgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeDogdGhpcy54LFxuICAgICAgICAgICAgICAgIHk6IHRoaXMueSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgUG9pbnQyZEFzc2VtYmx5ID0ge1xuICAgICAgICB0b0NvbXBvbmVudHM6IChwKSA9PiBwLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgZnJvbUNvbXBvbmVudHM6IChjb21wcykgPT4gbmV3IFBvaW50MmQoLi4uY29tcHMpLFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkNCA9IENsYXNzTmFtZSgncDJkJyk7XG4gICAgY2xhc3MgUG9pbnQyZFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDQoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgYmluZFZhbHVlKGNvbmZpZy5leHBhbmRlZCwgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSQ0KHVuZGVmaW5lZCwgJ2V4cGFuZGVkJykpKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaGVhZEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNCgnaCcpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChoZWFkRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ0KCdiJykpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5hcHBlbmRDaGlsZChjcmVhdGVTdmdJY29uRWxlbWVudChkb2MsICdwMmRwYWQnKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGV4dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNCgndCcpKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKHRleHRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudGV4dEVsZW1lbnQgPSB0ZXh0RWxlbTtcbiAgICAgICAgICAgIGlmIChjb25maWcucGlja2VyTGF5b3V0ID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpY2tlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgcGlja2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ0KCdwJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChwaWNrZXJFbGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckVsZW1lbnQgPSBwaWNrZXJFbGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQzID0gQ2xhc3NOYW1lKCdwMmRwJyk7XG4gICAgY2xhc3MgUG9pbnQyZFBpY2tlclZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkZvbGRhYmxlQ2hhbmdlXyA9IHRoaXMub25Gb2xkYWJsZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmludmVydHNZXyA9IGNvbmZpZy5pbnZlcnRzWTtcbiAgICAgICAgICAgIHRoaXMubWF4VmFsdWVfID0gY29uZmlnLm1heFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoKSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmxheW91dCA9PT0gJ3BvcHVwJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKHVuZGVmaW5lZCwgJ3AnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYWRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgcGFkRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKCdwJykpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgocGFkRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQocGFkRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnBhZEVsZW1lbnQgPSBwYWRFbGVtO1xuICAgICAgICAgICAgY29uc3Qgc3ZnRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnc3ZnJyk7XG4gICAgICAgICAgICBzdmdFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ2cnKSk7XG4gICAgICAgICAgICB0aGlzLnBhZEVsZW1lbnQuYXBwZW5kQ2hpbGQoc3ZnRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fID0gc3ZnRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHhBeGlzRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnbGluZScpO1xuICAgICAgICAgICAgeEF4aXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ2F4JykpO1xuICAgICAgICAgICAgeEF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MScsICcwJyk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kxJywgJzUwJScpO1xuICAgICAgICAgICAgeEF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MicsICcxMDAlJyk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kyJywgJzUwJScpO1xuICAgICAgICAgICAgdGhpcy5zdmdFbGVtXy5hcHBlbmRDaGlsZCh4QXhpc0VsZW0pO1xuICAgICAgICAgICAgY29uc3QgeUF4aXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdsaW5lJyk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnYXgnKSk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gxJywgJzUwJScpO1xuICAgICAgICAgICAgeUF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MScsICcwJyk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gyJywgJzUwJScpO1xuICAgICAgICAgICAgeUF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MicsICcxMDAlJyk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fLmFwcGVuZENoaWxkKHlBeGlzRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBsaW5lRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnbGluZScpO1xuICAgICAgICAgICAgbGluZUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnbCcpKTtcbiAgICAgICAgICAgIGxpbmVFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MScsICc1MCUnKTtcbiAgICAgICAgICAgIGxpbmVFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MScsICc1MCUnKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8uYXBwZW5kQ2hpbGQobGluZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5saW5lRWxlbV8gPSBsaW5lRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtYXJrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ20nKSk7XG4gICAgICAgICAgICB0aGlzLnBhZEVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya2VyRWxlbSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fID0gbWFya2VyRWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgYWxsRm9jdXNhYmxlRWxlbWVudHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMucGFkRWxlbWVudF07XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IFt4LCB5XSA9IHRoaXMudmFsdWUucmF3VmFsdWUuZ2V0Q29tcG9uZW50cygpO1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZV87XG4gICAgICAgICAgICBjb25zdCBweCA9IG1hcFJhbmdlKHgsIC1tYXgsICttYXgsIDAsIDEwMCk7XG4gICAgICAgICAgICBjb25zdCBweSA9IG1hcFJhbmdlKHksIC1tYXgsICttYXgsIDAsIDEwMCk7XG4gICAgICAgICAgICBjb25zdCBpcHkgPSB0aGlzLmludmVydHNZXyA/IDEwMCAtIHB5IDogcHk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDInLCBgJHtweH0lYCk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTInLCBgJHtpcHl9JWApO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7cHh9JWA7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLnRvcCA9IGAke2lweX0lYDtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIG9uRm9sZGFibGVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0KGV2LCBiYXNlU3RlcHMsIGludmVydHNZKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwc1swXSwgZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSksXG4gICAgICAgICAgICBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwc1sxXSwgZ2V0VmVydGljYWxTdGVwS2V5cyhldikpICogKGludmVydHNZID8gMSA6IC0xKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgY2xhc3MgUG9pbnQyZFBpY2tlckNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblBhZEtleURvd25fID0gdGhpcy5vblBhZEtleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFkS2V5VXBfID0gdGhpcy5vblBhZEtleVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZV8gPSB0aGlzLm9uUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5iYXNlU3RlcHNfID0gY29uZmlnLmJhc2VTdGVwcztcbiAgICAgICAgICAgIHRoaXMubWF4VmFsdWVfID0gY29uZmlnLm1heFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5pbnZlcnRzWV8gPSBjb25maWcuaW52ZXJ0c1k7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgUG9pbnQyZFBpY2tlclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgaW52ZXJ0c1k6IHRoaXMuaW52ZXJ0c1lfLFxuICAgICAgICAgICAgICAgIGxheW91dDogY29uZmlnLmxheW91dCxcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZTogdGhpcy5tYXhWYWx1ZV8sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy5wYWRFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnBhZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25QYWRLZXlEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcucGFkRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25QYWRLZXlVcF8pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVBvaW50ZXJFdmVudF8oZCwgb3B0cykge1xuICAgICAgICAgICAgaWYgKCFkLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZV87XG4gICAgICAgICAgICBjb25zdCBweCA9IG1hcFJhbmdlKGQucG9pbnQueCwgMCwgZC5ib3VuZHMud2lkdGgsIC1tYXgsICttYXgpO1xuICAgICAgICAgICAgY29uc3QgcHkgPSBtYXBSYW5nZSh0aGlzLmludmVydHNZXyA/IGQuYm91bmRzLmhlaWdodCAtIGQucG9pbnQueSA6IGQucG9pbnQueSwgMCwgZC5ib3VuZHMuaGVpZ2h0LCAtbWF4LCArbWF4KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IFBvaW50MmQocHgsIHB5KSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZEtleURvd25fKGV2KSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJvd0tleShldi5rZXkpKSB7XG4gICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtkeCwgZHldID0gY29tcHV0ZU9mZnNldChldiwgdGhpcy5iYXNlU3RlcHNfLCB0aGlzLmludmVydHNZXyk7XG4gICAgICAgICAgICBpZiAoZHggPT09IDAgJiYgZHkgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBQb2ludDJkKHRoaXMudmFsdWUucmF3VmFsdWUueCArIGR4LCB0aGlzLnZhbHVlLnJhd1ZhbHVlLnkgKyBkeSksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25QYWRLZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IFtkeCwgZHldID0gY29tcHV0ZU9mZnNldChldiwgdGhpcy5iYXNlU3RlcHNfLCB0aGlzLmludmVydHNZXyk7XG4gICAgICAgICAgICBpZiAoZHggPT09IDAgJiYgZHkgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUG9pbnQyZENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHRoaXMub25Qb3B1cENoaWxkQmx1cl8gPSB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fID0gdGhpcy5vblBvcHVwQ2hpbGRLZXlkb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBhZEJ1dHRvbkJsdXJfID0gdGhpcy5vblBhZEJ1dHRvbkJsdXJfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFkQnV0dG9uQ2xpY2tfID0gdGhpcy5vblBhZEJ1dHRvbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfID0gRm9sZGFibGUuY3JlYXRlKGNvbmZpZy5leHBhbmRlZCk7XG4gICAgICAgICAgICB0aGlzLnBvcENfID1cbiAgICAgICAgICAgICAgICBjb25maWcucGlja2VyTGF5b3V0ID09PSAncG9wdXAnXG4gICAgICAgICAgICAgICAgICAgID8gbmV3IFBvcHVwQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHBhZEMgPSBuZXcgUG9pbnQyZFBpY2tlckNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYmFzZVN0ZXBzOiBbY29uZmlnLmF4ZXNbMF0uYmFzZVN0ZXAsIGNvbmZpZy5heGVzWzFdLmJhc2VTdGVwXSxcbiAgICAgICAgICAgICAgICBpbnZlcnRzWTogY29uZmlnLmludmVydHNZLFxuICAgICAgICAgICAgICAgIGxheW91dDogY29uZmlnLnBpY2tlckxheW91dCxcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZTogY29uZmlnLm1heFZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBhZEMudmlldy5hbGxGb2N1c2FibGVFbGVtZW50cy5mb3JFYWNoKChlbGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vblBvcHVwQ2hpbGRCbHVyXyk7XG4gICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vblBvcHVwQ2hpbGRLZXlkb3duXyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ18gPSBwYWRDO1xuICAgICAgICAgICAgdGhpcy50ZXh0Q18gPSBuZXcgUG9pbnROZFRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDJkQXNzZW1ibHksXG4gICAgICAgICAgICAgICAgYXhlczogY29uZmlnLmF4ZXMsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBQb2ludDJkVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogdGhpcy5mb2xkYWJsZV8udmFsdWUoJ2V4cGFuZGVkJyksXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBjb25maWcucGlja2VyTGF5b3V0LFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy50ZXh0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnRleHRDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgKF9hID0gdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vblBhZEJ1dHRvbkJsdXJfKTtcbiAgICAgICAgICAgIChfYiA9IHRoaXMudmlldy5idXR0b25FbGVtZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uUGFkQnV0dG9uQ2xpY2tfKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5wb3BDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9wQ18udmlldy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucGlja2VyQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy5mb2xkYWJsZV8udmFsdWUoJ2V4cGFuZGVkJyksXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeTogdGhpcy5wb3BDXy5zaG93cyxcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZDogKHApID0+IHAucmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAoXywgcykgPT4gcy5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy5waWNrZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LnBpY2tlckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5waWNrZXJDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJpbmRGb2xkYWJsZSh0aGlzLmZvbGRhYmxlXywgdGhpcy52aWV3LnBpY2tlckVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUGFkQnV0dG9uQmx1cl8oZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMudmlldy5lbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbmV4dFRhcmdldCA9IGZvcmNlQ2FzdChlLnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgICAgaWYgKCFuZXh0VGFyZ2V0IHx8ICFlbGVtLmNvbnRhaW5zKG5leHRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUGFkQnV0dG9uQ2xpY2tfKCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8uc2V0KCdleHBhbmRlZCcsICF0aGlzLmZvbGRhYmxlXy5nZXQoJ2V4cGFuZGVkJykpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9sZGFibGVfLmdldCgnZXhwYW5kZWQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyQ18udmlldy5hbGxGb2N1c2FibGVFbGVtZW50c1swXS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUG9wdXBDaGlsZEJsdXJfKGV2KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy5wb3BDXy52aWV3LmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0ID0gZmluZE5leHRUYXJnZXQoZXYpO1xuICAgICAgICAgICAgaWYgKG5leHRUYXJnZXQgJiYgZWxlbS5jb250YWlucyhuZXh0VGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0VGFyZ2V0ICYmXG4gICAgICAgICAgICAgICAgbmV4dFRhcmdldCA9PT0gdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAhc3VwcG9ydHNUb3VjaChlbGVtLm93bmVyRG9jdW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9wdXBDaGlsZEtleWRvd25fKGV2KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIGlmIChldi5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wQ18uc2hvd3MucmF3VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZpZXcucGlja2VyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChldi5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9pbnQyZEZyb21Vbmtub3duKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBQb2ludDJkLmlzT2JqZWN0KHZhbHVlKVxuICAgICAgICAgICAgPyBuZXcgUG9pbnQyZCh2YWx1ZS54LCB2YWx1ZS55KVxuICAgICAgICAgICAgOiBuZXcgUG9pbnQyZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cml0ZVBvaW50MmQodGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneCcsIHZhbHVlLngpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneScsIHZhbHVlLnkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMihwYXJhbXMpIHtcbiAgICAgICAgaWYgKCFwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcbiAgICAgICAgaWYgKCFpc0VtcHR5KHBhcmFtcy5zdGVwKSkge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChuZXcgU3RlcENvbnN0cmFpbnQocGFyYW1zLnN0ZXApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRW1wdHkocGFyYW1zLm1heCkgfHwgIWlzRW1wdHkocGFyYW1zLm1pbikpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobmV3IFJhbmdlQ29uc3RyYWludCh7XG4gICAgICAgICAgICAgICAgbWF4OiBwYXJhbXMubWF4LFxuICAgICAgICAgICAgICAgIG1pbjogcGFyYW1zLm1pbixcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUNvbnN0cmFpbnQoY29uc3RyYWludHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDMocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnROZENvbnN0cmFpbnQoe1xuICAgICAgICAgICAgYXNzZW1ibHk6IFBvaW50MmRBc3NlbWJseSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50JDIoJ3gnIGluIHBhcmFtcyA/IHBhcmFtcy54IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50JDIoJ3knIGluIHBhcmFtcyA/IHBhcmFtcy55IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdWl0YWJsZU1heERpbWVuc2lvblZhbHVlKGNvbnN0cmFpbnQsIHJhd1ZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHJjID0gY29uc3RyYWludCAmJiBmaW5kQ29uc3RyYWludChjb25zdHJhaW50LCBSYW5nZUNvbnN0cmFpbnQpO1xuICAgICAgICBpZiAocmMpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChNYXRoLmFicyhyYy5taW5WYWx1ZSB8fCAwKSwgTWF0aC5hYnMocmMubWF4VmFsdWUgfHwgMCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRCYXNlU3RlcChjb25zdHJhaW50KTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHN0ZXApICogMTAsIE1hdGguYWJzKHJhd1ZhbHVlKSAqIDEwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3VpdGFibGVNYXhWYWx1ZShpbml0aWFsVmFsdWUsIGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3QgeGMgPSBjb25zdHJhaW50IGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnRcbiAgICAgICAgICAgID8gY29uc3RyYWludC5jb21wb25lbnRzWzBdXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgeWMgPSBjb25zdHJhaW50IGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnRcbiAgICAgICAgICAgID8gY29uc3RyYWludC5jb21wb25lbnRzWzFdXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgeHIgPSBnZXRTdWl0YWJsZU1heERpbWVuc2lvblZhbHVlKHhjLCBpbml0aWFsVmFsdWUueCk7XG4gICAgICAgIGNvbnN0IHlyID0gZ2V0U3VpdGFibGVNYXhEaW1lbnNpb25WYWx1ZSh5YywgaW5pdGlhbFZhbHVlLnkpO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoeHIsIHlyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQXhpcyQyKGluaXRpYWxWYWx1ZSwgY29uc3RyYWludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpLFxuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIHRleHRQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSksXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZEludmVydFkocGFyYW1zKSB7XG4gICAgICAgIGlmICghKCd5JyBpbiBwYXJhbXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeVBhcmFtcyA9IHBhcmFtcy55O1xuICAgICAgICBpZiAoIXlQYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ2ludmVydGVkJyBpbiB5UGFyYW1zID8gISF5UGFyYW1zLmludmVydGVkIDogZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IFBvaW50MmRJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1wb2ludDJkJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFQb2ludDJkLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgICAgIHBpY2tlcjogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQaWNrZXJMYXlvdXQpLFxuICAgICAgICAgICAgICAgIHg6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMpLFxuICAgICAgICAgICAgICAgIHk6IHAub3B0aW9uYWwub2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgaW52ZXJ0ZWQ6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgbWF4OiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgbWluOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgc3RlcDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHBvaW50MmRGcm9tVW5rbm93bixcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IChhcmdzKSA9PiBjcmVhdGVDb25zdHJhaW50JDMoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgZXF1YWxzOiBQb2ludDJkLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVBvaW50MmQsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhcmdzLmRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGlmICghKGMgaW5zdGFuY2VvZiBQb2ludE5kQ29uc3RyYWludCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9ICdleHBhbmRlZCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5leHBhbmRlZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHBpY2tlciA9ICdwaWNrZXInIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMucGlja2VyIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludDJkQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBheGVzOiBbXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUF4aXMkMih2YWx1ZS5yYXdWYWx1ZS54LCBjLmNvbXBvbmVudHNbMF0pLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVBeGlzJDIodmFsdWUucmF3VmFsdWUueSwgYy5jb21wb25lbnRzWzFdKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCAhPT0gbnVsbCAmJiBleHBhbmRlZCAhPT0gdm9pZCAwID8gZXhwYW5kZWQgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbnZlcnRzWTogc2hvdWxkSW52ZXJ0WShhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICAgICAgbWF4VmFsdWU6IGdldFN1aXRhYmxlTWF4VmFsdWUodmFsdWUucmF3VmFsdWUsIGMpLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBwaWNrZXIgIT09IG51bGwgJiYgcGlja2VyICE9PSB2b2lkIDAgPyBwaWNrZXIgOiAncG9wdXAnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIFBvaW50M2Qge1xuICAgICAgICBjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHogPSAwKSB7XG4gICAgICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgICAgIHRoaXMueiA9IHo7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q29tcG9uZW50cygpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy54LCB0aGlzLnksIHRoaXMuel07XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzT2JqZWN0KG9iaikge1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkob2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHggPSBvYmoueDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBvYmoueTtcbiAgICAgICAgICAgIGNvbnN0IHogPSBvYmouejtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgeSAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgeiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZXF1YWxzKHYxLCB2Mikge1xuICAgICAgICAgICAgcmV0dXJuIHYxLnggPT09IHYyLnggJiYgdjEueSA9PT0gdjIueSAmJiB2MS56ID09PSB2Mi56O1xuICAgICAgICB9XG4gICAgICAgIHRvT2JqZWN0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICAgICAgeTogdGhpcy55LFxuICAgICAgICAgICAgICAgIHo6IHRoaXMueixcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgUG9pbnQzZEFzc2VtYmx5ID0ge1xuICAgICAgICB0b0NvbXBvbmVudHM6IChwKSA9PiBwLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgZnJvbUNvbXBvbmVudHM6IChjb21wcykgPT4gbmV3IFBvaW50M2QoLi4uY29tcHMpLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwb2ludDNkRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFBvaW50M2QuaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICA/IG5ldyBQb2ludDNkKHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopXG4gICAgICAgICAgICA6IG5ldyBQb2ludDNkKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUG9pbnQzZCh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd4JywgdmFsdWUueCk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd5JywgdmFsdWUueSk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd6JywgdmFsdWUueik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCQxKHBhcmFtcykge1xuICAgICAgICBpZiAoIXBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBpZiAoIWlzRW1wdHkocGFyYW1zLnN0ZXApKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKG5ldyBTdGVwQ29uc3RyYWludChwYXJhbXMuc3RlcCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbXB0eShwYXJhbXMubWF4KSB8fCAhaXNFbXB0eShwYXJhbXMubWluKSkge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChuZXcgUmFuZ2VDb25zdHJhaW50KHtcbiAgICAgICAgICAgICAgICBtYXg6IHBhcmFtcy5tYXgsXG4gICAgICAgICAgICAgICAgbWluOiBwYXJhbXMubWluLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQkMihwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kQ29uc3RyYWludCh7XG4gICAgICAgICAgICBhc3NlbWJseTogUG9pbnQzZEFzc2VtYmx5LFxuICAgICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMSgneCcgaW4gcGFyYW1zID8gcGFyYW1zLnggOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMSgneScgaW4gcGFyYW1zID8gcGFyYW1zLnkgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMSgneicgaW4gcGFyYW1zID8gcGFyYW1zLnogOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUF4aXMkMShpbml0aWFsVmFsdWUsIGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJhc2VTdGVwOiBnZXRCYXNlU3RlcChjb25zdHJhaW50KSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbnN0cmFpbnQsXG4gICAgICAgICAgICB0ZXh0UHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKGdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBQb2ludDNkSW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtcG9pbnQzZCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICghUG9pbnQzZC5pc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgeDogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgeTogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgejogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHBvaW50M2RGcm9tVW5rbm93bixcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IChhcmdzKSA9PiBjcmVhdGVDb25zdHJhaW50JDIoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgZXF1YWxzOiBQb2ludDNkLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVBvaW50M2QsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKCEoYyBpbnN0YW5jZW9mIFBvaW50TmRDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnROZFRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBhc3NlbWJseTogUG9pbnQzZEFzc2VtYmx5LFxuICAgICAgICAgICAgICAgIGF4ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXhpcyQxKHZhbHVlLnJhd1ZhbHVlLngsIGMuY29tcG9uZW50c1swXSksXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUF4aXMkMSh2YWx1ZS5yYXdWYWx1ZS55LCBjLmNvbXBvbmVudHNbMV0pLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVBeGlzJDEodmFsdWUucmF3VmFsdWUueiwgYy5jb21wb25lbnRzWzJdKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgUG9pbnQ0ZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCwgeiA9IDAsIHcgPSAwKSB7XG4gICAgICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgICAgIHRoaXMueiA9IHo7XG4gICAgICAgICAgICB0aGlzLncgPSB3O1xuICAgICAgICB9XG4gICAgICAgIGdldENvbXBvbmVudHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMud107XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzT2JqZWN0KG9iaikge1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkob2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHggPSBvYmoueDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBvYmoueTtcbiAgICAgICAgICAgIGNvbnN0IHogPSBvYmouejtcbiAgICAgICAgICAgIGNvbnN0IHcgPSBvYmoudztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgeSAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgeiAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgdyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZXF1YWxzKHYxLCB2Mikge1xuICAgICAgICAgICAgcmV0dXJuIHYxLnggPT09IHYyLnggJiYgdjEueSA9PT0gdjIueSAmJiB2MS56ID09PSB2Mi56ICYmIHYxLncgPT09IHYyLnc7XG4gICAgICAgIH1cbiAgICAgICAgdG9PYmplY3QoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHg6IHRoaXMueCxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICAgICAgejogdGhpcy56LFxuICAgICAgICAgICAgICAgIHc6IHRoaXMudyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgUG9pbnQ0ZEFzc2VtYmx5ID0ge1xuICAgICAgICB0b0NvbXBvbmVudHM6IChwKSA9PiBwLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgZnJvbUNvbXBvbmVudHM6IChjb21wcykgPT4gbmV3IFBvaW50NGQoLi4uY29tcHMpLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwb2ludDRkRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFBvaW50NGQuaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICA/IG5ldyBQb2ludDRkKHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpXG4gICAgICAgICAgICA6IG5ldyBQb2ludDRkKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUG9pbnQ0ZCh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd4JywgdmFsdWUueCk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd5JywgdmFsdWUueSk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd6JywgdmFsdWUueik7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd3JywgdmFsdWUudyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludChwYXJhbXMpIHtcbiAgICAgICAgaWYgKCFwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcbiAgICAgICAgaWYgKCFpc0VtcHR5KHBhcmFtcy5zdGVwKSkge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChuZXcgU3RlcENvbnN0cmFpbnQocGFyYW1zLnN0ZXApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRW1wdHkocGFyYW1zLm1heCkgfHwgIWlzRW1wdHkocGFyYW1zLm1pbikpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobmV3IFJhbmdlQ29uc3RyYWludCh7XG4gICAgICAgICAgICAgICAgbWF4OiBwYXJhbXMubWF4LFxuICAgICAgICAgICAgICAgIG1pbjogcGFyYW1zLm1pbixcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUNvbnN0cmFpbnQoY29uc3RyYWludHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDEocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnROZENvbnN0cmFpbnQoe1xuICAgICAgICAgICAgYXNzZW1ibHk6IFBvaW50NGRBc3NlbWJseSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd4JyBpbiBwYXJhbXMgPyBwYXJhbXMueCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgneScgaW4gcGFyYW1zID8gcGFyYW1zLnkgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3onIGluIHBhcmFtcyA/IHBhcmFtcy56IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd3JyBpbiBwYXJhbXMgPyBwYXJhbXMudyA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQXhpcyhpbml0aWFsVmFsdWUsIGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJhc2VTdGVwOiBnZXRCYXNlU3RlcChjb25zdHJhaW50KSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbnN0cmFpbnQsXG4gICAgICAgICAgICB0ZXh0UHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKGdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBQb2ludDRkSW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtcG9pbnQ0ZCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICghUG9pbnQ0ZC5pc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgeDogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgeTogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgejogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgdzogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHBvaW50NGRGcm9tVW5rbm93bixcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IChhcmdzKSA9PiBjcmVhdGVDb25zdHJhaW50JDEoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgZXF1YWxzOiBQb2ludDRkLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVBvaW50NGQsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKCEoYyBpbnN0YW5jZW9mIFBvaW50TmRDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnROZFRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBhc3NlbWJseTogUG9pbnQ0ZEFzc2VtYmx5LFxuICAgICAgICAgICAgICAgIGF4ZXM6IHZhbHVlLnJhd1ZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC5nZXRDb21wb25lbnRzKClcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29tcCwgaW5kZXgpID0+IGNyZWF0ZUF4aXMoY29tcCwgYy5jb21wb25lbnRzW2luZGV4XSkpLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludChwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcbiAgICAgICAgY29uc3QgbGMgPSBjcmVhdGVMaXN0Q29uc3RyYWludChwYXJhbXMub3B0aW9ucyk7XG4gICAgICAgIGlmIChsYykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChsYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wb3NpdGVDb25zdHJhaW50KGNvbnN0cmFpbnRzKTtcbiAgICB9XG4gICAgY29uc3QgU3RyaW5nSW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtc3RyaW5nJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VMaXN0T3B0aW9ucyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHN0cmluZ0Zyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUHJpbWl0aXZlLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gYXJncy5kb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBhcmdzLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICBpZiAoYyAmJiBmaW5kQ29uc3RyYWludChjLCBMaXN0Q29uc3RyYWludCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpc3RDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiAoX2EgPSBmaW5kTGlzdEl0ZW1zKGMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgcGFyc2VyOiAodikgPT4gdixcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0U3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IENvbnN0YW50cyA9IHtcbiAgICAgICAgbW9uaXRvcjoge1xuICAgICAgICAgICAgZGVmYXVsdEludGVydmFsOiAyMDAsXG4gICAgICAgICAgICBkZWZhdWx0TGluZUNvdW50OiAzLFxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkMiA9IENsYXNzTmFtZSgnbWxsJyk7XG4gICAgY2xhc3MgTXVsdGlMb2dWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZVVwZGF0ZV8gPSB0aGlzLm9uVmFsdWVVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcl8gPSBjb25maWcuZm9ybWF0dGVyO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDIoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dGFyZWFFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgICAgICB0ZXh0YXJlYUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMignaScpKTtcbiAgICAgICAgICAgIHRleHRhcmVhRWxlbS5zdHlsZS5oZWlnaHQgPSBgY2FsYyh2YXIoLS1ibGQtdXMpICogJHtjb25maWcubGluZUNvdW50fSlgO1xuICAgICAgICAgICAgdGV4dGFyZWFFbGVtLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKHRleHRhcmVhRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGV4dGFyZWFFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudGV4dGFyZWFFbGVtXyA9IHRleHRhcmVhRWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVVcGRhdGVfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMudGV4dGFyZWFFbGVtXztcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNjcm9sbCA9IGVsZW0uc2Nyb2xsVG9wID09PSBlbGVtLnNjcm9sbEhlaWdodCAtIGVsZW0uY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKHRoaXMuZm9ybWF0dGVyXyh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxlbS50ZXh0Q29udGVudCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgICAgICAgIGVsZW0uc2Nyb2xsVG9wID0gZWxlbS5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZVVwZGF0ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIE11bHRpTG9nQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IE11bHRpTG9nVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbmZpZy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgbGluZUNvdW50OiBjb25maWcubGluZUNvdW50LFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQxID0gQ2xhc3NOYW1lKCdzZ2wnKTtcbiAgICBjbGFzcyBTaW5nbGVMb2dWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZVVwZGF0ZV8gPSB0aGlzLm9uVmFsdWVVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcl8gPSBjb25maWcuZm9ybWF0dGVyO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDEoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMSgnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5yZWFkT25seSA9IHRydWU7XG4gICAgICAgICAgICBpbnB1dEVsZW0udHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZVVwZGF0ZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgbGFzdFZhbHVlID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlID1cbiAgICAgICAgICAgICAgICBsYXN0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMuZm9ybWF0dGVyXyhsYXN0VmFsdWUpIDogJyc7XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZVVwZGF0ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNpbmdsZUxvZ0NvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBTaW5nbGVMb2dWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBCb29sZWFuTW9uaXRvclBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdtb25pdG9yLWJvb2wnLFxuICAgICAgICB0eXBlOiAnbW9uaXRvcicsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBib29sRnJvbVVua25vd24sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoYXJncy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IEJvb2xlYW5Gb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogQm9vbGVhbkZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IChfYSA9IGFyZ3MucGFyYW1zLmxpbmVDb3VudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogQ29uc3RhbnRzLm1vbml0b3IuZGVmYXVsdExpbmVDb3VudCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIEdyYXBoQ3Vyc29yIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5pbmRleF8gPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaW5kZXgoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleF87XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGluZGV4KGluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5pbmRleF8gIT09IGluZGV4O1xuICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4XyA9IGluZGV4O1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NOYW1lKCdncmwnKTtcbiAgICBjbGFzcyBHcmFwaExvZ1ZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkN1cnNvckNoYW5nZV8gPSB0aGlzLm9uQ3Vyc29yQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlVXBkYXRlXyA9IHRoaXMub25WYWx1ZVVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcl8gPSBjb25maWcuZm9ybWF0dGVyO1xuICAgICAgICAgICAgdGhpcy5taW5WYWx1ZV8gPSBjb25maWcubWluVmFsdWU7XG4gICAgICAgICAgICB0aGlzLm1heFZhbHVlXyA9IGNvbmZpZy5tYXhWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXyA9IGNvbmZpZy5jdXJzb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8uZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkN1cnNvckNoYW5nZV8pO1xuICAgICAgICAgICAgY29uc3Qgc3ZnRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnc3ZnJyk7XG4gICAgICAgICAgICBzdmdFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdnJykpO1xuICAgICAgICAgICAgc3ZnRWxlbS5zdHlsZS5oZWlnaHQgPSBgY2FsYyh2YXIoLS1ibGQtdXMpICogJHtjb25maWcubGluZUNvdW50fSlgO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHN2Z0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5zdmdFbGVtXyA9IHN2Z0VsZW07XG4gICAgICAgICAgICBjb25zdCBsaW5lRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAncG9seWxpbmUnKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8uYXBwZW5kQ2hpbGQobGluZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5saW5lRWxlbV8gPSBsaW5lRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ3QnKSwgQ2xhc3NOYW1lKCd0dCcpKCkpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRvb2x0aXBFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEVsZW1fID0gdG9vbHRpcEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlVXBkYXRlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGdyYXBoRWxlbWVudCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN2Z0VsZW1fO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBib3VuZHMgPSB0aGlzLnN2Z0VsZW1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgbWF4SW5kZXggPSB0aGlzLnZhbHVlLnJhd1ZhbHVlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pblZhbHVlXztcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4VmFsdWVfO1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gW107XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlLmZvckVhY2goKHYsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBtYXBSYW5nZShpbmRleCwgMCwgbWF4SW5kZXgsIDAsIGJvdW5kcy53aWR0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IG1hcFJhbmdlKHYsIG1pbiwgbWF4LCBib3VuZHMuaGVpZ2h0LCAwKTtcbiAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbeCwgeV0uam9pbignLCcpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5saW5lRWxlbV8uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3BvaW50cycsIHBvaW50cy5qb2luKCcgJykpO1xuICAgICAgICAgICAgY29uc3QgdG9vbHRpcEVsZW0gPSB0aGlzLnRvb2x0aXBFbGVtXztcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZS5yYXdWYWx1ZVt0aGlzLmN1cnNvcl8uaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0b29sdGlwRWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSgndCcsICdhJykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHR4ID0gbWFwUmFuZ2UodGhpcy5jdXJzb3JfLmluZGV4LCAwLCBtYXhJbmRleCwgMCwgYm91bmRzLndpZHRoKTtcbiAgICAgICAgICAgIGNvbnN0IHR5ID0gbWFwUmFuZ2UodmFsdWUsIG1pbiwgbWF4LCBib3VuZHMuaGVpZ2h0LCAwKTtcbiAgICAgICAgICAgIHRvb2x0aXBFbGVtLnN0eWxlLmxlZnQgPSBgJHt0eH1weGA7XG4gICAgICAgICAgICB0b29sdGlwRWxlbS5zdHlsZS50b3AgPSBgJHt0eX1weGA7XG4gICAgICAgICAgICB0b29sdGlwRWxlbS50ZXh0Q29udGVudCA9IGAke3RoaXMuZm9ybWF0dGVyXyh2YWx1ZSl9YDtcbiAgICAgICAgICAgIGlmICghdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSgndCcsICdhJykpKSB7XG4gICAgICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ3QnLCAnYScpLCBjbGFzc05hbWUoJ3QnLCAnaW4nKSk7XG4gICAgICAgICAgICAgICAgZm9yY2VSZWZsb3codG9vbHRpcEVsZW0pO1xuICAgICAgICAgICAgICAgIHRvb2x0aXBFbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKCd0JywgJ2luJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVVcGRhdGVfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25DdXJzb3JDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBHcmFwaExvZ0NvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoTW91c2VNb3ZlXyA9IHRoaXMub25HcmFwaE1vdXNlTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaE1vdXNlTGVhdmVfID0gdGhpcy5vbkdyYXBoTW91c2VMZWF2ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaFBvaW50ZXJEb3duXyA9IHRoaXMub25HcmFwaFBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoUG9pbnRlck1vdmVfID0gdGhpcy5vbkdyYXBoUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhQb2ludGVyVXBfID0gdGhpcy5vbkdyYXBoUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXyA9IG5ldyBHcmFwaEN1cnNvcigpO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IEdyYXBoTG9nVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHRoaXMuY3Vyc29yXyxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbmZpZy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgbGluZUNvdW50OiBjb25maWcubGluZUNvdW50LFxuICAgICAgICAgICAgICAgIG1heFZhbHVlOiBjb25maWcubWF4VmFsdWUsXG4gICAgICAgICAgICAgICAgbWluVmFsdWU6IGNvbmZpZy5taW5WYWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXN1cHBvcnRzVG91Y2goZG9jKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25HcmFwaE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLm9uR3JhcGhNb3VzZUxlYXZlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaCA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgcGguZW1pdHRlci5vbignZG93bicsIHRoaXMub25HcmFwaFBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICAgICAgcGguZW1pdHRlci5vbignbW92ZScsIHRoaXMub25HcmFwaFBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICAgICAgcGguZW1pdHRlci5vbigndXAnLCB0aGlzLm9uR3JhcGhQb2ludGVyVXBfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoTW91c2VMZWF2ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8uaW5kZXggPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoTW91c2VNb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy52aWV3LmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8uaW5kZXggPSBNYXRoLmZsb29yKG1hcFJhbmdlKGV2Lm9mZnNldFgsIDAsIGJvdW5kcy53aWR0aCwgMCwgdGhpcy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoUG9pbnRlckRvd25fKGV2KSB7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhQb2ludGVyTW92ZV8oZXYpO1xuICAgICAgICB9XG4gICAgICAgIG9uR3JhcGhQb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGlmICghZXYuZGF0YS5wb2ludCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5pbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5pbmRleCA9IE1hdGguZmxvb3IobWFwUmFuZ2UoZXYuZGF0YS5wb2ludC54LCAwLCBldi5kYXRhLmJvdW5kcy53aWR0aCwgMCwgdGhpcy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoUG9pbnRlclVwXygpIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5pbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ybWF0dGVyKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gJ2Zvcm1hdCcgaW4gcGFyYW1zICYmICFpc0VtcHR5KHBhcmFtcy5mb3JtYXQpXG4gICAgICAgICAgICA/IHBhcmFtcy5mb3JtYXRcbiAgICAgICAgICAgIDogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVUZXh0TW9uaXRvcihhcmdzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGFyZ3MudmFsdWUucmF3VmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlRm9ybWF0dGVyKGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVGb3JtYXR0ZXIoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgbGluZUNvdW50OiAoX2EgPSBhcmdzLnBhcmFtcy5saW5lQ291bnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IENvbnN0YW50cy5tb25pdG9yLmRlZmF1bHRMaW5lQ291bnQsXG4gICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVHcmFwaE1vbml0b3IoYXJncykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgcmV0dXJuIG5ldyBHcmFwaExvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVGb3JtYXR0ZXIoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgbGluZUNvdW50OiAoX2EgPSBhcmdzLnBhcmFtcy5saW5lQ291bnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IENvbnN0YW50cy5tb25pdG9yLmRlZmF1bHRMaW5lQ291bnQsXG4gICAgICAgICAgICBtYXhWYWx1ZTogKF9iID0gKCdtYXgnIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMubWF4IDogbnVsbCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDEwMCxcbiAgICAgICAgICAgIG1pblZhbHVlOiAoX2MgPSAoJ21pbicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5taW4gOiBudWxsKSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogMCxcbiAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZFNob3dHcmFwaChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuICd2aWV3JyBpbiBwYXJhbXMgJiYgcGFyYW1zLnZpZXcgPT09ICdncmFwaCc7XG4gICAgfVxuICAgIGNvbnN0IE51bWJlck1vbml0b3JQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnbW9uaXRvci1udW1iZXInLFxuICAgICAgICB0eXBlOiAnbW9uaXRvcicsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogcC5vcHRpb25hbC5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIG1heDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgbWluOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICB2aWV3OiBwLm9wdGlvbmFsLnN0cmluZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICBkZWZhdWx0QnVmZmVyU2l6ZTogKHBhcmFtcykgPT4gKHNob3VsZFNob3dHcmFwaChwYXJhbXMpID8gNjQgOiAxKSxcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBudW1iZXJGcm9tVW5rbm93bixcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRTaG93R3JhcGgoYXJncy5wYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUdyYXBoTW9uaXRvcihhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVUZXh0TW9uaXRvcihhcmdzKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgU3RyaW5nTW9uaXRvclBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdtb25pdG9yLXN0cmluZycsXG4gICAgICAgIHR5cGU6ICdtb25pdG9yJyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgbGluZUNvdW50OiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICBtdWx0aWxpbmU6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gc3RyaW5nRnJvbVVua25vd24sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBtdWx0aWxpbmUgPSB2YWx1ZS5yYXdWYWx1ZS5sZW5ndGggPiAxIHx8XG4gICAgICAgICAgICAgICAgKCdtdWx0aWxpbmUnIGluIGFyZ3MucGFyYW1zICYmIGFyZ3MucGFyYW1zLm11bHRpbGluZSk7XG4gICAgICAgICAgICBpZiAobXVsdGlsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdFN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50OiAoX2EgPSBhcmdzLnBhcmFtcy5saW5lQ291bnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IENvbnN0YW50cy5tb25pdG9yLmRlZmF1bHRMaW5lQ291bnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXRTdHJpbmcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgSW5wdXRCaW5kaW5nIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VfID0gdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5yZWFkZXIgPSBjb25maWcucmVhZGVyO1xuICAgICAgICAgICAgdGhpcy53cml0ZXIgPSBjb25maWcud3JpdGVyO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSBjb25maWcudGFyZ2V0O1xuICAgICAgICAgICAgdGhpcy5yZWFkKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGhpcy50YXJnZXQucmVhZCgpO1xuICAgICAgICAgICAgaWYgKHRhcmdldFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gdGhpcy5yZWFkZXIodGFyZ2V0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdyaXRlXyhyYXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy53cml0ZXIodGhpcy50YXJnZXQsIHJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXyhldikge1xuICAgICAgICAgICAgdGhpcy53cml0ZV8oZXYucmF3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBldi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHJhd1ZhbHVlOiBldi5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUlucHV0QmluZGluZ0NvbnRyb2xsZXIocGx1Z2luLCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBsdWdpbi5hY2NlcHQoYXJncy50YXJnZXQucmVhZCgpLCBhcmdzLnBhcmFtcyk7XG4gICAgICAgIGlmIChpc0VtcHR5KHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICBjb25zdCB2YWx1ZUFyZ3MgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IGFyZ3MudGFyZ2V0LFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiByZXN1bHQuaW5pdGlhbFZhbHVlLFxuICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQucGFyYW1zLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZWFkZXIgPSBwbHVnaW4uYmluZGluZy5yZWFkZXIodmFsdWVBcmdzKTtcbiAgICAgICAgY29uc3QgY29uc3RyYWludCA9IHBsdWdpbi5iaW5kaW5nLmNvbnN0cmFpbnRcbiAgICAgICAgICAgID8gcGx1Z2luLmJpbmRpbmcuY29uc3RyYWludCh2YWx1ZUFyZ3MpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjcmVhdGVWYWx1ZShyZWFkZXIocmVzdWx0LmluaXRpYWxWYWx1ZSksIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbnN0cmFpbnQsXG4gICAgICAgICAgICBlcXVhbHM6IHBsdWdpbi5iaW5kaW5nLmVxdWFscyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJpbmRpbmcgPSBuZXcgSW5wdXRCaW5kaW5nKHtcbiAgICAgICAgICAgIHJlYWRlcjogcmVhZGVyLFxuICAgICAgICAgICAgdGFyZ2V0OiBhcmdzLnRhcmdldCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHdyaXRlcjogcGx1Z2luLmJpbmRpbmcud3JpdGVyKHZhbHVlQXJncyksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkaXNhYmxlZCA9IHAub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtcy5kaXNhYmxlZCkudmFsdWU7XG4gICAgICAgIGNvbnN0IGhpZGRlbiA9IHAub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtcy5oaWRkZW4pLnZhbHVlO1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gcGx1Z2luLmNvbnRyb2xsZXIoe1xuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIGRvY3VtZW50OiBhcmdzLmRvY3VtZW50LFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiByZXN1bHQuaW5pdGlhbFZhbHVlLFxuICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQucGFyYW1zLFxuICAgICAgICAgICAgdmFsdWU6IGJpbmRpbmcudmFsdWUsXG4gICAgICAgICAgICB2aWV3UHJvcHM6IFZpZXdQcm9wcy5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICBoaWRkZW46IGhpZGRlbixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBwLm9wdGlvbmFsLnN0cmluZyhhcmdzLnBhcmFtcy5sYWJlbCkudmFsdWU7XG4gICAgICAgIHJldHVybiBuZXcgSW5wdXRCaW5kaW5nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICBiaW5kaW5nOiBiaW5kaW5nLFxuICAgICAgICAgICAgYmxhZGU6IGNyZWF0ZUJsYWRlKCksXG4gICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsIHx8IGFyZ3MudGFyZ2V0LmtleSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdmFsdWVDb250cm9sbGVyOiBjb250cm9sbGVyLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBNb25pdG9yQmluZGluZyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblRpY2tfID0gdGhpcy5vblRpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnJlYWRlcl8gPSBjb25maWcucmVhZGVyO1xuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSBjb25maWcudGFyZ2V0O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRpY2tlciA9IGNvbmZpZy50aWNrZXI7XG4gICAgICAgICAgICB0aGlzLnRpY2tlci5lbWl0dGVyLm9uKCd0aWNrJywgdGhpcy5vblRpY2tfKTtcbiAgICAgICAgICAgIHRoaXMucmVhZCgpO1xuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICB0aGlzLnRpY2tlci5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGhpcy50YXJnZXQucmVhZCgpO1xuICAgICAgICAgICAgaWYgKHRhcmdldFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnJlYWRlcl8odGFyZ2V0VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IGNyZWF0ZVB1c2hlZEJ1ZmZlcihidWZmZXIsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCd1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgcmF3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uVGlja18oXykge1xuICAgICAgICAgICAgdGhpcy5yZWFkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVUaWNrZXIoZG9jdW1lbnQsIGludGVydmFsKSB7XG4gICAgICAgIHJldHVybiBpbnRlcnZhbCA9PT0gMFxuICAgICAgICAgICAgPyBuZXcgTWFudWFsVGlja2VyKClcbiAgICAgICAgICAgIDogbmV3IEludGVydmFsVGlja2VyKGRvY3VtZW50LCBpbnRlcnZhbCAhPT0gbnVsbCAmJiBpbnRlcnZhbCAhPT0gdm9pZCAwID8gaW50ZXJ2YWwgOiBDb25zdGFudHMubW9uaXRvci5kZWZhdWx0SW50ZXJ2YWwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIocGx1Z2luLCBhcmdzKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICBjb25zdCBQID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGx1Z2luLmFjY2VwdChhcmdzLnRhcmdldC5yZWFkKCksIGFyZ3MucGFyYW1zKTtcbiAgICAgICAgaWYgKGlzRW1wdHkocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmluZGluZ0FyZ3MgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IGFyZ3MudGFyZ2V0LFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiByZXN1bHQuaW5pdGlhbFZhbHVlLFxuICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQucGFyYW1zLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZWFkZXIgPSBwbHVnaW4uYmluZGluZy5yZWFkZXIoYmluZGluZ0FyZ3MpO1xuICAgICAgICBjb25zdCBidWZmZXJTaXplID0gKF9iID0gKF9hID0gUC5vcHRpb25hbC5udW1iZXIoYXJncy5wYXJhbXMuYnVmZmVyU2l6ZSkudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChwbHVnaW4uYmluZGluZy5kZWZhdWx0QnVmZmVyU2l6ZSAmJlxuICAgICAgICAgICAgcGx1Z2luLmJpbmRpbmcuZGVmYXVsdEJ1ZmZlclNpemUocmVzdWx0LnBhcmFtcykpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAxO1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IFAub3B0aW9uYWwubnVtYmVyKGFyZ3MucGFyYW1zLmludGVydmFsKS52YWx1ZTtcbiAgICAgICAgY29uc3QgYmluZGluZyA9IG5ldyBNb25pdG9yQmluZGluZyh7XG4gICAgICAgICAgICByZWFkZXI6IHJlYWRlcixcbiAgICAgICAgICAgIHRhcmdldDogYXJncy50YXJnZXQsXG4gICAgICAgICAgICB0aWNrZXI6IGNyZWF0ZVRpY2tlcihhcmdzLmRvY3VtZW50LCBpbnRlcnZhbCksXG4gICAgICAgICAgICB2YWx1ZTogaW5pdGlhbGl6ZUJ1ZmZlcihidWZmZXJTaXplKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gUC5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zLmRpc2FibGVkKS52YWx1ZTtcbiAgICAgICAgY29uc3QgaGlkZGVuID0gUC5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zLmhpZGRlbikudmFsdWU7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBwbHVnaW4uY29udHJvbGxlcih7XG4gICAgICAgICAgICBkb2N1bWVudDogYXJncy5kb2N1bWVudCxcbiAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LnBhcmFtcyxcbiAgICAgICAgICAgIHZhbHVlOiBiaW5kaW5nLnZhbHVlLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBWaWV3UHJvcHMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBoaWRkZW4sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gKF9jID0gUC5vcHRpb25hbC5zdHJpbmcoYXJncy5wYXJhbXMubGFiZWwpLnZhbHVlKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBhcmdzLnRhcmdldC5rZXk7XG4gICAgICAgIHJldHVybiBuZXcgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIGJpbmRpbmc6IGJpbmRpbmcsXG4gICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogY29udHJvbGxlcixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgUGx1Z2luUG9vbCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zTWFwXyA9IHtcbiAgICAgICAgICAgICAgICBibGFkZXM6IFtdLFxuICAgICAgICAgICAgICAgIGlucHV0czogW10sXG4gICAgICAgICAgICAgICAgbW9uaXRvcnM6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBnZXRBbGwoKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucGx1Z2luc01hcF8uYmxhZGVzLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMucGx1Z2luc01hcF8uaW5wdXRzLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMucGx1Z2luc01hcF8ubW9uaXRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJlZ2lzdGVyKHIpIHtcbiAgICAgICAgICAgIGlmIChyLnR5cGUgPT09ICdibGFkZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnNNYXBfLmJsYWRlcy51bnNoaWZ0KHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoci50eXBlID09PSAnaW5wdXQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zTWFwXy5pbnB1dHMudW5zaGlmdChyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHIudHlwZSA9PT0gJ21vbml0b3InKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zTWFwXy5tb25pdG9ycy51bnNoaWZ0KHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZUlucHV0KGRvY3VtZW50LCB0YXJnZXQsIHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gdGFyZ2V0LnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KGluaXRpYWxWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHBFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdGFyZ2V0LmtleSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ25vbWF0Y2hpbmdjb250cm9sbGVyJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJjID0gdGhpcy5wbHVnaW5zTWFwXy5pbnB1dHMucmVkdWNlKChyZXN1bHQsIHBsdWdpbikgPT4gcmVzdWx0IHx8XG4gICAgICAgICAgICAgICAgY3JlYXRlSW5wdXRCaW5kaW5nQ29udHJvbGxlcihwbHVnaW4sIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQ6IGRvY3VtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgfSksIG51bGwpO1xuICAgICAgICAgICAgaWYgKGJjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB0YXJnZXQua2V5LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHlwZTogJ25vbWF0Y2hpbmdjb250cm9sbGVyJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZU1vbml0b3IoZG9jdW1lbnQsIHRhcmdldCwgcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucGx1Z2luc01hcF8ubW9uaXRvcnMucmVkdWNlKChyZXN1bHQsIHBsdWdpbikgPT4gcmVzdWx0IHx8XG4gICAgICAgICAgICAgICAgY3JlYXRlTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKHBsdWdpbiwge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudDogZG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgICAgICB9KSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHBFcnJvcih7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHRhcmdldC5rZXksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnbm9tYXRjaGluZ2NvbnRyb2xsZXInLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlQmxhZGUoZG9jdW1lbnQsIHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBsdWdpbnNNYXBfLmJsYWRlcy5yZWR1Y2UoKHJlc3VsdCwgcGx1Z2luKSA9PiByZXN1bHQgfHxcbiAgICAgICAgICAgICAgICBjcmVhdGVCbGFkZUNvbnRyb2xsZXIocGx1Z2luLCB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50OiBkb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgfSksIG51bGwpO1xuICAgICAgICAgICAgaWYgKCFiYykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ25vbWF0Y2hpbmd2aWV3JyxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlQmxhZGVBcGkoYmMpIHtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IElucHV0QmluZGluZ0FwaShiYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1vbml0b3JCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIFJhY2tDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWNrQXBpKGJjLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMucGx1Z2luc01hcF8uYmxhZGVzLnJlZHVjZSgocmVzdWx0LCBwbHVnaW4pID0+IHJlc3VsdCB8fFxuICAgICAgICAgICAgICAgIHBsdWdpbi5hcGkoe1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBiYyxcbiAgICAgICAgICAgICAgICAgICAgcG9vbDogdGhpcyxcbiAgICAgICAgICAgICAgICB9KSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcGk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0UGx1Z2luUG9vbCgpIHtcbiAgICAgICAgY29uc3QgcG9vbCA9IG5ldyBQbHVnaW5Qb29sKCk7XG4gICAgICAgIFtcbiAgICAgICAgICAgIFBvaW50MmRJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIFBvaW50M2RJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIFBvaW50NGRJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIFN0cmluZ0lucHV0UGx1Z2luLFxuICAgICAgICAgICAgTnVtYmVySW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBTdHJpbmdDb2xvcklucHV0UGx1Z2luLFxuICAgICAgICAgICAgT2JqZWN0Q29sb3JJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIE51bWJlckNvbG9ySW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBCb29sZWFuSW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBCb29sZWFuTW9uaXRvclBsdWdpbixcbiAgICAgICAgICAgIFN0cmluZ01vbml0b3JQbHVnaW4sXG4gICAgICAgICAgICBOdW1iZXJNb25pdG9yUGx1Z2luLFxuICAgICAgICAgICAgQnV0dG9uQmxhZGVQbHVnaW4sXG4gICAgICAgICAgICBGb2xkZXJCbGFkZVBsdWdpbixcbiAgICAgICAgICAgIFNlcGFyYXRvckJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgVGFiQmxhZGVQbHVnaW4sXG4gICAgICAgIF0uZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgcG9vbC5yZWdpc3RlcihwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwb29sO1xuICAgIH1cblxuICAgIGNsYXNzIExpc3RBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KHRoaXMsIGV2LnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5nZXQoJ29wdGlvbnMnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgb3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5zZXQoJ29wdGlvbnMnLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNsaWRlckFwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQodGhpcywgZXYucmF3VmFsdWUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBtYXhWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5zbGlkZXJDb250cm9sbGVyLnByb3BzLmdldCgnbWF4VmFsdWUnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbWF4VmFsdWUobWF4VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnNsaWRlckNvbnRyb2xsZXIucHJvcHMuc2V0KCdtYXhWYWx1ZScsIG1heFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbWluVmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIuc2xpZGVyQ29udHJvbGxlci5wcm9wcy5nZXQoJ21pblZhbHVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IG1pblZhbHVlKG1pblZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5zbGlkZXJDb250cm9sbGVyLnByb3BzLnNldCgnbWluVmFsdWUnLCBtaW5WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUZXh0QXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBDaGFuZ2VFdmVudCh0aGlzLCBldi5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGZvcm1hdHRlcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5nZXQoJ2Zvcm1hdHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBmb3JtYXR0ZXIoZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5zZXQoJ2Zvcm1hdHRlcicsIGZvcm1hdHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBMaXN0QmxhZGVQbHVnaW4gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6ICdsaXN0JyxcbiAgICAgICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHAucmVxdWlyZWQuY3VzdG9tKHBhcnNlTGlzdE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcC5yZXF1aXJlZC5yYXcsXG4gICAgICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ2xpc3QnKSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGljID0gbmV3IExpc3RDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogbm9ybWFsaXplTGlzdE9wdGlvbnMoYXJncy5wYXJhbXMub3B0aW9ucyksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoYXJncy5wYXJhbXMudmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGFiZWxlZFZhbHVlQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYXJncy5wYXJhbXMubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IGljLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgTGFiZWxlZFZhbHVlQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlci52YWx1ZUNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMaXN0Q29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdEFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV4cG9ydFByZXNldEpzb24odGFyZ2V0cykge1xuICAgICAgICByZXR1cm4gdGFyZ2V0cy5yZWR1Y2UoKHJlc3VsdCwgdGFyZ2V0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihyZXN1bHQsIHtcbiAgICAgICAgICAgICAgICBbdGFyZ2V0LnByZXNldEtleV06IHRhcmdldC5yZWFkKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwge30pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW1wb3J0UHJlc2V0SnNvbih0YXJnZXRzLCBwcmVzZXQpIHtcbiAgICAgICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJlc2V0W3RhcmdldC5wcmVzZXRLZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQud3JpdGUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBSb290QXBpIGV4dGVuZHMgRm9sZGVyQXBpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHBvb2wpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIHBvb2wpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbXBvcnRzIGEgcHJlc2V0IG9mIGFsbCBpbnB1dHMuXG4gICAgICAgICAqIEBwYXJhbSBwcmVzZXQgVGhlIHByZXNldCBvYmplY3QgdG8gaW1wb3J0LlxuICAgICAgICAgKi9cbiAgICAgICAgaW1wb3J0UHJlc2V0KHByZXNldCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMuY29udHJvbGxlcl8ucmFja0NvbnRyb2xsZXIucmFja1xuICAgICAgICAgICAgICAgIC5maW5kKElucHV0QmluZGluZ0NvbnRyb2xsZXIpXG4gICAgICAgICAgICAgICAgLm1hcCgoaWJjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGliYy5iaW5kaW5nLnRhcmdldDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW1wb3J0UHJlc2V0SnNvbih0YXJnZXRzLCBwcmVzZXQpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEV4cG9ydHMgYSBwcmVzZXQgb2YgYWxsIGlucHV0cy5cbiAgICAgICAgICogQHJldHVybiBBbiBleHBvcnRlZCBwcmVzZXQgb2JqZWN0LlxuICAgICAgICAgKi9cbiAgICAgICAgZXhwb3J0UHJlc2V0KCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMuY29udHJvbGxlcl8ucmFja0NvbnRyb2xsZXIucmFja1xuICAgICAgICAgICAgICAgIC5maW5kKElucHV0QmluZGluZ0NvbnRyb2xsZXIpXG4gICAgICAgICAgICAgICAgLm1hcCgoaWJjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGliYy5iaW5kaW5nLnRhcmdldDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydFByZXNldEpzb24odGFyZ2V0cyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlZnJlc2hlcyBhbGwgYmluZGluZ3Mgb2YgdGhlIHBhbmUuXG4gICAgICAgICAqL1xuICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgLy8gRm9yY2UtcmVhZCBhbGwgaW5wdXQgYmluZGluZ3NcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmFja0NvbnRyb2xsZXIucmFja1xuICAgICAgICAgICAgICAgIC5maW5kKElucHV0QmluZGluZ0NvbnRyb2xsZXIpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGliYykgPT4ge1xuICAgICAgICAgICAgICAgIGliYy5iaW5kaW5nLnJlYWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gRm9yY2UtcmVhZCBhbGwgbW9uaXRvciBiaW5kaW5nc1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yYWNrQ29udHJvbGxlci5yYWNrXG4gICAgICAgICAgICAgICAgLmZpbmQoTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChtYmMpID0+IHtcbiAgICAgICAgICAgICAgICBtYmMuYmluZGluZy5yZWFkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFJvb3RDb250cm9sbGVyIGV4dGVuZHMgRm9sZGVyQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogY29uZmlnLmV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIGJsYWRlOiBjb25maWcuYmxhZGUsXG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICByb290OiB0cnVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgU2xpZGVyQmxhZGVQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnc2xpZGVyJyxcbiAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBtYXg6IHAucmVxdWlyZWQubnVtYmVyLFxuICAgICAgICAgICAgICAgIG1pbjogcC5yZXF1aXJlZC5udW1iZXIsXG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnc2xpZGVyJyksXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBwLm9wdGlvbmFsLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBwLm9wdGlvbmFsLnN0cmluZyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCB2ID0gKF9hID0gYXJncy5wYXJhbXMudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgICAgICBjb25zdCB2YyA9IG5ldyBTbGlkZXJUZXh0Q29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmFzZVN0ZXA6IDEsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICBzbGlkZXJQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIG1heFZhbHVlOiBhcmdzLnBhcmFtcy5tYXgsXG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiBhcmdzLnBhcmFtcy5taW4sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGV4dFByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKHVuZGVmaW5lZCwgdiksXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogKF9iID0gYXJncy5wYXJhbXMuZm9ybWF0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBudW1iZXJUb1N0cmluZyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUodiksXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMYWJlbGVkVmFsdWVDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogYXJncy5ibGFkZSxcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhcmdzLnBhcmFtcy5sYWJlbCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IHZjLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMYWJlbGVkVmFsdWVDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyLnZhbHVlQ29udHJvbGxlciBpbnN0YW5jZW9mIFNsaWRlclRleHRDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTbGlkZXJBcGkoYXJncy5jb250cm9sbGVyKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgVGV4dEJsYWRlUGx1Z2luID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiAndGV4dCcsXG4gICAgICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZTogcC5yZXF1aXJlZC5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHAucmVxdWlyZWQucmF3LFxuICAgICAgICAgICAgICAgICAgICB2aWV3OiBwLnJlcXVpcmVkLmNvbnN0YW50KCd0ZXh0JyksXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogcC5vcHRpb25hbC5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCBpYyA9IG5ldyBUZXh0Q29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlcjogYXJncy5wYXJhbXMucGFyc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogKF9hID0gYXJncy5wYXJhbXMuZm9ybWF0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoKHYpID0+IFN0cmluZyh2KSksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoYXJncy5wYXJhbXMudmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGFiZWxlZFZhbHVlQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYXJncy5wYXJhbXMubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IGljLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgTGFiZWxlZFZhbHVlQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlci52YWx1ZUNvbnRyb2xsZXIgaW5zdGFuY2VvZiBUZXh0Q29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dEFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFdyYXBwZXJFbGVtZW50KGRvYykge1xuICAgICAgICBjb25zdCBlbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lKCdkZncnKSgpKTtcbiAgICAgICAgaWYgKGRvYy5ib2R5KSB7XG4gICAgICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChlbGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW1iZWRTdHlsZShkb2MsIGlkLCBjc3MpIHtcbiAgICAgICAgaWYgKGRvYy5xdWVyeVNlbGVjdG9yKGBzdHlsZVtkYXRhLXRwLXN0eWxlPSR7aWR9XWApKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3R5bGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgIHN0eWxlRWxlbS5kYXRhc2V0LnRwU3R5bGUgPSBpZDtcbiAgICAgICAgc3R5bGVFbGVtLnRleHRDb250ZW50ID0gY3NzO1xuICAgICAgICBkb2MuaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsZW0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcm9vdCBwYW5lIG9mIFR3ZWFrcGFuZS5cbiAgICAgKi9cbiAgICBjbGFzcyBQYW5lIGV4dGVuZHMgUm9vdEFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9wdF9jb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IG9wdF9jb25maWcgfHwge307XG4gICAgICAgICAgICBjb25zdCBkb2MgPSAoX2EgPSBjb25maWcuZG9jdW1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGdldFdpbmRvd0RvY3VtZW50KCk7XG4gICAgICAgICAgICBjb25zdCBwb29sID0gY3JlYXRlRGVmYXVsdFBsdWdpblBvb2woKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RDb250cm9sbGVyID0gbmV3IFJvb3RDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBjb25maWcuZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgYmxhZGU6IGNyZWF0ZUJsYWRlKCksXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogY29uZmlnLnRpdGxlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzdXBlcihyb290Q29udHJvbGxlciwgcG9vbCk7XG4gICAgICAgICAgICB0aGlzLnBvb2xfID0gcG9vbDtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbV8gPSBjb25maWcuY29udGFpbmVyIHx8IGNyZWF0ZURlZmF1bHRXcmFwcGVyRWxlbWVudChkb2MpO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJFbGVtXy5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5kb2NfID0gZG9jO1xuICAgICAgICAgICAgdGhpcy51c2VzRGVmYXVsdFdyYXBwZXJfID0gIWNvbmZpZy5jb250YWluZXI7XG4gICAgICAgICAgICB0aGlzLnNldFVwRGVmYXVsdFBsdWdpbnNfKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGRvY3VtZW50KCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRvY18pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jXztcbiAgICAgICAgfVxuICAgICAgICBkaXNwb3NlKCkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlbSA9IHRoaXMuY29udGFpbmVyRWxlbV87XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lckVsZW0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudXNlc0RlZmF1bHRXcmFwcGVyXykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEVsZW0gPSBjb250YWluZXJFbGVtLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudEVsZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbS5yZW1vdmVDaGlsZChjb250YWluZXJFbGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1fID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZG9jXyA9IG51bGw7XG4gICAgICAgICAgICBzdXBlci5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXJQbHVnaW4oYnVuZGxlKSB7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW5zID0gJ3BsdWdpbicgaW4gYnVuZGxlXG4gICAgICAgICAgICAgICAgPyBbYnVuZGxlLnBsdWdpbl1cbiAgICAgICAgICAgICAgICA6ICdwbHVnaW5zJyBpbiBidW5kbGVcbiAgICAgICAgICAgICAgICAgICAgPyBidW5kbGUucGx1Z2luc1xuICAgICAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgICAgcGx1Z2lucy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb29sXy5yZWdpc3RlcihwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtYmVkUGx1Z2luU3R5bGVfKHApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZW1iZWRQbHVnaW5TdHlsZV8ocGx1Z2luKSB7XG4gICAgICAgICAgICBpZiAocGx1Z2luLmNzcykge1xuICAgICAgICAgICAgICAgIGVtYmVkU3R5bGUodGhpcy5kb2N1bWVudCwgYHBsdWdpbi0ke3BsdWdpbi5pZH1gLCBwbHVnaW4uY3NzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRVcERlZmF1bHRQbHVnaW5zXygpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgc3RyaW5nIGxpdGVyYWwgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBkZWZhdWx0IENTUyBieSBSb2xsdXAgYXQgdGhlIGNvbXBpbGF0aW9uIHRpbWVcbiAgICAgICAgICAgIGVtYmVkU3R5bGUodGhpcy5kb2N1bWVudCwgJ2RlZmF1bHQnLCAnLnRwLXRiaXZfYiwudHAtY29sdHh0dl9tcywudHAtY2tidl9pLC50cC1yb3R2X2IsLnRwLWZsZHZfYiwudHAtbWxsdl9pLC50cC1zZ2x2X2ksLnRwLWdybHZfZywudHAtdHh0dl9pLC50cC1wMmRwdl9wLC50cC1jb2xzd3Zfc3csLnRwLXAyZHZfYiwudHAtYnRudl9iLC50cC1sc3R2X3N7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjA7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjB9LnRwLXAyZHZfYiwudHAtYnRudl9iLC50cC1sc3R2X3N7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtjb2xvcjp2YXIoLS1idG4tZmcpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0udHAtcDJkdl9iOmhvdmVyLC50cC1idG52X2I6aG92ZXIsLnRwLWxzdHZfczpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1oKX0udHAtcDJkdl9iOmZvY3VzLC50cC1idG52X2I6Zm9jdXMsLnRwLWxzdHZfczpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1mKX0udHAtcDJkdl9iOmFjdGl2ZSwudHAtYnRudl9iOmFjdGl2ZSwudHAtbHN0dl9zOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1hKX0udHAtcDJkdl9iOmRpc2FibGVkLC50cC1idG52X2I6ZGlzYWJsZWQsLnRwLWxzdHZfczpkaXNhYmxlZHtvcGFjaXR5Oi41fS50cC10eHR2X2ksLnRwLXAyZHB2X3AsLnRwLWNvbHN3dl9zd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnKTtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLWluLWZnKTtmb250LWZhbWlseTppbmhlcml0O2hlaWdodDp2YXIoLS1ibGQtdXMpO2xpbmUtaGVpZ2h0OnZhcigtLWJsZC11cyk7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX0udHAtdHh0dl9pOmhvdmVyLC50cC1wMmRwdl9wOmhvdmVyLC50cC1jb2xzd3Zfc3c6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1oKX0udHAtdHh0dl9pOmZvY3VzLC50cC1wMmRwdl9wOmZvY3VzLC50cC1jb2xzd3Zfc3c6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1mKX0udHAtdHh0dl9pOmFjdGl2ZSwudHAtcDJkcHZfcDphY3RpdmUsLnRwLWNvbHN3dl9zdzphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1hKX0udHAtdHh0dl9pOmRpc2FibGVkLC50cC1wMmRwdl9wOmRpc2FibGVkLC50cC1jb2xzd3Zfc3c6ZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtbWxsdl9pLC50cC1zZ2x2X2ksLnRwLWdybHZfZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vLWJnKTtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vLWZnKTtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtzY3JvbGxiYXItY29sb3I6Y3VycmVudENvbG9yIHRyYW5zcGFyZW50O3Njcm9sbGJhci13aWR0aDp0aGluO3dpZHRoOjEwMCV9LnRwLW1sbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXIsLnRwLXNnbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXIsLnRwLWdybHZfZzo6LXdlYmtpdC1zY3JvbGxiYXJ7aGVpZ2h0OjhweDt3aWR0aDo4cHh9LnRwLW1sbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLC50cC1zZ2x2X2k6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciwudHAtZ3Jsdl9nOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0udHAtbWxsdl9pOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiwudHAtc2dsdl9pOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiwudHAtZ3Jsdl9nOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3I7Ym9yZGVyOnRyYW5zcGFyZW50IHNvbGlkIDJweDtib3JkZXItcmFkaXVzOjRweH0udHAtcm90dnstLWZvbnQtZmFtaWx5OiB2YXIoLS10cC1mb250LWZhbWlseSwgUm9ib3RvIE1vbm8sIFNvdXJjZSBDb2RlIFBybywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZSk7LS1icy1icjogdmFyKC0tdHAtYmFzZS1ib3JkZXItcmFkaXVzLCA2cHgpOy0tY250LWgtcDogdmFyKC0tdHAtY29udGFpbmVyLWhvcml6b250YWwtcGFkZGluZywgNHB4KTstLWNudC12LXA6IHZhcigtLXRwLWNvbnRhaW5lci12ZXJ0aWNhbC1wYWRkaW5nLCA0cHgpOy0tZWxtLWJyOiB2YXIoLS10cC1lbGVtZW50LWJvcmRlci1yYWRpdXMsIDJweCk7LS1ibGQtczogdmFyKC0tdHAtYmxhZGUtc3BhY2luZywgNHB4KTstLWJsZC11czogdmFyKC0tdHAtYmxhZGUtdW5pdC1zaXplLCAyMHB4KTstLWJzLWJnOiB2YXIoLS10cC1iYXNlLWJhY2tncm91bmQtY29sb3IsICMyODI5MmUpOy0tYnMtc2g6IHZhcigtLXRwLWJhc2Utc2hhZG93LWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMikpOy0tYnRuLWJnOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvciwgI2FkYWZiOCk7LS1idG4tYmctYTogdmFyKC0tdHAtYnV0dG9uLWJhY2tncm91bmQtY29sb3ItYWN0aXZlLCAjZDZkN2RiKTstLWJ0bi1iZy1mOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvci1mb2N1cywgI2M4Y2FkMCk7LS1idG4tYmctaDogdmFyKC0tdHAtYnV0dG9uLWJhY2tncm91bmQtY29sb3ItaG92ZXIsICNiYmJjYzQpOy0tYnRuLWZnOiB2YXIoLS10cC1idXR0b24tZm9yZWdyb3VuZC1jb2xvciwgIzI4MjkyZSk7LS1jbnQtYmc6IHZhcigtLXRwLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMSkpOy0tY250LWJnLWE6IHZhcigtLXRwLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZSwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjI1KSk7LS1jbnQtYmctZjogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3ItZm9jdXMsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4yKSk7LS1jbnQtYmctaDogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3ItaG92ZXIsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4xNSkpOy0tY250LWZnOiB2YXIoLS10cC1jb250YWluZXItZm9yZWdyb3VuZC1jb2xvciwgI2JiYmNjNCk7LS1pbi1iZzogdmFyKC0tdHAtaW5wdXQtYmFja2dyb3VuZC1jb2xvciwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjEpKTstLWluLWJnLWE6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3ItYWN0aXZlLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMjUpKTstLWluLWJnLWY6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3ItZm9jdXMsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4yKSk7LS1pbi1iZy1oOiB2YXIoLS10cC1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLWhvdmVyLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMTUpKTstLWluLWZnOiB2YXIoLS10cC1pbnB1dC1mb3JlZ3JvdW5kLWNvbG9yLCAjYmJiY2M0KTstLWxibC1mZzogdmFyKC0tdHAtbGFiZWwtZm9yZWdyb3VuZC1jb2xvciwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjcpKTstLW1vLWJnOiB2YXIoLS10cC1tb25pdG9yLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4yKSk7LS1tby1mZzogdmFyKC0tdHAtbW9uaXRvci1mb3JlZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuNykpOy0tZ3J2LWZnOiB2YXIoLS10cC1ncm9vdmUtZm9yZWdyb3VuZC1jb2xvciwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjEpKX0udHAtcm90dl9jPi50cC1jbnR2LnRwLXYtbHN0LC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWNudHYudHAtdi1sc3QsLnRwLWZsZHZfYz4udHAtY250di50cC12LWxzdHttYXJnaW4tYm90dG9tOmNhbGMoLTEqdmFyKC0tY250LXYtcCkpfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYywudHAtdGFidl9jIC50cC1icmt2Pi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2MsLnRwLWZsZHZfYz4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0udHAtcm90dl9jPi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2IsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9iLC50cC1mbGR2X2M+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnRwLXJvdHZfYz4qOm5vdCgudHAtdi1mc3QpLC50cC10YWJ2X2MgLnRwLWJya3Y+Kjpub3QoLnRwLXYtZnN0KSwudHAtZmxkdl9jPio6bm90KC50cC12LWZzdCl7bWFyZ2luLXRvcDp2YXIoLS1ibGQtcyl9LnRwLXJvdHZfYz4udHAtc3Bydjpub3QoLnRwLXYtZnN0KSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1zcHJ2Om5vdCgudHAtdi1mc3QpLC50cC1mbGR2X2M+LnRwLXNwcnY6bm90KC50cC12LWZzdCksLnRwLXJvdHZfYz4udHAtY250djpub3QoLnRwLXYtZnN0KSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Om5vdCgudHAtdi1mc3QpLC50cC1mbGR2X2M+LnRwLWNudHY6bm90KC50cC12LWZzdCl7bWFyZ2luLXRvcDp2YXIoLS1jbnQtdi1wKX0udHAtcm90dl9jPi50cC1zcHJ2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtc3BydisqOm5vdCgudHAtdi1oaWRkZW4pLC50cC1mbGR2X2M+LnRwLXNwcnYrKjpub3QoLnRwLXYtaGlkZGVuKSwudHAtcm90dl9jPi50cC1jbnR2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtY250disqOm5vdCgudHAtdi1oaWRkZW4pLC50cC1mbGR2X2M+LnRwLWNudHYrKjpub3QoLnRwLXYtaGlkZGVuKXttYXJnaW4tdG9wOnZhcigtLWNudC12LXApfS50cC1yb3R2X2M+LnRwLXNwcnY6bm90KC50cC12LWhpZGRlbikrLnRwLXNwcnYsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtc3Bydjpub3QoLnRwLXYtaGlkZGVuKSsudHAtc3BydiwudHAtZmxkdl9jPi50cC1zcHJ2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1zcHJ2LC50cC1yb3R2X2M+LnRwLWNudHY6bm90KC50cC12LWhpZGRlbikrLnRwLWNudHYsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtY250djpub3QoLnRwLXYtaGlkZGVuKSsudHAtY250diwudHAtZmxkdl9jPi50cC1jbnR2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1jbnR2e21hcmdpbi10b3A6MH0udHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2LC50cC1mbGR2X2M+LnRwLWNudHZ7bWFyZ2luLWxlZnQ6NHB4fS50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHY+LnRwLWZsZHZfYiwudHAtZmxkdl9jPi50cC1mbGR2Pi50cC1mbGR2X2J7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtdGFidl9jIC50cC1icmt2Pi50cC1mbGR2LnRwLWZsZHYtZXhwYW5kZWQ+LnRwLWZsZHZfYiwudHAtZmxkdl9jPi50cC1mbGR2LnRwLWZsZHYtZXhwYW5kZWQ+LnRwLWZsZHZfYntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnRwLXRhYnZfYyAudHAtYnJrdiAudHAtZmxkdj4udHAtZmxkdl9jLC50cC1mbGR2X2MgLnRwLWZsZHY+LnRwLWZsZHZfY3tib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icil9LnRwLXRhYnZfYyAudHAtYnJrdj4udHAtdGFidj4udHAtdGFidl9pLC50cC1mbGR2X2M+LnRwLXRhYnY+LnRwLXRhYnZfaXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icil9LnRwLXRhYnZfYyAudHAtYnJrdiAudHAtdGFidj4udHAtdGFidl9jLC50cC1mbGR2X2MgLnRwLXRhYnY+LnRwLXRhYnZfY3tib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icil9LnRwLXJvdHZfYiwudHAtZmxkdl9ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtjb2xvcjp2YXIoLS1jbnQtZmcpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OnZhcigtLWNudC1oLXApO3BhZGRpbmctcmlnaHQ6Y2FsYyg0cHggKyB2YXIoLS1ibGQtdXMpICsgdmFyKC0tY250LWgtcCkpO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlO3RyYW5zaXRpb246Ym9yZGVyLXJhZGl1cyAuMnMgZWFzZS1pbi1vdXQgLjJzfS50cC1yb3R2X2I6aG92ZXIsLnRwLWZsZHZfYjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1oKX0udHAtcm90dl9iOmZvY3VzLC50cC1mbGR2X2I6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctZil9LnRwLXJvdHZfYjphY3RpdmUsLnRwLWZsZHZfYjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctYSl9LnRwLXJvdHZfYjpkaXNhYmxlZCwudHAtZmxkdl9iOmRpc2FibGVke29wYWNpdHk6LjV9LnRwLXJvdHZfbSwudHAtZmxkdl9te2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHZhcigtLWNudC1mZyksIHZhcigtLWNudC1mZykgMnB4LCB0cmFuc3BhcmVudCAycHgsIHRyYW5zcGFyZW50IDRweCwgdmFyKC0tY250LWZnKSA0cHgpO2JvcmRlci1yYWRpdXM6MnB4O2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDo2cHg7cmlnaHQ6Y2FsYyh2YXIoLS1jbnQtaC1wKSArICh2YXIoLS1ibGQtdXMpICsgNHB4IC0gNnB4KS8yIC0gMnB4KTttYXJnaW46YXV0bztvcGFjaXR5Oi41O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt3aWR0aDo2cHh9LnRwLXJvdHYudHAtcm90di1leHBhbmRlZCAudHAtcm90dl9tLC50cC1mbGR2LnRwLWZsZHYtZXhwYW5kZWQ+LnRwLWZsZHZfYj4udHAtZmxkdl9te3RyYW5zZm9ybTpub25lfS50cC1yb3R2X2MsLnRwLWZsZHZfY3tib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjA7b3BhY2l0eTowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhcixwYWRkaW5nIC4ycyBlYXNlLWluLW91dH0udHAtcm90di50cC1yb3R2LWNwbDpub3QoLnRwLXJvdHYtZXhwYW5kZWQpIC50cC1yb3R2X2MsLnRwLWZsZHYudHAtZmxkdi1jcGw6bm90KC50cC1mbGR2LWV4cGFuZGVkKT4udHAtZmxkdl9je2Rpc3BsYXk6bm9uZX0udHAtcm90di50cC1yb3R2LWV4cGFuZGVkIC50cC1yb3R2X2MsLnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9je29wYWNpdHk6MTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1jbnQtdi1wKTtwYWRkaW5nLXRvcDp2YXIoLS1jbnQtdi1wKTt0cmFuc2Zvcm06bm9uZTtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zaXRpb246aGVpZ2h0IC4ycyBlYXNlLWluLW91dCxvcGFjaXR5IC4ycyBsaW5lYXIgLjJzLHBhZGRpbmcgLjJzIGVhc2UtaW4tb3V0fS50cC1sc3R2LC50cC1jb2x0eHR2X217cG9zaXRpb246cmVsYXRpdmV9LnRwLWxzdHZfc3twYWRkaW5nOjAgMjBweCAwIDRweDt3aWR0aDoxMDAlfS50cC1sc3R2X20sLnRwLWNvbHR4dHZfbW17Ym90dG9tOjA7bWFyZ2luOmF1dG87cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoycHg7dG9wOjB9LnRwLWxzdHZfbSBzdmcsLnRwLWNvbHR4dHZfbW0gc3Zne2JvdHRvbTowO2hlaWdodDoxNnB4O21hcmdpbjphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MTZweH0udHAtbHN0dl9tIHN2ZyBwYXRoLC50cC1jb2x0eHR2X21tIHN2ZyBwYXRoe2ZpbGw6Y3VycmVudENvbG9yfS50cC1wbmR0eHR2LC50cC1jb2x0eHR2X3d7ZGlzcGxheTpmbGV4fS50cC1wbmR0eHR2X2EsLnRwLWNvbHR4dHZfY3t3aWR0aDoxMDAlfS50cC1wbmR0eHR2X2ErLnRwLXBuZHR4dHZfYSwudHAtY29sdHh0dl9jKy50cC1wbmR0eHR2X2EsLnRwLXBuZHR4dHZfYSsudHAtY29sdHh0dl9jLC50cC1jb2x0eHR2X2MrLnRwLWNvbHR4dHZfY3ttYXJnaW4tbGVmdDoycHh9LnRwLWJ0bnZfYnt3aWR0aDoxMDAlfS50cC1idG52X3R7dGV4dC1hbGlnbjpjZW50ZXJ9LnRwLWNrYnZfbHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1ja2J2X2l7bGVmdDowO29wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0udHAtY2tidl93e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2hlaWdodDp2YXIoLS1ibGQtdXMpO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOnZhcigtLWJsZC11cyl9LnRwLWNrYnZfdyBzdmd7Ym90dG9tOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTZweDtsZWZ0OjA7bWFyZ2luOmF1dG87b3BhY2l0eTowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MTZweH0udHAtY2tidl93IHN2ZyBwYXRoe2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0taW4tZmcpO3N0cm9rZS13aWR0aDoyfS50cC1ja2J2X2k6aG92ZXIrLnRwLWNrYnZfd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWgpfS50cC1ja2J2X2k6Zm9jdXMrLnRwLWNrYnZfd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWYpfS50cC1ja2J2X2k6YWN0aXZlKy50cC1ja2J2X3d7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1hKX0udHAtY2tidl9pOmNoZWNrZWQrLnRwLWNrYnZfdyBzdmd7b3BhY2l0eToxfS50cC1ja2J2LnRwLXYtZGlzYWJsZWQgLnRwLWNrYnZfd3tvcGFjaXR5Oi41fS50cC1jb2x2e3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1jb2x2X2h7ZGlzcGxheTpmbGV4fS50cC1jb2x2X3N7ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDt3aWR0aDp2YXIoLS1ibGQtdXMpfS50cC1jb2x2X3R7ZmxleDoxO21hcmdpbi1sZWZ0OjRweH0udHAtY29sdl9we2hlaWdodDowO21hcmdpbi10b3A6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zaXRpb246aGVpZ2h0IC4ycyBlYXNlLWluLW91dCxvcGFjaXR5IC4ycyBsaW5lYXIsbWFyZ2luIC4ycyBlYXNlLWluLW91dH0udHAtY29sdi50cC1jb2x2LWNwbCAudHAtY29sdl9we292ZXJmbG93OnZpc2libGV9LnRwLWNvbHYudHAtY29sdi1leHBhbmRlZCAudHAtY29sdl9we21hcmdpbi10b3A6dmFyKC0tYmxkLXMpO29wYWNpdHk6MX0udHAtY29sdiAudHAtcG9wdntsZWZ0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3RvcDp2YXIoLS1ibGQtdXMpfS50cC1jb2xwdl9oLC50cC1jb2xwdl9hcHttYXJnaW4tbGVmdDo2cHg7bWFyZ2luLXJpZ2h0OjZweH0udHAtY29scHZfaHttYXJnaW4tdG9wOnZhcigtLWJsZC1zKX0udHAtY29scHZfcmdie2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOnZhcigtLWJsZC1zKTt3aWR0aDoxMDAlfS50cC1jb2xwdl9he2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOnZhcigtLWNudC12LXApO3BhZGRpbmctdG9wOmNhbGModmFyKC0tY250LXYtcCkgKyAycHgpO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1jb2xwdl9hOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWdydi1mZyk7Y29udGVudDpcIlwiO2hlaWdodDoycHg7bGVmdDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTt0b3A6MH0udHAtY29scHZfYXB7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4OjN9LnRwLWNvbHB2X2F0e2ZsZXg6MTttYXJnaW4tbGVmdDo0cHh9LnRwLXN2cHZ7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LnRwLXN2cHZfY3tjdXJzb3I6Y3Jvc3NoYWlyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSo0KTt3aWR0aDoxMDAlfS50cC1zdnB2X217Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LC43NSkgc29saWQgMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmaWx0ZXI6ZHJvcC1zaGFkb3coMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMykpO2hlaWdodDoxMnB4O21hcmdpbi1sZWZ0Oi02cHg7bWFyZ2luLXRvcDotNnB4O3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTJweH0udHAtc3Zwdjpmb2N1cyAudHAtc3Zwdl9te2JvcmRlci1jb2xvcjojZmZmfS50cC1ocGx2e2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1ibGQtdXMpO291dGxpbmU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtaHBsdl9je2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRUFBQUFBQkNBWUFBQUJ1YmFnWEFBQUFRMGxFUVZRb1UyUDh6OER3bjBHQ2dRRURpMk9LL1JCZ1lIakJnSXBmb3ZGaDhqOFlCSWd6RkdReHVxRWdQaGFET1Q1Z09oUGtkQ3hPWmVCZytJREZaWmlHQWdDYVNTTVl0Y1JITGdBQUFBQkpSVTVFcmtKZ2dnPT0pO2JhY2tncm91bmQtcG9zaXRpb246bGVmdCB0b3A7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyLXJhZGl1czoycHg7ZGlzcGxheTpibG9jaztoZWlnaHQ6NHB4O2xlZnQ6MDttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxMDAlfS50cC1ocGx2X217Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LC43NSkgc29saWQgMnB4O2JveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLC4xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEycHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTZweDttYXJnaW4tdG9wOi02cHg7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEycHh9LnRwLWhwbHY6Zm9jdXMgLnRwLWhwbHZfbXtib3JkZXItY29sb3I6I2ZmZn0udHAtYXBsdntjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtvdXRsaW5lOm5vbmU7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0udHAtYXBsdl9ie2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpLGxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpO2JhY2tncm91bmQtc2l6ZTo0cHggNHB4O2JhY2tncm91bmQtcG9zaXRpb246MCAwLDJweCAycHg7Ym9yZGVyLXJhZGl1czoycHg7ZGlzcGxheTpibG9jaztoZWlnaHQ6NHB4O2xlZnQ6MDttYXJnaW4tdG9wOi0ycHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MTAwJX0udHAtYXBsdl9je2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1hcGx2X217YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSksbGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSk7YmFja2dyb3VuZC1zaXplOjEycHggMTJweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMCw2cHggNnB4O2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3gtc2hhZG93OjAgMCAycHggcmdiYSgwLDAsMCwuMSk7aGVpZ2h0OjEycHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTZweDttYXJnaW4tdG9wOi02cHg7b3ZlcmZsb3c6aGlkZGVuO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxMnB4fS50cC1hcGx2X3B7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LC43NSkgc29saWQgMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtYXBsdjpmb2N1cyAudHAtYXBsdl9we2JvcmRlci1jb2xvcjojZmZmfS50cC1jb2xzd3Z7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSksbGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSk7YmFja2dyb3VuZC1zaXplOjEwcHggMTBweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMCw1cHggNXB4O2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtvdmVyZmxvdzpoaWRkZW59LnRwLWNvbHN3di50cC12LWRpc2FibGVke29wYWNpdHk6LjV9LnRwLWNvbHN3dl9zd3tib3JkZXItcmFkaXVzOjB9LnRwLWNvbHN3dl9iey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWJsZC11cyk7bGVmdDowO21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6dmFyKC0tYmxkLXVzKX0udHAtY29sc3d2X2I6Zm9jdXM6OmFmdGVye2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LC43NSkgc29saWQgMnB4O2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3R0b206MDtjb250ZW50OlwiXCI7ZGlzcGxheTpibG9jaztsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtY29sdHh0dntkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJX0udHAtY29sdHh0dl9te21hcmdpbi1yaWdodDo0cHh9LnRwLWNvbHR4dHZfbXN7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2NvbG9yOnZhcigtLWxibC1mZyk7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWJsZC11cyk7bGluZS1oZWlnaHQ6dmFyKC0tYmxkLXVzKTtwYWRkaW5nOjAgMThweCAwIDRweH0udHAtY29sdHh0dl9tczpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWgpfS50cC1jb2x0eHR2X21zOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctZil9LnRwLWNvbHR4dHZfbXM6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctYSl9LnRwLWNvbHR4dHZfbW17Y29sb3I6dmFyKC0tbGJsLWZnKX0udHAtY29sdHh0dl93e2ZsZXg6MX0udHAtZGZ3dntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6OHB4O3JpZ2h0OjhweDt3aWR0aDoyNTZweH0udHAtZmxkdi50cC1mbGR2LW5vdCAudHAtZmxkdl9ie2Rpc3BsYXk6bm9uZX0udHAtZmxkdl90e3BhZGRpbmctbGVmdDo0cHh9LnRwLWZsZHZfY3tib3JkZXItbGVmdDp2YXIoLS1jbnQtYmcpIHNvbGlkIDRweH0udHAtZmxkdl9iOmhvdmVyKy50cC1mbGR2X2N7Ym9yZGVyLWxlZnQtY29sb3I6dmFyKC0tY250LWJnLWgpfS50cC1mbGR2X2I6Zm9jdXMrLnRwLWZsZHZfY3tib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1jbnQtYmctZil9LnRwLWZsZHZfYjphY3RpdmUrLnRwLWZsZHZfY3tib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1jbnQtYmctYSl9LnRwLWdybHZ7cG9zaXRpb246cmVsYXRpdmV9LnRwLWdybHZfZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDpjYWxjKHZhcigtLWJsZC11cykqMyl9LnRwLWdybHZfZyBwb2x5bGluZXtmaWxsOm5vbmU7c3Ryb2tlOnZhcigtLW1vLWZnKTtzdHJva2UtbGluZWpvaW46cm91bmR9LnRwLWdybHZfdHttYXJnaW4tdG9wOi00cHg7dHJhbnNpdGlvbjpsZWZ0IC4wNXMsdG9wIC4wNXM7dmlzaWJpbGl0eTpoaWRkZW59LnRwLWdybHZfdC50cC1ncmx2X3QtYXt2aXNpYmlsaXR5OnZpc2libGV9LnRwLWdybHZfdC50cC1ncmx2X3QtaW57dHJhbnNpdGlvbjpub25lfS50cC1ncmx2LnRwLXYtZGlzYWJsZWQgLnRwLWdybHZfZ3tvcGFjaXR5Oi41fS50cC1ncmx2IC50cC10dHZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tby1mZyl9LnRwLWdybHYgLnRwLXR0djo6YmVmb3Jle2JvcmRlci10b3AtY29sb3I6dmFyKC0tbW8tZmcpfS50cC1sYmx2e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7bGluZS1oZWlnaHQ6MS4zO3BhZGRpbmctbGVmdDp2YXIoLS1jbnQtaC1wKTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNudC1oLXApfS50cC1sYmx2LnRwLWxibHYtbm9se2Rpc3BsYXk6YmxvY2t9LnRwLWxibHZfbHtjb2xvcjp2YXIoLS1sYmwtZmcpO2ZsZXg6MTstd2Via2l0LWh5cGhlbnM6YXV0bzstbXMtaHlwaGVuczphdXRvO2h5cGhlbnM6YXV0bztvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OjRweDtwYWRkaW5nLXJpZ2h0OjE2cHh9LnRwLWxibHYudHAtdi1kaXNhYmxlZCAudHAtbGJsdl9se29wYWNpdHk6LjV9LnRwLWxibHYudHAtbGJsdi1ub2wgLnRwLWxibHZfbHtkaXNwbGF5Om5vbmV9LnRwLWxibHZfdnthbGlnbi1zZWxmOmZsZXgtc3RhcnQ7ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDt3aWR0aDoxNjBweH0udHAtbGJsdi50cC1sYmx2LW5vbCAudHAtbGJsdl92e3dpZHRoOjEwMCV9LnRwLWxzdHZfc3twYWRkaW5nOjAgMjBweCAwIDRweDt3aWR0aDoxMDAlfS50cC1sc3R2X217Y29sb3I6dmFyKC0tYnRuLWZnKX0udHAtc2dsdl9pe3BhZGRpbmc6MCA0cHh9LnRwLXNnbHYudHAtdi1kaXNhYmxlZCAudHAtc2dsdl9pe29wYWNpdHk6LjV9LnRwLW1sbHZfaXtkaXNwbGF5OmJsb2NrO2hlaWdodDpjYWxjKHZhcigtLWJsZC11cykqMyk7bGluZS1oZWlnaHQ6dmFyKC0tYmxkLXVzKTtwYWRkaW5nOjAgNHB4O3Jlc2l6ZTpub25lO3doaXRlLXNwYWNlOnByZX0udHAtbWxsdi50cC12LWRpc2FibGVkIC50cC1tbGx2X2l7b3BhY2l0eTouNX0udHAtcDJkdntwb3NpdGlvbjpyZWxhdGl2ZX0udHAtcDJkdl9oe2Rpc3BsYXk6ZmxleH0udHAtcDJkdl9ie2hlaWdodDp2YXIoLS1ibGQtdXMpO21hcmdpbi1yaWdodDo0cHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6dmFyKC0tYmxkLXVzKX0udHAtcDJkdl9iIHN2Z3tkaXNwbGF5OmJsb2NrO2hlaWdodDoxNnB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi04cHg7bWFyZ2luLXRvcDotOHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MTZweH0udHAtcDJkdl9iIHN2ZyBwYXRoe3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjJ9LnRwLXAyZHZfYiBzdmcgY2lyY2xle2ZpbGw6Y3VycmVudENvbG9yfS50cC1wMmR2X3R7ZmxleDoxfS50cC1wMmR2X3B7aGVpZ2h0OjA7bWFyZ2luLXRvcDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhcixtYXJnaW4gLjJzIGVhc2UtaW4tb3V0fS50cC1wMmR2LnRwLXAyZHYtZXhwYW5kZWQgLnRwLXAyZHZfcHttYXJnaW4tdG9wOnZhcigtLWJsZC1zKTtvcGFjaXR5OjF9LnRwLXAyZHYgLnRwLXBvcHZ7bGVmdDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTtyaWdodDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTt0b3A6dmFyKC0tYmxkLXVzKX0udHAtcDJkcHZ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCl9LnRwLXAyZHB2X3B7Y3Vyc29yOmNyb3NzaGFpcjtoZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1ib3R0b206MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtcDJkcHZfZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlO2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCV9LnRwLXAyZHB2X2F4e29wYWNpdHk6LjE7c3Ryb2tlOnZhcigtLWluLWZnKTtzdHJva2UtZGFzaGFycmF5OjF9LnRwLXAyZHB2X2x7b3BhY2l0eTouNTtzdHJva2U6dmFyKC0taW4tZmcpO3N0cm9rZS1kYXNoYXJyYXk6MX0udHAtcDJkcHZfbXtib3JkZXI6dmFyKC0taW4tZmcpIHNvbGlkIDFweDtib3JkZXItcmFkaXVzOjUwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjRweDttYXJnaW4tbGVmdDotMnB4O21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo0cHh9LnRwLXAyZHB2X3A6Zm9jdXMgLnRwLXAyZHB2X217YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1mZyk7Ym9yZGVyLXdpZHRoOjB9LnRwLXBvcHZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1iZyk7Ym9yZGVyLXJhZGl1czo2cHg7Ym94LXNoYWRvdzowIDJweCA0cHggdmFyKC0tYnMtc2gpO2Rpc3BsYXk6bm9uZTttYXgtd2lkdGg6MTY4cHg7cGFkZGluZzp2YXIoLS1jbnQtdi1wKSB2YXIoLS1jbnQtaC1wKTtwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwMDB9LnRwLXBvcHYudHAtcG9wdi12e2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTp2aXNpYmxlfS50cC1zcHJ2X3J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ncnYtZmcpO2JvcmRlci13aWR0aDowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjJweDttYXJnaW46MDt3aWR0aDoxMDAlfS50cC1zbGR2LnRwLXYtZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtc2xkdl90e2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tYmxkLXVzKTttYXJnaW46MCA2cHg7b3V0bGluZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1zbGR2X3Q6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnKTtib3JkZXItcmFkaXVzOjFweDtib3R0b206MDtjb250ZW50OlwiXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MnB4O2xlZnQ6MDttYXJnaW46YXV0bztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1zbGR2X2t7aGVpZ2h0OjEwMCU7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS50cC1zbGR2X2s6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItcmFkaXVzOjFweDtib3R0b206MDtjb250ZW50OlwiXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MnB4O2xlZnQ6MDttYXJnaW4tYm90dG9tOmF1dG87bWFyZ2luLXRvcDphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9LnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3R0b206MDtjb250ZW50OlwiXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTJweDttYXJnaW4tYm90dG9tOmF1dG87bWFyZ2luLXRvcDphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi02cHg7dG9wOjA7d2lkdGg6MTJweH0udHAtc2xkdl90OmhvdmVyIC50cC1zbGR2X2s6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWgpfS50cC1zbGR2X3Q6Zm9jdXMgLnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmctZil9LnRwLXNsZHZfdDphY3RpdmUgLnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmctYSl9LnRwLXNsZHR4dHZ7ZGlzcGxheTpmbGV4fS50cC1zbGR0eHR2X3N7ZmxleDoyfS50cC1zbGR0eHR2X3R7ZmxleDoxO21hcmdpbi1sZWZ0OjRweH0udHAtdGFidi50cC12LWRpc2FibGVke29wYWNpdHk6LjV9LnRwLXRhYnZfaXthbGlnbi1pdGVtczpmbGV4LWVuZDtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVufS50cC10YWJ2LnRwLXRhYnYtbm9wIC50cC10YWJ2X2l7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCk7cG9zaXRpb246cmVsYXRpdmV9LnRwLXRhYnYudHAtdGFidi1ub3AgLnRwLXRhYnZfaTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtib3R0b206MDtjb250ZW50OlwiXCI7aGVpZ2h0OjJweDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0udHAtdGFidl9je2JvcmRlci1sZWZ0OnZhcigtLWNudC1iZykgc29saWQgNHB4O3BhZGRpbmctYm90dG9tOnZhcigtLWNudC12LXApO3BhZGRpbmctdG9wOnZhcigtLWNudC12LXApfS50cC10Yml2e2ZsZXg6MTttaW4td2lkdGg6MDtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtdGJpdisudHAtdGJpdnttYXJnaW4tbGVmdDoycHh9LnRwLXRiaXYrLnRwLXRiaXY6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZyk7Ym90dG9tOjA7Y29udGVudDpcIlwiO2hlaWdodDoycHg7bGVmdDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjJweH0udHAtdGJpdl9ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtkaXNwbGF5OmJsb2NrO3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLWNudC1oLXApICsgNHB4KTtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tY250LWgtcCkgKyA0cHgpO3dpZHRoOjEwMCV9LnRwLXRiaXZfYjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1oKX0udHAtdGJpdl9iOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnLWYpfS50cC10Yml2X2I6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnLWEpfS50cC10Yml2X2I6ZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtdGJpdl90e2NvbG9yOnZhcigtLWNudC1mZyk7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtvcGFjaXR5Oi41O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS50cC10Yml2LnRwLXRiaXYtc2VsIC50cC10Yml2X3R7b3BhY2l0eToxfS50cC10eHR2e3Bvc2l0aW9uOnJlbGF0aXZlfS50cC10eHR2X2l7cGFkZGluZzowIDRweH0udHAtdHh0di50cC10eHR2LWZzdCAudHAtdHh0dl9pe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0udHAtdHh0di50cC10eHR2LW1pZCAudHAtdHh0dl9pe2JvcmRlci1yYWRpdXM6MH0udHAtdHh0di50cC10eHR2LWxzdCAudHAtdHh0dl9pe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnRwLXR4dHYudHAtdHh0di1udW0gLnRwLXR4dHZfaXt0ZXh0LWFsaWduOnJpZ2h0fS50cC10eHR2LnRwLXR4dHYtZHJnIC50cC10eHR2X2l7b3BhY2l0eTouM30udHAtdHh0dl9re2N1cnNvcjpwb2ludGVyO2hlaWdodDoxMDAlO2xlZnQ6LTNweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMnB4fS50cC10eHR2X2s6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItcmFkaXVzOjFweDtib3R0b206MDtjb250ZW50OlwiXCI7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSAtIDRweCk7bGVmdDo1MCU7bWFyZ2luLWJvdHRvbTphdXRvO21hcmdpbi1sZWZ0Oi0xcHg7bWFyZ2luLXRvcDphdXRvO29wYWNpdHk6LjE7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dHJhbnNpdGlvbjpib3JkZXItcmFkaXVzIC4xcyxoZWlnaHQgLjFzLHRyYW5zZm9ybSAuMXMsd2lkdGggLjFzO3dpZHRoOjJweH0udHAtdHh0dl9rOmhvdmVyOjpiZWZvcmUsLnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR4dHZfazo6YmVmb3Jle29wYWNpdHk6MX0udHAtdHh0di50cC10eHR2LWRyZyAudHAtdHh0dl9rOjpiZWZvcmV7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjRweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMXB4KTt3aWR0aDo0cHh9LnRwLXR4dHZfZ3tib3R0b206MDtkaXNwbGF5OmJsb2NrO2hlaWdodDo4cHg7bGVmdDo1MCU7bWFyZ2luOmF1dG87b3ZlcmZsb3c6dmlzaWJsZTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjEwMCV9LnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR4dHZfZ3t2aXNpYmlsaXR5OnZpc2libGV9LnRwLXR4dHZfZ2J7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1pbi1mZyk7c3Ryb2tlLWRhc2hhcnJheToxfS50cC10eHR2X2doe2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0taW4tZmcpfS50cC10eHR2IC50cC10dHZ7bWFyZ2luLWxlZnQ6NnB4O3Zpc2liaWxpdHk6aGlkZGVufS50cC10eHR2LnRwLXR4dHYtZHJnIC50cC10dHZ7dmlzaWJpbGl0eTp2aXNpYmxlfS50cC10dHZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1mZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2NvbG9yOnZhcigtLWJzLWJnKTtwYWRkaW5nOjJweCA0cHg7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC0xMDAlKX0udHAtdHR2OjpiZWZvcmV7Ym9yZGVyLWNvbG9yOnZhcigtLWluLWZnKSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGVudDpcIlwiO2ZvbnQtc2l6ZTouOWVtO2hlaWdodDo0cHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTt3aWR0aDo0cHh9LnRwLXJvdHZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy1icik7Ym94LXNoYWRvdzowIDJweCA0cHggdmFyKC0tYnMtc2gpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmxlZnR9LnRwLXJvdHZfYntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpO3BhZGRpbmctbGVmdDpjYWxjKDRweCArIHZhcigtLWJsZC11cykgKyB2YXIoLS1jbnQtaC1wKSk7dGV4dC1hbGlnbjpjZW50ZXJ9LnRwLXJvdHYudHAtcm90di1leHBhbmRlZCAudHAtcm90dl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2J7ZGlzcGxheTpub25lfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3Q+LnRwLWZsZHZfYywudHAtcm90dl9jPi50cC10YWJ2LnRwLXYtbHN0Pi50cC10YWJ2X2N7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3Q6bm90KC50cC1mbGR2LWV4cGFuZGVkKT4udHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtYnIpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWJzLWJyKX0udHAtcm90dl9jIC50cC1mbGR2LnRwLXYtdmxzdDpub3QoLnRwLWZsZHYtZXhwYW5kZWQpPi50cC1mbGR2X2J7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1mc3R7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNudC12LXApKX0udHAtcm90di50cC1yb3R2LW5vdCAudHAtcm90dl9jPi50cC1mbGR2LnRwLXYtZnN0Pi50cC1mbGR2X2J7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLXRhYnYudHAtdi1mc3R7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNudC12LXApKX0udHAtcm90di50cC1yb3R2LW5vdCAudHAtcm90dl9jPi50cC10YWJ2LnRwLXYtZnN0Pi50cC10YWJ2X2l7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2LnRwLXYtZGlzYWJsZWQsLnRwLXJvdHYgLnRwLXYtZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZX0udHAtcm90di50cC12LWhpZGRlbiwudHAtcm90diAudHAtdi1oaWRkZW57ZGlzcGxheTpub25lfScpO1xuICAgICAgICAgICAgdGhpcy5wb29sXy5nZXRBbGwoKS5mb3JFYWNoKChwbHVnaW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtYmVkUGx1Z2luU3R5bGVfKHBsdWdpbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJQbHVnaW4oe1xuICAgICAgICAgICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgU2xpZGVyQmxhZGVQbHVnaW4sXG4gICAgICAgICAgICAgICAgICAgIExpc3RCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgVGFiQmxhZGVQbHVnaW4sXG4gICAgICAgICAgICAgICAgICAgIFRleHRCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBWRVJTSU9OID0gbmV3IFNlbXZlcignMy4wLjgnKTtcblxuICAgIGV4cG9ydHMuQmxhZGVBcGkgPSBCbGFkZUFwaTtcbiAgICBleHBvcnRzLkJ1dHRvbkFwaSA9IEJ1dHRvbkFwaTtcbiAgICBleHBvcnRzLkZvbGRlckFwaSA9IEZvbGRlckFwaTtcbiAgICBleHBvcnRzLklucHV0QmluZGluZ0FwaSA9IElucHV0QmluZGluZ0FwaTtcbiAgICBleHBvcnRzLkxpc3RBcGkgPSBMaXN0QXBpO1xuICAgIGV4cG9ydHMuTW9uaXRvckJpbmRpbmdBcGkgPSBNb25pdG9yQmluZGluZ0FwaTtcbiAgICBleHBvcnRzLlBhbmUgPSBQYW5lO1xuICAgIGV4cG9ydHMuU2VwYXJhdG9yQXBpID0gU2VwYXJhdG9yQXBpO1xuICAgIGV4cG9ydHMuU2xpZGVyQXBpID0gU2xpZGVyQXBpO1xuICAgIGV4cG9ydHMuVGFiQXBpID0gVGFiQXBpO1xuICAgIGV4cG9ydHMuVGFiUGFnZUFwaSA9IFRhYlBhZ2VBcGk7XG4gICAgZXhwb3J0cy5UZXh0QXBpID0gVGV4dEFwaTtcbiAgICBleHBvcnRzLlRwQ2hhbmdlRXZlbnQgPSBUcENoYW5nZUV2ZW50O1xuICAgIGV4cG9ydHMuVkVSU0lPTiA9IFZFUlNJT047XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSk7XG4iLCJcbm1vZHVsZS5leHBvcnRzID0gYWJzb2x1dGl6ZVxuXG4vKipcbiAqIHJlZGVmaW5lIGBwYXRoYCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcGF0aFxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cblxuZnVuY3Rpb24gYWJzb2x1dGl6ZShwYXRoKXtcblx0dmFyIHN0YXJ0WCA9IDBcblx0dmFyIHN0YXJ0WSA9IDBcblx0dmFyIHggPSAwXG5cdHZhciB5ID0gMFxuXG5cdHJldHVybiBwYXRoLm1hcChmdW5jdGlvbihzZWcpe1xuXHRcdHNlZyA9IHNlZy5zbGljZSgpXG5cdFx0dmFyIHR5cGUgPSBzZWdbMF1cblx0XHR2YXIgY29tbWFuZCA9IHR5cGUudG9VcHBlckNhc2UoKVxuXG5cdFx0Ly8gaXMgcmVsYXRpdmVcblx0XHRpZiAodHlwZSAhPSBjb21tYW5kKSB7XG5cdFx0XHRzZWdbMF0gPSBjb21tYW5kXG5cdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnYSc6XG5cdFx0XHRcdFx0c2VnWzZdICs9IHhcblx0XHRcdFx0XHRzZWdbN10gKz0geVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdGNhc2UgJ3YnOlxuXHRcdFx0XHRcdHNlZ1sxXSArPSB5XG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0Y2FzZSAnaCc6XG5cdFx0XHRcdFx0c2VnWzFdICs9IHhcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAxOyBpIDwgc2VnLmxlbmd0aDspIHtcblx0XHRcdFx0XHRcdHNlZ1tpKytdICs9IHhcblx0XHRcdFx0XHRcdHNlZ1tpKytdICs9IHlcblx0XHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gdXBkYXRlIGN1cnNvciBzdGF0ZVxuXHRcdHN3aXRjaCAoY29tbWFuZCkge1xuXHRcdFx0Y2FzZSAnWic6XG5cdFx0XHRcdHggPSBzdGFydFhcblx0XHRcdFx0eSA9IHN0YXJ0WVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnSCc6XG5cdFx0XHRcdHggPSBzZWdbMV1cblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ1YnOlxuXHRcdFx0XHR5ID0gc2VnWzFdXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdNJzpcblx0XHRcdFx0eCA9IHN0YXJ0WCA9IHNlZ1sxXVxuXHRcdFx0XHR5ID0gc3RhcnRZID0gc2VnWzJdXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR4ID0gc2VnW3NlZy5sZW5ndGggLSAyXVxuXHRcdFx0XHR5ID0gc2VnW3NlZy5sZW5ndGggLSAxXVxuXHRcdH1cblxuXHRcdHJldHVybiBzZWdcblx0fSlcbn1cbiIsImZ1bmN0aW9uIGNsb25lKHBvaW50KSB7IC8vVE9ETzogdXNlIGdsLXZlYzIgZm9yIHRoaXNcbiAgICByZXR1cm4gW3BvaW50WzBdLCBwb2ludFsxXV1cbn1cblxuZnVuY3Rpb24gdmVjMih4LCB5KSB7XG4gICAgcmV0dXJuIFt4LCB5XVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUJlemllckJ1aWxkZXIob3B0KSB7XG4gICAgb3B0ID0gb3B0fHx7fVxuXG4gICAgdmFyIFJFQ1VSU0lPTl9MSU1JVCA9IHR5cGVvZiBvcHQucmVjdXJzaW9uID09PSAnbnVtYmVyJyA/IG9wdC5yZWN1cnNpb24gOiA4XG4gICAgdmFyIEZMVF9FUFNJTE9OID0gdHlwZW9mIG9wdC5lcHNpbG9uID09PSAnbnVtYmVyJyA/IG9wdC5lcHNpbG9uIDogMS4xOTIwOTI5MGUtN1xuICAgIHZhciBQQVRIX0RJU1RBTkNFX0VQU0lMT04gPSB0eXBlb2Ygb3B0LnBhdGhFcHNpbG9uID09PSAnbnVtYmVyJyA/IG9wdC5wYXRoRXBzaWxvbiA6IDEuMFxuXG4gICAgdmFyIGN1cnZlX2FuZ2xlX3RvbGVyYW5jZV9lcHNpbG9uID0gdHlwZW9mIG9wdC5hbmdsZUVwc2lsb24gPT09ICdudW1iZXInID8gb3B0LmFuZ2xlRXBzaWxvbiA6IDAuMDFcbiAgICB2YXIgbV9hbmdsZV90b2xlcmFuY2UgPSBvcHQuYW5nbGVUb2xlcmFuY2UgfHwgMFxuICAgIHZhciBtX2N1c3BfbGltaXQgPSBvcHQuY3VzcExpbWl0IHx8IDBcblxuICAgIHJldHVybiBmdW5jdGlvbiBiZXppZXJDdXJ2ZShzdGFydCwgYzEsIGMyLCBlbmQsIHNjYWxlLCBwb2ludHMpIHtcbiAgICAgICAgaWYgKCFwb2ludHMpXG4gICAgICAgICAgICBwb2ludHMgPSBbXVxuXG4gICAgICAgIHNjYWxlID0gdHlwZW9mIHNjYWxlID09PSAnbnVtYmVyJyA/IHNjYWxlIDogMS4wXG4gICAgICAgIHZhciBkaXN0YW5jZVRvbGVyYW5jZSA9IFBBVEhfRElTVEFOQ0VfRVBTSUxPTiAvIHNjYWxlXG4gICAgICAgIGRpc3RhbmNlVG9sZXJhbmNlICo9IGRpc3RhbmNlVG9sZXJhbmNlXG4gICAgICAgIGJlZ2luKHN0YXJ0LCBjMSwgYzIsIGVuZCwgcG9pbnRzLCBkaXN0YW5jZVRvbGVyYW5jZSlcbiAgICAgICAgcmV0dXJuIHBvaW50c1xuICAgIH1cblxuXG4gICAgLy8vLy8vIEJhc2VkIG9uOlxuICAgIC8vLy8vLyBodHRwczovL2dpdGh1Yi5jb20vcGVsc29uL2FudGlncmFpbi9ibG9iL21hc3Rlci9hZ2ctMi40L3NyYy9hZ2dfY3VydmVzLmNwcFxuXG4gICAgZnVuY3Rpb24gYmVnaW4oc3RhcnQsIGMxLCBjMiwgZW5kLCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKGNsb25lKHN0YXJ0KSlcbiAgICAgICAgdmFyIHgxID0gc3RhcnRbMF0sXG4gICAgICAgICAgICB5MSA9IHN0YXJ0WzFdLFxuICAgICAgICAgICAgeDIgPSBjMVswXSxcbiAgICAgICAgICAgIHkyID0gYzFbMV0sXG4gICAgICAgICAgICB4MyA9IGMyWzBdLFxuICAgICAgICAgICAgeTMgPSBjMlsxXSxcbiAgICAgICAgICAgIHg0ID0gZW5kWzBdLFxuICAgICAgICAgICAgeTQgPSBlbmRbMV1cbiAgICAgICAgcmVjdXJzaXZlKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCwgcG9pbnRzLCBkaXN0YW5jZVRvbGVyYW5jZSwgMClcbiAgICAgICAgcG9pbnRzLnB1c2goY2xvbmUoZW5kKSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWN1cnNpdmUoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0LCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlLCBsZXZlbCkge1xuICAgICAgICBpZihsZXZlbCA+IFJFQ1VSU0lPTl9MSU1JVCkgXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICB2YXIgcGkgPSBNYXRoLlBJXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIGFsbCB0aGUgbWlkLXBvaW50cyBvZiB0aGUgbGluZSBzZWdtZW50c1xuICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgdmFyIHgxMiAgID0gKHgxICsgeDIpIC8gMlxuICAgICAgICB2YXIgeTEyICAgPSAoeTEgKyB5MikgLyAyXG4gICAgICAgIHZhciB4MjMgICA9ICh4MiArIHgzKSAvIDJcbiAgICAgICAgdmFyIHkyMyAgID0gKHkyICsgeTMpIC8gMlxuICAgICAgICB2YXIgeDM0ICAgPSAoeDMgKyB4NCkgLyAyXG4gICAgICAgIHZhciB5MzQgICA9ICh5MyArIHk0KSAvIDJcbiAgICAgICAgdmFyIHgxMjMgID0gKHgxMiArIHgyMykgLyAyXG4gICAgICAgIHZhciB5MTIzICA9ICh5MTIgKyB5MjMpIC8gMlxuICAgICAgICB2YXIgeDIzNCAgPSAoeDIzICsgeDM0KSAvIDJcbiAgICAgICAgdmFyIHkyMzQgID0gKHkyMyArIHkzNCkgLyAyXG4gICAgICAgIHZhciB4MTIzNCA9ICh4MTIzICsgeDIzNCkgLyAyXG4gICAgICAgIHZhciB5MTIzNCA9ICh5MTIzICsgeTIzNCkgLyAyXG5cbiAgICAgICAgaWYobGV2ZWwgPiAwKSB7IC8vIEVuZm9yY2Ugc3ViZGl2aXNpb24gZmlyc3QgdGltZVxuICAgICAgICAgICAgLy8gVHJ5IHRvIGFwcHJveGltYXRlIHRoZSBmdWxsIGN1YmljIGN1cnZlIGJ5IGEgc2luZ2xlIHN0cmFpZ2h0IGxpbmVcbiAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICB2YXIgZHggPSB4NC14MVxuICAgICAgICAgICAgdmFyIGR5ID0geTQteTFcblxuICAgICAgICAgICAgdmFyIGQyID0gTWF0aC5hYnMoKHgyIC0geDQpICogZHkgLSAoeTIgLSB5NCkgKiBkeClcbiAgICAgICAgICAgIHZhciBkMyA9IE1hdGguYWJzKCh4MyAtIHg0KSAqIGR5IC0gKHkzIC0geTQpICogZHgpXG5cbiAgICAgICAgICAgIHZhciBkYTEsIGRhMlxuXG4gICAgICAgICAgICBpZihkMiA+IEZMVF9FUFNJTE9OICYmIGQzID4gRkxUX0VQU0lMT04pIHtcbiAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIGNhcmVcbiAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgaWYoKGQyICsgZDMpKihkMiArIGQzKSA8PSBkaXN0YW5jZVRvbGVyYW5jZSAqIChkeCpkeCArIGR5KmR5KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY3VydmF0dXJlIGRvZXNuJ3QgZXhjZWVkIHRoZSBkaXN0YW5jZVRvbGVyYW5jZSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSB0ZW5kIHRvIGZpbmlzaCBzdWJkaXZpc2lvbnMuXG4gICAgICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgICAgICBpZihtX2FuZ2xlX3RvbGVyYW5jZSA8IGN1cnZlX2FuZ2xlX3RvbGVyYW5jZV9lcHNpbG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgxMjM0LCB5MTIzNCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFuZ2xlICYgQ3VzcCBDb25kaXRpb25cbiAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgIHZhciBhMjMgPSBNYXRoLmF0YW4yKHkzIC0geTIsIHgzIC0geDIpXG4gICAgICAgICAgICAgICAgICAgIGRhMSA9IE1hdGguYWJzKGEyMyAtIE1hdGguYXRhbjIoeTIgLSB5MSwgeDIgLSB4MSkpXG4gICAgICAgICAgICAgICAgICAgIGRhMiA9IE1hdGguYWJzKE1hdGguYXRhbjIoeTQgLSB5MywgeDQgLSB4MykgLSBhMjMpXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhMSA+PSBwaSkgZGExID0gMipwaSAtIGRhMVxuICAgICAgICAgICAgICAgICAgICBpZihkYTIgPj0gcGkpIGRhMiA9IDIqcGkgLSBkYTJcblxuICAgICAgICAgICAgICAgICAgICBpZihkYTEgKyBkYTIgPCBtX2FuZ2xlX3RvbGVyYW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmluYWxseSB3ZSBjYW4gc3RvcCB0aGUgcmVjdXJzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDEyMzQsIHkxMjM0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYobV9jdXNwX2xpbWl0ICE9PSAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhMSA+IG1fY3VzcF9saW1pdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDIsIHkyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGEyID4gbV9jdXNwX2xpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MywgeTMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYoZDIgPiBGTFRfRVBTSUxPTikge1xuICAgICAgICAgICAgICAgICAgICAvLyBwMSxwMyxwNCBhcmUgY29sbGluZWFyLCBwMiBpcyBjb25zaWRlcmFibGVcbiAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgIGlmKGQyICogZDIgPD0gZGlzdGFuY2VUb2xlcmFuY2UgKiAoZHgqZHggKyBkeSpkeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1fYW5nbGVfdG9sZXJhbmNlIDwgY3VydmVfYW5nbGVfdG9sZXJhbmNlX2Vwc2lsb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgxMjM0LCB5MTIzNCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuZ2xlIENvbmRpdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgICAgICBkYTEgPSBNYXRoLmFicyhNYXRoLmF0YW4yKHkzIC0geTIsIHgzIC0geDIpIC0gTWF0aC5hdGFuMih5MiAtIHkxLCB4MiAtIHgxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhMSA+PSBwaSkgZGExID0gMipwaSAtIGRhMVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYTEgPCBtX2FuZ2xlX3RvbGVyYW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDIsIHkyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgzLCB5MykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1fY3VzcF9saW1pdCAhPT0gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGExID4gbV9jdXNwX2xpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDIsIHkyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYoZDMgPiBGTFRfRVBTSUxPTikge1xuICAgICAgICAgICAgICAgICAgICAvLyBwMSxwMixwNCBhcmUgY29sbGluZWFyLCBwMyBpcyBjb25zaWRlcmFibGVcbiAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgIGlmKGQzICogZDMgPD0gZGlzdGFuY2VUb2xlcmFuY2UgKiAoZHgqZHggKyBkeSpkeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1fYW5nbGVfdG9sZXJhbmNlIDwgY3VydmVfYW5nbGVfdG9sZXJhbmNlX2Vwc2lsb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgxMjM0LCB5MTIzNCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuZ2xlIENvbmRpdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgICAgICBkYTEgPSBNYXRoLmFicyhNYXRoLmF0YW4yKHk0IC0geTMsIHg0IC0geDMpIC0gTWF0aC5hdGFuMih5MyAtIHkyLCB4MyAtIHgyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhMSA+PSBwaSkgZGExID0gMipwaSAtIGRhMVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYTEgPCBtX2FuZ2xlX3RvbGVyYW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDIsIHkyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgzLCB5MykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1fY3VzcF9saW1pdCAhPT0gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGExID4gbV9jdXNwX2xpbWl0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MywgeTMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENvbGxpbmVhciBjYXNlXG4gICAgICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgZHggPSB4MTIzNCAtICh4MSArIHg0KSAvIDJcbiAgICAgICAgICAgICAgICAgICAgZHkgPSB5MTIzNCAtICh5MSArIHk0KSAvIDJcbiAgICAgICAgICAgICAgICAgICAgaWYoZHgqZHggKyBkeSpkeSA8PSBkaXN0YW5jZVRvbGVyYW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MTIzNCwgeTEyMzQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb250aW51ZSBzdWJkaXZpc2lvblxuICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgcmVjdXJzaXZlKHgxLCB5MSwgeDEyLCB5MTIsIHgxMjMsIHkxMjMsIHgxMjM0LCB5MTIzNCwgcG9pbnRzLCBkaXN0YW5jZVRvbGVyYW5jZSwgbGV2ZWwgKyAxKSBcbiAgICAgICAgcmVjdXJzaXZlKHgxMjM0LCB5MTIzNCwgeDIzNCwgeTIzNCwgeDM0LCB5MzQsIHg0LCB5NCwgcG9pbnRzLCBkaXN0YW5jZVRvbGVyYW5jZSwgbGV2ZWwgKyAxKSBcbiAgICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZnVuY3Rpb24nKSgpIiwiXCJ1c2Ugc3RyaWN0XCJcclxuXHJcbnZhciBhYnMgPSBNYXRoLmFic1xyXG4gICwgbWluID0gTWF0aC5taW5cclxuXHJcbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIGFic29sdXRlRXJyb3IsIHJlbGF0aXZlRXJyb3IpIHtcclxuICB2YXIgZCA9IGFicyhhIC0gYilcclxuICBcclxuICBpZiAoYWJzb2x1dGVFcnJvciA9PSBudWxsKSBhYnNvbHV0ZUVycm9yID0gYWxtb3N0RXF1YWwuREJMX0VQU0lMT047XHJcbiAgaWYgKHJlbGF0aXZlRXJyb3IgPT0gbnVsbCkgcmVsYXRpdmVFcnJvciA9IGFic29sdXRlRXJyb3I7XHJcbiAgXHJcbiAgaWYoZCA8PSBhYnNvbHV0ZUVycm9yKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZihkIDw9IHJlbGF0aXZlRXJyb3IgKiBtaW4oYWJzKGEpLCBhYnMoYikpKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICByZXR1cm4gYSA9PT0gYlxyXG59XHJcblxyXG5hbG1vc3RFcXVhbC5GTFRfRVBTSUxPTiA9IDEuMTkyMDkyOTBlLTdcclxuYWxtb3N0RXF1YWwuREJMX0VQU0lMT04gPSAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGFsbW9zdEVxdWFsXHJcbiIsInZhciBzdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gYW5BcnJheVxuXG5mdW5jdGlvbiBhbkFycmF5KGFycikge1xuICByZXR1cm4gKFxuICAgICAgIGFyci5CWVRFU19QRVJfRUxFTUVOVFxuICAgICYmIHN0ci5jYWxsKGFyci5idWZmZXIpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nXG4gICAgfHwgQXJyYXkuaXNBcnJheShhcnIpXG4gIClcbn1cbiIsInZhciBpc0FycmF5ID0gcmVxdWlyZSgnYW4tYXJyYXknKVxudmFyIGFsbW9zdCA9IHJlcXVpcmUoJ2FsbW9zdC1lcXVhbCcpXG5cbi8vZGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBhcnJheXMgYXJlIGFsbW9zdCBlcXVhbFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihhLCBiLCBhYnNvbHV0ZVRvbGVyYW5jZSwgcmVsYXRpdmVUb2xlcmFuY2UpIHtcbiAgICAvL3dpbGwgYWNjZXB0IHR5cGVkIGFycmF5c1xuICAgIGlmICghYSB8fCAhYiB8fCAhaXNBcnJheShhKSB8fCAhaXNBcnJheShiKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHR5cGVvZiBhYnNvbHV0ZVRvbGVyYW5jZSAhPT0gJ251bWJlcicpXG4gICAgICAgIGFic29sdXRlVG9sZXJhbmNlID0gYWxtb3N0LkZMVF9FUFNJTE9OXG4gICAgaWYgKHR5cGVvZiByZWxhdGl2ZVRvbGVyYW5jZSAhPT0gJ251bWJlcicpXG4gICAgICAgIHJlbGF0aXZlVG9sZXJhbmNlID0gYWJzb2x1dGVUb2xlcmFuY2VcblxuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhKS5ldmVyeShmdW5jdGlvbihhMCwgaSkge1xuICAgICAgICB2YXIgYjAgPSBiW2ldXG4gICAgICAgIHJldHVybiBhMCA9PT0gYjAgfHwgYWxtb3N0KGEwLCBiMCwgYWJzb2x1dGVUb2xlcmFuY2UsIHJlbGF0aXZlVG9sZXJhbmNlKVxuICAgIH0pXG59IiwiXCJ1c2Ugc3RyaWN0XCJcblxudmFyIGFicyA9IE1hdGguYWJzXG4gICwgbWluID0gTWF0aC5taW5cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgYWJzb2x1dGVFcnJvciwgcmVsYXRpdmVFcnJvcikge1xuICB2YXIgZCA9IGFicyhhIC0gYilcbiAgaWYoZCA8PSBhYnNvbHV0ZUVycm9yKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZihkIDw9IHJlbGF0aXZlRXJyb3IgKiBtaW4oYWJzKGEpLCBhYnMoYikpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gYSA9PT0gYlxufVxuXG5hbG1vc3RFcXVhbC5GTFRfRVBTSUxPTiA9IDEuMTkyMDkyOTBlLTdcbmFsbW9zdEVxdWFsLkRCTF9FUFNJTE9OID0gMi4yMjA0NDYwNDkyNTAzMTMxZS0xNlxuXG5tb2R1bGUuZXhwb3J0cyA9IGFsbW9zdEVxdWFsXG4iLCJ2YXIgY3NzQ29sb3IgPSByZXF1aXJlKCcuL2xpYi9jc3MtY29sb3InKTtcbnZhciBuYW1lcyA9IHJlcXVpcmUoJy4vbGliL2Nzcy1jb2xvci1uYW1lcy5qc29uJyk7XG52YXIgcmdiTHVtaW5hbmNlID0gcmVxdWlyZSgnLi9saWIvcmVsYXRpdmUtbHVtaW5hbmNlJyk7XG52YXIgSFNMVXRpbCA9IHJlcXVpcmUoJy4vbGliL2hzbCcpO1xudmFyIGhleFRvUkdCQSA9IHJlcXVpcmUoJy4vbGliL2hleC10by1yZ2JhJyk7XG52YXIgUkdCQVRvSGV4ID0gcmVxdWlyZSgnLi9saWIvcmdiYS10by1oZXgnKTtcblxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBjc3NDb2xvci5wYXJzZTtcbm1vZHVsZS5leHBvcnRzLnN0eWxlID0gY3NzQ29sb3Iuc3R5bGU7XG5tb2R1bGUuZXhwb3J0cy5uYW1lcyA9IG5hbWVzO1xuXG5tb2R1bGUuZXhwb3J0cy5yZWxhdGl2ZUx1bWluYW5jZSA9IGZ1bmN0aW9uIHJlbGF0aXZlTHVtaW5hbmNlIChjb2xvcikge1xuICB2YXIgcmVzdWx0ID0gbW9kdWxlLmV4cG9ydHMucGFyc2UoY29sb3IpO1xuICBpZiAoIXJlc3VsdCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiByZ2JMdW1pbmFuY2UocmVzdWx0LnJnYik7XG59O1xuXG4vLyBFeHRyYWN0ZWQgZnJvbSBAdG1jdyAvIHdjYWctY29udHJhc3Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90bWN3L3djYWctY29udHJhc3Rcbm1vZHVsZS5leHBvcnRzLmNvbnRyYXN0UmF0aW8gPSBmdW5jdGlvbiBjb250cmFzdFJhdGlvIChjb2xvckEsIGNvbG9yQikge1xuICB2YXIgYSA9IG1vZHVsZS5leHBvcnRzLnJlbGF0aXZlTHVtaW5hbmNlKGNvbG9yQSk7XG4gIHZhciBiID0gbW9kdWxlLmV4cG9ydHMucmVsYXRpdmVMdW1pbmFuY2UoY29sb3JCKTtcbiAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBudWxsO1xuICB2YXIgbDEgPSBNYXRoLm1heChhLCBiKTtcbiAgdmFyIGwyID0gTWF0aC5taW4oYSwgYik7XG4gIHJldHVybiAobDEgKyAwLjA1KSAvIChsMiArIDAuMDUpO1xufTtcblxubW9kdWxlLmV4cG9ydHMub2Zmc2V0SFNMID0gZnVuY3Rpb24gKGNvbG9yLCBoLCBzLCBsKSB7XG4gIHZhciByZXN1bHQgPSBtb2R1bGUuZXhwb3J0cy5wYXJzZShjb2xvcik7XG4gIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgcmVzdWx0LmhzbGFbMF0gKz0gaCB8fCAwO1xuICByZXN1bHQuaHNsYVsxXSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgcmVzdWx0LmhzbGFbMV0gKyAocyB8fCAwKSkpO1xuICByZXN1bHQuaHNsYVsyXSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgcmVzdWx0LmhzbGFbMl0gKyAobCB8fCAwKSkpO1xuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMucGFyc2UoeyBoc2xhOiByZXN1bHQuaHNsYSB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLmJsZW5kID0gZnVuY3Rpb24gKGJhY2tncm91bmQsIGZvcmVncm91bmQsIG9wYWNpdHkpIHtcbiAgdmFyIGJnID0gbW9kdWxlLmV4cG9ydHMucGFyc2UoYmFja2dyb3VuZCk7XG4gIHZhciBmZyA9IG1vZHVsZS5leHBvcnRzLnBhcnNlKGZvcmVncm91bmQpO1xuICBpZiAoYmcgPT0gbnVsbCB8fCBmZyA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICB2YXIgYzAgPSBiZy5yZ2JhO1xuICB2YXIgYzEgPSBmZy5yZ2JhO1xuICBvcGFjaXR5ID0gdHlwZW9mIG9wYWNpdHkgPT09ICdudW1iZXInICYmIGlzRmluaXRlKG9wYWNpdHkpID8gb3BhY2l0eSA6IDEuMDtcbiAgdmFyIGFscGhhID0gb3BhY2l0eSAqIGMxWzNdO1xuICBpZiAoYWxwaGEgPj0gMSkge1xuICAgIC8vIGZvcmVncm91bmQgaXMgb3BhcXVlIHNvIG5vIGJsZW5kIHJlcXVpcmVkXG4gICAgcmV0dXJuIGZnO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgYzFbaV0gPSBjMVtpXSAqIGFscGhhICsgYzBbaV0gKiAoYzBbM10gKiAoMSAtIGFscGhhKSk7XG4gIH1cbiAgYzFbM10gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhbHBoYSArIGMwWzNdICogKDEgLSBhbHBoYSkpKTtcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzLnBhcnNlKGMxKTsgLy8gcmUtcGFyc2UgdG8gZ2V0IG5ldyBtZXRhZGF0YVxufTtcblxuLy8gRXhwb3NlZCBidXQgbm90IHlldCBkb2N1bWVudGVkXG5tb2R1bGUuZXhwb3J0cy5oZXhUb1JHQkEgPSBoZXhUb1JHQkE7XG5tb2R1bGUuZXhwb3J0cy5SR0JBVG9IZXggPSBSR0JBVG9IZXg7XG5tb2R1bGUuZXhwb3J0cy5SR0JBVG9IU0xBID0gSFNMVXRpbC5SR0JBVG9IU0xBO1xubW9kdWxlLmV4cG9ydHMuSFNMQVRvUkdCQSA9IEhTTFV0aWwuSFNMQVRvUkdCQTtcbiIsInZhciBsaW5lY2xpcCA9IHJlcXVpcmUoJ2xpbmVjbGlwJyk7XG52YXIgYWxtb3N0RXF1YWwgPSByZXF1aXJlKCdhbG1vc3QtZXF1YWwnKTtcbnZhciBhcnJheUFsbW9zdEVxdWFsID0gcmVxdWlyZSgnYXJyYXktYWxtb3N0LWVxdWFsJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCdjbG9uZScpO1xudmFyIHNxdWFyZWREaXN0YW5jZSA9IHJlcXVpcmUoJy4vbGliL3ZlYzInKS5zcXVhcmVkRGlzdGFuY2U7XG5cbm1vZHVsZS5leHBvcnRzLmFyZVBvaW50c0NvbGxpbmVhciA9IGZ1bmN0aW9uIChwb2ludDAsIHBvaW50MSwgcG9pbnQyKSB7XG4gIHZhciB4MCA9IHBvaW50MFswXTtcbiAgdmFyIHkwID0gcG9pbnQwWzFdO1xuICB2YXIgeDEgPSBwb2ludDFbMF07XG4gIHZhciB5MSA9IHBvaW50MVsxXTtcbiAgdmFyIHgyID0gcG9pbnQyWzBdO1xuICB2YXIgeTIgPSBwb2ludDJbMV07XG4gIHJldHVybiBhbG1vc3RFcXVhbCgoeTAgLSB5MSkgKiAoeDAgLSB4MiksICh5MCAtIHkyKSAqICh4MCAtIHgxKSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5yZW1vdmVEdXBsaWNhdGVQb2ludHMgPSBmdW5jdGlvbiAocGF0aCkge1xuICB2YXIgbmV3UGF0aCA9IFtdO1xuICB2YXIgbGFzdFBvaW50O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY3VyUG9pbnQgPSBwYXRoW2ldO1xuICAgIGlmICghbGFzdFBvaW50IHx8ICFhcnJheUFsbW9zdEVxdWFsKGxhc3RQb2ludCwgY3VyUG9pbnQpKSB7XG4gICAgICBuZXdQYXRoLnB1c2goY3VyUG9pbnQpO1xuICAgICAgbGFzdFBvaW50ID0gY3VyUG9pbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjbG9uZShuZXdQYXRoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnJlbW92ZUNvbGxpbmVhclBvaW50cyA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gIHZhciBuZXdQYXRoID0gW107XG4gIHZhciByZW1haW5pbmdQb2ludHMgPSBjbG9uZShwYXRoKTtcbiAgd2hpbGUgKHJlbWFpbmluZ1BvaW50cy5sZW5ndGggPj0gMykge1xuICAgIHZhciBwMCA9IHJlbWFpbmluZ1BvaW50c1swXTtcbiAgICB2YXIgcDEgPSByZW1haW5pbmdQb2ludHNbMV07XG4gICAgdmFyIHAyID0gcmVtYWluaW5nUG9pbnRzWzJdO1xuICAgIHZhciBjb2xsaW5lYXIgPSBtb2R1bGUuZXhwb3J0cy5hcmVQb2ludHNDb2xsaW5lYXIocDAsIHAxLCBwMik7XG4gICAgLy8gb25lIG1vcmUgY2hlY2sgaXMgdG8gZW5zdXJlIHRoYXQgcG9pbnRzIGFyZSBpbiBhIGxpbmU6XG4gICAgLy8gQS0+Qi0+Q1xuICAgIC8vIG5vdCBBLT5DLT5CIG9yIHNvbWUgdmFyaWFudFxuICAgIGlmIChjb2xsaW5lYXIpIHtcbiAgICAgIHZhciBkaXN0QUIgPSBzcXVhcmVkRGlzdGFuY2UocDAsIHAxKTtcbiAgICAgIHZhciBkaXN0QUMgPSBzcXVhcmVkRGlzdGFuY2UocDAsIHAyKTtcbiAgICAgIGlmIChkaXN0QUIgPiBkaXN0QUMpIGNvbGxpbmVhciA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY29sbGluZWFyKSB7XG4gICAgICAvLyB0aGUgZmlyc3QgMyBwb2ludHMgYXJlIGNvbGxpbmVhclxuICAgICAgLy8gcmVtb3ZlIHRoZSBzZWNvbmQgcG9pbnQgYXMgaXQgaXNuJ3QgbmVlZGVkXG4gICAgICByZW1haW5pbmdQb2ludHMuc3BsaWNlKDEsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGUgMyBwb2ludHMgYXJlIG5vdCBjb2xsaW5lYXJcbiAgICAgIC8vIGFkZCB0aGUgZmlyc3Qgb25lIGFzIHRoZSBvdGhlcnMgbWF5IHN0aWxsIGJlIGNvbGxpbmVhclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxOyBpKyspIHtcbiAgICAgICAgbmV3UGF0aC5wdXNoKHJlbWFpbmluZ1BvaW50cy5zaGlmdCgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gYWRkIGFueSByZW1haW5pbmcgcG9pbnRzXG4gIHdoaWxlIChyZW1haW5pbmdQb2ludHMubGVuZ3RoKSB7XG4gICAgbmV3UGF0aC5wdXNoKHJlbWFpbmluZ1BvaW50cy5zaGlmdCgpKTtcbiAgfVxuICByZXR1cm4gbmV3UGF0aDtcbn07XG5cbm1vZHVsZS5leHBvcnRzLmNsaXBTZWdtZW50VG9DaXJjbGUgPSByZXF1aXJlKCcuL2xpYi9jbGlwL2NsaXAtc2VnbWVudC10by1jaXJjbGUnKTtcbm1vZHVsZS5leHBvcnRzLmNsaXBMaW5lVG9DaXJjbGUgPSByZXF1aXJlKCcuL2xpYi9jbGlwL2NsaXAtbGluZS10by1jaXJjbGUnKTtcblxubW9kdWxlLmV4cG9ydHMuY2xpcFBvbHlsaW5lc1RvQm94ID0gZnVuY3Rpb24gKHBvbHlsaW5lcywgYmJveCwgYm9yZGVyLCBjbG9zZUxpbmVzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShiYm94KSB8fCAoYmJveC5sZW5ndGggIT09IDIgJiYgYmJveC5sZW5ndGggIT09IDQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBib3ggdG8gZWl0aGVyIGJlIGZvcm1hdCBbIG1pblBvaW50LCBtYXhQb2ludCBdIG9yIFsgbWluWCwgbWluWSwgbWF4WCwgbWF4WSBdJyk7XG4gIH1cbiAgLy8gRXhwYW5kIG5lc3RlZCBmb3JtYXQgdG8gZmxhdCBib3VuZHNcbiAgaWYgKGJib3gubGVuZ3RoID09PSAyKSB7XG4gICAgdmFyIG1pbiA9IGJib3hbMF07XG4gICAgdmFyIG1heCA9IGJib3hbMV07XG4gICAgYmJveCA9IFsgbWluWzBdLCBtaW5bMV0sIG1heFswXSwgbWF4WzFdIF07XG4gIH1cbiAgY2xvc2VMaW5lcyA9IGNsb3NlTGluZXMgIT09IGZhbHNlO1xuICBib3JkZXIgPSBCb29sZWFuKGJvcmRlcik7XG5cbiAgaWYgKGJvcmRlcikge1xuICAgIHJldHVybiBwb2x5bGluZXMubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbGluZWNsaXAucG9seWdvbihsaW5lLCBiYm94KTtcbiAgICAgIGlmIChjbG9zZUxpbmVzICYmIHJlc3VsdC5sZW5ndGggPiAyKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdFswXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pLmZpbHRlcihmdW5jdGlvbiAobGluZXMpIHtcbiAgICAgIHJldHVybiBsaW5lcy5sZW5ndGggPiAwO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwb2x5bGluZXMubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICByZXR1cm4gbGluZWNsaXAucG9seWxpbmUobGluZSwgYmJveCk7XG4gICAgfSkucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS5jb25jYXQoYik7XG4gICAgfSwgW10pO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVIYXRjaExpbmVzID0gY3JlYXRlSGF0Y2hMaW5lcztcbmZ1bmN0aW9uIGNyZWF0ZUhhdGNoTGluZXMgKGJvdW5kcywgYW5nbGUsIHNwYWNpbmcsIG91dCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYm91bmRzKSB8fCAoYm91bmRzLmxlbmd0aCAhPT0gMiAmJiBib3VuZHMubGVuZ3RoICE9PSA0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYm94IHRvIGVpdGhlciBiZSBmb3JtYXQgWyBtaW5Qb2ludCwgbWF4UG9pbnQgXSBvciBbIG1pblgsIG1pblksIG1heFgsIG1heFkgXScpO1xuICB9XG4gIC8vIEV4cGFuZCBuZXN0ZWQgZm9ybWF0IHRvIGZsYXQgYm91bmRzXG4gIGlmIChib3VuZHMubGVuZ3RoID09PSAyKSB7XG4gICAgdmFyIG1pbiA9IGJvdW5kc1swXTtcbiAgICB2YXIgbWF4ID0gYm91bmRzWzFdO1xuICAgIGJvdW5kcyA9IFsgbWluWzBdLCBtaW5bMV0sIG1heFswXSwgbWF4WzFdIF07XG4gIH1cblxuICBpZiAoYW5nbGUgPT0gbnVsbCkgYW5nbGUgPSAtTWF0aC5QSSAvIDQ7XG4gIGlmIChzcGFjaW5nID09IG51bGwpIHNwYWNpbmcgPSAwLjU7XG4gIGlmIChvdXQgPT0gbnVsbCkgb3V0ID0gW107XG5cbiAgLy8gUmVmZXJlbmNlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXZpbC1tYWQvRWdnQm90L2Jsb2IvbWFzdGVyL2lua3NjYXBlX2RyaXZlci9lZ2dib3RfaGF0Y2gucHlcbiAgc3BhY2luZyA9IE1hdGguYWJzKHNwYWNpbmcpO1xuICBpZiAoc3BhY2luZyA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgdXNlIGEgc3BhY2luZyBvZiB6ZXJvIGFzIGl0IHdpbGwgcnVuIGFuIGluZmluaXRlIGxvb3AhJyk7XG5cbiAgdmFyIHhtaW4gPSBib3VuZHNbMF07XG4gIHZhciB5bWluID0gYm91bmRzWzFdO1xuICB2YXIgeG1heCA9IGJvdW5kc1syXTtcbiAgdmFyIHltYXggPSBib3VuZHNbM107XG5cbiAgdmFyIHcgPSB4bWF4IC0geG1pbjtcbiAgdmFyIGggPSB5bWF4IC0geW1pbjtcbiAgaWYgKHcgPT09IDAgfHwgaCA9PT0gMCkgcmV0dXJuIG91dDtcbiAgdmFyIHIgPSBNYXRoLnNxcnQodyAqIHcgKyBoICogaCkgLyAyO1xuICB2YXIgcm90QW5nbGUgPSBNYXRoLlBJIC8gMiAtIGFuZ2xlO1xuICB2YXIgY2EgPSBNYXRoLmNvcyhyb3RBbmdsZSk7XG4gIHZhciBzYSA9IE1hdGguc2luKHJvdEFuZ2xlKTtcbiAgdmFyIGN4ID0geG1pbiArICh3IC8gMik7XG4gIHZhciBjeSA9IHltaW4gKyAoaCAvIDIpO1xuICB2YXIgaSA9IC1yO1xuICB3aGlsZSAoaSA8PSByKSB7XG4gICAgLy8gTGluZSBzdGFydHMgYXQgKGksIC1yKSBhbmQgZ29lcyB0byAoaSwgK3IpXG4gICAgdmFyIHgxID0gY3ggKyAoaSAqIGNhKSArIChyICogc2EpOyAvLyAgaSAqIGNhIC0gKC1yKSAqIHNhXG4gICAgdmFyIHkxID0gY3kgKyAoaSAqIHNhKSAtIChyICogY2EpOyAvLyAgaSAqIHNhICsgKC1yKSAqIGNhXG4gICAgdmFyIHgyID0gY3ggKyAoaSAqIGNhKSAtIChyICogc2EpOyAvLyAgaSAqIGNhIC0gKCtyKSAqIHNhXG4gICAgdmFyIHkyID0gY3kgKyAoaSAqIHNhKSArIChyICogY2EpOyAvLyAgaSAqIHNhICsgKCtyKSAqIGNhXG4gICAgaSArPSBzcGFjaW5nO1xuICAgIC8vIFJlbW92ZSBhbnkgcG90ZW50aWFsIGhhdGNoIGxpbmVzIHdoaWNoIGFyZSBlbnRpcmVseVxuICAgIC8vIG91dHNpZGUgb2YgdGhlIGJvdW5kaW5nIGJveFxuICAgIGlmICgoeDEgPCB4bWluICYmIHgyIDwgeG1pbikgfHwgKHgxID4geG1heCAmJiB4MiA+IHhtYXgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCh5MSA8IHltaW4gJiYgeTIgPCB5bWluKSB8fCAoeTEgPiB5bWF4ICYmIHkyID4geW1heCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBvdXQucHVzaChbIFsgeDEsIHkxIF0sIFsgeDIsIHkyIF0gXSk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxubW9kdWxlLmV4cG9ydHMuZ2V0Qm91bmRzID0gZnVuY3Rpb24gZ2V0Qm91bmRzIChwb2ludHMpIHtcbiAgdmFyIG4gPSBwb2ludHMubGVuZ3RoO1xuICBpZiAobiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcG9pbnRzIHRvIGJlIGEgbm9uLWVtcHR5IGFycmF5Jyk7XG4gIH1cbiAgdmFyIGQgPSBwb2ludHNbMF0ubGVuZ3RoO1xuICB2YXIgbG8gPSBwb2ludHNbMF0uc2xpY2UoKTtcbiAgdmFyIGhpID0gcG9pbnRzWzBdLnNsaWNlKCk7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbjsgKytpKSB7XG4gICAgdmFyIHAgPSBwb2ludHNbaV07XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBkOyArK2opIHtcbiAgICAgIHZhciB4ID0gcFtqXTtcbiAgICAgIGxvW2pdID0gTWF0aC5taW4obG9bal0sIHgpO1xuICAgICAgaGlbal0gPSBNYXRoLm1heChoaVtqXSwgeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbIGxvLCBoaSBdO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICByYW5kb206IHJlcXVpcmUoJy4vcmFuZG9tJyksXG4gIG1hdGg6IHJlcXVpcmUoJy4vbWF0aCcpLFxuICBwZW5wbG90OiByZXF1aXJlKCcuL3BlbnBsb3QuanMnKSxcbiAgZ2VvbWV0cnk6IHJlcXVpcmUoJy4vZ2VvbWV0cnkuanMnKSxcbiAgc2hhZGVyOiByZXF1aXJlKCcuL3NoYWRlci5qcycpLFxuICBjb2xvcjogcmVxdWlyZSgnLi9jb2xvci5qcycpXG59O1xuIiwidmFyIGFsbW9zdEVxdWFsID0gcmVxdWlyZSgnYWxtb3N0LWVxdWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJzZWN0TGluZUNpcmNsZTtcbmZ1bmN0aW9uIGludGVyc2VjdExpbmVDaXJjbGUgKHAwLCBwMSwgY2lyY2xlLCBjaXJjbGVSYWRpdXMsIGhpdHMpIHtcbiAgaWYgKGhpdHMgPT0gbnVsbCkgaGl0cyA9IFtdO1xuICB2YXIgYSA9IHNxcihwMVswXSAtIHAwWzBdKSArIHNxcihwMVsxXSAtIHAwWzFdKTtcbiAgdmFyIGIgPSAyLjAgKiAoXG4gICAgKHAxWzBdIC0gcDBbMF0pICogKHAwWzBdIC0gY2lyY2xlWzBdKSArXG4gICAgKHAxWzFdIC0gcDBbMV0pICogKHAwWzFdIC0gY2lyY2xlWzFdKVxuICApO1xuXG4gIHZhciBjID0gc3FyKGNpcmNsZVswXSkgKyBzcXIoY2lyY2xlWzFdKSArIHNxcihwMFswXSkgK1xuICAgIHNxcihwMFsxXSkgLSAyICogKGNpcmNsZVswXSAqIHAwWzBdICsgY2lyY2xlWzFdICogcDBbMV0pIC1cbiAgICBzcXIoY2lyY2xlUmFkaXVzKTtcblxuICB2YXIgZGV0ID0gYiAqIGIgLSA0LjAgKiBhICogYztcbiAgdmFyIGRlbHRhO1xuICBpZiAoZGV0IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChhbG1vc3RFcXVhbChkZXQsIDAuMCkpIHtcbiAgICBkZWx0YSA9IC1iIC8gKDIuMCAqIGEpO1xuICAgIGhpdHMucHVzaChbXG4gICAgICBwMFswXSArIGRlbHRhICogKHAxWzBdIC0gcDBbMF0pLFxuICAgICAgcDBbMV0gKyBkZWx0YSAqIChwMVsxXSAtIHAwWzFdKVxuICAgIF0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGRldCA+IDAuMCkge1xuICAgIHZhciBzcXJ0RGV0ID0gTWF0aC5zcXJ0KGRldCk7XG4gICAgZGVsdGEgPSAoLWIgKyBzcXJ0RGV0KSAvICgyLjAgKiBhKTtcblxuICAgIGhpdHMucHVzaChbXG4gICAgICBwMFswXSArIGRlbHRhICogKHAxWzBdIC0gcDBbMF0pLFxuICAgICAgcDBbMV0gKyBkZWx0YSAqIChwMVsxXSAtIHAwWzFdKVxuICAgIF0pO1xuXG4gICAgZGVsdGEgPSAoLWIgLSBzcXJ0RGV0KSAvICgyLjAgKiBhKTtcbiAgICBoaXRzLnB1c2goW1xuICAgICAgcDBbMF0gKyBkZWx0YSAqIChwMVswXSAtIHAwWzBdKSxcbiAgICAgIHAwWzFdICsgZGVsdGEgKiAocDFbMV0gLSBwMFsxXSlcbiAgICBdKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc3FyIChhKSB7XG4gIHJldHVybiBhICogYTtcbn1cbiIsInZhciBhbG1vc3RFcXVhbCA9IHJlcXVpcmUoJ2FsbW9zdC1lcXVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyc2VjdFNlZ21lbnRDaXJjbGU7XG5mdW5jdGlvbiBpbnRlcnNlY3RTZWdtZW50Q2lyY2xlIChwMCwgcDEsIGNpcmNsZSwgY2lyY2xlUmFkaXVzLCBoaXRzKSB7XG4gIHJldHVybiBpbnRlcnNlY3QocDBbMF0sIHAwWzFdLCBwMVswXSwgcDFbMV0sIGNpcmNsZVswXSwgY2lyY2xlWzFdLCBjaXJjbGVSYWRpdXMsIGhpdHMpO1xufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3QgKHgxLCB5MSwgeDIsIHkyLCBjeCwgY3ksIHJhZGl1cywgaGl0cykge1xuICBpZiAoaGl0cyA9PSBudWxsKSBoaXRzID0gW107XG4gIHZhciBwMUluQ2lyY2xlID0gcG9pbnRJbkNpcmNsZSh4MSwgeTEsIGN4LCBjeSwgcmFkaXVzKTtcbiAgdmFyIHAySW5DaXJjbGUgPSBwb2ludEluQ2lyY2xlKHgyLCB5MiwgY3gsIGN5LCByYWRpdXMpO1xuXG4gIGlmIChwMUluQ2lyY2xlICYmIHAySW5DaXJjbGUpIHtcbiAgICBoaXRzLnB1c2goWyB4MSwgeTEgXSk7XG4gICAgaGl0cy5wdXNoKFsgeDIsIHkyIF0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIGgsIGEsIGNsb3Nlc3RQb2ludCwgcHgsIHB5O1xuICBpZiAocDFJbkNpcmNsZSB8fCBwMkluQ2lyY2xlKSB7XG4gICAgY2xvc2VzdFBvaW50ID0gY2xvc2VzdFBvaW50T25MaW5lRnJvbVBvaW50KHgxLCB5MSwgeDIsIHkyLCBjeCwgY3kpO1xuICAgIHB4ID0gY2xvc2VzdFBvaW50WzBdO1xuICAgIHB5ID0gY2xvc2VzdFBvaW50WzFdO1xuICAgIGggPSBkaXN0YW5jZShweCwgcHksIGN4LCBjeSk7XG4gICAgYSA9IE1hdGguc3FydCgocmFkaXVzICogcmFkaXVzKSAtIChoICogaCkpO1xuICAgIHZhciBoaXRBID0gcDFJbkNpcmNsZSA/IFsgeDEsIHkxIF0gOiBbIHgyLCB5MiBdO1xuICAgIHZhciBoaXRCID0gcDFJbkNpcmNsZSA/IHByb2plY3RQb2ludChweCwgcHksIHgyLCB5MiwgYSkgOiBwcm9qZWN0UG9pbnQocHgsIHB5LCB4MSwgeTEsIGEpO1xuICAgIGlmIChhbG1vc3RFcXVhbChoaXRBWzBdLCBoaXRCWzBdKSAmJiBhbG1vc3RFcXVhbChoaXRBWzFdLCBoaXRCWzFdKSkge1xuICAgICAgLy8gT25lIHBvaW50IGluIHRoZSBzZWdtZW50IGxpZXMgb24gdGhlIGNpcmNsZSwgdGhlIG90aGVyIGlzIG91dHNpZGVcbiAgICAgIGhpdHMucHVzaChoaXRBKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBoaXRzLnB1c2goaGl0QSk7XG4gICAgaGl0cy5wdXNoKGhpdEIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2xvc2VzdFBvaW50ID0gY2xvc2VzdFBvaW50T25TZWdtZW50RnJvbVBvaW50KHgxLCB5MSwgeDIsIHkyLCBjeCwgY3kpO1xuICBweCA9IGNsb3Nlc3RQb2ludFswXTtcbiAgcHkgPSBjbG9zZXN0UG9pbnRbMV07XG5cbiAgaWYgKChhbG1vc3RFcXVhbCh4MSwgcHgpICYmIGFsbW9zdEVxdWFsKHkxLCBweSkpIHx8XG4gICAgICAoYWxtb3N0RXF1YWwoeDIsIHB4KSAmJiBhbG1vc3RFcXVhbCh5MiwgcHkpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBoID0gZGlzdGFuY2UocHgsIHB5LCBjeCwgY3kpO1xuICAgIGlmIChoID4gcmFkaXVzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChhbG1vc3RFcXVhbChoLCByYWRpdXMpKSB7XG4gICAgICBoaXRzLnB1c2goWyBweCwgcHkgXSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGFsbW9zdEVxdWFsKGgsIDAuMCkpIHtcbiAgICAgIGhpdHMucHVzaChwcm9qZWN0UG9pbnQoY3gsIGN5LCB4MSwgeTEsIHJhZGl1cykpO1xuICAgICAgaGl0cy5wdXNoKHByb2plY3RQb2ludChjeCwgY3ksIHgyLCB5MiwgcmFkaXVzKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IE1hdGguc3FydCgocmFkaXVzICogcmFkaXVzKSAtIChoICogaCkpO1xuICAgICAgaGl0cy5wdXNoKHByb2plY3RQb2ludChweCwgcHksIHgxLCB5MSwgYSkpO1xuICAgICAgaGl0cy5wdXNoKHByb2plY3RQb2ludChweCwgcHksIHgyLCB5MiwgYSkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGxheURpc3RhbmNlICh4MSwgeTEsIHgyLCB5Mikge1xuICB2YXIgZHggPSAoeDIgLSB4MSk7XG4gIHZhciBkeSA9ICh5MiAtIHkxKTtcbiAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xufVxuXG5mdW5jdGlvbiBwb2ludEluQ2lyY2xlIChweCwgcHksIGN4LCBjeSwgcmFkaXVzKSB7XG4gIHJldHVybiBsYXlEaXN0YW5jZShweCwgcHksIGN4LCBjeSkgPD0gKHJhZGl1cyAqIHJhZGl1cyk7XG59XG5cbmZ1bmN0aW9uIGRpc3RhbmNlICh4MSwgeTEsIHgyLCB5Mikge1xuICB2YXIgZHggPSAoeDEgLSB4Mik7XG4gIHZhciBkeSA9ICh5MSAtIHkyKTtcbiAgcmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG59XG5cbmZ1bmN0aW9uIHByb2plY3RQb2ludCAoc3JjeCwgc3JjeSwgZGVzdHgsIGRlc3R5LCBkaXN0KSB7XG4gIHZhciB0ID0gZGlzdCAvIGRpc3RhbmNlKHNyY3gsIHNyY3ksIGRlc3R4LCBkZXN0eSk7XG4gIHJldHVybiBbXG4gICAgc3JjeCArIHQgKiAoZGVzdHggLSBzcmN4KSxcbiAgICBzcmN5ICsgdCAqIChkZXN0eSAtIHNyY3kpXG4gIF07XG59XG5cbmZ1bmN0aW9uIGNsb3Nlc3RQb2ludE9uTGluZUZyb21Qb2ludCAoeDEsIHkxLCB4MiwgeTIsIHB4LCBweSkge1xuICB2YXIgdnggPSB4MiAtIHgxO1xuICB2YXIgdnkgPSB5MiAtIHkxO1xuICB2YXIgd3ggPSBweCAtIHgxO1xuICB2YXIgd3kgPSBweSAtIHkxO1xuICB2YXIgYzEgPSB2eCAqIHd4ICsgdnkgKiB3eTtcbiAgdmFyIGMyID0gdnggKiB2eCArIHZ5ICogdnk7XG4gIHZhciByYXRpbyA9IGMxIC8gYzI7XG4gIHJldHVybiBbXG4gICAgeDEgKyByYXRpbyAqIHZ4LFxuICAgIHkxICsgcmF0aW8gKiB2eVxuICBdO1xufVxuXG5mdW5jdGlvbiBjbG9zZXN0UG9pbnRPblNlZ21lbnRGcm9tUG9pbnQgKHgxLCB5MSwgeDIsIHkyLCBweCwgcHkpIHtcbiAgdmFyIHZ4ID0geDIgLSB4MTtcbiAgdmFyIHZ5ID0geTIgLSB5MTtcbiAgdmFyIHd4ID0gcHggLSB4MTtcbiAgdmFyIHd5ID0gcHkgLSB5MTtcblxuICB2YXIgYzEgPSB2eCAqIHd4ICsgdnkgKiB3eTtcblxuICBpZiAoYzEgPD0gMC4wKSB7XG4gICAgcmV0dXJuIFsgeDEsIHkxIF07XG4gIH1cblxuICB2YXIgYzIgPSB2eCAqIHZ4ICsgdnkgKiB2eTtcbiAgaWYgKGMyIDw9IGMxKSB7XG4gICAgcmV0dXJuIFsgeDIsIHkyIF07XG4gIH1cblxuICB2YXIgcmF0aW8gPSBjMSAvIGMyO1xuICByZXR1cm4gW1xuICAgIHgxICsgcmF0aW8gKiB2eCxcbiAgICB5MSArIHJhdGlvICogdnlcbiAgXTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJhbGljZWJsdWVcIjogXCIjZjBmOGZmXCIsXG4gIFwiYW50aXF1ZXdoaXRlXCI6IFwiI2ZhZWJkN1wiLFxuICBcImFxdWFcIjogXCIjMDBmZmZmXCIsXG4gIFwiYXF1YW1hcmluZVwiOiBcIiM3ZmZmZDRcIixcbiAgXCJhenVyZVwiOiBcIiNmMGZmZmZcIixcbiAgXCJiZWlnZVwiOiBcIiNmNWY1ZGNcIixcbiAgXCJiaXNxdWVcIjogXCIjZmZlNGM0XCIsXG4gIFwiYmxhY2tcIjogXCIjMDAwMDAwXCIsXG4gIFwiYmxhbmNoZWRhbG1vbmRcIjogXCIjZmZlYmNkXCIsXG4gIFwiYmx1ZVwiOiBcIiMwMDAwZmZcIixcbiAgXCJibHVldmlvbGV0XCI6IFwiIzhhMmJlMlwiLFxuICBcImJyb3duXCI6IFwiI2E1MmEyYVwiLFxuICBcImJ1cmx5d29vZFwiOiBcIiNkZWI4ODdcIixcbiAgXCJjYWRldGJsdWVcIjogXCIjNWY5ZWEwXCIsXG4gIFwiY2hhcnRyZXVzZVwiOiBcIiM3ZmZmMDBcIixcbiAgXCJjaG9jb2xhdGVcIjogXCIjZDI2OTFlXCIsXG4gIFwiY29yYWxcIjogXCIjZmY3ZjUwXCIsXG4gIFwiY29ybmZsb3dlcmJsdWVcIjogXCIjNjQ5NWVkXCIsXG4gIFwiY29ybnNpbGtcIjogXCIjZmZmOGRjXCIsXG4gIFwiY3JpbXNvblwiOiBcIiNkYzE0M2NcIixcbiAgXCJjeWFuXCI6IFwiIzAwZmZmZlwiLFxuICBcImRhcmtibHVlXCI6IFwiIzAwMDA4YlwiLFxuICBcImRhcmtjeWFuXCI6IFwiIzAwOGI4YlwiLFxuICBcImRhcmtnb2xkZW5yb2RcIjogXCIjYjg4NjBiXCIsXG4gIFwiZGFya2dyYXlcIjogXCIjYTlhOWE5XCIsXG4gIFwiZGFya2dyZWVuXCI6IFwiIzAwNjQwMFwiLFxuICBcImRhcmtncmV5XCI6IFwiI2E5YTlhOVwiLFxuICBcImRhcmtraGFraVwiOiBcIiNiZGI3NmJcIixcbiAgXCJkYXJrbWFnZW50YVwiOiBcIiM4YjAwOGJcIixcbiAgXCJkYXJrb2xpdmVncmVlblwiOiBcIiM1NTZiMmZcIixcbiAgXCJkYXJrb3JhbmdlXCI6IFwiI2ZmOGMwMFwiLFxuICBcImRhcmtvcmNoaWRcIjogXCIjOTkzMmNjXCIsXG4gIFwiZGFya3JlZFwiOiBcIiM4YjAwMDBcIixcbiAgXCJkYXJrc2FsbW9uXCI6IFwiI2U5OTY3YVwiLFxuICBcImRhcmtzZWFncmVlblwiOiBcIiM4ZmJjOGZcIixcbiAgXCJkYXJrc2xhdGVibHVlXCI6IFwiIzQ4M2Q4YlwiLFxuICBcImRhcmtzbGF0ZWdyYXlcIjogXCIjMmY0ZjRmXCIsXG4gIFwiZGFya3NsYXRlZ3JleVwiOiBcIiMyZjRmNGZcIixcbiAgXCJkYXJrdHVycXVvaXNlXCI6IFwiIzAwY2VkMVwiLFxuICBcImRhcmt2aW9sZXRcIjogXCIjOTQwMGQzXCIsXG4gIFwiZGVlcHBpbmtcIjogXCIjZmYxNDkzXCIsXG4gIFwiZGVlcHNreWJsdWVcIjogXCIjMDBiZmZmXCIsXG4gIFwiZGltZ3JheVwiOiBcIiM2OTY5NjlcIixcbiAgXCJkaW1ncmV5XCI6IFwiIzY5Njk2OVwiLFxuICBcImRvZGdlcmJsdWVcIjogXCIjMWU5MGZmXCIsXG4gIFwiZmlyZWJyaWNrXCI6IFwiI2IyMjIyMlwiLFxuICBcImZsb3JhbHdoaXRlXCI6IFwiI2ZmZmFmMFwiLFxuICBcImZvcmVzdGdyZWVuXCI6IFwiIzIyOGIyMlwiLFxuICBcImZ1Y2hzaWFcIjogXCIjZmYwMGZmXCIsXG4gIFwiZ2FpbnNib3JvXCI6IFwiI2RjZGNkY1wiLFxuICBcImdob3N0d2hpdGVcIjogXCIjZjhmOGZmXCIsXG4gIFwiZ29sZFwiOiBcIiNmZmQ3MDBcIixcbiAgXCJnb2xkZW5yb2RcIjogXCIjZGFhNTIwXCIsXG4gIFwiZ3JheVwiOiBcIiM4MDgwODBcIixcbiAgXCJncmVlblwiOiBcIiMwMDgwMDBcIixcbiAgXCJncmVlbnllbGxvd1wiOiBcIiNhZGZmMmZcIixcbiAgXCJncmV5XCI6IFwiIzgwODA4MFwiLFxuICBcImhvbmV5ZGV3XCI6IFwiI2YwZmZmMFwiLFxuICBcImhvdHBpbmtcIjogXCIjZmY2OWI0XCIsXG4gIFwiaW5kaWFucmVkXCI6IFwiI2NkNWM1Y1wiLFxuICBcImluZGlnb1wiOiBcIiM0YjAwODJcIixcbiAgXCJpdm9yeVwiOiBcIiNmZmZmZjBcIixcbiAgXCJraGFraVwiOiBcIiNmMGU2OGNcIixcbiAgXCJsYXZlbmRlclwiOiBcIiNlNmU2ZmFcIixcbiAgXCJsYXZlbmRlcmJsdXNoXCI6IFwiI2ZmZjBmNVwiLFxuICBcImxhd25ncmVlblwiOiBcIiM3Y2ZjMDBcIixcbiAgXCJsZW1vbmNoaWZmb25cIjogXCIjZmZmYWNkXCIsXG4gIFwibGlnaHRibHVlXCI6IFwiI2FkZDhlNlwiLFxuICBcImxpZ2h0Y29yYWxcIjogXCIjZjA4MDgwXCIsXG4gIFwibGlnaHRjeWFuXCI6IFwiI2UwZmZmZlwiLFxuICBcImxpZ2h0Z29sZGVucm9keWVsbG93XCI6IFwiI2ZhZmFkMlwiLFxuICBcImxpZ2h0Z3JheVwiOiBcIiNkM2QzZDNcIixcbiAgXCJsaWdodGdyZWVuXCI6IFwiIzkwZWU5MFwiLFxuICBcImxpZ2h0Z3JleVwiOiBcIiNkM2QzZDNcIixcbiAgXCJsaWdodHBpbmtcIjogXCIjZmZiNmMxXCIsXG4gIFwibGlnaHRzYWxtb25cIjogXCIjZmZhMDdhXCIsXG4gIFwibGlnaHRzZWFncmVlblwiOiBcIiMyMGIyYWFcIixcbiAgXCJsaWdodHNreWJsdWVcIjogXCIjODdjZWZhXCIsXG4gIFwibGlnaHRzbGF0ZWdyYXlcIjogXCIjNzc4ODk5XCIsXG4gIFwibGlnaHRzbGF0ZWdyZXlcIjogXCIjNzc4ODk5XCIsXG4gIFwibGlnaHRzdGVlbGJsdWVcIjogXCIjYjBjNGRlXCIsXG4gIFwibGlnaHR5ZWxsb3dcIjogXCIjZmZmZmUwXCIsXG4gIFwibGltZVwiOiBcIiMwMGZmMDBcIixcbiAgXCJsaW1lZ3JlZW5cIjogXCIjMzJjZDMyXCIsXG4gIFwibGluZW5cIjogXCIjZmFmMGU2XCIsXG4gIFwibWFnZW50YVwiOiBcIiNmZjAwZmZcIixcbiAgXCJtYXJvb25cIjogXCIjODAwMDAwXCIsXG4gIFwibWVkaXVtYXF1YW1hcmluZVwiOiBcIiM2NmNkYWFcIixcbiAgXCJtZWRpdW1ibHVlXCI6IFwiIzAwMDBjZFwiLFxuICBcIm1lZGl1bW9yY2hpZFwiOiBcIiNiYTU1ZDNcIixcbiAgXCJtZWRpdW1wdXJwbGVcIjogXCIjOTM3MGRiXCIsXG4gIFwibWVkaXVtc2VhZ3JlZW5cIjogXCIjM2NiMzcxXCIsXG4gIFwibWVkaXVtc2xhdGVibHVlXCI6IFwiIzdiNjhlZVwiLFxuICBcIm1lZGl1bXNwcmluZ2dyZWVuXCI6IFwiIzAwZmE5YVwiLFxuICBcIm1lZGl1bXR1cnF1b2lzZVwiOiBcIiM0OGQxY2NcIixcbiAgXCJtZWRpdW12aW9sZXRyZWRcIjogXCIjYzcxNTg1XCIsXG4gIFwibWlkbmlnaHRibHVlXCI6IFwiIzE5MTk3MFwiLFxuICBcIm1pbnRjcmVhbVwiOiBcIiNmNWZmZmFcIixcbiAgXCJtaXN0eXJvc2VcIjogXCIjZmZlNGUxXCIsXG4gIFwibW9jY2FzaW5cIjogXCIjZmZlNGI1XCIsXG4gIFwibmF2YWpvd2hpdGVcIjogXCIjZmZkZWFkXCIsXG4gIFwibmF2eVwiOiBcIiMwMDAwODBcIixcbiAgXCJvbGRsYWNlXCI6IFwiI2ZkZjVlNlwiLFxuICBcIm9saXZlXCI6IFwiIzgwODAwMFwiLFxuICBcIm9saXZlZHJhYlwiOiBcIiM2YjhlMjNcIixcbiAgXCJvcmFuZ2VcIjogXCIjZmZhNTAwXCIsXG4gIFwib3JhbmdlcmVkXCI6IFwiI2ZmNDUwMFwiLFxuICBcIm9yY2hpZFwiOiBcIiNkYTcwZDZcIixcbiAgXCJwYWxlZ29sZGVucm9kXCI6IFwiI2VlZThhYVwiLFxuICBcInBhbGVncmVlblwiOiBcIiM5OGZiOThcIixcbiAgXCJwYWxldHVycXVvaXNlXCI6IFwiI2FmZWVlZVwiLFxuICBcInBhbGV2aW9sZXRyZWRcIjogXCIjZGI3MDkzXCIsXG4gIFwicGFwYXlhd2hpcFwiOiBcIiNmZmVmZDVcIixcbiAgXCJwZWFjaHB1ZmZcIjogXCIjZmZkYWI5XCIsXG4gIFwicGVydVwiOiBcIiNjZDg1M2ZcIixcbiAgXCJwaW5rXCI6IFwiI2ZmYzBjYlwiLFxuICBcInBsdW1cIjogXCIjZGRhMGRkXCIsXG4gIFwicG93ZGVyYmx1ZVwiOiBcIiNiMGUwZTZcIixcbiAgXCJwdXJwbGVcIjogXCIjODAwMDgwXCIsXG4gIFwicmViZWNjYXB1cnBsZVwiOiBcIiM2NjMzOTlcIixcbiAgXCJyZWRcIjogXCIjZmYwMDAwXCIsXG4gIFwicm9zeWJyb3duXCI6IFwiI2JjOGY4ZlwiLFxuICBcInJveWFsYmx1ZVwiOiBcIiM0MTY5ZTFcIixcbiAgXCJzYWRkbGVicm93blwiOiBcIiM4YjQ1MTNcIixcbiAgXCJzYWxtb25cIjogXCIjZmE4MDcyXCIsXG4gIFwic2FuZHlicm93blwiOiBcIiNmNGE0NjBcIixcbiAgXCJzZWFncmVlblwiOiBcIiMyZThiNTdcIixcbiAgXCJzZWFzaGVsbFwiOiBcIiNmZmY1ZWVcIixcbiAgXCJzaWVubmFcIjogXCIjYTA1MjJkXCIsXG4gIFwic2lsdmVyXCI6IFwiI2MwYzBjMFwiLFxuICBcInNreWJsdWVcIjogXCIjODdjZWViXCIsXG4gIFwic2xhdGVibHVlXCI6IFwiIzZhNWFjZFwiLFxuICBcInNsYXRlZ3JheVwiOiBcIiM3MDgwOTBcIixcbiAgXCJzbGF0ZWdyZXlcIjogXCIjNzA4MDkwXCIsXG4gIFwic25vd1wiOiBcIiNmZmZhZmFcIixcbiAgXCJzcHJpbmdncmVlblwiOiBcIiMwMGZmN2ZcIixcbiAgXCJzdGVlbGJsdWVcIjogXCIjNDY4MmI0XCIsXG4gIFwidGFuXCI6IFwiI2QyYjQ4Y1wiLFxuICBcInRlYWxcIjogXCIjMDA4MDgwXCIsXG4gIFwidGhpc3RsZVwiOiBcIiNkOGJmZDhcIixcbiAgXCJ0b21hdG9cIjogXCIjZmY2MzQ3XCIsXG4gIFwidHVycXVvaXNlXCI6IFwiIzQwZTBkMFwiLFxuICBcInZpb2xldFwiOiBcIiNlZTgyZWVcIixcbiAgXCJ3aGVhdFwiOiBcIiNmNWRlYjNcIixcbiAgXCJ3aGl0ZVwiOiBcIiNmZmZmZmZcIixcbiAgXCJ3aGl0ZXNtb2tlXCI6IFwiI2Y1ZjVmNVwiLFxuICBcInllbGxvd1wiOiBcIiNmZmZmMDBcIixcbiAgXCJ5ZWxsb3dncmVlblwiOiBcIiM5YWNkMzJcIlxufSIsIlxudmFyIG5hbWVzID0gcmVxdWlyZSgnLi9jc3MtY29sb3ItbmFtZXMuanNvbicpO1xudmFyIEhTTFV0aWwgPSByZXF1aXJlKCcuL2hzbCcpO1xudmFyIGhleFRvUkdCQSA9IHJlcXVpcmUoJy4vaGV4LXRvLXJnYmEnKTtcbnZhciBSR0JBVG9IZXggPSByZXF1aXJlKCcuL3JnYmEtdG8taGV4Jyk7XG52YXIgd3JhcCA9IHJlcXVpcmUoJy4vd3JhcCcpO1xuXG5mdW5jdGlvbiBwYXJzZVN0eWxlIChzdHIpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sb3IgcGFyc2luZyBtdXN0IGJlIHBlcmZvcm1lZCBvbiBhIHN0cmluZyBwYXJhbWV0ZXInKTtcbiAgfVxuXG4gIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChzdHIgaW4gbmFtZXMpIHtcbiAgICBzdHIgPSBuYW1lc1tzdHJdO1xuICB9IGVsc2UgaWYgKHN0ciA9PT0gJ3RyYW5zcGFyZW50Jykge1xuICAgIHN0ciA9ICcjMDAwMDAwMDAnO1xuICB9XG5cbiAgdmFyIHJnYmEsIGhzbGEsIGhleDtcbiAgaWYgKC9eI1thLWYwLTldKyQvLnRlc3Qoc3RyKSkge1xuICAgIHJnYmEgPSBoZXhUb1JHQkEoc3RyKTtcbiAgICBoZXggPSBSR0JBVG9IZXgocmdiYSk7XG4gICAgaHNsYSA9IEhTTFV0aWwuUkdCQVRvSFNMQShyZ2JhKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbWF0Y2ggPSAvXigoPzpyZ2J8aHNsKWE/KVxccypcXCgoW14pXSopXFwpLy5leGVjKHN0cik7XG4gICAgaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHR5cGUgPSBtYXRjaFsxXS5yZXBsYWNlKC9hJC8sICcnKTtcbiAgICB2YXIgcGFydHMgPSBtYXRjaFsyXS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJykuc3BsaXQoL1xccyosXFxzKi8pLm1hcChmdW5jdGlvbiAobiwgaSkge1xuICAgICAgLy8gb3BhcXVlIHBhcnRcbiAgICAgIGlmIChpIDw9IDIpIHJldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQobikgfHwgMCk7XG4gICAgICAvLyBhbHBoYSBwYXJ0XG4gICAgICBlbHNlIHtcbiAgICAgICAgbiA9IHBhcnNlRmxvYXQobik7XG4gICAgICAgIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgIWlzRmluaXRlKG4pKSBuID0gMTtcbiAgICAgICAgcmV0dXJuIG47XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gZmlsbCBpbiBhbHBoYSB3aXRoIDEuMCBieSBkZWZhdWx0XG4gICAgaWYgKHR5cGVvZiBwYXJ0c1szXSA9PT0gJ3VuZGVmaW5lZCcgfHwgIWlzRmluaXRlKHBhcnRzWzNdKSkge1xuICAgICAgcGFydHNbM10gPSAxO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ3JnYicpIHtcbiAgICAgIGhzbGEgPSBIU0xVdGlsLlJHQkFUb0hTTEEocGFydHMpO1xuICAgICAgcmdiYSA9IHBhcnRzO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2hzbCcpIHtcbiAgICAgIHJnYmEgPSBIU0xVdGlsLkhTTEFUb1JHQkEocGFydHMpO1xuICAgICAgcGFydHNbMF0gPSB3cmFwKHBhcnRzWzBdLCAwLCAzNjApO1xuICAgICAgaHNsYSA9IHBhcnRzO1xuICAgIH1cbiAgICBoZXggPSBSR0JBVG9IZXgocmdiYSk7XG4gIH1cblxuICBpZiAoIXJnYmEgJiYgIWhleCAmJiAhaHNsYSkgcmV0dXJuIG51bGw7XG5cbiAgdmFyIHJldCA9IHtcbiAgICBoZXg6IGhleCxcbiAgICBhbHBoYTogcmdiYVszXSxcbiAgICByZ2I6IHJnYmEuc2xpY2UoMCwgMyksXG4gICAgcmdiYTogcmdiYSxcbiAgICBoc2w6IGhzbGEuc2xpY2UoMCwgMyksXG4gICAgaHNsYTogaHNsYVxuICB9O1xuXG4gIHJldHVybiByZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzLnBhcnNlID0gcGFyc2VDb2xvcjtcbmZ1bmN0aW9uIHBhcnNlQ29sb3IgKGNvbG9yKSB7XG4gIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhcnNlU3R5bGUoY29sb3IpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY29sb3IpICYmIGNvbG9yLmxlbmd0aCA+PSAzKSB7XG4gICAgdmFyIHJnYlN0ciA9IHJnYlN0eWxlKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNdKTtcbiAgICByZXR1cm4gcGFyc2VTdHlsZShyZ2JTdHIpO1xuICB9IGVsc2UgaWYgKGNvbG9yICYmIHR5cGVvZiBjb2xvciA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgc3RyO1xuICAgIGlmIChjb2xvci5oZXgpIHN0ciA9IGNvbG9yLmhleDtcbiAgICBlbHNlIGlmIChjb2xvci5yZ2JhKSBzdHIgPSByZ2JTdHlsZShjb2xvci5yZ2JhWzBdLCBjb2xvci5yZ2JhWzFdLCBjb2xvci5yZ2JhWzJdLCBjb2xvci5yZ2JhWzNdKTtcbiAgICBlbHNlIGlmIChjb2xvci5oc2xhKSBzdHIgPSBoc2xTdHlsZShjb2xvci5oc2xhWzBdLCBjb2xvci5oc2xhWzFdLCBjb2xvci5oc2xhWzJdLCBjb2xvci5oc2xhWzNdKTtcbiAgICBlbHNlIGlmIChjb2xvci5yZ2IpIHN0ciA9IHJnYlN0eWxlKGNvbG9yLnJnYlswXSwgY29sb3IucmdiWzFdLCBjb2xvci5yZ2JbMl0pO1xuICAgIGVsc2UgaWYgKGNvbG9yLmhzbCkgc3RyID0gaHNsU3R5bGUoY29sb3IuaHNsWzBdLCBjb2xvci5oc2xbMV0sIGNvbG9yLmhzbFsyXSk7XG4gICAgaWYgKHN0cikgcmV0dXJuIHBhcnNlU3R5bGUoc3RyKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMuc3R5bGUgPSBzdHlsZTtcbmZ1bmN0aW9uIHN0eWxlIChjb2xvcikge1xuICB2YXIgcmVzdWx0ID0gbW9kdWxlLmV4cG9ydHMucGFyc2UoY29sb3IpO1xuICBpZiAocmVzdWx0KSB7XG4gICAgdmFyIHJnYmEgPSByZXN1bHQucmdiYTtcbiAgICByZXR1cm4gcmdiU3R5bGUocmdiYVswXSwgcmdiYVsxXSwgcmdiYVsyXSwgcmdiYVszXSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHJnYlN0eWxlIChyLCBnLCBiLCBhKSB7XG4gIHIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQocikpKTtcbiAgZyA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChnKSkpO1xuICBiID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKGIpKSk7XG4gIGlmIChhID09PSAxIHx8ICFpc0Zpbml0ZShhKSB8fCB0eXBlb2YgYSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJ3JnYignICsgWyByLCBnLCBiIF0uam9pbignLCAnKSArICcpJztcbiAgfSBlbHNlIHtcbiAgICBhID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xuICAgIHJldHVybiAncmdiYSgnICsgWyByLCBnLCBiLCBhIF0uam9pbignLCAnKSArICcpJztcbiAgfVxufVxuXG5mdW5jdGlvbiBoc2xTdHlsZSAoaCwgcywgbCwgYSkge1xuICBoID0gd3JhcChoLCAwLCAzNjApO1xuICBoID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMzYwLCBNYXRoLnJvdW5kKGgpKSk7XG4gIHMgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocykpKTtcbiAgbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChsKSkpO1xuICBpZiAoYSA9PT0gMSB8fCAhaXNGaW5pdGUoYSkgfHwgdHlwZW9mIGEgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuICdoc2woJyArIFsgaCwgcywgbCBdLmpvaW4oJywgJykgKyAnKSc7XG4gIH0gZWxzZSB7XG4gICAgYSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgICByZXR1cm4gJ2hzbGEoJyArIFsgaCwgcywgbCwgYSBdLmpvaW4oJywgJykgKyAnKSc7XG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gaGV4VG9SR0JBO1xuZnVuY3Rpb24gaGV4VG9SR0JBIChzdHIpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSGV4IGNvZGUgcGFyc2luZyBtdXN0IGJlIHBlcmZvcm1lZCBvbiBhIHN0cmluZyBwYXJhbWV0ZXInKTtcbiAgfVxuXG4gIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICghL14jW2EtZjAtOV0rJC8udGVzdChzdHIpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgaGV4ID0gc3RyLnJlcGxhY2UoL14jLywgJycpO1xuICB2YXIgYWxwaGEgPSAxO1xuXG4gIGlmIChoZXgubGVuZ3RoID09PSA4KSB7XG4gICAgYWxwaGEgPSBwYXJzZUludChoZXguc2xpY2UoNiwgOCksIDE2KSAvIDI1NTtcbiAgICBoZXggPSBoZXguc2xpY2UoMCwgNik7XG4gIH1cblxuICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCkge1xuICAgIGFscGhhID0gcGFyc2VJbnQoaGV4LnNsaWNlKDMsIDQpLnJlcGVhdCgyKSwgMTYpIC8gMjU1O1xuICAgIGhleCA9IGhleC5zbGljZSgwLCAzKTtcbiAgfVxuXG4gIGlmIChoZXgubGVuZ3RoID09PSAzKSB7XG4gICAgaGV4ID0gaGV4WzBdICsgaGV4WzBdICsgaGV4WzFdICsgaGV4WzFdICsgaGV4WzJdICsgaGV4WzJdO1xuICB9XG5cbiAgdmFyIG51bSA9IHBhcnNlSW50KGhleCwgMTYpO1xuICB2YXIgcmVkID0gbnVtID4+IDE2O1xuICB2YXIgZ3JlZW4gPSAobnVtID4+IDgpICYgMjU1O1xuICB2YXIgYmx1ZSA9IG51bSAmIDI1NTtcblxuICByZXR1cm4gWyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSBdO1xufVxuIiwidmFyIGZsb2F0SFNMMlJHQiA9IHJlcXVpcmUoJ2Zsb2F0LWhzbDJyZ2InKTtcbnZhciBmbG9hdFJHQjJIU0wgPSByZXF1aXJlKCdmbG9hdC1yZ2IyaHNsJyk7XG52YXIgd3JhcCA9IHJlcXVpcmUoJy4vd3JhcCcpO1xuXG5tb2R1bGUuZXhwb3J0cy5SR0JBVG9IU0xBID0gUkdCQVRvSFNMQTtcbmZ1bmN0aW9uIFJHQkFUb0hTTEEgKHJnYmEpIHtcbiAgdmFyIGZsb2F0SFNMID0gZmxvYXRSR0IySFNMKFsgcmdiYVswXSAvIDI1NSwgcmdiYVsxXSAvIDI1NSwgcmdiYVsyXSAvIDI1NSBdKTtcbiAgcmV0dXJuIFtcbiAgICBNYXRoLm1heCgwLCBNYXRoLm1pbigzNjAsIE1hdGgucm91bmQoZmxvYXRIU0xbMF0gKiAzNjApKSksXG4gICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKGZsb2F0SFNMWzFdICogMTAwKSkpLFxuICAgIE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChmbG9hdEhTTFsyXSAqIDEwMCkpKSxcbiAgICByZ2JhWzNdXG4gIF07XG59XG5cbm1vZHVsZS5leHBvcnRzLkhTTEFUb1JHQkEgPSBIU0xBVG9SR0JBO1xuZnVuY3Rpb24gSFNMQVRvUkdCQSAoaHNsYSkge1xuICB2YXIgaHVlID0gd3JhcChoc2xhWzBdLCAwLCAzNjApO1xuICB2YXIgZmxvYXRSR0IgPSBmbG9hdEhTTDJSR0IoWyBodWUgLyAzNjAsIGhzbGFbMV0gLyAxMDAsIGhzbGFbMl0gLyAxMDAgXSk7XG4gIHJldHVybiBbXG4gICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKGZsb2F0UkdCWzBdICogMjU1KSkpLFxuICAgIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChmbG9hdFJHQlsxXSAqIDI1NSkpKSxcbiAgICBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoZmxvYXRSR0JbMl0gKiAyNTUpKSksXG4gICAgaHNsYVszXVxuICBdO1xufVxuIiwiLy8gSSBiZWxpZXZlIHRoaXMgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBUYXlsb3IgQmFsZHdpbiAoQHRheWxvcmJhbGR3aW4gLyBAcm9seWF0bWF4KVxuLy8gSWYgdGhhdCBpcyBtaXNjcmVkaXRlZCBwbGVhc2Ugb3BlbiBhbiBpc3N1ZS5cblxudmFyIGNsb25lID0gcmVxdWlyZSgnY2xvbmUnKTtcbnZhciBzcXVhcmVkRGlzdGFuY2UgPSByZXF1aXJlKCcuL3ZlYzInKS5zcXVhcmVkRGlzdGFuY2U7XG5cbm1vZHVsZS5leHBvcnRzLnNvcnQgPSBmdW5jdGlvbiBzb3J0IChwYXRocykge1xuICBwYXRocyA9IGNsb25lKHBhdGhzKTtcblxuICBpZiAoIXBhdGhzLmxlbmd0aCkgcmV0dXJuIHBhdGhzO1xuXG4gIHZhciBuZXdQYXRocyA9IFtdO1xuICBuZXdQYXRocy5wdXNoKHBhdGhzWzBdKTtcblxuICBwYXRocyA9IHBhdGhzLnNsaWNlKDEpO1xuXG4gIHdoaWxlIChwYXRocy5sZW5ndGgpIHtcbiAgICB2YXIgbGFzdFBhdGggPSBuZXdQYXRoc1tuZXdQYXRocy5sZW5ndGggLSAxXTtcbiAgICB2YXIgY3VyUHQgPSBsYXN0UGF0aFtsYXN0UGF0aC5sZW5ndGggLSAxXTtcbiAgICB2YXIgcmVzdWx0ID0gcGF0aHMucmVkdWNlKGZ1bmN0aW9uIChjbG9zZXN0LCBwYXRoLCBpKSB7XG4gICAgICB2YXIgZmlyc3RQdCA9IHBhdGhbMF07XG4gICAgICB2YXIgbGFzdFB0ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIGRpc3RhbmNlVG9GaXJzdCA9IHNxdWFyZWREaXN0YW5jZShjdXJQdCwgZmlyc3RQdCk7XG4gICAgICB2YXIgZGlzdGFuY2VUb0xhc3QgPSBzcXVhcmVkRGlzdGFuY2UoY3VyUHQsIGxhc3RQdCk7XG4gICAgICBpZiAoIWNsb3Nlc3QpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZHg6IGksXG4gICAgICAgICAgZGlzdGFuY2U6IE1hdGgubWluKGRpc3RhbmNlVG9GaXJzdCwgZGlzdGFuY2VUb0xhc3QpLFxuICAgICAgICAgIHJldmVyc2U6IGRpc3RhbmNlVG9MYXN0IDwgZGlzdGFuY2VUb0ZpcnN0XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoZGlzdGFuY2VUb0ZpcnN0IDwgY2xvc2VzdC5kaXN0YW5jZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2VUb0ZpcnN0LFxuICAgICAgICAgIHJldmVyc2U6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoZGlzdGFuY2VUb0xhc3QgPCBjbG9zZXN0LmRpc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWR4OiBpLFxuICAgICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZVRvTGFzdCxcbiAgICAgICAgICByZXZlcnNlOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xvc2VzdDtcbiAgICB9LCBudWxsKTtcbiAgICB2YXIgaWR4ID0gcmVzdWx0LmlkeDtcbiAgICB2YXIgcmV2ZXJzZSA9IHJlc3VsdC5yZXZlcnNlO1xuICAgIHZhciBjbG9zZXN0UGF0aCA9IHBhdGhzLnNwbGljZShpZHgsIDEpWzBdLnNsaWNlKCk7XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgIGNsb3Nlc3RQYXRoLnJldmVyc2UoKTtcbiAgICB9XG4gICAgbmV3UGF0aHMucHVzaChjbG9zZXN0UGF0aCk7XG4gIH1cbiAgcmV0dXJuIG5ld1BhdGhzO1xufTtcblxubW9kdWxlLmV4cG9ydHMubWVyZ2UgPSBmdW5jdGlvbiBtZXJnZSAocGF0aHMsIG1lcmdlVGhyZWhzb2xkKSB7XG4gIG1lcmdlVGhyZWhzb2xkID0gbWVyZ2VUaHJlaHNvbGQgIT0gbnVsbCA/IG1lcmdlVGhyZWhzb2xkIDogMC4wNTtcblxuICB2YXIgbWVyZ2VUaHJlaHNvbGRTcSA9IG1lcmdlVGhyZWhzb2xkICogbWVyZ2VUaHJlaHNvbGQ7XG4gIHBhdGhzID0gY2xvbmUocGF0aHMpO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IHBhdGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGxhc3RQYXRoID0gcGF0aHNbaSAtIDFdO1xuICAgIHZhciBjdXJQYXRoID0gcGF0aHNbaV07XG4gICAgaWYgKHNxdWFyZWREaXN0YW5jZShjdXJQYXRoWzBdLCBsYXN0UGF0aFtsYXN0UGF0aC5sZW5ndGggLSAxXSkgPCBtZXJnZVRocmVoc29sZFNxKSB7XG4gICAgICBwYXRocyA9IG1lcmdlUGF0aHMocGF0aHMsIGkgLSAxLCBpKTtcbiAgICAgIGkgLT0gMTsgLy8gbm93IHRoYXQgd2UndmUgbWVyZ2VkLCB2YXIncyBjb3JyZWN0IGkgZm9yIHRoZSBuZXh0IHJvdW5kXG4gICAgfVxuICB9XG4gIHJldHVybiBwYXRocztcbn07XG5cbmZ1bmN0aW9uIG1lcmdlUGF0aHMgKHBhdGhzLCBwYXRoMUlkeCwgcGF0aDJJZHgpIHtcbiAgLy8gdGhpcyB3aWxsIGhlbHAgdXMga2VlcCB0aGluZ3MgaW4gb3JkZXIgd2hlbiB3ZSBkbyB0aGUgc3BsaWNpbmdcbiAgdmFyIG1pbklkeCA9IE1hdGgubWluKHBhdGgxSWR4LCBwYXRoMklkeCk7XG4gIHZhciBtYXhJZHggPSBNYXRoLm1heChwYXRoMUlkeCwgcGF0aDJJZHgpO1xuICBwYXRocyA9IHBhdGhzLnNsaWNlKCk7XG4gIHZhciBwYXRoMSA9IHBhdGhzW21pbklkeF07XG4gIHZhciBwYXRoMiA9IHBhdGhzW21heElkeF07XG4gIHZhciBtZXJnZWRQYXRoID0gcGF0aDEuY29uY2F0KHBhdGgyLnNsaWNlKDEpKTtcbiAgcGF0aHMuc3BsaWNlKG1heElkeCwgMSk7XG4gIHBhdGhzLnNwbGljZShtaW5JZHgsIDEsIG1lcmdlZFBhdGgpO1xuICByZXR1cm4gcGF0aHM7XG59XG5cbi8vIHRoaXMgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gcGF0aHMgLSBmcm9tIHRoZSBlbmQgb2YgcGF0aCAxIHRvIHRoZSBzdGFydCBvZiBwYXRoIDJcbi8vIGZ1bmN0aW9uIGdldFRyYXZlbGluZ0Rpc3RhbmNlIChwYXRocykge1xuLy8gICB2YXIgdG90YWwgPSAwO1xuLy8gICB2YXIgbGFzdFB0ID0gcGF0aHNbMF1bcGF0aHNbMF0ubGVuZ3RoIC0gMV07XG4vLyAgIGZvciAodmFyIHBhdGggb2YgcGF0aHMuc2xpY2UoMSkpIHtcbi8vICAgICB2YXIgc3F1YXJlZERpc3QgPSBzcXVhcmVkRGlzdGFuY2UobGFzdFB0LCBwYXRoWzBdKTtcbi8vICAgICB0b3RhbCArPSBNYXRoLnNxcnQoc3F1YXJlZERpc3QpO1xuLy8gICAgIGxhc3RQdCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbi8vICAgfVxuLy8gICByZXR1cm4gdG90YWw7XG4vLyB9XG4iLCIvLyBFeHRyYWN0ZWQgZnJvbSBAdG1jdyAvIHdjYWctY29udHJhc3Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90bWN3L3JlbGF0aXZlLWx1bWluYW5jZS9ibG9iL21hc3Rlci9pbmRleC5qc1xuXG4vLyAjIFJlbGF0aXZlIGx1bWluYW5jZVxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNyZWxhdGl2ZWx1bWluYW5jZWRlZlxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTHVtaW5hbmNlXyhyZWxhdGl2ZSlcbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0x1bWlub3NpdHlfZnVuY3Rpb25cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlYy5fNzA5I0x1bWFfY29lZmZpY2llbnRzXG5cbi8vIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvZWZmaWNpZW50c1xudmFyIHJjID0gMC4yMTI2O1xudmFyIGdjID0gMC43MTUyO1xudmFyIGJjID0gMC4wNzIyO1xuLy8gbG93LWdhbW1hIGFkanVzdCBjb2VmZmljaWVudFxudmFyIGxvd2MgPSAxIC8gMTIuOTI7XG5cbmZ1bmN0aW9uIGFkanVzdEdhbW1hIChhKSB7XG4gIHJldHVybiBNYXRoLnBvdygoYSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlbGF0aXZlTHVtaW5hbmNlO1xuZnVuY3Rpb24gcmVsYXRpdmVMdW1pbmFuY2UgKHJnYikge1xuICB2YXIgcnNyZ2IgPSByZ2JbMF0gLyAyNTU7XG4gIHZhciBnc3JnYiA9IHJnYlsxXSAvIDI1NTtcbiAgdmFyIGJzcmdiID0gcmdiWzJdIC8gMjU1O1xuICB2YXIgciA9IHJzcmdiIDw9IDAuMDM5MjggPyByc3JnYiAqIGxvd2MgOiBhZGp1c3RHYW1tYShyc3JnYik7XG4gIHZhciBnID0gZ3NyZ2IgPD0gMC4wMzkyOCA/IGdzcmdiICogbG93YyA6IGFkanVzdEdhbW1hKGdzcmdiKTtcbiAgdmFyIGIgPSBic3JnYiA8PSAwLjAzOTI4ID8gYnNyZ2IgKiBsb3djIDogYWRqdXN0R2FtbWEoYnNyZ2IpO1xuICByZXR1cm4gciAqIHJjICsgZyAqIGdjICsgYiAqIGJjO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZ2JhVG9IZXg7XG5mdW5jdGlvbiByZ2JhVG9IZXggKHJnYmEpIHtcbiAgaWYgKCFyZ2JhIHx8ICFBcnJheS5pc0FycmF5KHJnYmEpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTXVzdCBzcGVjaWZ5IGFuIGFycmF5IHRvIGNvbnZlcnQgaW50byBhIGhleCBjb2RlJyk7XG4gIH1cblxuICB2YXIgciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChyZ2JhWzBdIHx8IDApKSk7XG4gIHZhciBnID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHJnYmFbMV0gfHwgMCkpKTtcbiAgdmFyIGIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQocmdiYVsyXSB8fCAwKSkpO1xuXG4gIHZhciBhbHBoYSA9IHJnYmFbM107XG4gIGlmICh0eXBlb2YgYWxwaGEgPT09ICd1bmRlZmluZWQnIHx8ICFpc0Zpbml0ZShhbHBoYSkpIHtcbiAgICBhbHBoYSA9IDE7XG4gIH1cbiAgdmFyIGEgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoYWxwaGEgKiAyNTUpKSk7XG4gIHZhciBhbHBoYVBhcmFtID0gYSA9PT0gMjU1ID8gJycgOiAoYSB8IDEgPDwgOCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpO1xuICB2YXIgcmVzdWx0ID0gKChiIHwgZyA8PCA4IHwgciA8PCAxNikgfCAxIDw8IDI0KS50b1N0cmluZygxNikuc2xpY2UoMSkgKyBhbHBoYVBhcmFtO1xuICByZXR1cm4gJyMnICsgcmVzdWx0O1xufVxuIiwibW9kdWxlLmV4cG9ydHMuc3F1YXJlZERpc3RhbmNlID0gc3F1YXJlZERpc3RhbmNlO1xuZnVuY3Rpb24gc3F1YXJlZERpc3RhbmNlIChwdDEsIHB0Mikge1xuICB2YXIgZHggPSBwdDJbMF0gLSBwdDFbMF07XG4gIHZhciBkeSA9IHB0MlsxXSAtIHB0MVsxXTtcbiAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB3cmFwO1xuZnVuY3Rpb24gd3JhcCAodmFsdWUsIGZyb20sIHRvKSB7XG4gIGlmICh0eXBlb2YgZnJvbSAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHRvICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ011c3Qgc3BlY2lmeSBcInRvXCIgYW5kIFwiZnJvbVwiIGFyZ3VtZW50cyBhcyBudW1iZXJzJyk7XG4gIH1cbiAgLy8gYWxnb3JpdGhtIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTg1MjYyOC81OTk4ODRcbiAgaWYgKGZyb20gPiB0bykge1xuICAgIHZhciB0ID0gZnJvbTtcbiAgICBmcm9tID0gdG87XG4gICAgdG8gPSB0O1xuICB9XG4gIHZhciBjeWNsZSA9IHRvIC0gZnJvbTtcbiAgaWYgKGN5Y2xlID09PSAwKSB7XG4gICAgcmV0dXJuIHRvO1xuICB9XG4gIHJldHVybiB2YWx1ZSAtIGN5Y2xlICogTWF0aC5mbG9vcigodmFsdWUgLSBmcm9tKSAvIGN5Y2xlKTtcbn1cbiIsInZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xudmFyIHdyYXAgPSByZXF1aXJlKCcuL2xpYi93cmFwJyk7XG52YXIgRVBTSUxPTiA9IE51bWJlci5FUFNJTE9OO1xuXG5mdW5jdGlvbiBjbGFtcCAodmFsdWUsIG1pbiwgbWF4KSB7XG4gIHJldHVybiBtaW4gPCBtYXhcbiAgICA/ICh2YWx1ZSA8IG1pbiA/IG1pbiA6IHZhbHVlID4gbWF4ID8gbWF4IDogdmFsdWUpXG4gICAgOiAodmFsdWUgPCBtYXggPyBtYXggOiB2YWx1ZSA+IG1pbiA/IG1pbiA6IHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gY2xhbXAwMSAodikge1xuICByZXR1cm4gY2xhbXAodiwgMCwgMSk7XG59XG5cbmZ1bmN0aW9uIGxlcnAgKG1pbiwgbWF4LCB0KSB7XG4gIHJldHVybiBtaW4gKiAoMSAtIHQpICsgbWF4ICogdDtcbn1cblxuZnVuY3Rpb24gaW52ZXJzZUxlcnAgKG1pbiwgbWF4LCB0KSB7XG4gIGlmIChNYXRoLmFicyhtaW4gLSBtYXgpIDwgRVBTSUxPTikgcmV0dXJuIDA7XG4gIGVsc2UgcmV0dXJuICh0IC0gbWluKSAvIChtYXggLSBtaW4pO1xufVxuXG5mdW5jdGlvbiBzbW9vdGhzdGVwIChtaW4sIG1heCwgdCkge1xuICB2YXIgeCA9IGNsYW1wKGludmVyc2VMZXJwKG1pbiwgbWF4LCB0KSwgMCwgMSk7XG4gIHJldHVybiB4ICogeCAqICgzIC0gMiAqIHgpO1xufVxuXG5mdW5jdGlvbiB0b0Zpbml0ZSAobiwgZGVmYXVsdFZhbHVlKSB7XG4gIGRlZmF1bHRWYWx1ZSA9IGRlZmluZWQoZGVmYXVsdFZhbHVlLCAwKTtcbiAgcmV0dXJuIHR5cGVvZiBuID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShuKSA/IG4gOiBkZWZhdWx0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFZlY3RvciAoZGltcykge1xuICBpZiAodHlwZW9mIGRpbXMgIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBkaW1zIGFyZ3VtZW50Jyk7XG4gIHJldHVybiBmdW5jdGlvbiAocCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgZGVmYXVsdFZhbHVlID0gZGVmaW5lZChkZWZhdWx0VmFsdWUsIDApO1xuICAgIHZhciBzY2FsYXI7XG4gICAgaWYgKHAgPT0gbnVsbCkge1xuICAgICAgLy8gTm8gdmVjdG9yLCBjcmVhdGUgYSBkZWZhdWx0IG9uZVxuICAgICAgc2NhbGFyID0gZGVmYXVsdFZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHAgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHApKSB7XG4gICAgICAvLyBFeHBhbmQgc2luZ2xlIGNoYW5uZWwgdG8gbXVsdGlwbGUgdmVjdG9yXG4gICAgICBzY2FsYXIgPSBwO1xuICAgIH1cblxuICAgIHZhciBvdXQgPSBbXTtcbiAgICB2YXIgaTtcbiAgICBpZiAoc2NhbGFyID09IG51bGwpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBkaW1zOyBpKyspIHtcbiAgICAgICAgb3V0W2ldID0gdG9GaW5pdGUocFtpXSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGRpbXM7IGkrKykge1xuICAgICAgICBvdXRbaV0gPSBzY2FsYXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGxlcnBBcnJheSAobWluLCBtYXgsIHQsIG91dCkge1xuICBvdXQgPSBvdXQgfHwgW107XG4gIGlmIChtaW4ubGVuZ3RoICE9PSBtYXgubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWluIGFuZCBtYXggYXJyYXkgYXJlIGV4cGVjdGVkIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW4ubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRbaV0gPSBsZXJwKG1pbltpXSwgbWF4W2ldLCB0KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBuZXdBcnJheSAobiwgaW5pdGlhbFZhbHVlKSB7XG4gIG4gPSBkZWZpbmVkKG4sIDApO1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBuIGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyJyk7XG4gIHZhciBvdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIG91dC5wdXNoKGluaXRpYWxWYWx1ZSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIGxpbnNwYWNlIChuLCBvcHRzKSB7XG4gIG4gPSBkZWZpbmVkKG4sIDApO1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBuIGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyJyk7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdib29sZWFuJykge1xuICAgIG9wdHMgPSB7IGVuZHBvaW50OiB0cnVlIH07XG4gIH1cbiAgdmFyIG9mZnNldCA9IGRlZmluZWQob3B0cy5vZmZzZXQsIDApO1xuICBpZiAob3B0cy5lbmRwb2ludCkge1xuICAgIHJldHVybiBuZXdBcnJheShuKS5tYXAoZnVuY3Rpb24gKF8sIGkpIHtcbiAgICAgIHJldHVybiBuIDw9IDEgPyAwIDogKChpICsgb2Zmc2V0KSAvIChuIC0gMSkpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXdBcnJheShuKS5tYXAoZnVuY3Rpb24gKF8sIGkpIHtcbiAgICAgIHJldHVybiAoaSArIG9mZnNldCkgLyBuO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxlcnBGcmFtZXMgKHZhbHVlcywgdCwgb3V0KSB7XG4gIHQgPSBjbGFtcCh0LCAwLCAxKTtcblxuICB2YXIgbGVuID0gdmFsdWVzLmxlbmd0aCAtIDE7XG4gIHZhciB3aG9sZSA9IHQgKiBsZW47XG4gIHZhciBmcmFtZSA9IE1hdGguZmxvb3Iod2hvbGUpO1xuICB2YXIgZnJhY3QgPSB3aG9sZSAtIGZyYW1lO1xuXG4gIHZhciBuZXh0RnJhbWUgPSBNYXRoLm1pbihmcmFtZSArIDEsIGxlbik7XG4gIHZhciBhID0gdmFsdWVzW2ZyYW1lICUgdmFsdWVzLmxlbmd0aF07XG4gIHZhciBiID0gdmFsdWVzW25leHRGcmFtZSAlIHZhbHVlcy5sZW5ndGhdO1xuICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBsZXJwKGEsIGIsIGZyYWN0KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYikpIHtcbiAgICByZXR1cm4gbGVycEFycmF5KGEsIGIsIGZyYWN0LCBvdXQpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc21hdGNoIGluIHZhbHVlIHR5cGUgb2YgdHdvIGFycmF5IGVsZW1lbnRzOiAnICsgZnJhbWUgKyAnIGFuZCAnICsgbmV4dEZyYW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb2QgKGEsIGIpIHtcbiAgcmV0dXJuICgoYSAlIGIpICsgYikgJSBiO1xufVxuXG5mdW5jdGlvbiBkZWdUb1JhZCAobikge1xuICByZXR1cm4gbiAqIE1hdGguUEkgLyAxODA7XG59XG5cbmZ1bmN0aW9uIHJhZFRvRGVnIChuKSB7XG4gIHJldHVybiBuICogMTgwIC8gTWF0aC5QSTtcbn1cblxuZnVuY3Rpb24gZnJhY3QgKG4pIHtcbiAgcmV0dXJuIG4gLSBNYXRoLmZsb29yKG4pO1xufVxuXG5mdW5jdGlvbiBzaWduIChuKSB7XG4gIGlmIChuID4gMCkgcmV0dXJuIDE7XG4gIGVsc2UgaWYgKG4gPCAwKSByZXR1cm4gLTE7XG4gIGVsc2UgcmV0dXJuIDA7XG59XG5cbi8vIFNwZWNpZmljIGZ1bmN0aW9uIGZyb20gVW5pdHkgLyBvZk1hdGgsIG5vdCBzdXJlIGl0cyBuZWVkZWQ/XG4vLyBmdW5jdGlvbiBsZXJwV3JhcCAoYSwgYiwgdCwgbWluLCBtYXgpIHtcbi8vICAgcmV0dXJuIHdyYXAoYSArIHdyYXAoYiAtIGEsIG1pbiwgbWF4KSAqIHQsIG1pbiwgbWF4KVxuLy8gfVxuXG5mdW5jdGlvbiBwaW5nUG9uZyAodCwgbGVuZ3RoKSB7XG4gIHQgPSBtb2QodCwgbGVuZ3RoICogMik7XG4gIHJldHVybiBsZW5ndGggLSBNYXRoLmFicyh0IC0gbGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gZGFtcCAoYSwgYiwgbGFtYmRhLCBkdCkge1xuICByZXR1cm4gbGVycChhLCBiLCAxIC0gTWF0aC5leHAoLWxhbWJkYSAqIGR0KSk7XG59XG5cbmZ1bmN0aW9uIGRhbXBBcnJheSAoYSwgYiwgbGFtYmRhLCBkdCwgb3V0KSB7XG4gIG91dCA9IG91dCB8fCBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0W2ldID0gZGFtcChhW2ldLCBiW2ldLCBsYW1iZGEsIGR0KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBtYXBSYW5nZSAodmFsdWUsIGlucHV0TWluLCBpbnB1dE1heCwgb3V0cHV0TWluLCBvdXRwdXRNYXgsIGNsYW1wKSB7XG4gIC8vIFJlZmVyZW5jZTpcbiAgLy8gaHR0cHM6Ly9vcGVuZnJhbWV3b3Jrcy5jYy9kb2N1bWVudGF0aW9uL21hdGgvb2ZNYXRoL1xuICBpZiAoTWF0aC5hYnMoaW5wdXRNaW4gLSBpbnB1dE1heCkgPCBFUFNJTE9OKSB7XG4gICAgcmV0dXJuIG91dHB1dE1pbjtcbiAgfSBlbHNlIHtcbiAgICB2YXIgb3V0VmFsID0gKCh2YWx1ZSAtIGlucHV0TWluKSAvIChpbnB1dE1heCAtIGlucHV0TWluKSAqIChvdXRwdXRNYXggLSBvdXRwdXRNaW4pICsgb3V0cHV0TWluKTtcbiAgICBpZiAoY2xhbXApIHtcbiAgICAgIGlmIChvdXRwdXRNYXggPCBvdXRwdXRNaW4pIHtcbiAgICAgICAgaWYgKG91dFZhbCA8IG91dHB1dE1heCkgb3V0VmFsID0gb3V0cHV0TWF4O1xuICAgICAgICBlbHNlIGlmIChvdXRWYWwgPiBvdXRwdXRNaW4pIG91dFZhbCA9IG91dHB1dE1pbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvdXRWYWwgPiBvdXRwdXRNYXgpIG91dFZhbCA9IG91dHB1dE1heDtcbiAgICAgICAgZWxzZSBpZiAob3V0VmFsIDwgb3V0cHV0TWluKSBvdXRWYWwgPSBvdXRwdXRNaW47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRWYWw7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1vZDogbW9kLFxuICBmcmFjdDogZnJhY3QsXG4gIHNpZ246IHNpZ24sXG4gIGRlZ1RvUmFkOiBkZWdUb1JhZCxcbiAgcmFkVG9EZWc6IHJhZFRvRGVnLFxuICB3cmFwOiB3cmFwLFxuICBwaW5nUG9uZzogcGluZ1BvbmcsXG4gIGxpbnNwYWNlOiBsaW5zcGFjZSxcbiAgbGVycDogbGVycCxcbiAgbGVycEFycmF5OiBsZXJwQXJyYXksXG4gIGludmVyc2VMZXJwOiBpbnZlcnNlTGVycCxcbiAgbGVycEZyYW1lczogbGVycEZyYW1lcyxcbiAgY2xhbXA6IGNsYW1wLFxuICBjbGFtcDAxOiBjbGFtcDAxLFxuICBzbW9vdGhzdGVwOiBzbW9vdGhzdGVwLFxuICBkYW1wOiBkYW1wLFxuICBkYW1wQXJyYXk6IGRhbXBBcnJheSxcbiAgbWFwUmFuZ2U6IG1hcFJhbmdlLFxuICBleHBhbmQyRDogZXhwYW5kVmVjdG9yKDIpLFxuICBleHBhbmQzRDogZXhwYW5kVmVjdG9yKDMpLFxuICBleHBhbmQ0RDogZXhwYW5kVmVjdG9yKDQpXG59O1xuIiwidmFyIGRlZmluZWQgPSByZXF1aXJlKCdkZWZpbmVkJyk7XG52YXIgY29udmVydCA9IHJlcXVpcmUoJ2NvbnZlcnQtbGVuZ3RoJyk7XG52YXIgZDMgPSByZXF1aXJlKCdkMy1wYXRoJyk7XG52YXIgc3ZnUGF0aENvbnRvdXJzID0gcmVxdWlyZSgnc3ZnLXBhdGgtY29udG91cnMnKTtcbnZhciBzdmdQYXRoUGFyc2UgPSByZXF1aXJlKCdwYXJzZS1zdmctcGF0aCcpO1xudmFyIHN2Z1BhdGhBYnMgPSByZXF1aXJlKCdhYnMtc3ZnLXBhdGgnKTtcbnZhciBzdmdQYXRoQXJjcyA9IHJlcXVpcmUoJ25vcm1hbGl6ZS1zdmctcGF0aCcpO1xudmFyIG9wdGltaXplciA9IHJlcXVpcmUoJy4vbGliL29wdGltaXplLXBlbnBsb3QtcGF0aHMnKTtcbnZhciBnZW9tZXRyeSA9IHJlcXVpcmUoJy4vZ2VvbWV0cnknKTtcblxudmFyIERFRkFVTFRfUEVOX1RISUNLTkVTUyA9IDAuMDM7XG52YXIgREVGQVVMVF9QRU5fVEhJQ0tORVNTX1VOSVQgPSAnY20nO1xudmFyIERFRkFVTFRfUElYRUxTX1BFUl9JTkNIID0gOTA7XG5cbi8vIEEgUGF0aCBoZWxwZXIgZm9yIGFyY3MsIGN1cnZlcyBhbmQgbGluZVRvIGNvbW1hbmRzXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVQYXRoID0gY3JlYXRlUGF0aDtcbmZ1bmN0aW9uIGNyZWF0ZVBhdGggKGZuKSB7XG4gIHZhciBwYXRoID0gZDMucGF0aCgpO1xuICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSBmbihwYXRoKTtcbiAgcGF0aC5saW5lVG8gPSB3cmFwKHBhdGgubGluZVRvKTtcbiAgcGF0aC5xdWFkcmF0aWNDdXJ2ZVRvID0gd3JhcChwYXRoLnF1YWRyYXRpY0N1cnZlVG8pO1xuICBwYXRoLmJlemllckN1cnZlVG8gPSB3cmFwKHBhdGguYmV6aWVyQ3VydmVUbyk7XG4gIHJldHVybiBwYXRoO1xuXG4gIC8vIFBhdGNoIGEgYnVnIGluIGQzLXBhdGggdGhhdCBkb2Vzbid0IGhhbmRsZVxuICAvLyBsaW5lVG8gYW5kIHNvIG9uIHdpdGhvdXQgYW4gaW5pdGlhbCBtb3ZlVG9cbiAgZnVuY3Rpb24gd3JhcCAoZm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgaWYgKHBhdGguX3gxID09IG51bGwgJiYgcGF0aC5feTEgPT0gbnVsbCkge1xuICAgICAgICBwYXRoLm1vdmVUbyhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmbi5hcHBseShwYXRoLCBhcmdzKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnBhdGhzVG9TVkdQYXRocyA9IHBhdGhzVG9TVkdQYXRocztcbmZ1bmN0aW9uIHBhdGhzVG9TVkdQYXRocyAoaW5wdXRzLCBvcHQpIHtcbiAgb3B0ID0gb3B0IHx8IHt9O1xuXG4gIHZhciBzdmdQYXRoID0gY29udmVydFRvU1ZHUGF0aChpbnB1dHMsIG9wdCk7XG4gIHZhciBzdmdQYXRocyA9IEFycmF5LmlzQXJyYXkoc3ZnUGF0aCkgPyBzdmdQYXRoIDogWyBzdmdQYXRoIF07XG4gIHJldHVybiBzdmdQYXRocy5maWx0ZXIoQm9vbGVhbik7XG59XG5cbm1vZHVsZS5leHBvcnRzLnBhdGhzVG9Qb2x5bGluZXMgPSBwYXRoc1RvUG9seWxpbmVzO1xuZnVuY3Rpb24gcGF0aHNUb1BvbHlsaW5lcyAoaW5wdXRzLCBvcHQpIHtcbiAgb3B0ID0gb3B0IHx8IHt9O1xuXG4gIHZhciBzY2FsZTtcbiAgaWYgKG9wdC5jdXJ2ZVJlc29sdXRpb24gIT0gbnVsbCAmJiBpc0Zpbml0ZShvcHQuY3VydmVSZXNvbHV0aW9uKSAmJiB0eXBlb2Ygb3B0LmN1cnZlUmVzb2x1dGlvbiA9PT0gJ251bWJlcicpIHtcbiAgICBzY2FsZSA9IG9wdC5jdXJ2ZVJlc29sdXRpb247XG4gIH0gZWxzZSB7XG4gICAgdmFyIHVuaXRzID0gb3B0LnVuaXRzIHx8ICdweCc7XG4gICAgc2NhbGUgPSBNYXRoLm1heCgxLCBjb252ZXJ0KDQsIHVuaXRzLCAncHgnKSk7XG4gIH1cblxuICB2YXIgY29udG91cnMgPSBbXTtcbiAgZWFjaFBhdGgoaW5wdXRzLCBmdW5jdGlvbiAoZmVhdHVyZSkge1xuICAgIGlmICh0eXBlb2YgZmVhdHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBjb21tYW5kcyA9IHN2Z1BhdGhQYXJzZShmZWF0dXJlKTtcbiAgICAgIHZhciBzdWJDb250b3VycyA9IHN2Z1BhdGhDb250b3Vycyhjb21tYW5kcywgc2NhbGUpO1xuICAgICAgc3ViQ29udG91cnMuZm9yRWFjaChmdW5jdGlvbiAoc3ViQ29udG91cikge1xuICAgICAgICBjb250b3Vycy5wdXNoKHN1YkNvbnRvdXIpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG91dHB1dCBvbmx5IDJEIHBvbHlsaW5lc1xuICAgICAgdmFyIHBvbHlsaW5lID0gZmVhdHVyZS5tYXAoZnVuY3Rpb24gKHBvaW50KSB7XG4gICAgICAgIHJldHVybiBbIHBvaW50WzBdIHx8IDAsIHBvaW50WzFdIHx8IDAgXTtcbiAgICAgIH0pO1xuICAgICAgY29udG91cnMucHVzaChwb2x5bGluZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbnRvdXJzO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5wYXRoc1RvU1ZHID0gcGF0aHNUb1NWRztcbmZ1bmN0aW9uIHBhdGhzVG9TVkcgKGlucHV0cywgb3B0KSB7XG4gIG9wdCA9IG9wdCB8fCB7fTtcblxuICB2YXIgd2lkdGggPSBvcHQud2lkdGg7XG4gIHZhciBoZWlnaHQgPSBvcHQuaGVpZ2h0O1xuXG4gIHZhciBjb21wdXRlQm91bmRzID0gdHlwZW9mIHdpZHRoID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgaGVpZ2h0ID09PSAndW5kZWZpbmVkJztcbiAgaWYgKGNvbXB1dGVCb3VuZHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgb3B0aW9ucycpO1xuICB9XG5cbiAgdmFyIHZpZXdVbml0cyA9ICdweCc7XG4gIHZhciB1bml0cyA9IG9wdC51bml0cyB8fCB2aWV3VW5pdHM7XG5cbiAgdmFyIGNvbnZlcnRPcHRpb25zID0ge1xuICAgIHVuaXRzOiB1bml0cyxcbiAgICB2aWV3VW5pdHM6ICdweCcsXG4gICAgcm91bmRQaXhlbDogZmFsc2UsXG4gICAgcHJlY2lzaW9uOiBkZWZpbmVkKG9wdC5wcmVjaXNpb24sIDUpLFxuICAgIHBpeGVsc1BlckluY2g6IERFRkFVTFRfUElYRUxTX1BFUl9JTkNIXG4gIH07XG5cbiAgLy8gQ29udmVydCBhbGwgU1ZHUGF0aHMvcGF0aHMvZXRjIHRvIHBvbHlsaW5lc1xuICAvLyBUaGlzIHdvbid0IGNoYW5nZSB0aGVpciB1bml0cyBzbyB0aGV5IGFyZSBzdGlsbCBpbiB1c2VyIHNwYWNlXG4gIGlucHV0cyA9IHBhdGhzVG9Qb2x5bGluZXMoaW5wdXRzLCBPYmplY3QuYXNzaWduKHt9LCBjb252ZXJ0T3B0aW9ucywge1xuICAgIGN1cnZlUmVzb2x1dGlvbjogb3B0LmN1cnZlUmVzb2x1dGlvbiB8fCB1bmRlZmluZWRcbiAgfSkpO1xuXG4gIC8vIFRPRE86IGFsbG93IGZvciAncmVwZWF0JyBvcHRpb25cbiAgaWYgKG9wdC5vcHRpbWl6ZSkge1xuICAgIHZhciBvcHRpbWl6ZU9wdHMgPSB0eXBlb2Ygb3B0Lm9wdGltaXplID09PSAnb2JqZWN0JyA/IG9wdC5vcHRpbWl6ZSA6IHtcbiAgICAgIHNvcnQ6IHRydWUsXG4gICAgICBtZXJnZTogdHJ1ZSxcbiAgICAgIHJlbW92ZUR1cGxpY2F0ZXM6IHRydWUsXG4gICAgICByZW1vdmVDb2xsaW5lYXI6IHRydWVcbiAgICB9O1xuICAgIHZhciBzaG91bGRTb3J0ID0gb3B0aW1pemVPcHRzLnNvcnQgIT09IGZhbHNlO1xuICAgIHZhciBzaG91bGRNZXJnZSA9IG9wdGltaXplT3B0cy5tZXJnZSAhPT0gZmFsc2U7XG4gICAgdmFyIHNob3VsZFJlbW92ZUR1cGxpY2F0ZSA9IG9wdGltaXplT3B0cy5yZW1vdmVEdXBsaWNhdGVzICE9PSBmYWxzZTtcbiAgICB2YXIgc2hvdWxkUmVtb3ZlQ29sbGluZWFyID0gb3B0aW1pemVPcHRzLnJlbW92ZUNvbGxpbmVhciAhPT0gZmFsc2U7XG4gICAgaWYgKHNob3VsZFJlbW92ZUR1cGxpY2F0ZSkge1xuICAgICAgaW5wdXRzID0gaW5wdXRzLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgICByZXR1cm4gZ2VvbWV0cnkucmVtb3ZlRHVwbGljYXRlUG9pbnRzKGxpbmUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzaG91bGRSZW1vdmVDb2xsaW5lYXIpIHtcbiAgICAgIGlucHV0cyA9IGlucHV0cy5tYXAoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgcmV0dXJuIGdlb21ldHJ5LnJlbW92ZUNvbGxpbmVhclBvaW50cyhsaW5lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBub3cgZG8gc29ydGluZyAmIG1lcmdpbmdcbiAgICBpZiAoc2hvdWxkU29ydCkgaW5wdXRzID0gb3B0aW1pemVyLnNvcnQoaW5wdXRzKTtcbiAgICBpZiAoc2hvdWxkTWVyZ2UpIHtcbiAgICAgIHZhciBtZXJnZVRocmVzaG9sZCA9IG9wdGltaXplT3B0cy5tZXJnZVRocmVzaG9sZCAhPSBudWxsXG4gICAgICAgID8gb3B0aW1pemVPcHRzLm1lcmdlVGhyZXNob2xkXG4gICAgICAgIDogY29udmVydCgwLjI1LCAnbW0nLCB1bml0cywge1xuICAgICAgICAgIHBpeGVsc1BlckluY2g6IERFRkFVTFRfUElYRUxTX1BFUl9JTkNIXG4gICAgICAgIH0pO1xuICAgICAgaW5wdXRzID0gb3B0aW1pemVyLm1lcmdlKGlucHV0cywgbWVyZ2VUaHJlc2hvbGQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyB3ZSBjb252ZXJ0IGFsbCBwb2x5bGluZXMgaW4gdXNlciBzcGFjZSB1bml0cyBpbnRvIHZpZXcgdW5pdHNcbiAgdmFyIHN2Z1BhdGhzID0gcGF0aHNUb1NWR1BhdGhzKGlucHV0cywgY29udmVydE9wdGlvbnMpO1xuXG4gIHZhciB2aWV3V2lkdGggPSBjb252ZXJ0KHdpZHRoLCB1bml0cywgdmlld1VuaXRzLCBjb252ZXJ0T3B0aW9ucykudG9TdHJpbmcoKTtcbiAgdmFyIHZpZXdIZWlnaHQgPSBjb252ZXJ0KGhlaWdodCwgdW5pdHMsIHZpZXdVbml0cywgY29udmVydE9wdGlvbnMpLnRvU3RyaW5nKCk7XG4gIHZhciBmaWxsU3R5bGUgPSBvcHQuZmlsbFN0eWxlIHx8ICdub25lJztcbiAgdmFyIHN0cm9rZVN0eWxlID0gb3B0LnN0cm9rZVN0eWxlIHx8ICdibGFjayc7XG4gIHZhciBsaW5lV2lkdGggPSBvcHQubGluZVdpZHRoO1xuICB2YXIgbGluZUpvaW4gPSBvcHQubGluZUpvaW47XG4gIHZhciBsaW5lQ2FwID0gb3B0LmxpbmVDYXA7XG5cbiAgLy8gQ2hvb3NlIGEgZGVmYXVsdCBsaW5lIHdpZHRoIGJhc2VkIG9uIGEgcmVsYXRpdmVseSBmaW5lLXRpcCBwZW5cbiAgaWYgKHR5cGVvZiBsaW5lV2lkdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gQ29udmVydCB0byB1c2VyIHVuaXRzXG4gICAgbGluZVdpZHRoID0gY29udmVydChERUZBVUxUX1BFTl9USElDS05FU1MsIERFRkFVTFRfUEVOX1RISUNLTkVTU19VTklULCB1bml0cywgY29udmVydE9wdGlvbnMpLnRvU3RyaW5nKCk7XG4gIH1cblxuICB2YXIgcGF0aEVsZW1lbnRzID0gc3ZnUGF0aHMubWFwKGZ1bmN0aW9uIChkKSB7XG4gICAgdmFyIGF0dHJzID0gdG9BdHRyTGlzdChbXG4gICAgICBbICdkJywgZCBdXG4gICAgXSk7XG4gICAgcmV0dXJuICcgICAgPHBhdGggJyArIGF0dHJzICsgJyAvPic7XG4gIH0pLmpvaW4oJ1xcbicpO1xuXG4gIHZhciBncm91cEF0dHJzID0gdG9BdHRyTGlzdChbXG4gICAgWyAnZmlsbCcsIGZpbGxTdHlsZSBdLFxuICAgIFsgJ3N0cm9rZScsIHN0cm9rZVN0eWxlIF0sXG4gICAgWyAnc3Ryb2tlLXdpZHRoJywgbGluZVdpZHRoICsgJycgKyB1bml0cyBdLFxuICAgIGxpbmVKb2luID8gWyAnc3Ryb2tlLWxpbmVqb2luJywgbGluZUpvaW4gXSA6IGZhbHNlLFxuICAgIGxpbmVDYXAgPyBbICdzdHJva2UtbGluZWNhcCcsIGxpbmVDYXAgXSA6IGZhbHNlXG4gIF0pO1xuXG4gIHJldHVybiBbXG4gICAgJzw/eG1sIHZlcnNpb249XCIxLjBcIiBzdGFuZGFsb25lPVwibm9cIj8+JyxcbiAgICAnPCFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICcsXG4gICAgJyAgICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiPicsXG4gICAgJzxzdmcgd2lkdGg9XCInICsgd2lkdGggKyB1bml0cyArICdcIiBoZWlnaHQ9XCInICsgaGVpZ2h0ICsgdW5pdHMgKyAnXCInLFxuICAgICcgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwICcgKyB2aWV3V2lkdGggKyAnICcgKyB2aWV3SGVpZ2h0ICsgJ1wiPicsXG4gICAgJyAgPGcgJyArIGdyb3VwQXR0cnMgKyAnPicsXG4gICAgcGF0aEVsZW1lbnRzLFxuICAgICcgIDwvZz4nLFxuICAgICc8L3N2Zz4nXG4gIF0uam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIHRvQXR0ckxpc3QgKGFyZ3MpIHtcbiAgcmV0dXJuIGFyZ3MuZmlsdGVyKEJvb2xlYW4pLm1hcChmdW5jdGlvbiAoYXR0cikge1xuICAgIHJldHVybiBhdHRyWzBdICsgJz1cIicgKyBhdHRyWzFdICsgJ1wiJztcbiAgfSkuam9pbignICcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5yZW5kZXJQYXRocyA9IHJlbmRlclBhdGhzO1xuZnVuY3Rpb24gcmVuZGVyUGF0aHMgKGlucHV0cywgb3B0KSB7XG4gIG9wdCA9IG9wdCB8fCB7fTtcblxuICB2YXIgY29udGV4dCA9IG9wdC5jb250ZXh0O1xuICBpZiAoIWNvbnRleHQpIHRocm93IG5ldyBFcnJvcignTXVzdCBzcGVjaWZ5IFwiY29udGV4dFwiIG9wdGlvbnMnKTtcblxuICB2YXIgdW5pdHMgPSBvcHQudW5pdHMgfHwgJ3B4JztcblxuICB2YXIgd2lkdGggPSBvcHQud2lkdGg7XG4gIHZhciBoZWlnaHQgPSBvcHQuaGVpZ2h0O1xuICBpZiAodHlwZW9mIHdpZHRoID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgaGVpZ2h0ID09PSAndW5kZWZpbmVkJykge1xuICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBzcGVjaWZ5IFwid2lkdGhcIiBhbmQgXCJoZWlnaHRcIiBvcHRpb25zJyk7XG4gIH1cblxuICAvLyBDaG9vc2UgYSBkZWZhdWx0IGxpbmUgd2lkdGggYmFzZWQgb24gYSByZWxhdGl2ZWx5IGZpbmUtdGlwIHBlblxuICB2YXIgbGluZVdpZHRoID0gb3B0LmxpbmVXaWR0aDtcbiAgaWYgKHR5cGVvZiBsaW5lV2lkdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gQ29udmVydCB0byB1c2VyIHVuaXRzXG4gICAgbGluZVdpZHRoID0gY29udmVydChERUZBVUxUX1BFTl9USElDS05FU1MsIERFRkFVTFRfUEVOX1RISUNLTkVTU19VTklULCB1bml0cywge1xuICAgICAgcm91bmRQaXhlbDogZmFsc2UsXG4gICAgICBwaXhlbHNQZXJJbmNoOiBERUZBVUxUX1BJWEVMU19QRVJfSU5DSFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2xlYXIgY2FudmFzXG4gIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIC8vIEZpbGwgd2l0aCB3aGl0ZVxuICBjb250ZXh0LmZpbGxTdHlsZSA9IG9wdC5iYWNrZ3JvdW5kIHx8ICd3aGl0ZSc7XG4gIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgY29udGV4dC5zdHJva2VTdHlsZSA9IG9wdC5mb3JlZ3JvdW5kIHx8IG9wdC5zdHJva2VTdHlsZSB8fCAnYmxhY2snO1xuICBjb250ZXh0LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgY29udGV4dC5saW5lSm9pbiA9IG9wdC5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICBjb250ZXh0LmxpbmVDYXAgPSBvcHQubGluZUNhcCB8fCAnYnV0dCc7XG5cbiAgLy8gRHJhdyBsaW5lc1xuICBlYWNoUGF0aChpbnB1dHMsIGZ1bmN0aW9uIChmZWF0dXJlKSB7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgIGlmICh0eXBlb2YgZmVhdHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFNWRyBzdHJpbmcgPSBkcmF3U1ZHUGF0aDtcbiAgICAgIGRyYXdTVkdQYXRoKGNvbnRleHQsIGZlYXR1cmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBsaXN0IG9mIHBvaW50c1xuICAgICAgZmVhdHVyZS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHBbMF0sIHBbMV0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5zdHJva2UoKTtcbiAgfSk7XG5cbiAgLy8gU2F2ZSBsYXllcnNcbiAgcmV0dXJuIFtcbiAgICAvLyBFeHBvcnQgUE5HIGFzIGZpcnN0IGxheWVyXG4gICAgY29udGV4dC5jYW52YXMsXG4gICAgLy8gRXhwb3J0IFNWRyBmb3IgcGVuIHBsb3R0ZXIgYXMgc2Vjb25kIGxheWVyXG4gICAge1xuICAgICAgZGF0YTogcGF0aHNUb1NWRyhpbnB1dHMsIG9wdCksXG4gICAgICBleHRlbnNpb246ICcuc3ZnJ1xuICAgIH1cbiAgXTtcbn1cblxuLy8gTm90IGRvY3VtZW50ZWQuLi5cbm1vZHVsZS5leHBvcnRzLmNvbnZlcnRUb1NWR1BhdGggPSBjb252ZXJ0VG9TVkdQYXRoO1xuZnVuY3Rpb24gY29udmVydFRvU1ZHUGF0aCAoaW5wdXQsIG9wdCkge1xuICAvLyBJbnB1dCBjYW4gYmUgYSBzaW5nbGUgJ3BhdGgnIChzdHJpbmcsIG9iamVjdCBvciBwb2x5bGluZSksXG4gIC8vIG9yIG5lc3RlZCAncGF0aCcgZWxlbWVudHNcblxuICAvLyBub24tcGF0aFxuICBpZiAoaXNFbXB0eShpbnB1dCkpIHJldHVybiAnJztcblxuICAvLyBzdHJpbmdzIGFyZSBqdXN0IHJldHVybmVkIGFzLWlzXG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSByZXR1cm4gaW5wdXQ7XG5cbiAgLy8gYXNzdW1lIGEgcGF0aCBpbnN0YW5jZVxuICBpZiAoaXNQYXRoKGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dC50b1N0cmluZygpO1xuICB9XG5cbiAgaWYgKGlzUG9seWxpbmUoaW5wdXQpKSB7XG4gICAgcmV0dXJuIHBvbHlsaW5lVG9TVkdQYXRoKGlucHV0LCBvcHQpO1xuICB9XG5cbiAgLy8gYXNzdW1lIGEgbGlzdCBvZiAncGF0aCcgZmVhdHVyZXMgb3IgYSBsaXN0IG9mIHBvbHlsaW5lc1xuICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXQubWFwKGZ1bmN0aW9uIChmZWF0dXJlKSB7XG4gICAgICByZXR1cm4gY29udmVydFRvU1ZHUGF0aChmZWF0dXJlLCBvcHQpO1xuICAgIH0pLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIC8vIFdhc24ndCBjbGVhci4uLiBsZXQncyByZXR1cm4gYW4gZW1wdHkgcGF0aFxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzLmVhY2hQYXRoID0gZWFjaFBhdGg7XG5mdW5jdGlvbiBlYWNoUGF0aCAoaW5wdXQsIGNiKSB7XG4gIGlmIChpc0VtcHR5KGlucHV0KSkge1xuICAgIC8vIHBhc3MtdGhyb3VnaFxuICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgKGlzUGF0aChpbnB1dCkpKSB7XG4gICAgY2IoaW5wdXQudG9TdHJpbmcoKSk7XG4gIH0gZWxzZSBpZiAoaXNQb2x5bGluZShpbnB1dCkpIHtcbiAgICBjYihpbnB1dCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICBpbnB1dC5mb3JFYWNoKGZ1bmN0aW9uIChmZWF0dXJlKSB7XG4gICAgICByZXR1cm4gZWFjaFBhdGgoZmVhdHVyZSwgY2IpO1xuICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLmRyYXdTVkdQYXRoID0gZHJhd1NWR1BhdGg7XG5mdW5jdGlvbiBkcmF3U1ZHUGF0aCAoY29udGV4dCwgc3ZnUGF0aCkge1xuICB2YXIgY29tbWFuZHMgPSBzdmdQYXRoQXJjcyhzdmdQYXRoQWJzKHN2Z1BhdGhQYXJzZShzdmdQYXRoKSkpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1hbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGMgPSBjb21tYW5kc1tpXTtcbiAgICB2YXIgdHlwZSA9IGNbMF07XG4gICAgaWYgKHR5cGUgPT09ICdNJykge1xuICAgICAgY29udGV4dC5tb3ZlVG8oY1sxXSwgY1syXSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnQycpIHtcbiAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyhjWzFdLCBjWzJdLCBjWzNdLCBjWzRdLCBjWzVdLCBjWzZdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIHR5cGUgXCInICsgdHlwZSArICdcIiBpbiBTVkcgY29tbWFuZHMnKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMucG9seWxpbmVUb1NWR1BhdGggPSBwb2x5bGluZVRvU1ZHUGF0aDtcbmZ1bmN0aW9uIHBvbHlsaW5lVG9TVkdQYXRoIChwb2x5bGluZSwgb3B0KSB7XG4gIG9wdCA9IG9wdCB8fCB7fTtcbiAgdmFyIHVuaXRzID0gb3B0LnVuaXRzIHx8ICdweCc7XG4gIHZhciB2aWV3VW5pdHMgPSBvcHQudmlld1VuaXRzIHx8IHVuaXRzO1xuICB2YXIgY29tbWFuZHMgPSBbXTtcbiAgdmFyIGNvbnZlcnRPcHRpb25zID0ge1xuICAgIHJvdW5kUGl4ZWw6IGZhbHNlLFxuICAgIHByZWNpc2lvbjogZGVmaW5lZChvcHQucHJlY2lzaW9uLCA1KSxcbiAgICBwaXhlbHNQZXJJbmNoOiBERUZBVUxUX1BJWEVMU19QRVJfSU5DSFxuICB9O1xuICBwb2x5bGluZS5mb3JFYWNoKGZ1bmN0aW9uIChwb2ludCwgaikge1xuICAgIHZhciB0eXBlID0gKGogPT09IDApID8gJ00nIDogJ0wnO1xuICAgIHZhciB4ID0gY29udmVydChwb2ludFswXSwgdW5pdHMsIHZpZXdVbml0cywgY29udmVydE9wdGlvbnMpLnRvU3RyaW5nKCk7XG4gICAgdmFyIHkgPSBjb252ZXJ0KHBvaW50WzFdLCB1bml0cywgdmlld1VuaXRzLCBjb252ZXJ0T3B0aW9ucykudG9TdHJpbmcoKTtcbiAgICBjb21tYW5kcy5wdXNoKHR5cGUgKyB4ICsgJyAnICsgeSk7XG4gIH0pO1xuICByZXR1cm4gY29tbWFuZHMuam9pbignICcpO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5IChpbnB1dCkge1xuICByZXR1cm4gIWlucHV0IHx8IChBcnJheS5pc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApO1xufVxuXG5mdW5jdGlvbiBpc1BhdGggKGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0ICYmICFBcnJheS5pc0FycmF5KGlucHV0KTtcbn1cblxuZnVuY3Rpb24gaXNQb2x5bGluZSAoaW5wdXQpIHtcbiAgLy8gZW1wdHkgYXJyYXkgb3Igbm90IGFuIGFycmF5XG4gIGlmICghaW5wdXQgfHwgIUFycmF5LmlzQXJyYXkoaW5wdXQpIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAvLyBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGlucHV0cyBpcyBhIHBvaW50LCBhc3N1bWUgdGhleSBhbGwgYXJlXG4gIHJldHVybiBpc1BvaW50KGlucHV0WzBdKTtcbn1cblxuZnVuY3Rpb24gaXNQb2ludCAocG9pbnQpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocG9pbnQpICYmIHBvaW50Lmxlbmd0aCA+PSAyICYmIHBvaW50LmV2ZXJ5KGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBwID09PSAnbnVtYmVyJztcbiAgfSk7XG59XG5cbi8vIEBkZXByZWNhdGVkXG5tb2R1bGUuZXhwb3J0cy5wb2x5bGluZXNUb1NWRyA9IGZ1bmN0aW9uIHBvbHlsaW5lc1RvU1ZHIChwb2x5bGluZXMsIG9wdCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocG9seWxpbmVzKSkgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhcnJheSBvZiBhcnJheXMgZm9yIHBvbHlsaW5lcycpO1xuICBjb25zb2xlLndhcm4oJ3BvbHlsaW5lc1RvU1ZHIGlzIGRlcHJlY2F0ZWQsIHVzZSBwYXRoc1RvU1ZHIGluc3RlYWQgd2hpY2ggaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHknKTtcbiAgLy8gQ3JlYXRlIGEgc2luZ2xlIHN0cmluZyBmcm9tIHBvbHlsaW5lc1xuICByZXR1cm4gcGF0aHNUb1NWRyhwb2x5bGluZXMsIG9wdCk7XG59O1xuXG4vLyBAZGVwcmVjYXRlZFxubW9kdWxlLmV4cG9ydHMucmVuZGVyUG9seWxpbmVzID0gZnVuY3Rpb24gcmVuZGVyUG9seWxpbmVzIChwb2x5bGluZXMsIG9wdCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocG9seWxpbmVzKSkgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhcnJheSBvZiBhcnJheXMgZm9yIHBvbHlsaW5lcycpO1xuICBjb25zb2xlLndhcm4oJ3JlbmRlclBvbHlsaW5lcyBpcyBkZXByZWNhdGVkLCB1c2UgcmVuZGVyUGF0aHMgaW5zdGVhZCB3aGljaCBoYXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eScpO1xuICAvLyBDcmVhdGUgYSBzaW5nbGUgc3RyaW5nIGZyb20gcG9seWxpbmVzXG4gIHJldHVybiByZW5kZXJQYXRocyhwb2x5bGluZXMsIG9wdCk7XG59O1xuIiwidmFyIHNlZWRSYW5kb20gPSByZXF1aXJlKCdzZWVkLXJhbmRvbScpO1xudmFyIFNpbXBsZXhOb2lzZSA9IHJlcXVpcmUoJ3NpbXBsZXgtbm9pc2UnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xuXG5mdW5jdGlvbiBjcmVhdGVSYW5kb20gKGRlZmF1bHRTZWVkKSB7XG4gIGRlZmF1bHRTZWVkID0gZGVmaW5lZChkZWZhdWx0U2VlZCwgbnVsbCk7XG4gIHZhciBkZWZhdWx0UmFuZG9tID0gTWF0aC5yYW5kb207XG4gIHZhciBjdXJyZW50U2VlZDtcbiAgdmFyIGN1cnJlbnRSYW5kb207XG4gIHZhciBub2lzZUdlbmVyYXRvcjtcbiAgdmFyIF9uZXh0R2F1c3NpYW4gPSBudWxsO1xuICB2YXIgX2hhc05leHRHYXVzc2lhbiA9IGZhbHNlO1xuXG4gIHNldFNlZWQoZGVmYXVsdFNlZWQpO1xuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGNyZWF0ZVJhbmRvbTogZnVuY3Rpb24gKGRlZmF1bHRTZWVkKSB7XG4gICAgICByZXR1cm4gY3JlYXRlUmFuZG9tKGRlZmF1bHRTZWVkKTtcbiAgICB9LFxuICAgIHNldFNlZWQ6IHNldFNlZWQsXG4gICAgZ2V0U2VlZDogZ2V0U2VlZCxcbiAgICBnZXRSYW5kb21TZWVkOiBnZXRSYW5kb21TZWVkLFxuICAgIHZhbHVlTm9uWmVybzogdmFsdWVOb25aZXJvLFxuICAgIHBlcm11dGVOb2lzZTogcGVybXV0ZU5vaXNlLFxuICAgIG5vaXNlMUQ6IG5vaXNlMUQsXG4gICAgbm9pc2UyRDogbm9pc2UyRCxcbiAgICBub2lzZTNEOiBub2lzZTNELFxuICAgIG5vaXNlNEQ6IG5vaXNlNEQsXG4gICAgc2lnbjogc2lnbixcbiAgICBib29sZWFuOiBib29sZWFuLFxuICAgIGNoYW5jZTogY2hhbmNlLFxuICAgIHJhbmdlOiByYW5nZSxcbiAgICByYW5nZUZsb29yOiByYW5nZUZsb29yLFxuICAgIHBpY2s6IHBpY2ssXG4gICAgc2h1ZmZsZTogc2h1ZmZsZSxcbiAgICBvbkNpcmNsZTogb25DaXJjbGUsXG4gICAgaW5zaWRlQ2lyY2xlOiBpbnNpZGVDaXJjbGUsXG4gICAgb25TcGhlcmU6IG9uU3BoZXJlLFxuICAgIGluc2lkZVNwaGVyZTogaW5zaWRlU3BoZXJlLFxuICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sXG4gICAgd2VpZ2h0ZWQ6IHdlaWdodGVkLFxuICAgIHdlaWdodGVkU2V0OiB3ZWlnaHRlZFNldCxcbiAgICB3ZWlnaHRlZFNldEluZGV4OiB3ZWlnaHRlZFNldEluZGV4LFxuICAgIGdhdXNzaWFuOiBnYXVzc2lhblxuICB9O1xuXG4gIGZ1bmN0aW9uIHNldFNlZWQgKHNlZWQsIG9wdCkge1xuICAgIGlmICh0eXBlb2Ygc2VlZCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHNlZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjdXJyZW50U2VlZCA9IHNlZWQ7XG4gICAgICBjdXJyZW50UmFuZG9tID0gc2VlZFJhbmRvbShjdXJyZW50U2VlZCwgb3B0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudFNlZWQgPSB1bmRlZmluZWQ7XG4gICAgICBjdXJyZW50UmFuZG9tID0gZGVmYXVsdFJhbmRvbTtcbiAgICB9XG4gICAgbm9pc2VHZW5lcmF0b3IgPSBjcmVhdGVOb2lzZSgpO1xuICAgIF9uZXh0R2F1c3NpYW4gPSBudWxsO1xuICAgIF9oYXNOZXh0R2F1c3NpYW4gPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbHVlICgpIHtcbiAgICByZXR1cm4gY3VycmVudFJhbmRvbSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsdWVOb25aZXJvICgpIHtcbiAgICB2YXIgdSA9IDA7XG4gICAgd2hpbGUgKHUgPT09IDApIHUgPSB2YWx1ZSgpO1xuICAgIHJldHVybiB1O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2VlZCAoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRTZWVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmFuZG9tU2VlZCAoKSB7XG4gICAgdmFyIHNlZWQgPSBTdHJpbmcoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMCkpO1xuICAgIHJldHVybiBzZWVkO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9pc2UgKCkge1xuICAgIHJldHVybiBuZXcgU2ltcGxleE5vaXNlKGN1cnJlbnRSYW5kb20pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVybXV0ZU5vaXNlICgpIHtcbiAgICBub2lzZUdlbmVyYXRvciA9IGNyZWF0ZU5vaXNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTFEICh4LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2UyRCh4ICogZnJlcXVlbmN5LCAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlMkQgKHgsIHksIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd5IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlMkQoeCAqIGZyZXF1ZW5jeSwgeSAqIGZyZXF1ZW5jeSk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTNEICh4LCB5LCB6LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneSBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHopKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd6IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlM0QoXG4gICAgICB4ICogZnJlcXVlbmN5LFxuICAgICAgeSAqIGZyZXF1ZW5jeSxcbiAgICAgIHogKiBmcmVxdWVuY3lcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2U0RCAoeCwgeSwgeiwgdywgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3kgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh6KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneiBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHcpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd3IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlNEQoXG4gICAgICB4ICogZnJlcXVlbmN5LFxuICAgICAgeSAqIGZyZXF1ZW5jeSxcbiAgICAgIHogKiBmcmVxdWVuY3ksXG4gICAgICB3ICogZnJlcXVlbmN5XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ24gKCkge1xuICAgIHJldHVybiBib29sZWFuKCkgPyAxIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBib29sZWFuICgpIHtcbiAgICByZXR1cm4gdmFsdWUoKSA+IDAuNTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoYW5jZSAobikge1xuICAgIG4gPSBkZWZpbmVkKG4sIDAuNSk7XG4gICAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgbiB0byBiZSBhIG51bWJlcicpO1xuICAgIHJldHVybiB2YWx1ZSgpIDwgbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhbmdlIChtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1pbiAhPT0gJ251bWJlcicgfHwgdHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBhcmd1bWVudHMgdG8gYmUgbnVtYmVycycpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZSgpICogKG1heCAtIG1pbikgKyBtaW47XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZUZsb29yIChtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1pbiAhPT0gJ251bWJlcicgfHwgdHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBhcmd1bWVudHMgdG8gYmUgbnVtYmVycycpO1xuICAgIH1cblxuICAgIHJldHVybiBNYXRoLmZsb29yKHJhbmdlKG1pbiwgbWF4KSk7XG4gIH1cblxuICBmdW5jdGlvbiBwaWNrIChhcnJheSkge1xuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGFycmF5W3JhbmdlRmxvb3IoMCwgYXJyYXkubGVuZ3RoKV07XG4gIH1cblxuICBmdW5jdGlvbiBzaHVmZmxlIChhcnIpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgQXJyYXksIGdvdCAnICsgdHlwZW9mIGFycik7XG4gICAgfVxuXG4gICAgdmFyIHJhbmQ7XG4gICAgdmFyIHRtcDtcbiAgICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcbiAgICB2YXIgcmV0ID0gYXJyLnNsaWNlKCk7XG4gICAgd2hpbGUgKGxlbikge1xuICAgICAgcmFuZCA9IE1hdGguZmxvb3IodmFsdWUoKSAqIGxlbi0tKTtcbiAgICAgIHRtcCA9IHJldFtsZW5dO1xuICAgICAgcmV0W2xlbl0gPSByZXRbcmFuZF07XG4gICAgICByZXRbcmFuZF0gPSB0bXA7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNpcmNsZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB0aGV0YSA9IHZhbHVlKCkgKiAyLjAgKiBNYXRoLlBJO1xuICAgIG91dFswXSA9IHJhZGl1cyAqIE1hdGguY29zKHRoZXRhKTtcbiAgICBvdXRbMV0gPSByYWRpdXMgKiBNYXRoLnNpbih0aGV0YSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2lkZUNpcmNsZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIG9uQ2lyY2xlKDEsIG91dCk7XG4gICAgdmFyIHIgPSByYWRpdXMgKiBNYXRoLnNxcnQodmFsdWUoKSk7XG4gICAgb3V0WzBdICo9IHI7XG4gICAgb3V0WzFdICo9IHI7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uU3BoZXJlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHUgPSB2YWx1ZSgpICogTWF0aC5QSSAqIDI7XG4gICAgdmFyIHYgPSB2YWx1ZSgpICogMiAtIDE7XG4gICAgdmFyIHBoaSA9IHU7XG4gICAgdmFyIHRoZXRhID0gTWF0aC5hY29zKHYpO1xuICAgIG91dFswXSA9IHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguY29zKHBoaSk7XG4gICAgb3V0WzFdID0gcmFkaXVzICogTWF0aC5zaW4odGhldGEpICogTWF0aC5zaW4ocGhpKTtcbiAgICBvdXRbMl0gPSByYWRpdXMgKiBNYXRoLmNvcyh0aGV0YSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2lkZVNwaGVyZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB1ID0gdmFsdWUoKSAqIE1hdGguUEkgKiAyO1xuICAgIHZhciB2ID0gdmFsdWUoKSAqIDIgLSAxO1xuICAgIHZhciBrID0gdmFsdWUoKTtcblxuICAgIHZhciBwaGkgPSB1O1xuICAgIHZhciB0aGV0YSA9IE1hdGguYWNvcyh2KTtcbiAgICB2YXIgciA9IHJhZGl1cyAqIE1hdGguY2JydChrKTtcbiAgICBvdXRbMF0gPSByICogTWF0aC5zaW4odGhldGEpICogTWF0aC5jb3MocGhpKTtcbiAgICBvdXRbMV0gPSByICogTWF0aC5zaW4odGhldGEpICogTWF0aC5zaW4ocGhpKTtcbiAgICBvdXRbMl0gPSByICogTWF0aC5jb3ModGhldGEpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBxdWF0ZXJuaW9uIChvdXQpIHtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHUxID0gdmFsdWUoKTtcbiAgICB2YXIgdTIgPSB2YWx1ZSgpO1xuICAgIHZhciB1MyA9IHZhbHVlKCk7XG5cbiAgICB2YXIgc3ExID0gTWF0aC5zcXJ0KDEgLSB1MSk7XG4gICAgdmFyIHNxMiA9IE1hdGguc3FydCh1MSk7XG5cbiAgICB2YXIgdGhldGExID0gTWF0aC5QSSAqIDIgKiB1MjtcbiAgICB2YXIgdGhldGEyID0gTWF0aC5QSSAqIDIgKiB1MztcblxuICAgIHZhciB4ID0gTWF0aC5zaW4odGhldGExKSAqIHNxMTtcbiAgICB2YXIgeSA9IE1hdGguY29zKHRoZXRhMSkgKiBzcTE7XG4gICAgdmFyIHogPSBNYXRoLnNpbih0aGV0YTIpICogc3EyO1xuICAgIHZhciB3ID0gTWF0aC5jb3ModGhldGEyKSAqIHNxMjtcbiAgICBvdXRbMF0gPSB4O1xuICAgIG91dFsxXSA9IHk7XG4gICAgb3V0WzJdID0gejtcbiAgICBvdXRbM10gPSB3O1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiB3ZWlnaHRlZFNldCAoc2V0KSB7XG4gICAgc2V0ID0gc2V0IHx8IFtdO1xuICAgIGlmIChzZXQubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gc2V0W3dlaWdodGVkU2V0SW5kZXgoc2V0KV0udmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiB3ZWlnaHRlZFNldEluZGV4IChzZXQpIHtcbiAgICBzZXQgPSBzZXQgfHwgW107XG4gICAgaWYgKHNldC5sZW5ndGggPT09IDApIHJldHVybiAtMTtcbiAgICByZXR1cm4gd2VpZ2h0ZWQoc2V0Lm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMud2VpZ2h0O1xuICAgIH0pKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdlaWdodGVkICh3ZWlnaHRzKSB7XG4gICAgd2VpZ2h0cyA9IHdlaWdodHMgfHwgW107XG4gICAgaWYgKHdlaWdodHMubGVuZ3RoID09PSAwKSByZXR1cm4gLTE7XG4gICAgdmFyIHRvdGFsV2VpZ2h0ID0gMDtcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWlnaHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0b3RhbFdlaWdodCArPSB3ZWlnaHRzW2ldO1xuICAgIH1cblxuICAgIGlmICh0b3RhbFdlaWdodCA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ1dlaWdodHMgbXVzdCBzdW0gdG8gPiAwJyk7XG5cbiAgICB2YXIgcmFuZG9tID0gdmFsdWUoKSAqIHRvdGFsV2VpZ2h0O1xuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWlnaHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmFuZG9tIDwgd2VpZ2h0c1tpXSkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cbiAgICAgIHJhbmRvbSAtPSB3ZWlnaHRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdhdXNzaWFuIChtZWFuLCBzdGFuZGFyZERlcml2YXRpb24pIHtcbiAgICBtZWFuID0gZGVmaW5lZChtZWFuLCAwKTtcbiAgICBzdGFuZGFyZERlcml2YXRpb24gPSBkZWZpbmVkKHN0YW5kYXJkRGVyaXZhdGlvbiwgMSk7XG5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vb3Blbmpkay1taXJyb3IvamRrN3UtamRrL2Jsb2IvZjRkODA5NTdlODlhMTlhMjliYjlmOTgwN2QyYTI4MzUxZWQ3ZjdkZi9zcmMvc2hhcmUvY2xhc3Nlcy9qYXZhL3V0aWwvUmFuZG9tLmphdmEjTDQ5NlxuICAgIGlmIChfaGFzTmV4dEdhdXNzaWFuKSB7XG4gICAgICBfaGFzTmV4dEdhdXNzaWFuID0gZmFsc2U7XG4gICAgICB2YXIgcmVzdWx0ID0gX25leHRHYXVzc2lhbjtcbiAgICAgIF9uZXh0R2F1c3NpYW4gPSBudWxsO1xuICAgICAgcmV0dXJuIG1lYW4gKyBzdGFuZGFyZERlcml2YXRpb24gKiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2MSA9IDA7XG4gICAgICB2YXIgdjIgPSAwO1xuICAgICAgdmFyIHMgPSAwO1xuICAgICAgZG8ge1xuICAgICAgICB2MSA9IHZhbHVlKCkgKiAyIC0gMTsgLy8gYmV0d2VlbiAtMSBhbmQgMVxuICAgICAgICB2MiA9IHZhbHVlKCkgKiAyIC0gMTsgLy8gYmV0d2VlbiAtMSBhbmQgMVxuICAgICAgICBzID0gdjEgKiB2MSArIHYyICogdjI7XG4gICAgICB9IHdoaWxlIChzID49IDEgfHwgcyA9PT0gMCk7XG4gICAgICB2YXIgbXVsdGlwbGllciA9IE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHMpIC8gcyk7XG4gICAgICBfbmV4dEdhdXNzaWFuID0gKHYyICogbXVsdGlwbGllcik7XG4gICAgICBfaGFzTmV4dEdhdXNzaWFuID0gdHJ1ZTtcbiAgICAgIHJldHVybiBtZWFuICsgc3RhbmRhcmREZXJpdmF0aW9uICogKHYxICogbXVsdGlwbGllcik7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmFuZG9tKCk7XG4iLCJ2YXIgY3JlYXRlUmVnbCA9IHJlcXVpcmUoJ3JlZ2wnKTtcbnZhciBjcmVhdGVRdWFkID0gcmVxdWlyZSgncHJpbWl0aXZlLXF1YWQnKTtcbnZhciBwYXJzZUNvbG9yID0gcmVxdWlyZSgncGFyc2UtY29sb3InKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVNoYWRlcjtcblxuZnVuY3Rpb24gY3JlYXRlU2hhZGVyIChvcHQpIHtcbiAgb3B0ID0gb3B0IHx8IHt9O1xuICBpZiAoIW9wdC5nbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBzcGVjaWZ5IHsgY29udGV4dDogXCJ3ZWJnbFwiIH0gaW4gc2tldGNoIHNldHRpbmdzLCBvciBhIFdlYkdMLWVuYWJsZWQgY2FudmFzJyk7XG4gIH1cblxuICB2YXIgZ2wgPSBvcHQuZ2w7XG4gIHZhciByZWdsT3B0cyA9IHsgZ2w6IGdsIH07XG5cbiAgLy8gcmVnbCBpcyBzdHJpY3Qgb24gd2hhdCBvcHRpb25zIHlvdSBwYXNzIGluXG4gIGlmICh0eXBlb2Ygb3B0LmV4dGVuc2lvbnMgIT09ICd1bmRlZmluZWQnKSByZWdsT3B0cy5leHRlbnNpb25zID0gb3B0LmV4dGVuc2lvbnM7XG4gIGlmICh0eXBlb2Ygb3B0Lm9wdGlvbmFsRXh0ZW5zaW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHJlZ2xPcHRzLm9wdGlvbmFsRXh0ZW5zaW9ucyA9IG9wdC5vcHRpb25hbEV4dGVuc2lvbnM7XG4gIGlmICh0eXBlb2Ygb3B0LnByb2ZpbGUgIT09ICd1bmRlZmluZWQnKSByZWdsT3B0cy5wcm9maWxlID0gb3B0LnByb2ZpbGU7XG4gIGlmICh0eXBlb2Ygb3B0Lm9uRG9uZSAhPT0gJ3VuZGVmaW5lZCcpIHJlZ2xPcHRzLm9uRG9uZSA9IG9wdC5vbkRvbmU7XG5cbiAgLy8gQ3JlYXRlIHJlZ2wgZm9yIGhhbmRsaW5nIEdMIHN0dWZmXG4gIHZhciByZWdsID0gY3JlYXRlUmVnbChyZWdsT3B0cyk7XG5cbiAgLy8gQSBtZXNoIGZvciBhIGZsYXQgcGxhbmVcbiAgdmFyIHF1YWQgPSBjcmVhdGVRdWFkKCk7XG5cbiAgdmFyIHRleHR1cmVNYXAgPSBuZXcgTWFwKCk7XG5cbiAgLy8gV2lyZSB1cCB1c2VyIHVuaWZvcm1zIG5pY2VseVxuICB2YXIgdW5pZm9ybXNNYXAgPSBvcHQudW5pZm9ybXMgfHwge307XG4gIHZhciB1bmlmb3JtcyA9IE9iamVjdC5hc3NpZ24oe30sIHVuaWZvcm1zTWFwKTtcbiAgT2JqZWN0LmtleXModW5pZm9ybXNNYXApLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWx1ZSA9IHVuaWZvcm1zTWFwW2tleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdW5pZm9ybXNba2V5XSA9IGZ1bmN0aW9uIChzdGF0ZSwgcHJvcHMsIGJhdGNoSUQpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlLmNhbGwodW5pZm9ybXNNYXAsIHByb3BzLCBiYXRjaElEKTtcbiAgICAgICAgLy8gSWYgdXNlciBpcyB1c2luZyBhIGZ1bmN0aW9uIHRvIHdyYXAgYW4gaW1hZ2UsXG4gICAgICAgIC8vIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgcmUtdXBsb2FkIHRvIHNhbWUgR0wgdGV4dHVyZVxuICAgICAgICBpZiAoaXNUZXh0dXJlTGlrZShyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKHRleHR1cmVNYXAuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgLy8gVGV4dHVyZSBpcyBhbHJlYWR5IGNyZWF0ZWQsIHJlLXVwbG9hZFxuICAgICAgICAgICAgdmFyIHByZXZUZXggPSB0ZXh0dXJlTWFwLmdldCh2YWx1ZSk7XG4gICAgICAgICAgICBwcmV2VGV4KHJlc3VsdCk7XG5cbiAgICAgICAgICAgIC8vIFJldHVybiB0aGUgdGV4dHVyZVxuICAgICAgICAgICAgcmVzdWx0ID0gcHJldlRleDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ3JlYXRpbmcgdGhlIHRleHR1cmUgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHJlZ2wudGV4dHVyZShyZXN1bHQpO1xuICAgICAgICAgICAgdGV4dHVyZU1hcC5zZXQodmFsdWUsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBSZXR1cm4gdGhlIHRleHR1cmUsIG5vdCB0aGUgaW1hZ2VcbiAgICAgICAgICAgIHJlc3VsdCA9IHRleHR1cmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNUZXh0dXJlTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHVuaWZvcm1zW2tleV0gPSByZWdsLnRleHR1cmUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bmlmb3Jtc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBHZXQgdGhlIGRyYXdpbmcgY29tbWFuZFxuICB2YXIgZHJhd1F1YWRDb21tYW5kO1xuICB0cnkge1xuICAgIGRyYXdRdWFkQ29tbWFuZCA9IGNyZWF0ZURyYXdRdWFkKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGhhbmRsZUVycm9yKGVycik7XG4gIH1cblxuICAvLyBOaWNlbHkgZ2V0IGEgY2xlYXIgY29sb3IgZm9yIHRoZSBjYW52YXNcbiAgdmFyIGNsZWFyQ29sb3IgPSBkZWZpbmVkKG9wdC5jbGVhckNvbG9yLCAnYmxhY2snKTtcbiAgaWYgKHR5cGVvZiBjbGVhckNvbG9yID09PSAnc3RyaW5nJykge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUNvbG9yKGNsZWFyQ29sb3IpO1xuICAgIGlmICghcGFyc2VkLnJnYikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBwYXJzaW5nIHsgY2xlYXJDb2xvciB9IGNvbG9yIHN0cmluZyBcIicgKyBjbGVhckNvbG9yICsgJ1wiJyk7XG4gICAgfVxuICAgIGNsZWFyQ29sb3IgPSBwYXJzZWQucmdiLnNsaWNlKDAsIDMpLm1hcChmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIG4gLyAyNTU7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoY2xlYXJDb2xvciAmJiAoIUFycmF5LmlzQXJyYXkoY2xlYXJDb2xvcikgfHwgY2xlYXJDb2xvci5sZW5ndGggPCAzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXJyb3Igd2l0aCB7IGNsZWFyQ29sb3IgfSBvcHRpb24sIG11c3QgYmUgYSBzdHJpbmcgb3IgWyByLCBnLCBiIF0gZmxvYXQgYXJyYXknKTtcbiAgfVxuXG4gIHZhciBjbGVhckFscGhhID0gZGVmaW5lZChvcHQuY2xlYXJBbHBoYSwgMSk7XG4gIHZhciBjbGVhciA9IGNsZWFyQ29sb3IgPyBjbGVhckNvbG9yLmNvbmNhdChbIGNsZWFyQWxwaGEgfHwgMCBdKSA6IGZhbHNlO1xuXG4gIC8vIFJldHVybiBhIHJlbmRlcmVyIG9iamVjdFxuICByZXR1cm4ge1xuICAgIHJlbmRlcjogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAvLyBPbiBlYWNoIHRpY2ssIHVwZGF0ZSByZWdsIHRpbWVycyBhbmQgc2l6ZXNcbiAgICAgIHJlZ2wucG9sbCgpO1xuXG4gICAgICAvLyBDbGVhciBiYWNrYnVmZmVyIHdpdGggY29sb3JcbiAgICAgIGlmIChjbGVhcikge1xuICAgICAgICByZWdsLmNsZWFyKHtcbiAgICAgICAgICBjb2xvcjogY2xlYXIsXG4gICAgICAgICAgZGVwdGg6IDEsXG4gICAgICAgICAgc3RlbmNpbDogMFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gU3VibWl0IGRyYXcgY29tbWFuZFxuICAgICAgZHJhd1F1YWQocHJvcHMpO1xuXG4gICAgICAvLyBGbHVzaCBwZW5kaW5nIEdMIGNhbGxzIGZvciB0aGlzIGZyYW1lXG4gICAgICBnbC5mbHVzaCgpO1xuICAgIH0sXG4gICAgcmVnbDogcmVnbCxcbiAgICBkcmF3UXVhZDogZHJhd1F1YWQsXG4gICAgdW5sb2FkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBSZW1vdmUgR0wgdGV4dHVyZSBtYXBwaW5nc1xuICAgICAgdGV4dHVyZU1hcC5jbGVhcigpO1xuICAgICAgLy8gVW5sb2FkIHRoZSBjdXJyZW50IHJlZ2wgaW5zdGFuY2VcbiAgICAgIC8vIFRPRE86IFdlIHNob3VsZCBwcm9iYWJseSBhbHNvIGRlc3Ryb3kgdGV4dHVyZXMgY3JlYXRlZCBmcm9tIHRoaXMgbW9kdWxlIVxuICAgICAgcmVnbC5kZXN0cm95KCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIEEgdXNlci1mcmllbmRseSBkcmF3IGNvbW1hbmQgdGhhdCBzcGl0cyBvdXQgZXJyb3JzXG4gIGZ1bmN0aW9uIGRyYXdRdWFkIChwcm9wcykge1xuICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgLy8gRHJhdyBnZW5lcmF0aXZlIC8gc2hhZGVyIGFydFxuICAgIGlmIChkcmF3UXVhZENvbW1hbmQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRyYXdRdWFkQ29tbWFuZChwcm9wcyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGhhbmRsZUVycm9yKGVycikpIHtcbiAgICAgICAgICBpZiAocHJvcHMgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdXYXJuaW5nOiBzaGFkZXIucmVuZGVyKCkgaXMgbm90IGNhbGxlZCB3aXRoIGFueSBcInByb3BzXCIgcGFyYW1ldGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRHJhdyBjb21tYW5kXG4gIGZ1bmN0aW9uIGNyZWF0ZURyYXdRdWFkICgpIHtcbiAgICByZXR1cm4gcmVnbCh7XG4gICAgICBzY2lzc29yOiBvcHQuc2Npc3NvciA/IHtcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxuICAgICAgICBib3g6IHtcbiAgICAgICAgICB4OiByZWdsLnByb3AoJ3NjaXNzb3JYJyksXG4gICAgICAgICAgeTogcmVnbC5wcm9wKCdzY2lzc29yWScpLFxuICAgICAgICAgIHdpZHRoOiByZWdsLnByb3AoJ3NjaXNzb3JXaWR0aCcpLFxuICAgICAgICAgIGhlaWdodDogcmVnbC5wcm9wKCdzY2lzc29ySGVpZ2h0JylcbiAgICAgICAgfVxuICAgICAgfSA6IGZhbHNlLFxuICAgICAgLy8gUGFzcyBkb3duIHByb3BzIGZyb20gamF2YXNjcmlwdFxuICAgICAgdW5pZm9ybXM6IHVuaWZvcm1zLFxuICAgICAgLy8gRmFsbCBiYWNrIHRvIGEgc2ltcGxlIGZyYWdtZW50IHNoYWRlclxuICAgICAgZnJhZzogb3B0LmZyYWcgfHwgW1xuICAgICAgICAncHJlY2lzaW9uIGhpZ2hwIGZsb2F0OycsXG4gICAgICAgICcnLFxuICAgICAgICAndm9pZCBtYWluICgpIHsnLFxuICAgICAgICAnICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgLy8gRmFsbCBiYWNrIHRvIGEgc2ltcGxlIHZlcnRleCBzaGFkZXJcbiAgICAgIHZlcnQ6IG9wdC52ZXJ0IHx8IFtcbiAgICAgICAgJ3ByZWNpc2lvbiBoaWdocCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzMgcG9zaXRpb247JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VXY7JyxcbiAgICAgICAgJycsXG4gICAgICAgICd2b2lkIG1haW4gKCkgeycsXG4gICAgICAgICcgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbi54eXosIDEuMCk7JyxcbiAgICAgICAgJyAgdlV2ID0gZ2xfUG9zaXRpb24ueHkgKiAwLjUgKyAwLjU7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgLy8gU2V0dXAgdHJhbnNwYXJlbmN5IGJsZW5kaW5nXG4gICAgICBibGVuZDogb3B0LmJsZW5kICE9PSBmYWxzZSA/IHtcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxuICAgICAgICBmdW5jOiB7XG4gICAgICAgICAgc3JjUkdCOiAnc3JjIGFscGhhJyxcbiAgICAgICAgICBzcmNBbHBoYTogMSxcbiAgICAgICAgICBkc3RSR0I6ICdvbmUgbWludXMgc3JjIGFscGhhJyxcbiAgICAgICAgICBkc3RBbHBoYTogMVxuICAgICAgICB9XG4gICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgLy8gU2VuZCBtZXNoIHZlcnRleCBhdHRyaWJ1dGVzIHRvIHNoYWRlclxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBwb3NpdGlvbjogcXVhZC5wb3NpdGlvbnNcbiAgICAgIH0sXG4gICAgICAvLyBUaGUgaW5kaWNlcyBmb3IgdGhlIHF1YWQgbWVzaFxuICAgICAgZWxlbWVudHM6IHF1YWQuY2VsbHNcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUVycm9yIChlcnIpIHtcbiAgICBpZiAoL15cXChyZWdsXFwpLy50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgLy8gUmVnbCBhbHJlYWR5IGxvZ3MgYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlIDpcXFxuICAgICAgLy8gc28gbGV0J3MganVzdCBhdm9pZCByZS1wcmludGluZyB0aGUgc2FtZSB0aGluZ1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUZXh0dXJlTGlrZSAoZGF0YSkge1xuICByZXR1cm4gZGF0YSAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCc7XG59XG4iLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPVxuICBnbG9iYWwucGVyZm9ybWFuY2UgJiZcbiAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA/IGZ1bmN0aW9uIG5vdygpIHtcbiAgICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KClcbiAgfSA6IERhdGUubm93IHx8IGZ1bmN0aW9uIG5vdygpIHtcbiAgICByZXR1cm4gK25ldyBEYXRlXG4gIH1cbiIsIm1vZHVsZS5leHBvcnRzID0gaXNQcm9taXNlO1xuXG5mdW5jdGlvbiBpc1Byb21pc2Uob2JqKSB7XG4gIHJldHVybiAhIW9iaiAmJiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykgJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBpc05vZGVcblxuZnVuY3Rpb24gaXNOb2RlICh2YWwpIHtcbiAgcmV0dXJuICghdmFsIHx8IHR5cGVvZiB2YWwgIT09ICdvYmplY3QnKVxuICAgID8gZmFsc2VcbiAgICA6ICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygd2luZG93Lk5vZGUgPT09ICdvYmplY3QnKVxuICAgICAgPyAodmFsIGluc3RhbmNlb2Ygd2luZG93Lk5vZGUpXG4gICAgICA6ICh0eXBlb2YgdmFsLm5vZGVUeXBlID09PSAnbnVtYmVyJykgJiZcbiAgICAgICAgKHR5cGVvZiB2YWwubm9kZU5hbWUgPT09ICdzdHJpbmcnKVxufVxuIiwiLy8gVE9ETzogV2UgY2FuIHJlbW92ZSBhIGh1Z2UgY2h1bmsgb2YgYnVuZGxlIHNpemUgYnkgdXNpbmcgYSBzbWFsbGVyXG4vLyB1dGlsaXR5IG1vZHVsZSBmb3IgY29udmVydGluZyB1bml0cy5cbmltcG9ydCBpc0RPTSBmcm9tICdpcy1kb20nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50QVBJICgpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvd1snY2FudmFzLXNrZXRjaC1jbGknXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWQgKCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcmd1bWVudHNbaV0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQnJvd3NlciAoKSB7XG4gIHJldHVybiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXZWJHTENvbnRleHQgKGN0eCkge1xuICByZXR1cm4gdHlwZW9mIGN0eC5jbGVhciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY3R4LmNsZWFyQ29sb3IgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGN0eC5idWZmZXJEYXRhID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDYW52YXMgKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzRE9NKGVsZW1lbnQpICYmIC9jYW52YXMvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpICYmIHR5cGVvZiBlbGVtZW50LmdldENvbnRleHQgPT09ICdmdW5jdGlvbic7XG59XG4iLCIvKiFcbiAqIHJlcGVhdC1zdHJpbmcgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L3JlcGVhdC1zdHJpbmc+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEpvbiBTY2hsaW5rZXJ0LlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBSZXN1bHRzIGNhY2hlXG4gKi9cblxudmFyIHJlcyA9ICcnO1xudmFyIGNhY2hlO1xuXG4vKipcbiAqIEV4cG9zZSBgcmVwZWF0YFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVwZWF0O1xuXG4vKipcbiAqIFJlcGVhdCB0aGUgZ2l2ZW4gYHN0cmluZ2AgdGhlIHNwZWNpZmllZCBgbnVtYmVyYFxuICogb2YgdGltZXMuXG4gKlxuICogKipFeGFtcGxlOioqXG4gKlxuICogYGBganNcbiAqIHZhciByZXBlYXQgPSByZXF1aXJlKCdyZXBlYXQtc3RyaW5nJyk7XG4gKiByZXBlYXQoJ0EnLCA1KTtcbiAqIC8vPT4gQUFBQUFcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBgc3RyaW5nYCBUaGUgc3RyaW5nIHRvIHJlcGVhdFxuICogQHBhcmFtIHtOdW1iZXJ9IGBudW1iZXJgIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmdcbiAqIEByZXR1cm4ge1N0cmluZ30gUmVwZWF0ZWQgc3RyaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHJlcGVhdChzdHIsIG51bSkge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBhIHN0cmluZycpO1xuICB9XG5cbiAgLy8gY292ZXIgY29tbW9uLCBxdWljayB1c2UgY2FzZXNcbiAgaWYgKG51bSA9PT0gMSkgcmV0dXJuIHN0cjtcbiAgaWYgKG51bSA9PT0gMikgcmV0dXJuIHN0ciArIHN0cjtcblxuICB2YXIgbWF4ID0gc3RyLmxlbmd0aCAqIG51bTtcbiAgaWYgKGNhY2hlICE9PSBzdHIgfHwgdHlwZW9mIGNhY2hlID09PSAndW5kZWZpbmVkJykge1xuICAgIGNhY2hlID0gc3RyO1xuICAgIHJlcyA9ICcnO1xuICB9IGVsc2UgaWYgKHJlcy5sZW5ndGggPj0gbWF4KSB7XG4gICAgcmV0dXJuIHJlcy5zdWJzdHIoMCwgbWF4KTtcbiAgfVxuXG4gIHdoaWxlIChtYXggPiByZXMubGVuZ3RoICYmIG51bSA+IDEpIHtcbiAgICBpZiAobnVtICYgMSkge1xuICAgICAgcmVzICs9IHN0cjtcbiAgICB9XG5cbiAgICBudW0gPj49IDE7XG4gICAgc3RyICs9IHN0cjtcbiAgfVxuXG4gIHJlcyArPSBzdHI7XG4gIHJlcyA9IHJlcy5zdWJzdHIoMCwgbWF4KTtcbiAgcmV0dXJuIHJlcztcbn1cbiIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gJ2Z1bmN0aW9uJ1xuICA/IE9iamVjdC5rZXlzIDogc2hpbTtcblxuZXhwb3J0cy5zaGltID0gc2hpbTtcbmZ1bmN0aW9uIHNoaW0gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgcmV0dXJuIGtleXM7XG59XG4iLCJ2YXIgc3VwcG9ydHNBcmd1bWVudHNDbGFzcyA9IChmdW5jdGlvbigpe1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50cylcbn0pKCkgPT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHN1cHBvcnRzQXJndW1lbnRzQ2xhc3MgPyBzdXBwb3J0ZWQgOiB1bnN1cHBvcnRlZDtcblxuZXhwb3J0cy5zdXBwb3J0ZWQgPSBzdXBwb3J0ZWQ7XG5mdW5jdGlvbiBzdXBwb3J0ZWQob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn07XG5cbmV4cG9ydHMudW5zdXBwb3J0ZWQgPSB1bnN1cHBvcnRlZDtcbmZ1bmN0aW9uIHVuc3VwcG9ydGVkKG9iamVjdCl7XG4gIHJldHVybiBvYmplY3QgJiZcbiAgICB0eXBlb2Ygb2JqZWN0ID09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5sZW5ndGggPT0gJ251bWJlcicgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnY2FsbGVlJykgJiZcbiAgICAhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgJ2NhbGxlZScpIHx8XG4gICAgZmFsc2U7XG59O1xuIiwidmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi9saWIva2V5cy5qcycpO1xudmFyIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9saWIvaXNfYXJndW1lbnRzLmpzJyk7XG5cbnZhciBkZWVwRXF1YWwgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhY3R1YWwsIGV4cGVjdGVkLCBvcHRzKSB7XG4gIGlmICghb3B0cykgb3B0cyA9IHt9O1xuICAvLyA3LjEuIEFsbCBpZGVudGljYWwgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbiAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9IGVsc2UgaWYgKGFjdHVhbCBpbnN0YW5jZW9mIERhdGUgJiYgZXhwZWN0ZWQgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMuIE90aGVyIHBhaXJzIHRoYXQgZG8gbm90IGJvdGggcGFzcyB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcsXG4gIC8vIGVxdWl2YWxlbmNlIGlzIGRldGVybWluZWQgYnkgPT0uXG4gIH0gZWxzZSBpZiAoIWFjdHVhbCB8fCAhZXhwZWN0ZWQgfHwgdHlwZW9mIGFjdHVhbCAhPSAnb2JqZWN0JyAmJiB0eXBlb2YgZXhwZWN0ZWQgIT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gb3B0cy5zdHJpY3QgPyBhY3R1YWwgPT09IGV4cGVjdGVkIDogYWN0dWFsID09IGV4cGVjdGVkO1xuXG4gIC8vIDcuNC4gRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2Uge1xuICAgIHJldHVybiBvYmpFcXVpdihhY3R1YWwsIGV4cGVjdGVkLCBvcHRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZE9yTnVsbCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKHgpIHtcbiAgaWYgKCF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgeC5sZW5ndGggIT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgeC5jb3B5ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB4LnNsaWNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh4Lmxlbmd0aCA+IDAgJiYgdHlwZW9mIHhbMF0gIT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBvYmpFcXVpdihhLCBiLCBvcHRzKSB7XG4gIHZhciBpLCBrZXk7XG4gIGlmIChpc1VuZGVmaW5lZE9yTnVsbChhKSB8fCBpc1VuZGVmaW5lZE9yTnVsbChiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS5cbiAgaWYgKGEucHJvdG90eXBlICE9PSBiLnByb3RvdHlwZSkgcmV0dXJuIGZhbHNlO1xuICAvL35+fkkndmUgbWFuYWdlZCB0byBicmVhayBPYmplY3Qua2V5cyB0aHJvdWdoIHNjcmV3eSBhcmd1bWVudHMgcGFzc2luZy5cbiAgLy8gICBDb252ZXJ0aW5nIHRvIGFycmF5IHNvbHZlcyB0aGUgcHJvYmxlbS5cbiAgaWYgKGlzQXJndW1lbnRzKGEpKSB7XG4gICAgaWYgKCFpc0FyZ3VtZW50cyhiKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBkZWVwRXF1YWwoYSwgYiwgb3B0cyk7XG4gIH1cbiAgaWYgKGlzQnVmZmVyKGEpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihiKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHRyeSB7XG4gICAgdmFyIGthID0gb2JqZWN0S2V5cyhhKSxcbiAgICAgICAga2IgPSBvYmplY3RLZXlzKGIpO1xuICB9IGNhdGNoIChlKSB7Ly9oYXBwZW5zIHdoZW4gb25lIGlzIGEgc3RyaW5nIGxpdGVyYWwgYW5kIHRoZSBvdGhlciBpc24ndFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGtleXMgaW5jb3Jwb3JhdGVzXG4gIC8vIGhhc093blByb3BlcnR5KVxuICBpZiAoa2EubGVuZ3RoICE9IGtiLmxlbmd0aClcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vdGhlIHNhbWUgc2V0IG9mIGtleXMgKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksXG4gIGthLnNvcnQoKTtcbiAga2Iuc29ydCgpO1xuICAvL35+fmNoZWFwIGtleSB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGthW2ldICE9IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIG9wdHMpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYjtcbn1cbiIsIi8qXG4gKiBEYXRlIEZvcm1hdCAxLjIuM1xuICogKGMpIDIwMDctMjAwOSBTdGV2ZW4gTGV2aXRoYW4gPHN0ZXZlbmxldml0aGFuLmNvbT5cbiAqIE1JVCBsaWNlbnNlXG4gKlxuICogSW5jbHVkZXMgZW5oYW5jZW1lbnRzIGJ5IFNjb3R0IFRyZW5kYSA8c2NvdHQudHJlbmRhLm5ldD5cbiAqIGFuZCBLcmlzIEtvd2FsIDxjaXhhci5jb20vfmtyaXMua293YWwvPlxuICpcbiAqIEFjY2VwdHMgYSBkYXRlLCBhIG1hc2ssIG9yIGEgZGF0ZSBhbmQgYSBtYXNrLlxuICogUmV0dXJucyBhIGZvcm1hdHRlZCB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIGRhdGUgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgZGF0ZS90aW1lLlxuICogVGhlIG1hc2sgZGVmYXVsdHMgdG8gZGF0ZUZvcm1hdC5tYXNrcy5kZWZhdWx0LlxuICovXG5cbihmdW5jdGlvbihnbG9iYWwpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBkYXRlRm9ybWF0ID0gKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHRva2VuID0gL2R7MSw0fXxtezEsNH18eXkoPzp5eSk/fChbSGhNc1R0XSlcXDE/fFtMbG9TWldOXXxcIlteXCJdKlwifCdbXiddKicvZztcbiAgICAgIHZhciB0aW1lem9uZSA9IC9cXGIoPzpbUE1DRUFdW1NEUF1UfCg/OlBhY2lmaWN8TW91bnRhaW58Q2VudHJhbHxFYXN0ZXJufEF0bGFudGljKSAoPzpTdGFuZGFyZHxEYXlsaWdodHxQcmV2YWlsaW5nKSBUaW1lfCg/OkdNVHxVVEMpKD86Wy0rXVxcZHs0fSk/KVxcYi9nO1xuICAgICAgdmFyIHRpbWV6b25lQ2xpcCA9IC9bXi0rXFxkQS1aXS9nO1xuICBcbiAgICAgIC8vIFJlZ2V4ZXMgYW5kIHN1cHBvcnRpbmcgZnVuY3Rpb25zIGFyZSBjYWNoZWQgdGhyb3VnaCBjbG9zdXJlXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIG1hc2ssIHV0YywgZ210KSB7XG4gIFxuICAgICAgICAvLyBZb3UgY2FuJ3QgcHJvdmlkZSB1dGMgaWYgeW91IHNraXAgb3RoZXIgYXJncyAodXNlIHRoZSAnVVRDOicgbWFzayBwcmVmaXgpXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIGtpbmRPZihkYXRlKSA9PT0gJ3N0cmluZycgJiYgIS9cXGQvLnRlc3QoZGF0ZSkpIHtcbiAgICAgICAgICBtYXNrID0gZGF0ZTtcbiAgICAgICAgICBkYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gIFxuICAgICAgICBkYXRlID0gZGF0ZSB8fCBuZXcgRGF0ZTtcbiAgXG4gICAgICAgIGlmKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICB9XG4gIFxuICAgICAgICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgZGF0ZScpO1xuICAgICAgICB9XG4gIFxuICAgICAgICBtYXNrID0gU3RyaW5nKGRhdGVGb3JtYXQubWFza3NbbWFza10gfHwgbWFzayB8fCBkYXRlRm9ybWF0Lm1hc2tzWydkZWZhdWx0J10pO1xuICBcbiAgICAgICAgLy8gQWxsb3cgc2V0dGluZyB0aGUgdXRjL2dtdCBhcmd1bWVudCB2aWEgdGhlIG1hc2tcbiAgICAgICAgdmFyIG1hc2tTbGljZSA9IG1hc2suc2xpY2UoMCwgNCk7XG4gICAgICAgIGlmIChtYXNrU2xpY2UgPT09ICdVVEM6JyB8fCBtYXNrU2xpY2UgPT09ICdHTVQ6Jykge1xuICAgICAgICAgIG1hc2sgPSBtYXNrLnNsaWNlKDQpO1xuICAgICAgICAgIHV0YyA9IHRydWU7XG4gICAgICAgICAgaWYgKG1hc2tTbGljZSA9PT0gJ0dNVDonKSB7XG4gICAgICAgICAgICBnbXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICBcbiAgICAgICAgdmFyIF8gPSB1dGMgPyAnZ2V0VVRDJyA6ICdnZXQnO1xuICAgICAgICB2YXIgZCA9IGRhdGVbXyArICdEYXRlJ10oKTtcbiAgICAgICAgdmFyIEQgPSBkYXRlW18gKyAnRGF5J10oKTtcbiAgICAgICAgdmFyIG0gPSBkYXRlW18gKyAnTW9udGgnXSgpO1xuICAgICAgICB2YXIgeSA9IGRhdGVbXyArICdGdWxsWWVhciddKCk7XG4gICAgICAgIHZhciBIID0gZGF0ZVtfICsgJ0hvdXJzJ10oKTtcbiAgICAgICAgdmFyIE0gPSBkYXRlW18gKyAnTWludXRlcyddKCk7XG4gICAgICAgIHZhciBzID0gZGF0ZVtfICsgJ1NlY29uZHMnXSgpO1xuICAgICAgICB2YXIgTCA9IGRhdGVbXyArICdNaWxsaXNlY29uZHMnXSgpO1xuICAgICAgICB2YXIgbyA9IHV0YyA/IDAgOiBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICAgIHZhciBXID0gZ2V0V2VlayhkYXRlKTtcbiAgICAgICAgdmFyIE4gPSBnZXREYXlPZldlZWsoZGF0ZSk7XG4gICAgICAgIHZhciBmbGFncyA9IHtcbiAgICAgICAgICBkOiAgICBkLFxuICAgICAgICAgIGRkOiAgIHBhZChkKSxcbiAgICAgICAgICBkZGQ6ICBkYXRlRm9ybWF0LmkxOG4uZGF5TmFtZXNbRF0sXG4gICAgICAgICAgZGRkZDogZGF0ZUZvcm1hdC5pMThuLmRheU5hbWVzW0QgKyA3XSxcbiAgICAgICAgICBtOiAgICBtICsgMSxcbiAgICAgICAgICBtbTogICBwYWQobSArIDEpLFxuICAgICAgICAgIG1tbTogIGRhdGVGb3JtYXQuaTE4bi5tb250aE5hbWVzW21dLFxuICAgICAgICAgIG1tbW06IGRhdGVGb3JtYXQuaTE4bi5tb250aE5hbWVzW20gKyAxMl0sXG4gICAgICAgICAgeXk6ICAgU3RyaW5nKHkpLnNsaWNlKDIpLFxuICAgICAgICAgIHl5eXk6IHksXG4gICAgICAgICAgaDogICAgSCAlIDEyIHx8IDEyLFxuICAgICAgICAgIGhoOiAgIHBhZChIICUgMTIgfHwgMTIpLFxuICAgICAgICAgIEg6ICAgIEgsXG4gICAgICAgICAgSEg6ICAgcGFkKEgpLFxuICAgICAgICAgIE06ICAgIE0sXG4gICAgICAgICAgTU06ICAgcGFkKE0pLFxuICAgICAgICAgIHM6ICAgIHMsXG4gICAgICAgICAgc3M6ICAgcGFkKHMpLFxuICAgICAgICAgIGw6ICAgIHBhZChMLCAzKSxcbiAgICAgICAgICBMOiAgICBwYWQoTWF0aC5yb3VuZChMIC8gMTApKSxcbiAgICAgICAgICB0OiAgICBIIDwgMTIgPyBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzBdIDogZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1sxXSxcbiAgICAgICAgICB0dDogICBIIDwgMTIgPyBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzJdIDogZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1szXSxcbiAgICAgICAgICBUOiAgICBIIDwgMTIgPyBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzRdIDogZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s1XSxcbiAgICAgICAgICBUVDogICBIIDwgMTIgPyBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzZdIDogZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s3XSxcbiAgICAgICAgICBaOiAgICBnbXQgPyAnR01UJyA6IHV0YyA/ICdVVEMnIDogKFN0cmluZyhkYXRlKS5tYXRjaCh0aW1lem9uZSkgfHwgWycnXSkucG9wKCkucmVwbGFjZSh0aW1lem9uZUNsaXAsICcnKSxcbiAgICAgICAgICBvOiAgICAobyA+IDAgPyAnLScgOiAnKycpICsgcGFkKE1hdGguZmxvb3IoTWF0aC5hYnMobykgLyA2MCkgKiAxMDAgKyBNYXRoLmFicyhvKSAlIDYwLCA0KSxcbiAgICAgICAgICBTOiAgICBbJ3RoJywgJ3N0JywgJ25kJywgJ3JkJ11bZCAlIDEwID4gMyA/IDAgOiAoZCAlIDEwMCAtIGQgJSAxMCAhPSAxMCkgKiBkICUgMTBdLFxuICAgICAgICAgIFc6ICAgIFcsXG4gICAgICAgICAgTjogICAgTlxuICAgICAgICB9O1xuICBcbiAgICAgICAgcmV0dXJuIG1hc2sucmVwbGFjZSh0b2tlbiwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgaWYgKG1hdGNoIGluIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmxhZ3NbbWF0Y2hdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWF0Y2guc2xpY2UoMSwgbWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KSgpO1xuXG4gIGRhdGVGb3JtYXQubWFza3MgPSB7XG4gICAgJ2RlZmF1bHQnOiAgICAgICAgICAgICAgICdkZGQgbW1tIGRkIHl5eXkgSEg6TU06c3MnLFxuICAgICdzaG9ydERhdGUnOiAgICAgICAgICAgICAnbS9kL3l5JyxcbiAgICAnbWVkaXVtRGF0ZSc6ICAgICAgICAgICAgJ21tbSBkLCB5eXl5JyxcbiAgICAnbG9uZ0RhdGUnOiAgICAgICAgICAgICAgJ21tbW0gZCwgeXl5eScsXG4gICAgJ2Z1bGxEYXRlJzogICAgICAgICAgICAgICdkZGRkLCBtbW1tIGQsIHl5eXknLFxuICAgICdzaG9ydFRpbWUnOiAgICAgICAgICAgICAnaDpNTSBUVCcsXG4gICAgJ21lZGl1bVRpbWUnOiAgICAgICAgICAgICdoOk1NOnNzIFRUJyxcbiAgICAnbG9uZ1RpbWUnOiAgICAgICAgICAgICAgJ2g6TU06c3MgVFQgWicsXG4gICAgJ2lzb0RhdGUnOiAgICAgICAgICAgICAgICd5eXl5LW1tLWRkJyxcbiAgICAnaXNvVGltZSc6ICAgICAgICAgICAgICAgJ0hIOk1NOnNzJyxcbiAgICAnaXNvRGF0ZVRpbWUnOiAgICAgICAgICAgJ3l5eXktbW0tZGRcXCdUXFwnSEg6TU06c3NvJyxcbiAgICAnaXNvVXRjRGF0ZVRpbWUnOiAgICAgICAgJ1VUQzp5eXl5LW1tLWRkXFwnVFxcJ0hIOk1NOnNzXFwnWlxcJycsXG4gICAgJ2V4cGlyZXNIZWFkZXJGb3JtYXQnOiAgICdkZGQsIGRkIG1tbSB5eXl5IEhIOk1NOnNzIFonXG4gIH07XG5cbiAgLy8gSW50ZXJuYXRpb25hbGl6YXRpb24gc3RyaW5nc1xuICBkYXRlRm9ybWF0LmkxOG4gPSB7XG4gICAgZGF5TmFtZXM6IFtcbiAgICAgICdTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnLFxuICAgICAgJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J1xuICAgIF0sXG4gICAgbW9udGhOYW1lczogW1xuICAgICAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJyxcbiAgICAgICdKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ1xuICAgIF0sXG4gICAgdGltZU5hbWVzOiBbXG4gICAgICAnYScsICdwJywgJ2FtJywgJ3BtJywgJ0EnLCAnUCcsICdBTScsICdQTSdcbiAgICBdXG4gIH07XG5cbmZ1bmN0aW9uIHBhZCh2YWwsIGxlbikge1xuICB2YWwgPSBTdHJpbmcodmFsKTtcbiAgbGVuID0gbGVuIHx8IDI7XG4gIHdoaWxlICh2YWwubGVuZ3RoIDwgbGVuKSB7XG4gICAgdmFsID0gJzAnICsgdmFsO1xuICB9XG4gIHJldHVybiB2YWw7XG59XG5cbi8qKlxuICogR2V0IHRoZSBJU08gODYwMSB3ZWVrIG51bWJlclxuICogQmFzZWQgb24gY29tbWVudHMgZnJvbVxuICogaHR0cDovL3RlY2hibG9nLnByb2N1cmlvcy5ubC9rL242MTgvbmV3cy92aWV3LzMzNzk2LzE0ODYzL0NhbGN1bGF0ZS1JU08tODYwMS13ZWVrLWFuZC15ZWFyLWluLWphdmFzY3JpcHQuaHRtbFxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gYGRhdGVgXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFdlZWsoZGF0ZSkge1xuICAvLyBSZW1vdmUgdGltZSBjb21wb25lbnRzIG9mIGRhdGVcbiAgdmFyIHRhcmdldFRodXJzZGF5ID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcblxuICAvLyBDaGFuZ2UgZGF0ZSB0byBUaHVyc2RheSBzYW1lIHdlZWtcbiAgdGFyZ2V0VGh1cnNkYXkuc2V0RGF0ZSh0YXJnZXRUaHVyc2RheS5nZXREYXRlKCkgLSAoKHRhcmdldFRodXJzZGF5LmdldERheSgpICsgNikgJSA3KSArIDMpO1xuXG4gIC8vIFRha2UgSmFudWFyeSA0dGggYXMgaXQgaXMgYWx3YXlzIGluIHdlZWsgMSAoc2VlIElTTyA4NjAxKVxuICB2YXIgZmlyc3RUaHVyc2RheSA9IG5ldyBEYXRlKHRhcmdldFRodXJzZGF5LmdldEZ1bGxZZWFyKCksIDAsIDQpO1xuXG4gIC8vIENoYW5nZSBkYXRlIHRvIFRodXJzZGF5IHNhbWUgd2Vla1xuICBmaXJzdFRodXJzZGF5LnNldERhdGUoZmlyc3RUaHVyc2RheS5nZXREYXRlKCkgLSAoKGZpcnN0VGh1cnNkYXkuZ2V0RGF5KCkgKyA2KSAlIDcpICsgMyk7XG5cbiAgLy8gQ2hlY2sgaWYgZGF5bGlnaHQtc2F2aW5nLXRpbWUtc3dpdGNoIG9jY3VycmVkIGFuZCBjb3JyZWN0IGZvciBpdFxuICB2YXIgZHMgPSB0YXJnZXRUaHVyc2RheS5nZXRUaW1lem9uZU9mZnNldCgpIC0gZmlyc3RUaHVyc2RheS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICB0YXJnZXRUaHVyc2RheS5zZXRIb3Vycyh0YXJnZXRUaHVyc2RheS5nZXRIb3VycygpIC0gZHMpO1xuXG4gIC8vIE51bWJlciBvZiB3ZWVrcyBiZXR3ZWVuIHRhcmdldCBUaHVyc2RheSBhbmQgZmlyc3QgVGh1cnNkYXlcbiAgdmFyIHdlZWtEaWZmID0gKHRhcmdldFRodXJzZGF5IC0gZmlyc3RUaHVyc2RheSkgLyAoODY0MDAwMDAqNyk7XG4gIHJldHVybiAxICsgTWF0aC5mbG9vcih3ZWVrRGlmZik7XG59XG5cbi8qKlxuICogR2V0IElTTy04NjAxIG51bWVyaWMgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRheSBvZiB0aGUgd2Vla1xuICogMSAoZm9yIE1vbmRheSkgdGhyb3VnaCA3IChmb3IgU3VuZGF5KVxuICogXG4gKiBAcGFyYW0gIHtPYmplY3R9IGBkYXRlYFxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXREYXlPZldlZWsoZGF0ZSkge1xuICB2YXIgZG93ID0gZGF0ZS5nZXREYXkoKTtcbiAgaWYoZG93ID09PSAwKSB7XG4gICAgZG93ID0gNztcbiAgfVxuICByZXR1cm4gZG93O1xufVxuXG4vKipcbiAqIGtpbmQtb2Ygc2hvcnRjdXRcbiAqIEBwYXJhbSAgeyp9IHZhbFxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBraW5kT2YodmFsKSB7XG4gIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ251bGwnO1xuICB9XG5cbiAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWw7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgcmV0dXJuICdhcnJheSc7XG4gIH1cblxuICByZXR1cm4ge30udG9TdHJpbmcuY2FsbCh2YWwpXG4gICAgLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpO1xufTtcblxuXG5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZGF0ZUZvcm1hdDtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGRhdGVGb3JtYXQ7XG4gIH0gZWxzZSB7XG4gICAgZ2xvYmFsLmRhdGVGb3JtYXQgPSBkYXRlRm9ybWF0O1xuICB9XG59KSh0aGlzKTtcbiIsIi8qIVxuICogcGFkLWxlZnQgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L3BhZC1sZWZ0PlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBKb24gU2NobGlua2VydC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciByZXBlYXQgPSByZXF1aXJlKCdyZXBlYXQtc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFkTGVmdChzdHIsIG51bSwgY2gpIHtcbiAgc3RyID0gc3RyLnRvU3RyaW5nKCk7XG5cbiAgaWYgKHR5cGVvZiBudW0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmIChjaCA9PT0gMCkge1xuICAgIGNoID0gJzAnO1xuICB9IGVsc2UgaWYgKGNoKSB7XG4gICAgY2ggPSBjaC50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIGNoID0gJyAnO1xuICB9XG5cbiAgcmV0dXJuIHJlcGVhdChjaCwgbnVtIC0gc3RyLmxlbmd0aCkgKyBzdHI7XG59O1xuIiwiaW1wb3J0IGRhdGVmb3JtYXQgZnJvbSAnZGF0ZWZvcm1hdCc7XG5pbXBvcnQgYXNzaWduIGZyb20gJ29iamVjdC1hc3NpZ24nO1xuaW1wb3J0IHBhZExlZnQgZnJvbSAncGFkLWxlZnQnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50QVBJIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xubGV0IGxpbms7XG5sZXQgZGVmYXVsdEV4dHMgPSB7IGV4dGVuc2lvbjogJycsIHByZWZpeDogJycsIHN1ZmZpeDogJycgfTtcblxuLy8gQWx0ZXJuYXRpdmUgc29sdXRpb24gZm9yIHNhdmluZyBmaWxlcyxcbi8vIGEgYml0IHNsb3dlciBhbmQgZG9lcyBub3Qgd29yayBpbiBTYWZhcmlcbi8vIGZ1bmN0aW9uIGZldGNoQmxvYkZyb21EYXRhVVJMIChkYXRhVVJMKSB7XG4vLyAgIHJldHVybiB3aW5kb3cuZmV0Y2goZGF0YVVSTCkudGhlbihyZXMgPT4gcmVzLmJsb2IoKSk7XG4vLyB9XG5cbmNvbnN0IHN1cHBvcnRlZEVuY29kaW5ncyA9IFtcbiAgJ2ltYWdlL3BuZycsXG4gICdpbWFnZS9qcGVnJyxcbiAgJ2ltYWdlL3dlYnAnXG5dO1xuXG5mdW5jdGlvbiBzdHJlYW0gKGlzU3RhcnQsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIG9wdHMgPSBhc3NpZ24oe30sIGRlZmF1bHRFeHRzLCBvcHRzKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHJlc29sdmVGaWxlbmFtZShPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7XG4gICAgICBleHRlbnNpb246ICcnLFxuICAgICAgZnJhbWU6IHVuZGVmaW5lZFxuICAgIH0pKTtcbiAgICBjb25zdCBmdW5jID0gaXNTdGFydCA/ICdzdHJlYW1TdGFydCcgOiAnc3RyZWFtRW5kJztcbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBpZiAoY2xpZW50ICYmIGNsaWVudC5vdXRwdXQgJiYgdHlwZW9mIGNsaWVudFtmdW5jXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGNsaWVudFtmdW5jXShhc3NpZ24oe30sIG9wdHMsIHsgZmlsZW5hbWUgfSkpXG4gICAgICAgIC50aGVuKGV2ID0+IHJlc29sdmUoZXYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc29sdmUoeyBmaWxlbmFtZSwgY2xpZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtU3RhcnQgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gc3RyZWFtKHRydWUsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtRW5kIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIHN0cmVhbShmYWxzZSwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDYW52YXMgKGNhbnZhcywgb3B0ID0ge30pIHtcbiAgY29uc3QgZW5jb2RpbmcgPSBvcHQuZW5jb2RpbmcgfHwgJ2ltYWdlL3BuZyc7XG4gIGlmICghc3VwcG9ydGVkRW5jb2RpbmdzLmluY2x1ZGVzKGVuY29kaW5nKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNhbnZhcyBlbmNvZGluZyAke2VuY29kaW5nfWApO1xuICBsZXQgZXh0ZW5zaW9uID0gKGVuY29kaW5nLnNwbGl0KCcvJylbMV0gfHwgJycpLnJlcGxhY2UoL2pwZWcvaSwgJ2pwZycpO1xuICBpZiAoZXh0ZW5zaW9uKSBleHRlbnNpb24gPSBgLiR7ZXh0ZW5zaW9ufWAudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHtcbiAgICBleHRlbnNpb24sXG4gICAgdHlwZTogZW5jb2RpbmcsXG4gICAgZGF0YVVSTDogY2FudmFzLnRvRGF0YVVSTChlbmNvZGluZywgb3B0LmVuY29kaW5nUXVhbGl0eSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmxvYkZyb21EYXRhVVJMIChkYXRhVVJMKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHNwbGl0SW5kZXggPSBkYXRhVVJMLmluZGV4T2YoJywnKTtcbiAgICBpZiAoc3BsaXRJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJlc29sdmUobmV3IHdpbmRvdy5CbG9iKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXNlNjQgPSBkYXRhVVJMLnNsaWNlKHNwbGl0SW5kZXggKyAxKTtcbiAgICBjb25zdCBieXRlU3RyaW5nID0gd2luZG93LmF0b2IoYmFzZTY0KTtcbiAgICBjb25zdCB0eXBlID0gZGF0YVVSTC5zbGljZSgwLCBzcGxpdEluZGV4KTtcbiAgICBjb25zdCBtaW1lTWF0Y2ggPSAvZGF0YTooW147XSspLy5leGVjKHR5cGUpO1xuICAgIGNvbnN0IG1pbWUgPSAobWltZU1hdGNoID8gbWltZU1hdGNoWzFdIDogJycpIHx8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhYiA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XG4gICAgY29uc3QgaWEgPSBuZXcgVWludDhBcnJheShhYik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlU3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpYVtpXSA9IGJ5dGVTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmVzb2x2ZShuZXcgd2luZG93LkJsb2IoWyBhYiBdLCB7IHR5cGU6IG1pbWUgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVEYXRhVVJMIChkYXRhVVJMLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIGNyZWF0ZUJsb2JGcm9tRGF0YVVSTChkYXRhVVJMKVxuICAgIC50aGVuKGJsb2IgPT4gc2F2ZUJsb2IoYmxvYiwgb3B0cykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUJsb2IgKGJsb2IsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgb3B0cyA9IGFzc2lnbih7fSwgZGVmYXVsdEV4dHMsIG9wdHMpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gb3B0cy5maWxlbmFtZTtcblxuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGlmIChjbGllbnQgJiYgdHlwZW9mIGNsaWVudC5zYXZlQmxvYiA9PT0gJ2Z1bmN0aW9uJyAmJiBjbGllbnQub3V0cHV0KSB7XG4gICAgICAvLyBuYXRpdmUgc2F2aW5nIHVzaW5nIGEgQ0xJIHRvb2xcbiAgICAgIHJldHVybiBjbGllbnQuc2F2ZUJsb2IoYmxvYiwgYXNzaWduKHt9LCBvcHRzLCB7IGZpbGVuYW1lIH0pKVxuICAgICAgICAudGhlbihldiA9PiByZXNvbHZlKGV2KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvcmNlIGRvd25sb2FkXG4gICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICB9XG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgICBsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICBsaW5rLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGxpbmsub25jbGljayA9IG5vb3A7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgIGlmIChsaW5rLnBhcmVudEVsZW1lbnQpIGxpbmsucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICAgICAgICBsaW5rLnJlbW92ZUF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICAgIHJlc29sdmUoeyBmaWxlbmFtZSwgY2xpZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlRmlsZSAoZGF0YSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHBhcnRzID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbIGRhdGEgXTtcbiAgY29uc3QgYmxvYiA9IG5ldyB3aW5kb3cuQmxvYihwYXJ0cywgeyB0eXBlOiBvcHRzLnR5cGUgfHwgJycgfSk7XG4gIHJldHVybiBzYXZlQmxvYihibG9iLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVTdGFtcCAoKSB7XG4gIGNvbnN0IGRhdGVGb3JtYXRTdHIgPSBgeXl5eS5tbS5kZC1ISC5NTS5zc2A7XG4gIHJldHVybiBkYXRlZm9ybWF0KG5ldyBEYXRlKCksIGRhdGVGb3JtYXRTdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEZpbGUgKHByZWZpeCA9ICcnLCBzdWZmaXggPSAnJywgZXh0KSB7XG4gIC8vIGNvbnN0IGRhdGVGb3JtYXRTdHIgPSBgeXl5eS5tbS5kZC1ISC5NTS5zc2A7XG4gIGNvbnN0IGRhdGVGb3JtYXRTdHIgPSBgeXl5eS1tbS1kZCAnYXQnIGguTU0uc3MgVFRgO1xuICByZXR1cm4gYCR7cHJlZml4fSR7ZGF0ZWZvcm1hdChuZXcgRGF0ZSgpLCBkYXRlRm9ybWF0U3RyKX0ke3N1ZmZpeH0ke2V4dH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZpbGVuYW1lIChvcHQgPSB7fSkge1xuICBvcHQgPSBhc3NpZ24oe30sIG9wdCk7XG5cbiAgLy8gQ3VzdG9tIGZpbGVuYW1lIGZ1bmN0aW9uXG4gIGlmICh0eXBlb2Ygb3B0LmZpbGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gb3B0LmZpbGUob3B0KTtcbiAgfSBlbHNlIGlmIChvcHQuZmlsZSkge1xuICAgIHJldHVybiBvcHQuZmlsZTtcbiAgfVxuXG4gIGxldCBmcmFtZSA9IG51bGw7XG4gIGxldCBleHRlbnNpb24gPSAnJztcbiAgaWYgKHR5cGVvZiBvcHQuZXh0ZW5zaW9uID09PSAnc3RyaW5nJykgZXh0ZW5zaW9uID0gb3B0LmV4dGVuc2lvbjtcblxuICBpZiAodHlwZW9mIG9wdC5mcmFtZSA9PT0gJ251bWJlcicpIHtcbiAgICBsZXQgdG90YWxGcmFtZXM7XG4gICAgaWYgKHR5cGVvZiBvcHQudG90YWxGcmFtZXMgPT09ICdudW1iZXInKSB7XG4gICAgICB0b3RhbEZyYW1lcyA9IG9wdC50b3RhbEZyYW1lcztcbiAgICB9IGVsc2Uge1xuICAgICAgdG90YWxGcmFtZXMgPSBNYXRoLm1heCgxMDAwMCwgb3B0LmZyYW1lKTtcbiAgICB9XG4gICAgZnJhbWUgPSBwYWRMZWZ0KFN0cmluZyhvcHQuZnJhbWUpLCBTdHJpbmcodG90YWxGcmFtZXMpLmxlbmd0aCwgJzAnKTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyU3RyID0gaXNGaW5pdGUob3B0LnRvdGFsTGF5ZXJzKSAmJiBpc0Zpbml0ZShvcHQubGF5ZXIpICYmIG9wdC50b3RhbExheWVycyA+IDEgPyBgJHtvcHQubGF5ZXJ9YCA6ICcnO1xuICBpZiAoZnJhbWUgIT0gbnVsbCkge1xuICAgIHJldHVybiBbIGxheWVyU3RyLCBmcmFtZSBdLmZpbHRlcihCb29sZWFuKS5qb2luKCctJykgKyBleHRlbnNpb247XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGVmYXVsdEZpbGVOYW1lID0gb3B0LnRpbWVTdGFtcDtcbiAgICByZXR1cm4gWyBvcHQucHJlZml4LCBvcHQubmFtZSB8fCBkZWZhdWx0RmlsZU5hbWUsIGxheWVyU3RyLCBvcHQuaGFzaCwgb3B0LnN1ZmZpeCBdLmZpbHRlcihCb29sZWFuKS5qb2luKCctJykgKyBleHRlbnNpb247XG4gIH1cbn1cbiIsIi8vIEhhbmRsZSBzb21lIGNvbW1vbiB0eXBvc1xuY29uc3QgY29tbW9uVHlwb3MgPSB7XG4gIGRpbWVuc2lvbjogJ2RpbWVuc2lvbnMnLFxuICBhbmltYXRlZDogJ2FuaW1hdGUnLFxuICBhbmltYXRpbmc6ICdhbmltYXRlJyxcbiAgdW5pdDogJ3VuaXRzJyxcbiAgUDU6ICdwNScsXG4gIHBpeGVsbGF0ZWQ6ICdwaXhlbGF0ZWQnLFxuICBsb29waW5nOiAnbG9vcCcsXG4gIHBpeGVsUGVySW5jaDogJ3BpeGVscydcbn07XG5cbi8vIEhhbmRsZSBhbGwgb3RoZXIgdHlwb3NcbmNvbnN0IGFsbEtleXMgPSBbXG4gICdkaW1lbnNpb25zJywgJ3VuaXRzJywgJ3BpeGVsc1BlckluY2gnLCAnb3JpZW50YXRpb24nLFxuICAnc2NhbGVUb0ZpdCcsICdzY2FsZVRvVmlldycsICdibGVlZCcsICdwaXhlbFJhdGlvJyxcbiAgJ2V4cG9ydFBpeGVsUmF0aW8nLCAnbWF4UGl4ZWxSYXRpbycsICdzY2FsZUNvbnRleHQnLFxuICAncmVzaXplQ2FudmFzJywgJ3N0eWxlQ2FudmFzJywgJ2NhbnZhcycsICdjb250ZXh0JywgJ2F0dHJpYnV0ZXMnLFxuICAncGFyZW50JywgJ2ZpbGUnLCAnbmFtZScsICdwcmVmaXgnLCAnc3VmZml4JywgJ2FuaW1hdGUnLCAncGxheWluZycsXG4gICdsb29wJywgJ2R1cmF0aW9uJywgJ3RvdGFsRnJhbWVzJywgJ2ZwcycsICdwbGF5YmFja1JhdGUnLCAndGltZVNjYWxlJyxcbiAgJ2ZyYW1lJywgJ3RpbWUnLCAnZmx1c2gnLCAncGl4ZWxhdGVkJywgJ2hvdGtleXMnLCAncDUnLCAnaWQnLFxuICAnc2NhbGVUb0ZpdFBhZGRpbmcnLCAnZGF0YScsICdwYXJhbXMnLCAnZW5jb2RpbmcnLCAnZW5jb2RpbmdRdWFsaXR5J1xuXTtcblxuLy8gVGhpcyBpcyBmYWlybHkgb3BpbmlvbmF0ZWQgYW5kIGZvcmNlcyB1c2VycyB0byB1c2UgdGhlICdkYXRhJyBwYXJhbWV0ZXJcbi8vIGlmIHRoZXkgd2FudCB0byBwYXNzIGFsb25nIG5vbi1zZXR0aW5nIG9iamVjdHMuLi5cbmV4cG9ydCBjb25zdCBjaGVja1NldHRpbmdzID0gKHNldHRpbmdzKSA9PiB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzZXR0aW5ncyk7XG4gIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmIChrZXkgaW4gY29tbW9uVHlwb3MpIHtcbiAgICAgIGNvbnN0IGFjdHVhbCA9IGNvbW1vblR5cG9zW2tleV07XG4gICAgICBjb25zb2xlLndhcm4oYFtjYW52YXMtc2tldGNoXSBDb3VsZCBub3QgcmVjb2duaXplIHRoZSBzZXR0aW5nIFwiJHtrZXl9XCIsIGRpZCB5b3UgbWVhbiBcIiR7YWN0dWFsfVwiP2ApO1xuICAgIH0gZWxzZSBpZiAoIWFsbEtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgY29uc29sZS53YXJuKGBbY2FudmFzLXNrZXRjaF0gQ291bGQgbm90IHJlY29nbml6ZSB0aGUgc2V0dGluZyBcIiR7a2V5fVwiYCk7XG4gICAgfVxuICB9KTtcbn07XG4iLCJjb25zdCBkZWZhdWx0VW5pdHMgPSAnbW0nO1xuXG5jb25zdCBkYXRhID0gW1xuICAvLyBDb21tb24gUGFwZXIgU2l6ZXNcbiAgLy8gKE1vc3RseSBOb3J0aC1BbWVyaWNhbiBiYXNlZClcbiAgWyAncG9zdGNhcmQnLCAxMDEuNiwgMTUyLjQgXSxcbiAgWyAncG9zdGVyLXNtYWxsJywgMjgwLCA0MzAgXSxcbiAgWyAncG9zdGVyJywgNDYwLCA2MTAgXSxcbiAgWyAncG9zdGVyLWxhcmdlJywgNjEwLCA5MTAgXSxcbiAgWyAnYnVzaW5lc3MtY2FyZCcsIDUwLjgsIDg4LjkgXSxcblxuICAvLyBQaG90b2dyYXBoaWMgUHJpbnQgUGFwZXIgU2l6ZXNcbiAgWyAnMnInLCA2NCwgODkgXSxcbiAgWyAnM3InLCA4OSwgMTI3IF0sXG4gIFsgJzRyJywgMTAyLCAxNTIgXSxcbiAgWyAnNXInLCAxMjcsIDE3OCBdLCAvLyA14oCzeDfigLNcbiAgWyAnNnInLCAxNTIsIDIwMyBdLCAvLyA24oCzeDjigLNcbiAgWyAnOHInLCAyMDMsIDI1NCBdLCAvLyA44oCzeDEw4oCzXG4gIFsgJzEwcicsIDI1NCwgMzA1IF0sIC8vIDEw4oCzeDEy4oCzXG4gIFsgJzExcicsIDI3OSwgMzU2IF0sIC8vIDEx4oCzeDE04oCzXG4gIFsgJzEycicsIDMwNSwgMzgxIF0sXG5cbiAgLy8gU3RhbmRhcmQgUGFwZXIgU2l6ZXNcbiAgWyAnYTAnLCA4NDEsIDExODkgXSxcbiAgWyAnYTEnLCA1OTQsIDg0MSBdLFxuICBbICdhMicsIDQyMCwgNTk0IF0sXG4gIFsgJ2EzJywgMjk3LCA0MjAgXSxcbiAgWyAnYTQnLCAyMTAsIDI5NyBdLFxuICBbICdhNScsIDE0OCwgMjEwIF0sXG4gIFsgJ2E2JywgMTA1LCAxNDggXSxcbiAgWyAnYTcnLCA3NCwgMTA1IF0sXG4gIFsgJ2E4JywgNTIsIDc0IF0sXG4gIFsgJ2E5JywgMzcsIDUyIF0sXG4gIFsgJ2ExMCcsIDI2LCAzNyBdLFxuICBbICcyYTAnLCAxMTg5LCAxNjgyIF0sXG4gIFsgJzRhMCcsIDE2ODIsIDIzNzggXSxcbiAgWyAnYjAnLCAxMDAwLCAxNDE0IF0sXG4gIFsgJ2IxJywgNzA3LCAxMDAwIF0sXG4gIFsgJ2IxKycsIDcyMCwgMTAyMCBdLFxuICBbICdiMicsIDUwMCwgNzA3IF0sXG4gIFsgJ2IyKycsIDUyMCwgNzIwIF0sXG4gIFsgJ2IzJywgMzUzLCA1MDAgXSxcbiAgWyAnYjQnLCAyNTAsIDM1MyBdLFxuICBbICdiNScsIDE3NiwgMjUwIF0sXG4gIFsgJ2I2JywgMTI1LCAxNzYgXSxcbiAgWyAnYjcnLCA4OCwgMTI1IF0sXG4gIFsgJ2I4JywgNjIsIDg4IF0sXG4gIFsgJ2I5JywgNDQsIDYyIF0sXG4gIFsgJ2IxMCcsIDMxLCA0NCBdLFxuICBbICdiMTEnLCAyMiwgMzIgXSxcbiAgWyAnYjEyJywgMTYsIDIyIF0sXG4gIFsgJ2MwJywgOTE3LCAxMjk3IF0sXG4gIFsgJ2MxJywgNjQ4LCA5MTcgXSxcbiAgWyAnYzInLCA0NTgsIDY0OCBdLFxuICBbICdjMycsIDMyNCwgNDU4IF0sXG4gIFsgJ2M0JywgMjI5LCAzMjQgXSxcbiAgWyAnYzUnLCAxNjIsIDIyOSBdLFxuICBbICdjNicsIDExNCwgMTYyIF0sXG4gIFsgJ2M3JywgODEsIDExNCBdLFxuICBbICdjOCcsIDU3LCA4MSBdLFxuICBbICdjOScsIDQwLCA1NyBdLFxuICBbICdjMTAnLCAyOCwgNDAgXSxcbiAgWyAnYzExJywgMjIsIDMyIF0sXG4gIFsgJ2MxMicsIDE2LCAyMiBdLFxuXG4gIC8vIFVzZSBpbmNoZXMgZm9yIE5vcnRoIEFtZXJpY2FuIHNpemVzLFxuICAvLyBhcyBpdCBwcm9kdWNlcyBsZXNzIGZsb2F0IHByZWNpc2lvbiBlcnJvcnNcbiAgWyAnaGFsZi1sZXR0ZXInLCA1LjUsIDguNSwgJ2luJyBdLFxuICBbICdsZXR0ZXInLCA4LjUsIDExLCAnaW4nIF0sXG4gIFsgJ2xlZ2FsJywgOC41LCAxNCwgJ2luJyBdLFxuICBbICdqdW5pb3ItbGVnYWwnLCA1LCA4LCAnaW4nIF0sXG4gIFsgJ2xlZGdlcicsIDExLCAxNywgJ2luJyBdLFxuICBbICd0YWJsb2lkJywgMTEsIDE3LCAnaW4nIF0sXG4gIFsgJ2Fuc2ktYScsIDguNSwgMTEuMCwgJ2luJyBdLFxuICBbICdhbnNpLWInLCAxMS4wLCAxNy4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktYycsIDE3LjAsIDIyLjAsICdpbicgXSxcbiAgWyAnYW5zaS1kJywgMjIuMCwgMzQuMCwgJ2luJyBdLFxuICBbICdhbnNpLWUnLCAzNC4wLCA0NC4wLCAnaW4nIF0sXG4gIFsgJ2FyY2gtYScsIDksIDEyLCAnaW4nIF0sXG4gIFsgJ2FyY2gtYicsIDEyLCAxOCwgJ2luJyBdLFxuICBbICdhcmNoLWMnLCAxOCwgMjQsICdpbicgXSxcbiAgWyAnYXJjaC1kJywgMjQsIDM2LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZScsIDM2LCA0OCwgJ2luJyBdLFxuICBbICdhcmNoLWUxJywgMzAsIDQyLCAnaW4nIF0sXG4gIFsgJ2FyY2gtZTInLCAyNiwgMzgsICdpbicgXSxcbiAgWyAnYXJjaC1lMycsIDI3LCAzOSwgJ2luJyBdXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBkYXRhLnJlZHVjZSgoZGljdCwgcHJlc2V0KSA9PiB7XG4gIGNvbnN0IGl0ZW0gPSB7XG4gICAgdW5pdHM6IHByZXNldFszXSB8fCBkZWZhdWx0VW5pdHMsXG4gICAgZGltZW5zaW9uczogWyBwcmVzZXRbMV0sIHByZXNldFsyXSBdXG4gIH07XG4gIGRpY3RbcHJlc2V0WzBdXSA9IGl0ZW07XG4gIGRpY3RbcHJlc2V0WzBdLnJlcGxhY2UoLy0vZywgJyAnKV0gPSBpdGVtO1xuICByZXR1cm4gZGljdDtcbn0sIHt9KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHNbaV0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGFyZ3VtZW50c1tpXTtcbiAgICB9XG59O1xuIiwidmFyIGRlZmluZWQgPSByZXF1aXJlKCdkZWZpbmVkJyk7XG52YXIgdW5pdHMgPSBbICdtbScsICdjbScsICdtJywgJ3BjJywgJ3B0JywgJ2luJywgJ2Z0JywgJ3B4JyBdO1xuXG52YXIgY29udmVyc2lvbnMgPSB7XG4gIC8vIG1ldHJpY1xuICBtOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDFcbiAgfSxcbiAgY206IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMSAvIDEwMFxuICB9LFxuICBtbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxIC8gMTAwMFxuICB9LFxuICAvLyBpbXBlcmlhbFxuICBwdDoge1xuICAgIHN5c3RlbTogJ2ltcGVyaWFsJyxcbiAgICBmYWN0b3I6IDEgLyA3MlxuICB9LFxuICBwYzoge1xuICAgIHN5c3RlbTogJ2ltcGVyaWFsJyxcbiAgICBmYWN0b3I6IDEgLyA2XG4gIH0sXG4gIGluOiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMVxuICB9LFxuICBmdDoge1xuICAgIHN5c3RlbTogJ2ltcGVyaWFsJyxcbiAgICBmYWN0b3I6IDEyXG4gIH1cbn07XG5cbmNvbnN0IGFuY2hvcnMgPSB7XG4gIG1ldHJpYzoge1xuICAgIHVuaXQ6ICdtJyxcbiAgICByYXRpbzogMSAvIDAuMDI1NFxuICB9LFxuICBpbXBlcmlhbDoge1xuICAgIHVuaXQ6ICdpbicsXG4gICAgcmF0aW86IDAuMDI1NFxuICB9XG59O1xuXG5mdW5jdGlvbiByb3VuZCAodmFsdWUsIGRlY2ltYWxzKSB7XG4gIHJldHVybiBOdW1iZXIoTWF0aC5yb3VuZCh2YWx1ZSArICdlJyArIGRlY2ltYWxzKSArICdlLScgKyBkZWNpbWFscyk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREaXN0YW5jZSAodmFsdWUsIGZyb21Vbml0LCB0b1VuaXQsIG9wdHMpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgIWlzRmluaXRlKHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBtdXN0IGJlIGEgZmluaXRlIG51bWJlcicpO1xuICBpZiAoIWZyb21Vbml0IHx8ICF0b1VuaXQpIHRocm93IG5ldyBFcnJvcignTXVzdCBzcGVjaWZ5IGZyb20gYW5kIHRvIHVuaXRzJyk7XG5cbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIHZhciBwaXhlbHNQZXJJbmNoID0gZGVmaW5lZChvcHRzLnBpeGVsc1BlckluY2gsIDk2KTtcbiAgdmFyIHByZWNpc2lvbiA9IG9wdHMucHJlY2lzaW9uO1xuICB2YXIgcm91bmRQaXhlbCA9IG9wdHMucm91bmRQaXhlbCAhPT0gZmFsc2U7XG5cbiAgZnJvbVVuaXQgPSBmcm9tVW5pdC50b0xvd2VyQ2FzZSgpO1xuICB0b1VuaXQgPSB0b1VuaXQudG9Mb3dlckNhc2UoKTtcblxuICBpZiAodW5pdHMuaW5kZXhPZihmcm9tVW5pdCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZnJvbSB1bml0IFwiJyArIGZyb21Vbml0ICsgJ1wiLCBtdXN0IGJlIG9uZSBvZjogJyArIHVuaXRzLmpvaW4oJywgJykpO1xuICBpZiAodW5pdHMuaW5kZXhPZih0b1VuaXQpID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZyb20gdW5pdCBcIicgKyB0b1VuaXQgKyAnXCIsIG11c3QgYmUgb25lIG9mOiAnICsgdW5pdHMuam9pbignLCAnKSk7XG5cbiAgaWYgKGZyb21Vbml0ID09PSB0b1VuaXQpIHtcbiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNvbnZlcnQgZnJvbSBBIHRvIEIgc2luY2UgdGhleSBhcmUgdGhlIHNhbWUgYWxyZWFkeVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHZhciB0b0ZhY3RvciA9IDE7XG4gIHZhciBmcm9tRmFjdG9yID0gMTtcbiAgdmFyIGlzVG9QaXhlbCA9IGZhbHNlO1xuXG4gIGlmIChmcm9tVW5pdCA9PT0gJ3B4Jykge1xuICAgIGZyb21GYWN0b3IgPSAxIC8gcGl4ZWxzUGVySW5jaDtcbiAgICBmcm9tVW5pdCA9ICdpbic7XG4gIH1cbiAgaWYgKHRvVW5pdCA9PT0gJ3B4Jykge1xuICAgIGlzVG9QaXhlbCA9IHRydWU7XG4gICAgdG9GYWN0b3IgPSBwaXhlbHNQZXJJbmNoO1xuICAgIHRvVW5pdCA9ICdpbic7XG4gIH1cblxuICB2YXIgZnJvbVVuaXREYXRhID0gY29udmVyc2lvbnNbZnJvbVVuaXRdO1xuICB2YXIgdG9Vbml0RGF0YSA9IGNvbnZlcnNpb25zW3RvVW5pdF07XG5cbiAgLy8gc291cmNlIHRvIGFuY2hvciBpbnNpZGUgc291cmNlJ3Mgc3lzdGVtXG4gIHZhciBhbmNob3IgPSB2YWx1ZSAqIGZyb21Vbml0RGF0YS5mYWN0b3IgKiBmcm9tRmFjdG9yO1xuXG4gIC8vIGlmIHN5c3RlbXMgZGlmZmVyLCBjb252ZXJ0IG9uZSB0byBhbm90aGVyXG4gIGlmIChmcm9tVW5pdERhdGEuc3lzdGVtICE9PSB0b1VuaXREYXRhLnN5c3RlbSkge1xuICAgIC8vIHJlZ3VsYXIgJ20nIHRvICdpbicgYW5kIHNvIGZvcnRoXG4gICAgYW5jaG9yICo9IGFuY2hvcnNbZnJvbVVuaXREYXRhLnN5c3RlbV0ucmF0aW87XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gYW5jaG9yIC8gdG9Vbml0RGF0YS5mYWN0b3IgKiB0b0ZhY3RvcjtcbiAgaWYgKGlzVG9QaXhlbCAmJiByb3VuZFBpeGVsKSB7XG4gICAgcmVzdWx0ID0gTWF0aC5yb3VuZChyZXN1bHQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcmVjaXNpb24gPT09ICdudW1iZXInICYmIGlzRmluaXRlKHByZWNpc2lvbikpIHtcbiAgICByZXN1bHQgPSByb3VuZChyZXN1bHQsIHByZWNpc2lvbik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0RGlzdGFuY2U7XG5tb2R1bGUuZXhwb3J0cy51bml0cyA9IHVuaXRzO1xuIiwiaW1wb3J0IHBhcGVyU2l6ZXMgZnJvbSAnLi9wYXBlci1zaXplcyc7XG5pbXBvcnQgY29udmVydExlbmd0aCBmcm9tICdjb252ZXJ0LWxlbmd0aCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaW1lbnNpb25zRnJvbVByZXNldCAoZGltZW5zaW9ucywgdW5pdHNUbyA9ICdweCcsIHBpeGVsc1BlckluY2ggPSA3Mikge1xuICBpZiAodHlwZW9mIGRpbWVuc2lvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3Qga2V5ID0gZGltZW5zaW9ucy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghKGtleSBpbiBwYXBlclNpemVzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZGltZW5zaW9uIHByZXNldCBcIiR7ZGltZW5zaW9uc31cIiBpcyBub3Qgc3VwcG9ydGVkIG9yIGNvdWxkIG5vdCBiZSBmb3VuZDsgdHJ5IHVzaW5nIGE0LCBhMywgcG9zdGNhcmQsIGxldHRlciwgZXRjLmApXG4gICAgfVxuICAgIGNvbnN0IHByZXNldCA9IHBhcGVyU2l6ZXNba2V5XTtcbiAgICByZXR1cm4gcHJlc2V0LmRpbWVuc2lvbnMubWFwKGQgPT4ge1xuICAgICAgcmV0dXJuIGNvbnZlcnREaXN0YW5jZShkLCBwcmVzZXQudW5pdHMsIHVuaXRzVG8sIHBpeGVsc1BlckluY2gpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkaW1lbnNpb25zO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGlzdGFuY2UgKGRpbWVuc2lvbiwgdW5pdHNGcm9tID0gJ3B4JywgdW5pdHNUbyA9ICdweCcsIHBpeGVsc1BlckluY2ggPSA3Mikge1xuICByZXR1cm4gY29udmVydExlbmd0aChkaW1lbnNpb24sIHVuaXRzRnJvbSwgdW5pdHNUbywge1xuICAgIHBpeGVsc1BlckluY2gsXG4gICAgcHJlY2lzaW9uOiA0LFxuICAgIHJvdW5kUGl4ZWw6IHRydWVcbiAgfSk7XG59XG4iLCJpbXBvcnQgeyBnZXREaW1lbnNpb25zRnJvbVByZXNldCwgY29udmVydERpc3RhbmNlIH0gZnJvbSAnLi4vZGlzdGFuY2VzJztcbmltcG9ydCB7IGlzQnJvd3NlciwgZGVmaW5lZCB9IGZyb20gJy4uL3V0aWwnO1xuXG5mdW5jdGlvbiBjaGVja0lmSGFzRGltZW5zaW9ucyAoc2V0dGluZ3MpIHtcbiAgaWYgKCFzZXR0aW5ncy5kaW1lbnNpb25zKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2Ygc2V0dGluZ3MuZGltZW5zaW9ucyA9PT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICBpZiAoQXJyYXkuaXNBcnJheShzZXR0aW5ncy5kaW1lbnNpb25zKSAmJiBzZXR0aW5ncy5kaW1lbnNpb25zLmxlbmd0aCA+PSAyKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnRTaXplIChwcm9wcywgc2V0dGluZ3MpIHtcbiAgLy8gV2hlbiBubyB7IGRpbWVuc2lvbiB9IGlzIHBhc3NlZCBpbiBub2RlLCB3ZSBkZWZhdWx0IHRvIEhUTUwgY2FudmFzIHNpemVcbiAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgIHJldHVybiBbIDMwMCwgMTUwIF07XG4gIH1cblxuICBsZXQgZWxlbWVudCA9IHNldHRpbmdzLnBhcmVudCB8fCB3aW5kb3c7XG5cbiAgaWYgKGVsZW1lbnQgPT09IHdpbmRvdyB8fFxuICAgICAgZWxlbWVudCA9PT0gZG9jdW1lbnQgfHxcbiAgICAgIGVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICByZXR1cm4gWyB3aW5kb3cuaW5uZXJXaWR0aCwgd2luZG93LmlubmVySGVpZ2h0IF07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiBbIHdpZHRoLCBoZWlnaHQgXTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNpemVDYW52YXMgKHByb3BzLCBzZXR0aW5ncykge1xuICBsZXQgd2lkdGgsIGhlaWdodDtcbiAgbGV0IHN0eWxlV2lkdGgsIHN0eWxlSGVpZ2h0O1xuICBsZXQgY2FudmFzV2lkdGgsIGNhbnZhc0hlaWdodDtcblxuICBjb25zdCBicm93c2VyID0gaXNCcm93c2VyKCk7XG4gIGNvbnN0IGRpbWVuc2lvbnMgPSBzZXR0aW5ncy5kaW1lbnNpb25zO1xuICBjb25zdCBoYXNEaW1lbnNpb25zID0gY2hlY2tJZkhhc0RpbWVuc2lvbnMoc2V0dGluZ3MpO1xuICBjb25zdCBleHBvcnRpbmcgPSBwcm9wcy5leHBvcnRpbmc7XG4gIGxldCBzY2FsZVRvRml0ID0gaGFzRGltZW5zaW9ucyA/IHNldHRpbmdzLnNjYWxlVG9GaXQgIT09IGZhbHNlIDogZmFsc2U7XG4gIGxldCBzY2FsZVRvVmlldyA9ICghZXhwb3J0aW5nICYmIGhhc0RpbWVuc2lvbnMpID8gc2V0dGluZ3Muc2NhbGVUb1ZpZXcgOiB0cnVlO1xuICAvLyBpbiBub2RlLCBjYW5jZWwgYm90aCBvZiB0aGVzZSBvcHRpb25zXG4gIGlmICghYnJvd3Nlcikgc2NhbGVUb0ZpdCA9IHNjYWxlVG9WaWV3ID0gZmFsc2U7XG4gIGNvbnN0IHVuaXRzID0gc2V0dGluZ3MudW5pdHM7XG4gIGNvbnN0IHBpeGVsc1BlckluY2ggPSAodHlwZW9mIHNldHRpbmdzLnBpeGVsc1BlckluY2ggPT09ICdudW1iZXInICYmIGlzRmluaXRlKHNldHRpbmdzLnBpeGVsc1BlckluY2gpKSA/IHNldHRpbmdzLnBpeGVsc1BlckluY2ggOiA3MjtcbiAgY29uc3QgYmxlZWQgPSBkZWZpbmVkKHNldHRpbmdzLmJsZWVkLCAwKTtcblxuICBjb25zdCBkZXZpY2VQaXhlbFJhdGlvID0gYnJvd3NlciA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMTtcbiAgY29uc3QgYmFzZVBpeGVsUmF0aW8gPSBzY2FsZVRvVmlldyA/IGRldmljZVBpeGVsUmF0aW8gOiAxO1xuXG4gIGxldCBwaXhlbFJhdGlvLCBleHBvcnRQaXhlbFJhdGlvO1xuXG4gIC8vIElmIGEgcGl4ZWwgcmF0aW8gaXMgc3BlY2lmaWVkLCB3ZSB3aWxsIHVzZSBpdC5cbiAgLy8gT3RoZXJ3aXNlOlxuICAvLyAgLT4gSWYgZGltZW5zaW9uIGlzIHNwZWNpZmllZCwgdXNlIGJhc2UgcmF0aW8gKGkuZS4gc2l6ZSBmb3IgZXhwb3J0KVxuICAvLyAgLT4gSWYgbm8gZGltZW5zaW9uIGlzIHNwZWNpZmllZCwgdXNlIGRldmljZSByYXRpbyAoaS5lLiBzaXplIGZvciBzY3JlZW4pXG4gIGlmICh0eXBlb2Ygc2V0dGluZ3MucGl4ZWxSYXRpbyA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc2V0dGluZ3MucGl4ZWxSYXRpbykpIHtcbiAgICAvLyBXaGVuIHsgcGl4ZWxSYXRpbyB9IGlzIHNwZWNpZmllZCwgaXQncyBhbHNvIHVzZWQgYXMgZGVmYXVsdCBleHBvcnRQaXhlbFJhdGlvLlxuICAgIHBpeGVsUmF0aW8gPSBzZXR0aW5ncy5waXhlbFJhdGlvO1xuICAgIGV4cG9ydFBpeGVsUmF0aW8gPSBkZWZpbmVkKHNldHRpbmdzLmV4cG9ydFBpeGVsUmF0aW8sIHBpeGVsUmF0aW8pO1xuICB9IGVsc2Uge1xuICAgIGlmIChoYXNEaW1lbnNpb25zKSB7XG4gICAgICAvLyBXaGVuIGEgZGltZW5zaW9uIGlzIHNwZWNpZmllZCwgdXNlIHRoZSBiYXNlIHJhdGlvIHJhdGhlciB0aGFuIHNjcmVlbiByYXRpb1xuICAgICAgcGl4ZWxSYXRpbyA9IGJhc2VQaXhlbFJhdGlvO1xuICAgICAgLy8gRGVmYXVsdCB0byBhIHBpeGVsIHJhdGlvIG9mIDEgc28gdGhhdCB5b3UgZW5kIHVwIHdpdGggdGhlIHNhbWUgZGltZW5zaW9uXG4gICAgICAvLyB5b3Ugc3BlY2lmaWVkLCBpLmUuIFsgNTAwLCA1MDAgXSBpcyBleHBvcnRlZCBhcyA1MDB4NTAwIHB4XG4gICAgICBleHBvcnRQaXhlbFJhdGlvID0gZGVmaW5lZChzZXR0aW5ncy5leHBvcnRQaXhlbFJhdGlvLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gZGltZW5zaW9uIGlzIHNwZWNpZmllZCwgYXNzdW1lIGZ1bGwtc2NyZWVuIHJldGluYSBzaXppbmdcbiAgICAgIHBpeGVsUmF0aW8gPSBkZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgLy8gRGVmYXVsdCB0byBzY3JlZW4gcGl4ZWwgcmF0aW8sIHNvIHRoYXQgaXQncyBsaWtlIHRha2luZyBhIGRldmljZSBzY3JlZW5zaG90XG4gICAgICBleHBvcnRQaXhlbFJhdGlvID0gZGVmaW5lZChzZXR0aW5ncy5leHBvcnRQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgICB9XG4gIH1cblxuICAvLyBDbGFtcCBwaXhlbCByYXRpb1xuICBpZiAodHlwZW9mIHNldHRpbmdzLm1heFBpeGVsUmF0aW8gPT09ICdudW1iZXInICYmIGlzRmluaXRlKHNldHRpbmdzLm1heFBpeGVsUmF0aW8pKSB7XG4gICAgcGl4ZWxSYXRpbyA9IE1hdGgubWluKHNldHRpbmdzLm1heFBpeGVsUmF0aW8sIHBpeGVsUmF0aW8pO1xuICB9XG5cbiAgLy8gSGFuZGxlIGV4cG9ydCBwaXhlbCByYXRpb1xuICBpZiAoZXhwb3J0aW5nKSB7XG4gICAgcGl4ZWxSYXRpbyA9IGV4cG9ydFBpeGVsUmF0aW87XG4gIH1cblxuICAvLyBwYXJlbnRXaWR0aCA9IHR5cGVvZiBwYXJlbnRXaWR0aCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0Tm9kZVNpemVbMF0gOiBwYXJlbnRXaWR0aDtcbiAgLy8gcGFyZW50SGVpZ2h0ID0gdHlwZW9mIHBhcmVudEhlaWdodCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0Tm9kZVNpemVbMV0gOiBwYXJlbnRIZWlnaHQ7XG5cbiAgbGV0IFsgcGFyZW50V2lkdGgsIHBhcmVudEhlaWdodCBdID0gZ2V0UGFyZW50U2l6ZShwcm9wcywgc2V0dGluZ3MpO1xuICBsZXQgdHJpbVdpZHRoLCB0cmltSGVpZ2h0O1xuXG4gIC8vIFlvdSBjYW4gc3BlY2lmeSBhIGRpbWVuc2lvbnMgaW4gcGl4ZWxzIG9yIGNtL20vaW4vZXRjXG4gIGlmIChoYXNEaW1lbnNpb25zKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQoZGltZW5zaW9ucywgdW5pdHMsIHBpeGVsc1BlckluY2gpO1xuICAgIGNvbnN0IGhpZ2hlc3QgPSBNYXRoLm1heChyZXN1bHRbMF0sIHJlc3VsdFsxXSk7XG4gICAgY29uc3QgbG93ZXN0ID0gTWF0aC5taW4ocmVzdWx0WzBdLCByZXN1bHRbMV0pO1xuICAgIGlmIChzZXR0aW5ncy5vcmllbnRhdGlvbikge1xuICAgICAgY29uc3QgbGFuZHNjYXBlID0gc2V0dGluZ3Mub3JpZW50YXRpb24gPT09ICdsYW5kc2NhcGUnO1xuICAgICAgd2lkdGggPSBsYW5kc2NhcGUgPyBoaWdoZXN0IDogbG93ZXN0O1xuICAgICAgaGVpZ2h0ID0gbGFuZHNjYXBlID8gbG93ZXN0IDogaGlnaGVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgd2lkdGggPSByZXN1bHRbMF07XG4gICAgICBoZWlnaHQgPSByZXN1bHRbMV07XG4gICAgfVxuXG4gICAgdHJpbVdpZHRoID0gd2lkdGg7XG4gICAgdHJpbUhlaWdodCA9IGhlaWdodDtcblxuICAgIC8vIEFwcGx5IGJsZWVkIHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgaW4gdGhlIHNhbWUgdW5pdHNcbiAgICB3aWR0aCArPSBibGVlZCAqIDI7XG4gICAgaGVpZ2h0ICs9IGJsZWVkICogMjtcbiAgfSBlbHNlIHtcbiAgICB3aWR0aCA9IHBhcmVudFdpZHRoO1xuICAgIGhlaWdodCA9IHBhcmVudEhlaWdodDtcbiAgICB0cmltV2lkdGggPSB3aWR0aDtcbiAgICB0cmltSGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgLy8gUmVhbCBzaXplIGluIHBpeGVscyBhZnRlciBQUEkgaXMgdGFrZW4gaW50byBhY2NvdW50XG4gIGxldCByZWFsV2lkdGggPSB3aWR0aDtcbiAgbGV0IHJlYWxIZWlnaHQgPSBoZWlnaHQ7XG4gIGlmIChoYXNEaW1lbnNpb25zICYmIHVuaXRzKSB7XG4gICAgLy8gQ29udmVydCB0byBkaWdpdGFsL3BpeGVsIHVuaXRzIGlmIG5lY2Vzc2FyeVxuICAgIHJlYWxXaWR0aCA9IGNvbnZlcnREaXN0YW5jZSh3aWR0aCwgdW5pdHMsICdweCcsIHBpeGVsc1BlckluY2gpO1xuICAgIHJlYWxIZWlnaHQgPSBjb252ZXJ0RGlzdGFuY2UoaGVpZ2h0LCB1bml0cywgJ3B4JywgcGl4ZWxzUGVySW5jaCk7XG4gIH1cblxuICAvLyBIb3cgYmlnIHRvIHNldCB0aGUgJ3ZpZXcnIG9mIHRoZSBjYW52YXMgaW4gdGhlIGJyb3dzZXIgKGkuZS4gc3R5bGUpXG4gIHN0eWxlV2lkdGggPSBNYXRoLnJvdW5kKHJlYWxXaWR0aCk7XG4gIHN0eWxlSGVpZ2h0ID0gTWF0aC5yb3VuZChyZWFsSGVpZ2h0KTtcblxuICAvLyBJZiB3ZSB3aXNoIHRvIHNjYWxlIHRoZSB2aWV3IHRvIHRoZSBicm93c2VyIHdpbmRvd1xuICBpZiAoc2NhbGVUb0ZpdCAmJiAhZXhwb3J0aW5nICYmIGhhc0RpbWVuc2lvbnMpIHtcbiAgICBjb25zdCBhc3BlY3QgPSB3aWR0aCAvIGhlaWdodDtcbiAgICBjb25zdCB3aW5kb3dBc3BlY3QgPSBwYXJlbnRXaWR0aCAvIHBhcmVudEhlaWdodDtcbiAgICBjb25zdCBzY2FsZVRvRml0UGFkZGluZyA9IGRlZmluZWQoc2V0dGluZ3Muc2NhbGVUb0ZpdFBhZGRpbmcsIDQwKTtcbiAgICBjb25zdCBtYXhXaWR0aCA9IE1hdGgucm91bmQocGFyZW50V2lkdGggLSBzY2FsZVRvRml0UGFkZGluZyAqIDIpO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IE1hdGgucm91bmQocGFyZW50SGVpZ2h0IC0gc2NhbGVUb0ZpdFBhZGRpbmcgKiAyKTtcbiAgICBpZiAoc3R5bGVXaWR0aCA+IG1heFdpZHRoIHx8IHN0eWxlSGVpZ2h0ID4gbWF4SGVpZ2h0KSB7XG4gICAgICBpZiAod2luZG93QXNwZWN0ID4gYXNwZWN0KSB7XG4gICAgICAgIHN0eWxlSGVpZ2h0ID0gbWF4SGVpZ2h0O1xuICAgICAgICBzdHlsZVdpZHRoID0gTWF0aC5yb3VuZChzdHlsZUhlaWdodCAqIGFzcGVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZVdpZHRoID0gbWF4V2lkdGg7XG4gICAgICAgIHN0eWxlSGVpZ2h0ID0gTWF0aC5yb3VuZChzdHlsZVdpZHRoIC8gYXNwZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjYW52YXNXaWR0aCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChwaXhlbFJhdGlvICogc3R5bGVXaWR0aCkgOiBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiByZWFsV2lkdGgpO1xuICBjYW52YXNIZWlnaHQgPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHN0eWxlSGVpZ2h0KSA6IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHJlYWxIZWlnaHQpO1xuXG4gIGNvbnN0IHZpZXdwb3J0V2lkdGggPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQoc3R5bGVXaWR0aCkgOiBNYXRoLnJvdW5kKHJlYWxXaWR0aCk7XG4gIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHN0eWxlSGVpZ2h0KSA6IE1hdGgucm91bmQocmVhbEhlaWdodCk7XG5cbiAgY29uc3Qgc2NhbGVYID0gY2FudmFzV2lkdGggLyB3aWR0aDtcbiAgY29uc3Qgc2NhbGVZID0gY2FudmFzSGVpZ2h0IC8gaGVpZ2h0O1xuXG4gIC8vIEFzc2lnbiB0byBjdXJyZW50IHByb3BzXG4gIHJldHVybiB7XG4gICAgYmxlZWQsXG4gICAgcGl4ZWxSYXRpbyxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgZGltZW5zaW9uczogWyB3aWR0aCwgaGVpZ2h0IF0sXG4gICAgdW5pdHM6IHVuaXRzIHx8ICdweCcsXG4gICAgc2NhbGVYLFxuICAgIHNjYWxlWSxcbiAgICBwaXhlbHNQZXJJbmNoLFxuICAgIHZpZXdwb3J0V2lkdGgsXG4gICAgdmlld3BvcnRIZWlnaHQsXG4gICAgY2FudmFzV2lkdGgsXG4gICAgY2FudmFzSGVpZ2h0LFxuICAgIHRyaW1XaWR0aCxcbiAgICB0cmltSGVpZ2h0LFxuICAgIHN0eWxlV2lkdGgsXG4gICAgc3R5bGVIZWlnaHRcbiAgfTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZ2V0Q2FudmFzQ29udGV4dFxuZnVuY3Rpb24gZ2V0Q2FudmFzQ29udGV4dCAodHlwZSwgb3B0cykge1xuICBpZiAodHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbXVzdCBzcGVjaWZ5IHR5cGUgc3RyaW5nJylcbiAgfVxuXG4gIG9wdHMgPSBvcHRzIHx8IHt9XG5cbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgJiYgIW9wdHMuY2FudmFzKSB7XG4gICAgcmV0dXJuIG51bGwgLy8gY2hlY2sgZm9yIE5vZGVcbiAgfVxuXG4gIHZhciBjYW52YXMgPSBvcHRzLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxuICBpZiAodHlwZW9mIG9wdHMud2lkdGggPT09ICdudW1iZXInKSB7XG4gICAgY2FudmFzLndpZHRoID0gb3B0cy53aWR0aFxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWlnaHQgPT09ICdudW1iZXInKSB7XG4gICAgY2FudmFzLmhlaWdodCA9IG9wdHMuaGVpZ2h0XG4gIH1cblxuICB2YXIgYXR0cmlicyA9IG9wdHNcbiAgdmFyIGdsXG4gIHRyeSB7XG4gICAgdmFyIG5hbWVzID0gWyB0eXBlIF1cbiAgICAvLyBwcmVmaXggR0wgY29udGV4dHNcbiAgICBpZiAodHlwZS5pbmRleE9mKCd3ZWJnbCcpID09PSAwKSB7XG4gICAgICBuYW1lcy5wdXNoKCdleHBlcmltZW50YWwtJyArIHR5cGUpXG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dChuYW1lc1tpXSwgYXR0cmlicylcbiAgICAgIGlmIChnbCkgcmV0dXJuIGdsXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZ2wgPSBudWxsXG4gIH1cbiAgcmV0dXJuIChnbCB8fCBudWxsKSAvLyBlbnN1cmUgbnVsbCBvbiBmYWlsXG59XG4iLCJpbXBvcnQgYXNzaWduIGZyb20gJ29iamVjdC1hc3NpZ24nO1xuaW1wb3J0IGdldENhbnZhc0NvbnRleHQgZnJvbSAnZ2V0LWNhbnZhcy1jb250ZXh0JztcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gJy4uL3V0aWwnO1xuXG5mdW5jdGlvbiBjcmVhdGVDYW52YXNFbGVtZW50ICgpIHtcbiAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSXQgYXBwZWFycyB5b3UgYXJlIHJ1bmluZyBmcm9tIE5vZGUuanMgb3IgYSBub24tYnJvd3NlciBlbnZpcm9ubWVudC4gVHJ5IHBhc3NpbmcgaW4gYW4gZXhpc3RpbmcgeyBjYW52YXMgfSBpbnRlcmZhY2UgaW5zdGVhZC4nKTtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUNhbnZhcyAoc2V0dGluZ3MgPSB7fSkge1xuICBsZXQgY29udGV4dCwgY2FudmFzO1xuICBsZXQgb3duc0NhbnZhcyA9IGZhbHNlO1xuICBpZiAoc2V0dGluZ3MuY2FudmFzICE9PSBmYWxzZSkge1xuICAgIC8vIERldGVybWluZSB0aGUgY2FudmFzIGFuZCBjb250ZXh0IHRvIGNyZWF0ZVxuICAgIGNvbnRleHQgPSBzZXR0aW5ncy5jb250ZXh0O1xuICAgIGlmICghY29udGV4dCB8fCB0eXBlb2YgY29udGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCBuZXdDYW52YXMgPSBzZXR0aW5ncy5jYW52YXM7XG4gICAgICBpZiAoIW5ld0NhbnZhcykge1xuICAgICAgICBuZXdDYW52YXMgPSBjcmVhdGVDYW52YXNFbGVtZW50KCk7XG4gICAgICAgIG93bnNDYW52YXMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQgfHwgJzJkJztcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2FudmFzLmdldENvbnRleHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc3BlY2lmaWVkIHsgY2FudmFzIH0gZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgZ2V0Q29udGV4dCgpIGZ1bmN0aW9uLCBtYXliZSBpdCBpcyBub3QgYSA8Y2FudmFzPiB0YWc/YCk7XG4gICAgICB9XG4gICAgICBjb250ZXh0ID0gZ2V0Q2FudmFzQ29udGV4dCh0eXBlLCBhc3NpZ24oe30sIHNldHRpbmdzLmF0dHJpYnV0ZXMsIHsgY2FudmFzOiBuZXdDYW52YXMgfSkpO1xuICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIGF0IGNhbnZhcy5nZXRDb250ZXh0KCcke3R5cGV9JykgLSB0aGUgYnJvd3NlciBtYXkgbm90IHN1cHBvcnQgdGhpcyBjb250ZXh0LCBvciBhIGRpZmZlcmVudCBjb250ZXh0IG1heSBhbHJlYWR5IGJlIGluIHVzZSB3aXRoIHRoaXMgY2FudmFzLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhbnZhcyA9IGNvbnRleHQuY2FudmFzO1xuICAgIC8vIEVuc3VyZSBjb250ZXh0IG1hdGNoZXMgdXNlcidzIGNhbnZhcyBleHBlY3RhdGlvbnNcbiAgICBpZiAoc2V0dGluZ3MuY2FudmFzICYmIGNhbnZhcyAhPT0gc2V0dGluZ3MuY2FudmFzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB7IGNhbnZhcyB9IGFuZCB7IGNvbnRleHQgfSBzZXR0aW5ncyBtdXN0IHBvaW50IHRvIHRoZSBzYW1lIHVuZGVybHlpbmcgY2FudmFzIGVsZW1lbnQnKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBwaXhlbGF0aW9uIHRvIGNhbnZhcyBpZiBuZWNlc3NhcnksIHRoaXMgaXMgbW9zdGx5IGEgY29udmVuaWVuY2UgdXRpbGl0eVxuICAgIGlmIChzZXR0aW5ncy5waXhlbGF0ZWQpIHtcbiAgICAgIGNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY2FudmFzLnN0eWxlWydpbWFnZS1yZW5kZXJpbmcnXSA9ICdwaXhlbGF0ZWQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBjYW52YXMsIGNvbnRleHQsIG93bnNDYW52YXMgfTtcbn1cbiIsImltcG9ydCBhc3NpZ24gZnJvbSAnb2JqZWN0LWFzc2lnbic7XG5pbXBvcnQgcmlnaHROb3cgZnJvbSAncmlnaHQtbm93JztcbmltcG9ydCBpc1Byb21pc2UgZnJvbSAnaXMtcHJvbWlzZSc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIsIGRlZmluZWQsIGlzV2ViR0xDb250ZXh0LCBpc0NhbnZhcywgZ2V0Q2xpZW50QVBJIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gJ2RlZXAtZXF1YWwnO1xuaW1wb3J0IHtcbiAgcmVzb2x2ZUZpbGVuYW1lLFxuICBzYXZlRmlsZSxcbiAgc2F2ZURhdGFVUkwsXG4gIGdldFRpbWVTdGFtcCxcbiAgZXhwb3J0Q2FudmFzLFxuICBzdHJlYW1TdGFydCxcbiAgc3RyZWFtRW5kXG59IGZyb20gJy4uL3NhdmUnO1xuaW1wb3J0IHsgY2hlY2tTZXR0aW5ncyB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuXG5pbXBvcnQga2V5Ym9hcmRTaG9ydGN1dHMgZnJvbSAnLi9rZXlib2FyZFNob3J0Y3V0cyc7XG5pbXBvcnQgcmVzaXplQ2FudmFzIGZyb20gJy4vcmVzaXplQ2FudmFzJztcbmltcG9ydCBjcmVhdGVDYW52YXMgZnJvbSAnLi9jcmVhdGVDYW52YXMnO1xuXG5jbGFzcyBTa2V0Y2hNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuX3NldHRpbmdzID0ge307XG4gICAgdGhpcy5fcHJvcHMgPSB7fTtcbiAgICB0aGlzLl9za2V0Y2ggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmFmID0gbnVsbDtcbiAgICB0aGlzLl9yZWNvcmRUaW1lb3V0ID0gbnVsbDtcblxuICAgIC8vIFNvbWUgaGFja3kgdGhpbmdzIHJlcXVpcmVkIHRvIGdldCBhcm91bmQgcDUuanMgc3RydWN0dXJlXG4gICAgdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9pc1A1UmVzaXppbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuX2tleWJvYXJkU2hvcnRjdXRzID0ga2V5Ym9hcmRTaG9ydGN1dHMoe1xuICAgICAgZW5hYmxlZDogKCkgPT4gdGhpcy5zZXR0aW5ncy5ob3RrZXlzICE9PSBmYWxzZSxcbiAgICAgIHNhdmU6IChldikgPT4ge1xuICAgICAgICBpZiAoZXYuc2hpZnRLZXkpIHtcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5yZWNvcmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kUmVjb3JkKCk7XG4gICAgICAgICAgICB0aGlzLnJ1bigpO1xuICAgICAgICAgIH0gZWxzZSB0aGlzLnJlY29yZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnByb3BzLnJlY29yZGluZykge1xuICAgICAgICAgIHRoaXMuZXhwb3J0RnJhbWUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRvZ2dsZVBsYXk6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgdGhpcy5wYXVzZSgpO1xuICAgICAgICBlbHNlIHRoaXMucGxheSgpO1xuICAgICAgfSxcbiAgICAgIGNvbW1pdDogKGV2KSA9PiB7XG4gICAgICAgIHRoaXMuZXhwb3J0RnJhbWUoeyBjb21taXQ6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9hbmltYXRlSGFuZGxlciA9ICgpID0+IHRoaXMuYW5pbWF0ZSgpO1xuXG4gICAgdGhpcy5fcmVzaXplSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnJlc2l6ZSgpO1xuICAgICAgLy8gT25seSByZS1yZW5kZXIgd2hlbiBzaXplIGFjdHVhbGx5IGNoYW5nZXNcbiAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGdldCBza2V0Y2ggKCkge1xuICAgIHJldHVybiB0aGlzLl9za2V0Y2g7XG4gIH1cblxuICBnZXQgc2V0dGluZ3MgKCkge1xuICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncztcbiAgfVxuXG4gIGdldCBwcm9wcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3BzO1xuICB9XG5cbiAgX2NvbXB1dGVQbGF5aGVhZCAoY3VycmVudFRpbWUsIGR1cmF0aW9uKSB7XG4gICAgY29uc3QgaGFzRHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gPT09ICdudW1iZXInICYmIGlzRmluaXRlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gaGFzRHVyYXRpb24gPyBjdXJyZW50VGltZSAvIGR1cmF0aW9uIDogMDtcbiAgfVxuXG4gIF9jb21wdXRlRnJhbWUgKHBsYXloZWFkLCB0aW1lLCB0b3RhbEZyYW1lcywgZnBzKSB7XG4gICAgcmV0dXJuIChpc0Zpbml0ZSh0b3RhbEZyYW1lcykgJiYgdG90YWxGcmFtZXMgPiAxKVxuICAgICAgPyBNYXRoLmZsb29yKHBsYXloZWFkICogKHRvdGFsRnJhbWVzIC0gMSkpXG4gICAgICA6IE1hdGguZmxvb3IoZnBzICogdGltZSk7XG4gIH1cblxuICBfY29tcHV0ZUN1cnJlbnRGcmFtZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVGcmFtZShcbiAgICAgIHRoaXMucHJvcHMucGxheWhlYWQsIHRoaXMucHJvcHMudGltZSxcbiAgICAgIHRoaXMucHJvcHMudG90YWxGcmFtZXMsIHRoaXMucHJvcHMuZnBzXG4gICAgKTtcbiAgfVxuXG4gIF9nZXRTaXplUHJvcHMgKCkge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IHByb3BzLndpZHRoLFxuICAgICAgaGVpZ2h0OiBwcm9wcy5oZWlnaHQsXG4gICAgICBwaXhlbFJhdGlvOiBwcm9wcy5waXhlbFJhdGlvLFxuICAgICAgY2FudmFzV2lkdGg6IHByb3BzLmNhbnZhc1dpZHRoLFxuICAgICAgY2FudmFzSGVpZ2h0OiBwcm9wcy5jYW52YXNIZWlnaHQsXG4gICAgICB2aWV3cG9ydFdpZHRoOiBwcm9wcy52aWV3cG9ydFdpZHRoLFxuICAgICAgdmlld3BvcnRIZWlnaHQ6IHByb3BzLnZpZXdwb3J0SGVpZ2h0XG4gICAgfTtcbiAgfVxuXG4gIHJ1biAoKSB7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgd2FpdCB1bnRpbCBza2V0Y2ggaXMgbG9hZGVkIGJlZm9yZSB0cnlpbmcgdG8gcGxheSgpJyk7XG5cbiAgICAvLyBTdGFydCBhbiBhbmltYXRpb24gZnJhbWUgbG9vcCBpZiBuZWNlc3NhcnlcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5wbGF5aW5nICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5wbGF5KCk7XG4gICAgfVxuXG4gICAgLy8gTGV0J3MgbGV0IHRoaXMgd2FybmluZyBoYW5nIGFyb3VuZCBmb3IgYSBmZXcgdmVyc2lvbnMuLi5cbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLmRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybignSW4gY2FudmFzLXNrZXRjaEAwLjAuMjMgdGhlIGRpc3Bvc2UoKSBldmVudCBoYXMgYmVlbiByZW5hbWVkIHRvIHVubG9hZCgpJyk7XG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSB3ZSBhcmVuJ3QgcGxheWluZyBvciBhbmltYXRlZCwgbWFrZSBzdXJlIHdlIHN0aWxsIHRyaWdnZXIgYmVnaW4gbWVzc2FnZS4uLlxuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgYW4gaW5pdGlhbCBmcmFtZVxuICAgIHRoaXMudGljaygpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBfY2FuY2VsVGltZW91dHMgKCkge1xuICAgIGlmICh0aGlzLl9yYWYgIT0gbnVsbCAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKTtcbiAgICAgIHRoaXMuX3JhZiA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLl9yZWNvcmRUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZWNvcmRUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3JlY29yZFRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHBsYXkgKCkge1xuICAgIGxldCBhbmltYXRlID0gdGhpcy5zZXR0aW5ncy5hbmltYXRlO1xuICAgIGlmICgnYW5pbWF0aW9uJyBpbiB0aGlzLnNldHRpbmdzKSB7XG4gICAgICBhbmltYXRlID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUud2FybignW2NhbnZhcy1za2V0Y2hdIHsgYW5pbWF0aW9uIH0gaGFzIGJlZW4gcmVuYW1lZCB0byB7IGFuaW1hdGUgfScpO1xuICAgIH1cbiAgICBpZiAoIWFuaW1hdGUpIHJldHVybjtcbiAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbY2FudmFzLXNrZXRjaF0gV0FSTjogVXNpbmcgeyBhbmltYXRlIH0gaW4gTm9kZS5qcyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5wbGF5aW5nKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnByb3BzLnN0YXJ0ZWQpIHtcbiAgICAgIHRoaXMuX3NpZ25hbEJlZ2luKCk7XG4gICAgICB0aGlzLnByb3BzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKCdwbGF5JywgdGhpcy5wcm9wcy50aW1lKVxuXG4gICAgLy8gU3RhcnQgYSByZW5kZXIgbG9vcFxuICAgIHRoaXMucHJvcHMucGxheWluZyA9IHRydWU7XG4gICAgdGhpcy5fY2FuY2VsVGltZW91dHMoKTtcbiAgICB0aGlzLl9sYXN0VGltZSA9IHJpZ2h0Tm93KCk7XG4gICAgdGhpcy5fcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRlSGFuZGxlcik7XG4gIH1cblxuICBwYXVzZSAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucmVjb3JkaW5nKSB0aGlzLmVuZFJlY29yZCgpO1xuICAgIHRoaXMucHJvcHMucGxheWluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fY2FuY2VsVGltZW91dHMoKTtcbiAgfVxuXG4gIHRvZ2dsZVBsYXkgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnBsYXlpbmcpIHRoaXMucGF1c2UoKTtcbiAgICBlbHNlIHRoaXMucGxheSgpO1xuICB9XG5cbiAgLy8gU3RvcCBhbmQgcmVzZXQgdG8gZnJhbWUgemVyb1xuICBzdG9wICgpIHtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5wcm9wcy5mcmFtZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5wbGF5aGVhZCA9IDA7XG4gICAgdGhpcy5wcm9wcy50aW1lID0gMDtcbiAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5zdGFydGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlY29yZCAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucmVjb3JkaW5nKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IFJlY29yZGluZyBmcm9tIE5vZGUuanMgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3AoKTtcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSB0cnVlO1xuICAgIHRoaXMucHJvcHMucmVjb3JkaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGV4cG9ydE9wdHMgPSB0aGlzLl9jcmVhdGVFeHBvcnRPcHRpb25zKHsgc2VxdWVuY2U6IHRydWUgfSk7XG5cbiAgICBjb25zdCBmcmFtZUludGVydmFsID0gMSAvIHRoaXMucHJvcHMuZnBzO1xuICAgIC8vIFJlbmRlciBlYWNoIGZyYW1lIGluIHRoZSBzZXF1ZW5jZVxuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5yZWNvcmRpbmcpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gZnJhbWVJbnRlcnZhbDtcbiAgICAgIHRoaXMudGljaygpO1xuICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0RnJhbWUoZXhwb3J0T3B0cylcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5wcm9wcy5yZWNvcmRpbmcpIHJldHVybjsgLy8gd2FzIGNhbmNlbGxlZCBiZWZvcmVcbiAgICAgICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IDA7XG4gICAgICAgICAgdGhpcy5wcm9wcy5mcmFtZSsrO1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmZyYW1lIDwgdGhpcy5wcm9wcy50b3RhbEZyYW1lcykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy50aW1lICs9IGZyYW1lSW50ZXJ2YWw7XG4gICAgICAgICAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKHRoaXMucHJvcHMudGltZSwgdGhpcy5wcm9wcy5kdXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLl9yZWNvcmRUaW1lb3V0ID0gc2V0VGltZW91dCh0aWNrLCAwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZpbmlzaGVkIHJlY29yZGluZycpO1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsRW5kKCk7XG4gICAgICAgICAgICB0aGlzLmVuZFJlY29yZCgpO1xuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLnJ1bigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIFRyaWdnZXIgYSBzdGFydCBldmVudCBiZWZvcmUgd2UgYmVnaW4gcmVjb3JkaW5nXG4gICAgaWYgKCF0aGlzLnByb3BzLnN0YXJ0ZWQpIHtcbiAgICAgIHRoaXMuX3NpZ25hbEJlZ2luKCk7XG4gICAgICB0aGlzLnByb3BzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXIgJ2JlZ2luIHJlY29yZCcgZXZlbnRcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLmJlZ2luUmVjb3JkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmJlZ2luUmVjb3JkKHByb3BzKSk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhdGUgYSBzdHJlYW1pbmcgc3RhcnQgaWYgbmVjZXNzYXJ5XG4gICAgc3RyZWFtU3RhcnQoZXhwb3J0T3B0cylcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLl9yYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgICAgfSk7XG4gIH1cblxuICBfc2lnbmFsQmVnaW4gKCkge1xuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guYmVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2guYmVnaW4ocHJvcHMpKTtcbiAgICB9XG4gIH1cblxuICBfc2lnbmFsRW5kICgpIHtcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLmVuZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5lbmQocHJvcHMpKTtcbiAgICB9XG4gIH1cblxuICBlbmRSZWNvcmQgKCkge1xuICAgIGNvbnN0IHdhc1JlY29yZGluZyA9IHRoaXMucHJvcHMucmVjb3JkaW5nO1xuXG4gICAgdGhpcy5fY2FuY2VsVGltZW91dHMoKTtcbiAgICB0aGlzLnByb3BzLnJlY29yZGluZyA9IGZhbHNlO1xuICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSBmYWxzZTtcblxuICAgIC8vIHRlbGwgQ0xJIHRoYXQgc3RyZWFtIGhhcyBmaW5pc2hlZFxuICAgIHJldHVybiBzdHJlYW1FbmQoKVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIC8vIFRyaWdnZXIgJ2VuZCByZWNvcmQnIGV2ZW50XG4gICAgICAgIGlmICh3YXNSZWNvcmRpbmcgJiYgdGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLmVuZFJlY29yZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2guZW5kUmVjb3JkKHByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUV4cG9ydE9wdGlvbnMgKG9wdCA9IHt9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcXVlbmNlOiBvcHQuc2VxdWVuY2UsXG4gICAgICBzYXZlOiBvcHQuc2F2ZSxcbiAgICAgIGZwczogdGhpcy5wcm9wcy5mcHMsXG4gICAgICBmcmFtZTogb3B0LnNlcXVlbmNlID8gdGhpcy5wcm9wcy5mcmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgIGZpbGU6IHRoaXMuc2V0dGluZ3MuZmlsZSxcbiAgICAgIG5hbWU6IHRoaXMuc2V0dGluZ3MubmFtZSxcbiAgICAgIHByZWZpeDogdGhpcy5zZXR0aW5ncy5wcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuc2V0dGluZ3Muc3VmZml4LFxuICAgICAgZW5jb2Rpbmc6IHRoaXMuc2V0dGluZ3MuZW5jb2RpbmcsXG4gICAgICBlbmNvZGluZ1F1YWxpdHk6IHRoaXMuc2V0dGluZ3MuZW5jb2RpbmdRdWFsaXR5LFxuICAgICAgdGltZVN0YW1wOiBvcHQudGltZVN0YW1wIHx8IGdldFRpbWVTdGFtcCgpLFxuICAgICAgdG90YWxGcmFtZXM6IGlzRmluaXRlKHRoaXMucHJvcHMudG90YWxGcmFtZXMpID8gTWF0aC5tYXgoMCwgdGhpcy5wcm9wcy50b3RhbEZyYW1lcykgOiAxMDAwXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydEZyYW1lIChvcHQgPSB7fSkge1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHJldHVybiBQcm9taXNlLmFsbChbXSk7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5wcmVFeHBvcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuc2tldGNoLnByZUV4cG9ydCgpO1xuICAgIH1cblxuICAgIC8vIE9wdGlvbnMgZm9yIGV4cG9ydCBmdW5jdGlvblxuICAgIGxldCBleHBvcnRPcHRzID0gdGhpcy5fY3JlYXRlRXhwb3J0T3B0aW9ucyhvcHQpO1xuXG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgbGV0IHAgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoY2xpZW50ICYmIG9wdC5jb21taXQgJiYgdHlwZW9mIGNsaWVudC5jb21taXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGNvbW1pdE9wdHMgPSBhc3NpZ24oe30sIGV4cG9ydE9wdHMpO1xuICAgICAgY29uc3QgaGFzaCA9IGNsaWVudC5jb21taXQoY29tbWl0T3B0cyk7XG4gICAgICBpZiAoaXNQcm9taXNlKGhhc2gpKSBwID0gaGFzaDtcbiAgICAgIGVsc2UgcCA9IFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcC50aGVuKGhhc2ggPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2RvRXhwb3J0RnJhbWUoYXNzaWduKHt9LCBleHBvcnRPcHRzLCB7IGhhc2g6IGhhc2ggfHwgJycgfSkpO1xuICAgIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIC8vIE1vc3QgY29tbW9uIHVzZWNhc2UgaXMgdG8gZXhwb3J0IGEgc2luZ2xlIGxheWVyLFxuICAgICAgLy8gc28gbGV0J3Mgb3B0aW1pemUgdGhlIHVzZXIgZXhwZXJpZW5jZSBmb3IgdGhhdC5cbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAxKSByZXR1cm4gcmVzdWx0WzBdO1xuICAgICAgZWxzZSByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICB9XG5cbiAgX2RvRXhwb3J0RnJhbWUgKGV4cG9ydE9wdHMgPSB7fSkge1xuICAgIHRoaXMuX3Byb3BzLmV4cG9ydGluZyA9IHRydWU7XG5cbiAgICAvLyBSZXNpemUgdG8gb3V0cHV0IHJlc29sdXRpb25cbiAgICB0aGlzLnJlc2l6ZSgpO1xuXG4gICAgLy8gRHJhdyBhdCB0aGlzIG91dHB1dCByZXNvbHV0aW9uXG4gICAgbGV0IGRyYXdSZXN1bHQgPSB0aGlzLnJlbmRlcigpO1xuXG4gICAgLy8gVGhlIHNlbGYgb3duZWQgY2FudmFzIChtYXkgYmUgdW5kZWZpbmVkLi4uISlcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLnByb3BzLmNhbnZhcztcblxuICAgIC8vIEdldCBsaXN0IG9mIHJlc3VsdHMgZnJvbSByZW5kZXJcbiAgICBpZiAodHlwZW9mIGRyYXdSZXN1bHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkcmF3UmVzdWx0ID0gWyBjYW52YXMgXTtcbiAgICB9XG4gICAgZHJhd1Jlc3VsdCA9IFtdLmNvbmNhdChkcmF3UmVzdWx0KS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAvLyBUcmFuc2Zvcm0gdGhlIGNhbnZhcy9maWxlIGRlc2NyaXB0b3JzIGludG8gYSBjb25zaXN0ZW50IGZvcm1hdCxcbiAgICAvLyBhbmQgcHVsbCBvdXQgYW55IGRhdGEgVVJMcyBmcm9tIGNhbnZhcyBlbGVtZW50c1xuICAgIGRyYXdSZXN1bHQgPSBkcmF3UmVzdWx0Lm1hcChyZXN1bHQgPT4ge1xuICAgICAgY29uc3QgaGFzRGF0YU9iamVjdCA9IHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdCAmJiAoJ2RhdGEnIGluIHJlc3VsdCB8fCAnZGF0YVVSTCcgaW4gcmVzdWx0KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBoYXNEYXRhT2JqZWN0ID8gcmVzdWx0LmRhdGEgOiByZXN1bHQ7XG4gICAgICBjb25zdCBvcHRzID0gaGFzRGF0YU9iamVjdCA/IGFzc2lnbih7fSwgcmVzdWx0LCB7IGRhdGEgfSkgOiB7IGRhdGEgfTtcbiAgICAgIGlmIChpc0NhbnZhcyhkYXRhKSkge1xuICAgICAgICBjb25zdCBlbmNvZGluZyA9IG9wdHMuZW5jb2RpbmcgfHwgZXhwb3J0T3B0cy5lbmNvZGluZztcbiAgICAgICAgY29uc3QgZW5jb2RpbmdRdWFsaXR5ID0gZGVmaW5lZChvcHRzLmVuY29kaW5nUXVhbGl0eSwgZXhwb3J0T3B0cy5lbmNvZGluZ1F1YWxpdHksIDAuOTUpO1xuICAgICAgICBjb25zdCB7IGRhdGFVUkwsIGV4dGVuc2lvbiwgdHlwZSB9ID0gZXhwb3J0Q2FudmFzKGRhdGEsIHsgZW5jb2RpbmcsIGVuY29kaW5nUXVhbGl0eSB9KTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ob3B0cywgeyBkYXRhVVJMLCBleHRlbnNpb24sIHR5cGUgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb3B0cztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIE5vdyByZXR1cm4gdG8gcmVndWxhciByZW5kZXJpbmcgbW9kZVxuICAgIHRoaXMuX3Byb3BzLmV4cG9ydGluZyA9IGZhbHNlO1xuICAgIHRoaXMucmVzaXplKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcblxuICAgIC8vIEFuZCBub3cgd2UgY2FuIHNhdmUgZWFjaCByZXN1bHRcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoZHJhd1Jlc3VsdC5tYXAoKHJlc3VsdCwgaSwgbGF5ZXJMaXN0KSA9PiB7XG4gICAgICAvLyBCeSBkZWZhdWx0LCBpZiByZW5kZXJpbmcgbXVsdGlwbGUgbGF5ZXJzIHdlIHdpbGwgZ2l2ZSB0aGVtIGluZGljZXNcbiAgICAgIGNvbnN0IGN1ck9wdCA9IGFzc2lnbih7XG4gICAgICAgIGV4dGVuc2lvbjogJycsXG4gICAgICAgIHByZWZpeDogJycsXG4gICAgICAgIHN1ZmZpeDogJydcbiAgICAgIH0sIGV4cG9ydE9wdHMsIHJlc3VsdCwge1xuICAgICAgICBsYXllcjogaSxcbiAgICAgICAgdG90YWxMYXllcnM6IGxheWVyTGlzdC5sZW5ndGhcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiBleHBvcnQgaXMgZXhwbGljaXRseSBub3Qgc2F2aW5nLCBtYWtlIHN1cmUgbm90aGluZyBzYXZlc1xuICAgICAgLy8gT3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIGxheWVyIHNhdmUgb3B0aW9uLCBvciBmYWxsYmFjayB0byB0cnVlXG4gICAgICBjb25zdCBzYXZlUGFyYW0gPSBleHBvcnRPcHRzLnNhdmUgPT09IGZhbHNlID8gZmFsc2UgOiByZXN1bHQuc2F2ZTtcbiAgICAgIGN1ck9wdC5zYXZlID0gc2F2ZVBhcmFtICE9PSBmYWxzZTtcblxuICAgICAgLy8gUmVzb2x2ZSBhIGZ1bGwgZmlsZW5hbWUgZnJvbSBhbGwgdGhlIG9wdGlvbnNcbiAgICAgIGN1ck9wdC5maWxlbmFtZSA9IHJlc29sdmVGaWxlbmFtZShjdXJPcHQpO1xuXG4gICAgICAvLyBDbGVhbiB1cCBzb21lIHBhcmFtZXRlcnMgdGhhdCBtYXkgYmUgYW1iaWd1b3VzIHRvIHRoZSB1c2VyXG4gICAgICBkZWxldGUgY3VyT3B0LmVuY29kaW5nO1xuICAgICAgZGVsZXRlIGN1ck9wdC5lbmNvZGluZ1F1YWxpdHk7XG5cbiAgICAgIC8vIENsZWFuIGl0IHVwIGZ1cnRoZXIgYnkganVzdCByZW1vdmluZyB1bmRlZmluZWQgdmFsdWVzXG4gICAgICBmb3IgKGxldCBrIGluIGN1ck9wdCkge1xuICAgICAgICBpZiAodHlwZW9mIGN1ck9wdFtrXSA9PT0gJ3VuZGVmaW5lZCcpIGRlbGV0ZSBjdXJPcHRba107XG4gICAgICB9XG5cbiAgICAgIGxldCBzYXZlUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICBpZiAoY3VyT3B0LnNhdmUpIHtcbiAgICAgICAgLy8gV2hldGhlciB0byBhY3R1YWxseSBzYXZlIChkb3dubG9hZCkgdGhpcyBmcmFnbWVudFxuICAgICAgICBjb25zdCBkYXRhID0gY3VyT3B0LmRhdGE7XG4gICAgICAgIGlmIChjdXJPcHQuZGF0YVVSTCkge1xuICAgICAgICAgIGNvbnN0IGRhdGFVUkwgPSBjdXJPcHQuZGF0YVVSTDtcbiAgICAgICAgICBzYXZlUHJvbWlzZSA9IHNhdmVEYXRhVVJMKGRhdGFVUkwsIGN1ck9wdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2F2ZVByb21pc2UgPSBzYXZlRmlsZShkYXRhLCBjdXJPcHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc2F2ZVByb21pc2UudGhlbihzYXZlUmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGN1ck9wdCwgc2F2ZVJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KSkudGhlbihldiA9PiB7XG4gICAgICBjb25zdCBzYXZlZEV2ZW50cyA9IGV2LmZpbHRlcihlID0+IGUuc2F2ZSk7XG4gICAgICBpZiAoc2F2ZWRFdmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBMb2cgdGhlIHNhdmVkIGV4cG9ydHNcbiAgICAgICAgY29uc3QgZXZlbnRXaXRoT3V0cHV0ID0gc2F2ZWRFdmVudHMuZmluZChlID0+IGUub3V0cHV0TmFtZSk7XG4gICAgICAgIGNvbnN0IGlzQ2xpZW50ID0gc2F2ZWRFdmVudHMuc29tZShlID0+IGUuY2xpZW50KTtcbiAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPSBzYXZlZEV2ZW50cy5zb21lKGUgPT4gZS5zdHJlYW0pO1xuICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgLy8gbWFueSBmaWxlcywganVzdCBsb2cgaG93IG1hbnkgd2VyZSBleHBvcnRlZFxuICAgICAgICBpZiAoc2F2ZWRFdmVudHMubGVuZ3RoID4gMSkgaXRlbSA9IHNhdmVkRXZlbnRzLmxlbmd0aDtcbiAgICAgICAgLy8gaW4gQ0xJLCB3ZSBrbm93IGV4YWN0IHBhdGggZGlybmFtZVxuICAgICAgICBlbHNlIGlmIChldmVudFdpdGhPdXRwdXQpIGl0ZW0gPSBgJHtldmVudFdpdGhPdXRwdXQub3V0cHV0TmFtZX0vJHtzYXZlZEV2ZW50c1swXS5maWxlbmFtZX1gO1xuICAgICAgICAvLyBpbiBicm93c2VyLCB3ZSBjYW4gb25seSBrbm93IGl0IHdlbnQgdG8gXCJicm93c2VyIGRvd25sb2FkIGZvbGRlclwiXG4gICAgICAgIGVsc2UgaXRlbSA9IGAke3NhdmVkRXZlbnRzWzBdLmZpbGVuYW1lfWA7XG4gICAgICAgIGxldCBvZlNlcSA9ICcnO1xuICAgICAgICBpZiAoZXhwb3J0T3B0cy5zZXF1ZW5jZSkge1xuICAgICAgICAgIGNvbnN0IGhhc1RvdGFsRnJhbWVzID0gaXNGaW5pdGUodGhpcy5wcm9wcy50b3RhbEZyYW1lcyk7XG4gICAgICAgICAgb2ZTZXEgPSBoYXNUb3RhbEZyYW1lcyA/IGAgKGZyYW1lICR7ZXhwb3J0T3B0cy5mcmFtZSArIDF9IC8gJHt0aGlzLnByb3BzLnRvdGFsRnJhbWVzfSlgIDogYCAoZnJhbWUgJHtleHBvcnRPcHRzLmZyYW1lfSlgO1xuICAgICAgICB9IGVsc2UgaWYgKHNhdmVkRXZlbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBvZlNlcSA9IGAgZmlsZXNgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGlzQ2xpZW50ID8gJ2NhbnZhcy1za2V0Y2gtY2xpJyA6ICdjYW52YXMtc2tldGNoJztcbiAgICAgICAgY29uc3QgYWN0aW9uID0gaXNTdHJlYW1pbmcgPyAnU3RyZWFtaW5nIGludG8nIDogJ0V4cG9ydGVkJztcbiAgICAgICAgY29uc29sZS5sb2coYCVjWyR7Y2xpZW50fV0lYyAke2FjdGlvbn0gJWMke2l0ZW19JWMke29mU2VxfWAsICdjb2xvcjogIzhlOGU4ZTsnLCAnY29sb3I6IGluaXRpYWw7JywgJ2ZvbnQtd2VpZ2h0OiBib2xkOycsICdmb250LXdlaWdodDogaW5pdGlhbDsnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gucG9zdEV4cG9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnNrZXRjaC5wb3N0RXhwb3J0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXY7XG4gICAgfSk7XG4gIH1cblxuICBfd3JhcENvbnRleHRTY2FsZSAoY2IpIHtcbiAgICB0aGlzLl9wcmVSZW5kZXIoKTtcbiAgICBjYih0aGlzLnByb3BzKTtcbiAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG4gIH1cblxuICBfcHJlUmVuZGVyICgpIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyBTY2FsZSBjb250ZXh0IGZvciB1bml0IHNpemluZ1xuICAgIGlmICghdGhpcy5wcm9wcy5nbCAmJiBwcm9wcy5jb250ZXh0ICYmICFwcm9wcy5wNSkge1xuICAgICAgcHJvcHMuY29udGV4dC5zYXZlKCk7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zY2FsZUNvbnRleHQgIT09IGZhbHNlKSB7XG4gICAgICAgIHByb3BzLmNvbnRleHQuc2NhbGUocHJvcHMuc2NhbGVYLCBwcm9wcy5zY2FsZVkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcHMucDUpIHtcbiAgICAgIHByb3BzLnA1LnNjYWxlKHByb3BzLnNjYWxlWCAvIHByb3BzLnBpeGVsUmF0aW8sIHByb3BzLnNjYWxlWSAvIHByb3BzLnBpeGVsUmF0aW8pO1xuICAgIH1cbiAgfVxuXG4gIF9wb3N0UmVuZGVyICgpIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoIXRoaXMucHJvcHMuZ2wgJiYgcHJvcHMuY29udGV4dCAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmNvbnRleHQucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIC8vIEZsdXNoIGJ5IGRlZmF1bHQsIHRoaXMgbWF5IGJlIHJldmlzaXRlZCBhdCBhIGxhdGVyIHBvaW50LlxuICAgIC8vIFdlIGRvIHRoaXMgdG8gZW5zdXJlIHRvRGF0YVVSTCBjYW4gYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyLlxuICAgIC8vIE1vc3QgbGlrZWx5IGJyb3dzZXJzIGFscmVhZHkgaGFuZGxlIHRoaXMsIHNvIHdlIG1heSByZXZpc2l0IHRoaXMgYW5kXG4gICAgLy8gcmVtb3ZlIGl0IGlmIGl0IGltcHJvdmVzIHBlcmZvcm1hbmNlIHdpdGhvdXQgYW55IHVzYWJpbGl0eSBpc3N1ZXMuXG4gICAgaWYgKHByb3BzLmdsICYmIHRoaXMuc2V0dGluZ3MuZmx1c2ggIT09IGZhbHNlICYmICFwcm9wcy5wNSkge1xuICAgICAgcHJvcHMuZ2wuZmx1c2goKTtcbiAgICB9XG4gIH1cblxuICB0aWNrICgpIHtcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLnRpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuICAgICAgdGhpcy5za2V0Y2gudGljayh0aGlzLnByb3BzKTtcbiAgICAgIHRoaXMuX3Bvc3RSZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnA1KSB7XG4gICAgICB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5wcm9wcy5wNS5yZWRyYXcoKTtcbiAgICAgIHJldHVybiB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zdWJtaXREcmF3Q2FsbCgpO1xuICAgIH1cbiAgfVxuXG4gIHN1Ym1pdERyYXdDYWxsICgpIHtcbiAgICBpZiAoIXRoaXMuc2tldGNoKSByZXR1cm47XG5cbiAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG5cbiAgICBsZXQgZHJhd1Jlc3VsdDtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRyYXdSZXN1bHQgPSB0aGlzLnNrZXRjaChwcm9wcyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkcmF3UmVzdWx0ID0gdGhpcy5za2V0Y2gucmVuZGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG5cbiAgICByZXR1cm4gZHJhd1Jlc3VsdDtcbiAgfVxuXG4gIHVwZGF0ZSAob3B0ID0ge30pIHtcbiAgICAvLyBDdXJyZW50bHkgdXBkYXRlKCkgaXMgb25seSBmb2N1c2VkIG9uIHJlc2l6aW5nLFxuICAgIC8vIGJ1dCBsYXRlciB3ZSB3aWxsIHN1cHBvcnQgb3RoZXIgb3B0aW9ucyBsaWtlIHN3aXRjaGluZ1xuICAgIC8vIGZyYW1lcyBhbmQgc3VjaC5cbiAgICBjb25zdCBub3RZZXRTdXBwb3J0ZWQgPSBbXG4gICAgICAnYW5pbWF0ZSdcbiAgICBdO1xuXG4gICAgT2JqZWN0LmtleXMob3B0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAobm90WWV0U3VwcG9ydGVkLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU29ycnksIHRoZSB7ICR7a2V5fSB9IG9wdGlvbiBpcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIHVwZGF0ZSgpLmApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgb2xkQ2FudmFzID0gdGhpcy5fc2V0dGluZ3MuY2FudmFzO1xuICAgIGNvbnN0IG9sZENvbnRleHQgPSB0aGlzLl9zZXR0aW5ncy5jb250ZXh0O1xuXG4gICAgLy8gTWVyZ2UgbmV3IG9wdGlvbnMgaW50byBzZXR0aW5nc1xuICAgIGZvciAobGV0IGtleSBpbiBvcHQpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0W2tleV07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykgeyAvLyBpZ25vcmUgdW5kZWZpbmVkXG4gICAgICAgIHRoaXMuX3NldHRpbmdzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNZXJnZSBpbiB0aW1lIHByb3BzXG4gICAgY29uc3QgdGltZU9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9zZXR0aW5ncywgb3B0KTtcbiAgICBpZiAoJ3RpbWUnIGluIG9wdCAmJiAnZnJhbWUnIGluIG9wdCkgdGhyb3cgbmV3IEVycm9yKCdZb3Ugc2hvdWxkIHNwZWNpZnkgeyB0aW1lIH0gb3IgeyBmcmFtZSB9IGJ1dCBub3QgYm90aCcpO1xuICAgIGVsc2UgaWYgKCd0aW1lJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy5mcmFtZTtcbiAgICBlbHNlIGlmICgnZnJhbWUnIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLnRpbWU7XG4gICAgaWYgKCdkdXJhdGlvbicgaW4gb3B0ICYmICd0b3RhbEZyYW1lcycgaW4gb3B0KSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSB7IGR1cmF0aW9uIH0gb3IgeyB0b3RhbEZyYW1lcyB9IGJ1dCBub3QgYm90aCcpO1xuICAgIGVsc2UgaWYgKCdkdXJhdGlvbicgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMudG90YWxGcmFtZXM7XG4gICAgZWxzZSBpZiAoJ3RvdGFsRnJhbWVzJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy5kdXJhdGlvbjtcblxuICAgIC8vIE1lcmdlIGluIHVzZXIgZGF0YSB3aXRob3V0IGNvcHlpbmdcbiAgICBpZiAoJ2RhdGEnIGluIG9wdCkgdGhpcy5fcHJvcHMuZGF0YSA9IG9wdC5kYXRhO1xuXG4gICAgY29uc3QgdGltZVByb3BzID0gdGhpcy5nZXRUaW1lUHJvcHModGltZU9wdHMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fcHJvcHMsIHRpbWVQcm9wcyk7XG5cbiAgICAvLyBJZiBlaXRoZXIgY2FudmFzIG9yIGNvbnRleHQgaXMgY2hhbmdlZCwgd2Ugc2hvdWxkIHJlLXVwZGF0ZVxuICAgIGlmIChvbGRDYW52YXMgIT09IHRoaXMuX3NldHRpbmdzLmNhbnZhcyB8fCBvbGRDb250ZXh0ICE9PSB0aGlzLl9zZXR0aW5ncy5jb250ZXh0KSB7XG4gICAgICBjb25zdCB7IGNhbnZhcywgY29udGV4dCB9ID0gY3JlYXRlQ2FudmFzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgICAgdGhpcy5wcm9wcy5jYW52YXMgPSBjYW52YXM7XG4gICAgICB0aGlzLnByb3BzLmNvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgICAvLyBEZWxldGUgb3IgYWRkIGEgJ2dsJyBwcm9wIGZvciBjb252ZW5pZW5jZVxuICAgICAgdGhpcy5fc2V0dXBHTEtleSgpO1xuXG4gICAgICAvLyBSZS1tb3VudCB0aGUgbmV3IGNhbnZhcyBpZiBpdCBoYXMgbm8gcGFyZW50XG4gICAgICB0aGlzLl9hcHBlbmRDYW52YXNJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIC8vIFNwZWNpYWwgY2FzZSB0byBzdXBwb3J0IFA1LmpzXG4gICAgaWYgKG9wdC5wNSAmJiB0eXBlb2Ygb3B0LnA1ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnByb3BzLnA1ID0gb3B0LnA1O1xuICAgICAgdGhpcy5wcm9wcy5wNS5kcmF3ID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNQNVJlc2l6aW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQgPSB0aGlzLnN1Ym1pdERyYXdDYWxsKCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBwbGF5aW5nIHN0YXRlIGlmIG5lY2Vzc2FyeVxuICAgIGlmICgncGxheWluZycgaW4gb3B0KSB7XG4gICAgICBpZiAob3B0LnBsYXlpbmcpIHRoaXMucGxheSgpO1xuICAgICAgZWxzZSB0aGlzLnBhdXNlKCk7XG4gICAgfVxuXG4gICAgY2hlY2tTZXR0aW5ncyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICAvLyBEcmF3IG5ldyBmcmFtZVxuICAgIHRoaXMucmVzaXplKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICByZXR1cm4gdGhpcy5wcm9wcztcbiAgfVxuXG4gIHJlc2l6ZSAoKSB7XG4gICAgY29uc3Qgb2xkU2l6ZXMgPSB0aGlzLl9nZXRTaXplUHJvcHMoKTtcblxuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zZXR0aW5ncztcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyBSZWNvbXB1dGUgbmV3IHByb3BlcnRpZXMgYmFzZWQgb24gY3VycmVudCBzZXR1cFxuICAgIGNvbnN0IG5ld1Byb3BzID0gcmVzaXplQ2FudmFzKHByb3BzLCBzZXR0aW5ncyk7XG5cbiAgICAvLyBBc3NpZ24gdG8gY3VycmVudCBwcm9wc1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fcHJvcHMsIG5ld1Byb3BzKTtcblxuICAgIC8vIE5vdyB3ZSBhY3R1YWxseSB1cGRhdGUgdGhlIGNhbnZhcyB3aWR0aC9oZWlnaHQgYW5kIHN0eWxlIHByb3BzXG4gICAgY29uc3Qge1xuICAgICAgcGl4ZWxSYXRpbyxcbiAgICAgIGNhbnZhc1dpZHRoLFxuICAgICAgY2FudmFzSGVpZ2h0LFxuICAgICAgc3R5bGVXaWR0aCxcbiAgICAgIHN0eWxlSGVpZ2h0XG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyBVcGRhdGUgY2FudmFzIHNldHRpbmdzXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5wcm9wcy5jYW52YXM7XG4gICAgaWYgKGNhbnZhcyAmJiBzZXR0aW5ncy5yZXNpemVDYW52YXMgIT09IGZhbHNlKSB7XG4gICAgICBpZiAocHJvcHMucDUpIHtcbiAgICAgICAgLy8gUDUuanMgc3BlY2lmaWMgZWRnZSBjYXNlXG4gICAgICAgIGlmIChjYW52YXMud2lkdGggIT09IGNhbnZhc1dpZHRoIHx8IGNhbnZhcy5oZWlnaHQgIT09IGNhbnZhc0hlaWdodCkge1xuICAgICAgICAgIHRoaXMuX2lzUDVSZXNpemluZyA9IHRydWU7XG4gICAgICAgICAgLy8gVGhpcyBjYXVzZXMgYSByZS1kcmF3IDpcXCBzbyB3ZSBpZ25vcmUgZHJhd3MgaW4gdGhlIG1lYW4gdGltZS4uLiBzb3J0YSBoYWNreVxuICAgICAgICAgIHByb3BzLnA1LnBpeGVsRGVuc2l0eShwaXhlbFJhdGlvKTtcbiAgICAgICAgICBwcm9wcy5wNS5yZXNpemVDYW52YXMoY2FudmFzV2lkdGggLyBwaXhlbFJhdGlvLCBjYW52YXNIZWlnaHQgLyBwaXhlbFJhdGlvLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5faXNQNVJlc2l6aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvcmNlIGNhbnZhcyBzaXplXG4gICAgICAgIGlmIChjYW52YXMud2lkdGggIT09IGNhbnZhc1dpZHRoKSBjYW52YXMud2lkdGggPSBjYW52YXNXaWR0aDtcbiAgICAgICAgaWYgKGNhbnZhcy5oZWlnaHQgIT09IGNhbnZhc0hlaWdodCkgY2FudmFzLmhlaWdodCA9IGNhbnZhc0hlaWdodDtcbiAgICAgIH1cbiAgICAgIC8vIFVwZGF0ZSBjYW52YXMgc3R5bGVcbiAgICAgIGlmIChpc0Jyb3dzZXIoKSAmJiBzZXR0aW5ncy5zdHlsZUNhbnZhcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gYCR7c3R5bGVXaWR0aH1weGA7XG4gICAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHtzdHlsZUhlaWdodH1weGA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV3U2l6ZXMgPSB0aGlzLl9nZXRTaXplUHJvcHMoKTtcbiAgICBsZXQgY2hhbmdlZCA9ICFkZWVwRXF1YWwob2xkU2l6ZXMsIG5ld1NpemVzKTtcbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5fc2l6ZUNoYW5nZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYW5nZWQ7XG4gIH1cblxuICBfc2l6ZUNoYW5nZWQgKCkge1xuICAgIC8vIFNlbmQgcmVzaXplIGV2ZW50IHRvIHNrZXRjaFxuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2gucmVzaXplID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnNrZXRjaC5yZXNpemUodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgYW5pbWF0ZSAoKSB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnBsYXlpbmcpIHJldHVybjtcbiAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbY2FudmFzLXNrZXRjaF0gV0FSTjogQW5pbWF0aW9uIGluIE5vZGUuanMgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRlSGFuZGxlcik7XG5cbiAgICBsZXQgbm93ID0gcmlnaHROb3coKTtcblxuICAgIGNvbnN0IGZwcyA9IHRoaXMucHJvcHMuZnBzO1xuICAgIGNvbnN0IGZyYW1lSW50ZXJ2YWxNUyA9IDEwMDAgLyBmcHM7XG4gICAgbGV0IGRlbHRhVGltZU1TID0gbm93IC0gdGhpcy5fbGFzdFRpbWU7XG5cbiAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMucHJvcHMuZHVyYXRpb247XG4gICAgY29uc3QgaGFzRHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gPT09ICdudW1iZXInICYmIGlzRmluaXRlKGR1cmF0aW9uKTtcblxuICAgIGxldCBpc05ld0ZyYW1lID0gdHJ1ZTtcbiAgICBjb25zdCBwbGF5YmFja1JhdGUgPSB0aGlzLnNldHRpbmdzLnBsYXliYWNrUmF0ZTtcbiAgICBpZiAocGxheWJhY2tSYXRlID09PSAnZml4ZWQnKSB7XG4gICAgICBkZWx0YVRpbWVNUyA9IGZyYW1lSW50ZXJ2YWxNUztcbiAgICB9IGVsc2UgaWYgKHBsYXliYWNrUmF0ZSA9PT0gJ3Rocm90dGxlJykge1xuICAgICAgaWYgKGRlbHRhVGltZU1TID4gZnJhbWVJbnRlcnZhbE1TKSB7XG4gICAgICAgIG5vdyA9IG5vdyAtIChkZWx0YVRpbWVNUyAlIGZyYW1lSW50ZXJ2YWxNUyk7XG4gICAgICAgIHRoaXMuX2xhc3RUaW1lID0gbm93O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNOZXdGcmFtZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sYXN0VGltZSA9IG5vdztcbiAgICB9XG5cbiAgICBjb25zdCBkZWx0YVRpbWUgPSBkZWx0YVRpbWVNUyAvIDEwMDA7XG4gICAgbGV0IG5ld1RpbWUgPSB0aGlzLnByb3BzLnRpbWUgKyBkZWx0YVRpbWUgKiB0aGlzLnByb3BzLnRpbWVTY2FsZTtcblxuICAgIC8vIEhhbmRsZSByZXZlcnNlIHRpbWUgc2NhbGVcbiAgICBpZiAobmV3VGltZSA8IDAgJiYgaGFzRHVyYXRpb24pIHtcbiAgICAgIG5ld1RpbWUgPSBkdXJhdGlvbiArIG5ld1RpbWU7XG4gICAgfVxuXG4gICAgLy8gUmUtc3RhcnQgYW5pbWF0aW9uXG4gICAgbGV0IGlzRmluaXNoZWQgPSBmYWxzZTtcbiAgICBsZXQgaXNMb29wU3RhcnQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGxvb3BpbmcgPSB0aGlzLnNldHRpbmdzLmxvb3AgIT09IGZhbHNlO1xuXG4gICAgaWYgKGhhc0R1cmF0aW9uICYmIG5ld1RpbWUgPj0gZHVyYXRpb24pIHtcbiAgICAgIC8vIFJlLXN0YXJ0IGFuaW1hdGlvblxuICAgICAgaWYgKGxvb3BpbmcpIHtcbiAgICAgICAgaXNOZXdGcmFtZSA9IHRydWU7XG4gICAgICAgIG5ld1RpbWUgPSBuZXdUaW1lICUgZHVyYXRpb247XG4gICAgICAgIGlzTG9vcFN0YXJ0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSBmYWxzZTtcbiAgICAgICAgbmV3VGltZSA9IGR1cmF0aW9uO1xuICAgICAgICBpc0ZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2lnbmFsRW5kKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmV3RnJhbWUpIHtcbiAgICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gZGVsdGFUaW1lO1xuICAgICAgdGhpcy5wcm9wcy50aW1lID0gbmV3VGltZTtcbiAgICAgIHRoaXMucHJvcHMucGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQobmV3VGltZSwgZHVyYXRpb24pO1xuICAgICAgY29uc3QgbGFzdEZyYW1lID0gdGhpcy5wcm9wcy5mcmFtZTtcbiAgICAgIHRoaXMucHJvcHMuZnJhbWUgPSB0aGlzLl9jb21wdXRlQ3VycmVudEZyYW1lKCk7XG4gICAgICBpZiAoaXNMb29wU3RhcnQpIHRoaXMuX3NpZ25hbEJlZ2luKCk7XG4gICAgICBpZiAobGFzdEZyYW1lICE9PSB0aGlzLnByb3BzLmZyYW1lKSB0aGlzLnRpY2soKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGlzRmluaXNoZWQpIHtcbiAgICAgIHRoaXMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICBkaXNwYXRjaCAoY2IpIHtcbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRXJyb3IoJ211c3QgcGFzcyBmdW5jdGlvbiBpbnRvIGRpc3BhdGNoKCknKTtcbiAgICBjYih0aGlzLnByb3BzKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbW91bnQgKCkge1xuICAgIHRoaXMuX2FwcGVuZENhbnZhc0lmTmVlZGVkKCk7XG4gIH1cblxuICB1bm1vdW50ICgpIHtcbiAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9yZXNpemVIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2tleWJvYXJkU2hvcnRjdXRzLmRldGFjaCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5jYW52YXMucGFyZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5wcm9wcy5jYW52YXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLnByb3BzLmNhbnZhcyk7XG4gICAgfVxuICB9XG5cbiAgX2FwcGVuZENhbnZhc0lmTmVlZGVkICgpIHtcbiAgICBpZiAoIWlzQnJvd3NlcigpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucGFyZW50ICE9PSBmYWxzZSAmJiAodGhpcy5wcm9wcy5jYW52YXMgJiYgIXRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQpKSB7XG4gICAgICBjb25zdCBkZWZhdWx0UGFyZW50ID0gdGhpcy5zZXR0aW5ncy5wYXJlbnQgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgIGRlZmF1bHRQYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5wcm9wcy5jYW52YXMpO1xuICAgIH1cbiAgfVxuXG4gIF9zZXR1cEdMS2V5ICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5jb250ZXh0KSB7XG4gICAgICBpZiAoaXNXZWJHTENvbnRleHQodGhpcy5wcm9wcy5jb250ZXh0KSkge1xuICAgICAgICB0aGlzLl9wcm9wcy5nbCA9IHRoaXMucHJvcHMuY29udGV4dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9wcm9wcy5nbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRUaW1lUHJvcHMgKHNldHRpbmdzID0ge30pIHtcbiAgICAvLyBHZXQgdGltaW5nIGRhdGFcbiAgICBsZXQgZHVyYXRpb24gPSBzZXR0aW5ncy5kdXJhdGlvbjtcbiAgICBsZXQgdG90YWxGcmFtZXMgPSBzZXR0aW5ncy50b3RhbEZyYW1lcztcbiAgICBjb25zdCB0aW1lU2NhbGUgPSBkZWZpbmVkKHNldHRpbmdzLnRpbWVTY2FsZSwgMSk7XG4gICAgY29uc3QgZnBzID0gZGVmaW5lZChzZXR0aW5ncy5mcHMsIDI0KTtcbiAgICBjb25zdCBoYXNEdXJhdGlvbiA9IHR5cGVvZiBkdXJhdGlvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoZHVyYXRpb24pO1xuICAgIGNvbnN0IGhhc1RvdGFsRnJhbWVzID0gdHlwZW9mIHRvdGFsRnJhbWVzID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh0b3RhbEZyYW1lcyk7XG5cbiAgICBjb25zdCB0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiA9IGhhc0R1cmF0aW9uID8gTWF0aC5mbG9vcihmcHMgKiBkdXJhdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZHVyYXRpb25Gcm9tVG90YWxGcmFtZXMgPSBoYXNUb3RhbEZyYW1lcyA/ICh0b3RhbEZyYW1lcyAvIGZwcykgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGhhc0R1cmF0aW9uICYmIGhhc1RvdGFsRnJhbWVzICYmIHRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uICE9PSB0b3RhbEZyYW1lcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3Ugc2hvdWxkIHNwZWNpZnkgZWl0aGVyIGR1cmF0aW9uIG9yIHRvdGFsRnJhbWVzLCBidXQgbm90IGJvdGguIE9yLCB0aGV5IG11c3QgbWF0Y2ggZXhhY3RseS4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNldHRpbmdzLmRpbWVuc2lvbnMgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBzZXR0aW5ncy51bml0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihgWW91J3ZlIHNwZWNpZmllZCBhIHsgdW5pdHMgfSBzZXR0aW5nIGJ1dCBubyB7IGRpbWVuc2lvbiB9LCBzbyB0aGUgdW5pdHMgd2lsbCBiZSBpZ25vcmVkLmApO1xuICAgIH1cblxuICAgIHRvdGFsRnJhbWVzID0gZGVmaW5lZCh0b3RhbEZyYW1lcywgdG90YWxGcmFtZXNGcm9tRHVyYXRpb24sIEluZmluaXR5KTtcbiAgICBkdXJhdGlvbiA9IGRlZmluZWQoZHVyYXRpb24sIGR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzLCBJbmZpbml0eSk7XG5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBzZXR0aW5ncy50aW1lO1xuICAgIGNvbnN0IHN0YXJ0RnJhbWUgPSBzZXR0aW5ncy5mcmFtZTtcbiAgICBjb25zdCBoYXNTdGFydFRpbWUgPSB0eXBlb2Ygc3RhcnRUaW1lID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzdGFydFRpbWUpO1xuICAgIGNvbnN0IGhhc1N0YXJ0RnJhbWUgPSB0eXBlb2Ygc3RhcnRGcmFtZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc3RhcnRGcmFtZSk7XG5cbiAgICAvLyBzdGFydCBhdCB6ZXJvIHVubGVzcyB1c2VyIHNwZWNpZmllcyBmcmFtZSBvciB0aW1lIChidXQgbm90IGJvdGggbWlzbWF0Y2hlZClcbiAgICBsZXQgdGltZSA9IDA7XG4gICAgbGV0IGZyYW1lID0gMDtcbiAgICBsZXQgcGxheWhlYWQgPSAwO1xuICAgIGlmIChoYXNTdGFydFRpbWUgJiYgaGFzU3RhcnRGcmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3Ugc2hvdWxkIHNwZWNpZnkgZWl0aGVyIHN0YXJ0IGZyYW1lIG9yIHRpbWUsIGJ1dCBub3QgYm90aC4nKTtcbiAgICB9IGVsc2UgaWYgKGhhc1N0YXJ0VGltZSkge1xuICAgICAgLy8gVXNlciBzcGVjaWZpZXMgdGltZSwgd2UgaW5mZXIgZnJhbWVzIGZyb20gRlBTXG4gICAgICB0aW1lID0gc3RhcnRUaW1lO1xuICAgICAgcGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQodGltZSwgZHVyYXRpb24pO1xuICAgICAgZnJhbWUgPSB0aGlzLl9jb21wdXRlRnJhbWUoXG4gICAgICAgIHBsYXloZWFkLCB0aW1lLFxuICAgICAgICB0b3RhbEZyYW1lcywgZnBzXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaGFzU3RhcnRGcmFtZSkge1xuICAgICAgLy8gVXNlciBzcGVjaWZpZXMgZnJhbWUgbnVtYmVyLCB3ZSBpbmZlciB0aW1lIGZyb20gRlBTXG4gICAgICBmcmFtZSA9IHN0YXJ0RnJhbWU7XG4gICAgICB0aW1lID0gZnJhbWUgLyBmcHM7XG4gICAgICBwbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZCh0aW1lLCBkdXJhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYXloZWFkLFxuICAgICAgdGltZSxcbiAgICAgIGZyYW1lLFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0b3RhbEZyYW1lcyxcbiAgICAgIGZwcyxcbiAgICAgIHRpbWVTY2FsZVxuICAgIH07XG4gIH1cblxuICBzZXR1cCAoc2V0dGluZ3MgPSB7fSkge1xuICAgIGlmICh0aGlzLnNrZXRjaCkgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBsZSBzZXR1cCgpIGNhbGxzIG5vdCB5ZXQgc3VwcG9ydGVkLicpO1xuXG4gICAgdGhpcy5fc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzZXR0aW5ncywgdGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgY2hlY2tTZXR0aW5ncyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICAvLyBHZXQgaW5pdGlhbCBjYW52YXMgJiBjb250ZXh0XG4gICAgY29uc3QgeyBjb250ZXh0LCBjYW52YXMgfSA9IGNyZWF0ZUNhbnZhcyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICBjb25zdCB0aW1lUHJvcHMgPSB0aGlzLmdldFRpbWVQcm9wcyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICAvLyBJbml0aWFsIHJlbmRlciBzdGF0ZSBmZWF0dXJlc1xuICAgIHRoaXMuX3Byb3BzID0ge1xuICAgICAgLi4udGltZVByb3BzLFxuICAgICAgY2FudmFzLFxuICAgICAgY29udGV4dCxcbiAgICAgIGRlbHRhVGltZTogMCxcbiAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgZXhwb3J0aW5nOiBmYWxzZSxcbiAgICAgIHBsYXlpbmc6IGZhbHNlLFxuICAgICAgcmVjb3JkaW5nOiBmYWxzZSxcbiAgICAgIHNldHRpbmdzOiB0aGlzLnNldHRpbmdzLFxuICAgICAgZGF0YTogdGhpcy5zZXR0aW5ncy5kYXRhLFxuXG4gICAgICAvLyBFeHBvcnQgc29tZSBzcGVjaWZpYyBhY3Rpb25zIHRvIHRoZSBza2V0Y2hcbiAgICAgIHJlbmRlcjogKCkgPT4gdGhpcy5yZW5kZXIoKSxcbiAgICAgIHRvZ2dsZVBsYXk6ICgpID0+IHRoaXMudG9nZ2xlUGxheSgpLFxuICAgICAgZGlzcGF0Y2g6IChjYikgPT4gdGhpcy5kaXNwYXRjaChjYiksXG4gICAgICB0aWNrOiAoKSA9PiB0aGlzLnRpY2soKSxcbiAgICAgIHJlc2l6ZTogKCkgPT4gdGhpcy5yZXNpemUoKSxcbiAgICAgIHVwZGF0ZTogKG9wdCkgPT4gdGhpcy51cGRhdGUob3B0KSxcbiAgICAgIGV4cG9ydEZyYW1lOiBvcHQgPT4gdGhpcy5leHBvcnRGcmFtZShvcHQpLFxuICAgICAgcmVjb3JkOiAoKSA9PiB0aGlzLnJlY29yZCgpLFxuICAgICAgcGxheTogKCkgPT4gdGhpcy5wbGF5KCksXG4gICAgICBwYXVzZTogKCkgPT4gdGhpcy5wYXVzZSgpLFxuICAgICAgc3RvcDogKCkgPT4gdGhpcy5zdG9wKClcbiAgICB9O1xuXG4gICAgLy8gRm9yIFdlYkdMIHNrZXRjaGVzLCBhIGdsIHZhcmlhYmxlIHJlYWRzIGEgYml0IGJldHRlclxuICAgIHRoaXMuX3NldHVwR0xLZXkoKTtcblxuICAgIC8vIFRyaWdnZXIgaW5pdGlhbCByZXNpemUgbm93IHNvIHRoYXQgY2FudmFzIGlzIGFscmVhZHkgc2l6ZWRcbiAgICAvLyBieSB0aGUgdGltZSB3ZSBsb2FkIHRoZSBza2V0Y2hcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICB9XG5cbiAgbG9hZEFuZFJ1biAoY2FudmFzU2tldGNoLCBuZXdTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmxvYWQoY2FudmFzU2tldGNoLCBuZXdTZXR0aW5ncykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnJ1bigpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSk7XG4gIH1cblxuICB1bmxvYWQgKCkge1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICBpZiAoIXRoaXMuc2tldGNoKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC51bmxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2gudW5sb2FkKHByb3BzKSk7XG4gICAgfVxuICAgIHRoaXMuX3NrZXRjaCA9IG51bGw7XG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICB0aGlzLnVubG9hZCgpO1xuICAgIHRoaXMudW5tb3VudCgpO1xuICB9XG5cbiAgbG9hZCAoY3JlYXRlU2tldGNoLCBuZXdTZXR0aW5ncykge1xuICAgIC8vIFVzZXIgZGlkbid0IHNwZWNpZnkgYSBmdW5jdGlvblxuICAgIGlmICh0eXBlb2YgY3JlYXRlU2tldGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmdW5jdGlvbiBtdXN0IHRha2UgaW4gYSBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyLiBFeGFtcGxlOlxcbiAgY2FudmFzU2tldGNoZXIoKCkgPT4geyAuLi4gfSwgc2V0dGluZ3MpJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2tldGNoKSB7XG4gICAgICB0aGlzLnVubG9hZCgpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3U2V0dGluZ3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnVwZGF0ZShuZXdTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIHRyaWNreSBjYXNlOyB3ZSBzZXQgdXAgdGhlIGF1dG8tc2NhbGluZyBoZXJlXG4gICAgLy8gaW4gY2FzZSB0aGUgdXNlciBkZWNpZGVzIHRvIHJlbmRlciBhbnl0aGluZyB0byB0aGUgY29udGV4dCAqYmVmb3JlKiB0aGVcbiAgICAvLyByZW5kZXIoKSBmdW5jdGlvbi4uLiBIb3dldmVyLCB1c2VycyBzaG91bGQgaW5zdGVhZCB1c2UgYmVnaW4oKSBmdW5jdGlvbiBmb3IgdGhhdC5cbiAgICB0aGlzLl9wcmVSZW5kZXIoKTtcblxuICAgIGxldCBwcmVsb2FkID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAvLyBCZWNhdXNlIG9mIFA1LmpzJ3MgdW51c3VhbCBzdHJ1Y3R1cmUsIHdlIGhhdmUgdG8gZG8gYSBiaXQgb2ZcbiAgICAvLyBsaWJyYXJ5LXNwZWNpZmljIGNoYW5nZXMgdG8gc3VwcG9ydCBpdCBwcm9wZXJseS5cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5wNSkge1xuICAgICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tjYW52YXMtc2tldGNoXSBFUlJPUjogVXNpbmcgcDUuanMgaW4gTm9kZS5qcyBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICB9XG4gICAgICBwcmVsb2FkID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIGxldCBQNUNvbnN0cnVjdG9yID0gdGhpcy5zZXR0aW5ncy5wNTtcbiAgICAgICAgbGV0IHByZWxvYWQ7XG4gICAgICAgIGlmIChQNUNvbnN0cnVjdG9yLnA1KSB7XG4gICAgICAgICAgcHJlbG9hZCA9IFA1Q29uc3RydWN0b3IucHJlbG9hZDtcbiAgICAgICAgICBQNUNvbnN0cnVjdG9yID0gUDVDb25zdHJ1Y3Rvci5wNTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBza2V0Y2ggc2V0dXA7IGRpc2FibGUgbG9vcCwgc2V0IHNpemluZywgZXRjLlxuICAgICAgICBjb25zdCBwNVNrZXRjaCA9IHA1ID0+IHtcbiAgICAgICAgICAvLyBIb29rIGluIHByZWxvYWQgaWYgbmVjZXNzYXJ5XG4gICAgICAgICAgaWYgKHByZWxvYWQpIHA1LnByZWxvYWQgPSAoKSA9PiBwcmVsb2FkKHA1KTtcbiAgICAgICAgICBwNS5zZXR1cCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcbiAgICAgICAgICAgIGNvbnN0IGlzR0wgPSB0aGlzLnNldHRpbmdzLmNvbnRleHQgPT09ICd3ZWJnbCc7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJlciA9IGlzR0wgPyBwNS5XRUJHTCA6IHA1LlAyRDtcbiAgICAgICAgICAgIHA1Lm5vTG9vcCgpO1xuICAgICAgICAgICAgcDUucGl4ZWxEZW5zaXR5KHByb3BzLnBpeGVsUmF0aW8pO1xuICAgICAgICAgICAgcDUuY3JlYXRlQ2FudmFzKHByb3BzLnZpZXdwb3J0V2lkdGgsIHByb3BzLnZpZXdwb3J0SGVpZ2h0LCByZW5kZXJlcik7XG4gICAgICAgICAgICBpZiAoaXNHTCAmJiB0aGlzLnNldHRpbmdzLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgcDUuc2V0QXR0cmlidXRlcyh0aGlzLnNldHRpbmdzLmF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh7IHA1LCBjYW52YXM6IHA1LmNhbnZhcywgY29udGV4dDogcDUuX3JlbmRlcmVyLmRyYXdpbmdDb250ZXh0IH0pO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gU3VwcG9ydCBnbG9iYWwgYW5kIGluc3RhbmNlIFA1LmpzIG1vZGVzXG4gICAgICAgIGlmICh0eXBlb2YgUDVDb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG5ldyBQNUNvbnN0cnVjdG9yKHA1U2tldGNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5jcmVhdGVDYW52YXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInsgcDUgfSBzZXR0aW5nIGlzIHBhc3NlZCBidXQgY2FuJ3QgZmluZCBwNS5qcyBpbiBnbG9iYWwgKHdpbmRvdykgc2NvcGUuIE1heWJlIHlvdSBkaWQgbm90IGNyZWF0ZSBpdCBnbG9iYWxseT9cXG5uZXcgcDUoKTsgLy8gPC0tIGF0dGFjaGVzIHRvIGdsb2JhbCBzY29wZVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcDVTa2V0Y2god2luZG93KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZWxvYWQudGhlbigoKSA9PiB7XG4gICAgICAvLyBMb2FkIHRoZSB1c2VyJ3Mgc2tldGNoXG4gICAgICBsZXQgbG9hZGVyID0gY3JlYXRlU2tldGNoKHRoaXMucHJvcHMpO1xuICAgICAgaWYgKCFpc1Byb21pc2UobG9hZGVyKSkge1xuICAgICAgICBsb2FkZXIgPSBQcm9taXNlLnJlc29sdmUobG9hZGVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsb2FkZXI7XG4gICAgfSkudGhlbihza2V0Y2ggPT4ge1xuICAgICAgaWYgKCFza2V0Y2gpIHNrZXRjaCA9IHt9O1xuICAgICAgdGhpcy5fc2tldGNoID0gc2tldGNoO1xuXG4gICAgICAvLyBPbmNlIHRoZSBza2V0Y2ggaXMgbG9hZGVkIHdlIGNhbiBhZGQgdGhlIGV2ZW50c1xuICAgICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICAgIHRoaXMuX2tleWJvYXJkU2hvcnRjdXRzLmF0dGFjaCgpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fcmVzaXplSGFuZGxlcik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Bvc3RSZW5kZXIoKTtcblxuICAgICAgLy8gVGhlIGluaXRpYWwgcmVzaXplKCkgaW4gdGhlIGNvbnN0cnVjdG9yIHdpbGwgbm90IGhhdmVcbiAgICAgIC8vIHRyaWdnZXJlZCBhIHJlc2l6ZSgpIGV2ZW50IG9uIHRoZSBza2V0Y2gsIHNpbmNlIGl0IHdhcyBiZWZvcmVcbiAgICAgIC8vIHRoZSBza2V0Y2ggd2FzIGxvYWRlZC4gU28gd2Ugc2VuZCB0aGUgc2lnbmFsIGhlcmUsIGFsbG93aW5nXG4gICAgICAvLyB1c2VycyB0byByZWFjdCB0byB0aGUgaW5pdGlhbCBzaXplIGJlZm9yZSBmaXJzdCByZW5kZXIuXG4gICAgICB0aGlzLl9zaXplQ2hhbmdlZCgpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgIGNvbnNvbGUud2FybignQ291bGQgbm90IHN0YXJ0IHNrZXRjaCwgdGhlIGFzeW5jIGxvYWRpbmcgZnVuY3Rpb24gcmVqZWN0ZWQgd2l0aCBhbiBlcnJvcjpcXG4gICAgRXJyb3I6ICcgKyBlcnIubWVzc2FnZSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2tldGNoTWFuYWdlcjtcbiIsImltcG9ydCB7IGdldENsaWVudEFQSSB9IGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAob3B0ID0ge30pIHtcbiAgY29uc3QgaGFuZGxlciA9IGV2ID0+IHtcbiAgICBpZiAoIW9wdC5lbmFibGVkKCkpIHJldHVybjtcblxuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGlmIChldi5rZXlDb2RlID09PSA4MyAmJiAhZXYuYWx0S2V5ICYmIChldi5tZXRhS2V5IHx8IGV2LmN0cmxLZXkpKSB7XG4gICAgICAvLyBDbWQgKyBTXG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgb3B0LnNhdmUoZXYpO1xuICAgIH0gZWxzZSBpZiAoZXYua2V5Q29kZSA9PT0gMzIpIHtcbiAgICAgIC8vIFNwYWNlXG4gICAgICAvLyBUT0RPOiB3aGF0IHRvIGRvIHdpdGggdGhpcz8ga2VlcCBpdCwgb3IgcmVtb3ZlIGl0P1xuICAgICAgb3B0LnRvZ2dsZVBsYXkoZXYpO1xuICAgIH0gZWxzZSBpZiAoY2xpZW50ICYmICFldi5hbHRLZXkgJiYgZXYua2V5Q29kZSA9PT0gNzUgJiYgKGV2Lm1ldGFLZXkgfHwgZXYuY3RybEtleSkpIHtcbiAgICAgIC8vIENtZCArIEssIG9ubHkgd2hlbiBjYW52YXMtc2tldGNoLWNsaSBpcyB1c2VkXG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgb3B0LmNvbW1pdChldik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGF0dGFjaCA9ICgpID0+IHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZXIpO1xuICB9O1xuXG4gIGNvbnN0IGRldGFjaCA9ICgpID0+IHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZXIpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYXR0YWNoLFxuICAgIGRldGFjaFxuICB9O1xufVxuIiwiaW1wb3J0IFNrZXRjaE1hbmFnZXIgZnJvbSAnLi9jb3JlL1NrZXRjaE1hbmFnZXInO1xuaW1wb3J0IFBhcGVyU2l6ZXMgZnJvbSAnLi9wYXBlci1zaXplcyc7XG5pbXBvcnQgeyBnZXRDbGllbnRBUEksIGRlZmluZWQgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBDQUNIRSA9ICdob3QtaWQtY2FjaGUnO1xuY29uc3QgcnVudGltZUNvbGxpc2lvbnMgPSBbXTtcblxuZnVuY3Rpb24gaXNIb3RSZWxvYWQgKCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgcmV0dXJuIGNsaWVudCAmJiBjbGllbnQuaG90O1xufVxuXG5mdW5jdGlvbiBjYWNoZUdldCAoaWQpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gIGlmICghY2xpZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICBjbGllbnRbQ0FDSEVdID0gY2xpZW50W0NBQ0hFXSB8fCB7fTtcbiAgcmV0dXJuIGNsaWVudFtDQUNIRV1baWRdO1xufVxuXG5mdW5jdGlvbiBjYWNoZVB1dCAoaWQsIGRhdGEpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gIGlmICghY2xpZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICBjbGllbnRbQ0FDSEVdID0gY2xpZW50W0NBQ0hFXSB8fCB7fTtcbiAgY2xpZW50W0NBQ0hFXVtpZF0gPSBkYXRhO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lUHJvcCAob2xkTWFuYWdlciwgbmV3U2V0dGluZ3MpIHtcbiAgLy8gU3RhdGljIHNrZXRjaGVzIGlnbm9yZSB0aGUgdGltZSBwZXJzaXN0ZW5jeVxuICByZXR1cm4gbmV3U2V0dGluZ3MuYW5pbWF0ZSA/IHsgdGltZTogb2xkTWFuYWdlci5wcm9wcy50aW1lIH0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNhbnZhc1NrZXRjaCAoc2tldGNoLCBzZXR0aW5ncyA9IHt9KSB7XG4gIGlmIChzZXR0aW5ncy5wNSkge1xuICAgIGlmIChzZXR0aW5ncy5jYW52YXMgfHwgKHNldHRpbmdzLmNvbnRleHQgJiYgdHlwZW9mIHNldHRpbmdzLmNvbnRleHQgIT09ICdzdHJpbmcnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbiB7IHA1IH0gbW9kZSwgeW91IGNhbid0IHBhc3MgeW91ciBvd24gY2FudmFzIG9yIGNvbnRleHQsIHVubGVzcyB0aGUgY29udGV4dCBpcyBhIFwid2ViZ2xcIiBvciBcIjJkXCIgc3RyaW5nYCk7XG4gICAgfVxuXG4gICAgLy8gRG8gbm90IGNyZWF0ZSBhIGNhbnZhcyBvbiBzdGFydHVwLCBzaW5jZSBQNS5qcyBkb2VzIHRoYXQgZm9yIHVzXG4gICAgY29uc3QgY29udGV4dCA9IHR5cGVvZiBzZXR0aW5ncy5jb250ZXh0ID09PSAnc3RyaW5nJyA/IHNldHRpbmdzLmNvbnRleHQgOiBmYWxzZTtcbiAgICBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHNldHRpbmdzLCB7IGNhbnZhczogZmFsc2UsIGNvbnRleHQgfSk7XG4gIH1cblxuICBjb25zdCBpc0hvdCA9IGlzSG90UmVsb2FkKCk7XG4gIGxldCBob3RJRDtcbiAgaWYgKGlzSG90KSB7XG4gICAgLy8gVXNlIGEgbWFnaWMgbmFtZSBieSBkZWZhdWx0LCBmb3JjZSB1c2VyIHRvIGRlZmluZSBlYWNoIHNrZXRjaCBpZiB0aGV5XG4gICAgLy8gcmVxdWlyZSBtb3JlIHRoYW4gb25lIGluIGFuIGFwcGxpY2F0aW9uLiBPcGVuIHRvIG90aGVyIGlkZWFzIG9uIGhvdyB0byB0YWNrbGVcbiAgICAvLyB0aGlzIGFzIHdlbGwuLi5cbiAgICBob3RJRCA9IGRlZmluZWQoc2V0dGluZ3MuaWQsICckX19ERUZBVUxUX0NBTlZBU19TS0VUQ0hfSURfXyQnKTtcbiAgfVxuICBsZXQgaXNJbmplY3RpbmcgPSBpc0hvdCAmJiB0eXBlb2YgaG90SUQgPT09ICdzdHJpbmcnO1xuXG4gIGlmIChpc0luamVjdGluZyAmJiBydW50aW1lQ29sbGlzaW9ucy5pbmNsdWRlcyhob3RJRCkpIHtcbiAgICBjb25zb2xlLndhcm4oYFdhcm5pbmc6IFlvdSBoYXZlIG11bHRpcGxlIGNhbGxzIHRvIGNhbnZhc1NrZXRjaCgpIGluIC0taG90IG1vZGUuIFlvdSBtdXN0IHBhc3MgdW5pcXVlIHsgaWQgfSBzdHJpbmdzIGluIHNldHRpbmdzIHRvIGVuYWJsZSBob3QgcmVsb2FkIGFjcm9zcyBtdWx0aXBsZSBza2V0Y2hlcy4gYCwgaG90SUQpO1xuICAgIGlzSW5qZWN0aW5nID0gZmFsc2U7XG4gIH1cblxuICBsZXQgcHJlbG9hZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIGlmIChpc0luamVjdGluZykge1xuICAgIC8vIE1hcmsgdGhpcyBhcyBhbHJlYWR5IHNwb3R0ZWQgaW4gdGhpcyBydW50aW1lIGluc3RhbmNlXG4gICAgcnVudGltZUNvbGxpc2lvbnMucHVzaChob3RJRCk7XG5cbiAgICBjb25zdCBwcmV2aW91c0RhdGEgPSBjYWNoZUdldChob3RJRCk7XG4gICAgaWYgKHByZXZpb3VzRGF0YSkge1xuICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgLy8gR3JhYiBuZXcgcHJvcHMgZnJvbSBvbGQgc2tldGNoIGluc3RhbmNlXG4gICAgICAgIGNvbnN0IG5ld1Byb3BzID0gZ2V0VGltZVByb3AocHJldmlvdXNEYXRhLm1hbmFnZXIsIHNldHRpbmdzKTtcbiAgICAgICAgLy8gRGVzdHJveSB0aGUgb2xkIGluc3RhbmNlXG4gICAgICAgIHByZXZpb3VzRGF0YS5tYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICAgICAgLy8gUGFzcyBhbG9uZyBuZXcgcHJvcHNcbiAgICAgICAgcmV0dXJuIG5ld1Byb3BzO1xuICAgICAgfTtcblxuICAgICAgLy8gTW92ZSBhbG9uZyB0aGUgbmV4dCBkYXRhLi4uXG4gICAgICBwcmVsb2FkID0gcHJldmlvdXNEYXRhLmxvYWQudGhlbihuZXh0KS5jYXRjaChuZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJlbG9hZC50aGVuKG5ld1Byb3BzID0+IHtcbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IFNrZXRjaE1hbmFnZXIoKTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChza2V0Y2gpIHtcbiAgICAgIC8vIE1lcmdlIHdpdGggaW5jb21pbmcgZGF0YVxuICAgICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzZXR0aW5ncywgbmV3UHJvcHMpO1xuXG4gICAgICAvLyBBcHBseSBzZXR0aW5ncyBhbmQgY3JlYXRlIGEgY2FudmFzXG4gICAgICBtYW5hZ2VyLnNldHVwKHNldHRpbmdzKTtcblxuICAgICAgLy8gTW91bnQgdG8gRE9NXG4gICAgICBtYW5hZ2VyLm1vdW50KCk7XG5cbiAgICAgIC8vIGxvYWQgdGhlIHNrZXRjaCBmaXJzdFxuICAgICAgcmVzdWx0ID0gbWFuYWdlci5sb2FkQW5kUnVuKHNrZXRjaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IFByb21pc2UucmVzb2x2ZShtYW5hZ2VyKTtcbiAgICB9XG4gICAgaWYgKGlzSW5qZWN0aW5nKSB7XG4gICAgICBjYWNoZVB1dChob3RJRCwgeyBsb2FkOiByZXN1bHQsIG1hbmFnZXIgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xufVxuXG4vLyBUT0RPOiBGaWd1cmUgb3V0IGEgbmljZSB3YXkgdG8gZXhwb3J0IHRoaW5ncy5cbmNhbnZhc1NrZXRjaC5jYW52YXNTa2V0Y2ggPSBjYW52YXNTa2V0Y2g7XG5jYW52YXNTa2V0Y2guUGFwZXJTaXplcyA9IFBhcGVyU2l6ZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNhbnZhc1NrZXRjaDtcbiIsInZhciBjbG9uZSA9IChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gX2luc3RhbmNlb2Yob2JqLCB0eXBlKSB7XG4gIHJldHVybiB0eXBlICE9IG51bGwgJiYgb2JqIGluc3RhbmNlb2YgdHlwZTtcbn1cblxudmFyIG5hdGl2ZU1hcDtcbnRyeSB7XG4gIG5hdGl2ZU1hcCA9IE1hcDtcbn0gY2F0Y2goXykge1xuICAvLyBtYXliZSBhIHJlZmVyZW5jZSBlcnJvciBiZWNhdXNlIG5vIGBNYXBgLiBHaXZlIGl0IGEgZHVtbXkgdmFsdWUgdGhhdCBub1xuICAvLyB2YWx1ZSB3aWxsIGV2ZXIgYmUgYW4gaW5zdGFuY2VvZi5cbiAgbmF0aXZlTWFwID0gZnVuY3Rpb24oKSB7fTtcbn1cblxudmFyIG5hdGl2ZVNldDtcbnRyeSB7XG4gIG5hdGl2ZVNldCA9IFNldDtcbn0gY2F0Y2goXykge1xuICBuYXRpdmVTZXQgPSBmdW5jdGlvbigpIHt9O1xufVxuXG52YXIgbmF0aXZlUHJvbWlzZTtcbnRyeSB7XG4gIG5hdGl2ZVByb21pc2UgPSBQcm9taXNlO1xufSBjYXRjaChfKSB7XG4gIG5hdGl2ZVByb21pc2UgPSBmdW5jdGlvbigpIHt9O1xufVxuXG4vKipcbiAqIENsb25lcyAoY29waWVzKSBhbiBPYmplY3QgdXNpbmcgZGVlcCBjb3B5aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBkZWZhdWx0LCBidXQgaWYgeW91IGFyZSBjZXJ0YWluXG4gKiB0aGVyZSBhcmUgbm8gY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiB5b3VyIG9iamVjdCwgeW91IGNhbiBzYXZlIHNvbWUgQ1BVIHRpbWVcbiAqIGJ5IGNhbGxpbmcgY2xvbmUob2JqLCBmYWxzZSkuXG4gKlxuICogQ2F1dGlvbjogaWYgYGNpcmN1bGFyYCBpcyBmYWxzZSBhbmQgYHBhcmVudGAgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcyxcbiAqIHlvdXIgcHJvZ3JhbSBtYXkgZW50ZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgY3Jhc2guXG4gKlxuICogQHBhcmFtIGBwYXJlbnRgIC0gdGhlIG9iamVjdCB0byBiZSBjbG9uZWRcbiAqIEBwYXJhbSBgY2lyY3VsYXJgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG9iamVjdCB0byBiZSBjbG9uZWQgbWF5IGNvbnRhaW5cbiAqICAgIGNpcmN1bGFyIHJlZmVyZW5jZXMuIChvcHRpb25hbCAtIHRydWUgYnkgZGVmYXVsdClcbiAqIEBwYXJhbSBgZGVwdGhgIC0gc2V0IHRvIGEgbnVtYmVyIGlmIHRoZSBvYmplY3QgaXMgb25seSB0byBiZSBjbG9uZWQgdG9cbiAqICAgIGEgcGFydGljdWxhciBkZXB0aC4gKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gSW5maW5pdHkpXG4gKiBAcGFyYW0gYHByb3RvdHlwZWAgLSBzZXRzIHRoZSBwcm90b3R5cGUgdG8gYmUgdXNlZCB3aGVuIGNsb25pbmcgYW4gb2JqZWN0LlxuICogICAgKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gcGFyZW50IHByb3RvdHlwZSkuXG4gKiBAcGFyYW0gYGluY2x1ZGVOb25FbnVtZXJhYmxlYCAtIHNldCB0byB0cnVlIGlmIHRoZSBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gKiAgICBzaG91bGQgYmUgY2xvbmVkIGFzIHdlbGwuIE5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgb24gdGhlIHByb3RvdHlwZVxuICogICAgY2hhaW4gd2lsbCBiZSBpZ25vcmVkLiAob3B0aW9uYWwgLSBmYWxzZSBieSBkZWZhdWx0KVxuKi9cbmZ1bmN0aW9uIGNsb25lKHBhcmVudCwgY2lyY3VsYXIsIGRlcHRoLCBwcm90b3R5cGUsIGluY2x1ZGVOb25FbnVtZXJhYmxlKSB7XG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT09ICdvYmplY3QnKSB7XG4gICAgZGVwdGggPSBjaXJjdWxhci5kZXB0aDtcbiAgICBwcm90b3R5cGUgPSBjaXJjdWxhci5wcm90b3R5cGU7XG4gICAgaW5jbHVkZU5vbkVudW1lcmFibGUgPSBjaXJjdWxhci5pbmNsdWRlTm9uRW51bWVyYWJsZTtcbiAgICBjaXJjdWxhciA9IGNpcmN1bGFyLmNpcmN1bGFyO1xuICB9XG4gIC8vIG1haW50YWluIHR3byBhcnJheXMgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMsIHdoZXJlIGNvcnJlc3BvbmRpbmcgcGFyZW50c1xuICAvLyBhbmQgY2hpbGRyZW4gaGF2ZSB0aGUgc2FtZSBpbmRleFxuICB2YXIgYWxsUGFyZW50cyA9IFtdO1xuICB2YXIgYWxsQ2hpbGRyZW4gPSBbXTtcblxuICB2YXIgdXNlQnVmZmVyID0gdHlwZW9mIEJ1ZmZlciAhPSAndW5kZWZpbmVkJztcblxuICBpZiAodHlwZW9mIGNpcmN1bGFyID09ICd1bmRlZmluZWQnKVxuICAgIGNpcmN1bGFyID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGRlcHRoID09ICd1bmRlZmluZWQnKVxuICAgIGRlcHRoID0gSW5maW5pdHk7XG5cbiAgLy8gcmVjdXJzZSB0aGlzIGZ1bmN0aW9uIHNvIHdlIGRvbid0IHJlc2V0IGFsbFBhcmVudHMgYW5kIGFsbENoaWxkcmVuXG4gIGZ1bmN0aW9uIF9jbG9uZShwYXJlbnQsIGRlcHRoKSB7XG4gICAgLy8gY2xvbmluZyBudWxsIGFsd2F5cyByZXR1cm5zIG51bGxcbiAgICBpZiAocGFyZW50ID09PSBudWxsKVxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoZGVwdGggPT09IDApXG4gICAgICByZXR1cm4gcGFyZW50O1xuXG4gICAgdmFyIGNoaWxkO1xuICAgIHZhciBwcm90bztcbiAgICBpZiAodHlwZW9mIHBhcmVudCAhPSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG5cbiAgICBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVNYXApKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVNYXAoKTtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlU2V0KSkge1xuICAgICAgY2hpbGQgPSBuZXcgbmF0aXZlU2V0KCk7XG4gICAgfSBlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZVByb21pc2UpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcGFyZW50LnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXNvbHZlKF9jbG9uZSh2YWx1ZSwgZGVwdGggLSAxKSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgIHJlamVjdChfY2xvbmUoZXJyLCBkZXB0aCAtIDEpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGNsb25lLl9faXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IFtdO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc1JlZ0V4cChwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBSZWdFeHAocGFyZW50LnNvdXJjZSwgX19nZXRSZWdFeHBGbGFncyhwYXJlbnQpKTtcbiAgICAgIGlmIChwYXJlbnQubGFzdEluZGV4KSBjaGlsZC5sYXN0SW5kZXggPSBwYXJlbnQubGFzdEluZGV4O1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0RhdGUocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgRGF0ZShwYXJlbnQuZ2V0VGltZSgpKTtcbiAgICB9IGVsc2UgaWYgKHVzZUJ1ZmZlciAmJiBCdWZmZXIuaXNCdWZmZXIocGFyZW50KSkge1xuICAgICAgaWYgKEJ1ZmZlci5hbGxvY1Vuc2FmZSkge1xuICAgICAgICAvLyBOb2RlLmpzID49IDQuNS4wXG4gICAgICAgIGNoaWxkID0gQnVmZmVyLmFsbG9jVW5zYWZlKHBhcmVudC5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT2xkZXIgTm9kZS5qcyB2ZXJzaW9uc1xuICAgICAgICBjaGlsZCA9IG5ldyBCdWZmZXIocGFyZW50Lmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBwYXJlbnQuY29weShjaGlsZCk7XG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfSBlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIEVycm9yKSkge1xuICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcmVudCk7XG4gICAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG4gICAgICAgIHByb3RvID0gcHJvdG90eXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaXJjdWxhcikge1xuICAgICAgdmFyIGluZGV4ID0gYWxsUGFyZW50cy5pbmRleE9mKHBhcmVudCk7XG5cbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xuICAgICAgICByZXR1cm4gYWxsQ2hpbGRyZW5baW5kZXhdO1xuICAgICAgfVxuICAgICAgYWxsUGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICBhbGxDaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICB9XG5cbiAgICBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVNYXApKSB7XG4gICAgICBwYXJlbnQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgIHZhciBrZXlDaGlsZCA9IF9jbG9uZShrZXksIGRlcHRoIC0gMSk7XG4gICAgICAgIHZhciB2YWx1ZUNoaWxkID0gX2Nsb25lKHZhbHVlLCBkZXB0aCAtIDEpO1xuICAgICAgICBjaGlsZC5zZXQoa2V5Q2hpbGQsIHZhbHVlQ2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZVNldCkpIHtcbiAgICAgIHBhcmVudC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHZhciBlbnRyeUNoaWxkID0gX2Nsb25lKHZhbHVlLCBkZXB0aCAtIDEpO1xuICAgICAgICBjaGlsZC5hZGQoZW50cnlDaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpIGluIHBhcmVudCkge1xuICAgICAgdmFyIGF0dHJzO1xuICAgICAgaWYgKHByb3RvKSB7XG4gICAgICAgIGF0dHJzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgaSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRycyAmJiBhdHRycy5zZXQgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNoaWxkW2ldID0gX2Nsb25lKHBhcmVudFtpXSwgZGVwdGggLSAxKTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHBhcmVudCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBjbG9uaW5nIGEgc3ltYm9sIGJlY2F1c2UgaXQgaXMgYSBwcmltaXRpdmUsXG4gICAgICAgIC8vIGxpa2UgYSBudW1iZXIgb3Igc3RyaW5nLlxuICAgICAgICB2YXIgc3ltYm9sID0gc3ltYm9sc1tpXTtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgc3ltYm9sKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuZW51bWVyYWJsZSAmJiAhaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZFtzeW1ib2xdID0gX2Nsb25lKHBhcmVudFtzeW1ib2xdLCBkZXB0aCAtIDEpO1xuICAgICAgICBpZiAoIWRlc2NyaXB0b3IuZW51bWVyYWJsZSkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGlsZCwgc3ltYm9sLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVOb25FbnVtZXJhYmxlKSB7XG4gICAgICB2YXIgYWxsUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHBhcmVudCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbFByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IGFsbFByb3BlcnR5TmFtZXNbaV07XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIHByb3BlcnR5TmFtZSk7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkW3Byb3BlcnR5TmFtZV0gPSBfY2xvbmUocGFyZW50W3Byb3BlcnR5TmFtZV0sIGRlcHRoIC0gMSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGlsZCwgcHJvcGVydHlOYW1lLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcmV0dXJuIF9jbG9uZShwYXJlbnQsIGRlcHRoKTtcbn1cblxuLyoqXG4gKiBTaW1wbGUgZmxhdCBjbG9uZSB1c2luZyBwcm90b3R5cGUsIGFjY2VwdHMgb25seSBvYmplY3RzLCB1c2VmdWxsIGZvciBwcm9wZXJ0eVxuICogb3ZlcnJpZGUgb24gRkxBVCBjb25maWd1cmF0aW9uIG9iamVjdCAobm8gbmVzdGVkIHByb3BzKS5cbiAqXG4gKiBVU0UgV0lUSCBDQVVUSU9OISBUaGlzIG1heSBub3QgYmVoYXZlIGFzIHlvdSB3aXNoIGlmIHlvdSBkbyBub3Qga25vdyBob3cgdGhpc1xuICogd29ya3MuXG4gKi9cbmNsb25lLmNsb25lUHJvdG90eXBlID0gZnVuY3Rpb24gY2xvbmVQcm90b3R5cGUocGFyZW50KSB7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgdmFyIGMgPSBmdW5jdGlvbiAoKSB7fTtcbiAgYy5wcm90b3R5cGUgPSBwYXJlbnQ7XG4gIHJldHVybiBuZXcgYygpO1xufTtcblxuLy8gcHJpdmF0ZSB1dGlsaXR5IGZ1bmN0aW9uc1xuXG5mdW5jdGlvbiBfX29ialRvU3RyKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cbmNsb25lLl9fb2JqVG9TdHIgPSBfX29ialRvU3RyO1xuXG5mdW5jdGlvbiBfX2lzRGF0ZShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuY2xvbmUuX19pc0RhdGUgPSBfX2lzRGF0ZTtcblxuZnVuY3Rpb24gX19pc0FycmF5KG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuY2xvbmUuX19pc0FycmF5ID0gX19pc0FycmF5O1xuXG5mdW5jdGlvbiBfX2lzUmVnRXhwKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmNsb25lLl9faXNSZWdFeHAgPSBfX2lzUmVnRXhwO1xuXG5mdW5jdGlvbiBfX2dldFJlZ0V4cEZsYWdzKHJlKSB7XG4gIHZhciBmbGFncyA9ICcnO1xuICBpZiAocmUuZ2xvYmFsKSBmbGFncyArPSAnZyc7XG4gIGlmIChyZS5pZ25vcmVDYXNlKSBmbGFncyArPSAnaSc7XG4gIGlmIChyZS5tdWx0aWxpbmUpIGZsYWdzICs9ICdtJztcbiAgcmV0dXJuIGZsYWdzO1xufVxuY2xvbmUuX19nZXRSZWdFeHBGbGFncyA9IF9fZ2V0UmVnRXhwRmxhZ3M7XG5cbnJldHVybiBjbG9uZTtcbn0pKCk7XG5cbmlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGNsb25lO1xufVxuIiwiLyogTUlUIGxpY2Vuc2UgKi9cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJnYjJoc2w6IHJnYjJoc2wsXG4gIHJnYjJoc3Y6IHJnYjJoc3YsXG4gIHJnYjJod2I6IHJnYjJod2IsXG4gIHJnYjJjbXlrOiByZ2IyY215ayxcbiAgcmdiMmtleXdvcmQ6IHJnYjJrZXl3b3JkLFxuICByZ2IyeHl6OiByZ2IyeHl6LFxuICByZ2IybGFiOiByZ2IybGFiLFxuICByZ2IybGNoOiByZ2IybGNoLFxuXG4gIGhzbDJyZ2I6IGhzbDJyZ2IsXG4gIGhzbDJoc3Y6IGhzbDJoc3YsXG4gIGhzbDJod2I6IGhzbDJod2IsXG4gIGhzbDJjbXlrOiBoc2wyY215ayxcbiAgaHNsMmtleXdvcmQ6IGhzbDJrZXl3b3JkLFxuXG4gIGhzdjJyZ2I6IGhzdjJyZ2IsXG4gIGhzdjJoc2w6IGhzdjJoc2wsXG4gIGhzdjJod2I6IGhzdjJod2IsXG4gIGhzdjJjbXlrOiBoc3YyY215ayxcbiAgaHN2MmtleXdvcmQ6IGhzdjJrZXl3b3JkLFxuXG4gIGh3YjJyZ2I6IGh3YjJyZ2IsXG4gIGh3YjJoc2w6IGh3YjJoc2wsXG4gIGh3YjJoc3Y6IGh3YjJoc3YsXG4gIGh3YjJjbXlrOiBod2IyY215ayxcbiAgaHdiMmtleXdvcmQ6IGh3YjJrZXl3b3JkLFxuXG4gIGNteWsycmdiOiBjbXlrMnJnYixcbiAgY215azJoc2w6IGNteWsyaHNsLFxuICBjbXlrMmhzdjogY215azJoc3YsXG4gIGNteWsyaHdiOiBjbXlrMmh3YixcbiAgY215azJrZXl3b3JkOiBjbXlrMmtleXdvcmQsXG5cbiAga2V5d29yZDJyZ2I6IGtleXdvcmQycmdiLFxuICBrZXl3b3JkMmhzbDoga2V5d29yZDJoc2wsXG4gIGtleXdvcmQyaHN2OiBrZXl3b3JkMmhzdixcbiAga2V5d29yZDJod2I6IGtleXdvcmQyaHdiLFxuICBrZXl3b3JkMmNteWs6IGtleXdvcmQyY215ayxcbiAga2V5d29yZDJsYWI6IGtleXdvcmQybGFiLFxuICBrZXl3b3JkMnh5ejoga2V5d29yZDJ4eXosXG5cbiAgeHl6MnJnYjogeHl6MnJnYixcbiAgeHl6MmxhYjogeHl6MmxhYixcbiAgeHl6MmxjaDogeHl6MmxjaCxcblxuICBsYWIyeHl6OiBsYWIyeHl6LFxuICBsYWIycmdiOiBsYWIycmdiLFxuICBsYWIybGNoOiBsYWIybGNoLFxuXG4gIGxjaDJsYWI6IGxjaDJsYWIsXG4gIGxjaDJ4eXo6IGxjaDJ4eXosXG4gIGxjaDJyZ2I6IGxjaDJyZ2Jcbn1cblxuXG5mdW5jdGlvbiByZ2IyaHNsKHJnYikge1xuICB2YXIgciA9IHJnYlswXS8yNTUsXG4gICAgICBnID0gcmdiWzFdLzI1NSxcbiAgICAgIGIgPSByZ2JbMl0vMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGRlbHRhID0gbWF4IC0gbWluLFxuICAgICAgaCwgcywgbDtcblxuICBpZiAobWF4ID09IG1pbilcbiAgICBoID0gMDtcbiAgZWxzZSBpZiAociA9PSBtYXgpXG4gICAgaCA9IChnIC0gYikgLyBkZWx0YTtcbiAgZWxzZSBpZiAoZyA9PSBtYXgpXG4gICAgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gIGVsc2UgaWYgKGIgPT0gbWF4KVxuICAgIGggPSA0ICsgKHIgLSBnKS8gZGVsdGE7XG5cbiAgaCA9IE1hdGgubWluKGggKiA2MCwgMzYwKTtcblxuICBpZiAoaCA8IDApXG4gICAgaCArPSAzNjA7XG5cbiAgbCA9IChtaW4gKyBtYXgpIC8gMjtcblxuICBpZiAobWF4ID09IG1pbilcbiAgICBzID0gMDtcbiAgZWxzZSBpZiAobCA8PSAwLjUpXG4gICAgcyA9IGRlbHRhIC8gKG1heCArIG1pbik7XG4gIGVsc2VcbiAgICBzID0gZGVsdGEgLyAoMiAtIG1heCAtIG1pbik7XG5cbiAgcmV0dXJuIFtoLCBzICogMTAwLCBsICogMTAwXTtcbn1cblxuZnVuY3Rpb24gcmdiMmhzdihyZ2IpIHtcbiAgdmFyIHIgPSByZ2JbMF0sXG4gICAgICBnID0gcmdiWzFdLFxuICAgICAgYiA9IHJnYlsyXSxcbiAgICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuICAgICAgbWF4ID0gTWF0aC5tYXgociwgZywgYiksXG4gICAgICBkZWx0YSA9IG1heCAtIG1pbixcbiAgICAgIGgsIHMsIHY7XG5cbiAgaWYgKG1heCA9PSAwKVxuICAgIHMgPSAwO1xuICBlbHNlXG4gICAgcyA9IChkZWx0YS9tYXggKiAxMDAwKS8xMDtcblxuICBpZiAobWF4ID09IG1pbilcbiAgICBoID0gMDtcbiAgZWxzZSBpZiAociA9PSBtYXgpXG4gICAgaCA9IChnIC0gYikgLyBkZWx0YTtcbiAgZWxzZSBpZiAoZyA9PSBtYXgpXG4gICAgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gIGVsc2UgaWYgKGIgPT0gbWF4KVxuICAgIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuXG4gIGggPSBNYXRoLm1pbihoICogNjAsIDM2MCk7XG5cbiAgaWYgKGggPCAwKVxuICAgIGggKz0gMzYwO1xuXG4gIHYgPSAoKG1heCAvIDI1NSkgKiAxMDAwKSAvIDEwO1xuXG4gIHJldHVybiBbaCwgcywgdl07XG59XG5cbmZ1bmN0aW9uIHJnYjJod2IocmdiKSB7XG4gIHZhciByID0gcmdiWzBdLFxuICAgICAgZyA9IHJnYlsxXSxcbiAgICAgIGIgPSByZ2JbMl0sXG4gICAgICBoID0gcmdiMmhzbChyZ2IpWzBdLFxuICAgICAgdyA9IDEvMjU1ICogTWF0aC5taW4ociwgTWF0aC5taW4oZywgYikpLFxuICAgICAgYiA9IDEgLSAxLzI1NSAqIE1hdGgubWF4KHIsIE1hdGgubWF4KGcsIGIpKTtcblxuICByZXR1cm4gW2gsIHcgKiAxMDAsIGIgKiAxMDBdO1xufVxuXG5mdW5jdGlvbiByZ2IyY215ayhyZ2IpIHtcbiAgdmFyIHIgPSByZ2JbMF0gLyAyNTUsXG4gICAgICBnID0gcmdiWzFdIC8gMjU1LFxuICAgICAgYiA9IHJnYlsyXSAvIDI1NSxcbiAgICAgIGMsIG0sIHksIGs7XG5cbiAgayA9IE1hdGgubWluKDEgLSByLCAxIC0gZywgMSAtIGIpO1xuICBjID0gKDEgLSByIC0gaykgLyAoMSAtIGspIHx8IDA7XG4gIG0gPSAoMSAtIGcgLSBrKSAvICgxIC0gaykgfHwgMDtcbiAgeSA9ICgxIC0gYiAtIGspIC8gKDEgLSBrKSB8fCAwO1xuICByZXR1cm4gW2MgKiAxMDAsIG0gKiAxMDAsIHkgKiAxMDAsIGsgKiAxMDBdO1xufVxuXG5mdW5jdGlvbiByZ2Iya2V5d29yZChyZ2IpIHtcbiAgcmV0dXJuIHJldmVyc2VLZXl3b3Jkc1tKU09OLnN0cmluZ2lmeShyZ2IpXTtcbn1cblxuZnVuY3Rpb24gcmdiMnh5eihyZ2IpIHtcbiAgdmFyIHIgPSByZ2JbMF0gLyAyNTUsXG4gICAgICBnID0gcmdiWzFdIC8gMjU1LFxuICAgICAgYiA9IHJnYlsyXSAvIDI1NTtcblxuICAvLyBhc3N1bWUgc1JHQlxuICByID0gciA+IDAuMDQwNDUgPyBNYXRoLnBvdygoKHIgKyAwLjA1NSkgLyAxLjA1NSksIDIuNCkgOiAociAvIDEyLjkyKTtcbiAgZyA9IGcgPiAwLjA0MDQ1ID8gTWF0aC5wb3coKChnICsgMC4wNTUpIC8gMS4wNTUpLCAyLjQpIDogKGcgLyAxMi45Mik7XG4gIGIgPSBiID4gMC4wNDA0NSA/IE1hdGgucG93KCgoYiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KSA6IChiIC8gMTIuOTIpO1xuXG4gIHZhciB4ID0gKHIgKiAwLjQxMjQpICsgKGcgKiAwLjM1NzYpICsgKGIgKiAwLjE4MDUpO1xuICB2YXIgeSA9IChyICogMC4yMTI2KSArIChnICogMC43MTUyKSArIChiICogMC4wNzIyKTtcbiAgdmFyIHogPSAociAqIDAuMDE5MykgKyAoZyAqIDAuMTE5MikgKyAoYiAqIDAuOTUwNSk7XG5cbiAgcmV0dXJuIFt4ICogMTAwLCB5ICoxMDAsIHogKiAxMDBdO1xufVxuXG5mdW5jdGlvbiByZ2IybGFiKHJnYikge1xuICB2YXIgeHl6ID0gcmdiMnh5eihyZ2IpLFxuICAgICAgICB4ID0geHl6WzBdLFxuICAgICAgICB5ID0geHl6WzFdLFxuICAgICAgICB6ID0geHl6WzJdLFxuICAgICAgICBsLCBhLCBiO1xuXG4gIHggLz0gOTUuMDQ3O1xuICB5IC89IDEwMDtcbiAgeiAvPSAxMDguODgzO1xuXG4gIHggPSB4ID4gMC4wMDg4NTYgPyBNYXRoLnBvdyh4LCAxLzMpIDogKDcuNzg3ICogeCkgKyAoMTYgLyAxMTYpO1xuICB5ID0geSA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeSwgMS8zKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcbiAgeiA9IHogPiAwLjAwODg1NiA/IE1hdGgucG93KHosIDEvMykgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cbiAgbCA9ICgxMTYgKiB5KSAtIDE2O1xuICBhID0gNTAwICogKHggLSB5KTtcbiAgYiA9IDIwMCAqICh5IC0geik7XG5cbiAgcmV0dXJuIFtsLCBhLCBiXTtcbn1cblxuZnVuY3Rpb24gcmdiMmxjaChhcmdzKSB7XG4gIHJldHVybiBsYWIybGNoKHJnYjJsYWIoYXJncykpO1xufVxuXG5mdW5jdGlvbiBoc2wycmdiKGhzbCkge1xuICB2YXIgaCA9IGhzbFswXSAvIDM2MCxcbiAgICAgIHMgPSBoc2xbMV0gLyAxMDAsXG4gICAgICBsID0gaHNsWzJdIC8gMTAwLFxuICAgICAgdDEsIHQyLCB0MywgcmdiLCB2YWw7XG5cbiAgaWYgKHMgPT0gMCkge1xuICAgIHZhbCA9IGwgKiAyNTU7XG4gICAgcmV0dXJuIFt2YWwsIHZhbCwgdmFsXTtcbiAgfVxuXG4gIGlmIChsIDwgMC41KVxuICAgIHQyID0gbCAqICgxICsgcyk7XG4gIGVsc2VcbiAgICB0MiA9IGwgKyBzIC0gbCAqIHM7XG4gIHQxID0gMiAqIGwgLSB0MjtcblxuICByZ2IgPSBbMCwgMCwgMF07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgdDMgPSBoICsgMSAvIDMgKiAtIChpIC0gMSk7XG4gICAgdDMgPCAwICYmIHQzKys7XG4gICAgdDMgPiAxICYmIHQzLS07XG5cbiAgICBpZiAoNiAqIHQzIDwgMSlcbiAgICAgIHZhbCA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzO1xuICAgIGVsc2UgaWYgKDIgKiB0MyA8IDEpXG4gICAgICB2YWwgPSB0MjtcbiAgICBlbHNlIGlmICgzICogdDMgPCAyKVxuICAgICAgdmFsID0gdDEgKyAodDIgLSB0MSkgKiAoMiAvIDMgLSB0MykgKiA2O1xuICAgIGVsc2VcbiAgICAgIHZhbCA9IHQxO1xuXG4gICAgcmdiW2ldID0gdmFsICogMjU1O1xuICB9XG5cbiAgcmV0dXJuIHJnYjtcbn1cblxuZnVuY3Rpb24gaHNsMmhzdihoc2wpIHtcbiAgdmFyIGggPSBoc2xbMF0sXG4gICAgICBzID0gaHNsWzFdIC8gMTAwLFxuICAgICAgbCA9IGhzbFsyXSAvIDEwMCxcbiAgICAgIHN2LCB2O1xuXG4gIGlmKGwgPT09IDApIHtcbiAgICAgIC8vIG5vIG5lZWQgdG8gZG8gY2FsYyBvbiBibGFja1xuICAgICAgLy8gYWxzbyBhdm9pZHMgZGl2aWRlIGJ5IDAgZXJyb3JcbiAgICAgIHJldHVybiBbMCwgMCwgMF07XG4gIH1cblxuICBsICo9IDI7XG4gIHMgKj0gKGwgPD0gMSkgPyBsIDogMiAtIGw7XG4gIHYgPSAobCArIHMpIC8gMjtcbiAgc3YgPSAoMiAqIHMpIC8gKGwgKyBzKTtcbiAgcmV0dXJuIFtoLCBzdiAqIDEwMCwgdiAqIDEwMF07XG59XG5cbmZ1bmN0aW9uIGhzbDJod2IoYXJncykge1xuICByZXR1cm4gcmdiMmh3Yihoc2wycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gaHNsMmNteWsoYXJncykge1xuICByZXR1cm4gcmdiMmNteWsoaHNsMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGhzbDJrZXl3b3JkKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJrZXl3b3JkKGhzbDJyZ2IoYXJncykpO1xufVxuXG5cbmZ1bmN0aW9uIGhzdjJyZ2IoaHN2KSB7XG4gIHZhciBoID0gaHN2WzBdIC8gNjAsXG4gICAgICBzID0gaHN2WzFdIC8gMTAwLFxuICAgICAgdiA9IGhzdlsyXSAvIDEwMCxcbiAgICAgIGhpID0gTWF0aC5mbG9vcihoKSAlIDY7XG5cbiAgdmFyIGYgPSBoIC0gTWF0aC5mbG9vcihoKSxcbiAgICAgIHAgPSAyNTUgKiB2ICogKDEgLSBzKSxcbiAgICAgIHEgPSAyNTUgKiB2ICogKDEgLSAocyAqIGYpKSxcbiAgICAgIHQgPSAyNTUgKiB2ICogKDEgLSAocyAqICgxIC0gZikpKSxcbiAgICAgIHYgPSAyNTUgKiB2O1xuXG4gIHN3aXRjaChoaSkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBbdiwgdCwgcF07XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIFtxLCB2LCBwXTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gW3AsIHYsIHRdO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBbcCwgcSwgdl07XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIFt0LCBwLCB2XTtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gW3YsIHAsIHFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhzdjJoc2woaHN2KSB7XG4gIHZhciBoID0gaHN2WzBdLFxuICAgICAgcyA9IGhzdlsxXSAvIDEwMCxcbiAgICAgIHYgPSBoc3ZbMl0gLyAxMDAsXG4gICAgICBzbCwgbDtcblxuICBsID0gKDIgLSBzKSAqIHY7XG4gIHNsID0gcyAqIHY7XG4gIHNsIC89IChsIDw9IDEpID8gbCA6IDIgLSBsO1xuICBzbCA9IHNsIHx8IDA7XG4gIGwgLz0gMjtcbiAgcmV0dXJuIFtoLCBzbCAqIDEwMCwgbCAqIDEwMF07XG59XG5cbmZ1bmN0aW9uIGhzdjJod2IoYXJncykge1xuICByZXR1cm4gcmdiMmh3Yihoc3YycmdiKGFyZ3MpKVxufVxuXG5mdW5jdGlvbiBoc3YyY215ayhhcmdzKSB7XG4gIHJldHVybiByZ2IyY215ayhoc3YycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gaHN2MmtleXdvcmQoYXJncykge1xuICByZXR1cm4gcmdiMmtleXdvcmQoaHN2MnJnYihhcmdzKSk7XG59XG5cbi8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1jb2xvci8jaHdiLXRvLXJnYlxuZnVuY3Rpb24gaHdiMnJnYihod2IpIHtcbiAgdmFyIGggPSBod2JbMF0gLyAzNjAsXG4gICAgICB3aCA9IGh3YlsxXSAvIDEwMCxcbiAgICAgIGJsID0gaHdiWzJdIC8gMTAwLFxuICAgICAgcmF0aW8gPSB3aCArIGJsLFxuICAgICAgaSwgdiwgZiwgbjtcblxuICAvLyB3aCArIGJsIGNhbnQgYmUgPiAxXG4gIGlmIChyYXRpbyA+IDEpIHtcbiAgICB3aCAvPSByYXRpbztcbiAgICBibCAvPSByYXRpbztcbiAgfVxuXG4gIGkgPSBNYXRoLmZsb29yKDYgKiBoKTtcbiAgdiA9IDEgLSBibDtcbiAgZiA9IDYgKiBoIC0gaTtcbiAgaWYgKChpICYgMHgwMSkgIT0gMCkge1xuICAgIGYgPSAxIC0gZjtcbiAgfVxuICBuID0gd2ggKyBmICogKHYgLSB3aCk7ICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvblxuXG4gIHN3aXRjaCAoaSkge1xuICAgIGRlZmF1bHQ6XG4gICAgY2FzZSA2OlxuICAgIGNhc2UgMDogciA9IHY7IGcgPSBuOyBiID0gd2g7IGJyZWFrO1xuICAgIGNhc2UgMTogciA9IG47IGcgPSB2OyBiID0gd2g7IGJyZWFrO1xuICAgIGNhc2UgMjogciA9IHdoOyBnID0gdjsgYiA9IG47IGJyZWFrO1xuICAgIGNhc2UgMzogciA9IHdoOyBnID0gbjsgYiA9IHY7IGJyZWFrO1xuICAgIGNhc2UgNDogciA9IG47IGcgPSB3aDsgYiA9IHY7IGJyZWFrO1xuICAgIGNhc2UgNTogciA9IHY7IGcgPSB3aDsgYiA9IG47IGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn1cblxuZnVuY3Rpb24gaHdiMmhzbChhcmdzKSB7XG4gIHJldHVybiByZ2IyaHNsKGh3YjJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBod2IyaHN2KGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJoc3YoaHdiMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGh3YjJjbXlrKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJjbXlrKGh3YjJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBod2Iya2V5d29yZChhcmdzKSB7XG4gIHJldHVybiByZ2Iya2V5d29yZChod2IycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gY215azJyZ2IoY215aykge1xuICB2YXIgYyA9IGNteWtbMF0gLyAxMDAsXG4gICAgICBtID0gY215a1sxXSAvIDEwMCxcbiAgICAgIHkgPSBjbXlrWzJdIC8gMTAwLFxuICAgICAgayA9IGNteWtbM10gLyAxMDAsXG4gICAgICByLCBnLCBiO1xuXG4gIHIgPSAxIC0gTWF0aC5taW4oMSwgYyAqICgxIC0gaykgKyBrKTtcbiAgZyA9IDEgLSBNYXRoLm1pbigxLCBtICogKDEgLSBrKSArIGspO1xuICBiID0gMSAtIE1hdGgubWluKDEsIHkgKiAoMSAtIGspICsgayk7XG4gIHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59XG5cbmZ1bmN0aW9uIGNteWsyaHNsKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJoc2woY215azJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBjbXlrMmhzdihhcmdzKSB7XG4gIHJldHVybiByZ2IyaHN2KGNteWsycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gY215azJod2IoYXJncykge1xuICByZXR1cm4gcmdiMmh3YihjbXlrMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGNteWsya2V5d29yZChhcmdzKSB7XG4gIHJldHVybiByZ2Iya2V5d29yZChjbXlrMnJnYihhcmdzKSk7XG59XG5cblxuZnVuY3Rpb24geHl6MnJnYih4eXopIHtcbiAgdmFyIHggPSB4eXpbMF0gLyAxMDAsXG4gICAgICB5ID0geHl6WzFdIC8gMTAwLFxuICAgICAgeiA9IHh5elsyXSAvIDEwMCxcbiAgICAgIHIsIGcsIGI7XG5cbiAgciA9ICh4ICogMy4yNDA2KSArICh5ICogLTEuNTM3MikgKyAoeiAqIC0wLjQ5ODYpO1xuICBnID0gKHggKiAtMC45Njg5KSArICh5ICogMS44NzU4KSArICh6ICogMC4wNDE1KTtcbiAgYiA9ICh4ICogMC4wNTU3KSArICh5ICogLTAuMjA0MCkgKyAoeiAqIDEuMDU3MCk7XG5cbiAgLy8gYXNzdW1lIHNSR0JcbiAgciA9IHIgPiAwLjAwMzEzMDggPyAoKDEuMDU1ICogTWF0aC5wb3cociwgMS4wIC8gMi40KSkgLSAwLjA1NSlcbiAgICA6IHIgPSAociAqIDEyLjkyKTtcblxuICBnID0gZyA+IDAuMDAzMTMwOCA/ICgoMS4wNTUgKiBNYXRoLnBvdyhnLCAxLjAgLyAyLjQpKSAtIDAuMDU1KVxuICAgIDogZyA9IChnICogMTIuOTIpO1xuXG4gIGIgPSBiID4gMC4wMDMxMzA4ID8gKCgxLjA1NSAqIE1hdGgucG93KGIsIDEuMCAvIDIuNCkpIC0gMC4wNTUpXG4gICAgOiBiID0gKGIgKiAxMi45Mik7XG5cbiAgciA9IE1hdGgubWluKE1hdGgubWF4KDAsIHIpLCAxKTtcbiAgZyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGcpLCAxKTtcbiAgYiA9IE1hdGgubWluKE1hdGgubWF4KDAsIGIpLCAxKTtcblxuICByZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufVxuXG5mdW5jdGlvbiB4eXoybGFiKHh5eikge1xuICB2YXIgeCA9IHh5elswXSxcbiAgICAgIHkgPSB4eXpbMV0sXG4gICAgICB6ID0geHl6WzJdLFxuICAgICAgbCwgYSwgYjtcblxuICB4IC89IDk1LjA0NztcbiAgeSAvPSAxMDA7XG4gIHogLz0gMTA4Ljg4MztcblxuICB4ID0geCA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeCwgMS8zKSA6ICg3Ljc4NyAqIHgpICsgKDE2IC8gMTE2KTtcbiAgeSA9IHkgPiAwLjAwODg1NiA/IE1hdGgucG93KHksIDEvMykgOiAoNy43ODcgKiB5KSArICgxNiAvIDExNik7XG4gIHogPSB6ID4gMC4wMDg4NTYgPyBNYXRoLnBvdyh6LCAxLzMpIDogKDcuNzg3ICogeikgKyAoMTYgLyAxMTYpO1xuXG4gIGwgPSAoMTE2ICogeSkgLSAxNjtcbiAgYSA9IDUwMCAqICh4IC0geSk7XG4gIGIgPSAyMDAgKiAoeSAtIHopO1xuXG4gIHJldHVybiBbbCwgYSwgYl07XG59XG5cbmZ1bmN0aW9uIHh5ejJsY2goYXJncykge1xuICByZXR1cm4gbGFiMmxjaCh4eXoybGFiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gbGFiMnh5eihsYWIpIHtcbiAgdmFyIGwgPSBsYWJbMF0sXG4gICAgICBhID0gbGFiWzFdLFxuICAgICAgYiA9IGxhYlsyXSxcbiAgICAgIHgsIHksIHosIHkyO1xuXG4gIGlmIChsIDw9IDgpIHtcbiAgICB5ID0gKGwgKiAxMDApIC8gOTAzLjM7XG4gICAgeTIgPSAoNy43ODcgKiAoeSAvIDEwMCkpICsgKDE2IC8gMTE2KTtcbiAgfSBlbHNlIHtcbiAgICB5ID0gMTAwICogTWF0aC5wb3coKGwgKyAxNikgLyAxMTYsIDMpO1xuICAgIHkyID0gTWF0aC5wb3coeSAvIDEwMCwgMS8zKTtcbiAgfVxuXG4gIHggPSB4IC8gOTUuMDQ3IDw9IDAuMDA4ODU2ID8geCA9ICg5NS4wNDcgKiAoKGEgLyA1MDApICsgeTIgLSAoMTYgLyAxMTYpKSkgLyA3Ljc4NyA6IDk1LjA0NyAqIE1hdGgucG93KChhIC8gNTAwKSArIHkyLCAzKTtcblxuICB6ID0geiAvIDEwOC44ODMgPD0gMC4wMDg4NTkgPyB6ID0gKDEwOC44ODMgKiAoeTIgLSAoYiAvIDIwMCkgLSAoMTYgLyAxMTYpKSkgLyA3Ljc4NyA6IDEwOC44ODMgKiBNYXRoLnBvdyh5MiAtIChiIC8gMjAwKSwgMyk7XG5cbiAgcmV0dXJuIFt4LCB5LCB6XTtcbn1cblxuZnVuY3Rpb24gbGFiMmxjaChsYWIpIHtcbiAgdmFyIGwgPSBsYWJbMF0sXG4gICAgICBhID0gbGFiWzFdLFxuICAgICAgYiA9IGxhYlsyXSxcbiAgICAgIGhyLCBoLCBjO1xuXG4gIGhyID0gTWF0aC5hdGFuMihiLCBhKTtcbiAgaCA9IGhyICogMzYwIC8gMiAvIE1hdGguUEk7XG4gIGlmIChoIDwgMCkge1xuICAgIGggKz0gMzYwO1xuICB9XG4gIGMgPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG4gIHJldHVybiBbbCwgYywgaF07XG59XG5cbmZ1bmN0aW9uIGxhYjJyZ2IoYXJncykge1xuICByZXR1cm4geHl6MnJnYihsYWIyeHl6KGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gbGNoMmxhYihsY2gpIHtcbiAgdmFyIGwgPSBsY2hbMF0sXG4gICAgICBjID0gbGNoWzFdLFxuICAgICAgaCA9IGxjaFsyXSxcbiAgICAgIGEsIGIsIGhyO1xuXG4gIGhyID0gaCAvIDM2MCAqIDIgKiBNYXRoLlBJO1xuICBhID0gYyAqIE1hdGguY29zKGhyKTtcbiAgYiA9IGMgKiBNYXRoLnNpbihocik7XG4gIHJldHVybiBbbCwgYSwgYl07XG59XG5cbmZ1bmN0aW9uIGxjaDJ4eXooYXJncykge1xuICByZXR1cm4gbGFiMnh5eihsY2gybGFiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gbGNoMnJnYihhcmdzKSB7XG4gIHJldHVybiBsYWIycmdiKGxjaDJsYWIoYXJncykpO1xufVxuXG5mdW5jdGlvbiBrZXl3b3JkMnJnYihrZXl3b3JkKSB7XG4gIHJldHVybiBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcbn1cblxuZnVuY3Rpb24ga2V5d29yZDJoc2woYXJncykge1xuICByZXR1cm4gcmdiMmhzbChrZXl3b3JkMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGtleXdvcmQyaHN2KGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJoc3Yoa2V5d29yZDJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBrZXl3b3JkMmh3YihhcmdzKSB7XG4gIHJldHVybiByZ2IyaHdiKGtleXdvcmQycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24ga2V5d29yZDJjbXlrKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJjbXlrKGtleXdvcmQycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24ga2V5d29yZDJsYWIoYXJncykge1xuICByZXR1cm4gcmdiMmxhYihrZXl3b3JkMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGtleXdvcmQyeHl6KGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJ4eXooa2V5d29yZDJyZ2IoYXJncykpO1xufVxuXG52YXIgY3NzS2V5d29yZHMgPSB7XG4gIGFsaWNlYmx1ZTogIFsyNDAsMjQ4LDI1NV0sXG4gIGFudGlxdWV3aGl0ZTogWzI1MCwyMzUsMjE1XSxcbiAgYXF1YTogWzAsMjU1LDI1NV0sXG4gIGFxdWFtYXJpbmU6IFsxMjcsMjU1LDIxMl0sXG4gIGF6dXJlOiAgWzI0MCwyNTUsMjU1XSxcbiAgYmVpZ2U6ICBbMjQ1LDI0NSwyMjBdLFxuICBiaXNxdWU6IFsyNTUsMjI4LDE5Nl0sXG4gIGJsYWNrOiAgWzAsMCwwXSxcbiAgYmxhbmNoZWRhbG1vbmQ6IFsyNTUsMjM1LDIwNV0sXG4gIGJsdWU6IFswLDAsMjU1XSxcbiAgYmx1ZXZpb2xldDogWzEzOCw0MywyMjZdLFxuICBicm93bjogIFsxNjUsNDIsNDJdLFxuICBidXJseXdvb2Q6ICBbMjIyLDE4NCwxMzVdLFxuICBjYWRldGJsdWU6ICBbOTUsMTU4LDE2MF0sXG4gIGNoYXJ0cmV1c2U6IFsxMjcsMjU1LDBdLFxuICBjaG9jb2xhdGU6ICBbMjEwLDEwNSwzMF0sXG4gIGNvcmFsOiAgWzI1NSwxMjcsODBdLFxuICBjb3JuZmxvd2VyYmx1ZTogWzEwMCwxNDksMjM3XSxcbiAgY29ybnNpbGs6IFsyNTUsMjQ4LDIyMF0sXG4gIGNyaW1zb246ICBbMjIwLDIwLDYwXSxcbiAgY3lhbjogWzAsMjU1LDI1NV0sXG4gIGRhcmtibHVlOiBbMCwwLDEzOV0sXG4gIGRhcmtjeWFuOiBbMCwxMzksMTM5XSxcbiAgZGFya2dvbGRlbnJvZDogIFsxODQsMTM0LDExXSxcbiAgZGFya2dyYXk6IFsxNjksMTY5LDE2OV0sXG4gIGRhcmtncmVlbjogIFswLDEwMCwwXSxcbiAgZGFya2dyZXk6IFsxNjksMTY5LDE2OV0sXG4gIGRhcmtraGFraTogIFsxODksMTgzLDEwN10sXG4gIGRhcmttYWdlbnRhOiAgWzEzOSwwLDEzOV0sXG4gIGRhcmtvbGl2ZWdyZWVuOiBbODUsMTA3LDQ3XSxcbiAgZGFya29yYW5nZTogWzI1NSwxNDAsMF0sXG4gIGRhcmtvcmNoaWQ6IFsxNTMsNTAsMjA0XSxcbiAgZGFya3JlZDogIFsxMzksMCwwXSxcbiAgZGFya3NhbG1vbjogWzIzMywxNTAsMTIyXSxcbiAgZGFya3NlYWdyZWVuOiBbMTQzLDE4OCwxNDNdLFxuICBkYXJrc2xhdGVibHVlOiAgWzcyLDYxLDEzOV0sXG4gIGRhcmtzbGF0ZWdyYXk6ICBbNDcsNzksNzldLFxuICBkYXJrc2xhdGVncmV5OiAgWzQ3LDc5LDc5XSxcbiAgZGFya3R1cnF1b2lzZTogIFswLDIwNiwyMDldLFxuICBkYXJrdmlvbGV0OiBbMTQ4LDAsMjExXSxcbiAgZGVlcHBpbms6IFsyNTUsMjAsMTQ3XSxcbiAgZGVlcHNreWJsdWU6ICBbMCwxOTEsMjU1XSxcbiAgZGltZ3JheTogIFsxMDUsMTA1LDEwNV0sXG4gIGRpbWdyZXk6ICBbMTA1LDEwNSwxMDVdLFxuICBkb2RnZXJibHVlOiBbMzAsMTQ0LDI1NV0sXG4gIGZpcmVicmljazogIFsxNzgsMzQsMzRdLFxuICBmbG9yYWx3aGl0ZTogIFsyNTUsMjUwLDI0MF0sXG4gIGZvcmVzdGdyZWVuOiAgWzM0LDEzOSwzNF0sXG4gIGZ1Y2hzaWE6ICBbMjU1LDAsMjU1XSxcbiAgZ2FpbnNib3JvOiAgWzIyMCwyMjAsMjIwXSxcbiAgZ2hvc3R3aGl0ZTogWzI0OCwyNDgsMjU1XSxcbiAgZ29sZDogWzI1NSwyMTUsMF0sXG4gIGdvbGRlbnJvZDogIFsyMTgsMTY1LDMyXSxcbiAgZ3JheTogWzEyOCwxMjgsMTI4XSxcbiAgZ3JlZW46ICBbMCwxMjgsMF0sXG4gIGdyZWVueWVsbG93OiAgWzE3MywyNTUsNDddLFxuICBncmV5OiBbMTI4LDEyOCwxMjhdLFxuICBob25leWRldzogWzI0MCwyNTUsMjQwXSxcbiAgaG90cGluazogIFsyNTUsMTA1LDE4MF0sXG4gIGluZGlhbnJlZDogIFsyMDUsOTIsOTJdLFxuICBpbmRpZ286IFs3NSwwLDEzMF0sXG4gIGl2b3J5OiAgWzI1NSwyNTUsMjQwXSxcbiAga2hha2k6ICBbMjQwLDIzMCwxNDBdLFxuICBsYXZlbmRlcjogWzIzMCwyMzAsMjUwXSxcbiAgbGF2ZW5kZXJibHVzaDogIFsyNTUsMjQwLDI0NV0sXG4gIGxhd25ncmVlbjogIFsxMjQsMjUyLDBdLFxuICBsZW1vbmNoaWZmb246IFsyNTUsMjUwLDIwNV0sXG4gIGxpZ2h0Ymx1ZTogIFsxNzMsMjE2LDIzMF0sXG4gIGxpZ2h0Y29yYWw6IFsyNDAsMTI4LDEyOF0sXG4gIGxpZ2h0Y3lhbjogIFsyMjQsMjU1LDI1NV0sXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiBbMjUwLDI1MCwyMTBdLFxuICBsaWdodGdyYXk6ICBbMjExLDIxMSwyMTFdLFxuICBsaWdodGdyZWVuOiBbMTQ0LDIzOCwxNDRdLFxuICBsaWdodGdyZXk6ICBbMjExLDIxMSwyMTFdLFxuICBsaWdodHBpbms6ICBbMjU1LDE4MiwxOTNdLFxuICBsaWdodHNhbG1vbjogIFsyNTUsMTYwLDEyMl0sXG4gIGxpZ2h0c2VhZ3JlZW46ICBbMzIsMTc4LDE3MF0sXG4gIGxpZ2h0c2t5Ymx1ZTogWzEzNSwyMDYsMjUwXSxcbiAgbGlnaHRzbGF0ZWdyYXk6IFsxMTksMTM2LDE1M10sXG4gIGxpZ2h0c2xhdGVncmV5OiBbMTE5LDEzNiwxNTNdLFxuICBsaWdodHN0ZWVsYmx1ZTogWzE3NiwxOTYsMjIyXSxcbiAgbGlnaHR5ZWxsb3c6ICBbMjU1LDI1NSwyMjRdLFxuICBsaW1lOiBbMCwyNTUsMF0sXG4gIGxpbWVncmVlbjogIFs1MCwyMDUsNTBdLFxuICBsaW5lbjogIFsyNTAsMjQwLDIzMF0sXG4gIG1hZ2VudGE6ICBbMjU1LDAsMjU1XSxcbiAgbWFyb29uOiBbMTI4LDAsMF0sXG4gIG1lZGl1bWFxdWFtYXJpbmU6IFsxMDIsMjA1LDE3MF0sXG4gIG1lZGl1bWJsdWU6IFswLDAsMjA1XSxcbiAgbWVkaXVtb3JjaGlkOiBbMTg2LDg1LDIxMV0sXG4gIG1lZGl1bXB1cnBsZTogWzE0NywxMTIsMjE5XSxcbiAgbWVkaXVtc2VhZ3JlZW46IFs2MCwxNzksMTEzXSxcbiAgbWVkaXVtc2xhdGVibHVlOiAgWzEyMywxMDQsMjM4XSxcbiAgbWVkaXVtc3ByaW5nZ3JlZW46ICBbMCwyNTAsMTU0XSxcbiAgbWVkaXVtdHVycXVvaXNlOiAgWzcyLDIwOSwyMDRdLFxuICBtZWRpdW12aW9sZXRyZWQ6ICBbMTk5LDIxLDEzM10sXG4gIG1pZG5pZ2h0Ymx1ZTogWzI1LDI1LDExMl0sXG4gIG1pbnRjcmVhbTogIFsyNDUsMjU1LDI1MF0sXG4gIG1pc3R5cm9zZTogIFsyNTUsMjI4LDIyNV0sXG4gIG1vY2Nhc2luOiBbMjU1LDIyOCwxODFdLFxuICBuYXZham93aGl0ZTogIFsyNTUsMjIyLDE3M10sXG4gIG5hdnk6IFswLDAsMTI4XSxcbiAgb2xkbGFjZTogIFsyNTMsMjQ1LDIzMF0sXG4gIG9saXZlOiAgWzEyOCwxMjgsMF0sXG4gIG9saXZlZHJhYjogIFsxMDcsMTQyLDM1XSxcbiAgb3JhbmdlOiBbMjU1LDE2NSwwXSxcbiAgb3JhbmdlcmVkOiAgWzI1NSw2OSwwXSxcbiAgb3JjaGlkOiBbMjE4LDExMiwyMTRdLFxuICBwYWxlZ29sZGVucm9kOiAgWzIzOCwyMzIsMTcwXSxcbiAgcGFsZWdyZWVuOiAgWzE1MiwyNTEsMTUyXSxcbiAgcGFsZXR1cnF1b2lzZTogIFsxNzUsMjM4LDIzOF0sXG4gIHBhbGV2aW9sZXRyZWQ6ICBbMjE5LDExMiwxNDddLFxuICBwYXBheWF3aGlwOiBbMjU1LDIzOSwyMTNdLFxuICBwZWFjaHB1ZmY6ICBbMjU1LDIxOCwxODVdLFxuICBwZXJ1OiBbMjA1LDEzMyw2M10sXG4gIHBpbms6IFsyNTUsMTkyLDIwM10sXG4gIHBsdW06IFsyMjEsMTYwLDIyMV0sXG4gIHBvd2RlcmJsdWU6IFsxNzYsMjI0LDIzMF0sXG4gIHB1cnBsZTogWzEyOCwwLDEyOF0sXG4gIHJlYmVjY2FwdXJwbGU6IFsxMDIsIDUxLCAxNTNdLFxuICByZWQ6ICBbMjU1LDAsMF0sXG4gIHJvc3licm93bjogIFsxODgsMTQzLDE0M10sXG4gIHJveWFsYmx1ZTogIFs2NSwxMDUsMjI1XSxcbiAgc2FkZGxlYnJvd246ICBbMTM5LDY5LDE5XSxcbiAgc2FsbW9uOiBbMjUwLDEyOCwxMTRdLFxuICBzYW5keWJyb3duOiBbMjQ0LDE2NCw5Nl0sXG4gIHNlYWdyZWVuOiBbNDYsMTM5LDg3XSxcbiAgc2Vhc2hlbGw6IFsyNTUsMjQ1LDIzOF0sXG4gIHNpZW5uYTogWzE2MCw4Miw0NV0sXG4gIHNpbHZlcjogWzE5MiwxOTIsMTkyXSxcbiAgc2t5Ymx1ZTogIFsxMzUsMjA2LDIzNV0sXG4gIHNsYXRlYmx1ZTogIFsxMDYsOTAsMjA1XSxcbiAgc2xhdGVncmF5OiAgWzExMiwxMjgsMTQ0XSxcbiAgc2xhdGVncmV5OiAgWzExMiwxMjgsMTQ0XSxcbiAgc25vdzogWzI1NSwyNTAsMjUwXSxcbiAgc3ByaW5nZ3JlZW46ICBbMCwyNTUsMTI3XSxcbiAgc3RlZWxibHVlOiAgWzcwLDEzMCwxODBdLFxuICB0YW46ICBbMjEwLDE4MCwxNDBdLFxuICB0ZWFsOiBbMCwxMjgsMTI4XSxcbiAgdGhpc3RsZTogIFsyMTYsMTkxLDIxNl0sXG4gIHRvbWF0bzogWzI1NSw5OSw3MV0sXG4gIHR1cnF1b2lzZTogIFs2NCwyMjQsMjA4XSxcbiAgdmlvbGV0OiBbMjM4LDEzMCwyMzhdLFxuICB3aGVhdDogIFsyNDUsMjIyLDE3OV0sXG4gIHdoaXRlOiAgWzI1NSwyNTUsMjU1XSxcbiAgd2hpdGVzbW9rZTogWzI0NSwyNDUsMjQ1XSxcbiAgeWVsbG93OiBbMjU1LDI1NSwwXSxcbiAgeWVsbG93Z3JlZW46ICBbMTU0LDIwNSw1MF1cbn07XG5cbnZhciByZXZlcnNlS2V5d29yZHMgPSB7fTtcbmZvciAodmFyIGtleSBpbiBjc3NLZXl3b3Jkcykge1xuICByZXZlcnNlS2V5d29yZHNbSlNPTi5zdHJpbmdpZnkoY3NzS2V5d29yZHNba2V5XSldID0ga2V5O1xufVxuIiwidmFyIGNvbnZlcnNpb25zID0gcmVxdWlyZShcIi4vY29udmVyc2lvbnNcIik7XG5cbnZhciBjb252ZXJ0ID0gZnVuY3Rpb24oKSB7XG4gICByZXR1cm4gbmV3IENvbnZlcnRlcigpO1xufVxuXG5mb3IgKHZhciBmdW5jIGluIGNvbnZlcnNpb25zKSB7XG4gIC8vIGV4cG9ydCBSYXcgdmVyc2lvbnNcbiAgY29udmVydFtmdW5jICsgXCJSYXdcIl0gPSAgKGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAvLyBhY2NlcHQgYXJyYXkgb3IgcGxhaW4gYXJnc1xuICAgIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICAgIGlmICh0eXBlb2YgYXJnID09IFwibnVtYmVyXCIpXG4gICAgICAgIGFyZyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY29udmVyc2lvbnNbZnVuY10oYXJnKTtcbiAgICB9XG4gIH0pKGZ1bmMpO1xuXG4gIHZhciBwYWlyID0gLyhcXHcrKTIoXFx3KykvLmV4ZWMoZnVuYyksXG4gICAgICBmcm9tID0gcGFpclsxXSxcbiAgICAgIHRvID0gcGFpclsyXTtcblxuICAvLyBleHBvcnQgcmdiMmhzbCBhbmQgW1wicmdiXCJdW1wiaHNsXCJdXG4gIGNvbnZlcnRbZnJvbV0gPSBjb252ZXJ0W2Zyb21dIHx8IHt9O1xuXG4gIGNvbnZlcnRbZnJvbV1bdG9dID0gY29udmVydFtmdW5jXSA9IChmdW5jdGlvbihmdW5jKSB7IFxuICAgIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICAgIGlmICh0eXBlb2YgYXJnID09IFwibnVtYmVyXCIpXG4gICAgICAgIGFyZyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICBcbiAgICAgIHZhciB2YWwgPSBjb252ZXJzaW9uc1tmdW5jXShhcmcpO1xuICAgICAgaWYgKHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIiB8fCB2YWwgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHZhbDsgLy8ga2V5d29yZFxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKylcbiAgICAgICAgdmFsW2ldID0gTWF0aC5yb3VuZCh2YWxbaV0pO1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gIH0pKGZ1bmMpO1xufVxuXG5cbi8qIENvbnZlcnRlciBkb2VzIGxhenkgY29udmVyc2lvbiBhbmQgY2FjaGluZyAqL1xudmFyIENvbnZlcnRlciA9IGZ1bmN0aW9uKCkge1xuICAgdGhpcy5jb252cyA9IHt9O1xufTtcblxuLyogRWl0aGVyIGdldCB0aGUgdmFsdWVzIGZvciBhIHNwYWNlIG9yXG4gIHNldCB0aGUgdmFsdWVzIGZvciBhIHNwYWNlLCBkZXBlbmRpbmcgb24gYXJncyAqL1xuQ29udmVydGVyLnByb3RvdHlwZS5yb3V0ZVNwYWNlID0gZnVuY3Rpb24oc3BhY2UsIGFyZ3MpIHtcbiAgIHZhciB2YWx1ZXMgPSBhcmdzWzBdO1xuICAgaWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBjb2xvci5yZ2IoKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVzKHNwYWNlKTtcbiAgIH1cbiAgIC8vIGNvbG9yLnJnYigxMCwgMTAsIDEwKVxuICAgaWYgKHR5cGVvZiB2YWx1ZXMgPT0gXCJudW1iZXJcIikge1xuICAgICAgdmFsdWVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncyk7ICAgICAgICBcbiAgIH1cblxuICAgcmV0dXJuIHRoaXMuc2V0VmFsdWVzKHNwYWNlLCB2YWx1ZXMpO1xufTtcbiAgXG4vKiBTZXQgdGhlIHZhbHVlcyBmb3IgYSBzcGFjZSwgaW52YWxpZGF0aW5nIGNhY2hlICovXG5Db252ZXJ0ZXIucHJvdG90eXBlLnNldFZhbHVlcyA9IGZ1bmN0aW9uKHNwYWNlLCB2YWx1ZXMpIHtcbiAgIHRoaXMuc3BhY2UgPSBzcGFjZTtcbiAgIHRoaXMuY29udnMgPSB7fTtcbiAgIHRoaXMuY29udnNbc3BhY2VdID0gdmFsdWVzO1xuICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKiBHZXQgdGhlIHZhbHVlcyBmb3IgYSBzcGFjZS4gSWYgdGhlcmUncyBhbHJlYWR5XG4gIGEgY29udmVyc2lvbiBmb3IgdGhlIHNwYWNlLCBmZXRjaCBpdCwgb3RoZXJ3aXNlXG4gIGNvbXB1dGUgaXQgKi9cbkNvbnZlcnRlci5wcm90b3R5cGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24oc3BhY2UpIHtcbiAgIHZhciB2YWxzID0gdGhpcy5jb252c1tzcGFjZV07XG4gICBpZiAoIXZhbHMpIHtcbiAgICAgIHZhciBmc3BhY2UgPSB0aGlzLnNwYWNlLFxuICAgICAgICAgIGZyb20gPSB0aGlzLmNvbnZzW2ZzcGFjZV07XG4gICAgICB2YWxzID0gY29udmVydFtmc3BhY2VdW3NwYWNlXShmcm9tKTtcblxuICAgICAgdGhpcy5jb252c1tzcGFjZV0gPSB2YWxzO1xuICAgfVxuICByZXR1cm4gdmFscztcbn07XG5cbltcInJnYlwiLCBcImhzbFwiLCBcImhzdlwiLCBcImNteWtcIiwgXCJrZXl3b3JkXCJdLmZvckVhY2goZnVuY3Rpb24oc3BhY2UpIHtcbiAgIENvbnZlcnRlci5wcm90b3R5cGVbc3BhY2VdID0gZnVuY3Rpb24odmFscykge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVTcGFjZShzcGFjZSwgYXJndW1lbnRzKTtcbiAgIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7IiwibW9kdWxlLmV4cG9ydHM9e1xuXHRcImpldFwiOlt7XCJpbmRleFwiOjAsXCJyZ2JcIjpbMCwwLDEzMV19LHtcImluZGV4XCI6MC4xMjUsXCJyZ2JcIjpbMCw2MCwxNzBdfSx7XCJpbmRleFwiOjAuMzc1LFwicmdiXCI6WzUsMjU1LDI1NV19LHtcImluZGV4XCI6MC42MjUsXCJyZ2JcIjpbMjU1LDI1NSwwXX0se1wiaW5kZXhcIjowLjg3NSxcInJnYlwiOlsyNTAsMCwwXX0se1wiaW5kZXhcIjoxLFwicmdiXCI6WzEyOCwwLDBdfV0sXG5cblx0XCJoc3ZcIjpbe1wiaW5kZXhcIjowLFwicmdiXCI6WzI1NSwwLDBdfSx7XCJpbmRleFwiOjAuMTY5LFwicmdiXCI6WzI1MywyNTUsMl19LHtcImluZGV4XCI6MC4xNzMsXCJyZ2JcIjpbMjQ3LDI1NSwyXX0se1wiaW5kZXhcIjowLjMzNyxcInJnYlwiOlswLDI1Miw0XX0se1wiaW5kZXhcIjowLjM0MSxcInJnYlwiOlswLDI1MiwxMF19LHtcImluZGV4XCI6MC41MDYsXCJyZ2JcIjpbMSwyNDksMjU1XX0se1wiaW5kZXhcIjowLjY3MSxcInJnYlwiOlsyLDAsMjUzXX0se1wiaW5kZXhcIjowLjY3NSxcInJnYlwiOls4LDAsMjUzXX0se1wiaW5kZXhcIjowLjgzOSxcInJnYlwiOlsyNTUsMCwyNTFdfSx7XCJpbmRleFwiOjAuODQzLFwicmdiXCI6WzI1NSwwLDI0NV19LHtcImluZGV4XCI6MSxcInJnYlwiOlsyNTUsMCw2XX1dLFxuXG5cdFwiaG90XCI6W3tcImluZGV4XCI6MCxcInJnYlwiOlswLDAsMF19LHtcImluZGV4XCI6MC4zLFwicmdiXCI6WzIzMCwwLDBdfSx7XCJpbmRleFwiOjAuNixcInJnYlwiOlsyNTUsMjEwLDBdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjU1LDI1NSwyNTVdfV0sXG5cblx0XCJzcHJpbmdcIjpbe1wiaW5kZXhcIjowLFwicmdiXCI6WzI1NSwwLDI1NV19LHtcImluZGV4XCI6MSxcInJnYlwiOlsyNTUsMjU1LDBdfV0sXG5cblx0XCJzdW1tZXJcIjpbe1wiaW5kZXhcIjowLFwicmdiXCI6WzAsMTI4LDEwMl19LHtcImluZGV4XCI6MSxcInJnYlwiOlsyNTUsMjU1LDEwMl19XSxcblxuXHRcImF1dHVtblwiOlt7XCJpbmRleFwiOjAsXCJyZ2JcIjpbMjU1LDAsMF19LHtcImluZGV4XCI6MSxcInJnYlwiOlsyNTUsMjU1LDBdfV0sXG5cblx0XCJ3aW50ZXJcIjpbe1wiaW5kZXhcIjowLFwicmdiXCI6WzAsMCwyNTVdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMCwyNTUsMTI4XX1dLFxuXG5cdFwiYm9uZVwiOlt7XCJpbmRleFwiOjAsXCJyZ2JcIjpbMCwwLDBdfSx7XCJpbmRleFwiOjAuMzc2LFwicmdiXCI6Wzg0LDg0LDExNl19LHtcImluZGV4XCI6MC43NTMsXCJyZ2JcIjpbMTY5LDIwMCwyMDBdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjU1LDI1NSwyNTVdfV0sXG5cblx0XCJjb3BwZXJcIjpbe1wiaW5kZXhcIjowLFwicmdiXCI6WzAsMCwwXX0se1wiaW5kZXhcIjowLjgwNCxcInJnYlwiOlsyNTUsMTYwLDEwMl19LHtcImluZGV4XCI6MSxcInJnYlwiOlsyNTUsMTk5LDEyN119XSxcblxuXHRcImdyZXlzXCI6W3tcImluZGV4XCI6MCxcInJnYlwiOlswLDAsMF19LHtcImluZGV4XCI6MSxcInJnYlwiOlsyNTUsMjU1LDI1NV19XSxcblxuXHRcInlpZ25idVwiOlt7XCJpbmRleFwiOjAsXCJyZ2JcIjpbOCwyOSw4OF19LHtcImluZGV4XCI6MC4xMjUsXCJyZ2JcIjpbMzcsNTIsMTQ4XX0se1wiaW5kZXhcIjowLjI1LFwicmdiXCI6WzM0LDk0LDE2OF19LHtcImluZGV4XCI6MC4zNzUsXCJyZ2JcIjpbMjksMTQ1LDE5Ml19LHtcImluZGV4XCI6MC41LFwicmdiXCI6WzY1LDE4MiwxOTZdfSx7XCJpbmRleFwiOjAuNjI1LFwicmdiXCI6WzEyNywyMDUsMTg3XX0se1wiaW5kZXhcIjowLjc1LFwicmdiXCI6WzE5OSwyMzMsMTgwXX0se1wiaW5kZXhcIjowLjg3NSxcInJnYlwiOlsyMzcsMjQ4LDIxN119LHtcImluZGV4XCI6MSxcInJnYlwiOlsyNTUsMjU1LDIxN119XSxcblxuXHRcImdyZWVuc1wiOlt7XCJpbmRleFwiOjAsXCJyZ2JcIjpbMCw2OCwyN119LHtcImluZGV4XCI6MC4xMjUsXCJyZ2JcIjpbMCwxMDksNDRdfSx7XCJpbmRleFwiOjAuMjUsXCJyZ2JcIjpbMzUsMTM5LDY5XX0se1wiaW5kZXhcIjowLjM3NSxcInJnYlwiOls2NSwxNzEsOTNdfSx7XCJpbmRleFwiOjAuNSxcInJnYlwiOlsxMTYsMTk2LDExOF19LHtcImluZGV4XCI6MC42MjUsXCJyZ2JcIjpbMTYxLDIxNywxNTVdfSx7XCJpbmRleFwiOjAuNzUsXCJyZ2JcIjpbMTk5LDIzMywxOTJdfSx7XCJpbmRleFwiOjAuODc1LFwicmdiXCI6WzIyOSwyNDUsMjI0XX0se1wiaW5kZXhcIjoxLFwicmdiXCI6WzI0NywyNTIsMjQ1XX1dLFxuXG5cdFwieWlvcnJkXCI6W3tcImluZGV4XCI6MCxcInJnYlwiOlsxMjgsMCwzOF19LHtcImluZGV4XCI6MC4xMjUsXCJyZ2JcIjpbMTg5LDAsMzhdfSx7XCJpbmRleFwiOjAuMjUsXCJyZ2JcIjpbMjI3LDI2LDI4XX0se1wiaW5kZXhcIjowLjM3NSxcInJnYlwiOlsyNTIsNzgsNDJdfSx7XCJpbmRleFwiOjAuNSxcInJnYlwiOlsyNTMsMTQxLDYwXX0se1wiaW5kZXhcIjowLjYyNSxcInJnYlwiOlsyNTQsMTc4LDc2XX0se1wiaW5kZXhcIjowLjc1LFwicmdiXCI6WzI1NCwyMTcsMTE4XX0se1wiaW5kZXhcIjowLjg3NSxcInJnYlwiOlsyNTUsMjM3LDE2MF19LHtcImluZGV4XCI6MSxcInJnYlwiOlsyNTUsMjU1LDIwNF19XSxcblxuXHRcImJsdWVyZWRcIjpbe1wiaW5kZXhcIjowLFwicmdiXCI6WzAsMCwyNTVdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjU1LDAsMF19XSxcblxuXHRcInJkYnVcIjpbe1wiaW5kZXhcIjowLFwicmdiXCI6WzUsMTAsMTcyXX0se1wiaW5kZXhcIjowLjM1LFwicmdiXCI6WzEwNiwxMzcsMjQ3XX0se1wiaW5kZXhcIjowLjUsXCJyZ2JcIjpbMTkwLDE5MCwxOTBdfSx7XCJpbmRleFwiOjAuNixcInJnYlwiOlsyMjAsMTcwLDEzMl19LHtcImluZGV4XCI6MC43LFwicmdiXCI6WzIzMCwxNDUsOTBdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMTc4LDEwLDI4XX1dLFxuXG5cdFwicGljbmljXCI6W3tcImluZGV4XCI6MCxcInJnYlwiOlswLDAsMjU1XX0se1wiaW5kZXhcIjowLjEsXCJyZ2JcIjpbNTEsMTUzLDI1NV19LHtcImluZGV4XCI6MC4yLFwicmdiXCI6WzEwMiwyMDQsMjU1XX0se1wiaW5kZXhcIjowLjMsXCJyZ2JcIjpbMTUzLDIwNCwyNTVdfSx7XCJpbmRleFwiOjAuNCxcInJnYlwiOlsyMDQsMjA0LDI1NV19LHtcImluZGV4XCI6MC41LFwicmdiXCI6WzI1NSwyNTUsMjU1XX0se1wiaW5kZXhcIjowLjYsXCJyZ2JcIjpbMjU1LDIwNCwyNTVdfSx7XCJpbmRleFwiOjAuNyxcInJnYlwiOlsyNTUsMTUzLDI1NV19LHtcImluZGV4XCI6MC44LFwicmdiXCI6WzI1NSwxMDIsMjA0XX0se1wiaW5kZXhcIjowLjksXCJyZ2JcIjpbMjU1LDEwMiwxMDJdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjU1LDAsMF19XSxcblxuXHRcInJhaW5ib3dcIjpbe1wiaW5kZXhcIjowLFwicmdiXCI6WzE1MCwwLDkwXX0se1wiaW5kZXhcIjowLjEyNSxcInJnYlwiOlswLDAsMjAwXX0se1wiaW5kZXhcIjowLjI1LFwicmdiXCI6WzAsMjUsMjU1XX0se1wiaW5kZXhcIjowLjM3NSxcInJnYlwiOlswLDE1MiwyNTVdfSx7XCJpbmRleFwiOjAuNSxcInJnYlwiOls0NCwyNTUsMTUwXX0se1wiaW5kZXhcIjowLjYyNSxcInJnYlwiOlsxNTEsMjU1LDBdfSx7XCJpbmRleFwiOjAuNzUsXCJyZ2JcIjpbMjU1LDIzNCwwXX0se1wiaW5kZXhcIjowLjg3NSxcInJnYlwiOlsyNTUsMTExLDBdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjU1LDAsMF19XSxcblxuXHRcInBvcnRsYW5kXCI6W3tcImluZGV4XCI6MCxcInJnYlwiOlsxMiw1MSwxMzFdfSx7XCJpbmRleFwiOjAuMjUsXCJyZ2JcIjpbMTAsMTM2LDE4Nl19LHtcImluZGV4XCI6MC41LFwicmdiXCI6WzI0MiwyMTEsNTZdfSx7XCJpbmRleFwiOjAuNzUsXCJyZ2JcIjpbMjQyLDE0Myw1Nl19LHtcImluZGV4XCI6MSxcInJnYlwiOlsyMTcsMzAsMzBdfV0sXG5cblx0XCJibGFja2JvZHlcIjpbe1wiaW5kZXhcIjowLFwicmdiXCI6WzAsMCwwXX0se1wiaW5kZXhcIjowLjIsXCJyZ2JcIjpbMjMwLDAsMF19LHtcImluZGV4XCI6MC40LFwicmdiXCI6WzIzMCwyMTAsMF19LHtcImluZGV4XCI6MC43LFwicmdiXCI6WzI1NSwyNTUsMjU1XX0se1wiaW5kZXhcIjoxLFwicmdiXCI6WzE2MCwyMDAsMjU1XX1dLFxuXG5cdFwiZWFydGhcIjpbe1wiaW5kZXhcIjowLFwicmdiXCI6WzAsMCwxMzBdfSx7XCJpbmRleFwiOjAuMSxcInJnYlwiOlswLDE4MCwxODBdfSx7XCJpbmRleFwiOjAuMixcInJnYlwiOls0MCwyMTAsNDBdfSx7XCJpbmRleFwiOjAuNCxcInJnYlwiOlsyMzAsMjMwLDUwXX0se1wiaW5kZXhcIjowLjYsXCJyZ2JcIjpbMTIwLDcwLDIwXX0se1wiaW5kZXhcIjoxLFwicmdiXCI6WzI1NSwyNTUsMjU1XX1dLFxuXG5cdFwiZWxlY3RyaWNcIjpbe1wiaW5kZXhcIjowLFwicmdiXCI6WzAsMCwwXX0se1wiaW5kZXhcIjowLjE1LFwicmdiXCI6WzMwLDAsMTAwXX0se1wiaW5kZXhcIjowLjQsXCJyZ2JcIjpbMTIwLDAsMTAwXX0se1wiaW5kZXhcIjowLjYsXCJyZ2JcIjpbMTYwLDkwLDBdfSx7XCJpbmRleFwiOjAuOCxcInJnYlwiOlsyMzAsMjAwLDBdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjU1LDI1MCwyMjBdfV0sXG5cblx0XCJhbHBoYVwiOiBbe1wiaW5kZXhcIjowLCBcInJnYlwiOiBbMjU1LDI1NSwyNTUsMF19LHtcImluZGV4XCI6MSwgXCJyZ2JcIjogWzI1NSwyNTUsMjU1LDFdfV0sXG5cblx0XCJ2aXJpZGlzXCI6IFt7XCJpbmRleFwiOjAsXCJyZ2JcIjpbNjgsMSw4NF19LHtcImluZGV4XCI6MC4xMyxcInJnYlwiOls3MSw0NCwxMjJdfSx7XCJpbmRleFwiOjAuMjUsXCJyZ2JcIjpbNTksODEsMTM5XX0se1wiaW5kZXhcIjowLjM4LFwicmdiXCI6WzQ0LDExMywxNDJdfSx7XCJpbmRleFwiOjAuNSxcInJnYlwiOlszMywxNDQsMTQxXX0se1wiaW5kZXhcIjowLjYzLFwicmdiXCI6WzM5LDE3MywxMjldfSx7XCJpbmRleFwiOjAuNzUsXCJyZ2JcIjpbOTIsMjAwLDk5XX0se1wiaW5kZXhcIjowLjg4LFwicmdiXCI6WzE3MCwyMjAsNTBdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjUzLDIzMSwzN119XSxcblxuXHRcImluZmVybm9cIjogW3tcImluZGV4XCI6MCxcInJnYlwiOlswLDAsNF19LHtcImluZGV4XCI6MC4xMyxcInJnYlwiOlszMSwxMiw3Ml19LHtcImluZGV4XCI6MC4yNSxcInJnYlwiOls4NSwxNSwxMDldfSx7XCJpbmRleFwiOjAuMzgsXCJyZ2JcIjpbMTM2LDM0LDEwNl19LHtcImluZGV4XCI6MC41LFwicmdiXCI6WzE4Niw1NCw4NV19LHtcImluZGV4XCI6MC42MyxcInJnYlwiOlsyMjcsODksNTFdfSx7XCJpbmRleFwiOjAuNzUsXCJyZ2JcIjpbMjQ5LDE0MCwxMF19LHtcImluZGV4XCI6MC44OCxcInJnYlwiOlsyNDksMjAxLDUwXX0se1wiaW5kZXhcIjoxLFwicmdiXCI6WzI1MiwyNTUsMTY0XX1dLFxuXG5cdFwibWFnbWFcIjogW3tcImluZGV4XCI6MCxcInJnYlwiOlswLDAsNF19LHtcImluZGV4XCI6MC4xMyxcInJnYlwiOlsyOCwxNiw2OF19LHtcImluZGV4XCI6MC4yNSxcInJnYlwiOls3OSwxOCwxMjNdfSx7XCJpbmRleFwiOjAuMzgsXCJyZ2JcIjpbMTI5LDM3LDEyOV19LHtcImluZGV4XCI6MC41LFwicmdiXCI6WzE4MSw1NCwxMjJdfSx7XCJpbmRleFwiOjAuNjMsXCJyZ2JcIjpbMjI5LDgwLDEwMF19LHtcImluZGV4XCI6MC43NSxcInJnYlwiOlsyNTEsMTM1LDk3XX0se1wiaW5kZXhcIjowLjg4LFwicmdiXCI6WzI1NCwxOTQsMTM1XX0se1wiaW5kZXhcIjoxLFwicmdiXCI6WzI1MiwyNTMsMTkxXX1dLFxuXG5cdFwicGxhc21hXCI6IFt7XCJpbmRleFwiOjAsXCJyZ2JcIjpbMTMsOCwxMzVdfSx7XCJpbmRleFwiOjAuMTMsXCJyZ2JcIjpbNzUsMywxNjFdfSx7XCJpbmRleFwiOjAuMjUsXCJyZ2JcIjpbMTI1LDMsMTY4XX0se1wiaW5kZXhcIjowLjM4LFwicmdiXCI6WzE2OCwzNCwxNTBdfSx7XCJpbmRleFwiOjAuNSxcInJnYlwiOlsyMDMsNzAsMTIxXX0se1wiaW5kZXhcIjowLjYzLFwicmdiXCI6WzIyOSwxMDcsOTNdfSx7XCJpbmRleFwiOjAuNzUsXCJyZ2JcIjpbMjQ4LDE0OCw2NV19LHtcImluZGV4XCI6MC44OCxcInJnYlwiOlsyNTMsMTk1LDQwXX0se1wiaW5kZXhcIjoxLFwicmdiXCI6WzI0MCwyNDksMzNdfV0sXG5cblx0XCJ3YXJtXCI6IFt7XCJpbmRleFwiOjAsXCJyZ2JcIjpbMTI1LDAsMTc5XX0se1wiaW5kZXhcIjowLjEzLFwicmdiXCI6WzE3MiwwLDE4N119LHtcImluZGV4XCI6MC4yNSxcInJnYlwiOlsyMTksMCwxNzBdfSx7XCJpbmRleFwiOjAuMzgsXCJyZ2JcIjpbMjU1LDAsMTMwXX0se1wiaW5kZXhcIjowLjUsXCJyZ2JcIjpbMjU1LDYzLDc0XX0se1wiaW5kZXhcIjowLjYzLFwicmdiXCI6WzI1NSwxMjMsMF19LHtcImluZGV4XCI6MC43NSxcInJnYlwiOlsyMzQsMTc2LDBdfSx7XCJpbmRleFwiOjAuODgsXCJyZ2JcIjpbMTkwLDIyOCwwXX0se1wiaW5kZXhcIjoxLFwicmdiXCI6WzE0NywyNTUsMF19XSxcblxuXHRcImNvb2xcIjogW3tcImluZGV4XCI6MCxcInJnYlwiOlsxMjUsMCwxNzldfSx7XCJpbmRleFwiOjAuMTMsXCJyZ2JcIjpbMTE2LDAsMjE4XX0se1wiaW5kZXhcIjowLjI1LFwicmdiXCI6Wzk4LDc0LDIzN119LHtcImluZGV4XCI6MC4zOCxcInJnYlwiOls2OCwxNDYsMjMxXX0se1wiaW5kZXhcIjowLjUsXCJyZ2JcIjpbMCwyMDQsMTk3XX0se1wiaW5kZXhcIjowLjYzLFwicmdiXCI6WzAsMjQ3LDE0Nl19LHtcImluZGV4XCI6MC43NSxcInJnYlwiOlswLDI1NSw4OF19LHtcImluZGV4XCI6MC44OCxcInJnYlwiOls0MCwyNTUsOF19LHtcImluZGV4XCI6MSxcInJnYlwiOlsxNDcsMjU1LDBdfV0sXG5cblx0XCJyYWluYm93LXNvZnRcIjogW3tcImluZGV4XCI6MCxcInJnYlwiOlsxMjUsMCwxNzldfSx7XCJpbmRleFwiOjAuMSxcInJnYlwiOlsxOTksMCwxODBdfSx7XCJpbmRleFwiOjAuMixcInJnYlwiOlsyNTUsMCwxMjFdfSx7XCJpbmRleFwiOjAuMyxcInJnYlwiOlsyNTUsMTA4LDBdfSx7XCJpbmRleFwiOjAuNCxcInJnYlwiOlsyMjIsMTk0LDBdfSx7XCJpbmRleFwiOjAuNSxcInJnYlwiOlsxNTAsMjU1LDBdfSx7XCJpbmRleFwiOjAuNixcInJnYlwiOlswLDI1NSw1NV19LHtcImluZGV4XCI6MC43LFwicmdiXCI6WzAsMjQ2LDE1MF19LHtcImluZGV4XCI6MC44LFwicmdiXCI6WzUwLDE2NywyMjJdfSx7XCJpbmRleFwiOjAuOSxcInJnYlwiOlsxMDMsNTEsMjM1XX0se1wiaW5kZXhcIjoxLFwicmdiXCI6WzEyNCwwLDE4Nl19XSxcblxuXHRcImJhdGh5bWV0cnlcIjogW3tcImluZGV4XCI6MCxcInJnYlwiOls0MCwyNiw0NF19LHtcImluZGV4XCI6MC4xMyxcInJnYlwiOls1OSw0OSw5MF19LHtcImluZGV4XCI6MC4yNSxcInJnYlwiOls2NCw3NiwxMzldfSx7XCJpbmRleFwiOjAuMzgsXCJyZ2JcIjpbNjMsMTEwLDE1MV19LHtcImluZGV4XCI6MC41LFwicmdiXCI6WzcyLDE0MiwxNThdfSx7XCJpbmRleFwiOjAuNjMsXCJyZ2JcIjpbODUsMTc0LDE2M119LHtcImluZGV4XCI6MC43NSxcInJnYlwiOlsxMjAsMjA2LDE2M119LHtcImluZGV4XCI6MC44OCxcInJnYlwiOlsxODcsMjMwLDE3Ml19LHtcImluZGV4XCI6MSxcInJnYlwiOlsyNTMsMjU0LDIwNF19XSxcblxuXHRcImNkb21cIjogW3tcImluZGV4XCI6MCxcInJnYlwiOls0NywxNSw2Ml19LHtcImluZGV4XCI6MC4xMyxcInJnYlwiOls4NywyMyw4Nl19LHtcImluZGV4XCI6MC4yNSxcInJnYlwiOlsxMzAsMjgsOTldfSx7XCJpbmRleFwiOjAuMzgsXCJyZ2JcIjpbMTcxLDQxLDk2XX0se1wiaW5kZXhcIjowLjUsXCJyZ2JcIjpbMjA2LDY3LDg2XX0se1wiaW5kZXhcIjowLjYzLFwicmdiXCI6WzIzMCwxMDYsODRdfSx7XCJpbmRleFwiOjAuNzUsXCJyZ2JcIjpbMjQyLDE0OSwxMDNdfSx7XCJpbmRleFwiOjAuODgsXCJyZ2JcIjpbMjQ5LDE5MywxMzVdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjU0LDIzNywxNzZdfV0sXG5cblx0XCJjaGxvcm9waHlsbFwiOiBbe1wiaW5kZXhcIjowLFwicmdiXCI6WzE4LDM2LDIwXX0se1wiaW5kZXhcIjowLjEzLFwicmdiXCI6WzI1LDYzLDQxXX0se1wiaW5kZXhcIjowLjI1LFwicmdiXCI6WzI0LDkxLDU5XX0se1wiaW5kZXhcIjowLjM4LFwicmdiXCI6WzEzLDExOSw3Ml19LHtcImluZGV4XCI6MC41LFwicmdiXCI6WzE4LDE0OCw4MF19LHtcImluZGV4XCI6MC42MyxcInJnYlwiOls4MCwxNzMsODldfSx7XCJpbmRleFwiOjAuNzUsXCJyZ2JcIjpbMTMyLDE5NiwxMjJdfSx7XCJpbmRleFwiOjAuODgsXCJyZ2JcIjpbMTc1LDIyMSwxNjJdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjE1LDI0OSwyMDhdfV0sXG5cblx0XCJkZW5zaXR5XCI6IFt7XCJpbmRleFwiOjAsXCJyZ2JcIjpbNTQsMTQsMzZdfSx7XCJpbmRleFwiOjAuMTMsXCJyZ2JcIjpbODksMjMsODBdfSx7XCJpbmRleFwiOjAuMjUsXCJyZ2JcIjpbMTEwLDQ1LDEzMl19LHtcImluZGV4XCI6MC4zOCxcInJnYlwiOlsxMjAsNzcsMTc4XX0se1wiaW5kZXhcIjowLjUsXCJyZ2JcIjpbMTIwLDExMywyMTNdfSx7XCJpbmRleFwiOjAuNjMsXCJyZ2JcIjpbMTE1LDE1MSwyMjhdfSx7XCJpbmRleFwiOjAuNzUsXCJyZ2JcIjpbMTM0LDE4NSwyMjddfSx7XCJpbmRleFwiOjAuODgsXCJyZ2JcIjpbMTc3LDIxNCwyMjddfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjMwLDI0MSwyNDFdfV0sXG5cblx0XCJmcmVlc3VyZmFjZS1ibHVlXCI6IFt7XCJpbmRleFwiOjAsXCJyZ2JcIjpbMzAsNCwxMTBdfSx7XCJpbmRleFwiOjAuMTMsXCJyZ2JcIjpbNDcsMTQsMTc2XX0se1wiaW5kZXhcIjowLjI1LFwicmdiXCI6WzQxLDQ1LDIzNl19LHtcImluZGV4XCI6MC4zOCxcInJnYlwiOlsyNSw5OSwyMTJdfSx7XCJpbmRleFwiOjAuNSxcInJnYlwiOls2OCwxMzEsMjAwXX0se1wiaW5kZXhcIjowLjYzLFwicmdiXCI6WzExNCwxNTYsMTk3XX0se1wiaW5kZXhcIjowLjc1LFwicmdiXCI6WzE1NywxODEsMjAzXX0se1wiaW5kZXhcIjowLjg4LFwicmdiXCI6WzIwMCwyMDgsMjE2XX0se1wiaW5kZXhcIjoxLFwicmdiXCI6WzI0MSwyMzcsMjM2XX1dLFxuXG5cdFwiZnJlZXN1cmZhY2UtcmVkXCI6IFt7XCJpbmRleFwiOjAsXCJyZ2JcIjpbNjAsOSwxOF19LHtcImluZGV4XCI6MC4xMyxcInJnYlwiOlsxMDAsMTcsMjddfSx7XCJpbmRleFwiOjAuMjUsXCJyZ2JcIjpbMTQyLDIwLDI5XX0se1wiaW5kZXhcIjowLjM4LFwicmdiXCI6WzE3Nyw0MywyN119LHtcImluZGV4XCI6MC41LFwicmdiXCI6WzE5Miw4Nyw2M119LHtcImluZGV4XCI6MC42MyxcInJnYlwiOlsyMDUsMTI1LDEwNV19LHtcImluZGV4XCI6MC43NSxcInJnYlwiOlsyMTYsMTYyLDE0OF19LHtcImluZGV4XCI6MC44OCxcInJnYlwiOlsyMjcsMTk5LDE5M119LHtcImluZGV4XCI6MSxcInJnYlwiOlsyNDEsMjM3LDIzNl19XSxcblxuXHRcIm94eWdlblwiOiBbe1wiaW5kZXhcIjowLFwicmdiXCI6WzY0LDUsNV19LHtcImluZGV4XCI6MC4xMyxcInJnYlwiOlsxMDYsNiwxNV19LHtcImluZGV4XCI6MC4yNSxcInJnYlwiOlsxNDQsMjYsN119LHtcImluZGV4XCI6MC4zOCxcInJnYlwiOlsxNjgsNjQsM119LHtcImluZGV4XCI6MC41LFwicmdiXCI6WzE4OCwxMDAsNF19LHtcImluZGV4XCI6MC42MyxcInJnYlwiOlsyMDYsMTM2LDExXX0se1wiaW5kZXhcIjowLjc1LFwicmdiXCI6WzIyMCwxNzQsMjVdfSx7XCJpbmRleFwiOjAuODgsXCJyZ2JcIjpbMjMxLDIxNSw0NF19LHtcImluZGV4XCI6MSxcInJnYlwiOlsyNDgsMjU0LDEwNV19XSxcblxuXHRcInBhclwiOiBbe1wiaW5kZXhcIjowLFwicmdiXCI6WzUxLDIwLDI0XX0se1wiaW5kZXhcIjowLjEzLFwicmdiXCI6WzkwLDMyLDM1XX0se1wiaW5kZXhcIjowLjI1LFwicmdiXCI6WzEyOSw0NCwzNF19LHtcImluZGV4XCI6MC4zOCxcInJnYlwiOlsxNTksNjgsMjVdfSx7XCJpbmRleFwiOjAuNSxcInJnYlwiOlsxODIsOTksMTldfSx7XCJpbmRleFwiOjAuNjMsXCJyZ2JcIjpbMTk5LDEzNCwyMl19LHtcImluZGV4XCI6MC43NSxcInJnYlwiOlsyMTIsMTcxLDM1XX0se1wiaW5kZXhcIjowLjg4LFwicmdiXCI6WzIyMSwyMTAsNTRdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjI1LDI1Myw3NV19XSxcblxuXHRcInBoYXNlXCI6IFt7XCJpbmRleFwiOjAsXCJyZ2JcIjpbMTQ1LDEwNSwxOF19LHtcImluZGV4XCI6MC4xMyxcInJnYlwiOlsxODQsNzEsMzhdfSx7XCJpbmRleFwiOjAuMjUsXCJyZ2JcIjpbMTg2LDU4LDExNV19LHtcImluZGV4XCI6MC4zOCxcInJnYlwiOlsxNjAsNzEsMTg1XX0se1wiaW5kZXhcIjowLjUsXCJyZ2JcIjpbMTEwLDk3LDIxOF19LHtcImluZGV4XCI6MC42MyxcInJnYlwiOls1MCwxMjMsMTY0XX0se1wiaW5kZXhcIjowLjc1LFwicmdiXCI6WzMxLDEzMSwxMTBdfSx7XCJpbmRleFwiOjAuODgsXCJyZ2JcIjpbNzcsMTI5LDM0XX0se1wiaW5kZXhcIjoxLFwicmdiXCI6WzE0NSwxMDUsMThdfV0sXG5cblx0XCJzYWxpbml0eVwiOiBbe1wiaW5kZXhcIjowLFwicmdiXCI6WzQyLDI0LDEwOF19LHtcImluZGV4XCI6MC4xMyxcInJnYlwiOlszMyw1MCwxNjJdfSx7XCJpbmRleFwiOjAuMjUsXCJyZ2JcIjpbMTUsOTAsMTQ1XX0se1wiaW5kZXhcIjowLjM4LFwicmdiXCI6WzQwLDExOCwxMzddfSx7XCJpbmRleFwiOjAuNSxcInJnYlwiOls1OSwxNDYsMTM1XX0se1wiaW5kZXhcIjowLjYzLFwicmdiXCI6Wzc5LDE3NSwxMjZdfSx7XCJpbmRleFwiOjAuNzUsXCJyZ2JcIjpbMTIwLDIwMywxMDRdfSx7XCJpbmRleFwiOjAuODgsXCJyZ2JcIjpbMTkzLDIyMSwxMDBdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjUzLDIzOSwxNTRdfV0sXG5cblx0XCJ0ZW1wZXJhdHVyZVwiOiBbe1wiaW5kZXhcIjowLFwicmdiXCI6WzQsMzUsNTFdfSx7XCJpbmRleFwiOjAuMTMsXCJyZ2JcIjpbMjMsNTEsMTIyXX0se1wiaW5kZXhcIjowLjI1LFwicmdiXCI6Wzg1LDU5LDE1N119LHtcImluZGV4XCI6MC4zOCxcInJnYlwiOlsxMjksNzksMTQzXX0se1wiaW5kZXhcIjowLjUsXCJyZ2JcIjpbMTc1LDk1LDEzMF19LHtcImluZGV4XCI6MC42MyxcInJnYlwiOlsyMjIsMTEyLDEwMV19LHtcImluZGV4XCI6MC43NSxcInJnYlwiOlsyNDksMTQ2LDY2XX0se1wiaW5kZXhcIjowLjg4LFwicmdiXCI6WzI0OSwxOTYsNjVdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjMyLDI1MCw5MV19XSxcblxuXHRcInR1cmJpZGl0eVwiOiBbe1wiaW5kZXhcIjowLFwicmdiXCI6WzM0LDMxLDI3XX0se1wiaW5kZXhcIjowLjEzLFwicmdiXCI6WzY1LDUwLDQxXX0se1wiaW5kZXhcIjowLjI1LFwicmdiXCI6Wzk4LDY5LDUyXX0se1wiaW5kZXhcIjowLjM4LFwicmdiXCI6WzEzMSw4OSw1N119LHtcImluZGV4XCI6MC41LFwicmdiXCI6WzE2MSwxMTIsNTldfSx7XCJpbmRleFwiOjAuNjMsXCJyZ2JcIjpbMTg1LDE0MCw2Nl19LHtcImluZGV4XCI6MC43NSxcInJnYlwiOlsyMDIsMTc0LDg4XX0se1wiaW5kZXhcIjowLjg4LFwicmdiXCI6WzIxNiwyMDksMTI2XX0se1wiaW5kZXhcIjoxLFwicmdiXCI6WzIzMywyNDYsMTcxXX1dLFxuXG5cdFwidmVsb2NpdHktYmx1ZVwiOiBbe1wiaW5kZXhcIjowLFwicmdiXCI6WzE3LDMyLDY0XX0se1wiaW5kZXhcIjowLjEzLFwicmdiXCI6WzM1LDUyLDExNl19LHtcImluZGV4XCI6MC4yNSxcInJnYlwiOlsyOSw4MSwxNTZdfSx7XCJpbmRleFwiOjAuMzgsXCJyZ2JcIjpbMzEsMTEzLDE2Ml19LHtcImluZGV4XCI6MC41LFwicmdiXCI6WzUwLDE0NCwxNjldfSx7XCJpbmRleFwiOjAuNjMsXCJyZ2JcIjpbODcsMTczLDE3Nl19LHtcImluZGV4XCI6MC43NSxcInJnYlwiOlsxNDksMTk2LDE4OV19LHtcImluZGV4XCI6MC44OCxcInJnYlwiOlsyMDMsMjIxLDIxMV19LHtcImluZGV4XCI6MSxcInJnYlwiOlsyNTQsMjUxLDIzMF19XSxcblxuXHRcInZlbG9jaXR5LWdyZWVuXCI6IFt7XCJpbmRleFwiOjAsXCJyZ2JcIjpbMjMsMzUsMTldfSx7XCJpbmRleFwiOjAuMTMsXCJyZ2JcIjpbMjQsNjQsMzhdfSx7XCJpbmRleFwiOjAuMjUsXCJyZ2JcIjpbMTEsOTUsNDVdfSx7XCJpbmRleFwiOjAuMzgsXCJyZ2JcIjpbMzksMTIzLDM1XX0se1wiaW5kZXhcIjowLjUsXCJyZ2JcIjpbOTUsMTQ2LDEyXX0se1wiaW5kZXhcIjowLjYzLFwicmdiXCI6WzE1MiwxNjUsMThdfSx7XCJpbmRleFwiOjAuNzUsXCJyZ2JcIjpbMjAxLDE4Niw2OV19LHtcImluZGV4XCI6MC44OCxcInJnYlwiOlsyMzMsMjE2LDEzN119LHtcImluZGV4XCI6MSxcInJnYlwiOlsyNTUsMjUzLDIwNV19XSxcblxuXHRcImN1YmVoZWxpeFwiOiBbe1wiaW5kZXhcIjowLFwicmdiXCI6WzAsMCwwXX0se1wiaW5kZXhcIjowLjA3LFwicmdiXCI6WzIyLDUsNTldfSx7XCJpbmRleFwiOjAuMTMsXCJyZ2JcIjpbNjAsNCwxMDVdfSx7XCJpbmRleFwiOjAuMixcInJnYlwiOlsxMDksMSwxMzVdfSx7XCJpbmRleFwiOjAuMjcsXCJyZ2JcIjpbMTYxLDAsMTQ3XX0se1wiaW5kZXhcIjowLjMzLFwicmdiXCI6WzIxMCwyLDE0Ml19LHtcImluZGV4XCI6MC40LFwicmdiXCI6WzI1MSwxMSwxMjNdfSx7XCJpbmRleFwiOjAuNDcsXCJyZ2JcIjpbMjU1LDI5LDk3XX0se1wiaW5kZXhcIjowLjUzLFwicmdiXCI6WzI1NSw1NCw2OV19LHtcImluZGV4XCI6MC42LFwicmdiXCI6WzI1NSw4NSw0Nl19LHtcImluZGV4XCI6MC42NyxcInJnYlwiOlsyNTUsMTIwLDM0XX0se1wiaW5kZXhcIjowLjczLFwicmdiXCI6WzI1NSwxNTcsMzddfSx7XCJpbmRleFwiOjAuOCxcInJnYlwiOlsyNDEsMTkxLDU3XX0se1wiaW5kZXhcIjowLjg3LFwicmdiXCI6WzIyNCwyMjAsOTNdfSx7XCJpbmRleFwiOjAuOTMsXCJyZ2JcIjpbMjE4LDI0MSwxNDJdfSx7XCJpbmRleFwiOjEsXCJyZ2JcIjpbMjI3LDI1MywxOThdfV1cbn07XG4iLCIvKlxuICogQmVuIFBvc3RsZXRod2FpdGVcbiAqIEphbnVhcnkgMjAxM1xuICogTGljZW5zZSBNSVRcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgY29sb3JTY2FsZSA9IHJlcXVpcmUoJy4vY29sb3JTY2FsZScpO1xudmFyIGxlcnAgPSByZXF1aXJlKCdsZXJwJylcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb2xvcm1hcDtcblxuZnVuY3Rpb24gY3JlYXRlQ29sb3JtYXAgKHNwZWMpIHtcbiAgICAvKlxuICAgICAqIERlZmF1bHQgT3B0aW9uc1xuICAgICAqL1xuICAgIHZhciBpbmRpY2llcywgZnJvbXJnYmEsIHRvcmdiYSxcbiAgICAgICAgbnN0ZXBzLCBjbWFwLCBjb2xvcm1hcCwgZm9ybWF0LFxuICAgICAgICBuc2hhZGVzLCBjb2xvcnMsIGFscGhhLCBpO1xuXG4gICAgaWYgKCAhc3BlYyApIHNwZWMgPSB7fTtcblxuICAgIG5zaGFkZXMgPSAoc3BlYy5uc2hhZGVzIHx8IDcyKSAtIDE7XG4gICAgZm9ybWF0ID0gc3BlYy5mb3JtYXQgfHwgJ2hleCc7XG5cbiAgICBjb2xvcm1hcCA9IHNwZWMuY29sb3JtYXA7XG4gICAgaWYgKCFjb2xvcm1hcCkgY29sb3JtYXAgPSAnamV0JztcblxuICAgIGlmICh0eXBlb2YgY29sb3JtYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbG9ybWFwID0gY29sb3JtYXAudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAoIWNvbG9yU2NhbGVbY29sb3JtYXBdKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihjb2xvcm1hcCArICcgbm90IGEgc3VwcG9ydGVkIGNvbG9yc2NhbGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNtYXAgPSBjb2xvclNjYWxlW2NvbG9ybWFwXTtcblxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjb2xvcm1hcCkpIHtcbiAgICAgICAgY21hcCA9IGNvbG9ybWFwLnNsaWNlKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcigndW5zdXBwb3J0ZWQgY29sb3JtYXAgb3B0aW9uJywgY29sb3JtYXApO1xuICAgIH1cblxuICAgIGlmIChjbWFwLmxlbmd0aCA+IG5zaGFkZXMgKyAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGNvbG9ybWFwKycgbWFwIHJlcXVpcmVzIG5zaGFkZXMgdG8gYmUgYXQgbGVhc3Qgc2l6ZSAnK2NtYXAubGVuZ3RoXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNwZWMuYWxwaGEpKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBzcGVjLmFscGhhID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgYWxwaGEgPSBbc3BlYy5hbHBoYSwgc3BlYy5hbHBoYV07XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFscGhhID0gWzEsIDFdO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHNwZWMuYWxwaGEubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIGFscGhhID0gWzEsIDFdO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgYWxwaGEgPSBzcGVjLmFscGhhLnNsaWNlKCk7XG4gICAgfVxuXG4gICAgLy8gbWFwIGluZGV4IHBvaW50cyBmcm9tIDAuLjEgdG8gMC4ubi0xXG4gICAgaW5kaWNpZXMgPSBjbWFwLm1hcChmdW5jdGlvbihjKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGMuaW5kZXggKiBuc2hhZGVzKTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBhbHBoYSBjaGFubmVsIHRvIHRoZSBtYXBcbiAgICBhbHBoYVswXSA9IE1hdGgubWluKE1hdGgubWF4KGFscGhhWzBdLCAwKSwgMSk7XG4gICAgYWxwaGFbMV0gPSBNYXRoLm1pbihNYXRoLm1heChhbHBoYVsxXSwgMCksIDEpO1xuXG4gICAgdmFyIHN0ZXBzID0gY21hcC5tYXAoZnVuY3Rpb24oYywgaSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjbWFwW2ldLmluZGV4XG5cbiAgICAgICAgdmFyIHJnYmEgPSBjbWFwW2ldLnJnYi5zbGljZSgpO1xuXG4gICAgICAgIC8vIGlmIHVzZXIgc3VwcGxpZXMgdGhlaXIgb3duIG1hcCB1c2UgaXRcbiAgICAgICAgaWYgKHJnYmEubGVuZ3RoID09PSA0ICYmIHJnYmFbM10gPj0gMCAmJiByZ2JhWzNdIDw9IDEpIHtcbiAgICAgICAgICAgIHJldHVybiByZ2JhXG4gICAgICAgIH1cbiAgICAgICAgcmdiYVszXSA9IGFscGhhWzBdICsgKGFscGhhWzFdIC0gYWxwaGFbMF0pKmluZGV4O1xuXG4gICAgICAgIHJldHVybiByZ2JhXG4gICAgfSlcblxuXG4gICAgLypcbiAgICAgKiBtYXAgaW5jcmVhc2luZyBsaW5lYXIgdmFsdWVzIGJldHdlZW4gaW5kaWNpZXMgdG9cbiAgICAgKiBsaW5lYXIgc3RlcHMgaW4gY29sb3J2YWx1ZXNcbiAgICAgKi9cbiAgICB2YXIgY29sb3JzID0gW11cbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5kaWNpZXMubGVuZ3RoLTE7ICsraSkge1xuICAgICAgICBuc3RlcHMgPSBpbmRpY2llc1tpKzFdIC0gaW5kaWNpZXNbaV07XG4gICAgICAgIGZyb21yZ2JhID0gc3RlcHNbaV07XG4gICAgICAgIHRvcmdiYSA9IHN0ZXBzW2krMV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuc3RlcHM7IGorKykge1xuICAgICAgICAgICAgdmFyIGFtdCA9IGogLyBuc3RlcHNcbiAgICAgICAgICAgIGNvbG9ycy5wdXNoKFtcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGxlcnAoZnJvbXJnYmFbMF0sIHRvcmdiYVswXSwgYW10KSksXG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZChsZXJwKGZyb21yZ2JhWzFdLCB0b3JnYmFbMV0sIGFtdCkpLFxuICAgICAgICAgICAgICAgIE1hdGgucm91bmQobGVycChmcm9tcmdiYVsyXSwgdG9yZ2JhWzJdLCBhbXQpKSxcbiAgICAgICAgICAgICAgICBsZXJwKGZyb21yZ2JhWzNdLCB0b3JnYmFbM10sIGFtdClcbiAgICAgICAgICAgIF0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL2FkZCAxIHN0ZXAgYXMgbGFzdCB2YWx1ZVxuICAgIGNvbG9ycy5wdXNoKGNtYXBbY21hcC5sZW5ndGggLSAxXS5yZ2IuY29uY2F0KGFscGhhWzFdKSlcblxuICAgIGlmIChmb3JtYXQgPT09ICdoZXgnKSBjb2xvcnMgPSBjb2xvcnMubWFwKCByZ2IyaGV4ICk7XG4gICAgZWxzZSBpZiAoZm9ybWF0ID09PSAncmdiYVN0cmluZycpIGNvbG9ycyA9IGNvbG9ycy5tYXAoIHJnYmFTdHIgKTtcbiAgICBlbHNlIGlmIChmb3JtYXQgPT09ICdmbG9hdCcpIGNvbG9ycyA9IGNvbG9ycy5tYXAoIHJnYjJmbG9hdCApO1xuXG4gICAgcmV0dXJuIGNvbG9ycztcbn07XG5cbmZ1bmN0aW9uIHJnYjJmbG9hdCAocmdiYSkge1xuICAgIHJldHVybiBbXG4gICAgICAgIHJnYmFbMF0gLyAyNTUsXG4gICAgICAgIHJnYmFbMV0gLyAyNTUsXG4gICAgICAgIHJnYmFbMl0gLyAyNTUsXG4gICAgICAgIHJnYmFbM11cbiAgICBdXG59XG5cbmZ1bmN0aW9uIHJnYjJoZXggKHJnYmEpIHtcbiAgICB2YXIgZGlnLCBoZXggPSAnIyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyArK2kpIHtcbiAgICAgICAgZGlnID0gcmdiYVtpXTtcbiAgICAgICAgZGlnID0gZGlnLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaGV4ICs9ICgnMDAnICsgZGlnKS5zdWJzdHIoIGRpZy5sZW5ndGggKTtcbiAgICB9XG4gICAgcmV0dXJuIGhleDtcbn1cblxuZnVuY3Rpb24gcmdiYVN0ciAocmdiYSkge1xuICAgIHJldHVybiAncmdiYSgnICsgcmdiYS5qb2luKCcsJykgKyAnKSc7XG59XG4iLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciB1bml0cyA9IFsgJ21tJywgJ2NtJywgJ20nLCAncGMnLCAncHQnLCAnaW4nLCAnZnQnLCAncHgnIF07XG5cbnZhciBjb252ZXJzaW9ucyA9IHtcbiAgLy8gbWV0cmljXG4gIG06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMVxuICB9LFxuICBjbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxIC8gMTAwXG4gIH0sXG4gIG1tOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDAwXG4gIH0sXG4gIC8vIGltcGVyaWFsXG4gIHB0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDcyXG4gIH0sXG4gIHBjOiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDZcbiAgfSxcbiAgaW46IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGZ0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMTJcbiAgfVxufTtcblxuY29uc3QgYW5jaG9ycyA9IHtcbiAgbWV0cmljOiB7XG4gICAgdW5pdDogJ20nLFxuICAgIHJhdGlvOiAxIC8gMC4wMjU0XG4gIH0sXG4gIGltcGVyaWFsOiB7XG4gICAgdW5pdDogJ2luJyxcbiAgICByYXRpbzogMC4wMjU0XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJvdW5kICh2YWx1ZSwgZGVjaW1hbHMpIHtcbiAgcmV0dXJuIE51bWJlcihNYXRoLnJvdW5kKHZhbHVlICsgJ2UnICsgZGVjaW1hbHMpICsgJ2UtJyArIGRlY2ltYWxzKTtcbn1cblxuZnVuY3Rpb24gY29udmVydERpc3RhbmNlICh2YWx1ZSwgZnJvbVVuaXQsIHRvVW5pdCwgb3B0cykge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyJyk7XG4gIGlmICghZnJvbVVuaXQgfHwgIXRvVW5pdCkgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgZnJvbSBhbmQgdG8gdW5pdHMnKTtcblxuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdmFyIHBpeGVsc1BlckluY2ggPSBkZWZpbmVkKG9wdHMucGl4ZWxzUGVySW5jaCwgOTYpO1xuICB2YXIgcHJlY2lzaW9uID0gb3B0cy5wcmVjaXNpb247XG4gIHZhciByb3VuZFBpeGVsID0gb3B0cy5yb3VuZFBpeGVsICE9PSBmYWxzZTtcblxuICBmcm9tVW5pdCA9IGZyb21Vbml0LnRvTG93ZXJDYXNlKCk7XG4gIHRvVW5pdCA9IHRvVW5pdC50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICh1bml0cy5pbmRleE9mKGZyb21Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgZnJvbVVuaXQgKyAnXCIsIG11c3QgYmUgb25lIG9mOiAnICsgdW5pdHMuam9pbignLCAnKSk7XG4gIGlmICh1bml0cy5pbmRleE9mKHRvVW5pdCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZnJvbSB1bml0IFwiJyArIHRvVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcblxuICBpZiAoZnJvbVVuaXQgPT09IHRvVW5pdCkge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY29udmVydCBmcm9tIEEgdG8gQiBzaW5jZSB0aGV5IGFyZSB0aGUgc2FtZSBhbHJlYWR5XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdmFyIHRvRmFjdG9yID0gMTtcbiAgdmFyIGZyb21GYWN0b3IgPSAxO1xuICB2YXIgaXNUb1BpeGVsID0gZmFsc2U7XG5cbiAgaWYgKGZyb21Vbml0ID09PSAncHgnKSB7XG4gICAgZnJvbUZhY3RvciA9IDEgLyBwaXhlbHNQZXJJbmNoO1xuICAgIGZyb21Vbml0ID0gJ2luJztcbiAgfVxuICBpZiAodG9Vbml0ID09PSAncHgnKSB7XG4gICAgaXNUb1BpeGVsID0gdHJ1ZTtcbiAgICB0b0ZhY3RvciA9IHBpeGVsc1BlckluY2g7XG4gICAgdG9Vbml0ID0gJ2luJztcbiAgfVxuXG4gIHZhciBmcm9tVW5pdERhdGEgPSBjb252ZXJzaW9uc1tmcm9tVW5pdF07XG4gIHZhciB0b1VuaXREYXRhID0gY29udmVyc2lvbnNbdG9Vbml0XTtcblxuICAvLyBzb3VyY2UgdG8gYW5jaG9yIGluc2lkZSBzb3VyY2UncyBzeXN0ZW1cbiAgdmFyIGFuY2hvciA9IHZhbHVlICogZnJvbVVuaXREYXRhLmZhY3RvciAqIGZyb21GYWN0b3I7XG5cbiAgLy8gaWYgc3lzdGVtcyBkaWZmZXIsIGNvbnZlcnQgb25lIHRvIGFub3RoZXJcbiAgaWYgKGZyb21Vbml0RGF0YS5zeXN0ZW0gIT09IHRvVW5pdERhdGEuc3lzdGVtKSB7XG4gICAgLy8gcmVndWxhciAnbScgdG8gJ2luJyBhbmQgc28gZm9ydGhcbiAgICBhbmNob3IgKj0gYW5jaG9yc1tmcm9tVW5pdERhdGEuc3lzdGVtXS5yYXRpbztcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBhbmNob3IgLyB0b1VuaXREYXRhLmZhY3RvciAqIHRvRmFjdG9yO1xuICBpZiAoaXNUb1BpeGVsICYmIHJvdW5kUGl4ZWwpIHtcbiAgICByZXN1bHQgPSBNYXRoLnJvdW5kKHJlc3VsdCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByZWNpc2lvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUocHJlY2lzaW9uKSkge1xuICAgIHJlc3VsdCA9IHJvdW5kKHJlc3VsdCwgcHJlY2lzaW9uKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnREaXN0YW5jZTtcbm1vZHVsZS5leHBvcnRzLnVuaXRzID0gdW5pdHM7XG4iLCIvLyBodHRwczovL2QzanMub3JnL2QzLXBhdGgvIHYxLjAuOSBDb3B5cmlnaHQgMjAxOSBNaWtlIEJvc3RvY2tcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG50eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbnR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuKGdsb2JhbCA9IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5kMyA9IGdsb2JhbC5kMyB8fCB7fSkpO1xufSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbnZhciBwaSA9IE1hdGguUEksXG4gICAgdGF1ID0gMiAqIHBpLFxuICAgIGVwc2lsb24gPSAxZS02LFxuICAgIHRhdUVwc2lsb24gPSB0YXUgLSBlcHNpbG9uO1xuXG5mdW5jdGlvbiBQYXRoKCkge1xuICB0aGlzLl94MCA9IHRoaXMuX3kwID0gLy8gc3RhcnQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuX3gxID0gdGhpcy5feTEgPSBudWxsOyAvLyBlbmQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuXyA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHBhdGgoKSB7XG4gIHJldHVybiBuZXcgUGF0aDtcbn1cblxuUGF0aC5wcm90b3R5cGUgPSBwYXRoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFBhdGgsXG4gIG1vdmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MCA9IHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTAgPSB0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgY2xvc2VQYXRoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5feDEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3gxID0gdGhpcy5feDAsIHRoaXMuX3kxID0gdGhpcy5feTA7XG4gICAgICB0aGlzLl8gKz0gXCJaXCI7XG4gICAgfVxuICB9LFxuICBsaW5lVG86IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJMXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgcXVhZHJhdGljQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiUVwiICsgKCt4MSkgKyBcIixcIiArICgreTEpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYmV6aWVyQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJDXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICgreDIpICsgXCIsXCIgKyAoK3kyKSArIFwiLFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGFyY1RvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5Miwgcikge1xuICAgIHgxID0gK3gxLCB5MSA9ICt5MSwgeDIgPSAreDIsIHkyID0gK3kyLCByID0gK3I7XG4gICAgdmFyIHgwID0gdGhpcy5feDEsXG4gICAgICAgIHkwID0gdGhpcy5feTEsXG4gICAgICAgIHgyMSA9IHgyIC0geDEsXG4gICAgICAgIHkyMSA9IHkyIC0geTEsXG4gICAgICAgIHgwMSA9IHgwIC0geDEsXG4gICAgICAgIHkwMSA9IHkwIC0geTEsXG4gICAgICAgIGwwMV8yID0geDAxICogeDAxICsgeTAxICogeTAxO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiICsgcik7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgxLHkxKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDAseTApPyBEbyBub3RoaW5nLlxuICAgIGVsc2UgaWYgKCEobDAxXzIgPiBlcHNpbG9uKSk7XG5cbiAgICAvLyBPciwgYXJlICh4MCx5MCksICh4MSx5MSkgYW5kICh4Mix5MikgY29sbGluZWFyP1xuICAgIC8vIEVxdWl2YWxlbnRseSwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgyLHkyKT9cbiAgICAvLyBPciwgaXMgdGhlIHJhZGl1cyB6ZXJvPyBMaW5lIHRvICh4MSx5MSkuXG4gICAgZWxzZSBpZiAoIShNYXRoLmFicyh5MDEgKiB4MjEgLSB5MjEgKiB4MDEpID4gZXBzaWxvbikgfHwgIXIpIHtcbiAgICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgZHJhdyBhbiBhcmMhXG4gICAgZWxzZSB7XG4gICAgICB2YXIgeDIwID0geDIgLSB4MCxcbiAgICAgICAgICB5MjAgPSB5MiAtIHkwLFxuICAgICAgICAgIGwyMV8yID0geDIxICogeDIxICsgeTIxICogeTIxLFxuICAgICAgICAgIGwyMF8yID0geDIwICogeDIwICsgeTIwICogeTIwLFxuICAgICAgICAgIGwyMSA9IE1hdGguc3FydChsMjFfMiksXG4gICAgICAgICAgbDAxID0gTWF0aC5zcXJ0KGwwMV8yKSxcbiAgICAgICAgICBsID0gciAqIE1hdGgudGFuKChwaSAtIE1hdGguYWNvcygobDIxXzIgKyBsMDFfMiAtIGwyMF8yKSAvICgyICogbDIxICogbDAxKSkpIC8gMiksXG4gICAgICAgICAgdDAxID0gbCAvIGwwMSxcbiAgICAgICAgICB0MjEgPSBsIC8gbDIxO1xuXG4gICAgICAvLyBJZiB0aGUgc3RhcnQgdGFuZ2VudCBpcyBub3QgY29pbmNpZGVudCB3aXRoICh4MCx5MCksIGxpbmUgdG8uXG4gICAgICBpZiAoTWF0aC5hYnModDAxIC0gMSkgPiBlcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuXyArPSBcIkxcIiArICh4MSArIHQwMSAqIHgwMSkgKyBcIixcIiArICh5MSArIHQwMSAqIHkwMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDAsXCIgKyAoKyh5MDEgKiB4MjAgPiB4MDEgKiB5MjApKSArIFwiLFwiICsgKHRoaXMuX3gxID0geDEgKyB0MjEgKiB4MjEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSArIHQyMSAqIHkyMSk7XG4gICAgfVxuICB9LFxuICBhcmM6IGZ1bmN0aW9uKHgsIHksIHIsIGEwLCBhMSwgY2N3KSB7XG4gICAgeCA9ICt4LCB5ID0gK3ksIHIgPSArciwgY2N3ID0gISFjY3c7XG4gICAgdmFyIGR4ID0gciAqIE1hdGguY29zKGEwKSxcbiAgICAgICAgZHkgPSByICogTWF0aC5zaW4oYTApLFxuICAgICAgICB4MCA9IHggKyBkeCxcbiAgICAgICAgeTAgPSB5ICsgZHksXG4gICAgICAgIGN3ID0gMSBeIGNjdyxcbiAgICAgICAgZGEgPSBjY3cgPyBhMCAtIGExIDogYTEgLSBhMDtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIiArIHIpO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MCx5MCkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl8gKz0gXCJNXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MCx5MCkgbm90IGNvaW5jaWRlbnQgd2l0aCB0aGUgcHJldmlvdXMgcG9pbnQ/IExpbmUgdG8gKHgwLHkwKS5cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLl94MSAtIHgwKSA+IGVwc2lsb24gfHwgTWF0aC5hYnModGhpcy5feTEgLSB5MCkgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgZW1wdHk/IFdl4oCZcmUgZG9uZS5cbiAgICBpZiAoIXIpIHJldHVybjtcblxuICAgIC8vIERvZXMgdGhlIGFuZ2xlIGdvIHRoZSB3cm9uZyB3YXk/IEZsaXAgdGhlIGRpcmVjdGlvbi5cbiAgICBpZiAoZGEgPCAwKSBkYSA9IGRhICUgdGF1ICsgdGF1O1xuXG4gICAgLy8gSXMgdGhpcyBhIGNvbXBsZXRlIGNpcmNsZT8gRHJhdyB0d28gYXJjcyB0byBjb21wbGV0ZSB0aGUgY2lyY2xlLlxuICAgIGlmIChkYSA+IHRhdUVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDEsXCIgKyBjdyArIFwiLFwiICsgKHggLSBkeCkgKyBcIixcIiArICh5IC0gZHkpICsgXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh0aGlzLl94MSA9IHgwKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTApO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIG5vbi1lbXB0eT8gRHJhdyBhbiBhcmMhXG4gICAgZWxzZSBpZiAoZGEgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCxcIiArICgrKGRhID49IHBpKSkgKyBcIixcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4ICsgciAqIE1hdGguY29zKGExKSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkgKyByICogTWF0aC5zaW4oYTEpKTtcbiAgICB9XG4gIH0sXG4gIHJlY3Q6IGZ1bmN0aW9uKHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDAgPSB0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kwID0gdGhpcy5feTEgPSAreSkgKyBcImhcIiArICgrdykgKyBcInZcIiArICgraCkgKyBcImhcIiArICgtdykgKyBcIlpcIjtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl87XG4gIH1cbn07XG5cbmV4cG9ydHMucGF0aCA9IHBhdGg7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHNbaV0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGFyZ3VtZW50c1tpXTtcbiAgICB9XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBoc2wycmdiXG5mdW5jdGlvbiBoc2wycmdiIChoc2wpIHtcbiAgdmFyIGggPSBoc2xbMF0sXG4gICAgcyA9IGhzbFsxXSxcbiAgICBsID0gaHNsWzJdLFxuICAgIHQxLCB0MiwgdDMsIHJnYiwgdmFsXG5cbiAgaWYgKHMgPT09IDApIHtcbiAgICB2YWwgPSBsXG4gICAgcmV0dXJuIFt2YWwsIHZhbCwgdmFsXVxuICB9XG5cbiAgaWYgKGwgPCAwLjUpIHtcbiAgICB0MiA9IGwgKiAoMSArIHMpXG4gIH0gZWxzZSB7XG4gICAgdDIgPSBsICsgcyAtIGwgKiBzXG4gIH1cbiAgdDEgPSAyICogbCAtIHQyXG5cbiAgcmdiID0gWzAsIDAsIDBdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgdDMgPSBoICsgMSAvIDMgKiAtKGkgLSAxKVxuICAgIGlmICh0MyA8IDApIHtcbiAgICAgIHQzKytcbiAgICB9XG4gICAgaWYgKHQzID4gMSkge1xuICAgICAgdDMtLVxuICAgIH1cblxuICAgIGlmICg2ICogdDMgPCAxKSB7XG4gICAgICB2YWwgPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0M1xuICAgIH0gZWxzZSBpZiAoMiAqIHQzIDwgMSkge1xuICAgICAgdmFsID0gdDJcbiAgICB9IGVsc2UgaWYgKDMgKiB0MyA8IDIpIHtcbiAgICAgIHZhbCA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDMpICogNlxuICAgIH0gZWxzZSB7XG4gICAgICB2YWwgPSB0MVxuICAgIH1cblxuICAgIHJnYltpXSA9IHZhbFxuICB9XG5cbiAgcmV0dXJuIHJnYlxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZ2IyaHNsXG5mdW5jdGlvbiByZ2IyaHNsIChyZ2IpIHtcbiAgdmFyIHIgPSByZ2JbMF0sXG4gICAgZyA9IHJnYlsxXSxcbiAgICBiID0gcmdiWzJdLFxuICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgIGRlbHRhID0gbWF4IC0gbWluLFxuICAgIGgsIHMsIGxcblxuICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICBoID0gMFxuICB9IGVsc2UgaWYgKHIgPT09IG1heCkge1xuICAgIGggPSAoZyAtIGIpIC8gZGVsdGFcbiAgfSBlbHNlIGlmIChnID09PSBtYXgpIHtcbiAgICBoID0gMiArIChiIC0gcikgLyBkZWx0YVxuICB9IGVsc2UgaWYgKGIgPT09IG1heCkge1xuICAgIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhXG4gIH1cblxuICBoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApXG5cbiAgaWYgKGggPCAwKSB7XG4gICAgaCArPSAzNjBcbiAgfVxuXG4gIGwgPSAobWluICsgbWF4KSAvIDJcblxuICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICBzID0gMFxuICB9IGVsc2UgaWYgKGwgPD0gMC41KSB7XG4gICAgcyA9IGRlbHRhIC8gKG1heCArIG1pbilcbiAgfSBlbHNlIHtcbiAgICBzID0gZGVsdGEgLyAoMiAtIG1heCAtIG1pbilcbiAgfVxuXG4gIHJldHVybiBbaCAvIDM2MCwgcywgbF1cbn1cbiIsImZ1bmN0aW9uIGxlcnAodjAsIHYxLCB0KSB7XG4gICAgcmV0dXJuIHYwKigxLXQpK3YxKnRcbn1cbm1vZHVsZS5leHBvcnRzID0gbGVycCIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBsaW5lY2xpcDtcblxubGluZWNsaXAucG9seWxpbmUgPSBsaW5lY2xpcDtcbmxpbmVjbGlwLnBvbHlnb24gPSBwb2x5Z29uY2xpcDtcblxuXG4vLyBDb2hlbi1TdXRoZXJsYW5kIGxpbmUgY2xpcHBpZ24gYWxnb3JpdGhtLCBhZGFwdGVkIHRvIGVmZmljaWVudGx5XG4vLyBoYW5kbGUgcG9seWxpbmVzIHJhdGhlciB0aGFuIGp1c3Qgc2VnbWVudHNcblxuZnVuY3Rpb24gbGluZWNsaXAocG9pbnRzLCBiYm94LCByZXN1bHQpIHtcblxuICAgIHZhciBsZW4gPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBjb2RlQSA9IGJpdENvZGUocG9pbnRzWzBdLCBiYm94KSxcbiAgICAgICAgcGFydCA9IFtdLFxuICAgICAgICBpLCBhLCBiLCBjb2RlQiwgbGFzdENvZGU7XG5cbiAgICBpZiAoIXJlc3VsdCkgcmVzdWx0ID0gW107XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgYSA9IHBvaW50c1tpIC0gMV07XG4gICAgICAgIGIgPSBwb2ludHNbaV07XG4gICAgICAgIGNvZGVCID0gbGFzdENvZGUgPSBiaXRDb2RlKGIsIGJib3gpO1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG5cbiAgICAgICAgICAgIGlmICghKGNvZGVBIHwgY29kZUIpKSB7IC8vIGFjY2VwdFxuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhKTtcblxuICAgICAgICAgICAgICAgIGlmIChjb2RlQiAhPT0gbGFzdENvZGUpIHsgLy8gc2VnbWVudCB3ZW50IG91dHNpZGVcbiAgICAgICAgICAgICAgICAgICAgcGFydC5wdXNoKGIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgbGVuIC0gMSkgeyAvLyBzdGFydCBhIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gbGVuIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVBICYgY29kZUIpIHsgLy8gdHJpdmlhbCByZWplY3RcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlQSkgeyAvLyBhIG91dHNpZGUsIGludGVyc2VjdCB3aXRoIGNsaXAgZWRnZVxuICAgICAgICAgICAgICAgIGEgPSBpbnRlcnNlY3QoYSwgYiwgY29kZUEsIGJib3gpO1xuICAgICAgICAgICAgICAgIGNvZGVBID0gYml0Q29kZShhLCBiYm94KTtcblxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gYiBvdXRzaWRlXG4gICAgICAgICAgICAgICAgYiA9IGludGVyc2VjdChhLCBiLCBjb2RlQiwgYmJveCk7XG4gICAgICAgICAgICAgICAgY29kZUIgPSBiaXRDb2RlKGIsIGJib3gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29kZUEgPSBsYXN0Q29kZTtcbiAgICB9XG5cbiAgICBpZiAocGFydC5sZW5ndGgpIHJlc3VsdC5wdXNoKHBhcnQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gU3V0aGVybGFuZC1Ib2RnZW1hbiBwb2x5Z29uIGNsaXBwaW5nIGFsZ29yaXRobVxuXG5mdW5jdGlvbiBwb2x5Z29uY2xpcChwb2ludHMsIGJib3gpIHtcblxuICAgIHZhciByZXN1bHQsIGVkZ2UsIHByZXYsIHByZXZJbnNpZGUsIGksIHAsIGluc2lkZTtcblxuICAgIC8vIGNsaXAgYWdhaW5zdCBlYWNoIHNpZGUgb2YgdGhlIGNsaXAgcmVjdGFuZ2xlXG4gICAgZm9yIChlZGdlID0gMTsgZWRnZSA8PSA4OyBlZGdlICo9IDIpIHtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIHByZXYgPSBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBwcmV2SW5zaWRlID0gIShiaXRDb2RlKHByZXYsIGJib3gpICYgZWRnZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcCA9IHBvaW50c1tpXTtcbiAgICAgICAgICAgIGluc2lkZSA9ICEoYml0Q29kZShwLCBiYm94KSAmIGVkZ2UpO1xuXG4gICAgICAgICAgICAvLyBpZiBzZWdtZW50IGdvZXMgdGhyb3VnaCB0aGUgY2xpcCB3aW5kb3csIGFkZCBhbiBpbnRlcnNlY3Rpb25cbiAgICAgICAgICAgIGlmIChpbnNpZGUgIT09IHByZXZJbnNpZGUpIHJlc3VsdC5wdXNoKGludGVyc2VjdChwcmV2LCBwLCBlZGdlLCBiYm94KSk7XG5cbiAgICAgICAgICAgIGlmIChpbnNpZGUpIHJlc3VsdC5wdXNoKHApOyAvLyBhZGQgYSBwb2ludCBpZiBpdCdzIGluc2lkZVxuXG4gICAgICAgICAgICBwcmV2ID0gcDtcbiAgICAgICAgICAgIHByZXZJbnNpZGUgPSBpbnNpZGU7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSByZXN1bHQ7XG5cbiAgICAgICAgaWYgKCFwb2ludHMubGVuZ3RoKSBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBpbnRlcnNlY3QgYSBzZWdtZW50IGFnYWluc3Qgb25lIG9mIHRoZSA0IGxpbmVzIHRoYXQgbWFrZSB1cCB0aGUgYmJveFxuXG5mdW5jdGlvbiBpbnRlcnNlY3QoYSwgYiwgZWRnZSwgYmJveCkge1xuICAgIHJldHVybiBlZGdlICYgOCA/IFthWzBdICsgKGJbMF0gLSBhWzBdKSAqIChiYm94WzNdIC0gYVsxXSkgLyAoYlsxXSAtIGFbMV0pLCBiYm94WzNdXSA6IC8vIHRvcFxuICAgICAgICAgICBlZGdlICYgNCA/IFthWzBdICsgKGJbMF0gLSBhWzBdKSAqIChiYm94WzFdIC0gYVsxXSkgLyAoYlsxXSAtIGFbMV0pLCBiYm94WzFdXSA6IC8vIGJvdHRvbVxuICAgICAgICAgICBlZGdlICYgMiA/IFtiYm94WzJdLCBhWzFdICsgKGJbMV0gLSBhWzFdKSAqIChiYm94WzJdIC0gYVswXSkgLyAoYlswXSAtIGFbMF0pXSA6IC8vIHJpZ2h0XG4gICAgICAgICAgIGVkZ2UgJiAxID8gW2Jib3hbMF0sIGFbMV0gKyAoYlsxXSAtIGFbMV0pICogKGJib3hbMF0gLSBhWzBdKSAvIChiWzBdIC0gYVswXSldIDogLy8gbGVmdFxuICAgICAgICAgICBudWxsO1xufVxuXG4vLyBiaXQgY29kZSByZWZsZWN0cyB0aGUgcG9pbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGJib3g6XG5cbi8vICAgICAgICAgbGVmdCAgbWlkICByaWdodFxuLy8gICAgdG9wICAxMDAxICAxMDAwICAxMDEwXG4vLyAgICBtaWQgIDAwMDEgIDAwMDAgIDAwMTBcbi8vIGJvdHRvbSAgMDEwMSAgMDEwMCAgMDExMFxuXG5mdW5jdGlvbiBiaXRDb2RlKHAsIGJib3gpIHtcbiAgICB2YXIgY29kZSA9IDA7XG5cbiAgICBpZiAocFswXSA8IGJib3hbMF0pIGNvZGUgfD0gMTsgLy8gbGVmdFxuICAgIGVsc2UgaWYgKHBbMF0gPiBiYm94WzJdKSBjb2RlIHw9IDI7IC8vIHJpZ2h0XG5cbiAgICBpZiAocFsxXSA8IGJib3hbMV0pIGNvZGUgfD0gNDsgLy8gYm90dG9tXG4gICAgZWxzZSBpZiAocFsxXSA+IGJib3hbM10pIGNvZGUgfD0gODsgLy8gdG9wXG5cbiAgICByZXR1cm4gY29kZTtcbn1cbiIsIid1c2Ugc3RyaWN0J1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBub3JtYWxpemVcclxuXHJcbnZhciBhcmNUb0N1cnZlID0gcmVxdWlyZSgnc3ZnLWFyYy10by1jdWJpYy1iZXppZXInKVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplKHBhdGgpe1xyXG4gIC8vIGluaXQgc3RhdGVcclxuICB2YXIgcHJldlxyXG4gIHZhciByZXN1bHQgPSBbXVxyXG4gIHZhciBiZXppZXJYID0gMFxyXG4gIHZhciBiZXppZXJZID0gMFxyXG4gIHZhciBzdGFydFggPSAwXHJcbiAgdmFyIHN0YXJ0WSA9IDBcclxuICB2YXIgcXVhZFggPSBudWxsXHJcbiAgdmFyIHF1YWRZID0gbnVsbFxyXG4gIHZhciB4ID0gMFxyXG4gIHZhciB5ID0gMFxyXG5cclxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGF0aC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgdmFyIHNlZyA9IHBhdGhbaV1cclxuICAgIHZhciBjb21tYW5kID0gc2VnWzBdXHJcblxyXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XHJcbiAgICAgIGNhc2UgJ00nOlxyXG4gICAgICAgIHN0YXJ0WCA9IHNlZ1sxXVxyXG4gICAgICAgIHN0YXJ0WSA9IHNlZ1syXVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgIHZhciBjdXJ2ZXMgPSBhcmNUb0N1cnZlKHtcclxuICAgICAgICAgIHB4OiB4LFxyXG4gICAgICAgICAgcHk6IHksXHJcbiAgICAgICAgICBjeDogc2VnWzZdLFxyXG4gICAgICAgICAgY3k6ICBzZWdbN10sXHJcbiAgICAgICAgICByeDogc2VnWzFdLFxyXG4gICAgICAgICAgcnk6IHNlZ1syXSxcclxuICAgICAgICAgIHhBeGlzUm90YXRpb246IHNlZ1szXSxcclxuICAgICAgICAgIGxhcmdlQXJjRmxhZzogc2VnWzRdLFxyXG4gICAgICAgICAgc3dlZXBGbGFnOiBzZWdbNV1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICAvLyBudWxsLWN1cnZlc1xyXG4gICAgICAgIGlmICghY3VydmVzLmxlbmd0aCkgY29udGludWVcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGM7IGogPCBjdXJ2ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGMgPSBjdXJ2ZXNbal1cclxuICAgICAgICAgIHNlZyA9IFsnQycsIGMueDEsIGMueTEsIGMueDIsIGMueTIsIGMueCwgYy55XVxyXG4gICAgICAgICAgaWYgKGogPCBjdXJ2ZXMubGVuZ3RoIC0gMSkgcmVzdWx0LnB1c2goc2VnKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnUyc6XHJcbiAgICAgICAgLy8gZGVmYXVsdCBjb250cm9sIHBvaW50XHJcbiAgICAgICAgdmFyIGN4ID0geFxyXG4gICAgICAgIHZhciBjeSA9IHlcclxuICAgICAgICBpZiAocHJldiA9PSAnQycgfHwgcHJldiA9PSAnUycpIHtcclxuICAgICAgICAgIGN4ICs9IGN4IC0gYmV6aWVyWCAvLyByZWZsZWN0IHRoZSBwcmV2aW91cyBjb21tYW5kJ3MgY29udHJvbFxyXG4gICAgICAgICAgY3kgKz0gY3kgLSBiZXppZXJZIC8vIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvaW50XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlZyA9IFsnQycsIGN4LCBjeSwgc2VnWzFdLCBzZWdbMl0sIHNlZ1szXSwgc2VnWzRdXVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ1QnOlxyXG4gICAgICAgIGlmIChwcmV2ID09ICdRJyB8fCBwcmV2ID09ICdUJykge1xyXG4gICAgICAgICAgcXVhZFggPSB4ICogMiAtIHF1YWRYIC8vIGFzIHdpdGggJ1MnIHJlZmxlY3QgcHJldmlvdXMgY29udHJvbCBwb2ludFxyXG4gICAgICAgICAgcXVhZFkgPSB5ICogMiAtIHF1YWRZXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHF1YWRYID0geFxyXG4gICAgICAgICAgcXVhZFkgPSB5XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlZyA9IHF1YWRyYXRpYyh4LCB5LCBxdWFkWCwgcXVhZFksIHNlZ1sxXSwgc2VnWzJdKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ1EnOlxyXG4gICAgICAgIHF1YWRYID0gc2VnWzFdXHJcbiAgICAgICAgcXVhZFkgPSBzZWdbMl1cclxuICAgICAgICBzZWcgPSBxdWFkcmF0aWMoeCwgeSwgc2VnWzFdLCBzZWdbMl0sIHNlZ1szXSwgc2VnWzRdKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ0wnOlxyXG4gICAgICAgIHNlZyA9IGxpbmUoeCwgeSwgc2VnWzFdLCBzZWdbMl0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnSCc6XHJcbiAgICAgICAgc2VnID0gbGluZSh4LCB5LCBzZWdbMV0sIHkpXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnVic6XHJcbiAgICAgICAgc2VnID0gbGluZSh4LCB5LCB4LCBzZWdbMV0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnWic6XHJcbiAgICAgICAgc2VnID0gbGluZSh4LCB5LCBzdGFydFgsIHN0YXJ0WSlcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHVwZGF0ZSBzdGF0ZVxyXG4gICAgcHJldiA9IGNvbW1hbmRcclxuICAgIHggPSBzZWdbc2VnLmxlbmd0aCAtIDJdXHJcbiAgICB5ID0gc2VnW3NlZy5sZW5ndGggLSAxXVxyXG4gICAgaWYgKHNlZy5sZW5ndGggPiA0KSB7XHJcbiAgICAgIGJlemllclggPSBzZWdbc2VnLmxlbmd0aCAtIDRdXHJcbiAgICAgIGJlemllclkgPSBzZWdbc2VnLmxlbmd0aCAtIDNdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiZXppZXJYID0geFxyXG4gICAgICBiZXppZXJZID0geVxyXG4gICAgfVxyXG4gICAgcmVzdWx0LnB1c2goc2VnKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdFxyXG59XHJcblxyXG5mdW5jdGlvbiBsaW5lKHgxLCB5MSwgeDIsIHkyKXtcclxuICByZXR1cm4gWydDJywgeDEsIHkxLCB4MiwgeTIsIHgyLCB5Ml1cclxufVxyXG5cclxuZnVuY3Rpb24gcXVhZHJhdGljKHgxLCB5MSwgY3gsIGN5LCB4MiwgeTIpe1xyXG4gIHJldHVybiBbXHJcbiAgICAnQycsXHJcbiAgICB4MS8zICsgKDIvMykgKiBjeCxcclxuICAgIHkxLzMgKyAoMi8zKSAqIGN5LFxyXG4gICAgeDIvMyArICgyLzMpICogY3gsXHJcbiAgICB5Mi8zICsgKDIvMykgKiBjeSxcclxuICAgIHgyLFxyXG4gICAgeTJcclxuICBdXHJcbn1cclxuIiwidmFyIGNvbnZlcnQgPSByZXF1aXJlKCdjb2xvci1jb252ZXJ0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzdHIpIHtcbiAgICB2YXIgbSwgY29udiwgcGFydHMsIGFscGhhO1xuICAgIGlmIChtID0gL14oKD86cmdifGhzW2x2XXxjbXlrfHh5enxsYWIpYT8pXFxzKlxcKChbXlxcKV0qKVxcKS8uZXhlYyhjc3RyKSkge1xuICAgICAgICB2YXIgbmFtZSA9IG1bMV07XG4gICAgICAgIHZhciBiYXNlID0gbmFtZS5yZXBsYWNlKC9hJC8sICcnKTtcbiAgICAgICAgdmFyIHNpemUgPSBiYXNlID09PSAnY215aycgPyA0IDogMztcbiAgICAgICAgY29udiA9IGNvbnZlcnRbYmFzZV07XG4gICAgICAgIFxuICAgICAgICBwYXJ0cyA9IG1bMl0ucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG4gICAgICAgICAgICAuc3BsaXQoL1xccyosXFxzKi8pXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKC8lJC8udGVzdCh4KSAmJiBpID09PSBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHgpIC8gMTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgvJSQvLnRlc3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgO1xuICAgICAgICBpZiAobmFtZSA9PT0gYmFzZSkgcGFydHMucHVzaCgxKTtcbiAgICAgICAgYWxwaGEgPSBwYXJ0c1tzaXplXSA9PT0gdW5kZWZpbmVkID8gMSA6IHBhcnRzW3NpemVdO1xuICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDAsIHNpemUpO1xuICAgICAgICBcbiAgICAgICAgY29udltiYXNlXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhcnRzIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKC9eI1tBLUZhLWYwLTldKyQvLnRlc3QoY3N0cikpIHtcbiAgICAgICAgdmFyIGJhc2UgPSBjc3RyLnJlcGxhY2UoL14jLywnJyk7XG4gICAgICAgIHZhciBzaXplID0gYmFzZS5sZW5ndGg7XG4gICAgICAgIGNvbnYgPSBjb252ZXJ0LnJnYjtcbiAgICAgICAgcGFydHMgPSBiYXNlLnNwbGl0KHNpemUgPT09IDMgPyAvKC4pLyA6IC8oLi4pLyk7XG4gICAgICAgIHBhcnRzID0gcGFydHMuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgaWYgKHNpemUgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHggKyB4LCAxNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoeCwgMTYpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgO1xuICAgICAgICBhbHBoYSA9IDE7XG4gICAgICAgIGNvbnYucmdiID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcGFydHMgfTtcbiAgICAgICAgaWYgKCFwYXJ0c1swXSkgcGFydHNbMF0gPSAwO1xuICAgICAgICBpZiAoIXBhcnRzWzFdKSBwYXJ0c1sxXSA9IDA7XG4gICAgICAgIGlmICghcGFydHNbMl0pIHBhcnRzWzJdID0gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnYgPSBjb252ZXJ0LmtleXdvcmQ7XG4gICAgICAgIGNvbnYua2V5d29yZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNzdHIgfTtcbiAgICAgICAgcGFydHMgPSBjc3RyO1xuICAgICAgICBhbHBoYSA9IDE7XG4gICAgfVxuICAgIFxuICAgIHZhciByZXMgPSB7XG4gICAgICAgIHJnYjogdW5kZWZpbmVkLFxuICAgICAgICBoc2w6IHVuZGVmaW5lZCxcbiAgICAgICAgaHN2OiB1bmRlZmluZWQsXG4gICAgICAgIGNteWs6IHVuZGVmaW5lZCxcbiAgICAgICAga2V5d29yZDogdW5kZWZpbmVkLFxuICAgICAgICBoZXg6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgdHJ5IHsgcmVzLnJnYiA9IGNvbnYucmdiKHBhcnRzKSB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7IHJlcy5oc2wgPSBjb252LmhzbChwYXJ0cykgfSBjYXRjaCAoZSkge31cbiAgICB0cnkgeyByZXMuaHN2ID0gY29udi5oc3YocGFydHMpIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHsgcmVzLmNteWsgPSBjb252LmNteWsocGFydHMpIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHsgcmVzLmtleXdvcmQgPSBjb252LmtleXdvcmQocGFydHMpIH0gY2F0Y2ggKGUpIHt9XG4gICAgXG4gICAgaWYgKHJlcy5yZ2IpIHJlcy5oZXggPSAnIycgKyByZXMucmdiLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgICB2YXIgcyA9IHgudG9TdHJpbmcoMTYpO1xuICAgICAgICBpZiAocy5sZW5ndGggPT09IDEpIHJldHVybiAnMCcgKyBzO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9KS5qb2luKCcnKTtcbiAgICBcbiAgICBpZiAocmVzLnJnYikgcmVzLnJnYmEgPSByZXMucmdiLmNvbmNhdChhbHBoYSk7XG4gICAgaWYgKHJlcy5oc2wpIHJlcy5oc2xhID0gcmVzLmhzbC5jb25jYXQoYWxwaGEpO1xuICAgIGlmIChyZXMuaHN2KSByZXMuaHN2YSA9IHJlcy5oc3YuY29uY2F0KGFscGhhKTtcbiAgICBpZiAocmVzLmNteWspIHJlcy5jbXlrYSA9IHJlcy5jbXlrLmNvbmNhdChhbHBoYSk7XG4gICAgXG4gICAgcmV0dXJuIHJlcztcbn07XG4iLCJcbm1vZHVsZS5leHBvcnRzID0gcGFyc2VcblxuLyoqXG4gKiBleHBlY3RlZCBhcmd1bWVudCBsZW5ndGhzXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbnZhciBsZW5ndGggPSB7YTogNywgYzogNiwgaDogMSwgbDogMiwgbTogMiwgcTogNCwgczogNCwgdDogMiwgdjogMSwgejogMH1cblxuLyoqXG4gKiBzZWdtZW50IHBhdHRlcm5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cblxudmFyIHNlZ21lbnQgPSAvKFthc3R2enFtaGxjXSkoW15hc3R2enFtaGxjXSopL2lnXG5cbi8qKlxuICogcGFyc2UgYW4gc3ZnIHBhdGggZGF0YSBzdHJpbmcuIEdlbmVyYXRlcyBhbiBBcnJheVxuICogb2YgY29tbWFuZHMgd2hlcmUgZWFjaCBjb21tYW5kIGlzIGFuIEFycmF5IG9mIHRoZVxuICogZm9ybSBgW2NvbW1hbmQsIGFyZzEsIGFyZzIsIC4uLl1gXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHBhdGgpIHtcblx0dmFyIGRhdGEgPSBbXVxuXHRwYXRoLnJlcGxhY2Uoc2VnbWVudCwgZnVuY3Rpb24oXywgY29tbWFuZCwgYXJncyl7XG5cdFx0dmFyIHR5cGUgPSBjb21tYW5kLnRvTG93ZXJDYXNlKClcblx0XHRhcmdzID0gcGFyc2VWYWx1ZXMoYXJncylcblxuXHRcdC8vIG92ZXJsb2FkZWQgbW92ZVRvXG5cdFx0aWYgKHR5cGUgPT0gJ20nICYmIGFyZ3MubGVuZ3RoID4gMikge1xuXHRcdFx0ZGF0YS5wdXNoKFtjb21tYW5kXS5jb25jYXQoYXJncy5zcGxpY2UoMCwgMikpKVxuXHRcdFx0dHlwZSA9ICdsJ1xuXHRcdFx0Y29tbWFuZCA9IGNvbW1hbmQgPT0gJ20nID8gJ2wnIDogJ0wnXG5cdFx0fVxuXG5cdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PSBsZW5ndGhbdHlwZV0pIHtcblx0XHRcdFx0YXJncy51bnNoaWZ0KGNvbW1hbmQpXG5cdFx0XHRcdHJldHVybiBkYXRhLnB1c2goYXJncylcblx0XHRcdH1cblx0XHRcdGlmIChhcmdzLmxlbmd0aCA8IGxlbmd0aFt0eXBlXSkgdGhyb3cgbmV3IEVycm9yKCdtYWxmb3JtZWQgcGF0aCBkYXRhJylcblx0XHRcdGRhdGEucHVzaChbY29tbWFuZF0uY29uY2F0KGFyZ3Muc3BsaWNlKDAsIGxlbmd0aFt0eXBlXSkpKVxuXHRcdH1cblx0fSlcblx0cmV0dXJuIGRhdGFcbn1cblxudmFyIG51bWJlciA9IC8tP1swLTldKlxcLj9bMC05XSsoPzplWy0rXT9cXGQrKT8vaWdcblxuZnVuY3Rpb24gcGFyc2VWYWx1ZXMoYXJncykge1xuXHR2YXIgbnVtYmVycyA9IGFyZ3MubWF0Y2gobnVtYmVyKVxuXHRyZXR1cm4gbnVtYmVycyA/IG51bWJlcnMubWFwKE51bWJlcikgOiBbXVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBwcmltaXRpdmVRdWFkXG5cbmZ1bmN0aW9uIHByaW1pdGl2ZVF1YWQgKHNjYWxlKSB7XG4gIHNjYWxlID0gdHlwZW9mIHNjYWxlICE9PSAndW5kZWZpbmVkJyA/IHNjYWxlIDogMVxuICBpZiAoIUFycmF5LmlzQXJyYXkoc2NhbGUpKSB7XG4gICAgc2NhbGUgPSBbc2NhbGUsIHNjYWxlXVxuICB9XG5cbiAgdmFyIHBvc2l0aW9ucyA9IFtcbiAgICBbLXNjYWxlWzBdLCAtc2NhbGVbMV0sIDBdLFxuICAgIFtzY2FsZVswXSwgLXNjYWxlWzFdLCAwXSxcbiAgICBbc2NhbGVbMF0sIHNjYWxlWzFdLCAwXSxcbiAgICBbLXNjYWxlWzBdLCBzY2FsZVsxXSwgMF1cbiAgXVxuICB2YXIgY2VsbHMgPSBbXG4gICAgWzAsIDEsIDJdLFxuICAgIFsyLCAzLCAwXVxuICBdXG4gIHZhciB1dnMgPSBbWzAsIDBdLCBbMSwgMF0sIFsxLCAxXSwgWzAsIDFdXVxuICB2YXIgbiA9IFswLCAwLCAtMV1cbiAgdmFyIG5vcm1hbHMgPSBbIG4uc2xpY2UoKSwgbi5zbGljZSgpLCBuLnNsaWNlKCksIG4uc2xpY2UoKSBdXG4gIHJldHVybiB7XG4gICAgcG9zaXRpb25zOiBwb3NpdGlvbnMsXG4gICAgY2VsbHM6IGNlbGxzLFxuICAgIHV2czogdXZzLFxuICAgIG5vcm1hbHM6IG5vcm1hbHNcbiAgfVxufVxuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsLmNyZWF0ZVJFR0wgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbnZhciBpc1R5cGVkQXJyYXkgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gKFxuICAgIHggaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIEludDhBcnJheSB8fFxuICAgIHggaW5zdGFuY2VvZiBJbnQxNkFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIEludDMyQXJyYXkgfHxcbiAgICB4IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSB8fFxuICAgIHggaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheVxuICApXG59XG5cbnZhciBleHRlbmQgPSBmdW5jdGlvbiAoYmFzZSwgb3B0cykge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdHMpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgIGJhc2Vba2V5c1tpXV0gPSBvcHRzW2tleXNbaV1dXG4gIH1cbiAgcmV0dXJuIGJhc2Vcbn1cblxuLy8gRXJyb3IgY2hlY2tpbmcgYW5kIHBhcmFtZXRlciB2YWxpZGF0aW9uLlxuLy9cbi8vIFN0YXRlbWVudHMgZm9yIHRoZSBmb3JtIGBjaGVjay5zb21lUHJvY2VkdXJlKC4uLilgIGdldCByZW1vdmVkIGJ5XG4vLyBhIGJyb3dzZXJpZnkgdHJhbnNmb3JtIGZvciBvcHRpbWl6ZWQvbWluaWZpZWQgYnVuZGxlcy5cbi8vXG4vKiBnbG9iYWxzIGF0b2IgKi9cbnZhciBlbmRsID0gJ1xcbidcblxuLy8gb25seSB1c2VkIGZvciBleHRyYWN0aW5nIHNoYWRlciBuYW1lcy4gIGlmIGF0b2Igbm90IHByZXNlbnQsIHRoZW4gZXJyb3JzXG4vLyB3aWxsIGJlIHNsaWdodGx5IGNyYXBwaWVyXG5mdW5jdGlvbiBkZWNvZGVCNjQgKHN0cikge1xuICBpZiAodHlwZW9mIGF0b2IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGF0b2Ioc3RyKVxuICB9XG4gIHJldHVybiAnYmFzZTY0OicgKyBzdHJcbn1cblxuZnVuY3Rpb24gcmFpc2UgKG1lc3NhZ2UpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCcocmVnbCkgJyArIG1lc3NhZ2UpXG4gIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gIHRocm93IGVycm9yXG59XG5cbmZ1bmN0aW9uIGNoZWNrIChwcmVkLCBtZXNzYWdlKSB7XG4gIGlmICghcHJlZCkge1xuICAgIHJhaXNlKG1lc3NhZ2UpXG4gIH1cbn1cblxuZnVuY3Rpb24gZW5jb2xvbiAobWVzc2FnZSkge1xuICBpZiAobWVzc2FnZSkge1xuICAgIHJldHVybiAnOiAnICsgbWVzc2FnZVxuICB9XG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBjaGVja1BhcmFtZXRlciAocGFyYW0sIHBvc3NpYmlsaXRpZXMsIG1lc3NhZ2UpIHtcbiAgaWYgKCEocGFyYW0gaW4gcG9zc2liaWxpdGllcykpIHtcbiAgICByYWlzZSgndW5rbm93biBwYXJhbWV0ZXIgKCcgKyBwYXJhbSArICcpJyArIGVuY29sb24obWVzc2FnZSkgK1xuICAgICAgICAgICcuIHBvc3NpYmxlIHZhbHVlczogJyArIE9iamVjdC5rZXlzKHBvc3NpYmlsaXRpZXMpLmpvaW4oKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0lzVHlwZWRBcnJheSAoZGF0YSwgbWVzc2FnZSkge1xuICBpZiAoIWlzVHlwZWRBcnJheShkYXRhKSkge1xuICAgIHJhaXNlKFxuICAgICAgJ2ludmFsaWQgcGFyYW1ldGVyIHR5cGUnICsgZW5jb2xvbihtZXNzYWdlKSArXG4gICAgICAnLiBtdXN0IGJlIGEgdHlwZWQgYXJyYXknKVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0YW5kYXJkVHlwZUVoICh2YWx1ZSwgdHlwZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdudW1iZXInOiByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJ1xuICAgIGNhc2UgJ29iamVjdCc6IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICBjYXNlICdib29sZWFuJzogcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nXG4gICAgY2FzZSAnZnVuY3Rpb24nOiByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgY2FzZSAndW5kZWZpbmVkJzogcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCdcbiAgICBjYXNlICdzeW1ib2wnOiByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJ1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrVHlwZU9mICh2YWx1ZSwgdHlwZSwgbWVzc2FnZSkge1xuICBpZiAoIXN0YW5kYXJkVHlwZUVoKHZhbHVlLCB0eXBlKSkge1xuICAgIHJhaXNlKFxuICAgICAgJ2ludmFsaWQgcGFyYW1ldGVyIHR5cGUnICsgZW5jb2xvbihtZXNzYWdlKSArXG4gICAgICAnLiBleHBlY3RlZCAnICsgdHlwZSArICcsIGdvdCAnICsgKHR5cGVvZiB2YWx1ZSkpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOb25OZWdhdGl2ZUludCAodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCEoKHZhbHVlID49IDApICYmXG4gICAgICAgICgodmFsdWUgfCAwKSA9PT0gdmFsdWUpKSkge1xuICAgIHJhaXNlKCdpbnZhbGlkIHBhcmFtZXRlciB0eXBlLCAoJyArIHZhbHVlICsgJyknICsgZW5jb2xvbihtZXNzYWdlKSArXG4gICAgICAgICAgJy4gbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXInKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrT25lT2YgKHZhbHVlLCBsaXN0LCBtZXNzYWdlKSB7XG4gIGlmIChsaXN0LmluZGV4T2YodmFsdWUpIDwgMCkge1xuICAgIHJhaXNlKCdpbnZhbGlkIHZhbHVlJyArIGVuY29sb24obWVzc2FnZSkgKyAnLiBtdXN0IGJlIG9uZSBvZjogJyArIGxpc3QpXG4gIH1cbn1cblxudmFyIGNvbnN0cnVjdG9yS2V5cyA9IFtcbiAgJ2dsJyxcbiAgJ2NhbnZhcycsXG4gICdjb250YWluZXInLFxuICAnYXR0cmlidXRlcycsXG4gICdwaXhlbFJhdGlvJyxcbiAgJ2V4dGVuc2lvbnMnLFxuICAnb3B0aW9uYWxFeHRlbnNpb25zJyxcbiAgJ3Byb2ZpbGUnLFxuICAnb25Eb25lJ1xuXVxuXG5mdW5jdGlvbiBjaGVja0NvbnN0cnVjdG9yIChvYmopIHtcbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoY29uc3RydWN0b3JLZXlzLmluZGV4T2Yoa2V5KSA8IDApIHtcbiAgICAgIHJhaXNlKCdpbnZhbGlkIHJlZ2wgY29uc3RydWN0b3IgYXJndW1lbnQgXCInICsga2V5ICsgJ1wiLiBtdXN0IGJlIG9uZSBvZiAnICsgY29uc3RydWN0b3JLZXlzKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gbGVmdFBhZCAoc3RyLCBuKSB7XG4gIHN0ciA9IHN0ciArICcnXG4gIHdoaWxlIChzdHIubGVuZ3RoIDwgbikge1xuICAgIHN0ciA9ICcgJyArIHN0clxuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gU2hhZGVyRmlsZSAoKSB7XG4gIHRoaXMubmFtZSA9ICd1bmtub3duJ1xuICB0aGlzLmxpbmVzID0gW11cbiAgdGhpcy5pbmRleCA9IHt9XG4gIHRoaXMuaGFzRXJyb3JzID0gZmFsc2Vcbn1cblxuZnVuY3Rpb24gU2hhZGVyTGluZSAobnVtYmVyLCBsaW5lKSB7XG4gIHRoaXMubnVtYmVyID0gbnVtYmVyXG4gIHRoaXMubGluZSA9IGxpbmVcbiAgdGhpcy5lcnJvcnMgPSBbXVxufVxuXG5mdW5jdGlvbiBTaGFkZXJFcnJvciAoZmlsZU51bWJlciwgbGluZU51bWJlciwgbWVzc2FnZSkge1xuICB0aGlzLmZpbGUgPSBmaWxlTnVtYmVyXG4gIHRoaXMubGluZSA9IGxpbmVOdW1iZXJcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxufVxuXG5mdW5jdGlvbiBndWVzc0NvbW1hbmQgKCkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoKVxuICB2YXIgc3RhY2sgPSAoZXJyb3Iuc3RhY2sgfHwgZXJyb3IpLnRvU3RyaW5nKClcbiAgdmFyIHBhdCA9IC9jb21waWxlUHJvY2VkdXJlLipcXG5cXHMqYXQuKlxcKCguKilcXCkvLmV4ZWMoc3RhY2spXG4gIGlmIChwYXQpIHtcbiAgICByZXR1cm4gcGF0WzFdXG4gIH1cbiAgdmFyIHBhdDIgPSAvY29tcGlsZVByb2NlZHVyZS4qXFxuXFxzKmF0XFxzKyguKikoXFxufCQpLy5leGVjKHN0YWNrKVxuICBpZiAocGF0Mikge1xuICAgIHJldHVybiBwYXQyWzFdXG4gIH1cbiAgcmV0dXJuICd1bmtub3duJ1xufVxuXG5mdW5jdGlvbiBndWVzc0NhbGxTaXRlICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKClcbiAgdmFyIHN0YWNrID0gKGVycm9yLnN0YWNrIHx8IGVycm9yKS50b1N0cmluZygpXG4gIHZhciBwYXQgPSAvYXQgUkVHTENvbW1hbmQuKlxcblxccythdC4qXFwoKC4qKVxcKS8uZXhlYyhzdGFjaylcbiAgaWYgKHBhdCkge1xuICAgIHJldHVybiBwYXRbMV1cbiAgfVxuICB2YXIgcGF0MiA9IC9hdCBSRUdMQ29tbWFuZC4qXFxuXFxzK2F0XFxzKyguKilcXG4vLmV4ZWMoc3RhY2spXG4gIGlmIChwYXQyKSB7XG4gICAgcmV0dXJuIHBhdDJbMV1cbiAgfVxuICByZXR1cm4gJ3Vua25vd24nXG59XG5cbmZ1bmN0aW9uIHBhcnNlU291cmNlIChzb3VyY2UsIGNvbW1hbmQpIHtcbiAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KCdcXG4nKVxuICB2YXIgbGluZU51bWJlciA9IDFcbiAgdmFyIGZpbGVOdW1iZXIgPSAwXG4gIHZhciBmaWxlcyA9IHtcbiAgICB1bmtub3duOiBuZXcgU2hhZGVyRmlsZSgpLFxuICAgIDA6IG5ldyBTaGFkZXJGaWxlKClcbiAgfVxuICBmaWxlcy51bmtub3duLm5hbWUgPSBmaWxlc1swXS5uYW1lID0gY29tbWFuZCB8fCBndWVzc0NvbW1hbmQoKVxuICBmaWxlcy51bmtub3duLmxpbmVzLnB1c2gobmV3IFNoYWRlckxpbmUoMCwgJycpKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGxpbmUgPSBsaW5lc1tpXVxuICAgIHZhciBwYXJ0cyA9IC9eXFxzKiNcXHMqKFxcdyspXFxzKyguKylcXHMqJC8uZXhlYyhsaW5lKVxuICAgIGlmIChwYXJ0cykge1xuICAgICAgc3dpdGNoIChwYXJ0c1sxXSkge1xuICAgICAgICBjYXNlICdsaW5lJzpcbiAgICAgICAgICB2YXIgbGluZU51bWJlckluZm8gPSAvKFxcZCspKFxccytcXGQrKT8vLmV4ZWMocGFydHNbMl0pXG4gICAgICAgICAgaWYgKGxpbmVOdW1iZXJJbmZvKSB7XG4gICAgICAgICAgICBsaW5lTnVtYmVyID0gbGluZU51bWJlckluZm9bMV0gfCAwXG4gICAgICAgICAgICBpZiAobGluZU51bWJlckluZm9bMl0pIHtcbiAgICAgICAgICAgICAgZmlsZU51bWJlciA9IGxpbmVOdW1iZXJJbmZvWzJdIHwgMFxuICAgICAgICAgICAgICBpZiAoIShmaWxlTnVtYmVyIGluIGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIGZpbGVzW2ZpbGVOdW1iZXJdID0gbmV3IFNoYWRlckZpbGUoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RlZmluZSc6XG4gICAgICAgICAgdmFyIG5hbWVJbmZvID0gL1NIQURFUl9OQU1FKF9CNjQpP1xccysoLiopJC8uZXhlYyhwYXJ0c1syXSlcbiAgICAgICAgICBpZiAobmFtZUluZm8pIHtcbiAgICAgICAgICAgIGZpbGVzW2ZpbGVOdW1iZXJdLm5hbWUgPSAobmFtZUluZm9bMV1cbiAgICAgICAgICAgICAgPyBkZWNvZGVCNjQobmFtZUluZm9bMl0pXG4gICAgICAgICAgICAgIDogbmFtZUluZm9bMl0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIGZpbGVzW2ZpbGVOdW1iZXJdLmxpbmVzLnB1c2gobmV3IFNoYWRlckxpbmUobGluZU51bWJlcisrLCBsaW5lKSlcbiAgfVxuICBPYmplY3Qua2V5cyhmaWxlcykuZm9yRWFjaChmdW5jdGlvbiAoZmlsZU51bWJlcikge1xuICAgIHZhciBmaWxlID0gZmlsZXNbZmlsZU51bWJlcl1cbiAgICBmaWxlLmxpbmVzLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGZpbGUuaW5kZXhbbGluZS5udW1iZXJdID0gbGluZVxuICAgIH0pXG4gIH0pXG4gIHJldHVybiBmaWxlc1xufVxuXG5mdW5jdGlvbiBwYXJzZUVycm9yTG9nIChlcnJMb2cpIHtcbiAgdmFyIHJlc3VsdCA9IFtdXG4gIGVyckxvZy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiAoZXJyTXNnKSB7XG4gICAgaWYgKGVyck1zZy5sZW5ndGggPCA1KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIHBhcnRzID0gL15FUlJPUjpcXHMrKFxcZCspOihcXGQrKTpcXHMqKC4qKSQvLmV4ZWMoZXJyTXNnKVxuICAgIGlmIChwYXJ0cykge1xuICAgICAgcmVzdWx0LnB1c2gobmV3IFNoYWRlckVycm9yKFxuICAgICAgICBwYXJ0c1sxXSB8IDAsXG4gICAgICAgIHBhcnRzWzJdIHwgMCxcbiAgICAgICAgcGFydHNbM10udHJpbSgpKSlcbiAgICB9IGVsc2UgaWYgKGVyck1zZy5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQucHVzaChuZXcgU2hhZGVyRXJyb3IoJ3Vua25vd24nLCAwLCBlcnJNc2cpKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBhbm5vdGF0ZUZpbGVzIChmaWxlcywgZXJyb3JzKSB7XG4gIGVycm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgIHZhciBmaWxlID0gZmlsZXNbZXJyb3IuZmlsZV1cbiAgICBpZiAoZmlsZSkge1xuICAgICAgdmFyIGxpbmUgPSBmaWxlLmluZGV4W2Vycm9yLmxpbmVdXG4gICAgICBpZiAobGluZSkge1xuICAgICAgICBsaW5lLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgICBmaWxlLmhhc0Vycm9ycyA9IHRydWVcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIGZpbGVzLnVua25vd24uaGFzRXJyb3JzID0gdHJ1ZVxuICAgIGZpbGVzLnVua25vd24ubGluZXNbMF0uZXJyb3JzLnB1c2goZXJyb3IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNoZWNrU2hhZGVyRXJyb3IgKGdsLCBzaGFkZXIsIHNvdXJjZSwgdHlwZSwgY29tbWFuZCkge1xuICBpZiAoIWdsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSkge1xuICAgIHZhciBlcnJMb2cgPSBnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcilcbiAgICB2YXIgdHlwZU5hbWUgPSB0eXBlID09PSBnbC5GUkFHTUVOVF9TSEFERVIgPyAnZnJhZ21lbnQnIDogJ3ZlcnRleCdcbiAgICBjaGVja0NvbW1hbmRUeXBlKHNvdXJjZSwgJ3N0cmluZycsIHR5cGVOYW1lICsgJyBzaGFkZXIgc291cmNlIG11c3QgYmUgYSBzdHJpbmcnLCBjb21tYW5kKVxuICAgIHZhciBmaWxlcyA9IHBhcnNlU291cmNlKHNvdXJjZSwgY29tbWFuZClcbiAgICB2YXIgZXJyb3JzID0gcGFyc2VFcnJvckxvZyhlcnJMb2cpXG4gICAgYW5ub3RhdGVGaWxlcyhmaWxlcywgZXJyb3JzKVxuXG4gICAgT2JqZWN0LmtleXMoZmlsZXMpLmZvckVhY2goZnVuY3Rpb24gKGZpbGVOdW1iZXIpIHtcbiAgICAgIHZhciBmaWxlID0gZmlsZXNbZmlsZU51bWJlcl1cbiAgICAgIGlmICghZmlsZS5oYXNFcnJvcnMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHZhciBzdHJpbmdzID0gWycnXVxuICAgICAgdmFyIHN0eWxlcyA9IFsnJ11cblxuICAgICAgZnVuY3Rpb24gcHVzaCAoc3RyLCBzdHlsZSkge1xuICAgICAgICBzdHJpbmdzLnB1c2goc3RyKVxuICAgICAgICBzdHlsZXMucHVzaChzdHlsZSB8fCAnJylcbiAgICAgIH1cblxuICAgICAgcHVzaCgnZmlsZSBudW1iZXIgJyArIGZpbGVOdW1iZXIgKyAnOiAnICsgZmlsZS5uYW1lICsgJ1xcbicsICdjb2xvcjpyZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXdlaWdodDpib2xkJylcblxuICAgICAgZmlsZS5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIGlmIChsaW5lLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHVzaChsZWZ0UGFkKGxpbmUubnVtYmVyLCA0KSArICd8ICAnLCAnYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IGZvbnQtd2VpZ2h0OmJvbGQnKVxuICAgICAgICAgIHB1c2gobGluZS5saW5lICsgZW5kbCwgJ2NvbG9yOnJlZDsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IGZvbnQtd2VpZ2h0OmJvbGQnKVxuXG4gICAgICAgICAgLy8gdHJ5IHRvIGd1ZXNzIHRva2VuXG4gICAgICAgICAgdmFyIG9mZnNldCA9IDBcbiAgICAgICAgICBsaW5lLmVycm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgICB2YXIgdG9rZW4gPSAvXlxccyonKC4qKSdcXHMqOlxccyooLiopJC8uZXhlYyhtZXNzYWdlKVxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAgIHZhciB0b2tlblBhdCA9IHRva2VuWzFdXG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSB0b2tlblsyXVxuICAgICAgICAgICAgICBzd2l0Y2ggKHRva2VuUGF0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYXNzaWduJzpcbiAgICAgICAgICAgICAgICAgIHRva2VuUGF0ID0gJz0nXG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9mZnNldCA9IE1hdGgubWF4KGxpbmUubGluZS5pbmRleE9mKHRva2VuUGF0LCBvZmZzZXQpLCAwKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwdXNoKGxlZnRQYWQoJ3wgJywgNikpXG4gICAgICAgICAgICBwdXNoKGxlZnRQYWQoJ15eXicsIG9mZnNldCArIDMpICsgZW5kbCwgJ2ZvbnQtd2VpZ2h0OmJvbGQnKVxuICAgICAgICAgICAgcHVzaChsZWZ0UGFkKCd8ICcsIDYpKVxuICAgICAgICAgICAgcHVzaChtZXNzYWdlICsgZW5kbCwgJ2ZvbnQtd2VpZ2h0OmJvbGQnKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcHVzaChsZWZ0UGFkKCd8ICcsIDYpICsgZW5kbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwdXNoKGxlZnRQYWQobGluZS5udW1iZXIsIDQpICsgJ3wgICcpXG4gICAgICAgICAgcHVzaChsaW5lLmxpbmUgKyBlbmRsLCAnY29sb3I6cmVkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmICF3aW5kb3cuY2hyb21lKSB7XG4gICAgICAgIHN0eWxlc1swXSA9IHN0cmluZ3Muam9pbignJWMnKVxuICAgICAgICBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBzdHlsZXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhzdHJpbmdzLmpvaW4oJycpKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGVjay5yYWlzZSgnRXJyb3IgY29tcGlsaW5nICcgKyB0eXBlTmFtZSArICcgc2hhZGVyLCAnICsgZmlsZXNbMF0ubmFtZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0xpbmtFcnJvciAoZ2wsIHByb2dyYW0sIGZyYWdTaGFkZXIsIHZlcnRTaGFkZXIsIGNvbW1hbmQpIHtcbiAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSkge1xuICAgIHZhciBlcnJMb2cgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKVxuICAgIHZhciBmcmFnUGFyc2UgPSBwYXJzZVNvdXJjZShmcmFnU2hhZGVyLCBjb21tYW5kKVxuICAgIHZhciB2ZXJ0UGFyc2UgPSBwYXJzZVNvdXJjZSh2ZXJ0U2hhZGVyLCBjb21tYW5kKVxuXG4gICAgdmFyIGhlYWRlciA9ICdFcnJvciBsaW5raW5nIHByb2dyYW0gd2l0aCB2ZXJ0ZXggc2hhZGVyLCBcIicgK1xuICAgICAgdmVydFBhcnNlWzBdLm5hbWUgKyAnXCIsIGFuZCBmcmFnbWVudCBzaGFkZXIgXCInICsgZnJhZ1BhcnNlWzBdLm5hbWUgKyAnXCInXG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5sb2coJyVjJyArIGhlYWRlciArIGVuZGwgKyAnJWMnICsgZXJyTG9nLFxuICAgICAgICAnY29sb3I6cmVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZCcsXG4gICAgICAgICdjb2xvcjpyZWQnKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhoZWFkZXIgKyBlbmRsICsgZXJyTG9nKVxuICAgIH1cbiAgICBjaGVjay5yYWlzZShoZWFkZXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gc2F2ZUNvbW1hbmRSZWYgKG9iamVjdCkge1xuICBvYmplY3QuX2NvbW1hbmRSZWYgPSBndWVzc0NvbW1hbmQoKVxufVxuXG5mdW5jdGlvbiBzYXZlRHJhd0NvbW1hbmRJbmZvIChvcHRzLCB1bmlmb3JtcywgYXR0cmlidXRlcywgc3RyaW5nU3RvcmUpIHtcbiAgc2F2ZUNvbW1hbmRSZWYob3B0cylcblxuICBmdW5jdGlvbiBpZCAoc3RyKSB7XG4gICAgaWYgKHN0cikge1xuICAgICAgcmV0dXJuIHN0cmluZ1N0b3JlLmlkKHN0cilcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxuICBvcHRzLl9mcmFnSWQgPSBpZChvcHRzLnN0YXRpYy5mcmFnKVxuICBvcHRzLl92ZXJ0SWQgPSBpZChvcHRzLnN0YXRpYy52ZXJ0KVxuXG4gIGZ1bmN0aW9uIGFkZFByb3BzIChkaWN0LCBzZXQpIHtcbiAgICBPYmplY3Qua2V5cyhzZXQpLmZvckVhY2goZnVuY3Rpb24gKHUpIHtcbiAgICAgIGRpY3Rbc3RyaW5nU3RvcmUuaWQodSldID0gdHJ1ZVxuICAgIH0pXG4gIH1cblxuICB2YXIgdW5pZm9ybVNldCA9IG9wdHMuX3VuaWZvcm1TZXQgPSB7fVxuICBhZGRQcm9wcyh1bmlmb3JtU2V0LCB1bmlmb3Jtcy5zdGF0aWMpXG4gIGFkZFByb3BzKHVuaWZvcm1TZXQsIHVuaWZvcm1zLmR5bmFtaWMpXG5cbiAgdmFyIGF0dHJpYnV0ZVNldCA9IG9wdHMuX2F0dHJpYnV0ZVNldCA9IHt9XG4gIGFkZFByb3BzKGF0dHJpYnV0ZVNldCwgYXR0cmlidXRlcy5zdGF0aWMpXG4gIGFkZFByb3BzKGF0dHJpYnV0ZVNldCwgYXR0cmlidXRlcy5keW5hbWljKVxuXG4gIG9wdHMuX2hhc0NvdW50ID0gKFxuICAgICdjb3VudCcgaW4gb3B0cy5zdGF0aWMgfHxcbiAgICAnY291bnQnIGluIG9wdHMuZHluYW1pYyB8fFxuICAgICdlbGVtZW50cycgaW4gb3B0cy5zdGF0aWMgfHxcbiAgICAnZWxlbWVudHMnIGluIG9wdHMuZHluYW1pYylcbn1cblxuZnVuY3Rpb24gY29tbWFuZFJhaXNlIChtZXNzYWdlLCBjb21tYW5kKSB7XG4gIHZhciBjYWxsU2l0ZSA9IGd1ZXNzQ2FsbFNpdGUoKVxuICByYWlzZShtZXNzYWdlICtcbiAgICAnIGluIGNvbW1hbmQgJyArIChjb21tYW5kIHx8IGd1ZXNzQ29tbWFuZCgpKSArXG4gICAgKGNhbGxTaXRlID09PSAndW5rbm93bicgPyAnJyA6ICcgY2FsbGVkIGZyb20gJyArIGNhbGxTaXRlKSlcbn1cblxuZnVuY3Rpb24gY2hlY2tDb21tYW5kIChwcmVkLCBtZXNzYWdlLCBjb21tYW5kKSB7XG4gIGlmICghcHJlZCkge1xuICAgIGNvbW1hbmRSYWlzZShtZXNzYWdlLCBjb21tYW5kIHx8IGd1ZXNzQ29tbWFuZCgpKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyYW1ldGVyQ29tbWFuZCAocGFyYW0sIHBvc3NpYmlsaXRpZXMsIG1lc3NhZ2UsIGNvbW1hbmQpIHtcbiAgaWYgKCEocGFyYW0gaW4gcG9zc2liaWxpdGllcykpIHtcbiAgICBjb21tYW5kUmFpc2UoXG4gICAgICAndW5rbm93biBwYXJhbWV0ZXIgKCcgKyBwYXJhbSArICcpJyArIGVuY29sb24obWVzc2FnZSkgK1xuICAgICAgJy4gcG9zc2libGUgdmFsdWVzOiAnICsgT2JqZWN0LmtleXMocG9zc2liaWxpdGllcykuam9pbigpLFxuICAgICAgY29tbWFuZCB8fCBndWVzc0NvbW1hbmQoKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0NvbW1hbmRUeXBlICh2YWx1ZSwgdHlwZSwgbWVzc2FnZSwgY29tbWFuZCkge1xuICBpZiAoIXN0YW5kYXJkVHlwZUVoKHZhbHVlLCB0eXBlKSkge1xuICAgIGNvbW1hbmRSYWlzZShcbiAgICAgICdpbnZhbGlkIHBhcmFtZXRlciB0eXBlJyArIGVuY29sb24obWVzc2FnZSkgK1xuICAgICAgJy4gZXhwZWN0ZWQgJyArIHR5cGUgKyAnLCBnb3QgJyArICh0eXBlb2YgdmFsdWUpLFxuICAgICAgY29tbWFuZCB8fCBndWVzc0NvbW1hbmQoKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja09wdGlvbmFsIChibG9jaykge1xuICBibG9jaygpXG59XG5cbmZ1bmN0aW9uIGNoZWNrRnJhbWVidWZmZXJGb3JtYXQgKGF0dGFjaG1lbnQsIHRleEZvcm1hdHMsIHJiRm9ybWF0cykge1xuICBpZiAoYXR0YWNobWVudC50ZXh0dXJlKSB7XG4gICAgY2hlY2tPbmVPZihcbiAgICAgIGF0dGFjaG1lbnQudGV4dHVyZS5fdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCxcbiAgICAgIHRleEZvcm1hdHMsXG4gICAgICAndW5zdXBwb3J0ZWQgdGV4dHVyZSBmb3JtYXQgZm9yIGF0dGFjaG1lbnQnKVxuICB9IGVsc2Uge1xuICAgIGNoZWNrT25lT2YoXG4gICAgICBhdHRhY2htZW50LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdCxcbiAgICAgIHJiRm9ybWF0cyxcbiAgICAgICd1bnN1cHBvcnRlZCByZW5kZXJidWZmZXIgZm9ybWF0IGZvciBhdHRhY2htZW50JylcbiAgfVxufVxuXG52YXIgR0xfQ0xBTVBfVE9fRURHRSA9IDB4ODEyRlxuXG52YXIgR0xfTkVBUkVTVCA9IDB4MjYwMFxudmFyIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QgPSAweDI3MDBcbnZhciBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QgPSAweDI3MDFcbnZhciBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIgPSAweDI3MDJcbnZhciBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiA9IDB4MjcwM1xuXG52YXIgR0xfQllURSA9IDUxMjBcbnZhciBHTF9VTlNJR05FRF9CWVRFID0gNTEyMVxudmFyIEdMX1NIT1JUID0gNTEyMlxudmFyIEdMX1VOU0lHTkVEX1NIT1JUID0gNTEyM1xudmFyIEdMX0lOVCA9IDUxMjRcbnZhciBHTF9VTlNJR05FRF9JTlQgPSA1MTI1XG52YXIgR0xfRkxPQVQgPSA1MTI2XG5cbnZhciBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80ID0gMHg4MDMzXG52YXIgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSA9IDB4ODAzNFxudmFyIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81ID0gMHg4MzYzXG52YXIgR0xfVU5TSUdORURfSU5UXzI0XzhfV0VCR0wgPSAweDg0RkFcblxudmFyIEdMX0hBTEZfRkxPQVRfT0VTID0gMHg4RDYxXG5cbnZhciBUWVBFX1NJWkUgPSB7fVxuXG5UWVBFX1NJWkVbR0xfQllURV0gPVxuVFlQRV9TSVpFW0dMX1VOU0lHTkVEX0JZVEVdID0gMVxuXG5UWVBFX1NJWkVbR0xfU0hPUlRdID1cblRZUEVfU0laRVtHTF9VTlNJR05FRF9TSE9SVF0gPVxuVFlQRV9TSVpFW0dMX0hBTEZfRkxPQVRfT0VTXSA9XG5UWVBFX1NJWkVbR0xfVU5TSUdORURfU0hPUlRfNV82XzVdID1cblRZUEVfU0laRVtHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80XSA9XG5UWVBFX1NJWkVbR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMV0gPSAyXG5cblRZUEVfU0laRVtHTF9JTlRdID1cblRZUEVfU0laRVtHTF9VTlNJR05FRF9JTlRdID1cblRZUEVfU0laRVtHTF9GTE9BVF0gPVxuVFlQRV9TSVpFW0dMX1VOU0lHTkVEX0lOVF8yNF84X1dFQkdMXSA9IDRcblxuZnVuY3Rpb24gcGl4ZWxTaXplICh0eXBlLCBjaGFubmVscykge1xuICBpZiAodHlwZSA9PT0gR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSB8fFxuICAgICAgdHlwZSA9PT0gR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCB8fFxuICAgICAgdHlwZSA9PT0gR0xfVU5TSUdORURfU0hPUlRfNV82XzUpIHtcbiAgICByZXR1cm4gMlxuICB9IGVsc2UgaWYgKHR5cGUgPT09IEdMX1VOU0lHTkVEX0lOVF8yNF84X1dFQkdMKSB7XG4gICAgcmV0dXJuIDRcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVFlQRV9TSVpFW3R5cGVdICogY2hhbm5lbHNcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BvdzIgKHYpIHtcbiAgcmV0dXJuICEodiAmICh2IC0gMSkpICYmICghIXYpXG59XG5cbmZ1bmN0aW9uIGNoZWNrVGV4dHVyZTJEIChpbmZvLCBtaXBEYXRhLCBsaW1pdHMpIHtcbiAgdmFyIGlcbiAgdmFyIHcgPSBtaXBEYXRhLndpZHRoXG4gIHZhciBoID0gbWlwRGF0YS5oZWlnaHRcbiAgdmFyIGMgPSBtaXBEYXRhLmNoYW5uZWxzXG5cbiAgLy8gQ2hlY2sgdGV4dHVyZSBzaGFwZVxuICBjaGVjayh3ID4gMCAmJiB3IDw9IGxpbWl0cy5tYXhUZXh0dXJlU2l6ZSAmJlxuICAgICAgICBoID4gMCAmJiBoIDw9IGxpbWl0cy5tYXhUZXh0dXJlU2l6ZSxcbiAgJ2ludmFsaWQgdGV4dHVyZSBzaGFwZScpXG5cbiAgLy8gY2hlY2sgd3JhcCBtb2RlXG4gIGlmIChpbmZvLndyYXBTICE9PSBHTF9DTEFNUF9UT19FREdFIHx8IGluZm8ud3JhcFQgIT09IEdMX0NMQU1QX1RPX0VER0UpIHtcbiAgICBjaGVjayhpc1BvdzIodykgJiYgaXNQb3cyKGgpLFxuICAgICAgJ2luY29tcGF0aWJsZSB3cmFwIG1vZGUgZm9yIHRleHR1cmUsIGJvdGggd2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIHBvd2VyIG9mIDInKVxuICB9XG5cbiAgaWYgKG1pcERhdGEubWlwbWFzayA9PT0gMSkge1xuICAgIGlmICh3ICE9PSAxICYmIGggIT09IDEpIHtcbiAgICAgIGNoZWNrKFxuICAgICAgICBpbmZvLm1pbkZpbHRlciAhPT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAmJlxuICAgICAgICBpbmZvLm1pbkZpbHRlciAhPT0gR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSICYmXG4gICAgICAgIGluZm8ubWluRmlsdGVyICE9PSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QgJiZcbiAgICAgICAgaW5mby5taW5GaWx0ZXIgIT09IEdMX0xJTkVBUl9NSVBNQVBfTElORUFSLFxuICAgICAgICAnbWluIGZpbHRlciByZXF1aXJlcyBtaXBtYXAnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyB0ZXh0dXJlIG11c3QgYmUgcG93ZXIgb2YgMlxuICAgIGNoZWNrKGlzUG93Mih3KSAmJiBpc1BvdzIoaCksXG4gICAgICAndGV4dHVyZSBtdXN0IGJlIGEgc3F1YXJlIHBvd2VyIG9mIDIgdG8gc3VwcG9ydCBtaXBtYXBwaW5nJylcbiAgICBjaGVjayhtaXBEYXRhLm1pcG1hc2sgPT09ICh3IDw8IDEpIC0gMSxcbiAgICAgICdtaXNzaW5nIG9yIGluY29tcGxldGUgbWlwbWFwIGRhdGEnKVxuICB9XG5cbiAgaWYgKG1pcERhdGEudHlwZSA9PT0gR0xfRkxPQVQpIHtcbiAgICBpZiAobGltaXRzLmV4dGVuc2lvbnMuaW5kZXhPZignb2VzX3RleHR1cmVfZmxvYXRfbGluZWFyJykgPCAwKSB7XG4gICAgICBjaGVjayhpbmZvLm1pbkZpbHRlciA9PT0gR0xfTkVBUkVTVCAmJiBpbmZvLm1hZ0ZpbHRlciA9PT0gR0xfTkVBUkVTVCxcbiAgICAgICAgJ2ZpbHRlciBub3Qgc3VwcG9ydGVkLCBtdXN0IGVuYWJsZSBvZXNfdGV4dHVyZV9mbG9hdF9saW5lYXInKVxuICAgIH1cbiAgICBjaGVjayghaW5mby5nZW5NaXBtYXBzLFxuICAgICAgJ21pcG1hcCBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgd2l0aCBmbG9hdCB0ZXh0dXJlcycpXG4gIH1cblxuICAvLyBjaGVjayBpbWFnZSBjb21wbGV0ZVxuICB2YXIgbWlwaW1hZ2VzID0gbWlwRGF0YS5pbWFnZXNcbiAgZm9yIChpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICBpZiAobWlwaW1hZ2VzW2ldKSB7XG4gICAgICB2YXIgbXcgPSB3ID4+IGlcbiAgICAgIHZhciBtaCA9IGggPj4gaVxuICAgICAgY2hlY2sobWlwRGF0YS5taXBtYXNrICYgKDEgPDwgaSksICdtaXNzaW5nIG1pcG1hcCBkYXRhJylcblxuICAgICAgdmFyIGltZyA9IG1pcGltYWdlc1tpXVxuXG4gICAgICBjaGVjayhcbiAgICAgICAgaW1nLndpZHRoID09PSBtdyAmJlxuICAgICAgICBpbWcuaGVpZ2h0ID09PSBtaCxcbiAgICAgICAgJ2ludmFsaWQgc2hhcGUgZm9yIG1pcCBpbWFnZXMnKVxuXG4gICAgICBjaGVjayhcbiAgICAgICAgaW1nLmZvcm1hdCA9PT0gbWlwRGF0YS5mb3JtYXQgJiZcbiAgICAgICAgaW1nLmludGVybmFsZm9ybWF0ID09PSBtaXBEYXRhLmludGVybmFsZm9ybWF0ICYmXG4gICAgICAgIGltZy50eXBlID09PSBtaXBEYXRhLnR5cGUsXG4gICAgICAgICdpbmNvbXBhdGlibGUgdHlwZSBmb3IgbWlwIGltYWdlJylcblxuICAgICAgaWYgKGltZy5jb21wcmVzc2VkKSB7XG4gICAgICAgIC8vIFRPRE86IGNoZWNrIHNpemUgZm9yIGNvbXByZXNzZWQgaW1hZ2VzXG4gICAgICB9IGVsc2UgaWYgKGltZy5kYXRhKSB7XG4gICAgICAgIC8vIGNoZWNrKGltZy5kYXRhLmJ5dGVMZW5ndGggPT09IG13ICogbWggKlxuICAgICAgICAvLyBNYXRoLm1heChwaXhlbFNpemUoaW1nLnR5cGUsIGMpLCBpbWcudW5wYWNrQWxpZ25tZW50KSxcbiAgICAgICAgdmFyIHJvd1NpemUgPSBNYXRoLmNlaWwocGl4ZWxTaXplKGltZy50eXBlLCBjKSAqIG13IC8gaW1nLnVucGFja0FsaWdubWVudCkgKiBpbWcudW5wYWNrQWxpZ25tZW50XG4gICAgICAgIGNoZWNrKGltZy5kYXRhLmJ5dGVMZW5ndGggPT09IHJvd1NpemUgKiBtaCxcbiAgICAgICAgICAnaW52YWxpZCBkYXRhIGZvciBpbWFnZSwgYnVmZmVyIHNpemUgaXMgaW5jb25zaXN0ZW50IHdpdGggaW1hZ2UgZm9ybWF0JylcbiAgICAgIH0gZWxzZSBpZiAoaW1nLmVsZW1lbnQpIHtcbiAgICAgICAgLy8gVE9ETzogY2hlY2sgZWxlbWVudCBjYW4gYmUgbG9hZGVkXG4gICAgICB9IGVsc2UgaWYgKGltZy5jb3B5KSB7XG4gICAgICAgIC8vIFRPRE86IGNoZWNrIGNvbXBhdGlibGUgZm9ybWF0IGFuZCB0eXBlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaW5mby5nZW5NaXBtYXBzKSB7XG4gICAgICBjaGVjaygobWlwRGF0YS5taXBtYXNrICYgKDEgPDwgaSkpID09PSAwLCAnZXh0cmEgbWlwbWFwIGRhdGEnKVxuICAgIH1cbiAgfVxuXG4gIGlmIChtaXBEYXRhLmNvbXByZXNzZWQpIHtcbiAgICBjaGVjayghaW5mby5nZW5NaXBtYXBzLFxuICAgICAgJ21pcG1hcCBnZW5lcmF0aW9uIGZvciBjb21wcmVzc2VkIGltYWdlcyBub3Qgc3VwcG9ydGVkJylcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1RleHR1cmVDdWJlICh0ZXh0dXJlLCBpbmZvLCBmYWNlcywgbGltaXRzKSB7XG4gIHZhciB3ID0gdGV4dHVyZS53aWR0aFxuICB2YXIgaCA9IHRleHR1cmUuaGVpZ2h0XG4gIHZhciBjID0gdGV4dHVyZS5jaGFubmVsc1xuXG4gIC8vIENoZWNrIHRleHR1cmUgc2hhcGVcbiAgY2hlY2soXG4gICAgdyA+IDAgJiYgdyA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUgJiYgaCA+IDAgJiYgaCA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsXG4gICAgJ2ludmFsaWQgdGV4dHVyZSBzaGFwZScpXG4gIGNoZWNrKFxuICAgIHcgPT09IGgsXG4gICAgJ2N1YmUgbWFwIG11c3QgYmUgc3F1YXJlJylcbiAgY2hlY2soXG4gICAgaW5mby53cmFwUyA9PT0gR0xfQ0xBTVBfVE9fRURHRSAmJiBpbmZvLndyYXBUID09PSBHTF9DTEFNUF9UT19FREdFLFxuICAgICd3cmFwIG1vZGUgbm90IHN1cHBvcnRlZCBieSBjdWJlIG1hcCcpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWNlcy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBmYWNlID0gZmFjZXNbaV1cbiAgICBjaGVjayhcbiAgICAgIGZhY2Uud2lkdGggPT09IHcgJiYgZmFjZS5oZWlnaHQgPT09IGgsXG4gICAgICAnaW5jb25zaXN0ZW50IGN1YmUgbWFwIGZhY2Ugc2hhcGUnKVxuXG4gICAgaWYgKGluZm8uZ2VuTWlwbWFwcykge1xuICAgICAgY2hlY2soIWZhY2UuY29tcHJlc3NlZCxcbiAgICAgICAgJ2NhbiBub3QgZ2VuZXJhdGUgbWlwbWFwIGZvciBjb21wcmVzc2VkIHRleHR1cmVzJylcbiAgICAgIGNoZWNrKGZhY2UubWlwbWFzayA9PT0gMSxcbiAgICAgICAgJ2NhbiBub3Qgc3BlY2lmeSBtaXBtYXBzIGFuZCBnZW5lcmF0ZSBtaXBtYXBzJylcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETzogY2hlY2sgbWlwIGFuZCBmaWx0ZXIgbW9kZVxuICAgIH1cblxuICAgIHZhciBtaXBtYXBzID0gZmFjZS5pbWFnZXNcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIHZhciBpbWcgPSBtaXBtYXBzW2pdXG4gICAgICBpZiAoaW1nKSB7XG4gICAgICAgIHZhciBtdyA9IHcgPj4galxuICAgICAgICB2YXIgbWggPSBoID4+IGpcbiAgICAgICAgY2hlY2soZmFjZS5taXBtYXNrICYgKDEgPDwgaiksICdtaXNzaW5nIG1pcG1hcCBkYXRhJylcbiAgICAgICAgY2hlY2soXG4gICAgICAgICAgaW1nLndpZHRoID09PSBtdyAmJlxuICAgICAgICAgIGltZy5oZWlnaHQgPT09IG1oLFxuICAgICAgICAgICdpbnZhbGlkIHNoYXBlIGZvciBtaXAgaW1hZ2VzJylcbiAgICAgICAgY2hlY2soXG4gICAgICAgICAgaW1nLmZvcm1hdCA9PT0gdGV4dHVyZS5mb3JtYXQgJiZcbiAgICAgICAgICBpbWcuaW50ZXJuYWxmb3JtYXQgPT09IHRleHR1cmUuaW50ZXJuYWxmb3JtYXQgJiZcbiAgICAgICAgICBpbWcudHlwZSA9PT0gdGV4dHVyZS50eXBlLFxuICAgICAgICAgICdpbmNvbXBhdGlibGUgdHlwZSBmb3IgbWlwIGltYWdlJylcblxuICAgICAgICBpZiAoaW1nLmNvbXByZXNzZWQpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjaGVjayBzaXplIGZvciBjb21wcmVzc2VkIGltYWdlc1xuICAgICAgICB9IGVsc2UgaWYgKGltZy5kYXRhKSB7XG4gICAgICAgICAgY2hlY2soaW1nLmRhdGEuYnl0ZUxlbmd0aCA9PT0gbXcgKiBtaCAqXG4gICAgICAgICAgICBNYXRoLm1heChwaXhlbFNpemUoaW1nLnR5cGUsIGMpLCBpbWcudW5wYWNrQWxpZ25tZW50KSxcbiAgICAgICAgICAnaW52YWxpZCBkYXRhIGZvciBpbWFnZSwgYnVmZmVyIHNpemUgaXMgaW5jb25zaXN0ZW50IHdpdGggaW1hZ2UgZm9ybWF0JylcbiAgICAgICAgfSBlbHNlIGlmIChpbWcuZWxlbWVudCkge1xuICAgICAgICAgIC8vIFRPRE86IGNoZWNrIGVsZW1lbnQgY2FuIGJlIGxvYWRlZFxuICAgICAgICB9IGVsc2UgaWYgKGltZy5jb3B5KSB7XG4gICAgICAgICAgLy8gVE9ETzogY2hlY2sgY29tcGF0aWJsZSBmb3JtYXQgYW5kIHR5cGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgY2hlY2skMSA9IGV4dGVuZChjaGVjaywge1xuICBvcHRpb25hbDogY2hlY2tPcHRpb25hbCxcbiAgcmFpc2U6IHJhaXNlLFxuICBjb21tYW5kUmFpc2U6IGNvbW1hbmRSYWlzZSxcbiAgY29tbWFuZDogY2hlY2tDb21tYW5kLFxuICBwYXJhbWV0ZXI6IGNoZWNrUGFyYW1ldGVyLFxuICBjb21tYW5kUGFyYW1ldGVyOiBjaGVja1BhcmFtZXRlckNvbW1hbmQsXG4gIGNvbnN0cnVjdG9yOiBjaGVja0NvbnN0cnVjdG9yLFxuICB0eXBlOiBjaGVja1R5cGVPZixcbiAgY29tbWFuZFR5cGU6IGNoZWNrQ29tbWFuZFR5cGUsXG4gIGlzVHlwZWRBcnJheTogY2hlY2tJc1R5cGVkQXJyYXksXG4gIG5uaTogY2hlY2tOb25OZWdhdGl2ZUludCxcbiAgb25lT2Y6IGNoZWNrT25lT2YsXG4gIHNoYWRlckVycm9yOiBjaGVja1NoYWRlckVycm9yLFxuICBsaW5rRXJyb3I6IGNoZWNrTGlua0Vycm9yLFxuICBjYWxsU2l0ZTogZ3Vlc3NDYWxsU2l0ZSxcbiAgc2F2ZUNvbW1hbmRSZWY6IHNhdmVDb21tYW5kUmVmLFxuICBzYXZlRHJhd0luZm86IHNhdmVEcmF3Q29tbWFuZEluZm8sXG4gIGZyYW1lYnVmZmVyRm9ybWF0OiBjaGVja0ZyYW1lYnVmZmVyRm9ybWF0LFxuICBndWVzc0NvbW1hbmQ6IGd1ZXNzQ29tbWFuZCxcbiAgdGV4dHVyZTJEOiBjaGVja1RleHR1cmUyRCxcbiAgdGV4dHVyZUN1YmU6IGNoZWNrVGV4dHVyZUN1YmVcbn0pO1xuXG52YXIgVkFSSUFCTEVfQ09VTlRFUiA9IDBcblxudmFyIERZTl9GVU5DID0gMFxudmFyIERZTl9DT05TVEFOVCA9IDVcbnZhciBEWU5fQVJSQVkgPSA2XG5cbmZ1bmN0aW9uIER5bmFtaWNWYXJpYWJsZSAodHlwZSwgZGF0YSkge1xuICB0aGlzLmlkID0gKFZBUklBQkxFX0NPVU5URVIrKylcbiAgdGhpcy50eXBlID0gdHlwZVxuICB0aGlzLmRhdGEgPSBkYXRhXG59XG5cbmZ1bmN0aW9uIGVzY2FwZVN0ciAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJylcbn1cblxuZnVuY3Rpb24gc3BsaXRQYXJ0cyAoc3RyKSB7XG4gIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICB2YXIgZmlyc3RDaGFyID0gc3RyLmNoYXJBdCgwKVxuICB2YXIgbGFzdENoYXIgPSBzdHIuY2hhckF0KHN0ci5sZW5ndGggLSAxKVxuXG4gIGlmIChzdHIubGVuZ3RoID4gMSAmJlxuICAgICAgZmlyc3RDaGFyID09PSBsYXN0Q2hhciAmJlxuICAgICAgKGZpcnN0Q2hhciA9PT0gJ1wiJyB8fCBmaXJzdENoYXIgPT09IFwiJ1wiKSkge1xuICAgIHJldHVybiBbJ1wiJyArIGVzY2FwZVN0cihzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKSkgKyAnXCInXVxuICB9XG5cbiAgdmFyIHBhcnRzID0gL1xcWyhmYWxzZXx0cnVlfG51bGx8XFxkK3wnW14nXSonfFwiW15cIl0qXCIpXFxdLy5leGVjKHN0cilcbiAgaWYgKHBhcnRzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHNwbGl0UGFydHMoc3RyLnN1YnN0cigwLCBwYXJ0cy5pbmRleCkpXG4gICAgICAgIC5jb25jYXQoc3BsaXRQYXJ0cyhwYXJ0c1sxXSkpXG4gICAgICAgIC5jb25jYXQoc3BsaXRQYXJ0cyhzdHIuc3Vic3RyKHBhcnRzLmluZGV4ICsgcGFydHNbMF0ubGVuZ3RoKSkpXG4gICAgKVxuICB9XG5cbiAgdmFyIHN1YnBhcnRzID0gc3RyLnNwbGl0KCcuJylcbiAgaWYgKHN1YnBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBbJ1wiJyArIGVzY2FwZVN0cihzdHIpICsgJ1wiJ11cbiAgfVxuXG4gIHZhciByZXN1bHQgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChzcGxpdFBhcnRzKHN1YnBhcnRzW2ldKSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHRvQWNjZXNzb3JTdHJpbmcgKHN0cikge1xuICByZXR1cm4gJ1snICsgc3BsaXRQYXJ0cyhzdHIpLmpvaW4oJ11bJykgKyAnXSdcbn1cblxuZnVuY3Rpb24gZGVmaW5lRHluYW1pYyAodHlwZSwgZGF0YSkge1xuICByZXR1cm4gbmV3IER5bmFtaWNWYXJpYWJsZSh0eXBlLCB0b0FjY2Vzc29yU3RyaW5nKGRhdGEgKyAnJykpXG59XG5cbmZ1bmN0aW9uIGlzRHluYW1pYyAoeCkge1xuICByZXR1cm4gKHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nICYmICF4Ll9yZWdsVHlwZSkgfHwgKHggaW5zdGFuY2VvZiBEeW5hbWljVmFyaWFibGUpXG59XG5cbmZ1bmN0aW9uIHVuYm94ICh4LCBwYXRoKSB7XG4gIGlmICh0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgRHluYW1pY1ZhcmlhYmxlKERZTl9GVU5DLCB4KVxuICB9IGVsc2UgaWYgKHR5cGVvZiB4ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIG5ldyBEeW5hbWljVmFyaWFibGUoRFlOX0NPTlNUQU5ULCB4KVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICByZXR1cm4gbmV3IER5bmFtaWNWYXJpYWJsZShEWU5fQVJSQVksIHgubWFwKCh5LCBpKSA9PiB1bmJveCh5LCBwYXRoICsgJ1snICsgaSArICddJykpKVxuICB9IGVsc2UgaWYgKHggaW5zdGFuY2VvZiBEeW5hbWljVmFyaWFibGUpIHtcbiAgICByZXR1cm4geFxuICB9XG4gIGNoZWNrJDEoZmFsc2UsICdpbnZhbGlkIG9wdGlvbiB0eXBlIGluIHVuaWZvcm0gJyArIHBhdGgpXG59XG5cbnZhciBkeW5hbWljID0ge1xuICBEeW5hbWljVmFyaWFibGU6IER5bmFtaWNWYXJpYWJsZSxcbiAgZGVmaW5lOiBkZWZpbmVEeW5hbWljLFxuICBpc0R5bmFtaWM6IGlzRHluYW1pYyxcbiAgdW5ib3g6IHVuYm94LFxuICBhY2Nlc3NvcjogdG9BY2Nlc3NvclN0cmluZ1xufTtcblxuLyogZ2xvYmFscyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGNhbmNlbEFuaW1hdGlvbkZyYW1lICovXG52YXIgcmFmID0ge1xuICBuZXh0OiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nXG4gICAgPyBmdW5jdGlvbiAoY2IpIHsgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYikgfVxuICAgIDogZnVuY3Rpb24gKGNiKSB7IHJldHVybiBzZXRUaW1lb3V0KGNiLCAxNikgfSxcbiAgY2FuY2VsOiB0eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbidcbiAgICA/IGZ1bmN0aW9uIChyYWYpIHsgcmV0dXJuIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZikgfVxuICAgIDogY2xlYXJUaW1lb3V0XG59O1xuXG4vKiBnbG9iYWxzIHBlcmZvcm1hbmNlICovXG52YXIgY2xvY2sgPSAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJyAmJiBwZXJmb3JtYW5jZS5ub3cpXG4gICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZS5ub3coKSB9XG4gICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiArKG5ldyBEYXRlKCkpIH07XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ1N0b3JlICgpIHtcbiAgdmFyIHN0cmluZ0lkcyA9IHsgJyc6IDAgfVxuICB2YXIgc3RyaW5nVmFsdWVzID0gWycnXVxuICByZXR1cm4ge1xuICAgIGlkOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gc3RyaW5nSWRzW3N0cl1cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfVxuICAgICAgcmVzdWx0ID0gc3RyaW5nSWRzW3N0cl0gPSBzdHJpbmdWYWx1ZXMubGVuZ3RoXG4gICAgICBzdHJpbmdWYWx1ZXMucHVzaChzdHIpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSxcblxuICAgIHN0cjogZnVuY3Rpb24gKGlkKSB7XG4gICAgICByZXR1cm4gc3RyaW5nVmFsdWVzW2lkXVxuICAgIH1cbiAgfVxufVxuXG4vLyBDb250ZXh0IGFuZCBjYW52YXMgY3JlYXRpb24gaGVscGVyIGZ1bmN0aW9uc1xuZnVuY3Rpb24gY3JlYXRlQ2FudmFzIChlbGVtZW50LCBvbkRvbmUsIHBpeGVsUmF0aW8pIHtcbiAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG4gIGV4dGVuZChjYW52YXMuc3R5bGUsIHtcbiAgICBib3JkZXI6IDAsXG4gICAgbWFyZ2luOiAwLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDBcbiAgfSlcbiAgZWxlbWVudC5hcHBlbmRDaGlsZChjYW52YXMpXG5cbiAgaWYgKGVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICBjYW52YXMuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXG4gICAgZXh0ZW5kKGVsZW1lbnQuc3R5bGUsIHtcbiAgICAgIG1hcmdpbjogMCxcbiAgICAgIHBhZGRpbmc6IDBcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzaXplICgpIHtcbiAgICB2YXIgdyA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgdmFyIGggPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICBpZiAoZWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgdmFyIGJvdW5kcyA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIHcgPSBib3VuZHMucmlnaHQgLSBib3VuZHMubGVmdFxuICAgICAgaCA9IGJvdW5kcy5ib3R0b20gLSBib3VuZHMudG9wXG4gICAgfVxuICAgIGNhbnZhcy53aWR0aCA9IHBpeGVsUmF0aW8gKiB3XG4gICAgY2FudmFzLmhlaWdodCA9IHBpeGVsUmF0aW8gKiBoXG4gICAgZXh0ZW5kKGNhbnZhcy5zdHlsZSwge1xuICAgICAgd2lkdGg6IHcgKyAncHgnLFxuICAgICAgaGVpZ2h0OiBoICsgJ3B4J1xuICAgIH0pXG4gIH1cblxuICB2YXIgcmVzaXplT2JzZXJ2ZXJcbiAgaWYgKGVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkgJiYgdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gaWdub3JlICdSZXNpemVPYnNlcnZlcicgaXMgbm90IGRlZmluZWRcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzZXRUaW1lb3V0IHRvIGF2b2lkIGZsaWNrZXJcbiAgICAgIHNldFRpbWVvdXQocmVzaXplKVxuICAgIH0pXG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KVxuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemUsIGZhbHNlKVxuICB9XG5cbiAgZnVuY3Rpb24gb25EZXN0cm95ICgpIHtcbiAgICBpZiAocmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplKVxuICAgIH1cbiAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGNhbnZhcylcbiAgfVxuXG4gIHJlc2l6ZSgpXG5cbiAgcmV0dXJuIHtcbiAgICBjYW52YXM6IGNhbnZhcyxcbiAgICBvbkRlc3Ryb3k6IG9uRGVzdHJveVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQgKGNhbnZhcywgY29udGV4dEF0dHJpYnV0ZXMpIHtcbiAgZnVuY3Rpb24gZ2V0IChuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYW52YXMuZ2V0Q29udGV4dChuYW1lLCBjb250ZXh0QXR0cmlidXRlcylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuICByZXR1cm4gKFxuICAgIGdldCgnd2ViZ2wnKSB8fFxuICAgIGdldCgnZXhwZXJpbWVudGFsLXdlYmdsJykgfHxcbiAgICBnZXQoJ3dlYmdsLWV4cGVyaW1lbnRhbCcpXG4gIClcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudCAob2JqKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG9iai5ub2RlTmFtZSA9PT0gJ3N0cmluZycgJiZcbiAgICB0eXBlb2Ygb2JqLmFwcGVuZENoaWxkID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iai5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5mdW5jdGlvbiBpc1dlYkdMQ29udGV4dCAob2JqKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG9iai5kcmF3QXJyYXlzID09PSAnZnVuY3Rpb24nIHx8XG4gICAgdHlwZW9mIG9iai5kcmF3RWxlbWVudHMgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZUV4dGVuc2lvbnMgKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGlucHV0LnNwbGl0KClcbiAgfVxuICBjaGVjayQxKEFycmF5LmlzQXJyYXkoaW5wdXQpLCAnaW52YWxpZCBleHRlbnNpb24gYXJyYXknKVxuICByZXR1cm4gaW5wdXRcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudCAoZGVzYykge1xuICBpZiAodHlwZW9mIGRlc2MgPT09ICdzdHJpbmcnKSB7XG4gICAgY2hlY2skMSh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnLCAnbm90IHN1cHBvcnRlZCBvdXRzaWRlIG9mIERPTScpXG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZGVzYylcbiAgfVxuICByZXR1cm4gZGVzY1xufVxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MgKGFyZ3NfKSB7XG4gIHZhciBhcmdzID0gYXJnc18gfHwge31cbiAgdmFyIGVsZW1lbnQsIGNvbnRhaW5lciwgY2FudmFzLCBnbFxuICB2YXIgY29udGV4dEF0dHJpYnV0ZXMgPSB7fVxuICB2YXIgZXh0ZW5zaW9ucyA9IFtdXG4gIHZhciBvcHRpb25hbEV4dGVuc2lvbnMgPSBbXVxuICB2YXIgcGl4ZWxSYXRpbyA9ICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IDEgOiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbylcbiAgdmFyIHByb2ZpbGUgPSBmYWxzZVxuICB2YXIgb25Eb25lID0gZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNoZWNrJDEucmFpc2UoZXJyKVxuICAgIH1cbiAgfVxuICB2YXIgb25EZXN0cm95ID0gZnVuY3Rpb24gKCkge31cbiAgaWYgKHR5cGVvZiBhcmdzID09PSAnc3RyaW5nJykge1xuICAgIGNoZWNrJDEoXG4gICAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnLFxuICAgICAgJ3NlbGVjdG9yIHF1ZXJpZXMgb25seSBzdXBwb3J0ZWQgaW4gRE9NIGVudmlyb21lbnRzJylcbiAgICBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhcmdzKVxuICAgIGNoZWNrJDEoZWxlbWVudCwgJ2ludmFsaWQgcXVlcnkgc3RyaW5nIGZvciBlbGVtZW50JylcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoaXNIVE1MRWxlbWVudChhcmdzKSkge1xuICAgICAgZWxlbWVudCA9IGFyZ3NcbiAgICB9IGVsc2UgaWYgKGlzV2ViR0xDb250ZXh0KGFyZ3MpKSB7XG4gICAgICBnbCA9IGFyZ3NcbiAgICAgIGNhbnZhcyA9IGdsLmNhbnZhc1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVjayQxLmNvbnN0cnVjdG9yKGFyZ3MpXG4gICAgICBpZiAoJ2dsJyBpbiBhcmdzKSB7XG4gICAgICAgIGdsID0gYXJncy5nbFxuICAgICAgfSBlbHNlIGlmICgnY2FudmFzJyBpbiBhcmdzKSB7XG4gICAgICAgIGNhbnZhcyA9IGdldEVsZW1lbnQoYXJncy5jYW52YXMpXG4gICAgICB9IGVsc2UgaWYgKCdjb250YWluZXInIGluIGFyZ3MpIHtcbiAgICAgICAgY29udGFpbmVyID0gZ2V0RWxlbWVudChhcmdzLmNvbnRhaW5lcilcbiAgICAgIH1cbiAgICAgIGlmICgnYXR0cmlidXRlcycgaW4gYXJncykge1xuICAgICAgICBjb250ZXh0QXR0cmlidXRlcyA9IGFyZ3MuYXR0cmlidXRlc1xuICAgICAgICBjaGVjayQxLnR5cGUoY29udGV4dEF0dHJpYnV0ZXMsICdvYmplY3QnLCAnaW52YWxpZCBjb250ZXh0IGF0dHJpYnV0ZXMnKVxuICAgICAgfVxuICAgICAgaWYgKCdleHRlbnNpb25zJyBpbiBhcmdzKSB7XG4gICAgICAgIGV4dGVuc2lvbnMgPSBwYXJzZUV4dGVuc2lvbnMoYXJncy5leHRlbnNpb25zKVxuICAgICAgfVxuICAgICAgaWYgKCdvcHRpb25hbEV4dGVuc2lvbnMnIGluIGFyZ3MpIHtcbiAgICAgICAgb3B0aW9uYWxFeHRlbnNpb25zID0gcGFyc2VFeHRlbnNpb25zKGFyZ3Mub3B0aW9uYWxFeHRlbnNpb25zKVxuICAgICAgfVxuICAgICAgaWYgKCdvbkRvbmUnIGluIGFyZ3MpIHtcbiAgICAgICAgY2hlY2skMS50eXBlKFxuICAgICAgICAgIGFyZ3Mub25Eb25lLCAnZnVuY3Rpb24nLFxuICAgICAgICAgICdpbnZhbGlkIG9yIG1pc3Npbmcgb25Eb25lIGNhbGxiYWNrJylcbiAgICAgICAgb25Eb25lID0gYXJncy5vbkRvbmVcbiAgICAgIH1cbiAgICAgIGlmICgncHJvZmlsZScgaW4gYXJncykge1xuICAgICAgICBwcm9maWxlID0gISFhcmdzLnByb2ZpbGVcbiAgICAgIH1cbiAgICAgIGlmICgncGl4ZWxSYXRpbycgaW4gYXJncykge1xuICAgICAgICBwaXhlbFJhdGlvID0gK2FyZ3MucGl4ZWxSYXRpb1xuICAgICAgICBjaGVjayQxKHBpeGVsUmF0aW8gPiAwLCAnaW52YWxpZCBwaXhlbCByYXRpbycpXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgYXJndW1lbnRzIHRvIHJlZ2wnKVxuICB9XG5cbiAgaWYgKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnY2FudmFzJykge1xuICAgICAgY2FudmFzID0gZWxlbWVudFxuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIgPSBlbGVtZW50XG4gICAgfVxuICB9XG5cbiAgaWYgKCFnbCkge1xuICAgIGlmICghY2FudmFzKSB7XG4gICAgICBjaGVjayQxKFxuICAgICAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnLFxuICAgICAgICAnbXVzdCBtYW51YWxseSBzcGVjaWZ5IHdlYmdsIGNvbnRleHQgb3V0c2lkZSBvZiBET00gZW52aXJvbm1lbnRzJylcbiAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVDYW52YXMoY29udGFpbmVyIHx8IGRvY3VtZW50LmJvZHksIG9uRG9uZSwgcGl4ZWxSYXRpbylcbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBjYW52YXMgPSByZXN1bHQuY2FudmFzXG4gICAgICBvbkRlc3Ryb3kgPSByZXN1bHQub25EZXN0cm95XG4gICAgfVxuICAgIC8vIHdvcmthcm91bmQgZm9yIGNocm9taXVtIGJ1ZywgcHJlbXVsdGlwbGllZCBhbHBoYSB2YWx1ZSBpcyBwbGF0Zm9ybSBkZXBlbmRlbnRcbiAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhID09PSB1bmRlZmluZWQpIGNvbnRleHRBdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWVcbiAgICBnbCA9IGNyZWF0ZUNvbnRleHQoY2FudmFzLCBjb250ZXh0QXR0cmlidXRlcylcbiAgfVxuXG4gIGlmICghZ2wpIHtcbiAgICBvbkRlc3Ryb3koKVxuICAgIG9uRG9uZSgnd2ViZ2wgbm90IHN1cHBvcnRlZCwgdHJ5IHVwZ3JhZGluZyB5b3VyIGJyb3dzZXIgb3IgZ3JhcGhpY3MgZHJpdmVycyBodHRwOi8vZ2V0LndlYmdsLm9yZycpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZ2w6IGdsLFxuICAgIGNhbnZhczogY2FudmFzLFxuICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgIGV4dGVuc2lvbnM6IGV4dGVuc2lvbnMsXG4gICAgb3B0aW9uYWxFeHRlbnNpb25zOiBvcHRpb25hbEV4dGVuc2lvbnMsXG4gICAgcGl4ZWxSYXRpbzogcGl4ZWxSYXRpbyxcbiAgICBwcm9maWxlOiBwcm9maWxlLFxuICAgIG9uRG9uZTogb25Eb25lLFxuICAgIG9uRGVzdHJveTogb25EZXN0cm95XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRXh0ZW5zaW9uQ2FjaGUgKGdsLCBjb25maWcpIHtcbiAgdmFyIGV4dGVuc2lvbnMgPSB7fVxuXG4gIGZ1bmN0aW9uIHRyeUxvYWRFeHRlbnNpb24gKG5hbWVfKSB7XG4gICAgY2hlY2skMS50eXBlKG5hbWVfLCAnc3RyaW5nJywgJ2V4dGVuc2lvbiBuYW1lIG11c3QgYmUgc3RyaW5nJylcbiAgICB2YXIgbmFtZSA9IG5hbWVfLnRvTG93ZXJDYXNlKClcbiAgICB2YXIgZXh0XG4gICAgdHJ5IHtcbiAgICAgIGV4dCA9IGV4dGVuc2lvbnNbbmFtZV0gPSBnbC5nZXRFeHRlbnNpb24obmFtZSlcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiAhIWV4dFxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWcuZXh0ZW5zaW9ucy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBuYW1lID0gY29uZmlnLmV4dGVuc2lvbnNbaV1cbiAgICBpZiAoIXRyeUxvYWRFeHRlbnNpb24obmFtZSkpIHtcbiAgICAgIGNvbmZpZy5vbkRlc3Ryb3koKVxuICAgICAgY29uZmlnLm9uRG9uZSgnXCInICsgbmFtZSArICdcIiBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBXZWJHTCBjb250ZXh0LCB0cnkgdXBncmFkaW5nIHlvdXIgc3lzdGVtIG9yIGEgZGlmZmVyZW50IGJyb3dzZXInKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBjb25maWcub3B0aW9uYWxFeHRlbnNpb25zLmZvckVhY2godHJ5TG9hZEV4dGVuc2lvbilcblxuICByZXR1cm4ge1xuICAgIGV4dGVuc2lvbnM6IGV4dGVuc2lvbnMsXG4gICAgcmVzdG9yZTogZnVuY3Rpb24gKCkge1xuICAgICAgT2JqZWN0LmtleXMoZXh0ZW5zaW9ucykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoZXh0ZW5zaW9uc1tuYW1lXSAmJiAhdHJ5TG9hZEV4dGVuc2lvbihuYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignKHJlZ2wpOiBlcnJvciByZXN0b3JpbmcgZXh0ZW5zaW9uICcgKyBuYW1lKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsb29wIChuLCBmKSB7XG4gIHZhciByZXN1bHQgPSBBcnJheShuKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xuICAgIHJlc3VsdFtpXSA9IGYoaSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbnZhciBHTF9CWVRFJDEgPSA1MTIwXG52YXIgR0xfVU5TSUdORURfQllURSQyID0gNTEyMVxudmFyIEdMX1NIT1JUJDEgPSA1MTIyXG52YXIgR0xfVU5TSUdORURfU0hPUlQkMSA9IDUxMjNcbnZhciBHTF9JTlQkMSA9IDUxMjRcbnZhciBHTF9VTlNJR05FRF9JTlQkMSA9IDUxMjVcbnZhciBHTF9GTE9BVCQyID0gNTEyNlxuXG5mdW5jdGlvbiBuZXh0UG93MTYgKHYpIHtcbiAgZm9yICh2YXIgaSA9IDE2OyBpIDw9ICgxIDw8IDI4KTsgaSAqPSAxNikge1xuICAgIGlmICh2IDw9IGkpIHtcbiAgICAgIHJldHVybiBpXG4gICAgfVxuICB9XG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIGxvZzIgKHYpIHtcbiAgdmFyIHIsIHNoaWZ0XG4gIHIgPSAodiA+IDB4RkZGRikgPDwgNFxuICB2ID4+Pj0gclxuICBzaGlmdCA9ICh2ID4gMHhGRikgPDwgM1xuICB2ID4+Pj0gc2hpZnQ7IHIgfD0gc2hpZnRcbiAgc2hpZnQgPSAodiA+IDB4RikgPDwgMlxuICB2ID4+Pj0gc2hpZnQ7IHIgfD0gc2hpZnRcbiAgc2hpZnQgPSAodiA+IDB4MykgPDwgMVxuICB2ID4+Pj0gc2hpZnQ7IHIgfD0gc2hpZnRcbiAgcmV0dXJuIHIgfCAodiA+PiAxKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQb29sICgpIHtcbiAgdmFyIGJ1ZmZlclBvb2wgPSBsb29wKDgsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gW11cbiAgfSlcblxuICBmdW5jdGlvbiBhbGxvYyAobikge1xuICAgIHZhciBzeiA9IG5leHRQb3cxNihuKVxuICAgIHZhciBiaW4gPSBidWZmZXJQb29sW2xvZzIoc3opID4+IDJdXG4gICAgaWYgKGJpbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gYmluLnBvcCgpXG4gICAgfVxuICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoc3opXG4gIH1cblxuICBmdW5jdGlvbiBmcmVlIChidWYpIHtcbiAgICBidWZmZXJQb29sW2xvZzIoYnVmLmJ5dGVMZW5ndGgpID4+IDJdLnB1c2goYnVmKVxuICB9XG5cbiAgZnVuY3Rpb24gYWxsb2NUeXBlICh0eXBlLCBuKSB7XG4gICAgdmFyIHJlc3VsdCA9IG51bGxcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgR0xfQllURSQxOlxuICAgICAgICByZXN1bHQgPSBuZXcgSW50OEFycmF5KGFsbG9jKG4pLCAwLCBuKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFJDI6XG4gICAgICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGFsbG9jKG4pLCAwLCBuKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBHTF9TSE9SVCQxOlxuICAgICAgICByZXN1bHQgPSBuZXcgSW50MTZBcnJheShhbGxvYygyICogbiksIDAsIG4pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUJDE6XG4gICAgICAgIHJlc3VsdCA9IG5ldyBVaW50MTZBcnJheShhbGxvYygyICogbiksIDAsIG4pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIEdMX0lOVCQxOlxuICAgICAgICByZXN1bHQgPSBuZXcgSW50MzJBcnJheShhbGxvYyg0ICogbiksIDAsIG4pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVCQxOlxuICAgICAgICByZXN1bHQgPSBuZXcgVWludDMyQXJyYXkoYWxsb2MoNCAqIG4pLCAwLCBuKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBHTF9GTE9BVCQyOlxuICAgICAgICByZXN1bHQgPSBuZXcgRmxvYXQzMkFycmF5KGFsbG9jKDQgKiBuKSwgMCwgbilcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGlmIChyZXN1bHQubGVuZ3RoICE9PSBuKSB7XG4gICAgICByZXR1cm4gcmVzdWx0LnN1YmFycmF5KDAsIG4pXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGZyZWVUeXBlIChhcnJheSkge1xuICAgIGZyZWUoYXJyYXkuYnVmZmVyKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhbGxvYzogYWxsb2MsXG4gICAgZnJlZTogZnJlZSxcbiAgICBhbGxvY1R5cGU6IGFsbG9jVHlwZSxcbiAgICBmcmVlVHlwZTogZnJlZVR5cGVcbiAgfVxufVxuXG52YXIgcG9vbCA9IGNyZWF0ZVBvb2woKVxuXG4vLyB6ZXJvIHBvb2wgZm9yIGluaXRpYWwgemVybyBkYXRhXG5wb29sLnplcm8gPSBjcmVhdGVQb29sKClcblxudmFyIEdMX1NVQlBJWEVMX0JJVFMgPSAweDBENTBcbnZhciBHTF9SRURfQklUUyA9IDB4MEQ1MlxudmFyIEdMX0dSRUVOX0JJVFMgPSAweDBENTNcbnZhciBHTF9CTFVFX0JJVFMgPSAweDBENTRcbnZhciBHTF9BTFBIQV9CSVRTID0gMHgwRDU1XG52YXIgR0xfREVQVEhfQklUUyA9IDB4MEQ1NlxudmFyIEdMX1NURU5DSUxfQklUUyA9IDB4MEQ1N1xuXG52YXIgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFID0gMHg4NDZEXG52YXIgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFID0gMHg4NDZFXG5cbnZhciBHTF9NQVhfVEVYVFVSRV9TSVpFID0gMHgwRDMzXG52YXIgR0xfTUFYX1ZJRVdQT1JUX0RJTVMgPSAweDBEM0FcbnZhciBHTF9NQVhfVkVSVEVYX0FUVFJJQlMgPSAweDg4NjlcbnZhciBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyA9IDB4OERGQlxudmFyIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAweDhERkNcbnZhciBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RFxudmFyIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0Q1xudmFyIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMHg4ODcyXG52YXIgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyA9IDB4OERGRFxudmFyIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAweDg1MUNcbnZhciBHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkUgPSAweDg0RThcblxudmFyIEdMX1ZFTkRPUiA9IDB4MUYwMFxudmFyIEdMX1JFTkRFUkVSID0gMHgxRjAxXG52YXIgR0xfVkVSU0lPTiA9IDB4MUYwMlxudmFyIEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTiA9IDB4OEI4Q1xuXG52YXIgR0xfTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUID0gMHg4NEZGXG5cbnZhciBHTF9NQVhfQ09MT1JfQVRUQUNITUVOVFNfV0VCR0wgPSAweDhDREZcbnZhciBHTF9NQVhfRFJBV19CVUZGRVJTX1dFQkdMID0gMHg4ODI0XG5cbnZhciBHTF9URVhUVVJFXzJEID0gMHgwREUxXG52YXIgR0xfVEVYVFVSRV9DVUJFX01BUCA9IDB4ODUxM1xudmFyIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9IDB4ODUxNVxudmFyIEdMX1RFWFRVUkUwID0gMHg4NEMwXG52YXIgR0xfUkdCQSA9IDB4MTkwOFxudmFyIEdMX0ZMT0FUJDEgPSAweDE0MDZcbnZhciBHTF9VTlNJR05FRF9CWVRFJDEgPSAweDE0MDFcbnZhciBHTF9GUkFNRUJVRkZFUiA9IDB4OEQ0MFxudmFyIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFID0gMHg4Q0Q1XG52YXIgR0xfQ09MT1JfQVRUQUNITUVOVDAgPSAweDhDRTBcbnZhciBHTF9DT0xPUl9CVUZGRVJfQklUJDEgPSAweDQwMDBcblxudmFyIHdyYXBMaW1pdHMgPSBmdW5jdGlvbiAoZ2wsIGV4dGVuc2lvbnMpIHtcbiAgdmFyIG1heEFuaXNvdHJvcGljID0gMVxuICBpZiAoZXh0ZW5zaW9ucy5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMpIHtcbiAgICBtYXhBbmlzb3Ryb3BpYyA9IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpXG4gIH1cblxuICB2YXIgbWF4RHJhd2J1ZmZlcnMgPSAxXG4gIHZhciBtYXhDb2xvckF0dGFjaG1lbnRzID0gMVxuICBpZiAoZXh0ZW5zaW9ucy53ZWJnbF9kcmF3X2J1ZmZlcnMpIHtcbiAgICBtYXhEcmF3YnVmZmVycyA9IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfRFJBV19CVUZGRVJTX1dFQkdMKVxuICAgIG1heENvbG9yQXR0YWNobWVudHMgPSBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKVxuICB9XG5cbiAgLy8gZGV0ZWN0IGlmIHJlYWRpbmcgZmxvYXQgdGV4dHVyZXMgaXMgYXZhaWxhYmxlIChTYWZhcmkgZG9lc24ndCBzdXBwb3J0KVxuICB2YXIgcmVhZEZsb2F0ID0gISFleHRlbnNpb25zLm9lc190ZXh0dXJlX2Zsb2F0XG4gIGlmIChyZWFkRmxvYXQpIHtcbiAgICB2YXIgcmVhZEZsb2F0VGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKVxuICAgIGdsLmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHJlYWRGbG9hdFRleHR1cmUpXG4gICAgZ2wudGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCAxLCAxLCAwLCBHTF9SR0JBLCBHTF9GTE9BVCQxLCBudWxsKVxuXG4gICAgdmFyIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKClcbiAgICBnbC5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibylcbiAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHJlYWRGbG9hdFRleHR1cmUsIDApXG4gICAgZ2wuYmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbnVsbClcblxuICAgIGlmIChnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKSAhPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHJlYWRGbG9hdCA9IGZhbHNlXG5cbiAgICBlbHNlIHtcbiAgICAgIGdsLnZpZXdwb3J0KDAsIDAsIDEsIDEpXG4gICAgICBnbC5jbGVhckNvbG9yKDEuMCwgMC4wLCAwLjAsIDEuMClcbiAgICAgIGdsLmNsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQkMSlcbiAgICAgIHZhciBwaXhlbHMgPSBwb29sLmFsbG9jVHlwZShHTF9GTE9BVCQxLCA0KVxuICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCAxLCAxLCBHTF9SR0JBLCBHTF9GTE9BVCQxLCBwaXhlbHMpXG5cbiAgICAgIGlmIChnbC5nZXRFcnJvcigpKSByZWFkRmxvYXQgPSBmYWxzZVxuICAgICAgZWxzZSB7XG4gICAgICAgIGdsLmRlbGV0ZUZyYW1lYnVmZmVyKGZibylcbiAgICAgICAgZ2wuZGVsZXRlVGV4dHVyZShyZWFkRmxvYXRUZXh0dXJlKVxuXG4gICAgICAgIHJlYWRGbG9hdCA9IHBpeGVsc1swXSA9PT0gMS4wXG4gICAgICB9XG5cbiAgICAgIHBvb2wuZnJlZVR5cGUocGl4ZWxzKVxuICAgIH1cbiAgfVxuXG4gIC8vIGRldGVjdCBub24gcG93ZXIgb2YgdHdvIGN1YmUgdGV4dHVyZXMgc3VwcG9ydCAoSUUgZG9lc24ndCBzdXBwb3J0KVxuICB2YXIgaXNJRSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmICgvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAvVHJpZGVudFxcLy8udGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbikgfHwgL0VkZ2UvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpXG5cbiAgdmFyIG5wb3RUZXh0dXJlQ3ViZSA9IHRydWVcblxuICBpZiAoIWlzSUUpIHtcbiAgICB2YXIgY3ViZVRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKClcbiAgICB2YXIgZGF0YSA9IHBvb2wuYWxsb2NUeXBlKEdMX1VOU0lHTkVEX0JZVEUkMSwgMzYpXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMClcbiAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFX0NVQkVfTUFQLCBjdWJlVGV4dHVyZSlcbiAgICBnbC50ZXhJbWFnZTJEKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCwgR0xfUkdCQSwgMywgMywgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSQxLCBkYXRhKVxuICAgIHBvb2wuZnJlZVR5cGUoZGF0YSlcbiAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFX0NVQkVfTUFQLCBudWxsKVxuICAgIGdsLmRlbGV0ZVRleHR1cmUoY3ViZVRleHR1cmUpXG4gICAgbnBvdFRleHR1cmVDdWJlID0gIWdsLmdldEVycm9yKClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLy8gZHJhd2luZyBidWZmZXIgYml0IGRlcHRoXG4gICAgY29sb3JCaXRzOiBbXG4gICAgICBnbC5nZXRQYXJhbWV0ZXIoR0xfUkVEX0JJVFMpLFxuICAgICAgZ2wuZ2V0UGFyYW1ldGVyKEdMX0dSRUVOX0JJVFMpLFxuICAgICAgZ2wuZ2V0UGFyYW1ldGVyKEdMX0JMVUVfQklUUyksXG4gICAgICBnbC5nZXRQYXJhbWV0ZXIoR0xfQUxQSEFfQklUUylcbiAgICBdLFxuICAgIGRlcHRoQml0czogZ2wuZ2V0UGFyYW1ldGVyKEdMX0RFUFRIX0JJVFMpLFxuICAgIHN0ZW5jaWxCaXRzOiBnbC5nZXRQYXJhbWV0ZXIoR0xfU1RFTkNJTF9CSVRTKSxcbiAgICBzdWJwaXhlbEJpdHM6IGdsLmdldFBhcmFtZXRlcihHTF9TVUJQSVhFTF9CSVRTKSxcblxuICAgIC8vIHN1cHBvcnRlZCBleHRlbnNpb25zXG4gICAgZXh0ZW5zaW9uczogT2JqZWN0LmtleXMoZXh0ZW5zaW9ucykuZmlsdGVyKGZ1bmN0aW9uIChleHQpIHtcbiAgICAgIHJldHVybiAhIWV4dGVuc2lvbnNbZXh0XVxuICAgIH0pLFxuXG4gICAgLy8gbWF4IGFuaXNvIHNhbXBsZXNcbiAgICBtYXhBbmlzb3Ryb3BpYzogbWF4QW5pc290cm9waWMsXG5cbiAgICAvLyBtYXggZHJhdyBidWZmZXJzXG4gICAgbWF4RHJhd2J1ZmZlcnM6IG1heERyYXdidWZmZXJzLFxuICAgIG1heENvbG9yQXR0YWNobWVudHM6IG1heENvbG9yQXR0YWNobWVudHMsXG5cbiAgICAvLyBwb2ludCBhbmQgbGluZSBzaXplIHJhbmdlc1xuICAgIHBvaW50U2l6ZURpbXM6IGdsLmdldFBhcmFtZXRlcihHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UpLFxuICAgIGxpbmVXaWR0aERpbXM6IGdsLmdldFBhcmFtZXRlcihHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UpLFxuICAgIG1heFZpZXdwb3J0RGltczogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9WSUVXUE9SVF9ESU1TKSxcbiAgICBtYXhDb21iaW5lZFRleHR1cmVVbml0czogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTKSxcbiAgICBtYXhDdWJlTWFwU2l6ZTogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUpLFxuICAgIG1heFJlbmRlcmJ1ZmZlclNpemU6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkUpLFxuICAgIG1heFRleHR1cmVVbml0czogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTKSxcbiAgICBtYXhUZXh0dXJlU2l6ZTogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9URVhUVVJFX1NJWkUpLFxuICAgIG1heEF0dHJpYnV0ZXM6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfVkVSVEVYX0FUVFJJQlMpLFxuICAgIG1heFZlcnRleFVuaWZvcm1zOiBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpLFxuICAgIG1heFZlcnRleFRleHR1cmVVbml0czogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyksXG4gICAgbWF4VmFyeWluZ1ZlY3RvcnM6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfVkFSWUlOR19WRUNUT1JTKSxcbiAgICBtYXhGcmFnbWVudFVuaWZvcm1zOiBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyksXG5cbiAgICAvLyB2ZW5kb3IgaW5mb1xuICAgIGdsc2w6IGdsLmdldFBhcmFtZXRlcihHTF9TSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pLFxuICAgIHJlbmRlcmVyOiBnbC5nZXRQYXJhbWV0ZXIoR0xfUkVOREVSRVIpLFxuICAgIHZlbmRvcjogZ2wuZ2V0UGFyYW1ldGVyKEdMX1ZFTkRPUiksXG4gICAgdmVyc2lvbjogZ2wuZ2V0UGFyYW1ldGVyKEdMX1ZFUlNJT04pLFxuXG4gICAgLy8gcXVpcmtzXG4gICAgcmVhZEZsb2F0OiByZWFkRmxvYXQsXG4gICAgbnBvdFRleHR1cmVDdWJlOiBucG90VGV4dHVyZUN1YmVcbiAgfVxufVxuXG5mdW5jdGlvbiBpc05EQXJyYXlMaWtlIChvYmopIHtcbiAgcmV0dXJuIChcbiAgICAhIW9iaiAmJlxuICAgIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmXG4gICAgQXJyYXkuaXNBcnJheShvYmouc2hhcGUpICYmXG4gICAgQXJyYXkuaXNBcnJheShvYmouc3RyaWRlKSAmJlxuICAgIHR5cGVvZiBvYmoub2Zmc2V0ID09PSAnbnVtYmVyJyAmJlxuICAgIG9iai5zaGFwZS5sZW5ndGggPT09IG9iai5zdHJpZGUubGVuZ3RoICYmXG4gICAgKEFycmF5LmlzQXJyYXkob2JqLmRhdGEpIHx8XG4gICAgICBpc1R5cGVkQXJyYXkob2JqLmRhdGEpKSlcbn1cblxudmFyIHZhbHVlcyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIG9ialtrZXldIH0pXG59XG5cbnZhciBmbGF0dGVuVXRpbHMgPSB7XG4gIHNoYXBlOiBhcnJheVNoYXBlJDEsXG4gIGZsYXR0ZW46IGZsYXR0ZW5BcnJheVxufTtcblxuZnVuY3Rpb24gZmxhdHRlbjFEIChhcnJheSwgbngsIG91dCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG54OyArK2kpIHtcbiAgICBvdXRbaV0gPSBhcnJheVtpXVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW4yRCAoYXJyYXksIG54LCBueSwgb3V0KSB7XG4gIHZhciBwdHIgPSAwXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbng7ICsraSkge1xuICAgIHZhciByb3cgPSBhcnJheVtpXVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnk7ICsraikge1xuICAgICAgb3V0W3B0cisrXSA9IHJvd1tqXVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuM0QgKGFycmF5LCBueCwgbnksIG56LCBvdXQsIHB0cl8pIHtcbiAgdmFyIHB0ciA9IHB0cl9cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBueDsgKytpKSB7XG4gICAgdmFyIHJvdyA9IGFycmF5W2ldXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBueTsgKytqKSB7XG4gICAgICB2YXIgY29sID0gcm93W2pdXG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IG56OyArK2spIHtcbiAgICAgICAgb3V0W3B0cisrXSA9IGNvbFtrXVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuUmVjIChhcnJheSwgc2hhcGUsIGxldmVsLCBvdXQsIHB0cikge1xuICB2YXIgc3RyaWRlID0gMVxuICBmb3IgKHZhciBpID0gbGV2ZWwgKyAxOyBpIDwgc2hhcGUubGVuZ3RoOyArK2kpIHtcbiAgICBzdHJpZGUgKj0gc2hhcGVbaV1cbiAgfVxuICB2YXIgbiA9IHNoYXBlW2xldmVsXVxuICBpZiAoc2hhcGUubGVuZ3RoIC0gbGV2ZWwgPT09IDQpIHtcbiAgICB2YXIgbnggPSBzaGFwZVtsZXZlbCArIDFdXG4gICAgdmFyIG55ID0gc2hhcGVbbGV2ZWwgKyAyXVxuICAgIHZhciBueiA9IHNoYXBlW2xldmVsICsgM11cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBmbGF0dGVuM0QoYXJyYXlbaV0sIG54LCBueSwgbnosIG91dCwgcHRyKVxuICAgICAgcHRyICs9IHN0cmlkZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBmbGF0dGVuUmVjKGFycmF5W2ldLCBzaGFwZSwgbGV2ZWwgKyAxLCBvdXQsIHB0cilcbiAgICAgIHB0ciArPSBzdHJpZGVcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxhdHRlbkFycmF5IChhcnJheSwgc2hhcGUsIHR5cGUsIG91dF8pIHtcbiAgdmFyIHN6ID0gMVxuICBpZiAoc2hhcGUubGVuZ3RoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaGFwZS5sZW5ndGg7ICsraSkge1xuICAgICAgc3ogKj0gc2hhcGVbaV1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3ogPSAwXG4gIH1cbiAgdmFyIG91dCA9IG91dF8gfHwgcG9vbC5hbGxvY1R5cGUodHlwZSwgc3opXG4gIHN3aXRjaCAoc2hhcGUubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgYnJlYWtcbiAgICBjYXNlIDE6XG4gICAgICBmbGF0dGVuMUQoYXJyYXksIHNoYXBlWzBdLCBvdXQpXG4gICAgICBicmVha1xuICAgIGNhc2UgMjpcbiAgICAgIGZsYXR0ZW4yRChhcnJheSwgc2hhcGVbMF0sIHNoYXBlWzFdLCBvdXQpXG4gICAgICBicmVha1xuICAgIGNhc2UgMzpcbiAgICAgIGZsYXR0ZW4zRChhcnJheSwgc2hhcGVbMF0sIHNoYXBlWzFdLCBzaGFwZVsyXSwgb3V0LCAwKVxuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgZmxhdHRlblJlYyhhcnJheSwgc2hhcGUsIDAsIG91dCwgMClcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIGFycmF5U2hhcGUkMSAoYXJyYXlfKSB7XG4gIHZhciBzaGFwZSA9IFtdXG4gIGZvciAodmFyIGFycmF5ID0gYXJyYXlfOyBhcnJheS5sZW5ndGg7IGFycmF5ID0gYXJyYXlbMF0pIHtcbiAgICBzaGFwZS5wdXNoKGFycmF5Lmxlbmd0aClcbiAgfVxuICByZXR1cm4gc2hhcGVcbn1cblxudmFyIGFycmF5VHlwZXMgPSAge1xuXHRcIltvYmplY3QgSW50OEFycmF5XVwiOiA1MTIwLFxuXHRcIltvYmplY3QgSW50MTZBcnJheV1cIjogNTEyMixcblx0XCJbb2JqZWN0IEludDMyQXJyYXldXCI6IDUxMjQsXG5cdFwiW29iamVjdCBVaW50OEFycmF5XVwiOiA1MTIxLFxuXHRcIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldXCI6IDUxMjEsXG5cdFwiW29iamVjdCBVaW50MTZBcnJheV1cIjogNTEyMyxcblx0XCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiOiA1MTI1LFxuXHRcIltvYmplY3QgRmxvYXQzMkFycmF5XVwiOiA1MTI2LFxuXHRcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiOiA1MTIxLFxuXHRcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI6IDUxMjFcbn07XG5cbnZhciBpbnQ4ID0gNTEyMDtcbnZhciBpbnQxNiA9IDUxMjI7XG52YXIgaW50MzIgPSA1MTI0O1xudmFyIHVpbnQ4ID0gNTEyMTtcbnZhciB1aW50MTYgPSA1MTIzO1xudmFyIHVpbnQzMiA9IDUxMjU7XG52YXIgZmxvYXQgPSA1MTI2O1xudmFyIGZsb2F0MzIgPSA1MTI2O1xudmFyIGdsVHlwZXMgPSB7XG5cdGludDg6IGludDgsXG5cdGludDE2OiBpbnQxNixcblx0aW50MzI6IGludDMyLFxuXHR1aW50ODogdWludDgsXG5cdHVpbnQxNjogdWludDE2LFxuXHR1aW50MzI6IHVpbnQzMixcblx0ZmxvYXQ6IGZsb2F0LFxuXHRmbG9hdDMyOiBmbG9hdDMyXG59O1xuXG52YXIgZHluYW1pYyQxID0gMzUwNDg7XG52YXIgc3RyZWFtID0gMzUwNDA7XG52YXIgdXNhZ2VUeXBlcyA9IHtcblx0ZHluYW1pYzogZHluYW1pYyQxLFxuXHRzdHJlYW06IHN0cmVhbSxcblx0XCJzdGF0aWNcIjogMzUwNDRcbn07XG5cbnZhciBhcnJheUZsYXR0ZW4gPSBmbGF0dGVuVXRpbHMuZmxhdHRlblxudmFyIGFycmF5U2hhcGUgPSBmbGF0dGVuVXRpbHMuc2hhcGVcblxudmFyIEdMX1NUQVRJQ19EUkFXID0gMHg4OEU0XG52YXIgR0xfU1RSRUFNX0RSQVcgPSAweDg4RTBcblxudmFyIEdMX1VOU0lHTkVEX0JZVEUkMyA9IDUxMjFcbnZhciBHTF9GTE9BVCQzID0gNTEyNlxuXG52YXIgRFRZUEVTX1NJWkVTID0gW11cbkRUWVBFU19TSVpFU1s1MTIwXSA9IDEgLy8gaW50OFxuRFRZUEVTX1NJWkVTWzUxMjJdID0gMiAvLyBpbnQxNlxuRFRZUEVTX1NJWkVTWzUxMjRdID0gNCAvLyBpbnQzMlxuRFRZUEVTX1NJWkVTWzUxMjFdID0gMSAvLyB1aW50OFxuRFRZUEVTX1NJWkVTWzUxMjNdID0gMiAvLyB1aW50MTZcbkRUWVBFU19TSVpFU1s1MTI1XSA9IDQgLy8gdWludDMyXG5EVFlQRVNfU0laRVNbNTEyNl0gPSA0IC8vIGZsb2F0MzJcblxuZnVuY3Rpb24gdHlwZWRBcnJheUNvZGUgKGRhdGEpIHtcbiAgcmV0dXJuIGFycmF5VHlwZXNbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpXSB8IDBcbn1cblxuZnVuY3Rpb24gY29weUFycmF5IChvdXQsIGlucCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGlucC5sZW5ndGg7ICsraSkge1xuICAgIG91dFtpXSA9IGlucFtpXVxuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zcG9zZSAoXG4gIHJlc3VsdCwgZGF0YSwgc2hhcGVYLCBzaGFwZVksIHN0cmlkZVgsIHN0cmlkZVksIG9mZnNldCkge1xuICB2YXIgcHRyID0gMFxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNoYXBlWDsgKytpKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaGFwZVk7ICsraikge1xuICAgICAgcmVzdWx0W3B0cisrXSA9IGRhdGFbc3RyaWRlWCAqIGkgKyBzdHJpZGVZICogaiArIG9mZnNldF1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JhcEJ1ZmZlclN0YXRlIChnbCwgc3RhdHMsIGNvbmZpZywgZGVzdHJveUJ1ZmZlcikge1xuICB2YXIgYnVmZmVyQ291bnQgPSAwXG4gIHZhciBidWZmZXJTZXQgPSB7fVxuXG4gIGZ1bmN0aW9uIFJFR0xCdWZmZXIgKHR5cGUpIHtcbiAgICB0aGlzLmlkID0gYnVmZmVyQ291bnQrK1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKClcbiAgICB0aGlzLnR5cGUgPSB0eXBlXG4gICAgdGhpcy51c2FnZSA9IEdMX1NUQVRJQ19EUkFXXG4gICAgdGhpcy5ieXRlTGVuZ3RoID0gMFxuICAgIHRoaXMuZGltZW5zaW9uID0gMVxuICAgIHRoaXMuZHR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDNcblxuICAgIHRoaXMucGVyc2lzdGVudERhdGEgPSBudWxsXG5cbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIHRoaXMuc3RhdHMgPSB7IHNpemU6IDAgfVxuICAgIH1cbiAgfVxuXG4gIFJFR0xCdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZ2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKVxuICB9XG5cbiAgUkVHTEJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBkZXN0cm95KHRoaXMpXG4gIH1cblxuICB2YXIgc3RyZWFtUG9vbCA9IFtdXG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyZWFtICh0eXBlLCBkYXRhKSB7XG4gICAgdmFyIGJ1ZmZlciA9IHN0cmVhbVBvb2wucG9wKClcbiAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgYnVmZmVyID0gbmV3IFJFR0xCdWZmZXIodHlwZSlcbiAgICB9XG4gICAgYnVmZmVyLmJpbmQoKVxuICAgIGluaXRCdWZmZXJGcm9tRGF0YShidWZmZXIsIGRhdGEsIEdMX1NUUkVBTV9EUkFXLCAwLCAxLCBmYWxzZSlcbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95U3RyZWFtIChzdHJlYW0kJDEpIHtcbiAgICBzdHJlYW1Qb29sLnB1c2goc3RyZWFtJCQxKVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdEJ1ZmZlckZyb21UeXBlZEFycmF5IChidWZmZXIsIGRhdGEsIHVzYWdlKSB7XG4gICAgYnVmZmVyLmJ5dGVMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICBnbC5idWZmZXJEYXRhKGJ1ZmZlci50eXBlLCBkYXRhLCB1c2FnZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRCdWZmZXJGcm9tRGF0YSAoYnVmZmVyLCBkYXRhLCB1c2FnZSwgZHR5cGUsIGRpbWVuc2lvbiwgcGVyc2lzdCkge1xuICAgIHZhciBzaGFwZVxuICAgIGJ1ZmZlci51c2FnZSA9IHVzYWdlXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IEdMX0ZMT0FUJDNcbiAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIGZsYXREYXRhXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbMF0pKSB7XG4gICAgICAgICAgc2hhcGUgPSBhcnJheVNoYXBlKGRhdGEpXG4gICAgICAgICAgdmFyIGRpbSA9IDFcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHNoYXBlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBkaW0gKj0gc2hhcGVbaV1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmZmVyLmRpbWVuc2lvbiA9IGRpbVxuICAgICAgICAgIGZsYXREYXRhID0gYXJyYXlGbGF0dGVuKGRhdGEsIHNoYXBlLCBidWZmZXIuZHR5cGUpXG4gICAgICAgICAgaW5pdEJ1ZmZlckZyb21UeXBlZEFycmF5KGJ1ZmZlciwgZmxhdERhdGEsIHVzYWdlKVxuICAgICAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgICAgICBidWZmZXIucGVyc2lzdGVudERhdGEgPSBmbGF0RGF0YVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb29sLmZyZWVUeXBlKGZsYXREYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YVswXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBidWZmZXIuZGltZW5zaW9uID0gZGltZW5zaW9uXG4gICAgICAgICAgdmFyIHR5cGVkRGF0YSA9IHBvb2wuYWxsb2NUeXBlKGJ1ZmZlci5kdHlwZSwgZGF0YS5sZW5ndGgpXG4gICAgICAgICAgY29weUFycmF5KHR5cGVkRGF0YSwgZGF0YSlcbiAgICAgICAgICBpbml0QnVmZmVyRnJvbVR5cGVkQXJyYXkoYnVmZmVyLCB0eXBlZERhdGEsIHVzYWdlKVxuICAgICAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgICAgICBidWZmZXIucGVyc2lzdGVudERhdGEgPSB0eXBlZERhdGFcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9vbC5mcmVlVHlwZSh0eXBlZERhdGEpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzVHlwZWRBcnJheShkYXRhWzBdKSkge1xuICAgICAgICAgIGJ1ZmZlci5kaW1lbnNpb24gPSBkYXRhWzBdLmxlbmd0aFxuICAgICAgICAgIGJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IHR5cGVkQXJyYXlDb2RlKGRhdGFbMF0pIHx8IEdMX0ZMT0FUJDNcbiAgICAgICAgICBmbGF0RGF0YSA9IGFycmF5RmxhdHRlbihcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBbZGF0YS5sZW5ndGgsIGRhdGFbMF0ubGVuZ3RoXSxcbiAgICAgICAgICAgIGJ1ZmZlci5kdHlwZSlcbiAgICAgICAgICBpbml0QnVmZmVyRnJvbVR5cGVkQXJyYXkoYnVmZmVyLCBmbGF0RGF0YSwgdXNhZ2UpXG4gICAgICAgICAgaWYgKHBlcnNpc3QpIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wZXJzaXN0ZW50RGF0YSA9IGZsYXREYXRhXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvb2wuZnJlZVR5cGUoZmxhdERhdGEpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgYnVmZmVyIGRhdGEnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1R5cGVkQXJyYXkoZGF0YSkpIHtcbiAgICAgIGJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IHR5cGVkQXJyYXlDb2RlKGRhdGEpXG4gICAgICBidWZmZXIuZGltZW5zaW9uID0gZGltZW5zaW9uXG4gICAgICBpbml0QnVmZmVyRnJvbVR5cGVkQXJyYXkoYnVmZmVyLCBkYXRhLCB1c2FnZSlcbiAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgIGJ1ZmZlci5wZXJzaXN0ZW50RGF0YSA9IG5ldyBVaW50OEFycmF5KG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyKSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzTkRBcnJheUxpa2UoZGF0YSkpIHtcbiAgICAgIHNoYXBlID0gZGF0YS5zaGFwZVxuICAgICAgdmFyIHN0cmlkZSA9IGRhdGEuc3RyaWRlXG4gICAgICB2YXIgb2Zmc2V0ID0gZGF0YS5vZmZzZXRcblxuICAgICAgdmFyIHNoYXBlWCA9IDBcbiAgICAgIHZhciBzaGFwZVkgPSAwXG4gICAgICB2YXIgc3RyaWRlWCA9IDBcbiAgICAgIHZhciBzdHJpZGVZID0gMFxuICAgICAgaWYgKHNoYXBlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBzaGFwZVggPSBzaGFwZVswXVxuICAgICAgICBzaGFwZVkgPSAxXG4gICAgICAgIHN0cmlkZVggPSBzdHJpZGVbMF1cbiAgICAgICAgc3RyaWRlWSA9IDBcbiAgICAgIH0gZWxzZSBpZiAoc2hhcGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHNoYXBlWCA9IHNoYXBlWzBdXG4gICAgICAgIHNoYXBlWSA9IHNoYXBlWzFdXG4gICAgICAgIHN0cmlkZVggPSBzdHJpZGVbMF1cbiAgICAgICAgc3RyaWRlWSA9IHN0cmlkZVsxXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBzaGFwZScpXG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IHR5cGVkQXJyYXlDb2RlKGRhdGEuZGF0YSkgfHwgR0xfRkxPQVQkM1xuICAgICAgYnVmZmVyLmRpbWVuc2lvbiA9IHNoYXBlWVxuXG4gICAgICB2YXIgdHJhbnNwb3NlRGF0YSA9IHBvb2wuYWxsb2NUeXBlKGJ1ZmZlci5kdHlwZSwgc2hhcGVYICogc2hhcGVZKVxuICAgICAgdHJhbnNwb3NlKHRyYW5zcG9zZURhdGEsXG4gICAgICAgIGRhdGEuZGF0YSxcbiAgICAgICAgc2hhcGVYLCBzaGFwZVksXG4gICAgICAgIHN0cmlkZVgsIHN0cmlkZVksXG4gICAgICAgIG9mZnNldClcbiAgICAgIGluaXRCdWZmZXJGcm9tVHlwZWRBcnJheShidWZmZXIsIHRyYW5zcG9zZURhdGEsIHVzYWdlKVxuICAgICAgaWYgKHBlcnNpc3QpIHtcbiAgICAgICAgYnVmZmVyLnBlcnNpc3RlbnREYXRhID0gdHJhbnNwb3NlRGF0YVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9vbC5mcmVlVHlwZSh0cmFuc3Bvc2VEYXRhKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICBidWZmZXIuZHR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDNcbiAgICAgIGJ1ZmZlci5kaW1lbnNpb24gPSBkaW1lbnNpb25cbiAgICAgIGluaXRCdWZmZXJGcm9tVHlwZWRBcnJheShidWZmZXIsIGRhdGEsIHVzYWdlKVxuICAgICAgaWYgKHBlcnNpc3QpIHtcbiAgICAgICAgYnVmZmVyLnBlcnNpc3RlbnREYXRhID0gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQ4QXJyYXkoZGF0YSkpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgYnVmZmVyIGRhdGEnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3kgKGJ1ZmZlcikge1xuICAgIHN0YXRzLmJ1ZmZlckNvdW50LS1cblxuICAgIC8vIHJlbW92ZSBhdHRyaWJ1dGUgbGlua1xuICAgIGRlc3Ryb3lCdWZmZXIoYnVmZmVyKVxuXG4gICAgdmFyIGhhbmRsZSA9IGJ1ZmZlci5idWZmZXJcbiAgICBjaGVjayQxKGhhbmRsZSwgJ2J1ZmZlciBtdXN0IG5vdCBiZSBkZWxldGVkIGFscmVhZHknKVxuICAgIGdsLmRlbGV0ZUJ1ZmZlcihoYW5kbGUpXG4gICAgYnVmZmVyLmJ1ZmZlciA9IG51bGxcbiAgICBkZWxldGUgYnVmZmVyU2V0W2J1ZmZlci5pZF1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAob3B0aW9ucywgdHlwZSwgZGVmZXJJbml0LCBwZXJzaXN0ZW50KSB7XG4gICAgc3RhdHMuYnVmZmVyQ291bnQrK1xuXG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBSRUdMQnVmZmVyKHR5cGUpXG4gICAgYnVmZmVyU2V0W2J1ZmZlci5pZF0gPSBidWZmZXJcblxuICAgIGZ1bmN0aW9uIHJlZ2xCdWZmZXIgKG9wdGlvbnMpIHtcbiAgICAgIHZhciB1c2FnZSA9IEdMX1NUQVRJQ19EUkFXXG4gICAgICB2YXIgZGF0YSA9IG51bGxcbiAgICAgIHZhciBieXRlTGVuZ3RoID0gMFxuICAgICAgdmFyIGR0eXBlID0gMFxuICAgICAgdmFyIGRpbWVuc2lvbiA9IDFcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpIHx8XG4gICAgICAgICAgaXNUeXBlZEFycmF5KG9wdGlvbnMpIHx8XG4gICAgICAgICAgaXNOREFycmF5TGlrZShvcHRpb25zKSB8fFxuICAgICAgICAgIG9wdGlvbnMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBkYXRhID0gb3B0aW9uc1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgYnl0ZUxlbmd0aCA9IG9wdGlvbnMgfCAwXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgY2hlY2skMS50eXBlKFxuICAgICAgICAgIG9wdGlvbnMsICdvYmplY3QnLFxuICAgICAgICAgICdidWZmZXIgYXJndW1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBhIG51bWJlciBvciBhbiBhcnJheScpXG5cbiAgICAgICAgaWYgKCdkYXRhJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgY2hlY2skMShcbiAgICAgICAgICAgIGRhdGEgPT09IG51bGwgfHxcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgICAgIGlzVHlwZWRBcnJheShkYXRhKSB8fFxuICAgICAgICAgICAgaXNOREFycmF5TGlrZShkYXRhKSxcbiAgICAgICAgICAgICdpbnZhbGlkIGRhdGEgZm9yIGJ1ZmZlcicpXG4gICAgICAgICAgZGF0YSA9IG9wdGlvbnMuZGF0YVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCd1c2FnZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG9wdGlvbnMudXNhZ2UsIHVzYWdlVHlwZXMsICdpbnZhbGlkIGJ1ZmZlciB1c2FnZScpXG4gICAgICAgICAgdXNhZ2UgPSB1c2FnZVR5cGVzW29wdGlvbnMudXNhZ2VdXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3R5cGUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjaGVjayQxLnBhcmFtZXRlcihvcHRpb25zLnR5cGUsIGdsVHlwZXMsICdpbnZhbGlkIGJ1ZmZlciB0eXBlJylcbiAgICAgICAgICBkdHlwZSA9IGdsVHlwZXNbb3B0aW9ucy50eXBlXVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdkaW1lbnNpb24nIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjaGVjayQxLnR5cGUob3B0aW9ucy5kaW1lbnNpb24sICdudW1iZXInLCAnaW52YWxpZCBkaW1lbnNpb24nKVxuICAgICAgICAgIGRpbWVuc2lvbiA9IG9wdGlvbnMuZGltZW5zaW9uIHwgMFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdsZW5ndGgnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjaGVjayQxLm5uaShieXRlTGVuZ3RoLCAnYnVmZmVyIGxlbmd0aCBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlcicpXG4gICAgICAgICAgYnl0ZUxlbmd0aCA9IG9wdGlvbnMubGVuZ3RoIHwgMFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlci5iaW5kKClcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAvLyAjNDc1XG4gICAgICAgIGlmIChieXRlTGVuZ3RoKSBnbC5idWZmZXJEYXRhKGJ1ZmZlci50eXBlLCBieXRlTGVuZ3RoLCB1c2FnZSlcbiAgICAgICAgYnVmZmVyLmR0eXBlID0gZHR5cGUgfHwgR0xfVU5TSUdORURfQllURSQzXG4gICAgICAgIGJ1ZmZlci51c2FnZSA9IHVzYWdlXG4gICAgICAgIGJ1ZmZlci5kaW1lbnNpb24gPSBkaW1lbnNpb25cbiAgICAgICAgYnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0QnVmZmVyRnJvbURhdGEoYnVmZmVyLCBkYXRhLCB1c2FnZSwgZHR5cGUsIGRpbWVuc2lvbiwgcGVyc2lzdGVudClcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIGJ1ZmZlci5zdGF0cy5zaXplID0gYnVmZmVyLmJ5dGVMZW5ndGggKiBEVFlQRVNfU0laRVNbYnVmZmVyLmR0eXBlXVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVnbEJ1ZmZlclxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFN1YkRhdGEgKGRhdGEsIG9mZnNldCkge1xuICAgICAgY2hlY2skMShvZmZzZXQgKyBkYXRhLmJ5dGVMZW5ndGggPD0gYnVmZmVyLmJ5dGVMZW5ndGgsXG4gICAgICAgICdpbnZhbGlkIGJ1ZmZlciBzdWJkYXRhIGNhbGwsIGJ1ZmZlciBpcyB0b28gc21hbGwuICcgKyAnIENhblxcJ3Qgd3JpdGUgZGF0YSBvZiBzaXplICcgKyBkYXRhLmJ5dGVMZW5ndGggKyAnIHN0YXJ0aW5nIGZyb20gb2Zmc2V0ICcgKyBvZmZzZXQgKyAnIHRvIGEgYnVmZmVyIG9mIHNpemUgJyArIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuXG4gICAgICBnbC5idWZmZXJTdWJEYXRhKGJ1ZmZlci50eXBlLCBvZmZzZXQsIGRhdGEpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3ViZGF0YSAoZGF0YSwgb2Zmc2V0Xykge1xuICAgICAgdmFyIG9mZnNldCA9IChvZmZzZXRfIHx8IDApIHwgMFxuICAgICAgdmFyIHNoYXBlXG4gICAgICBidWZmZXIuYmluZCgpXG4gICAgICBpZiAoaXNUeXBlZEFycmF5KGRhdGEpIHx8IGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBzZXRTdWJEYXRhKGRhdGEsIG9mZnNldClcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhWzBdID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdmFyIGNvbnZlcnRlZCA9IHBvb2wuYWxsb2NUeXBlKGJ1ZmZlci5kdHlwZSwgZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICBjb3B5QXJyYXkoY29udmVydGVkLCBkYXRhKVxuICAgICAgICAgICAgc2V0U3ViRGF0YShjb252ZXJ0ZWQsIG9mZnNldClcbiAgICAgICAgICAgIHBvb2wuZnJlZVR5cGUoY29udmVydGVkKVxuICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhWzBdKSB8fCBpc1R5cGVkQXJyYXkoZGF0YVswXSkpIHtcbiAgICAgICAgICAgIHNoYXBlID0gYXJyYXlTaGFwZShkYXRhKVxuICAgICAgICAgICAgdmFyIGZsYXREYXRhID0gYXJyYXlGbGF0dGVuKGRhdGEsIHNoYXBlLCBidWZmZXIuZHR5cGUpXG4gICAgICAgICAgICBzZXRTdWJEYXRhKGZsYXREYXRhLCBvZmZzZXQpXG4gICAgICAgICAgICBwb29sLmZyZWVUeXBlKGZsYXREYXRhKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGVjayQxLnJhaXNlKCdpbnZhbGlkIGJ1ZmZlciBkYXRhJylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNOREFycmF5TGlrZShkYXRhKSkge1xuICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGVcbiAgICAgICAgdmFyIHN0cmlkZSA9IGRhdGEuc3RyaWRlXG5cbiAgICAgICAgdmFyIHNoYXBlWCA9IDBcbiAgICAgICAgdmFyIHNoYXBlWSA9IDBcbiAgICAgICAgdmFyIHN0cmlkZVggPSAwXG4gICAgICAgIHZhciBzdHJpZGVZID0gMFxuICAgICAgICBpZiAoc2hhcGUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgc2hhcGVYID0gc2hhcGVbMF1cbiAgICAgICAgICBzaGFwZVkgPSAxXG4gICAgICAgICAgc3RyaWRlWCA9IHN0cmlkZVswXVxuICAgICAgICAgIHN0cmlkZVkgPSAwXG4gICAgICAgIH0gZWxzZSBpZiAoc2hhcGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgc2hhcGVYID0gc2hhcGVbMF1cbiAgICAgICAgICBzaGFwZVkgPSBzaGFwZVsxXVxuICAgICAgICAgIHN0cmlkZVggPSBzdHJpZGVbMF1cbiAgICAgICAgICBzdHJpZGVZID0gc3RyaWRlWzFdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBzaGFwZScpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIGR0eXBlID0gQXJyYXkuaXNBcnJheShkYXRhLmRhdGEpXG4gICAgICAgICAgPyBidWZmZXIuZHR5cGVcbiAgICAgICAgICA6IHR5cGVkQXJyYXlDb2RlKGRhdGEuZGF0YSlcblxuICAgICAgICB2YXIgdHJhbnNwb3NlRGF0YSA9IHBvb2wuYWxsb2NUeXBlKGR0eXBlLCBzaGFwZVggKiBzaGFwZVkpXG4gICAgICAgIHRyYW5zcG9zZSh0cmFuc3Bvc2VEYXRhLFxuICAgICAgICAgIGRhdGEuZGF0YSxcbiAgICAgICAgICBzaGFwZVgsIHNoYXBlWSxcbiAgICAgICAgICBzdHJpZGVYLCBzdHJpZGVZLFxuICAgICAgICAgIGRhdGEub2Zmc2V0KVxuICAgICAgICBzZXRTdWJEYXRhKHRyYW5zcG9zZURhdGEsIG9mZnNldClcbiAgICAgICAgcG9vbC5mcmVlVHlwZSh0cmFuc3Bvc2VEYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBkYXRhIGZvciBidWZmZXIgc3ViZGF0YScpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVnbEJ1ZmZlclxuICAgIH1cblxuICAgIGlmICghZGVmZXJJbml0KSB7XG4gICAgICByZWdsQnVmZmVyKG9wdGlvbnMpXG4gICAgfVxuXG4gICAgcmVnbEJ1ZmZlci5fcmVnbFR5cGUgPSAnYnVmZmVyJ1xuICAgIHJlZ2xCdWZmZXIuX2J1ZmZlciA9IGJ1ZmZlclxuICAgIHJlZ2xCdWZmZXIuc3ViZGF0YSA9IHN1YmRhdGFcbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIHJlZ2xCdWZmZXIuc3RhdHMgPSBidWZmZXIuc3RhdHNcbiAgICB9XG4gICAgcmVnbEJ1ZmZlci5kZXN0cm95ID0gZnVuY3Rpb24gKCkgeyBkZXN0cm95KGJ1ZmZlcikgfVxuXG4gICAgcmV0dXJuIHJlZ2xCdWZmZXJcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3RvcmVCdWZmZXJzICgpIHtcbiAgICB2YWx1ZXMoYnVmZmVyU2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChidWZmZXIpIHtcbiAgICAgIGJ1ZmZlci5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKVxuICAgICAgZ2wuYmluZEJ1ZmZlcihidWZmZXIudHlwZSwgYnVmZmVyLmJ1ZmZlcilcbiAgICAgIGdsLmJ1ZmZlckRhdGEoXG4gICAgICAgIGJ1ZmZlci50eXBlLCBidWZmZXIucGVyc2lzdGVudERhdGEgfHwgYnVmZmVyLmJ5dGVMZW5ndGgsIGJ1ZmZlci51c2FnZSlcbiAgICB9KVxuICB9XG5cbiAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgc3RhdHMuZ2V0VG90YWxCdWZmZXJTaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRvdGFsID0gMFxuICAgICAgLy8gVE9ETzogUmlnaHQgbm93LCB0aGUgc3RyZWFtcyBhcmUgbm90IHBhcnQgb2YgdGhlIHRvdGFsIGNvdW50LlxuICAgICAgT2JqZWN0LmtleXMoYnVmZmVyU2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdG90YWwgKz0gYnVmZmVyU2V0W2tleV0uc3RhdHMuc2l6ZVxuICAgICAgfSlcbiAgICAgIHJldHVybiB0b3RhbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBjcmVhdGVCdWZmZXIsXG5cbiAgICBjcmVhdGVTdHJlYW06IGNyZWF0ZVN0cmVhbSxcbiAgICBkZXN0cm95U3RyZWFtOiBkZXN0cm95U3RyZWFtLFxuXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhbHVlcyhidWZmZXJTZXQpLmZvckVhY2goZGVzdHJveSlcbiAgICAgIHN0cmVhbVBvb2wuZm9yRWFjaChkZXN0cm95KVxuICAgIH0sXG5cbiAgICBnZXRCdWZmZXI6IGZ1bmN0aW9uICh3cmFwcGVyKSB7XG4gICAgICBpZiAod3JhcHBlciAmJiB3cmFwcGVyLl9idWZmZXIgaW5zdGFuY2VvZiBSRUdMQnVmZmVyKSB7XG4gICAgICAgIHJldHVybiB3cmFwcGVyLl9idWZmZXJcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIHJlc3RvcmU6IHJlc3RvcmVCdWZmZXJzLFxuXG4gICAgX2luaXRCdWZmZXI6IGluaXRCdWZmZXJGcm9tRGF0YVxuICB9XG59XG5cbnZhciBwb2ludHMgPSAwO1xudmFyIHBvaW50ID0gMDtcbnZhciBsaW5lcyA9IDE7XG52YXIgbGluZSA9IDE7XG52YXIgdHJpYW5nbGVzID0gNDtcbnZhciB0cmlhbmdsZSA9IDQ7XG52YXIgcHJpbVR5cGVzID0ge1xuXHRwb2ludHM6IHBvaW50cyxcblx0cG9pbnQ6IHBvaW50LFxuXHRsaW5lczogbGluZXMsXG5cdGxpbmU6IGxpbmUsXG5cdHRyaWFuZ2xlczogdHJpYW5nbGVzLFxuXHR0cmlhbmdsZTogdHJpYW5nbGUsXG5cdFwibGluZSBsb29wXCI6IDIsXG5cdFwibGluZSBzdHJpcFwiOiAzLFxuXHRcInRyaWFuZ2xlIHN0cmlwXCI6IDUsXG5cdFwidHJpYW5nbGUgZmFuXCI6IDZcbn07XG5cbnZhciBHTF9QT0lOVFMgPSAwXG52YXIgR0xfTElORVMgPSAxXG52YXIgR0xfVFJJQU5HTEVTID0gNFxuXG52YXIgR0xfQllURSQyID0gNTEyMFxudmFyIEdMX1VOU0lHTkVEX0JZVEUkNCA9IDUxMjFcbnZhciBHTF9TSE9SVCQyID0gNTEyMlxudmFyIEdMX1VOU0lHTkVEX1NIT1JUJDIgPSA1MTIzXG52YXIgR0xfSU5UJDIgPSA1MTI0XG52YXIgR0xfVU5TSUdORURfSU5UJDIgPSA1MTI1XG5cbnZhciBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiA9IDM0OTYzXG5cbnZhciBHTF9TVFJFQU1fRFJBVyQxID0gMHg4OEUwXG52YXIgR0xfU1RBVElDX0RSQVckMSA9IDB4ODhFNFxuXG5mdW5jdGlvbiB3cmFwRWxlbWVudHNTdGF0ZSAoZ2wsIGV4dGVuc2lvbnMsIGJ1ZmZlclN0YXRlLCBzdGF0cykge1xuICB2YXIgZWxlbWVudFNldCA9IHt9XG4gIHZhciBlbGVtZW50Q291bnQgPSAwXG5cbiAgdmFyIGVsZW1lbnRUeXBlcyA9IHtcbiAgICAndWludDgnOiBHTF9VTlNJR05FRF9CWVRFJDQsXG4gICAgJ3VpbnQxNic6IEdMX1VOU0lHTkVEX1NIT1JUJDJcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLm9lc19lbGVtZW50X2luZGV4X3VpbnQpIHtcbiAgICBlbGVtZW50VHlwZXMudWludDMyID0gR0xfVU5TSUdORURfSU5UJDJcbiAgfVxuXG4gIGZ1bmN0aW9uIFJFR0xFbGVtZW50QnVmZmVyIChidWZmZXIpIHtcbiAgICB0aGlzLmlkID0gZWxlbWVudENvdW50KytcbiAgICBlbGVtZW50U2V0W3RoaXMuaWRdID0gdGhpc1xuICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyXG4gICAgdGhpcy5wcmltVHlwZSA9IEdMX1RSSUFOR0xFU1xuICAgIHRoaXMudmVydENvdW50ID0gMFxuICAgIHRoaXMudHlwZSA9IDBcbiAgfVxuXG4gIFJFR0xFbGVtZW50QnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYnVmZmVyLmJpbmQoKVxuICB9XG5cbiAgdmFyIGJ1ZmZlclBvb2wgPSBbXVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRTdHJlYW0gKGRhdGEpIHtcbiAgICB2YXIgcmVzdWx0ID0gYnVmZmVyUG9vbC5wb3AoKVxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXN1bHQgPSBuZXcgUkVHTEVsZW1lbnRCdWZmZXIoYnVmZmVyU3RhdGUuY3JlYXRlKFxuICAgICAgICBudWxsLFxuICAgICAgICBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUixcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgZmFsc2UpLl9idWZmZXIpXG4gICAgfVxuICAgIGluaXRFbGVtZW50cyhyZXN1bHQsIGRhdGEsIEdMX1NUUkVBTV9EUkFXJDEsIC0xLCAtMSwgMCwgMClcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95RWxlbWVudFN0cmVhbSAoZWxlbWVudHMpIHtcbiAgICBidWZmZXJQb29sLnB1c2goZWxlbWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBpbml0RWxlbWVudHMgKFxuICAgIGVsZW1lbnRzLFxuICAgIGRhdGEsXG4gICAgdXNhZ2UsXG4gICAgcHJpbSxcbiAgICBjb3VudCxcbiAgICBieXRlTGVuZ3RoLFxuICAgIHR5cGUpIHtcbiAgICBlbGVtZW50cy5idWZmZXIuYmluZCgpXG4gICAgdmFyIGR0eXBlXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHZhciBwcmVkaWN0ZWRUeXBlID0gdHlwZVxuICAgICAgaWYgKCF0eXBlICYmIChcbiAgICAgICAgIWlzVHlwZWRBcnJheShkYXRhKSB8fFxuICAgICAgICAgKGlzTkRBcnJheUxpa2UoZGF0YSkgJiYgIWlzVHlwZWRBcnJheShkYXRhLmRhdGEpKSkpIHtcbiAgICAgICAgcHJlZGljdGVkVHlwZSA9IGV4dGVuc2lvbnMub2VzX2VsZW1lbnRfaW5kZXhfdWludFxuICAgICAgICAgID8gR0xfVU5TSUdORURfSU5UJDJcbiAgICAgICAgICA6IEdMX1VOU0lHTkVEX1NIT1JUJDJcbiAgICAgIH1cbiAgICAgIGJ1ZmZlclN0YXRlLl9pbml0QnVmZmVyKFxuICAgICAgICBlbGVtZW50cy5idWZmZXIsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHVzYWdlLFxuICAgICAgICBwcmVkaWN0ZWRUeXBlLFxuICAgICAgICAzKVxuICAgIH0gZWxzZSB7XG4gICAgICBnbC5idWZmZXJEYXRhKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBieXRlTGVuZ3RoLCB1c2FnZSlcbiAgICAgIGVsZW1lbnRzLmJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IEdMX1VOU0lHTkVEX0JZVEUkNFxuICAgICAgZWxlbWVudHMuYnVmZmVyLnVzYWdlID0gdXNhZ2VcbiAgICAgIGVsZW1lbnRzLmJ1ZmZlci5kaW1lbnNpb24gPSAzXG4gICAgICBlbGVtZW50cy5idWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbiAgICB9XG5cbiAgICBkdHlwZSA9IHR5cGVcbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIHN3aXRjaCAoZWxlbWVudHMuYnVmZmVyLmR0eXBlKSB7XG4gICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURSQ0OlxuICAgICAgICBjYXNlIEdMX0JZVEUkMjpcbiAgICAgICAgICBkdHlwZSA9IEdMX1VOU0lHTkVEX0JZVEUkNFxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVCQyOlxuICAgICAgICBjYXNlIEdMX1NIT1JUJDI6XG4gICAgICAgICAgZHR5cGUgPSBHTF9VTlNJR05FRF9TSE9SVCQyXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVCQyOlxuICAgICAgICBjYXNlIEdMX0lOVCQyOlxuICAgICAgICAgIGR0eXBlID0gR0xfVU5TSUdORURfSU5UJDJcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2hlY2skMS5yYWlzZSgndW5zdXBwb3J0ZWQgdHlwZSBmb3IgZWxlbWVudCBhcnJheScpXG4gICAgICB9XG4gICAgICBlbGVtZW50cy5idWZmZXIuZHR5cGUgPSBkdHlwZVxuICAgIH1cbiAgICBlbGVtZW50cy50eXBlID0gZHR5cGVcblxuICAgIC8vIENoZWNrIG9lc19lbGVtZW50X2luZGV4X3VpbnQgZXh0ZW5zaW9uXG4gICAgY2hlY2skMShcbiAgICAgIGR0eXBlICE9PSBHTF9VTlNJR05FRF9JTlQkMiB8fFxuICAgICAgISFleHRlbnNpb25zLm9lc19lbGVtZW50X2luZGV4X3VpbnQsXG4gICAgICAnMzIgYml0IGVsZW1lbnQgYnVmZmVycyBub3Qgc3VwcG9ydGVkLCBlbmFibGUgb2VzX2VsZW1lbnRfaW5kZXhfdWludCBmaXJzdCcpXG5cbiAgICAvLyB0cnkgdG8gZ3Vlc3MgZGVmYXVsdCBwcmltaXRpdmUgdHlwZSBhbmQgYXJndW1lbnRzXG4gICAgdmFyIHZlcnRDb3VudCA9IGNvdW50XG4gICAgaWYgKHZlcnRDb3VudCA8IDApIHtcbiAgICAgIHZlcnRDb3VudCA9IGVsZW1lbnRzLmJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICBpZiAoZHR5cGUgPT09IEdMX1VOU0lHTkVEX1NIT1JUJDIpIHtcbiAgICAgICAgdmVydENvdW50ID4+PSAxXG4gICAgICB9IGVsc2UgaWYgKGR0eXBlID09PSBHTF9VTlNJR05FRF9JTlQkMikge1xuICAgICAgICB2ZXJ0Q291bnQgPj49IDJcbiAgICAgIH1cbiAgICB9XG4gICAgZWxlbWVudHMudmVydENvdW50ID0gdmVydENvdW50XG5cbiAgICAvLyB0cnkgdG8gZ3Vlc3MgcHJpbWl0aXZlIHR5cGUgZnJvbSBjZWxsIGRpbWVuc2lvblxuICAgIHZhciBwcmltVHlwZSA9IHByaW1cbiAgICBpZiAocHJpbSA8IDApIHtcbiAgICAgIHByaW1UeXBlID0gR0xfVFJJQU5HTEVTXG4gICAgICB2YXIgZGltZW5zaW9uID0gZWxlbWVudHMuYnVmZmVyLmRpbWVuc2lvblxuICAgICAgaWYgKGRpbWVuc2lvbiA9PT0gMSkgcHJpbVR5cGUgPSBHTF9QT0lOVFNcbiAgICAgIGlmIChkaW1lbnNpb24gPT09IDIpIHByaW1UeXBlID0gR0xfTElORVNcbiAgICAgIGlmIChkaW1lbnNpb24gPT09IDMpIHByaW1UeXBlID0gR0xfVFJJQU5HTEVTXG4gICAgfVxuICAgIGVsZW1lbnRzLnByaW1UeXBlID0gcHJpbVR5cGVcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3lFbGVtZW50cyAoZWxlbWVudHMpIHtcbiAgICBzdGF0cy5lbGVtZW50c0NvdW50LS1cblxuICAgIGNoZWNrJDEoZWxlbWVudHMuYnVmZmVyICE9PSBudWxsLCAnbXVzdCBub3QgZG91YmxlIGRlc3Ryb3kgZWxlbWVudHMnKVxuICAgIGRlbGV0ZSBlbGVtZW50U2V0W2VsZW1lbnRzLmlkXVxuICAgIGVsZW1lbnRzLmJ1ZmZlci5kZXN0cm95KClcbiAgICBlbGVtZW50cy5idWZmZXIgPSBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50cyAob3B0aW9ucywgcGVyc2lzdGVudCkge1xuICAgIHZhciBidWZmZXIgPSBidWZmZXJTdGF0ZS5jcmVhdGUobnVsbCwgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRydWUpXG4gICAgdmFyIGVsZW1lbnRzID0gbmV3IFJFR0xFbGVtZW50QnVmZmVyKGJ1ZmZlci5fYnVmZmVyKVxuICAgIHN0YXRzLmVsZW1lbnRzQ291bnQrK1xuXG4gICAgZnVuY3Rpb24gcmVnbEVsZW1lbnRzIChvcHRpb25zKSB7XG4gICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgYnVmZmVyKClcbiAgICAgICAgZWxlbWVudHMucHJpbVR5cGUgPSBHTF9UUklBTkdMRVNcbiAgICAgICAgZWxlbWVudHMudmVydENvdW50ID0gMFxuICAgICAgICBlbGVtZW50cy50eXBlID0gR0xfVU5TSUdORURfQllURSQ0XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykge1xuICAgICAgICBidWZmZXIob3B0aW9ucylcbiAgICAgICAgZWxlbWVudHMucHJpbVR5cGUgPSBHTF9UUklBTkdMRVNcbiAgICAgICAgZWxlbWVudHMudmVydENvdW50ID0gb3B0aW9ucyB8IDBcbiAgICAgICAgZWxlbWVudHMudHlwZSA9IEdMX1VOU0lHTkVEX0JZVEUkNFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGRhdGEgPSBudWxsXG4gICAgICAgIHZhciB1c2FnZSA9IEdMX1NUQVRJQ19EUkFXJDFcbiAgICAgICAgdmFyIHByaW1UeXBlID0gLTFcbiAgICAgICAgdmFyIHZlcnRDb3VudCA9IC0xXG4gICAgICAgIHZhciBieXRlTGVuZ3RoID0gMFxuICAgICAgICB2YXIgZHR5cGUgPSAwXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpIHx8XG4gICAgICAgICAgICBpc1R5cGVkQXJyYXkob3B0aW9ucykgfHxcbiAgICAgICAgICAgIGlzTkRBcnJheUxpa2Uob3B0aW9ucykpIHtcbiAgICAgICAgICBkYXRhID0gb3B0aW9uc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrJDEudHlwZShvcHRpb25zLCAnb2JqZWN0JywgJ2ludmFsaWQgYXJndW1lbnRzIGZvciBlbGVtZW50cycpXG4gICAgICAgICAgaWYgKCdkYXRhJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBkYXRhID0gb3B0aW9ucy5kYXRhXG4gICAgICAgICAgICBjaGVjayQxKFxuICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGRhdGEpIHx8XG4gICAgICAgICAgICAgICAgaXNUeXBlZEFycmF5KGRhdGEpIHx8XG4gICAgICAgICAgICAgICAgaXNOREFycmF5TGlrZShkYXRhKSxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgZGF0YSBmb3IgZWxlbWVudCBidWZmZXInKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ3VzYWdlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjaGVjayQxLnBhcmFtZXRlcihcbiAgICAgICAgICAgICAgb3B0aW9ucy51c2FnZSxcbiAgICAgICAgICAgICAgdXNhZ2VUeXBlcyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgZWxlbWVudCBidWZmZXIgdXNhZ2UnKVxuICAgICAgICAgICAgdXNhZ2UgPSB1c2FnZVR5cGVzW29wdGlvbnMudXNhZ2VdXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgncHJpbWl0aXZlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjaGVjayQxLnBhcmFtZXRlcihcbiAgICAgICAgICAgICAgb3B0aW9ucy5wcmltaXRpdmUsXG4gICAgICAgICAgICAgIHByaW1UeXBlcyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgZWxlbWVudCBidWZmZXIgcHJpbWl0aXZlJylcbiAgICAgICAgICAgIHByaW1UeXBlID0gcHJpbVR5cGVzW29wdGlvbnMucHJpbWl0aXZlXVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ2NvdW50JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjaGVjayQxKFxuICAgICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5jb3VudCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5jb3VudCA+PSAwLFxuICAgICAgICAgICAgICAnaW52YWxpZCB2ZXJ0ZXggY291bnQgZm9yIGVsZW1lbnRzJylcbiAgICAgICAgICAgIHZlcnRDb3VudCA9IG9wdGlvbnMuY291bnQgfCAwXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgndHlwZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIoXG4gICAgICAgICAgICAgIG9wdGlvbnMudHlwZSxcbiAgICAgICAgICAgICAgZWxlbWVudFR5cGVzLFxuICAgICAgICAgICAgICAnaW52YWxpZCBidWZmZXIgdHlwZScpXG4gICAgICAgICAgICBkdHlwZSA9IGVsZW1lbnRUeXBlc1tvcHRpb25zLnR5cGVdXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgnbGVuZ3RoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gb3B0aW9ucy5sZW5ndGggfCAwXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSB2ZXJ0Q291bnRcbiAgICAgICAgICAgIGlmIChkdHlwZSA9PT0gR0xfVU5TSUdORURfU0hPUlQkMiB8fCBkdHlwZSA9PT0gR0xfU0hPUlQkMikge1xuICAgICAgICAgICAgICBieXRlTGVuZ3RoICo9IDJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZHR5cGUgPT09IEdMX1VOU0lHTkVEX0lOVCQyIHx8IGR0eXBlID09PSBHTF9JTlQkMikge1xuICAgICAgICAgICAgICBieXRlTGVuZ3RoICo9IDRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5pdEVsZW1lbnRzKFxuICAgICAgICAgIGVsZW1lbnRzLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdXNhZ2UsXG4gICAgICAgICAgcHJpbVR5cGUsXG4gICAgICAgICAgdmVydENvdW50LFxuICAgICAgICAgIGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZHR5cGUpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWdsRWxlbWVudHNcbiAgICB9XG5cbiAgICByZWdsRWxlbWVudHMob3B0aW9ucylcblxuICAgIHJlZ2xFbGVtZW50cy5fcmVnbFR5cGUgPSAnZWxlbWVudHMnXG4gICAgcmVnbEVsZW1lbnRzLl9lbGVtZW50cyA9IGVsZW1lbnRzXG4gICAgcmVnbEVsZW1lbnRzLnN1YmRhdGEgPSBmdW5jdGlvbiAoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICBidWZmZXIuc3ViZGF0YShkYXRhLCBvZmZzZXQpXG4gICAgICByZXR1cm4gcmVnbEVsZW1lbnRzXG4gICAgfVxuICAgIHJlZ2xFbGVtZW50cy5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGVzdHJveUVsZW1lbnRzKGVsZW1lbnRzKVxuICAgIH1cblxuICAgIHJldHVybiByZWdsRWxlbWVudHNcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBjcmVhdGVFbGVtZW50cyxcbiAgICBjcmVhdGVTdHJlYW06IGNyZWF0ZUVsZW1lbnRTdHJlYW0sXG4gICAgZGVzdHJveVN0cmVhbTogZGVzdHJveUVsZW1lbnRTdHJlYW0sXG4gICAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uIChlbGVtZW50cykge1xuICAgICAgaWYgKHR5cGVvZiBlbGVtZW50cyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgIGVsZW1lbnRzLl9lbGVtZW50cyBpbnN0YW5jZW9mIFJFR0xFbGVtZW50QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50cy5fZWxlbWVudHNcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFsdWVzKGVsZW1lbnRTZXQpLmZvckVhY2goZGVzdHJveUVsZW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG52YXIgRkxPQVQgPSBuZXcgRmxvYXQzMkFycmF5KDEpXG52YXIgSU5UID0gbmV3IFVpbnQzMkFycmF5KEZMT0FULmJ1ZmZlcilcblxudmFyIEdMX1VOU0lHTkVEX1NIT1JUJDQgPSA1MTIzXG5cbmZ1bmN0aW9uIGNvbnZlcnRUb0hhbGZGbG9hdCAoYXJyYXkpIHtcbiAgdmFyIHVzaG9ydHMgPSBwb29sLmFsbG9jVHlwZShHTF9VTlNJR05FRF9TSE9SVCQ0LCBhcnJheS5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChpc05hTihhcnJheVtpXSkpIHtcbiAgICAgIHVzaG9ydHNbaV0gPSAweGZmZmZcbiAgICB9IGVsc2UgaWYgKGFycmF5W2ldID09PSBJbmZpbml0eSkge1xuICAgICAgdXNob3J0c1tpXSA9IDB4N2MwMFxuICAgIH0gZWxzZSBpZiAoYXJyYXlbaV0gPT09IC1JbmZpbml0eSkge1xuICAgICAgdXNob3J0c1tpXSA9IDB4ZmMwMFxuICAgIH0gZWxzZSB7XG4gICAgICBGTE9BVFswXSA9IGFycmF5W2ldXG4gICAgICB2YXIgeCA9IElOVFswXVxuXG4gICAgICB2YXIgc2duID0gKHggPj4+IDMxKSA8PCAxNVxuICAgICAgdmFyIGV4cCA9ICgoeCA8PCAxKSA+Pj4gMjQpIC0gMTI3XG4gICAgICB2YXIgZnJhYyA9ICh4ID4+IDEzKSAmICgoMSA8PCAxMCkgLSAxKVxuXG4gICAgICBpZiAoZXhwIDwgLTI0KSB7XG4gICAgICAgIC8vIHJvdW5kIG5vbi1yZXByZXNlbnRhYmxlIGRlbm9ybWFscyB0byAwXG4gICAgICAgIHVzaG9ydHNbaV0gPSBzZ25cbiAgICAgIH0gZWxzZSBpZiAoZXhwIDwgLTE0KSB7XG4gICAgICAgIC8vIGhhbmRsZSBkZW5vcm1hbHNcbiAgICAgICAgdmFyIHMgPSAtMTQgLSBleHBcbiAgICAgICAgdXNob3J0c1tpXSA9IHNnbiArICgoZnJhYyArICgxIDw8IDEwKSkgPj4gcylcbiAgICAgIH0gZWxzZSBpZiAoZXhwID4gMTUpIHtcbiAgICAgICAgLy8gcm91bmQgb3ZlcmZsb3cgdG8gKy8tIEluZmluaXR5XG4gICAgICAgIHVzaG9ydHNbaV0gPSBzZ24gKyAweDdjMDBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBjb252ZXJ0IGRpcmVjdGx5XG4gICAgICAgIHVzaG9ydHNbaV0gPSBzZ24gKyAoKGV4cCArIDE1KSA8PCAxMCkgKyBmcmFjXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVzaG9ydHNcbn1cblxuZnVuY3Rpb24gaXNBcnJheUxpa2UgKHMpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocykgfHwgaXNUeXBlZEFycmF5KHMpXG59XG5cbnZhciBpc1BvdzIkMSA9IGZ1bmN0aW9uICh2KSB7XG4gIHJldHVybiAhKHYgJiAodiAtIDEpKSAmJiAoISF2KVxufVxuXG52YXIgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgPSAweDg2QTNcblxudmFyIEdMX1RFWFRVUkVfMkQkMSA9IDB4MERFMVxudmFyIEdMX1RFWFRVUkVfQ1VCRV9NQVAkMSA9IDB4ODUxM1xudmFyIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQxID0gMHg4NTE1XG5cbnZhciBHTF9SR0JBJDEgPSAweDE5MDhcbnZhciBHTF9BTFBIQSA9IDB4MTkwNlxudmFyIEdMX1JHQiA9IDB4MTkwN1xudmFyIEdMX0xVTUlOQU5DRSA9IDB4MTkwOVxudmFyIEdMX0xVTUlOQU5DRV9BTFBIQSA9IDB4MTkwQVxuXG52YXIgR0xfUkdCQTQgPSAweDgwNTZcbnZhciBHTF9SR0I1X0ExID0gMHg4MDU3XG52YXIgR0xfUkdCNTY1ID0gMHg4RDYyXG5cbnZhciBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80JDEgPSAweDgwMzNcbnZhciBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xJDEgPSAweDgwMzRcbnZhciBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSQxID0gMHg4MzYzXG52YXIgR0xfVU5TSUdORURfSU5UXzI0XzhfV0VCR0wkMSA9IDB4ODRGQVxuXG52YXIgR0xfREVQVEhfQ09NUE9ORU5UID0gMHgxOTAyXG52YXIgR0xfREVQVEhfU1RFTkNJTCA9IDB4ODRGOVxuXG52YXIgR0xfU1JHQl9FWFQgPSAweDhDNDBcbnZhciBHTF9TUkdCX0FMUEhBX0VYVCA9IDB4OEM0MlxuXG52YXIgR0xfSEFMRl9GTE9BVF9PRVMkMSA9IDB4OEQ2MVxuXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCA9IDB4ODNGMFxudmFyIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUID0gMHg4M0YxXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQgPSAweDgzRjJcbnZhciBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCA9IDB4ODNGM1xuXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JfQVRDX1dFQkdMID0gMHg4QzkyXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19FWFBMSUNJVF9BTFBIQV9XRUJHTCA9IDB4OEM5M1xudmFyIEdMX0NPTVBSRVNTRURfUkdCQV9BVENfSU5URVJQT0xBVEVEX0FMUEhBX1dFQkdMID0gMHg4N0VFXG5cbnZhciBHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HID0gMHg4QzAwXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyA9IDB4OEMwMVxudmFyIEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HID0gMHg4QzAyXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcgPSAweDhDMDNcblxudmFyIEdMX0NPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0wgPSAweDhENjRcblxudmFyIEdMX1VOU0lHTkVEX0JZVEUkNSA9IDB4MTQwMVxudmFyIEdMX1VOU0lHTkVEX1NIT1JUJDMgPSAweDE0MDNcbnZhciBHTF9VTlNJR05FRF9JTlQkMyA9IDB4MTQwNVxudmFyIEdMX0ZMT0FUJDQgPSAweDE0MDZcblxudmFyIEdMX1RFWFRVUkVfV1JBUF9TID0gMHgyODAyXG52YXIgR0xfVEVYVFVSRV9XUkFQX1QgPSAweDI4MDNcblxudmFyIEdMX1JFUEVBVCA9IDB4MjkwMVxudmFyIEdMX0NMQU1QX1RPX0VER0UkMSA9IDB4ODEyRlxudmFyIEdMX01JUlJPUkVEX1JFUEVBVCA9IDB4ODM3MFxuXG52YXIgR0xfVEVYVFVSRV9NQUdfRklMVEVSID0gMHgyODAwXG52YXIgR0xfVEVYVFVSRV9NSU5fRklMVEVSID0gMHgyODAxXG5cbnZhciBHTF9ORUFSRVNUJDEgPSAweDI2MDBcbnZhciBHTF9MSU5FQVIgPSAweDI2MDFcbnZhciBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUJDEgPSAweDI3MDBcbnZhciBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QkMSA9IDB4MjcwMVxudmFyIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiQxID0gMHgyNzAyXG52YXIgR0xfTElORUFSX01JUE1BUF9MSU5FQVIkMSA9IDB4MjcwM1xuXG52YXIgR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQgPSAweDgxOTJcbnZhciBHTF9ET05UX0NBUkUgPSAweDExMDBcbnZhciBHTF9GQVNURVNUID0gMHgxMTAxXG52YXIgR0xfTklDRVNUID0gMHgxMTAyXG5cbnZhciBHTF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCA9IDB4ODRGRVxuXG52YXIgR0xfVU5QQUNLX0FMSUdOTUVOVCA9IDB4MENGNVxudmFyIEdMX1VOUEFDS19GTElQX1lfV0VCR0wgPSAweDkyNDBcbnZhciBHTF9VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgPSAweDkyNDFcbnZhciBHTF9VTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMID0gMHg5MjQzXG5cbnZhciBHTF9CUk9XU0VSX0RFRkFVTFRfV0VCR0wgPSAweDkyNDRcblxudmFyIEdMX1RFWFRVUkUwJDEgPSAweDg0QzBcblxudmFyIE1JUE1BUF9GSUxURVJTID0gW1xuICBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUJDEsXG4gIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiQxLFxuICBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QkMSxcbiAgR0xfTElORUFSX01JUE1BUF9MSU5FQVIkMVxuXVxuXG52YXIgQ0hBTk5FTFNfRk9STUFUID0gW1xuICAwLFxuICBHTF9MVU1JTkFOQ0UsXG4gIEdMX0xVTUlOQU5DRV9BTFBIQSxcbiAgR0xfUkdCLFxuICBHTF9SR0JBJDFcbl1cblxudmFyIEZPUk1BVF9DSEFOTkVMUyA9IHt9XG5GT1JNQVRfQ0hBTk5FTFNbR0xfTFVNSU5BTkNFXSA9XG5GT1JNQVRfQ0hBTk5FTFNbR0xfQUxQSEFdID1cbkZPUk1BVF9DSEFOTkVMU1tHTF9ERVBUSF9DT01QT05FTlRdID0gMVxuRk9STUFUX0NIQU5ORUxTW0dMX0RFUFRIX1NURU5DSUxdID1cbkZPUk1BVF9DSEFOTkVMU1tHTF9MVU1JTkFOQ0VfQUxQSEFdID0gMlxuRk9STUFUX0NIQU5ORUxTW0dMX1JHQl0gPVxuRk9STUFUX0NIQU5ORUxTW0dMX1NSR0JfRVhUXSA9IDNcbkZPUk1BVF9DSEFOTkVMU1tHTF9SR0JBJDFdID1cbkZPUk1BVF9DSEFOTkVMU1tHTF9TUkdCX0FMUEhBX0VYVF0gPSA0XG5cbmZ1bmN0aW9uIG9iamVjdE5hbWUgKHN0cikge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIHN0ciArICddJ1xufVxuXG52YXIgQ0FOVkFTX0NMQVNTID0gb2JqZWN0TmFtZSgnSFRNTENhbnZhc0VsZW1lbnQnKVxudmFyIE9GRlNDUkVFTkNBTlZBU19DTEFTUyA9IG9iamVjdE5hbWUoJ09mZnNjcmVlbkNhbnZhcycpXG52YXIgQ09OVEVYVDJEX0NMQVNTID0gb2JqZWN0TmFtZSgnQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJylcbnZhciBCSVRNQVBfQ0xBU1MgPSBvYmplY3ROYW1lKCdJbWFnZUJpdG1hcCcpXG52YXIgSU1BR0VfQ0xBU1MgPSBvYmplY3ROYW1lKCdIVE1MSW1hZ2VFbGVtZW50JylcbnZhciBWSURFT19DTEFTUyA9IG9iamVjdE5hbWUoJ0hUTUxWaWRlb0VsZW1lbnQnKVxuXG52YXIgUElYRUxfQ0xBU1NFUyA9IE9iamVjdC5rZXlzKGFycmF5VHlwZXMpLmNvbmNhdChbXG4gIENBTlZBU19DTEFTUyxcbiAgT0ZGU0NSRUVOQ0FOVkFTX0NMQVNTLFxuICBDT05URVhUMkRfQ0xBU1MsXG4gIEJJVE1BUF9DTEFTUyxcbiAgSU1BR0VfQ0xBU1MsXG4gIFZJREVPX0NMQVNTXG5dKVxuXG4vLyBmb3IgZXZlcnkgdGV4dHVyZSB0eXBlLCBzdG9yZVxuLy8gdGhlIHNpemUgaW4gYnl0ZXMuXG52YXIgVFlQRV9TSVpFUyA9IFtdXG5UWVBFX1NJWkVTW0dMX1VOU0lHTkVEX0JZVEUkNV0gPSAxXG5UWVBFX1NJWkVTW0dMX0ZMT0FUJDRdID0gNFxuVFlQRV9TSVpFU1tHTF9IQUxGX0ZMT0FUX09FUyQxXSA9IDJcblxuVFlQRV9TSVpFU1tHTF9VTlNJR05FRF9TSE9SVCQzXSA9IDJcblRZUEVfU0laRVNbR0xfVU5TSUdORURfSU5UJDNdID0gNFxuXG52YXIgRk9STUFUX1NJWkVTX1NQRUNJQUwgPSBbXVxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfUkdCQTRdID0gMlxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfUkdCNV9BMV0gPSAyXG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9SR0I1NjVdID0gMlxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfREVQVEhfU1RFTkNJTF0gPSA0XG5cbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFRdID0gMC41XG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVF0gPSAwLjVcbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUXSA9IDFcbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUXSA9IDFcblxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfQ09NUFJFU1NFRF9SR0JfQVRDX1dFQkdMXSA9IDAuNVxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19FWFBMSUNJVF9BTFBIQV9XRUJHTF0gPSAxXG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQkFfQVRDX0lOVEVSUE9MQVRFRF9BTFBIQV9XRUJHTF0gPSAxXG5cbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUddID0gMC41XG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HXSA9IDAuMjVcbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HXSA9IDAuNVxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUddID0gMC4yNVxuXG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMXSA9IDAuNVxuXG5mdW5jdGlvbiBpc051bWVyaWNBcnJheSAoYXJyKSB7XG4gIHJldHVybiAoXG4gICAgQXJyYXkuaXNBcnJheShhcnIpICYmXG4gICAgKGFyci5sZW5ndGggPT09IDAgfHxcbiAgICB0eXBlb2YgYXJyWzBdID09PSAnbnVtYmVyJykpXG59XG5cbmZ1bmN0aW9uIGlzUmVjdEFycmF5IChhcnIpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB2YXIgd2lkdGggPSBhcnIubGVuZ3RoXG4gIGlmICh3aWR0aCA9PT0gMCB8fCAhaXNBcnJheUxpa2UoYXJyWzBdKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGNsYXNzU3RyaW5nICh4KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeClcbn1cblxuZnVuY3Rpb24gaXNDYW52YXNFbGVtZW50IChvYmplY3QpIHtcbiAgcmV0dXJuIGNsYXNzU3RyaW5nKG9iamVjdCkgPT09IENBTlZBU19DTEFTU1xufVxuXG5mdW5jdGlvbiBpc09mZnNjcmVlbkNhbnZhcyAob2JqZWN0KSB7XG4gIHJldHVybiBjbGFzc1N0cmluZyhvYmplY3QpID09PSBPRkZTQ1JFRU5DQU5WQVNfQ0xBU1Ncbn1cblxuZnVuY3Rpb24gaXNDb250ZXh0MkQgKG9iamVjdCkge1xuICByZXR1cm4gY2xhc3NTdHJpbmcob2JqZWN0KSA9PT0gQ09OVEVYVDJEX0NMQVNTXG59XG5cbmZ1bmN0aW9uIGlzQml0bWFwIChvYmplY3QpIHtcbiAgcmV0dXJuIGNsYXNzU3RyaW5nKG9iamVjdCkgPT09IEJJVE1BUF9DTEFTU1xufVxuXG5mdW5jdGlvbiBpc0ltYWdlRWxlbWVudCAob2JqZWN0KSB7XG4gIHJldHVybiBjbGFzc1N0cmluZyhvYmplY3QpID09PSBJTUFHRV9DTEFTU1xufVxuXG5mdW5jdGlvbiBpc1ZpZGVvRWxlbWVudCAob2JqZWN0KSB7XG4gIHJldHVybiBjbGFzc1N0cmluZyhvYmplY3QpID09PSBWSURFT19DTEFTU1xufVxuXG5mdW5jdGlvbiBpc1BpeGVsRGF0YSAob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdmFyIGNsYXNzTmFtZSA9IGNsYXNzU3RyaW5nKG9iamVjdClcbiAgaWYgKFBJWEVMX0NMQVNTRVMuaW5kZXhPZihjbGFzc05hbWUpID49IDApIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiAoXG4gICAgaXNOdW1lcmljQXJyYXkob2JqZWN0KSB8fFxuICAgIGlzUmVjdEFycmF5KG9iamVjdCkgfHxcbiAgICBpc05EQXJyYXlMaWtlKG9iamVjdCkpXG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlDb2RlJDEgKGRhdGEpIHtcbiAgcmV0dXJuIGFycmF5VHlwZXNbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpXSB8IDBcbn1cblxuZnVuY3Rpb24gY29udmVydERhdGEgKHJlc3VsdCwgZGF0YSkge1xuICB2YXIgbiA9IGRhdGEubGVuZ3RoXG4gIHN3aXRjaCAocmVzdWx0LnR5cGUpIHtcbiAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEUkNTpcbiAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUJDM6XG4gICAgY2FzZSBHTF9VTlNJR05FRF9JTlQkMzpcbiAgICBjYXNlIEdMX0ZMT0FUJDQ6XG4gICAgICB2YXIgY29udmVydGVkID0gcG9vbC5hbGxvY1R5cGUocmVzdWx0LnR5cGUsIG4pXG4gICAgICBjb252ZXJ0ZWQuc2V0KGRhdGEpXG4gICAgICByZXN1bHQuZGF0YSA9IGNvbnZlcnRlZFxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVMkMTpcbiAgICAgIHJlc3VsdC5kYXRhID0gY29udmVydFRvSGFsZkZsb2F0KGRhdGEpXG4gICAgICBicmVha1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNoZWNrJDEucmFpc2UoJ3Vuc3VwcG9ydGVkIHRleHR1cmUgdHlwZSwgbXVzdCBzcGVjaWZ5IGEgdHlwZWQgYXJyYXknKVxuICB9XG59XG5cbmZ1bmN0aW9uIHByZUNvbnZlcnQgKGltYWdlLCBuKSB7XG4gIHJldHVybiBwb29sLmFsbG9jVHlwZShcbiAgICBpbWFnZS50eXBlID09PSBHTF9IQUxGX0ZMT0FUX09FUyQxXG4gICAgICA/IEdMX0ZMT0FUJDRcbiAgICAgIDogaW1hZ2UudHlwZSwgbilcbn1cblxuZnVuY3Rpb24gcG9zdENvbnZlcnQgKGltYWdlLCBkYXRhKSB7XG4gIGlmIChpbWFnZS50eXBlID09PSBHTF9IQUxGX0ZMT0FUX09FUyQxKSB7XG4gICAgaW1hZ2UuZGF0YSA9IGNvbnZlcnRUb0hhbGZGbG9hdChkYXRhKVxuICAgIHBvb2wuZnJlZVR5cGUoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICBpbWFnZS5kYXRhID0gZGF0YVxuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zcG9zZURhdGEgKGltYWdlLCBhcnJheSwgc3RyaWRlWCwgc3RyaWRlWSwgc3RyaWRlQywgb2Zmc2V0KSB7XG4gIHZhciB3ID0gaW1hZ2Uud2lkdGhcbiAgdmFyIGggPSBpbWFnZS5oZWlnaHRcbiAgdmFyIGMgPSBpbWFnZS5jaGFubmVsc1xuICB2YXIgbiA9IHcgKiBoICogY1xuICB2YXIgZGF0YSA9IHByZUNvbnZlcnQoaW1hZ2UsIG4pXG5cbiAgdmFyIHAgPSAwXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaDsgKytpKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCB3OyArK2opIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYzsgKytrKSB7XG4gICAgICAgIGRhdGFbcCsrXSA9IGFycmF5W3N0cmlkZVggKiBqICsgc3RyaWRlWSAqIGkgKyBzdHJpZGVDICogayArIG9mZnNldF1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwb3N0Q29udmVydChpbWFnZSwgZGF0YSlcbn1cblxuZnVuY3Rpb24gZ2V0VGV4dHVyZVNpemUgKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgaXNNaXBtYXAsIGlzQ3ViZSkge1xuICB2YXIgc1xuICBpZiAodHlwZW9mIEZPUk1BVF9TSVpFU19TUEVDSUFMW2Zvcm1hdF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gd2UgaGF2ZSBhIHNwZWNpYWwgYXJyYXkgZm9yIGRlYWxpbmcgd2l0aCB3ZWlyZCBjb2xvciBmb3JtYXRzIHN1Y2ggYXMgUkdCNUExXG4gICAgcyA9IEZPUk1BVF9TSVpFU19TUEVDSUFMW2Zvcm1hdF1cbiAgfSBlbHNlIHtcbiAgICBzID0gRk9STUFUX0NIQU5ORUxTW2Zvcm1hdF0gKiBUWVBFX1NJWkVTW3R5cGVdXG4gIH1cblxuICBpZiAoaXNDdWJlKSB7XG4gICAgcyAqPSA2XG4gIH1cblxuICBpZiAoaXNNaXBtYXApIHtcbiAgICAvLyBjb21wdXRlIHRoZSB0b3RhbCBzaXplIG9mIGFsbCB0aGUgbWlwbWFwcy5cbiAgICB2YXIgdG90YWwgPSAwXG5cbiAgICB2YXIgdyA9IHdpZHRoXG4gICAgd2hpbGUgKHcgPj0gMSkge1xuICAgICAgLy8gd2UgY2FuIG9ubHkgdXNlIG1pcG1hcHMgb24gYSBzcXVhcmUgaW1hZ2UsXG4gICAgICAvLyBzbyB3ZSBjYW4gc2ltcGx5IHVzZSB0aGUgd2lkdGggYW5kIGlnbm9yZSB0aGUgaGVpZ2h0OlxuICAgICAgdG90YWwgKz0gcyAqIHcgKiB3XG4gICAgICB3IC89IDJcbiAgICB9XG4gICAgcmV0dXJuIHRvdGFsXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHMgKiB3aWR0aCAqIGhlaWdodFxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRleHR1cmVTZXQgKFxuICBnbCwgZXh0ZW5zaW9ucywgbGltaXRzLCByZWdsUG9sbCwgY29udGV4dFN0YXRlLCBzdGF0cywgY29uZmlnKSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSW5pdGlhbGl6ZSBjb25zdGFudHMgYW5kIHBhcmFtZXRlciB0YWJsZXMgaGVyZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHZhciBtaXBtYXBIaW50ID0ge1xuICAgIFwiZG9uJ3QgY2FyZVwiOiBHTF9ET05UX0NBUkUsXG4gICAgJ2RvbnQgY2FyZSc6IEdMX0RPTlRfQ0FSRSxcbiAgICAnbmljZSc6IEdMX05JQ0VTVCxcbiAgICAnZmFzdCc6IEdMX0ZBU1RFU1RcbiAgfVxuXG4gIHZhciB3cmFwTW9kZXMgPSB7XG4gICAgJ3JlcGVhdCc6IEdMX1JFUEVBVCxcbiAgICAnY2xhbXAnOiBHTF9DTEFNUF9UT19FREdFJDEsXG4gICAgJ21pcnJvcic6IEdMX01JUlJPUkVEX1JFUEVBVFxuICB9XG5cbiAgdmFyIG1hZ0ZpbHRlcnMgPSB7XG4gICAgJ25lYXJlc3QnOiBHTF9ORUFSRVNUJDEsXG4gICAgJ2xpbmVhcic6IEdMX0xJTkVBUlxuICB9XG5cbiAgdmFyIG1pbkZpbHRlcnMgPSBleHRlbmQoe1xuICAgICdtaXBtYXAnOiBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiQxLFxuICAgICduZWFyZXN0IG1pcG1hcCBuZWFyZXN0JzogR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCQxLFxuICAgICdsaW5lYXIgbWlwbWFwIG5lYXJlc3QnOiBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QkMSxcbiAgICAnbmVhcmVzdCBtaXBtYXAgbGluZWFyJzogR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSJDEsXG4gICAgJ2xpbmVhciBtaXBtYXAgbGluZWFyJzogR0xfTElORUFSX01JUE1BUF9MSU5FQVIkMVxuICB9LCBtYWdGaWx0ZXJzKVxuXG4gIHZhciBjb2xvclNwYWNlID0ge1xuICAgICdub25lJzogMCxcbiAgICAnYnJvd3Nlcic6IEdMX0JST1dTRVJfREVGQVVMVF9XRUJHTFxuICB9XG5cbiAgdmFyIHRleHR1cmVUeXBlcyA9IHtcbiAgICAndWludDgnOiBHTF9VTlNJR05FRF9CWVRFJDUsXG4gICAgJ3JnYmE0JzogR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCQxLFxuICAgICdyZ2I1NjUnOiBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSQxLFxuICAgICdyZ2I1IGExJzogR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSQxXG4gIH1cblxuICB2YXIgdGV4dHVyZUZvcm1hdHMgPSB7XG4gICAgJ2FscGhhJzogR0xfQUxQSEEsXG4gICAgJ2x1bWluYW5jZSc6IEdMX0xVTUlOQU5DRSxcbiAgICAnbHVtaW5hbmNlIGFscGhhJzogR0xfTFVNSU5BTkNFX0FMUEhBLFxuICAgICdyZ2InOiBHTF9SR0IsXG4gICAgJ3JnYmEnOiBHTF9SR0JBJDEsXG4gICAgJ3JnYmE0JzogR0xfUkdCQTQsXG4gICAgJ3JnYjUgYTEnOiBHTF9SR0I1X0ExLFxuICAgICdyZ2I1NjUnOiBHTF9SR0I1NjVcbiAgfVxuXG4gIHZhciBjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgPSB7fVxuXG4gIGlmIChleHRlbnNpb25zLmV4dF9zcmdiKSB7XG4gICAgdGV4dHVyZUZvcm1hdHMuc3JnYiA9IEdMX1NSR0JfRVhUXG4gICAgdGV4dHVyZUZvcm1hdHMuc3JnYmEgPSBHTF9TUkdCX0FMUEhBX0VYVFxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMub2VzX3RleHR1cmVfZmxvYXQpIHtcbiAgICB0ZXh0dXJlVHlwZXMuZmxvYXQzMiA9IHRleHR1cmVUeXBlcy5mbG9hdCA9IEdMX0ZMT0FUJDRcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQpIHtcbiAgICB0ZXh0dXJlVHlwZXNbJ2Zsb2F0MTYnXSA9IHRleHR1cmVUeXBlc1snaGFsZiBmbG9hdCddID0gR0xfSEFMRl9GTE9BVF9PRVMkMVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMud2ViZ2xfZGVwdGhfdGV4dHVyZSkge1xuICAgIGV4dGVuZCh0ZXh0dXJlRm9ybWF0cywge1xuICAgICAgJ2RlcHRoJzogR0xfREVQVEhfQ09NUE9ORU5ULFxuICAgICAgJ2RlcHRoIHN0ZW5jaWwnOiBHTF9ERVBUSF9TVEVOQ0lMXG4gICAgfSlcblxuICAgIGV4dGVuZCh0ZXh0dXJlVHlwZXMsIHtcbiAgICAgICd1aW50MTYnOiBHTF9VTlNJR05FRF9TSE9SVCQzLFxuICAgICAgJ3VpbnQzMic6IEdMX1VOU0lHTkVEX0lOVCQzLFxuICAgICAgJ2RlcHRoIHN0ZW5jaWwnOiBHTF9VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCQxXG4gICAgfSlcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjKSB7XG4gICAgZXh0ZW5kKGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cywge1xuICAgICAgJ3JnYiBzM3RjIGR4dDEnOiBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULFxuICAgICAgJ3JnYmEgczN0YyBkeHQxJzogR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsXG4gICAgICAncmdiYSBzM3RjIGR4dDMnOiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVCxcbiAgICAgICdyZ2JhIHMzdGMgZHh0NSc6IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUXG4gICAgfSlcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMpIHtcbiAgICBleHRlbmQoY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLCB7XG4gICAgICAncmdiIGF0Yyc6IEdMX0NPTVBSRVNTRURfUkdCX0FUQ19XRUJHTCxcbiAgICAgICdyZ2JhIGF0YyBleHBsaWNpdCBhbHBoYSc6IEdMX0NPTVBSRVNTRURfUkdCQV9BVENfRVhQTElDSVRfQUxQSEFfV0VCR0wsXG4gICAgICAncmdiYSBhdGMgaW50ZXJwb2xhdGVkIGFscGhhJzogR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19JTlRFUlBPTEFURURfQUxQSEFfV0VCR0xcbiAgICB9KVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjKSB7XG4gICAgZXh0ZW5kKGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cywge1xuICAgICAgJ3JnYiBwdnJ0YyA0YnBwdjEnOiBHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HLFxuICAgICAgJ3JnYiBwdnJ0YyAyYnBwdjEnOiBHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HLFxuICAgICAgJ3JnYmEgcHZydGMgNGJwcHYxJzogR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUcsXG4gICAgICAncmdiYSBwdnJ0YyAyYnBwdjEnOiBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR1xuICAgIH0pXG4gIH1cblxuICBpZiAoZXh0ZW5zaW9ucy53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSkge1xuICAgIGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0c1sncmdiIGV0YzEnXSA9IEdMX0NPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0xcbiAgfVxuXG4gIC8vIENvcHkgb3ZlciBhbGwgdGV4dHVyZSBmb3JtYXRzXG4gIHZhciBzdXBwb3J0ZWRDb21wcmVzc2VkRm9ybWF0cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFxuICAgIGdsLmdldFBhcmFtZXRlcihHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUykpXG4gIE9iamVjdC5rZXlzKGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBmb3JtYXQgPSBjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHNbbmFtZV1cbiAgICBpZiAoc3VwcG9ydGVkQ29tcHJlc3NlZEZvcm1hdHMuaW5kZXhPZihmb3JtYXQpID49IDApIHtcbiAgICAgIHRleHR1cmVGb3JtYXRzW25hbWVdID0gZm9ybWF0XG4gICAgfVxuICB9KVxuXG4gIHZhciBzdXBwb3J0ZWRGb3JtYXRzID0gT2JqZWN0LmtleXModGV4dHVyZUZvcm1hdHMpXG4gIGxpbWl0cy50ZXh0dXJlRm9ybWF0cyA9IHN1cHBvcnRlZEZvcm1hdHNcblxuICAvLyBhc3NvY2lhdGUgd2l0aCBldmVyeSBmb3JtYXQgc3RyaW5nIGl0c1xuICAvLyBjb3JyZXNwb25kaW5nIEdMLXZhbHVlLlxuICB2YXIgdGV4dHVyZUZvcm1hdHNJbnZlcnQgPSBbXVxuICBPYmplY3Qua2V5cyh0ZXh0dXJlRm9ybWF0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbCA9IHRleHR1cmVGb3JtYXRzW2tleV1cbiAgICB0ZXh0dXJlRm9ybWF0c0ludmVydFt2YWxdID0ga2V5XG4gIH0pXG5cbiAgLy8gYXNzb2NpYXRlIHdpdGggZXZlcnkgdHlwZSBzdHJpbmcgaXRzXG4gIC8vIGNvcnJlc3BvbmRpbmcgR0wtdmFsdWUuXG4gIHZhciB0ZXh0dXJlVHlwZXNJbnZlcnQgPSBbXVxuICBPYmplY3Qua2V5cyh0ZXh0dXJlVHlwZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWwgPSB0ZXh0dXJlVHlwZXNba2V5XVxuICAgIHRleHR1cmVUeXBlc0ludmVydFt2YWxdID0ga2V5XG4gIH0pXG5cbiAgdmFyIG1hZ0ZpbHRlcnNJbnZlcnQgPSBbXVxuICBPYmplY3Qua2V5cyhtYWdGaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsID0gbWFnRmlsdGVyc1trZXldXG4gICAgbWFnRmlsdGVyc0ludmVydFt2YWxdID0ga2V5XG4gIH0pXG5cbiAgdmFyIG1pbkZpbHRlcnNJbnZlcnQgPSBbXVxuICBPYmplY3Qua2V5cyhtaW5GaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsID0gbWluRmlsdGVyc1trZXldXG4gICAgbWluRmlsdGVyc0ludmVydFt2YWxdID0ga2V5XG4gIH0pXG5cbiAgdmFyIHdyYXBNb2Rlc0ludmVydCA9IFtdXG4gIE9iamVjdC5rZXlzKHdyYXBNb2RlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbCA9IHdyYXBNb2Rlc1trZXldXG4gICAgd3JhcE1vZGVzSW52ZXJ0W3ZhbF0gPSBrZXlcbiAgfSlcblxuICAvLyBjb2xvckZvcm1hdHNbXSBnaXZlcyB0aGUgZm9ybWF0IChjaGFubmVscykgYXNzb2NpYXRlZCB0byBhblxuICAvLyBpbnRlcm5hbGZvcm1hdFxuICB2YXIgY29sb3JGb3JtYXRzID0gc3VwcG9ydGVkRm9ybWF0cy5yZWR1Y2UoZnVuY3Rpb24gKGNvbG9yLCBrZXkpIHtcbiAgICB2YXIgZ2xlbnVtID0gdGV4dHVyZUZvcm1hdHNba2V5XVxuICAgIGlmIChnbGVudW0gPT09IEdMX0xVTUlOQU5DRSB8fFxuICAgICAgICBnbGVudW0gPT09IEdMX0FMUEhBIHx8XG4gICAgICAgIGdsZW51bSA9PT0gR0xfTFVNSU5BTkNFIHx8XG4gICAgICAgIGdsZW51bSA9PT0gR0xfTFVNSU5BTkNFX0FMUEhBIHx8XG4gICAgICAgIGdsZW51bSA9PT0gR0xfREVQVEhfQ09NUE9ORU5UIHx8XG4gICAgICAgIGdsZW51bSA9PT0gR0xfREVQVEhfU1RFTkNJTCB8fFxuICAgICAgICAoZXh0ZW5zaW9ucy5leHRfc3JnYiAmJlxuICAgICAgICAgICAgICAgIChnbGVudW0gPT09IEdMX1NSR0JfRVhUIHx8XG4gICAgICAgICAgICAgICAgIGdsZW51bSA9PT0gR0xfU1JHQl9BTFBIQV9FWFQpKSkge1xuICAgICAgY29sb3JbZ2xlbnVtXSA9IGdsZW51bVxuICAgIH0gZWxzZSBpZiAoZ2xlbnVtID09PSBHTF9SR0I1X0ExIHx8IGtleS5pbmRleE9mKCdyZ2JhJykgPj0gMCkge1xuICAgICAgY29sb3JbZ2xlbnVtXSA9IEdMX1JHQkEkMVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2xvcltnbGVudW1dID0gR0xfUkdCXG4gICAgfVxuICAgIHJldHVybiBjb2xvclxuICB9LCB7fSlcblxuICBmdW5jdGlvbiBUZXhGbGFncyAoKSB7XG4gICAgLy8gZm9ybWF0IGluZm9cbiAgICB0aGlzLmludGVybmFsZm9ybWF0ID0gR0xfUkdCQSQxXG4gICAgdGhpcy5mb3JtYXQgPSBHTF9SR0JBJDFcbiAgICB0aGlzLnR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDVcbiAgICB0aGlzLmNvbXByZXNzZWQgPSBmYWxzZVxuXG4gICAgLy8gcGl4ZWwgc3RvcmFnZVxuICAgIHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlXG4gICAgdGhpcy5mbGlwWSA9IGZhbHNlXG4gICAgdGhpcy51bnBhY2tBbGlnbm1lbnQgPSAxXG4gICAgdGhpcy5jb2xvclNwYWNlID0gR0xfQlJPV1NFUl9ERUZBVUxUX1dFQkdMXG5cbiAgICAvLyBzaGFwZSBpbmZvXG4gICAgdGhpcy53aWR0aCA9IDBcbiAgICB0aGlzLmhlaWdodCA9IDBcbiAgICB0aGlzLmNoYW5uZWxzID0gMFxuICB9XG5cbiAgZnVuY3Rpb24gY29weUZsYWdzIChyZXN1bHQsIG90aGVyKSB7XG4gICAgcmVzdWx0LmludGVybmFsZm9ybWF0ID0gb3RoZXIuaW50ZXJuYWxmb3JtYXRcbiAgICByZXN1bHQuZm9ybWF0ID0gb3RoZXIuZm9ybWF0XG4gICAgcmVzdWx0LnR5cGUgPSBvdGhlci50eXBlXG4gICAgcmVzdWx0LmNvbXByZXNzZWQgPSBvdGhlci5jb21wcmVzc2VkXG5cbiAgICByZXN1bHQucHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLnByZW11bHRpcGx5QWxwaGFcbiAgICByZXN1bHQuZmxpcFkgPSBvdGhlci5mbGlwWVxuICAgIHJlc3VsdC51bnBhY2tBbGlnbm1lbnQgPSBvdGhlci51bnBhY2tBbGlnbm1lbnRcbiAgICByZXN1bHQuY29sb3JTcGFjZSA9IG90aGVyLmNvbG9yU3BhY2VcblxuICAgIHJlc3VsdC53aWR0aCA9IG90aGVyLndpZHRoXG4gICAgcmVzdWx0LmhlaWdodCA9IG90aGVyLmhlaWdodFxuICAgIHJlc3VsdC5jaGFubmVscyA9IG90aGVyLmNoYW5uZWxzXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUZsYWdzIChmbGFncywgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcgfHwgIW9wdGlvbnMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICgncHJlbXVsdGlwbHlBbHBoYScgaW4gb3B0aW9ucykge1xuICAgICAgY2hlY2skMS50eXBlKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSwgJ2Jvb2xlYW4nLFxuICAgICAgICAnaW52YWxpZCBwcmVtdWx0aXBseUFscGhhJylcbiAgICAgIGZsYWdzLnByZW11bHRpcGx5QWxwaGEgPSBvcHRpb25zLnByZW11bHRpcGx5QWxwaGFcbiAgICB9XG5cbiAgICBpZiAoJ2ZsaXBZJyBpbiBvcHRpb25zKSB7XG4gICAgICBjaGVjayQxLnR5cGUob3B0aW9ucy5mbGlwWSwgJ2Jvb2xlYW4nLFxuICAgICAgICAnaW52YWxpZCB0ZXh0dXJlIGZsaXAnKVxuICAgICAgZmxhZ3MuZmxpcFkgPSBvcHRpb25zLmZsaXBZXG4gICAgfVxuXG4gICAgaWYgKCdhbGlnbm1lbnQnIGluIG9wdGlvbnMpIHtcbiAgICAgIGNoZWNrJDEub25lT2Yob3B0aW9ucy5hbGlnbm1lbnQsIFsxLCAyLCA0LCA4XSxcbiAgICAgICAgJ2ludmFsaWQgdGV4dHVyZSB1bnBhY2sgYWxpZ25tZW50JylcbiAgICAgIGZsYWdzLnVucGFja0FsaWdubWVudCA9IG9wdGlvbnMuYWxpZ25tZW50XG4gICAgfVxuXG4gICAgaWYgKCdjb2xvclNwYWNlJyBpbiBvcHRpb25zKSB7XG4gICAgICBjaGVjayQxLnBhcmFtZXRlcihvcHRpb25zLmNvbG9yU3BhY2UsIGNvbG9yU3BhY2UsXG4gICAgICAgICdpbnZhbGlkIGNvbG9yU3BhY2UnKVxuICAgICAgZmxhZ3MuY29sb3JTcGFjZSA9IGNvbG9yU3BhY2Vbb3B0aW9ucy5jb2xvclNwYWNlXVxuICAgIH1cblxuICAgIGlmICgndHlwZScgaW4gb3B0aW9ucykge1xuICAgICAgdmFyIHR5cGUgPSBvcHRpb25zLnR5cGVcbiAgICAgIGNoZWNrJDEoZXh0ZW5zaW9ucy5vZXNfdGV4dHVyZV9mbG9hdCB8fFxuICAgICAgICAhKHR5cGUgPT09ICdmbG9hdCcgfHwgdHlwZSA9PT0gJ2Zsb2F0MzInKSxcbiAgICAgICd5b3UgbXVzdCBlbmFibGUgdGhlIE9FU190ZXh0dXJlX2Zsb2F0IGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMuJylcbiAgICAgIGNoZWNrJDEoZXh0ZW5zaW9ucy5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0IHx8XG4gICAgICAgICEodHlwZSA9PT0gJ2hhbGYgZmxvYXQnIHx8IHR5cGUgPT09ICdmbG9hdDE2JyksXG4gICAgICAneW91IG11c3QgZW5hYmxlIHRoZSBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgMTYtYml0IGZsb2F0aW5nIHBvaW50IHRleHR1cmVzLicpXG4gICAgICBjaGVjayQxKGV4dGVuc2lvbnMud2ViZ2xfZGVwdGhfdGV4dHVyZSB8fFxuICAgICAgICAhKHR5cGUgPT09ICd1aW50MTYnIHx8IHR5cGUgPT09ICd1aW50MzInIHx8IHR5cGUgPT09ICdkZXB0aCBzdGVuY2lsJyksXG4gICAgICAneW91IG11c3QgZW5hYmxlIHRoZSBXRUJHTF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZGVwdGgvc3RlbmNpbCB0ZXh0dXJlcy4nKVxuICAgICAgY2hlY2skMS5wYXJhbWV0ZXIodHlwZSwgdGV4dHVyZVR5cGVzLFxuICAgICAgICAnaW52YWxpZCB0ZXh0dXJlIHR5cGUnKVxuICAgICAgZmxhZ3MudHlwZSA9IHRleHR1cmVUeXBlc1t0eXBlXVxuICAgIH1cblxuICAgIHZhciB3ID0gZmxhZ3Mud2lkdGhcbiAgICB2YXIgaCA9IGZsYWdzLmhlaWdodFxuICAgIHZhciBjID0gZmxhZ3MuY2hhbm5lbHNcbiAgICB2YXIgaGFzQ2hhbm5lbHMgPSBmYWxzZVxuICAgIGlmICgnc2hhcGUnIGluIG9wdGlvbnMpIHtcbiAgICAgIGNoZWNrJDEoQXJyYXkuaXNBcnJheShvcHRpb25zLnNoYXBlKSAmJiBvcHRpb25zLnNoYXBlLmxlbmd0aCA+PSAyLFxuICAgICAgICAnc2hhcGUgbXVzdCBiZSBhbiBhcnJheScpXG4gICAgICB3ID0gb3B0aW9ucy5zaGFwZVswXVxuICAgICAgaCA9IG9wdGlvbnMuc2hhcGVbMV1cbiAgICAgIGlmIChvcHRpb25zLnNoYXBlLmxlbmd0aCA9PT0gMykge1xuICAgICAgICBjID0gb3B0aW9ucy5zaGFwZVsyXVxuICAgICAgICBjaGVjayQxKGMgPiAwICYmIGMgPD0gNCwgJ2ludmFsaWQgbnVtYmVyIG9mIGNoYW5uZWxzJylcbiAgICAgICAgaGFzQ2hhbm5lbHMgPSB0cnVlXG4gICAgICB9XG4gICAgICBjaGVjayQxKHcgPj0gMCAmJiB3IDw9IGxpbWl0cy5tYXhUZXh0dXJlU2l6ZSwgJ2ludmFsaWQgd2lkdGgnKVxuICAgICAgY2hlY2skMShoID49IDAgJiYgaCA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsICdpbnZhbGlkIGhlaWdodCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgncmFkaXVzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIHcgPSBoID0gb3B0aW9ucy5yYWRpdXNcbiAgICAgICAgY2hlY2skMSh3ID49IDAgJiYgdyA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsICdpbnZhbGlkIHJhZGl1cycpXG4gICAgICB9XG4gICAgICBpZiAoJ3dpZHRoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIHcgPSBvcHRpb25zLndpZHRoXG4gICAgICAgIGNoZWNrJDEodyA+PSAwICYmIHcgPD0gbGltaXRzLm1heFRleHR1cmVTaXplLCAnaW52YWxpZCB3aWR0aCcpXG4gICAgICB9XG4gICAgICBpZiAoJ2hlaWdodCcgaW4gb3B0aW9ucykge1xuICAgICAgICBoID0gb3B0aW9ucy5oZWlnaHRcbiAgICAgICAgY2hlY2skMShoID49IDAgJiYgaCA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsICdpbnZhbGlkIGhlaWdodCcpXG4gICAgICB9XG4gICAgICBpZiAoJ2NoYW5uZWxzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIGMgPSBvcHRpb25zLmNoYW5uZWxzXG4gICAgICAgIGNoZWNrJDEoYyA+IDAgJiYgYyA8PSA0LCAnaW52YWxpZCBudW1iZXIgb2YgY2hhbm5lbHMnKVxuICAgICAgICBoYXNDaGFubmVscyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgZmxhZ3Mud2lkdGggPSB3IHwgMFxuICAgIGZsYWdzLmhlaWdodCA9IGggfCAwXG4gICAgZmxhZ3MuY2hhbm5lbHMgPSBjIHwgMFxuXG4gICAgdmFyIGhhc0Zvcm1hdCA9IGZhbHNlXG4gICAgaWYgKCdmb3JtYXQnIGluIG9wdGlvbnMpIHtcbiAgICAgIHZhciBmb3JtYXRTdHIgPSBvcHRpb25zLmZvcm1hdFxuICAgICAgY2hlY2skMShleHRlbnNpb25zLndlYmdsX2RlcHRoX3RleHR1cmUgfHxcbiAgICAgICAgIShmb3JtYXRTdHIgPT09ICdkZXB0aCcgfHwgZm9ybWF0U3RyID09PSAnZGVwdGggc3RlbmNpbCcpLFxuICAgICAgJ3lvdSBtdXN0IGVuYWJsZSB0aGUgV0VCR0xfZGVwdGhfdGV4dHVyZSBleHRlbnNpb24gaW4gb3JkZXIgdG8gdXNlIGRlcHRoL3N0ZW5jaWwgdGV4dHVyZXMuJylcbiAgICAgIGNoZWNrJDEucGFyYW1ldGVyKGZvcm1hdFN0ciwgdGV4dHVyZUZvcm1hdHMsXG4gICAgICAgICdpbnZhbGlkIHRleHR1cmUgZm9ybWF0JylcbiAgICAgIHZhciBpbnRlcm5hbGZvcm1hdCA9IGZsYWdzLmludGVybmFsZm9ybWF0ID0gdGV4dHVyZUZvcm1hdHNbZm9ybWF0U3RyXVxuICAgICAgZmxhZ3MuZm9ybWF0ID0gY29sb3JGb3JtYXRzW2ludGVybmFsZm9ybWF0XVxuICAgICAgaWYgKGZvcm1hdFN0ciBpbiB0ZXh0dXJlVHlwZXMpIHtcbiAgICAgICAgaWYgKCEoJ3R5cGUnIGluIG9wdGlvbnMpKSB7XG4gICAgICAgICAgZmxhZ3MudHlwZSA9IHRleHR1cmVUeXBlc1tmb3JtYXRTdHJdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3JtYXRTdHIgaW4gY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzKSB7XG4gICAgICAgIGZsYWdzLmNvbXByZXNzZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICBoYXNGb3JtYXQgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gUmVjb25jaWxlIGNoYW5uZWxzIGFuZCBmb3JtYXRcbiAgICBpZiAoIWhhc0NoYW5uZWxzICYmIGhhc0Zvcm1hdCkge1xuICAgICAgZmxhZ3MuY2hhbm5lbHMgPSBGT1JNQVRfQ0hBTk5FTFNbZmxhZ3MuZm9ybWF0XVxuICAgIH0gZWxzZSBpZiAoaGFzQ2hhbm5lbHMgJiYgIWhhc0Zvcm1hdCkge1xuICAgICAgaWYgKGZsYWdzLmNoYW5uZWxzICE9PSBDSEFOTkVMU19GT1JNQVRbZmxhZ3MuZm9ybWF0XSkge1xuICAgICAgICBmbGFncy5mb3JtYXQgPSBmbGFncy5pbnRlcm5hbGZvcm1hdCA9IENIQU5ORUxTX0ZPUk1BVFtmbGFncy5jaGFubmVsc11cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhhc0Zvcm1hdCAmJiBoYXNDaGFubmVscykge1xuICAgICAgY2hlY2skMShcbiAgICAgICAgZmxhZ3MuY2hhbm5lbHMgPT09IEZPUk1BVF9DSEFOTkVMU1tmbGFncy5mb3JtYXRdLFxuICAgICAgICAnbnVtYmVyIG9mIGNoYW5uZWxzIGluY29uc2lzdGVudCB3aXRoIHNwZWNpZmllZCBmb3JtYXQnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEZsYWdzIChmbGFncykge1xuICAgIGdsLnBpeGVsU3RvcmVpKEdMX1VOUEFDS19GTElQX1lfV0VCR0wsIGZsYWdzLmZsaXBZKVxuICAgIGdsLnBpeGVsU3RvcmVpKEdMX1VOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgZmxhZ3MucHJlbXVsdGlwbHlBbHBoYSlcbiAgICBnbC5waXhlbFN0b3JlaShHTF9VTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMLCBmbGFncy5jb2xvclNwYWNlKVxuICAgIGdsLnBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIGZsYWdzLnVucGFja0FsaWdubWVudClcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVGV4IGltYWdlIGRhdGFcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBmdW5jdGlvbiBUZXhJbWFnZSAoKSB7XG4gICAgVGV4RmxhZ3MuY2FsbCh0aGlzKVxuXG4gICAgdGhpcy54T2Zmc2V0ID0gMFxuICAgIHRoaXMueU9mZnNldCA9IDBcblxuICAgIC8vIGRhdGFcbiAgICB0aGlzLmRhdGEgPSBudWxsXG4gICAgdGhpcy5uZWVkc0ZyZWUgPSBmYWxzZVxuXG4gICAgLy8gaHRtbCBlbGVtZW50XG4gICAgdGhpcy5lbGVtZW50ID0gbnVsbFxuXG4gICAgLy8gY29weVRleEltYWdlIGluZm9cbiAgICB0aGlzLm5lZWRzQ29weSA9IGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUltYWdlIChpbWFnZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXRhID0gbnVsbFxuICAgIGlmIChpc1BpeGVsRGF0YShvcHRpb25zKSkge1xuICAgICAgZGF0YSA9IG9wdGlvbnNcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGNoZWNrJDEudHlwZShvcHRpb25zLCAnb2JqZWN0JywgJ2ludmFsaWQgcGl4ZWwgZGF0YSB0eXBlJylcbiAgICAgIHBhcnNlRmxhZ3MoaW1hZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoJ3gnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgaW1hZ2UueE9mZnNldCA9IG9wdGlvbnMueCB8IDBcbiAgICAgIH1cbiAgICAgIGlmICgneScgaW4gb3B0aW9ucykge1xuICAgICAgICBpbWFnZS55T2Zmc2V0ID0gb3B0aW9ucy55IHwgMFxuICAgICAgfVxuICAgICAgaWYgKGlzUGl4ZWxEYXRhKG9wdGlvbnMuZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IG9wdGlvbnMuZGF0YVxuICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrJDEoXG4gICAgICAhaW1hZ2UuY29tcHJlc3NlZCB8fFxuICAgICAgZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksXG4gICAgICAnY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgbXVzdCBiZSBzdG9yZWQgaW4gYSB1aW50OGFycmF5JylcblxuICAgIGlmIChvcHRpb25zLmNvcHkpIHtcbiAgICAgIGNoZWNrJDEoIWRhdGEsICdjYW4gbm90IHNwZWNpZnkgY29weSBhbmQgZGF0YSBmaWVsZCBmb3IgdGhlIHNhbWUgdGV4dHVyZScpXG4gICAgICB2YXIgdmlld1cgPSBjb250ZXh0U3RhdGUudmlld3BvcnRXaWR0aFxuICAgICAgdmFyIHZpZXdIID0gY29udGV4dFN0YXRlLnZpZXdwb3J0SGVpZ2h0XG4gICAgICBpbWFnZS53aWR0aCA9IGltYWdlLndpZHRoIHx8ICh2aWV3VyAtIGltYWdlLnhPZmZzZXQpXG4gICAgICBpbWFnZS5oZWlnaHQgPSBpbWFnZS5oZWlnaHQgfHwgKHZpZXdIIC0gaW1hZ2UueU9mZnNldClcbiAgICAgIGltYWdlLm5lZWRzQ29weSA9IHRydWVcbiAgICAgIGNoZWNrJDEoaW1hZ2UueE9mZnNldCA+PSAwICYmIGltYWdlLnhPZmZzZXQgPCB2aWV3VyAmJlxuICAgICAgICAgICAgaW1hZ2UueU9mZnNldCA+PSAwICYmIGltYWdlLnlPZmZzZXQgPCB2aWV3SCAmJlxuICAgICAgICAgICAgaW1hZ2Uud2lkdGggPiAwICYmIGltYWdlLndpZHRoIDw9IHZpZXdXICYmXG4gICAgICAgICAgICBpbWFnZS5oZWlnaHQgPiAwICYmIGltYWdlLmhlaWdodCA8PSB2aWV3SCxcbiAgICAgICdjb3B5IHRleHR1cmUgcmVhZCBvdXQgb2YgYm91bmRzJylcbiAgICB9IGVsc2UgaWYgKCFkYXRhKSB7XG4gICAgICBpbWFnZS53aWR0aCA9IGltYWdlLndpZHRoIHx8IDFcbiAgICAgIGltYWdlLmhlaWdodCA9IGltYWdlLmhlaWdodCB8fCAxXG4gICAgICBpbWFnZS5jaGFubmVscyA9IGltYWdlLmNoYW5uZWxzIHx8IDRcbiAgICB9IGVsc2UgaWYgKGlzVHlwZWRBcnJheShkYXRhKSkge1xuICAgICAgaW1hZ2UuY2hhbm5lbHMgPSBpbWFnZS5jaGFubmVscyB8fCA0XG4gICAgICBpbWFnZS5kYXRhID0gZGF0YVxuICAgICAgaWYgKCEoJ3R5cGUnIGluIG9wdGlvbnMpICYmIGltYWdlLnR5cGUgPT09IEdMX1VOU0lHTkVEX0JZVEUkNSkge1xuICAgICAgICBpbWFnZS50eXBlID0gdHlwZWRBcnJheUNvZGUkMShkYXRhKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXkoZGF0YSkpIHtcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gaW1hZ2UuY2hhbm5lbHMgfHwgNFxuICAgICAgY29udmVydERhdGEoaW1hZ2UsIGRhdGEpXG4gICAgICBpbWFnZS5hbGlnbm1lbnQgPSAxXG4gICAgICBpbWFnZS5uZWVkc0ZyZWUgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc05EQXJyYXlMaWtlKGRhdGEpKSB7XG4gICAgICB2YXIgYXJyYXkgPSBkYXRhLmRhdGFcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheSkgJiYgaW1hZ2UudHlwZSA9PT0gR0xfVU5TSUdORURfQllURSQ1KSB7XG4gICAgICAgIGltYWdlLnR5cGUgPSB0eXBlZEFycmF5Q29kZSQxKGFycmF5KVxuICAgICAgfVxuICAgICAgdmFyIHNoYXBlID0gZGF0YS5zaGFwZVxuICAgICAgdmFyIHN0cmlkZSA9IGRhdGEuc3RyaWRlXG4gICAgICB2YXIgc2hhcGVYLCBzaGFwZVksIHNoYXBlQywgc3RyaWRlWCwgc3RyaWRlWSwgc3RyaWRlQ1xuICAgICAgaWYgKHNoYXBlLmxlbmd0aCA9PT0gMykge1xuICAgICAgICBzaGFwZUMgPSBzaGFwZVsyXVxuICAgICAgICBzdHJpZGVDID0gc3RyaWRlWzJdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVjayQxKHNoYXBlLmxlbmd0aCA9PT0gMiwgJ2ludmFsaWQgbmRhcnJheSBwaXhlbCBkYXRhLCBtdXN0IGJlIDIgb3IgM0QnKVxuICAgICAgICBzaGFwZUMgPSAxXG4gICAgICAgIHN0cmlkZUMgPSAxXG4gICAgICB9XG4gICAgICBzaGFwZVggPSBzaGFwZVswXVxuICAgICAgc2hhcGVZID0gc2hhcGVbMV1cbiAgICAgIHN0cmlkZVggPSBzdHJpZGVbMF1cbiAgICAgIHN0cmlkZVkgPSBzdHJpZGVbMV1cbiAgICAgIGltYWdlLmFsaWdubWVudCA9IDFcbiAgICAgIGltYWdlLndpZHRoID0gc2hhcGVYXG4gICAgICBpbWFnZS5oZWlnaHQgPSBzaGFwZVlcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gc2hhcGVDXG4gICAgICBpbWFnZS5mb3JtYXQgPSBpbWFnZS5pbnRlcm5hbGZvcm1hdCA9IENIQU5ORUxTX0ZPUk1BVFtzaGFwZUNdXG4gICAgICBpbWFnZS5uZWVkc0ZyZWUgPSB0cnVlXG4gICAgICB0cmFuc3Bvc2VEYXRhKGltYWdlLCBhcnJheSwgc3RyaWRlWCwgc3RyaWRlWSwgc3RyaWRlQywgZGF0YS5vZmZzZXQpXG4gICAgfSBlbHNlIGlmIChpc0NhbnZhc0VsZW1lbnQoZGF0YSkgfHwgaXNPZmZzY3JlZW5DYW52YXMoZGF0YSkgfHwgaXNDb250ZXh0MkQoZGF0YSkpIHtcbiAgICAgIGlmIChpc0NhbnZhc0VsZW1lbnQoZGF0YSkgfHwgaXNPZmZzY3JlZW5DYW52YXMoZGF0YSkpIHtcbiAgICAgICAgaW1hZ2UuZWxlbWVudCA9IGRhdGFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGltYWdlLmVsZW1lbnQgPSBkYXRhLmNhbnZhc1xuICAgICAgfVxuICAgICAgaW1hZ2Uud2lkdGggPSBpbWFnZS5lbGVtZW50LndpZHRoXG4gICAgICBpbWFnZS5oZWlnaHQgPSBpbWFnZS5lbGVtZW50LmhlaWdodFxuICAgICAgaW1hZ2UuY2hhbm5lbHMgPSA0XG4gICAgfSBlbHNlIGlmIChpc0JpdG1hcChkYXRhKSkge1xuICAgICAgaW1hZ2UuZWxlbWVudCA9IGRhdGFcbiAgICAgIGltYWdlLndpZHRoID0gZGF0YS53aWR0aFxuICAgICAgaW1hZ2UuaGVpZ2h0ID0gZGF0YS5oZWlnaHRcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gNFxuICAgIH0gZWxzZSBpZiAoaXNJbWFnZUVsZW1lbnQoZGF0YSkpIHtcbiAgICAgIGltYWdlLmVsZW1lbnQgPSBkYXRhXG4gICAgICBpbWFnZS53aWR0aCA9IGRhdGEubmF0dXJhbFdpZHRoXG4gICAgICBpbWFnZS5oZWlnaHQgPSBkYXRhLm5hdHVyYWxIZWlnaHRcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gNFxuICAgIH0gZWxzZSBpZiAoaXNWaWRlb0VsZW1lbnQoZGF0YSkpIHtcbiAgICAgIGltYWdlLmVsZW1lbnQgPSBkYXRhXG4gICAgICBpbWFnZS53aWR0aCA9IGRhdGEudmlkZW9XaWR0aFxuICAgICAgaW1hZ2UuaGVpZ2h0ID0gZGF0YS52aWRlb0hlaWdodFxuICAgICAgaW1hZ2UuY2hhbm5lbHMgPSA0XG4gICAgfSBlbHNlIGlmIChpc1JlY3RBcnJheShkYXRhKSkge1xuICAgICAgdmFyIHcgPSBpbWFnZS53aWR0aCB8fCBkYXRhWzBdLmxlbmd0aFxuICAgICAgdmFyIGggPSBpbWFnZS5oZWlnaHQgfHwgZGF0YS5sZW5ndGhcbiAgICAgIHZhciBjID0gaW1hZ2UuY2hhbm5lbHNcbiAgICAgIGlmIChpc0FycmF5TGlrZShkYXRhWzBdWzBdKSkge1xuICAgICAgICBjID0gYyB8fCBkYXRhWzBdWzBdLmxlbmd0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYyA9IGMgfHwgMVxuICAgICAgfVxuICAgICAgdmFyIGFycmF5U2hhcGUgPSBmbGF0dGVuVXRpbHMuc2hhcGUoZGF0YSlcbiAgICAgIHZhciBuID0gMVxuICAgICAgZm9yICh2YXIgZGQgPSAwOyBkZCA8IGFycmF5U2hhcGUubGVuZ3RoOyArK2RkKSB7XG4gICAgICAgIG4gKj0gYXJyYXlTaGFwZVtkZF1cbiAgICAgIH1cbiAgICAgIHZhciBhbGxvY0RhdGEgPSBwcmVDb252ZXJ0KGltYWdlLCBuKVxuICAgICAgZmxhdHRlblV0aWxzLmZsYXR0ZW4oZGF0YSwgYXJyYXlTaGFwZSwgJycsIGFsbG9jRGF0YSlcbiAgICAgIHBvc3RDb252ZXJ0KGltYWdlLCBhbGxvY0RhdGEpXG4gICAgICBpbWFnZS5hbGlnbm1lbnQgPSAxXG4gICAgICBpbWFnZS53aWR0aCA9IHdcbiAgICAgIGltYWdlLmhlaWdodCA9IGhcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gY1xuICAgICAgaW1hZ2UuZm9ybWF0ID0gaW1hZ2UuaW50ZXJuYWxmb3JtYXQgPSBDSEFOTkVMU19GT1JNQVRbY11cbiAgICAgIGltYWdlLm5lZWRzRnJlZSA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAoaW1hZ2UudHlwZSA9PT0gR0xfRkxPQVQkNCkge1xuICAgICAgY2hlY2skMShsaW1pdHMuZXh0ZW5zaW9ucy5pbmRleE9mKCdvZXNfdGV4dHVyZV9mbG9hdCcpID49IDAsXG4gICAgICAgICdvZXNfdGV4dHVyZV9mbG9hdCBleHRlbnNpb24gbm90IGVuYWJsZWQnKVxuICAgIH0gZWxzZSBpZiAoaW1hZ2UudHlwZSA9PT0gR0xfSEFMRl9GTE9BVF9PRVMkMSkge1xuICAgICAgY2hlY2skMShsaW1pdHMuZXh0ZW5zaW9ucy5pbmRleE9mKCdvZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JykgPj0gMCxcbiAgICAgICAgJ29lc190ZXh0dXJlX2hhbGZfZmxvYXQgZXh0ZW5zaW9uIG5vdCBlbmFibGVkJylcbiAgICB9XG5cbiAgICAvLyBkbyBjb21wcmVzc2VkIHRleHR1cmUgIHZhbGlkYXRpb24gaGVyZS5cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEltYWdlIChpbmZvLCB0YXJnZXQsIG1pcGxldmVsKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBpbmZvLmVsZW1lbnRcbiAgICB2YXIgZGF0YSA9IGluZm8uZGF0YVxuICAgIHZhciBpbnRlcm5hbGZvcm1hdCA9IGluZm8uaW50ZXJuYWxmb3JtYXRcbiAgICB2YXIgZm9ybWF0ID0gaW5mby5mb3JtYXRcbiAgICB2YXIgdHlwZSA9IGluZm8udHlwZVxuICAgIHZhciB3aWR0aCA9IGluZm8ud2lkdGhcbiAgICB2YXIgaGVpZ2h0ID0gaW5mby5oZWlnaHRcblxuICAgIHNldEZsYWdzKGluZm8pXG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgZ2wudGV4SW1hZ2UyRCh0YXJnZXQsIG1pcGxldmVsLCBmb3JtYXQsIGZvcm1hdCwgdHlwZSwgZWxlbWVudClcbiAgICB9IGVsc2UgaWYgKGluZm8uY29tcHJlc3NlZCkge1xuICAgICAgZ2wuY29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBtaXBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGRhdGEpXG4gICAgfSBlbHNlIGlmIChpbmZvLm5lZWRzQ29weSkge1xuICAgICAgcmVnbFBvbGwoKVxuICAgICAgZ2wuY29weVRleEltYWdlMkQoXG4gICAgICAgIHRhcmdldCwgbWlwbGV2ZWwsIGZvcm1hdCwgaW5mby54T2Zmc2V0LCBpbmZvLnlPZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDApXG4gICAgfSBlbHNlIHtcbiAgICAgIGdsLnRleEltYWdlMkQodGFyZ2V0LCBtaXBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIGRhdGEgfHwgbnVsbClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRTdWJJbWFnZSAoaW5mbywgdGFyZ2V0LCB4LCB5LCBtaXBsZXZlbCkge1xuICAgIHZhciBlbGVtZW50ID0gaW5mby5lbGVtZW50XG4gICAgdmFyIGRhdGEgPSBpbmZvLmRhdGFcbiAgICB2YXIgaW50ZXJuYWxmb3JtYXQgPSBpbmZvLmludGVybmFsZm9ybWF0XG4gICAgdmFyIGZvcm1hdCA9IGluZm8uZm9ybWF0XG4gICAgdmFyIHR5cGUgPSBpbmZvLnR5cGVcbiAgICB2YXIgd2lkdGggPSBpbmZvLndpZHRoXG4gICAgdmFyIGhlaWdodCA9IGluZm8uaGVpZ2h0XG5cbiAgICBzZXRGbGFncyhpbmZvKVxuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGdsLnRleFN1YkltYWdlMkQoXG4gICAgICAgIHRhcmdldCwgbWlwbGV2ZWwsIHgsIHksIGZvcm1hdCwgdHlwZSwgZWxlbWVudClcbiAgICB9IGVsc2UgaWYgKGluZm8uY29tcHJlc3NlZCkge1xuICAgICAgZ2wuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoXG4gICAgICAgIHRhcmdldCwgbWlwbGV2ZWwsIHgsIHksIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxuICAgIH0gZWxzZSBpZiAoaW5mby5uZWVkc0NvcHkpIHtcbiAgICAgIHJlZ2xQb2xsKClcbiAgICAgIGdsLmNvcHlUZXhTdWJJbWFnZTJEKFxuICAgICAgICB0YXJnZXQsIG1pcGxldmVsLCB4LCB5LCBpbmZvLnhPZmZzZXQsIGluZm8ueU9mZnNldCwgd2lkdGgsIGhlaWdodClcbiAgICB9IGVsc2Uge1xuICAgICAgZ2wudGV4U3ViSW1hZ2UyRChcbiAgICAgICAgdGFyZ2V0LCBtaXBsZXZlbCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKVxuICAgIH1cbiAgfVxuXG4gIC8vIHRleEltYWdlIHBvb2xcbiAgdmFyIGltYWdlUG9vbCA9IFtdXG5cbiAgZnVuY3Rpb24gYWxsb2NJbWFnZSAoKSB7XG4gICAgcmV0dXJuIGltYWdlUG9vbC5wb3AoKSB8fCBuZXcgVGV4SW1hZ2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gZnJlZUltYWdlIChpbWFnZSkge1xuICAgIGlmIChpbWFnZS5uZWVkc0ZyZWUpIHtcbiAgICAgIHBvb2wuZnJlZVR5cGUoaW1hZ2UuZGF0YSlcbiAgICB9XG4gICAgVGV4SW1hZ2UuY2FsbChpbWFnZSlcbiAgICBpbWFnZVBvb2wucHVzaChpbWFnZSlcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWlwIG1hcFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGZ1bmN0aW9uIE1pcE1hcCAoKSB7XG4gICAgVGV4RmxhZ3MuY2FsbCh0aGlzKVxuXG4gICAgdGhpcy5nZW5NaXBtYXBzID0gZmFsc2VcbiAgICB0aGlzLm1pcG1hcEhpbnQgPSBHTF9ET05UX0NBUkVcbiAgICB0aGlzLm1pcG1hc2sgPSAwXG4gICAgdGhpcy5pbWFnZXMgPSBBcnJheSgxNilcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTWlwTWFwRnJvbVNoYXBlIChtaXBtYXAsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICB2YXIgaW1nID0gbWlwbWFwLmltYWdlc1swXSA9IGFsbG9jSW1hZ2UoKVxuICAgIG1pcG1hcC5taXBtYXNrID0gMVxuICAgIGltZy53aWR0aCA9IG1pcG1hcC53aWR0aCA9IHdpZHRoXG4gICAgaW1nLmhlaWdodCA9IG1pcG1hcC5oZWlnaHQgPSBoZWlnaHRcbiAgICBpbWcuY2hhbm5lbHMgPSBtaXBtYXAuY2hhbm5lbHMgPSA0XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1pcE1hcEZyb21PYmplY3QgKG1pcG1hcCwgb3B0aW9ucykge1xuICAgIHZhciBpbWdEYXRhID0gbnVsbFxuICAgIGlmIChpc1BpeGVsRGF0YShvcHRpb25zKSkge1xuICAgICAgaW1nRGF0YSA9IG1pcG1hcC5pbWFnZXNbMF0gPSBhbGxvY0ltYWdlKClcbiAgICAgIGNvcHlGbGFncyhpbWdEYXRhLCBtaXBtYXApXG4gICAgICBwYXJzZUltYWdlKGltZ0RhdGEsIG9wdGlvbnMpXG4gICAgICBtaXBtYXAubWlwbWFzayA9IDFcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VGbGFncyhtaXBtYXAsIG9wdGlvbnMpXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLm1pcG1hcCkpIHtcbiAgICAgICAgdmFyIG1pcERhdGEgPSBvcHRpb25zLm1pcG1hcFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pcERhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBpbWdEYXRhID0gbWlwbWFwLmltYWdlc1tpXSA9IGFsbG9jSW1hZ2UoKVxuICAgICAgICAgIGNvcHlGbGFncyhpbWdEYXRhLCBtaXBtYXApXG4gICAgICAgICAgaW1nRGF0YS53aWR0aCA+Pj0gaVxuICAgICAgICAgIGltZ0RhdGEuaGVpZ2h0ID4+PSBpXG4gICAgICAgICAgcGFyc2VJbWFnZShpbWdEYXRhLCBtaXBEYXRhW2ldKVxuICAgICAgICAgIG1pcG1hcC5taXBtYXNrIHw9ICgxIDw8IGkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGltZ0RhdGEgPSBtaXBtYXAuaW1hZ2VzWzBdID0gYWxsb2NJbWFnZSgpXG4gICAgICAgIGNvcHlGbGFncyhpbWdEYXRhLCBtaXBtYXApXG4gICAgICAgIHBhcnNlSW1hZ2UoaW1nRGF0YSwgb3B0aW9ucylcbiAgICAgICAgbWlwbWFwLm1pcG1hc2sgPSAxXG4gICAgICB9XG4gICAgfVxuICAgIGNvcHlGbGFncyhtaXBtYXAsIG1pcG1hcC5pbWFnZXNbMF0pXG5cbiAgICAvLyBGb3IgdGV4dHVyZXMgb2YgdGhlIGNvbXByZXNzZWQgZm9ybWF0IFdFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjXG4gICAgLy8gd2UgbXVzdCBoYXZlIHRoYXRcbiAgICAvL1xuICAgIC8vIFwiV2hlbiBsZXZlbCBlcXVhbHMgemVybyB3aWR0aCBhbmQgaGVpZ2h0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LlxuICAgIC8vIFdoZW4gbGV2ZWwgaXMgZ3JlYXRlciB0aGFuIDAgd2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIDAsIDEsIDIgb3IgYSBtdWx0aXBsZSBvZiA0LiBcIlxuICAgIC8vXG4gICAgLy8gYnV0IHdlIGRvIG5vdCB5ZXQgc3VwcG9ydCBoYXZpbmcgbXVsdGlwbGUgbWlwbWFwIGxldmVscyBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcyxcbiAgICAvLyBzbyB3ZSBvbmx5IHRlc3QgZm9yIGxldmVsIHplcm8uXG5cbiAgICBpZiAoXG4gICAgICBtaXBtYXAuY29tcHJlc3NlZCAmJlxuICAgICAgKFxuICAgICAgICBtaXBtYXAuaW50ZXJuYWxmb3JtYXQgPT09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHxcbiAgICAgICAgbWlwbWFwLmludGVybmFsZm9ybWF0ID09PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCB8fFxuICAgICAgICBtaXBtYXAuaW50ZXJuYWxmb3JtYXQgPT09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUIHx8XG4gICAgICAgIG1pcG1hcC5pbnRlcm5hbGZvcm1hdCA9PT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFRcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGNoZWNrJDEobWlwbWFwLndpZHRoICUgNCA9PT0gMCAmJiBtaXBtYXAuaGVpZ2h0ICUgNCA9PT0gMCxcbiAgICAgICAgJ2ZvciBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0cywgbWlwbWFwIGxldmVsIDAgbXVzdCBoYXZlIHdpZHRoIGFuZCBoZWlnaHQgdGhhdCBhcmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRNaXBNYXAgKG1pcG1hcCwgdGFyZ2V0KSB7XG4gICAgdmFyIGltYWdlcyA9IG1pcG1hcC5pbWFnZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKCFpbWFnZXNbaV0pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzZXRJbWFnZShpbWFnZXNbaV0sIHRhcmdldCwgaSlcbiAgICB9XG4gIH1cblxuICB2YXIgbWlwUG9vbCA9IFtdXG5cbiAgZnVuY3Rpb24gYWxsb2NNaXBNYXAgKCkge1xuICAgIHZhciByZXN1bHQgPSBtaXBQb29sLnBvcCgpIHx8IG5ldyBNaXBNYXAoKVxuICAgIFRleEZsYWdzLmNhbGwocmVzdWx0KVxuICAgIHJlc3VsdC5taXBtYXNrID0gMFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgcmVzdWx0LmltYWdlc1tpXSA9IG51bGxcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gZnJlZU1pcE1hcCAobWlwbWFwKSB7XG4gICAgdmFyIGltYWdlcyA9IG1pcG1hcC5pbWFnZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGltYWdlc1tpXSkge1xuICAgICAgICBmcmVlSW1hZ2UoaW1hZ2VzW2ldKVxuICAgICAgfVxuICAgICAgaW1hZ2VzW2ldID0gbnVsbFxuICAgIH1cbiAgICBtaXBQb29sLnB1c2gobWlwbWFwKVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBUZXggaW5mb1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGZ1bmN0aW9uIFRleEluZm8gKCkge1xuICAgIHRoaXMubWluRmlsdGVyID0gR0xfTkVBUkVTVCQxXG4gICAgdGhpcy5tYWdGaWx0ZXIgPSBHTF9ORUFSRVNUJDFcblxuICAgIHRoaXMud3JhcFMgPSBHTF9DTEFNUF9UT19FREdFJDFcbiAgICB0aGlzLndyYXBUID0gR0xfQ0xBTVBfVE9fRURHRSQxXG5cbiAgICB0aGlzLmFuaXNvdHJvcGljID0gMVxuXG4gICAgdGhpcy5nZW5NaXBtYXBzID0gZmFsc2VcbiAgICB0aGlzLm1pcG1hcEhpbnQgPSBHTF9ET05UX0NBUkVcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVGV4SW5mbyAoaW5mbywgb3B0aW9ucykge1xuICAgIGlmICgnbWluJyBpbiBvcHRpb25zKSB7XG4gICAgICB2YXIgbWluRmlsdGVyID0gb3B0aW9ucy5taW5cbiAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG1pbkZpbHRlciwgbWluRmlsdGVycylcbiAgICAgIGluZm8ubWluRmlsdGVyID0gbWluRmlsdGVyc1ttaW5GaWx0ZXJdXG4gICAgICBpZiAoTUlQTUFQX0ZJTFRFUlMuaW5kZXhPZihpbmZvLm1pbkZpbHRlcikgPj0gMCAmJiAhKCdmYWNlcycgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgaW5mby5nZW5NaXBtYXBzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICgnbWFnJyBpbiBvcHRpb25zKSB7XG4gICAgICB2YXIgbWFnRmlsdGVyID0gb3B0aW9ucy5tYWdcbiAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG1hZ0ZpbHRlciwgbWFnRmlsdGVycylcbiAgICAgIGluZm8ubWFnRmlsdGVyID0gbWFnRmlsdGVyc1ttYWdGaWx0ZXJdXG4gICAgfVxuXG4gICAgdmFyIHdyYXBTID0gaW5mby53cmFwU1xuICAgIHZhciB3cmFwVCA9IGluZm8ud3JhcFRcbiAgICBpZiAoJ3dyYXAnIGluIG9wdGlvbnMpIHtcbiAgICAgIHZhciB3cmFwID0gb3B0aW9ucy53cmFwXG4gICAgICBpZiAodHlwZW9mIHdyYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKHdyYXAsIHdyYXBNb2RlcylcbiAgICAgICAgd3JhcFMgPSB3cmFwVCA9IHdyYXBNb2Rlc1t3cmFwXVxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHdyYXApKSB7XG4gICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKHdyYXBbMF0sIHdyYXBNb2RlcylcbiAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIod3JhcFsxXSwgd3JhcE1vZGVzKVxuICAgICAgICB3cmFwUyA9IHdyYXBNb2Rlc1t3cmFwWzBdXVxuICAgICAgICB3cmFwVCA9IHdyYXBNb2Rlc1t3cmFwWzFdXVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJ3dyYXBTJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIHZhciBvcHRXcmFwUyA9IG9wdGlvbnMud3JhcFNcbiAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIob3B0V3JhcFMsIHdyYXBNb2RlcylcbiAgICAgICAgd3JhcFMgPSB3cmFwTW9kZXNbb3B0V3JhcFNdXG4gICAgICB9XG4gICAgICBpZiAoJ3dyYXBUJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIHZhciBvcHRXcmFwVCA9IG9wdGlvbnMud3JhcFRcbiAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIob3B0V3JhcFQsIHdyYXBNb2RlcylcbiAgICAgICAgd3JhcFQgPSB3cmFwTW9kZXNbb3B0V3JhcFRdXG4gICAgICB9XG4gICAgfVxuICAgIGluZm8ud3JhcFMgPSB3cmFwU1xuICAgIGluZm8ud3JhcFQgPSB3cmFwVFxuXG4gICAgaWYgKCdhbmlzb3Ryb3BpYycgaW4gb3B0aW9ucykge1xuICAgICAgdmFyIGFuaXNvdHJvcGljID0gb3B0aW9ucy5hbmlzb3Ryb3BpY1xuICAgICAgY2hlY2skMSh0eXBlb2YgYW5pc290cm9waWMgPT09ICdudW1iZXInICYmXG4gICAgICAgICBhbmlzb3Ryb3BpYyA+PSAxICYmIGFuaXNvdHJvcGljIDw9IGxpbWl0cy5tYXhBbmlzb3Ryb3BpYyxcbiAgICAgICdhbmlzbyBzYW1wbGVzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAnKVxuICAgICAgaW5mby5hbmlzb3Ryb3BpYyA9IG9wdGlvbnMuYW5pc290cm9waWNcbiAgICB9XG5cbiAgICBpZiAoJ21pcG1hcCcgaW4gb3B0aW9ucykge1xuICAgICAgdmFyIGhhc01pcE1hcCA9IGZhbHNlXG4gICAgICBzd2l0Y2ggKHR5cGVvZiBvcHRpb25zLm1pcG1hcCkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG9wdGlvbnMubWlwbWFwLCBtaXBtYXBIaW50LFxuICAgICAgICAgICAgJ2ludmFsaWQgbWlwbWFwIGhpbnQnKVxuICAgICAgICAgIGluZm8ubWlwbWFwSGludCA9IG1pcG1hcEhpbnRbb3B0aW9ucy5taXBtYXBdXG4gICAgICAgICAgaW5mby5nZW5NaXBtYXBzID0gdHJ1ZVxuICAgICAgICAgIGhhc01pcE1hcCA9IHRydWVcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgIGhhc01pcE1hcCA9IGluZm8uZ2VuTWlwbWFwcyA9IG9wdGlvbnMubWlwbWFwXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIGNoZWNrJDEoQXJyYXkuaXNBcnJheShvcHRpb25zLm1pcG1hcCksICdpbnZhbGlkIG1pcG1hcCB0eXBlJylcbiAgICAgICAgICBpbmZvLmdlbk1pcG1hcHMgPSBmYWxzZVxuICAgICAgICAgIGhhc01pcE1hcCA9IHRydWVcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBtaXBtYXAgdHlwZScpXG4gICAgICB9XG4gICAgICBpZiAoaGFzTWlwTWFwICYmICEoJ21pbicgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgaW5mby5taW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUJDFcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRUZXhJbmZvIChpbmZvLCB0YXJnZXQpIHtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBpbmZvLm1pbkZpbHRlcilcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBpbmZvLm1hZ0ZpbHRlcilcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIGluZm8ud3JhcFMpXG4gICAgZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBpbmZvLndyYXBUKVxuICAgIGlmIChleHRlbnNpb25zLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYykge1xuICAgICAgZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULCBpbmZvLmFuaXNvdHJvcGljKVxuICAgIH1cbiAgICBpZiAoaW5mby5nZW5NaXBtYXBzKSB7XG4gICAgICBnbC5oaW50KEdMX0dFTkVSQVRFX01JUE1BUF9ISU5ULCBpbmZvLm1pcG1hcEhpbnQpXG4gICAgICBnbC5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpXG4gICAgfVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBGdWxsIHRleHR1cmUgb2JqZWN0XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgdmFyIHRleHR1cmVDb3VudCA9IDBcbiAgdmFyIHRleHR1cmVTZXQgPSB7fVxuICB2YXIgbnVtVGV4VW5pdHMgPSBsaW1pdHMubWF4VGV4dHVyZVVuaXRzXG4gIHZhciB0ZXh0dXJlVW5pdHMgPSBBcnJheShudW1UZXhVbml0cykubWFwKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9KVxuXG4gIGZ1bmN0aW9uIFJFR0xUZXh0dXJlICh0YXJnZXQpIHtcbiAgICBUZXhGbGFncy5jYWxsKHRoaXMpXG4gICAgdGhpcy5taXBtYXNrID0gMFxuICAgIHRoaXMuaW50ZXJuYWxmb3JtYXQgPSBHTF9SR0JBJDFcblxuICAgIHRoaXMuaWQgPSB0ZXh0dXJlQ291bnQrK1xuXG4gICAgdGhpcy5yZWZDb3VudCA9IDFcblxuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0XG4gICAgdGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpXG5cbiAgICB0aGlzLnVuaXQgPSAtMVxuICAgIHRoaXMuYmluZENvdW50ID0gMFxuXG4gICAgdGhpcy50ZXhJbmZvID0gbmV3IFRleEluZm8oKVxuXG4gICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICB0aGlzLnN0YXRzID0geyBzaXplOiAwIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0ZW1wQmluZCAodGV4dHVyZSkge1xuICAgIGdsLmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTAkMSlcbiAgICBnbC5iaW5kVGV4dHVyZSh0ZXh0dXJlLnRhcmdldCwgdGV4dHVyZS50ZXh0dXJlKVxuICB9XG5cbiAgZnVuY3Rpb24gdGVtcFJlc3RvcmUgKCkge1xuICAgIHZhciBwcmV2ID0gdGV4dHVyZVVuaXRzWzBdXG4gICAgaWYgKHByZXYpIHtcbiAgICAgIGdsLmJpbmRUZXh0dXJlKHByZXYudGFyZ2V0LCBwcmV2LnRleHR1cmUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGdsLmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQkMSwgbnVsbClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95ICh0ZXh0dXJlKSB7XG4gICAgdmFyIGhhbmRsZSA9IHRleHR1cmUudGV4dHVyZVxuICAgIGNoZWNrJDEoaGFuZGxlLCAnbXVzdCBub3QgZG91YmxlIGRlc3Ryb3kgdGV4dHVyZScpXG4gICAgdmFyIHVuaXQgPSB0ZXh0dXJlLnVuaXRcbiAgICB2YXIgdGFyZ2V0ID0gdGV4dHVyZS50YXJnZXRcbiAgICBpZiAodW5pdCA+PSAwKSB7XG4gICAgICBnbC5hY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwJDEgKyB1bml0KVxuICAgICAgZ2wuYmluZFRleHR1cmUodGFyZ2V0LCBudWxsKVxuICAgICAgdGV4dHVyZVVuaXRzW3VuaXRdID0gbnVsbFxuICAgIH1cbiAgICBnbC5kZWxldGVUZXh0dXJlKGhhbmRsZSlcbiAgICB0ZXh0dXJlLnRleHR1cmUgPSBudWxsXG4gICAgdGV4dHVyZS5wYXJhbXMgPSBudWxsXG4gICAgdGV4dHVyZS5waXhlbHMgPSBudWxsXG4gICAgdGV4dHVyZS5yZWZDb3VudCA9IDBcbiAgICBkZWxldGUgdGV4dHVyZVNldFt0ZXh0dXJlLmlkXVxuICAgIHN0YXRzLnRleHR1cmVDb3VudC0tXG4gIH1cblxuICBleHRlbmQoUkVHTFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgYmluZDogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRleHR1cmUgPSB0aGlzXG4gICAgICB0ZXh0dXJlLmJpbmRDb3VudCArPSAxXG4gICAgICB2YXIgdW5pdCA9IHRleHR1cmUudW5pdFxuICAgICAgaWYgKHVuaXQgPCAwKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtVGV4VW5pdHM7ICsraSkge1xuICAgICAgICAgIHZhciBvdGhlciA9IHRleHR1cmVVbml0c1tpXVxuICAgICAgICAgIGlmIChvdGhlcikge1xuICAgICAgICAgICAgaWYgKG90aGVyLmJpbmRDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG90aGVyLnVuaXQgPSAtMVxuICAgICAgICAgIH1cbiAgICAgICAgICB0ZXh0dXJlVW5pdHNbaV0gPSB0ZXh0dXJlXG4gICAgICAgICAgdW5pdCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bml0ID49IG51bVRleFVuaXRzKSB7XG4gICAgICAgICAgY2hlY2skMS5yYWlzZSgnaW5zdWZmaWNpZW50IG51bWJlciBvZiB0ZXh0dXJlIHVuaXRzJylcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLnByb2ZpbGUgJiYgc3RhdHMubWF4VGV4dHVyZVVuaXRzIDwgKHVuaXQgKyAxKSkge1xuICAgICAgICAgIHN0YXRzLm1heFRleHR1cmVVbml0cyA9IHVuaXQgKyAxIC8vICsxLCBzaW5jZSB0aGUgdW5pdHMgYXJlIHplcm8tYmFzZWRcbiAgICAgICAgfVxuICAgICAgICB0ZXh0dXJlLnVuaXQgPSB1bml0XG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTAkMSArIHVuaXQpXG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKHRleHR1cmUudGFyZ2V0LCB0ZXh0dXJlLnRleHR1cmUpXG4gICAgICB9XG4gICAgICByZXR1cm4gdW5pdFxuICAgIH0sXG5cbiAgICB1bmJpbmQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuYmluZENvdW50IC09IDFcbiAgICB9LFxuXG4gICAgZGVjUmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoLS10aGlzLnJlZkNvdW50IDw9IDApIHtcbiAgICAgICAgZGVzdHJveSh0aGlzKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBmdW5jdGlvbiBjcmVhdGVUZXh0dXJlMkQgKGEsIGIpIHtcbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBSRUdMVGV4dHVyZShHTF9URVhUVVJFXzJEJDEpXG4gICAgdGV4dHVyZVNldFt0ZXh0dXJlLmlkXSA9IHRleHR1cmVcbiAgICBzdGF0cy50ZXh0dXJlQ291bnQrK1xuXG4gICAgZnVuY3Rpb24gcmVnbFRleHR1cmUyRCAoYSwgYikge1xuICAgICAgdmFyIHRleEluZm8gPSB0ZXh0dXJlLnRleEluZm9cbiAgICAgIFRleEluZm8uY2FsbCh0ZXhJbmZvKVxuICAgICAgdmFyIG1pcERhdGEgPSBhbGxvY01pcE1hcCgpXG5cbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbVNoYXBlKG1pcERhdGEsIGEgfCAwLCBiIHwgMClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZU1pcE1hcEZyb21TaGFwZShtaXBEYXRhLCBhIHwgMCwgYSB8IDApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYSkge1xuICAgICAgICBjaGVjayQxLnR5cGUoYSwgJ29iamVjdCcsICdpbnZhbGlkIGFyZ3VtZW50cyB0byByZWdsLnRleHR1cmUnKVxuICAgICAgICBwYXJzZVRleEluZm8odGV4SW5mbywgYSlcbiAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KG1pcERhdGEsIGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlbXB0eSB0ZXh0dXJlcyBnZXQgYXNzaWduZWQgYSBkZWZhdWx0IHNoYXBlIG9mIDF4MVxuICAgICAgICBwYXJzZU1pcE1hcEZyb21TaGFwZShtaXBEYXRhLCAxLCAxKVxuICAgICAgfVxuXG4gICAgICBpZiAodGV4SW5mby5nZW5NaXBtYXBzKSB7XG4gICAgICAgIG1pcERhdGEubWlwbWFzayA9IChtaXBEYXRhLndpZHRoIDw8IDEpIC0gMVxuICAgICAgfVxuICAgICAgdGV4dHVyZS5taXBtYXNrID0gbWlwRGF0YS5taXBtYXNrXG5cbiAgICAgIGNvcHlGbGFncyh0ZXh0dXJlLCBtaXBEYXRhKVxuXG4gICAgICBjaGVjayQxLnRleHR1cmUyRCh0ZXhJbmZvLCBtaXBEYXRhLCBsaW1pdHMpXG4gICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0ID0gbWlwRGF0YS5pbnRlcm5hbGZvcm1hdFxuXG4gICAgICByZWdsVGV4dHVyZTJELndpZHRoID0gbWlwRGF0YS53aWR0aFxuICAgICAgcmVnbFRleHR1cmUyRC5oZWlnaHQgPSBtaXBEYXRhLmhlaWdodFxuXG4gICAgICB0ZW1wQmluZCh0ZXh0dXJlKVxuICAgICAgc2V0TWlwTWFwKG1pcERhdGEsIEdMX1RFWFRVUkVfMkQkMSlcbiAgICAgIHNldFRleEluZm8odGV4SW5mbywgR0xfVEVYVFVSRV8yRCQxKVxuICAgICAgdGVtcFJlc3RvcmUoKVxuXG4gICAgICBmcmVlTWlwTWFwKG1pcERhdGEpXG5cbiAgICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgICB0ZXh0dXJlLnN0YXRzLnNpemUgPSBnZXRUZXh0dXJlU2l6ZShcbiAgICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0LFxuICAgICAgICAgIHRleHR1cmUudHlwZSxcbiAgICAgICAgICBtaXBEYXRhLndpZHRoLFxuICAgICAgICAgIG1pcERhdGEuaGVpZ2h0LFxuICAgICAgICAgIHRleEluZm8uZ2VuTWlwbWFwcyxcbiAgICAgICAgICBmYWxzZSlcbiAgICAgIH1cbiAgICAgIHJlZ2xUZXh0dXJlMkQuZm9ybWF0ID0gdGV4dHVyZUZvcm1hdHNJbnZlcnRbdGV4dHVyZS5pbnRlcm5hbGZvcm1hdF1cbiAgICAgIHJlZ2xUZXh0dXJlMkQudHlwZSA9IHRleHR1cmVUeXBlc0ludmVydFt0ZXh0dXJlLnR5cGVdXG5cbiAgICAgIHJlZ2xUZXh0dXJlMkQubWFnID0gbWFnRmlsdGVyc0ludmVydFt0ZXhJbmZvLm1hZ0ZpbHRlcl1cbiAgICAgIHJlZ2xUZXh0dXJlMkQubWluID0gbWluRmlsdGVyc0ludmVydFt0ZXhJbmZvLm1pbkZpbHRlcl1cblxuICAgICAgcmVnbFRleHR1cmUyRC53cmFwUyA9IHdyYXBNb2Rlc0ludmVydFt0ZXhJbmZvLndyYXBTXVxuICAgICAgcmVnbFRleHR1cmUyRC53cmFwVCA9IHdyYXBNb2Rlc0ludmVydFt0ZXhJbmZvLndyYXBUXVxuXG4gICAgICByZXR1cm4gcmVnbFRleHR1cmUyRFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN1YmltYWdlIChpbWFnZSwgeF8sIHlfLCBsZXZlbF8pIHtcbiAgICAgIGNoZWNrJDEoISFpbWFnZSwgJ211c3Qgc3BlY2lmeSBpbWFnZSBkYXRhJylcblxuICAgICAgdmFyIHggPSB4XyB8IDBcbiAgICAgIHZhciB5ID0geV8gfCAwXG4gICAgICB2YXIgbGV2ZWwgPSBsZXZlbF8gfCAwXG5cbiAgICAgIHZhciBpbWFnZURhdGEgPSBhbGxvY0ltYWdlKClcbiAgICAgIGNvcHlGbGFncyhpbWFnZURhdGEsIHRleHR1cmUpXG4gICAgICBpbWFnZURhdGEud2lkdGggPSAwXG4gICAgICBpbWFnZURhdGEuaGVpZ2h0ID0gMFxuICAgICAgcGFyc2VJbWFnZShpbWFnZURhdGEsIGltYWdlKVxuICAgICAgaW1hZ2VEYXRhLndpZHRoID0gaW1hZ2VEYXRhLndpZHRoIHx8ICgodGV4dHVyZS53aWR0aCA+PiBsZXZlbCkgLSB4KVxuICAgICAgaW1hZ2VEYXRhLmhlaWdodCA9IGltYWdlRGF0YS5oZWlnaHQgfHwgKCh0ZXh0dXJlLmhlaWdodCA+PiBsZXZlbCkgLSB5KVxuXG4gICAgICBjaGVjayQxKFxuICAgICAgICB0ZXh0dXJlLnR5cGUgPT09IGltYWdlRGF0YS50eXBlICYmXG4gICAgICAgIHRleHR1cmUuZm9ybWF0ID09PSBpbWFnZURhdGEuZm9ybWF0ICYmXG4gICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQgPT09IGltYWdlRGF0YS5pbnRlcm5hbGZvcm1hdCxcbiAgICAgICAgJ2luY29tcGF0aWJsZSBmb3JtYXQgZm9yIHRleHR1cmUuc3ViaW1hZ2UnKVxuICAgICAgY2hlY2skMShcbiAgICAgICAgeCA+PSAwICYmIHkgPj0gMCAmJlxuICAgICAgICB4ICsgaW1hZ2VEYXRhLndpZHRoIDw9IHRleHR1cmUud2lkdGggJiZcbiAgICAgICAgeSArIGltYWdlRGF0YS5oZWlnaHQgPD0gdGV4dHVyZS5oZWlnaHQsXG4gICAgICAgICd0ZXh0dXJlLnN1YmltYWdlIHdyaXRlIG91dCBvZiBib3VuZHMnKVxuICAgICAgY2hlY2skMShcbiAgICAgICAgdGV4dHVyZS5taXBtYXNrICYgKDEgPDwgbGV2ZWwpLFxuICAgICAgICAnbWlzc2luZyBtaXBtYXAgZGF0YScpXG4gICAgICBjaGVjayQxKFxuICAgICAgICBpbWFnZURhdGEuZGF0YSB8fCBpbWFnZURhdGEuZWxlbWVudCB8fCBpbWFnZURhdGEubmVlZHNDb3B5LFxuICAgICAgICAnbWlzc2luZyBpbWFnZSBkYXRhJylcblxuICAgICAgdGVtcEJpbmQodGV4dHVyZSlcbiAgICAgIHNldFN1YkltYWdlKGltYWdlRGF0YSwgR0xfVEVYVFVSRV8yRCQxLCB4LCB5LCBsZXZlbClcbiAgICAgIHRlbXBSZXN0b3JlKClcblxuICAgICAgZnJlZUltYWdlKGltYWdlRGF0YSlcblxuICAgICAgcmV0dXJuIHJlZ2xUZXh0dXJlMkRcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNpemUgKHdfLCBoXykge1xuICAgICAgdmFyIHcgPSB3XyB8IDBcbiAgICAgIHZhciBoID0gKGhfIHwgMCkgfHwgd1xuICAgICAgaWYgKHcgPT09IHRleHR1cmUud2lkdGggJiYgaCA9PT0gdGV4dHVyZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2xUZXh0dXJlMkRcbiAgICAgIH1cblxuICAgICAgcmVnbFRleHR1cmUyRC53aWR0aCA9IHRleHR1cmUud2lkdGggPSB3XG4gICAgICByZWdsVGV4dHVyZTJELmhlaWdodCA9IHRleHR1cmUuaGVpZ2h0ID0gaFxuXG4gICAgICB0ZW1wQmluZCh0ZXh0dXJlKVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgdGV4dHVyZS5taXBtYXNrID4+IGk7ICsraSkge1xuICAgICAgICB2YXIgX3cgPSB3ID4+IGlcbiAgICAgICAgdmFyIF9oID0gaCA+PiBpXG4gICAgICAgIGlmICghX3cgfHwgIV9oKSBicmVha1xuICAgICAgICBnbC50ZXhJbWFnZTJEKFxuICAgICAgICAgIEdMX1RFWFRVUkVfMkQkMSxcbiAgICAgICAgICBpLFxuICAgICAgICAgIHRleHR1cmUuZm9ybWF0LFxuICAgICAgICAgIF93LFxuICAgICAgICAgIF9oLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgdGV4dHVyZS5mb3JtYXQsXG4gICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgIG51bGwpXG4gICAgICB9XG4gICAgICB0ZW1wUmVzdG9yZSgpXG5cbiAgICAgIC8vIGFsc28sIHJlY29tcHV0ZSB0aGUgdGV4dHVyZSBzaXplLlxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIHRleHR1cmUuc3RhdHMuc2l6ZSA9IGdldFRleHR1cmVTaXplKFxuICAgICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgIHcsXG4gICAgICAgICAgaCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBmYWxzZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlZ2xUZXh0dXJlMkRcbiAgICB9XG5cbiAgICByZWdsVGV4dHVyZTJEKGEsIGIpXG5cbiAgICByZWdsVGV4dHVyZTJELnN1YmltYWdlID0gc3ViaW1hZ2VcbiAgICByZWdsVGV4dHVyZTJELnJlc2l6ZSA9IHJlc2l6ZVxuICAgIHJlZ2xUZXh0dXJlMkQuX3JlZ2xUeXBlID0gJ3RleHR1cmUyZCdcbiAgICByZWdsVGV4dHVyZTJELl90ZXh0dXJlID0gdGV4dHVyZVxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgcmVnbFRleHR1cmUyRC5zdGF0cyA9IHRleHR1cmUuc3RhdHNcbiAgICB9XG4gICAgcmVnbFRleHR1cmUyRC5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGV4dHVyZS5kZWNSZWYoKVxuICAgIH1cblxuICAgIHJldHVybiByZWdsVGV4dHVyZTJEXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVUZXh0dXJlQ3ViZSAoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICAgIHZhciB0ZXh0dXJlID0gbmV3IFJFR0xUZXh0dXJlKEdMX1RFWFRVUkVfQ1VCRV9NQVAkMSlcbiAgICB0ZXh0dXJlU2V0W3RleHR1cmUuaWRdID0gdGV4dHVyZVxuICAgIHN0YXRzLmN1YmVDb3VudCsrXG5cbiAgICB2YXIgZmFjZXMgPSBuZXcgQXJyYXkoNilcblxuICAgIGZ1bmN0aW9uIHJlZ2xUZXh0dXJlQ3ViZSAoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICAgICAgdmFyIGlcbiAgICAgIHZhciB0ZXhJbmZvID0gdGV4dHVyZS50ZXhJbmZvXG4gICAgICBUZXhJbmZvLmNhbGwodGV4SW5mbylcbiAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgZmFjZXNbaV0gPSBhbGxvY01pcE1hcCgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgYTAgPT09ICdudW1iZXInIHx8ICFhMCkge1xuICAgICAgICB2YXIgcyA9IChhMCB8IDApIHx8IDFcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDY7ICsraSkge1xuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbVNoYXBlKGZhY2VzW2ldLCBzLCBzKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhMCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGExKSB7XG4gICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzWzBdLCBhMClcbiAgICAgICAgICBwYXJzZU1pcE1hcEZyb21PYmplY3QoZmFjZXNbMV0sIGExKVxuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbU9iamVjdChmYWNlc1syXSwgYTIpXG4gICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzWzNdLCBhMylcbiAgICAgICAgICBwYXJzZU1pcE1hcEZyb21PYmplY3QoZmFjZXNbNF0sIGE0KVxuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbU9iamVjdChmYWNlc1s1XSwgYTUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VUZXhJbmZvKHRleEluZm8sIGEwKVxuICAgICAgICAgIHBhcnNlRmxhZ3ModGV4dHVyZSwgYTApXG4gICAgICAgICAgaWYgKCdmYWNlcycgaW4gYTApIHtcbiAgICAgICAgICAgIHZhciBmYWNlSW5wdXQgPSBhMC5mYWNlc1xuICAgICAgICAgICAgY2hlY2skMShBcnJheS5pc0FycmF5KGZhY2VJbnB1dCkgJiYgZmFjZUlucHV0Lmxlbmd0aCA9PT0gNixcbiAgICAgICAgICAgICAgJ2N1YmUgZmFjZXMgbXVzdCBiZSBhIGxlbmd0aCA2IGFycmF5JylcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgICAgICAgY2hlY2skMSh0eXBlb2YgZmFjZUlucHV0W2ldID09PSAnb2JqZWN0JyAmJiAhIWZhY2VJbnB1dFtpXSxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBpbnB1dCBmb3IgY3ViZSBtYXAgZmFjZScpXG4gICAgICAgICAgICAgIGNvcHlGbGFncyhmYWNlc1tpXSwgdGV4dHVyZSlcbiAgICAgICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzW2ldLCBmYWNlSW5wdXRbaV0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzW2ldLCBhMClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgYXJndW1lbnRzIHRvIGN1YmUgbWFwJylcbiAgICAgIH1cblxuICAgICAgY29weUZsYWdzKHRleHR1cmUsIGZhY2VzWzBdKVxuXG4gICAgICBpZiAoIWxpbWl0cy5ucG90VGV4dHVyZUN1YmUpIHtcbiAgICAgICAgY2hlY2skMShpc1BvdzIkMSh0ZXh0dXJlLndpZHRoKSAmJiBpc1BvdzIkMSh0ZXh0dXJlLmhlaWdodCksICd5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBub24gcG93ZXIgb3IgdHdvIHRleHR1cmUgZGltZW5zaW9ucycpXG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXhJbmZvLmdlbk1pcG1hcHMpIHtcbiAgICAgICAgdGV4dHVyZS5taXBtYXNrID0gKGZhY2VzWzBdLndpZHRoIDw8IDEpIC0gMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dHVyZS5taXBtYXNrID0gZmFjZXNbMF0ubWlwbWFza1xuICAgICAgfVxuXG4gICAgICBjaGVjayQxLnRleHR1cmVDdWJlKHRleHR1cmUsIHRleEluZm8sIGZhY2VzLCBsaW1pdHMpXG4gICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0ID0gZmFjZXNbMF0uaW50ZXJuYWxmb3JtYXRcblxuICAgICAgcmVnbFRleHR1cmVDdWJlLndpZHRoID0gZmFjZXNbMF0ud2lkdGhcbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS5oZWlnaHQgPSBmYWNlc1swXS5oZWlnaHRcblxuICAgICAgdGVtcEJpbmQodGV4dHVyZSlcbiAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgc2V0TWlwTWFwKGZhY2VzW2ldLCBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMSArIGkpXG4gICAgICB9XG4gICAgICBzZXRUZXhJbmZvKHRleEluZm8sIEdMX1RFWFRVUkVfQ1VCRV9NQVAkMSlcbiAgICAgIHRlbXBSZXN0b3JlKClcblxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIHRleHR1cmUuc3RhdHMuc2l6ZSA9IGdldFRleHR1cmVTaXplKFxuICAgICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgIHJlZ2xUZXh0dXJlQ3ViZS53aWR0aCxcbiAgICAgICAgICByZWdsVGV4dHVyZUN1YmUuaGVpZ2h0LFxuICAgICAgICAgIHRleEluZm8uZ2VuTWlwbWFwcyxcbiAgICAgICAgICB0cnVlKVxuICAgICAgfVxuXG4gICAgICByZWdsVGV4dHVyZUN1YmUuZm9ybWF0ID0gdGV4dHVyZUZvcm1hdHNJbnZlcnRbdGV4dHVyZS5pbnRlcm5hbGZvcm1hdF1cbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS50eXBlID0gdGV4dHVyZVR5cGVzSW52ZXJ0W3RleHR1cmUudHlwZV1cblxuICAgICAgcmVnbFRleHR1cmVDdWJlLm1hZyA9IG1hZ0ZpbHRlcnNJbnZlcnRbdGV4SW5mby5tYWdGaWx0ZXJdXG4gICAgICByZWdsVGV4dHVyZUN1YmUubWluID0gbWluRmlsdGVyc0ludmVydFt0ZXhJbmZvLm1pbkZpbHRlcl1cblxuICAgICAgcmVnbFRleHR1cmVDdWJlLndyYXBTID0gd3JhcE1vZGVzSW52ZXJ0W3RleEluZm8ud3JhcFNdXG4gICAgICByZWdsVGV4dHVyZUN1YmUud3JhcFQgPSB3cmFwTW9kZXNJbnZlcnRbdGV4SW5mby53cmFwVF1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IDY7ICsraSkge1xuICAgICAgICBmcmVlTWlwTWFwKGZhY2VzW2ldKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVnbFRleHR1cmVDdWJlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3ViaW1hZ2UgKGZhY2UsIGltYWdlLCB4XywgeV8sIGxldmVsXykge1xuICAgICAgY2hlY2skMSghIWltYWdlLCAnbXVzdCBzcGVjaWZ5IGltYWdlIGRhdGEnKVxuICAgICAgY2hlY2skMSh0eXBlb2YgZmFjZSA9PT0gJ251bWJlcicgJiYgZmFjZSA9PT0gKGZhY2UgfCAwKSAmJlxuICAgICAgICBmYWNlID49IDAgJiYgZmFjZSA8IDYsICdpbnZhbGlkIGZhY2UnKVxuXG4gICAgICB2YXIgeCA9IHhfIHwgMFxuICAgICAgdmFyIHkgPSB5XyB8IDBcbiAgICAgIHZhciBsZXZlbCA9IGxldmVsXyB8IDBcblxuICAgICAgdmFyIGltYWdlRGF0YSA9IGFsbG9jSW1hZ2UoKVxuICAgICAgY29weUZsYWdzKGltYWdlRGF0YSwgdGV4dHVyZSlcbiAgICAgIGltYWdlRGF0YS53aWR0aCA9IDBcbiAgICAgIGltYWdlRGF0YS5oZWlnaHQgPSAwXG4gICAgICBwYXJzZUltYWdlKGltYWdlRGF0YSwgaW1hZ2UpXG4gICAgICBpbWFnZURhdGEud2lkdGggPSBpbWFnZURhdGEud2lkdGggfHwgKCh0ZXh0dXJlLndpZHRoID4+IGxldmVsKSAtIHgpXG4gICAgICBpbWFnZURhdGEuaGVpZ2h0ID0gaW1hZ2VEYXRhLmhlaWdodCB8fCAoKHRleHR1cmUuaGVpZ2h0ID4+IGxldmVsKSAtIHkpXG5cbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIHRleHR1cmUudHlwZSA9PT0gaW1hZ2VEYXRhLnR5cGUgJiZcbiAgICAgICAgdGV4dHVyZS5mb3JtYXQgPT09IGltYWdlRGF0YS5mb3JtYXQgJiZcbiAgICAgICAgdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCA9PT0gaW1hZ2VEYXRhLmludGVybmFsZm9ybWF0LFxuICAgICAgICAnaW5jb21wYXRpYmxlIGZvcm1hdCBmb3IgdGV4dHVyZS5zdWJpbWFnZScpXG4gICAgICBjaGVjayQxKFxuICAgICAgICB4ID49IDAgJiYgeSA+PSAwICYmXG4gICAgICAgIHggKyBpbWFnZURhdGEud2lkdGggPD0gdGV4dHVyZS53aWR0aCAmJlxuICAgICAgICB5ICsgaW1hZ2VEYXRhLmhlaWdodCA8PSB0ZXh0dXJlLmhlaWdodCxcbiAgICAgICAgJ3RleHR1cmUuc3ViaW1hZ2Ugd3JpdGUgb3V0IG9mIGJvdW5kcycpXG4gICAgICBjaGVjayQxKFxuICAgICAgICB0ZXh0dXJlLm1pcG1hc2sgJiAoMSA8PCBsZXZlbCksXG4gICAgICAgICdtaXNzaW5nIG1pcG1hcCBkYXRhJylcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIGltYWdlRGF0YS5kYXRhIHx8IGltYWdlRGF0YS5lbGVtZW50IHx8IGltYWdlRGF0YS5uZWVkc0NvcHksXG4gICAgICAgICdtaXNzaW5nIGltYWdlIGRhdGEnKVxuXG4gICAgICB0ZW1wQmluZCh0ZXh0dXJlKVxuICAgICAgc2V0U3ViSW1hZ2UoaW1hZ2VEYXRhLCBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMSArIGZhY2UsIHgsIHksIGxldmVsKVxuICAgICAgdGVtcFJlc3RvcmUoKVxuXG4gICAgICBmcmVlSW1hZ2UoaW1hZ2VEYXRhKVxuXG4gICAgICByZXR1cm4gcmVnbFRleHR1cmVDdWJlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplIChyYWRpdXNfKSB7XG4gICAgICB2YXIgcmFkaXVzID0gcmFkaXVzXyB8IDBcbiAgICAgIGlmIChyYWRpdXMgPT09IHRleHR1cmUud2lkdGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS53aWR0aCA9IHRleHR1cmUud2lkdGggPSByYWRpdXNcbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS5oZWlnaHQgPSB0ZXh0dXJlLmhlaWdodCA9IHJhZGl1c1xuXG4gICAgICB0ZW1wQmluZCh0ZXh0dXJlKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IHRleHR1cmUubWlwbWFzayA+PiBqOyArK2opIHtcbiAgICAgICAgICBnbC50ZXhJbWFnZTJEKFxuICAgICAgICAgICAgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDEgKyBpLFxuICAgICAgICAgICAgaixcbiAgICAgICAgICAgIHRleHR1cmUuZm9ybWF0LFxuICAgICAgICAgICAgcmFkaXVzID4+IGosXG4gICAgICAgICAgICByYWRpdXMgPj4gaixcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0ZXh0dXJlLmZvcm1hdCxcbiAgICAgICAgICAgIHRleHR1cmUudHlwZSxcbiAgICAgICAgICAgIG51bGwpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRlbXBSZXN0b3JlKClcblxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIHRleHR1cmUuc3RhdHMuc2l6ZSA9IGdldFRleHR1cmVTaXplKFxuICAgICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgIHJlZ2xUZXh0dXJlQ3ViZS53aWR0aCxcbiAgICAgICAgICByZWdsVGV4dHVyZUN1YmUuaGVpZ2h0LFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRydWUpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWdsVGV4dHVyZUN1YmVcbiAgICB9XG5cbiAgICByZWdsVGV4dHVyZUN1YmUoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSlcblxuICAgIHJlZ2xUZXh0dXJlQ3ViZS5zdWJpbWFnZSA9IHN1YmltYWdlXG4gICAgcmVnbFRleHR1cmVDdWJlLnJlc2l6ZSA9IHJlc2l6ZVxuICAgIHJlZ2xUZXh0dXJlQ3ViZS5fcmVnbFR5cGUgPSAndGV4dHVyZUN1YmUnXG4gICAgcmVnbFRleHR1cmVDdWJlLl90ZXh0dXJlID0gdGV4dHVyZVxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgcmVnbFRleHR1cmVDdWJlLnN0YXRzID0gdGV4dHVyZS5zdGF0c1xuICAgIH1cbiAgICByZWdsVGV4dHVyZUN1YmUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRleHR1cmUuZGVjUmVmKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVnbFRleHR1cmVDdWJlXG4gIH1cblxuICAvLyBDYWxsZWQgd2hlbiByZWdsIGlzIGRlc3Ryb3llZFxuICBmdW5jdGlvbiBkZXN0cm95VGV4dHVyZXMgKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtVGV4VW5pdHM7ICsraSkge1xuICAgICAgZ2wuYWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCQxICsgaSlcbiAgICAgIGdsLmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQkMSwgbnVsbClcbiAgICAgIHRleHR1cmVVbml0c1tpXSA9IG51bGxcbiAgICB9XG4gICAgdmFsdWVzKHRleHR1cmVTZXQpLmZvckVhY2goZGVzdHJveSlcblxuICAgIHN0YXRzLmN1YmVDb3VudCA9IDBcbiAgICBzdGF0cy50ZXh0dXJlQ291bnQgPSAwXG4gIH1cblxuICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICBzdGF0cy5nZXRUb3RhbFRleHR1cmVTaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRvdGFsID0gMFxuICAgICAgT2JqZWN0LmtleXModGV4dHVyZVNldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHRvdGFsICs9IHRleHR1cmVTZXRba2V5XS5zdGF0cy5zaXplXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHRvdGFsXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdG9yZVRleHR1cmVzICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVRleFVuaXRzOyArK2kpIHtcbiAgICAgIHZhciB0ZXggPSB0ZXh0dXJlVW5pdHNbaV1cbiAgICAgIGlmICh0ZXgpIHtcbiAgICAgICAgdGV4LmJpbmRDb3VudCA9IDBcbiAgICAgICAgdGV4LnVuaXQgPSAtMVxuICAgICAgICB0ZXh0dXJlVW5pdHNbaV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFsdWVzKHRleHR1cmVTZXQpLmZvckVhY2goZnVuY3Rpb24gKHRleHR1cmUpIHtcbiAgICAgIHRleHR1cmUudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKVxuICAgICAgZ2wuYmluZFRleHR1cmUodGV4dHVyZS50YXJnZXQsIHRleHR1cmUudGV4dHVyZSlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7ICsraSkge1xuICAgICAgICBpZiAoKHRleHR1cmUubWlwbWFzayAmICgxIDw8IGkpKSA9PT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHR1cmUudGFyZ2V0ID09PSBHTF9URVhUVVJFXzJEJDEpIHtcbiAgICAgICAgICBnbC50ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQkMSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0LFxuICAgICAgICAgICAgdGV4dHVyZS53aWR0aCA+PiBpLFxuICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPj4gaSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0LFxuICAgICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgICAgbnVsbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDY7ICsraikge1xuICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMSArIGosXG4gICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICAgICAgIHRleHR1cmUud2lkdGggPj4gaSxcbiAgICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPj4gaSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCxcbiAgICAgICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgICAgICBudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0VGV4SW5mbyh0ZXh0dXJlLnRleEluZm8sIHRleHR1cmUudGFyZ2V0KVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZWZyZXNoVGV4dHVyZXMgKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtVGV4VW5pdHM7ICsraSkge1xuICAgICAgdmFyIHRleCA9IHRleHR1cmVVbml0c1tpXVxuICAgICAgaWYgKHRleCkge1xuICAgICAgICB0ZXguYmluZENvdW50ID0gMFxuICAgICAgICB0ZXgudW5pdCA9IC0xXG4gICAgICAgIHRleHR1cmVVbml0c1tpXSA9IG51bGxcbiAgICAgIH1cbiAgICAgIGdsLmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTAkMSArIGkpXG4gICAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFXzJEJDEsIG51bGwpXG4gICAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFX0NVQkVfTUFQJDEsIG51bGwpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGUyRDogY3JlYXRlVGV4dHVyZTJELFxuICAgIGNyZWF0ZUN1YmU6IGNyZWF0ZVRleHR1cmVDdWJlLFxuICAgIGNsZWFyOiBkZXN0cm95VGV4dHVyZXMsXG4gICAgZ2V0VGV4dHVyZTogZnVuY3Rpb24gKHdyYXBwZXIpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcbiAgICByZXN0b3JlOiByZXN0b3JlVGV4dHVyZXMsXG4gICAgcmVmcmVzaDogcmVmcmVzaFRleHR1cmVzXG4gIH1cbn1cblxudmFyIEdMX1JFTkRFUkJVRkZFUiA9IDB4OEQ0MVxuXG52YXIgR0xfUkdCQTQkMSA9IDB4ODA1NlxudmFyIEdMX1JHQjVfQTEkMSA9IDB4ODA1N1xudmFyIEdMX1JHQjU2NSQxID0gMHg4RDYyXG52YXIgR0xfREVQVEhfQ09NUE9ORU5UMTYgPSAweDgxQTVcbnZhciBHTF9TVEVOQ0lMX0lOREVYOCA9IDB4OEQ0OFxudmFyIEdMX0RFUFRIX1NURU5DSUwkMSA9IDB4ODRGOVxuXG52YXIgR0xfU1JHQjhfQUxQSEE4X0VYVCA9IDB4OEM0M1xuXG52YXIgR0xfUkdCQTMyRl9FWFQgPSAweDg4MTRcblxudmFyIEdMX1JHQkExNkZfRVhUID0gMHg4ODFBXG52YXIgR0xfUkdCMTZGX0VYVCA9IDB4ODgxQlxuXG52YXIgRk9STUFUX1NJWkVTID0gW11cblxuRk9STUFUX1NJWkVTW0dMX1JHQkE0JDFdID0gMlxuRk9STUFUX1NJWkVTW0dMX1JHQjVfQTEkMV0gPSAyXG5GT1JNQVRfU0laRVNbR0xfUkdCNTY1JDFdID0gMlxuXG5GT1JNQVRfU0laRVNbR0xfREVQVEhfQ09NUE9ORU5UMTZdID0gMlxuRk9STUFUX1NJWkVTW0dMX1NURU5DSUxfSU5ERVg4XSA9IDFcbkZPUk1BVF9TSVpFU1tHTF9ERVBUSF9TVEVOQ0lMJDFdID0gNFxuXG5GT1JNQVRfU0laRVNbR0xfU1JHQjhfQUxQSEE4X0VYVF0gPSA0XG5GT1JNQVRfU0laRVNbR0xfUkdCQTMyRl9FWFRdID0gMTZcbkZPUk1BVF9TSVpFU1tHTF9SR0JBMTZGX0VYVF0gPSA4XG5GT1JNQVRfU0laRVNbR0xfUkdCMTZGX0VYVF0gPSA2XG5cbmZ1bmN0aW9uIGdldFJlbmRlcmJ1ZmZlclNpemUgKGZvcm1hdCwgd2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gRk9STUFUX1NJWkVTW2Zvcm1hdF0gKiB3aWR0aCAqIGhlaWdodFxufVxuXG52YXIgd3JhcFJlbmRlcmJ1ZmZlcnMgPSBmdW5jdGlvbiAoZ2wsIGV4dGVuc2lvbnMsIGxpbWl0cywgc3RhdHMsIGNvbmZpZykge1xuICB2YXIgZm9ybWF0VHlwZXMgPSB7XG4gICAgJ3JnYmE0JzogR0xfUkdCQTQkMSxcbiAgICAncmdiNTY1JzogR0xfUkdCNTY1JDEsXG4gICAgJ3JnYjUgYTEnOiBHTF9SR0I1X0ExJDEsXG4gICAgJ2RlcHRoJzogR0xfREVQVEhfQ09NUE9ORU5UMTYsXG4gICAgJ3N0ZW5jaWwnOiBHTF9TVEVOQ0lMX0lOREVYOCxcbiAgICAnZGVwdGggc3RlbmNpbCc6IEdMX0RFUFRIX1NURU5DSUwkMVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMuZXh0X3NyZ2IpIHtcbiAgICBmb3JtYXRUeXBlc1snc3JnYmEnXSA9IEdMX1NSR0I4X0FMUEhBOF9FWFRcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCkge1xuICAgIGZvcm1hdFR5cGVzWydyZ2JhMTZmJ10gPSBHTF9SR0JBMTZGX0VYVFxuICAgIGZvcm1hdFR5cGVzWydyZ2IxNmYnXSA9IEdMX1JHQjE2Rl9FWFRcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCkge1xuICAgIGZvcm1hdFR5cGVzWydyZ2JhMzJmJ10gPSBHTF9SR0JBMzJGX0VYVFxuICB9XG5cbiAgdmFyIGZvcm1hdFR5cGVzSW52ZXJ0ID0gW11cbiAgT2JqZWN0LmtleXMoZm9ybWF0VHlwZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWwgPSBmb3JtYXRUeXBlc1trZXldXG4gICAgZm9ybWF0VHlwZXNJbnZlcnRbdmFsXSA9IGtleVxuICB9KVxuXG4gIHZhciByZW5kZXJidWZmZXJDb3VudCA9IDBcbiAgdmFyIHJlbmRlcmJ1ZmZlclNldCA9IHt9XG5cbiAgZnVuY3Rpb24gUkVHTFJlbmRlcmJ1ZmZlciAocmVuZGVyYnVmZmVyKSB7XG4gICAgdGhpcy5pZCA9IHJlbmRlcmJ1ZmZlckNvdW50KytcbiAgICB0aGlzLnJlZkNvdW50ID0gMVxuXG4gICAgdGhpcy5yZW5kZXJidWZmZXIgPSByZW5kZXJidWZmZXJcblxuICAgIHRoaXMuZm9ybWF0ID0gR0xfUkdCQTQkMVxuICAgIHRoaXMud2lkdGggPSAwXG4gICAgdGhpcy5oZWlnaHQgPSAwXG5cbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIHRoaXMuc3RhdHMgPSB7IHNpemU6IDAgfVxuICAgIH1cbiAgfVxuXG4gIFJFR0xSZW5kZXJidWZmZXIucHJvdG90eXBlLmRlY1JlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoLS10aGlzLnJlZkNvdW50IDw9IDApIHtcbiAgICAgIGRlc3Ryb3kodGhpcylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95IChyYikge1xuICAgIHZhciBoYW5kbGUgPSByYi5yZW5kZXJidWZmZXJcbiAgICBjaGVjayQxKGhhbmRsZSwgJ211c3Qgbm90IGRvdWJsZSBkZXN0cm95IHJlbmRlcmJ1ZmZlcicpXG4gICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG51bGwpXG4gICAgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKGhhbmRsZSlcbiAgICByYi5yZW5kZXJidWZmZXIgPSBudWxsXG4gICAgcmIucmVmQ291bnQgPSAwXG4gICAgZGVsZXRlIHJlbmRlcmJ1ZmZlclNldFtyYi5pZF1cbiAgICBzdGF0cy5yZW5kZXJidWZmZXJDb3VudC0tXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSZW5kZXJidWZmZXIgKGEsIGIpIHtcbiAgICB2YXIgcmVuZGVyYnVmZmVyID0gbmV3IFJFR0xSZW5kZXJidWZmZXIoZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkpXG4gICAgcmVuZGVyYnVmZmVyU2V0W3JlbmRlcmJ1ZmZlci5pZF0gPSByZW5kZXJidWZmZXJcbiAgICBzdGF0cy5yZW5kZXJidWZmZXJDb3VudCsrXG5cbiAgICBmdW5jdGlvbiByZWdsUmVuZGVyYnVmZmVyIChhLCBiKSB7XG4gICAgICB2YXIgdyA9IDBcbiAgICAgIHZhciBoID0gMFxuICAgICAgdmFyIGZvcm1hdCA9IEdMX1JHQkE0JDFcblxuICAgICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiBhKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gYVxuICAgICAgICBpZiAoJ3NoYXBlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgdmFyIHNoYXBlID0gb3B0aW9ucy5zaGFwZVxuICAgICAgICAgIGNoZWNrJDEoQXJyYXkuaXNBcnJheShzaGFwZSkgJiYgc2hhcGUubGVuZ3RoID49IDIsXG4gICAgICAgICAgICAnaW52YWxpZCByZW5kZXJidWZmZXIgc2hhcGUnKVxuICAgICAgICAgIHcgPSBzaGFwZVswXSB8IDBcbiAgICAgICAgICBoID0gc2hhcGVbMV0gfCAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCdyYWRpdXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHcgPSBoID0gb3B0aW9ucy5yYWRpdXMgfCAwXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgnd2lkdGgnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHcgPSBvcHRpb25zLndpZHRoIHwgMFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ2hlaWdodCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgaCA9IG9wdGlvbnMuaGVpZ2h0IHwgMFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2Zvcm1hdCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG9wdGlvbnMuZm9ybWF0LCBmb3JtYXRUeXBlcyxcbiAgICAgICAgICAgICdpbnZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXQnKVxuICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdFR5cGVzW29wdGlvbnMuZm9ybWF0XVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJykge1xuICAgICAgICB3ID0gYSB8IDBcbiAgICAgICAgaWYgKHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGggPSBiIHwgMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGggPSB3XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWEpIHtcbiAgICAgICAgdyA9IGggPSAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVjayQxLnJhaXNlKCdpbnZhbGlkIGFyZ3VtZW50cyB0byByZW5kZXJidWZmZXIgY29uc3RydWN0b3InKVxuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBzaGFwZVxuICAgICAgY2hlY2skMShcbiAgICAgICAgdyA+IDAgJiYgaCA+IDAgJiZcbiAgICAgICAgdyA8PSBsaW1pdHMubWF4UmVuZGVyYnVmZmVyU2l6ZSAmJiBoIDw9IGxpbWl0cy5tYXhSZW5kZXJidWZmZXJTaXplLFxuICAgICAgICAnaW52YWxpZCByZW5kZXJidWZmZXIgc2l6ZScpXG5cbiAgICAgIGlmICh3ID09PSByZW5kZXJidWZmZXIud2lkdGggJiZcbiAgICAgICAgICBoID09PSByZW5kZXJidWZmZXIuaGVpZ2h0ICYmXG4gICAgICAgICAgZm9ybWF0ID09PSByZW5kZXJidWZmZXIuZm9ybWF0KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZWdsUmVuZGVyYnVmZmVyLndpZHRoID0gcmVuZGVyYnVmZmVyLndpZHRoID0gd1xuICAgICAgcmVnbFJlbmRlcmJ1ZmZlci5oZWlnaHQgPSByZW5kZXJidWZmZXIuaGVpZ2h0ID0gaFxuICAgICAgcmVuZGVyYnVmZmVyLmZvcm1hdCA9IGZvcm1hdFxuXG4gICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLnJlbmRlcmJ1ZmZlcilcbiAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBmb3JtYXQsIHcsIGgpXG5cbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIGdsLmdldEVycm9yKCkgPT09IDAsXG4gICAgICAgICdpbnZhbGlkIHJlbmRlciBidWZmZXIgZm9ybWF0JylcblxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIHJlbmRlcmJ1ZmZlci5zdGF0cy5zaXplID0gZ2V0UmVuZGVyYnVmZmVyU2l6ZShyZW5kZXJidWZmZXIuZm9ybWF0LCByZW5kZXJidWZmZXIud2lkdGgsIHJlbmRlcmJ1ZmZlci5oZWlnaHQpXG4gICAgICB9XG4gICAgICByZWdsUmVuZGVyYnVmZmVyLmZvcm1hdCA9IGZvcm1hdFR5cGVzSW52ZXJ0W3JlbmRlcmJ1ZmZlci5mb3JtYXRdXG5cbiAgICAgIHJldHVybiByZWdsUmVuZGVyYnVmZmVyXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplICh3XywgaF8pIHtcbiAgICAgIHZhciB3ID0gd18gfCAwXG4gICAgICB2YXIgaCA9IChoXyB8IDApIHx8IHdcblxuICAgICAgaWYgKHcgPT09IHJlbmRlcmJ1ZmZlci53aWR0aCAmJiBoID09PSByZW5kZXJidWZmZXIuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiByZWdsUmVuZGVyYnVmZmVyXG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIHNoYXBlXG4gICAgICBjaGVjayQxKFxuICAgICAgICB3ID4gMCAmJiBoID4gMCAmJlxuICAgICAgICB3IDw9IGxpbWl0cy5tYXhSZW5kZXJidWZmZXJTaXplICYmIGggPD0gbGltaXRzLm1heFJlbmRlcmJ1ZmZlclNpemUsXG4gICAgICAgICdpbnZhbGlkIHJlbmRlcmJ1ZmZlciBzaXplJylcblxuICAgICAgcmVnbFJlbmRlcmJ1ZmZlci53aWR0aCA9IHJlbmRlcmJ1ZmZlci53aWR0aCA9IHdcbiAgICAgIHJlZ2xSZW5kZXJidWZmZXIuaGVpZ2h0ID0gcmVuZGVyYnVmZmVyLmhlaWdodCA9IGhcblxuICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlci5yZW5kZXJidWZmZXIpXG4gICAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLmZvcm1hdCwgdywgaClcblxuICAgICAgY2hlY2skMShcbiAgICAgICAgZ2wuZ2V0RXJyb3IoKSA9PT0gMCxcbiAgICAgICAgJ2ludmFsaWQgcmVuZGVyIGJ1ZmZlciBmb3JtYXQnKVxuXG4gICAgICAvLyBhbHNvLCByZWNvbXB1dGUgc2l6ZS5cbiAgICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgICByZW5kZXJidWZmZXIuc3RhdHMuc2l6ZSA9IGdldFJlbmRlcmJ1ZmZlclNpemUoXG4gICAgICAgICAgcmVuZGVyYnVmZmVyLmZvcm1hdCwgcmVuZGVyYnVmZmVyLndpZHRoLCByZW5kZXJidWZmZXIuaGVpZ2h0KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVnbFJlbmRlcmJ1ZmZlclxuICAgIH1cblxuICAgIHJlZ2xSZW5kZXJidWZmZXIoYSwgYilcblxuICAgIHJlZ2xSZW5kZXJidWZmZXIucmVzaXplID0gcmVzaXplXG4gICAgcmVnbFJlbmRlcmJ1ZmZlci5fcmVnbFR5cGUgPSAncmVuZGVyYnVmZmVyJ1xuICAgIHJlZ2xSZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlciA9IHJlbmRlcmJ1ZmZlclxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgcmVnbFJlbmRlcmJ1ZmZlci5zdGF0cyA9IHJlbmRlcmJ1ZmZlci5zdGF0c1xuICAgIH1cbiAgICByZWdsUmVuZGVyYnVmZmVyLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZW5kZXJidWZmZXIuZGVjUmVmKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVnbFJlbmRlcmJ1ZmZlclxuICB9XG5cbiAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgc3RhdHMuZ2V0VG90YWxSZW5kZXJidWZmZXJTaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRvdGFsID0gMFxuICAgICAgT2JqZWN0LmtleXMocmVuZGVyYnVmZmVyU2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdG90YWwgKz0gcmVuZGVyYnVmZmVyU2V0W2tleV0uc3RhdHMuc2l6ZVxuICAgICAgfSlcbiAgICAgIHJldHVybiB0b3RhbFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3RvcmVSZW5kZXJidWZmZXJzICgpIHtcbiAgICB2YWx1ZXMocmVuZGVyYnVmZmVyU2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChyYikge1xuICAgICAgcmIucmVuZGVyYnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKClcbiAgICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByYi5yZW5kZXJidWZmZXIpXG4gICAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgcmIuZm9ybWF0LCByYi53aWR0aCwgcmIuaGVpZ2h0KVxuICAgIH0pXG4gICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG51bGwpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyZWF0ZTogY3JlYXRlUmVuZGVyYnVmZmVyLFxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YWx1ZXMocmVuZGVyYnVmZmVyU2V0KS5mb3JFYWNoKGRlc3Ryb3kpXG4gICAgfSxcbiAgICByZXN0b3JlOiByZXN0b3JlUmVuZGVyYnVmZmVyc1xuICB9XG59XG5cbi8vIFdlIHN0b3JlIHRoZXNlIGNvbnN0YW50cyBzbyB0aGF0IHRoZSBtaW5pZmllciBjYW4gaW5saW5lIHRoZW1cbnZhciBHTF9GUkFNRUJVRkZFUiQxID0gMHg4RDQwXG52YXIgR0xfUkVOREVSQlVGRkVSJDEgPSAweDhENDFcblxudmFyIEdMX1RFWFRVUkVfMkQkMiA9IDB4MERFMVxudmFyIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQyID0gMHg4NTE1XG5cbnZhciBHTF9DT0xPUl9BVFRBQ0hNRU5UMCQxID0gMHg4Q0UwXG52YXIgR0xfREVQVEhfQVRUQUNITUVOVCA9IDB4OEQwMFxudmFyIEdMX1NURU5DSUxfQVRUQUNITUVOVCA9IDB4OEQyMFxudmFyIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVCA9IDB4ODIxQVxuXG52YXIgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUkMSA9IDB4OENENVxudmFyIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCA9IDB4OENENlxudmFyIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UID0gMHg4Q0Q3XG52YXIgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TID0gMHg4Q0Q5XG52YXIgR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgPSAweDhDRERcblxudmFyIEdMX0hBTEZfRkxPQVRfT0VTJDIgPSAweDhENjFcbnZhciBHTF9VTlNJR05FRF9CWVRFJDYgPSAweDE0MDFcbnZhciBHTF9GTE9BVCQ1ID0gMHgxNDA2XG5cbnZhciBHTF9SR0IkMSA9IDB4MTkwN1xudmFyIEdMX1JHQkEkMiA9IDB4MTkwOFxuXG52YXIgR0xfREVQVEhfQ09NUE9ORU5UJDEgPSAweDE5MDJcblxudmFyIGNvbG9yVGV4dHVyZUZvcm1hdEVudW1zID0gW1xuICBHTF9SR0IkMSxcbiAgR0xfUkdCQSQyXG5dXG5cbi8vIGZvciBldmVyeSB0ZXh0dXJlIGZvcm1hdCwgc3RvcmVcbi8vIHRoZSBudW1iZXIgb2YgY2hhbm5lbHNcbnZhciB0ZXh0dXJlRm9ybWF0Q2hhbm5lbHMgPSBbXVxudGV4dHVyZUZvcm1hdENoYW5uZWxzW0dMX1JHQkEkMl0gPSA0XG50ZXh0dXJlRm9ybWF0Q2hhbm5lbHNbR0xfUkdCJDFdID0gM1xuXG4vLyBmb3IgZXZlcnkgdGV4dHVyZSB0eXBlLCBzdG9yZVxuLy8gdGhlIHNpemUgaW4gYnl0ZXMuXG52YXIgdGV4dHVyZVR5cGVTaXplcyA9IFtdXG50ZXh0dXJlVHlwZVNpemVzW0dMX1VOU0lHTkVEX0JZVEUkNl0gPSAxXG50ZXh0dXJlVHlwZVNpemVzW0dMX0ZMT0FUJDVdID0gNFxudGV4dHVyZVR5cGVTaXplc1tHTF9IQUxGX0ZMT0FUX09FUyQyXSA9IDJcblxudmFyIEdMX1JHQkE0JDIgPSAweDgwNTZcbnZhciBHTF9SR0I1X0ExJDIgPSAweDgwNTdcbnZhciBHTF9SR0I1NjUkMiA9IDB4OEQ2MlxudmFyIEdMX0RFUFRIX0NPTVBPTkVOVDE2JDEgPSAweDgxQTVcbnZhciBHTF9TVEVOQ0lMX0lOREVYOCQxID0gMHg4RDQ4XG52YXIgR0xfREVQVEhfU1RFTkNJTCQyID0gMHg4NEY5XG5cbnZhciBHTF9TUkdCOF9BTFBIQThfRVhUJDEgPSAweDhDNDNcblxudmFyIEdMX1JHQkEzMkZfRVhUJDEgPSAweDg4MTRcblxudmFyIEdMX1JHQkExNkZfRVhUJDEgPSAweDg4MUFcbnZhciBHTF9SR0IxNkZfRVhUJDEgPSAweDg4MUJcblxudmFyIGNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0RW51bXMgPSBbXG4gIEdMX1JHQkE0JDIsXG4gIEdMX1JHQjVfQTEkMixcbiAgR0xfUkdCNTY1JDIsXG4gIEdMX1NSR0I4X0FMUEhBOF9FWFQkMSxcbiAgR0xfUkdCQTE2Rl9FWFQkMSxcbiAgR0xfUkdCMTZGX0VYVCQxLFxuICBHTF9SR0JBMzJGX0VYVCQxXG5dXG5cbnZhciBzdGF0dXNDb2RlID0ge31cbnN0YXR1c0NvZGVbR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUkMV0gPSAnY29tcGxldGUnXG5zdGF0dXNDb2RlW0dMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVF0gPSAnaW5jb21wbGV0ZSBhdHRhY2htZW50J1xuc3RhdHVzQ29kZVtHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlNdID0gJ2luY29tcGxldGUgZGltZW5zaW9ucydcbnN0YXR1c0NvZGVbR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlRdID0gJ2luY29tcGxldGUsIG1pc3NpbmcgYXR0YWNobWVudCdcbnN0YXR1c0NvZGVbR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURURdID0gJ3Vuc3VwcG9ydGVkJ1xuXG5mdW5jdGlvbiB3cmFwRkJPU3RhdGUgKFxuICBnbCxcbiAgZXh0ZW5zaW9ucyxcbiAgbGltaXRzLFxuICB0ZXh0dXJlU3RhdGUsXG4gIHJlbmRlcmJ1ZmZlclN0YXRlLFxuICBzdGF0cykge1xuICB2YXIgZnJhbWVidWZmZXJTdGF0ZSA9IHtcbiAgICBjdXI6IG51bGwsXG4gICAgbmV4dDogbnVsbCxcbiAgICBkaXJ0eTogZmFsc2UsXG4gICAgc2V0RkJPOiBudWxsXG4gIH1cblxuICB2YXIgY29sb3JUZXh0dXJlRm9ybWF0cyA9IFsncmdiYSddXG4gIHZhciBjb2xvclJlbmRlcmJ1ZmZlckZvcm1hdHMgPSBbJ3JnYmE0JywgJ3JnYjU2NScsICdyZ2I1IGExJ11cblxuICBpZiAoZXh0ZW5zaW9ucy5leHRfc3JnYikge1xuICAgIGNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0cy5wdXNoKCdzcmdiYScpXG4gIH1cblxuICBpZiAoZXh0ZW5zaW9ucy5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQpIHtcbiAgICBjb2xvclJlbmRlcmJ1ZmZlckZvcm1hdHMucHVzaCgncmdiYTE2ZicsICdyZ2IxNmYnKVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMud2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0KSB7XG4gICAgY29sb3JSZW5kZXJidWZmZXJGb3JtYXRzLnB1c2goJ3JnYmEzMmYnKVxuICB9XG5cbiAgdmFyIGNvbG9yVHlwZXMgPSBbJ3VpbnQ4J11cbiAgaWYgKGV4dGVuc2lvbnMub2VzX3RleHR1cmVfaGFsZl9mbG9hdCkge1xuICAgIGNvbG9yVHlwZXMucHVzaCgnaGFsZiBmbG9hdCcsICdmbG9hdDE2JylcbiAgfVxuICBpZiAoZXh0ZW5zaW9ucy5vZXNfdGV4dHVyZV9mbG9hdCkge1xuICAgIGNvbG9yVHlwZXMucHVzaCgnZmxvYXQnLCAnZmxvYXQzMicpXG4gIH1cblxuICBmdW5jdGlvbiBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQgKHRhcmdldCwgdGV4dHVyZSwgcmVuZGVyYnVmZmVyKSB7XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXRcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJidWZmZXIgPSByZW5kZXJidWZmZXJcblxuICAgIHZhciB3ID0gMFxuICAgIHZhciBoID0gMFxuICAgIGlmICh0ZXh0dXJlKSB7XG4gICAgICB3ID0gdGV4dHVyZS53aWR0aFxuICAgICAgaCA9IHRleHR1cmUuaGVpZ2h0XG4gICAgfSBlbHNlIGlmIChyZW5kZXJidWZmZXIpIHtcbiAgICAgIHcgPSByZW5kZXJidWZmZXIud2lkdGhcbiAgICAgIGggPSByZW5kZXJidWZmZXIuaGVpZ2h0XG4gICAgfVxuICAgIHRoaXMud2lkdGggPSB3XG4gICAgdGhpcy5oZWlnaHQgPSBoXG4gIH1cblxuICBmdW5jdGlvbiBkZWNSZWYgKGF0dGFjaG1lbnQpIHtcbiAgICBpZiAoYXR0YWNobWVudCkge1xuICAgICAgaWYgKGF0dGFjaG1lbnQudGV4dHVyZSkge1xuICAgICAgICBhdHRhY2htZW50LnRleHR1cmUuX3RleHR1cmUuZGVjUmVmKClcbiAgICAgIH1cbiAgICAgIGlmIChhdHRhY2htZW50LnJlbmRlcmJ1ZmZlcikge1xuICAgICAgICBhdHRhY2htZW50LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmRlY1JlZigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5jUmVmQW5kQ2hlY2tTaGFwZSAoYXR0YWNobWVudCwgd2lkdGgsIGhlaWdodCkge1xuICAgIGlmICghYXR0YWNobWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChhdHRhY2htZW50LnRleHR1cmUpIHtcbiAgICAgIHZhciB0ZXh0dXJlID0gYXR0YWNobWVudC50ZXh0dXJlLl90ZXh0dXJlXG4gICAgICB2YXIgdHcgPSBNYXRoLm1heCgxLCB0ZXh0dXJlLndpZHRoKVxuICAgICAgdmFyIHRoID0gTWF0aC5tYXgoMSwgdGV4dHVyZS5oZWlnaHQpXG4gICAgICBjaGVjayQxKHR3ID09PSB3aWR0aCAmJiB0aCA9PT0gaGVpZ2h0LFxuICAgICAgICAnaW5jb25zaXN0ZW50IHdpZHRoL2hlaWdodCBmb3Igc3VwcGxpZWQgdGV4dHVyZScpXG4gICAgICB0ZXh0dXJlLnJlZkNvdW50ICs9IDFcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJlbmRlcmJ1ZmZlciA9IGF0dGFjaG1lbnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXJcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIHJlbmRlcmJ1ZmZlci53aWR0aCA9PT0gd2lkdGggJiYgcmVuZGVyYnVmZmVyLmhlaWdodCA9PT0gaGVpZ2h0LFxuICAgICAgICAnaW5jb25zaXN0ZW50IHdpZHRoL2hlaWdodCBmb3IgcmVuZGVyYnVmZmVyJylcbiAgICAgIHJlbmRlcmJ1ZmZlci5yZWZDb3VudCArPSAxXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXR0YWNoIChsb2NhdGlvbiwgYXR0YWNobWVudCkge1xuICAgIGlmIChhdHRhY2htZW50KSB7XG4gICAgICBpZiAoYXR0YWNobWVudC50ZXh0dXJlKSB7XG4gICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgICAgIEdMX0ZSQU1FQlVGRkVSJDEsXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgYXR0YWNobWVudC50YXJnZXQsXG4gICAgICAgICAgYXR0YWNobWVudC50ZXh0dXJlLl90ZXh0dXJlLnRleHR1cmUsXG4gICAgICAgICAgMClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKFxuICAgICAgICAgIEdMX0ZSQU1FQlVGRkVSJDEsXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgR0xfUkVOREVSQlVGRkVSJDEsXG4gICAgICAgICAgYXR0YWNobWVudC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5yZW5kZXJidWZmZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VBdHRhY2htZW50IChhdHRhY2htZW50KSB7XG4gICAgdmFyIHRhcmdldCA9IEdMX1RFWFRVUkVfMkQkMlxuICAgIHZhciB0ZXh0dXJlID0gbnVsbFxuICAgIHZhciByZW5kZXJidWZmZXIgPSBudWxsXG5cbiAgICB2YXIgZGF0YSA9IGF0dGFjaG1lbnRcbiAgICBpZiAodHlwZW9mIGF0dGFjaG1lbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICBkYXRhID0gYXR0YWNobWVudC5kYXRhXG4gICAgICBpZiAoJ3RhcmdldCcgaW4gYXR0YWNobWVudCkge1xuICAgICAgICB0YXJnZXQgPSBhdHRhY2htZW50LnRhcmdldCB8IDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVjayQxLnR5cGUoZGF0YSwgJ2Z1bmN0aW9uJywgJ2ludmFsaWQgYXR0YWNobWVudCBkYXRhJylcblxuICAgIHZhciB0eXBlID0gZGF0YS5fcmVnbFR5cGVcbiAgICBpZiAodHlwZSA9PT0gJ3RleHR1cmUyZCcpIHtcbiAgICAgIHRleHR1cmUgPSBkYXRhXG4gICAgICBjaGVjayQxKHRhcmdldCA9PT0gR0xfVEVYVFVSRV8yRCQyKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RleHR1cmVDdWJlJykge1xuICAgICAgdGV4dHVyZSA9IGRhdGFcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIHRhcmdldCA+PSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMiAmJlxuICAgICAgICB0YXJnZXQgPCBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMiArIDYsXG4gICAgICAgICdpbnZhbGlkIGN1YmUgbWFwIHRhcmdldCcpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAncmVuZGVyYnVmZmVyJykge1xuICAgICAgcmVuZGVyYnVmZmVyID0gZGF0YVxuICAgICAgdGFyZ2V0ID0gR0xfUkVOREVSQlVGRkVSJDFcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCByZWdsIG9iamVjdCBmb3IgYXR0YWNobWVudCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQodGFyZ2V0LCB0ZXh0dXJlLCByZW5kZXJidWZmZXIpXG4gIH1cblxuICBmdW5jdGlvbiBhbGxvY0F0dGFjaG1lbnQgKFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBpc1RleHR1cmUsXG4gICAgZm9ybWF0LFxuICAgIHR5cGUpIHtcbiAgICBpZiAoaXNUZXh0dXJlKSB7XG4gICAgICB2YXIgdGV4dHVyZSA9IHRleHR1cmVTdGF0ZS5jcmVhdGUyRCh7XG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIGZvcm1hdDogZm9ybWF0LFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9KVxuICAgICAgdGV4dHVyZS5fdGV4dHVyZS5yZWZDb3VudCA9IDBcbiAgICAgIHJldHVybiBuZXcgRnJhbWVidWZmZXJBdHRhY2htZW50KEdMX1RFWFRVUkVfMkQkMiwgdGV4dHVyZSwgbnVsbClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJiID0gcmVuZGVyYnVmZmVyU3RhdGUuY3JlYXRlKHtcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgZm9ybWF0OiBmb3JtYXRcbiAgICAgIH0pXG4gICAgICByYi5fcmVuZGVyYnVmZmVyLnJlZkNvdW50ID0gMFxuICAgICAgcmV0dXJuIG5ldyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQoR0xfUkVOREVSQlVGRkVSJDEsIG51bGwsIHJiKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVud3JhcEF0dGFjaG1lbnQgKGF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gYXR0YWNobWVudCAmJiAoYXR0YWNobWVudC50ZXh0dXJlIHx8IGF0dGFjaG1lbnQucmVuZGVyYnVmZmVyKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzaXplQXR0YWNobWVudCAoYXR0YWNobWVudCwgdywgaCkge1xuICAgIGlmIChhdHRhY2htZW50KSB7XG4gICAgICBpZiAoYXR0YWNobWVudC50ZXh0dXJlKSB7XG4gICAgICAgIGF0dGFjaG1lbnQudGV4dHVyZS5yZXNpemUodywgaClcbiAgICAgIH0gZWxzZSBpZiAoYXR0YWNobWVudC5yZW5kZXJidWZmZXIpIHtcbiAgICAgICAgYXR0YWNobWVudC5yZW5kZXJidWZmZXIucmVzaXplKHcsIGgpXG4gICAgICB9XG4gICAgICBhdHRhY2htZW50LndpZHRoID0gd1xuICAgICAgYXR0YWNobWVudC5oZWlnaHQgPSBoXG4gICAgfVxuICB9XG5cbiAgdmFyIGZyYW1lYnVmZmVyQ291bnQgPSAwXG4gIHZhciBmcmFtZWJ1ZmZlclNldCA9IHt9XG5cbiAgZnVuY3Rpb24gUkVHTEZyYW1lYnVmZmVyICgpIHtcbiAgICB0aGlzLmlkID0gZnJhbWVidWZmZXJDb3VudCsrXG4gICAgZnJhbWVidWZmZXJTZXRbdGhpcy5pZF0gPSB0aGlzXG5cbiAgICB0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKVxuICAgIHRoaXMud2lkdGggPSAwXG4gICAgdGhpcy5oZWlnaHQgPSAwXG5cbiAgICB0aGlzLmNvbG9yQXR0YWNobWVudHMgPSBbXVxuICAgIHRoaXMuZGVwdGhBdHRhY2htZW50ID0gbnVsbFxuICAgIHRoaXMuc3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsXG4gICAgdGhpcy5kZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gZGVjRkJPUmVmcyAoZnJhbWVidWZmZXIpIHtcbiAgICBmcmFtZWJ1ZmZlci5jb2xvckF0dGFjaG1lbnRzLmZvckVhY2goZGVjUmVmKVxuICAgIGRlY1JlZihmcmFtZWJ1ZmZlci5kZXB0aEF0dGFjaG1lbnQpXG4gICAgZGVjUmVmKGZyYW1lYnVmZmVyLnN0ZW5jaWxBdHRhY2htZW50KVxuICAgIGRlY1JlZihmcmFtZWJ1ZmZlci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSAoZnJhbWVidWZmZXIpIHtcbiAgICB2YXIgaGFuZGxlID0gZnJhbWVidWZmZXIuZnJhbWVidWZmZXJcbiAgICBjaGVjayQxKGhhbmRsZSwgJ211c3Qgbm90IGRvdWJsZSBkZXN0cm95IGZyYW1lYnVmZmVyJylcbiAgICBnbC5kZWxldGVGcmFtZWJ1ZmZlcihoYW5kbGUpXG4gICAgZnJhbWVidWZmZXIuZnJhbWVidWZmZXIgPSBudWxsXG4gICAgc3RhdHMuZnJhbWVidWZmZXJDb3VudC0tXG4gICAgZGVsZXRlIGZyYW1lYnVmZmVyU2V0W2ZyYW1lYnVmZmVyLmlkXVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJhbWVidWZmZXIgKGZyYW1lYnVmZmVyKSB7XG4gICAgdmFyIGlcblxuICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiQxLCBmcmFtZWJ1ZmZlci5mcmFtZWJ1ZmZlcilcbiAgICB2YXIgY29sb3JBdHRhY2htZW50cyA9IGZyYW1lYnVmZmVyLmNvbG9yQXR0YWNobWVudHNcbiAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JBdHRhY2htZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgYXR0YWNoKEdMX0NPTE9SX0FUVEFDSE1FTlQwJDEgKyBpLCBjb2xvckF0dGFjaG1lbnRzW2ldKVxuICAgIH1cbiAgICBmb3IgKGkgPSBjb2xvckF0dGFjaG1lbnRzLmxlbmd0aDsgaSA8IGxpbWl0cy5tYXhDb2xvckF0dGFjaG1lbnRzOyArK2kpIHtcbiAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgICBHTF9GUkFNRUJVRkZFUiQxLFxuICAgICAgICBHTF9DT0xPUl9BVFRBQ0hNRU5UMCQxICsgaSxcbiAgICAgICAgR0xfVEVYVFVSRV8yRCQyLFxuICAgICAgICBudWxsLFxuICAgICAgICAwKVxuICAgIH1cblxuICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgR0xfRlJBTUVCVUZGRVIkMSxcbiAgICAgIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVCxcbiAgICAgIEdMX1RFWFRVUkVfMkQkMixcbiAgICAgIG51bGwsXG4gICAgICAwKVxuICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgR0xfRlJBTUVCVUZGRVIkMSxcbiAgICAgIEdMX0RFUFRIX0FUVEFDSE1FTlQsXG4gICAgICBHTF9URVhUVVJFXzJEJDIsXG4gICAgICBudWxsLFxuICAgICAgMClcbiAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChcbiAgICAgIEdMX0ZSQU1FQlVGRkVSJDEsXG4gICAgICBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsXG4gICAgICBHTF9URVhUVVJFXzJEJDIsXG4gICAgICBudWxsLFxuICAgICAgMClcblxuICAgIGF0dGFjaChHTF9ERVBUSF9BVFRBQ0hNRU5ULCBmcmFtZWJ1ZmZlci5kZXB0aEF0dGFjaG1lbnQpXG4gICAgYXR0YWNoKEdMX1NURU5DSUxfQVRUQUNITUVOVCwgZnJhbWVidWZmZXIuc3RlbmNpbEF0dGFjaG1lbnQpXG4gICAgYXR0YWNoKEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVCwgZnJhbWVidWZmZXIuZGVwdGhTdGVuY2lsQXR0YWNobWVudClcblxuICAgIC8vIENoZWNrIHN0YXR1cyBjb2RlXG4gICAgdmFyIHN0YXR1cyA9IGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIkMSlcbiAgICBpZiAoIWdsLmlzQ29udGV4dExvc3QoKSAmJiBzdGF0dXMgIT09IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFJDEpIHtcbiAgICAgIGNoZWNrJDEucmFpc2UoJ2ZyYW1lYnVmZmVyIGNvbmZpZ3VyYXRpb24gbm90IHN1cHBvcnRlZCwgc3RhdHVzID0gJyArXG4gICAgICAgIHN0YXR1c0NvZGVbc3RhdHVzXSlcbiAgICB9XG5cbiAgICBnbC5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIkMSwgZnJhbWVidWZmZXJTdGF0ZS5uZXh0ID8gZnJhbWVidWZmZXJTdGF0ZS5uZXh0LmZyYW1lYnVmZmVyIDogbnVsbClcbiAgICBmcmFtZWJ1ZmZlclN0YXRlLmN1ciA9IGZyYW1lYnVmZmVyU3RhdGUubmV4dFxuXG4gICAgLy8gRklYTUU6IENsZWFyIGVycm9yIGNvZGUgaGVyZS4gIFRoaXMgaXMgYSB3b3JrIGFyb3VuZCBmb3IgYSBidWcgaW5cbiAgICAvLyBoZWFkbGVzcy1nbFxuICAgIGdsLmdldEVycm9yKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUZCTyAoYTAsIGExKSB7XG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IFJFR0xGcmFtZWJ1ZmZlcigpXG4gICAgc3RhdHMuZnJhbWVidWZmZXJDb3VudCsrXG5cbiAgICBmdW5jdGlvbiByZWdsRnJhbWVidWZmZXIgKGEsIGIpIHtcbiAgICAgIHZhciBpXG5cbiAgICAgIGNoZWNrJDEoZnJhbWVidWZmZXJTdGF0ZS5uZXh0ICE9PSBmcmFtZWJ1ZmZlcixcbiAgICAgICAgJ2NhbiBub3QgdXBkYXRlIGZyYW1lYnVmZmVyIHdoaWNoIGlzIGN1cnJlbnRseSBpbiB1c2UnKVxuXG4gICAgICB2YXIgd2lkdGggPSAwXG4gICAgICB2YXIgaGVpZ2h0ID0gMFxuXG4gICAgICB2YXIgbmVlZHNEZXB0aCA9IHRydWVcbiAgICAgIHZhciBuZWVkc1N0ZW5jaWwgPSB0cnVlXG5cbiAgICAgIHZhciBjb2xvckJ1ZmZlciA9IG51bGxcbiAgICAgIHZhciBjb2xvclRleHR1cmUgPSB0cnVlXG4gICAgICB2YXIgY29sb3JGb3JtYXQgPSAncmdiYSdcbiAgICAgIHZhciBjb2xvclR5cGUgPSAndWludDgnXG4gICAgICB2YXIgY29sb3JDb3VudCA9IDFcblxuICAgICAgdmFyIGRlcHRoQnVmZmVyID0gbnVsbFxuICAgICAgdmFyIHN0ZW5jaWxCdWZmZXIgPSBudWxsXG4gICAgICB2YXIgZGVwdGhTdGVuY2lsQnVmZmVyID0gbnVsbFxuICAgICAgdmFyIGRlcHRoU3RlbmNpbFRleHR1cmUgPSBmYWxzZVxuXG4gICAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHdpZHRoID0gYSB8IDBcbiAgICAgICAgaGVpZ2h0ID0gKGIgfCAwKSB8fCB3aWR0aFxuICAgICAgfSBlbHNlIGlmICghYSkge1xuICAgICAgICB3aWR0aCA9IGhlaWdodCA9IDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrJDEudHlwZShhLCAnb2JqZWN0JywgJ2ludmFsaWQgYXJndW1lbnRzIGZvciBmcmFtZWJ1ZmZlcicpXG4gICAgICAgIHZhciBvcHRpb25zID0gYVxuXG4gICAgICAgIGlmICgnc2hhcGUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICB2YXIgc2hhcGUgPSBvcHRpb25zLnNoYXBlXG4gICAgICAgICAgY2hlY2skMShBcnJheS5pc0FycmF5KHNoYXBlKSAmJiBzaGFwZS5sZW5ndGggPj0gMixcbiAgICAgICAgICAgICdpbnZhbGlkIHNoYXBlIGZvciBmcmFtZWJ1ZmZlcicpXG4gICAgICAgICAgd2lkdGggPSBzaGFwZVswXVxuICAgICAgICAgIGhlaWdodCA9IHNoYXBlWzFdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCdyYWRpdXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gb3B0aW9ucy5yYWRpdXNcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCd3aWR0aCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgd2lkdGggPSBvcHRpb25zLndpZHRoXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgnaGVpZ2h0JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSBvcHRpb25zLmhlaWdodFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnY29sb3InIGluIG9wdGlvbnMgfHxcbiAgICAgICAgICAgICdjb2xvcnMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjb2xvckJ1ZmZlciA9XG4gICAgICAgICAgICBvcHRpb25zLmNvbG9yIHx8XG4gICAgICAgICAgICBvcHRpb25zLmNvbG9yc1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbG9yQnVmZmVyKSkge1xuICAgICAgICAgICAgY2hlY2skMShcbiAgICAgICAgICAgICAgY29sb3JCdWZmZXIubGVuZ3RoID09PSAxIHx8IGV4dGVuc2lvbnMud2ViZ2xfZHJhd19idWZmZXJzLFxuICAgICAgICAgICAgICAnbXVsdGlwbGUgcmVuZGVyIHRhcmdldHMgbm90IHN1cHBvcnRlZCcpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb2xvckJ1ZmZlcikge1xuICAgICAgICAgIGlmICgnY29sb3JDb3VudCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY29sb3JDb3VudCA9IG9wdGlvbnMuY29sb3JDb3VudCB8IDBcbiAgICAgICAgICAgIGNoZWNrJDEoY29sb3JDb3VudCA+IDAsICdpbnZhbGlkIGNvbG9yIGJ1ZmZlciBjb3VudCcpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCdjb2xvclRleHR1cmUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbG9yVGV4dHVyZSA9ICEhb3B0aW9ucy5jb2xvclRleHR1cmVcbiAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0gJ3JnYmE0J1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgnY29sb3JUeXBlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb2xvclR5cGUgPSBvcHRpb25zLmNvbG9yVHlwZVxuICAgICAgICAgICAgaWYgKCFjb2xvclRleHR1cmUpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbG9yVHlwZSA9PT0gJ2hhbGYgZmxvYXQnIHx8IGNvbG9yVHlwZSA9PT0gJ2Zsb2F0MTYnKSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMShleHRlbnNpb25zLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCxcbiAgICAgICAgICAgICAgICAgICd5b3UgbXVzdCBlbmFibGUgRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IHRvIHVzZSAxNi1iaXQgcmVuZGVyIGJ1ZmZlcnMnKVxuICAgICAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0gJ3JnYmExNmYnXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sb3JUeXBlID09PSAnZmxvYXQnIHx8IGNvbG9yVHlwZSA9PT0gJ2Zsb2F0MzInKSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMShleHRlbnNpb25zLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCxcbiAgICAgICAgICAgICAgICAgICd5b3UgbXVzdCBlbmFibGUgV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IGluIG9yZGVyIHRvIHVzZSAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgcmVuZGVyYnVmZmVycycpXG4gICAgICAgICAgICAgICAgY29sb3JGb3JtYXQgPSAncmdiYTMyZidcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hlY2skMShleHRlbnNpb25zLm9lc190ZXh0dXJlX2Zsb2F0IHx8XG4gICAgICAgICAgICAgICAgIShjb2xvclR5cGUgPT09ICdmbG9hdCcgfHwgY29sb3JUeXBlID09PSAnZmxvYXQzMicpLFxuICAgICAgICAgICAgICAneW91IG11c3QgZW5hYmxlIE9FU190ZXh0dXJlX2Zsb2F0IGluIG9yZGVyIHRvIHVzZSBmbG9hdGluZyBwb2ludCBmcmFtZWJ1ZmZlciBvYmplY3RzJylcbiAgICAgICAgICAgICAgY2hlY2skMShleHRlbnNpb25zLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQgfHxcbiAgICAgICAgICAgICAgICAhKGNvbG9yVHlwZSA9PT0gJ2hhbGYgZmxvYXQnIHx8IGNvbG9yVHlwZSA9PT0gJ2Zsb2F0MTYnKSxcbiAgICAgICAgICAgICAgJ3lvdSBtdXN0IGVuYWJsZSBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGluIG9yZGVyIHRvIHVzZSAxNi1iaXQgZmxvYXRpbmcgcG9pbnQgZnJhbWVidWZmZXIgb2JqZWN0cycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGVjayQxLm9uZU9mKGNvbG9yVHlwZSwgY29sb3JUeXBlcywgJ2ludmFsaWQgY29sb3IgdHlwZScpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCdjb2xvckZvcm1hdCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY29sb3JGb3JtYXQgPSBvcHRpb25zLmNvbG9yRm9ybWF0XG4gICAgICAgICAgICBpZiAoY29sb3JUZXh0dXJlRm9ybWF0cy5pbmRleE9mKGNvbG9yRm9ybWF0KSA+PSAwKSB7XG4gICAgICAgICAgICAgIGNvbG9yVGV4dHVyZSA9IHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sb3JSZW5kZXJidWZmZXJGb3JtYXRzLmluZGV4T2YoY29sb3JGb3JtYXQpID49IDApIHtcbiAgICAgICAgICAgICAgY29sb3JUZXh0dXJlID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChjb2xvclRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICBjaGVjayQxLm9uZU9mKFxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb2xvckZvcm1hdCwgY29sb3JUZXh0dXJlRm9ybWF0cyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGNvbG9yIGZvcm1hdCBmb3IgdGV4dHVyZScpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMS5vbmVPZihcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29sb3JGb3JtYXQsIGNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0cyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGNvbG9yIGZvcm1hdCBmb3IgcmVuZGVyYnVmZmVyJylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnZGVwdGhUZXh0dXJlJyBpbiBvcHRpb25zIHx8ICdkZXB0aFN0ZW5jaWxUZXh0dXJlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZSA9ICEhKG9wdGlvbnMuZGVwdGhUZXh0dXJlIHx8XG4gICAgICAgICAgICBvcHRpb25zLmRlcHRoU3RlbmNpbFRleHR1cmUpXG4gICAgICAgICAgY2hlY2skMSghZGVwdGhTdGVuY2lsVGV4dHVyZSB8fCBleHRlbnNpb25zLndlYmdsX2RlcHRoX3RleHR1cmUsXG4gICAgICAgICAgICAnd2ViZ2xfZGVwdGhfdGV4dHVyZSBleHRlbnNpb24gbm90IHN1cHBvcnRlZCcpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ2RlcHRoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlcHRoID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIG5lZWRzRGVwdGggPSBvcHRpb25zLmRlcHRoXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlcHRoQnVmZmVyID0gb3B0aW9ucy5kZXB0aFxuICAgICAgICAgICAgbmVlZHNTdGVuY2lsID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3N0ZW5jaWwnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc3RlbmNpbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBuZWVkc1N0ZW5jaWwgPSBvcHRpb25zLnN0ZW5jaWxcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RlbmNpbEJ1ZmZlciA9IG9wdGlvbnMuc3RlbmNpbFxuICAgICAgICAgICAgbmVlZHNEZXB0aCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdkZXB0aFN0ZW5jaWwnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVwdGhTdGVuY2lsID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIG5lZWRzRGVwdGggPSBuZWVkc1N0ZW5jaWwgPSBvcHRpb25zLmRlcHRoU3RlbmNpbFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZXB0aFN0ZW5jaWxCdWZmZXIgPSBvcHRpb25zLmRlcHRoU3RlbmNpbFxuICAgICAgICAgICAgbmVlZHNEZXB0aCA9IGZhbHNlXG4gICAgICAgICAgICBuZWVkc1N0ZW5jaWwgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSBhdHRhY2htZW50c1xuICAgICAgdmFyIGNvbG9yQXR0YWNobWVudHMgPSBudWxsXG4gICAgICB2YXIgZGVwdGhBdHRhY2htZW50ID0gbnVsbFxuICAgICAgdmFyIHN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbFxuICAgICAgdmFyIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsXG5cbiAgICAgIC8vIFNldCB1cCBjb2xvciBhdHRhY2htZW50c1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JCdWZmZXIpKSB7XG4gICAgICAgIGNvbG9yQXR0YWNobWVudHMgPSBjb2xvckJ1ZmZlci5tYXAocGFyc2VBdHRhY2htZW50KVxuICAgICAgfSBlbHNlIGlmIChjb2xvckJ1ZmZlcikge1xuICAgICAgICBjb2xvckF0dGFjaG1lbnRzID0gW3BhcnNlQXR0YWNobWVudChjb2xvckJ1ZmZlcildXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xvckF0dGFjaG1lbnRzID0gbmV3IEFycmF5KGNvbG9yQ291bnQpXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xvckNvdW50OyArK2kpIHtcbiAgICAgICAgICBjb2xvckF0dGFjaG1lbnRzW2ldID0gYWxsb2NBdHRhY2htZW50KFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICBjb2xvclRleHR1cmUsXG4gICAgICAgICAgICBjb2xvckZvcm1hdCxcbiAgICAgICAgICAgIGNvbG9yVHlwZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaGVjayQxKGV4dGVuc2lvbnMud2ViZ2xfZHJhd19idWZmZXJzIHx8IGNvbG9yQXR0YWNobWVudHMubGVuZ3RoIDw9IDEsXG4gICAgICAgICd5b3UgbXVzdCBlbmFibGUgdGhlIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24gaW4gb3JkZXIgdG8gdXNlIG11bHRpcGxlIGNvbG9yIGJ1ZmZlcnMuJylcbiAgICAgIGNoZWNrJDEoY29sb3JBdHRhY2htZW50cy5sZW5ndGggPD0gbGltaXRzLm1heENvbG9yQXR0YWNobWVudHMsXG4gICAgICAgICd0b28gbWFueSBjb2xvciBhdHRhY2htZW50cywgbm90IHN1cHBvcnRlZCcpXG5cbiAgICAgIHdpZHRoID0gd2lkdGggfHwgY29sb3JBdHRhY2htZW50c1swXS53aWR0aFxuICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IGNvbG9yQXR0YWNobWVudHNbMF0uaGVpZ2h0XG5cbiAgICAgIGlmIChkZXB0aEJ1ZmZlcikge1xuICAgICAgICBkZXB0aEF0dGFjaG1lbnQgPSBwYXJzZUF0dGFjaG1lbnQoZGVwdGhCdWZmZXIpXG4gICAgICB9IGVsc2UgaWYgKG5lZWRzRGVwdGggJiYgIW5lZWRzU3RlbmNpbCkge1xuICAgICAgICBkZXB0aEF0dGFjaG1lbnQgPSBhbGxvY0F0dGFjaG1lbnQoXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmUsXG4gICAgICAgICAgJ2RlcHRoJyxcbiAgICAgICAgICAndWludDMyJylcbiAgICAgIH1cblxuICAgICAgaWYgKHN0ZW5jaWxCdWZmZXIpIHtcbiAgICAgICAgc3RlbmNpbEF0dGFjaG1lbnQgPSBwYXJzZUF0dGFjaG1lbnQoc3RlbmNpbEJ1ZmZlcilcbiAgICAgIH0gZWxzZSBpZiAobmVlZHNTdGVuY2lsICYmICFuZWVkc0RlcHRoKSB7XG4gICAgICAgIHN0ZW5jaWxBdHRhY2htZW50ID0gYWxsb2NBdHRhY2htZW50KFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnc3RlbmNpbCcsXG4gICAgICAgICAgJ3VpbnQ4JylcbiAgICAgIH1cblxuICAgICAgaWYgKGRlcHRoU3RlbmNpbEJ1ZmZlcikge1xuICAgICAgICBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gcGFyc2VBdHRhY2htZW50KGRlcHRoU3RlbmNpbEJ1ZmZlcilcbiAgICAgIH0gZWxzZSBpZiAoIWRlcHRoQnVmZmVyICYmICFzdGVuY2lsQnVmZmVyICYmIG5lZWRzU3RlbmNpbCAmJiBuZWVkc0RlcHRoKSB7XG4gICAgICAgIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBhbGxvY0F0dGFjaG1lbnQoXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmUsXG4gICAgICAgICAgJ2RlcHRoIHN0ZW5jaWwnLFxuICAgICAgICAgICdkZXB0aCBzdGVuY2lsJylcbiAgICAgIH1cblxuICAgICAgY2hlY2skMShcbiAgICAgICAgKCEhZGVwdGhCdWZmZXIpICsgKCEhc3RlbmNpbEJ1ZmZlcikgKyAoISFkZXB0aFN0ZW5jaWxCdWZmZXIpIDw9IDEsXG4gICAgICAgICdpbnZhbGlkIGZyYW1lYnVmZmVyIGNvbmZpZ3VyYXRpb24sIGNhbiBzcGVjaWZ5IGV4YWN0bHkgb25lIGRlcHRoL3N0ZW5jaWwgYXR0YWNobWVudCcpXG5cbiAgICAgIHZhciBjb21tb25Db2xvckF0dGFjaG1lbnRTaXplID0gbnVsbFxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JBdHRhY2htZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpbmNSZWZBbmRDaGVja1NoYXBlKGNvbG9yQXR0YWNobWVudHNbaV0sIHdpZHRoLCBoZWlnaHQpXG4gICAgICAgIGNoZWNrJDEoIWNvbG9yQXR0YWNobWVudHNbaV0gfHxcbiAgICAgICAgICAoY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlICYmXG4gICAgICAgICAgICBjb2xvclRleHR1cmVGb3JtYXRFbnVtcy5pbmRleE9mKGNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZS5fdGV4dHVyZS5mb3JtYXQpID49IDApIHx8XG4gICAgICAgICAgKGNvbG9yQXR0YWNobWVudHNbaV0ucmVuZGVyYnVmZmVyICYmXG4gICAgICAgICAgICBjb2xvclJlbmRlcmJ1ZmZlckZvcm1hdEVudW1zLmluZGV4T2YoY29sb3JBdHRhY2htZW50c1tpXS5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5mb3JtYXQpID49IDApLFxuICAgICAgICAnZnJhbWVidWZmZXIgY29sb3IgYXR0YWNobWVudCAnICsgaSArICcgaXMgaW52YWxpZCcpXG5cbiAgICAgICAgaWYgKGNvbG9yQXR0YWNobWVudHNbaV0gJiYgY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlKSB7XG4gICAgICAgICAgdmFyIGNvbG9yQXR0YWNobWVudFNpemUgPVxuICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0Q2hhbm5lbHNbY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdF0gKlxuICAgICAgICAgICAgICB0ZXh0dXJlVHlwZVNpemVzW2NvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZS5fdGV4dHVyZS50eXBlXVxuXG4gICAgICAgICAgaWYgKGNvbW1vbkNvbG9yQXR0YWNobWVudFNpemUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbW1vbkNvbG9yQXR0YWNobWVudFNpemUgPSBjb2xvckF0dGFjaG1lbnRTaXplXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIGNvbG9yIGF0dGFjaG1lbnRzIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGJpdHBsYW5lc1xuICAgICAgICAgICAgLy8gKHRoYXQgaXMsIHRoZSBzYW1lIG51bWVyIG9mIGJpdHMgcGVyIHBpeGVsKVxuICAgICAgICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgR0xFUzIuMCBzdGFuZGFyZC4gU2VlIHRoZSBiZWdpbm5pbmcgb2YgQ2hhcHRlciA0IGluIHRoYXQgZG9jdW1lbnQuXG4gICAgICAgICAgICBjaGVjayQxKGNvbW1vbkNvbG9yQXR0YWNobWVudFNpemUgPT09IGNvbG9yQXR0YWNobWVudFNpemUsXG4gICAgICAgICAgICAgICdhbGwgY29sb3IgYXR0YWNobWVudHMgbXVjaCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbC4nKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaW5jUmVmQW5kQ2hlY2tTaGFwZShkZXB0aEF0dGFjaG1lbnQsIHdpZHRoLCBoZWlnaHQpXG4gICAgICBjaGVjayQxKCFkZXB0aEF0dGFjaG1lbnQgfHxcbiAgICAgICAgKGRlcHRoQXR0YWNobWVudC50ZXh0dXJlICYmXG4gICAgICAgICAgZGVwdGhBdHRhY2htZW50LnRleHR1cmUuX3RleHR1cmUuZm9ybWF0ID09PSBHTF9ERVBUSF9DT01QT05FTlQkMSkgfHxcbiAgICAgICAgKGRlcHRoQXR0YWNobWVudC5yZW5kZXJidWZmZXIgJiZcbiAgICAgICAgICBkZXB0aEF0dGFjaG1lbnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZm9ybWF0ID09PSBHTF9ERVBUSF9DT01QT05FTlQxNiQxKSxcbiAgICAgICdpbnZhbGlkIGRlcHRoIGF0dGFjaG1lbnQgZm9yIGZyYW1lYnVmZmVyIG9iamVjdCcpXG4gICAgICBpbmNSZWZBbmRDaGVja1NoYXBlKHN0ZW5jaWxBdHRhY2htZW50LCB3aWR0aCwgaGVpZ2h0KVxuICAgICAgY2hlY2skMSghc3RlbmNpbEF0dGFjaG1lbnQgfHxcbiAgICAgICAgKHN0ZW5jaWxBdHRhY2htZW50LnJlbmRlcmJ1ZmZlciAmJlxuICAgICAgICAgIHN0ZW5jaWxBdHRhY2htZW50LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdCA9PT0gR0xfU1RFTkNJTF9JTkRFWDgkMSksXG4gICAgICAnaW52YWxpZCBzdGVuY2lsIGF0dGFjaG1lbnQgZm9yIGZyYW1lYnVmZmVyIG9iamVjdCcpXG4gICAgICBpbmNSZWZBbmRDaGVja1NoYXBlKGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQsIHdpZHRoLCBoZWlnaHQpXG4gICAgICBjaGVjayQxKCFkZXB0aFN0ZW5jaWxBdHRhY2htZW50IHx8XG4gICAgICAgIChkZXB0aFN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUgJiZcbiAgICAgICAgICBkZXB0aFN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUuX3RleHR1cmUuZm9ybWF0ID09PSBHTF9ERVBUSF9TVEVOQ0lMJDIpIHx8XG4gICAgICAgIChkZXB0aFN0ZW5jaWxBdHRhY2htZW50LnJlbmRlcmJ1ZmZlciAmJlxuICAgICAgICAgIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZm9ybWF0ID09PSBHTF9ERVBUSF9TVEVOQ0lMJDIpLFxuICAgICAgJ2ludmFsaWQgZGVwdGgtc3RlbmNpbCBhdHRhY2htZW50IGZvciBmcmFtZWJ1ZmZlciBvYmplY3QnKVxuXG4gICAgICAvLyBkZWNyZW1lbnQgcmVmZXJlbmNlc1xuICAgICAgZGVjRkJPUmVmcyhmcmFtZWJ1ZmZlcilcblxuICAgICAgZnJhbWVidWZmZXIud2lkdGggPSB3aWR0aFxuICAgICAgZnJhbWVidWZmZXIuaGVpZ2h0ID0gaGVpZ2h0XG5cbiAgICAgIGZyYW1lYnVmZmVyLmNvbG9yQXR0YWNobWVudHMgPSBjb2xvckF0dGFjaG1lbnRzXG4gICAgICBmcmFtZWJ1ZmZlci5kZXB0aEF0dGFjaG1lbnQgPSBkZXB0aEF0dGFjaG1lbnRcbiAgICAgIGZyYW1lYnVmZmVyLnN0ZW5jaWxBdHRhY2htZW50ID0gc3RlbmNpbEF0dGFjaG1lbnRcbiAgICAgIGZyYW1lYnVmZmVyLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBkZXB0aFN0ZW5jaWxBdHRhY2htZW50XG5cbiAgICAgIHJlZ2xGcmFtZWJ1ZmZlci5jb2xvciA9IGNvbG9yQXR0YWNobWVudHMubWFwKHVud3JhcEF0dGFjaG1lbnQpXG4gICAgICByZWdsRnJhbWVidWZmZXIuZGVwdGggPSB1bndyYXBBdHRhY2htZW50KGRlcHRoQXR0YWNobWVudClcbiAgICAgIHJlZ2xGcmFtZWJ1ZmZlci5zdGVuY2lsID0gdW53cmFwQXR0YWNobWVudChzdGVuY2lsQXR0YWNobWVudClcbiAgICAgIHJlZ2xGcmFtZWJ1ZmZlci5kZXB0aFN0ZW5jaWwgPSB1bndyYXBBdHRhY2htZW50KGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQpXG5cbiAgICAgIHJlZ2xGcmFtZWJ1ZmZlci53aWR0aCA9IGZyYW1lYnVmZmVyLndpZHRoXG4gICAgICByZWdsRnJhbWVidWZmZXIuaGVpZ2h0ID0gZnJhbWVidWZmZXIuaGVpZ2h0XG5cbiAgICAgIHVwZGF0ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKVxuXG4gICAgICByZXR1cm4gcmVnbEZyYW1lYnVmZmVyXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplICh3XywgaF8pIHtcbiAgICAgIGNoZWNrJDEoZnJhbWVidWZmZXJTdGF0ZS5uZXh0ICE9PSBmcmFtZWJ1ZmZlcixcbiAgICAgICAgJ2NhbiBub3QgcmVzaXplIGEgZnJhbWVidWZmZXIgd2hpY2ggaXMgY3VycmVudGx5IGluIHVzZScpXG5cbiAgICAgIHZhciB3ID0gTWF0aC5tYXgod18gfCAwLCAxKVxuICAgICAgdmFyIGggPSBNYXRoLm1heCgoaF8gfCAwKSB8fCB3LCAxKVxuICAgICAgaWYgKHcgPT09IGZyYW1lYnVmZmVyLndpZHRoICYmIGggPT09IGZyYW1lYnVmZmVyLmhlaWdodCkge1xuICAgICAgICByZXR1cm4gcmVnbEZyYW1lYnVmZmVyXG4gICAgICB9XG5cbiAgICAgIC8vIHJlc2l6ZSBhbGwgYnVmZmVyc1xuICAgICAgdmFyIGNvbG9yQXR0YWNobWVudHMgPSBmcmFtZWJ1ZmZlci5jb2xvckF0dGFjaG1lbnRzXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yQXR0YWNobWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcmVzaXplQXR0YWNobWVudChjb2xvckF0dGFjaG1lbnRzW2ldLCB3LCBoKVxuICAgICAgfVxuICAgICAgcmVzaXplQXR0YWNobWVudChmcmFtZWJ1ZmZlci5kZXB0aEF0dGFjaG1lbnQsIHcsIGgpXG4gICAgICByZXNpemVBdHRhY2htZW50KGZyYW1lYnVmZmVyLnN0ZW5jaWxBdHRhY2htZW50LCB3LCBoKVxuICAgICAgcmVzaXplQXR0YWNobWVudChmcmFtZWJ1ZmZlci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LCB3LCBoKVxuXG4gICAgICBmcmFtZWJ1ZmZlci53aWR0aCA9IHJlZ2xGcmFtZWJ1ZmZlci53aWR0aCA9IHdcbiAgICAgIGZyYW1lYnVmZmVyLmhlaWdodCA9IHJlZ2xGcmFtZWJ1ZmZlci5oZWlnaHQgPSBoXG5cbiAgICAgIHVwZGF0ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKVxuXG4gICAgICByZXR1cm4gcmVnbEZyYW1lYnVmZmVyXG4gICAgfVxuXG4gICAgcmVnbEZyYW1lYnVmZmVyKGEwLCBhMSlcblxuICAgIHJldHVybiBleHRlbmQocmVnbEZyYW1lYnVmZmVyLCB7XG4gICAgICByZXNpemU6IHJlc2l6ZSxcbiAgICAgIF9yZWdsVHlwZTogJ2ZyYW1lYnVmZmVyJyxcbiAgICAgIF9mcmFtZWJ1ZmZlcjogZnJhbWVidWZmZXIsXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc3Ryb3koZnJhbWVidWZmZXIpXG4gICAgICAgIGRlY0ZCT1JlZnMoZnJhbWVidWZmZXIpXG4gICAgICB9LFxuICAgICAgdXNlOiBmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgICAgZnJhbWVidWZmZXJTdGF0ZS5zZXRGQk8oe1xuICAgICAgICAgIGZyYW1lYnVmZmVyOiByZWdsRnJhbWVidWZmZXJcbiAgICAgICAgfSwgYmxvY2spXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUN1YmVGQk8gKG9wdGlvbnMpIHtcbiAgICB2YXIgZmFjZXMgPSBBcnJheSg2KVxuXG4gICAgZnVuY3Rpb24gcmVnbEZyYW1lYnVmZmVyQ3ViZSAoYSkge1xuICAgICAgdmFyIGlcblxuICAgICAgY2hlY2skMShmYWNlcy5pbmRleE9mKGZyYW1lYnVmZmVyU3RhdGUubmV4dCkgPCAwLFxuICAgICAgICAnY2FuIG5vdCB1cGRhdGUgZnJhbWVidWZmZXIgd2hpY2ggaXMgY3VycmVudGx5IGluIHVzZScpXG5cbiAgICAgIHZhciBwYXJhbXMgPSB7XG4gICAgICAgIGNvbG9yOiBudWxsXG4gICAgICB9XG5cbiAgICAgIHZhciByYWRpdXMgPSAwXG5cbiAgICAgIHZhciBjb2xvckJ1ZmZlciA9IG51bGxcbiAgICAgIHZhciBjb2xvckZvcm1hdCA9ICdyZ2JhJ1xuICAgICAgdmFyIGNvbG9yVHlwZSA9ICd1aW50OCdcbiAgICAgIHZhciBjb2xvckNvdW50ID0gMVxuXG4gICAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJhZGl1cyA9IGEgfCAwXG4gICAgICB9IGVsc2UgaWYgKCFhKSB7XG4gICAgICAgIHJhZGl1cyA9IDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrJDEudHlwZShhLCAnb2JqZWN0JywgJ2ludmFsaWQgYXJndW1lbnRzIGZvciBmcmFtZWJ1ZmZlcicpXG4gICAgICAgIHZhciBvcHRpb25zID0gYVxuXG4gICAgICAgIGlmICgnc2hhcGUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICB2YXIgc2hhcGUgPSBvcHRpb25zLnNoYXBlXG4gICAgICAgICAgY2hlY2skMShcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoc2hhcGUpICYmIHNoYXBlLmxlbmd0aCA+PSAyLFxuICAgICAgICAgICAgJ2ludmFsaWQgc2hhcGUgZm9yIGZyYW1lYnVmZmVyJylcbiAgICAgICAgICBjaGVjayQxKFxuICAgICAgICAgICAgc2hhcGVbMF0gPT09IHNoYXBlWzFdLFxuICAgICAgICAgICAgJ2N1YmUgZnJhbWVidWZmZXIgbXVzdCBiZSBzcXVhcmUnKVxuICAgICAgICAgIHJhZGl1cyA9IHNoYXBlWzBdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCdyYWRpdXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJhZGl1cyA9IG9wdGlvbnMucmFkaXVzIHwgMFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ3dpZHRoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICByYWRpdXMgPSBvcHRpb25zLndpZHRoIHwgMFxuICAgICAgICAgICAgaWYgKCdoZWlnaHQnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgY2hlY2skMShvcHRpb25zLmhlaWdodCA9PT0gcmFkaXVzLCAnbXVzdCBiZSBzcXVhcmUnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoJ2hlaWdodCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgcmFkaXVzID0gb3B0aW9ucy5oZWlnaHQgfCAwXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdjb2xvcicgaW4gb3B0aW9ucyB8fFxuICAgICAgICAgICAgJ2NvbG9ycycgaW4gb3B0aW9ucykge1xuICAgICAgICAgIGNvbG9yQnVmZmVyID1cbiAgICAgICAgICAgIG9wdGlvbnMuY29sb3IgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuY29sb3JzXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JCdWZmZXIpKSB7XG4gICAgICAgICAgICBjaGVjayQxKFxuICAgICAgICAgICAgICBjb2xvckJ1ZmZlci5sZW5ndGggPT09IDEgfHwgZXh0ZW5zaW9ucy53ZWJnbF9kcmF3X2J1ZmZlcnMsXG4gICAgICAgICAgICAgICdtdWx0aXBsZSByZW5kZXIgdGFyZ2V0cyBub3Qgc3VwcG9ydGVkJylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbG9yQnVmZmVyKSB7XG4gICAgICAgICAgaWYgKCdjb2xvckNvdW50JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb2xvckNvdW50ID0gb3B0aW9ucy5jb2xvckNvdW50IHwgMFxuICAgICAgICAgICAgY2hlY2skMShjb2xvckNvdW50ID4gMCwgJ2ludmFsaWQgY29sb3IgYnVmZmVyIGNvdW50JylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoJ2NvbG9yVHlwZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY2hlY2skMS5vbmVPZihcbiAgICAgICAgICAgICAgb3B0aW9ucy5jb2xvclR5cGUsIGNvbG9yVHlwZXMsXG4gICAgICAgICAgICAgICdpbnZhbGlkIGNvbG9yIHR5cGUnKVxuICAgICAgICAgICAgY29sb3JUeXBlID0gb3B0aW9ucy5jb2xvclR5cGVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoJ2NvbG9yRm9ybWF0JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb2xvckZvcm1hdCA9IG9wdGlvbnMuY29sb3JGb3JtYXRcbiAgICAgICAgICAgIGNoZWNrJDEub25lT2YoXG4gICAgICAgICAgICAgIG9wdGlvbnMuY29sb3JGb3JtYXQsIGNvbG9yVGV4dHVyZUZvcm1hdHMsXG4gICAgICAgICAgICAgICdpbnZhbGlkIGNvbG9yIGZvcm1hdCBmb3IgdGV4dHVyZScpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdkZXB0aCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgIHBhcmFtcy5kZXB0aCA9IG9wdGlvbnMuZGVwdGhcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnc3RlbmNpbCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgIHBhcmFtcy5zdGVuY2lsID0gb3B0aW9ucy5zdGVuY2lsXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ2RlcHRoU3RlbmNpbCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgIHBhcmFtcy5kZXB0aFN0ZW5jaWwgPSBvcHRpb25zLmRlcHRoU3RlbmNpbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjb2xvckN1YmVzXG4gICAgICBpZiAoY29sb3JCdWZmZXIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JCdWZmZXIpKSB7XG4gICAgICAgICAgY29sb3JDdWJlcyA9IFtdXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9yQnVmZmVyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBjb2xvckN1YmVzW2ldID0gY29sb3JCdWZmZXJbaV1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sb3JDdWJlcyA9IFsgY29sb3JCdWZmZXIgXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xvckN1YmVzID0gQXJyYXkoY29sb3JDb3VudClcbiAgICAgICAgdmFyIGN1YmVNYXBQYXJhbXMgPSB7XG4gICAgICAgICAgcmFkaXVzOiByYWRpdXMsXG4gICAgICAgICAgZm9ybWF0OiBjb2xvckZvcm1hdCxcbiAgICAgICAgICB0eXBlOiBjb2xvclR5cGVcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JDb3VudDsgKytpKSB7XG4gICAgICAgICAgY29sb3JDdWJlc1tpXSA9IHRleHR1cmVTdGF0ZS5jcmVhdGVDdWJlKGN1YmVNYXBQYXJhbXMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgY29sb3IgY3ViZXNcbiAgICAgIHBhcmFtcy5jb2xvciA9IEFycmF5KGNvbG9yQ3ViZXMubGVuZ3RoKVxuICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9yQ3ViZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGN1YmUgPSBjb2xvckN1YmVzW2ldXG4gICAgICAgIGNoZWNrJDEoXG4gICAgICAgICAgdHlwZW9mIGN1YmUgPT09ICdmdW5jdGlvbicgJiYgY3ViZS5fcmVnbFR5cGUgPT09ICd0ZXh0dXJlQ3ViZScsXG4gICAgICAgICAgJ2ludmFsaWQgY3ViZSBtYXAnKVxuICAgICAgICByYWRpdXMgPSByYWRpdXMgfHwgY3ViZS53aWR0aFxuICAgICAgICBjaGVjayQxKFxuICAgICAgICAgIGN1YmUud2lkdGggPT09IHJhZGl1cyAmJiBjdWJlLmhlaWdodCA9PT0gcmFkaXVzLFxuICAgICAgICAgICdpbnZhbGlkIGN1YmUgbWFwIHNoYXBlJylcbiAgICAgICAgcGFyYW1zLmNvbG9yW2ldID0ge1xuICAgICAgICAgIHRhcmdldDogR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDIsXG4gICAgICAgICAgZGF0YTogY29sb3JDdWJlc1tpXVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2xvckN1YmVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgcGFyYW1zLmNvbG9yW2pdLnRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQyICsgaVxuICAgICAgICB9XG4gICAgICAgIC8vIHJldXNlIGRlcHRoLXN0ZW5jaWwgYXR0YWNobWVudHMgYWNyb3NzIGFsbCBjdWJlIG1hcHNcbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgcGFyYW1zLmRlcHRoID0gZmFjZXNbMF0uZGVwdGhcbiAgICAgICAgICBwYXJhbXMuc3RlbmNpbCA9IGZhY2VzWzBdLnN0ZW5jaWxcbiAgICAgICAgICBwYXJhbXMuZGVwdGhTdGVuY2lsID0gZmFjZXNbMF0uZGVwdGhTdGVuY2lsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZhY2VzW2ldKSB7XG4gICAgICAgICAgKGZhY2VzW2ldKShwYXJhbXMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmFjZXNbaV0gPSBjcmVhdGVGQk8ocGFyYW1zKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBleHRlbmQocmVnbEZyYW1lYnVmZmVyQ3ViZSwge1xuICAgICAgICB3aWR0aDogcmFkaXVzLFxuICAgICAgICBoZWlnaHQ6IHJhZGl1cyxcbiAgICAgICAgY29sb3I6IGNvbG9yQ3ViZXNcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplIChyYWRpdXNfKSB7XG4gICAgICB2YXIgaVxuICAgICAgdmFyIHJhZGl1cyA9IHJhZGl1c18gfCAwXG4gICAgICBjaGVjayQxKHJhZGl1cyA+IDAgJiYgcmFkaXVzIDw9IGxpbWl0cy5tYXhDdWJlTWFwU2l6ZSxcbiAgICAgICAgJ2ludmFsaWQgcmFkaXVzIGZvciBjdWJlIGZibycpXG5cbiAgICAgIGlmIChyYWRpdXMgPT09IHJlZ2xGcmFtZWJ1ZmZlckN1YmUud2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2xGcmFtZWJ1ZmZlckN1YmVcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbG9ycyA9IHJlZ2xGcmFtZWJ1ZmZlckN1YmUuY29sb3JcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29sb3JzW2ldLnJlc2l6ZShyYWRpdXMpXG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgZmFjZXNbaV0ucmVzaXplKHJhZGl1cylcbiAgICAgIH1cblxuICAgICAgcmVnbEZyYW1lYnVmZmVyQ3ViZS53aWR0aCA9IHJlZ2xGcmFtZWJ1ZmZlckN1YmUuaGVpZ2h0ID0gcmFkaXVzXG5cbiAgICAgIHJldHVybiByZWdsRnJhbWVidWZmZXJDdWJlXG4gICAgfVxuXG4gICAgcmVnbEZyYW1lYnVmZmVyQ3ViZShvcHRpb25zKVxuXG4gICAgcmV0dXJuIGV4dGVuZChyZWdsRnJhbWVidWZmZXJDdWJlLCB7XG4gICAgICBmYWNlczogZmFjZXMsXG4gICAgICByZXNpemU6IHJlc2l6ZSxcbiAgICAgIF9yZWdsVHlwZTogJ2ZyYW1lYnVmZmVyQ3ViZScsXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZhY2VzLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgICBmLmRlc3Ryb3koKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZXN0b3JlRnJhbWVidWZmZXJzICgpIHtcbiAgICBmcmFtZWJ1ZmZlclN0YXRlLmN1ciA9IG51bGxcbiAgICBmcmFtZWJ1ZmZlclN0YXRlLm5leHQgPSBudWxsXG4gICAgZnJhbWVidWZmZXJTdGF0ZS5kaXJ0eSA9IHRydWVcbiAgICB2YWx1ZXMoZnJhbWVidWZmZXJTZXQpLmZvckVhY2goZnVuY3Rpb24gKGZiKSB7XG4gICAgICBmYi5mcmFtZWJ1ZmZlciA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKClcbiAgICAgIHVwZGF0ZUZyYW1lYnVmZmVyKGZiKVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gZXh0ZW5kKGZyYW1lYnVmZmVyU3RhdGUsIHtcbiAgICBnZXRGcmFtZWJ1ZmZlcjogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdmdW5jdGlvbicgJiYgb2JqZWN0Ll9yZWdsVHlwZSA9PT0gJ2ZyYW1lYnVmZmVyJykge1xuICAgICAgICB2YXIgZmJvID0gb2JqZWN0Ll9mcmFtZWJ1ZmZlclxuICAgICAgICBpZiAoZmJvIGluc3RhbmNlb2YgUkVHTEZyYW1lYnVmZmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGZib1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG4gICAgY3JlYXRlOiBjcmVhdGVGQk8sXG4gICAgY3JlYXRlQ3ViZTogY3JlYXRlQ3ViZUZCTyxcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFsdWVzKGZyYW1lYnVmZmVyU2V0KS5mb3JFYWNoKGRlc3Ryb3kpXG4gICAgfSxcbiAgICByZXN0b3JlOiByZXN0b3JlRnJhbWVidWZmZXJzXG4gIH0pXG59XG5cbnZhciBHTF9GTE9BVCQ2ID0gNTEyNlxudmFyIEdMX0FSUkFZX0JVRkZFUiQxID0gMzQ5NjJcblxuZnVuY3Rpb24gQXR0cmlidXRlUmVjb3JkICgpIHtcbiAgdGhpcy5zdGF0ZSA9IDBcblxuICB0aGlzLnggPSAwLjBcbiAgdGhpcy55ID0gMC4wXG4gIHRoaXMueiA9IDAuMFxuICB0aGlzLncgPSAwLjBcblxuICB0aGlzLmJ1ZmZlciA9IG51bGxcbiAgdGhpcy5zaXplID0gMFxuICB0aGlzLm5vcm1hbGl6ZWQgPSBmYWxzZVxuICB0aGlzLnR5cGUgPSBHTF9GTE9BVCQ2XG4gIHRoaXMub2Zmc2V0ID0gMFxuICB0aGlzLnN0cmlkZSA9IDBcbiAgdGhpcy5kaXZpc29yID0gMFxufVxuXG5mdW5jdGlvbiB3cmFwQXR0cmlidXRlU3RhdGUgKFxuICBnbCxcbiAgZXh0ZW5zaW9ucyxcbiAgbGltaXRzLFxuICBzdGF0cyxcbiAgYnVmZmVyU3RhdGUpIHtcbiAgdmFyIE5VTV9BVFRSSUJVVEVTID0gbGltaXRzLm1heEF0dHJpYnV0ZXNcbiAgdmFyIGF0dHJpYnV0ZUJpbmRpbmdzID0gbmV3IEFycmF5KE5VTV9BVFRSSUJVVEVTKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IE5VTV9BVFRSSUJVVEVTOyArK2kpIHtcbiAgICBhdHRyaWJ1dGVCaW5kaW5nc1tpXSA9IG5ldyBBdHRyaWJ1dGVSZWNvcmQoKVxuICB9XG4gIHZhciB2YW9Db3VudCA9IDBcbiAgdmFyIHZhb1NldCA9IHt9XG5cbiAgdmFyIHN0YXRlID0ge1xuICAgIFJlY29yZDogQXR0cmlidXRlUmVjb3JkLFxuICAgIHNjb3BlOiB7fSxcbiAgICBzdGF0ZTogYXR0cmlidXRlQmluZGluZ3MsXG4gICAgY3VycmVudFZBTzogbnVsbCxcbiAgICB0YXJnZXRWQU86IG51bGwsXG4gICAgcmVzdG9yZTogZXh0VkFPKCkgPyByZXN0b3JlVkFPIDogZnVuY3Rpb24gKCkge30sXG4gICAgY3JlYXRlVkFPOiBjcmVhdGVWQU8sXG4gICAgZ2V0VkFPOiBnZXRWQU8sXG4gICAgZGVzdHJveUJ1ZmZlcjogZGVzdHJveUJ1ZmZlcixcbiAgICBzZXRWQU86IGV4dFZBTygpID8gc2V0VkFPRVhUIDogc2V0VkFPRW11bGF0ZWQsXG4gICAgY2xlYXI6IGV4dFZBTygpID8gZGVzdHJveVZBT0VYVCA6IGZ1bmN0aW9uICgpIHt9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95QnVmZmVyIChidWZmZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUJpbmRpbmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgcmVjb3JkID0gYXR0cmlidXRlQmluZGluZ3NbaV1cbiAgICAgIGlmIChyZWNvcmQuYnVmZmVyID09PSBidWZmZXIpIHtcbiAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpXG4gICAgICAgIHJlY29yZC5idWZmZXIgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXh0VkFPICgpIHtcbiAgICByZXR1cm4gZXh0ZW5zaW9ucy5vZXNfdmVydGV4X2FycmF5X29iamVjdFxuICB9XG5cbiAgZnVuY3Rpb24gZXh0SW5zdGFuY2VkICgpIHtcbiAgICByZXR1cm4gZXh0ZW5zaW9ucy5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzXG4gIH1cblxuICBmdW5jdGlvbiBnZXRWQU8gKHZhbykge1xuICAgIGlmICh0eXBlb2YgdmFvID09PSAnZnVuY3Rpb24nICYmIHZhby5fdmFvKSB7XG4gICAgICByZXR1cm4gdmFvLl92YW9cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFZBT0VYVCAodmFvKSB7XG4gICAgaWYgKHZhbyA9PT0gc3RhdGUuY3VycmVudFZBTykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciBleHQgPSBleHRWQU8oKVxuICAgIGlmICh2YW8pIHtcbiAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvLnZhbylcbiAgICB9IGVsc2Uge1xuICAgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKVxuICAgIH1cbiAgICBzdGF0ZS5jdXJyZW50VkFPID0gdmFvXG4gIH1cblxuICBmdW5jdGlvbiBzZXRWQU9FbXVsYXRlZCAodmFvKSB7XG4gICAgaWYgKHZhbyA9PT0gc3RhdGUuY3VycmVudFZBTykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh2YW8pIHtcbiAgICAgIHZhby5iaW5kQXR0cnMoKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZXh0aSA9IGV4dEluc3RhbmNlZCgpXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUJpbmRpbmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBiaW5kaW5nID0gYXR0cmlidXRlQmluZGluZ3NbaV1cbiAgICAgICAgaWYgKGJpbmRpbmcuYnVmZmVyKSB7XG4gICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSlcbiAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksIGJpbmRpbmcuc2l6ZSwgYmluZGluZy50eXBlLCBiaW5kaW5nLm5vcm1hbGl6ZWQsIGJpbmRpbmcuc3RyaWRlLCBiaW5kaW5nLm9mZmZzZXQpXG4gICAgICAgICAgaWYgKGV4dGkgJiYgYmluZGluZy5kaXZpc29yKSB7XG4gICAgICAgICAgICBleHRpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpLCBiaW5kaW5nLmRpdmlzb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKVxuICAgICAgICAgIGdsLnZlcnRleEF0dHJpYjRmKGksIGJpbmRpbmcueCwgYmluZGluZy55LCBiaW5kaW5nLnosIGJpbmRpbmcudylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzdGF0ZS5jdXJyZW50VkFPID0gdmFvXG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95VkFPRVhUICgpIHtcbiAgICB2YWx1ZXModmFvU2V0KS5mb3JFYWNoKGZ1bmN0aW9uICh2YW8pIHtcbiAgICAgIHZhby5kZXN0cm95KClcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gUkVHTFZBTyAoKSB7XG4gICAgdGhpcy5pZCA9ICsrdmFvQ291bnRcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBbXVxuICAgIHZhciBleHRlbnNpb24gPSBleHRWQU8oKVxuICAgIGlmIChleHRlbnNpb24pIHtcbiAgICAgIHRoaXMudmFvID0gZXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YW8gPSBudWxsXG4gICAgfVxuICAgIHZhb1NldFt0aGlzLmlkXSA9IHRoaXNcbiAgICB0aGlzLmJ1ZmZlcnMgPSBbXVxuICB9XG5cbiAgUkVHTFZBTy5wcm90b3R5cGUuYmluZEF0dHJzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRpID0gZXh0SW5zdGFuY2VkKClcbiAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGF0dHIgPSBhdHRyaWJ1dGVzW2ldXG4gICAgICBpZiAoYXR0ci5idWZmZXIpIHtcbiAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSlcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIkMSwgYXR0ci5idWZmZXIuYnVmZmVyKVxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksIGF0dHIuc2l6ZSwgYXR0ci50eXBlLCBhdHRyLm5vcm1hbGl6ZWQsIGF0dHIuc3RyaWRlLCBhdHRyLm9mZnNldClcbiAgICAgICAgaWYgKGV4dGkgJiYgYXR0ci5kaXZpc29yKSB7XG4gICAgICAgICAgZXh0aS52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaSwgYXR0ci5kaXZpc29yKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSlcbiAgICAgICAgZ2wudmVydGV4QXR0cmliNGYoaSwgYXR0ci54LCBhdHRyLnksIGF0dHIueiwgYXR0ci53KVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBqID0gYXR0cmlidXRlcy5sZW5ndGg7IGogPCBOVU1fQVRUUklCVVRFUzsgKytqKSB7XG4gICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoailcbiAgICB9XG4gIH1cblxuICBSRUdMVkFPLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHQgPSBleHRWQU8oKVxuICAgIGlmIChleHQpIHtcbiAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy52YW8pXG4gICAgICB0aGlzLmJpbmRBdHRycygpXG4gICAgICBzdGF0ZS5jdXJyZW50VkFPID0gdGhpc1xuICAgIH1cbiAgfVxuXG4gIFJFR0xWQU8ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMudmFvKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0VkFPKClcbiAgICAgIGlmICh0aGlzID09PSBzdGF0ZS5jdXJyZW50VkFPKSB7XG4gICAgICAgIHN0YXRlLmN1cnJlbnRWQU8gPSBudWxsXG4gICAgICAgIGV4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbClcbiAgICAgIH1cbiAgICAgIGV4dGVuc2lvbi5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbylcbiAgICAgIHRoaXMudmFvID0gbnVsbFxuICAgIH1cbiAgICBpZiAodmFvU2V0W3RoaXMuaWRdKSB7XG4gICAgICBkZWxldGUgdmFvU2V0W3RoaXMuaWRdXG4gICAgICBzdGF0cy52YW9Db3VudCAtPSAxXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdG9yZVZBTyAoKSB7XG4gICAgdmFyIGV4dCA9IGV4dFZBTygpXG4gICAgaWYgKGV4dCkge1xuICAgICAgdmFsdWVzKHZhb1NldCkuZm9yRWFjaChmdW5jdGlvbiAodmFvKSB7XG4gICAgICAgIHZhby5yZWZyZXNoKClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVkFPIChfYXR0cikge1xuICAgIHZhciB2YW8gPSBuZXcgUkVHTFZBTygpXG4gICAgc3RhdHMudmFvQ291bnQgKz0gMVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlVkFPIChhdHRyaWJ1dGVzKSB7XG4gICAgICBjaGVjayQxKEFycmF5LmlzQXJyYXkoYXR0cmlidXRlcyksICdhcmd1bWVudHMgdG8gdmVydGV4IGFycmF5IGNvbnN0cnVjdG9yIG11c3QgYmUgYW4gYXJyYXknKVxuICAgICAgY2hlY2skMShhdHRyaWJ1dGVzLmxlbmd0aCA8IE5VTV9BVFRSSUJVVEVTLCAndG9vIG1hbnkgYXR0cmlidXRlcycpXG4gICAgICBjaGVjayQxKGF0dHJpYnV0ZXMubGVuZ3RoID4gMCwgJ211c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgYXR0cmlidXRlJylcblxuICAgICAgdmFyIGJ1ZlVwZGF0ZWQgPSB7fVxuICAgICAgdmFyIG5hdHRyaWJ1dGVzID0gdmFvLmF0dHJpYnV0ZXNcbiAgICAgIG5hdHRyaWJ1dGVzLmxlbmd0aCA9IGF0dHJpYnV0ZXMubGVuZ3RoXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHNwZWMgPSBhdHRyaWJ1dGVzW2ldXG4gICAgICAgIHZhciByZWMgPSBuYXR0cmlidXRlc1tpXSA9IG5ldyBBdHRyaWJ1dGVSZWNvcmQoKVxuICAgICAgICB2YXIgZGF0YSA9IHNwZWMuZGF0YSB8fCBzcGVjXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpIHx8IGlzVHlwZWRBcnJheShkYXRhKSB8fCBpc05EQXJyYXlMaWtlKGRhdGEpKSB7XG4gICAgICAgICAgdmFyIGJ1ZlxuICAgICAgICAgIGlmICh2YW8uYnVmZmVyc1tpXSkge1xuICAgICAgICAgICAgYnVmID0gdmFvLmJ1ZmZlcnNbaV1cbiAgICAgICAgICAgIGlmIChpc1R5cGVkQXJyYXkoZGF0YSkgJiYgYnVmLl9idWZmZXIuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgYnVmLnN1YmRhdGEoZGF0YSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJ1Zi5kZXN0cm95KClcbiAgICAgICAgICAgICAgdmFvLmJ1ZmZlcnNbaV0gPSBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdmFvLmJ1ZmZlcnNbaV0pIHtcbiAgICAgICAgICAgIGJ1ZiA9IHZhby5idWZmZXJzW2ldID0gYnVmZmVyU3RhdGUuY3JlYXRlKHNwZWMsIEdMX0FSUkFZX0JVRkZFUiQxLCBmYWxzZSwgdHJ1ZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVjLmJ1ZmZlciA9IGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihidWYpXG4gICAgICAgICAgcmVjLnNpemUgPSByZWMuYnVmZmVyLmRpbWVuc2lvbiB8IDBcbiAgICAgICAgICByZWMubm9ybWFsaXplZCA9IGZhbHNlXG4gICAgICAgICAgcmVjLnR5cGUgPSByZWMuYnVmZmVyLmR0eXBlXG4gICAgICAgICAgcmVjLm9mZnNldCA9IDBcbiAgICAgICAgICByZWMuc3RyaWRlID0gMFxuICAgICAgICAgIHJlYy5kaXZpc29yID0gMFxuICAgICAgICAgIHJlYy5zdGF0ZSA9IDFcbiAgICAgICAgICBidWZVcGRhdGVkW2ldID0gMVxuICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihzcGVjKSkge1xuICAgICAgICAgIHJlYy5idWZmZXIgPSBidWZmZXJTdGF0ZS5nZXRCdWZmZXIoc3BlYylcbiAgICAgICAgICByZWMuc2l6ZSA9IHJlYy5idWZmZXIuZGltZW5zaW9uIHwgMFxuICAgICAgICAgIHJlYy5ub3JtYWxpemVkID0gZmFsc2VcbiAgICAgICAgICByZWMudHlwZSA9IHJlYy5idWZmZXIuZHR5cGVcbiAgICAgICAgICByZWMub2Zmc2V0ID0gMFxuICAgICAgICAgIHJlYy5zdHJpZGUgPSAwXG4gICAgICAgICAgcmVjLmRpdmlzb3IgPSAwXG4gICAgICAgICAgcmVjLnN0YXRlID0gMVxuICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihzcGVjLmJ1ZmZlcikpIHtcbiAgICAgICAgICByZWMuYnVmZmVyID0gYnVmZmVyU3RhdGUuZ2V0QnVmZmVyKHNwZWMuYnVmZmVyKVxuICAgICAgICAgIHJlYy5zaXplID0gKCgrc3BlYy5zaXplKSB8fCByZWMuYnVmZmVyLmRpbWVuc2lvbikgfCAwXG4gICAgICAgICAgcmVjLm5vcm1hbGl6ZWQgPSAhIXNwZWMubm9ybWFsaXplZCB8fCBmYWxzZVxuICAgICAgICAgIGlmICgndHlwZScgaW4gc3BlYykge1xuICAgICAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIoc3BlYy50eXBlLCBnbFR5cGVzLCAnaW52YWxpZCBidWZmZXIgdHlwZScpXG4gICAgICAgICAgICByZWMudHlwZSA9IGdsVHlwZXNbc3BlYy50eXBlXVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWMudHlwZSA9IHJlYy5idWZmZXIuZHR5cGVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVjLm9mZnNldCA9IChzcGVjLm9mZnNldCB8fCAwKSB8IDBcbiAgICAgICAgICByZWMuc3RyaWRlID0gKHNwZWMuc3RyaWRlIHx8IDApIHwgMFxuICAgICAgICAgIHJlYy5kaXZpc29yID0gKHNwZWMuZGl2aXNvciB8fCAwKSB8IDBcbiAgICAgICAgICByZWMuc3RhdGUgPSAxXG5cbiAgICAgICAgICBjaGVjayQxKHJlYy5zaXplID49IDEgJiYgcmVjLnNpemUgPD0gNCwgJ3NpemUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQnKVxuICAgICAgICAgIGNoZWNrJDEocmVjLm9mZnNldCA+PSAwLCAnaW52YWxpZCBvZmZzZXQnKVxuICAgICAgICAgIGNoZWNrJDEocmVjLnN0cmlkZSA+PSAwICYmIHJlYy5zdHJpZGUgPD0gMjU1LCAnc3RyaWRlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUnKVxuICAgICAgICAgIGNoZWNrJDEocmVjLmRpdmlzb3IgPj0gMCwgJ2Rpdmlzb3IgbXVzdCBiZSBwb3NpdGl2ZScpXG4gICAgICAgICAgY2hlY2skMSghcmVjLmRpdmlzb3IgfHwgISFleHRlbnNpb25zLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMsICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIG11c3QgYmUgZW5hYmxlZCB0byB1c2UgZGl2aXNvcicpXG4gICAgICAgIH0gZWxzZSBpZiAoJ3gnIGluIHNwZWMpIHtcbiAgICAgICAgICBjaGVjayQxKGkgPiAwLCAnZmlyc3QgYXR0cmlidXRlIG11c3Qgbm90IGJlIGEgY29uc3RhbnQnKVxuICAgICAgICAgIHJlYy54ID0gK3NwZWMueCB8fCAwXG4gICAgICAgICAgcmVjLnkgPSArc3BlYy55IHx8IDBcbiAgICAgICAgICByZWMueiA9ICtzcGVjLnogfHwgMFxuICAgICAgICAgIHJlYy53ID0gK3NwZWMudyB8fCAwXG4gICAgICAgICAgcmVjLnN0YXRlID0gMlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrJDEoZmFsc2UsICdpbnZhbGlkIGF0dHJpYnV0ZSBzcGVjIGZvciBsb2NhdGlvbiAnICsgaSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyByZXRpcmUgdW51c2VkIGJ1ZmZlcnNcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFvLmJ1ZmZlcnMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgaWYgKCFidWZVcGRhdGVkW2pdICYmIHZhby5idWZmZXJzW2pdKSB7XG4gICAgICAgICAgdmFvLmJ1ZmZlcnNbal0uZGVzdHJveSgpXG4gICAgICAgICAgdmFvLmJ1ZmZlcnNbal0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFvLnJlZnJlc2goKVxuICAgICAgcmV0dXJuIHVwZGF0ZVZBT1xuICAgIH1cblxuICAgIHVwZGF0ZVZBTy5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YW8uYnVmZmVycy5sZW5ndGg7ICsraikge1xuICAgICAgICBpZiAodmFvLmJ1ZmZlcnNbal0pIHtcbiAgICAgICAgICB2YW8uYnVmZmVyc1tqXS5kZXN0cm95KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFvLmJ1ZmZlcnMubGVuZ3RoID0gMFxuICAgICAgdmFvLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHVwZGF0ZVZBTy5fdmFvID0gdmFvXG4gICAgdXBkYXRlVkFPLl9yZWdsVHlwZSA9ICd2YW8nXG5cbiAgICByZXR1cm4gdXBkYXRlVkFPKF9hdHRyKVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlXG59XG5cbnZhciBHTF9GUkFHTUVOVF9TSEFERVIgPSAzNTYzMlxudmFyIEdMX1ZFUlRFWF9TSEFERVIgPSAzNTYzM1xuXG52YXIgR0xfQUNUSVZFX1VOSUZPUk1TID0gMHg4Qjg2XG52YXIgR0xfQUNUSVZFX0FUVFJJQlVURVMgPSAweDhCODlcblxuZnVuY3Rpb24gd3JhcFNoYWRlclN0YXRlIChnbCwgc3RyaW5nU3RvcmUsIHN0YXRzLCBjb25maWcpIHtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIGdsc2wgY29tcGlsYXRpb24gYW5kIGxpbmtpbmdcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBmcmFnU2hhZGVycyA9IHt9XG4gIHZhciB2ZXJ0U2hhZGVycyA9IHt9XG5cbiAgZnVuY3Rpb24gQWN0aXZlSW5mbyAobmFtZSwgaWQsIGxvY2F0aW9uLCBpbmZvKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMuaWQgPSBpZFxuICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvblxuICAgIHRoaXMuaW5mbyA9IGluZm9cbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydEFjdGl2ZUluZm8gKGxpc3QsIGluZm8pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChsaXN0W2ldLmlkID09PSBpbmZvLmlkKSB7XG4gICAgICAgIGxpc3RbaV0ubG9jYXRpb24gPSBpbmZvLmxvY2F0aW9uXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBsaXN0LnB1c2goaW5mbylcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNoYWRlciAodHlwZSwgaWQsIGNvbW1hbmQpIHtcbiAgICB2YXIgY2FjaGUgPSB0eXBlID09PSBHTF9GUkFHTUVOVF9TSEFERVIgPyBmcmFnU2hhZGVycyA6IHZlcnRTaGFkZXJzXG4gICAgdmFyIHNoYWRlciA9IGNhY2hlW2lkXVxuXG4gICAgaWYgKCFzaGFkZXIpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzdHJpbmdTdG9yZS5zdHIoaWQpXG4gICAgICBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSlcbiAgICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNvdXJjZSlcbiAgICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKVxuICAgICAgY2hlY2skMS5zaGFkZXJFcnJvcihnbCwgc2hhZGVyLCBzb3VyY2UsIHR5cGUsIGNvbW1hbmQpXG4gICAgICBjYWNoZVtpZF0gPSBzaGFkZXJcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyXG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gcHJvZ3JhbSBsaW5raW5nXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgcHJvZ3JhbUNhY2hlID0ge31cbiAgdmFyIHByb2dyYW1MaXN0ID0gW11cblxuICB2YXIgUFJPR1JBTV9DT1VOVEVSID0gMFxuXG4gIGZ1bmN0aW9uIFJFR0xQcm9ncmFtIChmcmFnSWQsIHZlcnRJZCkge1xuICAgIHRoaXMuaWQgPSBQUk9HUkFNX0NPVU5URVIrK1xuICAgIHRoaXMuZnJhZ0lkID0gZnJhZ0lkXG4gICAgdGhpcy52ZXJ0SWQgPSB2ZXJ0SWRcbiAgICB0aGlzLnByb2dyYW0gPSBudWxsXG4gICAgdGhpcy51bmlmb3JtcyA9IFtdXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gW11cbiAgICB0aGlzLnJlZkNvdW50ID0gMVxuXG4gICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICB0aGlzLnN0YXRzID0ge1xuICAgICAgICB1bmlmb3Jtc0NvdW50OiAwLFxuICAgICAgICBhdHRyaWJ1dGVzQ291bnQ6IDBcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsaW5rUHJvZ3JhbSAoZGVzYywgY29tbWFuZCwgYXR0cmlidXRlTG9jYXRpb25zKSB7XG4gICAgdmFyIGksIGluZm9cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBjb21waWxlICYgbGlua1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB2YXIgZnJhZ1NoYWRlciA9IGdldFNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIsIGRlc2MuZnJhZ0lkKVxuICAgIHZhciB2ZXJ0U2hhZGVyID0gZ2V0U2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIsIGRlc2MudmVydElkKVxuXG4gICAgdmFyIHByb2dyYW0gPSBkZXNjLnByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKClcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ1NoYWRlcilcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydFNoYWRlcilcbiAgICBpZiAoYXR0cmlidXRlTG9jYXRpb25zKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlTG9jYXRpb25zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBiaW5kaW5nID0gYXR0cmlidXRlTG9jYXRpb25zW2ldXG4gICAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBiaW5kaW5nWzBdLCBiaW5kaW5nWzFdKVxuICAgICAgfVxuICAgIH1cblxuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pXG4gICAgY2hlY2skMS5saW5rRXJyb3IoXG4gICAgICBnbCxcbiAgICAgIHByb2dyYW0sXG4gICAgICBzdHJpbmdTdG9yZS5zdHIoZGVzYy5mcmFnSWQpLFxuICAgICAgc3RyaW5nU3RvcmUuc3RyKGRlc2MudmVydElkKSxcbiAgICAgIGNvbW1hbmQpXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZ3JhYiB1bmlmb3Jtc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB2YXIgbnVtVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNUylcbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIGRlc2Muc3RhdHMudW5pZm9ybXNDb3VudCA9IG51bVVuaWZvcm1zXG4gICAgfVxuICAgIHZhciB1bmlmb3JtcyA9IGRlc2MudW5pZm9ybXNcbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtVW5pZm9ybXM7ICsraSkge1xuICAgICAgaW5mbyA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSlcbiAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNpemUgPiAxKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmZvLnNpemU7ICsraikge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBpbmZvLm5hbWUucmVwbGFjZSgnWzBdJywgJ1snICsgaiArICddJylcbiAgICAgICAgICAgIGluc2VydEFjdGl2ZUluZm8odW5pZm9ybXMsIG5ldyBBY3RpdmVJbmZvKFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBzdHJpbmdTdG9yZS5pZChuYW1lKSxcbiAgICAgICAgICAgICAgZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpLFxuICAgICAgICAgICAgICBpbmZvKSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5zZXJ0QWN0aXZlSW5mbyh1bmlmb3JtcywgbmV3IEFjdGl2ZUluZm8oXG4gICAgICAgICAgICBpbmZvLm5hbWUsXG4gICAgICAgICAgICBzdHJpbmdTdG9yZS5pZChpbmZvLm5hbWUpLFxuICAgICAgICAgICAgZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIGluZm8ubmFtZSksXG4gICAgICAgICAgICBpbmZvKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBncmFiIGF0dHJpYnV0ZXNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdmFyIG51bUF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVTKVxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgZGVzYy5zdGF0cy5hdHRyaWJ1dGVzQ291bnQgPSBudW1BdHRyaWJ1dGVzXG4gICAgfVxuXG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBkZXNjLmF0dHJpYnV0ZXNcbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtQXR0cmlidXRlczsgKytpKSB7XG4gICAgICBpbmZvID0gZ2wuZ2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGkpXG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICBpbnNlcnRBY3RpdmVJbmZvKGF0dHJpYnV0ZXMsIG5ldyBBY3RpdmVJbmZvKFxuICAgICAgICAgIGluZm8ubmFtZSxcbiAgICAgICAgICBzdHJpbmdTdG9yZS5pZChpbmZvLm5hbWUpLFxuICAgICAgICAgIGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZm8ubmFtZSksXG4gICAgICAgICAgaW5mbykpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgc3RhdHMuZ2V0TWF4VW5pZm9ybXNDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBtID0gMFxuICAgICAgcHJvZ3JhbUxpc3QuZm9yRWFjaChmdW5jdGlvbiAoZGVzYykge1xuICAgICAgICBpZiAoZGVzYy5zdGF0cy51bmlmb3Jtc0NvdW50ID4gbSkge1xuICAgICAgICAgIG0gPSBkZXNjLnN0YXRzLnVuaWZvcm1zQ291bnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiBtXG4gICAgfVxuXG4gICAgc3RhdHMuZ2V0TWF4QXR0cmlidXRlc0NvdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG0gPSAwXG4gICAgICBwcm9ncmFtTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChkZXNjKSB7XG4gICAgICAgIGlmIChkZXNjLnN0YXRzLmF0dHJpYnV0ZXNDb3VudCA+IG0pIHtcbiAgICAgICAgICBtID0gZGVzYy5zdGF0cy5hdHRyaWJ1dGVzQ291bnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiBtXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdG9yZVNoYWRlcnMgKCkge1xuICAgIGZyYWdTaGFkZXJzID0ge31cbiAgICB2ZXJ0U2hhZGVycyA9IHt9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9ncmFtTGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGlua1Byb2dyYW0ocHJvZ3JhbUxpc3RbaV0sIG51bGwsIHByb2dyYW1MaXN0W2ldLmF0dHJpYnV0ZXMubWFwKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICAgIHJldHVybiBbaW5mby5sb2NhdGlvbiwgaW5mby5uYW1lXVxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGRlbGV0ZVNoYWRlciA9IGdsLmRlbGV0ZVNoYWRlci5iaW5kKGdsKVxuICAgICAgdmFsdWVzKGZyYWdTaGFkZXJzKS5mb3JFYWNoKGRlbGV0ZVNoYWRlcilcbiAgICAgIGZyYWdTaGFkZXJzID0ge31cbiAgICAgIHZhbHVlcyh2ZXJ0U2hhZGVycykuZm9yRWFjaChkZWxldGVTaGFkZXIpXG4gICAgICB2ZXJ0U2hhZGVycyA9IHt9XG5cbiAgICAgIHByb2dyYW1MaXN0LmZvckVhY2goZnVuY3Rpb24gKGRlc2MpIHtcbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShkZXNjLnByb2dyYW0pXG4gICAgICB9KVxuICAgICAgcHJvZ3JhbUxpc3QubGVuZ3RoID0gMFxuICAgICAgcHJvZ3JhbUNhY2hlID0ge31cblxuICAgICAgc3RhdHMuc2hhZGVyQ291bnQgPSAwXG4gICAgfSxcblxuICAgIHByb2dyYW06IGZ1bmN0aW9uICh2ZXJ0SWQsIGZyYWdJZCwgY29tbWFuZCwgYXR0cmliTG9jYXRpb25zKSB7XG4gICAgICBjaGVjayQxLmNvbW1hbmQodmVydElkID49IDAsICdtaXNzaW5nIHZlcnRleCBzaGFkZXInLCBjb21tYW5kKVxuICAgICAgY2hlY2skMS5jb21tYW5kKGZyYWdJZCA+PSAwLCAnbWlzc2luZyBmcmFnbWVudCBzaGFkZXInLCBjb21tYW5kKVxuXG4gICAgICB2YXIgY2FjaGUgPSBwcm9ncmFtQ2FjaGVbZnJhZ0lkXVxuICAgICAgaWYgKCFjYWNoZSkge1xuICAgICAgICBjYWNoZSA9IHByb2dyYW1DYWNoZVtmcmFnSWRdID0ge31cbiAgICAgIH1cbiAgICAgIHZhciBwcmV2UHJvZ3JhbSA9IGNhY2hlW3ZlcnRJZF1cbiAgICAgIGlmIChwcmV2UHJvZ3JhbSkge1xuICAgICAgICBwcmV2UHJvZ3JhbS5yZWZDb3VudCsrXG4gICAgICAgIGlmICghYXR0cmliTG9jYXRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZQcm9ncmFtXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBwcm9ncmFtID0gbmV3IFJFR0xQcm9ncmFtKGZyYWdJZCwgdmVydElkKVxuICAgICAgc3RhdHMuc2hhZGVyQ291bnQrK1xuICAgICAgbGlua1Byb2dyYW0ocHJvZ3JhbSwgY29tbWFuZCwgYXR0cmliTG9jYXRpb25zKVxuICAgICAgaWYgKCFwcmV2UHJvZ3JhbSkge1xuICAgICAgICBjYWNoZVt2ZXJ0SWRdID0gcHJvZ3JhbVxuICAgICAgfVxuICAgICAgcHJvZ3JhbUxpc3QucHVzaChwcm9ncmFtKVxuICAgICAgcmV0dXJuIGV4dGVuZChwcm9ncmFtLCB7XG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwcm9ncmFtLnJlZkNvdW50LS1cbiAgICAgICAgICBpZiAocHJvZ3JhbS5yZWZDb3VudCA8PSAwKSB7XG4gICAgICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0ucHJvZ3JhbSlcbiAgICAgICAgICAgIHZhciBpZHggPSBwcm9ncmFtTGlzdC5pbmRleE9mKHByb2dyYW0pXG4gICAgICAgICAgICBwcm9ncmFtTGlzdC5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgICAgc3RhdHMuc2hhZGVyQ291bnQtLVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBubyBwcm9ncmFtIGlzIGxpbmtlZCB0byB0aGlzIHZlcnQgYW55bW9yZVxuICAgICAgICAgIGlmIChjYWNoZVtwcm9ncmFtLnZlcnRJZF0ucmVmQ291bnQgPD0gMCkge1xuICAgICAgICAgICAgZ2wuZGVsZXRlU2hhZGVyKHZlcnRTaGFkZXJzW3Byb2dyYW0udmVydElkXSlcbiAgICAgICAgICAgIGRlbGV0ZSB2ZXJ0U2hhZGVyc1twcm9ncmFtLnZlcnRJZF1cbiAgICAgICAgICAgIGRlbGV0ZSBwcm9ncmFtQ2FjaGVbcHJvZ3JhbS5mcmFnSWRdW3Byb2dyYW0udmVydElkXVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBubyBwcm9ncmFtIGlzIGxpbmtlZCB0byB0aGlzIGZyYWcgYW55bW9yZVxuICAgICAgICAgIGlmICghT2JqZWN0LmtleXMocHJvZ3JhbUNhY2hlW3Byb2dyYW0uZnJhZ0lkXSkubGVuZ3RoKSB7XG4gICAgICAgICAgICBnbC5kZWxldGVTaGFkZXIoZnJhZ1NoYWRlcnNbcHJvZ3JhbS5mcmFnSWRdKVxuICAgICAgICAgICAgZGVsZXRlIGZyYWdTaGFkZXJzW3Byb2dyYW0uZnJhZ0lkXVxuICAgICAgICAgICAgZGVsZXRlIHByb2dyYW1DYWNoZVtwcm9ncmFtLmZyYWdJZF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlc3RvcmU6IHJlc3RvcmVTaGFkZXJzLFxuXG4gICAgc2hhZGVyOiBnZXRTaGFkZXIsXG5cbiAgICBmcmFnOiAtMSxcbiAgICB2ZXJ0OiAtMVxuICB9XG59XG5cbnZhciBHTF9SR0JBJDMgPSA2NDA4XG52YXIgR0xfVU5TSUdORURfQllURSQ3ID0gNTEyMVxudmFyIEdMX1BBQ0tfQUxJR05NRU5UID0gMHgwRDA1XG52YXIgR0xfRkxPQVQkNyA9IDB4MTQwNiAvLyA1MTI2XG5cbmZ1bmN0aW9uIHdyYXBSZWFkUGl4ZWxzIChcbiAgZ2wsXG4gIGZyYW1lYnVmZmVyU3RhdGUsXG4gIHJlZ2xQb2xsLFxuICBjb250ZXh0LFxuICBnbEF0dHJpYnV0ZXMsXG4gIGV4dGVuc2lvbnMsXG4gIGxpbWl0cykge1xuICBmdW5jdGlvbiByZWFkUGl4ZWxzSW1wbCAoaW5wdXQpIHtcbiAgICB2YXIgdHlwZVxuICAgIGlmIChmcmFtZWJ1ZmZlclN0YXRlLm5leHQgPT09IG51bGwpIHtcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIGdsQXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsXG4gICAgICAgICd5b3UgbXVzdCBjcmVhdGUgYSB3ZWJnbCBjb250ZXh0IHdpdGggXCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXJcIjp0cnVlIGluIG9yZGVyIHRvIHJlYWQgcGl4ZWxzIGZyb20gdGhlIGRyYXdpbmcgYnVmZmVyJylcbiAgICAgIHR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDdcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2skMShcbiAgICAgICAgZnJhbWVidWZmZXJTdGF0ZS5uZXh0LmNvbG9yQXR0YWNobWVudHNbMF0udGV4dHVyZSAhPT0gbnVsbCxcbiAgICAgICAgJ1lvdSBjYW5ub3QgcmVhZCBmcm9tIGEgcmVuZGVyYnVmZmVyJylcbiAgICAgIHR5cGUgPSBmcmFtZWJ1ZmZlclN0YXRlLm5leHQuY29sb3JBdHRhY2htZW50c1swXS50ZXh0dXJlLl90ZXh0dXJlLnR5cGVcblxuICAgICAgaWYgKGV4dGVuc2lvbnMub2VzX3RleHR1cmVfZmxvYXQpIHtcbiAgICAgICAgY2hlY2skMShcbiAgICAgICAgICB0eXBlID09PSBHTF9VTlNJR05FRF9CWVRFJDcgfHwgdHlwZSA9PT0gR0xfRkxPQVQkNyxcbiAgICAgICAgICAnUmVhZGluZyBmcm9tIGEgZnJhbWVidWZmZXIgaXMgb25seSBhbGxvd2VkIGZvciB0aGUgdHlwZXMgXFwndWludDhcXCcgYW5kIFxcJ2Zsb2F0XFwnJylcblxuICAgICAgICBpZiAodHlwZSA9PT0gR0xfRkxPQVQkNykge1xuICAgICAgICAgIGNoZWNrJDEobGltaXRzLnJlYWRGbG9hdCwgJ1JlYWRpbmcgXFwnZmxvYXRcXCcgdmFsdWVzIGlzIG5vdCBwZXJtaXR0ZWQgaW4geW91ciBicm93c2VyLiBGb3IgYSBmYWxsYmFjaywgcGxlYXNlIHNlZTogaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvZ2xzbC1yZWFkLWZsb2F0JylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMShcbiAgICAgICAgICB0eXBlID09PSBHTF9VTlNJR05FRF9CWVRFJDcsXG4gICAgICAgICAgJ1JlYWRpbmcgZnJvbSBhIGZyYW1lYnVmZmVyIGlzIG9ubHkgYWxsb3dlZCBmb3IgdGhlIHR5cGUgXFwndWludDhcXCcnKVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB4ID0gMFxuICAgIHZhciB5ID0gMFxuICAgIHZhciB3aWR0aCA9IGNvbnRleHQuZnJhbWVidWZmZXJXaWR0aFxuICAgIHZhciBoZWlnaHQgPSBjb250ZXh0LmZyYW1lYnVmZmVySGVpZ2h0XG4gICAgdmFyIGRhdGEgPSBudWxsXG5cbiAgICBpZiAoaXNUeXBlZEFycmF5KGlucHV0KSkge1xuICAgICAgZGF0YSA9IGlucHV0XG4gICAgfSBlbHNlIGlmIChpbnB1dCkge1xuICAgICAgY2hlY2skMS50eXBlKGlucHV0LCAnb2JqZWN0JywgJ2ludmFsaWQgYXJndW1lbnRzIHRvIHJlZ2wucmVhZCgpJylcbiAgICAgIHggPSBpbnB1dC54IHwgMFxuICAgICAgeSA9IGlucHV0LnkgfCAwXG4gICAgICBjaGVjayQxKFxuICAgICAgICB4ID49IDAgJiYgeCA8IGNvbnRleHQuZnJhbWVidWZmZXJXaWR0aCxcbiAgICAgICAgJ2ludmFsaWQgeCBvZmZzZXQgZm9yIHJlZ2wucmVhZCcpXG4gICAgICBjaGVjayQxKFxuICAgICAgICB5ID49IDAgJiYgeSA8IGNvbnRleHQuZnJhbWVidWZmZXJIZWlnaHQsXG4gICAgICAgICdpbnZhbGlkIHkgb2Zmc2V0IGZvciByZWdsLnJlYWQnKVxuICAgICAgd2lkdGggPSAoaW5wdXQud2lkdGggfHwgKGNvbnRleHQuZnJhbWVidWZmZXJXaWR0aCAtIHgpKSB8IDBcbiAgICAgIGhlaWdodCA9IChpbnB1dC5oZWlnaHQgfHwgKGNvbnRleHQuZnJhbWVidWZmZXJIZWlnaHQgLSB5KSkgfCAwXG4gICAgICBkYXRhID0gaW5wdXQuZGF0YSB8fCBudWxsXG4gICAgfVxuXG4gICAgLy8gc2FuaXR5IGNoZWNrIGlucHV0LmRhdGFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKHR5cGUgPT09IEdMX1VOU0lHTkVEX0JZVEUkNykge1xuICAgICAgICBjaGVjayQxKFxuICAgICAgICAgIGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5LFxuICAgICAgICAgICdidWZmZXIgbXVzdCBiZSBcXCdVaW50OEFycmF5XFwnIHdoZW4gcmVhZGluZyBmcm9tIGEgZnJhbWVidWZmZXIgb2YgdHlwZSBcXCd1aW50OFxcJycpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEdMX0ZMT0FUJDcpIHtcbiAgICAgICAgY2hlY2skMShcbiAgICAgICAgICBkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5LFxuICAgICAgICAgICdidWZmZXIgbXVzdCBiZSBcXCdGbG9hdDMyQXJyYXlcXCcgd2hlbiByZWFkaW5nIGZyb20gYSBmcmFtZWJ1ZmZlciBvZiB0eXBlIFxcJ2Zsb2F0XFwnJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVjayQxKFxuICAgICAgd2lkdGggPiAwICYmIHdpZHRoICsgeCA8PSBjb250ZXh0LmZyYW1lYnVmZmVyV2lkdGgsXG4gICAgICAnaW52YWxpZCB3aWR0aCBmb3IgcmVhZCBwaXhlbHMnKVxuICAgIGNoZWNrJDEoXG4gICAgICBoZWlnaHQgPiAwICYmIGhlaWdodCArIHkgPD0gY29udGV4dC5mcmFtZWJ1ZmZlckhlaWdodCxcbiAgICAgICdpbnZhbGlkIGhlaWdodCBmb3IgcmVhZCBwaXhlbHMnKVxuXG4gICAgLy8gVXBkYXRlIFdlYkdMIHN0YXRlXG4gICAgcmVnbFBvbGwoKVxuXG4gICAgLy8gQ29tcHV0ZSBzaXplXG4gICAgdmFyIHNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDRcblxuICAgIC8vIEFsbG9jYXRlIGRhdGFcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIGlmICh0eXBlID09PSBHTF9VTlNJR05FRF9CWVRFJDcpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KHNpemUpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEdMX0ZMT0FUJDcpIHtcbiAgICAgICAgZGF0YSA9IGRhdGEgfHwgbmV3IEZsb2F0MzJBcnJheShzaXplKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFR5cGUgY2hlY2tcbiAgICBjaGVjayQxLmlzVHlwZWRBcnJheShkYXRhLCAnZGF0YSBidWZmZXIgZm9yIHJlZ2wucmVhZCgpIG11c3QgYmUgYSB0eXBlZGFycmF5JylcbiAgICBjaGVjayQxKGRhdGEuYnl0ZUxlbmd0aCA+PSBzaXplLCAnZGF0YSBidWZmZXIgZm9yIHJlZ2wucmVhZCgpIHRvbyBzbWFsbCcpXG5cbiAgICAvLyBSdW4gcmVhZCBwaXhlbHNcbiAgICBnbC5waXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgNClcbiAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEkMyxcbiAgICAgIHR5cGUsXG4gICAgICBkYXRhKVxuXG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRQaXhlbHNGQk8gKG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0XG4gICAgZnJhbWVidWZmZXJTdGF0ZS5zZXRGQk8oe1xuICAgICAgZnJhbWVidWZmZXI6IG9wdGlvbnMuZnJhbWVidWZmZXJcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXN1bHQgPSByZWFkUGl4ZWxzSW1wbChvcHRpb25zKVxuICAgIH0pXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZFBpeGVscyAob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucyB8fCAhKCdmcmFtZWJ1ZmZlcicgaW4gb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiByZWFkUGl4ZWxzSW1wbChvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVhZFBpeGVsc0ZCTyhvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWFkUGl4ZWxzXG59XG5cbmZ1bmN0aW9uIHNsaWNlICh4KSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh4KVxufVxuXG5mdW5jdGlvbiBqb2luICh4KSB7XG4gIHJldHVybiBzbGljZSh4KS5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnZpcm9ubWVudCAoKSB7XG4gIC8vIFVuaXF1ZSB2YXJpYWJsZSBpZCBjb3VudGVyXG4gIHZhciB2YXJDb3VudGVyID0gMFxuXG4gIC8vIExpbmtlZCB2YWx1ZXMgYXJlIHBhc3NlZCBmcm9tIHRoaXMgc2NvcGUgaW50byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmxvY2tcbiAgLy8gQ2FsbGluZyBsaW5rKCkgcGFzc2VzIGEgdmFsdWUgaW50byB0aGUgZ2VuZXJhdGVkIHNjb3BlIGFuZCByZXR1cm5zXG4gIC8vIHRoZSB2YXJpYWJsZSBuYW1lIHdoaWNoIGl0IGlzIGJvdW5kIHRvXG4gIHZhciBsaW5rZWROYW1lcyA9IFtdXG4gIHZhciBsaW5rZWRWYWx1ZXMgPSBbXVxuICBmdW5jdGlvbiBsaW5rICh2YWx1ZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlua2VkVmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAobGlua2VkVmFsdWVzW2ldID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbGlua2VkTmFtZXNbaV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9ICdnJyArICh2YXJDb3VudGVyKyspXG4gICAgbGlua2VkTmFtZXMucHVzaChuYW1lKVxuICAgIGxpbmtlZFZhbHVlcy5wdXNoKHZhbHVlKVxuICAgIHJldHVybiBuYW1lXG4gIH1cblxuICAvLyBjcmVhdGUgYSBjb2RlIGJsb2NrXG4gIGZ1bmN0aW9uIGJsb2NrICgpIHtcbiAgICB2YXIgY29kZSA9IFtdXG4gICAgZnVuY3Rpb24gcHVzaCAoKSB7XG4gICAgICBjb2RlLnB1c2guYXBwbHkoY29kZSwgc2xpY2UoYXJndW1lbnRzKSlcbiAgICB9XG5cbiAgICB2YXIgdmFycyA9IFtdXG4gICAgZnVuY3Rpb24gZGVmICgpIHtcbiAgICAgIHZhciBuYW1lID0gJ3YnICsgKHZhckNvdW50ZXIrKylcbiAgICAgIHZhcnMucHVzaChuYW1lKVxuXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29kZS5wdXNoKG5hbWUsICc9JylcbiAgICAgICAgY29kZS5wdXNoLmFwcGx5KGNvZGUsIHNsaWNlKGFyZ3VtZW50cykpXG4gICAgICAgIGNvZGUucHVzaCgnOycpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuYW1lXG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dGVuZChwdXNoLCB7XG4gICAgICBkZWY6IGRlZixcbiAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBqb2luKFtcbiAgICAgICAgICAodmFycy5sZW5ndGggPiAwID8gJ3ZhciAnICsgdmFycy5qb2luKCcsJykgKyAnOycgOiAnJyksXG4gICAgICAgICAgam9pbihjb2RlKVxuICAgICAgICBdKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzY29wZSAoKSB7XG4gICAgdmFyIGVudHJ5ID0gYmxvY2soKVxuICAgIHZhciBleGl0ID0gYmxvY2soKVxuXG4gICAgdmFyIGVudHJ5VG9TdHJpbmcgPSBlbnRyeS50b1N0cmluZ1xuICAgIHZhciBleGl0VG9TdHJpbmcgPSBleGl0LnRvU3RyaW5nXG5cbiAgICBmdW5jdGlvbiBzYXZlIChvYmplY3QsIHByb3ApIHtcbiAgICAgIGV4aXQob2JqZWN0LCBwcm9wLCAnPScsIGVudHJ5LmRlZihvYmplY3QsIHByb3ApLCAnOycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgICBlbnRyeS5hcHBseShlbnRyeSwgc2xpY2UoYXJndW1lbnRzKSlcbiAgICB9LCB7XG4gICAgICBkZWY6IGVudHJ5LmRlZixcbiAgICAgIGVudHJ5OiBlbnRyeSxcbiAgICAgIGV4aXQ6IGV4aXQsXG4gICAgICBzYXZlOiBzYXZlLFxuICAgICAgc2V0OiBmdW5jdGlvbiAob2JqZWN0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICBzYXZlKG9iamVjdCwgcHJvcClcbiAgICAgICAgZW50cnkob2JqZWN0LCBwcm9wLCAnPScsIHZhbHVlLCAnOycpXG4gICAgICB9LFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGVudHJ5VG9TdHJpbmcoKSArIGV4aXRUb1N0cmluZygpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbmRpdGlvbmFsICgpIHtcbiAgICB2YXIgcHJlZCA9IGpvaW4oYXJndW1lbnRzKVxuICAgIHZhciB0aGVuQmxvY2sgPSBzY29wZSgpXG4gICAgdmFyIGVsc2VCbG9jayA9IHNjb3BlKClcblxuICAgIHZhciB0aGVuVG9TdHJpbmcgPSB0aGVuQmxvY2sudG9TdHJpbmdcbiAgICB2YXIgZWxzZVRvU3RyaW5nID0gZWxzZUJsb2NrLnRvU3RyaW5nXG5cbiAgICByZXR1cm4gZXh0ZW5kKHRoZW5CbG9jaywge1xuICAgICAgdGhlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGVuQmxvY2suYXBwbHkodGhlbkJsb2NrLCBzbGljZShhcmd1bWVudHMpKVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgfSxcbiAgICAgIGVsc2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZWxzZUJsb2NrLmFwcGx5KGVsc2VCbG9jaywgc2xpY2UoYXJndW1lbnRzKSlcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZWxzZUNsYXVzZSA9IGVsc2VUb1N0cmluZygpXG4gICAgICAgIGlmIChlbHNlQ2xhdXNlKSB7XG4gICAgICAgICAgZWxzZUNsYXVzZSA9ICdlbHNleycgKyBlbHNlQ2xhdXNlICsgJ30nXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpvaW4oW1xuICAgICAgICAgICdpZignLCBwcmVkLCAnKXsnLFxuICAgICAgICAgIHRoZW5Ub1N0cmluZygpLFxuICAgICAgICAgICd9JywgZWxzZUNsYXVzZVxuICAgICAgICBdKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvLyBwcm9jZWR1cmUgbGlzdFxuICB2YXIgZ2xvYmFsQmxvY2sgPSBibG9jaygpXG4gIHZhciBwcm9jZWR1cmVzID0ge31cbiAgZnVuY3Rpb24gcHJvYyAobmFtZSwgY291bnQpIHtcbiAgICB2YXIgYXJncyA9IFtdXG4gICAgZnVuY3Rpb24gYXJnICgpIHtcbiAgICAgIHZhciBuYW1lID0gJ2EnICsgYXJncy5sZW5ndGhcbiAgICAgIGFyZ3MucHVzaChuYW1lKVxuICAgICAgcmV0dXJuIG5hbWVcbiAgICB9XG5cbiAgICBjb3VudCA9IGNvdW50IHx8IDBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgIGFyZygpXG4gICAgfVxuXG4gICAgdmFyIGJvZHkgPSBzY29wZSgpXG4gICAgdmFyIGJvZHlUb1N0cmluZyA9IGJvZHkudG9TdHJpbmdcblxuICAgIHZhciByZXN1bHQgPSBwcm9jZWR1cmVzW25hbWVdID0gZXh0ZW5kKGJvZHksIHtcbiAgICAgIGFyZzogYXJnLFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGpvaW4oW1xuICAgICAgICAgICdmdW5jdGlvbignLCBhcmdzLmpvaW4oKSwgJyl7JyxcbiAgICAgICAgICBib2R5VG9TdHJpbmcoKSxcbiAgICAgICAgICAnfSdcbiAgICAgICAgXSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gY29tcGlsZSAoKSB7XG4gICAgdmFyIGNvZGUgPSBbJ1widXNlIHN0cmljdFwiOycsXG4gICAgICBnbG9iYWxCbG9jayxcbiAgICAgICdyZXR1cm4geyddXG4gICAgT2JqZWN0LmtleXMocHJvY2VkdXJlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgY29kZS5wdXNoKCdcIicsIG5hbWUsICdcIjonLCBwcm9jZWR1cmVzW25hbWVdLnRvU3RyaW5nKCksICcsJylcbiAgICB9KVxuICAgIGNvZGUucHVzaCgnfScpXG4gICAgdmFyIHNyYyA9IGpvaW4oY29kZSlcbiAgICAgIC5yZXBsYWNlKC87L2csICc7XFxuJylcbiAgICAgIC5yZXBsYWNlKC99L2csICd9XFxuJylcbiAgICAgIC5yZXBsYWNlKC97L2csICd7XFxuJylcbiAgICB2YXIgcHJvYyA9IEZ1bmN0aW9uLmFwcGx5KG51bGwsIGxpbmtlZE5hbWVzLmNvbmNhdChzcmMpKVxuICAgIHJldHVybiBwcm9jLmFwcGx5KG51bGwsIGxpbmtlZFZhbHVlcylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZ2xvYmFsOiBnbG9iYWxCbG9jayxcbiAgICBsaW5rOiBsaW5rLFxuICAgIGJsb2NrOiBibG9jayxcbiAgICBwcm9jOiBwcm9jLFxuICAgIHNjb3BlOiBzY29wZSxcbiAgICBjb25kOiBjb25kaXRpb25hbCxcbiAgICBjb21waWxlOiBjb21waWxlXG4gIH1cbn1cblxuLy8gXCJjdXRlXCIgbmFtZXMgZm9yIHZlY3RvciBjb21wb25lbnRzXG52YXIgQ1VURV9DT01QT05FTlRTID0gJ3h5encnLnNwbGl0KCcnKVxuXG52YXIgR0xfVU5TSUdORURfQllURSQ4ID0gNTEyMVxuXG52YXIgQVRUUklCX1NUQVRFX1BPSU5URVIgPSAxXG52YXIgQVRUUklCX1NUQVRFX0NPTlNUQU5UID0gMlxuXG52YXIgRFlOX0ZVTkMkMSA9IDBcbnZhciBEWU5fUFJPUCQxID0gMVxudmFyIERZTl9DT05URVhUJDEgPSAyXG52YXIgRFlOX1NUQVRFJDEgPSAzXG52YXIgRFlOX1RIVU5LID0gNFxudmFyIERZTl9DT05TVEFOVCQxID0gNVxudmFyIERZTl9BUlJBWSQxID0gNlxuXG52YXIgU19ESVRIRVIgPSAnZGl0aGVyJ1xudmFyIFNfQkxFTkRfRU5BQkxFID0gJ2JsZW5kLmVuYWJsZSdcbnZhciBTX0JMRU5EX0NPTE9SID0gJ2JsZW5kLmNvbG9yJ1xudmFyIFNfQkxFTkRfRVFVQVRJT04gPSAnYmxlbmQuZXF1YXRpb24nXG52YXIgU19CTEVORF9GVU5DID0gJ2JsZW5kLmZ1bmMnXG52YXIgU19ERVBUSF9FTkFCTEUgPSAnZGVwdGguZW5hYmxlJ1xudmFyIFNfREVQVEhfRlVOQyA9ICdkZXB0aC5mdW5jJ1xudmFyIFNfREVQVEhfUkFOR0UgPSAnZGVwdGgucmFuZ2UnXG52YXIgU19ERVBUSF9NQVNLID0gJ2RlcHRoLm1hc2snXG52YXIgU19DT0xPUl9NQVNLID0gJ2NvbG9yTWFzaydcbnZhciBTX0NVTExfRU5BQkxFID0gJ2N1bGwuZW5hYmxlJ1xudmFyIFNfQ1VMTF9GQUNFID0gJ2N1bGwuZmFjZSdcbnZhciBTX0ZST05UX0ZBQ0UgPSAnZnJvbnRGYWNlJ1xudmFyIFNfTElORV9XSURUSCA9ICdsaW5lV2lkdGgnXG52YXIgU19QT0xZR09OX09GRlNFVF9FTkFCTEUgPSAncG9seWdvbk9mZnNldC5lbmFibGUnXG52YXIgU19QT0xZR09OX09GRlNFVF9PRkZTRVQgPSAncG9seWdvbk9mZnNldC5vZmZzZXQnXG52YXIgU19TQU1QTEVfQUxQSEEgPSAnc2FtcGxlLmFscGhhJ1xudmFyIFNfU0FNUExFX0VOQUJMRSA9ICdzYW1wbGUuZW5hYmxlJ1xudmFyIFNfU0FNUExFX0NPVkVSQUdFID0gJ3NhbXBsZS5jb3ZlcmFnZSdcbnZhciBTX1NURU5DSUxfRU5BQkxFID0gJ3N0ZW5jaWwuZW5hYmxlJ1xudmFyIFNfU1RFTkNJTF9NQVNLID0gJ3N0ZW5jaWwubWFzaydcbnZhciBTX1NURU5DSUxfRlVOQyA9ICdzdGVuY2lsLmZ1bmMnXG52YXIgU19TVEVOQ0lMX09QRlJPTlQgPSAnc3RlbmNpbC5vcEZyb250J1xudmFyIFNfU1RFTkNJTF9PUEJBQ0sgPSAnc3RlbmNpbC5vcEJhY2snXG52YXIgU19TQ0lTU09SX0VOQUJMRSA9ICdzY2lzc29yLmVuYWJsZSdcbnZhciBTX1NDSVNTT1JfQk9YID0gJ3NjaXNzb3IuYm94J1xudmFyIFNfVklFV1BPUlQgPSAndmlld3BvcnQnXG5cbnZhciBTX1BST0ZJTEUgPSAncHJvZmlsZSdcblxudmFyIFNfRlJBTUVCVUZGRVIgPSAnZnJhbWVidWZmZXInXG52YXIgU19WRVJUID0gJ3ZlcnQnXG52YXIgU19GUkFHID0gJ2ZyYWcnXG52YXIgU19FTEVNRU5UUyA9ICdlbGVtZW50cydcbnZhciBTX1BSSU1JVElWRSA9ICdwcmltaXRpdmUnXG52YXIgU19DT1VOVCA9ICdjb3VudCdcbnZhciBTX09GRlNFVCA9ICdvZmZzZXQnXG52YXIgU19JTlNUQU5DRVMgPSAnaW5zdGFuY2VzJ1xudmFyIFNfVkFPID0gJ3ZhbydcblxudmFyIFNVRkZJWF9XSURUSCA9ICdXaWR0aCdcbnZhciBTVUZGSVhfSEVJR0hUID0gJ0hlaWdodCdcblxudmFyIFNfRlJBTUVCVUZGRVJfV0lEVEggPSBTX0ZSQU1FQlVGRkVSICsgU1VGRklYX1dJRFRIXG52YXIgU19GUkFNRUJVRkZFUl9IRUlHSFQgPSBTX0ZSQU1FQlVGRkVSICsgU1VGRklYX0hFSUdIVFxudmFyIFNfVklFV1BPUlRfV0lEVEggPSBTX1ZJRVdQT1JUICsgU1VGRklYX1dJRFRIXG52YXIgU19WSUVXUE9SVF9IRUlHSFQgPSBTX1ZJRVdQT1JUICsgU1VGRklYX0hFSUdIVFxudmFyIFNfRFJBV0lOR0JVRkZFUiA9ICdkcmF3aW5nQnVmZmVyJ1xudmFyIFNfRFJBV0lOR0JVRkZFUl9XSURUSCA9IFNfRFJBV0lOR0JVRkZFUiArIFNVRkZJWF9XSURUSFxudmFyIFNfRFJBV0lOR0JVRkZFUl9IRUlHSFQgPSBTX0RSQVdJTkdCVUZGRVIgKyBTVUZGSVhfSEVJR0hUXG5cbnZhciBORVNURURfT1BUSU9OUyA9IFtcbiAgU19CTEVORF9GVU5DLFxuICBTX0JMRU5EX0VRVUFUSU9OLFxuICBTX1NURU5DSUxfRlVOQyxcbiAgU19TVEVOQ0lMX09QRlJPTlQsXG4gIFNfU1RFTkNJTF9PUEJBQ0ssXG4gIFNfU0FNUExFX0NPVkVSQUdFLFxuICBTX1ZJRVdQT1JULFxuICBTX1NDSVNTT1JfQk9YLFxuICBTX1BPTFlHT05fT0ZGU0VUX09GRlNFVFxuXVxuXG52YXIgR0xfQVJSQVlfQlVGRkVSJDIgPSAzNDk2MlxudmFyIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSJDEgPSAzNDk2M1xuXG52YXIgR0xfRlJBR01FTlRfU0hBREVSJDEgPSAzNTYzMlxudmFyIEdMX1ZFUlRFWF9TSEFERVIkMSA9IDM1NjMzXG5cbnZhciBHTF9URVhUVVJFXzJEJDMgPSAweDBERTFcbnZhciBHTF9URVhUVVJFX0NVQkVfTUFQJDIgPSAweDg1MTNcblxudmFyIEdMX0NVTExfRkFDRSA9IDB4MEI0NFxudmFyIEdMX0JMRU5EID0gMHgwQkUyXG52YXIgR0xfRElUSEVSID0gMHgwQkQwXG52YXIgR0xfU1RFTkNJTF9URVNUID0gMHgwQjkwXG52YXIgR0xfREVQVEhfVEVTVCA9IDB4MEI3MVxudmFyIEdMX1NDSVNTT1JfVEVTVCA9IDB4MEMxMVxudmFyIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwgPSAweDgwMzdcbnZhciBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgPSAweDgwOUVcbnZhciBHTF9TQU1QTEVfQ09WRVJBR0UgPSAweDgwQTBcblxudmFyIEdMX0ZMT0FUJDggPSA1MTI2XG52YXIgR0xfRkxPQVRfVkVDMiA9IDM1NjY0XG52YXIgR0xfRkxPQVRfVkVDMyA9IDM1NjY1XG52YXIgR0xfRkxPQVRfVkVDNCA9IDM1NjY2XG52YXIgR0xfSU5UJDMgPSA1MTI0XG52YXIgR0xfSU5UX1ZFQzIgPSAzNTY2N1xudmFyIEdMX0lOVF9WRUMzID0gMzU2NjhcbnZhciBHTF9JTlRfVkVDNCA9IDM1NjY5XG52YXIgR0xfQk9PTCA9IDM1NjcwXG52YXIgR0xfQk9PTF9WRUMyID0gMzU2NzFcbnZhciBHTF9CT09MX1ZFQzMgPSAzNTY3MlxudmFyIEdMX0JPT0xfVkVDNCA9IDM1NjczXG52YXIgR0xfRkxPQVRfTUFUMiA9IDM1Njc0XG52YXIgR0xfRkxPQVRfTUFUMyA9IDM1Njc1XG52YXIgR0xfRkxPQVRfTUFUNCA9IDM1Njc2XG52YXIgR0xfU0FNUExFUl8yRCA9IDM1Njc4XG52YXIgR0xfU0FNUExFUl9DVUJFID0gMzU2ODBcblxudmFyIEdMX1RSSUFOR0xFUyQxID0gNFxuXG52YXIgR0xfRlJPTlQgPSAxMDI4XG52YXIgR0xfQkFDSyA9IDEwMjlcbnZhciBHTF9DVyA9IDB4MDkwMFxudmFyIEdMX0NDVyA9IDB4MDkwMVxudmFyIEdMX01JTl9FWFQgPSAweDgwMDdcbnZhciBHTF9NQVhfRVhUID0gMHg4MDA4XG52YXIgR0xfQUxXQVlTID0gNTE5XG52YXIgR0xfS0VFUCA9IDc2ODBcbnZhciBHTF9aRVJPID0gMFxudmFyIEdMX09ORSA9IDFcbnZhciBHTF9GVU5DX0FERCA9IDB4ODAwNlxudmFyIEdMX0xFU1MgPSA1MTNcblxudmFyIEdMX0ZSQU1FQlVGRkVSJDIgPSAweDhENDBcbnZhciBHTF9DT0xPUl9BVFRBQ0hNRU5UMCQyID0gMHg4Q0UwXG5cbnZhciBibGVuZEZ1bmNzID0ge1xuICAnMCc6IDAsXG4gICcxJzogMSxcbiAgJ3plcm8nOiAwLFxuICAnb25lJzogMSxcbiAgJ3NyYyBjb2xvcic6IDc2OCxcbiAgJ29uZSBtaW51cyBzcmMgY29sb3InOiA3NjksXG4gICdzcmMgYWxwaGEnOiA3NzAsXG4gICdvbmUgbWludXMgc3JjIGFscGhhJzogNzcxLFxuICAnZHN0IGNvbG9yJzogNzc0LFxuICAnb25lIG1pbnVzIGRzdCBjb2xvcic6IDc3NSxcbiAgJ2RzdCBhbHBoYSc6IDc3MixcbiAgJ29uZSBtaW51cyBkc3QgYWxwaGEnOiA3NzMsXG4gICdjb25zdGFudCBjb2xvcic6IDMyNzY5LFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGNvbG9yJzogMzI3NzAsXG4gICdjb25zdGFudCBhbHBoYSc6IDMyNzcxLFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGFscGhhJzogMzI3NzIsXG4gICdzcmMgYWxwaGEgc2F0dXJhdGUnOiA3NzZcbn1cblxuLy8gVGhlcmUgYXJlIGludmFsaWQgdmFsdWVzIGZvciBzcmNSR0IgYW5kIGRzdFJHQi4gU2VlOlxuLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvMS4wLyM2LjEzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL1dlYkdML2Jsb2IvMGQzMjAxZjVmN2VjM2MwMDYwYmMxZjA0MDc3NDYxNTQxZjE5ODdiOS9jb25mb3JtYW5jZS1zdWl0ZXMvMS4wLjMvY29uZm9ybWFuY2UvbWlzYy93ZWJnbC1zcGVjaWZpYy5odG1sI0w1NlxudmFyIGludmFsaWRCbGVuZENvbWJpbmF0aW9ucyA9IFtcbiAgJ2NvbnN0YW50IGNvbG9yLCBjb25zdGFudCBhbHBoYScsXG4gICdvbmUgbWludXMgY29uc3RhbnQgY29sb3IsIGNvbnN0YW50IGFscGhhJyxcbiAgJ2NvbnN0YW50IGNvbG9yLCBvbmUgbWludXMgY29uc3RhbnQgYWxwaGEnLFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGNvbG9yLCBvbmUgbWludXMgY29uc3RhbnQgYWxwaGEnLFxuICAnY29uc3RhbnQgYWxwaGEsIGNvbnN0YW50IGNvbG9yJyxcbiAgJ2NvbnN0YW50IGFscGhhLCBvbmUgbWludXMgY29uc3RhbnQgY29sb3InLFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGFscGhhLCBjb25zdGFudCBjb2xvcicsXG4gICdvbmUgbWludXMgY29uc3RhbnQgYWxwaGEsIG9uZSBtaW51cyBjb25zdGFudCBjb2xvcidcbl1cblxudmFyIGNvbXBhcmVGdW5jcyA9IHtcbiAgJ25ldmVyJzogNTEyLFxuICAnbGVzcyc6IDUxMyxcbiAgJzwnOiA1MTMsXG4gICdlcXVhbCc6IDUxNCxcbiAgJz0nOiA1MTQsXG4gICc9PSc6IDUxNCxcbiAgJz09PSc6IDUxNCxcbiAgJ2xlcXVhbCc6IDUxNSxcbiAgJzw9JzogNTE1LFxuICAnZ3JlYXRlcic6IDUxNixcbiAgJz4nOiA1MTYsXG4gICdub3RlcXVhbCc6IDUxNyxcbiAgJyE9JzogNTE3LFxuICAnIT09JzogNTE3LFxuICAnZ2VxdWFsJzogNTE4LFxuICAnPj0nOiA1MTgsXG4gICdhbHdheXMnOiA1MTlcbn1cblxudmFyIHN0ZW5jaWxPcHMgPSB7XG4gICcwJzogMCxcbiAgJ3plcm8nOiAwLFxuICAna2VlcCc6IDc2ODAsXG4gICdyZXBsYWNlJzogNzY4MSxcbiAgJ2luY3JlbWVudCc6IDc2ODIsXG4gICdkZWNyZW1lbnQnOiA3NjgzLFxuICAnaW5jcmVtZW50IHdyYXAnOiAzNDA1NSxcbiAgJ2RlY3JlbWVudCB3cmFwJzogMzQwNTYsXG4gICdpbnZlcnQnOiA1Mzg2XG59XG5cbnZhciBzaGFkZXJUeXBlID0ge1xuICAnZnJhZyc6IEdMX0ZSQUdNRU5UX1NIQURFUiQxLFxuICAndmVydCc6IEdMX1ZFUlRFWF9TSEFERVIkMVxufVxuXG52YXIgb3JpZW50YXRpb25UeXBlID0ge1xuICAnY3cnOiBHTF9DVyxcbiAgJ2Njdyc6IEdMX0NDV1xufVxuXG5mdW5jdGlvbiBpc0J1ZmZlckFyZ3MgKHgpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoeCkgfHxcbiAgICBpc1R5cGVkQXJyYXkoeCkgfHxcbiAgICBpc05EQXJyYXlMaWtlKHgpXG59XG5cbi8vIE1ha2Ugc3VyZSB2aWV3cG9ydCBpcyBwcm9jZXNzZWQgZmlyc3RcbmZ1bmN0aW9uIHNvcnRTdGF0ZSAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gU19WSUVXUE9SVCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfSBlbHNlIGlmIChiID09PSBTX1ZJRVdQT1JUKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgICByZXR1cm4gKGEgPCBiKSA/IC0xIDogMVxuICB9KVxufVxuXG5mdW5jdGlvbiBEZWNsYXJhdGlvbiAodGhpc0RlcCwgY29udGV4dERlcCwgcHJvcERlcCwgYXBwZW5kKSB7XG4gIHRoaXMudGhpc0RlcCA9IHRoaXNEZXBcbiAgdGhpcy5jb250ZXh0RGVwID0gY29udGV4dERlcFxuICB0aGlzLnByb3BEZXAgPSBwcm9wRGVwXG4gIHRoaXMuYXBwZW5kID0gYXBwZW5kXG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljIChkZWNsKSB7XG4gIHJldHVybiBkZWNsICYmICEoZGVjbC50aGlzRGVwIHx8IGRlY2wuY29udGV4dERlcCB8fCBkZWNsLnByb3BEZXApXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRpY0RlY2wgKGFwcGVuZCkge1xuICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGFwcGVuZClcbn1cblxuZnVuY3Rpb24gY3JlYXRlRHluYW1pY0RlY2wgKGR5biwgYXBwZW5kKSB7XG4gIHZhciB0eXBlID0gZHluLnR5cGVcbiAgaWYgKHR5cGUgPT09IERZTl9GVU5DJDEpIHtcbiAgICB2YXIgbnVtQXJncyA9IGR5bi5kYXRhLmxlbmd0aFxuICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICB0cnVlLFxuICAgICAgbnVtQXJncyA+PSAxLFxuICAgICAgbnVtQXJncyA+PSAyLFxuICAgICAgYXBwZW5kKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09IERZTl9USFVOSykge1xuICAgIHZhciBkYXRhID0gZHluLmRhdGFcbiAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgZGF0YS50aGlzRGVwLFxuICAgICAgZGF0YS5jb250ZXh0RGVwLFxuICAgICAgZGF0YS5wcm9wRGVwLFxuICAgICAgYXBwZW5kKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09IERZTl9DT05TVEFOVCQxKSB7XG4gICAgcmV0dXJuIG5ldyBEZWNsYXJhdGlvbihcbiAgICAgIGZhbHNlLFxuICAgICAgZmFsc2UsXG4gICAgICBmYWxzZSxcbiAgICAgIGFwcGVuZClcbiAgfSBlbHNlIGlmICh0eXBlID09PSBEWU5fQVJSQVkkMSkge1xuICAgIHZhciB0aGlzRGVwID0gZmFsc2VcbiAgICB2YXIgY29udGV4dERlcCA9IGZhbHNlXG4gICAgdmFyIHByb3BEZXAgPSBmYWxzZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZHluLmRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBzdWJEeW4gPSBkeW4uZGF0YVtpXVxuICAgICAgaWYgKHN1YkR5bi50eXBlID09PSBEWU5fUFJPUCQxKSB7XG4gICAgICAgIHByb3BEZXAgPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKHN1YkR5bi50eXBlID09PSBEWU5fQ09OVEVYVCQxKSB7XG4gICAgICAgIGNvbnRleHREZXAgPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKHN1YkR5bi50eXBlID09PSBEWU5fU1RBVEUkMSkge1xuICAgICAgICB0aGlzRGVwID0gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChzdWJEeW4udHlwZSA9PT0gRFlOX0ZVTkMkMSkge1xuICAgICAgICB0aGlzRGVwID0gdHJ1ZVxuICAgICAgICB2YXIgc3ViQXJncyA9IHN1YkR5bi5kYXRhXG4gICAgICAgIGlmIChzdWJBcmdzID49IDEpIHtcbiAgICAgICAgICBjb250ZXh0RGVwID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdWJBcmdzID49IDIpIHtcbiAgICAgICAgICBwcm9wRGVwID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN1YkR5bi50eXBlID09PSBEWU5fVEhVTkspIHtcbiAgICAgICAgdGhpc0RlcCA9IHRoaXNEZXAgfHwgc3ViRHluLmRhdGEudGhpc0RlcFxuICAgICAgICBjb250ZXh0RGVwID0gY29udGV4dERlcCB8fCBzdWJEeW4uZGF0YS5jb250ZXh0RGVwXG4gICAgICAgIHByb3BEZXAgPSBwcm9wRGVwIHx8IHN1YkR5bi5kYXRhLnByb3BEZXBcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEZWNsYXJhdGlvbihcbiAgICAgIHRoaXNEZXAsXG4gICAgICBjb250ZXh0RGVwLFxuICAgICAgcHJvcERlcCxcbiAgICAgIGFwcGVuZClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgdHlwZSA9PT0gRFlOX1NUQVRFJDEsXG4gICAgICB0eXBlID09PSBEWU5fQ09OVEVYVCQxLFxuICAgICAgdHlwZSA9PT0gRFlOX1BST1AkMSxcbiAgICAgIGFwcGVuZClcbiAgfVxufVxuXG52YXIgU0NPUEVfREVDTCA9IG5ldyBEZWNsYXJhdGlvbihmYWxzZSwgZmFsc2UsIGZhbHNlLCBmdW5jdGlvbiAoKSB7fSlcblxuZnVuY3Rpb24gcmVnbENvcmUgKFxuICBnbCxcbiAgc3RyaW5nU3RvcmUsXG4gIGV4dGVuc2lvbnMsXG4gIGxpbWl0cyxcbiAgYnVmZmVyU3RhdGUsXG4gIGVsZW1lbnRTdGF0ZSxcbiAgdGV4dHVyZVN0YXRlLFxuICBmcmFtZWJ1ZmZlclN0YXRlLFxuICB1bmlmb3JtU3RhdGUsXG4gIGF0dHJpYnV0ZVN0YXRlLFxuICBzaGFkZXJTdGF0ZSxcbiAgZHJhd1N0YXRlLFxuICBjb250ZXh0U3RhdGUsXG4gIHRpbWVyLFxuICBjb25maWcpIHtcbiAgdmFyIEF0dHJpYnV0ZVJlY29yZCA9IGF0dHJpYnV0ZVN0YXRlLlJlY29yZFxuXG4gIHZhciBibGVuZEVxdWF0aW9ucyA9IHtcbiAgICAnYWRkJzogMzI3NzQsXG4gICAgJ3N1YnRyYWN0JzogMzI3NzgsXG4gICAgJ3JldmVyc2Ugc3VidHJhY3QnOiAzMjc3OVxuICB9XG4gIGlmIChleHRlbnNpb25zLmV4dF9ibGVuZF9taW5tYXgpIHtcbiAgICBibGVuZEVxdWF0aW9ucy5taW4gPSBHTF9NSU5fRVhUXG4gICAgYmxlbmRFcXVhdGlvbnMubWF4ID0gR0xfTUFYX0VYVFxuICB9XG5cbiAgdmFyIGV4dEluc3RhbmNpbmcgPSBleHRlbnNpb25zLmFuZ2xlX2luc3RhbmNlZF9hcnJheXNcbiAgdmFyIGV4dERyYXdCdWZmZXJzID0gZXh0ZW5zaW9ucy53ZWJnbF9kcmF3X2J1ZmZlcnNcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFdFQkdMIFNUQVRFXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGN1cnJlbnRTdGF0ZSA9IHtcbiAgICBkaXJ0eTogdHJ1ZSxcbiAgICBwcm9maWxlOiBjb25maWcucHJvZmlsZVxuICB9XG4gIHZhciBuZXh0U3RhdGUgPSB7fVxuICB2YXIgR0xfU1RBVEVfTkFNRVMgPSBbXVxuICB2YXIgR0xfRkxBR1MgPSB7fVxuICB2YXIgR0xfVkFSSUFCTEVTID0ge31cblxuICBmdW5jdGlvbiBwcm9wTmFtZSAobmFtZSkge1xuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoJy4nLCAnXycpXG4gIH1cblxuICBmdW5jdGlvbiBzdGF0ZUZsYWcgKHNuYW1lLCBjYXAsIGluaXQpIHtcbiAgICB2YXIgbmFtZSA9IHByb3BOYW1lKHNuYW1lKVxuICAgIEdMX1NUQVRFX05BTUVTLnB1c2goc25hbWUpXG4gICAgbmV4dFN0YXRlW25hbWVdID0gY3VycmVudFN0YXRlW25hbWVdID0gISFpbml0XG4gICAgR0xfRkxBR1NbbmFtZV0gPSBjYXBcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRlVmFyaWFibGUgKHNuYW1lLCBmdW5jLCBpbml0KSB7XG4gICAgdmFyIG5hbWUgPSBwcm9wTmFtZShzbmFtZSlcbiAgICBHTF9TVEFURV9OQU1FUy5wdXNoKHNuYW1lKVxuICAgIGlmIChBcnJheS5pc0FycmF5KGluaXQpKSB7XG4gICAgICBjdXJyZW50U3RhdGVbbmFtZV0gPSBpbml0LnNsaWNlKClcbiAgICAgIG5leHRTdGF0ZVtuYW1lXSA9IGluaXQuc2xpY2UoKVxuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50U3RhdGVbbmFtZV0gPSBuZXh0U3RhdGVbbmFtZV0gPSBpbml0XG4gICAgfVxuICAgIEdMX1ZBUklBQkxFU1tuYW1lXSA9IGZ1bmNcbiAgfVxuXG4gIC8vIERpdGhlcmluZ1xuICBzdGF0ZUZsYWcoU19ESVRIRVIsIEdMX0RJVEhFUilcblxuICAvLyBCbGVuZGluZ1xuICBzdGF0ZUZsYWcoU19CTEVORF9FTkFCTEUsIEdMX0JMRU5EKVxuICBzdGF0ZVZhcmlhYmxlKFNfQkxFTkRfQ09MT1IsICdibGVuZENvbG9yJywgWzAsIDAsIDAsIDBdKVxuICBzdGF0ZVZhcmlhYmxlKFNfQkxFTkRfRVFVQVRJT04sICdibGVuZEVxdWF0aW9uU2VwYXJhdGUnLFxuICAgIFtHTF9GVU5DX0FERCwgR0xfRlVOQ19BRERdKVxuICBzdGF0ZVZhcmlhYmxlKFNfQkxFTkRfRlVOQywgJ2JsZW5kRnVuY1NlcGFyYXRlJyxcbiAgICBbR0xfT05FLCBHTF9aRVJPLCBHTF9PTkUsIEdMX1pFUk9dKVxuXG4gIC8vIERlcHRoXG4gIHN0YXRlRmxhZyhTX0RFUFRIX0VOQUJMRSwgR0xfREVQVEhfVEVTVCwgdHJ1ZSlcbiAgc3RhdGVWYXJpYWJsZShTX0RFUFRIX0ZVTkMsICdkZXB0aEZ1bmMnLCBHTF9MRVNTKVxuICBzdGF0ZVZhcmlhYmxlKFNfREVQVEhfUkFOR0UsICdkZXB0aFJhbmdlJywgWzAsIDFdKVxuICBzdGF0ZVZhcmlhYmxlKFNfREVQVEhfTUFTSywgJ2RlcHRoTWFzaycsIHRydWUpXG5cbiAgLy8gQ29sb3IgbWFza1xuICBzdGF0ZVZhcmlhYmxlKFNfQ09MT1JfTUFTSywgU19DT0xPUl9NQVNLLCBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0pXG5cbiAgLy8gRmFjZSBjdWxsaW5nXG4gIHN0YXRlRmxhZyhTX0NVTExfRU5BQkxFLCBHTF9DVUxMX0ZBQ0UpXG4gIHN0YXRlVmFyaWFibGUoU19DVUxMX0ZBQ0UsICdjdWxsRmFjZScsIEdMX0JBQ0spXG5cbiAgLy8gRnJvbnQgZmFjZSBvcmllbnRhdGlvblxuICBzdGF0ZVZhcmlhYmxlKFNfRlJPTlRfRkFDRSwgU19GUk9OVF9GQUNFLCBHTF9DQ1cpXG5cbiAgLy8gTGluZSB3aWR0aFxuICBzdGF0ZVZhcmlhYmxlKFNfTElORV9XSURUSCwgU19MSU5FX1dJRFRILCAxKVxuXG4gIC8vIFBvbHlnb24gb2Zmc2V0XG4gIHN0YXRlRmxhZyhTX1BPTFlHT05fT0ZGU0VUX0VOQUJMRSwgR0xfUE9MWUdPTl9PRkZTRVRfRklMTClcbiAgc3RhdGVWYXJpYWJsZShTX1BPTFlHT05fT0ZGU0VUX09GRlNFVCwgJ3BvbHlnb25PZmZzZXQnLCBbMCwgMF0pXG5cbiAgLy8gU2FtcGxlIGNvdmVyYWdlXG4gIHN0YXRlRmxhZyhTX1NBTVBMRV9BTFBIQSwgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKVxuICBzdGF0ZUZsYWcoU19TQU1QTEVfRU5BQkxFLCBHTF9TQU1QTEVfQ09WRVJBR0UpXG4gIHN0YXRlVmFyaWFibGUoU19TQU1QTEVfQ09WRVJBR0UsICdzYW1wbGVDb3ZlcmFnZScsIFsxLCBmYWxzZV0pXG5cbiAgLy8gU3RlbmNpbFxuICBzdGF0ZUZsYWcoU19TVEVOQ0lMX0VOQUJMRSwgR0xfU1RFTkNJTF9URVNUKVxuICBzdGF0ZVZhcmlhYmxlKFNfU1RFTkNJTF9NQVNLLCAnc3RlbmNpbE1hc2snLCAtMSlcbiAgc3RhdGVWYXJpYWJsZShTX1NURU5DSUxfRlVOQywgJ3N0ZW5jaWxGdW5jJywgW0dMX0FMV0FZUywgMCwgLTFdKVxuICBzdGF0ZVZhcmlhYmxlKFNfU1RFTkNJTF9PUEZST05ULCAnc3RlbmNpbE9wU2VwYXJhdGUnLFxuICAgIFtHTF9GUk9OVCwgR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUF0pXG4gIHN0YXRlVmFyaWFibGUoU19TVEVOQ0lMX09QQkFDSywgJ3N0ZW5jaWxPcFNlcGFyYXRlJyxcbiAgICBbR0xfQkFDSywgR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUF0pXG5cbiAgLy8gU2Npc3NvclxuICBzdGF0ZUZsYWcoU19TQ0lTU09SX0VOQUJMRSwgR0xfU0NJU1NPUl9URVNUKVxuICBzdGF0ZVZhcmlhYmxlKFNfU0NJU1NPUl9CT1gsICdzY2lzc29yJyxcbiAgICBbMCwgMCwgZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLCBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0XSlcblxuICAvLyBWaWV3cG9ydFxuICBzdGF0ZVZhcmlhYmxlKFNfVklFV1BPUlQsIFNfVklFV1BPUlQsXG4gICAgWzAsIDAsIGdsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodF0pXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFTlZJUk9OTUVOVFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBzaGFyZWRTdGF0ZSA9IHtcbiAgICBnbDogZ2wsXG4gICAgY29udGV4dDogY29udGV4dFN0YXRlLFxuICAgIHN0cmluZ3M6IHN0cmluZ1N0b3JlLFxuICAgIG5leHQ6IG5leHRTdGF0ZSxcbiAgICBjdXJyZW50OiBjdXJyZW50U3RhdGUsXG4gICAgZHJhdzogZHJhd1N0YXRlLFxuICAgIGVsZW1lbnRzOiBlbGVtZW50U3RhdGUsXG4gICAgYnVmZmVyOiBidWZmZXJTdGF0ZSxcbiAgICBzaGFkZXI6IHNoYWRlclN0YXRlLFxuICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZVN0YXRlLnN0YXRlLFxuICAgIHZhbzogYXR0cmlidXRlU3RhdGUsXG4gICAgdW5pZm9ybXM6IHVuaWZvcm1TdGF0ZSxcbiAgICBmcmFtZWJ1ZmZlcjogZnJhbWVidWZmZXJTdGF0ZSxcbiAgICBleHRlbnNpb25zOiBleHRlbnNpb25zLFxuXG4gICAgdGltZXI6IHRpbWVyLFxuICAgIGlzQnVmZmVyQXJnczogaXNCdWZmZXJBcmdzXG4gIH1cblxuICB2YXIgc2hhcmVkQ29uc3RhbnRzID0ge1xuICAgIHByaW1UeXBlczogcHJpbVR5cGVzLFxuICAgIGNvbXBhcmVGdW5jczogY29tcGFyZUZ1bmNzLFxuICAgIGJsZW5kRnVuY3M6IGJsZW5kRnVuY3MsXG4gICAgYmxlbmRFcXVhdGlvbnM6IGJsZW5kRXF1YXRpb25zLFxuICAgIHN0ZW5jaWxPcHM6IHN0ZW5jaWxPcHMsXG4gICAgZ2xUeXBlczogZ2xUeXBlcyxcbiAgICBvcmllbnRhdGlvblR5cGU6IG9yaWVudGF0aW9uVHlwZVxuICB9XG5cbiAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgc2hhcmVkU3RhdGUuaXNBcnJheUxpa2UgPSBpc0FycmF5TGlrZVxuICB9KVxuXG4gIGlmIChleHREcmF3QnVmZmVycykge1xuICAgIHNoYXJlZENvbnN0YW50cy5iYWNrQnVmZmVyID0gW0dMX0JBQ0tdXG4gICAgc2hhcmVkQ29uc3RhbnRzLmRyYXdCdWZmZXIgPSBsb29wKGxpbWl0cy5tYXhEcmF3YnVmZmVycywgZnVuY3Rpb24gKGkpIHtcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMF1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsb29wKGksIGZ1bmN0aW9uIChqKSB7XG4gICAgICAgIHJldHVybiBHTF9DT0xPUl9BVFRBQ0hNRU5UMCQyICsgalxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdmFyIGRyYXdDYWxsQ291bnRlciA9IDBcbiAgZnVuY3Rpb24gY3JlYXRlUkVHTEVudmlyb25tZW50ICgpIHtcbiAgICB2YXIgZW52ID0gY3JlYXRlRW52aXJvbm1lbnQoKVxuICAgIHZhciBsaW5rID0gZW52LmxpbmtcbiAgICB2YXIgZ2xvYmFsID0gZW52Lmdsb2JhbFxuICAgIGVudi5pZCA9IGRyYXdDYWxsQ291bnRlcisrXG5cbiAgICBlbnYuYmF0Y2hJZCA9ICcwJ1xuXG4gICAgLy8gbGluayBzaGFyZWQgc3RhdGVcbiAgICB2YXIgU0hBUkVEID0gbGluayhzaGFyZWRTdGF0ZSlcbiAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZCA9IHtcbiAgICAgIHByb3BzOiAnYTAnXG4gICAgfVxuICAgIE9iamVjdC5rZXlzKHNoYXJlZFN0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICBzaGFyZWRbcHJvcF0gPSBnbG9iYWwuZGVmKFNIQVJFRCwgJy4nLCBwcm9wKVxuICAgIH0pXG5cbiAgICAvLyBJbmplY3QgcnVudGltZSBhc3NlcnRpb24gc3R1ZmYgZm9yIGRlYnVnIGJ1aWxkc1xuICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgZW52LkNIRUNLID0gbGluayhjaGVjayQxKVxuICAgICAgZW52LmNvbW1hbmRTdHIgPSBjaGVjayQxLmd1ZXNzQ29tbWFuZCgpXG4gICAgICBlbnYuY29tbWFuZCA9IGxpbmsoZW52LmNvbW1hbmRTdHIpXG4gICAgICBlbnYuYXNzZXJ0ID0gZnVuY3Rpb24gKGJsb2NrLCBwcmVkLCBtZXNzYWdlKSB7XG4gICAgICAgIGJsb2NrKFxuICAgICAgICAgICdpZighKCcsIHByZWQsICcpKScsXG4gICAgICAgICAgdGhpcy5DSEVDSywgJy5jb21tYW5kUmFpc2UoJywgbGluayhtZXNzYWdlKSwgJywnLCB0aGlzLmNvbW1hbmQsICcpOycpXG4gICAgICB9XG5cbiAgICAgIHNoYXJlZENvbnN0YW50cy5pbnZhbGlkQmxlbmRDb21iaW5hdGlvbnMgPSBpbnZhbGlkQmxlbmRDb21iaW5hdGlvbnNcbiAgICB9KVxuXG4gICAgLy8gQ29weSBHTCBzdGF0ZSB2YXJpYWJsZXMgb3ZlclxuICAgIHZhciBuZXh0VmFycyA9IGVudi5uZXh0ID0ge31cbiAgICB2YXIgY3VycmVudFZhcnMgPSBlbnYuY3VycmVudCA9IHt9XG4gICAgT2JqZWN0LmtleXMoR0xfVkFSSUFCTEVTKS5mb3JFYWNoKGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFN0YXRlW3ZhcmlhYmxlXSkpIHtcbiAgICAgICAgbmV4dFZhcnNbdmFyaWFibGVdID0gZ2xvYmFsLmRlZihzaGFyZWQubmV4dCwgJy4nLCB2YXJpYWJsZSlcbiAgICAgICAgY3VycmVudFZhcnNbdmFyaWFibGVdID0gZ2xvYmFsLmRlZihzaGFyZWQuY3VycmVudCwgJy4nLCB2YXJpYWJsZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBzaGFyZWQgY29uc3RhbnRzXG4gICAgdmFyIGNvbnN0YW50cyA9IGVudi5jb25zdGFudHMgPSB7fVxuICAgIE9iamVjdC5rZXlzKHNoYXJlZENvbnN0YW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgY29uc3RhbnRzW25hbWVdID0gZ2xvYmFsLmRlZihKU09OLnN0cmluZ2lmeShzaGFyZWRDb25zdGFudHNbbmFtZV0pKVxuICAgIH0pXG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGNhbGxpbmcgYSBibG9ja1xuICAgIGVudi5pbnZva2UgPSBmdW5jdGlvbiAoYmxvY2ssIHgpIHtcbiAgICAgIHN3aXRjaCAoeC50eXBlKSB7XG4gICAgICAgIGNhc2UgRFlOX0ZVTkMkMTpcbiAgICAgICAgICB2YXIgYXJnTGlzdCA9IFtcbiAgICAgICAgICAgICd0aGlzJyxcbiAgICAgICAgICAgIHNoYXJlZC5jb250ZXh0LFxuICAgICAgICAgICAgc2hhcmVkLnByb3BzLFxuICAgICAgICAgICAgZW52LmJhdGNoSWRcbiAgICAgICAgICBdXG4gICAgICAgICAgcmV0dXJuIGJsb2NrLmRlZihcbiAgICAgICAgICAgIGxpbmsoeC5kYXRhKSwgJy5jYWxsKCcsXG4gICAgICAgICAgICBhcmdMaXN0LnNsaWNlKDAsIE1hdGgubWF4KHguZGF0YS5sZW5ndGggKyAxLCA0KSksXG4gICAgICAgICAgICAnKScpXG4gICAgICAgIGNhc2UgRFlOX1BST1AkMTpcbiAgICAgICAgICByZXR1cm4gYmxvY2suZGVmKHNoYXJlZC5wcm9wcywgeC5kYXRhKVxuICAgICAgICBjYXNlIERZTl9DT05URVhUJDE6XG4gICAgICAgICAgcmV0dXJuIGJsb2NrLmRlZihzaGFyZWQuY29udGV4dCwgeC5kYXRhKVxuICAgICAgICBjYXNlIERZTl9TVEFURSQxOlxuICAgICAgICAgIHJldHVybiBibG9jay5kZWYoJ3RoaXMnLCB4LmRhdGEpXG4gICAgICAgIGNhc2UgRFlOX1RIVU5LOlxuICAgICAgICAgIHguZGF0YS5hcHBlbmQoZW52LCBibG9jaylcbiAgICAgICAgICByZXR1cm4geC5kYXRhLnJlZlxuICAgICAgICBjYXNlIERZTl9DT05TVEFOVCQxOlxuICAgICAgICAgIHJldHVybiB4LmRhdGEudG9TdHJpbmcoKVxuICAgICAgICBjYXNlIERZTl9BUlJBWSQxOlxuICAgICAgICAgIHJldHVybiB4LmRhdGEubWFwKGZ1bmN0aW9uICh5KSB7XG4gICAgICAgICAgICByZXR1cm4gZW52Lmludm9rZShibG9jaywgeSlcbiAgICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGVudi5hdHRyaWJDYWNoZSA9IHt9XG5cbiAgICB2YXIgc2NvcGVBdHRyaWJzID0ge31cbiAgICBlbnYuc2NvcGVBdHRyaWIgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGlkID0gc3RyaW5nU3RvcmUuaWQobmFtZSlcbiAgICAgIGlmIChpZCBpbiBzY29wZUF0dHJpYnMpIHtcbiAgICAgICAgcmV0dXJuIHNjb3BlQXR0cmlic1tpZF1cbiAgICAgIH1cbiAgICAgIHZhciBiaW5kaW5nID0gYXR0cmlidXRlU3RhdGUuc2NvcGVbaWRdXG4gICAgICBpZiAoIWJpbmRpbmcpIHtcbiAgICAgICAgYmluZGluZyA9IGF0dHJpYnV0ZVN0YXRlLnNjb3BlW2lkXSA9IG5ldyBBdHRyaWJ1dGVSZWNvcmQoKVxuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHNjb3BlQXR0cmlic1tpZF0gPSBsaW5rKGJpbmRpbmcpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudlxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQQVJTSU5HXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gcGFyc2VQcm9maWxlIChvcHRpb25zKSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuXG4gICAgdmFyIHByb2ZpbGVFbmFibGVcbiAgICBpZiAoU19QUk9GSUxFIGluIHN0YXRpY09wdGlvbnMpIHtcbiAgICAgIHZhciB2YWx1ZSA9ICEhc3RhdGljT3B0aW9uc1tTX1BST0ZJTEVdXG4gICAgICBwcm9maWxlRW5hYmxlID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0pXG4gICAgICBwcm9maWxlRW5hYmxlLmVuYWJsZSA9IHZhbHVlXG4gICAgfSBlbHNlIGlmIChTX1BST0ZJTEUgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgIHZhciBkeW4gPSBkeW5hbWljT3B0aW9uc1tTX1BST0ZJTEVdXG4gICAgICBwcm9maWxlRW5hYmxlID0gY3JlYXRlRHluYW1pY0RlY2woZHluLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICByZXR1cm4gZW52Lmludm9rZShzY29wZSwgZHluKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvZmlsZUVuYWJsZVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VGcmFtZWJ1ZmZlciAob3B0aW9ucywgZW52KSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuXG4gICAgaWYgKFNfRlJBTUVCVUZGRVIgaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgdmFyIGZyYW1lYnVmZmVyID0gc3RhdGljT3B0aW9uc1tTX0ZSQU1FQlVGRkVSXVxuICAgICAgaWYgKGZyYW1lYnVmZmVyKSB7XG4gICAgICAgIGZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXJTdGF0ZS5nZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcilcbiAgICAgICAgY2hlY2skMS5jb21tYW5kKGZyYW1lYnVmZmVyLCAnaW52YWxpZCBmcmFtZWJ1ZmZlciBvYmplY3QnKVxuICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBibG9jaykge1xuICAgICAgICAgIHZhciBGUkFNRUJVRkZFUiA9IGVudi5saW5rKGZyYW1lYnVmZmVyKVxuICAgICAgICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgICAgICAgYmxvY2suc2V0KFxuICAgICAgICAgICAgc2hhcmVkLmZyYW1lYnVmZmVyLFxuICAgICAgICAgICAgJy5uZXh0JyxcbiAgICAgICAgICAgIEZSQU1FQlVGRkVSKVxuICAgICAgICAgIHZhciBDT05URVhUID0gc2hhcmVkLmNvbnRleHRcbiAgICAgICAgICBibG9jay5zZXQoXG4gICAgICAgICAgICBDT05URVhULFxuICAgICAgICAgICAgJy4nICsgU19GUkFNRUJVRkZFUl9XSURUSCxcbiAgICAgICAgICAgIEZSQU1FQlVGRkVSICsgJy53aWR0aCcpXG4gICAgICAgICAgYmxvY2suc2V0KFxuICAgICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAgICcuJyArIFNfRlJBTUVCVUZGRVJfSEVJR0hULFxuICAgICAgICAgICAgRlJBTUVCVUZGRVIgKyAnLmhlaWdodCcpXG4gICAgICAgICAgcmV0dXJuIEZSQU1FQlVGRkVSXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgICAgICAgc2NvcGUuc2V0KFxuICAgICAgICAgICAgc2hhcmVkLmZyYW1lYnVmZmVyLFxuICAgICAgICAgICAgJy5uZXh0JyxcbiAgICAgICAgICAgICdudWxsJylcbiAgICAgICAgICB2YXIgQ09OVEVYVCA9IHNoYXJlZC5jb250ZXh0XG4gICAgICAgICAgc2NvcGUuc2V0KFxuICAgICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAgICcuJyArIFNfRlJBTUVCVUZGRVJfV0lEVEgsXG4gICAgICAgICAgICBDT05URVhUICsgJy4nICsgU19EUkFXSU5HQlVGRkVSX1dJRFRIKVxuICAgICAgICAgIHNjb3BlLnNldChcbiAgICAgICAgICAgIENPTlRFWFQsXG4gICAgICAgICAgICAnLicgKyBTX0ZSQU1FQlVGRkVSX0hFSUdIVCxcbiAgICAgICAgICAgIENPTlRFWFQgKyAnLicgKyBTX0RSQVdJTkdCVUZGRVJfSEVJR0hUKVxuICAgICAgICAgIHJldHVybiAnbnVsbCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFNfRlJBTUVCVUZGRVIgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgIHZhciBkeW4gPSBkeW5hbWljT3B0aW9uc1tTX0ZSQU1FQlVGRkVSXVxuICAgICAgcmV0dXJuIGNyZWF0ZUR5bmFtaWNEZWNsKGR5biwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgdmFyIEZSQU1FQlVGRkVSX0ZVTkMgPSBlbnYuaW52b2tlKHNjb3BlLCBkeW4pXG4gICAgICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgICAgIHZhciBGUkFNRUJVRkZFUl9TVEFURSA9IHNoYXJlZC5mcmFtZWJ1ZmZlclxuICAgICAgICB2YXIgRlJBTUVCVUZGRVIgPSBzY29wZS5kZWYoXG4gICAgICAgICAgRlJBTUVCVUZGRVJfU1RBVEUsICcuZ2V0RnJhbWVidWZmZXIoJywgRlJBTUVCVUZGRVJfRlVOQywgJyknKVxuXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAnIScgKyBGUkFNRUJVRkZFUl9GVU5DICsgJ3x8JyArIEZSQU1FQlVGRkVSLFxuICAgICAgICAgICAgJ2ludmFsaWQgZnJhbWVidWZmZXIgb2JqZWN0JylcbiAgICAgICAgfSlcblxuICAgICAgICBzY29wZS5zZXQoXG4gICAgICAgICAgRlJBTUVCVUZGRVJfU1RBVEUsXG4gICAgICAgICAgJy5uZXh0JyxcbiAgICAgICAgICBGUkFNRUJVRkZFUilcbiAgICAgICAgdmFyIENPTlRFWFQgPSBzaGFyZWQuY29udGV4dFxuICAgICAgICBzY29wZS5zZXQoXG4gICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAnLicgKyBTX0ZSQU1FQlVGRkVSX1dJRFRILFxuICAgICAgICAgIEZSQU1FQlVGRkVSICsgJz8nICsgRlJBTUVCVUZGRVIgKyAnLndpZHRoOicgK1xuICAgICAgICAgIENPTlRFWFQgKyAnLicgKyBTX0RSQVdJTkdCVUZGRVJfV0lEVEgpXG4gICAgICAgIHNjb3BlLnNldChcbiAgICAgICAgICBDT05URVhULFxuICAgICAgICAgICcuJyArIFNfRlJBTUVCVUZGRVJfSEVJR0hULFxuICAgICAgICAgIEZSQU1FQlVGRkVSICtcbiAgICAgICAgICAnPycgKyBGUkFNRUJVRkZFUiArICcuaGVpZ2h0OicgK1xuICAgICAgICAgIENPTlRFWFQgKyAnLicgKyBTX0RSQVdJTkdCVUZGRVJfSEVJR0hUKVxuICAgICAgICByZXR1cm4gRlJBTUVCVUZGRVJcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VWaWV3cG9ydFNjaXNzb3IgKG9wdGlvbnMsIGZyYW1lYnVmZmVyLCBlbnYpIHtcbiAgICB2YXIgc3RhdGljT3B0aW9ucyA9IG9wdGlvbnMuc3RhdGljXG4gICAgdmFyIGR5bmFtaWNPcHRpb25zID0gb3B0aW9ucy5keW5hbWljXG5cbiAgICBmdW5jdGlvbiBwYXJzZUJveCAocGFyYW0pIHtcbiAgICAgIGlmIChwYXJhbSBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBib3ggPSBzdGF0aWNPcHRpb25zW3BhcmFtXVxuICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKGJveCwgJ29iamVjdCcsICdpbnZhbGlkICcgKyBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG5cbiAgICAgICAgdmFyIGlzU3RhdGljID0gdHJ1ZVxuICAgICAgICB2YXIgeCA9IGJveC54IHwgMFxuICAgICAgICB2YXIgeSA9IGJveC55IHwgMFxuICAgICAgICB2YXIgdywgaFxuICAgICAgICBpZiAoJ3dpZHRoJyBpbiBib3gpIHtcbiAgICAgICAgICB3ID0gYm94LndpZHRoIHwgMFxuICAgICAgICAgIGNoZWNrJDEuY29tbWFuZCh3ID49IDAsICdpbnZhbGlkICcgKyBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNTdGF0aWMgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmICgnaGVpZ2h0JyBpbiBib3gpIHtcbiAgICAgICAgICBoID0gYm94LmhlaWdodCB8IDBcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoaCA+PSAwLCAnaW52YWxpZCAnICsgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzU3RhdGljID0gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICAgICAgIWlzU3RhdGljICYmIGZyYW1lYnVmZmVyICYmIGZyYW1lYnVmZmVyLnRoaXNEZXAsXG4gICAgICAgICAgIWlzU3RhdGljICYmIGZyYW1lYnVmZmVyICYmIGZyYW1lYnVmZmVyLmNvbnRleHREZXAsXG4gICAgICAgICAgIWlzU3RhdGljICYmIGZyYW1lYnVmZmVyICYmIGZyYW1lYnVmZmVyLnByb3BEZXAsXG4gICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgIHZhciBDT05URVhUID0gZW52LnNoYXJlZC5jb250ZXh0XG4gICAgICAgICAgICB2YXIgQk9YX1cgPSB3XG4gICAgICAgICAgICBpZiAoISgnd2lkdGgnIGluIGJveCkpIHtcbiAgICAgICAgICAgICAgQk9YX1cgPSBzY29wZS5kZWYoQ09OVEVYVCwgJy4nLCBTX0ZSQU1FQlVGRkVSX1dJRFRILCAnLScsIHgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgQk9YX0ggPSBoXG4gICAgICAgICAgICBpZiAoISgnaGVpZ2h0JyBpbiBib3gpKSB7XG4gICAgICAgICAgICAgIEJPWF9IID0gc2NvcGUuZGVmKENPTlRFWFQsICcuJywgU19GUkFNRUJVRkZFUl9IRUlHSFQsICctJywgeSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbeCwgeSwgQk9YX1csIEJPWF9IXVxuICAgICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBkeW5Cb3ggPSBkeW5hbWljT3B0aW9uc1twYXJhbV1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZUR5bmFtaWNEZWNsKGR5bkJveCwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICB2YXIgQk9YID0gZW52Lmludm9rZShzY29wZSwgZHluQm94KVxuXG4gICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICBCT1ggKyAnJiZ0eXBlb2YgJyArIEJPWCArICc9PT1cIm9iamVjdFwiJyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgJyArIHBhcmFtKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB2YXIgQ09OVEVYVCA9IGVudi5zaGFyZWQuY29udGV4dFxuICAgICAgICAgIHZhciBCT1hfWCA9IHNjb3BlLmRlZihCT1gsICcueHwwJylcbiAgICAgICAgICB2YXIgQk9YX1kgPSBzY29wZS5kZWYoQk9YLCAnLnl8MCcpXG4gICAgICAgICAgdmFyIEJPWF9XID0gc2NvcGUuZGVmKFxuICAgICAgICAgICAgJ1wid2lkdGhcIiBpbiAnLCBCT1gsICc/JywgQk9YLCAnLndpZHRofDA6JyxcbiAgICAgICAgICAgICcoJywgQ09OVEVYVCwgJy4nLCBTX0ZSQU1FQlVGRkVSX1dJRFRILCAnLScsIEJPWF9YLCAnKScpXG4gICAgICAgICAgdmFyIEJPWF9IID0gc2NvcGUuZGVmKFxuICAgICAgICAgICAgJ1wiaGVpZ2h0XCIgaW4gJywgQk9YLCAnPycsIEJPWCwgJy5oZWlnaHR8MDonLFxuICAgICAgICAgICAgJygnLCBDT05URVhULCAnLicsIFNfRlJBTUVCVUZGRVJfSEVJR0hULCAnLScsIEJPWF9ZLCAnKScpXG5cbiAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgIEJPWF9XICsgJz49MCYmJyArXG4gICAgICAgICAgICAgIEJPWF9IICsgJz49MCcsXG4gICAgICAgICAgICAgICdpbnZhbGlkICcgKyBwYXJhbSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIFtCT1hfWCwgQk9YX1ksIEJPWF9XLCBCT1hfSF1cbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGZyYW1lYnVmZmVyKSB7XG4gICAgICAgICAgcmVzdWx0LnRoaXNEZXAgPSByZXN1bHQudGhpc0RlcCB8fCBmcmFtZWJ1ZmZlci50aGlzRGVwXG4gICAgICAgICAgcmVzdWx0LmNvbnRleHREZXAgPSByZXN1bHQuY29udGV4dERlcCB8fCBmcmFtZWJ1ZmZlci5jb250ZXh0RGVwXG4gICAgICAgICAgcmVzdWx0LnByb3BEZXAgPSByZXN1bHQucHJvcERlcCB8fCBmcmFtZWJ1ZmZlci5wcm9wRGVwXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmIChmcmFtZWJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgICAgIGZyYW1lYnVmZmVyLnRoaXNEZXAsXG4gICAgICAgICAgZnJhbWVidWZmZXIuY29udGV4dERlcCxcbiAgICAgICAgICBmcmFtZWJ1ZmZlci5wcm9wRGVwLFxuICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgICB2YXIgQ09OVEVYVCA9IGVudi5zaGFyZWQuY29udGV4dFxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgMCwgMCxcbiAgICAgICAgICAgICAgc2NvcGUuZGVmKENPTlRFWFQsICcuJywgU19GUkFNRUJVRkZFUl9XSURUSCksXG4gICAgICAgICAgICAgIHNjb3BlLmRlZihDT05URVhULCAnLicsIFNfRlJBTUVCVUZGRVJfSEVJR0hUKV1cbiAgICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdmlld3BvcnQgPSBwYXJzZUJveChTX1ZJRVdQT1JUKVxuXG4gICAgaWYgKHZpZXdwb3J0KSB7XG4gICAgICB2YXIgcHJldlZpZXdwb3J0ID0gdmlld3BvcnRcbiAgICAgIHZpZXdwb3J0ID0gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgICB2aWV3cG9ydC50aGlzRGVwLFxuICAgICAgICB2aWV3cG9ydC5jb250ZXh0RGVwLFxuICAgICAgICB2aWV3cG9ydC5wcm9wRGVwLFxuICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciBWSUVXUE9SVCA9IHByZXZWaWV3cG9ydC5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgICAgICB2YXIgQ09OVEVYVCA9IGVudi5zaGFyZWQuY29udGV4dFxuICAgICAgICAgIHNjb3BlLnNldChcbiAgICAgICAgICAgIENPTlRFWFQsXG4gICAgICAgICAgICAnLicgKyBTX1ZJRVdQT1JUX1dJRFRILFxuICAgICAgICAgICAgVklFV1BPUlRbMl0pXG4gICAgICAgICAgc2NvcGUuc2V0KFxuICAgICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAgICcuJyArIFNfVklFV1BPUlRfSEVJR0hULFxuICAgICAgICAgICAgVklFV1BPUlRbM10pXG4gICAgICAgICAgcmV0dXJuIFZJRVdQT1JUXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZXdwb3J0OiB2aWV3cG9ydCxcbiAgICAgIHNjaXNzb3JfYm94OiBwYXJzZUJveChTX1NDSVNTT1JfQk9YKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQXR0cmliTG9jYXRpb25zIChvcHRpb25zLCBhdHRyaWJ1dGVzKSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBzdGF0aWNQcm9ncmFtID1cbiAgICAgIHR5cGVvZiBzdGF0aWNPcHRpb25zW1NfRlJBR10gPT09ICdzdHJpbmcnICYmXG4gICAgICB0eXBlb2Ygc3RhdGljT3B0aW9uc1tTX1ZFUlRdID09PSAnc3RyaW5nJ1xuICAgIGlmIChzdGF0aWNQcm9ncmFtKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoYXR0cmlidXRlcy5keW5hbWljKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICB2YXIgc3RhdGljQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuc3RhdGljXG4gICAgICB2YXIgc0F0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhzdGF0aWNBdHRyaWJ1dGVzKVxuICAgICAgaWYgKHNBdHRyaWJ1dGVzLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHN0YXRpY0F0dHJpYnV0ZXNbc0F0dHJpYnV0ZXNbMF1dID09PSAnbnVtYmVyJykge1xuICAgICAgICB2YXIgYmluZGluZ3MgPSBbXVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNBdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2hlY2skMSh0eXBlb2Ygc3RhdGljQXR0cmlidXRlc1tzQXR0cmlidXRlc1tpXV0gPT09ICdudW1iZXInLCAnbXVzdCBzcGVjaWZ5IGFsbCB2ZXJ0ZXggYXR0cmlidXRlIGxvY2F0aW9ucyB3aGVuIHVzaW5nIHZhb3MnKVxuICAgICAgICAgIGJpbmRpbmdzLnB1c2goW3N0YXRpY0F0dHJpYnV0ZXNbc0F0dHJpYnV0ZXNbaV1dIHwgMCwgc0F0dHJpYnV0ZXNbaV1dKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiaW5kaW5nc1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQcm9ncmFtIChvcHRpb25zLCBlbnYsIGF0dHJpYkxvY2F0aW9ucykge1xuICAgIHZhciBzdGF0aWNPcHRpb25zID0gb3B0aW9ucy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY09wdGlvbnMgPSBvcHRpb25zLmR5bmFtaWNcblxuICAgIGZ1bmN0aW9uIHBhcnNlU2hhZGVyIChuYW1lKSB7XG4gICAgICBpZiAobmFtZSBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBpZCA9IHN0cmluZ1N0b3JlLmlkKHN0YXRpY09wdGlvbnNbbmFtZV0pXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNoYWRlclN0YXRlLnNoYWRlcihzaGFkZXJUeXBlW25hbWVdLCBpZCwgY2hlY2skMS5ndWVzc0NvbW1hbmQoKSlcbiAgICAgICAgfSlcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBpZFxuICAgICAgICB9KVxuICAgICAgICByZXN1bHQuaWQgPSBpZFxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9IGVsc2UgaWYgKG5hbWUgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIGR5biA9IGR5bmFtaWNPcHRpb25zW25hbWVdXG4gICAgICAgIHJldHVybiBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgdmFyIHN0ciA9IGVudi5pbnZva2Uoc2NvcGUsIGR5bilcbiAgICAgICAgICB2YXIgaWQgPSBzY29wZS5kZWYoZW52LnNoYXJlZC5zdHJpbmdzLCAnLmlkKCcsIHN0ciwgJyknKVxuICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2NvcGUoXG4gICAgICAgICAgICAgIGVudi5zaGFyZWQuc2hhZGVyLCAnLnNoYWRlcignLFxuICAgICAgICAgICAgICBzaGFkZXJUeXBlW25hbWVdLCAnLCcsXG4gICAgICAgICAgICAgIGlkLCAnLCcsXG4gICAgICAgICAgICAgIGVudi5jb21tYW5kLCAnKTsnKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIGlkXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHZhciBmcmFnID0gcGFyc2VTaGFkZXIoU19GUkFHKVxuICAgIHZhciB2ZXJ0ID0gcGFyc2VTaGFkZXIoU19WRVJUKVxuXG4gICAgdmFyIHByb2dyYW0gPSBudWxsXG4gICAgdmFyIHByb2dWYXJcbiAgICBpZiAoaXNTdGF0aWMoZnJhZykgJiYgaXNTdGF0aWModmVydCkpIHtcbiAgICAgIHByb2dyYW0gPSBzaGFkZXJTdGF0ZS5wcm9ncmFtKHZlcnQuaWQsIGZyYWcuaWQsIG51bGwsIGF0dHJpYkxvY2F0aW9ucylcbiAgICAgIHByb2dWYXIgPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgIHJldHVybiBlbnYubGluayhwcm9ncmFtKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ1ZhciA9IG5ldyBEZWNsYXJhdGlvbihcbiAgICAgICAgKGZyYWcgJiYgZnJhZy50aGlzRGVwKSB8fCAodmVydCAmJiB2ZXJ0LnRoaXNEZXApLFxuICAgICAgICAoZnJhZyAmJiBmcmFnLmNvbnRleHREZXApIHx8ICh2ZXJ0ICYmIHZlcnQuY29udGV4dERlcCksXG4gICAgICAgIChmcmFnICYmIGZyYWcucHJvcERlcCkgfHwgKHZlcnQgJiYgdmVydC5wcm9wRGVwKSxcbiAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICB2YXIgU0hBREVSX1NUQVRFID0gZW52LnNoYXJlZC5zaGFkZXJcbiAgICAgICAgICB2YXIgZnJhZ0lkXG4gICAgICAgICAgaWYgKGZyYWcpIHtcbiAgICAgICAgICAgIGZyYWdJZCA9IGZyYWcuYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyYWdJZCA9IHNjb3BlLmRlZihTSEFERVJfU1RBVEUsICcuJywgU19GUkFHKVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgdmVydElkXG4gICAgICAgICAgaWYgKHZlcnQpIHtcbiAgICAgICAgICAgIHZlcnRJZCA9IHZlcnQuYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZlcnRJZCA9IHNjb3BlLmRlZihTSEFERVJfU1RBVEUsICcuJywgU19WRVJUKVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgcHJvZ0RlZiA9IFNIQURFUl9TVEFURSArICcucHJvZ3JhbSgnICsgdmVydElkICsgJywnICsgZnJhZ0lkXG4gICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwcm9nRGVmICs9ICcsJyArIGVudi5jb21tYW5kXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKHByb2dEZWYgKyAnKScpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZyYWc6IGZyYWcsXG4gICAgICB2ZXJ0OiB2ZXJ0LFxuICAgICAgcHJvZ1ZhcjogcHJvZ1ZhcixcbiAgICAgIHByb2dyYW06IHByb2dyYW1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZURyYXcgKG9wdGlvbnMsIGVudikge1xuICAgIHZhciBzdGF0aWNPcHRpb25zID0gb3B0aW9ucy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY09wdGlvbnMgPSBvcHRpb25zLmR5bmFtaWNcblxuICAgIGZ1bmN0aW9uIHBhcnNlRWxlbWVudHMgKCkge1xuICAgICAgaWYgKFNfRUxFTUVOVFMgaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgICB2YXIgZWxlbWVudHMgPSBzdGF0aWNPcHRpb25zW1NfRUxFTUVOVFNdXG4gICAgICAgIGlmIChpc0J1ZmZlckFyZ3MoZWxlbWVudHMpKSB7XG4gICAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50U3RhdGUuZ2V0RWxlbWVudHMoZWxlbWVudFN0YXRlLmNyZWF0ZShlbGVtZW50cywgdHJ1ZSkpXG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgICBlbGVtZW50cyA9IGVsZW1lbnRTdGF0ZS5nZXRFbGVtZW50cyhlbGVtZW50cylcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoZWxlbWVudHMsICdpbnZhbGlkIGVsZW1lbnRzJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBlbnYubGluayhlbGVtZW50cylcbiAgICAgICAgICAgIGVudi5FTEVNRU5UUyA9IHJlc3VsdFxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgICBlbnYuRUxFTUVOVFMgPSBudWxsXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfSlcbiAgICAgICAgcmVzdWx0LnZhbHVlID0gZWxlbWVudHNcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmIChTX0VMRU1FTlRTIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBkeW4gPSBkeW5hbWljT3B0aW9uc1tTX0VMRU1FTlRTXVxuICAgICAgICByZXR1cm4gY3JlYXRlRHluYW1pY0RlY2woZHluLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG5cbiAgICAgICAgICB2YXIgSVNfQlVGRkVSX0FSR1MgPSBzaGFyZWQuaXNCdWZmZXJBcmdzXG4gICAgICAgICAgdmFyIEVMRU1FTlRfU1RBVEUgPSBzaGFyZWQuZWxlbWVudHNcblxuICAgICAgICAgIHZhciBlbGVtZW50RGVmbiA9IGVudi5pbnZva2Uoc2NvcGUsIGR5bilcbiAgICAgICAgICB2YXIgZWxlbWVudHMgPSBzY29wZS5kZWYoJ251bGwnKVxuICAgICAgICAgIHZhciBlbGVtZW50U3RyZWFtID0gc2NvcGUuZGVmKElTX0JVRkZFUl9BUkdTLCAnKCcsIGVsZW1lbnREZWZuLCAnKScpXG5cbiAgICAgICAgICB2YXIgaWZ0ZSA9IGVudi5jb25kKGVsZW1lbnRTdHJlYW0pXG4gICAgICAgICAgICAudGhlbihlbGVtZW50cywgJz0nLCBFTEVNRU5UX1NUQVRFLCAnLmNyZWF0ZVN0cmVhbSgnLCBlbGVtZW50RGVmbiwgJyk7JylcbiAgICAgICAgICAgIC5lbHNlKGVsZW1lbnRzLCAnPScsIEVMRU1FTlRfU1RBVEUsICcuZ2V0RWxlbWVudHMoJywgZWxlbWVudERlZm4sICcpOycpXG5cbiAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoaWZ0ZS5lbHNlLFxuICAgICAgICAgICAgICAnIScgKyBlbGVtZW50RGVmbiArICd8fCcgKyBlbGVtZW50cyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgZWxlbWVudHMnKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBzY29wZS5lbnRyeShpZnRlKVxuICAgICAgICAgIHNjb3BlLmV4aXQoXG4gICAgICAgICAgICBlbnYuY29uZChlbGVtZW50U3RyZWFtKVxuICAgICAgICAgICAgICAudGhlbihFTEVNRU5UX1NUQVRFLCAnLmRlc3Ryb3lTdHJlYW0oJywgZWxlbWVudHMsICcpOycpKVxuXG4gICAgICAgICAgZW52LkVMRU1FTlRTID0gZWxlbWVudHNcblxuICAgICAgICAgIHJldHVybiBlbGVtZW50c1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHZhciBlbGVtZW50cyA9IHBhcnNlRWxlbWVudHMoKVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQcmltaXRpdmUgKCkge1xuICAgICAgaWYgKFNfUFJJTUlUSVZFIGluIHN0YXRpY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIHByaW1pdGl2ZSA9IHN0YXRpY09wdGlvbnNbU19QUklNSVRJVkVdXG4gICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcihwcmltaXRpdmUsIHByaW1UeXBlcywgJ2ludmFsaWQgcHJpbWl0dmUnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICByZXR1cm4gcHJpbVR5cGVzW3ByaW1pdGl2ZV1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoU19QUklNSVRJVkUgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIGR5blByaW1pdGl2ZSA9IGR5bmFtaWNPcHRpb25zW1NfUFJJTUlUSVZFXVxuICAgICAgICByZXR1cm4gY3JlYXRlRHluYW1pY0RlY2woZHluUHJpbWl0aXZlLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciBQUklNX1RZUEVTID0gZW52LmNvbnN0YW50cy5wcmltVHlwZXNcbiAgICAgICAgICB2YXIgcHJpbSA9IGVudi5pbnZva2Uoc2NvcGUsIGR5blByaW1pdGl2ZSlcbiAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgIHByaW0gKyAnIGluICcgKyBQUklNX1RZUEVTLFxuICAgICAgICAgICAgICAnaW52YWxpZCBwcmltaXRpdmUsIG11c3QgYmUgb25lIG9mICcgKyBPYmplY3Qua2V5cyhwcmltVHlwZXMpKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihQUklNX1RZUEVTLCAnWycsIHByaW0sICddJylcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljKGVsZW1lbnRzKSkge1xuICAgICAgICAgIGlmIChlbGVtZW50cy52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihlbnYuRUxFTUVOVFMsICcucHJpbVR5cGUnKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gR0xfVFJJQU5HTEVTJDFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICAgICAgICBlbGVtZW50cy50aGlzRGVwLFxuICAgICAgICAgICAgZWxlbWVudHMuY29udGV4dERlcCxcbiAgICAgICAgICAgIGVsZW1lbnRzLnByb3BEZXAsXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBlbnYuRUxFTUVOVFNcbiAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihlbGVtZW50cywgJz8nLCBlbGVtZW50cywgJy5wcmltVHlwZTonLCBHTF9UUklBTkdMRVMkMSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQYXJhbSAocGFyYW0sIGlzT2Zmc2V0KSB7XG4gICAgICBpZiAocGFyYW0gaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgICB2YXIgdmFsdWUgPSBzdGF0aWNPcHRpb25zW3BhcmFtXSB8IDBcbiAgICAgICAgY2hlY2skMS5jb21tYW5kKCFpc09mZnNldCB8fCB2YWx1ZSA+PSAwLCAnaW52YWxpZCAnICsgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIGlmIChpc09mZnNldCkge1xuICAgICAgICAgICAgZW52Lk9GRlNFVCA9IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbiBkeW5hbWljT3B0aW9ucykge1xuICAgICAgICB2YXIgZHluVmFsdWUgPSBkeW5hbWljT3B0aW9uc1twYXJhbV1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR5bmFtaWNEZWNsKGR5blZhbHVlLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBlbnYuaW52b2tlKHNjb3BlLCBkeW5WYWx1ZSlcbiAgICAgICAgICBpZiAoaXNPZmZzZXQpIHtcbiAgICAgICAgICAgIGVudi5PRkZTRVQgPSByZXN1bHRcbiAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgIHJlc3VsdCArICc+PTAnLFxuICAgICAgICAgICAgICAgICdpbnZhbGlkICcgKyBwYXJhbSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoaXNPZmZzZXQgJiYgZWxlbWVudHMpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICBlbnYuT0ZGU0VUID0gJzAnXG4gICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdmFyIE9GRlNFVCA9IHBhcnNlUGFyYW0oU19PRkZTRVQsIHRydWUpXG5cbiAgICBmdW5jdGlvbiBwYXJzZVZlcnRDb3VudCAoKSB7XG4gICAgICBpZiAoU19DT1VOVCBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBjb3VudCA9IHN0YXRpY09wdGlvbnNbU19DT1VOVF0gfCAwXG4gICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICB0eXBlb2YgY291bnQgPT09ICdudW1iZXInICYmIGNvdW50ID49IDAsICdpbnZhbGlkIHZlcnRleCBjb3VudCcsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvdW50XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKFNfQ09VTlQgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIGR5bkNvdW50ID0gZHluYW1pY09wdGlvbnNbU19DT1VOVF1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR5bmFtaWNEZWNsKGR5bkNvdW50LCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBlbnYuaW52b2tlKHNjb3BlLCBkeW5Db3VudClcbiAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICd0eXBlb2YgJyArIHJlc3VsdCArICc9PT1cIm51bWJlclwiJiYnICtcbiAgICAgICAgICAgICAgcmVzdWx0ICsgJz49MCYmJyArXG4gICAgICAgICAgICAgIHJlc3VsdCArICc9PT0oJyArIHJlc3VsdCArICd8MCknLFxuICAgICAgICAgICAgICAnaW52YWxpZCB2ZXJ0ZXggY291bnQnKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50cykge1xuICAgICAgICBpZiAoaXNTdGF0aWMoZWxlbWVudHMpKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAoT0ZGU0VUKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgICAgT0ZGU0VULnRoaXNEZXAsXG4gICAgICAgICAgICAgICAgT0ZGU0VULmNvbnRleHREZXAsXG4gICAgICAgICAgICAgICAgT0ZGU0VULnByb3BEZXAsXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBzY29wZS5kZWYoXG4gICAgICAgICAgICAgICAgICAgIGVudi5FTEVNRU5UUywgJy52ZXJ0Q291bnQtJywgZW52Lk9GRlNFVClcblxuICAgICAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgJz49MCcsXG4gICAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgdmVydGV4IG9mZnNldC9lbGVtZW50IGJ1ZmZlciB0b28gc21hbGwnKVxuICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoZW52LkVMRU1FTlRTLCAnLnZlcnRDb3VudCcpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5NSVNTSU5HID0gdHJ1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHZhcmlhYmxlID0gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgICAgICAgZWxlbWVudHMudGhpc0RlcCB8fCBPRkZTRVQudGhpc0RlcCxcbiAgICAgICAgICAgIGVsZW1lbnRzLmNvbnRleHREZXAgfHwgT0ZGU0VULmNvbnRleHREZXAsXG4gICAgICAgICAgICBlbGVtZW50cy5wcm9wRGVwIHx8IE9GRlNFVC5wcm9wRGVwLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gZW52LkVMRU1FTlRTXG4gICAgICAgICAgICAgIGlmIChlbnYuT0ZGU0VUKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihlbGVtZW50cywgJz8nLCBlbGVtZW50cywgJy52ZXJ0Q291bnQtJyxcbiAgICAgICAgICAgICAgICAgIGVudi5PRkZTRVQsICc6LTEnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoZWxlbWVudHMsICc/JywgZWxlbWVudHMsICcudmVydENvdW50Oi0xJylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXJpYWJsZS5EWU5BTUlDID0gdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHZhcmlhYmxlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICAgIHByaW1pdGl2ZTogcGFyc2VQcmltaXRpdmUoKSxcbiAgICAgIGNvdW50OiBwYXJzZVZlcnRDb3VudCgpLFxuICAgICAgaW5zdGFuY2VzOiBwYXJzZVBhcmFtKFNfSU5TVEFOQ0VTLCBmYWxzZSksXG4gICAgICBvZmZzZXQ6IE9GRlNFVFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlR0xTdGF0ZSAob3B0aW9ucywgZW52KSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuXG4gICAgdmFyIFNUQVRFID0ge31cblxuICAgIEdMX1NUQVRFX05BTUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHZhciBwYXJhbSA9IHByb3BOYW1lKHByb3ApXG5cbiAgICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW0gKHBhcnNlU3RhdGljLCBwYXJzZUR5bmFtaWMpIHtcbiAgICAgICAgaWYgKHByb3AgaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHBhcnNlU3RhdGljKHN0YXRpY09wdGlvbnNbcHJvcF0pXG4gICAgICAgICAgU1RBVEVbcGFyYW1dID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKHByb3AgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgICAgICB2YXIgZHluID0gZHluYW1pY09wdGlvbnNbcHJvcF1cbiAgICAgICAgICBTVEFURVtwYXJhbV0gPSBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VEeW5hbWljKGVudiwgc2NvcGUsIGVudi5pbnZva2Uoc2NvcGUsIGR5bikpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHByb3ApIHtcbiAgICAgICAgY2FzZSBTX0NVTExfRU5BQkxFOlxuICAgICAgICBjYXNlIFNfQkxFTkRfRU5BQkxFOlxuICAgICAgICBjYXNlIFNfRElUSEVSOlxuICAgICAgICBjYXNlIFNfU1RFTkNJTF9FTkFCTEU6XG4gICAgICAgIGNhc2UgU19ERVBUSF9FTkFCTEU6XG4gICAgICAgIGNhc2UgU19TQ0lTU09SX0VOQUJMRTpcbiAgICAgICAgY2FzZSBTX1BPTFlHT05fT0ZGU0VUX0VOQUJMRTpcbiAgICAgICAgY2FzZSBTX1NBTVBMRV9BTFBIQTpcbiAgICAgICAgY2FzZSBTX1NBTVBMRV9FTkFCTEU6XG4gICAgICAgIGNhc2UgU19ERVBUSF9NQVNLOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdib29sZWFuJywgcHJvcCwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgJ3R5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJib29sZWFuXCInLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgZmxhZyAnICsgcHJvcCwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfREVQVEhfRlVOQzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIodmFsdWUsIGNvbXBhcmVGdW5jcywgJ2ludmFsaWQgJyArIHByb3AsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUZ1bmNzW3ZhbHVlXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICB2YXIgQ09NUEFSRV9GVU5DUyA9IGVudi5jb25zdGFudHMuY29tcGFyZUZ1bmNzXG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICcgaW4gJyArIENPTVBBUkVfRlVOQ1MsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCAnICsgcHJvcCArICcsIG11c3QgYmUgb25lIG9mICcgKyBPYmplY3Qua2V5cyhjb21wYXJlRnVuY3MpKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKENPTVBBUkVfRlVOQ1MsICdbJywgdmFsdWUsICddJylcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0RFUFRIX1JBTkdFOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZS5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWVbMF0gPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlWzFdID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgIHZhbHVlWzBdIDw9IHZhbHVlWzFdLFxuICAgICAgICAgICAgICAgICdkZXB0aCByYW5nZSBpcyAyZCBhcnJheScsXG4gICAgICAgICAgICAgICAgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgZW52LnNoYXJlZC5pc0FycmF5TGlrZSArICcoJyArIHZhbHVlICsgJykmJicgK1xuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnLmxlbmd0aD09PTImJicgK1xuICAgICAgICAgICAgICAgICAgJ3R5cGVvZiAnICsgdmFsdWUgKyAnWzBdPT09XCJudW1iZXJcIiYmJyArXG4gICAgICAgICAgICAgICAgICAndHlwZW9mICcgKyB2YWx1ZSArICdbMV09PT1cIm51bWJlclwiJiYnICtcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJ1swXTw9JyArIHZhbHVlICsgJ1sxXScsXG4gICAgICAgICAgICAgICAgICAnZGVwdGggcmFuZ2UgbXVzdCBiZSBhIDJkIGFycmF5JylcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICB2YXIgWl9ORUFSID0gc2NvcGUuZGVmKCcrJywgdmFsdWUsICdbMF0nKVxuICAgICAgICAgICAgICB2YXIgWl9GQVIgPSBzY29wZS5kZWYoJysnLCB2YWx1ZSwgJ1sxXScpXG4gICAgICAgICAgICAgIHJldHVybiBbWl9ORUFSLCBaX0ZBUl1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0JMRU5EX0ZVTkM6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZSh2YWx1ZSwgJ29iamVjdCcsICdibGVuZC5mdW5jJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHZhciBzcmNSR0IgPSAoJ3NyY1JHQicgaW4gdmFsdWUgPyB2YWx1ZS5zcmNSR0IgOiB2YWx1ZS5zcmMpXG4gICAgICAgICAgICAgIHZhciBzcmNBbHBoYSA9ICgnc3JjQWxwaGEnIGluIHZhbHVlID8gdmFsdWUuc3JjQWxwaGEgOiB2YWx1ZS5zcmMpXG4gICAgICAgICAgICAgIHZhciBkc3RSR0IgPSAoJ2RzdFJHQicgaW4gdmFsdWUgPyB2YWx1ZS5kc3RSR0IgOiB2YWx1ZS5kc3QpXG4gICAgICAgICAgICAgIHZhciBkc3RBbHBoYSA9ICgnZHN0QWxwaGEnIGluIHZhbHVlID8gdmFsdWUuZHN0QWxwaGEgOiB2YWx1ZS5kc3QpXG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcihzcmNSR0IsIGJsZW5kRnVuY3MsIHBhcmFtICsgJy5zcmNSR0InLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKHNyY0FscGhhLCBibGVuZEZ1bmNzLCBwYXJhbSArICcuc3JjQWxwaGEnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKGRzdFJHQiwgYmxlbmRGdW5jcywgcGFyYW0gKyAnLmRzdFJHQicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoZHN0QWxwaGEsIGJsZW5kRnVuY3MsIHBhcmFtICsgJy5kc3RBbHBoYScsIGVudi5jb21tYW5kU3RyKVxuXG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAoaW52YWxpZEJsZW5kQ29tYmluYXRpb25zLmluZGV4T2Yoc3JjUkdCICsgJywgJyArIGRzdFJHQikgPT09IC0xKSxcbiAgICAgICAgICAgICAgICAndW5hbGxvd2VkIGJsZW5kaW5nIGNvbWJpbmF0aW9uIChzcmNSR0IsIGRzdFJHQikgPSAoJyArIHNyY1JHQiArICcsICcgKyBkc3RSR0IgKyAnKScsIGVudi5jb21tYW5kU3RyKVxuXG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgYmxlbmRGdW5jc1tzcmNSR0JdLFxuICAgICAgICAgICAgICAgIGJsZW5kRnVuY3NbZHN0UkdCXSxcbiAgICAgICAgICAgICAgICBibGVuZEZ1bmNzW3NyY0FscGhhXSxcbiAgICAgICAgICAgICAgICBibGVuZEZ1bmNzW2RzdEFscGhhXVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgIHZhciBCTEVORF9GVU5DUyA9IGVudi5jb25zdGFudHMuYmxlbmRGdW5jc1xuXG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICcmJnR5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJvYmplY3RcIicsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBibGVuZCBmdW5jLCBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZCAocHJlZml4LCBzdWZmaXgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnVuYyA9IHNjb3BlLmRlZihcbiAgICAgICAgICAgICAgICAgICdcIicsIHByZWZpeCwgc3VmZml4LCAnXCIgaW4gJywgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAnPycsIHZhbHVlLCAnLicsIHByZWZpeCwgc3VmZml4LFxuICAgICAgICAgICAgICAgICAgJzonLCB2YWx1ZSwgJy4nLCBwcmVmaXgpXG5cbiAgICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICAgIGZ1bmMgKyAnIGluICcgKyBCTEVORF9GVU5DUyxcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgJyArIHByb3AgKyAnLicgKyBwcmVmaXggKyBzdWZmaXggKyAnLCBtdXN0IGJlIG9uZSBvZiAnICsgT2JqZWN0LmtleXMoYmxlbmRGdW5jcykpXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgc3JjUkdCID0gcmVhZCgnc3JjJywgJ1JHQicpXG4gICAgICAgICAgICAgIHZhciBkc3RSR0IgPSByZWFkKCdkc3QnLCAnUkdCJylcblxuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgSU5WQUxJRF9CTEVORF9DT01CSU5BVElPTlMgPSBlbnYuY29uc3RhbnRzLmludmFsaWRCbGVuZENvbWJpbmF0aW9uc1xuXG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIElOVkFMSURfQkxFTkRfQ09NQklOQVRJT05TICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICcuaW5kZXhPZignICsgc3JjUkdCICsgJytcIiwgXCIrJyArIGRzdFJHQiArICcpID09PSAtMSAnLFxuICAgICAgICAgICAgICAgICAgJ3VuYWxsb3dlZCBibGVuZGluZyBjb21iaW5hdGlvbiBmb3IgKHNyY1JHQiwgZHN0UkdCKSdcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgdmFyIFNSQ19SR0IgPSBzY29wZS5kZWYoQkxFTkRfRlVOQ1MsICdbJywgc3JjUkdCLCAnXScpXG4gICAgICAgICAgICAgIHZhciBTUkNfQUxQSEEgPSBzY29wZS5kZWYoQkxFTkRfRlVOQ1MsICdbJywgcmVhZCgnc3JjJywgJ0FscGhhJyksICddJylcbiAgICAgICAgICAgICAgdmFyIERTVF9SR0IgPSBzY29wZS5kZWYoQkxFTkRfRlVOQ1MsICdbJywgZHN0UkdCLCAnXScpXG4gICAgICAgICAgICAgIHZhciBEU1RfQUxQSEEgPSBzY29wZS5kZWYoQkxFTkRfRlVOQ1MsICdbJywgcmVhZCgnZHN0JywgJ0FscGhhJyksICddJylcblxuICAgICAgICAgICAgICByZXR1cm4gW1NSQ19SR0IsIERTVF9SR0IsIFNSQ19BTFBIQSwgRFNUX0FMUEhBXVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfQkxFTkRfRVFVQVRJT046XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIodmFsdWUsIGJsZW5kRXF1YXRpb25zLCAnaW52YWxpZCAnICsgcHJvcCwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgIGJsZW5kRXF1YXRpb25zW3ZhbHVlXSxcbiAgICAgICAgICAgICAgICAgIGJsZW5kRXF1YXRpb25zW3ZhbHVlXVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKFxuICAgICAgICAgICAgICAgICAgdmFsdWUucmdiLCBibGVuZEVxdWF0aW9ucywgcHJvcCArICcucmdiJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKFxuICAgICAgICAgICAgICAgICAgdmFsdWUuYWxwaGEsIGJsZW5kRXF1YXRpb25zLCBwcm9wICsgJy5hbHBoYScsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICBibGVuZEVxdWF0aW9uc1t2YWx1ZS5yZ2JdLFxuICAgICAgICAgICAgICAgICAgYmxlbmRFcXVhdGlvbnNbdmFsdWUuYWxwaGFdXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFJhaXNlKCdpbnZhbGlkIGJsZW5kLmVxdWF0aW9uJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFyIEJMRU5EX0VRVUFUSU9OUyA9IGVudi5jb25zdGFudHMuYmxlbmRFcXVhdGlvbnNcblxuICAgICAgICAgICAgICB2YXIgUkdCID0gc2NvcGUuZGVmKClcbiAgICAgICAgICAgICAgdmFyIEFMUEhBID0gc2NvcGUuZGVmKClcblxuICAgICAgICAgICAgICB2YXIgaWZ0ZSA9IGVudi5jb25kKCd0eXBlb2YgJywgdmFsdWUsICc9PT1cInN0cmluZ1wiJylcblxuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGVja1Byb3AgKGJsb2NrLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgZW52LmFzc2VydChibG9jayxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnIGluICcgKyBCTEVORF9FUVVBVElPTlMsXG4gICAgICAgICAgICAgICAgICAgICdpbnZhbGlkICcgKyBuYW1lICsgJywgbXVzdCBiZSBvbmUgb2YgJyArIE9iamVjdC5rZXlzKGJsZW5kRXF1YXRpb25zKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hlY2tQcm9wKGlmdGUudGhlbiwgcHJvcCwgdmFsdWUpXG5cbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KGlmdGUuZWxzZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJyYmdHlwZW9mICcgKyB2YWx1ZSArICc9PT1cIm9iamVjdFwiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkICcgKyBwcm9wKVxuICAgICAgICAgICAgICAgIGNoZWNrUHJvcChpZnRlLmVsc2UsIHByb3AgKyAnLnJnYicsIHZhbHVlICsgJy5yZ2InKVxuICAgICAgICAgICAgICAgIGNoZWNrUHJvcChpZnRlLmVsc2UsIHByb3AgKyAnLmFscGhhJywgdmFsdWUgKyAnLmFscGhhJylcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBpZnRlLnRoZW4oXG4gICAgICAgICAgICAgICAgUkdCLCAnPScsIEFMUEhBLCAnPScsIEJMRU5EX0VRVUFUSU9OUywgJ1snLCB2YWx1ZSwgJ107JylcbiAgICAgICAgICAgICAgaWZ0ZS5lbHNlKFxuICAgICAgICAgICAgICAgIFJHQiwgJz0nLCBCTEVORF9FUVVBVElPTlMsICdbJywgdmFsdWUsICcucmdiXTsnLFxuICAgICAgICAgICAgICAgIEFMUEhBLCAnPScsIEJMRU5EX0VRVUFUSU9OUywgJ1snLCB2YWx1ZSwgJy5hbHBoYV07JylcblxuICAgICAgICAgICAgICBzY29wZShpZnRlKVxuXG4gICAgICAgICAgICAgIHJldHVybiBbUkdCLCBBTFBIQV1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0JMRU5EX0NPTE9SOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZS5sZW5ndGggPT09IDQsXG4gICAgICAgICAgICAgICAgJ2JsZW5kLmNvbG9yIG11c3QgYmUgYSA0ZCBhcnJheScsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gbG9vcCg0LCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiArdmFsdWVbaV1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIGVudi5zaGFyZWQuaXNBcnJheUxpa2UgKyAnKCcgKyB2YWx1ZSArICcpJiYnICtcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJy5sZW5ndGg9PT00JyxcbiAgICAgICAgICAgICAgICAgICdibGVuZC5jb2xvciBtdXN0IGJlIGEgNGQgYXJyYXknKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXR1cm4gbG9vcCg0LCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoJysnLCB2YWx1ZSwgJ1snLCBpLCAnXScpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIGNhc2UgU19TVEVOQ0lMX01BU0s6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZSh2YWx1ZSwgJ251bWJlcicsIHBhcmFtLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIHwgMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgJ3R5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJudW1iZXJcIicsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBzdGVuY2lsLm1hc2snKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKHZhbHVlLCAnfDAnKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfU1RFTkNJTF9GVU5DOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdvYmplY3QnLCBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHZhciBjbXAgPSB2YWx1ZS5jbXAgfHwgJ2tlZXAnXG4gICAgICAgICAgICAgIHZhciByZWYgPSB2YWx1ZS5yZWYgfHwgMFxuICAgICAgICAgICAgICB2YXIgbWFzayA9ICdtYXNrJyBpbiB2YWx1ZSA/IHZhbHVlLm1hc2sgOiAtMVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoY21wLCBjb21wYXJlRnVuY3MsIHByb3AgKyAnLmNtcCcsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHJlZiwgJ251bWJlcicsIHByb3AgKyAnLnJlZicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKG1hc2ssICdudW1iZXInLCBwcm9wICsgJy5tYXNrJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgY29tcGFyZUZ1bmNzW2NtcF0sXG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIG1hc2tcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICB2YXIgQ09NUEFSRV9GVU5DUyA9IGVudi5jb25zdGFudHMuY29tcGFyZUZ1bmNzXG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzc2VydCAoKSB7XG4gICAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywgJycpLFxuICAgICAgICAgICAgICAgICAgICAnaW52YWxpZCBzdGVuY2lsLmZ1bmMnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3NlcnQodmFsdWUgKyAnJiZ0eXBlb2YgJywgdmFsdWUsICc9PT1cIm9iamVjdFwiJylcbiAgICAgICAgICAgICAgICBhc3NlcnQoJyEoXCJjbXBcIiBpbiAnLCB2YWx1ZSwgJyl8fCgnLFxuICAgICAgICAgICAgICAgICAgdmFsdWUsICcuY21wIGluICcsIENPTVBBUkVfRlVOQ1MsICcpJylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgdmFyIGNtcCA9IHNjb3BlLmRlZihcbiAgICAgICAgICAgICAgICAnXCJjbXBcIiBpbiAnLCB2YWx1ZSxcbiAgICAgICAgICAgICAgICAnPycsIENPTVBBUkVfRlVOQ1MsICdbJywgdmFsdWUsICcuY21wXScsXG4gICAgICAgICAgICAgICAgJzonLCBHTF9LRUVQKVxuICAgICAgICAgICAgICB2YXIgcmVmID0gc2NvcGUuZGVmKHZhbHVlLCAnLnJlZnwwJylcbiAgICAgICAgICAgICAgdmFyIG1hc2sgPSBzY29wZS5kZWYoXG4gICAgICAgICAgICAgICAgJ1wibWFza1wiIGluICcsIHZhbHVlLFxuICAgICAgICAgICAgICAgICc/JywgdmFsdWUsICcubWFza3wwOi0xJylcbiAgICAgICAgICAgICAgcmV0dXJuIFtjbXAsIHJlZiwgbWFza11cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX1NURU5DSUxfT1BGUk9OVDpcbiAgICAgICAgY2FzZSBTX1NURU5DSUxfT1BCQUNLOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdvYmplY3QnLCBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHZhciBmYWlsID0gdmFsdWUuZmFpbCB8fCAna2VlcCdcbiAgICAgICAgICAgICAgdmFyIHpmYWlsID0gdmFsdWUuemZhaWwgfHwgJ2tlZXAnXG4gICAgICAgICAgICAgIHZhciB6cGFzcyA9IHZhbHVlLnpwYXNzIHx8ICdrZWVwJ1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoZmFpbCwgc3RlbmNpbE9wcywgcHJvcCArICcuZmFpbCcsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoemZhaWwsIHN0ZW5jaWxPcHMsIHByb3AgKyAnLnpmYWlsJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcih6cGFzcywgc3RlbmNpbE9wcywgcHJvcCArICcuenBhc3MnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwcm9wID09PSBTX1NURU5DSUxfT1BCQUNLID8gR0xfQkFDSyA6IEdMX0ZST05ULFxuICAgICAgICAgICAgICAgIHN0ZW5jaWxPcHNbZmFpbF0sXG4gICAgICAgICAgICAgICAgc3RlbmNpbE9wc1t6ZmFpbF0sXG4gICAgICAgICAgICAgICAgc3RlbmNpbE9wc1t6cGFzc11cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICB2YXIgU1RFTkNJTF9PUFMgPSBlbnYuY29uc3RhbnRzLnN0ZW5jaWxPcHNcblxuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnJiZ0eXBlb2YgJyArIHZhbHVlICsgJz09PVwib2JqZWN0XCInLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgJyArIHByb3ApXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZCAobmFtZSkge1xuICAgICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgICAgJyEoXCInICsgbmFtZSArICdcIiBpbiAnICsgdmFsdWUgKyAnKXx8JyArXG4gICAgICAgICAgICAgICAgICAgICcoJyArIHZhbHVlICsgJy4nICsgbmFtZSArICcgaW4gJyArIFNURU5DSUxfT1BTICsgJyknLFxuICAgICAgICAgICAgICAgICAgICAnaW52YWxpZCAnICsgcHJvcCArICcuJyArIG5hbWUgKyAnLCBtdXN0IGJlIG9uZSBvZiAnICsgT2JqZWN0LmtleXMoc3RlbmNpbE9wcykpXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoXG4gICAgICAgICAgICAgICAgICAnXCInLCBuYW1lLCAnXCIgaW4gJywgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAnPycsIFNURU5DSUxfT1BTLCAnWycsIHZhbHVlLCAnLicsIG5hbWUsICddOicsXG4gICAgICAgICAgICAgICAgICBHTF9LRUVQKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwcm9wID09PSBTX1NURU5DSUxfT1BCQUNLID8gR0xfQkFDSyA6IEdMX0ZST05ULFxuICAgICAgICAgICAgICAgIHJlYWQoJ2ZhaWwnKSxcbiAgICAgICAgICAgICAgICByZWFkKCd6ZmFpbCcpLFxuICAgICAgICAgICAgICAgIHJlYWQoJ3pwYXNzJylcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfUE9MWUdPTl9PRkZTRVRfT0ZGU0VUOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdvYmplY3QnLCBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHZhciBmYWN0b3IgPSB2YWx1ZS5mYWN0b3IgfCAwXG4gICAgICAgICAgICAgIHZhciB1bml0cyA9IHZhbHVlLnVuaXRzIHwgMFxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKGZhY3RvciwgJ251bWJlcicsIHBhcmFtICsgJy5mYWN0b3InLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZSh1bml0cywgJ251bWJlcicsIHBhcmFtICsgJy51bml0cycsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gW2ZhY3RvciwgdW5pdHNdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICcmJnR5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJvYmplY3RcIicsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCAnICsgcHJvcClcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICB2YXIgRkFDVE9SID0gc2NvcGUuZGVmKHZhbHVlLCAnLmZhY3RvcnwwJylcbiAgICAgICAgICAgICAgdmFyIFVOSVRTID0gc2NvcGUuZGVmKHZhbHVlLCAnLnVuaXRzfDAnKVxuXG4gICAgICAgICAgICAgIHJldHVybiBbRkFDVE9SLCBVTklUU11cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0NVTExfRkFDRTpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICB2YXIgZmFjZSA9IDBcbiAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnZnJvbnQnKSB7XG4gICAgICAgICAgICAgICAgZmFjZSA9IEdMX0ZST05UXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdiYWNrJykge1xuICAgICAgICAgICAgICAgIGZhY2UgPSBHTF9CQUNLXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKCEhZmFjZSwgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gZmFjZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnPT09XCJmcm9udFwifHwnICtcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJz09PVwiYmFja1wiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGN1bGwuZmFjZScpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYodmFsdWUsICc9PT1cImZyb250XCI/JywgR0xfRlJPTlQsICc6JywgR0xfQkFDSylcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0xJTkVfV0lEVEg6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZSA+PSBsaW1pdHMubGluZVdpZHRoRGltc1swXSAmJlxuICAgICAgICAgICAgICAgIHZhbHVlIDw9IGxpbWl0cy5saW5lV2lkdGhEaW1zWzFdLFxuICAgICAgICAgICAgICAgICdpbnZhbGlkIGxpbmUgd2lkdGgsIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgYmV0d2VlbiAnICtcbiAgICAgICAgICAgICAgICBsaW1pdHMubGluZVdpZHRoRGltc1swXSArICcgYW5kICcgKyBsaW1pdHMubGluZVdpZHRoRGltc1sxXSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgJ3R5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJudW1iZXJcIiYmJyArXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICc+PScgKyBsaW1pdHMubGluZVdpZHRoRGltc1swXSArICcmJicgK1xuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnPD0nICsgbGltaXRzLmxpbmVXaWR0aERpbXNbMV0sXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBsaW5lIHdpZHRoJylcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0ZST05UX0ZBQ0U6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKHZhbHVlLCBvcmllbnRhdGlvblR5cGUsIHBhcmFtLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uVHlwZVt2YWx1ZV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJz09PVwiY3dcInx8JyArXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICc9PT1cImNjd1wiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGZyb250RmFjZSwgbXVzdCBiZSBvbmUgb2YgY3csY2N3JylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZih2YWx1ZSArICc9PT1cImN3XCI/JyArIEdMX0NXICsgJzonICsgR0xfQ0NXKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfQ09MT1JfTUFTSzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gNCxcbiAgICAgICAgICAgICAgICAnY29sb3IubWFzayBtdXN0IGJlIGxlbmd0aCA0IGFycmF5JywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICEhdiB9KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgZW52LnNoYXJlZC5pc0FycmF5TGlrZSArICcoJyArIHZhbHVlICsgJykmJicgK1xuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnLmxlbmd0aD09PTQnLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgY29sb3IubWFzaycpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJldHVybiBsb29wKDQsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICchIScgKyB2YWx1ZSArICdbJyArIGkgKyAnXSdcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX1NBTVBMRV9DT1ZFUkFHRTpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSwgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICB2YXIgc2FtcGxlVmFsdWUgPSAndmFsdWUnIGluIHZhbHVlID8gdmFsdWUudmFsdWUgOiAxXG4gICAgICAgICAgICAgIHZhciBzYW1wbGVJbnZlcnQgPSAhIXZhbHVlLmludmVydFxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgdHlwZW9mIHNhbXBsZVZhbHVlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgIHNhbXBsZVZhbHVlID49IDAgJiYgc2FtcGxlVmFsdWUgPD0gMSxcbiAgICAgICAgICAgICAgICAnc2FtcGxlLmNvdmVyYWdlLnZhbHVlIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiBbc2FtcGxlVmFsdWUsIHNhbXBsZUludmVydF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJyYmdHlwZW9mICcgKyB2YWx1ZSArICc9PT1cIm9iamVjdFwiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIHNhbXBsZS5jb3ZlcmFnZScpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHZhciBWQUxVRSA9IHNjb3BlLmRlZihcbiAgICAgICAgICAgICAgICAnXCJ2YWx1ZVwiIGluICcsIHZhbHVlLCAnPysnLCB2YWx1ZSwgJy52YWx1ZToxJylcbiAgICAgICAgICAgICAgdmFyIElOVkVSVCA9IHNjb3BlLmRlZignISEnLCB2YWx1ZSwgJy5pbnZlcnQnKVxuICAgICAgICAgICAgICByZXR1cm4gW1ZBTFVFLCBJTlZFUlRdXG4gICAgICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gU1RBVEVcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVW5pZm9ybXMgKHVuaWZvcm1zLCBlbnYpIHtcbiAgICB2YXIgc3RhdGljVW5pZm9ybXMgPSB1bmlmb3Jtcy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY1VuaWZvcm1zID0gdW5pZm9ybXMuZHluYW1pY1xuXG4gICAgdmFyIFVOSUZPUk1TID0ge31cblxuICAgIE9iamVjdC5rZXlzKHN0YXRpY1VuaWZvcm1zKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBzdGF0aWNVbmlmb3Jtc1tuYW1lXVxuICAgICAgdmFyIHJlc3VsdFxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciByZWdsVHlwZSA9IHZhbHVlLl9yZWdsVHlwZVxuICAgICAgICBpZiAocmVnbFR5cGUgPT09ICd0ZXh0dXJlMmQnIHx8XG4gICAgICAgICAgICByZWdsVHlwZSA9PT0gJ3RleHR1cmVDdWJlJykge1xuICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudikge1xuICAgICAgICAgICAgcmV0dXJuIGVudi5saW5rKHZhbHVlKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAocmVnbFR5cGUgPT09ICdmcmFtZWJ1ZmZlcicgfHxcbiAgICAgICAgICAgICAgICAgICByZWdsVHlwZSA9PT0gJ2ZyYW1lYnVmZmVyQ3ViZScpIHtcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQodmFsdWUuY29sb3IubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICdtaXNzaW5nIGNvbG9yIGF0dGFjaG1lbnQgZm9yIGZyYW1lYnVmZmVyIHNlbnQgdG8gdW5pZm9ybSBcIicgKyBuYW1lICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgcmVzdWx0ID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52KSB7XG4gICAgICAgICAgICByZXR1cm4gZW52LmxpbmsodmFsdWUuY29sb3JbMF0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmRSYWlzZSgnaW52YWxpZCBkYXRhIGZvciB1bmlmb3JtIFwiJyArIG5hbWUgKyAnXCInLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0ID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52KSB7XG4gICAgICAgICAgdmFyIElURU0gPSBlbnYuZ2xvYmFsLmRlZignWycsXG4gICAgICAgICAgICBsb29wKHZhbHVlLmxlbmd0aCwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZVtpXSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWVbaV0gPT09ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCB1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlW2ldXG4gICAgICAgICAgICB9KSwgJ10nKVxuICAgICAgICAgIHJldHVybiBJVEVNXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVjayQxLmNvbW1hbmRSYWlzZSgnaW52YWxpZCBvciBtaXNzaW5nIGRhdGEgZm9yIHVuaWZvcm0gXCInICsgbmFtZSArICdcIicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgfVxuICAgICAgcmVzdWx0LnZhbHVlID0gdmFsdWVcbiAgICAgIFVOSUZPUk1TW25hbWVdID0gcmVzdWx0XG4gICAgfSlcblxuICAgIE9iamVjdC5rZXlzKGR5bmFtaWNVbmlmb3JtcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY1VuaWZvcm1zW2tleV1cbiAgICAgIFVOSUZPUk1TW2tleV0gPSBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgIHJldHVybiBlbnYuaW52b2tlKHNjb3BlLCBkeW4pXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gVU5JRk9STVNcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlcyAoYXR0cmlidXRlcywgZW52KSB7XG4gICAgdmFyIHN0YXRpY0F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLnN0YXRpY1xuICAgIHZhciBkeW5hbWljQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZHluYW1pY1xuXG4gICAgdmFyIGF0dHJpYnV0ZURlZnMgPSB7fVxuXG4gICAgT2JqZWN0LmtleXMoc3RhdGljQXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICB2YXIgdmFsdWUgPSBzdGF0aWNBdHRyaWJ1dGVzW2F0dHJpYnV0ZV1cbiAgICAgIHZhciBpZCA9IHN0cmluZ1N0b3JlLmlkKGF0dHJpYnV0ZSlcblxuICAgICAgdmFyIHJlY29yZCA9IG5ldyBBdHRyaWJ1dGVSZWNvcmQoKVxuICAgICAgaWYgKGlzQnVmZmVyQXJncyh2YWx1ZSkpIHtcbiAgICAgICAgcmVjb3JkLnN0YXRlID0gQVRUUklCX1NUQVRFX1BPSU5URVJcbiAgICAgICAgcmVjb3JkLmJ1ZmZlciA9IGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihcbiAgICAgICAgICBidWZmZXJTdGF0ZS5jcmVhdGUodmFsdWUsIEdMX0FSUkFZX0JVRkZFUiQyLCBmYWxzZSwgdHJ1ZSkpXG4gICAgICAgIHJlY29yZC50eXBlID0gMFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcih2YWx1ZSlcbiAgICAgICAgaWYgKGJ1ZmZlcikge1xuICAgICAgICAgIHJlY29yZC5zdGF0ZSA9IEFUVFJJQl9TVEFURV9QT0lOVEVSXG4gICAgICAgICAgcmVjb3JkLmJ1ZmZlciA9IGJ1ZmZlclxuICAgICAgICAgIHJlY29yZC50eXBlID0gMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrJDEuY29tbWFuZCh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLFxuICAgICAgICAgICAgJ2ludmFsaWQgZGF0YSBmb3IgYXR0cmlidXRlICcgKyBhdHRyaWJ1dGUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgIGlmICgnY29uc3RhbnQnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgY29uc3RhbnQgPSB2YWx1ZS5jb25zdGFudFxuICAgICAgICAgICAgcmVjb3JkLmJ1ZmZlciA9ICdudWxsJ1xuICAgICAgICAgICAgcmVjb3JkLnN0YXRlID0gQVRUUklCX1NUQVRFX0NPTlNUQU5UXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnN0YW50ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICByZWNvcmQueCA9IGNvbnN0YW50XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgaXNBcnJheUxpa2UoY29uc3RhbnQpICYmXG4gICAgICAgICAgICAgICAgY29uc3RhbnQubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIGNvbnN0YW50Lmxlbmd0aCA8PSA0LFxuICAgICAgICAgICAgICAgICdpbnZhbGlkIGNvbnN0YW50IGZvciBhdHRyaWJ1dGUgJyArIGF0dHJpYnV0ZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIENVVEVfQ09NUE9ORU5UUy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPCBjb25zdGFudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIHJlY29yZFtjXSA9IGNvbnN0YW50W2ldXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNCdWZmZXJBcmdzKHZhbHVlLmJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyU3RhdGUuZ2V0QnVmZmVyKFxuICAgICAgICAgICAgICAgIGJ1ZmZlclN0YXRlLmNyZWF0ZSh2YWx1ZS5idWZmZXIsIEdMX0FSUkFZX0JVRkZFUiQyLCBmYWxzZSwgdHJ1ZSkpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXJTdGF0ZS5nZXRCdWZmZXIodmFsdWUuYnVmZmVyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKCEhYnVmZmVyLCAnbWlzc2luZyBidWZmZXIgZm9yIGF0dHJpYnV0ZSBcIicgKyBhdHRyaWJ1dGUgKyAnXCInLCBlbnYuY29tbWFuZFN0cilcblxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHZhbHVlLm9mZnNldCB8IDBcbiAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChvZmZzZXQgPj0gMCxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgb2Zmc2V0IGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG5cbiAgICAgICAgICAgIHZhciBzdHJpZGUgPSB2YWx1ZS5zdHJpZGUgfCAwXG4gICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoc3RyaWRlID49IDAgJiYgc3RyaWRlIDwgMjU2LFxuICAgICAgICAgICAgICAnaW52YWxpZCBzdHJpZGUgZm9yIGF0dHJpYnV0ZSBcIicgKyBhdHRyaWJ1dGUgKyAnXCIsIG11c3QgYmUgaW50ZWdlciBiZXR3ZWVlbiBbMCwgMjU1XScsIGVudi5jb21tYW5kU3RyKVxuXG4gICAgICAgICAgICB2YXIgc2l6ZSA9IHZhbHVlLnNpemUgfCAwXG4gICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoISgnc2l6ZScgaW4gdmFsdWUpIHx8IChzaXplID4gMCAmJiBzaXplIDw9IDQpLFxuICAgICAgICAgICAgICAnaW52YWxpZCBzaXplIGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiLCBtdXN0IGJlIDEsMiwzLDQnLCBlbnYuY29tbWFuZFN0cilcblxuICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWQgPSAhIXZhbHVlLm5vcm1hbGl6ZWRcblxuICAgICAgICAgICAgdmFyIHR5cGUgPSAwXG4gICAgICAgICAgICBpZiAoJ3R5cGUnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcihcbiAgICAgICAgICAgICAgICB2YWx1ZS50eXBlLCBnbFR5cGVzLFxuICAgICAgICAgICAgICAgICdpbnZhbGlkIHR5cGUgZm9yIGF0dHJpYnV0ZSAnICsgYXR0cmlidXRlLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgdHlwZSA9IGdsVHlwZXNbdmFsdWUudHlwZV1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGRpdmlzb3IgPSB2YWx1ZS5kaXZpc29yIHwgMFxuICAgICAgICAgICAgaWYgKCdkaXZpc29yJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoZGl2aXNvciA9PT0gMCB8fCBleHRJbnN0YW5jaW5nLFxuICAgICAgICAgICAgICAgICdjYW5ub3Qgc3BlY2lmeSBkaXZpc29yIGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiLCBpbnN0YW5jaW5nIG5vdCBzdXBwb3J0ZWQnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKGRpdmlzb3IgPj0gMCxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBkaXZpc29yIGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgY29tbWFuZCA9IGVudi5jb21tYW5kU3RyXG5cbiAgICAgICAgICAgICAgdmFyIFZBTElEX0tFWVMgPSBbXG4gICAgICAgICAgICAgICAgJ2J1ZmZlcicsXG4gICAgICAgICAgICAgICAgJ29mZnNldCcsXG4gICAgICAgICAgICAgICAgJ2Rpdmlzb3InLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJyxcbiAgICAgICAgICAgICAgICAndHlwZScsXG4gICAgICAgICAgICAgICAgJ3NpemUnLFxuICAgICAgICAgICAgICAgICdzdHJpZGUnXG4gICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIFZBTElEX0tFWVMuaW5kZXhPZihwcm9wKSA+PSAwLFxuICAgICAgICAgICAgICAgICAgJ3Vua25vd24gcGFyYW1ldGVyIFwiJyArIHByb3AgKyAnXCIgZm9yIGF0dHJpYnV0ZSBwb2ludGVyIFwiJyArIGF0dHJpYnV0ZSArICdcIiAodmFsaWQgcGFyYW1ldGVycyBhcmUgJyArIFZBTElEX0tFWVMgKyAnKScsXG4gICAgICAgICAgICAgICAgICBjb21tYW5kKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmVjb3JkLmJ1ZmZlciA9IGJ1ZmZlclxuICAgICAgICAgICAgcmVjb3JkLnN0YXRlID0gQVRUUklCX1NUQVRFX1BPSU5URVJcbiAgICAgICAgICAgIHJlY29yZC5zaXplID0gc2l6ZVxuICAgICAgICAgICAgcmVjb3JkLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkXG4gICAgICAgICAgICByZWNvcmQudHlwZSA9IHR5cGUgfHwgYnVmZmVyLmR0eXBlXG4gICAgICAgICAgICByZWNvcmQub2Zmc2V0ID0gb2Zmc2V0XG4gICAgICAgICAgICByZWNvcmQuc3RyaWRlID0gc3RyaWRlXG4gICAgICAgICAgICByZWNvcmQuZGl2aXNvciA9IGRpdmlzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXR0cmlidXRlRGVmc1thdHRyaWJ1dGVdID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICB2YXIgY2FjaGUgPSBlbnYuYXR0cmliQ2FjaGVcbiAgICAgICAgaWYgKGlkIGluIGNhY2hlKSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlW2lkXVxuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgICAgaXNTdHJlYW06IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmtleXMocmVjb3JkKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHJlY29yZFtrZXldXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZWNvcmQuYnVmZmVyKSB7XG4gICAgICAgICAgcmVzdWx0LmJ1ZmZlciA9IGVudi5saW5rKHJlY29yZC5idWZmZXIpXG4gICAgICAgICAgcmVzdWx0LnR5cGUgPSByZXN1bHQudHlwZSB8fCAocmVzdWx0LmJ1ZmZlciArICcuZHR5cGUnKVxuICAgICAgICB9XG4gICAgICAgIGNhY2hlW2lkXSA9IHJlc3VsdFxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBPYmplY3Qua2V5cyhkeW5hbWljQXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY0F0dHJpYnV0ZXNbYXR0cmlidXRlXVxuXG4gICAgICBmdW5jdGlvbiBhcHBlbmRBdHRyaWJ1dGVDb2RlIChlbnYsIGJsb2NrKSB7XG4gICAgICAgIHZhciBWQUxVRSA9IGVudi5pbnZva2UoYmxvY2ssIGR5bilcblxuICAgICAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuICAgICAgICB2YXIgY29uc3RhbnRzID0gZW52LmNvbnN0YW50c1xuXG4gICAgICAgIHZhciBJU19CVUZGRVJfQVJHUyA9IHNoYXJlZC5pc0J1ZmZlckFyZ3NcbiAgICAgICAgdmFyIEJVRkZFUl9TVEFURSA9IHNoYXJlZC5idWZmZXJcblxuICAgICAgICAvLyBQZXJmb3JtIHZhbGlkYXRpb24gb24gYXR0cmlidXRlXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVudi5hc3NlcnQoYmxvY2ssXG4gICAgICAgICAgICBWQUxVRSArICcmJih0eXBlb2YgJyArIFZBTFVFICsgJz09PVwib2JqZWN0XCJ8fHR5cGVvZiAnICtcbiAgICAgICAgICAgIFZBTFVFICsgJz09PVwiZnVuY3Rpb25cIikmJignICtcbiAgICAgICAgICAgIElTX0JVRkZFUl9BUkdTICsgJygnICsgVkFMVUUgKyAnKXx8JyArXG4gICAgICAgICAgICBCVUZGRVJfU1RBVEUgKyAnLmdldEJ1ZmZlcignICsgVkFMVUUgKyAnKXx8JyArXG4gICAgICAgICAgICBCVUZGRVJfU1RBVEUgKyAnLmdldEJ1ZmZlcignICsgVkFMVUUgKyAnLmJ1ZmZlcil8fCcgK1xuICAgICAgICAgICAgSVNfQlVGRkVSX0FSR1MgKyAnKCcgKyBWQUxVRSArICcuYnVmZmVyKXx8JyArXG4gICAgICAgICAgICAnKFwiY29uc3RhbnRcIiBpbiAnICsgVkFMVUUgK1xuICAgICAgICAgICAgJyYmKHR5cGVvZiAnICsgVkFMVUUgKyAnLmNvbnN0YW50PT09XCJudW1iZXJcInx8JyArXG4gICAgICAgICAgICBzaGFyZWQuaXNBcnJheUxpa2UgKyAnKCcgKyBWQUxVRSArICcuY29uc3RhbnQpKSkpJyxcbiAgICAgICAgICAgICdpbnZhbGlkIGR5bmFtaWMgYXR0cmlidXRlIFwiJyArIGF0dHJpYnV0ZSArICdcIicpXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gYWxsb2NhdGUgbmFtZXMgZm9yIHJlc3VsdFxuICAgICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICAgIGlzU3RyZWFtOiBibG9jay5kZWYoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlZmF1bHRSZWNvcmQgPSBuZXcgQXR0cmlidXRlUmVjb3JkKClcbiAgICAgICAgZGVmYXVsdFJlY29yZC5zdGF0ZSA9IEFUVFJJQl9TVEFURV9QT0lOVEVSXG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRSZWNvcmQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gYmxvY2suZGVmKCcnICsgZGVmYXVsdFJlY29yZFtrZXldKVxuICAgICAgICB9KVxuXG4gICAgICAgIHZhciBCVUZGRVIgPSByZXN1bHQuYnVmZmVyXG4gICAgICAgIHZhciBUWVBFID0gcmVzdWx0LnR5cGVcbiAgICAgICAgYmxvY2soXG4gICAgICAgICAgJ2lmKCcsIElTX0JVRkZFUl9BUkdTLCAnKCcsIFZBTFVFLCAnKSl7JyxcbiAgICAgICAgICByZXN1bHQuaXNTdHJlYW0sICc9dHJ1ZTsnLFxuICAgICAgICAgIEJVRkZFUiwgJz0nLCBCVUZGRVJfU1RBVEUsICcuY3JlYXRlU3RyZWFtKCcsIEdMX0FSUkFZX0JVRkZFUiQyLCAnLCcsIFZBTFVFLCAnKTsnLFxuICAgICAgICAgIFRZUEUsICc9JywgQlVGRkVSLCAnLmR0eXBlOycsXG4gICAgICAgICAgJ31lbHNleycsXG4gICAgICAgICAgQlVGRkVSLCAnPScsIEJVRkZFUl9TVEFURSwgJy5nZXRCdWZmZXIoJywgVkFMVUUsICcpOycsXG4gICAgICAgICAgJ2lmKCcsIEJVRkZFUiwgJyl7JyxcbiAgICAgICAgICBUWVBFLCAnPScsIEJVRkZFUiwgJy5kdHlwZTsnLFxuICAgICAgICAgICd9ZWxzZSBpZihcImNvbnN0YW50XCIgaW4gJywgVkFMVUUsICcpeycsXG4gICAgICAgICAgcmVzdWx0LnN0YXRlLCAnPScsIEFUVFJJQl9TVEFURV9DT05TVEFOVCwgJzsnLFxuICAgICAgICAgICdpZih0eXBlb2YgJyArIFZBTFVFICsgJy5jb25zdGFudCA9PT0gXCJudW1iZXJcIil7JyxcbiAgICAgICAgICByZXN1bHRbQ1VURV9DT01QT05FTlRTWzBdXSwgJz0nLCBWQUxVRSwgJy5jb25zdGFudDsnLFxuICAgICAgICAgIENVVEVfQ09NUE9ORU5UUy5zbGljZSgxKS5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRbbl1cbiAgICAgICAgICB9KS5qb2luKCc9JyksICc9MDsnLFxuICAgICAgICAgICd9ZWxzZXsnLFxuICAgICAgICAgIENVVEVfQ09NUE9ORU5UUy5tYXAoZnVuY3Rpb24gKG5hbWUsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSArICc9JyArIFZBTFVFICsgJy5jb25zdGFudC5sZW5ndGg+JyArIGkgK1xuICAgICAgICAgICAgICAnPycgKyBWQUxVRSArICcuY29uc3RhbnRbJyArIGkgKyAnXTowOydcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KS5qb2luKCcnKSxcbiAgICAgICAgICAnfX1lbHNleycsXG4gICAgICAgICAgJ2lmKCcsIElTX0JVRkZFUl9BUkdTLCAnKCcsIFZBTFVFLCAnLmJ1ZmZlcikpeycsXG4gICAgICAgICAgQlVGRkVSLCAnPScsIEJVRkZFUl9TVEFURSwgJy5jcmVhdGVTdHJlYW0oJywgR0xfQVJSQVlfQlVGRkVSJDIsICcsJywgVkFMVUUsICcuYnVmZmVyKTsnLFxuICAgICAgICAgICd9ZWxzZXsnLFxuICAgICAgICAgIEJVRkZFUiwgJz0nLCBCVUZGRVJfU1RBVEUsICcuZ2V0QnVmZmVyKCcsIFZBTFVFLCAnLmJ1ZmZlcik7JyxcbiAgICAgICAgICAnfScsXG4gICAgICAgICAgVFlQRSwgJz1cInR5cGVcIiBpbiAnLCBWQUxVRSwgJz8nLFxuICAgICAgICAgIGNvbnN0YW50cy5nbFR5cGVzLCAnWycsIFZBTFVFLCAnLnR5cGVdOicsIEJVRkZFUiwgJy5kdHlwZTsnLFxuICAgICAgICAgIHJlc3VsdC5ub3JtYWxpemVkLCAnPSEhJywgVkFMVUUsICcubm9ybWFsaXplZDsnKVxuICAgICAgICBmdW5jdGlvbiBlbWl0UmVhZFJlY29yZCAobmFtZSkge1xuICAgICAgICAgIGJsb2NrKHJlc3VsdFtuYW1lXSwgJz0nLCBWQUxVRSwgJy4nLCBuYW1lLCAnfDA7JylcbiAgICAgICAgfVxuICAgICAgICBlbWl0UmVhZFJlY29yZCgnc2l6ZScpXG4gICAgICAgIGVtaXRSZWFkUmVjb3JkKCdvZmZzZXQnKVxuICAgICAgICBlbWl0UmVhZFJlY29yZCgnc3RyaWRlJylcbiAgICAgICAgZW1pdFJlYWRSZWNvcmQoJ2Rpdmlzb3InKVxuXG4gICAgICAgIGJsb2NrKCd9fScpXG5cbiAgICAgICAgYmxvY2suZXhpdChcbiAgICAgICAgICAnaWYoJywgcmVzdWx0LmlzU3RyZWFtLCAnKXsnLFxuICAgICAgICAgIEJVRkZFUl9TVEFURSwgJy5kZXN0cm95U3RyZWFtKCcsIEJVRkZFUiwgJyk7JyxcbiAgICAgICAgICAnfScpXG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfVxuXG4gICAgICBhdHRyaWJ1dGVEZWZzW2F0dHJpYnV0ZV0gPSBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGFwcGVuZEF0dHJpYnV0ZUNvZGUpXG4gICAgfSlcblxuICAgIHJldHVybiBhdHRyaWJ1dGVEZWZzXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVZBTyAob3B0aW9ucywgZW52KSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuICAgIGlmIChTX1ZBTyBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICB2YXIgdmFvID0gc3RhdGljT3B0aW9uc1tTX1ZBT11cbiAgICAgIGlmICh2YW8gIT09IG51bGwgJiYgYXR0cmlidXRlU3RhdGUuZ2V0VkFPKHZhbykgPT09IG51bGwpIHtcbiAgICAgICAgdmFvID0gYXR0cmlidXRlU3RhdGUuY3JlYXRlVkFPKHZhbylcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYpIHtcbiAgICAgICAgcmV0dXJuIGVudi5saW5rKGF0dHJpYnV0ZVN0YXRlLmdldFZBTyh2YW8pKVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKFNfVkFPIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY09wdGlvbnNbU19WQU9dXG4gICAgICByZXR1cm4gY3JlYXRlRHluYW1pY0RlY2woZHluLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICB2YXIgdmFvUmVmID0gZW52Lmludm9rZShzY29wZSwgZHluKVxuICAgICAgICByZXR1cm4gc2NvcGUuZGVmKGVudi5zaGFyZWQudmFvICsgJy5nZXRWQU8oJyArIHZhb1JlZiArICcpJylcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUNvbnRleHQgKGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGljQ29udGV4dCA9IGNvbnRleHQuc3RhdGljXG4gICAgdmFyIGR5bmFtaWNDb250ZXh0ID0gY29udGV4dC5keW5hbWljXG4gICAgdmFyIHJlc3VsdCA9IHt9XG5cbiAgICBPYmplY3Qua2V5cyhzdGF0aWNDb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBzdGF0aWNDb250ZXh0W25hbWVdXG4gICAgICByZXN1bHRbbmFtZV0gPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgcmV0dXJuICcnICsgdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZW52LmxpbmsodmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIE9iamVjdC5rZXlzKGR5bmFtaWNDb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY0NvbnRleHRbbmFtZV1cbiAgICAgIHJlc3VsdFtuYW1lXSA9IGNyZWF0ZUR5bmFtaWNEZWNsKGR5biwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgcmV0dXJuIGVudi5pbnZva2Uoc2NvcGUsIGR5bilcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzIChvcHRpb25zLCBhdHRyaWJ1dGVzLCB1bmlmb3JtcywgY29udGV4dCwgZW52KSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuXG4gICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgS0VZX05BTUVTID0gW1xuICAgICAgICBTX0ZSQU1FQlVGRkVSLFxuICAgICAgICBTX1ZFUlQsXG4gICAgICAgIFNfRlJBRyxcbiAgICAgICAgU19FTEVNRU5UUyxcbiAgICAgICAgU19QUklNSVRJVkUsXG4gICAgICAgIFNfT0ZGU0VULFxuICAgICAgICBTX0NPVU5ULFxuICAgICAgICBTX0lOU1RBTkNFUyxcbiAgICAgICAgU19QUk9GSUxFLFxuICAgICAgICBTX1ZBT1xuICAgICAgXS5jb25jYXQoR0xfU1RBVEVfTkFNRVMpXG5cbiAgICAgIGZ1bmN0aW9uIGNoZWNrS2V5cyAoZGljdCkge1xuICAgICAgICBPYmplY3Qua2V5cyhkaWN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICBLRVlfTkFNRVMuaW5kZXhPZihrZXkpID49IDAsXG4gICAgICAgICAgICAndW5rbm93biBwYXJhbWV0ZXIgXCInICsga2V5ICsgJ1wiJyxcbiAgICAgICAgICAgIGVudi5jb21tYW5kU3RyKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjaGVja0tleXMoc3RhdGljT3B0aW9ucylcbiAgICAgIGNoZWNrS2V5cyhkeW5hbWljT3B0aW9ucylcbiAgICB9KVxuXG4gICAgdmFyIGF0dHJpYkxvY2F0aW9ucyA9IHBhcnNlQXR0cmliTG9jYXRpb25zKG9wdGlvbnMsIGF0dHJpYnV0ZXMpXG5cbiAgICB2YXIgZnJhbWVidWZmZXIgPSBwYXJzZUZyYW1lYnVmZmVyKG9wdGlvbnMsIGVudilcbiAgICB2YXIgdmlld3BvcnRBbmRTY2lzc29yID0gcGFyc2VWaWV3cG9ydFNjaXNzb3Iob3B0aW9ucywgZnJhbWVidWZmZXIsIGVudilcbiAgICB2YXIgZHJhdyA9IHBhcnNlRHJhdyhvcHRpb25zLCBlbnYpXG4gICAgdmFyIHN0YXRlID0gcGFyc2VHTFN0YXRlKG9wdGlvbnMsIGVudilcbiAgICB2YXIgc2hhZGVyID0gcGFyc2VQcm9ncmFtKG9wdGlvbnMsIGVudiwgYXR0cmliTG9jYXRpb25zKVxuXG4gICAgZnVuY3Rpb24gY29weUJveCAobmFtZSkge1xuICAgICAgdmFyIGRlZm4gPSB2aWV3cG9ydEFuZFNjaXNzb3JbbmFtZV1cbiAgICAgIGlmIChkZWZuKSB7XG4gICAgICAgIHN0YXRlW25hbWVdID0gZGVmblxuICAgICAgfVxuICAgIH1cbiAgICBjb3B5Qm94KFNfVklFV1BPUlQpXG4gICAgY29weUJveChwcm9wTmFtZShTX1NDSVNTT1JfQk9YKSlcblxuICAgIHZhciBkaXJ0eSA9IE9iamVjdC5rZXlzKHN0YXRlKS5sZW5ndGggPiAwXG5cbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgZnJhbWVidWZmZXI6IGZyYW1lYnVmZmVyLFxuICAgICAgZHJhdzogZHJhdyxcbiAgICAgIHNoYWRlcjogc2hhZGVyLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgZGlydHk6IGRpcnR5LFxuICAgICAgc2NvcGVWQU86IG51bGwsXG4gICAgICBkcmF3VkFPOiBudWxsLFxuICAgICAgdXNlVkFPOiBmYWxzZSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9XG4gICAgfVxuXG4gICAgcmVzdWx0LnByb2ZpbGUgPSBwYXJzZVByb2ZpbGUob3B0aW9ucywgZW52KVxuICAgIHJlc3VsdC51bmlmb3JtcyA9IHBhcnNlVW5pZm9ybXModW5pZm9ybXMsIGVudilcbiAgICByZXN1bHQuZHJhd1ZBTyA9IHJlc3VsdC5zY29wZVZBTyA9IHBhcnNlVkFPKG9wdGlvbnMsIGVudilcbiAgICAvLyBzcGVjaWFsIGNhc2U6IGNoZWNrIGlmIHdlIGNhbiBzdGF0aWNhbGx5IGFsbG9jYXRlIGEgdmVydGV4IGFycmF5IG9iamVjdCBmb3IgdGhpcyBwcm9ncmFtXG4gICAgaWYgKCFyZXN1bHQuZHJhd1ZBTyAmJiBzaGFkZXIucHJvZ3JhbSAmJiAhYXR0cmliTG9jYXRpb25zICYmIGV4dGVuc2lvbnMuYW5nbGVfaW5zdGFuY2VkX2FycmF5cykge1xuICAgICAgdmFyIHVzZVZBTyA9IHRydWVcbiAgICAgIHZhciBzdGF0aWNCaW5kaW5ncyA9IHNoYWRlci5wcm9ncmFtLmF0dHJpYnV0ZXMubWFwKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIHZhciBiaW5kaW5nID0gYXR0cmlidXRlcy5zdGF0aWNbYXR0cl1cbiAgICAgICAgdXNlVkFPID0gdXNlVkFPICYmICEhYmluZGluZ1xuICAgICAgICByZXR1cm4gYmluZGluZ1xuICAgICAgfSlcbiAgICAgIGlmICh1c2VWQU8gJiYgc3RhdGljQmluZGluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgdmFvID0gYXR0cmlidXRlU3RhdGUuZ2V0VkFPKGF0dHJpYnV0ZVN0YXRlLmNyZWF0ZVZBTyhzdGF0aWNCaW5kaW5ncykpXG4gICAgICAgIHJlc3VsdC5kcmF3VkFPID0gbmV3IERlY2xhcmF0aW9uKG51bGwsIG51bGwsIG51bGwsIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgcmV0dXJuIGVudi5saW5rKHZhbylcbiAgICAgICAgfSlcbiAgICAgICAgcmVzdWx0LnVzZVZBTyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGF0dHJpYkxvY2F0aW9ucykge1xuICAgICAgcmVzdWx0LnVzZVZBTyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LmF0dHJpYnV0ZXMgPSBwYXJzZUF0dHJpYnV0ZXMoYXR0cmlidXRlcywgZW52KVxuICAgIH1cbiAgICByZXN1bHQuY29udGV4dCA9IHBhcnNlQ29udGV4dChjb250ZXh0LCBlbnYpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDT01NT04gVVBEQVRFIEZVTkNUSU9OU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGZ1bmN0aW9uIGVtaXRDb250ZXh0IChlbnYsIHNjb3BlLCBjb250ZXh0KSB7XG4gICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcbiAgICB2YXIgQ09OVEVYVCA9IHNoYXJlZC5jb250ZXh0XG5cbiAgICB2YXIgY29udGV4dEVudGVyID0gZW52LnNjb3BlKClcblxuICAgIE9iamVjdC5rZXlzKGNvbnRleHQpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHNjb3BlLnNhdmUoQ09OVEVYVCwgJy4nICsgbmFtZSlcbiAgICAgIHZhciBkZWZuID0gY29udGV4dFtuYW1lXVxuICAgICAgdmFyIHZhbHVlID0gZGVmbi5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBjb250ZXh0RW50ZXIoQ09OVEVYVCwgJy4nLCBuYW1lLCAnPVsnLCB2YWx1ZS5qb2luKCksICddOycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0RW50ZXIoQ09OVEVYVCwgJy4nLCBuYW1lLCAnPScsIHZhbHVlLCAnOycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNjb3BlKGNvbnRleHRFbnRlcilcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ09NTU9OIERSQVdJTkcgRlVOQ1RJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gZW1pdFBvbGxGcmFtZWJ1ZmZlciAoZW52LCBzY29wZSwgZnJhbWVidWZmZXIsIHNraXBDaGVjaykge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG5cbiAgICB2YXIgR0wgPSBzaGFyZWQuZ2xcbiAgICB2YXIgRlJBTUVCVUZGRVJfU1RBVEUgPSBzaGFyZWQuZnJhbWVidWZmZXJcbiAgICB2YXIgRVhUX0RSQVdfQlVGRkVSU1xuICAgIGlmIChleHREcmF3QnVmZmVycykge1xuICAgICAgRVhUX0RSQVdfQlVGRkVSUyA9IHNjb3BlLmRlZihzaGFyZWQuZXh0ZW5zaW9ucywgJy53ZWJnbF9kcmF3X2J1ZmZlcnMnKVxuICAgIH1cblxuICAgIHZhciBjb25zdGFudHMgPSBlbnYuY29uc3RhbnRzXG5cbiAgICB2YXIgRFJBV19CVUZGRVJTID0gY29uc3RhbnRzLmRyYXdCdWZmZXJcbiAgICB2YXIgQkFDS19CVUZGRVIgPSBjb25zdGFudHMuYmFja0J1ZmZlclxuXG4gICAgdmFyIE5FWFRcbiAgICBpZiAoZnJhbWVidWZmZXIpIHtcbiAgICAgIE5FWFQgPSBmcmFtZWJ1ZmZlci5hcHBlbmQoZW52LCBzY29wZSlcbiAgICB9IGVsc2Uge1xuICAgICAgTkVYVCA9IHNjb3BlLmRlZihGUkFNRUJVRkZFUl9TVEFURSwgJy5uZXh0JylcbiAgICB9XG5cbiAgICBpZiAoIXNraXBDaGVjaykge1xuICAgICAgc2NvcGUoJ2lmKCcsIE5FWFQsICchPT0nLCBGUkFNRUJVRkZFUl9TVEFURSwgJy5jdXIpeycpXG4gICAgfVxuICAgIHNjb3BlKFxuICAgICAgJ2lmKCcsIE5FWFQsICcpeycsXG4gICAgICBHTCwgJy5iaW5kRnJhbWVidWZmZXIoJywgR0xfRlJBTUVCVUZGRVIkMiwgJywnLCBORVhULCAnLmZyYW1lYnVmZmVyKTsnKVxuICAgIGlmIChleHREcmF3QnVmZmVycykge1xuICAgICAgc2NvcGUoRVhUX0RSQVdfQlVGRkVSUywgJy5kcmF3QnVmZmVyc1dFQkdMKCcsXG4gICAgICAgIERSQVdfQlVGRkVSUywgJ1snLCBORVhULCAnLmNvbG9yQXR0YWNobWVudHMubGVuZ3RoXSk7JylcbiAgICB9XG4gICAgc2NvcGUoJ31lbHNleycsXG4gICAgICBHTCwgJy5iaW5kRnJhbWVidWZmZXIoJywgR0xfRlJBTUVCVUZGRVIkMiwgJyxudWxsKTsnKVxuICAgIGlmIChleHREcmF3QnVmZmVycykge1xuICAgICAgc2NvcGUoRVhUX0RSQVdfQlVGRkVSUywgJy5kcmF3QnVmZmVyc1dFQkdMKCcsIEJBQ0tfQlVGRkVSLCAnKTsnKVxuICAgIH1cbiAgICBzY29wZShcbiAgICAgICd9JyxcbiAgICAgIEZSQU1FQlVGRkVSX1NUQVRFLCAnLmN1cj0nLCBORVhULCAnOycpXG4gICAgaWYgKCFza2lwQ2hlY2spIHtcbiAgICAgIHNjb3BlKCd9JylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbWl0UG9sbFN0YXRlIChlbnYsIHNjb3BlLCBhcmdzKSB7XG4gICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcblxuICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuXG4gICAgdmFyIENVUlJFTlRfVkFSUyA9IGVudi5jdXJyZW50XG4gICAgdmFyIE5FWFRfVkFSUyA9IGVudi5uZXh0XG4gICAgdmFyIENVUlJFTlRfU1RBVEUgPSBzaGFyZWQuY3VycmVudFxuICAgIHZhciBORVhUX1NUQVRFID0gc2hhcmVkLm5leHRcblxuICAgIHZhciBibG9jayA9IGVudi5jb25kKENVUlJFTlRfU1RBVEUsICcuZGlydHknKVxuXG4gICAgR0xfU1RBVEVfTkFNRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgdmFyIHBhcmFtID0gcHJvcE5hbWUocHJvcClcbiAgICAgIGlmIChwYXJhbSBpbiBhcmdzLnN0YXRlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB2YXIgTkVYVCwgQ1VSUkVOVFxuICAgICAgaWYgKHBhcmFtIGluIE5FWFRfVkFSUykge1xuICAgICAgICBORVhUID0gTkVYVF9WQVJTW3BhcmFtXVxuICAgICAgICBDVVJSRU5UID0gQ1VSUkVOVF9WQVJTW3BhcmFtXVxuICAgICAgICB2YXIgcGFydHMgPSBsb29wKGN1cnJlbnRTdGF0ZVtwYXJhbV0ubGVuZ3RoLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgIHJldHVybiBibG9jay5kZWYoTkVYVCwgJ1snLCBpLCAnXScpXG4gICAgICAgIH0pXG4gICAgICAgIGJsb2NrKGVudi5jb25kKHBhcnRzLm1hcChmdW5jdGlvbiAocCwgaSkge1xuICAgICAgICAgIHJldHVybiBwICsgJyE9PScgKyBDVVJSRU5UICsgJ1snICsgaSArICddJ1xuICAgICAgICB9KS5qb2luKCd8fCcpKVxuICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgR0wsICcuJywgR0xfVkFSSUFCTEVTW3BhcmFtXSwgJygnLCBwYXJ0cywgJyk7JyxcbiAgICAgICAgICAgIHBhcnRzLm1hcChmdW5jdGlvbiAocCwgaSkge1xuICAgICAgICAgICAgICByZXR1cm4gQ1VSUkVOVCArICdbJyArIGkgKyAnXT0nICsgcFxuICAgICAgICAgICAgfSkuam9pbignOycpLCAnOycpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTkVYVCA9IGJsb2NrLmRlZihORVhUX1NUQVRFLCAnLicsIHBhcmFtKVxuICAgICAgICB2YXIgaWZ0ZSA9IGVudi5jb25kKE5FWFQsICchPT0nLCBDVVJSRU5UX1NUQVRFLCAnLicsIHBhcmFtKVxuICAgICAgICBibG9jayhpZnRlKVxuICAgICAgICBpZiAocGFyYW0gaW4gR0xfRkxBR1MpIHtcbiAgICAgICAgICBpZnRlKFxuICAgICAgICAgICAgZW52LmNvbmQoTkVYVClcbiAgICAgICAgICAgICAgLnRoZW4oR0wsICcuZW5hYmxlKCcsIEdMX0ZMQUdTW3BhcmFtXSwgJyk7JylcbiAgICAgICAgICAgICAgLmVsc2UoR0wsICcuZGlzYWJsZSgnLCBHTF9GTEFHU1twYXJhbV0sICcpOycpLFxuICAgICAgICAgICAgQ1VSUkVOVF9TVEFURSwgJy4nLCBwYXJhbSwgJz0nLCBORVhULCAnOycpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWZ0ZShcbiAgICAgICAgICAgIEdMLCAnLicsIEdMX1ZBUklBQkxFU1twYXJhbV0sICcoJywgTkVYVCwgJyk7JyxcbiAgICAgICAgICAgIENVUlJFTlRfU1RBVEUsICcuJywgcGFyYW0sICc9JywgTkVYVCwgJzsnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAoT2JqZWN0LmtleXMoYXJncy5zdGF0ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBibG9jayhDVVJSRU5UX1NUQVRFLCAnLmRpcnR5PWZhbHNlOycpXG4gICAgfVxuICAgIHNjb3BlKGJsb2NrKVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdFNldE9wdGlvbnMgKGVudiwgc2NvcGUsIG9wdGlvbnMsIGZpbHRlcikge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgdmFyIENVUlJFTlRfVkFSUyA9IGVudi5jdXJyZW50XG4gICAgdmFyIENVUlJFTlRfU1RBVEUgPSBzaGFyZWQuY3VycmVudFxuICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuICAgIHNvcnRTdGF0ZShPYmplY3Qua2V5cyhvcHRpb25zKSkuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciBkZWZuID0gb3B0aW9uc1twYXJhbV1cbiAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihkZWZuKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHZhciB2YXJpYWJsZSA9IGRlZm4uYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICBpZiAoR0xfRkxBR1NbcGFyYW1dKSB7XG4gICAgICAgIHZhciBmbGFnID0gR0xfRkxBR1NbcGFyYW1dXG4gICAgICAgIGlmIChpc1N0YXRpYyhkZWZuKSkge1xuICAgICAgICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgICAgICAgc2NvcGUoR0wsICcuZW5hYmxlKCcsIGZsYWcsICcpOycpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNjb3BlKEdMLCAnLmRpc2FibGUoJywgZmxhZywgJyk7JylcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NvcGUoZW52LmNvbmQodmFyaWFibGUpXG4gICAgICAgICAgICAudGhlbihHTCwgJy5lbmFibGUoJywgZmxhZywgJyk7JylcbiAgICAgICAgICAgIC5lbHNlKEdMLCAnLmRpc2FibGUoJywgZmxhZywgJyk7JykpXG4gICAgICAgIH1cbiAgICAgICAgc2NvcGUoQ1VSUkVOVF9TVEFURSwgJy4nLCBwYXJhbSwgJz0nLCB2YXJpYWJsZSwgJzsnKVxuICAgICAgfSBlbHNlIGlmIChpc0FycmF5TGlrZSh2YXJpYWJsZSkpIHtcbiAgICAgICAgdmFyIENVUlJFTlQgPSBDVVJSRU5UX1ZBUlNbcGFyYW1dXG4gICAgICAgIHNjb3BlKFxuICAgICAgICAgIEdMLCAnLicsIEdMX1ZBUklBQkxFU1twYXJhbV0sICcoJywgdmFyaWFibGUsICcpOycsXG4gICAgICAgICAgdmFyaWFibGUubWFwKGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gQ1VSUkVOVCArICdbJyArIGkgKyAnXT0nICsgdlxuICAgICAgICAgIH0pLmpvaW4oJzsnKSwgJzsnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NvcGUoXG4gICAgICAgICAgR0wsICcuJywgR0xfVkFSSUFCTEVTW3BhcmFtXSwgJygnLCB2YXJpYWJsZSwgJyk7JyxcbiAgICAgICAgICBDVVJSRU5UX1NUQVRFLCAnLicsIHBhcmFtLCAnPScsIHZhcmlhYmxlLCAnOycpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGluamVjdEV4dGVuc2lvbnMgKGVudiwgc2NvcGUpIHtcbiAgICBpZiAoZXh0SW5zdGFuY2luZykge1xuICAgICAgZW52Lmluc3RhbmNpbmcgPSBzY29wZS5kZWYoXG4gICAgICAgIGVudi5zaGFyZWQuZXh0ZW5zaW9ucywgJy5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzJylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbWl0UHJvZmlsZSAoZW52LCBzY29wZSwgYXJncywgdXNlU2NvcGUsIGluY3JlbWVudENvdW50ZXIpIHtcbiAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuICAgIHZhciBTVEFUUyA9IGVudi5zdGF0c1xuICAgIHZhciBDVVJSRU5UX1NUQVRFID0gc2hhcmVkLmN1cnJlbnRcbiAgICB2YXIgVElNRVIgPSBzaGFyZWQudGltZXJcbiAgICB2YXIgcHJvZmlsZUFyZyA9IGFyZ3MucHJvZmlsZVxuXG4gICAgZnVuY3Rpb24gcGVyZkNvdW50ZXIgKCkge1xuICAgICAgaWYgKHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICdEYXRlLm5vdygpJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICdwZXJmb3JtYW5jZS5ub3coKSdcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgQ1BVX1NUQVJULCBRVUVSWV9DT1VOVEVSXG4gICAgZnVuY3Rpb24gZW1pdFByb2ZpbGVTdGFydCAoYmxvY2spIHtcbiAgICAgIENQVV9TVEFSVCA9IHNjb3BlLmRlZigpXG4gICAgICBibG9jayhDUFVfU1RBUlQsICc9JywgcGVyZkNvdW50ZXIoKSwgJzsnKVxuICAgICAgaWYgKHR5cGVvZiBpbmNyZW1lbnRDb3VudGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBibG9jayhTVEFUUywgJy5jb3VudCs9JywgaW5jcmVtZW50Q291bnRlciwgJzsnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmxvY2soU1RBVFMsICcuY291bnQrKzsnKVxuICAgICAgfVxuICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgIGlmICh1c2VTY29wZSkge1xuICAgICAgICAgIFFVRVJZX0NPVU5URVIgPSBzY29wZS5kZWYoKVxuICAgICAgICAgIGJsb2NrKFFVRVJZX0NPVU5URVIsICc9JywgVElNRVIsICcuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKTsnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJsb2NrKFRJTUVSLCAnLmJlZ2luUXVlcnkoJywgU1RBVFMsICcpOycpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0UHJvZmlsZUVuZCAoYmxvY2spIHtcbiAgICAgIGJsb2NrKFNUQVRTLCAnLmNwdVRpbWUrPScsIHBlcmZDb3VudGVyKCksICctJywgQ1BVX1NUQVJULCAnOycpXG4gICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgaWYgKHVzZVNjb3BlKSB7XG4gICAgICAgICAgYmxvY2soVElNRVIsICcucHVzaFNjb3BlU3RhdHMoJyxcbiAgICAgICAgICAgIFFVRVJZX0NPVU5URVIsICcsJyxcbiAgICAgICAgICAgIFRJTUVSLCAnLmdldE51bVBlbmRpbmdRdWVyaWVzKCksJyxcbiAgICAgICAgICAgIFNUQVRTLCAnKTsnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJsb2NrKFRJTUVSLCAnLmVuZFF1ZXJ5KCk7JylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjb3BlUHJvZmlsZSAodmFsdWUpIHtcbiAgICAgIHZhciBwcmV2ID0gc2NvcGUuZGVmKENVUlJFTlRfU1RBVEUsICcucHJvZmlsZScpXG4gICAgICBzY29wZShDVVJSRU5UX1NUQVRFLCAnLnByb2ZpbGU9JywgdmFsdWUsICc7JylcbiAgICAgIHNjb3BlLmV4aXQoQ1VSUkVOVF9TVEFURSwgJy5wcm9maWxlPScsIHByZXYsICc7JylcbiAgICB9XG5cbiAgICB2YXIgVVNFX1BST0ZJTEVcbiAgICBpZiAocHJvZmlsZUFyZykge1xuICAgICAgaWYgKGlzU3RhdGljKHByb2ZpbGVBcmcpKSB7XG4gICAgICAgIGlmIChwcm9maWxlQXJnLmVuYWJsZSkge1xuICAgICAgICAgIGVtaXRQcm9maWxlU3RhcnQoc2NvcGUpXG4gICAgICAgICAgZW1pdFByb2ZpbGVFbmQoc2NvcGUuZXhpdClcbiAgICAgICAgICBzY29wZVByb2ZpbGUoJ3RydWUnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjb3BlUHJvZmlsZSgnZmFsc2UnKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgVVNFX1BST0ZJTEUgPSBwcm9maWxlQXJnLmFwcGVuZChlbnYsIHNjb3BlKVxuICAgICAgc2NvcGVQcm9maWxlKFVTRV9QUk9GSUxFKVxuICAgIH0gZWxzZSB7XG4gICAgICBVU0VfUFJPRklMRSA9IHNjb3BlLmRlZihDVVJSRU5UX1NUQVRFLCAnLnByb2ZpbGUnKVxuICAgIH1cblxuICAgIHZhciBzdGFydCA9IGVudi5ibG9jaygpXG4gICAgZW1pdFByb2ZpbGVTdGFydChzdGFydClcbiAgICBzY29wZSgnaWYoJywgVVNFX1BST0ZJTEUsICcpeycsIHN0YXJ0LCAnfScpXG4gICAgdmFyIGVuZCA9IGVudi5ibG9jaygpXG4gICAgZW1pdFByb2ZpbGVFbmQoZW5kKVxuICAgIHNjb3BlLmV4aXQoJ2lmKCcsIFVTRV9QUk9GSUxFLCAnKXsnLCBlbmQsICd9JylcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXRBdHRyaWJ1dGVzIChlbnYsIHNjb3BlLCBhcmdzLCBhdHRyaWJ1dGVzLCBmaWx0ZXIpIHtcbiAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuXG4gICAgZnVuY3Rpb24gdHlwZUxlbmd0aCAoeCkge1xuICAgICAgc3dpdGNoICh4KSB7XG4gICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjpcbiAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjpcbiAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6XG4gICAgICAgICAgcmV0dXJuIDJcbiAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOlxuICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOlxuICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzpcbiAgICAgICAgICByZXR1cm4gM1xuICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6XG4gICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6XG4gICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OlxuICAgICAgICAgIHJldHVybiA0XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0QmluZEF0dHJpYnV0ZSAoQVRUUklCVVRFLCBzaXplLCByZWNvcmQpIHtcbiAgICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuXG4gICAgICB2YXIgTE9DQVRJT04gPSBzY29wZS5kZWYoQVRUUklCVVRFLCAnLmxvY2F0aW9uJylcbiAgICAgIHZhciBCSU5ESU5HID0gc2NvcGUuZGVmKHNoYXJlZC5hdHRyaWJ1dGVzLCAnWycsIExPQ0FUSU9OLCAnXScpXG5cbiAgICAgIHZhciBTVEFURSA9IHJlY29yZC5zdGF0ZVxuICAgICAgdmFyIEJVRkZFUiA9IHJlY29yZC5idWZmZXJcbiAgICAgIHZhciBDT05TVF9DT01QT05FTlRTID0gW1xuICAgICAgICByZWNvcmQueCxcbiAgICAgICAgcmVjb3JkLnksXG4gICAgICAgIHJlY29yZC56LFxuICAgICAgICByZWNvcmQud1xuICAgICAgXVxuXG4gICAgICB2YXIgQ09NTU9OX0tFWVMgPSBbXG4gICAgICAgICdidWZmZXInLFxuICAgICAgICAnbm9ybWFsaXplZCcsXG4gICAgICAgICdvZmZzZXQnLFxuICAgICAgICAnc3RyaWRlJ1xuICAgICAgXVxuXG4gICAgICBmdW5jdGlvbiBlbWl0QnVmZmVyICgpIHtcbiAgICAgICAgc2NvcGUoXG4gICAgICAgICAgJ2lmKCEnLCBCSU5ESU5HLCAnLmJ1ZmZlcil7JyxcbiAgICAgICAgICBHTCwgJy5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgnLCBMT0NBVElPTiwgJyk7fScpXG5cbiAgICAgICAgdmFyIFRZUEUgPSByZWNvcmQudHlwZVxuICAgICAgICB2YXIgU0laRVxuICAgICAgICBpZiAoIXJlY29yZC5zaXplKSB7XG4gICAgICAgICAgU0laRSA9IHNpemVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBTSVpFID0gc2NvcGUuZGVmKHJlY29yZC5zaXplLCAnfHwnLCBzaXplKVxuICAgICAgICB9XG5cbiAgICAgICAgc2NvcGUoJ2lmKCcsXG4gICAgICAgICAgQklORElORywgJy50eXBlIT09JywgVFlQRSwgJ3x8JyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnNpemUhPT0nLCBTSVpFLCAnfHwnLFxuICAgICAgICAgIENPTU1PTl9LRVlTLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gQklORElORyArICcuJyArIGtleSArICchPT0nICsgcmVjb3JkW2tleV1cbiAgICAgICAgICB9KS5qb2luKCd8fCcpLFxuICAgICAgICAgICcpeycsXG4gICAgICAgICAgR0wsICcuYmluZEJ1ZmZlcignLCBHTF9BUlJBWV9CVUZGRVIkMiwgJywnLCBCVUZGRVIsICcuYnVmZmVyKTsnLFxuICAgICAgICAgIEdMLCAnLnZlcnRleEF0dHJpYlBvaW50ZXIoJywgW1xuICAgICAgICAgICAgTE9DQVRJT04sXG4gICAgICAgICAgICBTSVpFLFxuICAgICAgICAgICAgVFlQRSxcbiAgICAgICAgICAgIHJlY29yZC5ub3JtYWxpemVkLFxuICAgICAgICAgICAgcmVjb3JkLnN0cmlkZSxcbiAgICAgICAgICAgIHJlY29yZC5vZmZzZXRcbiAgICAgICAgICBdLCAnKTsnLFxuICAgICAgICAgIEJJTkRJTkcsICcudHlwZT0nLCBUWVBFLCAnOycsXG4gICAgICAgICAgQklORElORywgJy5zaXplPScsIFNJWkUsICc7JyxcbiAgICAgICAgICBDT01NT05fS0VZUy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIEJJTkRJTkcgKyAnLicgKyBrZXkgKyAnPScgKyByZWNvcmRba2V5XSArICc7J1xuICAgICAgICAgIH0pLmpvaW4oJycpLFxuICAgICAgICAgICd9JylcblxuICAgICAgICBpZiAoZXh0SW5zdGFuY2luZykge1xuICAgICAgICAgIHZhciBESVZJU09SID0gcmVjb3JkLmRpdmlzb3JcbiAgICAgICAgICBzY29wZShcbiAgICAgICAgICAgICdpZignLCBCSU5ESU5HLCAnLmRpdmlzb3IhPT0nLCBESVZJU09SLCAnKXsnLFxuICAgICAgICAgICAgZW52Lmluc3RhbmNpbmcsICcudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCcsIFtMT0NBVElPTiwgRElWSVNPUl0sICcpOycsXG4gICAgICAgICAgICBCSU5ESU5HLCAnLmRpdmlzb3I9JywgRElWSVNPUiwgJzt9JylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBlbWl0Q29uc3RhbnQgKCkge1xuICAgICAgICBzY29wZShcbiAgICAgICAgICAnaWYoJywgQklORElORywgJy5idWZmZXIpeycsXG4gICAgICAgICAgR0wsICcuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KCcsIExPQ0FUSU9OLCAnKTsnLFxuICAgICAgICAgIEJJTkRJTkcsICcuYnVmZmVyPW51bGw7JyxcbiAgICAgICAgICAnfWlmKCcsIENVVEVfQ09NUE9ORU5UUy5tYXAoZnVuY3Rpb24gKGMsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiBCSU5ESU5HICsgJy4nICsgYyArICchPT0nICsgQ09OU1RfQ09NUE9ORU5UU1tpXVxuICAgICAgICAgIH0pLmpvaW4oJ3x8JyksICcpeycsXG4gICAgICAgICAgR0wsICcudmVydGV4QXR0cmliNGYoJywgTE9DQVRJT04sICcsJywgQ09OU1RfQ09NUE9ORU5UUywgJyk7JyxcbiAgICAgICAgICBDVVRFX0NPTVBPTkVOVFMubWFwKGZ1bmN0aW9uIChjLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gQklORElORyArICcuJyArIGMgKyAnPScgKyBDT05TVF9DT01QT05FTlRTW2ldICsgJzsnXG4gICAgICAgICAgfSkuam9pbignJyksXG4gICAgICAgICAgJ30nKVxuICAgICAgfVxuXG4gICAgICBpZiAoU1RBVEUgPT09IEFUVFJJQl9TVEFURV9QT0lOVEVSKSB7XG4gICAgICAgIGVtaXRCdWZmZXIoKVxuICAgICAgfSBlbHNlIGlmIChTVEFURSA9PT0gQVRUUklCX1NUQVRFX0NPTlNUQU5UKSB7XG4gICAgICAgIGVtaXRDb25zdGFudCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY29wZSgnaWYoJywgU1RBVEUsICc9PT0nLCBBVFRSSUJfU1RBVEVfUE9JTlRFUiwgJyl7JylcbiAgICAgICAgZW1pdEJ1ZmZlcigpXG4gICAgICAgIHNjb3BlKCd9ZWxzZXsnKVxuICAgICAgICBlbWl0Q29uc3RhbnQoKVxuICAgICAgICBzY29wZSgnfScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXR0cmlidXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlLm5hbWVcbiAgICAgIHZhciBhcmcgPSBhcmdzLmF0dHJpYnV0ZXNbbmFtZV1cbiAgICAgIHZhciByZWNvcmRcbiAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIoYXJnKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHJlY29yZCA9IGFyZy5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghZmlsdGVyKFNDT1BFX0RFQ0wpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNjb3BlQXR0cmliID0gZW52LnNjb3BlQXR0cmliKG5hbWUpXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICBzY29wZUF0dHJpYiArICcuc3RhdGUnLFxuICAgICAgICAgICAgJ21pc3NpbmcgYXR0cmlidXRlICcgKyBuYW1lKVxuICAgICAgICB9KVxuICAgICAgICByZWNvcmQgPSB7fVxuICAgICAgICBPYmplY3Qua2V5cyhuZXcgQXR0cmlidXRlUmVjb3JkKCkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJlY29yZFtrZXldID0gc2NvcGUuZGVmKHNjb3BlQXR0cmliLCAnLicsIGtleSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGVtaXRCaW5kQXR0cmlidXRlKFxuICAgICAgICBlbnYubGluayhhdHRyaWJ1dGUpLCB0eXBlTGVuZ3RoKGF0dHJpYnV0ZS5pbmZvLnR5cGUpLCByZWNvcmQpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXRVbmlmb3JtcyAoZW52LCBzY29wZSwgYXJncywgdW5pZm9ybXMsIGZpbHRlcikge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgdmFyIEdMID0gc2hhcmVkLmdsXG5cbiAgICB2YXIgaW5maXhcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1zLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgdW5pZm9ybSA9IHVuaWZvcm1zW2ldXG4gICAgICB2YXIgbmFtZSA9IHVuaWZvcm0ubmFtZVxuICAgICAgdmFyIHR5cGUgPSB1bmlmb3JtLmluZm8udHlwZVxuICAgICAgdmFyIGFyZyA9IGFyZ3MudW5pZm9ybXNbbmFtZV1cbiAgICAgIHZhciBVTklGT1JNID0gZW52LmxpbmsodW5pZm9ybSlcbiAgICAgIHZhciBMT0NBVElPTiA9IFVOSUZPUk0gKyAnLmxvY2F0aW9uJ1xuXG4gICAgICB2YXIgVkFMVUVcbiAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIoYXJnKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3RhdGljKGFyZykpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBhcmcudmFsdWVcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnLFxuICAgICAgICAgICAgJ21pc3NpbmcgdW5pZm9ybSBcIicgKyBuYW1lICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgaWYgKHR5cGUgPT09IEdMX1NBTVBMRVJfMkQgfHwgdHlwZSA9PT0gR0xfU0FNUExFUl9DVUJFKSB7XG4gICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgICAoKHR5cGUgPT09IEdMX1NBTVBMRVJfMkQgJiZcbiAgICAgICAgICAgICAgICAodmFsdWUuX3JlZ2xUeXBlID09PSAndGV4dHVyZTJkJyB8fFxuICAgICAgICAgICAgICAgIHZhbHVlLl9yZWdsVHlwZSA9PT0gJ2ZyYW1lYnVmZmVyJykpIHx8XG4gICAgICAgICAgICAgICh0eXBlID09PSBHTF9TQU1QTEVSX0NVQkUgJiZcbiAgICAgICAgICAgICAgICAodmFsdWUuX3JlZ2xUeXBlID09PSAndGV4dHVyZUN1YmUnIHx8XG4gICAgICAgICAgICAgICAgdmFsdWUuX3JlZ2xUeXBlID09PSAnZnJhbWVidWZmZXJDdWJlJykpKSxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgdGV4dHVyZSBmb3IgdW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICB2YXIgVEVYX1ZBTFVFID0gZW52LmxpbmsodmFsdWUuX3RleHR1cmUgfHwgdmFsdWUuY29sb3JbMF0uX3RleHR1cmUpXG4gICAgICAgICAgICBzY29wZShHTCwgJy51bmlmb3JtMWkoJywgTE9DQVRJT04sICcsJywgVEVYX1ZBTFVFICsgJy5iaW5kKCkpOycpXG4gICAgICAgICAgICBzY29wZS5leGl0KFRFWF9WQUxVRSwgJy51bmJpbmQoKTsnKVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlID09PSBHTF9GTE9BVF9NQVQyIHx8XG4gICAgICAgICAgICB0eXBlID09PSBHTF9GTE9BVF9NQVQzIHx8XG4gICAgICAgICAgICB0eXBlID09PSBHTF9GTE9BVF9NQVQ0KSB7XG4gICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKGlzQXJyYXlMaWtlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBtYXRyaXggZm9yIHVuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgKHR5cGUgPT09IEdMX0ZMT0FUX01BVDIgJiYgdmFsdWUubGVuZ3RoID09PSA0KSB8fFxuICAgICAgICAgICAgICAgICh0eXBlID09PSBHTF9GTE9BVF9NQVQzICYmIHZhbHVlLmxlbmd0aCA9PT0gOSkgfHxcbiAgICAgICAgICAgICAgICAodHlwZSA9PT0gR0xfRkxPQVRfTUFUNCAmJiB2YWx1ZS5sZW5ndGggPT09IDE2KSxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBsZW5ndGggZm9yIG1hdHJpeCB1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YXIgTUFUX1ZBTFVFID0gZW52Lmdsb2JhbC5kZWYoJ25ldyBGbG9hdDMyQXJyYXkoWycgK1xuICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh2YWx1ZSkgKyAnXSknKVxuICAgICAgICAgICAgdmFyIGRpbSA9IDJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBHTF9GTE9BVF9NQVQzKSB7XG4gICAgICAgICAgICAgIGRpbSA9IDNcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gR0xfRkxPQVRfTUFUNCkge1xuICAgICAgICAgICAgICBkaW0gPSA0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZShcbiAgICAgICAgICAgICAgR0wsICcudW5pZm9ybU1hdHJpeCcsIGRpbSwgJ2Z2KCcsXG4gICAgICAgICAgICAgIExPQ0FUSU9OLCAnLGZhbHNlLCcsIE1BVF9WQUxVRSwgJyk7JylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQkODpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHZhbHVlLCAnbnVtYmVyJywgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzFmJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAyLFxuICAgICAgICAgICAgICAgICAgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzJmJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAzLFxuICAgICAgICAgICAgICAgICAgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzNmJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSA0LFxuICAgICAgICAgICAgICAgICAgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzRmJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHZhbHVlLCAnYm9vbGVhbicsICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICcxaSdcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0lOVCQzOlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdudW1iZXInLCAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnMWknXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMixcbiAgICAgICAgICAgICAgICAgICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICcyaSdcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDIsXG4gICAgICAgICAgICAgICAgICAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnMmknXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMyxcbiAgICAgICAgICAgICAgICAgICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICczaSdcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDMsXG4gICAgICAgICAgICAgICAgICAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnM2knXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gNCxcbiAgICAgICAgICAgICAgICAgICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICc0aSdcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDQsXG4gICAgICAgICAgICAgICAgICAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnNGknXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlKEdMLCAnLnVuaWZvcm0nLCBpbmZpeCwgJygnLCBMT0NBVElPTiwgJywnLFxuICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh2YWx1ZSkgOiB2YWx1ZSxcbiAgICAgICAgICAgICAgJyk7JylcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBWQUxVRSA9IGFyZy5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIoU0NPUEVfREVDTCkpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIFZBTFVFID0gc2NvcGUuZGVmKHNoYXJlZC51bmlmb3JtcywgJ1snLCBzdHJpbmdTdG9yZS5pZChuYW1lKSwgJ10nKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gR0xfU0FNUExFUl8yRCkge1xuICAgICAgICBjaGVjayQxKCFBcnJheS5pc0FycmF5KFZBTFVFKSwgJ211c3Qgc3BlY2lmeSBhIHNjYWxhciBwcm9wIGZvciB0ZXh0dXJlcycpXG4gICAgICAgIHNjb3BlKFxuICAgICAgICAgICdpZignLCBWQUxVRSwgJyYmJywgVkFMVUUsICcuX3JlZ2xUeXBlPT09XCJmcmFtZWJ1ZmZlclwiKXsnLFxuICAgICAgICAgIFZBTFVFLCAnPScsIFZBTFVFLCAnLmNvbG9yWzBdOycsXG4gICAgICAgICAgJ30nKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBHTF9TQU1QTEVSX0NVQkUpIHtcbiAgICAgICAgY2hlY2skMSghQXJyYXkuaXNBcnJheShWQUxVRSksICdtdXN0IHNwZWNpZnkgYSBzY2FsYXIgcHJvcCBmb3IgY3ViZSBtYXBzJylcbiAgICAgICAgc2NvcGUoXG4gICAgICAgICAgJ2lmKCcsIFZBTFVFLCAnJiYnLCBWQUxVRSwgJy5fcmVnbFR5cGU9PT1cImZyYW1lYnVmZmVyQ3ViZVwiKXsnLFxuICAgICAgICAgIFZBTFVFLCAnPScsIFZBTFVFLCAnLmNvbG9yWzBdOycsXG4gICAgICAgICAgJ30nKVxuICAgICAgfVxuXG4gICAgICAvLyBwZXJmb3JtIHR5cGUgdmFsaWRhdGlvblxuICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGVtaXRDaGVjayAocHJlZCwgbWVzc2FnZSkge1xuICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsIHByZWQsXG4gICAgICAgICAgICAnYmFkIGRhdGEgb3IgbWlzc2luZyBmb3IgdW5pZm9ybSBcIicgKyBuYW1lICsgJ1wiLiAgJyArIG1lc3NhZ2UpXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjaGVja1R5cGUgKHR5cGUpIHtcbiAgICAgICAgICBjaGVjayQxKCFBcnJheS5pc0FycmF5KFZBTFVFKSwgJ211c3Qgbm90IHNwZWNpZnkgYW4gYXJyYXkgdHlwZSBmb3IgdW5pZm9ybScpXG4gICAgICAgICAgZW1pdENoZWNrKFxuICAgICAgICAgICAgJ3R5cGVvZiAnICsgVkFMVUUgKyAnPT09XCInICsgdHlwZSArICdcIicsXG4gICAgICAgICAgICAnaW52YWxpZCB0eXBlLCBleHBlY3RlZCAnICsgdHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrVmVjdG9yIChuLCB0eXBlKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoVkFMVUUpKSB7XG4gICAgICAgICAgICBjaGVjayQxKFZBTFVFLmxlbmd0aCA9PT0gbiwgJ211c3QgaGF2ZSBsZW5ndGggJyArIG4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVtaXRDaGVjayhcbiAgICAgICAgICAgICAgc2hhcmVkLmlzQXJyYXlMaWtlICsgJygnICsgVkFMVUUgKyAnKSYmJyArIFZBTFVFICsgJy5sZW5ndGg9PT0nICsgbixcbiAgICAgICAgICAgICAgJ2ludmFsaWQgdmVjdG9yLCBzaG91bGQgaGF2ZSBsZW5ndGggJyArIG4sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrVGV4dHVyZSAodGFyZ2V0KSB7XG4gICAgICAgICAgY2hlY2skMSghQXJyYXkuaXNBcnJheShWQUxVRSksICdtdXN0IG5vdCBzcGVjaWZ5IGEgdmFsdWUgdHlwZScpXG4gICAgICAgICAgZW1pdENoZWNrKFxuICAgICAgICAgICAgJ3R5cGVvZiAnICsgVkFMVUUgKyAnPT09XCJmdW5jdGlvblwiJiYnICtcbiAgICAgICAgICAgIFZBTFVFICsgJy5fcmVnbFR5cGU9PT1cInRleHR1cmUnICtcbiAgICAgICAgICAgICh0YXJnZXQgPT09IEdMX1RFWFRVUkVfMkQkMyA/ICcyZCcgOiAnQ3ViZScpICsgJ1wiJyxcbiAgICAgICAgICAgICdpbnZhbGlkIHRleHR1cmUgdHlwZScsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBHTF9JTlQkMzpcbiAgICAgICAgICAgIGNoZWNrVHlwZSgnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDIsICdudW1iZXInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoMywgJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6XG4gICAgICAgICAgICBjaGVja1ZlY3Rvcig0LCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9GTE9BVCQ4OlxuICAgICAgICAgICAgY2hlY2tUeXBlKCdudW1iZXInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6XG4gICAgICAgICAgICBjaGVja1ZlY3RvcigyLCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoMywgJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDQsICdudW1iZXInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0JPT0w6XG4gICAgICAgICAgICBjaGVja1R5cGUoJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDIsICdib29sZWFuJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6XG4gICAgICAgICAgICBjaGVja1ZlY3RvcigzLCAnYm9vbGVhbicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoNCwgJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6XG4gICAgICAgICAgICBjaGVja1ZlY3Rvcig0LCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoOSwgJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDE2LCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOlxuICAgICAgICAgICAgY2hlY2tUZXh0dXJlKEdMX1RFWFRVUkVfMkQkMylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6XG4gICAgICAgICAgICBjaGVja1RleHR1cmUoR0xfVEVYVFVSRV9DVUJFX01BUCQyKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgdmFyIHVucm9sbCA9IDFcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6XG4gICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOlxuICAgICAgICAgIHZhciBURVggPSBzY29wZS5kZWYoVkFMVUUsICcuX3RleHR1cmUnKVxuICAgICAgICAgIHNjb3BlKEdMLCAnLnVuaWZvcm0xaSgnLCBMT0NBVElPTiwgJywnLCBURVgsICcuYmluZCgpKTsnKVxuICAgICAgICAgIHNjb3BlLmV4aXQoVEVYLCAnLnVuYmluZCgpOycpXG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIEdMX0lOVCQzOlxuICAgICAgICBjYXNlIEdMX0JPT0w6XG4gICAgICAgICAgaW5maXggPSAnMWknXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOlxuICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjpcbiAgICAgICAgICBpbmZpeCA9ICcyaSdcbiAgICAgICAgICB1bnJvbGwgPSAyXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOlxuICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzpcbiAgICAgICAgICBpbmZpeCA9ICczaSdcbiAgICAgICAgICB1bnJvbGwgPSAzXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OlxuICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDpcbiAgICAgICAgICBpbmZpeCA9ICc0aSdcbiAgICAgICAgICB1bnJvbGwgPSA0XG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0ZMT0FUJDg6XG4gICAgICAgICAgaW5maXggPSAnMWYnXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6XG4gICAgICAgICAgaW5maXggPSAnMmYnXG4gICAgICAgICAgdW5yb2xsID0gMlxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOlxuICAgICAgICAgIGluZml4ID0gJzNmJ1xuICAgICAgICAgIHVucm9sbCA9IDNcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDpcbiAgICAgICAgICBpbmZpeCA9ICc0ZidcbiAgICAgICAgICB1bnJvbGwgPSA0XG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6XG4gICAgICAgICAgaW5maXggPSAnTWF0cml4MmZ2J1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOlxuICAgICAgICAgIGluZml4ID0gJ01hdHJpeDNmdidcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDpcbiAgICAgICAgICBpbmZpeCA9ICdNYXRyaXg0ZnYnXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgc2NvcGUoR0wsICcudW5pZm9ybScsIGluZml4LCAnKCcsIExPQ0FUSU9OLCAnLCcpXG4gICAgICBpZiAoaW5maXguY2hhckF0KDApID09PSAnTScpIHtcbiAgICAgICAgdmFyIG1hdFNpemUgPSBNYXRoLnBvdyh0eXBlIC0gR0xfRkxPQVRfTUFUMiArIDIsIDIpXG4gICAgICAgIHZhciBTVE9SQUdFID0gZW52Lmdsb2JhbC5kZWYoJ25ldyBGbG9hdDMyQXJyYXkoJywgbWF0U2l6ZSwgJyknKVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShWQUxVRSkpIHtcbiAgICAgICAgICBzY29wZShcbiAgICAgICAgICAgICdmYWxzZSwoJyxcbiAgICAgICAgICAgIGxvb3AobWF0U2l6ZSwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFNUT1JBR0UgKyAnWycgKyBpICsgJ109JyArIFZBTFVFW2ldXG4gICAgICAgICAgICB9KSwgJywnLCBTVE9SQUdFLCAnKScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NvcGUoXG4gICAgICAgICAgICAnZmFsc2UsKEFycmF5LmlzQXJyYXkoJywgVkFMVUUsICcpfHwnLCBWQUxVRSwgJyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSk/JywgVkFMVUUsICc6KCcsXG4gICAgICAgICAgICBsb29wKG1hdFNpemUsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBTVE9SQUdFICsgJ1snICsgaSArICddPScgKyBWQUxVRSArICdbJyArIGkgKyAnXSdcbiAgICAgICAgICAgIH0pLCAnLCcsIFNUT1JBR0UsICcpJylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh1bnJvbGwgPiAxKSB7XG4gICAgICAgIHNjb3BlKGxvb3AodW5yb2xsLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KFZBTFVFKSA/IFZBTFVFW2ldIDogVkFMVUUgKyAnWycgKyBpICsgJ10nXG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMSghQXJyYXkuaXNBcnJheShWQUxVRSksICd1bmlmb3JtIHZhbHVlIG11c3Qgbm90IGJlIGFuIGFycmF5JylcbiAgICAgICAgc2NvcGUoVkFMVUUpXG4gICAgICB9XG4gICAgICBzY29wZSgnKTsnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXREcmF3IChlbnYsIG91dGVyLCBpbm5lciwgYXJncykge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgdmFyIEdMID0gc2hhcmVkLmdsXG4gICAgdmFyIERSQVdfU1RBVEUgPSBzaGFyZWQuZHJhd1xuXG4gICAgdmFyIGRyYXdPcHRpb25zID0gYXJncy5kcmF3XG5cbiAgICBmdW5jdGlvbiBlbWl0RWxlbWVudHMgKCkge1xuICAgICAgdmFyIGRlZm4gPSBkcmF3T3B0aW9ucy5lbGVtZW50c1xuICAgICAgdmFyIEVMRU1FTlRTXG4gICAgICB2YXIgc2NvcGUgPSBvdXRlclxuICAgICAgaWYgKGRlZm4pIHtcbiAgICAgICAgaWYgKChkZWZuLmNvbnRleHREZXAgJiYgYXJncy5jb250ZXh0RHluYW1pYykgfHwgZGVmbi5wcm9wRGVwKSB7XG4gICAgICAgICAgc2NvcGUgPSBpbm5lclxuICAgICAgICB9XG4gICAgICAgIEVMRU1FTlRTID0gZGVmbi5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEVMRU1FTlRTID0gc2NvcGUuZGVmKERSQVdfU1RBVEUsICcuJywgU19FTEVNRU5UUylcbiAgICAgIH1cbiAgICAgIGlmIChFTEVNRU5UUykge1xuICAgICAgICBzY29wZShcbiAgICAgICAgICAnaWYoJyArIEVMRU1FTlRTICsgJyknICtcbiAgICAgICAgICBHTCArICcuYmluZEJ1ZmZlcignICsgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIkMSArICcsJyArIEVMRU1FTlRTICsgJy5idWZmZXIuYnVmZmVyKTsnKVxuICAgICAgfVxuICAgICAgcmV0dXJuIEVMRU1FTlRTXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdENvdW50ICgpIHtcbiAgICAgIHZhciBkZWZuID0gZHJhd09wdGlvbnMuY291bnRcbiAgICAgIHZhciBDT1VOVFxuICAgICAgdmFyIHNjb3BlID0gb3V0ZXJcbiAgICAgIGlmIChkZWZuKSB7XG4gICAgICAgIGlmICgoZGVmbi5jb250ZXh0RGVwICYmIGFyZ3MuY29udGV4dER5bmFtaWMpIHx8IGRlZm4ucHJvcERlcCkge1xuICAgICAgICAgIHNjb3BlID0gaW5uZXJcbiAgICAgICAgfVxuICAgICAgICBDT1VOVCA9IGRlZm4uYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChkZWZuLk1JU1NJTkcpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQob3V0ZXIsICdmYWxzZScsICdtaXNzaW5nIHZlcnRleCBjb3VudCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZWZuLkRZTkFNSUMpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsIENPVU5UICsgJz49MCcsICdtaXNzaW5nIHZlcnRleCBjb3VudCcpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQ09VTlQgPSBzY29wZS5kZWYoRFJBV19TVEFURSwgJy4nLCBTX0NPVU5UKVxuICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLCBDT1VOVCArICc+PTAnLCAnbWlzc2luZyB2ZXJ0ZXggY291bnQnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIENPVU5UXG4gICAgfVxuXG4gICAgdmFyIEVMRU1FTlRTID0gZW1pdEVsZW1lbnRzKClcbiAgICBmdW5jdGlvbiBlbWl0VmFsdWUgKG5hbWUpIHtcbiAgICAgIHZhciBkZWZuID0gZHJhd09wdGlvbnNbbmFtZV1cbiAgICAgIGlmIChkZWZuKSB7XG4gICAgICAgIGlmICgoZGVmbi5jb250ZXh0RGVwICYmIGFyZ3MuY29udGV4dER5bmFtaWMpIHx8IGRlZm4ucHJvcERlcCkge1xuICAgICAgICAgIHJldHVybiBkZWZuLmFwcGVuZChlbnYsIGlubmVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBkZWZuLmFwcGVuZChlbnYsIG91dGVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb3V0ZXIuZGVmKERSQVdfU1RBVEUsICcuJywgbmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgUFJJTUlUSVZFID0gZW1pdFZhbHVlKFNfUFJJTUlUSVZFKVxuICAgIHZhciBPRkZTRVQgPSBlbWl0VmFsdWUoU19PRkZTRVQpXG5cbiAgICB2YXIgQ09VTlQgPSBlbWl0Q291bnQoKVxuICAgIGlmICh0eXBlb2YgQ09VTlQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoQ09VTlQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlubmVyKCdpZignLCBDT1VOVCwgJyl7JylcbiAgICAgIGlubmVyLmV4aXQoJ30nKVxuICAgIH1cblxuICAgIHZhciBJTlNUQU5DRVMsIEVYVF9JTlNUQU5DSU5HXG4gICAgaWYgKGV4dEluc3RhbmNpbmcpIHtcbiAgICAgIElOU1RBTkNFUyA9IGVtaXRWYWx1ZShTX0lOU1RBTkNFUylcbiAgICAgIEVYVF9JTlNUQU5DSU5HID0gZW52Lmluc3RhbmNpbmdcbiAgICB9XG5cbiAgICB2YXIgRUxFTUVOVF9UWVBFID0gRUxFTUVOVFMgKyAnLnR5cGUnXG5cbiAgICB2YXIgZWxlbWVudHNTdGF0aWMgPSBkcmF3T3B0aW9ucy5lbGVtZW50cyAmJiBpc1N0YXRpYyhkcmF3T3B0aW9ucy5lbGVtZW50cylcblxuICAgIGZ1bmN0aW9uIGVtaXRJbnN0YW5jaW5nICgpIHtcbiAgICAgIGZ1bmN0aW9uIGRyYXdFbGVtZW50cyAoKSB7XG4gICAgICAgIGlubmVyKEVYVF9JTlNUQU5DSU5HLCAnLmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKCcsIFtcbiAgICAgICAgICBQUklNSVRJVkUsXG4gICAgICAgICAgQ09VTlQsXG4gICAgICAgICAgRUxFTUVOVF9UWVBFLFxuICAgICAgICAgIE9GRlNFVCArICc8PCgoJyArIEVMRU1FTlRfVFlQRSArICctJyArIEdMX1VOU0lHTkVEX0JZVEUkOCArICcpPj4xKScsXG4gICAgICAgICAgSU5TVEFOQ0VTXG4gICAgICAgIF0sICcpOycpXG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRyYXdBcnJheXMgKCkge1xuICAgICAgICBpbm5lcihFWFRfSU5TVEFOQ0lORywgJy5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoJyxcbiAgICAgICAgICBbUFJJTUlUSVZFLCBPRkZTRVQsIENPVU5ULCBJTlNUQU5DRVNdLCAnKTsnKVxuICAgICAgfVxuXG4gICAgICBpZiAoRUxFTUVOVFMpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50c1N0YXRpYykge1xuICAgICAgICAgIGlubmVyKCdpZignLCBFTEVNRU5UUywgJyl7JylcbiAgICAgICAgICBkcmF3RWxlbWVudHMoKVxuICAgICAgICAgIGlubmVyKCd9ZWxzZXsnKVxuICAgICAgICAgIGRyYXdBcnJheXMoKVxuICAgICAgICAgIGlubmVyKCd9JylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkcmF3RWxlbWVudHMoKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkcmF3QXJyYXlzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0UmVndWxhciAoKSB7XG4gICAgICBmdW5jdGlvbiBkcmF3RWxlbWVudHMgKCkge1xuICAgICAgICBpbm5lcihHTCArICcuZHJhd0VsZW1lbnRzKCcgKyBbXG4gICAgICAgICAgUFJJTUlUSVZFLFxuICAgICAgICAgIENPVU5ULFxuICAgICAgICAgIEVMRU1FTlRfVFlQRSxcbiAgICAgICAgICBPRkZTRVQgKyAnPDwoKCcgKyBFTEVNRU5UX1RZUEUgKyAnLScgKyBHTF9VTlNJR05FRF9CWVRFJDggKyAnKT4+MSknXG4gICAgICAgIF0gKyAnKTsnKVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkcmF3QXJyYXlzICgpIHtcbiAgICAgICAgaW5uZXIoR0wgKyAnLmRyYXdBcnJheXMoJyArIFtQUklNSVRJVkUsIE9GRlNFVCwgQ09VTlRdICsgJyk7JylcbiAgICAgIH1cblxuICAgICAgaWYgKEVMRU1FTlRTKSB7XG4gICAgICAgIGlmICghZWxlbWVudHNTdGF0aWMpIHtcbiAgICAgICAgICBpbm5lcignaWYoJywgRUxFTUVOVFMsICcpeycpXG4gICAgICAgICAgZHJhd0VsZW1lbnRzKClcbiAgICAgICAgICBpbm5lcignfWVsc2V7JylcbiAgICAgICAgICBkcmF3QXJyYXlzKClcbiAgICAgICAgICBpbm5lcignfScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZHJhd0VsZW1lbnRzKClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhd0FycmF5cygpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4dEluc3RhbmNpbmcgJiYgKHR5cGVvZiBJTlNUQU5DRVMgIT09ICdudW1iZXInIHx8IElOU1RBTkNFUyA+PSAwKSkge1xuICAgICAgaWYgKHR5cGVvZiBJTlNUQU5DRVMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlubmVyKCdpZignLCBJTlNUQU5DRVMsICc+MCl7JylcbiAgICAgICAgZW1pdEluc3RhbmNpbmcoKVxuICAgICAgICBpbm5lcignfWVsc2UgaWYoJywgSU5TVEFOQ0VTLCAnPDApeycpXG4gICAgICAgIGVtaXRSZWd1bGFyKClcbiAgICAgICAgaW5uZXIoJ30nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW1pdEluc3RhbmNpbmcoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0UmVndWxhcigpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQm9keSAoZW1pdEJvZHksIHBhcmVudEVudiwgYXJncywgcHJvZ3JhbSwgY291bnQpIHtcbiAgICB2YXIgZW52ID0gY3JlYXRlUkVHTEVudmlyb25tZW50KClcbiAgICB2YXIgc2NvcGUgPSBlbnYucHJvYygnYm9keScsIGNvdW50KVxuICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgZW52LmNvbW1hbmRTdHIgPSBwYXJlbnRFbnYuY29tbWFuZFN0clxuICAgICAgZW52LmNvbW1hbmQgPSBlbnYubGluayhwYXJlbnRFbnYuY29tbWFuZFN0cilcbiAgICB9KVxuICAgIGlmIChleHRJbnN0YW5jaW5nKSB7XG4gICAgICBlbnYuaW5zdGFuY2luZyA9IHNjb3BlLmRlZihcbiAgICAgICAgZW52LnNoYXJlZC5leHRlbnNpb25zLCAnLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMnKVxuICAgIH1cbiAgICBlbWl0Qm9keShlbnYsIHNjb3BlLCBhcmdzLCBwcm9ncmFtKVxuICAgIHJldHVybiBlbnYuY29tcGlsZSgpLmJvZHlcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRFJBVyBQUk9DXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gZW1pdERyYXdCb2R5IChlbnYsIGRyYXcsIGFyZ3MsIHByb2dyYW0pIHtcbiAgICBpbmplY3RFeHRlbnNpb25zKGVudiwgZHJhdylcbiAgICBpZiAoYXJncy51c2VWQU8pIHtcbiAgICAgIGlmIChhcmdzLmRyYXdWQU8pIHtcbiAgICAgICAgZHJhdyhlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8oJywgYXJncy5kcmF3VkFPLmFwcGVuZChlbnYsIGRyYXcpLCAnKTsnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhdyhlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8oJywgZW52LnNoYXJlZC52YW8sICcudGFyZ2V0VkFPKTsnKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkcmF3KGVudi5zaGFyZWQudmFvLCAnLnNldFZBTyhudWxsKTsnKVxuICAgICAgZW1pdEF0dHJpYnV0ZXMoZW52LCBkcmF3LCBhcmdzLCBwcm9ncmFtLmF0dHJpYnV0ZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfVxuICAgIGVtaXRVbmlmb3JtcyhlbnYsIGRyYXcsIGFyZ3MsIHByb2dyYW0udW5pZm9ybXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSlcbiAgICBlbWl0RHJhdyhlbnYsIGRyYXcsIGRyYXcsIGFyZ3MpXG4gIH1cblxuICBmdW5jdGlvbiBlbWl0RHJhd1Byb2MgKGVudiwgYXJncykge1xuICAgIHZhciBkcmF3ID0gZW52LnByb2MoJ2RyYXcnLCAxKVxuXG4gICAgaW5qZWN0RXh0ZW5zaW9ucyhlbnYsIGRyYXcpXG5cbiAgICBlbWl0Q29udGV4dChlbnYsIGRyYXcsIGFyZ3MuY29udGV4dClcbiAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgZHJhdywgYXJncy5mcmFtZWJ1ZmZlcilcblxuICAgIGVtaXRQb2xsU3RhdGUoZW52LCBkcmF3LCBhcmdzKVxuICAgIGVtaXRTZXRPcHRpb25zKGVudiwgZHJhdywgYXJncy5zdGF0ZSlcblxuICAgIGVtaXRQcm9maWxlKGVudiwgZHJhdywgYXJncywgZmFsc2UsIHRydWUpXG5cbiAgICB2YXIgcHJvZ3JhbSA9IGFyZ3Muc2hhZGVyLnByb2dWYXIuYXBwZW5kKGVudiwgZHJhdylcbiAgICBkcmF3KGVudi5zaGFyZWQuZ2wsICcudXNlUHJvZ3JhbSgnLCBwcm9ncmFtLCAnLnByb2dyYW0pOycpXG5cbiAgICBpZiAoYXJncy5zaGFkZXIucHJvZ3JhbSkge1xuICAgICAgZW1pdERyYXdCb2R5KGVudiwgZHJhdywgYXJncywgYXJncy5zaGFkZXIucHJvZ3JhbSlcbiAgICB9IGVsc2Uge1xuICAgICAgZHJhdyhlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8obnVsbCk7JylcbiAgICAgIHZhciBkcmF3Q2FjaGUgPSBlbnYuZ2xvYmFsLmRlZigne30nKVxuICAgICAgdmFyIFBST0dfSUQgPSBkcmF3LmRlZihwcm9ncmFtLCAnLmlkJylcbiAgICAgIHZhciBDQUNIRURfUFJPQyA9IGRyYXcuZGVmKGRyYXdDYWNoZSwgJ1snLCBQUk9HX0lELCAnXScpXG4gICAgICBkcmF3KFxuICAgICAgICBlbnYuY29uZChDQUNIRURfUFJPQylcbiAgICAgICAgICAudGhlbihDQUNIRURfUFJPQywgJy5jYWxsKHRoaXMsYTApOycpXG4gICAgICAgICAgLmVsc2UoXG4gICAgICAgICAgICBDQUNIRURfUFJPQywgJz0nLCBkcmF3Q2FjaGUsICdbJywgUFJPR19JRCwgJ109JyxcbiAgICAgICAgICAgIGVudi5saW5rKGZ1bmN0aW9uIChwcm9ncmFtKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCb2R5KGVtaXREcmF3Qm9keSwgZW52LCBhcmdzLCBwcm9ncmFtLCAxKVxuICAgICAgICAgICAgfSksICcoJywgcHJvZ3JhbSwgJyk7JyxcbiAgICAgICAgICAgIENBQ0hFRF9QUk9DLCAnLmNhbGwodGhpcyxhMCk7JykpXG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGFyZ3Muc3RhdGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIGRyYXcoZW52LnNoYXJlZC5jdXJyZW50LCAnLmRpcnR5PXRydWU7JylcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEJBVENIIFBST0NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZ1bmN0aW9uIGVtaXRCYXRjaER5bmFtaWNTaGFkZXJCb2R5IChlbnYsIHNjb3BlLCBhcmdzLCBwcm9ncmFtKSB7XG4gICAgZW52LmJhdGNoSWQgPSAnYTEnXG5cbiAgICBpbmplY3RFeHRlbnNpb25zKGVudiwgc2NvcGUpXG5cbiAgICBmdW5jdGlvbiBhbGwgKCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBlbWl0QXR0cmlidXRlcyhlbnYsIHNjb3BlLCBhcmdzLCBwcm9ncmFtLmF0dHJpYnV0ZXMsIGFsbClcbiAgICBlbWl0VW5pZm9ybXMoZW52LCBzY29wZSwgYXJncywgcHJvZ3JhbS51bmlmb3JtcywgYWxsKVxuICAgIGVtaXREcmF3KGVudiwgc2NvcGUsIHNjb3BlLCBhcmdzKVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdEJhdGNoQm9keSAoZW52LCBzY29wZSwgYXJncywgcHJvZ3JhbSkge1xuICAgIGluamVjdEV4dGVuc2lvbnMoZW52LCBzY29wZSlcblxuICAgIHZhciBjb250ZXh0RHluYW1pYyA9IGFyZ3MuY29udGV4dERlcFxuXG4gICAgdmFyIEJBVENIX0lEID0gc2NvcGUuZGVmKClcbiAgICB2YXIgUFJPUF9MSVNUID0gJ2EwJ1xuICAgIHZhciBOVU1fUFJPUFMgPSAnYTEnXG4gICAgdmFyIFBST1BTID0gc2NvcGUuZGVmKClcbiAgICBlbnYuc2hhcmVkLnByb3BzID0gUFJPUFNcbiAgICBlbnYuYmF0Y2hJZCA9IEJBVENIX0lEXG5cbiAgICB2YXIgb3V0ZXIgPSBlbnYuc2NvcGUoKVxuICAgIHZhciBpbm5lciA9IGVudi5zY29wZSgpXG5cbiAgICBzY29wZShcbiAgICAgIG91dGVyLmVudHJ5LFxuICAgICAgJ2ZvcignLCBCQVRDSF9JRCwgJz0wOycsIEJBVENIX0lELCAnPCcsIE5VTV9QUk9QUywgJzsrKycsIEJBVENIX0lELCAnKXsnLFxuICAgICAgUFJPUFMsICc9JywgUFJPUF9MSVNULCAnWycsIEJBVENIX0lELCAnXTsnLFxuICAgICAgaW5uZXIsXG4gICAgICAnfScsXG4gICAgICBvdXRlci5leGl0KVxuXG4gICAgZnVuY3Rpb24gaXNJbm5lckRlZm4gKGRlZm4pIHtcbiAgICAgIHJldHVybiAoKGRlZm4uY29udGV4dERlcCAmJiBjb250ZXh0RHluYW1pYykgfHwgZGVmbi5wcm9wRGVwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT3V0ZXJEZWZuIChkZWZuKSB7XG4gICAgICByZXR1cm4gIWlzSW5uZXJEZWZuKGRlZm4pXG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubmVlZHNDb250ZXh0KSB7XG4gICAgICBlbWl0Q29udGV4dChlbnYsIGlubmVyLCBhcmdzLmNvbnRleHQpXG4gICAgfVxuICAgIGlmIChhcmdzLm5lZWRzRnJhbWVidWZmZXIpIHtcbiAgICAgIGVtaXRQb2xsRnJhbWVidWZmZXIoZW52LCBpbm5lciwgYXJncy5mcmFtZWJ1ZmZlcilcbiAgICB9XG4gICAgZW1pdFNldE9wdGlvbnMoZW52LCBpbm5lciwgYXJncy5zdGF0ZSwgaXNJbm5lckRlZm4pXG5cbiAgICBpZiAoYXJncy5wcm9maWxlICYmIGlzSW5uZXJEZWZuKGFyZ3MucHJvZmlsZSkpIHtcbiAgICAgIGVtaXRQcm9maWxlKGVudiwgaW5uZXIsIGFyZ3MsIGZhbHNlLCB0cnVlKVxuICAgIH1cblxuICAgIGlmICghcHJvZ3JhbSkge1xuICAgICAgdmFyIHByb2dDYWNoZSA9IGVudi5nbG9iYWwuZGVmKCd7fScpXG4gICAgICB2YXIgUFJPR1JBTSA9IGFyZ3Muc2hhZGVyLnByb2dWYXIuYXBwZW5kKGVudiwgaW5uZXIpXG4gICAgICB2YXIgUFJPR19JRCA9IGlubmVyLmRlZihQUk9HUkFNLCAnLmlkJylcbiAgICAgIHZhciBDQUNIRURfUFJPQyA9IGlubmVyLmRlZihwcm9nQ2FjaGUsICdbJywgUFJPR19JRCwgJ10nKVxuICAgICAgaW5uZXIoXG4gICAgICAgIGVudi5zaGFyZWQuZ2wsICcudXNlUHJvZ3JhbSgnLCBQUk9HUkFNLCAnLnByb2dyYW0pOycsXG4gICAgICAgICdpZighJywgQ0FDSEVEX1BST0MsICcpeycsXG4gICAgICAgIENBQ0hFRF9QUk9DLCAnPScsIHByb2dDYWNoZSwgJ1snLCBQUk9HX0lELCAnXT0nLFxuICAgICAgICBlbnYubGluayhmdW5jdGlvbiAocHJvZ3JhbSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVCb2R5KFxuICAgICAgICAgICAgZW1pdEJhdGNoRHluYW1pY1NoYWRlckJvZHksIGVudiwgYXJncywgcHJvZ3JhbSwgMilcbiAgICAgICAgfSksICcoJywgUFJPR1JBTSwgJyk7fScsXG4gICAgICAgIENBQ0hFRF9QUk9DLCAnLmNhbGwodGhpcyxhMFsnLCBCQVRDSF9JRCwgJ10sJywgQkFUQ0hfSUQsICcpOycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChhcmdzLnVzZVZBTykge1xuICAgICAgICBpZiAoYXJncy5kcmF3VkFPKSB7XG4gICAgICAgICAgaWYgKGlzSW5uZXJEZWZuKGFyZ3MuZHJhd1ZBTykpIHtcbiAgICAgICAgICAgIC8vIHZhbyBpcyBhIHByb3BcbiAgICAgICAgICAgIGlubmVyKGVudi5zaGFyZWQudmFvLCAnLnNldFZBTygnLCBhcmdzLmRyYXdWQU8uYXBwZW5kKGVudiwgaW5uZXIpLCAnKTsnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB2YW8gaXMgaW52YXJpYW50XG4gICAgICAgICAgICBvdXRlcihlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8oJywgYXJncy5kcmF3VkFPLmFwcGVuZChlbnYsIG91dGVyKSwgJyk7JylcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gc2NvcGVkIHZhbyBiaW5kaW5nXG4gICAgICAgICAgb3V0ZXIoZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKCcsIGVudi5zaGFyZWQudmFvLCAnLnRhcmdldFZBTyk7JylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ZXIoZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKG51bGwpOycpXG4gICAgICAgIGVtaXRBdHRyaWJ1dGVzKGVudiwgb3V0ZXIsIGFyZ3MsIHByb2dyYW0uYXR0cmlidXRlcywgaXNPdXRlckRlZm4pXG4gICAgICAgIGVtaXRBdHRyaWJ1dGVzKGVudiwgaW5uZXIsIGFyZ3MsIHByb2dyYW0uYXR0cmlidXRlcywgaXNJbm5lckRlZm4pXG4gICAgICB9XG4gICAgICBlbWl0VW5pZm9ybXMoZW52LCBvdXRlciwgYXJncywgcHJvZ3JhbS51bmlmb3JtcywgaXNPdXRlckRlZm4pXG4gICAgICBlbWl0VW5pZm9ybXMoZW52LCBpbm5lciwgYXJncywgcHJvZ3JhbS51bmlmb3JtcywgaXNJbm5lckRlZm4pXG4gICAgICBlbWl0RHJhdyhlbnYsIG91dGVyLCBpbm5lciwgYXJncylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbWl0QmF0Y2hQcm9jIChlbnYsIGFyZ3MpIHtcbiAgICB2YXIgYmF0Y2ggPSBlbnYucHJvYygnYmF0Y2gnLCAyKVxuICAgIGVudi5iYXRjaElkID0gJzAnXG5cbiAgICBpbmplY3RFeHRlbnNpb25zKGVudiwgYmF0Y2gpXG5cbiAgICAvLyBDaGVjayBpZiBhbnkgY29udGV4dCB2YXJpYWJsZXMgZGVwZW5kIG9uIHByb3BzXG4gICAgdmFyIGNvbnRleHREeW5hbWljID0gZmFsc2VcbiAgICB2YXIgbmVlZHNDb250ZXh0ID0gdHJ1ZVxuICAgIE9iamVjdC5rZXlzKGFyZ3MuY29udGV4dCkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgY29udGV4dER5bmFtaWMgPSBjb250ZXh0RHluYW1pYyB8fCBhcmdzLmNvbnRleHRbbmFtZV0ucHJvcERlcFxuICAgIH0pXG4gICAgaWYgKCFjb250ZXh0RHluYW1pYykge1xuICAgICAgZW1pdENvbnRleHQoZW52LCBiYXRjaCwgYXJncy5jb250ZXh0KVxuICAgICAgbmVlZHNDb250ZXh0ID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBmcmFtZWJ1ZmZlciBzdGF0ZSBhZmZlY3RzIGZyYW1lYnVmZmVyV2lkdGgvaGVpZ2h0IGNvbnRleHQgdmFyc1xuICAgIHZhciBmcmFtZWJ1ZmZlciA9IGFyZ3MuZnJhbWVidWZmZXJcbiAgICB2YXIgbmVlZHNGcmFtZWJ1ZmZlciA9IGZhbHNlXG4gICAgaWYgKGZyYW1lYnVmZmVyKSB7XG4gICAgICBpZiAoZnJhbWVidWZmZXIucHJvcERlcCkge1xuICAgICAgICBjb250ZXh0RHluYW1pYyA9IG5lZWRzRnJhbWVidWZmZXIgPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGZyYW1lYnVmZmVyLmNvbnRleHREZXAgJiYgY29udGV4dER5bmFtaWMpIHtcbiAgICAgICAgbmVlZHNGcmFtZWJ1ZmZlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICghbmVlZHNGcmFtZWJ1ZmZlcikge1xuICAgICAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgYmF0Y2gsIGZyYW1lYnVmZmVyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgYmF0Y2gsIG51bGwpXG4gICAgfVxuXG4gICAgLy8gdmlld3BvcnQgaXMgd2VpcmQgYmVjYXVzZSBpdCBjYW4gYWZmZWN0IGNvbnRleHQgdmFyc1xuICAgIGlmIChhcmdzLnN0YXRlLnZpZXdwb3J0ICYmIGFyZ3Muc3RhdGUudmlld3BvcnQucHJvcERlcCkge1xuICAgICAgY29udGV4dER5bmFtaWMgPSB0cnVlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJbm5lckRlZm4gKGRlZm4pIHtcbiAgICAgIHJldHVybiAoZGVmbi5jb250ZXh0RGVwICYmIGNvbnRleHREeW5hbWljKSB8fCBkZWZuLnByb3BEZXBcbiAgICB9XG5cbiAgICAvLyBzZXQgd2ViZ2wgb3B0aW9uc1xuICAgIGVtaXRQb2xsU3RhdGUoZW52LCBiYXRjaCwgYXJncylcbiAgICBlbWl0U2V0T3B0aW9ucyhlbnYsIGJhdGNoLCBhcmdzLnN0YXRlLCBmdW5jdGlvbiAoZGVmbikge1xuICAgICAgcmV0dXJuICFpc0lubmVyRGVmbihkZWZuKVxuICAgIH0pXG5cbiAgICBpZiAoIWFyZ3MucHJvZmlsZSB8fCAhaXNJbm5lckRlZm4oYXJncy5wcm9maWxlKSkge1xuICAgICAgZW1pdFByb2ZpbGUoZW52LCBiYXRjaCwgYXJncywgZmFsc2UsICdhMScpXG4gICAgfVxuXG4gICAgLy8gU2F2ZSB0aGVzZSB2YWx1ZXMgdG8gYXJncyBzbyB0aGF0IHRoZSBiYXRjaCBib2R5IHJvdXRpbmUgY2FuIHVzZSB0aGVtXG4gICAgYXJncy5jb250ZXh0RGVwID0gY29udGV4dER5bmFtaWNcbiAgICBhcmdzLm5lZWRzQ29udGV4dCA9IG5lZWRzQ29udGV4dFxuICAgIGFyZ3MubmVlZHNGcmFtZWJ1ZmZlciA9IG5lZWRzRnJhbWVidWZmZXJcblxuICAgIC8vIGRldGVybWluZSBpZiBzaGFkZXIgaXMgZHluYW1pY1xuICAgIHZhciBwcm9nRGVmbiA9IGFyZ3Muc2hhZGVyLnByb2dWYXJcbiAgICBpZiAoKHByb2dEZWZuLmNvbnRleHREZXAgJiYgY29udGV4dER5bmFtaWMpIHx8IHByb2dEZWZuLnByb3BEZXApIHtcbiAgICAgIGVtaXRCYXRjaEJvZHkoXG4gICAgICAgIGVudixcbiAgICAgICAgYmF0Y2gsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBQUk9HUkFNID0gcHJvZ0RlZm4uYXBwZW5kKGVudiwgYmF0Y2gpXG4gICAgICBiYXRjaChlbnYuc2hhcmVkLmdsLCAnLnVzZVByb2dyYW0oJywgUFJPR1JBTSwgJy5wcm9ncmFtKTsnKVxuICAgICAgaWYgKGFyZ3Muc2hhZGVyLnByb2dyYW0pIHtcbiAgICAgICAgZW1pdEJhdGNoQm9keShcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgYmF0Y2gsXG4gICAgICAgICAgYXJncyxcbiAgICAgICAgICBhcmdzLnNoYWRlci5wcm9ncmFtKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmF0Y2goZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKG51bGwpOycpXG4gICAgICAgIHZhciBiYXRjaENhY2hlID0gZW52Lmdsb2JhbC5kZWYoJ3t9JylcbiAgICAgICAgdmFyIFBST0dfSUQgPSBiYXRjaC5kZWYoUFJPR1JBTSwgJy5pZCcpXG4gICAgICAgIHZhciBDQUNIRURfUFJPQyA9IGJhdGNoLmRlZihiYXRjaENhY2hlLCAnWycsIFBST0dfSUQsICddJylcbiAgICAgICAgYmF0Y2goXG4gICAgICAgICAgZW52LmNvbmQoQ0FDSEVEX1BST0MpXG4gICAgICAgICAgICAudGhlbihDQUNIRURfUFJPQywgJy5jYWxsKHRoaXMsYTAsYTEpOycpXG4gICAgICAgICAgICAuZWxzZShcbiAgICAgICAgICAgICAgQ0FDSEVEX1BST0MsICc9JywgYmF0Y2hDYWNoZSwgJ1snLCBQUk9HX0lELCAnXT0nLFxuICAgICAgICAgICAgICBlbnYubGluayhmdW5jdGlvbiAocHJvZ3JhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCb2R5KGVtaXRCYXRjaEJvZHksIGVudiwgYXJncywgcHJvZ3JhbSwgMilcbiAgICAgICAgICAgICAgfSksICcoJywgUFJPR1JBTSwgJyk7JyxcbiAgICAgICAgICAgICAgQ0FDSEVEX1BST0MsICcuY2FsbCh0aGlzLGEwLGExKTsnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoYXJncy5zdGF0ZSkubGVuZ3RoID4gMCkge1xuICAgICAgYmF0Y2goZW52LnNoYXJlZC5jdXJyZW50LCAnLmRpcnR5PXRydWU7JylcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNDT1BFIENPTU1BTkRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBmdW5jdGlvbiBlbWl0U2NvcGVQcm9jIChlbnYsIGFyZ3MpIHtcbiAgICB2YXIgc2NvcGUgPSBlbnYucHJvYygnc2NvcGUnLCAzKVxuICAgIGVudi5iYXRjaElkID0gJ2EyJ1xuXG4gICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcbiAgICB2YXIgQ1VSUkVOVF9TVEFURSA9IHNoYXJlZC5jdXJyZW50XG5cbiAgICBlbWl0Q29udGV4dChlbnYsIHNjb3BlLCBhcmdzLmNvbnRleHQpXG5cbiAgICBpZiAoYXJncy5mcmFtZWJ1ZmZlcikge1xuICAgICAgYXJncy5mcmFtZWJ1ZmZlci5hcHBlbmQoZW52LCBzY29wZSlcbiAgICB9XG5cbiAgICBzb3J0U3RhdGUoT2JqZWN0LmtleXMoYXJncy5zdGF0ZSkpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBkZWZuID0gYXJncy5zdGF0ZVtuYW1lXVxuICAgICAgdmFyIHZhbHVlID0gZGVmbi5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodiwgaSkge1xuICAgICAgICAgIHNjb3BlLnNldChlbnYubmV4dFtuYW1lXSwgJ1snICsgaSArICddJywgdilcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjb3BlLnNldChzaGFyZWQubmV4dCwgJy4nICsgbmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGVtaXRQcm9maWxlKGVudiwgc2NvcGUsIGFyZ3MsIHRydWUsIHRydWUpXG5cbiAgICA7W1NfRUxFTUVOVFMsIFNfT0ZGU0VULCBTX0NPVU5ULCBTX0lOU1RBTkNFUywgU19QUklNSVRJVkVdLmZvckVhY2goXG4gICAgICBmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgIHZhciB2YXJpYWJsZSA9IGFyZ3MuZHJhd1tvcHRdXG4gICAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzY29wZS5zZXQoc2hhcmVkLmRyYXcsICcuJyArIG9wdCwgJycgKyB2YXJpYWJsZS5hcHBlbmQoZW52LCBzY29wZSkpXG4gICAgICB9KVxuXG4gICAgT2JqZWN0LmtleXMoYXJncy51bmlmb3JtcykuZm9yRWFjaChmdW5jdGlvbiAob3B0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcmdzLnVuaWZvcm1zW29wdF0uYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSAnWycgKyB2YWx1ZS5qb2luKCkgKyAnXSdcbiAgICAgIH1cbiAgICAgIHNjb3BlLnNldChcbiAgICAgICAgc2hhcmVkLnVuaWZvcm1zLFxuICAgICAgICAnWycgKyBzdHJpbmdTdG9yZS5pZChvcHQpICsgJ10nLFxuICAgICAgICB2YWx1ZSlcbiAgICB9KVxuXG4gICAgT2JqZWN0LmtleXMoYXJncy5hdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgcmVjb3JkID0gYXJncy5hdHRyaWJ1dGVzW25hbWVdLmFwcGVuZChlbnYsIHNjb3BlKVxuICAgICAgdmFyIHNjb3BlQXR0cmliID0gZW52LnNjb3BlQXR0cmliKG5hbWUpXG4gICAgICBPYmplY3Qua2V5cyhuZXcgQXR0cmlidXRlUmVjb3JkKCkpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgc2NvcGUuc2V0KHNjb3BlQXR0cmliLCAnLicgKyBwcm9wLCByZWNvcmRbcHJvcF0pXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoYXJncy5zY29wZVZBTykge1xuICAgICAgc2NvcGUuc2V0KHNoYXJlZC52YW8sICcudGFyZ2V0VkFPJywgYXJncy5zY29wZVZBTy5hcHBlbmQoZW52LCBzY29wZSkpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2F2ZVNoYWRlciAobmFtZSkge1xuICAgICAgdmFyIHNoYWRlciA9IGFyZ3Muc2hhZGVyW25hbWVdXG4gICAgICBpZiAoc2hhZGVyKSB7XG4gICAgICAgIHNjb3BlLnNldChzaGFyZWQuc2hhZGVyLCAnLicgKyBuYW1lLCBzaGFkZXIuYXBwZW5kKGVudiwgc2NvcGUpKVxuICAgICAgfVxuICAgIH1cbiAgICBzYXZlU2hhZGVyKFNfVkVSVClcbiAgICBzYXZlU2hhZGVyKFNfRlJBRylcblxuICAgIGlmIChPYmplY3Qua2V5cyhhcmdzLnN0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICBzY29wZShDVVJSRU5UX1NUQVRFLCAnLmRpcnR5PXRydWU7JylcbiAgICAgIHNjb3BlLmV4aXQoQ1VSUkVOVF9TVEFURSwgJy5kaXJ0eT10cnVlOycpXG4gICAgfVxuXG4gICAgc2NvcGUoJ2ExKCcsIGVudi5zaGFyZWQuY29udGV4dCwgJyxhMCwnLCBlbnYuYmF0Y2hJZCwgJyk7JylcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRHluYW1pY09iamVjdCAob2JqZWN0KSB7XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnIHx8IGlzQXJyYXlMaWtlKG9iamVjdCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGR5bmFtaWMuaXNEeW5hbWljKG9iamVjdFtwcm9wc1tpXV0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gc3BsYXRPYmplY3QgKGVudiwgb3B0aW9ucywgbmFtZSkge1xuICAgIHZhciBvYmplY3QgPSBvcHRpb25zLnN0YXRpY1tuYW1lXVxuICAgIGlmICghb2JqZWN0IHx8ICFpc0R5bmFtaWNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGdsb2JhbHMgPSBlbnYuZ2xvYmFsXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgdmFyIHRoaXNEZXAgPSBmYWxzZVxuICAgIHZhciBjb250ZXh0RGVwID0gZmFsc2VcbiAgICB2YXIgcHJvcERlcCA9IGZhbHNlXG4gICAgdmFyIG9iamVjdFJlZiA9IGVudi5nbG9iYWwuZGVmKCd7fScpXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldXG4gICAgICBpZiAoZHluYW1pYy5pc0R5bmFtaWModmFsdWUpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldID0gZHluYW1pYy51bmJveCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVwcyA9IGNyZWF0ZUR5bmFtaWNEZWNsKHZhbHVlLCBudWxsKVxuICAgICAgICB0aGlzRGVwID0gdGhpc0RlcCB8fCBkZXBzLnRoaXNEZXBcbiAgICAgICAgcHJvcERlcCA9IHByb3BEZXAgfHwgZGVwcy5wcm9wRGVwXG4gICAgICAgIGNvbnRleHREZXAgPSBjb250ZXh0RGVwIHx8IGRlcHMuY29udGV4dERlcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2xvYmFscyhvYmplY3RSZWYsICcuJywga2V5LCAnPScpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIGdsb2JhbHModmFsdWUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBnbG9iYWxzKCdcIicsIHZhbHVlLCAnXCInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGdsb2JhbHMoJ1snLCB2YWx1ZS5qb2luKCksICddJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGdsb2JhbHMoZW52LmxpbmsodmFsdWUpKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBnbG9iYWxzKCc7JylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgZnVuY3Rpb24gYXBwZW5kQmxvY2sgKGVudiwgYmxvY2spIHtcbiAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldXG4gICAgICAgIGlmICghZHluYW1pYy5pc0R5bmFtaWModmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlZiA9IGVudi5pbnZva2UoYmxvY2ssIHZhbHVlKVxuICAgICAgICBibG9jayhvYmplY3RSZWYsICcuJywga2V5LCAnPScsIHJlZiwgJzsnKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBvcHRpb25zLmR5bmFtaWNbbmFtZV0gPSBuZXcgZHluYW1pYy5EeW5hbWljVmFyaWFibGUoRFlOX1RIVU5LLCB7XG4gICAgICB0aGlzRGVwOiB0aGlzRGVwLFxuICAgICAgY29udGV4dERlcDogY29udGV4dERlcCxcbiAgICAgIHByb3BEZXA6IHByb3BEZXAsXG4gICAgICByZWY6IG9iamVjdFJlZixcbiAgICAgIGFwcGVuZDogYXBwZW5kQmxvY2tcbiAgICB9KVxuICAgIGRlbGV0ZSBvcHRpb25zLnN0YXRpY1tuYW1lXVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNQUlOIERSQVcgQ09NTUFORFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGZ1bmN0aW9uIGNvbXBpbGVDb21tYW5kIChvcHRpb25zLCBhdHRyaWJ1dGVzLCB1bmlmb3JtcywgY29udGV4dCwgc3RhdHMpIHtcbiAgICB2YXIgZW52ID0gY3JlYXRlUkVHTEVudmlyb25tZW50KClcblxuICAgIC8vIGxpbmsgc3RhdHMsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBhY2Nlc3MgaXQgaW4gdGhlIHByb2dyYW0uXG4gICAgZW52LnN0YXRzID0gZW52Lmxpbmsoc3RhdHMpXG5cbiAgICAvLyBzcGxhdCBvcHRpb25zIGFuZCBhdHRyaWJ1dGVzIHRvIGFsbG93IGZvciBkeW5hbWljIG5lc3RlZCBwcm9wZXJ0aWVzXG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcy5zdGF0aWMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgc3BsYXRPYmplY3QoZW52LCBhdHRyaWJ1dGVzLCBrZXkpXG4gICAgfSlcbiAgICBORVNURURfT1BUSU9OUy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBzcGxhdE9iamVjdChlbnYsIG9wdGlvbnMsIG5hbWUpXG4gICAgfSlcblxuICAgIHZhciBhcmdzID0gcGFyc2VBcmd1bWVudHMob3B0aW9ucywgYXR0cmlidXRlcywgdW5pZm9ybXMsIGNvbnRleHQsIGVudilcblxuICAgIGVtaXREcmF3UHJvYyhlbnYsIGFyZ3MpXG4gICAgZW1pdFNjb3BlUHJvYyhlbnYsIGFyZ3MpXG4gICAgZW1pdEJhdGNoUHJvYyhlbnYsIGFyZ3MpXG5cbiAgICByZXR1cm4gZXh0ZW5kKGVudi5jb21waWxlKCksIHtcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXJncy5zaGFkZXIucHJvZ3JhbS5kZXN0cm95KClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQT0xMIC8gUkVGUkVTSFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHJldHVybiB7XG4gICAgbmV4dDogbmV4dFN0YXRlLFxuICAgIGN1cnJlbnQ6IGN1cnJlbnRTdGF0ZSxcbiAgICBwcm9jczogKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBlbnYgPSBjcmVhdGVSRUdMRW52aXJvbm1lbnQoKVxuICAgICAgdmFyIHBvbGwgPSBlbnYucHJvYygncG9sbCcpXG4gICAgICB2YXIgcmVmcmVzaCA9IGVudi5wcm9jKCdyZWZyZXNoJylcbiAgICAgIHZhciBjb21tb24gPSBlbnYuYmxvY2soKVxuICAgICAgcG9sbChjb21tb24pXG4gICAgICByZWZyZXNoKGNvbW1vbilcblxuICAgICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcbiAgICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuICAgICAgdmFyIE5FWFRfU1RBVEUgPSBzaGFyZWQubmV4dFxuICAgICAgdmFyIENVUlJFTlRfU1RBVEUgPSBzaGFyZWQuY3VycmVudFxuXG4gICAgICBjb21tb24oQ1VSUkVOVF9TVEFURSwgJy5kaXJ0eT1mYWxzZTsnKVxuXG4gICAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgcG9sbClcbiAgICAgIGVtaXRQb2xsRnJhbWVidWZmZXIoZW52LCByZWZyZXNoLCBudWxsLCB0cnVlKVxuXG4gICAgICAvLyBSZWZyZXNoIHVwZGF0ZXMgYWxsIGF0dHJpYnV0ZSBzdGF0ZSBjaGFuZ2VzXG4gICAgICB2YXIgSU5TVEFOQ0lOR1xuICAgICAgaWYgKGV4dEluc3RhbmNpbmcpIHtcbiAgICAgICAgSU5TVEFOQ0lORyA9IGVudi5saW5rKGV4dEluc3RhbmNpbmcpXG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSB2ZXJ0ZXggYXJyYXkgYmluZGluZ3NcbiAgICAgIGlmIChleHRlbnNpb25zLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0KSB7XG4gICAgICAgIHJlZnJlc2goZW52LmxpbmsoZXh0ZW5zaW9ucy5vZXNfdmVydGV4X2FycmF5X29iamVjdCksICcuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOycpXG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbWl0cy5tYXhBdHRyaWJ1dGVzOyArK2kpIHtcbiAgICAgICAgdmFyIEJJTkRJTkcgPSByZWZyZXNoLmRlZihzaGFyZWQuYXR0cmlidXRlcywgJ1snLCBpLCAnXScpXG4gICAgICAgIHZhciBpZnRlID0gZW52LmNvbmQoQklORElORywgJy5idWZmZXInKVxuICAgICAgICBpZnRlLnRoZW4oXG4gICAgICAgICAgR0wsICcuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoJywgaSwgJyk7JyxcbiAgICAgICAgICBHTCwgJy5iaW5kQnVmZmVyKCcsXG4gICAgICAgICAgR0xfQVJSQVlfQlVGRkVSJDIsICcsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLmJ1ZmZlci5idWZmZXIpOycsXG4gICAgICAgICAgR0wsICcudmVydGV4QXR0cmliUG9pbnRlcignLFxuICAgICAgICAgIGksICcsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnNpemUsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnR5cGUsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLm5vcm1hbGl6ZWQsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnN0cmlkZSwnLFxuICAgICAgICAgIEJJTkRJTkcsICcub2Zmc2V0KTsnXG4gICAgICAgICkuZWxzZShcbiAgICAgICAgICBHTCwgJy5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoJywgaSwgJyk7JyxcbiAgICAgICAgICBHTCwgJy52ZXJ0ZXhBdHRyaWI0ZignLFxuICAgICAgICAgIGksICcsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLngsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnksJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnosJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLncpOycsXG4gICAgICAgICAgQklORElORywgJy5idWZmZXI9bnVsbDsnKVxuICAgICAgICByZWZyZXNoKGlmdGUpXG4gICAgICAgIGlmIChleHRJbnN0YW5jaW5nKSB7XG4gICAgICAgICAgcmVmcmVzaChcbiAgICAgICAgICAgIElOU1RBTkNJTkcsICcudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCcsXG4gICAgICAgICAgICBpLCAnLCcsXG4gICAgICAgICAgICBCSU5ESU5HLCAnLmRpdmlzb3IpOycpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlZnJlc2goXG4gICAgICAgIGVudi5zaGFyZWQudmFvLCAnLmN1cnJlbnRWQU89bnVsbDsnLFxuICAgICAgICBlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8oJywgZW52LnNoYXJlZC52YW8sICcudGFyZ2V0VkFPKTsnKVxuXG4gICAgICBPYmplY3Qua2V5cyhHTF9GTEFHUykuZm9yRWFjaChmdW5jdGlvbiAoZmxhZykge1xuICAgICAgICB2YXIgY2FwID0gR0xfRkxBR1NbZmxhZ11cbiAgICAgICAgdmFyIE5FWFQgPSBjb21tb24uZGVmKE5FWFRfU1RBVEUsICcuJywgZmxhZylcbiAgICAgICAgdmFyIGJsb2NrID0gZW52LmJsb2NrKClcbiAgICAgICAgYmxvY2soJ2lmKCcsIE5FWFQsICcpeycsXG4gICAgICAgICAgR0wsICcuZW5hYmxlKCcsIGNhcCwgJyl9ZWxzZXsnLFxuICAgICAgICAgIEdMLCAnLmRpc2FibGUoJywgY2FwLCAnKX0nLFxuICAgICAgICAgIENVUlJFTlRfU1RBVEUsICcuJywgZmxhZywgJz0nLCBORVhULCAnOycpXG4gICAgICAgIHJlZnJlc2goYmxvY2spXG4gICAgICAgIHBvbGwoXG4gICAgICAgICAgJ2lmKCcsIE5FWFQsICchPT0nLCBDVVJSRU5UX1NUQVRFLCAnLicsIGZsYWcsICcpeycsXG4gICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgJ30nKVxuICAgICAgfSlcblxuICAgICAgT2JqZWN0LmtleXMoR0xfVkFSSUFCTEVTKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBmdW5jID0gR0xfVkFSSUFCTEVTW25hbWVdXG4gICAgICAgIHZhciBpbml0ID0gY3VycmVudFN0YXRlW25hbWVdXG4gICAgICAgIHZhciBORVhULCBDVVJSRU5UXG4gICAgICAgIHZhciBibG9jayA9IGVudi5ibG9jaygpXG4gICAgICAgIGJsb2NrKEdMLCAnLicsIGZ1bmMsICcoJylcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGluaXQpKSB7XG4gICAgICAgICAgdmFyIG4gPSBpbml0Lmxlbmd0aFxuICAgICAgICAgIE5FWFQgPSBlbnYuZ2xvYmFsLmRlZihORVhUX1NUQVRFLCAnLicsIG5hbWUpXG4gICAgICAgICAgQ1VSUkVOVCA9IGVudi5nbG9iYWwuZGVmKENVUlJFTlRfU1RBVEUsICcuJywgbmFtZSlcbiAgICAgICAgICBibG9jayhcbiAgICAgICAgICAgIGxvb3AobiwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE5FWFQgKyAnWycgKyBpICsgJ10nXG4gICAgICAgICAgICB9KSwgJyk7JyxcbiAgICAgICAgICAgIGxvb3AobiwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIENVUlJFTlQgKyAnWycgKyBpICsgJ109JyArIE5FWFQgKyAnWycgKyBpICsgJ107J1xuICAgICAgICAgICAgfSkuam9pbignJykpXG4gICAgICAgICAgcG9sbChcbiAgICAgICAgICAgICdpZignLCBsb29wKG4sIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBORVhUICsgJ1snICsgaSArICddIT09JyArIENVUlJFTlQgKyAnWycgKyBpICsgJ10nXG4gICAgICAgICAgICB9KS5qb2luKCd8fCcpLCAnKXsnLFxuICAgICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgICAnfScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgTkVYVCA9IGNvbW1vbi5kZWYoTkVYVF9TVEFURSwgJy4nLCBuYW1lKVxuICAgICAgICAgIENVUlJFTlQgPSBjb21tb24uZGVmKENVUlJFTlRfU1RBVEUsICcuJywgbmFtZSlcbiAgICAgICAgICBibG9jayhcbiAgICAgICAgICAgIE5FWFQsICcpOycsXG4gICAgICAgICAgICBDVVJSRU5UX1NUQVRFLCAnLicsIG5hbWUsICc9JywgTkVYVCwgJzsnKVxuICAgICAgICAgIHBvbGwoXG4gICAgICAgICAgICAnaWYoJywgTkVYVCwgJyE9PScsIENVUlJFTlQsICcpeycsXG4gICAgICAgICAgICBibG9jayxcbiAgICAgICAgICAgICd9JylcbiAgICAgICAgfVxuICAgICAgICByZWZyZXNoKGJsb2NrKVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIGVudi5jb21waWxlKClcbiAgICB9KSgpLFxuICAgIGNvbXBpbGU6IGNvbXBpbGVDb21tYW5kXG4gIH1cbn1cblxuZnVuY3Rpb24gc3RhdHMgKCkge1xuICByZXR1cm4ge1xuICAgIHZhb0NvdW50OiAwLFxuICAgIGJ1ZmZlckNvdW50OiAwLFxuICAgIGVsZW1lbnRzQ291bnQ6IDAsXG4gICAgZnJhbWVidWZmZXJDb3VudDogMCxcbiAgICBzaGFkZXJDb3VudDogMCxcbiAgICB0ZXh0dXJlQ291bnQ6IDAsXG4gICAgY3ViZUNvdW50OiAwLFxuICAgIHJlbmRlcmJ1ZmZlckNvdW50OiAwLFxuICAgIG1heFRleHR1cmVVbml0czogMFxuICB9XG59XG5cbnZhciBHTF9RVUVSWV9SRVNVTFRfRVhUID0gMHg4ODY2XG52YXIgR0xfUVVFUllfUkVTVUxUX0FWQUlMQUJMRV9FWFQgPSAweDg4NjdcbnZhciBHTF9USU1FX0VMQVBTRURfRVhUID0gMHg4OEJGXG5cbnZhciBjcmVhdGVUaW1lciA9IGZ1bmN0aW9uIChnbCwgZXh0ZW5zaW9ucykge1xuICBpZiAoIWV4dGVuc2lvbnMuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIFFVRVJZIFBPT0wgQkVHSU5cbiAgdmFyIHF1ZXJ5UG9vbCA9IFtdXG4gIGZ1bmN0aW9uIGFsbG9jUXVlcnkgKCkge1xuICAgIHJldHVybiBxdWVyeVBvb2wucG9wKCkgfHwgZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuY3JlYXRlUXVlcnlFWFQoKVxuICB9XG4gIGZ1bmN0aW9uIGZyZWVRdWVyeSAocXVlcnkpIHtcbiAgICBxdWVyeVBvb2wucHVzaChxdWVyeSlcbiAgfVxuICAvLyBRVUVSWSBQT09MIEVORFxuXG4gIHZhciBwZW5kaW5nUXVlcmllcyA9IFtdXG4gIGZ1bmN0aW9uIGJlZ2luUXVlcnkgKHN0YXRzKSB7XG4gICAgdmFyIHF1ZXJ5ID0gYWxsb2NRdWVyeSgpXG4gICAgZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuYmVnaW5RdWVyeUVYVChHTF9USU1FX0VMQVBTRURfRVhULCBxdWVyeSlcbiAgICBwZW5kaW5nUXVlcmllcy5wdXNoKHF1ZXJ5KVxuICAgIHB1c2hTY29wZVN0YXRzKHBlbmRpbmdRdWVyaWVzLmxlbmd0aCAtIDEsIHBlbmRpbmdRdWVyaWVzLmxlbmd0aCwgc3RhdHMpXG4gIH1cblxuICBmdW5jdGlvbiBlbmRRdWVyeSAoKSB7XG4gICAgZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZW5kUXVlcnlFWFQoR0xfVElNRV9FTEFQU0VEX0VYVClcbiAgfVxuXG4gIC8vXG4gIC8vIFBlbmRpbmcgc3RhdHMgcG9vbC5cbiAgLy9cbiAgZnVuY3Rpb24gUGVuZGluZ1N0YXRzICgpIHtcbiAgICB0aGlzLnN0YXJ0UXVlcnlJbmRleCA9IC0xXG4gICAgdGhpcy5lbmRRdWVyeUluZGV4ID0gLTFcbiAgICB0aGlzLnN1bSA9IDBcbiAgICB0aGlzLnN0YXRzID0gbnVsbFxuICB9XG4gIHZhciBwZW5kaW5nU3RhdHNQb29sID0gW11cbiAgZnVuY3Rpb24gYWxsb2NQZW5kaW5nU3RhdHMgKCkge1xuICAgIHJldHVybiBwZW5kaW5nU3RhdHNQb29sLnBvcCgpIHx8IG5ldyBQZW5kaW5nU3RhdHMoKVxuICB9XG4gIGZ1bmN0aW9uIGZyZWVQZW5kaW5nU3RhdHMgKHBlbmRpbmdTdGF0cykge1xuICAgIHBlbmRpbmdTdGF0c1Bvb2wucHVzaChwZW5kaW5nU3RhdHMpXG4gIH1cbiAgLy8gUGVuZGluZyBzdGF0cyBwb29sIGVuZFxuXG4gIHZhciBwZW5kaW5nU3RhdHMgPSBbXVxuICBmdW5jdGlvbiBwdXNoU2NvcGVTdGF0cyAoc3RhcnQsIGVuZCwgc3RhdHMpIHtcbiAgICB2YXIgcHMgPSBhbGxvY1BlbmRpbmdTdGF0cygpXG4gICAgcHMuc3RhcnRRdWVyeUluZGV4ID0gc3RhcnRcbiAgICBwcy5lbmRRdWVyeUluZGV4ID0gZW5kXG4gICAgcHMuc3VtID0gMFxuICAgIHBzLnN0YXRzID0gc3RhdHNcbiAgICBwZW5kaW5nU3RhdHMucHVzaChwcylcbiAgfVxuXG4gIC8vIHdlIHNob3VsZCBjYWxsIHRoaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnJhbWUsXG4gIC8vIGluIG9yZGVyIHRvIHVwZGF0ZSBncHVUaW1lXG4gIHZhciB0aW1lU3VtID0gW11cbiAgdmFyIHF1ZXJ5UHRyID0gW11cbiAgZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgICB2YXIgcHRyLCBpXG5cbiAgICB2YXIgbiA9IHBlbmRpbmdRdWVyaWVzLmxlbmd0aFxuICAgIGlmIChuID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBSZXNlcnZlIHNwYWNlXG4gICAgcXVlcnlQdHIubGVuZ3RoID0gTWF0aC5tYXgocXVlcnlQdHIubGVuZ3RoLCBuICsgMSlcbiAgICB0aW1lU3VtLmxlbmd0aCA9IE1hdGgubWF4KHRpbWVTdW0ubGVuZ3RoLCBuICsgMSlcbiAgICB0aW1lU3VtWzBdID0gMFxuICAgIHF1ZXJ5UHRyWzBdID0gMFxuXG4gICAgLy8gVXBkYXRlIGFsbCBwZW5kaW5nIHRpbWVyIHF1ZXJpZXNcbiAgICB2YXIgcXVlcnlUaW1lID0gMFxuICAgIHB0ciA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ1F1ZXJpZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBxdWVyeSA9IHBlbmRpbmdRdWVyaWVzW2ldXG4gICAgICBpZiAoZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQocXVlcnksIEdMX1FVRVJZX1JFU1VMVF9BVkFJTEFCTEVfRVhUKSkge1xuICAgICAgICBxdWVyeVRpbWUgKz0gZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQocXVlcnksIEdMX1FVRVJZX1JFU1VMVF9FWFQpXG4gICAgICAgIGZyZWVRdWVyeShxdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlbmRpbmdRdWVyaWVzW3B0cisrXSA9IHF1ZXJ5XG4gICAgICB9XG4gICAgICB0aW1lU3VtW2kgKyAxXSA9IHF1ZXJ5VGltZVxuICAgICAgcXVlcnlQdHJbaSArIDFdID0gcHRyXG4gICAgfVxuICAgIHBlbmRpbmdRdWVyaWVzLmxlbmd0aCA9IHB0clxuXG4gICAgLy8gVXBkYXRlIGFsbCBwZW5kaW5nIHN0YXQgcXVlcmllc1xuICAgIHB0ciA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ1N0YXRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3RhdHMgPSBwZW5kaW5nU3RhdHNbaV1cbiAgICAgIHZhciBzdGFydCA9IHN0YXRzLnN0YXJ0UXVlcnlJbmRleFxuICAgICAgdmFyIGVuZCA9IHN0YXRzLmVuZFF1ZXJ5SW5kZXhcbiAgICAgIHN0YXRzLnN1bSArPSB0aW1lU3VtW2VuZF0gLSB0aW1lU3VtW3N0YXJ0XVxuICAgICAgdmFyIHN0YXJ0UHRyID0gcXVlcnlQdHJbc3RhcnRdXG4gICAgICB2YXIgZW5kUHRyID0gcXVlcnlQdHJbZW5kXVxuICAgICAgaWYgKGVuZFB0ciA9PT0gc3RhcnRQdHIpIHtcbiAgICAgICAgc3RhdHMuc3RhdHMuZ3B1VGltZSArPSBzdGF0cy5zdW0gLyAxZTZcbiAgICAgICAgZnJlZVBlbmRpbmdTdGF0cyhzdGF0cylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRzLnN0YXJ0UXVlcnlJbmRleCA9IHN0YXJ0UHRyXG4gICAgICAgIHN0YXRzLmVuZFF1ZXJ5SW5kZXggPSBlbmRQdHJcbiAgICAgICAgcGVuZGluZ1N0YXRzW3B0cisrXSA9IHN0YXRzXG4gICAgICB9XG4gICAgfVxuICAgIHBlbmRpbmdTdGF0cy5sZW5ndGggPSBwdHJcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmVnaW5RdWVyeTogYmVnaW5RdWVyeSxcbiAgICBlbmRRdWVyeTogZW5kUXVlcnksXG4gICAgcHVzaFNjb3BlU3RhdHM6IHB1c2hTY29wZVN0YXRzLFxuICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgIGdldE51bVBlbmRpbmdRdWVyaWVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcGVuZGluZ1F1ZXJpZXMubGVuZ3RoXG4gICAgfSxcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlQb29sLnB1c2guYXBwbHkocXVlcnlQb29sLCBwZW5kaW5nUXVlcmllcylcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlcnlQb29sLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV4dGVuc2lvbnMuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmRlbGV0ZVF1ZXJ5RVhUKHF1ZXJ5UG9vbFtpXSlcbiAgICAgIH1cbiAgICAgIHBlbmRpbmdRdWVyaWVzLmxlbmd0aCA9IDBcbiAgICAgIHF1ZXJ5UG9vbC5sZW5ndGggPSAwXG4gICAgfSxcbiAgICByZXN0b3JlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBwZW5kaW5nUXVlcmllcy5sZW5ndGggPSAwXG4gICAgICBxdWVyeVBvb2wubGVuZ3RoID0gMFxuICAgIH1cbiAgfVxufVxuXG52YXIgR0xfQ09MT1JfQlVGRkVSX0JJVCA9IDE2Mzg0XG52YXIgR0xfREVQVEhfQlVGRkVSX0JJVCA9IDI1NlxudmFyIEdMX1NURU5DSUxfQlVGRkVSX0JJVCA9IDEwMjRcblxudmFyIEdMX0FSUkFZX0JVRkZFUiA9IDM0OTYyXG5cbnZhciBDT05URVhUX0xPU1RfRVZFTlQgPSAnd2ViZ2xjb250ZXh0bG9zdCdcbnZhciBDT05URVhUX1JFU1RPUkVEX0VWRU5UID0gJ3dlYmdsY29udGV4dHJlc3RvcmVkJ1xuXG52YXIgRFlOX1BST1AgPSAxXG52YXIgRFlOX0NPTlRFWFQgPSAyXG52YXIgRFlOX1NUQVRFID0gM1xuXG5mdW5jdGlvbiBmaW5kIChoYXlzdGFjaywgbmVlZGxlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaGF5c3RhY2subGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoaGF5c3RhY2tbaV0gPT09IG5lZWRsZSkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbmZ1bmN0aW9uIHdyYXBSRUdMIChhcmdzKSB7XG4gIHZhciBjb25maWcgPSBwYXJzZUFyZ3MoYXJncylcbiAgaWYgKCFjb25maWcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFyIGdsID0gY29uZmlnLmdsXG4gIHZhciBnbEF0dHJpYnV0ZXMgPSBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpXG4gIHZhciBjb250ZXh0TG9zdCA9IGdsLmlzQ29udGV4dExvc3QoKVxuXG4gIHZhciBleHRlbnNpb25TdGF0ZSA9IGNyZWF0ZUV4dGVuc2lvbkNhY2hlKGdsLCBjb25maWcpXG4gIGlmICghZXh0ZW5zaW9uU3RhdGUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFyIHN0cmluZ1N0b3JlID0gY3JlYXRlU3RyaW5nU3RvcmUoKVxuICB2YXIgc3RhdHMkJDEgPSBzdGF0cygpXG4gIHZhciBleHRlbnNpb25zID0gZXh0ZW5zaW9uU3RhdGUuZXh0ZW5zaW9uc1xuICB2YXIgdGltZXIgPSBjcmVhdGVUaW1lcihnbCwgZXh0ZW5zaW9ucylcblxuICB2YXIgU1RBUlRfVElNRSA9IGNsb2NrKClcbiAgdmFyIFdJRFRIID0gZ2wuZHJhd2luZ0J1ZmZlcldpZHRoXG4gIHZhciBIRUlHSFQgPSBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0XG5cbiAgdmFyIGNvbnRleHRTdGF0ZSA9IHtcbiAgICB0aWNrOiAwLFxuICAgIHRpbWU6IDAsXG4gICAgdmlld3BvcnRXaWR0aDogV0lEVEgsXG4gICAgdmlld3BvcnRIZWlnaHQ6IEhFSUdIVCxcbiAgICBmcmFtZWJ1ZmZlcldpZHRoOiBXSURUSCxcbiAgICBmcmFtZWJ1ZmZlckhlaWdodDogSEVJR0hULFxuICAgIGRyYXdpbmdCdWZmZXJXaWR0aDogV0lEVEgsXG4gICAgZHJhd2luZ0J1ZmZlckhlaWdodDogSEVJR0hULFxuICAgIHBpeGVsUmF0aW86IGNvbmZpZy5waXhlbFJhdGlvXG4gIH1cbiAgdmFyIHVuaWZvcm1TdGF0ZSA9IHt9XG4gIHZhciBkcmF3U3RhdGUgPSB7XG4gICAgZWxlbWVudHM6IG51bGwsXG4gICAgcHJpbWl0aXZlOiA0LCAvLyBHTF9UUklBTkdMRVNcbiAgICBjb3VudDogLTEsXG4gICAgb2Zmc2V0OiAwLFxuICAgIGluc3RhbmNlczogLTFcbiAgfVxuXG4gIHZhciBsaW1pdHMgPSB3cmFwTGltaXRzKGdsLCBleHRlbnNpb25zKVxuICB2YXIgYnVmZmVyU3RhdGUgPSB3cmFwQnVmZmVyU3RhdGUoXG4gICAgZ2wsXG4gICAgc3RhdHMkJDEsXG4gICAgY29uZmlnLFxuICAgIGRlc3Ryb3lCdWZmZXIpXG4gIHZhciBhdHRyaWJ1dGVTdGF0ZSA9IHdyYXBBdHRyaWJ1dGVTdGF0ZShcbiAgICBnbCxcbiAgICBleHRlbnNpb25zLFxuICAgIGxpbWl0cyxcbiAgICBzdGF0cyQkMSxcbiAgICBidWZmZXJTdGF0ZSlcbiAgZnVuY3Rpb24gZGVzdHJveUJ1ZmZlciAoYnVmZmVyKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZVN0YXRlLmRlc3Ryb3lCdWZmZXIoYnVmZmVyKVxuICB9XG4gIHZhciBlbGVtZW50U3RhdGUgPSB3cmFwRWxlbWVudHNTdGF0ZShnbCwgZXh0ZW5zaW9ucywgYnVmZmVyU3RhdGUsIHN0YXRzJCQxKVxuICB2YXIgc2hhZGVyU3RhdGUgPSB3cmFwU2hhZGVyU3RhdGUoZ2wsIHN0cmluZ1N0b3JlLCBzdGF0cyQkMSwgY29uZmlnKVxuICB2YXIgdGV4dHVyZVN0YXRlID0gY3JlYXRlVGV4dHVyZVNldChcbiAgICBnbCxcbiAgICBleHRlbnNpb25zLFxuICAgIGxpbWl0cyxcbiAgICBmdW5jdGlvbiAoKSB7IGNvcmUucHJvY3MucG9sbCgpIH0sXG4gICAgY29udGV4dFN0YXRlLFxuICAgIHN0YXRzJCQxLFxuICAgIGNvbmZpZylcbiAgdmFyIHJlbmRlcmJ1ZmZlclN0YXRlID0gd3JhcFJlbmRlcmJ1ZmZlcnMoZ2wsIGV4dGVuc2lvbnMsIGxpbWl0cywgc3RhdHMkJDEsIGNvbmZpZylcbiAgdmFyIGZyYW1lYnVmZmVyU3RhdGUgPSB3cmFwRkJPU3RhdGUoXG4gICAgZ2wsXG4gICAgZXh0ZW5zaW9ucyxcbiAgICBsaW1pdHMsXG4gICAgdGV4dHVyZVN0YXRlLFxuICAgIHJlbmRlcmJ1ZmZlclN0YXRlLFxuICAgIHN0YXRzJCQxKVxuICB2YXIgY29yZSA9IHJlZ2xDb3JlKFxuICAgIGdsLFxuICAgIHN0cmluZ1N0b3JlLFxuICAgIGV4dGVuc2lvbnMsXG4gICAgbGltaXRzLFxuICAgIGJ1ZmZlclN0YXRlLFxuICAgIGVsZW1lbnRTdGF0ZSxcbiAgICB0ZXh0dXJlU3RhdGUsXG4gICAgZnJhbWVidWZmZXJTdGF0ZSxcbiAgICB1bmlmb3JtU3RhdGUsXG4gICAgYXR0cmlidXRlU3RhdGUsXG4gICAgc2hhZGVyU3RhdGUsXG4gICAgZHJhd1N0YXRlLFxuICAgIGNvbnRleHRTdGF0ZSxcbiAgICB0aW1lcixcbiAgICBjb25maWcpXG4gIHZhciByZWFkUGl4ZWxzID0gd3JhcFJlYWRQaXhlbHMoXG4gICAgZ2wsXG4gICAgZnJhbWVidWZmZXJTdGF0ZSxcbiAgICBjb3JlLnByb2NzLnBvbGwsXG4gICAgY29udGV4dFN0YXRlLFxuICAgIGdsQXR0cmlidXRlcywgZXh0ZW5zaW9ucywgbGltaXRzKVxuXG4gIHZhciBuZXh0U3RhdGUgPSBjb3JlLm5leHRcbiAgdmFyIGNhbnZhcyA9IGdsLmNhbnZhc1xuXG4gIHZhciByYWZDYWxsYmFja3MgPSBbXVxuICB2YXIgbG9zc0NhbGxiYWNrcyA9IFtdXG4gIHZhciByZXN0b3JlQ2FsbGJhY2tzID0gW11cbiAgdmFyIGRlc3Ryb3lDYWxsYmFja3MgPSBbY29uZmlnLm9uRGVzdHJveV1cblxuICB2YXIgYWN0aXZlUkFGID0gbnVsbFxuICBmdW5jdGlvbiBoYW5kbGVSQUYgKCkge1xuICAgIGlmIChyYWZDYWxsYmFja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgdGltZXIudXBkYXRlKClcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVJBRiA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHNjaGVkdWxlIG5leHQgYW5pbWF0aW9uIGZyYW1lXG4gICAgYWN0aXZlUkFGID0gcmFmLm5leHQoaGFuZGxlUkFGKVxuXG4gICAgLy8gcG9sbCBmb3IgY2hhbmdlc1xuICAgIHBvbGwoKVxuXG4gICAgLy8gZmlyZSBhIGNhbGxiYWNrIGZvciBhbGwgcGVuZGluZyByYWZzXG4gICAgZm9yICh2YXIgaSA9IHJhZkNhbGxiYWNrcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdmFyIGNiID0gcmFmQ2FsbGJhY2tzW2ldXG4gICAgICBpZiAoY2IpIHtcbiAgICAgICAgY2IoY29udGV4dFN0YXRlLCBudWxsLCAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZsdXNoIGFsbCBwZW5kaW5nIHdlYmdsIGNhbGxzXG4gICAgZ2wuZmx1c2goKVxuXG4gICAgLy8gcG9sbCBHUFUgdGltZXJzICphZnRlciogZ2wuZmx1c2ggc28gd2UgZG9uJ3QgZGVsYXkgY29tbWFuZCBkaXNwYXRjaFxuICAgIGlmICh0aW1lcikge1xuICAgICAgdGltZXIudXBkYXRlKClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFJBRiAoKSB7XG4gICAgaWYgKCFhY3RpdmVSQUYgJiYgcmFmQ2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFjdGl2ZVJBRiA9IHJhZi5uZXh0KGhhbmRsZVJBRilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdG9wUkFGICgpIHtcbiAgICBpZiAoYWN0aXZlUkFGKSB7XG4gICAgICByYWYuY2FuY2VsKGhhbmRsZVJBRilcbiAgICAgIGFjdGl2ZVJBRiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDb250ZXh0TG9zcyAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAvLyBzZXQgY29udGV4dCBsb3N0IGZsYWdcbiAgICBjb250ZXh0TG9zdCA9IHRydWVcblxuICAgIC8vIHBhdXNlIHJlcXVlc3QgYW5pbWF0aW9uIGZyYW1lXG4gICAgc3RvcFJBRigpXG5cbiAgICAvLyBsb3NlIGNvbnRleHRcbiAgICBsb3NzQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICBjYigpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNvbnRleHRSZXN0b3JlZCAoZXZlbnQpIHtcbiAgICAvLyBjbGVhciBlcnJvciBjb2RlXG4gICAgZ2wuZ2V0RXJyb3IoKVxuXG4gICAgLy8gY2xlYXIgY29udGV4dCBsb3N0IGZsYWdcbiAgICBjb250ZXh0TG9zdCA9IGZhbHNlXG5cbiAgICAvLyByZWZyZXNoIHN0YXRlXG4gICAgZXh0ZW5zaW9uU3RhdGUucmVzdG9yZSgpXG4gICAgc2hhZGVyU3RhdGUucmVzdG9yZSgpXG4gICAgYnVmZmVyU3RhdGUucmVzdG9yZSgpXG4gICAgdGV4dHVyZVN0YXRlLnJlc3RvcmUoKVxuICAgIHJlbmRlcmJ1ZmZlclN0YXRlLnJlc3RvcmUoKVxuICAgIGZyYW1lYnVmZmVyU3RhdGUucmVzdG9yZSgpXG4gICAgYXR0cmlidXRlU3RhdGUucmVzdG9yZSgpXG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICB0aW1lci5yZXN0b3JlKClcbiAgICB9XG5cbiAgICAvLyByZWZyZXNoIHN0YXRlXG4gICAgY29yZS5wcm9jcy5yZWZyZXNoKClcblxuICAgIC8vIHJlc3RhcnQgUkFGXG4gICAgc3RhcnRSQUYoKVxuXG4gICAgLy8gcmVzdG9yZSBjb250ZXh0XG4gICAgcmVzdG9yZUNhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgY2IoKVxuICAgIH0pXG4gIH1cblxuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoQ09OVEVYVF9MT1NUX0VWRU5ULCBoYW5kbGVDb250ZXh0TG9zcywgZmFsc2UpXG4gICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoQ09OVEVYVF9SRVNUT1JFRF9FVkVOVCwgaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3kgKCkge1xuICAgIHJhZkNhbGxiYWNrcy5sZW5ndGggPSAwXG4gICAgc3RvcFJBRigpXG5cbiAgICBpZiAoY2FudmFzKSB7XG4gICAgICBjYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihDT05URVhUX0xPU1RfRVZFTlQsIGhhbmRsZUNvbnRleHRMb3NzKVxuICAgICAgY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoQ09OVEVYVF9SRVNUT1JFRF9FVkVOVCwgaGFuZGxlQ29udGV4dFJlc3RvcmVkKVxuICAgIH1cblxuICAgIHNoYWRlclN0YXRlLmNsZWFyKClcbiAgICBmcmFtZWJ1ZmZlclN0YXRlLmNsZWFyKClcbiAgICByZW5kZXJidWZmZXJTdGF0ZS5jbGVhcigpXG4gICAgdGV4dHVyZVN0YXRlLmNsZWFyKClcbiAgICBlbGVtZW50U3RhdGUuY2xlYXIoKVxuICAgIGJ1ZmZlclN0YXRlLmNsZWFyKClcbiAgICBhdHRyaWJ1dGVTdGF0ZS5jbGVhcigpXG5cbiAgICBpZiAodGltZXIpIHtcbiAgICAgIHRpbWVyLmNsZWFyKClcbiAgICB9XG5cbiAgICBkZXN0cm95Q2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICBjYigpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBpbGVQcm9jZWR1cmUgKG9wdGlvbnMpIHtcbiAgICBjaGVjayQxKCEhb3B0aW9ucywgJ2ludmFsaWQgYXJncyB0byByZWdsKHsuLi59KScpXG4gICAgY2hlY2skMS50eXBlKG9wdGlvbnMsICdvYmplY3QnLCAnaW52YWxpZCBhcmdzIHRvIHJlZ2woey4uLn0pJylcblxuICAgIGZ1bmN0aW9uIGZsYXR0ZW5OZXN0ZWRPcHRpb25zIChvcHRpb25zKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZXh0ZW5kKHt9LCBvcHRpb25zKVxuICAgICAgZGVsZXRlIHJlc3VsdC51bmlmb3Jtc1xuICAgICAgZGVsZXRlIHJlc3VsdC5hdHRyaWJ1dGVzXG4gICAgICBkZWxldGUgcmVzdWx0LmNvbnRleHRcbiAgICAgIGRlbGV0ZSByZXN1bHQudmFvXG5cbiAgICAgIGlmICgnc3RlbmNpbCcgaW4gcmVzdWx0ICYmIHJlc3VsdC5zdGVuY2lsLm9wKSB7XG4gICAgICAgIHJlc3VsdC5zdGVuY2lsLm9wQmFjayA9IHJlc3VsdC5zdGVuY2lsLm9wRnJvbnQgPSByZXN1bHQuc3RlbmNpbC5vcFxuICAgICAgICBkZWxldGUgcmVzdWx0LnN0ZW5jaWwub3BcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbWVyZ2UgKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gcmVzdWx0W25hbWVdXG4gICAgICAgICAgZGVsZXRlIHJlc3VsdFtuYW1lXVxuICAgICAgICAgIE9iamVjdC5rZXlzKGNoaWxkKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgICByZXN1bHRbbmFtZSArICcuJyArIHByb3BdID0gY2hpbGRbcHJvcF1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtZXJnZSgnYmxlbmQnKVxuICAgICAgbWVyZ2UoJ2RlcHRoJylcbiAgICAgIG1lcmdlKCdjdWxsJylcbiAgICAgIG1lcmdlKCdzdGVuY2lsJylcbiAgICAgIG1lcmdlKCdwb2x5Z29uT2Zmc2V0JylcbiAgICAgIG1lcmdlKCdzY2lzc29yJylcbiAgICAgIG1lcmdlKCdzYW1wbGUnKVxuXG4gICAgICBpZiAoJ3ZhbycgaW4gb3B0aW9ucykge1xuICAgICAgICByZXN1bHQudmFvID0gb3B0aW9ucy52YW9cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNlcGFyYXRlRHluYW1pYyAob2JqZWN0LCB1c2VBcnJheXMpIHtcbiAgICAgIHZhciBzdGF0aWNJdGVtcyA9IHt9XG4gICAgICB2YXIgZHluYW1pY0l0ZW1zID0ge31cbiAgICAgIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtvcHRpb25dXG4gICAgICAgIGlmIChkeW5hbWljLmlzRHluYW1pYyh2YWx1ZSkpIHtcbiAgICAgICAgICBkeW5hbWljSXRlbXNbb3B0aW9uXSA9IGR5bmFtaWMudW5ib3godmFsdWUsIG9wdGlvbilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmICh1c2VBcnJheXMgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoZHluYW1pYy5pc0R5bmFtaWModmFsdWVbaV0pKSB7XG4gICAgICAgICAgICAgIGR5bmFtaWNJdGVtc1tvcHRpb25dID0gZHluYW1pYy51bmJveCh2YWx1ZSwgb3B0aW9uKVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljSXRlbXNbb3B0aW9uXSA9IHZhbHVlXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZHluYW1pYzogZHluYW1pY0l0ZW1zLFxuICAgICAgICBzdGF0aWM6IHN0YXRpY0l0ZW1zXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJlYXQgY29udGV4dCB2YXJpYWJsZXMgc2VwYXJhdGUgZnJvbSBvdGhlciBkeW5hbWljIHZhcmlhYmxlc1xuICAgIHZhciBjb250ZXh0ID0gc2VwYXJhdGVEeW5hbWljKG9wdGlvbnMuY29udGV4dCB8fCB7fSwgdHJ1ZSlcbiAgICB2YXIgdW5pZm9ybXMgPSBzZXBhcmF0ZUR5bmFtaWMob3B0aW9ucy51bmlmb3JtcyB8fCB7fSwgdHJ1ZSlcbiAgICB2YXIgYXR0cmlidXRlcyA9IHNlcGFyYXRlRHluYW1pYyhvcHRpb25zLmF0dHJpYnV0ZXMgfHwge30sIGZhbHNlKVxuICAgIHZhciBvcHRzID0gc2VwYXJhdGVEeW5hbWljKGZsYXR0ZW5OZXN0ZWRPcHRpb25zKG9wdGlvbnMpLCBmYWxzZSlcblxuICAgIHZhciBzdGF0cyQkMSA9IHtcbiAgICAgIGdwdVRpbWU6IDAuMCxcbiAgICAgIGNwdVRpbWU6IDAuMCxcbiAgICAgIGNvdW50OiAwXG4gICAgfVxuXG4gICAgdmFyIGNvbXBpbGVkID0gY29yZS5jb21waWxlKG9wdHMsIGF0dHJpYnV0ZXMsIHVuaWZvcm1zLCBjb250ZXh0LCBzdGF0cyQkMSlcblxuICAgIHZhciBkcmF3ID0gY29tcGlsZWQuZHJhd1xuICAgIHZhciBiYXRjaCA9IGNvbXBpbGVkLmJhdGNoXG4gICAgdmFyIHNjb3BlID0gY29tcGlsZWQuc2NvcGVcblxuICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgbW9kaWZ5IGNvZGUgZ2VuZXJhdGlvbiBmb3IgYmF0Y2ggY29tbWFuZHMgc28gdGhpc1xuICAgIC8vIGlzbid0IG5lY2Vzc2FyeVxuICAgIHZhciBFTVBUWV9BUlJBWSA9IFtdXG4gICAgZnVuY3Rpb24gcmVzZXJ2ZSAoY291bnQpIHtcbiAgICAgIHdoaWxlIChFTVBUWV9BUlJBWS5sZW5ndGggPCBjb3VudCkge1xuICAgICAgICBFTVBUWV9BUlJBWS5wdXNoKG51bGwpXG4gICAgICB9XG4gICAgICByZXR1cm4gRU1QVFlfQVJSQVlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBSRUdMQ29tbWFuZCAoYXJncywgYm9keSkge1xuICAgICAgdmFyIGlcbiAgICAgIGlmIChjb250ZXh0TG9zdCkge1xuICAgICAgICBjaGVjayQxLnJhaXNlKCdjb250ZXh0IGxvc3QnKVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBhcmdzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBzY29wZS5jYWxsKHRoaXMsIG51bGwsIGFyZ3MsIDApXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnczsgKytpKSB7XG4gICAgICAgICAgICBzY29wZS5jYWxsKHRoaXMsIG51bGwsIGJvZHksIGkpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJncykpIHtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgc2NvcGUuY2FsbCh0aGlzLCBhcmdzW2ldLCBib2R5LCBpKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gc2NvcGUuY2FsbCh0aGlzLCBhcmdzLCBib2R5LCAwKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmdzID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoYXJncyA+IDApIHtcbiAgICAgICAgICByZXR1cm4gYmF0Y2guY2FsbCh0aGlzLCByZXNlcnZlKGFyZ3MgfCAwKSwgYXJncyB8IDApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmdzKSkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gYmF0Y2guY2FsbCh0aGlzLCBhcmdzLCBhcmdzLmxlbmd0aClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRyYXcuY2FsbCh0aGlzLCBhcmdzKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHRlbmQoUkVHTENvbW1hbmQsIHtcbiAgICAgIHN0YXRzOiBzdGF0cyQkMSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29tcGlsZWQuZGVzdHJveSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHZhciBzZXRGQk8gPSBmcmFtZWJ1ZmZlclN0YXRlLnNldEZCTyA9IGNvbXBpbGVQcm9jZWR1cmUoe1xuICAgIGZyYW1lYnVmZmVyOiBkeW5hbWljLmRlZmluZS5jYWxsKG51bGwsIERZTl9QUk9QLCAnZnJhbWVidWZmZXInKVxuICB9KVxuXG4gIGZ1bmN0aW9uIGNsZWFySW1wbCAoXywgb3B0aW9ucykge1xuICAgIHZhciBjbGVhckZsYWdzID0gMFxuICAgIGNvcmUucHJvY3MucG9sbCgpXG5cbiAgICB2YXIgYyA9IG9wdGlvbnMuY29sb3JcbiAgICBpZiAoYykge1xuICAgICAgZ2wuY2xlYXJDb2xvcigrY1swXSB8fCAwLCArY1sxXSB8fCAwLCArY1syXSB8fCAwLCArY1szXSB8fCAwKVxuICAgICAgY2xlYXJGbGFncyB8PSBHTF9DT0xPUl9CVUZGRVJfQklUXG4gICAgfVxuICAgIGlmICgnZGVwdGgnIGluIG9wdGlvbnMpIHtcbiAgICAgIGdsLmNsZWFyRGVwdGgoK29wdGlvbnMuZGVwdGgpXG4gICAgICBjbGVhckZsYWdzIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVRcbiAgICB9XG4gICAgaWYgKCdzdGVuY2lsJyBpbiBvcHRpb25zKSB7XG4gICAgICBnbC5jbGVhclN0ZW5jaWwob3B0aW9ucy5zdGVuY2lsIHwgMClcbiAgICAgIGNsZWFyRmxhZ3MgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUXG4gICAgfVxuXG4gICAgY2hlY2skMSghIWNsZWFyRmxhZ3MsICdjYWxsZWQgcmVnbC5jbGVhciB3aXRoIG5vIGJ1ZmZlciBzcGVjaWZpZWQnKVxuICAgIGdsLmNsZWFyKGNsZWFyRmxhZ3MpXG4gIH1cblxuICBmdW5jdGlvbiBjbGVhciAob3B0aW9ucykge1xuICAgIGNoZWNrJDEoXG4gICAgICB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyxcbiAgICAgICdyZWdsLmNsZWFyKCkgdGFrZXMgYW4gb2JqZWN0IGFzIGlucHV0JylcbiAgICBpZiAoJ2ZyYW1lYnVmZmVyJyBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5mcmFtZWJ1ZmZlciAmJlxuICAgICAgICAgIG9wdGlvbnMuZnJhbWVidWZmZXJfcmVnbFR5cGUgPT09ICdmcmFtZWJ1ZmZlckN1YmUnKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgKytpKSB7XG4gICAgICAgICAgc2V0RkJPKGV4dGVuZCh7XG4gICAgICAgICAgICBmcmFtZWJ1ZmZlcjogb3B0aW9ucy5mcmFtZWJ1ZmZlci5mYWNlc1tpXVxuICAgICAgICAgIH0sIG9wdGlvbnMpLCBjbGVhckltcGwpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEZCTyhvcHRpb25zLCBjbGVhckltcGwpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFySW1wbChudWxsLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZyYW1lIChjYikge1xuICAgIGNoZWNrJDEudHlwZShjYiwgJ2Z1bmN0aW9uJywgJ3JlZ2wuZnJhbWUoKSBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKVxuICAgIHJhZkNhbGxiYWNrcy5wdXNoKGNiKVxuXG4gICAgZnVuY3Rpb24gY2FuY2VsICgpIHtcbiAgICAgIC8vIEZJWE1FOiAgc2hvdWxkIHdlIGNoZWNrIHNvbWV0aGluZyBvdGhlciB0aGFuIGVxdWFscyBjYiBoZXJlP1xuICAgICAgLy8gd2hhdCBpZiBhIHVzZXIgY2FsbHMgZnJhbWUgdHdpY2Ugd2l0aCB0aGUgc2FtZSBjYWxsYmFjay4uLlxuICAgICAgLy9cbiAgICAgIHZhciBpID0gZmluZChyYWZDYWxsYmFja3MsIGNiKVxuICAgICAgY2hlY2skMShpID49IDAsICdjYW5ub3QgY2FuY2VsIGEgZnJhbWUgdHdpY2UnKVxuICAgICAgZnVuY3Rpb24gcGVuZGluZ0NhbmNlbCAoKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGZpbmQocmFmQ2FsbGJhY2tzLCBwZW5kaW5nQ2FuY2VsKVxuICAgICAgICByYWZDYWxsYmFja3NbaW5kZXhdID0gcmFmQ2FsbGJhY2tzW3JhZkNhbGxiYWNrcy5sZW5ndGggLSAxXVxuICAgICAgICByYWZDYWxsYmFja3MubGVuZ3RoIC09IDFcbiAgICAgICAgaWYgKHJhZkNhbGxiYWNrcy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgIHN0b3BSQUYoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByYWZDYWxsYmFja3NbaV0gPSBwZW5kaW5nQ2FuY2VsXG4gICAgfVxuXG4gICAgc3RhcnRSQUYoKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbmNlbDogY2FuY2VsXG4gICAgfVxuICB9XG5cbiAgLy8gcG9sbCB2aWV3cG9ydFxuICBmdW5jdGlvbiBwb2xsVmlld3BvcnQgKCkge1xuICAgIHZhciB2aWV3cG9ydCA9IG5leHRTdGF0ZS52aWV3cG9ydFxuICAgIHZhciBzY2lzc29yQm94ID0gbmV4dFN0YXRlLnNjaXNzb3JfYm94XG4gICAgdmlld3BvcnRbMF0gPSB2aWV3cG9ydFsxXSA9IHNjaXNzb3JCb3hbMF0gPSBzY2lzc29yQm94WzFdID0gMFxuICAgIGNvbnRleHRTdGF0ZS52aWV3cG9ydFdpZHRoID1cbiAgICAgIGNvbnRleHRTdGF0ZS5mcmFtZWJ1ZmZlcldpZHRoID1cbiAgICAgIGNvbnRleHRTdGF0ZS5kcmF3aW5nQnVmZmVyV2lkdGggPVxuICAgICAgdmlld3BvcnRbMl0gPVxuICAgICAgc2Npc3NvckJveFsyXSA9IGdsLmRyYXdpbmdCdWZmZXJXaWR0aFxuICAgIGNvbnRleHRTdGF0ZS52aWV3cG9ydEhlaWdodCA9XG4gICAgICBjb250ZXh0U3RhdGUuZnJhbWVidWZmZXJIZWlnaHQgPVxuICAgICAgY29udGV4dFN0YXRlLmRyYXdpbmdCdWZmZXJIZWlnaHQgPVxuICAgICAgdmlld3BvcnRbM10gPVxuICAgICAgc2Npc3NvckJveFszXSA9IGdsLmRyYXdpbmdCdWZmZXJIZWlnaHRcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvbGwgKCkge1xuICAgIGNvbnRleHRTdGF0ZS50aWNrICs9IDFcbiAgICBjb250ZXh0U3RhdGUudGltZSA9IG5vdygpXG4gICAgcG9sbFZpZXdwb3J0KClcbiAgICBjb3JlLnByb2NzLnBvbGwoKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVmcmVzaCAoKSB7XG4gICAgdGV4dHVyZVN0YXRlLnJlZnJlc2goKVxuICAgIHBvbGxWaWV3cG9ydCgpXG4gICAgY29yZS5wcm9jcy5yZWZyZXNoKClcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIHRpbWVyLnVwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm93ICgpIHtcbiAgICByZXR1cm4gKGNsb2NrKCkgLSBTVEFSVF9USU1FKSAvIDEwMDAuMFxuICB9XG5cbiAgcmVmcmVzaCgpXG5cbiAgZnVuY3Rpb24gYWRkTGlzdGVuZXIgKGV2ZW50LCBjYWxsYmFjaykge1xuICAgIGNoZWNrJDEudHlwZShjYWxsYmFjaywgJ2Z1bmN0aW9uJywgJ2xpc3RlbmVyIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbicpXG5cbiAgICB2YXIgY2FsbGJhY2tzXG4gICAgc3dpdGNoIChldmVudCkge1xuICAgICAgY2FzZSAnZnJhbWUnOlxuICAgICAgICByZXR1cm4gZnJhbWUoY2FsbGJhY2spXG4gICAgICBjYXNlICdsb3N0JzpcbiAgICAgICAgY2FsbGJhY2tzID0gbG9zc0NhbGxiYWNrc1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmVzdG9yZSc6XG4gICAgICAgIGNhbGxiYWNrcyA9IHJlc3RvcmVDYWxsYmFja3NcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2Rlc3Ryb3knOlxuICAgICAgICBjYWxsYmFja3MgPSBkZXN0cm95Q2FsbGJhY2tzXG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjaGVjayQxLnJhaXNlKCdpbnZhbGlkIGV2ZW50LCBtdXN0IGJlIG9uZSBvZiBmcmFtZSxsb3N0LHJlc3RvcmUsZGVzdHJveScpXG4gICAgfVxuXG4gICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spXG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGlmIChjYWxsYmFja3NbaV0gPT09IGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFja3NbaV0gPSBjYWxsYmFja3NbY2FsbGJhY2tzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICBjYWxsYmFja3MucG9wKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciByZWdsID0gZXh0ZW5kKGNvbXBpbGVQcm9jZWR1cmUsIHtcbiAgICAvLyBDbGVhciBjdXJyZW50IEZCT1xuICAgIGNsZWFyOiBjbGVhcixcblxuICAgIC8vIFNob3J0IGN1dHMgZm9yIGR5bmFtaWMgdmFyaWFibGVzXG4gICAgcHJvcDogZHluYW1pYy5kZWZpbmUuYmluZChudWxsLCBEWU5fUFJPUCksXG4gICAgY29udGV4dDogZHluYW1pYy5kZWZpbmUuYmluZChudWxsLCBEWU5fQ09OVEVYVCksXG4gICAgdGhpczogZHluYW1pYy5kZWZpbmUuYmluZChudWxsLCBEWU5fU1RBVEUpLFxuXG4gICAgLy8gZXhlY3V0ZXMgYW4gZW1wdHkgZHJhdyBjb21tYW5kXG4gICAgZHJhdzogY29tcGlsZVByb2NlZHVyZSh7fSksXG5cbiAgICAvLyBSZXNvdXJjZXNcbiAgICBidWZmZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYnVmZmVyU3RhdGUuY3JlYXRlKG9wdGlvbnMsIEdMX0FSUkFZX0JVRkZFUiwgZmFsc2UsIGZhbHNlKVxuICAgIH0sXG4gICAgZWxlbWVudHM6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gZWxlbWVudFN0YXRlLmNyZWF0ZShvcHRpb25zLCBmYWxzZSlcbiAgICB9LFxuICAgIHRleHR1cmU6IHRleHR1cmVTdGF0ZS5jcmVhdGUyRCxcbiAgICBjdWJlOiB0ZXh0dXJlU3RhdGUuY3JlYXRlQ3ViZSxcbiAgICByZW5kZXJidWZmZXI6IHJlbmRlcmJ1ZmZlclN0YXRlLmNyZWF0ZSxcbiAgICBmcmFtZWJ1ZmZlcjogZnJhbWVidWZmZXJTdGF0ZS5jcmVhdGUsXG4gICAgZnJhbWVidWZmZXJDdWJlOiBmcmFtZWJ1ZmZlclN0YXRlLmNyZWF0ZUN1YmUsXG4gICAgdmFvOiBhdHRyaWJ1dGVTdGF0ZS5jcmVhdGVWQU8sXG5cbiAgICAvLyBFeHBvc2UgY29udGV4dCBhdHRyaWJ1dGVzXG4gICAgYXR0cmlidXRlczogZ2xBdHRyaWJ1dGVzLFxuXG4gICAgLy8gRnJhbWUgcmVuZGVyaW5nXG4gICAgZnJhbWU6IGZyYW1lLFxuICAgIG9uOiBhZGRMaXN0ZW5lcixcblxuICAgIC8vIFN5c3RlbSBsaW1pdHNcbiAgICBsaW1pdHM6IGxpbWl0cyxcbiAgICBoYXNFeHRlbnNpb246IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gbGltaXRzLmV4dGVuc2lvbnMuaW5kZXhPZihuYW1lLnRvTG93ZXJDYXNlKCkpID49IDBcbiAgICB9LFxuXG4gICAgLy8gUmVhZCBwaXhlbHNcbiAgICByZWFkOiByZWFkUGl4ZWxzLFxuXG4gICAgLy8gRGVzdHJveSByZWdsIGFuZCBhbGwgYXNzb2NpYXRlZCByZXNvdXJjZXNcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuXG4gICAgLy8gRGlyZWN0IEdMIHN0YXRlIG1hbmlwdWxhdGlvblxuICAgIF9nbDogZ2wsXG4gICAgX3JlZnJlc2g6IHJlZnJlc2gsXG5cbiAgICBwb2xsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBwb2xsKClcbiAgICAgIGlmICh0aW1lcikge1xuICAgICAgICB0aW1lci51cGRhdGUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBDdXJyZW50IHRpbWVcbiAgICBub3c6IG5vdyxcblxuICAgIC8vIHJlZ2wgU3RhdGlzdGljcyBJbmZvcm1hdGlvblxuICAgIHN0YXRzOiBzdGF0cyQkMVxuICB9KVxuXG4gIGNvbmZpZy5vbkRvbmUobnVsbCwgcmVnbClcblxuICByZXR1cm4gcmVnbFxufVxuXG5yZXR1cm4gd3JhcFJFR0w7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdsLmpzLm1hcFxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIHdpZHRoID0gMjU2Oy8vIGVhY2ggUkM0IG91dHB1dCBpcyAwIDw9IHggPCAyNTZcclxudmFyIGNodW5rcyA9IDY7Ly8gYXQgbGVhc3Qgc2l4IFJDNCBvdXRwdXRzIGZvciBlYWNoIGRvdWJsZVxyXG52YXIgZGlnaXRzID0gNTI7Ly8gdGhlcmUgYXJlIDUyIHNpZ25pZmljYW50IGRpZ2l0cyBpbiBhIGRvdWJsZVxyXG52YXIgcG9vbCA9IFtdOy8vIHBvb2w6IGVudHJvcHkgcG9vbCBzdGFydHMgZW1wdHlcclxudmFyIEdMT0JBTCA9IHR5cGVvZiBnbG9iYWwgPT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsO1xyXG5cclxuLy9cclxuLy8gVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlbGF0ZWQgdG8gSUVFRSA3NTQgbGltaXRzLlxyXG4vL1xyXG52YXIgc3RhcnRkZW5vbSA9IE1hdGgucG93KHdpZHRoLCBjaHVua3MpLFxyXG4gICAgc2lnbmlmaWNhbmNlID0gTWF0aC5wb3coMiwgZGlnaXRzKSxcclxuICAgIG92ZXJmbG93ID0gc2lnbmlmaWNhbmNlICogMixcclxuICAgIG1hc2sgPSB3aWR0aCAtIDE7XHJcblxyXG5cclxudmFyIG9sZFJhbmRvbSA9IE1hdGgucmFuZG9tO1xyXG5cclxuLy9cclxuLy8gc2VlZHJhbmRvbSgpXHJcbi8vIFRoaXMgaXMgdGhlIHNlZWRyYW5kb20gZnVuY3Rpb24gZGVzY3JpYmVkIGFib3ZlLlxyXG4vL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHNlZWQsIG9wdGlvbnMpIHtcclxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdsb2JhbCA9PT0gdHJ1ZSkge1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSBmYWxzZTtcclxuICAgIE1hdGgucmFuZG9tID0gbW9kdWxlLmV4cG9ydHMoc2VlZCwgb3B0aW9ucyk7XHJcbiAgICBvcHRpb25zLmdsb2JhbCA9IHRydWU7XHJcbiAgICByZXR1cm4gTWF0aC5yYW5kb207XHJcbiAgfVxyXG4gIHZhciB1c2VfZW50cm9weSA9IChvcHRpb25zICYmIG9wdGlvbnMuZW50cm9weSkgfHwgZmFsc2U7XHJcbiAgdmFyIGtleSA9IFtdO1xyXG5cclxuICAvLyBGbGF0dGVuIHRoZSBzZWVkIHN0cmluZyBvciBidWlsZCBvbmUgZnJvbSBsb2NhbCBlbnRyb3B5IGlmIG5lZWRlZC5cclxuICB2YXIgc2hvcnRzZWVkID0gbWl4a2V5KGZsYXR0ZW4oXHJcbiAgICB1c2VfZW50cm9weSA/IFtzZWVkLCB0b3N0cmluZyhwb29sKV0gOlxyXG4gICAgMCBpbiBhcmd1bWVudHMgPyBzZWVkIDogYXV0b3NlZWQoKSwgMyksIGtleSk7XHJcblxyXG4gIC8vIFVzZSB0aGUgc2VlZCB0byBpbml0aWFsaXplIGFuIEFSQzQgZ2VuZXJhdG9yLlxyXG4gIHZhciBhcmM0ID0gbmV3IEFSQzQoa2V5KTtcclxuXHJcbiAgLy8gTWl4IHRoZSByYW5kb21uZXNzIGludG8gYWNjdW11bGF0ZWQgZW50cm9weS5cclxuICBtaXhrZXkodG9zdHJpbmcoYXJjNC5TKSwgcG9vbCk7XHJcblxyXG4gIC8vIE92ZXJyaWRlIE1hdGgucmFuZG9tXHJcblxyXG4gIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHJhbmRvbSBkb3VibGUgaW4gWzAsIDEpIHRoYXQgY29udGFpbnNcclxuICAvLyByYW5kb21uZXNzIGluIGV2ZXJ5IGJpdCBvZiB0aGUgbWFudGlzc2Egb2YgdGhlIElFRUUgNzU0IHZhbHVlLlxyXG5cclxuICByZXR1cm4gZnVuY3Rpb24oKSB7ICAgICAgICAgLy8gQ2xvc3VyZSB0byByZXR1cm4gYSByYW5kb20gZG91YmxlOlxyXG4gICAgdmFyIG4gPSBhcmM0LmcoY2h1bmtzKSwgICAgICAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG51bWVyYXRvciBuIDwgMiBeIDQ4XHJcbiAgICAgICAgZCA9IHN0YXJ0ZGVub20sICAgICAgICAgICAgICAgICAvLyAgIGFuZCBkZW5vbWluYXRvciBkID0gMiBeIDQ4LlxyXG4gICAgICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBhbmQgbm8gJ2V4dHJhIGxhc3QgYnl0ZScuXHJcbiAgICB3aGlsZSAobiA8IHNpZ25pZmljYW5jZSkgeyAgICAgICAgICAvLyBGaWxsIHVwIGFsbCBzaWduaWZpY2FudCBkaWdpdHMgYnlcclxuICAgICAgbiA9IChuICsgeCkgKiB3aWR0aDsgICAgICAgICAgICAgIC8vICAgc2hpZnRpbmcgbnVtZXJhdG9yIGFuZFxyXG4gICAgICBkICo9IHdpZHRoOyAgICAgICAgICAgICAgICAgICAgICAgLy8gICBkZW5vbWluYXRvciBhbmQgZ2VuZXJhdGluZyBhXHJcbiAgICAgIHggPSBhcmM0LmcoMSk7ICAgICAgICAgICAgICAgICAgICAvLyAgIG5ldyBsZWFzdC1zaWduaWZpY2FudC1ieXRlLlxyXG4gICAgfVxyXG4gICAgd2hpbGUgKG4gPj0gb3ZlcmZsb3cpIHsgICAgICAgICAgICAgLy8gVG8gYXZvaWQgcm91bmRpbmcgdXAsIGJlZm9yZSBhZGRpbmdcclxuICAgICAgbiAvPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgbGFzdCBieXRlLCBzaGlmdCBldmVyeXRoaW5nXHJcbiAgICAgIGQgLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHJpZ2h0IHVzaW5nIGludGVnZXIgTWF0aCB1bnRpbFxyXG4gICAgICB4ID4+Pj0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3ZSBoYXZlIGV4YWN0bHkgdGhlIGRlc2lyZWQgYml0cy5cclxuICAgIH1cclxuICAgIHJldHVybiAobiArIHgpIC8gZDsgICAgICAgICAgICAgICAgIC8vIEZvcm0gdGhlIG51bWJlciB3aXRoaW4gWzAsIDEpLlxyXG4gIH07XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5yZXNldEdsb2JhbCA9IGZ1bmN0aW9uICgpIHtcclxuICBNYXRoLnJhbmRvbSA9IG9sZFJhbmRvbTtcclxufTtcclxuXHJcbi8vXHJcbi8vIEFSQzRcclxuLy9cclxuLy8gQW4gQVJDNCBpbXBsZW1lbnRhdGlvbi4gIFRoZSBjb25zdHJ1Y3RvciB0YWtlcyBhIGtleSBpbiB0aGUgZm9ybSBvZlxyXG4vLyBhbiBhcnJheSBvZiBhdCBtb3N0ICh3aWR0aCkgaW50ZWdlcnMgdGhhdCBzaG91bGQgYmUgMCA8PSB4IDwgKHdpZHRoKS5cclxuLy9cclxuLy8gVGhlIGcoY291bnQpIG1ldGhvZCByZXR1cm5zIGEgcHNldWRvcmFuZG9tIGludGVnZXIgdGhhdCBjb25jYXRlbmF0ZXNcclxuLy8gdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGZyb20gQVJDNC4gIEl0cyByZXR1cm4gdmFsdWUgaXMgYSBudW1iZXIgeFxyXG4vLyB0aGF0IGlzIGluIHRoZSByYW5nZSAwIDw9IHggPCAod2lkdGggXiBjb3VudCkuXHJcbi8vXHJcbi8qKiBAY29uc3RydWN0b3IgKi9cclxuZnVuY3Rpb24gQVJDNChrZXkpIHtcclxuICB2YXIgdCwga2V5bGVuID0ga2V5Lmxlbmd0aCxcclxuICAgICAgbWUgPSB0aGlzLCBpID0gMCwgaiA9IG1lLmkgPSBtZS5qID0gMCwgcyA9IG1lLlMgPSBbXTtcclxuXHJcbiAgLy8gVGhlIGVtcHR5IGtleSBbXSBpcyB0cmVhdGVkIGFzIFswXS5cclxuICBpZiAoIWtleWxlbikgeyBrZXkgPSBba2V5bGVuKytdOyB9XHJcblxyXG4gIC8vIFNldCB1cCBTIHVzaW5nIHRoZSBzdGFuZGFyZCBrZXkgc2NoZWR1bGluZyBhbGdvcml0aG0uXHJcbiAgd2hpbGUgKGkgPCB3aWR0aCkge1xyXG4gICAgc1tpXSA9IGkrKztcclxuICB9XHJcbiAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcclxuICAgIHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyBrZXlbaSAlIGtleWxlbl0gKyAodCA9IHNbaV0pKV07XHJcbiAgICBzW2pdID0gdDtcclxuICB9XHJcblxyXG4gIC8vIFRoZSBcImdcIiBtZXRob2QgcmV0dXJucyB0aGUgbmV4dCAoY291bnQpIG91dHB1dHMgYXMgb25lIG51bWJlci5cclxuICAobWUuZyA9IGZ1bmN0aW9uKGNvdW50KSB7XHJcbiAgICAvLyBVc2luZyBpbnN0YW5jZSBtZW1iZXJzIGluc3RlYWQgb2YgY2xvc3VyZSBzdGF0ZSBuZWFybHkgZG91YmxlcyBzcGVlZC5cclxuICAgIHZhciB0LCByID0gMCxcclxuICAgICAgICBpID0gbWUuaSwgaiA9IG1lLmosIHMgPSBtZS5TO1xyXG4gICAgd2hpbGUgKGNvdW50LS0pIHtcclxuICAgICAgdCA9IHNbaSA9IG1hc2sgJiAoaSArIDEpXTtcclxuICAgICAgciA9IHIgKiB3aWR0aCArIHNbbWFzayAmICgoc1tpXSA9IHNbaiA9IG1hc2sgJiAoaiArIHQpXSkgKyAoc1tqXSA9IHQpKV07XHJcbiAgICB9XHJcbiAgICBtZS5pID0gaTsgbWUuaiA9IGo7XHJcbiAgICByZXR1cm4gcjtcclxuICAgIC8vIEZvciByb2J1c3QgdW5wcmVkaWN0YWJpbGl0eSBkaXNjYXJkIGFuIGluaXRpYWwgYmF0Y2ggb2YgdmFsdWVzLlxyXG4gICAgLy8gU2VlIGh0dHA6Ly93d3cucnNhLmNvbS9yc2FsYWJzL25vZGUuYXNwP2lkPTIwMDlcclxuICB9KSh3aWR0aCk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIGZsYXR0ZW4oKVxyXG4vLyBDb252ZXJ0cyBhbiBvYmplY3QgdHJlZSB0byBuZXN0ZWQgYXJyYXlzIG9mIHN0cmluZ3MuXHJcbi8vXHJcbmZ1bmN0aW9uIGZsYXR0ZW4ob2JqLCBkZXB0aCkge1xyXG4gIHZhciByZXN1bHQgPSBbXSwgdHlwID0gKHR5cGVvZiBvYmopWzBdLCBwcm9wO1xyXG4gIGlmIChkZXB0aCAmJiB0eXAgPT0gJ28nKSB7XHJcbiAgICBmb3IgKHByb3AgaW4gb2JqKSB7XHJcbiAgICAgIHRyeSB7IHJlc3VsdC5wdXNoKGZsYXR0ZW4ob2JqW3Byb3BdLCBkZXB0aCAtIDEpKTsgfSBjYXRjaCAoZSkge31cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIChyZXN1bHQubGVuZ3RoID8gcmVzdWx0IDogdHlwID09ICdzJyA/IG9iaiA6IG9iaiArICdcXDAnKTtcclxufVxyXG5cclxuLy9cclxuLy8gbWl4a2V5KClcclxuLy8gTWl4ZXMgYSBzdHJpbmcgc2VlZCBpbnRvIGEga2V5IHRoYXQgaXMgYW4gYXJyYXkgb2YgaW50ZWdlcnMsIGFuZFxyXG4vLyByZXR1cm5zIGEgc2hvcnRlbmVkIHN0cmluZyBzZWVkIHRoYXQgaXMgZXF1aXZhbGVudCB0byB0aGUgcmVzdWx0IGtleS5cclxuLy9cclxuZnVuY3Rpb24gbWl4a2V5KHNlZWQsIGtleSkge1xyXG4gIHZhciBzdHJpbmdzZWVkID0gc2VlZCArICcnLCBzbWVhciwgaiA9IDA7XHJcbiAgd2hpbGUgKGogPCBzdHJpbmdzZWVkLmxlbmd0aCkge1xyXG4gICAga2V5W21hc2sgJiBqXSA9XHJcbiAgICAgIG1hc2sgJiAoKHNtZWFyIF49IGtleVttYXNrICYgal0gKiAxOSkgKyBzdHJpbmdzZWVkLmNoYXJDb2RlQXQoaisrKSk7XHJcbiAgfVxyXG4gIHJldHVybiB0b3N0cmluZyhrZXkpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBhdXRvc2VlZCgpXHJcbi8vIFJldHVybnMgYW4gb2JqZWN0IGZvciBhdXRvc2VlZGluZywgdXNpbmcgd2luZG93LmNyeXB0byBpZiBhdmFpbGFibGUuXHJcbi8vXHJcbi8qKiBAcGFyYW0ge1VpbnQ4QXJyYXk9fSBzZWVkICovXHJcbmZ1bmN0aW9uIGF1dG9zZWVkKHNlZWQpIHtcclxuICB0cnkge1xyXG4gICAgR0xPQkFMLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoc2VlZCA9IG5ldyBVaW50OEFycmF5KHdpZHRoKSk7XHJcbiAgICByZXR1cm4gdG9zdHJpbmcoc2VlZCk7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuIFsrbmV3IERhdGUsIEdMT0JBTCwgR0xPQkFMLm5hdmlnYXRvciAmJiBHTE9CQUwubmF2aWdhdG9yLnBsdWdpbnMsXHJcbiAgICAgICAgICAgIEdMT0JBTC5zY3JlZW4sIHRvc3RyaW5nKHBvb2wpXTtcclxuICB9XHJcbn1cclxuXHJcbi8vXHJcbi8vIHRvc3RyaW5nKClcclxuLy8gQ29udmVydHMgYW4gYXJyYXkgb2YgY2hhcmNvZGVzIHRvIGEgc3RyaW5nXHJcbi8vXHJcbmZ1bmN0aW9uIHRvc3RyaW5nKGEpIHtcclxuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseSgwLCBhKTtcclxufVxyXG5cclxuLy9cclxuLy8gV2hlbiBzZWVkcmFuZG9tLmpzIGlzIGxvYWRlZCwgd2UgaW1tZWRpYXRlbHkgbWl4IGEgZmV3IGJpdHNcclxuLy8gZnJvbSB0aGUgYnVpbHQtaW4gUk5HIGludG8gdGhlIGVudHJvcHkgcG9vbC4gIEJlY2F1c2Ugd2UgZG9cclxuLy8gbm90IHdhbnQgdG8gaW50ZWZlcmUgd2l0aCBkZXRlcm1pbnN0aWMgUFJORyBzdGF0ZSBsYXRlcixcclxuLy8gc2VlZHJhbmRvbSB3aWxsIG5vdCBjYWxsIE1hdGgucmFuZG9tIG9uIGl0cyBvd24gYWdhaW4gYWZ0ZXJcclxuLy8gaW5pdGlhbGl6YXRpb24uXHJcbi8vXHJcbm1peGtleShNYXRoLnJhbmRvbSgpLCBwb29sKTtcclxuIiwiLypcbiAqIEEgZmFzdCBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHNpbXBsZXggbm9pc2UgYnkgSm9uYXMgV2FnbmVyXG5cbkJhc2VkIG9uIGEgc3BlZWQtaW1wcm92ZWQgc2ltcGxleCBub2lzZSBhbGdvcml0aG0gZm9yIDJELCAzRCBhbmQgNEQgaW4gSmF2YS5cbldoaWNoIGlzIGJhc2VkIG9uIGV4YW1wbGUgY29kZSBieSBTdGVmYW4gR3VzdGF2c29uIChzdGVndUBpdG4ubGl1LnNlKS5cbldpdGggT3B0aW1pc2F0aW9ucyBieSBQZXRlciBFYXN0bWFuIChwZWFzdG1hbkBkcml6emxlLnN0YW5mb3JkLmVkdSkuXG5CZXR0ZXIgcmFuayBvcmRlcmluZyBtZXRob2QgYnkgU3RlZmFuIEd1c3RhdnNvbiBpbiAyMDEyLlxuXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTggSm9uYXMgV2FnbmVyXG5cbiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIEYyID0gMC41ICogKE1hdGguc3FydCgzLjApIC0gMS4wKTtcbiAgdmFyIEcyID0gKDMuMCAtIE1hdGguc3FydCgzLjApKSAvIDYuMDtcbiAgdmFyIEYzID0gMS4wIC8gMy4wO1xuICB2YXIgRzMgPSAxLjAgLyA2LjA7XG4gIHZhciBGNCA9IChNYXRoLnNxcnQoNS4wKSAtIDEuMCkgLyA0LjA7XG4gIHZhciBHNCA9ICg1LjAgLSBNYXRoLnNxcnQoNS4wKSkgLyAyMC4wO1xuXG4gIGZ1bmN0aW9uIFNpbXBsZXhOb2lzZShyYW5kb21PclNlZWQpIHtcbiAgICB2YXIgcmFuZG9tO1xuICAgIGlmICh0eXBlb2YgcmFuZG9tT3JTZWVkID09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJhbmRvbSA9IHJhbmRvbU9yU2VlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZG9tT3JTZWVkKSB7XG4gICAgICByYW5kb20gPSBhbGVhKHJhbmRvbU9yU2VlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICAgIH1cbiAgICB0aGlzLnAgPSBidWlsZFBlcm11dGF0aW9uVGFibGUocmFuZG9tKTtcbiAgICB0aGlzLnBlcm0gPSBuZXcgVWludDhBcnJheSg1MTIpO1xuICAgIHRoaXMucGVybU1vZDEyID0gbmV3IFVpbnQ4QXJyYXkoNTEyKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUxMjsgaSsrKSB7XG4gICAgICB0aGlzLnBlcm1baV0gPSB0aGlzLnBbaSAmIDI1NV07XG4gICAgICB0aGlzLnBlcm1Nb2QxMltpXSA9IHRoaXMucGVybVtpXSAlIDEyO1xuICAgIH1cblxuICB9XG4gIFNpbXBsZXhOb2lzZS5wcm90b3R5cGUgPSB7XG4gICAgZ3JhZDM6IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDEsIDAsXG4gICAgICAtMSwgMSwgMCxcbiAgICAgIDEsIC0xLCAwLFxuXG4gICAgICAtMSwgLTEsIDAsXG4gICAgICAxLCAwLCAxLFxuICAgICAgLTEsIDAsIDEsXG5cbiAgICAgIDEsIDAsIC0xLFxuICAgICAgLTEsIDAsIC0xLFxuICAgICAgMCwgMSwgMSxcblxuICAgICAgMCwgLTEsIDEsXG4gICAgICAwLCAxLCAtMSxcbiAgICAgIDAsIC0xLCAtMV0pLFxuICAgIGdyYWQ0OiBuZXcgRmxvYXQzMkFycmF5KFswLCAxLCAxLCAxLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIDEsIDAsIDEsIC0xLCAtMSxcbiAgICAgIDAsIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSxcbiAgICAgIDEsIDAsIDEsIDEsIDEsIDAsIDEsIC0xLCAxLCAwLCAtMSwgMSwgMSwgMCwgLTEsIC0xLFxuICAgICAgLTEsIDAsIDEsIDEsIC0xLCAwLCAxLCAtMSwgLTEsIDAsIC0xLCAxLCAtMSwgMCwgLTEsIC0xLFxuICAgICAgMSwgMSwgMCwgMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAxLCAxLCAtMSwgMCwgLTEsXG4gICAgICAtMSwgMSwgMCwgMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsIDAsIDEsIC0xLCAtMSwgMCwgLTEsXG4gICAgICAxLCAxLCAxLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIDEsIDAsIDEsIC0xLCAtMSwgMCxcbiAgICAgIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSwgMF0pLFxuICAgIG5vaXNlMkQ6IGZ1bmN0aW9uKHhpbiwgeWluKSB7XG4gICAgICB2YXIgcGVybU1vZDEyID0gdGhpcy5wZXJtTW9kMTI7XG4gICAgICB2YXIgcGVybSA9IHRoaXMucGVybTtcbiAgICAgIHZhciBncmFkMyA9IHRoaXMuZ3JhZDM7XG4gICAgICB2YXIgbjAgPSAwOyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIHRocmVlIGNvcm5lcnNcbiAgICAgIHZhciBuMSA9IDA7XG4gICAgICB2YXIgbjIgPSAwO1xuICAgICAgLy8gU2tldyB0aGUgaW5wdXQgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggY2VsbCB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeGluICsgeWluKSAqIEYyOyAvLyBIYWlyeSBmYWN0b3IgZm9yIDJEXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeGluICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeWluICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaikgKiBHMjtcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSkgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIHgwID0geGluIC0gWDA7IC8vIFRoZSB4LHkgZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5aW4gLSBZMDtcbiAgICAgIC8vIEZvciB0aGUgMkQgY2FzZSwgdGhlIHNpbXBsZXggc2hhcGUgaXMgYW4gZXF1aWxhdGVyYWwgdHJpYW5nbGUuXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc2ltcGxleCB3ZSBhcmUgaW4uXG4gICAgICB2YXIgaTEsIGoxOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgKG1pZGRsZSkgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaikgY29vcmRzXG4gICAgICBpZiAoeDAgPiB5MCkge1xuICAgICAgICBpMSA9IDE7XG4gICAgICAgIGoxID0gMDtcbiAgICAgIH0gLy8gbG93ZXIgdHJpYW5nbGUsIFhZIG9yZGVyOiAoMCwwKS0+KDEsMCktPigxLDEpXG4gICAgICBlbHNlIHtcbiAgICAgICAgaTEgPSAwO1xuICAgICAgICBqMSA9IDE7XG4gICAgICB9IC8vIHVwcGVyIHRyaWFuZ2xlLCBZWCBvcmRlcjogKDAsMCktPigwLDEpLT4oMSwxKVxuICAgICAgLy8gQSBzdGVwIG9mICgxLDApIGluIChpLGopIG1lYW5zIGEgc3RlcCBvZiAoMS1jLC1jKSBpbiAoeCx5KSwgYW5kXG4gICAgICAvLyBhIHN0ZXAgb2YgKDAsMSkgaW4gKGksaikgbWVhbnMgYSBzdGVwIG9mICgtYywxLWMpIGluICh4LHkpLCB3aGVyZVxuICAgICAgLy8gYyA9ICgzLXNxcnQoMykpLzZcbiAgICAgIHZhciB4MSA9IHgwIC0gaTEgKyBHMjsgLy8gT2Zmc2V0cyBmb3IgbWlkZGxlIGNvcm5lciBpbiAoeCx5KSB1bnNrZXdlZCBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHMjtcbiAgICAgIHZhciB4MiA9IHgwIC0gMS4wICsgMi4wICogRzI7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkpIHVuc2tld2VkIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSAxLjAgKyAyLjAgKiBHMjtcbiAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgdGhyZWUgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgY29udHJpYnV0aW9uIGZyb20gdGhlIHRocmVlIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNSAtIHgwICogeDAgLSB5MCAqIHkwO1xuICAgICAgaWYgKHQwID49IDApIHtcbiAgICAgICAgdmFyIGdpMCA9IHBlcm1Nb2QxMltpaSArIHBlcm1bampdXSAqIDM7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDNbZ2kwXSAqIHgwICsgZ3JhZDNbZ2kwICsgMV0gKiB5MCk7IC8vICh4LHkpIG9mIGdyYWQzIHVzZWQgZm9yIDJEIGdyYWRpZW50XG4gICAgICB9XG4gICAgICB2YXIgdDEgPSAwLjUgLSB4MSAqIHgxIC0geTEgKiB5MTtcbiAgICAgIGlmICh0MSA+PSAwKSB7XG4gICAgICAgIHZhciBnaTEgPSBwZXJtTW9kMTJbaWkgKyBpMSArIHBlcm1bamogKyBqMV1dICogMztcbiAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkM1tnaTFdICogeDEgKyBncmFkM1tnaTEgKyAxXSAqIHkxKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MiA9IDAuNSAtIHgyICogeDIgLSB5MiAqIHkyO1xuICAgICAgaWYgKHQyID49IDApIHtcbiAgICAgICAgdmFyIGdpMiA9IHBlcm1Nb2QxMltpaSArIDEgKyBwZXJtW2pqICsgMV1dICogMztcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkM1tnaTJdICogeDIgKyBncmFkM1tnaTIgKyAxXSAqIHkyKTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBjb250cmlidXRpb25zIGZyb20gZWFjaCBjb3JuZXIgdG8gZ2V0IHRoZSBmaW5hbCBub2lzZSB2YWx1ZS5cbiAgICAgIC8vIFRoZSByZXN1bHQgaXMgc2NhbGVkIHRvIHJldHVybiB2YWx1ZXMgaW4gdGhlIGludGVydmFsIFstMSwxXS5cbiAgICAgIHJldHVybiA3MC4wICogKG4wICsgbjEgKyBuMik7XG4gICAgfSxcbiAgICAvLyAzRCBzaW1wbGV4IG5vaXNlXG4gICAgbm9pc2UzRDogZnVuY3Rpb24oeGluLCB5aW4sIHppbikge1xuICAgICAgdmFyIHBlcm1Nb2QxMiA9IHRoaXMucGVybU1vZDEyO1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDMgPSB0aGlzLmdyYWQzO1xuICAgICAgdmFyIG4wLCBuMSwgbjIsIG4zOyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIGZvdXIgY29ybmVyc1xuICAgICAgLy8gU2tldyB0aGUgaW5wdXQgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggY2VsbCB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeGluICsgeWluICsgemluKSAqIEYzOyAvLyBWZXJ5IG5pY2UgYW5kIHNpbXBsZSBza2V3IGZhY3RvciBmb3IgM0RcbiAgICAgIHZhciBpID0gTWF0aC5mbG9vcih4aW4gKyBzKTtcbiAgICAgIHZhciBqID0gTWF0aC5mbG9vcih5aW4gKyBzKTtcbiAgICAgIHZhciBrID0gTWF0aC5mbG9vcih6aW4gKyBzKTtcbiAgICAgIHZhciB0ID0gKGkgKyBqICsgaykgKiBHMztcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSx6KSBzcGFjZVxuICAgICAgdmFyIFkwID0gaiAtIHQ7XG4gICAgICB2YXIgWjAgPSBrIC0gdDtcbiAgICAgIHZhciB4MCA9IHhpbiAtIFgwOyAvLyBUaGUgeCx5LHogZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5aW4gLSBZMDtcbiAgICAgIHZhciB6MCA9IHppbiAtIFowO1xuICAgICAgLy8gRm9yIHRoZSAzRCBjYXNlLCB0aGUgc2ltcGxleCBzaGFwZSBpcyBhIHNsaWdodGx5IGlycmVndWxhciB0ZXRyYWhlZHJvbi5cbiAgICAgIC8vIERldGVybWluZSB3aGljaCBzaW1wbGV4IHdlIGFyZSBpbi5cbiAgICAgIHZhciBpMSwgajEsIGsxOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaixrKSBjb29yZHNcbiAgICAgIHZhciBpMiwgajIsIGsyOyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgb2Ygc2ltcGxleCBpbiAoaSxqLGspIGNvb3Jkc1xuICAgICAgaWYgKHgwID49IHkwKSB7XG4gICAgICAgIGlmICh5MCA+PSB6MCkge1xuICAgICAgICAgIGkxID0gMTtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAwO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAwO1xuICAgICAgICB9IC8vIFggWSBaIG9yZGVyXG4gICAgICAgIGVsc2UgaWYgKHgwID49IHowKSB7XG4gICAgICAgICAgaTEgPSAxO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMDtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWCBaIFkgb3JkZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDE7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMDtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWiBYIFkgb3JkZXJcbiAgICAgIH1cbiAgICAgIGVsc2UgeyAvLyB4MDx5MFxuICAgICAgICBpZiAoeTAgPCB6MCkge1xuICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAxO1xuICAgICAgICAgIGkyID0gMDtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFogWSBYIG9yZGVyXG4gICAgICAgIGVsc2UgaWYgKHgwIDwgejApIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAxO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDA7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgfSAvLyBZIFogWCBvcmRlclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAxO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMDtcbiAgICAgICAgfSAvLyBZIFggWiBvcmRlclxuICAgICAgfVxuICAgICAgLy8gQSBzdGVwIG9mICgxLDAsMCkgaW4gKGksaixrKSBtZWFucyBhIHN0ZXAgb2YgKDEtYywtYywtYykgaW4gKHgseSx6KSxcbiAgICAgIC8vIGEgc3RlcCBvZiAoMCwxLDApIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgtYywxLWMsLWMpIGluICh4LHkseiksIGFuZFxuICAgICAgLy8gYSBzdGVwIG9mICgwLDAsMSkgaW4gKGksaixrKSBtZWFucyBhIHN0ZXAgb2YgKC1jLC1jLDEtYykgaW4gKHgseSx6KSwgd2hlcmVcbiAgICAgIC8vIGMgPSAxLzYuXG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzM7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHMztcbiAgICAgIHZhciB6MSA9IHowIC0gazEgKyBHMztcbiAgICAgIHZhciB4MiA9IHgwIC0gaTIgKyAyLjAgKiBHMzsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgICB2YXIgeTIgPSB5MCAtIGoyICsgMi4wICogRzM7XG4gICAgICB2YXIgejIgPSB6MCAtIGsyICsgMi4wICogRzM7XG4gICAgICB2YXIgeDMgPSB4MCAtIDEuMCArIDMuMCAqIEczOyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgICAgdmFyIHkzID0geTAgLSAxLjAgKyAzLjAgKiBHMztcbiAgICAgIHZhciB6MyA9IHowIC0gMS4wICsgMy4wICogRzM7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIGZvdXIgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIHZhciBrayA9IGsgJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBmb3VyIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNiAtIHgwICogeDAgLSB5MCAqIHkwIC0gejAgKiB6MDtcbiAgICAgIGlmICh0MCA8IDApIG4wID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTAgPSBwZXJtTW9kMTJbaWkgKyBwZXJtW2pqICsgcGVybVtra11dXSAqIDM7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDNbZ2kwXSAqIHgwICsgZ3JhZDNbZ2kwICsgMV0gKiB5MCArIGdyYWQzW2dpMCArIDJdICogejApO1xuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxO1xuICAgICAgaWYgKHQxIDwgMCkgbjEgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMSA9IHBlcm1Nb2QxMltpaSArIGkxICsgcGVybVtqaiArIGoxICsgcGVybVtrayArIGsxXV1dICogMztcbiAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkM1tnaTFdICogeDEgKyBncmFkM1tnaTEgKyAxXSAqIHkxICsgZ3JhZDNbZ2kxICsgMl0gKiB6MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjYgLSB4MiAqIHgyIC0geTIgKiB5MiAtIHoyICogejI7XG4gICAgICBpZiAodDIgPCAwKSBuMiA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kyID0gcGVybU1vZDEyW2lpICsgaTIgKyBwZXJtW2pqICsgajIgKyBwZXJtW2trICsgazJdXV0gKiAzO1xuICAgICAgICB0MiAqPSB0MjtcbiAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQzW2dpMl0gKiB4MiArIGdyYWQzW2dpMiArIDFdICogeTIgKyBncmFkM1tnaTIgKyAyXSAqIHoyKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MyA9IDAuNiAtIHgzICogeDMgLSB5MyAqIHkzIC0gejMgKiB6MztcbiAgICAgIGlmICh0MyA8IDApIG4zID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTMgPSBwZXJtTW9kMTJbaWkgKyAxICsgcGVybVtqaiArIDEgKyBwZXJtW2trICsgMV1dXSAqIDM7XG4gICAgICAgIHQzICo9IHQzO1xuICAgICAgICBuMyA9IHQzICogdDMgKiAoZ3JhZDNbZ2kzXSAqIHgzICsgZ3JhZDNbZ2kzICsgMV0gKiB5MyArIGdyYWQzW2dpMyArIDJdICogejMpO1xuICAgICAgfVxuICAgICAgLy8gQWRkIGNvbnRyaWJ1dGlvbnMgZnJvbSBlYWNoIGNvcm5lciB0byBnZXQgdGhlIGZpbmFsIG5vaXNlIHZhbHVlLlxuICAgICAgLy8gVGhlIHJlc3VsdCBpcyBzY2FsZWQgdG8gc3RheSBqdXN0IGluc2lkZSBbLTEsMV1cbiAgICAgIHJldHVybiAzMi4wICogKG4wICsgbjEgKyBuMiArIG4zKTtcbiAgICB9LFxuICAgIC8vIDREIHNpbXBsZXggbm9pc2UsIGJldHRlciBzaW1wbGV4IHJhbmsgb3JkZXJpbmcgbWV0aG9kIDIwMTItMDMtMDlcbiAgICBub2lzZTREOiBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XG4gICAgICB2YXIgcGVybSA9IHRoaXMucGVybTtcbiAgICAgIHZhciBncmFkNCA9IHRoaXMuZ3JhZDQ7XG5cbiAgICAgIHZhciBuMCwgbjEsIG4yLCBuMywgbjQ7IC8vIE5vaXNlIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgZml2ZSBjb3JuZXJzXG4gICAgICAvLyBTa2V3IHRoZSAoeCx5LHosdykgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIGNlbGwgb2YgMjQgc2ltcGxpY2VzIHdlJ3JlIGluXG4gICAgICB2YXIgcyA9ICh4ICsgeSArIHogKyB3KSAqIEY0OyAvLyBGYWN0b3IgZm9yIDREIHNrZXdpbmdcbiAgICAgIHZhciBpID0gTWF0aC5mbG9vcih4ICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeSArIHMpO1xuICAgICAgdmFyIGsgPSBNYXRoLmZsb29yKHogKyBzKTtcbiAgICAgIHZhciBsID0gTWF0aC5mbG9vcih3ICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaiArIGsgKyBsKSAqIEc0OyAvLyBGYWN0b3IgZm9yIDREIHVuc2tld2luZ1xuICAgICAgdmFyIFgwID0gaSAtIHQ7IC8vIFVuc2tldyB0aGUgY2VsbCBvcmlnaW4gYmFjayB0byAoeCx5LHosdykgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIFowID0gayAtIHQ7XG4gICAgICB2YXIgVzAgPSBsIC0gdDtcbiAgICAgIHZhciB4MCA9IHggLSBYMDsgLy8gVGhlIHgseSx6LHcgZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5IC0gWTA7XG4gICAgICB2YXIgejAgPSB6IC0gWjA7XG4gICAgICB2YXIgdzAgPSB3IC0gVzA7XG4gICAgICAvLyBGb3IgdGhlIDREIGNhc2UsIHRoZSBzaW1wbGV4IGlzIGEgNEQgc2hhcGUgSSB3b24ndCBldmVuIHRyeSB0byBkZXNjcmliZS5cbiAgICAgIC8vIFRvIGZpbmQgb3V0IHdoaWNoIG9mIHRoZSAyNCBwb3NzaWJsZSBzaW1wbGljZXMgd2UncmUgaW4sIHdlIG5lZWQgdG9cbiAgICAgIC8vIGRldGVybWluZSB0aGUgbWFnbml0dWRlIG9yZGVyaW5nIG9mIHgwLCB5MCwgejAgYW5kIHcwLlxuICAgICAgLy8gU2l4IHBhaXItd2lzZSBjb21wYXJpc29ucyBhcmUgcGVyZm9ybWVkIGJldHdlZW4gZWFjaCBwb3NzaWJsZSBwYWlyXG4gICAgICAvLyBvZiB0aGUgZm91ciBjb29yZGluYXRlcywgYW5kIHRoZSByZXN1bHRzIGFyZSB1c2VkIHRvIHJhbmsgdGhlIG51bWJlcnMuXG4gICAgICB2YXIgcmFua3ggPSAwO1xuICAgICAgdmFyIHJhbmt5ID0gMDtcbiAgICAgIHZhciByYW5reiA9IDA7XG4gICAgICB2YXIgcmFua3cgPSAwO1xuICAgICAgaWYgKHgwID4geTApIHJhbmt4Kys7XG4gICAgICBlbHNlIHJhbmt5Kys7XG4gICAgICBpZiAoeDAgPiB6MCkgcmFua3grKztcbiAgICAgIGVsc2UgcmFua3orKztcbiAgICAgIGlmICh4MCA+IHcwKSByYW5reCsrO1xuICAgICAgZWxzZSByYW5rdysrO1xuICAgICAgaWYgKHkwID4gejApIHJhbmt5Kys7XG4gICAgICBlbHNlIHJhbmt6Kys7XG4gICAgICBpZiAoeTAgPiB3MCkgcmFua3krKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIGlmICh6MCA+IHcwKSByYW5reisrO1xuICAgICAgZWxzZSByYW5rdysrO1xuICAgICAgdmFyIGkxLCBqMSwgazEsIGwxOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgc2Vjb25kIHNpbXBsZXggY29ybmVyXG4gICAgICB2YXIgaTIsIGoyLCBrMiwgbDI7IC8vIFRoZSBpbnRlZ2VyIG9mZnNldHMgZm9yIHRoZSB0aGlyZCBzaW1wbGV4IGNvcm5lclxuICAgICAgdmFyIGkzLCBqMywgazMsIGwzOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgZm91cnRoIHNpbXBsZXggY29ybmVyXG4gICAgICAvLyBzaW1wbGV4W2NdIGlzIGEgNC12ZWN0b3Igd2l0aCB0aGUgbnVtYmVycyAwLCAxLCAyIGFuZCAzIGluIHNvbWUgb3JkZXIuXG4gICAgICAvLyBNYW55IHZhbHVlcyBvZiBjIHdpbGwgbmV2ZXIgb2NjdXIsIHNpbmNlIGUuZy4geD55Pno+dyBtYWtlcyB4PHosIHk8dyBhbmQgeDx3XG4gICAgICAvLyBpbXBvc3NpYmxlLiBPbmx5IHRoZSAyNCBpbmRpY2VzIHdoaWNoIGhhdmUgbm9uLXplcm8gZW50cmllcyBtYWtlIGFueSBzZW5zZS5cbiAgICAgIC8vIFdlIHVzZSBhIHRocmVzaG9sZGluZyB0byBzZXQgdGhlIGNvb3JkaW5hdGVzIGluIHR1cm4gZnJvbSB0aGUgbGFyZ2VzdCBtYWduaXR1ZGUuXG4gICAgICAvLyBSYW5rIDMgZGVub3RlcyB0aGUgbGFyZ2VzdCBjb29yZGluYXRlLlxuICAgICAgaTEgPSByYW5reCA+PSAzID8gMSA6IDA7XG4gICAgICBqMSA9IHJhbmt5ID49IDMgPyAxIDogMDtcbiAgICAgIGsxID0gcmFua3ogPj0gMyA/IDEgOiAwO1xuICAgICAgbDEgPSByYW5rdyA+PSAzID8gMSA6IDA7XG4gICAgICAvLyBSYW5rIDIgZGVub3RlcyB0aGUgc2Vjb25kIGxhcmdlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkyID0gcmFua3ggPj0gMiA/IDEgOiAwO1xuICAgICAgajIgPSByYW5reSA+PSAyID8gMSA6IDA7XG4gICAgICBrMiA9IHJhbmt6ID49IDIgPyAxIDogMDtcbiAgICAgIGwyID0gcmFua3cgPj0gMiA/IDEgOiAwO1xuICAgICAgLy8gUmFuayAxIGRlbm90ZXMgdGhlIHNlY29uZCBzbWFsbGVzdCBjb29yZGluYXRlLlxuICAgICAgaTMgPSByYW5reCA+PSAxID8gMSA6IDA7XG4gICAgICBqMyA9IHJhbmt5ID49IDEgPyAxIDogMDtcbiAgICAgIGszID0gcmFua3ogPj0gMSA/IDEgOiAwO1xuICAgICAgbDMgPSByYW5rdyA+PSAxID8gMSA6IDA7XG4gICAgICAvLyBUaGUgZmlmdGggY29ybmVyIGhhcyBhbGwgY29vcmRpbmF0ZSBvZmZzZXRzID0gMSwgc28gbm8gbmVlZCB0byBjb21wdXRlIHRoYXQuXG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzQ7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHkxID0geTAgLSBqMSArIEc0O1xuICAgICAgdmFyIHoxID0gejAgLSBrMSArIEc0O1xuICAgICAgdmFyIHcxID0gdzAgLSBsMSArIEc0O1xuICAgICAgdmFyIHgyID0geDAgLSBpMiArIDIuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSBqMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHoyID0gejAgLSBrMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHcyID0gdzAgLSBsMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHgzID0geDAgLSBpMyArIDMuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciBmb3VydGggY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MyA9IHkwIC0gajMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB6MyA9IHowIC0gazMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB3MyA9IHcwIC0gbDMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB4NCA9IHgwIC0gMS4wICsgNC4wICogRzQ7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5NCA9IHkwIC0gMS4wICsgNC4wICogRzQ7XG4gICAgICB2YXIgejQgPSB6MCAtIDEuMCArIDQuMCAqIEc0O1xuICAgICAgdmFyIHc0ID0gdzAgLSAxLjAgKyA0LjAgKiBHNDtcbiAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgZml2ZSBzaW1wbGV4IGNvcm5lcnNcbiAgICAgIHZhciBpaSA9IGkgJiAyNTU7XG4gICAgICB2YXIgamogPSBqICYgMjU1O1xuICAgICAgdmFyIGtrID0gayAmIDI1NTtcbiAgICAgIHZhciBsbCA9IGwgJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBmaXZlIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNiAtIHgwICogeDAgLSB5MCAqIHkwIC0gejAgKiB6MCAtIHcwICogdzA7XG4gICAgICBpZiAodDAgPCAwKSBuMCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kwID0gKHBlcm1baWkgKyBwZXJtW2pqICsgcGVybVtrayArIHBlcm1bbGxdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDAgKj0gdDA7XG4gICAgICAgIG4wID0gdDAgKiB0MCAqIChncmFkNFtnaTBdICogeDAgKyBncmFkNFtnaTAgKyAxXSAqIHkwICsgZ3JhZDRbZ2kwICsgMl0gKiB6MCArIGdyYWQ0W2dpMCArIDNdICogdzApO1xuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxIC0gdzEgKiB3MTtcbiAgICAgIGlmICh0MSA8IDApIG4xID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTEgPSAocGVybVtpaSArIGkxICsgcGVybVtqaiArIGoxICsgcGVybVtrayArIGsxICsgcGVybVtsbCArIGwxXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDRbZ2kxXSAqIHgxICsgZ3JhZDRbZ2kxICsgMV0gKiB5MSArIGdyYWQ0W2dpMSArIDJdICogejEgKyBncmFkNFtnaTEgKyAzXSAqIHcxKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MiA9IDAuNiAtIHgyICogeDIgLSB5MiAqIHkyIC0gejIgKiB6MiAtIHcyICogdzI7XG4gICAgICBpZiAodDIgPCAwKSBuMiA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kyID0gKHBlcm1baWkgKyBpMiArIHBlcm1bamogKyBqMiArIHBlcm1ba2sgKyBrMiArIHBlcm1bbGwgKyBsMl1dXV0gJSAzMikgKiA0O1xuICAgICAgICB0MiAqPSB0MjtcbiAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQ0W2dpMl0gKiB4MiArIGdyYWQ0W2dpMiArIDFdICogeTIgKyBncmFkNFtnaTIgKyAyXSAqIHoyICsgZ3JhZDRbZ2kyICsgM10gKiB3Mik7XG4gICAgICB9XG4gICAgICB2YXIgdDMgPSAwLjYgLSB4MyAqIHgzIC0geTMgKiB5MyAtIHozICogejMgLSB3MyAqIHczO1xuICAgICAgaWYgKHQzIDwgMCkgbjMgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMyA9IChwZXJtW2lpICsgaTMgKyBwZXJtW2pqICsgajMgKyBwZXJtW2trICsgazMgKyBwZXJtW2xsICsgbDNdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDMgKj0gdDM7XG4gICAgICAgIG4zID0gdDMgKiB0MyAqIChncmFkNFtnaTNdICogeDMgKyBncmFkNFtnaTMgKyAxXSAqIHkzICsgZ3JhZDRbZ2kzICsgMl0gKiB6MyArIGdyYWQ0W2dpMyArIDNdICogdzMpO1xuICAgICAgfVxuICAgICAgdmFyIHQ0ID0gMC42IC0geDQgKiB4NCAtIHk0ICogeTQgLSB6NCAqIHo0IC0gdzQgKiB3NDtcbiAgICAgIGlmICh0NCA8IDApIG40ID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTQgPSAocGVybVtpaSArIDEgKyBwZXJtW2pqICsgMSArIHBlcm1ba2sgKyAxICsgcGVybVtsbCArIDFdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDQgKj0gdDQ7XG4gICAgICAgIG40ID0gdDQgKiB0NCAqIChncmFkNFtnaTRdICogeDQgKyBncmFkNFtnaTQgKyAxXSAqIHk0ICsgZ3JhZDRbZ2k0ICsgMl0gKiB6NCArIGdyYWQ0W2dpNCArIDNdICogdzQpO1xuICAgICAgfVxuICAgICAgLy8gU3VtIHVwIGFuZCBzY2FsZSB0aGUgcmVzdWx0IHRvIGNvdmVyIHRoZSByYW5nZSBbLTEsMV1cbiAgICAgIHJldHVybiAyNy4wICogKG4wICsgbjEgKyBuMiArIG4zICsgbjQpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBidWlsZFBlcm11dGF0aW9uVGFibGUocmFuZG9tKSB7XG4gICAgdmFyIGk7XG4gICAgdmFyIHAgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgcFtpXSA9IGk7XG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykge1xuICAgICAgdmFyIHIgPSBpICsgfn4ocmFuZG9tKCkgKiAoMjU2IC0gaSkpO1xuICAgICAgdmFyIGF1eCA9IHBbaV07XG4gICAgICBwW2ldID0gcFtyXTtcbiAgICAgIHBbcl0gPSBhdXg7XG4gICAgfVxuICAgIHJldHVybiBwO1xuICB9XG4gIFNpbXBsZXhOb2lzZS5fYnVpbGRQZXJtdXRhdGlvblRhYmxlID0gYnVpbGRQZXJtdXRhdGlvblRhYmxlO1xuXG4gIGZ1bmN0aW9uIGFsZWEoKSB7XG4gICAgLy8gSm9oYW5uZXMgQmFhZ8O4ZSA8YmFhZ29lQGJhYWdvZS5jb20+LCAyMDEwXG4gICAgdmFyIHMwID0gMDtcbiAgICB2YXIgczEgPSAwO1xuICAgIHZhciBzMiA9IDA7XG4gICAgdmFyIGMgPSAxO1xuXG4gICAgdmFyIG1hc2ggPSBtYXNoZXIoKTtcbiAgICBzMCA9IG1hc2goJyAnKTtcbiAgICBzMSA9IG1hc2goJyAnKTtcbiAgICBzMiA9IG1hc2goJyAnKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzMCAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczAgPCAwKSB7XG4gICAgICAgIHMwICs9IDE7XG4gICAgICB9XG4gICAgICBzMSAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczEgPCAwKSB7XG4gICAgICAgIHMxICs9IDE7XG4gICAgICB9XG4gICAgICBzMiAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczIgPCAwKSB7XG4gICAgICAgIHMyICs9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIG1hc2ggPSBudWxsO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gMjA5MTYzOSAqIHMwICsgYyAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXG4gICAgICBzMCA9IHMxO1xuICAgICAgczEgPSBzMjtcbiAgICAgIHJldHVybiBzMiA9IHQgLSAoYyA9IHQgfCAwKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1hc2hlcigpIHtcbiAgICB2YXIgbiA9IDB4ZWZjODI0OWQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIGRhdGEgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbiArPSBkYXRhLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHZhciBoID0gMC4wMjUxOTYwMzI4MjQxNjkzOCAqIG47XG4gICAgICAgIG4gPSBoID4+PiAwO1xuICAgICAgICBoIC09IG47XG4gICAgICAgIGggKj0gbjtcbiAgICAgICAgbiA9IGggPj4+IDA7XG4gICAgICAgIGggLT0gbjtcbiAgICAgICAgbiArPSBoICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcbiAgICAgIH1cbiAgICAgIHJldHVybiAobiA+Pj4gMCkgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxuICAgIH07XG4gIH1cblxuICAvLyBhbWRcbiAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnICYmIGRlZmluZS5hbWQpIGRlZmluZShmdW5jdGlvbigpIHtyZXR1cm4gU2ltcGxleE5vaXNlO30pO1xuICAvLyBjb21tb24ganNcbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykgZXhwb3J0cy5TaW1wbGV4Tm9pc2UgPSBTaW1wbGV4Tm9pc2U7XG4gIC8vIGJyb3dzZXJcbiAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHdpbmRvdy5TaW1wbGV4Tm9pc2UgPSBTaW1wbGV4Tm9pc2U7XG4gIC8vIG5vZGVqc1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IFNpbXBsZXhOb2lzZTtcbiAgfVxuXG59KSgpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfc2xpY2VkVG9BcnJheSA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gc2xpY2VJdGVyYXRvcihhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0pIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfSByZXR1cm4gZnVuY3Rpb24gKGFyciwgaSkgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IHJldHVybiBhcnI7IH0gZWxzZSBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSB7IHJldHVybiBzbGljZUl0ZXJhdG9yKGFyciwgaSk7IH0gZWxzZSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9IH07IH0oKTtcblxudmFyIFRBVSA9IE1hdGguUEkgKiAyO1xuXG52YXIgbWFwVG9FbGxpcHNlID0gZnVuY3Rpb24gbWFwVG9FbGxpcHNlKF9yZWYsIHJ4LCByeSwgY29zcGhpLCBzaW5waGksIGNlbnRlcngsIGNlbnRlcnkpIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuXG4gIHggKj0gcng7XG4gIHkgKj0gcnk7XG5cbiAgdmFyIHhwID0gY29zcGhpICogeCAtIHNpbnBoaSAqIHk7XG4gIHZhciB5cCA9IHNpbnBoaSAqIHggKyBjb3NwaGkgKiB5O1xuXG4gIHJldHVybiB7XG4gICAgeDogeHAgKyBjZW50ZXJ4LFxuICAgIHk6IHlwICsgY2VudGVyeVxuICB9O1xufTtcblxudmFyIGFwcHJveFVuaXRBcmMgPSBmdW5jdGlvbiBhcHByb3hVbml0QXJjKGFuZzEsIGFuZzIpIHtcbiAgLy8gSWYgOTAgZGVncmVlIGNpcmN1bGFyIGFyYywgdXNlIGEgY29uc3RhbnRcbiAgLy8gYXMgZGVyaXZlZCBmcm9tIGh0dHA6Ly9zcGVuY2VybW9ydGVuc2VuLmNvbS9hcnRpY2xlcy9iZXppZXItY2lyY2xlXG4gIHZhciBhID0gYW5nMiA9PT0gMS41NzA3OTYzMjY3OTQ4OTY2ID8gMC41NTE5MTUwMjQ0OTQgOiBhbmcyID09PSAtMS41NzA3OTYzMjY3OTQ4OTY2ID8gLTAuNTUxOTE1MDI0NDk0IDogNCAvIDMgKiBNYXRoLnRhbihhbmcyIC8gNCk7XG5cbiAgdmFyIHgxID0gTWF0aC5jb3MoYW5nMSk7XG4gIHZhciB5MSA9IE1hdGguc2luKGFuZzEpO1xuICB2YXIgeDIgPSBNYXRoLmNvcyhhbmcxICsgYW5nMik7XG4gIHZhciB5MiA9IE1hdGguc2luKGFuZzEgKyBhbmcyKTtcblxuICByZXR1cm4gW3tcbiAgICB4OiB4MSAtIHkxICogYSxcbiAgICB5OiB5MSArIHgxICogYVxuICB9LCB7XG4gICAgeDogeDIgKyB5MiAqIGEsXG4gICAgeTogeTIgLSB4MiAqIGFcbiAgfSwge1xuICAgIHg6IHgyLFxuICAgIHk6IHkyXG4gIH1dO1xufTtcblxudmFyIHZlY3RvckFuZ2xlID0gZnVuY3Rpb24gdmVjdG9yQW5nbGUodXgsIHV5LCB2eCwgdnkpIHtcbiAgdmFyIHNpZ24gPSB1eCAqIHZ5IC0gdXkgKiB2eCA8IDAgPyAtMSA6IDE7XG5cbiAgdmFyIGRvdCA9IHV4ICogdnggKyB1eSAqIHZ5O1xuXG4gIGlmIChkb3QgPiAxKSB7XG4gICAgZG90ID0gMTtcbiAgfVxuXG4gIGlmIChkb3QgPCAtMSkge1xuICAgIGRvdCA9IC0xO1xuICB9XG5cbiAgcmV0dXJuIHNpZ24gKiBNYXRoLmFjb3MoZG90KTtcbn07XG5cbnZhciBnZXRBcmNDZW50ZXIgPSBmdW5jdGlvbiBnZXRBcmNDZW50ZXIocHgsIHB5LCBjeCwgY3ksIHJ4LCByeSwgbGFyZ2VBcmNGbGFnLCBzd2VlcEZsYWcsIHNpbnBoaSwgY29zcGhpLCBweHAsIHB5cCkge1xuICB2YXIgcnhzcSA9IE1hdGgucG93KHJ4LCAyKTtcbiAgdmFyIHJ5c3EgPSBNYXRoLnBvdyhyeSwgMik7XG4gIHZhciBweHBzcSA9IE1hdGgucG93KHB4cCwgMik7XG4gIHZhciBweXBzcSA9IE1hdGgucG93KHB5cCwgMik7XG5cbiAgdmFyIHJhZGljYW50ID0gcnhzcSAqIHJ5c3EgLSByeHNxICogcHlwc3EgLSByeXNxICogcHhwc3E7XG5cbiAgaWYgKHJhZGljYW50IDwgMCkge1xuICAgIHJhZGljYW50ID0gMDtcbiAgfVxuXG4gIHJhZGljYW50IC89IHJ4c3EgKiBweXBzcSArIHJ5c3EgKiBweHBzcTtcbiAgcmFkaWNhbnQgPSBNYXRoLnNxcnQocmFkaWNhbnQpICogKGxhcmdlQXJjRmxhZyA9PT0gc3dlZXBGbGFnID8gLTEgOiAxKTtcblxuICB2YXIgY2VudGVyeHAgPSByYWRpY2FudCAqIHJ4IC8gcnkgKiBweXA7XG4gIHZhciBjZW50ZXJ5cCA9IHJhZGljYW50ICogLXJ5IC8gcnggKiBweHA7XG5cbiAgdmFyIGNlbnRlcnggPSBjb3NwaGkgKiBjZW50ZXJ4cCAtIHNpbnBoaSAqIGNlbnRlcnlwICsgKHB4ICsgY3gpIC8gMjtcbiAgdmFyIGNlbnRlcnkgPSBzaW5waGkgKiBjZW50ZXJ4cCArIGNvc3BoaSAqIGNlbnRlcnlwICsgKHB5ICsgY3kpIC8gMjtcblxuICB2YXIgdngxID0gKHB4cCAtIGNlbnRlcnhwKSAvIHJ4O1xuICB2YXIgdnkxID0gKHB5cCAtIGNlbnRlcnlwKSAvIHJ5O1xuICB2YXIgdngyID0gKC1weHAgLSBjZW50ZXJ4cCkgLyByeDtcbiAgdmFyIHZ5MiA9ICgtcHlwIC0gY2VudGVyeXApIC8gcnk7XG5cbiAgdmFyIGFuZzEgPSB2ZWN0b3JBbmdsZSgxLCAwLCB2eDEsIHZ5MSk7XG4gIHZhciBhbmcyID0gdmVjdG9yQW5nbGUodngxLCB2eTEsIHZ4MiwgdnkyKTtcblxuICBpZiAoc3dlZXBGbGFnID09PSAwICYmIGFuZzIgPiAwKSB7XG4gICAgYW5nMiAtPSBUQVU7XG4gIH1cblxuICBpZiAoc3dlZXBGbGFnID09PSAxICYmIGFuZzIgPCAwKSB7XG4gICAgYW5nMiArPSBUQVU7XG4gIH1cblxuICByZXR1cm4gW2NlbnRlcngsIGNlbnRlcnksIGFuZzEsIGFuZzJdO1xufTtcblxudmFyIGFyY1RvQmV6aWVyID0gZnVuY3Rpb24gYXJjVG9CZXppZXIoX3JlZjIpIHtcbiAgdmFyIHB4ID0gX3JlZjIucHgsXG4gICAgICBweSA9IF9yZWYyLnB5LFxuICAgICAgY3ggPSBfcmVmMi5jeCxcbiAgICAgIGN5ID0gX3JlZjIuY3ksXG4gICAgICByeCA9IF9yZWYyLnJ4LFxuICAgICAgcnkgPSBfcmVmMi5yeSxcbiAgICAgIF9yZWYyJHhBeGlzUm90YXRpb24gPSBfcmVmMi54QXhpc1JvdGF0aW9uLFxuICAgICAgeEF4aXNSb3RhdGlvbiA9IF9yZWYyJHhBeGlzUm90YXRpb24gPT09IHVuZGVmaW5lZCA/IDAgOiBfcmVmMiR4QXhpc1JvdGF0aW9uLFxuICAgICAgX3JlZjIkbGFyZ2VBcmNGbGFnID0gX3JlZjIubGFyZ2VBcmNGbGFnLFxuICAgICAgbGFyZ2VBcmNGbGFnID0gX3JlZjIkbGFyZ2VBcmNGbGFnID09PSB1bmRlZmluZWQgPyAwIDogX3JlZjIkbGFyZ2VBcmNGbGFnLFxuICAgICAgX3JlZjIkc3dlZXBGbGFnID0gX3JlZjIuc3dlZXBGbGFnLFxuICAgICAgc3dlZXBGbGFnID0gX3JlZjIkc3dlZXBGbGFnID09PSB1bmRlZmluZWQgPyAwIDogX3JlZjIkc3dlZXBGbGFnO1xuXG4gIHZhciBjdXJ2ZXMgPSBbXTtcblxuICBpZiAocnggPT09IDAgfHwgcnkgPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgc2lucGhpID0gTWF0aC5zaW4oeEF4aXNSb3RhdGlvbiAqIFRBVSAvIDM2MCk7XG4gIHZhciBjb3NwaGkgPSBNYXRoLmNvcyh4QXhpc1JvdGF0aW9uICogVEFVIC8gMzYwKTtcblxuICB2YXIgcHhwID0gY29zcGhpICogKHB4IC0gY3gpIC8gMiArIHNpbnBoaSAqIChweSAtIGN5KSAvIDI7XG4gIHZhciBweXAgPSAtc2lucGhpICogKHB4IC0gY3gpIC8gMiArIGNvc3BoaSAqIChweSAtIGN5KSAvIDI7XG5cbiAgaWYgKHB4cCA9PT0gMCAmJiBweXAgPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByeCA9IE1hdGguYWJzKHJ4KTtcbiAgcnkgPSBNYXRoLmFicyhyeSk7XG5cbiAgdmFyIGxhbWJkYSA9IE1hdGgucG93KHB4cCwgMikgLyBNYXRoLnBvdyhyeCwgMikgKyBNYXRoLnBvdyhweXAsIDIpIC8gTWF0aC5wb3cocnksIDIpO1xuXG4gIGlmIChsYW1iZGEgPiAxKSB7XG4gICAgcnggKj0gTWF0aC5zcXJ0KGxhbWJkYSk7XG4gICAgcnkgKj0gTWF0aC5zcXJ0KGxhbWJkYSk7XG4gIH1cblxuICB2YXIgX2dldEFyY0NlbnRlciA9IGdldEFyY0NlbnRlcihweCwgcHksIGN4LCBjeSwgcngsIHJ5LCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZywgc2lucGhpLCBjb3NwaGksIHB4cCwgcHlwKSxcbiAgICAgIF9nZXRBcmNDZW50ZXIyID0gX3NsaWNlZFRvQXJyYXkoX2dldEFyY0NlbnRlciwgNCksXG4gICAgICBjZW50ZXJ4ID0gX2dldEFyY0NlbnRlcjJbMF0sXG4gICAgICBjZW50ZXJ5ID0gX2dldEFyY0NlbnRlcjJbMV0sXG4gICAgICBhbmcxID0gX2dldEFyY0NlbnRlcjJbMl0sXG4gICAgICBhbmcyID0gX2dldEFyY0NlbnRlcjJbM107XG5cbiAgLy8gSWYgJ2FuZzInID09IDkwLjAwMDAwMDAwMDEsIHRoZW4gYHJhdGlvYCB3aWxsIGV2YWx1YXRlIHRvXG4gIC8vIDEuMDAwMDAwMDAwMS4gVGhpcyBjYXVzZXMgYHNlZ21lbnRzYCB0byBiZSBncmVhdGVyIHRoYW4gb25lLCB3aGljaCBpcyBhblxuICAvLyB1bmVjZXNzYXJ5IHNwbGl0LCBhbmQgYWRkcyBleHRyYSBwb2ludHMgdG8gdGhlIGJlemllciBjdXJ2ZS4gVG8gYWxsZXZpYXRlXG4gIC8vIHRoaXMgaXNzdWUsIHdlIHJvdW5kIHRvIDEuMCB3aGVuIHRoZSByYXRpbyBpcyBjbG9zZSB0byAxLjAuXG5cblxuICB2YXIgcmF0aW8gPSBNYXRoLmFicyhhbmcyKSAvIChUQVUgLyA0KTtcbiAgaWYgKE1hdGguYWJzKDEuMCAtIHJhdGlvKSA8IDAuMDAwMDAwMSkge1xuICAgIHJhdGlvID0gMS4wO1xuICB9XG5cbiAgdmFyIHNlZ21lbnRzID0gTWF0aC5tYXgoTWF0aC5jZWlsKHJhdGlvKSwgMSk7XG5cbiAgYW5nMiAvPSBzZWdtZW50cztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnRzOyBpKyspIHtcbiAgICBjdXJ2ZXMucHVzaChhcHByb3hVbml0QXJjKGFuZzEsIGFuZzIpKTtcbiAgICBhbmcxICs9IGFuZzI7XG4gIH1cblxuICByZXR1cm4gY3VydmVzLm1hcChmdW5jdGlvbiAoY3VydmUpIHtcbiAgICB2YXIgX21hcFRvRWxsaXBzZSA9IG1hcFRvRWxsaXBzZShjdXJ2ZVswXSwgcngsIHJ5LCBjb3NwaGksIHNpbnBoaSwgY2VudGVyeCwgY2VudGVyeSksXG4gICAgICAgIHgxID0gX21hcFRvRWxsaXBzZS54LFxuICAgICAgICB5MSA9IF9tYXBUb0VsbGlwc2UueTtcblxuICAgIHZhciBfbWFwVG9FbGxpcHNlMiA9IG1hcFRvRWxsaXBzZShjdXJ2ZVsxXSwgcngsIHJ5LCBjb3NwaGksIHNpbnBoaSwgY2VudGVyeCwgY2VudGVyeSksXG4gICAgICAgIHgyID0gX21hcFRvRWxsaXBzZTIueCxcbiAgICAgICAgeTIgPSBfbWFwVG9FbGxpcHNlMi55O1xuXG4gICAgdmFyIF9tYXBUb0VsbGlwc2UzID0gbWFwVG9FbGxpcHNlKGN1cnZlWzJdLCByeCwgcnksIGNvc3BoaSwgc2lucGhpLCBjZW50ZXJ4LCBjZW50ZXJ5KSxcbiAgICAgICAgeCA9IF9tYXBUb0VsbGlwc2UzLngsXG4gICAgICAgIHkgPSBfbWFwVG9FbGxpcHNlMy55O1xuXG4gICAgcmV0dXJuIHsgeDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkyLCB4OiB4LCB5OiB5IH07XG4gIH0pO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gYXJjVG9CZXppZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDsiLCJ2YXIgYmV6aWVyID0gcmVxdWlyZSgnYWRhcHRpdmUtYmV6aWVyLWN1cnZlJylcbnZhciBhYnMgPSByZXF1aXJlKCdhYnMtc3ZnLXBhdGgnKVxudmFyIG5vcm0gPSByZXF1aXJlKCdub3JtYWxpemUtc3ZnLXBhdGgnKVxudmFyIGNvcHkgPSByZXF1aXJlKCd2ZWMyLWNvcHknKVxuXG5mdW5jdGlvbiBzZXQob3V0LCB4LCB5KSB7XG4gICAgb3V0WzBdID0geFxuICAgIG91dFsxXSA9IHlcbiAgICByZXR1cm4gb3V0XG59XG5cbnZhciB0bXAxID0gWzAsMF0sXG4gICAgdG1wMiA9IFswLDBdLFxuICAgIHRtcDMgPSBbMCwwXVxuXG5mdW5jdGlvbiBiZXppZXJUbyhwb2ludHMsIHNjYWxlLCBzdGFydCwgc2VnKSB7XG4gICAgYmV6aWVyKHN0YXJ0LCBcbiAgICAgICAgc2V0KHRtcDEsIHNlZ1sxXSwgc2VnWzJdKSwgXG4gICAgICAgIHNldCh0bXAyLCBzZWdbM10sIHNlZ1s0XSksXG4gICAgICAgIHNldCh0bXAzLCBzZWdbNV0sIHNlZ1s2XSksIHNjYWxlLCBwb2ludHMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29udG91cnMoc3ZnLCBzY2FsZSkge1xuICAgIHZhciBwYXRocyA9IFtdXG5cbiAgICB2YXIgcG9pbnRzID0gW11cbiAgICB2YXIgcGVuID0gWzAsIDBdXG4gICAgbm9ybShhYnMoc3ZnKSkuZm9yRWFjaChmdW5jdGlvbihzZWdtZW50LCBpLCBzZWxmKSB7XG4gICAgICAgIGlmIChzZWdtZW50WzBdID09PSAnTScpIHtcbiAgICAgICAgICAgIGNvcHkocGVuLCBzZWdtZW50LnNsaWNlKDEpKVxuICAgICAgICAgICAgaWYgKHBvaW50cy5sZW5ndGg+MCkge1xuICAgICAgICAgICAgICAgIHBhdGhzLnB1c2gocG9pbnRzKVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2VnbWVudFswXSA9PT0gJ0MnKSB7XG4gICAgICAgICAgICBiZXppZXJUbyhwb2ludHMsIHNjYWxlLCBwZW4sIHNlZ21lbnQpXG4gICAgICAgICAgICBzZXQocGVuLCBzZWdtZW50WzVdLCBzZWdtZW50WzZdKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbGxlZ2FsIHR5cGUgaW4gU1ZHOiAnK3NlZ21lbnRbMF0pXG4gICAgICAgIH1cbiAgICB9KVxuICAgIGlmIChwb2ludHMubGVuZ3RoPjApXG4gICAgICAgIHBhdGhzLnB1c2gocG9pbnRzKVxuICAgIHJldHVybiBwYXRoc1xufSIsIlxudmFyIM+AID0gTWF0aC5QSVxudmFyIF8xMjAgPSByYWRpYW5zKDEyMClcblxubW9kdWxlLmV4cG9ydHMgPSBub3JtYWxpemVcblxuLyoqXG4gKiBkZXNjcmliZSBgcGF0aGAgaW4gdGVybXMgb2YgY3ViaWMgYsOpemllciBcbiAqIGN1cnZlcyBhbmQgbW92ZSBjb21tYW5kc1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGhcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoKXtcblx0Ly8gaW5pdCBzdGF0ZVxuXHR2YXIgcHJldlxuXHR2YXIgcmVzdWx0ID0gW11cblx0dmFyIGJlemllclggPSAwXG5cdHZhciBiZXppZXJZID0gMFxuXHR2YXIgc3RhcnRYID0gMFxuXHR2YXIgc3RhcnRZID0gMFxuXHR2YXIgcXVhZFggPSBudWxsXG5cdHZhciBxdWFkWSA9IG51bGxcblx0dmFyIHggPSAwXG5cdHZhciB5ID0gMFxuXG5cdGZvciAodmFyIGkgPSAwLCBsZW4gPSBwYXRoLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0dmFyIHNlZyA9IHBhdGhbaV1cblx0XHR2YXIgY29tbWFuZCA9IHNlZ1swXVxuXHRcdHN3aXRjaCAoY29tbWFuZCkge1xuXHRcdFx0Y2FzZSAnTSc6XG5cdFx0XHRcdHN0YXJ0WCA9IHNlZ1sxXVxuXHRcdFx0XHRzdGFydFkgPSBzZWdbMl1cblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ0EnOlxuXHRcdFx0XHRzZWcgPSBhcmMoeCwgeSxzZWdbMV0sc2VnWzJdLHJhZGlhbnMoc2VnWzNdKSxzZWdbNF0sc2VnWzVdLHNlZ1s2XSxzZWdbN10pXG5cdFx0XHRcdC8vIHNwbGl0IG11bHRpIHBhcnRcblx0XHRcdFx0c2VnLnVuc2hpZnQoJ0MnKVxuXHRcdFx0XHRpZiAoc2VnLmxlbmd0aCA+IDcpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChzZWcuc3BsaWNlKDAsIDcpKVxuXHRcdFx0XHRcdHNlZy51bnNoaWZ0KCdDJylcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnUyc6XG5cdFx0XHRcdC8vIGRlZmF1bHQgY29udHJvbCBwb2ludFxuXHRcdFx0XHR2YXIgY3ggPSB4XG5cdFx0XHRcdHZhciBjeSA9IHlcblx0XHRcdFx0aWYgKHByZXYgPT0gJ0MnIHx8IHByZXYgPT0gJ1MnKSB7XG5cdFx0XHRcdFx0Y3ggKz0gY3ggLSBiZXppZXJYIC8vIHJlZmxlY3QgdGhlIHByZXZpb3VzIGNvbW1hbmQncyBjb250cm9sXG5cdFx0XHRcdFx0Y3kgKz0gY3kgLSBiZXppZXJZIC8vIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvaW50XG5cdFx0XHRcdH1cblx0XHRcdFx0c2VnID0gWydDJywgY3gsIGN5LCBzZWdbMV0sIHNlZ1syXSwgc2VnWzNdLCBzZWdbNF1dXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdUJzpcblx0XHRcdFx0aWYgKHByZXYgPT0gJ1EnIHx8IHByZXYgPT0gJ1QnKSB7XG5cdFx0XHRcdFx0cXVhZFggPSB4ICogMiAtIHF1YWRYIC8vIGFzIHdpdGggJ1MnIHJlZmxlY3QgcHJldmlvdXMgY29udHJvbCBwb2ludFxuXHRcdFx0XHRcdHF1YWRZID0geSAqIDIgLSBxdWFkWVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1YWRYID0geFxuXHRcdFx0XHRcdHF1YWRZID0geVxuXHRcdFx0XHR9XG5cdFx0XHRcdHNlZyA9IHF1YWRyYXRpYyh4LCB5LCBxdWFkWCwgcXVhZFksIHNlZ1sxXSwgc2VnWzJdKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnUSc6XG5cdFx0XHRcdHF1YWRYID0gc2VnWzFdXG5cdFx0XHRcdHF1YWRZID0gc2VnWzJdXG5cdFx0XHRcdHNlZyA9IHF1YWRyYXRpYyh4LCB5LCBzZWdbMV0sIHNlZ1syXSwgc2VnWzNdLCBzZWdbNF0pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdMJzpcblx0XHRcdFx0c2VnID0gbGluZSh4LCB5LCBzZWdbMV0sIHNlZ1syXSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ0gnOlxuXHRcdFx0XHRzZWcgPSBsaW5lKHgsIHksIHNlZ1sxXSwgeSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ1YnOlxuXHRcdFx0XHRzZWcgPSBsaW5lKHgsIHksIHgsIHNlZ1sxXSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ1onOlxuXHRcdFx0XHRzZWcgPSBsaW5lKHgsIHksIHN0YXJ0WCwgc3RhcnRZKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdC8vIHVwZGF0ZSBzdGF0ZVxuXHRcdHByZXYgPSBjb21tYW5kXG5cdFx0eCA9IHNlZ1tzZWcubGVuZ3RoIC0gMl1cblx0XHR5ID0gc2VnW3NlZy5sZW5ndGggLSAxXVxuXHRcdGlmIChzZWcubGVuZ3RoID4gNCkge1xuXHRcdFx0YmV6aWVyWCA9IHNlZ1tzZWcubGVuZ3RoIC0gNF1cblx0XHRcdGJlemllclkgPSBzZWdbc2VnLmxlbmd0aCAtIDNdXG5cdFx0fSBlbHNlIHtcblx0XHRcdGJlemllclggPSB4XG5cdFx0XHRiZXppZXJZID0geVxuXHRcdH1cblx0XHRyZXN1bHQucHVzaChzZWcpXG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGxpbmUoeDEsIHkxLCB4MiwgeTIpe1xuXHRyZXR1cm4gWydDJywgeDEsIHkxLCB4MiwgeTIsIHgyLCB5Ml1cbn1cblxuZnVuY3Rpb24gcXVhZHJhdGljKHgxLCB5MSwgY3gsIGN5LCB4MiwgeTIpe1xuXHRyZXR1cm4gW1xuXHRcdCdDJyxcblx0XHR4MS8zICsgKDIvMykgKiBjeCxcblx0XHR5MS8zICsgKDIvMykgKiBjeSxcblx0XHR4Mi8zICsgKDIvMykgKiBjeCxcblx0XHR5Mi8zICsgKDIvMykgKiBjeSxcblx0XHR4Mixcblx0XHR5MlxuXHRdXG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgcmlwcGVkIGZyb20gXG4vLyBnaXRodWIuY29tL0RtaXRyeUJhcmFub3Zza2l5L3JhcGhhZWwvYmxvYi80ZDk3ZDQvcmFwaGFlbC5qcyNMMjIxNi1MMjMwNCBcbi8vIHdoaWNoIHJlZmVyZW5jZXMgdzMub3JnL1RSL1NWRzExL2ltcGxub3RlLmh0bWwjQXJjSW1wbGVtZW50YXRpb25Ob3Rlc1xuLy8gVE9ETzogbWFrZSBpdCBodW1hbiByZWFkYWJsZVxuXG5mdW5jdGlvbiBhcmMoeDEsIHkxLCByeCwgcnksIGFuZ2xlLCBsYXJnZV9hcmNfZmxhZywgc3dlZXBfZmxhZywgeDIsIHkyLCByZWN1cnNpdmUpIHtcblx0aWYgKCFyZWN1cnNpdmUpIHtcblx0XHR2YXIgeHkgPSByb3RhdGUoeDEsIHkxLCAtYW5nbGUpXG5cdFx0eDEgPSB4eS54XG5cdFx0eTEgPSB4eS55XG5cdFx0eHkgPSByb3RhdGUoeDIsIHkyLCAtYW5nbGUpXG5cdFx0eDIgPSB4eS54XG5cdFx0eTIgPSB4eS55XG5cdFx0dmFyIHggPSAoeDEgLSB4MikgLyAyXG5cdFx0dmFyIHkgPSAoeTEgLSB5MikgLyAyXG5cdFx0dmFyIGggPSAoeCAqIHgpIC8gKHJ4ICogcngpICsgKHkgKiB5KSAvIChyeSAqIHJ5KVxuXHRcdGlmIChoID4gMSkge1xuXHRcdFx0aCA9IE1hdGguc3FydChoKVxuXHRcdFx0cnggPSBoICogcnhcblx0XHRcdHJ5ID0gaCAqIHJ5XG5cdFx0fVxuXHRcdHZhciByeDIgPSByeCAqIHJ4XG5cdFx0dmFyIHJ5MiA9IHJ5ICogcnlcblx0XHR2YXIgayA9IChsYXJnZV9hcmNfZmxhZyA9PSBzd2VlcF9mbGFnID8gLTEgOiAxKVxuXHRcdFx0KiBNYXRoLnNxcnQoTWF0aC5hYnMoKHJ4MiAqIHJ5MiAtIHJ4MiAqIHkgKiB5IC0gcnkyICogeCAqIHgpIC8gKHJ4MiAqIHkgKiB5ICsgcnkyICogeCAqIHgpKSlcblx0XHRpZiAoayA9PSBJbmZpbml0eSkgayA9IDEgLy8gbmV1dHJhbGl6ZVxuXHRcdHZhciBjeCA9IGsgKiByeCAqIHkgLyByeSArICh4MSArIHgyKSAvIDJcblx0XHR2YXIgY3kgPSBrICogLXJ5ICogeCAvIHJ4ICsgKHkxICsgeTIpIC8gMlxuXHRcdHZhciBmMSA9IE1hdGguYXNpbigoKHkxIC0gY3kpIC8gcnkpLnRvRml4ZWQoOSkpXG5cdFx0dmFyIGYyID0gTWF0aC5hc2luKCgoeTIgLSBjeSkgLyByeSkudG9GaXhlZCg5KSlcblxuXHRcdGYxID0geDEgPCBjeCA/IM+AIC0gZjEgOiBmMVxuXHRcdGYyID0geDIgPCBjeCA/IM+AIC0gZjIgOiBmMlxuXHRcdGlmIChmMSA8IDApIGYxID0gz4AgKiAyICsgZjFcblx0XHRpZiAoZjIgPCAwKSBmMiA9IM+AICogMiArIGYyXG5cdFx0aWYgKHN3ZWVwX2ZsYWcgJiYgZjEgPiBmMikgZjEgPSBmMSAtIM+AICogMlxuXHRcdGlmICghc3dlZXBfZmxhZyAmJiBmMiA+IGYxKSBmMiA9IGYyIC0gz4AgKiAyXG5cdH0gZWxzZSB7XG5cdFx0ZjEgPSByZWN1cnNpdmVbMF1cblx0XHRmMiA9IHJlY3Vyc2l2ZVsxXVxuXHRcdGN4ID0gcmVjdXJzaXZlWzJdXG5cdFx0Y3kgPSByZWN1cnNpdmVbM11cblx0fVxuXHQvLyBncmVhdGVyIHRoYW4gMTIwIGRlZ3JlZXMgcmVxdWlyZXMgbXVsdGlwbGUgc2VnbWVudHNcblx0aWYgKE1hdGguYWJzKGYyIC0gZjEpID4gXzEyMCkge1xuXHRcdHZhciBmMm9sZCA9IGYyXG5cdFx0dmFyIHgyb2xkID0geDJcblx0XHR2YXIgeTJvbGQgPSB5MlxuXHRcdGYyID0gZjEgKyBfMTIwICogKHN3ZWVwX2ZsYWcgJiYgZjIgPiBmMSA/IDEgOiAtMSlcblx0XHR4MiA9IGN4ICsgcnggKiBNYXRoLmNvcyhmMilcblx0XHR5MiA9IGN5ICsgcnkgKiBNYXRoLnNpbihmMilcblx0XHR2YXIgcmVzID0gYXJjKHgyLCB5MiwgcngsIHJ5LCBhbmdsZSwgMCwgc3dlZXBfZmxhZywgeDJvbGQsIHkyb2xkLCBbZjIsIGYyb2xkLCBjeCwgY3ldKVxuXHR9XG5cdHZhciB0ID0gTWF0aC50YW4oKGYyIC0gZjEpIC8gNClcblx0dmFyIGh4ID0gNCAvIDMgKiByeCAqIHRcblx0dmFyIGh5ID0gNCAvIDMgKiByeSAqIHRcblx0dmFyIGN1cnZlID0gW1xuXHRcdDIgKiB4MSAtICh4MSArIGh4ICogTWF0aC5zaW4oZjEpKSxcblx0XHQyICogeTEgLSAoeTEgLSBoeSAqIE1hdGguY29zKGYxKSksXG5cdFx0eDIgKyBoeCAqIE1hdGguc2luKGYyKSxcblx0XHR5MiAtIGh5ICogTWF0aC5jb3MoZjIpLFxuXHRcdHgyLFxuXHRcdHkyXG5cdF1cblx0aWYgKHJlY3Vyc2l2ZSkgcmV0dXJuIGN1cnZlXG5cdGlmIChyZXMpIGN1cnZlID0gY3VydmUuY29uY2F0KHJlcylcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjdXJ2ZS5sZW5ndGg7KSB7XG5cdFx0dmFyIHJvdCA9IHJvdGF0ZShjdXJ2ZVtpXSwgY3VydmVbaSsxXSwgYW5nbGUpXG5cdFx0Y3VydmVbaSsrXSA9IHJvdC54XG5cdFx0Y3VydmVbaSsrXSA9IHJvdC55XG5cdH1cblx0cmV0dXJuIGN1cnZlXG59XG5cbmZ1bmN0aW9uIHJvdGF0ZSh4LCB5LCByYWQpe1xuXHRyZXR1cm4ge1xuXHRcdHg6IHggKiBNYXRoLmNvcyhyYWQpIC0geSAqIE1hdGguc2luKHJhZCksXG5cdFx0eTogeCAqIE1hdGguc2luKHJhZCkgKyB5ICogTWF0aC5jb3MocmFkKVxuXHR9XG59XG5cbmZ1bmN0aW9uIHJhZGlhbnMoZGVncmVzcyl7XG5cdHJldHVybiBkZWdyZXNzICogKM+AIC8gMTgwKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB2ZWMyQ29weShvdXQsIGEpIHtcbiAgICBvdXRbMF0gPSBhWzBdXG4gICAgb3V0WzFdID0gYVsxXVxuICAgIHJldHVybiBvdXRcbn0iLCJjb25zdCBjYW52YXNTa2V0Y2ggPSByZXF1aXJlKCdjYW52YXMtc2tldGNoJyk7XG5jb25zdCB7IHJhbmRvbSwgbWF0aCB9ID0gcmVxdWlyZSgnY2FudmFzLXNrZXRjaC11dGlsJyk7XG5jb25zdCBUd2Vha3BhbmUgPSByZXF1aXJlKCd0d2Vha3BhbmUnKTtcbmNvbnN0IGNvbG9ybWFwID0gcmVxdWlyZSgnY29sb3JtYXAnKTtcbmNvbnN0IHsgY29sb3JDb2RlcyB9ID0gcmVxdWlyZSgnLi4vdXRpbC9jb2xvckNvZGVzJyk7XG5jb25zdCB7IGdldFJhbmRvbUNvbG91ciB9ID0gcmVxdWlyZSgnLi4vdXRpbC9jb2xvckNvZGVzJyk7XG5cbi8vIFNRVUFSRSBHUklEIE9GIFBBUlRJQ0xFU1xuLy8gbnB4IGNhbnZhcy1za2V0Y2ggc2tldGNoZXMvc2tldGNoLWdyaWQtcGFydGljbGUtY29sb3VyLWZ1bmsudHMgLS1vcGVuIC0tb3V0cHV0PW91dHB1dC9mdW5rIC0tc3RyZWFtIC0tb3BlblxuXG5jb25zdCBzZXR0aW5ncyA9IHtcbiAgZGltZW5zaW9uczogWzEwODAsIDEwODBdLFxuICBhbmltYXRlOiB0cnVlXG59O1xuXG5jb25zdCBwYXJhbXMgPSB7XG4gIGNvbHM6IDMwLFxuICByb3dzOiAzMCxcbiAgc2NhbGVNaW46IDAuMDEsXG4gIHNjYWxlTWF4OiAyMS43NSxcbiAgZnJlcTogMC4wMDIsXG4gIGFtcDogMC4yLFxuICBhbmltYXRlOiB0cnVlLFxuICBmcmFtZTogMCwgLy8gb25seSB1c2VkIHdoZW4gYW5pbWF0ZSBpcyBmYWxzZVxuICBsaW5lQ2FwOiAncm91bmQnLFxuICBhbmltYXRlVGhpY2tuZXNzOiB0cnVlLFxuICBtYW51YWxUaGlja25lc3M6IDEsIC8vIG9ubHkgdXNlZCB3aGVuIGFuaW1hdGVUaGlja25lc3MgaXMgZmFsc2VcbiAgc2hhcGU6ICdjaXJjbGUnLFxuICBiYWNrZ3JvdW5kQ29sb3VyOiAnYmxhY2snLFxuICBwYXJ0aWNsZUNvbG91cjogJ3doaXRlJyxcbn07XG5cbmxldCByYW5kb0NvbG91ciA9IGdldFJhbmRvbUNvbG91cihjb2xvckNvZGVzKTtcbmNvbnNvbGUubG9nKCdjb2xvdXIgY29kZTonLCByYW5kb0NvbG91cik7XG5cbi8vIFdhdmUtcG93ZXJcbmNvbnN0IHNrZXRjaCA9ICgpID0+IHtcbiAgcmV0dXJuICh7IGNvbnRleHQsIHdpZHRoLCBoZWlnaHQsIGZyYW1lIH0pID0+IHtcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHBhcmFtcy5iYWNrZ3JvdW5kQ29sb3VyO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICBjb25zdCBjb2xzID0gcGFyYW1zLmNvbHM7XG4gICAgY29uc3Qgcm93cyA9IHBhcmFtcy5yb3dzO1xuICAgIGNvbnN0IG51bUNlbGxzID0gY29scyAqIHJvd3M7XG5cbiAgICBjb25zdCBncmlkdyA9IHdpZHRoICogMC44O1xuICAgIGNvbnN0IGdyaWRoID0gaGVpZ2h0ICogMC44O1xuICAgIGNvbnN0IGNlbGx3ID0gZ3JpZHcgLyBjb2xzO1xuICAgIGNvbnN0IGNlbGxoID0gZ3JpZGggLyByb3dzO1xuICAgIGNvbnN0IG1hcmd4ID0gKHdpZHRoIC0gZ3JpZHcpICogMC41O1xuICAgIGNvbnN0IG1hcmd5ID0gKGhlaWdodCAtIGdyaWRoKSAqIDAuNTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ2VsbHM7IGkrKykge1xuICAgICAgY29uc3QgY29sID0gaSAlIGNvbHM7IC8vIDAsMSwyLDMgLy8gaW5zdGVhZCBvZiBsb29waW5nIG92ZXIgMm5kIGdyaWRcbiAgICAgIGNvbnN0IHJvdyA9IE1hdGguZmxvb3IoaSAvIGNvbHMpO1xuXG4gICAgICBjb25zdCB4ID0gY29sICogY2VsbHc7XG4gICAgICBjb25zdCB5ID0gcm93ICogY2VsbGg7XG5cbiAgICAgIC8vIG1ha2luZyB0aGUgbGluZSBhIGxpdHRsZSBiaXQgbGVzcyB0aGFuIHRoZSBjZWxsXG4gICAgICBjb25zdCB3ID0gY2VsbHcgKiAwLjg7XG4gICAgICBjb25zdCBoID0gY2VsbGggKiAwLjg7XG5cbiAgICAgIGNvbnN0IGYgPSBwYXJhbXMuYW5pbWF0ZSA/IGZyYW1lIDogcGFyYW1zLmZyYW1lOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGZyYW1lIGlmIGl0J3MgYW5pbWF0aW5nXG5cbiAgICAgIC8vIEFuZ2xlIG9mIHJvdGF0aW9uIG9mIGxpbmVzXG4gICAgICBjb25zdCBuID0gcmFuZG9tLm5vaXNlM0QoeCwgeSwgZiAqIDEwLCBwYXJhbXMuZnJlcSk7IC8vIDAuMDAxIGZyZXF1ZW5jeSBtYWtlcyBpdCBsZXNzIGNoYW90aWMgXG4gICAgICBjb25zdCBhbmdsZSA9IG4gKiBNYXRoLlBJICogcGFyYW1zLmFtcDsgLy8gMC4yIGNhbG0gdGhlIGFuZ2xlXG5cbiAgICAgIC8vIExpbmUgdGhpY2tuZXNzIGNhbGxlZCBzY2FsZVxuICAgICAgLy8gY29uc3Qgc2NhbGUgPSAobiowLjUrMC41KSAqIDMwO1xuICAgICAgY29uc3QgbWFudWFsVGhpY2tuZXNzID0gcGFyYW1zLm1hbnVhbFRoaWNrbmVzcyB8fCBwYXJhbXMuc2NhbGVNaW47XG4gICAgICBjb25zdCB0aGlja25lc3MgPSBwYXJhbXMuYW5pbWF0ZVRoaWNrbmVzc1xuICAgICAgICA/IG1hdGgubWFwUmFuZ2UobiwgLTEsIDEsIHBhcmFtcy5zY2FsZU1pbiwgcGFyYW1zLnNjYWxlTWF4KVxuICAgICAgICA6IG1hbnVhbFRoaWNrbmVzcztcblxuICAgICAgLy8gY29uc29sZS5sb2coeyB0aGlja25lc3MgfSk7XG5cbiAgICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgICAgY29udGV4dC50cmFuc2xhdGUoeCwgeSk7IC8vIG1vdmUgdG8gdGhlIGNlbGxcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKG1hcmd4LCBtYXJneSk7IC8vIGNvbXBlbnNhdGUgZm9yIG1hcmdpblxuICAgICAgY29udGV4dC50cmFuc2xhdGUoY2VsbHcgKiAwLjUsIGNlbGxoICogMC41KTsgLy8gZ2V0IGNlbnRyZSBvZiBjZWxsXG4gICAgICBjb250ZXh0LnJvdGF0ZShhbmdsZSk7XG5cbiAgICAgIC8vIFRPRE8gaW5zdGVhZCBvZiBhbmltYXRpbmcgbGluZXdpZHRoLCBoYXZlIGVhY2ggY2VsbFxuICAgICAgLy8gZGlzcGxheSBzb21lIHByb2dyZXNzaXZlIGFuaW1hdGlvbiBsaWtlIHRoZSBlZmZlY3Qgb2ZcbiAgICAgIC8vIGluY3JlYXNpbmcgdGhlIGxpbmUgb2Zmc2V0IHNsb3dseSBpbiBhbiBTVkdcbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gdGhpY2tuZXNzO1xuICAgICAgY29udGV4dC5saW5lSm9pbiA9ICdyb3VuZCc7IC8vJ21pdGVyIHwgYmV2ZWwgfCByb3VuZCc7XG4gICAgICBjb250ZXh0LmxpbmVDYXAgPSBwYXJhbXMubGluZUNhcDtcblxuICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgLy8gVE9ETzogU2V0IHBhcnRpY2xlIGNvbG91ciBoZWF0IG1hcCB1c2luZyBub2lzZSB2YWx1ZXMgXG5cbiAgICAgIC8vIE1hcCBkYXRhIHRvIGNvbG91cnNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlja25lc3MgYmVmb3JlJywgdGhpY2tuZXNzKTtcbiAgICAgIC8vIFdoYXQgY29sb3VycyBkbyBJIHVzZVxuXG4gICAgICBjb25zdCBjb2xvcnMgPSBjb2xvcm1hcCh7XG4gICAgICAgIGNvbG9ybWFwOiBwYXJhbXMucGFydGljbGVDb2xvdXIgfHwgcmFuZG9Db2xvdXIsIC8vIGNvbG9yQ29kZXMucGxhc21hLFxuICAgICAgICBuc2hhZGVzOiA3MiwgLy8gdGhpY2tuZXNzLCAvLyB3aGF0IHNob3VsZCBudW1iZXIgb2Ygc2hhZGVzIGJlXG4gICAgICB9KVxuXG4gICAgICAvLyBERERERE9DU1xuICAgICAgLy8gbWFwUmFuZ2UodmFsdWUsIGlucHV0TWluLCBpbnB1dE1heCwgb3VwdHV0TWluLCBvdXRwdXRNYXgsIGNsYW1wID0gZmFsc2UpXG4gICAgICAvLyBtYXBSYW5nZSh0aGlja25lc3MsIDQsIHRoaWNrbmVzcywgNCwgdGhpY2tuZXNzKSldXG5cbiAgICAgIGxldCBjb2xvciA9IGNvbG9yc1tNYXRoLmZsb29yKCAvLyBNQUtFIFBMQVNNQSBGVU5LIFdJVEggSE9MRVNcbiAgICAgICAgbWF0aC5tYXBSYW5nZSh0aGlja25lc3MsIDQsIHRoaWNrbmVzcywgNCwgdGhpY2tuZXNzICogNCkpXTtcbiAgICAgIC8vIG1hdGgubWFwUmFuZ2UodGhpY2tuZXNzLCA0LCB0aGlja25lc3MsIDQsIHRoaWNrbmVzcyAqIDMpKV07XG4gICAgICAvLyBeIEdFTlRMRSBQTEFTTUEgRlVOS1xuICAgICAgLy8gYm9uZSBtYXAgcmVxdWlyZXMgbnNoYWRlcyB0byBiZSBhdCBsZWFzdCBzaXplIDRcblxuICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGNvbG9yIC8vIHx8IHBhcmFtcy5wYXJ0aWNsZUNvbG91cjsgLy8gcGFyYW1zLnBhcnRpY2xlQ29sb3VyO1xuXG4gICAgICBzd2l0Y2ggKHBhcmFtcy5zaGFwZSkge1xuICAgICAgICBjYXNlICdsaW5lJzpcbiAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh3ICogLTAuNSwgMCk7IC8vIGRyYXdpbmcgYSBsaW5lIHN0YXJ0aW5nIGF0IDAuNSBvZiB3aWR0aCBtb3ZpbmcgbGVmdFxuICAgICAgICAgIGNvbnRleHQubGluZVRvKHcgKiAwLjUsIDApO1xuICAgICAgICAgIC8vIGNvbnRleHQubGluZVRvKHcsIDApO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NpcmNsZSc6XG4gICAgICAgICAgY29uc3QgcmFkaXVzID0gMTtcbiAgICAgICAgICBjb25zdCBzbGljZSA9IDE7XG4gICAgICAgICAgY29udGV4dC5hcmMoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHJhZGl1cyAqIDEsIC8vIHJhZGl1c1xuICAgICAgICAgICAgc2xpY2UgKiAxLCAvLyBzdGFydCBhbmdsZVxuICAgICAgICAgICAgc2xpY2UgKiAtMC4zKTsgLy8gZW5kIGFuZ2xlIC8vIFdpbGwgbWFrZSBhcmNzIGxpa2UgZGFzaG9mZnNldFxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVQYW5lID0gKCkgPT4ge1xuICBjb25zdCBwYW5lID0gbmV3IFR3ZWFrcGFuZS5QYW5lKCk7XG4gIGxldCBmb2xkZXI7XG5cbiAgZm9sZGVyID0gcGFuZS5hZGRGb2xkZXIoeyB0aXRsZTogJ0dyaWQnIH0pXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdsaW5lQ2FwJywgeyBvcHRpb25zOiB7IGJ1dHQ6ICdidXR0Jywgcm91bmQ6ICdyb3VuZCcsIHNxdWFyZTogJ3NxdWFyZScgfSB9KVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnY29scycsIHsgbWluOiAyLCBtYXg6IDUwLCBzdGVwOiAxIH0pXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdyb3dzJywgeyBtaW46IDIsIG1heDogNTAsIHN0ZXA6IDEgfSlcbiAgZm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ3NjYWxlTWluJywgeyBtaW46IDAuMDEsIG1heDogMjAwIH0pXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdzY2FsZU1heCcsIHsgbWluOiAwLjAxLCBtYXg6IDIwMCB9KVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnYW5pbWF0ZVRoaWNrbmVzcycpXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdtYW51YWxUaGlja25lc3MnLCB7IG1pbjogMSwgbWF4OiAzMCB9KVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnc2hhcGUnLCB7IG9wdGlvbnM6IHsgbGluZTogJ2xpbmUnLCBjaXJjbGU6ICdjaXJjbGUnIH0gfSlcblxuICAvLyBUT0RPIGFkZCB0aGVzZSBhcyB0ZXh0XG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdiYWNrZ3JvdW5kQ29sb3VyJylcbiAgLy8gZm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ3BhcnRpY2xlQ29sb3VyJylcbiAgZm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ3BhcnRpY2xlQ29sb3VyJywgeyBvcHRpb25zOiB7IC4uLmNvbG9yQ29kZXMgfSB9KVxuXG4gIGZvbGRlciA9IHBhbmUuYWRkRm9sZGVyKHsgdGl0bGU6ICdOb2lzZScgfSlcbiAgZm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ2ZyZXEnLCB7IG1pbjogLTAuMDEsIG1heDogMC4wMSB9KVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnYW1wJywgeyBtaW46IDAsIG1heDogMSB9KVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnYW5pbWF0ZScpXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdmcmFtZScsIHsgbWluOiAwLCBtYXg6IDk5OSB9KVxufTtcblxuY29uc3Qgc2V0QmFja2dyb3VuZCA9ICgpID0+IHtcbiAgbGV0IGNzcyA9XG4gICAgJ2JvZHkgeyBiYWNrZ3JvdW5kOiBibGFjazsgfSc7XG4gIGxldCBoZWFkID0gZG9jdW1lbnQuaGVhZFxuICBsZXQgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpXG4gIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbn1cblxuLy8gY29uc3QgZ2V0UmFuZG9Db2xvdXIgPSBjb2xvckNvZGVzID0+IE9iamVjdC5rZXlzKGNvbG9yQ29kZXMpWyhNYXRoLnJhbmRvbSgpICogT2JqZWN0LmtleXMoY29sb3JDb2RlcykubGVuZ3RoKSB8IDBdO1xuXG5zZXRCYWNrZ3JvdW5kKCk7XG5jcmVhdGVQYW5lKCk7XG5jYW52YXNTa2V0Y2goc2tldGNoLCBzZXR0aW5ncyk7XG4iLCJleHBvcnQgY29uc3QgY29sb3JDb2RlcyA9IHtcbiAgamV0OiAnamV0JyxcbiAgaHN2OiAnaHN2JyxcbiAgaG90OiAnaG90JyxcbiAgY29vbDogJ2Nvb2wnLFxuICBzcHJpbmc6ICdzcHJpbmcnLFxuICBzdW1tZXI6ICdzdW1tZXInLFxuICBhdXR1bW46ICdhdXR1bW4nLFxuICB3aW50ZXI6ICd3aW50ZXInLFxuICBib25lOiAnYm9uZScsXG4gIGNvcHBlcjogJ2NvcHBlcicsXG4gIGdyZXlzOiAnZ3JleXMnLFxuICBZSUduQnU6ICdZSUduQnUnLFxuICBncmVlbnM6ICdncmVlbnMnLFxuICBZSU9yUmQ6ICdZSU9yUmQnLFxuICBibHVlcmVkOiAnYmx1ZXJlZCcsXG4gIFJkQnU6ICdSZEJ1JyxcbiAgcGljbmljOiAncGljbmljJyxcbiAgcmFpbmJvdzogJ3JhaW5ib3cnLFxuICBwb3J0bGFuZDogJ3BvcnRsYW5kJyxcbiAgYmxhY2tib2R5OiAnYmxhY2tib2R5JyxcbiAgZWFydGg6ICdlYXJ0aCcsXG4gIGVsZWN0cmljOiAnZWxlY3RyaWMnLFxuICB2aXJpZGlzOiAndmlyaWRpcycsXG4gIGluZmVybm86ICdpbmZlcm5vJyxcbiAgbWFnbWE6ICdtYWdtYScsXG4gIHBsYXNtYTogJ3BsYXNtYScsXG4gIHdhcm06ICd3YXJtJyxcbiAgY29vbDogJ2Nvb2wnLFxuICByYWluYm93U29mdDogJ3JhaW5ib3ctc29mdCcsXG4gIGJhdGh5bWV0cnk6ICdiYXRoeW1ldHJ5JyxcbiAgY2RvbTogJ2Nkb20nLFxuICBjaGxvcm9waHlsbDogJ2NobG9yb3BoeWxsJyxcbiAgZGVuc2l0eTogJ2RlbnNpdHknLFxuICBmcmVlc3VyZmFjZUJsdWU6ICdmcmVlc3VyZmFjZS1ibHVlJyxcbiAgZnJlZXN1cmZhY2VSZWQ6ICdmcmVlc3VyZmFjZS1yZWQnLFxuICBveHlnZW46ICdveHlnZW4nLFxuICBwYXI6ICdwYXInLFxuICBwaGFzZTogJ3BoYXNlJyxcbiAgc2FsaW5pdHk6ICdzYWxpbml0eScsXG4gIHRlbXBlcmF0dXJlOiAndGVtcGVyYXR1cmUnLFxuICB0dXJiaWRpdHk6ICd0dXJiaWRpdHknLFxuICB2ZWxvY2l0eUJsdWU6ICd2ZWxvY2l0eS1ibHVlJyxcbiAgdmVsb2NpdHlHcmVlbjogJ3ZlbG9jaXR5LWdyZWVuJyxcbiAgY3ViZWhlbGl4OiAnY3ViZWhlbGl4Jyxcbn1cblxuZXhwb3J0IGNvbnN0IGdldFJhbmRvbUNvbG91ciA9IGNvbG9yQ29kZXMgPT4gT2JqZWN0LmtleXMoY29sb3JDb2RlcylbKE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhjb2xvckNvZGVzKS5sZW5ndGgpIHwgMF07IiwiXG5nbG9iYWwuQ0FOVkFTX1NLRVRDSF9ERUZBVUxUX1NUT1JBR0VfS0VZID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4iXX0=