pup-recorder 0.0.23 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,7 +7,7 @@ pup-recorder - record web pages as video
7
7
  ## SYNOPSIS
8
8
 
9
9
  ```
10
- pup <source> [-w width] [-h height] [-f fps] [-t duration] [-o dir] [-a]
10
+ pup <source> [-w width] [-h height] [-f fps] [-t duration] [-o dir] [-a] [-s]
11
11
  ```
12
12
 
13
13
  ## DESCRIPTION
@@ -25,6 +25,7 @@ by default; with `-a` outputs WebM (VP9) and MOV (HEVC alpha).
25
25
  -t, --duration <n> seconds, default 5
26
26
  -o, --out-dir <path> default "out"
27
27
  -a, --with-alpha-channel
28
+ -s, --with-audio
28
29
  --use-inner-proxy bilibili internal proxy
29
30
  ```
30
31
 
@@ -44,7 +45,7 @@ import { pup } from "pup-recorder";
44
45
  const { mp4, webm, mov, cover, width, height, fps, duration } =
45
46
  await pup("https://example.com", {
46
47
  width: 1920, height: 1080, fps: 30, duration: 5,
47
- withAlphaChannel: false, outDir: "out", useInnerProxy: false,
48
+ withAlphaChannel: false, withAudio: false, outDir: "out", useInnerProxy: false,
48
49
  cancelQuery: () => boolean,
49
50
  onProgress: (pct: number) => void,
50
51
  });
@@ -66,6 +67,7 @@ x265/* x265 binaries
66
67
  ```sh
67
68
  pup https://example.com -t 5
68
69
  pup file:///path/to/page.html -a
70
+ pup https://example.com -s -t 10
69
71
  pup https://example.com -w 1280 -h 720 -f 60 -t 10 -o /tmp/out
70
72
  ```
71
73
 
package/dist/cjs/app.cjs CHANGED
@@ -1,4 +1,76 @@
1
- 'use strict';require('source-map-support/register.js');var electron=require('electron'),fs=require('fs'),path=require('path'),url=require('url'),promises=require('fs/promises'),promises$1=require('timers/promises'),commander=require('commander'),T=require('zod');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var T__default=/*#__PURE__*/_interopDefault(T);var Ke=Object.create;var V=Object.defineProperty;var qe=Object.getOwnPropertyDescriptor;var le=(t,e)=>(e=Symbol[t])?e:Symbol.for("Symbol."+t),F=t=>{throw TypeError(t)};var me=(t,e,r)=>e in t?V(t,e,{enumerable:true,configurable:true,writable:true,value:r}):t[e]=r;var fe=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var he=t=>[,,,Ke(null)],ge=["class","method","getter","setter","accessor","field","value","get","set"],D=t=>t!==void 0&&typeof t!="function"?F("Function expected"):t,Ve=(t,e,r,o,i)=>({kind:ge[t],name:e,metadata:o,addInitializer:n=>r._?F("Already initialized"):i.push(D(n||null))}),Y=(t,e)=>me(e,le("metadata"),t[3]),we=(t,e,r,o)=>{for(var i=0,n=t[e>>1],c=n&&n.length;i<c;i++)n[i].call(r);return o},C=(t,e,r,o,i,n)=>{var a,l,g,f,s=e&7,w=false,d=false,m=2,x=ge[s+5],_=t[m]||(t[m]=[]),h=((i=i.prototype),qe(i,r));for(var I=o.length-1;I>=0;I--)g=Ve(s,r,l={},t[3],_),(g.static=w,g.private=d,f=g.access={has:u=>r in u},(f.get=u=>u[r]),s>2),a=(0, o[I])(h[x],g),l._=1,D(a)&&(h[x]=a);return h&&V(i,r,h),i},be=(t,e,r)=>me(t,e+"",r);var Xe=()=>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,p=Xe();var y=path.dirname(url.fileURLToPath(p));function xe(t,e,r){try{return e(process.env[t])}catch{return r}}function v(t){if(typeof t=="number")return t;let e=Number(t);if(Number.isNaN(e))throw new Error(`Value ${t} is not a valid number`);return e}var tt=[path.join(y,"cjs/app.cjs"),path.join(y,"app.cjs"),path.join(y,"../../cjs/app.cjs")];tt.find(fs.existsSync);var Re=process.env,$=xe("PUP_LOG_LEVEL",v,2),Q=Re.PUP_USE_INNER_PROXY==="1";Re.FFMPEG_BIN??"ffmpeg";var Z="<pup@debug>",ee="<pup@info>",te="<pup@warn>",re="<pup@error>",oe="<pup@fatal>";function L(t,e){return function(...r){let o=r.map(i=>i instanceof Error?i.stack??String(i):i);return t.call(this,...o)}}var _e,Te,ye,ve,Ee,E;Ee=[L],ve=[L],ye=[L],Te=[L],_e=[L];var R=class{constructor(){we(E,5,this);be(this,"_impl");this.impl=console;}get impl(){return this._impl}set impl(e){let r=e.debug??console.debug,o=e.info??console.info,i=e.warn??console.warn,n=e.error??console.error;this._impl={debug:$>=3?r:void 0,info:$>=2?o:void 0,warn:$>=1?i:void 0,error:$>=0?n:void 0};}debug(...e){this.impl?.debug?.(Z,...e);}info(...e){this.impl?.info?.(ee,...e);}warn(...e){this.impl?.warn?.(te,...e);}error(...e){this.impl?.error?.(re,...e);}fatal(...e){this.impl?.error?.(oe,...e),process.exit(1);}dispatch(e){e.startsWith(Z)?this.debug(e.slice(Z.length+1)):e.startsWith(ee)?this.info(e.slice(ee.length+1)):e.startsWith(te)?this.warn(e.slice(te.length+1)):e.startsWith(re)?this.error(e.slice(re.length+1)):this.info(e);}attach(e,r){return new Promise((o,i)=>{this.debug(`${r}.attach`);let n="",c=a=>{let l=a.toString();l.startsWith(oe)?n+=l.slice(oe.length+1):this.dispatch(l);};e.stderr?.on("data",c),e.stdout?.on("data",c),e.on("message",c).on("error",a=>{n+=a.message,e.kill();}).once("close",(a,l)=>{a||l||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${r}.close`,{code:a,signal:l,fatal:n}),i(new Error(n))):(this.debug(`${r}.close`),o());}).on("unhandledRejection",a=>{this.error(`${r}.unhandled`,a);}).on("uncaughtExceptionMonitor",a=>{this.error(`${r}.unhandled`,a);});})}};E=he(),C(E,1,"debug",Ee,R),C(E,1,"info",ve,R),C(E,1,"warn",ye,R),C(E,1,"error",Te,R),C(E,1,"fatal",_e,R),Y(E,R);var b=new R;var rt="__PUP_ARGS__";function Pe(){let t=process.env[rt];if(t){let e=["exec",...process.argv.slice(-1)];return e.push(...JSON.parse(t)),b.debug("pupargs",e),e}return b.debug("procargv",process.argv),process.argv}var Ie=["no-sandbox","disable-setuid-sandbox","disable-gpu","disable-dev-shm-usage","disable-software-rasterizer","disable-web-security","disable-site-isolation-trials","disable-features=IsolateOrigins,site-per-process","allow-insecure-localhost","ignore-certificate-errors","disable-blink-features=AutomationControlled","mute-audio","disable-extensions","disable-background-networking","address-family=ipv4","disable-async-dns","force-device-scale-factor=1","trace-warnings","force-color-profile=srgb","disable-color-correct-rendering","log-level=3"];var{platform:nt,arch:it}=process,Ae=`rust/${nt}-${it}.node`,st=[path.join(y,`../../${Ae}`),path.join(y,`../${Ae}`)],at=fe(st.find(fs.existsSync)),Ce=at.FixedBufferWriter;function De(t,e){let{width:r,height:o}=e;return `<!DOCTYPE html>
1
+ 'use strict';require('source-map-support/register.js');var electron=require('electron'),fs=require('fs'),path=require('path'),url=require('url'),systeminformation=require('systeminformation'),promises=require('fs/promises'),crypto=require('crypto'),os=require('os'),promises$1=require('timers/promises'),commander=require('commander'),x=require('zod');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var x__default=/*#__PURE__*/_interopDefault(x);var ot=Object.create;var J=Object.defineProperty;var nt=Object.getOwnPropertyDescriptor;var xe=(t,e)=>(e=Symbol[t])?e:Symbol.for("Symbol."+t),L=t=>{throw TypeError(t)};var _e=(t,e,r)=>e in t?J(t,e,{enumerable:true,configurable:true,writable:true,value:r}):t[e]=r;var ye=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var Re=t=>[,,,ot(null)],Ae=["class","method","getter","setter","accessor","field","value","get","set"],D=t=>t!==void 0&&typeof t!="function"?L("Function expected"):t,it=(t,e,r,o,i)=>({kind:Ae[t],name:e,metadata:o,addInitializer:n=>r._?L("Already initialized"):i.push(D(n||null))}),X=(t,e)=>_e(e,xe("metadata"),t[3]),Pe=(t,e,r,o)=>{for(var i=0,n=t[e>>1],c=n&&n.length;i<c;i++)n[i].call(r);return o},S=(t,e,r,o,i,n)=>{var s,l,h,u,a=e&7,T=false,w=false,_=2,$=Ae[a+5],g=t[_]||(t[_]=[]),m=((i=i.prototype),nt(i,r));for(var y=o.length-1;y>=0;y--)h=it(a,r,l={},t[3],g),(h.static=T,h.private=w,u=h.access={has:d=>r in d},(u.get=d=>d[r]),a>2),s=(0, o[y])(m[$],h),l._=1,D(s)&&(m[$]=s);return m&&J(i,r,m),i},Te=(t,e,r)=>_e(t,e+"",r);var ct=()=>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,p=ct();var R=path.dirname(url.fileURLToPath(p));function Ee(t,e,r){try{return e(process.env[t])}catch{return r}}function A(t){if(typeof t=="number")return t;let e=Number(t);if(Number.isNaN(e))throw new Error(`Value ${t} is not a valid number`);return e}var lt=[path.join(R,"cjs/app.cjs"),path.join(R,"app.cjs"),path.join(R,"../../cjs/app.cjs")];lt.find(fs.existsSync);var ee=process.env,F=Ee("PUP_LOG_LEVEL",A,2),te=ee.PUP_USE_INNER_PROXY==="1";ee.FFMPEG_BIN??"ffmpeg";var ve=ee.PUP_DISABLE_GPU==="1";var re="<pup@debug>",oe="<pup@info>",ne="<pup@warn>",ie="<pup@error>",se="<pup@fatal>";function U(t,e){return function(...r){let o=r.map(i=>i instanceof Error?i.stack??String(i):i);return t.call(this,...o)}}var Ce,Se,Ie,ke,De,P;De=[U],ke=[U],Ie=[U],Se=[U],Ce=[U];var b=class{constructor(){Pe(P,5,this);Te(this,"_impl");this.impl=console;}get impl(){return this._impl}set impl(e){let r=e.debug??console.debug,o=e.info??console.info,i=e.warn??console.warn,n=e.error??console.error;this._impl={debug:F>=3?r:void 0,info:F>=2?o:void 0,warn:F>=1?i:void 0,error:F>=0?n:void 0};}debug(...e){this.impl?.debug?.(re,...e);}info(...e){this.impl?.info?.(oe,...e);}warn(...e){this.impl?.warn?.(ne,...e);}error(...e){this.impl?.error?.(ie,...e);}fatal(...e){this.impl?.error?.(se,...e),process.exit(1);}dispatch(e){e.startsWith(re)?this.debug(e.slice(re.length+1)):e.startsWith(oe)?this.info(e.slice(oe.length+1)):e.startsWith(ne)?this.warn(e.slice(ne.length+1)):e.startsWith(ie)?this.error(e.slice(ie.length+1)):this.info(e);}attach(e,r){return new Promise((o,i)=>{this.debug(`${r}.attach`);let n="",c=s=>{let l=s.toString();l.startsWith(se)?n+=l.slice(se.length+1):this.dispatch(l);};e.stderr?.on("data",c),e.stdout?.on("data",c),e.on("message",c).on("error",s=>{n+=s.message,e.kill();}).once("close",(s,l)=>{s||l||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${r}.close`,{code:s,signal:l,fatal:n}),i(new Error(n))):(this.debug(`${r}.close`),o());}).on("unhandledRejection",s=>{this.error(`${r}.unhandled`,s);}).on("uncaughtExceptionMonitor",s=>{this.error(`${r}.unhandled`,s);});})}};P=Re(),S(P,1,"debug",De,b),S(P,1,"info",ke,b),S(P,1,"warn",Ie,b),S(P,1,"error",Se,b),S(P,1,"fatal",Ce,b),X(P,b);var f=new b;var ft="[HWAccel]";async function ht(){let{controllers:t}=await systeminformation.graphics();return t.some(e=>e.vendor.length)}var Le=ht().then(t=>(f.debug(ft,"GPU detected:",t),t));var Fe="--pup-priv-args";function Ue(){let t=process.argv,e=t.find(o=>o.startsWith(Fe));if(!e)return f.debug("procargv",t),process.argv;let r=["exec",...t.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),r.push(...JSON.parse(e)),f.debug("pupargs",r),r}async function Oe(){let t=["no-sandbox","disable-setuid-sandbox","disable-dev-shm-usage","disable-web-security","disable-site-isolation-trials","disable-features=IsolateOrigins,site-per-process","allow-insecure-localhost","ignore-certificate-errors","disable-blink-features=AutomationControlled","mute-audio","autoplay-policy=no-user-gesture-required","disable-extensions","disable-background-networking","address-family=ipv4","disable-async-dns","force-device-scale-factor=1","trace-warnings","force-color-profile=srgb","disable-color-correct-rendering","log-level=3","ignore-gpu-blocklist","gpu-shader-disk-cache-size-kb=524288"];return await Le&&!ve?t.push("in-process-gpu","use-gl=angle",process.platform==="darwin"?"use-angle=metal":process.platform==="win32"?"use-angle=d3d11":"use-angle=vulkan"):t.push("use-gl=angle","use-angle=swiftshader","enable-unsafe-swiftshader"),t}var{platform:gt,arch:bt}=process,We=`rust/${gt}-${bt}.node`,xt=[path.join(R,`../../${We}`),path.join(R,`../${We}`)],_t=ye(xt.find(fs.existsSync)),M=_t.FixedBufferWriter;var Et=`
2
+ (function() {
3
+ if (window.__pup_audio_capturing__) return;
4
+ window.__pup_audio_capturing__ = true;
5
+
6
+ const { ipcRenderer } = require('electron');
7
+ const capturedContexts = new WeakSet();
8
+ const sourcedElements = new WeakSet();
9
+ let metaSent = false;
10
+
11
+ const origCreateMES = AudioContext.prototype.createMediaElementSource;
12
+ AudioContext.prototype.createMediaElementSource = function(el) {
13
+ sourcedElements.add(el);
14
+ return origCreateMES.call(this, el);
15
+ };
16
+
17
+ const origConnect = AudioNode.prototype.connect;
18
+ AudioNode.prototype.connect = function(dest, outIdx, inIdx) {
19
+ const captureNode = dest?.context?.__pup_captureNode__;
20
+ if (captureNode && dest === dest.context.destination && this !== captureNode) {
21
+ origConnect.call(this, captureNode, outIdx, inIdx);
22
+ }
23
+ return origConnect.call(this, dest, outIdx, inIdx);
24
+ };
25
+
26
+ const OrigAC = window.AudioContext || window.webkitAudioContext;
27
+ if (!OrigAC) return;
28
+
29
+ function PatchedAC() {
30
+ const ctx = new OrigAC(...arguments);
31
+ if (!capturedContexts.has(ctx)) {
32
+ capturedContexts.add(ctx);
33
+ if (!metaSent) {
34
+ metaSent = true;
35
+ ipcRenderer.send('audio-meta', { sampleRate: ctx.sampleRate });
36
+ }
37
+ const node = ctx.createScriptProcessor(4096, 2, 2);
38
+ node.onaudioprocess = (e) => {
39
+ const L = e.inputBuffer.getChannelData(0);
40
+ const R = e.inputBuffer.getChannelData(1);
41
+ const out = new Float32Array(L.length * 2);
42
+ for (let i = 0; i < L.length; i++) {
43
+ out[i * 2] = L[i];
44
+ out[i * 2 + 1] = R[i];
45
+ }
46
+ ipcRenderer.send('audio-chunk', Buffer.from(out.buffer));
47
+ };
48
+ node.connect(ctx.destination);
49
+ ctx.__pup_captureNode__ = node;
50
+ }
51
+ return ctx;
52
+ }
53
+ PatchedAC.prototype = OrigAC.prototype;
54
+ Object.setPrototypeOf(PatchedAC, OrigAC);
55
+ window.AudioContext = PatchedAC;
56
+ if ('webkitAudioContext' in window) window.webkitAudioContext = PatchedAC;
57
+
58
+ const origPlay = HTMLMediaElement.prototype.play;
59
+ HTMLMediaElement.prototype.play = function() {
60
+ if (!this.__pup_captured__) {
61
+ this.__pup_captured__ = true;
62
+ const el = this;
63
+ Promise.resolve().then(() => {
64
+ if (!sourcedElements.has(el)) {
65
+ const ctx = new PatchedAC();
66
+ ctx.createMediaElementSource(el).connect(ctx.destination);
67
+ }
68
+ });
69
+ }
70
+ return origPlay.call(this);
71
+ };
72
+ })();
73
+ `;async function Ne(t){let e=path.join(os.tmpdir(),`pup_audio_preload_${crypto.randomUUID()}.js`);await promises.writeFile(e,Et),electron.session.defaultSession.registerPreloadScript({type:"frame",id:"pup-audio",filePath:e});let r=new M(t,4096*2*4),o={sampleRate:void 0,async teardown(){electron.ipcMain.removeAllListeners("audio-chunk"),electron.ipcMain.removeAllListeners("audio-meta"),await r.close(),electron.session.defaultSession.unregisterPreloadScript("pup-audio"),await promises.rm(e,{force:true});}};return electron.ipcMain.once("audio-meta",(i,n)=>{o.sampleRate=n.sampleRate;}),electron.ipcMain.on("audio-chunk",(i,n)=>{r.write(n);}),o}function Be(t,e){let{width:r,height:o}=e;return `<!DOCTYPE html>
2
74
  <html>
3
75
  <head>
4
76
  <meta charset="UTF-8">
@@ -86,6 +158,6 @@
86
158
  })();
87
159
  </script>
88
160
  </body>
89
- </html>`}function Fe(t,e){let{width:r,height:o}=e;if(r<32||o<2)return;let i=o-1,n=0;for(let c=0;c<32;c++){let a=(i*r+c)*4,g=(t[a]??0)>127?1:0;n=n<<1|g;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}function $e(t){return t.sendCommand("Runtime.evaluate",{expression:"window.__pup_start_recording__()"})}function Le(t){return t.sendCommand("Runtime.evaluate",{expression:"window.__pup_stop_recording__()"})}var ne=["file:","http:","https:","data:"],ct=/^(file:|https?:|data:)/;function ke(t){if(ct.test(t))return;let e=t.split(":")[0]+":",r=ne.includes(e)?`unsupported protocol: ${e}, expected ${ne.join(", ")}`:`invalid source format, expected ${ne.join(", ")}`;throw new Error(r)}function Ue(t){let e=t.getSize();return e.width===0||e.height===0?true:t.isEmpty()}var dt="[Proxy]";function ie(t){if(!t.startsWith("http"))return t;let e=t.match(/^https:\/\/([^-]+)-boss\.hdslb\.com(.*)$/);if(e){let[,r,o]=e;return `http://${r}-boss.bilibili.co${o}`}return t}function Oe(){electron.session.defaultSession.webRequest.onBeforeRequest((t,e)=>{let r=t.url,o=ie(r);if(o===r)return e({cancel:false});b.debug(dt,`${r} -> ${o}`),e({cancel:false,redirectURL:o});});}function Ne(t){return new Promise(e=>setTimeout(e,t))}function Me({fn:t,maxAttempts:e=3,timeout:r}){let o=new Error(`timeout over ${r}ms`);return async function(...i){let n=0;for(;;)try{let c=[t(...i)];return r&&c.push(promises$1.setTimeout(r).then(()=>{throw o})),await Promise.race(c)}catch(c){if(n++,n>=e)throw c;await Ne(Math.pow(2,n)*100+Math.random()*100);}}}var M="[Record]";async function gt(t,e){ke(t);let{width:r,height:o,useInnerProxy:i}=e;electron.session.defaultSession.webRequest.onHeadersReceived((f,s)=>{let w={...f.responseHeaders};delete w["x-frame-options"],delete w["X-Frame-Options"],delete w["content-security-policy"],delete w["Content-Security-Policy"],s({cancel:false,responseHeaders:w});});let n=t;i&&(n=ie(t),Oe());let c=new electron.BrowserWindow({width:r,height:o+1,show:false,transparent:true,backgroundColor:void 0,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true}});c.webContents.on("console-message",f=>{f.level==="error"&&b.error(M,"console:",f.message);});let a=De(n,{width:r,height:o}),l=`data:text/html;charset=utf-8,${encodeURIComponent(a)}`,g;return await new Promise((f,s)=>{g=setTimeout(()=>{s(new Error("load window timeout"));},20*1e3),c.webContents.once("did-finish-load",f),c.webContents.once("did-fail-load",(w,d,m,x)=>{s(new Error(`failed to load ${x}: [${d}] ${m}`));}),c.webContents.once("render-process-gone",(w,d)=>{let{exitCode:m,reason:x}=d;s(new Error(`renderer crashed: ${m}, ${x}`));}),c.loadURL(l);}),clearTimeout(g),c}async function He(t,e){b.info(M,"progress: 0%");let{outDir:r,fps:o,width:i,height:n,duration:c}=e,a=await Me({fn:gt,maxAttempts:2})(t,e);await promises.mkdir(r,{recursive:true});let l=a.webContents.debugger;l.attach("1.3"),a.webContents.setFrameRate(o),a.webContents.isPainting()||a.webContents.startPainting();let g=path.join(r,"output.bgra"),f=Math.ceil(o*c),s=1e3/o,w=i*n*4,d=new Ce(g,w,o),m=0,x,P=0,_,h,I,u=A=>{m++;try{d.write(A);}catch(O){_??=O;}},S=(A,O,G)=>{if(_){I?.(_);return}if(m>=f){h?.();return}if(Ue(G))return;let se=G.toBitmap(),N=Fe(se,G.getSize());if(N===void 0){_??=new Error(`no timestamp @ ${m}`);return}let je=i*4,K=se.subarray(0,n*je);if(x===void 0){u(K),x=N;return}let q=N-x;if(q<s*.8)return;if(q<=s*1.2)u(K);else {let Ge=Math.round(q/s);for(let ce=0;ce<Ge&&m<f;ce++)u(K);}x=N;let ae=Math.floor(m/f*100);Math.abs(ae-P)>10&&(P=ae,b.info(M,`progress: ${Math.round(P)}%`));};a.webContents.on("paint",S),await $e(l);try{await new Promise((A,O)=>[h,I]=[A,O]);}finally{await Le(l),a.webContents.off("paint",S),await d.close();}if(_||m===0)throw _??new Error("no frames captured");try{let A={options:e,written:m,bgraPath:g};await promises.writeFile(path.join(r,"record.json"),JSON.stringify(A)),b.info(M,`progress: 100%, ${m} frames written`);}finally{a.close();}}function k(t,e){return (...r)=>{try{let o=t(...r);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var W=1920,H=1080,B=30,z=5,j="out";T__default.default.object({duration:T__default.default.number().optional().default(z).describe("Recording duration in seconds"),width:T__default.default.number().optional().default(W).describe("Video width"),height:T__default.default.number().optional().default(H).describe("Video height"),fps:T__default.default.number().optional().default(B).describe("Frames per second"),withAlphaChannel:T__default.default.boolean().optional().default(false).describe("Output with alpha channel"),outDir:T__default.default.string().optional().default(j).describe("Output directory"),useInnerProxy:T__default.default.boolean().optional().default(false).describe("Use bilibili inner proxy for resource access")});function ze(t,e){commander.program.name(t).argument("<source>","file://, http(s)://, \u6216 data: URI").option("-w, --width <number>","\u89C6\u9891\u5BBD\u5EA6",`${W}`).option("-h, --height <number>","\u89C6\u9891\u9AD8\u5EA6",`${H}`).option("-f, --fps <number>","\u5E27\u7387",`${B}`).option("-t, --duration <number>","\u5F55\u5236\u65F6\u957F\uFF08\u79D2\uFF09",`${z}`).option("-o, --out-dir <path>","\u8F93\u51FA\u76EE\u5F55",`${j}`).option("-a, --with-alpha-channel","\u8F93\u51FA\u5305\u542B alpha \u901A\u9053\u7684\u89C6\u9891",false).option("--use-inner-proxy","\u4F7F\u7528 B \u7AD9\u5185\u7F51\u4EE3\u7406\u52A0\u901F\u8D44\u6E90\u8BBF\u95EE",Q).action(async(r,o)=>{try{await e(r,{width:k(v,W)(o.width),height:k(v,H)(o.height),fps:k(v,B)(o.fps),duration:k(v,z)(o.duration),outDir:o.outDir??j,withAlphaChannel:o.withAlphaChannel??!1,useInnerProxy:o.useInnerProxy??Q});}catch(i){b.fatal(i);}}),commander.program.parse(Pe());}process.once("exit",()=>electron.app.quit());ze("app",async(t,e)=>{try{Ie.forEach(r=>electron.app.commandLine.appendSwitch(r)),electron.app.dock?.hide(),await electron.app.whenReady(),await He(t,e);}finally{electron.app.quit();}});
161
+ </html>`}function He(t,e){let{width:r,height:o}=e;if(r<32||o<2)return;let i=o-1,n=0;for(let c=0;c<32;c++){let s=(i*r+c)*4,h=(t[s]??0)>127?1:0;n=n<<1|h;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}function je(t){return t.sendCommand("Runtime.evaluate",{expression:"window.__pup_start_recording__()"})}function ze(t){return t.sendCommand("Runtime.evaluate",{expression:"window.__pup_stop_recording__()"})}function Ge(t){let e=t.getSize();return e.width===0||e.height===0?true:t.isEmpty()}var ae=["file:","http:","https:","data:"],vt=/^(file:|https?:|data:)/;function qe(t){if(vt.test(t))return;let e=t.split(":")[0]+":",r=ae.includes(e)?`unsupported protocol: ${e}, expected ${ae.join(", ")}`:`invalid source format, expected ${ae.join(", ")}`;throw new Error(r)}var It="[Proxy]",kt=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]);function ce(t){if(!t.startsWith("http"))return t;let e=new url.URL(t),r=kt.get(e.hostname);return r?(e.hostname=r,e.protocol="http:",e.toString()):t}function Ke(){electron.session.defaultSession.webRequest.onBeforeRequest((t,e)=>{let r=t.url,o=ce(r);if(o===r)return e({cancel:false});f.debug(It,`${r} -> ${o}`),e({cancel:false,redirectURL:o});});}function Ve(t){return new Promise(e=>setTimeout(e,t))}function Ye({fn:t,maxAttempts:e=3,timeout:r}){let o=new Error(`timeout over ${r}ms`);return async function(...i){let n=0;for(;;)try{let c=[t(...i)];return r&&c.push(promises$1.setTimeout(r).then(()=>{throw o})),await Promise.race(c)}catch(c){if(n++,n>=e)throw c;await Ve(Math.pow(2,n)*100+Math.random()*100);}}}var Ut="[Window]";function Je(t,e){return new Promise((r,o)=>{let i=setTimeout(()=>o(new Error("load window timeout")),2e4),n=c=>{clearTimeout(i),c?o(c):r();};t.webContents.once("did-finish-load",()=>n()),t.webContents.once("did-fail-load",(c,s,l,h)=>n(new Error(`failed to load ${h}: [${s}] ${l}`))),t.webContents.once("render-process-gone",(c,{exitCode:s,reason:l})=>n(new Error(`renderer crashed: ${s}, ${l}`))),e();})}async function Ot(t,e,r){qe(e);let{width:o,height:i,useInnerProxy:n}=r;electron.session.defaultSession.webRequest.onHeadersReceived(({responseHeaders:u},a)=>{delete u?.["x-frame-options"],delete u?.["X-Frame-Options"],delete u?.["content-security-policy"],delete u?.["Content-Security-Policy"],a({cancel:false,responseHeaders:u});});let c=e;n&&(c=ce(e),Ke());let s=new electron.BrowserWindow({width:o,height:i+1,show:false,transparent:true,backgroundColor:void 0,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true}});t.splice(0).forEach(u=>u.destroy()),t.push(s),s.webContents.on("console-message",({level:u,message:a})=>{u==="error"&&f.error(Ut,"console:",a);});let l=Be(c,{width:o,height:i}),h=`data:text/html;charset=utf-8,${encodeURIComponent(l)}`;return await Je(s,()=>s.loadURL(h)),s}async function Xe(t,e){let r=[],o=await Ye({fn:Ot,maxAttempts:2})(r,t,e);return await Je(o,()=>o.reload()),o}var ue="[Record]";async function Qe(t,e){f.info(ue,"progress: 0%");let{outDir:r,fps:o,width:i,height:n,duration:c,withAudio:s}=e;await promises.mkdir(r,{recursive:true});let l=path.join(r,"output.pcm"),h=s?await Ne(l):void 0,u=await Xe(t,e),a=u.webContents.debugger;a.attach("1.3"),u.webContents.setFrameRate(o),u.webContents.isPainting()||u.webContents.startPainting();let T=path.join(r,"output.bgra"),w=Math.ceil(o*c),_=1e3/o,$=i*n*4,k=new M(T,$,o),g=0,m,y=0,d,E,de,q=v=>{g++;try{k.write(v);}catch(C){d??=C;}},le=(v,C,K)=>{if(d){de?.(d);return}if(g>=w){E?.();return}if(Ge(K))return;let me=K.toBitmap(),W=He(me,K.getSize());if(W===void 0){d??=new Error(`no timestamp @ ${g}`);return}let tt=i*4,V=me.subarray(0,n*tt);if(m===void 0){q(V),m=W;return}let Y=W-m;if(Y<_*.8)return;if(Y<=_*1.2)q(V);else {let rt=Math.round(Y/_);for(let he=0;he<rt&&g<w;he++)q(V);}m=W;let fe=Math.floor(g/w*100);Math.abs(fe-y)>10&&(y=fe,f.info(ue,`progress: ${Math.round(y)}%`));};u.webContents.on("paint",le),await je(a);try{await new Promise((v,C)=>[E,de]=[v,C]);}finally{await ze(a),u.webContents.off("paint",le),await k.close(),await h?.teardown();}if(d||g===0)throw d??new Error("no frames captured");try{let v=h?.sampleRate?{pcmPath:l,sampleRate:h.sampleRate}:void 0,C={options:e,written:g,bgra:T,audio:v};await promises.writeFile(path.join(r,"record.json"),JSON.stringify(C)),f.info(ue,`progress: 100%, ${g} frames written`);}finally{u.close();}}function O(t,e){return (...r)=>{try{let o=t(...r);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var B=1920,H=1080,j=30,z=5,G="out";x__default.default.object({duration:x__default.default.number().optional().default(z).describe("Recording duration in seconds"),width:x__default.default.number().optional().default(B).describe("Video width"),height:x__default.default.number().optional().default(H).describe("Video height"),fps:x__default.default.number().optional().default(j).describe("Frames per second"),withAlphaChannel:x__default.default.boolean().optional().default(false).describe("Output with alpha channel"),withAudio:x__default.default.boolean().optional().default(false).describe("Capture and encode audio"),outDir:x__default.default.string().optional().default(G).describe("Output directory"),useInnerProxy:x__default.default.boolean().optional().default(false).describe("Use bilibili inner proxy for resource access")});function et(t,e){commander.program.name(t).argument("<source>","file://, http(s)://, \u6216 data: URI").option("-w, --width <number>","\u89C6\u9891\u5BBD\u5EA6",`${B}`).option("-h, --height <number>","\u89C6\u9891\u9AD8\u5EA6",`${H}`).option("-f, --fps <number>","\u5E27\u7387",`${j}`).option("-t, --duration <number>","\u5F55\u5236\u65F6\u957F\uFF08\u79D2\uFF09",`${z}`).option("-o, --out-dir <path>","\u8F93\u51FA\u76EE\u5F55",`${G}`).option("-a, --with-alpha-channel","\u8F93\u51FA\u5305\u542B alpha \u901A\u9053\u7684\u89C6\u9891",false).option("-s, --with-audio","\u6355\u83B7\u5E76\u6DF7\u5165\u97F3\u9891",false).option("--use-inner-proxy","\u4F7F\u7528 B \u7AD9\u5185\u7F51\u4EE3\u7406\u52A0\u901F\u8D44\u6E90\u8BBF\u95EE",te).action(async(r,o)=>{try{await e(r,{width:O(A,B)(o.width),height:O(A,H)(o.height),fps:O(A,j)(o.fps),duration:O(A,z)(o.duration),outDir:o.outDir??G,withAlphaChannel:o.withAlphaChannel??!1,withAudio:o.withAudio??!1,useInnerProxy:o.useInnerProxy??te});}catch(i){f.fatal(i);}}),commander.program.parse(Ue());}process.once("exit",()=>electron.app.quit());et("app",async(t,e)=>{try{(await Oe()).forEach(o=>{let i=o.indexOf("=");if(i<0)electron.app.commandLine.appendSwitch(o);else {let n=o.slice(0,i),c=o.slice(i+1);electron.app.commandLine.appendSwitch(n,c);}}),electron.app.dock?.hide(),await electron.app.whenReady(),await Qe(t,e);}finally{electron.app.quit();}});
90
162
  //# sourceMappingURL=app.cjs.map
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErM2YyOWI5MDQzN2QwMDFhZC9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vLi4vc3JjL2Jhc2UvYmFzZWRpci50cyIsIi4uLy4uL3NyYy9iYXNlL2Vudi50cyIsIi4uLy4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uLy4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uLy4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi8uLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vLi4vc3JjL2Jhc2UvZWxlY3Ryb24udHMiLCIuLi8uLi9zcmMvcnVzdC9saWIudHMiLCIuLi8uLi9zcmMvYmFzZS9mcmFtZV9zeW5jLnRzIiwiLi4vLi4vc3JjL2Jhc2UvaHRtbF9jaGVjay50cyIsIi4uLy4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vLi4vc3JjL2Jhc2UvcHJveHkudHMiLCIuLi8uLi9zcmMvYmFzZS90aW1pbmcudHMiLCIuLi8uLi9zcmMvYmFzZS9yZXRyeS50cyIsIi4uLy4uL3NyYy9iYXNlL3JlY29yZC50cyIsIi4uLy4uL3NyYy9iYXNlL25vZXJyLnRzIiwiLi4vLi4vc3JjL2Jhc2Uvc2NoZW1hLnRzIiwiLi4vLi4vc3JjL2NvbW1vbi50cyIsIi4uLy4uL3NyYy9hcHAudHMiXSwibmFtZXMiOlsiZ2V0SW1wb3J0TWV0YVVybCIsImltcG9ydE1ldGFVcmwiLCJiYXNlZGlyIiwiZGlybmFtZSIsImZpbGVVUkxUb1BhdGgiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwidmFsdWUiLCJudW0iLCJwdXBBcHBTZWFyY2hQYXRocyIsImpvaW4iLCJleGlzdHNTeW5jIiwiZW52IiwicHVwTG9nTGV2ZWwiLCJwdXBVc2VJbm5lclByb3h5IiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiUFVQX0FSR1NfRU5WX0tFWSIsInBhcmdzIiwicHVwQXJncyIsImFyZ3MiLCJFTEVDVFJPTl9PUFRTIiwicGxhdGZvcm0iLCJhcmNoIiwicnVzdFBhdGgiLCJuYXRpdmVTZWFyY2hQYXRocyIsIm1vZCIsIl9fcmVxdWlyZSIsIkZpeGVkQnVmZmVyV3JpdGVyIiwiYnVpbGRXcmFwcGVySFRNTCIsInRhcmdldFVSTCIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsImRlY29kZVRpbWVzdGFtcCIsImJpdG1hcCIsIm1hcmtlclJvdyIsInRpbWVzdGFtcCIsImkiLCJwaXhlbElkeCIsImJpdCIsInN0YXJ0U3luYyIsImNkcCIsInN0b3BTeW5jIiwiU1VQUE9SVEVEX1BST1RPQ09MUyIsIlNPVVJDRV9QQVRURVJOIiwiY2hlY2tIVE1MIiwic291cmNlIiwicHJvdG9jb2wiLCJpc0VtcHR5IiwiaW1hZ2UiLCJUQUciLCJwcm94aWVkVXJsIiwidXJsIiwibWF0Y2giLCJwcmVmaXgiLCJwYXRoIiwiZW5hYmxlUHJveHkiLCJzZXNzaW9uIiwiZGV0YWlscyIsImNhbGxiYWNrIiwicHJveGllZCIsInNsZWVwIiwibXMiLCJ1c2VSZXRyeSIsImZuIiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0IiwidGltZW91dEVycm9yIiwiYXR0ZW1wdCIsInByb21pc2VzIiwic2V0VGltZW91dCIsImUiLCJsb2FkV2luZG93Iiwib3B0aW9ucyIsInVzZUlubmVyUHJveHkiLCJyZXNwb25zZUhlYWRlcnMiLCJzcmMiLCJ3aW4iLCJCcm93c2VyV2luZG93IiwiZXZlbnQiLCJ3cmFwcGVySFRNTCIsImRhdGFVUkwiLCJ0b2tlbiIsIl9ldmVudCIsImRlc2MiLCJleGl0Q29kZSIsInJlY29yZCIsIm91dERpciIsImZwcyIsImR1cmF0aW9uIiwibWtkaXIiLCJiZ3JhUGF0aCIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImJ1ZmZlclNpemUiLCJ3cml0ZXIiLCJ3cml0dGVuIiwibGFzdFdyaXR0ZW5UaW1lIiwicHJvZ3Jlc3MiLCJmcmFtZUVycm9yIiwicmVzb2x2ZXIiLCJyZWplY3RlciIsInNjaGVkdWxlV3JpdGUiLCJidWZmZXIiLCJwYWludCIsIl9lIiwiX3IiLCJjdXJyZW50VGltZSIsImJ5dGVzUGVyUm93IiwiY3JvcHBlZCIsInRpbWVTaW5jZUxhc3RGcmFtZSIsImZyYW1lc1RvSW5zZXJ0IiwibmV3UHJvZ3Jlc3MiLCJyIiwiaiIsInJlc3VsdCIsIndyaXRlRmlsZSIsIm5vZXJyIiwicmV0IiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9PVVRfRElSIiwieiIsIm1ha2VDTEkiLCJwcm9ncmFtIiwib3B0cyIsImFwcCIsIm8iXSwibWFwcGluZ3MiOiJ1WEFLQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxjQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLHdCQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLE1BQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLElBQUEsQ0FBQSxZQUFBLENBQUEsSUFBQSxDQUFBLFFBQUEsQ0FBQSxJQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxPQUFBLE9BQUEsQ0FBQSxHQUFBLENBQUEsT0FBQSxDQUFBLE9BQUEsS0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsT0FBQSxPQUFBLENBQUEsR0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsT0FBQSxPQUFBLENBQUEsR0FBQSxDQUFBLE9BQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxJQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsTUFBQSxLQUFBLENBQUEsc0JBQUEsQ0FBQSxDQUFBLENBQUEsb0JBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLFFBQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFVBQUEsQ0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxNQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsUUFBQSxDQUFBLENBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHFCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQU1BLEdBQW1CLElBQ3ZCLE9BQU8sU0FBYSxHQUFBLENBQ2hCLElBQUksSUFBSSxDQUFBLEtBQUEsRUFBUSxVQUFVLEVBQUUsQ0FBQSxDQUFFLElBQUEsQ0FDN0IsU0FBUyxhQUFBLEVBQWlCLFFBQUEsQ0FBUyxjQUFjLE9BQUEsQ0FBUSxXQUFBLEtBQWtCLFFBQUEsQ0FDMUUsUUFBQSxDQUFTLGFBQUEsQ0FBYyxHQUFBLENBQ3ZCLElBQUksR0FBQSxDQUFJLFNBQUEsQ0FBVyxTQUFTLE9BQU8sQ0FBQSxDQUFFLEtBRWhDQyxDQUFBQSxDQUFnQ0QsRUFBQUEsR0NQdEMsSUFBTUUsQ0FBQUEsQ0FBVUMsYUFBUUMsaUJBQUFBLENBQWNILENBQWUsQ0FBQyxDQUFBLENDS3RELFNBQVNJLEdBQ2RDLENBQUFBLENBQ0FDLENBQUFBLENBQ0FDLEVBQ2UsQ0FDZixHQUFJLENBQ0YsT0FBT0QsQ0FBQUEsQ0FBTyxRQUFRLEdBQUEsQ0FBSUQsQ0FBSSxDQUFDLENBQ2pDLENBQUEsS0FBUSxDQUNOLE9BQU9FLENBQ1QsQ0FDRixDQ2xCTyxTQUFTQyxFQUFZQyxDQUFBQSxDQUF3QixDQUNsRCxHQUFJLE9BQU9BLENBQUFBLEVBQVUsUUFBQSxDQUNuQixPQUFPQSxFQUVULElBQU1DLENBQUFBLENBQU0sT0FBT0QsQ0FBSyxDQUFBLENBQ3hCLEdBQUksTUFBQSxDQUFPLEtBQUEsQ0FBTUMsQ0FBRyxDQUFBLENBQ2xCLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSxNQUFBLEVBQVNELENBQUssQ0FBQSxzQkFBQSxDQUF3QixDQUFBLENBRXhELE9BQU9DLENBQ1QsS0NITUMsRUFBQUEsQ0FBb0IsQ0FDeEJDLFVBQUtYLENBQUFBLENBQVMsYUFBYSxFQUMzQlcsU0FBQUEsQ0FBS1gsQ0FBQUEsQ0FBUyxTQUFTLENBQUEsQ0FDdkJXLFNBQUFBLENBQUtYLEVBQVMsbUJBQW1CLENBQ25DLEVBQzBCVSxFQUFBQSxDQUFrQixLQUFLRSxhQUFVLENBQUEsS0FFckRDLEdBQU0sT0FBQSxDQUFRLEdBQUEsQ0FDUEMsQ0FBQUEsQ0FBY1gsRUFBQUEsQ0FBSyxnQkFBaUJJLENBQUFBLENBQWEsQ0FBQyxFQUNsRFEsQ0FBQUEsQ0FBbUJGLEVBQUFBLENBQUksc0JBQTJCLEdBQUEsQ0FDbENBLEdBQUksVUFBQSxFQUFpQixTQ0hsRCxJQUFNRyxDQUFBQSxDQUFRLGFBQUEsQ0FDUkMsR0FBTyxZQUFBLENBQ1BDLEVBQUFBLENBQU8sYUFDUEMsRUFBQUEsQ0FBUSxhQUFBLENBQ1JDLEdBQVEsYUFBQSxDQUVkLFNBQVNDLEVBQVVDLENBQUFBLENBQWtCQyxDQUFBQSxDQUF1QyxDQUMxRSxPQUFPLFNBQUEsR0FBMkJDLEVBQXFCLENBQ3JELElBQU1DLEVBQVlELENBQUFBLENBQVMsR0FBQSxDQUFLRSxHQUN2QkEsQ0FBQUEsWUFBZSxLQUFBLENBQVNBLEVBQUksS0FBQSxFQUFTLE1BQUEsQ0FBT0EsQ0FBRyxDQUFBLENBQUtBLENBQzVELENBQUEsQ0FDRCxPQUFPSixFQUFPLElBQUEsQ0FBSyxJQUFBLENBQU0sR0FBR0csQ0FBUyxDQUN2QyxDQUNGLENBNUJBLElBQUFFLEdBQUFDLEVBQUFBLENBQUFDLEVBQUFBLENBQUFDLEdBQUFDLEVBQUFBLENBQUFDLENBQUFBLENBc0RFRCxHQUFBLENBQUNWLENBQUFBLENBQUFBLENBS0RTLEdBQUEsQ0FBQ1QsQ0FBQUEsQ0FBQUEsQ0FLRFEsR0FBQSxDQUFDUixDQUFBQSxDQUFBQSxDQUtETyxHQUFBLENBQUNQLENBQUFBLENBQUFBLENBS0RNLEdBQUEsQ0FBQ04sQ0FBQUEsQ0FBQUEsQ0E1Q0gsSUFBTVksQ0FBQUEsQ0FBTixLQUFtQyxDQW9CakMsV0FBQSxFQUFjLENBcEJoQkMsR0FBQUYsQ0FBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQ0VHLEdBQUEsSUFBQSxDQUFRLE9BQUEsQ0FBQSxDQW9CTixLQUFLLElBQUEsQ0FBTyxRQUNkLENBbkJBLElBQUksTUFBK0IsQ0FDakMsT0FBTyxLQUFLLEtBQ2QsQ0FFQSxJQUFJLElBQUEsQ0FBSzNCLENBQUFBLENBQW1CLENBQzFCLElBQU00QixDQUFBQSxDQUFRNUIsRUFBTSxLQUFBLEVBQVMsT0FBQSxDQUFRLE1BQy9CNkIsQ0FBQUEsQ0FBTzdCLENBQUFBLENBQU0sTUFBUSxPQUFBLENBQVEsSUFBQSxDQUM3QjhCLEVBQU85QixDQUFBQSxDQUFNLElBQUEsRUFBUSxRQUFRLElBQUEsQ0FDN0IrQixDQUFBQSxDQUFRL0IsRUFBTSxLQUFBLEVBQVMsT0FBQSxDQUFRLE1BQ3JDLElBQUEsQ0FBSyxLQUFBLENBQVEsQ0FDWCxLQUFBLENBQU9NLENBQUFBLEVBQWUsRUFBSXNCLENBQUFBLENBQVEsTUFBQSxDQUNsQyxLQUFNdEIsQ0FBQUEsRUFBZSxDQUFBLENBQUl1QixFQUFPLE1BQUEsQ0FDaEMsSUFBQSxDQUFNdkIsQ0FBQUEsRUFBZSxDQUFBLENBQUl3QixFQUFPLE1BQUEsQ0FDaEMsS0FBQSxDQUFPeEIsR0FBZSxDQUFBLENBQUl5QixDQUFBQSxDQUFRLE1BQ3BDLEVBQ0YsQ0FPQSxTQUFTZixDQUFBQSxDQUEyQixDQUNsQyxLQUFLLElBQUEsRUFBTSxLQUFBLEdBQVFSLEVBQU8sR0FBR1EsQ0FBUSxFQUN2QyxDQUdBLElBQUEsQ0FBQSxHQUFRQSxFQUEyQixDQUNqQyxJQUFBLENBQUssTUFBTSxJQUFBLEdBQU9QLEVBQUFBLENBQU0sR0FBR08sQ0FBUSxFQUNyQyxDQUdBLElBQUEsQ0FBQSxHQUFRQSxDQUFBQSxDQUEyQixDQUNqQyxJQUFBLENBQUssSUFBQSxFQUFNLE9BQU9OLEVBQUFBLENBQU0sR0FBR00sQ0FBUSxFQUNyQyxDQUdBLFNBQVNBLENBQUFBLENBQTJCLENBQ2xDLElBQUEsQ0FBSyxJQUFBLEVBQU0sUUFBUUwsRUFBQUEsQ0FBTyxHQUFHSyxDQUFRLEVBQ3ZDLENBR0EsU0FBU0EsQ0FBQUEsQ0FBMkIsQ0FDbEMsS0FBSyxJQUFBLEVBQU0sS0FBQSxHQUFRSixHQUFPLEdBQUdJLENBQVEsRUFDckMsT0FBQSxDQUFRLElBQUEsQ0FBSyxDQUFDLEVBQ2hCLENBRVEsU0FBU2dCLENBQUFBLENBQWlCLENBQzVCQSxFQUFRLFVBQUEsQ0FBV3hCLENBQUssRUFDMUIsSUFBQSxDQUFLLEtBQUEsQ0FBTXdCLEVBQVEsS0FBQSxDQUFNeEIsQ0FBQUEsQ0FBTSxPQUFTLENBQUMsQ0FBQyxFQUNqQ3dCLENBQUFBLENBQVEsVUFBQSxDQUFXdkIsRUFBSSxDQUFBLENBQ2hDLElBQUEsQ0FBSyxLQUFLdUIsQ0FBQUEsQ0FBUSxLQUFBLENBQU12QixFQUFBQSxDQUFLLE1BQUEsQ0FBUyxDQUFDLENBQUMsQ0FBQSxDQUMvQnVCLEVBQVEsVUFBQSxDQUFXdEIsRUFBSSxFQUNoQyxJQUFBLENBQUssSUFBQSxDQUFLc0IsRUFBUSxLQUFBLENBQU10QixFQUFBQSxDQUFLLE9BQVMsQ0FBQyxDQUFDLEVBQy9Cc0IsQ0FBQUEsQ0FBUSxVQUFBLENBQVdyQixFQUFLLENBQUEsQ0FDakMsSUFBQSxDQUFLLE1BQU1xQixDQUFBQSxDQUFRLEtBQUEsQ0FBTXJCLEdBQU0sTUFBQSxDQUFTLENBQUMsQ0FBQyxDQUFBLENBRTFDLElBQUEsQ0FBSyxLQUFLcUIsQ0FBTyxFQUVyQixDQUVBLE1BQUEsQ0FBT0MsQ0FBQUEsQ0FBb0JyQyxFQUFjLENBQ3ZDLE9BQU8sSUFBSSxPQUFBLENBQWMsQ0FBQ3NDLEVBQVNDLENBQUFBLEdBQVcsQ0FDNUMsSUFBQSxDQUFLLEtBQUEsQ0FBTSxHQUFHdkMsQ0FBSSxDQUFBLE9BQUEsQ0FBUyxFQUMzQixJQUFJd0MsQ0FBQUEsQ0FBZ0IsR0FDZEMsQ0FBQUEsQ0FBWUMsQ0FBQUEsRUFBZ0MsQ0FDaEQsSUFBTU4sQ0FBQUEsQ0FBVU0sRUFBSyxRQUFBLEVBQVMsQ0FDMUJOLEVBQVEsVUFBQSxDQUFXcEIsRUFBSyxFQUMxQndCLENBQUFBLEVBQVNKLENBQUFBLENBQVEsTUFBTXBCLEVBQUFBLENBQU0sTUFBQSxDQUFTLENBQUMsQ0FBQSxDQUV2QyxJQUFBLENBQUssU0FBU29CLENBQU8sRUFFekIsRUFDQUMsQ0FBQUEsQ0FBSyxNQUFBLEVBQVEsR0FBRyxNQUFBLENBQVFJLENBQVEsRUFDaENKLENBQUFBLENBQUssTUFBQSxFQUFRLEdBQUcsTUFBQSxDQUFRSSxDQUFRLEVBQ2hDSixDQUFBQSxDQUNHLEVBQUEsQ0FBRyxTQUFBLENBQVdJLENBQVEsRUFDdEIsRUFBQSxDQUFHLE9BQUEsQ0FBVUUsR0FBUSxDQUNwQkgsQ0FBQUEsRUFBU0csRUFBSSxPQUFBLENBQ2JOLENBQUFBLENBQUssT0FDUCxDQUFDLEVBQ0EsSUFBQSxDQUFLLE9BQUEsQ0FBUyxDQUFDTyxDQUFBQSxDQUFNQyxDQUFBQSxHQUFXLENBQzNCRCxDQUFBQSxFQUFRQyxDQUFBQSxFQUFVTCxHQUNwQkEsQ0FBQUEsR0FBVSxDQUFBLGdCQUFBLEVBQW1CSCxFQUFLLFNBQUEsQ0FBVSxJQUFBLENBQUssR0FBRyxDQUFDLENBQUEsQ0FBQSxDQUNyRCxLQUFLLEtBQUEsQ0FBTSxDQUFBLEVBQUdyQyxDQUFJLENBQUEsTUFBQSxDQUFBLENBQVUsQ0FBRSxLQUFBNEMsQ0FBQUEsQ0FBTSxNQUFBLENBQUFDLEVBQVEsS0FBQSxDQUFBTCxDQUFNLENBQUMsQ0FBQSxDQUNuREQsQ0FBQUEsQ0FBTyxJQUFJLEtBQUEsQ0FBTUMsQ0FBSyxDQUFDLENBQUEsR0FFdkIsS0FBSyxLQUFBLENBQU0sQ0FBQSxFQUFHeEMsQ0FBSSxDQUFBLE1BQUEsQ0FBUSxDQUFBLENBQzFCc0MsR0FBUSxFQUVaLENBQUMsRUFDQSxFQUFBLENBQUcsb0JBQUEsQ0FBdUJRLEdBQVcsQ0FDcEMsSUFBQSxDQUFLLE1BQU0sQ0FBQSxFQUFHOUMsQ0FBSSxhQUFjOEMsQ0FBTSxFQUN4QyxDQUFDLENBQUEsQ0FDQSxFQUFBLENBQUcsMkJBQTZCSCxDQUFBQSxFQUFRLENBQ3ZDLEtBQUssS0FBQSxDQUFNLENBQUEsRUFBRzNDLENBQUksQ0FBQSxVQUFBLENBQUEsQ0FBYzJDLENBQUcsRUFDckMsQ0FBQyxFQUNMLENBQUMsQ0FDSCxDQUNGLEVBdEdBZixDQUFBQSxDQUFBbUIsRUFBQUEsQ0FBQSxDQUFBLENBeUJFQyxDQUFBQSxDQUFBcEIsRUFBQSxDQUFBLENBQUEsT0FBQSxDQURBRCxFQUFBQSxDQXhCSUUsR0E4QkptQixDQUFBQSxDQUFBcEIsQ0FBQUEsQ0FBQSxTQURBRixFQUFBQSxDQTdCSUcsQ0FBQUEsQ0FBQUEsQ0FtQ0ptQixFQUFBcEIsQ0FBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQURBSCxHQWxDSUksQ0FBQUEsQ0FBQUEsQ0F3Q0ptQixDQUFBQSxDQUFBcEIsRUFBQSxDQUFBLENBQUEsT0FBQSxDQURBSixFQUFBQSxDQXZDSUssR0E2Q0ptQixDQUFBQSxDQUFBcEIsQ0FBQUEsQ0FBQSxVQURBTCxFQUFBQSxDQTVDSU0sQ0FBQUEsQ0FBQUEsQ0FBTm9CLEVBQUFyQixDQUFBQSxDQUFNQyxDQUFBQSxDQUFBQSxDQXdHTixJQUFNcUIsQ0FBQUEsQ0FBUyxJQUFJckIsRUNqSVosSUFBTXNCLEVBQUFBLENBQW1CLGVBRXpCLFNBQVNDLEVBQUFBLEVBQVEsQ0FDdEIsSUFBTUMsQ0FBQUEsQ0FBVSxRQUFRLEdBQUEsQ0FBSUYsRUFBZ0IsRUFDNUMsR0FBSUUsQ0FBQUEsQ0FBUyxDQUNYLElBQU1DLEVBQU8sQ0FBQyxNQUFBLENBQVEsR0FBRyxPQUFBLENBQVEsSUFBQSxDQUFLLE1BQU0sRUFBRSxDQUFDLEVBQy9DLE9BQUFBLENBQUFBLENBQUssS0FBSyxHQUFHLElBQUEsQ0FBSyxNQUFNRCxDQUFPLENBQUMsRUFDaENILENBQUFBLENBQU8sS0FBQSxDQUFNLFVBQVdJLENBQUksQ0FBQSxDQUNyQkEsQ0FDVCxDQUVBLE9BQUFKLEVBQU8sS0FBQSxDQUFNLFVBQUEsQ0FBWSxRQUFRLElBQUksQ0FBQSxDQUM5QixRQUFRLElBQ2pCLENDYk8sSUFBTUssRUFBQUEsQ0FBZ0IsQ0FDM0IsYUFDQSx3QkFBQSxDQUNBLGFBQUEsQ0FDQSx3QkFDQSw2QkFBQSxDQUNBLHNCQUFBLENBQ0EsK0JBQUEsQ0FDQSxrREFBQSxDQUNBLDJCQUNBLDJCQUFBLENBQ0EsNkNBQUEsQ0FDQSxhQUNBLG9CQUFBLENBQ0EsK0JBQUEsQ0FDQSxzQkFDQSxtQkFBQSxDQUNBLDZCQUFBLENBQ0EsaUJBQ0EsMEJBQUEsQ0FDQSxpQ0FBQSxDQUNBLGFBQ0YsQ0FBQSxDQ3JCQSxHQUFNLENBQUUsUUFBQSxDQUFBQyxFQUFBQSxDQUFVLEtBQUFDLEVBQUssQ0FBQSxDQUFJLE9BQUEsQ0FFckJDLEVBQUFBLENBQVcsUUFBUUYsRUFBUSxDQUFBLENBQUEsRUFBSUMsRUFBSSxDQUFBLEtBQUEsQ0FBQSxDQUVuQ0UsRUFBQUEsQ0FBb0IsQ0FDeEJwRCxTQUFBQSxDQUFLWCxDQUFBQSxDQUFTLFNBQVM4RCxFQUFRLENBQUEsQ0FBRSxFQUNqQ25ELFNBQUFBLENBQUtYLENBQUFBLENBQVMsTUFBTThELEVBQVEsQ0FBQSxDQUFFLENBQ2hDLENBQUEsQ0FDTUUsRUFBQUEsQ0FBTUMsR0FBUUYsRUFBQUEsQ0FBa0IsSUFBQSxDQUFLbkQsYUFBVSxDQUFFLENBQUEsQ0FjMUNzRCxHQUFvQkYsRUFBQUEsQ0FBSSxpQkFBQSxDQ3JCOUIsU0FBU0csRUFBQUEsQ0FBaUJDLENBQUFBLENBQW1CQyxFQUFvQixDQUN0RSxHQUFNLENBQUUsS0FBQSxDQUFBQyxDQUFBQSxDQUFPLE9BQUFDLENBQU8sQ0FBQSxDQUFJRixFQUMxQixPQUFPLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsd0JBQUEsRUFNaUJDLENBQUssQ0FBQSxZQUFBLEVBQWVDLENBQUFBLENBQVMsQ0FBQyxDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQUFBLEVBS3pDRCxDQUFLLENBQUE7QUFBQSxjQUFBLEVBQ0pDLENBQU0sQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBLEVBTVRBLENBQU0sQ0FBQTtBQUFBO0FBQUEsYUFBQSxFQUVKRCxDQUFLLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDJCQUFBLEVBUVNGLENBQVMsQ0FBQTtBQUFBLDRCQUFBLEVBQ1JFLENBQUssQ0FBQTtBQUFBO0FBQUE7QUFBQSxvQkFBQSxFQUdiQSxDQUFLLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQSxDQXlEM0IsQ0FFTyxTQUFTRSxFQUFBQSxDQUNkQyxDQUFBQSxDQUNBSixFQUNvQixDQUNwQixHQUFNLENBQUUsS0FBQSxDQUFBQyxFQUFPLE1BQUEsQ0FBQUMsQ0FBTyxDQUFBLENBQUlGLENBQUFBLENBQzFCLEdBQUlDLENBQUFBLENBQVEsRUFBQSxFQUEyQkMsQ0FBQUEsQ0FBUyxDQUFBLENBQzlDLE9BR0YsSUFBTUcsQ0FBQUEsQ0FBWUgsQ0FBQUEsQ0FBUyxDQUFBLENBRXZCSSxFQUFZLENBQUEsQ0FDaEIsSUFBQSxJQUFTQyxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsRUFBSSxFQUFBLENBQXlCQSxDQUFBQSxFQUFBQSxDQUFLLENBQ2hELElBQU1DLEdBQVlILENBQUFBLENBQVlKLENBQUFBLENBQVFNLENBQUFBLEVBQUssQ0FBQSxDQUVyQ0UsR0FESUwsQ0FBQUEsQ0FBT0ksQ0FBUSxDQUFBLEVBQUssQ0FBQSxFQUNkLElBQU0sQ0FBQSxDQUFJLENBQUEsQ0FDMUJGLENBQUFBLENBQWFBLENBQUFBLEVBQWEsRUFBS0csRUFDakMsQ0FJQSxHQUZBSCxDQUFBQSxDQUFZQSxJQUFjLENBQUEsQ0FFdEIsRUFBQSxDQUFDLE1BQUEsQ0FBTyxRQUFBLENBQVNBLENBQVMsQ0FBQSxFQUFLQSxDQUFBQSxDQUFZLENBQUEsRUFBS0EsQ0FBQUEsQ0FBWSxLQUloRSxPQUFPQSxDQUNULENBRU8sU0FBU0ksR0FBVUMsQ0FBQUEsQ0FBZSxDQUN2QyxPQUFPQSxDQUFBQSxDQUFJLFlBQVksa0JBQUEsQ0FBb0IsQ0FDekMsVUFBQSxDQUFZLGtDQUNkLENBQUMsQ0FDSCxDQUVPLFNBQVNDLEdBQVNELENBQUFBLENBQWUsQ0FDdEMsT0FBT0EsQ0FBQUEsQ0FBSSxZQUFZLGtCQUFBLENBQW9CLENBQ3pDLFVBQUEsQ0FBWSxpQ0FDZCxDQUFDLENBQ0gsQ0N4SUEsSUFBTUUsRUFBQUEsQ0FBc0IsQ0FBQyxPQUFBLENBQVMsT0FBQSxDQUFTLFFBQUEsQ0FBVSxPQUFPLEVBQzFEQyxFQUFBQSxDQUFpQix3QkFBQSxDQUVoQixTQUFTQyxFQUFBQSxDQUFVQyxFQUFzQixDQUM5QyxHQUFJRixFQUFBQSxDQUFlLElBQUEsQ0FBS0UsQ0FBTSxDQUFBLENBQzVCLE9BR0YsSUFBTUMsQ0FBQUEsQ0FBV0QsRUFBTyxLQUFBLENBQU0sR0FBRyxDQUFBLENBQUUsQ0FBQyxFQUFJLEdBQUEsQ0FDbEM3QyxDQUFBQSxDQUFVMEMsRUFBQUEsQ0FBb0IsUUFBQSxDQUFTSSxDQUFRLENBQUEsQ0FDakQsQ0FBQSxzQkFBQSxFQUF5QkEsQ0FBUSxDQUFBLFdBQUEsRUFBY0osR0FBb0IsSUFBQSxDQUFLLElBQUksQ0FBQyxDQUFBLENBQUEsQ0FDN0UsbUNBQW1DQSxFQUFBQSxDQUFvQixJQUFBLENBQUssSUFBSSxDQUFDLEdBRXJFLE1BQU0sSUFBSSxLQUFBLENBQU0xQyxDQUFPLENBQ3pCLENDWk8sU0FBUytDLEVBQUFBLENBQVFDLENBQUFBLENBQW9CLENBQzFDLElBQU1uQixDQUFBQSxDQUFPbUIsQ0FBQUEsQ0FBTSxPQUFBLEVBQVEsQ0FDM0IsT0FBSW5CLENBQUFBLENBQUssS0FBQSxHQUFVLEdBQUtBLENBQUFBLENBQUssTUFBQSxHQUFXLENBQUEsQ0FBVSxJQUFBLENBQzNDbUIsRUFBTSxPQUFBLEVBQ2YsQ0NIQSxJQUFNQyxFQUFBQSxDQUFNLFVBRUwsU0FBU0MsRUFBQUEsQ0FBV0MsQ0FBQUEsQ0FBYSxDQUN0QyxHQUFJLENBQUNBLENBQUFBLENBQUksVUFBQSxDQUFXLE1BQU0sRUFDeEIsT0FBT0EsQ0FBQUEsQ0FHVCxJQUFNQyxDQUFBQSxDQUFRRCxFQUFJLEtBQUEsQ0FBTSwwQ0FBMEMsQ0FBQSxDQUNsRSxHQUFJQyxFQUFPLENBQ1QsR0FBTSxFQUFHQyxFQUFRQyxDQUFJLENBQUEsQ0FBSUYsQ0FBQUEsQ0FDekIsT0FBTyxVQUFVQyxDQUFNLENBQUEsaUJBQUEsRUFBb0JDLENBQUksQ0FBQSxDQUNqRCxDQUNBLE9BQU9ILENBQ1QsQ0FFTyxTQUFTSSxJQUFjLENBRTVCQyxnQkFBQUEsQ0FBUSxjQUFBLENBQWUsVUFBQSxDQUFXLGdCQUFnQixDQUFDQyxDQUFBQSxDQUFTQyxDQUFBQSxHQUFhLENBQ3ZFLElBQU1QLENBQUFBLENBQU1NLENBQUFBLENBQVEsR0FBQSxDQUNkRSxDQUFBQSxDQUFVVCxHQUFXQyxDQUFHLENBQUEsQ0FDOUIsR0FBSVEsQ0FBQUEsR0FBWVIsQ0FBQUEsQ0FDZCxPQUFPTyxDQUFBQSxDQUFTLENBQUUsT0FBUSxLQUFNLENBQUMsQ0FBQSxDQUVqQzVDLENBQUFBLENBQU8sTUFBTW1DLEVBQUFBLENBQUssQ0FBQSxFQUFHRSxDQUFHLENBQUEsSUFBQSxFQUFPUSxDQUFPLENBQUEsQ0FBRSxDQUFBLENBQ3hDRCxDQUFBQSxDQUFTLENBQUUsT0FBUSxLQUFBLENBQU8sV0FBQSxDQUFhQyxDQUFRLENBQUMsRUFFcEQsQ0FBQyxFQUNILENDOUJPLFNBQVNDLEVBQUFBLENBQU1DLEVBQVksQ0FDaEMsT0FBTyxJQUFJLE9BQUEsQ0FBZTNELEdBQVksVUFBQSxDQUFXQSxDQUFBQSxDQUFTMkQsQ0FBRSxDQUFDLENBQy9ELENDT08sU0FBU0MsRUFBQUEsQ0FBa0MsQ0FDaEQsR0FBQUMsQ0FBQUEsQ0FDQSxXQUFBLENBQUFDLENBQUFBLENBQWMsQ0FBQSxDQUNkLFFBQUFDLENBQ0YsQ0FBQSxDQUE0QixDQUMxQixJQUFNQyxFQUFlLElBQUksS0FBQSxDQUFNLENBQUEsYUFBQSxFQUFnQkQsQ0FBTyxJQUFJLENBQUEsQ0FDMUQsT0FBTyxlQUFBLEdBQW1CL0MsQ0FBQUEsQ0FBWSxDQUNwQyxJQUFJaUQsQ0FBQUEsQ0FBVSxDQUFBLENBQ2QsT0FDRSxHQUFJLENBQ0YsSUFBTUMsQ0FBQUEsQ0FBVyxDQUFDTCxDQUFBQSxDQUFHLEdBQUc3QyxDQUFJLENBQUMsRUFDN0IsT0FBSStDLENBQUFBLEVBQ0ZHLENBQUFBLENBQVMsSUFBQSxDQUNQQyxzQkFBV0osQ0FBTyxDQUFBLENBQUUsSUFBQSxDQUFLLElBQU0sQ0FDN0IsTUFBTUMsQ0FDUixDQUFDLENBQ0gsRUFFSyxNQUFNLE9BQUEsQ0FBUSxJQUFBLENBQUtFLENBQVEsQ0FDcEMsQ0FBQSxNQUFTRSxDQUFBQSxDQUFHLENBRVYsR0FEQUgsSUFDSUEsQ0FBQUEsRUFBV0gsQ0FBQUEsQ0FDYixNQUFNTSxDQUFBQSxDQUVSLE1BQU1WLEVBQUFBLENBQU0sSUFBQSxDQUFLLEdBQUEsQ0FBSSxDQUFBLENBQUdPLENBQU8sQ0FBQSxDQUFJLEdBQUEsQ0FBTSxJQUFBLENBQUssTUFBQSxHQUFXLEdBQUcsRUFDOUQsQ0FFSixDQUNGLENDcEJBLElBQU1sQixDQUFBQSxDQUFNLFVBQUEsQ0FFWixlQUFlc0IsR0FBVzFCLENBQUFBLENBQWdCMkIsQ0FBQUEsQ0FBd0IsQ0FDaEU1QixFQUFBQSxDQUFVQyxDQUFNLENBQUEsQ0FFaEIsR0FBTSxDQUFFLEtBQUEsQ0FBQWYsRUFBTyxNQUFBLENBQUFDLENBQUFBLENBQVEsYUFBQSxDQUFBMEMsQ0FBYyxFQUFJRCxDQUFBQSxDQU16Q2hCLGdCQUFBQSxDQUFRLGNBQUEsQ0FBZSxVQUFBLENBQVcsa0JBQWtCLENBQUNDLENBQUFBLENBQVNDLENBQUFBLEdBQWEsQ0FDekUsSUFBTWdCLENBQUFBLENBQWtCLENBQUUsR0FBR2pCLEVBQVEsZUFBZ0IsQ0FBQSxDQUNyRCxPQUFPaUIsQ0FBQUEsQ0FBZ0IsaUJBQWlCLENBQUEsQ0FDeEMsT0FBT0EsQ0FBQUEsQ0FBZ0IsaUJBQWlCLEVBQ3hDLE9BQU9BLENBQUFBLENBQWdCLHlCQUF5QixDQUFBLENBQ2hELE9BQU9BLENBQUFBLENBQWdCLHlCQUF5QixDQUFBLENBQ2hEaEIsQ0FBQUEsQ0FBUyxDQUFFLE1BQUEsQ0FBUSxLQUFBLENBQU8sZUFBQSxDQUFBZ0IsQ0FBZ0IsQ0FBQyxFQUM3QyxDQUFDLENBQUEsQ0FFRCxJQUFJQyxFQUFNOUIsQ0FBQUEsQ0FDTjRCLENBQUFBLEdBQ0ZFLENBQUFBLENBQU16QixFQUFBQSxDQUFXTCxDQUFNLENBQUEsQ0FDdkJVLEVBQUFBLEVBQVksQ0FBQSxDQUdkLElBQU1xQixFQUFNLElBQUlDLHNCQUFBQSxDQUFjLENBQzVCLEtBQUEsQ0FBTy9DLEVBQ1AsTUFBQSxDQUFRQyxDQUFBQSxDQUFTLENBQUEsQ0FDakIsSUFBQSxDQUFNLE1BQ04sV0FBQSxDQUFhLElBQUEsQ0FDYixlQUFBLENBQWlCLE1BQUEsQ0FDakIsZUFBZ0IsQ0FDZCxTQUFBLENBQVcsSUFBQSxDQUNYLG9CQUFBLENBQXNCLE1BQ3RCLGVBQUEsQ0FBaUIsSUFBQSxDQUNqQixnQkFBQSxDQUFrQixLQUFBLENBQ2xCLFlBQWEsS0FBQSxDQUNiLDJCQUFBLENBQTZCLElBQUEsQ0FDN0Isb0JBQUEsQ0FBc0IsSUFDeEIsQ0FDRixDQUFDLENBQUEsQ0FFRDZDLENBQUFBLENBQUksV0FBQSxDQUFZLEVBQUEsQ0FBRyxpQkFBQSxDQUFvQkUsQ0FBQUEsRUFBVSxDQUMzQ0EsQ0FBQUEsQ0FBTSxLQUFBLEdBQVUsT0FBQSxFQUNsQmhFLENBQUFBLENBQU8sTUFBTW1DLENBQUFBLENBQUssVUFBQSxDQUFZNkIsQ0FBQUEsQ0FBTSxPQUFPLEVBRS9DLENBQUMsQ0FBQSxDQUVELElBQU1DLENBQUFBLENBQWNwRCxHQUFpQmdELENBQUFBLENBQUssQ0FBRSxLQUFBLENBQUE3QyxDQUFBQSxDQUFPLE9BQUFDLENBQU8sQ0FBQyxDQUFBLENBQ3JEaUQsQ0FBQUEsQ0FBVSxnQ0FBZ0Msa0JBQUEsQ0FBbUJELENBQVcsQ0FBQyxDQUFBLENBQUEsQ0FDM0VFLEVBRUosT0FBQSxNQUFNLElBQUksT0FBQSxDQUFjLENBQUMvRSxFQUFTQyxDQUFBQSxHQUFXLENBQzNDOEUsQ0FBQUEsQ0FBUSxVQUFBLENBQVcsSUFBTSxDQUN2QjlFLENBQUFBLENBQU8sSUFBSSxLQUFBLENBQU0scUJBQXFCLENBQUMsRUFDekMsQ0FBQSxDQUFHLEVBQUEsQ0FBSyxHQUFJLENBQUEsQ0FFWnlFLENBQUFBLENBQUksV0FBQSxDQUFZLElBQUEsQ0FBSyxrQkFBbUIxRSxDQUFPLENBQUEsQ0FFL0MwRSxDQUFBQSxDQUFJLFdBQUEsQ0FBWSxLQUFLLGVBQUEsQ0FBaUIsQ0FBQ00sQ0FBQUEsQ0FBUTFFLENBQUFBLENBQU0yRSxFQUFNaEMsQ0FBQUEsR0FBUSxDQUNqRWhELENBQUFBLENBQU8sSUFBSSxNQUFNLENBQUEsZUFBQSxFQUFrQmdELENBQUcsQ0FBQSxHQUFBLEVBQU0zQyxDQUFJLEtBQUsyRSxDQUFJLENBQUEsQ0FBRSxDQUFDLEVBQzlELENBQUMsQ0FBQSxDQUVEUCxDQUFBQSxDQUFJLFdBQUEsQ0FBWSxJQUFBLENBQUssc0JBQXVCLENBQUNNLENBQUFBLENBQVF6QixDQUFBQSxHQUFZLENBQy9ELEdBQU0sQ0FBRSxRQUFBLENBQUEyQixDQUFBQSxDQUFVLE1BQUEsQ0FBQTFFLENBQU8sQ0FBQSxDQUFJK0MsQ0FBQUEsQ0FDN0J0RCxDQUFBQSxDQUFPLElBQUksTUFBTSxDQUFBLGtCQUFBLEVBQXFCaUYsQ0FBUSxDQUFBLEVBQUEsRUFBSzFFLENBQU0sRUFBRSxDQUFDLEVBQzlELENBQUMsQ0FBQSxDQUVEa0UsRUFBSSxPQUFBLENBQVFJLENBQU8sRUFDckIsQ0FBQyxFQUNELFlBQUEsQ0FBYUMsQ0FBSyxDQUFBLENBQ1hMLENBQ1QsQ0FFQSxlQUFzQlMsRUFBQUEsQ0FDcEJ4QyxDQUFBQSxDQUNBMkIsQ0FBQUEsQ0FDZSxDQUNmMUQsQ0FBQUEsQ0FBTyxJQUFBLENBQUttQyxDQUFBQSxDQUFLLGNBQWMsRUFDL0IsR0FBTSxDQUFFLE1BQUEsQ0FBQXFDLENBQUFBLENBQVEsSUFBQUMsQ0FBQUEsQ0FBSyxLQUFBLENBQUF6RCxDQUFBQSxDQUFPLE1BQUEsQ0FBQUMsRUFBUSxRQUFBLENBQUF5RCxDQUFTLENBQUEsQ0FBSWhCLENBQUFBLENBRTNDSSxFQUFNLE1BQU1kLEVBQUFBLENBQVMsQ0FBRSxFQUFBLENBQUlTLEdBQVksV0FBQSxDQUFhLENBQUUsQ0FBQyxDQUFBLENBQzNEMUIsQ0FBQUEsQ0FDQTJCLENBQ0YsQ0FBQSxDQUVBLE1BQU1pQixlQUFNSCxDQUFBQSxDQUFRLENBQUUsU0FBQSxDQUFXLElBQUssQ0FBQyxDQUFBLENBRXZDLElBQU05QyxDQUFBQSxDQUFNb0MsQ0FBQUEsQ0FBSSxZQUFZLFFBQUEsQ0FDNUJwQyxDQUFBQSxDQUFJLE1BQUEsQ0FBTyxLQUFLLEVBRWhCb0MsQ0FBQUEsQ0FBSSxXQUFBLENBQVksWUFBQSxDQUFhVyxDQUFHLEVBQzNCWCxDQUFBQSxDQUFJLFdBQUEsQ0FBWSxVQUFBLEVBQVcsRUFDOUJBLEVBQUksV0FBQSxDQUFZLGFBQUEsRUFBYyxDQUdoQyxJQUFNYyxFQUFXdkgsU0FBQUEsQ0FBS21ILENBQUFBLENBQVEsYUFBYSxDQUFBLENBQ3JDSyxFQUFRLElBQUEsQ0FBSyxJQUFBLENBQUtKLENBQUFBLENBQU1DLENBQVEsRUFDaENJLENBQUFBLENBQWdCLEdBQUEsQ0FBT0wsQ0FBQUEsQ0FDdkJNLENBQUFBLENBQWEvRCxFQUFRQyxDQUFBQSxDQUFTLENBQUEsQ0FFOUIrRCxDQUFBQSxDQUFTLElBQUlwRSxHQUFrQmdFLENBQUFBLENBQVVHLENBQUFBLENBQVlOLENBQUcsQ0FBQSxDQUUxRFEsRUFBVSxDQUFBLENBQ1ZDLENBQUFBLENBQ0FDLENBQUFBLENBQVcsQ0FBQSxDQUNYQyxFQUNBQyxDQUFBQSxDQUNBQyxDQUFBQSxDQUVFQyxDQUFBQSxDQUFpQkMsQ0FBQUEsRUFBbUIsQ0FDeENQLENBQUFBLEVBQUFBLENBQ0EsR0FBSSxDQUNGRCxDQUFBQSxDQUFPLE1BQU1RLENBQU0sRUFDckIsQ0FBQSxNQUFTdkcsQ0FBQUEsQ0FBTyxDQUNkbUcsQ0FBQUEsR0FBZW5HLEVBQ2pCLENBQ0YsRUFFTXdHLENBQUFBLENBQVEsQ0FBQ0MsQ0FBQUEsQ0FBYUMsQ0FBQUEsQ0FBYXpELElBQXVCLENBQzlELEdBQUlrRCxDQUFBQSxDQUFZLENBQ2RFLElBQVdGLENBQVUsQ0FBQSxDQUNyQixNQUNGLENBRUEsR0FBSUgsQ0FBQUEsRUFBV0osQ0FBQUEsQ0FBTyxDQUNwQlEsQ0FBQUEsS0FDQSxNQUNGLENBRUEsR0FBSXBELEVBQUFBLENBQVFDLENBQUssQ0FBQSxDQUFHLE9BRXBCLElBQU1mLEVBQUFBLENBQVNlLEVBQU0sUUFBQSxFQUFTLENBQ3hCMEQsQ0FBQUEsQ0FBYzFFLEVBQUFBLENBQWdCQyxHQUFRZSxDQUFBQSxDQUFNLE9BQUEsRUFBUyxDQUFBLENBQzNELEdBQUkwRCxDQUFBQSxHQUFnQixNQUFBLENBQVcsQ0FDN0JSLENBQUFBLEdBQWUsSUFBSSxLQUFBLENBQU0sQ0FBQSxlQUFBLEVBQWtCSCxDQUFPLENBQUEsQ0FBRSxFQUNwRCxNQUNGLENBRUEsSUFBTVksRUFBQUEsQ0FBYzdFLEVBQVEsQ0FBQSxDQUN0QjhFLENBQUFBLENBQVUzRSxFQUFBQSxDQUFPLFFBQUEsQ0FBUyxFQUFHRixDQUFBQSxDQUFTNEUsRUFBVyxDQUFBLENBRXZELEdBQUlYLElBQW9CLE1BQUEsQ0FBVyxDQUNqQ0ssQ0FBQUEsQ0FBY08sQ0FBTyxFQUNyQlosQ0FBQUEsQ0FBa0JVLENBQUFBLENBQ2xCLE1BQ0YsQ0FFQSxJQUFNRyxDQUFBQSxDQUFxQkgsQ0FBQUEsQ0FBY1YsQ0FBQUEsQ0FDekMsR0FBSWEsQ0FBQUEsQ0FBcUJqQixDQUFBQSxDQUFnQixFQUFBLENBQ3ZDLE9BR0YsR0FBSWlCLENBQUFBLEVBQXNCakIsQ0FBQUEsQ0FBZ0IsR0FBQSxDQUN4Q1MsQ0FBQUEsQ0FBY08sQ0FBTyxDQUFBLENBQUEsS0FDaEIsQ0FDTCxJQUFNRSxFQUFBQSxDQUFpQixLQUFLLEtBQUEsQ0FBTUQsQ0FBQUEsQ0FBcUJqQixDQUFhLENBQUEsQ0FDcEUsUUFBU3hELEVBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFBQSxDQUFJMEUsRUFBQUEsRUFBa0JmLEVBQVVKLENBQUFBLENBQU92RCxFQUFBQSxFQUFBQSxDQUNyRGlFLENBQUFBLENBQWNPLENBQU8sRUFFekIsQ0FDQVosQ0FBQUEsQ0FBa0JVLENBQUFBLENBRWxCLElBQU1LLEdBQWMsSUFBQSxDQUFLLEtBQUEsQ0FBT2hCLENBQUFBLENBQVVKLENBQUFBLENBQVMsR0FBRyxDQUFBLENBQ2xELElBQUEsQ0FBSyxHQUFBLENBQUlvQixFQUFBQSxDQUFjZCxDQUFRLENBQUEsQ0FBSSxFQUFBLEdBQ3JDQSxDQUFBQSxDQUFXYyxFQUFBQSxDQUNYakcsRUFBTyxJQUFBLENBQUttQyxDQUFBQSxDQUFLLENBQUEsVUFBQSxFQUFhLElBQUEsQ0FBSyxNQUFNZ0QsQ0FBUSxDQUFDLENBQUEsQ0FBQSxDQUFHLENBQUEsRUFFekQsRUFFQXJCLENBQUFBLENBQUksV0FBQSxDQUFZLEVBQUEsQ0FBRyxPQUFBLENBQVMyQixDQUFLLENBQUEsQ0FDakMsTUFBTWhFLEVBQUFBLENBQVVDLENBQUcsRUFDbkIsR0FBSSxDQUNGLE1BQU0sSUFBSSxRQUFjLENBQUN3RSxDQUFBQSxDQUFHQyxDQUFBQSxHQUFPLENBQUNkLEVBQVVDLENBQVEsQ0FBQSxDQUFJLENBQUNZLENBQUFBLENBQUdDLENBQUMsQ0FBRSxFQUNuRSxDQUFBLE9BQUUsQ0FDQSxNQUFNeEUsRUFBQUEsQ0FBU0QsQ0FBRyxDQUFBLENBQ2xCb0MsQ0FBQUEsQ0FBSSxZQUFZLEdBQUEsQ0FBSSxPQUFBLENBQVMyQixDQUFLLENBQUEsQ0FDbEMsTUFBTVQsQ0FBQUEsQ0FBTyxLQUFBLEdBQ2YsQ0FFQSxHQUFJSSxDQUFBQSxFQUFjSCxDQUFBQSxHQUFZLENBQUEsQ0FDNUIsTUFBTUcsR0FBYyxJQUFJLEtBQUEsQ0FBTSxvQkFBb0IsQ0FBQSxDQUdwRCxHQUFJLENBQ0YsSUFBTWdCLENBQUFBLENBQXVCLENBQUUsUUFBQTFDLENBQUFBLENBQVMsT0FBQSxDQUFBdUIsQ0FBQUEsQ0FBUyxRQUFBLENBQUFMLENBQVMsQ0FBQSxDQUMxRCxNQUFNeUIsa0JBQUFBLENBQVVoSixTQUFBQSxDQUFLbUgsRUFBUSxhQUFhLENBQUEsQ0FBRyxJQUFBLENBQUssU0FBQSxDQUFVNEIsQ0FBTSxDQUFDLENBQUEsQ0FDbkVwRyxDQUFBQSxDQUFPLElBQUEsQ0FBS21DLEVBQUssQ0FBQSxnQkFBQSxFQUFtQjhDLENBQU8sQ0FBQSxlQUFBLENBQWlCLEVBQzlELFFBQUUsQ0FDQW5CLENBQUFBLENBQUksS0FBQSxHQUNOLENBQ0YsQ0NqTk8sU0FBU3dDLENBQUFBLENBQ2RyRCxDQUFBQSxDQUNBakcsRUFDaUQsQ0FDakQsT0FBTyxDQUFBLEdBQUlvRCxDQUFBQSxHQUFTLENBQ2xCLEdBQUksQ0FDRixJQUFNbUcsQ0FBQUEsQ0FBTXRELEVBQUcsR0FBRzdDLENBQUksQ0FBQSxDQUN0QixPQUFJbUcsYUFBZSxPQUFBLENBQ1ZBLENBQUFBLENBQUksS0FBQSxDQUFNLElBQU12SixDQUFZLENBQUEsQ0FFOUJ1SixDQUNULENBQUEsS0FBUSxDQUNOLE9BQU92SixDQUNULENBQ0YsQ0FDRixDQ0lPLElBQU13SixDQUFBQSxDQUFnQixLQUNoQkMsQ0FBQUEsQ0FBaUIsSUFBQSxDQUNqQkMsQ0FBQUEsQ0FBYyxFQUFBLENBQ2RDLEVBQW1CLENBQUEsQ0FDbkJDLENBQUFBLENBQWtCLEtBQUEsQ0FFSEMsbUJBQUUsTUFBQSxDQUFPLENBQ25DLFFBQUEsQ0FBVUEsa0JBQUFBLENBQ1AsUUFBTyxDQUNQLFFBQUEsRUFBUyxDQUNULE9BQUEsQ0FBUUYsQ0FBZ0IsQ0FBQSxDQUN4QixRQUFBLENBQVMsK0JBQStCLENBQUEsQ0FDM0MsTUFBT0Usa0JBQUFBLENBQUUsTUFBQSxFQUFPLENBQUUsUUFBQSxHQUFXLE9BQUEsQ0FBUUwsQ0FBYSxDQUFBLENBQUUsUUFBQSxDQUFTLGFBQWEsQ0FBQSxDQUMxRSxNQUFBLENBQVFLLGtCQUFBQSxDQUNMLE1BQUEsRUFBTyxDQUNQLFFBQUEsRUFBUyxDQUNULE9BQUEsQ0FBUUosQ0FBYyxDQUFBLENBQ3RCLFFBQUEsQ0FBUyxjQUFjLENBQUEsQ0FDMUIsSUFBS0ksa0JBQUFBLENBQUUsTUFBQSxFQUFPLENBQUUsUUFBQSxHQUFXLE9BQUEsQ0FBUUgsQ0FBVyxDQUFBLENBQUUsUUFBQSxDQUFTLG1CQUFtQixDQUFBLENBQzVFLGdCQUFBLENBQWtCRyxrQkFBQUEsQ0FDZixPQUFBLEdBQ0EsUUFBQSxFQUFTLENBQ1QsT0FBQSxDQUFRLEtBQUssRUFDYixRQUFBLENBQVMsMkJBQTJCLENBQUEsQ0FDdkMsTUFBQSxDQUFRQSxtQkFDTCxNQUFBLEVBQU8sQ0FDUCxRQUFBLEVBQVMsQ0FDVCxRQUFRRCxDQUFlLENBQUEsQ0FDdkIsUUFBQSxDQUFTLGtCQUFrQixFQUM5QixhQUFBLENBQWVDLGtCQUFBQSxDQUNaLE9BQUEsRUFBUSxDQUNSLFVBQVMsQ0FDVCxPQUFBLENBQVEsS0FBSyxDQUFBLENBQ2IsU0FBUyw4Q0FBOEMsQ0FDNUQsQ0FBQyxFQ2pDTSxTQUFTQyxFQUFBQSxDQUFRaEssQ0FBQUEsQ0FBYzhGLENBQUFBLENBQXVCLENBQzNEbUUsa0JBQ0csSUFBQSxDQUFLakssQ0FBSSxDQUFBLENBQ1QsUUFBQSxDQUFTLFdBQVksdUNBQWtDLENBQUEsQ0FDdkQsTUFBQSxDQUFPLHNCQUFBLENBQXdCLDJCQUFRLENBQUEsRUFBRzBKLENBQWEsQ0FBQSxDQUFFLENBQUEsQ0FDekQsTUFBQSxDQUFPLHVCQUFBLENBQXlCLDBCQUFBLENBQVEsQ0FBQSxFQUFHQyxDQUFjLENBQUEsQ0FBRSxDQUFBLENBQzNELE1BQUEsQ0FBTyxvQkFBQSxDQUFzQixlQUFNLENBQUEsRUFBR0MsQ0FBVyxDQUFBLENBQUUsQ0FBQSxDQUNuRCxPQUFPLHlCQUFBLENBQTJCLDRDQUFBLENBQVcsQ0FBQSxFQUFHQyxDQUFnQixFQUFFLENBQUEsQ0FDbEUsTUFBQSxDQUFPLHNCQUFBLENBQXdCLDBCQUFBLENBQVEsR0FBR0MsQ0FBZSxDQUFBLENBQUUsQ0FBQSxDQUMzRCxNQUFBLENBQU8sMkJBQTRCLCtEQUFBLENBQW9CLEtBQUssQ0FBQSxDQUM1RCxNQUFBLENBQ0Msb0JBQ0EsbUZBQUEsQ0FDQW5KLENBQ0YsQ0FBQSxDQUNDLE1BQUEsQ0FBTyxNQUFPc0UsQ0FBQUEsQ0FBZ0JpRixDQUFBQSxHQUFTLENBQ3RDLEdBQUksQ0FDRixNQUFNcEUsQ0FBQUEsQ0FBU2IsQ0FBQUEsQ0FBUSxDQUNyQixNQUFPdUUsQ0FBQUEsQ0FBTXJKLENBQUFBLENBQWF1SixDQUFhLENBQUEsQ0FBRVEsRUFBSyxLQUFLLENBQUEsQ0FDbkQsTUFBQSxDQUFRVixDQUFBQSxDQUFNckosRUFBYXdKLENBQWMsQ0FBQSxDQUFFTyxDQUFBQSxDQUFLLE1BQU0sRUFDdEQsR0FBQSxDQUFLVixDQUFBQSxDQUFNckosQ0FBQUEsQ0FBYXlKLENBQVcsRUFBRU0sQ0FBQUEsQ0FBSyxHQUFHLENBQUEsQ0FDN0MsUUFBQSxDQUFVVixFQUFNckosQ0FBQUEsQ0FBYTBKLENBQWdCLENBQUEsQ0FBRUssQ0FBQUEsQ0FBSyxRQUFRLENBQUEsQ0FDNUQsTUFBQSxDQUFRQSxDQUFBQSxDQUFLLE1BQUEsRUFBVUosRUFDdkIsZ0JBQUEsQ0FBa0JJLENBQUFBLENBQUssZ0JBQUEsRUFBb0IsQ0FBQSxDQUFBLENBQzNDLGNBQWVBLENBQUFBLENBQUssYUFBQSxFQUFpQnZKLENBQ3ZDLENBQUMsRUFDSCxDQUFBLE1BQVMrRixDQUFBQSxDQUFHLENBQ1Z4RCxDQUFBQSxDQUFPLE1BQU13RCxDQUFDLEVBQ2hCLENBQ0YsQ0FBQyxFQUNIdUQsaUJBQUFBLENBQVEsS0FBQSxDQUFNN0csRUFBQUEsRUFBTyxFQUN2QixDQzlDQSxPQUFBLENBQVEsSUFBQSxDQUFLLE1BQUEsQ0FBUSxJQUFNK0csWUFBQUEsQ0FBSSxJQUFBLEVBQU0sQ0FBQSxDQUVyQ0gsR0FBUSxLQUFBLENBQU8sTUFBTy9FLENBQUFBLENBQVEyQixDQUFBQSxHQUFZLENBQ3hDLEdBQUksQ0FDRnJELEVBQUFBLENBQWMsT0FBQSxDQUFTNkcsR0FBTUQsWUFBQUEsQ0FBSSxXQUFBLENBQVksWUFBQSxDQUFhQyxDQUFDLENBQUMsQ0FBQSxDQUM1REQsWUFBQUEsQ0FBSSxJQUFBLEVBQU0sSUFBQSxHQUNWLE1BQU1BLFlBQUFBLENBQUksU0FBQSxFQUFVLENBQ3BCLE1BQU0xQyxFQUFBQSxDQUFPeEMsQ0FBQUEsQ0FBUTJCLENBQU8sRUFDOUIsUUFBRSxDQUNBdUQsWUFBQUEsQ0FBSSxJQUFBLEdBQ04sQ0FDRixDQUFDLENBQUEiLCJmaWxlIjoiYXBwLmNqcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNoaW0gZ2xvYmFscyBpbiBjanMgYnVuZGxlXG4vLyBUaGVyZSdzIGEgd2VpcmQgYnVnIHRoYXQgZXNidWlsZCB3aWxsIGFsd2F5cyBpbmplY3QgaW1wb3J0TWV0YVVybFxuLy8gaWYgd2UgZXhwb3J0IGl0IGFzIGBjb25zdCBpbXBvcnRNZXRhVXJsID0gLi4uIF9fZmlsZW5hbWUgLi4uYFxuLy8gQnV0IHVzaW5nIGEgZnVuY3Rpb24gd2lsbCBub3QgY2F1c2UgdGhpcyBpc3N1ZVxuXG5jb25zdCBnZXRJbXBvcnRNZXRhVXJsID0gKCkgPT4gXG4gIHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiBcbiAgICA/IG5ldyBVUkwoYGZpbGU6JHtfX2ZpbGVuYW1lfWApLmhyZWYgXG4gICAgOiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1NDUklQVCcpIFxuICAgICAgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyBcbiAgICAgIDogbmV3IFVSTChcIm1haW4uanNcIiwgZG9jdW1lbnQuYmFzZVVSSSkuaHJlZjtcblxuZXhwb3J0IGNvbnN0IGltcG9ydE1ldGFVcmwgPSAvKiBAX19QVVJFX18gKi8gZ2V0SW1wb3J0TWV0YVVybCgpXG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwidXJsXCI7XG5cbmV4cG9ydCBjb25zdCBiYXNlZGlyID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4oXG4gIG5hbWU6IHN0cmluZyxcbiAgcGFyc2VyOiBFbnZQYXJzZXI8VD4sXG4gIGRlZmF1bHRWYWx1ZT86IFQsXG4pOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4oXG4gIG5hbWU6IHN0cmluZyxcbiAgcGFyc2VyOiBFbnZQYXJzZXI8VD4sXG4gIGRlZmF1bHRWYWx1ZT86IFQsXG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VyKHByb2Nlc3MuZW52W25hbWVdKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7dmFsdWV9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGJhc2VkaXIgfSBmcm9tIFwiLi9iYXNlZGlyXCI7XG5pbXBvcnQgeyBwZW52IH0gZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5jb25zdCBwdXBBcHBTZWFyY2hQYXRocyA9IFtcbiAgam9pbihiYXNlZGlyLCBcImNqcy9hcHAuY2pzXCIpLCAvLyBwcm9jZXNzIGZyb20gZGlzdFxuICBqb2luKGJhc2VkaXIsIFwiYXBwLmNqc1wiKSwgLy8gcHJvY2VzcyBmcm9tIGRpc3QvY2pzXG4gIGpvaW4oYmFzZWRpciwgXCIuLi8uLi9janMvYXBwLmNqc1wiKSwgLy8gcHJvY2VzcyBmcm9tIHNyY1xuXTtcbmV4cG9ydCBjb25zdCBwdXBBcHBQYXRoID0gcHVwQXBwU2VhcmNoUGF0aHMuZmluZChleGlzdHNTeW5jKSE7XG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuZXhwb3J0IGNvbnN0IHB1cFVzZUlubmVyUHJveHkgPSBlbnZbXCJQVVBfVVNFX0lOTkVSX1BST1hZXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBGRm1wZWdQYXRoID0gZW52W1wiRkZNUEVHX0JJTlwiXSA/PyBgZmZtcGVnYDtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB7IENoaWxkUHJvY2VzcywgdHlwZSBTZXJpYWxpemFibGUgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiBGdW5jdGlvbiwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBpbXBsKCk6IExvZ2dlckxpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbXBsO1xuICB9XG5cbiAgc2V0IGltcGwodmFsdWU6IExvZ2dlckxpa2UpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IHZhbHVlLmRlYnVnID8/IGNvbnNvbGUuZGVidWc7XG4gICAgY29uc3QgaW5mbyA9IHZhbHVlLmluZm8gPz8gY29uc29sZS5pbmZvO1xuICAgIGNvbnN0IHdhcm4gPSB2YWx1ZS53YXJuID8/IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlLmVycm9yID8/IGNvbnNvbGUuZXJyb3I7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBwdXBMb2dMZXZlbCA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBwdXBMb2dMZXZlbCA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IHB1cExvZ0xldmVsID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IHB1cExvZ0xldmVsID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1ZyhtZXNzYWdlLnNsaWNlKERFQlVHLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1lc3NhZ2Uuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoV0FSTikpIHtcbiAgICAgIHRoaXMud2FybihtZXNzYWdlLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtZXNzYWdlLnNsaWNlKEVSUk9SLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyIHwgU2VyaWFsaXphYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwibWVzc2FnZVwiLCBkaXNwYXRjaClcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHNwYXduLCB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgUFVQX0FSR1NfRU5WX0tFWSA9IFwiX19QVVBfQVJHU19fXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgcHVwQXJncyA9IHByb2Nlc3MuZW52W1BVUF9BUkdTX0VOVl9LRVldO1xuICBpZiAocHVwQXJncykge1xuICAgIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLnByb2Nlc3MuYXJndi5zbGljZSgtMSldO1xuICAgIGFyZ3MucHVzaCguLi5KU09OLnBhcnNlKHB1cEFyZ3MpKTtcbiAgICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICAgIHJldHVybiBhcmdzO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgcHJvY2Vzcy5hcmd2KTtcbiAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICByZXR1cm4geyBwcm9jZXNzOiBwcm9jLCB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5pbXBvcnQgZWxlY3Ryb24sIHsgdHlwZSBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSBcIi4vcHJvY2Vzc1wiO1xuXG5leHBvcnQgY29uc3QgRUxFQ1RST05fT1BUUyA9IFtcbiAgXCJuby1zYW5kYm94XCIsXG4gIFwiZGlzYWJsZS1zZXR1aWQtc2FuZGJveFwiLFxuICBcImRpc2FibGUtZ3B1XCIsXG4gIFwiZGlzYWJsZS1kZXYtc2htLXVzYWdlXCIsXG4gIFwiZGlzYWJsZS1zb2Z0d2FyZS1yYXN0ZXJpemVyXCIsXG4gIFwiZGlzYWJsZS13ZWItc2VjdXJpdHlcIixcbiAgXCJkaXNhYmxlLXNpdGUtaXNvbGF0aW9uLXRyaWFsc1wiLFxuICBcImRpc2FibGUtZmVhdHVyZXM9SXNvbGF0ZU9yaWdpbnMsc2l0ZS1wZXItcHJvY2Vzc1wiLFxuICBcImFsbG93LWluc2VjdXJlLWxvY2FsaG9zdFwiLFxuICBcImlnbm9yZS1jZXJ0aWZpY2F0ZS1lcnJvcnNcIixcbiAgXCJkaXNhYmxlLWJsaW5rLWZlYXR1cmVzPUF1dG9tYXRpb25Db250cm9sbGVkXCIsXG4gIFwibXV0ZS1hdWRpb1wiLFxuICBcImRpc2FibGUtZXh0ZW5zaW9uc1wiLFxuICBcImRpc2FibGUtYmFja2dyb3VuZC1uZXR3b3JraW5nXCIsXG4gIFwiYWRkcmVzcy1mYW1pbHk9aXB2NFwiLFxuICBcImRpc2FibGUtYXN5bmMtZG5zXCIsXG4gIFwiZm9yY2UtZGV2aWNlLXNjYWxlLWZhY3Rvcj0xXCIsXG4gIFwidHJhY2Utd2FybmluZ3NcIixcbiAgXCJmb3JjZS1jb2xvci1wcm9maWxlPXNyZ2JcIixcbiAgXCJkaXNhYmxlLWNvbG9yLWNvcnJlY3QtcmVuZGVyaW5nXCIsXG4gIFwibG9nLWxldmVsPTNcIixcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5FbGVjdHJvbkFwcChzaXplOiBTaXplLCBhcHA6IHVua25vd24sIGFyZ3M6IHVua25vd25bXSkge1xuICBjb25zdCBlbGVjdHJvbkFyZ3MgPSBFTEVDVFJPTl9PUFRTLm1hcCgoYSkgPT4gYC0tJHthfWApO1xuICBjb25zdCBjbWRQYXJ0cyA9IFtdO1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJsaW51eFwiKSB7XG4gICAgY21kUGFydHMucHVzaChcbiAgICAgIFwieHZmYi1ydW5cIixcbiAgICAgIFwiLS1hdXRvLXNlcnZlcm51bVwiLFxuICAgICAgYC0tc2VydmVyLWFyZ3M9Jy1zY3JlZW4gMCAke3NpemUud2lkdGh9eCR7c2l6ZS5oZWlnaHR9eDI0J2AsXG4gICAgKTtcbiAgfVxuICBjbWRQYXJ0cy5wdXNoKGVsZWN0cm9uLCAuLi5lbGVjdHJvbkFyZ3MsIGFwcCk7XG4gIHJldHVybiBleGVjKGNtZFBhcnRzLmpvaW4oXCIgXCIpLCB7XG4gICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgIHNoZWxsOiB0cnVlLFxuICAgIGVudjoge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICBFTEVDVFJPTl9ESVNBQkxFX0RCVVM6IFwiMVwiLFxuICAgICAgUlVTVF9CQUNLVFJBQ0U6IFwiZnVsbFwiLFxuICAgICAgX19QVVBfQVJHU19fOiBKU09OLnN0cmluZ2lmeShhcmdzKSxcbiAgICB9LFxuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMTAuXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgYmFzZWRpciB9IGZyb20gXCIuLi9iYXNlL2Jhc2VkaXJcIjtcblxuY29uc3QgeyBwbGF0Zm9ybSwgYXJjaCB9ID0gcHJvY2VzcztcblxuY29uc3QgcnVzdFBhdGggPSBgcnVzdC8ke3BsYXRmb3JtfS0ke2FyY2h9Lm5vZGVgO1xuXG5jb25zdCBuYXRpdmVTZWFyY2hQYXRocyA9IFtcbiAgam9pbihiYXNlZGlyLCBgLi4vLi4vJHtydXN0UGF0aH1gKSwgLy8gcHJvY2VzcyBzdGFydCBmcm9tIHNyY1xuICBqb2luKGJhc2VkaXIsIGAuLi8ke3J1c3RQYXRofWApLCAvLyBwcm9jZXNzIHN0YXJ0IGZyb20gZGlzdFxuXTtcbmNvbnN0IG1vZCA9IHJlcXVpcmUobmF0aXZlU2VhcmNoUGF0aHMuZmluZChleGlzdHNTeW5jKSEpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpeGVkQnVmZmVyV3JpdGVyIHtcbiAgbmV3IChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgYnVmZmVyU2l6ZTogbnVtYmVyLFxuICAgIHF1ZXVlRGVwdGg/OiBudW1iZXIsXG4gICk6IEZpeGVkQnVmZmVyV3JpdGVyO1xuXG4gIHdyaXRlKGJ1ZmZlcjogQnVmZmVyKTogdm9pZDtcblxuICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgY29uc3QgRml4ZWRCdWZmZXJXcml0ZXIgPSBtb2QuRml4ZWRCdWZmZXJXcml0ZXIgYXMgRml4ZWRCdWZmZXJXcml0ZXI7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCA9IDMyO1xuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX0hFSUdIVCA9IDE7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFdyYXBwZXJIVE1MKHRhcmdldFVSTDogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICByZXR1cm4gYDwhRE9DVFlQRSBodG1sPlxuPGh0bWw+XG48aGVhZD5cbiAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XG4gIDxzdHlsZT5cbiAgICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG4gICAgaHRtbCwgYm9keSB7IHdpZHRoOiAke3dpZHRofXB4OyBoZWlnaHQ6ICR7aGVpZ2h0ICsgMX1weDsgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAgICN0YXJnZXQgeyBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICB0b3A6IDA7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6ICR7aGVpZ2h0fXB4OyBcbiAgICAgIGJvcmRlcjogbm9uZTsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgI3N0ZWdvIHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAke2hlaWdodH1weDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogMXB4OyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7XG4gICAgfVxuICA8L3N0eWxlPlxuPC9oZWFkPlxuPGJvZHk+XG4gIDxpZnJhbWUgaWQ9XCJ0YXJnZXRcIiBzcmM9XCIke3RhcmdldFVSTH1cIj48L2lmcmFtZT5cbiAgPGNhbnZhcyBpZD1cInN0ZWdvXCIgd2lkdGg9XCIke3dpZHRofVwiIGhlaWdodD1cIjFcIj48L2NhbnZhcz5cbiAgPHNjcmlwdD5cbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBXSURUSCA9ICR7d2lkdGh9O1xuICAgICAgY29uc3QgTUFSS0VSX1dJRFRIID0gJHtGUkFNRV9TWU5DX01BUktFUl9XSURUSH07XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlZ28nKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHsgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlIH0pO1xuICAgICAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG4gICAgICBsZXQgcmFmSWQgPSBudWxsO1xuXG4gICAgICBmdW5jdGlvbiBlbmNvZGVUaW1lc3RhbXAodGltZXN0YW1wTXMpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShXSURUSCwgMSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBpbWFnZURhdGEuZGF0YTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuICAgICAgICBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNQVJLRVJfV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGJpdCA9ICh0aW1lc3RhbXBJbnQgPj4+IChNQVJLRVJfV0lEVEggLSAxIC0gaSkpICYgMTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGJpdCA/IDI1NSA6IDA7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMl0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBmb3IgKGxldCBpID0gTUFSS0VSX1dJRFRIOyBpIDwgV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVMb29wKCkge1xuICAgICAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKGVsYXBzZWQpO1xuICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH1cblxuICAgICAgd2luZG93Ll9fcHVwX3N0YXJ0X3JlY29yZGluZ19fID0gKCkgPT4ge1xuICAgICAgICBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKDApO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfc3RvcF9yZWNvcmRpbmdfXyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJhZklkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgICAgIHJhZklkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpO1xuICA8L3NjcmlwdD5cbjwvYm9keT5cbjwvaHRtbD5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVGltZXN0YW1wKFxuICBiaXRtYXA6IEJ1ZmZlcixcbiAgc2l6ZTogU2l6ZSxcbik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgaWYgKHdpZHRoIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggfHwgaGVpZ2h0IDwgMikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBtYXJrZXJSb3cgPSBoZWlnaHQgLSAxO1xuXG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICBjb25zdCBwaXhlbElkeCA9IChtYXJrZXJSb3cgKiB3aWR0aCArIGkpICogNDtcbiAgICBjb25zdCByID0gYml0bWFwW3BpeGVsSWR4XSA/PyAwO1xuICAgIGNvbnN0IGJpdCA9IHIgPiAxMjcgPyAxIDogMDtcbiAgICB0aW1lc3RhbXAgPSAodGltZXN0YW1wIDw8IDEpIHwgYml0O1xuICB9XG5cbiAgdGltZXN0YW1wID0gdGltZXN0YW1wID4+PiAwO1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRpbWVzdGFtcCkgfHwgdGltZXN0YW1wIDwgMCB8fCB0aW1lc3RhbXAgPiAxZTcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0U3luYyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBjZHAuc2VuZENvbW1hbmQoXCJSdW50aW1lLmV2YWx1YXRlXCIsIHtcbiAgICBleHByZXNzaW9uOiBgd2luZG93Ll9fcHVwX3N0YXJ0X3JlY29yZGluZ19fKClgLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BTeW5jKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGNkcC5zZW5kQ29tbWFuZChcIlJ1bnRpbWUuZXZhbHVhdGVcIiwge1xuICAgIGV4cHJlc3Npb246IGB3aW5kb3cuX19wdXBfc3RvcF9yZWNvcmRpbmdfXygpYCxcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5jb25zdCBTVVBQT1JURURfUFJPVE9DT0xTID0gW1wiZmlsZTpcIiwgXCJodHRwOlwiLCBcImh0dHBzOlwiLCBcImRhdGE6XCJdO1xuY29uc3QgU09VUkNFX1BBVFRFUk4gPSAvXihmaWxlOnxodHRwcz86fGRhdGE6KS87XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hUTUwoc291cmNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFNPVVJDRV9QQVRURVJOLnRlc3Qoc291cmNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHByb3RvY29sID0gc291cmNlLnNwbGl0KFwiOlwiKVswXSArIFwiOlwiO1xuICBjb25zdCBtZXNzYWdlID0gU1VQUE9SVEVEX1BST1RPQ09MUy5pbmNsdWRlcyhwcm90b2NvbClcbiAgICA/IGB1bnN1cHBvcnRlZCBwcm90b2NvbDogJHtwcm90b2NvbH0sIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YFxuICAgIDogYGludmFsaWQgc291cmNlIGZvcm1hdCwgZXhwZWN0ZWQgJHtTVVBQT1JURURfUFJPVE9DT0xTLmpvaW4oXCIsIFwiKX1gO1xuXG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoaW1hZ2U6IE5hdGl2ZUltYWdlKSB7XG4gIGNvbnN0IHNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gIGlmIChzaXplLndpZHRoID09PSAwIHx8IHNpemUuaGVpZ2h0ID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGltYWdlLmlzRW1wdHkoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHNlc3Npb24gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbUHJveHldXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm94aWVkVXJsKHVybDogc3RyaW5nKSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICAvLyBSZWRpcmVjdCBib3NzLmhkc2xiLmNvbSB0byBib3NzLmJpbGliaWxpLmNvXG4gIGNvbnN0IG1hdGNoID0gdXJsLm1hdGNoKC9eaHR0cHM6XFwvXFwvKFteLV0rKS1ib3NzXFwuaGRzbGJcXC5jb20oLiopJC8pO1xuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBwcmVmaXgsIHBhdGhdID0gbWF0Y2g7XG4gICAgcmV0dXJuIGBodHRwOi8vJHtwcmVmaXh9LWJvc3MuYmlsaWJpbGkuY28ke3BhdGh9YDtcbiAgfVxuICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlUHJveHkoKSB7XG4gIC8vIFJlZGlyZWN0IGJvc3MuaGRzbGIuY29tIHRvIGJvc3MuYmlsaWJpbGkuY29cbiAgc2Vzc2lvbi5kZWZhdWx0U2Vzc2lvbi53ZWJSZXF1ZXN0Lm9uQmVmb3JlUmVxdWVzdCgoZGV0YWlscywgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCB1cmwgPSBkZXRhaWxzLnVybDtcbiAgICBjb25zdCBwcm94aWVkID0gcHJveGllZFVybCh1cmwpO1xuICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGAke3VybH0gLT4gJHtwcm94aWVkfWApO1xuICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICB9XG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKFxuICBjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkLFxuICBtczogbnVtYmVyLFxuKSB7XG4gIGxldCB0b2tlbjogTm9kZUpTLlRpbWVvdXQ7XG4gIGxldCBjbG9zZWQgPSBmYWxzZTtcbiAgYXN5bmMgZnVuY3Rpb24gdGljayhjb3VudDogbnVtYmVyKSB7XG4gICAgYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHJldHVybjtcbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcInRpbWVycy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnM8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+KHtcbiAgZm4sXG4gIG1heEF0dGVtcHRzID0gMyxcbiAgdGltZW91dCxcbn06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5wb3coMiwgYXR0ZW1wdCkgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93LCBzZXNzaW9uLCB0eXBlIE5hdGl2ZUltYWdlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBta2Rpciwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEZpeGVkQnVmZmVyV3JpdGVyIH0gZnJvbSBcIi4uL3J1c3QvbGliXCI7XG5pbXBvcnQge1xuICBidWlsZFdyYXBwZXJIVE1MLFxuICBkZWNvZGVUaW1lc3RhbXAsXG4gIHN0YXJ0U3luYyxcbiAgc3RvcFN5bmMsXG59IGZyb20gXCIuL2ZyYW1lX3N5bmNcIjtcbmltcG9ydCB7IGNoZWNrSFRNTCB9IGZyb20gXCIuL2h0bWxfY2hlY2tcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi9pbWFnZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZW5hYmxlUHJveHksIHByb3hpZWRVcmwgfSBmcm9tIFwiLi9wcm94eVwiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi9yZXRyeVwiO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRPcHRpb25zLCBSZWNvcmRSZXN1bHQgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbUmVjb3JkXVwiO1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkV2luZG93KHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBSZWNvcmRPcHRpb25zKSB7XG4gIGNoZWNrSFRNTChzb3VyY2UpO1xuXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gb3B0aW9ucztcblxuICAvLyBSZW1vdmUgWC1GcmFtZS1PcHRpb25zIGFuZCBDU1AgaGVhZGVycyB0byBhbGxvdyBpZnJhbWUgbG9hZGluZ1xuICAvLyBOb3RlOiBFbGVjdHJvbidzIG9uSGVhZGVyc1JlY2VpdmVkIHVzZXMgUkVQTEFDRSBiZWhhdmlvciAobm90IGFwcGVuZCkuXG4gIC8vIE9ubHkgdGhlIGxhc3QgYXR0YWNoZWQgbGlzdGVuZXIgaXMgdXNlZCwgc28gbm8gY2xlYW51cCBuZWVkZWQuXG4gIC8vIFJlZjogaHR0cHM6Ly93d3cuZWxlY3Ryb25qcy5vcmcvZG9jcy9sYXRlc3QvYXBpL3dlYi1yZXF1ZXN0XG4gIHNlc3Npb24uZGVmYXVsdFNlc3Npb24ud2ViUmVxdWVzdC5vbkhlYWRlcnNSZWNlaXZlZCgoZGV0YWlscywgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSB7IC4uLmRldGFpbHMucmVzcG9uc2VIZWFkZXJzIH07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVyc1tcIngtZnJhbWUtb3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnNbXCJjb250ZW50LXNlY3VyaXR5LXBvbGljeVwiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzW1wiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIl07XG4gICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZXNwb25zZUhlYWRlcnMgfSk7XG4gIH0pO1xuXG4gIGxldCBzcmMgPSBzb3VyY2U7XG4gIGlmICh1c2VJbm5lclByb3h5KSB7XG4gICAgc3JjID0gcHJveGllZFVybChzb3VyY2UpO1xuICAgIGVuYWJsZVByb3h5KCk7XG4gIH1cblxuICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBzaG93OiBmYWxzZSxcbiAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHVuZGVmaW5lZCxcbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgb2Zmc2NyZWVuOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZFRocm90dGxpbmc6IGZhbHNlLFxuICAgICAgbm9kZUludGVncmF0aW9uOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICB9LFxuICB9KTtcblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmxldmVsID09PSBcImVycm9yXCIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIFwiY29uc29sZTpcIiwgZXZlbnQubWVzc2FnZSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB3cmFwcGVySFRNTCA9IGJ1aWxkV3JhcHBlckhUTUwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gIGNvbnN0IGRhdGFVUkwgPSBgZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCwke2VuY29kZVVSSUNvbXBvbmVudCh3cmFwcGVySFRNTCl9YDtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcblxuICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJsb2FkIHdpbmRvdyB0aW1lb3V0XCIpKTtcbiAgICB9LCAyMCAqIDEwMDApO1xuXG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmluaXNoLWxvYWRcIiwgcmVzb2x2ZSk7XG5cbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mYWlsLWxvYWRcIiwgKF9ldmVudCwgY29kZSwgZGVzYywgdXJsKSA9PiB7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCAke3VybH06IFske2NvZGV9XSAke2Rlc2N9YCkpO1xuICAgIH0pO1xuXG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZXZlbnQsIGRldGFpbHMpID0+IHtcbiAgICAgIGNvbnN0IHsgZXhpdENvZGUsIHJlYXNvbiB9ID0gZGV0YWlscztcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYHJlbmRlcmVyIGNyYXNoZWQ6ICR7ZXhpdENvZGV9LCAke3JlYXNvbn1gKSk7XG4gICAgfSk7XG5cbiAgICB3aW4ubG9hZFVSTChkYXRhVVJMKTtcbiAgfSk7XG4gIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIHJldHVybiB3aW47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvcmQoXG4gIHNvdXJjZTogc3RyaW5nLFxuICBvcHRpb25zOiBSZWNvcmRPcHRpb25zLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxvZ2dlci5pbmZvKFRBRywgYHByb2dyZXNzOiAwJWApO1xuICBjb25zdCB7IG91dERpciwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiB9ID0gb3B0aW9ucztcblxuICBjb25zdCB3aW4gPSBhd2FpdCB1c2VSZXRyeSh7IGZuOiBsb2FkV2luZG93LCBtYXhBdHRlbXB0czogMiB9KShcbiAgICBzb3VyY2UsXG4gICAgb3B0aW9ucyxcbiAgKTtcblxuICBhd2FpdCBta2RpcihvdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY2RwLmF0dGFjaChcIjEuM1wiKTtcblxuICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKGZwcyk7XG4gIGlmICghd2luLndlYkNvbnRlbnRzLmlzUGFpbnRpbmcoKSkge1xuICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gIH1cblxuICBjb25zdCBiZ3JhUGF0aCA9IGpvaW4ob3V0RGlyLCBcIm91dHB1dC5iZ3JhXCIpO1xuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuICBjb25zdCBidWZmZXJTaXplID0gd2lkdGggKiBoZWlnaHQgKiA0O1xuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBGaXhlZEJ1ZmZlcldyaXRlcihiZ3JhUGF0aCwgYnVmZmVyU2l6ZSwgZnBzKTtcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGZyYW1lRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVzb2x2ZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlamVjdGVyOiAoKHJlYXNvbj86IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNjaGVkdWxlV3JpdGUgPSAoYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB3cml0dGVuKys7XG4gICAgdHJ5IHtcbiAgICAgIHdyaXRlci53cml0ZShidWZmZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBmcmFtZUVycm9yID8/PSBlcnJvciBhcyBFcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGFpbnQgPSAoX2U6IHVua25vd24sIF9yOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICBpZiAoZnJhbWVFcnJvcikge1xuICAgICAgcmVqZWN0ZXI/LihmcmFtZUVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAod3JpdHRlbiA+PSB0b3RhbCkge1xuICAgICAgcmVzb2x2ZXI/LigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0VtcHR5KGltYWdlKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IGRlY29kZVRpbWVzdGFtcChiaXRtYXAsIGltYWdlLmdldFNpemUoKSk7XG4gICAgaWYgKGN1cnJlbnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZyYW1lRXJyb3IgPz89IG5ldyBFcnJvcihgbm8gdGltZXN0YW1wIEAgJHt3cml0dGVufWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ5dGVzUGVyUm93ID0gd2lkdGggKiA0O1xuICAgIGNvbnN0IGNyb3BwZWQgPSBiaXRtYXAuc3ViYXJyYXkoMCwgaGVpZ2h0ICogYnl0ZXNQZXJSb3cpO1xuXG4gICAgaWYgKGxhc3RXcml0dGVuVGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlZHVsZVdyaXRlKGNyb3BwZWQpO1xuICAgICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlTGFzdEZyYW1lID0gY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWU7XG4gICAgaWYgKHRpbWVTaW5jZUxhc3RGcmFtZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGltZVNpbmNlTGFzdEZyYW1lIDw9IGZyYW1lSW50ZXJ2YWwgKiAxLjIpIHtcbiAgICAgIHNjaGVkdWxlV3JpdGUoY3JvcHBlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZyYW1lc1RvSW5zZXJ0ID0gTWF0aC5yb3VuZCh0aW1lU2luY2VMYXN0RnJhbWUgLyBmcmFtZUludGVydmFsKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzVG9JbnNlcnQgJiYgd3JpdHRlbiA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgc2NoZWR1bGVXcml0ZShjcm9wcGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgIGlmIChNYXRoLmFicyhuZXdQcm9ncmVzcyAtIHByb2dyZXNzKSA+IDEwKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgbG9nZ2VyLmluZm8oVEFHLCBgcHJvZ3Jlc3M6ICR7TWF0aC5yb3VuZChwcm9ncmVzcyl9JWApO1xuICAgIH1cbiAgfTtcblxuICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG4gIGF3YWl0IHN0YXJ0U3luYyhjZHApO1xuICB0cnkge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiAoW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal0pKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBzdG9wU3luYyhjZHApO1xuICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBwYWludCk7XG4gICAgYXdhaXQgd3JpdGVyLmNsb3NlKCk7XG4gIH1cblxuICBpZiAoZnJhbWVFcnJvciB8fCB3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgZnJhbWVFcnJvciA/PyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkUmVzdWx0ID0geyBvcHRpb25zLCB3cml0dGVuLCBiZ3JhUGF0aCB9O1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKG91dERpciwgXCJyZWNvcmQuanNvblwiKSwgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7XG4gICAgbG9nZ2VyLmluZm8oVEFHLCBgcHJvZ3Jlc3M6IDEwMCUsICR7d3JpdHRlbn0gZnJhbWVzIHdyaXR0ZW5gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB3aW4uY2xvc2UoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNC5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZXJyPEZuIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIEQ+KFxuICBmbjogRm4sXG4gIGRlZmF1bHRWYWx1ZTogRCxcbik6ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEZuPikgPT4gUmV0dXJuVHlwZTxGbj4gfCBEIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldCA9IGZuKC4uLmFyZ3MpO1xuICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJldC5jYXRjaCgoKSA9PiBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TcGVjIHtcbiAgZnBzOiBudW1iZXI7XG4gIGZyYW1lczogbnVtYmVyO1xuICBzaXplOiBTaXplO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRmlsZXMge1xuICBtcDQ/OiBzdHJpbmc7XG4gIHdlYm0/OiBzdHJpbmc7XG4gIG1vdj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0ZpbGVzV2l0aENvdmVyIGV4dGVuZHMgVmlkZW9GaWxlcyB7XG4gIGNvdmVyOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9ESVIgPSBcIm91dFwiO1xuXG5leHBvcnQgY29uc3QgUmVjb3JkU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogelxuICAgIC5udW1iZXIoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoREVGQVVMVF9EVVJBVElPTilcbiAgICAuZGVzY3JpYmUoXCJSZWNvcmRpbmcgZHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZWZhdWx0KERFRkFVTFRfV0lEVEgpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogelxuICAgIC5udW1iZXIoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoREVGQVVMVF9IRUlHSFQpXG4gICAgLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZWZhdWx0KERFRkFVTFRfRlBTKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQWxwaGFDaGFubmVsOiB6XG4gICAgLmJvb2xlYW4oKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgLmRlc2NyaWJlKFwiT3V0cHV0IHdpdGggYWxwaGEgY2hhbm5lbFwiKSxcbiAgb3V0RGlyOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVmYXVsdChERUZBVUxUX09VVF9ESVIpXG4gICAgLmRlc2NyaWJlKFwiT3V0cHV0IGRpcmVjdG9yeVwiKSxcbiAgdXNlSW5uZXJQcm94eTogelxuICAgIC5ib29sZWFuKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxufSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkT3B0aW9ucyB7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEFscGhhQ2hhbm5lbDogYm9vbGVhbjtcbiAgb3V0RGlyOiBzdHJpbmc7XG4gIHVzZUlubmVyUHJveHk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkUmVzdWx0IHtcbiAgb3B0aW9uczogUmVjb3JkT3B0aW9ucztcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBiZ3JhUGF0aDogc3RyaW5nO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IHB1cFVzZUlubmVyUHJveHkgfSBmcm9tIFwiLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBub2VyciB9IGZyb20gXCIuL2Jhc2Uvbm9lcnJcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vYmFzZS9wYXJzZXJcIjtcbmltcG9ydCB7IHBhcmdzIH0gZnJvbSBcIi4vYmFzZS9wcm9jZXNzXCI7XG5pbXBvcnQge1xuICBERUZBVUxUX0RVUkFUSU9OLFxuICBERUZBVUxUX0ZQUyxcbiAgREVGQVVMVF9IRUlHSFQsXG4gIERFRkFVTFRfT1VUX0RJUixcbiAgREVGQVVMVF9XSURUSCxcbiAgdHlwZSBSZWNvcmRPcHRpb25zLFxufSBmcm9tIFwiLi9iYXNlL3NjaGVtYVwiO1xuXG5leHBvcnQgdHlwZSBDTElDYWxsYmFjayA9IChcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29yZE9wdGlvbnMsXG4pID0+IFByb21pc2U8dW5rbm93bj47XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlQ0xJKG5hbWU6IHN0cmluZywgY2FsbGJhY2s6IENMSUNhbGxiYWNrKSB7XG4gIHByb2dyYW1cbiAgICAubmFtZShuYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywg5oiWIGRhdGE6IFVSSVwiKVxuICAgIC5vcHRpb24oXCItdywgLS13aWR0aCA8bnVtYmVyPlwiLCBcIuinhumikeWuveW6plwiLCBgJHtERUZBVUxUX1dJRFRIfWApXG4gICAgLm9wdGlvbihcIi1oLCAtLWhlaWdodCA8bnVtYmVyPlwiLCBcIuinhumikemrmOW6plwiLCBgJHtERUZBVUxUX0hFSUdIVH1gKVxuICAgIC5vcHRpb24oXCItZiwgLS1mcHMgPG51bWJlcj5cIiwgXCLluKfnjodcIiwgYCR7REVGQVVMVF9GUFN9YClcbiAgICAub3B0aW9uKFwiLXQsIC0tZHVyYXRpb24gPG51bWJlcj5cIiwgXCLlvZXliLbml7bplb/vvIjnp5LvvIlcIiwgYCR7REVGQVVMVF9EVVJBVElPTn1gKVxuICAgIC5vcHRpb24oXCItbywgLS1vdXQtZGlyIDxwYXRoPlwiLCBcIui+k+WHuuebruW9lVwiLCBgJHtERUZBVUxUX09VVF9ESVJ9YClcbiAgICAub3B0aW9uKFwiLWEsIC0td2l0aC1hbHBoYS1jaGFubmVsXCIsIFwi6L6T5Ye65YyF5ZCrIGFscGhhIOmAmumBk+eahOinhumikVwiLCBmYWxzZSlcbiAgICAub3B0aW9uKFxuICAgICAgXCItLXVzZS1pbm5lci1wcm94eVwiLFxuICAgICAgXCLkvb/nlKggQiDnq5nlhoXnvZHku6PnkIbliqDpgJ/otYTmupDorr/pl65cIixcbiAgICAgIHB1cFVzZUlubmVyUHJveHksXG4gICAgKVxuICAgIC5hY3Rpb24oYXN5bmMgKHNvdXJjZTogc3RyaW5nLCBvcHRzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjYWxsYmFjayhzb3VyY2UsIHtcbiAgICAgICAgICB3aWR0aDogbm9lcnIocGFyc2VOdW1iZXIsIERFRkFVTFRfV0lEVEgpKG9wdHMud2lkdGgpLFxuICAgICAgICAgIGhlaWdodDogbm9lcnIocGFyc2VOdW1iZXIsIERFRkFVTFRfSEVJR0hUKShvcHRzLmhlaWdodCksXG4gICAgICAgICAgZnBzOiBub2VycihwYXJzZU51bWJlciwgREVGQVVMVF9GUFMpKG9wdHMuZnBzKSxcbiAgICAgICAgICBkdXJhdGlvbjogbm9lcnIocGFyc2VOdW1iZXIsIERFRkFVTFRfRFVSQVRJT04pKG9wdHMuZHVyYXRpb24pLFxuICAgICAgICAgIG91dERpcjogb3B0cy5vdXREaXIgPz8gREVGQVVMVF9PVVRfRElSLFxuICAgICAgICAgIHdpdGhBbHBoYUNoYW5uZWw6IG9wdHMud2l0aEFscGhhQ2hhbm5lbCA/PyBmYWxzZSxcbiAgICAgICAgICB1c2VJbm5lclByb3h5OiBvcHRzLnVzZUlubmVyUHJveHkgPz8gcHVwVXNlSW5uZXJQcm94eSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgcHJvZ3JhbS5wYXJzZShwYXJncygpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IGFwcCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgRUxFQ1RST05fT1BUUyB9IGZyb20gXCIuL2Jhc2UvZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJlY29yZCB9IGZyb20gXCIuL2Jhc2UvcmVjb3JkXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5cbnByb2Nlc3Mub25jZShcImV4aXRcIiwgKCkgPT4gYXBwLnF1aXQoKSk7XG5cbm1ha2VDTEkoXCJhcHBcIiwgYXN5bmMgKHNvdXJjZSwgb3B0aW9ucykgPT4ge1xuICB0cnkge1xuICAgIEVMRUNUUk9OX09QVFMuZm9yRWFjaCgobykgPT4gYXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaChvKSk7XG4gICAgYXBwLmRvY2s/LmhpZGUoKTtcbiAgICBhd2FpdCBhcHAud2hlblJlYWR5KCk7XG4gICAgYXdhaXQgcmVjb3JkKHNvdXJjZSwgb3B0aW9ucyk7XG4gIH0gZmluYWxseSB7XG4gICAgYXBwLnF1aXQoKTtcbiAgfVxufSk7XG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErM2YyOWI5MDQzN2QwMDFhZC9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vLi4vc3JjL2Jhc2UvYmFzZWRpci50cyIsIi4uLy4uL3NyYy9iYXNlL2Vudi50cyIsIi4uLy4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uLy4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uLy4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi8uLi9zcmMvYmFzZS9od2FjY2VsLnRzIiwiLi4vLi4vc3JjL2Jhc2UvcHJvY2Vzcy50cyIsIi4uLy4uL3NyYy9iYXNlL2VsZWN0cm9uLnRzIiwiLi4vLi4vc3JjL3J1c3QvbGliLnRzIiwiLi4vLi4vc3JjL2Jhc2UvYXVkaW9fY2FwdHVyZS50cyIsIi4uLy4uL3NyYy9iYXNlL2ZyYW1lX3N5bmMudHMiLCIuLi8uLi9zcmMvYmFzZS9pbWFnZS50cyIsIi4uLy4uL3NyYy9iYXNlL2h0bWxfY2hlY2sudHMiLCIuLi8uLi9zcmMvYmFzZS9wcm94eS50cyIsIi4uLy4uL3NyYy9iYXNlL3RpbWluZy50cyIsIi4uLy4uL3NyYy9iYXNlL3JldHJ5LnRzIiwiLi4vLi4vc3JjL2Jhc2Uvd2luZG93LnRzIiwiLi4vLi4vc3JjL2Jhc2UvcmVjb3JkLnRzIiwiLi4vLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi8uLi9zcmMvYmFzZS9zY2hlbWEudHMiLCIuLi8uLi9zcmMvY29tbW9uLnRzIiwiLi4vLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6WyJnZXRJbXBvcnRNZXRhVXJsIiwiaW1wb3J0TWV0YVVybCIsImJhc2VkaXIiLCJkaXJuYW1lIiwiZmlsZVVSTFRvUGF0aCIsInBlbnYiLCJuYW1lIiwicGFyc2VyIiwiZGVmYXVsdFZhbHVlIiwicGFyc2VOdW1iZXIiLCJ2YWx1ZSIsIm51bSIsInB1cEFwcFNlYXJjaFBhdGhzIiwiam9pbiIsImV4aXN0c1N5bmMiLCJlbnYiLCJwdXBMb2dMZXZlbCIsInB1cFVzZUlubmVyUHJveHkiLCJwdXBEaXNhYmxlR1BVIiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiVEFHIiwiZGV0ZWN0IiwiY29udHJvbGxlcnMiLCJncmFwaGljcyIsImMiLCJoYXNHcHUiLCJncHUiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiYXJncyIsImVsZWN0cm9uT3B0cyIsIm9wdHMiLCJwbGF0Zm9ybSIsImFyY2giLCJydXN0UGF0aCIsIm5hdGl2ZVNlYXJjaFBhdGhzIiwibW9kIiwiX19yZXF1aXJlIiwiRml4ZWRCdWZmZXJXcml0ZXIiLCJBVURJT19DQVBUVVJFX1NDUklQVCIsInNldHVwQXVkaW9DYXB0dXJlIiwicGNtUGF0aCIsInByZWxvYWRQYXRoIiwidG1wZGlyIiwicmFuZG9tVVVJRCIsIndyaXRlRmlsZSIsInNlc3Npb24iLCJ3cml0ZXIiLCJjYXB0dXJlIiwiaXBjTWFpbiIsInJtIiwiX2UiLCJidWZmZXIiLCJidWlsZFdyYXBwZXJIVE1MIiwidGFyZ2V0VVJMIiwic2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlVGltZXN0YW1wIiwiYml0bWFwIiwibWFya2VyUm93IiwidGltZXN0YW1wIiwiaSIsInBpeGVsSWR4IiwiYml0Iiwic3RhcnRTeW5jIiwiY2RwIiwic3RvcFN5bmMiLCJpc0VtcHR5IiwiaW1hZ2UiLCJTVVBQT1JURURfUFJPVE9DT0xTIiwiU09VUkNFX1BBVFRFUk4iLCJjaGVja0hUTUwiLCJzb3VyY2UiLCJwcm90b2NvbCIsIm1hcCIsInByb3hpZWRVcmwiLCJ1cmwiLCJwYXJzZWQiLCJVUkwiLCJlbmFibGVQcm94eSIsImRldGFpbHMiLCJjYWxsYmFjayIsInByb3hpZWQiLCJzbGVlcCIsIm1zIiwidXNlUmV0cnkiLCJmbiIsIm1heEF0dGVtcHRzIiwidGltZW91dCIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJlIiwid2FpdEZvckZpbmlzaCIsIndpbiIsImFjdGlvbiIsImRvbmUiLCJkZXNjIiwiZXhpdENvZGUiLCJvcGVuV2luZG93Iiwid2lucyIsIm9wdGlvbnMiLCJ1c2VJbm5lclByb3h5IiwicmVzcG9uc2VIZWFkZXJzIiwic3JjIiwiQnJvd3NlcldpbmRvdyIsInciLCJsZXZlbCIsIndyYXBwZXJIVE1MIiwiZGF0YVVSTCIsImxvYWRXaW5kb3ciLCJyZWNvcmQiLCJvdXREaXIiLCJmcHMiLCJkdXJhdGlvbiIsIndpdGhBdWRpbyIsIm1rZGlyIiwiYXVkaW9DYXB0dXJlIiwiYmdyYSIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImJ1ZmZlclNpemUiLCJ3cml0dGVuIiwibGFzdFdyaXR0ZW5UaW1lIiwicHJvZ3Jlc3MiLCJmcmFtZUVycm9yIiwicmVzb2x2ZXIiLCJyZWplY3RlciIsInNjaGVkdWxlV3JpdGUiLCJwYWludCIsIl9yIiwiY3VycmVudFRpbWUiLCJieXRlc1BlclJvdyIsImNyb3BwZWQiLCJ0aW1lU2luY2VMYXN0RnJhbWUiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiciIsImoiLCJhdWRpbyIsInJlc3VsdCIsIm5vZXJyIiwicmV0IiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9PVVRfRElSIiwieiIsIm1ha2VDTEkiLCJwcm9ncmFtIiwiYXBwIiwiZXEiLCJrZXkiXSwibWFwcGluZ3MiOiJtcURBS0EsSUFBTUEsRUFBQUEsQ0FBbUIsSUFDdkIsT0FBTyxRQUFBLENBQWEsSUFDaEIsSUFBSSxHQUFBLENBQUksQ0FBQSxLQUFBLEVBQVEsVUFBVSxDQUFBLENBQUUsQ0FBQSxDQUFFLEtBQzdCLFFBQUEsQ0FBUyxhQUFBLEVBQWlCLFNBQVMsYUFBQSxDQUFjLE9BQUEsQ0FBUSxhQUFZLEdBQU0sUUFBQSxDQUMxRSxRQUFBLENBQVMsYUFBQSxDQUFjLEdBQUEsQ0FDdkIsSUFBSSxJQUFJLFNBQUEsQ0FBVyxRQUFBLENBQVMsT0FBTyxDQUFBLENBQUUsSUFBQSxDQUVoQ0MsRUFBZ0NELEVBQUFBLEVBQWlCLENDUHZELElBQU1FLEVBQVVDLFlBQUFBLENBQVFDLGlCQUFBQSxDQUFjSCxDQUFlLENBQUMsQ0FBQSxDQ0t0RCxTQUFTSSxHQUNkQyxDQUFBQSxDQUNBQyxDQUFBQSxDQUNBQyxFQUNlLENBQ2YsR0FBSSxDQUNGLE9BQU9ELENBQUFBLENBQU8sT0FBQSxDQUFRLEdBQUEsQ0FBSUQsQ0FBSSxDQUFDLENBQ2pDLENBQUEsS0FBUSxDQUNOLE9BQU9FLENBQ1QsQ0FDRixDQ2xCTyxTQUFTQyxDQUFBQSxDQUFZQyxDQUFBQSxDQUF3QixDQUNsRCxHQUFJLE9BQU9BLEdBQVUsUUFBQSxDQUNuQixPQUFPQSxDQUFBQSxDQUVULElBQU1DLENBQUFBLENBQU0sTUFBQSxDQUFPRCxDQUFLLENBQUEsQ0FDeEIsR0FBSSxNQUFBLENBQU8sS0FBQSxDQUFNQyxDQUFHLENBQUEsQ0FDbEIsTUFBTSxJQUFJLEtBQUEsQ0FBTSxTQUFTRCxDQUFLLENBQUEsc0JBQUEsQ0FBd0IsRUFFeEQsT0FBT0MsQ0FDVCxDQ0hBLElBQU1DLEVBQUFB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QUNEd0wsYUFBSSxJQUFBLEVBQU0sSUFBQSxHQUNWLE1BQU1BLFlBQUFBLENBQUksV0FBVSxDQUNwQixNQUFNeEMsR0FBT3hDLENBQUFBLENBQVE4QixDQUFPLEVBQzlCLENBQUEsT0FBRSxDQUNBa0QsYUFBSSxJQUFBLEdBQ04sQ0FDRixDQUFDLENBQUEiLCJmaWxlIjoiYXBwLmNqcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNoaW0gZ2xvYmFscyBpbiBjanMgYnVuZGxlXG4vLyBUaGVyZSdzIGEgd2VpcmQgYnVnIHRoYXQgZXNidWlsZCB3aWxsIGFsd2F5cyBpbmplY3QgaW1wb3J0TWV0YVVybFxuLy8gaWYgd2UgZXhwb3J0IGl0IGFzIGBjb25zdCBpbXBvcnRNZXRhVXJsID0gLi4uIF9fZmlsZW5hbWUgLi4uYFxuLy8gQnV0IHVzaW5nIGEgZnVuY3Rpb24gd2lsbCBub3QgY2F1c2UgdGhpcyBpc3N1ZVxuXG5jb25zdCBnZXRJbXBvcnRNZXRhVXJsID0gKCkgPT4gXG4gIHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiBcbiAgICA/IG5ldyBVUkwoYGZpbGU6JHtfX2ZpbGVuYW1lfWApLmhyZWYgXG4gICAgOiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1NDUklQVCcpIFxuICAgICAgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyBcbiAgICAgIDogbmV3IFVSTChcIm1haW4uanNcIiwgZG9jdW1lbnQuYmFzZVVSSSkuaHJlZjtcblxuZXhwb3J0IGNvbnN0IGltcG9ydE1ldGFVcmwgPSAvKiBAX19QVVJFX18gKi8gZ2V0SW1wb3J0TWV0YVVybCgpXG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwidXJsXCI7XG5cbmV4cG9ydCBjb25zdCBiYXNlZGlyID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4oXG4gIG5hbWU6IHN0cmluZyxcbiAgcGFyc2VyOiBFbnZQYXJzZXI8VD4sXG4gIGRlZmF1bHRWYWx1ZT86IFQsXG4pOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4oXG4gIG5hbWU6IHN0cmluZyxcbiAgcGFyc2VyOiBFbnZQYXJzZXI8VD4sXG4gIGRlZmF1bHRWYWx1ZT86IFQsXG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VyKHByb2Nlc3MuZW52W25hbWVdKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7dmFsdWV9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGJhc2VkaXIgfSBmcm9tIFwiLi9iYXNlZGlyXCI7XG5pbXBvcnQgeyBwZW52IH0gZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5jb25zdCBwdXBBcHBTZWFyY2hQYXRocyA9IFtcbiAgam9pbihiYXNlZGlyLCBcImNqcy9hcHAuY2pzXCIpLCAvLyBwcm9jZXNzIGZyb20gZGlzdFxuICBqb2luKGJhc2VkaXIsIFwiYXBwLmNqc1wiKSwgLy8gcHJvY2VzcyBmcm9tIGRpc3QvY2pzXG4gIGpvaW4oYmFzZWRpciwgXCIuLi8uLi9janMvYXBwLmNqc1wiKSwgLy8gcHJvY2VzcyBmcm9tIHNyY1xuXTtcbmV4cG9ydCBjb25zdCBwdXBBcHBQYXRoID0gcHVwQXBwU2VhcmNoUGF0aHMuZmluZChleGlzdHNTeW5jKSE7XG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuZXhwb3J0IGNvbnN0IHB1cFVzZUlubmVyUHJveHkgPSBlbnZbXCJQVVBfVVNFX0lOTkVSX1BST1hZXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBGRm1wZWdQYXRoID0gZW52W1wiRkZNUEVHX0JJTlwiXSA/PyBgZmZtcGVnYDtcbmV4cG9ydCBjb25zdCBwdXBEaXNhYmxlR1BVID0gZW52W1wiUFVQX0RJU0FCTEVfR1BVXCJdID09PSBcIjFcIjtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB7IENoaWxkUHJvY2VzcywgdHlwZSBTZXJpYWxpemFibGUgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiBGdW5jdGlvbiwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBpbXBsKCk6IExvZ2dlckxpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbXBsO1xuICB9XG5cbiAgc2V0IGltcGwodmFsdWU6IExvZ2dlckxpa2UpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IHZhbHVlLmRlYnVnID8/IGNvbnNvbGUuZGVidWc7XG4gICAgY29uc3QgaW5mbyA9IHZhbHVlLmluZm8gPz8gY29uc29sZS5pbmZvO1xuICAgIGNvbnN0IHdhcm4gPSB2YWx1ZS53YXJuID8/IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlLmVycm9yID8/IGNvbnNvbGUuZXJyb3I7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBwdXBMb2dMZXZlbCA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBwdXBMb2dMZXZlbCA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IHB1cExvZ0xldmVsID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IHB1cExvZ0xldmVsID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1ZyhtZXNzYWdlLnNsaWNlKERFQlVHLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1lc3NhZ2Uuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoV0FSTikpIHtcbiAgICAgIHRoaXMud2FybihtZXNzYWdlLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtZXNzYWdlLnNsaWNlKEVSUk9SLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyIHwgU2VyaWFsaXphYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwibWVzc2FnZVwiLCBkaXNwYXRjaClcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IGdyYXBoaWNzIH0gZnJvbSBcInN5c3RlbWluZm9ybWF0aW9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0hXQWNjZWxdXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdCgpIHtcbiAgY29uc3QgeyBjb250cm9sbGVycyB9ID0gYXdhaXQgZ3JhcGhpY3MoKTtcbiAgcmV0dXJuIGNvbnRyb2xsZXJzLnNvbWUoKGMpID0+IGMudmVuZG9yLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBjb25zdCBoYXNHcHUgPSBkZXRlY3QoKS50aGVuKChncHUpID0+IHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJHUFUgZGV0ZWN0ZWQ6XCIsIGdwdSk7XG4gIHJldHVybiBncHU7XG59KTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHNwYXduLCB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgUFVQX0FSR1NfS0VZID0gXCItLXB1cC1wcml2LWFyZ3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmdzKCkge1xuICBjb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICBsZXQgcHJpdiA9IGFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChQVVBfQVJHU19LRVkpKTtcbiAgaWYgKCFwcml2KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgYXJndik7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbiAgfVxuICBjb25zdCBhcmdzID0gW1wiZXhlY1wiLCAuLi5hcmd2LnNsaWNlKC0xKV07XG4gIHByaXYgPSBCdWZmZXIuZnJvbShwcml2LnNwbGl0KFwiPVwiKVsxXSEsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG4gIGFyZ3MucHVzaCguLi5KU09OLnBhcnNlKHByaXYpKTtcbiAgbG9nZ2VyLmRlYnVnKFwicHVwYXJnc1wiLCBhcmdzKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0hhbmRsZSB7XG4gIHByb2Nlc3M6IENoaWxkUHJvY2VzcztcbiAgd2FpdDogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9jZXNzSGFuZGxlIHtcbiAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoXCIgXCIpLmZpbHRlcigocykgPT4gcy5sZW5ndGgpO1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBwYXJ0cztcbiAgaWYgKCFjb21tYW5kKSB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbiAgcmV0dXJuIHsgcHJvY2VzczogcHJvYywgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuaW1wb3J0IGVsZWN0cm9uLCB7IHR5cGUgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcGxhdGZvcm0gfSBmcm9tIFwicHJvY2Vzc1wiO1xuaW1wb3J0IHsgcHVwRGlzYWJsZUdQVSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgaGFzR3B1IH0gZnJvbSBcIi4vaHdhY2NlbFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZXhlYywgUFVQX0FSR1NfS0VZIH0gZnJvbSBcIi4vcHJvY2Vzc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWxlY3Ryb25PcHRzKCkge1xuICBjb25zdCBvcHRzID0gW1xuICAgIFwibm8tc2FuZGJveFwiLFxuICAgIFwiZGlzYWJsZS1zZXR1aWQtc2FuZGJveFwiLFxuICAgIFwiZGlzYWJsZS1kZXYtc2htLXVzYWdlXCIsXG4gICAgXCJkaXNhYmxlLXdlYi1zZWN1cml0eVwiLFxuICAgIFwiZGlzYWJsZS1zaXRlLWlzb2xhdGlvbi10cmlhbHNcIixcbiAgICBcImRpc2FibGUtZmVhdHVyZXM9SXNvbGF0ZU9yaWdpbnMsc2l0ZS1wZXItcHJvY2Vzc1wiLFxuICAgIFwiYWxsb3ctaW5zZWN1cmUtbG9jYWxob3N0XCIsXG4gICAgXCJpZ25vcmUtY2VydGlmaWNhdGUtZXJyb3JzXCIsXG4gICAgXCJkaXNhYmxlLWJsaW5rLWZlYXR1cmVzPUF1dG9tYXRpb25Db250cm9sbGVkXCIsXG4gICAgXCJtdXRlLWF1ZGlvXCIsIC8vIGRvIG5vdCBsZWFrIGF1ZGlvIG9uIGNhcHR1cmVcbiAgICBcImF1dG9wbGF5LXBvbGljeT1uby11c2VyLWdlc3R1cmUtcmVxdWlyZWRcIixcbiAgICBcImRpc2FibGUtZXh0ZW5zaW9uc1wiLFxuICAgIFwiZGlzYWJsZS1iYWNrZ3JvdW5kLW5ldHdvcmtpbmdcIixcbiAgICBcImFkZHJlc3MtZmFtaWx5PWlwdjRcIixcbiAgICBcImRpc2FibGUtYXN5bmMtZG5zXCIsXG4gICAgXCJmb3JjZS1kZXZpY2Utc2NhbGUtZmFjdG9yPTFcIixcbiAgICBcInRyYWNlLXdhcm5pbmdzXCIsXG4gICAgXCJmb3JjZS1jb2xvci1wcm9maWxlPXNyZ2JcIixcbiAgICBcImRpc2FibGUtY29sb3ItY29ycmVjdC1yZW5kZXJpbmdcIixcbiAgICBcImxvZy1sZXZlbD0zXCIsXG4gICAgXCJpZ25vcmUtZ3B1LWJsb2NrbGlzdFwiLFxuICAgIFwiZ3B1LXNoYWRlci1kaXNrLWNhY2hlLXNpemUta2I9NTI0Mjg4XCIsXG4gIF07XG4gIGNvbnN0IGVuYWJsZUdwdSA9IChhd2FpdCBoYXNHcHUpICYmICFwdXBEaXNhYmxlR1BVO1xuICBpZiAoZW5hYmxlR3B1KSB7XG4gICAgb3B0cy5wdXNoKFxuICAgICAgXCJpbi1wcm9jZXNzLWdwdVwiLFxuICAgICAgXCJ1c2UtZ2w9YW5nbGVcIixcbiAgICAgIHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCJcbiAgICAgICAgPyBcInVzZS1hbmdsZT1tZXRhbFwiXG4gICAgICAgIDogcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiXG4gICAgICAgICAgPyBcInVzZS1hbmdsZT1kM2QxMVwiXG4gICAgICAgICAgOiBcInVzZS1hbmdsZT12dWxrYW5cIixcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIG9wdHMucHVzaChcbiAgICAgIFwidXNlLWdsPWFuZ2xlXCIsXG4gICAgICBcInVzZS1hbmdsZT1zd2lmdHNoYWRlclwiLFxuICAgICAgXCJlbmFibGUtdW5zYWZlLXN3aWZ0c2hhZGVyXCIsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gb3B0cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbGVjdHJvbkFwcE9wdGlvbnMge1xuICBzaXplOiBTaXplO1xuICBhcHA6IHVua25vd247XG4gIGFyZ3M6IHVua25vd25bXTtcbn1cblxuY29uc3QgVEFHID0gXCJbRWxlY3Ryb25dXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5FbGVjdHJvbkFwcChvcHRpb25zOiBFbGVjdHJvbkFwcE9wdGlvbnMpIHtcbiAgY29uc3QgeyBzaXplLCBhcHAsIGFyZ3MgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGNtZFBhcnRzID0gW107XG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJsaW51eFwiKSB7XG4gICAgY21kUGFydHMucHVzaChcbiAgICAgIFwieHZmYi1ydW5cIixcbiAgICAgIFwiLS1hdXRvLXNlcnZlcm51bVwiLFxuICAgICAgYC0tc2VydmVyLWFyZ3M9Jy1zY3JlZW4gMCAke3NpemUud2lkdGh9eCR7c2l6ZS5oZWlnaHR9eDI0J2AsXG4gICAgKTtcbiAgfVxuICBjb25zdCBvcHRzID0gYXdhaXQgZWxlY3Ryb25PcHRzKCk7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwib3B0c1wiLCBvcHRzKTtcbiAgY29uc3QgZWxlY3Ryb25BcmdzID0gb3B0cy5tYXAoKGEpID0+IGAtLSR7YX1gKTtcbiAgY29uc3QgYmFzZTY0QXJncyA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGFyZ3MpKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgZWxlY3Ryb25BcmdzLnB1c2goYCR7UFVQX0FSR1NfS0VZfT0ke2Jhc2U2NEFyZ3N9YCk7XG4gIGNtZFBhcnRzLnB1c2goZWxlY3Ryb24sIC4uLmVsZWN0cm9uQXJncywgYXBwKTtcbiAgcmV0dXJuIGV4ZWMoY21kUGFydHMuam9pbihcIiBcIiksIHtcbiAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0sXG4gICAgc2hlbGw6IHBsYXRmb3JtID09PSBcImxpbnV4XCIsXG4gICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCBFTEVDVFJPTl9ESVNBQkxFX0RCVVM6IFwiMVwiLCBSVVNUX0JBQ0tUUkFDRTogXCJmdWxsXCIgfSxcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzEwLlxuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGJhc2VkaXIgfSBmcm9tIFwiLi4vYmFzZS9iYXNlZGlyXCI7XG5cbmNvbnN0IHsgcGxhdGZvcm0sIGFyY2ggfSA9IHByb2Nlc3M7XG5cbmNvbnN0IHJ1c3RQYXRoID0gYHJ1c3QvJHtwbGF0Zm9ybX0tJHthcmNofS5ub2RlYDtcblxuY29uc3QgbmF0aXZlU2VhcmNoUGF0aHMgPSBbXG4gIGpvaW4oYmFzZWRpciwgYC4uLy4uLyR7cnVzdFBhdGh9YCksIC8vIHByb2Nlc3Mgc3RhcnQgZnJvbSBzcmNcbiAgam9pbihiYXNlZGlyLCBgLi4vJHtydXN0UGF0aH1gKSwgLy8gcHJvY2VzcyBzdGFydCBmcm9tIGRpc3Rcbl07XG5jb25zdCBtb2QgPSByZXF1aXJlKG5hdGl2ZVNlYXJjaFBhdGhzLmZpbmQoZXhpc3RzU3luYykhKTtcblxuZXhwb3J0IGludGVyZmFjZSBGaXhlZEJ1ZmZlcldyaXRlciB7XG4gIG5ldyAoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGJ1ZmZlclNpemU6IG51bWJlcixcbiAgICBxdWV1ZURlcHRoPzogbnVtYmVyLFxuICApOiBGaXhlZEJ1ZmZlcldyaXRlcjtcblxuICB3cml0ZShidWZmZXI6IEJ1ZmZlcik6IHZvaWQ7XG5cbiAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGNvbnN0IEZpeGVkQnVmZmVyV3JpdGVyID0gbW9kLkZpeGVkQnVmZmVyV3JpdGVyIGFzIEZpeGVkQnVmZmVyV3JpdGVyO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGlwY01haW4sIHNlc3Npb24gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJtLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBGaXhlZEJ1ZmZlcldyaXRlciB9IGZyb20gXCIuLi9ydXN0L2xpYlwiO1xuXG5jb25zdCBBVURJT19DQVBUVVJFX1NDUklQVCA9IGBcbihmdW5jdGlvbigpIHtcbiAgaWYgKHdpbmRvdy5fX3B1cF9hdWRpb19jYXB0dXJpbmdfXykgcmV0dXJuO1xuICB3aW5kb3cuX19wdXBfYXVkaW9fY2FwdHVyaW5nX18gPSB0cnVlO1xuXG4gIGNvbnN0IHsgaXBjUmVuZGVyZXIgfSA9IHJlcXVpcmUoJ2VsZWN0cm9uJyk7XG4gIGNvbnN0IGNhcHR1cmVkQ29udGV4dHMgPSBuZXcgV2Vha1NldCgpO1xuICBjb25zdCBzb3VyY2VkRWxlbWVudHMgPSBuZXcgV2Vha1NldCgpO1xuICBsZXQgbWV0YVNlbnQgPSBmYWxzZTtcblxuICBjb25zdCBvcmlnQ3JlYXRlTUVTID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2U7XG4gIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlID0gZnVuY3Rpb24oZWwpIHtcbiAgICBzb3VyY2VkRWxlbWVudHMuYWRkKGVsKTtcbiAgICByZXR1cm4gb3JpZ0NyZWF0ZU1FUy5jYWxsKHRoaXMsIGVsKTtcbiAgfTtcblxuICBjb25zdCBvcmlnQ29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdDtcbiAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24oZGVzdCwgb3V0SWR4LCBpbklkeCkge1xuICAgIGNvbnN0IGNhcHR1cmVOb2RlID0gZGVzdD8uY29udGV4dD8uX19wdXBfY2FwdHVyZU5vZGVfXztcbiAgICBpZiAoY2FwdHVyZU5vZGUgJiYgZGVzdCA9PT0gZGVzdC5jb250ZXh0LmRlc3RpbmF0aW9uICYmIHRoaXMgIT09IGNhcHR1cmVOb2RlKSB7XG4gICAgICBvcmlnQ29ubmVjdC5jYWxsKHRoaXMsIGNhcHR1cmVOb2RlLCBvdXRJZHgsIGluSWR4KTtcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdDb25uZWN0LmNhbGwodGhpcywgZGVzdCwgb3V0SWR4LCBpbklkeCk7XG4gIH07XG5cbiAgY29uc3QgT3JpZ0FDID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O1xuICBpZiAoIU9yaWdBQykgcmV0dXJuO1xuXG4gIGZ1bmN0aW9uIFBhdGNoZWRBQygpIHtcbiAgICBjb25zdCBjdHggPSBuZXcgT3JpZ0FDKC4uLmFyZ3VtZW50cyk7XG4gICAgaWYgKCFjYXB0dXJlZENvbnRleHRzLmhhcyhjdHgpKSB7XG4gICAgICBjYXB0dXJlZENvbnRleHRzLmFkZChjdHgpO1xuICAgICAgaWYgKCFtZXRhU2VudCkge1xuICAgICAgICBtZXRhU2VudCA9IHRydWU7XG4gICAgICAgIGlwY1JlbmRlcmVyLnNlbmQoJ2F1ZGlvLW1ldGEnLCB7IHNhbXBsZVJhdGU6IGN0eC5zYW1wbGVSYXRlIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZSA9IGN0eC5jcmVhdGVTY3JpcHRQcm9jZXNzb3IoNDA5NiwgMiwgMik7XG4gICAgICBub2RlLm9uYXVkaW9wcm9jZXNzID0gKGUpID0+IHtcbiAgICAgICAgY29uc3QgTCA9IGUuaW5wdXRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG4gICAgICAgIGNvbnN0IFIgPSBlLmlucHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDEpO1xuICAgICAgICBjb25zdCBvdXQgPSBuZXcgRmxvYXQzMkFycmF5KEwubGVuZ3RoICogMik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG91dFtpICogMl0gPSBMW2ldO1xuICAgICAgICAgIG91dFtpICogMiArIDFdID0gUltpXTtcbiAgICAgICAgfVxuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCdhdWRpby1jaHVuaycsIEJ1ZmZlci5mcm9tKG91dC5idWZmZXIpKTtcbiAgICAgIH07XG4gICAgICBub2RlLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTtcbiAgICAgIGN0eC5fX3B1cF9jYXB0dXJlTm9kZV9fID0gbm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGN0eDtcbiAgfVxuICBQYXRjaGVkQUMucHJvdG90eXBlID0gT3JpZ0FDLnByb3RvdHlwZTtcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKFBhdGNoZWRBQywgT3JpZ0FDKTtcbiAgd2luZG93LkF1ZGlvQ29udGV4dCA9IFBhdGNoZWRBQztcbiAgaWYgKCd3ZWJraXRBdWRpb0NvbnRleHQnIGluIHdpbmRvdykgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCA9IFBhdGNoZWRBQztcblxuICBjb25zdCBvcmlnUGxheSA9IEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBsYXk7XG4gIEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuX19wdXBfY2FwdHVyZWRfXykge1xuICAgICAgdGhpcy5fX3B1cF9jYXB0dXJlZF9fID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGVsID0gdGhpcztcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIXNvdXJjZWRFbGVtZW50cy5oYXMoZWwpKSB7XG4gICAgICAgICAgY29uc3QgY3R4ID0gbmV3IFBhdGNoZWRBQygpO1xuICAgICAgICAgIGN0eC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoZWwpLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnUGxheS5jYWxsKHRoaXMpO1xuICB9O1xufSkoKTtcbmA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9DYXB0dXJlIHtcbiAgc2FtcGxlUmF0ZT86IG51bWJlcjtcbiAgdGVhcmRvd24oKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwQXVkaW9DYXB0dXJlKFxuICBwY21QYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPEF1ZGlvQ2FwdHVyZT4ge1xuICBjb25zdCBwcmVsb2FkUGF0aCA9IGpvaW4odG1wZGlyKCksIGBwdXBfYXVkaW9fcHJlbG9hZF8ke3JhbmRvbVVVSUQoKX0uanNgKTtcbiAgYXdhaXQgd3JpdGVGaWxlKHByZWxvYWRQYXRoLCBBVURJT19DQVBUVVJFX1NDUklQVCk7XG4gIHNlc3Npb24uZGVmYXVsdFNlc3Npb24ucmVnaXN0ZXJQcmVsb2FkU2NyaXB0KHtcbiAgICB0eXBlOiBcImZyYW1lXCIsXG4gICAgaWQ6IFwicHVwLWF1ZGlvXCIsXG4gICAgZmlsZVBhdGg6IHByZWxvYWRQYXRoLFxuICB9KTtcblxuICBjb25zdCB3cml0ZXIgPSBuZXcgRml4ZWRCdWZmZXJXcml0ZXIocGNtUGF0aCwgNDA5NiAqIDIgKiA0KTtcbiAgY29uc3QgY2FwdHVyZTogQXVkaW9DYXB0dXJlID0ge1xuICAgIHNhbXBsZVJhdGU6IHVuZGVmaW5lZCxcbiAgICBhc3luYyB0ZWFyZG93bigpIHtcbiAgICAgIGlwY01haW4ucmVtb3ZlQWxsTGlzdGVuZXJzKFwiYXVkaW8tY2h1bmtcIik7XG4gICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhcImF1ZGlvLW1ldGFcIik7XG4gICAgICBhd2FpdCB3cml0ZXIuY2xvc2UoKTtcbiAgICAgIHNlc3Npb24uZGVmYXVsdFNlc3Npb24udW5yZWdpc3RlclByZWxvYWRTY3JpcHQoXCJwdXAtYXVkaW9cIik7XG4gICAgICBhd2FpdCBybShwcmVsb2FkUGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9LFxuICB9O1xuXG4gIGlwY01haW4ub25jZShcImF1ZGlvLW1ldGFcIiwgKF9lLCBkYXRhOiB7IHNhbXBsZVJhdGU6IG51bWJlciB9KSA9PiB7XG4gICAgY2FwdHVyZS5zYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICB9KTtcbiAgaXBjTWFpbi5vbihcImF1ZGlvLWNodW5rXCIsIChfZSwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB3cml0ZXIud3JpdGUoYnVmZmVyKTtcbiAgfSk7XG4gIHJldHVybiBjYXB0dXJlO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRXcmFwcGVySFRNTCh0YXJnZXRVUkw6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8c3R5bGU+XG4gICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogJHt3aWR0aH1weDsgaGVpZ2h0OiAke2hlaWdodCArIDF9cHg7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjdGFyZ2V0IHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAwOyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAke2hlaWdodH1weDsgXG4gICAgICBib3JkZXI6IG5vbmU7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNzdGVnbyB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6IDFweDsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8aWZyYW1lIGlkPVwidGFyZ2V0XCIgc3JjPVwiJHt0YXJnZXRVUkx9XCI+PC9pZnJhbWU+XG4gIDxjYW52YXMgaWQ9XCJzdGVnb1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIxXCI+PC9jYW52YXM+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgV0lEVEggPSAke3dpZHRofTtcbiAgICAgIGNvbnN0IE1BUktFUl9XSURUSCA9ICR7RlJBTUVfU1lOQ19NQVJLRVJfV0lEVEh9O1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZWdvJyk7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnLCB7IHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZSB9KTtcbiAgICAgIGxldCBzdGFydFRpbWUgPSBudWxsO1xuICAgICAgbGV0IHJhZklkID0gbnVsbDtcblxuICAgICAgZnVuY3Rpb24gZW5jb2RlVGltZXN0YW1wKHRpbWVzdGFtcE1zKSB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEoV0lEVEgsIDEpO1xuICAgICAgICBjb25zdCBkYXRhID0gaW1hZ2VEYXRhLmRhdGE7XG4gICAgICAgIFxuICAgICAgICBjb25zdCB0aW1lc3RhbXBJbnQgPSBNYXRoLmZsb29yKHRpbWVzdGFtcE1zKSA+Pj4gMDtcbiAgICAgICAgXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZm9yIChsZXQgaSA9IE1BUktFUl9XSURUSDsgaSA8IFdJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMl0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9yZWNvcmRpbmdfXyA9ICgpID0+IHtcbiAgICAgICAgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcCgwKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX3N0b3BfcmVjb3JkaW5nX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVRpbWVzdGFtcChcbiAgYml0bWFwOiBCdWZmZXIsXG4gIHNpemU6IFNpemUsXG4pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIGlmICh3aWR0aCA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIHx8IGhlaWdodCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFya2VyUm93ID0gaGVpZ2h0IC0gMTtcblxuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgY29uc3QgcGl4ZWxJZHggPSAobWFya2VyUm93ICogd2lkdGggKyBpKSAqIDQ7XG4gICAgY29uc3QgciA9IGJpdG1hcFtwaXhlbElkeF0gPz8gMDtcbiAgICBjb25zdCBiaXQgPSByID4gMTI3ID8gMSA6IDA7XG4gICAgdGltZXN0YW1wID0gKHRpbWVzdGFtcCA8PCAxKSB8IGJpdDtcbiAgfVxuXG4gIHRpbWVzdGFtcCA9IHRpbWVzdGFtcCA+Pj4gMDtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApIHx8IHRpbWVzdGFtcCA8IDAgfHwgdGltZXN0YW1wID4gMWU3KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFN5bmMoY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gY2RwLnNlbmRDb21tYW5kKFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7XG4gICAgZXhwcmVzc2lvbjogYHdpbmRvdy5fX3B1cF9zdGFydF9yZWNvcmRpbmdfXygpYCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3luYyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBjZHAuc2VuZENvbW1hbmQoXCJSdW50aW1lLmV2YWx1YXRlXCIsIHtcbiAgICBleHByZXNzaW9uOiBgd2luZG93Ll9fcHVwX3N0b3BfcmVjb3JkaW5nX18oKWAsXG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHJldHVybiB0cnVlO1xuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuY29uc3QgU1VQUE9SVEVEX1BST1RPQ09MUyA9IFtcImZpbGU6XCIsIFwiaHR0cDpcIiwgXCJodHRwczpcIiwgXCJkYXRhOlwiXTtcbmNvbnN0IFNPVVJDRV9QQVRURVJOID0gL14oZmlsZTp8aHR0cHM/OnxkYXRhOikvO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIVE1MKHNvdXJjZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChTT1VSQ0VfUEFUVEVSTi50ZXN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcm90b2NvbCA9IHNvdXJjZS5zcGxpdChcIjpcIilbMF0gKyBcIjpcIjtcbiAgY29uc3QgbWVzc2FnZSA9IFNVUFBPUlRFRF9QUk9UT0NPTFMuaW5jbHVkZXMocHJvdG9jb2wpXG4gICAgPyBgdW5zdXBwb3J0ZWQgcHJvdG9jb2w6ICR7cHJvdG9jb2x9LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWBcbiAgICA6IGBpbnZhbGlkIHNvdXJjZSBmb3JtYXQsIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YDtcblxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBzZXNzaW9uIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwidXJsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Byb3h5XVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLCAvL1xuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuXSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm94aWVkVXJsKHVybDogc3RyaW5nKSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gIGNvbnN0IHRhcmdldCA9IG1hcC5nZXQocGFyc2VkLmhvc3RuYW1lKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHBhcnNlZC5ob3N0bmFtZSA9IHRhcmdldDtcbiAgcGFyc2VkLnByb3RvY29sID0gXCJodHRwOlwiO1xuICByZXR1cm4gcGFyc2VkLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVQcm94eSgpIHtcbiAgc2Vzc2lvbi5kZWZhdWx0U2Vzc2lvbi53ZWJSZXF1ZXN0Lm9uQmVmb3JlUmVxdWVzdCgoZGV0YWlscywgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCB1cmwgPSBkZXRhaWxzLnVybDtcbiAgICBjb25zdCBwcm94aWVkID0gcHJveGllZFVybCh1cmwpO1xuICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGAke3VybH0gLT4gJHtwcm94aWVkfWApO1xuICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICB9XG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKFxuICBjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkLFxuICBtczogbnVtYmVyLFxuKSB7XG4gIGxldCB0b2tlbjogTm9kZUpTLlRpbWVvdXQ7XG4gIGxldCBjbG9zZWQgPSBmYWxzZTtcbiAgYXN5bmMgZnVuY3Rpb24gdGljayhjb3VudDogbnVtYmVyKSB7XG4gICAgYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHJldHVybjtcbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcInRpbWVycy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnM8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+KHtcbiAgZm4sXG4gIG1heEF0dGVtcHRzID0gMyxcbiAgdGltZW91dCxcbn06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5wb3coMiwgYXR0ZW1wdCkgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93LCBzZXNzaW9uIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBidWlsZFdyYXBwZXJIVE1MIH0gZnJvbSBcIi4vZnJhbWVfc3luY1wiO1xuaW1wb3J0IHsgY2hlY2tIVE1MIH0gZnJvbSBcIi4vaHRtbF9jaGVja1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZW5hYmxlUHJveHksIHByb3hpZWRVcmwgfSBmcm9tIFwiLi9wcm94eVwiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi9yZXRyeVwiO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1dpbmRvd11cIjtcblxuZnVuY3Rpb24gd2FpdEZvckZpbmlzaCh3aW46IEJyb3dzZXJXaW5kb3csIGFjdGlvbjogKCkgPT4gdm9pZCkge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcImxvYWQgd2luZG93IHRpbWVvdXRcIikpLFxuICAgICAgMjBfMDAwLFxuICAgICk7XG4gICAgY29uc3QgZG9uZSA9IChlcnI/OiBFcnJvcikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1maW5pc2gtbG9hZFwiLCAoKSA9PiBkb25lKCkpO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLWZhaWwtbG9hZFwiLCAoX2UsIGNvZGUsIGRlc2MsIHVybCkgPT5cbiAgICAgIGRvbmUobmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCAke3VybH06IFske2NvZGV9XSAke2Rlc2N9YCkpLFxuICAgICk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+XG4gICAgICBkb25lKG5ldyBFcnJvcihgcmVuZGVyZXIgY3Jhc2hlZDogJHtleGl0Q29kZX0sICR7cmVhc29ufWApKSxcbiAgICApO1xuICAgIGFjdGlvbigpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyhcbiAgd2luczogQnJvd3NlcldpbmRvd1tdLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgb3B0aW9uczogUmVjb3JkT3B0aW9ucyxcbik6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBjaGVja0hUTUwoc291cmNlKTtcblxuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHVzZUlubmVyUHJveHkgfSA9IG9wdGlvbnM7XG5cbiAgc2Vzc2lvbi5kZWZhdWx0U2Vzc2lvbi53ZWJSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkKFxuICAgICh7IHJlc3BvbnNlSGVhZGVycyB9LCBjYWxsYmFjaykgPT4ge1xuICAgICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wieC1mcmFtZS1vcHRpb25zXCJdO1xuICAgICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiY29udGVudC1zZWN1cml0eS1wb2xpY3lcIl07XG4gICAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiXTtcbiAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICAgIH0sXG4gICk7XG5cbiAgbGV0IHNyYyA9IHNvdXJjZTtcbiAgaWYgKHVzZUlubmVyUHJveHkpIHtcbiAgICBzcmMgPSBwcm94aWVkVXJsKHNvdXJjZSk7XG4gICAgZW5hYmxlUHJveHkoKTtcbiAgfVxuXG4gIGNvbnN0IHdpbiA9IG5ldyBCcm93c2VyV2luZG93KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgd2ViUHJlZmVyZW5jZXM6IHtcbiAgICAgIG9mZnNjcmVlbjogdHJ1ZSxcbiAgICAgIGJhY2tncm91bmRUaHJvdHRsaW5nOiBmYWxzZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbjogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluU3ViRnJhbWVzOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICB9LFxuICB9KTtcbiAgd2lucy5zcGxpY2UoMCkuZm9yRWFjaCgodykgPT4gdy5kZXN0cm95KCkpO1xuICB3aW5zLnB1c2god2luKTtcblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKHsgbGV2ZWwsIG1lc3NhZ2UgfSkgPT4ge1xuICAgIGlmIChsZXZlbCA9PT0gXCJlcnJvclwiKSBsb2dnZXIuZXJyb3IoVEFHLCBcImNvbnNvbGU6XCIsIG1lc3NhZ2UpO1xuICB9KTtcblxuICBjb25zdCB3cmFwcGVySFRNTCA9IGJ1aWxkV3JhcHBlckhUTUwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gIGNvbnN0IGRhdGFVUkwgPSBgZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCwke2VuY29kZVVSSUNvbXBvbmVudCh3cmFwcGVySFRNTCl9YDtcbiAgYXdhaXQgd2FpdEZvckZpbmlzaCh3aW4sICgpID0+IHdpbi5sb2FkVVJMKGRhdGFVUkwpKTtcblxuICByZXR1cm4gd2luO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFdpbmRvdyhcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29yZE9wdGlvbnMsXG4pOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY29uc3Qgd2luczogQnJvd3NlcldpbmRvd1tdID0gW107XG4gIGNvbnN0IHdpbiA9IGF3YWl0IHVzZVJldHJ5KHsgZm46IG9wZW5XaW5kb3csIG1heEF0dGVtcHRzOiAyIH0pKFxuICAgIHdpbnMsXG4gICAgc291cmNlLFxuICAgIG9wdGlvbnMsXG4gICk7XG4gIGF3YWl0IHdhaXRGb3JGaW5pc2god2luLCAoKSA9PiB3aW4ucmVsb2FkKCkpO1xuICByZXR1cm4gd2luO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgdHlwZSBOYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBGaXhlZEJ1ZmZlcldyaXRlciB9IGZyb20gXCIuLi9ydXN0L2xpYlwiO1xuaW1wb3J0IHsgc2V0dXBBdWRpb0NhcHR1cmUgfSBmcm9tIFwiLi9hdWRpb19jYXB0dXJlXCI7XG5pbXBvcnQgeyBkZWNvZGVUaW1lc3RhbXAsIHN0YXJ0U3luYywgc3RvcFN5bmMgfSBmcm9tIFwiLi9mcmFtZV9zeW5jXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4vaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcbmltcG9ydCB0eXBlIHsgUmVjb3JkT3B0aW9ucywgUmVjb3JkUmVzdWx0IH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlY29yZF1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY29yZChcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29yZE9wdGlvbnMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nZ2VyLmluZm8oVEFHLCBgcHJvZ3Jlc3M6IDAlYCk7XG4gIGNvbnN0IHsgb3V0RGlyLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8gfSA9IG9wdGlvbnM7XG5cbiAgYXdhaXQgbWtkaXIob3V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBwY21QYXRoID0gam9pbihvdXREaXIsIFwib3V0cHV0LnBjbVwiKTtcbiAgY29uc3QgYXVkaW9DYXB0dXJlID0gd2l0aEF1ZGlvID8gYXdhaXQgc2V0dXBBdWRpb0NhcHR1cmUocGNtUGF0aCkgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyhzb3VyY2UsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY2RwLmF0dGFjaChcIjEuM1wiKTtcblxuICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKGZwcyk7XG4gIGlmICghd2luLndlYkNvbnRlbnRzLmlzUGFpbnRpbmcoKSkge1xuICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gIH1cblxuICBjb25zdCBiZ3JhID0gam9pbihvdXREaXIsIFwib3V0cHV0LmJncmFcIik7XG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGJ1ZmZlclNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDQ7XG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEZpeGVkQnVmZmVyV3JpdGVyKGJncmEsIGJ1ZmZlclNpemUsIGZwcyk7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgbGFzdFdyaXR0ZW5UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBmcmFtZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICBjb25zdCBzY2hlZHVsZVdyaXRlID0gKGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIHRyeSB7XG4gICAgICB3cml0ZXIud3JpdGUoYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZnJhbWVFcnJvciA/Pz0gZXJyb3IgYXMgRXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgaWYgKGZyYW1lRXJyb3IpIHtcbiAgICAgIHJlamVjdGVyPy4oZnJhbWVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNFbXB0eShpbWFnZSkpIHJldHVybjtcblxuICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBkZWNvZGVUaW1lc3RhbXAoYml0bWFwLCBpbWFnZS5nZXRTaXplKCkpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmcmFtZUVycm9yID8/PSBuZXcgRXJyb3IoYG5vIHRpbWVzdGFtcCBAICR7d3JpdHRlbn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBieXRlc1BlclJvdyA9IHdpZHRoICogNDtcbiAgICBjb25zdCBjcm9wcGVkID0gYml0bWFwLnN1YmFycmF5KDAsIGhlaWdodCAqIGJ5dGVzUGVyUm93KTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVXcml0ZShjcm9wcGVkKTtcbiAgICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RGcmFtZSA9IGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lO1xuICAgIGlmICh0aW1lU2luY2VMYXN0RnJhbWUgPCBmcmFtZUludGVydmFsICogMC44KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRpbWVTaW5jZUxhc3RGcmFtZSA8PSBmcmFtZUludGVydmFsICogMS4yKSB7XG4gICAgICBzY2hlZHVsZVdyaXRlKGNyb3BwZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmcmFtZXNUb0luc2VydCA9IE1hdGgucm91bmQodGltZVNpbmNlTGFzdEZyYW1lIC8gZnJhbWVJbnRlcnZhbCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lc1RvSW5zZXJ0ICYmIHdyaXR0ZW4gPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgIHNjaGVkdWxlV3JpdGUoY3JvcHBlZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIGxvZ2dlci5pbmZvKFRBRywgYHByb2dyZXNzOiAke01hdGgucm91bmQocHJvZ3Jlc3MpfSVgKTtcbiAgICB9XG4gIH07XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgcGFpbnQpO1xuICBhd2FpdCBzdGFydFN5bmMoY2RwKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigociwgaikgPT4gKFtyZXNvbHZlciwgcmVqZWN0ZXJdID0gW3IsIGpdKSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgc3RvcFN5bmMoY2RwKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IHdyaXRlci5jbG9zZSgpO1xuICAgIGF3YWl0IGF1ZGlvQ2FwdHVyZT8udGVhcmRvd24oKTtcbiAgfVxuXG4gIGlmIChmcmFtZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBmcmFtZUVycm9yID8/IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYXVkaW8gPSBhdWRpb0NhcHR1cmU/LnNhbXBsZVJhdGVcbiAgICAgID8geyBwY21QYXRoLCBzYW1wbGVSYXRlOiBhdWRpb0NhcHR1cmUuc2FtcGxlUmF0ZSB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZFJlc3VsdCA9IHsgb3B0aW9ucywgd3JpdHRlbiwgYmdyYSwgYXVkaW8gfTtcbiAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihvdXREaXIsIFwicmVjb3JkLmpzb25cIiksIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xuICAgIGxvZ2dlci5pbmZvKFRBRywgYHByb2dyZXNzOiAxMDAlLCAke3dyaXR0ZW59IGZyYW1lcyB3cml0dGVuYCk7XG4gIH0gZmluYWxseSB7XG4gICAgd2luLmNsb3NlKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxGbiBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBEPihcbiAgZm46IEZuLFxuICBkZWZhdWx0VmFsdWU6IEQsXG4pOiAoLi4uYXJnczogUGFyYW1ldGVyczxGbj4pID0+IFJldHVyblR5cGU8Rm4+IHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU3BlYyB7XG4gIGZwczogbnVtYmVyO1xuICBmcmFtZXM6IG51bWJlcjtcbiAgc2l6ZTogU2l6ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0ZpbGVzIHtcbiAgbXA0Pzogc3RyaW5nO1xuICB3ZWJtPzogc3RyaW5nO1xuICBtb3Y/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9GaWxlc1dpdGhDb3ZlciBleHRlbmRzIFZpZGVvRmlsZXMge1xuICBjb3Zlcjogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRElSID0gXCJvdXRcIjtcblxuZXhwb3J0IGNvbnN0IFJlY29yZFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHpcbiAgICAubnVtYmVyKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZWZhdWx0KERFRkFVTFRfRFVSQVRJT04pXG4gICAgLmRlc2NyaWJlKFwiUmVjb3JkaW5nIGR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVmYXVsdChERUZBVUxUX1dJRFRIKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHpcbiAgICAubnVtYmVyKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZWZhdWx0KERFRkFVTFRfSEVJR0hUKVxuICAgIC5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVmYXVsdChERUZBVUxUX0ZQUykuZGVzY3JpYmUoXCJGcmFtZXMgcGVyIHNlY29uZFwiKSxcbiAgd2l0aEFscGhhQ2hhbm5lbDogelxuICAgIC5ib29sZWFuKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5kZXNjcmliZShcIk91dHB1dCB3aXRoIGFscGhhIGNoYW5uZWxcIiksXG4gIHdpdGhBdWRpbzogelxuICAgIC5ib29sZWFuKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5kZXNjcmliZShcIkNhcHR1cmUgYW5kIGVuY29kZSBhdWRpb1wiKSxcbiAgb3V0RGlyOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVmYXVsdChERUZBVUxUX09VVF9ESVIpXG4gICAgLmRlc2NyaWJlKFwiT3V0cHV0IGRpcmVjdG9yeVwiKSxcbiAgdXNlSW5uZXJQcm94eTogelxuICAgIC5ib29sZWFuKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxufSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkT3B0aW9ucyB7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEFscGhhQ2hhbm5lbDogYm9vbGVhbjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBvdXREaXI6IHN0cmluZztcbiAgdXNlSW5uZXJQcm94eTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb1NwZWMge1xuICBwY21QYXRoOiBzdHJpbmc7XG4gIHNhbXBsZVJhdGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRSZXN1bHQge1xuICBvcHRpb25zOiBSZWNvcmRPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGJncmE6IHN0cmluZztcbiAgYXVkaW8/OiBBdWRpb1NwZWM7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgcHVwVXNlSW5uZXJQcm94eSB9IGZyb20gXCIuL2Jhc2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vZXJyIH0gZnJvbSBcIi4vYmFzZS9ub2VyclwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7XG4gIERFRkFVTFRfRFVSQVRJT04sXG4gIERFRkFVTFRfRlBTLFxuICBERUZBVUxUX0hFSUdIVCxcbiAgREVGQVVMVF9PVVRfRElSLFxuICBERUZBVUxUX1dJRFRILFxuICB0eXBlIFJlY29yZE9wdGlvbnMsXG59IGZyb20gXCIuL2Jhc2Uvc2NoZW1hXCI7XG5cbmV4cG9ydCB0eXBlIENMSUNhbGxiYWNrID0gKFxuICBzb3VyY2U6IHN0cmluZyxcbiAgb3B0aW9uczogUmVjb3JkT3B0aW9ucyxcbikgPT4gUHJvbWlzZTx1bmtub3duPjtcblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VDTEkobmFtZTogc3RyaW5nLCBjYWxsYmFjazogQ0xJQ2FsbGJhY2spIHtcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG5hbWUpXG4gICAgLmFyZ3VtZW50KFwiPHNvdXJjZT5cIiwgXCJmaWxlOi8vLCBodHRwKHMpOi8vLCDmiJYgZGF0YTogVVJJXCIpXG4gICAgLm9wdGlvbihcIi13LCAtLXdpZHRoIDxudW1iZXI+XCIsIFwi6KeG6aKR5a695bqmXCIsIGAke0RFRkFVTFRfV0lEVEh9YClcbiAgICAub3B0aW9uKFwiLWgsIC0taGVpZ2h0IDxudW1iZXI+XCIsIFwi6KeG6aKR6auY5bqmXCIsIGAke0RFRkFVTFRfSEVJR0hUfWApXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBcIuW4p+eOh1wiLCBgJHtERUZBVUxUX0ZQU31gKVxuICAgIC5vcHRpb24oXCItdCwgLS1kdXJhdGlvbiA8bnVtYmVyPlwiLCBcIuW9leWItuaXtumVv++8iOenku+8iVwiLCBgJHtERUZBVUxUX0RVUkFUSU9OfWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1kaXIgPHBhdGg+XCIsIFwi6L6T5Ye655uu5b2VXCIsIGAke0RFRkFVTFRfT1VUX0RJUn1gKVxuICAgIC5vcHRpb24oXCItYSwgLS13aXRoLWFscGhhLWNoYW5uZWxcIiwgXCLovpPlh7rljIXlkKsgYWxwaGEg6YCa6YGT55qE6KeG6aKRXCIsIGZhbHNlKVxuICAgIC5vcHRpb24oXCItcywgLS13aXRoLWF1ZGlvXCIsIFwi5o2V6I635bm25re35YWl6Z+z6aKRXCIsIGZhbHNlKVxuICAgIC5vcHRpb24oXG4gICAgICBcIi0tdXNlLWlubmVyLXByb3h5XCIsXG4gICAgICBcIuS9v+eUqCBCIOermeWGhee9keS7o+eQhuWKoOmAn+i1hOa6kOiuv+mXrlwiLFxuICAgICAgcHVwVXNlSW5uZXJQcm94eSxcbiAgICApXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGNhbGxiYWNrKHNvdXJjZSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgREVGQVVMVF9XSURUSCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgREVGQVVMVF9IRUlHSFQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBERUZBVUxUX0ZQUykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgREVGQVVMVF9EVVJBVElPTikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RGlyOiBvcHRzLm91dERpciA/PyBERUZBVUxUX09VVF9ESVIsXG4gICAgICAgICAgd2l0aEFscGhhQ2hhbm5lbDogb3B0cy53aXRoQWxwaGFDaGFubmVsID8/IGZhbHNlLFxuICAgICAgICAgIHdpdGhBdWRpbzogb3B0cy53aXRoQXVkaW8gPz8gZmFsc2UsXG4gICAgICAgICAgdXNlSW5uZXJQcm94eTogb3B0cy51c2VJbm5lclByb3h5ID8/IHB1cFVzZUlubmVyUHJveHksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZmF0YWwoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIHByb2dyYW0ucGFyc2UocGFyZ3MoKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBhcHAgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGVsZWN0cm9uT3B0cyB9IGZyb20gXCIuL2Jhc2UvZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJlY29yZCB9IGZyb20gXCIuL2Jhc2UvcmVjb3JkXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5cbnByb2Nlc3Mub25jZShcImV4aXRcIiwgKCkgPT4gYXBwLnF1aXQoKSk7XG5cbm1ha2VDTEkoXCJhcHBcIiwgYXN5bmMgKHNvdXJjZSwgb3B0aW9ucykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IG9wdHMgPSBhd2FpdCBlbGVjdHJvbk9wdHMoKTtcbiAgICBvcHRzLmZvckVhY2goKG8pID0+IHtcbiAgICAgIGNvbnN0IGVxID0gby5pbmRleE9mKFwiPVwiKTtcbiAgICAgIGlmIChlcSA8IDApIHtcbiAgICAgICAgYXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaChvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG8uc2xpY2UoMCwgZXEpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG8uc2xpY2UoZXEgKyAxKTtcbiAgICAgICAgYXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBhcHAuZG9jaz8uaGlkZSgpO1xuICAgIGF3YWl0IGFwcC53aGVuUmVhZHkoKTtcbiAgICBhd2FpdCByZWNvcmQoc291cmNlLCBvcHRpb25zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhcHAucXVpdCgpO1xuICB9XG59KTtcbiJdfQ==