pup-recorder 0.7.2 → 0.7.4
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/app.cjs +3 -3
- package/dist/runtime/shoot.global.js +2 -2
- package/package.json +1 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
(function(){'use strict';function H(n){queueMicrotask(()=>{Object.defineProperty(n,"error",{configurable:true,value:{code:4,message:"audio disabled in deterministic mode"}}),n.dispatchEvent(new Event("error"));});}function G(n){let t=document.createElement("audio");return t.preload="none",n&&(t.src=n,H(t)),t}function L(){let n=window.Audio;window.Audio=G,window.Audio.prototype=n.prototype;let t=HTMLAudioElement.prototype;t.load=function(){H(this);},t.play=function(){return H(this),Promise.reject(new DOMException("audio disabled in deterministic mode","NotSupportedError"))};}function O(){window.__HF_MODE__="export";}function C(){if(window.__pup_tick__)return;let n=Date,t=n.now(),e=0,i=0,a=[],o={},r=1,f=()=>(i+=.01,i);function m(...c){return this instanceof m?c.length?new(Function.prototype.bind.apply(n,[null,...c])):new n(t+e+f()):new n(t+e).toString()}m.prototype=n.prototype,m.now=()=>t+e+f(),m.parse=n.parse,m.UTC=n.UTC,window.Date=m,performance.now=()=>e+f(),window.requestAnimationFrame=c=>{let u=r++;return a.push({id:u,cb:c}),u},window.cancelAnimationFrame=c=>{a=a.filter(u=>u.id!==c);},window.setTimeout=(c,u)=>{let d=r++;return o[d]={type:"timeout",cb:c,delay:u||0,next:e+(u||0)},d},window.clearTimeout=c=>{typeof c=="number"&&delete o[c];},window.setInterval=(c,u)=>{let d=r++,h=Math.max(u||0,1);return o[d]={type:"interval",cb:c,delay:h,next:e+h},d},window.clearInterval=c=>{typeof c=="number"&&delete o[c];};function w(c){try{typeof c=="string"?new Function(c)():c();}catch(u){console.error("[Tick] error:",u instanceof Error&&u.stack||u);}}function y(c,u){try{c(u);}catch(d){console.error("[Tick] error:",d instanceof Error&&d.stack||d);}}let g=new WeakMap;function b(c){try{let u=c.effect?.getComputedTiming().endTime;return typeof u=="number"&&Number.isFinite(u)?u:void 0}catch{return}}function p(c){let u;try{u=document.getAnimations();}catch{return}for(let d of u){let h=d.playState;if(h==="idle"||h==="finished"){g.delete(d);continue}let T=typeof d.playbackRate=="number"?d.playbackRate:1;if(T===0)continue;let E=g.get(d);if(E){if(!E.adopted&&h!=="paused"){let S=typeof d.currentTime=="number"?d.currentTime:0;E.startMs=c-S/T,E.adopted=true;try{d.pause();}catch{}}}else {let S=typeof d.currentTime=="number"?d.currentTime:0;if(E={startMs:c-S/T,adopted:h!=="paused"},g.set(d,E),E.adopted)try{d.pause();}catch{}}if(!E.adopted)continue;let v=(c-E.startMs)*T,A=b(d);if(T>0?A!==void 0&&v>=A:v<=0){g.delete(d);try{d.finish();}catch{}continue}d.currentTime=v;}}function s(c){e=c,i=0;for(let d of Object.keys(o)){let h=o[Number(d)];if(h)for(;h.next<=e;){if(w(h.cb),h.type==="timeout"){delete o[Number(d)];break}h.next+=h.delay;}}let u=a.splice(0);for(let d of u)y(d.cb,e);p(e);}window.__pup_tick__={process:s};}var K=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","transform","transformOrigin","filter","clipPath","boxShadow","opacity","mixBlendMode","mask","zIndex","position","left","top","right","bottom"];function P(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function k(n,t){let e=window.getComputedStyle(n);t.style.position="absolute",t.style.left=`${n.offsetLeft}px`,t.style.top=`${n.offsetTop}px`,t.style.width=`${n.offsetWidth}px`,t.style.height=`${n.offsetHeight}px`;for(let i of K){if(i==="position"||i==="left"||i==="top"||i==="right"||i==="bottom")continue;let a=e.getPropertyValue(P(i));a&&t.style.setProperty(P(i),a);}return false}function F(n){let t=n.getBoundingClientRect(),e=window.devicePixelRatio||1;return {width:Math.max(1,Math.round(t.width*e)),height:Math.max(1,Math.round(t.height*e))}}function D(n,t){let e=document.createElement("canvas");if(e.dataset.pupVideoOverlay="1",e.style.pointerEvents="none",n.style.visibility="hidden",n.muted=true,(n.parentNode||document.body).insertBefore(e,n.nextSibling),k(n,e),t)try{e.getContext("2d").drawImage(t,0,0,e.width,e.height);}catch{}return e}function I(n,t,e,i,a){if(a==="none")return [(e-n)/2,(i-t)/2,n,t];if(a==="contain"||a==="scale-down"){let o=Math.min(e/n,i/t),r=a==="scale-down"?Math.min(1,o):o,f=r*n,m=r*t;return [(e-f)/2,(i-m)/2,f,m]}if(a==="cover"){let o=Math.max(e/n,i/t),r=o*n,f=o*t;return [(e-r)/2,(i-f)/2,r,f]}return [0,0,e,i]}var M="pup-frame://";var N="[VideoHook]";function _(n){return {length:n>0?1:0,start:()=>0,end:()=>n}}function l(n,t){n.dispatchEvent(new Event(t));}function Q(n){if(n.rvfc.size===0)return;let t=[...n.rvfc.values()];n.rvfc.clear();let e=performance.now(),i={presentationTime:e,expectedDisplayTime:e,width:n.meta.frameWidth,height:n.meta.frameHeight,mediaTime:n.currentTime,presentedFrames:n.presentedFrames};for(let a of t)a(e,i);}async function z(n,t,e,i){let a=n.cache.cacheOf(e.meta.id);a.readers.set(e,i);let o=a.bitmaps.get(i);if(!o){n.cache.prefetch(e,i+1,9);let m=await n.cache.fetch(e,i);if(n.sessions.get(t)!==e)return;if(!m){!e.paused&&!e.waiting&&(e.waiting=true,l(t,"waiting"));return}o=m;}e.waiting&&(e.waiting=false,e.paused||l(t,"playing"));let r=e.cv,f=I(o.width,o.height,r.width,r.height,e.objectFit);e.ctx.clearRect(0,0,r.width,r.height),e.ctx.drawImage(o,f[0],f[1],f[2],f[3]),e.lastDrawnIdx=i,e.presentedFrames++,Q(e),n.cache.prefetch(e,i+1,10),n.cache.evict(a);}function $(n,t){let e=Math.max(0,t-n.currMs)/1e3;n.currMs=t;let i=[];return document.querySelectorAll("video").forEach(a=>{let o=a,r=n.sessions.get(o);if(!r||r.dead)return;if(r.meta&&r.meta.frameWidth<r.meta.width&&!n.attaching.has(o)&&F(o).width>r.meta.frameWidth*1.05){n.reattach(o,r);return}if(!r.meta&&n.attaching.has(o)){i.push(n.attaching.get(o).then(()=>{}));return}if(k(o,r.cv),!r.meta)return;(r.cv.width!==r.meta.frameWidth||r.cv.height!==r.meta.frameHeight)&&(r.cv.width=r.meta.frameWidth,r.cv.height=r.meta.frameHeight,r.lastDrawnIdx=-1),!r.paused&&!r.ended&&(r.currentTime+=e*(o.playbackRate||1),r.maxReached=Math.max(r.maxReached,r.currentTime),r.currentTime>=r.meta.duration?o.loop?r.currentTime=r.currentTime%r.meta.duration:(r.currentTime=r.meta.duration,r.paused=true,r.ended=true,l(o,"ended")):l(o,"timeupdate"));let f=Math.max(1,Math.round(r.currentTime*r.meta.fps));f!==r.lastDrawnIdx&&i.push(z(n,o,r,f));}),Promise.all(i)}var Y=8e3,x=class{_caches=new Map;cacheOf(t){let e=this._caches.get(t);return e||(e={bitmaps:new Map,inFlight:new Map,readers:new Map},this._caches.set(t,e)),e}fetch(t,e){let i=t.meta;if(!i)return Promise.resolve(void 0);let a=this.cacheOf(i.id),o=a.inFlight.get(e);if(o)return o;let r=a.bitmaps.get(e);if(r)return Promise.resolve(r);let f=i.frameWidth,m=i.frameHeight,w=new Promise(y=>{let g=p=>{a.inFlight.delete(e),p&&a.bitmaps.set(e,p),y(p);};fetch(`${M}frame?id=${i.id}&idx=${e}`).then(p=>p.ok?p.arrayBuffer():void 0).then(p=>p&&p.byteLength===f*m*4?createImageBitmap(new ImageData(new Uint8ClampedArray(p),f,m)):void 0).then(p=>g(p)).catch(()=>g(void 0));setTimeout(()=>g(void 0),Y);});return a.inFlight.set(e,w),w}prefetch(t,e,i){let a=t.meta;if(!a)return;let o=Math.max(1,Math.round(a.duration*a.fps));for(let r=e;r<e+i;r++)r<1||r>o||this.fetch(t,r);}evict(t){let e=1/0;if(t.readers.forEach(a=>{a<e&&(e=a);}),!Number.isFinite(e))return;let i=e-2;t.bitmaps.forEach((a,o)=>{o<i&&(a.close(),t.bitmaps.delete(o));});}release(t,e){let i=this._caches.get(t);i&&(i.readers.delete(e),!(i.readers.size>0)&&(i.bitmaps.forEach(a=>{a.close();}),this._caches.delete(t),fetch(`${M}close?id=${t}`,{keepalive:true})));}};function j(n){let t=HTMLVideoElement.prototype,e=HTMLMediaElement.prototype,i=s=>Object.getOwnPropertyDescriptor(t,s)||Object.getOwnPropertyDescriptor(e,s),a=i("currentTime"),o=i("src"),r=i("playbackRate"),f=t.pause,m=t.requestVideoFrameCallback,w=t.cancelVideoFrameCallback,y=t.getVideoPlaybackQuality,g=t.load,b=n.sessions,p=(s,c)=>{let u=i(s)?.get;if(!u)throw new Error(`media_shim: no native getter for ${s}`);Object.defineProperty(t,s,{configurable:true,get(){let d=b.get(this);return d?c(d):u.call(this)}});};if(p("paused",s=>s.paused),p("ended",s=>s.ended),p("readyState",s=>s.readyState),p("networkState",s=>s.networkState),p("error",s=>s.error??null),p("seeking",s=>s.seeking),p("buffered",s=>_(s.meta?s.meta.duration:0)),p("seekable",s=>_(s.meta?s.meta.duration:0)),p("played",s=>_(s.maxReached)),t.play=function(){let s=b.get(this);return s?(n.resume(this,s),Promise.resolve()):n.attach(this).then(c=>{c&&n.resume(this,c);})},t.pause=function(){let s=b.get(this);if(!s){f.call(this);return}s.paused||(s.paused=true,l(this,"pause"));},a?.get&&a.set){let s=a.get,c=a.set;Object.defineProperty(t,"currentTime",{configurable:true,get(){let u=b.get(this);return u?u.currentTime:s.call(this)},set(u){let d=b.get(this);if(!d){c.call(this,u);return}let h=d.meta?d.meta.duration:u;d.currentTime=Math.max(0,Math.min(u,h)),d.maxReached=Math.max(d.maxReached,d.currentTime),d.currentTime<h&&(d.ended=false),d.seeking=true,l(this,"seeking"),d.seeking=false,l(this,"seeked"),l(this,"timeupdate");}});}if(r?.set){let s=r.set;Object.defineProperty(t,"playbackRate",{configurable:true,get:r.get,set(c){s.call(this,c),b.has(this)&&l(this,"ratechange");}});}if(t.requestVideoFrameCallback=function(s){let c=b.get(this);if(!c)return m.call(this,s);let u=++n.rvfcSeq;return c.rvfc.set(u,s),u},t.cancelVideoFrameCallback=function(s){let c=b.get(this);if(!c){w.call(this,s);return}c.rvfc.delete(s);},t.getVideoPlaybackQuality=function(){let s=b.get(this);return s?{creationTime:performance.now(),totalVideoFrames:s.presentedFrames,droppedVideoFrames:0,corruptedVideoFrames:0}:y.call(this)},t.load=function(){if(!b.has(this))return g.call(this);n.detach(this),l(this,"emptied"),this.__pup_last_src__=void 0,n.attach(this);},o?.set){let s=o.set;Object.defineProperty(t,"src",{configurable:true,get:o.get,set(c){s.call(this,c),n.onSrcChange(this);}});}}function q(n,t){return {meta:void 0,cv:t,ctx:t.getContext("2d"),paused:!(n.autoplay||!n.paused),currentTime:0,ended:false,lastDrawnIdx:-1,dead:false,objectFit:window.getComputedStyle(n).objectFit||"fill",readyState:0,networkState:0,seeking:false,waiting:false,error:void 0,presentedFrames:0,maxReached:0,rvfc:new Map}}function W(n,t,e){t.dead=true,t.error=e,t.networkState=3,console.error(N,`${e.message} src=${n.src||n.currentSrc}`),l(n,"error");}async function B(n,t){let{video:e,state:i,src:a,birthMs:o,native:r}=t,f=Number.parseInt(e.dataset.pupFps||"30",10);i.networkState=2,l(e,"loadstart");let m;try{let g=r?"":`&w=${i.cv.width}&h=${i.cv.height}&fit=${encodeURIComponent(i.objectFit)}`;m=await fetch(`${M}open?src=${encodeURIComponent(a)}&fps=${f}${g}`);}catch(g){return W(e,i,{code:2,message:`open failed: ${g instanceof Error?g.message:String(g)}`})}if(n.sessions.get(e)!==i)return;if(!m.ok)return W(e,i,{code:3,message:`open ${m.status}: ${await m.text()}`});let w=await m.json();if(n.sessions.get(e)!==i)return;i.meta=w,i.currentTime=i.paused?0:Math.max(0,(n.currMs-o)/1e3);let y=e.videoWidth>0;return Object.defineProperty(e,"videoWidth",{value:w.width,configurable:true}),Object.defineProperty(e,"videoHeight",{value:w.height,configurable:true}),Object.defineProperty(e,"duration",{value:w.duration,configurable:true}),i.readyState=1,y||(l(e,"durationchange"),l(e,"loadedmetadata")),i.readyState=4,y||(l(e,"loadeddata"),l(e,"canplay"),l(e,"canplaythrough")),i.networkState=1,y||(l(e,"suspend"),i.paused||(l(e,"play"),l(e,"playing"))),r||n.cache.prefetch(i,1,10),i}var R=class{sessions=new WeakMap;attaching=new WeakMap;opening=new Set;cache=new x;rvfcSeq=0;currMs=0;_lastSnapshot=new WeakMap;install(){j(this),this.scan(document.documentElement),new MutationObserver(t=>{for(let e of t){if(e.type==="attributes"&&e.target instanceof HTMLVideoElement&&e.attributeName==="src"){this.onSrcChange(e.target);continue}e.addedNodes.forEach(i=>{i instanceof Element&&this.scan(i);}),e.removedNodes.forEach(i=>{i instanceof HTMLVideoElement&&this.detach(i);});}}).observe(document,{subtree:true,childList:true,attributes:true,attributeFilter:["src"]}),window.__pup_video__={advance:t=>$(this,t),ready:()=>this.ready()};}attach(t,e=false){let i=this.sessions.get(t);if(i)return Promise.resolve(i);let a=this.attaching.get(t);if(a)return a;let o=t.src||t.currentSrc;if(!o||/^(blob:|data:|mediastream:)/i.test(o))return Promise.resolve(void 0);let r=D(t,this._lastSnapshot.get(t)),f=q(t,r);this.sessions.set(t,f);let m=B(this,{video:t,state:f,src:o,birthMs:this.currMs,native:e}).finally(()=>{this.attaching.delete(t),this.opening.delete(m);});return this.attaching.set(t,m),this.opening.add(m),m}async ready(){await Promise.allSettled([...this.opening]);}resume(t,e){!e.paused&&!e.ended||(e.paused=false,e.ended=false,l(t,"play"),l(t,"playing"));}detach(t){let e=this.sessions.get(t);if(e){if(e.meta){if(e.lastDrawnIdx>=0)try{let i=new OffscreenCanvas(e.cv.width,e.cv.height),a=i.getContext("2d");if(!a)throw new Error("no 2d context");a.drawImage(e.cv,0,0),this._lastSnapshot.set(t,i);}catch{}this.cache.release(e.meta.id,e);}e.cv.remove(),this.sessions.delete(t),this.attaching.delete(t);}}onSrcChange(t){let e=t.src||t.currentSrc||"";t.__pup_last_src__!==e&&(t.__pup_last_src__=e,this.sessions.has(t)&&this.detach(t),this.attach(t));}reattach(t,e){let i=e.currentTime,a=e.paused,o=e.ended;this.detach(t),this.attach(t,true).then(r=>{r&&(r.currentTime=i,r.paused=a,r.ended=o);});}scan(t){t&&(t.tagName==="VIDEO"&&this.attach(t),t.querySelectorAll&&t.querySelectorAll("video").forEach(e=>{this.attach(e);}));}};function U(){window.__pup_video__||new R().install();}window.self!==window.top&&(L(),O(),C(),U());
|
|
1
|
+
(function(){'use strict';function A(i){queueMicrotask(()=>{Object.defineProperty(i,"error",{configurable:true,value:{code:4,message:"audio disabled in deterministic mode"}}),i.dispatchEvent(new Event("error"));});}function G(i){let e=document.createElement("audio");return e.preload="none",i&&(e.src=i,A(e)),e}function P(){let i=window.Audio;window.Audio=G,window.Audio.prototype=i.prototype;let e=HTMLAudioElement.prototype;e.load=function(){A(this);},e.play=function(){return A(this),Promise.reject(new DOMException("audio disabled in deterministic mode","NotSupportedError"))};}function F(){window.__HF_MODE__="export";}function D(){if(window.__pup_tick__)return;let i=Date,e=i.now(),t=0,n=0,o=[],a={},r=1,u=()=>(n+=.01,n);function f(...c){return this instanceof f?c.length?new(Function.prototype.bind.apply(i,[null,...c])):new i(e+t+u()):new i(e+t).toString()}f.prototype=i.prototype,f.now=()=>e+t+u(),f.parse=i.parse,f.UTC=i.UTC,window.Date=f,performance.now=()=>t+u(),window.requestAnimationFrame=c=>{let m=r++;return o.push({id:m,cb:c}),m},window.cancelAnimationFrame=c=>{o=o.filter(m=>m.id!==c);},window.setTimeout=(c,m)=>{let d=r++;return a[d]={type:"timeout",cb:c,delay:m||0,next:t+(m||0)},d},window.clearTimeout=c=>{typeof c=="number"&&delete a[c];},window.setInterval=(c,m)=>{let d=r++,g=Math.max(m||0,1);return a[d]={type:"interval",cb:c,delay:g,next:t+g},d},window.clearInterval=c=>{typeof c=="number"&&delete a[c];};function w(c){try{typeof c=="string"?new Function(c)():c();}catch(m){console.error("[Tick] error:",m instanceof Error&&m.stack||m);}}function y(c,m){try{c(m);}catch(d){console.error("[Tick] error:",d instanceof Error&&d.stack||d);}}let h=new WeakMap;function b(c){try{let m=c.effect?.getComputedTiming().endTime;return typeof m=="number"&&Number.isFinite(m)?m:void 0}catch{return}}function p(c){let m;try{m=document.getAnimations();}catch{return}for(let d of m){let g=d.playState;if(g==="idle"||g==="finished"){h.delete(d);continue}let _=typeof d.playbackRate=="number"?d.playbackRate:1;if(_===0)continue;let E=h.get(d);if(E){if(!E.adopted&&g!=="paused"){let R=typeof d.currentTime=="number"?d.currentTime:0;E.startMs=c-R/_,E.adopted=true;try{d.pause();}catch{}}}else {let R=typeof d.currentTime=="number"?d.currentTime:0;if(E={startMs:c-R/_,adopted:g!=="paused"},h.set(d,E),E.adopted)try{d.pause();}catch{}}if(!E.adopted)continue;let k=(c-E.startMs)*_,C=b(d);if(_>0?C!==void 0&&k>=C:k<=0){h.delete(d);try{d.finish();}catch{}continue}d.currentTime=k;}}function s(c){t=c,n=0;for(let d of Object.keys(a)){let g=a[Number(d)];if(g)for(;g.next<=t;){if(w(g.cb),g.type==="timeout"){delete a[Number(d)];break}g.next+=g.delay;}}let m=o.splice(0);for(let d of m)y(d.cb,t);p(t);}window.__pup_tick__={process:s};}var K=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","transform","transformOrigin","filter","clipPath","boxShadow","opacity","mixBlendMode","mask","zIndex","objectFit","objectPosition","position","left","top","right","bottom"];function I(i){return i.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function L(i,e){let t=window.getComputedStyle(i);e.style.position="absolute",e.style.left=`${i.offsetLeft}px`,e.style.top=`${i.offsetTop}px`,e.style.width=`${i.offsetWidth}px`,e.style.height=`${i.offsetHeight}px`;for(let n of K){if(n==="position"||n==="left"||n==="top"||n==="right"||n==="bottom")continue;let o=t.getPropertyValue(I(n));o&&e.style.setProperty(I(n),o);}return false}function V(i){let e=i.getBoundingClientRect(),t=window.devicePixelRatio||1;return {width:Math.max(1,Math.round(e.width*t)),height:Math.max(1,Math.round(e.height*t))}}function N(i,e){let t=document.createElement("canvas");if(t.dataset.pupVideoOverlay="1",t.style.pointerEvents="none",i.style.visibility="hidden",i.muted=true,(i.parentNode||document.body).insertBefore(t,i.nextSibling),L(i,t),e)try{t.getContext("2d").drawImage(e,0,0,t.width,t.height);}catch{}return t}function x(i,e,t,n,o){if(o==="none")return [(t-i)/2,(n-e)/2,i,e];if(o==="contain"||o==="scale-down"){let a=Math.min(t/i,n/e),r=o==="scale-down"?Math.min(1,a):a,u=r*i,f=r*e;return [(t-u)/2,(n-f)/2,u,f]}if(o==="cover"){let a=Math.max(t/i,n/e),r=a*i,u=a*e;return [(t-r)/2,(n-u)/2,r,u]}return [0,0,t,n]}var M="pup-frame://";var S="[VideoHook]";function H(i){return {length:i>0?1:0,start:()=>0,end:()=>i}}function l(i,e){i.dispatchEvent(new Event(e));}function Q(i){if(i.rvfc.size===0)return;let e=[...i.rvfc.values()];i.rvfc.clear();let t=performance.now(),n={presentationTime:t,expectedDisplayTime:t,width:i.meta.frameWidth,height:i.meta.frameHeight,mediaTime:i.currentTime,presentedFrames:i.presentedFrames};for(let o of e)o(t,n);}async function z(i,e,t,n){let o=i.cache.cacheOf(t.meta.id);o.readers.set(t,n);let a=o.bitmaps.get(n);if(!a){i.cache.prefetch(t,n+1,9);let f=await i.cache.fetch(t,n);if(i.sessions.get(e)!==t)return;if(!f){!t.paused&&!t.waiting&&(t.waiting=true,l(e,"waiting"));return}a=f;}t.waiting&&(t.waiting=false,t.paused||l(e,"playing"));let r=t.cv,u=x(a.width,a.height,r.width,r.height,t.objectFit);t.ctx.clearRect(0,0,r.width,r.height),t.ctx.drawImage(a,u[0],u[1],u[2],u[3]),t.lastDrawnIdx=n,t.presentedFrames++,Q(t),i.cache.prefetch(t,n+1,10),i.cache.evict(o);}function $(i,e){let t=Math.max(0,e-i.currMs)/1e3;i.currMs=e;let n=[];return document.querySelectorAll("video").forEach(o=>{let a=o,r=i.sessions.get(a);if(!r||r.dead)return;if(r.meta&&r.meta.frameWidth<r.meta.width&&!i.attaching.has(a)&&!i.isUpgrading(a)&&V(a).width>r.meta.frameWidth*1.05&&i.upgrade(a,r),!r.meta&&i.attaching.has(a)){n.push(i.attaching.get(a).then(()=>{}));return}if(L(a,r.cv),!r.meta)return;(r.cv.width!==r.meta.frameWidth||r.cv.height!==r.meta.frameHeight)&&(r.cv.width=r.meta.frameWidth,r.cv.height=r.meta.frameHeight,r.lastDrawnIdx=-1),!r.paused&&!r.ended&&(r.currentTime+=t*(a.playbackRate||1),r.maxReached=Math.max(r.maxReached,r.currentTime),r.currentTime>=r.meta.duration?a.loop?r.currentTime=r.currentTime%r.meta.duration:(r.currentTime=r.meta.duration,r.paused=true,r.ended=true,l(a,"ended")):l(a,"timeupdate"));let u=Math.max(1,Math.round(r.currentTime*r.meta.fps));u!==r.lastDrawnIdx&&n.push(z(i,a,r,u));}),Promise.all(n)}var Y=8e3,v=class{_caches=new Map;cacheOf(e){let t=this._caches.get(e);return t||(t={bitmaps:new Map,inFlight:new Map,readers:new Map},this._caches.set(e,t)),t}fetch(e,t){let n=e.meta;if(!n)return Promise.resolve(void 0);let o=this.cacheOf(n.id),a=o.inFlight.get(t);if(a)return a;let r=o.bitmaps.get(t);if(r)return Promise.resolve(r);let u=n.frameWidth,f=n.frameHeight,w=new Promise(y=>{let h=p=>{o.inFlight.delete(t),p&&o.bitmaps.set(t,p),y(p);};fetch(`${M}frame?id=${n.id}&idx=${t}`).then(p=>p.ok?p.arrayBuffer():void 0).then(p=>p&&p.byteLength===u*f*4?createImageBitmap(new ImageData(new Uint8ClampedArray(p),u,f)):void 0).then(p=>h(p)).catch(()=>h(void 0));setTimeout(()=>h(void 0),Y);});return o.inFlight.set(t,w),w}prefetch(e,t,n){let o=e.meta;if(!o)return;let a=Math.max(1,Math.round(o.duration*o.fps));for(let r=t;r<t+n;r++)r<1||r>a||this.fetch(e,r);}evict(e){let t=1/0;if(e.readers.forEach(o=>{o<t&&(t=o);}),!Number.isFinite(t))return;let n=t-2;e.bitmaps.forEach((o,a)=>{a<n&&(o.close(),e.bitmaps.delete(a));});}release(e,t){let n=this._caches.get(e);n&&(n.readers.delete(t),!(n.readers.size>0)&&(n.bitmaps.forEach(o=>{o.close();}),this._caches.delete(e),fetch(`${M}close?id=${e}`,{keepalive:true})));}};function j(i){let e=HTMLVideoElement.prototype,t=HTMLMediaElement.prototype,n=s=>Object.getOwnPropertyDescriptor(e,s)||Object.getOwnPropertyDescriptor(t,s),o=n("currentTime"),a=n("src"),r=n("playbackRate"),u=e.pause,f=e.requestVideoFrameCallback,w=e.cancelVideoFrameCallback,y=e.getVideoPlaybackQuality,h=e.load,b=i.sessions,p=(s,c)=>{let m=n(s)?.get;if(!m)throw new Error(`media_shim: no native getter for ${s}`);Object.defineProperty(e,s,{configurable:true,get(){let d=b.get(this);return d?c(d):m.call(this)}});};if(p("paused",s=>s.paused),p("ended",s=>s.ended),p("readyState",s=>s.readyState),p("networkState",s=>s.networkState),p("error",s=>s.error??null),p("seeking",s=>s.seeking),p("buffered",s=>H(s.meta?s.meta.duration:0)),p("seekable",s=>H(s.meta?s.meta.duration:0)),p("played",s=>H(s.maxReached)),e.play=function(){let s=b.get(this);return s?(i.resume(this,s),Promise.resolve()):i.attach(this).then(c=>{c&&i.resume(this,c);})},e.pause=function(){let s=b.get(this);if(!s){u.call(this);return}s.paused||(s.paused=true,l(this,"pause"));},o?.get&&o.set){let s=o.get,c=o.set;Object.defineProperty(e,"currentTime",{configurable:true,get(){let m=b.get(this);return m?m.currentTime:s.call(this)},set(m){let d=b.get(this);if(!d){c.call(this,m);return}let g=d.meta?d.meta.duration:m;d.currentTime=Math.max(0,Math.min(m,g)),d.maxReached=Math.max(d.maxReached,d.currentTime),d.currentTime<g&&(d.ended=false),d.seeking=true,l(this,"seeking"),d.seeking=false,l(this,"seeked"),l(this,"timeupdate");}});}if(r?.set){let s=r.set;Object.defineProperty(e,"playbackRate",{configurable:true,get:r.get,set(c){s.call(this,c),b.has(this)&&l(this,"ratechange");}});}if(e.requestVideoFrameCallback=function(s){let c=b.get(this);if(!c)return f.call(this,s);let m=++i.rvfcSeq;return c.rvfc.set(m,s),m},e.cancelVideoFrameCallback=function(s){let c=b.get(this);if(!c){w.call(this,s);return}c.rvfc.delete(s);},e.getVideoPlaybackQuality=function(){let s=b.get(this);return s?{creationTime:performance.now(),totalVideoFrames:s.presentedFrames,droppedVideoFrames:0,corruptedVideoFrames:0}:y.call(this)},e.load=function(){if(!b.has(this))return h.call(this);i.detach(this),l(this,"emptied"),this.__pup_last_src__=void 0,i.attach(this);},a?.set){let s=a.set;Object.defineProperty(e,"src",{configurable:true,get:a.get,set(c){s.call(this,c),i.onSrcChange(this);}});}}function U(i,e){return {meta:void 0,cv:e,ctx:e.getContext("2d"),paused:!(i.autoplay||!i.paused),currentTime:0,ended:false,lastDrawnIdx:-1,dead:false,objectFit:window.getComputedStyle(i).objectFit||"fill",readyState:0,networkState:0,seeking:false,waiting:false,error:void 0,presentedFrames:0,maxReached:0,rvfc:new Map}}function W(i,e,t){e.dead=true,e.error=t,e.networkState=3,console.error(S,`${t.message} src=${i.src||i.currentSrc}`),l(i,"error");}async function B(i,e){let{video:t,state:n,src:o,birthMs:a,native:r}=e,u=Number.parseInt(t.dataset.pupFps||"30",10);n.networkState=2,l(t,"loadstart");let f;try{let h=V(t),b=r?"":`&w=${h.width}&h=${h.height}&fit=${encodeURIComponent(n.objectFit)}`;f=await fetch(`${M}open?src=${encodeURIComponent(o)}&fps=${u}${b}`);}catch(h){return W(t,n,{code:2,message:`open failed: ${h instanceof Error?h.message:String(h)}`})}if(i.sessions.get(t)!==n)return;if(!f.ok)return W(t,n,{code:3,message:`open ${f.status}: ${await f.text()}`});let w=await f.json();if(i.sessions.get(t)!==n)return;n.meta=w,n.currentTime=n.paused?0:Math.max(0,(i.currMs-a)/1e3);let y=t.videoWidth>0;return Object.defineProperty(t,"videoWidth",{value:w.width,configurable:true}),Object.defineProperty(t,"videoHeight",{value:w.height,configurable:true}),Object.defineProperty(t,"duration",{value:w.duration,configurable:true}),n.readyState=1,y||(l(t,"durationchange"),l(t,"loadedmetadata")),n.readyState=4,y||(l(t,"loadeddata"),l(t,"canplay"),l(t,"canplaythrough")),n.networkState=1,y||(l(t,"suspend"),n.paused||(l(t,"play"),l(t,"playing"))),r||i.cache.prefetch(n,1,10),n}var O=class{sessions=new WeakMap;attaching=new WeakMap;opening=new Set;cache=new v;rvfcSeq=0;currMs=0;_upgrading=new WeakSet;_lastUpgradeAt=new WeakMap;_lastSnapshot=new WeakMap;install(){j(this),this.scan(document.documentElement),new MutationObserver(e=>{for(let t of e){if(t.type==="attributes"&&t.target instanceof HTMLVideoElement&&t.attributeName==="src"){this.onSrcChange(t.target);continue}t.addedNodes.forEach(n=>{n instanceof Element&&this.scan(n);}),t.removedNodes.forEach(n=>{n instanceof HTMLVideoElement&&this.detach(n);});}}).observe(document,{subtree:true,childList:true,attributes:true,attributeFilter:["src"]}),window.__pup_video__={advance:e=>$(this,e),ready:()=>this.ready()};}attach(e,t=false){let n=this.sessions.get(e);if(n)return Promise.resolve(n);let o=this.attaching.get(e);if(o)return o;let a=e.src||e.currentSrc;if(!a||/^(blob:|data:|mediastream:)/i.test(a))return Promise.resolve(void 0);let r=N(e,this._lastSnapshot.get(e)),u=U(e,r);this.sessions.set(e,u);let f=B(this,{video:e,state:u,src:a,birthMs:this.currMs,native:t}).finally(()=>{this.attaching.delete(e),this.opening.delete(f);});return this.attaching.set(e,f),this.opening.add(f),f}async ready(){await Promise.allSettled([...this.opening]);}resume(e,t){!t.paused&&!t.ended||(t.paused=false,t.ended=false,l(e,"play"),l(e,"playing"));}detach(e){let t=this.sessions.get(e);if(t){if(t.meta){if(t.lastDrawnIdx>=0)try{let n=new OffscreenCanvas(t.cv.width,t.cv.height),o=n.getContext("2d");if(!o)throw new Error("no 2d context");o.drawImage(t.cv,0,0),this._lastSnapshot.set(e,n);}catch{}this.cache.release(t.meta.id,t);}t.cv.remove(),this.sessions.delete(e),this.attaching.delete(e);}}onSrcChange(e){let t=e.src||e.currentSrc||"";e.__pup_last_src__!==t&&(e.__pup_last_src__=t,this.sessions.has(e)&&this.detach(e),this.attach(e));}isUpgrading(e){return this._upgrading.has(e)}async upgrade(e,t){let n=t.meta;if(!n||n.frameWidth>=n.width||this._upgrading.has(e))return;let o=e.src||e.currentSrc;if(!o||performance.now()-(this._lastUpgradeAt.get(e)??0)<1e3)return;this._lastUpgradeAt.set(e,performance.now()),this._upgrading.add(e);let a;try{if(a=await this.openNative(o,n.fps),!a||this.sessions.get(e)!==t)return;let r=Math.max(1,Math.round(t.currentTime*n.fps)),u=await this.cache.fetch(a,r);if(!u||this.sessions.get(e)!==t)return;this.commitUpgrade(t,a,u,r),a=void 0;}catch(r){console.error(S,`upgrade failed: ${r instanceof Error?r.message:String(r)}`);}finally{a?.meta&&await fetch(`${M}close?id=${a.meta.id}`,{keepalive:true}).catch(()=>{}),this._upgrading.delete(e);}}async openNative(e,t){try{let n=await fetch(`${M}open?src=${encodeURIComponent(e)}&fps=${t}`);return n.ok?{meta:await n.json()}:void 0}catch{return}}commitUpgrade(e,t,n,o){let a=t.meta,r=e.meta.id,u=e.cv;u.width=a.frameWidth,u.height=a.frameHeight;let f=x(n.width,n.height,u.width,u.height,e.objectFit);e.ctx.clearRect(0,0,u.width,u.height),e.ctx.drawImage(n,f[0],f[1],f[2],f[3]),e.lastDrawnIdx=o,e.meta=a,this.cache.release(r,e),this.cache.prefetch(e,o+1,9);}scan(e){e&&(e.tagName==="VIDEO"&&this.attach(e),e.querySelectorAll&&e.querySelectorAll("video").forEach(t=>{this.attach(t);}));}};function q(){window.__pup_video__||new O().install();}window.self!==window.top&&(P(),F(),D(),q());
|
|
2
2
|
})();//# sourceMappingURL=shoot.global.js.map
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2F1ZGlvL3NoaW0udHMiLCIuLi8uLi9zcmMvcnVudGltZS9oeXBlcmZyYW1lcy50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3RpY2sudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9vdmVybGF5LnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vdHlwZXMudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9kcml2ZXIudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9mcmFtZV9jYWNoZS50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL21lZGlhX3NoaW0udHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9zZXNzaW9uLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vaG9vay50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3Nob290LnRzIl0sIm5hbWVzIjpbImZhaWwiLCJlbCIsIkF1ZGlvU2hpbSIsInVybCIsImluc3RhbGxBdWRpb1NoaW0iLCJOYXRpdmVBdWRpbyIsIkhBRSIsImluc3RhbGxIZkhvb2siLCJpbnN0YWxsVGlja0hvb2siLCJSRUFMX0RBVEUiLCJkYXRlT3JpZ2luIiwiY3Vyck1zIiwidGltZU9mZnNldCIsInJhZlF1ZXVlIiwidGltZXJzIiwibmV4dElkIiwidGljayIsIkZha2VEYXRlIiwiYXJncyIsImNiIiwiaWQiLCJyIiwiZGVsYXkiLCJkIiwic2FmZUludm9rZVRpbWVyIiwiZm4iLCJlIiwic2FmZUludm9rZVJhZiIsInRzIiwiYW5pbVN0YXRlIiwiZW5kQm91bmRhcnkiLCJhIiwidCIsInN5bmNBbmltYXRpb25zIiwibXMiLCJhbmltcyIsInN0YXRlIiwicmF0ZSIsInMiLCJjdCIsImN0MCIsInRhcmdldCIsImVuZCIsInByb2Nlc3MiLCJ0aW1lc3RhbXBNcyIsInJhZnMiLCJNSVJST1JfUFJPUFMiLCJjc3NDYXNlIiwiYyIsInN5bmNPdmVybGF5IiwidmlkZW8iLCJjdiIsImNzIiwicCIsInYiLCJzaG93blBpeGVscyIsInZyIiwiZHByIiwic2V0dXBDYW52YXMiLCJzbmFwIiwiZml0UmVjdCIsInNyY1ciLCJzcmNIIiwiZHN0VyIsImRzdEgiLCJmaXQiLCJzYyIsImsiLCJ3cyIsImhzIiwic2MyIiwid3MyIiwiaHMyIiwiU0NIRU1FIiwiVEFHIiwidGltZVJhbmdlcyIsImZpcmUiLCJ0eXBlIiwiZmlyZUZyYW1lQ2FsbGJhY2tzIiwiY2JzIiwibm93IiwibWV0YSIsInBhaW50IiwiaG9vayIsImlkeCIsImJtIiwiZmV0Y2hlZCIsImFkdmFuY2UiLCJkdCIsInBzIiwiRkVUQ0hfVElNRU9VVF9NUyIsIkZyYW1lQ2FjaGUiLCJleGlzdGluZyIsImNhY2hlZCIsInciLCJoIiwicmVzIiwic2V0dGxlIiwiYnVmIiwiZnJvbUlkeCIsImNvdW50IiwibWF4SWR4IiwiaSIsIm1pbklkeCIsImZsb29yIiwiaW5zdGFsbE1lZGlhU2hpbSIsIkhWRSIsIk1FRElBIiwibWRlc2MiLCJjdERlc2MiLCJzcmNEZXNjIiwicmF0ZURlc2MiLCJvcmlnUGF1c2UiLCJvcmlnUlZGQyIsIm9yaWdDYW5jZWxSVkZDIiwib3JpZ1F1YWxpdHkiLCJvcmlnTG9hZCIsInNlc3Npb25zIiwiZGVmIiwicHJvcCIsInBpY2siLCJuYXRpdmVHZXQiLCJucyIsImN0R2V0IiwiY3RTZXQiLCJkdXIiLCJyYXRlU2V0Iiwic3JjU2V0IiwibmV3VmlkZW9TdGF0ZSIsImZhaWxPcGVuIiwiZXJyb3IiLCJvcGVuU2Vzc2lvbiIsInNyYyIsImJpcnRoTXMiLCJuYXRpdmUiLCJmcHMiLCJxIiwibmF0aXZlTWV0YSIsIlZpZGVvSG9vayIsIm11dHMiLCJtIiwibiIsInBlbmRpbmciLCJzY3R4IiwicGF1c2VkIiwiZW5kZWQiLCJyb290IiwiaW5zdGFsbFZpZGVvSG9vayJdLCJtYXBwaW5ncyI6InlCQUtBLFNBQVNBLENBQUFBLENBQUtDLEVBQTRCLENBQ3hDLGNBQUEsQ0FBZSxJQUFNLENBQ25CLE1BQUEsQ0FBTyxlQUFlQSxDQUFB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QUFJVCxDQUFBQSxHQUFZLE9BQUEsR0FDbEIsQ0NoS0ksTUFBQSxDQUFPLElBQUEsR0FBUyxPQUFPLEdBQUEsR0FDekJ0SSxDQUFBQSxHQUNBRyxDQUFBQSxFQUFjLENBQ2RDLENBQUFBLEVBQWdCLENBQ2hCMkksQ0FBQUEsRUFBaUIsQ0FBQSIsImZpbGUiOiJzaG9vdC5nbG9iYWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtZCBjYXB0dXJlcyBubyBhdWRpbzsgYSBsb2FkaW5nIDxhdWRpbz4gd291bGQgaGl0IHRoZSBtZWRpYeKGknN0dWIgcmVkaXJlY3QsIHdoaWNoIHNlcnZlcyB2aWRlbyBzdHVicyBvbmx5LlxuXG5jb25zdCBTUkNfTk9UX1NVUFBPUlRFRCA9IDQ7IC8vIE1FRElBX0VSUl9TUkNfTk9UX1NVUFBPUlRFRFxuXG4vLyBNaXJyb3IgYSBmYWlsZWQgbmF0aXZlIGxvYWQgc28gZXJyb3ItaGFuZGxpbmcgcGFnZXMgcHJvY2VlZCBleGFjdGx5IGFzIHRoZXkgZG8gd2hlbiB0aGUgc291cmNlIGlzIGJyb2tlbi5cbmZ1bmN0aW9uIGZhaWwoZWw6IEhUTUxBdWRpb0VsZW1lbnQpOiB2b2lkIHtcbiAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgXCJlcnJvclwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogeyBjb2RlOiBTUkNfTk9UX1NVUFBPUlRFRCwgbWVzc2FnZTogXCJhdWRpbyBkaXNhYmxlZCBpbiBkZXRlcm1pbmlzdGljIG1vZGVcIiB9LFxuICAgIH0pO1xuICAgIGVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiZXJyb3JcIikpO1xuICB9KTtcbn1cblxuLy8gVGhlIG5hdGl2ZSBBdWRpbygpIGNvbnN0cnVjdG9yIGludm9rZXMgdGhlIGxvYWQgYWxnb3JpdGhtIGludGVybmFsbHksIHNvIG9ubHkgYSBjb25zdHJ1Y3RvciBzd2FwIGNhbiBwcmVlbXB0IHRoZSBmZXRjaC5cbmZ1bmN0aW9uIEF1ZGlvU2hpbSh1cmw/OiBzdHJpbmcpOiBIVE1MQXVkaW9FbGVtZW50IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYXVkaW9cIik7XG4gIGVsLnByZWxvYWQgPSBcIm5vbmVcIjtcbiAgaWYgKHVybCkge1xuICAgIGVsLnNyYyA9IHVybDtcbiAgICBmYWlsKGVsKTtcbiAgfVxuICByZXR1cm4gZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsQXVkaW9TaGltKCk6IHZvaWQge1xuICBjb25zdCBOYXRpdmVBdWRpbyA9IHdpbmRvdy5BdWRpbztcbiAgd2luZG93LkF1ZGlvID0gQXVkaW9TaGltIGFzIHVua25vd24gYXMgdHlwZW9mIEF1ZGlvO1xuICB3aW5kb3cuQXVkaW8ucHJvdG90eXBlID0gTmF0aXZlQXVkaW8ucHJvdG90eXBlO1xuXG4gIGNvbnN0IEhBRSA9IEhUTUxBdWRpb0VsZW1lbnQucHJvdG90eXBlO1xuICBIQUUubG9hZCA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MQXVkaW9FbGVtZW50KSB7XG4gICAgZmFpbCh0aGlzKTtcbiAgfTtcbiAgSEFFLnBsYXkgPSBmdW5jdGlvbiAodGhpczogSFRNTEF1ZGlvRWxlbWVudCkge1xuICAgIGZhaWwodGhpcyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oXCJhdWRpbyBkaXNhYmxlZCBpbiBkZXRlcm1pbmlzdGljIG1vZGVcIiwgXCJOb3RTdXBwb3J0ZWRFcnJvclwiKSk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzE2LlxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fSEZfTU9ERV9fPzogc3RyaW5nO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsSGZIb29rKCkge1xuICB3aW5kb3cuX19IRl9NT0RFX18gPSBcImV4cG9ydFwiO1xufVxuIiwiZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF90aWNrX18/OiB7IHByb2Nlc3M6IChtczogbnVtYmVyKSA9PiB2b2lkIH07XG4gIH1cbn1cblxuaW50ZXJmYWNlIFRpbWVyIHtcbiAgdHlwZTogXCJ0aW1lb3V0XCIgfCBcImludGVydmFsXCI7XG4gIGNiOiBUaW1lckhhbmRsZXI7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG5leHQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJhZkVudHJ5IHtcbiAgaWQ6IG51bWJlcjtcbiAgY2I6IEZyYW1lUmVxdWVzdENhbGxiYWNrO1xufVxuXG5pbnRlcmZhY2UgQW5pbUVudHJ5IHtcbiAgc3RhcnRNczogbnVtYmVyO1xuICBhZG9wdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFRpY2tIb29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3RpY2tfXykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IFJFQUxfREFURSA9IERhdGU7XG4gIGNvbnN0IGRhdGVPcmlnaW4gPSBSRUFMX0RBVEUubm93KCk7XG4gIGxldCBjdXJyTXMgPSAwO1xuICBsZXQgdGltZU9mZnNldCA9IDA7XG4gIGxldCByYWZRdWV1ZTogUmFmRW50cnlbXSA9IFtdO1xuICBjb25zdCB0aW1lcnM6IFJlY29yZDxudW1iZXIsIFRpbWVyIHwgdW5kZWZpbmVkPiA9IHt9O1xuICBsZXQgbmV4dElkID0gMTtcbiAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICB0aW1lT2Zmc2V0ICs9IDAuMDE7XG4gICAgcmV0dXJuIHRpbWVPZmZzZXQ7XG4gIH07XG5cbiAgZnVuY3Rpb24gRmFrZURhdGUodGhpczogdW5rbm93biwgLi4uYXJnczogdW5rbm93bltdKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZha2VEYXRlKSkge1xuICAgICAgcmV0dXJuIG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcykudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3MubGVuZ3RoXG4gICAgICA/IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoUkVBTF9EQVRFLCBbbnVsbCwgLi4uYXJnc10pKSgpXG4gICAgICA6IG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKSk7XG4gIH1cbiAgRmFrZURhdGUucHJvdG90eXBlID0gUkVBTF9EQVRFLnByb3RvdHlwZTtcbiAgRmFrZURhdGUubm93ID0gKCkgPT4gZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKTtcbiAgRmFrZURhdGUucGFyc2UgPSBSRUFMX0RBVEUucGFyc2U7XG4gIEZha2VEYXRlLlVUQyA9IFJFQUxfREFURS5VVEM7XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IERhdGU6IHVua25vd24gfSkuRGF0ZSA9IEZha2VEYXRlO1xuICBwZXJmb3JtYW5jZS5ub3cgPSAoKSA9PiBjdXJyTXMgKyB0aWNrKCk7XG5cbiAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IChjYikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgcmFmUXVldWUucHVzaCh7IGlkLCBjYiB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IChpZCkgPT4ge1xuICAgIHJhZlF1ZXVlID0gcmFmUXVldWUuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH07XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IHNldFRpbWVvdXQ6IHVua25vd24gfSkuc2V0VGltZW91dCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogXCJ0aW1lb3V0XCIsIGNiLCBkZWxheTogZGVsYXkgfHwgMCwgbmV4dDogY3Vyck1zICsgKGRlbGF5IHx8IDApIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gKGlkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZGVsZXRlIHRpbWVyc1tpZF07XG4gICAgfVxuICB9O1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBzZXRJbnRlcnZhbDogdW5rbm93biB9KS5zZXRJbnRlcnZhbCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgY29uc3QgZCA9IE1hdGgubWF4KGRlbGF5IHx8IDAsIDEpO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6IFwiaW50ZXJ2YWxcIiwgY2IsIGRlbGF5OiBkLCBuZXh0OiBjdXJyTXMgKyBkIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IChpZCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGRlbGV0ZSB0aW1lcnNbaWRdO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzYWZlSW52b2tlVGltZXIoZm46IFRpbWVySGFuZGxlcikge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGZuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIFN0cmluZyB0aW1lciBoYW5kbGVyIHJ1bnMgYXMgcGFnZSBzY3JpcHQgaW4gZ2xvYmFsIHNjb3BlIChIVE1MIHNwZWMpOyBGdW5jdGlvbiBjdG9yIG1hdGNoZXMgdGhhdCwgYXZvaWRzIGV2YWwuXG4gICAgICAgIG5ldyBGdW5jdGlvbihmbikoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIltUaWNrXSBlcnJvcjpcIiwgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB8fCBlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2FmZUludm9rZVJhZihjYjogRnJhbWVSZXF1ZXN0Q2FsbGJhY2ssIHRzOiBudW1iZXIpIHtcbiAgICB0cnkge1xuICAgICAgY2IodHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbVGlja10gZXJyb3I6XCIsIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykgfHwgZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW5pbVN0YXRlID0gbmV3IFdlYWtNYXA8QW5pbWF0aW9uLCBBbmltRW50cnk+KCk7XG4gIGZ1bmN0aW9uIGVuZEJvdW5kYXJ5KGE6IEFuaW1hdGlvbik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHQgPSBhLmVmZmVjdD8uZ2V0Q29tcHV0ZWRUaW1pbmcoKS5lbmRUaW1lO1xuICAgICAgcmV0dXJuIHR5cGVvZiB0ID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh0KSA/IHQgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBEZXRhY2hlZC9mb3JlaWduIGVmZmVjdHMgaGF2ZSBubyB0aW1pbmc7IHRyZWF0IGFzIHVuYm91bmRlZC5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIC8vIEFkb3B0IHJ1bm5pbmcgYW5pbWF0aW9ucyAocGF1c2UgKyBkcml2ZSBjdXJyZW50VGltZSBvZmYgdGhlIHZpcnR1YWwgY2xvY2spOiBhbiBpbmZpbml0ZSBjb21wb3NpdG9yIGFuaW1hdGlvbiBvdGhlcndpc2Uga2VlcHMgdml6IGZyZWUtcnVubmluZyBhdCBSRU5ERVJfRlBTLCBzdGFydmluZyBDRFAgZXZhbHMuXG4gIGZ1bmN0aW9uIHN5bmNBbmltYXRpb25zKG1zOiBudW1iZXIpIHtcbiAgICBsZXQgYW5pbXM6IEFuaW1hdGlvbltdO1xuICAgIHRyeSB7XG4gICAgICBhbmltcyA9IGRvY3VtZW50LmdldEFuaW1hdGlvbnMoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhIG9mIGFuaW1zKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IGEucGxheVN0YXRlO1xuICAgICAgaWYgKHN0YXRlID09PSBcImlkbGVcIiB8fCBzdGF0ZSA9PT0gXCJmaW5pc2hlZFwiKSB7XG4gICAgICAgIGFuaW1TdGF0ZS5kZWxldGUoYSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmF0ZSA9IHR5cGVvZiBhLnBsYXliYWNrUmF0ZSA9PT0gXCJudW1iZXJcIiA/IGEucGxheWJhY2tSYXRlIDogMTtcbiAgICAgIGlmIChyYXRlID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IHMgPSBhbmltU3RhdGUuZ2V0KGEpO1xuICAgICAgaWYgKCFzKSB7XG4gICAgICAgIGNvbnN0IGN0MCA9IHR5cGVvZiBhLmN1cnJlbnRUaW1lID09PSBcIm51bWJlclwiID8gYS5jdXJyZW50VGltZSA6IDA7XG4gICAgICAgIHMgPSB7IHN0YXJ0TXM6IG1zIC0gY3QwIC8gcmF0ZSwgYWRvcHRlZDogc3RhdGUgIT09IFwicGF1c2VkXCIgfTtcbiAgICAgICAgYW5pbVN0YXRlLnNldChhLCBzKTtcbiAgICAgICAgaWYgKHMuYWRvcHRlZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhLnBhdXNlKCk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBQYXVzZS1yZWplY3Rpbmcgc3RhdGVzIChlLmcuIG1pZC1jYW5jZWwpIHN0aWxsIGFjY2VwdCBjdXJyZW50VGltZSB3cml0ZXMgYmVsb3cuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzLmFkb3B0ZWQgJiYgc3RhdGUgIT09IFwicGF1c2VkXCIpIHtcbiAgICAgICAgY29uc3QgY3QgPSB0eXBlb2YgYS5jdXJyZW50VGltZSA9PT0gXCJudW1iZXJcIiA/IGEuY3VycmVudFRpbWUgOiAwO1xuICAgICAgICBzLnN0YXJ0TXMgPSBtcyAtIGN0IC8gcmF0ZTtcbiAgICAgICAgcy5hZG9wdGVkID0gdHJ1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhLnBhdXNlKCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIFNhbWUgYXMgYWRvcHRpb24gYWJvdmU6IGRyaXZlIGJ5IGN1cnJlbnRUaW1lIHJlZ2FyZGxlc3MuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghcy5hZG9wdGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFyZ2V0ID0gKG1zIC0gcy5zdGFydE1zKSAqIHJhdGU7XG4gICAgICBjb25zdCBlbmQgPSBlbmRCb3VuZGFyeShhKTtcbiAgICAgIC8vIGZpbmlzaCgpIHNlZWtzIHRvIHRoZSByYXRlLWFwcHJvcHJpYXRlIGJvdW5kYXJ5IGFuZCBhcHBsaWVzIGZpbGwgbW9kZTsgcGF1c2VkIGhvbGRzIHdvdWxkIG1pc3JlbmRlciBmaWxsOm5vbmUuXG4gICAgICBpZiAocmF0ZSA+IDAgPyBlbmQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgPj0gZW5kIDogdGFyZ2V0IDw9IDApIHtcbiAgICAgICAgYW5pbVN0YXRlLmRlbGV0ZShhKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhLmZpbmlzaCgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJbmZpbml0ZS1kdXJhdGlvbiByZXZlcnNlIG9yIGRldGFjaGVkIGVmZmVjdDogbGVhdmUgYXMtaXMuXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBhLmN1cnJlbnRUaW1lID0gdGFyZ2V0O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3ModGltZXN0YW1wTXM6IG51bWJlcikge1xuICAgIGN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICAgIHRpbWVPZmZzZXQgPSAwO1xuICAgIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXModGltZXJzKSkge1xuICAgICAgY29uc3QgdCA9IHRpbWVyc1tOdW1iZXIoaWQpXTtcbiAgICAgIGlmICghdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICh0Lm5leHQgPD0gY3Vyck1zKSB7XG4gICAgICAgIHNhZmVJbnZva2VUaW1lcih0LmNiKTtcbiAgICAgICAgaWYgKHQudHlwZSA9PT0gXCJ0aW1lb3V0XCIpIHtcbiAgICAgICAgICBkZWxldGUgdGltZXJzW051bWJlcihpZCldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHQubmV4dCArPSB0LmRlbGF5O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByYWZzID0gcmFmUXVldWUuc3BsaWNlKDApO1xuICAgIGZvciAoY29uc3QgciBvZiByYWZzKSB7XG4gICAgICBzYWZlSW52b2tlUmFmKHIuY2IsIGN1cnJNcyk7XG4gICAgfVxuICAgIHN5bmNBbmltYXRpb25zKGN1cnJNcyk7XG4gIH1cblxuICB3aW5kb3cuX19wdXBfdGlja19fID0geyBwcm9jZXNzIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG50eXBlIFZlYzQgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuY29uc3QgTUlSUk9SX1BST1BTID0gW1xuICBcImJvcmRlclJhZGl1c1wiLFxuICBcImJvcmRlclRvcExlZnRSYWRpdXNcIixcbiAgXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFxuICBcImJvcmRlckJvdHRvbUxlZnRSYWRpdXNcIixcbiAgXCJib3JkZXJCb3R0b21SaWdodFJhZGl1c1wiLFxuICBcInRyYW5zZm9ybVwiLFxuICBcInRyYW5zZm9ybU9yaWdpblwiLFxuICBcImZpbHRlclwiLFxuICBcImNsaXBQYXRoXCIsXG4gIFwiYm94U2hhZG93XCIsXG4gIFwib3BhY2l0eVwiLFxuICBcIm1peEJsZW5kTW9kZVwiLFxuICBcIm1hc2tcIixcbiAgXCJ6SW5kZXhcIixcbiAgXCJwb3NpdGlvblwiLFxuICBcImxlZnRcIixcbiAgXCJ0b3BcIixcbiAgXCJyaWdodFwiLFxuICBcImJvdHRvbVwiLFxuXSBhcyBjb25zdDtcblxuZnVuY3Rpb24gY3NzQ2FzZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bQS1aXS9nLCAoYykgPT4gYC0ke2MudG9Mb3dlckNhc2UoKX1gKTtcbn1cblxuLy8gVHJhY2sgdGhlIG92ZXJsYXkgdG8gdGhlIGVsZW1lbnQncyBsaXZlIGJveCB2aWEgQ1NTIG9ubHk7IGJhY2tpbmcgc3RheXMgYXQgZGVjb2RlIHJlcyBvciB6b29tIHdpcGVzIHJpc2sgYmxhbmsgZnJhbWVzLlxuZXhwb3J0IGZ1bmN0aW9uIHN5bmNPdmVybGF5KHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBjdjogSFRNTENhbnZhc0VsZW1lbnQpOiBib29sZWFuIHtcbiAgY29uc3QgY3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh2aWRlbyk7XG4gIGN2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAvLyBvZmZzZXQqIGFyZSBwcmUtdHJhbnNmb3JtIGNvb3JkcyBmcm9tIG9mZnNldFBhcmVudCdzIHBhZGRpbmcgZWRnZSA9IHRoZSBhYnMgY29udGFpbmluZy1ibG9jayBvcmlnaW47IG1hcCBkaXJlY3QuXG4gIGN2LnN0eWxlLmxlZnQgPSBgJHt2aWRlby5vZmZzZXRMZWZ0fXB4YDtcbiAgY3Yuc3R5bGUudG9wID0gYCR7dmlkZW8ub2Zmc2V0VG9wfXB4YDtcbiAgY3Yuc3R5bGUud2lkdGggPSBgJHt2aWRlby5vZmZzZXRXaWR0aH1weGA7XG4gIGN2LnN0eWxlLmhlaWdodCA9IGAke3ZpZGVvLm9mZnNldEhlaWdodH1weGA7XG4gIGZvciAoY29uc3QgcCBvZiBNSVJST1JfUFJPUFMpIHtcbiAgICBpZiAocCA9PT0gXCJwb3NpdGlvblwiIHx8IHAgPT09IFwibGVmdFwiIHx8IHAgPT09IFwidG9wXCIgfHwgcCA9PT0gXCJyaWdodFwiIHx8IHAgPT09IFwiYm90dG9tXCIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB2ID0gY3MuZ2V0UHJvcGVydHlWYWx1ZShjc3NDYXNlKHApKTtcbiAgICBpZiAodikge1xuICAgICAgY3Yuc3R5bGUuc2V0UHJvcGVydHkoY3NzQ2FzZShwKSwgdik7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gT24tc2NyZWVuIChwb3N0LXRyYW5zZm9ybSkgcGl4ZWwgc2l6ZSBvZiBhIHZpZGVvIGVsZW1lbnQgKGRyaXZlcyB0aGUgbmF0aXZlIHJlLWF0dGFjaCB0aHJlc2hvbGQpLlxuZXhwb3J0IGZ1bmN0aW9uIHNob3duUGl4ZWxzKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHtcbiAgY29uc3QgdnIgPSB2aWRlby5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh2ci53aWR0aCAqIGRwcikpLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh2ci5oZWlnaHQgKiBkcHIpKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwQ2FudmFzKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzbmFwOiBPZmZzY3JlZW5DYW52YXMgfCB1bmRlZmluZWQpOiBIVE1MQ2FudmFzRWxlbWVudCB7XG4gIGNvbnN0IGN2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY3YuZGF0YXNldFtcInB1cFZpZGVvT3ZlcmxheVwiXSA9IFwiMVwiO1xuICBjdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCI7XG4gIHZpZGVvLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICB2aWRlby5tdXRlZCA9IHRydWU7XG4gIGNvbnN0IHBhcmVudCA9IHZpZGVvLnBhcmVudE5vZGUgfHwgZG9jdW1lbnQuYm9keTtcbiAgcGFyZW50Lmluc2VydEJlZm9yZShjdiwgdmlkZW8ubmV4dFNpYmxpbmcpO1xuICBzeW5jT3ZlcmxheSh2aWRlbywgY3YpO1xuICBpZiAoc25hcCkge1xuICAgIHRyeSB7XG4gICAgICBjdi5nZXRDb250ZXh0KFwiMmRcIikhLmRyYXdJbWFnZShzbmFwLCAwLCAwLCBjdi53aWR0aCwgY3YuaGVpZ2h0KTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cbiAgcmV0dXJuIGN2O1xufVxuXG4vLyBEcmF3IHJlY3QgZm9yIHRoZSBiaXRtYXAgd2l0aGluIHRoZSBjYW52YXMgcGVyIG9iamVjdEZpdC5cbmV4cG9ydCBmdW5jdGlvbiBmaXRSZWN0KHNyY1c6IG51bWJlciwgc3JjSDogbnVtYmVyLCBkc3RXOiBudW1iZXIsIGRzdEg6IG51bWJlciwgZml0OiBzdHJpbmcpOiBWZWM0IHtcbiAgaWYgKGZpdCA9PT0gXCJub25lXCIpIHtcbiAgICByZXR1cm4gWyhkc3RXIC0gc3JjVykgLyAyLCAoZHN0SCAtIHNyY0gpIC8gMiwgc3JjVywgc3JjSF07XG4gIH1cbiAgaWYgKGZpdCA9PT0gXCJjb250YWluXCIgfHwgZml0ID09PSBcInNjYWxlLWRvd25cIikge1xuICAgIGNvbnN0IHNjID0gTWF0aC5taW4oZHN0VyAvIHNyY1csIGRzdEggLyBzcmNIKTtcbiAgICBjb25zdCBrID0gZml0ID09PSBcInNjYWxlLWRvd25cIiA/IE1hdGgubWluKDEsIHNjKSA6IHNjO1xuICAgIGNvbnN0IHdzID0gayAqIHNyY1c7XG4gICAgY29uc3QgaHMgPSBrICogc3JjSDtcbiAgICByZXR1cm4gWyhkc3RXIC0gd3MpIC8gMiwgKGRzdEggLSBocykgLyAyLCB3cywgaHNdO1xuICB9XG4gIGlmIChmaXQgPT09IFwiY292ZXJcIikge1xuICAgIGNvbnN0IHNjMiA9IE1hdGgubWF4KGRzdFcgLyBzcmNXLCBkc3RIIC8gc3JjSCk7XG4gICAgY29uc3Qgd3MyID0gc2MyICogc3JjVztcbiAgICBjb25zdCBoczIgPSBzYzIgKiBzcmNIO1xuICAgIHJldHVybiBbKGRzdFcgLSB3czIpIC8gMiwgKGRzdEggLSBoczIpIC8gMiwgd3MyLCBoczJdO1xuICB9XG4gIHJldHVybiBbMCwgMCwgZHN0VywgZHN0SF07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5leHBvcnQgY29uc3QgU0NIRU1FID0gXCJwdXAtZnJhbWU6Ly9cIjtcbmV4cG9ydCBjb25zdCBBSEVBRCA9IDEwO1xuZXhwb3J0IGNvbnN0IFRBRyA9IFwiW1ZpZGVvSG9va11cIjtcblxuZXhwb3J0IGNvbnN0IE1FRElBX0VSUl9ORVRXT1JLID0gMjtcbmV4cG9ydCBjb25zdCBNRURJQV9FUlJfREVDT0RFID0gMztcbmV4cG9ydCBjb25zdCBIQVZFX05PVEhJTkcgPSAwO1xuZXhwb3J0IGNvbnN0IEhBVkVfTUVUQURBVEEgPSAxO1xuZXhwb3J0IGNvbnN0IEhBVkVfRU5PVUdIX0RBVEEgPSA0O1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfRU1QVFkgPSAwO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfSURMRSA9IDE7XG5leHBvcnQgY29uc3QgTkVUV09SS19MT0FESU5HID0gMjtcbmV4cG9ydCBjb25zdCBORVRXT1JLX05PX1NPVVJDRSA9IDM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9NZXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZyYW1lV2lkdGg6IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9GcmFtZU1ldGEge1xuICBwcmVzZW50YXRpb25UaW1lOiBudW1iZXI7XG4gIGV4cGVjdGVkRGlzcGxheVRpbWU6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG1lZGlhVGltZTogbnVtYmVyO1xuICBwcmVzZW50ZWRGcmFtZXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRnJhbWVDYiA9IChub3c6IG51bWJlciwgbWV0YTogVmlkZW9GcmFtZU1ldGEpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFFcnJvckxpa2Uge1xuICBjb2RlOiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0NhY2hlIHtcbiAgYml0bWFwczogTWFwPG51bWJlciwgSW1hZ2VCaXRtYXA+O1xuICBpbkZsaWdodDogTWFwPG51bWJlciwgUHJvbWlzZTxJbWFnZUJpdG1hcCB8IHVuZGVmaW5lZD4+O1xuICByZWFkZXJzOiBNYXA8VmlkZW9TdGF0ZSwgbnVtYmVyPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1N0YXRlIHtcbiAgbWV0YT86IFZpZGVvTWV0YTtcbiAgY3Y6IEhUTUxDYW52YXNFbGVtZW50O1xuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgcGF1c2VkOiBib29sZWFuO1xuICBjdXJyZW50VGltZTogbnVtYmVyO1xuICBlbmRlZDogYm9vbGVhbjtcbiAgbGFzdERyYXduSWR4OiBudW1iZXI7XG4gIGRlYWQ6IGJvb2xlYW47XG4gIG9iamVjdEZpdDogc3RyaW5nO1xuICByZWFkeVN0YXRlOiBudW1iZXI7XG4gIG5ldHdvcmtTdGF0ZTogbnVtYmVyO1xuICBzZWVraW5nOiBib29sZWFuO1xuICB3YWl0aW5nOiBib29sZWFuO1xuICBlcnJvcjogTWVkaWFFcnJvckxpa2UgfCB1bmRlZmluZWQ7XG4gIHByZXNlbnRlZEZyYW1lczogbnVtYmVyO1xuICBtYXhSZWFjaGVkOiBudW1iZXI7XG4gIHJ2ZmM6IE1hcDxudW1iZXIsIEZyYW1lQ2I+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVSYW5nZXNMaWtlIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIHN0YXJ0KGk6IG51bWJlcik6IG51bWJlcjtcbiAgZW5kKGk6IG51bWJlcik6IG51bWJlcjtcbn1cblxuLy8gV2hvbGUgY2xpcCBpcyBkZWNvZGUtb24tZGVtYW5kLCBzbyB0aGUgYXZhaWxhYmxlIHJhbmdlIGlzIGFsd2F5cyBbMCwgZW5kXSAob25lIFRpbWVSYW5nZXMgZW50cnkpLlxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVSYW5nZXMoZW5kOiBudW1iZXIpOiBUaW1lUmFuZ2VzTGlrZSB7XG4gIHJldHVybiB7IGxlbmd0aDogZW5kID4gMCA/IDEgOiAwLCBzdGFydDogKCkgPT4gMCwgZW5kOiAoKSA9PiBlbmQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcmUoZWw6IEV2ZW50VGFyZ2V0LCB0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQodHlwZSkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHR5cGUgeyBWaWRlb0hvb2sgfSBmcm9tIFwiLi9ob29rXCI7XG5pbXBvcnQgeyBmaXRSZWN0LCBzaG93blBpeGVscywgc3luY092ZXJsYXkgfSBmcm9tIFwiLi9vdmVybGF5XCI7XG5pbXBvcnQgeyBBSEVBRCwgZmlyZSwgdHlwZSBWaWRlb0ZyYW1lTWV0YSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZnVuY3Rpb24gZmlyZUZyYW1lQ2FsbGJhY2tzKHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gIGlmIChzdGF0ZS5ydmZjLnNpemUgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY2JzID0gWy4uLnN0YXRlLnJ2ZmMudmFsdWVzKCldO1xuICBzdGF0ZS5ydmZjLmNsZWFyKCk7XG4gIGNvbnN0IG5vdyA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCBtZXRhOiBWaWRlb0ZyYW1lTWV0YSA9IHtcbiAgICBwcmVzZW50YXRpb25UaW1lOiBub3csXG4gICAgZXhwZWN0ZWREaXNwbGF5VGltZTogbm93LFxuICAgIHdpZHRoOiBzdGF0ZS5tZXRhIS5mcmFtZVdpZHRoLFxuICAgIGhlaWdodDogc3RhdGUubWV0YSEuZnJhbWVIZWlnaHQsXG4gICAgbWVkaWFUaW1lOiBzdGF0ZS5jdXJyZW50VGltZSxcbiAgICBwcmVzZW50ZWRGcmFtZXM6IHN0YXRlLnByZXNlbnRlZEZyYW1lcyxcbiAgfTtcbiAgZm9yIChjb25zdCBjYiBvZiBjYnMpIHtcbiAgICBjYihub3csIG1ldGEpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhaW50KGhvb2s6IFZpZGVvSG9vaywgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlLCBpZHg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjID0gaG9vay5jYWNoZS5jYWNoZU9mKHN0YXRlLm1ldGEhLmlkKTtcbiAgYy5yZWFkZXJzLnNldChzdGF0ZSwgaWR4KTtcbiAgbGV0IGJtID0gYy5iaXRtYXBzLmdldChpZHgpO1xuICBpZiAoIWJtKSB7XG4gICAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgaWR4ICsgMSwgQUhFQUQgLSAxKTtcbiAgICBjb25zdCBmZXRjaGVkID0gYXdhaXQgaG9vay5jYWNoZS5mZXRjaChzdGF0ZSwgaWR4KTtcbiAgICBpZiAoaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWZldGNoZWQpIHtcbiAgICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS53YWl0aW5nKSB7XG4gICAgICAgIHN0YXRlLndhaXRpbmcgPSB0cnVlO1xuICAgICAgICBmaXJlKHZpZGVvLCBcIndhaXRpbmdcIik7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGJtID0gZmV0Y2hlZDtcbiAgfVxuICBpZiAoc3RhdGUud2FpdGluZykge1xuICAgIHN0YXRlLndhaXRpbmcgPSBmYWxzZTtcbiAgICBpZiAoIXN0YXRlLnBhdXNlZCkge1xuICAgICAgZmlyZSh2aWRlbywgXCJwbGF5aW5nXCIpO1xuICAgIH1cbiAgfVxuICBjb25zdCBjdiA9IHN0YXRlLmN2O1xuICBjb25zdCByID0gZml0UmVjdChibS53aWR0aCwgYm0uaGVpZ2h0LCBjdi53aWR0aCwgY3YuaGVpZ2h0LCBzdGF0ZS5vYmplY3RGaXQpO1xuICBzdGF0ZS5jdHguY2xlYXJSZWN0KDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICBzdGF0ZS5jdHguZHJhd0ltYWdlKGJtLCByWzBdLCByWzFdLCByWzJdLCByWzNdKTtcbiAgc3RhdGUubGFzdERyYXduSWR4ID0gaWR4O1xuICBzdGF0ZS5wcmVzZW50ZWRGcmFtZXMrKztcbiAgZmlyZUZyYW1lQ2FsbGJhY2tzKHN0YXRlKTtcbiAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgaWR4ICsgMSwgQUhFQUQpO1xuICBob29rLmNhY2hlLmV2aWN0KGMpO1xufVxuXG4vLyBWaXJ0dWFsLXRpbWUgdGljazogc3luYyBvdmVybGF5cywgYWR2YW5jZSBlYWNoIGhvb2tlZCB2aWRlbydzIGNsb2NrIChsb29wL2VuZCksIHBhaW50IHRoZSBkdWUgZnJhbWUuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZShob29rOiBWaWRlb0hvb2ssIHRpbWVzdGFtcE1zOiBudW1iZXIpOiBQcm9taXNlPHVua25vd24+IHtcbiAgY29uc3QgZHQgPSBNYXRoLm1heCgwLCB0aW1lc3RhbXBNcyAtIGhvb2suY3Vyck1zKSAvIDEwMDA7XG4gIGhvb2suY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gIGNvbnN0IHBzOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInZpZGVvXCIpLmZvckVhY2goKGVsKSA9PiB7XG4gICAgY29uc3QgdmlkZW8gPSBlbCBhcyBIVE1MVmlkZW9FbGVtZW50O1xuICAgIGNvbnN0IHN0YXRlID0gaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmICghc3RhdGUgfHwgc3RhdGUuZGVhZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBSZS1kZWNvZGUgYXQgbmF0aXZlIHdoZW4gdGhlIGVsZW1lbnQgb3V0Z3Jvd3MgdGhlIGRvd25zY2FsZWQgZGVjb2RlOyBjaGVjayBiZWZvcmUgdGhlIHJlc2l6ZSB3aXBlcyB0aGUgY2FudmFzLlxuICAgIGlmIChcbiAgICAgIHN0YXRlLm1ldGEgJiZcbiAgICAgIHN0YXRlLm1ldGEuZnJhbWVXaWR0aCA8IHN0YXRlLm1ldGEud2lkdGggJiZcbiAgICAgICFob29rLmF0dGFjaGluZy5oYXModmlkZW8pICYmXG4gICAgICBzaG93blBpeGVscyh2aWRlbykud2lkdGggPiBzdGF0ZS5tZXRhLmZyYW1lV2lkdGggKiAxLjA1XG4gICAgKSB7XG4gICAgICBob29rLnJlYXR0YWNoKHZpZGVvLCBzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFN0YWxsIHRoZSB0aWNrIHdoaWxlIGEgcmUtYXR0YWNoIG9wZW5zLCBvciB0aGUgcmVzaXplLXdpcGVkIGNhbnZhcyBpcyBjYXB0dXJlZCBhcyBibGFuayBmcmFtZXMuXG4gICAgaWYgKCFzdGF0ZS5tZXRhICYmIGhvb2suYXR0YWNoaW5nLmhhcyh2aWRlbykpIHtcbiAgICAgIHBzLnB1c2goaG9vay5hdHRhY2hpbmcuZ2V0KHZpZGVvKSEudGhlbigoKSA9PiB1bmRlZmluZWQpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHN5bmNPdmVybGF5KHZpZGVvLCBzdGF0ZS5jdikpIHtcbiAgICAgIHN0YXRlLmxhc3REcmF3bklkeCA9IC0xO1xuICAgIH1cbiAgICBpZiAoIXN0YXRlLm1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQmFja2luZyBzdG9yZSA9IGRlY29kZSByZXNvbHV0aW9uIGZvciB0aGUgc2Vzc2lvbidzIGxpZmUgKG9uZSBzZXQgcGVyIGF0dGFjaDsgQ1NTIHNjYWxlcyB0aGUgcmVzdCkuXG4gICAgaWYgKHN0YXRlLmN2LndpZHRoICE9PSBzdGF0ZS5tZXRhLmZyYW1lV2lkdGggfHwgc3RhdGUuY3YuaGVpZ2h0ICE9PSBzdGF0ZS5tZXRhLmZyYW1lSGVpZ2h0KSB7XG4gICAgICBzdGF0ZS5jdi53aWR0aCA9IHN0YXRlLm1ldGEuZnJhbWVXaWR0aDtcbiAgICAgIHN0YXRlLmN2LmhlaWdodCA9IHN0YXRlLm1ldGEuZnJhbWVIZWlnaHQ7XG4gICAgICBzdGF0ZS5sYXN0RHJhd25JZHggPSAtMTtcbiAgICB9XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICBzdGF0ZS5jdXJyZW50VGltZSArPSBkdCAqICh2aWRlby5wbGF5YmFja1JhdGUgfHwgMSk7XG4gICAgICBzdGF0ZS5tYXhSZWFjaGVkID0gTWF0aC5tYXgoc3RhdGUubWF4UmVhY2hlZCwgc3RhdGUuY3VycmVudFRpbWUpO1xuICAgICAgaWYgKHN0YXRlLmN1cnJlbnRUaW1lID49IHN0YXRlLm1ldGEuZHVyYXRpb24pIHtcbiAgICAgICAgaWYgKHZpZGVvLmxvb3ApIHtcbiAgICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLmN1cnJlbnRUaW1lICUgc3RhdGUubWV0YS5kdXJhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLm1ldGEuZHVyYXRpb247XG4gICAgICAgICAgc3RhdGUucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gICAgICAgICAgZmlyZSh2aWRlbywgXCJlbmRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlyZSh2aWRlbywgXCJ0aW1ldXBkYXRlXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpZHggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHN0YXRlLmN1cnJlbnRUaW1lICogc3RhdGUubWV0YS5mcHMpKTtcbiAgICBpZiAoaWR4ID09PSBzdGF0ZS5sYXN0RHJhd25JZHgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcHMucHVzaChwYWludChob29rLCB2aWRlbywgc3RhdGUsIGlkeCkpO1xuICB9KTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHBzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB7IFNDSEVNRSwgdHlwZSBWaWRlb0NhY2hlLCB0eXBlIFZpZGVvU3RhdGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5jb25zdCBGRVRDSF9USU1FT1VUX01TID0gOF8wMDA7IC8vIGJvdW5kIGEgc3R1Y2sgZGVjb2RlIChtYXRjaGVzIHRoZSBkZWNvZGVyIHJ3X3RpbWVvdXQpIHNvIHBhaW50cyBob2xkIGluc3RlYWQgb2YgZnJlZXppbmdcblxuLy8gUGVyLXNlc3Npb24gYml0bWFwIGNhY2hlOiBmZXRjaGVzIFJHQkEgZnJhbWVzIGZyb20gdGhlIGZyYW1lIHByb3RvY29sLCBkZWR1cGVzIGluLWZsaWdodCwgZXZpY3RzIGJlaGluZCByZWFkZXJzLlxuZXhwb3J0IGNsYXNzIEZyYW1lQ2FjaGUge1xuICBwcml2YXRlIF9jYWNoZXMgPSBuZXcgTWFwPHN0cmluZywgVmlkZW9DYWNoZT4oKTtcblxuICBjYWNoZU9mKGlkOiBzdHJpbmcpOiBWaWRlb0NhY2hlIHtcbiAgICBsZXQgYyA9IHRoaXMuX2NhY2hlcy5nZXQoaWQpO1xuICAgIGlmICghYykge1xuICAgICAgYyA9IHsgYml0bWFwczogbmV3IE1hcCgpLCBpbkZsaWdodDogbmV3IE1hcCgpLCByZWFkZXJzOiBuZXcgTWFwKCkgfTtcbiAgICAgIHRoaXMuX2NhY2hlcy5zZXQoaWQsIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIGZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBpZHg6IG51bWJlcik6IFByb21pc2U8SW1hZ2VCaXRtYXAgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgYyA9IHRoaXMuY2FjaGVPZihtZXRhLmlkKTtcbiAgICBjb25zdCBleGlzdGluZyA9IGMuaW5GbGlnaHQuZ2V0KGlkeCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlZCA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNhY2hlZCk7XG4gICAgfVxuICAgIGNvbnN0IHcgPSBtZXRhLmZyYW1lV2lkdGg7XG4gICAgY29uc3QgaCA9IG1ldGEuZnJhbWVIZWlnaHQ7XG4gICAgY29uc3QgcCA9IG5ldyBQcm9taXNlPEltYWdlQml0bWFwIHwgdW5kZWZpbmVkPigocmVzKSA9PiB7XG4gICAgICBjb25zdCBzZXR0bGUgPSAoYm06IEltYWdlQml0bWFwIHwgdW5kZWZpbmVkKTogdm9pZCA9PiB7XG4gICAgICAgIGMuaW5GbGlnaHQuZGVsZXRlKGlkeCk7XG4gICAgICAgIGlmIChibSkge1xuICAgICAgICAgIGMuYml0bWFwcy5zZXQoaWR4LCBibSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzKGJtKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZXEgPSBmZXRjaChgJHtTQ0hFTUV9ZnJhbWU/aWQ9JHttZXRhLmlkfSZpZHg9JHtpZHh9YClcbiAgICAgICAgLnRoZW4oKHIpID0+IChyLm9rID8gci5hcnJheUJ1ZmZlcigpIDogdW5kZWZpbmVkKSlcbiAgICAgICAgLnRoZW4oKGJ1ZikgPT5cbiAgICAgICAgICBidWYgJiYgYnVmLmJ5dGVMZW5ndGggPT09IHcgKiBoICogNFxuICAgICAgICAgICAgPyBjcmVhdGVJbWFnZUJpdG1hcChuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShidWYpLCB3LCBoKSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICApXG4gICAgICAgIC50aGVuKChibSkgPT4gc2V0dGxlKGJtKSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHNldHRsZSh1bmRlZmluZWQpKTtcbiAgICAgIC8vIEEgc3R1Y2sgZGVjb2RlIHdvdWxkIHBhcmsgdGhlIHBhaW50IGZvcmV2ZXI7IHRpbWUgb3V0IGFuZCBsZXQgdGhlIGNhbnZhcyBob2xkIGl0cyBsYXN0IGZyYW1lLlxuICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXR0bGUodW5kZWZpbmVkKSwgRkVUQ0hfVElNRU9VVF9NUyk7XG4gICAgICB2b2lkIHJlcTtcbiAgICB9KTtcbiAgICBjLmluRmxpZ2h0LnNldChpZHgsIHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgcHJlZmV0Y2goc3RhdGU6IFZpZGVvU3RhdGUsIGZyb21JZHg6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG1ldGEgPSBzdGF0ZS5tZXRhO1xuICAgIGlmICghbWV0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtYXhJZHggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKG1ldGEuZHVyYXRpb24gKiBtZXRhLmZwcykpO1xuICAgIGZvciAobGV0IGkgPSBmcm9tSWR4OyBpIDwgZnJvbUlkeCArIGNvdW50OyBpKyspIHtcbiAgICAgIGlmIChpIDwgMSB8fCBpID4gbWF4SWR4KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdm9pZCB0aGlzLmZldGNoKHN0YXRlLCBpKTtcbiAgICB9XG4gIH1cblxuICBldmljdChjOiBWaWRlb0NhY2hlKTogdm9pZCB7XG4gICAgbGV0IG1pbklkeCA9IEluZmluaXR5O1xuICAgIGMucmVhZGVycy5mb3JFYWNoKChpZHgpID0+IHtcbiAgICAgIGlmIChpZHggPCBtaW5JZHgpIHtcbiAgICAgICAgbWluSWR4ID0gaWR4O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG1pbklkeCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxvb3IgPSBtaW5JZHggLSAyO1xuICAgIGMuYml0bWFwcy5mb3JFYWNoKChibSwgaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4IDwgZmxvb3IpIHtcbiAgICAgICAgYm0uY2xvc2UoKTtcbiAgICAgICAgYy5iaXRtYXBzLmRlbGV0ZShpZHgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gRHJvcCBhIHJlYWRlcjsgd2hlbiB0aGUgbGFzdCBsZWF2ZXMsIGNsb3NlIGJpdG1hcHMgYW5kIHRlbGwgdGhlIHNlcnZlciB0byByZWxlYXNlIHRoZSBkZWNvZGUgc2Vzc2lvbi5cbiAgcmVsZWFzZShpZDogc3RyaW5nLCBzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGMgPSB0aGlzLl9jYWNoZXMuZ2V0KGlkKTtcbiAgICBpZiAoIWMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYy5yZWFkZXJzLmRlbGV0ZShzdGF0ZSk7XG4gICAgaWYgKGMucmVhZGVycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjLmJpdG1hcHMuZm9yRWFjaCgoYm0pID0+IHtcbiAgICAgIGJtLmNsb3NlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5fY2FjaGVzLmRlbGV0ZShpZCk7XG4gICAgZmV0Y2goYCR7U0NIRU1FfWNsb3NlP2lkPSR7aWR9YCwgeyBrZWVwYWxpdmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB0eXBlIHsgVmlkZW9Ib29rIH0gZnJvbSBcIi4vaG9va1wiO1xuaW1wb3J0IHsgdHlwZSBGcmFtZUNiLCBmaXJlLCB0aW1lUmFuZ2VzLCB0eXBlIFZpZGVvU3RhdGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBPdmVycmlkZSB0aGUgSFRNTE1lZGlhRWxlbWVudCBzdXJmYWNlIGZvciBob29rZWQgPHZpZGVvPjsgdW5ob29rZWQgZWxlbWVudHMgZmFsbCB0aHJvdWdoIHRvIG5hdGl2ZS5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsTWVkaWFTaGltKGhvb2s6IFZpZGVvSG9vayk6IHZvaWQge1xuICBjb25zdCBIVkUgPSBIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZTtcbiAgY29uc3QgTUVESUEgPSBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZTtcbiAgY29uc3QgbWRlc2MgPSAocDogc3RyaW5nKSA9PiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhWRSwgcCkgfHwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihNRURJQSwgcCk7XG4gIGNvbnN0IGN0RGVzYyA9IG1kZXNjKFwiY3VycmVudFRpbWVcIik7XG4gIGNvbnN0IHNyY0Rlc2MgPSBtZGVzYyhcInNyY1wiKTtcbiAgY29uc3QgcmF0ZURlc2MgPSBtZGVzYyhcInBsYXliYWNrUmF0ZVwiKTtcbiAgY29uc3Qgb3JpZ1BhdXNlID0gSFZFLnBhdXNlO1xuICBjb25zdCBvcmlnUlZGQyA9IEhWRS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrO1xuICBjb25zdCBvcmlnQ2FuY2VsUlZGQyA9IEhWRS5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2s7XG4gIGNvbnN0IG9yaWdRdWFsaXR5ID0gSFZFLmdldFZpZGVvUGxheWJhY2tRdWFsaXR5O1xuICBjb25zdCBvcmlnTG9hZCA9IEhWRS5sb2FkO1xuICBjb25zdCBzZXNzaW9ucyA9IGhvb2suc2Vzc2lvbnM7XG5cbiAgLy8gU2Vzc2lvbi1iYWNrZWQgcmVhZC1vbmx5IHByb3BlcnR5IHdpdGggbmF0aXZlIGZhbGxiYWNrIHdoZW4gdGhlIGVsZW1lbnQgaXNuJ3QgaG9va2VkLlxuICBjb25zdCBkZWYgPSAocHJvcDogc3RyaW5nLCBwaWNrOiAoczogVmlkZW9TdGF0ZSkgPT4gdW5rbm93bikgPT4ge1xuICAgIGNvbnN0IG5hdGl2ZUdldCA9IG1kZXNjKHByb3ApPy5nZXQ7XG4gICAgaWYgKCFuYXRpdmVHZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbWVkaWFfc2hpbTogbm8gbmF0aXZlIGdldHRlciBmb3IgJHtwcm9wfWApO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBwcm9wLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcyA/IHBpY2socykgOiBuYXRpdmVHZXQuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG4gIGRlZihcInBhdXNlZFwiLCAocykgPT4gcy5wYXVzZWQpO1xuICBkZWYoXCJlbmRlZFwiLCAocykgPT4gcy5lbmRlZCk7XG4gIGRlZihcInJlYWR5U3RhdGVcIiwgKHMpID0+IHMucmVhZHlTdGF0ZSk7XG4gIGRlZihcIm5ldHdvcmtTdGF0ZVwiLCAocykgPT4gcy5uZXR3b3JrU3RhdGUpO1xuICBkZWYoXCJlcnJvclwiLCAocykgPT4gcy5lcnJvciA/PyBudWxsKTtcbiAgZGVmKFwic2Vla2luZ1wiLCAocykgPT4gcy5zZWVraW5nKTtcbiAgZGVmKFwiYnVmZmVyZWRcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogMCkpO1xuICBkZWYoXCJzZWVrYWJsZVwiLCAocykgPT4gdGltZVJhbmdlcyhzLm1ldGEgPyBzLm1ldGEuZHVyYXRpb24gOiAwKSk7XG4gIGRlZihcInBsYXllZFwiLCAocykgPT4gdGltZVJhbmdlcyhzLm1heFJlYWNoZWQpKTtcblxuICBIVkUucGxheSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBob29rLmF0dGFjaCh0aGlzKS50aGVuKChucykgPT4ge1xuICAgICAgICBpZiAobnMpIHtcbiAgICAgICAgICBob29rLnJlc3VtZSh0aGlzLCBucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBob29rLnJlc3VtZSh0aGlzLCBzKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG4gIEhWRS5wYXVzZSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIG9yaWdQYXVzZS5jYWxsKHRoaXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXMucGF1c2VkKSB7XG4gICAgICBzLnBhdXNlZCA9IHRydWU7XG4gICAgICBmaXJlKHRoaXMsIFwicGF1c2VcIik7XG4gICAgfVxuICB9O1xuICBpZiAoY3REZXNjPy5nZXQgJiYgY3REZXNjLnNldCkge1xuICAgIGNvbnN0IGN0R2V0ID0gY3REZXNjLmdldDtcbiAgICBjb25zdCBjdFNldCA9IGN0RGVzYy5zZXQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgXCJjdXJyZW50VGltZVwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcyA/IHMuY3VycmVudFRpbWUgOiBjdEdldC5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIHNldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCB0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKCFzKSB7XG4gICAgICAgICAgY3RTZXQuY2FsbCh0aGlzLCB0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVyID0gcy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogdDtcbiAgICAgICAgcy5jdXJyZW50VGltZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHQsIGR1cikpO1xuICAgICAgICBzLm1heFJlYWNoZWQgPSBNYXRoLm1heChzLm1heFJlYWNoZWQsIHMuY3VycmVudFRpbWUpO1xuICAgICAgICBpZiAocy5jdXJyZW50VGltZSA8IGR1cikge1xuICAgICAgICAgIHMuZW5kZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBzLnNlZWtpbmcgPSB0cnVlO1xuICAgICAgICBmaXJlKHRoaXMsIFwic2Vla2luZ1wiKTtcbiAgICAgICAgcy5zZWVraW5nID0gZmFsc2U7XG4gICAgICAgIGZpcmUodGhpcywgXCJzZWVrZWRcIik7XG4gICAgICAgIGZpcmUodGhpcywgXCJ0aW1ldXBkYXRlXCIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBpZiAocmF0ZURlc2M/LnNldCkge1xuICAgIGNvbnN0IHJhdGVTZXQgPSByYXRlRGVzYy5zZXQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgXCJwbGF5YmFja1JhdGVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiByYXRlRGVzYy5nZXQsXG4gICAgICBzZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCwgcjogbnVtYmVyKSB7XG4gICAgICAgIHJhdGVTZXQuY2FsbCh0aGlzLCByKTtcbiAgICAgICAgaWYgKHNlc3Npb25zLmhhcyh0aGlzKSkge1xuICAgICAgICAgIGZpcmUodGhpcywgXCJyYXRlY2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIEhWRS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIGNiKTogbnVtYmVyIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgcmV0dXJuIG9yaWdSVkZDLmNhbGwodGhpcywgY2IpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9ICsraG9vay5ydmZjU2VxO1xuICAgIHMucnZmYy5zZXQoaWQsIGNiIGFzIEZyYW1lQ2IpO1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgSFZFLmNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCBpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIG9yaWdDYW5jZWxSVkZDLmNhbGwodGhpcywgaWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzLnJ2ZmMuZGVsZXRlKGlkKTtcbiAgfTtcbiAgSFZFLmdldFZpZGVvUGxheWJhY2tRdWFsaXR5ID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgcmV0dXJuIG9yaWdRdWFsaXR5LmNhbGwodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGlvblRpbWU6IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgdG90YWxWaWRlb0ZyYW1lczogcy5wcmVzZW50ZWRGcmFtZXMsXG4gICAgICBkcm9wcGVkVmlkZW9GcmFtZXM6IDAsXG4gICAgICBjb3JydXB0ZWRWaWRlb0ZyYW1lczogMCxcbiAgICB9IGFzIFZpZGVvUGxheWJhY2tRdWFsaXR5O1xuICB9O1xuICBIVkUubG9hZCA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKCFzZXNzaW9ucy5oYXModGhpcykpIHtcbiAgICAgIHJldHVybiBvcmlnTG9hZC5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICBob29rLmRldGFjaCh0aGlzKTtcbiAgICBmaXJlKHRoaXMsIFwiZW1wdGllZFwiKTtcbiAgICB0aGlzLl9fcHVwX2xhc3Rfc3JjX18gPSB1bmRlZmluZWQ7XG4gICAgaG9vay5hdHRhY2godGhpcyk7XG4gIH07XG4gIGlmIChzcmNEZXNjPy5zZXQpIHtcbiAgICBjb25zdCBzcmNTZXQgPSBzcmNEZXNjLnNldDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBcInNyY1wiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IHNyY0Rlc2MuZ2V0LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHY6IHN0cmluZykge1xuICAgICAgICBzcmNTZXQuY2FsbCh0aGlzLCB2KTtcbiAgICAgICAgaG9vay5vblNyY0NoYW5nZSh0aGlzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB0eXBlIHsgVmlkZW9Ib29rIH0gZnJvbSBcIi4vaG9va1wiO1xuaW1wb3J0IHtcbiAgQUhFQUQsXG4gIGZpcmUsXG4gIEhBVkVfRU5PVUdIX0RBVEEsXG4gIEhBVkVfTUVUQURBVEEsXG4gIEhBVkVfTk9USElORyxcbiAgTUVESUFfRVJSX0RFQ09ERSxcbiAgTUVESUFfRVJSX05FVFdPUkssXG4gIHR5cGUgTWVkaWFFcnJvckxpa2UsXG4gIE5FVFdPUktfRU1QVFksXG4gIE5FVFdPUktfSURMRSxcbiAgTkVUV09SS19MT0FESU5HLFxuICBORVRXT1JLX05PX1NPVVJDRSxcbiAgU0NIRU1FLFxuICBUQUcsXG4gIHR5cGUgVmlkZW9NZXRhLFxuICB0eXBlIFZpZGVvU3RhdGUsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNoQXJncyB7XG4gIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50O1xuICBzdGF0ZTogVmlkZW9TdGF0ZTtcbiAgc3JjOiBzdHJpbmc7XG4gIGJpcnRoTXM6IG51bWJlcjtcbiAgbmF0aXZlOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3VmlkZW9TdGF0ZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgY3Y6IEhUTUxDYW52YXNFbGVtZW50KTogVmlkZW9TdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgbWV0YTogdW5kZWZpbmVkLFxuICAgIGN2LFxuICAgIGN0eDogY3YuZ2V0Q29udGV4dChcIjJkXCIpISxcbiAgICBwYXVzZWQ6ICEodmlkZW8uYXV0b3BsYXkgfHwgIXZpZGVvLnBhdXNlZCksXG4gICAgY3VycmVudFRpbWU6IDAsXG4gICAgZW5kZWQ6IGZhbHNlLFxuICAgIGxhc3REcmF3bklkeDogLTEsXG4gICAgZGVhZDogZmFsc2UsXG4gICAgb2JqZWN0Rml0OiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh2aWRlbykub2JqZWN0Rml0IHx8IFwiZmlsbFwiLFxuICAgIHJlYWR5U3RhdGU6IEhBVkVfTk9USElORyxcbiAgICBuZXR3b3JrU3RhdGU6IE5FVFdPUktfRU1QVFksXG4gICAgc2Vla2luZzogZmFsc2UsXG4gICAgd2FpdGluZzogZmFsc2UsXG4gICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICBwcmVzZW50ZWRGcmFtZXM6IDAsXG4gICAgbWF4UmVhY2hlZDogMCxcbiAgICBydmZjOiBuZXcgTWFwKCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZhaWxPcGVuKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSwgZXJyb3I6IE1lZGlhRXJyb3JMaWtlKTogdW5kZWZpbmVkIHtcbiAgc3RhdGUuZGVhZCA9IHRydWU7XG4gIHN0YXRlLmVycm9yID0gZXJyb3I7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTk9fU09VUkNFO1xuICBjb25zb2xlLmVycm9yKFRBRywgYCR7ZXJyb3IubWVzc2FnZX0gc3JjPSR7dmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmN9YCk7XG4gIGZpcmUodmlkZW8sIFwiZXJyb3JcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIE9wZW4gdGhlIGZyYW1lIHNlcnZlciBzZXNzaW9uLCB0aGVuIGVtaXQgdGhlIEhUTUxNZWRpYUVsZW1lbnQgbG9hZCBzZXF1ZW5jZSAocmVhZHlTdGF0ZS9uZXR3b3JrU3RhdGUgKyBldmVudHMpLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5TZXNzaW9uKGhvb2s6IFZpZGVvSG9vaywgYXJnczogQXR0YWNoQXJncyk6IFByb21pc2U8VmlkZW9TdGF0ZSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IHZpZGVvLCBzdGF0ZSwgc3JjLCBiaXJ0aE1zLCBuYXRpdmUgfSA9IGFyZ3M7XG4gIGNvbnN0IGZwcyA9IE51bWJlci5wYXJzZUludCh2aWRlby5kYXRhc2V0W1wicHVwRnBzXCJdIHx8IFwiMzBcIiwgMTApO1xuICBzdGF0ZS5uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0xPQURJTkc7XG4gIGZpcmUodmlkZW8sIFwibG9hZHN0YXJ0XCIpO1xuICBsZXQgcmVzOiBSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBxID0gbmF0aXZlID8gXCJcIiA6IGAmdz0ke3N0YXRlLmN2LndpZHRofSZoPSR7c3RhdGUuY3YuaGVpZ2h0fSZmaXQ9JHtlbmNvZGVVUklDb21wb25lbnQoc3RhdGUub2JqZWN0Rml0KX1gO1xuICAgIHJlcyA9IGF3YWl0IGZldGNoKGAke1NDSEVNRX1vcGVuP3NyYz0ke2VuY29kZVVSSUNvbXBvbmVudChzcmMpfSZmcHM9JHtmcHN9JHtxfWApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhaWxPcGVuKHZpZGVvLCBzdGF0ZSwge1xuICAgICAgY29kZTogTUVESUFfRVJSX05FVFdPUkssXG4gICAgICBtZXNzYWdlOiBgb3BlbiBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgfSk7XG4gIH1cbiAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghcmVzLm9rKSB7XG4gICAgcmV0dXJuIGZhaWxPcGVuKHZpZGVvLCBzdGF0ZSwge1xuICAgICAgY29kZTogTUVESUFfRVJSX0RFQ09ERSxcbiAgICAgIG1lc3NhZ2U6IGBvcGVuICR7cmVzLnN0YXR1c306ICR7YXdhaXQgcmVzLnRleHQoKX1gLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1ldGEgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgVmlkZW9NZXRhO1xuICBpZiAoaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgc3RhdGUubWV0YSA9IG1ldGE7XG4gIHN0YXRlLmN1cnJlbnRUaW1lID0gc3RhdGUucGF1c2VkID8gMCA6IE1hdGgubWF4KDAsIChob29rLmN1cnJNcyAtIGJpcnRoTXMpIC8gMTAwMCk7XG4gIC8vIFRoZSBzdHViIG1lZGlhIHVzdWFsbHkgbG9hZHMgbmF0aXZlbHkgZmlyc3Q7IEJsaW5rIHRoZW4gb3ducyB0aGUgcmVhbCBldmVudCBzZXF1ZW5jZSDigJQgZG9uJ3QgZHVwbGljYXRlIGl0LlxuICBjb25zdCBuYXRpdmVNZXRhID0gdmlkZW8udmlkZW9XaWR0aCA+IDA7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJ2aWRlb1dpZHRoXCIsIHtcbiAgICB2YWx1ZTogbWV0YS53aWR0aCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlkZW8sIFwidmlkZW9IZWlnaHRcIiwge1xuICAgIHZhbHVlOiBtZXRhLmhlaWdodCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlkZW8sIFwiZHVyYXRpb25cIiwge1xuICAgIHZhbHVlOiBtZXRhLmR1cmF0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG4gIHN0YXRlLnJlYWR5U3RhdGUgPSBIQVZFX01FVEFEQVRBO1xuICBpZiAoIW5hdGl2ZU1ldGEpIHtcbiAgICBmaXJlKHZpZGVvLCBcImR1cmF0aW9uY2hhbmdlXCIpO1xuICAgIGZpcmUodmlkZW8sIFwibG9hZGVkbWV0YWRhdGFcIik7XG4gIH1cbiAgc3RhdGUucmVhZHlTdGF0ZSA9IEhBVkVfRU5PVUdIX0RBVEE7XG4gIGlmICghbmF0aXZlTWV0YSkge1xuICAgIGZpcmUodmlkZW8sIFwibG9hZGVkZGF0YVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcImNhbnBsYXlcIik7XG4gICAgZmlyZSh2aWRlbywgXCJjYW5wbGF5dGhyb3VnaFwiKTtcbiAgfVxuICBzdGF0ZS5uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0lETEU7XG4gIGlmICghbmF0aXZlTWV0YSkge1xuICAgIGZpcmUodmlkZW8sIFwic3VzcGVuZFwiKTtcbiAgICBpZiAoIXN0YXRlLnBhdXNlZCkge1xuICAgICAgZmlyZSh2aWRlbywgXCJwbGF5XCIpO1xuICAgICAgZmlyZSh2aWRlbywgXCJwbGF5aW5nXCIpO1xuICAgIH1cbiAgfVxuICAvLyBOYXRpdmUgcmUtYXR0YWNoIHJlc3VtZXMgbWlkLWNsaXA7IHdhcm0gb25seSBmcmVzaCBvcGVucywgb3IgdGhlIDEuLkFIRUFEIHByZWZldGNoIGZpZ2h0cyB0aGUgcGFpbnRzJyBwb3NpdGlvbi5cbiAgaWYgKCFuYXRpdmUpIHtcbiAgICBob29rLmNhY2hlLnByZWZldGNoKHN0YXRlLCAxLCBBSEVBRCk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHsgYWR2YW5jZSB9IGZyb20gXCIuL2RyaXZlclwiO1xuaW1wb3J0IHsgRnJhbWVDYWNoZSB9IGZyb20gXCIuL2ZyYW1lX2NhY2hlXCI7XG5pbXBvcnQgeyBpbnN0YWxsTWVkaWFTaGltIH0gZnJvbSBcIi4vbWVkaWFfc2hpbVwiO1xuaW1wb3J0IHsgc2V0dXBDYW52YXMgfSBmcm9tIFwiLi9vdmVybGF5XCI7XG5pbXBvcnQgeyBuZXdWaWRlb1N0YXRlLCBvcGVuU2Vzc2lvbiB9IGZyb20gXCIuL3Nlc3Npb25cIjtcbmltcG9ydCB7IGZpcmUsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19wdXBfdmlkZW9fXz86IHsgYWR2YW5jZTogKG1zOiBudW1iZXIpID0+IFByb21pc2U8dW5rbm93bj47IHJlYWR5OiAoKSA9PiBQcm9taXNlPHZvaWQ+IH07XG4gIH1cbiAgaW50ZXJmYWNlIEhUTUxWaWRlb0VsZW1lbnQge1xuICAgIF9fcHVwX2xhc3Rfc3JjX18/OiBzdHJpbmc7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvSG9vayB7XG4gIHJlYWRvbmx5IHNlc3Npb25zID0gbmV3IFdlYWtNYXA8SFRNTFZpZGVvRWxlbWVudCwgVmlkZW9TdGF0ZT4oKTtcbiAgcmVhZG9ubHkgYXR0YWNoaW5nID0gbmV3IFdlYWtNYXA8SFRNTFZpZGVvRWxlbWVudCwgUHJvbWlzZTxWaWRlb1N0YXRlIHwgdW5kZWZpbmVkPj4oKTtcbiAgLy8gRW51bWVyYWJsZSBtaXJyb3Igb2YgaW4tZmxpZ2h0IG9wZW5zIChXZWFrTWFwIGlzbid0IGl0ZXJhYmxlKSBzbyByZWFkeSgpIGNhbiBhd2FpdCB0aGVtLlxuICByZWFkb25seSBvcGVuaW5nID0gbmV3IFNldDxQcm9taXNlPHVua25vd24+PigpO1xuICByZWFkb25seSBjYWNoZSA9IG5ldyBGcmFtZUNhY2hlKCk7XG4gIHJ2ZmNTZXEgPSAwO1xuICBjdXJyTXMgPSAwO1xuICBwcml2YXRlIF9sYXN0U25hcHNob3QgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBPZmZzY3JlZW5DYW52YXM+KCk7XG5cbiAgaW5zdGFsbCgpOiB2b2lkIHtcbiAgICBpbnN0YWxsTWVkaWFTaGltKHRoaXMpO1xuICAgIHRoaXMuc2Nhbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG0gb2YgbXV0cykge1xuICAgICAgICBpZiAobS50eXBlID09PSBcImF0dHJpYnV0ZXNcIiAmJiBtLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQgJiYgbS5hdHRyaWJ1dGVOYW1lID09PSBcInNyY1wiKSB7XG4gICAgICAgICAgdGhpcy5vblNyY0NoYW5nZShtLnRhcmdldCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbS5hZGRlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbihuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtLnJlbW92ZWROb2Rlcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaChuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLm9ic2VydmUoZG9jdW1lbnQsIHsgc3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFtcInNyY1wiXSB9KTtcbiAgICB3aW5kb3cuX19wdXBfdmlkZW9fXyA9IHsgYWR2YW5jZTogKG1zKSA9PiBhZHZhbmNlKHRoaXMsIG1zKSwgcmVhZHk6ICgpID0+IHRoaXMucmVhZHkoKSB9O1xuICB9XG5cbiAgYXR0YWNoKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBuYXRpdmUgPSBmYWxzZSk6IFByb21pc2U8VmlkZW9TdGF0ZSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShleGlzdGluZyk7XG4gICAgfVxuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLmF0dGFjaGluZy5nZXQodmlkZW8pO1xuICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICByZXR1cm4gcGVuZGluZztcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmM7XG4gICAgaWYgKCFzcmMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgaWYgKC9eKGJsb2I6fGRhdGE6fG1lZGlhc3RyZWFtOikvaS50ZXN0KHNyYykpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgY3YgPSBzZXR1cENhbnZhcyh2aWRlbywgdGhpcy5fbGFzdFNuYXBzaG90LmdldCh2aWRlbykpO1xuICAgIGNvbnN0IHN0YXRlID0gbmV3VmlkZW9TdGF0ZSh2aWRlbywgY3YpO1xuICAgIHRoaXMuc2Vzc2lvbnMuc2V0KHZpZGVvLCBzdGF0ZSk7XG4gICAgY29uc3QgcCA9IG9wZW5TZXNzaW9uKHRoaXMsIHsgdmlkZW8sIHN0YXRlLCBzcmMsIGJpcnRoTXM6IHRoaXMuY3Vyck1zLCBuYXRpdmUgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLmF0dGFjaGluZy5kZWxldGUodmlkZW8pO1xuICAgICAgdGhpcy5vcGVuaW5nLmRlbGV0ZShwKTtcbiAgICB9KTtcbiAgICB0aGlzLmF0dGFjaGluZy5zZXQodmlkZW8sIHApO1xuICAgIHRoaXMub3BlbmluZy5hZGQocCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICAvLyBBd2FpdCBvbmx5IHRoZSBvcGVucyBpbiBmbGlnaHQgcmlnaHQgbm93IOKAlCBuZXZlciBjaGFzZSBuZXdseS1zcGF3bmVkIG9uZXMsIG9yIGEgcmV0cnlpbmcgcGFnZSBsb29wcyBmb3JldmVyLlxuICBhc3luYyByZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoWy4uLnRoaXMub3BlbmluZ10pO1xuICB9XG5cbiAgcmVzdW1lKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGF0ZS5wYXVzZWQgPSBmYWxzZTtcbiAgICBzdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIGZpcmUodmlkZW8sIFwicGxheVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcInBsYXlpbmdcIik7XG4gIH1cblxuICBkZXRhY2godmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzdGF0ZS5tZXRhKSB7XG4gICAgICBpZiAoc3RhdGUubGFzdERyYXduSWR4ID49IDApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzbmFwID0gbmV3IE9mZnNjcmVlbkNhbnZhcyhzdGF0ZS5jdi53aWR0aCwgc3RhdGUuY3YuaGVpZ2h0KTtcbiAgICAgICAgICBjb25zdCBzY3R4ID0gc25hcC5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICAgICAgaWYgKCFzY3R4KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyAyZCBjb250ZXh0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzY3R4LmRyYXdJbWFnZShzdGF0ZS5jdiwgMCwgMCk7XG4gICAgICAgICAgdGhpcy5fbGFzdFNuYXBzaG90LnNldCh2aWRlbywgc25hcCk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICAgIHRoaXMuY2FjaGUucmVsZWFzZShzdGF0ZS5tZXRhLmlkLCBzdGF0ZSk7IC8vIHN0YWxlIGJpdG1hcHMgbXVzdCBub3Qgc3Vydml2ZSBhIGRldGFjaDsgZnJlc2ggb3BlbiByZS1rZXlzIHRvIHRoZSBuZXcgc2Vzc2lvblxuICAgIH1cbiAgICBzdGF0ZS5jdi5yZW1vdmUoKTtcbiAgICB0aGlzLnNlc3Npb25zLmRlbGV0ZSh2aWRlbyk7XG4gICAgdGhpcy5hdHRhY2hpbmcuZGVsZXRlKHZpZGVvKTtcbiAgfVxuXG4gIG9uU3JjQ2hhbmdlKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmMgfHwgXCJcIjtcbiAgICBpZiAodmlkZW8uX19wdXBfbGFzdF9zcmNfXyA9PT0gc3JjKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZpZGVvLl9fcHVwX2xhc3Rfc3JjX18gPSBzcmM7XG4gICAgaWYgKHRoaXMuc2Vzc2lvbnMuaGFzKHZpZGVvKSkge1xuICAgICAgdGhpcy5kZXRhY2godmlkZW8pO1xuICAgIH1cbiAgICB0aGlzLmF0dGFjaCh2aWRlbyk7XG4gIH1cblxuICAvLyBSZS1vcGVuIGF0IG5hdGl2ZSByZXNvbHV0aW9uICh0aGUgZWxlbWVudCBvdXRncmV3IHRoZSBkb3duc2NhbGVkIGRlY29kZSksIHByZXNlcnZpbmcgcGxheWJhY2sgc3RhdGUuXG4gIHJlYXR0YWNoKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHQgPSBzdGF0ZS5jdXJyZW50VGltZTtcbiAgICBjb25zdCBwYXVzZWQgPSBzdGF0ZS5wYXVzZWQ7XG4gICAgY29uc3QgZW5kZWQgPSBzdGF0ZS5lbmRlZDtcbiAgICB0aGlzLmRldGFjaCh2aWRlbyk7XG4gICAgdm9pZCB0aGlzLmF0dGFjaCh2aWRlbywgdHJ1ZSkudGhlbigobnMpID0+IHtcbiAgICAgIGlmICghbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbnMuY3VycmVudFRpbWUgPSB0O1xuICAgICAgbnMucGF1c2VkID0gcGF1c2VkO1xuICAgICAgbnMuZW5kZWQgPSBlbmRlZDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nhbihyb290OiBFbGVtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghcm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocm9vdC50YWdOYW1lID09PSBcIlZJREVPXCIpIHtcbiAgICAgIHRoaXMuYXR0YWNoKHJvb3QgYXMgSFRNTFZpZGVvRWxlbWVudCk7XG4gICAgfVxuICAgIGlmIChyb290LnF1ZXJ5U2VsZWN0b3JBbGwpIHtcbiAgICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbChcInZpZGVvXCIpLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgdGhpcy5hdHRhY2godik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxWaWRlb0hvb2soKTogdm9pZCB7XG4gIGlmICh3aW5kb3cuX19wdXBfdmlkZW9fXykge1xuICAgIHJldHVybjtcbiAgfVxuICBuZXcgVmlkZW9Ib29rKCkuaW5zdGFsbCgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8yNy5cblxuaW1wb3J0IHsgaW5zdGFsbEF1ZGlvU2hpbSB9IGZyb20gXCIuL2F1ZGlvL3NoaW1cIjtcbmltcG9ydCB7IGluc3RhbGxIZkhvb2sgfSBmcm9tIFwiLi9oeXBlcmZyYW1lc1wiO1xuaW1wb3J0IHsgaW5zdGFsbFRpY2tIb29rIH0gZnJvbSBcIi4vdGlja1wiO1xuaW1wb3J0IHsgaW5zdGFsbFZpZGVvSG9vayB9IGZyb20gXCIuL3ZpZGVvL2hvb2tcIjtcblxuaWYgKHdpbmRvdy5zZWxmICE9PSB3aW5kb3cudG9wKSB7XG4gIGluc3RhbGxBdWRpb1NoaW0oKTtcbiAgaW5zdGFsbEhmSG9vaygpO1xuICBpbnN0YWxsVGlja0hvb2soKTtcbiAgaW5zdGFsbFZpZGVvSG9vaygpO1xufVxuIl19
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2F1ZGlvL3NoaW0udHMiLCIuLi8uLi9zcmMvcnVudGltZS9oeXBlcmZyYW1lcy50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3RpY2sudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9vdmVybGF5LnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vdHlwZXMudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9kcml2ZXIudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9mcmFtZV9jYWNoZS50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL21lZGlhX3NoaW0udHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9zZXNzaW9uLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vaG9vay50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3Nob290LnRzIl0sIm5hbWVzIjpbImZhaWwiLCJlbCIsIkF1ZGlvU2hpbSIsInVybCIsImluc3RhbGxBdWRpb1NoaW0iLCJOYXRpdmVBdWRpbyIsIkhBRSIsImluc3RhbGxIZkhvb2siLCJpbnN0YWxsVGlja0hvb2siLCJSRUFMX0RBVEUiLCJkYXRlT3JpZ2luIiwiY3Vyck1zIiwidGltZU9mZnNldCIsInJhZlF1ZXVlIiwidGltZXJzIiwibmV4dElkIiwidGljayIsIkZha2VEYXRlIiwiYXJncyIsImNiIiwiaWQiLCJyIiwiZGVsYXkiLCJkIiwic2FmZUludm9rZVRpbWVyIiwiZm4iLCJlIiwic2FmZUludm9rZVJhZiIsInRzIiwiYW5pbVN0YXRlIiwiZW5kQm91bmRhcnkiLCJhIiwidCIsInN5bmNBbmltYXRpb25zIiwibXMiLCJhbmltcyIsInN0YXRlIiwicmF0ZSIsInMiLCJjdCIsImN0MCIsInRhcmdldCIsImVuZCIsInByb2Nlc3MiLCJ0aW1lc3RhbXBNcyIsInJhZnMiLCJNSVJST1JfUFJPUFMiLCJjc3NDYXNlIiwiYyIsInN5bmNPdmVybGF5IiwidmlkZW8iLCJjdiIsImNzIiwicCIsInYiLCJzaG93blBpeGVscyIsInZyIiwiZHByIiwic2V0dXBDYW52YXMiLCJzbmFwIiwiZml0UmVjdCIsInNyY1ciLCJzcmNIIiwiZHN0VyIsImRzdEgiLCJmaXQiLCJzYyIsImsiLCJ3cyIsImhzIiwic2MyIiwid3MyIiwiaHMyIiwiU0NIRU1FIiwiVEFHIiwidGltZVJhbmdlcyIsImZpcmUiLCJ0eXBlIiwiZmlyZUZyYW1lQ2FsbGJhY2tzIiwiY2JzIiwibm93IiwibWV0YSIsInBhaW50IiwiaG9vayIsImlkeCIsImJtIiwiZmV0Y2hlZCIsImFkdmFuY2UiLCJkdCIsInBzIiwiRkVUQ0hfVElNRU9VVF9NUyIsIkZyYW1lQ2FjaGUiLCJleGlzdGluZyIsImNhY2hlZCIsInciLCJoIiwicmVzIiwic2V0dGxlIiwiYnVmIiwiZnJvbUlkeCIsImNvdW50IiwibWF4SWR4IiwiaSIsIm1pbklkeCIsImZsb29yIiwiaW5zdGFsbE1lZGlhU2hpbSIsIkhWRSIsIk1FRElBIiwibWRlc2MiLCJjdERlc2MiLCJzcmNEZXNjIiwicmF0ZURlc2MiLCJvcmlnUGF1c2UiLCJvcmlnUlZGQyIsIm9yaWdDYW5jZWxSVkZDIiwib3JpZ1F1YWxpdHkiLCJvcmlnTG9hZCIsInNlc3Npb25zIiwiZGVmIiwicHJvcCIsInBpY2siLCJuYXRpdmVHZXQiLCJucyIsImN0R2V0IiwiY3RTZXQiLCJkdXIiLCJyYXRlU2V0Iiwic3JjU2V0IiwibmV3VmlkZW9TdGF0ZSIsImZhaWxPcGVuIiwiZXJyb3IiLCJvcGVuU2Vzc2lvbiIsInNyYyIsImJpcnRoTXMiLCJuYXRpdmUiLCJmcHMiLCJxIiwibmF0aXZlTWV0YSIsIlZpZGVvSG9vayIsIm11dHMiLCJtIiwicGVuZGluZyIsInNjdHgiLCJubWV0YSIsIm9sZElkIiwicm9vdCIsImluc3RhbGxWaWRlb0hvb2siXSwibWFwcGluZ3MiOiJ5QkFLQSxTQUFTQSxDQUFBQSxDQUFLQyxFQUE0QixDQUN4QyxjQUFBLENBQWUsSUFBTSxDQUNuQixNQUFBLENBQU8sY0FBQSxDQUFlQSxDQUFB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ekJ0SSxDQUFBQSxHQUNBRyxDQUFBQSxFQUFjLENBQ2RDLENBQUFBLEVBQWdCLENBQ2hCMEksQ0FBQUEsRUFBaUIsQ0FBQSIsImZpbGUiOiJzaG9vdC5nbG9iYWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtZCBjYXB0dXJlcyBubyBhdWRpbzsgYSBsb2FkaW5nIDxhdWRpbz4gd291bGQgaGl0IHRoZSBtZWRpYeKGknN0dWIgcmVkaXJlY3QsIHdoaWNoIHNlcnZlcyB2aWRlbyBzdHVicyBvbmx5LlxuXG5jb25zdCBTUkNfTk9UX1NVUFBPUlRFRCA9IDQ7IC8vIE1FRElBX0VSUl9TUkNfTk9UX1NVUFBPUlRFRFxuXG4vLyBNaXJyb3IgYSBmYWlsZWQgbmF0aXZlIGxvYWQgc28gZXJyb3ItaGFuZGxpbmcgcGFnZXMgcHJvY2VlZCBleGFjdGx5IGFzIHRoZXkgZG8gd2hlbiB0aGUgc291cmNlIGlzIGJyb2tlbi5cbmZ1bmN0aW9uIGZhaWwoZWw6IEhUTUxBdWRpb0VsZW1lbnQpOiB2b2lkIHtcbiAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgXCJlcnJvclwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogeyBjb2RlOiBTUkNfTk9UX1NVUFBPUlRFRCwgbWVzc2FnZTogXCJhdWRpbyBkaXNhYmxlZCBpbiBkZXRlcm1pbmlzdGljIG1vZGVcIiB9LFxuICAgIH0pO1xuICAgIGVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiZXJyb3JcIikpO1xuICB9KTtcbn1cblxuLy8gVGhlIG5hdGl2ZSBBdWRpbygpIGNvbnN0cnVjdG9yIGludm9rZXMgdGhlIGxvYWQgYWxnb3JpdGhtIGludGVybmFsbHksIHNvIG9ubHkgYSBjb25zdHJ1Y3RvciBzd2FwIGNhbiBwcmVlbXB0IHRoZSBmZXRjaC5cbmZ1bmN0aW9uIEF1ZGlvU2hpbSh1cmw/OiBzdHJpbmcpOiBIVE1MQXVkaW9FbGVtZW50IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYXVkaW9cIik7XG4gIGVsLnByZWxvYWQgPSBcIm5vbmVcIjtcbiAgaWYgKHVybCkge1xuICAgIGVsLnNyYyA9IHVybDtcbiAgICBmYWlsKGVsKTtcbiAgfVxuICByZXR1cm4gZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsQXVkaW9TaGltKCk6IHZvaWQge1xuICBjb25zdCBOYXRpdmVBdWRpbyA9IHdpbmRvdy5BdWRpbztcbiAgd2luZG93LkF1ZGlvID0gQXVkaW9TaGltIGFzIHVua25vd24gYXMgdHlwZW9mIEF1ZGlvO1xuICB3aW5kb3cuQXVkaW8ucHJvdG90eXBlID0gTmF0aXZlQXVkaW8ucHJvdG90eXBlO1xuXG4gIGNvbnN0IEhBRSA9IEhUTUxBdWRpb0VsZW1lbnQucHJvdG90eXBlO1xuICBIQUUubG9hZCA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MQXVkaW9FbGVtZW50KSB7XG4gICAgZmFpbCh0aGlzKTtcbiAgfTtcbiAgSEFFLnBsYXkgPSBmdW5jdGlvbiAodGhpczogSFRNTEF1ZGlvRWxlbWVudCkge1xuICAgIGZhaWwodGhpcyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oXCJhdWRpbyBkaXNhYmxlZCBpbiBkZXRlcm1pbmlzdGljIG1vZGVcIiwgXCJOb3RTdXBwb3J0ZWRFcnJvclwiKSk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzE2LlxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fSEZfTU9ERV9fPzogc3RyaW5nO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsSGZIb29rKCkge1xuICB3aW5kb3cuX19IRl9NT0RFX18gPSBcImV4cG9ydFwiO1xufVxuIiwiZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF90aWNrX18/OiB7IHByb2Nlc3M6IChtczogbnVtYmVyKSA9PiB2b2lkIH07XG4gIH1cbn1cblxuaW50ZXJmYWNlIFRpbWVyIHtcbiAgdHlwZTogXCJ0aW1lb3V0XCIgfCBcImludGVydmFsXCI7XG4gIGNiOiBUaW1lckhhbmRsZXI7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG5leHQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJhZkVudHJ5IHtcbiAgaWQ6IG51bWJlcjtcbiAgY2I6IEZyYW1lUmVxdWVzdENhbGxiYWNrO1xufVxuXG5pbnRlcmZhY2UgQW5pbUVudHJ5IHtcbiAgc3RhcnRNczogbnVtYmVyO1xuICBhZG9wdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFRpY2tIb29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3RpY2tfXykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IFJFQUxfREFURSA9IERhdGU7XG4gIGNvbnN0IGRhdGVPcmlnaW4gPSBSRUFMX0RBVEUubm93KCk7XG4gIGxldCBjdXJyTXMgPSAwO1xuICBsZXQgdGltZU9mZnNldCA9IDA7XG4gIGxldCByYWZRdWV1ZTogUmFmRW50cnlbXSA9IFtdO1xuICBjb25zdCB0aW1lcnM6IFJlY29yZDxudW1iZXIsIFRpbWVyIHwgdW5kZWZpbmVkPiA9IHt9O1xuICBsZXQgbmV4dElkID0gMTtcbiAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICB0aW1lT2Zmc2V0ICs9IDAuMDE7XG4gICAgcmV0dXJuIHRpbWVPZmZzZXQ7XG4gIH07XG5cbiAgZnVuY3Rpb24gRmFrZURhdGUodGhpczogdW5rbm93biwgLi4uYXJnczogdW5rbm93bltdKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZha2VEYXRlKSkge1xuICAgICAgcmV0dXJuIG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcykudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3MubGVuZ3RoXG4gICAgICA/IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoUkVBTF9EQVRFLCBbbnVsbCwgLi4uYXJnc10pKSgpXG4gICAgICA6IG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKSk7XG4gIH1cbiAgRmFrZURhdGUucHJvdG90eXBlID0gUkVBTF9EQVRFLnByb3RvdHlwZTtcbiAgRmFrZURhdGUubm93ID0gKCkgPT4gZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKTtcbiAgRmFrZURhdGUucGFyc2UgPSBSRUFMX0RBVEUucGFyc2U7XG4gIEZha2VEYXRlLlVUQyA9IFJFQUxfREFURS5VVEM7XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IERhdGU6IHVua25vd24gfSkuRGF0ZSA9IEZha2VEYXRlO1xuICBwZXJmb3JtYW5jZS5ub3cgPSAoKSA9PiBjdXJyTXMgKyB0aWNrKCk7XG5cbiAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IChjYikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgcmFmUXVldWUucHVzaCh7IGlkLCBjYiB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IChpZCkgPT4ge1xuICAgIHJhZlF1ZXVlID0gcmFmUXVldWUuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH07XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IHNldFRpbWVvdXQ6IHVua25vd24gfSkuc2V0VGltZW91dCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogXCJ0aW1lb3V0XCIsIGNiLCBkZWxheTogZGVsYXkgfHwgMCwgbmV4dDogY3Vyck1zICsgKGRlbGF5IHx8IDApIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gKGlkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZGVsZXRlIHRpbWVyc1tpZF07XG4gICAgfVxuICB9O1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBzZXRJbnRlcnZhbDogdW5rbm93biB9KS5zZXRJbnRlcnZhbCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgY29uc3QgZCA9IE1hdGgubWF4KGRlbGF5IHx8IDAsIDEpO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6IFwiaW50ZXJ2YWxcIiwgY2IsIGRlbGF5OiBkLCBuZXh0OiBjdXJyTXMgKyBkIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IChpZCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGRlbGV0ZSB0aW1lcnNbaWRdO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzYWZlSW52b2tlVGltZXIoZm46IFRpbWVySGFuZGxlcikge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGZuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIFN0cmluZyB0aW1lciBoYW5kbGVyIHJ1bnMgYXMgcGFnZSBzY3JpcHQgaW4gZ2xvYmFsIHNjb3BlIChIVE1MIHNwZWMpOyBGdW5jdGlvbiBjdG9yIG1hdGNoZXMgdGhhdCwgYXZvaWRzIGV2YWwuXG4gICAgICAgIG5ldyBGdW5jdGlvbihmbikoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIltUaWNrXSBlcnJvcjpcIiwgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB8fCBlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2FmZUludm9rZVJhZihjYjogRnJhbWVSZXF1ZXN0Q2FsbGJhY2ssIHRzOiBudW1iZXIpIHtcbiAgICB0cnkge1xuICAgICAgY2IodHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbVGlja10gZXJyb3I6XCIsIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykgfHwgZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW5pbVN0YXRlID0gbmV3IFdlYWtNYXA8QW5pbWF0aW9uLCBBbmltRW50cnk+KCk7XG4gIGZ1bmN0aW9uIGVuZEJvdW5kYXJ5KGE6IEFuaW1hdGlvbik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHQgPSBhLmVmZmVjdD8uZ2V0Q29tcHV0ZWRUaW1pbmcoKS5lbmRUaW1lO1xuICAgICAgcmV0dXJuIHR5cGVvZiB0ID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh0KSA/IHQgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBEZXRhY2hlZC9mb3JlaWduIGVmZmVjdHMgaGF2ZSBubyB0aW1pbmc7IHRyZWF0IGFzIHVuYm91bmRlZC5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIC8vIEFkb3B0IHJ1bm5pbmcgYW5pbWF0aW9ucyAocGF1c2UgKyBkcml2ZSBjdXJyZW50VGltZSBvZmYgdGhlIHZpcnR1YWwgY2xvY2spOiBhbiBpbmZpbml0ZSBjb21wb3NpdG9yIGFuaW1hdGlvbiBvdGhlcndpc2Uga2VlcHMgdml6IGZyZWUtcnVubmluZyBhdCBSRU5ERVJfRlBTLCBzdGFydmluZyBDRFAgZXZhbHMuXG4gIGZ1bmN0aW9uIHN5bmNBbmltYXRpb25zKG1zOiBudW1iZXIpIHtcbiAgICBsZXQgYW5pbXM6IEFuaW1hdGlvbltdO1xuICAgIHRyeSB7XG4gICAgICBhbmltcyA9IGRvY3VtZW50LmdldEFuaW1hdGlvbnMoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhIG9mIGFuaW1zKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IGEucGxheVN0YXRlO1xuICAgICAgaWYgKHN0YXRlID09PSBcImlkbGVcIiB8fCBzdGF0ZSA9PT0gXCJmaW5pc2hlZFwiKSB7XG4gICAgICAgIGFuaW1TdGF0ZS5kZWxldGUoYSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmF0ZSA9IHR5cGVvZiBhLnBsYXliYWNrUmF0ZSA9PT0gXCJudW1iZXJcIiA/IGEucGxheWJhY2tSYXRlIDogMTtcbiAgICAgIGlmIChyYXRlID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IHMgPSBhbmltU3RhdGUuZ2V0KGEpO1xuICAgICAgaWYgKCFzKSB7XG4gICAgICAgIGNvbnN0IGN0MCA9IHR5cGVvZiBhLmN1cnJlbnRUaW1lID09PSBcIm51bWJlclwiID8gYS5jdXJyZW50VGltZSA6IDA7XG4gICAgICAgIHMgPSB7IHN0YXJ0TXM6IG1zIC0gY3QwIC8gcmF0ZSwgYWRvcHRlZDogc3RhdGUgIT09IFwicGF1c2VkXCIgfTtcbiAgICAgICAgYW5pbVN0YXRlLnNldChhLCBzKTtcbiAgICAgICAgaWYgKHMuYWRvcHRlZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhLnBhdXNlKCk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBQYXVzZS1yZWplY3Rpbmcgc3RhdGVzIChlLmcuIG1pZC1jYW5jZWwpIHN0aWxsIGFjY2VwdCBjdXJyZW50VGltZSB3cml0ZXMgYmVsb3cuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzLmFkb3B0ZWQgJiYgc3RhdGUgIT09IFwicGF1c2VkXCIpIHtcbiAgICAgICAgY29uc3QgY3QgPSB0eXBlb2YgYS5jdXJyZW50VGltZSA9PT0gXCJudW1iZXJcIiA/IGEuY3VycmVudFRpbWUgOiAwO1xuICAgICAgICBzLnN0YXJ0TXMgPSBtcyAtIGN0IC8gcmF0ZTtcbiAgICAgICAgcy5hZG9wdGVkID0gdHJ1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhLnBhdXNlKCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIFNhbWUgYXMgYWRvcHRpb24gYWJvdmU6IGRyaXZlIGJ5IGN1cnJlbnRUaW1lIHJlZ2FyZGxlc3MuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghcy5hZG9wdGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFyZ2V0ID0gKG1zIC0gcy5zdGFydE1zKSAqIHJhdGU7XG4gICAgICBjb25zdCBlbmQgPSBlbmRCb3VuZGFyeShhKTtcbiAgICAgIC8vIGZpbmlzaCgpIHNlZWtzIHRvIHRoZSByYXRlLWFwcHJvcHJpYXRlIGJvdW5kYXJ5IGFuZCBhcHBsaWVzIGZpbGwgbW9kZTsgcGF1c2VkIGhvbGRzIHdvdWxkIG1pc3JlbmRlciBmaWxsOm5vbmUuXG4gICAgICBpZiAocmF0ZSA+IDAgPyBlbmQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgPj0gZW5kIDogdGFyZ2V0IDw9IDApIHtcbiAgICAgICAgYW5pbVN0YXRlLmRlbGV0ZShhKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhLmZpbmlzaCgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJbmZpbml0ZS1kdXJhdGlvbiByZXZlcnNlIG9yIGRldGFjaGVkIGVmZmVjdDogbGVhdmUgYXMtaXMuXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBhLmN1cnJlbnRUaW1lID0gdGFyZ2V0O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3ModGltZXN0YW1wTXM6IG51bWJlcikge1xuICAgIGN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICAgIHRpbWVPZmZzZXQgPSAwO1xuICAgIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXModGltZXJzKSkge1xuICAgICAgY29uc3QgdCA9IHRpbWVyc1tOdW1iZXIoaWQpXTtcbiAgICAgIGlmICghdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICh0Lm5leHQgPD0gY3Vyck1zKSB7XG4gICAgICAgIHNhZmVJbnZva2VUaW1lcih0LmNiKTtcbiAgICAgICAgaWYgKHQudHlwZSA9PT0gXCJ0aW1lb3V0XCIpIHtcbiAgICAgICAgICBkZWxldGUgdGltZXJzW051bWJlcihpZCldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHQubmV4dCArPSB0LmRlbGF5O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByYWZzID0gcmFmUXVldWUuc3BsaWNlKDApO1xuICAgIGZvciAoY29uc3QgciBvZiByYWZzKSB7XG4gICAgICBzYWZlSW52b2tlUmFmKHIuY2IsIGN1cnJNcyk7XG4gICAgfVxuICAgIHN5bmNBbmltYXRpb25zKGN1cnJNcyk7XG4gIH1cblxuICB3aW5kb3cuX19wdXBfdGlja19fID0geyBwcm9jZXNzIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG50eXBlIFZlYzQgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuY29uc3QgTUlSUk9SX1BST1BTID0gW1xuICBcImJvcmRlclJhZGl1c1wiLFxuICBcImJvcmRlclRvcExlZnRSYWRpdXNcIixcbiAgXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFxuICBcImJvcmRlckJvdHRvbUxlZnRSYWRpdXNcIixcbiAgXCJib3JkZXJCb3R0b21SaWdodFJhZGl1c1wiLFxuICBcInRyYW5zZm9ybVwiLFxuICBcInRyYW5zZm9ybU9yaWdpblwiLFxuICBcImZpbHRlclwiLFxuICBcImNsaXBQYXRoXCIsXG4gIFwiYm94U2hhZG93XCIsXG4gIFwib3BhY2l0eVwiLFxuICBcIm1peEJsZW5kTW9kZVwiLFxuICBcIm1hc2tcIixcbiAgXCJ6SW5kZXhcIixcbiAgXCJvYmplY3RGaXRcIixcbiAgXCJvYmplY3RQb3NpdGlvblwiLFxuICBcInBvc2l0aW9uXCIsXG4gIFwibGVmdFwiLFxuICBcInRvcFwiLFxuICBcInJpZ2h0XCIsXG4gIFwiYm90dG9tXCIsXG5dIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBjc3NDYXNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1tBLVpdL2csIChjKSA9PiBgLSR7Yy50b0xvd2VyQ2FzZSgpfWApO1xufVxuXG4vLyBUcmFjayB0aGUgb3ZlcmxheSB0byB0aGUgZWxlbWVudCdzIGxpdmUgYm94IHZpYSBDU1Mgb25seTsgYmFja2luZyBzdGF5cyBhdCBkZWNvZGUgcmVzIG9yIHpvb20gd2lwZXMgcmlzayBibGFuayBmcmFtZXMuXG5leHBvcnQgZnVuY3Rpb24gc3luY092ZXJsYXkodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGN2OiBIVE1MQ2FudmFzRWxlbWVudCk6IGJvb2xlYW4ge1xuICBjb25zdCBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKTtcbiAgY3Yuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gIC8vIG9mZnNldCogYXJlIHByZS10cmFuc2Zvcm0gY29vcmRzIGZyb20gb2Zmc2V0UGFyZW50J3MgcGFkZGluZyBlZGdlID0gdGhlIGFicyBjb250YWluaW5nLWJsb2NrIG9yaWdpbjsgbWFwIGRpcmVjdC5cbiAgY3Yuc3R5bGUubGVmdCA9IGAke3ZpZGVvLm9mZnNldExlZnR9cHhgO1xuICBjdi5zdHlsZS50b3AgPSBgJHt2aWRlby5vZmZzZXRUb3B9cHhgO1xuICBjdi5zdHlsZS53aWR0aCA9IGAke3ZpZGVvLm9mZnNldFdpZHRofXB4YDtcbiAgY3Yuc3R5bGUuaGVpZ2h0ID0gYCR7dmlkZW8ub2Zmc2V0SGVpZ2h0fXB4YDtcbiAgZm9yIChjb25zdCBwIG9mIE1JUlJPUl9QUk9QUykge1xuICAgIGlmIChwID09PSBcInBvc2l0aW9uXCIgfHwgcCA9PT0gXCJsZWZ0XCIgfHwgcCA9PT0gXCJ0b3BcIiB8fCBwID09PSBcInJpZ2h0XCIgfHwgcCA9PT0gXCJib3R0b21cIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHYgPSBjcy5nZXRQcm9wZXJ0eVZhbHVlKGNzc0Nhc2UocCkpO1xuICAgIGlmICh2KSB7XG4gICAgICBjdi5zdHlsZS5zZXRQcm9wZXJ0eShjc3NDYXNlKHApLCB2KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBPbi1zY3JlZW4gKHBvc3QtdHJhbnNmb3JtKSBwaXhlbCBzaXplIG9mIGEgdmlkZW8gZWxlbWVudCAoZHJpdmVzIHRoZSBuYXRpdmUgcmUtYXR0YWNoIHRocmVzaG9sZCkuXG5leHBvcnQgZnVuY3Rpb24gc2hvd25QaXhlbHModmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0ge1xuICBjb25zdCB2ciA9IHZpZGVvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHZyLndpZHRoICogZHByKSksXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHZyLmhlaWdodCAqIGRwcikpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBDYW52YXModmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHNuYXA6IE9mZnNjcmVlbkNhbnZhcyB8IHVuZGVmaW5lZCk6IEhUTUxDYW52YXNFbGVtZW50IHtcbiAgY29uc3QgY3YgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICBjdi5kYXRhc2V0W1wicHVwVmlkZW9PdmVybGF5XCJdID0gXCIxXCI7XG4gIGN2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgdmlkZW8uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gIHZpZGVvLm11dGVkID0gdHJ1ZTtcbiAgY29uc3QgcGFyZW50ID0gdmlkZW8ucGFyZW50Tm9kZSB8fCBkb2N1bWVudC5ib2R5O1xuICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGN2LCB2aWRlby5uZXh0U2libGluZyk7XG4gIHN5bmNPdmVybGF5KHZpZGVvLCBjdik7XG4gIGlmIChzbmFwKSB7XG4gICAgdHJ5IHtcbiAgICAgIGN2LmdldENvbnRleHQoXCIyZFwiKSEuZHJhd0ltYWdlKHNuYXAsIDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuICByZXR1cm4gY3Y7XG59XG5cbi8vIERyYXcgcmVjdCBmb3IgdGhlIGJpdG1hcCB3aXRoaW4gdGhlIGNhbnZhcyBwZXIgb2JqZWN0Rml0LlxuZXhwb3J0IGZ1bmN0aW9uIGZpdFJlY3Qoc3JjVzogbnVtYmVyLCBzcmNIOiBudW1iZXIsIGRzdFc6IG51bWJlciwgZHN0SDogbnVtYmVyLCBmaXQ6IHN0cmluZyk6IFZlYzQge1xuICBpZiAoZml0ID09PSBcIm5vbmVcIikge1xuICAgIHJldHVybiBbKGRzdFcgLSBzcmNXKSAvIDIsIChkc3RIIC0gc3JjSCkgLyAyLCBzcmNXLCBzcmNIXTtcbiAgfVxuICBpZiAoZml0ID09PSBcImNvbnRhaW5cIiB8fCBmaXQgPT09IFwic2NhbGUtZG93blwiKSB7XG4gICAgY29uc3Qgc2MgPSBNYXRoLm1pbihkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgIGNvbnN0IGsgPSBmaXQgPT09IFwic2NhbGUtZG93blwiID8gTWF0aC5taW4oMSwgc2MpIDogc2M7XG4gICAgY29uc3Qgd3MgPSBrICogc3JjVztcbiAgICBjb25zdCBocyA9IGsgKiBzcmNIO1xuICAgIHJldHVybiBbKGRzdFcgLSB3cykgLyAyLCAoZHN0SCAtIGhzKSAvIDIsIHdzLCBoc107XG4gIH1cbiAgaWYgKGZpdCA9PT0gXCJjb3ZlclwiKSB7XG4gICAgY29uc3Qgc2MyID0gTWF0aC5tYXgoZHN0VyAvIHNyY1csIGRzdEggLyBzcmNIKTtcbiAgICBjb25zdCB3czIgPSBzYzIgKiBzcmNXO1xuICAgIGNvbnN0IGhzMiA9IHNjMiAqIHNyY0g7XG4gICAgcmV0dXJuIFsoZHN0VyAtIHdzMikgLyAyLCAoZHN0SCAtIGhzMikgLyAyLCB3czIsIGhzMl07XG4gIH1cbiAgcmV0dXJuIFswLCAwLCBkc3RXLCBkc3RIXTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmV4cG9ydCBjb25zdCBTQ0hFTUUgPSBcInB1cC1mcmFtZTovL1wiO1xuZXhwb3J0IGNvbnN0IEFIRUFEID0gMTA7XG5leHBvcnQgY29uc3QgVEFHID0gXCJbVmlkZW9Ib29rXVwiO1xuXG5leHBvcnQgY29uc3QgTUVESUFfRVJSX05FVFdPUksgPSAyO1xuZXhwb3J0IGNvbnN0IE1FRElBX0VSUl9ERUNPREUgPSAzO1xuZXhwb3J0IGNvbnN0IEhBVkVfTk9USElORyA9IDA7XG5leHBvcnQgY29uc3QgSEFWRV9NRVRBREFUQSA9IDE7XG5leHBvcnQgY29uc3QgSEFWRV9FTk9VR0hfREFUQSA9IDQ7XG5leHBvcnQgY29uc3QgTkVUV09SS19FTVBUWSA9IDA7XG5leHBvcnQgY29uc3QgTkVUV09SS19JRExFID0gMTtcbmV4cG9ydCBjb25zdCBORVRXT1JLX0xPQURJTkcgPSAyO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfTk9fU09VUkNFID0gMztcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnJhbWVXaWR0aDogbnVtYmVyO1xuICBmcmFtZUhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0ZyYW1lTWV0YSB7XG4gIHByZXNlbnRhdGlvblRpbWU6IG51bWJlcjtcbiAgZXhwZWN0ZWREaXNwbGF5VGltZTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgbWVkaWFUaW1lOiBudW1iZXI7XG4gIHByZXNlbnRlZEZyYW1lczogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBGcmFtZUNiID0gKG5vdzogbnVtYmVyLCBtZXRhOiBWaWRlb0ZyYW1lTWV0YSkgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBNZWRpYUVycm9yTGlrZSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ2FjaGUge1xuICBiaXRtYXBzOiBNYXA8bnVtYmVyLCBJbWFnZUJpdG1hcD47XG4gIGluRmxpZ2h0OiBNYXA8bnVtYmVyLCBQcm9taXNlPEltYWdlQml0bWFwIHwgdW5kZWZpbmVkPj47XG4gIHJlYWRlcnM6IE1hcDxWaWRlb1N0YXRlLCBudW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU3RhdGUge1xuICBtZXRhPzogVmlkZW9NZXRhO1xuICBjdjogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBwYXVzZWQ6IGJvb2xlYW47XG4gIGN1cnJlbnRUaW1lOiBudW1iZXI7XG4gIGVuZGVkOiBib29sZWFuO1xuICBsYXN0RHJhd25JZHg6IG51bWJlcjtcbiAgZGVhZDogYm9vbGVhbjtcbiAgb2JqZWN0Rml0OiBzdHJpbmc7XG4gIHJlYWR5U3RhdGU6IG51bWJlcjtcbiAgbmV0d29ya1N0YXRlOiBudW1iZXI7XG4gIHNlZWtpbmc6IGJvb2xlYW47XG4gIHdhaXRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBNZWRpYUVycm9yTGlrZSB8IHVuZGVmaW5lZDtcbiAgcHJlc2VudGVkRnJhbWVzOiBudW1iZXI7XG4gIG1heFJlYWNoZWQ6IG51bWJlcjtcbiAgcnZmYzogTWFwPG51bWJlciwgRnJhbWVDYj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZVJhbmdlc0xpa2Uge1xuICBsZW5ndGg6IG51bWJlcjtcbiAgc3RhcnQoaTogbnVtYmVyKTogbnVtYmVyO1xuICBlbmQoaTogbnVtYmVyKTogbnVtYmVyO1xufVxuXG4vLyBXaG9sZSBjbGlwIGlzIGRlY29kZS1vbi1kZW1hbmQsIHNvIHRoZSBhdmFpbGFibGUgcmFuZ2UgaXMgYWx3YXlzIFswLCBlbmRdIChvbmUgVGltZVJhbmdlcyBlbnRyeSkuXG5leHBvcnQgZnVuY3Rpb24gdGltZVJhbmdlcyhlbmQ6IG51bWJlcik6IFRpbWVSYW5nZXNMaWtlIHtcbiAgcmV0dXJuIHsgbGVuZ3RoOiBlbmQgPiAwID8gMSA6IDAsIHN0YXJ0OiAoKSA9PiAwLCBlbmQ6ICgpID0+IGVuZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyZShlbDogRXZlbnRUYXJnZXQsIHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCh0eXBlKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IGZpdFJlY3QsIHNob3duUGl4ZWxzLCBzeW5jT3ZlcmxheSB9IGZyb20gXCIuL292ZXJsYXlcIjtcbmltcG9ydCB7IEFIRUFELCBmaXJlLCB0eXBlIFZpZGVvRnJhbWVNZXRhLCB0eXBlIFZpZGVvU3RhdGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5mdW5jdGlvbiBmaXJlRnJhbWVDYWxsYmFja3Moc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgaWYgKHN0YXRlLnJ2ZmMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjYnMgPSBbLi4uc3RhdGUucnZmYy52YWx1ZXMoKV07XG4gIHN0YXRlLnJ2ZmMuY2xlYXIoKTtcbiAgY29uc3Qgbm93ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IG1ldGE6IFZpZGVvRnJhbWVNZXRhID0ge1xuICAgIHByZXNlbnRhdGlvblRpbWU6IG5vdyxcbiAgICBleHBlY3RlZERpc3BsYXlUaW1lOiBub3csXG4gICAgd2lkdGg6IHN0YXRlLm1ldGEhLmZyYW1lV2lkdGgsXG4gICAgaGVpZ2h0OiBzdGF0ZS5tZXRhIS5mcmFtZUhlaWdodCxcbiAgICBtZWRpYVRpbWU6IHN0YXRlLmN1cnJlbnRUaW1lLFxuICAgIHByZXNlbnRlZEZyYW1lczogc3RhdGUucHJlc2VudGVkRnJhbWVzLFxuICB9O1xuICBmb3IgKGNvbnN0IGNiIG9mIGNicykge1xuICAgIGNiKG5vdywgbWV0YSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFpbnQoaG9vazogVmlkZW9Ib29rLCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUsIGlkeDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGMgPSBob29rLmNhY2hlLmNhY2hlT2Yoc3RhdGUubWV0YSEuaWQpO1xuICBjLnJlYWRlcnMuc2V0KHN0YXRlLCBpZHgpO1xuICBsZXQgYm0gPSBjLmJpdG1hcHMuZ2V0KGlkeCk7XG4gIGlmICghYm0pIHtcbiAgICBob29rLmNhY2hlLnByZWZldGNoKHN0YXRlLCBpZHggKyAxLCBBSEVBRCAtIDEpO1xuICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCBob29rLmNhY2hlLmZldGNoKHN0YXRlLCBpZHgpO1xuICAgIGlmIChob29rLnNlc3Npb25zLmdldCh2aWRlbykgIT09IHN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZmV0Y2hlZCkge1xuICAgICAgaWYgKCFzdGF0ZS5wYXVzZWQgJiYgIXN0YXRlLndhaXRpbmcpIHtcbiAgICAgICAgc3RhdGUud2FpdGluZyA9IHRydWU7XG4gICAgICAgIGZpcmUodmlkZW8sIFwid2FpdGluZ1wiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYm0gPSBmZXRjaGVkO1xuICB9XG4gIGlmIChzdGF0ZS53YWl0aW5nKSB7XG4gICAgc3RhdGUud2FpdGluZyA9IGZhbHNlO1xuICAgIGlmICghc3RhdGUucGF1c2VkKSB7XG4gICAgICBmaXJlKHZpZGVvLCBcInBsYXlpbmdcIik7XG4gICAgfVxuICB9XG4gIGNvbnN0IGN2ID0gc3RhdGUuY3Y7XG4gIGNvbnN0IHIgPSBmaXRSZWN0KGJtLndpZHRoLCBibS5oZWlnaHQsIGN2LndpZHRoLCBjdi5oZWlnaHQsIHN0YXRlLm9iamVjdEZpdCk7XG4gIHN0YXRlLmN0eC5jbGVhclJlY3QoMCwgMCwgY3Yud2lkdGgsIGN2LmhlaWdodCk7XG4gIHN0YXRlLmN0eC5kcmF3SW1hZ2UoYm0sIHJbMF0sIHJbMV0sIHJbMl0sIHJbM10pO1xuICBzdGF0ZS5sYXN0RHJhd25JZHggPSBpZHg7XG4gIHN0YXRlLnByZXNlbnRlZEZyYW1lcysrO1xuICBmaXJlRnJhbWVDYWxsYmFja3Moc3RhdGUpO1xuICBob29rLmNhY2hlLnByZWZldGNoKHN0YXRlLCBpZHggKyAxLCBBSEVBRCk7XG4gIGhvb2suY2FjaGUuZXZpY3QoYyk7XG59XG5cbi8vIFZpcnR1YWwtdGltZSB0aWNrOiBzeW5jIG92ZXJsYXlzLCBhZHZhbmNlIGVhY2ggaG9va2VkIHZpZGVvJ3MgY2xvY2sgKGxvb3AvZW5kKSwgcGFpbnQgdGhlIGR1ZSBmcmFtZS5cbmV4cG9ydCBmdW5jdGlvbiBhZHZhbmNlKGhvb2s6IFZpZGVvSG9vaywgdGltZXN0YW1wTXM6IG51bWJlcik6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCBkdCA9IE1hdGgubWF4KDAsIHRpbWVzdGFtcE1zIC0gaG9vay5jdXJyTXMpIC8gMTAwMDtcbiAgaG9vay5jdXJyTXMgPSB0aW1lc3RhbXBNcztcbiAgY29uc3QgcHM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwidmlkZW9cIikuZm9yRWFjaCgoZWwpID0+IHtcbiAgICBjb25zdCB2aWRlbyA9IGVsIGFzIEhUTUxWaWRlb0VsZW1lbnQ7XG4gICAgY29uc3Qgc3RhdGUgPSBob29rLnNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKCFzdGF0ZSB8fCBzdGF0ZS5kZWFkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRoZSBlbGVtZW50IG91dGdyZXcgdGhlIGRvd25zY2FsZWQgZGVjb2RlOiBzd2FwIHRvIG5hdGl2ZSBpbiB0aGUgYmFja2dyb3VuZCwga2VlcGluZyB0aGUgb2xkIGZyYW1lIHBhaW50aW5nLlxuICAgIGlmIChcbiAgICAgIHN0YXRlLm1ldGEgJiZcbiAgICAgIHN0YXRlLm1ldGEuZnJhbWVXaWR0aCA8IHN0YXRlLm1ldGEud2lkdGggJiZcbiAgICAgICFob29rLmF0dGFjaGluZy5oYXModmlkZW8pICYmXG4gICAgICAhaG9vay5pc1VwZ3JhZGluZyh2aWRlbykgJiZcbiAgICAgIHNob3duUGl4ZWxzKHZpZGVvKS53aWR0aCA+IHN0YXRlLm1ldGEuZnJhbWVXaWR0aCAqIDEuMDVcbiAgICApIHtcbiAgICAgIGhvb2sudXBncmFkZSh2aWRlbywgc3RhdGUpO1xuICAgIH1cbiAgICAvLyBTdGFsbCB0aGUgdGljayB3aGlsZSBhIHJlLWF0dGFjaCBvcGVucywgb3IgdGhlIHJlc2l6ZS13aXBlZCBjYW52YXMgaXMgY2FwdHVyZWQgYXMgYmxhbmsgZnJhbWVzLlxuICAgIGlmICghc3RhdGUubWV0YSAmJiBob29rLmF0dGFjaGluZy5oYXModmlkZW8pKSB7XG4gICAgICBwcy5wdXNoKGhvb2suYXR0YWNoaW5nLmdldCh2aWRlbykhLnRoZW4oKCkgPT4gdW5kZWZpbmVkKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzeW5jT3ZlcmxheSh2aWRlbywgc3RhdGUuY3YpKSB7XG4gICAgICBzdGF0ZS5sYXN0RHJhd25JZHggPSAtMTtcbiAgICB9XG4gICAgaWYgKCFzdGF0ZS5tZXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEJhY2tpbmcgc3RvcmUgPSBkZWNvZGUgcmVzb2x1dGlvbiBmb3IgdGhlIHNlc3Npb24ncyBsaWZlIChvbmUgc2V0IHBlciBhdHRhY2g7IENTUyBzY2FsZXMgdGhlIHJlc3QpLlxuICAgIGlmIChzdGF0ZS5jdi53aWR0aCAhPT0gc3RhdGUubWV0YS5mcmFtZVdpZHRoIHx8IHN0YXRlLmN2LmhlaWdodCAhPT0gc3RhdGUubWV0YS5mcmFtZUhlaWdodCkge1xuICAgICAgc3RhdGUuY3Yud2lkdGggPSBzdGF0ZS5tZXRhLmZyYW1lV2lkdGg7XG4gICAgICBzdGF0ZS5jdi5oZWlnaHQgPSBzdGF0ZS5tZXRhLmZyYW1lSGVpZ2h0O1xuICAgICAgc3RhdGUubGFzdERyYXduSWR4ID0gLTE7XG4gICAgfVxuICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgc3RhdGUuY3VycmVudFRpbWUgKz0gZHQgKiAodmlkZW8ucGxheWJhY2tSYXRlIHx8IDEpO1xuICAgICAgc3RhdGUubWF4UmVhY2hlZCA9IE1hdGgubWF4KHN0YXRlLm1heFJlYWNoZWQsIHN0YXRlLmN1cnJlbnRUaW1lKTtcbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50VGltZSA+PSBzdGF0ZS5tZXRhLmR1cmF0aW9uKSB7XG4gICAgICAgIGlmICh2aWRlby5sb29wKSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5jdXJyZW50VGltZSAlIHN0YXRlLm1ldGEuZHVyYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5tZXRhLmR1cmF0aW9uO1xuICAgICAgICAgIHN0YXRlLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgICAgICAgIGZpcmUodmlkZW8sIFwiZW5kZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpcmUodmlkZW8sIFwidGltZXVwZGF0ZVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChzdGF0ZS5jdXJyZW50VGltZSAqIHN0YXRlLm1ldGEuZnBzKSk7XG4gICAgaWYgKGlkeCA9PT0gc3RhdGUubGFzdERyYXduSWR4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBzLnB1c2gocGFpbnQoaG9vaywgdmlkZW8sIHN0YXRlLCBpZHgpKTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBTQ0hFTUUsIHR5cGUgVmlkZW9DYWNoZSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuY29uc3QgRkVUQ0hfVElNRU9VVF9NUyA9IDhfMDAwOyAvLyBib3VuZCBhIHN0dWNrIGRlY29kZSAobWF0Y2hlcyB0aGUgZGVjb2RlciByd190aW1lb3V0KSBzbyBwYWludHMgaG9sZCBpbnN0ZWFkIG9mIGZyZWV6aW5nXG5cbi8vIFBlci1zZXNzaW9uIGJpdG1hcCBjYWNoZTogZmV0Y2hlcyBSR0JBIGZyYW1lcyBmcm9tIHRoZSBmcmFtZSBwcm90b2NvbCwgZGVkdXBlcyBpbi1mbGlnaHQsIGV2aWN0cyBiZWhpbmQgcmVhZGVycy5cbmV4cG9ydCBjbGFzcyBGcmFtZUNhY2hlIHtcbiAgcHJpdmF0ZSBfY2FjaGVzID0gbmV3IE1hcDxzdHJpbmcsIFZpZGVvQ2FjaGU+KCk7XG5cbiAgY2FjaGVPZihpZDogc3RyaW5nKTogVmlkZW9DYWNoZSB7XG4gICAgbGV0IGMgPSB0aGlzLl9jYWNoZXMuZ2V0KGlkKTtcbiAgICBpZiAoIWMpIHtcbiAgICAgIGMgPSB7IGJpdG1hcHM6IG5ldyBNYXAoKSwgaW5GbGlnaHQ6IG5ldyBNYXAoKSwgcmVhZGVyczogbmV3IE1hcCgpIH07XG4gICAgICB0aGlzLl9jYWNoZXMuc2V0KGlkLCBjKTtcbiAgICB9XG4gICAgcmV0dXJuIGM7XG4gIH1cblxuICBmZXRjaChzdGF0ZTogVmlkZW9TdGF0ZSwgaWR4OiBudW1iZXIpOiBQcm9taXNlPEltYWdlQml0bWFwIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgbWV0YSA9IHN0YXRlLm1ldGE7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGNvbnN0IGMgPSB0aGlzLmNhY2hlT2YobWV0YS5pZCk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBjLmluRmxpZ2h0LmdldChpZHgpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgICBjb25zdCBjYWNoZWQgPSBjLmJpdG1hcHMuZ2V0KGlkeCk7XG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjYWNoZWQpO1xuICAgIH1cbiAgICBjb25zdCB3ID0gbWV0YS5mcmFtZVdpZHRoO1xuICAgIGNvbnN0IGggPSBtZXRhLmZyYW1lSGVpZ2h0O1xuICAgIGNvbnN0IHAgPSBuZXcgUHJvbWlzZTxJbWFnZUJpdG1hcCB8IHVuZGVmaW5lZD4oKHJlcykgPT4ge1xuICAgICAgY29uc3Qgc2V0dGxlID0gKGJtOiBJbWFnZUJpdG1hcCB8IHVuZGVmaW5lZCk6IHZvaWQgPT4ge1xuICAgICAgICBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpO1xuICAgICAgICBpZiAoYm0pIHtcbiAgICAgICAgICBjLmJpdG1hcHMuc2V0KGlkeCwgYm0pO1xuICAgICAgICB9XG4gICAgICAgIHJlcyhibSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVxID0gZmV0Y2goYCR7U0NIRU1FfWZyYW1lP2lkPSR7bWV0YS5pZH0maWR4PSR7aWR4fWApXG4gICAgICAgIC50aGVuKChyKSA9PiAoci5vayA/IHIuYXJyYXlCdWZmZXIoKSA6IHVuZGVmaW5lZCkpXG4gICAgICAgIC50aGVuKChidWYpID0+XG4gICAgICAgICAgYnVmICYmIGJ1Zi5ieXRlTGVuZ3RoID09PSB3ICogaCAqIDRcbiAgICAgICAgICAgID8gY3JlYXRlSW1hZ2VCaXRtYXAobmV3IEltYWdlRGF0YShuZXcgVWludDhDbGFtcGVkQXJyYXkoYnVmKSwgdywgaCkpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgKVxuICAgICAgICAudGhlbigoYm0pID0+IHNldHRsZShibSkpXG4gICAgICAgIC5jYXRjaCgoKSA9PiBzZXR0bGUodW5kZWZpbmVkKSk7XG4gICAgICAvLyBBIHN0dWNrIGRlY29kZSB3b3VsZCBwYXJrIHRoZSBwYWludCBmb3JldmVyOyB0aW1lIG91dCBhbmQgbGV0IHRoZSBjYW52YXMgaG9sZCBpdHMgbGFzdCBmcmFtZS5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0dGxlKHVuZGVmaW5lZCksIEZFVENIX1RJTUVPVVRfTVMpO1xuICAgICAgdm9pZCByZXE7XG4gICAgfSk7XG4gICAgYy5pbkZsaWdodC5zZXQoaWR4LCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIHByZWZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBmcm9tSWR4OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWF4SWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChtZXRhLmR1cmF0aW9uICogbWV0YS5mcHMpKTtcbiAgICBmb3IgKGxldCBpID0gZnJvbUlkeDsgaSA8IGZyb21JZHggKyBjb3VudDsgaSsrKSB7XG4gICAgICBpZiAoaSA8IDEgfHwgaSA+IG1heElkeCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZvaWQgdGhpcy5mZXRjaChzdGF0ZSwgaSk7XG4gICAgfVxuICB9XG5cbiAgZXZpY3QoYzogVmlkZW9DYWNoZSk6IHZvaWQge1xuICAgIGxldCBtaW5JZHggPSBJbmZpbml0eTtcbiAgICBjLnJlYWRlcnMuZm9yRWFjaCgoaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4IDwgbWluSWR4KSB7XG4gICAgICAgIG1pbklkeCA9IGlkeDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtaW5JZHgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZsb29yID0gbWluSWR4IC0gMjtcbiAgICBjLmJpdG1hcHMuZm9yRWFjaCgoYm0sIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA8IGZsb29yKSB7XG4gICAgICAgIGJtLmNsb3NlKCk7XG4gICAgICAgIGMuYml0bWFwcy5kZWxldGUoaWR4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIERyb3AgYSByZWFkZXI7IHdoZW4gdGhlIGxhc3QgbGVhdmVzLCBjbG9zZSBiaXRtYXBzIGFuZCB0ZWxsIHRoZSBzZXJ2ZXIgdG8gcmVsZWFzZSB0aGUgZGVjb2RlIHNlc3Npb24uXG4gIHJlbGVhc2UoaWQ6IHN0cmluZywgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBjID0gdGhpcy5fY2FjaGVzLmdldChpZCk7XG4gICAgaWYgKCFjKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGMucmVhZGVycy5kZWxldGUoc3RhdGUpO1xuICAgIGlmIChjLnJlYWRlcnMuc2l6ZSA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYy5iaXRtYXBzLmZvckVhY2goKGJtKSA9PiB7XG4gICAgICBibS5jbG9zZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuX2NhY2hlcy5kZWxldGUoaWQpO1xuICAgIGZldGNoKGAke1NDSEVNRX1jbG9zZT9pZD0ke2lkfWAsIHsga2VlcGFsaXZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IHR5cGUgRnJhbWVDYiwgZmlyZSwgdGltZVJhbmdlcywgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gT3ZlcnJpZGUgdGhlIEhUTUxNZWRpYUVsZW1lbnQgc3VyZmFjZSBmb3IgaG9va2VkIDx2aWRlbz47IHVuaG9va2VkIGVsZW1lbnRzIGZhbGwgdGhyb3VnaCB0byBuYXRpdmUuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbE1lZGlhU2hpbShob29rOiBWaWRlb0hvb2spOiB2b2lkIHtcbiAgY29uc3QgSFZFID0gSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGU7XG4gIGNvbnN0IE1FRElBID0gSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGU7XG4gIGNvbnN0IG1kZXNjID0gKHA6IHN0cmluZykgPT4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVkUsIHApIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTUVESUEsIHApO1xuICBjb25zdCBjdERlc2MgPSBtZGVzYyhcImN1cnJlbnRUaW1lXCIpO1xuICBjb25zdCBzcmNEZXNjID0gbWRlc2MoXCJzcmNcIik7XG4gIGNvbnN0IHJhdGVEZXNjID0gbWRlc2MoXCJwbGF5YmFja1JhdGVcIik7XG4gIGNvbnN0IG9yaWdQYXVzZSA9IEhWRS5wYXVzZTtcbiAgY29uc3Qgb3JpZ1JWRkMgPSBIVkUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaztcbiAgY29uc3Qgb3JpZ0NhbmNlbFJWRkMgPSBIVkUuY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrO1xuICBjb25zdCBvcmlnUXVhbGl0eSA9IEhWRS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eTtcbiAgY29uc3Qgb3JpZ0xvYWQgPSBIVkUubG9hZDtcbiAgY29uc3Qgc2Vzc2lvbnMgPSBob29rLnNlc3Npb25zO1xuXG4gIC8vIFNlc3Npb24tYmFja2VkIHJlYWQtb25seSBwcm9wZXJ0eSB3aXRoIG5hdGl2ZSBmYWxsYmFjayB3aGVuIHRoZSBlbGVtZW50IGlzbid0IGhvb2tlZC5cbiAgY29uc3QgZGVmID0gKHByb3A6IHN0cmluZywgcGljazogKHM6IFZpZGVvU3RhdGUpID0+IHVua25vd24pID0+IHtcbiAgICBjb25zdCBuYXRpdmVHZXQgPSBtZGVzYyhwcm9wKT8uZ2V0O1xuICAgIGlmICghbmF0aXZlR2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1lZGlhX3NoaW06IG5vIG5hdGl2ZSBnZXR0ZXIgZm9yICR7cHJvcH1gKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgcHJvcCwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBwaWNrKHMpIDogbmF0aXZlR2V0LmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuICBkZWYoXCJwYXVzZWRcIiwgKHMpID0+IHMucGF1c2VkKTtcbiAgZGVmKFwiZW5kZWRcIiwgKHMpID0+IHMuZW5kZWQpO1xuICBkZWYoXCJyZWFkeVN0YXRlXCIsIChzKSA9PiBzLnJlYWR5U3RhdGUpO1xuICBkZWYoXCJuZXR3b3JrU3RhdGVcIiwgKHMpID0+IHMubmV0d29ya1N0YXRlKTtcbiAgZGVmKFwiZXJyb3JcIiwgKHMpID0+IHMuZXJyb3IgPz8gbnVsbCk7XG4gIGRlZihcInNlZWtpbmdcIiwgKHMpID0+IHMuc2Vla2luZyk7XG4gIGRlZihcImJ1ZmZlcmVkXCIsIChzKSA9PiB0aW1lUmFuZ2VzKHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IDApKTtcbiAgZGVmKFwic2Vla2FibGVcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogMCkpO1xuICBkZWYoXCJwbGF5ZWRcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tYXhSZWFjaGVkKSk7XG5cbiAgSFZFLnBsYXkgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm4gaG9vay5hdHRhY2godGhpcykudGhlbigobnMpID0+IHtcbiAgICAgICAgaWYgKG5zKSB7XG4gICAgICAgICAgaG9vay5yZXN1bWUodGhpcywgbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaG9vay5yZXN1bWUodGhpcywgcyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuICBIVkUucGF1c2UgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICBvcmlnUGF1c2UuY2FsbCh0aGlzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFzLnBhdXNlZCkge1xuICAgICAgcy5wYXVzZWQgPSB0cnVlO1xuICAgICAgZmlyZSh0aGlzLCBcInBhdXNlXCIpO1xuICAgIH1cbiAgfTtcbiAgaWYgKGN0RGVzYz8uZ2V0ICYmIGN0RGVzYy5zZXQpIHtcbiAgICBjb25zdCBjdEdldCA9IGN0RGVzYy5nZXQ7XG4gICAgY29uc3QgY3RTZXQgPSBjdERlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwiY3VycmVudFRpbWVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBzLmN1cnJlbnRUaW1lIDogY3RHZXQuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgICBzZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCwgdDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgICAgIGlmICghcykge1xuICAgICAgICAgIGN0U2V0LmNhbGwodGhpcywgdCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGR1ciA9IHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IHQ7XG4gICAgICAgIHMuY3VycmVudFRpbWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0LCBkdXIpKTtcbiAgICAgICAgcy5tYXhSZWFjaGVkID0gTWF0aC5tYXgocy5tYXhSZWFjaGVkLCBzLmN1cnJlbnRUaW1lKTtcbiAgICAgICAgaWYgKHMuY3VycmVudFRpbWUgPCBkdXIpIHtcbiAgICAgICAgICBzLmVuZGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcy5zZWVraW5nID0gdHJ1ZTtcbiAgICAgICAgZmlyZSh0aGlzLCBcInNlZWtpbmdcIik7XG4gICAgICAgIHMuc2Vla2luZyA9IGZhbHNlO1xuICAgICAgICBmaXJlKHRoaXMsIFwic2Vla2VkXCIpO1xuICAgICAgICBmaXJlKHRoaXMsIFwidGltZXVwZGF0ZVwiKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgaWYgKHJhdGVEZXNjPy5zZXQpIHtcbiAgICBjb25zdCByYXRlU2V0ID0gcmF0ZURlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwicGxheWJhY2tSYXRlXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogcmF0ZURlc2MuZ2V0LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHI6IG51bWJlcikge1xuICAgICAgICByYXRlU2V0LmNhbGwodGhpcywgcik7XG4gICAgICAgIGlmIChzZXNzaW9ucy5oYXModGhpcykpIHtcbiAgICAgICAgICBmaXJlKHRoaXMsIFwicmF0ZWNoYW5nZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBIVkUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCBjYik6IG51bWJlciB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBvcmlnUlZGQy5jYWxsKHRoaXMsIGNiKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSArK2hvb2sucnZmY1NlcTtcbiAgICBzLnJ2ZmMuc2V0KGlkLCBjYiBhcyBGcmFtZUNiKTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIEhWRS5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2sgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCwgaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICBvcmlnQ2FuY2VsUlZGQy5jYWxsKHRoaXMsIGlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcy5ydmZjLmRlbGV0ZShpZCk7XG4gIH07XG4gIEhWRS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBvcmlnUXVhbGl0eS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRpb25UaW1lOiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICAgIHRvdGFsVmlkZW9GcmFtZXM6IHMucHJlc2VudGVkRnJhbWVzLFxuICAgICAgZHJvcHBlZFZpZGVvRnJhbWVzOiAwLFxuICAgICAgY29ycnVwdGVkVmlkZW9GcmFtZXM6IDAsXG4gICAgfSBhcyBWaWRlb1BsYXliYWNrUXVhbGl0eTtcbiAgfTtcbiAgSFZFLmxvYWQgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICghc2Vzc2lvbnMuaGFzKHRoaXMpKSB7XG4gICAgICByZXR1cm4gb3JpZ0xvYWQuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgaG9vay5kZXRhY2godGhpcyk7XG4gICAgZmlyZSh0aGlzLCBcImVtcHRpZWRcIik7XG4gICAgdGhpcy5fX3B1cF9sYXN0X3NyY19fID0gdW5kZWZpbmVkO1xuICAgIGhvb2suYXR0YWNoKHRoaXMpO1xuICB9O1xuICBpZiAoc3JjRGVzYz8uc2V0KSB7XG4gICAgY29uc3Qgc3JjU2V0ID0gc3JjRGVzYy5zZXQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgXCJzcmNcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBzcmNEZXNjLmdldCxcbiAgICAgIHNldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCB2OiBzdHJpbmcpIHtcbiAgICAgICAgc3JjU2V0LmNhbGwodGhpcywgdik7XG4gICAgICAgIGhvb2sub25TcmNDaGFuZ2UodGhpcyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IHNob3duUGl4ZWxzIH0gZnJvbSBcIi4vb3ZlcmxheVwiO1xuaW1wb3J0IHtcbiAgQUhFQUQsXG4gIGZpcmUsXG4gIEhBVkVfRU5PVUdIX0RBVEEsXG4gIEhBVkVfTUVUQURBVEEsXG4gIEhBVkVfTk9USElORyxcbiAgTUVESUFfRVJSX0RFQ09ERSxcbiAgTUVESUFfRVJSX05FVFdPUkssXG4gIHR5cGUgTWVkaWFFcnJvckxpa2UsXG4gIE5FVFdPUktfRU1QVFksXG4gIE5FVFdPUktfSURMRSxcbiAgTkVUV09SS19MT0FESU5HLFxuICBORVRXT1JLX05PX1NPVVJDRSxcbiAgU0NIRU1FLFxuICBUQUcsXG4gIHR5cGUgVmlkZW9NZXRhLFxuICB0eXBlIFZpZGVvU3RhdGUsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNoQXJncyB7XG4gIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50O1xuICBzdGF0ZTogVmlkZW9TdGF0ZTtcbiAgc3JjOiBzdHJpbmc7XG4gIGJpcnRoTXM6IG51bWJlcjtcbiAgbmF0aXZlOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3VmlkZW9TdGF0ZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgY3Y6IEhUTUxDYW52YXNFbGVtZW50KTogVmlkZW9TdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgbWV0YTogdW5kZWZpbmVkLFxuICAgIGN2LFxuICAgIGN0eDogY3YuZ2V0Q29udGV4dChcIjJkXCIpISxcbiAgICBwYXVzZWQ6ICEodmlkZW8uYXV0b3BsYXkgfHwgIXZpZGVvLnBhdXNlZCksXG4gICAgY3VycmVudFRpbWU6IDAsXG4gICAgZW5kZWQ6IGZhbHNlLFxuICAgIGxhc3REcmF3bklkeDogLTEsXG4gICAgZGVhZDogZmFsc2UsXG4gICAgb2JqZWN0Rml0OiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh2aWRlbykub2JqZWN0Rml0IHx8IFwiZmlsbFwiLFxuICAgIHJlYWR5U3RhdGU6IEhBVkVfTk9USElORyxcbiAgICBuZXR3b3JrU3RhdGU6IE5FVFdPUktfRU1QVFksXG4gICAgc2Vla2luZzogZmFsc2UsXG4gICAgd2FpdGluZzogZmFsc2UsXG4gICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICBwcmVzZW50ZWRGcmFtZXM6IDAsXG4gICAgbWF4UmVhY2hlZDogMCxcbiAgICBydmZjOiBuZXcgTWFwKCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZhaWxPcGVuKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSwgZXJyb3I6IE1lZGlhRXJyb3JMaWtlKTogdW5kZWZpbmVkIHtcbiAgc3RhdGUuZGVhZCA9IHRydWU7XG4gIHN0YXRlLmVycm9yID0gZXJyb3I7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTk9fU09VUkNFO1xuICBjb25zb2xlLmVycm9yKFRBRywgYCR7ZXJyb3IubWVzc2FnZX0gc3JjPSR7dmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmN9YCk7XG4gIGZpcmUodmlkZW8sIFwiZXJyb3JcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIE9wZW4gdGhlIGZyYW1lIHNlcnZlciBzZXNzaW9uLCB0aGVuIGVtaXQgdGhlIEhUTUxNZWRpYUVsZW1lbnQgbG9hZCBzZXF1ZW5jZSAocmVhZHlTdGF0ZS9uZXR3b3JrU3RhdGUgKyBldmVudHMpLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5TZXNzaW9uKGhvb2s6IFZpZGVvSG9vaywgYXJnczogQXR0YWNoQXJncyk6IFByb21pc2U8VmlkZW9TdGF0ZSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IHZpZGVvLCBzdGF0ZSwgc3JjLCBiaXJ0aE1zLCBuYXRpdmUgfSA9IGFyZ3M7XG4gIGNvbnN0IGZwcyA9IE51bWJlci5wYXJzZUludCh2aWRlby5kYXRhc2V0W1wicHVwRnBzXCJdIHx8IFwiMzBcIiwgMTApO1xuICBzdGF0ZS5uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0xPQURJTkc7XG4gIGZpcmUodmlkZW8sIFwibG9hZHN0YXJ0XCIpO1xuICBsZXQgcmVzOiBSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICAvLyBEZWNvZGUgYXQgdGhlIGVsZW1lbnQncyBvbi1zY3JlZW4gcGl4ZWxzLCBzbyBzdGF0aWMgYm94ZXMgb3BlbiBhdCBmaW5hbCByZXMgd2l0aG91dCBhIHJlYXR0YWNoIHJvdW5kLlxuICAgIGNvbnN0IGRwciA9IHNob3duUGl4ZWxzKHZpZGVvKTtcbiAgICBjb25zdCBxID0gbmF0aXZlID8gXCJcIiA6IGAmdz0ke2Rwci53aWR0aH0maD0ke2Rwci5oZWlnaHR9JmZpdD0ke2VuY29kZVVSSUNvbXBvbmVudChzdGF0ZS5vYmplY3RGaXQpfWA7XG4gICAgcmVzID0gYXdhaXQgZmV0Y2goYCR7U0NIRU1FfW9wZW4/c3JjPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNyYyl9JmZwcz0ke2Zwc30ke3F9YCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFpbE9wZW4odmlkZW8sIHN0YXRlLCB7XG4gICAgICBjb2RlOiBNRURJQV9FUlJfTkVUV09SSyxcbiAgICAgIG1lc3NhZ2U6IGBvcGVuIGZhaWxlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCxcbiAgICB9KTtcbiAgfVxuICBpZiAoaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFyZXMub2spIHtcbiAgICByZXR1cm4gZmFpbE9wZW4odmlkZW8sIHN0YXRlLCB7XG4gICAgICBjb2RlOiBNRURJQV9FUlJfREVDT0RFLFxuICAgICAgbWVzc2FnZTogYG9wZW4gJHtyZXMuc3RhdHVzfTogJHthd2FpdCByZXMudGV4dCgpfWAsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWV0YSA9IChhd2FpdCByZXMuanNvbigpKSBhcyBWaWRlb01ldGE7XG4gIGlmIChob29rLnNlc3Npb25zLmdldCh2aWRlbykgIT09IHN0YXRlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBzdGF0ZS5tZXRhID0gbWV0YTtcbiAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5wYXVzZWQgPyAwIDogTWF0aC5tYXgoMCwgKGhvb2suY3Vyck1zIC0gYmlydGhNcykgLyAxMDAwKTtcbiAgLy8gVGhlIHN0dWIgbWVkaWEgdXN1YWxseSBsb2FkcyBuYXRpdmVseSBmaXJzdDsgQmxpbmsgdGhlbiBvd25zIHRoZSByZWFsIGV2ZW50IHNlcXVlbmNlIOKAlCBkb24ndCBkdXBsaWNhdGUgaXQuXG4gIGNvbnN0IG5hdGl2ZU1ldGEgPSB2aWRlby52aWRlb1dpZHRoID4gMDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCBcInZpZGVvV2lkdGhcIiwge1xuICAgIHZhbHVlOiBtZXRhLndpZHRoLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJ2aWRlb0hlaWdodFwiLCB7XG4gICAgdmFsdWU6IG1ldGEuaGVpZ2h0LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJkdXJhdGlvblwiLCB7XG4gICAgdmFsdWU6IG1ldGEuZHVyYXRpb24sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcbiAgc3RhdGUucmVhZHlTdGF0ZSA9IEhBVkVfTUVUQURBVEE7XG4gIGlmICghbmF0aXZlTWV0YSkge1xuICAgIGZpcmUodmlkZW8sIFwiZHVyYXRpb25jaGFuZ2VcIik7XG4gICAgZmlyZSh2aWRlbywgXCJsb2FkZWRtZXRhZGF0YVwiKTtcbiAgfVxuICBzdGF0ZS5yZWFkeVN0YXRlID0gSEFWRV9FTk9VR0hfREFUQTtcbiAgaWYgKCFuYXRpdmVNZXRhKSB7XG4gICAgZmlyZSh2aWRlbywgXCJsb2FkZWRkYXRhXCIpO1xuICAgIGZpcmUodmlkZW8sIFwiY2FucGxheVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcImNhbnBsYXl0aHJvdWdoXCIpO1xuICB9XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfSURMRTtcbiAgaWYgKCFuYXRpdmVNZXRhKSB7XG4gICAgZmlyZSh2aWRlbywgXCJzdXNwZW5kXCIpO1xuICAgIGlmICghc3RhdGUucGF1c2VkKSB7XG4gICAgICBmaXJlKHZpZGVvLCBcInBsYXlcIik7XG4gICAgICBmaXJlKHZpZGVvLCBcInBsYXlpbmdcIik7XG4gICAgfVxuICB9XG4gIC8vIE5hdGl2ZSByZS1hdHRhY2ggcmVzdW1lcyBtaWQtY2xpcDsgd2FybSBvbmx5IGZyZXNoIG9wZW5zLCBvciB0aGUgMS4uQUhFQUQgcHJlZmV0Y2ggZmlnaHRzIHRoZSBwYWludHMnIHBvc2l0aW9uLlxuICBpZiAoIW5hdGl2ZSkge1xuICAgIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIDEsIEFIRUFEKTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBhZHZhbmNlIH0gZnJvbSBcIi4vZHJpdmVyXCI7XG5pbXBvcnQgeyBGcmFtZUNhY2hlIH0gZnJvbSBcIi4vZnJhbWVfY2FjaGVcIjtcbmltcG9ydCB7IGluc3RhbGxNZWRpYVNoaW0gfSBmcm9tIFwiLi9tZWRpYV9zaGltXCI7XG5pbXBvcnQgeyBmaXRSZWN0LCBzZXR1cENhbnZhcyB9IGZyb20gXCIuL292ZXJsYXlcIjtcbmltcG9ydCB7IG5ld1ZpZGVvU3RhdGUsIG9wZW5TZXNzaW9uIH0gZnJvbSBcIi4vc2Vzc2lvblwiO1xuaW1wb3J0IHsgQUhFQUQsIGZpcmUsIFNDSEVNRSwgVEFHLCB0eXBlIFZpZGVvTWV0YSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF92aWRlb19fPzogeyBhZHZhbmNlOiAobXM6IG51bWJlcikgPT4gUHJvbWlzZTx1bmtub3duPjsgcmVhZHk6ICgpID0+IFByb21pc2U8dm9pZD4gfTtcbiAgfVxuICBpbnRlcmZhY2UgSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgX19wdXBfbGFzdF9zcmNfXz86IHN0cmluZztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9Ib29rIHtcbiAgcmVhZG9ubHkgc2Vzc2lvbnMgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBWaWRlb1N0YXRlPigpO1xuICByZWFkb25seSBhdHRhY2hpbmcgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+PigpO1xuICAvLyBFbnVtZXJhYmxlIG1pcnJvciBvZiBpbi1mbGlnaHQgb3BlbnMgKFdlYWtNYXAgaXNuJ3QgaXRlcmFibGUpIHNvIHJlYWR5KCkgY2FuIGF3YWl0IHRoZW0uXG4gIHJlYWRvbmx5IG9wZW5pbmcgPSBuZXcgU2V0PFByb21pc2U8dW5rbm93bj4+KCk7XG4gIHJlYWRvbmx5IGNhY2hlID0gbmV3IEZyYW1lQ2FjaGUoKTtcbiAgcnZmY1NlcSA9IDA7XG4gIGN1cnJNcyA9IDA7XG4gIHByaXZhdGUgX3VwZ3JhZGluZyA9IG5ldyBXZWFrU2V0PEhUTUxWaWRlb0VsZW1lbnQ+KCk7XG4gIHByaXZhdGUgX2xhc3RVcGdyYWRlQXQgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBudW1iZXI+KCk7XG4gIHByaXZhdGUgX2xhc3RTbmFwc2hvdCA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIE9mZnNjcmVlbkNhbnZhcz4oKTtcblxuICBpbnN0YWxsKCk6IHZvaWQge1xuICAgIGluc3RhbGxNZWRpYVNoaW0odGhpcyk7XG4gICAgdGhpcy5zY2FuKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dHMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbSBvZiBtdXRzKSB7XG4gICAgICAgIGlmIChtLnR5cGUgPT09IFwiYXR0cmlidXRlc1wiICYmIG0udGFyZ2V0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCAmJiBtLmF0dHJpYnV0ZU5hbWUgPT09IFwic3JjXCIpIHtcbiAgICAgICAgICB0aGlzLm9uU3JjQ2hhbmdlKG0udGFyZ2V0KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBtLmFkZGVkTm9kZXMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5zY2FuKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG0ucmVtb3ZlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkub2JzZXJ2ZShkb2N1bWVudCwgeyBzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogW1wic3JjXCJdIH0pO1xuICAgIHdpbmRvdy5fX3B1cF92aWRlb19fID0geyBhZHZhbmNlOiAobXMpID0+IGFkdmFuY2UodGhpcywgbXMpLCByZWFkeTogKCkgPT4gdGhpcy5yZWFkeSgpIH07XG4gIH1cblxuICBhdHRhY2godmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIG5hdGl2ZSA9IGZhbHNlKTogUHJvbWlzZTxWaWRlb1N0YXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLnNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGV4aXN0aW5nKTtcbiAgICB9XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMuYXR0YWNoaW5nLmdldCh2aWRlbyk7XG4gICAgaWYgKHBlbmRpbmcpIHtcbiAgICAgIHJldHVybiBwZW5kaW5nO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSB2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyYztcbiAgICBpZiAoIXNyYykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBpZiAoL14oYmxvYjp8ZGF0YTp8bWVkaWFzdHJlYW06KS9pLnRlc3Qoc3JjKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBjb25zdCBjdiA9IHNldHVwQ2FudmFzKHZpZGVvLCB0aGlzLl9sYXN0U25hcHNob3QuZ2V0KHZpZGVvKSk7XG4gICAgY29uc3Qgc3RhdGUgPSBuZXdWaWRlb1N0YXRlKHZpZGVvLCBjdik7XG4gICAgdGhpcy5zZXNzaW9ucy5zZXQodmlkZW8sIHN0YXRlKTtcbiAgICBjb25zdCBwID0gb3BlblNlc3Npb24odGhpcywgeyB2aWRlbywgc3RhdGUsIHNyYywgYmlydGhNczogdGhpcy5jdXJyTXMsIG5hdGl2ZSB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMuYXR0YWNoaW5nLmRlbGV0ZSh2aWRlbyk7XG4gICAgICB0aGlzLm9wZW5pbmcuZGVsZXRlKHApO1xuICAgIH0pO1xuICAgIHRoaXMuYXR0YWNoaW5nLnNldCh2aWRlbywgcCk7XG4gICAgdGhpcy5vcGVuaW5nLmFkZChwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIC8vIEF3YWl0IG9ubHkgdGhlIG9wZW5zIGluIGZsaWdodCByaWdodCBub3cg4oCUIG5ldmVyIGNoYXNlIG5ld2x5LXNwYXduZWQgb25lcywgb3IgYSByZXRyeWluZyBwYWdlIGxvb3BzIGZvcmV2ZXIuXG4gIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbLi4udGhpcy5vcGVuaW5nXSk7XG4gIH1cblxuICByZXN1bWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLnBhdXNlZCA9IGZhbHNlO1xuICAgIHN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgZmlyZSh2aWRlbywgXCJwbGF5XCIpO1xuICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgfVxuXG4gIGRldGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHN0YXRlLm1ldGEpIHtcbiAgICAgIGlmIChzdGF0ZS5sYXN0RHJhd25JZHggPj0gMCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNuYXAgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHN0YXRlLmN2LndpZHRoLCBzdGF0ZS5jdi5oZWlnaHQpO1xuICAgICAgICAgIGNvbnN0IHNjdHggPSBzbmFwLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgICAgICBpZiAoIXNjdHgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIDJkIGNvbnRleHRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNjdHguZHJhd0ltYWdlKHN0YXRlLmN2LCAwLCAwKTtcbiAgICAgICAgICB0aGlzLl9sYXN0U25hcHNob3Quc2V0KHZpZGVvLCBzbmFwKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgICAgdGhpcy5jYWNoZS5yZWxlYXNlKHN0YXRlLm1ldGEuaWQsIHN0YXRlKTsgLy8gc3RhbGUgYml0bWFwcyBtdXN0IG5vdCBzdXJ2aXZlIGEgZGV0YWNoOyBmcmVzaCBvcGVuIHJlLWtleXMgdG8gdGhlIG5ldyBzZXNzaW9uXG4gICAgfVxuICAgIHN0YXRlLmN2LnJlbW92ZSgpO1xuICAgIHRoaXMuc2Vzc2lvbnMuZGVsZXRlKHZpZGVvKTtcbiAgICB0aGlzLmF0dGFjaGluZy5kZWxldGUodmlkZW8pO1xuICB9XG5cbiAgb25TcmNDaGFuZ2UodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzcmMgPSB2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyYyB8fCBcIlwiO1xuICAgIGlmICh2aWRlby5fX3B1cF9sYXN0X3NyY19fID09PSBzcmMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmlkZW8uX19wdXBfbGFzdF9zcmNfXyA9IHNyYztcbiAgICBpZiAodGhpcy5zZXNzaW9ucy5oYXModmlkZW8pKSB7XG4gICAgICB0aGlzLmRldGFjaCh2aWRlbyk7XG4gICAgfVxuICAgIHRoaXMuYXR0YWNoKHZpZGVvKTtcbiAgfVxuXG4gIGlzVXBncmFkaW5nKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3VwZ3JhZGluZy5oYXModmlkZW8pO1xuICB9XG5cbiAgLy8gQmFja2dyb3VuZCBuYXRpdmUgc3dhcDogdGhlIG9sZCBjYW52YXMga2VlcHMgcGFpbnRpbmcgdW50aWwgdGhlIGZpcnN0IG5hdGl2ZSBmcmFtZSBpcyBkZWNvZGVkLCBzbyBubyBibGFuay9qdW1wLlxuICBhc3luYyB1cGdyYWRlKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1ldGEgPSBzdGF0ZS5tZXRhO1xuICAgIGlmICghbWV0YSB8fCBtZXRhLmZyYW1lV2lkdGggPj0gbWV0YS53aWR0aCB8fCB0aGlzLl91cGdyYWRpbmcuaGFzKHZpZGVvKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSB2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyYztcbiAgICBpZiAoIXNyYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBCYWNrIG9mZiBhZnRlciBhIGZhaWxlZCBvcGVuIHNvIGEgd2VkZ2VkIHNvdXJjZSBpc24ndCByZS1wcm9iZWQgZXZlcnkgdGljay5cbiAgICBpZiAocGVyZm9ybWFuY2Uubm93KCkgLSAodGhpcy5fbGFzdFVwZ3JhZGVBdC5nZXQodmlkZW8pID8/IDApIDwgMTAwMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9sYXN0VXBncmFkZUF0LnNldCh2aWRlbywgcGVyZm9ybWFuY2Uubm93KCkpO1xuICAgIHRoaXMuX3VwZ3JhZGluZy5hZGQodmlkZW8pO1xuICAgIGxldCBuczogVmlkZW9TdGF0ZSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgbnMgPSBhd2FpdCB0aGlzLm9wZW5OYXRpdmUoc3JjLCBtZXRhLmZwcyk7XG4gICAgICBpZiAoIW5zIHx8IHRoaXMuc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gRGVjb2RlIHRoZSBmcmFtZSB0aGUgY2xvY2sgaXMgYXQgcmlnaHQgbm93IHNvIHRoZSBzd2FwIGxhbmRzIG9uIG1hdGNoaW5nIGNvbnRlbnQuXG4gICAgICBjb25zdCBpZHggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHN0YXRlLmN1cnJlbnRUaW1lICogbWV0YS5mcHMpKTtcbiAgICAgIGNvbnN0IGJtID0gYXdhaXQgdGhpcy5jYWNoZS5mZXRjaChucywgaWR4KTtcbiAgICAgIGlmICghYm0gfHwgdGhpcy5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmNvbW1pdFVwZ3JhZGUoc3RhdGUsIG5zLCBibSwgaWR4KTtcbiAgICAgIG5zID0gdW5kZWZpbmVkOyAvLyBjb21taXR0ZWQ6IHRoZSBsaXZlIHN0YXRlIG93bnMgdGhlIHNlc3Npb24gbm93XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihUQUcsIGB1cGdyYWRlIGZhaWxlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIEFib3J0ZWQgKHN0YWxlIHNlc3Npb24gLyBzcmMgY2hhbmdlKSBvciBmYWlsZWQ6IGNsb3NlIHRoZSB3YXJtLXVwIHNlc3Npb24gc28gaXQgY2FuJ3QgbGVhay5cbiAgICAgIGlmIChucz8ubWV0YSkge1xuICAgICAgICBhd2FpdCBmZXRjaChgJHtTQ0hFTUV9Y2xvc2U/aWQ9JHtucy5tZXRhLmlkfWAsIHsga2VlcGFsaXZlOiB0cnVlIH0pLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICB0aGlzLl91cGdyYWRpbmcuZGVsZXRlKHZpZGVvKTtcbiAgICB9XG4gIH1cblxuICAvLyBPcGVucyBhIG5hdGl2ZS1yZXNvbHV0aW9uIHNlc3Npb24gd2l0aG91dCB0b3VjaGluZyB0aGUgbGl2ZSBzdGF0ZSAobm8gZXZlbnRzLCBubyBjYW52YXMgc3dhcCkuXG4gIHByaXZhdGUgYXN5bmMgb3Blbk5hdGl2ZShzcmM6IHN0cmluZywgZnBzOiBudW1iZXIpOiBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7U0NIRU1FfW9wZW4/c3JjPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNyYyl9JmZwcz0ke2Zwc31gKTtcbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBtZXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIFZpZGVvTWV0YTtcbiAgICAgIHJldHVybiB7IG1ldGEgfSBhcyBWaWRlb1N0YXRlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBSZXBvaW50IHRoZSBsaXZlIHN0YXRlIGF0IHRoZSBuYXRpdmUgc2Vzc2lvbiBhbmQgcGFpbnQgdGhlIHByZS1kZWNvZGVkIGZyYW1lIGluIHRoZSBzYW1lIHRpY2suXG4gIHByaXZhdGUgY29tbWl0VXBncmFkZShzdGF0ZTogVmlkZW9TdGF0ZSwgbnM6IFZpZGVvU3RhdGUsIGJtOiBJbWFnZUJpdG1hcCwgaWR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBubWV0YSA9IG5zLm1ldGEhO1xuICAgIGNvbnN0IG9sZElkID0gc3RhdGUubWV0YSEuaWQ7XG4gICAgY29uc3QgY3YgPSBzdGF0ZS5jdjtcbiAgICAvLyBCYWNraW5nIHN0b3JlIHJlc2l6ZSB3aXBlcyB0aGUgY2FudmFzLCBzbyBkcmF3IHRoZSByZWFkeSBmcmFtZSBpbW1lZGlhdGVseSBhZnRlciBpdC5cbiAgICBjdi53aWR0aCA9IG5tZXRhLmZyYW1lV2lkdGg7XG4gICAgY3YuaGVpZ2h0ID0gbm1ldGEuZnJhbWVIZWlnaHQ7XG4gICAgY29uc3QgciA9IGZpdFJlY3QoYm0ud2lkdGgsIGJtLmhlaWdodCwgY3Yud2lkdGgsIGN2LmhlaWdodCwgc3RhdGUub2JqZWN0Rml0KTtcbiAgICBzdGF0ZS5jdHguY2xlYXJSZWN0KDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICAgIHN0YXRlLmN0eC5kcmF3SW1hZ2UoYm0sIHJbMF0sIHJbMV0sIHJbMl0sIHJbM10pO1xuICAgIHN0YXRlLmxhc3REcmF3bklkeCA9IGlkeDtcbiAgICBzdGF0ZS5tZXRhID0gbm1ldGE7XG4gICAgLy8gVGhlIHByZS1kZWNvZGVkIGZyYW1lIG5vdyBsaXZlcyBpbiB0aGUgbmF0aXZlIGNhY2hlIHVuZGVyIG5tZXRhLmlkOyBkcm9wIHRoZSBvbGQgc2Vzc2lvbiArIGl0cyBiaXRtYXBzLlxuICAgIHRoaXMuY2FjaGUucmVsZWFzZShvbGRJZCwgc3RhdGUpO1xuICAgIHRoaXMuY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEIC0gMSk7XG4gIH1cblxuICBwcml2YXRlIHNjYW4ocm9vdDogRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJvb3QudGFnTmFtZSA9PT0gXCJWSURFT1wiKSB7XG4gICAgICB0aGlzLmF0dGFjaChyb290IGFzIEhUTUxWaWRlb0VsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAocm9vdC5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgIHRoaXMuYXR0YWNoKHYpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsVmlkZW9Ib29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3ZpZGVvX18pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV3IFZpZGVvSG9vaygpLmluc3RhbGwoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMjcuXG5cbmltcG9ydCB7IGluc3RhbGxBdWRpb1NoaW0gfSBmcm9tIFwiLi9hdWRpby9zaGltXCI7XG5pbXBvcnQgeyBpbnN0YWxsSGZIb29rIH0gZnJvbSBcIi4vaHlwZXJmcmFtZXNcIjtcbmltcG9ydCB7IGluc3RhbGxUaWNrSG9vayB9IGZyb20gXCIuL3RpY2tcIjtcbmltcG9ydCB7IGluc3RhbGxWaWRlb0hvb2sgfSBmcm9tIFwiLi92aWRlby9ob29rXCI7XG5cbmlmICh3aW5kb3cuc2VsZiAhPT0gd2luZG93LnRvcCkge1xuICBpbnN0YWxsQXVkaW9TaGltKCk7XG4gIGluc3RhbGxIZkhvb2soKTtcbiAgaW5zdGFsbFRpY2tIb29rKCk7XG4gIGluc3RhbGxWaWRlb0hvb2soKTtcbn1cbiJdfQ==
|