pup-recorder 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import'source-map-support/register.js';import {a,b,p}from'./chunk-NKXGLDTD.js';export{x as DEFAULT_DURATION,w as DEFAULT_FPS,v as DEFAULT_HEIGHT,y as DEFAULT_OUT_FILE,u as DEFAULT_WIDTH,o as Logger,r as PUP_ARGS_KEY,z as RenderSchema,A as defaultRenderOptions,t as exec,p as logger,q as noerr,s as pargs,d as parseNumber,e as parseString,c as penv,B as pup,l as pupApp,j as pupDeterministic,h as pupDisableGPU,i as pupDisableHwCodec,m as pupIpcSocket,f as pupLogLevel,k as pupPkgRoot,g as pupUseInnerProxy,n as pupWindowTolerant}from'./chunk-NKXGLDTD.js';import {setTimeout as setTimeout$1}from'timers/promises';import {FormatContext,FFmpegError,Frame,Codec,CodecContext,Rational,FilterGraph,Filter,FilterInOut,FF_DECODER_PNG,SoftwareScaleContext,AV_PIX_FMT_YUVA420P as AV_PIX_FMT_YUVA420P$1,SWS_BILINEAR,Packet,AV_PIX_FMT_BGRA as AV_PIX_FMT_BGRA$1}from'node-av';import {FF_ENCODER_AAC,AV_SAMPLE_FMT_FLTP,FF_HWDEVICE_TYPE_VIDEOTOOLBOX,FF_HWDEVICE_TYPE_CUDA,AV_PIX_FMT_YUVA420P,FF_ENCODER_LIBX265,AV_CHANNEL_LAYOUT_STEREO,AV_CODEC_FLAG_GLOBAL_HEADER,AV_SAMPLE_FMT_FLT,AVERROR_EAGAIN,AVERROR_EOF,AV_PIX_FMT_BGRA,FF_ENCODER_HEVC_NVENC,AV_PIX_FMT_YUV420P,AVCOL_RANGE_JPEG}from'node-av/constants';import {ok}from'assert';import {HardwareContext}from'node-av/api';var q=class{constructor(e){this.makeValue=e;}makeValue;get value(){return this._initialized||(this._value=this.makeValue(),this._initialized=true),this._value}get initialized(){return this._initialized}_initialized=false;_value};var I=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,i)=>{this._queue.push({run:()=>{if(t?.aborted){i(t.reason),this.next();return}this._active++,e().then(a=>{this._active--,o(a),this.next();}).catch(a=>{this._active--,i(a),this.next();});},reject:i,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};function Y(r){return new Promise(e=>setTimeout(e,r))}function Tt(r,e){let t,o=false;async function i(a){await r(a),!o&&(t=setTimeout(()=>i(a+1),e));}return t=setTimeout(()=>i(0),e),()=>{o=true,clearTimeout(t);}}function Ot({fn:r,maxAttempts:e=3,timeout:t}){let o=new Error(`timeout over ${t}ms`);return async function(...i){let a=0;for(;;)try{let s=[r(...i)];return t&&s.push(setTimeout$1(t).then(()=>{throw o})),await Promise.race(s)}catch(s){if(a++,a>=e)throw s;await Y(Math.pow(2,a)*100+Math.random()*100);}}}var T=class{_ctx;_opened=false;constructor(e,t){this._ctx=new FormatContext,FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){this._opened||(FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}async writePacket(e){FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){this._opened&&(await this._ctx.writeTrailer(),await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose](),this._opened=false);}};async function y(r,e){let t=new CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new Rational(1,r.fps),t.framerate=new Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange);for(let[o,i]of Object.entries(r.options??{}))t.setOption(o,i);return FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function B(r,e,t){let o=new Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function _(){let r=new Packet;return r.alloc(),r}async function E(r,e,t,o){for(;;){let i=await r.receivePacket(e);if(i===AVERROR_EAGAIN||i===AVERROR_EOF)break;FFmpegError.throwIfError(i,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var Ae={[AV_SAMPLE_FMT_FLT]:"flt",[AV_SAMPLE_FMT_FLTP]:"fltp"},R=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=_(),this._filterFrame=new Frame,this._filterFrame.alloc();}static async create(e){let t=Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(o);return new r(o,i,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new FilterGraph;t.alloc();let o=Filter.getByName("abuffer"),i=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let a=Filter.getByName("abuffersink"),s=t.createFilter(a,"sink");if(!s)throw new Error("Failed to create abuffersink");let n=`aformat=sample_fmts=${Ae[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,u=FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),m=FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);FFmpegError.throwIfError(t.parsePtr(n,m,u),"graph.parsePtr"),FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let m=0;m<o.length;m++)isFinite(o[m])||(o[m]=0);let i=o.length>>1;let a$1=a(s,Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,format:AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(i);FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(a$1),"buffersrcAddFrame");await this.drain(t);}catch(c){var n=c,u=true;}finally{b(s,n,u);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===AVERROR_EAGAIN||t===AVERROR_EOF)break;FFmpegError.throwIfError(t,"buffersinkGetFrame"),FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return E(this._ctx,this._pkt,this._stream,e)}};var v=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=Codec.findDecoderByName(FF_DECODER_PNG);return ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=B(e,t,AV_PIX_FMT_BGRA$1),this.dst=B(e,t,AV_PIX_FMT_YUVA420P$1),this.pkt=_();}async png(){let e=new CodecContext;return e.allocContext3(this._png),FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=a(o,await this.png());this.pkt.data=e;FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(i){var a$1=i,s=true;}finally{b(o,a$1,s);}}get sws(){if(!this._sws){let e=new SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,AV_PIX_FMT_YUVA420P$1,SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};function L(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let i=0;i<8;i++)o=o<<1|r[t*8+i];e[t]=o;}return e}var N=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let i=0;i<o-1;i++)this.bits.push(0);for(let i=o-1;i>=0;i--)this.bits.push(t>>i&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let i=0;i<o;i++)this.bits.push(e[t+i]);}},M=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var P=Buffer.from([0,0,0,1]);function re(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,i=e&7;return {type:t,layerId:o,temporalId:i}}function W(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function C(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let i=t+o;if(i+2>r.length)break;let a=r.length;for(let n=i+2;n<r.length-2;n++)if(r[n]===0&&r[n+1]===0&&(r[n+2]===1||n+3<r.length&&r[n+2]===0&&r[n+3]===1)){a=n;break}let{type:s,layerId:c}=re(r[i],r[i+1]);e.push({type:s,layerId:c,data:r.subarray(i,a)}),t=a;}return e}function X(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=re(t[0],t[1]),[a,s]=W(o,e,i);return t[0]=a,t[1]=s,t}function oe(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function ie(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}function Me(r){let e=new M(oe(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function Le(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function Oe(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let i=0;i<e.maxSubLayersMinus1;i++)r.w(0,2);for(let i=e.maxSubLayersMinus1;i<8;i++)r.w(0,2);}r.flag(0);for(let i=0;i<16;i++)r.flag(i===2||i===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function ae(r,e,t){let o=Me(r);if(!o)return r;let i=new N;return Le(i,o),Oe(i,o,e,t),i.bits.push(1),i.align(0),ie(L(i.bits))}var De=39;function ne(r){let{baseExtradata:e,alphaExtradata:t}=r,o=C(e),i=C(t),a=new Map;for(let n of i){if(n.type===32)continue;let u=a.get(n.type)??[];u.push(n),a.set(n.type,u);}let s=[],c=new Set;for(let n of o){let u=n.type===32?ae(n.data,r.width,r.height):n.data;if(s.push(P,u),!c.has(n.type)){c.add(n.type);for(let m of a.get(n.type)??[])s.push(P,X(m.data,1));}}return s.push($()),Buffer.concat(s)}function $(){let[t,o]=W(De,0,1),i=[],a=(s,c)=>{for(let n=c-1;n>=0;n--)i.push(s>>n&1);};for(a(0,1),a(0,3),a(0,3),a(0,9),a(255,9),a(0,1),a(0,1),a(1,1);i.length%8!==0;)a(0,1);return Buffer.concat([P,Buffer.from([t,o]),Buffer.from([165,4]),L(i),Buffer.from([128])])}function se(r,e){let t=[];for(let o of r)t.push(P,o.data);for(let o of e)o.type<32&&t.push(P,X(o.data,1));return Buffer.concat(t)}var O=class r{_s;_seiBuffer;_pts=0n;_seiInjected=false;_alphaBuf;_alphaFrame;constructor(e){this._s=e,this._seiBuffer=$();}static async create(e){let{width:t,height:o,fps:i,bitrate:a,muxer:s}=e,c=Codec.findEncoderByName(FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let u={codec:c,width:t,height:o,fps:i,bitrate:a,options:{preset:"p4",bf:"0"}},m=await y({...u,pixelFormat:AV_PIX_FMT_BGRA},"nvenc.base.open2"),p=await y({...u,pixelFormat:AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),x=_(),l=_(),w=s.addStream(m,"hvc1"),V=m.extraData,S=p.extraData;return V&&S&&(w.codecpar.extradata=ne({baseExtradata:V,alphaExtradata:S,width:t,height:o})),new r({baseCtx:m,alphaCtx:p,basePkt:x,alphaPkt:l,stream:w})}async encode(e,t){let{baseCtx:o,alphaCtx:i}=this._s,a=this._pts++;e.pts=a,e.duration=1n,FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame");let s=e.data?.[0],c=e.linesize?.[0];if(!s||!c)throw new Error("encode: missing BGRA data");let n=e.width,u=e.height,m=n*u,p=(n>>1)*(u>>1);this._alphaBuf||(this._alphaBuf=Buffer.alloc(m+p*2));let x=this._alphaBuf;for(let l=0;l<u;l++)for(let w=0;w<n;w++)x[l*n+w]=s[l*c+w*4+3];x.fill(128,m,m+p*2),this._alphaFrame?.free(),this._alphaFrame=Frame.fromVideoBuffer(x,{format:AV_PIX_FMT_YUV420P,width:n,height:u}),this._alphaFrame.pts=a,this._alphaFrame.duration=1n,FFmpegError.throwIfError(await i.sendFrame(this._alphaFrame),"alpha.sendFrame"),await this.drainInterleaved(t);}async flush(e){await this._s.baseCtx.sendFrame(null),await this._s.alphaCtx.sendFrame(null),await this.drainInterleaved(e);}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:i}=this._s;e.free(),t.free(),this._alphaFrame?.free(),o.freeContext(),i.freeContext();}async drainInterleaved(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:a,stream:s}=this._s;for(;;){let c=await t.receivePacket(i),n=await o.receivePacket(a),u=c>=0,m=n>=0;if(!u&&!m)break;if(u!==m)throw new Error(`NVENC desync: base=${u}, alpha=${m}`);let p=C(i.data),x=C(a.data),l=[];this._seiInjected||(l.push(this._seiBuffer),this._seiInjected=true),l.push(se(p,x));let w=i.pts,V=i.dts,S=i.duration;i.data=Buffer.concat(l),i.pts=w,i.dts=V,i.duration=S===0n?1n:S,i.streamIndex=s.index,i.rescaleTs(t.timeBase,s.timeBase),await e.writePacket(i),i.unref(),a.unref();}}};var D=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{codecName:t,codecTag:o,codecOpts:i,muxer:a,...s}=e,c=Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let n=await y({codec:c,...s,codecTag:o,options:i},"videoCtx.open2"),u=a.addStream(n,o);return new r(n,_(),u)}async encode(e,t){e.pts=this._pts++,e.duration=1n,FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return E(this._ctx,this._pkt,this._stream,e)}};var H=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{width:t,height:o,fps:i,hw:a,bitrate:s,muxer:c}=e,n=a.getEncoderCodec("hevc");if(!n)throw new Error("hevc_videotoolbox encoder not found");let u=await y({codec:n,width:t,height:o,fps:i,bitrate:s,pixelFormat:AV_PIX_FMT_BGRA,colorRange:AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),m=c.addStream(u,"hvc1");return new r(u,_(),m)}async encode(e,t){e.pts=this._pts++,e.duration=1n,FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return E(this._ctx,this._pkt,this._stream,e)}};var G="[Encoder]";async function me(r,e){let{width:t,height:o,fps:i,bitrate:a=8e6,disableHwCodec:s=false}=r,c=s?void 0:HardwareContext.auto()??void 0;try{if(c?.deviceTypeName===FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return p.debug(G,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await H.create({width:t,height:o,fps:i,hw:c,bitrate:a,muxer:e}),hw:c};if(c?.deviceTypeName===FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return p.debug(G,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await O.create({width:t,height:o,fps:i,hw:c,bitrate:a,muxer:e}),hw:c}}catch(u){p.warn(G,"Hardware codec session limits reached, use software encoder",u);}finally{c?.dispose();}return p.debug(G,"using software libx265 HEVC alpha encoder"),c?.dispose(),{video:await D.create({width:t,height:o,fps:i,codecName:FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:a,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:e}),codec:await v.create(t,o)}}var de=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,outFile:i,withAudio:a=false}=e,s=new T(i),{video:c,hwVideo:n,codec:u,hw:m}=await me(e,s),p;return a&&(p=await R.create({outSampleRate:44100,outSampleFmt:AV_SAMPLE_FMT_FLTP,codecName:FF_ENCODER_AAC,globalHeader:true,bitrate:128e3,muxer:s})),await s.open(),new r({video:c,hwVideo:n,audio:p,muxer:s,limiter:new I(1),outFile:i,codec:u,hw:m,width:t,height:o})}setupAudio(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:a$1}=this._s;if(t){var u=[];try{let l=a(u,this.bgraFrame(e));await t.encode(l,a$1);return}catch(m){var p=m,x=true;}finally{b(u,p,x);}}let{src:s,dst:c,sws:n}=i;return ok(n,"sws not initialized"),FFmpegError.throwIfError(s.makeWritable(),"bgraSrc.makeWritable"),FFmpegError.throwIfError(s.fromBuffer(e),"bgraSrc.fromBuffer"),FFmpegError.throwIfError(c.makeWritable(),"bgraDst.makeWritable"),FFmpegError.throwIfError(await n.scaleFrame(c,s),"bgraSws.scaleFrame"),o.encode(c,a$1)});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:a,width:s,height:c}=this._s,n=i??await v.create(s,c);try{let u=await n.decodePNG(e);t?await t.encode(u,a):(FFmpegError.throwIfError(n.dst.makeWritable(),"pngDst.makeWritable"),FFmpegError.throwIfError(await n.sws.scaleFrame(n.dst,u),"pngSws.scaleFrame"),await o.encode(n.dst,a));}finally{i||n[Symbol.dispose]();}});}async encodeAudio(e){let{audio:t,limiter:o,muxer:i}=this._s;t&&await o.schedule(()=>t.encode(e,i));}async finish(){let{video:e,hwVideo:t,audio:o,muxer:i,limiter:a$1}=this._s;try{var s=[];try{let p=a(s,i,!0);let x=a(s,e);let l=a(s,t);let w=a(s,o);await a$1.drain();await o?.flush(i);t?await t.flush(i):await e.flush(i);}catch(c){var n=c,u=!0;}finally{var m=b(s,n,u);m&&await m;}}finally{this.free();}return this._s.outFile}async[Symbol.asyncDispose](){if(this._disposed)return;let{video:e,hwVideo:t,audio:o,muxer:i,limiter:a}=this._s;await a.drain(),e?.[Symbol.dispose](),t?.[Symbol.dispose](),o?.[Symbol.dispose](),await i[Symbol.asyncDispose](),this.free();}free(){var t=[];try{if(this._disposed)return;this._disposed=!0;let e=a(t,this._s.codec);this._s.hw?.dispose();}catch(o){var i=o,a$1=true;}finally{b(t,i,a$1);}}bgraFrame(e){let t=B(this._s.width,this._s.height,AV_PIX_FMT_BGRA);return FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};export{I as ConcurrencyLimiter,de as EncoderPipeline,T as FormatMuxer,q as Lazy,Tt as periodical,Y as sleep,Ot as useRetry};//# sourceMappingURL=index.js.map
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2xhenkudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9hdWRpby50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbmFsLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92cHMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvcGlwZWxpbmUudHMiXSwibmFtZXMiOlsiTGF6eSIsIm1ha2VWYWx1ZSIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwiZm4iLCJzaWduYWwiLCJyZXNvbHZlIiwicmVqZWN0IiwidiIsImUiLCJyIiwia2VlcCIsImVudHJ5Iiwic2xlZXAiLCJtcyIsInBlcmlvZGljYWwiLCJjYWxsYmFjayIsInRva2VuIiwiY2xvc2VkIiwidGljayIsImNvdW50IiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXQiLCJ0aW1lb3V0RXJyb3IiLCJhcmdzIiwiYXR0ZW1wdCIsInByb21pc2VzIiwic2V0VGltZW91dCIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiRkZtcGVnRXJyb3IiLCJjb2RlY0N0eCIsImNvZGVjVGFnIiwic3RyZWFtIiwicGt0Iiwib3BlblZpZGVvQ3R4Iiwib3B0cyIsImxhYmVsIiwiY3R4IiwiQ29kZWNDb250ZXh0IiwiUmF0aW9uYWwiLCJBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIiLCJrIiwibWFrZUZyYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsImNvZGVjIiwiQ29kZWMiLCJBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8iLCJpblNhbXBsZVJhdGUiLCJncmFwaCIsIkZpbHRlckdyYXBoIiwiYWJ1ZmZlciIsIkZpbHRlciIsImJ1ZlNyYyIsImFidWZmZXJzaW5rIiwiYnVmU2luayIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJfc3RhY2siLCJzcmMiLCJpIiwiblNhbXBsZXMiLCJfX3VzaW5nIiwiXyIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJDb2RlY1N0YXRlIiwiX0NvZGVjU3RhdGUiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiZGF0YSIsInplcm9zIiwiQU5ORVhfQl9TVEFSVF9DT0RFIiwicGFyc2VOYWxUeXBlIiwiaGVhZGVyMCIsImhlYWRlcjEiLCJ0eXBlIiwibGF5ZXJJZCIsInRlbXBvcmFsSWQiLCJlbmNvZGVOYWxIZWFkZXIiLCJieXRlMCIsImJ5dGUxIiwic3BsaXROYWxVbml0cyIsImJpdHN0cmVhbSIsIm5hbHMiLCJzY0xlbiIsIm5hbFN0YXJ0IiwibmFsRW5kIiwiaiIsInJld3JpdGVOYWxMYXllcklkIiwibmFsIiwib3V0IiwiYjAiLCJiMSIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24iLCJhZGRFbXVsYXRpb25QcmV2ZW50aW9uIiwiZXh0cmFjdFBUTCIsInZwc0RhdGEiLCJiciIsIm1heFN1YkxheWVyc01pbnVzMSIsInB0bFN0YXJ0Iiwid3JpdGVCYXNlVlBTIiwiYnciLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJOQUxfVU5JVF9QUkVGSVhfU0VJIiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImNodW5rcyIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJOdmVuY0R1YWxMYXllckVuY29kZXIiLCJfTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwicyIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJjb21tb24iLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJiYXNlRXh0cmEiLCJhbHBoYUV4dHJhIiwiYmdyYUZyYW1lIiwicHRzIiwic3JjTHMiLCJ3IiwiaCIsInlTaXplIiwidXZTaXplIiwieSIsIngiLCJiYXNlUiIsImFscGhhUiIsImJhc2VSZWFkeSIsImFscGhhUmVhZHkiLCJkdHMiLCJkdXJhdGlvbiIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY09wdHMiLCJyZXN0IiwiVmlkZW9Ub29sYm94RW5jb2RlciIsIl9WaWRlb1Rvb2xib3hFbmNvZGVyIiwiaHciLCJBVkNPTF9SQU5HRV9KUEVHIiwiVEFHIiwiY3JlYXRlVmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJIYXJkd2FyZUNvbnRleHQiLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsImxvZ2dlciIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkVuY29kZXJQaXBlbGluZSIsIl9FbmNvZGVyUGlwZWxpbmUiLCJvdXRGaWxlIiwid2l0aEF1ZGlvIiwidmlkZW8iLCJod1ZpZGVvIiwiYXVkaW8iLCJGRl9FTkNPREVSX0FBQyIsInNhbXBsZVJhdGUiLCJpbnB1dCIsImRzdCIsImNzIiwibGltaXRlciIsIl9tIiwiX3YiLCJfaHYiLCJfYSIsIl9wcm9taXNlIiwiX2NvZGVjIl0sIm1hcHBpbmdzIjoiMHVDQUVPLElBQU1BLENBQUFBLENBQU4sS0FBYyxDQUNuQixXQUFBLENBQXFCQyxDQUFBQSxDQUFvQixDQUFwQixJQUFBLENBQUEsU0FBQSxDQUFBQSxFQUFxQixDQUFyQixTQUFBLENBRXJCLElBQUksS0FBQSxFQUFXLENBQ2IsT0FBSyxJQUFBLENBQUssWUFBQSxHQUNSLElBQUEsQ0FBSyxNQUFBLENBQVMsSUFBQSxDQUFLLFNBQUEsRUFBVSxDQUM3QixLQUFLLFlBQUEsQ0FBZSxJQUFBLENBQUEsQ0FFZixJQUFBLENBQUssTUFDZCxDQUVBLElBQUksV0FBQSxFQUF1QixDQUN6QixPQUFPLElBQUEsQ0FBSyxZQUNkLENBRVEsWUFBQSxDQUFlLEtBQUEsQ0FDZixNQUNWLEVDWE8sSUFBTUMsRUFBTixLQUF5QixDQU05QixXQUFBLENBQXFCQyxDQUFBQSxDQUF3QixDQUF4QixJQUFBLENBQUEsY0FBQSxDQUFBQSxFQUF5QixDQUF6QixlQUxiLE9B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MUQsSUFBQSxJQUFTLENBQUEsQ0FBSUMsRUFBSSxrQkFBQSxDQUFvQixDQUFBLENBQUksQ0FBQSxDQUFHLENBQUEsRUFBQSxDQUFLRCxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxFQUM1RCxDQUVBQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVCxJQUFBLElBQVMsQ0FBQSxDQUFJLENBQUEsQ0FBRyxFQUFJLEVBQUEsQ0FBSSxDQUFBLEVBQUEsQ0FBS0EsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQSxHQUFNLENBQUEsRUFBSyxDQUFBLEdBQU0sQ0FBQyxFQUN2REEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFHVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBS0MsQ0FBQUEsQ0FBSSxPQUFBLENBQVNBLENBQUFBLENBQUksUUFBQSxDQUFVQSxDQUFBQSxDQUFJLE1BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLENBQUEsQ0FFNURELENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBRWxHLENBQUFBLENBQU8sRUFBRSxDQUFBLENBQ2RrRyxDQUFBQSxDQUFHLENBQUEsQ0FBRWpHLENBQUFBLENBQVEsRUFBRSxDQUFBLENBQ2ZpRyxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUdUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsRUFFUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLEVBQ1gsQ0FPTyxTQUFTRyxFQUFBQSxDQUFjUixDQUFBQSxDQUFpQjdGLENBQUFBLENBQWVDLENBQUFBLENBQXdCLENBQ3BGLElBQU1rRyxDQUFBQSxDQUFNUCxFQUFBQSxDQUFXQyxDQUFPLENBQUEsQ0FDOUIsR0FBSSxDQUFDTSxDQUFBQSxDQUFLLE9BQU9OLENBQUFBLENBRWpCLElBQU1LLENBQUFBLENBQUssSUFBSXZDLENBQUFBLENBQ2YsT0FBQXNDLEVBQUFBLENBQWFDLENBQUFBLENBQUlDLENBQUcsQ0FBQSxDQUNwQkMsRUFBQUEsQ0FBa0JGLENBQUFBLENBQUlDLENBQUFBLENBQUtuRyxDQUFBQSxDQUFPQyxDQUFNLENBQUEsQ0FFeENpRyxDQUFBQSxDQUFHLEtBQUssSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNkQSxDQUFBQSxDQUFHLEtBQUEsQ0FBTSxDQUFDLENBQUEsQ0FDSFAsRUFBQUEsQ0FBdUJyQyxFQUFTNEMsQ0FBQUEsQ0FBRyxJQUFJLENBQUMsQ0FDakQsQ0NoSUEsSUFBTUksRUFBQUEsQ0FBc0IsRUFBQSxDQVNyQixTQUFTQyxFQUFBQSxDQUFzQi9HLENBQUFBLENBQXVDLENBQzNFLEdBQU0sQ0FBRSxhQUFBLENBQUFnSCxDQUFBQSxDQUFlLGNBQUEsQ0FBQUMsQ0FBZSxDQUFBLENBQUlqSCxDQUFBQSxDQUNwQ2tILENBQUFBLENBQVc1QixDQUFBQSxDQUFjMEIsQ0FBYSxDQUFBLENBQ3RDRyxDQUFBQSxDQUFZN0IsQ0FBQUEsQ0FBYzJCLENBQWMsQ0FBQSxDQUV4Q0csQ0FBQUEsQ0FBYyxJQUFJLEdBQUEsQ0FDeEIsSUFBQSxJQUFXdEIsQ0FBQUEsSUFBT3FCLENBQUFBLENBQVcsQ0FDM0IsR0FBSXJCLENBQUFBLENBQUksSUFBQSxHQUFTLEVBQUEsQ0FBSSxTQUNyQixJQUFNdUIsQ0FBQUEsQ0FBTUQsQ0FBQUEsQ0FBWSxHQUFBLENBQUl0QixFQUFJLElBQUksQ0FBQSxFQUFLLEVBQUMsQ0FDMUN1QixDQUFBQSxDQUFJLElBQUEsQ0FBS3ZCLENBQUcsQ0FBQSxDQUNac0IsRUFBWSxHQUFBLENBQUl0QixDQUFBQSxDQUFJLElBQUEsQ0FBTXVCLENBQUcsRUFDL0IsQ0FFQSxJQUFNQyxDQUFBQSxDQUFtQixFQUFDLENBQ3BCQyxDQUFBQSxDQUFVLElBQUksR0FBQSxDQUNwQixJQUFBLElBQVd6QixDQUFBQSxJQUFPb0IsQ0FBQUEsQ0FBVSxDQUMxQixJQUFNeEMsQ0FBQUEsQ0FBT29CLENBQUFBLENBQUksSUFBQSxHQUFTLEVBQUEsQ0FBS2UsRUFBQUEsQ0FBY2YsQ0FBQUEsQ0FBSSxJQUFBLENBQU05RixDQUFBQSxDQUFLLE1BQU9BLENBQUFBLENBQUssTUFBTSxDQUFBLENBQUk4RixDQUFBQSxDQUFJLElBQUEsQ0FFdEYsR0FEQXdCLENBQUFBLENBQU8sSUFBQSxDQUFLMUMsRUFBb0JGLENBQUksQ0FBQSxDQUNoQyxDQUFDNkMsQ0FBQUEsQ0FBUSxHQUFBLENBQUl6QixDQUFBQSxDQUFJLElBQUksQ0FBQSxDQUFHLENBQzFCeUIsQ0FBQUEsQ0FBUSxHQUFBLENBQUl6QixDQUFBQSxDQUFJLElBQUksQ0FBQSxDQUNwQixJQUFBLElBQVcwQixDQUFBQSxJQUFZSixDQUFBQSxDQUFZLElBQUl0QixDQUFBQSxDQUFJLElBQUksQ0FBQSxFQUFLLEVBQUMsQ0FDbkR3QixDQUFBQSxDQUFPLElBQUEsQ0FBSzFDLENBQUFBLENBQW9CaUIsRUFBa0IyQixDQUFBQSxDQUFTLElBQUEsQ0FBTSxDQUFDLENBQUMsRUFFdkUsQ0FDRixDQUVBLE9BQUFGLEVBQU8sSUFBQSxDQUFLRyxDQUFBQSxFQUEwQixDQUFBLENBQy9CLE1BQUEsQ0FBTyxNQUFBLENBQU9ILENBQU0sQ0FDN0IsQ0FFTyxTQUFTRyxDQUFBQSxFQUFtQyxDQUdqRCxHQUFNLENBQUNDLENBQUFBLENBQUlDLENBQUUsQ0FBQSxDQUFJeEMsQ0FBQUEsQ0FBZ0IyQixFQUFBQSxDQUFxQixDQUFBLENBQUcsQ0FBQyxDQUFBLENBRXBEL0MsQ0FBQUEsQ0FBaUIsRUFBQyxDQUNsQjZELEVBQVksQ0FBQ3hELENBQUFBLENBQWFDLENBQUFBLEdBQWMsQ0FDNUMsSUFBQSxJQUFTMUIsQ0FBQUEsQ0FBSTBCLENBQUFBLENBQUksQ0FBQSxDQUFHMUIsR0FBSyxDQUFBLENBQUdBLENBQUFBLEVBQUFBLENBQUtvQixDQUFBQSxDQUFLLElBQUEsQ0FBTUssQ0FBQUEsRUFBT3pCLENBQUFBLENBQUssQ0FBQyxFQUMzRCxFQVVBLElBUkFpRixDQUFBQSxDQUFVLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDZEEsQ0FBQUEsQ0FBVSxDQUFBLENBQUcsQ0FBQyxFQUNkQSxDQUFBQSxDQUFVLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDZEEsQ0FBQUEsQ0FBVSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ2RBLEVBQVUsR0FBQSxDQUFLLENBQUMsQ0FBQSxDQUNoQkEsQ0FBQUEsQ0FBVSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ2RBLENBQUFBLENBQVUsRUFBRyxDQUFDLENBQUEsQ0FDZEEsQ0FBQUEsQ0FBVSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1A3RCxDQUFBQSxDQUFLLE1BQUEsQ0FBUyxJQUFNLENBQUEsRUFBRzZELENBQUFBLENBQVUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUU1QyxPQUFPLE1BQUEsQ0FBTyxNQUFBLENBQU8sQ0FDbkJoRCxDQUFBQSxDQUNBLE1BQUEsQ0FBTyxJQUFBLENBQUssQ0FBQzhDLENBQUFBLENBQUlDLENBQUUsQ0FBQyxDQUFBLENBQ3BCLE9BQU8sSUFBQSxDQUFLLENBQUMsR0FBQSxDQUFhLENBQVcsQ0FBQyxDQUFBLENBQ3RDN0QsQ0FBQUEsQ0FBU0MsQ0FBSSxFQUNiLE1BQUEsQ0FBTyxJQUFBLENBQUssQ0FBQyxHQUFJLENBQUMsQ0FDcEIsQ0FBQyxDQUNILENBRU8sU0FBUzhELEVBQUFBLENBQXNCWCxDQUFBQSxDQUFxQkMsQ0FBQUEsQ0FBOEIsQ0FDdkYsSUFBTUcsQ0FBQUEsQ0FBbUIsR0FDekIsSUFBQSxJQUFXeEIsQ0FBQUEsSUFBT29CLENBQUFBLENBQ2hCSSxDQUFBQSxDQUFPLElBQUEsQ0FBSzFDLENBQUFBLENBQW9Ca0IsQ0FBQUEsQ0FBSSxJQUFJLEVBRTFDLElBQUEsSUFBV0EsQ0FBQUEsSUFBT3FCLENBQUFBLENBQ1pyQixDQUFBQSxDQUFJLElBQUEsQ0FBTyxFQUFBLEVBQ2J3QixDQUFBQSxDQUFPLElBQUEsQ0FBSzFDLEVBQW9CaUIsQ0FBQUEsQ0FBa0JDLENBQUFBLENBQUksSUFBQSxDQUFNLENBQUMsQ0FBQyxDQUFBLENBR2xFLE9BQU8sTUFBQSxDQUFPLE9BQU93QixDQUFNLENBQzdCLENDbkVPLElBQU1RLENBQUFBLENBQU4sTUFBTUMsQ0FBNEMsQ0FDL0MsR0FDQSxVQUFBLENBQ0EsSUFBQSxDQUFPLEVBQUEsQ0FDUCxZQUFBLENBQWUsS0FBQSxDQUNmLFNBQUEsQ0FDQSxXQUFBLENBRUEsV0FBQSxDQUFZQyxFQUFlLENBQ2pDLElBQUEsQ0FBSyxFQUFBLENBQUtBLENBQUFBLENBQ1YsSUFBQSxDQUFLLFVBQUEsQ0FBYVAsQ0FBQUEsR0FDcEIsQ0FFQSxhQUFhLE1BQUEsQ0FBT3pILENBQUFBLENBQTZELENBQy9FLEdBQU0sQ0FBRSxLQUFBLENBQUFRLENBQUFBLENBQU8sT0FBQUMsQ0FBQUEsQ0FBUSxHQUFBLENBQUF3SCxDQUFBQSxDQUFLLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBUyxLQUFBLENBQUFsSCxDQUFNLENBQUEsQ0FBSWhCLEVBRXpDeUIsQ0FBQUEsQ0FBUUMsS0FBQUEsQ0FBTSxpQkFBQSxDQUFrQnlHLHFCQUFxQixDQUFBLENBQzNELEdBQUksQ0FBQzFHLENBQUFBLENBQU8sTUFBTSxJQUFJLEtBQUEsQ0FBTSw4QkFBOEIsQ0FBQSxDQUcxRCxJQUFNMkcsQ0FBQUEsQ0FBUyxDQUFFLEtBQUEsQ0FBQTNHLEVBQU8sS0FBQSxDQUFBakIsQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLENBQUFBLENBQVEsR0FBQSxDQUFBd0gsQ0FBQUEsQ0FBSyxPQUFBLENBQUFDLENBQUFBLENBQVMsUUFEbkMsQ0FBRSxNQUFBLENBQVEsSUFBQSxDQUFNLEVBQUEsQ0FBSSxHQUFJLENBQzhCLENBQUEsQ0FFbEVHLENBQUFBLENBQVUsTUFBTXRJLENBQUFBLENBQWEsQ0FBRSxHQUFHcUksQ0FBQUEsQ0FBUSxXQUFBLENBQWE3RSxlQUFnQixDQUFBLENBQUcsa0JBQWtCLEVBRTVGK0UsQ0FBQUEsQ0FBVyxNQUFNdkksQ0FBQUEsQ0FBYSxDQUFFLEdBQUdxSSxDQUFBQSxDQUFRLFdBQUEsQ0FBYUcsa0JBQW1CLEVBQUcsbUJBQW1CLENBQUEsQ0FFakdDLENBQUFBLENBQVUzSCxDQUFBQSxFQUFXLENBQ3JCNEgsQ0FBQUEsQ0FBVzVILENBQUFBLEVBQVcsQ0FFdEJoQixFQUFTbUIsQ0FBQUEsQ0FBTSxTQUFBLENBQVVxSCxDQUFBQSxDQUFTLE1BQU0sQ0FBQSxDQUV4Q0ssQ0FBQUEsQ0FBWUwsQ0FBQUEsQ0FBUSxTQUFBLENBQ3BCTSxFQUFhTCxDQUFBQSxDQUFTLFNBQUEsQ0FDNUIsT0FBSUksQ0FBQUEsRUFBYUMsQ0FBQUEsR0FDZjlJLENBQUFBLENBQU8sUUFBQSxDQUFTLFNBQUEsQ0FBWWtILEdBQXNCLENBQ2hELGFBQUEsQ0FBZTJCLENBQUFBLENBQ2YsY0FBQSxDQUFnQkMsQ0FBQUEsQ0FDaEIsS0FBQSxDQUFBbkksQ0FBQUEsQ0FDQSxNQUFBLENBQUFDLENBQ0YsQ0FBQyxDQUFBLENBQUEsQ0FHSSxJQUFJc0gsQ0FBQUEsQ0FBc0IsQ0FBRSxPQUFBLENBQUFNLENBQUFBLENBQVMsUUFBQSxDQUFBQyxFQUFVLE9BQUEsQ0FBQUUsQ0FBQUEsQ0FBUyxRQUFBLENBQUFDLENBQUFBLENBQVUsTUFBQSxDQUFBNUksQ0FBTyxDQUFDLENBQ25GLENBRUEsTUFBTSxNQUFBLENBQU8rSSxDQUFBQSxDQUFrQjVILENBQUFBLENBQW1DLENBQ2hFLEdBQU0sQ0FBRSxPQUFBLENBQUFxSCxFQUFTLFFBQUEsQ0FBQUMsQ0FBUyxDQUFBLENBQUksSUFBQSxDQUFLLEVBQUEsQ0FDN0JPLENBQUFBLENBQU0sSUFBQSxDQUFLLElBQUEsRUFBQSxDQUVqQkQsRUFBVSxHQUFBLENBQU1DLENBQUFBLENBQ2hCRCxDQUFBQSxDQUFVLFFBQUEsQ0FBVyxFQUFBLENBQ3JCbEosV0FBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTTJJLEVBQVEsU0FBQSxDQUFVTyxDQUFTLENBQUEsQ0FBRyxnQkFBZ0IsQ0FBQSxDQUc3RSxJQUFNbEcsQ0FBQUEsQ0FBTWtHLENBQUFBLENBQVUsT0FBTyxDQUFDLENBQUEsQ0FDeEJFLENBQUFBLENBQVFGLENBQUFBLENBQVUsUUFBQSxHQUFXLENBQUMsQ0FBQSxDQUNwQyxHQUFJLENBQUNsRyxDQUFBQSxFQUFPLENBQUNvRyxDQUFBQSxDQUFPLE1BQU0sSUFBSSxLQUFBLENBQU0sMkJBQTJCLENBQUEsQ0FDL0QsSUFBTUMsQ0FBQUEsQ0FBSUgsQ0FBQUEsQ0FBVSxLQUFBLENBQ2RJLENBQUFBLENBQUlKLENBQUFBLENBQVUsTUFBQSxDQUNkSyxDQUFBQSxDQUFRRixDQUFBQSxDQUFJQyxFQUNaRSxDQUFBQSxDQUFBQSxDQUFVSCxDQUFBQSxFQUFLLENBQUEsR0FBTUMsQ0FBQUEsRUFBSyxDQUFBLENBQUEsQ0FDM0IsSUFBQSxDQUFLLFNBQUEsR0FBVyxJQUFBLENBQUssVUFBWSxNQUFBLENBQU8sS0FBQSxDQUFNQyxDQUFBQSxDQUFRQyxDQUFBQSxDQUFTLENBQUMsQ0FBQSxDQUFBLENBQ3JFLElBQU1sRixDQUFBQSxDQUFNLEtBQUssU0FBQSxDQUNqQixJQUFBLElBQVNtRixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSUgsQ0FBQUEsQ0FBR0csQ0FBQUEsRUFBQUEsQ0FDckIsSUFBQSxJQUFTQyxFQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSUwsQ0FBQUEsQ0FBR0ssQ0FBQUEsRUFBQUEsQ0FDckJwRixDQUFBQSxDQUFJbUYsQ0FBQUEsQ0FBSUosQ0FBQUEsQ0FBSUssQ0FBQyxFQUFJMUcsQ0FBQUEsQ0FBSXlHLENBQUFBLENBQUlMLENBQUFBLENBQVFNLENBQUFBLENBQUksQ0FBQSxDQUFJLENBQUMsQ0FBQSxDQUc5Q3BGLENBQUFBLENBQUksS0FBSyxHQUFBLENBQUtpRixDQUFBQSxDQUFPQSxDQUFBQSxDQUFRQyxDQUFBQSxDQUFTLENBQUMsQ0FBQSxDQUV2QyxJQUFBLENBQUssV0FBQSxFQUFhLE1BQUssQ0FDdkIsSUFBQSxDQUFLLFdBQUEsQ0FBY3RJLEtBQUFBLENBQU0sZUFBQSxDQUFnQm9ELENBQUFBLENBQUssQ0FBRSxNQUFBLENBQVF1RSxtQkFBb0IsS0FBQSxDQUFPUSxDQUFBQSxDQUFHLE1BQUEsQ0FBUUMsQ0FBRSxDQUFDLENBQUEsQ0FDakcsSUFBQSxDQUFLLFdBQUEsQ0FBWSxJQUFNSCxDQUFBQSxDQUN2QixJQUFBLENBQUssV0FBQSxDQUFZLFFBQUEsQ0FBVyxFQUFBLENBQzVCbkosV0FBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTTRJLEVBQVMsU0FBQSxDQUFVLElBQUEsQ0FBSyxXQUFXLENBQUEsQ0FBRyxpQkFBaUIsQ0FBQSxDQUV0RixNQUFNLElBQUEsQ0FBSyxpQkFBaUJ0SCxDQUFLLEVBQ25DLENBRUEsTUFBTSxLQUFBLENBQU1BLENBQUFBLENBQW1DLENBQzdDLE1BQU0sS0FBSyxFQUFBLENBQUcsT0FBQSxDQUFRLFNBQUEsQ0FBVSxJQUFJLENBQUEsQ0FDcEMsTUFBTSxJQUFBLENBQUssRUFBQSxDQUFHLFNBQVMsU0FBQSxDQUFVLElBQUksQ0FBQSxDQUNyQyxNQUFNLElBQUEsQ0FBSyxnQkFBQSxDQUFpQkEsQ0FBSyxFQUNuQyxDQUVBLENBQUMsTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFVLENBQ3ZCLEdBQU0sQ0FBRSxPQUFBLENBQUF3SCxFQUFTLFFBQUEsQ0FBQUMsQ0FBQUEsQ0FBVSxPQUFBLENBQUFKLENBQUFBLENBQVMsUUFBQSxDQUFBQyxDQUFTLENBQUEsQ0FBSSxJQUFBLENBQUssR0FDdERFLENBQUFBLENBQVEsSUFBQSxFQUFLLENBQ2JDLENBQUFBLENBQVMsSUFBQSxFQUFLLENBQ2QsSUFBQSxDQUFLLFdBQUEsRUFBYSxNQUFLLENBQ3ZCSixDQUFBQSxDQUFRLFdBQUEsRUFBWSxDQUNwQkMsQ0FBQUEsQ0FBUyxXQUFBLEdBQ1gsQ0FFQSxNQUFjLGdCQUFBLENBQWlCdEgsQ0FBQUEsQ0FBbUMsQ0FDaEUsR0FBTSxDQUFFLE9BQUEsQ0FBQXFILENBQUFBLENBQVMsUUFBQSxDQUFBQyxFQUFVLE9BQUEsQ0FBQUUsQ0FBQUEsQ0FBUyxRQUFBLENBQUFDLENBQUFBLENBQVUsTUFBQSxDQUFBNUksQ0FBTyxDQUFBLENBQUksSUFBQSxDQUFLLEdBQzlELE9BQWEsQ0FDWCxJQUFNd0osQ0FBQUEsQ0FBUSxNQUFNaEIsQ0FBQUEsQ0FBUSxhQUFBLENBQWNHLENBQU8sRUFDM0NjLENBQUFBLENBQVMsTUFBTWhCLENBQUFBLENBQVMsYUFBQSxDQUFjRyxDQUFRLENBQUEsQ0FFOUNjLENBQUFBLENBQVlGLENBQUFBLEVBQVMsRUFDckJHLENBQUFBLENBQWFGLENBQUFBLEVBQVUsQ0FBQSxDQUM3QixHQUFJLENBQUNDLENBQUFBLEVBQWEsQ0FBQ0MsQ0FBQUEsQ0FBWSxNQUcvQixHQUFJRCxDQUFBQSxHQUFjQyxDQUFBQSxDQUNoQixNQUFNLElBQUksS0FBQSxDQUFNLENBQUEsbUJBQUEsRUFBc0JELENBQVMsV0FBV0MsQ0FBVSxDQUFBLENBQUUsQ0FBQSxDQUd4RSxJQUFNdEMsQ0FBQUEsQ0FBVzVCLENBQUFBLENBQWNrRCxDQUFBQSxDQUFRLElBQUssRUFDdENyQixDQUFBQSxDQUFZN0IsQ0FBQUEsQ0FBY21ELENBQUFBLENBQVMsSUFBSyxDQUFBLENBRXhDbkIsQ0FBQUEsQ0FBbUIsRUFBQyxDQUNyQixJQUFBLENBQUssWUFBQSxHQUNSQSxDQUFBQSxDQUFPLElBQUEsQ0FBSyxJQUFBLENBQUssVUFBVSxDQUFBLENBQzNCLElBQUEsQ0FBSyxhQUFlLElBQUEsQ0FBQSxDQUV0QkEsQ0FBQUEsQ0FBTyxJQUFBLENBQUtPLEVBQUFBLENBQXNCWCxDQUFBQSxDQUFVQyxDQUFTLENBQUMsQ0FBQSxDQUd0RCxJQUFNMEIsQ0FBQUEsQ0FBTUwsQ0FBQUEsQ0FBUSxHQUFBLENBQ2RpQixDQUFBQSxDQUFNakIsQ0FBQUEsQ0FBUSxHQUFBLENBQ2RrQixDQUFBQSxDQUFXbEIsQ0FBQUEsQ0FBUSxTQUN6QkEsQ0FBQUEsQ0FBUSxJQUFBLENBQU8sTUFBQSxDQUFPLE1BQUEsQ0FBT2xCLENBQU0sQ0FBQSxDQUNuQ2tCLENBQUFBLENBQVEsR0FBQSxDQUFNSyxFQUNkTCxDQUFBQSxDQUFRLEdBQUEsQ0FBTWlCLENBQUFBLENBQ2RqQixDQUFBQSxDQUFRLFFBQUEsQ0FBV2tCLENBQUFBLEdBQWEsRUFBQSxDQUFLLEVBQUEsQ0FBS0EsRUFDMUNsQixDQUFBQSxDQUFRLFdBQUEsQ0FBYzNJLENBQUFBLENBQU8sS0FBQSxDQUM3QjJJLENBQUFBLENBQVEsU0FBQSxDQUFVSCxDQUFBQSxDQUFRLFFBQUEsQ0FBVXhJLEVBQU8sUUFBUSxDQUFBLENBQ25ELE1BQU1tQixDQUFBQSxDQUFNLFdBQUEsQ0FBWXdILENBQU8sQ0FBQSxDQUUvQkEsQ0FBQUEsQ0FBUSxPQUFNLENBQ2RDLENBQUFBLENBQVMsS0FBQSxHQUNYLENBQ0YsQ0FDRixDQUFBLENDdElPLElBQU1rQixDQUFBQSxDQUFOLE1BQU1DLENBQW1DLENBQzdCLElBQUEsQ0FDQSxJQUFBLENBQ0EsT0FBQSxDQUNULElBQUEsQ0FBTyxFQUFBLENBRVAsV0FBQSxDQUFZMUosRUFBbUJKLENBQUFBLENBQWFELENBQUFBLENBQWdCLENBQ2xFLElBQUEsQ0FBSyxJQUFBLENBQU9LLENBQUFBLENBQ1osSUFBQSxDQUFLLElBQUEsQ0FBT0osRUFDWixJQUFBLENBQUssT0FBQSxDQUFVRCxFQUNqQixDQUVBLGFBQWEsTUFBQSxDQUFPRyxDQUFBQSxDQUFrRCxDQUNwRSxHQUFNLENBQUUsU0FBQSxDQUFBNkosQ0FBQUEsQ0FBVyxRQUFBLENBQUFqSyxDQUFBQSxDQUFVLFNBQUEsQ0FBQWtLLENBQUFBLENBQVcsS0FBQSxDQUFBOUksRUFBTyxHQUFHK0ksQ0FBSyxDQUFBLENBQUkvSixDQUFBQSxDQUVyRHlCLENBQUFBLENBQVFDLEtBQUFBLENBQU0saUJBQUEsQ0FBa0JtSSxDQUFTLEVBQy9DLEdBQUksQ0FBQ3BJLENBQUFBLENBQU8sTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLHlCQUFBLEVBQTRCb0ksQ0FBUyxFQUFFLENBQUEsQ0FFbkUsSUFBTTNKLENBQUFBLENBQU0sTUFBTUgsQ0FBQUEsQ0FBYSxDQUFFLEtBQUEsQ0FBQTBCLENBQUFBLENBQU8sR0FBR3NJLENBQUFBLENBQU0sUUFBQSxDQUFBbkssQ0FBQUEsQ0FBVSxPQUFBLENBQVNrSyxDQUFVLENBQUEsQ0FBRyxnQkFBZ0IsQ0FBQSxDQUMzRmpLLEVBQVNtQixDQUFBQSxDQUFNLFNBQUEsQ0FBVWQsQ0FBQUEsQ0FBS04sQ0FBUSxDQUFBLENBQzVDLE9BQU8sSUFBSWdLLENBQUFBLENBQWExSixFQUFLVyxDQUFBQSxFQUFXLENBQUdoQixDQUFNLENBQ25ELENBRUEsTUFBTSxNQUFBLENBQU9jLENBQUFBLENBQWNLLEVBQW1DLENBQzVETCxDQUFBQSxDQUFNLEdBQUEsQ0FBTSxJQUFBLENBQUssSUFBQSxFQUFBLENBQ2pCQSxDQUFBQSxDQUFNLFFBQUEsQ0FBVyxFQUFBLENBQ2pCakIsWUFBWSxZQUFBLENBQWEsTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFNBQUEsQ0FBVWlCLENBQUssQ0FBQSxDQUFHLG9CQUFvQixFQUMvRSxNQUFNLElBQUEsQ0FBSyxLQUFBLENBQU1LLENBQUssRUFDeEIsQ0FFQSxNQUFNLEtBQUEsQ0FBTUEsRUFBbUMsQ0FDN0MsTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFJLENBQUEsQ0FDOUIsTUFBTSxLQUFLLEtBQUEsQ0FBTUEsQ0FBSyxFQUN4QixDQUVBLENBQUMsTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFVLENBQ3ZCLElBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxFQUFLLENBQ2YsSUFBQSxDQUFLLElBQUEsQ0FBSyxXQUFBLEdBQ1osQ0FFUSxLQUFBLENBQU1BLENBQUFBLENBQW1DLENBQy9DLE9BQU9ELENBQUFBLENBQWEsSUFBQSxDQUFLLElBQUEsQ0FBTSxJQUFBLENBQUssS0FBTSxJQUFBLENBQUssT0FBQSxDQUFTQyxDQUFLLENBQy9ELENBQ0YsQ0FBQSxDQzdDTyxJQUFNZ0osRUFBTixNQUFNQyxDQUEwQyxDQUM3QyxJQUFBLENBQ0EsSUFBQSxDQUNBLE9BQUEsQ0FDQSxJQUFBLENBQU8sRUFBQSxDQUVQLFlBQVkvSixDQUFBQSxDQUFtQkosQ0FBQUEsQ0FBYUQsQ0FBQUEsQ0FBZ0IsQ0FDbEUsSUFBQSxDQUFLLElBQUEsQ0FBT0ssQ0FBQUEsQ0FDWixJQUFBLENBQUssS0FBT0osQ0FBQUEsQ0FDWixJQUFBLENBQUssT0FBQSxDQUFVRCxFQUNqQixDQUVBLGFBQWEsTUFBQSxDQUFPRyxDQUFBQSxDQUEyRCxDQUM3RSxHQUFNLENBQUUsS0FBQSxDQUFBUSxDQUFBQSxDQUFPLE1BQUEsQ0FBQUMsQ0FBQUEsQ0FBUSxHQUFBLENBQUF3SCxDQUFBQSxDQUFLLEVBQUEsQ0FBQWlDLENBQUFBLENBQUksT0FBQSxDQUFBaEMsQ0FBQUEsQ0FBUyxLQUFBLENBQUFsSCxDQUFNLENBQUEsQ0FBSWhCLENBQUFBLENBRTdDeUIsRUFBUXlJLENBQUFBLENBQUcsZUFBQSxDQUFnQixNQUFNLENBQUEsQ0FDdkMsR0FBSSxDQUFDekksQ0FBQUEsQ0FBTyxNQUFNLElBQUksS0FBQSxDQUFNLHFDQUFxQyxDQUFBLENBRWpFLElBQU12QixDQUFBQSxDQUFNLE1BQU1ILENBQUFBLENBQ2hCLENBQ0UsTUFBQTBCLENBQUFBLENBQ0EsS0FBQSxDQUFBakIsQ0FBQUEsQ0FDQSxNQUFBLENBQUFDLENBQUFBLENBQ0EsR0FBQSxDQUFBd0gsQ0FBQUEsQ0FDQSxPQUFBLENBQUFDLEVBQ0EsV0FBQSxDQUFhM0UsZUFBQUEsQ0FDYixVQUFBLENBQVk0RyxnQkFBQUEsQ0FDWixRQUFBLENBQVUsTUFBQSxDQUNWLE9BQUEsQ0FBUyxDQUFFLGNBQWUsR0FBSSxDQUNoQyxDQUFBLENBQ0EsYUFDRixDQUFBLENBQ010SyxDQUFBQSxDQUFTbUIsQ0FBQUEsQ0FBTSxTQUFBLENBQVVkLEVBQUssTUFBTSxDQUFBLENBQzFDLE9BQU8sSUFBSStKLENBQUFBLENBQW9CL0osQ0FBQUEsQ0FBS1csQ0FBQUEsRUFBVyxDQUFHaEIsQ0FBTSxDQUMxRCxDQUVBLE1BQU0sTUFBQSxDQUFPK0ksQ0FBQUEsQ0FBa0I1SCxDQUFBQSxDQUFtQyxDQUNoRTRILENBQUFBLENBQVUsSUFBTSxJQUFBLENBQUssSUFBQSxFQUFBLENBQ3JCQSxDQUFBQSxDQUFVLFFBQUEsQ0FBVyxFQUFBLENBQ3JCbEosV0FBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTSxLQUFLLElBQUEsQ0FBSyxTQUFBLENBQVVrSixDQUFTLENBQUEsQ0FBRyxpQkFBaUIsQ0FBQSxDQUNoRixNQUFNLElBQUEsQ0FBSyxNQUFNNUgsQ0FBSyxFQUN4QixDQUVBLE1BQU0sS0FBQSxDQUFNQSxDQUFBQSxDQUFtQyxDQUM3QyxNQUFNLEtBQUssSUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFJLENBQUEsQ0FDOUIsTUFBTSxJQUFBLENBQUssS0FBQSxDQUFNQSxDQUFLLEVBQ3hCLENBRUEsQ0FBQyxNQUFBLENBQU8sT0FBTyxDQUFBLEVBQVUsQ0FDdkIsSUFBQSxDQUFLLElBQUEsQ0FBSyxNQUFLLENBQ2YsSUFBQSxDQUFLLElBQUEsQ0FBSyxXQUFBLEdBQ1osQ0FFUSxLQUFBLENBQU1BLENBQUFBLENBQW1DLENBQy9DLE9BQU9ELENBQUFBLENBQWEsSUFBQSxDQUFLLElBQUEsQ0FBTSxJQUFBLENBQUssSUFBQSxDQUFNLElBQUEsQ0FBSyxPQUFBLENBQVNDLENBQUssQ0FDL0QsQ0FDRixDQUFBLENDeERBLElBQU1vSixDQUFBQSxDQUFNLFdBQUEsQ0FtQlosZUFBc0JDLEVBQUFBLENBQW1CckssRUFBMkJnQixDQUFBQSxDQUF5QyxDQUMzRyxHQUFNLENBQUUsS0FBQSxDQUFBUixDQUFBQSxDQUFPLE1BQUEsQ0FBQUMsQ0FBQUEsQ0FBUSxJQUFBd0gsQ0FBQUEsQ0FBSyxPQUFBLENBQUFDLENBQUFBLENBQVUsR0FBQSxDQUFXLGNBQUEsQ0FBQW9DLENBQUFBLENBQWlCLEtBQU0sQ0FBQSxDQUFJdEssRUFDdEVrSyxDQUFBQSxDQUFLSSxDQUFBQSxDQUFpQixNQUFBLENBQWFDLGVBQUFBLENBQWdCLElBQUEsRUFBSyxFQUFLLE1BQUEsQ0FFbkUsR0FBSSxDQUNGLEdBQUlMLENBQUFBLEVBQUksY0FBQSxHQUFtQk0sNkJBQUFBLEVBQWlDTixDQUFBQSxDQUFHLGVBQUEsQ0FBZ0IsTUFBTSxDQUFBLENBQ25GLE9BQUFPLENBQUFBLENBQU8sS0FBQSxDQUFNTCxDQUFBQSxDQUFLLHVDQUF1QyxDQUFBLENBRWxELENBQUUsT0FBQSxDQURPLE1BQU1KLEVBQW9CLE1BQUEsQ0FBTyxDQUFFLEtBQUEsQ0FBQXhKLENBQUFBLENBQU8sTUFBQSxDQUFBQyxDQUFBQSxDQUFRLEdBQUEsQ0FBQXdILENBQUFBLENBQUssR0FBQWlDLENBQUFBLENBQUksT0FBQSxDQUFBaEMsQ0FBQUEsQ0FBUyxLQUFBLENBQUFsSCxDQUFNLENBQUMsQ0FBQSxDQUN6RSxFQUFBLENBQUFrSixDQUFHLENBQUEsQ0FFdkIsR0FBSUEsQ0FBQUEsRUFBSSxjQUFBLEdBQW1CUSxxQkFBQUEsRUFBeUJSLENBQUFBLENBQUcsZUFBQSxDQUFnQixNQUFNLEVBQzNFLE9BQUFPLENBQUFBLENBQU8sS0FBQSxDQUFNTCxDQUFBQSxDQUFLLDJDQUEyQyxDQUFBLENBRXRELENBQUUsT0FBQSxDQURPLE1BQU10QyxDQUFBQSxDQUFzQixNQUFBLENBQU8sQ0FBRSxLQUFBLENBQUF0SCxDQUFBQSxDQUFPLE1BQUEsQ0FBQUMsQ0FBQUEsQ0FBUSxHQUFBLENBQUF3SCxFQUFLLEVBQUEsQ0FBQWlDLENBQUFBLENBQUksT0FBQSxDQUFBaEMsQ0FBQUEsQ0FBUyxLQUFBLENBQUFsSCxDQUFNLENBQUMsQ0FBQSxDQUMzRSxHQUFBa0osQ0FBRyxDQUV6QixDQUFBLE1BQVNoTSxDQUFBQSxDQUFHLENBQ1Z1TSxDQUFBQSxDQUFPLElBQUEsQ0FBS0wsQ0FBQUEsQ0FBSyw4REFBK0RsTSxDQUFDLEVBQ25GLENBQUEsT0FBRSxDQUNBZ00sQ0FBQUEsRUFBSSxPQUFBLEdBQ04sQ0FFQSxPQUFBTyxDQUFBQSxDQUFPLEtBQUEsQ0FBTUwsQ0FBQUEsQ0FBSywyQ0FBMkMsQ0FBQSxDQUM3REYsQ0FBQUEsRUFBSSxPQUFBLEVBQVEsQ0FZTCxDQUFFLEtBQUEsQ0FYSyxNQUFNUCxDQUFBQSxDQUFhLE1BQUEsQ0FBTyxDQUN0QyxLQUFBLENBQUFuSixDQUFBQSxDQUNBLE1BQUEsQ0FBQUMsRUFDQSxHQUFBLENBQUF3SCxDQUFBQSxDQUNBLFNBQUEsQ0FBVzBDLGtCQUFBQSxDQUNYLFFBQUEsQ0FBVSxNQUFBLENBQ1YsU0FBQSxDQUFXLENBQUUsTUFBQSxDQUFRLFFBQUEsQ0FBVSxhQUFBLENBQWUsK0NBQWdELENBQUEsQ0FDOUYsT0FBQSxDQUFBekMsQ0FBQUEsQ0FDQSxXQUFBLENBQWExRSxvQkFDYixLQUFBLENBQUF4QyxDQUNGLENBQUMsQ0FBQSxDQUNlLEtBQUEsQ0FBTyxNQUFNa0MsQ0FBQUEsQ0FBVyxNQUFBLENBQU8xQyxFQUFPQyxDQUFNLENBQUUsQ0FDaEUsQ0NsQ08sSUFBTW1LLEVBQUFBLENBQU4sTUFBTUMsQ0FBZ0IsQ0FDbkIsRUFBQSxDQUNBLFNBQUEsQ0FBWSxLQUFBLENBRVosV0FBQSxDQUFZN0MsQ0FBQUEsQ0FBa0IsQ0FDcEMsSUFBQSxDQUFLLEVBQUEsQ0FBS0EsRUFDWixDQUVBLGFBQWEsTUFBQSxDQUFPaEksQ0FBQUEsQ0FBd0QsQ0FDMUUsR0FBTSxDQUFFLEtBQUEsQ0FBQVEsRUFBTyxNQUFBLENBQUFDLENBQUFBLENBQVEsT0FBQSxDQUFBcUssQ0FBQUEsQ0FBUyxTQUFBLENBQUFDLENBQUFBLENBQVksS0FBTSxDQUFBLENBQUkvSyxFQUNoRGdCLENBQUFBLENBQVEsSUFBSTFCLENBQUFBLENBQVl3TCxDQUFPLENBQUEsQ0FDL0IsQ0FBRSxLQUFBLENBQUFFLENBQUFBLENBQU8sUUFBQUMsQ0FBQUEsQ0FBUyxLQUFBLENBQUF4SixDQUFBQSxDQUFPLEVBQUEsQ0FBQXlJLENBQUcsQ0FBQSxDQUFJLE1BQU1HLEVBQUFBLENBQW1CckssRUFBTWdCLENBQUssQ0FBQSxDQUV0RWtLLENBQUFBLENBQ0osT0FBSUgsQ0FBQUEsR0FDRkcsQ0FBQUEsQ0FBUSxNQUFNNUosQ0FBQUEsQ0FBYSxPQUFPLENBQ2hDLGFBQUEsQ0FBZSxLQUFBLENBQ2YsWUFBQSxDQUFjRCxrQkFBQUEsQ0FDZCxTQUFBLENBQVc4SixjQUFBQSxDQUNYLFlBQUEsQ0FBYyxLQUNkLE9BQUEsQ0FBUyxLQUFBLENBQ1QsS0FBQSxDQUFBbkssQ0FDRixDQUFDLENBQUEsQ0FBQSxDQUdILE1BQU1BLENBQUFBLENBQU0sTUFBSyxDQUNWLElBQUk2SixDQUFBQSxDQUFnQixDQUN6QixLQUFBLENBQUFHLENBQUFBLENBQ0EsT0FBQSxDQUFBQyxDQUFBQSxDQUNBLE1BQUFDLENBQUFBLENBQ0EsS0FBQSxDQUFBbEssQ0FBQUEsQ0FDQSxPQUFBLENBQVMsSUFBSXJELENBQUFBLENBQW1CLENBQUMsQ0FBQSxDQUNqQyxRQUFBbU4sQ0FBQUEsQ0FDQSxLQUFBLENBQUFySixDQUFBQSxDQUNBLEVBQUEsQ0FBQXlJLENBQUFBLENBQ0EsS0FBQSxDQUFBMUosQ0FBQUEsQ0FDQSxNQUFBLENBQUFDLENBQ0YsQ0FBQyxDQUNILENBRUEsVUFBQSxDQUFXMkssQ0FBQUEsQ0FBMEIsQ0FDbkMsSUFBQSxDQUFLLEVBQUEsQ0FBRyxPQUFPLFlBQUEsQ0FBYUEsQ0FBVSxFQUN4QyxDQUVBLE1BQU0sVUFBQSxDQUFXQyxDQUFBQSxDQUE4QixDQUM3QyxNQUFNLElBQUEsQ0FBSyxFQUFBLENBQUcsT0FBQSxDQUFRLFFBQUEsQ0FBUyxTQUFZLENBQ3pDLEdBQU0sQ0FBRSxRQUFBSixDQUFBQSxDQUFTLEtBQUEsQ0FBQUQsQ0FBQUEsQ0FBTyxLQUFBLENBQUF2SixDQUFBQSxDQUFPLEtBQUEsQ0FBQVQsR0FBTSxDQUFBLENBQUksS0FBSyxFQUFBLENBQzlDLEdBQUlpSyxDQUFBQSxDQUFTLENBQ1gsSUFBQXhJLENBQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsQ0FBQSxJQUFNOUIsQ0FBQUEsQ0FBUWtDLEVBQUFKLENBQUFBLENBQUEsSUFBQSxDQUFLLFNBQUEsQ0FBVTRJLENBQUssQ0FBQSxDQUFBLENBQ2xDLE1BQU1KLENBQUFBLENBQVEsTUFBQSxDQUFPdEssRUFBT0ssR0FBSyxDQUFBLENBQ2pDLE1BQUEsQ0FBQSxNQUZBOEIsQ0FBQUEsQ0FBQSxDQUFBLElBQUFDLENBQUFBLENBQUFELENBQUFBLENBQUFFLENBQUFBLENBQUEsY0FBQUMsQ0FBQUEsQ0FBQVIsQ0FBQUEsQ0FBQU0sQ0FBQUEsQ0FBQUMsQ0FBQUEsRUFBQUEsQ0FHRixDQUNBLEdBQU0sQ0FBRSxHQUFBLENBQUFOLEVBQUssR0FBQSxDQUFBNEksQ0FBQUEsQ0FBSyxHQUFBLENBQUE1SCxDQUFJLENBQUEsQ0FBSWpDLENBQUFBLENBQzFCLE9BQUE0QixFQUFBQSxDQUFHSyxFQUFLLHFCQUFxQixDQUFBLENBQzdCaEUsV0FBQUEsQ0FBWSxZQUFBLENBQWFnRCxDQUFBQSxDQUFJLFlBQUEsRUFBYSxDQUFHLHNCQUFzQixFQUNuRWhELFdBQUFBLENBQVksWUFBQSxDQUFhZ0QsQ0FBQUEsQ0FBSSxVQUFBLENBQVcySSxDQUFLLENBQUEsQ0FBRyxvQkFBb0IsQ0FBQSxDQUNwRTNMLFlBQVksWUFBQSxDQUFhNEwsQ0FBQUEsQ0FBSSxZQUFBLEVBQWEsQ0FBRyxzQkFBc0IsQ0FBQSxDQUNuRTVMLFdBQUFBLENBQVksWUFBQSxDQUFhLE1BQU1nRSxDQUFBQSxDQUFJLFVBQUEsQ0FBVzRILENBQUFBLENBQUs1SSxDQUFHLENBQUEsQ0FBRyxvQkFBb0IsQ0FBQSxDQUN0RXNJLENBQUFBLENBQU8sT0FBT00sQ0FBQUEsQ0FBS3RLLEdBQUssQ0FDakMsQ0FBQyxFQUNILENBRUEsTUFBTSxTQUFBLENBQVV5QyxFQUFnQyxDQUM5QyxNQUFNLElBQUEsQ0FBSyxFQUFBLENBQUcsT0FBQSxDQUFRLFFBQUEsQ0FBUyxTQUFZLENBQ3pDLEdBQU0sQ0FBRSxPQUFBLENBQUF3SCxDQUFBQSxDQUFTLEtBQUEsQ0FBQUQsQ0FBQUEsQ0FBTyxLQUFBLENBQUF2SixDQUFBQSxDQUFPLEtBQUEsQ0FBQVQsRUFBTyxLQUFBLENBQUFSLENBQUFBLENBQU8sTUFBQSxDQUFBQyxDQUFPLENBQUEsQ0FBSSxJQUFBLENBQUssRUFBQSxDQUN2RDhLLENBQUFBLENBQUs5SixHQUFVLE1BQU15QixDQUFBQSxDQUFXLE1BQUEsQ0FBTzFDLENBQUFBLENBQU9DLENBQU0sQ0FBQSxDQUMxRCxHQUFJLENBQ0YsSUFBTWlDLENBQUFBLENBQU0sTUFBTTZJLENBQUFBLENBQUcsU0FBQSxDQUFVOUgsQ0FBTyxDQUFBLENBQ2xDd0gsQ0FBQUEsQ0FDRixNQUFNQSxFQUFRLE1BQUEsQ0FBT3ZJLENBQUFBLENBQUsxQixDQUFLLENBQUEsRUFFL0J0QixXQUFBQSxDQUFZLFlBQUEsQ0FBYTZMLENBQUFBLENBQUcsR0FBQSxDQUFJLGNBQWEsQ0FBRyxxQkFBcUIsQ0FBQSxDQUNyRTdMLFdBQUFBLENBQVksWUFBQSxDQUFhLE1BQU02TCxDQUFBQSxDQUFHLEdBQUEsQ0FBSSxXQUFXQSxDQUFBQSxDQUFHLEdBQUEsQ0FBSzdJLENBQUcsQ0FBQSxDQUFHLG1CQUFtQixDQUFBLENBQ2xGLE1BQU1zSSxDQUFBQSxDQUFPLE9BQU9PLENBQUFBLENBQUcsR0FBQSxDQUFLdkssQ0FBSyxDQUFBLEVBRXJDLENBQUEsT0FBRSxDQUNLUyxDQUFBQSxFQUFPOEosQ0FBQUEsQ0FBRyxPQUFPLE9BQU8sQ0FBQSxHQUMvQixDQUNGLENBQUMsRUFDSCxDQUVBLE1BQU0sWUFBWS9JLENBQUFBLENBQTRCLENBQzVDLEdBQU0sQ0FBRSxLQUFBLENBQUEwSSxDQUFBQSxDQUFPLE9BQUEsQ0FBQU0sQ0FBQUEsQ0FBUyxNQUFBeEssQ0FBTSxDQUFBLENBQUksSUFBQSxDQUFLLEVBQUEsQ0FDbkNrSyxDQUFBQSxFQUFPLE1BQU1NLENBQUFBLENBQVEsUUFBQSxDQUFTLElBQU1OLENBQUFBLENBQU0sTUFBQSxDQUFPMUksQ0FBQUEsQ0FBS3hCLENBQUssQ0FBQyxFQUNsRSxDQUVBLE1BQU0sUUFBMEIsQ0FDOUIsR0FBTSxDQUFFLEtBQUEsQ0FBQWdLLENBQUFBLENBQU8sT0FBQSxDQUFBQyxDQUFBQSxDQUFTLEtBQUEsQ0FBQUMsRUFBTyxLQUFBLENBQUFsSyxDQUFBQSxDQUFPLE9BQUEsQ0FBQXdLLEdBQVEsQ0FBQSxDQUFJLElBQUEsQ0FBSyxFQUFBLENBQ3ZELEdBQUksQ0FDRixJQUFBL0ksQ0FBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxDQUFBLElBQVlnSixDQUFBQSxDQUFLNUksQ0FBQUEsQ0FBQUosQ0FBQUEsQ0FBQXpCLENBQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FDakIsSUFBTTBLLENBQUFBLENBQUs3SSxDQUFBQSxDQUFBSixDQUFBQSxDQUFBdUksQ0FBQUEsQ0FBQUEsQ0FDWCxJQUFNVyxDQUFBQSxDQUFNOUksQ0FBQUEsQ0FBQUosQ0FBQUEsQ0FBQXdJLEdBQ1osSUFBTVcsQ0FBQUEsQ0FBSy9JLENBQUFBLENBQUFKLENBQUFBLENBQUF5SSxDQUFBQSxDQUFBQSxDQUNYLE1BQU1NLEdBQUFBLENBQVEsS0FBQSxHQUNkLE1BQU1OLENBQUFBLEVBQU8sS0FBQSxDQUFNbEssQ0FBSyxDQUFBLENBQ3BCaUssQ0FBQUEsQ0FDRixNQUFNQSxDQUFBQSxDQUFRLE1BQU1qSyxDQUFLLENBQUEsQ0FFekIsTUFBTWdLLENBQUFBLENBQU8sS0FBQSxDQUFNaEssQ0FBSyxFQUFBLENBQUEsTUFUMUI4QixDQUFBQSxDQUFBLEtBQUFDLENBQUFBLENBQUFELENBQUFBLENBQUFFLENBQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsT0FBQSxDQUFBLElBQUE2SSxDQUFBQSxDQUFBNUksQ0FBQUEsQ0FBQVIsQ0FBQUEsQ0FBQU0sQ0FBQUEsQ0FBQUMsR0FBQTZJLENBQUFBLEVBQUEsTUFBQUEsRUFBQUEsQ0FXRixDQUFBLE9BQUUsQ0FDQSxJQUFBLENBQUssSUFBQSxHQUNQLENBQ0EsT0FBTyxJQUFBLENBQUssRUFBQSxDQUFHLE9BQ2pCLENBRUEsTUFBTyxNQUFBLENBQU8sWUFBWSxHQUFtQixDQUMzQyxHQUFJLElBQUEsQ0FBSyxTQUFBLENBQVcsT0FDcEIsR0FBTSxDQUFFLEtBQUEsQ0FBQWIsRUFBTyxPQUFBLENBQUFDLENBQUFBLENBQVMsS0FBQSxDQUFBQyxDQUFBQSxDQUFPLEtBQUEsQ0FBQWxLLENBQUFBLENBQU8sT0FBQSxDQUFBd0ssQ0FBUSxFQUFJLElBQUEsQ0FBSyxFQUFBLENBQ3ZELE1BQU1BLENBQUFBLENBQVEsS0FBQSxFQUFNLENBQ3BCUixDQUFBQSxHQUFRLE1BQUEsQ0FBTyxPQUFPLENBQUEsRUFBRSxDQUN4QkMsQ0FBQUEsR0FBVSxNQUFBLENBQU8sT0FBTyxDQUFBLEVBQUUsQ0FDMUJDLENBQUFBLEdBQVEsT0FBTyxPQUFPLENBQUEsRUFBRSxDQUN4QixNQUFNbEssQ0FBQUEsQ0FBTSxNQUFBLENBQU8sWUFBWSxDQUFBLEdBQy9CLElBQUEsQ0FBSyxJQUFBLEdBQ1AsQ0FFUSxJQUFBLEVBQWEsQ0FHbkIsSUFBQXlCLENBQUFBLENBQUEsT0FGQSxHQUFJLElBQUEsQ0FBSyxTQUFBLENBQVcsT0FDcEIsSUFBQSxDQUFLLFNBQUEsQ0FBWSxDQUFBLENBQUEsQ0FDakIsSUFBTXFKLEVBQVNqSixDQUFBQSxDQUFBSixDQUFBQSxDQUFBLElBQUEsQ0FBSyxFQUFBLENBQUcsS0FBQSxDQUFBLENBQ3ZCLElBQUEsQ0FBSyxFQUFBLENBQUcsRUFBQSxFQUFJLFVBQVEsQ0FBQSxNQURwQkssQ0FBQUEsQ0FBQSxDQUFBLElBQUFDLENBQUFBLENBQUFELENBQUFBLENBQUFFLEdBQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBQVIsRUFBQU0sQ0FBQUEsQ0FBQUMsR0FBQUEsRUFBQUEsQ0FFRixDQUVRLFNBQUEsQ0FBVXFJLENBQUFBLENBQXNCLENBQ3RDLElBQU0xSyxDQUFBQSxDQUFRSixFQUFVLElBQUEsQ0FBSyxFQUFBLENBQUcsS0FBQSxDQUFPLElBQUEsQ0FBSyxFQUFBLENBQUcsTUFBQSxDQUFRZ0QsZUFBZSxDQUFBLENBQ3RFLE9BQUE3RCxXQUFBQSxDQUFZLFlBQUEsQ0FBYWlCLENBQUFBLENBQU0sVUFBQSxDQUFXMEssQ0FBSyxDQUFBLENBQUcsc0JBQXNCLENBQUEsQ0FDakUxSyxDQUNULENBQ0YiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgY2xhc3MgTGF6eTxUPiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1ha2VWYWx1ZTogKCkgPT4gVCkge31cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm1ha2VWYWx1ZSgpO1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsdWUhO1xuICB9XG5cbiAgZ2V0IGluaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbml0aWFsaXplZDtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZhbHVlOiBUIHwgdW5kZWZpbmVkO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW50ZXJmYWNlIFF1ZXVlRW50cnkge1xuICBydW46IFZvaWRGdW5jdGlvbjtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2lnbmFscyA9IG5ldyBXZWFrU2V0PEFib3J0U2lnbmFsPigpO1xuICBwcml2YXRlIF9yZXNvbHZlPzogVm9pZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoc2lnbmFsICYmICF0aGlzLl9zaWduYWxzLmhhcyhzaWduYWwpKSB7XG4gICAgICB0aGlzLl9zaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB0aGlzLmZsdXNoKHNpZ25hbCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7XG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgICBmbigpXG4gICAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSByZXR1cm47XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKGNhbGxiYWNrOiAoY291bnQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKGNvdW50ICsgMSksIG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwidGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4oeyBmbiwgbWF4QXR0ZW1wdHMgPSAzLCB0aW1lb3V0IH06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5wb3coMiwgYXR0ZW1wdCkgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCBQYWNrZXQgfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFJldHVyblR5cGU8Rm9ybWF0Q29udGV4dFtcIm5ld1N0cmVhbVwiXT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG51bGwpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIFBhY2tldCwgUmF0aW9uYWwsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWQ29sb3JSYW5nZSxcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ3R4T3B0aW9ucyB7XG4gIGNvZGVjOiBDb2RlYztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29sb3JSYW5nZT86IEFWQ29sb3JSYW5nZTtcbiAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuVmlkZW9DdHgob3B0czogVmlkZW9DdHhPcHRpb25zLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICBjdHguYWxsb2NDb250ZXh0MyhvcHRzLmNvZGVjKTtcbiAgY3R4LmNvZGVjSWQgPSBvcHRzLmNvZGVjLmlkO1xuICBjdHgud2lkdGggPSBvcHRzLndpZHRoO1xuICBjdHguaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLmZwcyk7XG4gIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwob3B0cy5mcHMsIDEpO1xuICBjdHguZ29wU2l6ZSA9IG9wdHMuZnBzICogMjtcbiAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gIGlmIChvcHRzLmNvZGVjVGFnKSBjdHguY29kZWNUYWcgPSBvcHRzLmNvZGVjVGFnO1xuICBpZiAob3B0cy5jb2xvclJhbmdlICE9PSB1bmRlZmluZWQpIGN0eC5jb2xvclJhbmdlID0gb3B0cy5jb2xvclJhbmdlO1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICBwa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgRmlsdGVyQ29udGV4dCxcbiAgRmlsdGVyR3JhcGgsXG4gIEZpbHRlckluT3V0LFxuICBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9idWZTaW5rPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvcHRzLm91dFNhbXBsZUZtdCk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoaW5TYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2luUmF0ZSA9IGluU2FtcGxlUmF0ZTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIGlmICghaXNGaW5pdGUoc3JjW2ldISkpIHNyY1tpXSA9IDA7XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG4gICAgdXNpbmcgZnJhbWUgPSBGcmFtZS5mcm9tQXVkaW9CdWZmZXIoQnVmZmVyLmZyb20oc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHNyYy5ieXRlTGVuZ3RoKSwge1xuICAgICAgbmJTYW1wbGVzOiBuU2FtcGxlcyxcbiAgICAgIGZvcm1hdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICBzYW1wbGVSYXRlOiB0aGlzLl9pblJhdGUsXG4gICAgICBjaGFubmVsTGF5b3V0OiBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gICAgICBwdHM6IHRoaXMuX3B0cyxcbiAgICAgIHRpbWVCYXNlOiB7IG51bTogMSwgZGVuOiB0aGlzLl9pblJhdGUgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9wdHMgKz0gQmlnSW50KG5TYW1wbGVzKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKGZyYW1lKSwgXCJidWZmZXJzcmNBZGRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idWZTcmMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuZnJlZSgpO1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZfREVDT0RFUl9QTkcsXG4gIEZGbXBlZ0Vycm9yLFxuICB0eXBlIEZyYW1lLFxuICBQYWNrZXQsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuZXhwb3J0IGNsYXNzIENvZGVjU3RhdGUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgc3JjOiBGcmFtZTtcbiAgcmVhZG9ubHkgZHN0OiBGcmFtZTtcbiAgcmVhZG9ubHkgcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N3cz86IFNvZnR3YXJlU2NhbGVDb250ZXh0O1xuICBwcml2YXRlIF9wbmc/OiBDb2RlYztcblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRGVjb2RlckJ5TmFtZShGRl9ERUNPREVSX1BORyk7XG4gICAgb2soY29kZWMsIFwicG5nIGRlY29kZXIgdW5hdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIG5ldyBDb2RlY1N0YXRlKHdpZHRoLCBoZWlnaHQsIGNvZGVjKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBuZzogQ29kZWMpIHtcbiAgICB0aGlzLl9wbmcgPSBwbmc7XG4gICAgdGhpcy5zcmMgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICB0aGlzLmRzdCA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQKTtcbiAgICB0aGlzLnBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmVzaCBQTkcgZGVjb2RlciBjb250ZXh0LlxuICAgKiBUaGUgRkZtcGVnIFBORyBkZWNvZGVyIGFjY3VtdWxhdGVzIEFQTkcgYmxlbmRpbmcgc3RhdGVcbiAgICogYWNyb3NzIGZyYW1lcywgc28gYSBzaGFyZWQgaW5zdGFuY2UgY29ycnVwdHMgb3V0cHV0IHdoZW4gZGVjb2Rpbmcgc3RhbmRhbG9uZSBQTkdzLlxuICAgKi9cbiAgYXN5bmMgcG5nKCk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gICAgY29uc3QgcG5nID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIHBuZy5hbGxvY0NvbnRleHQzKHRoaXMuX3BuZyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5vcGVuMih0aGlzLl9wbmcpLCBcInBuZ0RlY29kZXIub3BlbjJcIik7XG4gICAgcmV0dXJuIHBuZztcbiAgfVxuXG4gIGFzeW5jIGRlY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPEZyYW1lPiB7XG4gICAgdXNpbmcgcG5nID0gYXdhaXQgdGhpcy5wbmcoKTtcbiAgICB0aGlzLnBrdC5kYXRhID0gcG5nRGF0YTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnNlbmRQYWNrZXQodGhpcy5wa3QpLCBcInBuZ0RlY29kZXIuc2VuZFBhY2tldFwiKTtcbiAgICB0aGlzLnBrdC51bnJlZigpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcucmVjZWl2ZUZyYW1lKHRoaXMuc3JjKSwgXCJwbmdEZWNvZGVyLnJlY2VpdmVGcmFtZVwiKTtcbiAgICByZXR1cm4gdGhpcy5zcmM7XG4gIH1cblxuICBnZXQgc3dzKCkge1xuICAgIGlmICghdGhpcy5fc3dzKSB7XG4gICAgICBjb25zdCBzd3MgPSBuZXcgU29mdHdhcmVTY2FsZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IGZtdCA9IHRoaXMuc3JjLmZvcm1hdCBhcyBBVlBpeGVsRm9ybWF0O1xuICAgICAgc3dzLmdldENvbnRleHQoXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIGZtdCxcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgICAgU1dTX0JJTElORUFSLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N3cyA9IHN3cztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N3cztcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5zcmNbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5kc3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5wa3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fc3dzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB6ZXJvcysrO1xuICAgIGVsc2UgemVyb3MgPSAwO1xuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSBidy53KDAsIDIpO1xuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSBidy53KDAsIDIpO1xuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHJldHVybiB2cHNEYXRhO1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IEFOTkVYX0JfU1RBUlRfQ09ERSwgZW5jb2RlTmFsSGVhZGVyLCB0eXBlIE5hbFVuaXQsIHJld3JpdGVOYWxMYXllcklkLCBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhVlBTIH0gZnJvbSBcIi4vdnBzXCI7XG5cbmNvbnN0IE5BTF9VTklUX1BSRUZJWF9TRUkgPSAzOTtcblxuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyB7XG4gIGJhc2VFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgYWxwaGFFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSAzMikgY29udGludWU7XG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gMzIgPyBidWlsZEFscGhhVlBTKG5hbC5kYXRhLCBvcHRzLndpZHRoLCBvcHRzLmhlaWdodCkgOiBuYWwuZGF0YTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICAgIGlmICghZW1pdHRlZC5oYXMobmFsLnR5cGUpKSB7XG4gICAgICBlbWl0dGVkLmFkZChuYWwudHlwZSk7XG4gICAgICBmb3IgKGNvbnN0IGFscGhhTmFsIG9mIGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW10pIHtcbiAgICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChhbHBoYU5hbC5kYXRhLCAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9VTklUX1BSRUZJWF9TRUksIDAsIDEpO1xuXG4gIGNvbnN0IGJpdHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHdyaXRlQml0cyA9ICh2YWw6IG51bWJlciwgbjogbnVtYmVyKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgfTtcblxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2FuY2VsX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX3VzZV9pZGNcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHdyaXRlQml0cygwLCAxKTtcblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHM6IE5hbFVuaXRbXSwgYWxwaGFOYWxzOiBOYWxVbml0W10pOiBCdWZmZXIge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBuYWwuZGF0YSk7XG4gIH1cbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlIDwgMzIpIHtcbiAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQobmFsLmRhdGEsIDEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVl9QSVhfRk1UX1lVVjQyMFAsIEZGX0VOQ09ERVJfSEVWQ19OVkVOQyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJLCBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB7IG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgSHdWaWRlb0VuY29kZXJPcHRpb25zIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmludGVyZmFjZSBOdmVuY1N0YXRlIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX3NlaUJ1ZmZlcjogQnVmZmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcbiAgcHJpdmF0ZSBfc2VpSW5qZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYWxwaGFCdWY/OiBCdWZmZXI7XG4gIHByaXZhdGUgX2FscGhhRnJhbWU/OiBGcmFtZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9zZWlCdWZmZXIgPSBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxOdmVuY0R1YWxMYXllckVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfSEVWQ19OVkVOQyk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19udmVuYyBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcblxuICAgIGNvbnN0IG52ZW5jT3B0cyA9IHsgcHJlc2V0OiBcInA0XCIsIGJmOiBcIjBcIiB9O1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgb3B0aW9uczogbnZlbmNPcHRzIH07XG4gICAgLy8gQkdSQSBkaXJlY3Qg4oCUIE5WRU5DIGNvbnZlcnRzIGludGVybmFsbHksIG5vIFNXUyBuZWVkZWRcbiAgICBjb25zdCBiYXNlQ3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBIH0sIFwibnZlbmMuYmFzZS5vcGVuMlwiKTtcbiAgICAvLyBBbHBoYSBhcyBZVVY0MjBQIOKAlCBtYXRjaGluZyBiaXRyYXRlL0dPUCBmb3IgY29tcGF0aWJsZSBTUFMgYWNyb3NzIGxheWVyc1xuICAgIGNvbnN0IGFscGhhQ3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0sIFwibnZlbmMuYWxwaGEub3BlbjJcIik7XG5cbiAgICBjb25zdCBiYXNlUGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIGNvbnN0IGFscGhhUGt0ID0gbWFrZVBhY2tldCgpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGJhc2VDdHgsIFwiaHZjMVwiKTtcblxuICAgIGNvbnN0IGJhc2VFeHRyYSA9IGJhc2VDdHguZXh0cmFEYXRhO1xuICAgIGNvbnN0IGFscGhhRXh0cmEgPSBhbHBoYUN0eC5leHRyYURhdGE7XG4gICAgaWYgKGJhc2VFeHRyYSAmJiBhbHBoYUV4dHJhKSB7XG4gICAgICBzdHJlYW0uY29kZWNwYXIuZXh0cmFkYXRhID0gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKHtcbiAgICAgICAgYmFzZUV4dHJhZGF0YTogYmFzZUV4dHJhLFxuICAgICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFFeHRyYSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0LCBzdHJlYW0gfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG5cbiAgICAvLyBBbHBoYTogZXh0cmFjdCBhbHBoYSBjaGFubmVsIOKGkiBZVVY0MjBQXG4gICAgY29uc3Qgc3JjID0gYmdyYUZyYW1lLmRhdGE/LlswXTtcbiAgICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICAgIGlmICghc3JjIHx8ICFzcmNMcykgdGhyb3cgbmV3IEVycm9yKFwiZW5jb2RlOiBtaXNzaW5nIEJHUkEgZGF0YVwiKTtcbiAgICBjb25zdCB3ID0gYmdyYUZyYW1lLndpZHRoO1xuICAgIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICAgIGNvbnN0IHlTaXplID0gdyAqIGg7XG4gICAgY29uc3QgdXZTaXplID0gKHcgPj4gMSkgKiAoaCA+PiAxKTtcbiAgICBpZiAoIXRoaXMuX2FscGhhQnVmKSB0aGlzLl9hbHBoYUJ1ZiA9IEJ1ZmZlci5hbGxvYyh5U2l6ZSArIHV2U2l6ZSAqIDIpO1xuICAgIGNvbnN0IGJ1ZiA9IHRoaXMuX2FscGhhQnVmO1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHc7IHgrKykge1xuICAgICAgICBidWZbeSAqIHcgKyB4XSA9IHNyY1t5ICogc3JjTHMgKyB4ICogNCArIDNdITtcbiAgICAgIH1cbiAgICB9XG4gICAgYnVmLmZpbGwoMTI4LCB5U2l6ZSwgeVNpemUgKyB1dlNpemUgKiAyKTtcblxuICAgIHRoaXMuX2FscGhhRnJhbWU/LmZyZWUoKTtcbiAgICB0aGlzLl9hbHBoYUZyYW1lID0gRnJhbWUuZnJvbVZpZGVvQnVmZmVyKGJ1ZiwgeyBmb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCwgd2lkdGg6IHcsIGhlaWdodDogaCB9KTtcbiAgICB0aGlzLl9hbHBoYUZyYW1lLnB0cyA9IHB0cztcbiAgICB0aGlzLl9hbHBoYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGFscGhhQ3R4LnNlbmRGcmFtZSh0aGlzLl9hbHBoYUZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5iYXNlQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLl9zLmFscGhhQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgdGhpcy5fYWxwaGFGcmFtZT8uZnJlZSgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbkludGVybGVhdmVkKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0LCBzdHJlYW0gfSA9IHRoaXMuX3M7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGJhc2VSID0gYXdhaXQgYmFzZUN0eC5yZWNlaXZlUGFja2V0KGJhc2VQa3QpO1xuICAgICAgY29uc3QgYWxwaGFSID0gYXdhaXQgYWxwaGFDdHgucmVjZWl2ZVBhY2tldChhbHBoYVBrdCk7XG5cbiAgICAgIGNvbnN0IGJhc2VSZWFkeSA9IGJhc2VSID49IDA7XG4gICAgICBjb25zdCBhbHBoYVJlYWR5ID0gYWxwaGFSID49IDA7XG4gICAgICBpZiAoIWJhc2VSZWFkeSAmJiAhYWxwaGFSZWFkeSkgYnJlYWs7XG5cbiAgICAgIC8vIEJvdGggbXVzdCBwcm9kdWNlIHBhY2tldHMgdG9nZXRoZXIgKGJmPTAgZW5zdXJlcyB0aGlzKVxuICAgICAgaWYgKGJhc2VSZWFkeSAhPT0gYWxwaGFSZWFkeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5WRU5DIGRlc3luYzogYmFzZT0ke2Jhc2VSZWFkeX0sIGFscGhhPSR7YWxwaGFSZWFkeX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VQa3QuZGF0YSEpO1xuICAgICAgY29uc3QgYWxwaGFOYWxzID0gc3BsaXROYWxVbml0cyhhbHBoYVBrdC5kYXRhISk7XG5cbiAgICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgICAgIGlmICghdGhpcy5fc2VpSW5qZWN0ZWQpIHtcbiAgICAgICAgY2h1bmtzLnB1c2godGhpcy5fc2VpQnVmZmVyKTtcbiAgICAgICAgdGhpcy5fc2VpSW5qZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY2h1bmtzLnB1c2goaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzLCBhbHBoYU5hbHMpKTtcblxuICAgICAgLy8gU2F2ZSB0aW1lc3RhbXBzIGJlZm9yZSBkYXRhIHJlcGxhY2VtZW50IChzZXR0ZXIgbWF5IHJlc2V0IHRoZW0pXG4gICAgICBjb25zdCBwdHMgPSBiYXNlUGt0LnB0cztcbiAgICAgIGNvbnN0IGR0cyA9IGJhc2VQa3QuZHRzO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBiYXNlUGt0LmR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5kYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgYmFzZVBrdC5wdHMgPSBwdHM7XG4gICAgICBiYXNlUGt0LmR0cyA9IGR0cztcbiAgICAgIGJhc2VQa3QuZHVyYXRpb24gPSBkdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChiYXNlUGt0KTtcblxuICAgICAgYmFzZVBrdC51bnJlZigpO1xuICAgICAgYWxwaGFQa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgdHlwZSBBVlBpeGVsRm9ybWF0LCB0eXBlIEZGVmlkZW9FbmNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyBjb2RlY05hbWUsIGNvZGVjVGFnLCBjb2RlY09wdHMsIG11eGVyLCAuLi5yZXN0IH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWQ09MX1JBTkdFX0pQRUcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBodzogSGFyZHdhcmVDb250ZXh0O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvVG9vbGJveEVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9Ub29sYm94RW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIik7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y192aWRlb3Rvb2xib3ggZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICB7XG4gICAgICAgIGNvZGVjLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEsXG4gICAgICAgIGNvbG9yUmFuZ2U6IEFWQ09MX1JBTkdFX0pQRUcsXG4gICAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgICAgb3B0aW9uczogeyBhbHBoYV9xdWFsaXR5OiBcIjFcIiB9LFxuICAgICAgfSxcbiAgICAgIFwidnRFbmMub3BlbjJcIixcbiAgICApO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBOdmVuY0R1YWxMYXllckVuY29kZXIgfSBmcm9tIFwiLi9udmVuY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVmlkZW9FbmNvZGVyKG9wdHM6IFZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgY29uc3QgaHcgPSBkaXNhYmxlSHdDb2RlYyA/IHVuZGVmaW5lZCA6IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIFZpZGVvVG9vbGJveCBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgVmlkZW9Ub29sYm94RW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3IH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcIkhhcmR3YXJlIGNvZGVjIHNlc3Npb24gbGltaXRzIHJlYWNoZWQsIHVzZSBzb2Z0d2FyZSBlbmNvZGVyXCIsIGUpO1xuICB9IGZpbmFsbHkge1xuICAgIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICBodz8uZGlzcG9zZSgpO1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBmcHMsXG4gICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgIGNvZGVjT3B0czogeyBwcmVzZXQ6IFwibWVkaXVtXCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgIGJpdHJhdGUsXG4gICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgbXV4ZXIsXG4gIH0pO1xuICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZfU0FNUExFX0ZNVF9GTFRQLCBGRl9FTkNPREVSX0FBQyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9saW1pdGVyXCI7XG5pbXBvcnQgeyBBdWRpb0VuY29kZXIgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBjcmVhdGVWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlLCB3aXRoQXVkaW8gPSBmYWxzZSB9ID0gb3B0cztcbiAgICBjb25zdCBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihvdXRGaWxlKTtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBjb2RlYywgaHcgfSA9IGF3YWl0IGNyZWF0ZVZpZGVvRW5jb2RlcihvcHRzLCBtdXhlcik7XG5cbiAgICBsZXQgYXVkaW86IEF1ZGlvRW5jb2RlciB8IHVuZGVmaW5lZDtcbiAgICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgICBhdWRpbyA9IGF3YWl0IEF1ZGlvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFRQLFxuICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDLFxuICAgICAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICAgIG11eGVyLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHtcbiAgICAgIHZpZGVvLFxuICAgICAgaHdWaWRlbyxcbiAgICAgIGF1ZGlvLFxuICAgICAgbXV4ZXIsXG4gICAgICBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLFxuICAgICAgb3V0RmlsZSxcbiAgICAgIGNvZGVjLFxuICAgICAgaHcsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShpbnB1dDogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICAgIHVzaW5nIGZyYW1lID0gdGhpcy5iZ3JhRnJhbWUoaW5wdXQpO1xuICAgICAgICBhd2FpdCBod1ZpZGVvLmVuY29kZShmcmFtZSwgbXV4ZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IHNyYywgZHN0LCBzd3MgfSA9IGNvZGVjITtcbiAgICAgIG9rKHN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHNyYy5tYWtlV3JpdGFibGUoKSwgXCJiZ3JhU3JjLm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzcmMuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYVNyYy5mcm9tQnVmZmVyXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGRzdC5tYWtlV3JpdGFibGUoKSwgXCJiZ3JhRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBzd3Muc2NhbGVGcmFtZShkc3QsIHNyYyksIFwiYmdyYVN3cy5zY2FsZUZyYW1lXCIpO1xuICAgICAgcmV0dXJuIHZpZGVvIS5lbmNvZGUoZHN0LCBtdXhlcik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGNvZGVjLCBtdXhlciwgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcztcbiAgICAgIGNvbnN0IGNzID0gY29kZWMgPz8gKGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IGF3YWl0IGNzLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgICAgICBhd2FpdCBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoY3MuZHN0Lm1ha2VXcml0YWJsZSgpLCBcInBuZ0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNzLnN3cy5zY2FsZUZyYW1lKGNzLmRzdCwgc3JjKSwgXCJwbmdTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICAgICAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNzLmRzdCwgbXV4ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoIWNvZGVjKSBjc1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhdWRpbywgbGltaXRlciwgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGF1ZGlvKSBhd2FpdCBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IGF1ZGlvLmVuY29kZShwY20sIG11eGVyKSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgbXV4ZXIsIGxpbWl0ZXIgfSA9IHRoaXMuX3M7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHVzaW5nIF9tID0gbXV4ZXI7XG4gICAgICB1c2luZyBfdiA9IHZpZGVvO1xuICAgICAgdXNpbmcgX2h2ID0gaHdWaWRlbztcbiAgICAgIHVzaW5nIF9hID0gYXVkaW87XG4gICAgICBhd2FpdCBsaW1pdGVyLmRyYWluKCk7XG4gICAgICBhd2FpdCBhdWRpbz8uZmx1c2gobXV4ZXIpO1xuICAgICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgICAgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZyZWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Mub3V0RmlsZTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgbXV4ZXIsIGxpbWl0ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgbGltaXRlci5kcmFpbigpO1xuICAgIHZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgaHdWaWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF1ZGlvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZnJlZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdXNpbmcgX2NvZGVjID0gdGhpcy5fcy5jb2RlYztcbiAgICB0aGlzLl9zLmh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIGNvbnN0IGZyYW1lID0gbWFrZUZyYW1lKHRoaXMuX3Mud2lkdGgsIHRoaXMuX3MuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cbn1cbiJdfQ==
1
+ import'source-map-support/register.js';import {a,b,p}from'./chunk-QZHVDBDU.js';export{x as DEFAULT_DURATION,w as DEFAULT_FPS,v as DEFAULT_HEIGHT,y as DEFAULT_OUT_FILE,u as DEFAULT_WIDTH,o as Logger,r as PUP_ARGS_KEY,z as RenderSchema,A as defaultRenderOptions,t as exec,p as logger,q as noerr,s as pargs,d as parseNumber,e as parseString,c as penv,B as pup,l as pupApp,j as pupDeterministic,h as pupDisableGPU,i as pupDisableHwCodec,m as pupIpcSocket,f as pupLogLevel,k as pupPkgRoot,g as pupUseInnerProxy,n as pupWindowTolerant}from'./chunk-QZHVDBDU.js';import {setTimeout as setTimeout$1}from'timers/promises';import {FormatContext,FFmpegError,Frame,Codec,CodecContext,Rational,FilterGraph,Filter,FilterInOut,FF_DECODER_PNG,SoftwareScaleContext,AV_PIX_FMT_YUVA420P as AV_PIX_FMT_YUVA420P$1,SWS_BILINEAR,Packet,AV_PIX_FMT_BGRA as AV_PIX_FMT_BGRA$1}from'node-av';import {FF_ENCODER_AAC,AV_SAMPLE_FMT_FLTP,FF_HWDEVICE_TYPE_VIDEOTOOLBOX,FF_HWDEVICE_TYPE_CUDA,AV_PIX_FMT_YUVA420P,FF_ENCODER_LIBX265,AV_CHANNEL_LAYOUT_STEREO,AV_CODEC_FLAG_GLOBAL_HEADER,AV_SAMPLE_FMT_FLT,AVERROR_EAGAIN,AVERROR_EOF,AV_PIX_FMT_BGRA,FF_ENCODER_HEVC_NVENC,AV_PIX_FMT_YUV420P,AVCOL_RANGE_JPEG}from'node-av/constants';import {ok}from'assert';import {HardwareContext}from'node-av/api';var q=class{constructor(e){this.makeValue=e;}makeValue;get value(){return this._initialized||(this._value=this.makeValue(),this._initialized=true),this._value}get initialized(){return this._initialized}_initialized=false;_value};var I=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,i)=>{this._queue.push({run:()=>{if(t?.aborted){i(t.reason),this.next();return}this._active++,e().then(a=>{this._active--,o(a),this.next();}).catch(a=>{this._active--,i(a),this.next();});},reject:i,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};function Y(r){return new Promise(e=>setTimeout(e,r))}function Tt(r,e){let t,o=false;async function i(a){await r(a),!o&&(t=setTimeout(()=>i(a+1),e));}return t=setTimeout(()=>i(0),e),()=>{o=true,clearTimeout(t);}}function Ot({fn:r,maxAttempts:e=3,timeout:t}){let o=new Error(`timeout over ${t}ms`);return async function(...i){let a=0;for(;;)try{let s=[r(...i)];return t&&s.push(setTimeout$1(t).then(()=>{throw o})),await Promise.race(s)}catch(s){if(a++,a>=e)throw s;await Y(Math.pow(2,a)*100+Math.random()*100);}}}var T=class{_ctx;_opened=false;constructor(e,t){this._ctx=new FormatContext,FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){this._opened||(FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}async writePacket(e){FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){this._opened&&(await this._ctx.writeTrailer(),await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose](),this._opened=false);}};async function y(r,e){let t=new CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new Rational(1,r.fps),t.framerate=new Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange);for(let[o,i]of Object.entries(r.options??{}))t.setOption(o,i);return FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function B(r,e,t){let o=new Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function _(){let r=new Packet;return r.alloc(),r}async function E(r,e,t,o){for(;;){let i=await r.receivePacket(e);if(i===AVERROR_EAGAIN||i===AVERROR_EOF)break;FFmpegError.throwIfError(i,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var Ae={[AV_SAMPLE_FMT_FLT]:"flt",[AV_SAMPLE_FMT_FLTP]:"fltp"},R=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=_(),this._filterFrame=new Frame,this._filterFrame.alloc();}static async create(e){let t=Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(o);return new r(o,i,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new FilterGraph;t.alloc();let o=Filter.getByName("abuffer"),i=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let a=Filter.getByName("abuffersink"),s=t.createFilter(a,"sink");if(!s)throw new Error("Failed to create abuffersink");let n=`aformat=sample_fmts=${Ae[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,u=FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),m=FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);FFmpegError.throwIfError(t.parsePtr(n,m,u),"graph.parsePtr"),FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let m=0;m<o.length;m++)isFinite(o[m])||(o[m]=0);let i=o.length>>1;let a$1=a(s,Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,format:AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(i);FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(a$1),"buffersrcAddFrame");await this.drain(t);}catch(c){var n=c,u=true;}finally{b(s,n,u);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===AVERROR_EAGAIN||t===AVERROR_EOF)break;FFmpegError.throwIfError(t,"buffersinkGetFrame"),FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return E(this._ctx,this._pkt,this._stream,e)}};var v=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=Codec.findDecoderByName(FF_DECODER_PNG);return ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=B(e,t,AV_PIX_FMT_BGRA$1),this.dst=B(e,t,AV_PIX_FMT_YUVA420P$1),this.pkt=_();}async png(){let e=new CodecContext;return e.allocContext3(this._png),FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=a(o,await this.png());this.pkt.data=e;FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(i){var a$1=i,s=true;}finally{b(o,a$1,s);}}get sws(){if(!this._sws){let e=new SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,AV_PIX_FMT_YUVA420P$1,SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};function L(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let i=0;i<8;i++)o=o<<1|r[t*8+i];e[t]=o;}return e}var N=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let i=0;i<o-1;i++)this.bits.push(0);for(let i=o-1;i>=0;i--)this.bits.push(t>>i&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let i=0;i<o;i++)this.bits.push(e[t+i]);}},M=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var P=Buffer.from([0,0,0,1]);function re(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,i=e&7;return {type:t,layerId:o,temporalId:i}}function W(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function C(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let i=t+o;if(i+2>r.length)break;let a=r.length;for(let n=i+2;n<r.length-2;n++)if(r[n]===0&&r[n+1]===0&&(r[n+2]===1||n+3<r.length&&r[n+2]===0&&r[n+3]===1)){a=n;break}let{type:s,layerId:c}=re(r[i],r[i+1]);e.push({type:s,layerId:c,data:r.subarray(i,a)}),t=a;}return e}function X(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=re(t[0],t[1]),[a,s]=W(o,e,i);return t[0]=a,t[1]=s,t}function oe(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function ie(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}function Me(r){let e=new M(oe(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function Le(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function Oe(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let i=0;i<e.maxSubLayersMinus1;i++)r.w(0,2);for(let i=e.maxSubLayersMinus1;i<8;i++)r.w(0,2);}r.flag(0);for(let i=0;i<16;i++)r.flag(i===2||i===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function ae(r,e,t){let o=Me(r);if(!o)return r;let i=new N;return Le(i,o),Oe(i,o,e,t),i.bits.push(1),i.align(0),ie(L(i.bits))}var De=39;function ne(r){let{baseExtradata:e,alphaExtradata:t}=r,o=C(e),i=C(t),a=new Map;for(let n of i){if(n.type===32)continue;let u=a.get(n.type)??[];u.push(n),a.set(n.type,u);}let s=[],c=new Set;for(let n of o){let u=n.type===32?ae(n.data,r.width,r.height):n.data;if(s.push(P,u),!c.has(n.type)){c.add(n.type);for(let m of a.get(n.type)??[])s.push(P,X(m.data,1));}}return s.push($()),Buffer.concat(s)}function $(){let[t,o]=W(De,0,1),i=[],a=(s,c)=>{for(let n=c-1;n>=0;n--)i.push(s>>n&1);};for(a(0,1),a(0,3),a(0,3),a(0,9),a(255,9),a(0,1),a(0,1),a(1,1);i.length%8!==0;)a(0,1);return Buffer.concat([P,Buffer.from([t,o]),Buffer.from([165,4]),L(i),Buffer.from([128])])}function se(r,e){let t=[];for(let o of r)t.push(P,o.data);for(let o of e)o.type<32&&t.push(P,X(o.data,1));return Buffer.concat(t)}var O=class r{_s;_seiBuffer;_pts=0n;_seiInjected=false;_alphaBuf;_alphaFrame;constructor(e){this._s=e,this._seiBuffer=$();}static async create(e){let{width:t,height:o,fps:i,bitrate:a,muxer:s}=e,c=Codec.findEncoderByName(FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let u={codec:c,width:t,height:o,fps:i,bitrate:a,options:{preset:"p4",bf:"0"}},m=await y({...u,pixelFormat:AV_PIX_FMT_BGRA},"nvenc.base.open2"),p=await y({...u,pixelFormat:AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),x=_(),l=_(),w=s.addStream(m,"hvc1"),V=m.extraData,S=p.extraData;return V&&S&&(w.codecpar.extradata=ne({baseExtradata:V,alphaExtradata:S,width:t,height:o})),new r({baseCtx:m,alphaCtx:p,basePkt:x,alphaPkt:l,stream:w})}async encode(e,t){let{baseCtx:o,alphaCtx:i}=this._s,a=this._pts++;e.pts=a,e.duration=1n,FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame");let s=e.data?.[0],c=e.linesize?.[0];if(!s||!c)throw new Error("encode: missing BGRA data");let n=e.width,u=e.height,m=n*u,p=(n>>1)*(u>>1);this._alphaBuf||(this._alphaBuf=Buffer.alloc(m+p*2));let x=this._alphaBuf;for(let l=0;l<u;l++)for(let w=0;w<n;w++)x[l*n+w]=s[l*c+w*4+3];x.fill(128,m,m+p*2),this._alphaFrame?.free(),this._alphaFrame=Frame.fromVideoBuffer(x,{format:AV_PIX_FMT_YUV420P,width:n,height:u}),this._alphaFrame.pts=a,this._alphaFrame.duration=1n,FFmpegError.throwIfError(await i.sendFrame(this._alphaFrame),"alpha.sendFrame"),await this.drainInterleaved(t);}async flush(e){await this._s.baseCtx.sendFrame(null),await this._s.alphaCtx.sendFrame(null),await this.drainInterleaved(e);}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:i}=this._s;e.free(),t.free(),this._alphaFrame?.free(),o.freeContext(),i.freeContext();}async drainInterleaved(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:a,stream:s}=this._s;for(;;){let c=await t.receivePacket(i),n=await o.receivePacket(a),u=c>=0,m=n>=0;if(!u&&!m)break;if(u!==m)throw new Error(`NVENC desync: base=${u}, alpha=${m}`);let p=C(i.data),x=C(a.data),l=[];this._seiInjected||(l.push(this._seiBuffer),this._seiInjected=true),l.push(se(p,x));let w=i.pts,V=i.dts,S=i.duration;i.data=Buffer.concat(l),i.pts=w,i.dts=V,i.duration=S===0n?1n:S,i.streamIndex=s.index,i.rescaleTs(t.timeBase,s.timeBase),await e.writePacket(i),i.unref(),a.unref();}}};var D=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{codecName:t,codecTag:o,codecOpts:i,muxer:a,...s}=e,c=Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let n=await y({codec:c,...s,codecTag:o,options:i},"videoCtx.open2"),u=a.addStream(n,o);return new r(n,_(),u)}async encode(e,t){e.pts=this._pts++,e.duration=1n,FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return E(this._ctx,this._pkt,this._stream,e)}};var H=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{width:t,height:o,fps:i,hw:a,bitrate:s,muxer:c}=e,n=a.getEncoderCodec("hevc");if(!n)throw new Error("hevc_videotoolbox encoder not found");let u=await y({codec:n,width:t,height:o,fps:i,bitrate:s,pixelFormat:AV_PIX_FMT_BGRA,colorRange:AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),m=c.addStream(u,"hvc1");return new r(u,_(),m)}async encode(e,t){e.pts=this._pts++,e.duration=1n,FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return E(this._ctx,this._pkt,this._stream,e)}};var G="[Encoder]";async function me(r,e){let{width:t,height:o,fps:i,bitrate:a=8e6,disableHwCodec:s=false}=r,c=s?void 0:HardwareContext.auto()??void 0;try{if(c?.deviceTypeName===FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return p.debug(G,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await H.create({width:t,height:o,fps:i,hw:c,bitrate:a,muxer:e}),hw:c};if(c?.deviceTypeName===FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return p.debug(G,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await O.create({width:t,height:o,fps:i,hw:c,bitrate:a,muxer:e}),hw:c}}catch(u){p.warn(G,"Hardware codec session limits reached, use software encoder",u);}finally{c?.dispose();}return p.debug(G,"using software libx265 HEVC alpha encoder"),{video:await D.create({width:t,height:o,fps:i,codecName:FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:a,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:e}),codec:await v.create(t,o)}}var de=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,outFile:i,withAudio:a=false}=e,s=new T(i),{video:c,hwVideo:n,codec:u,hw:m}=await me(e,s),p;return a&&(p=await R.create({outSampleRate:44100,outSampleFmt:AV_SAMPLE_FMT_FLTP,codecName:FF_ENCODER_AAC,globalHeader:true,bitrate:128e3,muxer:s})),await s.open(),new r({video:c,hwVideo:n,audio:p,muxer:s,limiter:new I(1),outFile:i,codec:u,hw:m,width:t,height:o})}setupAudio(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:a$1}=this._s;if(t){var u=[];try{let l=a(u,this.bgraFrame(e));await t.encode(l,a$1);return}catch(m){var p=m,x=true;}finally{b(u,p,x);}}let{src:s,dst:c,sws:n}=i;return ok(n,"sws not initialized"),FFmpegError.throwIfError(s.makeWritable(),"bgraSrc.makeWritable"),FFmpegError.throwIfError(s.fromBuffer(e),"bgraSrc.fromBuffer"),FFmpegError.throwIfError(c.makeWritable(),"bgraDst.makeWritable"),FFmpegError.throwIfError(await n.scaleFrame(c,s),"bgraSws.scaleFrame"),o.encode(c,a$1)});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:a,width:s,height:c}=this._s,n=i??await v.create(s,c);try{let u=await n.decodePNG(e);t?await t.encode(u,a):(FFmpegError.throwIfError(n.dst.makeWritable(),"pngDst.makeWritable"),FFmpegError.throwIfError(await n.sws.scaleFrame(n.dst,u),"pngSws.scaleFrame"),await o.encode(n.dst,a));}finally{i||n[Symbol.dispose]();}});}async encodeAudio(e){let{audio:t,limiter:o,muxer:i}=this._s;t&&await o.schedule(()=>t.encode(e,i));}async finish(){let{video:e,hwVideo:t,audio:o,muxer:i,limiter:a$1}=this._s;try{var s=[];try{let p=a(s,i,!0);let x=a(s,e);let l=a(s,t);let w=a(s,o);await a$1.drain();await o?.flush(i);t?await t.flush(i):await e.flush(i);}catch(c){var n=c,u=!0;}finally{var m=b(s,n,u);m&&await m;}}finally{this.free();}return this._s.outFile}async[Symbol.asyncDispose](){if(this._disposed)return;let{video:e,hwVideo:t,audio:o,muxer:i,limiter:a}=this._s;await a.drain(),e?.[Symbol.dispose](),t?.[Symbol.dispose](),o?.[Symbol.dispose](),await i[Symbol.asyncDispose](),this.free();}free(){var t=[];try{if(this._disposed)return;this._disposed=!0;let e=a(t,this._s.codec);this._s.hw?.dispose();}catch(o){var i=o,a$1=true;}finally{b(t,i,a$1);}}bgraFrame(e){let t=B(this._s.width,this._s.height,AV_PIX_FMT_BGRA);return FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};export{I as ConcurrencyLimiter,de as EncoderPipeline,T as FormatMuxer,q as Lazy,Tt as periodical,Y as sleep,Ot as useRetry};//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2xhenkudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9hdWRpby50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbmFsLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92cHMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvcGlwZWxpbmUudHMiXSwibmFtZXMiOlsiTGF6eSIsIm1ha2VWYWx1ZSIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwiZm4iLCJzaWduYWwiLCJyZXNvbHZlIiwicmVqZWN0IiwidiIsImUiLCJyIiwia2VlcCIsImVudHJ5Iiwic2xlZXAiLCJtcyIsInBlcmlvZGljYWwiLCJjYWxsYmFjayIsInRva2VuIiwiY2xvc2VkIiwidGljayIsImNvdW50IiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXQiLCJ0aW1lb3V0RXJyb3IiLCJhcmdzIiwiYXR0ZW1wdCIsInByb21pc2VzIiwic2V0VGltZW91dCIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiRkZtcGVnRXJyb3IiLCJjb2RlY0N0eCIsImNvZGVjVGFnIiwic3RyZWFtIiwicGt0Iiwib3BlblZpZGVvQ3R4Iiwib3B0cyIsImxhYmVsIiwiY3R4IiwiQ29kZWNDb250ZXh0IiwiUmF0aW9uYWwiLCJBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIiLCJrIiwibWFrZUZyYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsImNvZGVjIiwiQ29kZWMiLCJBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8iLCJpblNhbXBsZVJhdGUiLCJncmFwaCIsIkZpbHRlckdyYXBoIiwiYWJ1ZmZlciIsIkZpbHRlciIsImJ1ZlNyYyIsImFidWZmZXJzaW5rIiwiYnVmU2luayIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJfc3RhY2siLCJzcmMiLCJpIiwiblNhbXBsZXMiLCJfX3VzaW5nIiwiXyIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJDb2RlY1N0YXRlIiwiX0NvZGVjU3RhdGUiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiZGF0YSIsInplcm9zIiwiQU5ORVhfQl9TVEFSVF9DT0RFIiwicGFyc2VOYWxUeXBlIiwiaGVhZGVyMCIsImhlYWRlcjEiLCJ0eXBlIiwibGF5ZXJJZCIsInRlbXBvcmFsSWQiLCJlbmNvZGVOYWxIZWFkZXIiLCJieXRlMCIsImJ5dGUxIiwic3BsaXROYWxVbml0cyIsImJpdHN0cmVhbSIsIm5hbHMiLCJzY0xlbiIsIm5hbFN0YXJ0IiwibmFsRW5kIiwiaiIsInJld3JpdGVOYWxMYXllcklkIiwibmFsIiwib3V0IiwiYjAiLCJiMSIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24iLCJhZGRFbXVsYXRpb25QcmV2ZW50aW9uIiwiZXh0cmFjdFBUTCIsInZwc0RhdGEiLCJiciIsIm1heFN1YkxheWVyc01pbnVzMSIsInB0bFN0YXJ0Iiwid3JpdGVCYXNlVlBTIiwiYnciLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJOQUxfVU5JVF9QUkVGSVhfU0VJIiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImNodW5rcyIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJOdmVuY0R1YWxMYXllckVuY29kZXIiLCJfTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwicyIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJjb21tb24iLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJiYXNlRXh0cmEiLCJhbHBoYUV4dHJhIiwiYmdyYUZyYW1lIiwicHRzIiwic3JjTHMiLCJ3IiwiaCIsInlTaXplIiwidXZTaXplIiwieSIsIngiLCJiYXNlUiIsImFscGhhUiIsImJhc2VSZWFkeSIsImFscGhhUmVhZHkiLCJkdHMiLCJkdXJhdGlvbiIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY09wdHMiLCJyZXN0IiwiVmlkZW9Ub29sYm94RW5jb2RlciIsIl9WaWRlb1Rvb2xib3hFbmNvZGVyIiwiaHciLCJBVkNPTF9SQU5HRV9KUEVHIiwiVEFHIiwiY3JlYXRlVmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJIYXJkd2FyZUNvbnRleHQiLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsImxvZ2dlciIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkVuY29kZXJQaXBlbGluZSIsIl9FbmNvZGVyUGlwZWxpbmUiLCJvdXRGaWxlIiwid2l0aEF1ZGlvIiwidmlkZW8iLCJod1ZpZGVvIiwiYXVkaW8iLCJGRl9FTkNPREVSX0FBQyIsInNhbXBsZVJhdGUiLCJpbnB1dCIsImRzdCIsImNzIiwibGltaXRlciIsIl9tIiwiX3YiLCJfaHYiLCJfYSIsIl9wcm9taXNlIiwiX2NvZGVjIl0sIm1hcHBpbmdzIjoiMHVDQUVPLElBQU1BLENBQUFBLENBQU4sS0FBYyxDQUNuQixXQUFBLENBQXFCQyxDQUFBQSxDQUFvQixDQUFwQixJQUFBLENBQUEsU0FBQSxDQUFBQSxFQUFxQixDQUFyQixTQUFBLENBRXJCLElBQUksS0FBQSxFQUFXLENBQ2IsT0FBSyxJQUFBLENBQUssWUFBQSxHQUNSLElBQUEsQ0FBSyxNQUFBLENBQVMsSUFBQSxDQUFLLFNBQUEsRUFBVSxDQUM3QixLQUFLLFlBQUEsQ0FBZSxJQUFBLENBQUEsQ0FFZixJQUFBLENBQUssTUFDZCxDQUVBLElBQUksV0FBQSxFQUF1QixDQUN6QixPQUFPLElBQUEsQ0FBSyxZQUNkLENBRVEsWUFBQSxDQUFlLEtBQUEsQ0FDZixNQUNWLEVDWE8sSUFBTUMsRUFBTixLQUF5QixDQU05QixXQUFBLENBQXFCQyxDQUFBQSxDQUF3QixDQUF4QixJQUFBLENBQUEsY0FBQSxDQUFBQSxFQUF5QixDQUF6QixlQUxiLE9B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QUEsQ0FDMUQsSUFBQSxJQUFTLEVBQUlDLENBQUFBLENBQUksa0JBQUEsQ0FBb0IsQ0FBQSxDQUFJLENBQUEsQ0FBRyxDQUFBLEVBQUEsQ0FBS0QsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDNUQsQ0FFQUEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1QsSUFBQSxJQUFTLENBQUEsQ0FBSSxFQUFHLENBQUEsQ0FBSSxFQUFBLENBQUksQ0FBQSxFQUFBLENBQUtBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUEsR0FBTSxDQUFBLEVBQUssQ0FBQSxHQUFNLENBQUMsQ0FBQSxDQUN2REEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBRVRBLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLQyxDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLENBQUFBLENBQUksTUFBQSxDQUFTQSxFQUFJLFFBQVEsQ0FBQSxDQUU1REQsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLENBQUEsQ0FBRWxHLENBQUFBLENBQU8sRUFBRSxDQUFBLENBQ2RrRyxDQUFBQSxDQUFHLENBQUEsQ0FBRWpHLENBQUFBLENBQVEsRUFBRSxFQUNmaUcsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBRVBBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FB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LENBQUcsTUFBQSxDQUFRZ0QsZUFBZSxDQUFBLENBQ3RFLE9BQUE3RCxXQUFBQSxDQUFZLFlBQUEsQ0FBYWlCLENBQUFBLENBQU0sVUFBQSxDQUFXMEssQ0FBSyxDQUFBLENBQUcsc0JBQXNCLENBQUEsQ0FDakUxSyxDQUNULENBQ0YiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgY2xhc3MgTGF6eTxUPiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1ha2VWYWx1ZTogKCkgPT4gVCkge31cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm1ha2VWYWx1ZSgpO1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsdWUhO1xuICB9XG5cbiAgZ2V0IGluaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbml0aWFsaXplZDtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZhbHVlOiBUIHwgdW5kZWZpbmVkO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW50ZXJmYWNlIFF1ZXVlRW50cnkge1xuICBydW46IFZvaWRGdW5jdGlvbjtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2lnbmFscyA9IG5ldyBXZWFrU2V0PEFib3J0U2lnbmFsPigpO1xuICBwcml2YXRlIF9yZXNvbHZlPzogVm9pZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoc2lnbmFsICYmICF0aGlzLl9zaWduYWxzLmhhcyhzaWduYWwpKSB7XG4gICAgICB0aGlzLl9zaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB0aGlzLmZsdXNoKHNpZ25hbCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7XG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgICBmbigpXG4gICAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSByZXR1cm47XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKGNhbGxiYWNrOiAoY291bnQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKGNvdW50ICsgMSksIG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwidGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4oeyBmbiwgbWF4QXR0ZW1wdHMgPSAzLCB0aW1lb3V0IH06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5wb3coMiwgYXR0ZW1wdCkgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCBQYWNrZXQgfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFJldHVyblR5cGU8Rm9ybWF0Q29udGV4dFtcIm5ld1N0cmVhbVwiXT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG51bGwpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIFBhY2tldCwgUmF0aW9uYWwsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWQ29sb3JSYW5nZSxcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ3R4T3B0aW9ucyB7XG4gIGNvZGVjOiBDb2RlYztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29sb3JSYW5nZT86IEFWQ29sb3JSYW5nZTtcbiAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuVmlkZW9DdHgob3B0czogVmlkZW9DdHhPcHRpb25zLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICBjdHguYWxsb2NDb250ZXh0MyhvcHRzLmNvZGVjKTtcbiAgY3R4LmNvZGVjSWQgPSBvcHRzLmNvZGVjLmlkO1xuICBjdHgud2lkdGggPSBvcHRzLndpZHRoO1xuICBjdHguaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLmZwcyk7XG4gIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwob3B0cy5mcHMsIDEpO1xuICBjdHguZ29wU2l6ZSA9IG9wdHMuZnBzICogMjtcbiAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gIGlmIChvcHRzLmNvZGVjVGFnKSBjdHguY29kZWNUYWcgPSBvcHRzLmNvZGVjVGFnO1xuICBpZiAob3B0cy5jb2xvclJhbmdlICE9PSB1bmRlZmluZWQpIGN0eC5jb2xvclJhbmdlID0gb3B0cy5jb2xvclJhbmdlO1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICBwa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgRmlsdGVyQ29udGV4dCxcbiAgRmlsdGVyR3JhcGgsXG4gIEZpbHRlckluT3V0LFxuICBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9idWZTaW5rPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvcHRzLm91dFNhbXBsZUZtdCk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoaW5TYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2luUmF0ZSA9IGluU2FtcGxlUmF0ZTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIGlmICghaXNGaW5pdGUoc3JjW2ldISkpIHNyY1tpXSA9IDA7XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG4gICAgdXNpbmcgZnJhbWUgPSBGcmFtZS5mcm9tQXVkaW9CdWZmZXIoQnVmZmVyLmZyb20oc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHNyYy5ieXRlTGVuZ3RoKSwge1xuICAgICAgbmJTYW1wbGVzOiBuU2FtcGxlcyxcbiAgICAgIGZvcm1hdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICBzYW1wbGVSYXRlOiB0aGlzLl9pblJhdGUsXG4gICAgICBjaGFubmVsTGF5b3V0OiBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gICAgICBwdHM6IHRoaXMuX3B0cyxcbiAgICAgIHRpbWVCYXNlOiB7IG51bTogMSwgZGVuOiB0aGlzLl9pblJhdGUgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9wdHMgKz0gQmlnSW50KG5TYW1wbGVzKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKGZyYW1lKSwgXCJidWZmZXJzcmNBZGRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idWZTcmMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuZnJlZSgpO1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZfREVDT0RFUl9QTkcsXG4gIEZGbXBlZ0Vycm9yLFxuICB0eXBlIEZyYW1lLFxuICBQYWNrZXQsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuZXhwb3J0IGNsYXNzIENvZGVjU3RhdGUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgc3JjOiBGcmFtZTtcbiAgcmVhZG9ubHkgZHN0OiBGcmFtZTtcbiAgcmVhZG9ubHkgcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N3cz86IFNvZnR3YXJlU2NhbGVDb250ZXh0O1xuICBwcml2YXRlIF9wbmc/OiBDb2RlYztcblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRGVjb2RlckJ5TmFtZShGRl9ERUNPREVSX1BORyk7XG4gICAgb2soY29kZWMsIFwicG5nIGRlY29kZXIgdW5hdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIG5ldyBDb2RlY1N0YXRlKHdpZHRoLCBoZWlnaHQsIGNvZGVjKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBuZzogQ29kZWMpIHtcbiAgICB0aGlzLl9wbmcgPSBwbmc7XG4gICAgdGhpcy5zcmMgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICB0aGlzLmRzdCA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQKTtcbiAgICB0aGlzLnBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmVzaCBQTkcgZGVjb2RlciBjb250ZXh0LlxuICAgKiBUaGUgRkZtcGVnIFBORyBkZWNvZGVyIGFjY3VtdWxhdGVzIEFQTkcgYmxlbmRpbmcgc3RhdGVcbiAgICogYWNyb3NzIGZyYW1lcywgc28gYSBzaGFyZWQgaW5zdGFuY2UgY29ycnVwdHMgb3V0cHV0IHdoZW4gZGVjb2Rpbmcgc3RhbmRhbG9uZSBQTkdzLlxuICAgKi9cbiAgYXN5bmMgcG5nKCk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gICAgY29uc3QgcG5nID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIHBuZy5hbGxvY0NvbnRleHQzKHRoaXMuX3BuZyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5vcGVuMih0aGlzLl9wbmcpLCBcInBuZ0RlY29kZXIub3BlbjJcIik7XG4gICAgcmV0dXJuIHBuZztcbiAgfVxuXG4gIGFzeW5jIGRlY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPEZyYW1lPiB7XG4gICAgdXNpbmcgcG5nID0gYXdhaXQgdGhpcy5wbmcoKTtcbiAgICB0aGlzLnBrdC5kYXRhID0gcG5nRGF0YTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnNlbmRQYWNrZXQodGhpcy5wa3QpLCBcInBuZ0RlY29kZXIuc2VuZFBhY2tldFwiKTtcbiAgICB0aGlzLnBrdC51bnJlZigpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcucmVjZWl2ZUZyYW1lKHRoaXMuc3JjKSwgXCJwbmdEZWNvZGVyLnJlY2VpdmVGcmFtZVwiKTtcbiAgICByZXR1cm4gdGhpcy5zcmM7XG4gIH1cblxuICBnZXQgc3dzKCkge1xuICAgIGlmICghdGhpcy5fc3dzKSB7XG4gICAgICBjb25zdCBzd3MgPSBuZXcgU29mdHdhcmVTY2FsZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IGZtdCA9IHRoaXMuc3JjLmZvcm1hdCBhcyBBVlBpeGVsRm9ybWF0O1xuICAgICAgc3dzLmdldENvbnRleHQoXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIGZtdCxcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgICAgU1dTX0JJTElORUFSLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N3cyA9IHN3cztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N3cztcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5zcmNbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5kc3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5wa3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fc3dzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB6ZXJvcysrO1xuICAgIGVsc2UgemVyb3MgPSAwO1xuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSBidy53KDAsIDIpO1xuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSBidy53KDAsIDIpO1xuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHJldHVybiB2cHNEYXRhO1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IEFOTkVYX0JfU1RBUlRfQ09ERSwgZW5jb2RlTmFsSGVhZGVyLCB0eXBlIE5hbFVuaXQsIHJld3JpdGVOYWxMYXllcklkLCBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhVlBTIH0gZnJvbSBcIi4vdnBzXCI7XG5cbmNvbnN0IE5BTF9VTklUX1BSRUZJWF9TRUkgPSAzOTtcblxuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyB7XG4gIGJhc2VFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgYWxwaGFFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSAzMikgY29udGludWU7XG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gMzIgPyBidWlsZEFscGhhVlBTKG5hbC5kYXRhLCBvcHRzLndpZHRoLCBvcHRzLmhlaWdodCkgOiBuYWwuZGF0YTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICAgIGlmICghZW1pdHRlZC5oYXMobmFsLnR5cGUpKSB7XG4gICAgICBlbWl0dGVkLmFkZChuYWwudHlwZSk7XG4gICAgICBmb3IgKGNvbnN0IGFscGhhTmFsIG9mIGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW10pIHtcbiAgICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChhbHBoYU5hbC5kYXRhLCAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9VTklUX1BSRUZJWF9TRUksIDAsIDEpO1xuXG4gIGNvbnN0IGJpdHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHdyaXRlQml0cyA9ICh2YWw6IG51bWJlciwgbjogbnVtYmVyKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgfTtcblxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2FuY2VsX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX3VzZV9pZGNcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHdyaXRlQml0cygwLCAxKTtcblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHM6IE5hbFVuaXRbXSwgYWxwaGFOYWxzOiBOYWxVbml0W10pOiBCdWZmZXIge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBuYWwuZGF0YSk7XG4gIH1cbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlIDwgMzIpIHtcbiAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQobmFsLmRhdGEsIDEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVl9QSVhfRk1UX1lVVjQyMFAsIEZGX0VOQ09ERVJfSEVWQ19OVkVOQyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJLCBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB7IG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgSHdWaWRlb0VuY29kZXJPcHRpb25zIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmludGVyZmFjZSBOdmVuY1N0YXRlIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX3NlaUJ1ZmZlcjogQnVmZmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcbiAgcHJpdmF0ZSBfc2VpSW5qZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYWxwaGFCdWY/OiBCdWZmZXI7XG4gIHByaXZhdGUgX2FscGhhRnJhbWU/OiBGcmFtZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9zZWlCdWZmZXIgPSBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxOdmVuY0R1YWxMYXllckVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfSEVWQ19OVkVOQyk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19udmVuYyBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcblxuICAgIGNvbnN0IG52ZW5jT3B0cyA9IHsgcHJlc2V0OiBcInA0XCIsIGJmOiBcIjBcIiB9O1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgb3B0aW9uczogbnZlbmNPcHRzIH07XG4gICAgLy8gQkdSQSBkaXJlY3Qg4oCUIE5WRU5DIGNvbnZlcnRzIGludGVybmFsbHksIG5vIFNXUyBuZWVkZWRcbiAgICBjb25zdCBiYXNlQ3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBIH0sIFwibnZlbmMuYmFzZS5vcGVuMlwiKTtcbiAgICAvLyBBbHBoYSBhcyBZVVY0MjBQIOKAlCBtYXRjaGluZyBiaXRyYXRlL0dPUCBmb3IgY29tcGF0aWJsZSBTUFMgYWNyb3NzIGxheWVyc1xuICAgIGNvbnN0IGFscGhhQ3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0sIFwibnZlbmMuYWxwaGEub3BlbjJcIik7XG5cbiAgICBjb25zdCBiYXNlUGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIGNvbnN0IGFscGhhUGt0ID0gbWFrZVBhY2tldCgpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGJhc2VDdHgsIFwiaHZjMVwiKTtcblxuICAgIGNvbnN0IGJhc2VFeHRyYSA9IGJhc2VDdHguZXh0cmFEYXRhO1xuICAgIGNvbnN0IGFscGhhRXh0cmEgPSBhbHBoYUN0eC5leHRyYURhdGE7XG4gICAgaWYgKGJhc2VFeHRyYSAmJiBhbHBoYUV4dHJhKSB7XG4gICAgICBzdHJlYW0uY29kZWNwYXIuZXh0cmFkYXRhID0gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKHtcbiAgICAgICAgYmFzZUV4dHJhZGF0YTogYmFzZUV4dHJhLFxuICAgICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFFeHRyYSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0LCBzdHJlYW0gfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG5cbiAgICAvLyBBbHBoYTogZXh0cmFjdCBhbHBoYSBjaGFubmVsIOKGkiBZVVY0MjBQXG4gICAgY29uc3Qgc3JjID0gYmdyYUZyYW1lLmRhdGE/LlswXTtcbiAgICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICAgIGlmICghc3JjIHx8ICFzcmNMcykgdGhyb3cgbmV3IEVycm9yKFwiZW5jb2RlOiBtaXNzaW5nIEJHUkEgZGF0YVwiKTtcbiAgICBjb25zdCB3ID0gYmdyYUZyYW1lLndpZHRoO1xuICAgIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICAgIGNvbnN0IHlTaXplID0gdyAqIGg7XG4gICAgY29uc3QgdXZTaXplID0gKHcgPj4gMSkgKiAoaCA+PiAxKTtcbiAgICBpZiAoIXRoaXMuX2FscGhhQnVmKSB0aGlzLl9hbHBoYUJ1ZiA9IEJ1ZmZlci5hbGxvYyh5U2l6ZSArIHV2U2l6ZSAqIDIpO1xuICAgIGNvbnN0IGJ1ZiA9IHRoaXMuX2FscGhhQnVmO1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHc7IHgrKykge1xuICAgICAgICBidWZbeSAqIHcgKyB4XSA9IHNyY1t5ICogc3JjTHMgKyB4ICogNCArIDNdITtcbiAgICAgIH1cbiAgICB9XG4gICAgYnVmLmZpbGwoMTI4LCB5U2l6ZSwgeVNpemUgKyB1dlNpemUgKiAyKTtcblxuICAgIHRoaXMuX2FscGhhRnJhbWU/LmZyZWUoKTtcbiAgICB0aGlzLl9hbHBoYUZyYW1lID0gRnJhbWUuZnJvbVZpZGVvQnVmZmVyKGJ1ZiwgeyBmb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCwgd2lkdGg6IHcsIGhlaWdodDogaCB9KTtcbiAgICB0aGlzLl9hbHBoYUZyYW1lLnB0cyA9IHB0cztcbiAgICB0aGlzLl9hbHBoYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGFscGhhQ3R4LnNlbmRGcmFtZSh0aGlzLl9hbHBoYUZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5iYXNlQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLl9zLmFscGhhQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgdGhpcy5fYWxwaGFGcmFtZT8uZnJlZSgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbkludGVybGVhdmVkKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0LCBzdHJlYW0gfSA9IHRoaXMuX3M7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGJhc2VSID0gYXdhaXQgYmFzZUN0eC5yZWNlaXZlUGFja2V0KGJhc2VQa3QpO1xuICAgICAgY29uc3QgYWxwaGFSID0gYXdhaXQgYWxwaGFDdHgucmVjZWl2ZVBhY2tldChhbHBoYVBrdCk7XG5cbiAgICAgIGNvbnN0IGJhc2VSZWFkeSA9IGJhc2VSID49IDA7XG4gICAgICBjb25zdCBhbHBoYVJlYWR5ID0gYWxwaGFSID49IDA7XG4gICAgICBpZiAoIWJhc2VSZWFkeSAmJiAhYWxwaGFSZWFkeSkgYnJlYWs7XG5cbiAgICAgIC8vIEJvdGggbXVzdCBwcm9kdWNlIHBhY2tldHMgdG9nZXRoZXIgKGJmPTAgZW5zdXJlcyB0aGlzKVxuICAgICAgaWYgKGJhc2VSZWFkeSAhPT0gYWxwaGFSZWFkeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5WRU5DIGRlc3luYzogYmFzZT0ke2Jhc2VSZWFkeX0sIGFscGhhPSR7YWxwaGFSZWFkeX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VQa3QuZGF0YSEpO1xuICAgICAgY29uc3QgYWxwaGFOYWxzID0gc3BsaXROYWxVbml0cyhhbHBoYVBrdC5kYXRhISk7XG5cbiAgICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgICAgIGlmICghdGhpcy5fc2VpSW5qZWN0ZWQpIHtcbiAgICAgICAgY2h1bmtzLnB1c2godGhpcy5fc2VpQnVmZmVyKTtcbiAgICAgICAgdGhpcy5fc2VpSW5qZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY2h1bmtzLnB1c2goaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzLCBhbHBoYU5hbHMpKTtcblxuICAgICAgLy8gU2F2ZSB0aW1lc3RhbXBzIGJlZm9yZSBkYXRhIHJlcGxhY2VtZW50IChzZXR0ZXIgbWF5IHJlc2V0IHRoZW0pXG4gICAgICBjb25zdCBwdHMgPSBiYXNlUGt0LnB0cztcbiAgICAgIGNvbnN0IGR0cyA9IGJhc2VQa3QuZHRzO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBiYXNlUGt0LmR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5kYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgYmFzZVBrdC5wdHMgPSBwdHM7XG4gICAgICBiYXNlUGt0LmR0cyA9IGR0cztcbiAgICAgIGJhc2VQa3QuZHVyYXRpb24gPSBkdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChiYXNlUGt0KTtcblxuICAgICAgYmFzZVBrdC51bnJlZigpO1xuICAgICAgYWxwaGFQa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgdHlwZSBBVlBpeGVsRm9ybWF0LCB0eXBlIEZGVmlkZW9FbmNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyBjb2RlY05hbWUsIGNvZGVjVGFnLCBjb2RlY09wdHMsIG11eGVyLCAuLi5yZXN0IH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWQ09MX1JBTkdFX0pQRUcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBodzogSGFyZHdhcmVDb250ZXh0O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvVG9vbGJveEVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9Ub29sYm94RW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIik7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y192aWRlb3Rvb2xib3ggZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICB7XG4gICAgICAgIGNvZGVjLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEsXG4gICAgICAgIGNvbG9yUmFuZ2U6IEFWQ09MX1JBTkdFX0pQRUcsXG4gICAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgICAgb3B0aW9uczogeyBhbHBoYV9xdWFsaXR5OiBcIjFcIiB9LFxuICAgICAgfSxcbiAgICAgIFwidnRFbmMub3BlbjJcIixcbiAgICApO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBOdmVuY0R1YWxMYXllckVuY29kZXIgfSBmcm9tIFwiLi9udmVuY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVmlkZW9FbmNvZGVyKG9wdHM6IFZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgY29uc3QgaHcgPSBkaXNhYmxlSHdDb2RlYyA/IHVuZGVmaW5lZCA6IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIFZpZGVvVG9vbGJveCBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgVmlkZW9Ub29sYm94RW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3IH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcIkhhcmR3YXJlIGNvZGVjIHNlc3Npb24gbGltaXRzIHJlYWNoZWQsIHVzZSBzb2Z0d2FyZSBlbmNvZGVyXCIsIGUpO1xuICB9IGZpbmFsbHkge1xuICAgIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBmcHMsXG4gICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgIGNvZGVjT3B0czogeyBwcmVzZXQ6IFwibWVkaXVtXCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgIGJpdHJhdGUsXG4gICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgbXV4ZXIsXG4gIH0pO1xuICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZfU0FNUExFX0ZNVF9GTFRQLCBGRl9FTkNPREVSX0FBQyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9saW1pdGVyXCI7XG5pbXBvcnQgeyBBdWRpb0VuY29kZXIgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBjcmVhdGVWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlLCB3aXRoQXVkaW8gPSBmYWxzZSB9ID0gb3B0cztcbiAgICBjb25zdCBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihvdXRGaWxlKTtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBjb2RlYywgaHcgfSA9IGF3YWl0IGNyZWF0ZVZpZGVvRW5jb2RlcihvcHRzLCBtdXhlcik7XG5cbiAgICBsZXQgYXVkaW86IEF1ZGlvRW5jb2RlciB8IHVuZGVmaW5lZDtcbiAgICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgICBhdWRpbyA9IGF3YWl0IEF1ZGlvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFRQLFxuICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDLFxuICAgICAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICAgIG11eGVyLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHtcbiAgICAgIHZpZGVvLFxuICAgICAgaHdWaWRlbyxcbiAgICAgIGF1ZGlvLFxuICAgICAgbXV4ZXIsXG4gICAgICBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLFxuICAgICAgb3V0RmlsZSxcbiAgICAgIGNvZGVjLFxuICAgICAgaHcsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShpbnB1dDogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICAgIHVzaW5nIGZyYW1lID0gdGhpcy5iZ3JhRnJhbWUoaW5wdXQpO1xuICAgICAgICBhd2FpdCBod1ZpZGVvLmVuY29kZShmcmFtZSwgbXV4ZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IHNyYywgZHN0LCBzd3MgfSA9IGNvZGVjITtcbiAgICAgIG9rKHN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHNyYy5tYWtlV3JpdGFibGUoKSwgXCJiZ3JhU3JjLm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzcmMuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYVNyYy5mcm9tQnVmZmVyXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGRzdC5tYWtlV3JpdGFibGUoKSwgXCJiZ3JhRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBzd3Muc2NhbGVGcmFtZShkc3QsIHNyYyksIFwiYmdyYVN3cy5zY2FsZUZyYW1lXCIpO1xuICAgICAgcmV0dXJuIHZpZGVvIS5lbmNvZGUoZHN0LCBtdXhlcik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGNvZGVjLCBtdXhlciwgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcztcbiAgICAgIGNvbnN0IGNzID0gY29kZWMgPz8gKGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IGF3YWl0IGNzLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgICAgICBhd2FpdCBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoY3MuZHN0Lm1ha2VXcml0YWJsZSgpLCBcInBuZ0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNzLnN3cy5zY2FsZUZyYW1lKGNzLmRzdCwgc3JjKSwgXCJwbmdTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICAgICAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNzLmRzdCwgbXV4ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoIWNvZGVjKSBjc1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhdWRpbywgbGltaXRlciwgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGF1ZGlvKSBhd2FpdCBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IGF1ZGlvLmVuY29kZShwY20sIG11eGVyKSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgbXV4ZXIsIGxpbWl0ZXIgfSA9IHRoaXMuX3M7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHVzaW5nIF9tID0gbXV4ZXI7XG4gICAgICB1c2luZyBfdiA9IHZpZGVvO1xuICAgICAgdXNpbmcgX2h2ID0gaHdWaWRlbztcbiAgICAgIHVzaW5nIF9hID0gYXVkaW87XG4gICAgICBhd2FpdCBsaW1pdGVyLmRyYWluKCk7XG4gICAgICBhd2FpdCBhdWRpbz8uZmx1c2gobXV4ZXIpO1xuICAgICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgICAgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZyZWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Mub3V0RmlsZTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgbXV4ZXIsIGxpbWl0ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgbGltaXRlci5kcmFpbigpO1xuICAgIHZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgaHdWaWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF1ZGlvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZnJlZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdXNpbmcgX2NvZGVjID0gdGhpcy5fcy5jb2RlYztcbiAgICB0aGlzLl9zLmh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIGNvbnN0IGZyYW1lID0gbWFrZUZyYW1lKHRoaXMuX3Mud2lkdGgsIHRoaXMuX3MuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cbn1cbiJdfQ==