pup-recorder 0.5.1 → 0.5.2

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 CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';require('source-map-support/register.js');var assert=require('assert'),promises=require('fs/promises'),path=require('path'),electron=require('electron'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('child_process'),require('tree-kill');var C=require('zod');require('events');var api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url'),crypto=require('crypto'),os=require('os');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var wo=Object.create;var pt=Object.defineProperty;var _o=Object.getOwnPropertyDescriptor;var De=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),ee=r=>{throw TypeError(r)};var $t=(r,e,t)=>e in r?pt(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var Gt=r=>[,,,wo(null)],zt=["class","method","getter","setter","accessor","field","value","get","set"],Fe=r=>r!==void 0&&typeof r!="function"?ee("Function expected"):r,go=(r,e,t,o,n)=>({kind:zt[r],name:e,metadata:o,addInitializer:i=>t._?ee("Already initialized"):n.push(Fe(i||null))}),mt=(r,e)=>$t(e,De("metadata"),r[3]),jt=(r,e,t,o)=>{for(var n=0,i=r[e>>1],s=i&&i.length;n<s;n++)i[n].call(t);return o},ae=(r,e,t,o,n,i)=>{var a,c,d,p,u=e&7,m=false,f=false,h=2,b=zt[u+5],S=r[h]||(r[h]=[]),P=((n=n.prototype),_o(n,t));for(var y=o.length-1;y>=0;y--)d=go(u,t,c={},r[3],S),(d.static=m,d.private=f,p=d.access={has:v=>t in v},(p.get=v=>v[t]),u>2),a=(0, o[y])(P[b],d),c._=1,Fe(a)&&(P[b]=a);return P&&pt(n,t,P),n},qt=(r,e,t)=>$t(r,e+"",t);var w=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&ee("Object expected");var o,n;t&&(o=e[De("asyncDispose")]),o===void 0&&(o=e[De("dispose")],t&&(n=o)),typeof o!="function"&&ee("Object not disposable"),n&&(o=function(){try{n.call(this);}catch(i){return Promise.reject(i)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},x=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,a,c,d){return d=Error(c),d.name="SuppressedError",d.error=s,d.suppressed=a,d},n=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),i=s=>{for(;s=r.pop();)try{var a=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(a).then(i,c=>(n(c),i()))}catch(c){n(c);}if(t)throw e};return i()};var yo=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,l=yo();function Yt(r,e,t){try{return e(process.env[r])}catch{return t}}function W(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}function Kt(r){return typeof r=="string"?r:String(r)}function lt(r){return e=>typeof e!="string"||e.trim()===""?[]:e.split(",").map(t=>r(t.trim()))}var Eo=module$1.createRequire(l),Xt=Yt("PUP_LOG_LEVEL",W,2),Ve=path.dirname(Eo.resolve("pup-recorder/package.json"));path.join(Ve,"dist","app.cjs");var Jt=path.join(Ve,"dist","runtime","audio_preload.cjs"),Qt=path.join(Ve,"dist","runtime","shoot_preload.cjs"),Zt=path.join(Ve,"dist","runtime","render_preload.cjs");var ht="<pup@debug>",wt="<pup@info>",_t="<pup@warn>",gt="<pup@error>",bt="<pup@fatal>";function ke(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var er,tr,rr,or,nr,te;nr=[ke],or=[ke],rr=[ke],tr=[ke],er=[ke];var $=class{constructor(e=Xt){this._level=e;jt(te,5,this);qt(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,o=e.info??console.info,n=e.warn??console.warn,i=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?n:void 0,error:s>=0?i:void 0};}debug(...e){this.impl?.debug?.(ht,...e);}info(...e){this.impl?.info?.(wt,...e);}warn(...e){this.impl?.warn?.(_t,...e);}error(...e){this.impl?.error?.(gt,...e);}fatal(...e){this.impl?.error?.(bt,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(ht)?this.debug(t.slice(ht.length+1)):t.startsWith(wt)?this.info(t.slice(wt.length+1)):t.startsWith(_t)?this.warn(t.slice(_t.length+1)):t.startsWith(gt)?this.error(t.slice(gt.length+1)):this.info(t);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",s=a=>{let c=a.toString();c.startsWith(bt)?i+=c.slice(bt.length+1):this.dispatch(c);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",a=>{i+=a.message,e.kill();}).once("close",(a,c)=>{a||c||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:a,signal:c,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",a=>{this.error(`${t}.unhandled`,a);}).on("uncaughtExceptionMonitor",a=>{this.error(`${t}.unhandled`,a);});})}};te=Gt(),ae(te,1,"debug",nr,$),ae(te,1,"info",or,$),ae(te,1,"warn",rr,$),ae(te,1,"error",tr,$),ae(te,1,"fatal",er,$),mt(te,$);var _=new $;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?_.error(t):r<=constants.AV_LOG_WARNING&&_.warn(t));});var Io="[Crash]";function sr(){let r=path.join(electron.app.getPath("appData"),"pup-recorder","crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),_.debug(Io,"set dump to",r);}function ce(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Ro="--pup-priv-args";function ar(){let r=process.argv,e=r.find(o=>o.startsWith(Ro));if(!e)return _.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),_.debug("pupargs",t),t}var Bo=1920,Mo=1080,No=30,Oo=5,Do=10,Lo=["out/html.mp4","out/html.webm"],cr=C__default.default.object({duration:C__default.default.number().describe("Duration in seconds"),width:C__default.default.number().describe("Video width"),height:C__default.default.number().describe("Video height"),fps:C__default.default.number().describe("Frames per second"),withAudio:C__default.default.boolean().describe("Capture and encode audio"),outFiles:C__default.default.array(C__default.default.string()).describe("Output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:C__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:C__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:C__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:C__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:C__default.default.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:C__default.default.number().describe("Window load timeout in seconds"),screenshots:C__default.default.array(C__default.default.number()).describe("Second marks to dump frame bitmaps as PNG")}),dr={width:Bo,height:Mo,fps:No,duration:Oo,outFiles:Lo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false,windowTimeout:Do,screenshots:[]};function Uo(r){if(r.includes("://")||r.startsWith("data:"))return r;let e;try{e=fs.realpathSync(r);}catch{e=path.resolve(r);}return `file://${e}`}async function pr(r){let e=cr.shape,t=dr;commander.program.name(r.name).argument("<source>","file://, http(s)://, data: URI, or filesystem path").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-S, --screenshots <seconds>",e.screenshots.description,"").option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <paths>",e.outFiles.description,t.outFiles.join(",")).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).option("--window-timeout <number>",e.windowTimeout.description,`${t.windowTimeout}`).action(async(o,n)=>{try{await r.run(Uo(o),{width:ce(W,t.width)(n.width),height:ce(W,t.height)(n.height),fps:ce(W,t.fps)(n.fps),duration:ce(W,t.duration)(n.duration),outFiles:lt(Kt)(n.outFile),withAudio:n.withAudio??t.withAudio,useInnerProxy:n.useInnerProxy??t.useInnerProxy,deterministic:n.deterministic??t.deterministic,disableGpu:n.disableGpu??t.disableGpu,disableHwCodec:n.disableHwCodec??t.disableHwCodec,windowTolerant:n.windowTolerant??t.windowTolerant,windowTimeout:ce(W,t.windowTimeout)(n.windowTimeout),screenshots:lt(W)(n.screenshots)});}catch(i){_.fatal(i);}}),await commander.program.parseAsync(ar());}var He=class{writeConsole(e,t){this.send({type:"console",level:e,message:t});}writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};function Ue(r){return new Promise(e=>setTimeout(e,r))}function re(r,e,t){return new Promise((o,n)=>{let i=setTimeout(()=>n(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,n).finally(()=>clearTimeout(i));})}function xt(r,e){return e?new Promise((t,o)=>{let n=()=>o(e.reason);e.addEventListener("abort",n,{once:true}),r.then(t,o).finally(()=>e.removeEventListener("abort",n));}):r}function We(r,e){let t,o=false;async function n(i){let s=await r(i);o||(t=setTimeout(()=>n(i+1),s??e));}return t=setTimeout(()=>n(0),e),()=>{o=true,clearTimeout(t);}}var $e=5e3;function Ge(r,e,t){return re(r.sendCommand(e,t),$e,`cdp.${e}`)}function yt(r,e){return re(Ge(r,"Runtime.evaluate",{expression:e}),$e,"evalIn")}function mr(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${$e}ms`));},$e),i=(s,a)=>{a==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),Ge(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function fr(r){await Ge(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function ze(r,e){await Ge(r,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var de=32;var lr="stego-tick";function hr(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
1
+ 'use strict';require('source-map-support/register.js');var assert=require('assert'),promises=require('fs/promises'),path=require('path'),electron=require('electron'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('child_process'),require('tree-kill');var C=require('zod');require('events');var api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url'),crypto=require('crypto'),os=require('os');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var wo=Object.create;var pt=Object.defineProperty;var _o=Object.getOwnPropertyDescriptor;var De=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),ee=r=>{throw TypeError(r)};var Wt=(r,e,t)=>e in r?pt(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var $t=r=>[,,,wo(null)],Gt=["class","method","getter","setter","accessor","field","value","get","set"],Fe=r=>r!==void 0&&typeof r!="function"?ee("Function expected"):r,go=(r,e,t,o,n)=>({kind:Gt[r],name:e,metadata:o,addInitializer:i=>t._?ee("Already initialized"):n.push(Fe(i||null))}),mt=(r,e)=>Wt(e,De("metadata"),r[3]),zt=(r,e,t,o)=>{for(var n=0,i=r[e>>1],s=i&&i.length;n<s;n++)i[n].call(t);return o},ae=(r,e,t,o,n,i)=>{var a,c,d,p,u=e&7,m=false,f=false,h=2,b=Gt[u+5],S=r[h]||(r[h]=[]),P=((n=n.prototype),_o(n,t));for(var y=o.length-1;y>=0;y--)d=go(u,t,c={},r[3],S),(d.static=m,d.private=f,p=d.access={has:v=>t in v},(p.get=v=>v[t]),u>2),a=(0, o[y])(P[b],d),c._=1,Fe(a)&&(P[b]=a);return P&&pt(n,t,P),n},jt=(r,e,t)=>Wt(r,e+"",t);var w=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&ee("Object expected");var o,n;t&&(o=e[De("asyncDispose")]),o===void 0&&(o=e[De("dispose")],t&&(n=o)),typeof o!="function"&&ee("Object not disposable"),n&&(o=function(){try{n.call(this);}catch(i){return Promise.reject(i)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},x=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,a,c,d){return d=Error(c),d.name="SuppressedError",d.error=s,d.suppressed=a,d},n=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),i=s=>{for(;s=r.pop();)try{var a=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(a).then(i,c=>(n(c),i()))}catch(c){n(c);}if(t)throw e};return i()};var yo=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,l=yo();function qt(r,e,t){try{return e(process.env[r])}catch{return t}}function W(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}function Yt(r){return typeof r=="string"?r:String(r)}function lt(r){return e=>typeof e!="string"||e.trim()===""?[]:e.split(",").map(t=>r(t.trim()))}var Eo=module$1.createRequire(l),Kt=qt("PUP_LOG_LEVEL",W,2),Ve=path.dirname(Eo.resolve("pup-recorder/package.json"));path.join(Ve,"dist","app.cjs");var Xt=path.join(Ve,"dist","runtime","audio_preload.cjs"),Qt=path.join(Ve,"dist","runtime","shoot_preload.cjs"),Jt=path.join(Ve,"dist","runtime","render_preload.cjs");var ht="<pup@debug>",wt="<pup@info>",_t="<pup@warn>",gt="<pup@error>",bt="<pup@fatal>";function ke(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var Zt,er,tr,rr,or,te;or=[ke],rr=[ke],tr=[ke],er=[ke],Zt=[ke];var $=class{constructor(e=Kt){this._level=e;zt(te,5,this);jt(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,o=e.info??console.info,n=e.warn??console.warn,i=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?n:void 0,error:s>=0?i:void 0};}debug(...e){this.impl?.debug?.(ht,...e);}info(...e){this.impl?.info?.(wt,...e);}warn(...e){this.impl?.warn?.(_t,...e);}error(...e){this.impl?.error?.(gt,...e);}fatal(...e){this.impl?.error?.(bt,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(ht)?this.debug(t.slice(ht.length+1)):t.startsWith(wt)?this.info(t.slice(wt.length+1)):t.startsWith(_t)?this.warn(t.slice(_t.length+1)):t.startsWith(gt)?this.error(t.slice(gt.length+1)):this.info(t);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",s=a=>{let c=a.toString();c.startsWith(bt)?i+=c.slice(bt.length+1):this.dispatch(c);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",a=>{i+=a.message,e.kill();}).once("close",(a,c)=>{a||c||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:a,signal:c,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",a=>{this.error(`${t}.unhandled`,a);}).on("uncaughtExceptionMonitor",a=>{this.error(`${t}.unhandled`,a);});})}};te=$t(),ae(te,1,"debug",or,$),ae(te,1,"info",rr,$),ae(te,1,"warn",tr,$),ae(te,1,"error",er,$),ae(te,1,"fatal",Zt,$),mt(te,$);var _=new $;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?_.error(t):r<=constants.AV_LOG_WARNING&&_.warn(t));});var Io="[Crash]";function ir(){let r=path.join(electron.app.getPath("appData"),"pup-recorder","crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),_.debug(Io,"set dump to",r);}function ce(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Ro="--pup-priv-args";function sr(){let r=process.argv,e=r.find(o=>o.startsWith(Ro));if(!e)return _.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),_.debug("pupargs",t),t}var Bo=1920,Mo=1080,No=30,Oo=5,Do=10,Lo=["out/html.mp4","out/html.webm"],ar=C__default.default.object({duration:C__default.default.number().describe("Duration in seconds"),width:C__default.default.number().describe("Video width"),height:C__default.default.number().describe("Video height"),fps:C__default.default.number().describe("Frames per second"),withAudio:C__default.default.boolean().describe("Capture and encode audio"),outFiles:C__default.default.array(C__default.default.string()).describe("Output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:C__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:C__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:C__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:C__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:C__default.default.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:C__default.default.number().describe("Window load timeout in seconds"),screenshots:C__default.default.array(C__default.default.number()).describe("Second marks to dump frame bitmaps as PNG")}),cr={width:Bo,height:Mo,fps:No,duration:Oo,outFiles:Lo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false,windowTimeout:Do,screenshots:[]};function Uo(r){if(r.includes("://")||r.startsWith("data:"))return r;let e;try{e=fs.realpathSync(r);}catch{e=path.resolve(r);}return `file://${e}`}async function ur(r){let e=ar.shape,t=cr;commander.program.name(r.name).argument("<source>","file://, http(s)://, data: URI, or filesystem path").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-S, --screenshots <seconds>",e.screenshots.description,"").option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <paths>",e.outFiles.description,t.outFiles.join(",")).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).option("--window-timeout <number>",e.windowTimeout.description,`${t.windowTimeout}`).action(async(o,n)=>{try{await r.run(Uo(o),{width:ce(W,t.width)(n.width),height:ce(W,t.height)(n.height),fps:ce(W,t.fps)(n.fps),duration:ce(W,t.duration)(n.duration),outFiles:lt(Yt)(n.outFile),withAudio:n.withAudio??t.withAudio,useInnerProxy:n.useInnerProxy??t.useInnerProxy,deterministic:n.deterministic??t.deterministic,disableGpu:n.disableGpu??t.disableGpu,disableHwCodec:n.disableHwCodec??t.disableHwCodec,windowTolerant:n.windowTolerant??t.windowTolerant,windowTimeout:ce(W,t.windowTimeout)(n.windowTimeout),screenshots:lt(W)(n.screenshots)});}catch(i){_.fatal(i);}}),await commander.program.parseAsync(sr());}var He=class{writeConsole(e,t){this.send({type:"console",level:e,message:t});}writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};function Ue(r){return new Promise(e=>setTimeout(e,r))}function re(r,e,t){return new Promise((o,n)=>{let i=setTimeout(()=>n(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,n).finally(()=>clearTimeout(i));})}function pr(r,e){return e?new Promise((t,o)=>{let n=()=>o(e.reason);e.addEventListener("abort",n,{once:true}),r.then(t,o).finally(()=>e.removeEventListener("abort",n));}):r}function We(r,e){let t,o=false;async function n(i){let s=await r(i);o||(t=setTimeout(()=>n(i+1),s??e));}return t=setTimeout(()=>n(0),e),()=>{o=true,clearTimeout(t);}}var $e=5e3;function Ge(r,e,t){return re(r.sendCommand(e,t),$e,`cdp.${e}`)}function xt(r,e){return re(Ge(r,"Runtime.evaluate",{expression:e}),$e,"evalIn")}function mr(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${$e}ms`));},$e),i=(s,a)=>{a==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),Ge(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function fr(r){await Ge(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function ze(r,e){await Ge(r,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var de=32;var lr="stego-tick";function hr(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="UTF-8">
@@ -92,6 +92,6 @@
92
92
  })();
93
93
  </script>
94
94
  </body>
95
- </html>`}function je(r,e){let{width:t,height:o}=e;if(t<de||o<2)return;let n=o-1,i=0;for(let s=0;s<de;s++){let a=(n*t+s)*4,d=(r[a]??0)>127?1:0;i=i<<1|d;}if(i=i>>>0,!(!Number.isFinite(i)||i<0||i>1e7))return i}function wr(r){return yt(r,"__pup_start_stego__()")}async function _r(r,e){await yt(r.debugger,`__pup_draw_stego__(${e})`);}async function gr(r){let e=new Promise(t=>r.ipc.once(lr,t));await re(e,5e3,"stego tick");}var vt="pup",Wo="pup-frame",br={standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:vt,privileges:br},{scheme:Wo,privileges:br}]);function yr(){electron.protocol.handle(vt,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),n=parseInt(e.searchParams.get("h")??"0",10),i=hr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function vr(r,e){let t=new URL(`${vt}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var ue=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,n)=>{this._queue.push({run:()=>{if(t?.aborted){n(t.reason),this.next();return}this._active++,e().then(i=>{this._active--,o(i),this.next();}).catch(i=>{this._active--,n(i),this.next();});},reject:n,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};var Ae="libvpx-vp9";async function G(r,e){var n=[];try{let t=new nodeAv.CodecContext;t.allocContext3(r.codec);let o=w(n,new DisposableStack);o.use(t);t.codecId=r.codec.id;t.width=r.width;t.height=r.height;t.pixelFormat=r.pixelFormat;t.timeBase=new nodeAv.Rational(1,r.fps);t.framerate=new nodeAv.Rational(r.fps,1);t.gopSize=r.fps*2;t.bitRate=BigInt(r.bitrate);t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);r.codecTag&&(t.codecTag=r.codecTag);r.colorRange!==void 0&&(t.colorRange=r.colorRange);r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[c,d]of Object.entries(r.options??{}))t.setOption(c,d);nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e);o.move();return t}catch(i){var s=i,a=true;}finally{x(n,s,a);}}function oe(r,e,t){var i=[];try{let o=new nodeAv.Frame;o.alloc();let n=w(i,new DisposableStack);n.use(o);o.format=t;o.width=r;o.height=e;nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer");n.move();return o}catch(s){var a=s,c=true;}finally{x(i,a,c);}}function B(){let r=new nodeAv.Packet;return r.alloc(),r}async function pe(r,e,t,o){for(;;){let n=await r.receivePacket(e);if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)break;try{nodeAv.FFmpegError.throwIfError(n,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e);}finally{e.unref();}}}var j=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=oe(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=oe(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=B();}async png(){var o=[];try{let e=w(o,new DisposableStack);let t=new nodeAv.CodecContext;t.allocContext3(this._png);e.use(t);nodeAv.FFmpegError.throwIfError(await t.open2(this._png),"pngDecoder.open2");e.move();return t}catch(n){var i=n,s=true;}finally{x(o,i,s);}}async decodePNG(e){var o=[];try{let t=w(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(n){var i=n,s=true;}finally{x(o,i,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var pn={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},qe=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=B(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){var s=[];try{let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=w(s,new DisposableStack);let n=new nodeAv.CodecContext;n.allocContext3(t);o.use(n);n.codecId=t.id;n.sampleFormat=e.outSampleFmt;n.sampleRate=e.outSampleRate;n.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO;n.timeBase=new nodeAv.Rational(1,e.outSampleRate);n.bitRate=BigInt(e.bitrate);e.globalHeader&&n.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);nodeAv.FFmpegError.throwIfError(await n.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(n);o.move();return new r(n,i,e.outSampleFmt)}catch(a){var c=a,d=true;}finally{x(s,c,d);}}setInputRate(e){var m=[];try{this._graph?.[Symbol.dispose]();this._inRate=e;let t=w(m,new DisposableStack);let o=new nodeAv.FilterGraph;o.alloc();t.use(o);let n=nodeAv.Filter.getByName("abuffer");let i=o.createFilter(n,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let s=nodeAv.Filter.getByName("abuffersink");let a=o.createFilter(s,"sink");if(!a)throw new Error("Failed to create abuffersink");let c=pn[this._outFmt]??"flt";let d=`aformat=sample_fmts=${c}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`;let p=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]);let u=nodeAv.FilterInOut.createList([{name:"out",filterCtx:a,padIdx:0}]);nodeAv.FFmpegError.throwIfError(o.parsePtr(d,u,p),"graph.parsePtr");nodeAv.FFmpegError.throwIfError(o.configSync(),"graph.config");t.move();this._graph=o;this._bufSrc=i;this._bufSink=a;}catch(f){var h=f,b=true;}finally{x(m,h,b);}}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)Number.isFinite(o[p])||(o[p]=0);let n=o.length>>1;let i=w(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:n,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(n);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drain(t);}catch(a){var c=a,d=true;}finally{x(s,c,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;try{nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),await this.drainCodec(e);}finally{this._filterFrame.unref();}}}drainCodec(e){return pe(this._ctx,this._pkt,this._stream,e)}};function Y(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let n=0;n<8;n++)o=o<<1|r[t*8+n];e[t]=o;}return e}var q=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let n=0;n<o-1;n++)this.bits.push(0);for(let n=o-1;n>=0;n--)this.bits.push(t>>n&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let n=0;n<o;n++)this.bits.push(e[t+n]);}},O=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var K=Buffer.from([0,0,0,1]);var St=16;var Ct=23,fe=32,le=33,Ye=34,Tr=39;function Ir(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,n=e&7;return {type:t,layerId:o,temporalId:n}}function Ft(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function D(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let n=t+o;if(n+2>r.length)break;let i=r.length;for(let c=n+2;c<r.length-2;c++)if(r[c]===0&&r[c+1]===0&&(r[c+2]===1||c+3<r.length&&r[c+2]===0&&r[c+3]===1)){i=c;break}let{type:s,layerId:a}=Ir(r[n],r[n+1]);e.push({type:s,layerId:a,data:r.subarray(n,i)}),t=i;}return e}function kt(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=Ir(t[0],t[1]),[i,s]=Ft(o,e,n);return t[0]=i,t[1]=s,t}function L(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function ne(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var mn=48,Mr=24,fn=2,ln=10,At=0,hn=1;function Rr(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Br(r,e){let t=L(r);return Rr(t,e+fn,0),Rr(t,e+ln,1),ne(t)}function Ke(r){let e=D(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===fe?n=Br(o.data,mn):o.type===le&&(n=Br(o.data,Mr)),t.push(K,n);}return Buffer.concat(t)}function wn(r,e,t){let o=L(r),n=new O(o),i=new q;for(let s=0;s<e;s++)i.bits.push(n.read(1));for(n.readUe(),i.ue(t);n.pos<n.bits.length;)i.bits.push(n.read(1));for(;i.bits.length%8!==0;)i.bits.push(0);return ne(Y(i.bits))}function _n(r,e,t,o){let n=L(r),i=new O(n),s=new q;for(let a=0;a<e;a++)s.bits.push(i.read(1));for(i.readUe(),i.readUe(),s.ue(t),s.ue(o);i.pos<i.bits.length;)s.bits.push(i.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return ne(Y(s.bits))}function Nr(r){let e=Mr+96;return wn(r,e,1)}function Or(r){return _n(r,16,1,1)}function gn(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function bn(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let n=0;n<=e;n++)r.read(1)||r.read(1);}else {let o=r.readUe(),n=r.readUe();for(let i=0;i<o;i++)r.readUe(),r.read(1);for(let i=0;i<n;i++)r.readUe(),r.read(1);}}function xn(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=St&&e<=Ct;o&&r.read(1),r.readUe();let n=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):bn(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(n===hn||n===At)&&(r.read(1)&&(r.readUe(),n===At&&r.readUe()),n===At&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),gn(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Dr(r,e,t){let o=L(r),n=new O(o),i=new O(o),s=xn(i,e,t),a=s%8===0?8:8-s%8,c=(s+a)/8,d=new q;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=St&&e<=Ct&&d.bits.push(n.read(1)),n.readUe(),d.ue(1);n.pos<s;)d.bits.push(n.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return ne(Buffer.concat([Y(d.bits),o.subarray(c)]))}function yn(r){let e=new O(L(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function vn(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function Pn(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function Lr(r,e,t){let o=yn(r);if(!o)return r;let n=new q;return vn(n,o),Pn(n,o,e,t),n.bits.push(1),n.align(0),ne(Y(n.bits))}function Vr(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let n=r.width,i=r.height,s=n*i;if(t.byteOffset%4===0&&o===n*4){let a=new Uint32Array(t.buffer,t.byteOffset,s);for(let c=0;c<s;c++)e[c]=a[c]>>>24;}else for(let a=0;a<i;a++){let c=a*o+3,d=a*n;for(let p=0;p<n;p++)e[d+p]=t[c+p*4];}}function En(r,e){return r===le?Nr(e):r===Ye?Or(e):e}function Hr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=D(e),n=D(t),i=new Map;for(let c of n){if(c.type===fe)continue;let d=i.get(c.type)??[];d.push(c),i.set(c.type,d);}let s=[],a=new Set;for(let c of o){let d=c.type===fe?Lr(c.data,r.width,r.height):c.data;if(s.push(K,d),!a.has(c.type)){a.add(c.type);for(let p of i.get(c.type)??[]){let u=En(c.type,p.data);s.push(K,kt(u,1));}}}return s.push(Sn()),Buffer.concat(s)}function Sn(){let[t,o]=Ft(Tr,0,1),n=[],i=(s,a)=>{for(let c=a-1;c>=0;c--)n.push(s>>c&1);};for(i(0,1),i(0,3),i(0,3),i(0,9),i(255,9),i(0,1),i(0,1),i(1,1);n.length%8!==0;)i(0,1);return Buffer.concat([K,Buffer.from([t,o]),Buffer.from([165,4]),Y(n),Buffer.from([128])])}function Ur(r,e,t){let o=[];for(let n of r)o.push(K,n.data);for(let n of e)if(n.type<fe){let i=Dr(n.data,n.type,t);o.push(K,kt(i,1));}return Buffer.concat(o)}var Xe=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:n,alphaPkt:i}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,n,"base")),this._alphaQueue.push(...await this.receiveAll(o,i,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let n=[];for(;;){let i=await e.receivePacket(t);if(i>=0){n.push(this.snapshot(t)),t.unref();continue}if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)return n;nodeAv.FFmpegError.throwIfError(i,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:n,baseCtx:i,stream:s,hevcCfg:a}=this._s,c=Ur(D(e.data),D(t.data),a);n.data=Ke(c),n.pts=e.pts,n.dts=e.dts,n.duration=e.duration===0n?1n:e.duration,n.flags=e.flags,n.streamIndex=s.index,n.rescaleTs(i.timeBase,s.timeBase),await o.writePacket(n),n.unref();}};function X(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function An(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let n=0;n<e;n++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let n=e;n<8;n++)r.read(2);for(let n=0;n<e;n++)t[n]&&r.read(88),o[n]&&r.read(8);}function Tn(r){let e=new O(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&X("sps_max_sub_layers_minus1",t,"0"),e.read(1),An(e,t),e.readUe();let o=e.readUe();o===3&&X("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let n=e.readUe()+4,s=e.read(1)?t+1:1;for(let m=0;m<s;m++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&X("scaling_list_enabled_flag",1,"0"),e.read(1);let a=e.read(1)===1;e.read(1)&&X("pcm_enabled_flag",1,"0");let c=e.readUe();c>1&&X("num_short_term_ref_pic_sets",c,"\u22641");let d=0;if(c===1){let m=e.readUe(),f=e.readUe();d=m+f;for(let h=0;h<m;h++)e.readUe(),e.read(1);for(let h=0;h<f;h++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&X("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:n,saoEnabled:a,numShortTermRefPicSets:c,numDeltaPocsSet0:d,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function In(r){let e=new O(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&X("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&X("tiles_enabled_flag",1,"0"),e.read(1);let n=e.read(1)===1,i=e.read(1),s=false;return i&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:n&&!s}}function Wr(r){let e=D(r),t=e.find(s=>s.type===le),o=e.find(s=>s.type===Ye);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let n=Tn(L(t.data)),i=In(L(o.data));return {...n,...i}}var Je=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new Xe({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){var F=[];try{let{width:t,height:o,fps:n,bitrate:i,muxer:s}=e;let a=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!a)throw new Error("hevc_nvenc encoder not found");let c={preset:"p4",bf:"0",tier:"main"};let d={codec:a,width:t,height:o,fps:n,bitrate:i,options:c};let p=w(F,new DisposableStack);let u=p.use(await G({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"));let m=p.use(await G({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"));if(!u.extraData||!m.extraData)throw new Error("nvenc: codec extradata missing");let f=Wr(u.extraData);let h=s.addStream(u,"hvc1");let b=Hr({baseExtradata:u.extraData,alphaExtradata:m.extraData,width:t,height:o});h.codecpar.extradata=Ke(b);let g=t*o;let S=(t+1>>1)*(o+1>>1);let P=Buffer.alloc(g+S*2);P.fill(128,g);let y=p.use(B());let v=p.use(B());let E=p.use(oe(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:m,basePkt:y,alphaPkt:v,stream:h,alphaSwFrame:E,alphaBuf:P,hevcCfg:f})}catch(k){var A=k,Z=true;}finally{x(F,A,Z);}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,a=this._pts++;Vr(e,s),nodeAv.FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(i.fromBuffer(s),"alphaSw.fromBuffer"),i.pts=a,i.duration=1n,e.pts=a,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await n.sendFrame(i),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:n,alphaSwFrame:i}=this._s;e.free(),t.free(),i.free(),n.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var he=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var m=[];try{let{codecName:t,codecTag:o,codecOpts:n,muxer:i,...s}=e;let a=nodeAv.Codec.findEncoderByName(t);if(!a)throw new Error(`Video encoder not found: ${t}`);let c=w(m,new DisposableStack);let d=c.use(await G({codec:a,...s,codecTag:o,options:n},"videoCtx.open2"));let p=c.use(B());let u=i.addStream(d,o);c.move();return new r(d,p,u)}catch(f){var h=f,b=true;}finally{x(m,h,b);}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return pe(this._ctx,this._pkt,this._stream,e)}};var Qe=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var f=[];try{let{width:t,height:o,fps:n,hw:i,bitrate:s,muxer:a}=e;let c=i.getEncoderCodec("hevc");if(!c)throw new Error("hevc_videotoolbox encoder not found");let d=await G({codec:c,width:t,height:o,fps:n,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2");let p=w(f,new DisposableStack);p.use(d);let u=p.use(B());let m=a.addStream(d,"hvc1");p.move();return new r(d,u,m)}catch(h){var b=h,g=true;}finally{x(f,b,g);}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return pe(this._ctx,this._pkt,this._stream,e)}};var Ze="[Encoder]";async function Gr(r,e){var f=[];try{let{width:t,height:o,fps:n,bitrate:i=8e6,disableHwCodec:s=!1,sharedHw:a}=r;let c=a??(s?void 0:api.HardwareContext.auto()??void 0);let d=!a&&!!c;try{if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return _.debug(Ze,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Qe.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d};if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return _.debug(Ze,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Je.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d}}catch(S){_.warn(Ze,"Hardware codec session limits reached, use software encoder",S),d&&c?.dispose();}_.debug(Ze,"using software libx265 HEVC alpha encoder");let p=w(f,new DisposableStack);let u=p.use(await he.create({width:t,height:o,fps:n,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"fast","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}));let m=p.use(await j.create(t,o));p.move();return {video:u,codec:m,ownsHw:!1}}catch(h){var b=h,g=true;}finally{x(f,b,g);}}var we=class{_ctx;_opened=false;_disposed=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){var t=[];try{if(this._opened)return;nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput");let e=w(t,nodeAv.Dictionary.fromObject({movflags:"+faststart"}));nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(e),"writeHeader");this._opened=!0;}catch(o){var n=o,i=true;}finally{x(t,n,i);}}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(!this._disposed){this._disposed=true;try{if(this._opened){this._opened=!1;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput();}}}finally{await this._ctx[Symbol.asyncDispose]();}}}};var Re=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){var s=[];try{let t=w(s,new AsyncDisposableStack,!0);let o=t.use(new we(e.outFile));let n=e.kind==="mp4"?await r.mp4Video(e,o):await r.webmVideo(e,o);n.video&&t.use(n.video);n.hwVideo&&t.use(n.hwVideo);n.codec&&t.use(n.codec);n.ownsHw&&n.hw&&t.use(n.hw);let i=e.withAudio?await r.audioFor(e,o):void 0;i&&t.use(i);await o.open();t.move();return new r({muxer:o,...n,audio:i,opts:e})}catch(a){var c=a,d=true;}finally{var p=x(s,c,d);p&&await p;}}static mp4Video(e,t){let{width:o,height:n,fps:i,disableHwCodec:s,sharedHw:a}=e;return Gr({width:o,height:n,fps:i,disableHwCodec:s,sharedHw:a},t)}static async webmVideo(e,t){let{width:o,height:n,fps:i}=e;return {video:await he.create({width:o,height:n,fps:i,codecName:Ae,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await j.create(o,n),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return qe.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:n}=this._s;await o?.flush(n),e?await e.flush(n):await t.flush(n);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:n,codec:i,hw:s,ownsHw:a}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),n?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),a&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:n}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,n);}};var _e=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){var h=[];try{let{width:t,height:o,fps:n,outFiles:i,withAudio:s=!1,disableHwCodec:a=!1}=e;if(i.length===0)throw new Error("outFiles must contain at least one path");let c=i.map(y=>Re.kindFromPath(y));let d=!a&&c.includes("mp4");let p=w(h,new AsyncDisposableStack,!0);let u=d?api.HardwareContext.auto()??void 0:void 0;u&&p.use(u);let m=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA;let f=[];for(let y=0;y<i.length;y++){let v=await Re.create({outFile:i[y],kind:c[y],width:t,height:o,fps:n,withAudio:s,disableHwCodec:a,sharedHw:c[y]==="mp4"&&m?u:void 0});p.use(v),f.push(v);}p.move();return new r({sinks:f,sharedHw:u,limiter:new ue(1),outFiles:i,opts:e})}catch(b){var g=b,S=true;}finally{var P=x(h,g,S);P&&await P;}}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=w(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(a=>a.encodeBGRA(t)));}catch(n){var i=n,s=true;}finally{x(o,i,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await j.create(t,o);let n=await this._s.pngCodec.decodePNG(e);for(let i of this._s.sinks)await i.encodeDecodedFrame(n);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){var n=[];try{let t=w(n,new DisposableStack);let o=t.use(oe(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA));nodeAv.FFmpegError.throwIfError(o.fromBuffer(e),"bgraFrame.fromBuffer");t.move();return o}catch(i){var s=i,a=true;}finally{x(n,s,a);}}};function et(r,e){return r.width===e.width&&r.height===e.height}function si(r,e){return r.readUInt8(e)>>3|r.readUInt8(e+1)>>3<<5|r.readUInt8(e+2)>>3<<10|r.readUInt8(e+3)>>3<<15}function ai(r,e,t){let o=Math.max(1,Math.floor(e/32)),n=Math.max(1,Math.floor(t/32)),i=new Map,s=new Map,a=0,c=0;for(let d=0;d<t;d+=n)for(let p=0;p<e;p+=o){let u=(d*e+p)*4,m=si(r,u),f=(i.get(m)??0)+1;i.set(m,f),s.has(m)||s.set(m,u),f>c&&(c=f,a=m);}return s.get(a)??0}function ci(r,e,t){let o=ai(r,e,t),n=r.readUInt8(o),i=r.readUInt8(o+1),s=r.readUInt8(o+2),a=r.readUInt8(o+3),c=0;for(let d=0;d<t;d+=4){let p=d>>2&3;for(let u=p;u<e;u+=4){let m=(d*e+u)*4;if((Math.abs(r.readUInt8(m)-n)>8||Math.abs(r.readUInt8(m+1)-i)>8||Math.abs(r.readUInt8(m+2)-s)>8||Math.abs(r.readUInt8(m+3)-a)>8)&&(c++,c>=16))return false}}return true}var ge=class{_width;_height;_total=0;_blank=0;constructor(e,t){this._width=e,this._height=t;}sample(e){this._total++,ci(e,this._width,this._height)&&this._blank++;}finalize(){return this._total>0?this._blank/this._total:0}};var be=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let c of this._bursts){e+=c,o=Math.max(o,c);let d=Math.max(0,c-1);t+=(d/this._fps)**2;}let n=this._actual+e,i=n>0?e/n:0,s=Math.min(1,t),a=1-(1-i)*(1-s);return {global:i,local:s,jank:a,expected:n,actual:this._actual,maxBurst:o}}};var jr="audio-meta",qr="audio-chunk";function Yr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,a)=>{let c=a.sampleRate,d=t();e.setupAudio(c);let p=Math.ceil(d*c/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},i=async(s,a)=>{try{await e.encodeAudio(a);}catch(c){o(c);}};return r.ipc.on(jr,n),r.ipc.on(qr,i),()=>{r.ipc.removeListener(jr,n),r.ipc.removeListener(qr,i);}}var xe=class{constructor(e){this._s=e;let t=path.dirname(e.outFiles[0]??".");this._pending=e.marks.map((o,n)=>({ms:o*1e3,index:n,path:path.join(t,`screenshot_${n}.png`)})).sort((o,n)=>o.ms-n.ms);}_s;_pending;_done=new Map;_writes=[];capture(e,t){for(;this._pending.length>0&&this._pending[0].ms<=e;)this.take(this._pending.shift(),t);}async finish(e){for(;e&&this._pending.length>0;)this.take(this._pending.shift(),e);return await Promise.all(this._writes),[...this._done.entries()].sort((t,o)=>t[0]-o[0]).map(([,t])=>t)}take(e,t){let{width:o,height:n}=this._s,i=electron.nativeImage.createFromBitmap(t,{width:o,height:n}).toPNG();this._done.set(e.index,e.path),this._writes.push(promises.writeFile(e.path,i));}};function tt({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let n=new Error(`timeout over ${t}ms`);return async(...i)=>{let s=0;for(;;){o?.throwIfAborted();try{let a=[r(...i)];return t&&a.push(promises$1.setTimeout(t).then(()=>{throw n})),await Promise.race(a)}catch(a){if(o?.throwIfAborted(),s++,s>=e)throw a;await Ue(2**s*100+Math.random()*100);}}}}var rt=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var ot="[Network]",hi=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]),wi=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function _i(r){for(let e of wi)if(r.startsWith(e))return true;return false}function ye(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=hi.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Kr({source:r,window:e,useInnerProxy:t,stubMedia:o}){let n=e.webContents.session.webRequest,i=new ue(256),s=new Map;async function a(d,p){let u=new rt;s.set(d,u),await u.wait({timeout:5e3,onTimeout:p}).finally(()=>s.delete(d));}function c(d){s.get(d)?.signal();}n.onBeforeRequest((d,p)=>{let u=d.url;if(o&&d.resourceType==="media"&&!u.startsWith("pup-frame:")){p({redirectURL:`pup-frame://stub?src=${encodeURIComponent(u)}`});return}let m=t?ye(u):u;i.schedule(()=>{let f=`${e.id}_${d.id}`;return _.debug(ot,"start:",{key:f,url:u,proxied:m,method:d.method,source:r,stats:i.stats}),p(m===u?{cancel:false}:{cancel:false,redirectURL:m}),_i(u)?Promise.resolve():a(f,()=>{_.warn(ot,"maybe timeout:",{key:f,url:u,proxied:m,method:d.method,source:r});})});}),n.onHeadersReceived(({responseHeaders:d},p)=>{delete d?.["x-frame-options"],delete d?.["X-Frame-Options"],delete d?.["content-security-policy"],delete d?.["Content-Security-Policy"],p({cancel:false,responseHeaders:d});}),n.onCompleted(d=>{let p=`${e.id}_${d.id}`;c(p),_.debug(ot,"completed:",{key:p,url:d.url,method:d.method,statusCode:d.statusCode,source:r});}),n.onErrorOccurred(d=>{let p=`${e.id}_${d.id}`;c(p);let{url:u,method:m,error:f,resourceType:h}=d;_[o&&h==="media"?f==="net::ERR_ABORTED"?"debug":"warn":"error"](ot,"error:",{key:p,url:u,method:m,error:f,resourceType:h,source:r});});}function Tt(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var ie="[Window]",Xr=new Error("window timeout"),bi=["%cElectron Security Warning","Mixed Content: The page at"];function xi({source:r,win:e,action:t,timeoutMs:o,tolerant:n,signal:i}){return new Promise((s,a)=>{let c=false,d=setTimeout(()=>p(n&&c?void 0:Xr),o),p=u=>{clearTimeout(d),u?a(u):s();};i?.throwIfAborted(),i?.addEventListener("abort",()=>p(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{_.debug(ie,"dom-ready:",{source:r}),c=true;}),e.webContents.once("did-stop-loading",()=>{_.debug(ie,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,m,f,h)=>{let b=`did-fail-load: ${JSON.stringify({url:h,source:r,code:m,desc:f})}`;_.error(ie,b),p(new Error(b));}),e.webContents.once("render-process-gone",(u,{exitCode:m,reason:f})=>{let h=`render-process-gone: ${JSON.stringify({source:r,exitCode:m,reason:f})}`;_.error(ie,h),p(new Error(h));}),t();})}function ve(r){return new Promise(e=>{Tt(r);let t=setTimeout(()=>{try{_.warn(ie,"force close"),r.destroy();}catch{}o();},1e3),o=()=>{clearTimeout(t),e();};r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}function yi(r){return r.deterministic?Qt:r.withAudio?Jt:Zt}async function Jr({source:r,renderer:e,tolerant:t,signal:o,onCreated:n}){let{width:i,height:s,useInnerProxy:a}=e,c=a?ye(r):r,d=new electron.BrowserWindow({width:i,height:s+1,minWidth:i,minHeight:s+1,maxWidth:i,maxHeight:s+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true,preload:yi(e)}});Kr({source:r,window:d,useInnerProxy:a,stubMedia:e.deterministic}),d.webContents.debugger.attach("1.3"),await n?.(d),d.webContents.on("console-message",({level:p,message:u,lineNumber:m,sourceId:f})=>{if(p==="warning"&&bi.find(b=>u.startsWith(b)))return;let h=[ie,"console:",{message:u,lineNumber:m,sourceId:f,source:r}];p==="error"?_.error(...h):_.debug(...h),e.onConsole(p,u);});try{let p=vr(c,{width:i,height:s});await xi({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await ve(d),p}return d}var vi=tt({fn:Jr,maxAttempts:2});async function nt({source:r,renderer:e,onCreated:t,signal:o}){o?.throwIfAborted();let n,i;try{n=await vi({source:r,renderer:e,signal:o});}catch(a){i=a;}let s=()=>Jr({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===Xr)return _.warn(ie,`warmup timeout: ${r}, falling back to dom-ready`),await s();if(i){let{message:a,stack:c}=i;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:a,stack:c})}`)}n&&(n.webContents.removeAllListeners(),Tt(n),await Ue(2e3),await ve(n));try{return await s()}catch(a){let{message:c,stack:d}=a;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:c,stack:d})}`)}}var Qr="[Render]";async function Zr(r){var Ne=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:a,disableHwCodec:c,signal:d,onProgress:p}=r;let u=w(Ne,await _e.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let m=new xe({marks:r.screenshots,width:o,height:n,outFiles:a});let f=Math.ceil(t*i);let h=1e3/t;let b={width:o,height:n+1};let g=0;let S;let P=[];let y;let v=0;let E;let F;let k;let A;let Z=new ge(o,n);let V=new be(t);let Pe;let Ee=T=>{g++,Z.sample(T),u.encodeBGRA(T).catch(R=>E??=R);};let Se=(T,R,N)=>{if(E??=d?.reason,E){k?.(E);return}let U=N.getSize();if(!et(U,b)){ze(Me,b);return}let z=N.toBitmap(),se=je(z,U);if(se===void 0){E??=new Error(`no timestamp @ ${g}`);return}if(y!==void 0&&se-y<h*.8)return;let Ce=Buffer.from(z.buffer,z.byteOffset,n*o*4);if(S=Ce,m.capture(se,Ce),y===void 0)Ee(Ce),V.wrote();else {let Dt=se-y;if(Dt<=h*1.2)Ee(Ce),V.wrote();else {let Lt=Math.round(Dt/h);V.dropped(Lt-1),V.wrote();for(let Vt=0;Vt<Lt&&g<f;Vt++)Ee(Ce);}}y=se;let Ot=Math.floor(g/f*100);Ot!==v&&(v=Ot,p(v));let ho=i*1e3;(se>=ho-h*.5||g>=f)&&F?.();};let I=await nt({source:e,renderer:r,signal:d,onCreated:T=>{s&&(Pe=Yr({wc:T.webContents,encoder:u,getVideoTimeMs:()=>y??0,onError:R=>E??=R}));}});let Me=I.webContents.debugger;try{I.webContents.stopPainting(),I.webContents.setFrameRate(t),I.webContents.on("paint",Se),I.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>k?.(d.reason),{once:!0}),await wr(Me),await new Promise((T,R)=>{[F,k]=[T,R];let N=0,U=0;A=We(async()=>{if(g!==N){N=g,U=0;return}if(U>=3){k?.(new Error(`renderer timeout @ ${g} lastTs ${N}`));return}U++;let z=await I.webContents.capturePage().catch(()=>null);z&&!I.isDestroyed()&&Se(void 0,void 0,z);},1e3/t);});}finally{A?.(),I.webContents.off("paint",Se),await ve(I),Pe?.(),await u.finish(),P=await m.finish(S);}if(E||g===0)throw E??new Error("no frames captured");else {let T=Z.finalize();T>=.5&&_.warn(Qr,`${e} blank-frame ratio ${Math.round(T*100)}% \u2014 possible white/blank screen`);let{jank:R}=V.finalize();return R>=.25&&_.warn(Qr,`${e} jank score ${R.toFixed(2)} \u2014 dropped frames`),{written:g,outFiles:a,blank:T,screenshots:P,jank:R}}}catch(ut){var Oe=ut,H=true;}finally{var M=x(Ne,Oe,H);M&&await M;}}var Pi="[Video]";async function eo({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await xt(r.executeJavaScript("window.__pup_video__&&window.__pup_video__.ready()"),t),await xt(r.executeJavaScript(`window.__pup_video__&&window.__pup_video__.advance(${e})`),t);}catch(o){t?.throwIfAborted(),_.warn(Pi,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var to="__pup_tick__";async function ro(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${to}&&window.${to}.process(${t})`,n=e.executeJavaScript(o);await Promise.all([re(n,5e3,"tick.executeJavaScript"),eo(r)]);}var Si="8000000";function it(r,e){let t={signal:e,options:{rw_timeout:Si}};return api.Demuxer.open(r,t)}async function*oo({src:r,meta:e,signal:t}){var y=[];try{let o=w(y,await it(r,t),!0);let n=o.streams?.find(A=>A.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!n)throw new Error("no video stream");let i=w(y,await api.Decoder.create(n,{signal:t}));let{frameWidth:s,frameHeight:a,width:c,height:d,fps:p}=e;let u=s!==c||a!==d?`scale=${s}:${a},`:"";let m=w(y,api.FilterAPI.create(`fps=${p},${u}format=rgba`,{signal:t}));let f=0;for await(var h of m.frames(i.frames(o.packets(n.index)))){var b=[];try{let A=w(b,h);A&&(yield {idx:++f,buf:Ai(A)});}catch(g){var S=g,P=!0;}finally{x(b,S,P);}}}catch(v){var E=v,F=true;}finally{var k=x(y,E,F);k&&await k;}}function Ai(r){let e=r.width*4,t=r.linesize[0],o=r.data[0];if(t===e)return Buffer.from(o.subarray(0,e*r.height));let n=Buffer.allocUnsafe(e*r.height);for(let i=0;i<r.height;i++)o.copy(n,i*e,i*t,i*t+e);return n}var Ti="[DecodeSession]",Ii=4,Ri=16,Bi=256*1024*1024,Mi=3,st=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(Ri,Math.floor(Bi/(e.frameWidth*e.frameHeight*4))),this._pumpDone=this.pump();}meta;_src;_buf=new Map;_ready=0;_want=1;_done=false;_closed=false;_gen=0;_ctrl=new AbortController;_waiters=new Set;_resume;_restart;_leadFrames;_keepCount;_pumpDone;async getFrame(e){e<1&&(e=1),e<=this._leadFrames&&(e=this._leadFrames+1);let t=this._buf.get(e);return t||(this._done&&e>this._ready?Buffer.alloc(0):(e>this._ready?(e>this._want&&(this._want=e),this.wake()):(this._ready=0,this._done=false,this._want=e,this.requestRestart()),this.wait(e)))}async close(){this._closed=true,this._done=true,this._ctrl.abort(),this.wake(),this.requestRestart();for(let e of this._waiters)e.resolve(Buffer.alloc(0));this._waiters.clear(),this._buf.clear(),await this._pumpDone;}wait(e){return new Promise(t=>this._waiters.add({idx:e,resolve:t}))}wake(){let e=this._resume;this._resume=void 0,e?.();}requestRestart(){this._gen++;let e=this._restart;this._restart=void 0,e?.(),this.wake();}async pump(){let e=0;for(;!this._closed;){let t=this._gen;this._ready=0,this._done=false,this._buf.clear();let o=false;try{await this.decodePass(t);}catch(n){!this._closed&&this._gen===t&&(o=true,_.warn(Ti,`[${this.meta.id.slice(0,8)}] decode pass failed: ${n instanceof Error?n.message:String(n)}`));}if(this._closed)break;if(this._gen!==t){e=0;continue}o&&++e<=Mi||(e=0,this._done=true,this.drainWaiters(),await this.untilRestart());}}async decodePass(e){let t=oo({src:this._src,meta:this.meta,signal:this._ctrl.signal});for await(let{idx:o,buf:n}of t){if(this._closed||this._gen!==e)return;let i=this._leadFrames+o;for(;!this._closed&&this._gen===e&&i>this.demand+Ii;)await this.pause();if(this._closed||this._gen!==e)return;this._buf.set(i,n),this._ready=i,this.drainWaiters(),this.evict();}}get demand(){let e=this._want;for(let t of this._waiters)t.idx>e&&(e=t.idx);return e}pause(){return new Promise(e=>{this._resume=e;})}untilRestart(){return this._closed?Promise.resolve():new Promise(e=>{this._restart=e;})}evict(){let e=this._want-this._keepCount;for(let t of this._buf.keys())t<e&&this._buf.delete(t);}drainWaiters(){for(let e of [...this._waiters]){let t=this._buf.get(e.idx);t?(this._waiters.delete(e),e.resolve(t)):this._done&&(this._waiters.delete(e),e.resolve(Buffer.alloc(0)));}}};async function no(r){var S=[];try{let e=w(S,await it(r),!0);let t=e.streams?.find(F=>F.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!t)throw new Error("probe: no video stream");let o=e.duration>0?e.duration:0;let n=t.timeBase.num/t.timeBase.den;let i=w(S,await api.Decoder.create(t,{threadCount:1}));let s=0;e:for await(var m of e.packets(t.index)){var f=[];try{let F=w(f,m);try{for await(var a of i.frames(F)){var c=[];try{let k=w(c,a);if(k?.decodeErrorFlags===0){s=Math.max(0,Number(k.pts)*n);break e}}catch(d){var p=d,u=!0;}finally{x(c,p,u);}}}catch{}}catch(h){var b=h,g=!0;}finally{x(f,b,g);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(P){var y=P,v=true;}finally{var E=x(S,y,v);E&&await E;}}async function so({width:r,height:e,duration:t}){let o=nodeAv.Codec.findEncoderByName(Ae);if(!o)throw new Error(`stub: encoder not found: ${Ae}`);let n=path.join(os.tmpdir(),`pup_stub_${crypto.randomBytes(8).toString("hex")}.webm`);try{{var i=[];try{let p=w(i,new we(n),!0);let u=w(i,await G({codec:o,width:r,height:e,fps:1e3,bitrate:1e5,pixelFormat:constants.AV_PIX_FMT_YUV420P,options:{deadline:"realtime","cpu-used":"8"}},"stubCtx.open2"));let m=p.addStream(u);await p.open();let f=w(i,new Mt(r,e));let h=BigInt(Math.max(1,Math.round(t*1e3)));f.frame.pts=0n;f.frame.duration=h;nodeAv.FFmpegError.throwIfError(await u.sendFrame(f.frame),"stubCtx.sendFrame");nodeAv.FFmpegError.throwIfError(await u.sendFrame(null),"stubCtx.flush");let b=w(i,B());for(;;){let g=await u.receivePacket(b);if(g===constants.AVERROR_EAGAIN||g===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(g,"stubCtx.receivePacket"),b.streamIndex=m.index,b.duration=h,b.rescaleTs(u.timeBase,m.timeBase),await p.writePacket(b),b.unref();}}catch(s){var a=s,c=!0;}finally{var d=x(i,a,c);d&&await d;}}return await promises.readFile(n)}finally{await promises.rm(n,{force:true});}}var Mt=class{frame;_buf;constructor(e,t){let o=e*t,n=Math.ceil(e/2)*Math.ceil(t/2);this._buf=Buffer.alloc(o+n*2,128),this._buf.fill(0,0,o),this.frame=nodeAv.Frame.fromVideoBuffer(this._buf,{width:e,height:t,format:constants.AV_PIX_FMT_YUV420P});}[Symbol.dispose](){this.frame[Symbol.dispose]();}};var at=class{constructor(e){this._useInnerProxy=e;}_useInnerProxy;_sessions=new Map;_probes=new Map;_stubs=new Map;_closed=false;async open(e){if(this._closed)throw new Error("frame-server: closed");let t=qi(e),o=this._sessions.get(t);if(o)return o.refs++,o.session.meta;let n=this._useInnerProxy?ye(e.src):e.src,i=await this.probeCached(n);if(this._closed)throw new Error("frame-server: closed");let s=i.width,a=i.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let d=Math.min(1,Math.max(e.dstW/i.width,e.dstH/i.height));s=ao(i.width*d),a=ao(i.height*d);}let c={id:t,width:i.width,height:i.height,frameWidth:s,frameHeight:a,fps:e.fps,duration:i.duration,leadGap:i.leadGap};return this._sessions.set(t,{session:new st(c,n),refs:1}),c}stub(e){if(this._closed)throw new Error("frame-server: closed");let t=this._useInnerProxy?ye(e):e,o=this._stubs.get(t);if(o)return o;let n=this.probeCached(t).then(i=>so({width:i.width,height:i.height,duration:i.duration}));return n.catch(()=>this._stubs.delete(t)),this._stubs.set(t,n),n}getFrame(e,t){let o=this._sessions.get(e);return o?o.session.getFrame(t):Promise.resolve(Buffer.alloc(0))}async close(e){let t=this._sessions.get(e);t&&(--t.refs>0||(this._sessions.delete(e),await t.session.close()));}probeCached(e){let t=this._probes.get(e);if(t)return t;let o=tt({fn:no})(e);return o.catch(()=>this._probes.delete(e)),this._probes.set(e,o),o}async closeAll(){this._closed=true;let e=[...this._sessions.values()];this._sessions.clear(),await Promise.all(e.map(t=>t.session.close()));}};function qi(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function ao(r){let e=Math.round(r);return Math.max(2,e-e%2)}var uo="[FrameProtocol]",po="pup-frame",J={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function mo(r){let e=new at(r);return electron.protocol.handle(po,async t=>{if(t.method==="OPTIONS")return new Response(null,{status:204,headers:J});let o=new URL(t.url);_.debug(uo,`${t.method} ${o.hostname}${o.search}`);try{switch(o.hostname){case "open":return Yi(await e.open({src:o.searchParams.get("src")??"",fps:ct(o,"fps",30),dstW:ct(o,"w",0),dstH:ct(o,"h",0),fit:o.searchParams.get("fit")??void 0}));case "frame":return Xi(await e.getFrame(o.searchParams.get("id")??"",ct(o,"idx",1)));case "stub":return Ki(await e.stub(o.searchParams.get("src")??""));case "close":return await e.close(o.searchParams.get("id")??""),new Response(null,{status:204,headers:J});default:return new Response(`unknown action: ${o.hostname}`,{status:404,headers:J})}}catch(n){let i=n instanceof Error?n.message:String(n);return _.error(uo,`${o.hostname} failed${o.search}: ${i}`),new Response(i,{status:500,headers:J})}}),{[Symbol.asyncDispose]:async()=>{electron.protocol.unhandle(po),await e.closeAll();}}}function Yi(r){return new Response(JSON.stringify(r),{headers:{...J,"content-type":"application/json"}})}function Ki(r){let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...J,"content-type":"video/webm","cache-control":"no-store"}})}function Xi(r){if(r.byteLength===0)return new Response(null,{status:410,headers:J});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...J,"content-type":"application/octet-stream","cache-control":"no-store"}})}function ct(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}var Be="[Shoot]",Ji=240,Qi=1e3,Zi=3;async function es({win:r,fps:e,size:t,ms:o}){let n,i=r.webContents.debugger,s={width:t.width,height:t.height+1},a=performance.now();try{return await new Promise(c=>{let d=(p,u,m)=>{let f=m.getSize();if(!et(f,s)){ze(i,s);return}let h=m.crop({x:0,y:s.height-2,width:de,height:2}),b=je(h.toBitmap(),{width:de,height:2});if(b===void 0||Math.abs(b-o)>1)return;let g=m.toBitmap();r.webContents.off("paint",d),c(Buffer.from(g.buffer,g.byteOffset,t.height*t.width*4));};r.webContents.on("paint",d),n=We(async()=>{if(performance.now()-a>=Qi)_.warn(Be,`paint timeout @ ${o}`),r.webContents.off("paint",d),c(void 0);else {let p=await r.webContents.capturePage().catch(()=>null);p&&!r.isDestroyed()&&d(void 0,void 0,p);}},1e3/e);})}finally{n?.();}}async function fo(r){var I=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:a,disableHwCodec:c,signal:d,onProgress:p}=r;s&&_.warn(Be,"audio will be ignored on this mode");let u=new xe({marks:r.screenshots,width:o,height:n,outFiles:a});let m=w(I,mo(r.useInnerProxy),!0);let f=performance.now();let h=nt({source:e,renderer:r,signal:d});let b=w(I,await _e.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let g=await h;_.debug(Be,"init done:",{source:e,cost:performance.now()-f});let S=Math.ceil(t*i);let P=1e3/t;let y=0;let v=0;let E=0;let F;let k=[];let A;let Z=new ge(o,n);let V=new be(t);let Pe=g.webContents.debugger;let Ee=g.webContents.mainFrame;let Se=Ee.frames[0];try{g.webContents.setFrameRate(Ji),await fr(Pe);for(let H=0;H<S;H++){d?.throwIfAborted();let M=(H+1)*P,T=gr(g.webContents);T.catch(()=>{}),await Promise.all([ro({frame:Se,timestampMs:M,signal:d}),_r(g.webContents,M)]),await Promise.all([mr(Pe,P),T]);let R=await es({source:e,fps:t,win:g,size:{width:o,height:n},ms:M});R?(E=0,V.wrote()):(E++,V.dropped(1));let N=R??F;if(!N||E>=Zi)throw new Error(`renderer exausted @ ${M}`);if(F=N,u.capture(M,N),Z.sample(N),b.encodeBGRA(N).catch(z=>A??=z),y++,A)throw A;let U=Math.floor(y/S*100);U!==v&&(v=U,p(v));}}finally{await ve(g),await b.finish(),k=await u.finish(F);}if(A)throw A;if(y===0)throw new Error("no frames captured");else {let H=Z.finalize();H>=.5&&_.warn(Be,`${e} blank-frame ratio ${Math.round(H*100)}% \u2014 possible white/blank screen`);let{jank:M}=V.finalize();return M>=.25&&_.warn(Be,`${e} jank score ${M.toFixed(2)} \u2014 frames held past paint timeout`),{written:y,outFiles:a,blank:H,jank:M,screenshots:k}}}catch(Me){var Ne=Me,ut=true;}finally{var Oe=x(I,Ne,ut);Oe&&await Oe;}}var is="[App]";function lo(){_.debug(is,"gpu features:",electron.app.getGPUFeatureStatus());}var dt=new AbortController,Nt=false;sr();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",lo);electron.app.on("before-quit",r=>!Nt&&r.preventDefault());electron.app.on("will-quit",r=>!Nt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>dt.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&dt.abort(e.reason);});pr({name:"app",run:async(r,e)=>{let t=new He;try{await electron.app.whenReady(),yr(),lo();for(let i of e.outFiles)await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?fo:Zr;dt.signal.throwIfAborted();let n=await o({source:r,...e,signal:dt.signal,onProgress:i=>t.writeProgress(i),onConsole:(i,s)=>t.writeConsole(i,s)});await t.writeDone(n);}catch(o){let n=o,i=n.stack??n.message??String(o??"unknown error");await t.writeError(i);}finally{Nt=true,electron.app.exit();}}});
95
+ </html>`}function je(r,e){let{width:t,height:o}=e;if(t<de||o<2)return;let n=o-1,i=0;for(let s=0;s<de;s++){let a=(n*t+s)*4,d=(r[a]??0)>127?1:0;i=i<<1|d;}if(i=i>>>0,!(!Number.isFinite(i)||i<0||i>1e7))return i}function wr(r){return xt(r,"__pup_start_stego__()")}async function _r(r,e){await xt(r.debugger,`__pup_draw_stego__(${e})`);}async function gr(r){let e=new Promise(t=>r.ipc.once(lr,t));await re(e,5e3,"stego tick");}var yt="pup",Wo="pup-frame",br={standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:yt,privileges:br},{scheme:Wo,privileges:br}]);function yr(){electron.protocol.handle(yt,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),n=parseInt(e.searchParams.get("h")??"0",10),i=hr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function vr(r,e){let t=new URL(`${yt}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var ue=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,n)=>{this._queue.push({run:()=>{if(t?.aborted){n(t.reason),this.next();return}this._active++,e().then(i=>{this._active--,o(i),this.next();}).catch(i=>{this._active--,n(i),this.next();});},reject:n,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};var Ae="libvpx-vp9";async function G(r,e){var n=[];try{let t=new nodeAv.CodecContext;t.allocContext3(r.codec);let o=w(n,new DisposableStack);o.use(t);t.codecId=r.codec.id;t.width=r.width;t.height=r.height;t.pixelFormat=r.pixelFormat;t.timeBase=new nodeAv.Rational(1,r.fps);t.framerate=new nodeAv.Rational(r.fps,1);t.gopSize=r.fps*2;t.bitRate=BigInt(r.bitrate);t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);r.codecTag&&(t.codecTag=r.codecTag);r.colorRange!==void 0&&(t.colorRange=r.colorRange);r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[c,d]of Object.entries(r.options??{}))t.setOption(c,d);nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e);o.move();return t}catch(i){var s=i,a=true;}finally{x(n,s,a);}}function oe(r,e,t){var i=[];try{let o=new nodeAv.Frame;o.alloc();let n=w(i,new DisposableStack);n.use(o);o.format=t;o.width=r;o.height=e;nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer");n.move();return o}catch(s){var a=s,c=true;}finally{x(i,a,c);}}function B(){let r=new nodeAv.Packet;return r.alloc(),r}async function pe(r,e,t,o){for(;;){let n=await r.receivePacket(e);if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)break;try{nodeAv.FFmpegError.throwIfError(n,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e);}finally{e.unref();}}}var j=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=oe(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=oe(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=B();}async png(){var o=[];try{let e=w(o,new DisposableStack);let t=new nodeAv.CodecContext;t.allocContext3(this._png);e.use(t);nodeAv.FFmpegError.throwIfError(await t.open2(this._png),"pngDecoder.open2");e.move();return t}catch(n){var i=n,s=true;}finally{x(o,i,s);}}async decodePNG(e){var o=[];try{let t=w(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(n){var i=n,s=true;}finally{x(o,i,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var pn={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},qe=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=B(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){var s=[];try{let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=w(s,new DisposableStack);let n=new nodeAv.CodecContext;n.allocContext3(t);o.use(n);n.codecId=t.id;n.sampleFormat=e.outSampleFmt;n.sampleRate=e.outSampleRate;n.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO;n.timeBase=new nodeAv.Rational(1,e.outSampleRate);n.bitRate=BigInt(e.bitrate);e.globalHeader&&n.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);nodeAv.FFmpegError.throwIfError(await n.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(n);o.move();return new r(n,i,e.outSampleFmt)}catch(a){var c=a,d=true;}finally{x(s,c,d);}}setInputRate(e){var m=[];try{this._graph?.[Symbol.dispose]();this._inRate=e;let t=w(m,new DisposableStack);let o=new nodeAv.FilterGraph;o.alloc();t.use(o);let n=nodeAv.Filter.getByName("abuffer");let i=o.createFilter(n,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let s=nodeAv.Filter.getByName("abuffersink");let a=o.createFilter(s,"sink");if(!a)throw new Error("Failed to create abuffersink");let c=pn[this._outFmt]??"flt";let d=`aformat=sample_fmts=${c}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`;let p=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]);let u=nodeAv.FilterInOut.createList([{name:"out",filterCtx:a,padIdx:0}]);nodeAv.FFmpegError.throwIfError(o.parsePtr(d,u,p),"graph.parsePtr");nodeAv.FFmpegError.throwIfError(o.configSync(),"graph.config");t.move();this._graph=o;this._bufSrc=i;this._bufSink=a;}catch(f){var h=f,b=true;}finally{x(m,h,b);}}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)Number.isFinite(o[p])||(o[p]=0);let n=o.length>>1;let i=w(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:n,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(n);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drain(t);}catch(a){var c=a,d=true;}finally{x(s,c,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;try{nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),await this.drainCodec(e);}finally{this._filterFrame.unref();}}}drainCodec(e){return pe(this._ctx,this._pkt,this._stream,e)}};function Y(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let n=0;n<8;n++)o=o<<1|r[t*8+n];e[t]=o;}return e}var q=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let n=0;n<o-1;n++)this.bits.push(0);for(let n=o-1;n>=0;n--)this.bits.push(t>>n&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let n=0;n<o;n++)this.bits.push(e[t+n]);}},O=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var K=Buffer.from([0,0,0,1]);var Et=16;var St=23,fe=32,le=33,Ye=34,Tr=39;function Ir(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,n=e&7;return {type:t,layerId:o,temporalId:n}}function Ct(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function D(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let n=t+o;if(n+2>r.length)break;let i=r.length;for(let c=n+2;c<r.length-2;c++)if(r[c]===0&&r[c+1]===0&&(r[c+2]===1||c+3<r.length&&r[c+2]===0&&r[c+3]===1)){i=c;break}let{type:s,layerId:a}=Ir(r[n],r[n+1]);e.push({type:s,layerId:a,data:r.subarray(n,i)}),t=i;}return e}function Ft(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=Ir(t[0],t[1]),[i,s]=Ct(o,e,n);return t[0]=i,t[1]=s,t}function L(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function ne(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var mn=48,Mr=24,fn=2,ln=10,kt=0,hn=1;function Rr(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Br(r,e){let t=L(r);return Rr(t,e+fn,0),Rr(t,e+ln,1),ne(t)}function Ke(r){let e=D(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===fe?n=Br(o.data,mn):o.type===le&&(n=Br(o.data,Mr)),t.push(K,n);}return Buffer.concat(t)}function wn(r,e,t){let o=L(r),n=new O(o),i=new q;for(let s=0;s<e;s++)i.bits.push(n.read(1));for(n.readUe(),i.ue(t);n.pos<n.bits.length;)i.bits.push(n.read(1));for(;i.bits.length%8!==0;)i.bits.push(0);return ne(Y(i.bits))}function _n(r,e,t,o){let n=L(r),i=new O(n),s=new q;for(let a=0;a<e;a++)s.bits.push(i.read(1));for(i.readUe(),i.readUe(),s.ue(t),s.ue(o);i.pos<i.bits.length;)s.bits.push(i.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return ne(Y(s.bits))}function Nr(r){let e=Mr+96;return wn(r,e,1)}function Or(r){return _n(r,16,1,1)}function gn(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function bn(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let n=0;n<=e;n++)r.read(1)||r.read(1);}else {let o=r.readUe(),n=r.readUe();for(let i=0;i<o;i++)r.readUe(),r.read(1);for(let i=0;i<n;i++)r.readUe(),r.read(1);}}function xn(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=Et&&e<=St;o&&r.read(1),r.readUe();let n=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):bn(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(n===hn||n===kt)&&(r.read(1)&&(r.readUe(),n===kt&&r.readUe()),n===kt&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),gn(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Dr(r,e,t){let o=L(r),n=new O(o),i=new O(o),s=xn(i,e,t),a=s%8===0?8:8-s%8,c=(s+a)/8,d=new q;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=Et&&e<=St&&d.bits.push(n.read(1)),n.readUe(),d.ue(1);n.pos<s;)d.bits.push(n.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return ne(Buffer.concat([Y(d.bits),o.subarray(c)]))}function yn(r){let e=new O(L(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function vn(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function Pn(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function Lr(r,e,t){let o=yn(r);if(!o)return r;let n=new q;return vn(n,o),Pn(n,o,e,t),n.bits.push(1),n.align(0),ne(Y(n.bits))}function Vr(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let n=r.width,i=r.height,s=n*i;if(t.byteOffset%4===0&&o===n*4){let a=new Uint32Array(t.buffer,t.byteOffset,s);for(let c=0;c<s;c++)e[c]=a[c]>>>24;}else for(let a=0;a<i;a++){let c=a*o+3,d=a*n;for(let p=0;p<n;p++)e[d+p]=t[c+p*4];}}function En(r,e){return r===le?Nr(e):r===Ye?Or(e):e}function Hr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=D(e),n=D(t),i=new Map;for(let c of n){if(c.type===fe)continue;let d=i.get(c.type)??[];d.push(c),i.set(c.type,d);}let s=[],a=new Set;for(let c of o){let d=c.type===fe?Lr(c.data,r.width,r.height):c.data;if(s.push(K,d),!a.has(c.type)){a.add(c.type);for(let p of i.get(c.type)??[]){let u=En(c.type,p.data);s.push(K,Ft(u,1));}}}return s.push(Sn()),Buffer.concat(s)}function Sn(){let[t,o]=Ct(Tr,0,1),n=[],i=(s,a)=>{for(let c=a-1;c>=0;c--)n.push(s>>c&1);};for(i(0,1),i(0,3),i(0,3),i(0,9),i(255,9),i(0,1),i(0,1),i(1,1);n.length%8!==0;)i(0,1);return Buffer.concat([K,Buffer.from([t,o]),Buffer.from([165,4]),Y(n),Buffer.from([128])])}function Ur(r,e,t){let o=[];for(let n of r)o.push(K,n.data);for(let n of e)if(n.type<fe){let i=Dr(n.data,n.type,t);o.push(K,Ft(i,1));}return Buffer.concat(o)}var Xe=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:n,alphaPkt:i}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,n,"base")),this._alphaQueue.push(...await this.receiveAll(o,i,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let n=[];for(;;){let i=await e.receivePacket(t);if(i>=0){n.push(this.snapshot(t)),t.unref();continue}if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)return n;nodeAv.FFmpegError.throwIfError(i,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:n,baseCtx:i,stream:s,hevcCfg:a}=this._s,c=Ur(D(e.data),D(t.data),a);n.data=Ke(c),n.pts=e.pts,n.dts=e.dts,n.duration=e.duration===0n?1n:e.duration,n.flags=e.flags,n.streamIndex=s.index,n.rescaleTs(i.timeBase,s.timeBase),await o.writePacket(n),n.unref();}};function X(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function An(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let n=0;n<e;n++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let n=e;n<8;n++)r.read(2);for(let n=0;n<e;n++)t[n]&&r.read(88),o[n]&&r.read(8);}function Tn(r){let e=new O(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&X("sps_max_sub_layers_minus1",t,"0"),e.read(1),An(e,t),e.readUe();let o=e.readUe();o===3&&X("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let n=e.readUe()+4,s=e.read(1)?t+1:1;for(let m=0;m<s;m++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&X("scaling_list_enabled_flag",1,"0"),e.read(1);let a=e.read(1)===1;e.read(1)&&X("pcm_enabled_flag",1,"0");let c=e.readUe();c>1&&X("num_short_term_ref_pic_sets",c,"\u22641");let d=0;if(c===1){let m=e.readUe(),f=e.readUe();d=m+f;for(let h=0;h<m;h++)e.readUe(),e.read(1);for(let h=0;h<f;h++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&X("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:n,saoEnabled:a,numShortTermRefPicSets:c,numDeltaPocsSet0:d,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function In(r){let e=new O(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&X("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&X("tiles_enabled_flag",1,"0"),e.read(1);let n=e.read(1)===1,i=e.read(1),s=false;return i&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:n&&!s}}function Wr(r){let e=D(r),t=e.find(s=>s.type===le),o=e.find(s=>s.type===Ye);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let n=Tn(L(t.data)),i=In(L(o.data));return {...n,...i}}var Qe=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new Xe({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){var F=[];try{let{width:t,height:o,fps:n,bitrate:i,muxer:s}=e;let a=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!a)throw new Error("hevc_nvenc encoder not found");let c={preset:"p4",bf:"0",tier:"main"};let d={codec:a,width:t,height:o,fps:n,bitrate:i,options:c};let p=w(F,new DisposableStack);let u=p.use(await G({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"));let m=p.use(await G({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"));if(!u.extraData||!m.extraData)throw new Error("nvenc: codec extradata missing");let f=Wr(u.extraData);let h=s.addStream(u,"hvc1");let b=Hr({baseExtradata:u.extraData,alphaExtradata:m.extraData,width:t,height:o});h.codecpar.extradata=Ke(b);let g=t*o;let S=(t+1>>1)*(o+1>>1);let P=Buffer.alloc(g+S*2);P.fill(128,g);let y=p.use(B());let v=p.use(B());let E=p.use(oe(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:m,basePkt:y,alphaPkt:v,stream:h,alphaSwFrame:E,alphaBuf:P,hevcCfg:f})}catch(k){var A=k,Z=true;}finally{x(F,A,Z);}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,a=this._pts++;Vr(e,s),nodeAv.FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(i.fromBuffer(s),"alphaSw.fromBuffer"),i.pts=a,i.duration=1n,e.pts=a,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await n.sendFrame(i),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:n,alphaSwFrame:i}=this._s;e.free(),t.free(),i.free(),n.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var he=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var m=[];try{let{codecName:t,codecTag:o,codecOpts:n,muxer:i,...s}=e;let a=nodeAv.Codec.findEncoderByName(t);if(!a)throw new Error(`Video encoder not found: ${t}`);let c=w(m,new DisposableStack);let d=c.use(await G({codec:a,...s,codecTag:o,options:n},"videoCtx.open2"));let p=c.use(B());let u=i.addStream(d,o);c.move();return new r(d,p,u)}catch(f){var h=f,b=true;}finally{x(m,h,b);}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return pe(this._ctx,this._pkt,this._stream,e)}};var Je=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var f=[];try{let{width:t,height:o,fps:n,hw:i,bitrate:s,muxer:a}=e;let c=i.getEncoderCodec("hevc");if(!c)throw new Error("hevc_videotoolbox encoder not found");let d=await G({codec:c,width:t,height:o,fps:n,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2");let p=w(f,new DisposableStack);p.use(d);let u=p.use(B());let m=a.addStream(d,"hvc1");p.move();return new r(d,u,m)}catch(h){var b=h,g=true;}finally{x(f,b,g);}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return pe(this._ctx,this._pkt,this._stream,e)}};var Ze="[Encoder]";async function Gr(r,e){var f=[];try{let{width:t,height:o,fps:n,bitrate:i=8e6,disableHwCodec:s=!1,sharedHw:a}=r;let c=a??(s?void 0:api.HardwareContext.auto()??void 0);let d=!a&&!!c;try{if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return _.debug(Ze,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Je.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d};if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return _.debug(Ze,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Qe.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d}}catch(S){_.warn(Ze,"Hardware codec session limits reached, use software encoder",S),d&&c?.dispose();}_.debug(Ze,"using software libx265 HEVC alpha encoder");let p=w(f,new DisposableStack);let u=p.use(await he.create({width:t,height:o,fps:n,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"fast","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}));let m=p.use(await j.create(t,o));p.move();return {video:u,codec:m,ownsHw:!1}}catch(h){var b=h,g=true;}finally{x(f,b,g);}}var we=class{_ctx;_opened=false;_disposed=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){var t=[];try{if(this._opened)return;nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput");let e=w(t,nodeAv.Dictionary.fromObject({movflags:"+faststart"}));nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(e),"writeHeader");this._opened=!0;}catch(o){var n=o,i=true;}finally{x(t,n,i);}}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(!this._disposed){this._disposed=true;try{if(this._opened){this._opened=!1;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput();}}}finally{await this._ctx[Symbol.asyncDispose]();}}}};var Re=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){var s=[];try{let t=w(s,new AsyncDisposableStack,!0);let o=t.use(new we(e.outFile));let n=e.kind==="mp4"?await r.mp4Video(e,o):await r.webmVideo(e,o);n.video&&t.use(n.video);n.hwVideo&&t.use(n.hwVideo);n.codec&&t.use(n.codec);n.ownsHw&&n.hw&&t.use(n.hw);let i=e.withAudio?await r.audioFor(e,o):void 0;i&&t.use(i);await o.open();t.move();return new r({muxer:o,...n,audio:i,opts:e})}catch(a){var c=a,d=true;}finally{var p=x(s,c,d);p&&await p;}}static mp4Video(e,t){let{width:o,height:n,fps:i,disableHwCodec:s,sharedHw:a}=e;return Gr({width:o,height:n,fps:i,disableHwCodec:s,sharedHw:a},t)}static async webmVideo(e,t){let{width:o,height:n,fps:i}=e;return {video:await he.create({width:o,height:n,fps:i,codecName:Ae,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await j.create(o,n),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return qe.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:n}=this._s;await o?.flush(n),e?await e.flush(n):await t.flush(n);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:n,codec:i,hw:s,ownsHw:a}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),n?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),a&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:n}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,n);}};var _e=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){var h=[];try{let{width:t,height:o,fps:n,outFiles:i,withAudio:s=!1,disableHwCodec:a=!1}=e;if(i.length===0)throw new Error("outFiles must contain at least one path");let c=i.map(y=>Re.kindFromPath(y));let d=!a&&c.includes("mp4");let p=w(h,new AsyncDisposableStack,!0);let u=d?api.HardwareContext.auto()??void 0:void 0;u&&p.use(u);let m=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA;let f=[];for(let y=0;y<i.length;y++){let v=await Re.create({outFile:i[y],kind:c[y],width:t,height:o,fps:n,withAudio:s,disableHwCodec:a,sharedHw:c[y]==="mp4"&&m?u:void 0});p.use(v),f.push(v);}p.move();return new r({sinks:f,sharedHw:u,limiter:new ue(1),outFiles:i,opts:e})}catch(b){var g=b,S=true;}finally{var P=x(h,g,S);P&&await P;}}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=w(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(a=>a.encodeBGRA(t)));}catch(n){var i=n,s=true;}finally{x(o,i,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await j.create(t,o);let n=await this._s.pngCodec.decodePNG(e);for(let i of this._s.sinks)await i.encodeDecodedFrame(n);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){var n=[];try{let t=w(n,new DisposableStack);let o=t.use(oe(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA));nodeAv.FFmpegError.throwIfError(o.fromBuffer(e),"bgraFrame.fromBuffer");t.move();return o}catch(i){var s=i,a=true;}finally{x(n,s,a);}}};function et(r,e){return r.width===e.width&&r.height===e.height}function si(r,e){return r.readUInt8(e)>>3|r.readUInt8(e+1)>>3<<5|r.readUInt8(e+2)>>3<<10|r.readUInt8(e+3)>>3<<15}function ai(r,e,t){let o=Math.max(1,Math.floor(e/32)),n=Math.max(1,Math.floor(t/32)),i=new Map,s=new Map,a=0,c=0;for(let d=0;d<t;d+=n)for(let p=0;p<e;p+=o){let u=(d*e+p)*4,m=si(r,u),f=(i.get(m)??0)+1;i.set(m,f),s.has(m)||s.set(m,u),f>c&&(c=f,a=m);}return s.get(a)??0}function ci(r,e,t){let o=ai(r,e,t),n=r.readUInt8(o),i=r.readUInt8(o+1),s=r.readUInt8(o+2),a=r.readUInt8(o+3),c=0;for(let d=0;d<t;d+=4){let p=d>>2&3;for(let u=p;u<e;u+=4){let m=(d*e+u)*4;if((Math.abs(r.readUInt8(m)-n)>8||Math.abs(r.readUInt8(m+1)-i)>8||Math.abs(r.readUInt8(m+2)-s)>8||Math.abs(r.readUInt8(m+3)-a)>8)&&(c++,c>=16))return false}}return true}var ge=class{_width;_height;_total=0;_blank=0;constructor(e,t){this._width=e,this._height=t;}sample(e){this._total++,ci(e,this._width,this._height)&&this._blank++;}finalize(){return this._total>0?this._blank/this._total:0}};var be=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let c of this._bursts){e+=c,o=Math.max(o,c);let d=Math.max(0,c-1);t+=(d/this._fps)**2;}let n=this._actual+e,i=n>0?e/n:0,s=Math.min(1,t),a=1-(1-i)*(1-s);return {global:i,local:s,jank:a,expected:n,actual:this._actual,maxBurst:o}}};var jr="audio-meta",qr="audio-chunk";function Yr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,a)=>{let c=a.sampleRate,d=t();e.setupAudio(c);let p=Math.ceil(d*c/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},i=async(s,a)=>{try{await e.encodeAudio(a);}catch(c){o(c);}};return r.ipc.on(jr,n),r.ipc.on(qr,i),()=>{r.ipc.removeListener(jr,n),r.ipc.removeListener(qr,i);}}var xe=class{constructor(e){this._s=e;let t=path.dirname(e.outFiles[0]??".");this._pending=e.marks.map((o,n)=>({ms:o*1e3,index:n,path:path.join(t,`screenshot_${n}.png`)})).sort((o,n)=>o.ms-n.ms);}_s;_pending;_done=new Map;_writes=[];capture(e,t){for(;this._pending.length>0&&this._pending[0].ms<=e;)this.take(this._pending.shift(),t);}async finish(e){for(;e&&this._pending.length>0;)this.take(this._pending.shift(),e);return await Promise.all(this._writes),[...this._done.entries()].sort((t,o)=>t[0]-o[0]).map(([,t])=>t)}take(e,t){let{width:o,height:n}=this._s,i=electron.nativeImage.createFromBitmap(t,{width:o,height:n}).toPNG();this._done.set(e.index,e.path),this._writes.push(promises.writeFile(e.path,i));}};function tt({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let n=new Error(`timeout over ${t}ms`);return async(...i)=>{let s=0;for(;;){o?.throwIfAborted();try{let a=[r(...i)];return t&&a.push(promises$1.setTimeout(t).then(()=>{throw n})),await Promise.race(a)}catch(a){if(o?.throwIfAborted(),s++,s>=e)throw a;await Ue(2**s*100+Math.random()*100);}}}}var rt=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var ot="[Network]",hi=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]),wi=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function _i(r){for(let e of wi)if(r.startsWith(e))return true;return false}function ye(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=hi.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Kr({source:r,window:e,useInnerProxy:t,stubMedia:o}){let n=e.webContents.session.webRequest,i=new ue(256),s=new Map;async function a(d,p){let u=new rt;s.set(d,u),await u.wait({timeout:5e3,onTimeout:p}).finally(()=>s.delete(d));}function c(d){s.get(d)?.signal();}n.onBeforeRequest((d,p)=>{let u=d.url;if(o&&d.resourceType==="media"&&!u.startsWith("pup-frame:")){p({redirectURL:`pup-frame://stub?src=${encodeURIComponent(u)}`});return}let m=t?ye(u):u;i.schedule(()=>{let f=`${e.id}_${d.id}`;return _.debug(ot,"start:",{key:f,url:u,proxied:m,method:d.method,source:r,stats:i.stats}),p(m===u?{cancel:false}:{cancel:false,redirectURL:m}),_i(u)?Promise.resolve():a(f,()=>{_.warn(ot,"maybe timeout:",{key:f,url:u,proxied:m,method:d.method,source:r});})});}),n.onHeadersReceived(({responseHeaders:d},p)=>{delete d?.["x-frame-options"],delete d?.["X-Frame-Options"],delete d?.["content-security-policy"],delete d?.["Content-Security-Policy"],p({cancel:false,responseHeaders:d});}),n.onCompleted(d=>{let p=`${e.id}_${d.id}`;c(p),_.debug(ot,"completed:",{key:p,url:d.url,method:d.method,statusCode:d.statusCode,source:r});}),n.onErrorOccurred(d=>{let p=`${e.id}_${d.id}`;c(p);let{url:u,method:m,error:f,resourceType:h}=d;_[o&&h==="media"?f==="net::ERR_ABORTED"?"debug":"warn":"error"](ot,"error:",{key:p,url:u,method:m,error:f,resourceType:h,source:r});});}function At(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var ie="[Window]",Xr=new Error("window timeout"),bi=["%cElectron Security Warning","Mixed Content: The page at"];function xi({source:r,win:e,action:t,timeoutMs:o,tolerant:n,signal:i}){return new Promise((s,a)=>{let c=false,d=setTimeout(()=>p(n&&c?void 0:Xr),o),p=u=>{clearTimeout(d),u?a(u):s();};i?.throwIfAborted(),i?.addEventListener("abort",()=>p(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{_.debug(ie,"dom-ready:",{source:r}),c=true;}),e.webContents.once("did-stop-loading",()=>{_.debug(ie,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,m,f,h)=>{let b=`did-fail-load: ${JSON.stringify({url:h,source:r,code:m,desc:f})}`;_.error(ie,b),p(new Error(b));}),e.webContents.once("render-process-gone",(u,{exitCode:m,reason:f})=>{let h=`render-process-gone: ${JSON.stringify({source:r,exitCode:m,reason:f})}`;_.error(ie,h),p(new Error(h));}),t();})}function ve(r){return new Promise(e=>{At(r);let t=setTimeout(()=>{try{_.warn(ie,"force close"),r.destroy();}catch{}o();},1e3),o=()=>{clearTimeout(t),e();};r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}function yi(r){return r.deterministic?Qt:r.withAudio?Xt:Jt}async function Qr({source:r,renderer:e,tolerant:t,signal:o,onCreated:n}){let{width:i,height:s,useInnerProxy:a}=e,c=a?ye(r):r,d=new electron.BrowserWindow({width:i,height:s+1,minWidth:i,minHeight:s+1,maxWidth:i,maxHeight:s+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true,preload:yi(e)}});Kr({source:r,window:d,useInnerProxy:a,stubMedia:e.deterministic}),d.webContents.debugger.attach("1.3"),await n?.(d),d.webContents.on("console-message",({level:p,message:u,lineNumber:m,sourceId:f})=>{if(p==="warning"&&bi.find(b=>u.startsWith(b)))return;let h=[ie,"console:",{message:u,lineNumber:m,sourceId:f,source:r}];p==="error"?_.error(...h):_.debug(...h),e.onConsole(p,u);});try{let p=vr(c,{width:i,height:s});await xi({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await ve(d),p}return d}var vi=tt({fn:Qr,maxAttempts:2});async function nt({source:r,renderer:e,onCreated:t,signal:o}){o?.throwIfAborted();let n,i;try{n=await vi({source:r,renderer:e,signal:o});}catch(a){i=a;}let s=()=>Qr({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===Xr)return _.warn(ie,`warmup timeout: ${r}, falling back to dom-ready`),await s();if(i){let{message:a,stack:c}=i;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:a,stack:c})}`)}n&&(n.webContents.removeAllListeners(),At(n),await Ue(2e3),await ve(n));try{return await s()}catch(a){let{message:c,stack:d}=a;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:c,stack:d})}`)}}var Jr="[Render]";async function Zr(r){var Ne=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:a,disableHwCodec:c,signal:d,onProgress:p}=r;let u=w(Ne,await _e.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let m=new xe({marks:r.screenshots,width:o,height:n,outFiles:a});let f=Math.ceil(t*i);let h=1e3/t;let b={width:o,height:n+1};let g=0;let S;let P=[];let y;let v=0;let E;let F;let k;let A;let Z=new ge(o,n);let V=new be(t);let Pe;let Ee=T=>{g++,Z.sample(T),u.encodeBGRA(T).catch(R=>E??=R);};let Se=(T,R,N)=>{if(E??=d?.reason,E){k?.(E);return}let U=N.getSize();if(!et(U,b)){ze(Me,b);return}let z=N.toBitmap(),se=je(z,U);if(se===void 0){E??=new Error(`no timestamp @ ${g}`);return}if(y!==void 0&&se-y<h*.8)return;let Ce=Buffer.from(z.buffer,z.byteOffset,n*o*4);if(S=Ce,m.capture(se,Ce),y===void 0)Ee(Ce),V.wrote();else {let Ot=se-y;if(Ot<=h*1.2)Ee(Ce),V.wrote();else {let Dt=Math.round(Ot/h);V.dropped(Dt-1),V.wrote();for(let Lt=0;Lt<Dt&&g<f;Lt++)Ee(Ce);}}y=se;let Nt=Math.floor(g/f*100);Nt!==v&&(v=Nt,p(v));let ho=i*1e3;(se>=ho-h*.5||g>=f)&&F?.();};let I=await nt({source:e,renderer:r,signal:d,onCreated:T=>{s&&(Pe=Yr({wc:T.webContents,encoder:u,getVideoTimeMs:()=>y??0,onError:R=>E??=R}));}});let Me=I.webContents.debugger;try{I.webContents.stopPainting(),I.webContents.setFrameRate(t),I.webContents.on("paint",Se),I.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>k?.(d.reason),{once:!0}),await wr(Me),await new Promise((T,R)=>{[F,k]=[T,R];let N=0,U=0;A=We(async()=>{if(g!==N){N=g,U=0;return}if(U>=3){k?.(new Error(`renderer timeout @ ${g} lastTs ${N}`));return}U++;let z=await I.webContents.capturePage().catch(()=>null);z&&!I.isDestroyed()&&Se(void 0,void 0,z);},1e3/t);});}finally{A?.(),I.webContents.off("paint",Se),await ve(I),Pe?.(),await u.finish(),P=await m.finish(S);}if(E||g===0)throw E??new Error("no frames captured");else {let T=Z.finalize();T>=.5&&_.warn(Jr,`${e} blank-frame ratio ${Math.round(T*100)}% \u2014 possible white/blank screen`);let{jank:R}=V.finalize();return R>=.25&&_.warn(Jr,`${e} jank score ${R.toFixed(2)} \u2014 dropped frames`),{written:g,outFiles:a,blank:T,screenshots:P,jank:R}}}catch(ut){var Oe=ut,H=true;}finally{var M=x(Ne,Oe,H);M&&await M;}}var Pi="[Video]";async function eo({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await pr(r.executeJavaScript(`window.__pup_video__&&(async()=>{await __pup_video__.ready();await __pup_video__.advance(${e})})()`),t);}catch(o){t?.throwIfAborted(),_.warn(Pi,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var to="__pup_tick__";async function ro(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${to}&&window.${to}.process(${t})`,n=e.executeJavaScript(o);await Promise.all([re(n,5e3,"tick.executeJavaScript"),eo(r)]);}var Si="8000000";function it(r,e){let t={signal:e,options:{rw_timeout:Si}};return api.Demuxer.open(r,t)}async function*oo({src:r,meta:e,signal:t}){var y=[];try{let o=w(y,await it(r,t),!0);let n=o.streams?.find(A=>A.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!n)throw new Error("no video stream");let i=w(y,await api.Decoder.create(n,{signal:t}));let{frameWidth:s,frameHeight:a,width:c,height:d,fps:p}=e;let u=s!==c||a!==d?`scale=${s}:${a},`:"";let m=w(y,api.FilterAPI.create(`fps=${p},${u}format=rgba`,{signal:t}));let f=0;for await(var h of m.frames(i.frames(o.packets(n.index)))){var b=[];try{let A=w(b,h);A&&(yield {idx:++f,buf:Ai(A)});}catch(g){var S=g,P=!0;}finally{x(b,S,P);}}}catch(v){var E=v,F=true;}finally{var k=x(y,E,F);k&&await k;}}function Ai(r){let e=r.width*4,t=r.linesize[0],o=r.data[0];if(t===e)return Buffer.from(o.subarray(0,e*r.height));let n=Buffer.allocUnsafe(e*r.height);for(let i=0;i<r.height;i++)o.copy(n,i*e,i*t,i*t+e);return n}var Ti="[DecodeSession]",Ii=4,Ri=16,Bi=256*1024*1024,Mi=3,st=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(Ri,Math.floor(Bi/(e.frameWidth*e.frameHeight*4))),this._pumpDone=this.pump();}meta;_src;_buf=new Map;_ready=0;_want=1;_done=false;_closed=false;_gen=0;_ctrl=new AbortController;_waiters=new Set;_resume;_restart;_leadFrames;_keepCount;_pumpDone;async getFrame(e){e<1&&(e=1),e<=this._leadFrames&&(e=this._leadFrames+1);let t=this._buf.get(e);return t||(this._done&&e>this._ready?Buffer.alloc(0):(e>this._ready?(e>this._want&&(this._want=e),this.wake()):(this._ready=0,this._done=false,this._want=e,this.requestRestart()),this.wait(e)))}async close(){this._closed=true,this._done=true,this._ctrl.abort(),this.wake(),this.requestRestart();for(let e of this._waiters)e.resolve(Buffer.alloc(0));this._waiters.clear(),this._buf.clear(),await this._pumpDone;}wait(e){return new Promise(t=>this._waiters.add({idx:e,resolve:t}))}wake(){let e=this._resume;this._resume=void 0,e?.();}requestRestart(){this._gen++;let e=this._restart;this._restart=void 0,e?.(),this.wake();}async pump(){let e=0;for(;!this._closed;){let t=this._gen;this._ready=0,this._done=false,this._buf.clear();let o=false;try{await this.decodePass(t);}catch(n){!this._closed&&this._gen===t&&(o=true,_.warn(Ti,`[${this.meta.id.slice(0,8)}] decode pass failed: ${n instanceof Error?n.message:String(n)}`));}if(this._closed)break;if(this._gen!==t){e=0;continue}o&&++e<=Mi||(e=0,this._done=true,this.drainWaiters(),await this.untilRestart());}}async decodePass(e){let t=oo({src:this._src,meta:this.meta,signal:this._ctrl.signal});for await(let{idx:o,buf:n}of t){if(this._closed||this._gen!==e)return;let i=this._leadFrames+o;for(;!this._closed&&this._gen===e&&i>this.demand+Ii;)await this.pause();if(this._closed||this._gen!==e)return;this._buf.set(i,n),this._ready=i,this.drainWaiters(),this.evict();}}get demand(){let e=this._want;for(let t of this._waiters)t.idx>e&&(e=t.idx);return e}pause(){return new Promise(e=>{this._resume=e;})}untilRestart(){return this._closed?Promise.resolve():new Promise(e=>{this._restart=e;})}evict(){let e=this._want-this._keepCount;for(let t of this._buf.keys())t<e&&this._buf.delete(t);}drainWaiters(){for(let e of [...this._waiters]){let t=this._buf.get(e.idx);t?(this._waiters.delete(e),e.resolve(t)):this._done&&(this._waiters.delete(e),e.resolve(Buffer.alloc(0)));}}};async function no(r){var S=[];try{let e=w(S,await it(r),!0);let t=e.streams?.find(F=>F.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!t)throw new Error("probe: no video stream");let o=e.duration>0?e.duration:0;let n=t.timeBase.num/t.timeBase.den;let i=w(S,await api.Decoder.create(t,{threadCount:1}));let s=0;e:for await(var m of e.packets(t.index)){var f=[];try{let F=w(f,m);try{for await(var a of i.frames(F)){var c=[];try{let k=w(c,a);if(k?.decodeErrorFlags===0){s=Math.max(0,Number(k.pts)*n);break e}}catch(d){var p=d,u=!0;}finally{x(c,p,u);}}}catch{}}catch(h){var b=h,g=!0;}finally{x(f,b,g);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(P){var y=P,v=true;}finally{var E=x(S,y,v);E&&await E;}}async function so({width:r,height:e,duration:t}){let o=nodeAv.Codec.findEncoderByName(Ae);if(!o)throw new Error(`stub: encoder not found: ${Ae}`);let n=path.join(os.tmpdir(),`pup_stub_${crypto.randomBytes(8).toString("hex")}.webm`);try{{var i=[];try{let p=w(i,new we(n),!0);let u=w(i,await G({codec:o,width:r,height:e,fps:1e3,bitrate:1e5,pixelFormat:constants.AV_PIX_FMT_YUV420P,options:{deadline:"realtime","cpu-used":"8"}},"stubCtx.open2"));let m=p.addStream(u);await p.open();let f=w(i,new Bt(r,e));let h=BigInt(Math.max(1,Math.round(t*1e3)));f.frame.pts=0n;f.frame.duration=h;nodeAv.FFmpegError.throwIfError(await u.sendFrame(f.frame),"stubCtx.sendFrame");nodeAv.FFmpegError.throwIfError(await u.sendFrame(null),"stubCtx.flush");let b=w(i,B());for(;;){let g=await u.receivePacket(b);if(g===constants.AVERROR_EAGAIN||g===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(g,"stubCtx.receivePacket"),b.streamIndex=m.index,b.duration=h,b.rescaleTs(u.timeBase,m.timeBase),await p.writePacket(b),b.unref();}}catch(s){var a=s,c=!0;}finally{var d=x(i,a,c);d&&await d;}}return await promises.readFile(n)}finally{await promises.rm(n,{force:true});}}var Bt=class{frame;_buf;constructor(e,t){let o=e*t,n=Math.ceil(e/2)*Math.ceil(t/2);this._buf=Buffer.alloc(o+n*2,128),this._buf.fill(0,0,o),this.frame=nodeAv.Frame.fromVideoBuffer(this._buf,{width:e,height:t,format:constants.AV_PIX_FMT_YUV420P});}[Symbol.dispose](){this.frame[Symbol.dispose]();}};var at=class{constructor(e){this._useInnerProxy=e;}_useInnerProxy;_sessions=new Map;_probes=new Map;_stubs=new Map;_closed=false;async open(e){if(this._closed)throw new Error("frame-server: closed");let t=qi(e),o=this._sessions.get(t);if(o)return o.refs++,o.session.meta;let n=this._useInnerProxy?ye(e.src):e.src,i=await this.probeCached(n);if(this._closed)throw new Error("frame-server: closed");let s=i.width,a=i.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let d=Math.min(1,Math.max(e.dstW/i.width,e.dstH/i.height));s=ao(i.width*d),a=ao(i.height*d);}let c={id:t,width:i.width,height:i.height,frameWidth:s,frameHeight:a,fps:e.fps,duration:i.duration,leadGap:i.leadGap};return this._sessions.set(t,{session:new st(c,n),refs:1}),c}stub(e){if(this._closed)throw new Error("frame-server: closed");let t=this._useInnerProxy?ye(e):e,o=this._stubs.get(t);if(o)return o;let n=this.probeCached(t).then(i=>so({width:i.width,height:i.height,duration:i.duration}));return n.catch(()=>this._stubs.delete(t)),this._stubs.set(t,n),n}getFrame(e,t){let o=this._sessions.get(e);return o?o.session.getFrame(t):Promise.resolve(Buffer.alloc(0))}async close(e){let t=this._sessions.get(e);t&&(--t.refs>0||(this._sessions.delete(e),await t.session.close()));}probeCached(e){let t=this._probes.get(e);if(t)return t;let o=tt({fn:no})(e);return o.catch(()=>this._probes.delete(e)),this._probes.set(e,o),o}async closeAll(){this._closed=true;let e=[...this._sessions.values()];this._sessions.clear(),await Promise.all(e.map(t=>t.session.close()));}};function qi(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function ao(r){let e=Math.round(r);return Math.max(2,e-e%2)}var uo="[FrameProtocol]",po="pup-frame",Q={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function mo(r){let e=new at(r);return electron.protocol.handle(po,async t=>{if(t.method==="OPTIONS")return new Response(null,{status:204,headers:Q});let o=new URL(t.url);_.debug(uo,`${t.method} ${o.hostname}${o.search}`);try{switch(o.hostname){case "open":return Yi(await e.open({src:o.searchParams.get("src")??"",fps:ct(o,"fps",30),dstW:ct(o,"w",0),dstH:ct(o,"h",0),fit:o.searchParams.get("fit")??void 0}));case "frame":return Xi(await e.getFrame(o.searchParams.get("id")??"",ct(o,"idx",1)));case "stub":return Ki(await e.stub(o.searchParams.get("src")??""));case "close":return await e.close(o.searchParams.get("id")??""),new Response(null,{status:204,headers:Q});default:return new Response(`unknown action: ${o.hostname}`,{status:404,headers:Q})}}catch(n){let i=n instanceof Error?n.message:String(n);return _.error(uo,`${o.hostname} failed${o.search}: ${i}`),new Response(i,{status:500,headers:Q})}}),{[Symbol.asyncDispose]:async()=>{electron.protocol.unhandle(po),await e.closeAll();}}}function Yi(r){return new Response(JSON.stringify(r),{headers:{...Q,"content-type":"application/json"}})}function Ki(r){let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...Q,"content-type":"video/webm","cache-control":"no-store"}})}function Xi(r){if(r.byteLength===0)return new Response(null,{status:410,headers:Q});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...Q,"content-type":"application/octet-stream","cache-control":"no-store"}})}function ct(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}var Be="[Shoot]",Qi=240,Ji=1e3,Zi=3;async function es({win:r,fps:e,size:t,ms:o}){let n,i=r.webContents.debugger,s={width:t.width,height:t.height+1},a=performance.now();try{return await new Promise(c=>{let d=(p,u,m)=>{let f=m.getSize();if(!et(f,s)){ze(i,s);return}let h=m.crop({x:0,y:s.height-2,width:de,height:2}),b=je(h.toBitmap(),{width:de,height:2});if(b===void 0||Math.abs(b-o)>1)return;let g=m.toBitmap();r.webContents.off("paint",d),c(Buffer.from(g.buffer,g.byteOffset,t.height*t.width*4));};r.webContents.on("paint",d),n=We(async()=>{if(performance.now()-a>=Ji)_.warn(Be,`paint timeout @ ${o}`),r.webContents.off("paint",d),c(void 0);else {let p=await r.webContents.capturePage().catch(()=>null);p&&!r.isDestroyed()&&d(void 0,void 0,p);}},1e3/e);})}finally{n?.();}}async function fo(r){var I=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:a,disableHwCodec:c,signal:d,onProgress:p}=r;s&&_.warn(Be,"audio will be ignored on this mode");let u=new xe({marks:r.screenshots,width:o,height:n,outFiles:a});let m=w(I,mo(r.useInnerProxy),!0);let f=performance.now();let h=nt({source:e,renderer:r,signal:d});let b=w(I,await _e.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let g=await h;_.debug(Be,"init done:",{source:e,cost:Math.round(performance.now()-f)});let S=Math.ceil(t*i);let P=1e3/t;let y=0;let v=0;let E=0;let F;let k=[];let A;let Z=new ge(o,n);let V=new be(t);let Pe=g.webContents.debugger;let Ee=g.webContents.mainFrame;let Se=Ee.frames[0];try{g.webContents.setFrameRate(Qi),await fr(Pe);for(let H=0;H<S;H++){d?.throwIfAborted();let M=(H+1)*P,T=gr(g.webContents);T.catch(()=>{}),await Promise.all([ro({frame:Se,timestampMs:M,signal:d}),_r(g.webContents,M)]),await Promise.all([mr(Pe,P),T]);let R=await es({source:e,fps:t,win:g,size:{width:o,height:n},ms:M});R?(E=0,V.wrote()):(E++,V.dropped(1));let N=R??F;if(!N||E>=Zi)throw new Error(`renderer exausted @ ${M}`);if(F=N,u.capture(M,N),Z.sample(N),b.encodeBGRA(N).catch(z=>A??=z),y++,A)throw A;let U=Math.floor(y/S*100);U!==v&&(v=U,p(v));}}finally{await ve(g),await b.finish(),k=await u.finish(F);}if(A)throw A;if(y===0)throw new Error("no frames captured");else {let H=Z.finalize();H>=.5&&_.warn(Be,`${e} blank-frame ratio ${Math.round(H*100)}% \u2014 possible white/blank screen`);let{jank:M}=V.finalize();return M>=.25&&_.warn(Be,`${e} jank score ${M.toFixed(2)} \u2014 frames held past paint timeout`),{written:y,outFiles:a,blank:H,jank:M,screenshots:k}}}catch(Me){var Ne=Me,ut=true;}finally{var Oe=x(I,Ne,ut);Oe&&await Oe;}}var is="[App]";function lo(){_.debug(is,"gpu features:",electron.app.getGPUFeatureStatus());}var dt=new AbortController,Mt=false;ir();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",lo);electron.app.on("before-quit",r=>!Mt&&r.preventDefault());electron.app.on("will-quit",r=>!Mt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>dt.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&dt.abort(e.reason);});ur({name:"app",run:async(r,e)=>{let t=new He;try{await electron.app.whenReady(),yr(),lo();for(let i of e.outFiles)await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?fo:Zr;dt.signal.throwIfAborted();let n=await o({source:r,...e,signal:dt.signal,onProgress:i=>t.writeProgress(i),onConsole:(i,s)=>t.writeConsole(i,s)});await t.writeDone(n);}catch(o){let n=o,i=n.stack??n.message??String(o??"unknown error");await t.writeError(i);}finally{Mt=true,electron.app.exit();}}});
96
96
  //# sourceMappingURL=app.cjs.map
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErNWQ4MTMxZTA2ODlkODFiYi9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYWxwaGFfZGFyd2luLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9kdWFsX2xheWVyX211eC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9wYXJzZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9zaW5rLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL2Jhc2UvcXVhbGl0eS9ibGFuay50cyIsIi4uL3NyYy9iYXNlL3F1YWxpdHkvZHJvcC50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9yZW5kZXJlci9zY3JlZW5zaG90LnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvYmFzZS93YWl0YWJsZV9ldmVudC50cyIsIi4uL3NyYy9yZW5kZXJlci9uZXR3b3JrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3dpbmRvdy50cyIsIi4uL3NyYy9yZW5kZXJlci9yZW5kZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vYWR2YW5jZS50cyIsIi4uL3NyYy9yZW5kZXJlci90aWNrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL29wZW4udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZGVjb2RlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2RlY29kZV9zZXNzaW9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3Byb2JlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3N0dWIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZnJhbWVfc2VydmVyLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3Byb3RvY29sLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Nob290LnRzIiwiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6WyJnZXRJbXBvcnRNZXRhVXJsIiwiaW1wb3J0TWV0YVVybCIsInBlbnYiLCJuYW1lIiwicGFyc2VyIiwiZGVmYXVsdFZhbHVlIiwicGFyc2VOdW1iZXIiLCJ4IiwibnVtIiwicGFyc2VTdHJpbmciLCJwYXJzZUFycmF5IiwiaXRlbSIsInMiLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsInB1cExvZ0xldmVsIiwicHVwUGtnUm9vdCIsImRpcm5hbWUiLCJqb2luIiwicHVwQXVkaW9QcmVsb2FkIiwicHVwU2hvb3RQcmVsb2FkIiwicHVwUmVuZGVyUHJlbG9hZCIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX2xldmVsIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwidmFsdWUiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJsdiIsIm1lc3NhZ2UiLCJwcm9jIiwicmVzb2x2ZSIsInJlamVjdCIsImZhdGFsIiwiZGlzcGF0Y2giLCJkYXRhIiwiZXJyIiwiY29kZSIsInNpZ25hbCIsInJlYXNvbiIsIl9fZGVjb3JhdG9yU3RhcnQiLCJfX2RlY29yYXRlRWxlbWVudCIsIl9fZGVjb3JhdG9yTWV0YWRhdGEiLCJsb2dnZXIiLCJMb2ciLCJsZXZlbCIsIkFWX0xPR19FUlJPUiIsIkFWX0xPR19XQVJOSU5HIiwiVEFHIiwic3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIiLCJkdW1wRGlyIiwiYXBwIiwibWtkaXJTeW5jIiwiY3Jhc2hSZXBvcnRlciIsIm5vZXJyIiwiZm4iLCJhcmdzIiwicmV0IiwiUFVQX0FSR1NfS0VZIiwicGFyZ3MiLCJhcmd2IiwicHJpdiIsImFyZyIsIkRFRkFVTFRfV0lEVEgiLCJERUZBVUxUX0hFSUdIVCIsIkRFRkFVTFRfRlBTIiwiREVGQVVMVF9EVVJBVElPTiIsIkRFRkFVTFRfV0lORE9XX1RJTUVPVVQiLCJERUZBVUxUX09VVF9GSUxFUyIsInJlbmRlclNjaGVtYSIsInoiLCJkZWZhdWx0UmVuZGVyT3B0aW9ucyIsIm5vcm1hbGl6ZVNvdXJjZSIsImFicyIsInJlYWxwYXRoU3luYyIsIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJlIiwiSXBjV3JpdGVyIiwicGF5bG9hZCIsInNsZWVwIiwibXMiLCJ3aXRoVGltZW91dCIsInAiLCJsYWJlbCIsInRpbWVyIiwiYWJvcnRhYmxlIiwib25BYm9ydCIsInBlcmlvZGljYWwiLCJjYWxsYmFjayIsInRva2VuIiwiY2xvc2VkIiwidGljayIsImNvdW50IiwibmV4dCIsIkNEUF9USU1FT1VUX01TIiwic2VuZCIsImNkcCIsIm1ldGhvZCIsInBhcmFtcyIsImV2YWxJbiIsImV4cHJlc3Npb24iLCJhZHZhbmNlVmlydHVhbFRpbWUiLCJidWRnZXQiLCJ0aW1lb3V0IiwiaGFuZGxlciIsIl8iLCJwYXVzZVZpcnR1YWxUaW1lIiwicmVzaXplRHJhd2FibGUiLCJzaXplIiwiRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgiLCJTVEVHT19USUNLX0NIQU5ORUwiLCJidWlsZFN0ZWdvSFRNTCIsInRhcmdldFVSTCIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwiZHJhd1N0ZWdvIiwid2MiLCJleHBlY3RlZCIsIndhaXRTdGVnb1RpY2siLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJGUkFNRV9TQ0hFTUUiLCJQUklWSUxFR0VEX1BSSVZJTEVHRVMiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInYiLCJrZWVwIiwiZW50cnkiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJvcGVuVmlkZW9DdHgiLCJfc3RhY2siLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJzdGFjayIsIl9fdXNpbmciLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJGRm1wZWdFcnJvciIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsInN0cmVhbSIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsImNvZGVjIiwiQ29kZWMiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZm10TmFtZSIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJOQUxfQkxBX1dfTFAiLCJOQUxfUlNWX0lSQVBfVkNMMjMiLCJOQUxfVlBTIiwiTkFMX1NQUyIsIk5BTF9QUFMiLCJOQUxfU0VJX1BSRUZJWCIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsIlZQU19QVExfQklUIiwiU1BTX1BUTF9CSVQiLCJQVExfVElFUl9CSVQiLCJQVExfQ09NUEFUMl9CSVQiLCJTTElDRV9UWVBFX0IiLCJTTElDRV9UWVBFX1AiLCJzZXRCaXQiLCJiaXRPZmZzZXQiLCJtYXNrIiwiY3VyIiwicGF0Y2hQdGwiLCJuYWxEYXRhIiwicHRsU3RhcnRCaXQiLCJyYnNwIiwicGF0Y2hIZXZjQWxwaGFQdGwiLCJjaHVua3MiLCJyZXdyaXRlT25lVWUiLCJuYWxJbiIsIm5ld1ZhbCIsImJyIiwiYnciLCJyZXdyaXRlVHdvVWUiLCJuZXdWYWwxIiwibmV3VmFsMiIsInJld3JpdGVBbHBoYVNwcyIsInNwcyIsIlNQU19TRVFfSURfQklUIiwicmV3cml0ZUFscGhhUHBzIiwicHBzIiwicmVhZFNlIiwidWUiLCJwYXJzZUlubGluZVN0UmVmUGljU2V0IiwibnVtRGVsdGFQb2NzU2V0MCIsImRlbHRhSWR4TWludXMxIiwibnVtTmVnIiwibnVtUG9zIiwicGFyc2VIZWFkZXJUb0FsaWdubWVudCIsIm5hbFR5cGUiLCJjZmciLCJpc0lyYXAiLCJzbGljZVR5cGUiLCJyZXdyaXRlQWxwaGFTbGljZUhlYWRlciIsInNsaWNlIiwicHJvYmUiLCJCIiwib2xkQWxpZ25CaXRzIiwic2xpY2VEYXRhQnl0ZU9mZnNldCIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIiLCJiZ3JhRnJhbWUiLCJzcmNMcyIsInciLCJoIiwieVNpemUiLCJzcmMzMiIsInkiLCJyb3dCYXNlIiwiZHN0QmFzZSIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIkR1YWxMYXllck11eCIsImJhc2VDdHgiLCJhbHBoYUN0eCIsImJhc2VQa3QiLCJhbHBoYVBrdCIsInRhZyIsImJhc2UiLCJhbHBoYSIsImhldmNDZmciLCJpbnRlcmxlYXZlZCIsImZhaWwiLCJmaWVsZCIsImdvdCIsInNraXBQdGwiLCJtYXhTdWJMYXllcnMiLCJzdWJQcm9maWxlUHJlc2VudCIsInN1YkxldmVsUHJlc2VudCIsInBhcnNlU3BzIiwic3BzUmJzcCIsImNocm9tYUZvcm1hdCIsImxvZzJNYXhQb2NMc2IiLCJvcmRlckNvdW50Iiwic2FvRW5hYmxlZCIsIm51bVN0UnBzIiwibG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCIsInNwc1RlbXBvcmFsTXZwRW5hYmxlZCIsInBhcnNlUHBzIiwicHBzUmJzcCIsIm51bUV4dHJhU2xpY2VIZWFkZXJCaXRzIiwiY2FiYWNJbml0UHJlc2VudCIsInBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkIiwiZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50Iiwic2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSIsInBhcnNlTnZlbmNIZXZjQ29uZmlnIiwiZXh0cmFkYXRhIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJudmVuY09wdHMiLCJjb21tb24iLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJ1bmlmaWVkIiwiY2hyb21hU2l6ZSIsImFscGhhQnVmIiwiYWxwaGFTd0ZyYW1lIiwicHRzIiwiZGVzeW5jIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjVGFnIiwiY29kZWNPcHRzIiwicmVzdCIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsImh3IiwiQVZDT0xfUkFOR0VfSlBFRyIsImNyZWF0ZUh3VmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJzaGFyZWRIdyIsIkhhcmR3YXJlQ29udGV4dCIsIm93bnNIdyIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwidmlkZW8iLCJGRl9FTkNPREVSX0xJQlgyNjUiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsImNvZGVjQ3R4IiwiRGljdGlvbmFyeSIsIk91dHB1dFNpbmsiLCJfT3V0cHV0U2luayIsInBhdGgiLCJsb3dlciIsInNldHVwIiwiYXVkaW8iLCJfcHJvbWlzZSIsIkZGX0VOQ09ERVJfQUFDIiwiRkZfRU5DT0RFUl9MSUJPUFVTIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZXMiLCJ3aXRoQXVkaW8iLCJraW5kcyIsIm5lZWRzTXA0SHciLCJpc0h3QWxwaGFDYXBhYmxlIiwic2lua3MiLCJzaW5rIiwiaW5wdXQiLCJzaXplRXF1YWxzIiwiYSIsInF1YW50aXplIiwiYmdyYSIsIm1vZGFsUGl4ZWwiLCJzdGVwWCIsInN0ZXBZIiwiY291bnRzIiwiZmlyc3RJZHgiLCJiZXN0IiwiYmVzdENvdW50Iiwia2V5IiwiaXNCbGFua0ZyYW1lIiwibSIsIm1iIiwibWciLCJtciIsIm1hIiwiY29udGVudCIsIm9mZnNldCIsIkJsYW5rU3RhdHMiLCJEcm9wU3RhdHMiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiYXR0YWNoQXVkaW9MaXN0ZW5lcnMiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwib25NZXRhIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJvbkNodW5rIiwiYnVmZmVyIiwiU2NyZWVuc2hvdFRha2VyIiwiX3MiLCJkaXIiLCJzZWMiLCJpbmRleCIsImN1cnJlbnRUaW1lTXMiLCJmaW5hbEJncmEiLCJuYXRpdmVJbWFnZSIsIndyaXRlRmlsZSIsInVzZVJldHJ5IiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0RXJyb3IiLCJhdHRlbXB0IiwicHJvbWlzZXMiLCJzZXRUaW1lb3V0IiwiV2FpdGFibGVFdmVudCIsIm1hcCIsIkxPQ0FMX1NDSEVNRVMiLCJpc0xvY2FsU2NoZW1lIiwicHJveGllZFVybCIsInBhcnNlZCIsIlVSTCIsInNldEludGVyY2VwdG9yIiwid2luZG93IiwidXNlSW5uZXJQcm94eSIsInN0dWJNZWRpYSIsImxpbWl0ZXIiLCJldmVudHMiLCJ3YWl0Iiwib25UaW1lb3V0IiwiZXZlbnQiLCJkZXRhaWxzIiwicHJveGllZCIsInJlc3BvbnNlSGVhZGVycyIsInJlc291cmNlVHlwZSIsInVuc2V0SW50ZXJjZXB0b3IiLCJUSU1FT1VUX0VSUk9SIiwiQ09OU09MRV9JR05PUkVTIiwid2FpdEZvckZpbmlzaCIsIndpbiIsImFjdGlvbiIsInRpbWVvdXRNcyIsInRvbGVyYW50IiwiZG9tUmVhZHkiLCJkb25lIiwiZGVzYyIsImV4aXRDb2RlIiwiZGlzcG9zZVdpbmRvdyIsInBpY2tQcmVsb2FkIiwicmVuZGVyZXIiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwiQnJvd3NlcldpbmRvdyIsImxpbmVOdW1iZXIiLCJzb3VyY2VJZCIsIm1zZ3MiLCJvcGVuV2luZG93V2l0aFJldHJ5IiwibG9hZFdpbmRvdyIsIndhcm11cCIsIm9wZW4iLCJyZW5kZXIiLCJkdXJhdGlvbiIsIm9uUHJvZ3Jlc3MiLCJ0YWtlciIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImZyYW1lU2l6ZSIsIndyaXR0ZW4iLCJsYXN0RnJhbWUiLCJzY3JlZW5zaG90cyIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiY2xlYXJTdHVja0NoZWNrIiwiYmxhbmtTdGF0cyIsImRyb3BTdGF0cyIsImRpc3Bvc2VBdWRpbyIsInNjaGVkdWxlRnJhbWUiLCJwYWludCIsIl9yIiwiaW1hZ2UiLCJpbWFnZVNpemUiLCJjdXJyZW50VGltZSIsImNyb3BwZWQiLCJ0aW1lRGVsdGEiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiZHVyYXRpb25NcyIsImxhc3RXcml0dGVuIiwic3R1Y2siLCJibXAiLCJibGFuayIsImphbmsiLCJhZHZhbmNlVmlkZW9zIiwidGltZXN0YW1wTXMiLCJUSUNLX1NZTUJPTCIsImV4cHIiLCJ0aWNrRXYiLCJSV19USU1FT1VUX1VTIiwib3BlbklucHV0IiwiRGVtdXhlciIsImRlY29kZUZyYW1lcyIsIm1ldGEiLCJBVk1FRElBX1RZUEVfVklERU8iLCJkZWMiLCJEZWNvZGVyIiwiZnJhbWVXaWR0aCIsImZyYW1lSGVpZ2h0Iiwic2NhbGUiLCJmaWx0ZXIiLCJGaWx0ZXJBUEkiLCJfZnJhbWUiLCJwYWNrUmdiYSIsInJvdyIsInN0cmlkZSIsIkRFQ09ERV9BSEVBRCIsIktFRVBfQkVISU5EIiwiTUVNT1JZX0JVREdFVCIsIk1BWF9QQVNTX1JFVFJZIiwiRGVjb2RlU2Vzc2lvbiIsIl9zcmMiLCJpZHgiLCJoaXQiLCJmYWlscyIsImdlbiIsImZhaWxlZCIsImF0IiwiZmxvb3IiLCJ0YiIsImxlYWRHYXAiLCJvdXRlciIsIl9wa3QiLCJlbmNvZGVTdHViV2VibSIsInRtcGRpciIsInJhbmRvbUJ5dGVzIiwic3R1YiIsIlN0dWJGcmFtZSIsInJlYWRGaWxlIiwicm0iLCJsdW1hIiwiY2hyb21hIiwiRnJhbWVTZXJ2ZXIiLCJfdXNlSW5uZXJQcm94eSIsImlkIiwiZXZlbiIsInJlYWwiLCJzZXNzaW9ucyIsImNyZWF0ZUhhc2giLCJTQ0hFTUUiLCJDT1JTX0hFQURFUlMiLCJ1c2VGcmFtZVByb3RvY29sIiwiZnMiLCJqc29uT2siLCJpbnQiLCJyZ2JhT2siLCJ3ZWJtT2siLCJieXRlcyIsImNvcHkiLCJmYWxsYmFjayIsIlJFTkRFUl9GUFMiLCJQQUlOVF9USU1FT1VUX01TIiwiUEFJTlRfSE9MRF9MSU1JVCIsImNsZWFyRGlydHlDaGVjayIsInQwIiwiX2QiLCJzbGl2ZXIiLCJ0cyIsInNob290IiwidEluaXQiLCJ3aW5QIiwicGlwZWxpbmUiLCJoZWxkIiwibGFzdEJpdG1hcCIsIm1haW4iLCJpZnJhbWUiLCJmcmFtZU1zIiwicGFpbnRlZCIsInByaW50RmVhdHVyZXMiLCJjdHJsIiwiZXhpdGluZyIsIk1lbnUiLCJyYXciLCJpcGMiLCJta2RpciIsInJlc3VsdCJdLCJtYXBwaW5ncyI6Iit5RUFLQSxJQUFNQSxFQUFBQSxDQUFtQixJQUN2QixPQUFPLFFBQUEsQ0FBYSxJQUNoQixJQUFJLEdBQUEsQ0FBSSxDQUFBLEtBQUEsRUFBUSxVQUFVLENBQUEsQ0FBRSxDQUFBLENBQUUsS0FDN0IsUUFBQSxDQUFTLGFBQUEsRUFBaUIsUUFBQSxDQUFTLGFBQUEsQ0FBYyxPQUFBLENBQVEsV0FB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Q0FBQSxDQUVYLFFBQVN0SixDQUFBQSxDQUFJc0wsQ0FBQUEsQ0FBSSxtQkFBb0J0TCxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsSUFDMUNzSixDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsRUFFYixDQUVBQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVCxJQUFBLElBQVN0SixFQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSSxHQUFJQSxDQUFBQSxFQUFBQSxDQUN0QnNKLENBQUFBLENBQUcsS0FBS3RKLENBQUFBLEdBQU0sQ0FBQSxFQUFLQSxDQUFBQSxHQUFNLENBQUMsQ0FBQSxDQUU1QnNKLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBR1RBLEVBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBS2dDLENBQUFBLENBQUksT0FBQSxDQUFTQSxFQUFJLFFBQUEsQ0FBVUEsQ0FBQUEsQ0FBSSxPQUFTQSxDQUFBQSxDQUFJLFFBQVEsRUFFNURoQyxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRTVKLENBQUFBLENBQU8sRUFBRSxFQUNkNEosQ0FBQUEsQ0FBRyxDQUFBLENBQUUzSixFQUFRLEVBQUUsQ0FBQSxDQUNmMkosRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUVUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBR1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUVQQSxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBQ1BBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxFQUNYLENBT08sU0FBU2tDLEVBQUFBLENBQWNOLEVBQWlC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QUEsR0FDVndGLEVBQUFBLEVBQWlCLENBQ2pCaWdCLElBQWMsQ0FDZCxJQUFBLElBQVdsWixLQUFPOUssQ0FBQUEsQ0FBUSxRQUFBLENBQ3hCLE1BQU1za0IsY0FBQUEsQ0FBTXJwQixZQUFBQSxDQUFRNlAsQ0FBRyxDQUFBLENBQUcsQ0FBRSxTQUFBLENBQVcsQ0FBQSxDQUFLLENBQUMsQ0FBQSxDQUUvQyxJQUFNdVEsQ0FBQUEsQ0FBU3JiLENBQUFBLENBQVEsY0FBZ0JzakIsRUFBQUEsQ0FBUTdHLEVBQUFBLENBQy9Dd0gsR0FBSyxNQUFBLENBQU8sY0FBQSxHQUNaLElBQU1NLENBQUFBLENBQVMsTUFBTWxKLENBQUFBLENBQU8sQ0FDMUIsT0FBQWpiLENBQUFBLENBQ0EsR0FBR0osRUFDSCxNQUFBLENBQVFpa0IsRUFBQUEsQ0FBSyxNQUFBLENBQ2IsVUFBQSxDQUFhcmpCLENBQUFBLEVBQU15akIsQ0FBQUEsQ0FBSSxjQUFjempCLENBQUMsQ0FBQSxDQUN0QyxVQUFXLENBQUNtWCxDQUFBQSxDQUFHZixJQUFNcU4sQ0FBQUEsQ0FBSSxZQUFBLENBQWF0TSxFQUFHZixDQUFDLENBQzVDLENBQUMsQ0FBQSxDQUNELE1BQU1xTixFQUFJLFNBQUEsQ0FBVUUsQ0FBTSxFQUM1QixDQUFBLE1BQVNqa0IsQ0FBQUEsQ0FBRyxDQUNWLElBQU12RCxDQUFBQSxDQUFRdUQsQ0FBQUEsQ0FDUjBXLEVBQUlqYSxDQUFBQSxDQUFNLEtBQUEsRUFBU0EsRUFBTSxPQUFBLEVBQVcsTUFBQSxDQUFPdUQsR0FBSyxlQUFlLENBQUEsQ0FDckUsTUFBTStqQixDQUFBQSxDQUFJLFVBQUEsQ0FBV3JOLENBQUMsRUFDeEIsQ0FBQSxPQUFFLENBQ0FrTixFQUFBQSxDQUFVLElBQUEsQ0FDVjNsQixhQUFJLElBQUEsR0FDTixDQUNGLENBQ0YsQ0FBQyxDQUFBIiwiZmlsZSI6ImFwcC5janMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTaGltIGdsb2JhbHMgaW4gY2pzIGJ1bmRsZVxuLy8gVGhlcmUncyBhIHdlaXJkIGJ1ZyB0aGF0IGVzYnVpbGQgd2lsbCBhbHdheXMgaW5qZWN0IGltcG9ydE1ldGFVcmxcbi8vIGlmIHdlIGV4cG9ydCBpdCBhcyBgY29uc3QgaW1wb3J0TWV0YVVybCA9IC4uLiBfX2ZpbGVuYW1lIC4uLmBcbi8vIEJ1dCB1c2luZyBhIGZ1bmN0aW9uIHdpbGwgbm90IGNhdXNlIHRoaXMgaXNzdWVcblxuY29uc3QgZ2V0SW1wb3J0TWV0YVVybCA9ICgpID0+IFxuICB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgXG4gICAgPyBuZXcgVVJMKGBmaWxlOiR7X19maWxlbmFtZX1gKS5ocmVmIFxuICAgIDogKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdTQ1JJUFQnKSBcbiAgICAgID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgXG4gICAgICA6IG5ldyBVUkwoXCJtYWluLmpzXCIsIGRvY3VtZW50LmJhc2VVUkkpLmhyZWY7XG5cbmV4cG9ydCBjb25zdCBpbXBvcnRNZXRhVXJsID0gLyogQF9fUFVSRV9fICovIGdldEltcG9ydE1ldGFVcmwoKVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih4OiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHgpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7eH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHgpO1xufVxuXG4vLyBDb21tYS1zZXBhcmF0ZWQgc3RyaW5nIOKGkiBhcnJheSB2aWEgYSBwZXItaXRlbSBwYXJzZXI7IGVtcHR5L2JsYW5rIOKGkiBbXS5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFycmF5PFQ+KGl0ZW06ICh4OiB1bmtub3duKSA9PiBUKTogKHg6IHVua25vd24pID0+IFRbXSB7XG4gIHJldHVybiAoeCkgPT4ge1xuICAgIGlmICh0eXBlb2YgeCAhPT0gXCJzdHJpbmdcIiB8fCB4LnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4geC5zcGxpdChcIixcIikubWFwKChzKSA9PiBpdGVtKHMudHJpbSgpKSk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cEF1ZGlvUHJlbG9hZCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcImF1ZGlvX3ByZWxvYWQuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cFNob290UHJlbG9hZCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcInNob290X3ByZWxvYWQuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cFJlbmRlclByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJyZW5kZXJfcHJlbG9hZC5janNcIik7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6ICguLi5tZXNzYWdlczogdW5rbm93bltdKSA9PiB1bmtub3duLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSB7XG4gICAgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIH0gZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIHtcbiAgICBsb2dnZXIud2Fybihtc2cpO1xuICB9XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzIxLlxuXG5pbXBvcnQgeyBta2RpclN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGFwcCwgY3Jhc2hSZXBvcnRlciB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltDcmFzaF1cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCkge1xuICAvLyBhcHBEYXRhIChub3QgdGhlIHBlci1ydW4gdXNlci1kYXRhLWRpcikgc28gZXZlcnkgcHVwIGFwcCdzIGR1bXBzIGFjY3VtdWxhdGUgaW4gb25lIHNoYXJlZCwgcGVyc2lzdGVudCBkaXIuXG4gIGNvbnN0IGR1bXBEaXIgPSBqb2luKGFwcC5nZXRQYXRoKFwiYXBwRGF0YVwiKSwgXCJwdXAtcmVjb3JkZXJcIiwgXCJjcmFzaGVzXCIpO1xuICBta2RpclN5bmMoZHVtcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGFwcC5zZXRQYXRoKFwiY3Jhc2hEdW1wc1wiLCBkdW1wRGlyKTtcbiAgY3Jhc2hSZXBvcnRlci5zdGFydCh7XG4gICAgcHJvZHVjdE5hbWU6IFwicHVwLXJlY29yZGVyXCIsXG4gICAgdXBsb2FkVG9TZXJ2ZXI6IGZhbHNlLFxuICAgIGNvbXByZXNzOiBmYWxzZSxcbiAgICBpZ25vcmVTeXN0ZW1DcmFzaEhhbmRsZXI6IHRydWUsXG4gIH0pO1xuICBsb2dnZXIuZGVidWcoVEFHLCBcInNldCBkdW1wIHRvXCIsIGR1bXBEaXIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNC5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZXJyPEEgZXh0ZW5kcyB1bmtub3duW10sIFIsIEQ+KGZuOiAoLi4uYXJnczogQSkgPT4gUiwgZGVmYXVsdFZhbHVlOiBEKTogKC4uLmFyZ3M6IEEpID0+IFIgfCBEIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldCA9IGZuKC4uLmFyZ3MpO1xuICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJldC5jYXRjaCgoKSA9PiBkZWZhdWx0VmFsdWUpIGFzIFIgfCBEO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zLCBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB0cmVlS2lsbCBmcm9tIFwidHJlZS1raWxsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xuICBnZXQga2lsbGVkKCk6IGJvb2xlYW47XG4gIGtpbGwoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9jZXNzSGFuZGxlIHtcbiAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoXCIgXCIpLmZpbHRlcigocykgPT4gcy5sZW5ndGgpO1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBwYXJ0cztcbiAgaWYgKCFjb21tYW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZW1wdHkgY29tbWFuZFwiKTtcbiAgfVxuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbiAgbGV0IGtpbGxlZCA9IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIHByb2Nlc3M6IHByb2MsXG4gICAgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSxcbiAgICBnZXQga2lsbGVkKCkge1xuICAgICAgcmV0dXJuIGtpbGxlZDtcbiAgICB9LFxuICAgIGtpbGwoKSB7XG4gICAgICBpZiAoa2lsbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGtpbGxlZCA9IHRydWU7XG4gICAgICBjb25zdCBwaWQgPSBwcm9jLnBpZDtcbiAgICAgIGlmIChwaWQpIHtcbiAgICAgICAgdHJlZUtpbGwocGlkLCBcIlNJR0tJTExcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jLmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJTkRPV19USU1FT1VUID0gMTA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRVMgPSBbXCJvdXQvaHRtbC5tcDRcIiwgXCJvdXQvaHRtbC53ZWJtXCJdO1xuXG5leHBvcnQgY29uc3QgcmVuZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogei5udW1iZXIoKS5kZXNjcmliZShcIkR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBdWRpbzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dEZpbGVzOiB6LmFycmF5KHouc3RyaW5nKCkpLmRlc2NyaWJlKFwiT3V0cHV0IHBhdGhzOyBleHRlbnNpb24gKC5tcDQvLndlYm0pIHNlbGVjdHMgZW5jb2RlclwiKSxcbiAgdXNlSW5uZXJQcm94eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbiAgZGV0ZXJtaW5pc3RpYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZW5kZXIgYnkgZnJhbWUgcmF0aGVyIHRoYW4gcmVjb3JkaW5nXCIpLFxuICBkaXNhYmxlR3B1OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgR1BVIHJlbmRlcmluZywgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBidXQgaW5jcmVhc2Ugc3RhYmlsaXR5XCIpLFxuICBkaXNhYmxlSHdDb2RlYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIGhhcmR3YXJlIHZpZGVvIGVuY29kZXIgKE5WRU5DL1ZpZGVvVG9vbGJveCksIHVzZSBzb2Z0d2FyZSB4MjY1XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbiAgd2luZG93VGltZW91dDogei5udW1iZXIoKS5kZXNjcmliZShcIldpbmRvdyBsb2FkIHRpbWVvdXQgaW4gc2Vjb25kc1wiKSxcbiAgc2NyZWVuc2hvdHM6IHouYXJyYXkoei5udW1iZXIoKSkuZGVzY3JpYmUoXCJTZWNvbmQgbWFya3MgdG8gZHVtcCBmcmFtZSBiaXRtYXBzIGFzIFBOR1wiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgcmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgQ29uc29sZUNhbGxiYWNrID0gKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlbmRlck9wdGlvbnMgZXh0ZW5kcyBSZW5kZXJPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M6IFByb2dyZXNzQ2FsbGJhY2s7XG4gIG9uQ29uc29sZTogQ29uc29sZUNhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlbmRlck9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBibGFuazogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIHNjcmVlbnNob3RzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGVzOiBERUZBVUxUX09VVF9GSUxFUyxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gIGRldGVybWluaXN0aWM6IGZhbHNlLFxuICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICB3aW5kb3dUb2xlcmFudDogZmFsc2UsXG4gIHdpbmRvd1RpbWVvdXQ6IERFRkFVTFRfV0lORE9XX1RJTUVPVVQsXG4gIHNjcmVlbnNob3RzOiBbXSxcbn07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyByZWFscGF0aFN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHByb2dyYW0gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vZXJyIH0gZnJvbSBcIi4vYmFzZS9ub2VyclwiO1xuaW1wb3J0IHsgcGFyc2VBcnJheSwgcGFyc2VOdW1iZXIsIHBhcnNlU3RyaW5nIH0gZnJvbSBcIi4vYmFzZS9wYXJzZXJcIjtcbmltcG9ydCB7IHBhcmdzIH0gZnJvbSBcIi4vYmFzZS9wcm9jZXNzXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucywgdHlwZSBSZW5kZXJPcHRpb25zLCByZW5kZXJTY2hlbWEgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuLy8gU2NoZW1lZCBVUklzIHBhc3MgdGhyb3VnaDsgYmFyZSBwYXRocyBnZXQgY2Fub25pY2FsaXplZCBhbmQgd3JhcHBlZCBhcyBmaWxlOi8vLlxuZnVuY3Rpb24gbm9ybWFsaXplU291cmNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChzLmluY2x1ZGVzKFwiOi8vXCIpIHx8IHMuc3RhcnRzV2l0aChcImRhdGE6XCIpKSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbiAgbGV0IGFiczogc3RyaW5nO1xuICB0cnkge1xuICAgIGFicyA9IHJlYWxwYXRoU3luYyhzKTtcbiAgfSBjYXRjaCB7XG4gICAgYWJzID0gcmVzb2x2ZShzKTtcbiAgfVxuICByZXR1cm4gYGZpbGU6Ly8ke2Fic31gO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENMSU9wdGlvbnMge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJ1bjogKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBSZW5kZXJPcHRpb25zKSA9PiBQcm9taXNlPHVua25vd24+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFrZUNMSShvcHRpb25zOiBDTElPcHRpb25zKSB7XG4gIGNvbnN0IHNoYXBlID0gcmVuZGVyU2NoZW1hLnNoYXBlO1xuICBjb25zdCBkID0gZGVmYXVsdFJlbmRlck9wdGlvbnM7XG4gIHByb2dyYW1cbiAgICAubmFtZShvcHRpb25zLm5hbWUpXG4gICAgLmFyZ3VtZW50KFwiPHNvdXJjZT5cIiwgXCJmaWxlOi8vLCBodHRwKHMpOi8vLCBkYXRhOiBVUkksIG9yIGZpbGVzeXN0ZW0gcGF0aFwiKVxuICAgIC5vcHRpb24oXCItVywgLS13aWR0aCA8bnVtYmVyPlwiLCBzaGFwZS53aWR0aC5kZXNjcmlwdGlvbiwgYCR7ZC53aWR0aH1gKVxuICAgIC5vcHRpb24oXCItSCwgLS1oZWlnaHQgPG51bWJlcj5cIiwgc2hhcGUuaGVpZ2h0LmRlc2NyaXB0aW9uLCBgJHtkLmhlaWdodH1gKVxuICAgIC5vcHRpb24oXCItUywgLS1zY3JlZW5zaG90cyA8c2Vjb25kcz5cIiwgc2hhcGUuc2NyZWVuc2hvdHMuZGVzY3JpcHRpb24sIFwiXCIpXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBzaGFwZS5mcHMuZGVzY3JpcHRpb24sIGAke2QuZnBzfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIHNoYXBlLmR1cmF0aW9uLmRlc2NyaXB0aW9uLCBgJHtkLmR1cmF0aW9ufWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1maWxlIDxwYXRocz5cIiwgc2hhcGUub3V0RmlsZXMuZGVzY3JpcHRpb24sIGQub3V0RmlsZXMuam9pbihcIixcIikpXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYXVkaW9cIiwgc2hhcGUud2l0aEF1ZGlvLmRlc2NyaXB0aW9uLCBkLndpdGhBdWRpbylcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWdwdVwiLCBzaGFwZS5kaXNhYmxlR3B1LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVHcHUpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ody1jb2RlY1wiLCBzaGFwZS5kaXNhYmxlSHdDb2RlYy5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlSHdDb2RlYylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRpbWVvdXQgPG51bWJlcj5cIiwgc2hhcGUud2luZG93VGltZW91dC5kZXNjcmlwdGlvbiwgYCR7ZC53aW5kb3dUaW1lb3V0fWApXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKG5vcm1hbGl6ZVNvdXJjZShzb3VyY2UpLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlczogcGFyc2VBcnJheShwYXJzZVN0cmluZykob3B0cy5vdXRGaWxlKSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgICBkaXNhYmxlR3B1OiBvcHRzLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgICAgICAgIGRpc2FibGVId0NvZGVjOiBvcHRzLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgICAgd2luZG93VG9sZXJhbnQ6IG9wdHMud2luZG93VG9sZXJhbnQgPz8gZC53aW5kb3dUb2xlcmFudCxcbiAgICAgICAgICB3aW5kb3dUaW1lb3V0OiBub2VycihwYXJzZU51bWJlciwgZC53aW5kb3dUaW1lb3V0KShvcHRzLndpbmRvd1RpbWVvdXQpLFxuICAgICAgICAgIHNjcmVlbnNob3RzOiBwYXJzZUFycmF5KHBhcnNlTnVtYmVyKShvcHRzLnNjcmVlbnNob3RzKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwibm9kZTpldmVudHNcIjtcblxuZXhwb3J0IGVudW0gSXBjTXNnVHlwZSB7XG4gIC8vIGNoaWxkIOKGkiBwYXJlbnRcbiAgQ29uc29sZSA9IFwiY29uc29sZVwiLFxuICBQcm9ncmVzcyA9IFwicHJvZ3Jlc3NcIixcbiAgRG9uZSA9IFwiZG9uZVwiLFxuICBFcnJvciA9IFwiZXJyb3JcIixcbiAgLy8gcGFyZW50IOKGkiBjaGlsZFxuICBDYW5jZWwgPSBcImNhbmNlbFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnNvbGVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNvbnNvbGU7XG4gIGxldmVsOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNhbmNlbDtcbiAgcmVhc29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY0RvbmVQYXlsb2FkIHtcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIGJsYW5rOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgc2NyZWVuc2hvdHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Qcm9ncmVzcztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb25lTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Eb25lO1xuICBwYXlsb2FkOiBJcGNEb25lUGF5bG9hZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRXJyb3I7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElwY01zZyA9IENvbnNvbGVNc2cgfCBQcm9ncmVzc01zZyB8IERvbmVNc2cgfCBFcnJvck1zZyB8IENhbmNlbE1zZztcblxuZXhwb3J0IGludGVyZmFjZSBJcGNFdmVudHMge1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBjb25zb2xlOiBbbGV2ZWw6IHN0cmluZywgbXNnOiBzdHJpbmddO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbY29kZTogbnVtYmVyIHwgbnVsbF07XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICB3cml0ZUNvbnNvbGUobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlLCBsZXZlbCwgbWVzc2FnZSB9KTtcbiAgfVxuXG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3MsIHZhbHVlIH0pO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRXJyb3IsIGVycm9yIH0pO1xuICB9XG5cbiAgd3JpdGVEb25lKHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRG9uZSwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZChtc2c6IElwY01zZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCFwcm9jZXNzLnNlbmQpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3Muc2VuZChtc2csICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxJcGNFdmVudHM+IHtcbiAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcykge1xuICAgIHN1cGVyKCk7XG4gICAgY2hpbGQub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Db25zb2xlOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY29uc29sZVwiLCBtc2cubGV2ZWwsIG1zZy5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUHJvZ3Jlc3M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBtc2cudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Eb25lOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBtc2cucGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVycm9yOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKG1zZy5lcnJvcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImV4aXRcIiwgKGMpID0+IHRoaXMuZW1pdChcImNsb3NlXCIsIGMpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGltZW91dDxUPihwOiBQcm9taXNlPFQ+LCBtczogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYCR7bGFiZWx9IHRpbWVkIG91dCBhZnRlciAke21zfW1zYCkpLCBtcyk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpKTtcbiAgfSk7XG59XG5cbi8vIFJlamVjdCBhcyBzb29uIGFzIGBzaWduYWxgIGFib3J0cywgZWxzZSBzZXR0bGUgd2l0aCBgcGA7IG5vLW9wIHBhc3N0aHJvdWdoIHdoZW4gbm8gc2lnbmFsLlxuZXhwb3J0IGZ1bmN0aW9uIGFib3J0YWJsZTxUPihwOiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICBpZiAoIXNpZ25hbCkge1xuICAgIHJldHVybiBwO1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCkpO1xuICB9KTtcbn1cblxuLy8gQ2FsbGJhY2sgbWF5IHJldHVybiB0aGUgbmV4dCBpbnRlcnZhbCAobXMpIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGZvciB0aGUgZm9sbG93aW5nIHRpY2suXG5leHBvcnQgZnVuY3Rpb24gcGVyaW9kaWNhbChjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8bnVtYmVyIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGNvbnN0IG5leHQgPSBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBuZXh0ID8/IG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmNvbnN0IENEUF9USU1FT1VUX01TID0gNV8wMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZW5kKGNkcDogRGVidWdnZXIsIG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBvYmplY3QpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KGNkcC5zZW5kQ29tbWFuZChtZXRob2QsIHBhcmFtcyksIENEUF9USU1FT1VUX01TLCBgY2RwLiR7bWV0aG9kfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbEluKGNkcDogRGVidWdnZXIsIGV4cHJlc3Npb246IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoc2VuZChjZHAsIFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7IGV4cHJlc3Npb24gfSksIENEUF9USU1FT1VUX01TLCBcImV2YWxJblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyLCBidWRnZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgYWR2YW5jZVZpcnR1YWxUaW1lIHRpbWVkIG91dCBhZnRlciAke0NEUF9USU1FT1VUX01TfW1zYCkpO1xuICAgIH0sIENEUF9USU1FT1VUX01TKTtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoXzogRWxlY3Ryb24uRXZlbnQsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobWV0aG9kID09PSBcIkVtdWxhdGlvbi52aXJ0dWFsVGltZUJ1ZGdldEV4cGlyZWRcIikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjZHAub24oXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgIC8vIE5vIHN0YXJ2YXRpb24gY2FwICh3b3VsZCBza2lwIHBlbmRpbmcgd29yayBub24tZGV0ZXJtaW5pc3RpY2FsbHkpOyBjYXB0dXJlIHN0YXJ0cyBwb3N0IGRpZC1zdG9wLWxvYWRpbmcsIGFuZCBDRFBfVElNRU9VVF9NUyB0dXJucyBhIHJlYWwgc3RhbGwgaW50byBhIGZhaWxlZCByZW5kZXIuXG4gICAgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHtcbiAgICAgIHBvbGljeTogXCJhZHZhbmNlXCIsXG4gICAgICBidWRnZXQsXG4gICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhdXNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwgeyBwb2xpY3k6IFwicGF1c2VcIiB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc2l6ZURyYXdhYmxlKGNkcDogRGVidWdnZXIsIHNpemU6IFNpemUpIHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldERldmljZU1ldHJpY3NPdmVycmlkZVwiLCB7XG4gICAgLi4uc2l6ZSxcbiAgICBkZXZpY2VTY2FsZUZhY3RvcjogMSxcbiAgICBtb2JpbGU6IGZhbHNlLFxuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUsIFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBldmFsSW4gfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCA9IDMyO1xuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX0hFSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgU1RFR09fVElDS19DSEFOTkVMID0gXCJzdGVnby10aWNrXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN0ZWdvSFRNTCh0YXJnZXRVUkw6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8c3R5bGU+XG4gICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogJHt3aWR0aH1weDsgaGVpZ2h0OiAke2hlaWdodCArIDF9cHg7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjdGFyZ2V0IHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAwOyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAke2hlaWdodH1weDsgXG4gICAgICBib3JkZXI6IG5vbmU7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNzdGVnbyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6ICR7aGVpZ2h0fXB4O1xuICAgICAgbGVmdDogMDtcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4O1xuICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8aWZyYW1lIGlkPVwidGFyZ2V0XCIgc3JjPVwiJHt0YXJnZXRVUkx9XCI+PC9pZnJhbWU+XG4gIDxjYW52YXMgaWQ9XCJzdGVnb1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIxXCI+PC9jYW52YXM+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgeyBpcGNSZW5kZXJlciB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCcke1NURUdPX1RJQ0tfQ0hBTk5FTH0nKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKDApO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfZHJhd19zdGVnb19fID0gKG1zKSA9PiB7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChtcyk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfc3RvcF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBpZiAocmFmSWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG4gICAgICAgICAgcmFmSWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCk7XG4gIDwvc2NyaXB0PlxuPC9ib2R5PlxuPC9odG1sPmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVTdGVnbyhiaXRtYXA6IEJ1ZmZlciwgc2l6ZTogU2l6ZSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgaWYgKHdpZHRoIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggfHwgaGVpZ2h0IDwgMikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBtYXJrZXJSb3cgPSBoZWlnaHQgLSAxO1xuXG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICBjb25zdCBwaXhlbElkeCA9IChtYXJrZXJSb3cgKiB3aWR0aCArIGkpICogNDtcbiAgICBjb25zdCByID0gYml0bWFwW3BpeGVsSWR4XSA/PyAwO1xuICAgIGNvbnN0IGJpdCA9IHIgPiAxMjcgPyAxIDogMDtcbiAgICB0aW1lc3RhbXAgPSAodGltZXN0YW1wIDw8IDEpIHwgYml0O1xuICB9XG5cbiAgdGltZXN0YW1wID0gdGltZXN0YW1wID4+PiAwO1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRpbWVzdGFtcCkgfHwgdGltZXN0YW1wIDwgMCB8fCB0aW1lc3RhbXAgPiAxZTcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0U3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0YXJ0X3N0ZWdvX18oKWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGV2YWxJbihjZHAsIGBfX3B1cF9zdG9wX3N0ZWdvX18oKWApO1xufVxuXG4vLyBQYWludHMgdGhlIHN0ZWdvIHJvdyBmb3IgYGV4cGVjdGVkYCBtcyBzeW5jaHJvbm91c2x5OyB0aGUgZGFtYWdlIHJpZGVzIG91dCBvbiB0aGUgbmV4dCBjb21wb3NpdGVkIGZyYW1lLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYXdTdGVnbyh3YzogV2ViQ29udGVudHMsIGV4cGVjdGVkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXZhbEluKHdjLmRlYnVnZ2VyLCBgX19wdXBfZHJhd19zdGVnb19fKCR7ZXhwZWN0ZWR9KWApO1xufVxuXG4vLyBSZXNvbHZlcyB3aGVuIHRoZSByZW5kZXJlciBjb21taXR0ZWQgdGhlIHN0ZWdvIHJvdzsgYXJtIEJFRk9SRSBkcmF3U3RlZ28gdG8gYXZvaWQgbWlzc2luZyB0aGUgYWNrLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRTdGVnb1RpY2sod2M6IFdlYkNvbnRlbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN3YXBwZWQgPSBuZXcgUHJvbWlzZSgocikgPT4gd2MuaXBjLm9uY2UoU1RFR09fVElDS19DSEFOTkVMLCByKSk7XG4gIGF3YWl0IHdpdGhUaW1lb3V0KHN3YXBwZWQsIDVfMDAwLCBcInN0ZWdvIHRpY2tcIik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBidWlsZFN0ZWdvSFRNTCB9IGZyb20gXCIuL3N0ZWdvXCI7XG5cbmNvbnN0IFBVUF9TQ0hFTUUgPSBcInB1cFwiO1xuY29uc3QgRlJBTUVfU0NIRU1FID0gXCJwdXAtZnJhbWVcIjtcblxuLy8gcmVnaXN0ZXJTY2hlbWVzQXNQcml2aWxlZ2VkIGhvbm9ycyBvbmx5IHRoZSBMQVNUIGNhbGwg4oCUIHJlZ2lzdGVyIGV2ZXJ5IGN1c3RvbSBzY2hlbWUgaW4gdGhpcyBvbmUgbGlzdCBiZWxvdy5cbmNvbnN0IFBSSVZJTEVHRURfUFJJVklMRUdFUyA9IHtcbiAgc3RhbmRhcmQ6IHRydWUsXG4gIHNlY3VyZTogdHJ1ZSxcbiAgYnlwYXNzQ1NQOiB0cnVlLFxuICBhbGxvd1NlcnZpY2VXb3JrZXJzOiB0cnVlLFxuICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gIGNvcnNFbmFibGVkOiB0cnVlLFxuICBzdHJlYW06IHRydWUsXG4gIGNvZGVDYWNoZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbi8vIE11c3QgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgYmVmb3JlIGFwcCBpcyByZWFkeS5cbnByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZChbXG4gIHsgc2NoZW1lOiBQVVBfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbiAgeyBzY2hlbWU6IEZSQU1FX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG5dKTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUHVwUHJvdG9jb2woKTogdm9pZCB7XG4gIHByb3RvY29sLmhhbmRsZShQVVBfU0NIRU1FLCAocmVxKSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBjb25zdCBzcmMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ3XCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJoXCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaHRtbCA9IGJ1aWxkU3RlZ29IVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoaHRtbCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVnb1VSTChzcmM6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7UFVQX1NDSEVNRX06Ly9zdGVnb2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcInNyY1wiLCBzcmMucmVwbGFjZShcImh0dHA6Ly9cIiwgXCJodHRwczovL1wiKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwid1wiLCBTdHJpbmcoc2l6ZS53aWR0aCkpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImhcIiwgU3RyaW5nKHNpemUuaGVpZ2h0KSk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmludGVyZmFjZSBRdWV1ZUVudHJ5IHtcbiAgcnVuOiBWb2lkRnVuY3Rpb247XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX3NpZ25hbHMgPSBuZXcgV2Vha1NldDxBYm9ydFNpZ25hbD4oKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86IFZvaWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgaWYgKHNpZ25hbCAmJiAhdGhpcy5fc2lnbmFscy5oYXMoc2lnbmFsKSkge1xuICAgICAgdGhpcy5fc2lnbmFscy5hZGQoc2lnbmFsKTtcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gdGhpcy5mbHVzaChzaWduYWwpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgICAgICBydW46ICgpID0+IHtcbiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fYWN0aXZlKys7XG4gICAgICAgICAgZm4oKVxuICAgICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlc29sdmUodik7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZWplY3QsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkcmFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+ICh0aGlzLl9yZXNvbHZlID0gcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaChzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3Qga2VlcDogUXVldWVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9xdWV1ZSkge1xuICAgICAgaWYgKGVudHJ5LnNpZ25hbCA9PT0gc2lnbmFsKSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtlZXAucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3F1ZXVlID0ga2VlcDtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8ucnVuKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQge1xuICB0eXBlIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGcmFtZSxcbiAgdHlwZSBIYXJkd2FyZUZyYW1lc0NvbnRleHQsXG4gIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICB0eXBlIEFWQ29sb3JSYW5nZSxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG4gIHR5cGUgRkZWaWRlb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbi8vIG5vZGUtYXYgNS4yLjMgY29uc3RhbnQgaXMgd3Jvbmc7IGZmbXBlZyByZWdpc3RlcnMgd2l0aCBkYXNoLlxuZXhwb3J0IGNvbnN0IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSA9IFwibGlidnB4LXZwOVwiIGFzIEZGVmlkZW9FbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ3R4T3B0aW9ucyB7XG4gIGNvZGVjOiBDb2RlYztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29sb3JSYW5nZT86IEFWQ29sb3JSYW5nZTtcbiAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGh3RnJhbWVzQ3R4PzogSGFyZHdhcmVGcmFtZXNDb250ZXh0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblZpZGVvQ3R4KG9wdHM6IFZpZGVvQ3R4T3B0aW9ucywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgY3R4LmFsbG9jQ29udGV4dDMob3B0cy5jb2RlYyk7XG4gIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBjdHggaWYgYW55IHNldHRlci9vcGVuMiB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gIHN0YWNrLnVzZShjdHgpO1xuICBjdHguY29kZWNJZCA9IG9wdHMuY29kZWMuaWQ7XG4gIGN0eC53aWR0aCA9IG9wdHMud2lkdGg7XG4gIGN0eC5oZWlnaHQgPSBvcHRzLmhlaWdodDtcbiAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMuZnBzKTtcbiAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChvcHRzLmZwcywgMSk7XG4gIGN0eC5nb3BTaXplID0gb3B0cy5mcHMgKiAyO1xuICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgaWYgKG9wdHMuY29kZWNUYWcpIHtcbiAgICBjdHguY29kZWNUYWcgPSBvcHRzLmNvZGVjVGFnO1xuICB9XG4gIGlmIChvcHRzLmNvbG9yUmFuZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGN0eC5jb2xvclJhbmdlID0gb3B0cy5jb2xvclJhbmdlO1xuICB9XG4gIGlmIChvcHRzLmh3RnJhbWVzQ3R4KSB7XG4gICAgY3R4Lmh3RnJhbWVzQ3R4ID0gb3B0cy5od0ZyYW1lc0N0eDtcbiAgfVxuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSB7XG4gICAgY3R4LnNldE9wdGlvbihrLCB2KTtcbiAgfVxuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHN0YWNrLm1vdmUoKTtcbiAgcmV0dXJuIGN0eDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VGcmFtZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcGl4Rm10OiBBVlBpeGVsRm9ybWF0KTogRnJhbWUge1xuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICBmcmFtZS5hbGxvYygpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgZnJhbWUgaWYgZ2V0QnVmZmVyIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgc3RhY2sudXNlKGZyYW1lKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQYWNrZXQoKTogUGFja2V0IHtcbiAgY29uc3QgcGt0ID0gbmV3IFBhY2tldCgpO1xuICBwa3QuYWxsb2MoKTtcbiAgcmV0dXJuIHBrdDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYWluUGFja2V0cyhjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCByID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwicmVjZWl2ZVBhY2tldFwiKTtcbiAgICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgIGlmIChwa3QuZHVyYXRpb24gPT09IDBuKSB7XG4gICAgICAgIHBrdC5kdXJhdGlvbiA9IDFuO1xuICAgICAgfVxuICAgICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBwa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZfREVDT0RFUl9QTkcsXG4gIEZGbXBlZ0Vycm9yLFxuICB0eXBlIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgU29mdHdhcmVTY2FsZUNvbnRleHQsXG4gIFNXU19CSUxJTkVBUixcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuZXhwb3J0IGNsYXNzIENvZGVjU3RhdGUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgc3JjOiBGcmFtZTtcbiAgcmVhZG9ubHkgZHN0OiBGcmFtZTtcbiAgcmVhZG9ubHkgcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N3cz86IFNvZnR3YXJlU2NhbGVDb250ZXh0O1xuICBwcml2YXRlIF9wbmc/OiBDb2RlYztcblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRGVjb2RlckJ5TmFtZShGRl9ERUNPREVSX1BORyk7XG4gICAgb2soY29kZWMsIFwicG5nIGRlY29kZXIgdW5hdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIG5ldyBDb2RlY1N0YXRlKHdpZHRoLCBoZWlnaHQsIGNvZGVjKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBuZzogQ29kZWMpIHtcbiAgICB0aGlzLl9wbmcgPSBwbmc7XG4gICAgdGhpcy5zcmMgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICB0aGlzLmRzdCA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQKTtcbiAgICB0aGlzLnBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmVzaCBQTkcgZGVjb2RlciBjb250ZXh0LlxuICAgKiBUaGUgRkZtcGVnIFBORyBkZWNvZGVyIGFjY3VtdWxhdGVzIEFQTkcgYmxlbmRpbmcgc3RhdGVcbiAgICogYWNyb3NzIGZyYW1lcywgc28gYSBzaGFyZWQgaW5zdGFuY2UgY29ycnVwdHMgb3V0cHV0IHdoZW4gZGVjb2Rpbmcgc3RhbmRhbG9uZSBQTkdzLlxuICAgKi9cbiAgYXN5bmMgcG5nKCk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIHRoZSBjdHggaWYgb3BlbjIgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIHN0YWNrLnVzZShwbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gcG5nO1xuICB9XG5cbiAgYXN5bmMgZGVjb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8RnJhbWU+IHtcbiAgICB1c2luZyBwbmcgPSBhd2FpdCB0aGlzLnBuZygpO1xuICAgIHRoaXMucGt0LmRhdGEgPSBwbmdEYXRhO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcuc2VuZFBhY2tldCh0aGlzLnBrdCksIFwicG5nRGVjb2Rlci5zZW5kUGFja2V0XCIpO1xuICAgIHRoaXMucGt0LnVucmVmKCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5yZWNlaXZlRnJhbWUodGhpcy5zcmMpLCBcInBuZ0RlY29kZXIucmVjZWl2ZUZyYW1lXCIpO1xuICAgIHJldHVybiB0aGlzLnNyYztcbiAgfVxuXG4gIGdldCBzd3MoKSB7XG4gICAgaWYgKCF0aGlzLl9zd3MpIHtcbiAgICAgIGNvbnN0IHN3cyA9IG5ldyBTb2Z0d2FyZVNjYWxlQ29udGV4dCgpO1xuICAgICAgY29uc3QgZm10ID0gdGhpcy5zcmMuZm9ybWF0IGFzIEFWUGl4ZWxGb3JtYXQ7XG4gICAgICBzd3MuZ2V0Q29udGV4dChcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgZm10LFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgICBTV1NfQklMSU5FQVIsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3dzID0gc3dzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3dzO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnNyY1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLmRzdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLnBrdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zd3M/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgdHlwZSBGaWx0ZXJDb250ZXh0LFxuICBGaWx0ZXJHcmFwaCxcbiAgRmlsdGVySW5PdXQsXG4gIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIH1cbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGZyZWVzIGN0eCBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgc3RhY2sudXNlKGN0eCk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIHtcbiAgICAgIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIH1cbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IEF1ZGlvRW5jb2RlcihjdHgsIHN0cmVhbSwgb3B0cy5vdXRTYW1wbGVGbXQpO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKGluU2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9pblJhdGUgPSBpblNhbXBsZVJhdGU7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBmcmVlcyB0aGUgZ3JhcGggaWYgZmlsdGVyIHNldHVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgc3RhY2sudXNlKGdyYXBoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgfVxuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIH1cbiAgICBjb25zdCBmbXROYW1lID0gU0FNUExFX0ZNVF9OQU1FW3RoaXMuX291dEZtdF0gPz8gXCJmbHRcIjtcbiAgICBjb25zdCBmaWx0ZXJEZXNjID0gYGFmb3JtYXQ9c2FtcGxlX2ZtdHM9JHtmbXROYW1lfTpzYW1wbGVfcmF0ZXM9JHt0aGlzLl9vdXRSYXRlfTpjaGFubmVsX2xheW91dHM9c3RlcmVvLGFzZXRuc2FtcGxlcz1uPSR7dGhpcy5fZnJhbWVTaXplfTpwPTFgO1xuICAgIGNvbnN0IG91dHB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwiaW5cIiwgZmlsdGVyQ3R4OiBidWZTcmMsIHBhZElkeDogMCB9XSk7XG4gICAgY29uc3QgaW5wdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcIm91dFwiLCBmaWx0ZXJDdHg6IGJ1ZlNpbmssIHBhZElkeDogMCB9XSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLnBhcnNlUHRyKGZpbHRlckRlc2MsIGlucHV0cywgb3V0cHV0cyksIFwiZ3JhcGgucGFyc2VQdHJcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLmNvbmZpZ1N5bmMoKSwgXCJncmFwaC5jb25maWdcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHNyY1tpXSEpKSB7XG4gICAgICAgIHNyY1tpXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5TYW1wbGVzID0gc3JjLmxlbmd0aCA+PiAxO1xuICAgIHVzaW5nIGZyYW1lID0gRnJhbWUuZnJvbUF1ZGlvQnVmZmVyKEJ1ZmZlci5mcm9tKHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCBzcmMuYnl0ZUxlbmd0aCksIHtcbiAgICAgIG5iU2FtcGxlczogblNhbXBsZXMsXG4gICAgICBmb3JtYXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgc2FtcGxlUmF0ZTogdGhpcy5faW5SYXRlLFxuICAgICAgY2hhbm5lbExheW91dDogQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICAgICAgcHRzOiB0aGlzLl9wdHMsXG4gICAgICB0aW1lQmFzZTogeyBudW06IDEsIGRlbjogdGhpcy5faW5SYXRlIH0sXG4gICAgfSk7XG4gICAgdGhpcy5fcHRzICs9IEJpZ0ludChuU2FtcGxlcyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShmcmFtZSksIFwiYnVmZmVyc3JjQWRkRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVmU3JjKSB7XG4gICAgICBhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUobnVsbCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmZyZWUoKTtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX2J1ZlNpbmshLmJ1ZmZlcnNpbmtHZXRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSk7XG4gICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5Db2RlYyhtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2tCaXRzKGJpdHM6IG51bWJlcltdKTogQnVmZmVyIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKGJpdHMubGVuZ3RoID4+IDMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgIGxldCBieXRlID0gMDtcbiAgICBmb3IgKGxldCBiID0gMDsgYiA8IDg7IGIrKykge1xuICAgICAgYnl0ZSA9IChieXRlIDw8IDEpIHwgYml0c1tpICogOCArIGJdITtcbiAgICB9XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfVxuICBmbGFnKHZhbDogYm9vbGVhbiB8IG51bWJlcikge1xuICAgIHRoaXMuYml0cy5wdXNoKHZhbCA/IDEgOiAwKTtcbiAgfVxuICB1ZSh2YWw6IG51bWJlcikge1xuICAgIGNvbnN0IHYgPSB2YWwgKyAxO1xuICAgIGNvbnN0IGxlbiA9IDMyIC0gTWF0aC5jbHozMih2KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgdGhpcy5iaXRzLnB1c2goMCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5iaXRzLnB1c2goKHYgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gICAgfVxuICB9XG4gIGNvcHkoc3JjOiBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgbGVuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaChzcmNbc3RhcnQgKyBpXSEpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQml0UmVhZGVyIHtcbiAgcHJpdmF0ZSBfYml0czogbnVtYmVyW107XG4gIHBvcyA9IDA7XG4gIGNvbnN0cnVjdG9yKGRhdGE6IEJ1ZmZlcikge1xuICAgIHRoaXMuX2JpdHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGIgPSA3OyBiID49IDA7IGItLSkge1xuICAgICAgICB0aGlzLl9iaXRzLnB1c2goKGRhdGFbaV0hID4+IGIpICYgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCBiaXRzKCkge1xuICAgIHJldHVybiB0aGlzLl9iaXRzO1xuICB9XG4gIHJlYWQobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHJlYWRVZSgpOiBudW1iZXIge1xuICAgIGxldCB6ZXJvcyA9IDA7XG4gICAgd2hpbGUgKHRoaXMuX2JpdHNbdGhpcy5wb3NdID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgICAgdGhpcy5wb3MrKztcbiAgICB9XG4gICAgdGhpcy5wb3MrKztcbiAgICBsZXQgdmFsID0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHplcm9zOyBpKyspIHtcbiAgICAgIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICB9XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG4vLyBIRVZDIE5BTCB1bml0IHR5cGVzIChULVJFQy1ILjI2NSBUYWJsZSA3LTEpXG5leHBvcnQgY29uc3QgTkFMX0JMQV9XX0xQID0gMTY7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9XX1JBREwgPSAxOTtcbmV4cG9ydCBjb25zdCBOQUxfSURSX05fTFAgPSAyMDtcbmV4cG9ydCBjb25zdCBOQUxfUlNWX0lSQVBfVkNMMjMgPSAyMztcbmV4cG9ydCBjb25zdCBOQUxfVlBTID0gMzI7XG5leHBvcnQgY29uc3QgTkFMX1NQUyA9IDMzO1xuZXhwb3J0IGNvbnN0IE5BTF9QUFMgPSAzNDtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1BSRUZJWCA9IDM5O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfU1VGRklYID0gNDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFsVW5pdCB7XG4gIHR5cGU6IG51bWJlcjtcbiAgbGF5ZXJJZDogbnVtYmVyO1xuICBkYXRhOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFsVHlwZShoZWFkZXIwOiBudW1iZXIsIGhlYWRlcjE6IG51bWJlcik6IHsgdHlwZTogbnVtYmVyOyBsYXllcklkOiBudW1iZXI7IHRlbXBvcmFsSWQ6IG51bWJlciB9IHtcbiAgY29uc3QgdHlwZSA9IChoZWFkZXIwID4+IDEpICYgMHgzZjtcbiAgY29uc3QgbGF5ZXJJZCA9ICgoaGVhZGVyMCAmIDEpIDw8IDUpIHwgKChoZWFkZXIxID4+IDMpICYgMHgxZik7XG4gIGNvbnN0IHRlbXBvcmFsSWQgPSBoZWFkZXIxICYgMHgwNztcbiAgcmV0dXJuIHsgdHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTmFsSGVhZGVyKHR5cGU6IG51bWJlciwgbGF5ZXJJZDogbnVtYmVyLCB0ZW1wb3JhbElkOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgYnl0ZTAgPSAoKHR5cGUgJiAweDNmKSA8PCAxKSB8ICgobGF5ZXJJZCA+PiA1KSAmIDEpO1xuICBjb25zdCBieXRlMSA9ICgobGF5ZXJJZCAmIDB4MWYpIDw8IDMpIHwgKHRlbXBvcmFsSWQgJiAweDA3KTtcbiAgcmV0dXJuIFtieXRlMCwgYnl0ZTFdO1xufVxuXG4vKiogU3BsaXQgQW5uZXggQiBiaXRzdHJlYW0gaW50byBOQUwgdW5pdHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROYWxVbml0cyhiaXRzdHJlYW06IEJ1ZmZlcik6IE5hbFVuaXRbXSB7XG4gIGNvbnN0IG5hbHM6IE5hbFVuaXRbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgbGV0IHNjTGVuID0gMDtcbiAgICBpZiAoaSArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtpXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDFdID09PSAwICYmIGJpdHN0cmVhbVtpICsgMl0gPT09IDEpIHtcbiAgICAgIHNjTGVuID0gMztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaSArIDQgPCBiaXRzdHJlYW0ubGVuZ3RoICYmXG4gICAgICBiaXRzdHJlYW1baV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMl0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgM10gPT09IDFcbiAgICApIHtcbiAgICAgIHNjTGVuID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmFsU3RhcnQgPSBpICsgc2NMZW47XG4gICAgaWYgKG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFID4gYml0c3RyZWFtLmxlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmV3cml0ZSBuYWxfdW5pdF90eXBlIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbFR5cGUobmFsOiBCdWZmZXIsIG5ld1R5cGU6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcihuZXdUeXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gQ29uZm9ybSBOVkVOQyBvdXRwdXQgdG8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2F2LWZvdW5kYXRpb24vSEVWQy1WaWRlby13aXRoLUFscGhhLUludGVyb3BlcmFiaWxpdHktUHJvZmlsZS5wZGZcblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGFkZEVtdWxhdGlvblByZXZlbnRpb24sXG4gIE5BTF9CTEFfV19MUCxcbiAgTkFMX1JTVl9JUkFQX1ZDTDIzLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbi8vIFBUTCBiaXQgb2Zmc2V0cyB3aXRoaW4gZW11bGF0aW9uLXByZXZlbnRpb24tc3RyaXBwZWQgTkFMIChOQUwgaGVhZGVyIGluY2x1ZGVkKS5cbmNvbnN0IFZQU19QVExfQklUID0gNDg7IC8vIDE2IChOQUwgaGRyKSArIDMyIChWUFMgcHJlZml4KVxuY29uc3QgU1BTX1BUTF9CSVQgPSAyNDsgLy8gMTYgKE5BTCBoZHIpICsgOCAoU1BTIHByZWZpeClcbmNvbnN0IFBUTF9USUVSX0JJVCA9IDI7XG5jb25zdCBQVExfQ09NUEFUMl9CSVQgPSAxMDsgLy8gcHJvZmlsZV9zcGFjZSgyKSArIHRpZXIoMSkgKyBpZGMoNSkgKyBjb21wYXRbMCwxXSgyKVxuY29uc3QgU0xJQ0VfVFlQRV9CID0gMDtcbmNvbnN0IFNMSUNFX1RZUEVfUCA9IDE7XG5cbmZ1bmN0aW9uIHNldEJpdChidWY6IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIHZhbHVlOiAwIHwgMSk6IHZvaWQge1xuICBjb25zdCBieXRlID0gYml0T2Zmc2V0ID4+IDM7XG4gIGNvbnN0IG1hc2sgPSAxIDw8ICg3IC0gKGJpdE9mZnNldCAmIDcpKTtcbiAgY29uc3QgY3VyID0gYnVmW2J5dGVdID8/IDA7XG4gIGJ1ZltieXRlXSA9IHZhbHVlID8gY3VyIHwgbWFzayA6IGN1ciAmIH5tYXNrO1xufVxuXG5mdW5jdGlvbiBwYXRjaFB0bChuYWxEYXRhOiBCdWZmZXIsIHB0bFN0YXJ0Qml0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxEYXRhKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX1RJRVJfQklULCAwKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX0NPTVBBVDJfQklULCAxKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocmJzcCk7XG59XG5cbi8qKiBQYXRjaCBldmVyeSBWUFMvU1BTIE5BTCBpbiBhbiBBbm5leCBCIGJpdHN0cmVhbSBzbyBQVEwgbWF0Y2hlcyBBcHBsZS94MjY1LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoSGV2Y0FscGhhUHRsKGJpdHN0cmVhbTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtKTtcbiAgaWYgKG5hbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJpdHN0cmVhbTtcbiAgfVxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIG5hbHMpIHtcbiAgICBsZXQgZGF0YSA9IG5hbC5kYXRhO1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykge1xuICAgICAgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBWUFNfUFRMX0JJVCk7XG4gICAgfSBlbHNlIGlmIChuYWwudHlwZSA9PT0gTkFMX1NQUykge1xuICAgICAgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBTUFNfUFRMX0JJVCk7XG4gICAgfVxuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuLy8g4pSA4pSA4pSAIHVlKHYpIHJld3JpdGUgaGVscGVycyAoU1BTL1BQUyDigJQgUkJTUCBjYW4gZ3JvdyBmcmVlbHksIG5vIENBQkFDIHRyYWlsaW5nKSDilIDilIBcblxuZnVuY3Rpb24gcmV3cml0ZU9uZVVlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWw6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICBidy5iaXRzLnB1c2goMCk7XG4gIH1cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG5mdW5jdGlvbiByZXdyaXRlVHdvVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDE6IG51bWJlciwgbmV3VmFsMjogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsMSk7XG4gIGJ3LnVlKG5ld1ZhbDIpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIGJ3LmJpdHMucHVzaCgwKTtcbiAgfVxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbi8qKiBBbHBoYSBTUFM6IHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNwcyhzcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IFNQU19TRVFfSURfQklUID0gU1BTX1BUTF9CSVQgKyA5NjsgLy8gUFRMIGlzIDk2IGJpdHMgZm9yIG91ciBwcm9maWxlIGNvbmZpZ1xuICByZXR1cm4gcmV3cml0ZU9uZVVlKHNwcywgU1BTX1NFUV9JRF9CSVQsIDEpO1xufVxuXG4vKiogQWxwaGEgUFBTOiBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMSwgcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhUHBzKHBwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIHJld3JpdGVUd29VZShwcHMsIDE2IC8qIGFmdGVyIE5BTCBoZWFkZXIgKi8sIDEsIDEpO1xufVxuXG4vLyDilIDilIDilIAgU2xpY2UgaGVhZGVyIHJld3JpdGUgKG11c3QgcHJlc2VydmUgQ0FCQUMgYnl0ZSBhbGlnbm1lbnQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZWFkU2UoYnI6IEJpdFJlYWRlcik6IG51bWJlciB7XG4gIGNvbnN0IHVlID0gYnIucmVhZFVlKCk7XG4gIHJldHVybiB1ZSAmIDEgPyAodWUgKyAxKSA+PiAxIDogLSh1ZSA+PiAxKTtcbn1cblxuLy8gSW5saW5lIHN0X3JlZl9waWNfc2V0IChzcHNfZmxhZz0wKTsgc3RScHNJZHggPSBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMg4oaSIGludGVyIHByZWRpY3Rpb24gbWF5IHVzZSBwcmV2IHNldC5cbmZ1bmN0aW9uIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnI6IEJpdFJlYWRlciwgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGludGVyRmxhZyA9IGJyLnJlYWQoMSk7IC8vIGludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb25fZmxhZ1xuICBpZiAoaW50ZXJGbGFnKSB7XG4gICAgY29uc3QgZGVsdGFJZHhNaW51czEgPSBici5yZWFkVWUoKTsgLy8gc3RScHNJZHggPT0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIOKGkiBwcmVzZW50XG4gICAgaWYgKGRlbHRhSWR4TWludXMxICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFwcGxlX2FscGhhOiB1bmV4cGVjdGVkIGRlbHRhX2lkeF9taW51czE9JHtkZWx0YUlkeE1pbnVzMX1gKTtcbiAgICB9XG4gICAgYnIucmVhZCgxKTsgLy8gZGVsdGFfcnBzX3NpZ25cbiAgICBici5yZWFkVWUoKTsgLy8gYWJzX2RlbHRhX3Jwc19taW51czFcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBudW1EZWx0YVBvY3NTZXQwOyBqKyspIHtcbiAgICAgIGNvbnN0IHVzZWQgPSBici5yZWFkKDEpO1xuICAgICAgaWYgKCF1c2VkKSB7XG4gICAgICAgIGJyLnJlYWQoMSk7IC8vIHVzZV9kZWx0YV9mbGFnXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogUGFyc2Ugc2xpY2Vfc2VnbWVudF9oZWFkZXIgdXAgdG8gYnl0ZV9hbGlnbm1lbnQuIFJldHVybnMgYml0IHBvc2l0aW9uIEIgKGVuZCBvZiBoZWFkZXIgY29udGVudCkuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlclRvQWxpZ25tZW50KGJyOiBCaXRSZWFkZXIsIG5hbFR5cGU6IG51bWJlciwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBudW1iZXIge1xuICBici5yZWFkKDE2KTsgLy8gc2tpcCBOQUwgaGVhZGVyXG4gIGlmIChici5yZWFkKDEpICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGV4cGVjdGVkIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWc9MVwiKTtcbiAgfVxuICBjb25zdCBpc0lyYXAgPSBuYWxUeXBlID49IE5BTF9CTEFfV19MUCAmJiBuYWxUeXBlIDw9IE5BTF9SU1ZfSVJBUF9WQ0wyMztcbiAgaWYgKGlzSXJhcCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3Qgc2xpY2VUeXBlID0gYnIucmVhZFVlKCk7XG4gIGlmICghaXNJcmFwKSB7XG4gICAgYnIucmVhZChjZmcubG9nMk1heFBvY0xzYik7IC8vIHNsaWNlX3BpY19vcmRlcl9jbnRfbHNiXG4gICAgY29uc3Qgc3RSZWZQaWNTZXRTcHNGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAoIXN0UmVmUGljU2V0U3BzRmxhZykge1xuICAgICAgcGFyc2VJbmxpbmVTdFJlZlBpY1NldChiciwgY2ZnLm51bURlbHRhUG9jc1NldDApO1xuICAgIH0gZWxzZSBpZiAoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMgPiAxKSB7XG4gICAgICBici5yZWFkKE1hdGguY2VpbChNYXRoLmxvZzIoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMpKSk7XG4gICAgfVxuICAgIGlmIChjZmcubG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGxvbmdfdGVybV9yZWZfcGljcyBwYXRoIHVuaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuICAgIGlmIChjZmcuc3BzVGVtcG9yYWxNdnBFbmFibGVkKSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBzbGljZV90ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnXG4gICAgfVxuICB9XG4gIGlmIChjZmcuc2FvRW5hYmxlZCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19sdW1hX2ZsYWdcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fY2hyb21hX2ZsYWdcbiAgfVxuICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX1AgfHwgc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICBjb25zdCBvdmVycmlkZUZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmIChvdmVycmlkZUZsYWcpIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICAgIGJyLnJlYWQoMSk7IC8vIG12ZF9sMV96ZXJvX2ZsYWdcbiAgICB9XG4gICAgaWYgKGNmZy5jYWJhY0luaXRQcmVzZW50KSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBjYWJhY19pbml0X2ZsYWdcbiAgICB9XG4gICAgYnIucmVhZFVlKCk7IC8vIGZpdmVfbWludXNfbWF4X251bV9tZXJnZV9jYW5kXG4gIH1cbiAgcmVhZFNlKGJyKTsgLy8gc2xpY2VfcXBfZGVsdGFcbiAgaWYgKGNmZy5wcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZykge1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnXG4gIH1cbiAgcmV0dXJuIGJyLnBvcztcbn1cblxuLyoqXG4gKiBSZXdyaXRlIGFscGhhIHNsaWNlIGhlYWRlcjogc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS5cbiAqIFRoZSArMi1iaXQgc2hpZnQgaXMgYWJzb3JiZWQgYnkgZW1pdHRpbmcgYSBmcmVzaCBieXRlX2FsaWdubWVudCB0aGVuIGFwcGVuZGluZyB0aGVcbiAqIG9yaWdpbmFsIENBQkFDIHNsaWNlX3NlZ21lbnRfZGF0YSBieXRlcyB2ZXJiYXRpbS4gQ0FCQUMgYnl0ZSBib3VuZGFyeSBpcyBwcmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihzbGljZTogQnVmZmVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc2xpY2UpO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG5cbiAgY29uc3QgcHJvYmUgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBCID0gcGFyc2VIZWFkZXJUb0FsaWdubWVudChwcm9iZSwgbmFsVHlwZSwgY2ZnKTtcbiAgY29uc3Qgb2xkQWxpZ25CaXRzID0gQiAlIDggPT09IDAgPyA4IDogOCAtIChCICUgOCk7XG4gIGNvbnN0IHNsaWNlRGF0YUJ5dGVPZmZzZXQgPSAoQiArIG9sZEFsaWduQml0cykgLyA4O1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIE5BTCBoZWFkZXJcbiAgfVxuICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWdcbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgfVxuXG4gIGJyLnJlYWRVZSgpOyAvLyBkaXNjYXJkIG9sZCBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuICBidy51ZSgxKTsgLy8gbmV3IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG5cbiAgd2hpbGUgKGJyLnBvcyA8IEIpIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGNvcHkgcmVzdCBvZiBoZWFkZXIgYml0c1xuICB9XG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBieXRlX2FsaWdubWVudDogcmJzcF9hbGlnbm1lbnRfYml0X29uZVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgYncuYml0cy5wdXNoKDApO1xuICB9XG5cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24oQnVmZmVyLmNvbmNhdChbcGFja0JpdHMoYncuYml0cyksIHJic3Auc3ViYXJyYXkoc2xpY2VEYXRhQnl0ZU9mZnNldCldKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIsIEJpdFdyaXRlciwgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IGFkZEVtdWxhdGlvblByZXZlbnRpb24sIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24gfSBmcm9tIFwiLi9uYWxcIjtcblxuaW50ZXJmYWNlIFBhcnNlZFBUTCB7XG4gIHB0bFN0YXJ0OiBudW1iZXI7XG4gIHB0bEVuZDogbnVtYmVyO1xuICBwdGxCaXRzOiBudW1iZXJbXTtcbiAgbWF4U3ViTGF5ZXJzTWludXMxOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RQVEwodnBzRGF0YTogQnVmZmVyKTogUGFyc2VkUFRMIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24odnBzRGF0YSkpO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyB2cHNfaWRcbiAgYnIucmVhZCgyKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbCArIGF2YWlsYWJsZVxuICBpZiAoYnIucmVhZCg2KSA+IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIH1cbiAgY29uc3QgbWF4U3ViTGF5ZXJzTWludXMxID0gYnIucmVhZCgzKTtcbiAgYnIucmVhZCgxICsgMTYpOyAvLyB0ZW1wb3JhbF9uZXN0aW5nICsgcmVzZXJ2ZWRcblxuICBjb25zdCBwdGxTdGFydCA9IGJyLnBvcztcbiAgYnIucmVhZCg5Nik7IC8vIGdlbmVyYWwgUFRMIChwcm9maWxlX3NwYWNlICsgdGllciArIGlkYyArIGNvbXBhdCArIGNvbnN0cmFpbnRzICsgbGV2ZWwpXG4gIGlmIChtYXhTdWJMYXllcnNNaW51czEgPiAwKSB7XG4gICAgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIH1cbiAgcmV0dXJuIHsgcHRsU3RhcnQsIHB0bEVuZDogYnIucG9zLCBwdGxCaXRzOiBici5iaXRzLCBtYXhTdWJMYXllcnNNaW51czEgfTtcbn1cblxuLyoqIFdyaXRlIGJhc2UgVlBTIGZpZWxkcyBmb3IgMi1sYXllciBhbHBoYS4gKi9cbmZ1bmN0aW9uIHdyaXRlQmFzZVZQUyhidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCkge1xuICBidy53KDB4NDAwMSwgMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJ3LncoMCwgNCk7IC8vIHZwc19pZFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfYXZhaWxhYmxlXG4gIGJ3LncoMSwgNik7IC8vIG1heF9sYXllcnNfbWludXMxID0gMVxuICBidy53KHB0bC5tYXhTdWJMYXllcnNNaW51czEsIDMpO1xuICAvLyB0ZW1wb3JhbF9uZXN0aW5nOiB0cnVlIHdoZW4gc2luZ2xlIHN1Yi1sYXllciAoYWxsIHJlZnMgbGF5ZXIgMClcbiAgYncuZmxhZyhwdGwubWF4U3ViTGF5ZXJzTWludXMxID09PSAwKTtcbiAgYncudygweGZmZmYsIDE2KTsgLy8gcmVzZXJ2ZWRcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy5mbGFnKDEpOyAvLyBzdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19wcmVzZW50XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykge1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhEZWNQaWNCdWZmZXJpbmcgLSAxXG4gICAgYncudWUoMik7IC8vIG51bVJlb3JkZXJQaWNzXG4gICAgYncudWUoNCk7IC8vIG1heExhdGVuY3lJbmNyZWFzZSArIDFcbiAgfVxuXG4gIGJ3LncoMSwgNik7IC8vIG1heF9udWhfbGF5ZXJfaWQgPSAxXG4gIGJ3LnVlKDEpOyAvLyBudW1fbGF5ZXJfc2V0c19taW51czEgPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzBdXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzFdXG4gIGJ3LmZsYWcoMCk7IC8vIHRpbWluZ19pbmZvX3ByZXNlbnRcbiAgYncuZmxhZygxKTsgLy8gdnBzX2V4dGVuc2lvbl9mbGFnXG4gIGJ3LmFsaWduKDEpOyAvLyBleHRlbnNpb24gYWxpZ25tZW50IGJpdHMgPSAxXG59XG5cbi8qKiBXcml0ZSBWUFMgZXh0ZW5zaW9uIG1hdGNoaW5nIHgyNjUgNC4xIEVOQUJMRV9BTFBIQS4gKi9cbmZ1bmN0aW9uIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAvLyBFeHRlbnNpb24gUFRMOiBsZXZlbF9pZGMgb25seSAocHJvZmlsZVByZXNlbnRGbGFnPTApXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxFbmQgLSA4LCA4KTtcbiAgaWYgKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICAgIGJ3LncoMCwgMik7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSB7XG4gICAgICBidy53KDAsIDIpO1xuICAgIH1cbiAgfVxuXG4gIGJ3LmZsYWcoMCk7IC8vIHNwbGl0dGluZ19mbGFnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIGJ3LmZsYWcoaSA9PT0gMiB8fCBpID09PSAzKTsgLy8gc2NhbGFiaWxpdHk6IHNwYXRpYWwgKyBhdXhcbiAgfVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzBdID0gMVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzFdID0gMVxuICBidy5mbGFnKDEpOyAvLyBudWhfbGF5ZXJfaWRfcHJlc2VudFxuICBidy53KDEsIDYpOyAvLyBsYXllcl9pZF9pbl9udWhbMV0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVswXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzFdID0gQVVYX0FMUEhBXG4gIGJ3LncoMCwgNCk7IC8vIHZpZXdfaWRfbGVuID0gMFxuXG4gIGJ3LmZsYWcoMCk7IC8vIGRpcmVjdF9kZXBlbmRlbmN5X2ZsYWdbMV1bMF1cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfbGF5ZXJfc2V0c1xuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJzX21heF9taW51czFfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBtYXhfdGlkX3JlZl9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfcmVmX2xheWVyc19hY3RpdmVcblxuICAvLyBGRm1wZWcgbG9vcHMgZnJvbSBpbmRleCAyIHRvIG5iX3B0bC0xLCBzbyBucHRsX20xPTIg4oaSIDEgZW50cnkgYXQgaW5kZXggMlxuICBidy51ZSgyKTsgLy8gdnBzX251bV9wcm9maWxlX3RpZXJfbGV2ZWxfbWludXMxXG4gIGJ3LmZsYWcoMSk7IC8vIHByb2ZpbGVfcHJlc2VudF9mbGFnWzJdXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfb2xzc1xuICBidy53KDAsIDIpOyAvLyBkZWZhdWx0X291dHB1dF9sYXllcl9pZGNcbiAgYncudygxLCAyKTsgLy8gcHRsX2lkeFsxXVswXSA9IDEgKGNlaWxfbG9nMigzKSA9IDIgYml0cylcbiAgYncudygyLCAyKTsgLy8gcHRsX2lkeFsxXVsxXSA9IDJcblxuICBidy51ZSgwKTsgLy8gdnBzX251bV9yZXBfZm9ybWF0c19taW51czFcbiAgYncudyh3aWR0aCwgMTYpO1xuICBidy53KGhlaWdodCwgMTYpO1xuICBidy5mbGFnKDEpOyAvLyBjaHJvbWFfYW5kX2JpdF9kZXB0aF92cHNfcHJlc2VudFxuICBidy53KDEsIDIpOyAvLyBjaHJvbWFfZm9ybWF0X2lkYyA9IDQ6MjowXG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBidy5mbGFnKDApOyAvLyBjb25mb3JtYW5jZV93aW5kb3dfdnBzX2ZsYWdcblxuICBidy5mbGFnKDEpOyAvLyBtYXhfb25lX2FjdGl2ZV9yZWZfbGF5ZXJcbiAgYncuZmxhZygwKTsgLy8gcG9jX2xzYl9hbGlnbmVkXG4gIGJ3LmZsYWcoMSk7IC8vIHBvY19sc2Jfbm90X3ByZXNlbnRcblxuICAvLyBEUEIgZm9yIE9MUyAxICgyIGxheWVycywgMSBzdWItbGF5ZXIpXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcl9mbGFnX2luZm9fcHJlc2VudFxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAwKVxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAxKVxuICBidy51ZSgwKTsgLy8gbWF4X251bV9yZW9yZGVyX3BpY3NcbiAgYncudWUoMCk7IC8vIG1heF9sYXRlbmN5X2luY3JlYXNlXG5cbiAgYncudWUoMCk7IC8vIGRpcmVjdF9kZXBfdHlwZV9sZW5fbWludXMyXG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1xuICBidy51ZSgwKTsgLy8gbm9uX3Z1aV9leHRlbnNpb25fbGVuZ3RoXG4gIGJ3LmZsYWcoMCk7IC8vIHZwc192dWlfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyB2cHNfZXh0ZW5zaW9uMl9mbGFnXG59XG5cbi8qKlxuICogQnVpbGQgYSBjb21wbGV0ZSBhbHBoYSBWUFMgZnJvbSBzY3JhdGNoLCB1c2luZyB0aGUgb3JpZ2luYWwgTlZFTkMgVlBTXG4gKiBvbmx5IGFzIGEgc291cmNlIGZvciB0aGUgUFRMIChwcm9maWxlL3RpZXIvbGV2ZWwpIGJ5dGVzLlxuICogTWF0Y2hlcyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEgVlBTIHN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFWUFModnBzRGF0YTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHB0bCA9IGV4dHJhY3RQVEwodnBzRGF0YSk7XG4gIGlmICghcHRsKSB7XG4gICAgcmV0dXJuIHZwc0RhdGE7XG4gIH1cblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgd3JpdGVCYXNlVlBTKGJ3LCBwdGwpO1xuICB3cml0ZVZQU0V4dGVuc2lvbihidywgcHRsLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBidy5iaXRzLnB1c2goMSk7IC8vIFJCU1Agc3RvcCBiaXRcbiAgYncuYWxpZ24oMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgcmV3cml0ZUFscGhhUHBzLCByZXdyaXRlQWxwaGFTbGljZUhlYWRlciwgcmV3cml0ZUFscGhhU3BzIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBlbmNvZGVOYWxIZWFkZXIsXG4gIE5BTF9QUFMsXG4gIE5BTF9TRUlfUFJFRklYLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICB0eXBlIE5hbFVuaXQsXG4gIHJld3JpdGVOYWxMYXllcklkLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhVlBTIH0gZnJvbSBcIi4vdnBzXCI7XG5cbi8vIEJHUkEgYWxwaGEg4oaSIFkgcGxhbmUgb2YgcGFja2VkIFlVVjQyMFAgKGNhbGxlciBwcmUtZmlsbHMgVVY9MTI4KTsgVWludDMyIGZhc3QgcGF0aDogQkdSQSBMRSB1MzIgPj4+IDI0ID0gQSBieXRlLlxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWU6IEZyYW1lLCBidWY6IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBzcmMgPSBiZ3JhRnJhbWUuZGF0YT8uWzBdO1xuICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICBpZiAoIXNyYyB8fCAhc3JjTHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJleHRyYWN0QWxwaGE6IG1pc3NpbmcgQkdSQSBkYXRhXCIpO1xuICB9XG4gIGNvbnN0IHcgPSBiZ3JhRnJhbWUud2lkdGg7XG4gIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICBpZiAoc3JjLmJ5dGVPZmZzZXQgJSA0ID09PSAwICYmIHNyY0xzID09PSB3ICogNCkge1xuICAgIGNvbnN0IHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCB5U2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U2l6ZTsgaSsrKSB7XG4gICAgICBidWZbaV0gPSBzcmMzMltpXSEgPj4+IDI0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGg7IHkrKykge1xuICAgICAgY29uc3Qgcm93QmFzZSA9IHkgKiBzcmNMcyArIDM7XG4gICAgICBjb25zdCBkc3RCYXNlID0geSAqIHc7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHc7IHgrKykge1xuICAgICAgICBidWZbZHN0QmFzZSArIHhdID0gc3JjW3Jvd0Jhc2UgKyB4ICogNF0hO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zIHtcbiAgYmFzZUV4dHJhZGF0YTogQnVmZmVyO1xuICBhbHBoYUV4dHJhZGF0YTogQnVmZmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLy8gQXBwbGUgSEVWQyBBbHBoYSBQcm9maWxlOiBhbHBoYSBTUFMgc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkPTEsIGFscGhhIFBQUyBwaWMrc2VxIGlkPTEuXG5mdW5jdGlvbiByZXdyaXRlQWxwaGFQYXJhbVNldCh0eXBlOiBudW1iZXIsIGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGlmICh0eXBlID09PSBOQUxfU1BTKSB7XG4gICAgcmV0dXJuIHJld3JpdGVBbHBoYVNwcyhkYXRhKTtcbiAgfVxuICBpZiAodHlwZSA9PT0gTkFMX1BQUykge1xuICAgIHJldHVybiByZXdyaXRlQWxwaGFQcHMoZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gTkFMX1ZQUyA/IGJ1aWxkQWxwaGFWUFMobmFsLmRhdGEsIG9wdHMud2lkdGgsIG9wdHMuaGVpZ2h0KSA6IG5hbC5kYXRhO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gICAgaWYgKCFlbWl0dGVkLmhhcyhuYWwudHlwZSkpIHtcbiAgICAgIGVtaXR0ZWQuYWRkKG5hbC50eXBlKTtcbiAgICAgIGZvciAoY29uc3QgYWxwaGFOYWwgb2YgYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXSkge1xuICAgICAgICBjb25zdCBhRGF0YSA9IHJld3JpdGVBbHBoYVBhcmFtU2V0KG5hbC50eXBlLCBhbHBoYU5hbC5kYXRhKTtcbiAgICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChhRGF0YSwgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNodW5rcy5wdXNoKGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpOiBCdWZmZXIge1xuICBjb25zdCBwYXlsb2FkVHlwZSA9IDE2NTtcbiAgY29uc3QgcGF5bG9hZFNpemUgPSA0O1xuICBjb25zdCBbaDAsIGgxXSA9IGVuY29kZU5hbEhlYWRlcihOQUxfU0VJX1BSRUZJWCwgMCwgMSk7XG5cbiAgY29uc3QgYml0czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgd3JpdGVCaXRzID0gKHZhbDogbnVtYmVyLCBuOiBudW1iZXIpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBiaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfTtcblxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2FuY2VsX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX3VzZV9pZGMgKDAgPSB1bnNwZWNpZmllZC9wcmVtdWx0aXBsaWVkOyBtYXRjaGVzIHgyNjUgRU5BQkxFX0FMUEhBKVxuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfYml0X2RlcHRoX21pbnVzOFxuICB3cml0ZUJpdHMoMCwgOSk7IC8vIGFscGhhX3RyYW5zcGFyZW50X3ZhbHVlXG4gIHdyaXRlQml0cygyNTUsIDkpOyAvLyBhbHBoYV9vcGFxdWVfdmFsdWVcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2luY3JfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2xpcF9mbGFnXG4gIHdyaXRlQml0cygxLCAxKTsgLy8gYnl0ZSBhbGlnbm1lbnRcbiAgd2hpbGUgKGJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIHdyaXRlQml0cygwLCAxKTtcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gICAgQnVmZmVyLmZyb20oW2gwLCBoMV0pLFxuICAgIEJ1ZmZlci5mcm9tKFtwYXlsb2FkVHlwZSwgcGF5bG9hZFNpemVdKSxcbiAgICBwYWNrQml0cyhiaXRzKSxcbiAgICBCdWZmZXIuZnJvbShbMHg4MF0pLFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVybGVhdmVBY2Nlc3NVbml0cyhiYXNlTmFsczogTmFsVW5pdFtdLCBhbHBoYU5hbHM6IE5hbFVuaXRbXSwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBCdWZmZXIge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBuYWwuZGF0YSk7XG4gIH1cbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlIDwgTkFMX1ZQUykge1xuICAgICAgY29uc3QgZGF0YSA9IHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyKG5hbC5kYXRhLCBuYWwudHlwZSwgY2ZnKTtcbiAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoZGF0YSwgMSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GLCB0eXBlIEFWUGFja2V0RmxhZyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHsgaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgUGVuZGluZ1BhY2tldCB7XG4gIGRhdGE6IEJ1ZmZlcjtcbiAgcHRzOiBiaWdpbnQ7XG4gIGR0czogYmlnaW50O1xuICBkdXJhdGlvbjogYmlnaW50O1xuICBmbGFnczogQVZQYWNrZXRGbGFnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1YWxMYXllck11eE9wdGlvbnMge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG4gIGhldmNDZmc6IE52ZW5jSGV2Y0NvbmZpZztcbn1cblxuLy8gRHJhaW5zIHRoZSBiYXNlICsgYWxwaGEgTlZFTkMgc2Vzc2lvbnMgYW5kIHdyaXRlcyBpbnRlcmxlYXZlZCBIRVZDLWFscGhhIGFjY2VzcyB1bml0cy5cbmV4cG9ydCBjbGFzcyBEdWFsTGF5ZXJNdXgge1xuICBwcml2YXRlIF9zOiBEdWFsTGF5ZXJNdXhPcHRpb25zO1xuICBwcml2YXRlIF9iYXNlUXVldWU6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuICBwcml2YXRlIF9hbHBoYVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzOiBEdWFsTGF5ZXJNdXhPcHRpb25zKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCB9ID0gdGhpcy5fcztcbiAgICAvLyBEcmFpbiBlYWNoIHNlc3Npb24gZnVsbHkg4oCUIGluZGVwZW5kZW50IE5WRU5DIHNlc3Npb25zIHJ1biBhIGZyYW1lIGFwYXJ0IHRyYW5zaWVudGx5LlxuICAgIHRoaXMuX2Jhc2VRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYmFzZUN0eCwgYmFzZVBrdCwgXCJiYXNlXCIpKSk7XG4gICAgdGhpcy5fYWxwaGFRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYWxwaGFDdHgsIGFscGhhUGt0LCBcImFscGhhXCIpKSk7XG4gICAgLy8gYmY9MCDihpIgbm8gcmVvcmRlcjsgcXVldWUgaW5kZXggTiBpcyB0aGUgc2FtZSBmcmFtZSBmb3IgYm90aC4gTGVmdG92ZXIgd2FpdHMgZm9yIG5leHQgZHJhaW4uXG4gICAgd2hpbGUgKHRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGF3YWl0IHRoaXMud3JpdGVQYWlyKHRoaXMuX2Jhc2VRdWV1ZS5zaGlmdCgpISwgdGhpcy5fYWxwaGFRdWV1ZS5zaGlmdCgpISwgbXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVucGFpcmVkIGxlZnRvdmVycyBhZnRlciBFT0YgPSB0cnVlIGJhc2UvYWxwaGEgZGVzeW5jOyByZXR1cm5zIGEgZGVzY3JpcHRpb24sIGVsc2UgdW5kZWZpbmVkLlxuICBkZXN5bmNBZnRlckVvZigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5fYmFzZVF1ZXVlLmxlbmd0aCAmJiAhdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBgYmFzZT0ke3RoaXMuX2Jhc2VRdWV1ZS5sZW5ndGh9LCBhbHBoYT0ke3RoaXMuX2FscGhhUXVldWUubGVuZ3RofSB1bnBhaXJlZGA7XG4gIH1cblxuICAvLyBFQUdBSU4vRU9GID0gbm9ybWFsIHN0b3A7IGFueSBvdGhlciBuZWdhdGl2ZSBpcyBhIHJlYWwgZmF1bHQsIG5vdCBcImRyYWluZWRcIi5cbiAgcHJpdmF0ZSBhc3luYyByZWNlaXZlQWxsKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPFBlbmRpbmdQYWNrZXRbXT4ge1xuICAgIGNvbnN0IG91dDogUGVuZGluZ1BhY2tldFtdID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICBpZiAocmV0ID49IDApIHtcbiAgICAgICAgb3V0LnB1c2godGhpcy5zbmFwc2hvdChwa3QpKTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJldCA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgcmV0ID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgfVxuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHJldCwgYG52ZW5jLiR7dGFnfS5yZWNlaXZlUGFja2V0YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzbmFwc2hvdChwa3Q6IFBhY2tldCk6IFBlbmRpbmdQYWNrZXQge1xuICAgIC8vIHBrdC5kYXRhIGlzIG5hdGl2ZSBtZW1vcnkgZnJlZWQgb24gdW5yZWYg4oCUIGNvcHkgYmVmb3JlIHF1ZXVlaW5nLlxuICAgIHJldHVybiB7IGRhdGE6IEJ1ZmZlci5mcm9tKHBrdC5kYXRhISksIHB0czogcGt0LnB0cywgZHRzOiBwa3QuZHRzLCBkdXJhdGlvbjogcGt0LmR1cmF0aW9uLCBmbGFnczogcGt0LmZsYWdzIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdyaXRlUGFpcihiYXNlOiBQZW5kaW5nUGFja2V0LCBhbHBoYTogUGVuZGluZ1BhY2tldCwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBiYXNlQ3R4LCBzdHJlYW0sIGhldmNDZmcgfSA9IHRoaXMuX3M7XG4gICAgLy8gUGF0Y2ggaW4tYmFuZCBWUFMvU1BTIFBUTCBiaXRzIGZvciBBcHBsZS1WVEIgY29tcGF0IChlbmNvZGVyIHJlcGVhdHMgaGVhZGVycyBwZXIgSURSKS5cbiAgICBjb25zdCBpbnRlcmxlYXZlZCA9IGludGVybGVhdmVBY2Nlc3NVbml0cyhzcGxpdE5hbFVuaXRzKGJhc2UuZGF0YSksIHNwbGl0TmFsVW5pdHMoYWxwaGEuZGF0YSksIGhldmNDZmcpO1xuICAgIC8vIGRhdGEgc2V0dGVyIHdpcGVzIHB0cy9kdHMvZHVyYXRpb24vZmxhZ3Mg4oCUIHJlc3RvcmU7IGZsYWdzJyBLRVkgYml0IGRyaXZlcyBtb3Ygc3Rzcy5cbiAgICBiYXNlUGt0LmRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bChpbnRlcmxlYXZlZCk7XG4gICAgYmFzZVBrdC5wdHMgPSBiYXNlLnB0cztcbiAgICBiYXNlUGt0LmR0cyA9IGJhc2UuZHRzO1xuICAgIGJhc2VQa3QuZHVyYXRpb24gPSBiYXNlLmR1cmF0aW9uID09PSAwbiA/IDFuIDogYmFzZS5kdXJhdGlvbjtcbiAgICBiYXNlUGt0LmZsYWdzID0gYmFzZS5mbGFncztcbiAgICBiYXNlUGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQoYmFzZVBrdCk7XG4gICAgYmFzZVBrdC51bnJlZigpO1xuICB9XG59XG4iLCIvLyBQYXJzZSBOVkVOQyBTUFMvUFBTIGV4dHJhZGF0YSBhdCBlbmNvZGVyIGluaXQgdG8gZGVyaXZlIHNsaWNlLWhlYWRlciBwYXJzZXIgZmxhZ3M7IHRocm93cyBpZiBOVkVOQyBkZWZhdWx0cyBzaGlmdC5cblxuaW1wb3J0IHsgQml0UmVhZGVyIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBOQUxfUFBTLCBOQUxfU1BTLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLCBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnZlbmNIZXZjQ29uZmlnIHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuO1xuICBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gZmFpbChmaWVsZDogc3RyaW5nLCBnb3Q6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgaGV2Y19hbHBoYTogTlZFTkMgU1BTL1BQUyB1bnN1cHBvcnRlZDogJHtmaWVsZH09JHtnb3R9LCBleHBlY3RlZCAke2V4cGVjdGVkfWApO1xufVxuXG5mdW5jdGlvbiBza2lwUHRsKGJyOiBCaXRSZWFkZXIsIG1heFN1YkxheWVyczogbnVtYmVyKTogdm9pZCB7XG4gIGJyLnJlYWQoMiArIDEgKyA1KTsgLy8gcHJvZmlsZV9zcGFjZSwgdGllciwgcHJvZmlsZV9pZGNcbiAgYnIucmVhZCgzMik7IC8vIHByb2ZpbGVfY29tcGF0aWJpbGl0eV9mbGFnWzAuLjMxXVxuICBici5yZWFkKDQ4KTsgLy8gNCBzb3VyY2UvcGFja2VkIGZsYWdzICsgNDMgY29uc3RyYWludC9yZXNlcnZlZCArIDEgaW5ibGRcbiAgYnIucmVhZCg4KTsgLy8gbGV2ZWxfaWRjXG4gIGNvbnN0IHN1YlByb2ZpbGVQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBzdWJMZXZlbFByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBzdWJQcm9maWxlUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICAgIHN1YkxldmVsUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGlmIChtYXhTdWJMYXllcnMgPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IG1heFN1YkxheWVyczsgaSA8IDg7IGkrKykge1xuICAgICAgYnIucmVhZCgyKTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIGlmIChzdWJQcm9maWxlUHJlc2VudFtpXSkge1xuICAgICAgYnIucmVhZCg4ICsgMzIgKyA0OCk7XG4gICAgfVxuICAgIGlmIChzdWJMZXZlbFByZXNlbnRbaV0pIHtcbiAgICAgIGJyLnJlYWQoOCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3BzKHNwc1Jic3A6IEJ1ZmZlcik6IHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xufSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihzcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gc3BzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgbWF4U3ViTGF5ZXJzID0gYnIucmVhZCgzKTtcbiAgLy8gYWxwaGFfZGFyd2luLnJld3JpdGVBbHBoYVNwcyArIHZwcy5leHRyYWN0UFRMIGhhcmRjb2RlIDk2LWJpdCBQVEwg4oCUIG9ubHkgdmFsaWQgd2hlbiBzdWJfbGF5ZXJzPTAuXG4gIGlmIChtYXhTdWJMYXllcnMgIT09IDApIHtcbiAgICBmYWlsKFwic3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMVwiLCBtYXhTdWJMYXllcnMsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBzcHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnXG4gIHNraXBQdGwoYnIsIG1heFN1YkxheWVycyk7XG4gIGJyLnJlYWRVZSgpOyAvLyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgY2hyb21hRm9ybWF0ID0gYnIucmVhZFVlKCk7XG4gIGlmIChjaHJvbWFGb3JtYXQgPT09IDMpIHtcbiAgICBmYWlsKFwiY2hyb21hX2Zvcm1hdF9pZGNcIiwgY2hyb21hRm9ybWF0LCBcIuKJoDNcIik7XG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXNcbiAgYnIucmVhZFVlKCk7IC8vIHBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgY29uc3QgbG9nMk1heFBvY0xzYiA9IGJyLnJlYWRVZSgpICsgNDtcbiAgY29uc3Qgc3ViT3JkZXJJbmZvID0gYnIucmVhZCgxKTtcbiAgY29uc3Qgb3JkZXJDb3VudCA9IHN1Yk9yZGVySW5mbyA/IG1heFN1YkxheWVycyArIDEgOiAxO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyQ291bnQ7IGkrKykge1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInNjYWxpbmdfbGlzdF9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIGFtcF9lbmFibGVkX2ZsYWdcbiAgY29uc3Qgc2FvRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInBjbV9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGNvbnN0IG51bVN0UnBzID0gYnIucmVhZFVlKCk7XG4gIGlmIChudW1TdFJwcyA+IDEpIHtcbiAgICBmYWlsKFwibnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzXCIsIG51bVN0UnBzLCBcIuKJpDFcIik7XG4gIH1cbiAgbGV0IG51bURlbHRhUG9jc1NldDAgPSAwO1xuICBpZiAobnVtU3RScHMgPT09IDEpIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBudW1EZWx0YVBvY3NTZXQwID0gbnVtTmVnICsgbnVtUG9zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgfVxuICBjb25zdCBsb25nVGVybVJlZlBpY3NQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHtcbiAgICBmYWlsKFwibG9uZ190ZXJtX3JlZl9waWNzX3ByZXNlbnRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgY29uc3Qgc3BzVGVtcG9yYWxNdnBFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgcmV0dXJuIHtcbiAgICBsb2cyTWF4UG9jTHNiLFxuICAgIHNhb0VuYWJsZWQsXG4gICAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtU3RScHMsXG4gICAgbnVtRGVsdGFQb2NzU2V0MCxcbiAgICBsb25nVGVybVJlZlBpY3NQcmVzZW50LFxuICAgIHNwc1RlbXBvcmFsTXZwRW5hYmxlZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQcHMocHBzUmJzcDogQnVmZmVyKTogeyBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuOyBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbiB9IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHBwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkVWUoKTsgLy8gcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZCgxKTsgLy8gZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyBvdXRwdXRfZmxhZ19wcmVzZW50X2ZsYWdcbiAgY29uc3QgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMgPSBici5yZWFkKDMpO1xuICBpZiAobnVtRXh0cmFTbGljZUhlYWRlckJpdHMgIT09IDApIHtcbiAgICBmYWlsKFwibnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRzXCIsIG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gc2lnbl9kYXRhX2hpZGluZ19lbmFibGVkX2ZsYWdcbiAgY29uc3QgY2FiYWNJbml0UHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gaW5pdF9xcF9taW51czI2IChzZSwgYnV0IHVlIHBhcnNlciBmaW5lIHRvIGFkdmFuY2UpXG4gIGJyLnJlYWQoMSk7IC8vIGNvbnN0cmFpbmVkX2ludHJhX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc2Zvcm1fc2tpcF9lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBici5yZWFkVWUoKTsgLy8gY3VfcXBfZGVsdGFfZW5hYmxlZCDihpIgZGlmZl9jdV9xcF9kZWx0YV9kZXB0aFxuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY2JfcXBfb2Zmc2V0XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY3JfcXBfb2Zmc2V0XG4gIGJyLnJlYWQoMSk7IC8vIHBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX2JpcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zcXVhbnRfYnlwYXNzX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGZhaWwoXCJ0aWxlc19lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIGVudHJvcHlfY29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgY29uc3QgZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50ID0gYnIucmVhZCgxKTtcbiAgbGV0IHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBmYWxzZTtcbiAgaWYgKGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIGRlYmxvY2tpbmdfZmlsdGVyX292ZXJyaWRlX2VuYWJsZWRfZmxhZ1xuICAgIHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBici5yZWFkKDEpID09PSAxOyAvLyBwcHNfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZ1xuICAgIGlmICghc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSkge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkVWUoKTsgLy8gYmV0YS90YyBvZmZzZXRzIChzZSB2aWEgdWUgYWR2YW5jZSlcbiAgICB9XG4gIH1cbiAgLy8gc2xpY2VfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgcHJlc2VudCBpZmYgUFBTIGFjcm9zcy1zbGljZXMgZW5hYmxlZCAmJiAhc2xpY2VfZGVibG9ja2luZ19kaXNhYmxlZC5cbiAgY29uc3QgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgPSBwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCAmJiAhc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZTtcbiAgcmV0dXJuIHsgY2FiYWNJbml0UHJlc2VudCwgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnZlbmNIZXZjQ29uZmlnKGV4dHJhZGF0YTogQnVmZmVyKTogTnZlbmNIZXZjQ29uZmlnIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoZXh0cmFkYXRhKTtcbiAgY29uc3Qgc3BzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9TUFMpO1xuICBjb25zdCBwcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1BQUyk7XG4gIGlmICghc3BzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogU1BTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICB9XG4gIGlmICghcHBzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogUFBTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICB9XG4gIGNvbnN0IHMgPSBwYXJzZVNwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNwcy5kYXRhKSk7XG4gIGNvbnN0IHAgPSBwYXJzZVBwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHBwcy5kYXRhKSk7XG4gIHJldHVybiB7IC4uLnMsIC4uLnAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICBGRl9FTkNPREVSX0hFVkNfTlZFTkMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHR5cGUgeyBId1ZpZGVvRW5jb2Rlck9wdGlvbnMgfSBmcm9tIFwiLi4vdmlkZW90b29sYm94XCI7XG5pbXBvcnQgeyBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgRHVhbExheWVyTXV4IH0gZnJvbSBcIi4vZHVhbF9sYXllcl9tdXhcIjtcbmltcG9ydCB7IHR5cGUgTnZlbmNIZXZjQ29uZmlnLCBwYXJzZU52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgYWxwaGFTd0ZyYW1lOiBGcmFtZTtcbiAgYWxwaGFCdWY6IEJ1ZmZlcjtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX211eDogRHVhbExheWVyTXV4O1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9tdXggPSBuZXcgRHVhbExheWVyTXV4KHtcbiAgICAgIGJhc2VDdHg6IHMuYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4OiBzLmFscGhhQ3R4LFxuICAgICAgYmFzZVBrdDogcy5iYXNlUGt0LFxuICAgICAgYWxwaGFQa3Q6IHMuYWxwaGFQa3QsXG4gICAgICBzdHJlYW06IHMuc3RyZWFtLFxuICAgICAgaGV2Y0NmZzogcy5oZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPE52ZW5jRHVhbExheWVyRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9IRVZDX05WRU5DKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX252ZW5jIGVuY29kZXIgbm90IGZvdW5kXCIpO1xuICAgIH1cblxuICAgIC8vIHRpZXI9bWFpbiBtYXRjaGVzIEFwcGxlIFZpZGVvVG9vbGJveDsgbWFjT1MgQ2hyb21lIHJlcXVpcmVzIE1haW4gdGllciBmb3IgSEVWQyBhbHBoYSBkZWNvZGUuXG4gICAgY29uc3QgbnZlbmNPcHRzID0geyBwcmVzZXQ6IFwicDRcIiwgYmY6IFwiMFwiLCB0aWVyOiBcIm1haW5cIiB9O1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgb3B0aW9uczogbnZlbmNPcHRzIH07XG4gICAgLy8gQkdSQSBkaXJlY3QgKE5WRU5DIGNvbnZlcnRzLCBubyBDUFUgU1dTKTsgc3RhY2sgZnJlZXMgZXZlcnkgbmF0aXZlIGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3MsIG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgYmFzZUN0eCA9IHN0YWNrLnVzZShhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEgfSwgXCJudmVuYy5iYXNlLm9wZW4yXCIpKTtcbiAgICBjb25zdCBhbHBoYUN0eCA9IHN0YWNrLnVzZShhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKSk7XG5cbiAgICBpZiAoIWJhc2VDdHguZXh0cmFEYXRhIHx8ICFhbHBoYUN0eC5leHRyYURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm52ZW5jOiBjb2RlYyBleHRyYWRhdGEgbWlzc2luZ1wiKTtcbiAgICB9XG4gICAgY29uc3QgaGV2Y0NmZyA9IHBhcnNlTnZlbmNIZXZjQ29uZmlnKGJhc2VDdHguZXh0cmFEYXRhKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG4gICAgY29uc3QgdW5pZmllZCA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICBiYXNlRXh0cmFkYXRhOiBiYXNlQ3R4LmV4dHJhRGF0YSxcbiAgICAgIGFscGhhRXh0cmFkYXRhOiBhbHBoYUN0eC5leHRyYURhdGEsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICB9KTtcbiAgICAvLyBBcHBsZS1WVEIgY29tcGF0OiByZXdyaXRlIFZQUytTUFMgUFRMIGJpdHMgdG8gbWF0Y2ggeDI2NS9WVEIgb3V0cHV0ICh0aWVyPU1haW4sIGNvbXBhdFsyXT0xKS5cbiAgICBzdHJlYW0uY29kZWNwYXIuZXh0cmFkYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwodW5pZmllZCk7XG5cbiAgICBjb25zdCB5U2l6ZSA9IHdpZHRoICogaGVpZ2h0O1xuICAgIC8vIFlVVjQyMFAgY2hyb21hIHBsYW5lcyBhcmUgY2VpbCh3LzIpw5djZWlsKGgvMik7IGZsb29yIHVuZGVyZmxvd3Mgb24gb2RkIGRpbWVuc2lvbnMuXG4gICAgY29uc3QgY2hyb21hU2l6ZSA9ICgod2lkdGggKyAxKSA+PiAxKSAqICgoaGVpZ2h0ICsgMSkgPj4gMSk7XG4gICAgY29uc3QgYWxwaGFCdWYgPSBCdWZmZXIuYWxsb2MoeVNpemUgKyBjaHJvbWFTaXplICogMik7XG4gICAgYWxwaGFCdWYuZmlsbCgxMjgsIHlTaXplKTtcblxuICAgIGNvbnN0IGJhc2VQa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBhbHBoYVBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IGFscGhhU3dGcmFtZSA9IHN0YWNrLnVzZShtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVY0MjBQKSk7XG5cbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBOdmVuY0R1YWxMYXllckVuY29kZXIoe1xuICAgICAgYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4LFxuICAgICAgYmFzZVBrdCxcbiAgICAgIGFscGhhUGt0LFxuICAgICAgc3RyZWFtLFxuICAgICAgYWxwaGFTd0ZyYW1lLFxuICAgICAgYWxwaGFCdWYsXG4gICAgICBoZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSwgYWxwaGFCdWYgfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcHRzID0gdGhpcy5fcHRzKys7XG5cbiAgICAvLyBFeHRyYWN0IHRoZSBhbHBoYSBwbGFuZSBiZWZvcmUgYmFzZS5zZW5kRnJhbWUg4oCUIHRoZSBlbmNvZGVyIHVucmVmcyB0aGUgaW5wdXQgZnJhbWUuXG4gICAgZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyKGJncmFGcmFtZSwgYWxwaGFCdWYpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUubWFrZVdyaXRhYmxlKCksIFwiYWxwaGFTdy5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5mcm9tQnVmZmVyKGFscGhhQnVmKSwgXCJhbHBoYVN3LmZyb21CdWZmZXJcIik7XG4gICAgYWxwaGFTd0ZyYW1lLnB0cyA9IHB0cztcbiAgICBhbHBoYVN3RnJhbWUuZHVyYXRpb24gPSAxbjtcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGFscGhhQ3R4LnNlbmRGcmFtZShhbHBoYVN3RnJhbWUpLCBcImFscGhhLnNlbmRGcmFtZVwiKTtcblxuICAgIGF3YWl0IHRoaXMuX211eC5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNlbmRFb2YodGhpcy5fcy5iYXNlQ3R4LCBcImJhc2VcIik7XG4gICAgYXdhaXQgdGhpcy5zZW5kRW9mKHRoaXMuX3MuYWxwaGFDdHgsIFwiYWxwaGFcIik7XG4gICAgYXdhaXQgdGhpcy5fbXV4LmRyYWluKG11eGVyKTtcbiAgICBjb25zdCBkZXN5bmMgPSB0aGlzLl9tdXguZGVzeW5jQWZ0ZXJFb2YoKTtcbiAgICBpZiAoZGVzeW5jKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5WRU5DIGRlc3luYzogJHtkZXN5bmN9YCk7XG4gICAgfVxuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lIH0gPSB0aGlzLl9zO1xuICAgIGJhc2VQa3QuZnJlZSgpO1xuICAgIGFscGhhUGt0LmZyZWUoKTtcbiAgICBhbHBoYVN3RnJhbWUuZnJlZSgpO1xuICAgIC8vIE5WSURJQSBkcml2ZXIgNTIwLjU2LjA2KyBVQUYgaW4gbGlibnZjdXZpZCBvbiBjcmVhdGlvbi1vcmRlciBzZXNzaW9uIGZyZWUg4oCUIExJRk8gZGVzdHJveSBhdm9pZHMgaXQgKGZvcnVtIC90LzI2OTk3NCkuXG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICAvLyBFT0YgZmx1c2g7IEVBR0FJTi9FT0YgcmV0dXJucyBhcmUgYmVuaWduIChhbHJlYWR5LWRyYWluaW5nIGVuY29kZXIpLlxuICBwcml2YXRlIGFzeW5jIHNlbmRFb2YoY3R4OiBDb2RlY0NvbnRleHQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBpZiAocmV0IDwgMCAmJiByZXQgIT09IEFWRVJST1JfRUFHQUlOICYmIHJldCAhPT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30uc2VuZEZyYW1lKG51bGwpYCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBBVlBpeGVsRm9ybWF0LCBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgY29kZWNOYW1lLCBjb2RlY1RhZywgY29kZWNPcHRzLCBtdXhlciwgLi4ucmVzdCB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcbiAgICB9XG5cbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGRpc3Bvc2VzIGN0eC9wa3QgaWYgYSBsYXRlciBzdGVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBjdHggPSBzdGFjay51c2UoYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKSk7XG4gICAgY29uc3QgcGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvRW5jb2RlcihjdHgsIHBrdCwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShmcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoZnJhbWUpLCBcInZpZGVvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eChcbiAgICAgIHtcbiAgICAgICAgY29kZWMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSxcbiAgICAgICAgY29sb3JSYW5nZTogQVZDT0xfUkFOR0VfSlBFRyxcbiAgICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgICBvcHRpb25zOiB7IGFscGhhX3F1YWxpdHk6IFwiMVwiIH0sXG4gICAgICB9LFxuICAgICAgXCJ2dEVuYy5vcGVuMlwiLFxuICAgICk7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBkaXNwb3NlcyBjdHgvcGt0IGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgc3RhY2sudXNlKGN0eCk7XG4gICAgY29uc3QgcGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgXCJodmMxXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIH0gZnJvbSBcIi4vaGV2Y19hbHBoYS9udmVuY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuaW1wb3J0IHsgVmlkZW9Ub29sYm94RW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5jb25zdCBUQUcgPSBcIltFbmNvZGVyXVwiO1xuXG5leHBvcnQgdHlwZSBId0VuY29kZXIgPSBWaWRlb1Rvb2xib3hFbmNvZGVyIHwgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU2V0dXAge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3duc0h3OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKG9wdHM6IEh3VmlkZW9GYWN0b3J5T3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlID0gOF8wMDBfMDAwLCBkaXNhYmxlSHdDb2RlYyA9IGZhbHNlLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgY29uc3QgaHcgPSBzaGFyZWRIdyA/PyAoZGlzYWJsZUh3Q29kZWMgPyB1bmRlZmluZWQgOiAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpKTtcbiAgY29uc3Qgb3duc0h3ID0gIXNoYXJlZEh3ICYmICEhaHc7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIFZpZGVvVG9vbGJveCBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgVmlkZW9Ub29sYm94RW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgTlZFTkMgZHVhbC1sYXllciBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJIYXJkd2FyZSBjb2RlYyBzZXNzaW9uIGxpbWl0cyByZWFjaGVkLCB1c2Ugc29mdHdhcmUgZW5jb2RlclwiLCBlKTtcbiAgICBpZiAob3duc0h3KSB7XG4gICAgICBodz8uZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgc29mdHdhcmUgbGlieDI2NSBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSB0aGUgdmlkZW8gZW5jb2RlciBpZiBDb2RlY1N0YXRlLmNyZWF0ZSB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICBjb25zdCB2aWRlbyA9IHN0YWNrLnVzZShcbiAgICBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICBjb2RlY09wdHM6IHsgcHJlc2V0OiBcImZhc3RcIiwgXCJ4MjY1LXBhcmFtc1wiOiBcImxvZy1sZXZlbD0xOmJmcmFtZXM9Mzpwb29scz0rOmZyYW1lLXRocmVhZHM9MFwiIH0sXG4gICAgICBiaXRyYXRlLFxuICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICBtdXhlcixcbiAgICB9KSxcbiAgKTtcbiAgY29uc3QgY29kZWMgPSBzdGFjay51c2UoYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCkpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiB7IHZpZGVvLCBjb2RlYywgb3duc0h3OiBmYWxzZSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIERpY3Rpb25hcnksIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFN0cmVhbSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY3R4Lm5ld1N0cmVhbShudWxsKTtcbiAgICBzdHJlYW0udGltZUJhc2UgPSBjb2RlY0N0eC50aW1lQmFzZTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3RyZWFtLmNvZGVjcGFyLmZyb21Db250ZXh0KGNvZGVjQ3R4KSwgXCJjb2RlY3Bhci5mcm9tQ29udGV4dFwiKTtcbiAgICBpZiAoY29kZWNUYWcpIHtcbiAgICAgIHN0cmVhbS5jb2RlY3Bhci5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIH1cbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgub3Blbk91dHB1dCgpLCBcIm9wZW5PdXRwdXRcIik7XG4gICAgLy8gK2Zhc3RzdGFydCByZWxvY2F0ZXMgbW9vdiB0byBmaWxlIGZyb250IG9uIHdyaXRlVHJhaWxlciBzbyBwbGF5ZXJzIGNhbiBiZWdpbiBwbGF5YmFjayBiZWZvcmUgZnVsbCBkb3dubG9hZC5cbiAgICB1c2luZyBvcHRzID0gRGljdGlvbmFyeS5mcm9tT2JqZWN0KHsgbW92ZmxhZ3M6IFwiK2Zhc3RzdGFydFwiIH0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgud3JpdGVIZWFkZXIob3B0cyksIFwid3JpdGVIZWFkZXJcIik7XG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlUGFja2V0KHBrdDogUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5pbnRlcmxlYXZlZFdyaXRlRnJhbWUocGt0KSwgXCJpbnRlcmxlYXZlZFdyaXRlRnJhbWVcIik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuX29wZW5lZCkge1xuICAgICAgICB0aGlzLl9vcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgLy8gQSBmYWlsZWQvdHJ1bmNhdGVkIHRyYWlsZXIgd3JpdGUgbXVzdCBub3QgbGVhayB0aGUgRkQuXG4gICAgICAgICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQWx3YXlzIGZyZWUgdGhlIG5hdGl2ZSBjb250ZXh0IOKAlCBldmVuIGEgbmV2ZXItb3BlbmVkIG11eGVyIGFsbG9jYXRlZCBvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgYXdhaXQgdGhpcy5fY3R4W1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzI0LlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJub2RlOmFzc2VydFwiO1xuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEZGX0VOQ09ERVJfQUFDLFxuICBGRl9FTkNPREVSX0xJQk9QVVMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlSHdWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyLCB0eXBlIFZpZGVvU2V0dXAgfSBmcm9tIFwiLi9mYWN0b3J5XCI7XG5pbXBvcnQgeyBGRl9FTkNPREVSX0xJQlZQWF9WUDkgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG5leHBvcnQgdHlwZSBTaW5rS2luZCA9IFwibXA0XCIgfCBcIndlYm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaW5rT3B0aW9ucyB7XG4gIG91dEZpbGU6IHN0cmluZztcbiAga2luZDogU2lua0tpbmQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmludGVyZmFjZSBTaW5rU3RhdGUge1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBvd25zSHc6IGJvb2xlYW47XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvcHRzOiBTaW5rT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE91dHB1dFNpbmsgaW1wbGVtZW50cyBBc3luY0Rpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBTaW5rU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBTaW5rU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBraW5kRnJvbVBhdGgocGF0aDogc3RyaW5nKTogU2lua0tpbmQge1xuICAgIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi53ZWJtXCIpKSB7XG4gICAgICByZXR1cm4gXCJ3ZWJtXCI7XG4gICAgfVxuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi5tcDRcIikgfHwgbG93ZXIuZW5kc1dpdGgoXCIubW92XCIpKSB7XG4gICAgICByZXR1cm4gXCJtcDRcIjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBvdXRwdXQgZXh0ZW5zaW9uOiAke3BhdGh9YCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFNpbmtPcHRpb25zKTogUHJvbWlzZTxPdXRwdXRTaW5rPiB7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBkaXNwb3NlIG11eGVyL2VuY29kZXJzIGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBtdXhlciA9IHN0YWNrLnVzZShuZXcgRm9ybWF0TXV4ZXIob3B0cy5vdXRGaWxlKSk7XG4gICAgY29uc3Qgc2V0dXAgPVxuICAgICAgb3B0cy5raW5kID09PSBcIm1wNFwiID8gYXdhaXQgT3V0cHV0U2luay5tcDRWaWRlbyhvcHRzLCBtdXhlcikgOiBhd2FpdCBPdXRwdXRTaW5rLndlYm1WaWRlbyhvcHRzLCBtdXhlcik7XG4gICAgaWYgKHNldHVwLnZpZGVvKSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAudmlkZW8pO1xuICAgIH1cbiAgICBpZiAoc2V0dXAuaHdWaWRlbykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLmh3VmlkZW8pO1xuICAgIH1cbiAgICBpZiAoc2V0dXAuY29kZWMpIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5jb2RlYyk7XG4gICAgfVxuICAgIC8vIE9ubHkgYSBzaW5rLW93bmVkIGh3IGRldmljZSBpcyBvdXJzIHRvIGZyZWUgaGVyZTsgYSBzaGFyZWQgZGV2aWNlIGJlbG9uZ3MgdG8gdGhlIHBpcGVsaW5lLlxuICAgIGlmIChzZXR1cC5vd25zSHcgJiYgc2V0dXAuaHcpIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5odyk7XG4gICAgfVxuICAgIGNvbnN0IGF1ZGlvID0gb3B0cy53aXRoQXVkaW8gPyBhd2FpdCBPdXRwdXRTaW5rLmF1ZGlvRm9yKG9wdHMsIG11eGVyKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoYXVkaW8pIHtcbiAgICAgIHN0YWNrLnVzZShhdWRpbyk7XG4gICAgfVxuICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBPdXRwdXRTaW5rKHsgbXV4ZXIsIC4uLnNldHVwLCBhdWRpbywgb3B0cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG1wNFZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICAgIHJldHVybiBjcmVhdGVId1ZpZGVvRW5jb2Rlcih7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0sIG11eGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHdlYm1WaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG9wdHM7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlZQWF9WUDksXG4gICAgICBjb2RlY09wdHM6IHtcbiAgICAgICAgZGVhZGxpbmU6IFwicmVhbHRpbWVcIixcbiAgICAgICAgXCJjcHUtdXNlZFwiOiBcIjhcIixcbiAgICAgICAgXCJyb3ctbXRcIjogXCIxXCIsXG4gICAgICAgIHRocmVhZHM6IFwiMlwiLFxuICAgICAgfSxcbiAgICAgIGJpdHJhdGU6IDRfMDAwXzAwMCxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZGVvLFxuICAgICAgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLFxuICAgICAgb3duc0h3OiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXVkaW9Gb3Iob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgLy8gT3B1cyByZWplY3RzIDQ0LjFrLlxuICAgIGNvbnN0IGNmZyA9XG4gICAgICBvcHRzLmtpbmQgPT09IFwibXA0XCJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgICAgICAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIG91dFNhbXBsZVJhdGU6IDQ4XzAwMCxcbiAgICAgICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCT1BVUyxcbiAgICAgICAgICB9O1xuICAgIHJldHVybiBBdWRpb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIC4uLmNmZyxcbiAgICAgIGdsb2JhbEhlYWRlcjogdHJ1ZSxcbiAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICBtdXhlcixcbiAgICB9KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zLmF1ZGlvPy5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGJncmFGcmFtZTogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICByZXR1cm4gaHdWaWRlby5lbmNvZGUoYmdyYUZyYW1lLCBtdXhlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKGJncmFGcmFtZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVEZWNvZGVkRnJhbWUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIHJldHVybiBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoc3JjKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5hdWRpbz8uZW5jb2RlKHBjbSwgdGhpcy5fcy5tdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBhdWRpbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHZpZGVvIS5mbHVzaChtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgY29uc3QgeyBtdXhlciwgdmlkZW8sIGh3VmlkZW8sIGF1ZGlvLCBjb2RlYywgaHcsIG93bnNIdyB9ID0gdGhpcy5fcztcbiAgICB2aWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGh3VmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGNvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICBpZiAob3duc0h3KSB7XG4gICAgICBodz8uZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3dFbmNvZGUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBvayhjb2RlYz8uc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNvZGVjLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJzaW5rRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY29kZWMuc3dzLnNjYWxlRnJhbWUoY29kZWMuZHN0LCBzcmMpLCBcInNpbmtTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNvZGVjLmRzdCwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgRkZfSFdERVZJQ0VfVFlQRV9DVURBLCBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vbGltaXRlclwiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBPdXRwdXRTaW5rIH0gZnJvbSBcIi4vc2lua1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGlwZWxpbmVTdGF0ZSB7XG4gIHNpbmtzOiBPdXRwdXRTaW5rW107XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBsaW1pdGVyOiBDb25jdXJyZW5jeUxpbWl0ZXI7XG4gIHBuZ0NvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGVzLCB3aXRoQXVkaW8gPSBmYWxzZSwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgICBpZiAob3V0RmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvdXRGaWxlcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG4gICAgfVxuXG4gICAgY29uc3Qga2luZHMgPSBvdXRGaWxlcy5tYXAoKHApID0+IE91dHB1dFNpbmsua2luZEZyb21QYXRoKHApKTtcbiAgICBjb25zdCBuZWVkc01wNEh3ID0gIWRpc2FibGVId0NvZGVjICYmIGtpbmRzLmluY2x1ZGVzKFwibXA0XCIpO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZGlzcG9zZSBzaGFyZWRIdyArIGFueSBzaW5rcyBhbHJlYWR5IGJ1aWx0IGlmIGEgbGF0ZXIgc2luayB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBzaGFyZWRIdyA9IG5lZWRzTXA0SHcgPyAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuICAgIGlmIChzaGFyZWRIdykge1xuICAgICAgc3RhY2sudXNlKHNoYXJlZEh3KTtcbiAgICB9XG4gICAgY29uc3QgaXNId0FscGhhQ2FwYWJsZSA9XG4gICAgICBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIHx8IHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBO1xuXG4gICAgY29uc3Qgc2lua3M6IE91dHB1dFNpbmtbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0RmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBPdXRwdXRTaW5rLmNyZWF0ZSh7XG4gICAgICAgIG91dEZpbGU6IG91dEZpbGVzW2ldISxcbiAgICAgICAga2luZDoga2luZHNbaV0hLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIHdpdGhBdWRpbyxcbiAgICAgICAgZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgIHNoYXJlZEh3OiBraW5kc1tpXSA9PT0gXCJtcDRcIiAmJiBpc0h3QWxwaGFDYXBhYmxlID8gc2hhcmVkSHcgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHN0YWNrLnVzZShzaW5rKTtcbiAgICAgIHNpbmtzLnB1c2goc2luayk7XG4gICAgfVxuXG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHsgc2lua3MsIHNoYXJlZEh3LCBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLCBvdXRGaWxlcywgb3B0cyB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgIHNpbmsuc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcy5vcHRzO1xuICAgICAgdGhpcy5fcy5wbmdDb2RlYyA/Pz0gYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCB0aGlzLl9zLnBuZ0NvZGVjLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZW5jb2RlRGVjb2RlZEZyYW1lKHNyYyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZUF1ZGlvKHBjbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZmx1c2goKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGVzO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZnJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICBhd2FpdCBzaW5rW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICAgIHRoaXMuX3MucG5nQ29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnNoYXJlZEh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBmcmFtZSBpZiBmcm9tQnVmZmVyIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGZyYW1lID0gc3RhY2sudXNlKG1ha2VGcmFtZSh0aGlzLl9zLm9wdHMud2lkdGgsIHRoaXMuX3Mub3B0cy5oZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSkpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KGltYWdlOiBOYXRpdmVJbWFnZSkge1xuICBjb25zdCBzaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICBpZiAoc2l6ZS53aWR0aCA9PT0gMCB8fCBzaXplLmhlaWdodCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBpbWFnZS5pc0VtcHR5KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaXplRXF1YWxzKGE6IFNpemUsIGI6IFNpemUpIHtcbiAgcmV0dXJuIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8wMy5cblxuY29uc3QgR1JJRCA9IDMyOyAvLyByZXNvbHV0aW9uLWluZGVwZW5kZW50IGxhdHRpY2UgZm9yIHRoZSBtb2RhbC1jb2xvciBwcmUtcGFzc1xuY29uc3QgU1RSSURFID0gNDsgLy8gbWFpbi1zY2FuIHN0ZXA7IHJvdy1zdGFnZ2VyZWQgc28gYW55IOKJpTFweCBzdHJ1Y3R1cmUgbGFuZHMgb24gYSBzYW1wbGUgd2l0aGluIDQgcm93c1xuY29uc3QgQ09OVEVOVF9ERUxUQSA9IDg7IC8vIG1heCBwZXItY2hhbm5lbCBkaXN0YW5jZSAoMC0yNTUpIHN0aWxsIGNvdW50ZWQgYXMgdGhlIGRvbWluYW50IGNvbG9yXG5jb25zdCBNSU5fQ09OVEVOVF9TQU1QTEVTID0gMTY7IC8vIHJlbmRlcmVkIGZyYW1lcyBhcmUgbm9pc2UtZnJlZSwgc28gYSBoYW5kZnVsIG9mIG9mZi1kb21pbmFudCBzYW1wbGVzIGlzIHJlYWwgY29udGVudFxuZXhwb3J0IGNvbnN0IEJMQU5LX1dBUk5fUkFUSU8gPSAwLjU7IC8vIGJsYW5rLWZyYW1lIGZyYWN0aW9uIGFib3ZlIHRoaXMgd2FybnMgYXQgcmVuZGVyIGVuZFxuXG4vLyA1IGJpdHMgcGVyIGNoYW5uZWwsIGFscGhhIGluY2x1ZGVkIOKAlCB0cmFuc3BhcmVudCBzdXJmYWNlcyBjYXJyeSBjb250ZW50IGluIGNvdmVyYWdlLCBub3QgY29sb3IuXG5mdW5jdGlvbiBxdWFudGl6ZShiZ3JhOiBCdWZmZXIsIGk6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgKGJncmEucmVhZFVJbnQ4KGkpID4+IDMpIHxcbiAgICAoKGJncmEucmVhZFVJbnQ4KGkgKyAxKSA+PiAzKSA8PCA1KSB8XG4gICAgKChiZ3JhLnJlYWRVSW50OChpICsgMikgPj4gMykgPDwgMTApIHxcbiAgICAoKGJncmEucmVhZFVJbnQ4KGkgKyAzKSA+PiAzKSA8PCAxNSlcbiAgKTtcbn1cblxuLy8gQnl0ZSBvZmZzZXQgb2YgYSBwaXhlbCBjYXJyeWluZyB0aGUgZnJhbWUncyBkb21pbmFudCBjb2xvciAobW9kZSBvdmVyIGEgc3BhcnNlIGxhdHRpY2UpLlxuZnVuY3Rpb24gbW9kYWxQaXhlbChiZ3JhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3Qgc3RlcFggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHdpZHRoIC8gR1JJRCkpO1xuICBjb25zdCBzdGVwWSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0IC8gR1JJRCkpO1xuICBjb25zdCBjb3VudHMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBjb25zdCBmaXJzdElkeCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIGxldCBiZXN0ID0gMDtcbiAgbGV0IGJlc3RDb3VudCA9IDA7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IHN0ZXBZKSB7XG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCArPSBzdGVwWCkge1xuICAgICAgY29uc3QgaSA9ICh5ICogd2lkdGggKyB4KSAqIDQ7XG4gICAgICBjb25zdCBrZXkgPSBxdWFudGl6ZShiZ3JhLCBpKTtcbiAgICAgIGNvbnN0IGNvdW50ID0gKGNvdW50cy5nZXQoa2V5KSA/PyAwKSArIDE7XG4gICAgICBjb3VudHMuc2V0KGtleSwgY291bnQpO1xuICAgICAgaWYgKCFmaXJzdElkeC5oYXMoa2V5KSkge1xuICAgICAgICBmaXJzdElkeC5zZXQoa2V5LCBpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb3VudCA+IGJlc3RDb3VudCkge1xuICAgICAgICBiZXN0Q291bnQgPSBjb3VudDtcbiAgICAgICAgYmVzdCA9IGtleTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpcnN0SWR4LmdldChiZXN0KSA/PyAwO1xufVxuXG4vLyBCbGFuayA9IGRvbWluYW50LWNvbG9yIGNvdmVyYWdlOiBmZXdlciB0aGFuIE1JTl9DT05URU5UX1NBTVBMRVMgc2FtcGxlcyBkZXZpYXRlIGZyb20gdGhlIG1vZGFsIGNvbG9yLlxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtGcmFtZShiZ3JhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IG0gPSBtb2RhbFBpeGVsKGJncmEsIHdpZHRoLCBoZWlnaHQpO1xuICBjb25zdCBtYiA9IGJncmEucmVhZFVJbnQ4KG0pO1xuICBjb25zdCBtZyA9IGJncmEucmVhZFVJbnQ4KG0gKyAxKTtcbiAgY29uc3QgbXIgPSBiZ3JhLnJlYWRVSW50OChtICsgMik7XG4gIGNvbnN0IG1hID0gYmdyYS5yZWFkVUludDgobSArIDMpO1xuICBsZXQgY29udGVudCA9IDA7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IFNUUklERSkge1xuICAgIGNvbnN0IG9mZnNldCA9ICh5ID4+IDIpICYgKFNUUklERSAtIDEpO1xuICAgIGZvciAobGV0IHggPSBvZmZzZXQ7IHggPCB3aWR0aDsgeCArPSBTVFJJREUpIHtcbiAgICAgIGNvbnN0IGkgPSAoeSAqIHdpZHRoICsgeCkgKiA0O1xuICAgICAgaWYgKFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpKSAtIG1iKSA+IENPTlRFTlRfREVMVEEgfHxcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSArIDEpIC0gbWcpID4gQ09OVEVOVF9ERUxUQSB8fFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpICsgMikgLSBtcikgPiBDT05URU5UX0RFTFRBIHx8XG4gICAgICAgIE1hdGguYWJzKGJncmEucmVhZFVJbnQ4KGkgKyAzKSAtIG1hKSA+IENPTlRFTlRfREVMVEFcbiAgICAgICkge1xuICAgICAgICBjb250ZW50Kys7XG4gICAgICAgIGlmIChjb250ZW50ID49IE1JTl9DT05URU5UX1NBTVBMRVMpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjbGFzcyBCbGFua1N0YXRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfd2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGVpZ2h0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdGFsID0gMDtcbiAgcHJpdmF0ZSBfYmxhbmsgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBzYW1wbGUoZnJhbWU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3RvdGFsKys7XG4gICAgaWYgKGlzQmxhbmtGcmFtZShmcmFtZSwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCkpIHtcbiAgICAgIHRoaXMuX2JsYW5rKys7XG4gICAgfVxuICB9XG5cbiAgLy8gRnJhY3Rpb24gb2Ygd3JpdHRlbiBmcmFtZXMgdGhhdCB3ZXJlIGNvbnRlbnRsZXNzICgwID0gYWxsIGhhZCBjb250ZW50LCAxID0gYWxsIGJsYW5rKS5cbiAgZmluYWxpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdG90YWwgPiAwID8gdGhpcy5fYmxhbmsgLyB0aGlzLl90b3RhbCA6IDA7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjMuXG5cbmV4cG9ydCBjb25zdCBKQU5LX1dBUk5fU0NPUkUgPSAwLjI1OyAvLyBqYW5rIHNjb3JlIGFib3ZlIHRoaXMgd2FybnMgYXQgcmVuZGVyIGVuZCAofnF1YXJ0ZXIgZHJvcHBlZCBvciBhIH4wLjVzIGZyZWV6ZSlcblxuLy8gRnJhbWUtZHJvcCBxdWFsaXR5IHNjb3JlICgwID0gcGVyZmVjdCwgMSA9IHdvcnN0KTogZ2xvYmFsIGRyb3AgcmF0ZSBhbmQgbG9jYWwgYnVyc3Qgc2V2ZXJpdHkgY29tYmluZWQgdmlhIDEtKDEtZykoMS1sKS5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBEcm9wU3RhdHMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYWN0dWFsID0gMDtcbiAgcHJpdmF0ZSBfY3VycmVudEJ1cnN0ID0gMDtcbiAgcHJpdmF0ZSBfYnVyc3RzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGZwczogbnVtYmVyKSB7XG4gICAgdGhpcy5fZnBzID0gZnBzO1xuICB9XG5cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICBkcm9wcGVkKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIHRoaXMuX2N1cnJlbnRCdXJzdCArPSBjb3VudDtcbiAgfVxuXG4gIGZpbmFsaXplKCk6IERyb3BTY29yZSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cblxuICAgIGxldCB0b3RhbERyb3BwZWQgPSAwO1xuICAgIGxldCBsb2NhbFN1bSA9IDA7XG4gICAgbGV0IG1heEJ1cnN0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGJ1cnN0IG9mIHRoaXMuX2J1cnN0cykge1xuICAgICAgdG90YWxEcm9wcGVkICs9IGJ1cnN0O1xuICAgICAgbWF4QnVyc3QgPSBNYXRoLm1heChtYXhCdXJzdCwgYnVyc3QpO1xuICAgICAgY29uc3QgcGVyY2VwdGlibGUgPSBNYXRoLm1heCgwLCBidXJzdCAtIDEpO1xuICAgICAgbG9jYWxTdW0gKz0gKHBlcmNlcHRpYmxlIC8gdGhpcy5fZnBzKSAqKiAyO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5fYWN0dWFsICsgdG90YWxEcm9wcGVkO1xuICAgIGNvbnN0IGcgPSBleHBlY3RlZCA+IDAgPyB0b3RhbERyb3BwZWQgLyBleHBlY3RlZCA6IDA7XG4gICAgY29uc3QgbCA9IE1hdGgubWluKDEsIGxvY2FsU3VtKTtcbiAgICBjb25zdCBzY29yZSA9IDEgLSAoMSAtIGcpICogKDEgLSBsKTtcblxuICAgIHJldHVybiB7IGdsb2JhbDogZywgbG9jYWw6IGwsIGphbms6IHNjb3JlLCBleHBlY3RlZCwgYWN0dWFsOiB0aGlzLl9hY3R1YWwsIG1heEJ1cnN0IH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB0eXBlIHsgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB0eXBlIHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuXG5leHBvcnQgY29uc3QgQVVESU9fTUVUQV9DSEFOTkVMID0gXCJhdWRpby1tZXRhXCI7XG5leHBvcnQgY29uc3QgQVVESU9fQ0hVTktfQ0hBTk5FTCA9IFwiYXVkaW8tY2h1bmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0xpc3RlbmVyT3B0aW9ucyB7XG4gIHdjOiBXZWJDb250ZW50cztcbiAgZW5jb2RlcjogRW5jb2RlclBpcGVsaW5lO1xuICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbnVtYmVyO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBBdWRpb0Rpc3Bvc2FsID0gKCkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEF1ZGlvTGlzdGVuZXJzKHsgd2MsIGVuY29kZXIsIGdldFZpZGVvVGltZU1zLCBvbkVycm9yIH06IEF1ZGlvTGlzdGVuZXJPcHRpb25zKTogQXVkaW9EaXNwb3NhbCB7XG4gIGNvbnN0IG9uTWV0YSA9IGFzeW5jIChfZTogdW5rbm93biwgZGF0YTogeyBzYW1wbGVSYXRlOiBudW1iZXIgfSkgPT4ge1xuICAgIGNvbnN0IHNhbXBsZVJhdGUgPSBkYXRhLnNhbXBsZVJhdGU7XG4gICAgY29uc3Qgc3RhcnRNcyA9IGdldFZpZGVvVGltZU1zKCk7XG4gICAgZW5jb2Rlci5zZXR1cEF1ZGlvKHNhbXBsZVJhdGUpO1xuICAgIGNvbnN0IHNpbGVuY2VTYW1wbGVzID0gTWF0aC5jZWlsKChzdGFydE1zICogc2FtcGxlUmF0ZSkgLyAxMDAwKTtcbiAgICBpZiAoc2lsZW5jZVNhbXBsZXMgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhCdWZmZXIuYWxsb2Moc2lsZW5jZVNhbXBsZXMgKiAyICogNCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25DaHVuayA9IGFzeW5jIChfZTogdW5rbm93biwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhidWZmZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgd2MuaXBjLm9uKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgd2MuaXBjLm9uKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgICB3Yy5pcGMucmVtb3ZlTGlzdGVuZXIoQVVESU9fQ0hVTktfQ0hBTk5FTCwgb25DaHVuayk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzE2LlxuXG5pbXBvcnQgeyB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IG5hdGl2ZUltYWdlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmludGVyZmFjZSBTY3JlZW5zaG90VGFyZ2V0IHtcbiAgbXM6IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbiAgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmVlbnNob3RPcHRpb25zIHtcbiAgbWFya3M6IG51bWJlcltdO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xufVxuXG4vLyBEdW1wcyBwYWludGVkIEJHUkEgZnJhbWVzIHRvIFBORyBhdCByZXF1ZXN0ZWQgc2Vjb25kIG1hcmtzOyByZXN1bHQgb3JkZXIgdHJhY2tzIGlucHV0IG9yZGVyLlxuZXhwb3J0IGNsYXNzIFNjcmVlbnNob3RUYWtlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlbmRpbmc6IFNjcmVlbnNob3RUYXJnZXRbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG9uZSA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dyaXRlczogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfczogU2NyZWVuc2hvdE9wdGlvbnMpIHtcbiAgICBjb25zdCBkaXIgPSBkaXJuYW1lKF9zLm91dEZpbGVzWzBdID8/IFwiLlwiKTtcbiAgICB0aGlzLl9wZW5kaW5nID0gX3MubWFya3NcbiAgICAgIC5tYXAoKHNlYywgaW5kZXgpID0+ICh7IG1zOiBzZWMgKiAxMDAwLCBpbmRleCwgcGF0aDogam9pbihkaXIsIGBzY3JlZW5zaG90XyR7aW5kZXh9LnBuZ2ApIH0pKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubXMgLSBiLm1zKTtcbiAgfVxuXG4gIC8vIER1bXAgZXZlcnkgbWFyayB3aG9zZSBzZWNvbmQgaGFzIGJlZW4gcmVhY2hlZCBieSB0aGlzIGZyYW1lLlxuICBjYXB0dXJlKGN1cnJlbnRUaW1lTXM6IG51bWJlciwgYmdyYTogQnVmZmVyKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuX3BlbmRpbmcubGVuZ3RoID4gMCAmJiB0aGlzLl9wZW5kaW5nWzBdIS5tcyA8PSBjdXJyZW50VGltZU1zKSB7XG4gICAgICB0aGlzLnRha2UodGhpcy5fcGVuZGluZy5zaGlmdCgpISwgYmdyYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVjb3JkaW5nIG92ZXI6IHNuYXAgYW55IG1hcmsgcGFzdCB0aGUgbGFzdCBmcmFtZSBvbnRvIGl0LCB0aGVuIHdyaXRlIGFsbCBzaG90cyBvdXQuXG4gIGFzeW5jIGZpbmlzaChmaW5hbEJncmE/OiBCdWZmZXIpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgd2hpbGUgKGZpbmFsQmdyYSAmJiB0aGlzLl9wZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGFrZSh0aGlzLl9wZW5kaW5nLnNoaWZ0KCkhLCBmaW5hbEJncmEpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl93cml0ZXMpO1xuICAgIHJldHVybiBbLi4udGhpcy5fZG9uZS5lbnRyaWVzKCldLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKS5tYXAoKFssIHBhdGhdKSA9PiBwYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGFrZSh0YXJnZXQ6IFNjcmVlbnNob3RUYXJnZXQsIGJncmE6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwbmcgPSBuYXRpdmVJbWFnZS5jcmVhdGVGcm9tQml0bWFwKGJncmEsIHsgd2lkdGgsIGhlaWdodCB9KS50b1BORygpO1xuICAgIHRoaXMuX2RvbmUuc2V0KHRhcmdldC5pbmRleCwgdGFyZ2V0LnBhdGgpO1xuICAgIHRoaXMuX3dyaXRlcy5wdXNoKHdyaXRlRmlsZSh0YXJnZXQucGF0aCwgcG5nKSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwibm9kZTp0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8vIEFib3J0IGJhaWxzIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgcmV0cnlpbmc7IHNpZ25hbCBpcyBub3QgYXV0by10aHJlYWRlZCBpbnRvIGZuIOKAlCBjYWxsZXIgd2lyZXMgaXQgKGZldGNoLCBTMyBzZW5kKS5cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXQ+KHtcbiAgZm4sXG4gIG1heEF0dGVtcHRzID0gMyxcbiAgdGltZW91dCxcbiAgc2lnbmFsLFxufTogUmV0cnlPcHRpb25zPEFyZ3MsIFJldD4pIHtcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGB0aW1lb3V0IG92ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIHJldHVybiBhc3luYyAoLi4uYXJnczogQXJncykgPT4ge1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZm4oLi4uYXJncyldO1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyB0aW1lb3V0RXJyb3I7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKDIgKiogYXR0ZW1wdCAqIDEwMCArIE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTAuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdE9wdGlvbnMge1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIG9uVGltZW91dD86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBXYWl0YWJsZUV2ZW50IHtcbiAgcHJpdmF0ZSBfcHJvbWlzZT86IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3Jlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lb3V0VG9rZW4/OiBOb2RlSlMuVGltZW91dDtcblxuICB3YWl0KG9wdGlvbnM/OiBXYWl0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhbHJlYWR5IHdhaXRpbmdcIik7XG4gICAgfVxuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBpZiAob3B0aW9ucz8udGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3RpbWVvdXRUb2tlbiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnMub25UaW1lb3V0Py4oKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIG9wdGlvbnMudGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gIH1cblxuICBzaWduYWwoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRUb2tlbik7XG4gICAgdGhpcy5fcHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgdHlwZSB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9iYXNlL2xpbWl0ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFdhaXRhYmxlRXZlbnQgfSBmcm9tIFwiLi4vYmFzZS93YWl0YWJsZV9ldmVudFwiO1xuXG5jb25zdCBUQUcgPSBcIltOZXR3b3JrXVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLCAvL1xuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuXSk7XG5cbmNvbnN0IExPQ0FMX1NDSEVNRVMgPSBbXCJwdXA6XCIsIFwicHVwLWZyYW1lOlwiLCBcImZpbGU6XCIsIFwiZGF0YTpcIiwgXCJibG9iOlwiLCBcImNocm9tZS1leHRlbnNpb246XCIsIFwiZGV2dG9vbHM6XCJdO1xuXG5mdW5jdGlvbiBpc0xvY2FsU2NoZW1lKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgcyBvZiBMT0NBTF9TQ0hFTUVTKSB7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKHMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJveGllZFVybCh1cmw6IHN0cmluZykge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICBjb25zdCB0YXJnZXQgPSBtYXAuZ2V0KHBhcnNlZC5ob3N0bmFtZSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwYXJzZWQuaG9zdG5hbWUgPSB0YXJnZXQ7XG4gIHBhcnNlZC5wcm90b2NvbCA9IFwiaHR0cDpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbmRvdzogQnJvd3NlcldpbmRvdztcbiAgdXNlSW5uZXJQcm94eT86IGJvb2xlYW47XG4gIHN0dWJNZWRpYT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcmNlcHRvcih7IHNvdXJjZSwgd2luZG93LCB1c2VJbm5lclByb3h5LCBzdHViTWVkaWEgfTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMjU2KTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFdhaXRhYmxlRXZlbnQ+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgb25UaW1lb3V0PzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFdhaXRhYmxlRXZlbnQoKTtcbiAgICBldmVudHMuc2V0KGtleSwgZXZlbnQpO1xuICAgIGF3YWl0IGV2ZW50LndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pLmZpbmFsbHkoKCkgPT4gZXZlbnRzLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChrZXk6IHN0cmluZykge1xuICAgIGV2ZW50cy5nZXQoa2V5KT8uc2lnbmFsKCk7XG4gIH1cblxuICByZXEub25CZWZvcmVSZXF1ZXN0KChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldGFpbHMudXJsO1xuICAgIC8vIFN3YXAgbWVkaWEgZm9yIGEgZnJhbWUtc2VydmVyIHN0dWIgKHRydWUgaW50cmluc2ljIHNpemUvZHVyYXRpb24pIHNvIEJsaW5rIGxheXMgb3V0IGxpa2UgQ2hyb21lLlxuICAgIGlmIChzdHViTWVkaWEgJiYgZGV0YWlscy5yZXNvdXJjZVR5cGUgPT09IFwibWVkaWFcIiAmJiAhdXJsLnN0YXJ0c1dpdGgoXCJwdXAtZnJhbWU6XCIpKSB7XG4gICAgICBjYWxsYmFjayh7XG4gICAgICAgIHJlZGlyZWN0VVJMOiBgcHVwLWZyYW1lOi8vc3R1Yj9zcmM9JHtlbmNvZGVVUklDb21wb25lbnQodXJsKX1gLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb3hpZWQgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybCh1cmwpIDogdXJsO1xuICAgIGxpbWl0ZXIuc2NoZWR1bGUoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBzdGFydDpgLCB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdXJsLFxuICAgICAgICBwcm94aWVkLFxuICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHN0YXRzOiBsaW1pdGVyLnN0YXRzLFxuICAgICAgfSk7XG4gICAgICBpZiAocHJveGllZCA9PT0gdXJsKSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVkaXJlY3RVUkw6IHByb3hpZWQgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNMb2NhbFNjaGVtZSh1cmwpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGNvbnN0IHsgdXJsLCBtZXRob2QsIGVycm9yLCByZXNvdXJjZVR5cGUgfSA9IGRldGFpbHM7XG4gICAgLy8gU3R1YmJlZCBtZWRpYSBkb3duZ3JhZGVzOiBFUlJfQUJPUlRFRCBpcyBqdXN0IHRoZSBsb2FkZXIgcmVzdGFydGluZyBvbnRvIHRoZSBjcm9zcy1zY2hlbWUgcmVkaXJlY3QuXG4gICAgY29uc3QgbWVkaWEgPSBzdHViTWVkaWEgJiYgcmVzb3VyY2VUeXBlID09PSBcIm1lZGlhXCI7XG4gICAgY29uc3QgbGV2ZWwgPSBtZWRpYSA/IChlcnJvciA9PT0gXCJuZXQ6OkVSUl9BQk9SVEVEXCIgPyBcImRlYnVnXCIgOiBcIndhcm5cIikgOiBcImVycm9yXCI7XG4gICAgbG9nZ2VyW2xldmVsXShUQUcsIGBlcnJvcjpgLCB7IGtleSwgdXJsLCBtZXRob2QsIGVycm9yLCByZXNvdXJjZVR5cGUsIHNvdXJjZSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNldEludGVyY2VwdG9yKHdpbmRvdzogQnJvd3NlcldpbmRvdykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICByZXEub25CZWZvcmVSZXF1ZXN0KG51bGwpO1xuICByZXEub25IZWFkZXJzUmVjZWl2ZWQobnVsbCk7XG4gIHJlcS5vbkNvbXBsZXRlZChudWxsKTtcbiAgcmVxLm9uRXJyb3JPY2N1cnJlZChudWxsKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHB1cEF1ZGlvUHJlbG9hZCwgcHVwUmVuZGVyUHJlbG9hZCwgcHVwU2hvb3RQcmVsb2FkIH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuLi9iYXNlL3JldHJ5XCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgcHJveGllZFVybCwgc2V0SW50ZXJjZXB0b3IsIHVuc2V0SW50ZXJjZXB0b3IgfSBmcm9tIFwiLi9uZXR3b3JrXCI7XG5pbXBvcnQgeyBjcmVhdGVTdGVnb1VSTCB9IGZyb20gXCIuL3Byb3RvY29sXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbV2luZG93XVwiO1xuY29uc3QgVElNRU9VVF9FUlJPUiA9IG5ldyBFcnJvcihcIndpbmRvdyB0aW1lb3V0XCIpO1xuY29uc3QgQ09OU09MRV9JR05PUkVTID0gW2AlY0VsZWN0cm9uIFNlY3VyaXR5IFdhcm5pbmdgLCBcIk1peGVkIENvbnRlbnQ6IFRoZSBwYWdlIGF0XCJdO1xuXG5pbnRlcmZhY2UgRmluaXNoT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIGFjdGlvbjogKCkgPT4gdm9pZDtcbiAgdGltZW91dE1zOiBudW1iZXI7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2goeyBzb3VyY2UsIHdpbiwgYWN0aW9uLCB0aW1lb3V0TXMsIHRvbGVyYW50LCBzaWduYWwgfTogRmluaXNoT3B0aW9ucykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBkb21SZWFkeSA9IGZhbHNlO1xuICAgIC8vIFRvbGVyYW50IHByb2NlZWRzIG9uIGEgcGFydGlhbCBET00gb25seSBhcyBhIHRpbWVvdXQgZmFsbGJhY2sg4oCUIHN0YXJ0aW5nIG9uIGJhcmUgZG9tLXJlYWR5IGxlYXZlcyB0aGUgbG9hZCBwZW5kaW5nIGFuZCB3ZWRnZXMgdmlydHVhbCB0aW1lLlxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGRvbmUodG9sZXJhbnQgJiYgZG9tUmVhZHkgPyB1bmRlZmluZWQgOiBUSU1FT1VUX0VSUk9SKSwgdGltZW91dE1zKTtcbiAgICBjb25zdCBkb25lID0gKGVycj86IHVua25vd24pID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gZG9uZShzaWduYWwucmVhc29uKSwge1xuICAgICAgb25jZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRvbS1yZWFkeVwiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRvbS1yZWFkeTpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb21SZWFkeSA9IHRydWU7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtc3RvcC1sb2FkaW5nXCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZGlkLXN0b3AtbG9hZGluZzpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmFpbC1sb2FkXCIsIChfZSwgY29kZSwgZGVzYywgdXJsKSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgZGlkLWZhaWwtbG9hZDogJHtKU09OLnN0cmluZ2lmeSh7IHVybCwgc291cmNlLCBjb2RlLCBkZXNjIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGByZW5kZXItcHJvY2Vzcy1nb25lOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBleGl0Q29kZSwgcmVhc29uIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgYWN0aW9uKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZVdpbmRvdyh3aW46IEJyb3dzZXJXaW5kb3cpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3aW4pO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIFwiZm9yY2UgY2xvc2VcIik7XG4gICAgICAgIHdpbi5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmRldGFjaCgpO1xuICAgIHdpbi5vbmNlKFwiY2xvc2VkXCIsIGRvbmUpO1xuICAgIHdpbi5jbG9zZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgV2luZG93Q3JlYXRlZENhbGxiYWNrID0gKHdpbmRvdzogQnJvd3NlcldpbmRvdykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICByZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucztcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBvbkNyZWF0ZWQ/OiBXaW5kb3dDcmVhdGVkQ2FsbGJhY2s7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5mdW5jdGlvbiBwaWNrUHJlbG9hZChyZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChyZW5kZXJlci5kZXRlcm1pbmlzdGljKSB7XG4gICAgcmV0dXJuIHB1cFNob290UHJlbG9hZDtcbiAgfVxuICBpZiAocmVuZGVyZXIud2l0aEF1ZGlvKSB7XG4gICAgcmV0dXJuIHB1cEF1ZGlvUHJlbG9hZDtcbiAgfVxuICByZXR1cm4gcHVwUmVuZGVyUHJlbG9hZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIHRvbGVyYW50LCBzaWduYWwsIG9uQ3JlYXRlZCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gcmVuZGVyZXI7XG4gIGNvbnN0IHNyYyA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNvdXJjZSkgOiBzb3VyY2U7XG5cbiAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtaW5XaWR0aDogd2lkdGgsXG4gICAgbWluSGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1heFdpZHRoOiB3aWR0aCxcbiAgICBtYXhIZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgbW92YWJsZTogZmFsc2UsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluV29ya2VyOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICAgIHByZWxvYWQ6IHBpY2tQcmVsb2FkKHJlbmRlcmVyKSxcbiAgICB9LFxuICB9KTtcbiAgc2V0SW50ZXJjZXB0b3Ioe1xuICAgIHNvdXJjZSxcbiAgICB3aW5kb3c6IHdpbixcbiAgICB1c2VJbm5lclByb3h5LFxuICAgIHN0dWJNZWRpYTogcmVuZGVyZXIuZGV0ZXJtaW5pc3RpYyxcbiAgfSk7XG4gIHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlci5hdHRhY2goXCIxLjNcIik7XG4gIGF3YWl0IG9uQ3JlYXRlZD8uKHdpbik7XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFwiY29uc29sZS1tZXNzYWdlXCIsICh7IGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCB9KSA9PiB7XG4gICAgLy8gRHJvcCBoZWFkbGVzcyBub2lzZTogc2VjdXJpdHkgd2FybmluZ3MgYW5kIGh0dHDihpJodHRwcyBhdXRvLXVwZ3JhZGUgbm90aWNlcyBmb3IgaW50ZXJuYWwtcHJveHkgYXNzZXRzLlxuICAgIGlmIChsZXZlbCA9PT0gXCJ3YXJuaW5nXCIgJiYgQ09OU09MRV9JR05PUkVTLmZpbmQoKGkpID0+IG1lc3NhZ2Uuc3RhcnRzV2l0aChpKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbXNncyA9IFtUQUcsIFwiY29uc29sZTpcIiwgeyBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCwgc291cmNlIH1dO1xuICAgIGxldmVsID09PSBcImVycm9yXCIgPyBsb2dnZXIuZXJyb3IoLi4ubXNncykgOiBsb2dnZXIuZGVidWcoLi4ubXNncyk7XG4gICAgcmVuZGVyZXIub25Db25zb2xlKGxldmVsLCBtZXNzYWdlKTtcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBjcmVhdGVTdGVnb1VSTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICBhd2FpdCB3YWl0Rm9yRmluaXNoKHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIHdpbixcbiAgICAgIGFjdGlvbjogKCkgPT4gd2luLmxvYWRVUkwodXJsKSxcbiAgICAgIHRpbWVvdXRNczogcmVuZGVyZXIud2luZG93VGltZW91dCAqIDEwMDAsXG4gICAgICB0b2xlcmFudCxcbiAgICAgIHNpZ25hbCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuY29uc3Qgb3BlbldpbmRvd1dpdGhSZXRyeSA9IHVzZVJldHJ5KHsgZm46IG9wZW5XaW5kb3csIG1heEF0dGVtcHRzOiAyIH0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIG9uQ3JlYXRlZCwgc2lnbmFsIH06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICBsZXQgd2FybXVwOiBCcm93c2VyV2luZG93IHwgdW5kZWZpbmVkO1xuICBsZXQgZXJyb3I6IHVua25vd247XG4gIHRyeSB7XG4gICAgd2FybXVwID0gYXdhaXQgb3BlbldpbmRvd1dpdGhSZXRyeSh7IHNvdXJjZSwgcmVuZGVyZXIsIHNpZ25hbCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuXG4gIGNvbnN0IG9wZW4gPSAoKSA9PiB7XG4gICAgcmV0dXJuIG9wZW5XaW5kb3coe1xuICAgICAgc291cmNlLFxuICAgICAgcmVuZGVyZXIsXG4gICAgICBvbkNyZWF0ZWQsXG4gICAgICBzaWduYWwsXG4gICAgICB0b2xlcmFudDogcmVuZGVyZXIud2luZG93VG9sZXJhbnQsXG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKHJlbmRlcmVyLndpbmRvd1RvbGVyYW50ICYmIGVycm9yID09PSBUSU1FT1VUX0VSUk9SKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgd2FybXVwIHRpbWVvdXQ6ICR7c291cmNlfSwgZmFsbGluZyBiYWNrIHRvIGRvbS1yZWFkeWApO1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlcnJvciBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB3YXJtdXAgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxuXG4gIGlmICh3YXJtdXApIHtcbiAgICB3YXJtdXAud2ViQ29udGVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3YXJtdXApO1xuICAgIGF3YWl0IHNsZWVwKDIwMDApO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2FybXVwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyByZXNpemVEcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBCTEFOS19XQVJOX1JBVElPLCBCbGFua1N0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvcXVhbGl0eS9ibGFua1wiO1xuaW1wb3J0IHsgRHJvcFN0YXRzLCBKQU5LX1dBUk5fU0NPUkUgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2Ryb3BcIjtcbmltcG9ydCB7IHBlcmlvZGljYWwgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IHR5cGUgQXVkaW9EaXNwb3NhbCwgYXR0YWNoQXVkaW9MaXN0ZW5lcnMgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBTY3JlZW5zaG90VGFrZXIgfSBmcm9tIFwiLi9zY3JlZW5zaG90XCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbyB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlbmRlcl1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcihvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlcywgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcblxuICBhd2FpdCB1c2luZyBlbmNvZGVyID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZXMsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG4gIGNvbnN0IHRha2VyID0gbmV3IFNjcmVlbnNob3RUYWtlcih7IG1hcmtzOiBvcHRpb25zLnNjcmVlbnNob3RzLCB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlcyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCArIDEgfTtcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBsYXN0RnJhbWU6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHNjcmVlbnNob3RzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgbGFzdFdyaXR0ZW5UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBlbmNvZGVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIGxldCByZXNvbHZlcjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVqZWN0ZXI6ICgocmVhc29uPzogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCBjbGVhclN0dWNrQ2hlY2s6IFZvaWRGdW5jdGlvbiB8IHVuZGVmaW5lZDtcbiAgY29uc3QgYmxhbmtTdGF0cyA9IG5ldyBCbGFua1N0YXRzKHdpZHRoLCBoZWlnaHQpO1xuICBjb25zdCBkcm9wU3RhdHMgPSBuZXcgRHJvcFN0YXRzKGZwcyk7XG5cbiAgbGV0IGRpc3Bvc2VBdWRpbzogQXVkaW9EaXNwb3NhbCB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2NoZWR1bGVGcmFtZSA9IChmcmFtZTogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIGJsYW5rU3RhdHMuc2FtcGxlKGZyYW1lKTtcbiAgICBlbmNvZGVyLmVuY29kZUJHUkEoZnJhbWUpLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgfTtcblxuICBjb25zdCBwYWludCA9IChfZTogdW5rbm93biwgX3I6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgIGVuY29kZUVycm9yID8/PSBzaWduYWw/LnJlYXNvbjtcbiAgICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICAgIHJlamVjdGVyPy4oZW5jb2RlRXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAvLyBOT1RFKEF1dG9rYWthKTogV2UgbXVzdCBlbnN1cmUgZnJhbWUgaXMgcmVhZHkgb24gZWxlY3Ryb24gdjQxK1xuICAgICAgcmVzaXplRHJhd2FibGUoY2RwLCBmcmFtZVNpemUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBzdGVnbyB0aW1lc3RhbXAgZnJvbSB0aGUgYm90dG9tIHBpeGVsIHJvdyB3aXRob3V0IGZ1bGwgYml0bWFwIGNvcHlcbiAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGVFcnJvciA/Pz0gbmV3IEVycm9yKGBubyB0aW1lc3RhbXAgQCAke3dyaXR0ZW59YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBmcmFtZXMgdGhhdCBhcnJpdmUgdG9vIHNvb24gKDwgODAlIG9mIGZyYW1lIGludGVydmFsKVxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCk7XG4gICAgbGFzdEZyYW1lID0gY3JvcHBlZDtcbiAgICB0YWtlci5jYXB0dXJlKGN1cnJlbnRUaW1lLCBjcm9wcGVkKTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0aW1lRGVsdGEgPSBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZTtcbiAgICAgIGlmICh0aW1lRGVsdGEgPD0gZnJhbWVJbnRlcnZhbCAqIDEuMikge1xuICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZyYW1lc1RvSW5zZXJ0ID0gTWF0aC5yb3VuZCh0aW1lRGVsdGEgLyBmcmFtZUludGVydmFsKTtcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoZnJhbWVzVG9JbnNlcnQgLSAxKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzVG9JbnNlcnQgJiYgd3JpdHRlbiA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25NcyA9IGR1cmF0aW9uICogMTAwMDtcbiAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb25NcyAtIGZyYW1lSW50ZXJ2YWwgKiAwLjUgfHwgd3JpdHRlbiA+PSB0b3RhbCkge1xuICAgICAgcmVzb2x2ZXI/LigpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB3aW4gPSBhd2FpdCBsb2FkV2luZG93KHtcbiAgICBzb3VyY2UsXG4gICAgcmVuZGVyZXI6IG9wdGlvbnMsXG4gICAgc2lnbmFsLFxuICAgIG9uQ3JlYXRlZDogKHdpbikgPT4ge1xuICAgICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgICBkaXNwb3NlQXVkaW8gPSBhdHRhY2hBdWRpb0xpc3RlbmVycyh7XG4gICAgICAgICAgd2M6IHdpbi53ZWJDb250ZW50cyxcbiAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgIGdldFZpZGVvVGltZU1zOiAoKSA9PiBsYXN0V3JpdHRlblRpbWUgPz8gMCxcbiAgICAgICAgICBvbkVycm9yOiAoZTogRXJyb3IpID0+IChlbmNvZGVFcnJvciA/Pz0gZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG5cbiAgdHJ5IHtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIHBhaW50KTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiByZWplY3Rlcj8uKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiB7XG4gICAgICBbcmVzb2x2ZXIsIHJlamVjdGVyXSA9IFtyLCBqXTtcbiAgICAgIGxldCBsYXN0V3JpdHRlbiA9IDA7XG4gICAgICBsZXQgc3R1Y2sgPSAwO1xuICAgICAgY2xlYXJTdHVja0NoZWNrID0gcGVyaW9kaWNhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh3cml0dGVuICE9PSBsYXN0V3JpdHRlbikge1xuICAgICAgICAgIGxhc3RXcml0dGVuID0gd3JpdHRlbjtcbiAgICAgICAgICBzdHVjayA9IDA7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R1Y2sgPj0gMykge1xuICAgICAgICAgIHJlamVjdGVyPy4obmV3IEVycm9yKGByZW5kZXJlciB0aW1lb3V0IEAgJHt3cml0dGVufSBsYXN0VHMgJHtsYXN0V3JpdHRlbn1gKSk7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBzdHVjaysrO1xuICAgICAgICBjb25zdCBibXAgPSBhd2FpdCB3aW4ud2ViQ29udGVudHMuY2FwdHVyZVBhZ2UoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgaWYgKGJtcCAmJiAhd2luLmlzRGVzdHJveWVkKCkpIHtcbiAgICAgICAgICBwYWludCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgYm1wKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSwgMTAwMCAvIGZwcyk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJTdHVja0NoZWNrPy4oKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBkaXNwb3NlQXVkaW8/LigpO1xuICAgIGF3YWl0IGVuY29kZXIuZmluaXNoKCk7XG4gICAgc2NyZWVuc2hvdHMgPSBhd2FpdCB0YWtlci5maW5pc2gobGFzdEZyYW1lKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvciB8fCB3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJsYW5rID0gYmxhbmtTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChibGFuayA+PSBCTEFOS19XQVJOX1JBVElPKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gYmxhbmstZnJhbWUgcmF0aW8gJHtNYXRoLnJvdW5kKGJsYW5rICogMTAwKX0lIOKAlCBwb3NzaWJsZSB3aGl0ZS9ibGFuayBzY3JlZW5gKTtcbiAgICB9XG4gICAgY29uc3QgeyBqYW5rIH0gPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoamFuayA+PSBKQU5LX1dBUk5fU0NPUkUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBqYW5rIHNjb3JlICR7amFuay50b0ZpeGVkKDIpfSDigJQgZHJvcHBlZCBmcmFtZXNgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgb3V0RmlsZXMsIGJsYW5rLCBzY3JlZW5zaG90cywgamFuayB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgdHlwZSB7IFdlYkZyYW1lTWFpbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgYWJvcnRhYmxlIH0gZnJvbSBcIi4uLy4uL2Jhc2UvdGltaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1ZpZGVvXVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VPcHRpb25zIHtcbiAgZnJhbWU6IFdlYkZyYW1lTWFpbiB8IHVuZGVmaW5lZDtcbiAgdGltZXN0YW1wTXM6IG51bWJlcjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8vIE9ubHkgdGhlIGRldGVybWluaXN0aWMgcmVuZGVyZXIgKHNob290KSBkcml2ZXMgdGhpczsgcmVhbC10aW1lIHZpZGVvcyBzZWxmLXRpY2sgdmlhIHJBRiBpbiB0aGUgcGFnZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZHZhbmNlVmlkZW9zKHsgZnJhbWUsIHRpbWVzdGFtcE1zLCBzaWduYWwgfTogQWR2YW5jZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFmcmFtZT8udXJsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgdHJ5IHtcbiAgICAvLyBTb3VyY2Ugb3BlbnMgYXJlIHdhbGwtdGltZSBhc3luYzsgc2V0dGxlIHRoZW0gZmlyc3Qgc28gdmlydHVhbCB0aW1lIGNhbid0IHN0ZXAgb250byBhIGJsYW5rLCBub3QteWV0LW9wZW5lZCA8dmlkZW8+LlxuICAgIGF3YWl0IGFib3J0YWJsZShmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChgd2luZG93Ll9fcHVwX3ZpZGVvX18mJndpbmRvdy5fX3B1cF92aWRlb19fLnJlYWR5KClgKSwgc2lnbmFsKTtcbiAgICAvLyBObyB3YWxsLWNsb2NrIGNhcDogYSBzbG93IGZldGNoIGRlbGF5cyB0aGUgZnJhbWUgaW5zdGVhZCBvZiBkcm9wcGluZyBpdCwga2VlcGluZyAtZCBvdXRwdXQgZGV0ZXJtaW5pc3RpYy5cbiAgICBhd2FpdCBhYm9ydGFibGUoXG4gICAgICBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChgd2luZG93Ll9fcHVwX3ZpZGVvX18mJndpbmRvdy5fX3B1cF92aWRlb19fLmFkdmFuY2UoJHt0aW1lc3RhbXBNc30pYCksXG4gICAgICBzaWduYWwsXG4gICAgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBsb2dnZXIud2FybihUQUcsIGBhZHZhbmNlIHNraXBwZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgdHlwZSBBZHZhbmNlT3B0aW9ucywgYWR2YW5jZVZpZGVvcyB9IGZyb20gXCIuL3ZpZGVvL2FkdmFuY2VcIjtcblxuZXhwb3J0IGNvbnN0IFRJQ0tfU1lNQk9MID0gXCJfX3B1cF90aWNrX19cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpY2soYXJnczogQWR2YW5jZU9wdGlvbnMpIHtcbiAgY29uc3QgeyBmcmFtZSwgdGltZXN0YW1wTXMgfSA9IGFyZ3M7XG4gIGlmICghZnJhbWUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZXhwciA9IGB3aW5kb3cuJHtUSUNLX1NZTUJPTH0mJndpbmRvdy4ke1RJQ0tfU1lNQk9MfS5wcm9jZXNzKCR7dGltZXN0YW1wTXN9KWA7XG4gIGNvbnN0IHRpY2tFdiA9IGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KGV4cHIpO1xuICBhd2FpdCBQcm9taXNlLmFsbChbd2l0aFRpbWVvdXQodGlja0V2LCA1XzAwMCwgXCJ0aWNrLmV4ZWN1dGVKYXZhU2NyaXB0XCIpLCBhZHZhbmNlVmlkZW9zKGFyZ3MpXSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzIzLlxuXG5pbXBvcnQgeyBEZW11eGVyLCB0eXBlIERlbXV4ZXJPcHRpb25zIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5cbi8vIGZmbXBlZyByZWFkL3dyaXRlIGRlYWRsaW5lICjCtXMpOyBhIGJsb2NraW5nIG9wZW4gaWdub3JlcyBBYm9ydFNpZ25hbCwgc28gdGhpcyBib3VuZHMgYSBzdHVjayBDRE4uXG5jb25zdCBSV19USU1FT1VUX1VTID0gXCI4MDAwMDAwXCI7XG5cbi8vIGZmbXBlZyBvcGVucyBodHRwL2h0dHBzIHdpdGggbmF0aXZlIGJ5dGUtcmFuZ2UgcmVxdWVzdHMsIHNvIG9ubHkgdGhlIGRlY29kZWQgcmFuZ2VzIGRvd25sb2FkLlxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5JbnB1dChzcmM6IHN0cmluZywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPERlbXV4ZXI+IHtcbiAgY29uc3Qgb3B0aW9uczogRGVtdXhlck9wdGlvbnMgPSB7IHNpZ25hbCwgb3B0aW9uczogeyByd190aW1lb3V0OiBSV19USU1FT1VUX1VTIH0gfTtcbiAgcmV0dXJuIERlbXV4ZXIub3BlbihzcmMsIG9wdGlvbnMpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8yNS5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBEZWNvZGVyLCBGaWx0ZXJBUEkgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWTUVESUFfVFlQRV9WSURFTyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcbmltcG9ydCB7IG9wZW5JbnB1dCB9IGZyb20gXCIuL29wZW5cIjtcblxuZXhwb3J0IGludGVyZmFjZSBEZWNvZGVkRnJhbWUge1xuICBpZHg6IG51bWJlcjtcbiAgYnVmOiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb2RlRnJhbWVzT3B0aW9ucyB7XG4gIHNyYzogc3RyaW5nO1xuICBtZXRhOiBWaWRlb01ldGE7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG59XG5cbi8vIERlY29kZSBhIHNvdXJjZSB0byBmcHMtcmVzYW1wbGVkLCBkaXNwbGF5LXNjYWxlZCwgdGlnaHQtUkdCQSBmcmFtZXMgaW4gb3JkZXIgKGlkeCA9IDEtYmFzZWQgZGVjb2RlIHBvc2l0aW9uKS4gQ29uc3VtZXIgYmFja3ByZXNzdXJlIGlzIGp1c3QgcHVsbGluZyBzbG93ZXIuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGRlY29kZUZyYW1lcyh7IHNyYywgbWV0YSwgc2lnbmFsIH06IERlY29kZUZyYW1lc09wdGlvbnMpOiBBc3luY0dlbmVyYXRvcjxEZWNvZGVkRnJhbWU+IHtcbiAgYXdhaXQgdXNpbmcgaW5wdXQgPSBhd2FpdCBvcGVuSW5wdXQoc3JjLCBzaWduYWwpO1xuICBjb25zdCBzdHJlYW0gPSBpbnB1dC5zdHJlYW1zPy5maW5kKChzKSA9PiBzLmNvZGVjcGFyLmNvZGVjVHlwZSA9PT0gQVZNRURJQV9UWVBFX1ZJREVPKTtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyB2aWRlbyBzdHJlYW1cIik7XG4gIH1cbiAgdXNpbmcgZGVjID0gYXdhaXQgRGVjb2Rlci5jcmVhdGUoc3RyZWFtLCB7IHNpZ25hbCB9KTtcbiAgY29uc3QgeyBmcmFtZVdpZHRoLCBmcmFtZUhlaWdodCwgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBtZXRhO1xuICBjb25zdCBzY2FsZSA9IGZyYW1lV2lkdGggIT09IHdpZHRoIHx8IGZyYW1lSGVpZ2h0ICE9PSBoZWlnaHQgPyBgc2NhbGU9JHtmcmFtZVdpZHRofToke2ZyYW1lSGVpZ2h0fSxgIDogXCJcIjtcbiAgdXNpbmcgZmlsdGVyID0gRmlsdGVyQVBJLmNyZWF0ZShgZnBzPSR7ZnBzfSwke3NjYWxlfWZvcm1hdD1yZ2JhYCwgeyBzaWduYWwgfSk7XG4gIGxldCBrID0gMDtcbiAgZm9yIGF3YWl0ICh1c2luZyBmcmFtZSBvZiBmaWx0ZXIuZnJhbWVzKGRlYy5mcmFtZXMoaW5wdXQucGFja2V0cyhzdHJlYW0uaW5kZXgpKSkpIHtcbiAgICBpZiAoIWZyYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgeWllbGQgeyBpZHg6ICsraywgYnVmOiBwYWNrUmdiYShmcmFtZSkgfTtcbiAgfVxufVxuXG4vLyBUaWdodCBSR0JBIGNvcHkgKGRyb3AgbGliYXYgcm93IHBhZGRpbmcpIHNvIHRoZSBwYWdlIGNhbiB3cmFwIGl0IHN0cmFpZ2h0IGludG8gSW1hZ2VEYXRhLlxuZnVuY3Rpb24gcGFja1JnYmEoZnJhbWU6IEZyYW1lKTogQnVmZmVyIHtcbiAgY29uc3Qgcm93ID0gZnJhbWUud2lkdGggKiA0O1xuICBjb25zdCBzdHJpZGUgPSBmcmFtZS5saW5lc2l6ZVswXSE7XG4gIGNvbnN0IHNyYyA9IGZyYW1lLmRhdGEhWzBdITtcbiAgaWYgKHN0cmlkZSA9PT0gcm93KSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNyYy5zdWJhcnJheSgwLCByb3cgKiBmcmFtZS5oZWlnaHQpKTtcbiAgfVxuICBjb25zdCBvdXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUocm93ICogZnJhbWUuaGVpZ2h0KTtcbiAgZm9yIChsZXQgeSA9IDA7IHkgPCBmcmFtZS5oZWlnaHQ7IHkrKykge1xuICAgIHNyYy5jb3B5KG91dCwgeSAqIHJvdywgeSAqIHN0cmlkZSwgeSAqIHN0cmlkZSArIHJvdyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGRlY29kZUZyYW1lcyB9IGZyb20gXCIuL2RlY29kZVwiO1xuaW1wb3J0IHR5cGUgeyBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRGVjb2RlU2Vzc2lvbl1cIjtcbmNvbnN0IERFQ09ERV9BSEVBRCA9IDQ7IC8vIGRlY29kZSBhIGZldyBmcmFtZXMgcGFzdCB0aGUgaGlnaGVzdCByZXF1ZXN0OyB0aGUgcGFnZSBhbHJlYWR5IHByZWZldGNoZXNcbmNvbnN0IEtFRVBfQkVISU5EID0gMTY7IC8vIG1pbiBmcmFtZXMgaGVsZCBiZWhpbmQgdGhlIGhlYWQ7IG11c3QgZXhjZWVkIHRoZSBwYWdlJ3MgcHJlZmV0Y2ggbGVhZCAoQUhFQUQ9MTApXG5jb25zdCBNRU1PUllfQlVER0VUID0gMjU2ICogMTAyNCAqIDEwMjQ7IC8vIHJldGFpbiBkZWNvZGVkIGZyYW1lcyB1cCB0byB0aGlzIHBlci1zZXNzaW9uIGJ1ZGdldCBzbyBhIHNtYWxsIGxvb3BpbmcgdmlkZW8gcmUtc2VydmVzIGZyb20gbWVtb3J5IGluc3RlYWQgb2YgcmUtZGVjb2RpbmdcbmNvbnN0IE1BWF9QQVNTX1JFVFJZID0gMzsgLy8gcmUtb3BlbiBhIHN0cmVhbWVkIHNvdXJjZSB0aGlzIG1hbnkgdGltZXMgb24gYSB0cmFuc2llbnQgZGVjb2RlIGVycm9yIGJlZm9yZSByZXBvcnRpbmcgZW5kLW9mLXN0cmVhbVxuXG5pbnRlcmZhY2UgV2FpdGVyIHtcbiAgaWR4OiBudW1iZXI7XG4gIHJlc29sdmU6IChiOiBCdWZmZXIpID0+IHZvaWQ7XG59XG5cbi8vIERlbWFuZC1kcml2ZW4gaW4tcHJvY2VzcyBkZWNvZGUgKERlbXV4ZXLihpJEZWNvZGVy4oaSZnBzL3NjYWxlL3JnYmEgZmlsdGVyKSBzZXJ2aW5nIGZyYW1lIE4gYXMgdGlnaHQgUkdCQTsgZm9yd2FyZC1vbmx5IOKAlCBhIGxvb3AvcmV3aW5kIHJlLWRlY29kZXMgZnJvbSBmcmFtZSAxIHVubGVzcyB0aGUgd2hvbGUgY2xpcCBzdGlsbCBmaXRzIHRoZSBtZW1vcnkgYnVkZ2V0LlxuZXhwb3J0IGNsYXNzIERlY29kZVNlc3Npb24ge1xuICBwcml2YXRlIF9idWYgPSBuZXcgTWFwPG51bWJlciwgQnVmZmVyPigpO1xuICBwcml2YXRlIF9yZWFkeSA9IDA7XG4gIHByaXZhdGUgX3dhbnQgPSAxO1xuICBwcml2YXRlIF9kb25lID0gZmFsc2U7XG4gIHByaXZhdGUgX2Nsb3NlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9nZW4gPSAwO1xuICBwcml2YXRlIF9jdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBwcml2YXRlIF93YWl0ZXJzID0gbmV3IFNldDxXYWl0ZXI+KCk7XG4gIHByaXZhdGUgX3Jlc3VtZTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9yZXN0YXJ0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIC8vIExlYWQgZnJhbWVzIGhlbGQgb24gdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZTsgY29udGVudCBpZHggaXMgb2Zmc2V0IHBhc3QgdGhlbS5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGVhZEZyYW1lczogbnVtYmVyO1xuICAvLyBGcmFtZXMga2VwdCBiZWhpbmQgdGhlIGhlYWQ7IGEgY2xpcCB0aGF0IGZpdHMgdGhlIGJ1ZGdldCByZXRhaW5zIGV2ZXJ5IGZyYW1lLCBzbyBsb29wcyByZS1zZXJ2ZSBmcm9tIG1lbW9yeS5cbiAgcHJpdmF0ZSByZWFkb25seSBfa2VlcENvdW50OiBudW1iZXI7XG4gIC8vIFJlc29sdmVzIHdoZW4gcHVtcCgpIGZ1bGx5IHVud2luZHMg4oCUIGF3YWl0ZWQgb24gY2xvc2Ugc28gbm9kZS1hdiBnZW5lcmF0b3JzIGZyZWUgYmVmb3JlIHByb2Nlc3MgdGVhcmRvd24uXG4gIHByaXZhdGUgcmVhZG9ubHkgX3B1bXBEb25lOiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IG1ldGE6IFZpZGVvTWV0YSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zcmM6IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5fbGVhZEZyYW1lcyA9IE1hdGgucm91bmQobWV0YS5sZWFkR2FwICogbWV0YS5mcHMpO1xuICAgIHRoaXMuX2tlZXBDb3VudCA9IE1hdGgubWF4KEtFRVBfQkVISU5ELCBNYXRoLmZsb29yKE1FTU9SWV9CVURHRVQgLyAobWV0YS5mcmFtZVdpZHRoICogbWV0YS5mcmFtZUhlaWdodCAqIDQpKSk7XG4gICAgdGhpcy5fcHVtcERvbmUgPSB0aGlzLnB1bXAoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZyYW1lKGlkeDogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBpZiAoaWR4IDwgMSkge1xuICAgICAgaWR4ID0gMTtcbiAgICB9XG4gICAgaWYgKGlkeCA8PSB0aGlzLl9sZWFkRnJhbWVzKSB7XG4gICAgICBpZHggPSB0aGlzLl9sZWFkRnJhbWVzICsgMTsgLy8gaG9sZCB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lIGFjcm9zcyB0aGUgbGVhZFxuICAgIH1cbiAgICBjb25zdCBoaXQgPSB0aGlzLl9idWYuZ2V0KGlkeCk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgcmV0dXJuIGhpdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RvbmUgJiYgaWR4ID4gdGhpcy5fcmVhZHkpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7IC8vIGJleW9uZCBlbmQgb2Ygc3RyZWFtXG4gICAgfVxuICAgIGlmIChpZHggPiB0aGlzLl9yZWFkeSkge1xuICAgICAgLy8gZm9yd2FyZCwgbm90IHlldCBkZWNvZGVkIGluIHRoaXMgcGFzc1xuICAgICAgaWYgKGlkeCA+IHRoaXMuX3dhbnQpIHtcbiAgICAgICAgdGhpcy5fd2FudCA9IGlkeDtcbiAgICAgIH1cbiAgICAgIHRoaXMud2FrZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmljdGVkIChsb29wL3Jld2luZCk6IGNsZWFyIHJlYWR5L2RvbmUgc3luY2hyb25vdXNseSBzbyB0aGUgd3JhcCdzIHByZWZldGNoIGJ1cnN0IGNvYWxlc2NlcyBpbnRvIG9uZSByZXN0YXJ0LCBub3Qgb25lIHBlciBmcmFtZS5cbiAgICAgIHRoaXMuX3JlYWR5ID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3dhbnQgPSBpZHg7XG4gICAgICB0aGlzLnJlcXVlc3RSZXN0YXJ0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLndhaXQoaWR4KTtcbiAgfVxuXG4gIC8vIEF3YWl0IHRoZSBwdW1wIHNvIHRoZSBub2RlLWF2IGRlbXV4ZXIvZGVjb2RlciBnZW5lcmF0b3JzIHVud2luZCAoY29udGV4dHMgZnJlZWQpIGJlZm9yZSB0aGUgY2FsbGVyIGV4aXRzLlxuICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgIHRoaXMuX2N0cmwuYWJvcnQoKTtcbiAgICB0aGlzLndha2UoKTtcbiAgICB0aGlzLnJlcXVlc3RSZXN0YXJ0KCk7XG4gICAgZm9yIChjb25zdCB3IG9mIHRoaXMuX3dhaXRlcnMpIHtcbiAgICAgIHcucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuICAgIH1cbiAgICB0aGlzLl93YWl0ZXJzLmNsZWFyKCk7XG4gICAgdGhpcy5fYnVmLmNsZWFyKCk7XG4gICAgYXdhaXQgdGhpcy5fcHVtcERvbmU7XG4gIH1cblxuICAvLyAtZC1vbmx5IHN1YnN5c3RlbSwgc28gbmV2ZXIgdGltZSBvdXQ6IGRyYWluV2FpdGVycyByZXNvbHZlcyBvbiBkZWNvZGUsIEVPRiwgb3IgY2xvc2Ug4oCUIG91dHB1dCBuZXZlciBkZXBlbmRzIG9uIGZldGNoIGxhdGVuY3kuXG4gIHByaXZhdGUgd2FpdChpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlc29sdmUpID0+IHRoaXMuX3dhaXRlcnMuYWRkKHsgaWR4LCByZXNvbHZlIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgd2FrZSgpOiB2b2lkIHtcbiAgICBjb25zdCByID0gdGhpcy5fcmVzdW1lO1xuICAgIHRoaXMuX3Jlc3VtZSA9IHVuZGVmaW5lZDtcbiAgICByPy4oKTtcbiAgfVxuXG4gIC8vIEludmFsaWRhdGUgdGhlIHJ1bm5pbmcgcGFzcyAob3Igd2FrZSBhIHBhcmtlZCBvbmUpIHNvIHB1bXAoKSBzdGFydHMgYSBmcmVzaCBkZWNvZGUgZnJvbSBmcmFtZSAxLlxuICBwcml2YXRlIHJlcXVlc3RSZXN0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuX2dlbisrO1xuICAgIGNvbnN0IHIgPSB0aGlzLl9yZXN0YXJ0O1xuICAgIHRoaXMuX3Jlc3RhcnQgPSB1bmRlZmluZWQ7XG4gICAgcj8uKCk7XG4gICAgdGhpcy53YWtlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHB1bXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGZhaWxzID0gMDtcbiAgICB3aGlsZSAoIXRoaXMuX2Nsb3NlZCkge1xuICAgICAgY29uc3QgZ2VuID0gdGhpcy5fZ2VuO1xuICAgICAgdGhpcy5fcmVhZHkgPSAwO1xuICAgICAgdGhpcy5fZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fYnVmLmNsZWFyKCk7XG4gICAgICBsZXQgZmFpbGVkID0gZmFsc2U7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlY29kZVBhc3MoZ2VuKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jbG9zZWQgJiYgdGhpcy5fZ2VuID09PSBnZW4pIHtcbiAgICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgVEFHLFxuICAgICAgICAgICAgYFske3RoaXMubWV0YS5pZC5zbGljZSgwLCA4KX1dIGRlY29kZSBwYXNzIGZhaWxlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2dlbiAhPT0gZ2VuKSB7XG4gICAgICAgIGZhaWxzID0gMDtcbiAgICAgICAgY29udGludWU7IC8vIHJlc3RhcnQgcmVxdWVzdGVkIG1pZC1wYXNzXG4gICAgICB9XG4gICAgICAvLyBBIHRocm93biBwYXNzIGlzIGEgdHJhbnNpZW50IHNvdXJjZSBlcnJvciAoZS5nLiBhIHN0cmVhbWVkIGxvb3AgcmUtb3Blbik7IHJldHJ5IGluc3RlYWQgb2YgcmVwb3J0aW5nIEVPRiwgd2hpY2ggd291bGQgYmxhbmsgdGhlIGZyYW1lLlxuICAgICAgaWYgKGZhaWxlZCAmJiArK2ZhaWxzIDw9IE1BWF9QQVNTX1JFVFJZKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZmFpbHMgPSAwO1xuICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLmRyYWluV2FpdGVycygpO1xuICAgICAgYXdhaXQgdGhpcy51bnRpbFJlc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlY29kZVBhc3MoZ2VuOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdHJlYW0gPSBkZWNvZGVGcmFtZXMoeyBzcmM6IHRoaXMuX3NyYywgbWV0YTogdGhpcy5tZXRhLCBzaWduYWw6IHRoaXMuX2N0cmwuc2lnbmFsIH0pO1xuICAgIGZvciBhd2FpdCAoY29uc3QgeyBpZHgsIGJ1ZiB9IG9mIHN0cmVhbSkge1xuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCB8fCB0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBhdCA9IHRoaXMuX2xlYWRGcmFtZXMgKyBpZHg7IC8vIG1hcCBkZWNvZGUgcG9zaXRpb24gcGFzdCB0aGUgaGVsZCBsZWFkLWdhcCBmcmFtZXNcbiAgICAgIHdoaWxlICghdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuICYmIGF0ID4gdGhpcy5kZW1hbmQgKyBERUNPREVfQUhFQUQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXVzZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCB8fCB0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9idWYuc2V0KGF0LCBidWYpO1xuICAgICAgdGhpcy5fcmVhZHkgPSBhdDtcbiAgICAgIC8vIERyYWluIGJlZm9yZSBldmljdDogd2l0aCB3YW50IGZhciBhaGVhZCB0aGUgZmxvb3IgY292ZXJzIHRoaXMgZnJhbWUsIGFuZCBldmljdGluZyBpdCBmaXJzdCBzdGFydmVzIGl0cyB3YWl0ZXIgZm9yZXZlci5cbiAgICAgIHRoaXMuZHJhaW5XYWl0ZXJzKCk7XG4gICAgICB0aGlzLmV2aWN0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2FpdGVycyB0aGF0IHN1cnZpdmVkIGEgcmV3aW5kIHJlc3RhcnQgYXJlIHN0aWxsIGRlbWFuZDsgaWdub3JpbmcgdGhlbSBwYXJrcyB0aGUgcGFzcyBhbmQgc3RhcnZlcyB0aGVtIGZvcmV2ZXIuXG4gIHByaXZhdGUgZ2V0IGRlbWFuZCgpOiBudW1iZXIge1xuICAgIGxldCBkID0gdGhpcy5fd2FudDtcbiAgICBmb3IgKGNvbnN0IHcgb2YgdGhpcy5fd2FpdGVycykge1xuICAgICAgaWYgKHcuaWR4ID4gZCkge1xuICAgICAgICBkID0gdy5pZHg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXVzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgIHRoaXMuX3Jlc3VtZSA9IHI7XG4gICAgfSk7XG4gIH1cblxuICAvLyBQYXJrIHVudGlsIGEgbG9vcC9iYWNrd2FyZCByZXF1ZXN0IChvciBjbG9zZSkgY2FsbHMgcmVxdWVzdFJlc3RhcnQoKS5cbiAgcHJpdmF0ZSB1bnRpbFJlc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgIHRoaXMuX3Jlc3RhcnQgPSByO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBldmljdCgpOiB2b2lkIHtcbiAgICBjb25zdCBmbG9vciA9IHRoaXMuX3dhbnQgLSB0aGlzLl9rZWVwQ291bnQ7XG4gICAgZm9yIChjb25zdCBrIG9mIHRoaXMuX2J1Zi5rZXlzKCkpIHtcbiAgICAgIGlmIChrIDwgZmxvb3IpIHtcbiAgICAgICAgdGhpcy5fYnVmLmRlbGV0ZShrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluV2FpdGVycygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsuLi50aGlzLl93YWl0ZXJzXSkge1xuICAgICAgY29uc3QgaGl0ID0gdGhpcy5fYnVmLmdldChlbnRyeS5pZHgpO1xuICAgICAgaWYgKGhpdCkge1xuICAgICAgICB0aGlzLl93YWl0ZXJzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgIGVudHJ5LnJlc29sdmUoaGl0KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgICB0aGlzLl93YWl0ZXJzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgIGVudHJ5LnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IERlY29kZXIgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWTUVESUFfVFlQRV9WSURFTyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgb3BlbklucHV0IH0gZnJvbSBcIi4vb3BlblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2JlUmVzdWx0IHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIC8qKiBQVFMgKHMpIG9mIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWU7IGEgY29ycnVwdC9lbXB0eSBsZWFkaW5nIHJ1biBpcyBoZWxkIG9uIGl0LCBsaWtlIENocm9tZS4gKi9cbiAgbGVhZEdhcDogbnVtYmVyO1xufVxuXG4vLyBObyB3YWxsLWNsb2NrIGNhcDogb3BlbklucHV0J3MgcGVyLXJlYWQgcndfdGltZW91dCBib3VuZHMgYSBzdHVjayBzb3VyY2UsIGFuZCB0aGUgY2FsbGVyIHJldHJpZXMgb24gdGhyb3cuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvYmUoc3JjOiBzdHJpbmcpOiBQcm9taXNlPFByb2JlUmVzdWx0PiB7XG4gIGF3YWl0IHVzaW5nIGQgPSBhd2FpdCBvcGVuSW5wdXQoc3JjKTtcbiAgY29uc3Qgc3RyZWFtID0gZC5zdHJlYW1zPy5maW5kKChzKSA9PiBzLmNvZGVjcGFyLmNvZGVjVHlwZSA9PT0gQVZNRURJQV9UWVBFX1ZJREVPKTtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcm9iZTogbm8gdmlkZW8gc3RyZWFtXCIpO1xuICB9XG4gIGNvbnN0IGR1cmF0aW9uID0gZC5kdXJhdGlvbiA+IDAgPyBkLmR1cmF0aW9uIDogMDtcbiAgY29uc3QgdGIgPSBzdHJlYW0udGltZUJhc2UubnVtIC8gc3RyZWFtLnRpbWVCYXNlLmRlbjtcbiAgdXNpbmcgZGVjID0gYXdhaXQgRGVjb2Rlci5jcmVhdGUoc3RyZWFtLCB7IHRocmVhZENvdW50OiAxIH0pO1xuICBsZXQgbGVhZEdhcCA9IDA7XG4gIC8vIEZpcnN0IGNsZWFuIGZyYW1lJ3MgUFRTID0gd2hlcmUgY29udGVudCBiZWdpbnM7IHNraXAgY29ycnVwdCBmcmFtZXMgbGlrZSBhIGJyb3dzZXIuXG4gIG91dGVyOiBmb3IgYXdhaXQgKHVzaW5nIHBrdCBvZiBkLnBhY2tldHMoc3RyZWFtLmluZGV4KSkge1xuICAgIHRyeSB7XG4gICAgICBmb3IgYXdhaXQgKHVzaW5nIGZyYW1lIG9mIGRlYy5mcmFtZXMocGt0KSkge1xuICAgICAgICBpZiAoZnJhbWU/LmRlY29kZUVycm9yRmxhZ3MgIT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZWFkR2FwID0gTWF0aC5tYXgoMCwgTnVtYmVyKGZyYW1lLnB0cykgKiB0Yik7XG4gICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gY29ycnVwdCBwYWNrZXQg4oCUIHNraXAgdG8gdGhlIG5leHRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgd2lkdGg6IHN0cmVhbS5jb2RlY3Bhci53aWR0aCwgaGVpZ2h0OiBzdHJlYW0uY29kZWNwYXIuaGVpZ2h0LCBkdXJhdGlvbiwgbGVhZEdhcCB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8wNi5cblxuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IHJlYWRGaWxlLCBybSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvZGVjLCBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9ZVVY0MjBQLCBBVkVSUk9SX0VBR0FJTiwgQVZFUlJPUl9FT0YgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSwgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4uLy4uL2Jhc2UvZW5jb2Rlci9taXNjXCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi8uLi9iYXNlL2VuY29kZXIvbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTdHViRW5jb2RlT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xufVxuXG4vLyBSZWFsIHBhcnNlYWJsZSBtZWRpYSB3aXRoIHRoZSBzb3VyY2UncyBpbnRyaW5zaWMgc2l6ZSArIGR1cmF0aW9uLCBzbyBCbGluayBsYXlzIG91dCBsaWtlIENocm9tZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNvZGVTdHViV2VibSh7IHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uIH06IFN0dWJFbmNvZGVPcHRpb25zKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0xJQlZQWF9WUDkpO1xuICBpZiAoIWNvZGVjKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzdHViOiBlbmNvZGVyIG5vdCBmb3VuZDogJHtGRl9FTkNPREVSX0xJQlZQWF9WUDl9YCk7XG4gIH1cbiAgY29uc3QgcGF0aCA9IGpvaW4odG1wZGlyKCksIGBwdXBfc3R1Yl8ke3JhbmRvbUJ5dGVzKDgpLnRvU3RyaW5nKFwiaGV4XCIpfS53ZWJtYCk7XG4gIHRyeSB7XG4gICAge1xuICAgICAgYXdhaXQgdXNpbmcgbXV4ZXIgPSBuZXcgRm9ybWF0TXV4ZXIocGF0aCk7XG4gICAgICAvLyBUaW1lYmFzZSAxLzEwMDAgKGZwcyBwYXJhbSkgbGV0cyBvbmUgcGFja2V0IGNhcnJ5IHRoZSBmdWxsIHNvdXJjZSBkdXJhdGlvbiBpbiBtcy5cbiAgICAgIHVzaW5nIGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eChcbiAgICAgICAge1xuICAgICAgICAgIGNvZGVjLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBmcHM6IDEwMDAsXG4gICAgICAgICAgYml0cmF0ZTogMTAwXzAwMCxcbiAgICAgICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQLFxuICAgICAgICAgIG9wdGlvbnM6IHsgZGVhZGxpbmU6IFwicmVhbHRpbWVcIiwgXCJjcHUtdXNlZFwiOiBcIjhcIiB9LFxuICAgICAgICB9LFxuICAgICAgICBcInN0dWJDdHgub3BlbjJcIixcbiAgICAgICk7XG4gICAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4KTtcbiAgICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICAgIHVzaW5nIHN0dWIgPSBuZXcgU3R1YkZyYW1lKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3QgbXMgPSBCaWdJbnQoTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChkdXJhdGlvbiAqIDEwMDApKSk7XG4gICAgICBzdHViLmZyYW1lLnB0cyA9IDBuO1xuICAgICAgc3R1Yi5mcmFtZS5kdXJhdGlvbiA9IG1zO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5zZW5kRnJhbWUoc3R1Yi5mcmFtZSksIFwic3R1YkN0eC5zZW5kRnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4LnNlbmRGcmFtZShudWxsKSwgXCJzdHViQ3R4LmZsdXNoXCIpO1xuICAgICAgdXNpbmcgcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcInN0dWJDdHgucmVjZWl2ZVBhY2tldFwiKTtcbiAgICAgICAgcGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgICAgICBwa3QuZHVyYXRpb24gPSBtcztcbiAgICAgICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgICAgIHBrdC51bnJlZigpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgcmVhZEZpbGUocGF0aCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcm0ocGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuXG4vLyBPd25zIHRoZSBibGFjayBwaXhlbCBidWZmZXIgQU5EIGl0cyB6ZXJvLWNvcHkgZnJhbWUgdmlldyDigJQgYHVzaW5nYCBwaW5zIGJvdGggdW50aWwgYWZ0ZXIgZW5jb2RlLlxuY2xhc3MgU3R1YkZyYW1lIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IGZyYW1lOiBGcmFtZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYnVmOiBCdWZmZXI7XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBsdW1hID0gd2lkdGggKiBoZWlnaHQ7XG4gICAgY29uc3QgY2hyb21hID0gTWF0aC5jZWlsKHdpZHRoIC8gMikgKiBNYXRoLmNlaWwoaGVpZ2h0IC8gMik7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmFsbG9jKGx1bWEgKyBjaHJvbWEgKiAyLCAweDgwKTtcbiAgICB0aGlzLl9idWYuZmlsbCgwLCAwLCBsdW1hKTtcbiAgICB0aGlzLmZyYW1lID0gRnJhbWUuZnJvbVZpZGVvQnVmZmVyKHRoaXMuX2J1ZiwgeyB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCB9KTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5mcmFtZVtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi4vLi4vYmFzZS9yZXRyeVwiO1xuaW1wb3J0IHsgcHJveGllZFVybCB9IGZyb20gXCIuLi9uZXR3b3JrXCI7XG5pbXBvcnQgeyBEZWNvZGVTZXNzaW9uIH0gZnJvbSBcIi4vZGVjb2RlX3Nlc3Npb25cIjtcbmltcG9ydCB7IHR5cGUgUHJvYmVSZXN1bHQsIHByb2JlIH0gZnJvbSBcIi4vcHJvYmVcIjtcbmltcG9ydCB7IGVuY29kZVN0dWJXZWJtIH0gZnJvbSBcIi4vc3R1YlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvTWV0YSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBJbnRyaW5zaWMgc291cmNlIGRpbWVuc2lvbnMgKHJlcG9ydGVkIGFzIHZpZGVvV2lkdGgvdmlkZW9IZWlnaHQpLiAqL1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgLyoqIERlY29kZWQrc2NhbGVkIGZyYW1lIGRpbWVuc2lvbnMgYWN0dWFsbHkgc2VydmVkICjiiaQgc291cmNlOyBjYXBwZWQgdG8gdGhlIGRpc3BsYXkgYm94KS4gKi9cbiAgZnJhbWVXaWR0aDogbnVtYmVyO1xuICBmcmFtZUhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgLyoqIFNlY29uZHMgb2YgY29ycnVwdC9lbXB0eSBsZWFkaW5nIGNvbnRlbnQgaGVsZCBvbiB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lLiAqL1xuICBsZWFkR2FwOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3Blbk9wdGlvbnMge1xuICBzcmM6IHN0cmluZztcbiAgZnBzOiBudW1iZXI7XG4gIC8qKiBEaXNwbGF5LWJveCBwaXhlbHMgKGNhbnZhcyBiYWNraW5nIHN0b3JlKTsgZGVjb2RlIGlzIGRvd25zY2FsZWQgdG8gY292ZXIgdGhpcywgbmV2ZXIgdXBzY2FsZWQuICovXG4gIGRzdFc/OiBudW1iZXI7XG4gIGRzdEg/OiBudW1iZXI7XG4gIC8qKiBvYmplY3RGaXQ7IFwibm9uZVwiIG5lZWRzIDE6MSBuYXRpdmUgcGl4ZWxzIHNvIGl0IHNraXBzIGRvd25zY2FsZS4gKi9cbiAgZml0Pzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRW50cnkge1xuICBzZXNzaW9uOiBEZWNvZGVTZXNzaW9uO1xuICByZWZzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZVNlcnZlciB7XG4gIHByaXZhdGUgX3Nlc3Npb25zID0gbmV3IE1hcDxzdHJpbmcsIEVudHJ5PigpO1xuICBwcml2YXRlIF9wcm9iZXMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxQcm9iZVJlc3VsdD4+KCk7XG4gIHByaXZhdGUgX3N0dWJzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8QnVmZmVyPj4oKTtcbiAgcHJpdmF0ZSBfY2xvc2VkID0gZmFsc2U7XG5cbiAgLy8gLWQgZGVjb2RlIGJ5cGFzc2VzIHRoZSB3aW5kb3cgaW50ZXJjZXB0b3IsIHNvIGl0IHJlbWFwcyBob3N0cyBpdHNlbGYgd2hlbiB0aGUgaW5uZXIgcHJveHkgaXMgb24uXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3VzZUlubmVyUHJveHk6IGJvb2xlYW4pIHt9XG5cbiAgLy8gY2xvc2VkLWNoZWNrZWQgYWZ0ZXIgcHJvYmUgc28gY2xvc2VBbGwoKSBjYW4ndCByYWNlIGEgc2xvdyBvcGVuIGludG8gYSBsZWFrZWQgc2Vzc2lvbi5cbiAgYXN5bmMgb3BlbihvcHRzOiBPcGVuT3B0aW9ucyk6IFByb21pc2U8VmlkZW9NZXRhPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IGlkID0ga2V5KG9wdHMpO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgaGl0LnJlZnMrKztcbiAgICAgIHJldHVybiBoaXQuc2Vzc2lvbi5tZXRhO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSB0aGlzLl91c2VJbm5lclByb3h5ID8gcHJveGllZFVybChvcHRzLnNyYykgOiBvcHRzLnNyYztcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgdGhpcy5wcm9iZUNhY2hlZChzcmMpO1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBsZXQgZnJhbWVXaWR0aCA9IGluZm8ud2lkdGg7XG4gICAgbGV0IGZyYW1lSGVpZ2h0ID0gaW5mby5oZWlnaHQ7XG4gICAgLy8gRG93bnNjYWxlIHRvIGNvdmVyIHRoZSBkaXNwbGF5IGJveCAobmV2ZXIgdXBzY2FsZSk7IG9iamVjdEZpdCBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscy5cbiAgICBpZiAob3B0cy5kc3RXICYmIG9wdHMuZHN0SCAmJiBvcHRzLmZpdCAhPT0gXCJub25lXCIpIHtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLm1pbigxLCBNYXRoLm1heChvcHRzLmRzdFcgLyBpbmZvLndpZHRoLCBvcHRzLmRzdEggLyBpbmZvLmhlaWdodCkpO1xuICAgICAgZnJhbWVXaWR0aCA9IGV2ZW4oaW5mby53aWR0aCAqIHMpO1xuICAgICAgZnJhbWVIZWlnaHQgPSBldmVuKGluZm8uaGVpZ2h0ICogcyk7XG4gICAgfVxuICAgIGNvbnN0IG1ldGE6IFZpZGVvTWV0YSA9IHtcbiAgICAgIGlkLFxuICAgICAgd2lkdGg6IGluZm8ud2lkdGgsXG4gICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0LFxuICAgICAgZnJhbWVXaWR0aCxcbiAgICAgIGZyYW1lSGVpZ2h0LFxuICAgICAgZnBzOiBvcHRzLmZwcyxcbiAgICAgIGR1cmF0aW9uOiBpbmZvLmR1cmF0aW9uLFxuICAgICAgbGVhZEdhcDogaW5mby5sZWFkR2FwLFxuICAgIH07XG4gICAgdGhpcy5fc2Vzc2lvbnMuc2V0KGlkLCB7IHNlc3Npb246IG5ldyBEZWNvZGVTZXNzaW9uKG1ldGEsIHNyYyksIHJlZnM6IDEgfSk7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICAvLyBEZXRlcm1pbmlzdGljIG1lZGlhIHJlcXVlc3RzIHJlZGlyZWN0IGhlcmU6IHJlYWwgcGFyc2VhYmxlIGJ5dGVzIHdpdGggdHJ1ZSBpbnRyaW5zaWMgc2l6ZSArIGR1cmF0aW9uLlxuICBzdHViKHNyYzogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcmFtZS1zZXJ2ZXI6IGNsb3NlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVhbCA9IHRoaXMuX3VzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNyYykgOiBzcmM7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fc3R1YnMuZ2V0KHJlYWwpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGNvbnN0IHAgPSB0aGlzLnByb2JlQ2FjaGVkKHJlYWwpLnRoZW4oKGluZm8pID0+XG4gICAgICBlbmNvZGVTdHViV2VibSh7XG4gICAgICAgIHdpZHRoOiBpbmZvLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0LFxuICAgICAgICBkdXJhdGlvbjogaW5mby5kdXJhdGlvbixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcC5jYXRjaCgoKSA9PiB0aGlzLl9zdHVicy5kZWxldGUocmVhbCkpO1xuICAgIHRoaXMuX3N0dWJzLnNldChyZWFsLCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIGdldEZyYW1lKGlkOiBzdHJpbmcsIGlkeDogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBjb25zdCBlID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICB9XG4gICAgcmV0dXJuIGUuc2Vzc2lvbi5nZXRGcmFtZShpZHgpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGUgPSB0aGlzLl9zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmICghZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoLS1lLnJlZnMgPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3Nlc3Npb25zLmRlbGV0ZShpZCk7XG4gICAgYXdhaXQgZS5zZXNzaW9uLmNsb3NlKCk7XG4gIH1cblxuICAvLyBGYWlsZWQgcHJvYmVzIGV2aWN0IHNvIGEgdHJhbnNpZW50IHNvdXJjZSBlcnJvciBjYW4gcmV0cnkgb24gdGhlIG5leHQgcmVxdWVzdC5cbiAgcHJpdmF0ZSBwcm9iZUNhY2hlZChzcmM6IHN0cmluZyk6IFByb21pc2U8UHJvYmVSZXN1bHQ+IHtcbiAgICBjb25zdCBoaXQgPSB0aGlzLl9wcm9iZXMuZ2V0KHNyYyk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgcmV0dXJuIGhpdDtcbiAgICB9XG4gICAgY29uc3QgcCA9IHVzZVJldHJ5KHsgZm46IHByb2JlIH0pKHNyYyk7XG4gICAgcC5jYXRjaCgoKSA9PiB0aGlzLl9wcm9iZXMuZGVsZXRlKHNyYykpO1xuICAgIHRoaXMuX3Byb2Jlcy5zZXQoc3JjLCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlQWxsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2Nsb3NlZCA9IHRydWU7XG4gICAgY29uc3Qgc2Vzc2lvbnMgPSBbLi4udGhpcy5fc2Vzc2lvbnMudmFsdWVzKCldO1xuICAgIHRoaXMuX3Nlc3Npb25zLmNsZWFyKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoc2Vzc2lvbnMubWFwKChlKSA9PiBlLnNlc3Npb24uY2xvc2UoKSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGtleShvcHRzOiBPcGVuT3B0aW9ucyk6IHN0cmluZyB7XG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMVwiKVxuICAgIC51cGRhdGUoYCR7b3B0cy5zcmN9fCR7b3B0cy5mcHN9fCR7b3B0cy5kc3RXID8/IFwiXCJ9fCR7b3B0cy5kc3RIID8/IFwiXCJ9fCR7b3B0cy5maXQgPz8gXCJcIn1gKVxuICAgIC5kaWdlc3QoXCJoZXhcIik7XG59XG5cbi8vIFJvdW5kIGRvd24gdG8gYW4gZXZlbiBpbnRlZ2VyICjiiaUyKSBmb3IgdGhlIHNjYWxlci5cbmZ1bmN0aW9uIGV2ZW4objogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgciA9IE1hdGgucm91bmQobik7XG4gIHJldHVybiBNYXRoLm1heCgyLCByIC0gKHIgJSAyKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgRnJhbWVTZXJ2ZXIsIHR5cGUgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0ZyYW1lUHJvdG9jb2xdXCI7XG5cbi8vIFNjaGVtZSBpcyByZWdpc3RlcmVkIGFsb25nc2lkZSBgcHVwYCBpbiByZW5kZXJlci9wcm90b2NvbC50cyAoc2luZ2xlIGNhbGwgb25seSkuXG5jb25zdCBTQ0hFTUUgPSBcInB1cC1mcmFtZVwiO1xuXG5jb25zdCBDT1JTX0hFQURFUlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI6IFwiKlwiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LW1ldGhvZHNcIjogXCJHRVQsIE9QVElPTlNcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCI6IFwiKlwiLFxufTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LiBEZXRlcm1pbmlzdGljLW9ubHkgKHJlYWwtdGltZSB2aWRlb3Mgc2VsZi10aWNrLCBubyBmcmFtZSBwcm90b2NvbCkuXG5leHBvcnQgZnVuY3Rpb24gdXNlRnJhbWVQcm90b2NvbCh1c2VJbm5lclByb3h5OiBib29sZWFuKTogQXN5bmNEaXNwb3NhYmxlIHtcbiAgY29uc3QgZnMgPSBuZXcgRnJhbWVTZXJ2ZXIodXNlSW5uZXJQcm94eSk7XG4gIHByb3RvY29sLmhhbmRsZShTQ0hFTUUsIGFzeW5jIChyZXEpID0+IHtcbiAgICBpZiAocmVxLm1ldGhvZCA9PT0gXCJPUFRJT05TXCIpIHtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgIH1cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGAke3JlcS5tZXRob2R9ICR7dXJsLmhvc3RuYW1lfSR7dXJsLnNlYXJjaH1gKTtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoICh1cmwuaG9zdG5hbWUpIHtcbiAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICByZXR1cm4ganNvbk9rKFxuICAgICAgICAgICAgYXdhaXQgZnMub3Blbih7XG4gICAgICAgICAgICAgIHNyYzogdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIixcbiAgICAgICAgICAgICAgZnBzOiBpbnQodXJsLCBcImZwc1wiLCAzMCksXG4gICAgICAgICAgICAgIGRzdFc6IGludCh1cmwsIFwid1wiLCAwKSxcbiAgICAgICAgICAgICAgZHN0SDogaW50KHVybCwgXCJoXCIsIDApLFxuICAgICAgICAgICAgICBmaXQ6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiZml0XCIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJmcmFtZVwiOlxuICAgICAgICAgIHJldHVybiByZ2JhT2soYXdhaXQgZnMuZ2V0RnJhbWUodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJpZFwiKSA/PyBcIlwiLCBpbnQodXJsLCBcImlkeFwiLCAxKSkpO1xuICAgICAgICBjYXNlIFwic3R1YlwiOlxuICAgICAgICAgIHJldHVybiB3ZWJtT2soYXdhaXQgZnMuc3R1Yih1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiKSk7XG4gICAgICAgIGNhc2UgXCJjbG9zZVwiOlxuICAgICAgICAgIGF3YWl0IGZzLmNsb3NlKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMjA0LCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShgdW5rbm93biBhY3Rpb246ICR7dXJsLmhvc3RuYW1lfWAsIHtcbiAgICAgICAgICAgIHN0YXR1czogNDA0LFxuICAgICAgICAgICAgaGVhZGVyczogQ09SU19IRUFERVJTLFxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIGAke3VybC5ob3N0bmFtZX0gZmFpbGVkJHt1cmwuc2VhcmNofTogJHttc2d9YCk7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG1zZywgeyBzdGF0dXM6IDUwMCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luYyAoKSA9PiB7XG4gICAgICBwcm90b2NvbC51bmhhbmRsZShTQ0hFTUUpO1xuICAgICAgYXdhaXQgZnMuY2xvc2VBbGwoKTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBqc29uT2sobWV0YTogVmlkZW9NZXRhKTogUmVzcG9uc2Uge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KG1ldGEpLCB7XG4gICAgaGVhZGVyczogeyAuLi5DT1JTX0hFQURFUlMsIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gIH0pO1xufVxuXG4vLyBDYWNoZWQgc3R1YiBCdWZmZXIgaXMgc2hhcmVkIGFjcm9zcyByZXNwb25zZXMg4oCUIGNvcHkgc28gYSBjb25zdW1lciBjYW4ndCBkZXRhY2ggaXQuXG5mdW5jdGlvbiB3ZWJtT2soYnl0ZXM6IEJ1ZmZlcik6IFJlc3BvbnNlIHtcbiAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ5dGVMZW5ndGgpO1xuICBjb3B5LnNldChieXRlcyk7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoY29weS5idWZmZXIgYXMgQXJyYXlCdWZmZXIsIHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi5DT1JTX0hFQURFUlMsXG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcInZpZGVvL3dlYm1cIixcbiAgICAgIFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbi8vIFJhdyBSR0JBIHBpeGVsczsgdGhlIHBhZ2Ugd3JhcHMgdGhlbSBpbiBJbWFnZURhdGEgdXNpbmcgbWV0YS53aWR0aC9oZWlnaHQgaXQgZ290IGZyb20gYG9wZW5gLlxuZnVuY3Rpb24gcmdiYU9rKGJ5dGVzOiBCdWZmZXIpOiBSZXNwb25zZSB7XG4gIGlmIChieXRlcy5ieXRlTGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogNDEwLCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gIH1cbiAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ5dGVMZW5ndGgpO1xuICBjb3B5LnNldChieXRlcyk7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoY29weS5idWZmZXIgYXMgQXJyYXlCdWZmZXIsIHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi5DT1JTX0hFQURFUlMsXG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiLFxuICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tc3RvcmVcIixcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gaW50KHVybDogVVJMLCBrZXk6IHN0cmluZywgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHYgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChrZXkpO1xuICBjb25zdCBuID0gdiA/IHBhcnNlSW50KHYsIDEwKSA6IE5hTjtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiBmYWxsYmFjaztcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgQnJvd3NlcldpbmRvdywgTmF0aXZlSW1hZ2UsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGFkdmFuY2VWaXJ0dWFsVGltZSwgcGF1c2VWaXJ0dWFsVGltZSwgcmVzaXplRHJhd2FibGUgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IHNpemVFcXVhbHMgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQkxBTktfV0FSTl9SQVRJTywgQmxhbmtTdGF0cyB9IGZyb20gXCIuLi9iYXNlL3F1YWxpdHkvYmxhbmtcIjtcbmltcG9ydCB7IERyb3BTdGF0cywgSkFOS19XQVJOX1NDT1JFIH0gZnJvbSBcIi4uL2Jhc2UvcXVhbGl0eS9kcm9wXCI7XG5pbXBvcnQgeyBwZXJpb2RpY2FsIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IFNjcmVlbnNob3RUYWtlciB9IGZyb20gXCIuL3NjcmVlbnNob3RcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBkcmF3U3RlZ28sIEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCB3YWl0U3RlZ29UaWNrIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IHRpY2sgfSBmcm9tIFwiLi90aWNrXCI7XG5pbXBvcnQgeyB1c2VGcmFtZVByb3RvY29sIH0gZnJvbSBcIi4vdmlkZW8vcHJvdG9jb2xcIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbU2hvb3RdXCI7XG5jb25zdCBSRU5ERVJfRlBTID0gMjQwO1xuY29uc3QgUEFJTlRfVElNRU9VVF9NUyA9IDFfMDAwO1xuY29uc3QgUEFJTlRfSE9MRF9MSU1JVCA9IDM7XG5cbmludGVyZmFjZSBQYWludE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgZnBzOiBudW1iZXI7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgc2l6ZTogU2l6ZTtcbiAgbXM6IG51bWJlcjtcbn1cblxuLy8gUGFpbnRpbmcgc3RheXMgb24gZm9yIHRoZSB3aG9sZSBydW47IHdhaXRzIGZvciB0aGUgZnJhbWUgd2hvc2Ugc3RlZ28gcm93IG1hdGNoZXMgYG1zYCwgdW5kZWZpbmVkIG9uIHRpbWVvdXQuXG5hc3luYyBmdW5jdGlvbiBwYWludCh7IHdpbiwgZnBzLCBzaXplLCBtcyB9OiBQYWludE9wdGlvbnMpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICBsZXQgY2xlYXJEaXJ0eUNoZWNrOiBWb2lkRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY29uc3QgZnJhbWVTaXplOiBTaXplID0geyB3aWR0aDogc2l6ZS53aWR0aCwgaGVpZ2h0OiBzaXplLmhlaWdodCArIDEgfTtcbiAgY29uc3QgdDAgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IChfZTogdW5rbm93biwgX2Q6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZVNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gICAgICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgICAgICAvLyBOT1RFKEF1dG9rYWthKTogV2UgbXVzdCBlbnN1cmUgZnJhbWUgaXMgcmVhZHkgb24gZWxlY3Ryb24gdjQxK1xuICAgICAgICAgIHJlc2l6ZURyYXdhYmxlKGNkcCwgZnJhbWVTaXplKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVjb2RlIGZyb20gYSAyLXJvdyBzbGl2ZXIgZmlyc3Q7IHRoZSBmdWxsLWZyYW1lIHJlYWRiYWNrICh+OE1CIG1lbWNweSkgaXMgcGFpZCBvbmx5IG9uIHRoZSBtYXRjaGluZyBmcmFtZS5cbiAgICAgICAgY29uc3Qgc2xpdmVyID0gaW1hZ2UuY3JvcCh7IHg6IDAsIHk6IGZyYW1lU2l6ZS5oZWlnaHQgLSAyLCB3aWR0aDogRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIGhlaWdodDogMiB9KTtcbiAgICAgICAgY29uc3QgdHMgPSBkZWNvZGVTdGVnbyhzbGl2ZXIudG9CaXRtYXAoKSwgeyB3aWR0aDogRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIGhlaWdodDogMiB9KTtcbiAgICAgICAgaWYgKHRzID09PSB1bmRlZmluZWQgfHwgTWF0aC5hYnModHMgLSBtcykgPiAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZShCdWZmZXIuZnJvbShiaXRtYXAuYnVmZmVyLCBiaXRtYXAuYnl0ZU9mZnNldCwgc2l6ZS5oZWlnaHQgKiBzaXplLndpZHRoICogNCkpO1xuICAgICAgfTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgY2xlYXJEaXJ0eUNoZWNrID0gcGVyaW9kaWNhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChwZXJmb3JtYW5jZS5ub3coKSAtIHQwID49IFBBSU5UX1RJTUVPVVRfTVMpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihUQUcsIGBwYWludCB0aW1lb3V0IEAgJHttc31gKTtcbiAgICAgICAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJtcCA9IGF3YWl0IHdpbi53ZWJDb250ZW50cy5jYXB0dXJlUGFnZSgpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAgIGlmIChibXAgJiYgIXdpbi5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICAgICBoYW5kbGVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSwgMTAwMCAvIGZwcyk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJEaXJ0eUNoZWNrPy4oKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvb3Qob3B0aW9uczogSVBDUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBzb3VyY2UsIGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZXMsIGRpc2FibGVId0NvZGVjLCBzaWduYWwsIG9uUHJvZ3Jlc3MgfSA9IG9wdGlvbnM7XG4gIGlmICh3aXRoQXVkaW8pIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiYXVkaW8gd2lsbCBiZSBpZ25vcmVkIG9uIHRoaXMgbW9kZVwiKTtcbiAgfVxuICBjb25zdCB0YWtlciA9IG5ldyBTY3JlZW5zaG90VGFrZXIoeyBtYXJrczogb3B0aW9ucy5zY3JlZW5zaG90cywgd2lkdGgsIGhlaWdodCwgb3V0RmlsZXMgfSk7XG5cbiAgYXdhaXQgdXNpbmcgXyA9IHVzZUZyYW1lUHJvdG9jb2wob3B0aW9ucy51c2VJbm5lclByb3h5KTtcbiAgY29uc3QgdEluaXQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3Qgd2luUCA9IGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyOiBvcHRpb25zLCBzaWduYWwgfSk7XG4gIGF3YWl0IHVzaW5nIHBpcGVsaW5lID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZXMsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG4gIGNvbnN0IHdpbiA9IGF3YWl0IHdpblA7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiaW5pdCBkb25lOlwiLCB7IHNvdXJjZSwgY29zdDogcGVyZm9ybWFuY2Uubm93KCkgLSB0SW5pdCB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGhlbGQgPSAwO1xuICBsZXQgbGFzdEJpdG1hcDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBlbmNvZGVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGJsYW5rU3RhdHMgPSBuZXcgQmxhbmtTdGF0cyh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IERyb3BTdGF0cyhmcHMpO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IG1haW4gPSB3aW4ud2ViQ29udGVudHMubWFpbkZyYW1lO1xuICBjb25zdCBpZnJhbWUgPSBtYWluLmZyYW1lc1swXTtcbiAgdHJ5IHtcbiAgICAvLyBDb21wb3NpdG9yL2NhcHR1cmUgY2FkZW5jZSBjYXAsIE5PVCBvdXRwdXQgZnBzOyBmcmFtZXMgYXJlIGRhbWFnZS1kcml2ZW4gcGVyIHZpcnR1YWwgc3RlcC5cbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKFJFTkRFUl9GUFMpO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIGZvciAobGV0IGZyYW1lID0gMDsgZnJhbWUgPCB0b3RhbDsgZnJhbWUrKykge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgZnJhbWVNcyA9IChmcmFtZSArIDEpICogZnJhbWVJbnRlcnZhbDtcblxuICAgICAgY29uc3Qgc3dhcHBlZCA9IHdhaXRTdGVnb1RpY2sod2luLndlYkNvbnRlbnRzKTtcbiAgICAgIHN3YXBwZWQuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3RpY2soeyBmcmFtZTogaWZyYW1lLCB0aW1lc3RhbXBNczogZnJhbWVNcywgc2lnbmFsIH0pLCBkcmF3U3RlZ28od2luLndlYkNvbnRlbnRzLCBmcmFtZU1zKV0pO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW2FkdmFuY2VWaXJ0dWFsVGltZShjZHAsIGZyYW1lSW50ZXJ2YWwpLCBzd2FwcGVkXSk7XG4gICAgICBjb25zdCBwYWludGVkID0gYXdhaXQgcGFpbnQoeyBzb3VyY2UsIGZwcywgd2luLCBzaXplOiB7IHdpZHRoLCBoZWlnaHQgfSwgbXM6IGZyYW1lTXMgfSk7XG4gICAgICBpZiAocGFpbnRlZCkge1xuICAgICAgICBoZWxkID0gMDtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWxkKys7XG4gICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKDEpO1xuICAgICAgfVxuICAgICAgY29uc3QgYml0bWFwID0gcGFpbnRlZCA/PyBsYXN0Qml0bWFwO1xuICAgICAgaWYgKCFiaXRtYXAgfHwgaGVsZCA+PSBQQUlOVF9IT0xEX0xJTUlUKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVuZGVyZXIgZXhhdXN0ZWQgQCAke2ZyYW1lTXN9YCk7XG4gICAgICB9XG4gICAgICBsYXN0Qml0bWFwID0gYml0bWFwO1xuICAgICAgdGFrZXIuY2FwdHVyZShmcmFtZU1zLCBiaXRtYXApO1xuICAgICAgYmxhbmtTdGF0cy5zYW1wbGUoYml0bWFwKTtcbiAgICAgIC8vIEVuY29kZSB3aXRob3V0IGF3YWl0aW5nIChsaW1pdGVyIHNlcmlhbGl6ZXMpLCBzbyBpdCBvdmVybGFwcyB0aGUgbmV4dCBmcmFtZSdzIENEUC9wYWludCBzZXR1cC5cbiAgICAgIHBpcGVsaW5lLmVuY29kZUJHUkEoYml0bWFwKS5jYXRjaCgoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSk7XG4gICAgICB3cml0dGVuKys7XG4gICAgICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZW5jb2RlRXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgYXdhaXQgcGlwZWxpbmUuZmluaXNoKCk7XG4gICAgc2NyZWVuc2hvdHMgPSBhd2FpdCB0YWtlci5maW5pc2gobGFzdEJpdG1hcCk7XG4gIH1cblxuICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvcjtcbiAgfVxuICBpZiAod3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBibGFuayA9IGJsYW5rU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoYmxhbmsgPj0gQkxBTktfV0FSTl9SQVRJTykge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGJsYW5rLWZyYW1lIHJhdGlvICR7TWF0aC5yb3VuZChibGFuayAqIDEwMCl9JSDigJQgcG9zc2libGUgd2hpdGUvYmxhbmsgc2NyZWVuYCk7XG4gICAgfVxuICAgIGNvbnN0IHsgamFuayB9ID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgaWYgKGphbmsgPj0gSkFOS19XQVJOX1NDT1JFKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gamFuayBzY29yZSAke2phbmsudG9GaXhlZCgyKX0g4oCUIGZyYW1lcyBoZWxkIHBhc3QgcGFpbnQgdGltZW91dGApO1xuICAgIH1cbiAgICByZXR1cm4geyB3cml0dGVuLCBvdXRGaWxlcywgYmxhbmssIGphbmssIHNjcmVlbnNob3RzIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgYXBwLCBNZW51IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciB9IGZyb20gXCIuL2Jhc2UvY3Jhc2hcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbWFrZUNMSSB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgdHlwZSBJcGNNc2csIElwY01zZ1R5cGUsIElwY1dyaXRlciB9IGZyb20gXCIuL3JlbmRlcmVyL2lwY1wiO1xuaW1wb3J0IHsgc2V0dXBQdXBQcm90b2NvbCB9IGZyb20gXCIuL3JlbmRlcmVyL3Byb3RvY29sXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9yZW5kZXJcIjtcbmltcG9ydCB7IHNob290IH0gZnJvbSBcIi4vcmVuZGVyZXIvc2hvb3RcIjtcblxuY29uc3QgVEFHID0gXCJbQXBwXVwiO1xuXG5mdW5jdGlvbiBwcmludEZlYXR1cmVzKCkge1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImdwdSBmZWF0dXJlczpcIiwgYXBwLmdldEdQVUZlYXR1cmVTdGF0dXMoKSk7XG59XG5cbmNvbnN0IGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5sZXQgZXhpdGluZyA9IGZhbHNlO1xuXG5zdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlcigpO1xuTWVudS5zZXRBcHBsaWNhdGlvbk1lbnUobnVsbCk7XG5hcHAuZG9jaz8uaGlkZSgpO1xuYXBwLm9uKFwid2luZG93LWFsbC1jbG9zZWRcIiwgKCkgPT4ge30pO1xuYXBwLm9uKFwiZ3B1LWluZm8tdXBkYXRlXCIsIHByaW50RmVhdHVyZXMpO1xuYXBwLm9uKFwiYmVmb3JlLXF1aXRcIiwgKGUpID0+ICFleGl0aW5nICYmIGUucHJldmVudERlZmF1bHQoKSk7XG5hcHAub24oXCJ3aWxsLXF1aXRcIiwgKGUpID0+ICFleGl0aW5nICYmIGUucHJldmVudERlZmF1bHQoKSk7XG5cbm9rKHByb2Nlc3Muc2VuZCwgXCJpcGMgY2hhbm5lbCBtaXNzaW5nIOKAlCBzcGF3biB3aXRoIHN0ZGlvWzNdPSdpcGMnXCIpO1xucHJvY2Vzcy5vbmNlKFwiZGlzY29ubmVjdFwiLCAoKSA9PiBjdHJsLmFib3J0KFwiZGlzY29ubmVjdFwiKSk7XG5wcm9jZXNzLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gIGlmIChtc2cudHlwZSA9PT0gSXBjTXNnVHlwZS5DYW5jZWwpIHtcbiAgICBjdHJsLmFib3J0KG1zZy5yZWFzb24pO1xuICB9XG59KTtcblxubWFrZUNMSSh7XG4gIG5hbWU6IFwiYXBwXCIsXG4gIHJ1bjogYXN5bmMgKHNvdXJjZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGlwYyA9IG5ldyBJcGNXcml0ZXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBwLndoZW5SZWFkeSgpO1xuICAgICAgc2V0dXBQdXBQcm90b2NvbCgpO1xuICAgICAgcHJpbnRGZWF0dXJlcygpO1xuICAgICAgZm9yIChjb25zdCBvdXQgb2Ygb3B0aW9ucy5vdXRGaWxlcykge1xuICAgICAgICBhd2FpdCBta2RpcihkaXJuYW1lKG91dCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5kZXRlcm1pbmlzdGljID8gc2hvb3QgOiByZW5kZXI7XG4gICAgICBjdHJsLnNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWN0aW9uKHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBzaWduYWw6IGN0cmwuc2lnbmFsLFxuICAgICAgICBvblByb2dyZXNzOiAocCkgPT4gaXBjLndyaXRlUHJvZ3Jlc3MocCksXG4gICAgICAgIG9uQ29uc29sZTogKGwsIG0pID0+IGlwYy53cml0ZUNvbnNvbGUobCwgbSksXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZURvbmUocmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGUgYXMgRXJyb3I7XG4gICAgICBjb25zdCBtID0gZXJyb3Iuc3RhY2sgPz8gZXJyb3IubWVzc2FnZSA/PyBTdHJpbmcoZSA/PyBcInVua25vd24gZXJyb3JcIik7XG4gICAgICBhd2FpdCBpcGMud3JpdGVFcnJvcihtKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhpdGluZyA9IHRydWU7XG4gICAgICBhcHAuZXhpdCgpO1xuICAgIH1cbiAgfSxcbn0pO1xuIl19
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErNWQ4MTMxZTA2ODlkODFiYi9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYWxwaGFfZGFyd2luLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9kdWFsX2xheWVyX211eC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9wYXJzZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9zaW5rLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL2Jhc2UvcXVhbGl0eS9ibGFuay50cyIsIi4uL3NyYy9iYXNlL3F1YWxpdHkvZHJvcC50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9yZW5kZXJlci9zY3JlZW5zaG90LnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvYmFzZS93YWl0YWJsZV9ldmVudC50cyIsIi4uL3NyYy9yZW5kZXJlci9uZXR3b3JrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3dpbmRvdy50cyIsIi4uL3NyYy9yZW5kZXJlci9yZW5kZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vYWR2YW5jZS50cyIsIi4uL3NyYy9yZW5kZXJlci90aWNrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL29wZW4udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZGVjb2RlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2RlY29kZV9zZXNzaW9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3Byb2JlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3N0dWIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZnJhbWVfc2VydmVyLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3Byb3RvY29sLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Nob290LnRzIiwiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6WyJnZXRJbXBvcnRNZXRhVXJsIiwiaW1wb3J0TWV0YVVybCIsInBlbnYiLCJuYW1lIiwicGFyc2VyIiwiZGVmYXVsdFZhbHVlIiwicGFyc2VOdW1iZXIiLCJ4IiwibnVtIiwicGFyc2VTdHJpbmciLCJwYXJzZUFycmF5IiwiaXRlbSIsInMiLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsInB1cExvZ0xldmVsIiwicHVwUGtnUm9vdCIsImRpcm5hbWUiLCJqb2luIiwicHVwQXVkaW9QcmVsb2FkIiwicHVwU2hvb3RQcmVsb2FkIiwicHVwUmVuZGVyUHJlbG9hZCIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX2xldmVsIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwidmFsdWUiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJsdiIsIm1lc3NhZ2UiLCJwcm9jIiwicmVzb2x2ZSIsInJlamVjdCIsImZhdGFsIiwiZGlzcGF0Y2giLCJkYXRhIiwiZXJyIiwiY29kZSIsInNpZ25hbCIsInJlYXNvbiIsIl9fZGVjb3JhdG9yU3RhcnQiLCJfX2RlY29yYXRlRWxlbWVudCIsIl9fZGVjb3JhdG9yTWV0YWRhdGEiLCJsb2dnZXIiLCJMb2ciLCJsZXZlbCIsIkFWX0xPR19FUlJPUiIsIkFWX0xPR19XQVJOSU5HIiwiVEFHIiwic3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIiLCJkdW1wRGlyIiwiYXBwIiwibWtkaXJTeW5jIiwiY3Jhc2hSZXBvcnRlciIsIm5vZXJyIiwiZm4iLCJhcmdzIiwicmV0IiwiUFVQX0FSR1NfS0VZIiwicGFyZ3MiLCJhcmd2IiwicHJpdiIsImFyZyIsIkRFRkFVTFRfV0lEVEgiLCJERUZBVUxUX0hFSUdIVCIsIkRFRkFVTFRfRlBTIiwiREVGQVVMVF9EVVJBVElPTiIsIkRFRkFVTFRfV0lORE9XX1RJTUVPVVQiLCJERUZBVUxUX09VVF9GSUxFUyIsInJlbmRlclNjaGVtYSIsInoiLCJkZWZhdWx0UmVuZGVyT3B0aW9ucyIsIm5vcm1hbGl6ZVNvdXJjZSIsImFicyIsInJlYWxwYXRoU3luYyIsIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJlIiwiSXBjV3JpdGVyIiwicGF5bG9hZCIsInNsZWVwIiwibXMiLCJ3aXRoVGltZW91dCIsInAiLCJsYWJlbCIsInRpbWVyIiwiYWJvcnRhYmxlIiwib25BYm9ydCIsInBlcmlvZGljYWwiLCJjYWxsYmFjayIsInRva2VuIiwiY2xvc2VkIiwidGljayIsImNvdW50IiwibmV4dCIsIkNEUF9USU1FT1VUX01TIiwic2VuZCIsImNkcCIsIm1ldGhvZCIsInBhcmFtcyIsImV2YWxJbiIsImV4cHJlc3Npb24iLCJhZHZhbmNlVmlydHVhbFRpbWUiLCJidWRnZXQiLCJ0aW1lb3V0IiwiaGFuZGxlciIsIl8iLCJwYXVzZVZpcnR1YWxUaW1lIiwicmVzaXplRHJhd2FibGUiLCJzaXplIiwiRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgiLCJTVEVHT19USUNLX0NIQU5ORUwiLCJidWlsZFN0ZWdvSFRNTCIsInRhcmdldFVSTCIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwiZHJhd1N0ZWdvIiwid2MiLCJleHBlY3RlZCIsIndhaXRTdGVnb1RpY2siLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJGUkFNRV9TQ0hFTUUiLCJQUklWSUxFR0VEX1BSSVZJTEVHRVMiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInYiLCJrZWVwIiwiZW50cnkiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJvcGVuVmlkZW9DdHgiLCJfc3RhY2siLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJzdGFjayIsIl9fdXNpbmciLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJGRm1wZWdFcnJvciIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsInN0cmVhbSIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsImNvZGVjIiwiQ29kZWMiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZm10TmFtZSIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJOQUxfQkxBX1dfTFAiLCJOQUxfUlNWX0lSQVBfVkNMMjMiLCJOQUxfVlBTIiwiTkFMX1NQUyIsIk5BTF9QUFMiLCJOQUxfU0VJX1BSRUZJWCIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsIlZQU19QVExfQklUIiwiU1BTX1BUTF9CSVQiLCJQVExfVElFUl9CSVQiLCJQVExfQ09NUEFUMl9CSVQiLCJTTElDRV9UWVBFX0IiLCJTTElDRV9UWVBFX1AiLCJzZXRCaXQiLCJiaXRPZmZzZXQiLCJtYXNrIiwiY3VyIiwicGF0Y2hQdGwiLCJuYWxEYXRhIiwicHRsU3RhcnRCaXQiLCJyYnNwIiwicGF0Y2hIZXZjQWxwaGFQdGwiLCJjaHVua3MiLCJyZXdyaXRlT25lVWUiLCJuYWxJbiIsIm5ld1ZhbCIsImJyIiwiYnciLCJyZXdyaXRlVHdvVWUiLCJuZXdWYWwxIiwibmV3VmFsMiIsInJld3JpdGVBbHBoYVNwcyIsInNwcyIsIlNQU19TRVFfSURfQklUIiwicmV3cml0ZUFscGhhUHBzIiwicHBzIiwicmVhZFNlIiwidWUiLCJwYXJzZUlubGluZVN0UmVmUGljU2V0IiwibnVtRGVsdGFQb2NzU2V0MCIsImRlbHRhSWR4TWludXMxIiwibnVtTmVnIiwibnVtUG9zIiwicGFyc2VIZWFkZXJUb0FsaWdubWVudCIsIm5hbFR5cGUiLCJjZmciLCJpc0lyYXAiLCJzbGljZVR5cGUiLCJyZXdyaXRlQWxwaGFTbGljZUhlYWRlciIsInNsaWNlIiwicHJvYmUiLCJCIiwib2xkQWxpZ25CaXRzIiwic2xpY2VEYXRhQnl0ZU9mZnNldCIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIiLCJiZ3JhRnJhbWUiLCJzcmNMcyIsInciLCJoIiwieVNpemUiLCJzcmMzMiIsInkiLCJyb3dCYXNlIiwiZHN0QmFzZSIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIkR1YWxMYXllck11eCIsImJhc2VDdHgiLCJhbHBoYUN0eCIsImJhc2VQa3QiLCJhbHBoYVBrdCIsInRhZyIsImJhc2UiLCJhbHBoYSIsImhldmNDZmciLCJpbnRlcmxlYXZlZCIsImZhaWwiLCJmaWVsZCIsImdvdCIsInNraXBQdGwiLCJtYXhTdWJMYXllcnMiLCJzdWJQcm9maWxlUHJlc2VudCIsInN1YkxldmVsUHJlc2VudCIsInBhcnNlU3BzIiwic3BzUmJzcCIsImNocm9tYUZvcm1hdCIsImxvZzJNYXhQb2NMc2IiLCJvcmRlckNvdW50Iiwic2FvRW5hYmxlZCIsIm51bVN0UnBzIiwibG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCIsInNwc1RlbXBvcmFsTXZwRW5hYmxlZCIsInBhcnNlUHBzIiwicHBzUmJzcCIsIm51bUV4dHJhU2xpY2VIZWFkZXJCaXRzIiwiY2FiYWNJbml0UHJlc2VudCIsInBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkIiwiZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50Iiwic2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSIsInBhcnNlTnZlbmNIZXZjQ29uZmlnIiwiZXh0cmFkYXRhIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJudmVuY09wdHMiLCJjb21tb24iLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJ1bmlmaWVkIiwiY2hyb21hU2l6ZSIsImFscGhhQnVmIiwiYWxwaGFTd0ZyYW1lIiwicHRzIiwiZGVzeW5jIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjVGFnIiwiY29kZWNPcHRzIiwicmVzdCIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsImh3IiwiQVZDT0xfUkFOR0VfSlBFRyIsImNyZWF0ZUh3VmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJzaGFyZWRIdyIsIkhhcmR3YXJlQ29udGV4dCIsIm93bnNIdyIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwidmlkZW8iLCJGRl9FTkNPREVSX0xJQlgyNjUiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsImNvZGVjQ3R4IiwiRGljdGlvbmFyeSIsIk91dHB1dFNpbmsiLCJfT3V0cHV0U2luayIsInBhdGgiLCJsb3dlciIsInNldHVwIiwiYXVkaW8iLCJfcHJvbWlzZSIsIkZGX0VOQ09ERVJfQUFDIiwiRkZfRU5DT0RFUl9MSUJPUFVTIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZXMiLCJ3aXRoQXVkaW8iLCJraW5kcyIsIm5lZWRzTXA0SHciLCJpc0h3QWxwaGFDYXBhYmxlIiwic2lua3MiLCJzaW5rIiwiaW5wdXQiLCJzaXplRXF1YWxzIiwiYSIsInF1YW50aXplIiwiYmdyYSIsIm1vZGFsUGl4ZWwiLCJzdGVwWCIsInN0ZXBZIiwiY291bnRzIiwiZmlyc3RJZHgiLCJiZXN0IiwiYmVzdENvdW50Iiwia2V5IiwiaXNCbGFua0ZyYW1lIiwibSIsIm1iIiwibWciLCJtciIsIm1hIiwiY29udGVudCIsIm9mZnNldCIsIkJsYW5rU3RhdHMiLCJEcm9wU3RhdHMiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiYXR0YWNoQXVkaW9MaXN0ZW5lcnMiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwib25NZXRhIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJvbkNodW5rIiwiYnVmZmVyIiwiU2NyZWVuc2hvdFRha2VyIiwiX3MiLCJkaXIiLCJzZWMiLCJpbmRleCIsImN1cnJlbnRUaW1lTXMiLCJmaW5hbEJncmEiLCJuYXRpdmVJbWFnZSIsIndyaXRlRmlsZSIsInVzZVJldHJ5IiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0RXJyb3IiLCJhdHRlbXB0IiwicHJvbWlzZXMiLCJzZXRUaW1lb3V0IiwiV2FpdGFibGVFdmVudCIsIm1hcCIsIkxPQ0FMX1NDSEVNRVMiLCJpc0xvY2FsU2NoZW1lIiwicHJveGllZFVybCIsInBhcnNlZCIsIlVSTCIsInNldEludGVyY2VwdG9yIiwid2luZG93IiwidXNlSW5uZXJQcm94eSIsInN0dWJNZWRpYSIsImxpbWl0ZXIiLCJldmVudHMiLCJ3YWl0Iiwib25UaW1lb3V0IiwiZXZlbnQiLCJkZXRhaWxzIiwicHJveGllZCIsInJlc3BvbnNlSGVhZGVycyIsInJlc291cmNlVHlwZSIsInVuc2V0SW50ZXJjZXB0b3IiLCJUSU1FT1VUX0VSUk9SIiwiQ09OU09MRV9JR05PUkVTIiwid2FpdEZvckZpbmlzaCIsIndpbiIsImFjdGlvbiIsInRpbWVvdXRNcyIsInRvbGVyYW50IiwiZG9tUmVhZHkiLCJkb25lIiwiZGVzYyIsImV4aXRDb2RlIiwiZGlzcG9zZVdpbmRvdyIsInBpY2tQcmVsb2FkIiwicmVuZGVyZXIiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwiQnJvd3NlcldpbmRvdyIsImxpbmVOdW1iZXIiLCJzb3VyY2VJZCIsIm1zZ3MiLCJvcGVuV2luZG93V2l0aFJldHJ5IiwibG9hZFdpbmRvdyIsIndhcm11cCIsIm9wZW4iLCJyZW5kZXIiLCJkdXJhdGlvbiIsIm9uUHJvZ3Jlc3MiLCJ0YWtlciIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImZyYW1lU2l6ZSIsIndyaXR0ZW4iLCJsYXN0RnJhbWUiLCJzY3JlZW5zaG90cyIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiY2xlYXJTdHVja0NoZWNrIiwiYmxhbmtTdGF0cyIsImRyb3BTdGF0cyIsImRpc3Bvc2VBdWRpbyIsInNjaGVkdWxlRnJhbWUiLCJwYWludCIsIl9yIiwiaW1hZ2UiLCJpbWFnZVNpemUiLCJjdXJyZW50VGltZSIsImNyb3BwZWQiLCJ0aW1lRGVsdGEiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiZHVyYXRpb25NcyIsImxhc3RXcml0dGVuIiwic3R1Y2siLCJibXAiLCJibGFuayIsImphbmsiLCJhZHZhbmNlVmlkZW9zIiwidGltZXN0YW1wTXMiLCJUSUNLX1NZTUJPTCIsImV4cHIiLCJ0aWNrRXYiLCJSV19USU1FT1VUX1VTIiwib3BlbklucHV0IiwiRGVtdXhlciIsImRlY29kZUZyYW1lcyIsIm1ldGEiLCJBVk1FRElBX1RZUEVfVklERU8iLCJkZWMiLCJEZWNvZGVyIiwiZnJhbWVXaWR0aCIsImZyYW1lSGVpZ2h0Iiwic2NhbGUiLCJmaWx0ZXIiLCJGaWx0ZXJBUEkiLCJfZnJhbWUiLCJwYWNrUmdiYSIsInJvdyIsInN0cmlkZSIsIkRFQ09ERV9BSEVBRCIsIktFRVBfQkVISU5EIiwiTUVNT1JZX0JVREdFVCIsIk1BWF9QQVNTX1JFVFJZIiwiRGVjb2RlU2Vzc2lvbiIsIl9zcmMiLCJpZHgiLCJoaXQiLCJmYWlscyIsImdlbiIsImZhaWxlZCIsImF0IiwiZmxvb3IiLCJ0YiIsImxlYWRHYXAiLCJvdXRlciIsIl9wa3QiLCJlbmNvZGVTdHViV2VibSIsInRtcGRpciIsInJhbmRvbUJ5dGVzIiwic3R1YiIsIlN0dWJGcmFtZSIsInJlYWRGaWxlIiwicm0iLCJsdW1hIiwiY2hyb21hIiwiRnJhbWVTZXJ2ZXIiLCJfdXNlSW5uZXJQcm94eSIsImlkIiwiZXZlbiIsInJlYWwiLCJzZXNzaW9ucyIsImNyZWF0ZUhhc2giLCJTQ0hFTUUiLCJDT1JTX0hFQURFUlMiLCJ1c2VGcmFtZVByb3RvY29sIiwiZnMiLCJqc29uT2siLCJpbnQiLCJyZ2JhT2siLCJ3ZWJtT2siLCJieXRlcyIsImNvcHkiLCJmYWxsYmFjayIsIlJFTkRFUl9GUFMiLCJQQUlOVF9USU1FT1VUX01TIiwiUEFJTlRfSE9MRF9MSU1JVCIsImNsZWFyRGlydHlDaGVjayIsInQwIiwiX2QiLCJzbGl2ZXIiLCJ0cyIsInNob290IiwidEluaXQiLCJ3aW5QIiwicGlwZWxpbmUiLCJoZWxkIiwibGFzdEJpdG1hcCIsIm1haW4iLCJpZnJhbWUiLCJmcmFtZU1zIiwicGFpbnRlZCIsInByaW50RmVhdHVyZXMiLCJjdHJsIiwiZXhpdGluZyIsIk1lbnUiLCJyYXciLCJpcGMiLCJta2RpciIsInJlc3VsdCJdLCJtYXBwaW5ncyI6Iit5RUFLQSxJQUFNQSxFQUFBQSxDQUFtQixJQUN2QixPQUFPLFFBQUEsQ0FBYSxJQUNoQixJQUFJLEdBQUEsQ0FBSSxDQUFBLEtBQUEsRUFBUSxVQUFVLENBQUEsQ0FBRSxDQUFBLENBQUUsS0FDN0IsUUFBQSxDQUFTLGFBQUEsRUFBaUIsUUFBQSxDQUFTLGFBQUEsQ0FBYyxPQUFBLENBQVEsV0FBQSxLQUFrQixRQUFBLENBQzFFLFFBQUEsQ0FBUyxhQUFBLENBQWMsR0FBQSxDQUN2QixJQUFJLEdBQUEsQ0FBSSxVQUFXLFFBQUEsQ0FBUyxPQUFPLENBQUEsQ0FBRSxJQUFBLENBRWhDQyxDQUFBQSxDQUFnQ0QsRUFBQUEsR0NOdEMsU0FBU0UsRUFBQUEsQ0FBUUMsRUFBY0MsQ0FBQUEsQ0FBc0JDLENBQUFBLENBQWlDLENBQzNGLEdBQUksQ0FDRixPQUFPRCxFQUFPLE9BQUEsQ0FBUSxHQUFBLENBQUlELENBQUksQ0FBQyxDQUNqQyxDQUFBLEtBQVEsQ0FDTixPQUFPRSxDQUNULENBQ0YsQ0NWTyxTQUFTQyxDQUFBQSxDQUFZQyxFQUFvQixDQUM5QyxHQUFJLE9BQU9BLENBQUFBLEVBQU0sUUFBQSxDQUNmLE9BQU9BLENBQUFBLENBRVQsSUFBTUMsQ0FBQUEsQ0FBTSxNQUFBLENBQU9ELENBQUMsQ0FBQSxDQUNwQixHQUFJLE1BQUEsQ0FBTyxLQUFBLENBQU1DLENBQUcsQ0FBQSxDQUNsQixNQUFNLElBQUksTUFBTSxDQUFBLE1BQUEsRUFBU0QsQ0FBQyxDQUFBLHNCQUFBLENBQXdCLENBQUEsQ0FFcEQsT0FBT0MsQ0FDVCxDQUVPLFNBQVNDLEVBQUFBLENBQVlGLENBQUFBLENBQW9CLENBQzlDLE9BQUksT0FBT0EsR0FBTSxRQUFBLENBQ1JBLENBQUFBLENBRUYsTUFBQSxDQUFPQSxDQUFDLENBQ2pCLENBR08sU0FBU0csRUFBQUEsQ0FBY0MsQ0FBQUEsQ0FBOEMsQ0FDMUUsT0FBUUosQ0FBQUEsRUFDRixPQUFPQSxHQUFNLFFBQUEsRUFBWUEsQ0FBQUEsQ0FBRSxJQUFBLEVBQUssR0FBTSxFQUFBLENBQ2pDLEdBRUZBLENBQUFBLENBQUUsS0FBQSxDQUFNLEdBQUcsQ0FBQSxDQUFFLEdBQUEsQ0FBS0ssR0FBTUQsQ0FBQUEsQ0FBS0MsQ0FBQUEsQ0FBRSxJQUFBLEVBQU0sQ0FBQyxDQUVqRCxDQ3JCQSxJQUFNQyxFQUFBQSxDQUFVQyxzQkFBQUEsQ0FBY2IsQ0FBZSxDQUFBLENBRWhDYyxFQUFBQSxDQUFjYixHQUFLLGVBQUEsQ0FBaUJJLENBQUFBLENBQWEsQ0FBQyxDQUFBLENBRWxEVSxFQUFBQSxDQUFhQyxZQUFBQSxDQUFRSixHQUFRLE9BQUEsQ0FBUSwyQkFBMkIsQ0FBQyxDQUFBLENBQ3hESyxTQUFBQSxDQUFLRixHQUFZLE1BQUEsQ0FBUSxTQUFTLENBQUEsS0FDM0NHLEVBQUFBLENBQWtCRCxTQUFBQSxDQUFLRixFQUFBQSxDQUFZLE9BQVEsU0FBQSxDQUFXLG1CQUFtQixDQUFBLENBQ3pFSSxFQUFBQSxDQUFrQkYsU0FBQUEsQ0FBS0YsRUFBQUEsQ0FBWSxPQUFRLFNBQUEsQ0FBVyxtQkFBbUIsQ0FBQSxDQUN6RUssRUFBQUEsQ0FBbUJILFNBQUFBLENBQUtGLEVBQUFBLENBQVksT0FBUSxTQUFBLENBQVcsb0JBQW9CLEVDRXhGLElBQU1NLEVBQUFBLENBQVEsY0FDUkMsRUFBQUEsQ0FBTyxZQUFBLENBQ1BDLEVBQUFBLENBQU8sWUFBQSxDQUNQQyxFQUFBQSxDQUFRLGFBQUEsQ0FDUkMsR0FBUSxhQUFBLENBRWQsU0FBU0MsRUFBQUEsQ0FBVUMsQ0FBQUEsQ0FBNkNDLENBQUFBLENBQXVDLENBQ3JHLE9BQU8sU0FBQSxHQUEyQkMsQ0FBQUEsQ0FBcUIsQ0FDckQsSUFBTUMsQ0FBQUEsQ0FBWUQsQ0FBQUEsQ0FBUyxJQUFLRSxDQUFBQSxFQUN2QkEsQ0FBQUEsWUFBZSxLQUFBLENBQVNBLENBQUFBLENBQUksS0FBQSxFQUFTLE1BQUEsQ0FBT0EsQ0FBRyxDQUFBLENBQUtBLENBQzVELENBQUEsQ0FDRCxPQUFPSixDQUFBQSxDQUFPLElBQUEsQ0FBSyxLQUFNLEdBQUdHLENBQVMsQ0FDdkMsQ0FDRixDQTlCQSxJQUFBRSxHQUFBQyxFQUFBQSxDQUFBQyxFQUFBQSxDQUFBQyxFQUFBQSxDQUFBQyxFQUFBQSxDQUFBQyxFQUFBQSxDQWtFRUQsRUFBQUEsQ0FBQSxDQUFDVixFQUFBQSxDQUFBQSxDQUtEUyxFQUFBQSxDQUFBLENBQUNULEVBQUFBLENBQUFBLENBS0RRLEVBQUFBLENBQUEsQ0FBQ1IsRUFBQUEsQ0FBQUEsQ0FLRE8sRUFBQUEsQ0FBQSxDQUFDUCxFQUFBQSxDQUFBQSxDQUtETSxFQUFBQSxDQUFBLENBQUNOLElBdERJLElBQU1ZLENBQUFBLENBQU4sS0FBbUMsQ0E4QnhDLFdBQUEsQ0FBb0JDLENBQUFBLENBQWlCekIsR0FBYSxDQUE5QixJQUFBLENBQUEsTUFBQSxDQUFBeUIsQ0FBQUEsQ0E5QmZDLEVBQUFBLENBQUFILEVBQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUNMSSxHQUFBLElBQUEsQ0FBUSxPQUFBLENBQUEsQ0E4Qk4sSUFBQSxDQUFLLElBQUEsQ0FBTyxRQUNkLENBRm9CLE9BM0JwQixJQUFJLEtBQUEsRUFBZ0IsQ0FDbEIsT0FBTyxJQUFBLENBQUssTUFDZCxDQUVBLElBQUksS0FBQSxDQUFNQyxDQUFBQSxDQUFlLENBQ3ZCLElBQUEsQ0FBSyxNQUFBLENBQVNBLEVBQ2QsSUFBQSxDQUFLLElBQUEsQ0FBTyxJQUFBLENBQUssS0FBQSxFQUFTLFFBQzVCLENBRUEsSUFBSSxJQUFBLEVBQStCLENBQ2pDLE9BQU8sSUFBQSxDQUFLLEtBQ2QsQ0FFQSxJQUFJLElBQUEsQ0FBS0EsQ0FBQUEsQ0FBbUIsQ0FDMUIsSUFBTUMsQ0FBQUEsQ0FBUUQsRUFBTSxLQUFBLEVBQVMsT0FBQSxDQUFRLEtBQUEsQ0FDL0JFLENBQUFBLENBQU9GLENBQUFBLENBQU0sSUFBQSxFQUFRLFFBQVEsSUFBQSxDQUM3QkcsQ0FBQUEsQ0FBT0gsQ0FBQUEsQ0FBTSxJQUFBLEVBQVEsT0FBQSxDQUFRLElBQUEsQ0FDN0JJLEVBQVFKLENBQUFBLENBQU0sS0FBQSxFQUFTLE9BQUEsQ0FBUSxLQUFBLENBQy9CSyxDQUFBQSxDQUFLLElBQUEsQ0FBSyxPQUNoQixJQUFBLENBQUssS0FBQSxDQUFRLENBQ1gsS0FBQSxDQUFPQSxDQUFBQSxFQUFNLENBQUEsQ0FBSUosRUFBUSxNQUFBLENBQ3pCLElBQUEsQ0FBTUksQ0FBQUEsRUFBTSxDQUFBLENBQUlILENBQUFBLENBQU8sTUFBQSxDQUN2QixLQUFNRyxDQUFBQSxFQUFNLENBQUEsQ0FBSUYsQ0FBQUEsQ0FBTyxNQUFBLENBQ3ZCLEtBQUEsQ0FBT0UsQ0FBQUEsRUFBTSxFQUFJRCxDQUFBQSxDQUFRLE1BQzNCLEVBQ0YsQ0FPQSxLQUFBLENBQUEsR0FBU2pCLEVBQTJCLENBQ2xDLElBQUEsQ0FBSyxJQUFBLEVBQU0sS0FBQSxHQUFRUixFQUFBQSxDQUFPLEdBQUdRLENBQVEsRUFDdkMsQ0FHQSxJQUFBLENBQUEsR0FBUUEsQ0FBQUEsQ0FBMkIsQ0FDakMsSUFBQSxDQUFLLE1BQU0sSUFBQSxHQUFPUCxFQUFBQSxDQUFNLEdBQUdPLENBQVEsRUFDckMsQ0FHQSxRQUFRQSxDQUFBQSxDQUEyQixDQUNqQyxJQUFBLENBQUssSUFBQSxFQUFNLElBQUEsR0FBT04sRUFBQUEsQ0FBTSxHQUFHTSxDQUFRLEVBQ3JDLENBR0EsS0FBQSxDQUFBLEdBQVNBLENBQUFBLENBQTJCLENBQ2xDLEtBQUssSUFBQSxFQUFNLEtBQUEsR0FBUUwsRUFBQUEsQ0FBTyxHQUFHSyxDQUFRLEVBQ3ZDLENBR0EsS0FBQSxDQUFBLEdBQVNBLENBQUFBLENBQTJCLENBQ2xDLElBQUEsQ0FBSyxJQUFBLEVBQU0sS0FBQSxHQUFRSixHQUFPLEdBQUdJLENBQVEsRUFDckMsT0FBQSxDQUFRLElBQUEsQ0FBSyxDQUFDLEVBQ2hCLENBRVEsUUFBQSxDQUFTbUIsQ0FBQUEsQ0FBaUIsQ0FDaEMsSUFBTWpCLEVBQU1pQixDQUFBQSxDQUFRLE9BQUEsRUFBUSxDQUN4QmpCLENBQUFBLENBQUksVUFBQSxDQUFXVixFQUFLLEVBQ3RCLElBQUEsQ0FBSyxLQUFBLENBQU1VLENBQUFBLENBQUksS0FBQSxDQUFNVixFQUFBQSxDQUFNLE1BQUEsQ0FBUyxDQUFDLENBQUMsQ0FBQSxDQUM3QlUsQ0FBQUEsQ0FBSSxVQUFBLENBQVdULEVBQUksQ0FBQSxDQUM1QixLQUFLLElBQUEsQ0FBS1MsQ0FBQUEsQ0FBSSxLQUFBLENBQU1ULEVBQUFBLENBQUssTUFBQSxDQUFTLENBQUMsQ0FBQyxDQUFBLENBQzNCUyxDQUFBQSxDQUFJLFVBQUEsQ0FBV1IsRUFBSSxDQUFBLENBQzVCLElBQUEsQ0FBSyxLQUFLUSxDQUFBQSxDQUFJLEtBQUEsQ0FBTVIsRUFBQUEsQ0FBSyxNQUFBLENBQVMsQ0FBQyxDQUFDLEVBQzNCUSxDQUFBQSxDQUFJLFVBQUEsQ0FBV1AsRUFBSyxDQUFBLENBQzdCLElBQUEsQ0FBSyxNQUFNTyxDQUFBQSxDQUFJLEtBQUEsQ0FBTVAsRUFBQUEsQ0FBTSxNQUFBLENBQVMsQ0FBQyxDQUFDLEVBRXRDLElBQUEsQ0FBSyxJQUFBLENBQUtPLENBQUcsRUFFakIsQ0FFQSxNQUFBLENBQU9rQixFQUFvQi9DLENBQUFBLENBQWMsQ0FDdkMsT0FBTyxJQUFJLE9BQUEsQ0FBYyxDQUFDZ0QsRUFBU0MsQ0FBQUEsR0FBVyxDQUM1QyxJQUFBLENBQUssS0FBQSxDQUFNLENBQUEsRUFBR2pELENBQUksU0FBUyxDQUFBLENBQzNCLElBQUlrRCxDQUFBQSxDQUFnQixFQUFBLENBQ2RDLENBQUFBLENBQVlDLENBQUFBLEVBQWlCLENBQ2pDLElBQU1OLENBQUFBLENBQVVNLENBQUFBLENBQUssUUFBQSxFQUFTLENBQzFCTixDQUFBQSxDQUFRLFdBQVd2QixFQUFLLENBQUEsQ0FDMUIyQixDQUFBQSxFQUFTSixDQUFBQSxDQUFRLEtBQUEsQ0FBTXZCLEVBQUFBLENBQU0sT0FBUyxDQUFDLENBQUEsQ0FFdkMsS0FBSyxRQUFBLENBQVN1QixDQUFPLEVBRXpCLENBQUEsQ0FDQUMsQ0FBQUEsQ0FBSyxNQUFBLEVBQVEsRUFBQSxDQUFHLE1BQUEsQ0FBUUksQ0FBUSxFQUNoQ0osQ0FBQUEsQ0FBSyxNQUFBLEVBQVEsRUFBQSxDQUFHLE1BQUEsQ0FBUUksQ0FBUSxDQUFBLENBQ2hDSixFQUNHLEVBQUEsQ0FBRyxPQUFBLENBQVVNLENBQUFBLEVBQVEsQ0FDcEJILENBQUFBLEVBQVNHLENBQUFBLENBQUksUUFDYk4sQ0FBQUEsQ0FBSyxJQUFBLEdBQ1AsQ0FBQyxDQUFBLENBQ0EsSUFBQSxDQUFLLFFBQVMsQ0FBQ08sQ0FBQUEsQ0FBTUMsQ0FBQUEsR0FBVyxDQUMzQkQsQ0FBQUEsRUFBUUMsQ0FBQUEsRUFBVUwsR0FDcEJBLENBQUFBLEdBQVUsQ0FBQSxnQkFBQSxFQUFtQkgsQ0FBQUEsQ0FBSyxTQUFBLENBQVUsSUFBQSxDQUFLLEdBQUcsQ0FBQyxDQUFBLENBQUEsQ0FDckQsSUFBQSxDQUFLLEtBQUEsQ0FBTSxDQUFBLEVBQUcvQyxDQUFJLENBQUEsTUFBQSxDQUFBLENBQVUsQ0FBRSxJQUFBLENBQUFzRCxDQUFBQSxDQUFNLE9BQUFDLENBQUFBLENBQVEsS0FBQSxDQUFBTCxDQUFNLENBQUMsQ0FBQSxDQUNuREQsQ0FBQUEsQ0FBTyxJQUFJLEtBQUEsQ0FBTUMsQ0FBSyxDQUFDLENBQUEsR0FFdkIsSUFBQSxDQUFLLEtBQUEsQ0FBTSxDQUFBLEVBQUdsRCxDQUFJLENBQUEsTUFBQSxDQUFRLEVBQzFCZ0QsQ0FBQUEsRUFBUSxFQUVaLENBQUMsQ0FBQSxDQUNBLEVBQUEsQ0FBRyxvQkFBQSxDQUF1QlEsR0FBVyxDQUNwQyxJQUFBLENBQUssS0FBQSxDQUFNLENBQUEsRUFBR3hELENBQUksQ0FBQSxVQUFBLENBQUEsQ0FBY3dELENBQU0sRUFDeEMsQ0FBQyxDQUFBLENBQ0EsRUFBQSxDQUFHLDBCQUFBLENBQTZCSCxDQUFBQSxFQUFRLENBQ3ZDLElBQUEsQ0FBSyxLQUFBLENBQU0sQ0FBQSxFQUFHckQsQ0FBSSxDQUFBLFVBQUEsQ0FBQSxDQUFjcUQsQ0FBRyxFQUNyQyxDQUFDLEVBQ0wsQ0FBQyxDQUNILENBQ0YsQ0FBQSxDQWhIT2xCLEdBQUFzQixFQUFBQSxDQUFBLENBQUEsQ0FtQ0xDLEdBQUF2QixFQUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBREFELEdBbENXRSxDQUFBQSxDQUFBQSxDQXdDWHNCLEVBQUFBLENBQUF2QixFQUFBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBREFGLEVBQUFBLENBdkNXRyxDQUFBQSxDQUFBQSxDQTZDWHNCLEdBQUF2QixFQUFBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBREFILEVBQUFBLENBNUNXSSxDQUFBQSxDQUFBQSxDQWtEWHNCLEVBQUFBLENBQUF2QixFQUFBQSxDQUFBLFVBREFKLEVBQUFBLENBakRXSyxDQUFBQSxDQUFBQSxDQXVEWHNCLEVBQUFBLENBQUF2QixFQUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBREFMLEVBQUFBLENBdERXTSxHQUFOdUIsRUFBQUEsQ0FBQXhCLEVBQUFBLENBQU1DLENBQUFBLENBQUFBLENBa0hiLElBQU13QixDQUFBQSxDQUFTLElBQUl4QixFQUduQnlCLFVBQUFBLENBQUksV0FBQSxDQUFZLENBQUNDLENBQUFBLENBQU9oQixDQUFBQSxHQUFZLENBQ2xDLElBQU1qQixDQUFBQSxDQUFNaUIsQ0FBQUEsQ0FBUSxPQUFBLEVBQVEsQ0FDdkJqQixDQUFBQSxHQUdEaUMsQ0FBQUEsRUFBU0MsdUJBQ1hILENBQUFBLENBQU8sS0FBQSxDQUFNL0IsQ0FBRyxDQUFBLENBQ1BpQyxDQUFBQSxFQUFTRSx3QkFBQUEsRUFDbEJKLEVBQU8sSUFBQSxDQUFLL0IsQ0FBRyxHQUVuQixDQUFDLENBQUEsQ0N4SkQsSUFBTW9DLEVBQUFBLENBQU0sU0FBQSxDQUVMLFNBQVNDLEVBQUFBLEVBQTZCLENBRTNDLElBQU1DLEVBQVVwRCxTQUFBQSxDQUFLcUQsWUFBQUEsQ0FBSSxPQUFBLENBQVEsU0FBUyxDQUFBLENBQUcsY0FBQSxDQUFnQixTQUFTLENBQUEsQ0FDdEVDLFlBQUFBLENBQVVGLENBQUFBLENBQVMsQ0FBRSxTQUFBLENBQVcsSUFBSyxDQUFDLENBQUEsQ0FDdENDLFlBQUFBLENBQUksT0FBQSxDQUFRLFlBQUEsQ0FBY0QsQ0FBTyxDQUFBLENBQ2pDRyx1QkFBYyxLQUFBLENBQU0sQ0FDbEIsV0FBQSxDQUFhLGNBQUEsQ0FDYixjQUFBLENBQWdCLEtBQUEsQ0FDaEIsU0FBVSxLQUFBLENBQ1Ysd0JBQUEsQ0FBMEIsSUFDNUIsQ0FBQyxDQUFBLENBQ0RWLENBQUFBLENBQU8sTUFBTUssRUFBQUEsQ0FBSyxhQUFBLENBQWVFLENBQU8sRUFDMUMsQ0NuQk8sU0FBU0ksRUFBQUEsQ0FBaUNDLEVBQXVCdEUsQ0FBQUEsQ0FBd0MsQ0FDOUcsT0FBTyxDQUFBLEdBQUl1RSxDQUFBQSxHQUFTLENBQ2xCLEdBQUksQ0FDRixJQUFNQyxDQUFBQSxDQUFNRixDQUFBQSxDQUFHLEdBQUdDLENBQUksRUFDdEIsT0FBSUMsQ0FBQUEsWUFBZSxPQUFBLENBQ1ZBLENBQUFBLENBQUksS0FBQSxDQUFNLElBQU14RSxDQUFZLENBQUEsQ0FFOUJ3RSxDQUNULENBQUEsS0FBUSxDQUNOLE9BQU94RSxDQUNULENBQ0YsQ0FDRixDQ1JPLElBQU15RSxFQUFBQSxDQUFlLGlCQUFBLENBRXJCLFNBQVNDLElBQVEsQ0FDdEIsSUFBTUMsRUFBTyxPQUFBLENBQVEsSUFBQSxDQUNqQkMsRUFBT0QsQ0FBQUEsQ0FBSyxJQUFBLENBQU1FLENBQUFBLEVBQVFBLENBQUFBLENBQUksVUFBQSxDQUFXSixFQUFZLENBQUMsQ0FBQSxDQUMxRCxHQUFJLENBQUNHLENBQUFBLENBQ0gsT0FBQWxCLENBQUFBLENBQU8sTUFBTSxVQUFBLENBQVlpQixDQUFJLENBQUEsQ0FDdEIsT0FBQSxDQUFRLElBQUEsQ0FFakIsSUFBTUosRUFBTyxDQUFDLE1BQUEsQ0FBUSxHQUFHSSxDQUFBQSxDQUFLLEtBQUEsQ0FBTSxFQUFFLENBQUMsQ0FBQSxDQUN2QyxPQUFBQyxDQUFBQSxDQUFPLE1BQUEsQ0FBTyxJQUFBLENBQUtBLENBQUFBLENBQUssTUFBTSxHQUFHLENBQUEsQ0FBRSxDQUFDLENBQUEsQ0FBSSxRQUFRLENBQUEsQ0FBRSxVQUFTLENBQzNETCxDQUFBQSxDQUFLLElBQUEsQ0FBSyxHQUFHLElBQUEsQ0FBSyxLQUFBLENBQU1LLENBQUksQ0FBQyxDQUFBLENBQzdCbEIsRUFBTyxLQUFBLENBQU0sU0FBQSxDQUFXYSxDQUFJLENBQUEsQ0FDckJBLENBQ1QsQ0NoQk8sSUFBTU8sRUFBQUEsQ0FBZ0IsSUFBQSxDQUNoQkMsRUFBQUEsQ0FBaUIsSUFBQSxDQUNqQkMsRUFBQUEsQ0FBYyxFQUFBLENBQ2RDLEdBQW1CLENBQUEsQ0FDbkJDLEVBQUFBLENBQXlCLEVBQUEsQ0FDekJDLEVBQUFBLENBQW9CLENBQUMsY0FBQSxDQUFnQixlQUFlLENBQUEsQ0FFcERDLEVBQUFBLENBQWVDLGtCQUFBQSxDQUFFLE1BQUEsQ0FBTyxDQUNuQyxRQUFBLENBQVVBLG1CQUFFLE1BQUEsRUFBTyxDQUFFLFFBQUEsQ0FBUyxxQkFBcUIsQ0FBQSxDQUNuRCxLQUFBLENBQU9BLG1CQUFFLE1BQUEsRUFBTyxDQUFFLFFBQUEsQ0FBUyxhQUFhLENBQUEsQ0FDeEMsTUFBQSxDQUFRQSxtQkFBRSxNQUFBLEVBQU8sQ0FBRSxRQUFBLENBQVMsY0FBYyxDQUFBLENBQzFDLEdBQUEsQ0FBS0EsbUJBQUUsTUFBQSxFQUFPLENBQUUsU0FBUyxtQkFBbUIsQ0FBQSxDQUM1QyxVQUFXQSxrQkFBQUEsQ0FBRSxPQUFBLEVBQVEsQ0FBRSxRQUFBLENBQVMsMEJBQTBCLENBQUEsQ0FDMUQsU0FBVUEsa0JBQUFBLENBQUUsS0FBQSxDQUFNQSxrQkFBQUEsQ0FBRSxNQUFBLEVBQVEsQ0FBQSxDQUFFLFNBQVMsc0RBQXNELENBQUEsQ0FDN0YsYUFBQSxDQUFlQSxrQkFBQUEsQ0FBRSxPQUFBLEVBQVEsQ0FBRSxTQUFTLDhDQUE4QyxDQUFBLENBQ2xGLGFBQUEsQ0FBZUEsa0JBQUFBLENBQUUsT0FBQSxFQUFRLENBQUUsU0FBUyx1Q0FBdUMsQ0FBQSxDQUMzRSxVQUFBLENBQVlBLGtCQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFNBQVMsc0VBQXNFLENBQUEsQ0FDdkcsY0FBQSxDQUFnQkEsa0JBQUFBLENBQUUsT0FBQSxFQUFRLENBQUUsU0FBUyx3RUFBd0UsQ0FBQSxDQUM3RyxjQUFBLENBQWdCQSxrQkFBQUEsQ0FBRSxPQUFBLEVBQVEsQ0FBRSxTQUFTLGlEQUFpRCxDQUFBLENBQ3RGLGNBQWVBLGtCQUFBQSxDQUFFLE1BQUEsR0FBUyxRQUFBLENBQVMsZ0NBQWdDLENBQUEsQ0FDbkUsV0FBQSxDQUFhQSxrQkFBQUEsQ0FBRSxLQUFBLENBQU1BLG1CQUFFLE1BQUEsRUFBUSxDQUFBLENBQUUsUUFBQSxDQUFTLDJDQUEyQyxDQUN2RixDQUFDLENBQUEsQ0F3QllDLEVBQUFBLENBQXNDLENBQ2pELEtBQUEsQ0FBT1IsRUFBQUEsQ0FDUCxNQUFBLENBQVFDLEdBQ1IsR0FBQSxDQUFLQyxFQUFBQSxDQUNMLFFBQUEsQ0FBVUMsRUFBQUEsQ0FDVixRQUFBLENBQVVFLEVBQUFBLENBQ1YsVUFBVyxLQUFBLENBQ1gsYUFBQSxDQUFlLEtBQUEsQ0FDZixhQUFBLENBQWUsS0FBQSxDQUNmLFVBQUEsQ0FBWSxNQUNaLGNBQUEsQ0FBZ0IsS0FBQSxDQUNoQixjQUFBLENBQWdCLEtBQUEsQ0FDaEIsYUFBQSxDQUFlRCxFQUFBQSxDQUNmLFlBQWEsRUFDZixDQUFBLENDbkRBLFNBQVNLLEVBQUFBLENBQWdCaEYsQ0FBQUEsQ0FBbUIsQ0FDMUMsR0FBSUEsQ0FBQUEsQ0FBRSxTQUFTLEtBQUssQ0FBQSxFQUFLQSxFQUFFLFVBQUEsQ0FBVyxPQUFPLENBQUEsQ0FDM0MsT0FBT0EsQ0FBQUEsQ0FFVCxJQUFJaUYsRUFDSixHQUFJLENBQ0ZBLENBQUFBLENBQU1DLGVBQUFBLENBQWFsRixDQUFDLEVBQ3RCLE1BQVEsQ0FDTmlGLENBQUFBLENBQU0xQyxZQUFBQSxDQUFRdkMsQ0FBQyxFQUNqQixDQUNBLE9BQU8sQ0FBQSxPQUFBLEVBQVVpRixDQUFHLENBQUEsQ0FDdEIsQ0FPQSxlQUFzQkUsRUFBQUEsQ0FBUUMsRUFBcUIsQ0FDakQsSUFBTUMsQ0FBQUEsQ0FBUVIsRUFBQUEsQ0FBYSxLQUFBLENBQ3JCUyxDQUFBQSxDQUFJUCxHQUNWUSxpQkFBQUEsQ0FDRyxJQUFBLENBQUtILENBQUFBLENBQVEsSUFBSSxDQUFBLENBQ2pCLFFBQUEsQ0FBUyxXQUFZLG9EQUFvRCxDQUFBLENBQ3pFLE1BQUEsQ0FBTyxzQkFBQSxDQUF3QkMsQ0FBQUEsQ0FBTSxLQUFBLENBQU0sWUFBYSxDQUFBLEVBQUdDLENBQUFBLENBQUUsS0FBSyxDQUFBLENBQUUsQ0FBQSxDQUNwRSxPQUFPLHVCQUFBLENBQXlCRCxDQUFBQSxDQUFNLE1BQUEsQ0FBTyxXQUFBLENBQWEsQ0FBQSxFQUFHQyxDQUFBQSxDQUFFLE1BQU0sQ0FBQSxDQUFFLENBQUEsQ0FDdkUsTUFBQSxDQUFPLDZCQUFBLENBQStCRCxDQUFBQSxDQUFNLFdBQUEsQ0FBWSxZQUFhLEVBQUUsQ0FBQSxDQUN2RSxNQUFBLENBQU8sb0JBQUEsQ0FBc0JBLENBQUFBLENBQU0sR0FBQSxDQUFJLFlBQWEsQ0FBQSxFQUFHQyxDQUFBQSxDQUFFLEdBQUcsQ0FBQSxDQUFFLENBQUEsQ0FDOUQsTUFBQSxDQUFPLDBCQUEyQkQsQ0FBQUEsQ0FBTSxRQUFBLENBQVMsV0FBQSxDQUFhLENBQUEsRUFBR0MsQ0FBQUEsQ0FBRSxRQUFRLEVBQUUsQ0FBQSxDQUM3RSxNQUFBLENBQU8sd0JBQUEsQ0FBMEJELENBQUFBLENBQU0sUUFBQSxDQUFTLFdBQUEsQ0FBYUMsRUFBRSxRQUFBLENBQVMsSUFBQSxDQUFLLEdBQUcsQ0FBQyxDQUFBLENBQ2pGLE1BQUEsQ0FBTyxtQkFBb0JELENBQUFBLENBQU0sU0FBQSxDQUFVLFlBQWFDLENBQUFBLENBQUUsU0FBUyxFQUNuRSxNQUFBLENBQU8scUJBQUEsQ0FBdUJELENBQUFBLENBQU0sYUFBQSxDQUFjLFdBQUEsQ0FBYUMsQ0FBQUEsQ0FBRSxhQUFhLENBQUEsQ0FDOUUsTUFBQSxDQUFPLG1CQUFBLENBQXFCRCxDQUFBQSxDQUFNLGFBQUEsQ0FBYyxXQUFBLENBQWFDLEVBQUUsYUFBYSxDQUFBLENBQzVFLE1BQUEsQ0FBTyxlQUFBLENBQWlCRCxDQUFBQSxDQUFNLFVBQUEsQ0FBVyxZQUFhQyxDQUFBQSxDQUFFLFVBQVUsQ0FBQSxDQUNsRSxNQUFBLENBQU8sb0JBQUEsQ0FBc0JELENBQUFBLENBQU0sZUFBZSxXQUFBLENBQWFDLENBQUFBLENBQUUsY0FBYyxDQUFBLENBQy9FLE1BQUEsQ0FBTyxtQkFBQSxDQUFxQkQsRUFBTSxjQUFBLENBQWUsV0FBQSxDQUFhQyxDQUFBQSxDQUFFLGNBQWMsQ0FBQSxDQUM5RSxNQUFBLENBQU8sNEJBQTZCRCxDQUFBQSxDQUFNLGFBQUEsQ0FBYyxXQUFBLENBQWEsQ0FBQSxFQUFHQyxDQUFBQSxDQUFFLGFBQWEsRUFBRSxDQUFBLENBQ3pGLE1BQUEsQ0FBTyxNQUFPRSxDQUFBQSxDQUFnQkMsQ0FBQUEsR0FBUyxDQUN0QyxHQUFJLENBQ0YsTUFBTUwsQ0FBQUEsQ0FBUSxHQUFBLENBQUlKLEVBQUFBLENBQWdCUSxDQUFNLENBQUEsQ0FBRyxDQUN6QyxLQUFBLENBQU8xQixFQUFBQSxDQUFNcEUsQ0FBQUEsQ0FBYTRGLENBQUFBLENBQUUsS0FBSyxDQUFBLENBQUVHLENBQUFBLENBQUssS0FBSyxDQUFBLENBQzdDLE1BQUEsQ0FBUTNCLEVBQUFBLENBQU1wRSxFQUFhNEYsQ0FBQUEsQ0FBRSxNQUFNLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxNQUFNLENBQUEsQ0FDaEQsSUFBSzNCLEVBQUFBLENBQU1wRSxDQUFBQSxDQUFhNEYsQ0FBQUEsQ0FBRSxHQUFHLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxHQUFHLENBQUEsQ0FDdkMsUUFBQSxDQUFVM0IsRUFBQUEsQ0FBTXBFLENBQUFBLENBQWE0RixDQUFBQSxDQUFFLFFBQVEsRUFBRUcsQ0FBQUEsQ0FBSyxRQUFRLENBQUEsQ0FDdEQsUUFBQSxDQUFVM0YsRUFBQUEsQ0FBV0QsRUFBVyxFQUFFNEYsQ0FBQUEsQ0FBSyxPQUFPLEVBQzlDLFNBQUEsQ0FBV0EsQ0FBQUEsQ0FBSyxXQUFhSCxDQUFBQSxDQUFFLFNBQUEsQ0FDL0IsYUFBQSxDQUFlRyxDQUFBQSxDQUFLLGFBQUEsRUFBaUJILENBQUFBLENBQUUsY0FDdkMsYUFBQSxDQUFlRyxDQUFBQSxDQUFLLGFBQUEsRUFBaUJILENBQUFBLENBQUUsYUFBQSxDQUN2QyxVQUFBLENBQVlHLEVBQUssVUFBQSxFQUFjSCxDQUFBQSxDQUFFLFVBQUEsQ0FDakMsY0FBQSxDQUFnQkcsQ0FBQUEsQ0FBSyxjQUFBLEVBQWtCSCxFQUFFLGNBQUEsQ0FDekMsY0FBQSxDQUFnQkcsQ0FBQUEsQ0FBSyxjQUFBLEVBQWtCSCxDQUFBQSxDQUFFLGNBQUEsQ0FDekMsY0FBZXhCLEVBQUFBLENBQU1wRSxDQUFBQSxDQUFhNEYsQ0FBQUEsQ0FBRSxhQUFhLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxhQUFhLENBQUEsQ0FDckUsV0FBQSxDQUFhM0YsRUFBQUEsQ0FBV0osQ0FBVyxDQUFBLENBQUUrRixDQUFBQSxDQUFLLFdBQVcsQ0FDdkQsQ0FBQyxFQUNILENBQUEsTUFBU0MsQ0FBQUEsQ0FBRyxDQUNWdkMsRUFBTyxLQUFBLENBQU11QyxDQUFDLEVBQ2hCLENBQ0YsQ0FBQyxFQUNILE1BQU1ILGlCQUFBQSxDQUFRLFVBQUEsQ0FBV3BCLEVBQUFBLEVBQU8sRUFDbEMsQ0NaTyxJQUFNd0IsRUFBQUEsQ0FBTixLQUFnQixDQUNyQixZQUFBLENBQWF0QyxDQUFBQSxDQUFlaEIsQ0FBQUEsQ0FBaUIsQ0FDM0MsSUFBQSxDQUFLLEtBQUssQ0FBRSxJQUFBLENBQU0sU0FBQSxDQUFvQixLQUFBLENBQUFnQixDQUFBQSxDQUFPLE9BQUEsQ0FBQWhCLENBQVEsQ0FBQyxFQUN4RCxDQUVBLGFBQUEsQ0FBY04sQ0FBQUEsQ0FBcUIsQ0FDakMsS0FBSyxJQUFBLENBQUssQ0FBRSxJQUFBLENBQU0sVUFBQSxDQUFxQixLQUFBLENBQUFBLENBQU0sQ0FBQyxFQUNoRCxDQUVBLFVBQUEsQ0FBV0ksQ0FBQUEsQ0FBOEIsQ0FDdkMsT0FBTyxLQUFLLElBQUEsQ0FBSyxDQUFFLEtBQU0sT0FBQSxDQUFrQixLQUFBLENBQUFBLENBQU0sQ0FBQyxDQUNwRCxDQUVBLFNBQUEsQ0FBVXlELENBQUFBLENBQXdDLENBQ2hELE9BQU8sSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFFLElBQUEsQ0FBTSxNQUFBLENBQWlCLE9BQUEsQ0FBQUEsQ0FBUSxDQUFDLENBQ3JELENBRVEsSUFBQSxDQUFLeEUsQ0FBQUEsQ0FBNEIsQ0FDdkMsT0FBTyxJQUFJLE9BQUEsQ0FBU21CLENBQUFBLEVBQVksQ0FDOUIsR0FBSSxDQUFDLFFBQVEsSUFBQSxDQUNYLE9BQU9BLENBQUFBLEVBQVEsQ0FFakIsT0FBQSxDQUFRLElBQUEsQ0FBS25CLEVBQUssSUFBTW1CLENBQUFBLEVBQVMsRUFDbkMsQ0FBQyxDQUNILENBQ0YsQ0FBQSxDQ2xGTyxTQUFTc0QsR0FBTUMsQ0FBQUEsQ0FBWSxDQUNoQyxPQUFPLElBQUksT0FBQSxDQUFldkQsR0FBWSxVQUFBLENBQVdBLENBQUFBLENBQVN1RCxDQUFFLENBQUMsQ0FDL0QsQ0FFTyxTQUFTQyxFQUFBQSxDQUFlQyxDQUFBQSxDQUFlRixDQUFBQSxDQUFZRyxDQUFBQSxDQUEyQixDQUNuRixPQUFPLElBQUksT0FBQSxDQUFRLENBQUMxRCxDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQ3RDLElBQU0wRCxFQUFRLFVBQUEsQ0FBVyxJQUFNMUQsQ0FBQUEsQ0FBTyxJQUFJLEtBQUEsQ0FBTSxDQUFBLEVBQUd5RCxDQUFLLENBQUEsaUJBQUEsRUFBb0JILENBQUUsQ0FBQSxFQUFBLENBQUksQ0FBQyxDQUFBLENBQUdBLENBQUUsRUFDeEZFLENBQUFBLENBQUUsSUFBQSxDQUFLekQsQ0FBQUEsQ0FBU0MsQ0FBTSxDQUFBLENBQUUsT0FBQSxDQUFRLElBQU0sWUFBQSxDQUFhMEQsQ0FBSyxDQUFDLEVBQzNELENBQUMsQ0FDSCxDQUdPLFNBQVNDLEVBQUFBLENBQWFILEVBQWVsRCxDQUFBQSxDQUFrQyxDQUM1RSxPQUFLQSxDQUFBQSxDQUdFLElBQUksT0FBQSxDQUFXLENBQUNQLENBQUFBLENBQVNDLENBQUFBLEdBQVcsQ0FDekMsSUFBTTRELENBQUFBLENBQVUsSUFBTTVELENBQUFBLENBQU9NLENBQUFBLENBQU8sTUFBTSxFQUMxQ0EsQ0FBQUEsQ0FBTyxnQkFBQSxDQUFpQixPQUFBLENBQVNzRCxDQUFBQSxDQUFTLENBQUUsSUFBQSxDQUFNLElBQUssQ0FBQyxDQUFBLENBQ3hESixDQUFBQSxDQUFFLElBQUEsQ0FBS3pELENBQUFBLENBQVNDLENBQU0sRUFBRSxPQUFBLENBQVEsSUFBTU0sQ0FBQUEsQ0FBTyxtQkFBQSxDQUFvQixPQUFBLENBQVNzRCxDQUFPLENBQUMsRUFDcEYsQ0FBQyxDQUFBLENBTlFKLENBT1gsQ0FHTyxTQUFTSyxHQUFXQyxDQUFBQSxDQUFzRVIsQ0FBQUEsQ0FBWSxDQUMzRyxJQUFJUyxDQUFBQSxDQUNBQyxDQUFBQSxDQUFTLE1BQ2IsZUFBZUMsQ0FBQUEsQ0FBS0MsRUFBZSxDQUNqQyxJQUFNQyxFQUFPLE1BQU1MLENBQUFBLENBQVNJLENBQUssQ0FBQSxDQUM3QkYsQ0FBQUEsR0FHSkQsQ0FBQUEsQ0FBUSxXQUFXLElBQU1FLENBQUFBLENBQUtDLENBQUFBLENBQVEsQ0FBQyxDQUFBLENBQUdDLENBQUFBLEVBQVFiLENBQUUsQ0FBQSxFQUN0RCxDQUNBLE9BQUFTLENBQUFBLENBQVEsVUFBQSxDQUFXLElBQU1FLEVBQUssQ0FBQyxDQUFBLENBQUdYLENBQUUsQ0FBQSxDQUM3QixJQUFNLENBQ1hVLEVBQVMsSUFBQSxDQUNULFlBQUEsQ0FBYUQsQ0FBSyxFQUNwQixDQUNGLENDcENBLElBQU1LLEVBQUFBLENBQWlCLEdBQUEsQ0FFaEIsU0FBU0MsRUFBQUEsQ0FBS0MsQ0FBQUEsQ0FBZUMsQ0FBQUEsQ0FBZ0JDLEVBQW1DLENBQ3JGLE9BQU9qQixFQUFBQSxDQUFZZSxDQUFBQSxDQUFJLFdBQUEsQ0FBWUMsQ0FBQUEsQ0FBUUMsQ0FBTSxDQUFBLENBQUdKLEVBQUFBLENBQWdCLE9BQU9HLENBQU0sQ0FBQSxDQUFFLENBQ3JGLENBRU8sU0FBU0UsRUFBQUEsQ0FBT0gsQ0FBQUEsQ0FBZUksQ0FBQUEsQ0FBc0MsQ0FDMUUsT0FBT25CLEVBQUFBLENBQVljLEVBQUFBLENBQUtDLENBQUFBLENBQUssa0JBQUEsQ0FBb0IsQ0FBRSxVQUFBLENBQUFJLENBQVcsQ0FBQyxDQUFBLENBQUdOLEVBQUFBLENBQWdCLFFBQVEsQ0FDNUYsQ0FFTyxTQUFTTyxFQUFBQSxDQUFtQkwsQ0FBQUEsQ0FBZU0sQ0FBQUEsQ0FBK0IsQ0FDL0UsT0FBTyxJQUFJLFFBQVEsQ0FBQzdFLENBQUFBLENBQVNDLENBQUFBLEdBQVcsQ0FDdEMsSUFBTTZFLENBQUFBLENBQVUsV0FBVyxJQUFNLENBQy9CUCxDQUFBQSxDQUFJLEdBQUEsQ0FBSSxTQUFBLENBQVdRLENBQU8sRUFDMUI5RSxDQUFBQSxDQUFPLElBQUksS0FBQSxDQUFNLENBQUEsbUNBQUEsRUFBc0NvRSxFQUFjLENBQUEsRUFBQSxDQUFJLENBQUMsRUFDNUUsQ0FBQSxDQUFHQSxFQUFjLENBQUEsQ0FFWFUsQ0FBQUEsQ0FBVSxDQUFDQyxDQUFBQSxDQUFtQlIsQ0FBQUEsR0FBbUIsQ0FDakRBLENBQUFBLEdBQVcsb0NBQUEsR0FDYixZQUFBLENBQWFNLENBQU8sQ0FBQSxDQUNwQlAsQ0FBQUEsQ0FBSSxHQUFBLENBQUksU0FBQSxDQUFXUSxDQUFPLENBQUEsQ0FDMUIvRSxHQUFRLEVBRVosQ0FBQSxDQUNBdUUsQ0FBQUEsQ0FBSSxFQUFBLENBQUcsU0FBQSxDQUFXUSxDQUFPLEVBRXpCVCxFQUFBQSxDQUFLQyxDQUFBQSxDQUFLLGdDQUFBLENBQWtDLENBQzFDLE1BQUEsQ0FBUSxTQUFBLENBQ1IsT0FBQU0sQ0FDRixDQUFDLENBQUEsQ0FBRSxLQUFBLENBQU8xQixDQUFBQSxFQUFNLENBQ2QsYUFBYTJCLENBQU8sQ0FBQSxDQUNwQlAsQ0FBQUEsQ0FBSSxHQUFBLENBQUksU0FBQSxDQUFXUSxDQUFPLEVBQzFCOUUsQ0FBQUEsQ0FBT2tELENBQUMsRUFDVixDQUFDLEVBQ0gsQ0FBQyxDQUNILENBRUEsZUFBc0I4QixFQUFBQSxDQUFpQlYsQ0FBQUEsQ0FBOEIsQ0FDbkUsTUFBTUQsR0FBS0MsQ0FBQUEsQ0FBSyxnQ0FBQSxDQUFrQyxDQUFFLE1BQUEsQ0FBUSxPQUFRLENBQUMsRUFDdkUsQ0FFQSxlQUFzQlcsRUFBQUEsQ0FBZVgsQ0FBQUEsQ0FBZVksQ0FBQUEsQ0FBWSxDQUM5RCxNQUFNYixFQUFBQSxDQUFLQyxDQUFBQSxDQUFLLG9DQUFBLENBQXNDLENBQ3BELEdBQUdZLENBQUFBLENBQ0gsa0JBQW1CLENBQUEsQ0FDbkIsTUFBQSxDQUFRLEtBQ1YsQ0FBQyxFQUNILENDOUNPLElBQU1DLEVBQUFBLENBQTBCLEVBQUEsQ0FFaEMsSUFBTUMsRUFBQUEsQ0FBcUIsWUFBQSxDQUUzQixTQUFTQyxHQUFlQyxDQUFBQSxDQUFtQkosQ0FBQUEsQ0FBb0IsQ0FDcEUsR0FBTSxDQUFFLEtBQUEsQ0FBQUssRUFBTyxNQUFBLENBQUFDLENBQU8sQ0FBQSxDQUFJTixDQUFBQSxDQUMxQixPQUFPLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsd0JBQUEsRUFNaUJLLENBQUssQ0FBQSxZQUFBLEVBQWVDLENBQUFBLENBQVMsQ0FBQyxDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQUFBLEVBS3pDRCxDQUFLLENBQUE7QUFBQSxjQUFBLEVBQ0pDLENBQU0sQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBLEVBTVRBLENBQU0sQ0FBQTtBQUFBO0FBQUEsYUFBQSxFQUVKRCxDQUFLLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDJCQUFBLEVBUVNELENBQVMsQ0FBQTtBQUFBLDRCQUFBLEVBQ1JDLENBQUssQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQUFBLEVBSWJBLENBQUssQ0FBQTtBQUFBLDJCQUFBLEVBQ0VKLEVBQXVCLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsMEJBQUEsRUErQnhCQyxFQUFrQixDQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUEsQ0E4QjlDLENBRU8sU0FBU0ssRUFBQUEsQ0FBWUMsQ0FBQUEsQ0FBZ0JSLEVBQWdDLENBQzFFLEdBQU0sQ0FBRSxLQUFBLENBQUFLLENBQUFBLENBQU8sT0FBQUMsQ0FBTyxDQUFBLENBQUlOLEVBQzFCLEdBQUlLLENBQUFBLENBQVFKLElBQTJCSyxDQUFBQSxDQUFTLENBQUEsQ0FDOUMsT0FHRixJQUFNRyxDQUFBQSxDQUFZSCxFQUFTLENBQUEsQ0FFdkJJLENBQUFBLENBQVksRUFDaEIsSUFBQSxJQUFTQyxDQUFBQSxDQUFJLEVBQUdBLENBQUFBLENBQUlWLEVBQUFBLENBQXlCVSxJQUFLLENBQ2hELElBQU1DLEdBQVlILENBQUFBLENBQVlKLENBQUFBLENBQVFNLEdBQUssQ0FBQSxDQUVyQ0UsQ0FBQUEsQ0FBQUEsQ0FESUwsRUFBT0ksQ0FBUSxDQUFBLEVBQUssQ0FBQSxFQUNkLEdBQUEsQ0FBTSxDQUFBLENBQUksQ0FBQSxDQUMxQkYsRUFBYUEsQ0FBQUEsRUFBYSxDQUFBLENBQUtHLEVBQ2pDLENBSUEsR0FGQUgsRUFBWUEsQ0FBQUEsR0FBYyxDQUFBLENBRXRCLEdBQUMsTUFBQSxDQUFPLFFBQUEsQ0FBU0EsQ0FBUyxDQUFBLEVBQUtBLENBQUFBLENBQVksR0FBS0EsQ0FBQUEsQ0FBWSxHQUFBLENBQUEsQ0FJaEUsT0FBT0EsQ0FDVCxDQUVPLFNBQVNJLEVBQUFBLENBQVcxQixDQUFBQSxDQUFlLENBQ3hDLE9BQU9HLEVBQUFBLENBQU9ILENBQUFBLENBQUssdUJBQXVCLENBQzVDLENBT0EsZUFBc0IyQixFQUFBQSxDQUFVQyxDQUFBQSxDQUFpQkMsRUFBaUMsQ0FDaEYsTUFBTTFCLEdBQU95QixDQUFBQSxDQUFHLFFBQUEsQ0FBVSxzQkFBc0JDLENBQVEsQ0FBQSxDQUFBLENBQUcsRUFDN0QsQ0FHQSxlQUFzQkMsRUFBQUEsQ0FBY0YsQ0FBQUEsQ0FBZ0MsQ0FDbEUsSUFBTUcsRUFBVSxJQUFJLE9BQUEsQ0FBU0MsR0FBTUosQ0FBQUEsQ0FBRyxHQUFBLENBQUksS0FBS2QsRUFBQUEsQ0FBb0JrQixDQUFDLENBQUMsQ0FBQSxDQUNyRSxNQUFNL0MsR0FBWThDLENBQUFBLENBQVMsR0FBQSxDQUFPLFlBQVksRUFDaEQsQ0NqSkEsSUFBTUUsRUFBQUEsQ0FBYSxLQUFBLENBQ2JDLEdBQWUsV0FBQSxDQUdmQyxFQUFBQSxDQUF3QixDQUM1QixRQUFBLENBQVUsSUFBQSxDQUNWLE9BQVEsSUFBQSxDQUNSLFNBQUEsQ0FBVyxLQUNYLG1CQUFBLENBQXFCLElBQUEsQ0FDckIsZ0JBQWlCLElBQUEsQ0FDakIsV0FBQSxDQUFhLEtBQ2IsTUFBQSxDQUFRLElBQUEsQ0FDUixVQUFXLElBQ2IsQ0FBQSxDQUdBQyxrQkFBUywyQkFBQSxDQUE0QixDQUNuQyxDQUFFLE1BQUEsQ0FBUUgsRUFBQUEsQ0FBWSxVQUFBLENBQVlFLEVBQXNCLENBQUEsQ0FDeEQsQ0FBRSxPQUFRRCxFQUFBQSxDQUFjLFVBQUEsQ0FBWUMsRUFBc0IsQ0FDNUQsQ0FBQyxFQUdNLFNBQVNFLEVBQUFBLEVBQXlCLENBQ3ZDRCxpQkFBQUEsQ0FBUyxNQUFBLENBQU9ILEdBQWFLLENBQUFBLEVBQVEsQ0FDbkMsSUFBTUMsQ0FBQUEsQ0FBTSxJQUFJLEdBQUEsQ0FBSUQsQ0FBQUEsQ0FBSSxHQUFHLENBQUEsQ0FDckJFLEVBQU1ELENBQUFBLENBQUksWUFBQSxDQUFhLElBQUksS0FBSyxDQUFBLEVBQUssR0FDckN0QixDQUFBQSxDQUFRLFFBQUEsQ0FBU3NCLEVBQUksWUFBQSxDQUFhLEdBQUEsQ0FBSSxHQUFHLENBQUEsRUFBSyxHQUFBLENBQUssRUFBRSxDQUFBLENBQ3JEckIsQ0FBQUEsQ0FBUyxTQUFTcUIsQ0FBQUEsQ0FBSSxZQUFBLENBQWEsR0FBQSxDQUFJLEdBQUcsQ0FBQSxFQUFLLEdBQUEsQ0FBSyxFQUFFLENBQUEsQ0FDdERFLENBQUFBLENBQU8xQixHQUFleUIsQ0FBQUEsQ0FBSyxDQUFFLE1BQUF2QixDQUFBQSxDQUFPLE1BQUEsQ0FBQUMsQ0FBTyxDQUFDLENBQUEsQ0FDbEQsT0FBTyxJQUFJLFFBQUEsQ0FBU3VCLEVBQU0sQ0FBRSxPQUFBLENBQVMsQ0FBRSxjQUFBLENBQWdCLFdBQVksQ0FBRSxDQUFDLENBQ3hFLENBQUMsRUFDSCxDQUVPLFNBQVNDLEVBQUFBLENBQWVGLENBQUFBLENBQWE1QixFQUFvQixDQUM5RCxJQUFNMkIsRUFBTSxJQUFJLEdBQUEsQ0FBSSxHQUFHTixFQUFVLENBQUEsUUFBQSxDQUFVLEVBQzNDLE9BQUFNLENBQUFBLENBQUksYUFBYSxHQUFBLENBQUksS0FBQSxDQUFPQyxDQUFBQSxDQUFJLE9BQUEsQ0FBUSxTQUFBLENBQVcsVUFBVSxDQUFDLENBQUEsQ0FDOURELENBQUFBLENBQUksYUFBYSxHQUFBLENBQUksR0FBQSxDQUFLLE9BQU8zQixDQUFBQSxDQUFLLEtBQUssQ0FBQyxDQUFBLENBQzVDMkIsQ0FBQUEsQ0FBSSxhQUFhLEdBQUEsQ0FBSSxHQUFBLENBQUssT0FBTzNCLENBQUFBLENBQUssTUFBTSxDQUFDLENBQUEsQ0FDdEMyQixDQUFBQSxDQUFJLFFBQUEsRUFDYixDQ3JDTyxJQUFNSSxFQUFBQSxDQUFOLEtBQXlCLENBTTlCLFdBQUEsQ0FBcUJDLENBQUFBLENBQXdCLENBQXhCLElBQUEsQ0FBQSxjQUFBLENBQUFBLEVBQXlCLENBQXpCLGVBTGIsT0FBQSxDQUFVLENBQUEsQ0FDVixPQUF1QixFQUFDLENBQ3hCLFNBQVcsSUFBSSxPQUFBLENBQ2YsU0FJUixJQUFJLE1BQUEsRUFBaUIsQ0FDbkIsT0FBTyxJQUFBLENBQUssT0FDZCxDQUVBLElBQUksU0FBa0IsQ0FDcEIsT0FBTyxJQUFBLENBQUssTUFBQSxDQUFPLE1BQ3JCLENBRUEsSUFBSSxLQUFBLEVBQWdCLENBQ2xCLE9BQU8sQ0FBQSxRQUFBLEVBQVcsSUFBQSxDQUFLLE1BQU0sQ0FBQSxXQUFBLEVBQWMsSUFBQSxDQUFLLE9BQU8sQ0FBQSxDQUN6RCxDQUVBLE1BQU0sUUFBQSxDQUFZM0YsQ0FBQUEsQ0FBc0JqQixFQUFrQyxDQUN4RSxPQUFBQSxHQUFRLGNBQUEsRUFBZSxDQUVuQkEsQ0FBQUEsRUFBVSxDQUFDLElBQUEsQ0FBSyxRQUFBLENBQVMsSUFBSUEsQ0FBTSxDQUFBLEdBQ3JDLEtBQUssUUFBQSxDQUFTLEdBQUEsQ0FBSUEsQ0FBTSxDQUFBLENBQ3hCQSxDQUFBQSxDQUFPLGlCQUFpQixPQUFBLENBQVMsSUFBTSxLQUFLLEtBQUEsQ0FBTUEsQ0FBTSxFQUFHLENBQUUsSUFBQSxDQUFNLElBQUssQ0FBQyxDQUFBLENBQUEsQ0FHcEUsSUFBSSxPQUFBLENBQVcsQ0FBQ1AsQ0FBQUEsQ0FBU0MsSUFBVyxDQUN6QyxJQUFBLENBQUssT0FBTyxJQUFBLENBQUssQ0FDZixJQUFLLElBQU0sQ0FDVCxHQUFJTSxDQUFBQSxFQUFRLE9BQUEsQ0FBUyxDQUNuQk4sQ0FBQUEsQ0FBT00sQ0FBQUEsQ0FBTyxNQUFNLENBQUEsQ0FDcEIsSUFBQSxDQUFLLE1BQUssQ0FDVixNQUNGLENBQ0EsSUFBQSxDQUFLLE9BQUEsRUFBQSxDQUNMaUIsQ0FBQUEsR0FDRyxJQUFBLENBQU00RixDQUFBQSxFQUFNLENBQ1gsSUFBQSxDQUFLLE9BQUEsRUFBQSxDQUNMcEgsRUFBUW9ILENBQUMsQ0FBQSxDQUNULEtBQUssSUFBQSxHQUNQLENBQUMsQ0FBQSxDQUNBLEtBQUEsQ0FBT2pFLEdBQU0sQ0FDWixJQUFBLENBQUssVUFDTGxELENBQUFBLENBQU9rRCxDQUFDLEVBQ1IsSUFBQSxDQUFLLElBQUEsR0FDUCxDQUFDLEVBQ0wsRUFDQSxNQUFBLENBQUFsRCxDQUFBQSxDQUNBLE9BQUFNLENBQ0YsQ0FBQyxFQUNELElBQUEsQ0FBSyxJQUFBLEdBQ1AsQ0FBQyxDQUNILENBRUEsTUFBTSxLQUFBLEVBQXVCLENBQzNCLEdBQUksRUFBQSxJQUFBLENBQUssT0FBQSxHQUFZLENBQUEsRUFBSyxJQUFBLENBQUssT0FBQSxHQUFZLEdBRzNDLE9BQU8sSUFBSSxRQUFTZ0csQ0FBQUEsRUFBTyxJQUFBLENBQUssU0FBV0EsQ0FBRSxDQUMvQyxDQUVRLEtBQUEsQ0FBTWhHLENBQUFBLENBQXFCLENBQ2pDLElBQU04RyxDQUFBQSxDQUFxQixFQUFDLENBQzVCLElBQUEsSUFBV0MsS0FBUyxJQUFBLENBQUssTUFBQSxDQUNuQkEsQ0FBQUEsQ0FBTSxNQUFBLEdBQVcvRyxDQUFBQSxDQUNuQitHLENBQUFBLENBQU0sT0FBTy9HLENBQUFBLENBQU8sTUFBTSxFQUUxQjhHLENBQUFBLENBQUssSUFBQSxDQUFLQyxDQUFLLENBQUEsQ0FHbkIsSUFBQSxDQUFLLE9BQVNELENBQUFBLENBQ2QsSUFBQSxDQUFLLE9BQ1AsQ0FFUSxNQUFPLENBQ2IsR0FBSSxLQUFLLE9BQUEsR0FBWSxDQUFBLEVBQUssSUFBQSxDQUFLLE9BQUEsR0FBWSxDQUFBLENBQUcsQ0FDNUMsS0FBSyxRQUFBLElBQVcsQ0FDaEIsS0FBSyxRQUFBLENBQVcsTUFBQSxDQUNoQixNQUNGLENBQ0ksSUFBQSxDQUFLLFFBQVUsSUFBQSxDQUFLLGNBQUEsRUFDdEIsS0FBSyxNQUFBLENBQU8sS0FBQSxJQUFTLEdBQUEsR0FFekIsQ0FDRixDQUFBLENDdkVPLElBQU1FLEVBQUFBLENBQXdCLFlBQUEsQ0FlckMsZUFBc0JDLENBQUFBLENBQWF0RSxDQUFBQSxDQUF1QlEsRUFBc0MsQ0FJOUYsSUFBQStELENBQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsQ0FIQSxJQUFNQyxDQUFBQSxDQUFNLElBQUlDLG1CQUFBQSxDQUNoQkQsQ0FBQUEsQ0FBSSxjQUFjeEUsQ0FBQUEsQ0FBSyxLQUFLLEVBRTVCLElBQU0wRSxDQUFBQSxDQUFRQyxFQUFBSixDQUFBQSxDQUFBLElBQUksaUJBQ2xCRyxDQUFBQSxDQUFNLEdBQUEsQ0FBSUYsQ0FBRyxDQUFBLENBQ2JBLENBQUFBLENBQUksUUFBVXhFLENBQUFBLENBQUssS0FBQSxDQUFNLEVBQUEsQ0FDekJ3RSxDQUFBQSxDQUFJLEtBQUEsQ0FBUXhFLENBQUFBLENBQUssTUFDakJ3RSxDQUFBQSxDQUFJLE1BQUEsQ0FBU3hFLEVBQUssTUFBQSxDQUNsQndFLENBQUFBLENBQUksWUFBY3hFLENBQUFBLENBQUssV0FBQSxDQUN2QndFLEVBQUksUUFBQSxDQUFXLElBQUlJLGdCQUFTLENBQUEsQ0FBRzVFLENBQUFBLENBQUssR0FBRyxDQUFBLENBQ3ZDd0UsQ0FBQUEsQ0FBSSxVQUFZLElBQUlJLGVBQUFBLENBQVM1RSxFQUFLLEdBQUEsQ0FBSyxDQUFDLEVBQ3hDd0UsQ0FBQUEsQ0FBSSxPQUFBLENBQVV4RSxFQUFLLEdBQUEsQ0FBTSxDQUFBLENBQ3pCd0UsRUFBSSxPQUFBLENBQVUsTUFBQSxDQUFPeEUsRUFBSyxPQUFPLENBQUEsQ0FDakN3RSxFQUFJLFFBQUEsQ0FBU0sscUNBQTJCLEVBQ3BDN0UsQ0FBQUEsQ0FBSyxRQUFBLEdBQ1B3RSxFQUFJLFFBQUEsQ0FBV3hFLENBQUFBLENBQUssUUFBQSxDQUFBLENBRWxCQSxDQUFBQSxDQUFLLFVBQUEsR0FBZSxLQUFBLENBQUEsR0FDdEJ3RSxFQUFJLFVBQUEsQ0FBYXhFLENBQUFBLENBQUssWUFFcEJBLENBQUFBLENBQUssV0FBQSxHQUNQd0UsRUFBSSxXQUFBLENBQWN4RSxDQUFBQSxDQUFLLGFBRXpCLElBQUEsR0FBVyxDQUFDOEUsRUFBR1osQ0FBQyxDQUFBLEdBQUssT0FBTyxPQUFBLENBQVFsRSxDQUFBQSxDQUFLLFNBQVcsRUFBRSxDQUFBLENBQ3BEd0UsQ0FBQUEsQ0FBSSxTQUFBLENBQVVNLENBQUFBLENBQUdaLENBQUMsQ0FBQSxDQUVwQmEsa0JBQUFBLENBQVksYUFBYSxNQUFNUCxDQUFBQSxDQUFJLE1BQU14RSxDQUFBQSxDQUFLLEtBQUEsQ0FBTyxJQUFJLENBQUEsQ0FBR1EsQ0FBSyxFQUNqRWtFLENBQUFBLENBQU0sSUFBQSxHQUNOLE9BQU9GLENBQUFBLENBQUFBLE1BekJQMUMsRUFBQSxDQUFBLElBQUFrRCxDQUFBQSxDQUFBbEQsQ0FBQUEsQ0FBQW1ELENBQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBQVgsRUFBQVMsQ0FBQUEsQ0FBQUMsQ0FBQUEsRUFBQUEsQ0EwQkYsQ0FFTyxTQUFTRSxFQUFBQSxDQUFVN0MsRUFBZUMsQ0FBQUEsQ0FBZ0I2QyxDQUFBQSxDQUE4QixDQUlyRixJQUFBYixDQUFBQSxDQUFBLE9BSEEsSUFBTWMsQ0FBQUEsQ0FBUSxJQUFJQyxZQUFBQSxDQUNsQkQsQ0FBQUEsQ0FBTSxPQUFNLENBRVosSUFBTVgsQ0FBQUEsQ0FBUUMsQ0FBQUEsQ0FBQUosQ0FBQUEsQ0FBQSxJQUFJLGlCQUNsQkcsQ0FBQUEsQ0FBTSxHQUFBLENBQUlXLENBQUssQ0FBQSxDQUNmQSxDQUFBQSxDQUFNLE9BQVNELENBQUFBLENBQ2ZDLENBQUFBLENBQU0sTUFBUS9DLENBQUFBLENBQ2QrQyxDQUFBQSxDQUFNLE9BQVM5QyxDQUFBQSxDQUNmd0Msa0JBQUFBLENBQVksYUFBYU0sQ0FBQUEsQ0FBTSxTQUFBLENBQVUsQ0FBQyxDQUFBLENBQUcsaUJBQWlCLENBQUEsQ0FDOURYLENBQUFBLENBQU0sSUFBQSxFQUFLLENBQ1gsT0FBT1csQ0FBQUEsQ0FBQUEsTUFQUHZELENBQUFBLENBQUEsS0FBQWtELENBQUFBLENBQUFsRCxDQUFBQSxDQUFBbUQsRUFBQSxLQUFBLENBQUEsT0FBQSxDQUFBQyxDQUFBQSxDQUFBWCxFQUFBUyxDQUFBQSxDQUFBQyxDQUFBQSxFQUFBQSxDQVFGLENBRU8sU0FBU00sQ0FBQUEsRUFBcUIsQ0FDbkMsSUFBTUMsQ0FBQUEsQ0FBTSxJQUFJQyxhQUFBQSxDQUNoQixPQUFBRCxDQUFBQSxDQUFJLEtBQUEsRUFBTSxDQUNIQSxDQUNULENBRUEsZUFBc0JFLEVBQUFBLENBQWFsQixFQUFtQmdCLENBQUFBLENBQWFHLENBQUFBLENBQWdCQyxFQUFtQyxDQUNwSCxPQUFhLENBQ1gsSUFBTXZDLENBQUFBLENBQUksTUFBTW1CLENBQUFBLENBQUksYUFBQSxDQUFjZ0IsQ0FBRyxDQUFBLENBQ3JDLEdBQUluQyxJQUFNd0Msd0JBQUFBLEVBQWtCeEMsQ0FBQUEsR0FBTXlDLHFCQUFBQSxDQUNoQyxNQUVGLEdBQUksQ0FDRmYsbUJBQVksWUFBQSxDQUFhMUIsQ0FBQUEsQ0FBRyxlQUFlLENBQUEsQ0FDM0NtQyxDQUFBQSxDQUFJLFlBQWNHLENBQUFBLENBQU8sS0FBQSxDQUNyQkgsRUFBSSxRQUFBLEdBQWEsRUFBQSxHQUNuQkEsRUFBSSxRQUFBLENBQVcsRUFBQSxDQUFBLENBRWpCQSxFQUFJLFNBQUEsQ0FBVWhCLENBQUFBLENBQUksU0FBVW1CLENBQUFBLENBQU8sUUFBUSxFQUMzQyxNQUFNQyxDQUFBQSxDQUFNLFlBQVlKLENBQUcsRUFDN0IsUUFBRSxDQUNBQSxDQUFBQSxDQUFJLFFBQ04sQ0FDRixDQUNGLENDMUZPLElBQU1PLEVBQU4sTUFBTUMsQ0FBaUMsQ0FDbkMsR0FBQSxDQUNBLEdBQUEsQ0FDQSxJQUNELElBQUEsQ0FDQSxJQUFBLENBRVIsYUFBYSxNQUFBLENBQU8xRCxDQUFBQSxDQUFlQyxDQUFBQSxDQUFnQixDQUNqRCxJQUFNMEQsQ0FBQUEsQ0FBUUMsYUFBTSxpQkFBQSxDQUFrQkMscUJBQWMsRUFDcEQsT0FBQUMsU0FBQUEsQ0FBR0gsRUFBTyx5QkFBeUIsQ0FBQSxDQUM1QixJQUFJRCxDQUFBQSxDQUFXMUQsQ0FBQUEsQ0FBT0MsRUFBUTBELENBQUssQ0FDNUMsQ0FFUSxXQUFBLENBQVkzRCxDQUFBQSxDQUFlQyxDQUFBQSxDQUFnQjhELENBQUFBLENBQVksQ0FDN0QsSUFBQSxDQUFLLEtBQU9BLENBQUFBLENBQ1osSUFBQSxDQUFLLElBQU1sQixFQUFBQSxDQUFVN0MsQ0FBQUEsQ0FBT0MsRUFBUStELHNCQUFlLENBQUEsQ0FDbkQsS0FBSyxHQUFBLENBQU1uQixFQUFBQSxDQUFVN0MsRUFBT0MsQ0FBQUEsQ0FBUWdFLDBCQUFtQixFQUN2RCxJQUFBLENBQUssR0FBQSxDQUFNaEIsSUFDYixDQU9BLE1BQU0sR0FBQSxFQUE2QixDQUVqQyxJQUFBaEIsRUFBQSxFQUFBLENBQUEsR0FBQSxDQUFBLElBQU1HLENBQUFBLENBQVFDLEVBQUFKLENBQUFBLENBQUEsSUFBSSxpQkFDbEIsSUFBTThCLENBQUFBLENBQU0sSUFBSTVCLG1CQUFBQSxDQUNoQjRCLENBQUFBLENBQUksY0FBYyxJQUFBLENBQUssSUFBSSxFQUMzQjNCLENBQUFBLENBQU0sR0FBQSxDQUFJMkIsQ0FBRyxDQUFBLENBQ2J0QixrQkFBQUEsQ0FBWSxhQUFhLE1BQU1zQixDQUFBQSxDQUFJLE1BQU0sSUFBQSxDQUFLLElBQUksRUFBRyxrQkFBa0IsQ0FBQSxDQUN2RTNCLEVBQU0sSUFBQSxFQUFLLENBQ1gsT0FBTzJCLENBQUFBLENBQUFBLE1BTlB2RSxDQUFBQSxDQUFBLEtBQUFrRCxDQUFBQSxDQUFBbEQsQ0FBQUEsQ0FBQW1ELEVBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBQVgsRUFBQVMsQ0FBQUEsQ0FBQUMsQ0FBQUEsRUFBQUEsQ0FPRixDQUVBLE1BQU0sU0FBQSxDQUFVdUIsQ0FBQUEsQ0FBaUMsQ0FDL0MsSUFBQWpDLENBQUFBLENBQUEsV0FBTThCLENBQUFBLENBQU0xQixDQUFBQSxDQUFBSixFQUFBLE1BQU0sSUFBQSxDQUFLLEtBQUksQ0FBQSxDQUMzQixJQUFBLENBQUssSUFBSSxJQUFBLENBQU9pQyxDQUFBQSxDQUNoQnpCLG1CQUFZLFlBQUEsQ0FBYSxNQUFNc0IsRUFBSSxVQUFBLENBQVcsSUFBQSxDQUFLLEdBQUcsQ0FBQSxDQUFHLHVCQUF1QixDQUFBLENBQ2hGLEtBQUssR0FBQSxDQUFJLEtBQUEsR0FDVHRCLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxNQUFNc0IsQ0FBQUEsQ0FBSSxZQUFBLENBQWEsS0FBSyxHQUFHLENBQUEsQ0FBRyx5QkFBeUIsQ0FBQSxDQUNwRixPQUFPLEtBQUssR0FBQSxDQUFBLE1BTFp2RSxDQUFBQSxDQUFBLEtBQUFrRCxDQUFBQSxDQUFBbEQsQ0FBQUEsQ0FBQW1ELENBQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBQVgsQ0FBQUEsQ0FBQVMsRUFBQUMsQ0FBQUEsRUFBQUEsQ0FNRixDQUVBLElBQUksR0FBQSxFQUFNLENBQ1IsR0FBSSxDQUFDLElBQUEsQ0FBSyxLQUFNLENBQ2QsSUFBTXdCLEVBQU0sSUFBSUMsMkJBQUFBLENBQ1ZDLEVBQU0sSUFBQSxDQUFLLEdBQUEsQ0FBSSxPQUNyQkYsQ0FBQUEsQ0FBSSxVQUFBLENBQ0YsS0FBSyxHQUFBLENBQUksS0FBQSxDQUNULEtBQUssR0FBQSxDQUFJLE1BQUEsQ0FDVEUsRUFDQSxJQUFBLENBQUssR0FBQSxDQUFJLE1BQ1QsSUFBQSxDQUFLLEdBQUEsQ0FBSSxPQUNUSiwwQkFBQUEsQ0FDQUssbUJBQ0YsRUFDQSxJQUFBLENBQUssSUFBQSxDQUFPSCxFQUNkLENBQ0EsT0FBTyxLQUFLLElBQ2QsQ0FFQSxDQUFDLE1BQUEsQ0FBTyxPQUFPLENBQUEsRUFBVSxDQUN2QixJQUFBLENBQUssR0FBQSxDQUFJLE9BQU8sT0FBTyxDQUFBLEdBQ3ZCLElBQUEsQ0FBSyxHQUFBLENBQUksT0FBTyxPQUFPLENBQUEsR0FDdkIsSUFBQSxDQUFLLEdBQUEsQ0FBSSxPQUFPLE9BQU8sQ0FBQSxHQUN2QixJQUFBLENBQUssSUFBQSxHQUFPLE1BQUEsQ0FBTyxPQUFPLENBQUEsR0FDNUIsQ0FDRixDQUFBLENDNURBLElBQU1JLEVBQUFBLENBQW1ELENBQUUsQ0FBQ0MsMkJBQWlCLEVBQUcsS0FBQSxDQUFPLENBQUNDLDRCQUFrQixFQUFHLE1BQU8sRUFXdkdDLEVBQUFBLENBQU4sTUFBTUMsQ0FBbUMsQ0FDdEMsSUFBQSxDQUNBLE9BQUEsQ0FDQSxJQUFBLENBQ0EsUUFBQSxDQUNBLE9BQUEsQ0FDQSxXQUNBLFlBQUEsQ0FDQSxNQUFBLENBQ0EsUUFDQSxRQUFBLENBQ0EsT0FBQSxDQUNBLEtBQU8sRUFBQSxDQUVQLFdBQUEsQ0FBWXpDLEVBQW1CbUIsQ0FBQUEsQ0FBZ0J1QixDQUFBQSxDQUE4RCxDQUNuSCxJQUFBLENBQUssSUFBQSxDQUFPMUMsRUFDWixJQUFBLENBQUssT0FBQSxDQUFVbUIsRUFDZixJQUFBLENBQUssUUFBQSxDQUFXbkIsQ0FBQUEsQ0FBSSxVQUFBLENBQ3BCLElBQUEsQ0FBSyxPQUFBLENBQVUwQyxFQUNmLElBQUEsQ0FBSyxVQUFBLENBQWExQyxFQUFJLFNBQUEsQ0FDdEIsSUFBQSxDQUFLLEtBQU9lLENBQUFBLEVBQVcsQ0FDdkIsS0FBSyxZQUFBLENBQWUsSUFBSUQsYUFDeEIsSUFBQSxDQUFLLFlBQUEsQ0FBYSxRQUNwQixDQUVBLGFBQWEsTUFBQSxDQUFPdEYsQ0FBQUEsQ0FBa0QsQ0FNcEUsSUFBQXVFLENBQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsQ0FMQSxJQUFNMEIsQ0FBQUEsQ0FBUUMsWUFBQUEsQ0FBTSxrQkFBa0JsRyxDQUFBQSxDQUFLLFNBQVMsRUFDcEQsR0FBSSxDQUFDaUcsRUFDSCxNQUFNLElBQUksTUFBTSxDQUFBLHlCQUFBLEVBQTRCakcsQ0FBQUEsQ0FBSyxTQUFTLENBQUEsQ0FBRSxDQUFBLENBRzlELElBQU0wRSxDQUFBQSxDQUFRQyxDQUFBQSxDQUFBSixFQUFBLElBQUksZUFBQSxDQUFBLENBQ2xCLElBQU1DLENBQUFBLENBQU0sSUFBSUMsb0JBQ2hCRCxDQUFBQSxDQUFJLGFBQUEsQ0FBY3lCLENBQUssQ0FBQSxDQUN2QnZCLENBQUFBLENBQU0sSUFBSUYsQ0FBRyxDQUFBLENBQ2JBLEVBQUksT0FBQSxDQUFVeUIsQ0FBQUEsQ0FBTSxHQUNwQnpCLENBQUFBLENBQUksWUFBQSxDQUFleEUsRUFBSyxZQUFBLENBQ3hCd0UsQ0FBQUEsQ0FBSSxVQUFBLENBQWF4RSxDQUFBQSxDQUFLLGFBQUEsQ0FDdEJ3RSxDQUFBQSxDQUFJLGNBQWdCMkMsa0NBQUFBLENBQ3BCM0MsQ0FBQUEsQ0FBSSxTQUFXLElBQUlJLGVBQUFBLENBQVMsRUFBRzVFLENBQUFBLENBQUssYUFBYSxFQUNqRHdFLENBQUFBLENBQUksT0FBQSxDQUFVLE9BQU94RSxDQUFBQSxDQUFLLE9BQU8sRUFDN0JBLENBQUFBLENBQUssWUFBQSxFQUNQd0UsRUFBSSxRQUFBLENBQVNLLHFDQUEyQixDQUFBLENBRTFDRSxrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTVAsRUFBSSxLQUFBLENBQU15QixDQUFBQSxDQUFPLElBQUksQ0FBQSxDQUFHLGdCQUFnQixFQUN2RSxJQUFNTixDQUFBQSxDQUFTM0YsRUFBSyxLQUFBLENBQU0sU0FBQSxDQUFVd0UsQ0FBRyxDQUFBLENBQ3ZDRSxDQUFBQSxDQUFNLE1BQUssQ0FDWCxPQUFPLElBQUl1QyxDQUFBQSxDQUFhekMsQ0FBQUEsQ0FBS21CLENBQUFBLENBQVEzRixDQUFBQSxDQUFLLFlBQVksQ0FBQSxDQUFBLE1BaEJ0RDhCLEVBQUEsQ0FBQSxJQUFBa0QsQ0FBQUEsQ0FBQWxELEVBQUFtRCxDQUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUFDLEVBQUFYLENBQUFBLENBQUFTLENBQUFBLENBQUFDLElBaUJGLENBRUEsWUFBQSxDQUFhbUMsRUFBNEIsQ0FJdkMsSUFBQTdDLEVBQUEsRUFBQSxDQUFBLEdBQUEsQ0FIQSxJQUFBLENBQUssU0FBUyxNQUFBLENBQU8sT0FBTyxDQUFBLEVBQUUsQ0FDOUIsSUFBQSxDQUFLLE9BQUEsQ0FBVTZDLEVBRWYsSUFBTTFDLENBQUFBLENBQVFDLEVBQUFKLENBQUFBLENBQUEsSUFBSSxpQkFDbEIsSUFBTThDLENBQUFBLENBQVEsSUFBSUMsa0JBQUFBLENBQ2xCRCxDQUFBQSxDQUFNLE9BQU0sQ0FDWjNDLENBQUFBLENBQU0sSUFBSTJDLENBQUssQ0FBQSxDQUNmLElBQU1FLENBQUFBLENBQVVDLGFBQUFBLENBQU8sU0FBQSxDQUFVLFNBQVMsQ0FBQSxDQUMxQyxJQUFNQyxFQUFTSixDQUFBQSxDQUFNLFlBQUEsQ0FDbkJFLEVBQ0EsS0FBQSxDQUNBLENBQUEsWUFBQSxFQUFlSCxDQUFZLENBQUEsa0RBQUEsRUFBcURBLENBQVksRUFDOUYsQ0FBQSxDQUNBLEdBQUksQ0FBQ0ssQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLDBCQUEwQixFQUU1QyxJQUFNQyxDQUFBQSxDQUFjRixhQUFBQSxDQUFPLFNBQUEsQ0FBVSxhQUFhLENBQUEsQ0FDbEQsSUFBTUcsQ0FBQUEsQ0FBVU4sQ0FBQUEsQ0FBTSxhQUFhSyxDQUFBQSxDQUFhLE1BQU0sRUFDdEQsR0FBSSxDQUFDQyxFQUNILE1BQU0sSUFBSSxNQUFNLDhCQUE4QixDQUFBLENBRWhELElBQU1DLENBQUFBLENBQVVmLEVBQUFBLENBQWdCLEtBQUssT0FBTyxDQUFBLEVBQUssS0FBQSxDQUNqRCxJQUFNZ0IsQ0FBQUEsQ0FBYSxDQUFBLG9CQUFBLEVBQXVCRCxDQUFPLENBQUEsY0FBQSxFQUFpQixJQUFBLENBQUssUUFBUSxDQUFBLHVDQUFBLEVBQTBDLElBQUEsQ0FBSyxVQUFVLENBQUEsSUFBQSxDQUFBLENBQ3hJLElBQU1FLEVBQVVDLGtCQUFBQSxDQUFZLFVBQUEsQ0FBVyxDQUFDLENBQUUsSUFBQSxDQUFNLEtBQU0sU0FBQSxDQUFXTixDQUFBQSxDQUFRLE9BQVEsQ0FBRSxDQUFDLENBQUMsQ0FBQSxDQUNyRixJQUFNTyxFQUFTRCxrQkFBQUEsQ0FBWSxVQUFBLENBQVcsQ0FBQyxDQUFFLElBQUEsQ0FBTSxNQUFPLFNBQUEsQ0FBV0osQ0FBQUEsQ0FBUyxPQUFRLENBQUUsQ0FBQyxDQUFDLENBQUEsQ0FDdEY1QyxrQkFBQUEsQ0FBWSxhQUFhc0MsQ0FBQUEsQ0FBTSxRQUFBLENBQVNRLEVBQVlHLENBQUFBLENBQVFGLENBQU8sQ0FBQSxDQUFHLGdCQUFnQixDQUFBLENBQ3RGL0Msa0JBQUFBLENBQVksYUFBYXNDLENBQUFBLENBQU0sVUFBQSxHQUFjLGNBQWMsQ0FBQSxDQUMzRDNDLEVBQU0sSUFBQSxFQUFLLENBQ1gsS0FBSyxNQUFBLENBQVMyQyxDQUFBQSxDQUNkLEtBQUssT0FBQSxDQUFVSSxDQUFBQSxDQUNmLEtBQUssUUFBQSxDQUFXRSxFQUFBQSxDQUFBQSxNQTNCaEI3RixFQUFBLENBQUEsSUFBQWtELENBQUFBLENBQUFsRCxDQUFBQSxDQUFBbUQsQ0FBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxDQUFBQyxDQUFBQSxDQUFBWCxFQUFBUyxDQUFBQSxDQUFBQyxDQUFBQSxFQUFBQSxDQTRCRixDQUVBLE1BQU0sTUFBQSxDQUFPZ0QsRUFBYXJDLENBQUFBLENBQW1DLENBVzNELElBQUFyQixDQUFBQSxDQUFBLEVBQUEsQ0FBQSxHQUFBLENBVkEsR0FBSSxDQUFDLElBQUEsQ0FBSyxTQUFXLENBQUMsSUFBQSxDQUFLLFFBQ3pCLE9BRUYsSUFBTVYsQ0FBQUEsQ0FBTSxJQUFJLFlBQUEsQ0FBYW9FLENBQUFBLENBQUksT0FBUUEsQ0FBQUEsQ0FBSSxVQUFBLENBQVlBLEVBQUksVUFBQSxDQUFhLENBQUMsRUFDM0UsSUFBQSxJQUFTckYsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxDQUFJaUIsQ0FBQUEsQ0FBSSxPQUFRakIsQ0FBQUEsRUFBQUEsQ0FDekIsTUFBQSxDQUFPLFNBQVNpQixDQUFBQSxDQUFJakIsQ0FBQyxDQUFFLENBQUEsR0FDMUJpQixDQUFBQSxDQUFJakIsQ0FBQyxDQUFBLENBQUksQ0FBQSxDQUFBLENBR2IsSUFBTXNGLEVBQVdyRSxDQUFBQSxDQUFJLE1BQUEsRUFBVSxFQUMvQixJQUFNd0IsQ0FBQUEsQ0FBUVYsRUFBQUosQ0FBQUEsQ0FBQWUsWUFBQUEsQ0FBTSxnQkFBZ0IsTUFBQSxDQUFPLElBQUEsQ0FBS3pCLEVBQUksTUFBQSxDQUFRQSxDQUFBQSxDQUFJLFdBQVlBLENBQUFBLENBQUksVUFBVSxFQUFHLENBQzNGLFNBQUEsQ0FBV3FFLENBQUFBLENBQ1gsTUFBQSxDQUFRcEIsMkJBQUFBLENBQ1IsVUFBQSxDQUFZLEtBQUssT0FBQSxDQUNqQixhQUFBLENBQWVLLG1DQUNmLEdBQUEsQ0FBSyxJQUFBLENBQUssS0FDVixRQUFBLENBQVUsQ0FBRSxJQUFLLENBQUEsQ0FBRyxHQUFBLENBQUssS0FBSyxPQUFRLENBQ3hDLENBQUMsQ0FBQSxDQUFBLENBQ0QsSUFBQSxDQUFLLE1BQVEsTUFBQSxDQUFPZSxDQUFRLENBQUEsQ0FDNUJuRCxrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTSxLQUFLLE9BQUEsQ0FBUSxpQkFBQSxDQUFrQk0sQ0FBSyxDQUFBLENBQUcsbUJBQW1CLEVBQ3pGLE1BQU0sSUFBQSxDQUFLLE1BQU1PLENBQUssRUFBQSxDQUFBLE1BVnRCOUQsRUFBQSxDQUFBLElBQUFrRCxDQUFBQSxDQUFBbEQsRUFBQW1ELENBQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsRUFBQVgsQ0FBQUEsQ0FBQVMsQ0FBQUEsQ0FBQUMsQ0FBQUEsRUFBQUEsQ0FXRixDQUVBLE1BQU0sS0FBQSxDQUFNVyxFQUFtQyxDQUN6QyxJQUFBLENBQUssVUFDUCxNQUFNLElBQUEsQ0FBSyxRQUFRLGlCQUFBLENBQWtCLElBQUksRUFDekMsTUFBTSxJQUFBLENBQUssTUFBTUEsQ0FBSyxDQUFBLENBQUEsQ0FFeEIsTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFVBQVUsSUFBSSxDQUFBLENBQzlCLE1BQU0sSUFBQSxDQUFLLFVBQUEsQ0FBV0EsQ0FBSyxFQUM3QixDQUVBLENBQUMsTUFBQSxDQUFPLE9BQU8sR0FBVSxDQUN2QixJQUFBLENBQUssS0FBSyxJQUFBLEVBQUssQ0FDZixLQUFLLFlBQUEsQ0FBYSxJQUFBLEdBQ2xCLElBQUEsQ0FBSyxNQUFBLEdBQVMsT0FBTyxPQUFPLENBQUEsRUFBRSxDQUM5QixJQUFBLENBQUssSUFBQSxDQUFLLFdBQUEsR0FDWixDQUVBLE1BQWMsTUFBTUEsQ0FBQUEsQ0FBbUMsQ0FDckQsT0FBYSxDQUNYLElBQU12QyxFQUFJLE1BQU0sSUFBQSxDQUFLLFNBQVUsa0JBQUEsQ0FBbUIsSUFBQSxDQUFLLFlBQVksQ0FBQSxDQUNuRSxHQUFJQSxJQUFNd0Msd0JBQUFBLEVBQWtCeEMsQ0FBQUEsR0FBTXlDLHFCQUFBQSxDQUNoQyxNQUVGLEdBQUksQ0FDRmYsbUJBQVksWUFBQSxDQUFhMUIsQ0FBQUEsQ0FBRyxvQkFBb0IsQ0FBQSxDQUNoRDBCLGtCQUFBQSxDQUFZLGFBQWEsTUFBTSxJQUFBLENBQUssS0FBSyxTQUFBLENBQVUsSUFBQSxDQUFLLFlBQVksQ0FBQSxDQUFHLG9CQUFvQixFQUMzRixNQUFNLElBQUEsQ0FBSyxXQUFXYSxDQUFLLEVBQzdCLENBQUEsT0FBRSxDQUNBLElBQUEsQ0FBSyxZQUFBLENBQWEsUUFDcEIsQ0FDRixDQUNGLENBRVEsVUFBQSxDQUFXQSxFQUFtQyxDQUNwRCxPQUFPRixHQUFhLElBQUEsQ0FBSyxJQUFBLENBQU0sS0FBSyxJQUFBLENBQU0sSUFBQSxDQUFLLFFBQVNFLENBQUssQ0FDL0QsQ0FDRixDQUFBLENDbkxPLFNBQVN1QyxDQUFBQSxDQUFTQyxDQUFBQSxDQUF3QixDQUMvQyxJQUFNQyxDQUFBQSxDQUFNLE9BQU8sS0FBQSxDQUFNRCxDQUFBQSxDQUFLLFFBQVUsQ0FBQyxDQUFBLENBQ3pDLFFBQVN4RixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsRUFBSXlGLENBQUFBLENBQUksTUFBQSxDQUFRekYsQ0FBQUEsRUFBQUEsQ0FBSyxDQUNuQyxJQUFJMEYsQ0FBQUEsQ0FBTyxFQUNYLElBQUEsSUFBU0MsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsSUFDckJELENBQUFBLENBQVFBLENBQUFBLEVBQVEsRUFBS0YsQ0FBQUEsQ0FBS3hGLENBQUFBLENBQUksRUFBSTJGLENBQUMsQ0FBQSxDQUVyQ0YsRUFBSXpGLENBQUMsQ0FBQSxDQUFJMEYsRUFDWCxDQUNBLE9BQU9ELENBQ1QsQ0FFTyxJQUFNRyxDQUFBQSxDQUFOLEtBQWdCLENBQ3JCLElBQUEsQ0FBaUIsRUFBQyxDQUNsQixDQUFBLENBQUVDLEVBQWFDLENBQUFBLENBQVcsQ0FDeEIsUUFBUzlGLENBQUFBLENBQUk4RixDQUFBQSxDQUFJLEVBQUc5RixDQUFBQSxFQUFLLENBQUEsQ0FBR0EsSUFDMUIsSUFBQSxDQUFLLElBQUEsQ0FBSyxLQUFNNkYsQ0FBQUEsRUFBTzdGLENBQUFBLENBQUssQ0FBQyxFQUVqQyxDQUNBLEtBQUs2RixDQUFBQSxDQUF1QixDQUMxQixLQUFLLElBQUEsQ0FBSyxJQUFBLENBQUtBLEVBQU0sQ0FBQSxDQUFJLENBQUMsRUFDNUIsQ0FDQSxFQUFBLENBQUdBLEVBQWEsQ0FDZCxJQUFNdkUsRUFBSXVFLENBQUFBLENBQU0sQ0FBQSxDQUNWRSxFQUFNLEVBQUEsQ0FBSyxJQUFBLENBQUssS0FBQSxDQUFNekUsQ0FBQyxDQUFBLENBQzdCLElBQUEsSUFBU3RCLEVBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJK0YsRUFBTSxDQUFBLENBQUcvRixDQUFBQSxFQUFBQSxDQUMzQixLQUFLLElBQUEsQ0FBSyxJQUFBLENBQUssQ0FBQyxDQUFBLENBRWxCLElBQUEsSUFBU0EsRUFBSStGLENBQUFBLENBQU0sQ0FBQSxDQUFHL0YsR0FBSyxDQUFBLENBQUdBLENBQUFBLEVBQUFBLENBQzVCLEtBQUssSUFBQSxDQUFLLElBQUEsQ0FBTXNCLENBQUFBLEVBQUt0QixDQUFBQSxDQUFLLENBQUMsRUFFL0IsQ0FDQSxLQUFBLENBQU1nRyxDQUFBQSxDQUFhLENBQ2pCLEtBQU8sSUFBQSxDQUFLLEtBQUssTUFBQSxDQUFTLENBQUEsR0FBTSxHQUM5QixJQUFBLENBQUssSUFBQSxDQUFLLEtBQUtBLENBQUcsRUFFdEIsQ0FDQSxJQUFBLENBQUsvRSxDQUFBQSxDQUFlZ0YsRUFBZUYsQ0FBQUEsQ0FBYSxDQUM5QyxJQUFBLElBQVMvRixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSStGLEVBQUsvRixDQUFBQSxFQUFBQSxDQUN2QixJQUFBLENBQUssS0FBSyxJQUFBLENBQUtpQixDQUFBQSxDQUFJZ0YsRUFBUWpHLENBQUMsQ0FBRSxFQUVsQyxDQUNGLENBQUEsQ0FFYWtHLEVBQU4sS0FBZ0IsQ0FDYixNQUNSLEdBQUEsQ0FBTSxDQUFBLENBQ04sWUFBWTVMLENBQUFBLENBQWMsQ0FDeEIsSUFBQSxDQUFLLEtBQUEsQ0FBUSxFQUFDLENBQ2QsUUFBUzBGLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJMUYsQ0FBQUEsQ0FBSyxNQUFBLENBQVEwRixJQUMvQixJQUFBLElBQVMyRixDQUFBQSxDQUFJLEVBQUdBLENBQUFBLEVBQUssQ0FBQSxDQUFHQSxJQUN0QixJQUFBLENBQUssS0FBQSxDQUFNLEtBQU1yTCxDQUFBQSxDQUFLMEYsQ0FBQyxHQUFNMkYsQ0FBQUEsQ0FBSyxDQUFDLEVBR3pDLENBQ0EsSUFBSSxJQUFBLEVBQU8sQ0FDVCxPQUFPLElBQUEsQ0FBSyxLQUNkLENBQ0EsSUFBQSxDQUFLRyxFQUFtQixDQUN0QixJQUFJRCxFQUFNLENBQUEsQ0FDVixJQUFBLElBQVM3RixFQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSThGLEVBQUc5RixDQUFBQSxFQUFBQSxDQUNyQjZGLENBQUFBLENBQU9BLEdBQU8sQ0FBQSxDQUFLLElBQUEsQ0FBSyxLQUFBLENBQU0sSUFBQSxDQUFLLEdBQUEsRUFBSyxDQUFBLENBRTFDLE9BQU9BLENBQ1QsQ0FDQSxRQUFpQixDQUNmLElBQUlNLEVBQVEsQ0FBQSxDQUNaLEtBQU8sS0FBSyxLQUFBLENBQU0sSUFBQSxDQUFLLEdBQUcsQ0FBQSxHQUFNLENBQUEsRUFDOUJBLElBQ0EsSUFBQSxDQUFLLEdBQUEsRUFBQSxDQUVQLEtBQUssR0FBQSxFQUFBLENBQ0wsSUFBSU4sQ0FBQUEsQ0FBTSxDQUFBLENBQ1YsSUFBQSxJQUFTN0YsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxDQUFJbUcsQ0FBQUEsQ0FBT25HLElBQ3pCNkYsQ0FBQUEsQ0FBT0EsQ0FBQUEsRUFBTyxFQUFLLElBQUEsQ0FBSyxLQUFBLENBQU0sS0FBSyxHQUFBLEVBQUssQ0FBQSxDQUUxQyxPQUFPQSxDQUFBQSxDQUFNLENBQ2YsQ0FDRixDQUFBLENDN0VBLElBQU1PLEVBQXFCLE1BQUEsQ0FBTyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQU0sQ0FBQSxDQUFNLEVBQU0sQ0FBSSxDQUFDLEVBS3hELElBQU1DLEVBQUFBLENBQWUsR0FHckIsSUFBTUMsRUFBQUEsQ0FBcUIsR0FDckJDLEVBQUFBLENBQVUsRUFBQSxDQUNWQyxHQUFVLEVBQUEsQ0FDVkMsRUFBQUEsQ0FBVSxHQUNWQyxFQUFBQSxDQUFpQixFQUFBLENBUzlCLFNBQVNDLEVBQUFBLENBQWFDLENBQUFBLENBQWlCQyxDQUFBQSxDQUF3RSxDQUM3RyxJQUFNQyxDQUFBQSxDQUFRRixHQUFXLENBQUEsQ0FBSyxFQUFBLENBQ3hCRyxHQUFZSCxDQUFBQSxDQUFVLENBQUEsR0FBTSxFQUFPQyxDQUFBQSxFQUFXLENBQUEsQ0FBSyxHQUNuREcsQ0FBQUEsQ0FBYUgsQ0FBQUEsQ0FBVSxFQUM3QixPQUFPLENBQUUsS0FBQUMsQ0FBQUEsQ0FBTSxPQUFBLENBQUFDLEVBQVMsVUFBQSxDQUFBQyxDQUFXLENBQ3JDLENBRU8sU0FBU0MsRUFBQUEsQ0FBZ0JILEVBQWNDLENBQUFBLENBQWlCQyxDQUFBQSxDQUFzQyxDQUNuRyxJQUFNRSxDQUFBQSxDQUFBQSxDQUFVSixFQUFPLEVBQUEsR0FBUyxDQUFBLENBQU9DLEdBQVcsQ0FBQSxDQUFLLENBQUEsQ0FDakRJLEdBQVVKLENBQUFBLENBQVUsRUFBQSxHQUFTLEVBQU1DLENBQUFBLENBQWEsQ0FBQSxDQUN0RCxPQUFPLENBQUNFLENBQUFBLENBQU9DLENBQUssQ0FDdEIsQ0FHTyxTQUFTQyxFQUFjQyxDQUFBQSxDQUE4QixDQUMxRCxJQUFNQyxDQUFBQSxDQUFrQixHQUNwQnRILENBQUFBLENBQUksQ0FBQSxDQUVSLEtBQU9BLENBQUFBLENBQUlxSCxDQUFBQSxDQUFVLFFBQVEsQ0FDM0IsSUFBSUUsRUFBUSxDQUFBLENBQ1osR0FBSXZILEVBQUksQ0FBQSxDQUFJcUgsQ0FBQUEsQ0FBVSxNQUFBLEVBQVVBLENBQUFBLENBQVVySCxDQUFDLENBQUEsR0FBTSxHQUFLcUgsQ0FBQUEsQ0FBVXJILENBQUFBLENBQUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxFQUFLcUgsRUFBVXJILENBQUFBLENBQUksQ0FBQyxJQUFNLENBQUEsQ0FDbkd1SCxDQUFBQSxDQUFRLFVBRVJ2SCxDQUFBQSxDQUFJLENBQUEsQ0FBSXFILEVBQVUsTUFBQSxFQUNsQkEsQ0FBQUEsQ0FBVXJILENBQUMsQ0FBQSxHQUFNLENBQUEsRUFDakJxSCxDQUFBQSxDQUFVckgsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxHQUNyQnFILENBQUFBLENBQVVySCxDQUFBQSxDQUFJLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFDckJxSCxFQUFVckgsQ0FBQUEsQ0FBSSxDQUFDLElBQU0sQ0FBQSxDQUVyQnVILENBQUFBLENBQVEsT0FDSCxDQUNMdkgsQ0FBQUEsRUFBQUEsQ0FDQSxRQUNGLENBRUEsSUFBTXdILEVBQVd4SCxDQUFBQSxDQUFJdUgsQ0FBQUEsQ0FDckIsR0FBSUMsQ0FBQUEsQ0FBVyxDQUFBLENBQWtCSCxDQUFBQSxDQUFVLE9BQ3pDLE1BR0YsSUFBSUksRUFBU0osQ0FBQUEsQ0FBVSxNQUFBLENBQ3ZCLFFBQVNLLENBQUFBLENBQUlGLENBQUFBLENBQVcsRUFBaUJFLENBQUFBLENBQUlMLENBQUFBLENBQVUsT0FBUyxDQUFBLENBQUdLLENBQUFBLEVBQUFBLENBQ2pFLEdBQ0VMLENBQUFBLENBQVVLLENBQUMsSUFBTSxDQUFBLEVBQ2pCTCxDQUFBQSxDQUFVSyxDQUFBQSxDQUFJLENBQUMsQ0FBQSxHQUFNLENBQUEsR0FDcEJMLEVBQVVLLENBQUFBLENBQUksQ0FBQyxJQUFNLENBQUEsRUFBTUEsQ0FBQUEsQ0FBSSxFQUFJTCxDQUFBQSxDQUFVLE1BQUEsRUFBVUEsRUFBVUssQ0FBQUEsQ0FBSSxDQUFDLElBQU0sQ0FBQSxFQUFLTCxDQUFBQSxDQUFVSyxFQUFJLENBQUMsQ0FBQSxHQUFNLEdBQ3ZHLENBQ0FELENBQUFBLENBQVNDLEVBQ1QsS0FDRixDQUdGLEdBQU0sQ0FBRSxJQUFBLENBQUFaLEVBQU0sT0FBQSxDQUFBQyxDQUFRLEVBQUlKLEVBQUFBLENBQWFVLENBQUFBLENBQVVHLENBQVEsQ0FBQSxDQUFJSCxDQUFBQSxDQUFVRyxFQUFXLENBQUMsQ0FBRSxFQUNyRkYsQ0FBQUEsQ0FBSyxJQUFBLENBQUssQ0FBRSxJQUFBLENBQUFSLENBQUFBLENBQU0sT0FBQSxDQUFBQyxDQUFBQSxDQUFTLElBQUEsQ0FBTU0sQ0FBQUEsQ0FBVSxTQUFTRyxDQUFBQSxDQUFVQyxDQUFNLENBQUUsQ0FBQyxDQUFBLENBQ3ZFekgsRUFBSXlILEVBQ04sQ0FFQSxPQUFPSCxDQUNULENBR08sU0FBU0ssRUFBQUEsQ0FBa0JDLENBQUFBLENBQWFiLEVBQXlCLENBQ3RFLElBQU1jLEVBQU0sTUFBQSxDQUFPLElBQUEsQ0FBS0QsQ0FBRyxDQUFBLENBQ3JCLENBQUUsSUFBQSxDQUFBZCxFQUFNLFVBQUEsQ0FBQUUsQ0FBVyxFQUFJTCxFQUFBQSxDQUFha0IsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsQ0FBSUEsQ0FBQUEsQ0FBSSxDQUFDLENBQUUsQ0FBQSxDQUNwRCxDQUFDQyxDQUFBQSxDQUFJQyxDQUFFLEVBQUlkLEVBQUFBLENBQWdCSCxDQUFBQSxDQUFNQyxFQUFTQyxDQUFVLENBQUEsQ0FDMUQsT0FBQWEsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsQ0FBSUMsRUFDVEQsQ0FBQUEsQ0FBSSxDQUFDLEVBQUlFLENBQUFBLENBQ0ZGLENBQ1QsQ0FhTyxTQUFTRyxDQUFBQSxDQUEwQjFOLEVBQXNCLENBQzlELElBQU11TixFQUFnQixFQUFDLENBQ3ZCLFFBQVM3SCxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsRUFBSTFGLENBQUFBLENBQUssTUFBQSxDQUFRMEYsQ0FBQUEsRUFBQUEsQ0FDM0JBLENBQUFBLENBQUksQ0FBQSxDQUFJMUYsQ0FBQUEsQ0FBSyxRQUFVQSxDQUFBQSxDQUFLMEYsQ0FBQyxJQUFNLENBQUEsRUFBSzFGLENBQUFBLENBQUswRixFQUFJLENBQUMsQ0FBQSxHQUFNLEdBQUsxRixDQUFBQSxDQUFLMEYsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLEVBQy9FNkgsRUFBSSxJQUFBLENBQUssQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNiN0gsQ0FBQUEsRUFBSyxDQUFBLEVBRUw2SCxDQUFBQSxDQUFJLElBQUEsQ0FBS3ZOLENBQUFBLENBQUswRixDQUFDLENBQUUsQ0FBQSxDQUdyQixPQUFPLE1BQUEsQ0FBTyxJQUFBLENBQUs2SCxDQUFHLENBQ3hCLENBR08sU0FBU0ksRUFBQUEsQ0FBdUJMLENBQUFBLENBQXFCLENBQzFELElBQU1DLENBQUFBLENBQWdCLEVBQUMsQ0FDdkJBLENBQUFBLENBQUksS0FBS0QsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsQ0FBSUEsQ0FBQUEsQ0FBSSxDQUFDLENBQUUsRUFDekIsSUFBSXpCLENBQUFBLENBQVEsRUFDWixJQUFBLElBQVNuRyxDQUFBQSxDQUFJLEVBQUdBLENBQUFBLENBQUk0SCxDQUFBQSxDQUFJLE9BQVE1SCxDQUFBQSxFQUFBQSxDQUMxQm1HLENBQUFBLEdBQVUsR0FBS3lCLENBQUFBLENBQUk1SCxDQUFDLEdBQU0sQ0FBQSxHQUM1QjZILENBQUFBLENBQUksS0FBSyxDQUFDLENBQUEsQ0FDVjFCLENBQUFBLENBQVEsQ0FBQSxDQUFBLENBRU55QixDQUFBQSxDQUFJNUgsQ0FBQyxJQUFNLENBQUEsQ0FDYm1HLENBQUFBLEVBQUFBLENBRUFBLEVBQVEsQ0FBQSxDQUVWMEIsQ0FBQUEsQ0FBSSxLQUFLRCxDQUFBQSxDQUFJNUgsQ0FBQyxDQUFFLENBQUEsQ0FFbEIsT0FBTyxPQUFPLElBQUEsQ0FBSzZILENBQUcsQ0FDeEIsQ0N4SEEsSUFBTUssR0FBYyxFQUFBLENBQ2RDLEVBQUFBLENBQWMsR0FDZEMsRUFBQUEsQ0FBZSxDQUFBLENBQ2ZDLEdBQWtCLEVBQUEsQ0FDbEJDLEVBQUFBLENBQWUsRUFDZkMsRUFBQUEsQ0FBZSxDQUFBLENBRXJCLFNBQVNDLEVBQUFBLENBQU8vQyxDQUFBQSxDQUFhZ0QsRUFBbUIvTyxDQUFBQSxDQUFvQixDQUNsRSxJQUFNZ00sQ0FBQUEsQ0FBTytDLENBQUFBLEVBQWEsRUFDcEJDLENBQUFBLENBQU8sQ0FBQSxFQUFNLEdBQUtELENBQUFBLENBQVksQ0FBQSxDQUFBLENBQzlCRSxDQUFBQSxDQUFNbEQsQ0FBQUEsQ0FBSUMsQ0FBSSxDQUFBLEVBQUssRUFDekJELENBQUFBLENBQUlDLENBQUksRUFBSWhNLENBQUFBLENBQVFpUCxDQUFBQSxDQUFNRCxFQUFPQyxDQUFBQSxDQUFNLENBQUNELEVBQzFDLENBRUEsU0FBU0UsR0FBU0MsQ0FBQUEsQ0FBaUJDLENBQUFBLENBQTZCLENBQzlELElBQU1DLENBQUFBLENBQU9mLEVBQTBCYSxDQUFPLENBQUEsQ0FDOUMsT0FBQUwsRUFBQUEsQ0FBT08sQ0FBQUEsQ0FBTUQsQ0FBQUEsQ0FBY1YsR0FBYyxDQUFDLENBQUEsQ0FDMUNJLEdBQU9PLENBQUFBLENBQU1ELENBQUFBLENBQWNULEdBQWlCLENBQUMsQ0FBQSxDQUN0Q0osR0FBdUJjLENBQUksQ0FDcEMsQ0FHTyxTQUFTQyxFQUFBQSxDQUFrQjNCLEVBQTJCLENBQzNELElBQU1DLEVBQU9GLENBQUFBLENBQWNDLENBQVMsQ0FBQSxDQUNwQyxHQUFJQyxDQUFBQSxDQUFLLE1BQUEsR0FBVyxFQUNsQixPQUFPRCxDQUFBQSxDQUVULElBQU00QixDQUFBQSxDQUFtQixHQUN6QixJQUFBLElBQVdyQixDQUFBQSxJQUFPTixFQUFNLENBQ3RCLElBQUloTixFQUFPc04sQ0FBQUEsQ0FBSSxJQUFBLENBQ1hBLEVBQUksSUFBQSxHQUFTckIsRUFBQUEsQ0FDZmpNLEVBQU9zTyxFQUFBQSxDQUFTaEIsQ0FBQUEsQ0FBSSxJQUFBLENBQU1NLEVBQVcsQ0FBQSxDQUM1Qk4sQ0FBQUEsQ0FBSSxPQUFTcEIsRUFBQUEsR0FDdEJsTSxDQUFBQSxDQUFPc08sR0FBU2hCLENBQUFBLENBQUksSUFBQSxDQUFNTyxFQUFXLENBQUEsQ0FBQSxDQUV2Q2MsQ0FBQUEsQ0FBTyxLQUFLN0MsQ0FBQUEsQ0FBb0I5TCxDQUFJLEVBQ3RDLENBQ0EsT0FBTyxPQUFPLE1BQUEsQ0FBTzJPLENBQU0sQ0FDN0IsQ0FJQSxTQUFTQyxFQUFBQSxDQUFhQyxDQUFBQSxDQUFlVixDQUFBQSxDQUFtQlcsQ0FBQUEsQ0FBd0IsQ0FDOUUsSUFBTUwsQ0FBQUEsQ0FBT2YsRUFBMEJtQixDQUFLLENBQUEsQ0FDdENFLEVBQUssSUFBSW5ELENBQUFBLENBQVU2QyxDQUFJLENBQUEsQ0FDdkJPLENBQUFBLENBQUssSUFBSTFELENBQUFBLENBQ2YsSUFBQSxJQUFTNUYsRUFBSSxDQUFBLENBQUdBLENBQUFBLENBQUl5SSxFQUFXekksQ0FBQUEsRUFBQUEsQ0FDN0JzSixDQUFBQSxDQUFHLElBQUEsQ0FBSyxJQUFBLENBQUtELENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBSXpCLElBRkFBLENBQUFBLENBQUcsTUFBQSxHQUNIQyxDQUFBQSxDQUFHLEVBQUEsQ0FBR0YsQ0FBTSxDQUFBLENBQ0xDLENBQUFBLENBQUcsSUFBTUEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssUUFDdEJDLENBQUFBLENBQUcsSUFBQSxDQUFLLEtBQUtELENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBRXpCLEtBQU9DLEVBQUcsSUFBQSxDQUFLLE1BQUEsQ0FBUyxJQUFNLENBQUEsRUFDNUJBLENBQUFBLENBQUcsS0FBSyxJQUFBLENBQUssQ0FBQyxFQUVoQixPQUFPckIsRUFBQUEsQ0FBdUIxQyxFQUFTK0QsQ0FBQUEsQ0FBRyxJQUFJLENBQUMsQ0FDakQsQ0FFQSxTQUFTQyxFQUFBQSxDQUFhSixDQUFBQSxDQUFlVixFQUFtQmUsQ0FBQUEsQ0FBaUJDLENBQUFBLENBQXlCLENBQ2hHLElBQU1WLENBQUFBLENBQU9mLEVBQTBCbUIsQ0FBSyxDQUFBLENBQ3RDRSxFQUFLLElBQUluRCxDQUFBQSxDQUFVNkMsQ0FBSSxDQUFBLENBQ3ZCTyxDQUFBQSxDQUFLLElBQUkxRCxDQUFBQSxDQUNmLElBQUEsSUFBUzVGLEVBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJeUksRUFBV3pJLENBQUFBLEVBQUFBLENBQzdCc0osQ0FBQUEsQ0FBRyxJQUFBLENBQUssSUFBQSxDQUFLRCxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQSxDQU16QixJQUpBQSxDQUFBQSxDQUFHLE1BQUEsR0FDSEEsQ0FBQUEsQ0FBRyxNQUFBLEdBQ0hDLENBQUFBLENBQUcsRUFBQSxDQUFHRSxDQUFPLENBQUEsQ0FDYkYsQ0FBQUEsQ0FBRyxHQUFHRyxDQUFPLENBQUEsQ0FDTkosRUFBRyxHQUFBLENBQU1BLENBQUFBLENBQUcsSUFBQSxDQUFLLE1BQUEsRUFDdEJDLENBQUFBLENBQUcsSUFBQSxDQUFLLEtBQUtELENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBRXpCLEtBQU9DLENBQUFBLENBQUcsSUFBQSxDQUFLLE9BQVMsQ0FBQSxHQUFNLENBQUEsRUFDNUJBLEVBQUcsSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFaEIsT0FBT3JCLEdBQXVCMUMsQ0FBQUEsQ0FBUytELENBQUFBLENBQUcsSUFBSSxDQUFDLENBQ2pELENBR08sU0FBU0ksRUFBQUEsQ0FBZ0JDLENBQUFBLENBQXFCLENBQ25ELElBQU1DLENBQUFBLENBQWlCekIsR0FBYyxFQUFBLENBQ3JDLE9BQU9lLEdBQWFTLENBQUFBLENBQUtDLENBQUFBLENBQWdCLENBQUMsQ0FDNUMsQ0FHTyxTQUFTQyxFQUFBQSxDQUFnQkMsQ0FBQUEsQ0FBcUIsQ0FDbkQsT0FBT1AsRUFBQUEsQ0FBYU8sQ0FBQUEsQ0FBSyxFQUFBLENBQTJCLENBQUEsQ0FBRyxDQUFDLENBQzFELENBSUEsU0FBU0MsR0FBT1YsQ0FBQUEsQ0FBdUIsQ0FDckMsSUFBTVcsQ0FBQUEsQ0FBS1gsQ0FBQUEsQ0FBRyxRQUFPLENBQ3JCLE9BQU9XLEVBQUssQ0FBQSxDQUFLQSxDQUFBQSxDQUFLLEdBQU0sQ0FBQSxDQUFJLEVBQUVBLEdBQU0sQ0FBQSxDQUMxQyxDQUdBLFNBQVNDLEVBQUFBLENBQXVCWixDQUFBQSxDQUFlYSxDQUFBQSxDQUFnQyxDQUU3RSxHQURrQmIsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNaLENBQ2IsSUFBTWMsQ0FBQUEsQ0FBaUJkLEVBQUcsTUFBQSxFQUFPLENBQ2pDLEdBQUljLENBQUFBLEdBQW1CLENBQUEsQ0FDckIsTUFBTSxJQUFJLEtBQUEsQ0FBTSw0Q0FBNENBLENBQWMsQ0FBQSxDQUFFLENBQUEsQ0FFOUVkLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxNQUFBLEdBQ0gsSUFBQSxJQUFTM0IsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxFQUFLd0MsQ0FBQUEsQ0FBa0J4QyxJQUN4QjJCLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxFQUVwQkEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsRUFHZixNQUFPLENBQ0wsSUFBTWUsQ0FBQUEsQ0FBU2YsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FDbkJnQixFQUFTaEIsQ0FBQUEsQ0FBRyxNQUFBLEdBQ2xCLElBQUEsSUFBUyxDQUFBLENBQUksRUFBRyxDQUFBLENBQUllLENBQUFBLENBQVEsSUFDMUJmLENBQUFBLENBQUcsTUFBQSxHQUNIQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFWCxJQUFBLElBQVMsRUFBSSxDQUFBLENBQUcsQ0FBQSxDQUFJZ0IsRUFBUSxDQUFBLEVBQUEsQ0FDMUJoQixDQUFBQSxDQUFHLFFBQU8sQ0FDVkEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsRUFFYixDQUNGLENBR0EsU0FBU2lCLEdBQXVCakIsQ0FBQUEsQ0FBZWtCLENBQUFBLENBQWlCQyxFQUE4QixDQUU1RixHQURBbkIsRUFBRyxJQUFBLENBQUssRUFBRSxFQUNOQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsR0FBTSxDQUFBLENBQ2pCLE1BQU0sSUFBSSxLQUFBLENBQU0seURBQXlELEVBRTNFLElBQU1vQixDQUFBQSxDQUFTRixHQUFXbEUsRUFBQUEsRUFBZ0JrRSxDQUFBQSxFQUFXakUsR0FDakRtRSxDQUFBQSxFQUNGcEIsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUVYQSxFQUFHLE1BQUEsRUFBTyxDQUNWLElBQU1xQixDQUFBQSxDQUFZckIsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FDNUIsR0FBSSxDQUFDb0IsRUFBUSxDQVFYLEdBUEFwQixFQUFHLElBQUEsQ0FBS21CLENBQUFBLENBQUksYUFBYSxDQUFBLENBQ0VuQixDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBR3pCbUIsRUFBSSxzQkFBQSxDQUF5QixDQUFBLEVBQ3RDbkIsRUFBRyxJQUFBLENBQUssSUFBQSxDQUFLLEtBQUssSUFBQSxDQUFLLElBQUEsQ0FBS21CLENBQUFBLENBQUksc0JBQXNCLENBQUMsQ0FBQyxFQUZ4RFAsRUFBQUEsQ0FBdUJaLENBQUFBLENBQUltQixFQUFJLGdCQUFnQixDQUFBLENBSTdDQSxFQUFJLHNCQUFBLENBQ04sTUFBTSxJQUFJLEtBQUEsQ0FBTSxvREFBb0QsRUFFbEVBLENBQUFBLENBQUkscUJBQUEsRUFDTm5CLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFFYixDQUNBLE9BQUltQixDQUFBQSxDQUFJLFVBQUEsR0FDTm5CLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQUEsQ0FBQSxDQUVQcUIsSUFBY25DLEVBQUFBLEVBQWdCbUMsQ0FBQUEsR0FBY3BDLE1BQ3pCZSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsR0FFNUJBLENBQUFBLENBQUcsUUFBTyxDQUNOcUIsQ0FBQUEsR0FBY3BDLElBQ2hCZSxDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUFBLENBR1ZxQixDQUFBQSxHQUFjcEMsRUFBQUEsRUFDaEJlLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FFUG1CLEVBQUksZ0JBQUEsRUFDTm5CLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FFWEEsRUFBRyxNQUFBLEVBQU8sQ0FBQSxDQUVaVSxHQUFPVixDQUFFLENBQUEsQ0FDTG1CLEVBQUksZ0NBQUEsRUFDTm5CLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FFSkEsQ0FBQUEsQ0FBRyxHQUNaLENBT08sU0FBU3NCLEdBQXdCQyxDQUFBQSxDQUFlTCxDQUFBQSxDQUFpQkMsRUFBOEIsQ0FDcEcsSUFBTXpCLEVBQU9mLENBQUFBLENBQTBCNEMsQ0FBSyxFQUN0Q3ZCLENBQUFBLENBQUssSUFBSW5ELEVBQVU2QyxDQUFJLENBQUEsQ0FFdkI4QixFQUFRLElBQUkzRSxDQUFBQSxDQUFVNkMsQ0FBSSxDQUFBLENBQzFCK0IsQ0FBQUEsQ0FBSVIsRUFBQUEsQ0FBdUJPLENBQUFBLENBQU9OLENBQUFBLENBQVNDLENBQUcsRUFDOUNPLENBQUFBLENBQWVELENBQUFBLENBQUksSUFBTSxDQUFBLENBQUksQ0FBQSxDQUFJLEVBQUtBLENBQUFBLENBQUksQ0FBQSxDQUMxQ0UsR0FBdUJGLENBQUFBLENBQUlDLENBQUFBLEVBQWdCLEVBRTNDekIsQ0FBQUEsQ0FBSyxJQUFJMUQsRUFDZixJQUFBLElBQVM1RixDQUFBQSxDQUFJLEVBQUdBLENBQUFBLENBQUksRUFBQSxDQUFJQSxJQUN0QnNKLENBQUFBLENBQUcsSUFBQSxDQUFLLEtBQUtELENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBV3pCLElBVEFDLENBQUFBLENBQUcsSUFBQSxDQUFLLEtBQUtELENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBQ1JrQixHQUFXbEUsRUFBQUEsRUFBZ0JrRSxDQUFBQSxFQUFXakUsSUFFbkRnRCxDQUFBQSxDQUFHLElBQUEsQ0FBSyxJQUFBLENBQUtELENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBR3pCQSxDQUFBQSxDQUFHLFFBQU8sQ0FDVkMsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUVBRCxFQUFHLEdBQUEsQ0FBTXlCLENBQUFBLEVBQ2R4QixFQUFHLElBQUEsQ0FBSyxJQUFBLENBQUtELEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBSXpCLElBREFDLENBQUFBLENBQUcsSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLE9BQVMsQ0FBQSxHQUFNLENBQUEsRUFDNUJBLEVBQUcsSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FHaEIsT0FBT3JCLEdBQXVCLE1BQUEsQ0FBTyxNQUFBLENBQU8sQ0FBQzFDLENBQUFBLENBQVMrRCxDQUFBQSxDQUFHLElBQUksQ0FBQSxDQUFHUCxDQUFBQSxDQUFLLFFBQUEsQ0FBU2lDLENBQW1CLENBQUMsQ0FBQyxDQUFDLENBQ3RHLENDL05BLFNBQVNDLEVBQUFBLENBQVdDLENBQUFBLENBQXdDLENBQzFELElBQU03QixDQUFBQSxDQUFLLElBQUluRCxDQUFBQSxDQUFVOEIsQ0FBQUEsQ0FBMEJrRCxDQUFPLENBQUMsQ0FBQSxDQUkzRCxHQUhBN0IsQ0FBQUEsQ0FBRyxJQUFBLENBQUssRUFBRSxDQUFBLENBQ1ZBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ0xBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFBSSxDQUFBLENBQ2YsT0FFRixJQUFNOEIsQ0FBQUEsQ0FBcUI5QixDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ3BDQSxFQUFHLElBQUEsQ0FBSyxFQUFNLEVBRWQsSUFBTStCLENBQUFBLENBQVcvQixDQUFBQSxDQUFHLEdBQUEsQ0FDcEIsT0FBQUEsQ0FBQUEsQ0FBRyxLQUFLLEVBQUUsQ0FBQSxDQUNOOEIsRUFBcUIsQ0FBQSxFQUN2QjlCLENBQUFBLENBQUcsS0FBSzhCLENBQUFBLENBQXFCLENBQUEsQ0FBQSxDQUFLLEVBQUlBLENBQUFBLEVBQXNCLENBQUMsRUFFeEQsQ0FBRSxRQUFBLENBQUFDLEVBQVUsTUFBQSxDQUFRL0IsQ0FBQUEsQ0FBRyxJQUFLLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBRyxJQUFBLENBQU0sa0JBQUEsQ0FBQThCLENBQW1CLENBQzFFLENBR0EsU0FBU0UsRUFBQUEsQ0FBYS9CLEVBQWVnQyxDQUFBQSxDQUFnQixDQUNuRGhDLEVBQUcsQ0FBQSxDQUFFLEtBQUEsQ0FBUSxFQUFFLENBQUEsQ0FDZkEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFZ0MsRUFBSSxrQkFBQSxDQUFvQixDQUFDLEVBRTlCaEMsQ0FBQUEsQ0FBRyxJQUFBLENBQUtnQyxFQUFJLGtCQUFBLEdBQXVCLENBQUMsRUFDcENoQyxDQUFBQSxDQUFHLENBQUEsQ0FBRSxNQUFRLEVBQUUsQ0FBQSxDQUNmQSxFQUFHLElBQUEsQ0FBS2dDLENBQUFBLENBQUksUUFBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLEVBQUksTUFBQSxDQUFTQSxDQUFBQSxDQUFJLFFBQVEsQ0FBQSxDQUU1RGhDLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVCxRQUFTdEosQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLEdBQUtzTCxDQUFBQSxDQUFJLGtCQUFBLENBQW9CdEwsSUFDM0NzSixDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FHVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBQ1BBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsS0FBQSxDQUFNLENBQUMsRUFDWixDQUdBLFNBQVNpQyxHQUFrQmpDLENBQUFBLENBQWVnQyxDQUFBQSxDQUFnQjVMLEVBQWVDLENBQUFBLENBQWdCLENBR3ZGLEdBREEySixDQUFBQSxDQUFHLElBQUEsQ0FBS2dDLENBQUFBLENBQUksT0FBQSxDQUFTQSxDQUFBQSxDQUFJLE1BQUEsQ0FBUyxFQUFHLENBQUMsQ0FBQSxDQUNsQ0EsRUFBSSxrQkFBQSxDQUFxQixDQUFBLENBQUcsQ0FDOUIsSUFBQSxJQUFTdEwsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxDQUFJc0wsQ0FBQUEsQ0FBSSxtQkFBb0J0TCxDQUFBQSxFQUFBQSxDQUMxQ3NKLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUVYLElBQUEsSUFBU3RKLENBQUFBLENBQUlzTCxFQUFJLGtCQUFBLENBQW9CdEwsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxFQUFBQSxDQUMxQ3NKLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUViLENBRUFBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVCxRQUFTdEosQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLEVBQUksRUFBQSxDQUFJQSxDQUFBQSxFQUFBQSxDQUN0QnNKLEVBQUcsSUFBQSxDQUFLdEosQ0FBQUEsR0FBTSxDQUFBLEVBQUtBLENBQUFBLEdBQU0sQ0FBQyxDQUFBLENBRTVCc0osRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUVUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBR1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLZ0MsQ0FBQUEsQ0FBSSxRQUFTQSxDQUFBQSxDQUFJLFFBQUEsQ0FBVUEsRUFBSSxNQUFBLENBQVNBLENBQUFBLENBQUksUUFBUSxDQUFBLENBRTVEaEMsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUVUQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUU1SixDQUFBQSxDQUFPLEVBQUUsQ0FBQSxDQUNkNEosQ0FBQUEsQ0FBRyxFQUFFM0osQ0FBQUEsQ0FBUSxFQUFFLEVBQ2YySixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLEVBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FFUEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNYLENBT08sU0FBU2tDLEdBQWNOLENBQUFBLENBQWlCeEwsQ0FBQUEsQ0FBZUMs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QUUvQyxJQUFNdVEsQ0FBQUEsQ0FBU3JiLENBQUFBLENBQVEsY0FBZ0JzakIsRUFBQUEsQ0FBUTdHLEVBQUFBLENBQy9Dd0gsR0FBSyxNQUFBLENBQU8sY0FBQSxHQUNaLElBQU1NLENBQUFBLENBQVMsTUFBTWxKLENBQUFBLENBQU8sQ0FDMUIsT0FBQWpiLENBQUFBLENBQ0EsR0FBR0osRUFDSCxNQUFBLENBQVFpa0IsRUFBQUEsQ0FBSyxNQUFBLENBQ2IsVUFBQSxDQUFhcmpCLENBQUFBLEVBQU15akIsQ0FBQUEsQ0FBSSxjQUFjempCLENBQUMsQ0FBQSxDQUN0QyxVQUFXLENBQUNtWCxDQUFBQSxDQUFHZixJQUFNcU4sQ0FBQUEsQ0FBSSxZQUFBLENBQWF0TSxFQUFHZixDQUFDLENBQzVDLENBQUMsQ0FBQSxDQUNELE1BQU1xTixFQUFJLFNBQUEsQ0FBVUUsQ0FBTSxFQUM1QixDQUFBLE1BQVNqa0IsQ0FBQUEsQ0FBRyxDQUNWLElBQU12RCxDQUFBQSxDQUFRdUQsQ0FBQUEsQ0FDUjBXLEVBQUlqYSxDQUFBQSxDQUFNLEtBQUEsRUFBU0EsRUFBTSxPQUFBLEVBQVcsTUFBQSxDQUFPdUQsR0FBSyxlQUFlLENBQUEsQ0FDckUsTUFBTStqQixDQUFBQSxDQUFJLFVBQUEsQ0FBV3JOLENBQUMsRUFDeEIsQ0FBQSxPQUFFLENBQ0FrTixFQUFBQSxDQUFVLElBQUEsQ0FDVjNsQixhQUFJLElBQUEsR0FDTixDQUNGLENBQ0YsQ0FBQyxDQUFBIiwiZmlsZSI6ImFwcC5janMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTaGltIGdsb2JhbHMgaW4gY2pzIGJ1bmRsZVxuLy8gVGhlcmUncyBhIHdlaXJkIGJ1ZyB0aGF0IGVzYnVpbGQgd2lsbCBhbHdheXMgaW5qZWN0IGltcG9ydE1ldGFVcmxcbi8vIGlmIHdlIGV4cG9ydCBpdCBhcyBgY29uc3QgaW1wb3J0TWV0YVVybCA9IC4uLiBfX2ZpbGVuYW1lIC4uLmBcbi8vIEJ1dCB1c2luZyBhIGZ1bmN0aW9uIHdpbGwgbm90IGNhdXNlIHRoaXMgaXNzdWVcblxuY29uc3QgZ2V0SW1wb3J0TWV0YVVybCA9ICgpID0+IFxuICB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgXG4gICAgPyBuZXcgVVJMKGBmaWxlOiR7X19maWxlbmFtZX1gKS5ocmVmIFxuICAgIDogKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdTQ1JJUFQnKSBcbiAgICAgID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgXG4gICAgICA6IG5ldyBVUkwoXCJtYWluLmpzXCIsIGRvY3VtZW50LmJhc2VVUkkpLmhyZWY7XG5cbmV4cG9ydCBjb25zdCBpbXBvcnRNZXRhVXJsID0gLyogQF9fUFVSRV9fICovIGdldEltcG9ydE1ldGFVcmwoKVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih4OiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHgpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7eH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHgpO1xufVxuXG4vLyBDb21tYS1zZXBhcmF0ZWQgc3RyaW5nIOKGkiBhcnJheSB2aWEgYSBwZXItaXRlbSBwYXJzZXI7IGVtcHR5L2JsYW5rIOKGkiBbXS5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFycmF5PFQ+KGl0ZW06ICh4OiB1bmtub3duKSA9PiBUKTogKHg6IHVua25vd24pID0+IFRbXSB7XG4gIHJldHVybiAoeCkgPT4ge1xuICAgIGlmICh0eXBlb2YgeCAhPT0gXCJzdHJpbmdcIiB8fCB4LnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4geC5zcGxpdChcIixcIikubWFwKChzKSA9PiBpdGVtKHMudHJpbSgpKSk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cEF1ZGlvUHJlbG9hZCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcImF1ZGlvX3ByZWxvYWQuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cFNob290UHJlbG9hZCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcInNob290X3ByZWxvYWQuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cFJlbmRlclByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJyZW5kZXJfcHJlbG9hZC5janNcIik7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6ICguLi5tZXNzYWdlczogdW5rbm93bltdKSA9PiB1bmtub3duLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSB7XG4gICAgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIH0gZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIHtcbiAgICBsb2dnZXIud2Fybihtc2cpO1xuICB9XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzIxLlxuXG5pbXBvcnQgeyBta2RpclN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGFwcCwgY3Jhc2hSZXBvcnRlciB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltDcmFzaF1cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCkge1xuICAvLyBhcHBEYXRhIChub3QgdGhlIHBlci1ydW4gdXNlci1kYXRhLWRpcikgc28gZXZlcnkgcHVwIGFwcCdzIGR1bXBzIGFjY3VtdWxhdGUgaW4gb25lIHNoYXJlZCwgcGVyc2lzdGVudCBkaXIuXG4gIGNvbnN0IGR1bXBEaXIgPSBqb2luKGFwcC5nZXRQYXRoKFwiYXBwRGF0YVwiKSwgXCJwdXAtcmVjb3JkZXJcIiwgXCJjcmFzaGVzXCIpO1xuICBta2RpclN5bmMoZHVtcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGFwcC5zZXRQYXRoKFwiY3Jhc2hEdW1wc1wiLCBkdW1wRGlyKTtcbiAgY3Jhc2hSZXBvcnRlci5zdGFydCh7XG4gICAgcHJvZHVjdE5hbWU6IFwicHVwLXJlY29yZGVyXCIsXG4gICAgdXBsb2FkVG9TZXJ2ZXI6IGZhbHNlLFxuICAgIGNvbXByZXNzOiBmYWxzZSxcbiAgICBpZ25vcmVTeXN0ZW1DcmFzaEhhbmRsZXI6IHRydWUsXG4gIH0pO1xuICBsb2dnZXIuZGVidWcoVEFHLCBcInNldCBkdW1wIHRvXCIsIGR1bXBEaXIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNC5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZXJyPEEgZXh0ZW5kcyB1bmtub3duW10sIFIsIEQ+KGZuOiAoLi4uYXJnczogQSkgPT4gUiwgZGVmYXVsdFZhbHVlOiBEKTogKC4uLmFyZ3M6IEEpID0+IFIgfCBEIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldCA9IGZuKC4uLmFyZ3MpO1xuICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJldC5jYXRjaCgoKSA9PiBkZWZhdWx0VmFsdWUpIGFzIFIgfCBEO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zLCBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB0cmVlS2lsbCBmcm9tIFwidHJlZS1raWxsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xuICBnZXQga2lsbGVkKCk6IGJvb2xlYW47XG4gIGtpbGwoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9jZXNzSGFuZGxlIHtcbiAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoXCIgXCIpLmZpbHRlcigocykgPT4gcy5sZW5ndGgpO1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBwYXJ0cztcbiAgaWYgKCFjb21tYW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZW1wdHkgY29tbWFuZFwiKTtcbiAgfVxuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbiAgbGV0IGtpbGxlZCA9IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIHByb2Nlc3M6IHByb2MsXG4gICAgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSxcbiAgICBnZXQga2lsbGVkKCkge1xuICAgICAgcmV0dXJuIGtpbGxlZDtcbiAgICB9LFxuICAgIGtpbGwoKSB7XG4gICAgICBpZiAoa2lsbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGtpbGxlZCA9IHRydWU7XG4gICAgICBjb25zdCBwaWQgPSBwcm9jLnBpZDtcbiAgICAgIGlmIChwaWQpIHtcbiAgICAgICAgdHJlZUtpbGwocGlkLCBcIlNJR0tJTExcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jLmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJTkRPV19USU1FT1VUID0gMTA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRVMgPSBbXCJvdXQvaHRtbC5tcDRcIiwgXCJvdXQvaHRtbC53ZWJtXCJdO1xuXG5leHBvcnQgY29uc3QgcmVuZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogei5udW1iZXIoKS5kZXNjcmliZShcIkR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBdWRpbzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dEZpbGVzOiB6LmFycmF5KHouc3RyaW5nKCkpLmRlc2NyaWJlKFwiT3V0cHV0IHBhdGhzOyBleHRlbnNpb24gKC5tcDQvLndlYm0pIHNlbGVjdHMgZW5jb2RlclwiKSxcbiAgdXNlSW5uZXJQcm94eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbiAgZGV0ZXJtaW5pc3RpYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZW5kZXIgYnkgZnJhbWUgcmF0aGVyIHRoYW4gcmVjb3JkaW5nXCIpLFxuICBkaXNhYmxlR3B1OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgR1BVIHJlbmRlcmluZywgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBidXQgaW5jcmVhc2Ugc3RhYmlsaXR5XCIpLFxuICBkaXNhYmxlSHdDb2RlYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIGhhcmR3YXJlIHZpZGVvIGVuY29kZXIgKE5WRU5DL1ZpZGVvVG9vbGJveCksIHVzZSBzb2Z0d2FyZSB4MjY1XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbiAgd2luZG93VGltZW91dDogei5udW1iZXIoKS5kZXNjcmliZShcIldpbmRvdyBsb2FkIHRpbWVvdXQgaW4gc2Vjb25kc1wiKSxcbiAgc2NyZWVuc2hvdHM6IHouYXJyYXkoei5udW1iZXIoKSkuZGVzY3JpYmUoXCJTZWNvbmQgbWFya3MgdG8gZHVtcCBmcmFtZSBiaXRtYXBzIGFzIFBOR1wiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgcmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgQ29uc29sZUNhbGxiYWNrID0gKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlbmRlck9wdGlvbnMgZXh0ZW5kcyBSZW5kZXJPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M6IFByb2dyZXNzQ2FsbGJhY2s7XG4gIG9uQ29uc29sZTogQ29uc29sZUNhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlbmRlck9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBibGFuazogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIHNjcmVlbnNob3RzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGVzOiBERUZBVUxUX09VVF9GSUxFUyxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gIGRldGVybWluaXN0aWM6IGZhbHNlLFxuICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICB3aW5kb3dUb2xlcmFudDogZmFsc2UsXG4gIHdpbmRvd1RpbWVvdXQ6IERFRkFVTFRfV0lORE9XX1RJTUVPVVQsXG4gIHNjcmVlbnNob3RzOiBbXSxcbn07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyByZWFscGF0aFN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHByb2dyYW0gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vZXJyIH0gZnJvbSBcIi4vYmFzZS9ub2VyclwiO1xuaW1wb3J0IHsgcGFyc2VBcnJheSwgcGFyc2VOdW1iZXIsIHBhcnNlU3RyaW5nIH0gZnJvbSBcIi4vYmFzZS9wYXJzZXJcIjtcbmltcG9ydCB7IHBhcmdzIH0gZnJvbSBcIi4vYmFzZS9wcm9jZXNzXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucywgdHlwZSBSZW5kZXJPcHRpb25zLCByZW5kZXJTY2hlbWEgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuLy8gU2NoZW1lZCBVUklzIHBhc3MgdGhyb3VnaDsgYmFyZSBwYXRocyBnZXQgY2Fub25pY2FsaXplZCBhbmQgd3JhcHBlZCBhcyBmaWxlOi8vLlxuZnVuY3Rpb24gbm9ybWFsaXplU291cmNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChzLmluY2x1ZGVzKFwiOi8vXCIpIHx8IHMuc3RhcnRzV2l0aChcImRhdGE6XCIpKSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbiAgbGV0IGFiczogc3RyaW5nO1xuICB0cnkge1xuICAgIGFicyA9IHJlYWxwYXRoU3luYyhzKTtcbiAgfSBjYXRjaCB7XG4gICAgYWJzID0gcmVzb2x2ZShzKTtcbiAgfVxuICByZXR1cm4gYGZpbGU6Ly8ke2Fic31gO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENMSU9wdGlvbnMge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJ1bjogKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBSZW5kZXJPcHRpb25zKSA9PiBQcm9taXNlPHVua25vd24+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFrZUNMSShvcHRpb25zOiBDTElPcHRpb25zKSB7XG4gIGNvbnN0IHNoYXBlID0gcmVuZGVyU2NoZW1hLnNoYXBlO1xuICBjb25zdCBkID0gZGVmYXVsdFJlbmRlck9wdGlvbnM7XG4gIHByb2dyYW1cbiAgICAubmFtZShvcHRpb25zLm5hbWUpXG4gICAgLmFyZ3VtZW50KFwiPHNvdXJjZT5cIiwgXCJmaWxlOi8vLCBodHRwKHMpOi8vLCBkYXRhOiBVUkksIG9yIGZpbGVzeXN0ZW0gcGF0aFwiKVxuICAgIC5vcHRpb24oXCItVywgLS13aWR0aCA8bnVtYmVyPlwiLCBzaGFwZS53aWR0aC5kZXNjcmlwdGlvbiwgYCR7ZC53aWR0aH1gKVxuICAgIC5vcHRpb24oXCItSCwgLS1oZWlnaHQgPG51bWJlcj5cIiwgc2hhcGUuaGVpZ2h0LmRlc2NyaXB0aW9uLCBgJHtkLmhlaWdodH1gKVxuICAgIC5vcHRpb24oXCItUywgLS1zY3JlZW5zaG90cyA8c2Vjb25kcz5cIiwgc2hhcGUuc2NyZWVuc2hvdHMuZGVzY3JpcHRpb24sIFwiXCIpXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBzaGFwZS5mcHMuZGVzY3JpcHRpb24sIGAke2QuZnBzfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIHNoYXBlLmR1cmF0aW9uLmRlc2NyaXB0aW9uLCBgJHtkLmR1cmF0aW9ufWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1maWxlIDxwYXRocz5cIiwgc2hhcGUub3V0RmlsZXMuZGVzY3JpcHRpb24sIGQub3V0RmlsZXMuam9pbihcIixcIikpXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYXVkaW9cIiwgc2hhcGUud2l0aEF1ZGlvLmRlc2NyaXB0aW9uLCBkLndpdGhBdWRpbylcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWdwdVwiLCBzaGFwZS5kaXNhYmxlR3B1LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVHcHUpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ody1jb2RlY1wiLCBzaGFwZS5kaXNhYmxlSHdDb2RlYy5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlSHdDb2RlYylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRpbWVvdXQgPG51bWJlcj5cIiwgc2hhcGUud2luZG93VGltZW91dC5kZXNjcmlwdGlvbiwgYCR7ZC53aW5kb3dUaW1lb3V0fWApXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKG5vcm1hbGl6ZVNvdXJjZShzb3VyY2UpLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlczogcGFyc2VBcnJheShwYXJzZVN0cmluZykob3B0cy5vdXRGaWxlKSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgICBkaXNhYmxlR3B1OiBvcHRzLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgICAgICAgIGRpc2FibGVId0NvZGVjOiBvcHRzLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgICAgd2luZG93VG9sZXJhbnQ6IG9wdHMud2luZG93VG9sZXJhbnQgPz8gZC53aW5kb3dUb2xlcmFudCxcbiAgICAgICAgICB3aW5kb3dUaW1lb3V0OiBub2VycihwYXJzZU51bWJlciwgZC53aW5kb3dUaW1lb3V0KShvcHRzLndpbmRvd1RpbWVvdXQpLFxuICAgICAgICAgIHNjcmVlbnNob3RzOiBwYXJzZUFycmF5KHBhcnNlTnVtYmVyKShvcHRzLnNjcmVlbnNob3RzKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwibm9kZTpldmVudHNcIjtcblxuZXhwb3J0IGVudW0gSXBjTXNnVHlwZSB7XG4gIC8vIGNoaWxkIOKGkiBwYXJlbnRcbiAgQ29uc29sZSA9IFwiY29uc29sZVwiLFxuICBQcm9ncmVzcyA9IFwicHJvZ3Jlc3NcIixcbiAgRG9uZSA9IFwiZG9uZVwiLFxuICBFcnJvciA9IFwiZXJyb3JcIixcbiAgLy8gcGFyZW50IOKGkiBjaGlsZFxuICBDYW5jZWwgPSBcImNhbmNlbFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnNvbGVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNvbnNvbGU7XG4gIGxldmVsOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNhbmNlbDtcbiAgcmVhc29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY0RvbmVQYXlsb2FkIHtcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIGJsYW5rOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgc2NyZWVuc2hvdHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Qcm9ncmVzcztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb25lTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Eb25lO1xuICBwYXlsb2FkOiBJcGNEb25lUGF5bG9hZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRXJyb3I7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElwY01zZyA9IENvbnNvbGVNc2cgfCBQcm9ncmVzc01zZyB8IERvbmVNc2cgfCBFcnJvck1zZyB8IENhbmNlbE1zZztcblxuZXhwb3J0IGludGVyZmFjZSBJcGNFdmVudHMge1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBjb25zb2xlOiBbbGV2ZWw6IHN0cmluZywgbXNnOiBzdHJpbmddO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbY29kZTogbnVtYmVyIHwgbnVsbF07XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICB3cml0ZUNvbnNvbGUobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlLCBsZXZlbCwgbWVzc2FnZSB9KTtcbiAgfVxuXG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3MsIHZhbHVlIH0pO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRXJyb3IsIGVycm9yIH0pO1xuICB9XG5cbiAgd3JpdGVEb25lKHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRG9uZSwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZChtc2c6IElwY01zZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCFwcm9jZXNzLnNlbmQpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3Muc2VuZChtc2csICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxJcGNFdmVudHM+IHtcbiAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcykge1xuICAgIHN1cGVyKCk7XG4gICAgY2hpbGQub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Db25zb2xlOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY29uc29sZVwiLCBtc2cubGV2ZWwsIG1zZy5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUHJvZ3Jlc3M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBtc2cudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Eb25lOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBtc2cucGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVycm9yOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKG1zZy5lcnJvcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImV4aXRcIiwgKGMpID0+IHRoaXMuZW1pdChcImNsb3NlXCIsIGMpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGltZW91dDxUPihwOiBQcm9taXNlPFQ+LCBtczogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYCR7bGFiZWx9IHRpbWVkIG91dCBhZnRlciAke21zfW1zYCkpLCBtcyk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpKTtcbiAgfSk7XG59XG5cbi8vIFJlamVjdCBhcyBzb29uIGFzIGBzaWduYWxgIGFib3J0cywgZWxzZSBzZXR0bGUgd2l0aCBgcGA7IG5vLW9wIHBhc3N0aHJvdWdoIHdoZW4gbm8gc2lnbmFsLlxuZXhwb3J0IGZ1bmN0aW9uIGFib3J0YWJsZTxUPihwOiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICBpZiAoIXNpZ25hbCkge1xuICAgIHJldHVybiBwO1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCkpO1xuICB9KTtcbn1cblxuLy8gQ2FsbGJhY2sgbWF5IHJldHVybiB0aGUgbmV4dCBpbnRlcnZhbCAobXMpIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGZvciB0aGUgZm9sbG93aW5nIHRpY2suXG5leHBvcnQgZnVuY3Rpb24gcGVyaW9kaWNhbChjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8bnVtYmVyIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGNvbnN0IG5leHQgPSBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBuZXh0ID8/IG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmNvbnN0IENEUF9USU1FT1VUX01TID0gNV8wMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZW5kKGNkcDogRGVidWdnZXIsIG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBvYmplY3QpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KGNkcC5zZW5kQ29tbWFuZChtZXRob2QsIHBhcmFtcyksIENEUF9USU1FT1VUX01TLCBgY2RwLiR7bWV0aG9kfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbEluKGNkcDogRGVidWdnZXIsIGV4cHJlc3Npb246IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoc2VuZChjZHAsIFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7IGV4cHJlc3Npb24gfSksIENEUF9USU1FT1VUX01TLCBcImV2YWxJblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyLCBidWRnZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgYWR2YW5jZVZpcnR1YWxUaW1lIHRpbWVkIG91dCBhZnRlciAke0NEUF9USU1FT1VUX01TfW1zYCkpO1xuICAgIH0sIENEUF9USU1FT1VUX01TKTtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoXzogRWxlY3Ryb24uRXZlbnQsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobWV0aG9kID09PSBcIkVtdWxhdGlvbi52aXJ0dWFsVGltZUJ1ZGdldEV4cGlyZWRcIikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjZHAub24oXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgIC8vIE5vIHN0YXJ2YXRpb24gY2FwICh3b3VsZCBza2lwIHBlbmRpbmcgd29yayBub24tZGV0ZXJtaW5pc3RpY2FsbHkpOyBjYXB0dXJlIHN0YXJ0cyBwb3N0IGRpZC1zdG9wLWxvYWRpbmcsIGFuZCBDRFBfVElNRU9VVF9NUyB0dXJucyBhIHJlYWwgc3RhbGwgaW50byBhIGZhaWxlZCByZW5kZXIuXG4gICAgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHtcbiAgICAgIHBvbGljeTogXCJhZHZhbmNlXCIsXG4gICAgICBidWRnZXQsXG4gICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhdXNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwgeyBwb2xpY3k6IFwicGF1c2VcIiB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc2l6ZURyYXdhYmxlKGNkcDogRGVidWdnZXIsIHNpemU6IFNpemUpIHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldERldmljZU1ldHJpY3NPdmVycmlkZVwiLCB7XG4gICAgLi4uc2l6ZSxcbiAgICBkZXZpY2VTY2FsZUZhY3RvcjogMSxcbiAgICBtb2JpbGU6IGZhbHNlLFxuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUsIFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBldmFsSW4gfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCA9IDMyO1xuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX0hFSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgU1RFR09fVElDS19DSEFOTkVMID0gXCJzdGVnby10aWNrXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN0ZWdvSFRNTCh0YXJnZXRVUkw6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8c3R5bGU+XG4gICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogJHt3aWR0aH1weDsgaGVpZ2h0OiAke2hlaWdodCArIDF9cHg7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjdGFyZ2V0IHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAwOyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAke2hlaWdodH1weDsgXG4gICAgICBib3JkZXI6IG5vbmU7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNzdGVnbyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6ICR7aGVpZ2h0fXB4O1xuICAgICAgbGVmdDogMDtcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4O1xuICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8aWZyYW1lIGlkPVwidGFyZ2V0XCIgc3JjPVwiJHt0YXJnZXRVUkx9XCI+PC9pZnJhbWU+XG4gIDxjYW52YXMgaWQ9XCJzdGVnb1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIxXCI+PC9jYW52YXM+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgeyBpcGNSZW5kZXJlciB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCcke1NURUdPX1RJQ0tfQ0hBTk5FTH0nKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKDApO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfZHJhd19zdGVnb19fID0gKG1zKSA9PiB7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChtcyk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfc3RvcF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBpZiAocmFmSWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG4gICAgICAgICAgcmFmSWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCk7XG4gIDwvc2NyaXB0PlxuPC9ib2R5PlxuPC9odG1sPmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVTdGVnbyhiaXRtYXA6IEJ1ZmZlciwgc2l6ZTogU2l6ZSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgaWYgKHdpZHRoIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggfHwgaGVpZ2h0IDwgMikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBtYXJrZXJSb3cgPSBoZWlnaHQgLSAxO1xuXG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICBjb25zdCBwaXhlbElkeCA9IChtYXJrZXJSb3cgKiB3aWR0aCArIGkpICogNDtcbiAgICBjb25zdCByID0gYml0bWFwW3BpeGVsSWR4XSA/PyAwO1xuICAgIGNvbnN0IGJpdCA9IHIgPiAxMjcgPyAxIDogMDtcbiAgICB0aW1lc3RhbXAgPSAodGltZXN0YW1wIDw8IDEpIHwgYml0O1xuICB9XG5cbiAgdGltZXN0YW1wID0gdGltZXN0YW1wID4+PiAwO1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRpbWVzdGFtcCkgfHwgdGltZXN0YW1wIDwgMCB8fCB0aW1lc3RhbXAgPiAxZTcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0U3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0YXJ0X3N0ZWdvX18oKWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGV2YWxJbihjZHAsIGBfX3B1cF9zdG9wX3N0ZWdvX18oKWApO1xufVxuXG4vLyBQYWludHMgdGhlIHN0ZWdvIHJvdyBmb3IgYGV4cGVjdGVkYCBtcyBzeW5jaHJvbm91c2x5OyB0aGUgZGFtYWdlIHJpZGVzIG91dCBvbiB0aGUgbmV4dCBjb21wb3NpdGVkIGZyYW1lLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYXdTdGVnbyh3YzogV2ViQ29udGVudHMsIGV4cGVjdGVkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXZhbEluKHdjLmRlYnVnZ2VyLCBgX19wdXBfZHJhd19zdGVnb19fKCR7ZXhwZWN0ZWR9KWApO1xufVxuXG4vLyBSZXNvbHZlcyB3aGVuIHRoZSByZW5kZXJlciBjb21taXR0ZWQgdGhlIHN0ZWdvIHJvdzsgYXJtIEJFRk9SRSBkcmF3U3RlZ28gdG8gYXZvaWQgbWlzc2luZyB0aGUgYWNrLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRTdGVnb1RpY2sod2M6IFdlYkNvbnRlbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN3YXBwZWQgPSBuZXcgUHJvbWlzZSgocikgPT4gd2MuaXBjLm9uY2UoU1RFR09fVElDS19DSEFOTkVMLCByKSk7XG4gIGF3YWl0IHdpdGhUaW1lb3V0KHN3YXBwZWQsIDVfMDAwLCBcInN0ZWdvIHRpY2tcIik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBidWlsZFN0ZWdvSFRNTCB9IGZyb20gXCIuL3N0ZWdvXCI7XG5cbmNvbnN0IFBVUF9TQ0hFTUUgPSBcInB1cFwiO1xuY29uc3QgRlJBTUVfU0NIRU1FID0gXCJwdXAtZnJhbWVcIjtcblxuLy8gcmVnaXN0ZXJTY2hlbWVzQXNQcml2aWxlZ2VkIGhvbm9ycyBvbmx5IHRoZSBMQVNUIGNhbGwg4oCUIHJlZ2lzdGVyIGV2ZXJ5IGN1c3RvbSBzY2hlbWUgaW4gdGhpcyBvbmUgbGlzdCBiZWxvdy5cbmNvbnN0IFBSSVZJTEVHRURfUFJJVklMRUdFUyA9IHtcbiAgc3RhbmRhcmQ6IHRydWUsXG4gIHNlY3VyZTogdHJ1ZSxcbiAgYnlwYXNzQ1NQOiB0cnVlLFxuICBhbGxvd1NlcnZpY2VXb3JrZXJzOiB0cnVlLFxuICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gIGNvcnNFbmFibGVkOiB0cnVlLFxuICBzdHJlYW06IHRydWUsXG4gIGNvZGVDYWNoZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbi8vIE11c3QgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgYmVmb3JlIGFwcCBpcyByZWFkeS5cbnByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZChbXG4gIHsgc2NoZW1lOiBQVVBfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbiAgeyBzY2hlbWU6IEZSQU1FX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG5dKTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUHVwUHJvdG9jb2woKTogdm9pZCB7XG4gIHByb3RvY29sLmhhbmRsZShQVVBfU0NIRU1FLCAocmVxKSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBjb25zdCBzcmMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ3XCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJoXCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaHRtbCA9IGJ1aWxkU3RlZ29IVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoaHRtbCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVnb1VSTChzcmM6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7UFVQX1NDSEVNRX06Ly9zdGVnb2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcInNyY1wiLCBzcmMucmVwbGFjZShcImh0dHA6Ly9cIiwgXCJodHRwczovL1wiKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwid1wiLCBTdHJpbmcoc2l6ZS53aWR0aCkpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImhcIiwgU3RyaW5nKHNpemUuaGVpZ2h0KSk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmludGVyZmFjZSBRdWV1ZUVudHJ5IHtcbiAgcnVuOiBWb2lkRnVuY3Rpb247XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX3NpZ25hbHMgPSBuZXcgV2Vha1NldDxBYm9ydFNpZ25hbD4oKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86IFZvaWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgaWYgKHNpZ25hbCAmJiAhdGhpcy5fc2lnbmFscy5oYXMoc2lnbmFsKSkge1xuICAgICAgdGhpcy5fc2lnbmFscy5hZGQoc2lnbmFsKTtcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gdGhpcy5mbHVzaChzaWduYWwpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgICAgICBydW46ICgpID0+IHtcbiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fYWN0aXZlKys7XG4gICAgICAgICAgZm4oKVxuICAgICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlc29sdmUodik7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZWplY3QsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkcmFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+ICh0aGlzLl9yZXNvbHZlID0gcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaChzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3Qga2VlcDogUXVldWVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9xdWV1ZSkge1xuICAgICAgaWYgKGVudHJ5LnNpZ25hbCA9PT0gc2lnbmFsKSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtlZXAucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3F1ZXVlID0ga2VlcDtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8ucnVuKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQge1xuICB0eXBlIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGcmFtZSxcbiAgdHlwZSBIYXJkd2FyZUZyYW1lc0NvbnRleHQsXG4gIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICB0eXBlIEFWQ29sb3JSYW5nZSxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG4gIHR5cGUgRkZWaWRlb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbi8vIG5vZGUtYXYgNS4yLjMgY29uc3RhbnQgaXMgd3Jvbmc7IGZmbXBlZyByZWdpc3RlcnMgd2l0aCBkYXNoLlxuZXhwb3J0IGNvbnN0IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSA9IFwibGlidnB4LXZwOVwiIGFzIEZGVmlkZW9FbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ3R4T3B0aW9ucyB7XG4gIGNvZGVjOiBDb2RlYztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29sb3JSYW5nZT86IEFWQ29sb3JSYW5nZTtcbiAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGh3RnJhbWVzQ3R4PzogSGFyZHdhcmVGcmFtZXNDb250ZXh0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblZpZGVvQ3R4KG9wdHM6IFZpZGVvQ3R4T3B0aW9ucywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgY3R4LmFsbG9jQ29udGV4dDMob3B0cy5jb2RlYyk7XG4gIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBjdHggaWYgYW55IHNldHRlci9vcGVuMiB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gIHN0YWNrLnVzZShjdHgpO1xuICBjdHguY29kZWNJZCA9IG9wdHMuY29kZWMuaWQ7XG4gIGN0eC53aWR0aCA9IG9wdHMud2lkdGg7XG4gIGN0eC5oZWlnaHQgPSBvcHRzLmhlaWdodDtcbiAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMuZnBzKTtcbiAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChvcHRzLmZwcywgMSk7XG4gIGN0eC5nb3BTaXplID0gb3B0cy5mcHMgKiAyO1xuICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgaWYgKG9wdHMuY29kZWNUYWcpIHtcbiAgICBjdHguY29kZWNUYWcgPSBvcHRzLmNvZGVjVGFnO1xuICB9XG4gIGlmIChvcHRzLmNvbG9yUmFuZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGN0eC5jb2xvclJhbmdlID0gb3B0cy5jb2xvclJhbmdlO1xuICB9XG4gIGlmIChvcHRzLmh3RnJhbWVzQ3R4KSB7XG4gICAgY3R4Lmh3RnJhbWVzQ3R4ID0gb3B0cy5od0ZyYW1lc0N0eDtcbiAgfVxuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSB7XG4gICAgY3R4LnNldE9wdGlvbihrLCB2KTtcbiAgfVxuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHN0YWNrLm1vdmUoKTtcbiAgcmV0dXJuIGN0eDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VGcmFtZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcGl4Rm10OiBBVlBpeGVsRm9ybWF0KTogRnJhbWUge1xuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICBmcmFtZS5hbGxvYygpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgZnJhbWUgaWYgZ2V0QnVmZmVyIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgc3RhY2sudXNlKGZyYW1lKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQYWNrZXQoKTogUGFja2V0IHtcbiAgY29uc3QgcGt0ID0gbmV3IFBhY2tldCgpO1xuICBwa3QuYWxsb2MoKTtcbiAgcmV0dXJuIHBrdDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYWluUGFja2V0cyhjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCByID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwicmVjZWl2ZVBhY2tldFwiKTtcbiAgICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgIGlmIChwa3QuZHVyYXRpb24gPT09IDBuKSB7XG4gICAgICAgIHBrdC5kdXJhdGlvbiA9IDFuO1xuICAgICAgfVxuICAgICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBwa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZfREVDT0RFUl9QTkcsXG4gIEZGbXBlZ0Vycm9yLFxuICB0eXBlIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgU29mdHdhcmVTY2FsZUNvbnRleHQsXG4gIFNXU19CSUxJTkVBUixcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuZXhwb3J0IGNsYXNzIENvZGVjU3RhdGUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgc3JjOiBGcmFtZTtcbiAgcmVhZG9ubHkgZHN0OiBGcmFtZTtcbiAgcmVhZG9ubHkgcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N3cz86IFNvZnR3YXJlU2NhbGVDb250ZXh0O1xuICBwcml2YXRlIF9wbmc/OiBDb2RlYztcblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRGVjb2RlckJ5TmFtZShGRl9ERUNPREVSX1BORyk7XG4gICAgb2soY29kZWMsIFwicG5nIGRlY29kZXIgdW5hdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIG5ldyBDb2RlY1N0YXRlKHdpZHRoLCBoZWlnaHQsIGNvZGVjKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBuZzogQ29kZWMpIHtcbiAgICB0aGlzLl9wbmcgPSBwbmc7XG4gICAgdGhpcy5zcmMgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICB0aGlzLmRzdCA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQKTtcbiAgICB0aGlzLnBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmVzaCBQTkcgZGVjb2RlciBjb250ZXh0LlxuICAgKiBUaGUgRkZtcGVnIFBORyBkZWNvZGVyIGFjY3VtdWxhdGVzIEFQTkcgYmxlbmRpbmcgc3RhdGVcbiAgICogYWNyb3NzIGZyYW1lcywgc28gYSBzaGFyZWQgaW5zdGFuY2UgY29ycnVwdHMgb3V0cHV0IHdoZW4gZGVjb2Rpbmcgc3RhbmRhbG9uZSBQTkdzLlxuICAgKi9cbiAgYXN5bmMgcG5nKCk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIHRoZSBjdHggaWYgb3BlbjIgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIHN0YWNrLnVzZShwbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gcG5nO1xuICB9XG5cbiAgYXN5bmMgZGVjb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8RnJhbWU+IHtcbiAgICB1c2luZyBwbmcgPSBhd2FpdCB0aGlzLnBuZygpO1xuICAgIHRoaXMucGt0LmRhdGEgPSBwbmdEYXRhO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcuc2VuZFBhY2tldCh0aGlzLnBrdCksIFwicG5nRGVjb2Rlci5zZW5kUGFja2V0XCIpO1xuICAgIHRoaXMucGt0LnVucmVmKCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5yZWNlaXZlRnJhbWUodGhpcy5zcmMpLCBcInBuZ0RlY29kZXIucmVjZWl2ZUZyYW1lXCIpO1xuICAgIHJldHVybiB0aGlzLnNyYztcbiAgfVxuXG4gIGdldCBzd3MoKSB7XG4gICAgaWYgKCF0aGlzLl9zd3MpIHtcbiAgICAgIGNvbnN0IHN3cyA9IG5ldyBTb2Z0d2FyZVNjYWxlQ29udGV4dCgpO1xuICAgICAgY29uc3QgZm10ID0gdGhpcy5zcmMuZm9ybWF0IGFzIEFWUGl4ZWxGb3JtYXQ7XG4gICAgICBzd3MuZ2V0Q29udGV4dChcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgZm10LFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgICBTV1NfQklMSU5FQVIsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3dzID0gc3dzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3dzO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnNyY1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLmRzdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLnBrdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zd3M/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgdHlwZSBGaWx0ZXJDb250ZXh0LFxuICBGaWx0ZXJHcmFwaCxcbiAgRmlsdGVySW5PdXQsXG4gIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIH1cbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGZyZWVzIGN0eCBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgc3RhY2sudXNlKGN0eCk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIHtcbiAgICAgIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIH1cbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IEF1ZGlvRW5jb2RlcihjdHgsIHN0cmVhbSwgb3B0cy5vdXRTYW1wbGVGbXQpO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKGluU2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9pblJhdGUgPSBpblNhbXBsZVJhdGU7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBmcmVlcyB0aGUgZ3JhcGggaWYgZmlsdGVyIHNldHVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgc3RhY2sudXNlKGdyYXBoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgfVxuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIH1cbiAgICBjb25zdCBmbXROYW1lID0gU0FNUExFX0ZNVF9OQU1FW3RoaXMuX291dEZtdF0gPz8gXCJmbHRcIjtcbiAgICBjb25zdCBmaWx0ZXJEZXNjID0gYGFmb3JtYXQ9c2FtcGxlX2ZtdHM9JHtmbXROYW1lfTpzYW1wbGVfcmF0ZXM9JHt0aGlzLl9vdXRSYXRlfTpjaGFubmVsX2xheW91dHM9c3RlcmVvLGFzZXRuc2FtcGxlcz1uPSR7dGhpcy5fZnJhbWVTaXplfTpwPTFgO1xuICAgIGNvbnN0IG91dHB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwiaW5cIiwgZmlsdGVyQ3R4OiBidWZTcmMsIHBhZElkeDogMCB9XSk7XG4gICAgY29uc3QgaW5wdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcIm91dFwiLCBmaWx0ZXJDdHg6IGJ1ZlNpbmssIHBhZElkeDogMCB9XSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLnBhcnNlUHRyKGZpbHRlckRlc2MsIGlucHV0cywgb3V0cHV0cyksIFwiZ3JhcGgucGFyc2VQdHJcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLmNvbmZpZ1N5bmMoKSwgXCJncmFwaC5jb25maWdcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHNyY1tpXSEpKSB7XG4gICAgICAgIHNyY1tpXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5TYW1wbGVzID0gc3JjLmxlbmd0aCA+PiAxO1xuICAgIHVzaW5nIGZyYW1lID0gRnJhbWUuZnJvbUF1ZGlvQnVmZmVyKEJ1ZmZlci5mcm9tKHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCBzcmMuYnl0ZUxlbmd0aCksIHtcbiAgICAgIG5iU2FtcGxlczogblNhbXBsZXMsXG4gICAgICBmb3JtYXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgc2FtcGxlUmF0ZTogdGhpcy5faW5SYXRlLFxuICAgICAgY2hhbm5lbExheW91dDogQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICAgICAgcHRzOiB0aGlzLl9wdHMsXG4gICAgICB0aW1lQmFzZTogeyBudW06IDEsIGRlbjogdGhpcy5faW5SYXRlIH0sXG4gICAgfSk7XG4gICAgdGhpcy5fcHRzICs9IEJpZ0ludChuU2FtcGxlcyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShmcmFtZSksIFwiYnVmZmVyc3JjQWRkRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVmU3JjKSB7XG4gICAgICBhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUobnVsbCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmZyZWUoKTtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX2J1ZlNpbmshLmJ1ZmZlcnNpbmtHZXRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSk7XG4gICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5Db2RlYyhtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2tCaXRzKGJpdHM6IG51bWJlcltdKTogQnVmZmVyIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKGJpdHMubGVuZ3RoID4+IDMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgIGxldCBieXRlID0gMDtcbiAgICBmb3IgKGxldCBiID0gMDsgYiA8IDg7IGIrKykge1xuICAgICAgYnl0ZSA9IChieXRlIDw8IDEpIHwgYml0c1tpICogOCArIGJdITtcbiAgICB9XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfVxuICBmbGFnKHZhbDogYm9vbGVhbiB8IG51bWJlcikge1xuICAgIHRoaXMuYml0cy5wdXNoKHZhbCA/IDEgOiAwKTtcbiAgfVxuICB1ZSh2YWw6IG51bWJlcikge1xuICAgIGNvbnN0IHYgPSB2YWwgKyAxO1xuICAgIGNvbnN0IGxlbiA9IDMyIC0gTWF0aC5jbHozMih2KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgdGhpcy5iaXRzLnB1c2goMCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5iaXRzLnB1c2goKHYgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gICAgfVxuICB9XG4gIGNvcHkoc3JjOiBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgbGVuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaChzcmNbc3RhcnQgKyBpXSEpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQml0UmVhZGVyIHtcbiAgcHJpdmF0ZSBfYml0czogbnVtYmVyW107XG4gIHBvcyA9IDA7XG4gIGNvbnN0cnVjdG9yKGRhdGE6IEJ1ZmZlcikge1xuICAgIHRoaXMuX2JpdHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGIgPSA3OyBiID49IDA7IGItLSkge1xuICAgICAgICB0aGlzLl9iaXRzLnB1c2goKGRhdGFbaV0hID4+IGIpICYgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCBiaXRzKCkge1xuICAgIHJldHVybiB0aGlzLl9iaXRzO1xuICB9XG4gIHJlYWQobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHJlYWRVZSgpOiBudW1iZXIge1xuICAgIGxldCB6ZXJvcyA9IDA7XG4gICAgd2hpbGUgKHRoaXMuX2JpdHNbdGhpcy5wb3NdID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgICAgdGhpcy5wb3MrKztcbiAgICB9XG4gICAgdGhpcy5wb3MrKztcbiAgICBsZXQgdmFsID0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHplcm9zOyBpKyspIHtcbiAgICAgIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICB9XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG4vLyBIRVZDIE5BTCB1bml0IHR5cGVzIChULVJFQy1ILjI2NSBUYWJsZSA3LTEpXG5leHBvcnQgY29uc3QgTkFMX0JMQV9XX0xQID0gMTY7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9XX1JBREwgPSAxOTtcbmV4cG9ydCBjb25zdCBOQUxfSURSX05fTFAgPSAyMDtcbmV4cG9ydCBjb25zdCBOQUxfUlNWX0lSQVBfVkNMMjMgPSAyMztcbmV4cG9ydCBjb25zdCBOQUxfVlBTID0gMzI7XG5leHBvcnQgY29uc3QgTkFMX1NQUyA9IDMzO1xuZXhwb3J0IGNvbnN0IE5BTF9QUFMgPSAzNDtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1BSRUZJWCA9IDM5O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfU1VGRklYID0gNDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFsVW5pdCB7XG4gIHR5cGU6IG51bWJlcjtcbiAgbGF5ZXJJZDogbnVtYmVyO1xuICBkYXRhOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFsVHlwZShoZWFkZXIwOiBudW1iZXIsIGhlYWRlcjE6IG51bWJlcik6IHsgdHlwZTogbnVtYmVyOyBsYXllcklkOiBudW1iZXI7IHRlbXBvcmFsSWQ6IG51bWJlciB9IHtcbiAgY29uc3QgdHlwZSA9IChoZWFkZXIwID4+IDEpICYgMHgzZjtcbiAgY29uc3QgbGF5ZXJJZCA9ICgoaGVhZGVyMCAmIDEpIDw8IDUpIHwgKChoZWFkZXIxID4+IDMpICYgMHgxZik7XG4gIGNvbnN0IHRlbXBvcmFsSWQgPSBoZWFkZXIxICYgMHgwNztcbiAgcmV0dXJuIHsgdHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTmFsSGVhZGVyKHR5cGU6IG51bWJlciwgbGF5ZXJJZDogbnVtYmVyLCB0ZW1wb3JhbElkOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgYnl0ZTAgPSAoKHR5cGUgJiAweDNmKSA8PCAxKSB8ICgobGF5ZXJJZCA+PiA1KSAmIDEpO1xuICBjb25zdCBieXRlMSA9ICgobGF5ZXJJZCAmIDB4MWYpIDw8IDMpIHwgKHRlbXBvcmFsSWQgJiAweDA3KTtcbiAgcmV0dXJuIFtieXRlMCwgYnl0ZTFdO1xufVxuXG4vKiogU3BsaXQgQW5uZXggQiBiaXRzdHJlYW0gaW50byBOQUwgdW5pdHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROYWxVbml0cyhiaXRzdHJlYW06IEJ1ZmZlcik6IE5hbFVuaXRbXSB7XG4gIGNvbnN0IG5hbHM6IE5hbFVuaXRbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgbGV0IHNjTGVuID0gMDtcbiAgICBpZiAoaSArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtpXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDFdID09PSAwICYmIGJpdHN0cmVhbVtpICsgMl0gPT09IDEpIHtcbiAgICAgIHNjTGVuID0gMztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaSArIDQgPCBiaXRzdHJlYW0ubGVuZ3RoICYmXG4gICAgICBiaXRzdHJlYW1baV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMl0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgM10gPT09IDFcbiAgICApIHtcbiAgICAgIHNjTGVuID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmFsU3RhcnQgPSBpICsgc2NMZW47XG4gICAgaWYgKG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFID4gYml0c3RyZWFtLmxlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmV3cml0ZSBuYWxfdW5pdF90eXBlIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbFR5cGUobmFsOiBCdWZmZXIsIG5ld1R5cGU6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcihuZXdUeXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gQ29uZm9ybSBOVkVOQyBvdXRwdXQgdG8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2F2LWZvdW5kYXRpb24vSEVWQy1WaWRlby13aXRoLUFscGhhLUludGVyb3BlcmFiaWxpdHktUHJvZmlsZS5wZGZcblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGFkZEVtdWxhdGlvblByZXZlbnRpb24sXG4gIE5BTF9CTEFfV19MUCxcbiAgTkFMX1JTVl9JUkFQX1ZDTDIzLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbi8vIFBUTCBiaXQgb2Zmc2V0cyB3aXRoaW4gZW11bGF0aW9uLXByZXZlbnRpb24tc3RyaXBwZWQgTkFMIChOQUwgaGVhZGVyIGluY2x1ZGVkKS5cbmNvbnN0IFZQU19QVExfQklUID0gNDg7IC8vIDE2IChOQUwgaGRyKSArIDMyIChWUFMgcHJlZml4KVxuY29uc3QgU1BTX1BUTF9CSVQgPSAyNDsgLy8gMTYgKE5BTCBoZHIpICsgOCAoU1BTIHByZWZpeClcbmNvbnN0IFBUTF9USUVSX0JJVCA9IDI7XG5jb25zdCBQVExfQ09NUEFUMl9CSVQgPSAxMDsgLy8gcHJvZmlsZV9zcGFjZSgyKSArIHRpZXIoMSkgKyBpZGMoNSkgKyBjb21wYXRbMCwxXSgyKVxuY29uc3QgU0xJQ0VfVFlQRV9CID0gMDtcbmNvbnN0IFNMSUNFX1RZUEVfUCA9IDE7XG5cbmZ1bmN0aW9uIHNldEJpdChidWY6IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIHZhbHVlOiAwIHwgMSk6IHZvaWQge1xuICBjb25zdCBieXRlID0gYml0T2Zmc2V0ID4+IDM7XG4gIGNvbnN0IG1hc2sgPSAxIDw8ICg3IC0gKGJpdE9mZnNldCAmIDcpKTtcbiAgY29uc3QgY3VyID0gYnVmW2J5dGVdID8/IDA7XG4gIGJ1ZltieXRlXSA9IHZhbHVlID8gY3VyIHwgbWFzayA6IGN1ciAmIH5tYXNrO1xufVxuXG5mdW5jdGlvbiBwYXRjaFB0bChuYWxEYXRhOiBCdWZmZXIsIHB0bFN0YXJ0Qml0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxEYXRhKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX1RJRVJfQklULCAwKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX0NPTVBBVDJfQklULCAxKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocmJzcCk7XG59XG5cbi8qKiBQYXRjaCBldmVyeSBWUFMvU1BTIE5BTCBpbiBhbiBBbm5leCBCIGJpdHN0cmVhbSBzbyBQVEwgbWF0Y2hlcyBBcHBsZS94MjY1LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoSGV2Y0FscGhhUHRsKGJpdHN0cmVhbTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtKTtcbiAgaWYgKG5hbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJpdHN0cmVhbTtcbiAgfVxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIG5hbHMpIHtcbiAgICBsZXQgZGF0YSA9IG5hbC5kYXRhO1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykge1xuICAgICAgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBWUFNfUFRMX0JJVCk7XG4gICAgfSBlbHNlIGlmIChuYWwudHlwZSA9PT0gTkFMX1NQUykge1xuICAgICAgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBTUFNfUFRMX0JJVCk7XG4gICAgfVxuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuLy8g4pSA4pSA4pSAIHVlKHYpIHJld3JpdGUgaGVscGVycyAoU1BTL1BQUyDigJQgUkJTUCBjYW4gZ3JvdyBmcmVlbHksIG5vIENBQkFDIHRyYWlsaW5nKSDilIDilIBcblxuZnVuY3Rpb24gcmV3cml0ZU9uZVVlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWw6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICBidy5iaXRzLnB1c2goMCk7XG4gIH1cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG5mdW5jdGlvbiByZXdyaXRlVHdvVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDE6IG51bWJlciwgbmV3VmFsMjogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsMSk7XG4gIGJ3LnVlKG5ld1ZhbDIpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIGJ3LmJpdHMucHVzaCgwKTtcbiAgfVxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbi8qKiBBbHBoYSBTUFM6IHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNwcyhzcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IFNQU19TRVFfSURfQklUID0gU1BTX1BUTF9CSVQgKyA5NjsgLy8gUFRMIGlzIDk2IGJpdHMgZm9yIG91ciBwcm9maWxlIGNvbmZpZ1xuICByZXR1cm4gcmV3cml0ZU9uZVVlKHNwcywgU1BTX1NFUV9JRF9CSVQsIDEpO1xufVxuXG4vKiogQWxwaGEgUFBTOiBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMSwgcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhUHBzKHBwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIHJld3JpdGVUd29VZShwcHMsIDE2IC8qIGFmdGVyIE5BTCBoZWFkZXIgKi8sIDEsIDEpO1xufVxuXG4vLyDilIDilIDilIAgU2xpY2UgaGVhZGVyIHJld3JpdGUgKG11c3QgcHJlc2VydmUgQ0FCQUMgYnl0ZSBhbGlnbm1lbnQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZWFkU2UoYnI6IEJpdFJlYWRlcik6IG51bWJlciB7XG4gIGNvbnN0IHVlID0gYnIucmVhZFVlKCk7XG4gIHJldHVybiB1ZSAmIDEgPyAodWUgKyAxKSA+PiAxIDogLSh1ZSA+PiAxKTtcbn1cblxuLy8gSW5saW5lIHN0X3JlZl9waWNfc2V0IChzcHNfZmxhZz0wKTsgc3RScHNJZHggPSBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMg4oaSIGludGVyIHByZWRpY3Rpb24gbWF5IHVzZSBwcmV2IHNldC5cbmZ1bmN0aW9uIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnI6IEJpdFJlYWRlciwgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGludGVyRmxhZyA9IGJyLnJlYWQoMSk7IC8vIGludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb25fZmxhZ1xuICBpZiAoaW50ZXJGbGFnKSB7XG4gICAgY29uc3QgZGVsdGFJZHhNaW51czEgPSBici5yZWFkVWUoKTsgLy8gc3RScHNJZHggPT0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIOKGkiBwcmVzZW50XG4gICAgaWYgKGRlbHRhSWR4TWludXMxICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFwcGxlX2FscGhhOiB1bmV4cGVjdGVkIGRlbHRhX2lkeF9taW51czE9JHtkZWx0YUlkeE1pbnVzMX1gKTtcbiAgICB9XG4gICAgYnIucmVhZCgxKTsgLy8gZGVsdGFfcnBzX3NpZ25cbiAgICBici5yZWFkVWUoKTsgLy8gYWJzX2RlbHRhX3Jwc19taW51czFcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBudW1EZWx0YVBvY3NTZXQwOyBqKyspIHtcbiAgICAgIGNvbnN0IHVzZWQgPSBici5yZWFkKDEpO1xuICAgICAgaWYgKCF1c2VkKSB7XG4gICAgICAgIGJyLnJlYWQoMSk7IC8vIHVzZV9kZWx0YV9mbGFnXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogUGFyc2Ugc2xpY2Vfc2VnbWVudF9oZWFkZXIgdXAgdG8gYnl0ZV9hbGlnbm1lbnQuIFJldHVybnMgYml0IHBvc2l0aW9uIEIgKGVuZCBvZiBoZWFkZXIgY29udGVudCkuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlclRvQWxpZ25tZW50KGJyOiBCaXRSZWFkZXIsIG5hbFR5cGU6IG51bWJlciwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBudW1iZXIge1xuICBici5yZWFkKDE2KTsgLy8gc2tpcCBOQUwgaGVhZGVyXG4gIGlmIChici5yZWFkKDEpICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGV4cGVjdGVkIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWc9MVwiKTtcbiAgfVxuICBjb25zdCBpc0lyYXAgPSBuYWxUeXBlID49IE5BTF9CTEFfV19MUCAmJiBuYWxUeXBlIDw9IE5BTF9SU1ZfSVJBUF9WQ0wyMztcbiAgaWYgKGlzSXJhcCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3Qgc2xpY2VUeXBlID0gYnIucmVhZFVlKCk7XG4gIGlmICghaXNJcmFwKSB7XG4gICAgYnIucmVhZChjZmcubG9nMk1heFBvY0xzYik7IC8vIHNsaWNlX3BpY19vcmRlcl9jbnRfbHNiXG4gICAgY29uc3Qgc3RSZWZQaWNTZXRTcHNGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAoIXN0UmVmUGljU2V0U3BzRmxhZykge1xuICAgICAgcGFyc2VJbmxpbmVTdFJlZlBpY1NldChiciwgY2ZnLm51bURlbHRhUG9jc1NldDApO1xuICAgIH0gZWxzZSBpZiAoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMgPiAxKSB7XG4gICAgICBici5yZWFkKE1hdGguY2VpbChNYXRoLmxvZzIoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMpKSk7XG4gICAgfVxuICAgIGlmIChjZmcubG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGxvbmdfdGVybV9yZWZfcGljcyBwYXRoIHVuaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuICAgIGlmIChjZmcuc3BzVGVtcG9yYWxNdnBFbmFibGVkKSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBzbGljZV90ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnXG4gICAgfVxuICB9XG4gIGlmIChjZmcuc2FvRW5hYmxlZCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19sdW1hX2ZsYWdcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fY2hyb21hX2ZsYWdcbiAgfVxuICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX1AgfHwgc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICBjb25zdCBvdmVycmlkZUZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmIChvdmVycmlkZUZsYWcpIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICAgIGJyLnJlYWQoMSk7IC8vIG12ZF9sMV96ZXJvX2ZsYWdcbiAgICB9XG4gICAgaWYgKGNmZy5jYWJhY0luaXRQcmVzZW50KSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBjYWJhY19pbml0X2ZsYWdcbiAgICB9XG4gICAgYnIucmVhZFVlKCk7IC8vIGZpdmVfbWludXNfbWF4X251bV9tZXJnZV9jYW5kXG4gIH1cbiAgcmVhZFNlKGJyKTsgLy8gc2xpY2VfcXBfZGVsdGFcbiAgaWYgKGNmZy5wcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZykge1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnXG4gIH1cbiAgcmV0dXJuIGJyLnBvcztcbn1cblxuLyoqXG4gKiBSZXdyaXRlIGFscGhhIHNsaWNlIGhlYWRlcjogc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS5cbiAqIFRoZSArMi1iaXQgc2hpZnQgaXMgYWJzb3JiZWQgYnkgZW1pdHRpbmcgYSBmcmVzaCBieXRlX2FsaWdubWVudCB0aGVuIGFwcGVuZGluZyB0aGVcbiAqIG9yaWdpbmFsIENBQkFDIHNsaWNlX3NlZ21lbnRfZGF0YSBieXRlcyB2ZXJiYXRpbS4gQ0FCQUMgYnl0ZSBib3VuZGFyeSBpcyBwcmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihzbGljZTogQnVmZmVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc2xpY2UpO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG5cbiAgY29uc3QgcHJvYmUgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBCID0gcGFyc2VIZWFkZXJUb0FsaWdubWVudChwcm9iZSwgbmFsVHlwZSwgY2ZnKTtcbiAgY29uc3Qgb2xkQWxpZ25CaXRzID0gQiAlIDggPT09IDAgPyA4IDogOCAtIChCICUgOCk7XG4gIGNvbnN0IHNsaWNlRGF0YUJ5dGVPZmZzZXQgPSAoQiArIG9sZEFsaWduQml0cykgLyA4O1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIE5BTCBoZWFkZXJcbiAgfVxuICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWdcbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgfVxuXG4gIGJyLnJlYWRVZSgpOyAvLyBkaXNjYXJkIG9sZCBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuICBidy51ZSgxKTsgLy8gbmV3IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG5cbiAgd2hpbGUgKGJyLnBvcyA8IEIpIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGNvcHkgcmVzdCBvZiBoZWFkZXIgYml0c1xuICB9XG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBieXRlX2FsaWdubWVudDogcmJzcF9hbGlnbm1lbnRfYml0X29uZVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgYncuYml0cy5wdXNoKDApO1xuICB9XG5cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24oQnVmZmVyLmNvbmNhdChbcGFja0JpdHMoYncuYml0cyksIHJic3Auc3ViYXJyYXkoc2xpY2VEYXRhQnl0ZU9mZnNldCldKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIsIEJpdFdyaXRlciwgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IGFkZEVtdWxhdGlvblByZXZlbnRpb24sIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24gfSBmcm9tIFwiLi9uYWxcIjtcblxuaW50ZXJmYWNlIFBhcnNlZFBUTCB7XG4gIHB0bFN0YXJ0OiBudW1iZXI7XG4gIHB0bEVuZDogbnVtYmVyO1xuICBwdGxCaXRzOiBudW1iZXJbXTtcbiAgbWF4U3ViTGF5ZXJzTWludXMxOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RQVEwodnBzRGF0YTogQnVmZmVyKTogUGFyc2VkUFRMIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24odnBzRGF0YSkpO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyB2cHNfaWRcbiAgYnIucmVhZCgyKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbCArIGF2YWlsYWJsZVxuICBpZiAoYnIucmVhZCg2KSA+IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIH1cbiAgY29uc3QgbWF4U3ViTGF5ZXJzTWludXMxID0gYnIucmVhZCgzKTtcbiAgYnIucmVhZCgxICsgMTYpOyAvLyB0ZW1wb3JhbF9uZXN0aW5nICsgcmVzZXJ2ZWRcblxuICBjb25zdCBwdGxTdGFydCA9IGJyLnBvcztcbiAgYnIucmVhZCg5Nik7IC8vIGdlbmVyYWwgUFRMIChwcm9maWxlX3NwYWNlICsgdGllciArIGlkYyArIGNvbXBhdCArIGNvbnN0cmFpbnRzICsgbGV2ZWwpXG4gIGlmIChtYXhTdWJMYXllcnNNaW51czEgPiAwKSB7XG4gICAgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIH1cbiAgcmV0dXJuIHsgcHRsU3RhcnQsIHB0bEVuZDogYnIucG9zLCBwdGxCaXRzOiBici5iaXRzLCBtYXhTdWJMYXllcnNNaW51czEgfTtcbn1cblxuLyoqIFdyaXRlIGJhc2UgVlBTIGZpZWxkcyBmb3IgMi1sYXllciBhbHBoYS4gKi9cbmZ1bmN0aW9uIHdyaXRlQmFzZVZQUyhidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCkge1xuICBidy53KDB4NDAwMSwgMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJ3LncoMCwgNCk7IC8vIHZwc19pZFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfYXZhaWxhYmxlXG4gIGJ3LncoMSwgNik7IC8vIG1heF9sYXllcnNfbWludXMxID0gMVxuICBidy53KHB0bC5tYXhTdWJMYXllcnNNaW51czEsIDMpO1xuICAvLyB0ZW1wb3JhbF9uZXN0aW5nOiB0cnVlIHdoZW4gc2luZ2xlIHN1Yi1sYXllciAoYWxsIHJlZnMgbGF5ZXIgMClcbiAgYncuZmxhZyhwdGwubWF4U3ViTGF5ZXJzTWludXMxID09PSAwKTtcbiAgYncudygweGZmZmYsIDE2KTsgLy8gcmVzZXJ2ZWRcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy5mbGFnKDEpOyAvLyBzdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19wcmVzZW50XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykge1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhEZWNQaWNCdWZmZXJpbmcgLSAxXG4gICAgYncudWUoMik7IC8vIG51bVJlb3JkZXJQaWNzXG4gICAgYncudWUoNCk7IC8vIG1heExhdGVuY3lJbmNyZWFzZSArIDFcbiAgfVxuXG4gIGJ3LncoMSwgNik7IC8vIG1heF9udWhfbGF5ZXJfaWQgPSAxXG4gIGJ3LnVlKDEpOyAvLyBudW1fbGF5ZXJfc2V0c19taW51czEgPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzBdXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzFdXG4gIGJ3LmZsYWcoMCk7IC8vIHRpbWluZ19pbmZvX3ByZXNlbnRcbiAgYncuZmxhZygxKTsgLy8gdnBzX2V4dGVuc2lvbl9mbGFnXG4gIGJ3LmFsaWduKDEpOyAvLyBleHRlbnNpb24gYWxpZ25tZW50IGJpdHMgPSAxXG59XG5cbi8qKiBXcml0ZSBWUFMgZXh0ZW5zaW9uIG1hdGNoaW5nIHgyNjUgNC4xIEVOQUJMRV9BTFBIQS4gKi9cbmZ1bmN0aW9uIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAvLyBFeHRlbnNpb24gUFRMOiBsZXZlbF9pZGMgb25seSAocHJvZmlsZVByZXNlbnRGbGFnPTApXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxFbmQgLSA4LCA4KTtcbiAgaWYgKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICAgIGJ3LncoMCwgMik7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSB7XG4gICAgICBidy53KDAsIDIpO1xuICAgIH1cbiAgfVxuXG4gIGJ3LmZsYWcoMCk7IC8vIHNwbGl0dGluZ19mbGFnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIGJ3LmZsYWcoaSA9PT0gMiB8fCBpID09PSAzKTsgLy8gc2NhbGFiaWxpdHk6IHNwYXRpYWwgKyBhdXhcbiAgfVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzBdID0gMVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzFdID0gMVxuICBidy5mbGFnKDEpOyAvLyBudWhfbGF5ZXJfaWRfcHJlc2VudFxuICBidy53KDEsIDYpOyAvLyBsYXllcl9pZF9pbl9udWhbMV0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVswXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzFdID0gQVVYX0FMUEhBXG4gIGJ3LncoMCwgNCk7IC8vIHZpZXdfaWRfbGVuID0gMFxuXG4gIGJ3LmZsYWcoMCk7IC8vIGRpcmVjdF9kZXBlbmRlbmN5X2ZsYWdbMV1bMF1cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfbGF5ZXJfc2V0c1xuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJzX21heF9taW51czFfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBtYXhfdGlkX3JlZl9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfcmVmX2xheWVyc19hY3RpdmVcblxuICAvLyBGRm1wZWcgbG9vcHMgZnJvbSBpbmRleCAyIHRvIG5iX3B0bC0xLCBzbyBucHRsX20xPTIg4oaSIDEgZW50cnkgYXQgaW5kZXggMlxuICBidy51ZSgyKTsgLy8gdnBzX251bV9wcm9maWxlX3RpZXJfbGV2ZWxfbWludXMxXG4gIGJ3LmZsYWcoMSk7IC8vIHByb2ZpbGVfcHJlc2VudF9mbGFnWzJdXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfb2xzc1xuICBidy53KDAsIDIpOyAvLyBkZWZhdWx0X291dHB1dF9sYXllcl9pZGNcbiAgYncudygxLCAyKTsgLy8gcHRsX2lkeFsxXVswXSA9IDEgKGNlaWxfbG9nMigzKSA9IDIgYml0cylcbiAgYncudygyLCAyKTsgLy8gcHRsX2lkeFsxXVsxXSA9IDJcblxuICBidy51ZSgwKTsgLy8gdnBzX251bV9yZXBfZm9ybWF0c19taW51czFcbiAgYncudyh3aWR0aCwgMTYpO1xuICBidy53KGhlaWdodCwgMTYpO1xuICBidy5mbGFnKDEpOyAvLyBjaHJvbWFfYW5kX2JpdF9kZXB0aF92cHNfcHJlc2VudFxuICBidy53KDEsIDIpOyAvLyBjaHJvbWFfZm9ybWF0X2lkYyA9IDQ6MjowXG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBidy5mbGFnKDApOyAvLyBjb25mb3JtYW5jZV93aW5kb3dfdnBzX2ZsYWdcblxuICBidy5mbGFnKDEpOyAvLyBtYXhfb25lX2FjdGl2ZV9yZWZfbGF5ZXJcbiAgYncuZmxhZygwKTsgLy8gcG9jX2xzYl9hbGlnbmVkXG4gIGJ3LmZsYWcoMSk7IC8vIHBvY19sc2Jfbm90X3ByZXNlbnRcblxuICAvLyBEUEIgZm9yIE9MUyAxICgyIGxheWVycywgMSBzdWItbGF5ZXIpXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcl9mbGFnX2luZm9fcHJlc2VudFxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAwKVxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAxKVxuICBidy51ZSgwKTsgLy8gbWF4X251bV9yZW9yZGVyX3BpY3NcbiAgYncudWUoMCk7IC8vIG1heF9sYXRlbmN5X2luY3JlYXNlXG5cbiAgYncudWUoMCk7IC8vIGRpcmVjdF9kZXBfdHlwZV9sZW5fbWludXMyXG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1xuICBidy51ZSgwKTsgLy8gbm9uX3Z1aV9leHRlbnNpb25fbGVuZ3RoXG4gIGJ3LmZsYWcoMCk7IC8vIHZwc192dWlfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyB2cHNfZXh0ZW5zaW9uMl9mbGFnXG59XG5cbi8qKlxuICogQnVpbGQgYSBjb21wbGV0ZSBhbHBoYSBWUFMgZnJvbSBzY3JhdGNoLCB1c2luZyB0aGUgb3JpZ2luYWwgTlZFTkMgVlBTXG4gKiBvbmx5IGFzIGEgc291cmNlIGZvciB0aGUgUFRMIChwcm9maWxlL3RpZXIvbGV2ZWwpIGJ5dGVzLlxuICogTWF0Y2hlcyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEgVlBTIHN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFWUFModnBzRGF0YTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHB0bCA9IGV4dHJhY3RQVEwodnBzRGF0YSk7XG4gIGlmICghcHRsKSB7XG4gICAgcmV0dXJuIHZwc0RhdGE7XG4gIH1cblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgd3JpdGVCYXNlVlBTKGJ3LCBwdGwpO1xuICB3cml0ZVZQU0V4dGVuc2lvbihidywgcHRsLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBidy5iaXRzLnB1c2goMSk7IC8vIFJCU1Agc3RvcCBiaXRcbiAgYncuYWxpZ24oMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgcmV3cml0ZUFscGhhUHBzLCByZXdyaXRlQWxwaGFTbGljZUhlYWRlciwgcmV3cml0ZUFscGhhU3BzIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBlbmNvZGVOYWxIZWFkZXIsXG4gIE5BTF9QUFMsXG4gIE5BTF9TRUlfUFJFRklYLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICB0eXBlIE5hbFVuaXQsXG4gIHJld3JpdGVOYWxMYXllcklkLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhVlBTIH0gZnJvbSBcIi4vdnBzXCI7XG5cbi8vIEJHUkEgYWxwaGEg4oaSIFkgcGxhbmUgb2YgcGFja2VkIFlVVjQyMFAgKGNhbGxlciBwcmUtZmlsbHMgVVY9MTI4KTsgVWludDMyIGZhc3QgcGF0aDogQkdSQSBMRSB1MzIgPj4+IDI0ID0gQSBieXRlLlxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWU6IEZyYW1lLCBidWY6IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBzcmMgPSBiZ3JhRnJhbWUuZGF0YT8uWzBdO1xuICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICBpZiAoIXNyYyB8fCAhc3JjTHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJleHRyYWN0QWxwaGE6IG1pc3NpbmcgQkdSQSBkYXRhXCIpO1xuICB9XG4gIGNvbnN0IHcgPSBiZ3JhRnJhbWUud2lkdGg7XG4gIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICBpZiAoc3JjLmJ5dGVPZmZzZXQgJSA0ID09PSAwICYmIHNyY0xzID09PSB3ICogNCkge1xuICAgIGNvbnN0IHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCB5U2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U2l6ZTsgaSsrKSB7XG4gICAgICBidWZbaV0gPSBzcmMzMltpXSEgPj4+IDI0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGg7IHkrKykge1xuICAgICAgY29uc3Qgcm93QmFzZSA9IHkgKiBzcmNMcyArIDM7XG4gICAgICBjb25zdCBkc3RCYXNlID0geSAqIHc7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHc7IHgrKykge1xuICAgICAgICBidWZbZHN0QmFzZSArIHhdID0gc3JjW3Jvd0Jhc2UgKyB4ICogNF0hO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zIHtcbiAgYmFzZUV4dHJhZGF0YTogQnVmZmVyO1xuICBhbHBoYUV4dHJhZGF0YTogQnVmZmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLy8gQXBwbGUgSEVWQyBBbHBoYSBQcm9maWxlOiBhbHBoYSBTUFMgc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkPTEsIGFscGhhIFBQUyBwaWMrc2VxIGlkPTEuXG5mdW5jdGlvbiByZXdyaXRlQWxwaGFQYXJhbVNldCh0eXBlOiBudW1iZXIsIGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGlmICh0eXBlID09PSBOQUxfU1BTKSB7XG4gICAgcmV0dXJuIHJld3JpdGVBbHBoYVNwcyhkYXRhKTtcbiAgfVxuICBpZiAodHlwZSA9PT0gTkFMX1BQUykge1xuICAgIHJldHVybiByZXdyaXRlQWxwaGFQcHMoZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gTkFMX1ZQUyA/IGJ1aWxkQWxwaGFWUFMobmFsLmRhdGEsIG9wdHMud2lkdGgsIG9wdHMuaGVpZ2h0KSA6IG5hbC5kYXRhO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gICAgaWYgKCFlbWl0dGVkLmhhcyhuYWwudHlwZSkpIHtcbiAgICAgIGVtaXR0ZWQuYWRkKG5hbC50eXBlKTtcbiAgICAgIGZvciAoY29uc3QgYWxwaGFOYWwgb2YgYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXSkge1xuICAgICAgICBjb25zdCBhRGF0YSA9IHJld3JpdGVBbHBoYVBhcmFtU2V0KG5hbC50eXBlLCBhbHBoYU5hbC5kYXRhKTtcbiAgICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChhRGF0YSwgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNodW5rcy5wdXNoKGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpOiBCdWZmZXIge1xuICBjb25zdCBwYXlsb2FkVHlwZSA9IDE2NTtcbiAgY29uc3QgcGF5bG9hZFNpemUgPSA0O1xuICBjb25zdCBbaDAsIGgxXSA9IGVuY29kZU5hbEhlYWRlcihOQUxfU0VJX1BSRUZJWCwgMCwgMSk7XG5cbiAgY29uc3QgYml0czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgd3JpdGVCaXRzID0gKHZhbDogbnVtYmVyLCBuOiBudW1iZXIpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBiaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfTtcblxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2FuY2VsX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX3VzZV9pZGMgKDAgPSB1bnNwZWNpZmllZC9wcmVtdWx0aXBsaWVkOyBtYXRjaGVzIHgyNjUgRU5BQkxFX0FMUEhBKVxuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfYml0X2RlcHRoX21pbnVzOFxuICB3cml0ZUJpdHMoMCwgOSk7IC8vIGFscGhhX3RyYW5zcGFyZW50X3ZhbHVlXG4gIHdyaXRlQml0cygyNTUsIDkpOyAvLyBhbHBoYV9vcGFxdWVfdmFsdWVcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2luY3JfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2xpcF9mbGFnXG4gIHdyaXRlQml0cygxLCAxKTsgLy8gYnl0ZSBhbGlnbm1lbnRcbiAgd2hpbGUgKGJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIHdyaXRlQml0cygwLCAxKTtcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gICAgQnVmZmVyLmZyb20oW2gwLCBoMV0pLFxuICAgIEJ1ZmZlci5mcm9tKFtwYXlsb2FkVHlwZSwgcGF5bG9hZFNpemVdKSxcbiAgICBwYWNrQml0cyhiaXRzKSxcbiAgICBCdWZmZXIuZnJvbShbMHg4MF0pLFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVybGVhdmVBY2Nlc3NVbml0cyhiYXNlTmFsczogTmFsVW5pdFtdLCBhbHBoYU5hbHM6IE5hbFVuaXRbXSwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBCdWZmZXIge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBuYWwuZGF0YSk7XG4gIH1cbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlIDwgTkFMX1ZQUykge1xuICAgICAgY29uc3QgZGF0YSA9IHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyKG5hbC5kYXRhLCBuYWwudHlwZSwgY2ZnKTtcbiAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoZGF0YSwgMSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GLCB0eXBlIEFWUGFja2V0RmxhZyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHsgaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgUGVuZGluZ1BhY2tldCB7XG4gIGRhdGE6IEJ1ZmZlcjtcbiAgcHRzOiBiaWdpbnQ7XG4gIGR0czogYmlnaW50O1xuICBkdXJhdGlvbjogYmlnaW50O1xuICBmbGFnczogQVZQYWNrZXRGbGFnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1YWxMYXllck11eE9wdGlvbnMge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG4gIGhldmNDZmc6IE52ZW5jSGV2Y0NvbmZpZztcbn1cblxuLy8gRHJhaW5zIHRoZSBiYXNlICsgYWxwaGEgTlZFTkMgc2Vzc2lvbnMgYW5kIHdyaXRlcyBpbnRlcmxlYXZlZCBIRVZDLWFscGhhIGFjY2VzcyB1bml0cy5cbmV4cG9ydCBjbGFzcyBEdWFsTGF5ZXJNdXgge1xuICBwcml2YXRlIF9zOiBEdWFsTGF5ZXJNdXhPcHRpb25zO1xuICBwcml2YXRlIF9iYXNlUXVldWU6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuICBwcml2YXRlIF9hbHBoYVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzOiBEdWFsTGF5ZXJNdXhPcHRpb25zKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCB9ID0gdGhpcy5fcztcbiAgICAvLyBEcmFpbiBlYWNoIHNlc3Npb24gZnVsbHkg4oCUIGluZGVwZW5kZW50IE5WRU5DIHNlc3Npb25zIHJ1biBhIGZyYW1lIGFwYXJ0IHRyYW5zaWVudGx5LlxuICAgIHRoaXMuX2Jhc2VRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYmFzZUN0eCwgYmFzZVBrdCwgXCJiYXNlXCIpKSk7XG4gICAgdGhpcy5fYWxwaGFRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYWxwaGFDdHgsIGFscGhhUGt0LCBcImFscGhhXCIpKSk7XG4gICAgLy8gYmY9MCDihpIgbm8gcmVvcmRlcjsgcXVldWUgaW5kZXggTiBpcyB0aGUgc2FtZSBmcmFtZSBmb3IgYm90aC4gTGVmdG92ZXIgd2FpdHMgZm9yIG5leHQgZHJhaW4uXG4gICAgd2hpbGUgKHRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGF3YWl0IHRoaXMud3JpdGVQYWlyKHRoaXMuX2Jhc2VRdWV1ZS5zaGlmdCgpISwgdGhpcy5fYWxwaGFRdWV1ZS5zaGlmdCgpISwgbXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVucGFpcmVkIGxlZnRvdmVycyBhZnRlciBFT0YgPSB0cnVlIGJhc2UvYWxwaGEgZGVzeW5jOyByZXR1cm5zIGEgZGVzY3JpcHRpb24sIGVsc2UgdW5kZWZpbmVkLlxuICBkZXN5bmNBZnRlckVvZigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5fYmFzZVF1ZXVlLmxlbmd0aCAmJiAhdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBgYmFzZT0ke3RoaXMuX2Jhc2VRdWV1ZS5sZW5ndGh9LCBhbHBoYT0ke3RoaXMuX2FscGhhUXVldWUubGVuZ3RofSB1bnBhaXJlZGA7XG4gIH1cblxuICAvLyBFQUdBSU4vRU9GID0gbm9ybWFsIHN0b3A7IGFueSBvdGhlciBuZWdhdGl2ZSBpcyBhIHJlYWwgZmF1bHQsIG5vdCBcImRyYWluZWRcIi5cbiAgcHJpdmF0ZSBhc3luYyByZWNlaXZlQWxsKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPFBlbmRpbmdQYWNrZXRbXT4ge1xuICAgIGNvbnN0IG91dDogUGVuZGluZ1BhY2tldFtdID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICBpZiAocmV0ID49IDApIHtcbiAgICAgICAgb3V0LnB1c2godGhpcy5zbmFwc2hvdChwa3QpKTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJldCA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgcmV0ID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgfVxuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHJldCwgYG52ZW5jLiR7dGFnfS5yZWNlaXZlUGFja2V0YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzbmFwc2hvdChwa3Q6IFBhY2tldCk6IFBlbmRpbmdQYWNrZXQge1xuICAgIC8vIHBrdC5kYXRhIGlzIG5hdGl2ZSBtZW1vcnkgZnJlZWQgb24gdW5yZWYg4oCUIGNvcHkgYmVmb3JlIHF1ZXVlaW5nLlxuICAgIHJldHVybiB7IGRhdGE6IEJ1ZmZlci5mcm9tKHBrdC5kYXRhISksIHB0czogcGt0LnB0cywgZHRzOiBwa3QuZHRzLCBkdXJhdGlvbjogcGt0LmR1cmF0aW9uLCBmbGFnczogcGt0LmZsYWdzIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdyaXRlUGFpcihiYXNlOiBQZW5kaW5nUGFja2V0LCBhbHBoYTogUGVuZGluZ1BhY2tldCwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBiYXNlQ3R4LCBzdHJlYW0sIGhldmNDZmcgfSA9IHRoaXMuX3M7XG4gICAgLy8gUGF0Y2ggaW4tYmFuZCBWUFMvU1BTIFBUTCBiaXRzIGZvciBBcHBsZS1WVEIgY29tcGF0IChlbmNvZGVyIHJlcGVhdHMgaGVhZGVycyBwZXIgSURSKS5cbiAgICBjb25zdCBpbnRlcmxlYXZlZCA9IGludGVybGVhdmVBY2Nlc3NVbml0cyhzcGxpdE5hbFVuaXRzKGJhc2UuZGF0YSksIHNwbGl0TmFsVW5pdHMoYWxwaGEuZGF0YSksIGhldmNDZmcpO1xuICAgIC8vIGRhdGEgc2V0dGVyIHdpcGVzIHB0cy9kdHMvZHVyYXRpb24vZmxhZ3Mg4oCUIHJlc3RvcmU7IGZsYWdzJyBLRVkgYml0IGRyaXZlcyBtb3Ygc3Rzcy5cbiAgICBiYXNlUGt0LmRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bChpbnRlcmxlYXZlZCk7XG4gICAgYmFzZVBrdC5wdHMgPSBiYXNlLnB0cztcbiAgICBiYXNlUGt0LmR0cyA9IGJhc2UuZHRzO1xuICAgIGJhc2VQa3QuZHVyYXRpb24gPSBiYXNlLmR1cmF0aW9uID09PSAwbiA/IDFuIDogYmFzZS5kdXJhdGlvbjtcbiAgICBiYXNlUGt0LmZsYWdzID0gYmFzZS5mbGFncztcbiAgICBiYXNlUGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQoYmFzZVBrdCk7XG4gICAgYmFzZVBrdC51bnJlZigpO1xuICB9XG59XG4iLCIvLyBQYXJzZSBOVkVOQyBTUFMvUFBTIGV4dHJhZGF0YSBhdCBlbmNvZGVyIGluaXQgdG8gZGVyaXZlIHNsaWNlLWhlYWRlciBwYXJzZXIgZmxhZ3M7IHRocm93cyBpZiBOVkVOQyBkZWZhdWx0cyBzaGlmdC5cblxuaW1wb3J0IHsgQml0UmVhZGVyIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBOQUxfUFBTLCBOQUxfU1BTLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLCBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnZlbmNIZXZjQ29uZmlnIHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuO1xuICBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gZmFpbChmaWVsZDogc3RyaW5nLCBnb3Q6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgaGV2Y19hbHBoYTogTlZFTkMgU1BTL1BQUyB1bnN1cHBvcnRlZDogJHtmaWVsZH09JHtnb3R9LCBleHBlY3RlZCAke2V4cGVjdGVkfWApO1xufVxuXG5mdW5jdGlvbiBza2lwUHRsKGJyOiBCaXRSZWFkZXIsIG1heFN1YkxheWVyczogbnVtYmVyKTogdm9pZCB7XG4gIGJyLnJlYWQoMiArIDEgKyA1KTsgLy8gcHJvZmlsZV9zcGFjZSwgdGllciwgcHJvZmlsZV9pZGNcbiAgYnIucmVhZCgzMik7IC8vIHByb2ZpbGVfY29tcGF0aWJpbGl0eV9mbGFnWzAuLjMxXVxuICBici5yZWFkKDQ4KTsgLy8gNCBzb3VyY2UvcGFja2VkIGZsYWdzICsgNDMgY29uc3RyYWludC9yZXNlcnZlZCArIDEgaW5ibGRcbiAgYnIucmVhZCg4KTsgLy8gbGV2ZWxfaWRjXG4gIGNvbnN0IHN1YlByb2ZpbGVQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBzdWJMZXZlbFByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBzdWJQcm9maWxlUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICAgIHN1YkxldmVsUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGlmIChtYXhTdWJMYXllcnMgPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IG1heFN1YkxheWVyczsgaSA8IDg7IGkrKykge1xuICAgICAgYnIucmVhZCgyKTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIGlmIChzdWJQcm9maWxlUHJlc2VudFtpXSkge1xuICAgICAgYnIucmVhZCg4ICsgMzIgKyA0OCk7XG4gICAgfVxuICAgIGlmIChzdWJMZXZlbFByZXNlbnRbaV0pIHtcbiAgICAgIGJyLnJlYWQoOCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3BzKHNwc1Jic3A6IEJ1ZmZlcik6IHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xufSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihzcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gc3BzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgbWF4U3ViTGF5ZXJzID0gYnIucmVhZCgzKTtcbiAgLy8gYWxwaGFfZGFyd2luLnJld3JpdGVBbHBoYVNwcyArIHZwcy5leHRyYWN0UFRMIGhhcmRjb2RlIDk2LWJpdCBQVEwg4oCUIG9ubHkgdmFsaWQgd2hlbiBzdWJfbGF5ZXJzPTAuXG4gIGlmIChtYXhTdWJMYXllcnMgIT09IDApIHtcbiAgICBmYWlsKFwic3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMVwiLCBtYXhTdWJMYXllcnMsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBzcHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnXG4gIHNraXBQdGwoYnIsIG1heFN1YkxheWVycyk7XG4gIGJyLnJlYWRVZSgpOyAvLyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgY2hyb21hRm9ybWF0ID0gYnIucmVhZFVlKCk7XG4gIGlmIChjaHJvbWFGb3JtYXQgPT09IDMpIHtcbiAgICBmYWlsKFwiY2hyb21hX2Zvcm1hdF9pZGNcIiwgY2hyb21hRm9ybWF0LCBcIuKJoDNcIik7XG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXNcbiAgYnIucmVhZFVlKCk7IC8vIHBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgY29uc3QgbG9nMk1heFBvY0xzYiA9IGJyLnJlYWRVZSgpICsgNDtcbiAgY29uc3Qgc3ViT3JkZXJJbmZvID0gYnIucmVhZCgxKTtcbiAgY29uc3Qgb3JkZXJDb3VudCA9IHN1Yk9yZGVySW5mbyA/IG1heFN1YkxheWVycyArIDEgOiAxO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyQ291bnQ7IGkrKykge1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInNjYWxpbmdfbGlzdF9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIGFtcF9lbmFibGVkX2ZsYWdcbiAgY29uc3Qgc2FvRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInBjbV9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGNvbnN0IG51bVN0UnBzID0gYnIucmVhZFVlKCk7XG4gIGlmIChudW1TdFJwcyA+IDEpIHtcbiAgICBmYWlsKFwibnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzXCIsIG51bVN0UnBzLCBcIuKJpDFcIik7XG4gIH1cbiAgbGV0IG51bURlbHRhUG9jc1NldDAgPSAwO1xuICBpZiAobnVtU3RScHMgPT09IDEpIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBudW1EZWx0YVBvY3NTZXQwID0gbnVtTmVnICsgbnVtUG9zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgfVxuICBjb25zdCBsb25nVGVybVJlZlBpY3NQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHtcbiAgICBmYWlsKFwibG9uZ190ZXJtX3JlZl9waWNzX3ByZXNlbnRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgY29uc3Qgc3BzVGVtcG9yYWxNdnBFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgcmV0dXJuIHtcbiAgICBsb2cyTWF4UG9jTHNiLFxuICAgIHNhb0VuYWJsZWQsXG4gICAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtU3RScHMsXG4gICAgbnVtRGVsdGFQb2NzU2V0MCxcbiAgICBsb25nVGVybVJlZlBpY3NQcmVzZW50LFxuICAgIHNwc1RlbXBvcmFsTXZwRW5hYmxlZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQcHMocHBzUmJzcDogQnVmZmVyKTogeyBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuOyBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbiB9IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHBwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkVWUoKTsgLy8gcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZCgxKTsgLy8gZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyBvdXRwdXRfZmxhZ19wcmVzZW50X2ZsYWdcbiAgY29uc3QgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMgPSBici5yZWFkKDMpO1xuICBpZiAobnVtRXh0cmFTbGljZUhlYWRlckJpdHMgIT09IDApIHtcbiAgICBmYWlsKFwibnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRzXCIsIG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gc2lnbl9kYXRhX2hpZGluZ19lbmFibGVkX2ZsYWdcbiAgY29uc3QgY2FiYWNJbml0UHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gaW5pdF9xcF9taW51czI2IChzZSwgYnV0IHVlIHBhcnNlciBmaW5lIHRvIGFkdmFuY2UpXG4gIGJyLnJlYWQoMSk7IC8vIGNvbnN0cmFpbmVkX2ludHJhX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc2Zvcm1fc2tpcF9lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBici5yZWFkVWUoKTsgLy8gY3VfcXBfZGVsdGFfZW5hYmxlZCDihpIgZGlmZl9jdV9xcF9kZWx0YV9kZXB0aFxuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY2JfcXBfb2Zmc2V0XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY3JfcXBfb2Zmc2V0XG4gIGJyLnJlYWQoMSk7IC8vIHBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX2JpcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zcXVhbnRfYnlwYXNzX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGZhaWwoXCJ0aWxlc19lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIGVudHJvcHlfY29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgY29uc3QgZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50ID0gYnIucmVhZCgxKTtcbiAgbGV0IHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBmYWxzZTtcbiAgaWYgKGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIGRlYmxvY2tpbmdfZmlsdGVyX292ZXJyaWRlX2VuYWJsZWRfZmxhZ1xuICAgIHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBici5yZWFkKDEpID09PSAxOyAvLyBwcHNfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZ1xuICAgIGlmICghc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSkge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkVWUoKTsgLy8gYmV0YS90YyBvZmZzZXRzIChzZSB2aWEgdWUgYWR2YW5jZSlcbiAgICB9XG4gIH1cbiAgLy8gc2xpY2VfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgcHJlc2VudCBpZmYgUFBTIGFjcm9zcy1zbGljZXMgZW5hYmxlZCAmJiAhc2xpY2VfZGVibG9ja2luZ19kaXNhYmxlZC5cbiAgY29uc3QgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgPSBwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCAmJiAhc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZTtcbiAgcmV0dXJuIHsgY2FiYWNJbml0UHJlc2VudCwgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnZlbmNIZXZjQ29uZmlnKGV4dHJhZGF0YTogQnVmZmVyKTogTnZlbmNIZXZjQ29uZmlnIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoZXh0cmFkYXRhKTtcbiAgY29uc3Qgc3BzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9TUFMpO1xuICBjb25zdCBwcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1BQUyk7XG4gIGlmICghc3BzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogU1BTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICB9XG4gIGlmICghcHBzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogUFBTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICB9XG4gIGNvbnN0IHMgPSBwYXJzZVNwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNwcy5kYXRhKSk7XG4gIGNvbnN0IHAgPSBwYXJzZVBwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHBwcy5kYXRhKSk7XG4gIHJldHVybiB7IC4uLnMsIC4uLnAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICBGRl9FTkNPREVSX0hFVkNfTlZFTkMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHR5cGUgeyBId1ZpZGVvRW5jb2Rlck9wdGlvbnMgfSBmcm9tIFwiLi4vdmlkZW90b29sYm94XCI7XG5pbXBvcnQgeyBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgRHVhbExheWVyTXV4IH0gZnJvbSBcIi4vZHVhbF9sYXllcl9tdXhcIjtcbmltcG9ydCB7IHR5cGUgTnZlbmNIZXZjQ29uZmlnLCBwYXJzZU52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgYWxwaGFTd0ZyYW1lOiBGcmFtZTtcbiAgYWxwaGFCdWY6IEJ1ZmZlcjtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX211eDogRHVhbExheWVyTXV4O1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9tdXggPSBuZXcgRHVhbExheWVyTXV4KHtcbiAgICAgIGJhc2VDdHg6IHMuYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4OiBzLmFscGhhQ3R4LFxuICAgICAgYmFzZVBrdDogcy5iYXNlUGt0LFxuICAgICAgYWxwaGFQa3Q6IHMuYWxwaGFQa3QsXG4gICAgICBzdHJlYW06IHMuc3RyZWFtLFxuICAgICAgaGV2Y0NmZzogcy5oZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPE52ZW5jRHVhbExheWVyRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9IRVZDX05WRU5DKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX252ZW5jIGVuY29kZXIgbm90IGZvdW5kXCIpO1xuICAgIH1cblxuICAgIC8vIHRpZXI9bWFpbiBtYXRjaGVzIEFwcGxlIFZpZGVvVG9vbGJveDsgbWFjT1MgQ2hyb21lIHJlcXVpcmVzIE1haW4gdGllciBmb3IgSEVWQyBhbHBoYSBkZWNvZGUuXG4gICAgY29uc3QgbnZlbmNPcHRzID0geyBwcmVzZXQ6IFwicDRcIiwgYmY6IFwiMFwiLCB0aWVyOiBcIm1haW5cIiB9O1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgb3B0aW9uczogbnZlbmNPcHRzIH07XG4gICAgLy8gQkdSQSBkaXJlY3QgKE5WRU5DIGNvbnZlcnRzLCBubyBDUFUgU1dTKTsgc3RhY2sgZnJlZXMgZXZlcnkgbmF0aXZlIGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3MsIG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgYmFzZUN0eCA9IHN0YWNrLnVzZShhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEgfSwgXCJudmVuYy5iYXNlLm9wZW4yXCIpKTtcbiAgICBjb25zdCBhbHBoYUN0eCA9IHN0YWNrLnVzZShhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKSk7XG5cbiAgICBpZiAoIWJhc2VDdHguZXh0cmFEYXRhIHx8ICFhbHBoYUN0eC5leHRyYURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm52ZW5jOiBjb2RlYyBleHRyYWRhdGEgbWlzc2luZ1wiKTtcbiAgICB9XG4gICAgY29uc3QgaGV2Y0NmZyA9IHBhcnNlTnZlbmNIZXZjQ29uZmlnKGJhc2VDdHguZXh0cmFEYXRhKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG4gICAgY29uc3QgdW5pZmllZCA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICBiYXNlRXh0cmFkYXRhOiBiYXNlQ3R4LmV4dHJhRGF0YSxcbiAgICAgIGFscGhhRXh0cmFkYXRhOiBhbHBoYUN0eC5leHRyYURhdGEsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICB9KTtcbiAgICAvLyBBcHBsZS1WVEIgY29tcGF0OiByZXdyaXRlIFZQUytTUFMgUFRMIGJpdHMgdG8gbWF0Y2ggeDI2NS9WVEIgb3V0cHV0ICh0aWVyPU1haW4sIGNvbXBhdFsyXT0xKS5cbiAgICBzdHJlYW0uY29kZWNwYXIuZXh0cmFkYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwodW5pZmllZCk7XG5cbiAgICBjb25zdCB5U2l6ZSA9IHdpZHRoICogaGVpZ2h0O1xuICAgIC8vIFlVVjQyMFAgY2hyb21hIHBsYW5lcyBhcmUgY2VpbCh3LzIpw5djZWlsKGgvMik7IGZsb29yIHVuZGVyZmxvd3Mgb24gb2RkIGRpbWVuc2lvbnMuXG4gICAgY29uc3QgY2hyb21hU2l6ZSA9ICgod2lkdGggKyAxKSA+PiAxKSAqICgoaGVpZ2h0ICsgMSkgPj4gMSk7XG4gICAgY29uc3QgYWxwaGFCdWYgPSBCdWZmZXIuYWxsb2MoeVNpemUgKyBjaHJvbWFTaXplICogMik7XG4gICAgYWxwaGFCdWYuZmlsbCgxMjgsIHlTaXplKTtcblxuICAgIGNvbnN0IGJhc2VQa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBhbHBoYVBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IGFscGhhU3dGcmFtZSA9IHN0YWNrLnVzZShtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVY0MjBQKSk7XG5cbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBOdmVuY0R1YWxMYXllckVuY29kZXIoe1xuICAgICAgYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4LFxuICAgICAgYmFzZVBrdCxcbiAgICAgIGFscGhhUGt0LFxuICAgICAgc3RyZWFtLFxuICAgICAgYWxwaGFTd0ZyYW1lLFxuICAgICAgYWxwaGFCdWYsXG4gICAgICBoZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSwgYWxwaGFCdWYgfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcHRzID0gdGhpcy5fcHRzKys7XG5cbiAgICAvLyBFeHRyYWN0IHRoZSBhbHBoYSBwbGFuZSBiZWZvcmUgYmFzZS5zZW5kRnJhbWUg4oCUIHRoZSBlbmNvZGVyIHVucmVmcyB0aGUgaW5wdXQgZnJhbWUuXG4gICAgZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyKGJncmFGcmFtZSwgYWxwaGFCdWYpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUubWFrZVdyaXRhYmxlKCksIFwiYWxwaGFTdy5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5mcm9tQnVmZmVyKGFscGhhQnVmKSwgXCJhbHBoYVN3LmZyb21CdWZmZXJcIik7XG4gICAgYWxwaGFTd0ZyYW1lLnB0cyA9IHB0cztcbiAgICBhbHBoYVN3RnJhbWUuZHVyYXRpb24gPSAxbjtcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGFscGhhQ3R4LnNlbmRGcmFtZShhbHBoYVN3RnJhbWUpLCBcImFscGhhLnNlbmRGcmFtZVwiKTtcblxuICAgIGF3YWl0IHRoaXMuX211eC5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNlbmRFb2YodGhpcy5fcy5iYXNlQ3R4LCBcImJhc2VcIik7XG4gICAgYXdhaXQgdGhpcy5zZW5kRW9mKHRoaXMuX3MuYWxwaGFDdHgsIFwiYWxwaGFcIik7XG4gICAgYXdhaXQgdGhpcy5fbXV4LmRyYWluKG11eGVyKTtcbiAgICBjb25zdCBkZXN5bmMgPSB0aGlzLl9tdXguZGVzeW5jQWZ0ZXJFb2YoKTtcbiAgICBpZiAoZGVzeW5jKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5WRU5DIGRlc3luYzogJHtkZXN5bmN9YCk7XG4gICAgfVxuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lIH0gPSB0aGlzLl9zO1xuICAgIGJhc2VQa3QuZnJlZSgpO1xuICAgIGFscGhhUGt0LmZyZWUoKTtcbiAgICBhbHBoYVN3RnJhbWUuZnJlZSgpO1xuICAgIC8vIE5WSURJQSBkcml2ZXIgNTIwLjU2LjA2KyBVQUYgaW4gbGlibnZjdXZpZCBvbiBjcmVhdGlvbi1vcmRlciBzZXNzaW9uIGZyZWUg4oCUIExJRk8gZGVzdHJveSBhdm9pZHMgaXQgKGZvcnVtIC90LzI2OTk3NCkuXG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICAvLyBFT0YgZmx1c2g7IEVBR0FJTi9FT0YgcmV0dXJucyBhcmUgYmVuaWduIChhbHJlYWR5LWRyYWluaW5nIGVuY29kZXIpLlxuICBwcml2YXRlIGFzeW5jIHNlbmRFb2YoY3R4OiBDb2RlY0NvbnRleHQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBpZiAocmV0IDwgMCAmJiByZXQgIT09IEFWRVJST1JfRUFHQUlOICYmIHJldCAhPT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30uc2VuZEZyYW1lKG51bGwpYCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBBVlBpeGVsRm9ybWF0LCBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgY29kZWNOYW1lLCBjb2RlY1RhZywgY29kZWNPcHRzLCBtdXhlciwgLi4ucmVzdCB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcbiAgICB9XG5cbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGRpc3Bvc2VzIGN0eC9wa3QgaWYgYSBsYXRlciBzdGVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBjdHggPSBzdGFjay51c2UoYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKSk7XG4gICAgY29uc3QgcGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvRW5jb2RlcihjdHgsIHBrdCwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShmcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoZnJhbWUpLCBcInZpZGVvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eChcbiAgICAgIHtcbiAgICAgICAgY29kZWMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSxcbiAgICAgICAgY29sb3JSYW5nZTogQVZDT0xfUkFOR0VfSlBFRyxcbiAgICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgICBvcHRpb25zOiB7IGFscGhhX3F1YWxpdHk6IFwiMVwiIH0sXG4gICAgICB9LFxuICAgICAgXCJ2dEVuYy5vcGVuMlwiLFxuICAgICk7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBkaXNwb3NlcyBjdHgvcGt0IGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgc3RhY2sudXNlKGN0eCk7XG4gICAgY29uc3QgcGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgXCJodmMxXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIH0gZnJvbSBcIi4vaGV2Y19hbHBoYS9udmVuY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuaW1wb3J0IHsgVmlkZW9Ub29sYm94RW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5jb25zdCBUQUcgPSBcIltFbmNvZGVyXVwiO1xuXG5leHBvcnQgdHlwZSBId0VuY29kZXIgPSBWaWRlb1Rvb2xib3hFbmNvZGVyIHwgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU2V0dXAge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3duc0h3OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKG9wdHM6IEh3VmlkZW9GYWN0b3J5T3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlID0gOF8wMDBfMDAwLCBkaXNhYmxlSHdDb2RlYyA9IGZhbHNlLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgY29uc3QgaHcgPSBzaGFyZWRIdyA/PyAoZGlzYWJsZUh3Q29kZWMgPyB1bmRlZmluZWQgOiAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpKTtcbiAgY29uc3Qgb3duc0h3ID0gIXNoYXJlZEh3ICYmICEhaHc7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIFZpZGVvVG9vbGJveCBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgVmlkZW9Ub29sYm94RW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgTlZFTkMgZHVhbC1sYXllciBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJIYXJkd2FyZSBjb2RlYyBzZXNzaW9uIGxpbWl0cyByZWFjaGVkLCB1c2Ugc29mdHdhcmUgZW5jb2RlclwiLCBlKTtcbiAgICBpZiAob3duc0h3KSB7XG4gICAgICBodz8uZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgc29mdHdhcmUgbGlieDI2NSBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSB0aGUgdmlkZW8gZW5jb2RlciBpZiBDb2RlY1N0YXRlLmNyZWF0ZSB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICBjb25zdCB2aWRlbyA9IHN0YWNrLnVzZShcbiAgICBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICBjb2RlY09wdHM6IHsgcHJlc2V0OiBcImZhc3RcIiwgXCJ4MjY1LXBhcmFtc1wiOiBcImxvZy1sZXZlbD0xOmJmcmFtZXM9Mzpwb29scz0rOmZyYW1lLXRocmVhZHM9MFwiIH0sXG4gICAgICBiaXRyYXRlLFxuICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICBtdXhlcixcbiAgICB9KSxcbiAgKTtcbiAgY29uc3QgY29kZWMgPSBzdGFjay51c2UoYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCkpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiB7IHZpZGVvLCBjb2RlYywgb3duc0h3OiBmYWxzZSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIERpY3Rpb25hcnksIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFN0cmVhbSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY3R4Lm5ld1N0cmVhbShudWxsKTtcbiAgICBzdHJlYW0udGltZUJhc2UgPSBjb2RlY0N0eC50aW1lQmFzZTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3RyZWFtLmNvZGVjcGFyLmZyb21Db250ZXh0KGNvZGVjQ3R4KSwgXCJjb2RlY3Bhci5mcm9tQ29udGV4dFwiKTtcbiAgICBpZiAoY29kZWNUYWcpIHtcbiAgICAgIHN0cmVhbS5jb2RlY3Bhci5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIH1cbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgub3Blbk91dHB1dCgpLCBcIm9wZW5PdXRwdXRcIik7XG4gICAgLy8gK2Zhc3RzdGFydCByZWxvY2F0ZXMgbW9vdiB0byBmaWxlIGZyb250IG9uIHdyaXRlVHJhaWxlciBzbyBwbGF5ZXJzIGNhbiBiZWdpbiBwbGF5YmFjayBiZWZvcmUgZnVsbCBkb3dubG9hZC5cbiAgICB1c2luZyBvcHRzID0gRGljdGlvbmFyeS5mcm9tT2JqZWN0KHsgbW92ZmxhZ3M6IFwiK2Zhc3RzdGFydFwiIH0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgud3JpdGVIZWFkZXIob3B0cyksIFwid3JpdGVIZWFkZXJcIik7XG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlUGFja2V0KHBrdDogUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5pbnRlcmxlYXZlZFdyaXRlRnJhbWUocGt0KSwgXCJpbnRlcmxlYXZlZFdyaXRlRnJhbWVcIik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuX29wZW5lZCkge1xuICAgICAgICB0aGlzLl9vcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgLy8gQSBmYWlsZWQvdHJ1bmNhdGVkIHRyYWlsZXIgd3JpdGUgbXVzdCBub3QgbGVhayB0aGUgRkQuXG4gICAgICAgICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQWx3YXlzIGZyZWUgdGhlIG5hdGl2ZSBjb250ZXh0IOKAlCBldmVuIGEgbmV2ZXItb3BlbmVkIG11eGVyIGFsbG9jYXRlZCBvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgYXdhaXQgdGhpcy5fY3R4W1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzI0LlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJub2RlOmFzc2VydFwiO1xuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEZGX0VOQ09ERVJfQUFDLFxuICBGRl9FTkNPREVSX0xJQk9QVVMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlSHdWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyLCB0eXBlIFZpZGVvU2V0dXAgfSBmcm9tIFwiLi9mYWN0b3J5XCI7XG5pbXBvcnQgeyBGRl9FTkNPREVSX0xJQlZQWF9WUDkgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG5leHBvcnQgdHlwZSBTaW5rS2luZCA9IFwibXA0XCIgfCBcIndlYm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaW5rT3B0aW9ucyB7XG4gIG91dEZpbGU6IHN0cmluZztcbiAga2luZDogU2lua0tpbmQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmludGVyZmFjZSBTaW5rU3RhdGUge1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBvd25zSHc6IGJvb2xlYW47XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvcHRzOiBTaW5rT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE91dHB1dFNpbmsgaW1wbGVtZW50cyBBc3luY0Rpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBTaW5rU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBTaW5rU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBraW5kRnJvbVBhdGgocGF0aDogc3RyaW5nKTogU2lua0tpbmQge1xuICAgIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi53ZWJtXCIpKSB7XG4gICAgICByZXR1cm4gXCJ3ZWJtXCI7XG4gICAgfVxuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi5tcDRcIikgfHwgbG93ZXIuZW5kc1dpdGgoXCIubW92XCIpKSB7XG4gICAgICByZXR1cm4gXCJtcDRcIjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBvdXRwdXQgZXh0ZW5zaW9uOiAke3BhdGh9YCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFNpbmtPcHRpb25zKTogUHJvbWlzZTxPdXRwdXRTaW5rPiB7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBkaXNwb3NlIG11eGVyL2VuY29kZXJzIGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBtdXhlciA9IHN0YWNrLnVzZShuZXcgRm9ybWF0TXV4ZXIob3B0cy5vdXRGaWxlKSk7XG4gICAgY29uc3Qgc2V0dXAgPVxuICAgICAgb3B0cy5raW5kID09PSBcIm1wNFwiID8gYXdhaXQgT3V0cHV0U2luay5tcDRWaWRlbyhvcHRzLCBtdXhlcikgOiBhd2FpdCBPdXRwdXRTaW5rLndlYm1WaWRlbyhvcHRzLCBtdXhlcik7XG4gICAgaWYgKHNldHVwLnZpZGVvKSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAudmlkZW8pO1xuICAgIH1cbiAgICBpZiAoc2V0dXAuaHdWaWRlbykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLmh3VmlkZW8pO1xuICAgIH1cbiAgICBpZiAoc2V0dXAuY29kZWMpIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5jb2RlYyk7XG4gICAgfVxuICAgIC8vIE9ubHkgYSBzaW5rLW93bmVkIGh3IGRldmljZSBpcyBvdXJzIHRvIGZyZWUgaGVyZTsgYSBzaGFyZWQgZGV2aWNlIGJlbG9uZ3MgdG8gdGhlIHBpcGVsaW5lLlxuICAgIGlmIChzZXR1cC5vd25zSHcgJiYgc2V0dXAuaHcpIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5odyk7XG4gICAgfVxuICAgIGNvbnN0IGF1ZGlvID0gb3B0cy53aXRoQXVkaW8gPyBhd2FpdCBPdXRwdXRTaW5rLmF1ZGlvRm9yKG9wdHMsIG11eGVyKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoYXVkaW8pIHtcbiAgICAgIHN0YWNrLnVzZShhdWRpbyk7XG4gICAgfVxuICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBPdXRwdXRTaW5rKHsgbXV4ZXIsIC4uLnNldHVwLCBhdWRpbywgb3B0cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG1wNFZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICAgIHJldHVybiBjcmVhdGVId1ZpZGVvRW5jb2Rlcih7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0sIG11eGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHdlYm1WaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG9wdHM7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlZQWF9WUDksXG4gICAgICBjb2RlY09wdHM6IHtcbiAgICAgICAgZGVhZGxpbmU6IFwicmVhbHRpbWVcIixcbiAgICAgICAgXCJjcHUtdXNlZFwiOiBcIjhcIixcbiAgICAgICAgXCJyb3ctbXRcIjogXCIxXCIsXG4gICAgICAgIHRocmVhZHM6IFwiMlwiLFxuICAgICAgfSxcbiAgICAgIGJpdHJhdGU6IDRfMDAwXzAwMCxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZGVvLFxuICAgICAgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLFxuICAgICAgb3duc0h3OiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXVkaW9Gb3Iob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgLy8gT3B1cyByZWplY3RzIDQ0LjFrLlxuICAgIGNvbnN0IGNmZyA9XG4gICAgICBvcHRzLmtpbmQgPT09IFwibXA0XCJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgICAgICAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIG91dFNhbXBsZVJhdGU6IDQ4XzAwMCxcbiAgICAgICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCT1BVUyxcbiAgICAgICAgICB9O1xuICAgIHJldHVybiBBdWRpb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIC4uLmNmZyxcbiAgICAgIGdsb2JhbEhlYWRlcjogdHJ1ZSxcbiAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICBtdXhlcixcbiAgICB9KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zLmF1ZGlvPy5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGJncmFGcmFtZTogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICByZXR1cm4gaHdWaWRlby5lbmNvZGUoYmdyYUZyYW1lLCBtdXhlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKGJncmFGcmFtZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVEZWNvZGVkRnJhbWUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIHJldHVybiBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoc3JjKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5hdWRpbz8uZW5jb2RlKHBjbSwgdGhpcy5fcy5tdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBhdWRpbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHZpZGVvIS5mbHVzaChtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgY29uc3QgeyBtdXhlciwgdmlkZW8sIGh3VmlkZW8sIGF1ZGlvLCBjb2RlYywgaHcsIG93bnNIdyB9ID0gdGhpcy5fcztcbiAgICB2aWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGh3VmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGNvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICBpZiAob3duc0h3KSB7XG4gICAgICBodz8uZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3dFbmNvZGUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBvayhjb2RlYz8uc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNvZGVjLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJzaW5rRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY29kZWMuc3dzLnNjYWxlRnJhbWUoY29kZWMuZHN0LCBzcmMpLCBcInNpbmtTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNvZGVjLmRzdCwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgRkZfSFdERVZJQ0VfVFlQRV9DVURBLCBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vbGltaXRlclwiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBPdXRwdXRTaW5rIH0gZnJvbSBcIi4vc2lua1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGlwZWxpbmVTdGF0ZSB7XG4gIHNpbmtzOiBPdXRwdXRTaW5rW107XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBsaW1pdGVyOiBDb25jdXJyZW5jeUxpbWl0ZXI7XG4gIHBuZ0NvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGVzLCB3aXRoQXVkaW8gPSBmYWxzZSwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgICBpZiAob3V0RmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvdXRGaWxlcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG4gICAgfVxuXG4gICAgY29uc3Qga2luZHMgPSBvdXRGaWxlcy5tYXAoKHApID0+IE91dHB1dFNpbmsua2luZEZyb21QYXRoKHApKTtcbiAgICBjb25zdCBuZWVkc01wNEh3ID0gIWRpc2FibGVId0NvZGVjICYmIGtpbmRzLmluY2x1ZGVzKFwibXA0XCIpO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZGlzcG9zZSBzaGFyZWRIdyArIGFueSBzaW5rcyBhbHJlYWR5IGJ1aWx0IGlmIGEgbGF0ZXIgc2luayB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBzaGFyZWRIdyA9IG5lZWRzTXA0SHcgPyAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuICAgIGlmIChzaGFyZWRIdykge1xuICAgICAgc3RhY2sudXNlKHNoYXJlZEh3KTtcbiAgICB9XG4gICAgY29uc3QgaXNId0FscGhhQ2FwYWJsZSA9XG4gICAgICBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIHx8IHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBO1xuXG4gICAgY29uc3Qgc2lua3M6IE91dHB1dFNpbmtbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0RmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBPdXRwdXRTaW5rLmNyZWF0ZSh7XG4gICAgICAgIG91dEZpbGU6IG91dEZpbGVzW2ldISxcbiAgICAgICAga2luZDoga2luZHNbaV0hLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIHdpdGhBdWRpbyxcbiAgICAgICAgZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgIHNoYXJlZEh3OiBraW5kc1tpXSA9PT0gXCJtcDRcIiAmJiBpc0h3QWxwaGFDYXBhYmxlID8gc2hhcmVkSHcgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHN0YWNrLnVzZShzaW5rKTtcbiAgICAgIHNpbmtzLnB1c2goc2luayk7XG4gICAgfVxuXG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHsgc2lua3MsIHNoYXJlZEh3LCBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLCBvdXRGaWxlcywgb3B0cyB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgIHNpbmsuc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcy5vcHRzO1xuICAgICAgdGhpcy5fcy5wbmdDb2RlYyA/Pz0gYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCB0aGlzLl9zLnBuZ0NvZGVjLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZW5jb2RlRGVjb2RlZEZyYW1lKHNyYyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZUF1ZGlvKHBjbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZmx1c2goKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGVzO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZnJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICBhd2FpdCBzaW5rW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICAgIHRoaXMuX3MucG5nQ29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnNoYXJlZEh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBmcmFtZSBpZiBmcm9tQnVmZmVyIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGZyYW1lID0gc3RhY2sudXNlKG1ha2VGcmFtZSh0aGlzLl9zLm9wdHMud2lkdGgsIHRoaXMuX3Mub3B0cy5oZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSkpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KGltYWdlOiBOYXRpdmVJbWFnZSkge1xuICBjb25zdCBzaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICBpZiAoc2l6ZS53aWR0aCA9PT0gMCB8fCBzaXplLmhlaWdodCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBpbWFnZS5pc0VtcHR5KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaXplRXF1YWxzKGE6IFNpemUsIGI6IFNpemUpIHtcbiAgcmV0dXJuIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8wMy5cblxuY29uc3QgR1JJRCA9IDMyOyAvLyByZXNvbHV0aW9uLWluZGVwZW5kZW50IGxhdHRpY2UgZm9yIHRoZSBtb2RhbC1jb2xvciBwcmUtcGFzc1xuY29uc3QgU1RSSURFID0gNDsgLy8gbWFpbi1zY2FuIHN0ZXA7IHJvdy1zdGFnZ2VyZWQgc28gYW55IOKJpTFweCBzdHJ1Y3R1cmUgbGFuZHMgb24gYSBzYW1wbGUgd2l0aGluIDQgcm93c1xuY29uc3QgQ09OVEVOVF9ERUxUQSA9IDg7IC8vIG1heCBwZXItY2hhbm5lbCBkaXN0YW5jZSAoMC0yNTUpIHN0aWxsIGNvdW50ZWQgYXMgdGhlIGRvbWluYW50IGNvbG9yXG5jb25zdCBNSU5fQ09OVEVOVF9TQU1QTEVTID0gMTY7IC8vIHJlbmRlcmVkIGZyYW1lcyBhcmUgbm9pc2UtZnJlZSwgc28gYSBoYW5kZnVsIG9mIG9mZi1kb21pbmFudCBzYW1wbGVzIGlzIHJlYWwgY29udGVudFxuZXhwb3J0IGNvbnN0IEJMQU5LX1dBUk5fUkFUSU8gPSAwLjU7IC8vIGJsYW5rLWZyYW1lIGZyYWN0aW9uIGFib3ZlIHRoaXMgd2FybnMgYXQgcmVuZGVyIGVuZFxuXG4vLyA1IGJpdHMgcGVyIGNoYW5uZWwsIGFscGhhIGluY2x1ZGVkIOKAlCB0cmFuc3BhcmVudCBzdXJmYWNlcyBjYXJyeSBjb250ZW50IGluIGNvdmVyYWdlLCBub3QgY29sb3IuXG5mdW5jdGlvbiBxdWFudGl6ZShiZ3JhOiBCdWZmZXIsIGk6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgKGJncmEucmVhZFVJbnQ4KGkpID4+IDMpIHxcbiAgICAoKGJncmEucmVhZFVJbnQ4KGkgKyAxKSA+PiAzKSA8PCA1KSB8XG4gICAgKChiZ3JhLnJlYWRVSW50OChpICsgMikgPj4gMykgPDwgMTApIHxcbiAgICAoKGJncmEucmVhZFVJbnQ4KGkgKyAzKSA+PiAzKSA8PCAxNSlcbiAgKTtcbn1cblxuLy8gQnl0ZSBvZmZzZXQgb2YgYSBwaXhlbCBjYXJyeWluZyB0aGUgZnJhbWUncyBkb21pbmFudCBjb2xvciAobW9kZSBvdmVyIGEgc3BhcnNlIGxhdHRpY2UpLlxuZnVuY3Rpb24gbW9kYWxQaXhlbChiZ3JhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3Qgc3RlcFggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHdpZHRoIC8gR1JJRCkpO1xuICBjb25zdCBzdGVwWSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0IC8gR1JJRCkpO1xuICBjb25zdCBjb3VudHMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBjb25zdCBmaXJzdElkeCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIGxldCBiZXN0ID0gMDtcbiAgbGV0IGJlc3RDb3VudCA9IDA7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IHN0ZXBZKSB7XG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCArPSBzdGVwWCkge1xuICAgICAgY29uc3QgaSA9ICh5ICogd2lkdGggKyB4KSAqIDQ7XG4gICAgICBjb25zdCBrZXkgPSBxdWFudGl6ZShiZ3JhLCBpKTtcbiAgICAgIGNvbnN0IGNvdW50ID0gKGNvdW50cy5nZXQoa2V5KSA/PyAwKSArIDE7XG4gICAgICBjb3VudHMuc2V0KGtleSwgY291bnQpO1xuICAgICAgaWYgKCFmaXJzdElkeC5oYXMoa2V5KSkge1xuICAgICAgICBmaXJzdElkeC5zZXQoa2V5LCBpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb3VudCA+IGJlc3RDb3VudCkge1xuICAgICAgICBiZXN0Q291bnQgPSBjb3VudDtcbiAgICAgICAgYmVzdCA9IGtleTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpcnN0SWR4LmdldChiZXN0KSA/PyAwO1xufVxuXG4vLyBCbGFuayA9IGRvbWluYW50LWNvbG9yIGNvdmVyYWdlOiBmZXdlciB0aGFuIE1JTl9DT05URU5UX1NBTVBMRVMgc2FtcGxlcyBkZXZpYXRlIGZyb20gdGhlIG1vZGFsIGNvbG9yLlxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtGcmFtZShiZ3JhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IG0gPSBtb2RhbFBpeGVsKGJncmEsIHdpZHRoLCBoZWlnaHQpO1xuICBjb25zdCBtYiA9IGJncmEucmVhZFVJbnQ4KG0pO1xuICBjb25zdCBtZyA9IGJncmEucmVhZFVJbnQ4KG0gKyAxKTtcbiAgY29uc3QgbXIgPSBiZ3JhLnJlYWRVSW50OChtICsgMik7XG4gIGNvbnN0IG1hID0gYmdyYS5yZWFkVUludDgobSArIDMpO1xuICBsZXQgY29udGVudCA9IDA7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IFNUUklERSkge1xuICAgIGNvbnN0IG9mZnNldCA9ICh5ID4+IDIpICYgKFNUUklERSAtIDEpO1xuICAgIGZvciAobGV0IHggPSBvZmZzZXQ7IHggPCB3aWR0aDsgeCArPSBTVFJJREUpIHtcbiAgICAgIGNvbnN0IGkgPSAoeSAqIHdpZHRoICsgeCkgKiA0O1xuICAgICAgaWYgKFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpKSAtIG1iKSA+IENPTlRFTlRfREVMVEEgfHxcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSArIDEpIC0gbWcpID4gQ09OVEVOVF9ERUxUQSB8fFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpICsgMikgLSBtcikgPiBDT05URU5UX0RFTFRBIHx8XG4gICAgICAgIE1hdGguYWJzKGJncmEucmVhZFVJbnQ4KGkgKyAzKSAtIG1hKSA+IENPTlRFTlRfREVMVEFcbiAgICAgICkge1xuICAgICAgICBjb250ZW50Kys7XG4gICAgICAgIGlmIChjb250ZW50ID49IE1JTl9DT05URU5UX1NBTVBMRVMpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjbGFzcyBCbGFua1N0YXRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfd2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGVpZ2h0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdGFsID0gMDtcbiAgcHJpdmF0ZSBfYmxhbmsgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBzYW1wbGUoZnJhbWU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3RvdGFsKys7XG4gICAgaWYgKGlzQmxhbmtGcmFtZShmcmFtZSwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCkpIHtcbiAgICAgIHRoaXMuX2JsYW5rKys7XG4gICAgfVxuICB9XG5cbiAgLy8gRnJhY3Rpb24gb2Ygd3JpdHRlbiBmcmFtZXMgdGhhdCB3ZXJlIGNvbnRlbnRsZXNzICgwID0gYWxsIGhhZCBjb250ZW50LCAxID0gYWxsIGJsYW5rKS5cbiAgZmluYWxpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdG90YWwgPiAwID8gdGhpcy5fYmxhbmsgLyB0aGlzLl90b3RhbCA6IDA7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjMuXG5cbmV4cG9ydCBjb25zdCBKQU5LX1dBUk5fU0NPUkUgPSAwLjI1OyAvLyBqYW5rIHNjb3JlIGFib3ZlIHRoaXMgd2FybnMgYXQgcmVuZGVyIGVuZCAofnF1YXJ0ZXIgZHJvcHBlZCBvciBhIH4wLjVzIGZyZWV6ZSlcblxuLy8gRnJhbWUtZHJvcCBxdWFsaXR5IHNjb3JlICgwID0gcGVyZmVjdCwgMSA9IHdvcnN0KTogZ2xvYmFsIGRyb3AgcmF0ZSBhbmQgbG9jYWwgYnVyc3Qgc2V2ZXJpdHkgY29tYmluZWQgdmlhIDEtKDEtZykoMS1sKS5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBEcm9wU3RhdHMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYWN0dWFsID0gMDtcbiAgcHJpdmF0ZSBfY3VycmVudEJ1cnN0ID0gMDtcbiAgcHJpdmF0ZSBfYnVyc3RzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGZwczogbnVtYmVyKSB7XG4gICAgdGhpcy5fZnBzID0gZnBzO1xuICB9XG5cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICBkcm9wcGVkKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIHRoaXMuX2N1cnJlbnRCdXJzdCArPSBjb3VudDtcbiAgfVxuXG4gIGZpbmFsaXplKCk6IERyb3BTY29yZSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cblxuICAgIGxldCB0b3RhbERyb3BwZWQgPSAwO1xuICAgIGxldCBsb2NhbFN1bSA9IDA7XG4gICAgbGV0IG1heEJ1cnN0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGJ1cnN0IG9mIHRoaXMuX2J1cnN0cykge1xuICAgICAgdG90YWxEcm9wcGVkICs9IGJ1cnN0O1xuICAgICAgbWF4QnVyc3QgPSBNYXRoLm1heChtYXhCdXJzdCwgYnVyc3QpO1xuICAgICAgY29uc3QgcGVyY2VwdGlibGUgPSBNYXRoLm1heCgwLCBidXJzdCAtIDEpO1xuICAgICAgbG9jYWxTdW0gKz0gKHBlcmNlcHRpYmxlIC8gdGhpcy5fZnBzKSAqKiAyO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5fYWN0dWFsICsgdG90YWxEcm9wcGVkO1xuICAgIGNvbnN0IGcgPSBleHBlY3RlZCA+IDAgPyB0b3RhbERyb3BwZWQgLyBleHBlY3RlZCA6IDA7XG4gICAgY29uc3QgbCA9IE1hdGgubWluKDEsIGxvY2FsU3VtKTtcbiAgICBjb25zdCBzY29yZSA9IDEgLSAoMSAtIGcpICogKDEgLSBsKTtcblxuICAgIHJldHVybiB7IGdsb2JhbDogZywgbG9jYWw6IGwsIGphbms6IHNjb3JlLCBleHBlY3RlZCwgYWN0dWFsOiB0aGlzLl9hY3R1YWwsIG1heEJ1cnN0IH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB0eXBlIHsgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB0eXBlIHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuXG5leHBvcnQgY29uc3QgQVVESU9fTUVUQV9DSEFOTkVMID0gXCJhdWRpby1tZXRhXCI7XG5leHBvcnQgY29uc3QgQVVESU9fQ0hVTktfQ0hBTk5FTCA9IFwiYXVkaW8tY2h1bmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0xpc3RlbmVyT3B0aW9ucyB7XG4gIHdjOiBXZWJDb250ZW50cztcbiAgZW5jb2RlcjogRW5jb2RlclBpcGVsaW5lO1xuICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbnVtYmVyO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBBdWRpb0Rpc3Bvc2FsID0gKCkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEF1ZGlvTGlzdGVuZXJzKHsgd2MsIGVuY29kZXIsIGdldFZpZGVvVGltZU1zLCBvbkVycm9yIH06IEF1ZGlvTGlzdGVuZXJPcHRpb25zKTogQXVkaW9EaXNwb3NhbCB7XG4gIGNvbnN0IG9uTWV0YSA9IGFzeW5jIChfZTogdW5rbm93biwgZGF0YTogeyBzYW1wbGVSYXRlOiBudW1iZXIgfSkgPT4ge1xuICAgIGNvbnN0IHNhbXBsZVJhdGUgPSBkYXRhLnNhbXBsZVJhdGU7XG4gICAgY29uc3Qgc3RhcnRNcyA9IGdldFZpZGVvVGltZU1zKCk7XG4gICAgZW5jb2Rlci5zZXR1cEF1ZGlvKHNhbXBsZVJhdGUpO1xuICAgIGNvbnN0IHNpbGVuY2VTYW1wbGVzID0gTWF0aC5jZWlsKChzdGFydE1zICogc2FtcGxlUmF0ZSkgLyAxMDAwKTtcbiAgICBpZiAoc2lsZW5jZVNhbXBsZXMgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhCdWZmZXIuYWxsb2Moc2lsZW5jZVNhbXBsZXMgKiAyICogNCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25DaHVuayA9IGFzeW5jIChfZTogdW5rbm93biwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhidWZmZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgd2MuaXBjLm9uKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgd2MuaXBjLm9uKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgICB3Yy5pcGMucmVtb3ZlTGlzdGVuZXIoQVVESU9fQ0hVTktfQ0hBTk5FTCwgb25DaHVuayk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzE2LlxuXG5pbXBvcnQgeyB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IG5hdGl2ZUltYWdlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmludGVyZmFjZSBTY3JlZW5zaG90VGFyZ2V0IHtcbiAgbXM6IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbiAgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmVlbnNob3RPcHRpb25zIHtcbiAgbWFya3M6IG51bWJlcltdO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xufVxuXG4vLyBEdW1wcyBwYWludGVkIEJHUkEgZnJhbWVzIHRvIFBORyBhdCByZXF1ZXN0ZWQgc2Vjb25kIG1hcmtzOyByZXN1bHQgb3JkZXIgdHJhY2tzIGlucHV0IG9yZGVyLlxuZXhwb3J0IGNsYXNzIFNjcmVlbnNob3RUYWtlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlbmRpbmc6IFNjcmVlbnNob3RUYXJnZXRbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG9uZSA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dyaXRlczogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfczogU2NyZWVuc2hvdE9wdGlvbnMpIHtcbiAgICBjb25zdCBkaXIgPSBkaXJuYW1lKF9zLm91dEZpbGVzWzBdID8/IFwiLlwiKTtcbiAgICB0aGlzLl9wZW5kaW5nID0gX3MubWFya3NcbiAgICAgIC5tYXAoKHNlYywgaW5kZXgpID0+ICh7IG1zOiBzZWMgKiAxMDAwLCBpbmRleCwgcGF0aDogam9pbihkaXIsIGBzY3JlZW5zaG90XyR7aW5kZXh9LnBuZ2ApIH0pKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubXMgLSBiLm1zKTtcbiAgfVxuXG4gIC8vIER1bXAgZXZlcnkgbWFyayB3aG9zZSBzZWNvbmQgaGFzIGJlZW4gcmVhY2hlZCBieSB0aGlzIGZyYW1lLlxuICBjYXB0dXJlKGN1cnJlbnRUaW1lTXM6IG51bWJlciwgYmdyYTogQnVmZmVyKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuX3BlbmRpbmcubGVuZ3RoID4gMCAmJiB0aGlzLl9wZW5kaW5nWzBdIS5tcyA8PSBjdXJyZW50VGltZU1zKSB7XG4gICAgICB0aGlzLnRha2UodGhpcy5fcGVuZGluZy5zaGlmdCgpISwgYmdyYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVjb3JkaW5nIG92ZXI6IHNuYXAgYW55IG1hcmsgcGFzdCB0aGUgbGFzdCBmcmFtZSBvbnRvIGl0LCB0aGVuIHdyaXRlIGFsbCBzaG90cyBvdXQuXG4gIGFzeW5jIGZpbmlzaChmaW5hbEJncmE/OiBCdWZmZXIpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgd2hpbGUgKGZpbmFsQmdyYSAmJiB0aGlzLl9wZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGFrZSh0aGlzLl9wZW5kaW5nLnNoaWZ0KCkhLCBmaW5hbEJncmEpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl93cml0ZXMpO1xuICAgIHJldHVybiBbLi4udGhpcy5fZG9uZS5lbnRyaWVzKCldLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKS5tYXAoKFssIHBhdGhdKSA9PiBwYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGFrZSh0YXJnZXQ6IFNjcmVlbnNob3RUYXJnZXQsIGJncmE6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwbmcgPSBuYXRpdmVJbWFnZS5jcmVhdGVGcm9tQml0bWFwKGJncmEsIHsgd2lkdGgsIGhlaWdodCB9KS50b1BORygpO1xuICAgIHRoaXMuX2RvbmUuc2V0KHRhcmdldC5pbmRleCwgdGFyZ2V0LnBhdGgpO1xuICAgIHRoaXMuX3dyaXRlcy5wdXNoKHdyaXRlRmlsZSh0YXJnZXQucGF0aCwgcG5nKSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwibm9kZTp0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8vIEFib3J0IGJhaWxzIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgcmV0cnlpbmc7IHNpZ25hbCBpcyBub3QgYXV0by10aHJlYWRlZCBpbnRvIGZuIOKAlCBjYWxsZXIgd2lyZXMgaXQgKGZldGNoLCBTMyBzZW5kKS5cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXQ+KHtcbiAgZm4sXG4gIG1heEF0dGVtcHRzID0gMyxcbiAgdGltZW91dCxcbiAgc2lnbmFsLFxufTogUmV0cnlPcHRpb25zPEFyZ3MsIFJldD4pIHtcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGB0aW1lb3V0IG92ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIHJldHVybiBhc3luYyAoLi4uYXJnczogQXJncykgPT4ge1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZm4oLi4uYXJncyldO1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyB0aW1lb3V0RXJyb3I7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKDIgKiogYXR0ZW1wdCAqIDEwMCArIE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTAuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdE9wdGlvbnMge1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIG9uVGltZW91dD86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBXYWl0YWJsZUV2ZW50IHtcbiAgcHJpdmF0ZSBfcHJvbWlzZT86IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3Jlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lb3V0VG9rZW4/OiBOb2RlSlMuVGltZW91dDtcblxuICB3YWl0KG9wdGlvbnM/OiBXYWl0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhbHJlYWR5IHdhaXRpbmdcIik7XG4gICAgfVxuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBpZiAob3B0aW9ucz8udGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3RpbWVvdXRUb2tlbiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnMub25UaW1lb3V0Py4oKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIG9wdGlvbnMudGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gIH1cblxuICBzaWduYWwoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRUb2tlbik7XG4gICAgdGhpcy5fcHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgdHlwZSB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9iYXNlL2xpbWl0ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFdhaXRhYmxlRXZlbnQgfSBmcm9tIFwiLi4vYmFzZS93YWl0YWJsZV9ldmVudFwiO1xuXG5jb25zdCBUQUcgPSBcIltOZXR3b3JrXVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLCAvL1xuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuXSk7XG5cbmNvbnN0IExPQ0FMX1NDSEVNRVMgPSBbXCJwdXA6XCIsIFwicHVwLWZyYW1lOlwiLCBcImZpbGU6XCIsIFwiZGF0YTpcIiwgXCJibG9iOlwiLCBcImNocm9tZS1leHRlbnNpb246XCIsIFwiZGV2dG9vbHM6XCJdO1xuXG5mdW5jdGlvbiBpc0xvY2FsU2NoZW1lKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgcyBvZiBMT0NBTF9TQ0hFTUVTKSB7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKHMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJveGllZFVybCh1cmw6IHN0cmluZykge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICBjb25zdCB0YXJnZXQgPSBtYXAuZ2V0KHBhcnNlZC5ob3N0bmFtZSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwYXJzZWQuaG9zdG5hbWUgPSB0YXJnZXQ7XG4gIHBhcnNlZC5wcm90b2NvbCA9IFwiaHR0cDpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbmRvdzogQnJvd3NlcldpbmRvdztcbiAgdXNlSW5uZXJQcm94eT86IGJvb2xlYW47XG4gIHN0dWJNZWRpYT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcmNlcHRvcih7IHNvdXJjZSwgd2luZG93LCB1c2VJbm5lclByb3h5LCBzdHViTWVkaWEgfTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMjU2KTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFdhaXRhYmxlRXZlbnQ+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgb25UaW1lb3V0PzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFdhaXRhYmxlRXZlbnQoKTtcbiAgICBldmVudHMuc2V0KGtleSwgZXZlbnQpO1xuICAgIGF3YWl0IGV2ZW50LndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pLmZpbmFsbHkoKCkgPT4gZXZlbnRzLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChrZXk6IHN0cmluZykge1xuICAgIGV2ZW50cy5nZXQoa2V5KT8uc2lnbmFsKCk7XG4gIH1cblxuICByZXEub25CZWZvcmVSZXF1ZXN0KChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldGFpbHMudXJsO1xuICAgIC8vIFN3YXAgbWVkaWEgZm9yIGEgZnJhbWUtc2VydmVyIHN0dWIgKHRydWUgaW50cmluc2ljIHNpemUvZHVyYXRpb24pIHNvIEJsaW5rIGxheXMgb3V0IGxpa2UgQ2hyb21lLlxuICAgIGlmIChzdHViTWVkaWEgJiYgZGV0YWlscy5yZXNvdXJjZVR5cGUgPT09IFwibWVkaWFcIiAmJiAhdXJsLnN0YXJ0c1dpdGgoXCJwdXAtZnJhbWU6XCIpKSB7XG4gICAgICBjYWxsYmFjayh7XG4gICAgICAgIHJlZGlyZWN0VVJMOiBgcHVwLWZyYW1lOi8vc3R1Yj9zcmM9JHtlbmNvZGVVUklDb21wb25lbnQodXJsKX1gLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb3hpZWQgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybCh1cmwpIDogdXJsO1xuICAgIGxpbWl0ZXIuc2NoZWR1bGUoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBzdGFydDpgLCB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdXJsLFxuICAgICAgICBwcm94aWVkLFxuICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHN0YXRzOiBsaW1pdGVyLnN0YXRzLFxuICAgICAgfSk7XG4gICAgICBpZiAocHJveGllZCA9PT0gdXJsKSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVkaXJlY3RVUkw6IHByb3hpZWQgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNMb2NhbFNjaGVtZSh1cmwpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGNvbnN0IHsgdXJsLCBtZXRob2QsIGVycm9yLCByZXNvdXJjZVR5cGUgfSA9IGRldGFpbHM7XG4gICAgLy8gU3R1YmJlZCBtZWRpYSBkb3duZ3JhZGVzOiBFUlJfQUJPUlRFRCBpcyBqdXN0IHRoZSBsb2FkZXIgcmVzdGFydGluZyBvbnRvIHRoZSBjcm9zcy1zY2hlbWUgcmVkaXJlY3QuXG4gICAgY29uc3QgbWVkaWEgPSBzdHViTWVkaWEgJiYgcmVzb3VyY2VUeXBlID09PSBcIm1lZGlhXCI7XG4gICAgY29uc3QgbGV2ZWwgPSBtZWRpYSA/IChlcnJvciA9PT0gXCJuZXQ6OkVSUl9BQk9SVEVEXCIgPyBcImRlYnVnXCIgOiBcIndhcm5cIikgOiBcImVycm9yXCI7XG4gICAgbG9nZ2VyW2xldmVsXShUQUcsIGBlcnJvcjpgLCB7IGtleSwgdXJsLCBtZXRob2QsIGVycm9yLCByZXNvdXJjZVR5cGUsIHNvdXJjZSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNldEludGVyY2VwdG9yKHdpbmRvdzogQnJvd3NlcldpbmRvdykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICByZXEub25CZWZvcmVSZXF1ZXN0KG51bGwpO1xuICByZXEub25IZWFkZXJzUmVjZWl2ZWQobnVsbCk7XG4gIHJlcS5vbkNvbXBsZXRlZChudWxsKTtcbiAgcmVxLm9uRXJyb3JPY2N1cnJlZChudWxsKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHB1cEF1ZGlvUHJlbG9hZCwgcHVwUmVuZGVyUHJlbG9hZCwgcHVwU2hvb3RQcmVsb2FkIH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuLi9iYXNlL3JldHJ5XCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgcHJveGllZFVybCwgc2V0SW50ZXJjZXB0b3IsIHVuc2V0SW50ZXJjZXB0b3IgfSBmcm9tIFwiLi9uZXR3b3JrXCI7XG5pbXBvcnQgeyBjcmVhdGVTdGVnb1VSTCB9IGZyb20gXCIuL3Byb3RvY29sXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbV2luZG93XVwiO1xuY29uc3QgVElNRU9VVF9FUlJPUiA9IG5ldyBFcnJvcihcIndpbmRvdyB0aW1lb3V0XCIpO1xuY29uc3QgQ09OU09MRV9JR05PUkVTID0gW2AlY0VsZWN0cm9uIFNlY3VyaXR5IFdhcm5pbmdgLCBcIk1peGVkIENvbnRlbnQ6IFRoZSBwYWdlIGF0XCJdO1xuXG5pbnRlcmZhY2UgRmluaXNoT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIGFjdGlvbjogKCkgPT4gdm9pZDtcbiAgdGltZW91dE1zOiBudW1iZXI7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2goeyBzb3VyY2UsIHdpbiwgYWN0aW9uLCB0aW1lb3V0TXMsIHRvbGVyYW50LCBzaWduYWwgfTogRmluaXNoT3B0aW9ucykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBkb21SZWFkeSA9IGZhbHNlO1xuICAgIC8vIFRvbGVyYW50IHByb2NlZWRzIG9uIGEgcGFydGlhbCBET00gb25seSBhcyBhIHRpbWVvdXQgZmFsbGJhY2sg4oCUIHN0YXJ0aW5nIG9uIGJhcmUgZG9tLXJlYWR5IGxlYXZlcyB0aGUgbG9hZCBwZW5kaW5nIGFuZCB3ZWRnZXMgdmlydHVhbCB0aW1lLlxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGRvbmUodG9sZXJhbnQgJiYgZG9tUmVhZHkgPyB1bmRlZmluZWQgOiBUSU1FT1VUX0VSUk9SKSwgdGltZW91dE1zKTtcbiAgICBjb25zdCBkb25lID0gKGVycj86IHVua25vd24pID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gZG9uZShzaWduYWwucmVhc29uKSwge1xuICAgICAgb25jZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRvbS1yZWFkeVwiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRvbS1yZWFkeTpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb21SZWFkeSA9IHRydWU7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtc3RvcC1sb2FkaW5nXCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZGlkLXN0b3AtbG9hZGluZzpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmFpbC1sb2FkXCIsIChfZSwgY29kZSwgZGVzYywgdXJsKSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgZGlkLWZhaWwtbG9hZDogJHtKU09OLnN0cmluZ2lmeSh7IHVybCwgc291cmNlLCBjb2RlLCBkZXNjIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGByZW5kZXItcHJvY2Vzcy1nb25lOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBleGl0Q29kZSwgcmVhc29uIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgYWN0aW9uKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZVdpbmRvdyh3aW46IEJyb3dzZXJXaW5kb3cpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3aW4pO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIFwiZm9yY2UgY2xvc2VcIik7XG4gICAgICAgIHdpbi5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmRldGFjaCgpO1xuICAgIHdpbi5vbmNlKFwiY2xvc2VkXCIsIGRvbmUpO1xuICAgIHdpbi5jbG9zZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgV2luZG93Q3JlYXRlZENhbGxiYWNrID0gKHdpbmRvdzogQnJvd3NlcldpbmRvdykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICByZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucztcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBvbkNyZWF0ZWQ/OiBXaW5kb3dDcmVhdGVkQ2FsbGJhY2s7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5mdW5jdGlvbiBwaWNrUHJlbG9hZChyZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChyZW5kZXJlci5kZXRlcm1pbmlzdGljKSB7XG4gICAgcmV0dXJuIHB1cFNob290UHJlbG9hZDtcbiAgfVxuICBpZiAocmVuZGVyZXIud2l0aEF1ZGlvKSB7XG4gICAgcmV0dXJuIHB1cEF1ZGlvUHJlbG9hZDtcbiAgfVxuICByZXR1cm4gcHVwUmVuZGVyUHJlbG9hZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIHRvbGVyYW50LCBzaWduYWwsIG9uQ3JlYXRlZCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gcmVuZGVyZXI7XG4gIGNvbnN0IHNyYyA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNvdXJjZSkgOiBzb3VyY2U7XG5cbiAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtaW5XaWR0aDogd2lkdGgsXG4gICAgbWluSGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1heFdpZHRoOiB3aWR0aCxcbiAgICBtYXhIZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgbW92YWJsZTogZmFsc2UsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluV29ya2VyOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICAgIHByZWxvYWQ6IHBpY2tQcmVsb2FkKHJlbmRlcmVyKSxcbiAgICB9LFxuICB9KTtcbiAgc2V0SW50ZXJjZXB0b3Ioe1xuICAgIHNvdXJjZSxcbiAgICB3aW5kb3c6IHdpbixcbiAgICB1c2VJbm5lclByb3h5LFxuICAgIHN0dWJNZWRpYTogcmVuZGVyZXIuZGV0ZXJtaW5pc3RpYyxcbiAgfSk7XG4gIHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlci5hdHRhY2goXCIxLjNcIik7XG4gIGF3YWl0IG9uQ3JlYXRlZD8uKHdpbik7XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFwiY29uc29sZS1tZXNzYWdlXCIsICh7IGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCB9KSA9PiB7XG4gICAgLy8gRHJvcCBoZWFkbGVzcyBub2lzZTogc2VjdXJpdHkgd2FybmluZ3MgYW5kIGh0dHDihpJodHRwcyBhdXRvLXVwZ3JhZGUgbm90aWNlcyBmb3IgaW50ZXJuYWwtcHJveHkgYXNzZXRzLlxuICAgIGlmIChsZXZlbCA9PT0gXCJ3YXJuaW5nXCIgJiYgQ09OU09MRV9JR05PUkVTLmZpbmQoKGkpID0+IG1lc3NhZ2Uuc3RhcnRzV2l0aChpKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbXNncyA9IFtUQUcsIFwiY29uc29sZTpcIiwgeyBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCwgc291cmNlIH1dO1xuICAgIGxldmVsID09PSBcImVycm9yXCIgPyBsb2dnZXIuZXJyb3IoLi4ubXNncykgOiBsb2dnZXIuZGVidWcoLi4ubXNncyk7XG4gICAgcmVuZGVyZXIub25Db25zb2xlKGxldmVsLCBtZXNzYWdlKTtcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBjcmVhdGVTdGVnb1VSTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICBhd2FpdCB3YWl0Rm9yRmluaXNoKHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIHdpbixcbiAgICAgIGFjdGlvbjogKCkgPT4gd2luLmxvYWRVUkwodXJsKSxcbiAgICAgIHRpbWVvdXRNczogcmVuZGVyZXIud2luZG93VGltZW91dCAqIDEwMDAsXG4gICAgICB0b2xlcmFudCxcbiAgICAgIHNpZ25hbCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuY29uc3Qgb3BlbldpbmRvd1dpdGhSZXRyeSA9IHVzZVJldHJ5KHsgZm46IG9wZW5XaW5kb3csIG1heEF0dGVtcHRzOiAyIH0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIG9uQ3JlYXRlZCwgc2lnbmFsIH06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICBsZXQgd2FybXVwOiBCcm93c2VyV2luZG93IHwgdW5kZWZpbmVkO1xuICBsZXQgZXJyb3I6IHVua25vd247XG4gIHRyeSB7XG4gICAgd2FybXVwID0gYXdhaXQgb3BlbldpbmRvd1dpdGhSZXRyeSh7IHNvdXJjZSwgcmVuZGVyZXIsIHNpZ25hbCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuXG4gIGNvbnN0IG9wZW4gPSAoKSA9PiB7XG4gICAgcmV0dXJuIG9wZW5XaW5kb3coe1xuICAgICAgc291cmNlLFxuICAgICAgcmVuZGVyZXIsXG4gICAgICBvbkNyZWF0ZWQsXG4gICAgICBzaWduYWwsXG4gICAgICB0b2xlcmFudDogcmVuZGVyZXIud2luZG93VG9sZXJhbnQsXG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKHJlbmRlcmVyLndpbmRvd1RvbGVyYW50ICYmIGVycm9yID09PSBUSU1FT1VUX0VSUk9SKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgd2FybXVwIHRpbWVvdXQ6ICR7c291cmNlfSwgZmFsbGluZyBiYWNrIHRvIGRvbS1yZWFkeWApO1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlcnJvciBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB3YXJtdXAgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxuXG4gIGlmICh3YXJtdXApIHtcbiAgICB3YXJtdXAud2ViQ29udGVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3YXJtdXApO1xuICAgIGF3YWl0IHNsZWVwKDIwMDApO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2FybXVwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyByZXNpemVEcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBCTEFOS19XQVJOX1JBVElPLCBCbGFua1N0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvcXVhbGl0eS9ibGFua1wiO1xuaW1wb3J0IHsgRHJvcFN0YXRzLCBKQU5LX1dBUk5fU0NPUkUgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2Ryb3BcIjtcbmltcG9ydCB7IHBlcmlvZGljYWwgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IHR5cGUgQXVkaW9EaXNwb3NhbCwgYXR0YWNoQXVkaW9MaXN0ZW5lcnMgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBTY3JlZW5zaG90VGFrZXIgfSBmcm9tIFwiLi9zY3JlZW5zaG90XCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbyB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlbmRlcl1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcihvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlcywgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcblxuICBhd2FpdCB1c2luZyBlbmNvZGVyID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZXMsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG4gIGNvbnN0IHRha2VyID0gbmV3IFNjcmVlbnNob3RUYWtlcih7IG1hcmtzOiBvcHRpb25zLnNjcmVlbnNob3RzLCB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlcyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCArIDEgfTtcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBsYXN0RnJhbWU6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHNjcmVlbnNob3RzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgbGFzdFdyaXR0ZW5UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBlbmNvZGVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIGxldCByZXNvbHZlcjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVqZWN0ZXI6ICgocmVhc29uPzogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCBjbGVhclN0dWNrQ2hlY2s6IFZvaWRGdW5jdGlvbiB8IHVuZGVmaW5lZDtcbiAgY29uc3QgYmxhbmtTdGF0cyA9IG5ldyBCbGFua1N0YXRzKHdpZHRoLCBoZWlnaHQpO1xuICBjb25zdCBkcm9wU3RhdHMgPSBuZXcgRHJvcFN0YXRzKGZwcyk7XG5cbiAgbGV0IGRpc3Bvc2VBdWRpbzogQXVkaW9EaXNwb3NhbCB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2NoZWR1bGVGcmFtZSA9IChmcmFtZTogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIGJsYW5rU3RhdHMuc2FtcGxlKGZyYW1lKTtcbiAgICBlbmNvZGVyLmVuY29kZUJHUkEoZnJhbWUpLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgfTtcblxuICBjb25zdCBwYWludCA9IChfZTogdW5rbm93biwgX3I6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgIGVuY29kZUVycm9yID8/PSBzaWduYWw/LnJlYXNvbjtcbiAgICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICAgIHJlamVjdGVyPy4oZW5jb2RlRXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAvLyBOT1RFKEF1dG9rYWthKTogV2UgbXVzdCBlbnN1cmUgZnJhbWUgaXMgcmVhZHkgb24gZWxlY3Ryb24gdjQxK1xuICAgICAgcmVzaXplRHJhd2FibGUoY2RwLCBmcmFtZVNpemUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBzdGVnbyB0aW1lc3RhbXAgZnJvbSB0aGUgYm90dG9tIHBpeGVsIHJvdyB3aXRob3V0IGZ1bGwgYml0bWFwIGNvcHlcbiAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGVFcnJvciA/Pz0gbmV3IEVycm9yKGBubyB0aW1lc3RhbXAgQCAke3dyaXR0ZW59YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBmcmFtZXMgdGhhdCBhcnJpdmUgdG9vIHNvb24gKDwgODAlIG9mIGZyYW1lIGludGVydmFsKVxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCk7XG4gICAgbGFzdEZyYW1lID0gY3JvcHBlZDtcbiAgICB0YWtlci5jYXB0dXJlKGN1cnJlbnRUaW1lLCBjcm9wcGVkKTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0aW1lRGVsdGEgPSBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZTtcbiAgICAgIGlmICh0aW1lRGVsdGEgPD0gZnJhbWVJbnRlcnZhbCAqIDEuMikge1xuICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZyYW1lc1RvSW5zZXJ0ID0gTWF0aC5yb3VuZCh0aW1lRGVsdGEgLyBmcmFtZUludGVydmFsKTtcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoZnJhbWVzVG9JbnNlcnQgLSAxKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzVG9JbnNlcnQgJiYgd3JpdHRlbiA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25NcyA9IGR1cmF0aW9uICogMTAwMDtcbiAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb25NcyAtIGZyYW1lSW50ZXJ2YWwgKiAwLjUgfHwgd3JpdHRlbiA+PSB0b3RhbCkge1xuICAgICAgcmVzb2x2ZXI/LigpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB3aW4gPSBhd2FpdCBsb2FkV2luZG93KHtcbiAgICBzb3VyY2UsXG4gICAgcmVuZGVyZXI6IG9wdGlvbnMsXG4gICAgc2lnbmFsLFxuICAgIG9uQ3JlYXRlZDogKHdpbikgPT4ge1xuICAgICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgICBkaXNwb3NlQXVkaW8gPSBhdHRhY2hBdWRpb0xpc3RlbmVycyh7XG4gICAgICAgICAgd2M6IHdpbi53ZWJDb250ZW50cyxcbiAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgIGdldFZpZGVvVGltZU1zOiAoKSA9PiBsYXN0V3JpdHRlblRpbWUgPz8gMCxcbiAgICAgICAgICBvbkVycm9yOiAoZTogRXJyb3IpID0+IChlbmNvZGVFcnJvciA/Pz0gZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG5cbiAgdHJ5IHtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIHBhaW50KTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiByZWplY3Rlcj8uKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiB7XG4gICAgICBbcmVzb2x2ZXIsIHJlamVjdGVyXSA9IFtyLCBqXTtcbiAgICAgIGxldCBsYXN0V3JpdHRlbiA9IDA7XG4gICAgICBsZXQgc3R1Y2sgPSAwO1xuICAgICAgY2xlYXJTdHVja0NoZWNrID0gcGVyaW9kaWNhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh3cml0dGVuICE9PSBsYXN0V3JpdHRlbikge1xuICAgICAgICAgIGxhc3RXcml0dGVuID0gd3JpdHRlbjtcbiAgICAgICAgICBzdHVjayA9IDA7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R1Y2sgPj0gMykge1xuICAgICAgICAgIHJlamVjdGVyPy4obmV3IEVycm9yKGByZW5kZXJlciB0aW1lb3V0IEAgJHt3cml0dGVufSBsYXN0VHMgJHtsYXN0V3JpdHRlbn1gKSk7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBzdHVjaysrO1xuICAgICAgICBjb25zdCBibXAgPSBhd2FpdCB3aW4ud2ViQ29udGVudHMuY2FwdHVyZVBhZ2UoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgaWYgKGJtcCAmJiAhd2luLmlzRGVzdHJveWVkKCkpIHtcbiAgICAgICAgICBwYWludCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgYm1wKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSwgMTAwMCAvIGZwcyk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJTdHVja0NoZWNrPy4oKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBkaXNwb3NlQXVkaW8/LigpO1xuICAgIGF3YWl0IGVuY29kZXIuZmluaXNoKCk7XG4gICAgc2NyZWVuc2hvdHMgPSBhd2FpdCB0YWtlci5maW5pc2gobGFzdEZyYW1lKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvciB8fCB3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJsYW5rID0gYmxhbmtTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChibGFuayA+PSBCTEFOS19XQVJOX1JBVElPKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gYmxhbmstZnJhbWUgcmF0aW8gJHtNYXRoLnJvdW5kKGJsYW5rICogMTAwKX0lIOKAlCBwb3NzaWJsZSB3aGl0ZS9ibGFuayBzY3JlZW5gKTtcbiAgICB9XG4gICAgY29uc3QgeyBqYW5rIH0gPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoamFuayA+PSBKQU5LX1dBUk5fU0NPUkUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBqYW5rIHNjb3JlICR7amFuay50b0ZpeGVkKDIpfSDigJQgZHJvcHBlZCBmcmFtZXNgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgb3V0RmlsZXMsIGJsYW5rLCBzY3JlZW5zaG90cywgamFuayB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgdHlwZSB7IFdlYkZyYW1lTWFpbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgYWJvcnRhYmxlIH0gZnJvbSBcIi4uLy4uL2Jhc2UvdGltaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1ZpZGVvXVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VPcHRpb25zIHtcbiAgZnJhbWU6IFdlYkZyYW1lTWFpbiB8IHVuZGVmaW5lZDtcbiAgdGltZXN0YW1wTXM6IG51bWJlcjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8vIE9ubHkgdGhlIGRldGVybWluaXN0aWMgcmVuZGVyZXIgKHNob290KSBkcml2ZXMgdGhpczsgcmVhbC10aW1lIHZpZGVvcyBzZWxmLXRpY2sgdmlhIHJBRiBpbiB0aGUgcGFnZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZHZhbmNlVmlkZW9zKHsgZnJhbWUsIHRpbWVzdGFtcE1zLCBzaWduYWwgfTogQWR2YW5jZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFmcmFtZT8udXJsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBhYm9ydGFibGUoXG4gICAgICBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChcbiAgICAgICAgYHdpbmRvdy5fX3B1cF92aWRlb19fJiYoYXN5bmMoKT0+e2F3YWl0IF9fcHVwX3ZpZGVvX18ucmVhZHkoKTthd2FpdCBfX3B1cF92aWRlb19fLmFkdmFuY2UoJHt0aW1lc3RhbXBNc30pfSkoKWAsXG4gICAgICApLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgYWR2YW5jZSBza2lwcGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IHR5cGUgQWR2YW5jZU9wdGlvbnMsIGFkdmFuY2VWaWRlb3MgfSBmcm9tIFwiLi92aWRlby9hZHZhbmNlXCI7XG5cbmV4cG9ydCBjb25zdCBUSUNLX1NZTUJPTCA9IFwiX19wdXBfdGlja19fXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aWNrKGFyZ3M6IEFkdmFuY2VPcHRpb25zKSB7XG4gIGNvbnN0IHsgZnJhbWUsIHRpbWVzdGFtcE1zIH0gPSBhcmdzO1xuICBpZiAoIWZyYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGV4cHIgPSBgd2luZG93LiR7VElDS19TWU1CT0x9JiZ3aW5kb3cuJHtUSUNLX1NZTUJPTH0ucHJvY2Vzcygke3RpbWVzdGFtcE1zfSlgO1xuICBjb25zdCB0aWNrRXYgPSBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChleHByKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW3dpdGhUaW1lb3V0KHRpY2tFdiwgNV8wMDAsIFwidGljay5leGVjdXRlSmF2YVNjcmlwdFwiKSwgYWR2YW5jZVZpZGVvcyhhcmdzKV0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8yMy5cblxuaW1wb3J0IHsgRGVtdXhlciwgdHlwZSBEZW11eGVyT3B0aW9ucyB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuXG4vLyBmZm1wZWcgcmVhZC93cml0ZSBkZWFkbGluZSAowrVzKTsgYSBibG9ja2luZyBvcGVuIGlnbm9yZXMgQWJvcnRTaWduYWwsIHNvIHRoaXMgYm91bmRzIGEgc3R1Y2sgQ0ROLlxuY29uc3QgUldfVElNRU9VVF9VUyA9IFwiODAwMDAwMFwiO1xuXG4vLyBmZm1wZWcgb3BlbnMgaHR0cC9odHRwcyB3aXRoIG5hdGl2ZSBieXRlLXJhbmdlIHJlcXVlc3RzLCBzbyBvbmx5IHRoZSBkZWNvZGVkIHJhbmdlcyBkb3dubG9hZC5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuSW5wdXQoc3JjOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxEZW11eGVyPiB7XG4gIGNvbnN0IG9wdGlvbnM6IERlbXV4ZXJPcHRpb25zID0geyBzaWduYWwsIG9wdGlvbnM6IHsgcndfdGltZW91dDogUldfVElNRU9VVF9VUyB9IH07XG4gIHJldHVybiBEZW11eGVyLm9wZW4oc3JjLCBvcHRpb25zKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMjUuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgRGVjb2RlciwgRmlsdGVyQVBJIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb2RlZEZyYW1lIHtcbiAgaWR4OiBudW1iZXI7XG4gIGJ1ZjogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlY29kZUZyYW1lc09wdGlvbnMge1xuICBzcmM6IHN0cmluZztcbiAgbWV0YTogVmlkZW9NZXRhO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xufVxuXG4vLyBEZWNvZGUgYSBzb3VyY2UgdG8gZnBzLXJlc2FtcGxlZCwgZGlzcGxheS1zY2FsZWQsIHRpZ2h0LVJHQkEgZnJhbWVzIGluIG9yZGVyIChpZHggPSAxLWJhc2VkIGRlY29kZSBwb3NpdGlvbikuIENvbnN1bWVyIGJhY2twcmVzc3VyZSBpcyBqdXN0IHB1bGxpbmcgc2xvd2VyLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBkZWNvZGVGcmFtZXMoeyBzcmMsIG1ldGEsIHNpZ25hbCB9OiBEZWNvZGVGcmFtZXNPcHRpb25zKTogQXN5bmNHZW5lcmF0b3I8RGVjb2RlZEZyYW1lPiB7XG4gIGF3YWl0IHVzaW5nIGlucHV0ID0gYXdhaXQgb3BlbklucHV0KHNyYywgc2lnbmFsKTtcbiAgY29uc3Qgc3RyZWFtID0gaW5wdXQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gdmlkZW8gc3RyZWFtXCIpO1xuICB9XG4gIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyBzaWduYWwgfSk7XG4gIGNvbnN0IHsgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIHdpZHRoLCBoZWlnaHQsIGZwcyB9ID0gbWV0YTtcbiAgY29uc3Qgc2NhbGUgPSBmcmFtZVdpZHRoICE9PSB3aWR0aCB8fCBmcmFtZUhlaWdodCAhPT0gaGVpZ2h0ID8gYHNjYWxlPSR7ZnJhbWVXaWR0aH06JHtmcmFtZUhlaWdodH0sYCA6IFwiXCI7XG4gIHVzaW5nIGZpbHRlciA9IEZpbHRlckFQSS5jcmVhdGUoYGZwcz0ke2Zwc30sJHtzY2FsZX1mb3JtYXQ9cmdiYWAsIHsgc2lnbmFsIH0pO1xuICBsZXQgayA9IDA7XG4gIGZvciBhd2FpdCAodXNpbmcgZnJhbWUgb2YgZmlsdGVyLmZyYW1lcyhkZWMuZnJhbWVzKGlucHV0LnBhY2tldHMoc3RyZWFtLmluZGV4KSkpKSB7XG4gICAgaWYgKCFmcmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHlpZWxkIHsgaWR4OiArK2ssIGJ1ZjogcGFja1JnYmEoZnJhbWUpIH07XG4gIH1cbn1cblxuLy8gVGlnaHQgUkdCQSBjb3B5IChkcm9wIGxpYmF2IHJvdyBwYWRkaW5nKSBzbyB0aGUgcGFnZSBjYW4gd3JhcCBpdCBzdHJhaWdodCBpbnRvIEltYWdlRGF0YS5cbmZ1bmN0aW9uIHBhY2tSZ2JhKGZyYW1lOiBGcmFtZSk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJvdyA9IGZyYW1lLndpZHRoICogNDtcbiAgY29uc3Qgc3RyaWRlID0gZnJhbWUubGluZXNpemVbMF0hO1xuICBjb25zdCBzcmMgPSBmcmFtZS5kYXRhIVswXSE7XG4gIGlmIChzdHJpZGUgPT09IHJvdykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShzcmMuc3ViYXJyYXkoMCwgcm93ICogZnJhbWUuaGVpZ2h0KSk7XG4gIH1cbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKHJvdyAqIGZyYW1lLmhlaWdodCk7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgZnJhbWUuaGVpZ2h0OyB5KyspIHtcbiAgICBzcmMuY29weShvdXQsIHkgKiByb3csIHkgKiBzdHJpZGUsIHkgKiBzdHJpZGUgKyByb3cpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBkZWNvZGVGcmFtZXMgfSBmcm9tIFwiLi9kZWNvZGVcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0RlY29kZVNlc3Npb25dXCI7XG5jb25zdCBERUNPREVfQUhFQUQgPSA0OyAvLyBkZWNvZGUgYSBmZXcgZnJhbWVzIHBhc3QgdGhlIGhpZ2hlc3QgcmVxdWVzdDsgdGhlIHBhZ2UgYWxyZWFkeSBwcmVmZXRjaGVzXG5jb25zdCBLRUVQX0JFSElORCA9IDE2OyAvLyBtaW4gZnJhbWVzIGhlbGQgYmVoaW5kIHRoZSBoZWFkOyBtdXN0IGV4Y2VlZCB0aGUgcGFnZSdzIHByZWZldGNoIGxlYWQgKEFIRUFEPTEwKVxuY29uc3QgTUVNT1JZX0JVREdFVCA9IDI1NiAqIDEwMjQgKiAxMDI0OyAvLyByZXRhaW4gZGVjb2RlZCBmcmFtZXMgdXAgdG8gdGhpcyBwZXItc2Vzc2lvbiBidWRnZXQgc28gYSBzbWFsbCBsb29waW5nIHZpZGVvIHJlLXNlcnZlcyBmcm9tIG1lbW9yeSBpbnN0ZWFkIG9mIHJlLWRlY29kaW5nXG5jb25zdCBNQVhfUEFTU19SRVRSWSA9IDM7IC8vIHJlLW9wZW4gYSBzdHJlYW1lZCBzb3VyY2UgdGhpcyBtYW55IHRpbWVzIG9uIGEgdHJhbnNpZW50IGRlY29kZSBlcnJvciBiZWZvcmUgcmVwb3J0aW5nIGVuZC1vZi1zdHJlYW1cblxuaW50ZXJmYWNlIFdhaXRlciB7XG4gIGlkeDogbnVtYmVyO1xuICByZXNvbHZlOiAoYjogQnVmZmVyKSA9PiB2b2lkO1xufVxuXG4vLyBEZW1hbmQtZHJpdmVuIGluLXByb2Nlc3MgZGVjb2RlIChEZW11eGVy4oaSRGVjb2RlcuKGkmZwcy9zY2FsZS9yZ2JhIGZpbHRlcikgc2VydmluZyBmcmFtZSBOIGFzIHRpZ2h0IFJHQkE7IGZvcndhcmQtb25seSDigJQgYSBsb29wL3Jld2luZCByZS1kZWNvZGVzIGZyb20gZnJhbWUgMSB1bmxlc3MgdGhlIHdob2xlIGNsaXAgc3RpbGwgZml0cyB0aGUgbWVtb3J5IGJ1ZGdldC5cbmV4cG9ydCBjbGFzcyBEZWNvZGVTZXNzaW9uIHtcbiAgcHJpdmF0ZSBfYnVmID0gbmV3IE1hcDxudW1iZXIsIEJ1ZmZlcj4oKTtcbiAgcHJpdmF0ZSBfcmVhZHkgPSAwO1xuICBwcml2YXRlIF93YW50ID0gMTtcbiAgcHJpdmF0ZSBfZG9uZSA9IGZhbHNlO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZ2VuID0gMDtcbiAgcHJpdmF0ZSBfY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcHJpdmF0ZSBfd2FpdGVycyA9IG5ldyBTZXQ8V2FpdGVyPigpO1xuICBwcml2YXRlIF9yZXN1bWU6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfcmVzdGFydDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAvLyBMZWFkIGZyYW1lcyBoZWxkIG9uIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWU7IGNvbnRlbnQgaWR4IGlzIG9mZnNldCBwYXN0IHRoZW0uXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xlYWRGcmFtZXM6IG51bWJlcjtcbiAgLy8gRnJhbWVzIGtlcHQgYmVoaW5kIHRoZSBoZWFkOyBhIGNsaXAgdGhhdCBmaXRzIHRoZSBidWRnZXQgcmV0YWlucyBldmVyeSBmcmFtZSwgc28gbG9vcHMgcmUtc2VydmUgZnJvbSBtZW1vcnkuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2tlZXBDb3VudDogbnVtYmVyO1xuICAvLyBSZXNvbHZlcyB3aGVuIHB1bXAoKSBmdWxseSB1bndpbmRzIOKAlCBhd2FpdGVkIG9uIGNsb3NlIHNvIG5vZGUtYXYgZ2VuZXJhdG9ycyBmcmVlIGJlZm9yZSBwcm9jZXNzIHRlYXJkb3duLlxuICBwcml2YXRlIHJlYWRvbmx5IF9wdW1wRG9uZTogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtZXRhOiBWaWRlb01ldGEsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3JjOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuX2xlYWRGcmFtZXMgPSBNYXRoLnJvdW5kKG1ldGEubGVhZEdhcCAqIG1ldGEuZnBzKTtcbiAgICB0aGlzLl9rZWVwQ291bnQgPSBNYXRoLm1heChLRUVQX0JFSElORCwgTWF0aC5mbG9vcihNRU1PUllfQlVER0VUIC8gKG1ldGEuZnJhbWVXaWR0aCAqIG1ldGEuZnJhbWVIZWlnaHQgKiA0KSkpO1xuICAgIHRoaXMuX3B1bXBEb25lID0gdGhpcy5wdW1wKCk7XG4gIH1cblxuICBhc3luYyBnZXRGcmFtZShpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKGlkeCA8IDEpIHtcbiAgICAgIGlkeCA9IDE7XG4gICAgfVxuICAgIGlmIChpZHggPD0gdGhpcy5fbGVhZEZyYW1lcykge1xuICAgICAgaWR4ID0gdGhpcy5fbGVhZEZyYW1lcyArIDE7IC8vIGhvbGQgdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZSBhY3Jvc3MgdGhlIGxlYWRcbiAgICB9XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fYnVmLmdldChpZHgpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kb25lICYmIGlkeCA+IHRoaXMuX3JlYWR5KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApOyAvLyBiZXlvbmQgZW5kIG9mIHN0cmVhbVxuICAgIH1cbiAgICBpZiAoaWR4ID4gdGhpcy5fcmVhZHkpIHtcbiAgICAgIC8vIGZvcndhcmQsIG5vdCB5ZXQgZGVjb2RlZCBpbiB0aGlzIHBhc3NcbiAgICAgIGlmIChpZHggPiB0aGlzLl93YW50KSB7XG4gICAgICAgIHRoaXMuX3dhbnQgPSBpZHg7XG4gICAgICB9XG4gICAgICB0aGlzLndha2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRXZpY3RlZCAobG9vcC9yZXdpbmQpOiBjbGVhciByZWFkeS9kb25lIHN5bmNocm9ub3VzbHkgc28gdGhlIHdyYXAncyBwcmVmZXRjaCBidXJzdCBjb2FsZXNjZXMgaW50byBvbmUgcmVzdGFydCwgbm90IG9uZSBwZXIgZnJhbWUuXG4gICAgICB0aGlzLl9yZWFkeSA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLl93YW50ID0gaWR4O1xuICAgICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53YWl0KGlkeCk7XG4gIH1cblxuICAvLyBBd2FpdCB0aGUgcHVtcCBzbyB0aGUgbm9kZS1hdiBkZW11eGVyL2RlY29kZXIgZ2VuZXJhdG9ycyB1bndpbmQgKGNvbnRleHRzIGZyZWVkKSBiZWZvcmUgdGhlIGNhbGxlciBleGl0cy5cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgICB0aGlzLl9jdHJsLmFib3J0KCk7XG4gICAgdGhpcy53YWtlKCk7XG4gICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIGZvciAoY29uc3QgdyBvZiB0aGlzLl93YWl0ZXJzKSB7XG4gICAgICB3LnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGVycy5jbGVhcigpO1xuICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgIGF3YWl0IHRoaXMuX3B1bXBEb25lO1xuICB9XG5cbiAgLy8gLWQtb25seSBzdWJzeXN0ZW0sIHNvIG5ldmVyIHRpbWUgb3V0OiBkcmFpbldhaXRlcnMgcmVzb2x2ZXMgb24gZGVjb2RlLCBFT0YsIG9yIGNsb3NlIOKAlCBvdXRwdXQgbmV2ZXIgZGVwZW5kcyBvbiBmZXRjaCBsYXRlbmN5LlxuICBwcml2YXRlIHdhaXQoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlKSA9PiB0aGlzLl93YWl0ZXJzLmFkZCh7IGlkeCwgcmVzb2x2ZSB9KSk7XG4gIH1cblxuICBwcml2YXRlIHdha2UoKTogdm9pZCB7XG4gICAgY29uc3QgciA9IHRoaXMuX3Jlc3VtZTtcbiAgICB0aGlzLl9yZXN1bWUgPSB1bmRlZmluZWQ7XG4gICAgcj8uKCk7XG4gIH1cblxuICAvLyBJbnZhbGlkYXRlIHRoZSBydW5uaW5nIHBhc3MgKG9yIHdha2UgYSBwYXJrZWQgb25lKSBzbyBwdW1wKCkgc3RhcnRzIGEgZnJlc2ggZGVjb2RlIGZyb20gZnJhbWUgMS5cbiAgcHJpdmF0ZSByZXF1ZXN0UmVzdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9nZW4rKztcbiAgICBjb25zdCByID0gdGhpcy5fcmVzdGFydDtcbiAgICB0aGlzLl9yZXN0YXJ0ID0gdW5kZWZpbmVkO1xuICAgIHI/LigpO1xuICAgIHRoaXMud2FrZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwdW1wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBmYWlscyA9IDA7XG4gICAgd2hpbGUgKCF0aGlzLl9jbG9zZWQpIHtcbiAgICAgIGNvbnN0IGdlbiA9IHRoaXMuX2dlbjtcbiAgICAgIHRoaXMuX3JlYWR5ID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgICAgbGV0IGZhaWxlZCA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWNvZGVQYXNzKGdlbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuKSB7XG4gICAgICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIFRBRyxcbiAgICAgICAgICAgIGBbJHt0aGlzLm1ldGEuaWQuc2xpY2UoMCwgOCl9XSBkZWNvZGUgcGFzcyBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICBmYWlscyA9IDA7XG4gICAgICAgIGNvbnRpbnVlOyAvLyByZXN0YXJ0IHJlcXVlc3RlZCBtaWQtcGFzc1xuICAgICAgfVxuICAgICAgLy8gQSB0aHJvd24gcGFzcyBpcyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgKGUuZy4gYSBzdHJlYW1lZCBsb29wIHJlLW9wZW4pOyByZXRyeSBpbnN0ZWFkIG9mIHJlcG9ydGluZyBFT0YsIHdoaWNoIHdvdWxkIGJsYW5rIHRoZSBmcmFtZS5cbiAgICAgIGlmIChmYWlsZWQgJiYgKytmYWlscyA8PSBNQVhfUEFTU19SRVRSWSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZhaWxzID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5kcmFpbldhaXRlcnMoKTtcbiAgICAgIGF3YWl0IHRoaXMudW50aWxSZXN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWNvZGVQYXNzKGdlbjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3RyZWFtID0gZGVjb2RlRnJhbWVzKHsgc3JjOiB0aGlzLl9zcmMsIG1ldGE6IHRoaXMubWV0YSwgc2lnbmFsOiB0aGlzLl9jdHJsLnNpZ25hbCB9KTtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHsgaWR4LCBidWYgfSBvZiBzdHJlYW0pIHtcbiAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgdGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYXQgPSB0aGlzLl9sZWFkRnJhbWVzICsgaWR4OyAvLyBtYXAgZGVjb2RlIHBvc2l0aW9uIHBhc3QgdGhlIGhlbGQgbGVhZC1nYXAgZnJhbWVzXG4gICAgICB3aGlsZSAoIXRoaXMuX2Nsb3NlZCAmJiB0aGlzLl9nZW4gPT09IGdlbiAmJiBhdCA+IHRoaXMuZGVtYW5kICsgREVDT0RFX0FIRUFEKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucGF1c2UoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgdGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fYnVmLnNldChhdCwgYnVmKTtcbiAgICAgIHRoaXMuX3JlYWR5ID0gYXQ7XG4gICAgICAvLyBEcmFpbiBiZWZvcmUgZXZpY3Q6IHdpdGggd2FudCBmYXIgYWhlYWQgdGhlIGZsb29yIGNvdmVycyB0aGlzIGZyYW1lLCBhbmQgZXZpY3RpbmcgaXQgZmlyc3Qgc3RhcnZlcyBpdHMgd2FpdGVyIGZvcmV2ZXIuXG4gICAgICB0aGlzLmRyYWluV2FpdGVycygpO1xuICAgICAgdGhpcy5ldmljdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdhaXRlcnMgdGhhdCBzdXJ2aXZlZCBhIHJld2luZCByZXN0YXJ0IGFyZSBzdGlsbCBkZW1hbmQ7IGlnbm9yaW5nIHRoZW0gcGFya3MgdGhlIHBhc3MgYW5kIHN0YXJ2ZXMgdGhlbSBmb3JldmVyLlxuICBwcml2YXRlIGdldCBkZW1hbmQoKTogbnVtYmVyIHtcbiAgICBsZXQgZCA9IHRoaXMuX3dhbnQ7XG4gICAgZm9yIChjb25zdCB3IG9mIHRoaXMuX3dhaXRlcnMpIHtcbiAgICAgIGlmICh3LmlkeCA+IGQpIHtcbiAgICAgICAgZCA9IHcuaWR4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZDtcbiAgfVxuXG4gIHByaXZhdGUgcGF1c2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICB0aGlzLl9yZXN1bWUgPSByO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUGFyayB1bnRpbCBhIGxvb3AvYmFja3dhcmQgcmVxdWVzdCAob3IgY2xvc2UpIGNhbGxzIHJlcXVlc3RSZXN0YXJ0KCkuXG4gIHByaXZhdGUgdW50aWxSZXN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICB0aGlzLl9yZXN0YXJ0ID0gcjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXZpY3QoKTogdm9pZCB7XG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLl93YW50IC0gdGhpcy5fa2VlcENvdW50O1xuICAgIGZvciAoY29uc3QgayBvZiB0aGlzLl9idWYua2V5cygpKSB7XG4gICAgICBpZiAoayA8IGZsb29yKSB7XG4gICAgICAgIHRoaXMuX2J1Zi5kZWxldGUoayk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbldhaXRlcnMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBbLi4udGhpcy5fd2FpdGVyc10pIHtcbiAgICAgIGNvbnN0IGhpdCA9IHRoaXMuX2J1Zi5nZXQoZW50cnkuaWR4KTtcbiAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgdGhpcy5fd2FpdGVycy5kZWxldGUoZW50cnkpO1xuICAgICAgICBlbnRyeS5yZXNvbHZlKGhpdCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgICAgdGhpcy5fd2FpdGVycy5kZWxldGUoZW50cnkpO1xuICAgICAgICBlbnRyeS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBEZWNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG9wZW5JbnB1dCB9IGZyb20gXCIuL29wZW5cIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9iZVJlc3VsdCB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICAvKiogUFRTIChzKSBvZiB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lOyBhIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBydW4gaXMgaGVsZCBvbiBpdCwgbGlrZSBDaHJvbWUuICovXG4gIGxlYWRHYXA6IG51bWJlcjtcbn1cblxuLy8gTm8gd2FsbC1jbG9jayBjYXA6IG9wZW5JbnB1dCdzIHBlci1yZWFkIHJ3X3RpbWVvdXQgYm91bmRzIGEgc3R1Y2sgc291cmNlLCBhbmQgdGhlIGNhbGxlciByZXRyaWVzIG9uIHRocm93LlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2JlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxQcm9iZVJlc3VsdD4ge1xuICBhd2FpdCB1c2luZyBkID0gYXdhaXQgb3BlbklucHV0KHNyYyk7XG4gIGNvbnN0IHN0cmVhbSA9IGQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwicHJvYmU6IG5vIHZpZGVvIHN0cmVhbVwiKTtcbiAgfVxuICBjb25zdCBkdXJhdGlvbiA9IGQuZHVyYXRpb24gPiAwID8gZC5kdXJhdGlvbiA6IDA7XG4gIGNvbnN0IHRiID0gc3RyZWFtLnRpbWVCYXNlLm51bSAvIHN0cmVhbS50aW1lQmFzZS5kZW47XG4gIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyB0aHJlYWRDb3VudDogMSB9KTtcbiAgbGV0IGxlYWRHYXAgPSAwO1xuICAvLyBGaXJzdCBjbGVhbiBmcmFtZSdzIFBUUyA9IHdoZXJlIGNvbnRlbnQgYmVnaW5zOyBza2lwIGNvcnJ1cHQgZnJhbWVzIGxpa2UgYSBicm93c2VyLlxuICBvdXRlcjogZm9yIGF3YWl0ICh1c2luZyBwa3Qgb2YgZC5wYWNrZXRzKHN0cmVhbS5pbmRleCkpIHtcbiAgICB0cnkge1xuICAgICAgZm9yIGF3YWl0ICh1c2luZyBmcmFtZSBvZiBkZWMuZnJhbWVzKHBrdCkpIHtcbiAgICAgICAgaWYgKGZyYW1lPy5kZWNvZGVFcnJvckZsYWdzICE9PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGVhZEdhcCA9IE1hdGgubWF4KDAsIE51bWJlcihmcmFtZS5wdHMpICogdGIpO1xuICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGNvcnJ1cHQgcGFja2V0IOKAlCBza2lwIHRvIHRoZSBuZXh0XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHdpZHRoOiBzdHJlYW0uY29kZWNwYXIud2lkdGgsIGhlaWdodDogc3RyZWFtLmNvZGVjcGFyLmhlaWdodCwgZHVyYXRpb24sIGxlYWRHYXAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMDYuXG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyByZWFkRmlsZSwgcm0gfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb2RlYywgRkZtcGVnRXJyb3IsIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfWVVWNDIwUCwgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBGRl9FTkNPREVSX0xJQlZQWF9WUDksIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuLi8uLi9iYXNlL2VuY29kZXIvbWlzY1wiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9lbmNvZGVyL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3R1YkVuY29kZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuLy8gUmVhbCBwYXJzZWFibGUgbWVkaWEgd2l0aCB0aGUgc291cmNlJ3MgaW50cmluc2ljIHNpemUgKyBkdXJhdGlvbiwgc28gQmxpbmsgbGF5cyBvdXQgbGlrZSBDaHJvbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jb2RlU3R1YldlYm0oeyB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiB9OiBTdHViRW5jb2RlT3B0aW9ucyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9MSUJWUFhfVlA5KTtcbiAgaWYgKCFjb2RlYykge1xuICAgIHRocm93IG5ldyBFcnJvcihgc3R1YjogZW5jb2RlciBub3QgZm91bmQ6ICR7RkZfRU5DT0RFUl9MSUJWUFhfVlA5fWApO1xuICB9XG4gIGNvbnN0IHBhdGggPSBqb2luKHRtcGRpcigpLCBgcHVwX3N0dWJfJHtyYW5kb21CeXRlcyg4KS50b1N0cmluZyhcImhleFwiKX0ud2VibWApO1xuICB0cnkge1xuICAgIHtcbiAgICAgIGF3YWl0IHVzaW5nIG11eGVyID0gbmV3IEZvcm1hdE11eGVyKHBhdGgpO1xuICAgICAgLy8gVGltZWJhc2UgMS8xMDAwIChmcHMgcGFyYW0pIGxldHMgb25lIHBhY2tldCBjYXJyeSB0aGUgZnVsbCBzb3VyY2UgZHVyYXRpb24gaW4gbXMuXG4gICAgICB1c2luZyBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICAgIHtcbiAgICAgICAgICBjb2RlYyxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgZnBzOiAxMDAwLFxuICAgICAgICAgIGJpdHJhdGU6IDEwMF8wMDAsXG4gICAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgICAgICAgICBvcHRpb25zOiB7IGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsIFwiY3B1LXVzZWRcIjogXCI4XCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdHViQ3R4Lm9wZW4yXCIsXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgICB1c2luZyBzdHViID0gbmV3IFN0dWJGcmFtZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNvbnN0IG1zID0gQmlnSW50KE1hdGgubWF4KDEsIE1hdGgucm91bmQoZHVyYXRpb24gKiAxMDAwKSkpO1xuICAgICAgc3R1Yi5mcmFtZS5wdHMgPSAwbjtcbiAgICAgIHN0dWIuZnJhbWUuZHVyYXRpb24gPSBtcztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHguc2VuZEZyYW1lKHN0dWIuZnJhbWUpLCBcInN0dWJDdHguc2VuZEZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5zZW5kRnJhbWUobnVsbCksIFwic3R1YkN0eC5mbHVzaFwiKTtcbiAgICAgIHVzaW5nIHBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJzdHViQ3R4LnJlY2VpdmVQYWNrZXRcIik7XG4gICAgICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgICAgcGt0LmR1cmF0aW9uID0gbXM7XG4gICAgICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgICAgICBwa3QudW5yZWYoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHJlYWRGaWxlKHBhdGgpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cblxuLy8gT3ducyB0aGUgYmxhY2sgcGl4ZWwgYnVmZmVyIEFORCBpdHMgemVyby1jb3B5IGZyYW1lIHZpZXcg4oCUIGB1c2luZ2AgcGlucyBib3RoIHVudGlsIGFmdGVyIGVuY29kZS5cbmNsYXNzIFN0dWJGcmFtZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBmcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1ZjogQnVmZmVyO1xuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgbHVtYSA9IHdpZHRoICogaGVpZ2h0O1xuICAgIGNvbnN0IGNocm9tYSA9IE1hdGguY2VpbCh3aWR0aCAvIDIpICogTWF0aC5jZWlsKGhlaWdodCAvIDIpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5hbGxvYyhsdW1hICsgY2hyb21hICogMiwgMHg4MCk7XG4gICAgdGhpcy5fYnVmLmZpbGwoMCwgMCwgbHVtYSk7XG4gICAgdGhpcy5mcmFtZSA9IEZyYW1lLmZyb21WaWRlb0J1ZmZlcih0aGlzLl9idWYsIHsgd2lkdGgsIGhlaWdodCwgZm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSk7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuZnJhbWVbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uLy4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwgfSBmcm9tIFwiLi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgRGVjb2RlU2Vzc2lvbiB9IGZyb20gXCIuL2RlY29kZV9zZXNzaW9uXCI7XG5pbXBvcnQgeyB0eXBlIFByb2JlUmVzdWx0LCBwcm9iZSB9IGZyb20gXCIuL3Byb2JlXCI7XG5pbXBvcnQgeyBlbmNvZGVTdHViV2VibSB9IGZyb20gXCIuL3N0dWJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICAvKiogSW50cmluc2ljIHNvdXJjZSBkaW1lbnNpb25zIChyZXBvcnRlZCBhcyB2aWRlb1dpZHRoL3ZpZGVvSGVpZ2h0KS4gKi9cbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8qKiBEZWNvZGVkK3NjYWxlZCBmcmFtZSBkaW1lbnNpb25zIGFjdHVhbGx5IHNlcnZlZCAo4omkIHNvdXJjZTsgY2FwcGVkIHRvIHRoZSBkaXNwbGF5IGJveCkuICovXG4gIGZyYW1lV2lkdGg6IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIC8qKiBTZWNvbmRzIG9mIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBjb250ZW50IGhlbGQgb24gdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZS4gKi9cbiAgbGVhZEdhcDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5PcHRpb25zIHtcbiAgc3JjOiBzdHJpbmc7XG4gIGZwczogbnVtYmVyO1xuICAvKiogRGlzcGxheS1ib3ggcGl4ZWxzIChjYW52YXMgYmFja2luZyBzdG9yZSk7IGRlY29kZSBpcyBkb3duc2NhbGVkIHRvIGNvdmVyIHRoaXMsIG5ldmVyIHVwc2NhbGVkLiAqL1xuICBkc3RXPzogbnVtYmVyO1xuICBkc3RIPzogbnVtYmVyO1xuICAvKiogb2JqZWN0Rml0OyBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscyBzbyBpdCBza2lwcyBkb3duc2NhbGUuICovXG4gIGZpdD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVudHJ5IHtcbiAgc2Vzc2lvbjogRGVjb2RlU2Vzc2lvbjtcbiAgcmVmczogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhbWVTZXJ2ZXIge1xuICBwcml2YXRlIF9zZXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRyeT4oKTtcbiAgcHJpdmF0ZSBfcHJvYmVzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8UHJvYmVSZXN1bHQ+PigpO1xuICBwcml2YXRlIF9zdHVicyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEJ1ZmZlcj4+KCk7XG4gIHByaXZhdGUgX2Nsb3NlZCA9IGZhbHNlO1xuXG4gIC8vIC1kIGRlY29kZSBieXBhc3NlcyB0aGUgd2luZG93IGludGVyY2VwdG9yLCBzbyBpdCByZW1hcHMgaG9zdHMgaXRzZWxmIHdoZW4gdGhlIGlubmVyIHByb3h5IGlzIG9uLlxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF91c2VJbm5lclByb3h5OiBib29sZWFuKSB7fVxuXG4gIC8vIGNsb3NlZC1jaGVja2VkIGFmdGVyIHByb2JlIHNvIGNsb3NlQWxsKCkgY2FuJ3QgcmFjZSBhIHNsb3cgb3BlbiBpbnRvIGEgbGVha2VkIHNlc3Npb24uXG4gIGFzeW5jIG9wZW4ob3B0czogT3Blbk9wdGlvbnMpOiBQcm9taXNlPFZpZGVvTWV0YT4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IGtleShvcHRzKTtcbiAgICBjb25zdCBoaXQgPSB0aGlzLl9zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIGhpdC5yZWZzKys7XG4gICAgICByZXR1cm4gaGl0LnNlc3Npb24ubWV0YTtcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gdGhpcy5fdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwob3B0cy5zcmMpIDogb3B0cy5zcmM7XG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IHRoaXMucHJvYmVDYWNoZWQoc3JjKTtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcmFtZS1zZXJ2ZXI6IGNsb3NlZFwiKTtcbiAgICB9XG4gICAgbGV0IGZyYW1lV2lkdGggPSBpbmZvLndpZHRoO1xuICAgIGxldCBmcmFtZUhlaWdodCA9IGluZm8uaGVpZ2h0O1xuICAgIC8vIERvd25zY2FsZSB0byBjb3ZlciB0aGUgZGlzcGxheSBib3ggKG5ldmVyIHVwc2NhbGUpOyBvYmplY3RGaXQgXCJub25lXCIgbmVlZHMgMToxIG5hdGl2ZSBwaXhlbHMuXG4gICAgaWYgKG9wdHMuZHN0VyAmJiBvcHRzLmRzdEggJiYgb3B0cy5maXQgIT09IFwibm9uZVwiKSB7XG4gICAgICBjb25zdCBzID0gTWF0aC5taW4oMSwgTWF0aC5tYXgob3B0cy5kc3RXIC8gaW5mby53aWR0aCwgb3B0cy5kc3RIIC8gaW5mby5oZWlnaHQpKTtcbiAgICAgIGZyYW1lV2lkdGggPSBldmVuKGluZm8ud2lkdGggKiBzKTtcbiAgICAgIGZyYW1lSGVpZ2h0ID0gZXZlbihpbmZvLmhlaWdodCAqIHMpO1xuICAgIH1cbiAgICBjb25zdCBtZXRhOiBWaWRlb01ldGEgPSB7XG4gICAgICBpZCxcbiAgICAgIHdpZHRoOiBpbmZvLndpZHRoLFxuICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgIGZyYW1lV2lkdGgsXG4gICAgICBmcmFtZUhlaWdodCxcbiAgICAgIGZwczogb3B0cy5mcHMsXG4gICAgICBkdXJhdGlvbjogaW5mby5kdXJhdGlvbixcbiAgICAgIGxlYWRHYXA6IGluZm8ubGVhZEdhcCxcbiAgICB9O1xuICAgIHRoaXMuX3Nlc3Npb25zLnNldChpZCwgeyBzZXNzaW9uOiBuZXcgRGVjb2RlU2Vzc2lvbihtZXRhLCBzcmMpLCByZWZzOiAxIH0pO1xuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5pc3RpYyBtZWRpYSByZXF1ZXN0cyByZWRpcmVjdCBoZXJlOiByZWFsIHBhcnNlYWJsZSBieXRlcyB3aXRoIHRydWUgaW50cmluc2ljIHNpemUgKyBkdXJhdGlvbi5cbiAgc3R1YihzcmM6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlYWwgPSB0aGlzLl91c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzcmMpIDogc3JjO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3N0dWJzLmdldChyZWFsKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICByZXR1cm4gaGl0O1xuICAgIH1cbiAgICBjb25zdCBwID0gdGhpcy5wcm9iZUNhY2hlZChyZWFsKS50aGVuKChpbmZvKSA9PlxuICAgICAgZW5jb2RlU3R1YldlYm0oe1xuICAgICAgICB3aWR0aDogaW5mby53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgICAgZHVyYXRpb246IGluZm8uZHVyYXRpb24sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fc3R1YnMuZGVsZXRlKHJlYWwpKTtcbiAgICB0aGlzLl9zdHVicy5zZXQocmVhbCwgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBnZXRGcmFtZShpZDogc3RyaW5nLCBpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgZSA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgfVxuICAgIHJldHVybiBlLnNlc3Npb24uZ2V0RnJhbWUoaWR4KTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKC0tZS5yZWZzID4gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZXNzaW9ucy5kZWxldGUoaWQpO1xuICAgIGF3YWl0IGUuc2Vzc2lvbi5jbG9zZSgpO1xuICB9XG5cbiAgLy8gRmFpbGVkIHByb2JlcyBldmljdCBzbyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgY2FuIHJldHJ5IG9uIHRoZSBuZXh0IHJlcXVlc3QuXG4gIHByaXZhdGUgcHJvYmVDYWNoZWQoc3JjOiBzdHJpbmcpOiBQcm9taXNlPFByb2JlUmVzdWx0PiB7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fcHJvYmVzLmdldChzcmMpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGNvbnN0IHAgPSB1c2VSZXRyeSh7IGZuOiBwcm9iZSB9KShzcmMpO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fcHJvYmVzLmRlbGV0ZShzcmMpKTtcbiAgICB0aGlzLl9wcm9iZXMuc2V0KHNyYywgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBhc3luYyBjbG9zZUFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHNlc3Npb25zID0gWy4uLnRoaXMuX3Nlc3Npb25zLnZhbHVlcygpXTtcbiAgICB0aGlzLl9zZXNzaW9ucy5jbGVhcigpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHNlc3Npb25zLm1hcCgoZSkgPT4gZS5zZXNzaW9uLmNsb3NlKCkpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBrZXkob3B0czogT3Blbk9wdGlvbnMpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlSGFzaChcInNoYTFcIilcbiAgICAudXBkYXRlKGAke29wdHMuc3JjfXwke29wdHMuZnBzfXwke29wdHMuZHN0VyA/PyBcIlwifXwke29wdHMuZHN0SCA/PyBcIlwifXwke29wdHMuZml0ID8/IFwiXCJ9YClcbiAgICAuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG4vLyBSb3VuZCBkb3duIHRvIGFuIGV2ZW4gaW50ZWdlciAo4omlMikgZm9yIHRoZSBzY2FsZXIuXG5mdW5jdGlvbiBldmVuKG46IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHIgPSBNYXRoLnJvdW5kKG4pO1xuICByZXR1cm4gTWF0aC5tYXgoMiwgciAtIChyICUgMikpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEZyYW1lU2VydmVyLCB0eXBlIFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuXG5jb25zdCBUQUcgPSBcIltGcmFtZVByb3RvY29sXVwiO1xuXG4vLyBTY2hlbWUgaXMgcmVnaXN0ZXJlZCBhbG9uZ3NpZGUgYHB1cGAgaW4gcmVuZGVyZXIvcHJvdG9jb2wudHMgKHNpbmdsZSBjYWxsIG9ubHkpLlxuY29uc3QgU0NIRU1FID0gXCJwdXAtZnJhbWVcIjtcblxuY29uc3QgQ09SU19IRUFERVJTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpblwiOiBcIipcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1tZXRob2RzXCI6IFwiR0VULCBPUFRJT05TXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiOiBcIipcIixcbn07XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS4gRGV0ZXJtaW5pc3RpYy1vbmx5IChyZWFsLXRpbWUgdmlkZW9zIHNlbGYtdGljaywgbm8gZnJhbWUgcHJvdG9jb2wpLlxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZyYW1lUHJvdG9jb2wodXNlSW5uZXJQcm94eTogYm9vbGVhbik6IEFzeW5jRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGZzID0gbmV3IEZyYW1lU2VydmVyKHVzZUlubmVyUHJveHkpO1xuICBwcm90b2NvbC5oYW5kbGUoU0NIRU1FLCBhc3luYyAocmVxKSA9PiB7XG4gICAgaWYgKHJlcS5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSB7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgJHtyZXEubWV0aG9kfSAke3VybC5ob3N0bmFtZX0ke3VybC5zZWFyY2h9YCk7XG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgICAgcmV0dXJuIGpzb25PayhcbiAgICAgICAgICAgIGF3YWl0IGZzLm9wZW4oe1xuICAgICAgICAgICAgICBzcmM6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCIsXG4gICAgICAgICAgICAgIGZwczogaW50KHVybCwgXCJmcHNcIiwgMzApLFxuICAgICAgICAgICAgICBkc3RXOiBpbnQodXJsLCBcIndcIiwgMCksXG4gICAgICAgICAgICAgIGRzdEg6IGludCh1cmwsIFwiaFwiLCAwKSxcbiAgICAgICAgICAgICAgZml0OiB1cmwuc2VhcmNoUGFyYW1zLmdldChcImZpdFwiKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiZnJhbWVcIjpcbiAgICAgICAgICByZXR1cm4gcmdiYU9rKGF3YWl0IGZzLmdldEZyYW1lKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIiwgaW50KHVybCwgXCJpZHhcIiwgMSkpKTtcbiAgICAgICAgY2FzZSBcInN0dWJcIjpcbiAgICAgICAgICByZXR1cm4gd2VibU9rKGF3YWl0IGZzLnN0dWIodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIikpO1xuICAgICAgICBjYXNlIFwiY2xvc2VcIjpcbiAgICAgICAgICBhd2FpdCBmcy5jbG9zZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoYHVua25vd24gYWN0aW9uOiAke3VybC5ob3N0bmFtZX1gLCB7XG4gICAgICAgICAgICBzdGF0dXM6IDQwNCxcbiAgICAgICAgICAgIGhlYWRlcnM6IENPUlNfSEVBREVSUyxcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBtc2cgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBgJHt1cmwuaG9zdG5hbWV9IGZhaWxlZCR7dXJsLnNlYXJjaH06ICR7bXNnfWApO1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtc2csIHsgc3RhdHVzOiA1MDAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvdG9jb2wudW5oYW5kbGUoU0NIRU1FKTtcbiAgICAgIGF3YWl0IGZzLmNsb3NlQWxsKCk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24ganNvbk9rKG1ldGE6IFZpZGVvTWV0YSk6IFJlc3BvbnNlIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShtZXRhKSwge1xuICAgIGhlYWRlcnM6IHsgLi4uQ09SU19IRUFERVJTLCBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICB9KTtcbn1cblxuLy8gQ2FjaGVkIHN0dWIgQnVmZmVyIGlzIHNoYXJlZCBhY3Jvc3MgcmVzcG9uc2VzIOKAlCBjb3B5IHNvIGEgY29uc3VtZXIgY2FuJ3QgZGV0YWNoIGl0LlxuZnVuY3Rpb24gd2VibU9rKGJ5dGVzOiBCdWZmZXIpOiBSZXNwb25zZSB7XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uQ09SU19IRUFERVJTLFxuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ2aWRlby93ZWJtXCIsXG4gICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1zdG9yZVwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vLyBSYXcgUkdCQSBwaXhlbHM7IHRoZSBwYWdlIHdyYXBzIHRoZW0gaW4gSW1hZ2VEYXRhIHVzaW5nIG1ldGEud2lkdGgvaGVpZ2h0IGl0IGdvdCBmcm9tIGBvcGVuYC5cbmZ1bmN0aW9uIHJnYmFPayhieXRlczogQnVmZmVyKTogUmVzcG9uc2Uge1xuICBpZiAoYnl0ZXMuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDQxMCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICB9XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uQ09SU19IRUFERVJTLFxuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixcbiAgICAgIFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGludCh1cmw6IFVSTCwga2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCB2ID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbiAgY29uc3QgbiA9IHYgPyBwYXJzZUludCh2LCAxMCkgOiBOYU47XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogZmFsbGJhY2s7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IEJyb3dzZXJXaW5kb3csIE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBhZHZhbmNlVmlydHVhbFRpbWUsIHBhdXNlVmlydHVhbFRpbWUsIHJlc2l6ZURyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEJMQU5LX1dBUk5fUkFUSU8sIEJsYW5rU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2JsYW5rXCI7XG5pbXBvcnQgeyBEcm9wU3RhdHMsIEpBTktfV0FSTl9TQ09SRSB9IGZyb20gXCIuLi9iYXNlL3F1YWxpdHkvZHJvcFwiO1xuaW1wb3J0IHsgcGVyaW9kaWNhbCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBTY3JlZW5zaG90VGFrZXIgfSBmcm9tIFwiLi9zY3JlZW5zaG90XCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgZHJhd1N0ZWdvLCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCwgd2FpdFN0ZWdvVGljayB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyB0aWNrIH0gZnJvbSBcIi4vdGlja1wiO1xuaW1wb3J0IHsgdXNlRnJhbWVQcm90b2NvbCB9IGZyb20gXCIuL3ZpZGVvL3Byb3RvY29sXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Nob290XVwiO1xuY29uc3QgUkVOREVSX0ZQUyA9IDI0MDtcbmNvbnN0IFBBSU5UX1RJTUVPVVRfTVMgPSAxXzAwMDtcbmNvbnN0IFBBSU5UX0hPTERfTElNSVQgPSAzO1xuXG5pbnRlcmZhY2UgUGFpbnRPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIGZwczogbnVtYmVyO1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIHNpemU6IFNpemU7XG4gIG1zOiBudW1iZXI7XG59XG5cbi8vIFBhaW50aW5nIHN0YXlzIG9uIGZvciB0aGUgd2hvbGUgcnVuOyB3YWl0cyBmb3IgdGhlIGZyYW1lIHdob3NlIHN0ZWdvIHJvdyBtYXRjaGVzIGBtc2AsIHVuZGVmaW5lZCBvbiB0aW1lb3V0LlxuYXN5bmMgZnVuY3Rpb24gcGFpbnQoeyB3aW4sIGZwcywgc2l6ZSwgbXMgfTogUGFpbnRPcHRpb25zKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgbGV0IGNsZWFyRGlydHlDaGVjazogVm9pZEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHQgKyAxIH07XG4gIGNvbnN0IHQwID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoX2U6IHVua25vd24sIF9kOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgICAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAgICAgLy8gTk9URShBdXRva2FrYSk6IFdlIG11c3QgZW5zdXJlIGZyYW1lIGlzIHJlYWR5IG9uIGVsZWN0cm9uIHY0MStcbiAgICAgICAgICByZXNpemVEcmF3YWJsZShjZHAsIGZyYW1lU2l6ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERlY29kZSBmcm9tIGEgMi1yb3cgc2xpdmVyIGZpcnN0OyB0aGUgZnVsbC1mcmFtZSByZWFkYmFjayAofjhNQiBtZW1jcHkpIGlzIHBhaWQgb25seSBvbiB0aGUgbWF0Y2hpbmcgZnJhbWUuXG4gICAgICAgIGNvbnN0IHNsaXZlciA9IGltYWdlLmNyb3AoeyB4OiAwLCB5OiBmcmFtZVNpemUuaGVpZ2h0IC0gMiwgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGNvbnN0IHRzID0gZGVjb2RlU3RlZ28oc2xpdmVyLnRvQml0bWFwKCksIHsgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGlmICh0cyA9PT0gdW5kZWZpbmVkIHx8IE1hdGguYWJzKHRzIC0gbXMpID4gMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIHNpemUuaGVpZ2h0ICogc2l6ZS53aWR0aCAqIDQpKTtcbiAgICAgIH07XG4gICAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgIGNsZWFyRGlydHlDaGVjayA9IHBlcmlvZGljYWwoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAocGVyZm9ybWFuY2Uubm93KCkgLSB0MCA+PSBQQUlOVF9USU1FT1VUX01TKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcGFpbnQgdGltZW91dCBAICR7bXN9YCk7XG4gICAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBibXAgPSBhd2FpdCB3aW4ud2ViQ29udGVudHMuY2FwdHVyZVBhZ2UoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICBpZiAoYm1wICYmICF3aW4uaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgICAgaGFuZGxlcih1bmRlZmluZWQsIHVuZGVmaW5lZCwgYm1wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sIDEwMDAgLyBmcHMpO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyRGlydHlDaGVjaz8uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob290KG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGVzLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcImF1ZGlvIHdpbGwgYmUgaWdub3JlZCBvbiB0aGlzIG1vZGVcIik7XG4gIH1cbiAgY29uc3QgdGFrZXIgPSBuZXcgU2NyZWVuc2hvdFRha2VyKHsgbWFya3M6IG9wdGlvbnMuc2NyZWVuc2hvdHMsIHdpZHRoLCBoZWlnaHQsIG91dEZpbGVzIH0pO1xuXG4gIGF3YWl0IHVzaW5nIF8gPSB1c2VGcmFtZVByb3RvY29sKG9wdGlvbnMudXNlSW5uZXJQcm94eSk7XG4gIGNvbnN0IHRJbml0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IHdpblAgPSBsb2FkV2luZG93KHsgc291cmNlLCByZW5kZXJlcjogb3B0aW9ucywgc2lnbmFsIH0pO1xuICBhd2FpdCB1c2luZyBwaXBlbGluZSA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGVzLCB3aXRoQXVkaW8sIGRpc2FibGVId0NvZGVjIH0pO1xuICBjb25zdCB3aW4gPSBhd2FpdCB3aW5QO1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImluaXQgZG9uZTpcIiwgeyBzb3VyY2UsIGNvc3Q6IE1hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkgLSB0SW5pdCkgfSk7XG5cbiAgY29uc3QgdG90YWwgPSBNYXRoLmNlaWwoZnBzICogZHVyYXRpb24pO1xuICBjb25zdCBmcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBoZWxkID0gMDtcbiAgbGV0IGxhc3RCaXRtYXA6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHNjcmVlbnNob3RzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBjb25zdCBibGFua1N0YXRzID0gbmV3IEJsYW5rU3RhdHMod2lkdGgsIGhlaWdodCk7XG4gIGNvbnN0IGRyb3BTdGF0cyA9IG5ldyBEcm9wU3RhdHMoZnBzKTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICBjb25zdCBtYWluID0gd2luLndlYkNvbnRlbnRzLm1haW5GcmFtZTtcbiAgY29uc3QgaWZyYW1lID0gbWFpbi5mcmFtZXNbMF07XG4gIHRyeSB7XG4gICAgLy8gQ29tcG9zaXRvci9jYXB0dXJlIGNhZGVuY2UgY2FwLCBOT1Qgb3V0cHV0IGZwczsgZnJhbWVzIGFyZSBkYW1hZ2UtZHJpdmVuIHBlciB2aXJ0dWFsIHN0ZXAuXG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShSRU5ERVJfRlBTKTtcbiAgICBhd2FpdCBwYXVzZVZpcnR1YWxUaW1lKGNkcCk7XG5cbiAgICBmb3IgKGxldCBmcmFtZSA9IDA7IGZyYW1lIDwgdG90YWw7IGZyYW1lKyspIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IGZyYW1lTXMgPSAoZnJhbWUgKyAxKSAqIGZyYW1lSW50ZXJ2YWw7XG5cbiAgICAgIC8vIEFybSBiZWZvcmUgZHJhd1N0ZWdvIHNvIHRoZSBjb21taXQgYWNrIGNhbid0IGJlIG1pc3NlZDsgYnJhbmNoIGNhdGNoIGtlZXBzIGFuIGVhcmx5IHRpY2sgZmFpbHVyZSBmcm9tIG9ycGhhbmluZyBpdC5cbiAgICAgIGNvbnN0IHN3YXBwZWQgPSB3YWl0U3RlZ29UaWNrKHdpbi53ZWJDb250ZW50cyk7XG4gICAgICBzd2FwcGVkLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIC8vIEluZGVwZW5kZW50IHRhcmdldHMgKGlmcmFtZSBjbG9jayB2cyBtYWluLWZyYW1lIHN0ZWdvIGNhbnZhcyk6IG9uZSBjb25jdXJyZW50IGhvcCBpbnN0ZWFkIG9mIHR3byBzZXJpYWwgb25lcy5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aWNrKHsgZnJhbWU6IGlmcmFtZSwgdGltZXN0YW1wTXM6IGZyYW1lTXMsIHNpZ25hbCB9KSwgZHJhd1N0ZWdvKHdpbi53ZWJDb250ZW50cywgZnJhbWVNcyldKTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFthZHZhbmNlVmlydHVhbFRpbWUoY2RwLCBmcmFtZUludGVydmFsKSwgc3dhcHBlZF0pO1xuICAgICAgY29uc3QgcGFpbnRlZCA9IGF3YWl0IHBhaW50KHsgc291cmNlLCBmcHMsIHdpbiwgc2l6ZTogeyB3aWR0aCwgaGVpZ2h0IH0sIG1zOiBmcmFtZU1zIH0pO1xuICAgICAgaWYgKHBhaW50ZWQpIHtcbiAgICAgICAgaGVsZCA9IDA7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVsZCsrO1xuICAgICAgICBkcm9wU3RhdHMuZHJvcHBlZCgxKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJpdG1hcCA9IHBhaW50ZWQgPz8gbGFzdEJpdG1hcDtcbiAgICAgIGlmICghYml0bWFwIHx8IGhlbGQgPj0gUEFJTlRfSE9MRF9MSU1JVCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyIGV4YXVzdGVkIEAgJHtmcmFtZU1zfWApO1xuICAgICAgfVxuICAgICAgbGFzdEJpdG1hcCA9IGJpdG1hcDtcbiAgICAgIHRha2VyLmNhcHR1cmUoZnJhbWVNcywgYml0bWFwKTtcbiAgICAgIGJsYW5rU3RhdHMuc2FtcGxlKGJpdG1hcCk7XG4gICAgICAvLyBFbmNvZGUgd2l0aG91dCBhd2FpdGluZyAobGltaXRlciBzZXJpYWxpemVzKSwgc28gaXQgb3ZlcmxhcHMgdGhlIG5leHQgZnJhbWUncyBDRFAvcGFpbnQgc2V0dXAuXG4gICAgICBwaXBlbGluZS5lbmNvZGVCR1JBKGJpdG1hcCkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICAgICAgd3JpdHRlbisrO1xuICAgICAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgICAgIHRocm93IGVuY29kZUVycm9yO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgICBvblByb2dyZXNzKHByb2dyZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIGF3YWl0IHBpcGVsaW5lLmZpbmlzaCgpO1xuICAgIHNjcmVlbnNob3RzID0gYXdhaXQgdGFrZXIuZmluaXNoKGxhc3RCaXRtYXApO1xuICB9XG5cbiAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3I7XG4gIH1cbiAgaWYgKHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYmxhbmsgPSBibGFua1N0YXRzLmZpbmFsaXplKCk7XG4gICAgaWYgKGJsYW5rID49IEJMQU5LX1dBUk5fUkFUSU8pIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBibGFuay1mcmFtZSByYXRpbyAke01hdGgucm91bmQoYmxhbmsgKiAxMDApfSUg4oCUIHBvc3NpYmxlIHdoaXRlL2JsYW5rIHNjcmVlbmApO1xuICAgIH1cbiAgICBjb25zdCB7IGphbmsgfSA9IGRyb3BTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChqYW5rID49IEpBTktfV0FSTl9TQ09SRSkge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGphbmsgc2NvcmUgJHtqYW5rLnRvRml4ZWQoMil9IOKAlCBmcmFtZXMgaGVsZCBwYXN0IHBhaW50IHRpbWVvdXRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgb3V0RmlsZXMsIGJsYW5rLCBqYW5rLCBzY3JlZW5zaG90cyB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJub2RlOmFzc2VydFwiO1xuaW1wb3J0IHsgbWtkaXIgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGFwcCwgTWVudSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIgfSBmcm9tIFwiLi9iYXNlL2NyYXNoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG1ha2VDTEkgfSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCB7IHR5cGUgSXBjTXNnLCBJcGNNc2dUeXBlLCBJcGNXcml0ZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9pcGNcIjtcbmltcG9ydCB7IHNldHVwUHVwUHJvdG9jb2wgfSBmcm9tIFwiLi9yZW5kZXJlci9wcm90b2NvbFwiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvcmVuZGVyXCI7XG5pbXBvcnQgeyBzaG9vdCB9IGZyb20gXCIuL3JlbmRlcmVyL3Nob290XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0FwcF1cIjtcblxuZnVuY3Rpb24gcHJpbnRGZWF0dXJlcygpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHUgZmVhdHVyZXM6XCIsIGFwcC5nZXRHUFVGZWF0dXJlU3RhdHVzKCkpO1xufVxuXG5jb25zdCBjdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xubGV0IGV4aXRpbmcgPSBmYWxzZTtcblxuc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKTtcbk1lbnUuc2V0QXBwbGljYXRpb25NZW51KG51bGwpO1xuYXBwLmRvY2s/LmhpZGUoKTtcbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHt9KTtcbmFwcC5vbihcImdwdS1pbmZvLXVwZGF0ZVwiLCBwcmludEZlYXR1cmVzKTtcbmFwcC5vbihcImJlZm9yZS1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuYXBwLm9uKFwid2lsbC1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuXG5vayhwcm9jZXNzLnNlbmQsIFwiaXBjIGNoYW5uZWwgbWlzc2luZyDigJQgc3Bhd24gd2l0aCBzdGRpb1szXT0naXBjJ1wiKTtcbnByb2Nlc3Mub25jZShcImRpc2Nvbm5lY3RcIiwgKCkgPT4gY3RybC5hYm9ydChcImRpc2Nvbm5lY3RcIikpO1xucHJvY2Vzcy5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICBpZiAobXNnLnR5cGUgPT09IElwY01zZ1R5cGUuQ2FuY2VsKSB7XG4gICAgY3RybC5hYm9ydChtc2cucmVhc29uKTtcbiAgfVxufSk7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcImFwcFwiLFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBpcGMgPSBuZXcgSXBjV3JpdGVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwcC53aGVuUmVhZHkoKTtcbiAgICAgIHNldHVwUHVwUHJvdG9jb2woKTtcbiAgICAgIHByaW50RmVhdHVyZXMoKTtcbiAgICAgIGZvciAoY29uc3Qgb3V0IG9mIG9wdGlvbnMub3V0RmlsZXMpIHtcbiAgICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShvdXQpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMuZGV0ZXJtaW5pc3RpYyA/IHNob290IDogcmVuZGVyO1xuICAgICAgY3RybC5zaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFjdGlvbih7XG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2lnbmFsOiBjdHJsLnNpZ25hbCxcbiAgICAgICAgb25Qcm9ncmVzczogKHApID0+IGlwYy53cml0ZVByb2dyZXNzKHApLFxuICAgICAgICBvbkNvbnNvbGU6IChsLCBtKSA9PiBpcGMud3JpdGVDb25zb2xlKGwsIG0pLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBpcGMud3JpdGVEb25lKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBlIGFzIEVycm9yO1xuICAgICAgY29uc3QgbSA9IGVycm9yLnN0YWNrID8/IGVycm9yLm1lc3NhZ2UgPz8gU3RyaW5nKGUgPz8gXCJ1bmtub3duIGVycm9yXCIpO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRXJyb3IobSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4aXRpbmcgPSB0cnVlO1xuICAgICAgYXBwLmV4aXQoKTtcbiAgICB9XG4gIH0sXG59KTtcbiJdfQ==