pup-recorder 0.7.9 → 0.8.0
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 A(i){queueMicrotask(()=>{Object.defineProperty(i,"error",{configurable:true,value:{code:4,message:"audio disabled in deterministic mode"}}),i.dispatchEvent(new Event("error"));});}function K(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=K,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 Q=["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 Q){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 z(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 Y(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++,z(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(Y(i,a,r,u));}),Promise.all(n)}var Z=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),Z);});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();}function G(){Object.defineProperty(window,"parent",{get:()=>window,configurable:true}),Object.defineProperty(window,"frameElement",{get:()=>null,configurable:true});}window.self!==window.top&&(P(),G(),F(),D(),q());
|
|
1
|
+
(function(){'use strict';function A(n){queueMicrotask(()=>{Object.defineProperty(n,"error",{configurable:true,value:{code:4,message:"audio disabled in deterministic mode"}}),n.dispatchEvent(new Event("error"));});}function K(n){let e=document.createElement("audio");return e.preload="none",n&&(e.src=n,A(e)),e}function P(){let n=window.Audio;window.Audio=K,window.Audio.prototype=n.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 n=Date,e=n.now(),t=0,i=0,o=[],a={},r=1,u=()=>(i+=.01,i);function f(...c){return this instanceof f?c.length?new(Function.prototype.bind.apply(n,[null,...c])):new n(e+t+u()):new n(e+t).toString()}f.prototype=n.prototype,f.now=()=>e+t+u(),f.parse=n.parse,f.UTC=n.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,i=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 Q=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","transform","transformOrigin","filter","clipPath","boxShadow","opacity","mixBlendMode","mask","zIndex","objectFit","objectPosition","position","left","top","right","bottom"];function I(n){return n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function L(n,e){let t=window.getComputedStyle(n),i=n.parentNode;i instanceof HTMLElement&&window.getComputedStyle(i).position==="static"&&(i.style.position="relative"),e.style.position="absolute",e.style.left=`${n.offsetLeft}px`,e.style.top=`${n.offsetTop}px`,e.style.width=`${n.offsetWidth}px`,e.style.height=`${n.offsetHeight}px`;for(let o of Q){if(o==="position"||o==="left"||o==="top"||o==="right"||o==="bottom")continue;let a=t.getPropertyValue(I(o));a&&e.style.setProperty(I(o),a);}return false}function V(n){let e=n.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(n,e){let t=document.createElement("canvas");if(t.dataset.pupVideoOverlay="1",t.style.pointerEvents="none",n.style.visibility="hidden",n.muted=true,(n.parentNode||document.body).insertBefore(t,n.nextSibling),L(n,t),e)try{t.getContext("2d").drawImage(e,0,0,t.width,t.height);}catch{}return t}function x(n,e,t){let i=e.offsetWidth||e.width,o=e.offsetHeight||e.height,a=z(n.width,n.height,i,o,t),r=e.width/i,u=e.height/o;return [a[0]*r,a[1]*u,a[2]*r,a[3]*u]}function z(n,e,t,i,o){if(o==="none")return [(t-n)/2,(i-e)/2,n,e];if(o==="contain"||o==="scale-down"){let a=Math.min(t/n,i/e),r=o==="scale-down"?Math.min(1,a):a,u=r*n,f=r*e;return [(t-u)/2,(i-f)/2,u,f]}if(o==="cover"){let a=Math.max(t/n,i/e),r=a*n,u=a*e;return [(t-r)/2,(i-u)/2,r,u]}return [0,0,t,i]}var M="pup-frame://";var S="[VideoHook]";function H(n){return {length:n>0?1:0,start:()=>0,end:()=>n}}function l(n,e){n.dispatchEvent(new Event(e));}function Y(n){if(n.rvfc.size===0)return;let e=[...n.rvfc.values()];n.rvfc.clear();let t=performance.now(),i={presentationTime:t,expectedDisplayTime:t,width:n.meta.frameWidth,height:n.meta.frameHeight,mediaTime:n.currentTime,presentedFrames:n.presentedFrames};for(let o of e)o(t,i);}async function Z(n,e,t,i){let o=n.cache.cacheOf(t.meta.id);o.readers.set(t,i);let a=o.bitmaps.get(i);if(!a){n.cache.prefetch(t,i+1,9);let f=await n.cache.fetch(t,i);if(n.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,r,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=i,t.presentedFrames++,Y(t),n.cache.prefetch(t,i+1,10),n.cache.evict(o);}function $(n,e){let t=Math.max(0,e-n.currMs)/1e3;n.currMs=e;let i=[];return document.querySelectorAll("video").forEach(o=>{let a=o,r=n.sessions.get(a);if(!r||r.dead)return;if(r.meta&&r.meta.frameWidth<r.meta.width&&!n.attaching.has(a)&&!n.isUpgrading(a)&&V(a).width>r.meta.frameWidth*1.05&&n.upgrade(a,r),!r.meta&&n.attaching.has(a)){i.push(n.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&&i.push(Z(n,a,r,u));}),Promise.all(i)}var J=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 i=e.meta;if(!i)return Promise.resolve(void 0);let o=this.cacheOf(i.id),a=o.inFlight.get(t);if(a)return a;let r=o.bitmaps.get(t);if(r)return Promise.resolve(r);let u=i.frameWidth,f=i.frameHeight,w=new Promise(y=>{let h=p=>{o.inFlight.delete(t),p&&o.bitmaps.set(t,p),y(p);};fetch(`${M}frame?id=${i.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),J);});return o.inFlight.set(t,w),w}prefetch(e,t,i){let o=e.meta;if(!o)return;let a=Math.max(1,Math.round(o.duration*o.fps));for(let r=t;r<t+i;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 i=t-2;e.bitmaps.forEach((o,a)=>{a<i&&(o.close(),e.bitmaps.delete(a));});}release(e,t){let i=this._caches.get(e);i&&(i.readers.delete(t),!(i.readers.size>0)&&(i.bitmaps.forEach(o=>{o.close();}),this._caches.delete(e),fetch(`${M}close?id=${e}`,{keepalive:true})));}};function W(n){let e=HTMLVideoElement.prototype,t=HTMLMediaElement.prototype,i=s=>Object.getOwnPropertyDescriptor(e,s)||Object.getOwnPropertyDescriptor(t,s),o=i("currentTime"),a=i("src"),r=i("playbackRate"),u=e.pause,f=e.requestVideoFrameCallback,w=e.cancelVideoFrameCallback,y=e.getVideoPlaybackQuality,h=e.load,b=n.sessions,p=(s,c)=>{let m=i(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?(n.resume(this,s),Promise.resolve()):n.attach(this).then(c=>{c&&n.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=++n.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);n.detach(this),l(this,"emptied"),this.__pup_last_src__=void 0,n.attach(this);},a?.set){let s=a.set;Object.defineProperty(e,"src",{configurable:true,get:a.get,set(c){s.call(this,c),n.onSrcChange(this);}});}}function U(n,e){return {meta:void 0,cv:e,ctx:e.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 j(n,e,t){e.dead=true,e.error=t,e.networkState=3,console.error(S,`${t.message} src=${n.src||n.currentSrc}`),l(n,"error");}async function B(n,e){let{video:t,state:i,src:o,birthMs:a,native:r}=e,u=Number.parseInt(t.dataset.pupFps||"30",10);i.networkState=2,l(t,"loadstart");let f;try{let h=V(t),b=r?"":`&w=${h.width}&h=${h.height}&fit=${encodeURIComponent(i.objectFit)}`;f=await fetch(`${M}open?src=${encodeURIComponent(o)}&fps=${u}${b}`);}catch(h){return j(t,i,{code:2,message:`open failed: ${h instanceof Error?h.message:String(h)}`})}if(n.sessions.get(t)!==i)return;if(!f.ok)return j(t,i,{code:3,message:`open ${f.status}: ${await f.text()}`});let w=await f.json();if(n.sessions.get(t)!==i)return;i.meta=w,i.currentTime=i.paused?0:Math.max(0,(n.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}),i.readyState=1,y||(l(t,"durationchange"),l(t,"loadedmetadata")),i.readyState=4,y||(l(t,"loadeddata"),l(t,"canplay"),l(t,"canplaythrough")),i.networkState=1,y||(l(t,"suspend"),i.paused||(l(t,"play"),l(t,"playing"))),r||n.cache.prefetch(i,1,10),i}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(){W(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(i=>{i instanceof Element&&this.scan(i);}),t.removedNodes.forEach(i=>{i instanceof HTMLVideoElement&&this.detach(i);});}}).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 i=this.sessions.get(e);if(i)return Promise.resolve(i);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 i=new OffscreenCanvas(t.cv.width,t.cv.height),o=i.getContext("2d");if(!o)throw new Error("no 2d context");o.drawImage(t.cv,0,0),this._lastSnapshot.set(e,i);}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 i=t.meta;if(!i||i.frameWidth>=i.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,i.fps),!a||this.sessions.get(e)!==t)return;let r=Math.max(1,Math.round(t.currentTime*i.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 i=await fetch(`${M}open?src=${encodeURIComponent(e)}&fps=${t}`);return i.ok?{meta:await i.json()}:void 0}catch{return}}commitUpgrade(e,t,i,o){let a=t.meta,r=e.meta.id,u=e.cv;u.width=a.frameWidth,u.height=a.frameHeight;let f=x(i,u,e.objectFit);e.ctx.clearRect(0,0,u.width,u.height),e.ctx.drawImage(i,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();}function G(){Object.defineProperty(window,"parent",{get:()=>window,configurable:true}),Object.defineProperty(window,"frameElement",{get:()=>null,configurable:true});}window.self!==window.top&&(P(),G(),F(),D(),q());
|
|
2
2
|
})();//# sourceMappingURL=shoot.global.js.map
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2F1ZGlvL3NoaW0udHMiLCIuLi8uLi9zcmMvcnVudGltZS9oeXBlcmZyYW1lcy50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3RpY2sudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9vdmVybGF5LnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vdHlwZXMudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9kcml2ZXIudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9mcmFtZV9jYWNoZS50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL21lZGlhX3NoaW0udHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9zZXNzaW9uLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vaG9vay50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3dpbmRvdy50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3Nob290LnRzIl0sIm5hbWVzIjpbImZhaWwiLCJlbCIsIkF1ZGlvU2hpbSIsInVybCIsImluc3RhbGxBdWRpb1NoaW0iLCJOYXRpdmVBdWRpbyIsIkhBRSIsImluc3RhbGxIZkhvb2siLCJpbnN0YWxsVGlja0hvb2siLCJSRUFMX0RBVEUiLCJkYXRlT3JpZ2luIiwiY3Vyck1zIiwidGltZU9mZnNldCIsInJhZlF1ZXVlIiwidGltZXJzIiwibmV4dElkIiwidGljayIsIkZha2VEYXRlIiwiYXJncyIsImNiIiwiaWQiLCJyIiwiZGVsYXkiLCJkIiwic2FmZUludm9rZVRpbWVyIiwiZm4iLCJlIiwic2FmZUludm9rZVJhZiIsInRzIiwiYW5pbVN0YXRlIiwiZW5kQm91bmRhcnkiLCJhIiwidCIsInN5bmNBbmltYXRpb25zIiwibXMiLCJhbmltcyIsInN0YXRlIiwicmF0ZSIsInMiLCJjdCIsImN0MCIsInRhcmdldCIsImVuZCIsInByb2Nlc3MiLCJ0aW1lc3RhbXBNcyIsInJhZnMiLCJNSVJST1JfUFJPUFMiLCJjc3NDYXNlIiwiYyIsInN5bmNPdmVybGF5IiwidmlkZW8iLCJjdiIsImNzIiwicCIsInYiLCJzaG93blBpeGVscyIsInZyIiwiZHByIiwic2V0dXBDYW52YXMiLCJzbmFwIiwiZml0UmVjdCIsInNyY1ciLCJzcmNIIiwiZHN0VyIsImRzdEgiLCJmaXQiLCJzYyIsImsiLCJ3cyIsImhzIiwic2MyIiwid3MyIiwiaHMyIiwiU0NIRU1FIiwiVEFHIiwidGltZVJhbmdlcyIsImZpcmUiLCJ0eXBlIiwiZmlyZUZyYW1lQ2FsbGJhY2tzIiwiY2JzIiwibm93IiwibWV0YSIsInBhaW50IiwiaG9vayIsImlkeCIsImJtIiwiZmV0Y2hlZCIsImFkdmFuY2UiLCJkdCIsInBzIiwiRkVUQ0hfVElNRU9VVF9NUyIsIkZyYW1lQ2FjaGUiLCJleGlzdGluZyIsImNhY2hlZCIsInciLCJoIiwicmVzIiwic2V0dGxlIiwiYnVmIiwiZnJvbUlkeCIsImNvdW50IiwibWF4SWR4IiwiaSIsIm1pbklkeCIsImZsb29yIiwiaW5zdGFsbE1lZGlhU2hpbSIsIkhWRSIsIk1FRElBIiwibWRlc2MiLCJjdERlc2MiLCJzcmNEZXNjIiwicmF0ZURlc2MiLCJvcmlnUGF1c2UiLCJvcmlnUlZGQyIsIm9yaWdDYW5jZWxSVkZDIiwib3JpZ1F1YWxpdHkiLCJvcmlnTG9hZCIsInNlc3Npb25zIiwiZGVmIiwicHJvcCIsInBpY2siLCJuYXRpdmVHZXQiLCJucyIsImN0R2V0IiwiY3RTZXQiLCJkdXIiLCJyYXRlU2V0Iiwic3JjU2V0IiwibmV3VmlkZW9TdGF0ZSIsImZhaWxPcGVuIiwiZXJyb3IiLCJvcGVuU2Vzc2lvbiIsInNyYyIsImJpcnRoTXMiLCJuYXRpdmUiLCJmcHMiLCJxIiwibmF0aXZlTWV0YSIsIlZpZGVvSG9vayIsIm11dHMiLCJtIiwicGVuZGluZyIsInNjdHgiLCJubWV0YSIsIm9sZElkIiwicm9vdCIsImluc3RhbGxWaWRlb0hvb2siLCJpbnN0YWxsV2luZG93RmFjYWRlIl0sIm1hcHBpbmdzIjoieUJBS0EsU0FBU0EsQ0FBQUEsQ0FBS0MsRUFBNEIs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RUFBeUIsQ0FDbkMsTUFBQSxDQUFPLGFBQUEsRUFHWCxJQUFJUixDQUFBQSxFQUFVLENBQUUsT0FBQSxHQUNsQixDQ25PTyxTQUFTUyxHQUFzQixDQUNwQyxNQUFBLENBQU8sY0FBQSxDQUFlLE1BQUEsQ0FBUSxRQUFBLENBQVUsQ0FBRSxJQUFLLElBQU0sTUFBQSxDQUFRLFlBQUEsQ0FBYyxJQUFLLENBQUMsQ0FBQSxDQUNqRixPQUFPLGNBQUEsQ0FBZSxNQUFBLENBQVEsZUFBZ0IsQ0FBRSxHQUFBLENBQUssSUFBTSxJQUFBLENBQU0sWUFBQSxDQUFjLElBQUssQ0FBQyxFQUN2RixDQ0VJLE9BQU8sSUFBQSxHQUFTLE1BQUEsQ0FBTyxHQUFBLEdBQ3pCL0ksQ0FBQUEsRUFBaUIsQ0FDakIrSSxDQUFBQSxHQUNBNUksQ0FBQUEsRUFBYyxDQUNkQyxDQUFBQSxFQUFnQixDQUNoQjBJLENBQUFBLEVBQWlCLENBQUEiLCJmaWxlIjoic2hvb3QuZ2xvYmFsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLWQgY2FwdHVyZXMgbm8gYXVkaW87IGEgbG9hZGluZyA8YXVkaW8+IHdvdWxkIGhpdCB0aGUgbWVkaWHihpJzdHViIHJlZGlyZWN0LCB3aGljaCBzZXJ2ZXMgdmlkZW8gc3R1YnMgb25seS5cblxuY29uc3QgU1JDX05PVF9TVVBQT1JURUQgPSA0OyAvLyBNRURJQV9FUlJfU1JDX05PVF9TVVBQT1JURURcblxuLy8gTWlycm9yIGEgZmFpbGVkIG5hdGl2ZSBsb2FkIHNvIGVycm9yLWhhbmRsaW5nIHBhZ2VzIHByb2NlZWQgZXhhY3RseSBhcyB0aGV5IGRvIHdoZW4gdGhlIHNvdXJjZSBpcyBicm9rZW4uXG5mdW5jdGlvbiBmYWlsKGVsOiBIVE1MQXVkaW9FbGVtZW50KTogdm9pZCB7XG4gIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWwsIFwiZXJyb3JcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IHsgY29kZTogU1JDX05PVF9TVVBQT1JURUQsIG1lc3NhZ2U6IFwiYXVkaW8gZGlzYWJsZWQgaW4gZGV0ZXJtaW5pc3RpYyBtb2RlXCIgfSxcbiAgICB9KTtcbiAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImVycm9yXCIpKTtcbiAgfSk7XG59XG5cbi8vIFRoZSBuYXRpdmUgQXVkaW8oKSBjb25zdHJ1Y3RvciBpbnZva2VzIHRoZSBsb2FkIGFsZ29yaXRobSBpbnRlcm5hbGx5LCBzbyBvbmx5IGEgY29uc3RydWN0b3Igc3dhcCBjYW4gcHJlZW1wdCB0aGUgZmV0Y2guXG5mdW5jdGlvbiBBdWRpb1NoaW0odXJsPzogc3RyaW5nKTogSFRNTEF1ZGlvRWxlbWVudCB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImF1ZGlvXCIpO1xuICBlbC5wcmVsb2FkID0gXCJub25lXCI7XG4gIGlmICh1cmwpIHtcbiAgICBlbC5zcmMgPSB1cmw7XG4gICAgZmFpbChlbCk7XG4gIH1cbiAgcmV0dXJuIGVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEF1ZGlvU2hpbSgpOiB2b2lkIHtcbiAgY29uc3QgTmF0aXZlQXVkaW8gPSB3aW5kb3cuQXVkaW87XG4gIHdpbmRvdy5BdWRpbyA9IEF1ZGlvU2hpbSBhcyB1bmtub3duIGFzIHR5cGVvZiBBdWRpbztcbiAgd2luZG93LkF1ZGlvLnByb3RvdHlwZSA9IE5hdGl2ZUF1ZGlvLnByb3RvdHlwZTtcblxuICBjb25zdCBIQUUgPSBIVE1MQXVkaW9FbGVtZW50LnByb3RvdHlwZTtcbiAgSEFFLmxvYWQgPSBmdW5jdGlvbiAodGhpczogSFRNTEF1ZGlvRWxlbWVudCkge1xuICAgIGZhaWwodGhpcyk7XG4gIH07XG4gIEhBRS5wbGF5ID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxBdWRpb0VsZW1lbnQpIHtcbiAgICBmYWlsKHRoaXMpO1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRE9NRXhjZXB0aW9uKFwiYXVkaW8gZGlzYWJsZWQgaW4gZGV0ZXJtaW5pc3RpYyBtb2RlXCIsIFwiTm90U3VwcG9ydGVkRXJyb3JcIikpO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8xNi5cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX0hGX01PREVfXz86IHN0cmluZztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEhmSG9vaygpIHtcbiAgd2luZG93Ll9fSEZfTU9ERV9fID0gXCJleHBvcnRcIjtcbn1cbiIsImRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19wdXBfdGlja19fPzogeyBwcm9jZXNzOiAobXM6IG51bWJlcikgPT4gdm9pZCB9O1xuICB9XG59XG5cbmludGVyZmFjZSBUaW1lciB7XG4gIHR5cGU6IFwidGltZW91dFwiIHwgXCJpbnRlcnZhbFwiO1xuICBjYjogVGltZXJIYW5kbGVyO1xuICBkZWxheTogbnVtYmVyO1xuICBuZXh0OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBSYWZFbnRyeSB7XG4gIGlkOiBudW1iZXI7XG4gIGNiOiBGcmFtZVJlcXVlc3RDYWxsYmFjaztcbn1cblxuaW50ZXJmYWNlIEFuaW1FbnRyeSB7XG4gIHN0YXJ0TXM6IG51bWJlcjtcbiAgYWRvcHRlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxUaWNrSG9vaygpOiB2b2lkIHtcbiAgaWYgKHdpbmRvdy5fX3B1cF90aWNrX18pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBSRUFMX0RBVEUgPSBEYXRlO1xuICBjb25zdCBkYXRlT3JpZ2luID0gUkVBTF9EQVRFLm5vdygpO1xuICBsZXQgY3Vyck1zID0gMDtcbiAgbGV0IHRpbWVPZmZzZXQgPSAwO1xuICBsZXQgcmFmUXVldWU6IFJhZkVudHJ5W10gPSBbXTtcbiAgY29uc3QgdGltZXJzOiBSZWNvcmQ8bnVtYmVyLCBUaW1lciB8IHVuZGVmaW5lZD4gPSB7fTtcbiAgbGV0IG5leHRJZCA9IDE7XG4gIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgdGltZU9mZnNldCArPSAwLjAxO1xuICAgIHJldHVybiB0aW1lT2Zmc2V0O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEZha2VEYXRlKHRoaXM6IHVua25vd24sIC4uLmFyZ3M6IHVua25vd25bXSk6IERhdGUgfCBzdHJpbmcge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGYWtlRGF0ZSkpIHtcbiAgICAgIHJldHVybiBuZXcgUkVBTF9EQVRFKGRhdGVPcmlnaW4gKyBjdXJyTXMpLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzLmxlbmd0aFxuICAgICAgPyBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KFJFQUxfREFURSwgW251bGwsIC4uLmFyZ3NdKSkoKVxuICAgICAgOiBuZXcgUkVBTF9EQVRFKGRhdGVPcmlnaW4gKyBjdXJyTXMgKyB0aWNrKCkpO1xuICB9XG4gIEZha2VEYXRlLnByb3RvdHlwZSA9IFJFQUxfREFURS5wcm90b3R5cGU7XG4gIEZha2VEYXRlLm5vdyA9ICgpID0+IGRhdGVPcmlnaW4gKyBjdXJyTXMgKyB0aWNrKCk7XG4gIEZha2VEYXRlLnBhcnNlID0gUkVBTF9EQVRFLnBhcnNlO1xuICBGYWtlRGF0ZS5VVEMgPSBSRUFMX0RBVEUuVVRDO1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBEYXRlOiB1bmtub3duIH0pLkRhdGUgPSBGYWtlRGF0ZTtcbiAgcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gY3Vyck1zICsgdGljaygpO1xuXG4gIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoY2IpID0+IHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHJhZlF1ZXVlLnB1c2goeyBpZCwgY2IgfSk7XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSAoaWQpID0+IHtcbiAgICByYWZRdWV1ZSA9IHJhZlF1ZXVlLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9O1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBzZXRUaW1lb3V0OiB1bmtub3duIH0pLnNldFRpbWVvdXQgPSAoY2I6IFRpbWVySGFuZGxlciwgZGVsYXk/OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6IFwidGltZW91dFwiLCBjYiwgZGVsYXk6IGRlbGF5IHx8IDAsIG5leHQ6IGN1cnJNcyArIChkZWxheSB8fCAwKSB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFyVGltZW91dCA9IChpZCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGRlbGV0ZSB0aW1lcnNbaWRdO1xuICAgIH1cbiAgfTtcbiAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgc2V0SW50ZXJ2YWw6IHVua25vd24gfSkuc2V0SW50ZXJ2YWwgPSAoY2I6IFRpbWVySGFuZGxlciwgZGVsYXk/OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIGNvbnN0IGQgPSBNYXRoLm1heChkZWxheSB8fCAwLCAxKTtcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiBcImludGVydmFsXCIsIGNiLCBkZWxheTogZCwgbmV4dDogY3Vyck1zICsgZCB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFySW50ZXJ2YWwgPSAoaWQpID0+IHtcbiAgICBpZiAodHlwZW9mIGlkID09PSBcIm51bWJlclwiKSB7XG4gICAgICBkZWxldGUgdGltZXJzW2lkXTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gc2FmZUludm9rZVRpbWVyKGZuOiBUaW1lckhhbmRsZXIpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyBTdHJpbmcgdGltZXIgaGFuZGxlciBydW5zIGFzIHBhZ2Ugc2NyaXB0IGluIGdsb2JhbCBzY29wZSAoSFRNTCBzcGVjKTsgRnVuY3Rpb24gY3RvciBtYXRjaGVzIHRoYXQsIGF2b2lkcyBldmFsLlxuICAgICAgICBuZXcgRnVuY3Rpb24oZm4pKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbVGlja10gZXJyb3I6XCIsIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykgfHwgZSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHNhZmVJbnZva2VSYWYoY2I6IEZyYW1lUmVxdWVzdENhbGxiYWNrLCB0czogbnVtYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNiKHRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW1RpY2tdIGVycm9yOlwiLCAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHx8IGUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFuaW1TdGF0ZSA9IG5ldyBXZWFrTWFwPEFuaW1hdGlvbiwgQW5pbUVudHJ5PigpO1xuICBmdW5jdGlvbiBlbmRCb3VuZGFyeShhOiBBbmltYXRpb24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ID0gYS5lZmZlY3Q/LmdldENvbXB1dGVkVGltaW5nKCkuZW5kVGltZTtcbiAgICAgIHJldHVybiB0eXBlb2YgdCA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNGaW5pdGUodCkgPyB0IDogdW5kZWZpbmVkO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRGV0YWNoZWQvZm9yZWlnbiBlZmZlY3RzIGhhdmUgbm8gdGltaW5nOyB0cmVhdCBhcyB1bmJvdW5kZWQuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICAvLyBBZG9wdCBydW5uaW5nIGFuaW1hdGlvbnMgKHBhdXNlICsgZHJpdmUgY3VycmVudFRpbWUgb2ZmIHRoZSB2aXJ0dWFsIGNsb2NrKTogYW4gaW5maW5pdGUgY29tcG9zaXRvciBhbmltYXRpb24gb3RoZXJ3aXNlIGtlZXBzIHZpeiBmcmVlLXJ1bm5pbmcgYXQgUkVOREVSX0ZQUywgc3RhcnZpbmcgQ0RQIGV2YWxzLlxuICBmdW5jdGlvbiBzeW5jQW5pbWF0aW9ucyhtczogbnVtYmVyKSB7XG4gICAgbGV0IGFuaW1zOiBBbmltYXRpb25bXTtcbiAgICB0cnkge1xuICAgICAgYW5pbXMgPSBkb2N1bWVudC5nZXRBbmltYXRpb25zKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgYSBvZiBhbmltcykge1xuICAgICAgY29uc3Qgc3RhdGUgPSBhLnBsYXlTdGF0ZTtcbiAgICAgIGlmIChzdGF0ZSA9PT0gXCJpZGxlXCIgfHwgc3RhdGUgPT09IFwiZmluaXNoZWRcIikge1xuICAgICAgICBhbmltU3RhdGUuZGVsZXRlKGEpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJhdGUgPSB0eXBlb2YgYS5wbGF5YmFja1JhdGUgPT09IFwibnVtYmVyXCIgPyBhLnBsYXliYWNrUmF0ZSA6IDE7XG4gICAgICBpZiAocmF0ZSA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBzID0gYW5pbVN0YXRlLmdldChhKTtcbiAgICAgIGlmICghcykge1xuICAgICAgICBjb25zdCBjdDAgPSB0eXBlb2YgYS5jdXJyZW50VGltZSA9PT0gXCJudW1iZXJcIiA/IGEuY3VycmVudFRpbWUgOiAwO1xuICAgICAgICBzID0geyBzdGFydE1zOiBtcyAtIGN0MCAvIHJhdGUsIGFkb3B0ZWQ6IHN0YXRlICE9PSBcInBhdXNlZFwiIH07XG4gICAgICAgIGFuaW1TdGF0ZS5zZXQoYSwgcyk7XG4gICAgICAgIGlmIChzLmFkb3B0ZWQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYS5wYXVzZSgpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gUGF1c2UtcmVqZWN0aW5nIHN0YXRlcyAoZS5nLiBtaWQtY2FuY2VsKSBzdGlsbCBhY2NlcHQgY3VycmVudFRpbWUgd3JpdGVzIGJlbG93LlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghcy5hZG9wdGVkICYmIHN0YXRlICE9PSBcInBhdXNlZFwiKSB7XG4gICAgICAgIGNvbnN0IGN0ID0gdHlwZW9mIGEuY3VycmVudFRpbWUgPT09IFwibnVtYmVyXCIgPyBhLmN1cnJlbnRUaW1lIDogMDtcbiAgICAgICAgcy5zdGFydE1zID0gbXMgLSBjdCAvIHJhdGU7XG4gICAgICAgIHMuYWRvcHRlZCA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYS5wYXVzZSgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBTYW1lIGFzIGFkb3B0aW9uIGFib3ZlOiBkcml2ZSBieSBjdXJyZW50VGltZSByZWdhcmRsZXNzLlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXMuYWRvcHRlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhcmdldCA9IChtcyAtIHMuc3RhcnRNcykgKiByYXRlO1xuICAgICAgY29uc3QgZW5kID0gZW5kQm91bmRhcnkoYSk7XG4gICAgICAvLyBmaW5pc2goKSBzZWVrcyB0byB0aGUgcmF0ZS1hcHByb3ByaWF0ZSBib3VuZGFyeSBhbmQgYXBwbGllcyBmaWxsIG1vZGU7IHBhdXNlZCBob2xkcyB3b3VsZCBtaXNyZW5kZXIgZmlsbDpub25lLlxuICAgICAgaWYgKHJhdGUgPiAwID8gZW5kICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0ID49IGVuZCA6IHRhcmdldCA8PSAwKSB7XG4gICAgICAgIGFuaW1TdGF0ZS5kZWxldGUoYSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYS5maW5pc2goKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gSW5maW5pdGUtZHVyYXRpb24gcmV2ZXJzZSBvciBkZXRhY2hlZCBlZmZlY3Q6IGxlYXZlIGFzLWlzLlxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYS5jdXJyZW50VGltZSA9IHRhcmdldDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzKHRpbWVzdGFtcE1zOiBudW1iZXIpIHtcbiAgICBjdXJyTXMgPSB0aW1lc3RhbXBNcztcbiAgICB0aW1lT2Zmc2V0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIE9iamVjdC5rZXlzKHRpbWVycykpIHtcbiAgICAgIGNvbnN0IHQgPSB0aW1lcnNbTnVtYmVyKGlkKV07XG4gICAgICBpZiAoIXQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB3aGlsZSAodC5uZXh0IDw9IGN1cnJNcykge1xuICAgICAgICBzYWZlSW52b2tlVGltZXIodC5jYik7XG4gICAgICAgIGlmICh0LnR5cGUgPT09IFwidGltZW91dFwiKSB7XG4gICAgICAgICAgZGVsZXRlIHRpbWVyc1tOdW1iZXIoaWQpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0Lm5leHQgKz0gdC5kZWxheTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmFmcyA9IHJhZlF1ZXVlLnNwbGljZSgwKTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgcmFmcykge1xuICAgICAgc2FmZUludm9rZVJhZihyLmNiLCBjdXJyTXMpO1xuICAgIH1cbiAgICBzeW5jQW5pbWF0aW9ucyhjdXJyTXMpO1xuICB9XG5cbiAgd2luZG93Ll9fcHVwX3RpY2tfXyA9IHsgcHJvY2VzcyB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxudHlwZSBWZWM0ID0gW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbmNvbnN0IE1JUlJPUl9QUk9QUyA9IFtcbiAgXCJib3JkZXJSYWRpdXNcIixcbiAgXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXG4gIFwiYm9yZGVyVG9wUmlnaHRSYWRpdXNcIixcbiAgXCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzXCIsXG4gIFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIixcbiAgXCJ0cmFuc2Zvcm1cIixcbiAgXCJ0cmFuc2Zvcm1PcmlnaW5cIixcbiAgXCJmaWx0ZXJcIixcbiAgXCJjbGlwUGF0aFwiLFxuICBcImJveFNoYWRvd1wiLFxuICBcIm9wYWNpdHlcIixcbiAgXCJtaXhCbGVuZE1vZGVcIixcbiAgXCJtYXNrXCIsXG4gIFwiekluZGV4XCIsXG4gIFwib2JqZWN0Rml0XCIsXG4gIFwib2JqZWN0UG9zaXRpb25cIixcbiAgXCJwb3NpdGlvblwiLFxuICBcImxlZnRcIixcbiAgXCJ0b3BcIixcbiAgXCJyaWdodFwiLFxuICBcImJvdHRvbVwiLFxuXSBhcyBjb25zdDtcblxuZnVuY3Rpb24gY3NzQ2FzZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bQS1aXS9nLCAoYykgPT4gYC0ke2MudG9Mb3dlckNhc2UoKX1gKTtcbn1cblxuLy8gVHJhY2sgdGhlIG92ZXJsYXkgdG8gdGhlIGVsZW1lbnQncyBsaXZlIGJveCB2aWEgQ1NTIG9ubHk7IGJhY2tpbmcgc3RheXMgYXQgZGVjb2RlIHJlcyBvciB6b29tIHdpcGVzIHJpc2sgYmxhbmsgZnJhbWVzLlxuZXhwb3J0IGZ1bmN0aW9uIHN5bmNPdmVybGF5KHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBjdjogSFRNTENhbnZhc0VsZW1lbnQpOiBib29sZWFuIHtcbiAgY29uc3QgY3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh2aWRlbyk7XG4gIGN2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAvLyBvZmZzZXQqIGFyZSBwcmUtdHJhbnNmb3JtIGNvb3JkcyBmcm9tIG9mZnNldFBhcmVudCdzIHBhZGRpbmcgZWRnZSA9IHRoZSBhYnMgY29udGFpbmluZy1ibG9jayBvcmlnaW47IG1hcCBkaXJlY3QuXG4gIGN2LnN0eWxlLmxlZnQgPSBgJHt2aWRlby5vZmZzZXRMZWZ0fXB4YDtcbiAgY3Yuc3R5bGUudG9wID0gYCR7dmlkZW8ub2Zmc2V0VG9wfXB4YDtcbiAgY3Yuc3R5bGUud2lkdGggPSBgJHt2aWRlby5vZmZzZXRXaWR0aH1weGA7XG4gIGN2LnN0eWxlLmhlaWdodCA9IGAke3ZpZGVvLm9mZnNldEhlaWdodH1weGA7XG4gIGZvciAoY29uc3QgcCBvZiBNSVJST1JfUFJPUFMpIHtcbiAgICBpZiAocCA9PT0gXCJwb3NpdGlvblwiIHx8IHAgPT09IFwibGVmdFwiIHx8IHAgPT09IFwidG9wXCIgfHwgcCA9PT0gXCJyaWdodFwiIHx8IHAgPT09IFwiYm90dG9tXCIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB2ID0gY3MuZ2V0UHJvcGVydHlWYWx1ZShjc3NDYXNlKHApKTtcbiAgICBpZiAodikge1xuICAgICAgY3Yuc3R5bGUuc2V0UHJvcGVydHkoY3NzQ2FzZShwKSwgdik7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gT24tc2NyZWVuIChwb3N0LXRyYW5zZm9ybSkgcGl4ZWwgc2l6ZSBvZiBhIHZpZGVvIGVsZW1lbnQgKGRyaXZlcyB0aGUgbmF0aXZlIHJlLWF0dGFjaCB0aHJlc2hvbGQpLlxuZXhwb3J0IGZ1bmN0aW9uIHNob3duUGl4ZWxzKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHtcbiAgY29uc3QgdnIgPSB2aWRlby5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh2ci53aWR0aCAqIGRwcikpLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh2ci5oZWlnaHQgKiBkcHIpKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwQ2FudmFzKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzbmFwOiBPZmZzY3JlZW5DYW52YXMgfCB1bmRlZmluZWQpOiBIVE1MQ2FudmFzRWxlbWVudCB7XG4gIGNvbnN0IGN2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY3YuZGF0YXNldFtcInB1cFZpZGVvT3ZlcmxheVwiXSA9IFwiMVwiO1xuICBjdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCI7XG4gIHZpZGVvLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICB2aWRlby5tdXRlZCA9IHRydWU7XG4gIGNvbnN0IHBhcmVudCA9IHZpZGVvLnBhcmVudE5vZGUgfHwgZG9jdW1lbnQuYm9keTtcbiAgcGFyZW50Lmluc2VydEJlZm9yZShjdiwgdmlkZW8ubmV4dFNpYmxpbmcpO1xuICBzeW5jT3ZlcmxheSh2aWRlbywgY3YpO1xuICBpZiAoc25hcCkge1xuICAgIHRyeSB7XG4gICAgICBjdi5nZXRDb250ZXh0KFwiMmRcIikhLmRyYXdJbWFnZShzbmFwLCAwLCAwLCBjdi53aWR0aCwgY3YuaGVpZ2h0KTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cbiAgcmV0dXJuIGN2O1xufVxuXG4vLyBEcmF3IHJlY3QgZm9yIHRoZSBiaXRtYXAgd2l0aGluIHRoZSBjYW52YXMgcGVyIG9iamVjdEZpdC5cbmV4cG9ydCBmdW5jdGlvbiBmaXRSZWN0KHNyY1c6IG51bWJlciwgc3JjSDogbnVtYmVyLCBkc3RXOiBudW1iZXIsIGRzdEg6IG51bWJlciwgZml0OiBzdHJpbmcpOiBWZWM0IHtcbiAgaWYgKGZpdCA9PT0gXCJub25lXCIpIHtcbiAgICByZXR1cm4gWyhkc3RXIC0gc3JjVykgLyAyLCAoZHN0SCAtIHNyY0gpIC8gMiwgc3JjVywgc3JjSF07XG4gIH1cbiAgaWYgKGZpdCA9PT0gXCJjb250YWluXCIgfHwgZml0ID09PSBcInNjYWxlLWRvd25cIikge1xuICAgIGNvbnN0IHNjID0gTWF0aC5taW4oZHN0VyAvIHNyY1csIGRzdEggLyBzcmNIKTtcbiAgICBjb25zdCBrID0gZml0ID09PSBcInNjYWxlLWRvd25cIiA/IE1hdGgubWluKDEsIHNjKSA6IHNjO1xuICAgIGNvbnN0IHdzID0gayAqIHNyY1c7XG4gICAgY29uc3QgaHMgPSBrICogc3JjSDtcbiAgICByZXR1cm4gWyhkc3RXIC0gd3MpIC8gMiwgKGRzdEggLSBocykgLyAyLCB3cywgaHNdO1xuICB9XG4gIGlmIChmaXQgPT09IFwiY292ZXJcIikge1xuICAgIGNvbnN0IHNjMiA9IE1hdGgubWF4KGRzdFcgLyBzcmNXLCBkc3RIIC8gc3JjSCk7XG4gICAgY29uc3Qgd3MyID0gc2MyICogc3JjVztcbiAgICBjb25zdCBoczIgPSBzYzIgKiBzcmNIO1xuICAgIHJldHVybiBbKGRzdFcgLSB3czIpIC8gMiwgKGRzdEggLSBoczIpIC8gMiwgd3MyLCBoczJdO1xuICB9XG4gIHJldHVybiBbMCwgMCwgZHN0VywgZHN0SF07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5leHBvcnQgY29uc3QgU0NIRU1FID0gXCJwdXAtZnJhbWU6Ly9cIjtcbmV4cG9ydCBjb25zdCBBSEVBRCA9IDEwO1xuZXhwb3J0IGNvbnN0IFRBRyA9IFwiW1ZpZGVvSG9va11cIjtcblxuZXhwb3J0IGNvbnN0IE1FRElBX0VSUl9ORVRXT1JLID0gMjtcbmV4cG9ydCBjb25zdCBNRURJQV9FUlJfREVDT0RFID0gMztcbmV4cG9ydCBjb25zdCBIQVZFX05PVEhJTkcgPSAwO1xuZXhwb3J0IGNvbnN0IEhBVkVfTUVUQURBVEEgPSAxO1xuZXhwb3J0IGNvbnN0IEhBVkVfRU5PVUdIX0RBVEEgPSA0O1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfRU1QVFkgPSAwO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfSURMRSA9IDE7XG5leHBvcnQgY29uc3QgTkVUV09SS19MT0FESU5HID0gMjtcbmV4cG9ydCBjb25zdCBORVRXT1JLX05PX1NPVVJDRSA9IDM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9NZXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZyYW1lV2lkdGg6IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9GcmFtZU1ldGEge1xuICBwcmVzZW50YXRpb25UaW1lOiBudW1iZXI7XG4gIGV4cGVjdGVkRGlzcGxheVRpbWU6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG1lZGlhVGltZTogbnVtYmVyO1xuICBwcmVzZW50ZWRGcmFtZXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRnJhbWVDYiA9IChub3c6IG51bWJlciwgbWV0YTogVmlkZW9GcmFtZU1ldGEpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFFcnJvckxpa2Uge1xuICBjb2RlOiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0NhY2hlIHtcbiAgYml0bWFwczogTWFwPG51bWJlciwgSW1hZ2VCaXRtYXA+O1xuICBpbkZsaWdodDogTWFwPG51bWJlciwgUHJvbWlzZTxJbWFnZUJpdG1hcCB8IHVuZGVmaW5lZD4+O1xuICByZWFkZXJzOiBNYXA8VmlkZW9TdGF0ZSwgbnVtYmVyPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1N0YXRlIHtcbiAgbWV0YT86IFZpZGVvTWV0YTtcbiAgY3Y6IEhUTUxDYW52YXNFbGVtZW50O1xuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgcGF1c2VkOiBib29sZWFuO1xuICBjdXJyZW50VGltZTogbnVtYmVyO1xuICBlbmRlZDogYm9vbGVhbjtcbiAgbGFzdERyYXduSWR4OiBudW1iZXI7XG4gIGRlYWQ6IGJvb2xlYW47XG4gIG9iamVjdEZpdDogc3RyaW5nO1xuICByZWFkeVN0YXRlOiBudW1iZXI7XG4gIG5ldHdvcmtTdGF0ZTogbnVtYmVyO1xuICBzZWVraW5nOiBib29sZWFuO1xuICB3YWl0aW5nOiBib29sZWFuO1xuICBlcnJvcjogTWVkaWFFcnJvckxpa2UgfCB1bmRlZmluZWQ7XG4gIHByZXNlbnRlZEZyYW1lczogbnVtYmVyO1xuICBtYXhSZWFjaGVkOiBudW1iZXI7XG4gIHJ2ZmM6IE1hcDxudW1iZXIsIEZyYW1lQ2I+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVSYW5nZXNMaWtlIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIHN0YXJ0KGk6IG51bWJlcik6IG51bWJlcjtcbiAgZW5kKGk6IG51bWJlcik6IG51bWJlcjtcbn1cblxuLy8gV2hvbGUgY2xpcCBpcyBkZWNvZGUtb24tZGVtYW5kLCBzbyB0aGUgYXZhaWxhYmxlIHJhbmdlIGlzIGFsd2F5cyBbMCwgZW5kXSAob25lIFRpbWVSYW5nZXMgZW50cnkpLlxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVSYW5nZXMoZW5kOiBudW1iZXIpOiBUaW1lUmFuZ2VzTGlrZSB7XG4gIHJldHVybiB7IGxlbmd0aDogZW5kID4gMCA/IDEgOiAwLCBzdGFydDogKCkgPT4gMCwgZW5kOiAoKSA9PiBlbmQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcmUoZWw6IEV2ZW50VGFyZ2V0LCB0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQodHlwZSkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHR5cGUgeyBWaWRlb0hvb2sgfSBmcm9tIFwiLi9ob29rXCI7XG5pbXBvcnQgeyBmaXRSZWN0LCBzaG93blBpeGVscywgc3luY092ZXJsYXkgfSBmcm9tIFwiLi9vdmVybGF5XCI7XG5pbXBvcnQgeyBBSEVBRCwgZmlyZSwgdHlwZSBWaWRlb0ZyYW1lTWV0YSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZnVuY3Rpb24gZmlyZUZyYW1lQ2FsbGJhY2tzKHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gIGlmIChzdGF0ZS5ydmZjLnNpemUgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY2JzID0gWy4uLnN0YXRlLnJ2ZmMudmFsdWVzKCldO1xuICBzdGF0ZS5ydmZjLmNsZWFyKCk7XG4gIGNvbnN0IG5vdyA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCBtZXRhOiBWaWRlb0ZyYW1lTWV0YSA9IHtcbiAgICBwcmVzZW50YXRpb25UaW1lOiBub3csXG4gICAgZXhwZWN0ZWREaXNwbGF5VGltZTogbm93LFxuICAgIHdpZHRoOiBzdGF0ZS5tZXRhIS5mcmFtZVdpZHRoLFxuICAgIGhlaWdodDogc3RhdGUubWV0YSEuZnJhbWVIZWlnaHQsXG4gICAgbWVkaWFUaW1lOiBzdGF0ZS5jdXJyZW50VGltZSxcbiAgICBwcmVzZW50ZWRGcmFtZXM6IHN0YXRlLnByZXNlbnRlZEZyYW1lcyxcbiAgfTtcbiAgZm9yIChjb25zdCBjYiBvZiBjYnMpIHtcbiAgICBjYihub3csIG1ldGEpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhaW50KGhvb2s6IFZpZGVvSG9vaywgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlLCBpZHg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjID0gaG9vay5jYWNoZS5jYWNoZU9mKHN0YXRlLm1ldGEhLmlkKTtcbiAgYy5yZWFkZXJzLnNldChzdGF0ZSwgaWR4KTtcbiAgbGV0IGJtID0gYy5iaXRtYXBzLmdldChpZHgpO1xuICBpZiAoIWJtKSB7XG4gICAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgaWR4ICsgMSwgQUhFQUQgLSAxKTtcbiAgICBjb25zdCBmZXRjaGVkID0gYXdhaXQgaG9vay5jYWNoZS5mZXRjaChzdGF0ZSwgaWR4KTtcbiAgICBpZiAoaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWZldGNoZWQpIHtcbiAgICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS53YWl0aW5nKSB7XG4gICAgICAgIHN0YXRlLndhaXRpbmcgPSB0cnVlO1xuICAgICAgICBmaXJlKHZpZGVvLCBcIndhaXRpbmdcIik7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGJtID0gZmV0Y2hlZDtcbiAgfVxuICBpZiAoc3RhdGUud2FpdGluZykge1xuICAgIHN0YXRlLndhaXRpbmcgPSBmYWxzZTtcbiAgICBpZiAoIXN0YXRlLnBhdXNlZCkge1xuICAgICAgZmlyZSh2aWRlbywgXCJwbGF5aW5nXCIpO1xuICAgIH1cbiAgfVxuICBjb25zdCBjdiA9IHN0YXRlLmN2O1xuICBjb25zdCByID0gZml0UmVjdChibS53aWR0aCwgYm0uaGVpZ2h0LCBjdi53aWR0aCwgY3YuaGVpZ2h0LCBzdGF0ZS5vYmplY3RGaXQpO1xuICBzdGF0ZS5jdHguY2xlYXJSZWN0KDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICBzdGF0ZS5jdHguZHJhd0ltYWdlKGJtLCByWzBdLCByWzFdLCByWzJdLCByWzNdKTtcbiAgc3RhdGUubGFzdERyYXduSWR4ID0gaWR4O1xuICBzdGF0ZS5wcmVzZW50ZWRGcmFtZXMrKztcbiAgZmlyZUZyYW1lQ2FsbGJhY2tzKHN0YXRlKTtcbiAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgaWR4ICsgMSwgQUhFQUQpO1xuICBob29rLmNhY2hlLmV2aWN0KGMpO1xufVxuXG4vLyBWaXJ0dWFsLXRpbWUgdGljazogc3luYyBvdmVybGF5cywgYWR2YW5jZSBlYWNoIGhvb2tlZCB2aWRlbydzIGNsb2NrIChsb29wL2VuZCksIHBhaW50IHRoZSBkdWUgZnJhbWUuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZShob29rOiBWaWRlb0hvb2ssIHRpbWVzdGFtcE1zOiBudW1iZXIpOiBQcm9taXNlPHVua25vd24+IHtcbiAgY29uc3QgZHQgPSBNYXRoLm1heCgwLCB0aW1lc3RhbXBNcyAtIGhvb2suY3Vyck1zKSAvIDEwMDA7XG4gIGhvb2suY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gIGNvbnN0IHBzOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInZpZGVvXCIpLmZvckVhY2goKGVsKSA9PiB7XG4gICAgY29uc3QgdmlkZW8gPSBlbCBhcyBIVE1MVmlkZW9FbGVtZW50O1xuICAgIGNvbnN0IHN0YXRlID0gaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmICghc3RhdGUgfHwgc3RhdGUuZGVhZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUaGUgZWxlbWVudCBvdXRncmV3IHRoZSBkb3duc2NhbGVkIGRlY29kZTogc3dhcCB0byBuYXRpdmUgaW4gdGhlIGJhY2tncm91bmQsIGtlZXBpbmcgdGhlIG9sZCBmcmFtZSBwYWludGluZy5cbiAgICBpZiAoXG4gICAgICBzdGF0ZS5tZXRhICYmXG4gICAgICBzdGF0ZS5tZXRhLmZyYW1lV2lkdGggPCBzdGF0ZS5tZXRhLndpZHRoICYmXG4gICAgICAhaG9vay5hdHRhY2hpbmcuaGFzKHZpZGVvKSAmJlxuICAgICAgIWhvb2suaXNVcGdyYWRpbmcodmlkZW8pICYmXG4gICAgICBzaG93blBpeGVscyh2aWRlbykud2lkdGggPiBzdGF0ZS5tZXRhLmZyYW1lV2lkdGggKiAxLjA1XG4gICAgKSB7XG4gICAgICBob29rLnVwZ3JhZGUodmlkZW8sIHN0YXRlKTtcbiAgICB9XG4gICAgLy8gU3RhbGwgdGhlIHRpY2sgd2hpbGUgYSByZS1hdHRhY2ggb3BlbnMsIG9yIHRoZSByZXNpemUtd2lwZWQgY2FudmFzIGlzIGNhcHR1cmVkIGFzIGJsYW5rIGZyYW1lcy5cbiAgICBpZiAoIXN0YXRlLm1ldGEgJiYgaG9vay5hdHRhY2hpbmcuaGFzKHZpZGVvKSkge1xuICAgICAgcHMucHVzaChob29rLmF0dGFjaGluZy5nZXQodmlkZW8pIS50aGVuKCgpID0+IHVuZGVmaW5lZCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3luY092ZXJsYXkodmlkZW8sIHN0YXRlLmN2KSkge1xuICAgICAgc3RhdGUubGFzdERyYXduSWR4ID0gLTE7XG4gICAgfVxuICAgIGlmICghc3RhdGUubWV0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBCYWNraW5nIHN0b3JlID0gZGVjb2RlIHJlc29sdXRpb24gZm9yIHRoZSBzZXNzaW9uJ3MgbGlmZSAob25lIHNldCBwZXIgYXR0YWNoOyBDU1Mgc2NhbGVzIHRoZSByZXN0KS5cbiAgICBpZiAoc3RhdGUuY3Yud2lkdGggIT09IHN0YXRlLm1ldGEuZnJhbWVXaWR0aCB8fCBzdGF0ZS5jdi5oZWlnaHQgIT09IHN0YXRlLm1ldGEuZnJhbWVIZWlnaHQpIHtcbiAgICAgIHN0YXRlLmN2LndpZHRoID0gc3RhdGUubWV0YS5mcmFtZVdpZHRoO1xuICAgICAgc3RhdGUuY3YuaGVpZ2h0ID0gc3RhdGUubWV0YS5mcmFtZUhlaWdodDtcbiAgICAgIHN0YXRlLmxhc3REcmF3bklkeCA9IC0xO1xuICAgIH1cbiAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHN0YXRlLmN1cnJlbnRUaW1lICs9IGR0ICogKHZpZGVvLnBsYXliYWNrUmF0ZSB8fCAxKTtcbiAgICAgIHN0YXRlLm1heFJlYWNoZWQgPSBNYXRoLm1heChzdGF0ZS5tYXhSZWFjaGVkLCBzdGF0ZS5jdXJyZW50VGltZSk7XG4gICAgICBpZiAoc3RhdGUuY3VycmVudFRpbWUgPj0gc3RhdGUubWV0YS5kdXJhdGlvbikge1xuICAgICAgICBpZiAodmlkZW8ubG9vcCkge1xuICAgICAgICAgIHN0YXRlLmN1cnJlbnRUaW1lID0gc3RhdGUuY3VycmVudFRpbWUgJSBzdGF0ZS5tZXRhLmR1cmF0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLmN1cnJlbnRUaW1lID0gc3RhdGUubWV0YS5kdXJhdGlvbjtcbiAgICAgICAgICBzdGF0ZS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICBmaXJlKHZpZGVvLCBcImVuZGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaXJlKHZpZGVvLCBcInRpbWV1cGRhdGVcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGlkeCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoc3RhdGUuY3VycmVudFRpbWUgKiBzdGF0ZS5tZXRhLmZwcykpO1xuICAgIGlmIChpZHggPT09IHN0YXRlLmxhc3REcmF3bklkeCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwcy5wdXNoKHBhaW50KGhvb2ssIHZpZGVvLCBzdGF0ZSwgaWR4KSk7XG4gIH0pO1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHMpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHsgU0NIRU1FLCB0eXBlIFZpZGVvQ2FjaGUsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmNvbnN0IEZFVENIX1RJTUVPVVRfTVMgPSA4XzAwMDsgLy8gYm91bmQgYSBzdHVjayBkZWNvZGUgKG1hdGNoZXMgdGhlIGRlY29kZXIgcndfdGltZW91dCkgc28gcGFpbnRzIGhvbGQgaW5zdGVhZCBvZiBmcmVlemluZ1xuXG4vLyBQZXItc2Vzc2lvbiBiaXRtYXAgY2FjaGU6IGZldGNoZXMgUkdCQSBmcmFtZXMgZnJvbSB0aGUgZnJhbWUgcHJvdG9jb2wsIGRlZHVwZXMgaW4tZmxpZ2h0LCBldmljdHMgYmVoaW5kIHJlYWRlcnMuXG5leHBvcnQgY2xhc3MgRnJhbWVDYWNoZSB7XG4gIHByaXZhdGUgX2NhY2hlcyA9IG5ldyBNYXA8c3RyaW5nLCBWaWRlb0NhY2hlPigpO1xuXG4gIGNhY2hlT2YoaWQ6IHN0cmluZyk6IFZpZGVvQ2FjaGUge1xuICAgIGxldCBjID0gdGhpcy5fY2FjaGVzLmdldChpZCk7XG4gICAgaWYgKCFjKSB7XG4gICAgICBjID0geyBiaXRtYXBzOiBuZXcgTWFwKCksIGluRmxpZ2h0OiBuZXcgTWFwKCksIHJlYWRlcnM6IG5ldyBNYXAoKSB9O1xuICAgICAgdGhpcy5fY2FjaGVzLnNldChpZCwgYyk7XG4gICAgfVxuICAgIHJldHVybiBjO1xuICB9XG5cbiAgZmV0Y2goc3RhdGU6IFZpZGVvU3RhdGUsIGlkeDogbnVtYmVyKTogUHJvbWlzZTxJbWFnZUJpdG1hcCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IG1ldGEgPSBzdGF0ZS5tZXRhO1xuICAgIGlmICghbWV0YSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBjb25zdCBjID0gdGhpcy5jYWNoZU9mKG1ldGEuaWQpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYy5pbkZsaWdodC5nZXQoaWR4KTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gICAgY29uc3QgY2FjaGVkID0gYy5iaXRtYXBzLmdldChpZHgpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2FjaGVkKTtcbiAgICB9XG4gICAgY29uc3QgdyA9IG1ldGEuZnJhbWVXaWR0aDtcbiAgICBjb25zdCBoID0gbWV0YS5mcmFtZUhlaWdodDtcbiAgICBjb25zdCBwID0gbmV3IFByb21pc2U8SW1hZ2VCaXRtYXAgfCB1bmRlZmluZWQ+KChyZXMpID0+IHtcbiAgICAgIGNvbnN0IHNldHRsZSA9IChibTogSW1hZ2VCaXRtYXAgfCB1bmRlZmluZWQpOiB2b2lkID0+IHtcbiAgICAgICAgYy5pbkZsaWdodC5kZWxldGUoaWR4KTtcbiAgICAgICAgaWYgKGJtKSB7XG4gICAgICAgICAgYy5iaXRtYXBzLnNldChpZHgsIGJtKTtcbiAgICAgICAgfVxuICAgICAgICByZXMoYm0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlcSA9IGZldGNoKGAke1NDSEVNRX1mcmFtZT9pZD0ke21ldGEuaWR9JmlkeD0ke2lkeH1gKVxuICAgICAgICAudGhlbigocikgPT4gKHIub2sgPyByLmFycmF5QnVmZmVyKCkgOiB1bmRlZmluZWQpKVxuICAgICAgICAudGhlbigoYnVmKSA9PlxuICAgICAgICAgIGJ1ZiAmJiBidWYuYnl0ZUxlbmd0aCA9PT0gdyAqIGggKiA0XG4gICAgICAgICAgICA/IGNyZWF0ZUltYWdlQml0bWFwKG5ldyBJbWFnZURhdGEobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGJ1ZiksIHcsIGgpKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKGJtKSA9PiBzZXR0bGUoYm0pKVxuICAgICAgICAuY2F0Y2goKCkgPT4gc2V0dGxlKHVuZGVmaW5lZCkpO1xuICAgICAgLy8gQSBzdHVjayBkZWNvZGUgd291bGQgcGFyayB0aGUgcGFpbnQgZm9yZXZlcjsgdGltZSBvdXQgYW5kIGxldCB0aGUgY2FudmFzIGhvbGQgaXRzIGxhc3QgZnJhbWUuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHNldHRsZSh1bmRlZmluZWQpLCBGRVRDSF9USU1FT1VUX01TKTtcbiAgICAgIHZvaWQgcmVxO1xuICAgIH0pO1xuICAgIGMuaW5GbGlnaHQuc2V0KGlkeCwgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBwcmVmZXRjaChzdGF0ZTogVmlkZW9TdGF0ZSwgZnJvbUlkeDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbWV0YSA9IHN0YXRlLm1ldGE7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1heElkeCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQobWV0YS5kdXJhdGlvbiAqIG1ldGEuZnBzKSk7XG4gICAgZm9yIChsZXQgaSA9IGZyb21JZHg7IGkgPCBmcm9tSWR4ICsgY291bnQ7IGkrKykge1xuICAgICAgaWYgKGkgPCAxIHx8IGkgPiBtYXhJZHgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2b2lkIHRoaXMuZmV0Y2goc3RhdGUsIGkpO1xuICAgIH1cbiAgfVxuXG4gIGV2aWN0KGM6IFZpZGVvQ2FjaGUpOiB2b2lkIHtcbiAgICBsZXQgbWluSWR4ID0gSW5maW5pdHk7XG4gICAgYy5yZWFkZXJzLmZvckVhY2goKGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA8IG1pbklkeCkge1xuICAgICAgICBtaW5JZHggPSBpZHg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluSWR4KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmbG9vciA9IG1pbklkeCAtIDI7XG4gICAgYy5iaXRtYXBzLmZvckVhY2goKGJtLCBpZHgpID0+IHtcbiAgICAgIGlmIChpZHggPCBmbG9vcikge1xuICAgICAgICBibS5jbG9zZSgpO1xuICAgICAgICBjLmJpdG1hcHMuZGVsZXRlKGlkeCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBEcm9wIGEgcmVhZGVyOyB3aGVuIHRoZSBsYXN0IGxlYXZlcywgY2xvc2UgYml0bWFwcyBhbmQgdGVsbCB0aGUgc2VydmVyIHRvIHJlbGVhc2UgdGhlIGRlY29kZSBzZXNzaW9uLlxuICByZWxlYXNlKGlkOiBzdHJpbmcsIHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgYyA9IHRoaXMuX2NhY2hlcy5nZXQoaWQpO1xuICAgIGlmICghYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjLnJlYWRlcnMuZGVsZXRlKHN0YXRlKTtcbiAgICBpZiAoYy5yZWFkZXJzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGMuYml0bWFwcy5mb3JFYWNoKChibSkgPT4ge1xuICAgICAgYm0uY2xvc2UoKTtcbiAgICB9KTtcbiAgICB0aGlzLl9jYWNoZXMuZGVsZXRlKGlkKTtcbiAgICBmZXRjaChgJHtTQ0hFTUV9Y2xvc2U/aWQ9JHtpZH1gLCB7IGtlZXBhbGl2ZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHR5cGUgeyBWaWRlb0hvb2sgfSBmcm9tIFwiLi9ob29rXCI7XG5pbXBvcnQgeyB0eXBlIEZyYW1lQ2IsIGZpcmUsIHRpbWVSYW5nZXMsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIE92ZXJyaWRlIHRoZSBIVE1MTWVkaWFFbGVtZW50IHN1cmZhY2UgZm9yIGhvb2tlZCA8dmlkZW8+OyB1bmhvb2tlZCBlbGVtZW50cyBmYWxsIHRocm91Z2ggdG8gbmF0aXZlLlxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxNZWRpYVNoaW0oaG9vazogVmlkZW9Ib29rKTogdm9pZCB7XG4gIGNvbnN0IEhWRSA9IEhUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlO1xuICBjb25zdCBNRURJQSA9IEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlO1xuICBjb25zdCBtZGVzYyA9IChwOiBzdHJpbmcpID0+IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFZFLCBwKSB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE1FRElBLCBwKTtcbiAgY29uc3QgY3REZXNjID0gbWRlc2MoXCJjdXJyZW50VGltZVwiKTtcbiAgY29uc3Qgc3JjRGVzYyA9IG1kZXNjKFwic3JjXCIpO1xuICBjb25zdCByYXRlRGVzYyA9IG1kZXNjKFwicGxheWJhY2tSYXRlXCIpO1xuICBjb25zdCBvcmlnUGF1c2UgPSBIVkUucGF1c2U7XG4gIGNvbnN0IG9yaWdSVkZDID0gSFZFLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2s7XG4gIGNvbnN0IG9yaWdDYW5jZWxSVkZDID0gSFZFLmNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjaztcbiAgY29uc3Qgb3JpZ1F1YWxpdHkgPSBIVkUuZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHk7XG4gIGNvbnN0IG9yaWdMb2FkID0gSFZFLmxvYWQ7XG4gIGNvbnN0IHNlc3Npb25zID0gaG9vay5zZXNzaW9ucztcblxuICAvLyBTZXNzaW9uLWJhY2tlZCByZWFkLW9ubHkgcHJvcGVydHkgd2l0aCBuYXRpdmUgZmFsbGJhY2sgd2hlbiB0aGUgZWxlbWVudCBpc24ndCBob29rZWQuXG4gIGNvbnN0IGRlZiA9IChwcm9wOiBzdHJpbmcsIHBpY2s6IChzOiBWaWRlb1N0YXRlKSA9PiB1bmtub3duKSA9PiB7XG4gICAgY29uc3QgbmF0aXZlR2V0ID0gbWRlc2MocHJvcCk/LmdldDtcbiAgICBpZiAoIW5hdGl2ZUdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBtZWRpYV9zaGltOiBubyBuYXRpdmUgZ2V0dGVyIGZvciAke3Byb3B9YCk7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIHByb3AsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgICAgIHJldHVybiBzID8gcGljayhzKSA6IG5hdGl2ZUdldC5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcbiAgZGVmKFwicGF1c2VkXCIsIChzKSA9PiBzLnBhdXNlZCk7XG4gIGRlZihcImVuZGVkXCIsIChzKSA9PiBzLmVuZGVkKTtcbiAgZGVmKFwicmVhZHlTdGF0ZVwiLCAocykgPT4gcy5yZWFkeVN0YXRlKTtcbiAgZGVmKFwibmV0d29ya1N0YXRlXCIsIChzKSA9PiBzLm5ldHdvcmtTdGF0ZSk7XG4gIGRlZihcImVycm9yXCIsIChzKSA9PiBzLmVycm9yID8/IG51bGwpO1xuICBkZWYoXCJzZWVraW5nXCIsIChzKSA9PiBzLnNlZWtpbmcpO1xuICBkZWYoXCJidWZmZXJlZFwiLCAocykgPT4gdGltZVJhbmdlcyhzLm1ldGEgPyBzLm1ldGEuZHVyYXRpb24gOiAwKSk7XG4gIGRlZihcInNlZWthYmxlXCIsIChzKSA9PiB0aW1lUmFuZ2VzKHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IDApKTtcbiAgZGVmKFwicGxheWVkXCIsIChzKSA9PiB0aW1lUmFuZ2VzKHMubWF4UmVhY2hlZCkpO1xuXG4gIEhWRS5wbGF5ID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgcmV0dXJuIGhvb2suYXR0YWNoKHRoaXMpLnRoZW4oKG5zKSA9PiB7XG4gICAgICAgIGlmIChucykge1xuICAgICAgICAgIGhvb2sucmVzdW1lKHRoaXMsIG5zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGhvb2sucmVzdW1lKHRoaXMsIHMpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcbiAgSFZFLnBhdXNlID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgb3JpZ1BhdXNlLmNhbGwodGhpcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghcy5wYXVzZWQpIHtcbiAgICAgIHMucGF1c2VkID0gdHJ1ZTtcbiAgICAgIGZpcmUodGhpcywgXCJwYXVzZVwiKTtcbiAgICB9XG4gIH07XG4gIGlmIChjdERlc2M/LmdldCAmJiBjdERlc2Muc2V0KSB7XG4gICAgY29uc3QgY3RHZXQgPSBjdERlc2MuZ2V0O1xuICAgIGNvbnN0IGN0U2V0ID0gY3REZXNjLnNldDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBcImN1cnJlbnRUaW1lXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgICAgIHJldHVybiBzID8gcy5jdXJyZW50VGltZSA6IGN0R2V0LmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoIXMpIHtcbiAgICAgICAgICBjdFNldC5jYWxsKHRoaXMsIHQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkdXIgPSBzLm1ldGEgPyBzLm1ldGEuZHVyYXRpb24gOiB0O1xuICAgICAgICBzLmN1cnJlbnRUaW1lID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odCwgZHVyKSk7XG4gICAgICAgIHMubWF4UmVhY2hlZCA9IE1hdGgubWF4KHMubWF4UmVhY2hlZCwgcy5jdXJyZW50VGltZSk7XG4gICAgICAgIGlmIChzLmN1cnJlbnRUaW1lIDwgZHVyKSB7XG4gICAgICAgICAgcy5lbmRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHMuc2Vla2luZyA9IHRydWU7XG4gICAgICAgIGZpcmUodGhpcywgXCJzZWVraW5nXCIpO1xuICAgICAgICBzLnNlZWtpbmcgPSBmYWxzZTtcbiAgICAgICAgZmlyZSh0aGlzLCBcInNlZWtlZFwiKTtcbiAgICAgICAgZmlyZSh0aGlzLCBcInRpbWV1cGRhdGVcIik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIGlmIChyYXRlRGVzYz8uc2V0KSB7XG4gICAgY29uc3QgcmF0ZVNldCA9IHJhdGVEZXNjLnNldDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBcInBsYXliYWNrUmF0ZVwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IHJhdGVEZXNjLmdldCxcbiAgICAgIHNldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCByOiBudW1iZXIpIHtcbiAgICAgICAgcmF0ZVNldC5jYWxsKHRoaXMsIHIpO1xuICAgICAgICBpZiAoc2Vzc2lvbnMuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgZmlyZSh0aGlzLCBcInJhdGVjaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgSFZFLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2sgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCwgY2IpOiBudW1iZXIge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm4gb3JpZ1JWRkMuY2FsbCh0aGlzLCBjYik7XG4gICAgfVxuICAgIGNvbnN0IGlkID0gKytob29rLnJ2ZmNTZXE7XG4gICAgcy5ydmZjLnNldChpZCwgY2IgYXMgRnJhbWVDYik7XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICBIVkUuY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgb3JpZ0NhbmNlbFJWRkMuY2FsbCh0aGlzLCBpZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHMucnZmYy5kZWxldGUoaWQpO1xuICB9O1xuICBIVkUuZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHkgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm4gb3JpZ1F1YWxpdHkuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0aW9uVGltZTogcGVyZm9ybWFuY2Uubm93KCksXG4gICAgICB0b3RhbFZpZGVvRnJhbWVzOiBzLnByZXNlbnRlZEZyYW1lcyxcbiAgICAgIGRyb3BwZWRWaWRlb0ZyYW1lczogMCxcbiAgICAgIGNvcnJ1cHRlZFZpZGVvRnJhbWVzOiAwLFxuICAgIH0gYXMgVmlkZW9QbGF5YmFja1F1YWxpdHk7XG4gIH07XG4gIEhWRS5sb2FkID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBpZiAoIXNlc3Npb25zLmhhcyh0aGlzKSkge1xuICAgICAgcmV0dXJuIG9yaWdMb2FkLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIGhvb2suZGV0YWNoKHRoaXMpO1xuICAgIGZpcmUodGhpcywgXCJlbXB0aWVkXCIpO1xuICAgIHRoaXMuX19wdXBfbGFzdF9zcmNfXyA9IHVuZGVmaW5lZDtcbiAgICBob29rLmF0dGFjaCh0aGlzKTtcbiAgfTtcbiAgaWYgKHNyY0Rlc2M/LnNldCkge1xuICAgIGNvbnN0IHNyY1NldCA9IHNyY0Rlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwic3JjXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogc3JjRGVzYy5nZXQsXG4gICAgICBzZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCwgdjogc3RyaW5nKSB7XG4gICAgICAgIHNyY1NldC5jYWxsKHRoaXMsIHYpO1xuICAgICAgICBob29rLm9uU3JjQ2hhbmdlKHRoaXMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHR5cGUgeyBWaWRlb0hvb2sgfSBmcm9tIFwiLi9ob29rXCI7XG5pbXBvcnQgeyBzaG93blBpeGVscyB9IGZyb20gXCIuL292ZXJsYXlcIjtcbmltcG9ydCB7XG4gIEFIRUFELFxuICBmaXJlLFxuICBIQVZFX0VOT1VHSF9EQVRBLFxuICBIQVZFX01FVEFEQVRBLFxuICBIQVZFX05PVEhJTkcsXG4gIE1FRElBX0VSUl9ERUNPREUsXG4gIE1FRElBX0VSUl9ORVRXT1JLLFxuICB0eXBlIE1lZGlhRXJyb3JMaWtlLFxuICBORVRXT1JLX0VNUFRZLFxuICBORVRXT1JLX0lETEUsXG4gIE5FVFdPUktfTE9BRElORyxcbiAgTkVUV09SS19OT19TT1VSQ0UsXG4gIFNDSEVNRSxcbiAgVEFHLFxuICB0eXBlIFZpZGVvTWV0YSxcbiAgdHlwZSBWaWRlb1N0YXRlLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaEFyZ3Mge1xuICB2aWRlbzogSFRNTFZpZGVvRWxlbWVudDtcbiAgc3RhdGU6IFZpZGVvU3RhdGU7XG4gIHNyYzogc3RyaW5nO1xuICBiaXJ0aE1zOiBudW1iZXI7XG4gIG5hdGl2ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld1ZpZGVvU3RhdGUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGN2OiBIVE1MQ2FudmFzRWxlbWVudCk6IFZpZGVvU3RhdGUge1xuICByZXR1cm4ge1xuICAgIG1ldGE6IHVuZGVmaW5lZCxcbiAgICBjdixcbiAgICBjdHg6IGN2LmdldENvbnRleHQoXCIyZFwiKSEsXG4gICAgcGF1c2VkOiAhKHZpZGVvLmF1dG9wbGF5IHx8ICF2aWRlby5wYXVzZWQpLFxuICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgIGVuZGVkOiBmYWxzZSxcbiAgICBsYXN0RHJhd25JZHg6IC0xLFxuICAgIGRlYWQ6IGZhbHNlLFxuICAgIG9iamVjdEZpdDogd2luZG93LmdldENvbXB1dGVkU3R5bGUodmlkZW8pLm9iamVjdEZpdCB8fCBcImZpbGxcIixcbiAgICByZWFkeVN0YXRlOiBIQVZFX05PVEhJTkcsXG4gICAgbmV0d29ya1N0YXRlOiBORVRXT1JLX0VNUFRZLFxuICAgIHNlZWtpbmc6IGZhbHNlLFxuICAgIHdhaXRpbmc6IGZhbHNlLFxuICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgcHJlc2VudGVkRnJhbWVzOiAwLFxuICAgIG1heFJlYWNoZWQ6IDAsXG4gICAgcnZmYzogbmV3IE1hcCgpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmYWlsT3Blbih2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUsIGVycm9yOiBNZWRpYUVycm9yTGlrZSk6IHVuZGVmaW5lZCB7XG4gIHN0YXRlLmRlYWQgPSB0cnVlO1xuICBzdGF0ZS5lcnJvciA9IGVycm9yO1xuICBzdGF0ZS5uZXR3b3JrU3RhdGUgPSBORVRXT1JLX05PX1NPVVJDRTtcbiAgY29uc29sZS5lcnJvcihUQUcsIGAke2Vycm9yLm1lc3NhZ2V9IHNyYz0ke3ZpZGVvLnNyYyB8fCB2aWRlby5jdXJyZW50U3JjfWApO1xuICBmaXJlKHZpZGVvLCBcImVycm9yXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBPcGVuIHRoZSBmcmFtZSBzZXJ2ZXIgc2Vzc2lvbiwgdGhlbiBlbWl0IHRoZSBIVE1MTWVkaWFFbGVtZW50IGxvYWQgc2VxdWVuY2UgKHJlYWR5U3RhdGUvbmV0d29ya1N0YXRlICsgZXZlbnRzKS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuU2Vzc2lvbihob29rOiBWaWRlb0hvb2ssIGFyZ3M6IEF0dGFjaEFyZ3MpOiBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgeyB2aWRlbywgc3RhdGUsIHNyYywgYmlydGhNcywgbmF0aXZlIH0gPSBhcmdzO1xuICBjb25zdCBmcHMgPSBOdW1iZXIucGFyc2VJbnQodmlkZW8uZGF0YXNldFtcInB1cEZwc1wiXSB8fCBcIjMwXCIsIDEwKTtcbiAgc3RhdGUubmV0d29ya1N0YXRlID0gTkVUV09SS19MT0FESU5HO1xuICBmaXJlKHZpZGVvLCBcImxvYWRzdGFydFwiKTtcbiAgbGV0IHJlczogUmVzcG9uc2U7XG4gIHRyeSB7XG4gICAgLy8gRGVjb2RlIGF0IHRoZSBlbGVtZW50J3Mgb24tc2NyZWVuIHBpeGVscywgc28gc3RhdGljIGJveGVzIG9wZW4gYXQgZmluYWwgcmVzIHdpdGhvdXQgYSByZWF0dGFjaCByb3VuZC5cbiAgICBjb25zdCBkcHIgPSBzaG93blBpeGVscyh2aWRlbyk7XG4gICAgY29uc3QgcSA9IG5hdGl2ZSA/IFwiXCIgOiBgJnc9JHtkcHIud2lkdGh9Jmg9JHtkcHIuaGVpZ2h0fSZmaXQ9JHtlbmNvZGVVUklDb21wb25lbnQoc3RhdGUub2JqZWN0Rml0KX1gO1xuICAgIHJlcyA9IGF3YWl0IGZldGNoKGAke1NDSEVNRX1vcGVuP3NyYz0ke2VuY29kZVVSSUNvbXBvbmVudChzcmMpfSZmcHM9JHtmcHN9JHtxfWApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhaWxPcGVuKHZpZGVvLCBzdGF0ZSwge1xuICAgICAgY29kZTogTUVESUFfRVJSX05FVFdPUkssXG4gICAgICBtZXNzYWdlOiBgb3BlbiBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgfSk7XG4gIH1cbiAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghcmVzLm9rKSB7XG4gICAgcmV0dXJuIGZhaWxPcGVuKHZpZGVvLCBzdGF0ZSwge1xuICAgICAgY29kZTogTUVESUFfRVJSX0RFQ09ERSxcbiAgICAgIG1lc3NhZ2U6IGBvcGVuICR7cmVzLnN0YXR1c306ICR7YXdhaXQgcmVzLnRleHQoKX1gLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1ldGEgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgVmlkZW9NZXRhO1xuICBpZiAoaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgc3RhdGUubWV0YSA9IG1ldGE7XG4gIHN0YXRlLmN1cnJlbnRUaW1lID0gc3RhdGUucGF1c2VkID8gMCA6IE1hdGgubWF4KDAsIChob29rLmN1cnJNcyAtIGJpcnRoTXMpIC8gMTAwMCk7XG4gIC8vIFRoZSBzdHViIG1lZGlhIHVzdWFsbHkgbG9hZHMgbmF0aXZlbHkgZmlyc3Q7IEJsaW5rIHRoZW4gb3ducyB0aGUgcmVhbCBldmVudCBzZXF1ZW5jZSDigJQgZG9uJ3QgZHVwbGljYXRlIGl0LlxuICBjb25zdCBuYXRpdmVNZXRhID0gdmlkZW8udmlkZW9XaWR0aCA+IDA7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJ2aWRlb1dpZHRoXCIsIHtcbiAgICB2YWx1ZTogbWV0YS53aWR0aCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlkZW8sIFwidmlkZW9IZWlnaHRcIiwge1xuICAgIHZhbHVlOiBtZXRhLmhlaWdodCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlkZW8sIFwiZHVyYXRpb25cIiwge1xuICAgIHZhbHVlOiBtZXRhLmR1cmF0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG4gIHN0YXRlLnJlYWR5U3RhdGUgPSBIQVZFX01FVEFEQVRBO1xuICBpZiAoIW5hdGl2ZU1ldGEpIHtcbiAgICBmaXJlKHZpZGVvLCBcImR1cmF0aW9uY2hhbmdlXCIpO1xuICAgIGZpcmUodmlkZW8sIFwibG9hZGVkbWV0YWRhdGFcIik7XG4gIH1cbiAgc3RhdGUucmVhZHlTdGF0ZSA9IEhBVkVfRU5PVUdIX0RBVEE7XG4gIGlmICghbmF0aXZlTWV0YSkge1xuICAgIGZpcmUodmlkZW8sIFwibG9hZGVkZGF0YVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcImNhbnBsYXlcIik7XG4gICAgZmlyZSh2aWRlbywgXCJjYW5wbGF5dGhyb3VnaFwiKTtcbiAgfVxuICBzdGF0ZS5uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0lETEU7XG4gIGlmICghbmF0aXZlTWV0YSkge1xuICAgIGZpcmUodmlkZW8sIFwic3VzcGVuZFwiKTtcbiAgICBpZiAoIXN0YXRlLnBhdXNlZCkge1xuICAgICAgZmlyZSh2aWRlbywgXCJwbGF5XCIpO1xuICAgICAgZmlyZSh2aWRlbywgXCJwbGF5aW5nXCIpO1xuICAgIH1cbiAgfVxuICAvLyBOYXRpdmUgcmUtYXR0YWNoIHJlc3VtZXMgbWlkLWNsaXA7IHdhcm0gb25seSBmcmVzaCBvcGVucywgb3IgdGhlIDEuLkFIRUFEIHByZWZldGNoIGZpZ2h0cyB0aGUgcGFpbnRzJyBwb3NpdGlvbi5cbiAgaWYgKCFuYXRpdmUpIHtcbiAgICBob29rLmNhY2hlLnByZWZldGNoKHN0YXRlLCAxLCBBSEVBRCk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHsgYWR2YW5jZSB9IGZyb20gXCIuL2RyaXZlclwiO1xuaW1wb3J0IHsgRnJhbWVDYWNoZSB9IGZyb20gXCIuL2ZyYW1lX2NhY2hlXCI7XG5pbXBvcnQgeyBpbnN0YWxsTWVkaWFTaGltIH0gZnJvbSBcIi4vbWVkaWFfc2hpbVwiO1xuaW1wb3J0IHsgZml0UmVjdCwgc2V0dXBDYW52YXMgfSBmcm9tIFwiLi9vdmVybGF5XCI7XG5pbXBvcnQgeyBuZXdWaWRlb1N0YXRlLCBvcGVuU2Vzc2lvbiB9IGZyb20gXCIuL3Nlc3Npb25cIjtcbmltcG9ydCB7IEFIRUFELCBmaXJlLCBTQ0hFTUUsIFRBRywgdHlwZSBWaWRlb01ldGEsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19wdXBfdmlkZW9fXz86IHsgYWR2YW5jZTogKG1zOiBudW1iZXIpID0+IFByb21pc2U8dW5rbm93bj47IHJlYWR5OiAoKSA9PiBQcm9taXNlPHZvaWQ+IH07XG4gIH1cbiAgaW50ZXJmYWNlIEhUTUxWaWRlb0VsZW1lbnQge1xuICAgIF9fcHVwX2xhc3Rfc3JjX18/OiBzdHJpbmc7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvSG9vayB7XG4gIHJlYWRvbmx5IHNlc3Npb25zID0gbmV3IFdlYWtNYXA8SFRNTFZpZGVvRWxlbWVudCwgVmlkZW9TdGF0ZT4oKTtcbiAgcmVhZG9ubHkgYXR0YWNoaW5nID0gbmV3IFdlYWtNYXA8SFRNTFZpZGVvRWxlbWVudCwgUHJvbWlzZTxWaWRlb1N0YXRlIHwgdW5kZWZpbmVkPj4oKTtcbiAgLy8gRW51bWVyYWJsZSBtaXJyb3Igb2YgaW4tZmxpZ2h0IG9wZW5zIChXZWFrTWFwIGlzbid0IGl0ZXJhYmxlKSBzbyByZWFkeSgpIGNhbiBhd2FpdCB0aGVtLlxuICByZWFkb25seSBvcGVuaW5nID0gbmV3IFNldDxQcm9taXNlPHVua25vd24+PigpO1xuICByZWFkb25seSBjYWNoZSA9IG5ldyBGcmFtZUNhY2hlKCk7XG4gIHJ2ZmNTZXEgPSAwO1xuICBjdXJyTXMgPSAwO1xuICBwcml2YXRlIF91cGdyYWRpbmcgPSBuZXcgV2Vha1NldDxIVE1MVmlkZW9FbGVtZW50PigpO1xuICBwcml2YXRlIF9sYXN0VXBncmFkZUF0ID0gbmV3IFdlYWtNYXA8SFRNTFZpZGVvRWxlbWVudCwgbnVtYmVyPigpO1xuICBwcml2YXRlIF9sYXN0U25hcHNob3QgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBPZmZzY3JlZW5DYW52YXM+KCk7XG5cbiAgaW5zdGFsbCgpOiB2b2lkIHtcbiAgICBpbnN0YWxsTWVkaWFTaGltKHRoaXMpO1xuICAgIHRoaXMuc2Nhbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG0gb2YgbXV0cykge1xuICAgICAgICBpZiAobS50eXBlID09PSBcImF0dHJpYnV0ZXNcIiAmJiBtLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQgJiYgbS5hdHRyaWJ1dGVOYW1lID09PSBcInNyY1wiKSB7XG4gICAgICAgICAgdGhpcy5vblNyY0NoYW5nZShtLnRhcmdldCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbS5hZGRlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbihuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtLnJlbW92ZWROb2Rlcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaChuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLm9ic2VydmUoZG9jdW1lbnQsIHsgc3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFtcInNyY1wiXSB9KTtcbiAgICB3aW5kb3cuX19wdXBfdmlkZW9fXyA9IHsgYWR2YW5jZTogKG1zKSA9PiBhZHZhbmNlKHRoaXMsIG1zKSwgcmVhZHk6ICgpID0+IHRoaXMucmVhZHkoKSB9O1xuICB9XG5cbiAgYXR0YWNoKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBuYXRpdmUgPSBmYWxzZSk6IFByb21pc2U8VmlkZW9TdGF0ZSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShleGlzdGluZyk7XG4gICAgfVxuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLmF0dGFjaGluZy5nZXQodmlkZW8pO1xuICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICByZXR1cm4gcGVuZGluZztcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmM7XG4gICAgaWYgKCFzcmMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgaWYgKC9eKGJsb2I6fGRhdGE6fG1lZGlhc3RyZWFtOikvaS50ZXN0KHNyYykpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgY3YgPSBzZXR1cENhbnZhcyh2aWRlbywgdGhpcy5fbGFzdFNuYXBzaG90LmdldCh2aWRlbykpO1xuICAgIGNvbnN0IHN0YXRlID0gbmV3VmlkZW9TdGF0ZSh2aWRlbywgY3YpO1xuICAgIHRoaXMuc2Vzc2lvbnMuc2V0KHZpZGVvLCBzdGF0ZSk7XG4gICAgY29uc3QgcCA9IG9wZW5TZXNzaW9uKHRoaXMsIHsgdmlkZW8sIHN0YXRlLCBzcmMsIGJpcnRoTXM6IHRoaXMuY3Vyck1zLCBuYXRpdmUgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLmF0dGFjaGluZy5kZWxldGUodmlkZW8pO1xuICAgICAgdGhpcy5vcGVuaW5nLmRlbGV0ZShwKTtcbiAgICB9KTtcbiAgICB0aGlzLmF0dGFjaGluZy5zZXQodmlkZW8sIHApO1xuICAgIHRoaXMub3BlbmluZy5hZGQocCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICAvLyBBd2FpdCBvbmx5IHRoZSBvcGVucyBpbiBmbGlnaHQgcmlnaHQgbm93IOKAlCBuZXZlciBjaGFzZSBuZXdseS1zcGF3bmVkIG9uZXMsIG9yIGEgcmV0cnlpbmcgcGFnZSBsb29wcyBmb3JldmVyLlxuICBhc3luYyByZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoWy4uLnRoaXMub3BlbmluZ10pO1xuICB9XG5cbiAgcmVzdW1lKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGF0ZS5wYXVzZWQgPSBmYWxzZTtcbiAgICBzdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIGZpcmUodmlkZW8sIFwicGxheVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcInBsYXlpbmdcIik7XG4gIH1cblxuICBkZXRhY2godmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzdGF0ZS5tZXRhKSB7XG4gICAgICBpZiAoc3RhdGUubGFzdERyYXduSWR4ID49IDApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzbmFwID0gbmV3IE9mZnNjcmVlbkNhbnZhcyhzdGF0ZS5jdi53aWR0aCwgc3RhdGUuY3YuaGVpZ2h0KTtcbiAgICAgICAgICBjb25zdCBzY3R4ID0gc25hcC5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICAgICAgaWYgKCFzY3R4KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyAyZCBjb250ZXh0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzY3R4LmRyYXdJbWFnZShzdGF0ZS5jdiwgMCwgMCk7XG4gICAgICAgICAgdGhpcy5fbGFzdFNuYXBzaG90LnNldCh2aWRlbywgc25hcCk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICAgIHRoaXMuY2FjaGUucmVsZWFzZShzdGF0ZS5tZXRhLmlkLCBzdGF0ZSk7IC8vIHN0YWxlIGJpdG1hcHMgbXVzdCBub3Qgc3Vydml2ZSBhIGRldGFjaDsgZnJlc2ggb3BlbiByZS1rZXlzIHRvIHRoZSBuZXcgc2Vzc2lvblxuICAgIH1cbiAgICBzdGF0ZS5jdi5yZW1vdmUoKTtcbiAgICB0aGlzLnNlc3Npb25zLmRlbGV0ZSh2aWRlbyk7XG4gICAgdGhpcy5hdHRhY2hpbmcuZGVsZXRlKHZpZGVvKTtcbiAgfVxuXG4gIG9uU3JjQ2hhbmdlKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmMgfHwgXCJcIjtcbiAgICBpZiAodmlkZW8uX19wdXBfbGFzdF9zcmNfXyA9PT0gc3JjKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZpZGVvLl9fcHVwX2xhc3Rfc3JjX18gPSBzcmM7XG4gICAgaWYgKHRoaXMuc2Vzc2lvbnMuaGFzKHZpZGVvKSkge1xuICAgICAgdGhpcy5kZXRhY2godmlkZW8pO1xuICAgIH1cbiAgICB0aGlzLmF0dGFjaCh2aWRlbyk7XG4gIH1cblxuICBpc1VwZ3JhZGluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl91cGdyYWRpbmcuaGFzKHZpZGVvKTtcbiAgfVxuXG4gIC8vIEJhY2tncm91bmQgbmF0aXZlIHN3YXA6IHRoZSBvbGQgY2FudmFzIGtlZXBzIHBhaW50aW5nIHVudGlsIHRoZSBmaXJzdCBuYXRpdmUgZnJhbWUgaXMgZGVjb2RlZCwgc28gbm8gYmxhbmsvanVtcC5cbiAgYXN5bmMgdXBncmFkZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEgfHwgbWV0YS5mcmFtZVdpZHRoID49IG1ldGEud2lkdGggfHwgdGhpcy5fdXBncmFkaW5nLmhhcyh2aWRlbykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmM7XG4gICAgaWYgKCFzcmMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQmFjayBvZmYgYWZ0ZXIgYSBmYWlsZWQgb3BlbiBzbyBhIHdlZGdlZCBzb3VyY2UgaXNuJ3QgcmUtcHJvYmVkIGV2ZXJ5IHRpY2suXG4gICAgaWYgKHBlcmZvcm1hbmNlLm5vdygpIC0gKHRoaXMuX2xhc3RVcGdyYWRlQXQuZ2V0KHZpZGVvKSA/PyAwKSA8IDEwMDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fbGFzdFVwZ3JhZGVBdC5zZXQodmlkZW8sIHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICB0aGlzLl91cGdyYWRpbmcuYWRkKHZpZGVvKTtcbiAgICBsZXQgbnM6IFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIG5zID0gYXdhaXQgdGhpcy5vcGVuTmF0aXZlKHNyYywgbWV0YS5mcHMpO1xuICAgICAgaWYgKCFucyB8fCB0aGlzLnNlc3Npb25zLmdldCh2aWRlbykgIT09IHN0YXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIERlY29kZSB0aGUgZnJhbWUgdGhlIGNsb2NrIGlzIGF0IHJpZ2h0IG5vdyBzbyB0aGUgc3dhcCBsYW5kcyBvbiBtYXRjaGluZyBjb250ZW50LlxuICAgICAgY29uc3QgaWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChzdGF0ZS5jdXJyZW50VGltZSAqIG1ldGEuZnBzKSk7XG4gICAgICBjb25zdCBibSA9IGF3YWl0IHRoaXMuY2FjaGUuZmV0Y2gobnMsIGlkeCk7XG4gICAgICBpZiAoIWJtIHx8IHRoaXMuc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5jb21taXRVcGdyYWRlKHN0YXRlLCBucywgYm0sIGlkeCk7XG4gICAgICBucyA9IHVuZGVmaW5lZDsgLy8gY29tbWl0dGVkOiB0aGUgbGl2ZSBzdGF0ZSBvd25zIHRoZSBzZXNzaW9uIG5vd1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoVEFHLCBgdXBncmFkZSBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBBYm9ydGVkIChzdGFsZSBzZXNzaW9uIC8gc3JjIGNoYW5nZSkgb3IgZmFpbGVkOiBjbG9zZSB0aGUgd2FybS11cCBzZXNzaW9uIHNvIGl0IGNhbid0IGxlYWsuXG4gICAgICBpZiAobnM/Lm1ldGEpIHtcbiAgICAgICAgYXdhaXQgZmV0Y2goYCR7U0NIRU1FfWNsb3NlP2lkPSR7bnMubWV0YS5pZH1gLCB7IGtlZXBhbGl2ZTogdHJ1ZSB9KS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fdXBncmFkaW5nLmRlbGV0ZSh2aWRlbyk7XG4gICAgfVxuICB9XG5cbiAgLy8gT3BlbnMgYSBuYXRpdmUtcmVzb2x1dGlvbiBzZXNzaW9uIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGxpdmUgc3RhdGUgKG5vIGV2ZW50cywgbm8gY2FudmFzIHN3YXApLlxuICBwcml2YXRlIGFzeW5jIG9wZW5OYXRpdmUoc3JjOiBzdHJpbmcsIGZwczogbnVtYmVyKTogUHJvbWlzZTxWaWRlb1N0YXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke1NDSEVNRX1vcGVuP3NyYz0ke2VuY29kZVVSSUNvbXBvbmVudChzcmMpfSZmcHM9JHtmcHN9YCk7XG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3QgbWV0YSA9IChhd2FpdCByZXMuanNvbigpKSBhcyBWaWRlb01ldGE7XG4gICAgICByZXR1cm4geyBtZXRhIH0gYXMgVmlkZW9TdGF0ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVwb2ludCB0aGUgbGl2ZSBzdGF0ZSBhdCB0aGUgbmF0aXZlIHNlc3Npb24gYW5kIHBhaW50IHRoZSBwcmUtZGVjb2RlZCBmcmFtZSBpbiB0aGUgc2FtZSB0aWNrLlxuICBwcml2YXRlIGNvbW1pdFVwZ3JhZGUoc3RhdGU6IFZpZGVvU3RhdGUsIG5zOiBWaWRlb1N0YXRlLCBibTogSW1hZ2VCaXRtYXAsIGlkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm1ldGEgPSBucy5tZXRhITtcbiAgICBjb25zdCBvbGRJZCA9IHN0YXRlLm1ldGEhLmlkO1xuICAgIGNvbnN0IGN2ID0gc3RhdGUuY3Y7XG4gICAgLy8gQmFja2luZyBzdG9yZSByZXNpemUgd2lwZXMgdGhlIGNhbnZhcywgc28gZHJhdyB0aGUgcmVhZHkgZnJhbWUgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQuXG4gICAgY3Yud2lkdGggPSBubWV0YS5mcmFtZVdpZHRoO1xuICAgIGN2LmhlaWdodCA9IG5tZXRhLmZyYW1lSGVpZ2h0O1xuICAgIGNvbnN0IHIgPSBmaXRSZWN0KGJtLndpZHRoLCBibS5oZWlnaHQsIGN2LndpZHRoLCBjdi5oZWlnaHQsIHN0YXRlLm9iamVjdEZpdCk7XG4gICAgc3RhdGUuY3R4LmNsZWFyUmVjdCgwLCAwLCBjdi53aWR0aCwgY3YuaGVpZ2h0KTtcbiAgICBzdGF0ZS5jdHguZHJhd0ltYWdlKGJtLCByWzBdLCByWzFdLCByWzJdLCByWzNdKTtcbiAgICBzdGF0ZS5sYXN0RHJhd25JZHggPSBpZHg7XG4gICAgc3RhdGUubWV0YSA9IG5tZXRhO1xuICAgIC8vIFRoZSBwcmUtZGVjb2RlZCBmcmFtZSBub3cgbGl2ZXMgaW4gdGhlIG5hdGl2ZSBjYWNoZSB1bmRlciBubWV0YS5pZDsgZHJvcCB0aGUgb2xkIHNlc3Npb24gKyBpdHMgYml0bWFwcy5cbiAgICB0aGlzLmNhY2hlLnJlbGVhc2Uob2xkSWQsIHN0YXRlKTtcbiAgICB0aGlzLmNhY2hlLnByZWZldGNoKHN0YXRlLCBpZHggKyAxLCBBSEVBRCAtIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2FuKHJvb3Q6IEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFyb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyb290LnRhZ05hbWUgPT09IFwiVklERU9cIikge1xuICAgICAgdGhpcy5hdHRhY2gocm9vdCBhcyBIVE1MVmlkZW9FbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKHJvb3QucXVlcnlTZWxlY3RvckFsbCkge1xuICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKFwidmlkZW9cIikuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICB0aGlzLmF0dGFjaCh2KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFZpZGVvSG9vaygpOiB2b2lkIHtcbiAgaWYgKHdpbmRvdy5fX3B1cF92aWRlb19fKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG5ldyBWaWRlb0hvb2soKS5pbnN0YWxsKCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA5LzEwLlxuXG4vLyBUaGUgc3RlZ28gd3JhcHBlciBpcyBhbiBpZnJhbWUsIGJ1dCB0aGUgcGFnZSBtdXN0IG9ic2VydmUgYSBzdGFuZGFsb25lIGRvY3VtZW50OiBwYXJlbnQvZnJhbWVFbGVtZW50IGFyZSBmb3JnZWFibGUsIHRvcC9hbmNlc3Rvck9yaWdpbnMgYXJlIG5vdC5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsV2luZG93RmFjYWRlKCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCBcInBhcmVudFwiLCB7IGdldDogKCkgPT4gd2luZG93LCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csIFwiZnJhbWVFbGVtZW50XCIsIHsgZ2V0OiAoKSA9PiBudWxsLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzI3LlxuXG5pbXBvcnQgeyBpbnN0YWxsQXVkaW9TaGltIH0gZnJvbSBcIi4vYXVkaW8vc2hpbVwiO1xuaW1wb3J0IHsgaW5zdGFsbEhmSG9vayB9IGZyb20gXCIuL2h5cGVyZnJhbWVzXCI7XG5pbXBvcnQgeyBpbnN0YWxsVGlja0hvb2sgfSBmcm9tIFwiLi90aWNrXCI7XG5pbXBvcnQgeyBpbnN0YWxsVmlkZW9Ib29rIH0gZnJvbSBcIi4vdmlkZW8vaG9va1wiO1xuaW1wb3J0IHsgaW5zdGFsbFdpbmRvd0ZhY2FkZSB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5pZiAod2luZG93LnNlbGYgIT09IHdpbmRvdy50b3ApIHtcbiAgaW5zdGFsbEF1ZGlvU2hpbSgpO1xuICBpbnN0YWxsV2luZG93RmFjYWRlKCk7XG4gIGluc3RhbGxIZkhvb2soKTtcbiAgaW5zdGFsbFRpY2tIb29rKCk7XG4gIGluc3RhbGxWaWRlb0hvb2soKTtcbn1cbiJdfQ==
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2F1ZGlvL3NoaW0udHMiLCIuLi8uLi9zcmMvcnVudGltZS9oeXBlcmZyYW1lcy50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3RpY2sudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9vdmVybGF5LnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vdHlwZXMudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9kcml2ZXIudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9mcmFtZV9jYWNoZS50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL21lZGlhX3NoaW0udHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9zZXNzaW9uLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vaG9vay50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3dpbmRvdy50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3Nob290LnRzIl0sIm5hbWVzIjpbImZhaWwiLCJlbCIsIkF1ZGlvU2hpbSIsInVybCIsImluc3RhbGxBdWRpb1NoaW0iLCJOYXRpdmVBdWRpbyIsIkhBRSIsImluc3RhbGxIZkhvb2siLCJpbnN0YWxsVGlja0hvb2siLCJSRUFMX0RBVEUiLCJkYXRlT3JpZ2luIiwiY3Vyck1zIiwidGltZU9mZnNldCIsInJhZlF1ZXVlIiwidGltZXJzIiwibmV4dElkIiwidGljayIsIkZha2VEYXRlIiwiYXJncyIsImNiIiwiaWQiLCJyIiwiZGVsYXkiLCJkIiwic2FmZUludm9rZVRpbWVyIiwiZm4iLCJlIiwic2FmZUludm9rZVJhZiIsInRzIiwiYW5pbVN0YXRlIiwiZW5kQm91bmRhcnkiLCJhIiwidCIsInN5bmNBbmltYXRpb25zIiwibXMiLCJhbmltcyIsInN0YXRlIiwicmF0ZSIsInMiLCJjdCIsImN0MCIsInRhcmdldCIsImVuZCIsInByb2Nlc3MiLCJ0aW1lc3RhbXBNcyIsInJhZnMiLCJNSVJST1JfUFJPUFMiLCJjc3NDYXNlIiwiYyIsInN5bmNPdmVybGF5IiwidmlkZW8iLCJjdiIsImNzIiwicGFyZW50IiwicCIsInYiLCJzaG93blBpeGVscyIsInZyIiwiZHByIiwic2V0dXBDYW52YXMiLCJzbmFwIiwiYmFja2luZ1JlY3QiLCJibSIsImZpdCIsImJveFciLCJib3hIIiwiZml0UmVjdCIsImt4Iiwia3kiLCJzcmNXIiwic3JjSCIsImRzdFciLCJkc3RIIiwic2MiLCJrIiwid3MiLCJocyIsInNjMiIsIndzMiIsImhzMiIsIlNDSEVNRSIsIlRBRyIsInRpbWVSYW5nZXMiLCJmaXJlIiwidHlwZSIsImZpcmVGcmFtZUNhbGxiYWNrcyIsImNicyIsIm5vdyIsIm1ldGEiLCJwYWludCIsImhvb2siLCJpZHgiLCJmZXRjaGVkIiwiYWR2YW5jZSIsImR0IiwicHMiLCJGRVRDSF9USU1FT1VUX01TIiwiRnJhbWVDYWNoZSIsImV4aXN0aW5nIiwiY2FjaGVkIiwidyIsImgiLCJyZXMiLCJzZXR0bGUiLCJidWYiLCJmcm9tSWR4IiwiY291bnQiLCJtYXhJZHgiLCJpIiwibWluSWR4IiwiZmxvb3IiLCJpbnN0YWxsTWVkaWFTaGltIiwiSFZFIiwiTUVESUEiLCJtZGVzYyIsImN0RGVzYyIsInNyY0Rlc2MiLCJyYXRlRGVzYyIsIm9yaWdQYXVzZSIsIm9yaWdSVkZDIiwib3JpZ0NhbmNlbFJWRkMiLCJvcmlnUXVhbGl0eSIsIm9yaWdMb2FkIiwic2Vzc2lvbnMiLCJkZWYiLCJwcm9wIiwicGljayIsIm5hdGl2ZUdldCIsIm5zIiwiY3RHZXQiLCJjdFNldCIsImR1ciIsInJhdGVTZXQiLCJzcmNTZXQiLCJuZXdWaWRlb1N0YXRlIiwiZmFpbE9wZW4iLCJlcnJvciIsIm9wZW5TZXNzaW9uIiwic3JjIiwiYmlydGhNcyIsIm5hdGl2ZSIsImZwcyIsInEiLCJuYXRpdmVNZXRhIiwiVmlkZW9Ib29rIiwibXV0cyIsIm0iLCJuIiwicGVuZGluZyIsInNjdHgiLCJubWV0YSIsIm9sZElkIiwicm9vdCIsImluc3RhbGxWaWRlb0hvb2siLCJpbnN0YWxsV2luZG93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R0FBeUIsQ0FDbkMsTUFBQSxDQUFPLGVBR1gsSUFBSVQsQ0FBQUEsRUFBVSxDQUFFLE9BQUEsR0FDbEIsQ0NuT08sU0FBU1UsQ0FBQUEsRUFBc0IsQ0FDcEMsTUFBQSxDQUFPLGNBQUEsQ0FBZSxNQUFBLENBQVEsUUFBQSxDQUFVLENBQUUsR0FBQSxDQUFLLElBQU0sTUFBQSxDQUFRLFlBQUEsQ0FBYyxJQUFLLENBQUMsRUFDakYsTUFBQSxDQUFPLGNBQUEsQ0FBZSxNQUFBLENBQVEsY0FBQSxDQUFnQixDQUFFLEdBQUEsQ0FBSyxJQUFNLElBQUEsQ0FBTSxZQUFBLENBQWMsSUFBSyxDQUFDLEVBQ3ZGLENDRUksT0FBTyxJQUFBLEdBQVMsTUFBQSxDQUFPLEdBQUEsR0FDekJ0SixDQUFBQSxFQUFpQixDQUNqQnNKLENBQUFBLEdBQ0FuSixDQUFBQSxFQUFjLENBQ2RDLENBQUFBLEVBQWdCLENBQ2hCaUosQ0FBQUEsRUFBaUIsQ0FBQSIsImZpbGUiOiJzaG9vdC5nbG9iYWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtZCBjYXB0dXJlcyBubyBhdWRpbzsgYSBsb2FkaW5nIDxhdWRpbz4gd291bGQgaGl0IHRoZSBtZWRpYeKGknN0dWIgcmVkaXJlY3QsIHdoaWNoIHNlcnZlcyB2aWRlbyBzdHVicyBvbmx5LlxuXG5jb25zdCBTUkNfTk9UX1NVUFBPUlRFRCA9IDQ7IC8vIE1FRElBX0VSUl9TUkNfTk9UX1NVUFBPUlRFRFxuXG4vLyBNaXJyb3IgYSBmYWlsZWQgbmF0aXZlIGxvYWQgc28gZXJyb3ItaGFuZGxpbmcgcGFnZXMgcHJvY2VlZCBleGFjdGx5IGFzIHRoZXkgZG8gd2hlbiB0aGUgc291cmNlIGlzIGJyb2tlbi5cbmZ1bmN0aW9uIGZhaWwoZWw6IEhUTUxBdWRpb0VsZW1lbnQpOiB2b2lkIHtcbiAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgXCJlcnJvclwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogeyBjb2RlOiBTUkNfTk9UX1NVUFBPUlRFRCwgbWVzc2FnZTogXCJhdWRpbyBkaXNhYmxlZCBpbiBkZXRlcm1pbmlzdGljIG1vZGVcIiB9LFxuICAgIH0pO1xuICAgIGVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiZXJyb3JcIikpO1xuICB9KTtcbn1cblxuLy8gVGhlIG5hdGl2ZSBBdWRpbygpIGNvbnN0cnVjdG9yIGludm9rZXMgdGhlIGxvYWQgYWxnb3JpdGhtIGludGVybmFsbHksIHNvIG9ubHkgYSBjb25zdHJ1Y3RvciBzd2FwIGNhbiBwcmVlbXB0IHRoZSBmZXRjaC5cbmZ1bmN0aW9uIEF1ZGlvU2hpbSh1cmw/OiBzdHJpbmcpOiBIVE1MQXVkaW9FbGVtZW50IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYXVkaW9cIik7XG4gIGVsLnByZWxvYWQgPSBcIm5vbmVcIjtcbiAgaWYgKHVybCkge1xuICAgIGVsLnNyYyA9IHVybDtcbiAgICBmYWlsKGVsKTtcbiAgfVxuICByZXR1cm4gZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsQXVkaW9TaGltKCk6IHZvaWQge1xuICBjb25zdCBOYXRpdmVBdWRpbyA9IHdpbmRvdy5BdWRpbztcbiAgd2luZG93LkF1ZGlvID0gQXVkaW9TaGltIGFzIHVua25vd24gYXMgdHlwZW9mIEF1ZGlvO1xuICB3aW5kb3cuQXVkaW8ucHJvdG90eXBlID0gTmF0aXZlQXVkaW8ucHJvdG90eXBlO1xuXG4gIGNvbnN0IEhBRSA9IEhUTUxBdWRpb0VsZW1lbnQucHJvdG90eXBlO1xuICBIQUUubG9hZCA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MQXVkaW9FbGVtZW50KSB7XG4gICAgZmFpbCh0aGlzKTtcbiAgfTtcbiAgSEFFLnBsYXkgPSBmdW5jdGlvbiAodGhpczogSFRNTEF1ZGlvRWxlbWVudCkge1xuICAgIGZhaWwodGhpcyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oXCJhdWRpbyBkaXNhYmxlZCBpbiBkZXRlcm1pbmlzdGljIG1vZGVcIiwgXCJOb3RTdXBwb3J0ZWRFcnJvclwiKSk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzE2LlxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fSEZfTU9ERV9fPzogc3RyaW5nO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsSGZIb29rKCkge1xuICB3aW5kb3cuX19IRl9NT0RFX18gPSBcImV4cG9ydFwiO1xufVxuIiwiZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF90aWNrX18/OiB7IHByb2Nlc3M6IChtczogbnVtYmVyKSA9PiB2b2lkIH07XG4gIH1cbn1cblxuaW50ZXJmYWNlIFRpbWVyIHtcbiAgdHlwZTogXCJ0aW1lb3V0XCIgfCBcImludGVydmFsXCI7XG4gIGNiOiBUaW1lckhhbmRsZXI7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG5leHQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJhZkVudHJ5IHtcbiAgaWQ6IG51bWJlcjtcbiAgY2I6IEZyYW1lUmVxdWVzdENhbGxiYWNrO1xufVxuXG5pbnRlcmZhY2UgQW5pbUVudHJ5IHtcbiAgc3RhcnRNczogbnVtYmVyO1xuICBhZG9wdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFRpY2tIb29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3RpY2tfXykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IFJFQUxfREFURSA9IERhdGU7XG4gIGNvbnN0IGRhdGVPcmlnaW4gPSBSRUFMX0RBVEUubm93KCk7XG4gIGxldCBjdXJyTXMgPSAwO1xuICBsZXQgdGltZU9mZnNldCA9IDA7XG4gIGxldCByYWZRdWV1ZTogUmFmRW50cnlbXSA9IFtdO1xuICBjb25zdCB0aW1lcnM6IFJlY29yZDxudW1iZXIsIFRpbWVyIHwgdW5kZWZpbmVkPiA9IHt9O1xuICBsZXQgbmV4dElkID0gMTtcbiAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICB0aW1lT2Zmc2V0ICs9IDAuMDE7XG4gICAgcmV0dXJuIHRpbWVPZmZzZXQ7XG4gIH07XG5cbiAgZnVuY3Rpb24gRmFrZURhdGUodGhpczogdW5rbm93biwgLi4uYXJnczogdW5rbm93bltdKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZha2VEYXRlKSkge1xuICAgICAgcmV0dXJuIG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcykudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3MubGVuZ3RoXG4gICAgICA/IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoUkVBTF9EQVRFLCBbbnVsbCwgLi4uYXJnc10pKSgpXG4gICAgICA6IG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKSk7XG4gIH1cbiAgRmFrZURhdGUucHJvdG90eXBlID0gUkVBTF9EQVRFLnByb3RvdHlwZTtcbiAgRmFrZURhdGUubm93ID0gKCkgPT4gZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKTtcbiAgRmFrZURhdGUucGFyc2UgPSBSRUFMX0RBVEUucGFyc2U7XG4gIEZha2VEYXRlLlVUQyA9IFJFQUxfREFURS5VVEM7XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IERhdGU6IHVua25vd24gfSkuRGF0ZSA9IEZha2VEYXRlO1xuICBwZXJmb3JtYW5jZS5ub3cgPSAoKSA9PiBjdXJyTXMgKyB0aWNrKCk7XG5cbiAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IChjYikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgcmFmUXVldWUucHVzaCh7IGlkLCBjYiB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IChpZCkgPT4ge1xuICAgIHJhZlF1ZXVlID0gcmFmUXVldWUuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH07XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IHNldFRpbWVvdXQ6IHVua25vd24gfSkuc2V0VGltZW91dCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogXCJ0aW1lb3V0XCIsIGNiLCBkZWxheTogZGVsYXkgfHwgMCwgbmV4dDogY3Vyck1zICsgKGRlbGF5IHx8IDApIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gKGlkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZGVsZXRlIHRpbWVyc1tpZF07XG4gICAgfVxuICB9O1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBzZXRJbnRlcnZhbDogdW5rbm93biB9KS5zZXRJbnRlcnZhbCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgY29uc3QgZCA9IE1hdGgubWF4KGRlbGF5IHx8IDAsIDEpO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6IFwiaW50ZXJ2YWxcIiwgY2IsIGRlbGF5OiBkLCBuZXh0OiBjdXJyTXMgKyBkIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IChpZCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGRlbGV0ZSB0aW1lcnNbaWRdO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzYWZlSW52b2tlVGltZXIoZm46IFRpbWVySGFuZGxlcikge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGZuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIFN0cmluZyB0aW1lciBoYW5kbGVyIHJ1bnMgYXMgcGFnZSBzY3JpcHQgaW4gZ2xvYmFsIHNjb3BlIChIVE1MIHNwZWMpOyBGdW5jdGlvbiBjdG9yIG1hdGNoZXMgdGhhdCwgYXZvaWRzIGV2YWwuXG4gICAgICAgIG5ldyBGdW5jdGlvbihmbikoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIltUaWNrXSBlcnJvcjpcIiwgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB8fCBlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2FmZUludm9rZVJhZihjYjogRnJhbWVSZXF1ZXN0Q2FsbGJhY2ssIHRzOiBudW1iZXIpIHtcbiAgICB0cnkge1xuICAgICAgY2IodHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbVGlja10gZXJyb3I6XCIsIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykgfHwgZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW5pbVN0YXRlID0gbmV3IFdlYWtNYXA8QW5pbWF0aW9uLCBBbmltRW50cnk+KCk7XG4gIGZ1bmN0aW9uIGVuZEJvdW5kYXJ5KGE6IEFuaW1hdGlvbik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHQgPSBhLmVmZmVjdD8uZ2V0Q29tcHV0ZWRUaW1pbmcoKS5lbmRUaW1lO1xuICAgICAgcmV0dXJuIHR5cGVvZiB0ID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh0KSA/IHQgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBEZXRhY2hlZC9mb3JlaWduIGVmZmVjdHMgaGF2ZSBubyB0aW1pbmc7IHRyZWF0IGFzIHVuYm91bmRlZC5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIC8vIEFkb3B0IHJ1bm5pbmcgYW5pbWF0aW9ucyAocGF1c2UgKyBkcml2ZSBjdXJyZW50VGltZSBvZmYgdGhlIHZpcnR1YWwgY2xvY2spOiBhbiBpbmZpbml0ZSBjb21wb3NpdG9yIGFuaW1hdGlvbiBvdGhlcndpc2Uga2VlcHMgdml6IGZyZWUtcnVubmluZyBhdCBSRU5ERVJfRlBTLCBzdGFydmluZyBDRFAgZXZhbHMuXG4gIGZ1bmN0aW9uIHN5bmNBbmltYXRpb25zKG1zOiBudW1iZXIpIHtcbiAgICBsZXQgYW5pbXM6IEFuaW1hdGlvbltdO1xuICAgIHRyeSB7XG4gICAgICBhbmltcyA9IGRvY3VtZW50LmdldEFuaW1hdGlvbnMoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhIG9mIGFuaW1zKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IGEucGxheVN0YXRlO1xuICAgICAgaWYgKHN0YXRlID09PSBcImlkbGVcIiB8fCBzdGF0ZSA9PT0gXCJmaW5pc2hlZFwiKSB7XG4gICAgICAgIGFuaW1TdGF0ZS5kZWxldGUoYSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmF0ZSA9IHR5cGVvZiBhLnBsYXliYWNrUmF0ZSA9PT0gXCJudW1iZXJcIiA/IGEucGxheWJhY2tSYXRlIDogMTtcbiAgICAgIGlmIChyYXRlID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IHMgPSBhbmltU3RhdGUuZ2V0KGEpO1xuICAgICAgaWYgKCFzKSB7XG4gICAgICAgIGNvbnN0IGN0MCA9IHR5cGVvZiBhLmN1cnJlbnRUaW1lID09PSBcIm51bWJlclwiID8gYS5jdXJyZW50VGltZSA6IDA7XG4gICAgICAgIHMgPSB7IHN0YXJ0TXM6IG1zIC0gY3QwIC8gcmF0ZSwgYWRvcHRlZDogc3RhdGUgIT09IFwicGF1c2VkXCIgfTtcbiAgICAgICAgYW5pbVN0YXRlLnNldChhLCBzKTtcbiAgICAgICAgaWYgKHMuYWRvcHRlZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhLnBhdXNlKCk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBQYXVzZS1yZWplY3Rpbmcgc3RhdGVzIChlLmcuIG1pZC1jYW5jZWwpIHN0aWxsIGFjY2VwdCBjdXJyZW50VGltZSB3cml0ZXMgYmVsb3cuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzLmFkb3B0ZWQgJiYgc3RhdGUgIT09IFwicGF1c2VkXCIpIHtcbiAgICAgICAgY29uc3QgY3QgPSB0eXBlb2YgYS5jdXJyZW50VGltZSA9PT0gXCJudW1iZXJcIiA/IGEuY3VycmVudFRpbWUgOiAwO1xuICAgICAgICBzLnN0YXJ0TXMgPSBtcyAtIGN0IC8gcmF0ZTtcbiAgICAgICAgcy5hZG9wdGVkID0gdHJ1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhLnBhdXNlKCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIFNhbWUgYXMgYWRvcHRpb24gYWJvdmU6IGRyaXZlIGJ5IGN1cnJlbnRUaW1lIHJlZ2FyZGxlc3MuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghcy5hZG9wdGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFyZ2V0ID0gKG1zIC0gcy5zdGFydE1zKSAqIHJhdGU7XG4gICAgICBjb25zdCBlbmQgPSBlbmRCb3VuZGFyeShhKTtcbiAgICAgIC8vIGZpbmlzaCgpIHNlZWtzIHRvIHRoZSByYXRlLWFwcHJvcHJpYXRlIGJvdW5kYXJ5IGFuZCBhcHBsaWVzIGZpbGwgbW9kZTsgcGF1c2VkIGhvbGRzIHdvdWxkIG1pc3JlbmRlciBmaWxsOm5vbmUuXG4gICAgICBpZiAocmF0ZSA+IDAgPyBlbmQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgPj0gZW5kIDogdGFyZ2V0IDw9IDApIHtcbiAgICAgICAgYW5pbVN0YXRlLmRlbGV0ZShhKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhLmZpbmlzaCgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJbmZpbml0ZS1kdXJhdGlvbiByZXZlcnNlIG9yIGRldGFjaGVkIGVmZmVjdDogbGVhdmUgYXMtaXMuXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBhLmN1cnJlbnRUaW1lID0gdGFyZ2V0O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3ModGltZXN0YW1wTXM6IG51bWJlcikge1xuICAgIGN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICAgIHRpbWVPZmZzZXQgPSAwO1xuICAgIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXModGltZXJzKSkge1xuICAgICAgY29uc3QgdCA9IHRpbWVyc1tOdW1iZXIoaWQpXTtcbiAgICAgIGlmICghdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICh0Lm5leHQgPD0gY3Vyck1zKSB7XG4gICAgICAgIHNhZmVJbnZva2VUaW1lcih0LmNiKTtcbiAgICAgICAgaWYgKHQudHlwZSA9PT0gXCJ0aW1lb3V0XCIpIHtcbiAgICAgICAgICBkZWxldGUgdGltZXJzW051bWJlcihpZCldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHQubmV4dCArPSB0LmRlbGF5O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByYWZzID0gcmFmUXVldWUuc3BsaWNlKDApO1xuICAgIGZvciAoY29uc3QgciBvZiByYWZzKSB7XG4gICAgICBzYWZlSW52b2tlUmFmKHIuY2IsIGN1cnJNcyk7XG4gICAgfVxuICAgIHN5bmNBbmltYXRpb25zKGN1cnJNcyk7XG4gIH1cblxuICB3aW5kb3cuX19wdXBfdGlja19fID0geyBwcm9jZXNzIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG50eXBlIFZlYzQgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuY29uc3QgTUlSUk9SX1BST1BTID0gW1xuICBcImJvcmRlclJhZGl1c1wiLFxuICBcImJvcmRlclRvcExlZnRSYWRpdXNcIixcbiAgXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFxuICBcImJvcmRlckJvdHRvbUxlZnRSYWRpdXNcIixcbiAgXCJib3JkZXJCb3R0b21SaWdodFJhZGl1c1wiLFxuICBcInRyYW5zZm9ybVwiLFxuICBcInRyYW5zZm9ybU9yaWdpblwiLFxuICBcImZpbHRlclwiLFxuICBcImNsaXBQYXRoXCIsXG4gIFwiYm94U2hhZG93XCIsXG4gIFwib3BhY2l0eVwiLFxuICBcIm1peEJsZW5kTW9kZVwiLFxuICBcIm1hc2tcIixcbiAgXCJ6SW5kZXhcIixcbiAgXCJvYmplY3RGaXRcIixcbiAgXCJvYmplY3RQb3NpdGlvblwiLFxuICBcInBvc2l0aW9uXCIsXG4gIFwibGVmdFwiLFxuICBcInRvcFwiLFxuICBcInJpZ2h0XCIsXG4gIFwiYm90dG9tXCIsXG5dIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBjc3NDYXNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1tBLVpdL2csIChjKSA9PiBgLSR7Yy50b0xvd2VyQ2FzZSgpfWApO1xufVxuXG4vLyBUcmFjayB0aGUgb3ZlcmxheSB0byB0aGUgZWxlbWVudCdzIGxpdmUgYm94IHZpYSBDU1Mgb25seTsgYmFja2luZyBzdGF5cyBhdCBkZWNvZGUgcmVzIG9yIHpvb20gd2lwZXMgcmlzayBibGFuayBmcmFtZXMuXG5leHBvcnQgZnVuY3Rpb24gc3luY092ZXJsYXkodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGN2OiBIVE1MQ2FudmFzRWxlbWVudCk6IGJvb2xlYW4ge1xuICBjb25zdCBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKTtcbiAgLy8gb2Zmc2V0KiByZXNvbHZlIGFnYWluc3QgdGhlIG5lYXJlc3QgcG9zaXRpb25lZCBhbmNlc3RvcjsgdGhlIGNhbnZhcyBtdXN0IHNpdCBpbiB0aGF0IHNhbWUgYm94IHRvIGluaGVyaXQgdGhlIGVsZW1lbnQncyBjbGlwLlxuICBjb25zdCBwYXJlbnQgPSB2aWRlby5wYXJlbnROb2RlO1xuICBpZiAocGFyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KS5wb3NpdGlvbiA9PT0gXCJzdGF0aWNcIikge1xuICAgIHBhcmVudC5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgfVxuICBjdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgLy8gb2Zmc2V0KiBhcmUgcHJlLXRyYW5zZm9ybSBjb29yZHMgZnJvbSBvZmZzZXRQYXJlbnQncyBwYWRkaW5nIGVkZ2UgPSB0aGUgYWJzIGNvbnRhaW5pbmctYmxvY2sgb3JpZ2luOyBtYXAgZGlyZWN0LlxuICBjdi5zdHlsZS5sZWZ0ID0gYCR7dmlkZW8ub2Zmc2V0TGVmdH1weGA7XG4gIGN2LnN0eWxlLnRvcCA9IGAke3ZpZGVvLm9mZnNldFRvcH1weGA7XG4gIGN2LnN0eWxlLndpZHRoID0gYCR7dmlkZW8ub2Zmc2V0V2lkdGh9cHhgO1xuICBjdi5zdHlsZS5oZWlnaHQgPSBgJHt2aWRlby5vZmZzZXRIZWlnaHR9cHhgO1xuICBmb3IgKGNvbnN0IHAgb2YgTUlSUk9SX1BST1BTKSB7XG4gICAgaWYgKHAgPT09IFwicG9zaXRpb25cIiB8fCBwID09PSBcImxlZnRcIiB8fCBwID09PSBcInRvcFwiIHx8IHAgPT09IFwicmlnaHRcIiB8fCBwID09PSBcImJvdHRvbVwiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgdiA9IGNzLmdldFByb3BlcnR5VmFsdWUoY3NzQ2FzZShwKSk7XG4gICAgaWYgKHYpIHtcbiAgICAgIGN2LnN0eWxlLnNldFByb3BlcnR5KGNzc0Nhc2UocCksIHYpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIE9uLXNjcmVlbiAocG9zdC10cmFuc2Zvcm0pIHBpeGVsIHNpemUgb2YgYSB2aWRlbyBlbGVtZW50IChkcml2ZXMgdGhlIG5hdGl2ZSByZS1hdHRhY2ggdGhyZXNob2xkKS5cbmV4cG9ydCBmdW5jdGlvbiBzaG93blBpeGVscyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gIGNvbnN0IHZyID0gdmlkZW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IE1hdGgubWF4KDEsIE1hdGgucm91bmQodnIud2lkdGggKiBkcHIpKSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDEsIE1hdGgucm91bmQodnIuaGVpZ2h0ICogZHByKSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cENhbnZhcyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc25hcDogT2Zmc2NyZWVuQ2FudmFzIHwgdW5kZWZpbmVkKTogSFRNTENhbnZhc0VsZW1lbnQge1xuICBjb25zdCBjdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIGN2LmRhdGFzZXRbXCJwdXBWaWRlb092ZXJsYXlcIl0gPSBcIjFcIjtcbiAgY3Yuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiO1xuICB2aWRlby5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xuICBjb25zdCBwYXJlbnQgPSB2aWRlby5wYXJlbnROb2RlIHx8IGRvY3VtZW50LmJvZHk7XG4gIHBhcmVudC5pbnNlcnRCZWZvcmUoY3YsIHZpZGVvLm5leHRTaWJsaW5nKTtcbiAgc3luY092ZXJsYXkodmlkZW8sIGN2KTtcbiAgaWYgKHNuYXApIHtcbiAgICB0cnkge1xuICAgICAgY3YuZ2V0Q29udGV4dChcIjJkXCIpIS5kcmF3SW1hZ2Uoc25hcCwgMCwgMCwgY3Yud2lkdGgsIGN2LmhlaWdodCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG4gIHJldHVybiBjdjtcbn1cblxuLy8gZml0UmVjdCB3b3JrcyBpbiB0aGUgZWxlbWVudCdzIGJveCBzcGFjZTsgdGhlIGJhY2tpbmcgaXMgYW5hbW9ycGhpYyB0byB0aGF0IGJveC5cbmV4cG9ydCBmdW5jdGlvbiBiYWNraW5nUmVjdChibTogSW1hZ2VCaXRtYXAsIGN2OiBIVE1MQ2FudmFzRWxlbWVudCwgZml0OiBzdHJpbmcpOiBWZWM0IHtcbiAgY29uc3QgYm94VyA9IGN2Lm9mZnNldFdpZHRoIHx8IGN2LndpZHRoO1xuICBjb25zdCBib3hIID0gY3Yub2Zmc2V0SGVpZ2h0IHx8IGN2LmhlaWdodDtcbiAgY29uc3QgciA9IGZpdFJlY3QoYm0ud2lkdGgsIGJtLmhlaWdodCwgYm94VywgYm94SCwgZml0KTtcbiAgY29uc3Qga3ggPSBjdi53aWR0aCAvIGJveFc7XG4gIGNvbnN0IGt5ID0gY3YuaGVpZ2h0IC8gYm94SDtcbiAgcmV0dXJuIFtyWzBdICoga3gsIHJbMV0gKiBreSwgclsyXSAqIGt4LCByWzNdICoga3ldO1xufVxuXG4vLyBEcmF3IHJlY3QgZm9yIHRoZSBiaXRtYXAgd2l0aGluIHRoZSBjYW52YXMgcGVyIG9iamVjdEZpdC5cbmV4cG9ydCBmdW5jdGlvbiBmaXRSZWN0KHNyY1c6IG51bWJlciwgc3JjSDogbnVtYmVyLCBkc3RXOiBudW1iZXIsIGRzdEg6IG51bWJlciwgZml0OiBzdHJpbmcpOiBWZWM0IHtcbiAgaWYgKGZpdCA9PT0gXCJub25lXCIpIHtcbiAgICByZXR1cm4gWyhkc3RXIC0gc3JjVykgLyAyLCAoZHN0SCAtIHNyY0gpIC8gMiwgc3JjVywgc3JjSF07XG4gIH1cbiAgaWYgKGZpdCA9PT0gXCJjb250YWluXCIgfHwgZml0ID09PSBcInNjYWxlLWRvd25cIikge1xuICAgIGNvbnN0IHNjID0gTWF0aC5taW4oZHN0VyAvIHNyY1csIGRzdEggLyBzcmNIKTtcbiAgICBjb25zdCBrID0gZml0ID09PSBcInNjYWxlLWRvd25cIiA/IE1hdGgubWluKDEsIHNjKSA6IHNjO1xuICAgIGNvbnN0IHdzID0gayAqIHNyY1c7XG4gICAgY29uc3QgaHMgPSBrICogc3JjSDtcbiAgICByZXR1cm4gWyhkc3RXIC0gd3MpIC8gMiwgKGRzdEggLSBocykgLyAyLCB3cywgaHNdO1xuICB9XG4gIGlmIChmaXQgPT09IFwiY292ZXJcIikge1xuICAgIGNvbnN0IHNjMiA9IE1hdGgubWF4KGRzdFcgLyBzcmNXLCBkc3RIIC8gc3JjSCk7XG4gICAgY29uc3Qgd3MyID0gc2MyICogc3JjVztcbiAgICBjb25zdCBoczIgPSBzYzIgKiBzcmNIO1xuICAgIHJldHVybiBbKGRzdFcgLSB3czIpIC8gMiwgKGRzdEggLSBoczIpIC8gMiwgd3MyLCBoczJdO1xuICB9XG4gIHJldHVybiBbMCwgMCwgZHN0VywgZHN0SF07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5leHBvcnQgY29uc3QgU0NIRU1FID0gXCJwdXAtZnJhbWU6Ly9cIjtcbmV4cG9ydCBjb25zdCBBSEVBRCA9IDEwO1xuZXhwb3J0IGNvbnN0IFRBRyA9IFwiW1ZpZGVvSG9va11cIjtcblxuZXhwb3J0IGNvbnN0IE1FRElBX0VSUl9ORVRXT1JLID0gMjtcbmV4cG9ydCBjb25zdCBNRURJQV9FUlJfREVDT0RFID0gMztcbmV4cG9ydCBjb25zdCBIQVZFX05PVEhJTkcgPSAwO1xuZXhwb3J0IGNvbnN0IEhBVkVfTUVUQURBVEEgPSAxO1xuZXhwb3J0IGNvbnN0IEhBVkVfRU5PVUdIX0RBVEEgPSA0O1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfRU1QVFkgPSAwO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfSURMRSA9IDE7XG5leHBvcnQgY29uc3QgTkVUV09SS19MT0FESU5HID0gMjtcbmV4cG9ydCBjb25zdCBORVRXT1JLX05PX1NPVVJDRSA9IDM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9NZXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZyYW1lV2lkdGg6IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9GcmFtZU1ldGEge1xuICBwcmVzZW50YXRpb25UaW1lOiBudW1iZXI7XG4gIGV4cGVjdGVkRGlzcGxheVRpbWU6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG1lZGlhVGltZTogbnVtYmVyO1xuICBwcmVzZW50ZWRGcmFtZXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRnJhbWVDYiA9IChub3c6IG51bWJlciwgbWV0YTogVmlkZW9GcmFtZU1ldGEpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFFcnJvckxpa2Uge1xuICBjb2RlOiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0NhY2hlIHtcbiAgYml0bWFwczogTWFwPG51bWJlciwgSW1hZ2VCaXRtYXA+O1xuICBpbkZsaWdodDogTWFwPG51bWJlciwgUHJvbWlzZTxJbWFnZUJpdG1hcCB8IHVuZGVmaW5lZD4+O1xuICByZWFkZXJzOiBNYXA8VmlkZW9TdGF0ZSwgbnVtYmVyPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1N0YXRlIHtcbiAgbWV0YT86IFZpZGVvTWV0YTtcbiAgY3Y6IEhUTUxDYW52YXNFbGVtZW50O1xuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgcGF1c2VkOiBib29sZWFuO1xuICBjdXJyZW50VGltZTogbnVtYmVyO1xuICBlbmRlZDogYm9vbGVhbjtcbiAgbGFzdERyYXduSWR4OiBudW1iZXI7XG4gIGRlYWQ6IGJvb2xlYW47XG4gIG9iamVjdEZpdDogc3RyaW5nO1xuICByZWFkeVN0YXRlOiBudW1iZXI7XG4gIG5ldHdvcmtTdGF0ZTogbnVtYmVyO1xuICBzZWVraW5nOiBib29sZWFuO1xuICB3YWl0aW5nOiBib29sZWFuO1xuICBlcnJvcjogTWVkaWFFcnJvckxpa2UgfCB1bmRlZmluZWQ7XG4gIHByZXNlbnRlZEZyYW1lczogbnVtYmVyO1xuICBtYXhSZWFjaGVkOiBudW1iZXI7XG4gIHJ2ZmM6IE1hcDxudW1iZXIsIEZyYW1lQ2I+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVSYW5nZXNMaWtlIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIHN0YXJ0KGk6IG51bWJlcik6IG51bWJlcjtcbiAgZW5kKGk6IG51bWJlcik6IG51bWJlcjtcbn1cblxuLy8gV2hvbGUgY2xpcCBpcyBkZWNvZGUtb24tZGVtYW5kLCBzbyB0aGUgYXZhaWxhYmxlIHJhbmdlIGlzIGFsd2F5cyBbMCwgZW5kXSAob25lIFRpbWVSYW5nZXMgZW50cnkpLlxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVSYW5nZXMoZW5kOiBudW1iZXIpOiBUaW1lUmFuZ2VzTGlrZSB7XG4gIHJldHVybiB7IGxlbmd0aDogZW5kID4gMCA/IDEgOiAwLCBzdGFydDogKCkgPT4gMCwgZW5kOiAoKSA9PiBlbmQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcmUoZWw6IEV2ZW50VGFyZ2V0LCB0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQodHlwZSkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHR5cGUgeyBWaWRlb0hvb2sgfSBmcm9tIFwiLi9ob29rXCI7XG5pbXBvcnQgeyBiYWNraW5nUmVjdCwgc2hvd25QaXhlbHMsIHN5bmNPdmVybGF5IH0gZnJvbSBcIi4vb3ZlcmxheVwiO1xuaW1wb3J0IHsgQUhFQUQsIGZpcmUsIHR5cGUgVmlkZW9GcmFtZU1ldGEsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICBpZiAoc3RhdGUucnZmYy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNicyA9IFsuLi5zdGF0ZS5ydmZjLnZhbHVlcygpXTtcbiAgc3RhdGUucnZmYy5jbGVhcigpO1xuICBjb25zdCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3QgbWV0YTogVmlkZW9GcmFtZU1ldGEgPSB7XG4gICAgcHJlc2VudGF0aW9uVGltZTogbm93LFxuICAgIGV4cGVjdGVkRGlzcGxheVRpbWU6IG5vdyxcbiAgICB3aWR0aDogc3RhdGUubWV0YSEuZnJhbWVXaWR0aCxcbiAgICBoZWlnaHQ6IHN0YXRlLm1ldGEhLmZyYW1lSGVpZ2h0LFxuICAgIG1lZGlhVGltZTogc3RhdGUuY3VycmVudFRpbWUsXG4gICAgcHJlc2VudGVkRnJhbWVzOiBzdGF0ZS5wcmVzZW50ZWRGcmFtZXMsXG4gIH07XG4gIGZvciAoY29uc3QgY2Igb2YgY2JzKSB7XG4gICAgY2Iobm93LCBtZXRhKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwYWludChob29rOiBWaWRlb0hvb2ssIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSwgaWR4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYyA9IGhvb2suY2FjaGUuY2FjaGVPZihzdGF0ZS5tZXRhIS5pZCk7XG4gIGMucmVhZGVycy5zZXQoc3RhdGUsIGlkeCk7XG4gIGxldCBibSA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgaWYgKCFibSkge1xuICAgIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEIC0gMSk7XG4gICAgY29uc3QgZmV0Y2hlZCA9IGF3YWl0IGhvb2suY2FjaGUuZmV0Y2goc3RhdGUsIGlkeCk7XG4gICAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFmZXRjaGVkKSB7XG4gICAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUud2FpdGluZykge1xuICAgICAgICBzdGF0ZS53YWl0aW5nID0gdHJ1ZTtcbiAgICAgICAgZmlyZSh2aWRlbywgXCJ3YWl0aW5nXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBibSA9IGZldGNoZWQ7XG4gIH1cbiAgaWYgKHN0YXRlLndhaXRpbmcpIHtcbiAgICBzdGF0ZS53YWl0aW5nID0gZmFsc2U7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQpIHtcbiAgICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY3YgPSBzdGF0ZS5jdjtcbiAgY29uc3QgciA9IGJhY2tpbmdSZWN0KGJtLCBjdiwgc3RhdGUub2JqZWN0Rml0KTtcbiAgc3RhdGUuY3R4LmNsZWFyUmVjdCgwLCAwLCBjdi53aWR0aCwgY3YuaGVpZ2h0KTtcbiAgc3RhdGUuY3R4LmRyYXdJbWFnZShibSwgclswXSwgclsxXSwgclsyXSwgclszXSk7XG4gIHN0YXRlLmxhc3REcmF3bklkeCA9IGlkeDtcbiAgc3RhdGUucHJlc2VudGVkRnJhbWVzKys7XG4gIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZSk7XG4gIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEKTtcbiAgaG9vay5jYWNoZS5ldmljdChjKTtcbn1cblxuLy8gVmlydHVhbC10aW1lIHRpY2s6IHN5bmMgb3ZlcmxheXMsIGFkdmFuY2UgZWFjaCBob29rZWQgdmlkZW8ncyBjbG9jayAobG9vcC9lbmQpLCBwYWludCB0aGUgZHVlIGZyYW1lLlxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2UoaG9vazogVmlkZW9Ib29rLCB0aW1lc3RhbXBNczogbnVtYmVyKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IGR0ID0gTWF0aC5tYXgoMCwgdGltZXN0YW1wTXMgLSBob29rLmN1cnJNcykgLyAxMDAwO1xuICBob29rLmN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICBjb25zdCBwczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgIGNvbnN0IHZpZGVvID0gZWwgYXMgSFRNTFZpZGVvRWxlbWVudDtcbiAgICBjb25zdCBzdGF0ZSA9IGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLmRlYWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gVGhlIGVsZW1lbnQgb3V0Z3JldyB0aGUgZG93bnNjYWxlZCBkZWNvZGU6IHN3YXAgdG8gbmF0aXZlIGluIHRoZSBiYWNrZ3JvdW5kLCBrZWVwaW5nIHRoZSBvbGQgZnJhbWUgcGFpbnRpbmcuXG4gICAgaWYgKFxuICAgICAgc3RhdGUubWV0YSAmJlxuICAgICAgc3RhdGUubWV0YS5mcmFtZVdpZHRoIDwgc3RhdGUubWV0YS53aWR0aCAmJlxuICAgICAgIWhvb2suYXR0YWNoaW5nLmhhcyh2aWRlbykgJiZcbiAgICAgICFob29rLmlzVXBncmFkaW5nKHZpZGVvKSAmJlxuICAgICAgc2hvd25QaXhlbHModmlkZW8pLndpZHRoID4gc3RhdGUubWV0YS5mcmFtZVdpZHRoICogMS4wNVxuICAgICkge1xuICAgICAgaG9vay51cGdyYWRlKHZpZGVvLCBzdGF0ZSk7XG4gICAgfVxuICAgIC8vIFN0YWxsIHRoZSB0aWNrIHdoaWxlIGEgcmUtYXR0YWNoIG9wZW5zLCBvciB0aGUgcmVzaXplLXdpcGVkIGNhbnZhcyBpcyBjYXB0dXJlZCBhcyBibGFuayBmcmFtZXMuXG4gICAgaWYgKCFzdGF0ZS5tZXRhICYmIGhvb2suYXR0YWNoaW5nLmhhcyh2aWRlbykpIHtcbiAgICAgIHBzLnB1c2goaG9vay5hdHRhY2hpbmcuZ2V0KHZpZGVvKSEudGhlbigoKSA9PiB1bmRlZmluZWQpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHN5bmNPdmVybGF5KHZpZGVvLCBzdGF0ZS5jdikpIHtcbiAgICAgIHN0YXRlLmxhc3REcmF3bklkeCA9IC0xO1xuICAgIH1cbiAgICBpZiAoIXN0YXRlLm1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQmFja2luZyBzdG9yZSA9IGRlY29kZSByZXNvbHV0aW9uIGZvciB0aGUgc2Vzc2lvbidzIGxpZmUgKG9uZSBzZXQgcGVyIGF0dGFjaDsgQ1NTIHNjYWxlcyB0aGUgcmVzdCkuXG4gICAgaWYgKHN0YXRlLmN2LndpZHRoICE9PSBzdGF0ZS5tZXRhLmZyYW1lV2lkdGggfHwgc3RhdGUuY3YuaGVpZ2h0ICE9PSBzdGF0ZS5tZXRhLmZyYW1lSGVpZ2h0KSB7XG4gICAgICBzdGF0ZS5jdi53aWR0aCA9IHN0YXRlLm1ldGEuZnJhbWVXaWR0aDtcbiAgICAgIHN0YXRlLmN2LmhlaWdodCA9IHN0YXRlLm1ldGEuZnJhbWVIZWlnaHQ7XG4gICAgICBzdGF0ZS5sYXN0RHJhd25JZHggPSAtMTtcbiAgICB9XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICBzdGF0ZS5jdXJyZW50VGltZSArPSBkdCAqICh2aWRlby5wbGF5YmFja1JhdGUgfHwgMSk7XG4gICAgICBzdGF0ZS5tYXhSZWFjaGVkID0gTWF0aC5tYXgoc3RhdGUubWF4UmVhY2hlZCwgc3RhdGUuY3VycmVudFRpbWUpO1xuICAgICAgaWYgKHN0YXRlLmN1cnJlbnRUaW1lID49IHN0YXRlLm1ldGEuZHVyYXRpb24pIHtcbiAgICAgICAgaWYgKHZpZGVvLmxvb3ApIHtcbiAgICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLmN1cnJlbnRUaW1lICUgc3RhdGUubWV0YS5kdXJhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLm1ldGEuZHVyYXRpb247XG4gICAgICAgICAgc3RhdGUucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gICAgICAgICAgZmlyZSh2aWRlbywgXCJlbmRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlyZSh2aWRlbywgXCJ0aW1ldXBkYXRlXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpZHggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHN0YXRlLmN1cnJlbnRUaW1lICogc3RhdGUubWV0YS5mcHMpKTtcbiAgICBpZiAoaWR4ID09PSBzdGF0ZS5sYXN0RHJhd25JZHgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcHMucHVzaChwYWludChob29rLCB2aWRlbywgc3RhdGUsIGlkeCkpO1xuICB9KTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHBzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB7IFNDSEVNRSwgdHlwZSBWaWRlb0NhY2hlLCB0eXBlIFZpZGVvU3RhdGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5jb25zdCBGRVRDSF9USU1FT1VUX01TID0gOF8wMDA7IC8vIGJvdW5kIGEgc3R1Y2sgZGVjb2RlIChtYXRjaGVzIHRoZSBkZWNvZGVyIHJ3X3RpbWVvdXQpIHNvIHBhaW50cyBob2xkIGluc3RlYWQgb2YgZnJlZXppbmdcblxuLy8gUGVyLXNlc3Npb24gYml0bWFwIGNhY2hlOiBmZXRjaGVzIFJHQkEgZnJhbWVzIGZyb20gdGhlIGZyYW1lIHByb3RvY29sLCBkZWR1cGVzIGluLWZsaWdodCwgZXZpY3RzIGJlaGluZCByZWFkZXJzLlxuZXhwb3J0IGNsYXNzIEZyYW1lQ2FjaGUge1xuICBwcml2YXRlIF9jYWNoZXMgPSBuZXcgTWFwPHN0cmluZywgVmlkZW9DYWNoZT4oKTtcblxuICBjYWNoZU9mKGlkOiBzdHJpbmcpOiBWaWRlb0NhY2hlIHtcbiAgICBsZXQgYyA9IHRoaXMuX2NhY2hlcy5nZXQoaWQpO1xuICAgIGlmICghYykge1xuICAgICAgYyA9IHsgYml0bWFwczogbmV3IE1hcCgpLCBpbkZsaWdodDogbmV3IE1hcCgpLCByZWFkZXJzOiBuZXcgTWFwKCkgfTtcbiAgICAgIHRoaXMuX2NhY2hlcy5zZXQoaWQsIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIGZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBpZHg6IG51bWJlcik6IFByb21pc2U8SW1hZ2VCaXRtYXAgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgYyA9IHRoaXMuY2FjaGVPZihtZXRhLmlkKTtcbiAgICBjb25zdCBleGlzdGluZyA9IGMuaW5GbGlnaHQuZ2V0KGlkeCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlZCA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNhY2hlZCk7XG4gICAgfVxuICAgIGNvbnN0IHcgPSBtZXRhLmZyYW1lV2lkdGg7XG4gICAgY29uc3QgaCA9IG1ldGEuZnJhbWVIZWlnaHQ7XG4gICAgY29uc3QgcCA9IG5ldyBQcm9taXNlPEltYWdlQml0bWFwIHwgdW5kZWZpbmVkPigocmVzKSA9PiB7XG4gICAgICBjb25zdCBzZXR0bGUgPSAoYm06IEltYWdlQml0bWFwIHwgdW5kZWZpbmVkKTogdm9pZCA9PiB7XG4gICAgICAgIGMuaW5GbGlnaHQuZGVsZXRlKGlkeCk7XG4gICAgICAgIGlmIChibSkge1xuICAgICAgICAgIGMuYml0bWFwcy5zZXQoaWR4LCBibSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzKGJtKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZXEgPSBmZXRjaChgJHtTQ0hFTUV9ZnJhbWU/aWQ9JHttZXRhLmlkfSZpZHg9JHtpZHh9YClcbiAgICAgICAgLnRoZW4oKHIpID0+IChyLm9rID8gci5hcnJheUJ1ZmZlcigpIDogdW5kZWZpbmVkKSlcbiAgICAgICAgLnRoZW4oKGJ1ZikgPT5cbiAgICAgICAgICBidWYgJiYgYnVmLmJ5dGVMZW5ndGggPT09IHcgKiBoICogNFxuICAgICAgICAgICAgPyBjcmVhdGVJbWFnZUJpdG1hcChuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShidWYpLCB3LCBoKSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICApXG4gICAgICAgIC50aGVuKChibSkgPT4gc2V0dGxlKGJtKSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHNldHRsZSh1bmRlZmluZWQpKTtcbiAgICAgIC8vIEEgc3R1Y2sgZGVjb2RlIHdvdWxkIHBhcmsgdGhlIHBhaW50IGZvcmV2ZXI7IHRpbWUgb3V0IGFuZCBsZXQgdGhlIGNhbnZhcyBob2xkIGl0cyBsYXN0IGZyYW1lLlxuICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXR0bGUodW5kZWZpbmVkKSwgRkVUQ0hfVElNRU9VVF9NUyk7XG4gICAgICB2b2lkIHJlcTtcbiAgICB9KTtcbiAgICBjLmluRmxpZ2h0LnNldChpZHgsIHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgcHJlZmV0Y2goc3RhdGU6IFZpZGVvU3RhdGUsIGZyb21JZHg6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG1ldGEgPSBzdGF0ZS5tZXRhO1xuICAgIGlmICghbWV0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtYXhJZHggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKG1ldGEuZHVyYXRpb24gKiBtZXRhLmZwcykpO1xuICAgIGZvciAobGV0IGkgPSBmcm9tSWR4OyBpIDwgZnJvbUlkeCArIGNvdW50OyBpKyspIHtcbiAgICAgIGlmIChpIDwgMSB8fCBpID4gbWF4SWR4KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdm9pZCB0aGlzLmZldGNoKHN0YXRlLCBpKTtcbiAgICB9XG4gIH1cblxuICBldmljdChjOiBWaWRlb0NhY2hlKTogdm9pZCB7XG4gICAgbGV0IG1pbklkeCA9IEluZmluaXR5O1xuICAgIGMucmVhZGVycy5mb3JFYWNoKChpZHgpID0+IHtcbiAgICAgIGlmIChpZHggPCBtaW5JZHgpIHtcbiAgICAgICAgbWluSWR4ID0gaWR4O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG1pbklkeCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxvb3IgPSBtaW5JZHggLSAyO1xuICAgIGMuYml0bWFwcy5mb3JFYWNoKChibSwgaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4IDwgZmxvb3IpIHtcbiAgICAgICAgYm0uY2xvc2UoKTtcbiAgICAgICAgYy5iaXRtYXBzLmRlbGV0ZShpZHgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gRHJvcCBhIHJlYWRlcjsgd2hlbiB0aGUgbGFzdCBsZWF2ZXMsIGNsb3NlIGJpdG1hcHMgYW5kIHRlbGwgdGhlIHNlcnZlciB0byByZWxlYXNlIHRoZSBkZWNvZGUgc2Vzc2lvbi5cbiAgcmVsZWFzZShpZDogc3RyaW5nLCBzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGMgPSB0aGlzLl9jYWNoZXMuZ2V0KGlkKTtcbiAgICBpZiAoIWMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYy5yZWFkZXJzLmRlbGV0ZShzdGF0ZSk7XG4gICAgaWYgKGMucmVhZGVycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjLmJpdG1hcHMuZm9yRWFjaCgoYm0pID0+IHtcbiAgICAgIGJtLmNsb3NlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5fY2FjaGVzLmRlbGV0ZShpZCk7XG4gICAgZmV0Y2goYCR7U0NIRU1FfWNsb3NlP2lkPSR7aWR9YCwgeyBrZWVwYWxpdmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB0eXBlIHsgVmlkZW9Ib29rIH0gZnJvbSBcIi4vaG9va1wiO1xuaW1wb3J0IHsgdHlwZSBGcmFtZUNiLCBmaXJlLCB0aW1lUmFuZ2VzLCB0eXBlIFZpZGVvU3RhdGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBPdmVycmlkZSB0aGUgSFRNTE1lZGlhRWxlbWVudCBzdXJmYWNlIGZvciBob29rZWQgPHZpZGVvPjsgdW5ob29rZWQgZWxlbWVudHMgZmFsbCB0aHJvdWdoIHRvIG5hdGl2ZS5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsTWVkaWFTaGltKGhvb2s6IFZpZGVvSG9vayk6IHZvaWQge1xuICBjb25zdCBIVkUgPSBIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZTtcbiAgY29uc3QgTUVESUEgPSBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZTtcbiAgY29uc3QgbWRlc2MgPSAocDogc3RyaW5nKSA9PiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhWRSwgcCkgfHwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihNRURJQSwgcCk7XG4gIGNvbnN0IGN0RGVzYyA9IG1kZXNjKFwiY3VycmVudFRpbWVcIik7XG4gIGNvbnN0IHNyY0Rlc2MgPSBtZGVzYyhcInNyY1wiKTtcbiAgY29uc3QgcmF0ZURlc2MgPSBtZGVzYyhcInBsYXliYWNrUmF0ZVwiKTtcbiAgY29uc3Qgb3JpZ1BhdXNlID0gSFZFLnBhdXNlO1xuICBjb25zdCBvcmlnUlZGQyA9IEhWRS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrO1xuICBjb25zdCBvcmlnQ2FuY2VsUlZGQyA9IEhWRS5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2s7XG4gIGNvbnN0IG9yaWdRdWFsaXR5ID0gSFZFLmdldFZpZGVvUGxheWJhY2tRdWFsaXR5O1xuICBjb25zdCBvcmlnTG9hZCA9IEhWRS5sb2FkO1xuICBjb25zdCBzZXNzaW9ucyA9IGhvb2suc2Vzc2lvbnM7XG5cbiAgLy8gU2Vzc2lvbi1iYWNrZWQgcmVhZC1vbmx5IHByb3BlcnR5IHdpdGggbmF0aXZlIGZhbGxiYWNrIHdoZW4gdGhlIGVsZW1lbnQgaXNuJ3QgaG9va2VkLlxuICBjb25zdCBkZWYgPSAocHJvcDogc3RyaW5nLCBwaWNrOiAoczogVmlkZW9TdGF0ZSkgPT4gdW5rbm93bikgPT4ge1xuICAgIGNvbnN0IG5hdGl2ZUdldCA9IG1kZXNjKHByb3ApPy5nZXQ7XG4gICAgaWYgKCFuYXRpdmVHZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbWVkaWFfc2hpbTogbm8gbmF0aXZlIGdldHRlciBmb3IgJHtwcm9wfWApO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBwcm9wLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcyA/IHBpY2socykgOiBuYXRpdmVHZXQuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG4gIGRlZihcInBhdXNlZFwiLCAocykgPT4gcy5wYXVzZWQpO1xuICBkZWYoXCJlbmRlZFwiLCAocykgPT4gcy5lbmRlZCk7XG4gIGRlZihcInJlYWR5U3RhdGVcIiwgKHMpID0+IHMucmVhZHlTdGF0ZSk7XG4gIGRlZihcIm5ldHdvcmtTdGF0ZVwiLCAocykgPT4gcy5uZXR3b3JrU3RhdGUpO1xuICBkZWYoXCJlcnJvclwiLCAocykgPT4gcy5lcnJvciA/PyBudWxsKTtcbiAgZGVmKFwic2Vla2luZ1wiLCAocykgPT4gcy5zZWVraW5nKTtcbiAgZGVmKFwiYnVmZmVyZWRcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogMCkpO1xuICBkZWYoXCJzZWVrYWJsZVwiLCAocykgPT4gdGltZVJhbmdlcyhzLm1ldGEgPyBzLm1ldGEuZHVyYXRpb24gOiAwKSk7XG4gIGRlZihcInBsYXllZFwiLCAocykgPT4gdGltZVJhbmdlcyhzLm1heFJlYWNoZWQpKTtcblxuICBIVkUucGxheSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBob29rLmF0dGFjaCh0aGlzKS50aGVuKChucykgPT4ge1xuICAgICAgICBpZiAobnMpIHtcbiAgICAgICAgICBob29rLnJlc3VtZSh0aGlzLCBucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBob29rLnJlc3VtZSh0aGlzLCBzKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG4gIEhWRS5wYXVzZSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIG9yaWdQYXVzZS5jYWxsKHRoaXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXMucGF1c2VkKSB7XG4gICAgICBzLnBhdXNlZCA9IHRydWU7XG4gICAgICBmaXJlKHRoaXMsIFwicGF1c2VcIik7XG4gICAgfVxuICB9O1xuICBpZiAoY3REZXNjPy5nZXQgJiYgY3REZXNjLnNldCkge1xuICAgIGNvbnN0IGN0R2V0ID0gY3REZXNjLmdldDtcbiAgICBjb25zdCBjdFNldCA9IGN0RGVzYy5zZXQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgXCJjdXJyZW50VGltZVwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcyA/IHMuY3VycmVudFRpbWUgOiBjdEdldC5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIHNldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCB0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKCFzKSB7XG4gICAgICAgICAgY3RTZXQuY2FsbCh0aGlzLCB0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVyID0gcy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogdDtcbiAgICAgICAgcy5jdXJyZW50VGltZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHQsIGR1cikpO1xuICAgICAgICBzLm1heFJlYWNoZWQgPSBNYXRoLm1heChzLm1heFJlYWNoZWQsIHMuY3VycmVudFRpbWUpO1xuICAgICAgICBpZiAocy5jdXJyZW50VGltZSA8IGR1cikge1xuICAgICAgICAgIHMuZW5kZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBzLnNlZWtpbmcgPSB0cnVlO1xuICAgICAgICBmaXJlKHRoaXMsIFwic2Vla2luZ1wiKTtcbiAgICAgICAgcy5zZWVraW5nID0gZmFsc2U7XG4gICAgICAgIGZpcmUodGhpcywgXCJzZWVrZWRcIik7XG4gICAgICAgIGZpcmUodGhpcywgXCJ0aW1ldXBkYXRlXCIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBpZiAocmF0ZURlc2M/LnNldCkge1xuICAgIGNvbnN0IHJhdGVTZXQgPSByYXRlRGVzYy5zZXQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgXCJwbGF5YmFja1JhdGVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiByYXRlRGVzYy5nZXQsXG4gICAgICBzZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCwgcjogbnVtYmVyKSB7XG4gICAgICAgIHJhdGVTZXQuY2FsbCh0aGlzLCByKTtcbiAgICAgICAgaWYgKHNlc3Npb25zLmhhcyh0aGlzKSkge1xuICAgICAgICAgIGZpcmUodGhpcywgXCJyYXRlY2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIEhWRS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIGNiKTogbnVtYmVyIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgcmV0dXJuIG9yaWdSVkZDLmNhbGwodGhpcywgY2IpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9ICsraG9vay5ydmZjU2VxO1xuICAgIHMucnZmYy5zZXQoaWQsIGNiIGFzIEZyYW1lQ2IpO1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgSFZFLmNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCBpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIG9yaWdDYW5jZWxSVkZDLmNhbGwodGhpcywgaWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzLnJ2ZmMuZGVsZXRlKGlkKTtcbiAgfTtcbiAgSFZFLmdldFZpZGVvUGxheWJhY2tRdWFsaXR5ID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgcmV0dXJuIG9yaWdRdWFsaXR5LmNhbGwodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGlvblRpbWU6IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgdG90YWxWaWRlb0ZyYW1lczogcy5wcmVzZW50ZWRGcmFtZXMsXG4gICAgICBkcm9wcGVkVmlkZW9GcmFtZXM6IDAsXG4gICAgICBjb3JydXB0ZWRWaWRlb0ZyYW1lczogMCxcbiAgICB9IGFzIFZpZGVvUGxheWJhY2tRdWFsaXR5O1xuICB9O1xuICBIVkUubG9hZCA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKCFzZXNzaW9ucy5oYXModGhpcykpIHtcbiAgICAgIHJldHVybiBvcmlnTG9hZC5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICBob29rLmRldGFjaCh0aGlzKTtcbiAgICBmaXJlKHRoaXMsIFwiZW1wdGllZFwiKTtcbiAgICB0aGlzLl9fcHVwX2xhc3Rfc3JjX18gPSB1bmRlZmluZWQ7XG4gICAgaG9vay5hdHRhY2godGhpcyk7XG4gIH07XG4gIGlmIChzcmNEZXNjPy5zZXQpIHtcbiAgICBjb25zdCBzcmNTZXQgPSBzcmNEZXNjLnNldDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBcInNyY1wiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IHNyY0Rlc2MuZ2V0LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHY6IHN0cmluZykge1xuICAgICAgICBzcmNTZXQuY2FsbCh0aGlzLCB2KTtcbiAgICAgICAgaG9vay5vblNyY0NoYW5nZSh0aGlzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB0eXBlIHsgVmlkZW9Ib29rIH0gZnJvbSBcIi4vaG9va1wiO1xuaW1wb3J0IHsgc2hvd25QaXhlbHMgfSBmcm9tIFwiLi9vdmVybGF5XCI7XG5pbXBvcnQge1xuICBBSEVBRCxcbiAgZmlyZSxcbiAgSEFWRV9FTk9VR0hfREFUQSxcbiAgSEFWRV9NRVRBREFUQSxcbiAgSEFWRV9OT1RISU5HLFxuICBNRURJQV9FUlJfREVDT0RFLFxuICBNRURJQV9FUlJfTkVUV09SSyxcbiAgdHlwZSBNZWRpYUVycm9yTGlrZSxcbiAgTkVUV09SS19FTVBUWSxcbiAgTkVUV09SS19JRExFLFxuICBORVRXT1JLX0xPQURJTkcsXG4gIE5FVFdPUktfTk9fU09VUkNFLFxuICBTQ0hFTUUsXG4gIFRBRyxcbiAgdHlwZSBWaWRlb01ldGEsXG4gIHR5cGUgVmlkZW9TdGF0ZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdHRhY2hBcmdzIHtcbiAgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHN0YXRlOiBWaWRlb1N0YXRlO1xuICBzcmM6IHN0cmluZztcbiAgYmlydGhNczogbnVtYmVyO1xuICBuYXRpdmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdWaWRlb1N0YXRlKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBjdjogSFRNTENhbnZhc0VsZW1lbnQpOiBWaWRlb1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRhOiB1bmRlZmluZWQsXG4gICAgY3YsXG4gICAgY3R4OiBjdi5nZXRDb250ZXh0KFwiMmRcIikhLFxuICAgIHBhdXNlZDogISh2aWRlby5hdXRvcGxheSB8fCAhdmlkZW8ucGF1c2VkKSxcbiAgICBjdXJyZW50VGltZTogMCxcbiAgICBlbmRlZDogZmFsc2UsXG4gICAgbGFzdERyYXduSWR4OiAtMSxcbiAgICBkZWFkOiBmYWxzZSxcbiAgICBvYmplY3RGaXQ6IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKS5vYmplY3RGaXQgfHwgXCJmaWxsXCIsXG4gICAgcmVhZHlTdGF0ZTogSEFWRV9OT1RISU5HLFxuICAgIG5ldHdvcmtTdGF0ZTogTkVUV09SS19FTVBUWSxcbiAgICBzZWVraW5nOiBmYWxzZSxcbiAgICB3YWl0aW5nOiBmYWxzZSxcbiAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgIHByZXNlbnRlZEZyYW1lczogMCxcbiAgICBtYXhSZWFjaGVkOiAwLFxuICAgIHJ2ZmM6IG5ldyBNYXAoKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmFpbE9wZW4odmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlLCBlcnJvcjogTWVkaWFFcnJvckxpa2UpOiB1bmRlZmluZWQge1xuICBzdGF0ZS5kZWFkID0gdHJ1ZTtcbiAgc3RhdGUuZXJyb3IgPSBlcnJvcjtcbiAgc3RhdGUubmV0d29ya1N0YXRlID0gTkVUV09SS19OT19TT1VSQ0U7XG4gIGNvbnNvbGUuZXJyb3IoVEFHLCBgJHtlcnJvci5tZXNzYWdlfSBzcmM9JHt2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyY31gKTtcbiAgZmlyZSh2aWRlbywgXCJlcnJvclwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gT3BlbiB0aGUgZnJhbWUgc2VydmVyIHNlc3Npb24sIHRoZW4gZW1pdCB0aGUgSFRNTE1lZGlhRWxlbWVudCBsb2FkIHNlcXVlbmNlIChyZWFkeVN0YXRlL25ldHdvcmtTdGF0ZSArIGV2ZW50cykuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblNlc3Npb24oaG9vazogVmlkZW9Ib29rLCBhcmdzOiBBdHRhY2hBcmdzKTogUHJvbWlzZTxWaWRlb1N0YXRlIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHsgdmlkZW8sIHN0YXRlLCBzcmMsIGJpcnRoTXMsIG5hdGl2ZSB9ID0gYXJncztcbiAgY29uc3QgZnBzID0gTnVtYmVyLnBhcnNlSW50KHZpZGVvLmRhdGFzZXRbXCJwdXBGcHNcIl0gfHwgXCIzMFwiLCAxMCk7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTE9BRElORztcbiAgZmlyZSh2aWRlbywgXCJsb2Fkc3RhcnRcIik7XG4gIGxldCByZXM6IFJlc3BvbnNlO1xuICB0cnkge1xuICAgIC8vIERlY29kZSBhdCB0aGUgZWxlbWVudCdzIG9uLXNjcmVlbiBwaXhlbHMsIHNvIHN0YXRpYyBib3hlcyBvcGVuIGF0IGZpbmFsIHJlcyB3aXRob3V0IGEgcmVhdHRhY2ggcm91bmQuXG4gICAgY29uc3QgZHByID0gc2hvd25QaXhlbHModmlkZW8pO1xuICAgIGNvbnN0IHEgPSBuYXRpdmUgPyBcIlwiIDogYCZ3PSR7ZHByLndpZHRofSZoPSR7ZHByLmhlaWdodH0mZml0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHN0YXRlLm9iamVjdEZpdCl9YDtcbiAgICByZXMgPSBhd2FpdCBmZXRjaChgJHtTQ0hFTUV9b3Blbj9zcmM9JHtlbmNvZGVVUklDb21wb25lbnQoc3JjKX0mZnBzPSR7ZnBzfSR7cX1gKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWlsT3Blbih2aWRlbywgc3RhdGUsIHtcbiAgICAgIGNvZGU6IE1FRElBX0VSUl9ORVRXT1JLLFxuICAgICAgbWVzc2FnZTogYG9wZW4gZmFpbGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gLFxuICAgIH0pO1xuICB9XG4gIGlmIChob29rLnNlc3Npb25zLmdldCh2aWRlbykgIT09IHN0YXRlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXJlcy5vaykge1xuICAgIHJldHVybiBmYWlsT3Blbih2aWRlbywgc3RhdGUsIHtcbiAgICAgIGNvZGU6IE1FRElBX0VSUl9ERUNPREUsXG4gICAgICBtZXNzYWdlOiBgb3BlbiAke3Jlcy5zdGF0dXN9OiAke2F3YWl0IHJlcy50ZXh0KCl9YCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIFZpZGVvTWV0YTtcbiAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHN0YXRlLm1ldGEgPSBtZXRhO1xuICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLnBhdXNlZCA/IDAgOiBNYXRoLm1heCgwLCAoaG9vay5jdXJyTXMgLSBiaXJ0aE1zKSAvIDEwMDApO1xuICAvLyBUaGUgc3R1YiBtZWRpYSB1c3VhbGx5IGxvYWRzIG5hdGl2ZWx5IGZpcnN0OyBCbGluayB0aGVuIG93bnMgdGhlIHJlYWwgZXZlbnQgc2VxdWVuY2Ug4oCUIGRvbid0IGR1cGxpY2F0ZSBpdC5cbiAgY29uc3QgbmF0aXZlTWV0YSA9IHZpZGVvLnZpZGVvV2lkdGggPiAwO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlkZW8sIFwidmlkZW9XaWR0aFwiLCB7XG4gICAgdmFsdWU6IG1ldGEud2lkdGgsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCBcInZpZGVvSGVpZ2h0XCIsIHtcbiAgICB2YWx1ZTogbWV0YS5oZWlnaHQsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCBcImR1cmF0aW9uXCIsIHtcbiAgICB2YWx1ZTogbWV0YS5kdXJhdGlvbixcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBzdGF0ZS5yZWFkeVN0YXRlID0gSEFWRV9NRVRBREFUQTtcbiAgaWYgKCFuYXRpdmVNZXRhKSB7XG4gICAgZmlyZSh2aWRlbywgXCJkdXJhdGlvbmNoYW5nZVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcImxvYWRlZG1ldGFkYXRhXCIpO1xuICB9XG4gIHN0YXRlLnJlYWR5U3RhdGUgPSBIQVZFX0VOT1VHSF9EQVRBO1xuICBpZiAoIW5hdGl2ZU1ldGEpIHtcbiAgICBmaXJlKHZpZGVvLCBcImxvYWRlZGRhdGFcIik7XG4gICAgZmlyZSh2aWRlbywgXCJjYW5wbGF5XCIpO1xuICAgIGZpcmUodmlkZW8sIFwiY2FucGxheXRocm91Z2hcIik7XG4gIH1cbiAgc3RhdGUubmV0d29ya1N0YXRlID0gTkVUV09SS19JRExFO1xuICBpZiAoIW5hdGl2ZU1ldGEpIHtcbiAgICBmaXJlKHZpZGVvLCBcInN1c3BlbmRcIik7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQpIHtcbiAgICAgIGZpcmUodmlkZW8sIFwicGxheVwiKTtcbiAgICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgICB9XG4gIH1cbiAgLy8gTmF0aXZlIHJlLWF0dGFjaCByZXN1bWVzIG1pZC1jbGlwOyB3YXJtIG9ubHkgZnJlc2ggb3BlbnMsIG9yIHRoZSAxLi5BSEVBRCBwcmVmZXRjaCBmaWdodHMgdGhlIHBhaW50cycgcG9zaXRpb24uXG4gIGlmICghbmF0aXZlKSB7XG4gICAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgMSwgQUhFQUQpO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB7IGFkdmFuY2UgfSBmcm9tIFwiLi9kcml2ZXJcIjtcbmltcG9ydCB7IEZyYW1lQ2FjaGUgfSBmcm9tIFwiLi9mcmFtZV9jYWNoZVwiO1xuaW1wb3J0IHsgaW5zdGFsbE1lZGlhU2hpbSB9IGZyb20gXCIuL21lZGlhX3NoaW1cIjtcbmltcG9ydCB7IGJhY2tpbmdSZWN0LCBzZXR1cENhbnZhcyB9IGZyb20gXCIuL292ZXJsYXlcIjtcbmltcG9ydCB7IG5ld1ZpZGVvU3RhdGUsIG9wZW5TZXNzaW9uIH0gZnJvbSBcIi4vc2Vzc2lvblwiO1xuaW1wb3J0IHsgQUhFQUQsIGZpcmUsIFNDSEVNRSwgVEFHLCB0eXBlIFZpZGVvTWV0YSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF92aWRlb19fPzogeyBhZHZhbmNlOiAobXM6IG51bWJlcikgPT4gUHJvbWlzZTx1bmtub3duPjsgcmVhZHk6ICgpID0+IFByb21pc2U8dm9pZD4gfTtcbiAgfVxuICBpbnRlcmZhY2UgSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgX19wdXBfbGFzdF9zcmNfXz86IHN0cmluZztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9Ib29rIHtcbiAgcmVhZG9ubHkgc2Vzc2lvbnMgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBWaWRlb1N0YXRlPigpO1xuICByZWFkb25seSBhdHRhY2hpbmcgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+PigpO1xuICAvLyBFbnVtZXJhYmxlIG1pcnJvciBvZiBpbi1mbGlnaHQgb3BlbnMgKFdlYWtNYXAgaXNuJ3QgaXRlcmFibGUpIHNvIHJlYWR5KCkgY2FuIGF3YWl0IHRoZW0uXG4gIHJlYWRvbmx5IG9wZW5pbmcgPSBuZXcgU2V0PFByb21pc2U8dW5rbm93bj4+KCk7XG4gIHJlYWRvbmx5IGNhY2hlID0gbmV3IEZyYW1lQ2FjaGUoKTtcbiAgcnZmY1NlcSA9IDA7XG4gIGN1cnJNcyA9IDA7XG4gIHByaXZhdGUgX3VwZ3JhZGluZyA9IG5ldyBXZWFrU2V0PEhUTUxWaWRlb0VsZW1lbnQ+KCk7XG4gIHByaXZhdGUgX2xhc3RVcGdyYWRlQXQgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBudW1iZXI+KCk7XG4gIHByaXZhdGUgX2xhc3RTbmFwc2hvdCA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIE9mZnNjcmVlbkNhbnZhcz4oKTtcblxuICBpbnN0YWxsKCk6IHZvaWQge1xuICAgIGluc3RhbGxNZWRpYVNoaW0odGhpcyk7XG4gICAgdGhpcy5zY2FuKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dHMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbSBvZiBtdXRzKSB7XG4gICAgICAgIGlmIChtLnR5cGUgPT09IFwiYXR0cmlidXRlc1wiICYmIG0udGFyZ2V0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCAmJiBtLmF0dHJpYnV0ZU5hbWUgPT09IFwic3JjXCIpIHtcbiAgICAgICAgICB0aGlzLm9uU3JjQ2hhbmdlKG0udGFyZ2V0KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBtLmFkZGVkTm9kZXMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5zY2FuKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG0ucmVtb3ZlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkub2JzZXJ2ZShkb2N1bWVudCwgeyBzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogW1wic3JjXCJdIH0pO1xuICAgIHdpbmRvdy5fX3B1cF92aWRlb19fID0geyBhZHZhbmNlOiAobXMpID0+IGFkdmFuY2UodGhpcywgbXMpLCByZWFkeTogKCkgPT4gdGhpcy5yZWFkeSgpIH07XG4gIH1cblxuICBhdHRhY2godmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIG5hdGl2ZSA9IGZhbHNlKTogUHJvbWlzZTxWaWRlb1N0YXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLnNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGV4aXN0aW5nKTtcbiAgICB9XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMuYXR0YWNoaW5nLmdldCh2aWRlbyk7XG4gICAgaWYgKHBlbmRpbmcpIHtcbiAgICAgIHJldHVybiBwZW5kaW5nO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSB2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyYztcbiAgICBpZiAoIXNyYykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBpZiAoL14oYmxvYjp8ZGF0YTp8bWVkaWFzdHJlYW06KS9pLnRlc3Qoc3JjKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBjb25zdCBjdiA9IHNldHVwQ2FudmFzKHZpZGVvLCB0aGlzLl9sYXN0U25hcHNob3QuZ2V0KHZpZGVvKSk7XG4gICAgY29uc3Qgc3RhdGUgPSBuZXdWaWRlb1N0YXRlKHZpZGVvLCBjdik7XG4gICAgdGhpcy5zZXNzaW9ucy5zZXQodmlkZW8sIHN0YXRlKTtcbiAgICBjb25zdCBwID0gb3BlblNlc3Npb24odGhpcywgeyB2aWRlbywgc3RhdGUsIHNyYywgYmlydGhNczogdGhpcy5jdXJyTXMsIG5hdGl2ZSB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMuYXR0YWNoaW5nLmRlbGV0ZSh2aWRlbyk7XG4gICAgICB0aGlzLm9wZW5pbmcuZGVsZXRlKHApO1xuICAgIH0pO1xuICAgIHRoaXMuYXR0YWNoaW5nLnNldCh2aWRlbywgcCk7XG4gICAgdGhpcy5vcGVuaW5nLmFkZChwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIC8vIEF3YWl0IG9ubHkgdGhlIG9wZW5zIGluIGZsaWdodCByaWdodCBub3cg4oCUIG5ldmVyIGNoYXNlIG5ld2x5LXNwYXduZWQgb25lcywgb3IgYSByZXRyeWluZyBwYWdlIGxvb3BzIGZvcmV2ZXIuXG4gIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbLi4udGhpcy5vcGVuaW5nXSk7XG4gIH1cblxuICByZXN1bWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLnBhdXNlZCA9IGZhbHNlO1xuICAgIHN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgZmlyZSh2aWRlbywgXCJwbGF5XCIpO1xuICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgfVxuXG4gIGRldGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHN0YXRlLm1ldGEpIHtcbiAgICAgIGlmIChzdGF0ZS5sYXN0RHJhd25JZHggPj0gMCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNuYXAgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHN0YXRlLmN2LndpZHRoLCBzdGF0ZS5jdi5oZWlnaHQpO1xuICAgICAgICAgIGNvbnN0IHNjdHggPSBzbmFwLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgICAgICBpZiAoIXNjdHgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIDJkIGNvbnRleHRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNjdHguZHJhd0ltYWdlKHN0YXRlLmN2LCAwLCAwKTtcbiAgICAgICAgICB0aGlzLl9sYXN0U25hcHNob3Quc2V0KHZpZGVvLCBzbmFwKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgICAgdGhpcy5jYWNoZS5yZWxlYXNlKHN0YXRlLm1ldGEuaWQsIHN0YXRlKTsgLy8gc3RhbGUgYml0bWFwcyBtdXN0IG5vdCBzdXJ2aXZlIGEgZGV0YWNoOyBmcmVzaCBvcGVuIHJlLWtleXMgdG8gdGhlIG5ldyBzZXNzaW9uXG4gICAgfVxuICAgIHN0YXRlLmN2LnJlbW92ZSgpO1xuICAgIHRoaXMuc2Vzc2lvbnMuZGVsZXRlKHZpZGVvKTtcbiAgICB0aGlzLmF0dGFjaGluZy5kZWxldGUodmlkZW8pO1xuICB9XG5cbiAgb25TcmNDaGFuZ2UodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzcmMgPSB2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyYyB8fCBcIlwiO1xuICAgIGlmICh2aWRlby5fX3B1cF9sYXN0X3NyY19fID09PSBzcmMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmlkZW8uX19wdXBfbGFzdF9zcmNfXyA9IHNyYztcbiAgICBpZiAodGhpcy5zZXNzaW9ucy5oYXModmlkZW8pKSB7XG4gICAgICB0aGlzLmRldGFjaCh2aWRlbyk7XG4gICAgfVxuICAgIHRoaXMuYXR0YWNoKHZpZGVvKTtcbiAgfVxuXG4gIGlzVXBncmFkaW5nKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3VwZ3JhZGluZy5oYXModmlkZW8pO1xuICB9XG5cbiAgLy8gQmFja2dyb3VuZCBuYXRpdmUgc3dhcDogdGhlIG9sZCBjYW52YXMga2VlcHMgcGFpbnRpbmcgdW50aWwgdGhlIGZpcnN0IG5hdGl2ZSBmcmFtZSBpcyBkZWNvZGVkLCBzbyBubyBibGFuay9qdW1wLlxuICBhc3luYyB1cGdyYWRlKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1ldGEgPSBzdGF0ZS5tZXRhO1xuICAgIGlmICghbWV0YSB8fCBtZXRhLmZyYW1lV2lkdGggPj0gbWV0YS53aWR0aCB8fCB0aGlzLl91cGdyYWRpbmcuaGFzKHZpZGVvKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSB2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyYztcbiAgICBpZiAoIXNyYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBCYWNrIG9mZiBhZnRlciBhIGZhaWxlZCBvcGVuIHNvIGEgd2VkZ2VkIHNvdXJjZSBpc24ndCByZS1wcm9iZWQgZXZlcnkgdGljay5cbiAgICBpZiAocGVyZm9ybWFuY2Uubm93KCkgLSAodGhpcy5fbGFzdFVwZ3JhZGVBdC5nZXQodmlkZW8pID8/IDApIDwgMTAwMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9sYXN0VXBncmFkZUF0LnNldCh2aWRlbywgcGVyZm9ybWFuY2Uubm93KCkpO1xuICAgIHRoaXMuX3VwZ3JhZGluZy5hZGQodmlkZW8pO1xuICAgIGxldCBuczogVmlkZW9TdGF0ZSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgbnMgPSBhd2FpdCB0aGlzLm9wZW5OYXRpdmUoc3JjLCBtZXRhLmZwcyk7XG4gICAgICBpZiAoIW5zIHx8IHRoaXMuc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gRGVjb2RlIHRoZSBmcmFtZSB0aGUgY2xvY2sgaXMgYXQgcmlnaHQgbm93IHNvIHRoZSBzd2FwIGxhbmRzIG9uIG1hdGNoaW5nIGNvbnRlbnQuXG4gICAgICBjb25zdCBpZHggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHN0YXRlLmN1cnJlbnRUaW1lICogbWV0YS5mcHMpKTtcbiAgICAgIGNvbnN0IGJtID0gYXdhaXQgdGhpcy5jYWNoZS5mZXRjaChucywgaWR4KTtcbiAgICAgIGlmICghYm0gfHwgdGhpcy5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmNvbW1pdFVwZ3JhZGUoc3RhdGUsIG5zLCBibSwgaWR4KTtcbiAgICAgIG5zID0gdW5kZWZpbmVkOyAvLyBjb21taXR0ZWQ6IHRoZSBsaXZlIHN0YXRlIG93bnMgdGhlIHNlc3Npb24gbm93XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihUQUcsIGB1cGdyYWRlIGZhaWxlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIEFib3J0ZWQgKHN0YWxlIHNlc3Npb24gLyBzcmMgY2hhbmdlKSBvciBmYWlsZWQ6IGNsb3NlIHRoZSB3YXJtLXVwIHNlc3Npb24gc28gaXQgY2FuJ3QgbGVhay5cbiAgICAgIGlmIChucz8ubWV0YSkge1xuICAgICAgICBhd2FpdCBmZXRjaChgJHtTQ0hFTUV9Y2xvc2U/aWQ9JHtucy5tZXRhLmlkfWAsIHsga2VlcGFsaXZlOiB0cnVlIH0pLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICB0aGlzLl91cGdyYWRpbmcuZGVsZXRlKHZpZGVvKTtcbiAgICB9XG4gIH1cblxuICAvLyBPcGVucyBhIG5hdGl2ZS1yZXNvbHV0aW9uIHNlc3Npb24gd2l0aG91dCB0b3VjaGluZyB0aGUgbGl2ZSBzdGF0ZSAobm8gZXZlbnRzLCBubyBjYW52YXMgc3dhcCkuXG4gIHByaXZhdGUgYXN5bmMgb3Blbk5hdGl2ZShzcmM6IHN0cmluZywgZnBzOiBudW1iZXIpOiBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7U0NIRU1FfW9wZW4/c3JjPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNyYyl9JmZwcz0ke2Zwc31gKTtcbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBtZXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIFZpZGVvTWV0YTtcbiAgICAgIHJldHVybiB7IG1ldGEgfSBhcyBWaWRlb1N0YXRlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBSZXBvaW50IHRoZSBsaXZlIHN0YXRlIGF0IHRoZSBuYXRpdmUgc2Vzc2lvbiBhbmQgcGFpbnQgdGhlIHByZS1kZWNvZGVkIGZyYW1lIGluIHRoZSBzYW1lIHRpY2suXG4gIHByaXZhdGUgY29tbWl0VXBncmFkZShzdGF0ZTogVmlkZW9TdGF0ZSwgbnM6IFZpZGVvU3RhdGUsIGJtOiBJbWFnZUJpdG1hcCwgaWR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBubWV0YSA9IG5zLm1ldGEhO1xuICAgIGNvbnN0IG9sZElkID0gc3RhdGUubWV0YSEuaWQ7XG4gICAgY29uc3QgY3YgPSBzdGF0ZS5jdjtcbiAgICAvLyBCYWNraW5nIHN0b3JlIHJlc2l6ZSB3aXBlcyB0aGUgY2FudmFzLCBzbyBkcmF3IHRoZSByZWFkeSBmcmFtZSBpbW1lZGlhdGVseSBhZnRlciBpdC5cbiAgICBjdi53aWR0aCA9IG5tZXRhLmZyYW1lV2lkdGg7XG4gICAgY3YuaGVpZ2h0ID0gbm1ldGEuZnJhbWVIZWlnaHQ7XG4gICAgY29uc3QgciA9IGJhY2tpbmdSZWN0KGJtLCBjdiwgc3RhdGUub2JqZWN0Rml0KTtcbiAgICBzdGF0ZS5jdHguY2xlYXJSZWN0KDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICAgIHN0YXRlLmN0eC5kcmF3SW1hZ2UoYm0sIHJbMF0sIHJbMV0sIHJbMl0sIHJbM10pO1xuICAgIHN0YXRlLmxhc3REcmF3bklkeCA9IGlkeDtcbiAgICBzdGF0ZS5tZXRhID0gbm1ldGE7XG4gICAgLy8gVGhlIHByZS1kZWNvZGVkIGZyYW1lIG5vdyBsaXZlcyBpbiB0aGUgbmF0aXZlIGNhY2hlIHVuZGVyIG5tZXRhLmlkOyBkcm9wIHRoZSBvbGQgc2Vzc2lvbiArIGl0cyBiaXRtYXBzLlxuICAgIHRoaXMuY2FjaGUucmVsZWFzZShvbGRJZCwgc3RhdGUpO1xuICAgIHRoaXMuY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEIC0gMSk7XG4gIH1cblxuICBwcml2YXRlIHNjYW4ocm9vdDogRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJvb3QudGFnTmFtZSA9PT0gXCJWSURFT1wiKSB7XG4gICAgICB0aGlzLmF0dGFjaChyb290IGFzIEhUTUxWaWRlb0VsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAocm9vdC5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgIHRoaXMuYXR0YWNoKHYpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsVmlkZW9Ib29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3ZpZGVvX18pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV3IFZpZGVvSG9vaygpLmluc3RhbGwoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDkvMTAuXG5cbi8vIFRoZSBzdGVnbyB3cmFwcGVyIGlzIGFuIGlmcmFtZSwgYnV0IHRoZSBwYWdlIG11c3Qgb2JzZXJ2ZSBhIHN0YW5kYWxvbmUgZG9jdW1lbnQ6IHBhcmVudC9mcmFtZUVsZW1lbnQgYXJlIGZvcmdlYWJsZSwgdG9wL2FuY2VzdG9yT3JpZ2lucyBhcmUgbm90LlxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxXaW5kb3dGYWNhZGUoKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csIFwicGFyZW50XCIsIHsgZ2V0OiAoKSA9PiB3aW5kb3csIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgXCJmcmFtZUVsZW1lbnRcIiwgeyBnZXQ6ICgpID0+IG51bGwsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMjcuXG5cbmltcG9ydCB7IGluc3RhbGxBdWRpb1NoaW0gfSBmcm9tIFwiLi9hdWRpby9zaGltXCI7XG5pbXBvcnQgeyBpbnN0YWxsSGZIb29rIH0gZnJvbSBcIi4vaHlwZXJmcmFtZXNcIjtcbmltcG9ydCB7IGluc3RhbGxUaWNrSG9vayB9IGZyb20gXCIuL3RpY2tcIjtcbmltcG9ydCB7IGluc3RhbGxWaWRlb0hvb2sgfSBmcm9tIFwiLi92aWRlby9ob29rXCI7XG5pbXBvcnQgeyBpbnN0YWxsV2luZG93RmFjYWRlIH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmlmICh3aW5kb3cuc2VsZiAhPT0gd2luZG93LnRvcCkge1xuICBpbnN0YWxsQXVkaW9TaGltKCk7XG4gIGluc3RhbGxXaW5kb3dGYWNhZGUoKTtcbiAgaW5zdGFsbEhmSG9vaygpO1xuICBpbnN0YWxsVGlja0hvb2soKTtcbiAgaW5zdGFsbFZpZGVvSG9vaygpO1xufVxuIl19
|