pup-recorder 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -8
- package/dist/_tsup-dts-rollup.d.ts +7 -10
- package/dist/app.cjs +13 -13
- package/dist/chunk-QZHVDBDU.js +2 -0
- package/dist/cli.js +1 -1
- package/dist/index.js +2 -2
- package/package.json +2 -2
- package/dist/chunk-NKXGLDTD.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'source-map-support/register.js';import {createRequire}from'module';import {dirname,join}from'path';import {Log}from'node-av';import {AV_LOG_ERROR,AV_LOG_WARNING}from'node-av/constants';import {spawn}from'child_process';import Fe from'tree-kill';import m from'zod';import {ok}from'assert';import {randomUUID}from'crypto';import {rmSync}from'fs';import {mkdir}from'fs/promises';import {tmpdir,platform}from'os';import Ke from'electron';import {HardwareContext}from'node-av/api';import {EventEmitter}from'events';import {createServer}from'net';var ye=Object.create;var C=Object.defineProperty;var _e=Object.getOwnPropertyDescriptor;var O=(t,e)=>(e=Symbol[t])?e:Symbol.for("Symbol."+t),x=t=>{throw TypeError(t)};var Y=(t,e,r)=>e in t?C(t,e,{enumerable:true,configurable:true,writable:true,value:r}):t[e]=r;var X=t=>[,,,ye(null)],Z=["class","method","getter","setter","accessor","field","value","get","set"],S=t=>t!==void 0&&typeof t!="function"?x("Function expected"):t,Ee=(t,e,r,n,o)=>({kind:Z[t],name:e,metadata:n,addInitializer:i=>r._?x("Already initialized"):o.push(S(i||null))}),G=(t,e)=>Y(e,O("metadata"),t[3]),Q=(t,e,r,n)=>{for(var o=0,i=t[e>>1],s=i&&i.length;o<s;o++)i[o].call(r);return n},E=(t,e,r,n,o,i)=>{var c,u,p,v,a=e&7,_=false,f=false,k=2,M=Z[a+5],xe=t[k]||(t[k]=[]),h=((o=o.prototype),_e(o,r));for(var U=n.length-1;U>=0;U--)p=Ee(a,r,u={},t[3],xe),(p.static=_,p.private=f,v=p.access={has:l=>r in l},(v.get=l=>l[r]),a>2),c=(0, n[U])(h[M],p),u._=1,S(c)&&(h[M]=c);return h&&C(o,r,h),o},ee=(t,e,r)=>Y(t,e+"",r);var or=(t,e,r)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&x("Object expected");var n,o;r&&(n=e[O("asyncDispose")]),n===void 0&&(n=e[O("dispose")],r&&(o=n)),typeof n!="function"&&x("Object not disposable"),o&&(n=function(){try{o.call(this);}catch(i){return Promise.reject(i)}}),t.push([r,n,e]);}else r&&t.push([r]);return e},ir=(t,e,r)=>{var n=typeof SuppressedError=="function"?SuppressedError:function(s,c,u,p){return p=Error(u),p.name="SuppressedError",p.error=s,p.suppressed=c,p},o=s=>e=r?new n(s,e,"An error was suppressed during disposal"):(r=true,s),i=s=>{for(;s=t.pop();)try{var c=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(c).then(i,u=>(o(u),i()))}catch(u){o(u);}if(r)throw e};return i()};function re(t,e,r){try{return e(process.env[t])}catch{return r}}function te(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}function ur(t){return typeof t=="string"?t:String(t)}var Ae=createRequire(import.meta.url),R=process.env,A=re("PUP_LOG_LEVEL",te,2),ne=R.PUP_USE_INNER_PROXY==="1",oe=R.PUP_DISABLE_GPU==="1",ie=R.PUP_DISABLE_HW_CODEC==="1",se=R.PUP_DETERMINISTIC==="1",De=dirname(Ae.resolve("pup-recorder/package.json")),ae=join(De,"dist","app.cjs"),gr=R.PUP_IPC_SOCKET,ce=R.PUP_WINDOW_TOLERANT==="1";var N="<pup@debug>",$="<pup@info>",B="<pup@warn>",H="<pup@error>",W="<pup@fatal>";function I(t,e){return function(...r){let n=r.map(o=>o instanceof Error?o.stack??String(o):o);return t.call(this,...n)}}var ue,pe,de,le,fe,y;fe=[I],le=[I],de=[I],pe=[I],ue=[I];var P=class{constructor(e=A){this._level=e;Q(y,5,this);ee(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let r=e.debug??console.debug,n=e.info??console.info,o=e.warn??console.warn,i=e.error??console.error,s=this._level;this._impl={debug:s>=3?r:void 0,info:s>=2?n:void 0,warn:s>=1?o:void 0,error:s>=0?i:void 0};}debug(...e){this.impl?.debug?.(N,...e);}info(...e){this.impl?.info?.($,...e);}warn(...e){this.impl?.warn?.(B,...e);}error(...e){this.impl?.error?.(H,...e);}fatal(...e){this.impl?.error?.(W,...e),process.exit(1);}dispatch(e){let r=e.trimEnd();r.startsWith(N)?this.debug(r.slice(N.length+1)):r.startsWith($)?this.info(r.slice($.length+1)):r.startsWith(B)?this.warn(r.slice(B.length+1)):r.startsWith(H)?this.error(r.slice(H.length+1)):this.info(r);}attach(e,r){return new Promise((n,o)=>{this.debug(`${r}.attach`);let i="",s=c=>{let u=c.toString();u.startsWith(W)?i+=u.slice(W.length+1):this.dispatch(u);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("message",s).on("error",c=>{i+=c.message,e.kill();}).once("close",(c,u)=>{c||u||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${r}.close`,{code:c,signal:u,fatal:i}),o(new Error(i))):(this.debug(`${r}.close`),n());}).on("unhandledRejection",c=>{this.error(`${r}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${r}.unhandled`,c);});})}};y=X(),E(y,1,"debug",fe,P),E(y,1,"info",le,P),E(y,1,"warn",de,P),E(y,1,"error",pe,P),E(y,1,"fatal",ue,P),G(y,P);var d=new P;Log.setCallback((t,e)=>{let r=e.trimEnd();r&&(t<=AV_LOG_ERROR?d.error(r):t<=AV_LOG_WARNING&&d.warn(r));});function Er(t,e){return (...r)=>{try{let n=t(...r);return n instanceof Promise?n.catch(()=>e):n}catch{return e}}}var j="--pup-priv-args";function Ar(){let t=process.argv,e=t.find(n=>n.startsWith(j));if(!e)return d.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)),d.debug("pupargs",r),r}function me(t,e){let r=t.split(" ").filter(s=>s.length),[n,...o]=r;if(!n)throw new Error("empty command");let i=spawn(n,o,{stdio:"inherit",...e});return {process:i,wait:d.attach(i,n),kill(){let s=i.pid;s?Fe(s):i.kill();}}}var Ne=1920,$e=1080,Be=30,He=5,We="output.mp4",Gr=m.object({duration:m.number().describe("Duration in seconds"),width:m.number().describe("Video width"),height:m.number().describe("Video height"),fps:m.number().describe("Frames per second"),withAudio:m.boolean().describe("Capture and encode audio"),outFile:m.string().describe("Output mp4 file path"),useInnerProxy:m.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:m.boolean().describe("Render by frame rather than recording"),disableGpu:m.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:m.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:m.boolean().describe("Fall back to dom-ready if warmup load times out")}),he={width:Ne,height:$e,fps:Be,duration:He,outFile:We,withAudio:false,useInnerProxy:ne,deterministic:se,disableGpu:oe,disableHwCodec:ie,windowTolerant:ce};var Ve="[HWAccel]";async function Me(){let t=HardwareContext.auto(),e=t!==null;return t?.dispose(),e}var ge=Me().then(t=>(d.debug(Ve,"gpu:",t),t));async function be(t){let e=["no-sandbox","disable-dev-shm-usage","disable-web-security","disable-site-isolation-trials","ignore-certificate-errors","disable-blink-features=AutomationControlled","mute-audio","autoplay-policy=no-user-gesture-required","disable-extensions","force-device-scale-factor=1","force-color-profile=srgb","ignore-gpu-blocklist","use-gl=angle","deterministic-mode","enable-begin-frame-control","disable-new-content-rendering-timeout","run-all-compositor-stages-before-draw","disable-threaded-animation","disable-threaded-scrolling","disable-checker-imaging","disable-image-animation-resync","enable-surface-synchronization","font-render-hinting=none","disable-background-networking","js-flags=--max-old-space-size=512","renderer-process-limit=1","num-raster-threads=1","disable-background-timer-throttling","disable-renderer-backgrounding","disable-backgrounding-occluded-windows"];A<3&&e.push("log-level=3");let r=["FontationBackend"];if(!(await ge&&!t))e.push("use-angle=swiftshader","enable-unsafe-swiftshader");else {e.push("disable-gpu-sandbox","enable-unsafe-webgpu");let o=platform();o==="darwin"?e.push("use-angle=metal"):o==="win32"?e.push("use-angle=d3d11"):(e.push("use-angle=vulkan","disable-vulkan-surface"),r.push("Vulkan"));}return e.push(`enable-features=${r.join(",")}`),e}async function qe(t){return [...await be(t),"headless=new"]}var Ye="[Electron]";async function we(t,e,r){let n=[],o=platform();o==="linux"&&n.push("xvfb-run","--auto-servernum",`--server-args="-screen 0 ${t.width}x${t.height}x24"`);let s=(await qe(e.includes("--disable-gpu"))).map(p=>`--${p}`),c=Buffer.from(JSON.stringify(e)).toString("base64");s.push(`${j}=${c}`),n.push(Ke,...s,ae);let u=n.join(" ");return d.debug(Ye,u),me(u,{stdio:["ignore","pipe","pipe"],shell:o==="linux",env:{...process.env,RUST_BACKTRACE:"full",PUP_IPC_SOCKET:r}})}var D=8;var V=class extends EventEmitter{constructor(r){super();this._socket=r;this._socket.on("data",n=>this.onData(n)),this._socket.on("error",n=>this.emit("error",n)),this._socket.on("close",()=>this.emit("close"));}_socket;_chunks=[];_buffered=0;onData(r){this._chunks.push(r),this._buffered+=r.byteLength,this.flush();}flush(){for(;;){if(this._buffered<D)return;let r=this.peek(D),n=r.readUInt32LE(0),o=r.readUInt32LE(4);if(this._buffered<D+o)return;this.consume(D);let i=this.consume(o);switch(this.emit("message",n,i),n){case 1:{this.emit("progress",Number(i.toString()));break}case 2:{this.emit("done",JSON.parse(i.toString()));break}case 3:{this.emit("error",new Error(i.toString()));break}}}}peek(r){return this._chunks[0]&&this._chunks[0].byteLength>=r?this._chunks[0]:Buffer.concat(this._chunks).subarray(0,r)}consume(r){let n=Buffer.allocUnsafe(r),o=0;for(;o<r;){let i=this._chunks[0],s=Math.min(i.byteLength,r-o);i.copy(n,o,0,s),s===i.byteLength?this._chunks.shift():this._chunks[0]=i.subarray(s),o+=s;}return this._buffered-=r,n}};function Pe(t){return new Promise((e,r)=>{let n=createServer();n.once("error",r),n.listen(t,()=>{e({waitForConnection(){return new Promise((o,i)=>{n.once("connection",s=>o(new V(s))),n.once("error",i);})},close(){n.close();}});});})}var T="[pup]";async function nr(t,e,r){d.debug(T,"runPupApp",t,e);let n=[t,"--width",`${e.width}`,"--height",`${e.height}`,"--fps",`${e.fps}`,"--duration",`${e.duration}`,"--out-file",`${e.outFile}`];return e.withAudio&&n.push("--with-audio"),e.useInnerProxy&&n.push("--use-inner-proxy"),e.deterministic&&n.push("--deterministic"),e.disableGpu&&n.push("--disable-gpu"),e.disableHwCodec&&n.push("--disable-hw-codec"),e.windowTolerant&&n.push("--window-tolerant"),we(e,n,r)}var w=he;async function bt(t,e){d.debug(T,"pup",t,e);let{signal:r}=e;r?.throwIfAborted();let n=e.outFile??w.outFile,o={width:e.width??w.width,height:e.height??w.height,fps:e.fps??w.fps,duration:e.duration??w.duration,withAudio:e.withAudio??w.withAudio,useInnerProxy:e.useInnerProxy??w.useInnerProxy,deterministic:e.deterministic??w.deterministic,disableGpu:e.disableGpu??w.disableGpu,disableHwCodec:e.disableHwCodec??w.disableHwCodec,windowTolerant:e.windowTolerant??w.windowTolerant,outFile:n},i=join(tmpdir(),"pup",randomUUID());await mkdir(i,{recursive:true});let s=join(i,"pup.sock"),c=performance.now(),u=a=>(d.info(T,`${t} progress: ${a}%`),e.onProgress?.(a)),p=await Pe(s),v=await nr(t,{...o,signal:r},s);r?.addEventListener("abort",()=>{d.debug(T,"aborted"),v.kill(),rmSync(i,{recursive:true,force:true});},{once:true});try{let a=new Promise(async(f,k)=>{(await p.waitForConnection()).on("close",()=>k(new Error("IPC closed without result"))).on("message",()=>r?.aborted&&k(r.reason)).on("progress",u).on("done",f).on("error",k);}).finally(()=>p.close());u(0);let _=await Promise.race([a,v.wait]);return ok(_,"no summary received"),u(100),d.info(T,`done ${n} in ${Math.round(performance.now()-c)}ms`),{..._,options:o}}catch(a){throw v.kill(),r?.throwIfAborted(),a}finally{rmSync(i,{recursive:true,force:true});}}export{he as A,bt as B,or as a,ir as b,re as c,te as d,ur as e,A as f,ne as g,oe as h,ie as i,se as j,De as k,ae as l,gr as m,ce as n,P as o,d as p,Er as q,j as r,Ar as s,me as t,Ne as u,$e as v,Be as w,He as x,We as y,Gr as z};//# sourceMappingURL=chunk-QZHVDBDU.js.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2Vudi50cyIsIi4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi9zcmMvYmFzZS9ub2Vyci50cyIsIi4uL3NyYy9iYXNlL3Byb2Nlc3MudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2NoZW1hLnRzIiwiLi4vc3JjL2Jhc2UvaHdhY2NlbC50cyIsIi4uL3NyYy9iYXNlL2Nocm9taXVtLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2VsZWN0cm9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2lwYy50cyIsIi4uL3NyYy9wdXAudHMiXSwibmFtZXMiOlsicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJwYXJzZVN0cmluZyIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwiZW52IiwicHVwTG9nTGV2ZWwiLCJwdXBVc2VJbm5lclByb3h5IiwicHVwRGlzYWJsZUdQVSIsInB1cERpc2FibGVId0NvZGVjIiwicHVwRGV0ZXJtaW5pc3RpYyIsInB1cFBrZ1Jvb3QiLCJkaXJuYW1lIiwicHVwQXBwIiwiam9pbiIsInB1cElwY1NvY2tldCIsInB1cFdpbmRvd1RvbGVyYW50IiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJub2VyciIsImZuIiwiYXJncyIsInJldCIsIlBVUF9BUkdTX0tFWSIsInBhcmdzIiwiYXJndiIsInByaXYiLCJhcmciLCJleGVjIiwiY21kIiwib3B0aW9ucyIsInBhcnRzIiwiY29tbWFuZCIsInNwYXduIiwicGlkIiwidHJlZUtpbGwiLCJERUZBVUxUX1dJRFRIIiwiREVGQVVMVF9IRUlHSFQiLCJERUZBVUxUX0ZQUyIsIkRFRkFVTFRfRFVSQVRJT04iLCJERUZBVUxUX09VVF9GSUxFIiwiUmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwiVEFHIiwiZGV0ZWN0R1BVRHJpdmVyIiwiaHciLCJIYXJkd2FyZUNvbnRleHQiLCJyZXN1bHQiLCJjYW5JVXNlR1BVIiwiY2hyb21pdW1PcHRpb25zIiwiZGlzYWJsZUdwdSIsIm9wdHMiLCJmZWF0dXJlcyIsInBsYXQiLCJwbGF0Zm9ybSIsImVsZWN0cm9uT3B0cyIsInJ1bkVsZWN0cm9uQXBwIiwic2l6ZSIsImlwY1NvY2tldFBhdGgiLCJjbWRQYXJ0cyIsImVsZWN0cm9uQXJncyIsImEiLCJiYXNlNjRBcmdzIiwiZWxlY3Ryb24iLCJIRUFERVJfU0laRSIsIklwY1JlYWRlciIsIkV2ZW50RW1pdHRlciIsIl9zb2NrZXQiLCJoZWFkZXIiLCJ0eXBlIiwibGVuIiwicGF5bG9hZCIsIm4iLCJvdXQiLCJvZmZzZXQiLCJjaHVuayIsInRha2UiLCJjcmVhdGVJcGNTZXJ2ZXIiLCJzb2NrZXRQYXRoIiwic2VydmVyIiwiY3JlYXRlU2VydmVyIiwib2siLCJubyIsInNvY2tldCIsInJ1blB1cEFwcCIsInNvdXJjZSIsImQiLCJwdXAiLCJvdXRGaWxlIiwicmVuZGVyT3B0cyIsInRtcERpciIsInRtcGRpciIsInJhbmRvbVVVSUQiLCJta2RpciIsInQwIiwidGljayIsInAiLCJoYW5kbGUiLCJybVN5bmMiLCJzdW1tYXJ5IiwiZSJdLCJtYXBwaW5ncyI6InFzRUFNTyxTQUFTQSxFQUFBQSxDQUFRQyxDQUFBQSxDQUFjQyxDQUFBQSxDQUFzQkMsQ0FBQUEsQ0FBaUMsQ0FDM0YsR0FBSSxDQUNGLE9BQU9ELENBQUFBLENBQU8sT0FBQSxDQUFRLEdBQUEsQ0FBSUQsQ0FBSSxDQUFDLENBQ2pDLENBQUEsS0FBUSxDQUNOLE9BQU9FLENBQ1QsQ0FDRixDQ1ZPLFNBQVNDLEVBQUFBLENBQVlDLENBQUFBLENBQW9CLENBQzlDLEdBQUksT0FBT0EsQ0FBQUEsRUFBTSxRQUFBLENBQ2YsT0FBT0EsQ0FBQUEsQ0FFVCxJQUFNQyxDQUFBQSxDQUFNLE1BQUEsQ0FBT0QsQ0FBQyxDQUFBLENBQ3BCLEdBQUksTUFBQSxDQUFPLEtBQUEsQ0FBTUMsQ0FBRyxDQUFBLENBQ2xCLE1BQU0sSUFBSSxLQUFBLENBQU0sU0FBU0QsQ0FBQyxDQUFBLHNCQUFBLENBQXdCLENBQUEsQ0FFcEQsT0FBT0MsQ0FDVCxDQUVPLFNBQVNDLEVBQUFBLENBQVlGLENBQUFBLENBQW9CLENBQzlDLE9BQUksT0FBT0EsQ0FBQUEsRUFBTSxRQUFBLENBQWlCQSxFQUMzQixNQUFBLENBQU9BLENBQUMsQ0FDakIsS0NUTUcsRUFBQUEsQ0FBVUMsYUFBQUEsQ0FBYyxNQUFBLENBQUEsSUFBQSxDQUFZLEdBQUcsQ0FBQSxDQUN2Q0MsQ0FBQUEsQ0FBTSxPQUFBLENBQVEsR0FBQSxDQUVQQyxDQUFBQSxDQUFjWCxFQUFBQSxDQUFLLGVBQUEsQ0FBaUJJLEVBQUFBLENBQWEsQ0FBQyxDQUFBLENBQ2xEUSxHQUFtQkYsQ0FBQUEsQ0FBSSxtQkFBQSxHQUEyQixHQUFBLENBQ2xERyxFQUFBQSxDQUFnQkgsQ0FBQUEsQ0FBSSxlQUFBLEdBQXVCLEdBQUEsQ0FDM0NJLEVBQUFBLENBQW9CSixDQUFBQSxDQUFJLG9CQUFBLEdBQTRCLEdBQUEsQ0FDcERLLEVBQUFBLENBQW1CTCxDQUFBQSxDQUFJLGlCQUFBLEdBQXlCLEdBQUEsQ0FFaERNLEVBQUFBLENBQWFDLE9BQUFBLENBQVFULEVBQUFBLENBQVEsT0FBQSxDQUFRLDJCQUEyQixDQUFDLENBQUEsQ0FDakVVLEVBQUFBLENBQVNDLElBQUFBLENBQUtILEVBQUFBLENBQVksTUFBQSxDQUFRLFNBQVMsQ0FBQSxDQUMzQ0ksRUFBQUEsQ0FBZVYsQ0FBQUEsQ0FBSSxlQUVuQlcsRUFBQUEsQ0FBb0JYLENBQUFBLENBQUksbUJBQUEsR0FBMkIsSUNIaEUsSUFBTVksQ0FBQUEsQ0FBUSxhQUFBLENBQ1JDLENBQUFBLENBQU8sWUFBQSxDQUNQQyxDQUFBQSxDQUFPLFlBQUEsQ0FDUEMsQ0FBQUEsQ0FBUSxhQUFBLENBQ1JDLENBQUFBLENBQVEsYUFBQSxDQUVkLFNBQVNDLENBQUFBLENBQVVDLENBQUFBLENBQWtCQyxDQUFBQSxDQUF1QyxDQUMxRSxPQUFPLFNBQUEsR0FBMkJDLENBQUFBLENBQXFCLENBQ3JELElBQU1DLENBQUFBLENBQVlELENBQUFBLENBQVMsR0FBQSxDQUFLRSxDQUFBQSxFQUN2QkEsQ0FBQUEsWUFBZSxLQUFBLENBQVNBLENBQUFBLENBQUksS0FBQSxFQUFTLE1BQUEsQ0FBT0EsQ0FBRyxDQUFBLENBQUtBLENBQzVELENBQUEsQ0FDRCxPQUFPSixDQUFBQSxDQUFPLElBQUEsQ0FBSyxJQUFBLENBQU0sR0FBR0csQ0FBUyxDQUN2QyxDQUNGLENBOUJBLElBQUFFLEVBQUFBLENBQUFDLEVBQUFBLENBQUFDLEdBQUFDLEVBQUFBLENBQUFDLEVBQUFBLENBQUFDLENBQUFBLENBa0VFRCxFQUFBQSxDQUFBLENBQUNWLENBQUFBLENBQUFBLENBS0RTLEVBQUFBLENBQUEsQ0FBQ1QsQ0FBQUEsQ0FBQUEsQ0FLRFEsRUFBQUEsQ0FBQSxDQUFDUixDQUFBQSxDQUFBQSxDQUtETyxFQUFBQSxDQUFBLENBQUNQLEdBS0RNLEVBQUFBLENBQUEsQ0FBQ04sQ0FBQUEsQ0FBQUEsQ0F0REksSUFBTVksQ0FBQUEsQ0FBTixLQUFtQyxDQThCeEMsV0FBQSxDQUFvQkMsQ0FBQUEsQ0FBaUI3QixDQUFBQSxDQUFhLENBQTlCLElBQUEsQ0FBQSxNQUFBLENBQUE2QixDQUFBQSxDQTlCZkMsQ0FBQUEsQ0FBQUgsRUFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQ0xJLEVBQUFBLENBQUEsSUFBQSxDQUFRLE9BQUEsQ0FBQSxDQThCTixJQUFBLENBQUssSUFBQSxDQUFPLFFBQ2QsQ0FGb0IsTUFBQSxDQTNCcEIsSUFBSSxLQUFBLEVBQWdCLENBQ2xCLE9BQU8sSUFBQSxDQUFLLE1BQ2QsQ0FFQSxJQUFJLEtBQUEsQ0FBTUMsQ0FBQUEsQ0FBZSxDQUN2QixJQUFBLENBQUssTUFBQSxDQUFTQSxDQUFBQSxDQUNkLElBQUEsQ0FBSyxJQUFBLENBQU8sSUFBQSxDQUFLLEtBQUEsRUFBUyxRQUM1QixDQUVBLElBQUksTUFBK0IsQ0FDakMsT0FBTyxJQUFBLENBQUssS0FDZCxDQUVBLElBQUksSUFBQSxDQUFLQSxDQUFBQSxDQUFtQixDQUMxQixJQUFNQyxDQUFBQSxDQUFRRCxDQUFBQSxDQUFNLEtBQUEsRUFBUyxPQUFBLENBQVEsTUFDL0JFLENBQUFBLENBQU9GLENBQUFBLENBQU0sSUFBQSxFQUFRLE9BQUEsQ0FBUSxJQUFBLENBQzdCRyxDQUFBQSxDQUFPSCxDQUFBQSxDQUFNLElBQUEsRUFBUSxPQUFBLENBQVEsSUFBQSxDQUM3QkksQ0FBQUEsQ0FBUUosQ0FBQUEsQ0FBTSxLQUFBLEVBQVMsT0FBQSxDQUFRLE1BQy9CSyxDQUFBQSxDQUFLLElBQUEsQ0FBSyxNQUFBLENBQ2hCLElBQUEsQ0FBSyxLQUFBLENBQVEsQ0FDWCxLQUFBLENBQU9BLENBQUFBLEVBQU0sQ0FBQSxDQUFJSixDQUFBQSxDQUFRLE1BQUEsQ0FDekIsSUFBQSxDQUFNSSxDQUFBQSxFQUFNLENBQUEsQ0FBSUgsQ0FBQUEsQ0FBTyxNQUFBLENBQ3ZCLElBQUEsQ0FBTUcsQ0FBQUEsRUFBTSxDQUFBLENBQUlGLENBQUFBLENBQU8sTUFBQSxDQUN2QixLQUFBLENBQU9FLENBQUFBLEVBQU0sQ0FBQSxDQUFJRCxDQUFBQSxDQUFRLE1BQzNCLEVBQ0YsQ0FPQSxLQUFBLENBQUEsR0FBU2pCLENBQUFBLENBQTJCLENBQ2xDLElBQUEsQ0FBSyxJQUFBLEVBQU0sS0FBQSxHQUFRUixDQUFBQSxDQUFPLEdBQUdRLENBQVEsRUFDdkMsQ0FHQSxJQUFBLENBQUEsR0FBUUEsQ0FBQUEsQ0FBMkIsQ0FDakMsSUFBQSxDQUFLLElBQUEsRUFBTSxJQUFBLEdBQU9QLEVBQU0sR0FBR08sQ0FBUSxFQUNyQyxDQUdBLElBQUEsQ0FBQSxHQUFRQSxDQUFBQSxDQUEyQixDQUNqQyxJQUFBLENBQUssSUFBQSxFQUFNLElBQUEsR0FBT04sQ0FBQUEsQ0FBTSxHQUFHTSxDQUFRLEVBQ3JDLENBR0EsS0FBQSxDQUFBLEdBQVNBLENBQUFBLENBQTJCLENBQ2xDLElBQUEsQ0FBSyxJQUFBLEVBQU0sS0FBQSxHQUFRTCxDQUFBQSxDQUFPLEdBQUdLLENBQVEsRUFDdkMsQ0FHQSxLQUFBLENBQUEsR0FBU0EsQ0FBQUEsQ0FBMkIsQ0FDbEMsSUFBQSxDQUFLLElBQUEsRUFBTSxLQUFBLEdBQVFKLENBQUFBLENBQU8sR0FBR0ksQ0FBUSxDQUFBLENBQ3JDLE9BQUEsQ0FBUSxJQUFBLENBQUssQ0FBQyxFQUNoQixDQUVRLFFBQUEsQ0FBU21CLENBQUFBLENBQWlCLENBQ2hDLElBQU1qQixFQUFNaUIsQ0FBQUEsQ0FBUSxPQUFBLEVBQVEsQ0FDeEJqQixDQUFBQSxDQUFJLFVBQUEsQ0FBV1YsQ0FBSyxDQUFBLENBQ3RCLElBQUEsQ0FBSyxLQUFBLENBQU1VLENBQUFBLENBQUksS0FBQSxDQUFNVixDQUFBQSxDQUFNLE1BQUEsQ0FBUyxDQUFDLENBQUMsQ0FBQSxDQUM3QlUsQ0FBQUEsQ0FBSSxVQUFBLENBQVdULENBQUksQ0FBQSxDQUM1QixJQUFBLENBQUssSUFBQSxDQUFLUyxDQUFBQSxDQUFJLEtBQUEsQ0FBTVQsQ0FBQUEsQ0FBSyxNQUFBLENBQVMsQ0FBQyxDQUFDLENBQUEsQ0FDM0JTLEVBQUksVUFBQSxDQUFXUixDQUFJLENBQUEsQ0FDNUIsSUFBQSxDQUFLLElBQUEsQ0FBS1EsQ0FBQUEsQ0FBSSxLQUFBLENBQU1SLENBQUFBLENBQUssTUFBQSxDQUFTLENBQUMsQ0FBQyxDQUFBLENBQzNCUSxDQUFBQSxDQUFJLFVBQUEsQ0FBV1AsQ0FBSyxDQUFBLENBQzdCLElBQUEsQ0FBSyxLQUFBLENBQU1PLENBQUFBLENBQUksS0FBQSxDQUFNUCxDQUFBQSxDQUFNLE1BQUEsQ0FBUyxDQUFDLENBQUMsQ0FBQSxDQUV0QyxJQUFBLENBQUssSUFBQSxDQUFLTyxDQUFHLEVBRWpCLENBRUEsT0FBT2tCLENBQUFBLENBQW9CakQsQ0FBQUEsQ0FBYyxDQUN2QyxPQUFPLElBQUksT0FBQSxDQUFjLENBQUNrRCxDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQzVDLElBQUEsQ0FBSyxLQUFBLENBQU0sQ0FBQSxFQUFHbkQsQ0FBSSxTQUFTLENBQUEsQ0FDM0IsSUFBSW9ELENBQUFBLENBQWdCLEVBQUEsQ0FDZEMsQ0FBQUEsQ0FBWUMsQ0FBQUEsRUFBZ0MsQ0FDaEQsSUFBTU4sQ0FBQUEsQ0FBVU0sQ0FBQUEsQ0FBSyxRQUFBLEVBQVMsQ0FDMUJOLENBQUFBLENBQVEsVUFBQSxDQUFXdkIsQ0FBSyxDQUFBLENBQzFCMkIsQ0FBQUEsRUFBU0osQ0FBQUEsQ0FBUSxLQUFBLENBQU12QixDQUFBQSxDQUFNLE1BQUEsQ0FBUyxDQUFDLENBQUEsQ0FFdkMsSUFBQSxDQUFLLFFBQUEsQ0FBU3VCLENBQU8sRUFFekIsQ0FBQSxDQUNBQyxDQUFBQSxDQUFLLE1BQUEsRUFBUSxFQUFBLENBQUcsTUFBQSxDQUFRSSxDQUFRLENBQUEsQ0FDaENKLENBQUFBLENBQUssTUFBQSxFQUFRLEVBQUEsQ0FBRyxNQUFBLENBQVFJLENBQVEsQ0FBQSxDQUNoQ0osQ0FBQUEsQ0FDRyxFQUFBLENBQUcsU0FBQSxDQUFXSSxDQUFRLENBQUEsQ0FDdEIsR0FBRyxPQUFBLENBQVVFLENBQUFBLEVBQVEsQ0FDcEJILENBQUFBLEVBQVNHLENBQUFBLENBQUksT0FBQSxDQUNiTixDQUFBQSxDQUFLLElBQUEsR0FDUCxDQUFDLENBQUEsQ0FDQSxJQUFBLENBQUssT0FBQSxDQUFTLENBQUNPLEVBQU1DLENBQUFBLEdBQVcsQ0FDM0JELENBQUFBLEVBQVFDLENBQUFBLEVBQVVMLENBQUFBLEVBQ3BCQSxDQUFBQSxHQUFVLENBQUEsZ0JBQUEsRUFBbUJILENBQUFBLENBQUssU0FBQSxDQUFVLElBQUEsQ0FBSyxHQUFHLENBQUMsQ0FBQSxDQUFBLENBQ3JELElBQUEsQ0FBSyxNQUFNLENBQUEsRUFBR2pELENBQUksQ0FBQSxNQUFBLENBQUEsQ0FBVSxDQUFFLElBQUEsQ0FBQXdELENBQUFBLENBQU0sTUFBQSxDQUFBQyxDQUFBQSxDQUFRLEtBQUEsQ0FBQUwsQ0FBTSxDQUFDLENBQUEsQ0FDbkRELENBQUFBLENBQU8sSUFBSSxNQUFNQyxDQUFLLENBQUMsQ0FBQSxHQUV2QixJQUFBLENBQUssS0FBQSxDQUFNLENBQUEsRUFBR3BELENBQUksQ0FBQSxNQUFBLENBQVEsQ0FBQSxDQUMxQmtELENBQUFBLEVBQVEsRUFFWixDQUFDLENBQUEsQ0FDQSxFQUFBLENBQUcscUJBQXVCUSxDQUFBQSxFQUFXLENBQ3BDLElBQUEsQ0FBSyxLQUFBLENBQU0sQ0FBQSxFQUFHMUQsQ0FBSSxDQUFBLFVBQUEsQ0FBQSxDQUFjMEQsQ0FBTSxFQUN4QyxDQUFDLENBQUEsQ0FDQSxFQUFBLENBQUcsMEJBQUEsQ0FBNkJILENBQUFBLEVBQVEsQ0FDdkMsSUFBQSxDQUFLLEtBQUEsQ0FBTSxDQUFBLEVBQUd2RCxDQUFJLENBQUEsVUFBQSxDQUFBLENBQWN1RCxDQUFHLEVBQ3JDLENBQUMsRUFDTCxDQUFDLENBQ0gsQ0FDRixFQWpIT2xCLENBQUFBLENBQUFzQixFQUFBLENBQUEsQ0FtQ0xDLENBQUFBLENBQUF2QixDQUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBREFELEVBQUFBLENBbENXRSxDQUFBQSxDQUFBQSxDQXdDWHNCLENBQUFBLENBQUF2QixDQUFBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBREFGLEVBQUFBLENBdkNXRyxDQUFBQSxDQUFBQSxDQTZDWHNCLENBQUFBLENBQUF2QixDQUFBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBREFILEVBQUFBLENBNUNXSSxDQUFBQSxDQUFBQSxDQWtEWHNCLENBQUFBLENBQUF2QixDQUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBREFKLEVBQUFBLENBakRXSyxDQUFBQSxDQUFBQSxDQXVEWHNCLENBQUFBLENBQUF2QixDQUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBREFMLEVBQUFBLENBdERXTSxDQUFBQSxDQUFBQSxDQUFOdUIsQ0FBQUEsQ0FBQXhCLENBQUFBLENBQU1DLENBQUFBLENBQUFBLENBbUhiLElBQU13QixFQUFTLElBQUl4QixFQUduQnlCLEdBQUFBLENBQUksV0FBQSxDQUFZLENBQUNDLENBQUFBLENBQU9oQixDQUFBQSxHQUFZLENBQ2xDLElBQU1qQixDQUFBQSxDQUFNaUIsQ0FBQUEsQ0FBUSxPQUFBLEVBQVEsQ0FDdkJqQixDQUFBQSxHQUNEaUMsR0FBU0MsWUFBQUEsQ0FBY0gsQ0FBQUEsQ0FBTyxLQUFBLENBQU0vQixDQUFHLENBQUEsQ0FDbENpQyxDQUFBQSxFQUFTRSxjQUFBQSxFQUFnQkosQ0FBQUEsQ0FBTyxJQUFBLENBQUsvQixDQUFHLENBQUEsRUFDbkQsQ0FBQyxDQUFBLENDekpNLFNBQVNvQyxHQUNkQyxDQUFBQSxDQUNBbEUsQ0FBQUEsQ0FDaUQsQ0FDakQsT0FBTyxDQUFBLEdBQUltRSxDQUFBQSxHQUFTLENBQ2xCLEdBQUksQ0FDRixJQUFNQyxDQUFBQSxDQUFNRixDQUFBQSxDQUFHLEdBQUdDLENBQUksQ0FBQSxDQUN0QixPQUFJQyxDQUFBQSxZQUFlLE9BQUEsQ0FDVkEsQ0FBQUEsQ0FBSSxLQUFBLENBQU0sSUFBTXBFLENBQVksQ0FBQSxDQUU5Qm9FLENBQ1QsQ0FBQSxLQUFRLENBQ04sT0FBT3BFLENBQ1QsQ0FDRixDQUNGLENDWE8sSUFBTXFFLENBQUFBLENBQWUsa0JBRXJCLFNBQVNDLEVBQUFBLEVBQVEsQ0FDdEIsSUFBTUMsRUFBTyxPQUFBLENBQVEsSUFBQSxDQUNqQkMsQ0FBQUEsQ0FBT0QsQ0FBQUEsQ0FBSyxJQUFBLENBQU1FLENBQUFBLEVBQVFBLENBQUFBLENBQUksVUFBQSxDQUFXSixDQUFZLENBQUMsQ0FBQSxDQUMxRCxHQUFJLENBQUNHLENBQUFBLENBQ0gsT0FBQVosQ0FBQUEsQ0FBTyxLQUFBLENBQU0sVUFBQSxDQUFZVyxDQUFJLENBQUEsQ0FDdEIsT0FBQSxDQUFRLElBQUEsQ0FFakIsSUFBTUosQ0FBQUEsQ0FBTyxDQUFDLE1BQUEsQ0FBUSxHQUFHSSxDQUFBQSxDQUFLLEtBQUEsQ0FBTSxFQUFFLENBQUMsQ0FBQSxDQUN2QyxPQUFBQyxDQUFBQSxDQUFPLE1BQUEsQ0FBTyxJQUFBLENBQUtBLENBQUFBLENBQUssS0FBQSxDQUFNLEdBQUcsQ0FBQSxDQUFFLENBQUMsQ0FBQSxDQUFJLFFBQVEsQ0FBQSxDQUFFLFFBQUEsR0FDbERMLENBQUFBLENBQUssSUFBQSxDQUFLLEdBQUcsSUFBQSxDQUFLLEtBQUEsQ0FBTUssQ0FBSSxDQUFDLENBQUEsQ0FDN0JaLENBQUFBLENBQU8sS0FBQSxDQUFNLFNBQUEsQ0FBV08sQ0FBSSxDQUFBLENBQ3JCQSxDQUNULENBUU8sU0FBU08sRUFBQUEsQ0FBS0MsQ0FBQUEsQ0FBYUMsQ0FBQUEsQ0FBdUMsQ0FDdkUsSUFBTUMsQ0FBQUEsQ0FBUUYsQ0FBQUEsQ0FBSSxLQUFBLENBQU0sR0FBRyxDQUFBLENBQUUsTUFBQSxDQUFRLENBQUEsRUFBTSxDQUFBLENBQUUsTUFBTSxDQUFBLENBQzdDLENBQUNHLENBQUFBLENBQVMsR0FBR1gsQ0FBSSxDQUFBLENBQUlVLENBQUFBLENBQzNCLEdBQUksQ0FBQ0MsQ0FBQUEsQ0FBUyxNQUFNLElBQUksS0FBQSxDQUFNLGVBQWUsQ0FBQSxDQUM3QyxJQUFNL0IsQ0FBQUEsQ0FBT2dDLEtBQUFBLENBQU1ELENBQUFBLENBQVNYLENBQUFBLENBQU0sQ0FDaEMsS0FBQSxDQUFPLFNBQUEsQ0FDUCxHQUFHUyxDQUNMLENBQUMsQ0FBQSxDQUNELE9BQU8sQ0FDTCxPQUFBLENBQVM3QixFQUNULElBQUEsQ0FBTWEsQ0FBQUEsQ0FBTyxNQUFBLENBQU9iLENBQUFBLENBQU0rQixDQUFPLENBQUEsQ0FDakMsSUFBQSxFQUFPLENBQ0wsSUFBTUUsQ0FBQUEsQ0FBTWpDLENBQUFBLENBQUssR0FBQSxDQUNiaUMsQ0FBQUEsQ0FBS0MsRUFBQUEsQ0FBU0QsQ0FBRyxDQUFBLENBQ2hCakMsQ0FBQUEsQ0FBSyxJQUFBLEdBQ1osQ0FDRixDQUNGLENDbENPLElBQU1tQyxFQUFBQSxDQUFnQixJQUFBLENBQ2hCQyxFQUFBQSxDQUFpQixLQUNqQkMsRUFBQUEsQ0FBYyxFQUFBLENBQ2RDLEVBQUFBLENBQW1CLENBQUEsQ0FDbkJDLEVBQUFBLENBQW1CLFlBQUEsQ0FFbkJDLEVBQUFBLENBQWVDLENBQUFBLENBQUUsTUFBQSxDQUFPLENBQ25DLFFBQUEsQ0FBVUEsQ0FBQUEsQ0FBRSxNQUFBLEVBQU8sQ0FBRSxRQUFBLENBQVMscUJBQXFCLENBQUEsQ0FDbkQsS0FBQSxDQUFPQSxDQUFBQSxDQUFFLE1BQUEsRUFBTyxDQUFFLFFBQUEsQ0FBUyxhQUFhLENBQUEsQ0FDeEMsTUFBQSxDQUFRQSxDQUFBQSxDQUFFLE1BQUEsRUFBTyxDQUFFLFFBQUEsQ0FBUyxjQUFjLEVBQzFDLEdBQUEsQ0FBS0EsQ0FBQUEsQ0FBRSxNQUFBLEVBQU8sQ0FBRSxRQUFBLENBQVMsbUJBQW1CLENBQUEsQ0FDNUMsU0FBQSxDQUFXQSxDQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFFBQUEsQ0FBUywwQkFBMEIsQ0FBQSxDQUMxRCxRQUFTQSxDQUFBQSxDQUFFLE1BQUEsRUFBTyxDQUFFLFFBQUEsQ0FBUyxzQkFBc0IsQ0FBQSxDQUNuRCxhQUFBLENBQWVBLENBQUFBLENBQUUsT0FBQSxFQUFRLENBQUUsUUFBQSxDQUFTLDhDQUE4QyxDQUFBLENBQ2xGLGFBQUEsQ0FBZUEsRUFBRSxPQUFBLEVBQVEsQ0FBRSxRQUFBLENBQVMsdUNBQXVDLENBQUEsQ0FDM0UsVUFBQSxDQUFZQSxDQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFFBQUEsQ0FBUyxzRUFBc0UsQ0FBQSxDQUN2RyxjQUFBLENBQWdCQSxDQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFFBQUEsQ0FBUyx3RUFBd0UsQ0FBQSxDQUM3RyxjQUFBLENBQWdCQSxDQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFFBQUEsQ0FBUyxpREFBaUQsQ0FDeEYsQ0FBQyxDQUFBLENBV1lDLEVBQUFBLENBQXNDLENBQ2pELE1BQU9QLEVBQUFBLENBQ1AsTUFBQSxDQUFRQyxFQUFBQSxDQUNSLEdBQUEsQ0FBS0MsRUFBQUEsQ0FDTCxRQUFBLENBQVVDLEVBQUFBLENBQ1YsT0FBQSxDQUFTQyxFQUFBQSxDQUNULFNBQUEsQ0FBVyxLQUFBLENBQ1gsYUFBQSxDQUFlN0UsRUFBQUEsQ0FDZixhQUFBLENBQWVHLEdBQ2YsVUFBQSxDQUFZRixFQUFBQSxDQUNaLGNBQUEsQ0FBZ0JDLEVBQUFBLENBQ2hCLGNBQUEsQ0FBZ0JPLEVBQ2xCLEVDL0NBLElBQU13RSxFQUFBQSxDQUFNLFdBQUEsQ0FFWixlQUFlQyxFQUFBQSxFQUFrQixDQUMvQixJQUFNQyxDQUFBQSxDQUFLQyxlQUFBQSxDQUFnQixJQUFBLEVBQUssQ0FDMUJDLENBQUFBLENBQVNGLENBQUFBLEdBQU8sSUFBQSxDQUN0QixPQUFBQSxDQUFBQSxFQUFJLE9BQUEsRUFBUSxDQUNMRSxDQUNULENBRU8sSUFBTUMsRUFBQUEsQ0FBYUosRUFBQUEsRUFBZ0IsQ0FBRSxJQUFBLENBQU1HLENBQUFBLEdBQ2hEbEMsQ0FBQUEsQ0FBTyxLQUFBLENBQU04QixFQUFBQSxDQUFLLE9BQVFJLENBQU0sQ0FBQSxDQUN6QkEsQ0FBQUEsQ0FDUixDQUFBLENDWEQsZUFBc0JFLEVBQUFBLENBQWdCQyxDQUFBQSxDQUFxQixDQUN6RCxJQUFNQyxDQUFBQSxDQUFPLENBRVgsWUFBQSxDQUNBLHVCQUFBLENBRUEsc0JBQUEsQ0FDQSxnQ0FDQSwyQkFBQSxDQUVBLDZDQUFBLENBQ0EsWUFBQSxDQUNBLDBDQUFBLENBQ0Esb0JBQUEsQ0FFQSw2QkFBQSxDQUNBLDBCQUFBLENBQ0Esc0JBQUEsQ0FDQSxjQUFBLENBQ0Esb0JBQUEsQ0FDQSw0QkFBQSxDQUNBLHVDQUFBLENBQ0EsdUNBQUEsQ0FDQSw0QkFBQSxDQUNBLDZCQUNBLHlCQUFBLENBQ0EsZ0NBQUEsQ0FDQSxnQ0FBQSxDQUVBLDBCQUFBLENBRUEsK0JBQUEsQ0FDQSxtQ0FBQSxDQUNBLDBCQUFBLENBQ0Esc0JBQUEsQ0FDQSxxQ0FBQSxDQUNBLGdDQUFBLENBQ0Esd0NBQ0YsQ0FBQSxDQUVJMUYsQ0FBQUEsQ0FBYyxDQUFBLEVBQ2hCMEYsRUFBSyxJQUFBLENBQUssYUFBYSxDQUFBLENBR3pCLElBQU1DLENBQUFBLENBQVcsQ0FBQyxrQkFBa0IsQ0FBQSxDQUVwQyxHQUFJLEVBRGUsTUFBTUosRUFBQUEsRUFBZSxDQUFDRSxDQUFBQSxDQUFBQSxDQUV2Q0MsRUFBSyxJQUFBLENBQUssdUJBQUEsQ0FBeUIsMkJBQTJCLENBQUEsQ0FBQSxLQUN6RCxDQUNMQSxDQUFBQSxDQUFLLElBQUEsQ0FBSyxxQkFBQSxDQUF1QixzQkFBc0IsQ0FBQSxDQUN2RCxJQUFNRSxDQUFBQSxDQUFPQyxRQUFBQSxFQUFTLENBQ2xCRCxDQUFBQSxHQUFTLFFBQUEsQ0FDWEYsQ0FBQUEsQ0FBSyxJQUFBLENBQUssaUJBQWlCLENBQUEsQ0FDbEJFLENBQUFBLEdBQVMsT0FBQSxDQUNsQkYsQ0FBQUEsQ0FBSyxJQUFBLENBQUssaUJBQWlCLENBQUEsRUFFM0JBLENBQUFBLENBQUssSUFBQSxDQUFLLGtCQUFBLENBQW9CLHdCQUF3QixFQUN0REMsQ0FBQUEsQ0FBUyxJQUFBLENBQUssUUFBUSxDQUFBLEVBRTFCLENBRUEsT0FBQUQsQ0FBQUEsQ0FBSyxJQUFBLENBQUssQ0FBQSxnQkFBQSxFQUFtQkMsQ0FBQUEsQ0FBUyxJQUFBLENBQUssR0FBRyxDQUFDLENBQUEsQ0FBRSxFQUMxQ0QsQ0FDVCxDQzVEQSxlQUFzQkksRUFBQUEsQ0FBYUwsQ0FBQUEsQ0FBcUIsQ0FDdEQsT0FBTyxDQUFDLEdBQUksTUFBTUQsRUFBQUEsQ0FBZ0JDLENBQVUsQ0FBQSxDQUFJLGNBQWMsQ0FDaEUsQ0FFQSxJQUFNUCxFQUFBQSxDQUFNLFlBQUEsQ0FFWixlQUFzQmEsRUFBQUEsQ0FBZUMsQ0FBQUEsQ0FBWXJDLENBQUFBLENBQWlCc0MsQ0FBQUEsQ0FBdUIsQ0FDdkYsSUFBTUMsQ0FBQUEsQ0FBc0IsRUFBQyxDQUN2Qk4sQ0FBQUEsQ0FBT0MsUUFBQUEsRUFBUyxDQUNsQkQsQ0FBQUEsR0FBUyxPQUFBLEVBQ1hNLENBQUFBLENBQVMsSUFBQSxDQUFLLFVBQUEsQ0FBWSxrQkFBQSxDQUFvQixDQUFBLHlCQUFBLEVBQTRCRixDQUFBQSxDQUFLLEtBQUssQ0FBQSxDQUFBLEVBQUlBLENBQUFBLENBQUssTUFBTSxDQUFBLElBQUEsQ0FBTSxFQUczRyxJQUFNRyxDQUFBQSxDQUFBQSxDQURPLE1BQU1MLEVBQUFBLENBQWFuQyxDQUFBQSxDQUFLLFFBQUEsQ0FBUyxlQUFlLENBQUMsQ0FBQSxFQUNwQyxHQUFBLENBQUt5QyxDQUFBQSxFQUFNLENBQUEsRUFBQSxFQUFLQSxDQUFDLENBQUEsQ0FBRSxFQUN2Q0MsQ0FBQUEsQ0FBYSxNQUFBLENBQU8sSUFBQSxDQUFLLElBQUEsQ0FBSyxTQUFBLENBQVUxQyxDQUFJLENBQUMsQ0FBQSxDQUFFLFFBQUEsQ0FBUyxRQUFRLENBQUEsQ0FDdEV3QyxDQUFBQSxDQUFhLElBQUEsQ0FBSyxDQUFBLEVBQUd0QyxDQUFZLENBQUEsQ0FBQSxFQUFJd0MsQ0FBVSxDQUFBLENBQUUsQ0FBQSxDQUNqREgsQ0FBQUEsQ0FBUyxJQUFBLENBQUtJLEVBQUFBLENBQVUsR0FBR0gsQ0FBQUEsQ0FBYzVGLEVBQU0sQ0FBQSxDQUMvQyxJQUFNNEQsQ0FBQUEsQ0FBTStCLENBQUFBLENBQVMsSUFBQSxDQUFLLEdBQUcsQ0FBQSxDQUM3QixPQUFBOUMsQ0FBQUEsQ0FBTyxLQUFBLENBQU04QixFQUFBQSxDQUFLZixDQUFHLENBQUEsQ0FDZEQsRUFBQUEsQ0FBS0MsQ0FBQUEsQ0FBSyxDQUNmLEtBQUEsQ0FBTyxDQUFDLFFBQUEsQ0FBVSxNQUFBLENBQVEsTUFBTSxDQUFBLENBQ2hDLEtBQUEsQ0FBT3lCLENBQUFBLEdBQVMsT0FBQSxDQUNoQixHQUFBLENBQUssQ0FBRSxHQUFHLE9BQUEsQ0FBUSxHQUFBLENBQUssY0FBQSxDQUFnQixNQUFBLENBQVEsY0FBQSxDQUFnQkssQ0FBYyxDQUMvRSxDQUFDLENBQ0gsQ0M1QkEsSUFBTU0sQ0FBQUEsQ0FBYyxFQWdEYixJQUFNQyxDQUFBQSxDQUFOLGNBQXdCQyxZQU01QixDQUlELFdBQUEsQ0FBNkJDLENBQUFBLENBQWlCLENBQzVDLEtBQUEsRUFBTSxDQURxQixJQUFBLENBQUEsT0FBQSxDQUFBQSxDQUFBQSxDQUUzQixJQUFBLENBQUssT0FBQSxDQUFRLEVBQUEsQ0FBRyxNQUFBLENBQVM5RCxDQUFBQSxFQUFTLElBQUEsQ0FBSyxNQUFBLENBQU9BLENBQUksQ0FBQyxDQUFBLENBQ25ELElBQUEsQ0FBSyxPQUFBLENBQVEsRUFBQSxDQUFHLE9BQUEsQ0FBVUMsQ0FBQUEsRUFBUSxJQUFBLENBQUssSUFBQSxDQUFLLE9BQUEsQ0FBU0EsQ0FBRyxDQUFDLENBQUEsQ0FDekQsSUFBQSxDQUFLLE9BQUEsQ0FBUSxFQUFBLENBQUcsT0FBQSxDQUFTLElBQU0sSUFBQSxDQUFLLElBQUEsQ0FBSyxPQUFPLENBQUMsRUFDbkQsQ0FMNkIsT0FBQSxDQUhyQixRQUFvQixFQUFDLENBQ3JCLFNBQUEsQ0FBWSxDQUFBLENBU1osTUFBQSxDQUFPRCxDQUFBQSxDQUFvQixDQUNqQyxJQUFBLENBQUssT0FBQSxDQUFRLElBQUEsQ0FBS0EsQ0FBSSxDQUFBLENBQ3RCLElBQUEsQ0FBSyxTQUFBLEVBQWFBLEVBQUssVUFBQSxDQUN2QixJQUFBLENBQUssS0FBQSxHQUNQLENBRVEsS0FBQSxFQUFjLENBQ3BCLE9BQVMsQ0FDUCxHQUFJLElBQUEsQ0FBSyxTQUFBLENBQVkyRCxDQUFBQSxDQUFhLE9BQ2xDLElBQU1JLENBQUFBLENBQVMsSUFBQSxDQUFLLElBQUEsQ0FBS0osQ0FBVyxDQUFBLENBQzlCSyxDQUFBQSxDQUFPRCxDQUFBQSxDQUFPLFlBQUEsQ0FBYSxDQUFDLENBQUEsQ0FDNUJFLENBQUFBLENBQU1GLENBQUFBLENBQU8sWUFBQSxDQUFhLENBQUMsQ0FBQSxDQUNqQyxHQUFJLElBQUEsQ0FBSyxTQUFBLENBQVlKLENBQUFBLENBQWNNLENBQUFBLENBQUssT0FDeEMsSUFBQSxDQUFLLE9BQUEsQ0FBUU4sQ0FBVyxDQUFBLENBQ3hCLElBQU1PLENBQUFBLENBQVUsSUFBQSxDQUFLLE9BQUEsQ0FBUUQsQ0FBRyxFQUVoQyxPQURBLElBQUEsQ0FBSyxJQUFBLENBQUssU0FBQSxDQUFXRCxDQUFBQSxDQUFNRSxDQUFPLENBQUEsQ0FDMUJGLENBQUFBLEVBQ04sS0FBSyxDQUFBLENBQXFCLENBQ3hCLElBQUEsQ0FBSyxJQUFBLENBQUssV0FBWSxNQUFBLENBQU9FLENBQUFBLENBQVEsUUFBQSxFQUFVLENBQUMsQ0FBQSxDQUNoRCxLQUNGLENBQ0EsS0FBSyxDQUFBLENBQWlCLENBQ3BCLElBQUEsQ0FBSyxJQUFBLENBQUssTUFBQSxDQUFRLElBQUEsQ0FBSyxLQUFBLENBQU1BLENBQUFBLENBQVEsUUFBQSxFQUFVLENBQUMsQ0FBQSxDQUNoRCxLQUNGLENBQ0EsS0FBSyxDQUFBLENBQWtCLENBQ3JCLElBQUEsQ0FBSyxJQUFBLENBQUssT0FBQSxDQUFTLElBQUksTUFBTUEsQ0FBQUEsQ0FBUSxRQUFBLEVBQVUsQ0FBQyxDQUFBLENBQ2hELEtBQ0YsQ0FDRixDQUNGLENBQ0YsQ0FFUSxJQUFBLENBQUtDLENBQUFBLENBQW1CLENBQzlCLE9BQUksS0FBSyxPQUFBLENBQVEsQ0FBQyxDQUFBLEVBQUssSUFBQSxDQUFLLE9BQUEsQ0FBUSxDQUFDLENBQUEsQ0FBRSxVQUFBLEVBQWNBLENBQUFBLENBQVUsSUFBQSxDQUFLLE9BQUEsQ0FBUSxDQUFDLENBQUEsQ0FDdEUsTUFBQSxDQUFPLE9BQU8sSUFBQSxDQUFLLE9BQU8sQ0FBQSxDQUFFLFFBQUEsQ0FBUyxDQUFBLENBQUdBLENBQUMsQ0FDbEQsQ0FFUSxPQUFBLENBQVFBLENBQUFBLENBQW1CLENBQ2pDLElBQU1DLENBQUFBLENBQU0sTUFBQSxDQUFPLFdBQUEsQ0FBWUQsQ0FBQyxDQUFBLENBQzVCRSxDQUFBQSxDQUFTLENBQUEsQ0FDYixLQUFPQSxDQUFBQSxDQUFTRixDQUFBQSxFQUFHLENBQ2pCLElBQU1HLENBQUFBLENBQVEsSUFBQSxDQUFLLE9BQUEsQ0FBUSxDQUFDLENBQUEsQ0FDdEJDLENBQUFBLENBQU8sS0FBSyxHQUFBLENBQUlELENBQUFBLENBQU0sVUFBQSxDQUFZSCxDQUFBQSxDQUFJRSxDQUFNLENBQUEsQ0FDbERDLENBQUFBLENBQU0sSUFBQSxDQUFLRixDQUFBQSxDQUFLQyxDQUFBQSxDQUFRLENBQUEsQ0FBR0UsQ0FBSSxDQUFBLENBQzNCQSxDQUFBQSxHQUFTRCxFQUFNLFVBQUEsQ0FDakIsSUFBQSxDQUFLLE9BQUEsQ0FBUSxLQUFBLEVBQU0sQ0FFbkIsSUFBQSxDQUFLLE9BQUEsQ0FBUSxDQUFDLENBQUEsQ0FBSUEsQ0FBQUEsQ0FBTSxRQUFBLENBQVNDLENBQUksQ0FBQSxDQUV2Q0YsQ0FBQUEsRUFBVUUsRUFDWixDQUNBLE9BQUEsSUFBQSxDQUFLLFNBQUEsRUFBYUosQ0FBQUEsQ0FDWEMsQ0FDVCxDQUNGLENBQUEsQ0FPTyxTQUFTSSxFQUFBQSxDQUFnQkMsQ0FBQUEsQ0FBd0MsQ0FDdEUsT0FBTyxJQUFJLE9BQUEsQ0FBUSxDQUFDN0UsQ0FBQUEsQ0FBU0MsQ0FBQUEsR0FBVyxDQUN0QyxJQUFNNkUsQ0FBQUEsQ0FBU0MsWUFBQUEsRUFBYSxDQUM1QkQsQ0FBQUEsQ0FBTyxJQUFBLENBQUssT0FBQSxDQUFTN0UsQ0FBTSxDQUFBLENBQzNCNkUsQ0FBQUEsQ0FBTyxNQUFBLENBQU9ELEVBQVksSUFBTSxDQUM5QjdFLENBQUFBLENBQVEsQ0FDTixpQkFBQSxFQUFvQixDQUNsQixPQUFPLElBQUksT0FBQSxDQUFtQixDQUFDZ0YsQ0FBQUEsQ0FBSUMsQ0FBQUEsR0FBTyxDQUN4Q0gsQ0FBQUEsQ0FBTyxLQUFLLFlBQUEsQ0FBZUksQ0FBQUEsRUFBV0YsQ0FBQUEsQ0FBRyxJQUFJaEIsQ0FBQUEsQ0FBVWtCLENBQU0sQ0FBQyxDQUFDLENBQUEsQ0FDL0RKLENBQUFBLENBQU8sSUFBQSxDQUFLLE9BQUEsQ0FBU0csQ0FBRSxFQUN6QixDQUFDLENBQ0gsQ0FBQSxDQUNBLEtBQUEsRUFBUSxDQUNOSCxDQUFBQSxDQUFPLEtBQUEsR0FDVCxDQUNGLENBQUMsRUFDSCxDQUFDLEVBQ0gsQ0FBQyxDQUNILENDeklBLElBQU1wQyxDQUFBQSxDQUFNLE9BQUEsQ0FlWixlQUFleUMsRUFBQUEsQ0FBVUMsQ0FBQUEsQ0FBZ0J4RCxDQUFBQSxDQUFxQmlELENBQUFBLENBQW9CLENBQ2hGakUsQ0FBQUEsQ0FBTyxLQUFBLENBQU04QixDQUFBQSxDQUFLLFdBQUEsQ0FBYTBDLENBQUFBLENBQVF4RCxDQUFPLEVBRTlDLElBQU1ULENBQUFBLENBQWlCLENBQ3JCaUUsQ0FBQUEsQ0FDQSxTQUFBLENBQ0EsQ0FBQSxFQUFHeEQsQ0FBQUEsQ0FBUSxLQUFLLENBQUEsQ0FBQSxDQUNoQixVQUFBLENBQ0EsQ0FBQSxFQUFHQSxDQUFBQSxDQUFRLE1BQU0sQ0FBQSxDQUFBLENBQ2pCLFFBQ0EsQ0FBQSxFQUFHQSxDQUFBQSxDQUFRLEdBQUcsQ0FBQSxDQUFBLENBQ2QsWUFBQSxDQUNBLENBQUEsRUFBR0EsQ0FBQUEsQ0FBUSxRQUFRLENBQUEsQ0FBQSxDQUNuQixZQUFBLENBQ0EsQ0FBQSxFQUFHQSxDQUFBQSxDQUFRLE9BQU8sQ0FBQSxDQUNwQixFQUNBLE9BQUlBLENBQUFBLENBQVEsU0FBQSxFQUFXVCxDQUFBQSxDQUFLLElBQUEsQ0FBSyxjQUFjLENBQUEsQ0FDM0NTLENBQUFBLENBQVEsYUFBQSxFQUFlVCxDQUFBQSxDQUFLLElBQUEsQ0FBSyxtQkFBbUIsQ0FBQSxDQUNwRFMsQ0FBQUEsQ0FBUSxhQUFBLEVBQWVULENBQUFBLENBQUssSUFBQSxDQUFLLGlCQUFpQixDQUFBLENBQ2xEUyxDQUFBQSxDQUFRLFVBQUEsRUFBWVQsQ0FBQUEsQ0FBSyxJQUFBLENBQUssZUFBZSxDQUFBLENBQzdDUyxDQUFBQSxDQUFRLGNBQUEsRUFBZ0JULENBQUFBLENBQUssSUFBQSxDQUFLLG9CQUFvQixFQUN0RFMsQ0FBQUEsQ0FBUSxjQUFBLEVBQWdCVCxDQUFBQSxDQUFLLElBQUEsQ0FBSyxtQkFBbUIsQ0FBQSxDQUVsRG9DLEVBQUFBLENBQWUzQixDQUFBQSxDQUFTVCxDQUFBQSxDQUFNMEQsQ0FBVSxDQUNqRCxDQUVBLElBQU1RLENBQUFBLENBQUk1QyxHQUVWLGVBQXNCNkMsRUFBQUEsQ0FBSUYsQ0FBQUEsQ0FBZ0J4RCxDQUFBQSxDQUFrRCxDQUMxRmhCLENBQUFBLENBQU8sS0FBQSxDQUFNOEIsQ0FBQUEsQ0FBSyxLQUFBLENBQU8wQyxDQUFBQSxDQUFReEQsQ0FBTyxDQUFBLENBRXhDLEdBQU0sQ0FBRSxPQUFBckIsQ0FBTyxDQUFBLENBQUlxQixDQUFBQSxDQUNuQnJCLENBQUFBLEVBQVEsY0FBQSxFQUFlLENBRXZCLElBQU1nRixDQUFBQSxDQUFVM0QsQ0FBQUEsQ0FBUSxPQUFBLEVBQVd5RCxDQUFBQSxDQUFFLE9BQUEsQ0FDL0JHLENBQUFBLENBQTRCLENBQ2hDLEtBQUEsQ0FBTzVELENBQUFBLENBQVEsS0FBQSxFQUFTeUQsQ0FBQUEsQ0FBRSxLQUFBLENBQzFCLE1BQUEsQ0FBUXpELENBQUFBLENBQVEsTUFBQSxFQUFVeUQsQ0FBQUEsQ0FBRSxNQUFBLENBQzVCLEdBQUEsQ0FBS3pELENBQUFBLENBQVEsR0FBQSxFQUFPeUQsQ0FBQUEsQ0FBRSxHQUFBLENBQ3RCLFFBQUEsQ0FBVXpELEVBQVEsUUFBQSxFQUFZeUQsQ0FBQUEsQ0FBRSxRQUFBLENBQ2hDLFNBQUEsQ0FBV3pELENBQUFBLENBQVEsU0FBQSxFQUFheUQsQ0FBQUEsQ0FBRSxTQUFBLENBQ2xDLGFBQUEsQ0FBZXpELENBQUFBLENBQVEsYUFBQSxFQUFpQnlELENBQUFBLENBQUUsYUFBQSxDQUMxQyxhQUFBLENBQWV6RCxFQUFRLGFBQUEsRUFBaUJ5RCxDQUFBQSxDQUFFLGFBQUEsQ0FDMUMsVUFBQSxDQUFZekQsQ0FBQUEsQ0FBUSxVQUFBLEVBQWN5RCxDQUFBQSxDQUFFLFVBQUEsQ0FDcEMsY0FBQSxDQUFnQnpELENBQUFBLENBQVEsY0FBQSxFQUFrQnlELENBQUFBLENBQUUsY0FBQSxDQUM1QyxjQUFBLENBQWdCekQsRUFBUSxjQUFBLEVBQWtCeUQsQ0FBQUEsQ0FBRSxjQUFBLENBQzVDLE9BQUEsQ0FBQUUsQ0FDRixDQUFBLENBRU1FLENBQUFBLENBQVN6SCxJQUFBQSxDQUFLMEgsTUFBQUEsRUFBTyxDQUFHLEtBQUEsQ0FBT0MsVUFBQUEsRUFBWSxDQUFBLENBQ2pELE1BQU1DLEtBQUFBLENBQU1ILENBQUFBLENBQVEsQ0FBRSxTQUFBLENBQVcsSUFBSyxDQUFDLENBQUEsQ0FDdkMsSUFBTVosQ0FBQUEsQ0FBYTdHLElBQUFBLENBQUt5SCxDQUFBQSxDQUFRLFVBQVUsQ0FBQSxDQUVwQ0ksQ0FBQUEsQ0FBSyxXQUFBLENBQVksS0FBSSxDQUNyQkMsQ0FBQUEsQ0FBUUMsQ0FBQUEsR0FBZW5GLENBQUFBLENBQU8sSUFBQSxDQUFLOEIsQ0FBQUEsQ0FBSyxDQUFBLEVBQUcwQyxDQUFNLENBQUEsV0FBQSxFQUFjVyxDQUFDLENBQUEsQ0FBQSxDQUFHLENBQUEsQ0FBR25FLENBQUFBLENBQVEsVUFBQSxHQUFhbUUsQ0FBQyxDQUFBLENBQUEsQ0FFNUZqQixDQUFBQSxDQUFTLE1BQU1GLEVBQUFBLENBQWdCQyxDQUFVLENBQUEsQ0FDekNtQixDQUFBQSxDQUFTLE1BQU1iLEVBQUFBLENBQVVDLENBQUFBLENBQVEsQ0FBRSxHQUFHSSxDQUFBQSxDQUFZLE1BQUEsQ0FBQWpGLENBQU8sQ0FBQSxDQUFHc0UsQ0FBVSxDQUFBLENBRTVFdEUsQ0FBQUEsRUFBUSxnQkFBQSxDQUNOLE9BQUEsQ0FDQSxJQUFNLENBQ0pLLENBQUFBLENBQU8sS0FBQSxDQUFNOEIsQ0FBQUEsQ0FBSyxTQUFTLENBQUEsQ0FDM0JzRCxDQUFBQSxDQUFPLElBQUEsRUFBSyxDQUNaQyxNQUFBQSxDQUFPUixDQUFBQSxDQUFRLENBQUUsU0FBQSxDQUFXLElBQUEsQ0FBTSxLQUFBLENBQU8sSUFBSyxDQUFDLEVBQ2pELENBQUEsQ0FDQSxDQUFFLElBQUEsQ0FBTSxJQUFLLENBQ2YsRUFFQSxHQUFJLENBQ0YsSUFBTTNDLENBQUFBLENBQVMsSUFBSSxPQUFBLENBQXdCLE1BQU85QyxDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQUEsQ0FDbkUsTUFBTTZFLENBQUFBLENBQU8saUJBQUEsRUFBa0IsRUFDN0IsR0FBRyxPQUFBLENBQVMsSUFBTTdFLENBQUFBLENBQU8sSUFBSSxLQUFBLENBQU0sMkJBQTJCLENBQUMsQ0FBQyxDQUFBLENBQ2hFLEVBQUEsQ0FBRyxTQUFBLENBQVcsSUFBTU0sQ0FBQUEsRUFBUSxPQUFBLEVBQVdOLEVBQU9NLENBQUFBLENBQU8sTUFBTSxDQUFDLENBQUEsQ0FDNUQsRUFBQSxDQUFHLFVBQUEsQ0FBWXVGLENBQUksQ0FBQSxDQUNuQixFQUFBLENBQUcsTUFBQSxDQUFROUYsQ0FBTyxDQUFBLENBQ2xCLEVBQUEsQ0FBRyxPQUFBLENBQVNDLENBQU0sRUFDdkIsQ0FBQyxDQUFBLENBQUUsT0FBQSxDQUFRLElBQU02RSxDQUFBQSxDQUFPLEtBQUEsRUFBTyxDQUFBLENBQy9CZ0IsQ0FBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDTixJQUFNSSxDQUFBQSxDQUFVLE1BQU0sUUFBUSxJQUFBLENBQUssQ0FBQ3BELENBQUFBLENBQVFrRCxDQUFBQSxDQUFPLElBQUksQ0FBQyxDQUFBLENBQ3hELE9BQUFoQixFQUFBQSxDQUFHa0IsQ0FBQUEsQ0FBUyxxQkFBcUIsQ0FBQSxDQUNqQ0osQ0FBQUEsQ0FBSyxHQUFHLEVBQ1JsRixDQUFBQSxDQUFPLElBQUEsQ0FBSzhCLENBQUFBLENBQUssQ0FBQSxLQUFBLEVBQVE2QyxDQUFPLENBQUEsSUFBQSxFQUFPLElBQUEsQ0FBSyxLQUFBLENBQU0sV0FBQSxDQUFZLEdBQUEsRUFBSSxDQUFJTSxDQUFFLENBQUMsQ0FBQSxFQUFBLENBQUksRUFDdEUsQ0FBRSxHQUFHSyxDQUFBQSxDQUFTLE9BQUEsQ0FBU1YsQ0FBVyxDQUMzQyxDQUFBLE1BQVNXLENBQUFBLENBQUcsQ0FDVixNQUFBSCxDQUFBQSxDQUFPLElBQUEsRUFBSyxDQUNaekYsQ0FBQUEsRUFBUSxjQUFBLEVBQWUsQ0FDakI0RixDQUNSLENBQUEsT0FBRSxDQUNBRixNQUFBQSxDQUFPUixDQUFBQSxDQUFRLENBQUUsU0FBQSxDQUFXLElBQUEsQ0FBTSxLQUFBLENBQU8sSUFBSyxDQUFDLEVBQ2pELENBQ0YiLCJmaWxlIjoiY2h1bmstUVpIVkRCRFUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5leHBvcnQgdHlwZSBFbnZQYXJzZXI8VD4gPSAodmFsdWU6IHVua25vd24pID0+IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZTogVCk6IFQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VyKHByb2Nlc3MuZW52W25hbWVdKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHg6IHVua25vd24pOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHggPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICBjb25zdCBudW0gPSBOdW1iZXIoeCk7XG4gIGlmIChOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgJHt4fSBpcyBub3QgYSB2YWxpZCBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gbnVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHJpbmcoeDogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHg7XG4gIHJldHVybiBTdHJpbmcoeCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwZW52IH0gZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuY29uc3QgZW52ID0gcHJvY2Vzcy5lbnY7XG5cbmV4cG9ydCBjb25zdCBwdXBMb2dMZXZlbCA9IHBlbnYoXCJQVVBfTE9HX0xFVkVMXCIsIHBhcnNlTnVtYmVyLCAyKTtcbmV4cG9ydCBjb25zdCBwdXBVc2VJbm5lclByb3h5ID0gZW52W1wiUFVQX1VTRV9JTk5FUl9QUk9YWVwiXSA9PT0gXCIxXCI7XG5leHBvcnQgY29uc3QgcHVwRGlzYWJsZUdQVSA9IGVudltcIlBVUF9ESVNBQkxFX0dQVVwiXSA9PT0gXCIxXCI7XG5leHBvcnQgY29uc3QgcHVwRGlzYWJsZUh3Q29kZWMgPSBlbnZbXCJQVVBfRElTQUJMRV9IV19DT0RFQ1wiXSA9PT0gXCIxXCI7XG5leHBvcnQgY29uc3QgcHVwRGV0ZXJtaW5pc3RpYyA9IGVudltcIlBVUF9ERVRFUk1JTklTVElDXCJdID09PSBcIjFcIjtcblxuZXhwb3J0IGNvbnN0IHB1cFBrZ1Jvb3QgPSBkaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcInB1cC1yZWNvcmRlci9wYWNrYWdlLmpzb25cIikpO1xuZXhwb3J0IGNvbnN0IHB1cEFwcCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwiYXBwLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBJcGNTb2NrZXQgPSBlbnZbXCJQVVBfSVBDX1NPQ0tFVFwiXTtcblxuZXhwb3J0IGNvbnN0IHB1cFdpbmRvd1RvbGVyYW50ID0gZW52W1wiUFVQX1dJTkRPV19UT0xFUkFOVFwiXSA9PT0gXCIxXCI7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MsIHR5cGUgU2VyaWFsaXphYmxlIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6IEZ1bmN0aW9uLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyIHwgU2VyaWFsaXphYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwibWVzc2FnZVwiLCBkaXNwYXRjaClcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykgcmV0dXJuO1xuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSBsb2dnZXIuZXJyb3IobXNnKTtcbiAgZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIGxvZ2dlci53YXJuKG1zZyk7XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8Rm4gZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueSwgRD4oXG4gIGZuOiBGbixcbiAgZGVmYXVsdFZhbHVlOiBELFxuKTogKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rm4+KSA9PiBSZXR1cm5UeXBlPEZuPiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB0cmVlS2lsbCBmcm9tIFwidHJlZS1raWxsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xuICBraWxsKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBvcHRpb25zPzogU3Bhd25PcHRpb25zKTogUHJvY2Vzc0hhbmRsZSB7XG4gIGNvbnN0IHBhcnRzID0gY21kLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoKTtcbiAgY29uc3QgW2NvbW1hbmQsIC4uLmFyZ3NdID0gcGFydHM7XG4gIGlmICghY29tbWFuZCkgdGhyb3cgbmV3IEVycm9yKFwiZW1wdHkgY29tbWFuZFwiKTtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcHJvY2VzczogcHJvYyxcbiAgICB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpLFxuICAgIGtpbGwoKSB7XG4gICAgICBjb25zdCBwaWQgPSBwcm9jLnBpZDtcbiAgICAgIGlmIChwaWQpIHRyZWVLaWxsKHBpZCk7XG4gICAgICBlbHNlIHByb2Mua2lsbCgpO1xuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5pbXBvcnQge1xuICBwdXBEZXRlcm1pbmlzdGljLFxuICBwdXBEaXNhYmxlR1BVLFxuICBwdXBEaXNhYmxlSHdDb2RlYyxcbiAgcHVwVXNlSW5uZXJQcm94eSxcbiAgcHVwV2luZG93VG9sZXJhbnQsXG59IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRSA9IFwib3V0cHV0Lm1wNFwiO1xuXG5leHBvcnQgY29uc3QgUmVuZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogei5udW1iZXIoKS5kZXNjcmliZShcIkR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBdWRpbzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dEZpbGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJPdXRwdXQgbXA0IGZpbGUgcGF0aFwiKSxcbiAgdXNlSW5uZXJQcm94eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbiAgZGV0ZXJtaW5pc3RpYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZW5kZXIgYnkgZnJhbWUgcmF0aGVyIHRoYW4gcmVjb3JkaW5nXCIpLFxuICBkaXNhYmxlR3B1OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgR1BVIHJlbmRlcmluZywgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBidXQgaW5jcmVhc2Ugc3RhYmlsaXR5XCIpLFxuICBkaXNhYmxlSHdDb2RlYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIGhhcmR3YXJlIHZpZGVvIGVuY29kZXIgKE5WRU5DL1ZpZGVvVG9vbGJveCksIHVzZSBzb2Z0d2FyZSB4MjY1XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgUmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7XG4gIHdpZHRoOiBERUZBVUxUX1dJRFRILFxuICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxuICBmcHM6IERFRkFVTFRfRlBTLFxuICBkdXJhdGlvbjogREVGQVVMVF9EVVJBVElPTixcbiAgb3V0RmlsZTogREVGQVVMVF9PVVRfRklMRSxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogcHVwVXNlSW5uZXJQcm94eSxcbiAgZGV0ZXJtaW5pc3RpYzogcHVwRGV0ZXJtaW5pc3RpYyxcbiAgZGlzYWJsZUdwdTogcHVwRGlzYWJsZUdQVSxcbiAgZGlzYWJsZUh3Q29kZWM6IHB1cERpc2FibGVId0NvZGVjLFxuICB3aW5kb3dUb2xlcmFudDogcHVwV2luZG93VG9sZXJhbnQsXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0hXQWNjZWxdXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdEdQVURyaXZlcigpIHtcbiAgY29uc3QgaHcgPSBIYXJkd2FyZUNvbnRleHQuYXV0bygpO1xuICBjb25zdCByZXN1bHQgPSBodyAhPT0gbnVsbDtcbiAgaHc/LmRpc3Bvc2UoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IGNhbklVc2VHUFUgPSBkZXRlY3RHUFVEcml2ZXIoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHU6XCIsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY2FuSVVzZUdQVSB9IGZyb20gXCIuL2h3YWNjZWxcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNocm9taXVtT3B0aW9ucyhkaXNhYmxlR3B1OiBib29sZWFuKSB7XG4gIGNvbnN0IG9wdHMgPSBbXG4gICAgLy8g5a655Zmo5rKZ566xXG4gICAgXCJuby1zYW5kYm94XCIsXG4gICAgXCJkaXNhYmxlLWRldi1zaG0tdXNhZ2VcIixcbiAgICAvLyDot6jln58v5a6J5YWoXG4gICAgXCJkaXNhYmxlLXdlYi1zZWN1cml0eVwiLFxuICAgIFwiZGlzYWJsZS1zaXRlLWlzb2xhdGlvbi10cmlhbHNcIixcbiAgICBcImlnbm9yZS1jZXJ0aWZpY2F0ZS1lcnJvcnNcIixcbiAgICAvLyDlvZXliLbooYzkuLpcbiAgICBcImRpc2FibGUtYmxpbmstZmVhdHVyZXM9QXV0b21hdGlvbkNvbnRyb2xsZWRcIixcbiAgICBcIm11dGUtYXVkaW9cIixcbiAgICBcImF1dG9wbGF5LXBvbGljeT1uby11c2VyLWdlc3R1cmUtcmVxdWlyZWRcIixcbiAgICBcImRpc2FibGUtZXh0ZW5zaW9uc1wiLFxuICAgIC8vIOa4suafk1xuICAgIFwiZm9yY2UtZGV2aWNlLXNjYWxlLWZhY3Rvcj0xXCIsXG4gICAgXCJmb3JjZS1jb2xvci1wcm9maWxlPXNyZ2JcIixcbiAgICBcImlnbm9yZS1ncHUtYmxvY2tsaXN0XCIsXG4gICAgXCJ1c2UtZ2w9YW5nbGVcIixcbiAgICBcImRldGVybWluaXN0aWMtbW9kZVwiLFxuICAgIFwiZW5hYmxlLWJlZ2luLWZyYW1lLWNvbnRyb2xcIixcbiAgICBcImRpc2FibGUtbmV3LWNvbnRlbnQtcmVuZGVyaW5nLXRpbWVvdXRcIixcbiAgICBcInJ1bi1hbGwtY29tcG9zaXRvci1zdGFnZXMtYmVmb3JlLWRyYXdcIixcbiAgICBcImRpc2FibGUtdGhyZWFkZWQtYW5pbWF0aW9uXCIsXG4gICAgXCJkaXNhYmxlLXRocmVhZGVkLXNjcm9sbGluZ1wiLFxuICAgIFwiZGlzYWJsZS1jaGVja2VyLWltYWdpbmdcIixcbiAgICBcImRpc2FibGUtaW1hZ2UtYW5pbWF0aW9uLXJlc3luY1wiLFxuICAgIFwiZW5hYmxlLXN1cmZhY2Utc3luY2hyb25pemF0aW9uXCIsXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3B1cHBldGVlci9wdXBwZXRlZXIvaXNzdWVzLzI0MTBcbiAgICBcImZvbnQtcmVuZGVyLWhpbnRpbmc9bm9uZVwiLFxuICAgIC8vIOi1hOa6kOaOp+WItlxuICAgIFwiZGlzYWJsZS1iYWNrZ3JvdW5kLW5ldHdvcmtpbmdcIixcbiAgICBcImpzLWZsYWdzPS0tbWF4LW9sZC1zcGFjZS1zaXplPTUxMlwiLFxuICAgIFwicmVuZGVyZXItcHJvY2Vzcy1saW1pdD0xXCIsXG4gICAgXCJudW0tcmFzdGVyLXRocmVhZHM9MVwiLFxuICAgIFwiZGlzYWJsZS1iYWNrZ3JvdW5kLXRpbWVyLXRocm90dGxpbmdcIixcbiAgICBcImRpc2FibGUtcmVuZGVyZXItYmFja2dyb3VuZGluZ1wiLFxuICAgIFwiZGlzYWJsZS1iYWNrZ3JvdW5kaW5nLW9jY2x1ZGVkLXdpbmRvd3NcIixcbiAgXTtcblxuICBpZiAocHVwTG9nTGV2ZWwgPCAzKSB7XG4gICAgb3B0cy5wdXNoKFwibG9nLWxldmVsPTNcIik7XG4gIH1cblxuICBjb25zdCBmZWF0dXJlcyA9IFtcIkZvbnRhdGlvbkJhY2tlbmRcIl07XG4gIGNvbnN0IGVuYWJsZUdwdSA9IChhd2FpdCBjYW5JVXNlR1BVKSAmJiAhZGlzYWJsZUdwdTtcbiAgaWYgKCFlbmFibGVHcHUpIHtcbiAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9c3dpZnRzaGFkZXJcIiwgXCJlbmFibGUtdW5zYWZlLXN3aWZ0c2hhZGVyXCIpO1xuICB9IGVsc2Uge1xuICAgIG9wdHMucHVzaChcImRpc2FibGUtZ3B1LXNhbmRib3hcIiwgXCJlbmFibGUtdW5zYWZlLXdlYmdwdVwiKTtcbiAgICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcbiAgICBpZiAocGxhdCA9PT0gXCJkYXJ3aW5cIikge1xuICAgICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPW1ldGFsXCIpO1xuICAgIH0gZWxzZSBpZiAocGxhdCA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9ZDNkMTFcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdHMucHVzaChcInVzZS1hbmdsZT12dWxrYW5cIiwgXCJkaXNhYmxlLXZ1bGthbi1zdXJmYWNlXCIpO1xuICAgICAgZmVhdHVyZXMucHVzaChcIlZ1bGthblwiKTtcbiAgICB9XG4gIH1cblxuICBvcHRzLnB1c2goYGVuYWJsZS1mZWF0dXJlcz0ke2ZlYXR1cmVzLmpvaW4oXCIsXCIpfWApO1xuICByZXR1cm4gb3B0cztcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmltcG9ydCBlbGVjdHJvbiwgeyB0eXBlIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBjaHJvbWl1bU9wdGlvbnMgfSBmcm9tIFwiLi4vYmFzZS9jaHJvbWl1bVwiO1xuaW1wb3J0IHsgcHVwQXBwIH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBleGVjLCBQVVBfQVJHU19LRVkgfSBmcm9tIFwiLi4vYmFzZS9wcm9jZXNzXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbGVjdHJvbk9wdHMoZGlzYWJsZUdwdTogYm9vbGVhbikge1xuICByZXR1cm4gWy4uLihhd2FpdCBjaHJvbWl1bU9wdGlvbnMoZGlzYWJsZUdwdSkpLCBcImhlYWRsZXNzPW5ld1wiXTtcbn1cblxuY29uc3QgVEFHID0gXCJbRWxlY3Ryb25dXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5FbGVjdHJvbkFwcChzaXplOiBTaXplLCBhcmdzOiB1bmtub3duW10sIGlwY1NvY2tldFBhdGg6IHN0cmluZykge1xuICBjb25zdCBjbWRQYXJ0czogdW5rbm93bltdID0gW107XG4gIGNvbnN0IHBsYXQgPSBwbGF0Zm9ybSgpO1xuICBpZiAocGxhdCA9PT0gXCJsaW51eFwiKSB7XG4gICAgY21kUGFydHMucHVzaChgeHZmYi1ydW5gLCBgLS1hdXRvLXNlcnZlcm51bWAsIGAtLXNlcnZlci1hcmdzPVwiLXNjcmVlbiAwICR7c2l6ZS53aWR0aH14JHtzaXplLmhlaWdodH14MjRcImApO1xuICB9XG4gIGNvbnN0IG9wdHMgPSBhd2FpdCBlbGVjdHJvbk9wdHMoYXJncy5pbmNsdWRlcyhcIi0tZGlzYWJsZS1ncHVcIikpO1xuICBjb25zdCBlbGVjdHJvbkFyZ3MgPSBvcHRzLm1hcCgoYSkgPT4gYC0tJHthfWApO1xuICBjb25zdCBiYXNlNjRBcmdzID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoYXJncykpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICBlbGVjdHJvbkFyZ3MucHVzaChgJHtQVVBfQVJHU19LRVl9PSR7YmFzZTY0QXJnc31gKTtcbiAgY21kUGFydHMucHVzaChlbGVjdHJvbiwgLi4uZWxlY3Ryb25BcmdzLCBwdXBBcHApO1xuICBjb25zdCBjbWQgPSBjbWRQYXJ0cy5qb2luKFwiIFwiKTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgY21kKTtcbiAgcmV0dXJuIGV4ZWMoY21kLCB7XG4gICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgIHNoZWxsOiBwbGF0ID09PSBcImxpbnV4XCIsXG4gICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCBSVVNUX0JBQ0tUUkFDRTogXCJmdWxsXCIsIFBVUF9JUENfU09DS0VUOiBpcGNTb2NrZXRQYXRoIH0sXG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgY3JlYXRlQ29ubmVjdGlvbiwgY3JlYXRlU2VydmVyLCB0eXBlIFNvY2tldCB9IGZyb20gXCJuZXRcIjtcblxuY29uc3QgSEVBREVSX1NJWkUgPSA4O1xuXG5leHBvcnQgY29uc3QgZW51bSBJcGNNc2dUeXBlIHtcbiAgUFJPR1JFU1MgPSAxLFxuICBET05FID0gMixcbiAgRVJST1IgPSAzLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY0RvbmVQYXlsb2FkIHtcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIElwY1dyaXRlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3NvY2tldDogU29ja2V0KSB7fVxuXG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMud3JpdGUoSXBjTXNnVHlwZS5QUk9HUkVTUywgQnVmZmVyLmZyb20oYCR7dmFsdWV9YCkpO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKSB7XG4gICAgdGhpcy53cml0ZShJcGNNc2dUeXBlLkVSUk9SLCBCdWZmZXIuZnJvbShlcnJvcikpO1xuICAgIHRoaXMuX3NvY2tldC5lbmQoKTtcbiAgfVxuXG4gIHdyaXRlRG9uZShwYXlsb2FkOiBJcGNEb25lUGF5bG9hZCk6IHZvaWQge1xuICAgIHRoaXMud3JpdGUoSXBjTXNnVHlwZS5ET05FLCBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShwYXlsb2FkKSkpO1xuICAgIHRoaXMuX3NvY2tldC5lbmQoKTtcbiAgfVxuXG4gIHByaXZhdGUgd3JpdGUodHlwZTogSXBjTXNnVHlwZSwgcGF5bG9hZDogQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgaGVhZGVyID0gQnVmZmVyLmFsbG9jKEhFQURFUl9TSVpFKTtcbiAgICBoZWFkZXIud3JpdGVVSW50MzJMRSh0eXBlLCAwKTtcbiAgICBoZWFkZXIud3JpdGVVSW50MzJMRShwYXlsb2FkLmJ5dGVMZW5ndGgsIDQpO1xuICAgIHRoaXMuX3NvY2tldC53cml0ZShoZWFkZXIpO1xuICAgIHRoaXMuX3NvY2tldC53cml0ZShwYXlsb2FkKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdElwYyhzb2NrZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElwY1dyaXRlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNvY2tldCA9IGNyZWF0ZUNvbm5lY3Rpb24oc29ja2V0UGF0aCk7XG4gICAgc29ja2V0Lm9uY2UoXCJjb25uZWN0XCIsICgpID0+IHJlc29sdmUobmV3IElwY1dyaXRlcihzb2NrZXQpKSk7XG4gICAgc29ja2V0Lm9uY2UoXCJlcnJvclwiLCByZWplY3QpO1xuICB9KTtcbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjx7XG4gIHByb2dyZXNzOiBbdmFsdWU6IG51bWJlcl07XG4gIG1lc3NhZ2U6IFt0eXBlOiBJcGNNc2dUeXBlLCBidWZmZXI6IEJ1ZmZlcl07XG4gIGRvbmU6IFtwYXlsb2FkOiBJcGNEb25lUGF5bG9hZF07XG4gIGVycm9yOiBbZXJyb3I6IEVycm9yXTtcbiAgY2xvc2U6IFtdO1xufT4ge1xuICBwcml2YXRlIF9jaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIHByaXZhdGUgX2J1ZmZlcmVkID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9zb2NrZXQ6IFNvY2tldCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fc29ja2V0Lm9uKFwiZGF0YVwiLCAoZGF0YSkgPT4gdGhpcy5vbkRhdGEoZGF0YSkpO1xuICAgIHRoaXMuX3NvY2tldC5vbihcImVycm9yXCIsIChlcnIpID0+IHRoaXMuZW1pdChcImVycm9yXCIsIGVycikpO1xuICAgIHRoaXMuX3NvY2tldC5vbihcImNsb3NlXCIsICgpID0+IHRoaXMuZW1pdChcImNsb3NlXCIpKTtcbiAgfVxuXG4gIHByaXZhdGUgb25EYXRhKGRhdGE6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX2NodW5rcy5wdXNoKGRhdGEpO1xuICAgIHRoaXMuX2J1ZmZlcmVkICs9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICB0aGlzLmZsdXNoKCk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoKCk6IHZvaWQge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGlmICh0aGlzLl9idWZmZXJlZCA8IEhFQURFUl9TSVpFKSByZXR1cm47XG4gICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnBlZWsoSEVBREVSX1NJWkUpO1xuICAgICAgY29uc3QgdHlwZSA9IGhlYWRlci5yZWFkVUludDMyTEUoMCkgYXMgSXBjTXNnVHlwZTtcbiAgICAgIGNvbnN0IGxlbiA9IGhlYWRlci5yZWFkVUludDMyTEUoNCk7XG4gICAgICBpZiAodGhpcy5fYnVmZmVyZWQgPCBIRUFERVJfU0laRSArIGxlbikgcmV0dXJuO1xuICAgICAgdGhpcy5jb25zdW1lKEhFQURFUl9TSVpFKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmNvbnN1bWUobGVuKTtcbiAgICAgIHRoaXMuZW1pdChcIm1lc3NhZ2VcIiwgdHlwZSwgcGF5bG9hZCk7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLlBST0dSRVNTOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIiwgTnVtYmVyKHBheWxvYWQudG9TdHJpbmcoKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5ET05FOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBKU09OLnBhcnNlKHBheWxvYWQudG9TdHJpbmcoKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5FUlJPUjoge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihwYXlsb2FkLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGVlayhuOiBudW1iZXIpOiBCdWZmZXIge1xuICAgIGlmICh0aGlzLl9jaHVua3NbMF0gJiYgdGhpcy5fY2h1bmtzWzBdLmJ5dGVMZW5ndGggPj0gbikgcmV0dXJuIHRoaXMuX2NodW5rc1swXTtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdCh0aGlzLl9jaHVua3MpLnN1YmFycmF5KDAsIG4pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdW1lKG46IG51bWJlcik6IEJ1ZmZlciB7XG4gICAgY29uc3Qgb3V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIHdoaWxlIChvZmZzZXQgPCBuKSB7XG4gICAgICBjb25zdCBjaHVuayA9IHRoaXMuX2NodW5rc1swXSE7XG4gICAgICBjb25zdCB0YWtlID0gTWF0aC5taW4oY2h1bmsuYnl0ZUxlbmd0aCwgbiAtIG9mZnNldCk7XG4gICAgICBjaHVuay5jb3B5KG91dCwgb2Zmc2V0LCAwLCB0YWtlKTtcbiAgICAgIGlmICh0YWtlID09PSBjaHVuay5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2NodW5rcy5zaGlmdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY2h1bmtzWzBdID0gY2h1bmsuc3ViYXJyYXkodGFrZSk7XG4gICAgICB9XG4gICAgICBvZmZzZXQgKz0gdGFrZTtcbiAgICB9XG4gICAgdGhpcy5fYnVmZmVyZWQgLT0gbjtcbiAgICByZXR1cm4gb3V0O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjU2VydmVyIHtcbiAgd2FpdEZvckNvbm5lY3Rpb24oKTogUHJvbWlzZTxJcGNSZWFkZXI+O1xuICBjbG9zZSgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSXBjU2VydmVyKHNvY2tldFBhdGg6IHN0cmluZyk6IFByb21pc2U8SXBjU2VydmVyPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gY3JlYXRlU2VydmVyKCk7XG4gICAgc2VydmVyLm9uY2UoXCJlcnJvclwiLCByZWplY3QpO1xuICAgIHNlcnZlci5saXN0ZW4oc29ja2V0UGF0aCwgKCkgPT4ge1xuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIHdhaXRGb3JDb25uZWN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJcGNSZWFkZXI+KChvaywgbm8pID0+IHtcbiAgICAgICAgICAgIHNlcnZlci5vbmNlKFwiY29ubmVjdGlvblwiLCAoc29ja2V0KSA9PiBvayhuZXcgSXBjUmVhZGVyKHNvY2tldCkpKTtcbiAgICAgICAgICAgIHNlcnZlci5vbmNlKFwiZXJyb3JcIiwgbm8pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBjbG9zZSgpIHtcbiAgICAgICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IHJtU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgbWtkaXIgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHJ1bkVsZWN0cm9uQXBwIH0gZnJvbSBcIi4vcmVuZGVyZXIvZWxlY3Ryb25cIjtcbmltcG9ydCB7IGNyZWF0ZUlwY1NlcnZlciwgdHlwZSBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL3JlbmRlcmVyL2lwY1wiO1xuaW1wb3J0IHsgZGVmYXVsdFJlbmRlck9wdGlvbnMsIHR5cGUgUmVuZGVyT3B0aW9ucywgdHlwZSBSZW5kZXJSZXN1bHQgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbcHVwXVwiO1xuXG5leHBvcnQgdHlwZSBQdXBQcm9ncmVzc0NhbGxiYWNrID0gKHByb2dyZXNzOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB1cE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPFJlbmRlck9wdGlvbnM+IHtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M/OiBQdXBQcm9ncmVzc0NhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB1cFJlc3VsdCBleHRlbmRzIFJlbmRlclJlc3VsdCB7fVxuXG5pbnRlcmZhY2UgQXBwT3B0aW9ucyBleHRlbmRzIFJlbmRlck9wdGlvbnMge1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuUHVwQXBwKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBBcHBPcHRpb25zLCBzb2NrZXRQYXRoOiBzdHJpbmcpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgYHJ1blB1cEFwcGAsIHNvdXJjZSwgb3B0aW9ucyk7XG5cbiAgY29uc3QgYXJnczogc3RyaW5nW10gPSBbXG4gICAgc291cmNlLFxuICAgIGAtLXdpZHRoYCxcbiAgICBgJHtvcHRpb25zLndpZHRofWAsXG4gICAgYC0taGVpZ2h0YCxcbiAgICBgJHtvcHRpb25zLmhlaWdodH1gLFxuICAgIGAtLWZwc2AsXG4gICAgYCR7b3B0aW9ucy5mcHN9YCxcbiAgICBgLS1kdXJhdGlvbmAsXG4gICAgYCR7b3B0aW9ucy5kdXJhdGlvbn1gLFxuICAgIGAtLW91dC1maWxlYCxcbiAgICBgJHtvcHRpb25zLm91dEZpbGV9YCxcbiAgXTtcbiAgaWYgKG9wdGlvbnMud2l0aEF1ZGlvKSBhcmdzLnB1c2goYC0td2l0aC1hdWRpb2ApO1xuICBpZiAob3B0aW9ucy51c2VJbm5lclByb3h5KSBhcmdzLnB1c2goYC0tdXNlLWlubmVyLXByb3h5YCk7XG4gIGlmIChvcHRpb25zLmRldGVybWluaXN0aWMpIGFyZ3MucHVzaChgLS1kZXRlcm1pbmlzdGljYCk7XG4gIGlmIChvcHRpb25zLmRpc2FibGVHcHUpIGFyZ3MucHVzaChgLS1kaXNhYmxlLWdwdWApO1xuICBpZiAob3B0aW9ucy5kaXNhYmxlSHdDb2RlYykgYXJncy5wdXNoKGAtLWRpc2FibGUtaHctY29kZWNgKTtcbiAgaWYgKG9wdGlvbnMud2luZG93VG9sZXJhbnQpIGFyZ3MucHVzaChgLS13aW5kb3ctdG9sZXJhbnRgKTtcblxuICByZXR1cm4gcnVuRWxlY3Ryb25BcHAob3B0aW9ucywgYXJncywgc29ja2V0UGF0aCk7XG59XG5cbmNvbnN0IGQgPSBkZWZhdWx0UmVuZGVyT3B0aW9ucztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1cChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUGFydGlhbDxQdXBPcHRpb25zPik6IFByb21pc2U8UHVwUmVzdWx0PiB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIGBwdXBgLCBzb3VyY2UsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IHsgc2lnbmFsIH0gPSBvcHRpb25zO1xuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgY29uc3Qgb3V0RmlsZSA9IG9wdGlvbnMub3V0RmlsZSA/PyBkLm91dEZpbGU7XG4gIGNvbnN0IHJlbmRlck9wdHM6IFJlbmRlck9wdGlvbnMgPSB7XG4gICAgd2lkdGg6IG9wdGlvbnMud2lkdGggPz8gZC53aWR0aCxcbiAgICBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0ID8/IGQuaGVpZ2h0LFxuICAgIGZwczogb3B0aW9ucy5mcHMgPz8gZC5mcHMsXG4gICAgZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24gPz8gZC5kdXJhdGlvbixcbiAgICB3aXRoQXVkaW86IG9wdGlvbnMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgIHVzZUlubmVyUHJveHk6IG9wdGlvbnMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgZGV0ZXJtaW5pc3RpYzogb3B0aW9ucy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICBkaXNhYmxlR3B1OiBvcHRpb25zLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgIGRpc2FibGVId0NvZGVjOiBvcHRpb25zLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgd2luZG93VG9sZXJhbnQ6IG9wdGlvbnMud2luZG93VG9sZXJhbnQgPz8gZC53aW5kb3dUb2xlcmFudCxcbiAgICBvdXRGaWxlLFxuICB9O1xuXG4gIGNvbnN0IHRtcERpciA9IGpvaW4odG1wZGlyKCksIFwicHVwXCIsIHJhbmRvbVVVSUQoKSk7XG4gIGF3YWl0IG1rZGlyKHRtcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IHNvY2tldFBhdGggPSBqb2luKHRtcERpciwgXCJwdXAuc29ja1wiKTtcblxuICBjb25zdCB0MCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCB0aWNrID0gKHA6IG51bWJlcikgPT4gKGxvZ2dlci5pbmZvKFRBRywgYCR7c291cmNlfSBwcm9ncmVzczogJHtwfSVgKSwgb3B0aW9ucy5vblByb2dyZXNzPy4ocCkpO1xuXG4gIGNvbnN0IHNlcnZlciA9IGF3YWl0IGNyZWF0ZUlwY1NlcnZlcihzb2NrZXRQYXRoKTtcbiAgY29uc3QgaGFuZGxlID0gYXdhaXQgcnVuUHVwQXBwKHNvdXJjZSwgeyAuLi5yZW5kZXJPcHRzLCBzaWduYWwgfSwgc29ja2V0UGF0aCk7XG5cbiAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFxuICAgIFwiYWJvcnRcIixcbiAgICAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBgYWJvcnRlZGApO1xuICAgICAgaGFuZGxlLmtpbGwoKTtcbiAgICAgIHJtU3luYyh0bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9LFxuICAgIHsgb25jZTogdHJ1ZSB9LFxuICApO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIChhd2FpdCBzZXJ2ZXIud2FpdEZvckNvbm5lY3Rpb24oKSlcbiAgICAgICAgLm9uKFwiY2xvc2VcIiwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcIklQQyBjbG9zZWQgd2l0aG91dCByZXN1bHRcIikpKVxuICAgICAgICAub24oXCJtZXNzYWdlXCIsICgpID0+IHNpZ25hbD8uYWJvcnRlZCAmJiByZWplY3Qoc2lnbmFsLnJlYXNvbikpXG4gICAgICAgIC5vbihcInByb2dyZXNzXCIsIHRpY2spXG4gICAgICAgIC5vbihcImRvbmVcIiwgcmVzb2x2ZSlcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICB9KS5maW5hbGx5KCgpID0+IHNlcnZlci5jbG9zZSgpKTtcbiAgICB0aWNrKDApO1xuICAgIGNvbnN0IHN1bW1hcnkgPSBhd2FpdCBQcm9taXNlLnJhY2UoW3Jlc3VsdCwgaGFuZGxlLndhaXRdKTtcbiAgICBvayhzdW1tYXJ5LCBcIm5vIHN1bW1hcnkgcmVjZWl2ZWRcIik7XG4gICAgdGljaygxMDApO1xuICAgIGxvZ2dlci5pbmZvKFRBRywgYGRvbmUgJHtvdXRGaWxlfSBpbiAke01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkgLSB0MCl9bXNgKTtcbiAgICByZXR1cm4geyAuLi5zdW1tYXJ5LCBvcHRpb25zOiByZW5kZXJPcHRzIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGUua2lsbCgpO1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICB0aHJvdyBlO1xuICB9IGZpbmFsbHkge1xuICAgIHJtU3luYyh0bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuIl19
|
package/dist/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'source-map-support/register.js';import {z,q,d,p,s,A,B}from'./chunk-
|
|
1
|
+
import'source-map-support/register.js';import {z,q,d,p,s,A,B}from'./chunk-QZHVDBDU.js';import {program}from'commander';async function m(n){let e=z.shape,i=n.defaults;program.name(n.name).argument("<source>","file://, http(s)://, or data: URI").option("-W, --width <number>",e.width.description,`${i.width}`).option("-H, --height <number>",e.height.description,`${i.height}`).option("-f, --fps <number>",e.fps.description,`${i.fps}`).option("-t, --duration <number>",e.duration.description,`${i.duration}`).option("-o, --out-file <path>",e.outFile.description,i.outFile).option("-a, --with-audio",e.withAudio.description,i.withAudio).option("-d, --deterministic",e.deterministic.description,i.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,i.useInnerProxy).option("--disable-gpu",e.disableGpu.description,i.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,i.disableHwCodec).option("--window-tolerant",e.windowTolerant.description,i.windowTolerant).action(async(t,o)=>{try{await n.run(t,{width:q(d,i.width)(o.width),height:q(d,i.height)(o.height),fps:q(d,i.fps)(o.fps),duration:q(d,i.duration)(o.duration),outFile:o.outFile??i.outFile,withAudio:o.withAudio??i.withAudio,useInnerProxy:o.useInnerProxy??i.useInnerProxy,deterministic:o.deterministic??i.deterministic,disableGpu:o.disableGpu??i.disableGpu,disableHwCodec:o.disableHwCodec??i.disableHwCodec,windowTolerant:o.windowTolerant??i.windowTolerant});}catch(w){p.fatal(w);}}),await program.parseAsync(s());}m({name:"pup",defaults:A,run:async(n,e)=>{let i=new AbortController,t=0;process.once("SIGTERM",()=>(t=143,i.abort())),process.once("SIGINT",()=>(t=130,i.abort())),process.once("exit",o=>(t=o,i.abort()));try{await B(n,{...e,signal:i.signal});}finally{t&&process.exit(t);}}});//# sourceMappingURL=cli.js.map
|
|
2
2
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvY2xpLnRzIl0sIm5hbWVzIjpbIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJSZW5kZXJTY2hlbWEiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJub2VyciIsInBhcnNlTnVtYmVyIiwiZSIsImxvZ2dlciIsInBhcmdzIiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJjdHJsIiwiZXhpdENvZGUiLCJjIiwicHVwIl0sIm1hcHBpbmdzIjoidUhBZUEsZUFBc0JBLEVBQVFDLENBQUFBLENBQXFCLENBQ2pELElBQU1DLENBQUFBLENBQVFDLENBQUFBLENBQWEsS0FBQSxDQUNyQkMsQ0FBQUEsQ0FBSUgsQ0FBQUEsQ0FBUSxTQUNsQkksT0FBQUEsQ0FDRyxJQUFBLENBQUtKLENBQUFBLENBQVEsSUFBSSxDQUFBLENBQ2pCLFFBQUEsQ0FBUyxVQUFBLENBQVksbUNBQW1DLEVBQ3hELE1BQUEsQ0FBTyxzQkFBQSxDQUF3QkMsQ0FBQUEsQ0FBTSxLQUFBLENBQU0sV0FBQSxDQUFhLENBQUEsRUFBR0UsQ0FBQUEsQ0FBRSxLQUFLLEVBQUUsQ0FBQSxDQUNwRSxNQUFBLENBQU8sdUJBQUEsQ0FBeUJGLENBQUFBLENBQU0sTUFBQSxDQUFPLFdBQUEsQ0FBYSxDQUFBLEVBQUdFLENBQUFBLENBQUUsTUFBTSxDQUFBLENBQUUsQ0FBQSxDQUN2RSxNQUFBLENBQU8sb0JBQUEsQ0FBc0JGLENBQUFBLENBQU0sR0FBQSxDQUFJLFdBQUEsQ0FBYSxDQUFBLEVBQUdFLEVBQUUsR0FBRyxDQUFBLENBQUUsQ0FBQSxDQUM5RCxNQUFBLENBQU8seUJBQUEsQ0FBMkJGLENBQUFBLENBQU0sUUFBQSxDQUFTLFdBQUEsQ0FBYSxHQUFHRSxDQUFBQSxDQUFFLFFBQVEsQ0FBQSxDQUFFLENBQUEsQ0FDN0UsT0FBTyx1QkFBQSxDQUF5QkYsQ0FBQUEsQ0FBTSxPQUFBLENBQVEsV0FBQSxDQUFhRSxFQUFFLE9BQU8sQ0FBQSxDQUNw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Q0FDMUQsR0FBSSxDQUNGLE1BQU1HLENBQUFBLENBQUlYLENBQUFBLENBQVEsQ0FBRSxHQUFHTCxDQUFBQSxDQUFTLE1BQUEsQ0FBUWEsQ0FBQUEsQ0FBSyxNQUFPLENBQUMsRUFDdkQsQ0FBQSxPQUFFLENBQ0FDLENBQUFBLEVBQVksUUFBUSxJQUFBLENBQUtBLENBQVEsRUFDbkMsQ0FDRixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJjbGkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBub2VyciB9IGZyb20gXCIuL2Jhc2Uvbm9lcnJcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vYmFzZS9wYXJzZXJcIjtcbmltcG9ydCB7IHBhcmdzIH0gZnJvbSBcIi4vYmFzZS9wcm9jZXNzXCI7XG5pbXBvcnQgeyBSZW5kZXJTY2hlbWEsIHR5cGUgUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENMSU9wdGlvbnMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlZmF1bHRzOiBSZW5kZXJPcHRpb25zO1xuICBydW46IChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUmVuZGVyT3B0aW9ucykgPT4gUHJvbWlzZTx1bmtub3duPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ha2VDTEkob3B0aW9uczogQ0xJT3B0aW9ucykge1xuICBjb25zdCBzaGFwZSA9IFJlbmRlclNjaGVtYS5zaGFwZTtcbiAgY29uc3QgZCA9IG9wdGlvbnMuZGVmYXVsdHM7XG4gIHByb2dyYW1cbiAgICAubmFtZShvcHRpb25zLm5hbWUpXG4gICAgLmFyZ3VtZW50KFwiPHNvdXJjZT5cIiwgXCJmaWxlOi8vLCBodHRwKHMpOi8vLCBvciBkYXRhOiBVUklcIilcbiAgICAub3B0aW9uKFwiLVcsIC0td2lkdGggPG51bWJlcj5cIiwgc2hhcGUud2lkdGguZGVzY3JpcHRpb24sIGAke2Qud2lkdGh9YClcbiAgICAub3B0aW9uKFwiLUgsIC0taGVpZ2h0IDxudW1iZXI+XCIsIHNoYXBlLmhlaWdodC5kZXNjcmlwdGlvbiwgYCR7ZC5oZWlnaHR9YClcbiAgICAub3B0aW9uKFwiLWYsIC0tZnBzIDxudW1iZXI+XCIsIHNoYXBlLmZwcy5kZXNjcmlwdGlvbiwgYCR7ZC5mcHN9YClcbiAgICAub3B0aW9uKFwiLXQsIC0tZHVyYXRpb24gPG51bWJlcj5cIiwgc2hhcGUuZHVyYXRpb24uZGVzY3JpcHRpb24sIGAke2QuZHVyYXRpb259YClcbiAgICAub3B0aW9uKFwiLW8sIC0tb3V0LWZpbGUgPHBhdGg+XCIsIHNoYXBlLm91dEZpbGUuZGVzY3JpcHRpb24sIGQub3V0RmlsZSlcbiAgICAub3B0aW9uKFwiLWEsIC0td2l0aC1hdWRpb1wiLCBzaGFwZS53aXRoQXVkaW8uZGVzY3JpcHRpb24sIGQud2l0aEF1ZGlvKVxuICAgIC5vcHRpb24oXCItZCwgLS1kZXRlcm1pbmlzdGljXCIsIHNoYXBlLmRldGVybWluaXN0aWMuZGVzY3JpcHRpb24sIGQuZGV0ZXJtaW5pc3RpYylcbiAgICAub3B0aW9uKFwiLS11c2UtaW5uZXItcHJveHlcIiwgc2hhcGUudXNlSW5uZXJQcm94eS5kZXNjcmlwdGlvbiwgZC51c2VJbm5lclByb3h5KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtZ3B1XCIsIHNoYXBlLmRpc2FibGVHcHUuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUdwdSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWh3LWNvZGVjXCIsIHNoYXBlLmRpc2FibGVId0NvZGVjLmRlc2NyaXB0aW9uLCBkLmRpc2FibGVId0NvZGVjKVxuICAgIC5vcHRpb24oXCItLXdpbmRvdy10b2xlcmFudFwiLCBzaGFwZS53aW5kb3dUb2xlcmFudC5kZXNjcmlwdGlvbiwgZC53aW5kb3dUb2xlcmFudClcbiAgICAuYWN0aW9uKGFzeW5jIChzb3VyY2U6IHN0cmluZywgb3B0cykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgb3B0aW9ucy5ydW4oc291cmNlLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlOiBvcHRzLm91dEZpbGUgPz8gZC5vdXRGaWxlLFxuICAgICAgICAgIHdpdGhBdWRpbzogb3B0cy53aXRoQXVkaW8gPz8gZC53aXRoQXVkaW8sXG4gICAgICAgICAgdXNlSW5uZXJQcm94eTogb3B0cy51c2VJbm5lclByb3h5ID8/IGQudXNlSW5uZXJQcm94eSxcbiAgICAgICAgICBkZXRlcm1pbmlzdGljOiBvcHRzLmRldGVybWluaXN0aWMgPz8gZC5kZXRlcm1pbmlzdGljLFxuICAgICAgICAgIGRpc2FibGVHcHU6IG9wdHMuZGlzYWJsZUdwdSA/PyBkLmRpc2FibGVHcHUsXG4gICAgICAgICAgZGlzYWJsZUh3Q29kZWM6IG9wdHMuZGlzYWJsZUh3Q29kZWMgPz8gZC5kaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgICB3aW5kb3dUb2xlcmFudDogb3B0cy53aW5kb3dUb2xlcmFudCA/PyBkLndpbmRvd1RvbGVyYW50LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmZhdGFsKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocGFyZ3MoKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyBwdXAgfSBmcm9tIFwiLi9wdXBcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vcmVuZGVyZXIvc2NoZW1hXCI7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcInB1cFwiLFxuICBkZWZhdWx0czogZGVmYXVsdFJlbmRlck9wdGlvbnMsXG4gIHJ1bjogYXN5bmMgKHNvdXJjZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgbGV0IGV4aXRDb2RlID0gMDtcbiAgICBwcm9jZXNzLm9uY2UoXCJTSUdURVJNXCIsICgpID0+ICgoZXhpdENvZGUgPSAxNDMpLCBjdHJsLmFib3J0KCkpKTtcbiAgICBwcm9jZXNzLm9uY2UoXCJTSUdJTlRcIiwgKCkgPT4gKChleGl0Q29kZSA9IDEzMCksIGN0cmwuYWJvcnQoKSkpO1xuICAgIHByb2Nlc3Mub25jZShcImV4aXRcIiwgKGMpID0+ICgoZXhpdENvZGUgPSBjKSwgY3RybC5hYm9ydCgpKSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHB1cChzb3VyY2UsIHsgLi4ub3B0aW9ucywgc2lnbmFsOiBjdHJsLnNpZ25hbCB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhpdENvZGUgJiYgcHJvY2Vzcy5leGl0KGV4aXRDb2RlKTtcbiAgICB9XG4gIH0sXG59KTtcbiJdfQ==
|