@vonage/ml-transformers 5.1.3 → 5.2.0-alpha.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 +2 -0
- package/dist/ml-transformers.es.js +2684 -2684
- package/dist/ml-transformers.min.js +2 -2
- package/dist/ml-transformers.static.js +2684 -2684
- package/dist/ml-transformers.umd.js +41 -41
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
(function(Ue,Dn){typeof exports=="object"&&typeof module<"u"?Dn(exports):typeof define=="function"&&define.amd?define(["exports"],Dn):(Ue=typeof globalThis<"u"?globalThis:Ue||self,Dn(Ue["ml-transformers"]={}))})(this,function(Ue){"use strict";var _3=Object.defineProperty;var Q3=(Ue,Dn,
|
|
2
|
-
data: ${I}`)})}logIfDebugEnabled(n,r,f){(gr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){hi(r),n=Array.isArray(n)?n:[n];for(const f of n)wr(f),Tr(this,f).add(r),this.logIfDebugEnabled("subscribe",f,void 0),bo(f)||this.emit(ai,{eventName:f,listener:r});return this.off.bind(this,n,r)}off(n,r){hi(r),n=Array.isArray(n)?n:[n];for(const f of n)wr(f),Tr(this,f).delete(r),this.logIfDebugEnabled("unsubscribe",f,void 0),bo(f)||this.emit(di,{eventName:f,listener:r})}once(n){return new Promise(r=>{const f=this.on(n,Z=>{f(),r(Z)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)wr(r);return bs(this,n)}async emit(n,r){wr(n),this.logIfDebugEnabled("emit",n,r),pc(this,n,r);const f=Tr(this,n),Z=or.get(this),I=[...f],C=bo(n)?[]:[...Z];await ps,await Promise.all([...I.map(async Y=>{if(f.has(Y))return Y(r)}),...C.map(async Y=>{if(Z.has(Y))return Y(n,r)})])}async emitSerial(n,r){wr(n),this.logIfDebugEnabled("emitSerial",n,r);const f=Tr(this,n),Z=or.get(this),I=[...f],C=[...Z];await ps;for(const Y of I)f.has(Y)&&await Y(r);for(const Y of C)Z.has(Y)&&await Y(n,r)}onAny(n){return hi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),or.get(this).add(n),this.emit(ai,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return bs(this)}offAny(n){hi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(di,{listener:n}),or.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"){Tr(this,r).clear();const f=Or(this,r);for(const Z of f)Z.finish();f.clear()}else{or.get(this).clear();for(const f of ui.get(this).values())f.clear();for(const f of zr.get(this).values()){for(const Z of f)Z.finish();f.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const f of n){if(typeof f=="string"){r+=or.get(this).size+Tr(this,f).size+Or(this,f).size+Or(this).size;continue}typeof f<"u"&&wr(f),r+=or.get(this).size;for(const Z of ui.get(this).values())r+=Z.size;for(const Z of zr.get(this).values())r+=Z.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=ys(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const gs=Object.getOwnPropertyNames(gr.prototype).filter(i=>i!=="constructor");Object.defineProperty(gr,"listenerAdded",{value:ai,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(gr,"listenerRemoved",{value:di,writable:!1,enumerable:!0,configurable:!1});var bc=gr;const yo=mc(bc);function yc(i){return typeof i=="object"&&i!==null&&"message"in i&&typeof i.message=="string"}function gc(i){if(yc(i))return i;try{return new Error(JSON.stringify(i))}catch{return new Error(String(i))}}function go(i){return gc(i).message}var Zc=Object.defineProperty,vc=(i,n,r)=>n in i?Zc(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Gc=(i,n,r)=>(vc(i,typeof n!="symbol"?n+"":n,r),r);const Xc="hlg.tokbox.com/prod/logging/vcp_webrtc",Wc="https://",Vc=1e4;let fi;const Rc=new Uint8Array(16);function xc(){if(!fi&&(fi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!fi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return fi(Rc)}const Un=[];for(let i=0;i<256;++i)Un.push((i+256).toString(16).slice(1));function Ic(i,n=0){return(Un[i[n+0]]+Un[i[n+1]]+Un[i[n+2]]+Un[i[n+3]]+"-"+Un[i[n+4]]+Un[i[n+5]]+"-"+Un[i[n+6]]+Un[i[n+7]]+"-"+Un[i[n+8]]+Un[i[n+9]]+"-"+Un[i[n+10]]+Un[i[n+11]]+Un[i[n+12]]+Un[i[n+13]]+Un[i[n+14]]+Un[i[n+15]]).toLowerCase()}const Sc=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Zs={randomUUID:Sc};function Yc(i,n,r){if(Zs.randomUUID&&!n&&!i)return Zs.randomUUID();i=i||{};const f=i.random||(i.rng||xc)();if(f[6]=f[6]&15|64,f[8]=f[8]&63|128,n){r=r||0;for(let Z=0;Z<16;++Z)n[r+Z]=f[Z];return n}return Ic(f)}function Zo(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const sr=Zo("globals",{});var Zr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Zr||{});function vs(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let wc=0;function Tc(i,n,r,f,Z){const I=wc++;return i.postMessage({id:I,type:n,functionName:r,args:f},f.filter(C=>vs(C))),new Promise(C=>{Z==null||Z.set(I,C)})}function Pr(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(I=>vs(I)))}const Gs=Zo("workerized",{});function Xs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function Fc(){if(Xs())Pr({type:Zr.GLOBALS_SYNC},sr);else{const i=[];for(const n in Gs){const{worker:r,resolvers:f}=Gs[n].workerContext;r&&i.push(Tc(r,Zr.GLOBALS_SYNC,"",[sr],f))}await Promise.all(i)}}function mi(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],mi(i[r],n[r])):typeof i[r]=="object"?(n[r]={},mi(i[r],n[r])):n[r]=i[r]}async function Cc(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Pr(i,await n.instance[r](...f!=null?f:[]))}const Lc=Zo("registeredWorkers",{});function Hc(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=Lc[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;mi(f,sr),Pr(i,typeof n.instance!==void 0)}async function Nc(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),Pr(i,f)}function Jc(i){if(!i.args)throw"Missing globals while syncing";mi(i.args[0],sr),Pr(i,{})}function kc(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Zr.INIT:Hc(r,i);break;case Zr.FORWARD:Cc(r,i);break;case Zr.TERMINATE:Nc(r,i);break;case Zr.GLOBALS_SYNC:Jc(r);break}}}Xs()&&kc();function Ec(i,n){return sr[i]||(sr[i]=n),[()=>sr[i],async r=>{sr[i]=r,await Fc()}]}function Uc(i,n){return Ec(i,n)}const[Bc,Kc]=Uc("metadata");function Mc(i){Kc(i)}function pi(){return Bc()}class vo{constructor(n,r){Gc(this,"uuid"),this.config=n,this.uuid=r!=null?r:Yc()}async send(n){var r,f,Z;const{appId:I,sourceType:C}=(r=pi())!=null?r:{};if(!I||!C)return"metadata missing";const Y=new AbortController,N=setTimeout(()=>Y.abort(),Vc);return await((Z=(f=this.config)==null?void 0:f.fetch)!=null?Z:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:Y.signal}),clearTimeout(N),"success"}getUrl(){var n;let r=(n=pi().proxyUrl)!=null?n:Wc;return r+=(r.at(-1)==="/"?"":"/")+Xc,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=pi();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const bi="2.0.4";class Ac{constructor(n,r){this.config=n,this.frameTransformedCount=0,this.frameFromSourceCount=0,this.startAt=0,this.reporter=new vo(n,r)}async onFrameFromSource(){this.frameFromSourceCount++}get fps(){const{startAt:n,frameFromSourceCount:r}=this,f=(Date.now()-n)/1e3;return r/f}async onFrameTransformed(n={},r=!1){this.startAt===0&&(this.startAt=Date.now()),this.frameTransformedCount++;const{startAt:f,frameTransformedCount:Z,frameFromSourceCount:I}=this,C=Date.now(),Y=(C-f)/1e3,N=Z/Y,et=I/Y;return r||this.frameTransformedCount>=this.config.loggingIntervalFrameCount?(this.frameFromSourceCount=0,this.frameTransformedCount=0,this.startAt=C,this.reporter.config=this.config,this.reporter.send({...this.config.report,variation:"QoS",fps:et,transformedFps:N,framesTransformed:Z,...n})):"success"}}var Ws=(i=>(i.FPS_DROP="fps_drop",i))(Ws||{}),Vs=(i=>(i.start="start",i.transform="transform",i.flush="flush",i))(Vs||{}),yi=(i=>(i.pipeline_ended="pipeline_ended",i.pipeline_ended_with_error="pipeline_ended_with_error",i.pipeline_started="pipeline_started",i.pipeline_started_with_error="pipeline_started_with_error",i.pipeline_restarted="pipeline_restarted",i.pipeline_restarted_with_error="pipeline_restarted_with_error",i))(yi||{});const jc=500,zc=.8;class Oc extends yo{constructor(n,r){super(),this.reporter_=new vo,this.reporterQos_=new Ac({loggingIntervalFrameCount:jc,report:{version:bi}}),this.index_=r,this.transformer_=n,this.shouldStop_=!1,this.isFlashed_=!1,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in n&&(this.transformerType_=n.getTransformerType()),this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n}async start(n){if(this.controller_=n,this.transformer_&&typeof this.transformer_.start=="function")try{await this.transformer_.start(n)}catch(r){this.report({message:zn.errors.transformer_start,variation:"Error",error:go(r)});const f={eventMetaData:{transformerIndex:this.index_},error:r,function:"start"};this.emit("error",f)}}async transform(n,r){var I,C;var f,Z;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(I=n==null?void 0:n.displayHeight)!=null?I:0,this.videoWidth_=(C=n==null?void 0:n.displayWidth)!=null?C:0),this.reporterQos_.onFrameFromSource(),this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),n.close(),this.flush(r),r.terminate();else{try{await((Z=(f=this.transformer_).transform)==null?void 0:Z.call(f,n,r)),this.reportQos()}catch(Y){this.report({message:zn.errors.transformer_transform,variation:"Error",error:go(Y)});const N={eventMetaData:{transformerIndex:this.index_},error:Y,function:"transform"};this.emit("error",N)}if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*zc>this.reporterQos_.fps){const Y={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:this.reporterQos_.fps}};this.emit("warn",Y)}}}async flush(n){if(this.transformer_&&typeof this.transformer_.flush=="function"&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(n)}catch(r){this.report({message:zn.errors.transformer_flush,variation:"Error",error:go(r)});const f={eventMetaData:{transformerIndex:this.index_},error:r,function:"flush"};this.emit("error",f)}}this.reportQos(!0),this.report({variation:"Delete"})}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}report(n){this.reporter_.send({version:bi,action:"MediaTransformer",transformerType:this.transformerType_,...n})}reportQos(n=!1){this.reporterQos_.config={...this.reporterQos_.config},this.reporterQos_.onFrameTransformed({version:bi,action:"MediaTransformer",transformerType:this.transformerType_,videoWidth:this.videoWidth_,videoHeight:this.videoHeight_},n)}}class Pc extends yo{constructor(n){super(),this.transformers_=[],this.trackExpectedRate_=-1;for(let r=0;r<n.length;r++){let f=new Oc(n[r],r);f.on("error",Z=>{this.emit("error",Z)}),f.on("warn",Z=>{this.emit("warn",Z)}),this.transformers_.push(f)}}setTrackExpectedRate(n){this.trackExpectedRate_=n;for(let r of this.transformers_)r.setTrackExpectedRate(this.trackExpectedRate_)}async start(n,r){if(!this.transformers_||this.transformers_.length===0){console.log("[Pipeline] No transformers.");return}try{let f=n;for(let Z of this.transformers_)n=n.pipeThrough(new TransformStream(Z));n.pipeTo(r).then(async()=>{console.log("[Pipeline] Setup."),await r.abort(),await f.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async Z=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(I=>{console.error("[Pipeline] Error from stream transform:",I)}),await r.abort(Z),await f.cancel(Z),this.emit("pipelineInfo","pipeline_ended_with_error")})}catch{this.emit("pipelineInfo","pipeline_started_with_error"),this.destroy();return}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let n of this.transformers_)n.stop()}}class _c extends yo{constructor(){super(),this.reporter_=new vo,this.trackExpectedRate_=-1,this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(n,r){return this.readable_=n,this.writable_=r,this.transformInternal()}transformInternal(){return new Promise(async(n,r)=>{if(!this.transformers_||this.transformers_.length===0){this.report({message:zn.errors.transformer_none,variation:"Error"}),r("[MediaProcessor] Need to set transformers.");return}if(!this.readable_){this.report({variation:"Error",message:zn.errors.readable_null}),r("[MediaProcessor] Readable is null.");return}if(!this.writable_){this.report({variation:"Error",message:zn.errors.writable_null}),r("[MediaProcessor] Writable is null.");return}let f=!1;this.pipeline_&&(f=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new Pc(this.transformers_),this.pipeline_.on("warn",Z=>{this.emit("warn",Z)}),this.pipeline_.on("error",Z=>{this.emit("error",Z)}),this.pipeline_.on("pipelineInfo",Z=>{f&&(Z==="pipeline_started"?Z=yi.pipeline_restarted:Z==="pipeline_started_with_error"&&(Z=yi.pipeline_restarted_with_error)),this.emit("pipelineInfo",Z)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(Z=>{r(Z)})})}setTransformers(n){return this.report({variation:"Update",message:zn.updates.transformer_new}),this.transformers_=n,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise(async n=>{this.pipeline_&&this.pipeline_.destroy(),this.report({variation:"Delete"}),n()})}report(n){this.reporter_.send({version:bi,action:"MediaProcessor",...n})}}class Qc{constructor(){this.processor_=null,this.generator_=null}init(n){return new Promise((r,f)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(Z){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${Z}`),f(Z)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):f("kind not supported")}catch(Z){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${Z}`),f(Z)}r()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class Dc{constructor(n){this.insertableStreamHelper_=new Qc,this.mediaProcessor_=n}setTrack(n){return new Promise((r,f)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{r(this.insertableStreamHelper_.getProccesorTrack())}).catch(Z=>{f(Z)})}).catch(Z=>{f(Z)})})}destroy(){return new Promise((n,r)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(f=>{r(f)}):r("no processor")})}}var _r=(i=>(i.Low="Low",i.High="High",i))(_r||{}),Rs=(i=>(i.BackgroundBlur="BackgroundBlur",i.VirtualBackground="VirtualBackground",i.VideoBackground="VideoBackground",i.SilhouetteBlur="SilhouetteBlur",i))(Rs||{}),gi=(i=>(i.FAST="FAST",i.PRECISE="PRECISE",i))(gi||{}),Qr=(i=>(i.CANVAS="CANVAS",i.WEBGL="WEBGL",i))(Qr||{});const $c=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]));var qc=function(){var i=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var r=typeof n<"u"?n:{},f,Z;r.ready=new Promise(function(tt,it){f=tt,Z=it});var I={},C;for(C in r)r.hasOwnProperty(C)&&(I[C]=r[C]);var Y="./this.program",N=function(tt,it){throw it},et=!0,lt="";function pt(tt){return r.locateFile?r.locateFile(tt,lt):lt+tt}var wt;typeof document<"u"&&document.currentScript&&(lt=document.currentScript.src),i&&(lt=i),lt.indexOf("blob:")!==0?lt=lt.substr(0,lt.replace(/[?#].*/,"").lastIndexOf("/")+1):lt="";var Ft=r.print||console.log.bind(console),at=r.printErr||console.warn.bind(console);for(C in I)I.hasOwnProperty(C)&&(r[C]=I[C]);I=null,r.arguments&&r.arguments,r.thisProgram&&(Y=r.thisProgram),r.quit&&(N=r.quit);var dt;r.wasmBinary&&(dt=r.wasmBinary);var Bt=r.noExitRuntime||!0;typeof WebAssembly!="object"&&he("no native wasm support detected");var kt,ee=!1,P=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function De(tt,it,ut){for(var _t=it+ut,de=it;tt[de]&&!(de>=_t);)++de;if(de-it>16&&tt.subarray&&P)return P.decode(tt.subarray(it,de));for(var ue="";it<de;){var St=tt[it++];if(!(St&128)){ue+=String.fromCharCode(St);continue}var me=tt[it++]&63;if((St&224)==192){ue+=String.fromCharCode((St&31)<<6|me);continue}var He=tt[it++]&63;if((St&240)==224?St=(St&15)<<12|me<<6|He:St=(St&7)<<18|me<<12|He<<6|tt[it++]&63,St<65536)ue+=String.fromCharCode(St);else{var tn=St-65536;ue+=String.fromCharCode(55296|tn>>10,56320|tn&1023)}}return ue}function je(tt,it){return tt?De(Zt,tt,it):""}function We(tt,it,ut){for(var _t=0;_t<tt.length;++_t)ne[it++>>0]=tt.charCodeAt(_t);ut||(ne[it>>0]=0)}function jt(tt,it){return tt%it>0&&(tt+=it-tt%it),tt}var Hn,ne,Zt,$e;function An(tt){Hn=tt,r.HEAP8=ne=new Int8Array(tt),r.HEAP16=new Int16Array(tt),r.HEAP32=$e=new Int32Array(tt),r.HEAPU8=Zt=new Uint8Array(tt),r.HEAPU16=new Uint16Array(tt),r.HEAPU32=new Uint32Array(tt),r.HEAPF32=new Float32Array(tt),r.HEAPF64=new Float64Array(tt)}r.INITIAL_MEMORY;var Re,Ht=[],Ye=[],sn=[],Gn=0;function Fn(){return Bt||Gn>0}function Rn(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)pn(r.preRun.shift());Qt(Ht)}function Nn(){Qt(Ye)}function dn(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Cn(r.postRun.shift());Qt(sn)}function pn(tt){Ht.unshift(tt)}function kn(tt){Ye.unshift(tt)}function Cn(tt){sn.unshift(tt)}var ze=0,Me=null;function xn(tt){ze++,r.monitorRunDependencies&&r.monitorRunDependencies(ze)}function Xn(tt){if(ze--,r.monitorRunDependencies&&r.monitorRunDependencies(ze),ze==0&&Me){var it=Me;Me=null,it()}}r.preloadedImages={},r.preloadedAudios={};function he(tt){r.onAbort&&r.onAbort(tt),tt="Aborted("+tt+")",at(tt),ee=!0,tt+=". Build with -s ASSERTIONS=1 for more info.";var it=new WebAssembly.RuntimeError(tt);throw Z(it),it}var Se="data:application/octet-stream;base64,";function Oe(tt){return tt.startsWith(Se)}var re;re="tflite-simd.wasm",Oe(re)||(re=pt(re));function Ve(tt){try{if(tt==re&&dt)return new Uint8Array(dt);if(!wt)throw"both async and sync fetching of the wasm failed"}catch(it){he(it)}}function ln(){return!dt&&et&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(tt){if(!tt.ok)throw"failed to load wasm binary file at '"+re+"'";return tt.arrayBuffer()}).catch(function(){return Ve(re)}):Promise.resolve().then(function(){return Ve(re)})}function Be(){var tt={a:fe};function it(St,me){var He=St.exports;r.asm=He,kt=r.asm.q,An(kt.buffer),Re=r.asm.E,kn(r.asm.r),Xn()}xn();function ut(St){it(St.instance)}function _t(St){return ln().then(function(me){return WebAssembly.instantiate(me,tt)}).then(function(me){return me}).then(St,function(me){at("failed to asynchronously prepare wasm: "+me),he(me)})}function de(){return!dt&&typeof WebAssembly.instantiateStreaming=="function"&&!Oe(re)&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(St){var me=WebAssembly.instantiateStreaming(St,tt);return me.then(ut,function(He){return at("wasm streaming compile failed: "+He),at("falling back to ArrayBuffer instantiation"),_t(ut)})}):_t(ut)}if(r.instantiateWasm)try{var ue=r.instantiateWasm(tt,it);return ue}catch(St){return at("Module.instantiateWasm callback failed with error: "+St),!1}return de().catch(Z),{}}function Qt(tt){for(;tt.length>0;){var it=tt.shift();if(typeof it=="function"){it(r);continue}var ut=it.func;typeof ut=="number"?it.arg===void 0?Re.get(ut)():Re.get(ut)(it.arg):ut(it.arg===void 0?null:it.arg)}}function Ze(tt,it,ut,_t){he("Assertion failed: "+je(tt)+", at: "+[it?je(it):"unknown filename",ut,_t?je(_t):"unknown function"])}function Le(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Mt(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function xe(){he("")}var zt;zt=function(){return performance.now()};var ye=!0;function we(tt){return $e[Lt()>>2]=tt,tt}function qe(tt,it){var ut;if(tt===0)ut=Date.now();else if((tt===1||tt===4)&&ye)ut=zt();else return we(28),-1;return $e[it>>2]=ut/1e3|0,$e[it+4>>2]=ut%1e3*1e3*1e3|0,0}function Xe(){return 2147483648}function Ot(tt,it,ut){Zt.copyWithin(tt,it,it+ut)}function Ae(tt){try{return kt.grow(tt-Hn.byteLength+65535>>>16),An(kt.buffer),1}catch{}}function Pe(tt){var it=Zt.length;tt=tt>>>0;var ut=2147483648;if(tt>ut)return!1;for(var _t=1;_t<=4;_t*=2){var de=it*(1+.2/_t);de=Math.min(de,tt+100663296);var ue=Math.min(ut,jt(Math.max(tt,de),65536)),St=Ae(ue);if(St)return!0}return!1}function Ie(tt){for(var it=zt();zt()-it<tt;);}var Wn={};function cn(){return Y||"./this.program"}function _e(){if(!_e.strings){var tt=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",it={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:tt,_:cn()};for(var ut in Wn)Wn[ut]===void 0?delete it[ut]:it[ut]=Wn[ut];var _t=[];for(var ut in it)_t.push(ut+"="+it[ut]);_e.strings=_t}return _e.strings}var un={mappings:{},buffers:[null,[],[]],printChar:function(tt,it){var ut=un.buffers[tt];it===0||it===10?((tt===1?Ft:at)(De(ut,0)),ut.length=0):ut.push(it)},varargs:void 0,get:function(){un.varargs+=4;var tt=$e[un.varargs-4>>2];return tt},getStr:function(tt){var it=je(tt);return it},get64:function(tt,it){return tt}};function ve(tt,it){var ut=0;return _e().forEach(function(_t,de){var ue=it+ut;$e[tt+de*4>>2]=ue,We(_t,ue),ut+=_t.length+1}),0}function Te(tt,it){var ut=_e();$e[tt>>2]=ut.length;var _t=0;return ut.forEach(function(de){_t+=de.length+1}),$e[it>>2]=_t,0}function Ge(tt){te(tt)}function ie(tt){return 0}function Qe(tt,it,ut,_t,de){}function qt(tt,it,ut,_t){for(var de=0,ue=0;ue<ut;ue++){for(var St=$e[it+ue*8>>2],me=$e[it+(ue*8+4)>>2],He=0;He<me;He++)un.printChar(tt,Zt[St+He]);de+=me}return $e[_t>>2]=de,0}function Pt(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var tt=new Uint8Array(1);return function(){return crypto.getRandomValues(tt),tt[0]}}else return function(){he("randomDevice")}}function hn(tt,it){hn.randomDevice||(hn.randomDevice=Pt());for(var ut=0;ut<it;ut++)ne[tt+ut>>0]=hn.randomDevice();return 0}var fe={a:Ze,e:Le,d:Mt,b:xe,n:qe,h:Xe,l:Ot,m:Pe,p:Ie,f:ve,g:Te,j:Ge,i:ie,k:Qe,c:qt,o:hn};Be(),r.___wasm_call_ctors=function(){return(r.___wasm_call_ctors=r.asm.r).apply(null,arguments)},r._getModelBufferMemoryOffset=function(){return(r._getModelBufferMemoryOffset=r.asm.s).apply(null,arguments)},r._getInputMemoryOffset=function(){return(r._getInputMemoryOffset=r.asm.t).apply(null,arguments)},r._getInputHeight=function(){return(r._getInputHeight=r.asm.u).apply(null,arguments)},r._getInputWidth=function(){return(r._getInputWidth=r.asm.v).apply(null,arguments)},r._getInputChannelCount=function(){return(r._getInputChannelCount=r.asm.w).apply(null,arguments)},r._getOutputMemoryOffset=function(){return(r._getOutputMemoryOffset=r.asm.x).apply(null,arguments)},r._getOutputHeight=function(){return(r._getOutputHeight=r.asm.y).apply(null,arguments)},r._getOutputWidth=function(){return(r._getOutputWidth=r.asm.z).apply(null,arguments)},r._getOutputChannelCount=function(){return(r._getOutputChannelCount=r.asm.A).apply(null,arguments)},r._loadModel=function(){return(r._loadModel=r.asm.B).apply(null,arguments)},r._runInference=function(){return(r._runInference=r.asm.C).apply(null,arguments)},r._isGPUEnabled=function(){return(r._isGPUEnabled=r.asm.D).apply(null,arguments)};var Lt=r.___errno_location=function(){return(Lt=r.___errno_location=r.asm.F).apply(null,arguments)},Vt;function oe(tt){this.name="ExitStatus",this.message="Program terminated with exit("+tt+")",this.status=tt}Me=function tt(){Vt||Fe(),Vt||(Me=tt)};function Fe(tt){if(ze>0||(Rn(),ze>0))return;function it(){Vt||(Vt=!0,r.calledRun=!0,!ee&&(Nn(),f(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),dn()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),it()},1)):it()}r.run=Fe;function te(tt,it){se(tt)}function se(tt){Fn()||(r.onExit&&r.onExit(tt),ee=!0),N(tt,new oe(tt))}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return Fe(),n.ready}}();class t2{constructor(){gt(this,"selectedTFLite");gt(this,"isSIMDSupported",!1);gt(this,"isThreadsSupported",!1);gt(this,"inputWidth",0);gt(this,"inputHeight",0);gt(this,"inputChannelCount",0);gt(this,"inputMemoryOffset",0);gt(this,"outputWidth",0);gt(this,"outputHeight",0);gt(this,"outputChannelCount",0);gt(this,"outputMemoryOffset",0)}}const e2="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",n2="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function r2(i=e2,n=n2){let r=new t2;var f=new Promise(function(Z,I){async function C(){return qc({locateFile:function(et){return i+et}})}async function Y(N){return new Promise(async(et,lt)=>{const pt=N;if(typeof pt>"u")return lt("TFLite backend unavailable: wasmSimd");const wt="selfie_segmentation_landscape";console.log("Loading tflite model:",wt);let Ft=n+`${wt}.tflite`;console.log("TFLite modelUrl: "+Ft);try{const dt=await(await fetch(Ft)).arrayBuffer();console.log("Model buffer size:",dt.byteLength);const Bt=pt._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Bt),console.log("Loading model buffer..."),pt.HEAPU8.set(new Uint8Array(dt),Bt);const kt=pt._loadModel(dt.byteLength);if(console.log("Load model result:",kt),kt!==0){lt("Cannot load model");return}r.inputWidth=pt._getInputWidth(),r.inputHeight=pt._getInputHeight(),r.inputChannelCount=pt._getInputChannelCount(),r.inputMemoryOffset=pt._getInputMemoryOffset(),console.log("Input memory offset:",r.inputMemoryOffset),console.log("Input height:",r.inputHeight),console.log("Input width:",r.inputWidth),console.log("Input channels:",r.inputChannelCount),r.outputMemoryOffset=pt._getOutputMemoryOffset(),r.outputWidth=pt._getOutputWidth(),r.outputHeight=pt._getOutputHeight(),r.outputChannelCount=pt._getOutputChannelCount(),console.log("Output memory offset:",r.outputMemoryOffset),console.log("Output height:",r.outputHeight),console.log("Output width:",r.outputWidth),console.log("Output channels:",r.outputChannelCount),r.selectedTFLite=pt}catch(at){lt(at);return}et()})}C().then(N=>{if(N===null)throw console.error("loadTFLite null"),"loadTFLite null";Y(N).then(et=>{Z(r)}).catch(et=>{console.error("loadTFLiteModel error"),I("loadTFLiteModel error")})}).catch(N=>{console.error("loadTFLite error:",N),I("loadTFLite error:"+N)})});return f}class xs{constructor(){gt(this,"canvas",new OffscreenCanvas(0,0));gt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0}));gt(this,"pixelCount",0);gt(this,"inputOffset",0);gt(this,"outputOffset",0);gt(this,"infos");gt(this,"mask")}async init(n,r){await this.initWasm(n,r),this.infos&&(this.canvas.width=this.infos.inputWidth,this.canvas.height=this.infos.inputHeight,this.pixelCount=this.infos.inputWidth*this.infos.inputHeight,this.mask=new ImageData(this.infos.inputWidth,this.infos.inputHeight),this.inputOffset=this.infos.inputMemoryOffset/4,this.outputOffset=this.infos.outputMemoryOffset/4)}async initWasm(n,r){this.infos=await r2(n,r)}getOutputDimensions(){var n,r,f,Z;return{width:(r=(n=this.infos)==null?void 0:n.outputWidth)!=null?r:0,height:(Z=(f=this.infos)==null?void 0:f.outputHeight)!=null?Z:0}}async process(n){if(!this.mask||!this.infos)return;const r=this.infos.inputWidth,f=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,r,f);const Z=this.context.getImageData(0,0,r,f),I=this.infos.selectedTFLite.HEAPF32;for(let C=0;C<this.pixelCount;C++){const Y=this.inputOffset+C*3;I[Y]=Z.data[C*4]/255,I[Y+1]=Z.data[C*4+1]/255,I[Y+2]=Z.data[C*4+2]/255}this.infos.selectedTFLite._runInference();for(let C=0;C<this.pixelCount;C++){const Y=this.infos.selectedTFLite.HEAPF32[this.outputOffset+C];this.mask.data[C*4]=this.mask.data[C*4+3]=255*Y}return createImageBitmap(this.mask)}isGpuSupported(){var n,r,f;return(f=(r=(n=this.infos)==null?void 0:n.selectedTFLite)==null?void 0:r._isGPUEnabled())!=null?f:!1}}async function i2(i,n){const{wasm:r,insertableStreams:f,simd:Z,webgl:I}=await Is(i,n);if(!r.supported)throw r.message;if(!f.supported)throw f.message;if(!Z.supported)throw Z.message;if(!I.supported)throw I.message}async function Is(i,n){const r=new xs;await r.initWasm(i,n);const f={wasm:{supported:typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function",message:"Your browser does not support WebAssembly features."},simd:{supported:await $c(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:r.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:o2(),performance:Ss()};try{await Dn()}catch(Z){f.insertableStreams.supported=!1,f.insertableStreams.message=Z}return f}function o2(){return OffscreenCanvas?new OffscreenCanvas(0,0).getContext("webgl2")?{supported:!0}:{supported:!1,message:"Your browser does not support webgl 2"}:{supported:!1,message:"Your browser does not support offscreen canvas"}}function Ss(){return new OffscreenCanvas(0,0).getContext("webgl2",{failIfMajorPerformanceCaveat:!0})?{supported:!0}:{supported:!1,message:"Your hardware does not perform good enough to run the library efficiently"}}const Zi={};(function(){var i;function n(p){var W=0;return function(){return W<p.length?{done:!1,value:p[W++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(p,W,V){return p==Array.prototype||p==Object.prototype||(p[W]=V.value),p};function f(p){p=[typeof globalThis=="object"&&globalThis,p,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var W=0;W<p.length;++W){var V=p[W];if(V&&V.Math==Math)return V}throw Error("Cannot find global object")}var Z=f(this);function I(p,W){if(W)t:{var V=Z;p=p.split(".");for(var E=0;E<p.length-1;E++){var O=p[E];if(!(O in V))break t;V=V[O]}p=p[p.length-1],E=V[p],W=W(E),W!=E&&W!=null&&r(V,p,{configurable:!0,writable:!0,value:W})}}I("Symbol",function(p){function W(ot){if(this instanceof W)throw new TypeError("Symbol is not a constructor");return new V(E+(ot||"")+"_"+O++,ot)}function V(ot,z){this.g=ot,r(this,"description",{configurable:!0,writable:!0,value:z})}if(p)return p;V.prototype.toString=function(){return this.g};var E="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",O=0;return W}),I("Symbol.iterator",function(p){if(p)return p;p=Symbol("Symbol.iterator");for(var W="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),V=0;V<W.length;V++){var E=Z[W[V]];typeof E=="function"&&typeof E.prototype[p]!="function"&&r(E.prototype,p,{configurable:!0,writable:!0,value:function(){return C(n(this))}})}return p});function C(p){return p={next:p},p[Symbol.iterator]=function(){return this},p}function Y(p){var W=typeof Symbol<"u"&&Symbol.iterator&&p[Symbol.iterator];return W?W.call(p):{next:n(p)}}function N(p){if(!(p instanceof Array)){p=Y(p);for(var W,V=[];!(W=p.next()).done;)V.push(W.value);p=V}return p}var et=typeof Object.create=="function"?Object.create:function(p){function W(){}return W.prototype=p,new W},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var wt={a:!0},Ft={};try{Ft.__proto__=wt,pt=Ft.a;break t}catch{}pt=!1}lt=pt?function(p,W){if(p.__proto__=W,p.__proto__!==W)throw new TypeError(p+" is not extensible");return p}:null}var at=lt;function dt(p,W){if(p.prototype=et(W.prototype),p.prototype.constructor=p,at)at(p,W);else for(var V in W)if(V!="prototype")if(Object.defineProperties){var E=Object.getOwnPropertyDescriptor(W,V);E&&Object.defineProperty(p,V,E)}else p[V]=W[V];p.ea=W.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(p){if(p.l)throw new TypeError("Generator is already running");p.l=!0}Bt.prototype.o=function(p){this.h=p};function ee(p,W){p.j={U:W,V:!0},p.g=p.m||p.s}Bt.prototype.return=function(p){this.j={return:p},this.g=this.s};function P(p,W,V){return p.g=V,{value:W}}function De(p){this.g=new Bt,this.h=p}function je(p,W){kt(p.g);var V=p.g.i;return V?We(p,"return"in V?V.return:function(E){return{value:E,done:!0}},W,p.g.return):(p.g.return(W),jt(p))}function We(p,W,V,E){try{var O=W.call(p.g.i,V);if(!(O instanceof Object))throw new TypeError("Iterator result "+O+" is not an object");if(!O.done)return p.g.l=!1,O;var ot=O.value}catch(z){return p.g.i=null,ee(p.g,z),jt(p)}return p.g.i=null,E.call(p.g,ot),jt(p)}function jt(p){for(;p.g.g;)try{var W=p.h(p.g);if(W)return p.g.l=!1,{value:W.value,done:!1}}catch(V){p.g.h=void 0,ee(p.g,V)}if(p.g.l=!1,p.g.j){if(W=p.g.j,p.g.j=null,W.V)throw W.U;return{value:W.return,done:!0}}return{value:void 0,done:!0}}function Hn(p){this.next=function(W){return kt(p.g),p.g.i?W=We(p,p.g.i.next,W,p.g.o):(p.g.o(W),W=jt(p)),W},this.throw=function(W){return kt(p.g),p.g.i?W=We(p,p.g.i.throw,W,p.g.o):(ee(p.g,W),W=jt(p)),W},this.return=function(W){return je(p,W)},this[Symbol.iterator]=function(){return this}}function ne(p,W){return W=new Hn(new De(W)),at&&p.prototype&&at(W,p.prototype),W}function Zt(p,W){p instanceof String&&(p+="");var V=0,E=!1,O={next:function(){if(!E&&V<p.length){var ot=V++;return{value:W(ot,p[ot]),done:!1}}return E=!0,{done:!0,value:void 0}}};return O[Symbol.iterator]=function(){return O},O}var $e=typeof Object.assign=="function"?Object.assign:function(p,W){for(var V=1;V<arguments.length;V++){var E=arguments[V];if(E)for(var O in E)Object.prototype.hasOwnProperty.call(E,O)&&(p[O]=E[O])}return p};I("Object.assign",function(p){return p||$e}),I("Promise",function(p){function W(z){this.h=0,this.i=void 0,this.g=[],this.o=!1;var rt=this.j();try{z(rt.resolve,rt.reject)}catch(bt){rt.reject(bt)}}function V(){this.g=null}function E(z){return z instanceof W?z:new W(function(rt){rt(z)})}if(p)return p;V.prototype.h=function(z){if(this.g==null){this.g=[];var rt=this;this.i(function(){rt.l()})}this.g.push(z)};var O=Z.setTimeout;V.prototype.i=function(z){O(z,0)},V.prototype.l=function(){for(;this.g&&this.g.length;){var z=this.g;this.g=[];for(var rt=0;rt<z.length;++rt){var bt=z[rt];z[rt]=null;try{bt()}catch(Rt){this.j(Rt)}}}this.g=null},V.prototype.j=function(z){this.i(function(){throw z})},W.prototype.j=function(){function z(Rt){return function(Ut){bt||(bt=!0,Rt.call(rt,Ut))}}var rt=this,bt=!1;return{resolve:z(this.C),reject:z(this.l)}},W.prototype.C=function(z){if(z===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(z instanceof W)this.F(z);else{t:switch(typeof z){case"object":var rt=z!=null;break t;case"function":rt=!0;break t;default:rt=!1}rt?this.u(z):this.m(z)}},W.prototype.u=function(z){var rt=void 0;try{rt=z.then}catch(bt){this.l(bt);return}typeof rt=="function"?this.G(rt,z):this.m(z)},W.prototype.l=function(z){this.s(2,z)},W.prototype.m=function(z){this.s(1,z)},W.prototype.s=function(z,rt){if(this.h!=0)throw Error("Cannot settle("+z+", "+rt+"): Promise already settled in state"+this.h);this.h=z,this.i=rt,this.h===2&&this.D(),this.A()},W.prototype.D=function(){var z=this;O(function(){if(z.B()){var rt=Z.console;typeof rt<"u"&&rt.error(z.i)}},1)},W.prototype.B=function(){if(this.o)return!1;var z=Z.CustomEvent,rt=Z.Event,bt=Z.dispatchEvent;return typeof bt>"u"?!0:(typeof z=="function"?z=new z("unhandledrejection",{cancelable:!0}):typeof rt=="function"?z=new rt("unhandledrejection",{cancelable:!0}):(z=Z.document.createEvent("CustomEvent"),z.initCustomEvent("unhandledrejection",!1,!0,z)),z.promise=this,z.reason=this.i,bt(z))},W.prototype.A=function(){if(this.g!=null){for(var z=0;z<this.g.length;++z)ot.h(this.g[z]);this.g=null}};var ot=new V;return W.prototype.F=function(z){var rt=this.j();z.J(rt.resolve,rt.reject)},W.prototype.G=function(z,rt){var bt=this.j();try{z.call(rt,bt.resolve,bt.reject)}catch(Rt){bt.reject(Rt)}},W.prototype.then=function(z,rt){function bt($t,Jt){return typeof $t=="function"?function(Yt){try{Rt($t(Yt))}catch(Et){Ut(Et)}}:Jt}var Rt,Ut,Nt=new W(function($t,Jt){Rt=$t,Ut=Jt});return this.J(bt(z,Rt),bt(rt,Ut)),Nt},W.prototype.catch=function(z){return this.then(void 0,z)},W.prototype.J=function(z,rt){function bt(){switch(Rt.h){case 1:z(Rt.i);break;case 2:rt(Rt.i);break;default:throw Error("Unexpected state: "+Rt.h)}}var Rt=this;this.g==null?ot.h(bt):this.g.push(bt),this.o=!0},W.resolve=E,W.reject=function(z){return new W(function(rt,bt){bt(z)})},W.race=function(z){return new W(function(rt,bt){for(var Rt=Y(z),Ut=Rt.next();!Ut.done;Ut=Rt.next())E(Ut.value).J(rt,bt)})},W.all=function(z){var rt=Y(z),bt=rt.next();return bt.done?E([]):new W(function(Rt,Ut){function Nt(Yt){return function(Et){$t[Yt]=Et,Jt--,Jt==0&&Rt($t)}}var $t=[],Jt=0;do $t.push(void 0),Jt++,E(bt.value).J(Nt($t.length-1),Ut),bt=rt.next();while(!bt.done)})},W}),I("Object.is",function(p){return p||function(W,V){return W===V?W!==0||1/W===1/V:W!==W&&V!==V}}),I("Array.prototype.includes",function(p){return p||function(W,V){var E=this;E instanceof String&&(E=String(E));var O=E.length;for(V=V||0,0>V&&(V=Math.max(V+O,0));V<O;V++){var ot=E[V];if(ot===W||Object.is(ot,W))return!0}return!1}}),I("String.prototype.includes",function(p){return p||function(W,V){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(W instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(W,V||0)!==-1}}),I("Array.prototype.keys",function(p){return p||function(){return Zt(this,function(W){return W})}});var An=this||self;function Re(p,W){p=p.split(".");var V=An;p[0]in V||typeof V.execScript>"u"||V.execScript("var "+p[0]);for(var E;p.length&&(E=p.shift());)p.length||W===void 0?V[E]&&V[E]!==Object.prototype[E]?V=V[E]:V=V[E]={}:V[E]=W}function Ht(p,W){return W=String.fromCharCode.apply(null,W),p==null?W:p+W}var Ye,sn=typeof TextDecoder<"u",Gn,Fn=typeof TextEncoder<"u";function Rn(p){if(Fn)p=(Gn||(Gn=new TextEncoder)).encode(p);else{var W=void 0;W=W===void 0?!1:W;for(var V=0,E=new Uint8Array(3*p.length),O=0;O<p.length;O++){var ot=p.charCodeAt(O);if(128>ot)E[V++]=ot;else{if(2048>ot)E[V++]=ot>>6|192;else{if(55296<=ot&&57343>=ot){if(56319>=ot&&O<p.length){var z=p.charCodeAt(++O);if(56320<=z&&57343>=z){ot=1024*(ot-55296)+z-56320+65536,E[V++]=ot>>18|240,E[V++]=ot>>12&63|128,E[V++]=ot>>6&63|128,E[V++]=ot&63|128;continue}else O--}if(W)throw Error("Found an unpaired surrogate");ot=65533}E[V++]=ot>>12|224,E[V++]=ot>>6&63|128}E[V++]=ot&63|128}}p=E.subarray(0,V)}return p}var Nn={},dn=null;function pn(p,W){W===void 0&&(W=0),ze(),W=Nn[W];for(var V=Array(Math.floor(p.length/3)),E=W[64]||"",O=0,ot=0;O<p.length-2;O+=3){var z=p[O],rt=p[O+1],bt=p[O+2],Rt=W[z>>2];z=W[(z&3)<<4|rt>>4],rt=W[(rt&15)<<2|bt>>6],bt=W[bt&63],V[ot++]=Rt+z+rt+bt}switch(Rt=0,bt=E,p.length-O){case 2:Rt=p[O+1],bt=W[(Rt&15)<<2]||E;case 1:p=p[O],V[ot]=W[p>>2]+W[(p&3)<<4|Rt>>4]+bt+E}return V.join("")}function kn(p){var W=p.length,V=3*W/4;V%3?V=Math.floor(V):"=.".indexOf(p[W-1])!=-1&&(V="=.".indexOf(p[W-2])!=-1?V-2:V-1);var E=new Uint8Array(V),O=0;return Cn(p,function(ot){E[O++]=ot}),E.subarray(0,O)}function Cn(p,W){function V(bt){for(;E<p.length;){var Rt=p.charAt(E++),Ut=dn[Rt];if(Ut!=null)return Ut;if(!/^[\s\xa0]*$/.test(Rt))throw Error("Unknown base64 encoding at char: "+Rt)}return bt}ze();for(var E=0;;){var O=V(-1),ot=V(0),z=V(64),rt=V(64);if(rt===64&&O===-1)break;W(O<<2|ot>>4),z!=64&&(W(ot<<4&240|z>>2),rt!=64&&W(z<<6&192|rt))}}function ze(){if(!dn){dn={};for(var p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),W=["+/=","+/","-_=","-_.","-_"],V=0;5>V;V++){var E=p.concat(W[V].split(""));Nn[V]=E;for(var O=0;O<E.length;O++){var ot=E[O];dn[ot]===void 0&&(dn[ot]=O)}}}}var Me=typeof Uint8Array.prototype.slice=="function",xn;function Xn(p,W,V){return W===V?xn||(xn=new Uint8Array(0)):Me?p.slice(W,V):new Uint8Array(p.subarray(W,V))}var he=0,Se=0;function Oe(p,W){W=W===void 0?{}:W,W=W.v===void 0?!1:W.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=W,p&&re(this,p)}function re(p,W){W=W.constructor===Uint8Array?W:W.constructor===ArrayBuffer?new Uint8Array(W):W.constructor===Array?new Uint8Array(W):W.constructor===String?kn(W):W instanceof Uint8Array?new Uint8Array(W.buffer,W.byteOffset,W.byteLength):new Uint8Array(0),p.h=W,p.j=0,p.i=p.h.length,p.g=p.j}Oe.prototype.reset=function(){this.g=this.j};function Ve(p){var W=p.h,V=W[p.g],E=V&127;return 128>V?(p.g+=1,E):(V=W[p.g+1],E|=(V&127)<<7,128>V?(p.g+=2,E):(V=W[p.g+2],E|=(V&127)<<14,128>V?(p.g+=3,E):(V=W[p.g+3],E|=(V&127)<<21,128>V?(p.g+=4,E):(V=W[p.g+4],E|=(V&15)<<28,128>V?(p.g+=5,E>>>0):(p.g+=5,128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&p.g++,E)))))}function ln(p){var W=p.h[p.g],V=p.h[p.g+1],E=p.h[p.g+2],O=p.h[p.g+3];return p.g+=4,V=(W<<0|V<<8|E<<16|O<<24)>>>0,p=2*(V>>31)+1,W=V>>>23&255,V&=8388607,W==255?V?NaN:1/0*p:W==0?p*Math.pow(2,-149)*V:p*Math.pow(2,W-150)*(V+Math.pow(2,23))}var Be=[];function Qt(){this.g=new Uint8Array(64),this.h=0}Qt.prototype.push=function(p){if(!(this.h+1<this.g.length)){var W=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(W)}this.g[this.h++]=p},Qt.prototype.length=function(){return this.h},Qt.prototype.end=function(){var p=this.g,W=this.h;return this.h=0,Xn(p,0,W)};function Ze(p,W){for(;127<W;)p.push(W&127|128),W>>>=7;p.push(W)}function Le(p){var W={},V=W.N===void 0?!1:W.N;this.o={v:W.v===void 0?!1:W.v},this.N=V,W=this.o,Be.length?(V=Be.pop(),W&&(V.v=W.v),p&&re(V,p),p=V):p=new Oe(p,W),this.g=p,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Le.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Mt(p){var W=p.g;if((W=W.g==W.i)||(W=p.j)||(W=p.g,W=W.l||0>W.g||W.g>W.i),W)return!1;p.m=p.g.g,W=Ve(p.g);var V=W&7;return V!=0&&V!=5&&V!=1&&V!=2&&V!=3&&V!=4?(p.j=!0,!1):(p.i=W,p.l=W>>>3,p.h=V,!0)}function xe(p){switch(p.h){case 0:if(p.h!=0)xe(p);else{for(p=p.g;p.h[p.g]&128;)p.g++;p.g++}break;case 1:p.h!=1?xe(p):(p=p.g,p.g+=8);break;case 2:if(p.h!=2)xe(p);else{var W=Ve(p.g);p=p.g,p.g+=W}break;case 5:p.h!=5?xe(p):(p=p.g,p.g+=4);break;case 3:W=p.l;do{if(!Mt(p)){p.j=!0;break}if(p.h==4){p.l!=W&&(p.j=!0);break}xe(p)}while(1);break;default:p.j=!0}}function zt(p,W,V){var E=p.g.i,O=Ve(p.g);return O=p.g.g+O,p.g.i=O,V(W,p),p.g.g=O,p.g.i=E,W}function ye(p){var W=Ve(p.g);p=p.g;var V=p.g;p.g+=W,p=p.h;var E;if(sn)(E=Ye)||(E=Ye=new TextDecoder("utf-8",{fatal:!1})),E=E.decode(p.subarray(V,V+W));else{W=V+W;for(var O=[],ot=null,z,rt,bt;V<W;)z=p[V++],128>z?O.push(z):224>z?V>=W?O.push(65533):(rt=p[V++],194>z||(rt&192)!==128?(V--,O.push(65533)):O.push((z&31)<<6|rt&63)):240>z?V>=W-1?O.push(65533):(rt=p[V++],(rt&192)!==128||z===224&&160>rt||z===237&&160<=rt||((E=p[V++])&192)!==128?(V--,O.push(65533)):O.push((z&15)<<12|(rt&63)<<6|E&63)):244>=z?V>=W-2?O.push(65533):(rt=p[V++],(rt&192)!==128||(z<<28)+(rt-144)>>30!==0||((E=p[V++])&192)!==128||((bt=p[V++])&192)!==128?(V--,O.push(65533)):(z=(z&7)<<18|(rt&63)<<12|(E&63)<<6|bt&63,z-=65536,O.push((z>>10&1023)+55296,(z&1023)+56320))):O.push(65533),8192<=O.length&&(ot=Ht(ot,O),O.length=0);E=Ht(ot,O)}return E}function we(){this.h=[],this.i=0,this.g=new Qt}function qe(p,W){W.length!==0&&(p.h.push(W),p.i+=W.length)}function Xe(p){var W=p.i+p.g.length();if(W===0)return new Uint8Array(0);W=new Uint8Array(W);for(var V=p.h,E=V.length,O=0,ot=0;ot<E;ot++){var z=V[ot];z.length!==0&&(W.set(z,O),O+=z.length)}return V=p.g,E=V.h,E!==0&&(W.set(V.g.subarray(0,E),O),V.h=0),p.h=[W],W}function Ot(p,W,V){if(V!=null){Ze(p.g,8*W+5),p=p.g;var E=V;E=(V=0>E?1:0)?-E:E,E===0?0<1/E?he=Se=0:(Se=0,he=2147483648):isNaN(E)?(Se=0,he=2147483647):34028234663852886e22<E?(Se=0,he=(V<<31|2139095040)>>>0):11754943508222875e-54>E?(E=Math.round(E/Math.pow(2,-149)),Se=0,he=(V<<31|E)>>>0):(W=Math.floor(Math.log(E)/Math.LN2),E*=Math.pow(2,-W),E=Math.round(8388608*E)&8388607,Se=0,he=(V<<31|W+127<<23|E)>>>0),V=he,p.push(V>>>0&255),p.push(V>>>8&255),p.push(V>>>16&255),p.push(V>>>24&255)}}var Ae=typeof Uint8Array=="function";function Pe(p,W,V){if(p!=null)return typeof p=="object"?Ae&&p instanceof Uint8Array?V(p):Ie(p,W,V):W(p)}function Ie(p,W,V){if(Array.isArray(p)){for(var E=Array(p.length),O=0;O<p.length;O++)E[O]=Pe(p[O],W,V);return Array.isArray(p)&&p.W&&_e(E),E}E={};for(O in p)E[O]=Pe(p[O],W,V);return E}function Wn(p){return typeof p=="number"?isFinite(p)?p:String(p):p}var cn={W:{value:!0,configurable:!0}};function _e(p){return Array.isArray(p)&&!Object.isFrozen(p)&&Object.defineProperties(p,cn),p}var un;function ve(p,W,V){var E=un;un=null,p||(p=E),E=this.constructor.ca,p||(p=E?[E]:[]),this.j=E?0:-1,this.i=null,this.g=p;t:{if(E=this.g.length,p=E-1,E&&(E=this.g[p],E!==null&&typeof E=="object"&&E.constructor===Object)){this.l=p-this.j,this.h=E;break t}W!==void 0&&-1<W?(this.l=Math.max(W,p+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(V)for(W=0;W<V.length;W++)p=V[W],p<this.l?(p+=this.j,(E=this.g[p])?_e(E):this.g[p]=Te):(Ge(this),(E=this.h[p])?_e(E):this.h[p]=Te)}var Te=Object.freeze(_e([]));function Ge(p){var W=p.l+p.j;p.g[W]||(p.h=p.g[W]={})}function ie(p,W,V){return W===-1?null:(V===void 0?0:V)||W>=p.l?p.h?p.h[W]:void 0:p.g[W+p.j]}function Qe(p){var W=W===void 0?!1:W,V=ie(p,1,W);return V==null&&(V=Te),V===Te&&(V=_e([]),Pt(p,1,V,W)),V}function qt(p,W,V){return p=ie(p,W),p=p==null?p:+p,p==null?V===void 0?0:V:p}function Pt(p,W,V,E){(E===void 0?0:E)||W>=p.l?(Ge(p),p.h[W]=V):p.g[W+p.j]=V}function hn(p,W){p.i||(p.i={});var V=p.i[1];if(!V){var E=Qe(p);V=[];for(var O=0;O<E.length;O++)V[O]=new W(E[O]);p.i[1]=V}return V}function fe(p,W,V,E){var O=hn(p,V);W=W||new V,p=Qe(p),E!=null?(O.splice(E,0,W),p.splice(E,0,Lt(W))):(O.push(W),p.push(Lt(W)))}ve.prototype.toJSON=function(){var p=Lt(this);return Ie(p,Wn,pn)};function Lt(p,W){if(p.i)for(var V in p.i){var E=p.i[V];if(Array.isArray(E))for(var O=0;O<E.length;O++)E[O]&&Lt(E[O]);else E&&Lt(E)}return p.g}ve.prototype.toString=function(){return Lt(this).toString()};function Vt(p,W){return p=ie(p,W),p==null?0:p}function oe(p,W){return p=ie(p,W),p==null?"":p}function Fe(p,W){if(p=p.m){qe(W,W.g.end());for(var V=0;V<p.length;V++)qe(W,p[V])}}function te(p,W){if(W.h==4)return!1;var V=W.m;return xe(W),W.N||(W=Xn(W.g.h,V,W.g.g),(V=p.m)?V.push(W):p.m=[W]),!0}function se(p,W){var V=void 0;return new(V||(V=Promise))(function(E,O){function ot(bt){try{rt(W.next(bt))}catch(Rt){O(Rt)}}function z(bt){try{rt(W.throw(bt))}catch(Rt){O(Rt)}}function rt(bt){bt.done?E(bt.value):new V(function(Rt){Rt(bt.value)}).then(ot,z)}rt((W=W.apply(p,void 0)).next())})}function tt(p){ve.call(this,p)}dt(tt,ve);function it(p,W){for(;Mt(W);)switch(W.i){case 8:var V=Ve(W.g);Pt(p,1,V);break;case 21:V=ln(W.g),Pt(p,2,V);break;case 26:V=ye(W),Pt(p,3,V);break;case 34:V=ye(W),Pt(p,4,V);break;default:if(!te(p,W))return p}return p}function ut(p){ve.call(this,p,-1,_t)}dt(ut,ve),ut.prototype.addClassification=function(p,W){fe(this,p,tt,W)};var _t=[1];function de(p){ve.call(this,p)}dt(de,ve);function ue(p,W){for(;Mt(W);)switch(W.i){case 13:var V=ln(W.g);Pt(p,1,V);break;case 21:V=ln(W.g),Pt(p,2,V);break;case 29:V=ln(W.g),Pt(p,3,V);break;case 37:V=ln(W.g),Pt(p,4,V);break;case 45:V=ln(W.g),Pt(p,5,V);break;default:if(!te(p,W))return p}return p}function St(p){ve.call(this,p,-1,me)}dt(St,ve);var me=[1];function He(p){ve.call(this,p)}dt(He,ve);function tn(p,W,V){if(V=p.createShader(V===0?p.VERTEX_SHADER:p.FRAGMENT_SHADER),p.shaderSource(V,W),p.compileShader(V),!p.getShaderParameter(V,p.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
1
|
+
(function(Ue,Dn){typeof exports=="object"&&typeof module<"u"?Dn(exports):typeof define=="function"&&define.amd?define(["exports"],Dn):(Ue=typeof globalThis<"u"?globalThis:Ue||self,Dn(Ue["ml-transformers"]={}))})(this,function(Ue){"use strict";var _3=Object.defineProperty;var Q3=(Ue,Dn,jn)=>Dn in Ue?_3(Ue,Dn,{enumerable:!0,configurable:!0,writable:!0,value:jn}):Ue[Dn]=jn;var gt=(Ue,Dn,jn)=>(Q3(Ue,typeof Dn!="symbol"?Dn+"":Dn,jn),jn);function Dn(){return new Promise((i,n)=>{typeof MediaStreamTrackProcessor>"u"||typeof MediaStreamTrackGenerator>"u"?n("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):i()})}class jn{}jn.updates={transformer_new:"New transformer",transformer_null:"Null transformer"},jn.errors={transformer_none:"No transformers provided",transformer_start:"Cannot start transformer",transformer_transform:"Cannot transform frame",transformer_flush:"Cannot flush transformer",readable_null:"Readable is null",writable_null:"Writable is null"};function m2(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}const or=new WeakMap,ui=new WeakMap,jr=new WeakMap,mo=Symbol("anyProducer"),ps=Promise.resolve(),ai=Symbol("listenerAdded"),di=Symbol("listenerRemoved");let po=!1;function Yr(i){if(typeof i!="string"&&typeof i!="symbol")throw new TypeError("eventName must be a string or a symbol")}function hi(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function wr(i,n){const r=ui.get(i);return r.has(n)||r.set(n,new Set),r.get(n)}function Or(i,n){const r=typeof n=="string"||typeof n=="symbol"?n:mo,f=jr.get(i);return f.has(r)||f.set(r,new Set),f.get(r)}function p2(i,n,r){const f=jr.get(i);if(f.has(n))for(const Z of f.get(n))Z.enqueue(r);if(f.has(mo)){const Z=Promise.all([n,r]);for(const I of f.get(mo))I.enqueue(Z)}}function bs(i,n){n=Array.isArray(n)?n:[n];let r=!1,f=()=>{},Z=[];const I={enqueue(F){Z.push(F),f()},finish(){r=!0,f()}};for(const F of n)Or(i,F).add(I);return{async next(){return Z?Z.length===0?r?(Z=void 0,this.next()):(await new Promise(F=>{f=F}),this.next()):{done:!1,value:await Z.shift()}:{done:!0}},async return(F){Z=void 0;for(const T of n)Or(i,T).delete(I);return f(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function ys(i){if(i===void 0)return gs;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!gs.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const bo=i=>i===ai||i===di;class gr{static mixin(n,r){return r=ys(r),f=>{if(typeof f!="function")throw new TypeError("`target` must be function");for(const F of r)if(f.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function Z(){return Object.defineProperty(this,n,{enumerable:!1,value:new gr}),this[n]}Object.defineProperty(f.prototype,n,{enumerable:!1,get:Z});const I=F=>function(...T){return this[n][F](...T)};for(const F of r)Object.defineProperty(f.prototype,F,{enumerable:!1,value:I(F)});return f}}static get isDebugEnabled(){if(typeof process!="object")return po;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||po}static set isDebugEnabled(n){po=n}constructor(n={}){or.set(this,new Set),ui.set(this,new Map),jr.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(r,f,Z,I)=>{try{I=JSON.stringify(I)}catch{I=`Object with the following keys failed to stringify: ${Object.keys(I).join(",")}`}typeof Z=="symbol"&&(Z=Z.toString());const F=new Date,T=`${F.getHours()}:${F.getMinutes()}:${F.getSeconds()}.${F.getMilliseconds()}`;console.log(`[${T}][emittery:${r}][${f}] Event Name: ${Z}
|
|
2
|
+
data: ${I}`)})}logIfDebugEnabled(n,r,f){(gr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){hi(r),n=Array.isArray(n)?n:[n];for(const f of n)Yr(f),wr(this,f).add(r),this.logIfDebugEnabled("subscribe",f,void 0),bo(f)||this.emit(ai,{eventName:f,listener:r});return this.off.bind(this,n,r)}off(n,r){hi(r),n=Array.isArray(n)?n:[n];for(const f of n)Yr(f),wr(this,f).delete(r),this.logIfDebugEnabled("unsubscribe",f,void 0),bo(f)||this.emit(di,{eventName:f,listener:r})}once(n){return new Promise(r=>{const f=this.on(n,Z=>{f(),r(Z)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Yr(r);return bs(this,n)}async emit(n,r){Yr(n),this.logIfDebugEnabled("emit",n,r),p2(this,n,r);const f=wr(this,n),Z=or.get(this),I=[...f],F=bo(n)?[]:[...Z];await ps,await Promise.all([...I.map(async T=>{if(f.has(T))return T(r)}),...F.map(async T=>{if(Z.has(T))return T(n,r)})])}async emitSerial(n,r){Yr(n),this.logIfDebugEnabled("emitSerial",n,r);const f=wr(this,n),Z=or.get(this),I=[...f],F=[...Z];await ps;for(const T of I)f.has(T)&&await T(r);for(const T of F)Z.has(T)&&await T(n,r)}onAny(n){return hi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),or.get(this).add(n),this.emit(ai,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return bs(this)}offAny(n){hi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(di,{listener:n}),or.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"){wr(this,r).clear();const f=Or(this,r);for(const Z of f)Z.finish();f.clear()}else{or.get(this).clear();for(const f of ui.get(this).values())f.clear();for(const f of jr.get(this).values()){for(const Z of f)Z.finish();f.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const f of n){if(typeof f=="string"){r+=or.get(this).size+wr(this,f).size+Or(this,f).size+Or(this).size;continue}typeof f<"u"&&Yr(f),r+=or.get(this).size;for(const Z of ui.get(this).values())r+=Z.size;for(const Z of jr.get(this).values())r+=Z.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=ys(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const gs=Object.getOwnPropertyNames(gr.prototype).filter(i=>i!=="constructor");Object.defineProperty(gr,"listenerAdded",{value:ai,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(gr,"listenerRemoved",{value:di,writable:!1,enumerable:!0,configurable:!1});var b2=gr;const yo=m2(b2);function y2(i){return typeof i=="object"&&i!==null&&"message"in i&&typeof i.message=="string"}function g2(i){if(y2(i))return i;try{return new Error(JSON.stringify(i))}catch{return new Error(String(i))}}function go(i){return g2(i).message}var Z2=Object.defineProperty,v2=(i,n,r)=>n in i?Z2(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,G2=(i,n,r)=>(v2(i,typeof n!="symbol"?n+"":n,r),r);const X2="hlg.tokbox.com/prod/logging/vcp_webrtc",W2="https://",V2=1e4;let fi;const R2=new Uint8Array(16);function x2(){if(!fi&&(fi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!fi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return fi(R2)}const Un=[];for(let i=0;i<256;++i)Un.push((i+256).toString(16).slice(1));function I2(i,n=0){return(Un[i[n+0]]+Un[i[n+1]]+Un[i[n+2]]+Un[i[n+3]]+"-"+Un[i[n+4]]+Un[i[n+5]]+"-"+Un[i[n+6]]+Un[i[n+7]]+"-"+Un[i[n+8]]+Un[i[n+9]]+"-"+Un[i[n+10]]+Un[i[n+11]]+Un[i[n+12]]+Un[i[n+13]]+Un[i[n+14]]+Un[i[n+15]]).toLowerCase()}const S2=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Zs={randomUUID:S2};function T2(i,n,r){if(Zs.randomUUID&&!n&&!i)return Zs.randomUUID();i=i||{};const f=i.random||(i.rng||x2)();if(f[6]=f[6]&15|64,f[8]=f[8]&63|128,n){r=r||0;for(let Z=0;Z<16;++Z)n[r+Z]=f[Z];return n}return I2(f)}function Zo(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const sr=Zo("globals",{});var Zr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Zr||{});function vs(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let Y2=0;function w2(i,n,r,f,Z){const I=Y2++;return i.postMessage({id:I,type:n,functionName:r,args:f},f.filter(F=>vs(F))),new Promise(F=>{Z==null||Z.set(I,F)})}function Pr(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(I=>vs(I)))}const Gs=Zo("workerized",{});function Xs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function L2(){if(Xs())Pr({type:Zr.GLOBALS_SYNC},sr);else{const i=[];for(const n in Gs){const{worker:r,resolvers:f}=Gs[n].workerContext;r&&i.push(w2(r,Zr.GLOBALS_SYNC,"",[sr],f))}await Promise.all(i)}}function mi(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],mi(i[r],n[r])):typeof i[r]=="object"?(n[r]={},mi(i[r],n[r])):n[r]=i[r]}async function F2(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Pr(i,await n.instance[r](...f!=null?f:[]))}const C2=Zo("registeredWorkers",{});function H2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=C2[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;mi(f,sr),Pr(i,typeof n.instance!==void 0)}async function J2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),Pr(i,f)}function N2(i){if(!i.args)throw"Missing globals while syncing";mi(i.args[0],sr),Pr(i,{})}function k2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Zr.INIT:H2(r,i);break;case Zr.FORWARD:F2(r,i);break;case Zr.TERMINATE:J2(r,i);break;case Zr.GLOBALS_SYNC:N2(r);break}}}Xs()&&k2();function E2(i,n){return sr[i]||(sr[i]=n),[()=>sr[i],async r=>{sr[i]=r,await L2()}]}function U2(i,n){return E2(i,n)}const[B2,K2]=U2("metadata");function M2(i){K2(i)}function pi(){return B2()}class vo{constructor(n,r){G2(this,"uuid"),this.config=n,this.uuid=r!=null?r:T2()}async send(n){var r,f,Z;const{appId:I,sourceType:F}=(r=pi())!=null?r:{};if(!I||!F)return"metadata missing";const T=new AbortController,J=setTimeout(()=>T.abort(),V2);return await((Z=(f=this.config)==null?void 0:f.fetch)!=null?Z:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:T.signal}),clearTimeout(J),"success"}getUrl(){var n;let r=(n=pi().proxyUrl)!=null?n:W2;return r+=(r.at(-1)==="/"?"":"/")+X2,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=pi();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const bi="2.0.4";class A2{constructor(n,r){this.config=n,this.frameTransformedCount=0,this.frameFromSourceCount=0,this.startAt=0,this.reporter=new vo(n,r)}async onFrameFromSource(){this.frameFromSourceCount++}get fps(){const{startAt:n,frameFromSourceCount:r}=this,f=(Date.now()-n)/1e3;return r/f}async onFrameTransformed(n={},r=!1){this.startAt===0&&(this.startAt=Date.now()),this.frameTransformedCount++;const{startAt:f,frameTransformedCount:Z,frameFromSourceCount:I}=this,F=Date.now(),T=(F-f)/1e3,J=Z/T,et=I/T;return r||this.frameTransformedCount>=this.config.loggingIntervalFrameCount?(this.frameFromSourceCount=0,this.frameTransformedCount=0,this.startAt=F,this.reporter.config=this.config,this.reporter.send({...this.config.report,variation:"QoS",fps:et,transformedFps:J,framesTransformed:Z,...n})):"success"}}var Ws=(i=>(i.FPS_DROP="fps_drop",i))(Ws||{}),Vs=(i=>(i.start="start",i.transform="transform",i.flush="flush",i))(Vs||{}),yi=(i=>(i.pipeline_ended="pipeline_ended",i.pipeline_ended_with_error="pipeline_ended_with_error",i.pipeline_started="pipeline_started",i.pipeline_started_with_error="pipeline_started_with_error",i.pipeline_restarted="pipeline_restarted",i.pipeline_restarted_with_error="pipeline_restarted_with_error",i))(yi||{});const z2=500,j2=.8;class O2 extends yo{constructor(n,r){super(),this.reporter_=new vo,this.reporterQos_=new A2({loggingIntervalFrameCount:z2,report:{version:bi}}),this.index_=r,this.transformer_=n,this.shouldStop_=!1,this.isFlashed_=!1,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in n&&(this.transformerType_=n.getTransformerType()),this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n}async start(n){if(this.controller_=n,this.transformer_&&typeof this.transformer_.start=="function")try{await this.transformer_.start(n)}catch(r){this.report({message:jn.errors.transformer_start,variation:"Error",error:go(r)});const f={eventMetaData:{transformerIndex:this.index_},error:r,function:"start"};this.emit("error",f)}}async transform(n,r){var I,F;var f,Z;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(I=n==null?void 0:n.displayHeight)!=null?I:0,this.videoWidth_=(F=n==null?void 0:n.displayWidth)!=null?F:0),this.reporterQos_.onFrameFromSource(),this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),n.close(),this.flush(r),r.terminate();else{try{await((Z=(f=this.transformer_).transform)==null?void 0:Z.call(f,n,r)),this.reportQos()}catch(T){this.report({message:jn.errors.transformer_transform,variation:"Error",error:go(T)});const J={eventMetaData:{transformerIndex:this.index_},error:T,function:"transform"};this.emit("error",J)}if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*j2>this.reporterQos_.fps){const T={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:this.reporterQos_.fps}};this.emit("warn",T)}}}async flush(n){if(this.transformer_&&typeof this.transformer_.flush=="function"&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(n)}catch(r){this.report({message:jn.errors.transformer_flush,variation:"Error",error:go(r)});const f={eventMetaData:{transformerIndex:this.index_},error:r,function:"flush"};this.emit("error",f)}}this.reportQos(!0),this.report({variation:"Delete"})}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}report(n){this.reporter_.send({version:bi,action:"MediaTransformer",transformerType:this.transformerType_,...n})}reportQos(n=!1){this.reporterQos_.config={...this.reporterQos_.config},this.reporterQos_.onFrameTransformed({version:bi,action:"MediaTransformer",transformerType:this.transformerType_,videoWidth:this.videoWidth_,videoHeight:this.videoHeight_},n)}}class P2 extends yo{constructor(n){super(),this.transformers_=[],this.trackExpectedRate_=-1;for(let r=0;r<n.length;r++){let f=new O2(n[r],r);f.on("error",Z=>{this.emit("error",Z)}),f.on("warn",Z=>{this.emit("warn",Z)}),this.transformers_.push(f)}}setTrackExpectedRate(n){this.trackExpectedRate_=n;for(let r of this.transformers_)r.setTrackExpectedRate(this.trackExpectedRate_)}async start(n,r){if(!this.transformers_||this.transformers_.length===0){console.log("[Pipeline] No transformers.");return}try{let f=n;for(let Z of this.transformers_)n=n.pipeThrough(new TransformStream(Z));n.pipeTo(r).then(async()=>{console.log("[Pipeline] Setup."),await r.abort(),await f.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async Z=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(I=>{console.error("[Pipeline] Error from stream transform:",I)}),await r.abort(Z),await f.cancel(Z),this.emit("pipelineInfo","pipeline_ended_with_error")})}catch{this.emit("pipelineInfo","pipeline_started_with_error"),this.destroy();return}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let n of this.transformers_)n.stop()}}class _2 extends yo{constructor(){super(),this.reporter_=new vo,this.trackExpectedRate_=-1,this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(n,r){return this.readable_=n,this.writable_=r,this.transformInternal()}transformInternal(){return new Promise(async(n,r)=>{if(!this.transformers_||this.transformers_.length===0){this.report({message:jn.errors.transformer_none,variation:"Error"}),r("[MediaProcessor] Need to set transformers.");return}if(!this.readable_){this.report({variation:"Error",message:jn.errors.readable_null}),r("[MediaProcessor] Readable is null.");return}if(!this.writable_){this.report({variation:"Error",message:jn.errors.writable_null}),r("[MediaProcessor] Writable is null.");return}let f=!1;this.pipeline_&&(f=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new P2(this.transformers_),this.pipeline_.on("warn",Z=>{this.emit("warn",Z)}),this.pipeline_.on("error",Z=>{this.emit("error",Z)}),this.pipeline_.on("pipelineInfo",Z=>{f&&(Z==="pipeline_started"?Z=yi.pipeline_restarted:Z==="pipeline_started_with_error"&&(Z=yi.pipeline_restarted_with_error)),this.emit("pipelineInfo",Z)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(Z=>{r(Z)})})}setTransformers(n){return this.report({variation:"Update",message:jn.updates.transformer_new}),this.transformers_=n,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise(async n=>{this.pipeline_&&this.pipeline_.destroy(),this.report({variation:"Delete"}),n()})}report(n){this.reporter_.send({version:bi,action:"MediaProcessor",...n})}}class Q2{constructor(){this.processor_=null,this.generator_=null}init(n){return new Promise((r,f)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(Z){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${Z}`),f(Z)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):f("kind not supported")}catch(Z){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${Z}`),f(Z)}r()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class D2{constructor(n){this.insertableStreamHelper_=new Q2,this.mediaProcessor_=n}setTrack(n){return new Promise((r,f)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{r(this.insertableStreamHelper_.getProccesorTrack())}).catch(Z=>{f(Z)})}).catch(Z=>{f(Z)})})}destroy(){return new Promise((n,r)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(f=>{r(f)}):r("no processor")})}}var _r=(i=>(i.Low="Low",i.High="High",i))(_r||{}),Rs=(i=>(i.BackgroundBlur="BackgroundBlur",i.VirtualBackground="VirtualBackground",i.VideoBackground="VideoBackground",i.SilhouetteBlur="SilhouetteBlur",i))(Rs||{}),gi=(i=>(i.FAST="FAST",i.PRECISE="PRECISE",i))(gi||{}),Qr=(i=>(i.CANVAS="CANVAS",i.WEBGL="WEBGL",i))(Qr||{});const $2=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]));var q2=function(){var i=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var r=typeof n<"u"?n:{},f,Z;r.ready=new Promise(function(tt,it){f=tt,Z=it});var I={},F;for(F in r)r.hasOwnProperty(F)&&(I[F]=r[F]);var T="./this.program",J=function(tt,it){throw it},et=!0,lt="";function pt(tt){return r.locateFile?r.locateFile(tt,lt):lt+tt}var Yt;typeof document<"u"&&document.currentScript&&(lt=document.currentScript.src),i&&(lt=i),lt.indexOf("blob:")!==0?lt=lt.substr(0,lt.replace(/[?#].*/,"").lastIndexOf("/")+1):lt="";var Lt=r.print||console.log.bind(console),at=r.printErr||console.warn.bind(console);for(F in I)I.hasOwnProperty(F)&&(r[F]=I[F]);I=null,r.arguments&&r.arguments,r.thisProgram&&(T=r.thisProgram),r.quit&&(J=r.quit);var dt;r.wasmBinary&&(dt=r.wasmBinary);var Bt=r.noExitRuntime||!0;typeof WebAssembly!="object"&&he("no native wasm support detected");var kt,ee=!1,P=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function De(tt,it,ut){for(var _t=it+ut,de=it;tt[de]&&!(de>=_t);)++de;if(de-it>16&&tt.subarray&&P)return P.decode(tt.subarray(it,de));for(var ue="";it<de;){var St=tt[it++];if(!(St&128)){ue+=String.fromCharCode(St);continue}var me=tt[it++]&63;if((St&224)==192){ue+=String.fromCharCode((St&31)<<6|me);continue}var He=tt[it++]&63;if((St&240)==224?St=(St&15)<<12|me<<6|He:St=(St&7)<<18|me<<12|He<<6|tt[it++]&63,St<65536)ue+=String.fromCharCode(St);else{var tn=St-65536;ue+=String.fromCharCode(55296|tn>>10,56320|tn&1023)}}return ue}function ze(tt,it){return tt?De(Zt,tt,it):""}function We(tt,it,ut){for(var _t=0;_t<tt.length;++_t)ne[it++>>0]=tt.charCodeAt(_t);ut||(ne[it>>0]=0)}function zt(tt,it){return tt%it>0&&(tt+=it-tt%it),tt}var Hn,ne,Zt,$e;function An(tt){Hn=tt,r.HEAP8=ne=new Int8Array(tt),r.HEAP16=new Int16Array(tt),r.HEAP32=$e=new Int32Array(tt),r.HEAPU8=Zt=new Uint8Array(tt),r.HEAPU16=new Uint16Array(tt),r.HEAPU32=new Uint32Array(tt),r.HEAPF32=new Float32Array(tt),r.HEAPF64=new Float64Array(tt)}r.INITIAL_MEMORY;var Re,Ht=[],Te=[],sn=[],Gn=0;function Ln(){return Bt||Gn>0}function Rn(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)pn(r.preRun.shift());Qt(Ht)}function Jn(){Qt(Te)}function dn(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Fn(r.postRun.shift());Qt(sn)}function pn(tt){Ht.unshift(tt)}function kn(tt){Te.unshift(tt)}function Fn(tt){sn.unshift(tt)}var je=0,Me=null;function xn(tt){je++,r.monitorRunDependencies&&r.monitorRunDependencies(je)}function Xn(tt){if(je--,r.monitorRunDependencies&&r.monitorRunDependencies(je),je==0&&Me){var it=Me;Me=null,it()}}r.preloadedImages={},r.preloadedAudios={};function he(tt){r.onAbort&&r.onAbort(tt),tt="Aborted("+tt+")",at(tt),ee=!0,tt+=". Build with -s ASSERTIONS=1 for more info.";var it=new WebAssembly.RuntimeError(tt);throw Z(it),it}var Se="data:application/octet-stream;base64,";function Oe(tt){return tt.startsWith(Se)}var re;re="tflite-simd.wasm",Oe(re)||(re=pt(re));function Ve(tt){try{if(tt==re&&dt)return new Uint8Array(dt);if(!Yt)throw"both async and sync fetching of the wasm failed"}catch(it){he(it)}}function ln(){return!dt&&et&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(tt){if(!tt.ok)throw"failed to load wasm binary file at '"+re+"'";return tt.arrayBuffer()}).catch(function(){return Ve(re)}):Promise.resolve().then(function(){return Ve(re)})}function Be(){var tt={a:fe};function it(St,me){var He=St.exports;r.asm=He,kt=r.asm.q,An(kt.buffer),Re=r.asm.E,kn(r.asm.r),Xn()}xn();function ut(St){it(St.instance)}function _t(St){return ln().then(function(me){return WebAssembly.instantiate(me,tt)}).then(function(me){return me}).then(St,function(me){at("failed to asynchronously prepare wasm: "+me),he(me)})}function de(){return!dt&&typeof WebAssembly.instantiateStreaming=="function"&&!Oe(re)&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(St){var me=WebAssembly.instantiateStreaming(St,tt);return me.then(ut,function(He){return at("wasm streaming compile failed: "+He),at("falling back to ArrayBuffer instantiation"),_t(ut)})}):_t(ut)}if(r.instantiateWasm)try{var ue=r.instantiateWasm(tt,it);return ue}catch(St){return at("Module.instantiateWasm callback failed with error: "+St),!1}return de().catch(Z),{}}function Qt(tt){for(;tt.length>0;){var it=tt.shift();if(typeof it=="function"){it(r);continue}var ut=it.func;typeof ut=="number"?it.arg===void 0?Re.get(ut)():Re.get(ut)(it.arg):ut(it.arg===void 0?null:it.arg)}}function Ze(tt,it,ut,_t){he("Assertion failed: "+ze(tt)+", at: "+[it?ze(it):"unknown filename",ut,_t?ze(_t):"unknown function"])}function Ce(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Mt(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function xe(){he("")}var jt;jt=function(){return performance.now()};var ye=!0;function Ye(tt){return $e[Ct()>>2]=tt,tt}function qe(tt,it){var ut;if(tt===0)ut=Date.now();else if((tt===1||tt===4)&&ye)ut=jt();else return Ye(28),-1;return $e[it>>2]=ut/1e3|0,$e[it+4>>2]=ut%1e3*1e3*1e3|0,0}function Xe(){return 2147483648}function Ot(tt,it,ut){Zt.copyWithin(tt,it,it+ut)}function Ae(tt){try{return kt.grow(tt-Hn.byteLength+65535>>>16),An(kt.buffer),1}catch{}}function Pe(tt){var it=Zt.length;tt=tt>>>0;var ut=2147483648;if(tt>ut)return!1;for(var _t=1;_t<=4;_t*=2){var de=it*(1+.2/_t);de=Math.min(de,tt+100663296);var ue=Math.min(ut,zt(Math.max(tt,de),65536)),St=Ae(ue);if(St)return!0}return!1}function Ie(tt){for(var it=jt();jt()-it<tt;);}var Wn={};function cn(){return T||"./this.program"}function _e(){if(!_e.strings){var tt=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",it={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:tt,_:cn()};for(var ut in Wn)Wn[ut]===void 0?delete it[ut]:it[ut]=Wn[ut];var _t=[];for(var ut in it)_t.push(ut+"="+it[ut]);_e.strings=_t}return _e.strings}var un={mappings:{},buffers:[null,[],[]],printChar:function(tt,it){var ut=un.buffers[tt];it===0||it===10?((tt===1?Lt:at)(De(ut,0)),ut.length=0):ut.push(it)},varargs:void 0,get:function(){un.varargs+=4;var tt=$e[un.varargs-4>>2];return tt},getStr:function(tt){var it=ze(tt);return it},get64:function(tt,it){return tt}};function ve(tt,it){var ut=0;return _e().forEach(function(_t,de){var ue=it+ut;$e[tt+de*4>>2]=ue,We(_t,ue),ut+=_t.length+1}),0}function we(tt,it){var ut=_e();$e[tt>>2]=ut.length;var _t=0;return ut.forEach(function(de){_t+=de.length+1}),$e[it>>2]=_t,0}function Ge(tt){te(tt)}function ie(tt){return 0}function Qe(tt,it,ut,_t,de){}function qt(tt,it,ut,_t){for(var de=0,ue=0;ue<ut;ue++){for(var St=$e[it+ue*8>>2],me=$e[it+(ue*8+4)>>2],He=0;He<me;He++)un.printChar(tt,Zt[St+He]);de+=me}return $e[_t>>2]=de,0}function Pt(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var tt=new Uint8Array(1);return function(){return crypto.getRandomValues(tt),tt[0]}}else return function(){he("randomDevice")}}function hn(tt,it){hn.randomDevice||(hn.randomDevice=Pt());for(var ut=0;ut<it;ut++)ne[tt+ut>>0]=hn.randomDevice();return 0}var fe={a:Ze,e:Ce,d:Mt,b:xe,n:qe,h:Xe,l:Ot,m:Pe,p:Ie,f:ve,g:we,j:Ge,i:ie,k:Qe,c:qt,o:hn};Be(),r.___wasm_call_ctors=function(){return(r.___wasm_call_ctors=r.asm.r).apply(null,arguments)},r._getModelBufferMemoryOffset=function(){return(r._getModelBufferMemoryOffset=r.asm.s).apply(null,arguments)},r._getInputMemoryOffset=function(){return(r._getInputMemoryOffset=r.asm.t).apply(null,arguments)},r._getInputHeight=function(){return(r._getInputHeight=r.asm.u).apply(null,arguments)},r._getInputWidth=function(){return(r._getInputWidth=r.asm.v).apply(null,arguments)},r._getInputChannelCount=function(){return(r._getInputChannelCount=r.asm.w).apply(null,arguments)},r._getOutputMemoryOffset=function(){return(r._getOutputMemoryOffset=r.asm.x).apply(null,arguments)},r._getOutputHeight=function(){return(r._getOutputHeight=r.asm.y).apply(null,arguments)},r._getOutputWidth=function(){return(r._getOutputWidth=r.asm.z).apply(null,arguments)},r._getOutputChannelCount=function(){return(r._getOutputChannelCount=r.asm.A).apply(null,arguments)},r._loadModel=function(){return(r._loadModel=r.asm.B).apply(null,arguments)},r._runInference=function(){return(r._runInference=r.asm.C).apply(null,arguments)},r._isGPUEnabled=function(){return(r._isGPUEnabled=r.asm.D).apply(null,arguments)};var Ct=r.___errno_location=function(){return(Ct=r.___errno_location=r.asm.F).apply(null,arguments)},Vt;function oe(tt){this.name="ExitStatus",this.message="Program terminated with exit("+tt+")",this.status=tt}Me=function tt(){Vt||Le(),Vt||(Me=tt)};function Le(tt){if(je>0||(Rn(),je>0))return;function it(){Vt||(Vt=!0,r.calledRun=!0,!ee&&(Jn(),f(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),dn()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),it()},1)):it()}r.run=Le;function te(tt,it){se(tt)}function se(tt){Ln()||(r.onExit&&r.onExit(tt),ee=!0),J(tt,new oe(tt))}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return Le(),n.ready}}();class tc{constructor(){gt(this,"selectedTFLite");gt(this,"isSIMDSupported",!1);gt(this,"isThreadsSupported",!1);gt(this,"inputWidth",0);gt(this,"inputHeight",0);gt(this,"inputChannelCount",0);gt(this,"inputMemoryOffset",0);gt(this,"outputWidth",0);gt(this,"outputHeight",0);gt(this,"outputChannelCount",0);gt(this,"outputMemoryOffset",0)}}const ec="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",nc="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function rc(i=ec,n=nc){let r=new tc;var f=new Promise(function(Z,I){async function F(){return q2({locateFile:function(et){return i+et}})}async function T(J){return new Promise(async(et,lt)=>{const pt=J;if(typeof pt>"u")return lt("TFLite backend unavailable: wasmSimd");const Yt="selfie_segmentation_landscape";console.log("Loading tflite model:",Yt);let Lt=n+`${Yt}.tflite`;console.log("TFLite modelUrl: "+Lt);try{const dt=await(await fetch(Lt)).arrayBuffer();console.log("Model buffer size:",dt.byteLength);const Bt=pt._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Bt),console.log("Loading model buffer..."),pt.HEAPU8.set(new Uint8Array(dt),Bt);const kt=pt._loadModel(dt.byteLength);if(console.log("Load model result:",kt),kt!==0){lt("Cannot load model");return}r.inputWidth=pt._getInputWidth(),r.inputHeight=pt._getInputHeight(),r.inputChannelCount=pt._getInputChannelCount(),r.inputMemoryOffset=pt._getInputMemoryOffset(),console.log("Input memory offset:",r.inputMemoryOffset),console.log("Input height:",r.inputHeight),console.log("Input width:",r.inputWidth),console.log("Input channels:",r.inputChannelCount),r.outputMemoryOffset=pt._getOutputMemoryOffset(),r.outputWidth=pt._getOutputWidth(),r.outputHeight=pt._getOutputHeight(),r.outputChannelCount=pt._getOutputChannelCount(),console.log("Output memory offset:",r.outputMemoryOffset),console.log("Output height:",r.outputHeight),console.log("Output width:",r.outputWidth),console.log("Output channels:",r.outputChannelCount),r.selectedTFLite=pt}catch(at){lt(at);return}et()})}F().then(J=>{if(J===null)throw console.error("loadTFLite null"),"loadTFLite null";T(J).then(et=>{Z(r)}).catch(et=>{console.error("loadTFLiteModel error"),I("loadTFLiteModel error")})}).catch(J=>{console.error("loadTFLite error:",J),I("loadTFLite error:"+J)})});return f}class xs{constructor(){gt(this,"canvas",new OffscreenCanvas(0,0));gt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0}));gt(this,"pixelCount",0);gt(this,"inputOffset",0);gt(this,"outputOffset",0);gt(this,"infos");gt(this,"mask")}async init(n,r){await this.initWasm(n,r),this.infos&&(this.canvas.width=this.infos.inputWidth,this.canvas.height=this.infos.inputHeight,this.pixelCount=this.infos.inputWidth*this.infos.inputHeight,this.mask=new ImageData(this.infos.inputWidth,this.infos.inputHeight),this.inputOffset=this.infos.inputMemoryOffset/4,this.outputOffset=this.infos.outputMemoryOffset/4)}async initWasm(n,r){this.infos=await rc(n,r)}getOutputDimensions(){var n,r,f,Z;return{width:(r=(n=this.infos)==null?void 0:n.outputWidth)!=null?r:0,height:(Z=(f=this.infos)==null?void 0:f.outputHeight)!=null?Z:0}}async process(n){if(!this.mask||!this.infos)return;const r=this.infos.inputWidth,f=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,r,f);const Z=this.context.getImageData(0,0,r,f),I=this.infos.selectedTFLite.HEAPF32;for(let F=0;F<this.pixelCount;F++){const T=this.inputOffset+F*3;I[T]=Z.data[F*4]/255,I[T+1]=Z.data[F*4+1]/255,I[T+2]=Z.data[F*4+2]/255}this.infos.selectedTFLite._runInference();for(let F=0;F<this.pixelCount;F++){const T=this.infos.selectedTFLite.HEAPF32[this.outputOffset+F];this.mask.data[F*4]=this.mask.data[F*4+3]=255*T}return createImageBitmap(this.mask)}isGpuSupported(){var n,r,f;return(f=(r=(n=this.infos)==null?void 0:n.selectedTFLite)==null?void 0:r._isGPUEnabled())!=null?f:!1}}async function ic(i,n){const{wasm:r,insertableStreams:f,simd:Z,webgl:I}=await Is(i,n);if(!r.supported)throw r.message;if(!f.supported)throw f.message;if(!Z.supported)throw Z.message;if(!I.supported)throw I.message}async function Is(i,n){const r=new xs;await r.initWasm(i,n);const f={wasm:{supported:typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function",message:"Your browser does not support WebAssembly features."},simd:{supported:await $2(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:r.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:oc(),performance:Ss()};try{await Dn()}catch(Z){f.insertableStreams.supported=!1,f.insertableStreams.message=Z}return f}function oc(){return OffscreenCanvas?new OffscreenCanvas(0,0).getContext("webgl2")?{supported:!0}:{supported:!1,message:"Your browser does not support webgl 2"}:{supported:!1,message:"Your browser does not support offscreen canvas"}}function Ss(){return new OffscreenCanvas(0,0).getContext("webgl2",{failIfMajorPerformanceCaveat:!0})?{supported:!0}:{supported:!1,message:"Your hardware does not perform good enough to run the library efficiently"}}const Zi={};(function(){var i;function n(p){var W=0;return function(){return W<p.length?{done:!1,value:p[W++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(p,W,V){return p==Array.prototype||p==Object.prototype||(p[W]=V.value),p};function f(p){p=[typeof globalThis=="object"&&globalThis,p,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var W=0;W<p.length;++W){var V=p[W];if(V&&V.Math==Math)return V}throw Error("Cannot find global object")}var Z=f(this);function I(p,W){if(W)t:{var V=Z;p=p.split(".");for(var E=0;E<p.length-1;E++){var O=p[E];if(!(O in V))break t;V=V[O]}p=p[p.length-1],E=V[p],W=W(E),W!=E&&W!=null&&r(V,p,{configurable:!0,writable:!0,value:W})}}I("Symbol",function(p){function W(ot){if(this instanceof W)throw new TypeError("Symbol is not a constructor");return new V(E+(ot||"")+"_"+O++,ot)}function V(ot,j){this.g=ot,r(this,"description",{configurable:!0,writable:!0,value:j})}if(p)return p;V.prototype.toString=function(){return this.g};var E="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",O=0;return W}),I("Symbol.iterator",function(p){if(p)return p;p=Symbol("Symbol.iterator");for(var W="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),V=0;V<W.length;V++){var E=Z[W[V]];typeof E=="function"&&typeof E.prototype[p]!="function"&&r(E.prototype,p,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return p});function F(p){return p={next:p},p[Symbol.iterator]=function(){return this},p}function T(p){var W=typeof Symbol<"u"&&Symbol.iterator&&p[Symbol.iterator];return W?W.call(p):{next:n(p)}}function J(p){if(!(p instanceof Array)){p=T(p);for(var W,V=[];!(W=p.next()).done;)V.push(W.value);p=V}return p}var et=typeof Object.create=="function"?Object.create:function(p){function W(){}return W.prototype=p,new W},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(p,W){if(p.__proto__=W,p.__proto__!==W)throw new TypeError(p+" is not extensible");return p}:null}var at=lt;function dt(p,W){if(p.prototype=et(W.prototype),p.prototype.constructor=p,at)at(p,W);else for(var V in W)if(V!="prototype")if(Object.defineProperties){var E=Object.getOwnPropertyDescriptor(W,V);E&&Object.defineProperty(p,V,E)}else p[V]=W[V];p.ea=W.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(p){if(p.l)throw new TypeError("Generator is already running");p.l=!0}Bt.prototype.o=function(p){this.h=p};function ee(p,W){p.j={U:W,V:!0},p.g=p.m||p.s}Bt.prototype.return=function(p){this.j={return:p},this.g=this.s};function P(p,W,V){return p.g=V,{value:W}}function De(p){this.g=new Bt,this.h=p}function ze(p,W){kt(p.g);var V=p.g.i;return V?We(p,"return"in V?V.return:function(E){return{value:E,done:!0}},W,p.g.return):(p.g.return(W),zt(p))}function We(p,W,V,E){try{var O=W.call(p.g.i,V);if(!(O instanceof Object))throw new TypeError("Iterator result "+O+" is not an object");if(!O.done)return p.g.l=!1,O;var ot=O.value}catch(j){return p.g.i=null,ee(p.g,j),zt(p)}return p.g.i=null,E.call(p.g,ot),zt(p)}function zt(p){for(;p.g.g;)try{var W=p.h(p.g);if(W)return p.g.l=!1,{value:W.value,done:!1}}catch(V){p.g.h=void 0,ee(p.g,V)}if(p.g.l=!1,p.g.j){if(W=p.g.j,p.g.j=null,W.V)throw W.U;return{value:W.return,done:!0}}return{value:void 0,done:!0}}function Hn(p){this.next=function(W){return kt(p.g),p.g.i?W=We(p,p.g.i.next,W,p.g.o):(p.g.o(W),W=zt(p)),W},this.throw=function(W){return kt(p.g),p.g.i?W=We(p,p.g.i.throw,W,p.g.o):(ee(p.g,W),W=zt(p)),W},this.return=function(W){return ze(p,W)},this[Symbol.iterator]=function(){return this}}function ne(p,W){return W=new Hn(new De(W)),at&&p.prototype&&at(W,p.prototype),W}function Zt(p,W){p instanceof String&&(p+="");var V=0,E=!1,O={next:function(){if(!E&&V<p.length){var ot=V++;return{value:W(ot,p[ot]),done:!1}}return E=!0,{done:!0,value:void 0}}};return O[Symbol.iterator]=function(){return O},O}var $e=typeof Object.assign=="function"?Object.assign:function(p,W){for(var V=1;V<arguments.length;V++){var E=arguments[V];if(E)for(var O in E)Object.prototype.hasOwnProperty.call(E,O)&&(p[O]=E[O])}return p};I("Object.assign",function(p){return p||$e}),I("Promise",function(p){function W(j){this.h=0,this.i=void 0,this.g=[],this.o=!1;var rt=this.j();try{j(rt.resolve,rt.reject)}catch(bt){rt.reject(bt)}}function V(){this.g=null}function E(j){return j instanceof W?j:new W(function(rt){rt(j)})}if(p)return p;V.prototype.h=function(j){if(this.g==null){this.g=[];var rt=this;this.i(function(){rt.l()})}this.g.push(j)};var O=Z.setTimeout;V.prototype.i=function(j){O(j,0)},V.prototype.l=function(){for(;this.g&&this.g.length;){var j=this.g;this.g=[];for(var rt=0;rt<j.length;++rt){var bt=j[rt];j[rt]=null;try{bt()}catch(Rt){this.j(Rt)}}}this.g=null},V.prototype.j=function(j){this.i(function(){throw j})},W.prototype.j=function(){function j(Rt){return function(Ut){bt||(bt=!0,Rt.call(rt,Ut))}}var rt=this,bt=!1;return{resolve:j(this.C),reject:j(this.l)}},W.prototype.C=function(j){if(j===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(j instanceof W)this.F(j);else{t:switch(typeof j){case"object":var rt=j!=null;break t;case"function":rt=!0;break t;default:rt=!1}rt?this.u(j):this.m(j)}},W.prototype.u=function(j){var rt=void 0;try{rt=j.then}catch(bt){this.l(bt);return}typeof rt=="function"?this.G(rt,j):this.m(j)},W.prototype.l=function(j){this.s(2,j)},W.prototype.m=function(j){this.s(1,j)},W.prototype.s=function(j,rt){if(this.h!=0)throw Error("Cannot settle("+j+", "+rt+"): Promise already settled in state"+this.h);this.h=j,this.i=rt,this.h===2&&this.D(),this.A()},W.prototype.D=function(){var j=this;O(function(){if(j.B()){var rt=Z.console;typeof rt<"u"&&rt.error(j.i)}},1)},W.prototype.B=function(){if(this.o)return!1;var j=Z.CustomEvent,rt=Z.Event,bt=Z.dispatchEvent;return typeof bt>"u"?!0:(typeof j=="function"?j=new j("unhandledrejection",{cancelable:!0}):typeof rt=="function"?j=new rt("unhandledrejection",{cancelable:!0}):(j=Z.document.createEvent("CustomEvent"),j.initCustomEvent("unhandledrejection",!1,!0,j)),j.promise=this,j.reason=this.i,bt(j))},W.prototype.A=function(){if(this.g!=null){for(var j=0;j<this.g.length;++j)ot.h(this.g[j]);this.g=null}};var ot=new V;return W.prototype.F=function(j){var rt=this.j();j.J(rt.resolve,rt.reject)},W.prototype.G=function(j,rt){var bt=this.j();try{j.call(rt,bt.resolve,bt.reject)}catch(Rt){bt.reject(Rt)}},W.prototype.then=function(j,rt){function bt($t,Nt){return typeof $t=="function"?function(Tt){try{Rt($t(Tt))}catch(Et){Ut(Et)}}:Nt}var Rt,Ut,Jt=new W(function($t,Nt){Rt=$t,Ut=Nt});return this.J(bt(j,Rt),bt(rt,Ut)),Jt},W.prototype.catch=function(j){return this.then(void 0,j)},W.prototype.J=function(j,rt){function bt(){switch(Rt.h){case 1:j(Rt.i);break;case 2:rt(Rt.i);break;default:throw Error("Unexpected state: "+Rt.h)}}var Rt=this;this.g==null?ot.h(bt):this.g.push(bt),this.o=!0},W.resolve=E,W.reject=function(j){return new W(function(rt,bt){bt(j)})},W.race=function(j){return new W(function(rt,bt){for(var Rt=T(j),Ut=Rt.next();!Ut.done;Ut=Rt.next())E(Ut.value).J(rt,bt)})},W.all=function(j){var rt=T(j),bt=rt.next();return bt.done?E([]):new W(function(Rt,Ut){function Jt(Tt){return function(Et){$t[Tt]=Et,Nt--,Nt==0&&Rt($t)}}var $t=[],Nt=0;do $t.push(void 0),Nt++,E(bt.value).J(Jt($t.length-1),Ut),bt=rt.next();while(!bt.done)})},W}),I("Object.is",function(p){return p||function(W,V){return W===V?W!==0||1/W===1/V:W!==W&&V!==V}}),I("Array.prototype.includes",function(p){return p||function(W,V){var E=this;E instanceof String&&(E=String(E));var O=E.length;for(V=V||0,0>V&&(V=Math.max(V+O,0));V<O;V++){var ot=E[V];if(ot===W||Object.is(ot,W))return!0}return!1}}),I("String.prototype.includes",function(p){return p||function(W,V){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(W instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(W,V||0)!==-1}}),I("Array.prototype.keys",function(p){return p||function(){return Zt(this,function(W){return W})}});var An=this||self;function Re(p,W){p=p.split(".");var V=An;p[0]in V||typeof V.execScript>"u"||V.execScript("var "+p[0]);for(var E;p.length&&(E=p.shift());)p.length||W===void 0?V[E]&&V[E]!==Object.prototype[E]?V=V[E]:V=V[E]={}:V[E]=W}function Ht(p,W){return W=String.fromCharCode.apply(null,W),p==null?W:p+W}var Te,sn=typeof TextDecoder<"u",Gn,Ln=typeof TextEncoder<"u";function Rn(p){if(Ln)p=(Gn||(Gn=new TextEncoder)).encode(p);else{var W=void 0;W=W===void 0?!1:W;for(var V=0,E=new Uint8Array(3*p.length),O=0;O<p.length;O++){var ot=p.charCodeAt(O);if(128>ot)E[V++]=ot;else{if(2048>ot)E[V++]=ot>>6|192;else{if(55296<=ot&&57343>=ot){if(56319>=ot&&O<p.length){var j=p.charCodeAt(++O);if(56320<=j&&57343>=j){ot=1024*(ot-55296)+j-56320+65536,E[V++]=ot>>18|240,E[V++]=ot>>12&63|128,E[V++]=ot>>6&63|128,E[V++]=ot&63|128;continue}else O--}if(W)throw Error("Found an unpaired surrogate");ot=65533}E[V++]=ot>>12|224,E[V++]=ot>>6&63|128}E[V++]=ot&63|128}}p=E.subarray(0,V)}return p}var Jn={},dn=null;function pn(p,W){W===void 0&&(W=0),je(),W=Jn[W];for(var V=Array(Math.floor(p.length/3)),E=W[64]||"",O=0,ot=0;O<p.length-2;O+=3){var j=p[O],rt=p[O+1],bt=p[O+2],Rt=W[j>>2];j=W[(j&3)<<4|rt>>4],rt=W[(rt&15)<<2|bt>>6],bt=W[bt&63],V[ot++]=Rt+j+rt+bt}switch(Rt=0,bt=E,p.length-O){case 2:Rt=p[O+1],bt=W[(Rt&15)<<2]||E;case 1:p=p[O],V[ot]=W[p>>2]+W[(p&3)<<4|Rt>>4]+bt+E}return V.join("")}function kn(p){var W=p.length,V=3*W/4;V%3?V=Math.floor(V):"=.".indexOf(p[W-1])!=-1&&(V="=.".indexOf(p[W-2])!=-1?V-2:V-1);var E=new Uint8Array(V),O=0;return Fn(p,function(ot){E[O++]=ot}),E.subarray(0,O)}function Fn(p,W){function V(bt){for(;E<p.length;){var Rt=p.charAt(E++),Ut=dn[Rt];if(Ut!=null)return Ut;if(!/^[\s\xa0]*$/.test(Rt))throw Error("Unknown base64 encoding at char: "+Rt)}return bt}je();for(var E=0;;){var O=V(-1),ot=V(0),j=V(64),rt=V(64);if(rt===64&&O===-1)break;W(O<<2|ot>>4),j!=64&&(W(ot<<4&240|j>>2),rt!=64&&W(j<<6&192|rt))}}function je(){if(!dn){dn={};for(var p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),W=["+/=","+/","-_=","-_.","-_"],V=0;5>V;V++){var E=p.concat(W[V].split(""));Jn[V]=E;for(var O=0;O<E.length;O++){var ot=E[O];dn[ot]===void 0&&(dn[ot]=O)}}}}var Me=typeof Uint8Array.prototype.slice=="function",xn;function Xn(p,W,V){return W===V?xn||(xn=new Uint8Array(0)):Me?p.slice(W,V):new Uint8Array(p.subarray(W,V))}var he=0,Se=0;function Oe(p,W){W=W===void 0?{}:W,W=W.v===void 0?!1:W.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=W,p&&re(this,p)}function re(p,W){W=W.constructor===Uint8Array?W:W.constructor===ArrayBuffer?new Uint8Array(W):W.constructor===Array?new Uint8Array(W):W.constructor===String?kn(W):W instanceof Uint8Array?new Uint8Array(W.buffer,W.byteOffset,W.byteLength):new Uint8Array(0),p.h=W,p.j=0,p.i=p.h.length,p.g=p.j}Oe.prototype.reset=function(){this.g=this.j};function Ve(p){var W=p.h,V=W[p.g],E=V&127;return 128>V?(p.g+=1,E):(V=W[p.g+1],E|=(V&127)<<7,128>V?(p.g+=2,E):(V=W[p.g+2],E|=(V&127)<<14,128>V?(p.g+=3,E):(V=W[p.g+3],E|=(V&127)<<21,128>V?(p.g+=4,E):(V=W[p.g+4],E|=(V&15)<<28,128>V?(p.g+=5,E>>>0):(p.g+=5,128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&p.g++,E)))))}function ln(p){var W=p.h[p.g],V=p.h[p.g+1],E=p.h[p.g+2],O=p.h[p.g+3];return p.g+=4,V=(W<<0|V<<8|E<<16|O<<24)>>>0,p=2*(V>>31)+1,W=V>>>23&255,V&=8388607,W==255?V?NaN:1/0*p:W==0?p*Math.pow(2,-149)*V:p*Math.pow(2,W-150)*(V+Math.pow(2,23))}var Be=[];function Qt(){this.g=new Uint8Array(64),this.h=0}Qt.prototype.push=function(p){if(!(this.h+1<this.g.length)){var W=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(W)}this.g[this.h++]=p},Qt.prototype.length=function(){return this.h},Qt.prototype.end=function(){var p=this.g,W=this.h;return this.h=0,Xn(p,0,W)};function Ze(p,W){for(;127<W;)p.push(W&127|128),W>>>=7;p.push(W)}function Ce(p){var W={},V=W.N===void 0?!1:W.N;this.o={v:W.v===void 0?!1:W.v},this.N=V,W=this.o,Be.length?(V=Be.pop(),W&&(V.v=W.v),p&&re(V,p),p=V):p=new Oe(p,W),this.g=p,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ce.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Mt(p){var W=p.g;if((W=W.g==W.i)||(W=p.j)||(W=p.g,W=W.l||0>W.g||W.g>W.i),W)return!1;p.m=p.g.g,W=Ve(p.g);var V=W&7;return V!=0&&V!=5&&V!=1&&V!=2&&V!=3&&V!=4?(p.j=!0,!1):(p.i=W,p.l=W>>>3,p.h=V,!0)}function xe(p){switch(p.h){case 0:if(p.h!=0)xe(p);else{for(p=p.g;p.h[p.g]&128;)p.g++;p.g++}break;case 1:p.h!=1?xe(p):(p=p.g,p.g+=8);break;case 2:if(p.h!=2)xe(p);else{var W=Ve(p.g);p=p.g,p.g+=W}break;case 5:p.h!=5?xe(p):(p=p.g,p.g+=4);break;case 3:W=p.l;do{if(!Mt(p)){p.j=!0;break}if(p.h==4){p.l!=W&&(p.j=!0);break}xe(p)}while(1);break;default:p.j=!0}}function jt(p,W,V){var E=p.g.i,O=Ve(p.g);return O=p.g.g+O,p.g.i=O,V(W,p),p.g.g=O,p.g.i=E,W}function ye(p){var W=Ve(p.g);p=p.g;var V=p.g;p.g+=W,p=p.h;var E;if(sn)(E=Te)||(E=Te=new TextDecoder("utf-8",{fatal:!1})),E=E.decode(p.subarray(V,V+W));else{W=V+W;for(var O=[],ot=null,j,rt,bt;V<W;)j=p[V++],128>j?O.push(j):224>j?V>=W?O.push(65533):(rt=p[V++],194>j||(rt&192)!==128?(V--,O.push(65533)):O.push((j&31)<<6|rt&63)):240>j?V>=W-1?O.push(65533):(rt=p[V++],(rt&192)!==128||j===224&&160>rt||j===237&&160<=rt||((E=p[V++])&192)!==128?(V--,O.push(65533)):O.push((j&15)<<12|(rt&63)<<6|E&63)):244>=j?V>=W-2?O.push(65533):(rt=p[V++],(rt&192)!==128||(j<<28)+(rt-144)>>30!==0||((E=p[V++])&192)!==128||((bt=p[V++])&192)!==128?(V--,O.push(65533)):(j=(j&7)<<18|(rt&63)<<12|(E&63)<<6|bt&63,j-=65536,O.push((j>>10&1023)+55296,(j&1023)+56320))):O.push(65533),8192<=O.length&&(ot=Ht(ot,O),O.length=0);E=Ht(ot,O)}return E}function Ye(){this.h=[],this.i=0,this.g=new Qt}function qe(p,W){W.length!==0&&(p.h.push(W),p.i+=W.length)}function Xe(p){var W=p.i+p.g.length();if(W===0)return new Uint8Array(0);W=new Uint8Array(W);for(var V=p.h,E=V.length,O=0,ot=0;ot<E;ot++){var j=V[ot];j.length!==0&&(W.set(j,O),O+=j.length)}return V=p.g,E=V.h,E!==0&&(W.set(V.g.subarray(0,E),O),V.h=0),p.h=[W],W}function Ot(p,W,V){if(V!=null){Ze(p.g,8*W+5),p=p.g;var E=V;E=(V=0>E?1:0)?-E:E,E===0?0<1/E?he=Se=0:(Se=0,he=2147483648):isNaN(E)?(Se=0,he=2147483647):34028234663852886e22<E?(Se=0,he=(V<<31|2139095040)>>>0):11754943508222875e-54>E?(E=Math.round(E/Math.pow(2,-149)),Se=0,he=(V<<31|E)>>>0):(W=Math.floor(Math.log(E)/Math.LN2),E*=Math.pow(2,-W),E=Math.round(8388608*E)&8388607,Se=0,he=(V<<31|W+127<<23|E)>>>0),V=he,p.push(V>>>0&255),p.push(V>>>8&255),p.push(V>>>16&255),p.push(V>>>24&255)}}var Ae=typeof Uint8Array=="function";function Pe(p,W,V){if(p!=null)return typeof p=="object"?Ae&&p instanceof Uint8Array?V(p):Ie(p,W,V):W(p)}function Ie(p,W,V){if(Array.isArray(p)){for(var E=Array(p.length),O=0;O<p.length;O++)E[O]=Pe(p[O],W,V);return Array.isArray(p)&&p.W&&_e(E),E}E={};for(O in p)E[O]=Pe(p[O],W,V);return E}function Wn(p){return typeof p=="number"?isFinite(p)?p:String(p):p}var cn={W:{value:!0,configurable:!0}};function _e(p){return Array.isArray(p)&&!Object.isFrozen(p)&&Object.defineProperties(p,cn),p}var un;function ve(p,W,V){var E=un;un=null,p||(p=E),E=this.constructor.ca,p||(p=E?[E]:[]),this.j=E?0:-1,this.i=null,this.g=p;t:{if(E=this.g.length,p=E-1,E&&(E=this.g[p],E!==null&&typeof E=="object"&&E.constructor===Object)){this.l=p-this.j,this.h=E;break t}W!==void 0&&-1<W?(this.l=Math.max(W,p+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(V)for(W=0;W<V.length;W++)p=V[W],p<this.l?(p+=this.j,(E=this.g[p])?_e(E):this.g[p]=we):(Ge(this),(E=this.h[p])?_e(E):this.h[p]=we)}var we=Object.freeze(_e([]));function Ge(p){var W=p.l+p.j;p.g[W]||(p.h=p.g[W]={})}function ie(p,W,V){return W===-1?null:(V===void 0?0:V)||W>=p.l?p.h?p.h[W]:void 0:p.g[W+p.j]}function Qe(p){var W=W===void 0?!1:W,V=ie(p,1,W);return V==null&&(V=we),V===we&&(V=_e([]),Pt(p,1,V,W)),V}function qt(p,W,V){return p=ie(p,W),p=p==null?p:+p,p==null?V===void 0?0:V:p}function Pt(p,W,V,E){(E===void 0?0:E)||W>=p.l?(Ge(p),p.h[W]=V):p.g[W+p.j]=V}function hn(p,W){p.i||(p.i={});var V=p.i[1];if(!V){var E=Qe(p);V=[];for(var O=0;O<E.length;O++)V[O]=new W(E[O]);p.i[1]=V}return V}function fe(p,W,V,E){var O=hn(p,V);W=W||new V,p=Qe(p),E!=null?(O.splice(E,0,W),p.splice(E,0,Ct(W))):(O.push(W),p.push(Ct(W)))}ve.prototype.toJSON=function(){var p=Ct(this);return Ie(p,Wn,pn)};function Ct(p,W){if(p.i)for(var V in p.i){var E=p.i[V];if(Array.isArray(E))for(var O=0;O<E.length;O++)E[O]&&Ct(E[O]);else E&&Ct(E)}return p.g}ve.prototype.toString=function(){return Ct(this).toString()};function Vt(p,W){return p=ie(p,W),p==null?0:p}function oe(p,W){return p=ie(p,W),p==null?"":p}function Le(p,W){if(p=p.m){qe(W,W.g.end());for(var V=0;V<p.length;V++)qe(W,p[V])}}function te(p,W){if(W.h==4)return!1;var V=W.m;return xe(W),W.N||(W=Xn(W.g.h,V,W.g.g),(V=p.m)?V.push(W):p.m=[W]),!0}function se(p,W){var V=void 0;return new(V||(V=Promise))(function(E,O){function ot(bt){try{rt(W.next(bt))}catch(Rt){O(Rt)}}function j(bt){try{rt(W.throw(bt))}catch(Rt){O(Rt)}}function rt(bt){bt.done?E(bt.value):new V(function(Rt){Rt(bt.value)}).then(ot,j)}rt((W=W.apply(p,void 0)).next())})}function tt(p){ve.call(this,p)}dt(tt,ve);function it(p,W){for(;Mt(W);)switch(W.i){case 8:var V=Ve(W.g);Pt(p,1,V);break;case 21:V=ln(W.g),Pt(p,2,V);break;case 26:V=ye(W),Pt(p,3,V);break;case 34:V=ye(W),Pt(p,4,V);break;default:if(!te(p,W))return p}return p}function ut(p){ve.call(this,p,-1,_t)}dt(ut,ve),ut.prototype.addClassification=function(p,W){fe(this,p,tt,W)};var _t=[1];function de(p){ve.call(this,p)}dt(de,ve);function ue(p,W){for(;Mt(W);)switch(W.i){case 13:var V=ln(W.g);Pt(p,1,V);break;case 21:V=ln(W.g),Pt(p,2,V);break;case 29:V=ln(W.g),Pt(p,3,V);break;case 37:V=ln(W.g),Pt(p,4,V);break;case 45:V=ln(W.g),Pt(p,5,V);break;default:if(!te(p,W))return p}return p}function St(p){ve.call(this,p,-1,me)}dt(St,ve);var me=[1];function He(p){ve.call(this,p)}dt(He,ve);function tn(p,W,V){if(V=p.createShader(V===0?p.VERTEX_SHADER:p.FRAGMENT_SHADER),p.shaderSource(V,W),p.compileShader(V),!p.getShaderParameter(V,p.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
3
3
|
|
|
4
|
-
`+p.getShaderInfoLog(V));return V}function en(p){return hn(p,tt).map(function(W){return{index:Vt(W,1),Y:qt(W,2),label:ie(W,3)!=null?oe(W,3):void 0,displayName:ie(W,4)!=null?oe(W,4):void 0}})}function fn(p){return{x:qt(p,1),y:qt(p,2),z:qt(p,3),visibility:ie(p,4)!=null?qt(p,4):void 0}}function bn(p,W){this.h=p,this.g=W,this.l=0}function
|
|
4
|
+
`+p.getShaderInfoLog(V));return V}function en(p){return hn(p,tt).map(function(W){return{index:Vt(W,1),Y:qt(W,2),label:ie(W,3)!=null?oe(W,3):void 0,displayName:ie(W,4)!=null?oe(W,4):void 0}})}function fn(p){return{x:qt(p,1),y:qt(p,2),z:qt(p,3),visibility:ie(p,4)!=null?qt(p,4):void 0}}function bn(p,W){this.h=p,this.g=W,this.l=0}function Fe(p,W,V){return nn(p,W),typeof p.g.canvas.transferToImageBitmap=="function"?Promise.resolve(p.g.canvas.transferToImageBitmap()):V?Promise.resolve(p.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(p.g.canvas):(p.i===void 0&&(p.i=document.createElement("canvas")),new Promise(function(E){p.i.height=p.g.canvas.height,p.i.width=p.g.canvas.width,p.i.getContext("2d",{}).drawImage(p.g.canvas,0,0,p.g.canvas.width,p.g.canvas.height),E(p.i)}))}function nn(p,W){var V=p.g;if(p.m===void 0){var E=tn(V,`
|
|
5
5
|
attribute vec2 aVertex;
|
|
6
6
|
attribute vec2 aTex;
|
|
7
7
|
varying vec2 vTex;
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
17
17
|
}`,1),ot=V.createProgram();if(V.attachShader(ot,E),V.attachShader(ot,O),V.linkProgram(ot),!V.getProgramParameter(ot,V.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
18
18
|
|
|
19
|
-
`+V.getProgramInfoLog(ot));E=p.m=ot,V.useProgram(E),O=V.getUniformLocation(E,"sampler0"),p.j={I:V.getAttribLocation(E,"aVertex"),H:V.getAttribLocation(E,"aTex"),da:O},p.s=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,p.s),V.enableVertexAttribArray(p.j.I),V.vertexAttribPointer(p.j.I,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),p.o=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,p.o),V.enableVertexAttribArray(p.j.H),V.vertexAttribPointer(p.j.H,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),V.uniform1i(O,0)}E=p.j,V.useProgram(p.m),V.canvas.width=W.width,V.canvas.height=W.height,V.viewport(0,0,W.width,W.height),V.activeTexture(V.TEXTURE0),p.h.bindTexture2d(W.glName),V.enableVertexAttribArray(E.I),V.bindBuffer(V.ARRAY_BUFFER,p.s),V.vertexAttribPointer(E.I,2,V.FLOAT,!1,0,0),V.enableVertexAttribArray(E.H),V.bindBuffer(V.ARRAY_BUFFER,p.o),V.vertexAttribPointer(E.H,2,V.FLOAT,!1,0,0),V.bindFramebuffer(V.DRAW_FRAMEBUFFER?V.DRAW_FRAMEBUFFER:V.FRAMEBUFFER,null),V.clearColor(0,0,0,0),V.clear(V.COLOR_BUFFER_BIT),V.colorMask(!0,!0,!0,!0),V.drawArrays(V.TRIANGLE_FAN,0,4),V.disableVertexAttribArray(E.I),V.disableVertexAttribArray(E.H),V.bindBuffer(V.ARRAY_BUFFER,null),p.h.bindTexture2d(0)}function jn(p){this.g=p}var rn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Ne(p,W){return W+p}function gn(p,W){window[p]=W}function In(p){var W=document.createElement("script");return W.setAttribute("src",p),W.setAttribute("crossorigin","anonymous"),new Promise(function(V){W.addEventListener("load",function(){V()},!1),W.addEventListener("error",function(){V()},!1),document.body.appendChild(W)})}function Ke(){return se(this,function p(){return ne(p,function(W){switch(W.g){case 1:return W.m=2,P(W,WebAssembly.instantiate(rn),4);case 4:W.g=3,W.m=0;break;case 2:return W.m=0,W.j=null,W.return(!1);case 3:return W.return(!0)}})})}function En(p){if(this.g=p,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=p&&p.locateFile||Ne,typeof window=="object")var W=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")W=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=W,p.options){W=Y(Object.keys(p.options));for(var V=W.next();!V.done;V=W.next()){V=V.value;var E=p.options[V].default;E!==void 0&&(this.j[V]=typeof E=="function"?E():E)}}}i=En.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function on(p,W){return p.g.files===void 0?[]:typeof p.g.files=="function"?p.g.files(W):p.g.files}function Zn(p){return se(p,function W(){var V=this,E,O,ot,z,rt,bt,Rt,Ut,Nt,$t,Jt;return ne(W,function(Yt){switch(Yt.g){case 1:return E=V,V.R?(O=on(V,V.j),P(Yt,Ke(),2)):Yt.return();case 2:if(ot=Yt.h,typeof window=="object")return gn("createMediapipeSolutionsWasm",{locateFile:V.locateFile}),gn("createMediapipeSolutionsPackedAssets",{locateFile:V.locateFile}),bt=O.filter(function(Et){return Et.data!==void 0}),Rt=O.filter(function(Et){return Et.data===void 0}),Ut=Promise.all(bt.map(function(Et){var Dt=an(E,Et.url);if(Et.path!==void 0){var ae=Et.path;Dt=Dt.then(function(pe){return E.overrideFile(ae,pe),Promise.resolve(pe)})}return Dt})),Nt=Promise.all(Rt.map(function(Et){return Et.simd===void 0||Et.simd&&ot||!Et.simd&&!ot?In(E.locateFile(Et.url,E.S)):Promise.resolve()})).then(function(){return se(E,function Et(){var Dt,ae,pe=this;return ne(Et,function(ge){if(ge.g==1)return Dt=window.createMediapipeSolutionsWasm,ae=window.createMediapipeSolutionsPackedAssets,P(ge,Dt(ae),2);pe.h=ge.h,ge.g=0})})}),$t=function(){return se(E,function Et(){var Dt=this;return ne(Et,function(ae){return Dt.g.graph&&Dt.g.graph.url?ae=P(ae,an(Dt,Dt.g.graph.url),0):(ae.g=0,ae=void 0),ae})})}(),P(Yt,Promise.all([Nt,Ut,$t]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return z=O.filter(function(Et){return Et.simd===void 0||Et.simd&&ot||!Et.simd&&!ot}).map(function(Et){return E.locateFile(Et.url,E.S)}),importScripts.apply(null,N(z)),P(Yt,createMediapipeSolutionsWasm(Module),6);case 6:V.h=Yt.h,V.l=new OffscreenCanvas(1,1),V.h.canvas=V.l,rt=V.h.GL.createContext(V.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),V.h.GL.makeContextCurrent(rt),Yt.g=4;break;case 7:if(V.l=document.createElement("canvas"),Jt=V.l.getContext("webgl2",{}),!Jt&&(Jt=V.l.getContext("webgl",{}),!Jt))return alert("Failed to create WebGL canvas context when passing video frame."),Yt.return();V.D=Jt,V.h.canvas=V.l,V.h.createContext(V.l,!0,!0,{});case 4:V.i=new V.h.SolutionWasm,V.R=!1,Yt.g=0}})})}function Sn(p){return se(p,function W(){var V=this,E,O,ot,z,rt,bt,Rt,Ut;return ne(W,function(Nt){if(Nt.g==1){if(V.g.graph&&V.g.graph.url&&V.P===V.g.graph.url)return Nt.return();if(V.o=!0,!V.g.graph||!V.g.graph.url){Nt.g=2;return}return V.P=V.g.graph.url,P(Nt,an(V,V.g.graph.url),3)}for(Nt.g!=2&&(E=Nt.h,V.i.loadGraph(E)),O=Y(Object.keys(V.B)),ot=O.next();!ot.done;ot=O.next())z=ot.value,V.i.overrideFile(z,V.B[z]);if(V.B={},V.g.listeners)for(rt=Y(V.g.listeners),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,Qn(V,Rt);Ut=V.j,V.j={},V.setOptions(Ut),Nt.g=0})})}i.reset=function(){return se(this,function p(){var W=this;return ne(p,function(V){W.i&&(W.i.reset(),W.m={},W.s={}),V.g=0})})},i.setOptions=function(p,W){var V=this;if(W=W||this.g.options){for(var E=[],O=[],ot={},z=Y(Object.keys(p)),rt=z.next();!rt.done;ot={K:ot.K,L:ot.L},rt=z.next()){var bt=rt.value;bt in this.j&&this.j[bt]===p[bt]||(this.j[bt]=p[bt],rt=W[bt],rt!==void 0&&(rt.onChange&&(ot.K=rt.onChange,ot.L=p[bt],E.push(function(Rt){return function(){return se(V,function Ut(){var Nt,$t=this;return ne(Ut,function(Jt){if(Jt.g==1)return P(Jt,Rt.K(Rt.L),2);Nt=Jt.h,Nt===!0&&($t.o=!0),Jt.g=0})})}}(ot))),rt.graphOptionXref&&(bt={valueNumber:rt.type===1?p[bt]:0,valueBoolean:rt.type===0?p[bt]:!1,valueString:rt.type===2?p[bt]:""},rt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),rt.graphOptionXref),bt),O.push(rt))))}(E.length!==0||O.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(O),this.u=(this.u===void 0?[]:this.u).concat(E))}};function Kn(p){return se(p,function W(){var V=this,E,O,ot,z,rt,bt,Rt;return ne(W,function(Ut){switch(Ut.g){case 1:if(!V.o)return Ut.return();if(!V.u){Ut.g=2;break}E=Y(V.u),O=E.next();case 3:if(O.done){Ut.g=5;break}return ot=O.value,P(Ut,ot(),4);case 4:O=E.next(),Ut.g=3;break;case 5:V.u=void 0;case 2:if(V.A){for(z=new V.h.GraphOptionChangeRequestList,rt=Y(V.A),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,z.push_back(Rt);V.i.changeOptions(z),z.delete(),V.A=void 0}V.o=!1,Ut.g=0}})})}i.initialize=function(){return se(this,function p(){var W=this;return ne(p,function(V){return V.g==1?P(V,Zn(W),2):V.g!=3?P(V,Sn(W),3):P(V,Kn(W),0)})})};function an(p,W){return se(p,function V(){var E=this,O,ot;return ne(V,function(z){return W in E.F?z.return(E.F[W]):(O=E.locateFile(W,""),ot=fetch(O).then(function(rt){return rt.arrayBuffer()}),E.F[W]=ot,z.return(ot))})})}i.overrideFile=function(p,W){this.i?this.i.overrideFile(p,W):this.B[p]=W},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(p,W){return se(this,function V(){var E=this,O,ot,z,rt,bt,Rt,Ut,Nt,$t;return ne(V,function(Jt){switch(Jt.g){case 1:return E.g.inputs?(O=1e3*(W==null?performance.now():W),P(Jt,E.C,2)):Jt.return();case 2:return P(Jt,E.initialize(),3);case 3:for(ot=new E.h.PacketDataList,z=Y(Object.keys(p)),rt=z.next();!rt.done;rt=z.next())if(bt=rt.value,Rt=E.g.inputs[bt]){t:{var Yt=E,Et=p[bt];switch(Rt.type){case"video":var Dt=Yt.m[Rt.stream];if(Dt||(Dt=new bn(Yt.h,Yt.D),Yt.m[Rt.stream]=Dt),Yt=Dt,Yt.l===0&&(Yt.l=Yt.h.createTexture()),typeof HTMLVideoElement<"u"&&Et instanceof HTMLVideoElement){var ae=Et.videoWidth;Dt=Et.videoHeight}else typeof HTMLImageElement<"u"&&Et instanceof HTMLImageElement?(ae=Et.naturalWidth,Dt=Et.naturalHeight):(ae=Et.width,Dt=Et.height);Dt={glName:Yt.l,width:ae,height:Dt},ae=Yt.g,ae.canvas.width=Dt.width,ae.canvas.height=Dt.height,ae.activeTexture(ae.TEXTURE0),Yt.h.bindTexture2d(Yt.l),ae.texImage2D(ae.TEXTURE_2D,0,ae.RGBA,ae.RGBA,ae.UNSIGNED_BYTE,Et),Yt.h.bindTexture2d(0),Yt=Dt;break t;case"detections":for(Dt=Yt.m[Rt.stream],Dt||(Dt=new jn(Yt.h),Yt.m[Rt.stream]=Dt),Yt=Dt,Yt.data||(Yt.data=new Yt.g.DetectionListData),Yt.data.reset(Et.length),Dt=0;Dt<Et.length;++Dt){ae=Et[Dt];var pe=Yt.data,ge=pe.setBoundingBox,Je=Dt,h=ae.T,y=new He;Pt(y,1,h.Z),Pt(y,2,h.$),Pt(y,3,h.height),Pt(y,4,h.width),Pt(y,5,h.rotation),Pt(y,6,h.X);var G=h=new we;Ot(G,1,ie(y,1)),Ot(G,2,ie(y,2)),Ot(G,3,ie(y,3)),Ot(G,4,ie(y,4)),Ot(G,5,ie(y,5));var H=ie(y,6);if(H!=null&&H!=null){Ze(G.g,48);var K=G.g,_=H;H=0>_,_=Math.abs(_);var M=_>>>0;for(_=Math.floor((_-M)/4294967296),_>>>=0,H&&(_=~_>>>0,M=(~M>>>0)+1,4294967295<M&&(M=0,_++,4294967295<_&&(_=0))),he=M,Se=_,H=he,M=Se;0<M||127<H;)K.push(H&127|128),H=(H>>>7|M<<25)>>>0,M>>>=7;K.push(H)}if(Fe(y,G),h=Xe(h),ge.call(pe,Je,h),ae.O)for(pe=0;pe<ae.O.length;++pe)y=ae.O[pe],G=!!y.visibility,ge=Yt.data,Je=ge.addNormalizedLandmark,h=Dt,y=Object.assign(Object.assign({},y),{visibility:G?y.visibility:0}),G=new de,Pt(G,1,y.x),Pt(G,2,y.y),Pt(G,3,y.z),y.visibility&&Pt(G,4,y.visibility),K=y=new we,Ot(K,1,ie(G,1)),Ot(K,2,ie(G,2)),Ot(K,3,ie(G,3)),Ot(K,4,ie(G,4)),Ot(K,5,ie(G,5)),Fe(G,K),y=Xe(y),Je.call(ge,h,y);if(ae.M)for(pe=0;pe<ae.M.length;++pe){if(ge=Yt.data,Je=ge.addClassification,h=Dt,y=ae.M[pe],G=new tt,Pt(G,2,y.Y),y.index&&Pt(G,1,y.index),y.label&&Pt(G,3,y.label),y.displayName&&Pt(G,4,y.displayName),K=y=new we,M=ie(G,1),M!=null&&M!=null)if(Ze(K.g,8),H=K.g,0<=M)Ze(H,M);else{for(_=0;9>_;_++)H.push(M&127|128),M>>=7;H.push(1)}Ot(K,2,ie(G,2)),H=ie(G,3),H!=null&&(H=Rn(H),Ze(K.g,26),Ze(K.g,H.length),qe(K,K.g.end()),qe(K,H)),H=ie(G,4),H!=null&&(H=Rn(H),Ze(K.g,34),Ze(K.g,H.length),qe(K,K.g.end()),qe(K,H)),Fe(G,K),y=Xe(y),Je.call(ge,h,y)}}Yt=Yt.data;break t;default:Yt={}}}switch(Ut=Yt,Nt=Rt.stream,Rt.type){case"video":ot.pushTexture2d(Object.assign(Object.assign({},Ut),{stream:Nt,timestamp:O}));break;case"detections":$t=Ut,$t.stream=Nt,$t.timestamp=O,ot.pushDetectionList($t);break;default:throw Error("Unknown input config type: '"+Rt.type+"'")}}return E.i.send(ot),P(Jt,E.C,4);case 4:ot.delete(),Jt.g=0}})})};function Yn(p,W,V){return se(p,function E(){var O,ot,z,rt,bt,Rt,Ut=this,Nt,$t,Jt,Yt,Et,Dt,ae,pe;return ne(E,function(ge){switch(ge.g){case 1:if(!V)return ge.return(W);for(O={},ot=0,z=Y(Object.keys(V)),rt=z.next();!rt.done;rt=z.next())bt=rt.value,Rt=V[bt],typeof Rt!="string"&&Rt.type==="texture"&&W[Rt.stream]!==void 0&&++ot;1<ot&&(Ut.G=!1),Nt=Y(Object.keys(V)),rt=Nt.next();case 2:if(rt.done){ge.g=4;break}if($t=rt.value,Jt=V[$t],typeof Jt=="string")return ae=O,pe=$t,P(ge,_n(Ut,$t,W[Jt]),14);if(Yt=W[Jt.stream],Jt.type==="detection_list"){if(Yt){for(var Je=Yt.getRectList(),h=Yt.getLandmarksList(),y=Yt.getClassificationsList(),G=[],H=0;H<Je.size();++H){var K=Je.get(H);t:{var _=new He;for(K=new Le(K);Mt(K);)switch(K.i){case 13:var M=ln(K.g);Pt(_,1,M);break;case 21:M=ln(K.g),Pt(_,2,M);break;case 29:M=ln(K.g),Pt(_,3,M);break;case 37:M=ln(K.g),Pt(_,4,M);break;case 45:M=ln(K.g),Pt(_,5,M);break;case 48:for(var q=K.g,ct=128,s=0,X=M=0;4>X&&128<=ct;X++)ct=q.h[q.g++],s|=(ct&127)<<7*X;if(128<=ct&&(ct=q.h[q.g++],s|=(ct&127)<<28,M|=(ct&127)>>4),128<=ct)for(X=0;5>X&&128<=ct;X++)ct=q.h[q.g++],M|=(ct&127)<<7*X+3;128>ct?(q=s>>>0,ct=M>>>0,(M=ct&2147483648)&&(q=~q+1>>>0,ct=~ct>>>0,q==0&&(ct=ct+1>>>0)),q=4294967296*ct+(q>>>0),M=M?-q:q):(q.l=!0,M=void 0),Pt(_,6,M);break;default:if(!te(_,K))break t}}_={Z:qt(_,1),$:qt(_,2),height:qt(_,3),width:qt(_,4),rotation:qt(_,5,0),X:Vt(_,6)},M=h.get(H);t:for(K=new St,M=new Le(M);Mt(M);)switch(M.i){case 10:q=zt(M,new de,ue),fe(K,q,de,void 0);break;default:if(!te(K,M))break t}K=hn(K,de).map(fn),q=y.get(H);t:for(M=new ut,q=new Le(q);Mt(q);)switch(q.i){case 10:M.addClassification(zt(q,new tt,it));break;default:if(!te(M,q))break t}_={T:_,O:K,M:en(M)},G.push(_)}Je=G}else Je=[];O[$t]=Je,ge.g=7;break}if(Jt.type==="proto_list"){if(Yt){for(Je=Array(Yt.size()),h=0;h<Yt.size();h++)Je[h]=Yt.get(h);Yt.delete()}else Je=[];O[$t]=Je,ge.g=7;break}if(Yt===void 0){ge.g=3;break}if(Jt.type==="float_list"){O[$t]=Yt,ge.g=7;break}if(Jt.type==="proto"){O[$t]=Yt,ge.g=7;break}if(Jt.type!=="texture")throw Error("Unknown output config type: '"+Jt.type+"'");return Et=Ut.s[$t],Et||(Et=new bn(Ut.h,Ut.D),Ut.s[$t]=Et),P(ge,Ce(Et,Yt,Ut.G),13);case 13:Dt=ge.h,O[$t]=Dt;case 7:Jt.transform&&O[$t]&&(O[$t]=Jt.transform(O[$t])),ge.g=3;break;case 14:ae[pe]=ge.h;case 3:rt=Nt.next(),ge.g=2;break;case 4:return ge.return(O)}})})}function _n(p,W,V){return se(p,function E(){var O=this,ot;return ne(E,function(z){return typeof V=="number"||V instanceof Uint8Array||V instanceof O.h.Uint8BlobList?z.return(V):V instanceof O.h.Texture2dDataOut?(ot=O.s[W],ot||(ot=new bn(O.h,O.D),O.s[W]=ot),z.return(Ce(ot,V,O.G))):z.return(void 0)})})}function Qn(p,W){for(var V=W.name||"$",E=[].concat(N(W.wants)),O=new p.h.StringList,ot=Y(W.wants),z=ot.next();!z.done;z=ot.next())O.push_back(z.value);ot=p.h.PacketListener.implement({onResults:function(rt){for(var bt={},Rt=0;Rt<W.wants.length;++Rt)bt[E[Rt]]=rt.get(Rt);var Ut=p.listeners[V];Ut&&(p.C=Yn(p,bt,W.outs).then(function(Nt){Nt=Ut(Nt);for(var $t=0;$t<W.wants.length;++$t){var Jt=bt[E[$t]];typeof Jt=="object"&&Jt.hasOwnProperty&&Jt.hasOwnProperty("delete")&&Jt.delete()}Nt&&(p.C=Nt)}))}}),p.i.attachMultiListener(O,ot),O.delete()}i.onResults=function(p,W){this.listeners[W||"$"]=p},Re("Solution",En),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function wn(p){switch(p===void 0&&(p=0),p){case 1:return"selfie_segmentation_landscape.tflite";default:return"selfie_segmentation.tflite"}}function Ln(p){var W=this;p=p||{},this.g=new En({locateFile:p.locateFile,files:function(V){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:wn(V.modelSelection)}]},graph:{url:"selfie_segmentation.binarypb"},listeners:[{wants:["segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelSelection:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelSelection",fieldName:"int_value"},onChange:function(V){return se(W,function E(){var O,ot,z=this,rt;return ne(E,function(bt){return bt.g==1?(O=wn(V),ot="third_party/mediapipe/modules/selfie_segmentation/"+O,P(bt,an(z.g,O),2)):(rt=bt.h,z.g.overrideFile(ot,rt),bt.return(!0))})})}}}})}i=Ln.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(p){this.g.onResults(p)},i.initialize=function(){return se(this,function p(){var W=this;return ne(p,function(V){return P(V,W.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(p){return se(this,function W(){var V=this;return ne(W,function(E){return P(E,V.g.send(p),0)})})},i.setOptions=function(p){this.g.setOptions(p)},Re("SelfieSegmentation",Ln),Re("VERSION","0.1.1632777926")}).call(Zi);const vi={};(function(){var i;function n(l){var v=0;return function(){return v<l.length?{done:!1,value:l[v++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(l,v,x){return l==Array.prototype||l==Object.prototype||(l[v]=x.value),l};function f(l){l=[typeof globalThis=="object"&&globalThis,l,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var v=0;v<l.length;++v){var x=l[v];if(x&&x.Math==Math)return x}throw Error("Cannot find global object")}var Z=f(this);function I(l,v){if(v)t:{var x=Z;l=l.split(".");for(var w=0;w<l.length-1;w++){var k=l[w];if(!(k in x))break t;x=x[k]}l=l[l.length-1],w=x[l],v=v(w),v!=w&&v!=null&&r(x,l,{configurable:!0,writable:!0,value:v})}}I("Symbol",function(l){function v(o){if(this instanceof v)throw new TypeError("Symbol is not a constructor");return new x(w+(o||"")+"_"+k++,o)}function x(o,d){this.g=o,r(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;x.prototype.toString=function(){return this.g};var w="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",k=0;return v}),I("Symbol.iterator",function(l){if(l)return l;l=Symbol("Symbol.iterator");for(var v="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),x=0;x<v.length;x++){var w=Z[v[x]];typeof w=="function"&&typeof w.prototype[l]!="function"&&r(w.prototype,l,{configurable:!0,writable:!0,value:function(){return C(n(this))}})}return l});function C(l){return l={next:l},l[Symbol.iterator]=function(){return this},l}function Y(l){var v=typeof Symbol<"u"&&Symbol.iterator&&l[Symbol.iterator];return v?v.call(l):{next:n(l)}}function N(l){if(!(l instanceof Array)){l=Y(l);for(var v,x=[];!(v=l.next()).done;)x.push(v.value);l=x}return l}var et=typeof Object.create=="function"?Object.create:function(l){function v(){}return v.prototype=l,new v},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var wt={a:!0},Ft={};try{Ft.__proto__=wt,pt=Ft.a;break t}catch{}pt=!1}lt=pt?function(l,v){if(l.__proto__=v,l.__proto__!==v)throw new TypeError(l+" is not extensible");return l}:null}var at=lt;function dt(l,v){if(l.prototype=et(v.prototype),l.prototype.constructor=l,at)at(l,v);else for(var x in v)if(x!="prototype")if(Object.defineProperties){var w=Object.getOwnPropertyDescriptor(v,x);w&&Object.defineProperty(l,x,w)}else l[x]=v[x];l.ra=v.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function kt(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Bt.prototype.s=function(l){this.h=l};function ee(l,v){l.j={fa:v,ga:!0},l.g=l.o||l.u}Bt.prototype.return=function(l){this.j={return:l},this.g=this.u};function P(l,v,x){return l.g=x,{value:v}}function De(l){this.g=new Bt,this.h=l}function je(l,v){kt(l.g);var x=l.g.i;return x?We(l,"return"in x?x.return:function(w){return{value:w,done:!0}},v,l.g.return):(l.g.return(v),jt(l))}function We(l,v,x,w){try{var k=v.call(l.g.i,x);if(!(k instanceof Object))throw new TypeError("Iterator result "+k+" is not an object");if(!k.done)return l.g.l=!1,k;var o=k.value}catch(d){return l.g.i=null,ee(l.g,d),jt(l)}return l.g.i=null,w.call(l.g,o),jt(l)}function jt(l){for(;l.g.g;)try{var v=l.h(l.g);if(v)return l.g.l=!1,{value:v.value,done:!1}}catch(x){l.g.h=void 0,ee(l.g,x)}if(l.g.l=!1,l.g.j){if(v=l.g.j,l.g.j=null,v.ga)throw v.fa;return{value:v.return,done:!0}}return{value:void 0,done:!0}}function Hn(l){this.next=function(v){return kt(l.g),l.g.i?v=We(l,l.g.i.next,v,l.g.s):(l.g.s(v),v=jt(l)),v},this.throw=function(v){return kt(l.g),l.g.i?v=We(l,l.g.i.throw,v,l.g.s):(ee(l.g,v),v=jt(l)),v},this.return=function(v){return je(l,v)},this[Symbol.iterator]=function(){return this}}function ne(l){function v(w){return l.next(w)}function x(w){return l.throw(w)}return new Promise(function(w,k){function o(d){d.done?w(d.value):Promise.resolve(d.value).then(v,x).then(o,k)}o(l.next())})}function Zt(l){return ne(new Hn(new De(l)))}I("Promise",function(l){function v(d){this.h=0,this.i=void 0,this.g=[],this.s=!1;var g=this.j();try{d(g.resolve,g.reject)}catch(e){g.reject(e)}}function x(){this.g=null}function w(d){return d instanceof v?d:new v(function(g){g(d)})}if(l)return l;x.prototype.h=function(d){if(this.g==null){this.g=[];var g=this;this.i(function(){g.l()})}this.g.push(d)};var k=Z.setTimeout;x.prototype.i=function(d){k(d,0)},x.prototype.l=function(){for(;this.g&&this.g.length;){var d=this.g;this.g=[];for(var g=0;g<d.length;++g){var e=d[g];d[g]=null;try{e()}catch(u){this.j(u)}}}this.g=null},x.prototype.j=function(d){this.i(function(){throw d})},v.prototype.j=function(){function d(u){return function(m){e||(e=!0,u.call(g,m))}}var g=this,e=!1;return{resolve:d(this.D),reject:d(this.l)}},v.prototype.D=function(d){if(d===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof v)this.H(d);else{t:switch(typeof d){case"object":var g=d!=null;break t;case"function":g=!0;break t;default:g=!1}g?this.A(d):this.o(d)}},v.prototype.A=function(d){var g=void 0;try{g=d.then}catch(e){this.l(e);return}typeof g=="function"?this.I(g,d):this.o(d)},v.prototype.l=function(d){this.u(2,d)},v.prototype.o=function(d){this.u(1,d)},v.prototype.u=function(d,g){if(this.h!=0)throw Error("Cannot settle("+d+", "+g+"): Promise already settled in state"+this.h);this.h=d,this.i=g,this.h===2&&this.G(),this.B()},v.prototype.G=function(){var d=this;k(function(){if(d.C()){var g=Z.console;typeof g<"u"&&g.error(d.i)}},1)},v.prototype.C=function(){if(this.s)return!1;var d=Z.CustomEvent,g=Z.Event,e=Z.dispatchEvent;return typeof e>"u"?!0:(typeof d=="function"?d=new d("unhandledrejection",{cancelable:!0}):typeof g=="function"?d=new g("unhandledrejection",{cancelable:!0}):(d=Z.document.createEvent("CustomEvent"),d.initCustomEvent("unhandledrejection",!1,!0,d)),d.promise=this,d.reason=this.i,e(d))},v.prototype.B=function(){if(this.g!=null){for(var d=0;d<this.g.length;++d)o.h(this.g[d]);this.g=null}};var o=new x;return v.prototype.H=function(d){var g=this.j();d.M(g.resolve,g.reject)},v.prototype.I=function(d,g){var e=this.j();try{d.call(g,e.resolve,e.reject)}catch(u){e.reject(u)}},v.prototype.then=function(d,g){function e(c,a){return typeof c=="function"?function(b){try{u(c(b))}catch(S){m(S)}}:a}var u,m,t=new v(function(c,a){u=c,m=a});return this.M(e(d,u),e(g,m)),t},v.prototype.catch=function(d){return this.then(void 0,d)},v.prototype.M=function(d,g){function e(){switch(u.h){case 1:d(u.i);break;case 2:g(u.i);break;default:throw Error("Unexpected state: "+u.h)}}var u=this;this.g==null?o.h(e):this.g.push(e),this.s=!0},v.resolve=w,v.reject=function(d){return new v(function(g,e){e(d)})},v.race=function(d){return new v(function(g,e){for(var u=Y(d),m=u.next();!m.done;m=u.next())w(m.value).M(g,e)})},v.all=function(d){var g=Y(d),e=g.next();return e.done?w([]):new v(function(u,m){function t(b){return function(S){c[b]=S,a--,a==0&&u(c)}}var c=[],a=0;do c.push(void 0),a++,w(e.value).M(t(c.length-1),m),e=g.next();while(!e.done)})},v});function $e(l,v){l instanceof String&&(l+="");var x=0,w=!1,k={next:function(){if(!w&&x<l.length){var o=x++;return{value:v(o,l[o]),done:!1}}return w=!0,{done:!0,value:void 0}}};return k[Symbol.iterator]=function(){return k},k}var An=typeof Object.assign=="function"?Object.assign:function(l,v){for(var x=1;x<arguments.length;x++){var w=arguments[x];if(w)for(var k in w)Object.prototype.hasOwnProperty.call(w,k)&&(l[k]=w[k])}return l};I("Object.assign",function(l){return l||An}),I("Object.is",function(l){return l||function(v,x){return v===x?v!==0||1/v===1/x:v!==v&&x!==x}}),I("Array.prototype.includes",function(l){return l||function(v,x){var w=this;w instanceof String&&(w=String(w));var k=w.length;for(x=x||0,0>x&&(x=Math.max(x+k,0));x<k;x++){var o=w[x];if(o===v||Object.is(o,v))return!0}return!1}}),I("String.prototype.includes",function(l){return l||function(v,x){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(v instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(v,x||0)!==-1}}),I("Array.prototype.keys",function(l){return l||function(){return $e(this,function(v){return v})}});var Re=this||self;function Ht(l,v){l=l.split(".");var x=Re;l[0]in x||typeof x.execScript>"u"||x.execScript("var "+l[0]);for(var w;l.length&&(w=l.shift());)l.length||v===void 0?x[w]&&x[w]!==Object.prototype[w]?x=x[w]:x=x[w]={}:x[w]=v}function Ye(){throw Error("Invalid UTF8")}function sn(l,v){return v=String.fromCharCode.apply(null,v),l==null?v:l+v}var Gn,Fn=typeof TextDecoder<"u",Rn,Nn=typeof TextEncoder<"u",dn={},pn=null;function kn(l){var v;v===void 0&&(v=0),Me(),v=dn[v];for(var x=Array(Math.floor(l.length/3)),w=v[64]||"",k=0,o=0;k<l.length-2;k+=3){var d=l[k],g=l[k+1],e=l[k+2],u=v[d>>2];d=v[(d&3)<<4|g>>4],g=v[(g&15)<<2|e>>6],e=v[e&63],x[o++]=u+d+g+e}switch(u=0,e=w,l.length-k){case 2:u=l[k+1],e=v[(u&15)<<2]||w;case 1:l=l[k],x[o]=v[l>>2]+v[(l&3)<<4|u>>4]+e+w}return x.join("")}function Cn(l){var v=l.length,x=3*v/4;x%3?x=Math.floor(x):"=.".indexOf(l[v-1])!=-1&&(x="=.".indexOf(l[v-2])!=-1?x-2:x-1);var w=new Uint8Array(x),k=0;return ze(l,function(o){w[k++]=o}),k!==x?w.subarray(0,k):w}function ze(l,v){function x(e){for(;w<l.length;){var u=l.charAt(w++),m=pn[u];if(m!=null)return m;if(!/^[\s\xa0]*$/.test(u))throw Error("Unknown base64 encoding at char: "+u)}return e}Me();for(var w=0;;){var k=x(-1),o=x(0),d=x(64),g=x(64);if(g===64&&k===-1)break;v(k<<2|o>>4),d!=64&&(v(o<<4&240|d>>2),g!=64&&v(d<<6&192|g))}}function Me(){if(!pn){pn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),v=["+/=","+/","-_=","-_.","-_"],x=0;5>x;x++){var w=l.concat(v[x].split(""));dn[x]=w;for(var k=0;k<w.length;k++){var o=w[k];pn[o]===void 0&&(pn[o]=k)}}}}var xn=typeof Uint8Array=="function";function Xn(l){return xn&&l!=null&&l instanceof Uint8Array}var he;function Se(l){if(this.L=l,l!==null&&l.length===0)throw Error("ByteString should be constructed with non-empty values")}var Oe=typeof Uint8Array.prototype.slice=="function",re=0,Ve=0;function ln(l,v){if(l.constructor===Uint8Array)return l;if(l.constructor===ArrayBuffer)return new Uint8Array(l);if(l.constructor===Array)return new Uint8Array(l);if(l.constructor===String)return Cn(l);if(l.constructor===Se)return!v&&(v=l.L)&&v.constructor===Uint8Array?v:(v=l.L,v=v==null||Xn(v)?v:typeof v=="string"?Cn(v):null,(l=l.L=v)?new Uint8Array(l):he||(he=new Uint8Array(0)));if(l instanceof Uint8Array)return new Uint8Array(l.buffer,l.byteOffset,l.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Be(l,v){return Error("Invalid wire type: "+l+" (at position "+v+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(l,v){v=v===void 0?{}:v,v=v.v===void 0?!1:v.v,this.h=null,this.g=this.i=this.j=0,this.v=v,l&&Le(this,l)}function Le(l,v){l.h=ln(v,l.v),l.j=0,l.i=l.h.length,l.g=l.j}Ze.prototype.reset=function(){this.g=this.j};function Mt(l){if(l.g>l.i)throw Error("Tried to read past the end of the data "+l.g+" > "+l.i)}function xe(l){var v=l.h,x=v[l.g],w=x&127;if(128>x)return l.g+=1,Mt(l),w;if(x=v[l.g+1],w|=(x&127)<<7,128>x)return l.g+=2,Mt(l),w;if(x=v[l.g+2],w|=(x&127)<<14,128>x)return l.g+=3,Mt(l),w;if(x=v[l.g+3],w|=(x&127)<<21,128>x)return l.g+=4,Mt(l),w;if(x=v[l.g+4],l.g+=5,w|=(x&15)<<28,128>x)return Mt(l),w;if(128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++])throw Qt();return Mt(l),w}var zt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var l=this.g;return this.g=[],l};function we(l,v){for(;127<v;)l.g.push(v&127|128),v>>>=7;l.g.push(v)}function qe(l){var v={},x=v.W===void 0?!1:v.W;this.l={v:v.v===void 0?!1:v.v},this.W=x,v=this.l,zt.length?(x=zt.pop(),v&&(x.v=v.v),l&&Le(x,l),l=x):l=new Ze(l,v),this.g=l,this.j=this.g.g,this.h=this.i=-1}qe.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(l){var v=l.g;if(v.g==v.i)return!1;l.j=l.g.g;var x=xe(l.g)>>>0;if(v=x>>>3,x&=7,!(0<=x&&5>=x))throw Be(x,l.j);if(1>v)throw Error("Invalid field number: "+v+" (at position "+l.j+")");return l.i=v,l.h=x,!0}function Ot(l){switch(l.h){case 0:if(l.h!=0)Ot(l);else t:{l=l.g;for(var v=l.g,x=v+10;v<x;)if((l.h[v++]&128)===0){l.g=v,Mt(l);break t}throw Qt()}break;case 1:l=l.g,l.g+=8,Mt(l);break;case 2:l.h!=2?Ot(l):(v=xe(l.g)>>>0,l=l.g,l.g+=v,Mt(l));break;case 5:l=l.g,l.g+=4,Mt(l);break;case 3:v=l.i;do{if(!Xe(l))throw Error("Unmatched start-group tag: stream EOF");if(l.h==4){if(l.i!=v)throw Error("Unmatched end-group tag");break}Ot(l)}while(1);break;default:throw Be(l.h,l.j)}}var Ae=[];function Pe(){this.i=[],this.h=0,this.g=new ye}function Ie(l,v){v.length!==0&&(l.i.push(v),l.h+=v.length)}function Wn(l,v){if(v=v.ca){Ie(l,l.g.end());for(var x=0;x<v.length;x++)Ie(l,v[x])}}var cn=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function _e(l,v){Object.isFrozen(l)||(cn?l[cn]|=v:l.N!==void 0?l.N|=v:Object.defineProperties(l,{N:{value:v,configurable:!0,writable:!0,enumerable:!1}}))}function un(l){var v;return cn?v=l[cn]:v=l.N,v==null?0:v}function ve(l){return _e(l,1),l}function Te(l){return Array.isArray(l)?!!(un(l)&2):!1}function Ge(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");_e(l,2)}function ie(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var Qe=Object.freeze(ve([]));function qt(l){if(Te(l.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function fe(l,v,x){return v===-1?null:v>=l.i?l.g?l.g[v]:void 0:(x===void 0?0:x)&&l.g&&(x=l.g[v],x!=null)?x:l.m[v+l.h]}function Lt(l,v,x,w){w=w===void 0?!1:w,qt(l),v<l.i&&!w?l.m[v+l.h]=x:(l.g||(l.g=l.m[l.i+l.h]={}))[v]=x}function Vt(l,v,x,w){x=x===void 0?!0:x,w=w===void 0?!1:w;var k=fe(l,v,w);return k==null&&(k=Qe),Te(l.m)?x&&(Ge(k),Object.freeze(k)):(k===Qe||Te(k))&&(k=ve(k.slice()),Lt(l,v,k,w)),k}function oe(l,v,x){return l=fe(l,v),l=l==null?l:+l,l==null?x===void 0?0:x:l}function Fe(l,v,x,w){l.j||(l.j={});var k=Te(l.m),o=l.j[x];if(!o){w=Vt(l,x,!0,w===void 0?!1:w),o=[],k=k||Te(w);for(var d=0;d<w.length;d++)o[d]=new v(w[d]),k&&Ge(o[d].m);k&&(Ge(o),Object.freeze(o)),l.j[x]=o}return o}function te(l,v,x,w,k){var o=o===void 0?!1:o;return qt(l),o=Fe(l,x,v,o),x=w||new x,l=Vt(l,v),k!=null?(o.splice(k,0,x),l.splice(k,0,x.m)):(o.push(x),l.push(x.m)),x}function se(l,v){return l=fe(l,v),l==null?0:l}function tt(l,v){return l=fe(l,v),l==null?"":l}function it(l){switch(typeof l){case"number":return isFinite(l)?l:String(l);case"object":if(l&&!Array.isArray(l)){if(Xn(l))return kn(l);if(l instanceof Se){var v=l.L;return v=v==null||typeof v=="string"?v:xn&&v instanceof Uint8Array?kn(v):null,(l.L=v)||""}}}return l}function ut(l){var v=ue;return v=v===void 0?St:v,de(l,v)}function _t(l,v){if(l!=null){if(Array.isArray(l))l=de(l,v);else if(ie(l)){var x={},w;for(w in l)x[w]=_t(l[w],v);l=x}else l=v(l);return l}}function de(l,v){for(var x=l.slice(),w=0;w<x.length;w++)x[w]=_t(x[w],v);return Array.isArray(l)&&un(l)&1&&ve(x),x}function ue(l){return l&&typeof l=="object"&&l.toJSON?l.toJSON():(l=it(l),Array.isArray(l)?ut(l):l)}function St(l){return Xn(l)?new Uint8Array(l):l}function me(l,v,x){l||(l=He),He=null;var w=this.constructor.h;l||(l=w?[w]:[]),this.h=(w?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(w=this.m.length,l=w-1,w&&(w=this.m[l],ie(w))){this.i=l-this.h,this.g=w;break t}v!==void 0&&-1<v?(this.i=Math.max(v,l+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(x)for(v=0;v<x.length;v++)if(l=x[v],l<this.i)l+=this.h,(w=this.m[l])?Array.isArray(w)&&ve(w):this.m[l]=Qe;else{w=this.g||(this.g=this.m[this.i+this.h]={});var k=w[l];k?Array.isArray(k)&&ve(k):w[l]=Qe}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var He;function tn(){me.apply(this,arguments)}if(dt(tn,me),Pt){var en={};Object.defineProperties(tn,(en[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),en))}function fn(l,v,x){if(x){var w={},k;for(k in x){var o=x[k],d=o.ja;d||(w.F=o.pa||o.ha.P,o.ba?(w.U=In(o.ba),d=function(g){return function(e,u,m){return g.F(e,u,m,g.U)}}(w)):o.da?(w.T=Ke(o.X.g,o.da),d=function(g){return function(e,u,m){return g.F(e,u,m,g.T)}}(w)):d=w.F,o.ja=d),d(v,l,o.X),w={F:w.F,U:w.U,T:w.T}}}Wn(v,l)}var bn=Symbol();function Ce(l,v,x){return l[bn]||(l[bn]=function(w,k){return v(w,k,x)})}function nn(l){var v=l[bn];if(!v){var x=p(l);v=function(w,k){return W(w,k,x)},l[bn]=v}return v}function jn(l){var v=l.ba;if(v)return nn(v);if(v=l.oa)return Ce(l.X.g,v,l.da)}function rn(l){var v=jn(l),x=l.X,w=l.ha.O;return v?function(k,o){return w(k,o,x,v)}:function(k,o){return w(k,o,x)}}function Ne(l,v,x,w,k,o){l=l();var d=0;for(l.length&&typeof l[0]!="number"&&(x(v,l[0]),d++);d<l.length;){x=l[d++];for(var g=d+1;g<l.length&&typeof l[g]!="number";)g++;var e=l[d++];switch(g-=d,g){case 0:w(v,x,e);break;case 1:w(v,x,e,l[d++]);break;case 2:k(v,x,e,l[d++],l[d++]);break;case 3:g=l[d++];var u=l[d++],m=l[d++];Array.isArray(m)?k(v,x,e,g,u,m):o(v,x,e,g,u,m);break;case 4:o(v,x,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+g)}}return v}var gn=Symbol();function In(l){var v=l[gn];if(!v){var x=an(l);v=function(w,k){return E(w,k,x)},l[gn]=v}return v}function Ke(l,v){var x=l[gn];return x||(x=function(w,k){return fn(w,k,v)},l[gn]=x),x}var En=Symbol();function on(l,v){l.push(v)}function Zn(l,v,x){l.push(v,x.P)}function Sn(l,v,x,w,k){var o=In(k),d=x.P;l.push(v,function(g,e,u){return d(g,e,u,w,o)})}function Kn(l,v,x,w,k,o){var d=Ke(w,o),g=x.P;l.push(v,function(e,u,m){return g(e,u,m,w,d)})}function an(l){var v=l[En];return v||Ne(l,l[En]=[],on,Zn,Sn,Kn)}var Yn=Symbol();function _n(l,v){l[0]=v}function Qn(l,v,x,w){var k=x.O;l[v]=w?function(o,d,g){return k(o,d,g,w)}:k}function wn(l,v,x,w,k,o){var d=x.O,g=nn(k);l[v]=function(e,u,m){return d(e,u,m,w,g,o)}}function Ln(l,v,x,w,k,o,d){var g=x.O,e=Ce(w,k,o);l[v]=function(u,m,t){return g(u,m,t,w,e,d)}}function p(l){var v=l[Yn];return v||Ne(l,l[Yn]={},_n,Qn,wn,Ln)}function W(l,v,x){for(;Xe(v)&&v.h!=4;){var w=v.i,k=x[w];if(!k){var o=x[0];o&&(o=o[w])&&(k=x[w]=rn(o))}if((!k||!k(v,l,w))&&(k=v,w=l,o=k.j,Ot(k),!k.W)){var d=k.g.h;k=k.g.g,k=o===k?he||(he=new Uint8Array(0)):Oe?d.slice(o,k):new Uint8Array(d.subarray(o,k)),(o=w.ca)?o.push(k):w.ca=[k]}}return l}function V(l,v,x){if(Ae.length){var w=Ae.pop();l&&(Le(w.g,l),w.i=-1,w.h=-1),l=w}else l=new qe(l);try{return W(new v,l,p(x))}finally{v=l.g,v.h=null,v.j=0,v.i=0,v.g=0,v.v=!1,l.i=-1,l.h=-1,100>Ae.length&&Ae.push(l)}}function E(l,v,x){for(var w=x.length,k=w%2==1,o=k?1:0;o<w;o+=2)(0,x[o+1])(v,l,x[o]);fn(l,v,k?x[0]:void 0)}function O(l,v){var x=new Pe;E(l,x,an(v)),Ie(x,x.g.end()),l=new Uint8Array(x.h),v=x.i;for(var w=v.length,k=0,o=0;o<w;o++){var d=v[o];l.set(d,k),k+=d.length}return x.i=[l],l}function ot(l,v){return{O:l,P:v}}var z=ot(function(l,v,x){if(l.h!==5)return!1;l=l.g;var w=l.h[l.g],k=l.h[l.g+1],o=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,Mt(l),k=(w<<0|k<<8|o<<16|d<<24)>>>0,l=2*(k>>31)+1,w=k>>>23&255,k&=8388607,Lt(v,x,w==255?k?NaN:1/0*l:w==0?l*Math.pow(2,-149)*k:l*Math.pow(2,w-150)*(k+Math.pow(2,23))),!0},function(l,v,x){if(v=fe(v,x),v!=null){we(l.g,8*x+5),l=l.g;var w=v;w=(x=0>w?1:0)?-w:w,w===0?0<1/w?re=Ve=0:(Ve=0,re=2147483648):isNaN(w)?(Ve=0,re=2147483647):34028234663852886e22<w?(Ve=0,re=(x<<31|2139095040)>>>0):11754943508222875e-54>w?(w=Math.round(w/Math.pow(2,-149)),Ve=0,re=(x<<31|w)>>>0):(v=Math.floor(Math.log(w)/Math.LN2),w*=Math.pow(2,-v),w=Math.round(8388608*w),16777216<=w&&++v,Ve=0,re=(x<<31|v+127<<23|w&8388607)>>>0),x=re,l.g.push(x>>>0&255),l.g.push(x>>>8&255),l.g.push(x>>>16&255),l.g.push(x>>>24&255)}}),rt=ot(function(l,v,x){if(l.h!==0)return!1;for(var w=l.g,k=128,o=0,d=l=0;4>d&&128<=k;d++)k=w.h[w.g++],Mt(w),o|=(k&127)<<7*d;if(128<=k&&(k=w.h[w.g++],Mt(w),o|=(k&127)<<28,l|=(k&127)>>4),128<=k)for(d=0;5>d&&128<=k;d++)k=w.h[w.g++],Mt(w),l|=(k&127)<<7*d+3;if(128>k)w=o>>>0,k=l>>>0,(l=k&2147483648)&&(w=~w+1>>>0,k=~k>>>0,w==0&&(k=k+1>>>0)),w=4294967296*k+(w>>>0);else throw Qt();return Lt(v,x,l?-w:w),!0},function(l,v,x){if(v=fe(v,x),v!=null&&v!=null){we(l.g,8*x),l=l.g;var w=v;for(x=0>w,w=Math.abs(w),v=w>>>0,w=Math.floor((w-v)/4294967296),w>>>=0,x&&(w=~w>>>0,v=(~v>>>0)+1,4294967295<v&&(v=0,w++,4294967295<w&&(w=0))),re=v,Ve=w,x=re,v=Ve;0<v||127<x;)l.g.push(x&127|128),x=(x>>>7|v<<25)>>>0,v>>>=7;l.g.push(x)}}),bt=ot(function(l,v,x){return l.h!==0?!1:(Lt(v,x,xe(l.g)),!0)},function(l,v,x){if(v=fe(v,x),v!=null&&v!=null)if(we(l.g,8*x),l=l.g,x=v,0<=x)we(l,x);else{for(v=0;9>v;v++)l.g.push(x&127|128),x>>=7;l.g.push(1)}}),Rt=ot(function(l,v,x){if(l.h!==2)return!1;var w=xe(l.g)>>>0;l=l.g;var k=l.g;l.g+=w,Mt(l),l=l.h;var o;if(Fn)(o=Gn)||(o=Gn=new TextDecoder("utf-8",{fatal:!0})),o=o.decode(l.subarray(k,k+w));else{w=k+w;for(var d=[],g=null,e,u,m;k<w;)e=l[k++],128>e?d.push(e):224>e?k>=w?Ye():(u=l[k++],194>e||(u&192)!==128?(k--,Ye()):d.push((e&31)<<6|u&63)):240>e?k>=w-1?Ye():(u=l[k++],(u&192)!==128||e===224&&160>u||e===237&&160<=u||((o=l[k++])&192)!==128?(k--,Ye()):d.push((e&15)<<12|(u&63)<<6|o&63)):244>=e?k>=w-2?Ye():(u=l[k++],(u&192)!==128||(e<<28)+(u-144)>>30!==0||((o=l[k++])&192)!==128||((m=l[k++])&192)!==128?(k--,Ye()):(e=(e&7)<<18|(u&63)<<12|(o&63)<<6|m&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):Ye(),8192<=d.length&&(g=sn(g,d),d.length=0);o=sn(g,d)}return Lt(v,x,o),!0},function(l,v,x){if(v=fe(v,x),v!=null){var w=!1;if(w=w===void 0?!1:w,Nn){if(w&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(v))throw Error("Found an unpaired surrogate");v=(Rn||(Rn=new TextEncoder)).encode(v)}else{for(var k=0,o=new Uint8Array(3*v.length),d=0;d<v.length;d++){var g=v.charCodeAt(d);if(128>g)o[k++]=g;else{if(2048>g)o[k++]=g>>6|192;else{if(55296<=g&&57343>=g){if(56319>=g&&d<v.length){var e=v.charCodeAt(++d);if(56320<=e&&57343>=e){g=1024*(g-55296)+e-56320+65536,o[k++]=g>>18|240,o[k++]=g>>12&63|128,o[k++]=g>>6&63|128,o[k++]=g&63|128;continue}else d--}if(w)throw Error("Found an unpaired surrogate");g=65533}o[k++]=g>>12|224,o[k++]=g>>6&63|128}o[k++]=g&63|128}}v=o.subarray(0,k)}we(l.g,8*x+2),we(l.g,v.length),Ie(l,l.g.end()),Ie(l,v)}}),Ut=ot(function(l,v,x,w,k){if(l.h!==2)return!1;v=te(v,x,w),x=l.g.i,w=xe(l.g)>>>0;var o=l.g.g+w,d=o-x;if(0>=d&&(l.g.i=o,k(v,l),d=o-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(w+" bytes, instead read "+(w-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=o,l.g.i=x,!0},function(l,v,x,w,k){if(v=Fe(v,w,x),v!=null)for(w=0;w<v.length;w++){var o=l;we(o.g,8*x+2);var d=o.g.end();Ie(o,d),d.push(o.h),o=d,k(v[w],l),d=l;var g=o.pop();for(g=d.h+d.g.length()-g;127<g;)o.push(g&127|128),g>>>=7,d.h++;o.push(g),d.h++}});function Nt(){tn.apply(this,arguments)}if(dt(Nt,tn),Pt){var $t={};Object.defineProperties(Nt,($t[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),$t))}function Jt(l){Nt.call(this,l)}dt(Jt,Nt);function Yt(){return[1,bt,2,z,3,Rt,4,Rt]}function Et(l){Nt.call(this,l,-1,ae)}dt(Et,Nt),Et.prototype.addClassification=function(l,v){return te(this,1,Jt,l,v),this};function Dt(){return[1,Ut,Jt,Yt]}var ae=[1];function pe(l){Nt.call(this,l)}dt(pe,Nt);function ge(){return[1,z,2,z,3,z,4,z,5,z]}function Je(l){Nt.call(this,l,-1,y)}dt(Je,Nt);function h(){return[1,Ut,pe,ge]}var y=[1];function G(l){Nt.call(this,l)}dt(G,Nt);function H(){return[1,z,2,z,3,z,4,z,5,z,6,rt]}function K(l,v,x){if(x=l.createShader(x===0?l.VERTEX_SHADER:l.FRAGMENT_SHADER),l.shaderSource(x,v),l.compileShader(x),!l.getShaderParameter(x,l.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
19
|
+
`+V.getProgramInfoLog(ot));E=p.m=ot,V.useProgram(E),O=V.getUniformLocation(E,"sampler0"),p.j={I:V.getAttribLocation(E,"aVertex"),H:V.getAttribLocation(E,"aTex"),da:O},p.s=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,p.s),V.enableVertexAttribArray(p.j.I),V.vertexAttribPointer(p.j.I,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),p.o=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,p.o),V.enableVertexAttribArray(p.j.H),V.vertexAttribPointer(p.j.H,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),V.uniform1i(O,0)}E=p.j,V.useProgram(p.m),V.canvas.width=W.width,V.canvas.height=W.height,V.viewport(0,0,W.width,W.height),V.activeTexture(V.TEXTURE0),p.h.bindTexture2d(W.glName),V.enableVertexAttribArray(E.I),V.bindBuffer(V.ARRAY_BUFFER,p.s),V.vertexAttribPointer(E.I,2,V.FLOAT,!1,0,0),V.enableVertexAttribArray(E.H),V.bindBuffer(V.ARRAY_BUFFER,p.o),V.vertexAttribPointer(E.H,2,V.FLOAT,!1,0,0),V.bindFramebuffer(V.DRAW_FRAMEBUFFER?V.DRAW_FRAMEBUFFER:V.FRAMEBUFFER,null),V.clearColor(0,0,0,0),V.clear(V.COLOR_BUFFER_BIT),V.colorMask(!0,!0,!0,!0),V.drawArrays(V.TRIANGLE_FAN,0,4),V.disableVertexAttribArray(E.I),V.disableVertexAttribArray(E.H),V.bindBuffer(V.ARRAY_BUFFER,null),p.h.bindTexture2d(0)}function zn(p){this.g=p}var rn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Je(p,W){return W+p}function gn(p,W){window[p]=W}function In(p){var W=document.createElement("script");return W.setAttribute("src",p),W.setAttribute("crossorigin","anonymous"),new Promise(function(V){W.addEventListener("load",function(){V()},!1),W.addEventListener("error",function(){V()},!1),document.body.appendChild(W)})}function Ke(){return se(this,function p(){return ne(p,function(W){switch(W.g){case 1:return W.m=2,P(W,WebAssembly.instantiate(rn),4);case 4:W.g=3,W.m=0;break;case 2:return W.m=0,W.j=null,W.return(!1);case 3:return W.return(!0)}})})}function En(p){if(this.g=p,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=p&&p.locateFile||Je,typeof window=="object")var W=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")W=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=W,p.options){W=T(Object.keys(p.options));for(var V=W.next();!V.done;V=W.next()){V=V.value;var E=p.options[V].default;E!==void 0&&(this.j[V]=typeof E=="function"?E():E)}}}i=En.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function on(p,W){return p.g.files===void 0?[]:typeof p.g.files=="function"?p.g.files(W):p.g.files}function Zn(p){return se(p,function W(){var V=this,E,O,ot,j,rt,bt,Rt,Ut,Jt,$t,Nt;return ne(W,function(Tt){switch(Tt.g){case 1:return E=V,V.R?(O=on(V,V.j),P(Tt,Ke(),2)):Tt.return();case 2:if(ot=Tt.h,typeof window=="object")return gn("createMediapipeSolutionsWasm",{locateFile:V.locateFile}),gn("createMediapipeSolutionsPackedAssets",{locateFile:V.locateFile}),bt=O.filter(function(Et){return Et.data!==void 0}),Rt=O.filter(function(Et){return Et.data===void 0}),Ut=Promise.all(bt.map(function(Et){var Dt=an(E,Et.url);if(Et.path!==void 0){var ae=Et.path;Dt=Dt.then(function(pe){return E.overrideFile(ae,pe),Promise.resolve(pe)})}return Dt})),Jt=Promise.all(Rt.map(function(Et){return Et.simd===void 0||Et.simd&&ot||!Et.simd&&!ot?In(E.locateFile(Et.url,E.S)):Promise.resolve()})).then(function(){return se(E,function Et(){var Dt,ae,pe=this;return ne(Et,function(ge){if(ge.g==1)return Dt=window.createMediapipeSolutionsWasm,ae=window.createMediapipeSolutionsPackedAssets,P(ge,Dt(ae),2);pe.h=ge.h,ge.g=0})})}),$t=function(){return se(E,function Et(){var Dt=this;return ne(Et,function(ae){return Dt.g.graph&&Dt.g.graph.url?ae=P(ae,an(Dt,Dt.g.graph.url),0):(ae.g=0,ae=void 0),ae})})}(),P(Tt,Promise.all([Jt,Ut,$t]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return j=O.filter(function(Et){return Et.simd===void 0||Et.simd&&ot||!Et.simd&&!ot}).map(function(Et){return E.locateFile(Et.url,E.S)}),importScripts.apply(null,J(j)),P(Tt,createMediapipeSolutionsWasm(Module),6);case 6:V.h=Tt.h,V.l=new OffscreenCanvas(1,1),V.h.canvas=V.l,rt=V.h.GL.createContext(V.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),V.h.GL.makeContextCurrent(rt),Tt.g=4;break;case 7:if(V.l=document.createElement("canvas"),Nt=V.l.getContext("webgl2",{}),!Nt&&(Nt=V.l.getContext("webgl",{}),!Nt))return alert("Failed to create WebGL canvas context when passing video frame."),Tt.return();V.D=Nt,V.h.canvas=V.l,V.h.createContext(V.l,!0,!0,{});case 4:V.i=new V.h.SolutionWasm,V.R=!1,Tt.g=0}})})}function Sn(p){return se(p,function W(){var V=this,E,O,ot,j,rt,bt,Rt,Ut;return ne(W,function(Jt){if(Jt.g==1){if(V.g.graph&&V.g.graph.url&&V.P===V.g.graph.url)return Jt.return();if(V.o=!0,!V.g.graph||!V.g.graph.url){Jt.g=2;return}return V.P=V.g.graph.url,P(Jt,an(V,V.g.graph.url),3)}for(Jt.g!=2&&(E=Jt.h,V.i.loadGraph(E)),O=T(Object.keys(V.B)),ot=O.next();!ot.done;ot=O.next())j=ot.value,V.i.overrideFile(j,V.B[j]);if(V.B={},V.g.listeners)for(rt=T(V.g.listeners),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,Qn(V,Rt);Ut=V.j,V.j={},V.setOptions(Ut),Jt.g=0})})}i.reset=function(){return se(this,function p(){var W=this;return ne(p,function(V){W.i&&(W.i.reset(),W.m={},W.s={}),V.g=0})})},i.setOptions=function(p,W){var V=this;if(W=W||this.g.options){for(var E=[],O=[],ot={},j=T(Object.keys(p)),rt=j.next();!rt.done;ot={K:ot.K,L:ot.L},rt=j.next()){var bt=rt.value;bt in this.j&&this.j[bt]===p[bt]||(this.j[bt]=p[bt],rt=W[bt],rt!==void 0&&(rt.onChange&&(ot.K=rt.onChange,ot.L=p[bt],E.push(function(Rt){return function(){return se(V,function Ut(){var Jt,$t=this;return ne(Ut,function(Nt){if(Nt.g==1)return P(Nt,Rt.K(Rt.L),2);Jt=Nt.h,Jt===!0&&($t.o=!0),Nt.g=0})})}}(ot))),rt.graphOptionXref&&(bt={valueNumber:rt.type===1?p[bt]:0,valueBoolean:rt.type===0?p[bt]:!1,valueString:rt.type===2?p[bt]:""},rt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),rt.graphOptionXref),bt),O.push(rt))))}(E.length!==0||O.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(O),this.u=(this.u===void 0?[]:this.u).concat(E))}};function Kn(p){return se(p,function W(){var V=this,E,O,ot,j,rt,bt,Rt;return ne(W,function(Ut){switch(Ut.g){case 1:if(!V.o)return Ut.return();if(!V.u){Ut.g=2;break}E=T(V.u),O=E.next();case 3:if(O.done){Ut.g=5;break}return ot=O.value,P(Ut,ot(),4);case 4:O=E.next(),Ut.g=3;break;case 5:V.u=void 0;case 2:if(V.A){for(j=new V.h.GraphOptionChangeRequestList,rt=T(V.A),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,j.push_back(Rt);V.i.changeOptions(j),j.delete(),V.A=void 0}V.o=!1,Ut.g=0}})})}i.initialize=function(){return se(this,function p(){var W=this;return ne(p,function(V){return V.g==1?P(V,Zn(W),2):V.g!=3?P(V,Sn(W),3):P(V,Kn(W),0)})})};function an(p,W){return se(p,function V(){var E=this,O,ot;return ne(V,function(j){return W in E.F?j.return(E.F[W]):(O=E.locateFile(W,""),ot=fetch(O).then(function(rt){return rt.arrayBuffer()}),E.F[W]=ot,j.return(ot))})})}i.overrideFile=function(p,W){this.i?this.i.overrideFile(p,W):this.B[p]=W},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(p,W){return se(this,function V(){var E=this,O,ot,j,rt,bt,Rt,Ut,Jt,$t;return ne(V,function(Nt){switch(Nt.g){case 1:return E.g.inputs?(O=1e3*(W==null?performance.now():W),P(Nt,E.C,2)):Nt.return();case 2:return P(Nt,E.initialize(),3);case 3:for(ot=new E.h.PacketDataList,j=T(Object.keys(p)),rt=j.next();!rt.done;rt=j.next())if(bt=rt.value,Rt=E.g.inputs[bt]){t:{var Tt=E,Et=p[bt];switch(Rt.type){case"video":var Dt=Tt.m[Rt.stream];if(Dt||(Dt=new bn(Tt.h,Tt.D),Tt.m[Rt.stream]=Dt),Tt=Dt,Tt.l===0&&(Tt.l=Tt.h.createTexture()),typeof HTMLVideoElement<"u"&&Et instanceof HTMLVideoElement){var ae=Et.videoWidth;Dt=Et.videoHeight}else typeof HTMLImageElement<"u"&&Et instanceof HTMLImageElement?(ae=Et.naturalWidth,Dt=Et.naturalHeight):(ae=Et.width,Dt=Et.height);Dt={glName:Tt.l,width:ae,height:Dt},ae=Tt.g,ae.canvas.width=Dt.width,ae.canvas.height=Dt.height,ae.activeTexture(ae.TEXTURE0),Tt.h.bindTexture2d(Tt.l),ae.texImage2D(ae.TEXTURE_2D,0,ae.RGBA,ae.RGBA,ae.UNSIGNED_BYTE,Et),Tt.h.bindTexture2d(0),Tt=Dt;break t;case"detections":for(Dt=Tt.m[Rt.stream],Dt||(Dt=new zn(Tt.h),Tt.m[Rt.stream]=Dt),Tt=Dt,Tt.data||(Tt.data=new Tt.g.DetectionListData),Tt.data.reset(Et.length),Dt=0;Dt<Et.length;++Dt){ae=Et[Dt];var pe=Tt.data,ge=pe.setBoundingBox,Ne=Dt,h=ae.T,y=new He;Pt(y,1,h.Z),Pt(y,2,h.$),Pt(y,3,h.height),Pt(y,4,h.width),Pt(y,5,h.rotation),Pt(y,6,h.X);var G=h=new Ye;Ot(G,1,ie(y,1)),Ot(G,2,ie(y,2)),Ot(G,3,ie(y,3)),Ot(G,4,ie(y,4)),Ot(G,5,ie(y,5));var H=ie(y,6);if(H!=null&&H!=null){Ze(G.g,48);var K=G.g,_=H;H=0>_,_=Math.abs(_);var M=_>>>0;for(_=Math.floor((_-M)/4294967296),_>>>=0,H&&(_=~_>>>0,M=(~M>>>0)+1,4294967295<M&&(M=0,_++,4294967295<_&&(_=0))),he=M,Se=_,H=he,M=Se;0<M||127<H;)K.push(H&127|128),H=(H>>>7|M<<25)>>>0,M>>>=7;K.push(H)}if(Le(y,G),h=Xe(h),ge.call(pe,Ne,h),ae.O)for(pe=0;pe<ae.O.length;++pe)y=ae.O[pe],G=!!y.visibility,ge=Tt.data,Ne=ge.addNormalizedLandmark,h=Dt,y=Object.assign(Object.assign({},y),{visibility:G?y.visibility:0}),G=new de,Pt(G,1,y.x),Pt(G,2,y.y),Pt(G,3,y.z),y.visibility&&Pt(G,4,y.visibility),K=y=new Ye,Ot(K,1,ie(G,1)),Ot(K,2,ie(G,2)),Ot(K,3,ie(G,3)),Ot(K,4,ie(G,4)),Ot(K,5,ie(G,5)),Le(G,K),y=Xe(y),Ne.call(ge,h,y);if(ae.M)for(pe=0;pe<ae.M.length;++pe){if(ge=Tt.data,Ne=ge.addClassification,h=Dt,y=ae.M[pe],G=new tt,Pt(G,2,y.Y),y.index&&Pt(G,1,y.index),y.label&&Pt(G,3,y.label),y.displayName&&Pt(G,4,y.displayName),K=y=new Ye,M=ie(G,1),M!=null&&M!=null)if(Ze(K.g,8),H=K.g,0<=M)Ze(H,M);else{for(_=0;9>_;_++)H.push(M&127|128),M>>=7;H.push(1)}Ot(K,2,ie(G,2)),H=ie(G,3),H!=null&&(H=Rn(H),Ze(K.g,26),Ze(K.g,H.length),qe(K,K.g.end()),qe(K,H)),H=ie(G,4),H!=null&&(H=Rn(H),Ze(K.g,34),Ze(K.g,H.length),qe(K,K.g.end()),qe(K,H)),Le(G,K),y=Xe(y),Ne.call(ge,h,y)}}Tt=Tt.data;break t;default:Tt={}}}switch(Ut=Tt,Jt=Rt.stream,Rt.type){case"video":ot.pushTexture2d(Object.assign(Object.assign({},Ut),{stream:Jt,timestamp:O}));break;case"detections":$t=Ut,$t.stream=Jt,$t.timestamp=O,ot.pushDetectionList($t);break;default:throw Error("Unknown input config type: '"+Rt.type+"'")}}return E.i.send(ot),P(Nt,E.C,4);case 4:ot.delete(),Nt.g=0}})})};function Tn(p,W,V){return se(p,function E(){var O,ot,j,rt,bt,Rt,Ut=this,Jt,$t,Nt,Tt,Et,Dt,ae,pe;return ne(E,function(ge){switch(ge.g){case 1:if(!V)return ge.return(W);for(O={},ot=0,j=T(Object.keys(V)),rt=j.next();!rt.done;rt=j.next())bt=rt.value,Rt=V[bt],typeof Rt!="string"&&Rt.type==="texture"&&W[Rt.stream]!==void 0&&++ot;1<ot&&(Ut.G=!1),Jt=T(Object.keys(V)),rt=Jt.next();case 2:if(rt.done){ge.g=4;break}if($t=rt.value,Nt=V[$t],typeof Nt=="string")return ae=O,pe=$t,P(ge,_n(Ut,$t,W[Nt]),14);if(Tt=W[Nt.stream],Nt.type==="detection_list"){if(Tt){for(var Ne=Tt.getRectList(),h=Tt.getLandmarksList(),y=Tt.getClassificationsList(),G=[],H=0;H<Ne.size();++H){var K=Ne.get(H);t:{var _=new He;for(K=new Ce(K);Mt(K);)switch(K.i){case 13:var M=ln(K.g);Pt(_,1,M);break;case 21:M=ln(K.g),Pt(_,2,M);break;case 29:M=ln(K.g),Pt(_,3,M);break;case 37:M=ln(K.g),Pt(_,4,M);break;case 45:M=ln(K.g),Pt(_,5,M);break;case 48:for(var q=K.g,ct=128,s=0,X=M=0;4>X&&128<=ct;X++)ct=q.h[q.g++],s|=(ct&127)<<7*X;if(128<=ct&&(ct=q.h[q.g++],s|=(ct&127)<<28,M|=(ct&127)>>4),128<=ct)for(X=0;5>X&&128<=ct;X++)ct=q.h[q.g++],M|=(ct&127)<<7*X+3;128>ct?(q=s>>>0,ct=M>>>0,(M=ct&2147483648)&&(q=~q+1>>>0,ct=~ct>>>0,q==0&&(ct=ct+1>>>0)),q=4294967296*ct+(q>>>0),M=M?-q:q):(q.l=!0,M=void 0),Pt(_,6,M);break;default:if(!te(_,K))break t}}_={Z:qt(_,1),$:qt(_,2),height:qt(_,3),width:qt(_,4),rotation:qt(_,5,0),X:Vt(_,6)},M=h.get(H);t:for(K=new St,M=new Ce(M);Mt(M);)switch(M.i){case 10:q=jt(M,new de,ue),fe(K,q,de,void 0);break;default:if(!te(K,M))break t}K=hn(K,de).map(fn),q=y.get(H);t:for(M=new ut,q=new Ce(q);Mt(q);)switch(q.i){case 10:M.addClassification(jt(q,new tt,it));break;default:if(!te(M,q))break t}_={T:_,O:K,M:en(M)},G.push(_)}Ne=G}else Ne=[];O[$t]=Ne,ge.g=7;break}if(Nt.type==="proto_list"){if(Tt){for(Ne=Array(Tt.size()),h=0;h<Tt.size();h++)Ne[h]=Tt.get(h);Tt.delete()}else Ne=[];O[$t]=Ne,ge.g=7;break}if(Tt===void 0){ge.g=3;break}if(Nt.type==="float_list"){O[$t]=Tt,ge.g=7;break}if(Nt.type==="proto"){O[$t]=Tt,ge.g=7;break}if(Nt.type!=="texture")throw Error("Unknown output config type: '"+Nt.type+"'");return Et=Ut.s[$t],Et||(Et=new bn(Ut.h,Ut.D),Ut.s[$t]=Et),P(ge,Fe(Et,Tt,Ut.G),13);case 13:Dt=ge.h,O[$t]=Dt;case 7:Nt.transform&&O[$t]&&(O[$t]=Nt.transform(O[$t])),ge.g=3;break;case 14:ae[pe]=ge.h;case 3:rt=Jt.next(),ge.g=2;break;case 4:return ge.return(O)}})})}function _n(p,W,V){return se(p,function E(){var O=this,ot;return ne(E,function(j){return typeof V=="number"||V instanceof Uint8Array||V instanceof O.h.Uint8BlobList?j.return(V):V instanceof O.h.Texture2dDataOut?(ot=O.s[W],ot||(ot=new bn(O.h,O.D),O.s[W]=ot),j.return(Fe(ot,V,O.G))):j.return(void 0)})})}function Qn(p,W){for(var V=W.name||"$",E=[].concat(J(W.wants)),O=new p.h.StringList,ot=T(W.wants),j=ot.next();!j.done;j=ot.next())O.push_back(j.value);ot=p.h.PacketListener.implement({onResults:function(rt){for(var bt={},Rt=0;Rt<W.wants.length;++Rt)bt[E[Rt]]=rt.get(Rt);var Ut=p.listeners[V];Ut&&(p.C=Tn(p,bt,W.outs).then(function(Jt){Jt=Ut(Jt);for(var $t=0;$t<W.wants.length;++$t){var Nt=bt[E[$t]];typeof Nt=="object"&&Nt.hasOwnProperty&&Nt.hasOwnProperty("delete")&&Nt.delete()}Jt&&(p.C=Jt)}))}}),p.i.attachMultiListener(O,ot),O.delete()}i.onResults=function(p,W){this.listeners[W||"$"]=p},Re("Solution",En),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Yn(p){switch(p===void 0&&(p=0),p){case 1:return"selfie_segmentation_landscape.tflite";default:return"selfie_segmentation.tflite"}}function Cn(p){var W=this;p=p||{},this.g=new En({locateFile:p.locateFile,files:function(V){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:Yn(V.modelSelection)}]},graph:{url:"selfie_segmentation.binarypb"},listeners:[{wants:["segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelSelection:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelSelection",fieldName:"int_value"},onChange:function(V){return se(W,function E(){var O,ot,j=this,rt;return ne(E,function(bt){return bt.g==1?(O=Yn(V),ot="third_party/mediapipe/modules/selfie_segmentation/"+O,P(bt,an(j.g,O),2)):(rt=bt.h,j.g.overrideFile(ot,rt),bt.return(!0))})})}}}})}i=Cn.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(p){this.g.onResults(p)},i.initialize=function(){return se(this,function p(){var W=this;return ne(p,function(V){return P(V,W.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(p){return se(this,function W(){var V=this;return ne(W,function(E){return P(E,V.g.send(p),0)})})},i.setOptions=function(p){this.g.setOptions(p)},Re("SelfieSegmentation",Cn),Re("VERSION","0.1.1632777926")}).call(Zi);const vi={};(function(){var i;function n(l){var v=0;return function(){return v<l.length?{done:!1,value:l[v++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(l,v,x){return l==Array.prototype||l==Object.prototype||(l[v]=x.value),l};function f(l){l=[typeof globalThis=="object"&&globalThis,l,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var v=0;v<l.length;++v){var x=l[v];if(x&&x.Math==Math)return x}throw Error("Cannot find global object")}var Z=f(this);function I(l,v){if(v)t:{var x=Z;l=l.split(".");for(var Y=0;Y<l.length-1;Y++){var k=l[Y];if(!(k in x))break t;x=x[k]}l=l[l.length-1],Y=x[l],v=v(Y),v!=Y&&v!=null&&r(x,l,{configurable:!0,writable:!0,value:v})}}I("Symbol",function(l){function v(o){if(this instanceof v)throw new TypeError("Symbol is not a constructor");return new x(Y+(o||"")+"_"+k++,o)}function x(o,d){this.g=o,r(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;x.prototype.toString=function(){return this.g};var Y="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",k=0;return v}),I("Symbol.iterator",function(l){if(l)return l;l=Symbol("Symbol.iterator");for(var v="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),x=0;x<v.length;x++){var Y=Z[v[x]];typeof Y=="function"&&typeof Y.prototype[l]!="function"&&r(Y.prototype,l,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return l});function F(l){return l={next:l},l[Symbol.iterator]=function(){return this},l}function T(l){var v=typeof Symbol<"u"&&Symbol.iterator&&l[Symbol.iterator];return v?v.call(l):{next:n(l)}}function J(l){if(!(l instanceof Array)){l=T(l);for(var v,x=[];!(v=l.next()).done;)x.push(v.value);l=x}return l}var et=typeof Object.create=="function"?Object.create:function(l){function v(){}return v.prototype=l,new v},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(l,v){if(l.__proto__=v,l.__proto__!==v)throw new TypeError(l+" is not extensible");return l}:null}var at=lt;function dt(l,v){if(l.prototype=et(v.prototype),l.prototype.constructor=l,at)at(l,v);else for(var x in v)if(x!="prototype")if(Object.defineProperties){var Y=Object.getOwnPropertyDescriptor(v,x);Y&&Object.defineProperty(l,x,Y)}else l[x]=v[x];l.ra=v.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function kt(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Bt.prototype.s=function(l){this.h=l};function ee(l,v){l.j={fa:v,ga:!0},l.g=l.o||l.u}Bt.prototype.return=function(l){this.j={return:l},this.g=this.u};function P(l,v,x){return l.g=x,{value:v}}function De(l){this.g=new Bt,this.h=l}function ze(l,v){kt(l.g);var x=l.g.i;return x?We(l,"return"in x?x.return:function(Y){return{value:Y,done:!0}},v,l.g.return):(l.g.return(v),zt(l))}function We(l,v,x,Y){try{var k=v.call(l.g.i,x);if(!(k instanceof Object))throw new TypeError("Iterator result "+k+" is not an object");if(!k.done)return l.g.l=!1,k;var o=k.value}catch(d){return l.g.i=null,ee(l.g,d),zt(l)}return l.g.i=null,Y.call(l.g,o),zt(l)}function zt(l){for(;l.g.g;)try{var v=l.h(l.g);if(v)return l.g.l=!1,{value:v.value,done:!1}}catch(x){l.g.h=void 0,ee(l.g,x)}if(l.g.l=!1,l.g.j){if(v=l.g.j,l.g.j=null,v.ga)throw v.fa;return{value:v.return,done:!0}}return{value:void 0,done:!0}}function Hn(l){this.next=function(v){return kt(l.g),l.g.i?v=We(l,l.g.i.next,v,l.g.s):(l.g.s(v),v=zt(l)),v},this.throw=function(v){return kt(l.g),l.g.i?v=We(l,l.g.i.throw,v,l.g.s):(ee(l.g,v),v=zt(l)),v},this.return=function(v){return ze(l,v)},this[Symbol.iterator]=function(){return this}}function ne(l){function v(Y){return l.next(Y)}function x(Y){return l.throw(Y)}return new Promise(function(Y,k){function o(d){d.done?Y(d.value):Promise.resolve(d.value).then(v,x).then(o,k)}o(l.next())})}function Zt(l){return ne(new Hn(new De(l)))}I("Promise",function(l){function v(d){this.h=0,this.i=void 0,this.g=[],this.s=!1;var g=this.j();try{d(g.resolve,g.reject)}catch(e){g.reject(e)}}function x(){this.g=null}function Y(d){return d instanceof v?d:new v(function(g){g(d)})}if(l)return l;x.prototype.h=function(d){if(this.g==null){this.g=[];var g=this;this.i(function(){g.l()})}this.g.push(d)};var k=Z.setTimeout;x.prototype.i=function(d){k(d,0)},x.prototype.l=function(){for(;this.g&&this.g.length;){var d=this.g;this.g=[];for(var g=0;g<d.length;++g){var e=d[g];d[g]=null;try{e()}catch(u){this.j(u)}}}this.g=null},x.prototype.j=function(d){this.i(function(){throw d})},v.prototype.j=function(){function d(u){return function(m){e||(e=!0,u.call(g,m))}}var g=this,e=!1;return{resolve:d(this.D),reject:d(this.l)}},v.prototype.D=function(d){if(d===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof v)this.H(d);else{t:switch(typeof d){case"object":var g=d!=null;break t;case"function":g=!0;break t;default:g=!1}g?this.A(d):this.o(d)}},v.prototype.A=function(d){var g=void 0;try{g=d.then}catch(e){this.l(e);return}typeof g=="function"?this.I(g,d):this.o(d)},v.prototype.l=function(d){this.u(2,d)},v.prototype.o=function(d){this.u(1,d)},v.prototype.u=function(d,g){if(this.h!=0)throw Error("Cannot settle("+d+", "+g+"): Promise already settled in state"+this.h);this.h=d,this.i=g,this.h===2&&this.G(),this.B()},v.prototype.G=function(){var d=this;k(function(){if(d.C()){var g=Z.console;typeof g<"u"&&g.error(d.i)}},1)},v.prototype.C=function(){if(this.s)return!1;var d=Z.CustomEvent,g=Z.Event,e=Z.dispatchEvent;return typeof e>"u"?!0:(typeof d=="function"?d=new d("unhandledrejection",{cancelable:!0}):typeof g=="function"?d=new g("unhandledrejection",{cancelable:!0}):(d=Z.document.createEvent("CustomEvent"),d.initCustomEvent("unhandledrejection",!1,!0,d)),d.promise=this,d.reason=this.i,e(d))},v.prototype.B=function(){if(this.g!=null){for(var d=0;d<this.g.length;++d)o.h(this.g[d]);this.g=null}};var o=new x;return v.prototype.H=function(d){var g=this.j();d.M(g.resolve,g.reject)},v.prototype.I=function(d,g){var e=this.j();try{d.call(g,e.resolve,e.reject)}catch(u){e.reject(u)}},v.prototype.then=function(d,g){function e(c,a){return typeof c=="function"?function(b){try{u(c(b))}catch(S){m(S)}}:a}var u,m,t=new v(function(c,a){u=c,m=a});return this.M(e(d,u),e(g,m)),t},v.prototype.catch=function(d){return this.then(void 0,d)},v.prototype.M=function(d,g){function e(){switch(u.h){case 1:d(u.i);break;case 2:g(u.i);break;default:throw Error("Unexpected state: "+u.h)}}var u=this;this.g==null?o.h(e):this.g.push(e),this.s=!0},v.resolve=Y,v.reject=function(d){return new v(function(g,e){e(d)})},v.race=function(d){return new v(function(g,e){for(var u=T(d),m=u.next();!m.done;m=u.next())Y(m.value).M(g,e)})},v.all=function(d){var g=T(d),e=g.next();return e.done?Y([]):new v(function(u,m){function t(b){return function(S){c[b]=S,a--,a==0&&u(c)}}var c=[],a=0;do c.push(void 0),a++,Y(e.value).M(t(c.length-1),m),e=g.next();while(!e.done)})},v});function $e(l,v){l instanceof String&&(l+="");var x=0,Y=!1,k={next:function(){if(!Y&&x<l.length){var o=x++;return{value:v(o,l[o]),done:!1}}return Y=!0,{done:!0,value:void 0}}};return k[Symbol.iterator]=function(){return k},k}var An=typeof Object.assign=="function"?Object.assign:function(l,v){for(var x=1;x<arguments.length;x++){var Y=arguments[x];if(Y)for(var k in Y)Object.prototype.hasOwnProperty.call(Y,k)&&(l[k]=Y[k])}return l};I("Object.assign",function(l){return l||An}),I("Object.is",function(l){return l||function(v,x){return v===x?v!==0||1/v===1/x:v!==v&&x!==x}}),I("Array.prototype.includes",function(l){return l||function(v,x){var Y=this;Y instanceof String&&(Y=String(Y));var k=Y.length;for(x=x||0,0>x&&(x=Math.max(x+k,0));x<k;x++){var o=Y[x];if(o===v||Object.is(o,v))return!0}return!1}}),I("String.prototype.includes",function(l){return l||function(v,x){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(v instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(v,x||0)!==-1}}),I("Array.prototype.keys",function(l){return l||function(){return $e(this,function(v){return v})}});var Re=this||self;function Ht(l,v){l=l.split(".");var x=Re;l[0]in x||typeof x.execScript>"u"||x.execScript("var "+l[0]);for(var Y;l.length&&(Y=l.shift());)l.length||v===void 0?x[Y]&&x[Y]!==Object.prototype[Y]?x=x[Y]:x=x[Y]={}:x[Y]=v}function Te(){throw Error("Invalid UTF8")}function sn(l,v){return v=String.fromCharCode.apply(null,v),l==null?v:l+v}var Gn,Ln=typeof TextDecoder<"u",Rn,Jn=typeof TextEncoder<"u",dn={},pn=null;function kn(l){var v;v===void 0&&(v=0),Me(),v=dn[v];for(var x=Array(Math.floor(l.length/3)),Y=v[64]||"",k=0,o=0;k<l.length-2;k+=3){var d=l[k],g=l[k+1],e=l[k+2],u=v[d>>2];d=v[(d&3)<<4|g>>4],g=v[(g&15)<<2|e>>6],e=v[e&63],x[o++]=u+d+g+e}switch(u=0,e=Y,l.length-k){case 2:u=l[k+1],e=v[(u&15)<<2]||Y;case 1:l=l[k],x[o]=v[l>>2]+v[(l&3)<<4|u>>4]+e+Y}return x.join("")}function Fn(l){var v=l.length,x=3*v/4;x%3?x=Math.floor(x):"=.".indexOf(l[v-1])!=-1&&(x="=.".indexOf(l[v-2])!=-1?x-2:x-1);var Y=new Uint8Array(x),k=0;return je(l,function(o){Y[k++]=o}),k!==x?Y.subarray(0,k):Y}function je(l,v){function x(e){for(;Y<l.length;){var u=l.charAt(Y++),m=pn[u];if(m!=null)return m;if(!/^[\s\xa0]*$/.test(u))throw Error("Unknown base64 encoding at char: "+u)}return e}Me();for(var Y=0;;){var k=x(-1),o=x(0),d=x(64),g=x(64);if(g===64&&k===-1)break;v(k<<2|o>>4),d!=64&&(v(o<<4&240|d>>2),g!=64&&v(d<<6&192|g))}}function Me(){if(!pn){pn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),v=["+/=","+/","-_=","-_.","-_"],x=0;5>x;x++){var Y=l.concat(v[x].split(""));dn[x]=Y;for(var k=0;k<Y.length;k++){var o=Y[k];pn[o]===void 0&&(pn[o]=k)}}}}var xn=typeof Uint8Array=="function";function Xn(l){return xn&&l!=null&&l instanceof Uint8Array}var he;function Se(l){if(this.L=l,l!==null&&l.length===0)throw Error("ByteString should be constructed with non-empty values")}var Oe=typeof Uint8Array.prototype.slice=="function",re=0,Ve=0;function ln(l,v){if(l.constructor===Uint8Array)return l;if(l.constructor===ArrayBuffer)return new Uint8Array(l);if(l.constructor===Array)return new Uint8Array(l);if(l.constructor===String)return Fn(l);if(l.constructor===Se)return!v&&(v=l.L)&&v.constructor===Uint8Array?v:(v=l.L,v=v==null||Xn(v)?v:typeof v=="string"?Fn(v):null,(l=l.L=v)?new Uint8Array(l):he||(he=new Uint8Array(0)));if(l instanceof Uint8Array)return new Uint8Array(l.buffer,l.byteOffset,l.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Be(l,v){return Error("Invalid wire type: "+l+" (at position "+v+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(l,v){v=v===void 0?{}:v,v=v.v===void 0?!1:v.v,this.h=null,this.g=this.i=this.j=0,this.v=v,l&&Ce(this,l)}function Ce(l,v){l.h=ln(v,l.v),l.j=0,l.i=l.h.length,l.g=l.j}Ze.prototype.reset=function(){this.g=this.j};function Mt(l){if(l.g>l.i)throw Error("Tried to read past the end of the data "+l.g+" > "+l.i)}function xe(l){var v=l.h,x=v[l.g],Y=x&127;if(128>x)return l.g+=1,Mt(l),Y;if(x=v[l.g+1],Y|=(x&127)<<7,128>x)return l.g+=2,Mt(l),Y;if(x=v[l.g+2],Y|=(x&127)<<14,128>x)return l.g+=3,Mt(l),Y;if(x=v[l.g+3],Y|=(x&127)<<21,128>x)return l.g+=4,Mt(l),Y;if(x=v[l.g+4],l.g+=5,Y|=(x&15)<<28,128>x)return Mt(l),Y;if(128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++])throw Qt();return Mt(l),Y}var jt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var l=this.g;return this.g=[],l};function Ye(l,v){for(;127<v;)l.g.push(v&127|128),v>>>=7;l.g.push(v)}function qe(l){var v={},x=v.W===void 0?!1:v.W;this.l={v:v.v===void 0?!1:v.v},this.W=x,v=this.l,jt.length?(x=jt.pop(),v&&(x.v=v.v),l&&Ce(x,l),l=x):l=new Ze(l,v),this.g=l,this.j=this.g.g,this.h=this.i=-1}qe.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(l){var v=l.g;if(v.g==v.i)return!1;l.j=l.g.g;var x=xe(l.g)>>>0;if(v=x>>>3,x&=7,!(0<=x&&5>=x))throw Be(x,l.j);if(1>v)throw Error("Invalid field number: "+v+" (at position "+l.j+")");return l.i=v,l.h=x,!0}function Ot(l){switch(l.h){case 0:if(l.h!=0)Ot(l);else t:{l=l.g;for(var v=l.g,x=v+10;v<x;)if((l.h[v++]&128)===0){l.g=v,Mt(l);break t}throw Qt()}break;case 1:l=l.g,l.g+=8,Mt(l);break;case 2:l.h!=2?Ot(l):(v=xe(l.g)>>>0,l=l.g,l.g+=v,Mt(l));break;case 5:l=l.g,l.g+=4,Mt(l);break;case 3:v=l.i;do{if(!Xe(l))throw Error("Unmatched start-group tag: stream EOF");if(l.h==4){if(l.i!=v)throw Error("Unmatched end-group tag");break}Ot(l)}while(1);break;default:throw Be(l.h,l.j)}}var Ae=[];function Pe(){this.i=[],this.h=0,this.g=new ye}function Ie(l,v){v.length!==0&&(l.i.push(v),l.h+=v.length)}function Wn(l,v){if(v=v.ca){Ie(l,l.g.end());for(var x=0;x<v.length;x++)Ie(l,v[x])}}var cn=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function _e(l,v){Object.isFrozen(l)||(cn?l[cn]|=v:l.N!==void 0?l.N|=v:Object.defineProperties(l,{N:{value:v,configurable:!0,writable:!0,enumerable:!1}}))}function un(l){var v;return cn?v=l[cn]:v=l.N,v==null?0:v}function ve(l){return _e(l,1),l}function we(l){return Array.isArray(l)?!!(un(l)&2):!1}function Ge(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");_e(l,2)}function ie(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var Qe=Object.freeze(ve([]));function qt(l){if(we(l.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function fe(l,v,x){return v===-1?null:v>=l.i?l.g?l.g[v]:void 0:(x===void 0?0:x)&&l.g&&(x=l.g[v],x!=null)?x:l.m[v+l.h]}function Ct(l,v,x,Y){Y=Y===void 0?!1:Y,qt(l),v<l.i&&!Y?l.m[v+l.h]=x:(l.g||(l.g=l.m[l.i+l.h]={}))[v]=x}function Vt(l,v,x,Y){x=x===void 0?!0:x,Y=Y===void 0?!1:Y;var k=fe(l,v,Y);return k==null&&(k=Qe),we(l.m)?x&&(Ge(k),Object.freeze(k)):(k===Qe||we(k))&&(k=ve(k.slice()),Ct(l,v,k,Y)),k}function oe(l,v,x){return l=fe(l,v),l=l==null?l:+l,l==null?x===void 0?0:x:l}function Le(l,v,x,Y){l.j||(l.j={});var k=we(l.m),o=l.j[x];if(!o){Y=Vt(l,x,!0,Y===void 0?!1:Y),o=[],k=k||we(Y);for(var d=0;d<Y.length;d++)o[d]=new v(Y[d]),k&&Ge(o[d].m);k&&(Ge(o),Object.freeze(o)),l.j[x]=o}return o}function te(l,v,x,Y,k){var o=o===void 0?!1:o;return qt(l),o=Le(l,x,v,o),x=Y||new x,l=Vt(l,v),k!=null?(o.splice(k,0,x),l.splice(k,0,x.m)):(o.push(x),l.push(x.m)),x}function se(l,v){return l=fe(l,v),l==null?0:l}function tt(l,v){return l=fe(l,v),l==null?"":l}function it(l){switch(typeof l){case"number":return isFinite(l)?l:String(l);case"object":if(l&&!Array.isArray(l)){if(Xn(l))return kn(l);if(l instanceof Se){var v=l.L;return v=v==null||typeof v=="string"?v:xn&&v instanceof Uint8Array?kn(v):null,(l.L=v)||""}}}return l}function ut(l){var v=ue;return v=v===void 0?St:v,de(l,v)}function _t(l,v){if(l!=null){if(Array.isArray(l))l=de(l,v);else if(ie(l)){var x={},Y;for(Y in l)x[Y]=_t(l[Y],v);l=x}else l=v(l);return l}}function de(l,v){for(var x=l.slice(),Y=0;Y<x.length;Y++)x[Y]=_t(x[Y],v);return Array.isArray(l)&&un(l)&1&&ve(x),x}function ue(l){return l&&typeof l=="object"&&l.toJSON?l.toJSON():(l=it(l),Array.isArray(l)?ut(l):l)}function St(l){return Xn(l)?new Uint8Array(l):l}function me(l,v,x){l||(l=He),He=null;var Y=this.constructor.h;l||(l=Y?[Y]:[]),this.h=(Y?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(Y=this.m.length,l=Y-1,Y&&(Y=this.m[l],ie(Y))){this.i=l-this.h,this.g=Y;break t}v!==void 0&&-1<v?(this.i=Math.max(v,l+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(x)for(v=0;v<x.length;v++)if(l=x[v],l<this.i)l+=this.h,(Y=this.m[l])?Array.isArray(Y)&&ve(Y):this.m[l]=Qe;else{Y=this.g||(this.g=this.m[this.i+this.h]={});var k=Y[l];k?Array.isArray(k)&&ve(k):Y[l]=Qe}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var He;function tn(){me.apply(this,arguments)}if(dt(tn,me),Pt){var en={};Object.defineProperties(tn,(en[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),en))}function fn(l,v,x){if(x){var Y={},k;for(k in x){var o=x[k],d=o.ja;d||(Y.F=o.pa||o.ha.P,o.ba?(Y.U=In(o.ba),d=function(g){return function(e,u,m){return g.F(e,u,m,g.U)}}(Y)):o.da?(Y.T=Ke(o.X.g,o.da),d=function(g){return function(e,u,m){return g.F(e,u,m,g.T)}}(Y)):d=Y.F,o.ja=d),d(v,l,o.X),Y={F:Y.F,U:Y.U,T:Y.T}}}Wn(v,l)}var bn=Symbol();function Fe(l,v,x){return l[bn]||(l[bn]=function(Y,k){return v(Y,k,x)})}function nn(l){var v=l[bn];if(!v){var x=p(l);v=function(Y,k){return W(Y,k,x)},l[bn]=v}return v}function zn(l){var v=l.ba;if(v)return nn(v);if(v=l.oa)return Fe(l.X.g,v,l.da)}function rn(l){var v=zn(l),x=l.X,Y=l.ha.O;return v?function(k,o){return Y(k,o,x,v)}:function(k,o){return Y(k,o,x)}}function Je(l,v,x,Y,k,o){l=l();var d=0;for(l.length&&typeof l[0]!="number"&&(x(v,l[0]),d++);d<l.length;){x=l[d++];for(var g=d+1;g<l.length&&typeof l[g]!="number";)g++;var e=l[d++];switch(g-=d,g){case 0:Y(v,x,e);break;case 1:Y(v,x,e,l[d++]);break;case 2:k(v,x,e,l[d++],l[d++]);break;case 3:g=l[d++];var u=l[d++],m=l[d++];Array.isArray(m)?k(v,x,e,g,u,m):o(v,x,e,g,u,m);break;case 4:o(v,x,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+g)}}return v}var gn=Symbol();function In(l){var v=l[gn];if(!v){var x=an(l);v=function(Y,k){return E(Y,k,x)},l[gn]=v}return v}function Ke(l,v){var x=l[gn];return x||(x=function(Y,k){return fn(Y,k,v)},l[gn]=x),x}var En=Symbol();function on(l,v){l.push(v)}function Zn(l,v,x){l.push(v,x.P)}function Sn(l,v,x,Y,k){var o=In(k),d=x.P;l.push(v,function(g,e,u){return d(g,e,u,Y,o)})}function Kn(l,v,x,Y,k,o){var d=Ke(Y,o),g=x.P;l.push(v,function(e,u,m){return g(e,u,m,Y,d)})}function an(l){var v=l[En];return v||Je(l,l[En]=[],on,Zn,Sn,Kn)}var Tn=Symbol();function _n(l,v){l[0]=v}function Qn(l,v,x,Y){var k=x.O;l[v]=Y?function(o,d,g){return k(o,d,g,Y)}:k}function Yn(l,v,x,Y,k,o){var d=x.O,g=nn(k);l[v]=function(e,u,m){return d(e,u,m,Y,g,o)}}function Cn(l,v,x,Y,k,o,d){var g=x.O,e=Fe(Y,k,o);l[v]=function(u,m,t){return g(u,m,t,Y,e,d)}}function p(l){var v=l[Tn];return v||Je(l,l[Tn]={},_n,Qn,Yn,Cn)}function W(l,v,x){for(;Xe(v)&&v.h!=4;){var Y=v.i,k=x[Y];if(!k){var o=x[0];o&&(o=o[Y])&&(k=x[Y]=rn(o))}if((!k||!k(v,l,Y))&&(k=v,Y=l,o=k.j,Ot(k),!k.W)){var d=k.g.h;k=k.g.g,k=o===k?he||(he=new Uint8Array(0)):Oe?d.slice(o,k):new Uint8Array(d.subarray(o,k)),(o=Y.ca)?o.push(k):Y.ca=[k]}}return l}function V(l,v,x){if(Ae.length){var Y=Ae.pop();l&&(Ce(Y.g,l),Y.i=-1,Y.h=-1),l=Y}else l=new qe(l);try{return W(new v,l,p(x))}finally{v=l.g,v.h=null,v.j=0,v.i=0,v.g=0,v.v=!1,l.i=-1,l.h=-1,100>Ae.length&&Ae.push(l)}}function E(l,v,x){for(var Y=x.length,k=Y%2==1,o=k?1:0;o<Y;o+=2)(0,x[o+1])(v,l,x[o]);fn(l,v,k?x[0]:void 0)}function O(l,v){var x=new Pe;E(l,x,an(v)),Ie(x,x.g.end()),l=new Uint8Array(x.h),v=x.i;for(var Y=v.length,k=0,o=0;o<Y;o++){var d=v[o];l.set(d,k),k+=d.length}return x.i=[l],l}function ot(l,v){return{O:l,P:v}}var j=ot(function(l,v,x){if(l.h!==5)return!1;l=l.g;var Y=l.h[l.g],k=l.h[l.g+1],o=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,Mt(l),k=(Y<<0|k<<8|o<<16|d<<24)>>>0,l=2*(k>>31)+1,Y=k>>>23&255,k&=8388607,Ct(v,x,Y==255?k?NaN:1/0*l:Y==0?l*Math.pow(2,-149)*k:l*Math.pow(2,Y-150)*(k+Math.pow(2,23))),!0},function(l,v,x){if(v=fe(v,x),v!=null){Ye(l.g,8*x+5),l=l.g;var Y=v;Y=(x=0>Y?1:0)?-Y:Y,Y===0?0<1/Y?re=Ve=0:(Ve=0,re=2147483648):isNaN(Y)?(Ve=0,re=2147483647):34028234663852886e22<Y?(Ve=0,re=(x<<31|2139095040)>>>0):11754943508222875e-54>Y?(Y=Math.round(Y/Math.pow(2,-149)),Ve=0,re=(x<<31|Y)>>>0):(v=Math.floor(Math.log(Y)/Math.LN2),Y*=Math.pow(2,-v),Y=Math.round(8388608*Y),16777216<=Y&&++v,Ve=0,re=(x<<31|v+127<<23|Y&8388607)>>>0),x=re,l.g.push(x>>>0&255),l.g.push(x>>>8&255),l.g.push(x>>>16&255),l.g.push(x>>>24&255)}}),rt=ot(function(l,v,x){if(l.h!==0)return!1;for(var Y=l.g,k=128,o=0,d=l=0;4>d&&128<=k;d++)k=Y.h[Y.g++],Mt(Y),o|=(k&127)<<7*d;if(128<=k&&(k=Y.h[Y.g++],Mt(Y),o|=(k&127)<<28,l|=(k&127)>>4),128<=k)for(d=0;5>d&&128<=k;d++)k=Y.h[Y.g++],Mt(Y),l|=(k&127)<<7*d+3;if(128>k)Y=o>>>0,k=l>>>0,(l=k&2147483648)&&(Y=~Y+1>>>0,k=~k>>>0,Y==0&&(k=k+1>>>0)),Y=4294967296*k+(Y>>>0);else throw Qt();return Ct(v,x,l?-Y:Y),!0},function(l,v,x){if(v=fe(v,x),v!=null&&v!=null){Ye(l.g,8*x),l=l.g;var Y=v;for(x=0>Y,Y=Math.abs(Y),v=Y>>>0,Y=Math.floor((Y-v)/4294967296),Y>>>=0,x&&(Y=~Y>>>0,v=(~v>>>0)+1,4294967295<v&&(v=0,Y++,4294967295<Y&&(Y=0))),re=v,Ve=Y,x=re,v=Ve;0<v||127<x;)l.g.push(x&127|128),x=(x>>>7|v<<25)>>>0,v>>>=7;l.g.push(x)}}),bt=ot(function(l,v,x){return l.h!==0?!1:(Ct(v,x,xe(l.g)),!0)},function(l,v,x){if(v=fe(v,x),v!=null&&v!=null)if(Ye(l.g,8*x),l=l.g,x=v,0<=x)Ye(l,x);else{for(v=0;9>v;v++)l.g.push(x&127|128),x>>=7;l.g.push(1)}}),Rt=ot(function(l,v,x){if(l.h!==2)return!1;var Y=xe(l.g)>>>0;l=l.g;var k=l.g;l.g+=Y,Mt(l),l=l.h;var o;if(Ln)(o=Gn)||(o=Gn=new TextDecoder("utf-8",{fatal:!0})),o=o.decode(l.subarray(k,k+Y));else{Y=k+Y;for(var d=[],g=null,e,u,m;k<Y;)e=l[k++],128>e?d.push(e):224>e?k>=Y?Te():(u=l[k++],194>e||(u&192)!==128?(k--,Te()):d.push((e&31)<<6|u&63)):240>e?k>=Y-1?Te():(u=l[k++],(u&192)!==128||e===224&&160>u||e===237&&160<=u||((o=l[k++])&192)!==128?(k--,Te()):d.push((e&15)<<12|(u&63)<<6|o&63)):244>=e?k>=Y-2?Te():(u=l[k++],(u&192)!==128||(e<<28)+(u-144)>>30!==0||((o=l[k++])&192)!==128||((m=l[k++])&192)!==128?(k--,Te()):(e=(e&7)<<18|(u&63)<<12|(o&63)<<6|m&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):Te(),8192<=d.length&&(g=sn(g,d),d.length=0);o=sn(g,d)}return Ct(v,x,o),!0},function(l,v,x){if(v=fe(v,x),v!=null){var Y=!1;if(Y=Y===void 0?!1:Y,Jn){if(Y&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(v))throw Error("Found an unpaired surrogate");v=(Rn||(Rn=new TextEncoder)).encode(v)}else{for(var k=0,o=new Uint8Array(3*v.length),d=0;d<v.length;d++){var g=v.charCodeAt(d);if(128>g)o[k++]=g;else{if(2048>g)o[k++]=g>>6|192;else{if(55296<=g&&57343>=g){if(56319>=g&&d<v.length){var e=v.charCodeAt(++d);if(56320<=e&&57343>=e){g=1024*(g-55296)+e-56320+65536,o[k++]=g>>18|240,o[k++]=g>>12&63|128,o[k++]=g>>6&63|128,o[k++]=g&63|128;continue}else d--}if(Y)throw Error("Found an unpaired surrogate");g=65533}o[k++]=g>>12|224,o[k++]=g>>6&63|128}o[k++]=g&63|128}}v=o.subarray(0,k)}Ye(l.g,8*x+2),Ye(l.g,v.length),Ie(l,l.g.end()),Ie(l,v)}}),Ut=ot(function(l,v,x,Y,k){if(l.h!==2)return!1;v=te(v,x,Y),x=l.g.i,Y=xe(l.g)>>>0;var o=l.g.g+Y,d=o-x;if(0>=d&&(l.g.i=o,k(v,l),d=o-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(Y+" bytes, instead read "+(Y-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=o,l.g.i=x,!0},function(l,v,x,Y,k){if(v=Le(v,Y,x),v!=null)for(Y=0;Y<v.length;Y++){var o=l;Ye(o.g,8*x+2);var d=o.g.end();Ie(o,d),d.push(o.h),o=d,k(v[Y],l),d=l;var g=o.pop();for(g=d.h+d.g.length()-g;127<g;)o.push(g&127|128),g>>>=7,d.h++;o.push(g),d.h++}});function Jt(){tn.apply(this,arguments)}if(dt(Jt,tn),Pt){var $t={};Object.defineProperties(Jt,($t[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),$t))}function Nt(l){Jt.call(this,l)}dt(Nt,Jt);function Tt(){return[1,bt,2,j,3,Rt,4,Rt]}function Et(l){Jt.call(this,l,-1,ae)}dt(Et,Jt),Et.prototype.addClassification=function(l,v){return te(this,1,Nt,l,v),this};function Dt(){return[1,Ut,Nt,Tt]}var ae=[1];function pe(l){Jt.call(this,l)}dt(pe,Jt);function ge(){return[1,j,2,j,3,j,4,j,5,j]}function Ne(l){Jt.call(this,l,-1,y)}dt(Ne,Jt);function h(){return[1,Ut,pe,ge]}var y=[1];function G(l){Jt.call(this,l)}dt(G,Jt);function H(){return[1,j,2,j,3,j,4,j,5,j,6,rt]}function K(l,v,x){if(x=l.createShader(x===0?l.VERTEX_SHADER:l.FRAGMENT_SHADER),l.shaderSource(x,v),l.compileShader(x),!l.getShaderParameter(x,l.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
20
20
|
|
|
21
|
-
`+l.getShaderInfoLog(x));return x}function _(l){return
|
|
21
|
+
`+l.getShaderInfoLog(x));return x}function _(l){return Le(l,Nt,1).map(function(v){return{index:se(v,1),score:oe(v,2),label:fe(v,3)!=null?tt(v,3):void 0,displayName:fe(v,4)!=null?tt(v,4):void 0}})}function M(l){return{x:oe(l,1),y:oe(l,2),z:oe(l,3),visibility:fe(l,4)!=null?oe(l,4):void 0}}function q(l){return l.map(function(v){return Le(V(v,Ne,h),pe,1).map(M)})}function ct(l,v){this.h=l,this.g=v,this.l=0}function s(l,v,x){return X(l,v),typeof l.g.canvas.transferToImageBitmap=="function"?Promise.resolve(l.g.canvas.transferToImageBitmap()):x?Promise.resolve(l.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(l.g.canvas):(l.i===void 0&&(l.i=document.createElement("canvas")),new Promise(function(Y){l.i.height=l.g.canvas.height,l.i.width=l.g.canvas.width,l.i.getContext("2d",{}).drawImage(l.g.canvas,0,0,l.g.canvas.width,l.g.canvas.height),Y(l.i)}))}function X(l,v){var x=l.g;if(l.o===void 0){var Y=K(x,`
|
|
22
22
|
attribute vec2 aVertex;
|
|
23
23
|
attribute vec2 aTex;
|
|
24
24
|
varying vec2 vTex;
|
|
@@ -31,11 +31,11 @@
|
|
|
31
31
|
uniform sampler2D sampler0;
|
|
32
32
|
void main(){
|
|
33
33
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
34
|
-
}`,1),o=x.createProgram();if(x.attachShader(o,
|
|
34
|
+
}`,1),o=x.createProgram();if(x.attachShader(o,Y),x.attachShader(o,k),x.linkProgram(o),!x.getProgramParameter(o,x.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
35
35
|
|
|
36
|
-
`+x.getProgramInfoLog(o));w=l.o=o,x.useProgram(w),k=x.getUniformLocation(w,"sampler0"),l.j={K:x.getAttribLocation(w,"aVertex"),J:x.getAttribLocation(w,"aTex"),qa:k},l.u=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.enableVertexAttribArray(l.j.K),x.vertexAttribPointer(l.j.K,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),l.s=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.enableVertexAttribArray(l.j.J),x.vertexAttribPointer(l.j.J,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),x.uniform1i(k,0)}w=l.j,x.useProgram(l.o),x.canvas.width=v.width,x.canvas.height=v.height,x.viewport(0,0,v.width,v.height),x.activeTexture(x.TEXTURE0),l.h.bindTexture2d(v.glName),x.enableVertexAttribArray(w.K),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.vertexAttribPointer(w.K,2,x.FLOAT,!1,0,0),x.enableVertexAttribArray(w.J),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.vertexAttribPointer(w.J,2,x.FLOAT,!1,0,0),x.bindFramebuffer(x.DRAW_FRAMEBUFFER?x.DRAW_FRAMEBUFFER:x.FRAMEBUFFER,null),x.clearColor(0,0,0,0),x.clear(x.COLOR_BUFFER_BIT),x.colorMask(!0,!0,!0,!0),x.drawArrays(x.TRIANGLE_FAN,0,4),x.disableVertexAttribArray(w.K),x.disableVertexAttribArray(w.J),x.bindBuffer(x.ARRAY_BUFFER,null),l.h.bindTexture2d(0)}function R(l){this.g=l}var T=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function J(l,v){return v+l}function A(l,v){window[l]=v}function B(l){var v=document.createElement("script");return v.setAttribute("src",l),v.setAttribute("crossorigin","anonymous"),new Promise(function(x){v.addEventListener("load",function(){x()},!1),v.addEventListener("error",function(){x()},!1),document.body.appendChild(v)})}function nt(){return Zt(function(l){switch(l.g){case 1:return l.o=2,P(l,WebAssembly.instantiate(T),4);case 4:l.g=3,l.o=0;break;case 2:return l.o=0,l.j=null,l.return(!1);case 3:return l.return(!0)}})}function $(l){if(this.g=l,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.$=!0,this.D=Promise.resolve(),this.Z="",this.C={},this.locateFile=l&&l.locateFile||J,typeof window=="object")var v=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")v=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.aa=v,l.options){v=Y(Object.keys(l.options));for(var x=v.next();!x.done;x=v.next()){x=x.value;var w=l.options[x].default;w!==void 0&&(this.j[x]=typeof w=="function"?w():w)}}}i=$.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var v,x,w,k,o,d,g,e,u,m,t;return Zt(function(c){switch(c.g){case 1:return l.$?(v=l.g.files===void 0?[]:typeof l.g.files=="function"?l.g.files(l.j):l.g.files,P(c,nt(),2)):c.return();case 2:if(x=c.h,typeof window=="object")return A("createMediapipeSolutionsWasm",{locateFile:l.locateFile}),A("createMediapipeSolutionsPackedAssets",{locateFile:l.locateFile}),d=v.filter(function(a){return a.data!==void 0}),g=v.filter(function(a){return a.data===void 0}),e=Promise.all(d.map(function(a){var b=xt(l,a.url);if(a.path!==void 0){var S=a.path;b=b.then(function(F){return l.overrideFile(S,F),Promise.resolve(F)})}return b})),u=Promise.all(g.map(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x?B(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,S;return Zt(function(F){if(F.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,S=l,P(F,a(b),2);S.h=F.h,F.g=0})}),m=function(){return Zt(function(a){return l.g.graph&&l.g.graph.url?a=P(a,xt(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),P(c,Promise.all([u,e,m]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return w=v.filter(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x}).map(function(a){return l.locateFile(a.url,l.aa)}),importScripts.apply(null,N(w)),k=l,P(c,createMediapipeSolutionsWasm(Module),6);case 6:k.h=c.h,l.l=new OffscreenCanvas(1,1),l.h.canvas=l.l,o=l.h.GL.createContext(l.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),l.h.GL.makeContextCurrent(o),c.g=4;break;case 7:if(l.l=document.createElement("canvas"),t=l.l.getContext("webgl2",{}),!t&&(t=l.l.getContext("webgl",{}),!t))return alert("Failed to create WebGL canvas context when passing video frame."),c.return();l.G=t,l.h.canvas=l.l,l.h.createContext(l.l,!0,!0,{});case 4:l.i=new l.h.SolutionWasm,l.$=!1,c.g=0}})}function Xt(l){var v,x,w,k,o,d,g,e;return Zt(function(u){if(u.g==1){if(l.g.graph&&l.g.graph.url&&l.Z===l.g.graph.url)return u.return();if(l.s=!0,!l.g.graph||!l.g.graph.url){u.g=2;return}return l.Z=l.g.graph.url,P(u,xt(l,l.g.graph.url),3)}for(u.g!=2&&(v=u.h,l.i.loadGraph(v)),x=Y(Object.keys(l.C)),w=x.next();!w.done;w=x.next())k=w.value,l.i.overrideFile(k,l.C[k]);if(l.C={},l.g.listeners)for(o=Y(l.g.listeners),d=o.next();!d.done;d=o.next())g=d.value,It(l,g);e=l.j,l.j={},l.setOptions(e),u.g=0})}i.reset=function(){var l=this;return Zt(function(v){l.i&&(l.i.reset(),l.o={},l.u={}),v.g=0})},i.setOptions=function(l,v){var x=this;if(v=v||this.g.options){for(var w=[],k=[],o={},d=Y(Object.keys(l)),g=d.next();!g.done;o={R:o.R,S:o.S},g=d.next()){var e=g.value;e in this.j&&this.j[e]===l[e]||(this.j[e]=l[e],g=v[e],g!==void 0&&(g.onChange&&(o.R=g.onChange,o.S=l[e],w.push(function(u){return function(){var m;return Zt(function(t){if(t.g==1)return P(t,u.R(u.S),2);m=t.h,m===!0&&(x.s=!0),t.g=0})}}(o))),g.graphOptionXref&&(e={valueNumber:g.type===1?l[e]:0,valueBoolean:g.type===0?l[e]:!1,valueString:g.type===2?l[e]:""},g=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),g.graphOptionXref),e),k.push(g))))}(w.length!==0||k.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(k),this.A=(this.A===void 0?[]:this.A).concat(w))}};function Kt(l){var v,x,w,k,o,d,g;return Zt(function(e){switch(e.g){case 1:if(!l.s)return e.return();if(!l.A){e.g=2;break}v=Y(l.A),x=v.next();case 3:if(x.done){e.g=5;break}return w=x.value,P(e,w(),4);case 4:x=v.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(k=new l.h.GraphOptionChangeRequestList,o=Y(l.B),d=o.next();!d.done;d=o.next())g=d.value,k.push_back(g);l.i.changeOptions(k),k.delete(),l.B=void 0}l.s=!1,e.g=0}})}i.initialize=function(){var l=this;return Zt(function(v){return v.g==1?P(v,yt(l),2):v.g!=3?P(v,Xt(l),3):P(v,Kt(l),0)})};function xt(l,v){var x,w;return Zt(function(k){return v in l.H?k.return(l.H[v]):(x=l.locateFile(v,""),w=fetch(x).then(function(o){return o.arrayBuffer()}),l.H[v]=w,k.return(w))})}i.overrideFile=function(l,v){this.i?this.i.overrideFile(l,v):this.C[l]=v},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(l,v){var x=this,w,k,o,d,g,e,u,m,t;return Zt(function(c){switch(c.g){case 1:return x.g.inputs?(w=1e3*(v==null?performance.now():v),P(c,x.D,2)):c.return();case 2:return P(c,x.initialize(),3);case 3:for(k=new x.h.PacketDataList,o=Y(Object.keys(l)),d=o.next();!d.done;d=o.next())if(g=d.value,e=x.g.inputs[g]){t:{var a=l[g];switch(e.type){case"video":var b=x.o[e.stream];if(b||(b=new ct(x.h,x.G),x.o[e.stream]=b),b.l===0&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&a instanceof HTMLVideoElement)var S=a.videoWidth,F=a.videoHeight;else typeof HTMLImageElement<"u"&&a instanceof HTMLImageElement?(S=a.naturalWidth,F=a.naturalHeight):(S=a.width,F=a.height);F={glName:b.l,width:S,height:F},S=b.g,S.canvas.width=F.width,S.canvas.height=F.height,S.activeTexture(S.TEXTURE0),b.h.bindTexture2d(b.l),S.texImage2D(S.TEXTURE_2D,0,S.RGBA,S.RGBA,S.UNSIGNED_BYTE,a),b.h.bindTexture2d(0),b=F;break t;case"detections":for(b=x.o[e.stream],b||(b=new R(x.h),x.o[e.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(a.length),F=0;F<a.length;++F){S=a[F];var L=b.data,U=L.setBoundingBox,j=F,Q=S.ea,D=new G;if(Lt(D,1,Q.ka),Lt(D,2,Q.la),Lt(D,3,Q.height),Lt(D,4,Q.width),Lt(D,5,Q.rotation),Lt(D,6,Q.ia),Q=O(D,H),U.call(L,j,Q),S.Y)for(L=0;L<S.Y.length;++L){D=S.Y[L];var st=!!D.visibility;U=b.data,j=U.addNormalizedLandmark,Q=F,D=Object.assign(Object.assign({},D),{visibility:st?D.visibility:0}),st=new pe,Lt(st,1,D.x),Lt(st,2,D.y),Lt(st,3,D.z),D.visibility&&Lt(st,4,D.visibility),D=O(st,ge),j.call(U,Q,D)}if(S.V)for(L=0;L<S.V.length;++L)U=b.data,j=U.addClassification,Q=F,D=S.V[L],st=new Jt,Lt(st,2,D.score),D.index&&Lt(st,1,D.index),D.label&&Lt(st,3,D.label),D.displayName&&Lt(st,4,D.displayName),D=O(st,Yt),j.call(U,Q,D)}b=b.data;break t;default:b={}}}switch(u=b,m=e.stream,e.type){case"video":k.pushTexture2d(Object.assign(Object.assign({},u),{stream:m,timestamp:w}));break;case"detections":t=u,t.stream=m,t.timestamp=w,k.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return x.i.send(k),P(c,x.D,4);case 4:k.delete(),c.g=0}})};function ht(l,v,x){var w,k,o,d,g,e,u,m,t,c,a,b,S,F;return Zt(function(L){switch(L.g){case 1:if(!x)return L.return(v);for(w={},k=0,o=Y(Object.keys(x)),d=o.next();!d.done;d=o.next())g=d.value,e=x[g],typeof e!="string"&&e.type==="texture"&&v[e.stream]!==void 0&&++k;1<k&&(l.I=!1),u=Y(Object.keys(x)),d=u.next();case 2:if(d.done){L.g=4;break}if(m=d.value,t=x[m],typeof t=="string")return S=w,F=m,P(L,Wt(l,m,v[t]),14);if(c=v[t.stream],t.type==="detection_list"){if(c){for(var U=c.getRectList(),j=c.getLandmarksList(),Q=c.getClassificationsList(),D=[],st=0;st<U.size();++st){var ft=V(U.get(st),G,H);ft={ea:{ka:oe(ft,1),la:oe(ft,2),height:oe(ft,3),width:oe(ft,4),rotation:oe(ft,5,0),ia:se(ft,6)},Y:Fe(V(j.get(st),Je,h),pe,1).map(M),V:_(V(Q.get(st),Et,Dt))},D.push(ft)}U=D}else U=[];w[m]=U,L.g=7;break}if(t.type==="proto_list"){if(c){for(U=Array(c.size()),j=0;j<c.size();j++)U[j]=c.get(j);c.delete()}else U=[];w[m]=U,L.g=7;break}if(c===void 0){L.g=3;break}if(t.type==="float_list"){w[m]=c,L.g=7;break}if(t.type==="proto"){w[m]=c,L.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[m],a||(a=new ct(l.h,l.G),l.u[m]=a),P(L,s(a,c,l.I),13);case 13:b=L.h,w[m]=b;case 7:t.transform&&w[m]&&(w[m]=t.transform(w[m])),L.g=3;break;case 14:S[F]=L.h;case 3:d=u.next(),L.g=2;break;case 4:return L.return(w)}})}function Wt(l,v,x){var w;return Zt(function(k){return typeof x=="number"||x instanceof Uint8Array||x instanceof l.h.Uint8BlobList?k.return(x):x instanceof l.h.Texture2dDataOut?(w=l.u[v],w||(w=new ct(l.h,l.G),l.u[v]=w),k.return(s(w,x,l.I))):k.return(void 0)})}function It(l,v){for(var x=v.name||"$",w=[].concat(N(v.wants)),k=new l.h.StringList,o=Y(v.wants),d=o.next();!d.done;d=o.next())k.push_back(d.value);o=l.h.PacketListener.implement({onResults:function(g){for(var e={},u=0;u<v.wants.length;++u)e[w[u]]=g.get(u);var m=l.listeners[x];m&&(l.D=ht(l,e,v.outs).then(function(t){t=m(t);for(var c=0;c<v.wants.length;++c){var a=e[w[c]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(k,o),k.delete()}i.onResults=function(l,v){this.listeners[v||"$"]=l},Ht("Solution",$),Ht("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Tt(l){return l===void 0&&(l=0),l===1?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ct(l){var v=this;l=l||{},this.g=new $({locateFile:l.locateFile,files:function(x){return[{url:"hands_solution_packed_assets_loader.js"},{simd:!1,url:"hands_solution_wasm_bin.js"},{simd:!0,url:"hands_solution_simd_wasm_bin.js"},{data:!0,url:Tt(x.modelComplexity)}]},graph:{url:"hands.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["multi_hand_landmarks","multi_hand_world_landmarks","image_transformed","multi_handedness"],outs:{image:"image_transformed",multiHandLandmarks:{type:"proto_list",stream:"multi_hand_landmarks",transform:q},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:q},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(x){return x.map(function(w){return _(V(w,Et,Dt))[0]})}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumHands:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculator",fieldName:"int_value"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(x){var w,k,o;return Zt(function(d){return d.g==1?(w=Tt(x),k="third_party/mediapipe/modules/hand_landmark/"+w,P(d,xt(v.g,w),2)):(o=d.h,v.g.overrideFile(k,o),d.return(!0))})}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"handlandmarktrackinggpu__palmdetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"handlandmarktrackinggpu__handlandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}}}})}i=Ct.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(l){this.g.onResults(l)},i.initialize=function(){var l=this;return Zt(function(v){return P(v,l.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(l){var v=this;return Zt(function(x){return P(x,v.g.send(l),0)})},i.setOptions=function(l){this.g.setOptions(l)},Ht("Hands",Ct),Ht("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ht("VERSION","0.4.1646424915")}).call(vi);var Gi={};(function(){var i;function n(e){var u=0;return function(){return u<e.length?{done:!1,value:e[u++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(e,u,m){return e==Array.prototype||e==Object.prototype||(e[u]=m.value),e};function f(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var u=0;u<e.length;++u){var m=e[u];if(m&&m.Math==Math)return m}throw Error("Cannot find global object")}var Z=f(this);function I(e,u){if(u)t:{var m=Z;e=e.split(".");for(var t=0;t<e.length-1;t++){var c=e[t];if(!(c in m))break t;m=m[c]}e=e[e.length-1],t=m[e],u=u(t),u!=t&&u!=null&&r(m,e,{configurable:!0,writable:!0,value:u})}}I("Symbol",function(e){function u(a){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new m(t+(a||"")+"_"+c++,a)}function m(a,b){this.g=a,r(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;m.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return u}),I("Symbol.iterator",function(e){if(e)return e;e=Symbol("Symbol.iterator");for(var u="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),m=0;m<u.length;m++){var t=Z[u[m]];typeof t=="function"&&typeof t.prototype[e]!="function"&&r(t.prototype,e,{configurable:!0,writable:!0,value:function(){return C(n(this))}})}return e});function C(e){return e={next:e},e[Symbol.iterator]=function(){return this},e}function Y(e){var u=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];return u?u.call(e):{next:n(e)}}function N(e){if(!(e instanceof Array)){e=Y(e);for(var u,m=[];!(u=e.next()).done;)m.push(u.value);e=m}return e}var et=typeof Object.create=="function"?Object.create:function(e){function u(){}return u.prototype=e,new u},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var wt={a:!0},Ft={};try{Ft.__proto__=wt,pt=Ft.a;break t}catch{}pt=!1}lt=pt?function(e,u){if(e.__proto__=u,e.__proto__!==u)throw new TypeError(e+" is not extensible");return e}:null}var at=lt;function dt(e,u){if(e.prototype=et(u.prototype),e.prototype.constructor=e,at)at(e,u);else for(var m in u)if(m!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(u,m);t&&Object.defineProperty(e,m,t)}else e[m]=u[m];e.da=u.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Bt.prototype.o=function(e){this.h=e};function ee(e,u){e.j={U:u,V:!0},e.g=e.m||e.s}Bt.prototype.return=function(e){this.j={return:e},this.g=this.s};function P(e,u,m){return e.g=m,{value:u}}function De(e){this.g=new Bt,this.h=e}function je(e,u){kt(e.g);var m=e.g.i;return m?We(e,"return"in m?m.return:function(t){return{value:t,done:!0}},u,e.g.return):(e.g.return(u),jt(e))}function We(e,u,m,t){try{var c=u.call(e.g.i,m);if(!(c instanceof Object))throw new TypeError("Iterator result "+c+" is not an object");if(!c.done)return e.g.l=!1,c;var a=c.value}catch(b){return e.g.i=null,ee(e.g,b),jt(e)}return e.g.i=null,t.call(e.g,a),jt(e)}function jt(e){for(;e.g.g;)try{var u=e.h(e.g);if(u)return e.g.l=!1,{value:u.value,done:!1}}catch(m){e.g.h=void 0,ee(e.g,m)}if(e.g.l=!1,e.g.j){if(u=e.g.j,e.g.j=null,u.V)throw u.U;return{value:u.return,done:!0}}return{value:void 0,done:!0}}function Hn(e){this.next=function(u){return kt(e.g),e.g.i?u=We(e,e.g.i.next,u,e.g.o):(e.g.o(u),u=jt(e)),u},this.throw=function(u){return kt(e.g),e.g.i?u=We(e,e.g.i.throw,u,e.g.o):(ee(e.g,u),u=jt(e)),u},this.return=function(u){return je(e,u)},this[Symbol.iterator]=function(){return this}}function ne(e){function u(t){return e.next(t)}function m(t){return e.throw(t)}return new Promise(function(t,c){function a(b){b.done?t(b.value):Promise.resolve(b.value).then(u,m).then(a,c)}a(e.next())})}function Zt(e){return ne(new Hn(new De(e)))}I("Promise",function(e){function u(b){this.h=0,this.i=void 0,this.g=[],this.o=!1;var S=this.j();try{b(S.resolve,S.reject)}catch(F){S.reject(F)}}function m(){this.g=null}function t(b){return b instanceof u?b:new u(function(S){S(b)})}if(e)return e;m.prototype.h=function(b){if(this.g==null){this.g=[];var S=this;this.i(function(){S.l()})}this.g.push(b)};var c=Z.setTimeout;m.prototype.i=function(b){c(b,0)},m.prototype.l=function(){for(;this.g&&this.g.length;){var b=this.g;this.g=[];for(var S=0;S<b.length;++S){var F=b[S];b[S]=null;try{F()}catch(L){this.j(L)}}}this.g=null},m.prototype.j=function(b){this.i(function(){throw b})},u.prototype.j=function(){function b(L){return function(U){F||(F=!0,L.call(S,U))}}var S=this,F=!1;return{resolve:b(this.C),reject:b(this.l)}},u.prototype.C=function(b){if(b===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(b instanceof u)this.F(b);else{t:switch(typeof b){case"object":var S=b!=null;break t;case"function":S=!0;break t;default:S=!1}S?this.v(b):this.m(b)}},u.prototype.v=function(b){var S=void 0;try{S=b.then}catch(F){this.l(F);return}typeof S=="function"?this.G(S,b):this.m(b)},u.prototype.l=function(b){this.s(2,b)},u.prototype.m=function(b){this.s(1,b)},u.prototype.s=function(b,S){if(this.h!=0)throw Error("Cannot settle("+b+", "+S+"): Promise already settled in state"+this.h);this.h=b,this.i=S,this.h===2&&this.D(),this.A()},u.prototype.D=function(){var b=this;c(function(){if(b.B()){var S=Z.console;typeof S<"u"&&S.error(b.i)}},1)},u.prototype.B=function(){if(this.o)return!1;var b=Z.CustomEvent,S=Z.Event,F=Z.dispatchEvent;return typeof F>"u"?!0:(typeof b=="function"?b=new b("unhandledrejection",{cancelable:!0}):typeof S=="function"?b=new S("unhandledrejection",{cancelable:!0}):(b=Z.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,F(b))},u.prototype.A=function(){if(this.g!=null){for(var b=0;b<this.g.length;++b)a.h(this.g[b]);this.g=null}};var a=new m;return u.prototype.F=function(b){var S=this.j();b.J(S.resolve,S.reject)},u.prototype.G=function(b,S){var F=this.j();try{b.call(S,F.resolve,F.reject)}catch(L){F.reject(L)}},u.prototype.then=function(b,S){function F(Q,D){return typeof Q=="function"?function(st){try{L(Q(st))}catch(ft){U(ft)}}:D}var L,U,j=new u(function(Q,D){L=Q,U=D});return this.J(F(b,L),F(S,U)),j},u.prototype.catch=function(b){return this.then(void 0,b)},u.prototype.J=function(b,S){function F(){switch(L.h){case 1:b(L.i);break;case 2:S(L.i);break;default:throw Error("Unexpected state: "+L.h)}}var L=this;this.g==null?a.h(F):this.g.push(F),this.o=!0},u.resolve=t,u.reject=function(b){return new u(function(S,F){F(b)})},u.race=function(b){return new u(function(S,F){for(var L=Y(b),U=L.next();!U.done;U=L.next())t(U.value).J(S,F)})},u.all=function(b){var S=Y(b),F=S.next();return F.done?t([]):new u(function(L,U){function j(st){return function(ft){Q[st]=ft,D--,D==0&&L(Q)}}var Q=[],D=0;do Q.push(void 0),D++,t(F.value).J(j(Q.length-1),U),F=S.next();while(!F.done)})},u});function $e(e,u){e instanceof String&&(e+="");var m=0,t=!1,c={next:function(){if(!t&&m<e.length){var a=m++;return{value:u(a,e[a]),done:!1}}return t=!0,{done:!0,value:void 0}}};return c[Symbol.iterator]=function(){return c},c}var An=typeof Object.assign=="function"?Object.assign:function(e,u){for(var m=1;m<arguments.length;m++){var t=arguments[m];if(t)for(var c in t)Object.prototype.hasOwnProperty.call(t,c)&&(e[c]=t[c])}return e};I("Object.assign",function(e){return e||An}),I("Object.is",function(e){return e||function(u,m){return u===m?u!==0||1/u===1/m:u!==u&&m!==m}}),I("Array.prototype.includes",function(e){return e||function(u,m){var t=this;t instanceof String&&(t=String(t));var c=t.length;for(m=m||0,0>m&&(m=Math.max(m+c,0));m<c;m++){var a=t[m];if(a===u||Object.is(a,u))return!0}return!1}}),I("String.prototype.includes",function(e){return e||function(u,m){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(u instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(u,m||0)!==-1}}),I("Array.prototype.keys",function(e){return e||function(){return $e(this,function(u){return u})}});var Re=this||self;function Ht(e,u){e=e.split(".");var m=Re;e[0]in m||typeof m.execScript>"u"||m.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||u===void 0?m[t]&&m[t]!==Object.prototype[t]?m=m[t]:m=m[t]={}:m[t]=u}function Ye(e){Re.setTimeout(function(){throw e},0)}function sn(e){Ye(e)}function Gn(e,u){sn(Error("Invalid wire type: "+e+" (at position "+u+")"))}function Fn(){sn(Error("Failed to read varint, encoding is invalid."))}function Rn(e,u){return u=String.fromCharCode.apply(null,u),e==null?u:e+u}var Nn,dn=typeof TextDecoder<"u",pn,kn=typeof TextEncoder<"u";function Cn(e){if(kn)e=(pn||(pn=new TextEncoder)).encode(e);else{var u=void 0;u=u===void 0?!1:u;for(var m=0,t=new Uint8Array(3*e.length),c=0;c<e.length;c++){var a=e.charCodeAt(c);if(128>a)t[m++]=a;else{if(2048>a)t[m++]=a>>6|192;else{if(55296<=a&&57343>=a){if(56319>=a&&c<e.length){var b=e.charCodeAt(++c);if(56320<=b&&57343>=b){a=1024*(a-55296)+b-56320+65536,t[m++]=a>>18|240,t[m++]=a>>12&63|128,t[m++]=a>>6&63|128,t[m++]=a&63|128;continue}else c--}if(u)throw Error("Found an unpaired surrogate");a=65533}t[m++]=a>>12|224,t[m++]=a>>6&63|128}t[m++]=a&63|128}}e=t.subarray(0,m)}return e}var ze={},Me=null;function xn(e){var u;u===void 0&&(u=0),Se(),u=ze[u];for(var m=Array(Math.floor(e.length/3)),t=u[64]||"",c=0,a=0;c<e.length-2;c+=3){var b=e[c],S=e[c+1],F=e[c+2],L=u[b>>2];b=u[(b&3)<<4|S>>4],S=u[(S&15)<<2|F>>6],F=u[F&63],m[a++]=L+b+S+F}switch(L=0,F=t,e.length-c){case 2:L=e[c+1],F=u[(L&15)<<2]||t;case 1:e=e[c],m[a]=u[e>>2]+u[(e&3)<<4|L>>4]+F+t}return m.join("")}function Xn(e){var u=e.length,m=3*u/4;m%3?m=Math.floor(m):"=.".indexOf(e[u-1])!=-1&&(m="=.".indexOf(e[u-2])!=-1?m-2:m-1);var t=new Uint8Array(m),c=0;return he(e,function(a){t[c++]=a}),t.subarray(0,c)}function he(e,u){function m(F){for(;t<e.length;){var L=e.charAt(t++),U=Me[L];if(U!=null)return U;if(!/^[\s\xa0]*$/.test(L))throw Error("Unknown base64 encoding at char: "+L)}return F}Se();for(var t=0;;){var c=m(-1),a=m(0),b=m(64),S=m(64);if(S===64&&c===-1)break;u(c<<2|a>>4),b!=64&&(u(a<<4&240|b>>2),S!=64&&u(b<<6&192|S))}}function Se(){if(!Me){Me={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],m=0;5>m;m++){var t=e.concat(u[m].split(""));ze[m]=t;for(var c=0;c<t.length;c++){var a=t[c];Me[a]===void 0&&(Me[a]=c)}}}}var Oe=typeof Uint8Array=="function",re;function Ve(e){if(this.g=e,e!==null&&e.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var e="";else e=this.g,e=this.g=e==null||typeof e=="string"?e:Oe&&e instanceof Uint8Array?xn(e):null;return e};var ln=typeof Uint8Array.prototype.slice=="function";function Be(e,u,m){return u===m?re||(re=new Uint8Array(0)):ln?e.slice(u,m):new Uint8Array(e.subarray(u,m))}var Qt=0,Ze=0;function Le(e){if(e.constructor===Uint8Array)return e;if(e.constructor===ArrayBuffer)return new Uint8Array(e);if(e.constructor===Array)return new Uint8Array(e);if(e.constructor===String)return Xn(e);if(e.constructor===Ve){if(e.g==null)var u=re||(re=new Uint8Array(0));else{u=Uint8Array;var m=e.g;m=m==null||Oe&&m!=null&&m instanceof Uint8Array?m:typeof m=="string"?Xn(m):null,e=e.g=m,u=new u(e)}return u}if(e instanceof Uint8Array)return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Mt(e,u){u=u===void 0?{}:u,u=u.u===void 0?!1:u.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=u,e&&xe(this,e)}function xe(e,u){e.h=Le(u),e.m=0,e.i=e.h.length,e.g=e.m}Mt.prototype.reset=function(){this.g=this.m};function zt(e){for(var u=128,m=0,t=0,c=0;4>c&&128<=u;c++)u=e.h[e.g++],m|=(u&127)<<7*c;if(128<=u&&(u=e.h[e.g++],m|=(u&127)<<28,t|=(u&127)>>4),128<=u)for(c=0;5>c&&128<=u;c++)u=e.h[e.g++],t|=(u&127)<<7*c+3;if(128>u)return e=m>>>0,u=t>>>0,(t=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0),t?-e:e;e.l=!0,Fn()}function ye(e){e.g>e.i&&(e.l=!0,sn(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}Mt.prototype.j=function(){var e=this.h,u=e[this.g],m=u&127;return 128>u?(this.g+=1,ye(this),m):(u=e[this.g+1],m|=(u&127)<<7,128>u?(this.g+=2,ye(this),m):(u=e[this.g+2],m|=(u&127)<<14,128>u?(this.g+=3,ye(this),m):(u=e[this.g+3],m|=(u&127)<<21,128>u?(this.g+=4,ye(this),m):(u=e[this.g+4],m|=(u&15)<<28,128>u?(this.g+=5,ye(this),m>>>0):(this.g+=5,128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]?(this.l=!0,Fn(),m):(ye(this),m))))))},Mt.prototype.o=function(){var e=this.h[this.g],u=this.h[this.g+1],m=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,ye(this),m=(e<<0|u<<8|m<<16|t<<24)>>>0,e=2*(m>>31)+1,u=m>>>23&255,m&=8388607,u==255?m?NaN:1/0*e:u==0?e*Math.pow(2,-149)*m:e*Math.pow(2,u-150)*(m+Math.pow(2,23))};var we=[];function qe(){this.g=new Uint8Array(64),this.h=0}function Xe(e,u){if(!(e.h+1<e.g.length)){var m=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(m)}e.g[e.h++]=u}qe.prototype.length=function(){return this.h},qe.prototype.end=function(){var e=this.g,u=this.h;return this.h=0,Be(e,0,u)};function Ot(e,u){for(;127<u;)Xe(e,u&127|128),u>>>=7;Xe(e,u)}function Ae(e){var u={},m=u.N===void 0?!1:u.N;this.m={u:u.u===void 0?!1:u.u},this.N=m,u=this.m,we.length?(m=we.pop(),u&&(m.u=u.u),e&&xe(m,e),e=m):e=new Mt(e,u),this.g=e,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Ae.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Pe(e){var u=e.g;if((u=u.g==u.i)||(u=e.j)||(u=e.g,u=u.l||0>u.g||u.g>u.i),u)return!1;e.l=e.g.g;var m=e.g.j();return u=m>>>3,m&=7,0<=m&&5>=m?(e.i=u,e.h=m,!0):(e.j=!0,Gn(m,e.l),!1)}function Ie(e){switch(e.h){case 0:if(e.h!=0)Ie(e);else t:{e=e.g;for(var u=e.g,m=0;10>m;m++){if((e.h[u]&128)===0){e.g=u+1,ye(e);break t}u++}e.l=!0,Fn()}break;case 1:e=e.g,e.g+=8,ye(e);break;case 2:e.h!=2?Ie(e):(u=e.g.j(),e=e.g,e.g+=u,ye(e));break;case 5:e=e.g,e.g+=4,ye(e);break;case 3:u=e.i;do{if(!Pe(e)){e.j=!0,sn(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=u&&(e.j=!0,sn(Error("Unmatched end-group tag")));break}Ie(e)}while(1);break;default:e.j=!0,Gn(e.h,e.l)}}function Wn(e,u,m){e.N||(e=Be(e.g.h,m,e.g.g),(m=u.o)?m.push(e):u.o=[e])}function cn(e,u,m){var t=e.g.i,c=e.g.j(),a=e.g.g+c;if(e.g.i=a,m(u,e),m=a-e.g.g,m!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(c+" bytes, instead read "+(c-m)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,u}function _e(e,u,m){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)m.push(u.call(e.g))}var un=[];function ve(){this.h=[],this.i=0,this.g=new qe}function Te(e,u){u.length!==0&&(e.h.push(u),e.i+=u.length)}function Ge(e,u,m){Ot(e.g,8*u+2),Ot(e.g,m.length),Te(e,e.g.end()),Te(e,m)}var ie=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(e,u){Object.isFrozen(e)||(ie?e[ie]|=u:e.g!==void 0?e.g|=u:Object.defineProperties(e,{g:{value:u,configurable:!0,writable:!0,enumerable:!1}}))}function qt(e){if(!e)return 0;var u;return ie?u=e[ie]:u=e.g,u==null?0:u}function Pt(e){return Array.isArray(e)&&Qe(e,1),e}function hn(e){if(!Array.isArray(e))throw Error("cannot mark non-array as immutable");Qe(e,2)}function fe(e){return e!==null&&typeof e=="object"&&e.constructor===Object}function Lt(e){switch(typeof e){case"number":return isFinite(e)?e:String(e);case"object":return Oe&&e!=null&&e instanceof Uint8Array?xn(e):e;default:return e}}function Vt(e,u){if(e!=null)return Array.isArray(e)||fe(e)?oe(e,u):u(e)}function oe(e,u){if(Array.isArray(e)){for(var m=Array(e.length),t=0;t<e.length;t++)m[t]=Vt(e[t],u);return qt(e)&1&&Pt(m),m}m={};for(t in e)m[t]=Vt(e[t],u);return m}var Fe;function te(e,u,m){var t=Fe;Fe=null,e||(e=t),t=this.constructor.ba,e||(e=t?[t]:[]),this.j=(t?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=e;t:{if(t=this.h.length,e=t-1,t&&(t=this.h[e],fe(t))){this.l=e-this.j,this.i=t;break t}u!==void 0&&-1<u?(this.l=Math.max(u,e+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(m)for(u=0;u<m.length;u++)e=m[u],e<this.l?(e+=this.j,(t=this.h[e])?Pt(t):this.h[e]=se):(tt(this),(t=this.i[e])?Pt(t):this.i[e]=se)}var se=Object.freeze(Pt([]));function tt(e){var u=e.l+e.j;e.h[u]||(e.i=e.h[u]={})}function it(e,u,m){return u===-1?null:(m===void 0?0:m)||u>=e.l?e.i?e.i[u]:void 0:e.h[u+e.j]}function ut(e,u,m){m=m===void 0?!0:m;var t=t===void 0?!1:t,c=it(e,u,t);return c==null&&(c=se),c===se?(c=Pt([]),St(e,u,c,t)):m&&Array.isArray(c)&&qt(c)&2&&(c=c.slice(),St(e,u,c,t)),c}function _t(e){var u=ut(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var m=0;m<u.length;m++)u[m]=+u[m];e.m[3]=!0}return u}function de(e,u,m){return e=it(e,u),e==null?m:e}function ue(e,u,m){return e=it(e,u),e=e==null?e:+e,e==null?m===void 0?0:m:e}function St(e,u,m,t){(t===void 0?0:t)||u>=e.l?(tt(e),e.i[u]=m):e.h[u+e.j]=m}function me(e,u,m){if(m===-1)return null;e.g||(e.g={});var t=e.g[m];if(t)return t;var c=it(e,m,!1);return c==null?t:(u=new u(c),e.g[m]=u)}function He(e,u,m){e.g||(e.g={});var t=e.g[m];if(!t){var c=ut(e,m,!1);t=[];for(var a=Array.isArray(c)?!!(qt(c)&2):!1,b=0;b<c.length;b++)t[b]=new u(c[b]),a&&hn(t[b].h);a&&(hn(t),Object.freeze(t)),e.g[m]=t}return t}function tn(e,u,m,t,c){var a=He(e,t,u);m=m||new t,e=ut(e,u),c!=null?(a.splice(c,0,m),e.splice(c,0,en(m))):(a.push(m),e.push(en(m)))}te.prototype.toJSON=function(){var e=en(this);return oe(e,Lt)};function en(e){if(e.g)for(var u in e.g){var m=e.g[u];if(Array.isArray(m))for(var t=0;t<m.length;t++)m[t]&&en(m[t]);else m&&en(m)}return e.h}te.prototype.toString=function(){return en(this).toString()};function fn(e,u){if(e=e.o){Te(u,u.g.end());for(var m=0;m<e.length;m++)Te(u,e[m])}}function bn(e){var u=e[0];switch(e.length){case 2:var m=e[1];return function(F,L,U){return u(F,L,U,m)};case 3:var t=e[1],c=e[2];return function(F,L,U){return u(F,L,U,t,c)};case 4:var a=e[1],b=e[2],S=e[3];return function(F,L,U){return u(F,L,U,a,b,S)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function Ce(e,u,m){for(;Pe(u)&&u.h!=4;){var t=u.i,c=m[t];if(c){if(Array.isArray(c)&&(c=m[t]=bn(c)),!c(u,e,t)){t=u,c=e;var a=t.l;Ie(t),Wn(t,c,a)}}else t=u,c=e,a=t.l,Ie(t),Wn(t,c,a)}return e}function nn(e,u){var m=new ve;if(u(e,m),e=m.i+m.g.length(),e===0)m=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=m.h,c=t.length,a=u=0;a<c;a++){var b=t[a];b.length!==0&&(e.set(b,u),u+=b.length)}t=m.g,c=t.h,c!==0&&(e.set(t.g.subarray(0,c),u),t.h=0),m.h=[e],m=e}return m}function jn(e,u,m){if(un.length){var t=un.pop();e&&(xe(t.g,e),t.i=-1,t.h=-1),e=t}else e=new Ae(e);try{return m(new u,e)}finally{u=e.g,u.h=null,u.m=0,u.i=0,u.g=0,u.l=!1,u.u=!1,e.i=-1,e.h=-1,e.j=!1,100>un.length&&un.push(e)}}function rn(e,u,m){if(u=it(u,m),u!=null){Ot(e.g,8*m+5),e=e.g;var t=u;t=(m=0>t?1:0)?-t:t,t===0?0<1/t?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(t)?(Ze=0,Qt=2147483647):34028234663852886e22<t?(Ze=0,Qt=(m<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),Ze=0,Qt=(m<<31|t)>>>0):(u=Math.floor(Math.log(t)/Math.LN2),t*=Math.pow(2,-u),t=Math.round(8388608*t),16777216<=t&&++u,Ze=0,Qt=(m<<31|u+127<<23|t&8388607)>>>0),m=Qt,Xe(e,m>>>0&255),Xe(e,m>>>8&255),Xe(e,m>>>16&255),Xe(e,m>>>24&255)}}function Ne(e,u,m){return e.h!==5?!1:(St(u,m,e.g.o()),!0)}function gn(e,u,m){return e.h!==5&&e.h!==2?!1:(u=ut(u,m),e.h==2?_e(e,Mt.prototype.o,u):u.push(e.g.o()),!0)}function In(e,u,m){return e.h!==0?!1:(St(u,m,zt(e.g)),!0)}function Ke(e,u,m){return e.h!==0?!1:(St(u,m,e.g.j()),!0)}function En(e,u,m){if(e.h!==2)return!1;var t=e.g.j();e=e.g;var c=e.g;e.g+=t,ye(e),e=e.h;var a;if(dn)(a=Nn)||(a=Nn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(c,c+t));else{t=c+t;for(var b=[],S=null,F,L,U;c<t;)F=e[c++],128>F?b.push(F):224>F?c>=t?b.push(65533):(L=e[c++],194>F||(L&192)!==128?(c--,b.push(65533)):b.push((F&31)<<6|L&63)):240>F?c>=t-1?b.push(65533):(L=e[c++],(L&192)!==128||F===224&&160>L||F===237&&160<=L||((a=e[c++])&192)!==128?(c--,b.push(65533)):b.push((F&15)<<12|(L&63)<<6|a&63)):244>=F?c>=t-2?b.push(65533):(L=e[c++],(L&192)!==128||(F<<28)+(L-144)>>30!==0||((a=e[c++])&192)!==128||((U=e[c++])&192)!==128?(c--,b.push(65533)):(F=(F&7)<<18|(L&63)<<12|(a&63)<<6|U&63,F-=65536,b.push((F>>10&1023)+55296,(F&1023)+56320))):b.push(65533),8192<=b.length&&(S=Rn(S,b),b.length=0);a=Rn(S,b)}return St(u,m,a),!0}function on(e,u,m,t,c){if(e.h!==2)return!1;e=cn(e,new t,c);var a=a===void 0?!1:a;return u.g||(u.g={}),t=e&&en(e),u.g[m]=e,St(u,m,t,a),!0}function Zn(e,u,m,t,c){return e.h!==2?!1:(e=cn(e,new t,c),tn(u,m,e,t,void 0),!0)}function Sn(e,u,m){return e.h!==0&&e.h!==2?!1:(u=ut(u,m),e.h==2?_e(e,Mt.prototype.j,u):u.push(e.g.j()),!0)}function Kn(e,u,m){return e.h!==0?!1:(St(u,m,zt(e.g)),!0)}function an(e){te.call(this,e,-1,Qn)}var Yn;dt(an,te),an.prototype.getRows=function(){return it(this,1)},an.prototype.getCols=function(){return it(this,2)},an.prototype.getPackedDataList=function(){return _t(this)},an.prototype.getLayout=function(){return de(this,4,0)};function _n(e,u){return Ce(e,u,Yn||(Yn={1:Ke,2:Ke,3:gn,4:Kn}))}var Qn=[3];function wn(e){te.call(this,e)}var Ln;dt(wn,te);function p(e,u){var m=it(e,1);if(m!=null&&m!=null){Ot(u.g,8);var t=u.g;if(0<=m)Ot(t,m);else{for(var c=0;9>c;c++)Xe(t,m&127|128),m>>=7;Xe(t,1)}}rn(u,e,2),t=it(e,3),t!=null&&Ge(u,3,Cn(t)),t=it(e,4),t!=null&&Ge(u,4,Cn(t)),fn(e,u)}function W(e,u){return Ce(e,u,Ln||(Ln={1:Ke,2:Ne,3:En,4:En}))}function V(e){te.call(this,e,-1,ot)}var E;dt(V,te),V.prototype.addClassification=function(e,u){return tn(this,1,e,wn,u),this};function O(e,u){return Ce(e,u,E||(E={1:[Zn,wn,W]}))}var ot=[1];function z(e){te.call(this,e)}var rt;dt(z,te);function bt(e,u){rn(u,e,1),rn(u,e,2),rn(u,e,3),rn(u,e,4),rn(u,e,5),fn(e,u)}function Rt(e,u){return Ce(e,u,rt||(rt={1:Ne,2:Ne,3:Ne,4:Ne,5:Ne}))}function Ut(e){te.call(this,e,-1,Jt)}var Nt;dt(Ut,te);function $t(e,u){return Ce(e,u,Nt||(Nt={1:[Zn,z,Rt]}))}var Jt=[1];function Yt(e){te.call(this,e)}var Et;dt(Yt,te);function Dt(e,u){rn(u,e,1),rn(u,e,2),rn(u,e,3),rn(u,e,4),rn(u,e,5);var m=it(e,6);if(m!=null&&m!=null){Ot(u.g,48);var t=u.g,c=m;m=0>c,c=Math.abs(c);var a=c>>>0;for(c=Math.floor((c-a)/4294967296),c>>>=0,m&&(c=~c>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,c++,4294967295<c&&(c=0))),Qt=a,Ze=c,m=Qt,a=Ze;0<a||127<m;)Xe(t,m&127|128),m=(m>>>7|a<<25)>>>0,a>>>=7;Xe(t,m)}fn(e,u)}function ae(e,u){return Ce(e,u,Et||(Et={1:Ne,2:Ne,3:Ne,4:Ne,5:Ne,6:In}))}function pe(e){te.call(this,e,-1,h)}var ge;dt(pe,te),pe.prototype.getVertexType=function(){return de(this,1,0)},pe.prototype.getPrimitiveType=function(){return de(this,2,0)},pe.prototype.getVertexBufferList=function(){return _t(this)},pe.prototype.getIndexBufferList=function(){return ut(this,4)};function Je(e,u){return Ce(e,u,ge||(ge={1:Kn,2:Kn,3:gn,4:Sn}))}var h=[3,4];function y(e){te.call(this,e)}var G;dt(y,te),y.prototype.getMesh=function(){return me(this,pe,1)},y.prototype.getPoseTransformMatrix=function(){return me(this,an,2)};function H(e,u){return Ce(e,u,G||(G={1:[on,pe,Je],2:[on,an,_n]}))}var K=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(N(K),N(_),N(M),N(q),N(ct),N(s));function R(e,u,m){if(m=e.createShader(m===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(m,u),e.compileShader(m),!e.getShaderParameter(m,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
36
|
+
`+x.getProgramInfoLog(o));Y=l.o=o,x.useProgram(Y),k=x.getUniformLocation(Y,"sampler0"),l.j={K:x.getAttribLocation(Y,"aVertex"),J:x.getAttribLocation(Y,"aTex"),qa:k},l.u=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.enableVertexAttribArray(l.j.K),x.vertexAttribPointer(l.j.K,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),l.s=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.enableVertexAttribArray(l.j.J),x.vertexAttribPointer(l.j.J,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),x.uniform1i(k,0)}Y=l.j,x.useProgram(l.o),x.canvas.width=v.width,x.canvas.height=v.height,x.viewport(0,0,v.width,v.height),x.activeTexture(x.TEXTURE0),l.h.bindTexture2d(v.glName),x.enableVertexAttribArray(Y.K),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.vertexAttribPointer(Y.K,2,x.FLOAT,!1,0,0),x.enableVertexAttribArray(Y.J),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.vertexAttribPointer(Y.J,2,x.FLOAT,!1,0,0),x.bindFramebuffer(x.DRAW_FRAMEBUFFER?x.DRAW_FRAMEBUFFER:x.FRAMEBUFFER,null),x.clearColor(0,0,0,0),x.clear(x.COLOR_BUFFER_BIT),x.colorMask(!0,!0,!0,!0),x.drawArrays(x.TRIANGLE_FAN,0,4),x.disableVertexAttribArray(Y.K),x.disableVertexAttribArray(Y.J),x.bindBuffer(x.ARRAY_BUFFER,null),l.h.bindTexture2d(0)}function R(l){this.g=l}var w=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function N(l,v){return v+l}function A(l,v){window[l]=v}function B(l){var v=document.createElement("script");return v.setAttribute("src",l),v.setAttribute("crossorigin","anonymous"),new Promise(function(x){v.addEventListener("load",function(){x()},!1),v.addEventListener("error",function(){x()},!1),document.body.appendChild(v)})}function nt(){return Zt(function(l){switch(l.g){case 1:return l.o=2,P(l,WebAssembly.instantiate(w),4);case 4:l.g=3,l.o=0;break;case 2:return l.o=0,l.j=null,l.return(!1);case 3:return l.return(!0)}})}function $(l){if(this.g=l,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.$=!0,this.D=Promise.resolve(),this.Z="",this.C={},this.locateFile=l&&l.locateFile||N,typeof window=="object")var v=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")v=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.aa=v,l.options){v=T(Object.keys(l.options));for(var x=v.next();!x.done;x=v.next()){x=x.value;var Y=l.options[x].default;Y!==void 0&&(this.j[x]=typeof Y=="function"?Y():Y)}}}i=$.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var v,x,Y,k,o,d,g,e,u,m,t;return Zt(function(c){switch(c.g){case 1:return l.$?(v=l.g.files===void 0?[]:typeof l.g.files=="function"?l.g.files(l.j):l.g.files,P(c,nt(),2)):c.return();case 2:if(x=c.h,typeof window=="object")return A("createMediapipeSolutionsWasm",{locateFile:l.locateFile}),A("createMediapipeSolutionsPackedAssets",{locateFile:l.locateFile}),d=v.filter(function(a){return a.data!==void 0}),g=v.filter(function(a){return a.data===void 0}),e=Promise.all(d.map(function(a){var b=xt(l,a.url);if(a.path!==void 0){var S=a.path;b=b.then(function(L){return l.overrideFile(S,L),Promise.resolve(L)})}return b})),u=Promise.all(g.map(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x?B(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,S;return Zt(function(L){if(L.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,S=l,P(L,a(b),2);S.h=L.h,L.g=0})}),m=function(){return Zt(function(a){return l.g.graph&&l.g.graph.url?a=P(a,xt(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),P(c,Promise.all([u,e,m]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return Y=v.filter(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x}).map(function(a){return l.locateFile(a.url,l.aa)}),importScripts.apply(null,J(Y)),k=l,P(c,createMediapipeSolutionsWasm(Module),6);case 6:k.h=c.h,l.l=new OffscreenCanvas(1,1),l.h.canvas=l.l,o=l.h.GL.createContext(l.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),l.h.GL.makeContextCurrent(o),c.g=4;break;case 7:if(l.l=document.createElement("canvas"),t=l.l.getContext("webgl2",{}),!t&&(t=l.l.getContext("webgl",{}),!t))return alert("Failed to create WebGL canvas context when passing video frame."),c.return();l.G=t,l.h.canvas=l.l,l.h.createContext(l.l,!0,!0,{});case 4:l.i=new l.h.SolutionWasm,l.$=!1,c.g=0}})}function Xt(l){var v,x,Y,k,o,d,g,e;return Zt(function(u){if(u.g==1){if(l.g.graph&&l.g.graph.url&&l.Z===l.g.graph.url)return u.return();if(l.s=!0,!l.g.graph||!l.g.graph.url){u.g=2;return}return l.Z=l.g.graph.url,P(u,xt(l,l.g.graph.url),3)}for(u.g!=2&&(v=u.h,l.i.loadGraph(v)),x=T(Object.keys(l.C)),Y=x.next();!Y.done;Y=x.next())k=Y.value,l.i.overrideFile(k,l.C[k]);if(l.C={},l.g.listeners)for(o=T(l.g.listeners),d=o.next();!d.done;d=o.next())g=d.value,It(l,g);e=l.j,l.j={},l.setOptions(e),u.g=0})}i.reset=function(){var l=this;return Zt(function(v){l.i&&(l.i.reset(),l.o={},l.u={}),v.g=0})},i.setOptions=function(l,v){var x=this;if(v=v||this.g.options){for(var Y=[],k=[],o={},d=T(Object.keys(l)),g=d.next();!g.done;o={R:o.R,S:o.S},g=d.next()){var e=g.value;e in this.j&&this.j[e]===l[e]||(this.j[e]=l[e],g=v[e],g!==void 0&&(g.onChange&&(o.R=g.onChange,o.S=l[e],Y.push(function(u){return function(){var m;return Zt(function(t){if(t.g==1)return P(t,u.R(u.S),2);m=t.h,m===!0&&(x.s=!0),t.g=0})}}(o))),g.graphOptionXref&&(e={valueNumber:g.type===1?l[e]:0,valueBoolean:g.type===0?l[e]:!1,valueString:g.type===2?l[e]:""},g=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),g.graphOptionXref),e),k.push(g))))}(Y.length!==0||k.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(k),this.A=(this.A===void 0?[]:this.A).concat(Y))}};function Kt(l){var v,x,Y,k,o,d,g;return Zt(function(e){switch(e.g){case 1:if(!l.s)return e.return();if(!l.A){e.g=2;break}v=T(l.A),x=v.next();case 3:if(x.done){e.g=5;break}return Y=x.value,P(e,Y(),4);case 4:x=v.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(k=new l.h.GraphOptionChangeRequestList,o=T(l.B),d=o.next();!d.done;d=o.next())g=d.value,k.push_back(g);l.i.changeOptions(k),k.delete(),l.B=void 0}l.s=!1,e.g=0}})}i.initialize=function(){var l=this;return Zt(function(v){return v.g==1?P(v,yt(l),2):v.g!=3?P(v,Xt(l),3):P(v,Kt(l),0)})};function xt(l,v){var x,Y;return Zt(function(k){return v in l.H?k.return(l.H[v]):(x=l.locateFile(v,""),Y=fetch(x).then(function(o){return o.arrayBuffer()}),l.H[v]=Y,k.return(Y))})}i.overrideFile=function(l,v){this.i?this.i.overrideFile(l,v):this.C[l]=v},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(l,v){var x=this,Y,k,o,d,g,e,u,m,t;return Zt(function(c){switch(c.g){case 1:return x.g.inputs?(Y=1e3*(v==null?performance.now():v),P(c,x.D,2)):c.return();case 2:return P(c,x.initialize(),3);case 3:for(k=new x.h.PacketDataList,o=T(Object.keys(l)),d=o.next();!d.done;d=o.next())if(g=d.value,e=x.g.inputs[g]){t:{var a=l[g];switch(e.type){case"video":var b=x.o[e.stream];if(b||(b=new ct(x.h,x.G),x.o[e.stream]=b),b.l===0&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&a instanceof HTMLVideoElement)var S=a.videoWidth,L=a.videoHeight;else typeof HTMLImageElement<"u"&&a instanceof HTMLImageElement?(S=a.naturalWidth,L=a.naturalHeight):(S=a.width,L=a.height);L={glName:b.l,width:S,height:L},S=b.g,S.canvas.width=L.width,S.canvas.height=L.height,S.activeTexture(S.TEXTURE0),b.h.bindTexture2d(b.l),S.texImage2D(S.TEXTURE_2D,0,S.RGBA,S.RGBA,S.UNSIGNED_BYTE,a),b.h.bindTexture2d(0),b=L;break t;case"detections":for(b=x.o[e.stream],b||(b=new R(x.h),x.o[e.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(a.length),L=0;L<a.length;++L){S=a[L];var C=b.data,U=C.setBoundingBox,z=L,Q=S.ea,D=new G;if(Ct(D,1,Q.ka),Ct(D,2,Q.la),Ct(D,3,Q.height),Ct(D,4,Q.width),Ct(D,5,Q.rotation),Ct(D,6,Q.ia),Q=O(D,H),U.call(C,z,Q),S.Y)for(C=0;C<S.Y.length;++C){D=S.Y[C];var st=!!D.visibility;U=b.data,z=U.addNormalizedLandmark,Q=L,D=Object.assign(Object.assign({},D),{visibility:st?D.visibility:0}),st=new pe,Ct(st,1,D.x),Ct(st,2,D.y),Ct(st,3,D.z),D.visibility&&Ct(st,4,D.visibility),D=O(st,ge),z.call(U,Q,D)}if(S.V)for(C=0;C<S.V.length;++C)U=b.data,z=U.addClassification,Q=L,D=S.V[C],st=new Nt,Ct(st,2,D.score),D.index&&Ct(st,1,D.index),D.label&&Ct(st,3,D.label),D.displayName&&Ct(st,4,D.displayName),D=O(st,Tt),z.call(U,Q,D)}b=b.data;break t;default:b={}}}switch(u=b,m=e.stream,e.type){case"video":k.pushTexture2d(Object.assign(Object.assign({},u),{stream:m,timestamp:Y}));break;case"detections":t=u,t.stream=m,t.timestamp=Y,k.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return x.i.send(k),P(c,x.D,4);case 4:k.delete(),c.g=0}})};function ht(l,v,x){var Y,k,o,d,g,e,u,m,t,c,a,b,S,L;return Zt(function(C){switch(C.g){case 1:if(!x)return C.return(v);for(Y={},k=0,o=T(Object.keys(x)),d=o.next();!d.done;d=o.next())g=d.value,e=x[g],typeof e!="string"&&e.type==="texture"&&v[e.stream]!==void 0&&++k;1<k&&(l.I=!1),u=T(Object.keys(x)),d=u.next();case 2:if(d.done){C.g=4;break}if(m=d.value,t=x[m],typeof t=="string")return S=Y,L=m,P(C,Wt(l,m,v[t]),14);if(c=v[t.stream],t.type==="detection_list"){if(c){for(var U=c.getRectList(),z=c.getLandmarksList(),Q=c.getClassificationsList(),D=[],st=0;st<U.size();++st){var ft=V(U.get(st),G,H);ft={ea:{ka:oe(ft,1),la:oe(ft,2),height:oe(ft,3),width:oe(ft,4),rotation:oe(ft,5,0),ia:se(ft,6)},Y:Le(V(z.get(st),Ne,h),pe,1).map(M),V:_(V(Q.get(st),Et,Dt))},D.push(ft)}U=D}else U=[];Y[m]=U,C.g=7;break}if(t.type==="proto_list"){if(c){for(U=Array(c.size()),z=0;z<c.size();z++)U[z]=c.get(z);c.delete()}else U=[];Y[m]=U,C.g=7;break}if(c===void 0){C.g=3;break}if(t.type==="float_list"){Y[m]=c,C.g=7;break}if(t.type==="proto"){Y[m]=c,C.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[m],a||(a=new ct(l.h,l.G),l.u[m]=a),P(C,s(a,c,l.I),13);case 13:b=C.h,Y[m]=b;case 7:t.transform&&Y[m]&&(Y[m]=t.transform(Y[m])),C.g=3;break;case 14:S[L]=C.h;case 3:d=u.next(),C.g=2;break;case 4:return C.return(Y)}})}function Wt(l,v,x){var Y;return Zt(function(k){return typeof x=="number"||x instanceof Uint8Array||x instanceof l.h.Uint8BlobList?k.return(x):x instanceof l.h.Texture2dDataOut?(Y=l.u[v],Y||(Y=new ct(l.h,l.G),l.u[v]=Y),k.return(s(Y,x,l.I))):k.return(void 0)})}function It(l,v){for(var x=v.name||"$",Y=[].concat(J(v.wants)),k=new l.h.StringList,o=T(v.wants),d=o.next();!d.done;d=o.next())k.push_back(d.value);o=l.h.PacketListener.implement({onResults:function(g){for(var e={},u=0;u<v.wants.length;++u)e[Y[u]]=g.get(u);var m=l.listeners[x];m&&(l.D=ht(l,e,v.outs).then(function(t){t=m(t);for(var c=0;c<v.wants.length;++c){var a=e[Y[c]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(k,o),k.delete()}i.onResults=function(l,v){this.listeners[v||"$"]=l},Ht("Solution",$),Ht("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"});function wt(l){return l===void 0&&(l=0),l===1?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ft(l){var v=this;l=l||{},this.g=new $({locateFile:l.locateFile,files:function(x){return[{url:"hands_solution_packed_assets_loader.js"},{simd:!1,url:"hands_solution_wasm_bin.js"},{simd:!0,url:"hands_solution_simd_wasm_bin.js"},{data:!0,url:wt(x.modelComplexity)}]},graph:{url:"hands.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["multi_hand_landmarks","multi_hand_world_landmarks","image_transformed","multi_handedness"],outs:{image:"image_transformed",multiHandLandmarks:{type:"proto_list",stream:"multi_hand_landmarks",transform:q},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:q},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(x){return x.map(function(Y){return _(V(Y,Et,Dt))[0]})}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumHands:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculator",fieldName:"int_value"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(x){var Y,k,o;return Zt(function(d){return d.g==1?(Y=wt(x),k="third_party/mediapipe/modules/hand_landmark/"+Y,P(d,xt(v.g,Y),2)):(o=d.h,v.g.overrideFile(k,o),d.return(!0))})}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"handlandmarktrackinggpu__palmdetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"handlandmarktrackinggpu__handlandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}}}})}i=Ft.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(l){this.g.onResults(l)},i.initialize=function(){var l=this;return Zt(function(v){return P(v,l.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(l){var v=this;return Zt(function(x){return P(x,v.g.send(l),0)})},i.setOptions=function(l){this.g.setOptions(l)},Ht("Hands",Ft),Ht("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ht("VERSION","0.4.1646424915")}).call(vi);var Gi={};(function(){var i;function n(e){var u=0;return function(){return u<e.length?{done:!1,value:e[u++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(e,u,m){return e==Array.prototype||e==Object.prototype||(e[u]=m.value),e};function f(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var u=0;u<e.length;++u){var m=e[u];if(m&&m.Math==Math)return m}throw Error("Cannot find global object")}var Z=f(this);function I(e,u){if(u)t:{var m=Z;e=e.split(".");for(var t=0;t<e.length-1;t++){var c=e[t];if(!(c in m))break t;m=m[c]}e=e[e.length-1],t=m[e],u=u(t),u!=t&&u!=null&&r(m,e,{configurable:!0,writable:!0,value:u})}}I("Symbol",function(e){function u(a){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new m(t+(a||"")+"_"+c++,a)}function m(a,b){this.g=a,r(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;m.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return u}),I("Symbol.iterator",function(e){if(e)return e;e=Symbol("Symbol.iterator");for(var u="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),m=0;m<u.length;m++){var t=Z[u[m]];typeof t=="function"&&typeof t.prototype[e]!="function"&&r(t.prototype,e,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return e});function F(e){return e={next:e},e[Symbol.iterator]=function(){return this},e}function T(e){var u=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];return u?u.call(e):{next:n(e)}}function J(e){if(!(e instanceof Array)){e=T(e);for(var u,m=[];!(u=e.next()).done;)m.push(u.value);e=m}return e}var et=typeof Object.create=="function"?Object.create:function(e){function u(){}return u.prototype=e,new u},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(e,u){if(e.__proto__=u,e.__proto__!==u)throw new TypeError(e+" is not extensible");return e}:null}var at=lt;function dt(e,u){if(e.prototype=et(u.prototype),e.prototype.constructor=e,at)at(e,u);else for(var m in u)if(m!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(u,m);t&&Object.defineProperty(e,m,t)}else e[m]=u[m];e.da=u.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Bt.prototype.o=function(e){this.h=e};function ee(e,u){e.j={U:u,V:!0},e.g=e.m||e.s}Bt.prototype.return=function(e){this.j={return:e},this.g=this.s};function P(e,u,m){return e.g=m,{value:u}}function De(e){this.g=new Bt,this.h=e}function ze(e,u){kt(e.g);var m=e.g.i;return m?We(e,"return"in m?m.return:function(t){return{value:t,done:!0}},u,e.g.return):(e.g.return(u),zt(e))}function We(e,u,m,t){try{var c=u.call(e.g.i,m);if(!(c instanceof Object))throw new TypeError("Iterator result "+c+" is not an object");if(!c.done)return e.g.l=!1,c;var a=c.value}catch(b){return e.g.i=null,ee(e.g,b),zt(e)}return e.g.i=null,t.call(e.g,a),zt(e)}function zt(e){for(;e.g.g;)try{var u=e.h(e.g);if(u)return e.g.l=!1,{value:u.value,done:!1}}catch(m){e.g.h=void 0,ee(e.g,m)}if(e.g.l=!1,e.g.j){if(u=e.g.j,e.g.j=null,u.V)throw u.U;return{value:u.return,done:!0}}return{value:void 0,done:!0}}function Hn(e){this.next=function(u){return kt(e.g),e.g.i?u=We(e,e.g.i.next,u,e.g.o):(e.g.o(u),u=zt(e)),u},this.throw=function(u){return kt(e.g),e.g.i?u=We(e,e.g.i.throw,u,e.g.o):(ee(e.g,u),u=zt(e)),u},this.return=function(u){return ze(e,u)},this[Symbol.iterator]=function(){return this}}function ne(e){function u(t){return e.next(t)}function m(t){return e.throw(t)}return new Promise(function(t,c){function a(b){b.done?t(b.value):Promise.resolve(b.value).then(u,m).then(a,c)}a(e.next())})}function Zt(e){return ne(new Hn(new De(e)))}I("Promise",function(e){function u(b){this.h=0,this.i=void 0,this.g=[],this.o=!1;var S=this.j();try{b(S.resolve,S.reject)}catch(L){S.reject(L)}}function m(){this.g=null}function t(b){return b instanceof u?b:new u(function(S){S(b)})}if(e)return e;m.prototype.h=function(b){if(this.g==null){this.g=[];var S=this;this.i(function(){S.l()})}this.g.push(b)};var c=Z.setTimeout;m.prototype.i=function(b){c(b,0)},m.prototype.l=function(){for(;this.g&&this.g.length;){var b=this.g;this.g=[];for(var S=0;S<b.length;++S){var L=b[S];b[S]=null;try{L()}catch(C){this.j(C)}}}this.g=null},m.prototype.j=function(b){this.i(function(){throw b})},u.prototype.j=function(){function b(C){return function(U){L||(L=!0,C.call(S,U))}}var S=this,L=!1;return{resolve:b(this.C),reject:b(this.l)}},u.prototype.C=function(b){if(b===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(b instanceof u)this.F(b);else{t:switch(typeof b){case"object":var S=b!=null;break t;case"function":S=!0;break t;default:S=!1}S?this.v(b):this.m(b)}},u.prototype.v=function(b){var S=void 0;try{S=b.then}catch(L){this.l(L);return}typeof S=="function"?this.G(S,b):this.m(b)},u.prototype.l=function(b){this.s(2,b)},u.prototype.m=function(b){this.s(1,b)},u.prototype.s=function(b,S){if(this.h!=0)throw Error("Cannot settle("+b+", "+S+"): Promise already settled in state"+this.h);this.h=b,this.i=S,this.h===2&&this.D(),this.A()},u.prototype.D=function(){var b=this;c(function(){if(b.B()){var S=Z.console;typeof S<"u"&&S.error(b.i)}},1)},u.prototype.B=function(){if(this.o)return!1;var b=Z.CustomEvent,S=Z.Event,L=Z.dispatchEvent;return typeof L>"u"?!0:(typeof b=="function"?b=new b("unhandledrejection",{cancelable:!0}):typeof S=="function"?b=new S("unhandledrejection",{cancelable:!0}):(b=Z.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,L(b))},u.prototype.A=function(){if(this.g!=null){for(var b=0;b<this.g.length;++b)a.h(this.g[b]);this.g=null}};var a=new m;return u.prototype.F=function(b){var S=this.j();b.J(S.resolve,S.reject)},u.prototype.G=function(b,S){var L=this.j();try{b.call(S,L.resolve,L.reject)}catch(C){L.reject(C)}},u.prototype.then=function(b,S){function L(Q,D){return typeof Q=="function"?function(st){try{C(Q(st))}catch(ft){U(ft)}}:D}var C,U,z=new u(function(Q,D){C=Q,U=D});return this.J(L(b,C),L(S,U)),z},u.prototype.catch=function(b){return this.then(void 0,b)},u.prototype.J=function(b,S){function L(){switch(C.h){case 1:b(C.i);break;case 2:S(C.i);break;default:throw Error("Unexpected state: "+C.h)}}var C=this;this.g==null?a.h(L):this.g.push(L),this.o=!0},u.resolve=t,u.reject=function(b){return new u(function(S,L){L(b)})},u.race=function(b){return new u(function(S,L){for(var C=T(b),U=C.next();!U.done;U=C.next())t(U.value).J(S,L)})},u.all=function(b){var S=T(b),L=S.next();return L.done?t([]):new u(function(C,U){function z(st){return function(ft){Q[st]=ft,D--,D==0&&C(Q)}}var Q=[],D=0;do Q.push(void 0),D++,t(L.value).J(z(Q.length-1),U),L=S.next();while(!L.done)})},u});function $e(e,u){e instanceof String&&(e+="");var m=0,t=!1,c={next:function(){if(!t&&m<e.length){var a=m++;return{value:u(a,e[a]),done:!1}}return t=!0,{done:!0,value:void 0}}};return c[Symbol.iterator]=function(){return c},c}var An=typeof Object.assign=="function"?Object.assign:function(e,u){for(var m=1;m<arguments.length;m++){var t=arguments[m];if(t)for(var c in t)Object.prototype.hasOwnProperty.call(t,c)&&(e[c]=t[c])}return e};I("Object.assign",function(e){return e||An}),I("Object.is",function(e){return e||function(u,m){return u===m?u!==0||1/u===1/m:u!==u&&m!==m}}),I("Array.prototype.includes",function(e){return e||function(u,m){var t=this;t instanceof String&&(t=String(t));var c=t.length;for(m=m||0,0>m&&(m=Math.max(m+c,0));m<c;m++){var a=t[m];if(a===u||Object.is(a,u))return!0}return!1}}),I("String.prototype.includes",function(e){return e||function(u,m){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(u instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(u,m||0)!==-1}}),I("Array.prototype.keys",function(e){return e||function(){return $e(this,function(u){return u})}});var Re=this||self;function Ht(e,u){e=e.split(".");var m=Re;e[0]in m||typeof m.execScript>"u"||m.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||u===void 0?m[t]&&m[t]!==Object.prototype[t]?m=m[t]:m=m[t]={}:m[t]=u}function Te(e){Re.setTimeout(function(){throw e},0)}function sn(e){Te(e)}function Gn(e,u){sn(Error("Invalid wire type: "+e+" (at position "+u+")"))}function Ln(){sn(Error("Failed to read varint, encoding is invalid."))}function Rn(e,u){return u=String.fromCharCode.apply(null,u),e==null?u:e+u}var Jn,dn=typeof TextDecoder<"u",pn,kn=typeof TextEncoder<"u";function Fn(e){if(kn)e=(pn||(pn=new TextEncoder)).encode(e);else{var u=void 0;u=u===void 0?!1:u;for(var m=0,t=new Uint8Array(3*e.length),c=0;c<e.length;c++){var a=e.charCodeAt(c);if(128>a)t[m++]=a;else{if(2048>a)t[m++]=a>>6|192;else{if(55296<=a&&57343>=a){if(56319>=a&&c<e.length){var b=e.charCodeAt(++c);if(56320<=b&&57343>=b){a=1024*(a-55296)+b-56320+65536,t[m++]=a>>18|240,t[m++]=a>>12&63|128,t[m++]=a>>6&63|128,t[m++]=a&63|128;continue}else c--}if(u)throw Error("Found an unpaired surrogate");a=65533}t[m++]=a>>12|224,t[m++]=a>>6&63|128}t[m++]=a&63|128}}e=t.subarray(0,m)}return e}var je={},Me=null;function xn(e){var u;u===void 0&&(u=0),Se(),u=je[u];for(var m=Array(Math.floor(e.length/3)),t=u[64]||"",c=0,a=0;c<e.length-2;c+=3){var b=e[c],S=e[c+1],L=e[c+2],C=u[b>>2];b=u[(b&3)<<4|S>>4],S=u[(S&15)<<2|L>>6],L=u[L&63],m[a++]=C+b+S+L}switch(C=0,L=t,e.length-c){case 2:C=e[c+1],L=u[(C&15)<<2]||t;case 1:e=e[c],m[a]=u[e>>2]+u[(e&3)<<4|C>>4]+L+t}return m.join("")}function Xn(e){var u=e.length,m=3*u/4;m%3?m=Math.floor(m):"=.".indexOf(e[u-1])!=-1&&(m="=.".indexOf(e[u-2])!=-1?m-2:m-1);var t=new Uint8Array(m),c=0;return he(e,function(a){t[c++]=a}),t.subarray(0,c)}function he(e,u){function m(L){for(;t<e.length;){var C=e.charAt(t++),U=Me[C];if(U!=null)return U;if(!/^[\s\xa0]*$/.test(C))throw Error("Unknown base64 encoding at char: "+C)}return L}Se();for(var t=0;;){var c=m(-1),a=m(0),b=m(64),S=m(64);if(S===64&&c===-1)break;u(c<<2|a>>4),b!=64&&(u(a<<4&240|b>>2),S!=64&&u(b<<6&192|S))}}function Se(){if(!Me){Me={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],m=0;5>m;m++){var t=e.concat(u[m].split(""));je[m]=t;for(var c=0;c<t.length;c++){var a=t[c];Me[a]===void 0&&(Me[a]=c)}}}}var Oe=typeof Uint8Array=="function",re;function Ve(e){if(this.g=e,e!==null&&e.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var e="";else e=this.g,e=this.g=e==null||typeof e=="string"?e:Oe&&e instanceof Uint8Array?xn(e):null;return e};var ln=typeof Uint8Array.prototype.slice=="function";function Be(e,u,m){return u===m?re||(re=new Uint8Array(0)):ln?e.slice(u,m):new Uint8Array(e.subarray(u,m))}var Qt=0,Ze=0;function Ce(e){if(e.constructor===Uint8Array)return e;if(e.constructor===ArrayBuffer)return new Uint8Array(e);if(e.constructor===Array)return new Uint8Array(e);if(e.constructor===String)return Xn(e);if(e.constructor===Ve){if(e.g==null)var u=re||(re=new Uint8Array(0));else{u=Uint8Array;var m=e.g;m=m==null||Oe&&m!=null&&m instanceof Uint8Array?m:typeof m=="string"?Xn(m):null,e=e.g=m,u=new u(e)}return u}if(e instanceof Uint8Array)return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Mt(e,u){u=u===void 0?{}:u,u=u.u===void 0?!1:u.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=u,e&&xe(this,e)}function xe(e,u){e.h=Ce(u),e.m=0,e.i=e.h.length,e.g=e.m}Mt.prototype.reset=function(){this.g=this.m};function jt(e){for(var u=128,m=0,t=0,c=0;4>c&&128<=u;c++)u=e.h[e.g++],m|=(u&127)<<7*c;if(128<=u&&(u=e.h[e.g++],m|=(u&127)<<28,t|=(u&127)>>4),128<=u)for(c=0;5>c&&128<=u;c++)u=e.h[e.g++],t|=(u&127)<<7*c+3;if(128>u)return e=m>>>0,u=t>>>0,(t=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0),t?-e:e;e.l=!0,Ln()}function ye(e){e.g>e.i&&(e.l=!0,sn(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}Mt.prototype.j=function(){var e=this.h,u=e[this.g],m=u&127;return 128>u?(this.g+=1,ye(this),m):(u=e[this.g+1],m|=(u&127)<<7,128>u?(this.g+=2,ye(this),m):(u=e[this.g+2],m|=(u&127)<<14,128>u?(this.g+=3,ye(this),m):(u=e[this.g+3],m|=(u&127)<<21,128>u?(this.g+=4,ye(this),m):(u=e[this.g+4],m|=(u&15)<<28,128>u?(this.g+=5,ye(this),m>>>0):(this.g+=5,128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]?(this.l=!0,Ln(),m):(ye(this),m))))))},Mt.prototype.o=function(){var e=this.h[this.g],u=this.h[this.g+1],m=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,ye(this),m=(e<<0|u<<8|m<<16|t<<24)>>>0,e=2*(m>>31)+1,u=m>>>23&255,m&=8388607,u==255?m?NaN:1/0*e:u==0?e*Math.pow(2,-149)*m:e*Math.pow(2,u-150)*(m+Math.pow(2,23))};var Ye=[];function qe(){this.g=new Uint8Array(64),this.h=0}function Xe(e,u){if(!(e.h+1<e.g.length)){var m=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(m)}e.g[e.h++]=u}qe.prototype.length=function(){return this.h},qe.prototype.end=function(){var e=this.g,u=this.h;return this.h=0,Be(e,0,u)};function Ot(e,u){for(;127<u;)Xe(e,u&127|128),u>>>=7;Xe(e,u)}function Ae(e){var u={},m=u.N===void 0?!1:u.N;this.m={u:u.u===void 0?!1:u.u},this.N=m,u=this.m,Ye.length?(m=Ye.pop(),u&&(m.u=u.u),e&&xe(m,e),e=m):e=new Mt(e,u),this.g=e,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Ae.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Pe(e){var u=e.g;if((u=u.g==u.i)||(u=e.j)||(u=e.g,u=u.l||0>u.g||u.g>u.i),u)return!1;e.l=e.g.g;var m=e.g.j();return u=m>>>3,m&=7,0<=m&&5>=m?(e.i=u,e.h=m,!0):(e.j=!0,Gn(m,e.l),!1)}function Ie(e){switch(e.h){case 0:if(e.h!=0)Ie(e);else t:{e=e.g;for(var u=e.g,m=0;10>m;m++){if((e.h[u]&128)===0){e.g=u+1,ye(e);break t}u++}e.l=!0,Ln()}break;case 1:e=e.g,e.g+=8,ye(e);break;case 2:e.h!=2?Ie(e):(u=e.g.j(),e=e.g,e.g+=u,ye(e));break;case 5:e=e.g,e.g+=4,ye(e);break;case 3:u=e.i;do{if(!Pe(e)){e.j=!0,sn(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=u&&(e.j=!0,sn(Error("Unmatched end-group tag")));break}Ie(e)}while(1);break;default:e.j=!0,Gn(e.h,e.l)}}function Wn(e,u,m){e.N||(e=Be(e.g.h,m,e.g.g),(m=u.o)?m.push(e):u.o=[e])}function cn(e,u,m){var t=e.g.i,c=e.g.j(),a=e.g.g+c;if(e.g.i=a,m(u,e),m=a-e.g.g,m!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(c+" bytes, instead read "+(c-m)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,u}function _e(e,u,m){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)m.push(u.call(e.g))}var un=[];function ve(){this.h=[],this.i=0,this.g=new qe}function we(e,u){u.length!==0&&(e.h.push(u),e.i+=u.length)}function Ge(e,u,m){Ot(e.g,8*u+2),Ot(e.g,m.length),we(e,e.g.end()),we(e,m)}var ie=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(e,u){Object.isFrozen(e)||(ie?e[ie]|=u:e.g!==void 0?e.g|=u:Object.defineProperties(e,{g:{value:u,configurable:!0,writable:!0,enumerable:!1}}))}function qt(e){if(!e)return 0;var u;return ie?u=e[ie]:u=e.g,u==null?0:u}function Pt(e){return Array.isArray(e)&&Qe(e,1),e}function hn(e){if(!Array.isArray(e))throw Error("cannot mark non-array as immutable");Qe(e,2)}function fe(e){return e!==null&&typeof e=="object"&&e.constructor===Object}function Ct(e){switch(typeof e){case"number":return isFinite(e)?e:String(e);case"object":return Oe&&e!=null&&e instanceof Uint8Array?xn(e):e;default:return e}}function Vt(e,u){if(e!=null)return Array.isArray(e)||fe(e)?oe(e,u):u(e)}function oe(e,u){if(Array.isArray(e)){for(var m=Array(e.length),t=0;t<e.length;t++)m[t]=Vt(e[t],u);return qt(e)&1&&Pt(m),m}m={};for(t in e)m[t]=Vt(e[t],u);return m}var Le;function te(e,u,m){var t=Le;Le=null,e||(e=t),t=this.constructor.ba,e||(e=t?[t]:[]),this.j=(t?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=e;t:{if(t=this.h.length,e=t-1,t&&(t=this.h[e],fe(t))){this.l=e-this.j,this.i=t;break t}u!==void 0&&-1<u?(this.l=Math.max(u,e+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(m)for(u=0;u<m.length;u++)e=m[u],e<this.l?(e+=this.j,(t=this.h[e])?Pt(t):this.h[e]=se):(tt(this),(t=this.i[e])?Pt(t):this.i[e]=se)}var se=Object.freeze(Pt([]));function tt(e){var u=e.l+e.j;e.h[u]||(e.i=e.h[u]={})}function it(e,u,m){return u===-1?null:(m===void 0?0:m)||u>=e.l?e.i?e.i[u]:void 0:e.h[u+e.j]}function ut(e,u,m){m=m===void 0?!0:m;var t=t===void 0?!1:t,c=it(e,u,t);return c==null&&(c=se),c===se?(c=Pt([]),St(e,u,c,t)):m&&Array.isArray(c)&&qt(c)&2&&(c=c.slice(),St(e,u,c,t)),c}function _t(e){var u=ut(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var m=0;m<u.length;m++)u[m]=+u[m];e.m[3]=!0}return u}function de(e,u,m){return e=it(e,u),e==null?m:e}function ue(e,u,m){return e=it(e,u),e=e==null?e:+e,e==null?m===void 0?0:m:e}function St(e,u,m,t){(t===void 0?0:t)||u>=e.l?(tt(e),e.i[u]=m):e.h[u+e.j]=m}function me(e,u,m){if(m===-1)return null;e.g||(e.g={});var t=e.g[m];if(t)return t;var c=it(e,m,!1);return c==null?t:(u=new u(c),e.g[m]=u)}function He(e,u,m){e.g||(e.g={});var t=e.g[m];if(!t){var c=ut(e,m,!1);t=[];for(var a=Array.isArray(c)?!!(qt(c)&2):!1,b=0;b<c.length;b++)t[b]=new u(c[b]),a&&hn(t[b].h);a&&(hn(t),Object.freeze(t)),e.g[m]=t}return t}function tn(e,u,m,t,c){var a=He(e,t,u);m=m||new t,e=ut(e,u),c!=null?(a.splice(c,0,m),e.splice(c,0,en(m))):(a.push(m),e.push(en(m)))}te.prototype.toJSON=function(){var e=en(this);return oe(e,Ct)};function en(e){if(e.g)for(var u in e.g){var m=e.g[u];if(Array.isArray(m))for(var t=0;t<m.length;t++)m[t]&&en(m[t]);else m&&en(m)}return e.h}te.prototype.toString=function(){return en(this).toString()};function fn(e,u){if(e=e.o){we(u,u.g.end());for(var m=0;m<e.length;m++)we(u,e[m])}}function bn(e){var u=e[0];switch(e.length){case 2:var m=e[1];return function(L,C,U){return u(L,C,U,m)};case 3:var t=e[1],c=e[2];return function(L,C,U){return u(L,C,U,t,c)};case 4:var a=e[1],b=e[2],S=e[3];return function(L,C,U){return u(L,C,U,a,b,S)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function Fe(e,u,m){for(;Pe(u)&&u.h!=4;){var t=u.i,c=m[t];if(c){if(Array.isArray(c)&&(c=m[t]=bn(c)),!c(u,e,t)){t=u,c=e;var a=t.l;Ie(t),Wn(t,c,a)}}else t=u,c=e,a=t.l,Ie(t),Wn(t,c,a)}return e}function nn(e,u){var m=new ve;if(u(e,m),e=m.i+m.g.length(),e===0)m=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=m.h,c=t.length,a=u=0;a<c;a++){var b=t[a];b.length!==0&&(e.set(b,u),u+=b.length)}t=m.g,c=t.h,c!==0&&(e.set(t.g.subarray(0,c),u),t.h=0),m.h=[e],m=e}return m}function zn(e,u,m){if(un.length){var t=un.pop();e&&(xe(t.g,e),t.i=-1,t.h=-1),e=t}else e=new Ae(e);try{return m(new u,e)}finally{u=e.g,u.h=null,u.m=0,u.i=0,u.g=0,u.l=!1,u.u=!1,e.i=-1,e.h=-1,e.j=!1,100>un.length&&un.push(e)}}function rn(e,u,m){if(u=it(u,m),u!=null){Ot(e.g,8*m+5),e=e.g;var t=u;t=(m=0>t?1:0)?-t:t,t===0?0<1/t?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(t)?(Ze=0,Qt=2147483647):34028234663852886e22<t?(Ze=0,Qt=(m<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),Ze=0,Qt=(m<<31|t)>>>0):(u=Math.floor(Math.log(t)/Math.LN2),t*=Math.pow(2,-u),t=Math.round(8388608*t),16777216<=t&&++u,Ze=0,Qt=(m<<31|u+127<<23|t&8388607)>>>0),m=Qt,Xe(e,m>>>0&255),Xe(e,m>>>8&255),Xe(e,m>>>16&255),Xe(e,m>>>24&255)}}function Je(e,u,m){return e.h!==5?!1:(St(u,m,e.g.o()),!0)}function gn(e,u,m){return e.h!==5&&e.h!==2?!1:(u=ut(u,m),e.h==2?_e(e,Mt.prototype.o,u):u.push(e.g.o()),!0)}function In(e,u,m){return e.h!==0?!1:(St(u,m,jt(e.g)),!0)}function Ke(e,u,m){return e.h!==0?!1:(St(u,m,e.g.j()),!0)}function En(e,u,m){if(e.h!==2)return!1;var t=e.g.j();e=e.g;var c=e.g;e.g+=t,ye(e),e=e.h;var a;if(dn)(a=Jn)||(a=Jn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(c,c+t));else{t=c+t;for(var b=[],S=null,L,C,U;c<t;)L=e[c++],128>L?b.push(L):224>L?c>=t?b.push(65533):(C=e[c++],194>L||(C&192)!==128?(c--,b.push(65533)):b.push((L&31)<<6|C&63)):240>L?c>=t-1?b.push(65533):(C=e[c++],(C&192)!==128||L===224&&160>C||L===237&&160<=C||((a=e[c++])&192)!==128?(c--,b.push(65533)):b.push((L&15)<<12|(C&63)<<6|a&63)):244>=L?c>=t-2?b.push(65533):(C=e[c++],(C&192)!==128||(L<<28)+(C-144)>>30!==0||((a=e[c++])&192)!==128||((U=e[c++])&192)!==128?(c--,b.push(65533)):(L=(L&7)<<18|(C&63)<<12|(a&63)<<6|U&63,L-=65536,b.push((L>>10&1023)+55296,(L&1023)+56320))):b.push(65533),8192<=b.length&&(S=Rn(S,b),b.length=0);a=Rn(S,b)}return St(u,m,a),!0}function on(e,u,m,t,c){if(e.h!==2)return!1;e=cn(e,new t,c);var a=a===void 0?!1:a;return u.g||(u.g={}),t=e&&en(e),u.g[m]=e,St(u,m,t,a),!0}function Zn(e,u,m,t,c){return e.h!==2?!1:(e=cn(e,new t,c),tn(u,m,e,t,void 0),!0)}function Sn(e,u,m){return e.h!==0&&e.h!==2?!1:(u=ut(u,m),e.h==2?_e(e,Mt.prototype.j,u):u.push(e.g.j()),!0)}function Kn(e,u,m){return e.h!==0?!1:(St(u,m,jt(e.g)),!0)}function an(e){te.call(this,e,-1,Qn)}var Tn;dt(an,te),an.prototype.getRows=function(){return it(this,1)},an.prototype.getCols=function(){return it(this,2)},an.prototype.getPackedDataList=function(){return _t(this)},an.prototype.getLayout=function(){return de(this,4,0)};function _n(e,u){return Fe(e,u,Tn||(Tn={1:Ke,2:Ke,3:gn,4:Kn}))}var Qn=[3];function Yn(e){te.call(this,e)}var Cn;dt(Yn,te);function p(e,u){var m=it(e,1);if(m!=null&&m!=null){Ot(u.g,8);var t=u.g;if(0<=m)Ot(t,m);else{for(var c=0;9>c;c++)Xe(t,m&127|128),m>>=7;Xe(t,1)}}rn(u,e,2),t=it(e,3),t!=null&&Ge(u,3,Fn(t)),t=it(e,4),t!=null&&Ge(u,4,Fn(t)),fn(e,u)}function W(e,u){return Fe(e,u,Cn||(Cn={1:Ke,2:Je,3:En,4:En}))}function V(e){te.call(this,e,-1,ot)}var E;dt(V,te),V.prototype.addClassification=function(e,u){return tn(this,1,e,Yn,u),this};function O(e,u){return Fe(e,u,E||(E={1:[Zn,Yn,W]}))}var ot=[1];function j(e){te.call(this,e)}var rt;dt(j,te);function bt(e,u){rn(u,e,1),rn(u,e,2),rn(u,e,3),rn(u,e,4),rn(u,e,5),fn(e,u)}function Rt(e,u){return Fe(e,u,rt||(rt={1:Je,2:Je,3:Je,4:Je,5:Je}))}function Ut(e){te.call(this,e,-1,Nt)}var Jt;dt(Ut,te);function $t(e,u){return Fe(e,u,Jt||(Jt={1:[Zn,j,Rt]}))}var Nt=[1];function Tt(e){te.call(this,e)}var Et;dt(Tt,te);function Dt(e,u){rn(u,e,1),rn(u,e,2),rn(u,e,3),rn(u,e,4),rn(u,e,5);var m=it(e,6);if(m!=null&&m!=null){Ot(u.g,48);var t=u.g,c=m;m=0>c,c=Math.abs(c);var a=c>>>0;for(c=Math.floor((c-a)/4294967296),c>>>=0,m&&(c=~c>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,c++,4294967295<c&&(c=0))),Qt=a,Ze=c,m=Qt,a=Ze;0<a||127<m;)Xe(t,m&127|128),m=(m>>>7|a<<25)>>>0,a>>>=7;Xe(t,m)}fn(e,u)}function ae(e,u){return Fe(e,u,Et||(Et={1:Je,2:Je,3:Je,4:Je,5:Je,6:In}))}function pe(e){te.call(this,e,-1,h)}var ge;dt(pe,te),pe.prototype.getVertexType=function(){return de(this,1,0)},pe.prototype.getPrimitiveType=function(){return de(this,2,0)},pe.prototype.getVertexBufferList=function(){return _t(this)},pe.prototype.getIndexBufferList=function(){return ut(this,4)};function Ne(e,u){return Fe(e,u,ge||(ge={1:Kn,2:Kn,3:gn,4:Sn}))}var h=[3,4];function y(e){te.call(this,e)}var G;dt(y,te),y.prototype.getMesh=function(){return me(this,pe,1)},y.prototype.getPoseTransformMatrix=function(){return me(this,an,2)};function H(e,u){return Fe(e,u,G||(G={1:[on,pe,Ne],2:[on,an,_n]}))}var K=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(J(K),J(_),J(M),J(q),J(ct),J(s));function R(e,u,m){if(m=e.createShader(m===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(m,u),e.compileShader(m),!e.getShaderParameter(m,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
37
37
|
|
|
38
|
-
`+e.getShaderInfoLog(m));return m}function
|
|
38
|
+
`+e.getShaderInfoLog(m));return m}function w(e){return He(e,Yn,1).map(function(u){return{index:de(u,1,0),score:ue(u,2),label:it(u,3)!=null?de(u,3,""):void 0,displayName:it(u,4)!=null?de(u,4,""):void 0}})}function N(e){return{x:ue(e,1),y:ue(e,2),z:ue(e,3),visibility:it(e,4)!=null?ue(e,4):void 0}}function A(e){return He(zn(e,Ut,$t),j,1).map(N)}function B(e,u){this.h=e,this.g=u,this.l=0}function nt(e,u,m){return $(e,u),typeof e.g.canvas.transferToImageBitmap=="function"?Promise.resolve(e.g.canvas.transferToImageBitmap()):m?Promise.resolve(e.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(e.g.canvas):(e.i===void 0&&(e.i=document.createElement("canvas")),new Promise(function(t){e.i.height=e.g.canvas.height,e.i.width=e.g.canvas.width,e.i.getContext("2d",{}).drawImage(e.g.canvas,0,0,e.g.canvas.width,e.g.canvas.height),t(e.i)}))}function $(e,u){var m=e.g;if(e.m===void 0){var t=R(m,`
|
|
39
39
|
attribute vec2 aVertex;
|
|
40
40
|
attribute vec2 aTex;
|
|
41
41
|
varying vec2 vTex;
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
51
51
|
}`,1),a=m.createProgram();if(m.attachShader(a,t),m.attachShader(a,c),m.linkProgram(a),!m.getProgramParameter(a,m.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
52
52
|
|
|
53
|
-
`+m.getProgramInfoLog(a));t=e.m=a,m.useProgram(t),c=m.getUniformLocation(t,"sampler0"),e.j={I:m.getAttribLocation(t,"aVertex"),H:m.getAttribLocation(t,"aTex"),ca:c},e.s=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,e.s),m.enableVertexAttribArray(e.j.I),m.vertexAttribPointer(e.j.I,2,m.FLOAT,!1,0,0),m.bufferData(m.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),m.STATIC_DRAW),m.bindBuffer(m.ARRAY_BUFFER,null),e.o=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,e.o),m.enableVertexAttribArray(e.j.H),m.vertexAttribPointer(e.j.H,2,m.FLOAT,!1,0,0),m.bufferData(m.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),m.STATIC_DRAW),m.bindBuffer(m.ARRAY_BUFFER,null),m.uniform1i(c,0)}t=e.j,m.useProgram(e.m),m.canvas.width=u.width,m.canvas.height=u.height,m.viewport(0,0,u.width,u.height),m.activeTexture(m.TEXTURE0),e.h.bindTexture2d(u.glName),m.enableVertexAttribArray(t.I),m.bindBuffer(m.ARRAY_BUFFER,e.s),m.vertexAttribPointer(t.I,2,m.FLOAT,!1,0,0),m.enableVertexAttribArray(t.H),m.bindBuffer(m.ARRAY_BUFFER,e.o),m.vertexAttribPointer(t.H,2,m.FLOAT,!1,0,0),m.bindFramebuffer(m.DRAW_FRAMEBUFFER?m.DRAW_FRAMEBUFFER:m.FRAMEBUFFER,null),m.clearColor(0,0,0,0),m.clear(m.COLOR_BUFFER_BIT),m.colorMask(!0,!0,!0,!0),m.drawArrays(m.TRIANGLE_FAN,0,4),m.disableVertexAttribArray(t.I),m.disableVertexAttribArray(t.H),m.bindBuffer(m.ARRAY_BUFFER,null),e.h.bindTexture2d(0)}function yt(e){this.g=e}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Kt(e,u){return u+e}function xt(e,u){window[e]=u}function ht(e){var u=document.createElement("script");return u.setAttribute("src",e),u.setAttribute("crossorigin","anonymous"),new Promise(function(m){u.addEventListener("load",function(){m()},!1),u.addEventListener("error",function(){m()},!1),document.body.appendChild(u)})}function Wt(){return Zt(function(e){switch(e.g){case 1:return e.m=2,P(e,WebAssembly.instantiate(Xt),4);case 4:e.g=3,e.m=0;break;case 2:return e.m=0,e.j=null,e.return(!1);case 3:return e.return(!0)}})}function It(e){if(this.g=e,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=e&&e.locateFile||Kt,typeof window=="object")var u=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")u=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=u,e.options){u=Y(Object.keys(e.options));for(var m=u.next();!m.done;m=u.next()){m=m.value;var t=e.options[m].default;t!==void 0&&(this.j[m]=typeof t=="function"?t():t)}}}i=It.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Tt(e){var u,m,t,c,a,b,S,F,L,U,j;return Zt(function(Q){switch(Q.g){case 1:return e.R?(u=e.g.files===void 0?[]:typeof e.g.files=="function"?e.g.files(e.j):e.g.files,P(Q,Wt(),2)):Q.return();case 2:if(m=Q.h,typeof window=="object")return xt("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),xt("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=u.filter(function(D){return D.data!==void 0}),S=u.filter(function(D){return D.data===void 0}),F=Promise.all(b.map(function(D){var st=v(e,D.url);if(D.path!==void 0){var ft=D.path;st=st.then(function(mt){return e.overrideFile(ft,mt),Promise.resolve(mt)})}return st})),L=Promise.all(S.map(function(D){return D.simd===void 0||D.simd&&m||!D.simd&&!m?ht(e.locateFile(D.url,e.S)):Promise.resolve()})).then(function(){var D,st,ft;return Zt(function(mt){if(mt.g==1)return D=window.createMediapipeSolutionsWasm,st=window.createMediapipeSolutionsPackedAssets,ft=e,P(mt,D(st),2);ft.h=mt.h,mt.g=0})}),U=function(){return Zt(function(D){return e.g.graph&&e.g.graph.url?D=P(D,v(e,e.g.graph.url),0):(D.g=0,D=void 0),D})}(),P(Q,Promise.all([L,F,U]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return t=u.filter(function(D){return D.simd===void 0||D.simd&&m||!D.simd&&!m}).map(function(D){return e.locateFile(D.url,e.S)}),importScripts.apply(null,N(t)),c=e,P(Q,createMediapipeSolutionsWasm(Module),6);case 6:c.h=Q.h,e.l=new OffscreenCanvas(1,1),e.h.canvas=e.l,a=e.h.GL.createContext(e.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),e.h.GL.makeContextCurrent(a),Q.g=4;break;case 7:if(e.l=document.createElement("canvas"),j=e.l.getContext("webgl2",{}),!j&&(j=e.l.getContext("webgl",{}),!j))return alert("Failed to create WebGL canvas context when passing video frame."),Q.return();e.D=j,e.h.canvas=e.l,e.h.createContext(e.l,!0,!0,{});case 4:e.i=new e.h.SolutionWasm,e.R=!1,Q.g=0}})}function Ct(e){var u,m,t,c,a,b,S,F;return Zt(function(L){if(L.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return L.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){L.g=2;return}return e.P=e.g.graph.url,P(L,v(e,e.g.graph.url),3)}for(L.g!=2&&(u=L.h,e.i.loadGraph(u)),m=Y(Object.keys(e.B)),t=m.next();!t.done;t=m.next())c=t.value,e.i.overrideFile(c,e.B[c]);if(e.B={},e.g.listeners)for(a=Y(e.g.listeners),b=a.next();!b.done;b=a.next())S=b.value,k(e,S);F=e.j,e.j={},e.setOptions(F),L.g=0})}i.reset=function(){var e=this;return Zt(function(u){e.i&&(e.i.reset(),e.m={},e.s={}),u.g=0})},i.setOptions=function(e,u){var m=this;if(u=u||this.g.options){for(var t=[],c=[],a={},b=Y(Object.keys(e)),S=b.next();!S.done;a={K:a.K,L:a.L},S=b.next()){var F=S.value;F in this.j&&this.j[F]===e[F]||(this.j[F]=e[F],S=u[F],S!==void 0&&(S.onChange&&(a.K=S.onChange,a.L=e[F],t.push(function(L){return function(){var U;return Zt(function(j){if(j.g==1)return P(j,L.K(L.L),2);U=j.h,U===!0&&(m.o=!0),j.g=0})}}(a))),S.graphOptionXref&&(F={valueNumber:S.type===1?e[F]:0,valueBoolean:S.type===0?e[F]:!1,valueString:S.type===2?e[F]:""},S=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),S.graphOptionXref),F),c.push(S))))}(t.length!==0||c.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(c),this.v=(this.v===void 0?[]:this.v).concat(t))}};function l(e){var u,m,t,c,a,b,S;return Zt(function(F){switch(F.g){case 1:if(!e.o)return F.return();if(!e.v){F.g=2;break}u=Y(e.v),m=u.next();case 3:if(m.done){F.g=5;break}return t=m.value,P(F,t(),4);case 4:m=u.next(),F.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(c=new e.h.GraphOptionChangeRequestList,a=Y(e.A),b=a.next();!b.done;b=a.next())S=b.value,c.push_back(S);e.i.changeOptions(c),c.delete(),e.A=void 0}e.o=!1,F.g=0}})}i.initialize=function(){var e=this;return Zt(function(u){return u.g==1?P(u,Tt(e),2):u.g!=3?P(u,Ct(e),3):P(u,l(e),0)})};function v(e,u){var m,t;return Zt(function(c){return u in e.F?c.return(e.F[u]):(m=e.locateFile(u,""),t=fetch(m).then(function(a){return a.arrayBuffer()}),e.F[u]=t,c.return(t))})}i.overrideFile=function(e,u){this.i?this.i.overrideFile(e,u):this.B[e]=u},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(e,u){var m=this,t,c,a,b,S,F,L,U,j;return Zt(function(Q){switch(Q.g){case 1:return m.g.inputs?(t=1e3*(u==null?performance.now():u),P(Q,m.C,2)):Q.return();case 2:return P(Q,m.initialize(),3);case 3:for(c=new m.h.PacketDataList,a=Y(Object.keys(e)),b=a.next();!b.done;b=a.next())if(S=b.value,F=m.g.inputs[S]){t:{var D=e[S];switch(F.type){case"video":var st=m.m[F.stream];if(st||(st=new B(m.h,m.D),m.m[F.stream]=st),st.l===0&&(st.l=st.h.createTexture()),typeof HTMLVideoElement<"u"&&D instanceof HTMLVideoElement)var ft=D.videoWidth,mt=D.videoHeight;else typeof HTMLImageElement<"u"&&D instanceof HTMLImageElement?(ft=D.naturalWidth,mt=D.naturalHeight):(ft=D.width,mt=D.height);mt={glName:st.l,width:ft,height:mt},ft=st.g,ft.canvas.width=mt.width,ft.canvas.height=mt.height,ft.activeTexture(ft.TEXTURE0),st.h.bindTexture2d(st.l),ft.texImage2D(ft.TEXTURE_2D,0,ft.RGBA,ft.RGBA,ft.UNSIGNED_BYTE,D),st.h.bindTexture2d(0),st=mt;break t;case"detections":for(st=m.m[F.stream],st||(st=new yt(m.h),m.m[F.stream]=st),st.data||(st.data=new st.g.DetectionListData),st.data.reset(D.length),mt=0;mt<D.length;++mt){ft=D[mt];var Gt=st.data,vt=Gt.setBoundingBox,At=mt,le=ft.T,ce=new Yt;if(St(ce,1,le.X),St(ce,2,le.Y),St(ce,3,le.height),St(ce,4,le.width),St(ce,5,le.rotation),St(ce,6,le.W),le=nn(ce,Dt),vt.call(Gt,At,le),ft.O)for(Gt=0;Gt<ft.O.length;++Gt){ce=ft.O[Gt];var ke=!!ce.visibility;vt=st.data,At=vt.addNormalizedLandmark,le=mt,ce=Object.assign(Object.assign({},ce),{visibility:ke?ce.visibility:0}),ke=new z,St(ke,1,ce.x),St(ke,2,ce.y),St(ke,3,ce.z),ce.visibility&&St(ke,4,ce.visibility),ce=nn(ke,bt),At.call(vt,le,ce)}if(ft.M)for(Gt=0;Gt<ft.M.length;++Gt)vt=st.data,At=vt.addClassification,le=mt,ce=ft.M[Gt],ke=new wn,St(ke,2,ce.score),ce.index&&St(ke,1,ce.index),ce.label&&St(ke,3,ce.label),ce.displayName&&St(ke,4,ce.displayName),ce=nn(ke,p),At.call(vt,le,ce)}st=st.data;break t;default:st={}}}switch(L=st,U=F.stream,F.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},L),{stream:U,timestamp:t}));break;case"detections":j=L,j.stream=U,j.timestamp=t,c.pushDetectionList(j);break;default:throw Error("Unknown input config type: '"+F.type+"'")}}return m.i.send(c),P(Q,m.C,4);case 4:c.delete(),Q.g=0}})};function x(e,u,m){var t,c,a,b,S,F,L,U,j,Q,D,st,ft,mt;return Zt(function(Gt){switch(Gt.g){case 1:if(!m)return Gt.return(u);for(t={},c=0,a=Y(Object.keys(m)),b=a.next();!b.done;b=a.next())S=b.value,F=m[S],typeof F!="string"&&F.type==="texture"&&u[F.stream]!==void 0&&++c;1<c&&(e.G=!1),L=Y(Object.keys(m)),b=L.next();case 2:if(b.done){Gt.g=4;break}if(U=b.value,j=m[U],typeof j=="string")return ft=t,mt=U,P(Gt,w(e,U,u[j]),14);if(Q=u[j.stream],j.type==="detection_list"){if(Q){for(var vt=Q.getRectList(),At=Q.getLandmarksList(),le=Q.getClassificationsList(),ce=[],ke=0;ke<vt.size();++ke){var Vn=jn(vt.get(ke),Yt,ae);Vn={T:{X:ue(Vn,1),Y:ue(Vn,2),height:ue(Vn,3),width:ue(Vn,4),rotation:ue(Vn,5,0),W:de(Vn,6,0)},O:A(At.get(ke)),M:T(jn(le.get(ke),V,O))},ce.push(Vn)}vt=ce}else vt=[];t[U]=vt,Gt.g=7;break}if(j.type==="proto_list"){if(Q){for(vt=Array(Q.size()),At=0;At<Q.size();At++)vt[At]=Q.get(At);Q.delete()}else vt=[];t[U]=vt,Gt.g=7;break}if(Q===void 0){Gt.g=3;break}if(j.type==="float_list"){t[U]=Q,Gt.g=7;break}if(j.type==="proto"){t[U]=Q,Gt.g=7;break}if(j.type!=="texture")throw Error("Unknown output config type: '"+j.type+"'");return D=e.s[U],D||(D=new B(e.h,e.D),e.s[U]=D),P(Gt,nt(D,Q,e.G),13);case 13:st=Gt.h,t[U]=st;case 7:j.transform&&t[U]&&(t[U]=j.transform(t[U])),Gt.g=3;break;case 14:ft[mt]=Gt.h;case 3:b=L.next(),Gt.g=2;break;case 4:return Gt.return(t)}})}function w(e,u,m){var t;return Zt(function(c){return typeof m=="number"||m instanceof Uint8Array||m instanceof e.h.Uint8BlobList?c.return(m):m instanceof e.h.Texture2dDataOut?(t=e.s[u],t||(t=new B(e.h,e.D),e.s[u]=t),c.return(nt(t,m,e.G))):c.return(void 0)})}function k(e,u){for(var m=u.name||"$",t=[].concat(N(u.wants)),c=new e.h.StringList,a=Y(u.wants),b=a.next();!b.done;b=a.next())c.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(S){for(var F={},L=0;L<u.wants.length;++L)F[t[L]]=S.get(L);var U=e.listeners[m];U&&(e.C=x(e,F,u.outs).then(function(j){j=U(j);for(var Q=0;Q<u.wants.length;++Q){var D=F[t[Q]];typeof D=="object"&&D.hasOwnProperty&&D.hasOwnProperty("delete")&&D.delete()}j&&(e.C=j)}))}}),e.i.attachMultiListener(c,a),c.delete()}i.onResults=function(e,u){this.listeners[u||"$"]=e},Ht("Solution",It),Ht("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(e){return e.map(d)}function d(e){e=jn(e,y,H);var u=e.getMesh();if(!u)return e;var m=new Float32Array(u.getVertexBufferList());u.getVertexBufferList=function(){return m};var t=new Uint32Array(u.getIndexBufferList());return u.getIndexBufferList=function(){return t},e}function g(e){var u=this;e=e||{},this.g=new It({locateFile:e.locateFile,files:[{url:"holistic_solution_packed_assets_loader.js"},{simd:!1,url:"holistic_solution_wasm_bin.js"},{simd:!0,url:"holistic_solution_simd_wasm_bin.js"}],graph:{url:"holistic.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:"left_hand_landmarks right_hand_landmarks face_landmarks pose_landmarks world_landmarks segmentation_mask image_transformed multi_face_geometry".split(" "),outs:{image:{type:"texture",stream:"image_transformed"},leftHandLandmarks:{type:"proto",stream:"left_hand_landmarks",transform:A},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:A},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:A},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:A},ea:{type:"proto",stream:"world_landmarks",transform:A},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:o}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,default:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(m){var t,c,a,b;return Zt(function(S){if(S.g==1){switch(t="",m){case 1:t="pose_landmark_full.tflite";break;case 2:t="pose_landmark_heavy.tflite";break;default:t="pose_landmark_lite.tflite"}return c="third_party/mediapipe/modules/pose_landmark/"+t,a=u.g.locateFile(t,""),P(S,fetch(a),3)}return S.g!=2?P(S,S.h.arrayBuffer(),2):(b=S.h,u.g.overrideFile(c,b),P(S,u.g.reset(),0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},refineFaceLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineFaceLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}})}i=g.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(e){this.g.onResults(e)},i.initialize=function(){var e=this;return Zt(function(u){return P(u,e.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(e){var u=this;return Zt(function(m){return P(m,u.g.send(e),0)})},i.setOptions=function(e){this.g.setOptions(e)},Ht("Holistic",g),Ht("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Ht("FACEMESH_LIPS",K),Ht("FACEMESH_LEFT_EYE",_),Ht("FACEMESH_LEFT_EYEBROW",M),Ht("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Ht("FACEMESH_RIGHT_EYE",q),Ht("FACEMESH_RIGHT_EYEBROW",ct),Ht("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Ht("FACEMESH_FACE_OVAL",s),Ht("FACEMESH_CONTOURS",X),Ht("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ht("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ht("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ht("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ht("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ht("matrixDataToMatrix",function(e){for(var u=e.getCols(),m=e.getRows(),t=e.getPackedDataList(),c=[],a=0;a<m;a++)c.push(Array(u));for(a=0;a<m;a++)for(var b=0;b<u;b++){var S=e.getLayout()===1?a*u+b:b*m+a;c[a][b]=t[S]}return c}),Ht("VERSION","0.5.1635989137")}).call(Gi);const Xi={};(function(){var i;function n(o){var d=0;return function(){return d<o.length?{done:!1,value:o[d++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(o,d,g){return o==Array.prototype||o==Object.prototype||(o[d]=g.value),o};function f(o){o=[typeof globalThis=="object"&&globalThis,o,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var d=0;d<o.length;++d){var g=o[d];if(g&&g.Math==Math)return g}throw Error("Cannot find global object")}var Z=f(this);function I(o,d){if(d)t:{var g=Z;o=o.split(".");for(var e=0;e<o.length-1;e++){var u=o[e];if(!(u in g))break t;g=g[u]}o=o[o.length-1],e=g[o],d=d(e),d!=e&&d!=null&&r(g,o,{configurable:!0,writable:!0,value:d})}}I("Symbol",function(o){function d(m){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new g(e+(m||"")+"_"+u++,m)}function g(m,t){this.g=m,r(this,"description",{configurable:!0,writable:!0,value:t})}if(o)return o;g.prototype.toString=function(){return this.g};var e="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",u=0;return d}),I("Symbol.iterator",function(o){if(o)return o;o=Symbol("Symbol.iterator");for(var d="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),g=0;g<d.length;g++){var e=Z[d[g]];typeof e=="function"&&typeof e.prototype[o]!="function"&&r(e.prototype,o,{configurable:!0,writable:!0,value:function(){return C(n(this))}})}return o});function C(o){return o={next:o},o[Symbol.iterator]=function(){return this},o}function Y(o){var d=typeof Symbol<"u"&&Symbol.iterator&&o[Symbol.iterator];return d?d.call(o):{next:n(o)}}function N(o){if(!(o instanceof Array)){o=Y(o);for(var d,g=[];!(d=o.next()).done;)g.push(d.value);o=g}return o}var et=typeof Object.create=="function"?Object.create:function(o){function d(){}return d.prototype=o,new d},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var wt={a:!0},Ft={};try{Ft.__proto__=wt,pt=Ft.a;break t}catch{}pt=!1}lt=pt?function(o,d){if(o.__proto__=d,o.__proto__!==d)throw new TypeError(o+" is not extensible");return o}:null}var at=lt;function dt(o,d){if(o.prototype=et(d.prototype),o.prototype.constructor=o,at)at(o,d);else for(var g in d)if(g!="prototype")if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(d,g);e&&Object.defineProperty(o,g,e)}else o[g]=d[g];o.na=d.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function kt(o){if(o.l)throw new TypeError("Generator is already running");o.l=!0}Bt.prototype.s=function(o){this.h=o};function ee(o,d){o.j={da:d,ea:!0},o.g=o.o||o.u}Bt.prototype.return=function(o){this.j={return:o},this.g=this.u};function P(o,d,g){return o.g=g,{value:d}}function De(o){this.g=new Bt,this.h=o}function je(o,d){kt(o.g);var g=o.g.i;return g?We(o,"return"in g?g.return:function(e){return{value:e,done:!0}},d,o.g.return):(o.g.return(d),jt(o))}function We(o,d,g,e){try{var u=d.call(o.g.i,g);if(!(u instanceof Object))throw new TypeError("Iterator result "+u+" is not an object");if(!u.done)return o.g.l=!1,u;var m=u.value}catch(t){return o.g.i=null,ee(o.g,t),jt(o)}return o.g.i=null,e.call(o.g,m),jt(o)}function jt(o){for(;o.g.g;)try{var d=o.h(o.g);if(d)return o.g.l=!1,{value:d.value,done:!1}}catch(g){o.g.h=void 0,ee(o.g,g)}if(o.g.l=!1,o.g.j){if(d=o.g.j,o.g.j=null,d.ea)throw d.da;return{value:d.return,done:!0}}return{value:void 0,done:!0}}function Hn(o){this.next=function(d){return kt(o.g),o.g.i?d=We(o,o.g.i.next,d,o.g.s):(o.g.s(d),d=jt(o)),d},this.throw=function(d){return kt(o.g),o.g.i?d=We(o,o.g.i.throw,d,o.g.s):(ee(o.g,d),d=jt(o)),d},this.return=function(d){return je(o,d)},this[Symbol.iterator]=function(){return this}}function ne(o){function d(e){return o.next(e)}function g(e){return o.throw(e)}return new Promise(function(e,u){function m(t){t.done?e(t.value):Promise.resolve(t.value).then(d,g).then(m,u)}m(o.next())})}function Zt(o){return ne(new Hn(new De(o)))}I("Promise",function(o){function d(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var c=this.j();try{t(c.resolve,c.reject)}catch(a){c.reject(a)}}function g(){this.g=null}function e(t){return t instanceof d?t:new d(function(c){c(t)})}if(o)return o;g.prototype.h=function(t){if(this.g==null){this.g=[];var c=this;this.i(function(){c.l()})}this.g.push(t)};var u=Z.setTimeout;g.prototype.i=function(t){u(t,0)},g.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var c=0;c<t.length;++c){var a=t[c];t[c]=null;try{a()}catch(b){this.j(b)}}}this.g=null},g.prototype.j=function(t){this.i(function(){throw t})},d.prototype.j=function(){function t(b){return function(S){a||(a=!0,b.call(c,S))}}var c=this,a=!1;return{resolve:t(this.D),reject:t(this.l)}},d.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof d)this.H(t);else{t:switch(typeof t){case"object":var c=t!=null;break t;case"function":c=!0;break t;default:c=!1}c?this.A(t):this.o(t)}},d.prototype.A=function(t){var c=void 0;try{c=t.then}catch(a){this.l(a);return}typeof c=="function"?this.I(c,t):this.o(t)},d.prototype.l=function(t){this.u(2,t)},d.prototype.o=function(t){this.u(1,t)},d.prototype.u=function(t,c){if(this.h!=0)throw Error("Cannot settle("+t+", "+c+"): Promise already settled in state"+this.h);this.h=t,this.i=c,this.h===2&&this.G(),this.B()},d.prototype.G=function(){var t=this;u(function(){if(t.C()){var c=Z.console;typeof c<"u"&&c.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=Z.CustomEvent,c=Z.Event,a=Z.dispatchEvent;return typeof a>"u"?!0:(typeof t=="function"?t=new t("unhandledrejection",{cancelable:!0}):typeof c=="function"?t=new c("unhandledrejection",{cancelable:!0}):(t=Z.document.createEvent("CustomEvent"),t.initCustomEvent("unhandledrejection",!1,!0,t)),t.promise=this,t.reason=this.i,a(t))},d.prototype.B=function(){if(this.g!=null){for(var t=0;t<this.g.length;++t)m.h(this.g[t]);this.g=null}};var m=new g;return d.prototype.H=function(t){var c=this.j();t.M(c.resolve,c.reject)},d.prototype.I=function(t,c){var a=this.j();try{t.call(c,a.resolve,a.reject)}catch(b){a.reject(b)}},d.prototype.then=function(t,c){function a(L,U){return typeof L=="function"?function(j){try{b(L(j))}catch(Q){S(Q)}}:U}var b,S,F=new d(function(L,U){b=L,S=U});return this.M(a(t,b),a(c,S)),F},d.prototype.catch=function(t){return this.then(void 0,t)},d.prototype.M=function(t,c){function a(){switch(b.h){case 1:t(b.i);break;case 2:c(b.i);break;default:throw Error("Unexpected state: "+b.h)}}var b=this;this.g==null?m.h(a):this.g.push(a),this.s=!0},d.resolve=e,d.reject=function(t){return new d(function(c,a){a(t)})},d.race=function(t){return new d(function(c,a){for(var b=Y(t),S=b.next();!S.done;S=b.next())e(S.value).M(c,a)})},d.all=function(t){var c=Y(t),a=c.next();return a.done?e([]):new d(function(b,S){function F(j){return function(Q){L[j]=Q,U--,U==0&&b(L)}}var L=[],U=0;do L.push(void 0),U++,e(a.value).M(F(L.length-1),S),a=c.next();while(!a.done)})},d});function $e(o,d){o instanceof String&&(o+="");var g=0,e=!1,u={next:function(){if(!e&&g<o.length){var m=g++;return{value:d(m,o[m]),done:!1}}return e=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var An=typeof Object.assign=="function"?Object.assign:function(o,d){for(var g=1;g<arguments.length;g++){var e=arguments[g];if(e)for(var u in e)Object.prototype.hasOwnProperty.call(e,u)&&(o[u]=e[u])}return o};I("Object.assign",function(o){return o||An}),I("Object.is",function(o){return o||function(d,g){return d===g?d!==0||1/d===1/g:d!==d&&g!==g}}),I("Array.prototype.includes",function(o){return o||function(d,g){var e=this;e instanceof String&&(e=String(e));var u=e.length;for(g=g||0,0>g&&(g=Math.max(g+u,0));g<u;g++){var m=e[g];if(m===d||Object.is(m,d))return!0}return!1}}),I("String.prototype.includes",function(o){return o||function(d,g){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(d instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(d,g||0)!==-1}}),I("Array.prototype.keys",function(o){return o||function(){return $e(this,function(d){return d})}});var Re=this||self;function Ht(o,d){o=o.split(".");var g=Re;o[0]in g||typeof g.execScript>"u"||g.execScript("var "+o[0]);for(var e;o.length&&(e=o.shift());)o.length||d===void 0?g[e]&&g[e]!==Object.prototype[e]?g=g[e]:g=g[e]={}:g[e]=d}function Ye(){throw Error("Invalid UTF8")}function sn(o,d){return d=String.fromCharCode.apply(null,d),o==null?d:o+d}var Gn,Fn=typeof TextDecoder<"u",Rn,Nn=typeof TextEncoder<"u",dn={},pn=null;function kn(o){var d;d===void 0&&(d=0),Me(),d=dn[d];for(var g=Array(Math.floor(o.length/3)),e=d[64]||"",u=0,m=0;u<o.length-2;u+=3){var t=o[u],c=o[u+1],a=o[u+2],b=d[t>>2];t=d[(t&3)<<4|c>>4],c=d[(c&15)<<2|a>>6],a=d[a&63],g[m++]=b+t+c+a}switch(b=0,a=e,o.length-u){case 2:b=o[u+1],a=d[(b&15)<<2]||e;case 1:o=o[u],g[m]=d[o>>2]+d[(o&3)<<4|b>>4]+a+e}return g.join("")}function Cn(o){var d=o.length,g=3*d/4;g%3?g=Math.floor(g):"=.".indexOf(o[d-1])!=-1&&(g="=.".indexOf(o[d-2])!=-1?g-2:g-1);var e=new Uint8Array(g),u=0;return ze(o,function(m){e[u++]=m}),u!==g?e.subarray(0,u):e}function ze(o,d){function g(a){for(;e<o.length;){var b=o.charAt(e++),S=pn[b];if(S!=null)return S;if(!/^[\s\xa0]*$/.test(b))throw Error("Unknown base64 encoding at char: "+b)}return a}Me();for(var e=0;;){var u=g(-1),m=g(0),t=g(64),c=g(64);if(c===64&&u===-1)break;d(u<<2|m>>4),t!=64&&(d(m<<4&240|t>>2),c!=64&&d(t<<6&192|c))}}function Me(){if(!pn){pn={};for(var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],g=0;5>g;g++){var e=o.concat(d[g].split(""));dn[g]=e;for(var u=0;u<e.length;u++){var m=e[u];pn[m]===void 0&&(pn[m]=u)}}}}var xn=typeof Uint8Array=="function";function Xn(o){return xn&&o!=null&&o instanceof Uint8Array}var he;function Se(o){if(this.L=o,o!==null&&o.length===0)throw Error("ByteString should be constructed with non-empty values")}var Oe=typeof Uint8Array.prototype.slice=="function",re=0,Ve=0;function ln(o,d){if(o.constructor===Uint8Array)return o;if(o.constructor===ArrayBuffer)return new Uint8Array(o);if(o.constructor===Array)return new Uint8Array(o);if(o.constructor===String)return Cn(o);if(o.constructor===Se)return!d&&(d=o.L)&&d.constructor===Uint8Array?d:(d=o.L,d=d==null||Xn(d)?d:typeof d=="string"?Cn(d):null,(o=o.L=d)?new Uint8Array(o):he||(he=new Uint8Array(0)));if(o instanceof Uint8Array)return new Uint8Array(o.buffer,o.byteOffset,o.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Be(o,d){return Error("Invalid wire type: "+o+" (at position "+d+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(o,d){d=d===void 0?{}:d,d=d.v===void 0?!1:d.v,this.h=null,this.g=this.i=this.j=0,this.v=d,o&&Le(this,o)}function Le(o,d){o.h=ln(d,o.v),o.j=0,o.i=o.h.length,o.g=o.j}Ze.prototype.reset=function(){this.g=this.j};function Mt(o){if(o.g>o.i)throw Error("Tried to read past the end of the data "+o.g+" > "+o.i)}function xe(o){var d=o.h,g=d[o.g],e=g&127;if(128>g)return o.g+=1,Mt(o),e;if(g=d[o.g+1],e|=(g&127)<<7,128>g)return o.g+=2,Mt(o),e;if(g=d[o.g+2],e|=(g&127)<<14,128>g)return o.g+=3,Mt(o),e;if(g=d[o.g+3],e|=(g&127)<<21,128>g)return o.g+=4,Mt(o),e;if(g=d[o.g+4],o.g+=5,e|=(g&15)<<28,128>g)return Mt(o),e;if(128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++])throw Qt();return Mt(o),e}var zt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var o=this.g;return this.g=[],o};function we(o,d){for(;127<d;)o.g.push(d&127|128),d>>>=7;o.g.push(d)}function qe(o){var d={},g=d.W===void 0?!1:d.W;this.l={v:d.v===void 0?!1:d.v},this.W=g,d=this.l,zt.length?(g=zt.pop(),d&&(g.v=d.v),o&&Le(g,o),o=g):o=new Ze(o,d),this.g=o,this.j=this.g.g,this.h=this.i=-1}qe.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(o){var d=o.g;if(d.g==d.i)return!1;o.j=o.g.g;var g=xe(o.g)>>>0;if(d=g>>>3,g&=7,!(0<=g&&5>=g))throw Be(g,o.j);if(1>d)throw Error("Invalid field number: "+d+" (at position "+o.j+")");return o.i=d,o.h=g,!0}function Ot(o){switch(o.h){case 0:if(o.h!=0)Ot(o);else t:{o=o.g;for(var d=o.g,g=d+10;d<g;)if((o.h[d++]&128)===0){o.g=d,Mt(o);break t}throw Qt()}break;case 1:o=o.g,o.g+=8,Mt(o);break;case 2:o.h!=2?Ot(o):(d=xe(o.g)>>>0,o=o.g,o.g+=d,Mt(o));break;case 5:o=o.g,o.g+=4,Mt(o);break;case 3:d=o.i;do{if(!Xe(o))throw Error("Unmatched start-group tag: stream EOF");if(o.h==4){if(o.i!=d)throw Error("Unmatched end-group tag");break}Ot(o)}while(1);break;default:throw Be(o.h,o.j)}}var Ae=[];function Pe(){this.i=[],this.h=0,this.g=new ye}function Ie(o,d){d.length!==0&&(o.i.push(d),o.h+=d.length)}function Wn(o,d){if(d=d.ba){Ie(o,o.g.end());for(var g=0;g<d.length;g++)Ie(o,d[g])}}var cn=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function _e(o,d){Object.isFrozen(o)||(cn?o[cn]|=d:o.N!==void 0?o.N|=d:Object.defineProperties(o,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function un(o){var d;return cn?d=o[cn]:d=o.N,d==null?0:d}function ve(o){return _e(o,1),o}function Te(o){return Array.isArray(o)?!!(un(o)&2):!1}function Ge(o){if(!Array.isArray(o))throw Error("cannot mark non-array as immutable");_e(o,2)}function ie(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)&&o.constructor===Object}var Qe=Object.freeze(ve([]));function qt(o){if(Te(o.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(o){return{value:o,configurable:!1,writable:!1,enumerable:!1}}function fe(o,d,g){return d===-1?null:d>=o.i?o.g?o.g[d]:void 0:(g===void 0?0:g)&&o.g&&(g=o.g[d],g!=null)?g:o.m[d+o.h]}function Lt(o,d,g,e){e=e===void 0?!1:e,qt(o),d<o.i&&!e?o.m[d+o.h]=g:(o.g||(o.g=o.m[o.i+o.h]={}))[d]=g}function Vt(o,d,g,e){g=g===void 0?!0:g,e=e===void 0?!1:e;var u=fe(o,d,e);return u==null&&(u=Qe),Te(o.m)?g&&(Ge(u),Object.freeze(u)):(u===Qe||Te(u))&&(u=ve(u.slice()),Lt(o,d,u,e)),u}function oe(o,d,g){return o=fe(o,d),o=o==null?o:+o,o==null?g===void 0?0:g:o}function Fe(o,d,g,e){o.j||(o.j={});var u=Te(o.m),m=o.j[g];if(!m){e=Vt(o,g,!0,e===void 0?!1:e),m=[],u=u||Te(e);for(var t=0;t<e.length;t++)m[t]=new d(e[t]),u&&Ge(m[t].m);u&&(Ge(m),Object.freeze(m)),o.j[g]=m}return m}function te(o,d,g,e,u){var m=m===void 0?!1:m;return qt(o),m=Fe(o,g,d,m),g=e||new g,o=Vt(o,d),u!=null?(m.splice(u,0,g),o.splice(u,0,g.m)):(m.push(g),o.push(g.m)),g}function se(o,d){return o=fe(o,d),o==null?0:o}function tt(o,d){return o=fe(o,d),o==null?"":o}function it(o){switch(typeof o){case"number":return isFinite(o)?o:String(o);case"object":if(o&&!Array.isArray(o)){if(Xn(o))return kn(o);if(o instanceof Se){var d=o.L;return d=d==null||typeof d=="string"?d:xn&&d instanceof Uint8Array?kn(d):null,(o.L=d)||""}}}return o}function ut(o){var d=ue;return d=d===void 0?St:d,de(o,d)}function _t(o,d){if(o!=null){if(Array.isArray(o))o=de(o,d);else if(ie(o)){var g={},e;for(e in o)g[e]=_t(o[e],d);o=g}else o=d(o);return o}}function de(o,d){for(var g=o.slice(),e=0;e<g.length;e++)g[e]=_t(g[e],d);return Array.isArray(o)&&un(o)&1&&ve(g),g}function ue(o){return o&&typeof o=="object"&&o.toJSON?o.toJSON():(o=it(o),Array.isArray(o)?ut(o):o)}function St(o){return Xn(o)?new Uint8Array(o):o}function me(o,d,g){o||(o=He),He=null;var e=this.constructor.h;o||(o=e?[e]:[]),this.h=(e?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=o;t:{if(e=this.m.length,o=e-1,e&&(e=this.m[o],ie(e))){this.i=o-this.h,this.g=e;break t}d!==void 0&&-1<d?(this.i=Math.max(d,o+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(g)for(d=0;d<g.length;d++)if(o=g[d],o<this.i)o+=this.h,(e=this.m[o])?Array.isArray(e)&&ve(e):this.m[o]=Qe;else{e=this.g||(this.g=this.m[this.i+this.h]={});var u=e[o];u?Array.isArray(u)&&ve(u):e[o]=Qe}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var He;function tn(){me.apply(this,arguments)}if(dt(tn,me),Pt){var en={};Object.defineProperties(tn,(en[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),en))}function fn(o,d,g){if(g){var e={},u;for(u in g){var m=g[u],t=m.ha;t||(e.F=m.la||m.fa.P,m.aa?(e.U=In(m.aa),t=function(c){return function(a,b,S){return c.F(a,b,S,c.U)}}(e)):m.ca?(e.T=Ke(m.X.g,m.ca),t=function(c){return function(a,b,S){return c.F(a,b,S,c.T)}}(e)):t=e.F,m.ha=t),t(d,o,m.X),e={F:e.F,U:e.U,T:e.T}}}Wn(d,o)}var bn=Symbol();function Ce(o,d,g){return o[bn]||(o[bn]=function(e,u){return d(e,u,g)})}function nn(o){var d=o[bn];if(!d){var g=p(o);d=function(e,u){return W(e,u,g)},o[bn]=d}return d}function jn(o){var d=o.aa;if(d)return nn(d);if(d=o.ka)return Ce(o.X.g,d,o.ca)}function rn(o){var d=jn(o),g=o.X,e=o.fa.O;return d?function(u,m){return e(u,m,g,d)}:function(u,m){return e(u,m,g)}}function Ne(o,d,g,e,u,m){o=o();var t=0;for(o.length&&typeof o[0]!="number"&&(g(d,o[0]),t++);t<o.length;){g=o[t++];for(var c=t+1;c<o.length&&typeof o[c]!="number";)c++;var a=o[t++];switch(c-=t,c){case 0:e(d,g,a);break;case 1:e(d,g,a,o[t++]);break;case 2:u(d,g,a,o[t++],o[t++]);break;case 3:c=o[t++];var b=o[t++],S=o[t++];Array.isArray(S)?u(d,g,a,c,b,S):m(d,g,a,c,b,S);break;case 4:m(d,g,a,o[t++],o[t++],o[t++],o[t++]);break;default:throw Error("unexpected number of binary field arguments: "+c)}}return d}var gn=Symbol();function In(o){var d=o[gn];if(!d){var g=an(o);d=function(e,u){return E(e,u,g)},o[gn]=d}return d}function Ke(o,d){var g=o[gn];return g||(g=function(e,u){return fn(e,u,d)},o[gn]=g),g}var En=Symbol();function on(o,d){o.push(d)}function Zn(o,d,g){o.push(d,g.P)}function Sn(o,d,g,e,u){var m=In(u),t=g.P;o.push(d,function(c,a,b){return t(c,a,b,e,m)})}function Kn(o,d,g,e,u,m){var t=Ke(e,m),c=g.P;o.push(d,function(a,b,S){return c(a,b,S,e,t)})}function an(o){var d=o[En];return d||Ne(o,o[En]=[],on,Zn,Sn,Kn)}var Yn=Symbol();function _n(o,d){o[0]=d}function Qn(o,d,g,e){var u=g.O;o[d]=e?function(m,t,c){return u(m,t,c,e)}:u}function wn(o,d,g,e,u,m){var t=g.O,c=nn(u);o[d]=function(a,b,S){return t(a,b,S,e,c,m)}}function Ln(o,d,g,e,u,m,t){var c=g.O,a=Ce(e,u,m);o[d]=function(b,S,F){return c(b,S,F,e,a,t)}}function p(o){var d=o[Yn];return d||Ne(o,o[Yn]={},_n,Qn,wn,Ln)}function W(o,d,g){for(;Xe(d)&&d.h!=4;){var e=d.i,u=g[e];if(!u){var m=g[0];m&&(m=m[e])&&(u=g[e]=rn(m))}if((!u||!u(d,o,e))&&(u=d,e=o,m=u.j,Ot(u),!u.W)){var t=u.g.h;u=u.g.g,u=m===u?he||(he=new Uint8Array(0)):Oe?t.slice(m,u):new Uint8Array(t.subarray(m,u)),(m=e.ba)?m.push(u):e.ba=[u]}}return o}function V(o,d,g){if(Ae.length){var e=Ae.pop();o&&(Le(e.g,o),e.i=-1,e.h=-1),o=e}else o=new qe(o);try{return W(new d,o,p(g))}finally{d=o.g,d.h=null,d.j=0,d.i=0,d.g=0,d.v=!1,o.i=-1,o.h=-1,100>Ae.length&&Ae.push(o)}}function E(o,d,g){for(var e=g.length,u=e%2==1,m=u?1:0;m<e;m+=2)(0,g[m+1])(d,o,g[m]);fn(o,d,u?g[0]:void 0)}function O(o,d){var g=new Pe;E(o,g,an(d)),Ie(g,g.g.end()),o=new Uint8Array(g.h),d=g.i;for(var e=d.length,u=0,m=0;m<e;m++){var t=d[m];o.set(t,u),u+=t.length}return g.i=[o],o}function ot(o,d){return{O:o,P:d}}var z=ot(function(o,d,g){if(o.h!==5)return!1;o=o.g;var e=o.h[o.g],u=o.h[o.g+1],m=o.h[o.g+2],t=o.h[o.g+3];return o.g+=4,Mt(o),u=(e<<0|u<<8|m<<16|t<<24)>>>0,o=2*(u>>31)+1,e=u>>>23&255,u&=8388607,Lt(d,g,e==255?u?NaN:1/0*o:e==0?o*Math.pow(2,-149)*u:o*Math.pow(2,e-150)*(u+Math.pow(2,23))),!0},function(o,d,g){if(d=fe(d,g),d!=null){we(o.g,8*g+5),o=o.g;var e=d;e=(g=0>e?1:0)?-e:e,e===0?0<1/e?re=Ve=0:(Ve=0,re=2147483648):isNaN(e)?(Ve=0,re=2147483647):34028234663852886e22<e?(Ve=0,re=(g<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),Ve=0,re=(g<<31|e)>>>0):(d=Math.floor(Math.log(e)/Math.LN2),e*=Math.pow(2,-d),e=Math.round(8388608*e),16777216<=e&&++d,Ve=0,re=(g<<31|d+127<<23|e&8388607)>>>0),g=re,o.g.push(g>>>0&255),o.g.push(g>>>8&255),o.g.push(g>>>16&255),o.g.push(g>>>24&255)}}),rt=ot(function(o,d,g){if(o.h!==0)return!1;for(var e=o.g,u=128,m=0,t=o=0;4>t&&128<=u;t++)u=e.h[e.g++],Mt(e),m|=(u&127)<<7*t;if(128<=u&&(u=e.h[e.g++],Mt(e),m|=(u&127)<<28,o|=(u&127)>>4),128<=u)for(t=0;5>t&&128<=u;t++)u=e.h[e.g++],Mt(e),o|=(u&127)<<7*t+3;if(128>u)e=m>>>0,u=o>>>0,(o=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0);else throw Qt();return Lt(d,g,o?-e:e),!0},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null){we(o.g,8*g),o=o.g;var e=d;for(g=0>e,e=Math.abs(e),d=e>>>0,e=Math.floor((e-d)/4294967296),e>>>=0,g&&(e=~e>>>0,d=(~d>>>0)+1,4294967295<d&&(d=0,e++,4294967295<e&&(e=0))),re=d,Ve=e,g=re,d=Ve;0<d||127<g;)o.g.push(g&127|128),g=(g>>>7|d<<25)>>>0,d>>>=7;o.g.push(g)}}),bt=ot(function(o,d,g){return o.h!==0?!1:(Lt(d,g,xe(o.g)),!0)},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null)if(we(o.g,8*g),o=o.g,g=d,0<=g)we(o,g);else{for(d=0;9>d;d++)o.g.push(g&127|128),g>>=7;o.g.push(1)}}),Rt=ot(function(o,d,g){if(o.h!==2)return!1;var e=xe(o.g)>>>0;o=o.g;var u=o.g;o.g+=e,Mt(o),o=o.h;var m;if(Fn)(m=Gn)||(m=Gn=new TextDecoder("utf-8",{fatal:!0})),m=m.decode(o.subarray(u,u+e));else{e=u+e;for(var t=[],c=null,a,b,S;u<e;)a=o[u++],128>a?t.push(a):224>a?u>=e?Ye():(b=o[u++],194>a||(b&192)!==128?(u--,Ye()):t.push((a&31)<<6|b&63)):240>a?u>=e-1?Ye():(b=o[u++],(b&192)!==128||a===224&&160>b||a===237&&160<=b||((m=o[u++])&192)!==128?(u--,Ye()):t.push((a&15)<<12|(b&63)<<6|m&63)):244>=a?u>=e-2?Ye():(b=o[u++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((m=o[u++])&192)!==128||((S=o[u++])&192)!==128?(u--,Ye()):(a=(a&7)<<18|(b&63)<<12|(m&63)<<6|S&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):Ye(),8192<=t.length&&(c=sn(c,t),t.length=0);m=sn(c,t)}return Lt(d,g,m),!0},function(o,d,g){if(d=fe(d,g),d!=null){var e=!1;if(e=e===void 0?!1:e,Nn){if(e&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(d))throw Error("Found an unpaired surrogate");d=(Rn||(Rn=new TextEncoder)).encode(d)}else{for(var u=0,m=new Uint8Array(3*d.length),t=0;t<d.length;t++){var c=d.charCodeAt(t);if(128>c)m[u++]=c;else{if(2048>c)m[u++]=c>>6|192;else{if(55296<=c&&57343>=c){if(56319>=c&&t<d.length){var a=d.charCodeAt(++t);if(56320<=a&&57343>=a){c=1024*(c-55296)+a-56320+65536,m[u++]=c>>18|240,m[u++]=c>>12&63|128,m[u++]=c>>6&63|128,m[u++]=c&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");c=65533}m[u++]=c>>12|224,m[u++]=c>>6&63|128}m[u++]=c&63|128}}d=m.subarray(0,u)}we(o.g,8*g+2),we(o.g,d.length),Ie(o,o.g.end()),Ie(o,d)}}),Ut=ot(function(o,d,g,e,u){if(o.h!==2)return!1;d=te(d,g,e),g=o.g.i,e=xe(o.g)>>>0;var m=o.g.g+e,t=m-g;if(0>=t&&(o.g.i=m,u(d,o),t=m-o.g.g),t)throw Error("Message parsing ended unexpectedly. Expected to read "+(e+" bytes, instead read "+(e-t)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return o.g.g=m,o.g.i=g,!0},function(o,d,g,e,u){if(d=Fe(d,e,g),d!=null)for(e=0;e<d.length;e++){var m=o;we(m.g,8*g+2);var t=m.g.end();Ie(m,t),t.push(m.h),m=t,u(d[e],o),t=o;var c=m.pop();for(c=t.h+t.g.length()-c;127<c;)m.push(c&127|128),c>>>=7,t.h++;m.push(c),t.h++}});function Nt(){tn.apply(this,arguments)}if(dt(Nt,tn),Pt){var $t={};Object.defineProperties(Nt,($t[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),$t))}function Jt(o){Nt.call(this,o)}dt(Jt,Nt);function Yt(){return[1,bt,2,z,3,Rt,4,Rt]}function Et(o){Nt.call(this,o,-1,ae)}dt(Et,Nt),Et.prototype.addClassification=function(o,d){return te(this,1,Jt,o,d),this};function Dt(){return[1,Ut,Jt,Yt]}var ae=[1];function pe(o){Nt.call(this,o)}dt(pe,Nt);function ge(){return[1,z,2,z,3,z,4,z,5,z]}function Je(o){Nt.call(this,o,-1,y)}dt(Je,Nt);function h(){return[1,Ut,pe,ge]}var y=[1];function G(o){Nt.call(this,o)}dt(G,Nt);function H(){return[1,z,2,z,3,z,4,z,5,z,6,rt]}var K=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(N(K),N(_),N(M),N(q),N(ct),N(s));function R(o,d,g){if(g=o.createShader(g===0?o.VERTEX_SHADER:o.FRAGMENT_SHADER),o.shaderSource(g,d),o.compileShader(g),!o.getShaderParameter(g,o.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
53
|
+
`+m.getProgramInfoLog(a));t=e.m=a,m.useProgram(t),c=m.getUniformLocation(t,"sampler0"),e.j={I:m.getAttribLocation(t,"aVertex"),H:m.getAttribLocation(t,"aTex"),ca:c},e.s=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,e.s),m.enableVertexAttribArray(e.j.I),m.vertexAttribPointer(e.j.I,2,m.FLOAT,!1,0,0),m.bufferData(m.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),m.STATIC_DRAW),m.bindBuffer(m.ARRAY_BUFFER,null),e.o=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,e.o),m.enableVertexAttribArray(e.j.H),m.vertexAttribPointer(e.j.H,2,m.FLOAT,!1,0,0),m.bufferData(m.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),m.STATIC_DRAW),m.bindBuffer(m.ARRAY_BUFFER,null),m.uniform1i(c,0)}t=e.j,m.useProgram(e.m),m.canvas.width=u.width,m.canvas.height=u.height,m.viewport(0,0,u.width,u.height),m.activeTexture(m.TEXTURE0),e.h.bindTexture2d(u.glName),m.enableVertexAttribArray(t.I),m.bindBuffer(m.ARRAY_BUFFER,e.s),m.vertexAttribPointer(t.I,2,m.FLOAT,!1,0,0),m.enableVertexAttribArray(t.H),m.bindBuffer(m.ARRAY_BUFFER,e.o),m.vertexAttribPointer(t.H,2,m.FLOAT,!1,0,0),m.bindFramebuffer(m.DRAW_FRAMEBUFFER?m.DRAW_FRAMEBUFFER:m.FRAMEBUFFER,null),m.clearColor(0,0,0,0),m.clear(m.COLOR_BUFFER_BIT),m.colorMask(!0,!0,!0,!0),m.drawArrays(m.TRIANGLE_FAN,0,4),m.disableVertexAttribArray(t.I),m.disableVertexAttribArray(t.H),m.bindBuffer(m.ARRAY_BUFFER,null),e.h.bindTexture2d(0)}function yt(e){this.g=e}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Kt(e,u){return u+e}function xt(e,u){window[e]=u}function ht(e){var u=document.createElement("script");return u.setAttribute("src",e),u.setAttribute("crossorigin","anonymous"),new Promise(function(m){u.addEventListener("load",function(){m()},!1),u.addEventListener("error",function(){m()},!1),document.body.appendChild(u)})}function Wt(){return Zt(function(e){switch(e.g){case 1:return e.m=2,P(e,WebAssembly.instantiate(Xt),4);case 4:e.g=3,e.m=0;break;case 2:return e.m=0,e.j=null,e.return(!1);case 3:return e.return(!0)}})}function It(e){if(this.g=e,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=e&&e.locateFile||Kt,typeof window=="object")var u=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")u=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=u,e.options){u=T(Object.keys(e.options));for(var m=u.next();!m.done;m=u.next()){m=m.value;var t=e.options[m].default;t!==void 0&&(this.j[m]=typeof t=="function"?t():t)}}}i=It.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(e){var u,m,t,c,a,b,S,L,C,U,z;return Zt(function(Q){switch(Q.g){case 1:return e.R?(u=e.g.files===void 0?[]:typeof e.g.files=="function"?e.g.files(e.j):e.g.files,P(Q,Wt(),2)):Q.return();case 2:if(m=Q.h,typeof window=="object")return xt("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),xt("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=u.filter(function(D){return D.data!==void 0}),S=u.filter(function(D){return D.data===void 0}),L=Promise.all(b.map(function(D){var st=v(e,D.url);if(D.path!==void 0){var ft=D.path;st=st.then(function(mt){return e.overrideFile(ft,mt),Promise.resolve(mt)})}return st})),C=Promise.all(S.map(function(D){return D.simd===void 0||D.simd&&m||!D.simd&&!m?ht(e.locateFile(D.url,e.S)):Promise.resolve()})).then(function(){var D,st,ft;return Zt(function(mt){if(mt.g==1)return D=window.createMediapipeSolutionsWasm,st=window.createMediapipeSolutionsPackedAssets,ft=e,P(mt,D(st),2);ft.h=mt.h,mt.g=0})}),U=function(){return Zt(function(D){return e.g.graph&&e.g.graph.url?D=P(D,v(e,e.g.graph.url),0):(D.g=0,D=void 0),D})}(),P(Q,Promise.all([C,L,U]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return t=u.filter(function(D){return D.simd===void 0||D.simd&&m||!D.simd&&!m}).map(function(D){return e.locateFile(D.url,e.S)}),importScripts.apply(null,J(t)),c=e,P(Q,createMediapipeSolutionsWasm(Module),6);case 6:c.h=Q.h,e.l=new OffscreenCanvas(1,1),e.h.canvas=e.l,a=e.h.GL.createContext(e.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),e.h.GL.makeContextCurrent(a),Q.g=4;break;case 7:if(e.l=document.createElement("canvas"),z=e.l.getContext("webgl2",{}),!z&&(z=e.l.getContext("webgl",{}),!z))return alert("Failed to create WebGL canvas context when passing video frame."),Q.return();e.D=z,e.h.canvas=e.l,e.h.createContext(e.l,!0,!0,{});case 4:e.i=new e.h.SolutionWasm,e.R=!1,Q.g=0}})}function Ft(e){var u,m,t,c,a,b,S,L;return Zt(function(C){if(C.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return C.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){C.g=2;return}return e.P=e.g.graph.url,P(C,v(e,e.g.graph.url),3)}for(C.g!=2&&(u=C.h,e.i.loadGraph(u)),m=T(Object.keys(e.B)),t=m.next();!t.done;t=m.next())c=t.value,e.i.overrideFile(c,e.B[c]);if(e.B={},e.g.listeners)for(a=T(e.g.listeners),b=a.next();!b.done;b=a.next())S=b.value,k(e,S);L=e.j,e.j={},e.setOptions(L),C.g=0})}i.reset=function(){var e=this;return Zt(function(u){e.i&&(e.i.reset(),e.m={},e.s={}),u.g=0})},i.setOptions=function(e,u){var m=this;if(u=u||this.g.options){for(var t=[],c=[],a={},b=T(Object.keys(e)),S=b.next();!S.done;a={K:a.K,L:a.L},S=b.next()){var L=S.value;L in this.j&&this.j[L]===e[L]||(this.j[L]=e[L],S=u[L],S!==void 0&&(S.onChange&&(a.K=S.onChange,a.L=e[L],t.push(function(C){return function(){var U;return Zt(function(z){if(z.g==1)return P(z,C.K(C.L),2);U=z.h,U===!0&&(m.o=!0),z.g=0})}}(a))),S.graphOptionXref&&(L={valueNumber:S.type===1?e[L]:0,valueBoolean:S.type===0?e[L]:!1,valueString:S.type===2?e[L]:""},S=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),S.graphOptionXref),L),c.push(S))))}(t.length!==0||c.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(c),this.v=(this.v===void 0?[]:this.v).concat(t))}};function l(e){var u,m,t,c,a,b,S;return Zt(function(L){switch(L.g){case 1:if(!e.o)return L.return();if(!e.v){L.g=2;break}u=T(e.v),m=u.next();case 3:if(m.done){L.g=5;break}return t=m.value,P(L,t(),4);case 4:m=u.next(),L.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(c=new e.h.GraphOptionChangeRequestList,a=T(e.A),b=a.next();!b.done;b=a.next())S=b.value,c.push_back(S);e.i.changeOptions(c),c.delete(),e.A=void 0}e.o=!1,L.g=0}})}i.initialize=function(){var e=this;return Zt(function(u){return u.g==1?P(u,wt(e),2):u.g!=3?P(u,Ft(e),3):P(u,l(e),0)})};function v(e,u){var m,t;return Zt(function(c){return u in e.F?c.return(e.F[u]):(m=e.locateFile(u,""),t=fetch(m).then(function(a){return a.arrayBuffer()}),e.F[u]=t,c.return(t))})}i.overrideFile=function(e,u){this.i?this.i.overrideFile(e,u):this.B[e]=u},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(e,u){var m=this,t,c,a,b,S,L,C,U,z;return Zt(function(Q){switch(Q.g){case 1:return m.g.inputs?(t=1e3*(u==null?performance.now():u),P(Q,m.C,2)):Q.return();case 2:return P(Q,m.initialize(),3);case 3:for(c=new m.h.PacketDataList,a=T(Object.keys(e)),b=a.next();!b.done;b=a.next())if(S=b.value,L=m.g.inputs[S]){t:{var D=e[S];switch(L.type){case"video":var st=m.m[L.stream];if(st||(st=new B(m.h,m.D),m.m[L.stream]=st),st.l===0&&(st.l=st.h.createTexture()),typeof HTMLVideoElement<"u"&&D instanceof HTMLVideoElement)var ft=D.videoWidth,mt=D.videoHeight;else typeof HTMLImageElement<"u"&&D instanceof HTMLImageElement?(ft=D.naturalWidth,mt=D.naturalHeight):(ft=D.width,mt=D.height);mt={glName:st.l,width:ft,height:mt},ft=st.g,ft.canvas.width=mt.width,ft.canvas.height=mt.height,ft.activeTexture(ft.TEXTURE0),st.h.bindTexture2d(st.l),ft.texImage2D(ft.TEXTURE_2D,0,ft.RGBA,ft.RGBA,ft.UNSIGNED_BYTE,D),st.h.bindTexture2d(0),st=mt;break t;case"detections":for(st=m.m[L.stream],st||(st=new yt(m.h),m.m[L.stream]=st),st.data||(st.data=new st.g.DetectionListData),st.data.reset(D.length),mt=0;mt<D.length;++mt){ft=D[mt];var Gt=st.data,vt=Gt.setBoundingBox,At=mt,le=ft.T,ce=new Tt;if(St(ce,1,le.X),St(ce,2,le.Y),St(ce,3,le.height),St(ce,4,le.width),St(ce,5,le.rotation),St(ce,6,le.W),le=nn(ce,Dt),vt.call(Gt,At,le),ft.O)for(Gt=0;Gt<ft.O.length;++Gt){ce=ft.O[Gt];var ke=!!ce.visibility;vt=st.data,At=vt.addNormalizedLandmark,le=mt,ce=Object.assign(Object.assign({},ce),{visibility:ke?ce.visibility:0}),ke=new j,St(ke,1,ce.x),St(ke,2,ce.y),St(ke,3,ce.z),ce.visibility&&St(ke,4,ce.visibility),ce=nn(ke,bt),At.call(vt,le,ce)}if(ft.M)for(Gt=0;Gt<ft.M.length;++Gt)vt=st.data,At=vt.addClassification,le=mt,ce=ft.M[Gt],ke=new Yn,St(ke,2,ce.score),ce.index&&St(ke,1,ce.index),ce.label&&St(ke,3,ce.label),ce.displayName&&St(ke,4,ce.displayName),ce=nn(ke,p),At.call(vt,le,ce)}st=st.data;break t;default:st={}}}switch(C=st,U=L.stream,L.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},C),{stream:U,timestamp:t}));break;case"detections":z=C,z.stream=U,z.timestamp=t,c.pushDetectionList(z);break;default:throw Error("Unknown input config type: '"+L.type+"'")}}return m.i.send(c),P(Q,m.C,4);case 4:c.delete(),Q.g=0}})};function x(e,u,m){var t,c,a,b,S,L,C,U,z,Q,D,st,ft,mt;return Zt(function(Gt){switch(Gt.g){case 1:if(!m)return Gt.return(u);for(t={},c=0,a=T(Object.keys(m)),b=a.next();!b.done;b=a.next())S=b.value,L=m[S],typeof L!="string"&&L.type==="texture"&&u[L.stream]!==void 0&&++c;1<c&&(e.G=!1),C=T(Object.keys(m)),b=C.next();case 2:if(b.done){Gt.g=4;break}if(U=b.value,z=m[U],typeof z=="string")return ft=t,mt=U,P(Gt,Y(e,U,u[z]),14);if(Q=u[z.stream],z.type==="detection_list"){if(Q){for(var vt=Q.getRectList(),At=Q.getLandmarksList(),le=Q.getClassificationsList(),ce=[],ke=0;ke<vt.size();++ke){var Vn=zn(vt.get(ke),Tt,ae);Vn={T:{X:ue(Vn,1),Y:ue(Vn,2),height:ue(Vn,3),width:ue(Vn,4),rotation:ue(Vn,5,0),W:de(Vn,6,0)},O:A(At.get(ke)),M:w(zn(le.get(ke),V,O))},ce.push(Vn)}vt=ce}else vt=[];t[U]=vt,Gt.g=7;break}if(z.type==="proto_list"){if(Q){for(vt=Array(Q.size()),At=0;At<Q.size();At++)vt[At]=Q.get(At);Q.delete()}else vt=[];t[U]=vt,Gt.g=7;break}if(Q===void 0){Gt.g=3;break}if(z.type==="float_list"){t[U]=Q,Gt.g=7;break}if(z.type==="proto"){t[U]=Q,Gt.g=7;break}if(z.type!=="texture")throw Error("Unknown output config type: '"+z.type+"'");return D=e.s[U],D||(D=new B(e.h,e.D),e.s[U]=D),P(Gt,nt(D,Q,e.G),13);case 13:st=Gt.h,t[U]=st;case 7:z.transform&&t[U]&&(t[U]=z.transform(t[U])),Gt.g=3;break;case 14:ft[mt]=Gt.h;case 3:b=C.next(),Gt.g=2;break;case 4:return Gt.return(t)}})}function Y(e,u,m){var t;return Zt(function(c){return typeof m=="number"||m instanceof Uint8Array||m instanceof e.h.Uint8BlobList?c.return(m):m instanceof e.h.Texture2dDataOut?(t=e.s[u],t||(t=new B(e.h,e.D),e.s[u]=t),c.return(nt(t,m,e.G))):c.return(void 0)})}function k(e,u){for(var m=u.name||"$",t=[].concat(J(u.wants)),c=new e.h.StringList,a=T(u.wants),b=a.next();!b.done;b=a.next())c.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(S){for(var L={},C=0;C<u.wants.length;++C)L[t[C]]=S.get(C);var U=e.listeners[m];U&&(e.C=x(e,L,u.outs).then(function(z){z=U(z);for(var Q=0;Q<u.wants.length;++Q){var D=L[t[Q]];typeof D=="object"&&D.hasOwnProperty&&D.hasOwnProperty("delete")&&D.delete()}z&&(e.C=z)}))}}),e.i.attachMultiListener(c,a),c.delete()}i.onResults=function(e,u){this.listeners[u||"$"]=e},Ht("Solution",It),Ht("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(e){return e.map(d)}function d(e){e=zn(e,y,H);var u=e.getMesh();if(!u)return e;var m=new Float32Array(u.getVertexBufferList());u.getVertexBufferList=function(){return m};var t=new Uint32Array(u.getIndexBufferList());return u.getIndexBufferList=function(){return t},e}function g(e){var u=this;e=e||{},this.g=new It({locateFile:e.locateFile,files:[{url:"holistic_solution_packed_assets_loader.js"},{simd:!1,url:"holistic_solution_wasm_bin.js"},{simd:!0,url:"holistic_solution_simd_wasm_bin.js"}],graph:{url:"holistic.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:"left_hand_landmarks right_hand_landmarks face_landmarks pose_landmarks world_landmarks segmentation_mask image_transformed multi_face_geometry".split(" "),outs:{image:{type:"texture",stream:"image_transformed"},leftHandLandmarks:{type:"proto",stream:"left_hand_landmarks",transform:A},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:A},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:A},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:A},ea:{type:"proto",stream:"world_landmarks",transform:A},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:o}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,default:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(m){var t,c,a,b;return Zt(function(S){if(S.g==1){switch(t="",m){case 1:t="pose_landmark_full.tflite";break;case 2:t="pose_landmark_heavy.tflite";break;default:t="pose_landmark_lite.tflite"}return c="third_party/mediapipe/modules/pose_landmark/"+t,a=u.g.locateFile(t,""),P(S,fetch(a),3)}return S.g!=2?P(S,S.h.arrayBuffer(),2):(b=S.h,u.g.overrideFile(c,b),P(S,u.g.reset(),0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},refineFaceLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineFaceLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}})}i=g.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(e){this.g.onResults(e)},i.initialize=function(){var e=this;return Zt(function(u){return P(u,e.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(e){var u=this;return Zt(function(m){return P(m,u.g.send(e),0)})},i.setOptions=function(e){this.g.setOptions(e)},Ht("Holistic",g),Ht("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Ht("FACEMESH_LIPS",K),Ht("FACEMESH_LEFT_EYE",_),Ht("FACEMESH_LEFT_EYEBROW",M),Ht("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Ht("FACEMESH_RIGHT_EYE",q),Ht("FACEMESH_RIGHT_EYEBROW",ct),Ht("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Ht("FACEMESH_FACE_OVAL",s),Ht("FACEMESH_CONTOURS",X),Ht("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ht("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ht("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ht("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ht("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ht("matrixDataToMatrix",function(e){for(var u=e.getCols(),m=e.getRows(),t=e.getPackedDataList(),c=[],a=0;a<m;a++)c.push(Array(u));for(a=0;a<m;a++)for(var b=0;b<u;b++){var S=e.getLayout()===1?a*u+b:b*m+a;c[a][b]=t[S]}return c}),Ht("VERSION","0.5.1635989137")}).call(Gi);const Xi={};(function(){var i;function n(o){var d=0;return function(){return d<o.length?{done:!1,value:o[d++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(o,d,g){return o==Array.prototype||o==Object.prototype||(o[d]=g.value),o};function f(o){o=[typeof globalThis=="object"&&globalThis,o,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var d=0;d<o.length;++d){var g=o[d];if(g&&g.Math==Math)return g}throw Error("Cannot find global object")}var Z=f(this);function I(o,d){if(d)t:{var g=Z;o=o.split(".");for(var e=0;e<o.length-1;e++){var u=o[e];if(!(u in g))break t;g=g[u]}o=o[o.length-1],e=g[o],d=d(e),d!=e&&d!=null&&r(g,o,{configurable:!0,writable:!0,value:d})}}I("Symbol",function(o){function d(m){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new g(e+(m||"")+"_"+u++,m)}function g(m,t){this.g=m,r(this,"description",{configurable:!0,writable:!0,value:t})}if(o)return o;g.prototype.toString=function(){return this.g};var e="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",u=0;return d}),I("Symbol.iterator",function(o){if(o)return o;o=Symbol("Symbol.iterator");for(var d="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),g=0;g<d.length;g++){var e=Z[d[g]];typeof e=="function"&&typeof e.prototype[o]!="function"&&r(e.prototype,o,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return o});function F(o){return o={next:o},o[Symbol.iterator]=function(){return this},o}function T(o){var d=typeof Symbol<"u"&&Symbol.iterator&&o[Symbol.iterator];return d?d.call(o):{next:n(o)}}function J(o){if(!(o instanceof Array)){o=T(o);for(var d,g=[];!(d=o.next()).done;)g.push(d.value);o=g}return o}var et=typeof Object.create=="function"?Object.create:function(o){function d(){}return d.prototype=o,new d},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(o,d){if(o.__proto__=d,o.__proto__!==d)throw new TypeError(o+" is not extensible");return o}:null}var at=lt;function dt(o,d){if(o.prototype=et(d.prototype),o.prototype.constructor=o,at)at(o,d);else for(var g in d)if(g!="prototype")if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(d,g);e&&Object.defineProperty(o,g,e)}else o[g]=d[g];o.na=d.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function kt(o){if(o.l)throw new TypeError("Generator is already running");o.l=!0}Bt.prototype.s=function(o){this.h=o};function ee(o,d){o.j={da:d,ea:!0},o.g=o.o||o.u}Bt.prototype.return=function(o){this.j={return:o},this.g=this.u};function P(o,d,g){return o.g=g,{value:d}}function De(o){this.g=new Bt,this.h=o}function ze(o,d){kt(o.g);var g=o.g.i;return g?We(o,"return"in g?g.return:function(e){return{value:e,done:!0}},d,o.g.return):(o.g.return(d),zt(o))}function We(o,d,g,e){try{var u=d.call(o.g.i,g);if(!(u instanceof Object))throw new TypeError("Iterator result "+u+" is not an object");if(!u.done)return o.g.l=!1,u;var m=u.value}catch(t){return o.g.i=null,ee(o.g,t),zt(o)}return o.g.i=null,e.call(o.g,m),zt(o)}function zt(o){for(;o.g.g;)try{var d=o.h(o.g);if(d)return o.g.l=!1,{value:d.value,done:!1}}catch(g){o.g.h=void 0,ee(o.g,g)}if(o.g.l=!1,o.g.j){if(d=o.g.j,o.g.j=null,d.ea)throw d.da;return{value:d.return,done:!0}}return{value:void 0,done:!0}}function Hn(o){this.next=function(d){return kt(o.g),o.g.i?d=We(o,o.g.i.next,d,o.g.s):(o.g.s(d),d=zt(o)),d},this.throw=function(d){return kt(o.g),o.g.i?d=We(o,o.g.i.throw,d,o.g.s):(ee(o.g,d),d=zt(o)),d},this.return=function(d){return ze(o,d)},this[Symbol.iterator]=function(){return this}}function ne(o){function d(e){return o.next(e)}function g(e){return o.throw(e)}return new Promise(function(e,u){function m(t){t.done?e(t.value):Promise.resolve(t.value).then(d,g).then(m,u)}m(o.next())})}function Zt(o){return ne(new Hn(new De(o)))}I("Promise",function(o){function d(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var c=this.j();try{t(c.resolve,c.reject)}catch(a){c.reject(a)}}function g(){this.g=null}function e(t){return t instanceof d?t:new d(function(c){c(t)})}if(o)return o;g.prototype.h=function(t){if(this.g==null){this.g=[];var c=this;this.i(function(){c.l()})}this.g.push(t)};var u=Z.setTimeout;g.prototype.i=function(t){u(t,0)},g.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var c=0;c<t.length;++c){var a=t[c];t[c]=null;try{a()}catch(b){this.j(b)}}}this.g=null},g.prototype.j=function(t){this.i(function(){throw t})},d.prototype.j=function(){function t(b){return function(S){a||(a=!0,b.call(c,S))}}var c=this,a=!1;return{resolve:t(this.D),reject:t(this.l)}},d.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof d)this.H(t);else{t:switch(typeof t){case"object":var c=t!=null;break t;case"function":c=!0;break t;default:c=!1}c?this.A(t):this.o(t)}},d.prototype.A=function(t){var c=void 0;try{c=t.then}catch(a){this.l(a);return}typeof c=="function"?this.I(c,t):this.o(t)},d.prototype.l=function(t){this.u(2,t)},d.prototype.o=function(t){this.u(1,t)},d.prototype.u=function(t,c){if(this.h!=0)throw Error("Cannot settle("+t+", "+c+"): Promise already settled in state"+this.h);this.h=t,this.i=c,this.h===2&&this.G(),this.B()},d.prototype.G=function(){var t=this;u(function(){if(t.C()){var c=Z.console;typeof c<"u"&&c.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=Z.CustomEvent,c=Z.Event,a=Z.dispatchEvent;return typeof a>"u"?!0:(typeof t=="function"?t=new t("unhandledrejection",{cancelable:!0}):typeof c=="function"?t=new c("unhandledrejection",{cancelable:!0}):(t=Z.document.createEvent("CustomEvent"),t.initCustomEvent("unhandledrejection",!1,!0,t)),t.promise=this,t.reason=this.i,a(t))},d.prototype.B=function(){if(this.g!=null){for(var t=0;t<this.g.length;++t)m.h(this.g[t]);this.g=null}};var m=new g;return d.prototype.H=function(t){var c=this.j();t.M(c.resolve,c.reject)},d.prototype.I=function(t,c){var a=this.j();try{t.call(c,a.resolve,a.reject)}catch(b){a.reject(b)}},d.prototype.then=function(t,c){function a(C,U){return typeof C=="function"?function(z){try{b(C(z))}catch(Q){S(Q)}}:U}var b,S,L=new d(function(C,U){b=C,S=U});return this.M(a(t,b),a(c,S)),L},d.prototype.catch=function(t){return this.then(void 0,t)},d.prototype.M=function(t,c){function a(){switch(b.h){case 1:t(b.i);break;case 2:c(b.i);break;default:throw Error("Unexpected state: "+b.h)}}var b=this;this.g==null?m.h(a):this.g.push(a),this.s=!0},d.resolve=e,d.reject=function(t){return new d(function(c,a){a(t)})},d.race=function(t){return new d(function(c,a){for(var b=T(t),S=b.next();!S.done;S=b.next())e(S.value).M(c,a)})},d.all=function(t){var c=T(t),a=c.next();return a.done?e([]):new d(function(b,S){function L(z){return function(Q){C[z]=Q,U--,U==0&&b(C)}}var C=[],U=0;do C.push(void 0),U++,e(a.value).M(L(C.length-1),S),a=c.next();while(!a.done)})},d});function $e(o,d){o instanceof String&&(o+="");var g=0,e=!1,u={next:function(){if(!e&&g<o.length){var m=g++;return{value:d(m,o[m]),done:!1}}return e=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var An=typeof Object.assign=="function"?Object.assign:function(o,d){for(var g=1;g<arguments.length;g++){var e=arguments[g];if(e)for(var u in e)Object.prototype.hasOwnProperty.call(e,u)&&(o[u]=e[u])}return o};I("Object.assign",function(o){return o||An}),I("Object.is",function(o){return o||function(d,g){return d===g?d!==0||1/d===1/g:d!==d&&g!==g}}),I("Array.prototype.includes",function(o){return o||function(d,g){var e=this;e instanceof String&&(e=String(e));var u=e.length;for(g=g||0,0>g&&(g=Math.max(g+u,0));g<u;g++){var m=e[g];if(m===d||Object.is(m,d))return!0}return!1}}),I("String.prototype.includes",function(o){return o||function(d,g){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(d instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(d,g||0)!==-1}}),I("Array.prototype.keys",function(o){return o||function(){return $e(this,function(d){return d})}});var Re=this||self;function Ht(o,d){o=o.split(".");var g=Re;o[0]in g||typeof g.execScript>"u"||g.execScript("var "+o[0]);for(var e;o.length&&(e=o.shift());)o.length||d===void 0?g[e]&&g[e]!==Object.prototype[e]?g=g[e]:g=g[e]={}:g[e]=d}function Te(){throw Error("Invalid UTF8")}function sn(o,d){return d=String.fromCharCode.apply(null,d),o==null?d:o+d}var Gn,Ln=typeof TextDecoder<"u",Rn,Jn=typeof TextEncoder<"u",dn={},pn=null;function kn(o){var d;d===void 0&&(d=0),Me(),d=dn[d];for(var g=Array(Math.floor(o.length/3)),e=d[64]||"",u=0,m=0;u<o.length-2;u+=3){var t=o[u],c=o[u+1],a=o[u+2],b=d[t>>2];t=d[(t&3)<<4|c>>4],c=d[(c&15)<<2|a>>6],a=d[a&63],g[m++]=b+t+c+a}switch(b=0,a=e,o.length-u){case 2:b=o[u+1],a=d[(b&15)<<2]||e;case 1:o=o[u],g[m]=d[o>>2]+d[(o&3)<<4|b>>4]+a+e}return g.join("")}function Fn(o){var d=o.length,g=3*d/4;g%3?g=Math.floor(g):"=.".indexOf(o[d-1])!=-1&&(g="=.".indexOf(o[d-2])!=-1?g-2:g-1);var e=new Uint8Array(g),u=0;return je(o,function(m){e[u++]=m}),u!==g?e.subarray(0,u):e}function je(o,d){function g(a){for(;e<o.length;){var b=o.charAt(e++),S=pn[b];if(S!=null)return S;if(!/^[\s\xa0]*$/.test(b))throw Error("Unknown base64 encoding at char: "+b)}return a}Me();for(var e=0;;){var u=g(-1),m=g(0),t=g(64),c=g(64);if(c===64&&u===-1)break;d(u<<2|m>>4),t!=64&&(d(m<<4&240|t>>2),c!=64&&d(t<<6&192|c))}}function Me(){if(!pn){pn={};for(var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],g=0;5>g;g++){var e=o.concat(d[g].split(""));dn[g]=e;for(var u=0;u<e.length;u++){var m=e[u];pn[m]===void 0&&(pn[m]=u)}}}}var xn=typeof Uint8Array=="function";function Xn(o){return xn&&o!=null&&o instanceof Uint8Array}var he;function Se(o){if(this.L=o,o!==null&&o.length===0)throw Error("ByteString should be constructed with non-empty values")}var Oe=typeof Uint8Array.prototype.slice=="function",re=0,Ve=0;function ln(o,d){if(o.constructor===Uint8Array)return o;if(o.constructor===ArrayBuffer)return new Uint8Array(o);if(o.constructor===Array)return new Uint8Array(o);if(o.constructor===String)return Fn(o);if(o.constructor===Se)return!d&&(d=o.L)&&d.constructor===Uint8Array?d:(d=o.L,d=d==null||Xn(d)?d:typeof d=="string"?Fn(d):null,(o=o.L=d)?new Uint8Array(o):he||(he=new Uint8Array(0)));if(o instanceof Uint8Array)return new Uint8Array(o.buffer,o.byteOffset,o.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Be(o,d){return Error("Invalid wire type: "+o+" (at position "+d+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(o,d){d=d===void 0?{}:d,d=d.v===void 0?!1:d.v,this.h=null,this.g=this.i=this.j=0,this.v=d,o&&Ce(this,o)}function Ce(o,d){o.h=ln(d,o.v),o.j=0,o.i=o.h.length,o.g=o.j}Ze.prototype.reset=function(){this.g=this.j};function Mt(o){if(o.g>o.i)throw Error("Tried to read past the end of the data "+o.g+" > "+o.i)}function xe(o){var d=o.h,g=d[o.g],e=g&127;if(128>g)return o.g+=1,Mt(o),e;if(g=d[o.g+1],e|=(g&127)<<7,128>g)return o.g+=2,Mt(o),e;if(g=d[o.g+2],e|=(g&127)<<14,128>g)return o.g+=3,Mt(o),e;if(g=d[o.g+3],e|=(g&127)<<21,128>g)return o.g+=4,Mt(o),e;if(g=d[o.g+4],o.g+=5,e|=(g&15)<<28,128>g)return Mt(o),e;if(128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++])throw Qt();return Mt(o),e}var jt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var o=this.g;return this.g=[],o};function Ye(o,d){for(;127<d;)o.g.push(d&127|128),d>>>=7;o.g.push(d)}function qe(o){var d={},g=d.W===void 0?!1:d.W;this.l={v:d.v===void 0?!1:d.v},this.W=g,d=this.l,jt.length?(g=jt.pop(),d&&(g.v=d.v),o&&Ce(g,o),o=g):o=new Ze(o,d),this.g=o,this.j=this.g.g,this.h=this.i=-1}qe.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(o){var d=o.g;if(d.g==d.i)return!1;o.j=o.g.g;var g=xe(o.g)>>>0;if(d=g>>>3,g&=7,!(0<=g&&5>=g))throw Be(g,o.j);if(1>d)throw Error("Invalid field number: "+d+" (at position "+o.j+")");return o.i=d,o.h=g,!0}function Ot(o){switch(o.h){case 0:if(o.h!=0)Ot(o);else t:{o=o.g;for(var d=o.g,g=d+10;d<g;)if((o.h[d++]&128)===0){o.g=d,Mt(o);break t}throw Qt()}break;case 1:o=o.g,o.g+=8,Mt(o);break;case 2:o.h!=2?Ot(o):(d=xe(o.g)>>>0,o=o.g,o.g+=d,Mt(o));break;case 5:o=o.g,o.g+=4,Mt(o);break;case 3:d=o.i;do{if(!Xe(o))throw Error("Unmatched start-group tag: stream EOF");if(o.h==4){if(o.i!=d)throw Error("Unmatched end-group tag");break}Ot(o)}while(1);break;default:throw Be(o.h,o.j)}}var Ae=[];function Pe(){this.i=[],this.h=0,this.g=new ye}function Ie(o,d){d.length!==0&&(o.i.push(d),o.h+=d.length)}function Wn(o,d){if(d=d.ba){Ie(o,o.g.end());for(var g=0;g<d.length;g++)Ie(o,d[g])}}var cn=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function _e(o,d){Object.isFrozen(o)||(cn?o[cn]|=d:o.N!==void 0?o.N|=d:Object.defineProperties(o,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function un(o){var d;return cn?d=o[cn]:d=o.N,d==null?0:d}function ve(o){return _e(o,1),o}function we(o){return Array.isArray(o)?!!(un(o)&2):!1}function Ge(o){if(!Array.isArray(o))throw Error("cannot mark non-array as immutable");_e(o,2)}function ie(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)&&o.constructor===Object}var Qe=Object.freeze(ve([]));function qt(o){if(we(o.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(o){return{value:o,configurable:!1,writable:!1,enumerable:!1}}function fe(o,d,g){return d===-1?null:d>=o.i?o.g?o.g[d]:void 0:(g===void 0?0:g)&&o.g&&(g=o.g[d],g!=null)?g:o.m[d+o.h]}function Ct(o,d,g,e){e=e===void 0?!1:e,qt(o),d<o.i&&!e?o.m[d+o.h]=g:(o.g||(o.g=o.m[o.i+o.h]={}))[d]=g}function Vt(o,d,g,e){g=g===void 0?!0:g,e=e===void 0?!1:e;var u=fe(o,d,e);return u==null&&(u=Qe),we(o.m)?g&&(Ge(u),Object.freeze(u)):(u===Qe||we(u))&&(u=ve(u.slice()),Ct(o,d,u,e)),u}function oe(o,d,g){return o=fe(o,d),o=o==null?o:+o,o==null?g===void 0?0:g:o}function Le(o,d,g,e){o.j||(o.j={});var u=we(o.m),m=o.j[g];if(!m){e=Vt(o,g,!0,e===void 0?!1:e),m=[],u=u||we(e);for(var t=0;t<e.length;t++)m[t]=new d(e[t]),u&&Ge(m[t].m);u&&(Ge(m),Object.freeze(m)),o.j[g]=m}return m}function te(o,d,g,e,u){var m=m===void 0?!1:m;return qt(o),m=Le(o,g,d,m),g=e||new g,o=Vt(o,d),u!=null?(m.splice(u,0,g),o.splice(u,0,g.m)):(m.push(g),o.push(g.m)),g}function se(o,d){return o=fe(o,d),o==null?0:o}function tt(o,d){return o=fe(o,d),o==null?"":o}function it(o){switch(typeof o){case"number":return isFinite(o)?o:String(o);case"object":if(o&&!Array.isArray(o)){if(Xn(o))return kn(o);if(o instanceof Se){var d=o.L;return d=d==null||typeof d=="string"?d:xn&&d instanceof Uint8Array?kn(d):null,(o.L=d)||""}}}return o}function ut(o){var d=ue;return d=d===void 0?St:d,de(o,d)}function _t(o,d){if(o!=null){if(Array.isArray(o))o=de(o,d);else if(ie(o)){var g={},e;for(e in o)g[e]=_t(o[e],d);o=g}else o=d(o);return o}}function de(o,d){for(var g=o.slice(),e=0;e<g.length;e++)g[e]=_t(g[e],d);return Array.isArray(o)&&un(o)&1&&ve(g),g}function ue(o){return o&&typeof o=="object"&&o.toJSON?o.toJSON():(o=it(o),Array.isArray(o)?ut(o):o)}function St(o){return Xn(o)?new Uint8Array(o):o}function me(o,d,g){o||(o=He),He=null;var e=this.constructor.h;o||(o=e?[e]:[]),this.h=(e?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=o;t:{if(e=this.m.length,o=e-1,e&&(e=this.m[o],ie(e))){this.i=o-this.h,this.g=e;break t}d!==void 0&&-1<d?(this.i=Math.max(d,o+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(g)for(d=0;d<g.length;d++)if(o=g[d],o<this.i)o+=this.h,(e=this.m[o])?Array.isArray(e)&&ve(e):this.m[o]=Qe;else{e=this.g||(this.g=this.m[this.i+this.h]={});var u=e[o];u?Array.isArray(u)&&ve(u):e[o]=Qe}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var He;function tn(){me.apply(this,arguments)}if(dt(tn,me),Pt){var en={};Object.defineProperties(tn,(en[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),en))}function fn(o,d,g){if(g){var e={},u;for(u in g){var m=g[u],t=m.ha;t||(e.F=m.la||m.fa.P,m.aa?(e.U=In(m.aa),t=function(c){return function(a,b,S){return c.F(a,b,S,c.U)}}(e)):m.ca?(e.T=Ke(m.X.g,m.ca),t=function(c){return function(a,b,S){return c.F(a,b,S,c.T)}}(e)):t=e.F,m.ha=t),t(d,o,m.X),e={F:e.F,U:e.U,T:e.T}}}Wn(d,o)}var bn=Symbol();function Fe(o,d,g){return o[bn]||(o[bn]=function(e,u){return d(e,u,g)})}function nn(o){var d=o[bn];if(!d){var g=p(o);d=function(e,u){return W(e,u,g)},o[bn]=d}return d}function zn(o){var d=o.aa;if(d)return nn(d);if(d=o.ka)return Fe(o.X.g,d,o.ca)}function rn(o){var d=zn(o),g=o.X,e=o.fa.O;return d?function(u,m){return e(u,m,g,d)}:function(u,m){return e(u,m,g)}}function Je(o,d,g,e,u,m){o=o();var t=0;for(o.length&&typeof o[0]!="number"&&(g(d,o[0]),t++);t<o.length;){g=o[t++];for(var c=t+1;c<o.length&&typeof o[c]!="number";)c++;var a=o[t++];switch(c-=t,c){case 0:e(d,g,a);break;case 1:e(d,g,a,o[t++]);break;case 2:u(d,g,a,o[t++],o[t++]);break;case 3:c=o[t++];var b=o[t++],S=o[t++];Array.isArray(S)?u(d,g,a,c,b,S):m(d,g,a,c,b,S);break;case 4:m(d,g,a,o[t++],o[t++],o[t++],o[t++]);break;default:throw Error("unexpected number of binary field arguments: "+c)}}return d}var gn=Symbol();function In(o){var d=o[gn];if(!d){var g=an(o);d=function(e,u){return E(e,u,g)},o[gn]=d}return d}function Ke(o,d){var g=o[gn];return g||(g=function(e,u){return fn(e,u,d)},o[gn]=g),g}var En=Symbol();function on(o,d){o.push(d)}function Zn(o,d,g){o.push(d,g.P)}function Sn(o,d,g,e,u){var m=In(u),t=g.P;o.push(d,function(c,a,b){return t(c,a,b,e,m)})}function Kn(o,d,g,e,u,m){var t=Ke(e,m),c=g.P;o.push(d,function(a,b,S){return c(a,b,S,e,t)})}function an(o){var d=o[En];return d||Je(o,o[En]=[],on,Zn,Sn,Kn)}var Tn=Symbol();function _n(o,d){o[0]=d}function Qn(o,d,g,e){var u=g.O;o[d]=e?function(m,t,c){return u(m,t,c,e)}:u}function Yn(o,d,g,e,u,m){var t=g.O,c=nn(u);o[d]=function(a,b,S){return t(a,b,S,e,c,m)}}function Cn(o,d,g,e,u,m,t){var c=g.O,a=Fe(e,u,m);o[d]=function(b,S,L){return c(b,S,L,e,a,t)}}function p(o){var d=o[Tn];return d||Je(o,o[Tn]={},_n,Qn,Yn,Cn)}function W(o,d,g){for(;Xe(d)&&d.h!=4;){var e=d.i,u=g[e];if(!u){var m=g[0];m&&(m=m[e])&&(u=g[e]=rn(m))}if((!u||!u(d,o,e))&&(u=d,e=o,m=u.j,Ot(u),!u.W)){var t=u.g.h;u=u.g.g,u=m===u?he||(he=new Uint8Array(0)):Oe?t.slice(m,u):new Uint8Array(t.subarray(m,u)),(m=e.ba)?m.push(u):e.ba=[u]}}return o}function V(o,d,g){if(Ae.length){var e=Ae.pop();o&&(Ce(e.g,o),e.i=-1,e.h=-1),o=e}else o=new qe(o);try{return W(new d,o,p(g))}finally{d=o.g,d.h=null,d.j=0,d.i=0,d.g=0,d.v=!1,o.i=-1,o.h=-1,100>Ae.length&&Ae.push(o)}}function E(o,d,g){for(var e=g.length,u=e%2==1,m=u?1:0;m<e;m+=2)(0,g[m+1])(d,o,g[m]);fn(o,d,u?g[0]:void 0)}function O(o,d){var g=new Pe;E(o,g,an(d)),Ie(g,g.g.end()),o=new Uint8Array(g.h),d=g.i;for(var e=d.length,u=0,m=0;m<e;m++){var t=d[m];o.set(t,u),u+=t.length}return g.i=[o],o}function ot(o,d){return{O:o,P:d}}var j=ot(function(o,d,g){if(o.h!==5)return!1;o=o.g;var e=o.h[o.g],u=o.h[o.g+1],m=o.h[o.g+2],t=o.h[o.g+3];return o.g+=4,Mt(o),u=(e<<0|u<<8|m<<16|t<<24)>>>0,o=2*(u>>31)+1,e=u>>>23&255,u&=8388607,Ct(d,g,e==255?u?NaN:1/0*o:e==0?o*Math.pow(2,-149)*u:o*Math.pow(2,e-150)*(u+Math.pow(2,23))),!0},function(o,d,g){if(d=fe(d,g),d!=null){Ye(o.g,8*g+5),o=o.g;var e=d;e=(g=0>e?1:0)?-e:e,e===0?0<1/e?re=Ve=0:(Ve=0,re=2147483648):isNaN(e)?(Ve=0,re=2147483647):34028234663852886e22<e?(Ve=0,re=(g<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),Ve=0,re=(g<<31|e)>>>0):(d=Math.floor(Math.log(e)/Math.LN2),e*=Math.pow(2,-d),e=Math.round(8388608*e),16777216<=e&&++d,Ve=0,re=(g<<31|d+127<<23|e&8388607)>>>0),g=re,o.g.push(g>>>0&255),o.g.push(g>>>8&255),o.g.push(g>>>16&255),o.g.push(g>>>24&255)}}),rt=ot(function(o,d,g){if(o.h!==0)return!1;for(var e=o.g,u=128,m=0,t=o=0;4>t&&128<=u;t++)u=e.h[e.g++],Mt(e),m|=(u&127)<<7*t;if(128<=u&&(u=e.h[e.g++],Mt(e),m|=(u&127)<<28,o|=(u&127)>>4),128<=u)for(t=0;5>t&&128<=u;t++)u=e.h[e.g++],Mt(e),o|=(u&127)<<7*t+3;if(128>u)e=m>>>0,u=o>>>0,(o=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0);else throw Qt();return Ct(d,g,o?-e:e),!0},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null){Ye(o.g,8*g),o=o.g;var e=d;for(g=0>e,e=Math.abs(e),d=e>>>0,e=Math.floor((e-d)/4294967296),e>>>=0,g&&(e=~e>>>0,d=(~d>>>0)+1,4294967295<d&&(d=0,e++,4294967295<e&&(e=0))),re=d,Ve=e,g=re,d=Ve;0<d||127<g;)o.g.push(g&127|128),g=(g>>>7|d<<25)>>>0,d>>>=7;o.g.push(g)}}),bt=ot(function(o,d,g){return o.h!==0?!1:(Ct(d,g,xe(o.g)),!0)},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null)if(Ye(o.g,8*g),o=o.g,g=d,0<=g)Ye(o,g);else{for(d=0;9>d;d++)o.g.push(g&127|128),g>>=7;o.g.push(1)}}),Rt=ot(function(o,d,g){if(o.h!==2)return!1;var e=xe(o.g)>>>0;o=o.g;var u=o.g;o.g+=e,Mt(o),o=o.h;var m;if(Ln)(m=Gn)||(m=Gn=new TextDecoder("utf-8",{fatal:!0})),m=m.decode(o.subarray(u,u+e));else{e=u+e;for(var t=[],c=null,a,b,S;u<e;)a=o[u++],128>a?t.push(a):224>a?u>=e?Te():(b=o[u++],194>a||(b&192)!==128?(u--,Te()):t.push((a&31)<<6|b&63)):240>a?u>=e-1?Te():(b=o[u++],(b&192)!==128||a===224&&160>b||a===237&&160<=b||((m=o[u++])&192)!==128?(u--,Te()):t.push((a&15)<<12|(b&63)<<6|m&63)):244>=a?u>=e-2?Te():(b=o[u++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((m=o[u++])&192)!==128||((S=o[u++])&192)!==128?(u--,Te()):(a=(a&7)<<18|(b&63)<<12|(m&63)<<6|S&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):Te(),8192<=t.length&&(c=sn(c,t),t.length=0);m=sn(c,t)}return Ct(d,g,m),!0},function(o,d,g){if(d=fe(d,g),d!=null){var e=!1;if(e=e===void 0?!1:e,Jn){if(e&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(d))throw Error("Found an unpaired surrogate");d=(Rn||(Rn=new TextEncoder)).encode(d)}else{for(var u=0,m=new Uint8Array(3*d.length),t=0;t<d.length;t++){var c=d.charCodeAt(t);if(128>c)m[u++]=c;else{if(2048>c)m[u++]=c>>6|192;else{if(55296<=c&&57343>=c){if(56319>=c&&t<d.length){var a=d.charCodeAt(++t);if(56320<=a&&57343>=a){c=1024*(c-55296)+a-56320+65536,m[u++]=c>>18|240,m[u++]=c>>12&63|128,m[u++]=c>>6&63|128,m[u++]=c&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");c=65533}m[u++]=c>>12|224,m[u++]=c>>6&63|128}m[u++]=c&63|128}}d=m.subarray(0,u)}Ye(o.g,8*g+2),Ye(o.g,d.length),Ie(o,o.g.end()),Ie(o,d)}}),Ut=ot(function(o,d,g,e,u){if(o.h!==2)return!1;d=te(d,g,e),g=o.g.i,e=xe(o.g)>>>0;var m=o.g.g+e,t=m-g;if(0>=t&&(o.g.i=m,u(d,o),t=m-o.g.g),t)throw Error("Message parsing ended unexpectedly. Expected to read "+(e+" bytes, instead read "+(e-t)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return o.g.g=m,o.g.i=g,!0},function(o,d,g,e,u){if(d=Le(d,e,g),d!=null)for(e=0;e<d.length;e++){var m=o;Ye(m.g,8*g+2);var t=m.g.end();Ie(m,t),t.push(m.h),m=t,u(d[e],o),t=o;var c=m.pop();for(c=t.h+t.g.length()-c;127<c;)m.push(c&127|128),c>>>=7,t.h++;m.push(c),t.h++}});function Jt(){tn.apply(this,arguments)}if(dt(Jt,tn),Pt){var $t={};Object.defineProperties(Jt,($t[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),$t))}function Nt(o){Jt.call(this,o)}dt(Nt,Jt);function Tt(){return[1,bt,2,j,3,Rt,4,Rt]}function Et(o){Jt.call(this,o,-1,ae)}dt(Et,Jt),Et.prototype.addClassification=function(o,d){return te(this,1,Nt,o,d),this};function Dt(){return[1,Ut,Nt,Tt]}var ae=[1];function pe(o){Jt.call(this,o)}dt(pe,Jt);function ge(){return[1,j,2,j,3,j,4,j,5,j]}function Ne(o){Jt.call(this,o,-1,y)}dt(Ne,Jt);function h(){return[1,Ut,pe,ge]}var y=[1];function G(o){Jt.call(this,o)}dt(G,Jt);function H(){return[1,j,2,j,3,j,4,j,5,j,6,rt]}var K=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(J(K),J(_),J(M),J(q),J(ct),J(s));function R(o,d,g){if(g=o.createShader(g===0?o.VERTEX_SHADER:o.FRAGMENT_SHADER),o.shaderSource(g,d),o.compileShader(g),!o.getShaderParameter(g,o.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
54
54
|
|
|
55
|
-
`+o.getShaderInfoLog(g));return g}function
|
|
55
|
+
`+o.getShaderInfoLog(g));return g}function w(o){return Le(o,Nt,1).map(function(d){return{index:se(d,1),ga:oe(d,2),label:fe(d,3)!=null?tt(d,3):void 0,displayName:fe(d,4)!=null?tt(d,4):void 0}})}function N(o){return{x:oe(o,1),y:oe(o,2),z:oe(o,3),visibility:fe(o,4)!=null?oe(o,4):void 0}}function A(o,d){this.h=o,this.g=d,this.l=0}function B(o,d,g){return nt(o,d),typeof o.g.canvas.transferToImageBitmap=="function"?Promise.resolve(o.g.canvas.transferToImageBitmap()):g?Promise.resolve(o.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(o.g.canvas):(o.i===void 0&&(o.i=document.createElement("canvas")),new Promise(function(e){o.i.height=o.g.canvas.height,o.i.width=o.g.canvas.width,o.i.getContext("2d",{}).drawImage(o.g.canvas,0,0,o.g.canvas.width,o.g.canvas.height),e(o.i)}))}function nt(o,d){var g=o.g;if(o.o===void 0){var e=R(g,`
|
|
56
56
|
attribute vec2 aVertex;
|
|
57
57
|
attribute vec2 aTex;
|
|
58
58
|
varying vec2 vTex;
|
|
@@ -67,9 +67,9 @@
|
|
|
67
67
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
68
68
|
}`,1),m=g.createProgram();if(g.attachShader(m,e),g.attachShader(m,u),g.linkProgram(m),!g.getProgramParameter(m,g.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
69
69
|
|
|
70
|
-
`+g.getProgramInfoLog(m));e=o.o=m,g.useProgram(e),u=g.getUniformLocation(e,"sampler0"),o.j={K:g.getAttribLocation(e,"aVertex"),J:g.getAttribLocation(e,"aTex"),ma:u},o.u=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.enableVertexAttribArray(o.j.K),g.vertexAttribPointer(o.j.K,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),o.s=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.enableVertexAttribArray(o.j.J),g.vertexAttribPointer(o.j.J,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),g.uniform1i(u,0)}e=o.j,g.useProgram(o.o),g.canvas.width=d.width,g.canvas.height=d.height,g.viewport(0,0,d.width,d.height),g.activeTexture(g.TEXTURE0),o.h.bindTexture2d(d.glName),g.enableVertexAttribArray(e.K),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.vertexAttribPointer(e.K,2,g.FLOAT,!1,0,0),g.enableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.vertexAttribPointer(e.J,2,g.FLOAT,!1,0,0),g.bindFramebuffer(g.DRAW_FRAMEBUFFER?g.DRAW_FRAMEBUFFER:g.FRAMEBUFFER,null),g.clearColor(0,0,0,0),g.clear(g.COLOR_BUFFER_BIT),g.colorMask(!0,!0,!0,!0),g.drawArrays(g.TRIANGLE_FAN,0,4),g.disableVertexAttribArray(e.K),g.disableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,null),o.h.bindTexture2d(0)}function $(o){this.g=o}var yt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Xt(o,d){return d+o}function Kt(o,d){window[o]=d}function xt(o){var d=document.createElement("script");return d.setAttribute("src",o),d.setAttribute("crossorigin","anonymous"),new Promise(function(g){d.addEventListener("load",function(){g()},!1),d.addEventListener("error",function(){g()},!1),document.body.appendChild(d)})}function ht(){return Zt(function(o){switch(o.g){case 1:return o.o=2,P(o,WebAssembly.instantiate(yt),4);case 4:o.g=3,o.o=0;break;case 2:return o.o=0,o.j=null,o.return(!1);case 3:return o.return(!0)}})}function Wt(o){if(this.g=o,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.Z=!0,this.D=Promise.resolve(),this.Y="",this.C={},this.locateFile=o&&o.locateFile||Xt,typeof window=="object")var d=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")d=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.$=d,o.options){d=Y(Object.keys(o.options));for(var g=d.next();!g.done;g=d.next()){g=g.value;var e=o.options[g].default;e!==void 0&&(this.j[g]=typeof e=="function"?e():e)}}}i=Wt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function It(o){var d,g,e,u,m,t,c,a,b,S,F;return Zt(function(L){switch(L.g){case 1:return o.Z?(d=o.g.files===void 0?[]:typeof o.g.files=="function"?o.g.files(o.j):o.g.files,P(L,ht(),2)):L.return();case 2:if(g=L.h,typeof window=="object")return Kt("createMediapipeSolutionsWasm",{locateFile:o.locateFile}),Kt("createMediapipeSolutionsPackedAssets",{locateFile:o.locateFile}),t=d.filter(function(U){return U.data!==void 0}),c=d.filter(function(U){return U.data===void 0}),a=Promise.all(t.map(function(U){var j=l(o,U.url);if(U.path!==void 0){var Q=U.path;j=j.then(function(D){return o.overrideFile(Q,D),Promise.resolve(D)})}return j})),b=Promise.all(c.map(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g?xt(o.locateFile(U.url,o.$)):Promise.resolve()})).then(function(){var U,j,Q;return Zt(function(D){if(D.g==1)return U=window.createMediapipeSolutionsWasm,j=window.createMediapipeSolutionsPackedAssets,Q=o,P(D,U(j),2);Q.h=D.h,D.g=0})}),S=function(){return Zt(function(U){return o.g.graph&&o.g.graph.url?U=P(U,l(o,o.g.graph.url),0):(U.g=0,U=void 0),U})}(),P(L,Promise.all([b,a,S]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return e=d.filter(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g}).map(function(U){return o.locateFile(U.url,o.$)}),importScripts.apply(null,N(e)),u=o,P(L,createMediapipeSolutionsWasm(Module),6);case 6:u.h=L.h,o.l=new OffscreenCanvas(1,1),o.h.canvas=o.l,m=o.h.GL.createContext(o.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),o.h.GL.makeContextCurrent(m),L.g=4;break;case 7:if(o.l=document.createElement("canvas"),F=o.l.getContext("webgl2",{}),!F&&(F=o.l.getContext("webgl",{}),!F))return alert("Failed to create WebGL canvas context when passing video frame."),L.return();o.G=F,o.h.canvas=o.l,o.h.createContext(o.l,!0,!0,{});case 4:o.i=new o.h.SolutionWasm,o.Z=!1,L.g=0}})}function Tt(o){var d,g,e,u,m,t,c,a;return Zt(function(b){if(b.g==1){if(o.g.graph&&o.g.graph.url&&o.Y===o.g.graph.url)return b.return();if(o.s=!0,!o.g.graph||!o.g.graph.url){b.g=2;return}return o.Y=o.g.graph.url,P(b,l(o,o.g.graph.url),3)}for(b.g!=2&&(d=b.h,o.i.loadGraph(d)),g=Y(Object.keys(o.C)),e=g.next();!e.done;e=g.next())u=e.value,o.i.overrideFile(u,o.C[u]);if(o.C={},o.g.listeners)for(m=Y(o.g.listeners),t=m.next();!t.done;t=m.next())c=t.value,w(o,c);a=o.j,o.j={},o.setOptions(a),b.g=0})}i.reset=function(){var o=this;return Zt(function(d){o.i&&(o.i.reset(),o.o={},o.u={}),d.g=0})},i.setOptions=function(o,d){var g=this;if(d=d||this.g.options){for(var e=[],u=[],m={},t=Y(Object.keys(o)),c=t.next();!c.done;m={R:m.R,S:m.S},c=t.next()){var a=c.value;a in this.j&&this.j[a]===o[a]||(this.j[a]=o[a],c=d[a],c!==void 0&&(c.onChange&&(m.R=c.onChange,m.S=o[a],e.push(function(b){return function(){var S;return Zt(function(F){if(F.g==1)return P(F,b.R(b.S),2);S=F.h,S===!0&&(g.s=!0),F.g=0})}}(m))),c.graphOptionXref&&(a={valueNumber:c.type===1?o[a]:0,valueBoolean:c.type===0?o[a]:!1,valueString:c.type===2?o[a]:""},c=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),c.graphOptionXref),a),u.push(c))))}(e.length!==0||u.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(u),this.A=(this.A===void 0?[]:this.A).concat(e))}};function Ct(o){var d,g,e,u,m,t,c;return Zt(function(a){switch(a.g){case 1:if(!o.s)return a.return();if(!o.A){a.g=2;break}d=Y(o.A),g=d.next();case 3:if(g.done){a.g=5;break}return e=g.value,P(a,e(),4);case 4:g=d.next(),a.g=3;break;case 5:o.A=void 0;case 2:if(o.B){for(u=new o.h.GraphOptionChangeRequestList,m=Y(o.B),t=m.next();!t.done;t=m.next())c=t.value,u.push_back(c);o.i.changeOptions(u),u.delete(),o.B=void 0}o.s=!1,a.g=0}})}i.initialize=function(){var o=this;return Zt(function(d){return d.g==1?P(d,It(o),2):d.g!=3?P(d,Tt(o),3):P(d,Ct(o),0)})};function l(o,d){var g,e;return Zt(function(u){return d in o.H?u.return(o.H[d]):(g=o.locateFile(d,""),e=fetch(g).then(function(m){return m.arrayBuffer()}),o.H[d]=e,u.return(e))})}i.overrideFile=function(o,d){this.i?this.i.overrideFile(o,d):this.C[o]=d},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(o,d){var g=this,e,u,m,t,c,a,b,S,F;return Zt(function(L){switch(L.g){case 1:return g.g.inputs?(e=1e3*(d==null?performance.now():d),P(L,g.D,2)):L.return();case 2:return P(L,g.initialize(),3);case 3:for(u=new g.h.PacketDataList,m=Y(Object.keys(o)),t=m.next();!t.done;t=m.next())if(c=t.value,a=g.g.inputs[c]){t:{var U=o[c];switch(a.type){case"video":var j=g.o[a.stream];if(j||(j=new A(g.h,g.G),g.o[a.stream]=j),j.l===0&&(j.l=j.h.createTexture()),typeof HTMLVideoElement<"u"&&U instanceof HTMLVideoElement)var Q=U.videoWidth,D=U.videoHeight;else typeof HTMLImageElement<"u"&&U instanceof HTMLImageElement?(Q=U.naturalWidth,D=U.naturalHeight):(Q=U.width,D=U.height);D={glName:j.l,width:Q,height:D},Q=j.g,Q.canvas.width=D.width,Q.canvas.height=D.height,Q.activeTexture(Q.TEXTURE0),j.h.bindTexture2d(j.l),Q.texImage2D(Q.TEXTURE_2D,0,Q.RGBA,Q.RGBA,Q.UNSIGNED_BYTE,U),j.h.bindTexture2d(0),j=D;break t;case"detections":for(j=g.o[a.stream],j||(j=new $(g.h),g.o[a.stream]=j),j.data||(j.data=new j.g.DetectionListData),j.data.reset(U.length),D=0;D<U.length;++D){Q=U[D];var st=j.data,ft=st.setBoundingBox,mt=D,Gt=Q.boundingBox,vt=new G;if(Lt(vt,1,Gt.xCenter),Lt(vt,2,Gt.yCenter),Lt(vt,3,Gt.height),Lt(vt,4,Gt.width),Lt(vt,5,Gt.rotation),Lt(vt,6,Gt.rectId),Gt=O(vt,H),ft.call(st,mt,Gt),Q.landmarks)for(st=0;st<Q.landmarks.length;++st){vt=Q.landmarks[st];var At=!!vt.visibility;ft=j.data,mt=ft.addNormalizedLandmark,Gt=D,vt=Object.assign(Object.assign({},vt),{visibility:At?vt.visibility:0}),At=new pe,Lt(At,1,vt.x),Lt(At,2,vt.y),Lt(At,3,vt.z),vt.visibility&&Lt(At,4,vt.visibility),vt=O(At,ge),mt.call(ft,Gt,vt)}if(Q.V)for(st=0;st<Q.V.length;++st)ft=j.data,mt=ft.addClassification,Gt=D,vt=Q.V[st],At=new Jt,Lt(At,2,vt.ga),vt.index&&Lt(At,1,vt.index),vt.label&&Lt(At,3,vt.label),vt.displayName&&Lt(At,4,vt.displayName),vt=O(At,Yt),mt.call(ft,Gt,vt)}j=j.data;break t;default:j={}}}switch(b=j,S=a.stream,a.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},b),{stream:S,timestamp:e}));break;case"detections":F=b,F.stream=S,F.timestamp=e,u.pushDetectionList(F);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return g.i.send(u),P(L,g.D,4);case 4:u.delete(),L.g=0}})};function v(o,d,g){var e,u,m,t,c,a,b,S,F,L,U,j,Q,D;return Zt(function(st){switch(st.g){case 1:if(!g)return st.return(d);for(e={},u=0,m=Y(Object.keys(g)),t=m.next();!t.done;t=m.next())c=t.value,a=g[c],typeof a!="string"&&a.type==="texture"&&d[a.stream]!==void 0&&++u;1<u&&(o.I=!1),b=Y(Object.keys(g)),t=b.next();case 2:if(t.done){st.g=4;break}if(S=t.value,F=g[S],typeof F=="string")return Q=e,D=S,P(st,x(o,S,d[F]),14);if(L=d[F.stream],F.type==="detection_list"){if(L){for(var ft=L.getRectList(),mt=L.getLandmarksList(),Gt=L.getClassificationsList(),vt=[],At=0;At<ft.size();++At){var le=V(ft.get(At),G,H);le={boundingBox:{xCenter:oe(le,1),yCenter:oe(le,2),height:oe(le,3),width:oe(le,4),rotation:oe(le,5,0),rectId:se(le,6)},landmarks:Fe(V(mt.get(At),Je,h),pe,1).map(J),V:T(V(Gt.get(At),Et,Dt))},vt.push(le)}ft=vt}else ft=[];e[S]=ft,st.g=7;break}if(F.type==="proto_list"){if(L){for(ft=Array(L.size()),mt=0;mt<L.size();mt++)ft[mt]=L.get(mt);L.delete()}else ft=[];e[S]=ft,st.g=7;break}if(L===void 0){st.g=3;break}if(F.type==="float_list"){e[S]=L,st.g=7;break}if(F.type==="proto"){e[S]=L,st.g=7;break}if(F.type!=="texture")throw Error("Unknown output config type: '"+F.type+"'");return U=o.u[S],U||(U=new A(o.h,o.G),o.u[S]=U),P(st,B(U,L,o.I),13);case 13:j=st.h,e[S]=j;case 7:F.transform&&e[S]&&(e[S]=F.transform(e[S])),st.g=3;break;case 14:Q[D]=st.h;case 3:t=b.next(),st.g=2;break;case 4:return st.return(e)}})}function x(o,d,g){var e;return Zt(function(u){return typeof g=="number"||g instanceof Uint8Array||g instanceof o.h.Uint8BlobList?u.return(g):g instanceof o.h.Texture2dDataOut?(e=o.u[d],e||(e=new A(o.h,o.G),o.u[d]=e),u.return(B(e,g,o.I))):u.return(void 0)})}function w(o,d){for(var g=d.name||"$",e=[].concat(N(d.wants)),u=new o.h.StringList,m=Y(d.wants),t=m.next();!t.done;t=m.next())u.push_back(t.value);m=o.h.PacketListener.implement({onResults:function(c){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=c.get(b);var S=o.listeners[g];S&&(o.D=v(o,a,d.outs).then(function(F){F=S(F);for(var L=0;L<d.wants.length;++L){var U=a[e[L]];typeof U=="object"&&U.hasOwnProperty&&U.hasOwnProperty("delete")&&U.delete()}F&&(o.D=F)}))}}),o.i.attachMultiListener(u,m),u.delete()}i.onResults=function(o,d){this.listeners[d||"$"]=o},Ht("Solution",Wt),Ht("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function k(o){var d=this;o=o||{};var g={url:"face_detection_short.binarypb"},e={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Wt({locateFile:o.locateFile,files:[{data:!0,url:"face_detection_short.binarypb"},{data:!0,url:"face_detection_short_range.tflite"},{simd:!0,url:"face_detection_solution_simd_wasm_bin.js"},{simd:!1,url:"face_detection_solution_wasm_bin.js"}],graph:g,listeners:[{wants:["detections","image_transformed"],outs:{image:"image_transformed",detections:{type:"detection_list",stream:"detections"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},model:{type:0,onChange:function(u){var m,t,c,a,b,S;return Zt(function(F){switch(F.g){case 1:m=u==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=Y(m),c=t.next();case 2:if(c.done){F.g=4;break}return a=c.value,b="third_party/mediapipe/modules/face_detection/"+a,P(F,l(d.g,a),5);case 5:S=F.h,d.g.overrideFile(b,S),c=t.next(),F.g=2;break;case 4:return g.url=u==="short"?"face_detection_short.binarypb":"face_detection_full.binarypb",e.graphOptionXref.calculatorName=u==="short"?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",F.return(!0)}})}},minDetectionConfidence:e}})}i=k.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(o){this.g.onResults(o)},i.initialize=function(){var o=this;return Zt(function(d){return P(d,o.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(o){var d=this;return Zt(function(g){return P(g,d.g.send(o),0)})},i.setOptions=function(o){this.g.setOptions(o)},Ht("FaceDetection",k),Ht("FACEDETECTION_LIPS",K),Ht("FACEDETECTION_LEFT_EYE",_),Ht("FACEDETECTION_LEFT_EYEBROW",M),Ht("FACEDETECTION_RIGHT_EYE",q),Ht("FACEDETECTION_RIGHT_EYEBROW",ct),Ht("FACEDETECTION_FACE_OVAL",s),Ht("FACEDETECTION_CONTOURS",X),Ht("FACEDETECTION_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ht("VERSION","0.4.1646425229")}).call(Xi);const Wi={};(function(){var i;function n(h){var y=0;return function(){return y<h.length?{done:!1,value:h[y++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(h,y,G){return h==Array.prototype||h==Object.prototype||(h[y]=G.value),h};function f(h){h=[typeof globalThis=="object"&&globalThis,h,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var y=0;y<h.length;++y){var G=h[y];if(G&&G.Math==Math)return G}throw Error("Cannot find global object")}var Z=f(this);function I(h,y){if(y)t:{var G=Z;h=h.split(".");for(var H=0;H<h.length-1;H++){var K=h[H];if(!(K in G))break t;G=G[K]}h=h[h.length-1],H=G[h],y=y(H),y!=H&&y!=null&&r(G,h,{configurable:!0,writable:!0,value:y})}}I("Symbol",function(h){function y(_){if(this instanceof y)throw new TypeError("Symbol is not a constructor");return new G(H+(_||"")+"_"+K++,_)}function G(_,M){this.g=_,r(this,"description",{configurable:!0,writable:!0,value:M})}if(h)return h;G.prototype.toString=function(){return this.g};var H="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",K=0;return y}),I("Symbol.iterator",function(h){if(h)return h;h=Symbol("Symbol.iterator");for(var y="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),G=0;G<y.length;G++){var H=Z[y[G]];typeof H=="function"&&typeof H.prototype[h]!="function"&&r(H.prototype,h,{configurable:!0,writable:!0,value:function(){return C(n(this))}})}return h});function C(h){return h={next:h},h[Symbol.iterator]=function(){return this},h}function Y(h){var y=typeof Symbol<"u"&&Symbol.iterator&&h[Symbol.iterator];return y?y.call(h):{next:n(h)}}function N(h){if(!(h instanceof Array)){h=Y(h);for(var y,G=[];!(y=h.next()).done;)G.push(y.value);h=G}return h}var et=typeof Object.create=="function"?Object.create:function(h){function y(){}return y.prototype=h,new y},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var wt={a:!0},Ft={};try{Ft.__proto__=wt,pt=Ft.a;break t}catch{}pt=!1}lt=pt?function(h,y){if(h.__proto__=y,h.__proto__!==y)throw new TypeError(h+" is not extensible");return h}:null}var at=lt;function dt(h,y){if(h.prototype=et(y.prototype),h.prototype.constructor=h,at)at(h,y);else for(var G in y)if(G!="prototype")if(Object.defineProperties){var H=Object.getOwnPropertyDescriptor(y,G);H&&Object.defineProperty(h,G,H)}else h[G]=y[G];h.ea=y.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Bt.prototype.o=function(h){this.h=h};function ee(h,y){h.j={U:y,V:!0},h.g=h.m||h.s}Bt.prototype.return=function(h){this.j={return:h},this.g=this.s};function P(h,y,G){return h.g=G,{value:y}}function De(h){this.g=new Bt,this.h=h}function je(h,y){kt(h.g);var G=h.g.i;return G?We(h,"return"in G?G.return:function(H){return{value:H,done:!0}},y,h.g.return):(h.g.return(y),jt(h))}function We(h,y,G,H){try{var K=y.call(h.g.i,G);if(!(K instanceof Object))throw new TypeError("Iterator result "+K+" is not an object");if(!K.done)return h.g.l=!1,K;var _=K.value}catch(M){return h.g.i=null,ee(h.g,M),jt(h)}return h.g.i=null,H.call(h.g,_),jt(h)}function jt(h){for(;h.g.g;)try{var y=h.h(h.g);if(y)return h.g.l=!1,{value:y.value,done:!1}}catch(G){h.g.h=void 0,ee(h.g,G)}if(h.g.l=!1,h.g.j){if(y=h.g.j,h.g.j=null,y.V)throw y.U;return{value:y.return,done:!0}}return{value:void 0,done:!0}}function Hn(h){this.next=function(y){return kt(h.g),h.g.i?y=We(h,h.g.i.next,y,h.g.o):(h.g.o(y),y=jt(h)),y},this.throw=function(y){return kt(h.g),h.g.i?y=We(h,h.g.i.throw,y,h.g.o):(ee(h.g,y),y=jt(h)),y},this.return=function(y){return je(h,y)},this[Symbol.iterator]=function(){return this}}function ne(h,y){return y=new Hn(new De(y)),at&&h.prototype&&at(y,h.prototype),y}function Zt(h,y){h instanceof String&&(h+="");var G=0,H=!1,K={next:function(){if(!H&&G<h.length){var _=G++;return{value:y(_,h[_]),done:!1}}return H=!0,{done:!0,value:void 0}}};return K[Symbol.iterator]=function(){return K},K}var $e=typeof Object.assign=="function"?Object.assign:function(h,y){for(var G=1;G<arguments.length;G++){var H=arguments[G];if(H)for(var K in H)Object.prototype.hasOwnProperty.call(H,K)&&(h[K]=H[K])}return h};I("Object.assign",function(h){return h||$e}),I("Promise",function(h){function y(M){this.h=0,this.i=void 0,this.g=[],this.o=!1;var q=this.j();try{M(q.resolve,q.reject)}catch(ct){q.reject(ct)}}function G(){this.g=null}function H(M){return M instanceof y?M:new y(function(q){q(M)})}if(h)return h;G.prototype.h=function(M){if(this.g==null){this.g=[];var q=this;this.i(function(){q.l()})}this.g.push(M)};var K=Z.setTimeout;G.prototype.i=function(M){K(M,0)},G.prototype.l=function(){for(;this.g&&this.g.length;){var M=this.g;this.g=[];for(var q=0;q<M.length;++q){var ct=M[q];M[q]=null;try{ct()}catch(s){this.j(s)}}}this.g=null},G.prototype.j=function(M){this.i(function(){throw M})},y.prototype.j=function(){function M(s){return function(X){ct||(ct=!0,s.call(q,X))}}var q=this,ct=!1;return{resolve:M(this.C),reject:M(this.l)}},y.prototype.C=function(M){if(M===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(M instanceof y)this.F(M);else{t:switch(typeof M){case"object":var q=M!=null;break t;case"function":q=!0;break t;default:q=!1}q?this.u(M):this.m(M)}},y.prototype.u=function(M){var q=void 0;try{q=M.then}catch(ct){this.l(ct);return}typeof q=="function"?this.G(q,M):this.m(M)},y.prototype.l=function(M){this.s(2,M)},y.prototype.m=function(M){this.s(1,M)},y.prototype.s=function(M,q){if(this.h!=0)throw Error("Cannot settle("+M+", "+q+"): Promise already settled in state"+this.h);this.h=M,this.i=q,this.h===2&&this.D(),this.A()},y.prototype.D=function(){var M=this;K(function(){if(M.B()){var q=Z.console;typeof q<"u"&&q.error(M.i)}},1)},y.prototype.B=function(){if(this.o)return!1;var M=Z.CustomEvent,q=Z.Event,ct=Z.dispatchEvent;return typeof ct>"u"?!0:(typeof M=="function"?M=new M("unhandledrejection",{cancelable:!0}):typeof q=="function"?M=new q("unhandledrejection",{cancelable:!0}):(M=Z.document.createEvent("CustomEvent"),M.initCustomEvent("unhandledrejection",!1,!0,M)),M.promise=this,M.reason=this.i,ct(M))},y.prototype.A=function(){if(this.g!=null){for(var M=0;M<this.g.length;++M)_.h(this.g[M]);this.g=null}};var _=new G;return y.prototype.F=function(M){var q=this.j();M.J(q.resolve,q.reject)},y.prototype.G=function(M,q){var ct=this.j();try{M.call(q,ct.resolve,ct.reject)}catch(s){ct.reject(s)}},y.prototype.then=function(M,q){function ct(T,J){return typeof T=="function"?function(A){try{s(T(A))}catch(B){X(B)}}:J}var s,X,R=new y(function(T,J){s=T,X=J});return this.J(ct(M,s),ct(q,X)),R},y.prototype.catch=function(M){return this.then(void 0,M)},y.prototype.J=function(M,q){function ct(){switch(s.h){case 1:M(s.i);break;case 2:q(s.i);break;default:throw Error("Unexpected state: "+s.h)}}var s=this;this.g==null?_.h(ct):this.g.push(ct),this.o=!0},y.resolve=H,y.reject=function(M){return new y(function(q,ct){ct(M)})},y.race=function(M){return new y(function(q,ct){for(var s=Y(M),X=s.next();!X.done;X=s.next())H(X.value).J(q,ct)})},y.all=function(M){var q=Y(M),ct=q.next();return ct.done?H([]):new y(function(s,X){function R(A){return function(B){T[A]=B,J--,J==0&&s(T)}}var T=[],J=0;do T.push(void 0),J++,H(ct.value).J(R(T.length-1),X),ct=q.next();while(!ct.done)})},y}),I("Object.is",function(h){return h||function(y,G){return y===G?y!==0||1/y===1/G:y!==y&&G!==G}}),I("Array.prototype.includes",function(h){return h||function(y,G){var H=this;H instanceof String&&(H=String(H));var K=H.length;for(G=G||0,0>G&&(G=Math.max(G+K,0));G<K;G++){var _=H[G];if(_===y||Object.is(_,y))return!0}return!1}}),I("String.prototype.includes",function(h){return h||function(y,G){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(y instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(y,G||0)!==-1}}),I("Array.prototype.keys",function(h){return h||function(){return Zt(this,function(y){return y})}});var An=this||self;function Re(h,y){h=h.split(".");var G=An;h[0]in G||typeof G.execScript>"u"||G.execScript("var "+h[0]);for(var H;h.length&&(H=h.shift());)h.length||y===void 0?G[H]&&G[H]!==Object.prototype[H]?G=G[H]:G=G[H]={}:G[H]=y}function Ht(h,y){return y=String.fromCharCode.apply(null,y),h==null?y:h+y}var Ye,sn=typeof TextDecoder<"u",Gn,Fn=typeof TextEncoder<"u";function Rn(h){if(Fn)h=(Gn||(Gn=new TextEncoder)).encode(h);else{var y=void 0;y=y===void 0?!1:y;for(var G=0,H=new Uint8Array(3*h.length),K=0;K<h.length;K++){var _=h.charCodeAt(K);if(128>_)H[G++]=_;else{if(2048>_)H[G++]=_>>6|192;else{if(55296<=_&&57343>=_){if(56319>=_&&K<h.length){var M=h.charCodeAt(++K);if(56320<=M&&57343>=M){_=1024*(_-55296)+M-56320+65536,H[G++]=_>>18|240,H[G++]=_>>12&63|128,H[G++]=_>>6&63|128,H[G++]=_&63|128;continue}else K--}if(y)throw Error("Found an unpaired surrogate");_=65533}H[G++]=_>>12|224,H[G++]=_>>6&63|128}H[G++]=_&63|128}}h=H.subarray(0,G)}return h}var Nn={},dn=null;function pn(h,y){y===void 0&&(y=0),ze(),y=Nn[y];for(var G=Array(Math.floor(h.length/3)),H=y[64]||"",K=0,_=0;K<h.length-2;K+=3){var M=h[K],q=h[K+1],ct=h[K+2],s=y[M>>2];M=y[(M&3)<<4|q>>4],q=y[(q&15)<<2|ct>>6],ct=y[ct&63],G[_++]=s+M+q+ct}switch(s=0,ct=H,h.length-K){case 2:s=h[K+1],ct=y[(s&15)<<2]||H;case 1:h=h[K],G[_]=y[h>>2]+y[(h&3)<<4|s>>4]+ct+H}return G.join("")}function kn(h){var y=h.length,G=3*y/4;G%3?G=Math.floor(G):"=.".indexOf(h[y-1])!=-1&&(G="=.".indexOf(h[y-2])!=-1?G-2:G-1);var H=new Uint8Array(G),K=0;return Cn(h,function(_){H[K++]=_}),H.subarray(0,K)}function Cn(h,y){function G(ct){for(;H<h.length;){var s=h.charAt(H++),X=dn[s];if(X!=null)return X;if(!/^[\s\xa0]*$/.test(s))throw Error("Unknown base64 encoding at char: "+s)}return ct}ze();for(var H=0;;){var K=G(-1),_=G(0),M=G(64),q=G(64);if(q===64&&K===-1)break;y(K<<2|_>>4),M!=64&&(y(_<<4&240|M>>2),q!=64&&y(M<<6&192|q))}}function ze(){if(!dn){dn={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),y=["+/=","+/","-_=","-_.","-_"],G=0;5>G;G++){var H=h.concat(y[G].split(""));Nn[G]=H;for(var K=0;K<H.length;K++){var _=H[K];dn[_]===void 0&&(dn[_]=K)}}}}var Me=typeof Uint8Array.prototype.slice=="function",xn;function Xn(h,y,G){return y===G?xn||(xn=new Uint8Array(0)):Me?h.slice(y,G):new Uint8Array(h.subarray(y,G))}var he=0,Se=0;function Oe(h,y){y=y===void 0?{}:y,y=y.v===void 0?!1:y.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=y,h&&re(this,h)}function re(h,y){y=y.constructor===Uint8Array?y:y.constructor===ArrayBuffer?new Uint8Array(y):y.constructor===Array?new Uint8Array(y):y.constructor===String?kn(y):y instanceof Uint8Array?new Uint8Array(y.buffer,y.byteOffset,y.byteLength):new Uint8Array(0),h.h=y,h.l=0,h.j=h.h.length,h.g=h.l}Oe.prototype.reset=function(){this.g=this.l};function Ve(h){for(var y=128,G=0,H=0,K=0;4>K&&128<=y;K++)y=h.h[h.g++],G|=(y&127)<<7*K;if(128<=y&&(y=h.h[h.g++],G|=(y&127)<<28,H|=(y&127)>>4),128<=y)for(K=0;5>K&&128<=y;K++)y=h.h[h.g++],H|=(y&127)<<7*K+3;if(128>y)return h=G>>>0,y=H>>>0,(H=y&2147483648)&&(h=~h+1>>>0,y=~y>>>0,h==0&&(y=y+1>>>0)),h=4294967296*y+(h>>>0),H?-h:h;h.m=!0}Oe.prototype.i=function(){var h=this.h,y=h[this.g],G=y&127;return 128>y?(this.g+=1,G):(y=h[this.g+1],G|=(y&127)<<7,128>y?(this.g+=2,G):(y=h[this.g+2],G|=(y&127)<<14,128>y?(this.g+=3,G):(y=h[this.g+3],G|=(y&127)<<21,128>y?(this.g+=4,G):(y=h[this.g+4],G|=(y&15)<<28,128>y?(this.g+=5,G>>>0):(this.g+=5,128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&this.g++,G)))))},Oe.prototype.o=function(){var h=this.h[this.g],y=this.h[this.g+1],G=this.h[this.g+2],H=this.h[this.g+3];return this.g+=4,G=(h<<0|y<<8|G<<16|H<<24)>>>0,h=2*(G>>31)+1,y=G>>>23&255,G&=8388607,y==255?G?NaN:1/0*h:y==0?h*Math.pow(2,-149)*G:h*Math.pow(2,y-150)*(G+Math.pow(2,23))};var ln=[];function Be(){this.g=new Uint8Array(64),this.h=0}Be.prototype.push=function(h){if(!(this.h+1<this.g.length)){var y=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(y)}this.g[this.h++]=h},Be.prototype.length=function(){return this.h},Be.prototype.end=function(){var h=this.g,y=this.h;return this.h=0,Xn(h,0,y)};function Qt(h,y){for(;127<y;)h.push(y&127|128),y>>>=7;h.push(y)}function Ze(h){var y={},G=y.N===void 0?!1:y.N;this.o={v:y.v===void 0?!1:y.v},this.N=G,y=this.o,ln.length?(G=ln.pop(),y&&(G.v=y.v),h&&re(G,h),h=G):h=new Oe(h,y),this.g=h,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ze.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Le(h){var y=h.g;if((y=y.g==y.j)||(y=h.j)||(y=h.g,y=y.m||0>y.g||y.g>y.j),y)return!1;h.m=h.g.g,y=h.g.i();var G=y&7;return G!=0&&G!=5&&G!=1&&G!=2&&G!=3&&G!=4?(h.j=!0,!1):(h.i=y,h.l=y>>>3,h.h=G,!0)}function Mt(h){switch(h.h){case 0:if(h.h!=0)Mt(h);else{for(h=h.g;h.h[h.g]&128;)h.g++;h.g++}break;case 1:h.h!=1?Mt(h):(h=h.g,h.g+=8);break;case 2:if(h.h!=2)Mt(h);else{var y=h.g.i();h=h.g,h.g+=y}break;case 5:h.h!=5?Mt(h):(h=h.g,h.g+=4);break;case 3:y=h.l;do{if(!Le(h)){h.j=!0;break}if(h.h==4){h.l!=y&&(h.j=!0);break}Mt(h)}while(1);break;default:h.j=!0}}function xe(h,y,G){var H=h.g.j,K=h.g.i(),_=h.g.g+K;if(h.g.j=_,G(y,h),G=_-h.g.g,G!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+K+" bytes, instead read "+(K-G)+" bytes, either the data ended unexpectedly or the message misreported its own length");return h.g.g=_,h.g.j=H,y}function zt(h){return h.g.o()}function ye(h){var y=h.g.i();h=h.g;var G=h.g;h.g+=y,h=h.h;var H;if(sn)(H=Ye)||(H=Ye=new TextDecoder("utf-8",{fatal:!1})),H=H.decode(h.subarray(G,G+y));else{y=G+y;for(var K=[],_=null,M,q,ct;G<y;)M=h[G++],128>M?K.push(M):224>M?G>=y?K.push(65533):(q=h[G++],194>M||(q&192)!==128?(G--,K.push(65533)):K.push((M&31)<<6|q&63)):240>M?G>=y-1?K.push(65533):(q=h[G++],(q&192)!==128||M===224&&160>q||M===237&&160<=q||((H=h[G++])&192)!==128?(G--,K.push(65533)):K.push((M&15)<<12|(q&63)<<6|H&63)):244>=M?G>=y-2?K.push(65533):(q=h[G++],(q&192)!==128||(M<<28)+(q-144)>>30!==0||((H=h[G++])&192)!==128||((ct=h[G++])&192)!==128?(G--,K.push(65533)):(M=(M&7)<<18|(q&63)<<12|(H&63)<<6|ct&63,M-=65536,K.push((M>>10&1023)+55296,(M&1023)+56320))):K.push(65533),8192<=K.length&&(_=Ht(_,K),K.length=0);H=Ht(_,K)}return H}function we(h,y,G){var H=h.g.i();for(H=h.g.g+H;h.g.g<H;)G.push(y.call(h.g))}function qe(h,y){h.h==2?we(h,Oe.prototype.o,y):y.push(zt(h))}function Xe(){this.h=[],this.i=0,this.g=new Be}function Ot(h,y){y.length!==0&&(h.h.push(y),h.i+=y.length)}function Ae(h){var y=h.i+h.g.length();if(y===0)return new Uint8Array(0);y=new Uint8Array(y);for(var G=h.h,H=G.length,K=0,_=0;_<H;_++){var M=G[_];M.length!==0&&(y.set(M,K),K+=M.length)}return G=h.g,H=G.h,H!==0&&(y.set(G.g.subarray(0,H),K),G.h=0),h.h=[y],y}function Pe(h,y,G){if(G!=null){Qt(h.g,8*y+5),h=h.g;var H=G;H=(G=0>H?1:0)?-H:H,H===0?0<1/H?he=Se=0:(Se=0,he=2147483648):isNaN(H)?(Se=0,he=2147483647):34028234663852886e22<H?(Se=0,he=(G<<31|2139095040)>>>0):11754943508222875e-54>H?(H=Math.round(H/Math.pow(2,-149)),Se=0,he=(G<<31|H)>>>0):(y=Math.floor(Math.log(H)/Math.LN2),H*=Math.pow(2,-y),H=Math.round(8388608*H),16777216<=H&&++y,Se=0,he=(G<<31|y+127<<23|H&8388607)>>>0),G=he,h.push(G>>>0&255),h.push(G>>>8&255),h.push(G>>>16&255),h.push(G>>>24&255)}}var Ie=typeof Uint8Array=="function";function Wn(h,y,G){if(h!=null)return typeof h=="object"?Ie&&h instanceof Uint8Array?G(h):cn(h,y,G):y(h)}function cn(h,y,G){if(Array.isArray(h)){for(var H=Array(h.length),K=0;K<h.length;K++)H[K]=Wn(h[K],y,G);return Array.isArray(h)&&h.W&&ve(H),H}H={};for(K in h)H[K]=Wn(h[K],y,G);return H}function _e(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var un={W:{value:!0,configurable:!0}};function ve(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,un),h}var Te;function Ge(h,y,G){var H=Te;Te=null,h||(h=H),H=this.constructor.ca,h||(h=H?[H]:[]),this.j=H?0:-1,this.m=this.g=null,this.h=h;t:{if(H=this.h.length,h=H-1,H&&(H=this.h[h],!(H===null||typeof H!="object"||Array.isArray(H)||Ie&&H instanceof Uint8Array))){this.l=h-this.j,this.i=H;break t}y!==void 0&&-1<y?(this.l=Math.max(y,h+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(G)for(y=0;y<G.length;y++)h=G[y],h<this.l?(h+=this.j,(H=this.h[h])?ve(H):this.h[h]=ie):(Qe(this),(H=this.i[h])?ve(H):this.i[h]=ie)}var ie=Object.freeze(ve([]));function Qe(h){var y=h.l+h.j;h.h[y]||(h.i=h.h[y]={})}function qt(h,y,G){return y===-1?null:(G===void 0?0:G)||y>=h.l?h.i?h.i[y]:void 0:h.h[y+h.j]}function Pt(h,y){var G=G===void 0?!1:G,H=qt(h,y,G);return H==null&&(H=ie),H===ie&&(H=ve([]),Vt(h,y,H,G)),H}function hn(h){var y=Pt(h,3);if(h.m||(h.m={}),!h.m[3]){for(var G=0;G<y.length;G++)y[G]=+y[G];h.m[3]=!0}return y}function fe(h,y,G){return h=qt(h,y),h==null?G:h}function Lt(h,y,G){return h=qt(h,y),h=h==null?h:+h,h==null?G===void 0?0:G:h}function Vt(h,y,G,H){(H===void 0?0:H)||y>=h.l?(Qe(h),h.i[y]=G):h.h[y+h.j]=G}function oe(h,y,G){if(G===-1)return null;if(h.g||(h.g={}),!h.g[G]){var H=qt(h,G,!1);H&&(h.g[G]=new y(H))}return h.g[G]}function Fe(h,y){h.g||(h.g={});var G=h.g[1];if(!G){var H=Pt(h,1);G=[];for(var K=0;K<H.length;K++)G[K]=new y(H[K]);h.g[1]=G}return G}function te(h,y,G){var H=H===void 0?!1:H;h.g||(h.g={});var K=G&&tt(G);h.g[y]=G,Vt(h,y,K,H)}function se(h,y,G,H){var K=Fe(h,G);y=y||new G,h=Pt(h,1),H!=null?(K.splice(H,0,y),h.splice(H,0,tt(y))):(K.push(y),h.push(tt(y)))}Ge.prototype.toJSON=function(){var h=tt(this);return cn(h,_e,pn)};function tt(h,y){if(h.g)for(var G in h.g){var H=h.g[G];if(Array.isArray(H))for(var K=0;K<H.length;K++)H[K]&&tt(H[K]);else H&&tt(H)}return h.h}Ge.prototype.toString=function(){return tt(this).toString()};function it(h,y){if(h=h.o){Ot(y,y.g.end());for(var G=0;G<h.length;G++)Ot(y,h[G])}}function ut(h,y){if(y.h==4)return!1;var G=y.m;return Mt(y),y.N||(y=Xn(y.g.h,G,y.g.g),(G=h.o)?G.push(y):h.o=[y]),!0}function _t(h){Ge.call(this,h,-1,ue)}dt(_t,Ge),_t.prototype.getRows=function(){return qt(this,1)},_t.prototype.getCols=function(){return qt(this,2)},_t.prototype.getPackedDataList=function(){return hn(this)},_t.prototype.getLayout=function(){return fe(this,4,0)};function de(h,y){for(;Le(y);)switch(y.i){case 8:var G=y.g.i();Vt(h,1,G);break;case 16:G=y.g.i(),Vt(h,2,G);break;case 29:case 26:qe(y,h.getPackedDataList());break;case 32:G=Ve(y.g),Vt(h,4,G);break;default:if(!ut(h,y))return h}return h}var ue=[3];function St(h,y){var G=void 0;return new(G||(G=Promise))(function(H,K){function _(ct){try{q(y.next(ct))}catch(s){K(s)}}function M(ct){try{q(y.throw(ct))}catch(s){K(s)}}function q(ct){ct.done?H(ct.value):new G(function(s){s(ct.value)}).then(_,M)}q((y=y.apply(h,void 0)).next())})}function me(h){Ge.call(this,h)}dt(me,Ge);function He(h,y){for(;Le(y);)switch(y.i){case 8:var G=y.g.i();Vt(h,1,G);break;case 21:G=zt(y),Vt(h,2,G);break;case 26:G=ye(y),Vt(h,3,G);break;case 34:G=ye(y),Vt(h,4,G);break;default:if(!ut(h,y))return h}return h}function tn(h){Ge.call(this,h,-1,en)}dt(tn,Ge),tn.prototype.addClassification=function(h,y){return se(this,h,me,y),this};var en=[1];function fn(h){Ge.call(this,h)}dt(fn,Ge);function bn(h,y){for(;Le(y);)switch(y.i){case 13:var G=zt(y);Vt(h,1,G);break;case 21:G=zt(y),Vt(h,2,G);break;case 29:G=zt(y),Vt(h,3,G);break;case 37:G=zt(y),Vt(h,4,G);break;case 45:G=zt(y),Vt(h,5,G);break;default:if(!ut(h,y))return h}return h}function Ce(h){Ge.call(this,h,-1,jn)}dt(Ce,Ge);function nn(h){t:{var y=new Ce;for(h=new Ze(h);Le(h);)switch(h.i){case 10:var G=xe(h,new fn,bn);se(y,G,fn,void 0);break;default:if(!ut(y,h))break t}}return y}var jn=[1];function rn(h){Ge.call(this,h)}dt(rn,Ge);function Ne(h){Ge.call(this,h,-1,In)}dt(Ne,Ge),Ne.prototype.getVertexType=function(){return fe(this,1,0)},Ne.prototype.getPrimitiveType=function(){return fe(this,2,0)},Ne.prototype.getVertexBufferList=function(){return hn(this)},Ne.prototype.getIndexBufferList=function(){return Pt(this,4)};function gn(h,y){for(;Le(y);)switch(y.i){case 8:var G=Ve(y.g);Vt(h,1,G);break;case 16:G=Ve(y.g),Vt(h,2,G);break;case 29:case 26:qe(y,h.getVertexBufferList());break;case 32:case 34:G=y;var H=h.getIndexBufferList();G.h==2?we(G,Oe.prototype.i,H):H.push(G.g.i());break;default:if(!ut(h,y))return h}return h}var In=[3,4];function Ke(h){Ge.call(this,h)}dt(Ke,Ge),Ke.prototype.getMesh=function(){return oe(this,Ne,1)},Ke.prototype.getPoseTransformMatrix=function(){return oe(this,_t,2)};function En(h){t:{var y=new Ke;for(h=new Ze(h);Le(h);)switch(h.i){case 10:var G=xe(h,new Ne,gn);te(y,1,G);break;case 18:G=xe(h,new _t,de),te(y,2,G);break;default:if(!ut(y,h))break t}}return y}function on(h,y,G){if(G=h.createShader(G===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(G,y),h.compileShader(G),!h.getShaderParameter(G,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
70
|
+
`+g.getProgramInfoLog(m));e=o.o=m,g.useProgram(e),u=g.getUniformLocation(e,"sampler0"),o.j={K:g.getAttribLocation(e,"aVertex"),J:g.getAttribLocation(e,"aTex"),ma:u},o.u=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.enableVertexAttribArray(o.j.K),g.vertexAttribPointer(o.j.K,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),o.s=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.enableVertexAttribArray(o.j.J),g.vertexAttribPointer(o.j.J,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),g.uniform1i(u,0)}e=o.j,g.useProgram(o.o),g.canvas.width=d.width,g.canvas.height=d.height,g.viewport(0,0,d.width,d.height),g.activeTexture(g.TEXTURE0),o.h.bindTexture2d(d.glName),g.enableVertexAttribArray(e.K),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.vertexAttribPointer(e.K,2,g.FLOAT,!1,0,0),g.enableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.vertexAttribPointer(e.J,2,g.FLOAT,!1,0,0),g.bindFramebuffer(g.DRAW_FRAMEBUFFER?g.DRAW_FRAMEBUFFER:g.FRAMEBUFFER,null),g.clearColor(0,0,0,0),g.clear(g.COLOR_BUFFER_BIT),g.colorMask(!0,!0,!0,!0),g.drawArrays(g.TRIANGLE_FAN,0,4),g.disableVertexAttribArray(e.K),g.disableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,null),o.h.bindTexture2d(0)}function $(o){this.g=o}var yt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Xt(o,d){return d+o}function Kt(o,d){window[o]=d}function xt(o){var d=document.createElement("script");return d.setAttribute("src",o),d.setAttribute("crossorigin","anonymous"),new Promise(function(g){d.addEventListener("load",function(){g()},!1),d.addEventListener("error",function(){g()},!1),document.body.appendChild(d)})}function ht(){return Zt(function(o){switch(o.g){case 1:return o.o=2,P(o,WebAssembly.instantiate(yt),4);case 4:o.g=3,o.o=0;break;case 2:return o.o=0,o.j=null,o.return(!1);case 3:return o.return(!0)}})}function Wt(o){if(this.g=o,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.Z=!0,this.D=Promise.resolve(),this.Y="",this.C={},this.locateFile=o&&o.locateFile||Xt,typeof window=="object")var d=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")d=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.$=d,o.options){d=T(Object.keys(o.options));for(var g=d.next();!g.done;g=d.next()){g=g.value;var e=o.options[g].default;e!==void 0&&(this.j[g]=typeof e=="function"?e():e)}}}i=Wt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function It(o){var d,g,e,u,m,t,c,a,b,S,L;return Zt(function(C){switch(C.g){case 1:return o.Z?(d=o.g.files===void 0?[]:typeof o.g.files=="function"?o.g.files(o.j):o.g.files,P(C,ht(),2)):C.return();case 2:if(g=C.h,typeof window=="object")return Kt("createMediapipeSolutionsWasm",{locateFile:o.locateFile}),Kt("createMediapipeSolutionsPackedAssets",{locateFile:o.locateFile}),t=d.filter(function(U){return U.data!==void 0}),c=d.filter(function(U){return U.data===void 0}),a=Promise.all(t.map(function(U){var z=l(o,U.url);if(U.path!==void 0){var Q=U.path;z=z.then(function(D){return o.overrideFile(Q,D),Promise.resolve(D)})}return z})),b=Promise.all(c.map(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g?xt(o.locateFile(U.url,o.$)):Promise.resolve()})).then(function(){var U,z,Q;return Zt(function(D){if(D.g==1)return U=window.createMediapipeSolutionsWasm,z=window.createMediapipeSolutionsPackedAssets,Q=o,P(D,U(z),2);Q.h=D.h,D.g=0})}),S=function(){return Zt(function(U){return o.g.graph&&o.g.graph.url?U=P(U,l(o,o.g.graph.url),0):(U.g=0,U=void 0),U})}(),P(C,Promise.all([b,a,S]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return e=d.filter(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g}).map(function(U){return o.locateFile(U.url,o.$)}),importScripts.apply(null,J(e)),u=o,P(C,createMediapipeSolutionsWasm(Module),6);case 6:u.h=C.h,o.l=new OffscreenCanvas(1,1),o.h.canvas=o.l,m=o.h.GL.createContext(o.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),o.h.GL.makeContextCurrent(m),C.g=4;break;case 7:if(o.l=document.createElement("canvas"),L=o.l.getContext("webgl2",{}),!L&&(L=o.l.getContext("webgl",{}),!L))return alert("Failed to create WebGL canvas context when passing video frame."),C.return();o.G=L,o.h.canvas=o.l,o.h.createContext(o.l,!0,!0,{});case 4:o.i=new o.h.SolutionWasm,o.Z=!1,C.g=0}})}function wt(o){var d,g,e,u,m,t,c,a;return Zt(function(b){if(b.g==1){if(o.g.graph&&o.g.graph.url&&o.Y===o.g.graph.url)return b.return();if(o.s=!0,!o.g.graph||!o.g.graph.url){b.g=2;return}return o.Y=o.g.graph.url,P(b,l(o,o.g.graph.url),3)}for(b.g!=2&&(d=b.h,o.i.loadGraph(d)),g=T(Object.keys(o.C)),e=g.next();!e.done;e=g.next())u=e.value,o.i.overrideFile(u,o.C[u]);if(o.C={},o.g.listeners)for(m=T(o.g.listeners),t=m.next();!t.done;t=m.next())c=t.value,Y(o,c);a=o.j,o.j={},o.setOptions(a),b.g=0})}i.reset=function(){var o=this;return Zt(function(d){o.i&&(o.i.reset(),o.o={},o.u={}),d.g=0})},i.setOptions=function(o,d){var g=this;if(d=d||this.g.options){for(var e=[],u=[],m={},t=T(Object.keys(o)),c=t.next();!c.done;m={R:m.R,S:m.S},c=t.next()){var a=c.value;a in this.j&&this.j[a]===o[a]||(this.j[a]=o[a],c=d[a],c!==void 0&&(c.onChange&&(m.R=c.onChange,m.S=o[a],e.push(function(b){return function(){var S;return Zt(function(L){if(L.g==1)return P(L,b.R(b.S),2);S=L.h,S===!0&&(g.s=!0),L.g=0})}}(m))),c.graphOptionXref&&(a={valueNumber:c.type===1?o[a]:0,valueBoolean:c.type===0?o[a]:!1,valueString:c.type===2?o[a]:""},c=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),c.graphOptionXref),a),u.push(c))))}(e.length!==0||u.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(u),this.A=(this.A===void 0?[]:this.A).concat(e))}};function Ft(o){var d,g,e,u,m,t,c;return Zt(function(a){switch(a.g){case 1:if(!o.s)return a.return();if(!o.A){a.g=2;break}d=T(o.A),g=d.next();case 3:if(g.done){a.g=5;break}return e=g.value,P(a,e(),4);case 4:g=d.next(),a.g=3;break;case 5:o.A=void 0;case 2:if(o.B){for(u=new o.h.GraphOptionChangeRequestList,m=T(o.B),t=m.next();!t.done;t=m.next())c=t.value,u.push_back(c);o.i.changeOptions(u),u.delete(),o.B=void 0}o.s=!1,a.g=0}})}i.initialize=function(){var o=this;return Zt(function(d){return d.g==1?P(d,It(o),2):d.g!=3?P(d,wt(o),3):P(d,Ft(o),0)})};function l(o,d){var g,e;return Zt(function(u){return d in o.H?u.return(o.H[d]):(g=o.locateFile(d,""),e=fetch(g).then(function(m){return m.arrayBuffer()}),o.H[d]=e,u.return(e))})}i.overrideFile=function(o,d){this.i?this.i.overrideFile(o,d):this.C[o]=d},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(o,d){var g=this,e,u,m,t,c,a,b,S,L;return Zt(function(C){switch(C.g){case 1:return g.g.inputs?(e=1e3*(d==null?performance.now():d),P(C,g.D,2)):C.return();case 2:return P(C,g.initialize(),3);case 3:for(u=new g.h.PacketDataList,m=T(Object.keys(o)),t=m.next();!t.done;t=m.next())if(c=t.value,a=g.g.inputs[c]){t:{var U=o[c];switch(a.type){case"video":var z=g.o[a.stream];if(z||(z=new A(g.h,g.G),g.o[a.stream]=z),z.l===0&&(z.l=z.h.createTexture()),typeof HTMLVideoElement<"u"&&U instanceof HTMLVideoElement)var Q=U.videoWidth,D=U.videoHeight;else typeof HTMLImageElement<"u"&&U instanceof HTMLImageElement?(Q=U.naturalWidth,D=U.naturalHeight):(Q=U.width,D=U.height);D={glName:z.l,width:Q,height:D},Q=z.g,Q.canvas.width=D.width,Q.canvas.height=D.height,Q.activeTexture(Q.TEXTURE0),z.h.bindTexture2d(z.l),Q.texImage2D(Q.TEXTURE_2D,0,Q.RGBA,Q.RGBA,Q.UNSIGNED_BYTE,U),z.h.bindTexture2d(0),z=D;break t;case"detections":for(z=g.o[a.stream],z||(z=new $(g.h),g.o[a.stream]=z),z.data||(z.data=new z.g.DetectionListData),z.data.reset(U.length),D=0;D<U.length;++D){Q=U[D];var st=z.data,ft=st.setBoundingBox,mt=D,Gt=Q.boundingBox,vt=new G;if(Ct(vt,1,Gt.xCenter),Ct(vt,2,Gt.yCenter),Ct(vt,3,Gt.height),Ct(vt,4,Gt.width),Ct(vt,5,Gt.rotation),Ct(vt,6,Gt.rectId),Gt=O(vt,H),ft.call(st,mt,Gt),Q.landmarks)for(st=0;st<Q.landmarks.length;++st){vt=Q.landmarks[st];var At=!!vt.visibility;ft=z.data,mt=ft.addNormalizedLandmark,Gt=D,vt=Object.assign(Object.assign({},vt),{visibility:At?vt.visibility:0}),At=new pe,Ct(At,1,vt.x),Ct(At,2,vt.y),Ct(At,3,vt.z),vt.visibility&&Ct(At,4,vt.visibility),vt=O(At,ge),mt.call(ft,Gt,vt)}if(Q.V)for(st=0;st<Q.V.length;++st)ft=z.data,mt=ft.addClassification,Gt=D,vt=Q.V[st],At=new Nt,Ct(At,2,vt.ga),vt.index&&Ct(At,1,vt.index),vt.label&&Ct(At,3,vt.label),vt.displayName&&Ct(At,4,vt.displayName),vt=O(At,Tt),mt.call(ft,Gt,vt)}z=z.data;break t;default:z={}}}switch(b=z,S=a.stream,a.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},b),{stream:S,timestamp:e}));break;case"detections":L=b,L.stream=S,L.timestamp=e,u.pushDetectionList(L);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return g.i.send(u),P(C,g.D,4);case 4:u.delete(),C.g=0}})};function v(o,d,g){var e,u,m,t,c,a,b,S,L,C,U,z,Q,D;return Zt(function(st){switch(st.g){case 1:if(!g)return st.return(d);for(e={},u=0,m=T(Object.keys(g)),t=m.next();!t.done;t=m.next())c=t.value,a=g[c],typeof a!="string"&&a.type==="texture"&&d[a.stream]!==void 0&&++u;1<u&&(o.I=!1),b=T(Object.keys(g)),t=b.next();case 2:if(t.done){st.g=4;break}if(S=t.value,L=g[S],typeof L=="string")return Q=e,D=S,P(st,x(o,S,d[L]),14);if(C=d[L.stream],L.type==="detection_list"){if(C){for(var ft=C.getRectList(),mt=C.getLandmarksList(),Gt=C.getClassificationsList(),vt=[],At=0;At<ft.size();++At){var le=V(ft.get(At),G,H);le={boundingBox:{xCenter:oe(le,1),yCenter:oe(le,2),height:oe(le,3),width:oe(le,4),rotation:oe(le,5,0),rectId:se(le,6)},landmarks:Le(V(mt.get(At),Ne,h),pe,1).map(N),V:w(V(Gt.get(At),Et,Dt))},vt.push(le)}ft=vt}else ft=[];e[S]=ft,st.g=7;break}if(L.type==="proto_list"){if(C){for(ft=Array(C.size()),mt=0;mt<C.size();mt++)ft[mt]=C.get(mt);C.delete()}else ft=[];e[S]=ft,st.g=7;break}if(C===void 0){st.g=3;break}if(L.type==="float_list"){e[S]=C,st.g=7;break}if(L.type==="proto"){e[S]=C,st.g=7;break}if(L.type!=="texture")throw Error("Unknown output config type: '"+L.type+"'");return U=o.u[S],U||(U=new A(o.h,o.G),o.u[S]=U),P(st,B(U,C,o.I),13);case 13:z=st.h,e[S]=z;case 7:L.transform&&e[S]&&(e[S]=L.transform(e[S])),st.g=3;break;case 14:Q[D]=st.h;case 3:t=b.next(),st.g=2;break;case 4:return st.return(e)}})}function x(o,d,g){var e;return Zt(function(u){return typeof g=="number"||g instanceof Uint8Array||g instanceof o.h.Uint8BlobList?u.return(g):g instanceof o.h.Texture2dDataOut?(e=o.u[d],e||(e=new A(o.h,o.G),o.u[d]=e),u.return(B(e,g,o.I))):u.return(void 0)})}function Y(o,d){for(var g=d.name||"$",e=[].concat(J(d.wants)),u=new o.h.StringList,m=T(d.wants),t=m.next();!t.done;t=m.next())u.push_back(t.value);m=o.h.PacketListener.implement({onResults:function(c){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=c.get(b);var S=o.listeners[g];S&&(o.D=v(o,a,d.outs).then(function(L){L=S(L);for(var C=0;C<d.wants.length;++C){var U=a[e[C]];typeof U=="object"&&U.hasOwnProperty&&U.hasOwnProperty("delete")&&U.delete()}L&&(o.D=L)}))}}),o.i.attachMultiListener(u,m),u.delete()}i.onResults=function(o,d){this.listeners[d||"$"]=o},Ht("Solution",Wt),Ht("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function k(o){var d=this;o=o||{};var g={url:"face_detection_short.binarypb"},e={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Wt({locateFile:o.locateFile,files:[{data:!0,url:"face_detection_short.binarypb"},{data:!0,url:"face_detection_short_range.tflite"},{simd:!0,url:"face_detection_solution_simd_wasm_bin.js"},{simd:!1,url:"face_detection_solution_wasm_bin.js"}],graph:g,listeners:[{wants:["detections","image_transformed"],outs:{image:"image_transformed",detections:{type:"detection_list",stream:"detections"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},model:{type:0,onChange:function(u){var m,t,c,a,b,S;return Zt(function(L){switch(L.g){case 1:m=u==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=T(m),c=t.next();case 2:if(c.done){L.g=4;break}return a=c.value,b="third_party/mediapipe/modules/face_detection/"+a,P(L,l(d.g,a),5);case 5:S=L.h,d.g.overrideFile(b,S),c=t.next(),L.g=2;break;case 4:return g.url=u==="short"?"face_detection_short.binarypb":"face_detection_full.binarypb",e.graphOptionXref.calculatorName=u==="short"?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",L.return(!0)}})}},minDetectionConfidence:e}})}i=k.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(o){this.g.onResults(o)},i.initialize=function(){var o=this;return Zt(function(d){return P(d,o.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(o){var d=this;return Zt(function(g){return P(g,d.g.send(o),0)})},i.setOptions=function(o){this.g.setOptions(o)},Ht("FaceDetection",k),Ht("FACEDETECTION_LIPS",K),Ht("FACEDETECTION_LEFT_EYE",_),Ht("FACEDETECTION_LEFT_EYEBROW",M),Ht("FACEDETECTION_RIGHT_EYE",q),Ht("FACEDETECTION_RIGHT_EYEBROW",ct),Ht("FACEDETECTION_FACE_OVAL",s),Ht("FACEDETECTION_CONTOURS",X),Ht("FACEDETECTION_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ht("VERSION","0.4.1646425229")}).call(Xi);const Wi={};(function(){var i;function n(h){var y=0;return function(){return y<h.length?{done:!1,value:h[y++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(h,y,G){return h==Array.prototype||h==Object.prototype||(h[y]=G.value),h};function f(h){h=[typeof globalThis=="object"&&globalThis,h,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var y=0;y<h.length;++y){var G=h[y];if(G&&G.Math==Math)return G}throw Error("Cannot find global object")}var Z=f(this);function I(h,y){if(y)t:{var G=Z;h=h.split(".");for(var H=0;H<h.length-1;H++){var K=h[H];if(!(K in G))break t;G=G[K]}h=h[h.length-1],H=G[h],y=y(H),y!=H&&y!=null&&r(G,h,{configurable:!0,writable:!0,value:y})}}I("Symbol",function(h){function y(_){if(this instanceof y)throw new TypeError("Symbol is not a constructor");return new G(H+(_||"")+"_"+K++,_)}function G(_,M){this.g=_,r(this,"description",{configurable:!0,writable:!0,value:M})}if(h)return h;G.prototype.toString=function(){return this.g};var H="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",K=0;return y}),I("Symbol.iterator",function(h){if(h)return h;h=Symbol("Symbol.iterator");for(var y="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),G=0;G<y.length;G++){var H=Z[y[G]];typeof H=="function"&&typeof H.prototype[h]!="function"&&r(H.prototype,h,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return h});function F(h){return h={next:h},h[Symbol.iterator]=function(){return this},h}function T(h){var y=typeof Symbol<"u"&&Symbol.iterator&&h[Symbol.iterator];return y?y.call(h):{next:n(h)}}function J(h){if(!(h instanceof Array)){h=T(h);for(var y,G=[];!(y=h.next()).done;)G.push(y.value);h=G}return h}var et=typeof Object.create=="function"?Object.create:function(h){function y(){}return y.prototype=h,new y},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(h,y){if(h.__proto__=y,h.__proto__!==y)throw new TypeError(h+" is not extensible");return h}:null}var at=lt;function dt(h,y){if(h.prototype=et(y.prototype),h.prototype.constructor=h,at)at(h,y);else for(var G in y)if(G!="prototype")if(Object.defineProperties){var H=Object.getOwnPropertyDescriptor(y,G);H&&Object.defineProperty(h,G,H)}else h[G]=y[G];h.ea=y.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Bt.prototype.o=function(h){this.h=h};function ee(h,y){h.j={U:y,V:!0},h.g=h.m||h.s}Bt.prototype.return=function(h){this.j={return:h},this.g=this.s};function P(h,y,G){return h.g=G,{value:y}}function De(h){this.g=new Bt,this.h=h}function ze(h,y){kt(h.g);var G=h.g.i;return G?We(h,"return"in G?G.return:function(H){return{value:H,done:!0}},y,h.g.return):(h.g.return(y),zt(h))}function We(h,y,G,H){try{var K=y.call(h.g.i,G);if(!(K instanceof Object))throw new TypeError("Iterator result "+K+" is not an object");if(!K.done)return h.g.l=!1,K;var _=K.value}catch(M){return h.g.i=null,ee(h.g,M),zt(h)}return h.g.i=null,H.call(h.g,_),zt(h)}function zt(h){for(;h.g.g;)try{var y=h.h(h.g);if(y)return h.g.l=!1,{value:y.value,done:!1}}catch(G){h.g.h=void 0,ee(h.g,G)}if(h.g.l=!1,h.g.j){if(y=h.g.j,h.g.j=null,y.V)throw y.U;return{value:y.return,done:!0}}return{value:void 0,done:!0}}function Hn(h){this.next=function(y){return kt(h.g),h.g.i?y=We(h,h.g.i.next,y,h.g.o):(h.g.o(y),y=zt(h)),y},this.throw=function(y){return kt(h.g),h.g.i?y=We(h,h.g.i.throw,y,h.g.o):(ee(h.g,y),y=zt(h)),y},this.return=function(y){return ze(h,y)},this[Symbol.iterator]=function(){return this}}function ne(h,y){return y=new Hn(new De(y)),at&&h.prototype&&at(y,h.prototype),y}function Zt(h,y){h instanceof String&&(h+="");var G=0,H=!1,K={next:function(){if(!H&&G<h.length){var _=G++;return{value:y(_,h[_]),done:!1}}return H=!0,{done:!0,value:void 0}}};return K[Symbol.iterator]=function(){return K},K}var $e=typeof Object.assign=="function"?Object.assign:function(h,y){for(var G=1;G<arguments.length;G++){var H=arguments[G];if(H)for(var K in H)Object.prototype.hasOwnProperty.call(H,K)&&(h[K]=H[K])}return h};I("Object.assign",function(h){return h||$e}),I("Promise",function(h){function y(M){this.h=0,this.i=void 0,this.g=[],this.o=!1;var q=this.j();try{M(q.resolve,q.reject)}catch(ct){q.reject(ct)}}function G(){this.g=null}function H(M){return M instanceof y?M:new y(function(q){q(M)})}if(h)return h;G.prototype.h=function(M){if(this.g==null){this.g=[];var q=this;this.i(function(){q.l()})}this.g.push(M)};var K=Z.setTimeout;G.prototype.i=function(M){K(M,0)},G.prototype.l=function(){for(;this.g&&this.g.length;){var M=this.g;this.g=[];for(var q=0;q<M.length;++q){var ct=M[q];M[q]=null;try{ct()}catch(s){this.j(s)}}}this.g=null},G.prototype.j=function(M){this.i(function(){throw M})},y.prototype.j=function(){function M(s){return function(X){ct||(ct=!0,s.call(q,X))}}var q=this,ct=!1;return{resolve:M(this.C),reject:M(this.l)}},y.prototype.C=function(M){if(M===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(M instanceof y)this.F(M);else{t:switch(typeof M){case"object":var q=M!=null;break t;case"function":q=!0;break t;default:q=!1}q?this.u(M):this.m(M)}},y.prototype.u=function(M){var q=void 0;try{q=M.then}catch(ct){this.l(ct);return}typeof q=="function"?this.G(q,M):this.m(M)},y.prototype.l=function(M){this.s(2,M)},y.prototype.m=function(M){this.s(1,M)},y.prototype.s=function(M,q){if(this.h!=0)throw Error("Cannot settle("+M+", "+q+"): Promise already settled in state"+this.h);this.h=M,this.i=q,this.h===2&&this.D(),this.A()},y.prototype.D=function(){var M=this;K(function(){if(M.B()){var q=Z.console;typeof q<"u"&&q.error(M.i)}},1)},y.prototype.B=function(){if(this.o)return!1;var M=Z.CustomEvent,q=Z.Event,ct=Z.dispatchEvent;return typeof ct>"u"?!0:(typeof M=="function"?M=new M("unhandledrejection",{cancelable:!0}):typeof q=="function"?M=new q("unhandledrejection",{cancelable:!0}):(M=Z.document.createEvent("CustomEvent"),M.initCustomEvent("unhandledrejection",!1,!0,M)),M.promise=this,M.reason=this.i,ct(M))},y.prototype.A=function(){if(this.g!=null){for(var M=0;M<this.g.length;++M)_.h(this.g[M]);this.g=null}};var _=new G;return y.prototype.F=function(M){var q=this.j();M.J(q.resolve,q.reject)},y.prototype.G=function(M,q){var ct=this.j();try{M.call(q,ct.resolve,ct.reject)}catch(s){ct.reject(s)}},y.prototype.then=function(M,q){function ct(w,N){return typeof w=="function"?function(A){try{s(w(A))}catch(B){X(B)}}:N}var s,X,R=new y(function(w,N){s=w,X=N});return this.J(ct(M,s),ct(q,X)),R},y.prototype.catch=function(M){return this.then(void 0,M)},y.prototype.J=function(M,q){function ct(){switch(s.h){case 1:M(s.i);break;case 2:q(s.i);break;default:throw Error("Unexpected state: "+s.h)}}var s=this;this.g==null?_.h(ct):this.g.push(ct),this.o=!0},y.resolve=H,y.reject=function(M){return new y(function(q,ct){ct(M)})},y.race=function(M){return new y(function(q,ct){for(var s=T(M),X=s.next();!X.done;X=s.next())H(X.value).J(q,ct)})},y.all=function(M){var q=T(M),ct=q.next();return ct.done?H([]):new y(function(s,X){function R(A){return function(B){w[A]=B,N--,N==0&&s(w)}}var w=[],N=0;do w.push(void 0),N++,H(ct.value).J(R(w.length-1),X),ct=q.next();while(!ct.done)})},y}),I("Object.is",function(h){return h||function(y,G){return y===G?y!==0||1/y===1/G:y!==y&&G!==G}}),I("Array.prototype.includes",function(h){return h||function(y,G){var H=this;H instanceof String&&(H=String(H));var K=H.length;for(G=G||0,0>G&&(G=Math.max(G+K,0));G<K;G++){var _=H[G];if(_===y||Object.is(_,y))return!0}return!1}}),I("String.prototype.includes",function(h){return h||function(y,G){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(y instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(y,G||0)!==-1}}),I("Array.prototype.keys",function(h){return h||function(){return Zt(this,function(y){return y})}});var An=this||self;function Re(h,y){h=h.split(".");var G=An;h[0]in G||typeof G.execScript>"u"||G.execScript("var "+h[0]);for(var H;h.length&&(H=h.shift());)h.length||y===void 0?G[H]&&G[H]!==Object.prototype[H]?G=G[H]:G=G[H]={}:G[H]=y}function Ht(h,y){return y=String.fromCharCode.apply(null,y),h==null?y:h+y}var Te,sn=typeof TextDecoder<"u",Gn,Ln=typeof TextEncoder<"u";function Rn(h){if(Ln)h=(Gn||(Gn=new TextEncoder)).encode(h);else{var y=void 0;y=y===void 0?!1:y;for(var G=0,H=new Uint8Array(3*h.length),K=0;K<h.length;K++){var _=h.charCodeAt(K);if(128>_)H[G++]=_;else{if(2048>_)H[G++]=_>>6|192;else{if(55296<=_&&57343>=_){if(56319>=_&&K<h.length){var M=h.charCodeAt(++K);if(56320<=M&&57343>=M){_=1024*(_-55296)+M-56320+65536,H[G++]=_>>18|240,H[G++]=_>>12&63|128,H[G++]=_>>6&63|128,H[G++]=_&63|128;continue}else K--}if(y)throw Error("Found an unpaired surrogate");_=65533}H[G++]=_>>12|224,H[G++]=_>>6&63|128}H[G++]=_&63|128}}h=H.subarray(0,G)}return h}var Jn={},dn=null;function pn(h,y){y===void 0&&(y=0),je(),y=Jn[y];for(var G=Array(Math.floor(h.length/3)),H=y[64]||"",K=0,_=0;K<h.length-2;K+=3){var M=h[K],q=h[K+1],ct=h[K+2],s=y[M>>2];M=y[(M&3)<<4|q>>4],q=y[(q&15)<<2|ct>>6],ct=y[ct&63],G[_++]=s+M+q+ct}switch(s=0,ct=H,h.length-K){case 2:s=h[K+1],ct=y[(s&15)<<2]||H;case 1:h=h[K],G[_]=y[h>>2]+y[(h&3)<<4|s>>4]+ct+H}return G.join("")}function kn(h){var y=h.length,G=3*y/4;G%3?G=Math.floor(G):"=.".indexOf(h[y-1])!=-1&&(G="=.".indexOf(h[y-2])!=-1?G-2:G-1);var H=new Uint8Array(G),K=0;return Fn(h,function(_){H[K++]=_}),H.subarray(0,K)}function Fn(h,y){function G(ct){for(;H<h.length;){var s=h.charAt(H++),X=dn[s];if(X!=null)return X;if(!/^[\s\xa0]*$/.test(s))throw Error("Unknown base64 encoding at char: "+s)}return ct}je();for(var H=0;;){var K=G(-1),_=G(0),M=G(64),q=G(64);if(q===64&&K===-1)break;y(K<<2|_>>4),M!=64&&(y(_<<4&240|M>>2),q!=64&&y(M<<6&192|q))}}function je(){if(!dn){dn={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),y=["+/=","+/","-_=","-_.","-_"],G=0;5>G;G++){var H=h.concat(y[G].split(""));Jn[G]=H;for(var K=0;K<H.length;K++){var _=H[K];dn[_]===void 0&&(dn[_]=K)}}}}var Me=typeof Uint8Array.prototype.slice=="function",xn;function Xn(h,y,G){return y===G?xn||(xn=new Uint8Array(0)):Me?h.slice(y,G):new Uint8Array(h.subarray(y,G))}var he=0,Se=0;function Oe(h,y){y=y===void 0?{}:y,y=y.v===void 0?!1:y.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=y,h&&re(this,h)}function re(h,y){y=y.constructor===Uint8Array?y:y.constructor===ArrayBuffer?new Uint8Array(y):y.constructor===Array?new Uint8Array(y):y.constructor===String?kn(y):y instanceof Uint8Array?new Uint8Array(y.buffer,y.byteOffset,y.byteLength):new Uint8Array(0),h.h=y,h.l=0,h.j=h.h.length,h.g=h.l}Oe.prototype.reset=function(){this.g=this.l};function Ve(h){for(var y=128,G=0,H=0,K=0;4>K&&128<=y;K++)y=h.h[h.g++],G|=(y&127)<<7*K;if(128<=y&&(y=h.h[h.g++],G|=(y&127)<<28,H|=(y&127)>>4),128<=y)for(K=0;5>K&&128<=y;K++)y=h.h[h.g++],H|=(y&127)<<7*K+3;if(128>y)return h=G>>>0,y=H>>>0,(H=y&2147483648)&&(h=~h+1>>>0,y=~y>>>0,h==0&&(y=y+1>>>0)),h=4294967296*y+(h>>>0),H?-h:h;h.m=!0}Oe.prototype.i=function(){var h=this.h,y=h[this.g],G=y&127;return 128>y?(this.g+=1,G):(y=h[this.g+1],G|=(y&127)<<7,128>y?(this.g+=2,G):(y=h[this.g+2],G|=(y&127)<<14,128>y?(this.g+=3,G):(y=h[this.g+3],G|=(y&127)<<21,128>y?(this.g+=4,G):(y=h[this.g+4],G|=(y&15)<<28,128>y?(this.g+=5,G>>>0):(this.g+=5,128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&this.g++,G)))))},Oe.prototype.o=function(){var h=this.h[this.g],y=this.h[this.g+1],G=this.h[this.g+2],H=this.h[this.g+3];return this.g+=4,G=(h<<0|y<<8|G<<16|H<<24)>>>0,h=2*(G>>31)+1,y=G>>>23&255,G&=8388607,y==255?G?NaN:1/0*h:y==0?h*Math.pow(2,-149)*G:h*Math.pow(2,y-150)*(G+Math.pow(2,23))};var ln=[];function Be(){this.g=new Uint8Array(64),this.h=0}Be.prototype.push=function(h){if(!(this.h+1<this.g.length)){var y=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(y)}this.g[this.h++]=h},Be.prototype.length=function(){return this.h},Be.prototype.end=function(){var h=this.g,y=this.h;return this.h=0,Xn(h,0,y)};function Qt(h,y){for(;127<y;)h.push(y&127|128),y>>>=7;h.push(y)}function Ze(h){var y={},G=y.N===void 0?!1:y.N;this.o={v:y.v===void 0?!1:y.v},this.N=G,y=this.o,ln.length?(G=ln.pop(),y&&(G.v=y.v),h&&re(G,h),h=G):h=new Oe(h,y),this.g=h,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ze.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Ce(h){var y=h.g;if((y=y.g==y.j)||(y=h.j)||(y=h.g,y=y.m||0>y.g||y.g>y.j),y)return!1;h.m=h.g.g,y=h.g.i();var G=y&7;return G!=0&&G!=5&&G!=1&&G!=2&&G!=3&&G!=4?(h.j=!0,!1):(h.i=y,h.l=y>>>3,h.h=G,!0)}function Mt(h){switch(h.h){case 0:if(h.h!=0)Mt(h);else{for(h=h.g;h.h[h.g]&128;)h.g++;h.g++}break;case 1:h.h!=1?Mt(h):(h=h.g,h.g+=8);break;case 2:if(h.h!=2)Mt(h);else{var y=h.g.i();h=h.g,h.g+=y}break;case 5:h.h!=5?Mt(h):(h=h.g,h.g+=4);break;case 3:y=h.l;do{if(!Ce(h)){h.j=!0;break}if(h.h==4){h.l!=y&&(h.j=!0);break}Mt(h)}while(1);break;default:h.j=!0}}function xe(h,y,G){var H=h.g.j,K=h.g.i(),_=h.g.g+K;if(h.g.j=_,G(y,h),G=_-h.g.g,G!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+K+" bytes, instead read "+(K-G)+" bytes, either the data ended unexpectedly or the message misreported its own length");return h.g.g=_,h.g.j=H,y}function jt(h){return h.g.o()}function ye(h){var y=h.g.i();h=h.g;var G=h.g;h.g+=y,h=h.h;var H;if(sn)(H=Te)||(H=Te=new TextDecoder("utf-8",{fatal:!1})),H=H.decode(h.subarray(G,G+y));else{y=G+y;for(var K=[],_=null,M,q,ct;G<y;)M=h[G++],128>M?K.push(M):224>M?G>=y?K.push(65533):(q=h[G++],194>M||(q&192)!==128?(G--,K.push(65533)):K.push((M&31)<<6|q&63)):240>M?G>=y-1?K.push(65533):(q=h[G++],(q&192)!==128||M===224&&160>q||M===237&&160<=q||((H=h[G++])&192)!==128?(G--,K.push(65533)):K.push((M&15)<<12|(q&63)<<6|H&63)):244>=M?G>=y-2?K.push(65533):(q=h[G++],(q&192)!==128||(M<<28)+(q-144)>>30!==0||((H=h[G++])&192)!==128||((ct=h[G++])&192)!==128?(G--,K.push(65533)):(M=(M&7)<<18|(q&63)<<12|(H&63)<<6|ct&63,M-=65536,K.push((M>>10&1023)+55296,(M&1023)+56320))):K.push(65533),8192<=K.length&&(_=Ht(_,K),K.length=0);H=Ht(_,K)}return H}function Ye(h,y,G){var H=h.g.i();for(H=h.g.g+H;h.g.g<H;)G.push(y.call(h.g))}function qe(h,y){h.h==2?Ye(h,Oe.prototype.o,y):y.push(jt(h))}function Xe(){this.h=[],this.i=0,this.g=new Be}function Ot(h,y){y.length!==0&&(h.h.push(y),h.i+=y.length)}function Ae(h){var y=h.i+h.g.length();if(y===0)return new Uint8Array(0);y=new Uint8Array(y);for(var G=h.h,H=G.length,K=0,_=0;_<H;_++){var M=G[_];M.length!==0&&(y.set(M,K),K+=M.length)}return G=h.g,H=G.h,H!==0&&(y.set(G.g.subarray(0,H),K),G.h=0),h.h=[y],y}function Pe(h,y,G){if(G!=null){Qt(h.g,8*y+5),h=h.g;var H=G;H=(G=0>H?1:0)?-H:H,H===0?0<1/H?he=Se=0:(Se=0,he=2147483648):isNaN(H)?(Se=0,he=2147483647):34028234663852886e22<H?(Se=0,he=(G<<31|2139095040)>>>0):11754943508222875e-54>H?(H=Math.round(H/Math.pow(2,-149)),Se=0,he=(G<<31|H)>>>0):(y=Math.floor(Math.log(H)/Math.LN2),H*=Math.pow(2,-y),H=Math.round(8388608*H),16777216<=H&&++y,Se=0,he=(G<<31|y+127<<23|H&8388607)>>>0),G=he,h.push(G>>>0&255),h.push(G>>>8&255),h.push(G>>>16&255),h.push(G>>>24&255)}}var Ie=typeof Uint8Array=="function";function Wn(h,y,G){if(h!=null)return typeof h=="object"?Ie&&h instanceof Uint8Array?G(h):cn(h,y,G):y(h)}function cn(h,y,G){if(Array.isArray(h)){for(var H=Array(h.length),K=0;K<h.length;K++)H[K]=Wn(h[K],y,G);return Array.isArray(h)&&h.W&&ve(H),H}H={};for(K in h)H[K]=Wn(h[K],y,G);return H}function _e(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var un={W:{value:!0,configurable:!0}};function ve(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,un),h}var we;function Ge(h,y,G){var H=we;we=null,h||(h=H),H=this.constructor.ca,h||(h=H?[H]:[]),this.j=H?0:-1,this.m=this.g=null,this.h=h;t:{if(H=this.h.length,h=H-1,H&&(H=this.h[h],!(H===null||typeof H!="object"||Array.isArray(H)||Ie&&H instanceof Uint8Array))){this.l=h-this.j,this.i=H;break t}y!==void 0&&-1<y?(this.l=Math.max(y,h+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(G)for(y=0;y<G.length;y++)h=G[y],h<this.l?(h+=this.j,(H=this.h[h])?ve(H):this.h[h]=ie):(Qe(this),(H=this.i[h])?ve(H):this.i[h]=ie)}var ie=Object.freeze(ve([]));function Qe(h){var y=h.l+h.j;h.h[y]||(h.i=h.h[y]={})}function qt(h,y,G){return y===-1?null:(G===void 0?0:G)||y>=h.l?h.i?h.i[y]:void 0:h.h[y+h.j]}function Pt(h,y){var G=G===void 0?!1:G,H=qt(h,y,G);return H==null&&(H=ie),H===ie&&(H=ve([]),Vt(h,y,H,G)),H}function hn(h){var y=Pt(h,3);if(h.m||(h.m={}),!h.m[3]){for(var G=0;G<y.length;G++)y[G]=+y[G];h.m[3]=!0}return y}function fe(h,y,G){return h=qt(h,y),h==null?G:h}function Ct(h,y,G){return h=qt(h,y),h=h==null?h:+h,h==null?G===void 0?0:G:h}function Vt(h,y,G,H){(H===void 0?0:H)||y>=h.l?(Qe(h),h.i[y]=G):h.h[y+h.j]=G}function oe(h,y,G){if(G===-1)return null;if(h.g||(h.g={}),!h.g[G]){var H=qt(h,G,!1);H&&(h.g[G]=new y(H))}return h.g[G]}function Le(h,y){h.g||(h.g={});var G=h.g[1];if(!G){var H=Pt(h,1);G=[];for(var K=0;K<H.length;K++)G[K]=new y(H[K]);h.g[1]=G}return G}function te(h,y,G){var H=H===void 0?!1:H;h.g||(h.g={});var K=G&&tt(G);h.g[y]=G,Vt(h,y,K,H)}function se(h,y,G,H){var K=Le(h,G);y=y||new G,h=Pt(h,1),H!=null?(K.splice(H,0,y),h.splice(H,0,tt(y))):(K.push(y),h.push(tt(y)))}Ge.prototype.toJSON=function(){var h=tt(this);return cn(h,_e,pn)};function tt(h,y){if(h.g)for(var G in h.g){var H=h.g[G];if(Array.isArray(H))for(var K=0;K<H.length;K++)H[K]&&tt(H[K]);else H&&tt(H)}return h.h}Ge.prototype.toString=function(){return tt(this).toString()};function it(h,y){if(h=h.o){Ot(y,y.g.end());for(var G=0;G<h.length;G++)Ot(y,h[G])}}function ut(h,y){if(y.h==4)return!1;var G=y.m;return Mt(y),y.N||(y=Xn(y.g.h,G,y.g.g),(G=h.o)?G.push(y):h.o=[y]),!0}function _t(h){Ge.call(this,h,-1,ue)}dt(_t,Ge),_t.prototype.getRows=function(){return qt(this,1)},_t.prototype.getCols=function(){return qt(this,2)},_t.prototype.getPackedDataList=function(){return hn(this)},_t.prototype.getLayout=function(){return fe(this,4,0)};function de(h,y){for(;Ce(y);)switch(y.i){case 8:var G=y.g.i();Vt(h,1,G);break;case 16:G=y.g.i(),Vt(h,2,G);break;case 29:case 26:qe(y,h.getPackedDataList());break;case 32:G=Ve(y.g),Vt(h,4,G);break;default:if(!ut(h,y))return h}return h}var ue=[3];function St(h,y){var G=void 0;return new(G||(G=Promise))(function(H,K){function _(ct){try{q(y.next(ct))}catch(s){K(s)}}function M(ct){try{q(y.throw(ct))}catch(s){K(s)}}function q(ct){ct.done?H(ct.value):new G(function(s){s(ct.value)}).then(_,M)}q((y=y.apply(h,void 0)).next())})}function me(h){Ge.call(this,h)}dt(me,Ge);function He(h,y){for(;Ce(y);)switch(y.i){case 8:var G=y.g.i();Vt(h,1,G);break;case 21:G=jt(y),Vt(h,2,G);break;case 26:G=ye(y),Vt(h,3,G);break;case 34:G=ye(y),Vt(h,4,G);break;default:if(!ut(h,y))return h}return h}function tn(h){Ge.call(this,h,-1,en)}dt(tn,Ge),tn.prototype.addClassification=function(h,y){return se(this,h,me,y),this};var en=[1];function fn(h){Ge.call(this,h)}dt(fn,Ge);function bn(h,y){for(;Ce(y);)switch(y.i){case 13:var G=jt(y);Vt(h,1,G);break;case 21:G=jt(y),Vt(h,2,G);break;case 29:G=jt(y),Vt(h,3,G);break;case 37:G=jt(y),Vt(h,4,G);break;case 45:G=jt(y),Vt(h,5,G);break;default:if(!ut(h,y))return h}return h}function Fe(h){Ge.call(this,h,-1,zn)}dt(Fe,Ge);function nn(h){t:{var y=new Fe;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var G=xe(h,new fn,bn);se(y,G,fn,void 0);break;default:if(!ut(y,h))break t}}return y}var zn=[1];function rn(h){Ge.call(this,h)}dt(rn,Ge);function Je(h){Ge.call(this,h,-1,In)}dt(Je,Ge),Je.prototype.getVertexType=function(){return fe(this,1,0)},Je.prototype.getPrimitiveType=function(){return fe(this,2,0)},Je.prototype.getVertexBufferList=function(){return hn(this)},Je.prototype.getIndexBufferList=function(){return Pt(this,4)};function gn(h,y){for(;Ce(y);)switch(y.i){case 8:var G=Ve(y.g);Vt(h,1,G);break;case 16:G=Ve(y.g),Vt(h,2,G);break;case 29:case 26:qe(y,h.getVertexBufferList());break;case 32:case 34:G=y;var H=h.getIndexBufferList();G.h==2?Ye(G,Oe.prototype.i,H):H.push(G.g.i());break;default:if(!ut(h,y))return h}return h}var In=[3,4];function Ke(h){Ge.call(this,h)}dt(Ke,Ge),Ke.prototype.getMesh=function(){return oe(this,Je,1)},Ke.prototype.getPoseTransformMatrix=function(){return oe(this,_t,2)};function En(h){t:{var y=new Ke;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var G=xe(h,new Je,gn);te(y,1,G);break;case 18:G=xe(h,new _t,de),te(y,2,G);break;default:if(!ut(y,h))break t}}return y}function on(h,y,G){if(G=h.createShader(G===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(G,y),h.compileShader(G),!h.getShaderParameter(G,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
71
71
|
|
|
72
|
-
`+h.getShaderInfoLog(G));return G}function Zn(h){return
|
|
72
|
+
`+h.getShaderInfoLog(G));return G}function Zn(h){return Le(h,me).map(function(y){return{index:fe(y,1,0),Y:Ct(y,2),label:qt(y,3)!=null?fe(y,3,""):void 0,displayName:qt(y,4)!=null?fe(y,4,""):void 0}})}function Sn(h){return{x:Ct(h,1),y:Ct(h,2),z:Ct(h,3),visibility:qt(h,4)!=null?Ct(h,4):void 0}}function Kn(h,y){this.h=h,this.g=y,this.l=0}function an(h,y,G){return Tn(h,y),typeof h.g.canvas.transferToImageBitmap=="function"?Promise.resolve(h.g.canvas.transferToImageBitmap()):G?Promise.resolve(h.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(h.g.canvas):(h.i===void 0&&(h.i=document.createElement("canvas")),new Promise(function(H){h.i.height=h.g.canvas.height,h.i.width=h.g.canvas.width,h.i.getContext("2d",{}).drawImage(h.g.canvas,0,0,h.g.canvas.width,h.g.canvas.height),H(h.i)}))}function Tn(h,y){var G=h.g;if(h.m===void 0){var H=on(G,`
|
|
73
73
|
attribute vec2 aVertex;
|
|
74
74
|
attribute vec2 aTex;
|
|
75
75
|
varying vec2 vTex;
|
|
@@ -84,55 +84,55 @@
|
|
|
84
84
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
85
85
|
}`,1),_=G.createProgram();if(G.attachShader(_,H),G.attachShader(_,K),G.linkProgram(_),!G.getProgramParameter(_,G.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
86
86
|
|
|
87
|
-
`+G.getProgramInfoLog(_));H=h.m=_,G.useProgram(H),K=G.getUniformLocation(H,"sampler0"),h.j={I:G.getAttribLocation(H,"aVertex"),H:G.getAttribLocation(H,"aTex"),da:K},h.s=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.enableVertexAttribArray(h.j.I),G.vertexAttribPointer(h.j.I,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),h.o=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.enableVertexAttribArray(h.j.H),G.vertexAttribPointer(h.j.H,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),G.uniform1i(K,0)}H=h.j,G.useProgram(h.m),G.canvas.width=y.width,G.canvas.height=y.height,G.viewport(0,0,y.width,y.height),G.activeTexture(G.TEXTURE0),h.h.bindTexture2d(y.glName),G.enableVertexAttribArray(H.I),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.vertexAttribPointer(H.I,2,G.FLOAT,!1,0,0),G.enableVertexAttribArray(H.H),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.vertexAttribPointer(H.H,2,G.FLOAT,!1,0,0),G.bindFramebuffer(G.DRAW_FRAMEBUFFER?G.DRAW_FRAMEBUFFER:G.FRAMEBUFFER,null),G.clearColor(0,0,0,0),G.clear(G.COLOR_BUFFER_BIT),G.colorMask(!0,!0,!0,!0),G.drawArrays(G.TRIANGLE_FAN,0,4),G.disableVertexAttribArray(H.I),G.disableVertexAttribArray(H.H),G.bindBuffer(G.ARRAY_BUFFER,null),h.h.bindTexture2d(0)}function _n(h){this.g=h}var Qn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function wn(h,y){return y+h}function Ln(h,y){window[h]=y}function p(h){var y=document.createElement("script");return y.setAttribute("src",h),y.setAttribute("crossorigin","anonymous"),new Promise(function(G){y.addEventListener("load",function(){G()},!1),y.addEventListener("error",function(){G()},!1),document.body.appendChild(y)})}function W(){return St(this,function h(){return ne(h,function(y){switch(y.g){case 1:return y.m=2,P(y,WebAssembly.instantiate(Qn),4);case 4:y.g=3,y.m=0;break;case 2:return y.m=0,y.j=null,y.return(!1);case 3:return y.return(!0)}})})}function V(h){if(this.g=h,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=h&&h.locateFile||wn,typeof window=="object")var y=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")y=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=y,h.options){y=Y(Object.keys(h.options));for(var G=y.next();!G.done;G=y.next()){G=G.value;var H=h.options[G].default;H!==void 0&&(this.j[G]=typeof H=="function"?H():H)}}}i=V.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function E(h,y){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(y):h.g.files}function O(h){return St(h,function y(){var G=this,H,K,_,M,q,ct,s,X,R,T,J;return ne(y,function(A){switch(A.g){case 1:return H=G,G.R?(K=E(G,G.j),P(A,W(),2)):A.return();case 2:if(_=A.h,typeof window=="object")return Ln("createMediapipeSolutionsWasm",{locateFile:G.locateFile}),Ln("createMediapipeSolutionsPackedAssets",{locateFile:G.locateFile}),ct=K.filter(function(B){return B.data!==void 0}),s=K.filter(function(B){return B.data===void 0}),X=Promise.all(ct.map(function(B){var nt=rt(H,B.url);if(B.path!==void 0){var $=B.path;nt=nt.then(function(yt){return H.overrideFile($,yt),Promise.resolve(yt)})}return nt})),R=Promise.all(s.map(function(B){return B.simd===void 0||B.simd&&_||!B.simd&&!_?p(H.locateFile(B.url,H.S)):Promise.resolve()})).then(function(){return St(H,function B(){var nt,$,yt=this;return ne(B,function(Xt){if(Xt.g==1)return nt=window.createMediapipeSolutionsWasm,$=window.createMediapipeSolutionsPackedAssets,P(Xt,nt($),2);yt.h=Xt.h,Xt.g=0})})}),T=function(){return St(H,function B(){var nt=this;return ne(B,function($){return nt.g.graph&&nt.g.graph.url?$=P($,rt(nt,nt.g.graph.url),0):($.g=0,$=void 0),$})})}(),P(A,Promise.all([R,X,T]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return M=K.filter(function(B){return B.simd===void 0||B.simd&&_||!B.simd&&!_}).map(function(B){return H.locateFile(B.url,H.S)}),importScripts.apply(null,N(M)),P(A,createMediapipeSolutionsWasm(Module),6);case 6:G.h=A.h,G.l=new OffscreenCanvas(1,1),G.h.canvas=G.l,q=G.h.GL.createContext(G.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),G.h.GL.makeContextCurrent(q),A.g=4;break;case 7:if(G.l=document.createElement("canvas"),J=G.l.getContext("webgl2",{}),!J&&(J=G.l.getContext("webgl",{}),!J))return alert("Failed to create WebGL canvas context when passing video frame."),A.return();G.D=J,G.h.canvas=G.l,G.h.createContext(G.l,!0,!0,{});case 4:G.i=new G.h.SolutionWasm,G.R=!1,A.g=0}})})}function ot(h){return St(h,function y(){var G=this,H,K,_,M,q,ct,s,X;return ne(y,function(R){if(R.g==1){if(G.g.graph&&G.g.graph.url&&G.P===G.g.graph.url)return R.return();if(G.o=!0,!G.g.graph||!G.g.graph.url){R.g=2;return}return G.P=G.g.graph.url,P(R,rt(G,G.g.graph.url),3)}for(R.g!=2&&(H=R.h,G.i.loadGraph(H)),K=Y(Object.keys(G.B)),_=K.next();!_.done;_=K.next())M=_.value,G.i.overrideFile(M,G.B[M]);if(G.B={},G.g.listeners)for(q=Y(G.g.listeners),ct=q.next();!ct.done;ct=q.next())s=ct.value,Ut(G,s);X=G.j,G.j={},G.setOptions(X),R.g=0})})}i.reset=function(){return St(this,function h(){var y=this;return ne(h,function(G){y.i&&(y.i.reset(),y.m={},y.s={}),G.g=0})})},i.setOptions=function(h,y){var G=this;if(y=y||this.g.options){for(var H=[],K=[],_={},M=Y(Object.keys(h)),q=M.next();!q.done;_={K:_.K,L:_.L},q=M.next()){var ct=q.value;ct in this.j&&this.j[ct]===h[ct]||(this.j[ct]=h[ct],q=y[ct],q!==void 0&&(q.onChange&&(_.K=q.onChange,_.L=h[ct],H.push(function(s){return function(){return St(G,function X(){var R,T=this;return ne(X,function(J){if(J.g==1)return P(J,s.K(s.L),2);R=J.h,R===!0&&(T.o=!0),J.g=0})})}}(_))),q.graphOptionXref&&(ct={valueNumber:q.type===1?h[ct]:0,valueBoolean:q.type===0?h[ct]:!1,valueString:q.type===2?h[ct]:""},q=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),q.graphOptionXref),ct),K.push(q))))}(H.length!==0||K.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(K),this.u=(this.u===void 0?[]:this.u).concat(H))}};function z(h){return St(h,function y(){var G=this,H,K,_,M,q,ct,s;return ne(y,function(X){switch(X.g){case 1:if(!G.o)return X.return();if(!G.u){X.g=2;break}H=Y(G.u),K=H.next();case 3:if(K.done){X.g=5;break}return _=K.value,P(X,_(),4);case 4:K=H.next(),X.g=3;break;case 5:G.u=void 0;case 2:if(G.A){for(M=new G.h.GraphOptionChangeRequestList,q=Y(G.A),ct=q.next();!ct.done;ct=q.next())s=ct.value,M.push_back(s);G.i.changeOptions(M),M.delete(),G.A=void 0}G.o=!1,X.g=0}})})}i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(G){return G.g==1?P(G,O(y),2):G.g!=3?P(G,ot(y),3):P(G,z(y),0)})})};function rt(h,y){return St(h,function G(){var H=this,K,_;return ne(G,function(M){return y in H.F?M.return(H.F[y]):(K=H.locateFile(y,""),_=fetch(K).then(function(q){return q.arrayBuffer()}),H.F[y]=_,M.return(_))})})}i.overrideFile=function(h,y){this.i?this.i.overrideFile(h,y):this.B[h]=y},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(h,y){return St(this,function G(){var H=this,K,_,M,q,ct,s,X,R,T;return ne(G,function(J){switch(J.g){case 1:return H.g.inputs?(K=1e3*(y==null?performance.now():y),P(J,H.C,2)):J.return();case 2:return P(J,H.initialize(),3);case 3:for(_=new H.h.PacketDataList,M=Y(Object.keys(h)),q=M.next();!q.done;q=M.next())if(ct=q.value,s=H.g.inputs[ct]){t:{var A=H,B=h[ct];switch(s.type){case"video":var nt=A.m[s.stream];if(nt||(nt=new Kn(A.h,A.D),A.m[s.stream]=nt),A=nt,A.l===0&&(A.l=A.h.createTexture()),typeof HTMLVideoElement<"u"&&B instanceof HTMLVideoElement){var $=B.videoWidth;nt=B.videoHeight}else typeof HTMLImageElement<"u"&&B instanceof HTMLImageElement?($=B.naturalWidth,nt=B.naturalHeight):($=B.width,nt=B.height);nt={glName:A.l,width:$,height:nt},$=A.g,$.canvas.width=nt.width,$.canvas.height=nt.height,$.activeTexture($.TEXTURE0),A.h.bindTexture2d(A.l),$.texImage2D($.TEXTURE_2D,0,$.RGBA,$.RGBA,$.UNSIGNED_BYTE,B),A.h.bindTexture2d(0),A=nt;break t;case"detections":for(nt=A.m[s.stream],nt||(nt=new _n(A.h),A.m[s.stream]=nt),A=nt,A.data||(A.data=new A.g.DetectionListData),A.data.reset(B.length),nt=0;nt<B.length;++nt){$=B[nt];var yt=A.data,Xt=yt.setBoundingBox,Kt=nt,xt=$.T,ht=new rn;Vt(ht,1,xt.Z),Vt(ht,2,xt.$),Vt(ht,3,xt.height),Vt(ht,4,xt.width),Vt(ht,5,xt.rotation),Vt(ht,6,xt.X);var Wt=xt=new Xe;Pe(Wt,1,qt(ht,1)),Pe(Wt,2,qt(ht,2)),Pe(Wt,3,qt(ht,3)),Pe(Wt,4,qt(ht,4)),Pe(Wt,5,qt(ht,5));var It=qt(ht,6);if(It!=null&&It!=null){Qt(Wt.g,48);var Tt=Wt.g,Ct=It;It=0>Ct,Ct=Math.abs(Ct);var l=Ct>>>0;for(Ct=Math.floor((Ct-l)/4294967296),Ct>>>=0,It&&(Ct=~Ct>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Ct++,4294967295<Ct&&(Ct=0))),he=l,Se=Ct,It=he,l=Se;0<l||127<It;)Tt.push(It&127|128),It=(It>>>7|l<<25)>>>0,l>>>=7;Tt.push(It)}if(it(ht,Wt),xt=Ae(xt),Xt.call(yt,Kt,xt),$.O)for(yt=0;yt<$.O.length;++yt)ht=$.O[yt],Wt=!!ht.visibility,Xt=A.data,Kt=Xt.addNormalizedLandmark,xt=nt,ht=Object.assign(Object.assign({},ht),{visibility:Wt?ht.visibility:0}),Wt=new fn,Vt(Wt,1,ht.x),Vt(Wt,2,ht.y),Vt(Wt,3,ht.z),ht.visibility&&Vt(Wt,4,ht.visibility),Tt=ht=new Xe,Pe(Tt,1,qt(Wt,1)),Pe(Tt,2,qt(Wt,2)),Pe(Tt,3,qt(Wt,3)),Pe(Tt,4,qt(Wt,4)),Pe(Tt,5,qt(Wt,5)),it(Wt,Tt),ht=Ae(ht),Kt.call(Xt,xt,ht);if($.M)for(yt=0;yt<$.M.length;++yt){if(Xt=A.data,Kt=Xt.addClassification,xt=nt,ht=$.M[yt],Wt=new me,Vt(Wt,2,ht.Y),ht.index&&Vt(Wt,1,ht.index),ht.label&&Vt(Wt,3,ht.label),ht.displayName&&Vt(Wt,4,ht.displayName),Tt=ht=new Xe,l=qt(Wt,1),l!=null&&l!=null)if(Qt(Tt.g,8),It=Tt.g,0<=l)Qt(It,l);else{for(Ct=0;9>Ct;Ct++)It.push(l&127|128),l>>=7;It.push(1)}Pe(Tt,2,qt(Wt,2)),It=qt(Wt,3),It!=null&&(It=Rn(It),Qt(Tt.g,26),Qt(Tt.g,It.length),Ot(Tt,Tt.g.end()),Ot(Tt,It)),It=qt(Wt,4),It!=null&&(It=Rn(It),Qt(Tt.g,34),Qt(Tt.g,It.length),Ot(Tt,Tt.g.end()),Ot(Tt,It)),it(Wt,Tt),ht=Ae(ht),Kt.call(Xt,xt,ht)}}A=A.data;break t;default:A={}}}switch(X=A,R=s.stream,s.type){case"video":_.pushTexture2d(Object.assign(Object.assign({},X),{stream:R,timestamp:K}));break;case"detections":T=X,T.stream=R,T.timestamp=K,_.pushDetectionList(T);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return H.i.send(_),P(J,H.C,4);case 4:_.delete(),J.g=0}})})};function bt(h,y,G){return St(h,function H(){var K,_,M,q,ct,s,X=this,R,T,J,A,B,nt,$,yt;return ne(H,function(Xt){switch(Xt.g){case 1:if(!G)return Xt.return(y);for(K={},_=0,M=Y(Object.keys(G)),q=M.next();!q.done;q=M.next())ct=q.value,s=G[ct],typeof s!="string"&&s.type==="texture"&&y[s.stream]!==void 0&&++_;1<_&&(X.G=!1),R=Y(Object.keys(G)),q=R.next();case 2:if(q.done){Xt.g=4;break}if(T=q.value,J=G[T],typeof J=="string")return $=K,yt=T,P(Xt,Rt(X,T,y[J]),14);if(A=y[J.stream],J.type==="detection_list"){if(A){for(var Kt=A.getRectList(),xt=A.getLandmarksList(),ht=A.getClassificationsList(),Wt=[],It=0;It<Kt.size();++It){var Tt=Kt.get(It);t:{var Ct=new rn;for(Tt=new Ze(Tt);Le(Tt);)switch(Tt.i){case 13:var l=zt(Tt);Vt(Ct,1,l);break;case 21:l=zt(Tt),Vt(Ct,2,l);break;case 29:l=zt(Tt),Vt(Ct,3,l);break;case 37:l=zt(Tt),Vt(Ct,4,l);break;case 45:l=zt(Tt),Vt(Ct,5,l);break;case 48:l=Ve(Tt.g),Vt(Ct,6,l);break;default:if(!ut(Ct,Tt))break t}}Ct={Z:Lt(Ct,1),$:Lt(Ct,2),height:Lt(Ct,3),width:Lt(Ct,4),rotation:Lt(Ct,5,0),X:fe(Ct,6,0)},Tt=Fe(nn(xt.get(It)),fn).map(Sn);var v=ht.get(It);t:for(l=new tn,v=new Ze(v);Le(v);)switch(v.i){case 10:l.addClassification(xe(v,new me,He));break;default:if(!ut(l,v))break t}Ct={T:Ct,O:Tt,M:Zn(l)},Wt.push(Ct)}Kt=Wt}else Kt=[];K[T]=Kt,Xt.g=7;break}if(J.type==="proto_list"){if(A){for(Kt=Array(A.size()),xt=0;xt<A.size();xt++)Kt[xt]=A.get(xt);A.delete()}else Kt=[];K[T]=Kt,Xt.g=7;break}if(A===void 0){Xt.g=3;break}if(J.type==="float_list"){K[T]=A,Xt.g=7;break}if(J.type==="proto"){K[T]=A,Xt.g=7;break}if(J.type!=="texture")throw Error("Unknown output config type: '"+J.type+"'");return B=X.s[T],B||(B=new Kn(X.h,X.D),X.s[T]=B),P(Xt,an(B,A,X.G),13);case 13:nt=Xt.h,K[T]=nt;case 7:J.transform&&K[T]&&(K[T]=J.transform(K[T])),Xt.g=3;break;case 14:$[yt]=Xt.h;case 3:q=R.next(),Xt.g=2;break;case 4:return Xt.return(K)}})})}function Rt(h,y,G){return St(h,function H(){var K=this,_;return ne(H,function(M){return typeof G=="number"||G instanceof Uint8Array||G instanceof K.h.Uint8BlobList?M.return(G):G instanceof K.h.Texture2dDataOut?(_=K.s[y],_||(_=new Kn(K.h,K.D),K.s[y]=_),M.return(an(_,G,K.G))):M.return(void 0)})})}function Ut(h,y){for(var G=y.name||"$",H=[].concat(N(y.wants)),K=new h.h.StringList,_=Y(y.wants),M=_.next();!M.done;M=_.next())K.push_back(M.value);_=h.h.PacketListener.implement({onResults:function(q){for(var ct={},s=0;s<y.wants.length;++s)ct[H[s]]=q.get(s);var X=h.listeners[G];X&&(h.C=bt(h,ct,y.outs).then(function(R){R=X(R);for(var T=0;T<y.wants.length;++T){var J=ct[H[T]];typeof J=="object"&&J.hasOwnProperty&&J.hasOwnProperty("delete")&&J.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(K,_),K.delete()}i.onResults=function(h,y){this.listeners[y||"$"]=h},Re("Solution",V),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Nt(h){h=En(h);var y=h.getMesh();if(!y)return h;var G=new Float32Array(y.getVertexBufferList());y.getVertexBufferList=function(){return G};var H=new Uint32Array(y.getIndexBufferList());return y.getIndexBufferList=function(){return H},h}var $t={files:[{url:"face_mesh_solution_packed_assets_loader.js"},{simd:!0,url:"face_mesh_solution_simd_wasm_bin.js"},{simd:!1,url:"face_mesh_solution_wasm_bin.js"}],graph:{url:"face_mesh.binarypb"},listeners:[{wants:["multi_face_geometry","image_transformed","multi_face_landmarks"],outs:{image:"image_transformed",multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:function(h){return h.map(Nt)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(h){return h.map(function(y){return Fe(nn(y),fn).map(Sn)})}}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumFaces:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorNumFaces",fieldName:"int_value"}},refineLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facelandmarkfrontgpu__facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"facelandmarkfrontgpu__facelandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}},Jt=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Yt=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Et=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Dt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ae=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],pe=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],ge=[].concat(N(Jt),N(Yt),N(Et),N(Dt),N(ae),N(pe));function Je(h){h=h||{},h=Object.assign(Object.assign({},$t),h),this.g=new V(h)}i=Je.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(h){this.g.onResults(h)},i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(G){return P(G,y.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(h){return St(this,function y(){var G=this;return ne(y,function(H){return P(H,G.g.send(h),0)})})},i.setOptions=function(h){this.g.setOptions(h)},Re("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Re("FaceMesh",Je),Re("FACEMESH_LIPS",Jt),Re("FACEMESH_LEFT_EYE",Yt),Re("FACEMESH_LEFT_EYEBROW",Et),Re("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Re("FACEMESH_RIGHT_EYE",Dt),Re("FACEMESH_RIGHT_EYEBROW",ae),Re("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Re("FACEMESH_FACE_OVAL",pe),Re("FACEMESH_CONTOURS",ge),Re("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Re("matrixDataToMatrix",function(h){for(var y=h.getCols(),G=h.getRows(),H=h.getPackedDataList(),K=[],_=0;_<G;_++)K.push(Array(y));for(_=0;_<G;_++)for(var M=0;M<y;M++){var q=h.getLayout()===1?_*y+M:M*G+_;K[_][M]=H[q]}return K}),Re("VERSION","0.4.1633559619")}).call(Wi);const Vi={};(function(){var i;function n(t){var c=0;return function(){return c<t.length?{done:!1,value:t[c++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(t,c,a){return t==Array.prototype||t==Object.prototype||(t[c]=a.value),t};function f(t){t=[typeof globalThis=="object"&&globalThis,t,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var c=0;c<t.length;++c){var a=t[c];if(a&&a.Math==Math)return a}throw Error("Cannot find global object")}var Z=f(this);function I(t,c){if(c)t:{var a=Z;t=t.split(".");for(var b=0;b<t.length-1;b++){var S=t[b];if(!(S in a))break t;a=a[S]}t=t[t.length-1],b=a[t],c=c(b),c!=b&&c!=null&&r(a,t,{configurable:!0,writable:!0,value:c})}}I("Symbol",function(t){function c(F){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new a(b+(F||"")+"_"+S++,F)}function a(F,L){this.g=F,r(this,"description",{configurable:!0,writable:!0,value:L})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",S=0;return c}),I("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var c="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<c.length;a++){var b=Z[c[a]];typeof b=="function"&&typeof b.prototype[t]!="function"&&r(b.prototype,t,{configurable:!0,writable:!0,value:function(){return C(n(this))}})}return t});function C(t){return t={next:t},t[Symbol.iterator]=function(){return this},t}function Y(t){var c=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return c?c.call(t):{next:n(t)}}function N(t){if(!(t instanceof Array)){t=Y(t);for(var c,a=[];!(c=t.next()).done;)a.push(c.value);t=a}return t}var et=typeof Object.create=="function"?Object.create:function(t){function c(){}return c.prototype=t,new c},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var wt={a:!0},Ft={};try{Ft.__proto__=wt,pt=Ft.a;break t}catch{}pt=!1}lt=pt?function(t,c){if(t.__proto__=c,t.__proto__!==c)throw new TypeError(t+" is not extensible");return t}:null}var at=lt;function dt(t,c){if(t.prototype=et(c.prototype),t.prototype.constructor=t,at)at(t,c);else for(var a in c)if(a!="prototype")if(Object.defineProperties){var b=Object.getOwnPropertyDescriptor(c,a);b&&Object.defineProperty(t,a,b)}else t[a]=c[a];t.ka=c.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Bt.prototype.o=function(t){this.h=t};function ee(t,c){t.j={V:c,X:!0},t.g=t.m||t.s}Bt.prototype.return=function(t){this.j={return:t},this.g=this.s};function P(t,c,a){return t.g=a,{value:c}}function De(t){this.g=new Bt,this.h=t}function je(t,c){kt(t.g);var a=t.g.i;return a?We(t,"return"in a?a.return:function(b){return{value:b,done:!0}},c,t.g.return):(t.g.return(c),jt(t))}function We(t,c,a,b){try{var S=c.call(t.g.i,a);if(!(S instanceof Object))throw new TypeError("Iterator result "+S+" is not an object");if(!S.done)return t.g.l=!1,S;var F=S.value}catch(L){return t.g.i=null,ee(t.g,L),jt(t)}return t.g.i=null,b.call(t.g,F),jt(t)}function jt(t){for(;t.g.g;)try{var c=t.h(t.g);if(c)return t.g.l=!1,{value:c.value,done:!1}}catch(a){t.g.h=void 0,ee(t.g,a)}if(t.g.l=!1,t.g.j){if(c=t.g.j,t.g.j=null,c.X)throw c.V;return{value:c.return,done:!0}}return{value:void 0,done:!0}}function Hn(t){this.next=function(c){return kt(t.g),t.g.i?c=We(t,t.g.i.next,c,t.g.o):(t.g.o(c),c=jt(t)),c},this.throw=function(c){return kt(t.g),t.g.i?c=We(t,t.g.i.throw,c,t.g.o):(ee(t.g,c),c=jt(t)),c},this.return=function(c){return je(t,c)},this[Symbol.iterator]=function(){return this}}function ne(t){function c(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,S){function F(L){L.done?b(L.value):Promise.resolve(L.value).then(c,a).then(F,S)}F(t.next())})}function Zt(t){return ne(new Hn(new De(t)))}I("Promise",function(t){function c(L){this.h=0,this.i=void 0,this.g=[],this.o=!1;var U=this.j();try{L(U.resolve,U.reject)}catch(j){U.reject(j)}}function a(){this.g=null}function b(L){return L instanceof c?L:new c(function(U){U(L)})}if(t)return t;a.prototype.h=function(L){if(this.g==null){this.g=[];var U=this;this.i(function(){U.l()})}this.g.push(L)};var S=Z.setTimeout;a.prototype.i=function(L){S(L,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var L=this.g;this.g=[];for(var U=0;U<L.length;++U){var j=L[U];L[U]=null;try{j()}catch(Q){this.j(Q)}}}this.g=null},a.prototype.j=function(L){this.i(function(){throw L})},c.prototype.j=function(){function L(Q){return function(D){j||(j=!0,Q.call(U,D))}}var U=this,j=!1;return{resolve:L(this.D),reject:L(this.l)}},c.prototype.D=function(L){if(L===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(L instanceof c)this.G(L);else{t:switch(typeof L){case"object":var U=L!=null;break t;case"function":U=!0;break t;default:U=!1}U?this.A(L):this.m(L)}},c.prototype.A=function(L){var U=void 0;try{U=L.then}catch(j){this.l(j);return}typeof U=="function"?this.H(U,L):this.m(L)},c.prototype.l=function(L){this.s(2,L)},c.prototype.m=function(L){this.s(1,L)},c.prototype.s=function(L,U){if(this.h!=0)throw Error("Cannot settle("+L+", "+U+"): Promise already settled in state"+this.h);this.h=L,this.i=U,this.h===2&&this.F(),this.B()},c.prototype.F=function(){var L=this;S(function(){if(L.C()){var U=Z.console;typeof U<"u"&&U.error(L.i)}},1)},c.prototype.C=function(){if(this.o)return!1;var L=Z.CustomEvent,U=Z.Event,j=Z.dispatchEvent;return typeof j>"u"?!0:(typeof L=="function"?L=new L("unhandledrejection",{cancelable:!0}):typeof U=="function"?L=new U("unhandledrejection",{cancelable:!0}):(L=Z.document.createEvent("CustomEvent"),L.initCustomEvent("unhandledrejection",!1,!0,L)),L.promise=this,L.reason=this.i,j(L))},c.prototype.B=function(){if(this.g!=null){for(var L=0;L<this.g.length;++L)F.h(this.g[L]);this.g=null}};var F=new a;return c.prototype.G=function(L){var U=this.j();L.K(U.resolve,U.reject)},c.prototype.H=function(L,U){var j=this.j();try{L.call(U,j.resolve,j.reject)}catch(Q){j.reject(Q)}},c.prototype.then=function(L,U){function j(ft,mt){return typeof ft=="function"?function(Gt){try{Q(ft(Gt))}catch(vt){D(vt)}}:mt}var Q,D,st=new c(function(ft,mt){Q=ft,D=mt});return this.K(j(L,Q),j(U,D)),st},c.prototype.catch=function(L){return this.then(void 0,L)},c.prototype.K=function(L,U){function j(){switch(Q.h){case 1:L(Q.i);break;case 2:U(Q.i);break;default:throw Error("Unexpected state: "+Q.h)}}var Q=this;this.g==null?F.h(j):this.g.push(j),this.o=!0},c.resolve=b,c.reject=function(L){return new c(function(U,j){j(L)})},c.race=function(L){return new c(function(U,j){for(var Q=Y(L),D=Q.next();!D.done;D=Q.next())b(D.value).K(U,j)})},c.all=function(L){var U=Y(L),j=U.next();return j.done?b([]):new c(function(Q,D){function st(Gt){return function(vt){ft[Gt]=vt,mt--,mt==0&&Q(ft)}}var ft=[],mt=0;do ft.push(void 0),mt++,b(j.value).K(st(ft.length-1),D),j=U.next();while(!j.done)})},c});function $e(t,c){t instanceof String&&(t+="");var a=0,b=!1,S={next:function(){if(!b&&a<t.length){var F=a++;return{value:c(F,t[F]),done:!1}}return b=!0,{done:!0,value:void 0}}};return S[Symbol.iterator]=function(){return S},S}var An=typeof Object.assign=="function"?Object.assign:function(t,c){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var S in b)Object.prototype.hasOwnProperty.call(b,S)&&(t[S]=b[S])}return t};I("Object.assign",function(t){return t||An}),I("Object.is",function(t){return t||function(c,a){return c===a?c!==0||1/c===1/a:c!==c&&a!==a}}),I("Array.prototype.includes",function(t){return t||function(c,a){var b=this;b instanceof String&&(b=String(b));var S=b.length;for(a=a||0,0>a&&(a=Math.max(a+S,0));a<S;a++){var F=b[a];if(F===c||Object.is(F,c))return!0}return!1}}),I("String.prototype.includes",function(t){return t||function(c,a){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(c instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(c,a||0)!==-1}}),I("Array.prototype.keys",function(t){return t||function(){return $e(this,function(c){return c})}});var Re=this||self;function Ht(t,c){t=t.split(".");var a=Re;t[0]in a||typeof a.execScript>"u"||a.execScript("var "+t[0]);for(var b;t.length&&(b=t.shift());)t.length||c===void 0?a[b]&&a[b]!==Object.prototype[b]?a=a[b]:a=a[b]={}:a[b]=c}function Ye(t){throw t}function sn(t,c){Ye(Error("Invalid wire type: "+t+" (at position "+c+")"))}function Gn(){Ye(Error("Failed to read varint, encoding is invalid."))}function Fn(t,c){return c=String.fromCharCode.apply(null,c),t==null?c:t+c}var Rn,Nn=typeof TextDecoder<"u",dn,pn=typeof TextEncoder<"u";function kn(t){if(pn)t=(dn||(dn=new TextEncoder)).encode(t);else{var c=void 0;c=c===void 0?!1:c;for(var a=0,b=new Uint8Array(3*t.length),S=0;S<t.length;S++){var F=t.charCodeAt(S);if(128>F)b[a++]=F;else{if(2048>F)b[a++]=F>>6|192;else{if(55296<=F&&57343>=F){if(56319>=F&&S<t.length){var L=t.charCodeAt(++S);if(56320<=L&&57343>=L){F=1024*(F-55296)+L-56320+65536,b[a++]=F>>18|240,b[a++]=F>>12&63|128,b[a++]=F>>6&63|128,b[a++]=F&63|128;continue}else S--}if(c)throw Error("Found an unpaired surrogate");F=65533}b[a++]=F>>12|224,b[a++]=F>>6&63|128}b[a++]=F&63|128}}t=b.subarray(0,a)}return t}var Cn={},ze=null;function Me(t){var c;c===void 0&&(c=0),he(),c=Cn[c];for(var a=Array(Math.floor(t.length/3)),b=c[64]||"",S=0,F=0;S<t.length-2;S+=3){var L=t[S],U=t[S+1],j=t[S+2],Q=c[L>>2];L=c[(L&3)<<4|U>>4],U=c[(U&15)<<2|j>>6],j=c[j&63],a[F++]=Q+L+U+j}switch(Q=0,j=b,t.length-S){case 2:Q=t[S+1],j=c[(Q&15)<<2]||b;case 1:t=t[S],a[F]=c[t>>2]+c[(t&3)<<4|Q>>4]+j+b}return a.join("")}function xn(t){var c=t.length,a=3*c/4;a%3?a=Math.floor(a):"=.".indexOf(t[c-1])!=-1&&(a="=.".indexOf(t[c-2])!=-1?a-2:a-1);var b=new Uint8Array(a),S=0;return Xn(t,function(F){b[S++]=F}),b.subarray(0,S)}function Xn(t,c){function a(j){for(;b<t.length;){var Q=t.charAt(b++),D=ze[Q];if(D!=null)return D;if(!/^[\s\xa0]*$/.test(Q))throw Error("Unknown base64 encoding at char: "+Q)}return j}he();for(var b=0;;){var S=a(-1),F=a(0),L=a(64),U=a(64);if(U===64&&S===-1)break;c(S<<2|F>>4),L!=64&&(c(F<<4&240|L>>2),U!=64&&c(L<<6&192|U))}}function he(){if(!ze){ze={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),c=["+/=","+/","-_=","-_.","-_"],a=0;5>a;a++){var b=t.concat(c[a].split(""));Cn[a]=b;for(var S=0;S<b.length;S++){var F=b[S];ze[F]===void 0&&(ze[F]=S)}}}}var Se=typeof Uint8Array=="function",Oe;function re(t){if(this.g=t,t!==null&&t.length===0)throw Error("ByteString should be constructed with non-empty values")}var Ve=typeof Uint8Array.prototype.slice=="function";function ln(t,c,a){return c===a?Oe||(Oe=new Uint8Array(0)):Ve?t.slice(c,a):new Uint8Array(t.subarray(c,a))}var Be=0,Qt=0;function Ze(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return xn(t);if(t.constructor===re){if(t.g==null)var c=Oe||(Oe=new Uint8Array(0));else{c=Uint8Array;var a=t.g;a=a==null||Se&&a!=null&&a instanceof Uint8Array?a:typeof a=="string"?xn(a):null,t=t.g=a,c=new c(t)}return c}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Le(t,c){c=c===void 0?{}:c,c=c.v===void 0?!1:c.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=c,t&&Mt(this,t)}function Mt(t,c){t.h=Ze(c),t.l=0,t.i=t.h.length,t.g=t.l}Le.prototype.reset=function(){this.g=this.l};function xe(t){for(var c=128,a=0,b=0,S=0;4>S&&128<=c;S++)c=t.h[t.g++],a|=(c&127)<<7*S;if(128<=c&&(c=t.h[t.g++],a|=(c&127)<<28,b|=(c&127)>>4),128<=c)for(S=0;5>S&&128<=c;S++)c=t.h[t.g++],b|=(c&127)<<7*S+3;if(128>c)return t=a>>>0,c=b>>>0,(b=c&2147483648)&&(t=~t+1>>>0,c=~c>>>0,t==0&&(c=c+1>>>0)),t=4294967296*c+(t>>>0),b?-t:t;t.j=!0,Gn()}function zt(t){t.g>t.i&&(t.j=!0,Ye(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function ye(t){var c=t.h,a=c[t.g],b=a&127;return 128>a?(t.g+=1,zt(t),b):(a=c[t.g+1],b|=(a&127)<<7,128>a?(t.g+=2,zt(t),b):(a=c[t.g+2],b|=(a&127)<<14,128>a?(t.g+=3,zt(t),b):(a=c[t.g+3],b|=(a&127)<<21,128>a?(t.g+=4,zt(t),b):(a=c[t.g+4],b|=(a&15)<<28,128>a?(t.g+=5,zt(t),b>>>0):(t.g+=5,128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]?(t.j=!0,Gn(),b):(zt(t),b))))))}function we(t){var c=t.h[t.g],a=t.h[t.g+1],b=t.h[t.g+2],S=t.h[t.g+3];return t.g+=4,zt(t),(c<<0|a<<8|b<<16|S<<24)>>>0}Le.prototype.m=function(){var t=we(this),c=2*(t>>31)+1,a=t>>>23&255;return t&=8388607,a==255?t?NaN:1/0*c:a==0?c*Math.pow(2,-149)*t:c*Math.pow(2,a-150)*(t+Math.pow(2,23))};var qe=[];function Xe(){this.g=new Uint8Array(64),this.h=0}function Ot(t,c){if(!(t.h+1<t.g.length)){var a=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(a)}t.g[t.h++]=c}Xe.prototype.length=function(){return this.h},Xe.prototype.end=function(){var t=this.g,c=this.h;return this.h=0,ln(t,0,c)};function Ae(t,c){for(;127<c;)Ot(t,c&127|128),c>>>=7;Ot(t,c)}function Pe(t){var c={},a=c.O===void 0?!1:c.O;this.m={v:c.v===void 0?!1:c.v},this.O=a,c=this.m,qe.length?(a=qe.pop(),c&&(a.v=c.v),t&&Mt(a,t),t=a):t=new Le(t,c),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Pe.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Ie(t){var c=t.g;if((c=c.g==c.i)||(c=t.j)||(c=t.g,c=c.j||0>c.g||c.g>c.i),c)return!1;t.l=t.g.g;var a=ye(t.g);return c=a>>>3,a&=7,0<=a&&5>=a?(t.i=c,t.h=a,!0):(t.j=!0,sn(a,t.l),!1)}function Wn(t){switch(t.h){case 0:if(t.h!=0)Wn(t);else t:{t=t.g;for(var c=t.g,a=0;10>a;a++){if((t.h[c]&128)===0){t.g=c+1,zt(t);break t}c++}t.j=!0,Gn()}break;case 1:t=t.g,t.g+=8,zt(t);break;case 2:t.h!=2?Wn(t):(c=ye(t.g),t=t.g,t.g+=c,zt(t));break;case 5:t=t.g,t.g+=4,zt(t);break;case 3:c=t.i;do{if(!Ie(t)){t.j=!0,Ye(Error("Unmatched start-group tag: stream EOF"));break}if(t.h==4){t.i!=c&&(t.j=!0,Ye(Error("Unmatched end-group tag")));break}Wn(t)}while(1);break;default:t.j=!0,sn(t.h,t.l)}}function cn(t,c,a){var b=t.g.i,S=ye(t.g),F=t.g.g+S;if(t.g.i=F,a(c,t),a=F-t.g.g,a!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(S+" bytes, instead read "+(S-a)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return t.g.g=F,t.g.i=b,c}var _e=[];function un(){this.h=[],this.i=0,this.g=new Xe}function ve(t,c){c.length!==0&&(t.h.push(c),t.i+=c.length)}function Te(t,c,a){Ae(t.g,8*c+2),Ae(t.g,a.length),ve(t,t.g.end()),ve(t,a)}var Ge=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function ie(t){return Object.isFrozen(t)||(Ge?t[Ge]|=1:t.g!==void 0?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function Qe(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function qt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(Se&&t!=null&&t instanceof Uint8Array)return Me(t);if(t instanceof re){if(t.g==null)t="";else{var c=t.g;c=c==null||typeof c=="string"?c:Se&&c instanceof Uint8Array?Me(c):null,t=t.g=c}return t}}return t}function Pt(t,c){if(t!=null)return Array.isArray(t)||Qe(t)?hn(t,c):c(t)}function hn(t,c){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=Pt(t[b],c);if(c=Array.isArray(t)){var S;Ge?S=t[Ge]:S=t.g,c=(S==null?0:S)&1}return c&&ie(a),a}S={};for(a in t)S[a]=Pt(t[a],c);return S}function fe(t){return t=qt(t),Array.isArray(t)?hn(t,fe):t}var Lt;function Vt(t,c,a){var b=Lt;Lt=null,t||(t=b),b=this.constructor.ha,t||(t=b?[b]:[]),this.i=(b?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t;t:{if(b=this.u.length,t=b-1,b&&(b=this.u[t],Qe(b))){this.j=t-this.i,this.h=b;break t}c!==void 0&&-1<c?(this.j=Math.max(c,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE}if(a)for(c=0;c<a.length;c++)t=a[c],t<this.j?(t+=this.i,(b=this.u[t])?Array.isArray(b)&&ie(b):this.u[t]=oe):(Fe(this),(b=this.h[t])?Array.isArray(b)&&ie(b):this.h[t]=oe)}var oe=Object.freeze(ie([]));function Fe(t){var c=t.j+t.i;t.u[c]||(t.h=t.u[c]={})}function te(t,c,a){return c===-1?null:(a===void 0?0:a)||c>=t.j?t.h?t.h[c]:void 0:t.u[c+t.i]}function se(t,c,a){a=a===void 0?!1:a;var b=te(t,c,a);return b==null&&(b=oe),b===oe&&(b=ie(b.slice()),ut(t,c,b,a)),b}function tt(t,c){var a=se(t,c);if(t.l||(t.l={}),!t.l[c]){for(var b=0;b<a.length;b++)a[b]=+a[b];t.l[c]=!0}return a}function it(t,c,a){return t=te(t,c),t=t==null?t:+t,t==null?a===void 0?0:a:t}function ut(t,c,a,b){(b===void 0?0:b)||c>=t.j?(Fe(t),t.h[c]=a):t.u[c+t.i]=a}function _t(t,c,a,b){a!==b?ut(t,c,a):ut(t,c,void 0,!1)}function de(t,c,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var S=te(t,a,!1);return S==null?b:(c=new c(S),t.g[a]=c)}function ue(t,c,a){t.g||(t.g={});var b=t.g[a];if(!b){var S=se(t,a,!1);b=[];for(var F=0;F<S.length;F++)b[F]=new c(S[F]);t.g[a]=b}return b}function St(t,c,a,b,S){var F=ue(t,b,c);a=a||new b,t=se(t,c),S!=null?(F.splice(S,0,a),t.splice(S,0,a.u)):(F.push(a),t.push(a.u))}Vt.prototype.toJSON=function(){return hn(this.u,fe)},Vt.prototype.toString=function(){return this.u.toString()};function me(t,c){return t=te(t,c),t==null?0:t}function He(t,c){return t=te(t,c),t==null?"":t}function tn(t,c){if(t=t.m){ve(c,c.g.end());for(var a=0;a<t.length;a++)ve(c,t[a])}}var en=Symbol();function fn(t,c,a){return t[en]||(t[en]=function(b,S){return c(b,S,a)})}function bn(t){var c=t[en];if(!c){var a=t[rn]||(t[rn]=t());c=function(b,S){return Ne(b,S,a)},t[en]=c}return c}function Ce(t){var c=t.da;if(c)return bn(c);if(c=t.ia){var a=t.Y;return delete t.Y,fn(t.W.g,c,a)}}function nn(t){var c=Ce(t),a=t.W,b=t.ea;return c?function(S,F){return b(S,F,a,c)}:function(S,F){return b(S,F,a)}}function jn(t){var c=t[0];switch(t.length){case 2:var a=t[1];return function(mt,Gt,vt){return c(mt,Gt,vt,a)};case 3:var b=t[1],S=bn(t[2]);return function(mt,Gt,vt){return c(mt,Gt,vt,b,S)};case 4:var F=t[1],L=t[3],U=bn(t[2]);return function(mt,Gt,vt){return c(mt,Gt,vt,F,U,L)};case 5:var j=t[1],Q=fn(j,t[3],t[4]);return function(mt,Gt,vt){return c(mt,Gt,vt,j,Q)};case 6:var D=t[1],st=t[5],ft=fn(D,t[3],t[4]);return function(mt,Gt,vt){return c(mt,Gt,vt,D,ft,st)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var rn=Symbol();function Ne(t,c,a){for(;Ie(c)&&c.h!=4;){var b=c.i,S=a[b];if(S)Array.isArray(S)&&(S=a[b]=jn(S));else{var F=a[0];F&&(F=F[b])&&(S=a[b]=nn(F))}S&&S(c,t,b)||(S=c,b=t,F=S.l,Wn(S),S.O||(S=ln(S.g.h,F,S.g.g),(F=b.m)?F.push(S):b.m=[S]))}return t}function gn(t,c){var a=new un;if(c(t,a),t=a.i+a.g.length(),t===0)a=new Uint8Array(0);else{t=new Uint8Array(t);for(var b=a.h,S=b.length,F=c=0;F<S;F++){var L=b[F];L.length!==0&&(t.set(L,c),c+=L.length)}b=a.g,S=b.h,S!==0&&(t.set(b.g.subarray(0,S),c),b.h=0),a.h=[t],a=t}return a}function In(t,c,a){if(_e.length){var b=_e.pop();t&&(Mt(b.g,t),b.i=-1,b.h=-1),t=b}else t=new Pe(t);try{var S=new c;return Ne(S,t,a[rn]||(a[rn]=a()))}finally{c=t.g,c.h=null,c.l=0,c.i=0,c.g=0,c.j=!1,c.v=!1,t.i=-1,t.h=-1,t.j=!1,100>_e.length&&_e.push(t)}}function Ke(t,c,a){if(c=te(c,a),c!=null){Ae(t.g,8*a+5),t=t.g;var b=c;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Be=Qt=0:(Qt=0,Be=2147483648):isNaN(b)?(Qt=0,Be=2147483647):34028234663852886e22<b?(Qt=0,Be=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),Qt=0,Be=(a<<31|b)>>>0):(c=Math.floor(Math.log(b)/Math.LN2),b*=Math.pow(2,-c),b=Math.round(8388608*b),16777216<=b&&++c,Qt=0,Be=(a<<31|c+127<<23|b&8388607)>>>0),a=Be,Ot(t,a>>>0&255),Ot(t,a>>>8&255),Ot(t,a>>>16&255),Ot(t,a>>>24&255)}}function En(t,c,a){if(t.h!==1)return!1;var b=t.g;t=we(b);var S=we(b);b=2*(S>>31)+1;var F=S>>>20&2047;return t=4294967296*(S&1048575)+t,_t(c,a,F==2047?t?NaN:1/0*b:F==0?b*Math.pow(2,-1074)*t:b*Math.pow(2,F-1075)*(t+4503599627370496),0),!0}function on(t,c,a){return t.h!==5?!1:(ut(c,a,t.g.m()),!0)}function Zn(t,c,a){if(t.h!==5&&t.h!==2)return!1;if(c=se(c,a),t.h==2){a=Le.prototype.m;var b=ye(t.g);for(b=t.g.g+b;t.g.g<b;)c.push(a.call(t.g))}else c.push(t.g.m());return!0}function Sn(t,c,a){return t.h!==5?!1:(t=t.g.m(),_t(c,a,t,0),!0)}function Kn(t,c,a){return t.h!==0?!1:(ut(c,a,xe(t.g)),!0)}function an(t,c,a){return t.h!==0?!1:(ut(c,a,ye(t.g)),!0)}function Yn(t,c,a){return t.h!==0?!1:(t=ye(t.g),_t(c,a,t,0),!0)}function _n(t,c,a){return t.h!==0?!1:(t=!!ye(t.g),_t(c,a,t,!1),!0)}function Qn(t,c,a){if(t.h!==2)return!1;var b=ye(t.g);t=t.g;var S=t.g;t.g+=b,zt(t),t=t.h;var F;if(Nn)(F=Rn)||(F=Rn=new TextDecoder("utf-8",{fatal:!1})),F=F.decode(t.subarray(S,S+b));else{b=S+b;for(var L=[],U=null,j,Q,D;S<b;)j=t[S++],128>j?L.push(j):224>j?S>=b?L.push(65533):(Q=t[S++],194>j||(Q&192)!==128?(S--,L.push(65533)):L.push((j&31)<<6|Q&63)):240>j?S>=b-1?L.push(65533):(Q=t[S++],(Q&192)!==128||j===224&&160>Q||j===237&&160<=Q||((F=t[S++])&192)!==128?(S--,L.push(65533)):L.push((j&15)<<12|(Q&63)<<6|F&63)):244>=j?S>=b-2?L.push(65533):(Q=t[S++],(Q&192)!==128||(j<<28)+(Q-144)>>30!==0||((F=t[S++])&192)!==128||((D=t[S++])&192)!==128?(S--,L.push(65533)):(j=(j&7)<<18|(Q&63)<<12|(F&63)<<6|D&63,j-=65536,L.push((j>>10&1023)+55296,(j&1023)+56320))):L.push(65533),8192<=L.length&&(U=Fn(U,L),L.length=0);F=Fn(U,L)}return ut(c,a,F),!0}function wn(t,c,a,b,S){return t.h!==2?!1:(t=cn(t,new b,S),c.g||(c.g={}),b=t&&t.u,c.g[a]=t,ut(c,a,b,!1),!0)}function Ln(t,c,a,b,S){return t.h!==2?!1:(t=cn(t,new b,S),St(c,a,t,b,void 0),!0)}function p(t,c,a){return t.h!==0?!1:(ut(c,a,xe(t.g)),!0)}function W(t){Vt.call(this,t)}dt(W,Vt);function V(){return{1:an,2:on,3:Qn,4:Qn}}function E(t,c){var a=te(t,1);if(a!=null&&a!=null){Ae(c.g,8);var b=c.g;if(0<=a)Ae(b,a);else{for(var S=0;9>S;S++)Ot(b,a&127|128),a>>=7;Ot(b,1)}}Ke(c,t,2),b=te(t,3),b!=null&&Te(c,3,kn(b)),b=te(t,4),b!=null&&Te(c,4,kn(b)),tn(t,c)}function O(t){Vt.call(this,t,-1,z)}dt(O,Vt),O.prototype.addClassification=function(t,c){return St(this,1,t,W,c),this};function ot(){return{1:[Ln,W,V]}}var z=[1];function rt(t){Vt.call(this,t)}dt(rt,Vt);function bt(){return{1:on,2:on,3:on,4:on,5:on}}function Rt(t,c){Ke(c,t,1),Ke(c,t,2),Ke(c,t,3),Ke(c,t,4),Ke(c,t,5),tn(t,c)}function Ut(t){Vt.call(this,t,-1,$t)}dt(Ut,Vt);function Nt(){return{1:[Ln,rt,bt]}}var $t=[1];function Jt(t){Vt.call(this,t)}dt(Jt,Vt);function Yt(){return{1:on,2:on,3:on,4:on,5:on,6:Kn}}function Et(t,c){Ke(c,t,1),Ke(c,t,2),Ke(c,t,3),Ke(c,t,4),Ke(c,t,5);var a=te(t,6);if(a!=null&&a!=null){Ae(c.g,48);var b=c.g,S=a;a=0>S,S=Math.abs(S);var F=S>>>0;for(S=Math.floor((S-F)/4294967296),S>>>=0,a&&(S=~S>>>0,F=(~F>>>0)+1,4294967295<F&&(F=0,S++,4294967295<S&&(S=0))),Be=F,Qt=S,a=Be,F=Qt;0<F||127<a;)Ot(b,a&127|128),a=(a>>>7|F<<25)>>>0,F>>>=7;Ot(b,a)}tn(t,c)}function Dt(t){Vt.call(this,t,-1,Je)}dt(Dt,Vt);function ae(){return{1:p,2:p,3:Zn,4:[wn,pe,ge],5:an,6:an,7:Zn,8:Zn,9:Zn}}function pe(t){Vt.call(this,t)}dt(pe,Vt);function ge(){return{1:on,2:on,3:on}}var Je=[3,7,8,9];function h(t){Vt.call(this,t)}dt(h,Vt);function y(){return{1:Sn,2:Sn,3:Sn}}function G(t){Vt.call(this,t)}dt(G,Vt);function H(){return{1:Sn,2:Sn,3:Sn}}function K(t){Vt.call(this,t)}dt(K,Vt);function _(){return{1:Yn,2:[wn,G,H],3:[wn,h,y],4:_n}}function M(t){Vt.call(this,t,-1,ct)}dt(M,Vt);function q(){return{1:Yn,2:[Ln,K,_],3:Sn,4:Zn,5:Zn,6:Zn}}var ct=[2,4,5,6];function s(t){Vt.call(this,t,-1,R)}dt(s,Vt);function X(){return{1:Yn,2:[Ln,M,q],3:[wn,Dt,ae],4:En,5:Zn,6:Zn}}var R=[2,5,6];function T(t,c,a){if(a=t.createShader(a===0?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(a,c),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
87
|
+
`+G.getProgramInfoLog(_));H=h.m=_,G.useProgram(H),K=G.getUniformLocation(H,"sampler0"),h.j={I:G.getAttribLocation(H,"aVertex"),H:G.getAttribLocation(H,"aTex"),da:K},h.s=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.enableVertexAttribArray(h.j.I),G.vertexAttribPointer(h.j.I,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),h.o=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.enableVertexAttribArray(h.j.H),G.vertexAttribPointer(h.j.H,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),G.uniform1i(K,0)}H=h.j,G.useProgram(h.m),G.canvas.width=y.width,G.canvas.height=y.height,G.viewport(0,0,y.width,y.height),G.activeTexture(G.TEXTURE0),h.h.bindTexture2d(y.glName),G.enableVertexAttribArray(H.I),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.vertexAttribPointer(H.I,2,G.FLOAT,!1,0,0),G.enableVertexAttribArray(H.H),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.vertexAttribPointer(H.H,2,G.FLOAT,!1,0,0),G.bindFramebuffer(G.DRAW_FRAMEBUFFER?G.DRAW_FRAMEBUFFER:G.FRAMEBUFFER,null),G.clearColor(0,0,0,0),G.clear(G.COLOR_BUFFER_BIT),G.colorMask(!0,!0,!0,!0),G.drawArrays(G.TRIANGLE_FAN,0,4),G.disableVertexAttribArray(H.I),G.disableVertexAttribArray(H.H),G.bindBuffer(G.ARRAY_BUFFER,null),h.h.bindTexture2d(0)}function _n(h){this.g=h}var Qn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Yn(h,y){return y+h}function Cn(h,y){window[h]=y}function p(h){var y=document.createElement("script");return y.setAttribute("src",h),y.setAttribute("crossorigin","anonymous"),new Promise(function(G){y.addEventListener("load",function(){G()},!1),y.addEventListener("error",function(){G()},!1),document.body.appendChild(y)})}function W(){return St(this,function h(){return ne(h,function(y){switch(y.g){case 1:return y.m=2,P(y,WebAssembly.instantiate(Qn),4);case 4:y.g=3,y.m=0;break;case 2:return y.m=0,y.j=null,y.return(!1);case 3:return y.return(!0)}})})}function V(h){if(this.g=h,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=h&&h.locateFile||Yn,typeof window=="object")var y=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")y=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=y,h.options){y=T(Object.keys(h.options));for(var G=y.next();!G.done;G=y.next()){G=G.value;var H=h.options[G].default;H!==void 0&&(this.j[G]=typeof H=="function"?H():H)}}}i=V.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function E(h,y){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(y):h.g.files}function O(h){return St(h,function y(){var G=this,H,K,_,M,q,ct,s,X,R,w,N;return ne(y,function(A){switch(A.g){case 1:return H=G,G.R?(K=E(G,G.j),P(A,W(),2)):A.return();case 2:if(_=A.h,typeof window=="object")return Cn("createMediapipeSolutionsWasm",{locateFile:G.locateFile}),Cn("createMediapipeSolutionsPackedAssets",{locateFile:G.locateFile}),ct=K.filter(function(B){return B.data!==void 0}),s=K.filter(function(B){return B.data===void 0}),X=Promise.all(ct.map(function(B){var nt=rt(H,B.url);if(B.path!==void 0){var $=B.path;nt=nt.then(function(yt){return H.overrideFile($,yt),Promise.resolve(yt)})}return nt})),R=Promise.all(s.map(function(B){return B.simd===void 0||B.simd&&_||!B.simd&&!_?p(H.locateFile(B.url,H.S)):Promise.resolve()})).then(function(){return St(H,function B(){var nt,$,yt=this;return ne(B,function(Xt){if(Xt.g==1)return nt=window.createMediapipeSolutionsWasm,$=window.createMediapipeSolutionsPackedAssets,P(Xt,nt($),2);yt.h=Xt.h,Xt.g=0})})}),w=function(){return St(H,function B(){var nt=this;return ne(B,function($){return nt.g.graph&&nt.g.graph.url?$=P($,rt(nt,nt.g.graph.url),0):($.g=0,$=void 0),$})})}(),P(A,Promise.all([R,X,w]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return M=K.filter(function(B){return B.simd===void 0||B.simd&&_||!B.simd&&!_}).map(function(B){return H.locateFile(B.url,H.S)}),importScripts.apply(null,J(M)),P(A,createMediapipeSolutionsWasm(Module),6);case 6:G.h=A.h,G.l=new OffscreenCanvas(1,1),G.h.canvas=G.l,q=G.h.GL.createContext(G.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),G.h.GL.makeContextCurrent(q),A.g=4;break;case 7:if(G.l=document.createElement("canvas"),N=G.l.getContext("webgl2",{}),!N&&(N=G.l.getContext("webgl",{}),!N))return alert("Failed to create WebGL canvas context when passing video frame."),A.return();G.D=N,G.h.canvas=G.l,G.h.createContext(G.l,!0,!0,{});case 4:G.i=new G.h.SolutionWasm,G.R=!1,A.g=0}})})}function ot(h){return St(h,function y(){var G=this,H,K,_,M,q,ct,s,X;return ne(y,function(R){if(R.g==1){if(G.g.graph&&G.g.graph.url&&G.P===G.g.graph.url)return R.return();if(G.o=!0,!G.g.graph||!G.g.graph.url){R.g=2;return}return G.P=G.g.graph.url,P(R,rt(G,G.g.graph.url),3)}for(R.g!=2&&(H=R.h,G.i.loadGraph(H)),K=T(Object.keys(G.B)),_=K.next();!_.done;_=K.next())M=_.value,G.i.overrideFile(M,G.B[M]);if(G.B={},G.g.listeners)for(q=T(G.g.listeners),ct=q.next();!ct.done;ct=q.next())s=ct.value,Ut(G,s);X=G.j,G.j={},G.setOptions(X),R.g=0})})}i.reset=function(){return St(this,function h(){var y=this;return ne(h,function(G){y.i&&(y.i.reset(),y.m={},y.s={}),G.g=0})})},i.setOptions=function(h,y){var G=this;if(y=y||this.g.options){for(var H=[],K=[],_={},M=T(Object.keys(h)),q=M.next();!q.done;_={K:_.K,L:_.L},q=M.next()){var ct=q.value;ct in this.j&&this.j[ct]===h[ct]||(this.j[ct]=h[ct],q=y[ct],q!==void 0&&(q.onChange&&(_.K=q.onChange,_.L=h[ct],H.push(function(s){return function(){return St(G,function X(){var R,w=this;return ne(X,function(N){if(N.g==1)return P(N,s.K(s.L),2);R=N.h,R===!0&&(w.o=!0),N.g=0})})}}(_))),q.graphOptionXref&&(ct={valueNumber:q.type===1?h[ct]:0,valueBoolean:q.type===0?h[ct]:!1,valueString:q.type===2?h[ct]:""},q=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),q.graphOptionXref),ct),K.push(q))))}(H.length!==0||K.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(K),this.u=(this.u===void 0?[]:this.u).concat(H))}};function j(h){return St(h,function y(){var G=this,H,K,_,M,q,ct,s;return ne(y,function(X){switch(X.g){case 1:if(!G.o)return X.return();if(!G.u){X.g=2;break}H=T(G.u),K=H.next();case 3:if(K.done){X.g=5;break}return _=K.value,P(X,_(),4);case 4:K=H.next(),X.g=3;break;case 5:G.u=void 0;case 2:if(G.A){for(M=new G.h.GraphOptionChangeRequestList,q=T(G.A),ct=q.next();!ct.done;ct=q.next())s=ct.value,M.push_back(s);G.i.changeOptions(M),M.delete(),G.A=void 0}G.o=!1,X.g=0}})})}i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(G){return G.g==1?P(G,O(y),2):G.g!=3?P(G,ot(y),3):P(G,j(y),0)})})};function rt(h,y){return St(h,function G(){var H=this,K,_;return ne(G,function(M){return y in H.F?M.return(H.F[y]):(K=H.locateFile(y,""),_=fetch(K).then(function(q){return q.arrayBuffer()}),H.F[y]=_,M.return(_))})})}i.overrideFile=function(h,y){this.i?this.i.overrideFile(h,y):this.B[h]=y},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(h,y){return St(this,function G(){var H=this,K,_,M,q,ct,s,X,R,w;return ne(G,function(N){switch(N.g){case 1:return H.g.inputs?(K=1e3*(y==null?performance.now():y),P(N,H.C,2)):N.return();case 2:return P(N,H.initialize(),3);case 3:for(_=new H.h.PacketDataList,M=T(Object.keys(h)),q=M.next();!q.done;q=M.next())if(ct=q.value,s=H.g.inputs[ct]){t:{var A=H,B=h[ct];switch(s.type){case"video":var nt=A.m[s.stream];if(nt||(nt=new Kn(A.h,A.D),A.m[s.stream]=nt),A=nt,A.l===0&&(A.l=A.h.createTexture()),typeof HTMLVideoElement<"u"&&B instanceof HTMLVideoElement){var $=B.videoWidth;nt=B.videoHeight}else typeof HTMLImageElement<"u"&&B instanceof HTMLImageElement?($=B.naturalWidth,nt=B.naturalHeight):($=B.width,nt=B.height);nt={glName:A.l,width:$,height:nt},$=A.g,$.canvas.width=nt.width,$.canvas.height=nt.height,$.activeTexture($.TEXTURE0),A.h.bindTexture2d(A.l),$.texImage2D($.TEXTURE_2D,0,$.RGBA,$.RGBA,$.UNSIGNED_BYTE,B),A.h.bindTexture2d(0),A=nt;break t;case"detections":for(nt=A.m[s.stream],nt||(nt=new _n(A.h),A.m[s.stream]=nt),A=nt,A.data||(A.data=new A.g.DetectionListData),A.data.reset(B.length),nt=0;nt<B.length;++nt){$=B[nt];var yt=A.data,Xt=yt.setBoundingBox,Kt=nt,xt=$.T,ht=new rn;Vt(ht,1,xt.Z),Vt(ht,2,xt.$),Vt(ht,3,xt.height),Vt(ht,4,xt.width),Vt(ht,5,xt.rotation),Vt(ht,6,xt.X);var Wt=xt=new Xe;Pe(Wt,1,qt(ht,1)),Pe(Wt,2,qt(ht,2)),Pe(Wt,3,qt(ht,3)),Pe(Wt,4,qt(ht,4)),Pe(Wt,5,qt(ht,5));var It=qt(ht,6);if(It!=null&&It!=null){Qt(Wt.g,48);var wt=Wt.g,Ft=It;It=0>Ft,Ft=Math.abs(Ft);var l=Ft>>>0;for(Ft=Math.floor((Ft-l)/4294967296),Ft>>>=0,It&&(Ft=~Ft>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Ft++,4294967295<Ft&&(Ft=0))),he=l,Se=Ft,It=he,l=Se;0<l||127<It;)wt.push(It&127|128),It=(It>>>7|l<<25)>>>0,l>>>=7;wt.push(It)}if(it(ht,Wt),xt=Ae(xt),Xt.call(yt,Kt,xt),$.O)for(yt=0;yt<$.O.length;++yt)ht=$.O[yt],Wt=!!ht.visibility,Xt=A.data,Kt=Xt.addNormalizedLandmark,xt=nt,ht=Object.assign(Object.assign({},ht),{visibility:Wt?ht.visibility:0}),Wt=new fn,Vt(Wt,1,ht.x),Vt(Wt,2,ht.y),Vt(Wt,3,ht.z),ht.visibility&&Vt(Wt,4,ht.visibility),wt=ht=new Xe,Pe(wt,1,qt(Wt,1)),Pe(wt,2,qt(Wt,2)),Pe(wt,3,qt(Wt,3)),Pe(wt,4,qt(Wt,4)),Pe(wt,5,qt(Wt,5)),it(Wt,wt),ht=Ae(ht),Kt.call(Xt,xt,ht);if($.M)for(yt=0;yt<$.M.length;++yt){if(Xt=A.data,Kt=Xt.addClassification,xt=nt,ht=$.M[yt],Wt=new me,Vt(Wt,2,ht.Y),ht.index&&Vt(Wt,1,ht.index),ht.label&&Vt(Wt,3,ht.label),ht.displayName&&Vt(Wt,4,ht.displayName),wt=ht=new Xe,l=qt(Wt,1),l!=null&&l!=null)if(Qt(wt.g,8),It=wt.g,0<=l)Qt(It,l);else{for(Ft=0;9>Ft;Ft++)It.push(l&127|128),l>>=7;It.push(1)}Pe(wt,2,qt(Wt,2)),It=qt(Wt,3),It!=null&&(It=Rn(It),Qt(wt.g,26),Qt(wt.g,It.length),Ot(wt,wt.g.end()),Ot(wt,It)),It=qt(Wt,4),It!=null&&(It=Rn(It),Qt(wt.g,34),Qt(wt.g,It.length),Ot(wt,wt.g.end()),Ot(wt,It)),it(Wt,wt),ht=Ae(ht),Kt.call(Xt,xt,ht)}}A=A.data;break t;default:A={}}}switch(X=A,R=s.stream,s.type){case"video":_.pushTexture2d(Object.assign(Object.assign({},X),{stream:R,timestamp:K}));break;case"detections":w=X,w.stream=R,w.timestamp=K,_.pushDetectionList(w);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return H.i.send(_),P(N,H.C,4);case 4:_.delete(),N.g=0}})})};function bt(h,y,G){return St(h,function H(){var K,_,M,q,ct,s,X=this,R,w,N,A,B,nt,$,yt;return ne(H,function(Xt){switch(Xt.g){case 1:if(!G)return Xt.return(y);for(K={},_=0,M=T(Object.keys(G)),q=M.next();!q.done;q=M.next())ct=q.value,s=G[ct],typeof s!="string"&&s.type==="texture"&&y[s.stream]!==void 0&&++_;1<_&&(X.G=!1),R=T(Object.keys(G)),q=R.next();case 2:if(q.done){Xt.g=4;break}if(w=q.value,N=G[w],typeof N=="string")return $=K,yt=w,P(Xt,Rt(X,w,y[N]),14);if(A=y[N.stream],N.type==="detection_list"){if(A){for(var Kt=A.getRectList(),xt=A.getLandmarksList(),ht=A.getClassificationsList(),Wt=[],It=0;It<Kt.size();++It){var wt=Kt.get(It);t:{var Ft=new rn;for(wt=new Ze(wt);Ce(wt);)switch(wt.i){case 13:var l=jt(wt);Vt(Ft,1,l);break;case 21:l=jt(wt),Vt(Ft,2,l);break;case 29:l=jt(wt),Vt(Ft,3,l);break;case 37:l=jt(wt),Vt(Ft,4,l);break;case 45:l=jt(wt),Vt(Ft,5,l);break;case 48:l=Ve(wt.g),Vt(Ft,6,l);break;default:if(!ut(Ft,wt))break t}}Ft={Z:Ct(Ft,1),$:Ct(Ft,2),height:Ct(Ft,3),width:Ct(Ft,4),rotation:Ct(Ft,5,0),X:fe(Ft,6,0)},wt=Le(nn(xt.get(It)),fn).map(Sn);var v=ht.get(It);t:for(l=new tn,v=new Ze(v);Ce(v);)switch(v.i){case 10:l.addClassification(xe(v,new me,He));break;default:if(!ut(l,v))break t}Ft={T:Ft,O:wt,M:Zn(l)},Wt.push(Ft)}Kt=Wt}else Kt=[];K[w]=Kt,Xt.g=7;break}if(N.type==="proto_list"){if(A){for(Kt=Array(A.size()),xt=0;xt<A.size();xt++)Kt[xt]=A.get(xt);A.delete()}else Kt=[];K[w]=Kt,Xt.g=7;break}if(A===void 0){Xt.g=3;break}if(N.type==="float_list"){K[w]=A,Xt.g=7;break}if(N.type==="proto"){K[w]=A,Xt.g=7;break}if(N.type!=="texture")throw Error("Unknown output config type: '"+N.type+"'");return B=X.s[w],B||(B=new Kn(X.h,X.D),X.s[w]=B),P(Xt,an(B,A,X.G),13);case 13:nt=Xt.h,K[w]=nt;case 7:N.transform&&K[w]&&(K[w]=N.transform(K[w])),Xt.g=3;break;case 14:$[yt]=Xt.h;case 3:q=R.next(),Xt.g=2;break;case 4:return Xt.return(K)}})})}function Rt(h,y,G){return St(h,function H(){var K=this,_;return ne(H,function(M){return typeof G=="number"||G instanceof Uint8Array||G instanceof K.h.Uint8BlobList?M.return(G):G instanceof K.h.Texture2dDataOut?(_=K.s[y],_||(_=new Kn(K.h,K.D),K.s[y]=_),M.return(an(_,G,K.G))):M.return(void 0)})})}function Ut(h,y){for(var G=y.name||"$",H=[].concat(J(y.wants)),K=new h.h.StringList,_=T(y.wants),M=_.next();!M.done;M=_.next())K.push_back(M.value);_=h.h.PacketListener.implement({onResults:function(q){for(var ct={},s=0;s<y.wants.length;++s)ct[H[s]]=q.get(s);var X=h.listeners[G];X&&(h.C=bt(h,ct,y.outs).then(function(R){R=X(R);for(var w=0;w<y.wants.length;++w){var N=ct[H[w]];typeof N=="object"&&N.hasOwnProperty&&N.hasOwnProperty("delete")&&N.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(K,_),K.delete()}i.onResults=function(h,y){this.listeners[y||"$"]=h},Re("Solution",V),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Jt(h){h=En(h);var y=h.getMesh();if(!y)return h;var G=new Float32Array(y.getVertexBufferList());y.getVertexBufferList=function(){return G};var H=new Uint32Array(y.getIndexBufferList());return y.getIndexBufferList=function(){return H},h}var $t={files:[{url:"face_mesh_solution_packed_assets_loader.js"},{simd:!0,url:"face_mesh_solution_simd_wasm_bin.js"},{simd:!1,url:"face_mesh_solution_wasm_bin.js"}],graph:{url:"face_mesh.binarypb"},listeners:[{wants:["multi_face_geometry","image_transformed","multi_face_landmarks"],outs:{image:"image_transformed",multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:function(h){return h.map(Jt)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(h){return h.map(function(y){return Le(nn(y),fn).map(Sn)})}}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumFaces:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorNumFaces",fieldName:"int_value"}},refineLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facelandmarkfrontgpu__facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"facelandmarkfrontgpu__facelandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}},Nt=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Tt=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Et=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Dt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ae=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],pe=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],ge=[].concat(J(Nt),J(Tt),J(Et),J(Dt),J(ae),J(pe));function Ne(h){h=h||{},h=Object.assign(Object.assign({},$t),h),this.g=new V(h)}i=Ne.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(h){this.g.onResults(h)},i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(G){return P(G,y.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(h){return St(this,function y(){var G=this;return ne(y,function(H){return P(H,G.g.send(h),0)})})},i.setOptions=function(h){this.g.setOptions(h)},Re("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Re("FaceMesh",Ne),Re("FACEMESH_LIPS",Nt),Re("FACEMESH_LEFT_EYE",Tt),Re("FACEMESH_LEFT_EYEBROW",Et),Re("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Re("FACEMESH_RIGHT_EYE",Dt),Re("FACEMESH_RIGHT_EYEBROW",ae),Re("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Re("FACEMESH_FACE_OVAL",pe),Re("FACEMESH_CONTOURS",ge),Re("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Re("matrixDataToMatrix",function(h){for(var y=h.getCols(),G=h.getRows(),H=h.getPackedDataList(),K=[],_=0;_<G;_++)K.push(Array(y));for(_=0;_<G;_++)for(var M=0;M<y;M++){var q=h.getLayout()===1?_*y+M:M*G+_;K[_][M]=H[q]}return K}),Re("VERSION","0.4.1633559619")}).call(Wi);const Vi={};(function(){var i;function n(t){var c=0;return function(){return c<t.length?{done:!1,value:t[c++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(t,c,a){return t==Array.prototype||t==Object.prototype||(t[c]=a.value),t};function f(t){t=[typeof globalThis=="object"&&globalThis,t,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var c=0;c<t.length;++c){var a=t[c];if(a&&a.Math==Math)return a}throw Error("Cannot find global object")}var Z=f(this);function I(t,c){if(c)t:{var a=Z;t=t.split(".");for(var b=0;b<t.length-1;b++){var S=t[b];if(!(S in a))break t;a=a[S]}t=t[t.length-1],b=a[t],c=c(b),c!=b&&c!=null&&r(a,t,{configurable:!0,writable:!0,value:c})}}I("Symbol",function(t){function c(L){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new a(b+(L||"")+"_"+S++,L)}function a(L,C){this.g=L,r(this,"description",{configurable:!0,writable:!0,value:C})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",S=0;return c}),I("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var c="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<c.length;a++){var b=Z[c[a]];typeof b=="function"&&typeof b.prototype[t]!="function"&&r(b.prototype,t,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return t});function F(t){return t={next:t},t[Symbol.iterator]=function(){return this},t}function T(t){var c=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return c?c.call(t):{next:n(t)}}function J(t){if(!(t instanceof Array)){t=T(t);for(var c,a=[];!(c=t.next()).done;)a.push(c.value);t=a}return t}var et=typeof Object.create=="function"?Object.create:function(t){function c(){}return c.prototype=t,new c},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(t,c){if(t.__proto__=c,t.__proto__!==c)throw new TypeError(t+" is not extensible");return t}:null}var at=lt;function dt(t,c){if(t.prototype=et(c.prototype),t.prototype.constructor=t,at)at(t,c);else for(var a in c)if(a!="prototype")if(Object.defineProperties){var b=Object.getOwnPropertyDescriptor(c,a);b&&Object.defineProperty(t,a,b)}else t[a]=c[a];t.ka=c.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Bt.prototype.o=function(t){this.h=t};function ee(t,c){t.j={V:c,X:!0},t.g=t.m||t.s}Bt.prototype.return=function(t){this.j={return:t},this.g=this.s};function P(t,c,a){return t.g=a,{value:c}}function De(t){this.g=new Bt,this.h=t}function ze(t,c){kt(t.g);var a=t.g.i;return a?We(t,"return"in a?a.return:function(b){return{value:b,done:!0}},c,t.g.return):(t.g.return(c),zt(t))}function We(t,c,a,b){try{var S=c.call(t.g.i,a);if(!(S instanceof Object))throw new TypeError("Iterator result "+S+" is not an object");if(!S.done)return t.g.l=!1,S;var L=S.value}catch(C){return t.g.i=null,ee(t.g,C),zt(t)}return t.g.i=null,b.call(t.g,L),zt(t)}function zt(t){for(;t.g.g;)try{var c=t.h(t.g);if(c)return t.g.l=!1,{value:c.value,done:!1}}catch(a){t.g.h=void 0,ee(t.g,a)}if(t.g.l=!1,t.g.j){if(c=t.g.j,t.g.j=null,c.X)throw c.V;return{value:c.return,done:!0}}return{value:void 0,done:!0}}function Hn(t){this.next=function(c){return kt(t.g),t.g.i?c=We(t,t.g.i.next,c,t.g.o):(t.g.o(c),c=zt(t)),c},this.throw=function(c){return kt(t.g),t.g.i?c=We(t,t.g.i.throw,c,t.g.o):(ee(t.g,c),c=zt(t)),c},this.return=function(c){return ze(t,c)},this[Symbol.iterator]=function(){return this}}function ne(t){function c(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,S){function L(C){C.done?b(C.value):Promise.resolve(C.value).then(c,a).then(L,S)}L(t.next())})}function Zt(t){return ne(new Hn(new De(t)))}I("Promise",function(t){function c(C){this.h=0,this.i=void 0,this.g=[],this.o=!1;var U=this.j();try{C(U.resolve,U.reject)}catch(z){U.reject(z)}}function a(){this.g=null}function b(C){return C instanceof c?C:new c(function(U){U(C)})}if(t)return t;a.prototype.h=function(C){if(this.g==null){this.g=[];var U=this;this.i(function(){U.l()})}this.g.push(C)};var S=Z.setTimeout;a.prototype.i=function(C){S(C,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var C=this.g;this.g=[];for(var U=0;U<C.length;++U){var z=C[U];C[U]=null;try{z()}catch(Q){this.j(Q)}}}this.g=null},a.prototype.j=function(C){this.i(function(){throw C})},c.prototype.j=function(){function C(Q){return function(D){z||(z=!0,Q.call(U,D))}}var U=this,z=!1;return{resolve:C(this.D),reject:C(this.l)}},c.prototype.D=function(C){if(C===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(C instanceof c)this.G(C);else{t:switch(typeof C){case"object":var U=C!=null;break t;case"function":U=!0;break t;default:U=!1}U?this.A(C):this.m(C)}},c.prototype.A=function(C){var U=void 0;try{U=C.then}catch(z){this.l(z);return}typeof U=="function"?this.H(U,C):this.m(C)},c.prototype.l=function(C){this.s(2,C)},c.prototype.m=function(C){this.s(1,C)},c.prototype.s=function(C,U){if(this.h!=0)throw Error("Cannot settle("+C+", "+U+"): Promise already settled in state"+this.h);this.h=C,this.i=U,this.h===2&&this.F(),this.B()},c.prototype.F=function(){var C=this;S(function(){if(C.C()){var U=Z.console;typeof U<"u"&&U.error(C.i)}},1)},c.prototype.C=function(){if(this.o)return!1;var C=Z.CustomEvent,U=Z.Event,z=Z.dispatchEvent;return typeof z>"u"?!0:(typeof C=="function"?C=new C("unhandledrejection",{cancelable:!0}):typeof U=="function"?C=new U("unhandledrejection",{cancelable:!0}):(C=Z.document.createEvent("CustomEvent"),C.initCustomEvent("unhandledrejection",!1,!0,C)),C.promise=this,C.reason=this.i,z(C))},c.prototype.B=function(){if(this.g!=null){for(var C=0;C<this.g.length;++C)L.h(this.g[C]);this.g=null}};var L=new a;return c.prototype.G=function(C){var U=this.j();C.K(U.resolve,U.reject)},c.prototype.H=function(C,U){var z=this.j();try{C.call(U,z.resolve,z.reject)}catch(Q){z.reject(Q)}},c.prototype.then=function(C,U){function z(ft,mt){return typeof ft=="function"?function(Gt){try{Q(ft(Gt))}catch(vt){D(vt)}}:mt}var Q,D,st=new c(function(ft,mt){Q=ft,D=mt});return this.K(z(C,Q),z(U,D)),st},c.prototype.catch=function(C){return this.then(void 0,C)},c.prototype.K=function(C,U){function z(){switch(Q.h){case 1:C(Q.i);break;case 2:U(Q.i);break;default:throw Error("Unexpected state: "+Q.h)}}var Q=this;this.g==null?L.h(z):this.g.push(z),this.o=!0},c.resolve=b,c.reject=function(C){return new c(function(U,z){z(C)})},c.race=function(C){return new c(function(U,z){for(var Q=T(C),D=Q.next();!D.done;D=Q.next())b(D.value).K(U,z)})},c.all=function(C){var U=T(C),z=U.next();return z.done?b([]):new c(function(Q,D){function st(Gt){return function(vt){ft[Gt]=vt,mt--,mt==0&&Q(ft)}}var ft=[],mt=0;do ft.push(void 0),mt++,b(z.value).K(st(ft.length-1),D),z=U.next();while(!z.done)})},c});function $e(t,c){t instanceof String&&(t+="");var a=0,b=!1,S={next:function(){if(!b&&a<t.length){var L=a++;return{value:c(L,t[L]),done:!1}}return b=!0,{done:!0,value:void 0}}};return S[Symbol.iterator]=function(){return S},S}var An=typeof Object.assign=="function"?Object.assign:function(t,c){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var S in b)Object.prototype.hasOwnProperty.call(b,S)&&(t[S]=b[S])}return t};I("Object.assign",function(t){return t||An}),I("Object.is",function(t){return t||function(c,a){return c===a?c!==0||1/c===1/a:c!==c&&a!==a}}),I("Array.prototype.includes",function(t){return t||function(c,a){var b=this;b instanceof String&&(b=String(b));var S=b.length;for(a=a||0,0>a&&(a=Math.max(a+S,0));a<S;a++){var L=b[a];if(L===c||Object.is(L,c))return!0}return!1}}),I("String.prototype.includes",function(t){return t||function(c,a){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(c instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(c,a||0)!==-1}}),I("Array.prototype.keys",function(t){return t||function(){return $e(this,function(c){return c})}});var Re=this||self;function Ht(t,c){t=t.split(".");var a=Re;t[0]in a||typeof a.execScript>"u"||a.execScript("var "+t[0]);for(var b;t.length&&(b=t.shift());)t.length||c===void 0?a[b]&&a[b]!==Object.prototype[b]?a=a[b]:a=a[b]={}:a[b]=c}function Te(t){throw t}function sn(t,c){Te(Error("Invalid wire type: "+t+" (at position "+c+")"))}function Gn(){Te(Error("Failed to read varint, encoding is invalid."))}function Ln(t,c){return c=String.fromCharCode.apply(null,c),t==null?c:t+c}var Rn,Jn=typeof TextDecoder<"u",dn,pn=typeof TextEncoder<"u";function kn(t){if(pn)t=(dn||(dn=new TextEncoder)).encode(t);else{var c=void 0;c=c===void 0?!1:c;for(var a=0,b=new Uint8Array(3*t.length),S=0;S<t.length;S++){var L=t.charCodeAt(S);if(128>L)b[a++]=L;else{if(2048>L)b[a++]=L>>6|192;else{if(55296<=L&&57343>=L){if(56319>=L&&S<t.length){var C=t.charCodeAt(++S);if(56320<=C&&57343>=C){L=1024*(L-55296)+C-56320+65536,b[a++]=L>>18|240,b[a++]=L>>12&63|128,b[a++]=L>>6&63|128,b[a++]=L&63|128;continue}else S--}if(c)throw Error("Found an unpaired surrogate");L=65533}b[a++]=L>>12|224,b[a++]=L>>6&63|128}b[a++]=L&63|128}}t=b.subarray(0,a)}return t}var Fn={},je=null;function Me(t){var c;c===void 0&&(c=0),he(),c=Fn[c];for(var a=Array(Math.floor(t.length/3)),b=c[64]||"",S=0,L=0;S<t.length-2;S+=3){var C=t[S],U=t[S+1],z=t[S+2],Q=c[C>>2];C=c[(C&3)<<4|U>>4],U=c[(U&15)<<2|z>>6],z=c[z&63],a[L++]=Q+C+U+z}switch(Q=0,z=b,t.length-S){case 2:Q=t[S+1],z=c[(Q&15)<<2]||b;case 1:t=t[S],a[L]=c[t>>2]+c[(t&3)<<4|Q>>4]+z+b}return a.join("")}function xn(t){var c=t.length,a=3*c/4;a%3?a=Math.floor(a):"=.".indexOf(t[c-1])!=-1&&(a="=.".indexOf(t[c-2])!=-1?a-2:a-1);var b=new Uint8Array(a),S=0;return Xn(t,function(L){b[S++]=L}),b.subarray(0,S)}function Xn(t,c){function a(z){for(;b<t.length;){var Q=t.charAt(b++),D=je[Q];if(D!=null)return D;if(!/^[\s\xa0]*$/.test(Q))throw Error("Unknown base64 encoding at char: "+Q)}return z}he();for(var b=0;;){var S=a(-1),L=a(0),C=a(64),U=a(64);if(U===64&&S===-1)break;c(S<<2|L>>4),C!=64&&(c(L<<4&240|C>>2),U!=64&&c(C<<6&192|U))}}function he(){if(!je){je={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),c=["+/=","+/","-_=","-_.","-_"],a=0;5>a;a++){var b=t.concat(c[a].split(""));Fn[a]=b;for(var S=0;S<b.length;S++){var L=b[S];je[L]===void 0&&(je[L]=S)}}}}var Se=typeof Uint8Array=="function",Oe;function re(t){if(this.g=t,t!==null&&t.length===0)throw Error("ByteString should be constructed with non-empty values")}var Ve=typeof Uint8Array.prototype.slice=="function";function ln(t,c,a){return c===a?Oe||(Oe=new Uint8Array(0)):Ve?t.slice(c,a):new Uint8Array(t.subarray(c,a))}var Be=0,Qt=0;function Ze(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return xn(t);if(t.constructor===re){if(t.g==null)var c=Oe||(Oe=new Uint8Array(0));else{c=Uint8Array;var a=t.g;a=a==null||Se&&a!=null&&a instanceof Uint8Array?a:typeof a=="string"?xn(a):null,t=t.g=a,c=new c(t)}return c}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Ce(t,c){c=c===void 0?{}:c,c=c.v===void 0?!1:c.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=c,t&&Mt(this,t)}function Mt(t,c){t.h=Ze(c),t.l=0,t.i=t.h.length,t.g=t.l}Ce.prototype.reset=function(){this.g=this.l};function xe(t){for(var c=128,a=0,b=0,S=0;4>S&&128<=c;S++)c=t.h[t.g++],a|=(c&127)<<7*S;if(128<=c&&(c=t.h[t.g++],a|=(c&127)<<28,b|=(c&127)>>4),128<=c)for(S=0;5>S&&128<=c;S++)c=t.h[t.g++],b|=(c&127)<<7*S+3;if(128>c)return t=a>>>0,c=b>>>0,(b=c&2147483648)&&(t=~t+1>>>0,c=~c>>>0,t==0&&(c=c+1>>>0)),t=4294967296*c+(t>>>0),b?-t:t;t.j=!0,Gn()}function jt(t){t.g>t.i&&(t.j=!0,Te(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function ye(t){var c=t.h,a=c[t.g],b=a&127;return 128>a?(t.g+=1,jt(t),b):(a=c[t.g+1],b|=(a&127)<<7,128>a?(t.g+=2,jt(t),b):(a=c[t.g+2],b|=(a&127)<<14,128>a?(t.g+=3,jt(t),b):(a=c[t.g+3],b|=(a&127)<<21,128>a?(t.g+=4,jt(t),b):(a=c[t.g+4],b|=(a&15)<<28,128>a?(t.g+=5,jt(t),b>>>0):(t.g+=5,128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]?(t.j=!0,Gn(),b):(jt(t),b))))))}function Ye(t){var c=t.h[t.g],a=t.h[t.g+1],b=t.h[t.g+2],S=t.h[t.g+3];return t.g+=4,jt(t),(c<<0|a<<8|b<<16|S<<24)>>>0}Ce.prototype.m=function(){var t=Ye(this),c=2*(t>>31)+1,a=t>>>23&255;return t&=8388607,a==255?t?NaN:1/0*c:a==0?c*Math.pow(2,-149)*t:c*Math.pow(2,a-150)*(t+Math.pow(2,23))};var qe=[];function Xe(){this.g=new Uint8Array(64),this.h=0}function Ot(t,c){if(!(t.h+1<t.g.length)){var a=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(a)}t.g[t.h++]=c}Xe.prototype.length=function(){return this.h},Xe.prototype.end=function(){var t=this.g,c=this.h;return this.h=0,ln(t,0,c)};function Ae(t,c){for(;127<c;)Ot(t,c&127|128),c>>>=7;Ot(t,c)}function Pe(t){var c={},a=c.O===void 0?!1:c.O;this.m={v:c.v===void 0?!1:c.v},this.O=a,c=this.m,qe.length?(a=qe.pop(),c&&(a.v=c.v),t&&Mt(a,t),t=a):t=new Ce(t,c),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Pe.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Ie(t){var c=t.g;if((c=c.g==c.i)||(c=t.j)||(c=t.g,c=c.j||0>c.g||c.g>c.i),c)return!1;t.l=t.g.g;var a=ye(t.g);return c=a>>>3,a&=7,0<=a&&5>=a?(t.i=c,t.h=a,!0):(t.j=!0,sn(a,t.l),!1)}function Wn(t){switch(t.h){case 0:if(t.h!=0)Wn(t);else t:{t=t.g;for(var c=t.g,a=0;10>a;a++){if((t.h[c]&128)===0){t.g=c+1,jt(t);break t}c++}t.j=!0,Gn()}break;case 1:t=t.g,t.g+=8,jt(t);break;case 2:t.h!=2?Wn(t):(c=ye(t.g),t=t.g,t.g+=c,jt(t));break;case 5:t=t.g,t.g+=4,jt(t);break;case 3:c=t.i;do{if(!Ie(t)){t.j=!0,Te(Error("Unmatched start-group tag: stream EOF"));break}if(t.h==4){t.i!=c&&(t.j=!0,Te(Error("Unmatched end-group tag")));break}Wn(t)}while(1);break;default:t.j=!0,sn(t.h,t.l)}}function cn(t,c,a){var b=t.g.i,S=ye(t.g),L=t.g.g+S;if(t.g.i=L,a(c,t),a=L-t.g.g,a!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(S+" bytes, instead read "+(S-a)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return t.g.g=L,t.g.i=b,c}var _e=[];function un(){this.h=[],this.i=0,this.g=new Xe}function ve(t,c){c.length!==0&&(t.h.push(c),t.i+=c.length)}function we(t,c,a){Ae(t.g,8*c+2),Ae(t.g,a.length),ve(t,t.g.end()),ve(t,a)}var Ge=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function ie(t){return Object.isFrozen(t)||(Ge?t[Ge]|=1:t.g!==void 0?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function Qe(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function qt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(Se&&t!=null&&t instanceof Uint8Array)return Me(t);if(t instanceof re){if(t.g==null)t="";else{var c=t.g;c=c==null||typeof c=="string"?c:Se&&c instanceof Uint8Array?Me(c):null,t=t.g=c}return t}}return t}function Pt(t,c){if(t!=null)return Array.isArray(t)||Qe(t)?hn(t,c):c(t)}function hn(t,c){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=Pt(t[b],c);if(c=Array.isArray(t)){var S;Ge?S=t[Ge]:S=t.g,c=(S==null?0:S)&1}return c&&ie(a),a}S={};for(a in t)S[a]=Pt(t[a],c);return S}function fe(t){return t=qt(t),Array.isArray(t)?hn(t,fe):t}var Ct;function Vt(t,c,a){var b=Ct;Ct=null,t||(t=b),b=this.constructor.ha,t||(t=b?[b]:[]),this.i=(b?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t;t:{if(b=this.u.length,t=b-1,b&&(b=this.u[t],Qe(b))){this.j=t-this.i,this.h=b;break t}c!==void 0&&-1<c?(this.j=Math.max(c,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE}if(a)for(c=0;c<a.length;c++)t=a[c],t<this.j?(t+=this.i,(b=this.u[t])?Array.isArray(b)&&ie(b):this.u[t]=oe):(Le(this),(b=this.h[t])?Array.isArray(b)&&ie(b):this.h[t]=oe)}var oe=Object.freeze(ie([]));function Le(t){var c=t.j+t.i;t.u[c]||(t.h=t.u[c]={})}function te(t,c,a){return c===-1?null:(a===void 0?0:a)||c>=t.j?t.h?t.h[c]:void 0:t.u[c+t.i]}function se(t,c,a){a=a===void 0?!1:a;var b=te(t,c,a);return b==null&&(b=oe),b===oe&&(b=ie(b.slice()),ut(t,c,b,a)),b}function tt(t,c){var a=se(t,c);if(t.l||(t.l={}),!t.l[c]){for(var b=0;b<a.length;b++)a[b]=+a[b];t.l[c]=!0}return a}function it(t,c,a){return t=te(t,c),t=t==null?t:+t,t==null?a===void 0?0:a:t}function ut(t,c,a,b){(b===void 0?0:b)||c>=t.j?(Le(t),t.h[c]=a):t.u[c+t.i]=a}function _t(t,c,a,b){a!==b?ut(t,c,a):ut(t,c,void 0,!1)}function de(t,c,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var S=te(t,a,!1);return S==null?b:(c=new c(S),t.g[a]=c)}function ue(t,c,a){t.g||(t.g={});var b=t.g[a];if(!b){var S=se(t,a,!1);b=[];for(var L=0;L<S.length;L++)b[L]=new c(S[L]);t.g[a]=b}return b}function St(t,c,a,b,S){var L=ue(t,b,c);a=a||new b,t=se(t,c),S!=null?(L.splice(S,0,a),t.splice(S,0,a.u)):(L.push(a),t.push(a.u))}Vt.prototype.toJSON=function(){return hn(this.u,fe)},Vt.prototype.toString=function(){return this.u.toString()};function me(t,c){return t=te(t,c),t==null?0:t}function He(t,c){return t=te(t,c),t==null?"":t}function tn(t,c){if(t=t.m){ve(c,c.g.end());for(var a=0;a<t.length;a++)ve(c,t[a])}}var en=Symbol();function fn(t,c,a){return t[en]||(t[en]=function(b,S){return c(b,S,a)})}function bn(t){var c=t[en];if(!c){var a=t[rn]||(t[rn]=t());c=function(b,S){return Je(b,S,a)},t[en]=c}return c}function Fe(t){var c=t.da;if(c)return bn(c);if(c=t.ia){var a=t.Y;return delete t.Y,fn(t.W.g,c,a)}}function nn(t){var c=Fe(t),a=t.W,b=t.ea;return c?function(S,L){return b(S,L,a,c)}:function(S,L){return b(S,L,a)}}function zn(t){var c=t[0];switch(t.length){case 2:var a=t[1];return function(mt,Gt,vt){return c(mt,Gt,vt,a)};case 3:var b=t[1],S=bn(t[2]);return function(mt,Gt,vt){return c(mt,Gt,vt,b,S)};case 4:var L=t[1],C=t[3],U=bn(t[2]);return function(mt,Gt,vt){return c(mt,Gt,vt,L,U,C)};case 5:var z=t[1],Q=fn(z,t[3],t[4]);return function(mt,Gt,vt){return c(mt,Gt,vt,z,Q)};case 6:var D=t[1],st=t[5],ft=fn(D,t[3],t[4]);return function(mt,Gt,vt){return c(mt,Gt,vt,D,ft,st)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var rn=Symbol();function Je(t,c,a){for(;Ie(c)&&c.h!=4;){var b=c.i,S=a[b];if(S)Array.isArray(S)&&(S=a[b]=zn(S));else{var L=a[0];L&&(L=L[b])&&(S=a[b]=nn(L))}S&&S(c,t,b)||(S=c,b=t,L=S.l,Wn(S),S.O||(S=ln(S.g.h,L,S.g.g),(L=b.m)?L.push(S):b.m=[S]))}return t}function gn(t,c){var a=new un;if(c(t,a),t=a.i+a.g.length(),t===0)a=new Uint8Array(0);else{t=new Uint8Array(t);for(var b=a.h,S=b.length,L=c=0;L<S;L++){var C=b[L];C.length!==0&&(t.set(C,c),c+=C.length)}b=a.g,S=b.h,S!==0&&(t.set(b.g.subarray(0,S),c),b.h=0),a.h=[t],a=t}return a}function In(t,c,a){if(_e.length){var b=_e.pop();t&&(Mt(b.g,t),b.i=-1,b.h=-1),t=b}else t=new Pe(t);try{var S=new c;return Je(S,t,a[rn]||(a[rn]=a()))}finally{c=t.g,c.h=null,c.l=0,c.i=0,c.g=0,c.j=!1,c.v=!1,t.i=-1,t.h=-1,t.j=!1,100>_e.length&&_e.push(t)}}function Ke(t,c,a){if(c=te(c,a),c!=null){Ae(t.g,8*a+5),t=t.g;var b=c;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Be=Qt=0:(Qt=0,Be=2147483648):isNaN(b)?(Qt=0,Be=2147483647):34028234663852886e22<b?(Qt=0,Be=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),Qt=0,Be=(a<<31|b)>>>0):(c=Math.floor(Math.log(b)/Math.LN2),b*=Math.pow(2,-c),b=Math.round(8388608*b),16777216<=b&&++c,Qt=0,Be=(a<<31|c+127<<23|b&8388607)>>>0),a=Be,Ot(t,a>>>0&255),Ot(t,a>>>8&255),Ot(t,a>>>16&255),Ot(t,a>>>24&255)}}function En(t,c,a){if(t.h!==1)return!1;var b=t.g;t=Ye(b);var S=Ye(b);b=2*(S>>31)+1;var L=S>>>20&2047;return t=4294967296*(S&1048575)+t,_t(c,a,L==2047?t?NaN:1/0*b:L==0?b*Math.pow(2,-1074)*t:b*Math.pow(2,L-1075)*(t+4503599627370496),0),!0}function on(t,c,a){return t.h!==5?!1:(ut(c,a,t.g.m()),!0)}function Zn(t,c,a){if(t.h!==5&&t.h!==2)return!1;if(c=se(c,a),t.h==2){a=Ce.prototype.m;var b=ye(t.g);for(b=t.g.g+b;t.g.g<b;)c.push(a.call(t.g))}else c.push(t.g.m());return!0}function Sn(t,c,a){return t.h!==5?!1:(t=t.g.m(),_t(c,a,t,0),!0)}function Kn(t,c,a){return t.h!==0?!1:(ut(c,a,xe(t.g)),!0)}function an(t,c,a){return t.h!==0?!1:(ut(c,a,ye(t.g)),!0)}function Tn(t,c,a){return t.h!==0?!1:(t=ye(t.g),_t(c,a,t,0),!0)}function _n(t,c,a){return t.h!==0?!1:(t=!!ye(t.g),_t(c,a,t,!1),!0)}function Qn(t,c,a){if(t.h!==2)return!1;var b=ye(t.g);t=t.g;var S=t.g;t.g+=b,jt(t),t=t.h;var L;if(Jn)(L=Rn)||(L=Rn=new TextDecoder("utf-8",{fatal:!1})),L=L.decode(t.subarray(S,S+b));else{b=S+b;for(var C=[],U=null,z,Q,D;S<b;)z=t[S++],128>z?C.push(z):224>z?S>=b?C.push(65533):(Q=t[S++],194>z||(Q&192)!==128?(S--,C.push(65533)):C.push((z&31)<<6|Q&63)):240>z?S>=b-1?C.push(65533):(Q=t[S++],(Q&192)!==128||z===224&&160>Q||z===237&&160<=Q||((L=t[S++])&192)!==128?(S--,C.push(65533)):C.push((z&15)<<12|(Q&63)<<6|L&63)):244>=z?S>=b-2?C.push(65533):(Q=t[S++],(Q&192)!==128||(z<<28)+(Q-144)>>30!==0||((L=t[S++])&192)!==128||((D=t[S++])&192)!==128?(S--,C.push(65533)):(z=(z&7)<<18|(Q&63)<<12|(L&63)<<6|D&63,z-=65536,C.push((z>>10&1023)+55296,(z&1023)+56320))):C.push(65533),8192<=C.length&&(U=Ln(U,C),C.length=0);L=Ln(U,C)}return ut(c,a,L),!0}function Yn(t,c,a,b,S){return t.h!==2?!1:(t=cn(t,new b,S),c.g||(c.g={}),b=t&&t.u,c.g[a]=t,ut(c,a,b,!1),!0)}function Cn(t,c,a,b,S){return t.h!==2?!1:(t=cn(t,new b,S),St(c,a,t,b,void 0),!0)}function p(t,c,a){return t.h!==0?!1:(ut(c,a,xe(t.g)),!0)}function W(t){Vt.call(this,t)}dt(W,Vt);function V(){return{1:an,2:on,3:Qn,4:Qn}}function E(t,c){var a=te(t,1);if(a!=null&&a!=null){Ae(c.g,8);var b=c.g;if(0<=a)Ae(b,a);else{for(var S=0;9>S;S++)Ot(b,a&127|128),a>>=7;Ot(b,1)}}Ke(c,t,2),b=te(t,3),b!=null&&we(c,3,kn(b)),b=te(t,4),b!=null&&we(c,4,kn(b)),tn(t,c)}function O(t){Vt.call(this,t,-1,j)}dt(O,Vt),O.prototype.addClassification=function(t,c){return St(this,1,t,W,c),this};function ot(){return{1:[Cn,W,V]}}var j=[1];function rt(t){Vt.call(this,t)}dt(rt,Vt);function bt(){return{1:on,2:on,3:on,4:on,5:on}}function Rt(t,c){Ke(c,t,1),Ke(c,t,2),Ke(c,t,3),Ke(c,t,4),Ke(c,t,5),tn(t,c)}function Ut(t){Vt.call(this,t,-1,$t)}dt(Ut,Vt);function Jt(){return{1:[Cn,rt,bt]}}var $t=[1];function Nt(t){Vt.call(this,t)}dt(Nt,Vt);function Tt(){return{1:on,2:on,3:on,4:on,5:on,6:Kn}}function Et(t,c){Ke(c,t,1),Ke(c,t,2),Ke(c,t,3),Ke(c,t,4),Ke(c,t,5);var a=te(t,6);if(a!=null&&a!=null){Ae(c.g,48);var b=c.g,S=a;a=0>S,S=Math.abs(S);var L=S>>>0;for(S=Math.floor((S-L)/4294967296),S>>>=0,a&&(S=~S>>>0,L=(~L>>>0)+1,4294967295<L&&(L=0,S++,4294967295<S&&(S=0))),Be=L,Qt=S,a=Be,L=Qt;0<L||127<a;)Ot(b,a&127|128),a=(a>>>7|L<<25)>>>0,L>>>=7;Ot(b,a)}tn(t,c)}function Dt(t){Vt.call(this,t,-1,Ne)}dt(Dt,Vt);function ae(){return{1:p,2:p,3:Zn,4:[Yn,pe,ge],5:an,6:an,7:Zn,8:Zn,9:Zn}}function pe(t){Vt.call(this,t)}dt(pe,Vt);function ge(){return{1:on,2:on,3:on}}var Ne=[3,7,8,9];function h(t){Vt.call(this,t)}dt(h,Vt);function y(){return{1:Sn,2:Sn,3:Sn}}function G(t){Vt.call(this,t)}dt(G,Vt);function H(){return{1:Sn,2:Sn,3:Sn}}function K(t){Vt.call(this,t)}dt(K,Vt);function _(){return{1:Tn,2:[Yn,G,H],3:[Yn,h,y],4:_n}}function M(t){Vt.call(this,t,-1,ct)}dt(M,Vt);function q(){return{1:Tn,2:[Cn,K,_],3:Sn,4:Zn,5:Zn,6:Zn}}var ct=[2,4,5,6];function s(t){Vt.call(this,t,-1,R)}dt(s,Vt);function X(){return{1:Tn,2:[Cn,M,q],3:[Yn,Dt,ae],4:En,5:Zn,6:Zn}}var R=[2,5,6];function w(t,c,a){if(a=t.createShader(a===0?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(a,c),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
88
88
|
|
|
89
|
-
`+t.getShaderInfoLog(a));return a}function
|
|
89
|
+
`+t.getShaderInfoLog(a));return a}function N(t){return ue(t,W,1).map(function(c){return{index:me(c,1),$:it(c,2),label:te(c,3)!=null?He(c,3):void 0,displayName:te(c,4)!=null?He(c,4):void 0}})}function A(t){return{x:it(t,1),y:it(t,2),z:it(t,3),visibility:te(t,4)!=null?it(t,4):void 0}}function B(t,c){this.h=t,this.g=c,this.l=0}function nt(t,c,a){return $(t,c),typeof t.g.canvas.transferToImageBitmap=="function"?Promise.resolve(t.g.canvas.transferToImageBitmap()):a?Promise.resolve(t.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(t.g.canvas):(t.i===void 0&&(t.i=document.createElement("canvas")),new Promise(function(b){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),b(t.i)}))}function $(t,c){var a=t.g;if(t.m===void 0){var b=w(a,`
|
|
90
90
|
attribute vec2 aVertex;
|
|
91
91
|
attribute vec2 aTex;
|
|
92
92
|
varying vec2 vTex;
|
|
93
93
|
void main(void) {
|
|
94
94
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
95
95
|
vTex = aTex;
|
|
96
|
-
}`,0),S=
|
|
96
|
+
}`,0),S=w(a,`
|
|
97
97
|
precision mediump float;
|
|
98
98
|
varying vec2 vTex;
|
|
99
99
|
uniform sampler2D sampler0;
|
|
100
100
|
void main(){
|
|
101
101
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
102
|
-
}`,1),
|
|
102
|
+
}`,1),L=a.createProgram();if(a.attachShader(L,b),a.attachShader(L,S),a.linkProgram(L),!a.getProgramParameter(L,a.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
103
103
|
|
|
104
|
-
`+a.getProgramInfoLog(F));b=t.m=F,a.useProgram(b),S=a.getUniformLocation(b,"sampler0"),t.j={J:a.getAttribLocation(b,"aVertex"),I:a.getAttribLocation(b,"aTex"),ja:S},t.s=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.enableVertexAttribArray(t.j.J),a.vertexAttribPointer(t.j.J,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),t.o=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.enableVertexAttribArray(t.j.I),a.vertexAttribPointer(t.j.I,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),a.uniform1i(S,0)}b=t.j,a.useProgram(t.m),a.canvas.width=c.width,a.canvas.height=c.height,a.viewport(0,0,c.width,c.height),a.activeTexture(a.TEXTURE0),t.h.bindTexture2d(c.glName),a.enableVertexAttribArray(b.J),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.vertexAttribPointer(b.J,2,a.FLOAT,!1,0,0),a.enableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.vertexAttribPointer(b.I,2,a.FLOAT,!1,0,0),a.bindFramebuffer(a.DRAW_FRAMEBUFFER?a.DRAW_FRAMEBUFFER:a.FRAMEBUFFER,null),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.colorMask(!0,!0,!0,!0),a.drawArrays(a.TRIANGLE_FAN,0,4),a.disableVertexAttribArray(b.J),a.disableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}function yt(t){this.g=t}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Kt(t,c){return c+t}function xt(t,c){window[t]=c}function ht(t){var c=document.createElement("script");return c.setAttribute("src",t),c.setAttribute("crossorigin","anonymous"),new Promise(function(a){c.addEventListener("load",function(){a()},!1),c.addEventListener("error",function(){a()},!1),document.body.appendChild(c)})}function Wt(){return Zt(function(t){switch(t.g){case 1:return t.m=2,P(t,WebAssembly.instantiate(Xt),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})}function It(t){if(this.g=t,this.listeners={},this.j={},this.G={},this.m={},this.s={},this.H=this.o=this.S=!0,this.D=Promise.resolve(),this.R="",this.C={},this.locateFile=t&&t.locateFile||Kt,typeof window=="object")var c=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")c=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.T=c,t.options){c=Y(Object.keys(t.options));for(var a=c.next();!a.done;a=c.next()){a=a.value;var b=t.options[a].default;b!==void 0&&(this.j[a]=typeof b=="function"?b():b)}}}i=It.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Tt(t){var c,a,b,S,F,L,U,j,Q,D,st;return Zt(function(ft){switch(ft.g){case 1:return t.S?(c=t.g.files===void 0?[]:typeof t.g.files=="function"?t.g.files(t.j):t.g.files,P(ft,Wt(),2)):ft.return();case 2:if(a=ft.h,typeof window=="object")return xt("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),xt("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),L=c.filter(function(mt){return mt.data!==void 0}),U=c.filter(function(mt){return mt.data===void 0}),j=Promise.all(L.map(function(mt){var Gt=v(t,mt.url);if(mt.path!==void 0){var vt=mt.path;Gt=Gt.then(function(At){return t.overrideFile(vt,At),Promise.resolve(At)})}return Gt})),Q=Promise.all(U.map(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a?ht(t.locateFile(mt.url,t.T)):Promise.resolve()})).then(function(){var mt,Gt,vt;return Zt(function(At){if(At.g==1)return mt=window.createMediapipeSolutionsWasm,Gt=window.createMediapipeSolutionsPackedAssets,vt=t,P(At,mt(Gt),2);vt.h=At.h,At.g=0})}),D=function(){return Zt(function(mt){return t.g.graph&&t.g.graph.url?mt=P(mt,v(t,t.g.graph.url),0):(mt.g=0,mt=void 0),mt})}(),P(ft,Promise.all([Q,j,D]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return b=c.filter(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a}).map(function(mt){return t.locateFile(mt.url,t.T)}),importScripts.apply(null,N(b)),S=t,P(ft,createMediapipeSolutionsWasm(Module),6);case 6:S.h=ft.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,F=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(F),ft.g=4;break;case 7:if(t.l=document.createElement("canvas"),st=t.l.getContext("webgl2",{}),!st&&(st=t.l.getContext("webgl",{}),!st))return alert("Failed to create WebGL canvas context when passing video frame."),ft.return();t.F=st,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,ft.g=0}})}function Ct(t){var c,a,b,S,F,L,U,j;return Zt(function(Q){if(Q.g==1){if(t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url)return Q.return();if(t.o=!0,!t.g.graph||!t.g.graph.url){Q.g=2;return}return t.R=t.g.graph.url,P(Q,v(t,t.g.graph.url),3)}for(Q.g!=2&&(c=Q.h,t.i.loadGraph(c)),a=Y(Object.keys(t.C)),b=a.next();!b.done;b=a.next())S=b.value,t.i.overrideFile(S,t.C[S]);if(t.C={},t.g.listeners)for(F=Y(t.g.listeners),L=F.next();!L.done;L=F.next())U=L.value,k(t,U);j=t.j,t.j={},t.setOptions(j),Q.g=0})}i.reset=function(){var t=this;return Zt(function(c){t.i&&(t.i.reset(),t.m={},t.s={}),c.g=0})},i.setOptions=function(t,c){var a=this;if(c=c||this.g.options){for(var b=[],S=[],F={},L=Y(Object.keys(t)),U=L.next();!U.done;F={L:F.L,M:F.M},U=L.next()){var j=U.value;j in this.j&&this.j[j]===t[j]||(this.j[j]=t[j],U=c[j],U!==void 0&&(U.onChange&&(F.L=U.onChange,F.M=t[j],b.push(function(Q){return function(){var D;return Zt(function(st){if(st.g==1)return P(st,Q.L(Q.M),2);D=st.h,D===!0&&(a.o=!0),st.g=0})}}(F))),U.graphOptionXref&&(j={valueNumber:U.type===1?t[j]:0,valueBoolean:U.type===0?t[j]:!1,valueString:U.type===2?t[j]:""},U=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),U.graphOptionXref),j),S.push(U))))}(b.length!==0||S.length!==0)&&(this.o=!0,this.B=(this.B===void 0?[]:this.B).concat(S),this.A=(this.A===void 0?[]:this.A).concat(b))}};function l(t){var c,a,b,S,F,L,U;return Zt(function(j){switch(j.g){case 1:if(!t.o)return j.return();if(!t.A){j.g=2;break}c=Y(t.A),a=c.next();case 3:if(a.done){j.g=5;break}return b=a.value,P(j,b(),4);case 4:a=c.next(),j.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(S=new t.h.GraphOptionChangeRequestList,F=Y(t.B),L=F.next();!L.done;L=F.next())U=L.value,S.push_back(U);t.i.changeOptions(S),S.delete(),t.B=void 0}t.o=!1,j.g=0}})}i.initialize=function(){var t=this;return Zt(function(c){return c.g==1?P(c,Tt(t),2):c.g!=3?P(c,Ct(t),3):P(c,l(t),0)})};function v(t,c){var a,b;return Zt(function(S){return c in t.G?S.return(t.G[c]):(a=t.locateFile(c,""),b=fetch(a).then(function(F){return F.arrayBuffer()}),t.G[c]=b,S.return(b))})}i.overrideFile=function(t,c){this.i?this.i.overrideFile(t,c):this.C[t]=c},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(t,c){var a=this,b,S,F,L,U,j,Q,D,st;return Zt(function(ft){switch(ft.g){case 1:return a.g.inputs?(b=1e3*(c==null?performance.now():c),P(ft,a.D,2)):ft.return();case 2:return P(ft,a.initialize(),3);case 3:for(S=new a.h.PacketDataList,F=Y(Object.keys(t)),L=F.next();!L.done;L=F.next())if(U=L.value,j=a.g.inputs[U]){t:{var mt=t[U];switch(j.type){case"video":var Gt=a.m[j.stream];if(Gt||(Gt=new B(a.h,a.F),a.m[j.stream]=Gt),Gt.l===0&&(Gt.l=Gt.h.createTexture()),typeof HTMLVideoElement<"u"&&mt instanceof HTMLVideoElement)var vt=mt.videoWidth,At=mt.videoHeight;else typeof HTMLImageElement<"u"&&mt instanceof HTMLImageElement?(vt=mt.naturalWidth,At=mt.naturalHeight):(vt=mt.width,At=mt.height);At={glName:Gt.l,width:vt,height:At},vt=Gt.g,vt.canvas.width=At.width,vt.canvas.height=At.height,vt.activeTexture(vt.TEXTURE0),Gt.h.bindTexture2d(Gt.l),vt.texImage2D(vt.TEXTURE_2D,0,vt.RGBA,vt.RGBA,vt.UNSIGNED_BYTE,mt),Gt.h.bindTexture2d(0),Gt=At;break t;case"detections":for(Gt=a.m[j.stream],Gt||(Gt=new yt(a.h),a.m[j.stream]=Gt),Gt.data||(Gt.data=new Gt.g.DetectionListData),Gt.data.reset(mt.length),At=0;At<mt.length;++At){vt=mt[At];var le=Gt.data,ce=le.setBoundingBox,ke=At,Vn=vt.U,Ee=new Jt;if(ut(Ee,1,Vn.aa),ut(Ee,2,Vn.ba),ut(Ee,3,Vn.height),ut(Ee,4,Vn.width),ut(Ee,5,Vn.rotation),ut(Ee,6,Vn.Z),Vn=gn(Ee,Et),ce.call(le,ke,Vn),vt.P)for(le=0;le<vt.P.length;++le){Ee=vt.P[le];var Jn=!!Ee.visibility;ce=Gt.data,ke=ce.addNormalizedLandmark,Vn=At,Ee=Object.assign(Object.assign({},Ee),{visibility:Jn?Ee.visibility:0}),Jn=new rt,ut(Jn,1,Ee.x),ut(Jn,2,Ee.y),ut(Jn,3,Ee.z),Ee.visibility&&ut(Jn,4,Ee.visibility),Ee=gn(Jn,Rt),ke.call(ce,Vn,Ee)}if(vt.N)for(le=0;le<vt.N.length;++le)ce=Gt.data,ke=ce.addClassification,Vn=At,Ee=vt.N[le],Jn=new W,ut(Jn,2,Ee.$),Ee.index&&ut(Jn,1,Ee.index),Ee.label&&ut(Jn,3,Ee.label),Ee.displayName&&ut(Jn,4,Ee.displayName),Ee=gn(Jn,E),ke.call(ce,Vn,Ee)}Gt=Gt.data;break t;default:Gt={}}}switch(Q=Gt,D=j.stream,j.type){case"video":S.pushTexture2d(Object.assign(Object.assign({},Q),{stream:D,timestamp:b}));break;case"detections":st=Q,st.stream=D,st.timestamp=b,S.pushDetectionList(st);break;default:throw Error("Unknown input config type: '"+j.type+"'")}}return a.i.send(S),P(ft,a.D,4);case 4:S.delete(),ft.g=0}})};function x(t,c,a){var b,S,F,L,U,j,Q,D,st,ft,mt,Gt,vt,At;return Zt(function(le){switch(le.g){case 1:if(!a)return le.return(c);for(b={},S=0,F=Y(Object.keys(a)),L=F.next();!L.done;L=F.next())U=L.value,j=a[U],typeof j!="string"&&j.type==="texture"&&c[j.stream]!==void 0&&++S;1<S&&(t.H=!1),Q=Y(Object.keys(a)),L=Q.next();case 2:if(L.done){le.g=4;break}if(D=L.value,st=a[D],typeof st=="string")return vt=b,At=D,P(le,w(t,D,c[st]),14);if(ft=c[st.stream],st.type==="detection_list"){if(ft){for(var ce=ft.getRectList(),ke=ft.getLandmarksList(),Vn=ft.getClassificationsList(),Ee=[],Jn=0;Jn<ce.size();++Jn){var yr=In(ce.get(Jn),Jt,Yt);yr={U:{aa:it(yr,1),ba:it(yr,2),height:it(yr,3),width:it(yr,4),rotation:it(yr,5,0),Z:me(yr,6)},P:ue(In(ke.get(Jn),Ut,Nt),rt,1).map(A),N:J(In(Vn.get(Jn),O,ot))},Ee.push(yr)}ce=Ee}else ce=[];b[D]=ce,le.g=7;break}if(st.type==="proto_list"){if(ft){for(ce=Array(ft.size()),ke=0;ke<ft.size();ke++)ce[ke]=ft.get(ke);ft.delete()}else ce=[];b[D]=ce,le.g=7;break}if(ft===void 0){le.g=3;break}if(st.type==="float_list"){b[D]=ft,le.g=7;break}if(st.type==="proto"){b[D]=ft,le.g=7;break}if(st.type!=="texture")throw Error("Unknown output config type: '"+st.type+"'");return mt=t.s[D],mt||(mt=new B(t.h,t.F),t.s[D]=mt),P(le,nt(mt,ft,t.H),13);case 13:Gt=le.h,b[D]=Gt;case 7:st.transform&&b[D]&&(b[D]=st.transform(b[D])),le.g=3;break;case 14:vt[At]=le.h;case 3:L=Q.next(),le.g=2;break;case 4:return le.return(b)}})}function w(t,c,a){var b;return Zt(function(S){return typeof a=="number"||a instanceof Uint8Array||a instanceof t.h.Uint8BlobList?S.return(a):a instanceof t.h.Texture2dDataOut?(b=t.s[c],b||(b=new B(t.h,t.F),t.s[c]=b),S.return(nt(b,a,t.H))):S.return(void 0)})}function k(t,c){for(var a=c.name||"$",b=[].concat(N(c.wants)),S=new t.h.StringList,F=Y(c.wants),L=F.next();!L.done;L=F.next())S.push_back(L.value);F=t.h.PacketListener.implement({onResults:function(U){for(var j={},Q=0;Q<c.wants.length;++Q)j[b[Q]]=U.get(Q);var D=t.listeners[a];D&&(t.D=x(t,j,c.outs).then(function(st){st=D(st);for(var ft=0;ft<c.wants.length;++ft){var mt=j[b[ft]];typeof mt=="object"&&mt.hasOwnProperty&&mt.hasOwnProperty("delete")&&mt.delete()}st&&(t.D=st)}))}}),t.i.attachMultiListener(S,F),S.delete()}i.onResults=function(t,c){this.listeners[c||"$"]=t},Ht("Solution",It),Ht("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(t){var c=me(t,1),a=de(t,h,3);return a={x:it(a,1),y:it(a,2),depth:it(a,3)},t=de(t,G,2),{id:c,point2d:a,point3d:{x:it(t,1),y:it(t,2),z:it(t,3)}}}function d(t){var c=In(t,s,X);t=[],c=ue(c,M,2);for(var a=0;a<c.length;a++)t.push({id:me(c[a],1),keypoints:ue(c[a],K,2).map(o),visibility:it(c[a],3),scale:tt(c[a],6),translation:tt(c[a],5),rotation:tt(c[a],4)});return t}function g(t){switch(t){case"Camera":return"object_detection_3d_camera.tflite";case"Chair":return"object_detection_3d_chair.tflite";case"Cup":return"object_detection_3d_cup.tflite";default:return"object_detection_3d_sneakers.tflite"}}function e(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}var u={focalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_x"}},focalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_y"}},principalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_x"}},principalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_y"}},allowedLabels:{type:2,graphOptionXref:{calculatorName:"ConstantSidePacketCalculatorAllowedLabels",calculatorType:"ConstantSidePacketCalculator",fieldName:"string_value"}}};function m(t){var c=this;t=t||{},this.g=new It({locateFile:t.locateFile,files:[{url:"objectron_solution_packed_assets_loader.js"},{simd:!1,url:"objectron_solution_wasm_bin.js"},{simd:!0,url:"objectron_solution_simd_wasm_bin.js"}],graph:{url:"objectron.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["lifted_objects","image_transformed"],outs:{image:"image_transformed",objectDetections:{type:"proto",stream:"lifted_objects",transform:d}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,default:!1,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumObjects:{type:1,default:5,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorMaxNumObjects",fieldName:"int_value"}},staticImageMode:{type:0,default:!0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"objectrongpusubgraph__ConstantSidePacketCalculator",fieldName:"bool_value"}},minDetectionConfidence:{type:1,default:.5,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"objectrongpusubgraph__objectdetectionoidv4subgraph__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,default:.99,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"objectrongpusubgraph__boxlandmarksubgraph__ThresholdingCalculator",fieldName:"threshold"}},modelName:{default:"Shoe",onChange:function(a){var b,S,F,L;return Zt(function(U){return U.g==1?(b=a,c.g.setOptions({allowedLabels:e(b)},u),S=g(b),F="object_detection_3d.tflite",P(U,v(c.g,S),2)):(L=U.h,c.g.overrideFile(F,L),U.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return Zt(function(S){return b=a,c.h=b,c.g.setOptions({focalX:b[0],focalY:b[1]},u),S.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return Zt(function(S){return b=a,c.i=b,c.g.setOptions({principalX:b[0],principalY:b[1]},u),S.return(!0)})}},imageSize:{onChange:function(a){var b,S,F,L;return Zt(function(U){if(c.h===void 0||c.i===void 0)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),U.return();b=a,S=[b[0]/2,b[1]/2],F=[c.h[0]/S[0],c.h[1]/S[1]],L=[c.i[0]/S[0],c.i[1]/S[1]],c.setOptions({focalLength:F,principalPoint:L}),U.g=0})}}}})}i=m.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(t){this.g.onResults(t)},i.initialize=function(){var t=this;return Zt(function(c){return P(c,t.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(t){var c=this;return Zt(function(a){return P(a,c.g.send(t),0)})},i.setOptions=function(t){this.g.setOptions(t)},Ht("Objectron",m),Ht("BOX_CONNECTIONS",[[1,2],[2,4],[4,3],[3,1],[5,6],[6,8],[8,7],[7,5],[1,5],[2,6],[3,7],[4,8]]),Ht("BOX_KEYPOINTS",{CENTER:0,BACK_BOTTOM_LEFT:1,FRONT_BOTTOM_LEFT:2,BACK_TOP_LEFT:3,FRONT_TOP_LEFT:4,BACK_BOTTOM_RIGHT:5,FRONT_BOTTOM_RIGHT:6,BACK_TOP_RIGHT:7,FRONT_TOP_RIGHT:8}),Ht("VERSION","0.4.1636596145")}).call(Vi);const Ri={};(function(){var i;function n(s){var X=0;return function(){return X<s.length?{done:!1,value:s[X++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(s,X,R){return s==Array.prototype||s==Object.prototype||(s[X]=R.value),s};function f(s){s=[typeof globalThis=="object"&&globalThis,s,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var X=0;X<s.length;++X){var R=s[X];if(R&&R.Math==Math)return R}throw Error("Cannot find global object")}var Z=f(this);function I(s,X){if(X)t:{var R=Z;s=s.split(".");for(var T=0;T<s.length-1;T++){var J=s[T];if(!(J in R))break t;R=R[J]}s=s[s.length-1],T=R[s],X=X(T),X!=T&&X!=null&&r(R,s,{configurable:!0,writable:!0,value:X})}}I("Symbol",function(s){function X(A){if(this instanceof X)throw new TypeError("Symbol is not a constructor");return new R(T+(A||"")+"_"+J++,A)}function R(A,B){this.g=A,r(this,"description",{configurable:!0,writable:!0,value:B})}if(s)return s;R.prototype.toString=function(){return this.g};var T="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",J=0;return X}),I("Symbol.iterator",function(s){if(s)return s;s=Symbol("Symbol.iterator");for(var X="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),R=0;R<X.length;R++){var T=Z[X[R]];typeof T=="function"&&typeof T.prototype[s]!="function"&&r(T.prototype,s,{configurable:!0,writable:!0,value:function(){return C(n(this))}})}return s});function C(s){return s={next:s},s[Symbol.iterator]=function(){return this},s}function Y(s){var X=typeof Symbol<"u"&&Symbol.iterator&&s[Symbol.iterator];return X?X.call(s):{next:n(s)}}function N(s){if(!(s instanceof Array)){s=Y(s);for(var X,R=[];!(X=s.next()).done;)R.push(X.value);s=R}return s}var et=typeof Object.create=="function"?Object.create:function(s){function X(){}return X.prototype=s,new X},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var wt={a:!0},Ft={};try{Ft.__proto__=wt,pt=Ft.a;break t}catch{}pt=!1}lt=pt?function(s,X){if(s.__proto__=X,s.__proto__!==X)throw new TypeError(s+" is not extensible");return s}:null}var at=lt;function dt(s,X){if(s.prototype=et(X.prototype),s.prototype.constructor=s,at)at(s,X);else for(var R in X)if(R!="prototype")if(Object.defineProperties){var T=Object.getOwnPropertyDescriptor(X,R);T&&Object.defineProperty(s,R,T)}else s[R]=X[R];s.ea=X.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Bt.prototype.o=function(s){this.h=s};function ee(s,X){s.j={U:X,V:!0},s.g=s.m||s.s}Bt.prototype.return=function(s){this.j={return:s},this.g=this.s};function P(s,X,R){return s.g=R,{value:X}}function De(s){this.g=new Bt,this.h=s}function je(s,X){kt(s.g);var R=s.g.i;return R?We(s,"return"in R?R.return:function(T){return{value:T,done:!0}},X,s.g.return):(s.g.return(X),jt(s))}function We(s,X,R,T){try{var J=X.call(s.g.i,R);if(!(J instanceof Object))throw new TypeError("Iterator result "+J+" is not an object");if(!J.done)return s.g.l=!1,J;var A=J.value}catch(B){return s.g.i=null,ee(s.g,B),jt(s)}return s.g.i=null,T.call(s.g,A),jt(s)}function jt(s){for(;s.g.g;)try{var X=s.h(s.g);if(X)return s.g.l=!1,{value:X.value,done:!1}}catch(R){s.g.h=void 0,ee(s.g,R)}if(s.g.l=!1,s.g.j){if(X=s.g.j,s.g.j=null,X.V)throw X.U;return{value:X.return,done:!0}}return{value:void 0,done:!0}}function Hn(s){this.next=function(X){return kt(s.g),s.g.i?X=We(s,s.g.i.next,X,s.g.o):(s.g.o(X),X=jt(s)),X},this.throw=function(X){return kt(s.g),s.g.i?X=We(s,s.g.i.throw,X,s.g.o):(ee(s.g,X),X=jt(s)),X},this.return=function(X){return je(s,X)},this[Symbol.iterator]=function(){return this}}function ne(s){function X(T){return s.next(T)}function R(T){return s.throw(T)}return new Promise(function(T,J){function A(B){B.done?T(B.value):Promise.resolve(B.value).then(X,R).then(A,J)}A(s.next())})}function Zt(s){return ne(new Hn(new De(s)))}I("Promise",function(s){function X(B){this.h=0,this.i=void 0,this.g=[],this.o=!1;var nt=this.j();try{B(nt.resolve,nt.reject)}catch($){nt.reject($)}}function R(){this.g=null}function T(B){return B instanceof X?B:new X(function(nt){nt(B)})}if(s)return s;R.prototype.h=function(B){if(this.g==null){this.g=[];var nt=this;this.i(function(){nt.l()})}this.g.push(B)};var J=Z.setTimeout;R.prototype.i=function(B){J(B,0)},R.prototype.l=function(){for(;this.g&&this.g.length;){var B=this.g;this.g=[];for(var nt=0;nt<B.length;++nt){var $=B[nt];B[nt]=null;try{$()}catch(yt){this.j(yt)}}}this.g=null},R.prototype.j=function(B){this.i(function(){throw B})},X.prototype.j=function(){function B(yt){return function(Xt){$||($=!0,yt.call(nt,Xt))}}var nt=this,$=!1;return{resolve:B(this.C),reject:B(this.l)}},X.prototype.C=function(B){if(B===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(B instanceof X)this.F(B);else{t:switch(typeof B){case"object":var nt=B!=null;break t;case"function":nt=!0;break t;default:nt=!1}nt?this.v(B):this.m(B)}},X.prototype.v=function(B){var nt=void 0;try{nt=B.then}catch($){this.l($);return}typeof nt=="function"?this.G(nt,B):this.m(B)},X.prototype.l=function(B){this.s(2,B)},X.prototype.m=function(B){this.s(1,B)},X.prototype.s=function(B,nt){if(this.h!=0)throw Error("Cannot settle("+B+", "+nt+"): Promise already settled in state"+this.h);this.h=B,this.i=nt,this.h===2&&this.D(),this.A()},X.prototype.D=function(){var B=this;J(function(){if(B.B()){var nt=Z.console;typeof nt<"u"&&nt.error(B.i)}},1)},X.prototype.B=function(){if(this.o)return!1;var B=Z.CustomEvent,nt=Z.Event,$=Z.dispatchEvent;return typeof $>"u"?!0:(typeof B=="function"?B=new B("unhandledrejection",{cancelable:!0}):typeof nt=="function"?B=new nt("unhandledrejection",{cancelable:!0}):(B=Z.document.createEvent("CustomEvent"),B.initCustomEvent("unhandledrejection",!1,!0,B)),B.promise=this,B.reason=this.i,$(B))},X.prototype.A=function(){if(this.g!=null){for(var B=0;B<this.g.length;++B)A.h(this.g[B]);this.g=null}};var A=new R;return X.prototype.F=function(B){var nt=this.j();B.J(nt.resolve,nt.reject)},X.prototype.G=function(B,nt){var $=this.j();try{B.call(nt,$.resolve,$.reject)}catch(yt){$.reject(yt)}},X.prototype.then=function(B,nt){function $(xt,ht){return typeof xt=="function"?function(Wt){try{yt(xt(Wt))}catch(It){Xt(It)}}:ht}var yt,Xt,Kt=new X(function(xt,ht){yt=xt,Xt=ht});return this.J($(B,yt),$(nt,Xt)),Kt},X.prototype.catch=function(B){return this.then(void 0,B)},X.prototype.J=function(B,nt){function $(){switch(yt.h){case 1:B(yt.i);break;case 2:nt(yt.i);break;default:throw Error("Unexpected state: "+yt.h)}}var yt=this;this.g==null?A.h($):this.g.push($),this.o=!0},X.resolve=T,X.reject=function(B){return new X(function(nt,$){$(B)})},X.race=function(B){return new X(function(nt,$){for(var yt=Y(B),Xt=yt.next();!Xt.done;Xt=yt.next())T(Xt.value).J(nt,$)})},X.all=function(B){var nt=Y(B),$=nt.next();return $.done?T([]):new X(function(yt,Xt){function Kt(Wt){return function(It){xt[Wt]=It,ht--,ht==0&&yt(xt)}}var xt=[],ht=0;do xt.push(void 0),ht++,T($.value).J(Kt(xt.length-1),Xt),$=nt.next();while(!$.done)})},X});function $e(s,X){s instanceof String&&(s+="");var R=0,T=!1,J={next:function(){if(!T&&R<s.length){var A=R++;return{value:X(A,s[A]),done:!1}}return T=!0,{done:!0,value:void 0}}};return J[Symbol.iterator]=function(){return J},J}var An=typeof Object.assign=="function"?Object.assign:function(s,X){for(var R=1;R<arguments.length;R++){var T=arguments[R];if(T)for(var J in T)Object.prototype.hasOwnProperty.call(T,J)&&(s[J]=T[J])}return s};I("Object.assign",function(s){return s||An}),I("Object.is",function(s){return s||function(X,R){return X===R?X!==0||1/X===1/R:X!==X&&R!==R}}),I("Array.prototype.includes",function(s){return s||function(X,R){var T=this;T instanceof String&&(T=String(T));var J=T.length;for(R=R||0,0>R&&(R=Math.max(R+J,0));R<J;R++){var A=T[R];if(A===X||Object.is(A,X))return!0}return!1}}),I("String.prototype.includes",function(s){return s||function(X,R){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(X instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(X,R||0)!==-1}}),I("Array.prototype.keys",function(s){return s||function(){return $e(this,function(X){return X})}});var Re=this||self;function Ht(s,X){s=s.split(".");var R=Re;s[0]in R||typeof R.execScript>"u"||R.execScript("var "+s[0]);for(var T;s.length&&(T=s.shift());)s.length||X===void 0?R[T]&&R[T]!==Object.prototype[T]?R=R[T]:R=R[T]={}:R[T]=X}function Ye(s){Re.setTimeout(function(){throw s},0)}function sn(s){Ye(s)}function Gn(s,X){sn(Error("Invalid wire type: "+s+" (at position "+X+")"))}function Fn(){sn(Error("Failed to read varint, encoding is invalid."))}function Rn(s,X){return X=String.fromCharCode.apply(null,X),s==null?X:s+X}var Nn,dn=typeof TextDecoder<"u",pn,kn=typeof TextEncoder<"u";function Cn(s){if(kn)s=(pn||(pn=new TextEncoder)).encode(s);else{var X=void 0;X=X===void 0?!1:X;for(var R=0,T=new Uint8Array(3*s.length),J=0;J<s.length;J++){var A=s.charCodeAt(J);if(128>A)T[R++]=A;else{if(2048>A)T[R++]=A>>6|192;else{if(55296<=A&&57343>=A){if(56319>=A&&J<s.length){var B=s.charCodeAt(++J);if(56320<=B&&57343>=B){A=1024*(A-55296)+B-56320+65536,T[R++]=A>>18|240,T[R++]=A>>12&63|128,T[R++]=A>>6&63|128,T[R++]=A&63|128;continue}else J--}if(X)throw Error("Found an unpaired surrogate");A=65533}T[R++]=A>>12|224,T[R++]=A>>6&63|128}T[R++]=A&63|128}}s=T.subarray(0,R)}return s}var ze={},Me=null;function xn(s){var X;X===void 0&&(X=0),Se(),X=ze[X];for(var R=Array(Math.floor(s.length/3)),T=X[64]||"",J=0,A=0;J<s.length-2;J+=3){var B=s[J],nt=s[J+1],$=s[J+2],yt=X[B>>2];B=X[(B&3)<<4|nt>>4],nt=X[(nt&15)<<2|$>>6],$=X[$&63],R[A++]=yt+B+nt+$}switch(yt=0,$=T,s.length-J){case 2:yt=s[J+1],$=X[(yt&15)<<2]||T;case 1:s=s[J],R[A]=X[s>>2]+X[(s&3)<<4|yt>>4]+$+T}return R.join("")}function Xn(s){var X=s.length,R=3*X/4;R%3?R=Math.floor(R):"=.".indexOf(s[X-1])!=-1&&(R="=.".indexOf(s[X-2])!=-1?R-2:R-1);var T=new Uint8Array(R),J=0;return he(s,function(A){T[J++]=A}),T.subarray(0,J)}function he(s,X){function R($){for(;T<s.length;){var yt=s.charAt(T++),Xt=Me[yt];if(Xt!=null)return Xt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return $}Se();for(var T=0;;){var J=R(-1),A=R(0),B=R(64),nt=R(64);if(nt===64&&J===-1)break;X(J<<2|A>>4),B!=64&&(X(A<<4&240|B>>2),nt!=64&&X(B<<6&192|nt))}}function Se(){if(!Me){Me={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),X=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var T=s.concat(X[R].split(""));ze[R]=T;for(var J=0;J<T.length;J++){var A=T[J];Me[A]===void 0&&(Me[A]=J)}}}}var Oe=typeof Uint8Array=="function",re;function Ve(s){if(this.g=s,s!==null&&s.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var s="";else s=this.g,s=this.g=s==null||typeof s=="string"?s:Oe&&s instanceof Uint8Array?xn(s):null;return s};var ln=typeof Uint8Array.prototype.slice=="function";function Be(s,X,R){return X===R?re||(re=new Uint8Array(0)):ln?s.slice(X,R):new Uint8Array(s.subarray(X,R))}var Qt=0,Ze=0;function Le(s){if(s.constructor===Uint8Array)return s;if(s.constructor===ArrayBuffer)return new Uint8Array(s);if(s.constructor===Array)return new Uint8Array(s);if(s.constructor===String)return Xn(s);if(s.constructor===Ve){if(s.g==null)var X=re||(re=new Uint8Array(0));else{X=Uint8Array;var R=s.g;R=R==null||Oe&&R!=null&&R instanceof Uint8Array?R:typeof R=="string"?Xn(R):null,s=s.g=R,X=new X(s)}return X}if(s instanceof Uint8Array)return new Uint8Array(s.buffer,s.byteOffset,s.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Mt(s,X){X=X===void 0?{}:X,X=X.u===void 0?!1:X.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=X,s&&xe(this,s)}function xe(s,X){s.h=Le(X),s.l=0,s.i=s.h.length,s.g=s.l}Mt.prototype.reset=function(){this.g=this.l};function zt(s){s.g>s.i&&(s.j=!0,sn(Error("Tried to read past the end of the data "+s.g+" > "+s.i)))}function ye(s){var X=s.h,R=X[s.g],T=R&127;return 128>R?(s.g+=1,zt(s),T):(R=X[s.g+1],T|=(R&127)<<7,128>R?(s.g+=2,zt(s),T):(R=X[s.g+2],T|=(R&127)<<14,128>R?(s.g+=3,zt(s),T):(R=X[s.g+3],T|=(R&127)<<21,128>R?(s.g+=4,zt(s),T):(R=X[s.g+4],T|=(R&15)<<28,128>R?(s.g+=5,zt(s),T>>>0):(s.g+=5,128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]?(s.j=!0,Fn(),T):(zt(s),T))))))}var we=[];function qe(){this.g=new Uint8Array(64),this.h=0}function Xe(s,X){if(!(s.h+1<s.g.length)){var R=s.g;s.g=new Uint8Array(Math.ceil(1+2*s.g.length)),s.g.set(R)}s.g[s.h++]=X}qe.prototype.length=function(){return this.h},qe.prototype.end=function(){var s=this.g,X=this.h;return this.h=0,Be(s,0,X)};function Ot(s,X){for(;127<X;)Xe(s,X&127|128),X>>>=7;Xe(s,X)}function Ae(s){var X={},R=X.N===void 0?!1:X.N;this.m={u:X.u===void 0?!1:X.u},this.N=R,X=this.m,we.length?(R=we.pop(),X&&(R.u=X.u),s&&xe(R,s),s=R):s=new Mt(s,X),this.g=s,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Ae.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Pe(s){var X=s.g;if((X=X.g==X.i)||(X=s.j)||(X=s.g,X=X.j||0>X.g||X.g>X.i),X)return!1;s.l=s.g.g;var R=ye(s.g);return X=R>>>3,R&=7,0<=R&&5>=R?(s.i=X,s.h=R,!0):(s.j=!0,Gn(R,s.l),!1)}function Ie(s){switch(s.h){case 0:if(s.h!=0)Ie(s);else t:{s=s.g;for(var X=s.g,R=0;10>R;R++){if((s.h[X]&128)===0){s.g=X+1,zt(s);break t}X++}s.j=!0,Fn()}break;case 1:s=s.g,s.g+=8,zt(s);break;case 2:s.h!=2?Ie(s):(X=ye(s.g),s=s.g,s.g+=X,zt(s));break;case 5:s=s.g,s.g+=4,zt(s);break;case 3:X=s.i;do{if(!Pe(s)){s.j=!0,sn(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=X&&(s.j=!0,sn(Error("Unmatched end-group tag")));break}Ie(s)}while(1);break;default:s.j=!0,Gn(s.h,s.l)}}function Wn(s,X,R){s.N||(s=Be(s.g.h,R,s.g.g),(R=X.m)?R.push(s):X.m=[s])}var cn=[];function _e(){this.h=[],this.i=0,this.g=new qe}function un(s,X){X.length!==0&&(s.h.push(X),s.i+=X.length)}function ve(s,X,R){Ot(s.g,8*X+2),Ot(s.g,R.length),un(s,s.g.end()),un(s,R)}var Te=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Ge(s,X){Object.isFrozen(s)||(Te?s[Te]|=X:s.g!==void 0?s.g|=X:Object.defineProperties(s,{g:{value:X,configurable:!0,writable:!0,enumerable:!1}}))}function ie(s){if(!s)return 0;var X;return Te?X=s[Te]:X=s.g,X==null?0:X}function Qe(s){return Array.isArray(s)&&Ge(s,1),s}function qt(s){if(!Array.isArray(s))throw Error("cannot mark non-array as immutable");Ge(s,2)}function Pt(s){return s!==null&&typeof s=="object"&&s.constructor===Object}function hn(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return Oe&&s!=null&&s instanceof Uint8Array?xn(s):s;default:return s}}function fe(s,X){if(s!=null)return Array.isArray(s)||Pt(s)?Lt(s,X):X(s)}function Lt(s,X){if(Array.isArray(s)){for(var R=Array(s.length),T=0;T<s.length;T++)R[T]=fe(s[T],X);return ie(s)&1&&Qe(R),R}R={};for(T in s)R[T]=fe(s[T],X);return R}var Vt;function oe(s,X,R){var T=Vt;Vt=null,s||(s=T),T=this.constructor.ca,s||(s=T?[T]:[]),this.j=(T?0:-1)-(this.constructor.aa||0),this.i=null,this.g=s;t:{if(T=this.g.length,s=T-1,T&&(T=this.g[s],Pt(T))){this.l=s-this.j,this.h=T;break t}X!==void 0&&-1<X?(this.l=Math.max(X,s+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(R)for(X=0;X<R.length;X++)s=R[X],s<this.l?(s+=this.j,(T=this.g[s])?Qe(T):this.g[s]=Fe):(te(this),(T=this.h[s])?Qe(T):this.h[s]=Fe)}var Fe=Object.freeze(Qe([]));function te(s){var X=s.l+s.j;s.g[X]||(s.h=s.g[X]={})}function se(s,X,R){return X===-1?null:(R===void 0?0:R)||X>=s.l?s.h?s.h[X]:void 0:s.g[X+s.j]}function tt(s,X,R){R=R===void 0?!0:R;var T=T===void 0?!1:T,J=se(s,X,T);return J==null&&(J=Fe),J===Fe?(J=Qe([]),ut(s,X,J,T)):R&&Array.isArray(J)&&ie(J)&2&&(J=J.slice(),ut(s,X,J,T)),J}function it(s,X,R){return s=se(s,X),s=s==null?s:+s,s==null?R===void 0?0:R:s}function ut(s,X,R,T){(T===void 0?0:T)||X>=s.l?(te(s),s.h[X]=R):s.g[X+s.j]=R}function _t(s,X,R){s.i||(s.i={});var T=s.i[R];if(!T){var J=tt(s,R,!1);T=[];for(var A=Array.isArray(J)?!!(ie(J)&2):!1,B=0;B<J.length;B++)T[B]=new X(J[B]),A&&qt(T[B].g);A&&(qt(T),Object.freeze(T)),s.i[R]=T}return T}function de(s,X,R,T,J){var A=_t(s,T,X);R=R||new T,s=tt(s,X),J!=null?(A.splice(J,0,R),s.splice(J,0,ue(R))):(A.push(R),s.push(ue(R)))}oe.prototype.toJSON=function(){var s=ue(this);return Lt(s,hn)};function ue(s){if(s.i)for(var X in s.i){var R=s.i[X];if(Array.isArray(R))for(var T=0;T<R.length;T++)R[T]&&ue(R[T]);else R&&ue(R)}return s.g}oe.prototype.toString=function(){return ue(this).toString()};function St(s,X){return s=se(s,X),s==null?0:s}function me(s,X){return s=se(s,X),s==null?"":s}function He(s,X){if(s=s.m){un(X,X.g.end());for(var R=0;R<s.length;R++)un(X,s[R])}}function tn(s){var X=s[0];switch(s.length){case 2:var R=s[1];return function($,yt,Xt){return X($,yt,Xt,R)};case 3:var T=s[1],J=s[2];return function($,yt,Xt){return X($,yt,Xt,T,J)};case 4:var A=s[1],B=s[2],nt=s[3];return function($,yt,Xt){return X($,yt,Xt,A,B,nt)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function en(s,X,R){for(;Pe(X)&&X.h!=4;){var T=X.i,J=R[T];if(J){if(Array.isArray(J)&&(J=R[T]=tn(J)),!J(X,s,T)){T=X,J=s;var A=T.l;Ie(T),Wn(T,J,A)}}else T=X,J=s,A=T.l,Ie(T),Wn(T,J,A)}return s}function fn(s,X){var R=new _e;if(X(s,R),s=R.i+R.g.length(),s===0)R=new Uint8Array(0);else{s=new Uint8Array(s);for(var T=R.h,J=T.length,A=X=0;A<J;A++){var B=T[A];B.length!==0&&(s.set(B,X),X+=B.length)}T=R.g,J=T.h,J!==0&&(s.set(T.g.subarray(0,J),X),T.h=0),R.h=[s],R=s}return R}function bn(s,X,R){if(cn.length){var T=cn.pop();s&&(xe(T.g,s),T.i=-1,T.h=-1),s=T}else s=new Ae(s);try{return R(new X,s)}finally{X=s.g,X.h=null,X.l=0,X.i=0,X.g=0,X.j=!1,X.u=!1,s.i=-1,s.h=-1,s.j=!1,100>cn.length&&cn.push(s)}}function Ce(s,X,R){if(X=se(X,R),X!=null){Ot(s.g,8*R+5),s=s.g;var T=X;T=(R=0>T?1:0)?-T:T,T===0?0<1/T?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(T)?(Ze=0,Qt=2147483647):34028234663852886e22<T?(Ze=0,Qt=(R<<31|2139095040)>>>0):11754943508222875e-54>T?(T=Math.round(T/Math.pow(2,-149)),Ze=0,Qt=(R<<31|T)>>>0):(X=Math.floor(Math.log(T)/Math.LN2),T*=Math.pow(2,-X),T=Math.round(8388608*T),16777216<=T&&++X,Ze=0,Qt=(R<<31|X+127<<23|T&8388607)>>>0),R=Qt,Xe(s,R>>>0&255),Xe(s,R>>>8&255),Xe(s,R>>>16&255),Xe(s,R>>>24&255)}}function nn(s,X,R){if(s.h!==5)return!1;s=s.g;var T=s.h[s.g],J=s.h[s.g+1],A=s.h[s.g+2],B=s.h[s.g+3];return s.g+=4,zt(s),J=(T<<0|J<<8|A<<16|B<<24)>>>0,s=2*(J>>31)+1,T=J>>>23&255,J&=8388607,ut(X,R,T==255?J?NaN:1/0*s:T==0?s*Math.pow(2,-149)*J:s*Math.pow(2,T-150)*(J+Math.pow(2,23))),!0}function jn(s,X,R){if(s.h!==0)return!1;for(var T=s.g,J=128,A=0,B=s=0;4>B&&128<=J;B++)J=T.h[T.g++],A|=(J&127)<<7*B;if(128<=J&&(J=T.h[T.g++],A|=(J&127)<<28,s|=(J&127)>>4),128<=J)for(B=0;5>B&&128<=J;B++)J=T.h[T.g++],s|=(J&127)<<7*B+3;return 128>J?(T=A>>>0,J=s>>>0,(s=J&2147483648)&&(T=~T+1>>>0,J=~J>>>0,T==0&&(J=J+1>>>0)),T=4294967296*J+(T>>>0),s=s?-T:T):(T.j=!0,Fn(),s=void 0),ut(X,R,s),!0}function rn(s,X,R){return s.h!==0?!1:(ut(X,R,ye(s.g)),!0)}function Ne(s,X,R){if(s.h!==2)return!1;var T=ye(s.g);s=s.g;var J=s.g;s.g+=T,zt(s),s=s.h;var A;if(dn)(A=Nn)||(A=Nn=new TextDecoder("utf-8",{fatal:!1})),A=A.decode(s.subarray(J,J+T));else{T=J+T;for(var B=[],nt=null,$,yt,Xt;J<T;)$=s[J++],128>$?B.push($):224>$?J>=T?B.push(65533):(yt=s[J++],194>$||(yt&192)!==128?(J--,B.push(65533)):B.push(($&31)<<6|yt&63)):240>$?J>=T-1?B.push(65533):(yt=s[J++],(yt&192)!==128||$===224&&160>yt||$===237&&160<=yt||((A=s[J++])&192)!==128?(J--,B.push(65533)):B.push(($&15)<<12|(yt&63)<<6|A&63)):244>=$?J>=T-2?B.push(65533):(yt=s[J++],(yt&192)!==128||($<<28)+(yt-144)>>30!==0||((A=s[J++])&192)!==128||((Xt=s[J++])&192)!==128?(J--,B.push(65533)):($=($&7)<<18|(yt&63)<<12|(A&63)<<6|Xt&63,$-=65536,B.push(($>>10&1023)+55296,($&1023)+56320))):B.push(65533),8192<=B.length&&(nt=Rn(nt,B),B.length=0);A=Rn(nt,B)}return ut(X,R,A),!0}function gn(s,X,R,T,J){if(s.h!==2)return!1;var A=new T,B=s.g.i,nt=ye(s.g),$=s.g.g+nt;if(s.g.i=$,J(A,s),J=$-s.g.g,J!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(nt+" bytes, instead read "+(nt-J)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return s.g.g=$,s.g.i=B,de(X,R,A,T,void 0),!0}function In(s){oe.call(this,s)}var Ke;dt(In,oe);function En(s,X){var R=se(s,1);if(R!=null&&R!=null){Ot(X.g,8);var T=X.g;if(0<=R)Ot(T,R);else{for(var J=0;9>J;J++)Xe(T,R&127|128),R>>=7;Xe(T,1)}}Ce(X,s,2),T=se(s,3),T!=null&&ve(X,3,Cn(T)),T=se(s,4),T!=null&&ve(X,4,Cn(T)),He(s,X)}function on(s,X){return en(s,X,Ke||(Ke={1:rn,2:nn,3:Ne,4:Ne}))}function Zn(s){oe.call(this,s,-1,an)}var Sn;dt(Zn,oe),Zn.prototype.addClassification=function(s,X){return de(this,1,s,In,X),this};function Kn(s,X){return en(s,X,Sn||(Sn={1:[gn,In,on]}))}var an=[1];function Yn(s){oe.call(this,s)}var _n;dt(Yn,oe);function Qn(s,X){Ce(X,s,1),Ce(X,s,2),Ce(X,s,3),Ce(X,s,4),Ce(X,s,5),He(s,X)}function wn(s,X){return en(s,X,_n||(_n={1:nn,2:nn,3:nn,4:nn,5:nn}))}function Ln(s){oe.call(this,s,-1,V)}var p;dt(Ln,oe);function W(s,X){return en(s,X,p||(p={1:[gn,Yn,wn]}))}var V=[1];function E(s){oe.call(this,s)}var O;dt(E,oe);function ot(s,X){Ce(X,s,1),Ce(X,s,2),Ce(X,s,3),Ce(X,s,4),Ce(X,s,5);var R=se(s,6);if(R!=null&&R!=null){Ot(X.g,48);var T=X.g,J=R;R=0>J,J=Math.abs(J);var A=J>>>0;for(J=Math.floor((J-A)/4294967296),J>>>=0,R&&(J=~J>>>0,A=(~A>>>0)+1,4294967295<A&&(A=0,J++,4294967295<J&&(J=0))),Qt=A,Ze=J,R=Qt,A=Ze;0<A||127<R;)Xe(T,R&127|128),R=(R>>>7|A<<25)>>>0,A>>>=7;Xe(T,R)}He(s,X)}function z(s,X){return en(s,X,O||(O={1:nn,2:nn,3:nn,4:nn,5:nn,6:jn}))}function rt(s,X,R){if(R=s.createShader(R===0?s.VERTEX_SHADER:s.FRAGMENT_SHADER),s.shaderSource(R,X),s.compileShader(R),!s.getShaderParameter(R,s.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
104
|
+
`+a.getProgramInfoLog(L));b=t.m=L,a.useProgram(b),S=a.getUniformLocation(b,"sampler0"),t.j={J:a.getAttribLocation(b,"aVertex"),I:a.getAttribLocation(b,"aTex"),ja:S},t.s=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.enableVertexAttribArray(t.j.J),a.vertexAttribPointer(t.j.J,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),t.o=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.enableVertexAttribArray(t.j.I),a.vertexAttribPointer(t.j.I,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),a.uniform1i(S,0)}b=t.j,a.useProgram(t.m),a.canvas.width=c.width,a.canvas.height=c.height,a.viewport(0,0,c.width,c.height),a.activeTexture(a.TEXTURE0),t.h.bindTexture2d(c.glName),a.enableVertexAttribArray(b.J),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.vertexAttribPointer(b.J,2,a.FLOAT,!1,0,0),a.enableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.vertexAttribPointer(b.I,2,a.FLOAT,!1,0,0),a.bindFramebuffer(a.DRAW_FRAMEBUFFER?a.DRAW_FRAMEBUFFER:a.FRAMEBUFFER,null),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.colorMask(!0,!0,!0,!0),a.drawArrays(a.TRIANGLE_FAN,0,4),a.disableVertexAttribArray(b.J),a.disableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}function yt(t){this.g=t}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Kt(t,c){return c+t}function xt(t,c){window[t]=c}function ht(t){var c=document.createElement("script");return c.setAttribute("src",t),c.setAttribute("crossorigin","anonymous"),new Promise(function(a){c.addEventListener("load",function(){a()},!1),c.addEventListener("error",function(){a()},!1),document.body.appendChild(c)})}function Wt(){return Zt(function(t){switch(t.g){case 1:return t.m=2,P(t,WebAssembly.instantiate(Xt),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})}function It(t){if(this.g=t,this.listeners={},this.j={},this.G={},this.m={},this.s={},this.H=this.o=this.S=!0,this.D=Promise.resolve(),this.R="",this.C={},this.locateFile=t&&t.locateFile||Kt,typeof window=="object")var c=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")c=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.T=c,t.options){c=T(Object.keys(t.options));for(var a=c.next();!a.done;a=c.next()){a=a.value;var b=t.options[a].default;b!==void 0&&(this.j[a]=typeof b=="function"?b():b)}}}i=It.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(t){var c,a,b,S,L,C,U,z,Q,D,st;return Zt(function(ft){switch(ft.g){case 1:return t.S?(c=t.g.files===void 0?[]:typeof t.g.files=="function"?t.g.files(t.j):t.g.files,P(ft,Wt(),2)):ft.return();case 2:if(a=ft.h,typeof window=="object")return xt("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),xt("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),C=c.filter(function(mt){return mt.data!==void 0}),U=c.filter(function(mt){return mt.data===void 0}),z=Promise.all(C.map(function(mt){var Gt=v(t,mt.url);if(mt.path!==void 0){var vt=mt.path;Gt=Gt.then(function(At){return t.overrideFile(vt,At),Promise.resolve(At)})}return Gt})),Q=Promise.all(U.map(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a?ht(t.locateFile(mt.url,t.T)):Promise.resolve()})).then(function(){var mt,Gt,vt;return Zt(function(At){if(At.g==1)return mt=window.createMediapipeSolutionsWasm,Gt=window.createMediapipeSolutionsPackedAssets,vt=t,P(At,mt(Gt),2);vt.h=At.h,At.g=0})}),D=function(){return Zt(function(mt){return t.g.graph&&t.g.graph.url?mt=P(mt,v(t,t.g.graph.url),0):(mt.g=0,mt=void 0),mt})}(),P(ft,Promise.all([Q,z,D]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return b=c.filter(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a}).map(function(mt){return t.locateFile(mt.url,t.T)}),importScripts.apply(null,J(b)),S=t,P(ft,createMediapipeSolutionsWasm(Module),6);case 6:S.h=ft.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,L=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(L),ft.g=4;break;case 7:if(t.l=document.createElement("canvas"),st=t.l.getContext("webgl2",{}),!st&&(st=t.l.getContext("webgl",{}),!st))return alert("Failed to create WebGL canvas context when passing video frame."),ft.return();t.F=st,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,ft.g=0}})}function Ft(t){var c,a,b,S,L,C,U,z;return Zt(function(Q){if(Q.g==1){if(t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url)return Q.return();if(t.o=!0,!t.g.graph||!t.g.graph.url){Q.g=2;return}return t.R=t.g.graph.url,P(Q,v(t,t.g.graph.url),3)}for(Q.g!=2&&(c=Q.h,t.i.loadGraph(c)),a=T(Object.keys(t.C)),b=a.next();!b.done;b=a.next())S=b.value,t.i.overrideFile(S,t.C[S]);if(t.C={},t.g.listeners)for(L=T(t.g.listeners),C=L.next();!C.done;C=L.next())U=C.value,k(t,U);z=t.j,t.j={},t.setOptions(z),Q.g=0})}i.reset=function(){var t=this;return Zt(function(c){t.i&&(t.i.reset(),t.m={},t.s={}),c.g=0})},i.setOptions=function(t,c){var a=this;if(c=c||this.g.options){for(var b=[],S=[],L={},C=T(Object.keys(t)),U=C.next();!U.done;L={L:L.L,M:L.M},U=C.next()){var z=U.value;z in this.j&&this.j[z]===t[z]||(this.j[z]=t[z],U=c[z],U!==void 0&&(U.onChange&&(L.L=U.onChange,L.M=t[z],b.push(function(Q){return function(){var D;return Zt(function(st){if(st.g==1)return P(st,Q.L(Q.M),2);D=st.h,D===!0&&(a.o=!0),st.g=0})}}(L))),U.graphOptionXref&&(z={valueNumber:U.type===1?t[z]:0,valueBoolean:U.type===0?t[z]:!1,valueString:U.type===2?t[z]:""},U=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),U.graphOptionXref),z),S.push(U))))}(b.length!==0||S.length!==0)&&(this.o=!0,this.B=(this.B===void 0?[]:this.B).concat(S),this.A=(this.A===void 0?[]:this.A).concat(b))}};function l(t){var c,a,b,S,L,C,U;return Zt(function(z){switch(z.g){case 1:if(!t.o)return z.return();if(!t.A){z.g=2;break}c=T(t.A),a=c.next();case 3:if(a.done){z.g=5;break}return b=a.value,P(z,b(),4);case 4:a=c.next(),z.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(S=new t.h.GraphOptionChangeRequestList,L=T(t.B),C=L.next();!C.done;C=L.next())U=C.value,S.push_back(U);t.i.changeOptions(S),S.delete(),t.B=void 0}t.o=!1,z.g=0}})}i.initialize=function(){var t=this;return Zt(function(c){return c.g==1?P(c,wt(t),2):c.g!=3?P(c,Ft(t),3):P(c,l(t),0)})};function v(t,c){var a,b;return Zt(function(S){return c in t.G?S.return(t.G[c]):(a=t.locateFile(c,""),b=fetch(a).then(function(L){return L.arrayBuffer()}),t.G[c]=b,S.return(b))})}i.overrideFile=function(t,c){this.i?this.i.overrideFile(t,c):this.C[t]=c},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(t,c){var a=this,b,S,L,C,U,z,Q,D,st;return Zt(function(ft){switch(ft.g){case 1:return a.g.inputs?(b=1e3*(c==null?performance.now():c),P(ft,a.D,2)):ft.return();case 2:return P(ft,a.initialize(),3);case 3:for(S=new a.h.PacketDataList,L=T(Object.keys(t)),C=L.next();!C.done;C=L.next())if(U=C.value,z=a.g.inputs[U]){t:{var mt=t[U];switch(z.type){case"video":var Gt=a.m[z.stream];if(Gt||(Gt=new B(a.h,a.F),a.m[z.stream]=Gt),Gt.l===0&&(Gt.l=Gt.h.createTexture()),typeof HTMLVideoElement<"u"&&mt instanceof HTMLVideoElement)var vt=mt.videoWidth,At=mt.videoHeight;else typeof HTMLImageElement<"u"&&mt instanceof HTMLImageElement?(vt=mt.naturalWidth,At=mt.naturalHeight):(vt=mt.width,At=mt.height);At={glName:Gt.l,width:vt,height:At},vt=Gt.g,vt.canvas.width=At.width,vt.canvas.height=At.height,vt.activeTexture(vt.TEXTURE0),Gt.h.bindTexture2d(Gt.l),vt.texImage2D(vt.TEXTURE_2D,0,vt.RGBA,vt.RGBA,vt.UNSIGNED_BYTE,mt),Gt.h.bindTexture2d(0),Gt=At;break t;case"detections":for(Gt=a.m[z.stream],Gt||(Gt=new yt(a.h),a.m[z.stream]=Gt),Gt.data||(Gt.data=new Gt.g.DetectionListData),Gt.data.reset(mt.length),At=0;At<mt.length;++At){vt=mt[At];var le=Gt.data,ce=le.setBoundingBox,ke=At,Vn=vt.U,Ee=new Nt;if(ut(Ee,1,Vn.aa),ut(Ee,2,Vn.ba),ut(Ee,3,Vn.height),ut(Ee,4,Vn.width),ut(Ee,5,Vn.rotation),ut(Ee,6,Vn.Z),Vn=gn(Ee,Et),ce.call(le,ke,Vn),vt.P)for(le=0;le<vt.P.length;++le){Ee=vt.P[le];var Nn=!!Ee.visibility;ce=Gt.data,ke=ce.addNormalizedLandmark,Vn=At,Ee=Object.assign(Object.assign({},Ee),{visibility:Nn?Ee.visibility:0}),Nn=new rt,ut(Nn,1,Ee.x),ut(Nn,2,Ee.y),ut(Nn,3,Ee.z),Ee.visibility&&ut(Nn,4,Ee.visibility),Ee=gn(Nn,Rt),ke.call(ce,Vn,Ee)}if(vt.N)for(le=0;le<vt.N.length;++le)ce=Gt.data,ke=ce.addClassification,Vn=At,Ee=vt.N[le],Nn=new W,ut(Nn,2,Ee.$),Ee.index&&ut(Nn,1,Ee.index),Ee.label&&ut(Nn,3,Ee.label),Ee.displayName&&ut(Nn,4,Ee.displayName),Ee=gn(Nn,E),ke.call(ce,Vn,Ee)}Gt=Gt.data;break t;default:Gt={}}}switch(Q=Gt,D=z.stream,z.type){case"video":S.pushTexture2d(Object.assign(Object.assign({},Q),{stream:D,timestamp:b}));break;case"detections":st=Q,st.stream=D,st.timestamp=b,S.pushDetectionList(st);break;default:throw Error("Unknown input config type: '"+z.type+"'")}}return a.i.send(S),P(ft,a.D,4);case 4:S.delete(),ft.g=0}})};function x(t,c,a){var b,S,L,C,U,z,Q,D,st,ft,mt,Gt,vt,At;return Zt(function(le){switch(le.g){case 1:if(!a)return le.return(c);for(b={},S=0,L=T(Object.keys(a)),C=L.next();!C.done;C=L.next())U=C.value,z=a[U],typeof z!="string"&&z.type==="texture"&&c[z.stream]!==void 0&&++S;1<S&&(t.H=!1),Q=T(Object.keys(a)),C=Q.next();case 2:if(C.done){le.g=4;break}if(D=C.value,st=a[D],typeof st=="string")return vt=b,At=D,P(le,Y(t,D,c[st]),14);if(ft=c[st.stream],st.type==="detection_list"){if(ft){for(var ce=ft.getRectList(),ke=ft.getLandmarksList(),Vn=ft.getClassificationsList(),Ee=[],Nn=0;Nn<ce.size();++Nn){var yr=In(ce.get(Nn),Nt,Tt);yr={U:{aa:it(yr,1),ba:it(yr,2),height:it(yr,3),width:it(yr,4),rotation:it(yr,5,0),Z:me(yr,6)},P:ue(In(ke.get(Nn),Ut,Jt),rt,1).map(A),N:N(In(Vn.get(Nn),O,ot))},Ee.push(yr)}ce=Ee}else ce=[];b[D]=ce,le.g=7;break}if(st.type==="proto_list"){if(ft){for(ce=Array(ft.size()),ke=0;ke<ft.size();ke++)ce[ke]=ft.get(ke);ft.delete()}else ce=[];b[D]=ce,le.g=7;break}if(ft===void 0){le.g=3;break}if(st.type==="float_list"){b[D]=ft,le.g=7;break}if(st.type==="proto"){b[D]=ft,le.g=7;break}if(st.type!=="texture")throw Error("Unknown output config type: '"+st.type+"'");return mt=t.s[D],mt||(mt=new B(t.h,t.F),t.s[D]=mt),P(le,nt(mt,ft,t.H),13);case 13:Gt=le.h,b[D]=Gt;case 7:st.transform&&b[D]&&(b[D]=st.transform(b[D])),le.g=3;break;case 14:vt[At]=le.h;case 3:C=Q.next(),le.g=2;break;case 4:return le.return(b)}})}function Y(t,c,a){var b;return Zt(function(S){return typeof a=="number"||a instanceof Uint8Array||a instanceof t.h.Uint8BlobList?S.return(a):a instanceof t.h.Texture2dDataOut?(b=t.s[c],b||(b=new B(t.h,t.F),t.s[c]=b),S.return(nt(b,a,t.H))):S.return(void 0)})}function k(t,c){for(var a=c.name||"$",b=[].concat(J(c.wants)),S=new t.h.StringList,L=T(c.wants),C=L.next();!C.done;C=L.next())S.push_back(C.value);L=t.h.PacketListener.implement({onResults:function(U){for(var z={},Q=0;Q<c.wants.length;++Q)z[b[Q]]=U.get(Q);var D=t.listeners[a];D&&(t.D=x(t,z,c.outs).then(function(st){st=D(st);for(var ft=0;ft<c.wants.length;++ft){var mt=z[b[ft]];typeof mt=="object"&&mt.hasOwnProperty&&mt.hasOwnProperty("delete")&&mt.delete()}st&&(t.D=st)}))}}),t.i.attachMultiListener(S,L),S.delete()}i.onResults=function(t,c){this.listeners[c||"$"]=t},Ht("Solution",It),Ht("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(t){var c=me(t,1),a=de(t,h,3);return a={x:it(a,1),y:it(a,2),depth:it(a,3)},t=de(t,G,2),{id:c,point2d:a,point3d:{x:it(t,1),y:it(t,2),z:it(t,3)}}}function d(t){var c=In(t,s,X);t=[],c=ue(c,M,2);for(var a=0;a<c.length;a++)t.push({id:me(c[a],1),keypoints:ue(c[a],K,2).map(o),visibility:it(c[a],3),scale:tt(c[a],6),translation:tt(c[a],5),rotation:tt(c[a],4)});return t}function g(t){switch(t){case"Camera":return"object_detection_3d_camera.tflite";case"Chair":return"object_detection_3d_chair.tflite";case"Cup":return"object_detection_3d_cup.tflite";default:return"object_detection_3d_sneakers.tflite"}}function e(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}var u={focalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_x"}},focalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_y"}},principalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_x"}},principalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_y"}},allowedLabels:{type:2,graphOptionXref:{calculatorName:"ConstantSidePacketCalculatorAllowedLabels",calculatorType:"ConstantSidePacketCalculator",fieldName:"string_value"}}};function m(t){var c=this;t=t||{},this.g=new It({locateFile:t.locateFile,files:[{url:"objectron_solution_packed_assets_loader.js"},{simd:!1,url:"objectron_solution_wasm_bin.js"},{simd:!0,url:"objectron_solution_simd_wasm_bin.js"}],graph:{url:"objectron.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["lifted_objects","image_transformed"],outs:{image:"image_transformed",objectDetections:{type:"proto",stream:"lifted_objects",transform:d}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,default:!1,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumObjects:{type:1,default:5,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorMaxNumObjects",fieldName:"int_value"}},staticImageMode:{type:0,default:!0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"objectrongpusubgraph__ConstantSidePacketCalculator",fieldName:"bool_value"}},minDetectionConfidence:{type:1,default:.5,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"objectrongpusubgraph__objectdetectionoidv4subgraph__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,default:.99,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"objectrongpusubgraph__boxlandmarksubgraph__ThresholdingCalculator",fieldName:"threshold"}},modelName:{default:"Shoe",onChange:function(a){var b,S,L,C;return Zt(function(U){return U.g==1?(b=a,c.g.setOptions({allowedLabels:e(b)},u),S=g(b),L="object_detection_3d.tflite",P(U,v(c.g,S),2)):(C=U.h,c.g.overrideFile(L,C),U.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return Zt(function(S){return b=a,c.h=b,c.g.setOptions({focalX:b[0],focalY:b[1]},u),S.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return Zt(function(S){return b=a,c.i=b,c.g.setOptions({principalX:b[0],principalY:b[1]},u),S.return(!0)})}},imageSize:{onChange:function(a){var b,S,L,C;return Zt(function(U){if(c.h===void 0||c.i===void 0)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),U.return();b=a,S=[b[0]/2,b[1]/2],L=[c.h[0]/S[0],c.h[1]/S[1]],C=[c.i[0]/S[0],c.i[1]/S[1]],c.setOptions({focalLength:L,principalPoint:C}),U.g=0})}}}})}i=m.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(t){this.g.onResults(t)},i.initialize=function(){var t=this;return Zt(function(c){return P(c,t.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(t){var c=this;return Zt(function(a){return P(a,c.g.send(t),0)})},i.setOptions=function(t){this.g.setOptions(t)},Ht("Objectron",m),Ht("BOX_CONNECTIONS",[[1,2],[2,4],[4,3],[3,1],[5,6],[6,8],[8,7],[7,5],[1,5],[2,6],[3,7],[4,8]]),Ht("BOX_KEYPOINTS",{CENTER:0,BACK_BOTTOM_LEFT:1,FRONT_BOTTOM_LEFT:2,BACK_TOP_LEFT:3,FRONT_TOP_LEFT:4,BACK_BOTTOM_RIGHT:5,FRONT_BOTTOM_RIGHT:6,BACK_TOP_RIGHT:7,FRONT_TOP_RIGHT:8}),Ht("VERSION","0.4.1636596145")}).call(Vi);const Ri={};(function(){var i;function n(s){var X=0;return function(){return X<s.length?{done:!1,value:s[X++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(s,X,R){return s==Array.prototype||s==Object.prototype||(s[X]=R.value),s};function f(s){s=[typeof globalThis=="object"&&globalThis,s,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var X=0;X<s.length;++X){var R=s[X];if(R&&R.Math==Math)return R}throw Error("Cannot find global object")}var Z=f(this);function I(s,X){if(X)t:{var R=Z;s=s.split(".");for(var w=0;w<s.length-1;w++){var N=s[w];if(!(N in R))break t;R=R[N]}s=s[s.length-1],w=R[s],X=X(w),X!=w&&X!=null&&r(R,s,{configurable:!0,writable:!0,value:X})}}I("Symbol",function(s){function X(A){if(this instanceof X)throw new TypeError("Symbol is not a constructor");return new R(w+(A||"")+"_"+N++,A)}function R(A,B){this.g=A,r(this,"description",{configurable:!0,writable:!0,value:B})}if(s)return s;R.prototype.toString=function(){return this.g};var w="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",N=0;return X}),I("Symbol.iterator",function(s){if(s)return s;s=Symbol("Symbol.iterator");for(var X="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),R=0;R<X.length;R++){var w=Z[X[R]];typeof w=="function"&&typeof w.prototype[s]!="function"&&r(w.prototype,s,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return s});function F(s){return s={next:s},s[Symbol.iterator]=function(){return this},s}function T(s){var X=typeof Symbol<"u"&&Symbol.iterator&&s[Symbol.iterator];return X?X.call(s):{next:n(s)}}function J(s){if(!(s instanceof Array)){s=T(s);for(var X,R=[];!(X=s.next()).done;)R.push(X.value);s=R}return s}var et=typeof Object.create=="function"?Object.create:function(s){function X(){}return X.prototype=s,new X},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(s,X){if(s.__proto__=X,s.__proto__!==X)throw new TypeError(s+" is not extensible");return s}:null}var at=lt;function dt(s,X){if(s.prototype=et(X.prototype),s.prototype.constructor=s,at)at(s,X);else for(var R in X)if(R!="prototype")if(Object.defineProperties){var w=Object.getOwnPropertyDescriptor(X,R);w&&Object.defineProperty(s,R,w)}else s[R]=X[R];s.ea=X.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Bt.prototype.o=function(s){this.h=s};function ee(s,X){s.j={U:X,V:!0},s.g=s.m||s.s}Bt.prototype.return=function(s){this.j={return:s},this.g=this.s};function P(s,X,R){return s.g=R,{value:X}}function De(s){this.g=new Bt,this.h=s}function ze(s,X){kt(s.g);var R=s.g.i;return R?We(s,"return"in R?R.return:function(w){return{value:w,done:!0}},X,s.g.return):(s.g.return(X),zt(s))}function We(s,X,R,w){try{var N=X.call(s.g.i,R);if(!(N instanceof Object))throw new TypeError("Iterator result "+N+" is not an object");if(!N.done)return s.g.l=!1,N;var A=N.value}catch(B){return s.g.i=null,ee(s.g,B),zt(s)}return s.g.i=null,w.call(s.g,A),zt(s)}function zt(s){for(;s.g.g;)try{var X=s.h(s.g);if(X)return s.g.l=!1,{value:X.value,done:!1}}catch(R){s.g.h=void 0,ee(s.g,R)}if(s.g.l=!1,s.g.j){if(X=s.g.j,s.g.j=null,X.V)throw X.U;return{value:X.return,done:!0}}return{value:void 0,done:!0}}function Hn(s){this.next=function(X){return kt(s.g),s.g.i?X=We(s,s.g.i.next,X,s.g.o):(s.g.o(X),X=zt(s)),X},this.throw=function(X){return kt(s.g),s.g.i?X=We(s,s.g.i.throw,X,s.g.o):(ee(s.g,X),X=zt(s)),X},this.return=function(X){return ze(s,X)},this[Symbol.iterator]=function(){return this}}function ne(s){function X(w){return s.next(w)}function R(w){return s.throw(w)}return new Promise(function(w,N){function A(B){B.done?w(B.value):Promise.resolve(B.value).then(X,R).then(A,N)}A(s.next())})}function Zt(s){return ne(new Hn(new De(s)))}I("Promise",function(s){function X(B){this.h=0,this.i=void 0,this.g=[],this.o=!1;var nt=this.j();try{B(nt.resolve,nt.reject)}catch($){nt.reject($)}}function R(){this.g=null}function w(B){return B instanceof X?B:new X(function(nt){nt(B)})}if(s)return s;R.prototype.h=function(B){if(this.g==null){this.g=[];var nt=this;this.i(function(){nt.l()})}this.g.push(B)};var N=Z.setTimeout;R.prototype.i=function(B){N(B,0)},R.prototype.l=function(){for(;this.g&&this.g.length;){var B=this.g;this.g=[];for(var nt=0;nt<B.length;++nt){var $=B[nt];B[nt]=null;try{$()}catch(yt){this.j(yt)}}}this.g=null},R.prototype.j=function(B){this.i(function(){throw B})},X.prototype.j=function(){function B(yt){return function(Xt){$||($=!0,yt.call(nt,Xt))}}var nt=this,$=!1;return{resolve:B(this.C),reject:B(this.l)}},X.prototype.C=function(B){if(B===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(B instanceof X)this.F(B);else{t:switch(typeof B){case"object":var nt=B!=null;break t;case"function":nt=!0;break t;default:nt=!1}nt?this.v(B):this.m(B)}},X.prototype.v=function(B){var nt=void 0;try{nt=B.then}catch($){this.l($);return}typeof nt=="function"?this.G(nt,B):this.m(B)},X.prototype.l=function(B){this.s(2,B)},X.prototype.m=function(B){this.s(1,B)},X.prototype.s=function(B,nt){if(this.h!=0)throw Error("Cannot settle("+B+", "+nt+"): Promise already settled in state"+this.h);this.h=B,this.i=nt,this.h===2&&this.D(),this.A()},X.prototype.D=function(){var B=this;N(function(){if(B.B()){var nt=Z.console;typeof nt<"u"&&nt.error(B.i)}},1)},X.prototype.B=function(){if(this.o)return!1;var B=Z.CustomEvent,nt=Z.Event,$=Z.dispatchEvent;return typeof $>"u"?!0:(typeof B=="function"?B=new B("unhandledrejection",{cancelable:!0}):typeof nt=="function"?B=new nt("unhandledrejection",{cancelable:!0}):(B=Z.document.createEvent("CustomEvent"),B.initCustomEvent("unhandledrejection",!1,!0,B)),B.promise=this,B.reason=this.i,$(B))},X.prototype.A=function(){if(this.g!=null){for(var B=0;B<this.g.length;++B)A.h(this.g[B]);this.g=null}};var A=new R;return X.prototype.F=function(B){var nt=this.j();B.J(nt.resolve,nt.reject)},X.prototype.G=function(B,nt){var $=this.j();try{B.call(nt,$.resolve,$.reject)}catch(yt){$.reject(yt)}},X.prototype.then=function(B,nt){function $(xt,ht){return typeof xt=="function"?function(Wt){try{yt(xt(Wt))}catch(It){Xt(It)}}:ht}var yt,Xt,Kt=new X(function(xt,ht){yt=xt,Xt=ht});return this.J($(B,yt),$(nt,Xt)),Kt},X.prototype.catch=function(B){return this.then(void 0,B)},X.prototype.J=function(B,nt){function $(){switch(yt.h){case 1:B(yt.i);break;case 2:nt(yt.i);break;default:throw Error("Unexpected state: "+yt.h)}}var yt=this;this.g==null?A.h($):this.g.push($),this.o=!0},X.resolve=w,X.reject=function(B){return new X(function(nt,$){$(B)})},X.race=function(B){return new X(function(nt,$){for(var yt=T(B),Xt=yt.next();!Xt.done;Xt=yt.next())w(Xt.value).J(nt,$)})},X.all=function(B){var nt=T(B),$=nt.next();return $.done?w([]):new X(function(yt,Xt){function Kt(Wt){return function(It){xt[Wt]=It,ht--,ht==0&&yt(xt)}}var xt=[],ht=0;do xt.push(void 0),ht++,w($.value).J(Kt(xt.length-1),Xt),$=nt.next();while(!$.done)})},X});function $e(s,X){s instanceof String&&(s+="");var R=0,w=!1,N={next:function(){if(!w&&R<s.length){var A=R++;return{value:X(A,s[A]),done:!1}}return w=!0,{done:!0,value:void 0}}};return N[Symbol.iterator]=function(){return N},N}var An=typeof Object.assign=="function"?Object.assign:function(s,X){for(var R=1;R<arguments.length;R++){var w=arguments[R];if(w)for(var N in w)Object.prototype.hasOwnProperty.call(w,N)&&(s[N]=w[N])}return s};I("Object.assign",function(s){return s||An}),I("Object.is",function(s){return s||function(X,R){return X===R?X!==0||1/X===1/R:X!==X&&R!==R}}),I("Array.prototype.includes",function(s){return s||function(X,R){var w=this;w instanceof String&&(w=String(w));var N=w.length;for(R=R||0,0>R&&(R=Math.max(R+N,0));R<N;R++){var A=w[R];if(A===X||Object.is(A,X))return!0}return!1}}),I("String.prototype.includes",function(s){return s||function(X,R){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(X instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(X,R||0)!==-1}}),I("Array.prototype.keys",function(s){return s||function(){return $e(this,function(X){return X})}});var Re=this||self;function Ht(s,X){s=s.split(".");var R=Re;s[0]in R||typeof R.execScript>"u"||R.execScript("var "+s[0]);for(var w;s.length&&(w=s.shift());)s.length||X===void 0?R[w]&&R[w]!==Object.prototype[w]?R=R[w]:R=R[w]={}:R[w]=X}function Te(s){Re.setTimeout(function(){throw s},0)}function sn(s){Te(s)}function Gn(s,X){sn(Error("Invalid wire type: "+s+" (at position "+X+")"))}function Ln(){sn(Error("Failed to read varint, encoding is invalid."))}function Rn(s,X){return X=String.fromCharCode.apply(null,X),s==null?X:s+X}var Jn,dn=typeof TextDecoder<"u",pn,kn=typeof TextEncoder<"u";function Fn(s){if(kn)s=(pn||(pn=new TextEncoder)).encode(s);else{var X=void 0;X=X===void 0?!1:X;for(var R=0,w=new Uint8Array(3*s.length),N=0;N<s.length;N++){var A=s.charCodeAt(N);if(128>A)w[R++]=A;else{if(2048>A)w[R++]=A>>6|192;else{if(55296<=A&&57343>=A){if(56319>=A&&N<s.length){var B=s.charCodeAt(++N);if(56320<=B&&57343>=B){A=1024*(A-55296)+B-56320+65536,w[R++]=A>>18|240,w[R++]=A>>12&63|128,w[R++]=A>>6&63|128,w[R++]=A&63|128;continue}else N--}if(X)throw Error("Found an unpaired surrogate");A=65533}w[R++]=A>>12|224,w[R++]=A>>6&63|128}w[R++]=A&63|128}}s=w.subarray(0,R)}return s}var je={},Me=null;function xn(s){var X;X===void 0&&(X=0),Se(),X=je[X];for(var R=Array(Math.floor(s.length/3)),w=X[64]||"",N=0,A=0;N<s.length-2;N+=3){var B=s[N],nt=s[N+1],$=s[N+2],yt=X[B>>2];B=X[(B&3)<<4|nt>>4],nt=X[(nt&15)<<2|$>>6],$=X[$&63],R[A++]=yt+B+nt+$}switch(yt=0,$=w,s.length-N){case 2:yt=s[N+1],$=X[(yt&15)<<2]||w;case 1:s=s[N],R[A]=X[s>>2]+X[(s&3)<<4|yt>>4]+$+w}return R.join("")}function Xn(s){var X=s.length,R=3*X/4;R%3?R=Math.floor(R):"=.".indexOf(s[X-1])!=-1&&(R="=.".indexOf(s[X-2])!=-1?R-2:R-1);var w=new Uint8Array(R),N=0;return he(s,function(A){w[N++]=A}),w.subarray(0,N)}function he(s,X){function R($){for(;w<s.length;){var yt=s.charAt(w++),Xt=Me[yt];if(Xt!=null)return Xt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return $}Se();for(var w=0;;){var N=R(-1),A=R(0),B=R(64),nt=R(64);if(nt===64&&N===-1)break;X(N<<2|A>>4),B!=64&&(X(A<<4&240|B>>2),nt!=64&&X(B<<6&192|nt))}}function Se(){if(!Me){Me={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),X=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var w=s.concat(X[R].split(""));je[R]=w;for(var N=0;N<w.length;N++){var A=w[N];Me[A]===void 0&&(Me[A]=N)}}}}var Oe=typeof Uint8Array=="function",re;function Ve(s){if(this.g=s,s!==null&&s.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var s="";else s=this.g,s=this.g=s==null||typeof s=="string"?s:Oe&&s instanceof Uint8Array?xn(s):null;return s};var ln=typeof Uint8Array.prototype.slice=="function";function Be(s,X,R){return X===R?re||(re=new Uint8Array(0)):ln?s.slice(X,R):new Uint8Array(s.subarray(X,R))}var Qt=0,Ze=0;function Ce(s){if(s.constructor===Uint8Array)return s;if(s.constructor===ArrayBuffer)return new Uint8Array(s);if(s.constructor===Array)return new Uint8Array(s);if(s.constructor===String)return Xn(s);if(s.constructor===Ve){if(s.g==null)var X=re||(re=new Uint8Array(0));else{X=Uint8Array;var R=s.g;R=R==null||Oe&&R!=null&&R instanceof Uint8Array?R:typeof R=="string"?Xn(R):null,s=s.g=R,X=new X(s)}return X}if(s instanceof Uint8Array)return new Uint8Array(s.buffer,s.byteOffset,s.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Mt(s,X){X=X===void 0?{}:X,X=X.u===void 0?!1:X.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=X,s&&xe(this,s)}function xe(s,X){s.h=Ce(X),s.l=0,s.i=s.h.length,s.g=s.l}Mt.prototype.reset=function(){this.g=this.l};function jt(s){s.g>s.i&&(s.j=!0,sn(Error("Tried to read past the end of the data "+s.g+" > "+s.i)))}function ye(s){var X=s.h,R=X[s.g],w=R&127;return 128>R?(s.g+=1,jt(s),w):(R=X[s.g+1],w|=(R&127)<<7,128>R?(s.g+=2,jt(s),w):(R=X[s.g+2],w|=(R&127)<<14,128>R?(s.g+=3,jt(s),w):(R=X[s.g+3],w|=(R&127)<<21,128>R?(s.g+=4,jt(s),w):(R=X[s.g+4],w|=(R&15)<<28,128>R?(s.g+=5,jt(s),w>>>0):(s.g+=5,128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]?(s.j=!0,Ln(),w):(jt(s),w))))))}var Ye=[];function qe(){this.g=new Uint8Array(64),this.h=0}function Xe(s,X){if(!(s.h+1<s.g.length)){var R=s.g;s.g=new Uint8Array(Math.ceil(1+2*s.g.length)),s.g.set(R)}s.g[s.h++]=X}qe.prototype.length=function(){return this.h},qe.prototype.end=function(){var s=this.g,X=this.h;return this.h=0,Be(s,0,X)};function Ot(s,X){for(;127<X;)Xe(s,X&127|128),X>>>=7;Xe(s,X)}function Ae(s){var X={},R=X.N===void 0?!1:X.N;this.m={u:X.u===void 0?!1:X.u},this.N=R,X=this.m,Ye.length?(R=Ye.pop(),X&&(R.u=X.u),s&&xe(R,s),s=R):s=new Mt(s,X),this.g=s,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Ae.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Pe(s){var X=s.g;if((X=X.g==X.i)||(X=s.j)||(X=s.g,X=X.j||0>X.g||X.g>X.i),X)return!1;s.l=s.g.g;var R=ye(s.g);return X=R>>>3,R&=7,0<=R&&5>=R?(s.i=X,s.h=R,!0):(s.j=!0,Gn(R,s.l),!1)}function Ie(s){switch(s.h){case 0:if(s.h!=0)Ie(s);else t:{s=s.g;for(var X=s.g,R=0;10>R;R++){if((s.h[X]&128)===0){s.g=X+1,jt(s);break t}X++}s.j=!0,Ln()}break;case 1:s=s.g,s.g+=8,jt(s);break;case 2:s.h!=2?Ie(s):(X=ye(s.g),s=s.g,s.g+=X,jt(s));break;case 5:s=s.g,s.g+=4,jt(s);break;case 3:X=s.i;do{if(!Pe(s)){s.j=!0,sn(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=X&&(s.j=!0,sn(Error("Unmatched end-group tag")));break}Ie(s)}while(1);break;default:s.j=!0,Gn(s.h,s.l)}}function Wn(s,X,R){s.N||(s=Be(s.g.h,R,s.g.g),(R=X.m)?R.push(s):X.m=[s])}var cn=[];function _e(){this.h=[],this.i=0,this.g=new qe}function un(s,X){X.length!==0&&(s.h.push(X),s.i+=X.length)}function ve(s,X,R){Ot(s.g,8*X+2),Ot(s.g,R.length),un(s,s.g.end()),un(s,R)}var we=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Ge(s,X){Object.isFrozen(s)||(we?s[we]|=X:s.g!==void 0?s.g|=X:Object.defineProperties(s,{g:{value:X,configurable:!0,writable:!0,enumerable:!1}}))}function ie(s){if(!s)return 0;var X;return we?X=s[we]:X=s.g,X==null?0:X}function Qe(s){return Array.isArray(s)&&Ge(s,1),s}function qt(s){if(!Array.isArray(s))throw Error("cannot mark non-array as immutable");Ge(s,2)}function Pt(s){return s!==null&&typeof s=="object"&&s.constructor===Object}function hn(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return Oe&&s!=null&&s instanceof Uint8Array?xn(s):s;default:return s}}function fe(s,X){if(s!=null)return Array.isArray(s)||Pt(s)?Ct(s,X):X(s)}function Ct(s,X){if(Array.isArray(s)){for(var R=Array(s.length),w=0;w<s.length;w++)R[w]=fe(s[w],X);return ie(s)&1&&Qe(R),R}R={};for(w in s)R[w]=fe(s[w],X);return R}var Vt;function oe(s,X,R){var w=Vt;Vt=null,s||(s=w),w=this.constructor.ca,s||(s=w?[w]:[]),this.j=(w?0:-1)-(this.constructor.aa||0),this.i=null,this.g=s;t:{if(w=this.g.length,s=w-1,w&&(w=this.g[s],Pt(w))){this.l=s-this.j,this.h=w;break t}X!==void 0&&-1<X?(this.l=Math.max(X,s+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(R)for(X=0;X<R.length;X++)s=R[X],s<this.l?(s+=this.j,(w=this.g[s])?Qe(w):this.g[s]=Le):(te(this),(w=this.h[s])?Qe(w):this.h[s]=Le)}var Le=Object.freeze(Qe([]));function te(s){var X=s.l+s.j;s.g[X]||(s.h=s.g[X]={})}function se(s,X,R){return X===-1?null:(R===void 0?0:R)||X>=s.l?s.h?s.h[X]:void 0:s.g[X+s.j]}function tt(s,X,R){R=R===void 0?!0:R;var w=w===void 0?!1:w,N=se(s,X,w);return N==null&&(N=Le),N===Le?(N=Qe([]),ut(s,X,N,w)):R&&Array.isArray(N)&&ie(N)&2&&(N=N.slice(),ut(s,X,N,w)),N}function it(s,X,R){return s=se(s,X),s=s==null?s:+s,s==null?R===void 0?0:R:s}function ut(s,X,R,w){(w===void 0?0:w)||X>=s.l?(te(s),s.h[X]=R):s.g[X+s.j]=R}function _t(s,X,R){s.i||(s.i={});var w=s.i[R];if(!w){var N=tt(s,R,!1);w=[];for(var A=Array.isArray(N)?!!(ie(N)&2):!1,B=0;B<N.length;B++)w[B]=new X(N[B]),A&&qt(w[B].g);A&&(qt(w),Object.freeze(w)),s.i[R]=w}return w}function de(s,X,R,w,N){var A=_t(s,w,X);R=R||new w,s=tt(s,X),N!=null?(A.splice(N,0,R),s.splice(N,0,ue(R))):(A.push(R),s.push(ue(R)))}oe.prototype.toJSON=function(){var s=ue(this);return Ct(s,hn)};function ue(s){if(s.i)for(var X in s.i){var R=s.i[X];if(Array.isArray(R))for(var w=0;w<R.length;w++)R[w]&&ue(R[w]);else R&&ue(R)}return s.g}oe.prototype.toString=function(){return ue(this).toString()};function St(s,X){return s=se(s,X),s==null?0:s}function me(s,X){return s=se(s,X),s==null?"":s}function He(s,X){if(s=s.m){un(X,X.g.end());for(var R=0;R<s.length;R++)un(X,s[R])}}function tn(s){var X=s[0];switch(s.length){case 2:var R=s[1];return function($,yt,Xt){return X($,yt,Xt,R)};case 3:var w=s[1],N=s[2];return function($,yt,Xt){return X($,yt,Xt,w,N)};case 4:var A=s[1],B=s[2],nt=s[3];return function($,yt,Xt){return X($,yt,Xt,A,B,nt)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function en(s,X,R){for(;Pe(X)&&X.h!=4;){var w=X.i,N=R[w];if(N){if(Array.isArray(N)&&(N=R[w]=tn(N)),!N(X,s,w)){w=X,N=s;var A=w.l;Ie(w),Wn(w,N,A)}}else w=X,N=s,A=w.l,Ie(w),Wn(w,N,A)}return s}function fn(s,X){var R=new _e;if(X(s,R),s=R.i+R.g.length(),s===0)R=new Uint8Array(0);else{s=new Uint8Array(s);for(var w=R.h,N=w.length,A=X=0;A<N;A++){var B=w[A];B.length!==0&&(s.set(B,X),X+=B.length)}w=R.g,N=w.h,N!==0&&(s.set(w.g.subarray(0,N),X),w.h=0),R.h=[s],R=s}return R}function bn(s,X,R){if(cn.length){var w=cn.pop();s&&(xe(w.g,s),w.i=-1,w.h=-1),s=w}else s=new Ae(s);try{return R(new X,s)}finally{X=s.g,X.h=null,X.l=0,X.i=0,X.g=0,X.j=!1,X.u=!1,s.i=-1,s.h=-1,s.j=!1,100>cn.length&&cn.push(s)}}function Fe(s,X,R){if(X=se(X,R),X!=null){Ot(s.g,8*R+5),s=s.g;var w=X;w=(R=0>w?1:0)?-w:w,w===0?0<1/w?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(w)?(Ze=0,Qt=2147483647):34028234663852886e22<w?(Ze=0,Qt=(R<<31|2139095040)>>>0):11754943508222875e-54>w?(w=Math.round(w/Math.pow(2,-149)),Ze=0,Qt=(R<<31|w)>>>0):(X=Math.floor(Math.log(w)/Math.LN2),w*=Math.pow(2,-X),w=Math.round(8388608*w),16777216<=w&&++X,Ze=0,Qt=(R<<31|X+127<<23|w&8388607)>>>0),R=Qt,Xe(s,R>>>0&255),Xe(s,R>>>8&255),Xe(s,R>>>16&255),Xe(s,R>>>24&255)}}function nn(s,X,R){if(s.h!==5)return!1;s=s.g;var w=s.h[s.g],N=s.h[s.g+1],A=s.h[s.g+2],B=s.h[s.g+3];return s.g+=4,jt(s),N=(w<<0|N<<8|A<<16|B<<24)>>>0,s=2*(N>>31)+1,w=N>>>23&255,N&=8388607,ut(X,R,w==255?N?NaN:1/0*s:w==0?s*Math.pow(2,-149)*N:s*Math.pow(2,w-150)*(N+Math.pow(2,23))),!0}function zn(s,X,R){if(s.h!==0)return!1;for(var w=s.g,N=128,A=0,B=s=0;4>B&&128<=N;B++)N=w.h[w.g++],A|=(N&127)<<7*B;if(128<=N&&(N=w.h[w.g++],A|=(N&127)<<28,s|=(N&127)>>4),128<=N)for(B=0;5>B&&128<=N;B++)N=w.h[w.g++],s|=(N&127)<<7*B+3;return 128>N?(w=A>>>0,N=s>>>0,(s=N&2147483648)&&(w=~w+1>>>0,N=~N>>>0,w==0&&(N=N+1>>>0)),w=4294967296*N+(w>>>0),s=s?-w:w):(w.j=!0,Ln(),s=void 0),ut(X,R,s),!0}function rn(s,X,R){return s.h!==0?!1:(ut(X,R,ye(s.g)),!0)}function Je(s,X,R){if(s.h!==2)return!1;var w=ye(s.g);s=s.g;var N=s.g;s.g+=w,jt(s),s=s.h;var A;if(dn)(A=Jn)||(A=Jn=new TextDecoder("utf-8",{fatal:!1})),A=A.decode(s.subarray(N,N+w));else{w=N+w;for(var B=[],nt=null,$,yt,Xt;N<w;)$=s[N++],128>$?B.push($):224>$?N>=w?B.push(65533):(yt=s[N++],194>$||(yt&192)!==128?(N--,B.push(65533)):B.push(($&31)<<6|yt&63)):240>$?N>=w-1?B.push(65533):(yt=s[N++],(yt&192)!==128||$===224&&160>yt||$===237&&160<=yt||((A=s[N++])&192)!==128?(N--,B.push(65533)):B.push(($&15)<<12|(yt&63)<<6|A&63)):244>=$?N>=w-2?B.push(65533):(yt=s[N++],(yt&192)!==128||($<<28)+(yt-144)>>30!==0||((A=s[N++])&192)!==128||((Xt=s[N++])&192)!==128?(N--,B.push(65533)):($=($&7)<<18|(yt&63)<<12|(A&63)<<6|Xt&63,$-=65536,B.push(($>>10&1023)+55296,($&1023)+56320))):B.push(65533),8192<=B.length&&(nt=Rn(nt,B),B.length=0);A=Rn(nt,B)}return ut(X,R,A),!0}function gn(s,X,R,w,N){if(s.h!==2)return!1;var A=new w,B=s.g.i,nt=ye(s.g),$=s.g.g+nt;if(s.g.i=$,N(A,s),N=$-s.g.g,N!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(nt+" bytes, instead read "+(nt-N)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return s.g.g=$,s.g.i=B,de(X,R,A,w,void 0),!0}function In(s){oe.call(this,s)}var Ke;dt(In,oe);function En(s,X){var R=se(s,1);if(R!=null&&R!=null){Ot(X.g,8);var w=X.g;if(0<=R)Ot(w,R);else{for(var N=0;9>N;N++)Xe(w,R&127|128),R>>=7;Xe(w,1)}}Fe(X,s,2),w=se(s,3),w!=null&&ve(X,3,Fn(w)),w=se(s,4),w!=null&&ve(X,4,Fn(w)),He(s,X)}function on(s,X){return en(s,X,Ke||(Ke={1:rn,2:nn,3:Je,4:Je}))}function Zn(s){oe.call(this,s,-1,an)}var Sn;dt(Zn,oe),Zn.prototype.addClassification=function(s,X){return de(this,1,s,In,X),this};function Kn(s,X){return en(s,X,Sn||(Sn={1:[gn,In,on]}))}var an=[1];function Tn(s){oe.call(this,s)}var _n;dt(Tn,oe);function Qn(s,X){Fe(X,s,1),Fe(X,s,2),Fe(X,s,3),Fe(X,s,4),Fe(X,s,5),He(s,X)}function Yn(s,X){return en(s,X,_n||(_n={1:nn,2:nn,3:nn,4:nn,5:nn}))}function Cn(s){oe.call(this,s,-1,V)}var p;dt(Cn,oe);function W(s,X){return en(s,X,p||(p={1:[gn,Tn,Yn]}))}var V=[1];function E(s){oe.call(this,s)}var O;dt(E,oe);function ot(s,X){Fe(X,s,1),Fe(X,s,2),Fe(X,s,3),Fe(X,s,4),Fe(X,s,5);var R=se(s,6);if(R!=null&&R!=null){Ot(X.g,48);var w=X.g,N=R;R=0>N,N=Math.abs(N);var A=N>>>0;for(N=Math.floor((N-A)/4294967296),N>>>=0,R&&(N=~N>>>0,A=(~A>>>0)+1,4294967295<A&&(A=0,N++,4294967295<N&&(N=0))),Qt=A,Ze=N,R=Qt,A=Ze;0<A||127<R;)Xe(w,R&127|128),R=(R>>>7|A<<25)>>>0,A>>>=7;Xe(w,R)}He(s,X)}function j(s,X){return en(s,X,O||(O={1:nn,2:nn,3:nn,4:nn,5:nn,6:zn}))}function rt(s,X,R){if(R=s.createShader(R===0?s.VERTEX_SHADER:s.FRAGMENT_SHADER),s.shaderSource(R,X),s.compileShader(R),!s.getShaderParameter(R,s.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
105
105
|
|
|
106
|
-
`+s.getShaderInfoLog(R));return R}function bt(s){return _t(s,In,1).map(function(X){return{index:St(X,1),X:it(X,2),label:se(X,3)!=null?me(X,3):void 0,displayName:se(X,4)!=null?me(X,4):void 0}})}function Rt(s){return{x:it(s,1),y:it(s,2),z:it(s,3),visibility:se(s,4)!=null?it(s,4):void 0}}function Ut(s){return _t(bn(s,
|
|
106
|
+
`+s.getShaderInfoLog(R));return R}function bt(s){return _t(s,In,1).map(function(X){return{index:St(X,1),X:it(X,2),label:se(X,3)!=null?me(X,3):void 0,displayName:se(X,4)!=null?me(X,4):void 0}})}function Rt(s){return{x:it(s,1),y:it(s,2),z:it(s,3),visibility:se(s,4)!=null?it(s,4):void 0}}function Ut(s){return _t(bn(s,Cn,W),Tn,1).map(Rt)}function Jt(s,X){this.h=s,this.g=X,this.l=0}function $t(s,X,R){return Nt(s,X),typeof s.g.canvas.transferToImageBitmap=="function"?Promise.resolve(s.g.canvas.transferToImageBitmap()):R?Promise.resolve(s.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(s.g.canvas):(s.i===void 0&&(s.i=document.createElement("canvas")),new Promise(function(w){s.i.height=s.g.canvas.height,s.i.width=s.g.canvas.width,s.i.getContext("2d",{}).drawImage(s.g.canvas,0,0,s.g.canvas.width,s.g.canvas.height),w(s.i)}))}function Nt(s,X){var R=s.g;if(s.m===void 0){var w=rt(R,`
|
|
107
107
|
attribute vec2 aVertex;
|
|
108
108
|
attribute vec2 aTex;
|
|
109
109
|
varying vec2 vTex;
|
|
110
110
|
void main(void) {
|
|
111
111
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
112
112
|
vTex = aTex;
|
|
113
|
-
}`,0),
|
|
113
|
+
}`,0),N=rt(R,`
|
|
114
114
|
precision mediump float;
|
|
115
115
|
varying vec2 vTex;
|
|
116
116
|
uniform sampler2D sampler0;
|
|
117
117
|
void main(){
|
|
118
118
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
119
|
-
}`,1),A=R.createProgram();if(R.attachShader(A,
|
|
119
|
+
}`,1),A=R.createProgram();if(R.attachShader(A,w),R.attachShader(A,N),R.linkProgram(A),!R.getProgramParameter(A,R.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
120
120
|
|
|
121
|
-
`+R.getProgramInfoLog(A));T=s.m=A,R.useProgram(T),J=R.getUniformLocation(T,"sampler0"),s.j={I:R.getAttribLocation(T,"aVertex"),H:R.getAttribLocation(T,"aTex"),da:J},s.s=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.enableVertexAttribArray(s.j.I),R.vertexAttribPointer(s.j.I,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),s.o=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.enableVertexAttribArray(s.j.H),R.vertexAttribPointer(s.j.H,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),R.uniform1i(J,0)}T=s.j,R.useProgram(s.m),R.canvas.width=X.width,R.canvas.height=X.height,R.viewport(0,0,X.width,X.height),R.activeTexture(R.TEXTURE0),s.h.bindTexture2d(X.glName),R.enableVertexAttribArray(T.I),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.vertexAttribPointer(T.I,2,R.FLOAT,!1,0,0),R.enableVertexAttribArray(T.H),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.vertexAttribPointer(T.H,2,R.FLOAT,!1,0,0),R.bindFramebuffer(R.DRAW_FRAMEBUFFER?R.DRAW_FRAMEBUFFER:R.FRAMEBUFFER,null),R.clearColor(0,0,0,0),R.clear(R.COLOR_BUFFER_BIT),R.colorMask(!0,!0,!0,!0),R.drawArrays(R.TRIANGLE_FAN,0,4),R.disableVertexAttribArray(T.I),R.disableVertexAttribArray(T.H),R.bindBuffer(R.ARRAY_BUFFER,null),s.h.bindTexture2d(0)}function Yt(s){this.g=s}var Et=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Dt(s,X){return X+s}function ae(s,X){window[s]=X}function pe(s){var X=document.createElement("script");return X.setAttribute("src",s),X.setAttribute("crossorigin","anonymous"),new Promise(function(R){X.addEventListener("load",function(){R()},!1),X.addEventListener("error",function(){R()},!1),document.body.appendChild(X)})}function ge(){return Zt(function(s){switch(s.g){case 1:return s.m=2,P(s,WebAssembly.instantiate(Et),4);case 4:s.g=3,s.m=0;break;case 2:return s.m=0,s.j=null,s.return(!1);case 3:return s.return(!0)}})}function Je(s){if(this.g=s,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=s&&s.locateFile||Dt,typeof window=="object")var X=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")X=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=X,s.options){X=Y(Object.keys(s.options));for(var R=X.next();!R.done;R=X.next()){R=R.value;var T=s.options[R].default;T!==void 0&&(this.j[R]=typeof T=="function"?T():T)}}}i=Je.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var X,R,T,J,A,B,nt,$,yt,Xt,Kt;return Zt(function(xt){switch(xt.g){case 1:return s.R?(X=s.g.files===void 0?[]:typeof s.g.files=="function"?s.g.files(s.j):s.g.files,P(xt,ge(),2)):xt.return();case 2:if(R=xt.h,typeof window=="object")return ae("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ae("createMediapipeSolutionsPackedAssets",{locateFile:s.locateFile}),B=X.filter(function(ht){return ht.data!==void 0}),nt=X.filter(function(ht){return ht.data===void 0}),$=Promise.all(B.map(function(ht){var Wt=H(s,ht.url);if(ht.path!==void 0){var It=ht.path;Wt=Wt.then(function(Tt){return s.overrideFile(It,Tt),Promise.resolve(Tt)})}return Wt})),yt=Promise.all(nt.map(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R?pe(s.locateFile(ht.url,s.S)):Promise.resolve()})).then(function(){var ht,Wt,It;return Zt(function(Tt){if(Tt.g==1)return ht=window.createMediapipeSolutionsWasm,Wt=window.createMediapipeSolutionsPackedAssets,It=s,P(Tt,ht(Wt),2);It.h=Tt.h,Tt.g=0})}),Xt=function(){return Zt(function(ht){return s.g.graph&&s.g.graph.url?ht=P(ht,H(s,s.g.graph.url),0):(ht.g=0,ht=void 0),ht})}(),P(xt,Promise.all([yt,$,Xt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return T=X.filter(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R}).map(function(ht){return s.locateFile(ht.url,s.S)}),importScripts.apply(null,N(T)),J=s,P(xt,createMediapipeSolutionsWasm(Module),6);case 6:J.h=xt.h,s.l=new OffscreenCanvas(1,1),s.h.canvas=s.l,A=s.h.GL.createContext(s.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),s.h.GL.makeContextCurrent(A),xt.g=4;break;case 7:if(s.l=document.createElement("canvas"),Kt=s.l.getContext("webgl2",{}),!Kt&&(Kt=s.l.getContext("webgl",{}),!Kt))return alert("Failed to create WebGL canvas context when passing video frame."),xt.return();s.D=Kt,s.h.canvas=s.l,s.h.createContext(s.l,!0,!0,{});case 4:s.i=new s.h.SolutionWasm,s.R=!1,xt.g=0}})}function y(s){var X,R,T,J,A,B,nt,$;return Zt(function(yt){if(yt.g==1){if(s.g.graph&&s.g.graph.url&&s.P===s.g.graph.url)return yt.return();if(s.o=!0,!s.g.graph||!s.g.graph.url){yt.g=2;return}return s.P=s.g.graph.url,P(yt,H(s,s.g.graph.url),3)}for(yt.g!=2&&(X=yt.h,s.i.loadGraph(X)),R=Y(Object.keys(s.B)),T=R.next();!T.done;T=R.next())J=T.value,s.i.overrideFile(J,s.B[J]);if(s.B={},s.g.listeners)for(A=Y(s.g.listeners),B=A.next();!B.done;B=A.next())nt=B.value,M(s,nt);$=s.j,s.j={},s.setOptions($),yt.g=0})}i.reset=function(){var s=this;return Zt(function(X){s.i&&(s.i.reset(),s.m={},s.s={}),X.g=0})},i.setOptions=function(s,X){var R=this;if(X=X||this.g.options){for(var T=[],J=[],A={},B=Y(Object.keys(s)),nt=B.next();!nt.done;A={K:A.K,L:A.L},nt=B.next()){var $=nt.value;$ in this.j&&this.j[$]===s[$]||(this.j[$]=s[$],nt=X[$],nt!==void 0&&(nt.onChange&&(A.K=nt.onChange,A.L=s[$],T.push(function(yt){return function(){var Xt;return Zt(function(Kt){if(Kt.g==1)return P(Kt,yt.K(yt.L),2);Xt=Kt.h,Xt===!0&&(R.o=!0),Kt.g=0})}}(A))),nt.graphOptionXref&&($={valueNumber:nt.type===1?s[$]:0,valueBoolean:nt.type===0?s[$]:!1,valueString:nt.type===2?s[$]:""},nt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),nt.graphOptionXref),$),J.push(nt))))}(T.length!==0||J.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(J),this.v=(this.v===void 0?[]:this.v).concat(T))}};function G(s){var X,R,T,J,A,B,nt;return Zt(function($){switch($.g){case 1:if(!s.o)return $.return();if(!s.v){$.g=2;break}X=Y(s.v),R=X.next();case 3:if(R.done){$.g=5;break}return T=R.value,P($,T(),4);case 4:R=X.next(),$.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(J=new s.h.GraphOptionChangeRequestList,A=Y(s.A),B=A.next();!B.done;B=A.next())nt=B.value,J.push_back(nt);s.i.changeOptions(J),J.delete(),s.A=void 0}s.o=!1,$.g=0}})}i.initialize=function(){var s=this;return Zt(function(X){return X.g==1?P(X,h(s),2):X.g!=3?P(X,y(s),3):P(X,G(s),0)})};function H(s,X){var R,T;return Zt(function(J){return X in s.F?J.return(s.F[X]):(R=s.locateFile(X,""),T=fetch(R).then(function(A){return A.arrayBuffer()}),s.F[X]=T,J.return(T))})}i.overrideFile=function(s,X){this.i?this.i.overrideFile(s,X):this.B[s]=X},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(s,X){var R=this,T,J,A,B,nt,$,yt,Xt,Kt;return Zt(function(xt){switch(xt.g){case 1:return R.g.inputs?(T=1e3*(X==null?performance.now():X),P(xt,R.C,2)):xt.return();case 2:return P(xt,R.initialize(),3);case 3:for(J=new R.h.PacketDataList,A=Y(Object.keys(s)),B=A.next();!B.done;B=A.next())if(nt=B.value,$=R.g.inputs[nt]){t:{var ht=s[nt];switch($.type){case"video":var Wt=R.m[$.stream];if(Wt||(Wt=new Nt(R.h,R.D),R.m[$.stream]=Wt),Wt.l===0&&(Wt.l=Wt.h.createTexture()),typeof HTMLVideoElement<"u"&&ht instanceof HTMLVideoElement)var It=ht.videoWidth,Tt=ht.videoHeight;else typeof HTMLImageElement<"u"&&ht instanceof HTMLImageElement?(It=ht.naturalWidth,Tt=ht.naturalHeight):(It=ht.width,Tt=ht.height);Tt={glName:Wt.l,width:It,height:Tt},It=Wt.g,It.canvas.width=Tt.width,It.canvas.height=Tt.height,It.activeTexture(It.TEXTURE0),Wt.h.bindTexture2d(Wt.l),It.texImage2D(It.TEXTURE_2D,0,It.RGBA,It.RGBA,It.UNSIGNED_BYTE,ht),Wt.h.bindTexture2d(0),Wt=Tt;break t;case"detections":for(Wt=R.m[$.stream],Wt||(Wt=new Yt(R.h),R.m[$.stream]=Wt),Wt.data||(Wt.data=new Wt.g.DetectionListData),Wt.data.reset(ht.length),Tt=0;Tt<ht.length;++Tt){It=ht[Tt];var Ct=Wt.data,l=Ct.setBoundingBox,v=Tt,x=It.T,w=new E;if(ut(w,1,x.Y),ut(w,2,x.Z),ut(w,3,x.height),ut(w,4,x.width),ut(w,5,x.rotation),ut(w,6,x.W),x=fn(w,ot),l.call(Ct,v,x),It.O)for(Ct=0;Ct<It.O.length;++Ct){w=It.O[Ct];var k=!!w.visibility;l=Wt.data,v=l.addNormalizedLandmark,x=Tt,w=Object.assign(Object.assign({},w),{visibility:k?w.visibility:0}),k=new Yn,ut(k,1,w.x),ut(k,2,w.y),ut(k,3,w.z),w.visibility&&ut(k,4,w.visibility),w=fn(k,Qn),v.call(l,x,w)}if(It.M)for(Ct=0;Ct<It.M.length;++Ct)l=Wt.data,v=l.addClassification,x=Tt,w=It.M[Ct],k=new In,ut(k,2,w.X),w.index&&ut(k,1,w.index),w.label&&ut(k,3,w.label),w.displayName&&ut(k,4,w.displayName),w=fn(k,En),v.call(l,x,w)}Wt=Wt.data;break t;default:Wt={}}}switch(yt=Wt,Xt=$.stream,$.type){case"video":J.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Xt,timestamp:T}));break;case"detections":Kt=yt,Kt.stream=Xt,Kt.timestamp=T,J.pushDetectionList(Kt);break;default:throw Error("Unknown input config type: '"+$.type+"'")}}return R.i.send(J),P(xt,R.C,4);case 4:J.delete(),xt.g=0}})};function K(s,X,R){var T,J,A,B,nt,$,yt,Xt,Kt,xt,ht,Wt,It,Tt;return Zt(function(Ct){switch(Ct.g){case 1:if(!R)return Ct.return(X);for(T={},J=0,A=Y(Object.keys(R)),B=A.next();!B.done;B=A.next())nt=B.value,$=R[nt],typeof $!="string"&&$.type==="texture"&&X[$.stream]!==void 0&&++J;1<J&&(s.G=!1),yt=Y(Object.keys(R)),B=yt.next();case 2:if(B.done){Ct.g=4;break}if(Xt=B.value,Kt=R[Xt],typeof Kt=="string")return It=T,Tt=Xt,P(Ct,_(s,Xt,X[Kt]),14);if(xt=X[Kt.stream],Kt.type==="detection_list"){if(xt){for(var l=xt.getRectList(),v=xt.getLandmarksList(),x=xt.getClassificationsList(),w=[],k=0;k<l.size();++k){var o=bn(l.get(k),E,z);o={T:{Y:it(o,1),Z:it(o,2),height:it(o,3),width:it(o,4),rotation:it(o,5,0),W:St(o,6)},O:Ut(v.get(k)),M:bt(bn(x.get(k),Zn,Kn))},w.push(o)}l=w}else l=[];T[Xt]=l,Ct.g=7;break}if(Kt.type==="proto_list"){if(xt){for(l=Array(xt.size()),v=0;v<xt.size();v++)l[v]=xt.get(v);xt.delete()}else l=[];T[Xt]=l,Ct.g=7;break}if(xt===void 0){Ct.g=3;break}if(Kt.type==="float_list"){T[Xt]=xt,Ct.g=7;break}if(Kt.type==="proto"){T[Xt]=xt,Ct.g=7;break}if(Kt.type!=="texture")throw Error("Unknown output config type: '"+Kt.type+"'");return ht=s.s[Xt],ht||(ht=new Nt(s.h,s.D),s.s[Xt]=ht),P(Ct,$t(ht,xt,s.G),13);case 13:Wt=Ct.h,T[Xt]=Wt;case 7:Kt.transform&&T[Xt]&&(T[Xt]=Kt.transform(T[Xt])),Ct.g=3;break;case 14:It[Tt]=Ct.h;case 3:B=yt.next(),Ct.g=2;break;case 4:return Ct.return(T)}})}function _(s,X,R){var T;return Zt(function(J){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?J.return(R):R instanceof s.h.Texture2dDataOut?(T=s.s[X],T||(T=new Nt(s.h,s.D),s.s[X]=T),J.return($t(T,R,s.G))):J.return(void 0)})}function M(s,X){for(var R=X.name||"$",T=[].concat(N(X.wants)),J=new s.h.StringList,A=Y(X.wants),B=A.next();!B.done;B=A.next())J.push_back(B.value);A=s.h.PacketListener.implement({onResults:function(nt){for(var $={},yt=0;yt<X.wants.length;++yt)$[T[yt]]=nt.get(yt);var Xt=s.listeners[R];Xt&&(s.C=K(s,$,X.outs).then(function(Kt){Kt=Xt(Kt);for(var xt=0;xt<X.wants.length;++xt){var ht=$[T[xt]];typeof ht=="object"&&ht.hasOwnProperty&&ht.hasOwnProperty("delete")&&ht.delete()}Kt&&(s.C=Kt)}))}}),s.i.attachMultiListener(J,A),J.delete()}i.onResults=function(s,X){this.listeners[X||"$"]=s},Ht("Solution",Je),Ht("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"});function q(s){switch(s===void 0&&(s=0),s){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function ct(s){var X=this;s=s||{},this.g=new Je({locateFile:s.locateFile,files:function(R){return[{url:"pose_solution_packed_assets_loader.js"},{simd:!1,url:"pose_solution_wasm_bin.js"},{simd:!0,url:"pose_solution_simd_wasm_bin.js"},{data:!0,url:q(R.modelComplexity)}]},graph:{url:"pose_web.binarypb"},listeners:[{wants:["pose_landmarks","world_landmarks","segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Ut},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:Ut},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(R){var T,J,A;return Zt(function(B){return B.g==1?(T=q(R),J="third_party/mediapipe/modules/pose_landmark/"+T,P(B,H(X.g,T),2)):(A=B.h,X.g.overrideFile(J,A),B.return(!0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}}}})}i=ct.prototype,i.reset=function(){this.g.reset()},i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(s){this.g.onResults(s)},i.initialize=function(){var s=this;return Zt(function(X){return P(X,s.g.initialize(),0)})},i.send=function(s,X){var R=this;return Zt(function(T){return P(T,R.g.send(s,X),0)})},i.setOptions=function(s){this.g.setOptions(s)},Ht("Pose",ct),Ht("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ht("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ht("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ht("VERSION","0.5.1635988162")}).call(Ri);const ir=class{constructor(){gt(this,"mediapipeMap_",new Map)}getVersion(n){switch(n){case"face_detection":return Xi.VERSION;case"face_mesh":return Wi.VERSION;case"hands":return vi.VERSION;case"holistic":return Gi.VERSION;case"objectron":return Vi.VERSION;case"selfie_segmentation":return Zi.VERSION;case"pose":return Ri.VERSION;default:return""}}initialize(n){return new Promise(async(r,f)=>{if(n.mediaPipeModelConfigArray.length==0){f("no model was selected");return}for(let Z=0;Z<n.mediaPipeModelConfigArray.length;Z++){const I=n.mediaPipeModelConfigArray[Z];if(this.mediapipeMap_.has(I.modelType)){f("setting same type is not supported");return}if(typeof I.listener!="function"){f(`[${I.modelType}] ResultsListener must be provided`);return}let C;switch(I.modelType){case"face_mesh":C=new Wi.FaceMesh({locateFile:(Y,N)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+Y});break;case"face_detection":C=new Xi.FaceDetection({locateFile:(Y,N)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+Y});break;case"hands":C=new vi.Hands({locateFile:(Y,N)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+Y});break;case"holistic":C=new Gi.Holistic({locateFile:(Y,N)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+Y});break;case"objectron":C=new Vi.Objectron({locateFile:(Y,N)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+Y});break;case"selfie_segmentation":C=new Zi.SelfieSegmentation({locateFile:(Y,N)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+Y});break;case"pose":C=new Ri.Pose({locateFile:(Y,N)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+Y});break;default:f("unknown model type");return}C.onResults(I.listener),I.options&&C.setOptions(I.options);try{await C.initialize(),this.mediapipeMap_.set(I.modelType,C)}catch(Y){f(Y);return}}r()})}close(n){return new Promise((r,f)=>{let Z=[];if(n){let I=this.mediapipeMap_.get(n);if(I)this.mediapipeMap_.delete(n),Z.push(I.close());else{f("model not exit");return}}else{for(const[I,C]of this.mediapipeMap_.entries())Z.push(C.close());this.mediapipeMap_.clear()}Promise.all(Z).then(()=>{r()}).catch(I=>{f(I)})})}send(n,r){return new Promise((f,Z)=>{let I=[];if(r){let C=this.mediapipeMap_.get(r);if(C)I.push(C.send({image:n}));else{Z("model not exit");return}}else for(const[C,Y]of this.mediapipeMap_.entries())I.push(Y.send({image:n}));Promise.all(I).then(()=>{f()}).catch(C=>{Z(C)})})}reset(n){if(n){let r=this.mediapipeMap_.get(n);r&&typeof r.reset=="function"&&r.reset()}else for(const[r,f]of this.mediapipeMap_.entries())f&&typeof f.reset=="function"&&f.reset()}};let xi=ir;gt(xi,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const lr=new WeakMap,vr=new WeakMap,nr=new WeakMap,Ii=Symbol("anyProducer"),Ys=Promise.resolve(),Si=Symbol("listenerAdded"),Yi=Symbol("listenerRemoved");let wi=!1,Go=!1;function Fr(i){if(typeof i!="string"&&typeof i!="symbol"&&typeof i!="number")throw new TypeError("`eventName` must be a string, symbol, or number")}function Ti(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Cr(i,n){const r=vr.get(i);if(!!r.has(n))return r.get(n)}function Dr(i,n){const r=typeof n=="string"||typeof n=="symbol"||typeof n=="number"?n:Ii,f=nr.get(i);if(!!f.has(r))return f.get(r)}function s2(i,n,r){const f=nr.get(i);if(f.has(n))for(const Z of f.get(n))Z.enqueue(r);if(f.has(Ii)){const Z=Promise.all([n,r]);for(const I of f.get(Ii))I.enqueue(Z)}}function ws(i,n){n=Array.isArray(n)?n:[n];let r=!1,f=()=>{},Z=[];const I={enqueue(C){Z.push(C),f()},finish(){r=!0,f()}};for(const C of n){let Y=Dr(i,C);Y||(Y=new Set,nr.get(i).set(C,Y)),Y.add(I)}return{async next(){return Z?Z.length===0?r?(Z=void 0,this.next()):(await new Promise(C=>{f=C}),this.next()):{done:!1,value:await Z.shift()}:{done:!0}},async return(C){Z=void 0;for(const Y of n){const N=Dr(i,Y);N&&(N.delete(I),N.size===0&&nr.get(i).delete(Y))}return f(),arguments.length>0?{done:!0,value:await C}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Ts(i){if(i===void 0)return Fs;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!Fs.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const Lr=i=>i===Si||i===Yi;function Fi(i,n,r){if(Lr(n))try{wi=!0,i.emit(n,r)}finally{wi=!1}}class cr{static mixin(n,r){return r=Ts(r),f=>{if(typeof f!="function")throw new TypeError("`target` must be function");for(const C of r)if(f.prototype[C]!==void 0)throw new Error(`The property \`${C}\` already exists on \`target\``);function Z(){return Object.defineProperty(this,n,{enumerable:!1,value:new cr}),this[n]}Object.defineProperty(f.prototype,n,{enumerable:!1,get:Z});const I=C=>function(...Y){return this[n][C](...Y)};for(const C of r)Object.defineProperty(f.prototype,C,{enumerable:!1,value:I(C)});return f}}static get isDebugEnabled(){var r,f;if(typeof((r=globalThis.process)==null?void 0:r.env)!="object")return Go;const{env:n}=(f=globalThis.process)!=null?f:{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||Go}static set isDebugEnabled(n){Go=n}constructor(n={}){var r;lr.set(this,new Set),vr.set(this,new Map),nr.set(this,new Map),nr.get(this).set(Ii,new Set),this.debug=(r=n.debug)!=null?r:{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(f,Z,I,C)=>{try{C=JSON.stringify(C)}catch{C=`Object with the following keys failed to stringify: ${Object.keys(C).join(",")}`}(typeof I=="symbol"||typeof I=="number")&&(I=I.toString());const Y=new Date,N=`${Y.getHours()}:${Y.getMinutes()}:${Y.getSeconds()}.${Y.getMilliseconds()}`;console.log(`[${N}][emittery:${f}][${Z}] Event Name: ${I}
|
|
122
|
-
data: ${
|
|
123
|
-
data: ${C}`)})}logIfDebugEnabled(n,r,f){(Xr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){Ei(r),n=Array.isArray(n)?n:[n];for(const f of n){Jr(f);let Z=kr(this,f);Z||(Z=new Set,Gr.get(this).set(f,Z)),Z.add(r),this.logIfDebugEnabled("subscribe",f,void 0),Er(f)||Ui(this,Ni,{eventName:f,listener:r})}return this.off.bind(this,n,r)}off(n,r){Ei(r),n=Array.isArray(n)?n:[n];for(const f of n){Jr(f);const Z=kr(this,f);Z&&(Z.delete(r),Z.size===0&&Gr.get(this).delete(f)),this.logIfDebugEnabled("unsubscribe",f,void 0),Er(f)||Ui(this,Ji,{eventName:f,listener:r})}}once(n){let r;const f=new Promise(Z=>{r=this.on(n,I=>{r(),Z(I)})});return f.off=r,f}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Jr(r);return Hs(this,n)}async emit(n,r){var f;if(Jr(n),Er(n)&&!ki)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",n,r),a2(this,n,r);const Z=(f=kr(this,n))!=null?f:new Set,I=ur.get(this),C=[...Z],Y=Er(n)?[]:[...I];await Ls,await Promise.all([...C.map(async N=>{if(Z.has(N))return N(r)}),...Y.map(async N=>{if(I.has(N))return N(n,r)})])}async emitSerial(n,r){var f;if(Jr(n),Er(n)&&!ki)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",n,r);const Z=(f=kr(this,n))!=null?f:new Set,I=ur.get(this),C=[...Z],Y=[...I];await Ls;for(const N of C)Z.has(N)&&await N(r);for(const N of Y)I.has(N)&&await N(n,r)}onAny(n){return Ei(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ur.get(this).add(n),Ui(this,Ni,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Hs(this)}offAny(n){Ei(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),Ui(this,Ji,{listener:n}),ur.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"||typeof r=="number"){const f=kr(this,r);f&&f.clear();const Z=qr(this,r);if(Z){for(const I of Z)I.finish();Z.clear()}}else{ur.get(this).clear();for(const[f,Z]of Gr.get(this).entries())Z.clear(),Gr.get(this).delete(f);for(const[f,Z]of rr.get(this).entries()){for(const I of Z)I.finish();Z.clear(),rr.get(this).delete(f)}}}listenerCount(n){var r,f,Z,I,C,Y;n=Array.isArray(n)?n:[n];let N=0;for(const et of n){if(typeof et=="string"){N+=ur.get(this).size+((f=(r=kr(this,et))==null?void 0:r.size)!=null?f:0)+((I=(Z=qr(this,et))==null?void 0:Z.size)!=null?I:0)+((Y=(C=qr(this))==null?void 0:C.size)!=null?Y:0);continue}typeof et<"u"&&Jr(et),N+=ur.get(this).size;for(const lt of Gr.get(this).values())N+=lt.size;for(const lt of rr.get(this).values())N+=lt.size}return N}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=Ns(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const Js=Object.getOwnPropertyNames(Xr.prototype).filter(i=>i!=="constructor");Object.defineProperty(Xr,"listenerAdded",{value:Ni,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Xr,"listenerRemoved",{value:Ji,writable:!1,enumerable:!0,configurable:!1});function d2(i){return i.onAny&&i.emit}function h2(i){return i.prototype.onAny&&i.prototype.emit}let f2=0;async function m2(i,n,r){const Z=h2(i)?new Xr:{},I=f2++;return Object.getOwnPropertyNames(i.prototype).forEach(C=>{Z[C]=(...Y)=>Ci(n,$n.FORWARD,C,Y,r)}),Z.terminate=async(...C)=>{const Y=await Ci(n,$n.TERMINATE,"",C,r);return delete Li[I],n.terminate(),Z.workerContext.worker=void 0,Y},Z.workerContext={id:I,worker:n,resolvers:r},Li[I]=Z,Z}async function p2(i,n){const r=new Map;let f;const Z=await u2(i,n,r,(I,C)=>{f!=null&&f.emit&&(f==null||f.emit(I,C))});return f=await m2(i,Z,r),f}async function b2(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Nr(i,await n.instance[r](...f!=null?f:[]))}const ks=Xo("registeredWorkers",{});function y2(i,n){n.workerId=i,Wo()&&(ks[n.workerId]=n)}function g2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=ks[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;$r(f,Hr),d2(n.instance)&&n.instance.onAny((I,C)=>{Nr({type:$n.EVENT},{name:I,data:C})}),Nr(i,typeof n.instance!==void 0)}async function Z2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),Nr(i,f)}function v2(i){if(!i.args)throw"Missing globals while syncing";$r(i.args[0],Hr),Nr(i,{})}function G2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case $n.INIT:g2(r,i);break;case $n.FORWARD:b2(r,i);break;case $n.TERMINATE:Z2(r,i);break;case $n.GLOBALS_SYNC:v2(r);break}}}Wo()&&G2();class Es{static async createVideoReadable(n){return new Promise((r,f)=>{const Z=document.createElement("video");let I=new AbortController,C=new AbortController;Z.addEventListener("canplay",()=>{I.abort(),Z.muted=!0,Z.loop=!0,Z.play().then(()=>{try{const Y=Z.captureStream(),N=new MediaStreamTrackProcessor(Y.getVideoTracks()[0]);r(N.readable)}catch(Y){f(Y)}})},{once:!0,signal:C.signal}),Z.addEventListener("error",Y=>{C.abort(),f("loading error:"+Y)},{once:!0,signal:I.signal}),Z.crossOrigin="anonymous",Z.src=n})}static async createImageCanvas(n){const f=await(await fetch(n)).blob();return await createImageBitmap(f)}}var X2=Object.defineProperty,W2=(i,n,r)=>n in i?X2(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,V2=(i,n,r)=>(W2(i,typeof n!="symbol"?n+"":n,r),r);const R2="hlg.tokbox.com/prod/logging/vcp_webrtc",x2="https://",I2=1e4;let Bi;const S2=new Uint8Array(16);function Y2(){if(!Bi&&(Bi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Bi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Bi(S2)}const Bn=[];for(let i=0;i<256;++i)Bn.push((i+256).toString(16).slice(1));function w2(i,n=0){return(Bn[i[n+0]]+Bn[i[n+1]]+Bn[i[n+2]]+Bn[i[n+3]]+"-"+Bn[i[n+4]]+Bn[i[n+5]]+"-"+Bn[i[n+6]]+Bn[i[n+7]]+"-"+Bn[i[n+8]]+Bn[i[n+9]]+"-"+Bn[i[n+10]]+Bn[i[n+11]]+Bn[i[n+12]]+Bn[i[n+13]]+Bn[i[n+14]]+Bn[i[n+15]]).toLowerCase()}const T2=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Us={randomUUID:T2};function F2(i,n,r){if(Us.randomUUID&&!n&&!i)return Us.randomUUID();i=i||{};const f=i.random||(i.rng||Y2)();if(f[6]=f[6]&15|64,f[8]=f[8]&63|128,n){r=r||0;for(let Z=0;Z<16;++Z)n[r+Z]=f[Z];return n}return w2(f)}function Ro(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const ar=Ro("globals",{});var Wr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Wr||{});function Bs(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let C2=0;function L2(i,n,r,f,Z){const I=C2++;return i.postMessage({id:I,type:n,functionName:r,args:f},f.filter(C=>Bs(C))),new Promise(C=>{Z==null||Z.set(I,C)})}function ti(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(I=>Bs(I)))}const Ks=Ro("workerized",{});function Ms(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function H2(){if(Ms())ti({type:Wr.GLOBALS_SYNC},ar);else{const i=[];for(const n in Ks){const{worker:r,resolvers:f}=Ks[n].workerContext;r&&i.push(L2(r,Wr.GLOBALS_SYNC,"",[ar],f))}await Promise.all(i)}}function Ki(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],Ki(i[r],n[r])):typeof i[r]=="object"?(n[r]={},Ki(i[r],n[r])):n[r]=i[r]}async function N2(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;ti(i,await n.instance[r](...f!=null?f:[]))}const J2=Ro("registeredWorkers",{});function k2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=J2[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;Ki(f,ar),ti(i,typeof n.instance!==void 0)}async function E2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),ti(i,f)}function U2(i){if(!i.args)throw"Missing globals while syncing";Ki(i.args[0],ar),ti(i,{})}function B2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Wr.INIT:k2(r,i);break;case Wr.FORWARD:N2(r,i);break;case Wr.TERMINATE:E2(r,i);break;case Wr.GLOBALS_SYNC:U2(r);break}}}Ms()&&B2();function K2(i,n){return ar[i]||(ar[i]=n),[()=>ar[i],async r=>{ar[i]=r,await H2()}]}function M2(i,n){return K2(i,n)}const[A2,D3]=M2("metadata");function xo(){return A2()}class j2{constructor(n){V2(this,"uuid",F2()),this.config=n}async send(n){var r,f,Z;const{appId:I,sourceType:C}=(r=xo())!=null?r:{};if(!I||!C)return"metadata missing";const Y=new AbortController,N=setTimeout(()=>Y.abort(),I2);return await((Z=(f=this.config)==null?void 0:f.fetch)!=null?Z:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:Y.signal}),clearTimeout(N),"success"}getUrl(){var n;let r=(n=xo().proxyUrl)!=null?n:x2;return r+=(r.at(-1)==="/"?"":"/")+R2,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=xo();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const z2="5.1.3";class Io{constructor(){gt(this,"canvas");gt(this,"context");const n=new OffscreenCanvas(0,0),r=n.getContext("2d");if(!r)throw"Fail to retrieve webgl2 context";this.canvas=n,this.context=r}setFlickeringOptions(n){}enablePostProcessing(){}disablePostProcessing(){}async profileWebgl(n){return[]}async render(n,r){return this.canvas}resizeCanvas(n){const{width:r,height:f}=n;this.canvas.width=r,this.canvas.height=f}renderSilhouette(n,r,f="none"){const{width:Z,height:I}=n;this.context.save(),this.context.drawImage(r,0,0,r.width,r.height,0,0,Z,I),this.context.globalCompositeOperation="source-in",this.context.filter=f,this.context.drawImage(n,0,0,Z,I,0,0,this.canvas.width,this.canvas.height),this.context.restore()}}class O2 extends Io{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r),this.context.save(),this.context.filter=`blur(${this.radius}px)`,this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class P2 extends Io{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r,`blur(${this.radius}px)`),this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class _2 extends Io{constructor(){super(...arguments);gt(this,"backgroundImage")}setBackgroundImage(r){this.backgroundImage=r}async render(r,f){return super.resizeCanvas(r),this.renderSilhouette(r,f),this.backgroundImage&&(this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(this.backgroundImage,0,0,this.backgroundImage.width,this.backgroundImage.height,0,0,r.width,r.height),this.context.restore()),super.render(r,f)}}/* @license twgl.js 5.5.1 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
121
|
+
`+R.getProgramInfoLog(A));w=s.m=A,R.useProgram(w),N=R.getUniformLocation(w,"sampler0"),s.j={I:R.getAttribLocation(w,"aVertex"),H:R.getAttribLocation(w,"aTex"),da:N},s.s=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.enableVertexAttribArray(s.j.I),R.vertexAttribPointer(s.j.I,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),s.o=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.enableVertexAttribArray(s.j.H),R.vertexAttribPointer(s.j.H,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),R.uniform1i(N,0)}w=s.j,R.useProgram(s.m),R.canvas.width=X.width,R.canvas.height=X.height,R.viewport(0,0,X.width,X.height),R.activeTexture(R.TEXTURE0),s.h.bindTexture2d(X.glName),R.enableVertexAttribArray(w.I),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.vertexAttribPointer(w.I,2,R.FLOAT,!1,0,0),R.enableVertexAttribArray(w.H),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.vertexAttribPointer(w.H,2,R.FLOAT,!1,0,0),R.bindFramebuffer(R.DRAW_FRAMEBUFFER?R.DRAW_FRAMEBUFFER:R.FRAMEBUFFER,null),R.clearColor(0,0,0,0),R.clear(R.COLOR_BUFFER_BIT),R.colorMask(!0,!0,!0,!0),R.drawArrays(R.TRIANGLE_FAN,0,4),R.disableVertexAttribArray(w.I),R.disableVertexAttribArray(w.H),R.bindBuffer(R.ARRAY_BUFFER,null),s.h.bindTexture2d(0)}function Tt(s){this.g=s}var Et=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Dt(s,X){return X+s}function ae(s,X){window[s]=X}function pe(s){var X=document.createElement("script");return X.setAttribute("src",s),X.setAttribute("crossorigin","anonymous"),new Promise(function(R){X.addEventListener("load",function(){R()},!1),X.addEventListener("error",function(){R()},!1),document.body.appendChild(X)})}function ge(){return Zt(function(s){switch(s.g){case 1:return s.m=2,P(s,WebAssembly.instantiate(Et),4);case 4:s.g=3,s.m=0;break;case 2:return s.m=0,s.j=null,s.return(!1);case 3:return s.return(!0)}})}function Ne(s){if(this.g=s,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=s&&s.locateFile||Dt,typeof window=="object")var X=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")X=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=X,s.options){X=T(Object.keys(s.options));for(var R=X.next();!R.done;R=X.next()){R=R.value;var w=s.options[R].default;w!==void 0&&(this.j[R]=typeof w=="function"?w():w)}}}i=Ne.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var X,R,w,N,A,B,nt,$,yt,Xt,Kt;return Zt(function(xt){switch(xt.g){case 1:return s.R?(X=s.g.files===void 0?[]:typeof s.g.files=="function"?s.g.files(s.j):s.g.files,P(xt,ge(),2)):xt.return();case 2:if(R=xt.h,typeof window=="object")return ae("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ae("createMediapipeSolutionsPackedAssets",{locateFile:s.locateFile}),B=X.filter(function(ht){return ht.data!==void 0}),nt=X.filter(function(ht){return ht.data===void 0}),$=Promise.all(B.map(function(ht){var Wt=H(s,ht.url);if(ht.path!==void 0){var It=ht.path;Wt=Wt.then(function(wt){return s.overrideFile(It,wt),Promise.resolve(wt)})}return Wt})),yt=Promise.all(nt.map(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R?pe(s.locateFile(ht.url,s.S)):Promise.resolve()})).then(function(){var ht,Wt,It;return Zt(function(wt){if(wt.g==1)return ht=window.createMediapipeSolutionsWasm,Wt=window.createMediapipeSolutionsPackedAssets,It=s,P(wt,ht(Wt),2);It.h=wt.h,wt.g=0})}),Xt=function(){return Zt(function(ht){return s.g.graph&&s.g.graph.url?ht=P(ht,H(s,s.g.graph.url),0):(ht.g=0,ht=void 0),ht})}(),P(xt,Promise.all([yt,$,Xt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return w=X.filter(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R}).map(function(ht){return s.locateFile(ht.url,s.S)}),importScripts.apply(null,J(w)),N=s,P(xt,createMediapipeSolutionsWasm(Module),6);case 6:N.h=xt.h,s.l=new OffscreenCanvas(1,1),s.h.canvas=s.l,A=s.h.GL.createContext(s.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),s.h.GL.makeContextCurrent(A),xt.g=4;break;case 7:if(s.l=document.createElement("canvas"),Kt=s.l.getContext("webgl2",{}),!Kt&&(Kt=s.l.getContext("webgl",{}),!Kt))return alert("Failed to create WebGL canvas context when passing video frame."),xt.return();s.D=Kt,s.h.canvas=s.l,s.h.createContext(s.l,!0,!0,{});case 4:s.i=new s.h.SolutionWasm,s.R=!1,xt.g=0}})}function y(s){var X,R,w,N,A,B,nt,$;return Zt(function(yt){if(yt.g==1){if(s.g.graph&&s.g.graph.url&&s.P===s.g.graph.url)return yt.return();if(s.o=!0,!s.g.graph||!s.g.graph.url){yt.g=2;return}return s.P=s.g.graph.url,P(yt,H(s,s.g.graph.url),3)}for(yt.g!=2&&(X=yt.h,s.i.loadGraph(X)),R=T(Object.keys(s.B)),w=R.next();!w.done;w=R.next())N=w.value,s.i.overrideFile(N,s.B[N]);if(s.B={},s.g.listeners)for(A=T(s.g.listeners),B=A.next();!B.done;B=A.next())nt=B.value,M(s,nt);$=s.j,s.j={},s.setOptions($),yt.g=0})}i.reset=function(){var s=this;return Zt(function(X){s.i&&(s.i.reset(),s.m={},s.s={}),X.g=0})},i.setOptions=function(s,X){var R=this;if(X=X||this.g.options){for(var w=[],N=[],A={},B=T(Object.keys(s)),nt=B.next();!nt.done;A={K:A.K,L:A.L},nt=B.next()){var $=nt.value;$ in this.j&&this.j[$]===s[$]||(this.j[$]=s[$],nt=X[$],nt!==void 0&&(nt.onChange&&(A.K=nt.onChange,A.L=s[$],w.push(function(yt){return function(){var Xt;return Zt(function(Kt){if(Kt.g==1)return P(Kt,yt.K(yt.L),2);Xt=Kt.h,Xt===!0&&(R.o=!0),Kt.g=0})}}(A))),nt.graphOptionXref&&($={valueNumber:nt.type===1?s[$]:0,valueBoolean:nt.type===0?s[$]:!1,valueString:nt.type===2?s[$]:""},nt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),nt.graphOptionXref),$),N.push(nt))))}(w.length!==0||N.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(N),this.v=(this.v===void 0?[]:this.v).concat(w))}};function G(s){var X,R,w,N,A,B,nt;return Zt(function($){switch($.g){case 1:if(!s.o)return $.return();if(!s.v){$.g=2;break}X=T(s.v),R=X.next();case 3:if(R.done){$.g=5;break}return w=R.value,P($,w(),4);case 4:R=X.next(),$.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(N=new s.h.GraphOptionChangeRequestList,A=T(s.A),B=A.next();!B.done;B=A.next())nt=B.value,N.push_back(nt);s.i.changeOptions(N),N.delete(),s.A=void 0}s.o=!1,$.g=0}})}i.initialize=function(){var s=this;return Zt(function(X){return X.g==1?P(X,h(s),2):X.g!=3?P(X,y(s),3):P(X,G(s),0)})};function H(s,X){var R,w;return Zt(function(N){return X in s.F?N.return(s.F[X]):(R=s.locateFile(X,""),w=fetch(R).then(function(A){return A.arrayBuffer()}),s.F[X]=w,N.return(w))})}i.overrideFile=function(s,X){this.i?this.i.overrideFile(s,X):this.B[s]=X},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(s,X){var R=this,w,N,A,B,nt,$,yt,Xt,Kt;return Zt(function(xt){switch(xt.g){case 1:return R.g.inputs?(w=1e3*(X==null?performance.now():X),P(xt,R.C,2)):xt.return();case 2:return P(xt,R.initialize(),3);case 3:for(N=new R.h.PacketDataList,A=T(Object.keys(s)),B=A.next();!B.done;B=A.next())if(nt=B.value,$=R.g.inputs[nt]){t:{var ht=s[nt];switch($.type){case"video":var Wt=R.m[$.stream];if(Wt||(Wt=new Jt(R.h,R.D),R.m[$.stream]=Wt),Wt.l===0&&(Wt.l=Wt.h.createTexture()),typeof HTMLVideoElement<"u"&&ht instanceof HTMLVideoElement)var It=ht.videoWidth,wt=ht.videoHeight;else typeof HTMLImageElement<"u"&&ht instanceof HTMLImageElement?(It=ht.naturalWidth,wt=ht.naturalHeight):(It=ht.width,wt=ht.height);wt={glName:Wt.l,width:It,height:wt},It=Wt.g,It.canvas.width=wt.width,It.canvas.height=wt.height,It.activeTexture(It.TEXTURE0),Wt.h.bindTexture2d(Wt.l),It.texImage2D(It.TEXTURE_2D,0,It.RGBA,It.RGBA,It.UNSIGNED_BYTE,ht),Wt.h.bindTexture2d(0),Wt=wt;break t;case"detections":for(Wt=R.m[$.stream],Wt||(Wt=new Tt(R.h),R.m[$.stream]=Wt),Wt.data||(Wt.data=new Wt.g.DetectionListData),Wt.data.reset(ht.length),wt=0;wt<ht.length;++wt){It=ht[wt];var Ft=Wt.data,l=Ft.setBoundingBox,v=wt,x=It.T,Y=new E;if(ut(Y,1,x.Y),ut(Y,2,x.Z),ut(Y,3,x.height),ut(Y,4,x.width),ut(Y,5,x.rotation),ut(Y,6,x.W),x=fn(Y,ot),l.call(Ft,v,x),It.O)for(Ft=0;Ft<It.O.length;++Ft){Y=It.O[Ft];var k=!!Y.visibility;l=Wt.data,v=l.addNormalizedLandmark,x=wt,Y=Object.assign(Object.assign({},Y),{visibility:k?Y.visibility:0}),k=new Tn,ut(k,1,Y.x),ut(k,2,Y.y),ut(k,3,Y.z),Y.visibility&&ut(k,4,Y.visibility),Y=fn(k,Qn),v.call(l,x,Y)}if(It.M)for(Ft=0;Ft<It.M.length;++Ft)l=Wt.data,v=l.addClassification,x=wt,Y=It.M[Ft],k=new In,ut(k,2,Y.X),Y.index&&ut(k,1,Y.index),Y.label&&ut(k,3,Y.label),Y.displayName&&ut(k,4,Y.displayName),Y=fn(k,En),v.call(l,x,Y)}Wt=Wt.data;break t;default:Wt={}}}switch(yt=Wt,Xt=$.stream,$.type){case"video":N.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Xt,timestamp:w}));break;case"detections":Kt=yt,Kt.stream=Xt,Kt.timestamp=w,N.pushDetectionList(Kt);break;default:throw Error("Unknown input config type: '"+$.type+"'")}}return R.i.send(N),P(xt,R.C,4);case 4:N.delete(),xt.g=0}})};function K(s,X,R){var w,N,A,B,nt,$,yt,Xt,Kt,xt,ht,Wt,It,wt;return Zt(function(Ft){switch(Ft.g){case 1:if(!R)return Ft.return(X);for(w={},N=0,A=T(Object.keys(R)),B=A.next();!B.done;B=A.next())nt=B.value,$=R[nt],typeof $!="string"&&$.type==="texture"&&X[$.stream]!==void 0&&++N;1<N&&(s.G=!1),yt=T(Object.keys(R)),B=yt.next();case 2:if(B.done){Ft.g=4;break}if(Xt=B.value,Kt=R[Xt],typeof Kt=="string")return It=w,wt=Xt,P(Ft,_(s,Xt,X[Kt]),14);if(xt=X[Kt.stream],Kt.type==="detection_list"){if(xt){for(var l=xt.getRectList(),v=xt.getLandmarksList(),x=xt.getClassificationsList(),Y=[],k=0;k<l.size();++k){var o=bn(l.get(k),E,j);o={T:{Y:it(o,1),Z:it(o,2),height:it(o,3),width:it(o,4),rotation:it(o,5,0),W:St(o,6)},O:Ut(v.get(k)),M:bt(bn(x.get(k),Zn,Kn))},Y.push(o)}l=Y}else l=[];w[Xt]=l,Ft.g=7;break}if(Kt.type==="proto_list"){if(xt){for(l=Array(xt.size()),v=0;v<xt.size();v++)l[v]=xt.get(v);xt.delete()}else l=[];w[Xt]=l,Ft.g=7;break}if(xt===void 0){Ft.g=3;break}if(Kt.type==="float_list"){w[Xt]=xt,Ft.g=7;break}if(Kt.type==="proto"){w[Xt]=xt,Ft.g=7;break}if(Kt.type!=="texture")throw Error("Unknown output config type: '"+Kt.type+"'");return ht=s.s[Xt],ht||(ht=new Jt(s.h,s.D),s.s[Xt]=ht),P(Ft,$t(ht,xt,s.G),13);case 13:Wt=Ft.h,w[Xt]=Wt;case 7:Kt.transform&&w[Xt]&&(w[Xt]=Kt.transform(w[Xt])),Ft.g=3;break;case 14:It[wt]=Ft.h;case 3:B=yt.next(),Ft.g=2;break;case 4:return Ft.return(w)}})}function _(s,X,R){var w;return Zt(function(N){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?N.return(R):R instanceof s.h.Texture2dDataOut?(w=s.s[X],w||(w=new Jt(s.h,s.D),s.s[X]=w),N.return($t(w,R,s.G))):N.return(void 0)})}function M(s,X){for(var R=X.name||"$",w=[].concat(J(X.wants)),N=new s.h.StringList,A=T(X.wants),B=A.next();!B.done;B=A.next())N.push_back(B.value);A=s.h.PacketListener.implement({onResults:function(nt){for(var $={},yt=0;yt<X.wants.length;++yt)$[w[yt]]=nt.get(yt);var Xt=s.listeners[R];Xt&&(s.C=K(s,$,X.outs).then(function(Kt){Kt=Xt(Kt);for(var xt=0;xt<X.wants.length;++xt){var ht=$[w[xt]];typeof ht=="object"&&ht.hasOwnProperty&&ht.hasOwnProperty("delete")&&ht.delete()}Kt&&(s.C=Kt)}))}}),s.i.attachMultiListener(N,A),N.delete()}i.onResults=function(s,X){this.listeners[X||"$"]=s},Ht("Solution",Ne),Ht("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"});function q(s){switch(s===void 0&&(s=0),s){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function ct(s){var X=this;s=s||{},this.g=new Ne({locateFile:s.locateFile,files:function(R){return[{url:"pose_solution_packed_assets_loader.js"},{simd:!1,url:"pose_solution_wasm_bin.js"},{simd:!0,url:"pose_solution_simd_wasm_bin.js"},{data:!0,url:q(R.modelComplexity)}]},graph:{url:"pose_web.binarypb"},listeners:[{wants:["pose_landmarks","world_landmarks","segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Ut},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:Ut},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(R){var w,N,A;return Zt(function(B){return B.g==1?(w=q(R),N="third_party/mediapipe/modules/pose_landmark/"+w,P(B,H(X.g,w),2)):(A=B.h,X.g.overrideFile(N,A),B.return(!0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}}}})}i=ct.prototype,i.reset=function(){this.g.reset()},i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(s){this.g.onResults(s)},i.initialize=function(){var s=this;return Zt(function(X){return P(X,s.g.initialize(),0)})},i.send=function(s,X){var R=this;return Zt(function(w){return P(w,R.g.send(s,X),0)})},i.setOptions=function(s){this.g.setOptions(s)},Ht("Pose",ct),Ht("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ht("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ht("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ht("VERSION","0.5.1635988162")}).call(Ri);const ir=class{constructor(){gt(this,"mediapipeMap_",new Map)}getVersion(n){switch(n){case"face_detection":return Xi.VERSION;case"face_mesh":return Wi.VERSION;case"hands":return vi.VERSION;case"holistic":return Gi.VERSION;case"objectron":return Vi.VERSION;case"selfie_segmentation":return Zi.VERSION;case"pose":return Ri.VERSION;default:return""}}initialize(n){return new Promise(async(r,f)=>{if(n.mediaPipeModelConfigArray.length==0){f("no model was selected");return}for(let Z=0;Z<n.mediaPipeModelConfigArray.length;Z++){const I=n.mediaPipeModelConfigArray[Z];if(this.mediapipeMap_.has(I.modelType)){f("setting same type is not supported");return}if(typeof I.listener!="function"){f(`[${I.modelType}] ResultsListener must be provided`);return}let F;switch(I.modelType){case"face_mesh":F=new Wi.FaceMesh({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+T});break;case"face_detection":F=new Xi.FaceDetection({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+T});break;case"hands":F=new vi.Hands({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+T});break;case"holistic":F=new Gi.Holistic({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+T});break;case"objectron":F=new Vi.Objectron({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+T});break;case"selfie_segmentation":F=new Zi.SelfieSegmentation({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+T});break;case"pose":F=new Ri.Pose({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+T});break;default:f("unknown model type");return}F.onResults(I.listener),I.options&&F.setOptions(I.options);try{await F.initialize(),this.mediapipeMap_.set(I.modelType,F)}catch(T){f(T);return}}r()})}close(n){return new Promise((r,f)=>{let Z=[];if(n){let I=this.mediapipeMap_.get(n);if(I)this.mediapipeMap_.delete(n),Z.push(I.close());else{f("model not exit");return}}else{for(const[I,F]of this.mediapipeMap_.entries())Z.push(F.close());this.mediapipeMap_.clear()}Promise.all(Z).then(()=>{r()}).catch(I=>{f(I)})})}send(n,r){return new Promise((f,Z)=>{let I=[];if(r){let F=this.mediapipeMap_.get(r);if(F)I.push(F.send({image:n}));else{Z("model not exit");return}}else for(const[F,T]of this.mediapipeMap_.entries())I.push(T.send({image:n}));Promise.all(I).then(()=>{f()}).catch(F=>{Z(F)})})}reset(n){if(n){let r=this.mediapipeMap_.get(n);r&&typeof r.reset=="function"&&r.reset()}else for(const[r,f]of this.mediapipeMap_.entries())f&&typeof f.reset=="function"&&f.reset()}};let xi=ir;gt(xi,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const lr=new WeakMap,vr=new WeakMap,nr=new WeakMap,Ii=Symbol("anyProducer"),Ts=Promise.resolve(),Si=Symbol("listenerAdded"),Ti=Symbol("listenerRemoved");let Yi=!1,Go=!1;function Lr(i){if(typeof i!="string"&&typeof i!="symbol"&&typeof i!="number")throw new TypeError("`eventName` must be a string, symbol, or number")}function wi(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Fr(i,n){const r=vr.get(i);if(!!r.has(n))return r.get(n)}function Dr(i,n){const r=typeof n=="string"||typeof n=="symbol"||typeof n=="number"?n:Ii,f=nr.get(i);if(!!f.has(r))return f.get(r)}function sc(i,n,r){const f=nr.get(i);if(f.has(n))for(const Z of f.get(n))Z.enqueue(r);if(f.has(Ii)){const Z=Promise.all([n,r]);for(const I of f.get(Ii))I.enqueue(Z)}}function Ys(i,n){n=Array.isArray(n)?n:[n];let r=!1,f=()=>{},Z=[];const I={enqueue(F){Z.push(F),f()},finish(){r=!0,f()}};for(const F of n){let T=Dr(i,F);T||(T=new Set,nr.get(i).set(F,T)),T.add(I)}return{async next(){return Z?Z.length===0?r?(Z=void 0,this.next()):(await new Promise(F=>{f=F}),this.next()):{done:!1,value:await Z.shift()}:{done:!0}},async return(F){Z=void 0;for(const T of n){const J=Dr(i,T);J&&(J.delete(I),J.size===0&&nr.get(i).delete(T))}return f(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function ws(i){if(i===void 0)return Ls;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!Ls.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const Cr=i=>i===Si||i===Ti;function Li(i,n,r){if(Cr(n))try{Yi=!0,i.emit(n,r)}finally{Yi=!1}}class cr{static mixin(n,r){return r=ws(r),f=>{if(typeof f!="function")throw new TypeError("`target` must be function");for(const F of r)if(f.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function Z(){return Object.defineProperty(this,n,{enumerable:!1,value:new cr}),this[n]}Object.defineProperty(f.prototype,n,{enumerable:!1,get:Z});const I=F=>function(...T){return this[n][F](...T)};for(const F of r)Object.defineProperty(f.prototype,F,{enumerable:!1,value:I(F)});return f}}static get isDebugEnabled(){var r,f;if(typeof((r=globalThis.process)==null?void 0:r.env)!="object")return Go;const{env:n}=(f=globalThis.process)!=null?f:{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||Go}static set isDebugEnabled(n){Go=n}constructor(n={}){var r;lr.set(this,new Set),vr.set(this,new Map),nr.set(this,new Map),nr.get(this).set(Ii,new Set),this.debug=(r=n.debug)!=null?r:{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(f,Z,I,F)=>{try{F=JSON.stringify(F)}catch{F=`Object with the following keys failed to stringify: ${Object.keys(F).join(",")}`}(typeof I=="symbol"||typeof I=="number")&&(I=I.toString());const T=new Date,J=`${T.getHours()}:${T.getMinutes()}:${T.getSeconds()}.${T.getMilliseconds()}`;console.log(`[${J}][emittery:${f}][${Z}] Event Name: ${I}
|
|
122
|
+
data: ${F}`)})}logIfDebugEnabled(n,r,f){(cr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){wi(r),n=Array.isArray(n)?n:[n];for(const f of n){Lr(f);let Z=Fr(this,f);Z||(Z=new Set,vr.get(this).set(f,Z)),Z.add(r),this.logIfDebugEnabled("subscribe",f,void 0),Cr(f)||Li(this,Si,{eventName:f,listener:r})}return this.off.bind(this,n,r)}off(n,r){wi(r),n=Array.isArray(n)?n:[n];for(const f of n){Lr(f);const Z=Fr(this,f);Z&&(Z.delete(r),Z.size===0&&vr.get(this).delete(f)),this.logIfDebugEnabled("unsubscribe",f,void 0),Cr(f)||Li(this,Ti,{eventName:f,listener:r})}}once(n){let r;const f=new Promise(Z=>{r=this.on(n,I=>{r(),Z(I)})});return f.off=r,f}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Lr(r);return Ys(this,n)}async emit(n,r){var T;if(Lr(n),Cr(n)&&!Yi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",n,r),sc(this,n,r);const f=(T=Fr(this,n))!=null?T:new Set,Z=lr.get(this),I=[...f],F=Cr(n)?[]:[...Z];await Ts,await Promise.all([...I.map(async J=>{if(f.has(J))return J(r)}),...F.map(async J=>{if(Z.has(J))return J(n,r)})])}async emitSerial(n,r){var T;if(Lr(n),Cr(n)&&!Yi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",n,r);const f=(T=Fr(this,n))!=null?T:new Set,Z=lr.get(this),I=[...f],F=[...Z];await Ts;for(const J of I)f.has(J)&&await J(r);for(const J of F)Z.has(J)&&await J(n,r)}onAny(n){return wi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),lr.get(this).add(n),Li(this,Si,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Ys(this)}offAny(n){wi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),Li(this,Ti,{listener:n}),lr.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"||typeof r=="number"){const f=Fr(this,r);f&&f.clear();const Z=Dr(this,r);if(Z){for(const I of Z)I.finish();Z.clear()}}else{lr.get(this).clear();for(const[f,Z]of vr.get(this).entries())Z.clear(),vr.get(this).delete(f);for(const[f,Z]of nr.get(this).entries()){for(const I of Z)I.finish();Z.clear(),nr.get(this).delete(f)}}}listenerCount(n){var f,Z,I,F,T,J;n=Array.isArray(n)?n:[n];let r=0;for(const et of n){if(typeof et=="string"){r+=lr.get(this).size+((Z=(f=Fr(this,et))==null?void 0:f.size)!=null?Z:0)+((F=(I=Dr(this,et))==null?void 0:I.size)!=null?F:0)+((J=(T=Dr(this))==null?void 0:T.size)!=null?J:0);continue}typeof et<"u"&&Lr(et),r+=lr.get(this).size;for(const lt of vr.get(this).values())r+=lt.size;for(const lt of nr.get(this).values())r+=lt.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=ws(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const Ls=Object.getOwnPropertyNames(cr.prototype).filter(i=>i!=="constructor");Object.defineProperty(cr,"listenerAdded",{value:Si,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(cr,"listenerRemoved",{value:Ti,writable:!1,enumerable:!0,configurable:!1});function Xo(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const Hr=Xo("globals",{});var $n=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i.EVENT="EVENT",i))($n||{});function Fs(i){return[ImageBitmap,ReadableStream,WritableStream].some(r=>i instanceof r)}let lc=0;function Fi(i,n,r,f,Z){const I=lc++;return i.postMessage({id:I,type:n,functionName:r,args:f},f.filter(T=>Fs(T))),new Promise(T=>{Z==null||Z.set(I,T)})}function Jr(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(I=>Fs(I)))}const Ci=Xo("workerized",{});function Wo(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function cc(){if(Wo())Jr({type:$n.GLOBALS_SYNC},Hr);else{const i=[];for(const n in Ci){const{worker:r,resolvers:f}=Ci[n].workerContext;r&&i.push(Fi(r,$n.GLOBALS_SYNC,"",[Hr],f))}await Promise.all(i)}}function $r(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],$r(i[r],n[r])):typeof i[r]=="object"?(n[r]={},$r(i[r],n[r])):n[r]=i[r]}async function uc(i,n,r,f){const Z=new n;if(Z.addEventListener("message",async({data:F})=>{var T,J,et,lt,pt,Yt,Lt;switch(F.type){case $n.GLOBALS_SYNC:F.id?((J=r.get((T=F.id)!=null?T:-1))==null||J(F.result),r.delete((et=F.id)!=null?et:-1)):($r((lt=F.result)!=null?lt:{},Hr),await cc());break;case $n.EVENT:const{result:at}=F,dt=at;if((dt==null?void 0:dt.name)==null)throw"Missing event name";f(dt.name,dt.data);break;default:(Yt=r.get((pt=F.id)!=null?pt:-1))==null||Yt(F.result),r.delete((Lt=F.id)!=null?Lt:-1)}}),!await Fi(Z,$n.INIT,"",[i.workerId,Hr],r))throw"Failed to instantiate workerized class";return Z}const ur=new WeakMap,Gr=new WeakMap,rr=new WeakMap,Hi=Symbol("anyProducer"),Cs=Promise.resolve(),Ji=Symbol("listenerAdded"),Ni=Symbol("listenerRemoved");let ki=!1,Vo=!1;function Nr(i){if(typeof i!="string"&&typeof i!="symbol"&&typeof i!="number")throw new TypeError("`eventName` must be a string, symbol, or number")}function Ei(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function kr(i,n){const r=Gr.get(i);if(!!r.has(n))return r.get(n)}function qr(i,n){const r=typeof n=="string"||typeof n=="symbol"||typeof n=="number"?n:Hi,f=rr.get(i);if(!!f.has(r))return f.get(r)}function ac(i,n,r){const f=rr.get(i);if(f.has(n))for(const Z of f.get(n))Z.enqueue(r);if(f.has(Hi)){const Z=Promise.all([n,r]);for(const I of f.get(Hi))I.enqueue(Z)}}function Hs(i,n){n=Array.isArray(n)?n:[n];let r=!1,f=()=>{},Z=[];const I={enqueue(F){Z.push(F),f()},finish(){r=!0,f()}};for(const F of n){let T=qr(i,F);T||(T=new Set,rr.get(i).set(F,T)),T.add(I)}return{async next(){return Z?Z.length===0?r?(Z=void 0,this.next()):(await new Promise(F=>{f=F}),this.next()):{done:!1,value:await Z.shift()}:{done:!0}},async return(F){Z=void 0;for(const T of n){const J=qr(i,T);J&&(J.delete(I),J.size===0&&rr.get(i).delete(T))}return f(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Js(i){if(i===void 0)return Ns;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!Ns.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const Er=i=>i===Ji||i===Ni;function Ui(i,n,r){if(Er(n))try{ki=!0,i.emit(n,r)}finally{ki=!1}}class Xr{static mixin(n,r){return r=Js(r),f=>{if(typeof f!="function")throw new TypeError("`target` must be function");for(const F of r)if(f.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function Z(){return Object.defineProperty(this,n,{enumerable:!1,value:new Xr}),this[n]}Object.defineProperty(f.prototype,n,{enumerable:!1,get:Z});const I=F=>function(...T){return this[n][F](...T)};for(const F of r)Object.defineProperty(f.prototype,F,{enumerable:!1,value:I(F)});return f}}static get isDebugEnabled(){var n,r;if(typeof((n=globalThis.process)==null?void 0:n.env)!="object")return Vo;const{env:f}=(r=globalThis.process)!=null?r:{env:{}};return f.DEBUG==="emittery"||f.DEBUG==="*"||Vo}static set isDebugEnabled(n){Vo=n}constructor(n={}){var r;ur.set(this,new Set),Gr.set(this,new Map),rr.set(this,new Map),rr.get(this).set(Hi,new Set),this.debug=(r=n.debug)!=null?r:{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(f,Z,I,F)=>{try{F=JSON.stringify(F)}catch{F=`Object with the following keys failed to stringify: ${Object.keys(F).join(",")}`}(typeof I=="symbol"||typeof I=="number")&&(I=I.toString());const T=new Date,J=`${T.getHours()}:${T.getMinutes()}:${T.getSeconds()}.${T.getMilliseconds()}`;console.log(`[${J}][emittery:${f}][${Z}] Event Name: ${I}
|
|
123
|
+
data: ${F}`)})}logIfDebugEnabled(n,r,f){(Xr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){Ei(r),n=Array.isArray(n)?n:[n];for(const f of n){Nr(f);let Z=kr(this,f);Z||(Z=new Set,Gr.get(this).set(f,Z)),Z.add(r),this.logIfDebugEnabled("subscribe",f,void 0),Er(f)||Ui(this,Ji,{eventName:f,listener:r})}return this.off.bind(this,n,r)}off(n,r){Ei(r),n=Array.isArray(n)?n:[n];for(const f of n){Nr(f);const Z=kr(this,f);Z&&(Z.delete(r),Z.size===0&&Gr.get(this).delete(f)),this.logIfDebugEnabled("unsubscribe",f,void 0),Er(f)||Ui(this,Ni,{eventName:f,listener:r})}}once(n){let r;const f=new Promise(Z=>{r=this.on(n,I=>{r(),Z(I)})});return f.off=r,f}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Nr(r);return Hs(this,n)}async emit(n,r){var f;if(Nr(n),Er(n)&&!ki)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",n,r),ac(this,n,r);const Z=(f=kr(this,n))!=null?f:new Set,I=ur.get(this),F=[...Z],T=Er(n)?[]:[...I];await Cs,await Promise.all([...F.map(async J=>{if(Z.has(J))return J(r)}),...T.map(async J=>{if(I.has(J))return J(n,r)})])}async emitSerial(n,r){var f;if(Nr(n),Er(n)&&!ki)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",n,r);const Z=(f=kr(this,n))!=null?f:new Set,I=ur.get(this),F=[...Z],T=[...I];await Cs;for(const J of F)Z.has(J)&&await J(r);for(const J of T)I.has(J)&&await J(n,r)}onAny(n){return Ei(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ur.get(this).add(n),Ui(this,Ji,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Hs(this)}offAny(n){Ei(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),Ui(this,Ni,{listener:n}),ur.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"||typeof r=="number"){const f=kr(this,r);f&&f.clear();const Z=qr(this,r);if(Z){for(const I of Z)I.finish();Z.clear()}}else{ur.get(this).clear();for(const[f,Z]of Gr.get(this).entries())Z.clear(),Gr.get(this).delete(f);for(const[f,Z]of rr.get(this).entries()){for(const I of Z)I.finish();Z.clear(),rr.get(this).delete(f)}}}listenerCount(n){var r,f,Z,I,F,T;n=Array.isArray(n)?n:[n];let J=0;for(const et of n){if(typeof et=="string"){J+=ur.get(this).size+((f=(r=kr(this,et))==null?void 0:r.size)!=null?f:0)+((I=(Z=qr(this,et))==null?void 0:Z.size)!=null?I:0)+((T=(F=qr(this))==null?void 0:F.size)!=null?T:0);continue}typeof et<"u"&&Nr(et),J+=ur.get(this).size;for(const lt of Gr.get(this).values())J+=lt.size;for(const lt of rr.get(this).values())J+=lt.size}return J}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=Js(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const Ns=Object.getOwnPropertyNames(Xr.prototype).filter(i=>i!=="constructor");Object.defineProperty(Xr,"listenerAdded",{value:Ji,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Xr,"listenerRemoved",{value:Ni,writable:!1,enumerable:!0,configurable:!1});function dc(i){return i.onAny&&i.emit}function hc(i){return i.prototype.onAny&&i.prototype.emit}let fc=0;async function mc(i,n,r){const Z=hc(i)?new Xr:{},I=fc++;return Object.getOwnPropertyNames(i.prototype).forEach(F=>{Z[F]=(...T)=>Fi(n,$n.FORWARD,F,T,r)}),Z.terminate=async(...F)=>{const T=await Fi(n,$n.TERMINATE,"",F,r);return delete Ci[I],n.terminate(),Z.workerContext.worker=void 0,T},Z.workerContext={id:I,worker:n,resolvers:r},Ci[I]=Z,Z}async function pc(i,n){const r=new Map;let f;const Z=await uc(i,n,r,(I,F)=>{f!=null&&f.emit&&(f==null||f.emit(I,F))});return f=await mc(i,Z,r),f}async function bc(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Jr(i,await n.instance[r](...f!=null?f:[]))}const ks=Xo("registeredWorkers",{});function yc(i,n){n.workerId=i,Wo()&&(ks[n.workerId]=n)}function gc(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=ks[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;$r(f,Hr),dc(n.instance)&&n.instance.onAny((I,F)=>{Jr({type:$n.EVENT},{name:I,data:F})}),Jr(i,typeof n.instance!==void 0)}async function Zc(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),Jr(i,f)}function vc(i){if(!i.args)throw"Missing globals while syncing";$r(i.args[0],Hr),Jr(i,{})}function Gc(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case $n.INIT:gc(r,i);break;case $n.FORWARD:bc(r,i);break;case $n.TERMINATE:Zc(r,i);break;case $n.GLOBALS_SYNC:vc(r);break}}}Wo()&&Gc();class Es{static async createVideoReadable(n){return new Promise((r,f)=>{const Z=document.createElement("video");let I=new AbortController,F=new AbortController;Z.addEventListener("canplay",()=>{I.abort(),Z.muted=!0,Z.loop=!0,Z.play().then(()=>{try{const T=Z.captureStream(),J=new MediaStreamTrackProcessor(T.getVideoTracks()[0]);r(J.readable)}catch(T){f(T)}})},{once:!0,signal:F.signal}),Z.addEventListener("error",T=>{F.abort(),f("loading error:"+T)},{once:!0,signal:I.signal}),Z.crossOrigin="anonymous",Z.src=n})}static async createImageCanvas(n){const f=await(await fetch(n)).blob();return await createImageBitmap(f)}}var Xc=Object.defineProperty,Wc=(i,n,r)=>n in i?Xc(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Vc=(i,n,r)=>(Wc(i,typeof n!="symbol"?n+"":n,r),r);const Rc="hlg.tokbox.com/prod/logging/vcp_webrtc",xc="https://",Ic=1e4;let Bi;const Sc=new Uint8Array(16);function Tc(){if(!Bi&&(Bi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Bi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Bi(Sc)}const Bn=[];for(let i=0;i<256;++i)Bn.push((i+256).toString(16).slice(1));function Yc(i,n=0){return(Bn[i[n+0]]+Bn[i[n+1]]+Bn[i[n+2]]+Bn[i[n+3]]+"-"+Bn[i[n+4]]+Bn[i[n+5]]+"-"+Bn[i[n+6]]+Bn[i[n+7]]+"-"+Bn[i[n+8]]+Bn[i[n+9]]+"-"+Bn[i[n+10]]+Bn[i[n+11]]+Bn[i[n+12]]+Bn[i[n+13]]+Bn[i[n+14]]+Bn[i[n+15]]).toLowerCase()}const wc=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Us={randomUUID:wc};function Lc(i,n,r){if(Us.randomUUID&&!n&&!i)return Us.randomUUID();i=i||{};const f=i.random||(i.rng||Tc)();if(f[6]=f[6]&15|64,f[8]=f[8]&63|128,n){r=r||0;for(let Z=0;Z<16;++Z)n[r+Z]=f[Z];return n}return Yc(f)}function Ro(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const ar=Ro("globals",{});var Wr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Wr||{});function Bs(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let Fc=0;function Cc(i,n,r,f,Z){const I=Fc++;return i.postMessage({id:I,type:n,functionName:r,args:f},f.filter(F=>Bs(F))),new Promise(F=>{Z==null||Z.set(I,F)})}function ti(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(I=>Bs(I)))}const Ks=Ro("workerized",{});function Ms(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function Hc(){if(Ms())ti({type:Wr.GLOBALS_SYNC},ar);else{const i=[];for(const n in Ks){const{worker:r,resolvers:f}=Ks[n].workerContext;r&&i.push(Cc(r,Wr.GLOBALS_SYNC,"",[ar],f))}await Promise.all(i)}}function Ki(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],Ki(i[r],n[r])):typeof i[r]=="object"?(n[r]={},Ki(i[r],n[r])):n[r]=i[r]}async function Jc(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;ti(i,await n.instance[r](...f!=null?f:[]))}const Nc=Ro("registeredWorkers",{});function kc(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=Nc[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;Ki(f,ar),ti(i,typeof n.instance!==void 0)}async function Ec(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),ti(i,f)}function Uc(i){if(!i.args)throw"Missing globals while syncing";Ki(i.args[0],ar),ti(i,{})}function Bc(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Wr.INIT:kc(r,i);break;case Wr.FORWARD:Jc(r,i);break;case Wr.TERMINATE:Ec(r,i);break;case Wr.GLOBALS_SYNC:Uc(r);break}}}Ms()&&Bc();function Kc(i,n){return ar[i]||(ar[i]=n),[()=>ar[i],async r=>{ar[i]=r,await Hc()}]}function Mc(i,n){return Kc(i,n)}const[Ac,D3]=Mc("metadata");function xo(){return Ac()}class zc{constructor(n){Vc(this,"uuid",Lc()),this.config=n}async send(n){var r,f,Z;const{appId:I,sourceType:F}=(r=xo())!=null?r:{};if(!I||!F)return"metadata missing";const T=new AbortController,J=setTimeout(()=>T.abort(),Ic);return await((Z=(f=this.config)==null?void 0:f.fetch)!=null?Z:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:T.signal}),clearTimeout(J),"success"}getUrl(){var n;let r=(n=xo().proxyUrl)!=null?n:xc;return r+=(r.at(-1)==="/"?"":"/")+Rc,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=xo();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const jc="5.2.0-alpha.0";class Io{constructor(){gt(this,"canvas");gt(this,"context");const n=new OffscreenCanvas(0,0),r=n.getContext("2d");if(!r)throw"Fail to retrieve webgl2 context";this.canvas=n,this.context=r}setFlickeringOptions(n){}enablePostProcessing(){}disablePostProcessing(){}async profileWebgl(n){return[]}async render(n,r){return this.canvas}resizeCanvas(n){const{width:r,height:f}=n;this.canvas.width=r,this.canvas.height=f}renderSilhouette(n,r,f="none"){const{width:Z,height:I}=n;this.context.save(),this.context.drawImage(r,0,0,r.width,r.height,0,0,Z,I),this.context.globalCompositeOperation="source-in",this.context.filter=f,this.context.drawImage(n,0,0,Z,I,0,0,this.canvas.width,this.canvas.height),this.context.restore()}}class Oc extends Io{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r),this.context.save(),this.context.filter=`blur(${this.radius}px)`,this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class Pc extends Io{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r,`blur(${this.radius}px)`),this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class _c extends Io{constructor(){super(...arguments);gt(this,"backgroundImage")}setBackgroundImage(r){this.backgroundImage=r}async render(r,f){return super.resizeCanvas(r),this.renderSilhouette(r,f),this.backgroundImage&&(this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(this.backgroundImage,0,0,this.backgroundImage.width,this.backgroundImage.height,0,0,r.width,r.height),this.context.restore()),super.render(r,f)}}/* @license twgl.js 5.5.1 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
124
124
|
Available via the MIT license.
|
|
125
|
-
see: http://github.com/greggman/twgl.js for details */const So=5120,ei=5121,Yo=5122,wo=5123,To=5124,Fo=5125,Co=5126,Q2=32819,D2=32820,$2=33635,q2=5131,tu=33640,eu=35899,nu=35902,ru=36269,iu=34042,As={};{const i=As;i[So]=Int8Array,i[ei]=Uint8Array,i[Yo]=Int16Array,i[wo]=Uint16Array,i[To]=Int32Array,i[Fo]=Uint32Array,i[Co]=Float32Array,i[Q2]=Uint16Array,i[D2]=Uint16Array,i[$2]=Uint16Array,i[q2]=Uint16Array,i[tu]=Uint32Array,i[eu]=Uint32Array,i[nu]=Uint32Array,i[ru]=Uint32Array,i[iu]=Uint32Array}function Lo(i){if(i instanceof Int8Array)return So;if(i instanceof Uint8Array||i instanceof Uint8ClampedArray)return ei;if(i instanceof Int16Array)return Yo;if(i instanceof Uint16Array)return wo;if(i instanceof Int32Array)return To;if(i instanceof Uint32Array)return Fo;if(i instanceof Float32Array)return Co;throw new Error("unsupported typed array type")}function js(i){if(i===Int8Array)return So;if(i===Uint8Array||i===Uint8ClampedArray)return ei;if(i===Int16Array)return Yo;if(i===Uint16Array)return wo;if(i===Int32Array)return To;if(i===Uint32Array)return Fo;if(i===Float32Array)return Co;throw new Error("unsupported typed array type")}function zs(i){const n=As[i];if(!n)throw new Error("unknown gl type");return n}const Mi=typeof SharedArrayBuffer<"u"?function(n){return n&&n.buffer&&(n.buffer instanceof ArrayBuffer||n.buffer instanceof SharedArrayBuffer)}:function(n){return n&&n.buffer&&n.buffer instanceof ArrayBuffer};function Os(...i){console.error(...i)}const Ps=new Map;function Ai(i,n){if(!i||typeof i!="object")return!1;let r=Ps.get(n);r||(r=new WeakMap,Ps.set(n,r));let f=r.get(i);if(f===void 0){const Z=Object.prototype.toString.call(i);f=Z.substring(8,Z.length-1)===n,r.set(i,f)}return f}function ou(i,n){return typeof WebGLBuffer<"u"&&Ai(n,"WebGLBuffer")}function su(i,n){return typeof WebGLRenderbuffer<"u"&&Ai(n,"WebGLRenderbuffer")}function Ho(i,n){return typeof WebGLTexture<"u"&&Ai(n,"WebGLTexture")}function lu(i,n){return typeof WebGLSampler<"u"&&Ai(n,"WebGLSampler")}const _s=35044,Vr=34962,cu=34963,uu=34660,au=5120,du=5121,hu=5122,fu=5123,mu=5124,pu=5125,Qs=5126,Ds={attribPrefix:""};function bu(i,n,r,f,Z){i.bindBuffer(n,r),i.bufferData(n,f,Z||_s)}function $s(i,n,r,f){if(ou(i,n))return n;r=r||Vr;const Z=i.createBuffer();return bu(i,r,Z,n,f),Z}function qs(i){return i==="indices"}function yu(i){return i===Int8Array||i===Uint8Array}function gu(i){return i.length?i:i.data}const Zu=/coord|texture/i,vu=/color|colour/i;function Gu(i,n){let r;if(Zu.test(i)?r=2:vu.test(i)?r=4:r=3,n%r>0)throw new Error(`Can not guess numComponents for attribute '${i}'. Tried ${r} but ${n} values is not evenly divisible by ${r}. You should specify it.`);return r}function Xu(i,n,r){return i.numComponents||i.size||Gu(n,r||gu(i).length)}function tl(i,n){if(Mi(i))return i;if(Mi(i.data))return i.data;Array.isArray(i)&&(i={data:i});let r=i.type?No(i.type):void 0;return r||(qs(n)?r=Uint16Array:r=Float32Array),new r(i.data)}function Wu(i){return typeof i=="number"?i:i?js(i):Qs}function No(i){return typeof i=="number"?zs(i):i||Float32Array}function Vu(i,n){return{buffer:n.buffer,numValues:2*3*4,type:Wu(n.type),arrayType:No(n.type)}}function Ru(i,n){const r=n.data||n,f=No(n.type),Z=r*f.BYTES_PER_ELEMENT,I=i.createBuffer();return i.bindBuffer(Vr,I),i.bufferData(Vr,Z,n.drawType||_s),{buffer:I,numValues:r,type:js(f),arrayType:f}}function xu(i,n,r){const f=tl(n,r);return{arrayType:f.constructor,buffer:$s(i,f,void 0,n.drawType),type:Lo(f),numValues:0}}function Iu(i,n){const r={};return Object.keys(n).forEach(function(f){if(!qs(f)){const Z=n[f],I=Z.attrib||Z.name||Z.attribName||Ds.attribPrefix+f;if(Z.value){if(!Array.isArray(Z.value)&&!Mi(Z.value))throw new Error("array.value is not array or typedarray");r[I]={value:Z.value}}else{let C;Z.buffer&&Z.buffer instanceof WebGLBuffer?C=Vu:typeof Z=="number"||typeof Z.data=="number"?C=Ru:C=xu;const{buffer:Y,type:N,numValues:et,arrayType:lt}=C(i,Z,f),pt=Z.normalize!==void 0?Z.normalize:yu(lt),wt=Xu(Z,f,et);r[I]={buffer:Y,numComponents:wt,type:N,normalize:pt,stride:Z.stride||0,offset:Z.offset||0,divisor:Z.divisor===void 0?void 0:Z.divisor,drawType:Z.drawType}}}}),i.bindBuffer(Vr,null),r}function Su(i,n){return n===au||n===du?1:n===hu||n===fu?2:n===mu||n===pu||n===Qs?4:0}const Jo=["position","positions","a_position"];function Yu(i,n){let r,f;for(f=0;f<Jo.length&&(r=Jo[f],!(r in n||(r=Ds.attribPrefix+r,r in n)));++f);f===Jo.length&&(r=Object.keys(n)[0]);const Z=n[r];if(!Z.buffer)return 1;i.bindBuffer(Vr,Z.buffer);const I=i.getBufferParameter(Vr,uu);i.bindBuffer(Vr,null);const C=Su(i,Z.type),Y=I/C,N=Z.numComponents||Z.size,et=Y/N;if(et%1!==0)throw new Error(`numComponents ${N} not correct for length ${length}`);return et}function wu(i,n,r){const f=Iu(i,n),Z=Object.assign({},r||{});Z.attribs=Object.assign({},r?r.attribs:{},f);const I=n.indices;if(I){const C=tl(I,"indices");Z.indices=$s(i,C,cu),Z.numElements=C.length,Z.elementType=Lo(C)}else Z.numElements||(Z.numElements=Yu(i,Z.attribs));return Z}function ni(i){return!!i.texStorage2D}const el=function(){const i={},n={};function r(f){const Z=f.constructor.name;if(!i[Z]){for(const I in f)if(typeof f[I]=="number"){const C=n[f[I]];n[f[I]]=C?`${C} | ${I}`:I}i[Z]=!0}}return function(Z,I){return r(Z),n[I]||(typeof I=="number"?`0x${I.toString(16)}`:I)}}(),dr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},ri=Mi,nl=function(){let i;return function(){return i=i||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),i}}(),rl=6406,er=6407,vn=6408,il=6409,ol=6410,ii=6402,sl=34041,ji=33071,Tu=9728,Fu=9729,hr=3553,fr=34067,Rr=32879,xr=35866,ko=34069,Cu=34070,Lu=34071,Hu=34072,Nu=34073,Ju=34074,Eo=10241,Uo=10240,zi=10242,Oi=10243,ll=32882,ku=33082,Eu=33083,Uu=33084,Bu=33085,Ku=34892,Mu=34893,Bo=3317,cl=3314,ul=32878,al=3316,dl=3315,hl=32877,Au=37443,ju=37441,zu=37440,Ou=33321,Pu=36756,_u=33325,Qu=33326,Du=33330,$u=33329,qu=33338,t1=33337,e1=33340,n1=33339,r1=33323,i1=36757,o1=33327,s1=33328,l1=33336,c1=33335,u1=33332,a1=33331,d1=33334,h1=33333,f1=32849,m1=35905,p1=36194,b1=36758,y1=35898,g1=35901,Z1=34843,v1=34837,G1=36221,X1=36239,W1=36215,V1=36233,R1=36209,x1=36227,I1=32856,S1=35907,Y1=36759,w1=32855,T1=32854,F1=32857,C1=34842,L1=34836,H1=36220,N1=36238,J1=36975,k1=36214,E1=36232,U1=36226,B1=36208,K1=33189,M1=33190,A1=36012,j1=36013,z1=35056,mr=5120,yn=5121,Pi=5122,Ur=5123,_i=5124,Ir=5125,Mn=5126,fl=32819,ml=32820,pl=33635,qn=5131,oi=36193,Ko=33640,O1=35899,P1=35902,_1=36269,Q1=34042,Qi=33319,Br=33320,Di=6403,Kr=36244,Mr=36248,Sr=36249;let Mo;function $i(i){if(!Mo){const n={};n[rl]={textureFormat:rl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[yn,qn,oi,Mn]},n[il]={textureFormat:il,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[yn,qn,oi,Mn]},n[ol]={textureFormat:ol,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[yn,qn,oi,Mn]},n[er]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[yn,qn,oi,Mn,pl]},n[vn]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[yn,qn,oi,Mn,fl,ml]},n[ii]={textureFormat:ii,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Ir,Ur]},n[Ou]={textureFormat:Di,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[yn]},n[Pu]={textureFormat:Di,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[mr]},n[_u]={textureFormat:Di,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[Mn,qn]},n[Qu]={textureFormat:Di,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[Mn]},n[Du]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[yn]},n[$u]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[mr]},n[u1]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Ur]},n[a1]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Pi]},n[d1]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ir]},n[h1]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[_i]},n[r1]={textureFormat:Qi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[yn]},n[i1]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[mr]},n[o1]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[Mn,qn]},n[s1]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[Mn]},n[l1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[yn]},n[c1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[mr]},n[qu]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ur]},n[t1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Pi]},n[e1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Ir]},n[n1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[_i]},n[f1]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[yn]},n[m1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[yn]},n[p1]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[yn,pl]},n[b1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[mr]},n[y1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Mn,qn,O1]},n[g1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Mn,qn,P1]},n[Z1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[Mn,qn]},n[v1]={textureFormat:er,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Mn]},n[G1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[yn]},n[X1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[mr]},n[W1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Ur]},n[V1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Pi]},n[R1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Ir]},n[x1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[_i]},n[I1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[yn]},n[S1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[yn]},n[Y1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[mr]},n[w1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[yn,ml,Ko]},n[T1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[yn,fl]},n[F1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Ko]},n[C1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[Mn,qn]},n[L1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[Mn]},n[H1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[yn]},n[N1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[mr]},n[J1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ko]},n[k1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Ur]},n[E1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Pi]},n[U1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[_i]},n[B1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Ir]},n[K1]={textureFormat:ii,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Ur,Ir]},n[M1]={textureFormat:ii,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ir]},n[A1]={textureFormat:ii,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Mn]},n[z1]={textureFormat:sl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Q1]},n[j1]={textureFormat:sl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[_1]},Object.keys(n).forEach(function(r){const f=n[r];f.bytesPerElementMap={},f.bytesPerElement.forEach(function(Z,I){const C=f.type[I];f.bytesPerElementMap[C]=Z})}),Mo=n}return Mo[i]}function D1(i,n){const r=$i(i);if(!r)throw"unknown internal format";const f=r.bytesPerElementMap[n];if(f===void 0)throw"unknown internal format";return f}function si(i){const n=$i(i);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function bl(i){return(i&i-1)===0}function $1(i,n,r,f){if(!ni(i))return bl(n)&&bl(r);const Z=$i(f);if(!Z)throw"unknown internal format";return Z.colorRenderable&&Z.textureFilterable}function q1(i){const n=$i(i);if(!n)throw"unknown internal format";return n.textureFilterable}function ta(i,n,r){return ri(n)?Lo(n):r||yn}function qi(i,n,r,f,Z){if(Z%1!==0)throw"can't guess dimensions";if(!r&&!f){const I=Math.sqrt(Z/(n===fr?6:1));I%1===0?(r=I,f=I):(r=Z,f=1)}else if(f){if(!r&&(r=Z/f,r%1))throw"can't guess dimensions"}else if(f=Z/r,f%1)throw"can't guess dimensions";return{width:r,height:f}}function Ar(i,n){n.colorspaceConversion!==void 0&&i.pixelStorei(Au,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&i.pixelStorei(ju,n.premultiplyAlpha),n.flipY!==void 0&&i.pixelStorei(zu,n.flipY)}function yl(i){i.pixelStorei(Bo,4),ni(i)&&(i.pixelStorei(cl,0),i.pixelStorei(ul,0),i.pixelStorei(al,0),i.pixelStorei(dl,0),i.pixelStorei(hl,0))}function ea(i,n,r,f){f.minMag&&(r.call(i,n,Eo,f.minMag),r.call(i,n,Uo,f.minMag)),f.min&&r.call(i,n,Eo,f.min),f.mag&&r.call(i,n,Uo,f.mag),f.wrap&&(r.call(i,n,zi,f.wrap),r.call(i,n,Oi,f.wrap),(n===Rr||lu(i,n))&&r.call(i,n,ll,f.wrap)),f.wrapR&&r.call(i,n,ll,f.wrapR),f.wrapS&&r.call(i,n,zi,f.wrapS),f.wrapT&&r.call(i,n,Oi,f.wrapT),f.minLod!==void 0&&r.call(i,n,ku,f.minLod),f.maxLod!==void 0&&r.call(i,n,Eu,f.maxLod),f.baseLevel!==void 0&&r.call(i,n,Uu,f.baseLevel),f.maxLevel!==void 0&&r.call(i,n,Bu,f.maxLevel),f.compareFunc!==void 0&&r.call(i,n,Mu,f.compareFunc),f.compareMode!==void 0&&r.call(i,n,Ku,f.compareMode)}function gl(i,n,r){const f=r.target||hr;i.bindTexture(f,n),ea(i,f,i.texParameteri,r)}function na(i){return i=i||dr.textureColor,ri(i)?i:new Uint8Array([i[0]*255,i[1]*255,i[2]*255,i[3]*255])}function Ao(i,n,r,f,Z,I){r=r||dr.textureOptions,I=I||vn;const C=r.target||hr;if(f=f||r.width,Z=Z||r.height,i.bindTexture(C,n),$1(i,f,Z,I))i.generateMipmap(C);else{const Y=q1(I)?Fu:Tu;i.texParameteri(C,Eo,Y),i.texParameteri(C,Uo,Y),i.texParameteri(C,zi,ji),i.texParameteri(C,Oi,ji)}}function li(i){return i.auto===!0||i.auto===void 0&&i.level===void 0}function jo(i,n){return n=n||{},n.cubeFaceOrder||[ko,Cu,Lu,Hu,Nu,Ju]}function zo(i,n){const f=jo(i,n).map(function(Z,I){return{face:Z,ndx:I}});return f.sort(function(Z,I){return Z.face-I.face}),f}function Zl(i,n,r,f){f=f||dr.textureOptions;const Z=f.target||hr,I=f.level||0;let C=r.width,Y=r.height;const N=f.internalFormat||f.format||vn,et=si(N),lt=f.format||et.format,pt=f.type||et.type;if(Ar(i,f),i.bindTexture(Z,n),Z===fr){const wt=r.width,Ft=r.height;let at,dt;if(wt/6===Ft)at=Ft,dt=[0,0,1,0,2,0,3,0,4,0,5,0];else if(Ft/6===wt)at=wt,dt=[0,0,0,1,0,2,0,3,0,4,0,5];else if(wt/3===Ft/2)at=wt/3,dt=[0,0,1,0,2,0,0,1,1,1,2,1];else if(wt/2===Ft/3)at=wt/2,dt=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(r.src?r.src:r.nodeName);const Bt=nl();Bt?(Bt.canvas.width=at,Bt.canvas.height=at,C=at,Y=at,zo(i,f).forEach(function(kt){const ee=dt[kt.ndx*2+0]*at,P=dt[kt.ndx*2+1]*at;Bt.drawImage(r,ee,P,at,at,0,0,at,at),i.texImage2D(kt.face,I,N,lt,pt,Bt.canvas)}),Bt.canvas.width=1,Bt.canvas.height=1):typeof createImageBitmap<"u"&&(C=at,Y=at,zo(i,f).forEach(function(kt){const ee=dt[kt.ndx*2+0]*at,P=dt[kt.ndx*2+1]*at;i.texImage2D(kt.face,I,N,at,at,0,lt,pt,null),createImageBitmap(r,ee,P,at,at,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(De){Ar(i,f),i.bindTexture(Z,n),i.texImage2D(kt.face,I,N,lt,pt,De),li(f)&&Ao(i,n,f,C,Y,N)})}))}else if(Z===Rr||Z===xr){const wt=Math.min(r.width,r.height),Ft=Math.max(r.width,r.height),at=Ft/wt;if(at%1!==0)throw"can not compute 3D dimensions of element";const dt=r.width===Ft?1:0,Bt=r.height===Ft?1:0;i.pixelStorei(Bo,1),i.pixelStorei(cl,r.width),i.pixelStorei(ul,0),i.pixelStorei(hl,0),i.texImage3D(Z,I,N,wt,wt,wt,0,lt,pt,null);for(let kt=0;kt<at;++kt){const ee=kt*wt*dt,P=kt*wt*Bt;i.pixelStorei(al,ee),i.pixelStorei(dl,P),i.texSubImage3D(Z,I,0,0,kt,wt,wt,1,lt,pt,r)}yl(i)}else i.texImage2D(Z,I,N,lt,pt,r);li(f)&&Ao(i,n,f,C,Y,N),gl(i,n,f)}function ci(){}function ra(i){if(typeof document<"u"){const n=document.createElement("a");return n.href=i,n.hostname===location.hostname&&n.port===location.port&&n.protocol===location.protocol}else{const n=new URL(location.href).origin;return new URL(i,location.href).origin===n}}function ia(i,n){return n===void 0&&!ra(i)?"anonymous":n}function oa(i,n,r){r=r||ci;let f;if(n=n!==void 0?n:dr.crossOrigin,n=ia(i,n),typeof Image<"u"){f=new Image,n!==void 0&&(f.crossOrigin=n);const Z=function(){f.removeEventListener("error",I),f.removeEventListener("load",C),f=null},I=function(){const N="couldn't load image: "+i;Os(N),r(N,f),Z()},C=function(){r(null,f),Z()};return f.addEventListener("error",I),f.addEventListener("load",C),f.src=i,f}else if(typeof ImageBitmap<"u"){let Z,I;const C=function(){r(Z,I)},Y={};n&&(Y.mode="cors"),fetch(i,Y).then(function(N){if(!N.ok)throw N;return N.blob()}).then(function(N){return createImageBitmap(N,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(N){I=N,setTimeout(C)}).catch(function(N){Z=N,setTimeout(C)}),f=null}return f}function vl(i){return typeof ImageBitmap<"u"&&i instanceof ImageBitmap||typeof ImageData<"u"&&i instanceof ImageData||typeof HTMLElement<"u"&&i instanceof HTMLElement}function Oo(i,n,r){return vl(i)?(setTimeout(function(){r(null,i)}),i):oa(i,n,r)}function Po(i,n,r){r=r||dr.textureOptions;const f=r.target||hr;if(i.bindTexture(f,n),r.color===!1)return;const Z=na(r.color);if(f===fr)for(let I=0;I<6;++I)i.texImage2D(ko+I,0,vn,1,1,0,vn,yn,Z);else f===Rr||f===xr?i.texImage3D(f,0,vn,1,1,1,0,vn,yn,Z):i.texImage2D(f,0,vn,1,1,0,vn,yn,Z)}function sa(i,n,r,f){return f=f||ci,r=r||dr.textureOptions,Po(i,n,r),r=Object.assign({},r),Oo(r.src,r.crossOrigin,function(I,C){I?f(I,n,C):(Zl(i,n,C,r),f(null,n,C))})}function la(i,n,r,f){f=f||ci;const Z=r.src;if(Z.length!==6)throw"there must be 6 urls for a cubemap";const I=r.level||0,C=r.internalFormat||r.format||vn,Y=si(C),N=r.format||Y.format,et=r.type||yn,lt=r.target||hr;if(lt!==fr)throw"target must be TEXTURE_CUBE_MAP";Po(i,n,r),r=Object.assign({},r);let pt=6;const wt=[],Ft=jo(i,r);let at;function dt(Bt){return function(kt,ee){--pt,kt?wt.push(kt):ee.width!==ee.height?wt.push("cubemap face img is not a square: "+ee.src):(Ar(i,r),i.bindTexture(lt,n),pt===5?jo().forEach(function(P){i.texImage2D(P,I,C,N,et,ee)}):i.texImage2D(Bt,I,C,N,et,ee),li(r)&&i.generateMipmap(lt)),pt===0&&f(wt.length?wt:void 0,n,at)}}at=Z.map(function(Bt,kt){return Oo(Bt,r.crossOrigin,dt(Ft[kt]))})}function ca(i,n,r,f){f=f||ci;const Z=r.src,I=r.internalFormat||r.format||vn,C=si(I),Y=r.format||C.format,N=r.type||yn,et=r.target||xr;if(et!==Rr&&et!==xr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";Po(i,n,r),r=Object.assign({},r);let lt=Z.length;const pt=[];let wt;const Ft=r.level||0;let at=r.width,dt=r.height;const Bt=Z.length;let kt=!0;function ee(P){return function(De,je){if(--lt,De)pt.push(De);else{if(Ar(i,r),i.bindTexture(et,n),kt){kt=!1,at=r.width||je.width,dt=r.height||je.height,i.texImage3D(et,Ft,I,at,dt,Bt,0,Y,N,null);for(let We=0;We<Bt;++We)i.texSubImage3D(et,Ft,0,0,We,at,dt,1,Y,N,je)}else{let We=je,jt;(je.width!==at||je.height!==dt)&&(jt=nl(),We=jt.canvas,jt.canvas.width=at,jt.canvas.height=dt,jt.drawImage(je,0,0,at,dt)),i.texSubImage3D(et,Ft,0,0,P,at,dt,1,Y,N,We),jt&&We===jt.canvas&&(jt.canvas.width=0,jt.canvas.height=0)}li(r)&&i.generateMipmap(et)}lt===0&&f(pt.length?pt:void 0,n,wt)}}wt=Z.map(function(P,De){return Oo(P,r.crossOrigin,ee(De))})}function ua(i,n,r,f){f=f||dr.textureOptions;const Z=f.target||hr;i.bindTexture(Z,n);let I=f.width,C=f.height,Y=f.depth;const N=f.level||0,et=f.internalFormat||f.format||vn,lt=si(et),pt=f.format||lt.format,wt=f.type||ta(i,r,lt.type);if(ri(r))r instanceof Uint8ClampedArray&&(r=new Uint8Array(r.buffer));else{const Bt=zs(wt);r=new Bt(r)}const Ft=D1(et,wt),at=r.byteLength/Ft;if(at%1)throw"length wrong size for format: "+el(i,pt);let dt;if(Z===Rr||Z===xr)if(!I&&!C&&!Y){const Bt=Math.cbrt(at);if(Bt%1!==0)throw"can't guess cube size of array of numElements: "+at;I=Bt,C=Bt,Y=Bt}else I&&(!C||!Y)?(dt=qi(i,Z,C,Y,at/I),C=dt.width,Y=dt.height):C&&(!I||!Y)?(dt=qi(i,Z,I,Y,at/C),I=dt.width,Y=dt.height):(dt=qi(i,Z,I,C,at/Y),I=dt.width,C=dt.height);else dt=qi(i,Z,I,C,at),I=dt.width,C=dt.height;if(yl(i),i.pixelStorei(Bo,f.unpackAlignment||1),Ar(i,f),Z===fr){const Bt=Ft/r.BYTES_PER_ELEMENT,kt=at/6*Bt;zo(i,f).forEach(ee=>{const P=kt*ee.ndx,De=r.subarray(P,P+kt);i.texImage2D(ee.face,N,et,I,C,0,pt,wt,De)})}else Z===Rr||Z===xr?i.texImage3D(Z,N,et,I,C,Y,0,pt,wt,r):i.texImage2D(Z,N,et,I,C,0,pt,wt,r);return{width:I,height:C,depth:Y,type:wt}}function aa(i,n,r){const f=r.target||hr;i.bindTexture(f,n);const Z=r.level||0,I=r.internalFormat||r.format||vn,C=si(I),Y=r.format||C.format,N=r.type||C.type;if(Ar(i,r),f===fr)for(let et=0;et<6;++et)i.texImage2D(ko+et,Z,I,r.width,r.height,0,Y,N,null);else f===Rr||f===xr?i.texImage3D(f,Z,I,r.width,r.height,r.depth,0,Y,N,null):i.texImage2D(f,Z,I,r.width,r.height,0,Y,N,null)}function Gl(i,n,r){r=r||ci,n=n||dr.textureOptions;const f=i.createTexture(),Z=n.target||hr;let I=n.width||1,C=n.height||1;const Y=n.internalFormat||vn;i.bindTexture(Z,f),Z===fr&&(i.texParameteri(Z,zi,ji),i.texParameteri(Z,Oi,ji));let N=n.src;if(N)if(typeof N=="function"&&(N=N(i,n)),typeof N=="string")sa(i,f,n,r);else if(ri(N)||Array.isArray(N)&&(typeof N[0]=="number"||Array.isArray(N[0])||ri(N[0]))){const et=ua(i,f,N,n);I=et.width,C=et.height}else Array.isArray(N)&&(typeof N[0]=="string"||vl(N[0]))?Z===fr?la(i,f,n,r):ca(i,f,n,r):(Zl(i,f,N,n),I=N.width,C=N.height);else aa(i,f,n);return li(n)&&Ao(i,f,n,I,C,Y),gl(i,f,n),f}const _o=Os;function Xl(i){return typeof document<"u"&&document.getElementById?document.getElementById(i):null}const to=33984,eo=34962,da=34963,ha=35713,fa=35714,ma=35632,pa=35633,ba=35981,Wl=35718,ya=35721,ga=35971,Za=35382,va=35396,Ga=35398,Xa=35392,Wa=35395,no=5126,Vl=35664,Rl=35665,xl=35666,Qo=5124,Il=35667,Sl=35668,Yl=35669,wl=35670,Tl=35671,Fl=35672,Cl=35673,Ll=35674,Hl=35675,Nl=35676,Va=35678,Ra=35680,xa=35679,Ia=35682,Sa=35685,Ya=35686,wa=35687,Ta=35688,Fa=35689,Ca=35690,La=36289,Ha=36292,Na=36293,Do=5125,Jl=36294,kl=36295,El=36296,Ja=36298,ka=36299,Ea=36300,Ua=36303,Ba=36306,Ka=36307,Ma=36308,Aa=36311,ro=3553,io=34067,$o=32879,oo=35866,be={};function Ul(i,n){return be[n].bindPoint}function ja(i,n){return function(r){i.uniform1f(n,r)}}function za(i,n){return function(r){i.uniform1fv(n,r)}}function Oa(i,n){return function(r){i.uniform2fv(n,r)}}function Pa(i,n){return function(r){i.uniform3fv(n,r)}}function _a(i,n){return function(r){i.uniform4fv(n,r)}}function Bl(i,n){return function(r){i.uniform1i(n,r)}}function Kl(i,n){return function(r){i.uniform1iv(n,r)}}function Ml(i,n){return function(r){i.uniform2iv(n,r)}}function Al(i,n){return function(r){i.uniform3iv(n,r)}}function jl(i,n){return function(r){i.uniform4iv(n,r)}}function Qa(i,n){return function(r){i.uniform1ui(n,r)}}function Da(i,n){return function(r){i.uniform1uiv(n,r)}}function $a(i,n){return function(r){i.uniform2uiv(n,r)}}function qa(i,n){return function(r){i.uniform3uiv(n,r)}}function t0(i,n){return function(r){i.uniform4uiv(n,r)}}function e0(i,n){return function(r){i.uniformMatrix2fv(n,!1,r)}}function n0(i,n){return function(r){i.uniformMatrix3fv(n,!1,r)}}function r0(i,n){return function(r){i.uniformMatrix4fv(n,!1,r)}}function i0(i,n){return function(r){i.uniformMatrix2x3fv(n,!1,r)}}function o0(i,n){return function(r){i.uniformMatrix3x2fv(n,!1,r)}}function s0(i,n){return function(r){i.uniformMatrix2x4fv(n,!1,r)}}function l0(i,n){return function(r){i.uniformMatrix4x2fv(n,!1,r)}}function c0(i,n){return function(r){i.uniformMatrix3x4fv(n,!1,r)}}function u0(i,n){return function(r){i.uniformMatrix4x3fv(n,!1,r)}}function On(i,n,r,f){const Z=Ul(i,n);return ni(i)?function(I){let C,Y;!I||Ho(i,I)?(C=I,Y=null):(C=I.texture,Y=I.sampler),i.uniform1i(f,r),i.activeTexture(to+r),i.bindTexture(Z,C),i.bindSampler(r,Y)}:function(I){i.uniform1i(f,r),i.activeTexture(to+r),i.bindTexture(Z,I)}}function Pn(i,n,r,f,Z){const I=Ul(i,n),C=new Int32Array(Z);for(let Y=0;Y<Z;++Y)C[Y]=r+Y;return ni(i)?function(Y){i.uniform1iv(f,C),Y.forEach(function(N,et){i.activeTexture(to+C[et]);let lt,pt;!N||Ho(i,N)?(lt=N,pt=null):(lt=N.texture,pt=N.sampler),i.bindSampler(r,pt),i.bindTexture(I,lt)})}:function(Y){i.uniform1iv(f,C),Y.forEach(function(N,et){i.activeTexture(to+C[et]),i.bindTexture(I,N)})}}be[no]={Type:Float32Array,size:4,setter:ja,arraySetter:za},be[Vl]={Type:Float32Array,size:8,setter:Oa,cols:2},be[Rl]={Type:Float32Array,size:12,setter:Pa,cols:3},be[xl]={Type:Float32Array,size:16,setter:_a,cols:4},be[Qo]={Type:Int32Array,size:4,setter:Bl,arraySetter:Kl},be[Il]={Type:Int32Array,size:8,setter:Ml,cols:2},be[Sl]={Type:Int32Array,size:12,setter:Al,cols:3},be[Yl]={Type:Int32Array,size:16,setter:jl,cols:4},be[Do]={Type:Uint32Array,size:4,setter:Qa,arraySetter:Da},be[Jl]={Type:Uint32Array,size:8,setter:$a,cols:2},be[kl]={Type:Uint32Array,size:12,setter:qa,cols:3},be[El]={Type:Uint32Array,size:16,setter:t0,cols:4},be[wl]={Type:Uint32Array,size:4,setter:Bl,arraySetter:Kl},be[Tl]={Type:Uint32Array,size:8,setter:Ml,cols:2},be[Fl]={Type:Uint32Array,size:12,setter:Al,cols:3},be[Cl]={Type:Uint32Array,size:16,setter:jl,cols:4},be[Ll]={Type:Float32Array,size:32,setter:e0,rows:2,cols:2},be[Hl]={Type:Float32Array,size:48,setter:n0,rows:3,cols:3},be[Nl]={Type:Float32Array,size:64,setter:r0,rows:4,cols:4},be[Sa]={Type:Float32Array,size:32,setter:i0,rows:2,cols:3},be[Ya]={Type:Float32Array,size:32,setter:s0,rows:2,cols:4},be[wa]={Type:Float32Array,size:48,setter:o0,rows:3,cols:2},be[Ta]={Type:Float32Array,size:48,setter:c0,rows:3,cols:4},be[Fa]={Type:Float32Array,size:64,setter:l0,rows:4,cols:2},be[Ca]={Type:Float32Array,size:64,setter:u0,rows:4,cols:3},be[Va]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ro},be[Ra]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:io},be[xa]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:$o},be[Ia]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ro},be[La]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo},be[Ha]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo},be[Na]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:io},be[Ja]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ro},be[ka]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:$o},be[Ea]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:io},be[Ua]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo},be[Ba]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ro},be[Ka]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:$o},be[Ma]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:io},be[Aa]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo};function so(i,n){return function(r){if(r.value)switch(i.disableVertexAttribArray(n),r.value.length){case 4:i.vertexAttrib4fv(n,r.value);break;case 3:i.vertexAttrib3fv(n,r.value);break;case 2:i.vertexAttrib2fv(n,r.value);break;case 1:i.vertexAttrib1fv(n,r.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else i.bindBuffer(eo,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribPointer(n,r.numComponents||r.size,r.type||no,r.normalize||!1,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function pr(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4iv(n,r.value);else throw new Error("The length of an integer constant value must be 4!");else i.bindBuffer(eo,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Qo,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function lo(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4uiv(n,r.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else i.bindBuffer(eo,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Do,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function qo(i,n,r){const f=r.size,Z=r.count;return function(I){i.bindBuffer(eo,I.buffer);const C=I.size||I.numComponents||f,Y=C/Z,N=I.type||no,lt=be[N].size*C,pt=I.normalize||!1,wt=I.offset||0,Ft=lt/Z;for(let at=0;at<Z;++at)i.enableVertexAttribArray(n+at),i.vertexAttribPointer(n+at,Y,N,pt,lt,wt+Ft*at),i.vertexAttribDivisor&&i.vertexAttribDivisor(n+at,I.divisor||0)}}const Tn={};Tn[no]={size:4,setter:so},Tn[Vl]={size:8,setter:so},Tn[Rl]={size:12,setter:so},Tn[xl]={size:16,setter:so},Tn[Qo]={size:4,setter:pr},Tn[Il]={size:8,setter:pr},Tn[Sl]={size:12,setter:pr},Tn[Yl]={size:16,setter:pr},Tn[Do]={size:4,setter:lo},Tn[Jl]={size:8,setter:lo},Tn[kl]={size:12,setter:lo},Tn[El]={size:16,setter:lo},Tn[wl]={size:4,setter:pr},Tn[Tl]={size:8,setter:pr},Tn[Fl]={size:12,setter:pr},Tn[Cl]={size:16,setter:pr},Tn[Ll]={size:4,setter:qo,count:2},Tn[Hl]={size:9,setter:qo,count:3},Tn[Nl]={size:16,setter:qo,count:4};const a0=/ERROR:\s*\d+:(\d+)/gi;function d0(i,n="",r=0){const f=[...n.matchAll(a0)],Z=new Map(f.map((I,C)=>{const Y=parseInt(I[1]),N=f[C+1],et=N?N.index:n.length,lt=n.substring(I.index,et);return[Y-1,lt]}));return i.split(`
|
|
126
|
-
`).map((I,
|
|
125
|
+
see: http://github.com/greggman/twgl.js for details */const So=5120,ei=5121,To=5122,Yo=5123,wo=5124,Lo=5125,Fo=5126,Qc=32819,Dc=32820,$c=33635,qc=5131,tu=33640,eu=35899,nu=35902,ru=36269,iu=34042,As={};{const i=As;i[So]=Int8Array,i[ei]=Uint8Array,i[To]=Int16Array,i[Yo]=Uint16Array,i[wo]=Int32Array,i[Lo]=Uint32Array,i[Fo]=Float32Array,i[Qc]=Uint16Array,i[Dc]=Uint16Array,i[$c]=Uint16Array,i[qc]=Uint16Array,i[tu]=Uint32Array,i[eu]=Uint32Array,i[nu]=Uint32Array,i[ru]=Uint32Array,i[iu]=Uint32Array}function Co(i){if(i instanceof Int8Array)return So;if(i instanceof Uint8Array||i instanceof Uint8ClampedArray)return ei;if(i instanceof Int16Array)return To;if(i instanceof Uint16Array)return Yo;if(i instanceof Int32Array)return wo;if(i instanceof Uint32Array)return Lo;if(i instanceof Float32Array)return Fo;throw new Error("unsupported typed array type")}function zs(i){if(i===Int8Array)return So;if(i===Uint8Array||i===Uint8ClampedArray)return ei;if(i===Int16Array)return To;if(i===Uint16Array)return Yo;if(i===Int32Array)return wo;if(i===Uint32Array)return Lo;if(i===Float32Array)return Fo;throw new Error("unsupported typed array type")}function js(i){const n=As[i];if(!n)throw new Error("unknown gl type");return n}const Mi=typeof SharedArrayBuffer<"u"?function(n){return n&&n.buffer&&(n.buffer instanceof ArrayBuffer||n.buffer instanceof SharedArrayBuffer)}:function(n){return n&&n.buffer&&n.buffer instanceof ArrayBuffer};function Os(...i){console.error(...i)}const Ps=new Map;function Ai(i,n){if(!i||typeof i!="object")return!1;let r=Ps.get(n);r||(r=new WeakMap,Ps.set(n,r));let f=r.get(i);if(f===void 0){const Z=Object.prototype.toString.call(i);f=Z.substring(8,Z.length-1)===n,r.set(i,f)}return f}function ou(i,n){return typeof WebGLBuffer<"u"&&Ai(n,"WebGLBuffer")}function su(i,n){return typeof WebGLRenderbuffer<"u"&&Ai(n,"WebGLRenderbuffer")}function Ho(i,n){return typeof WebGLTexture<"u"&&Ai(n,"WebGLTexture")}function lu(i,n){return typeof WebGLSampler<"u"&&Ai(n,"WebGLSampler")}const _s=35044,Vr=34962,cu=34963,uu=34660,au=5120,du=5121,hu=5122,fu=5123,mu=5124,pu=5125,Qs=5126,Ds={attribPrefix:""};function bu(i,n,r,f,Z){i.bindBuffer(n,r),i.bufferData(n,f,Z||_s)}function $s(i,n,r,f){if(ou(i,n))return n;r=r||Vr;const Z=i.createBuffer();return bu(i,r,Z,n,f),Z}function qs(i){return i==="indices"}function yu(i){return i===Int8Array||i===Uint8Array}function gu(i){return i.length?i:i.data}const Zu=/coord|texture/i,vu=/color|colour/i;function Gu(i,n){let r;if(Zu.test(i)?r=2:vu.test(i)?r=4:r=3,n%r>0)throw new Error(`Can not guess numComponents for attribute '${i}'. Tried ${r} but ${n} values is not evenly divisible by ${r}. You should specify it.`);return r}function Xu(i,n,r){return i.numComponents||i.size||Gu(n,r||gu(i).length)}function tl(i,n){if(Mi(i))return i;if(Mi(i.data))return i.data;Array.isArray(i)&&(i={data:i});let r=i.type?Jo(i.type):void 0;return r||(qs(n)?r=Uint16Array:r=Float32Array),new r(i.data)}function Wu(i){return typeof i=="number"?i:i?zs(i):Qs}function Jo(i){return typeof i=="number"?js(i):i||Float32Array}function Vu(i,n){return{buffer:n.buffer,numValues:2*3*4,type:Wu(n.type),arrayType:Jo(n.type)}}function Ru(i,n){const r=n.data||n,f=Jo(n.type),Z=r*f.BYTES_PER_ELEMENT,I=i.createBuffer();return i.bindBuffer(Vr,I),i.bufferData(Vr,Z,n.drawType||_s),{buffer:I,numValues:r,type:zs(f),arrayType:f}}function xu(i,n,r){const f=tl(n,r);return{arrayType:f.constructor,buffer:$s(i,f,void 0,n.drawType),type:Co(f),numValues:0}}function Iu(i,n){const r={};return Object.keys(n).forEach(function(f){if(!qs(f)){const Z=n[f],I=Z.attrib||Z.name||Z.attribName||Ds.attribPrefix+f;if(Z.value){if(!Array.isArray(Z.value)&&!Mi(Z.value))throw new Error("array.value is not array or typedarray");r[I]={value:Z.value}}else{let F;Z.buffer&&Z.buffer instanceof WebGLBuffer?F=Vu:typeof Z=="number"||typeof Z.data=="number"?F=Ru:F=xu;const{buffer:T,type:J,numValues:et,arrayType:lt}=F(i,Z,f),pt=Z.normalize!==void 0?Z.normalize:yu(lt),Yt=Xu(Z,f,et);r[I]={buffer:T,numComponents:Yt,type:J,normalize:pt,stride:Z.stride||0,offset:Z.offset||0,divisor:Z.divisor===void 0?void 0:Z.divisor,drawType:Z.drawType}}}}),i.bindBuffer(Vr,null),r}function Su(i,n){return n===au||n===du?1:n===hu||n===fu?2:n===mu||n===pu||n===Qs?4:0}const No=["position","positions","a_position"];function Tu(i,n){let r,f;for(f=0;f<No.length&&(r=No[f],!(r in n||(r=Ds.attribPrefix+r,r in n)));++f);f===No.length&&(r=Object.keys(n)[0]);const Z=n[r];if(!Z.buffer)return 1;i.bindBuffer(Vr,Z.buffer);const I=i.getBufferParameter(Vr,uu);i.bindBuffer(Vr,null);const F=Su(i,Z.type),T=I/F,J=Z.numComponents||Z.size,et=T/J;if(et%1!==0)throw new Error(`numComponents ${J} not correct for length ${length}`);return et}function Yu(i,n,r){const f=Iu(i,n),Z=Object.assign({},r||{});Z.attribs=Object.assign({},r?r.attribs:{},f);const I=n.indices;if(I){const F=tl(I,"indices");Z.indices=$s(i,F,cu),Z.numElements=F.length,Z.elementType=Co(F)}else Z.numElements||(Z.numElements=Tu(i,Z.attribs));return Z}function ni(i){return!!i.texStorage2D}const el=function(){const i={},n={};function r(f){const Z=f.constructor.name;if(!i[Z]){for(const I in f)if(typeof f[I]=="number"){const F=n[f[I]];n[f[I]]=F?`${F} | ${I}`:I}i[Z]=!0}}return function(Z,I){return r(Z),n[I]||(typeof I=="number"?`0x${I.toString(16)}`:I)}}(),dr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},ri=Mi,nl=function(){let i;return function(){return i=i||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),i}}(),rl=6406,er=6407,vn=6408,il=6409,ol=6410,ii=6402,sl=34041,zi=33071,wu=9728,Lu=9729,hr=3553,fr=34067,Rr=32879,xr=35866,ko=34069,Fu=34070,Cu=34071,Hu=34072,Ju=34073,Nu=34074,Eo=10241,Uo=10240,ji=10242,Oi=10243,ll=32882,ku=33082,Eu=33083,Uu=33084,Bu=33085,Ku=34892,Mu=34893,Bo=3317,cl=3314,ul=32878,al=3316,dl=3315,hl=32877,Au=37443,zu=37441,ju=37440,Ou=33321,Pu=36756,_u=33325,Qu=33326,Du=33330,$u=33329,qu=33338,t1=33337,e1=33340,n1=33339,r1=33323,i1=36757,o1=33327,s1=33328,l1=33336,c1=33335,u1=33332,a1=33331,d1=33334,h1=33333,f1=32849,m1=35905,p1=36194,b1=36758,y1=35898,g1=35901,Z1=34843,v1=34837,G1=36221,X1=36239,W1=36215,V1=36233,R1=36209,x1=36227,I1=32856,S1=35907,T1=36759,Y1=32855,w1=32854,L1=32857,F1=34842,C1=34836,H1=36220,J1=36238,N1=36975,k1=36214,E1=36232,U1=36226,B1=36208,K1=33189,M1=33190,A1=36012,z1=36013,j1=35056,mr=5120,yn=5121,Pi=5122,Ur=5123,_i=5124,Ir=5125,Mn=5126,fl=32819,ml=32820,pl=33635,qn=5131,oi=36193,Ko=33640,O1=35899,P1=35902,_1=36269,Q1=34042,Qi=33319,Br=33320,Di=6403,Kr=36244,Mr=36248,Sr=36249;let Mo;function $i(i){if(!Mo){const n={};n[rl]={textureFormat:rl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[yn,qn,oi,Mn]},n[il]={textureFormat:il,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[yn,qn,oi,Mn]},n[ol]={textureFormat:ol,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[yn,qn,oi,Mn]},n[er]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[yn,qn,oi,Mn,pl]},n[vn]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[yn,qn,oi,Mn,fl,ml]},n[ii]={textureFormat:ii,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Ir,Ur]},n[Ou]={textureFormat:Di,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[yn]},n[Pu]={textureFormat:Di,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[mr]},n[_u]={textureFormat:Di,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[Mn,qn]},n[Qu]={textureFormat:Di,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[Mn]},n[Du]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[yn]},n[$u]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[mr]},n[u1]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Ur]},n[a1]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Pi]},n[d1]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ir]},n[h1]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[_i]},n[r1]={textureFormat:Qi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[yn]},n[i1]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[mr]},n[o1]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[Mn,qn]},n[s1]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[Mn]},n[l1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[yn]},n[c1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[mr]},n[qu]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ur]},n[t1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Pi]},n[e1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Ir]},n[n1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[_i]},n[f1]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[yn]},n[m1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[yn]},n[p1]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[yn,pl]},n[b1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[mr]},n[y1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Mn,qn,O1]},n[g1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Mn,qn,P1]},n[Z1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[Mn,qn]},n[v1]={textureFormat:er,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Mn]},n[G1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[yn]},n[X1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[mr]},n[W1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Ur]},n[V1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Pi]},n[R1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Ir]},n[x1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[_i]},n[I1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[yn]},n[S1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[yn]},n[T1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[mr]},n[Y1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[yn,ml,Ko]},n[w1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[yn,fl]},n[L1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Ko]},n[F1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[Mn,qn]},n[C1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[Mn]},n[H1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[yn]},n[J1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[mr]},n[N1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ko]},n[k1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Ur]},n[E1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Pi]},n[U1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[_i]},n[B1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Ir]},n[K1]={textureFormat:ii,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Ur,Ir]},n[M1]={textureFormat:ii,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ir]},n[A1]={textureFormat:ii,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Mn]},n[j1]={textureFormat:sl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Q1]},n[z1]={textureFormat:sl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[_1]},Object.keys(n).forEach(function(r){const f=n[r];f.bytesPerElementMap={},f.bytesPerElement.forEach(function(Z,I){const F=f.type[I];f.bytesPerElementMap[F]=Z})}),Mo=n}return Mo[i]}function D1(i,n){const r=$i(i);if(!r)throw"unknown internal format";const f=r.bytesPerElementMap[n];if(f===void 0)throw"unknown internal format";return f}function si(i){const n=$i(i);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function bl(i){return(i&i-1)===0}function $1(i,n,r,f){if(!ni(i))return bl(n)&&bl(r);const Z=$i(f);if(!Z)throw"unknown internal format";return Z.colorRenderable&&Z.textureFilterable}function q1(i){const n=$i(i);if(!n)throw"unknown internal format";return n.textureFilterable}function ta(i,n,r){return ri(n)?Co(n):r||yn}function qi(i,n,r,f,Z){if(Z%1!==0)throw"can't guess dimensions";if(!r&&!f){const I=Math.sqrt(Z/(n===fr?6:1));I%1===0?(r=I,f=I):(r=Z,f=1)}else if(f){if(!r&&(r=Z/f,r%1))throw"can't guess dimensions"}else if(f=Z/r,f%1)throw"can't guess dimensions";return{width:r,height:f}}function Ar(i,n){n.colorspaceConversion!==void 0&&i.pixelStorei(Au,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&i.pixelStorei(zu,n.premultiplyAlpha),n.flipY!==void 0&&i.pixelStorei(ju,n.flipY)}function yl(i){i.pixelStorei(Bo,4),ni(i)&&(i.pixelStorei(cl,0),i.pixelStorei(ul,0),i.pixelStorei(al,0),i.pixelStorei(dl,0),i.pixelStorei(hl,0))}function ea(i,n,r,f){f.minMag&&(r.call(i,n,Eo,f.minMag),r.call(i,n,Uo,f.minMag)),f.min&&r.call(i,n,Eo,f.min),f.mag&&r.call(i,n,Uo,f.mag),f.wrap&&(r.call(i,n,ji,f.wrap),r.call(i,n,Oi,f.wrap),(n===Rr||lu(i,n))&&r.call(i,n,ll,f.wrap)),f.wrapR&&r.call(i,n,ll,f.wrapR),f.wrapS&&r.call(i,n,ji,f.wrapS),f.wrapT&&r.call(i,n,Oi,f.wrapT),f.minLod!==void 0&&r.call(i,n,ku,f.minLod),f.maxLod!==void 0&&r.call(i,n,Eu,f.maxLod),f.baseLevel!==void 0&&r.call(i,n,Uu,f.baseLevel),f.maxLevel!==void 0&&r.call(i,n,Bu,f.maxLevel),f.compareFunc!==void 0&&r.call(i,n,Mu,f.compareFunc),f.compareMode!==void 0&&r.call(i,n,Ku,f.compareMode)}function gl(i,n,r){const f=r.target||hr;i.bindTexture(f,n),ea(i,f,i.texParameteri,r)}function na(i){return i=i||dr.textureColor,ri(i)?i:new Uint8Array([i[0]*255,i[1]*255,i[2]*255,i[3]*255])}function Ao(i,n,r,f,Z,I){r=r||dr.textureOptions,I=I||vn;const F=r.target||hr;if(f=f||r.width,Z=Z||r.height,i.bindTexture(F,n),$1(i,f,Z,I))i.generateMipmap(F);else{const T=q1(I)?Lu:wu;i.texParameteri(F,Eo,T),i.texParameteri(F,Uo,T),i.texParameteri(F,ji,zi),i.texParameteri(F,Oi,zi)}}function li(i){return i.auto===!0||i.auto===void 0&&i.level===void 0}function zo(i,n){return n=n||{},n.cubeFaceOrder||[ko,Fu,Cu,Hu,Ju,Nu]}function jo(i,n){const f=zo(i,n).map(function(Z,I){return{face:Z,ndx:I}});return f.sort(function(Z,I){return Z.face-I.face}),f}function Zl(i,n,r,f){f=f||dr.textureOptions;const Z=f.target||hr,I=f.level||0;let F=r.width,T=r.height;const J=f.internalFormat||f.format||vn,et=si(J),lt=f.format||et.format,pt=f.type||et.type;if(Ar(i,f),i.bindTexture(Z,n),Z===fr){const Yt=r.width,Lt=r.height;let at,dt;if(Yt/6===Lt)at=Lt,dt=[0,0,1,0,2,0,3,0,4,0,5,0];else if(Lt/6===Yt)at=Yt,dt=[0,0,0,1,0,2,0,3,0,4,0,5];else if(Yt/3===Lt/2)at=Yt/3,dt=[0,0,1,0,2,0,0,1,1,1,2,1];else if(Yt/2===Lt/3)at=Yt/2,dt=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(r.src?r.src:r.nodeName);const Bt=nl();Bt?(Bt.canvas.width=at,Bt.canvas.height=at,F=at,T=at,jo(i,f).forEach(function(kt){const ee=dt[kt.ndx*2+0]*at,P=dt[kt.ndx*2+1]*at;Bt.drawImage(r,ee,P,at,at,0,0,at,at),i.texImage2D(kt.face,I,J,lt,pt,Bt.canvas)}),Bt.canvas.width=1,Bt.canvas.height=1):typeof createImageBitmap<"u"&&(F=at,T=at,jo(i,f).forEach(function(kt){const ee=dt[kt.ndx*2+0]*at,P=dt[kt.ndx*2+1]*at;i.texImage2D(kt.face,I,J,at,at,0,lt,pt,null),createImageBitmap(r,ee,P,at,at,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(De){Ar(i,f),i.bindTexture(Z,n),i.texImage2D(kt.face,I,J,lt,pt,De),li(f)&&Ao(i,n,f,F,T,J)})}))}else if(Z===Rr||Z===xr){const Yt=Math.min(r.width,r.height),Lt=Math.max(r.width,r.height),at=Lt/Yt;if(at%1!==0)throw"can not compute 3D dimensions of element";const dt=r.width===Lt?1:0,Bt=r.height===Lt?1:0;i.pixelStorei(Bo,1),i.pixelStorei(cl,r.width),i.pixelStorei(ul,0),i.pixelStorei(hl,0),i.texImage3D(Z,I,J,Yt,Yt,Yt,0,lt,pt,null);for(let kt=0;kt<at;++kt){const ee=kt*Yt*dt,P=kt*Yt*Bt;i.pixelStorei(al,ee),i.pixelStorei(dl,P),i.texSubImage3D(Z,I,0,0,kt,Yt,Yt,1,lt,pt,r)}yl(i)}else i.texImage2D(Z,I,J,lt,pt,r);li(f)&&Ao(i,n,f,F,T,J),gl(i,n,f)}function ci(){}function ra(i){if(typeof document<"u"){const n=document.createElement("a");return n.href=i,n.hostname===location.hostname&&n.port===location.port&&n.protocol===location.protocol}else{const n=new URL(location.href).origin;return new URL(i,location.href).origin===n}}function ia(i,n){return n===void 0&&!ra(i)?"anonymous":n}function oa(i,n,r){r=r||ci;let f;if(n=n!==void 0?n:dr.crossOrigin,n=ia(i,n),typeof Image<"u"){f=new Image,n!==void 0&&(f.crossOrigin=n);const Z=function(){f.removeEventListener("error",I),f.removeEventListener("load",F),f=null},I=function(){const J="couldn't load image: "+i;Os(J),r(J,f),Z()},F=function(){r(null,f),Z()};return f.addEventListener("error",I),f.addEventListener("load",F),f.src=i,f}else if(typeof ImageBitmap<"u"){let Z,I;const F=function(){r(Z,I)},T={};n&&(T.mode="cors"),fetch(i,T).then(function(J){if(!J.ok)throw J;return J.blob()}).then(function(J){return createImageBitmap(J,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(J){I=J,setTimeout(F)}).catch(function(J){Z=J,setTimeout(F)}),f=null}return f}function vl(i){return typeof ImageBitmap<"u"&&i instanceof ImageBitmap||typeof ImageData<"u"&&i instanceof ImageData||typeof HTMLElement<"u"&&i instanceof HTMLElement}function Oo(i,n,r){return vl(i)?(setTimeout(function(){r(null,i)}),i):oa(i,n,r)}function Po(i,n,r){r=r||dr.textureOptions;const f=r.target||hr;if(i.bindTexture(f,n),r.color===!1)return;const Z=na(r.color);if(f===fr)for(let I=0;I<6;++I)i.texImage2D(ko+I,0,vn,1,1,0,vn,yn,Z);else f===Rr||f===xr?i.texImage3D(f,0,vn,1,1,1,0,vn,yn,Z):i.texImage2D(f,0,vn,1,1,0,vn,yn,Z)}function sa(i,n,r,f){return f=f||ci,r=r||dr.textureOptions,Po(i,n,r),r=Object.assign({},r),Oo(r.src,r.crossOrigin,function(I,F){I?f(I,n,F):(Zl(i,n,F,r),f(null,n,F))})}function la(i,n,r,f){f=f||ci;const Z=r.src;if(Z.length!==6)throw"there must be 6 urls for a cubemap";const I=r.level||0,F=r.internalFormat||r.format||vn,T=si(F),J=r.format||T.format,et=r.type||yn,lt=r.target||hr;if(lt!==fr)throw"target must be TEXTURE_CUBE_MAP";Po(i,n,r),r=Object.assign({},r);let pt=6;const Yt=[],Lt=zo(i,r);let at;function dt(Bt){return function(kt,ee){--pt,kt?Yt.push(kt):ee.width!==ee.height?Yt.push("cubemap face img is not a square: "+ee.src):(Ar(i,r),i.bindTexture(lt,n),pt===5?zo().forEach(function(P){i.texImage2D(P,I,F,J,et,ee)}):i.texImage2D(Bt,I,F,J,et,ee),li(r)&&i.generateMipmap(lt)),pt===0&&f(Yt.length?Yt:void 0,n,at)}}at=Z.map(function(Bt,kt){return Oo(Bt,r.crossOrigin,dt(Lt[kt]))})}function ca(i,n,r,f){f=f||ci;const Z=r.src,I=r.internalFormat||r.format||vn,F=si(I),T=r.format||F.format,J=r.type||yn,et=r.target||xr;if(et!==Rr&&et!==xr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";Po(i,n,r),r=Object.assign({},r);let lt=Z.length;const pt=[];let Yt;const Lt=r.level||0;let at=r.width,dt=r.height;const Bt=Z.length;let kt=!0;function ee(P){return function(De,ze){if(--lt,De)pt.push(De);else{if(Ar(i,r),i.bindTexture(et,n),kt){kt=!1,at=r.width||ze.width,dt=r.height||ze.height,i.texImage3D(et,Lt,I,at,dt,Bt,0,T,J,null);for(let We=0;We<Bt;++We)i.texSubImage3D(et,Lt,0,0,We,at,dt,1,T,J,ze)}else{let We=ze,zt;(ze.width!==at||ze.height!==dt)&&(zt=nl(),We=zt.canvas,zt.canvas.width=at,zt.canvas.height=dt,zt.drawImage(ze,0,0,at,dt)),i.texSubImage3D(et,Lt,0,0,P,at,dt,1,T,J,We),zt&&We===zt.canvas&&(zt.canvas.width=0,zt.canvas.height=0)}li(r)&&i.generateMipmap(et)}lt===0&&f(pt.length?pt:void 0,n,Yt)}}Yt=Z.map(function(P,De){return Oo(P,r.crossOrigin,ee(De))})}function ua(i,n,r,f){f=f||dr.textureOptions;const Z=f.target||hr;i.bindTexture(Z,n);let I=f.width,F=f.height,T=f.depth;const J=f.level||0,et=f.internalFormat||f.format||vn,lt=si(et),pt=f.format||lt.format,Yt=f.type||ta(i,r,lt.type);if(ri(r))r instanceof Uint8ClampedArray&&(r=new Uint8Array(r.buffer));else{const Bt=js(Yt);r=new Bt(r)}const Lt=D1(et,Yt),at=r.byteLength/Lt;if(at%1)throw"length wrong size for format: "+el(i,pt);let dt;if(Z===Rr||Z===xr)if(!I&&!F&&!T){const Bt=Math.cbrt(at);if(Bt%1!==0)throw"can't guess cube size of array of numElements: "+at;I=Bt,F=Bt,T=Bt}else I&&(!F||!T)?(dt=qi(i,Z,F,T,at/I),F=dt.width,T=dt.height):F&&(!I||!T)?(dt=qi(i,Z,I,T,at/F),I=dt.width,T=dt.height):(dt=qi(i,Z,I,F,at/T),I=dt.width,F=dt.height);else dt=qi(i,Z,I,F,at),I=dt.width,F=dt.height;if(yl(i),i.pixelStorei(Bo,f.unpackAlignment||1),Ar(i,f),Z===fr){const Bt=Lt/r.BYTES_PER_ELEMENT,kt=at/6*Bt;jo(i,f).forEach(ee=>{const P=kt*ee.ndx,De=r.subarray(P,P+kt);i.texImage2D(ee.face,J,et,I,F,0,pt,Yt,De)})}else Z===Rr||Z===xr?i.texImage3D(Z,J,et,I,F,T,0,pt,Yt,r):i.texImage2D(Z,J,et,I,F,0,pt,Yt,r);return{width:I,height:F,depth:T,type:Yt}}function aa(i,n,r){const f=r.target||hr;i.bindTexture(f,n);const Z=r.level||0,I=r.internalFormat||r.format||vn,F=si(I),T=r.format||F.format,J=r.type||F.type;if(Ar(i,r),f===fr)for(let et=0;et<6;++et)i.texImage2D(ko+et,Z,I,r.width,r.height,0,T,J,null);else f===Rr||f===xr?i.texImage3D(f,Z,I,r.width,r.height,r.depth,0,T,J,null):i.texImage2D(f,Z,I,r.width,r.height,0,T,J,null)}function Gl(i,n,r){r=r||ci,n=n||dr.textureOptions;const f=i.createTexture(),Z=n.target||hr;let I=n.width||1,F=n.height||1;const T=n.internalFormat||vn;i.bindTexture(Z,f),Z===fr&&(i.texParameteri(Z,ji,zi),i.texParameteri(Z,Oi,zi));let J=n.src;if(J)if(typeof J=="function"&&(J=J(i,n)),typeof J=="string")sa(i,f,n,r);else if(ri(J)||Array.isArray(J)&&(typeof J[0]=="number"||Array.isArray(J[0])||ri(J[0]))){const et=ua(i,f,J,n);I=et.width,F=et.height}else Array.isArray(J)&&(typeof J[0]=="string"||vl(J[0]))?Z===fr?la(i,f,n,r):ca(i,f,n,r):(Zl(i,f,J,n),I=J.width,F=J.height);else aa(i,f,n);return li(n)&&Ao(i,f,n,I,F,T),gl(i,f,n),f}const _o=Os;function Xl(i){return typeof document<"u"&&document.getElementById?document.getElementById(i):null}const to=33984,eo=34962,da=34963,ha=35713,fa=35714,ma=35632,pa=35633,ba=35981,Wl=35718,ya=35721,ga=35971,Za=35382,va=35396,Ga=35398,Xa=35392,Wa=35395,no=5126,Vl=35664,Rl=35665,xl=35666,Qo=5124,Il=35667,Sl=35668,Tl=35669,Yl=35670,wl=35671,Ll=35672,Fl=35673,Cl=35674,Hl=35675,Jl=35676,Va=35678,Ra=35680,xa=35679,Ia=35682,Sa=35685,Ta=35686,Ya=35687,wa=35688,La=35689,Fa=35690,Ca=36289,Ha=36292,Ja=36293,Do=5125,Nl=36294,kl=36295,El=36296,Na=36298,ka=36299,Ea=36300,Ua=36303,Ba=36306,Ka=36307,Ma=36308,Aa=36311,ro=3553,io=34067,$o=32879,oo=35866,be={};function Ul(i,n){return be[n].bindPoint}function za(i,n){return function(r){i.uniform1f(n,r)}}function ja(i,n){return function(r){i.uniform1fv(n,r)}}function Oa(i,n){return function(r){i.uniform2fv(n,r)}}function Pa(i,n){return function(r){i.uniform3fv(n,r)}}function _a(i,n){return function(r){i.uniform4fv(n,r)}}function Bl(i,n){return function(r){i.uniform1i(n,r)}}function Kl(i,n){return function(r){i.uniform1iv(n,r)}}function Ml(i,n){return function(r){i.uniform2iv(n,r)}}function Al(i,n){return function(r){i.uniform3iv(n,r)}}function zl(i,n){return function(r){i.uniform4iv(n,r)}}function Qa(i,n){return function(r){i.uniform1ui(n,r)}}function Da(i,n){return function(r){i.uniform1uiv(n,r)}}function $a(i,n){return function(r){i.uniform2uiv(n,r)}}function qa(i,n){return function(r){i.uniform3uiv(n,r)}}function t0(i,n){return function(r){i.uniform4uiv(n,r)}}function e0(i,n){return function(r){i.uniformMatrix2fv(n,!1,r)}}function n0(i,n){return function(r){i.uniformMatrix3fv(n,!1,r)}}function r0(i,n){return function(r){i.uniformMatrix4fv(n,!1,r)}}function i0(i,n){return function(r){i.uniformMatrix2x3fv(n,!1,r)}}function o0(i,n){return function(r){i.uniformMatrix3x2fv(n,!1,r)}}function s0(i,n){return function(r){i.uniformMatrix2x4fv(n,!1,r)}}function l0(i,n){return function(r){i.uniformMatrix4x2fv(n,!1,r)}}function c0(i,n){return function(r){i.uniformMatrix3x4fv(n,!1,r)}}function u0(i,n){return function(r){i.uniformMatrix4x3fv(n,!1,r)}}function On(i,n,r,f){const Z=Ul(i,n);return ni(i)?function(I){let F,T;!I||Ho(i,I)?(F=I,T=null):(F=I.texture,T=I.sampler),i.uniform1i(f,r),i.activeTexture(to+r),i.bindTexture(Z,F),i.bindSampler(r,T)}:function(I){i.uniform1i(f,r),i.activeTexture(to+r),i.bindTexture(Z,I)}}function Pn(i,n,r,f,Z){const I=Ul(i,n),F=new Int32Array(Z);for(let T=0;T<Z;++T)F[T]=r+T;return ni(i)?function(T){i.uniform1iv(f,F),T.forEach(function(J,et){i.activeTexture(to+F[et]);let lt,pt;!J||Ho(i,J)?(lt=J,pt=null):(lt=J.texture,pt=J.sampler),i.bindSampler(r,pt),i.bindTexture(I,lt)})}:function(T){i.uniform1iv(f,F),T.forEach(function(J,et){i.activeTexture(to+F[et]),i.bindTexture(I,J)})}}be[no]={Type:Float32Array,size:4,setter:za,arraySetter:ja},be[Vl]={Type:Float32Array,size:8,setter:Oa,cols:2},be[Rl]={Type:Float32Array,size:12,setter:Pa,cols:3},be[xl]={Type:Float32Array,size:16,setter:_a,cols:4},be[Qo]={Type:Int32Array,size:4,setter:Bl,arraySetter:Kl},be[Il]={Type:Int32Array,size:8,setter:Ml,cols:2},be[Sl]={Type:Int32Array,size:12,setter:Al,cols:3},be[Tl]={Type:Int32Array,size:16,setter:zl,cols:4},be[Do]={Type:Uint32Array,size:4,setter:Qa,arraySetter:Da},be[Nl]={Type:Uint32Array,size:8,setter:$a,cols:2},be[kl]={Type:Uint32Array,size:12,setter:qa,cols:3},be[El]={Type:Uint32Array,size:16,setter:t0,cols:4},be[Yl]={Type:Uint32Array,size:4,setter:Bl,arraySetter:Kl},be[wl]={Type:Uint32Array,size:8,setter:Ml,cols:2},be[Ll]={Type:Uint32Array,size:12,setter:Al,cols:3},be[Fl]={Type:Uint32Array,size:16,setter:zl,cols:4},be[Cl]={Type:Float32Array,size:32,setter:e0,rows:2,cols:2},be[Hl]={Type:Float32Array,size:48,setter:n0,rows:3,cols:3},be[Jl]={Type:Float32Array,size:64,setter:r0,rows:4,cols:4},be[Sa]={Type:Float32Array,size:32,setter:i0,rows:2,cols:3},be[Ta]={Type:Float32Array,size:32,setter:s0,rows:2,cols:4},be[Ya]={Type:Float32Array,size:48,setter:o0,rows:3,cols:2},be[wa]={Type:Float32Array,size:48,setter:c0,rows:3,cols:4},be[La]={Type:Float32Array,size:64,setter:l0,rows:4,cols:2},be[Fa]={Type:Float32Array,size:64,setter:u0,rows:4,cols:3},be[Va]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ro},be[Ra]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:io},be[xa]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:$o},be[Ia]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ro},be[Ca]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo},be[Ha]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo},be[Ja]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:io},be[Na]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ro},be[ka]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:$o},be[Ea]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:io},be[Ua]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo},be[Ba]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ro},be[Ka]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:$o},be[Ma]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:io},be[Aa]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo};function so(i,n){return function(r){if(r.value)switch(i.disableVertexAttribArray(n),r.value.length){case 4:i.vertexAttrib4fv(n,r.value);break;case 3:i.vertexAttrib3fv(n,r.value);break;case 2:i.vertexAttrib2fv(n,r.value);break;case 1:i.vertexAttrib1fv(n,r.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else i.bindBuffer(eo,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribPointer(n,r.numComponents||r.size,r.type||no,r.normalize||!1,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function pr(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4iv(n,r.value);else throw new Error("The length of an integer constant value must be 4!");else i.bindBuffer(eo,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Qo,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function lo(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4uiv(n,r.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else i.bindBuffer(eo,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Do,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function qo(i,n,r){const f=r.size,Z=r.count;return function(I){i.bindBuffer(eo,I.buffer);const F=I.size||I.numComponents||f,T=F/Z,J=I.type||no,lt=be[J].size*F,pt=I.normalize||!1,Yt=I.offset||0,Lt=lt/Z;for(let at=0;at<Z;++at)i.enableVertexAttribArray(n+at),i.vertexAttribPointer(n+at,T,J,pt,lt,Yt+Lt*at),i.vertexAttribDivisor&&i.vertexAttribDivisor(n+at,I.divisor||0)}}const wn={};wn[no]={size:4,setter:so},wn[Vl]={size:8,setter:so},wn[Rl]={size:12,setter:so},wn[xl]={size:16,setter:so},wn[Qo]={size:4,setter:pr},wn[Il]={size:8,setter:pr},wn[Sl]={size:12,setter:pr},wn[Tl]={size:16,setter:pr},wn[Do]={size:4,setter:lo},wn[Nl]={size:8,setter:lo},wn[kl]={size:12,setter:lo},wn[El]={size:16,setter:lo},wn[Yl]={size:4,setter:pr},wn[wl]={size:8,setter:pr},wn[Ll]={size:12,setter:pr},wn[Fl]={size:16,setter:pr},wn[Cl]={size:4,setter:qo,count:2},wn[Hl]={size:9,setter:qo,count:3},wn[Jl]={size:16,setter:qo,count:4};const a0=/ERROR:\s*\d+:(\d+)/gi;function d0(i,n="",r=0){const f=[...n.matchAll(a0)],Z=new Map(f.map((I,F)=>{const T=parseInt(I[1]),J=f[F+1],et=J?J.index:n.length,lt=n.substring(I.index,et);return[T-1,lt]}));return i.split(`
|
|
126
|
+
`).map((I,F)=>{const T=Z.get(F);return`${F+1+r}: ${I}${T?`
|
|
127
127
|
|
|
128
|
-
^^^ ${
|
|
129
|
-
`)}const
|
|
128
|
+
^^^ ${T}`:""}`}).join(`
|
|
129
|
+
`)}const jl=/^[ \t]*\n/;function Ol(i){let n=0;return jl.test(i)&&(n=1,i=i.replace(jl,"")),{lineOffset:n,shaderSource:i}}function h0(i,n){return i.errorCallback(n),i.callback&&setTimeout(()=>{i.callback(`${n}
|
|
130
130
|
${i.errors.join(`
|
|
131
|
-
`)}`)}),null}function f0(i,n,r,f){if(f=f||_o,!i.getShaderParameter(r,ha)){const I=i.getShaderInfoLog(r),{lineOffset:
|
|
132
|
-
Error compiling ${el(i,n)}: ${I}`;return f(
|
|
133
|
-
${
|
|
134
|
-
`)}`}}function X0(i,n,r,f,Z){return Z0(i,n,r,f,Z)}function Pl(i){const n=i.name;return n.startsWith("gl_")||n.startsWith("webgl_")}const W0=/(\.|\[|]|\w+)/g,V0=i=>i>="0"&&i<="9";function R0(i,n,r,f){const Z=i.split(W0).filter(
|
|
135
|
-
`;return n}run(n){var Z,I,
|
|
131
|
+
`)}`)}),null}function f0(i,n,r,f){if(f=f||_o,!i.getShaderParameter(r,ha)){const I=i.getShaderInfoLog(r),{lineOffset:F,shaderSource:T}=Ol(i.getShaderSource(r)),J=`${d0(T,I,F)}
|
|
132
|
+
Error compiling ${el(i,n)}: ${I}`;return f(J),J}return""}function ts(i,n,r){let f,Z,I;if(typeof n=="function"&&(r=n,n=void 0),typeof i=="function")r=i,i=void 0;else if(i&&!Array.isArray(i)){const et=i;r=et.errorCallback,i=et.attribLocations,f=et.transformFeedbackVaryings,Z=et.transformFeedbackMode,I=et.callback}const F=r||_o,T=[],J={errorCallback(et,...lt){T.push(et),F(et,...lt)},transformFeedbackVaryings:f,transformFeedbackMode:Z,callback:I,errors:T};{let et={};Array.isArray(i)?i.forEach(function(lt,pt){et[lt]=n?n[pt]:pt}):et=i||{},J.attribLocations=et}return J}const m0=["VERTEX_SHADER","FRAGMENT_SHADER"];function p0(i,n){if(n.indexOf("frag")>=0)return ma;if(n.indexOf("vert")>=0)return pa}function b0(i,n,r){const f=i.getAttachedShaders(n);for(const Z of f)r.has(Z)&&i.deleteShader(Z);i.deleteProgram(n)}const y0=(i=0)=>new Promise(n=>setTimeout(n,i));function g0(i,n,r){const f=i.createProgram(),{attribLocations:Z,transformFeedbackVaryings:I,transformFeedbackMode:F}=ts(r);for(let T=0;T<n.length;++T){let J=n[T];if(typeof J=="string"){const et=Xl(J),lt=et?et.text:J;let pt=i[m0[T]];et&&et.type&&(pt=p0(i,et.type)||pt),J=i.createShader(pt),i.shaderSource(J,Ol(lt).shaderSource),i.compileShader(J),i.attachShader(f,J)}}Object.entries(Z).forEach(([T,J])=>i.bindAttribLocation(f,J,T));{let T=I;T&&(T.attribs&&(T=T.attribs),Array.isArray(T)||(T=Object.keys(T)),i.transformFeedbackVaryings(f,T,F||ba))}return i.linkProgram(f),f}function Z0(i,n,r,f,Z){const I=ts(r,f,Z),F=new Set(n),T=g0(i,n,I);function J(et,lt){const pt=G0(et,lt,I.errorCallback);return pt&&b0(et,lt,F),pt}if(I.callback){v0(i,T).then(()=>{const et=J(i,T);I.callback(et,et?void 0:T)});return}return J(i,T)?void 0:T}async function v0(i,n){const r=i.getExtension("KHR_parallel_shader_compile"),f=r?(I,F)=>I.getProgramParameter(F,r.COMPLETION_STATUS_KHR):()=>!0;let Z=0;do await y0(Z),Z=1e3/60;while(!f(i,n))}function G0(i,n,r){if(r=r||_o,!i.getProgramParameter(n,fa)){const Z=i.getProgramInfoLog(n);r(`Error in program linking: ${Z}`);const F=i.getAttachedShaders(n).map(T=>f0(i,i.getShaderParameter(T,i.SHADER_TYPE),T,r));return`${Z}
|
|
133
|
+
${F.filter(T=>T).join(`
|
|
134
|
+
`)}`}}function X0(i,n,r,f,Z){return Z0(i,n,r,f,Z)}function Pl(i){const n=i.name;return n.startsWith("gl_")||n.startsWith("webgl_")}const W0=/(\.|\[|]|\w+)/g,V0=i=>i>="0"&&i<="9";function R0(i,n,r,f){const Z=i.split(W0).filter(T=>T!=="");let I=0,F="";for(;;){const T=Z[I++];F+=T;const J=V0(T[0]),et=J?parseInt(T):T;if(J&&(F+=Z[I++]),I===Z.length){r[et]=n;break}else{const pt=Z[I++],Yt=pt==="[",Lt=r[et]||(Yt?[]:{});r[et]=Lt,r=Lt,f[F]=f[F]||function(at){return function(dt){_l(at,dt)}}(Lt),F+=pt}}}function x0(i,n){let r=0;function f(T,J,et){const lt=J.name.endsWith("[0]"),pt=J.type,Yt=be[pt];if(!Yt)throw new Error(`unknown type: 0x${pt.toString(16)}`);let Lt;if(Yt.bindPoint){const at=r;r+=J.size,lt?Lt=Yt.arraySetter(i,pt,at,et,J.size):Lt=Yt.setter(i,pt,at,et,J.size)}else Yt.arraySetter&<?Lt=Yt.arraySetter(i,et):Lt=Yt.setter(i,et);return Lt.location=et,Lt}const Z={},I={},F=i.getProgramParameter(n,Wl);for(let T=0;T<F;++T){const J=i.getActiveUniform(n,T);if(Pl(J))continue;let et=J.name;et.endsWith("[0]")&&(et=et.substr(0,et.length-3));const lt=i.getUniformLocation(n,J.name);if(lt){const pt=f(n,J,lt);Z[et]=pt,R0(et,pt,I,Z)}}return Z}function I0(i,n){const r={},f=i.getProgramParameter(n,ga);for(let Z=0;Z<f;++Z){const I=i.getTransformFeedbackVarying(n,Z);r[I.name]={index:Z,type:I.type,size:I.size}}return r}function S0(i,n){const r=i.getProgramParameter(n,Wl),f=[],Z=[];for(let T=0;T<r;++T){Z.push(T),f.push({});const J=i.getActiveUniform(n,T);f[T].name=J.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach(function(T){const J=T[0],et=T[1];i.getActiveUniforms(n,Z,i[J]).forEach(function(lt,pt){f[pt][et]=lt})});const I={},F=i.getProgramParameter(n,Za);for(let T=0;T<F;++T){const J=i.getActiveUniformBlockName(n,T),et={index:i.getUniformBlockIndex(n,J),usedByVertexShader:i.getActiveUniformBlockParameter(n,T,va),usedByFragmentShader:i.getActiveUniformBlockParameter(n,T,Ga),size:i.getActiveUniformBlockParameter(n,T,Xa),uniformIndices:i.getActiveUniformBlockParameter(n,T,Wa)};et.used=et.usedByVertexShader||et.usedByFragmentShader,I[J]=et}return{blockSpecs:I,uniformData:f}}function _l(i,n){for(const r in n){const f=i[r];typeof f=="function"?f(n[r]):_l(i[r],n[r])}}function Ql(i,...n){const r=i.uniformSetters||i,f=n.length;for(let Z=0;Z<f;++Z){const I=n[Z];if(Array.isArray(I)){const F=I.length;for(let T=0;T<F;++T)Ql(r,I[T])}else for(const F in I){const T=r[F];T&&T(I[F])}}}function T0(i,n){const r={},f=i.getProgramParameter(n,ya);for(let Z=0;Z<f;++Z){const I=i.getActiveAttrib(n,Z);if(Pl(I))continue;const F=i.getAttribLocation(n,I.name),T=wn[I.type],J=T.setter(i,F,T);J.location=F,r[I.name]=J}return r}function Y0(i,n){for(const r in n){const f=i[r];f&&f(n[r])}}function w0(i,n,r){r.vertexArrayObject?i.bindVertexArray(r.vertexArrayObject):(Y0(n.attribSetters||n,r.attribs),r.indices&&i.bindBuffer(da,r.indices))}function Dl(i,n){const r=x0(i,n),f=T0(i,n),Z={program:n,uniformSetters:r,attribSetters:f};return ni(i)&&(Z.uniformBlockSpec=S0(i,n),Z.transformFeedbackInfo=I0(i,n)),Z}const L0=/\s|{|}|;/;function F0(i,n,r,f,Z){const I=ts(r,f,Z),F=[];if(n=n.map(function(et){if(!L0.test(et)){const lt=Xl(et);if(lt)et=lt.text;else{const pt=`no element with id: ${et}`;I.errorCallback(pt),F.push(pt)}}return et}),F.length)return h0(I,"");const T=I.callback;T&&(I.callback=(et,lt)=>{T(et,et?void 0:Dl(i,lt))});const J=X0(i,n,I);return J?Dl(i,J):null}const C0=4,$l=5123;function H0(i,n,r,f,Z,I){r=r===void 0?C0:r;const F=n.indices,T=n.elementType,J=f===void 0?n.numElements:f;Z=Z===void 0?0:Z,T||F?I!==void 0?i.drawElementsInstanced(r,J,T===void 0?$l:n.elementType,Z,I):i.drawElements(r,J,T===void 0?$l:n.elementType,Z):I!==void 0?i.drawArraysInstanced(r,Z,J,I):i.drawArrays(r,Z,J)}const ql=36160,co=36161,J0=3553,N0=5121,k0=6402,E0=6408,U0=33190,B0=36012,K0=35056,M0=36013,A0=32854,z0=32855,j0=36194,t2=33189,e2=6401,n2=36168,es=34041,ns=36064,uo=36096,r2=36128,rs=33306,is=33071,os=9729,O0=[{format:E0,type:N0,min:os,wrap:is},{format:es}],tr={};tr[es]=rs,tr[e2]=r2,tr[n2]=r2,tr[k0]=uo,tr[t2]=uo,tr[U0]=uo,tr[B0]=uo,tr[K0]=rs,tr[M0]=rs;function P0(i,n){return tr[i]||tr[n]}const br={};br[A0]=!0,br[z0]=!0,br[j0]=!0,br[es]=!0,br[t2]=!0,br[e2]=!0,br[n2]=!0;function _0(i){return br[i]}const Q0=32;function D0(i){return i>=ns&&i<ns+Q0}function ao(i,n,r,f){const Z=ql,I=i.createFramebuffer();i.bindFramebuffer(Z,I),r=r||i.drawingBufferWidth,f=f||i.drawingBufferHeight,n=n||O0;const F=[],T={framebuffer:I,attachments:[],width:r,height:f};return n.forEach(function(J,et){let lt=J.attachment;const pt=J.samples,Yt=J.format;let Lt=J.attachmentPoint||P0(Yt,J.internalFormat);if(Lt||(Lt=ns+et),D0(Lt)&&F.push(Lt),!lt)if(pt!==void 0||_0(Yt))lt=i.createRenderbuffer(),i.bindRenderbuffer(co,lt),pt>1?i.renderbufferStorageMultisample(co,pt,Yt,r,f):i.renderbufferStorage(co,Yt,r,f);else{const at=Object.assign({},J);at.width=r,at.height=f,at.auto===void 0&&(at.auto=!1,at.min=at.min||at.minMag||os,at.mag=at.mag||at.minMag||os,at.wrapS=at.wrapS||at.wrap||is,at.wrapT=at.wrapT||at.wrap||is),lt=Gl(i,at)}if(su(i,lt))i.framebufferRenderbuffer(Z,Lt,co,lt);else if(Ho(i,lt))J.layer!==void 0?i.framebufferTextureLayer(Z,Lt,lt,J.level||0,J.layer):i.framebufferTexture2D(Z,Lt,J.target||J0,lt,J.level||0);else throw new Error("unknown attachment type");T.attachments.push(lt)}),i.drawBuffers&&i.drawBuffers(F),T}function $0(i,n,r){r=r||ql,n?(i.bindFramebuffer(r,n.framebuffer),i.viewport(0,0,n.width,n.height)):(i.bindFramebuffer(r,null),i.viewport(0,0,i.drawingBufferWidth,i.drawingBufferHeight))}function mn(i,n){return()=>n instanceof WebGLTexture?n:Gl(i,{src:n,wrap:i.CLAMP_TO_EDGE})}const zr=2;class Tr{constructor(n){gt(this,"id","_");gt(this,"context");gt(this,"output");gt(this,"fbi");gt(this,"options");gt(this,"programInfo");gt(this,"bufferInfo");gt(this,"profiler");gt(this,"lastRun");const{context:r,width:f,height:Z}=n;this.context=r,this.options=n;const I=this.buildDefines();this.programInfo=F0(this.context,[I+this.getVertexShader(),I+this.getFragmentShader()]),this.bufferInfo=Yu(this.context,this.getBuffers()),this.fbi=ao(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],f,Z),this.output=this.fbi.attachments[0]}resizeOutput(n,r){this.fbi=ao(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.options.width=n,this.options.height=r,this.output=this.fbi.attachments[0]}getDefines(){return{}}getBuffers(){return{position:{numComponents:2,data:[-1,-1,-1,1,1,-1,1,1,-1,1,1,-1]},texture_coord:{numComponents:2,data:[0,0,0,1,1,0,1,1,0,1,1,0]}}}buildDefines(){let n="";const r=this.getDefines();for(let f in r)n+=`#define ${f} ${r[f].toFixed(1)}
|
|
135
|
+
`;return n}run(n){var Z,I,F,T,J,et;(Z=this.profiler)==null||Z.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),(I=this.profiler)==null||I.pushContext(`[${this.id}] UNIFORMS`);for(const lt in n)typeof n[lt]=="function"&&((F=this.profiler)==null||F.pushContext(`[${this.id}] UNI : ${lt}`),n[lt]=n[lt](),(T=this.profiler)==null||T.popContext(`[${this.id}] UNI : ${lt}`));(J=this.profiler)==null||J.popContext(`[${this.id}] UNIFORMS`);const r=Date.now();let f=0;this.lastRun&&(f=(r-this.lastRun)/1e3),this.lastRun=r,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),w0(this.context,this.programInfo,this.bufferInfo),Ql(this.programInfo,{delta:f,canvas:[this.context.canvas.width,this.context.canvas.height],...n}),$0(this.context,this.options.disableFramebuffer?null:this.fbi),H0(this.context,this.bufferInfo),(et=this.profiler)==null||et.popContext(`[${this.id}] PROG : ${this.constructor.name}`)}setProfiler(n){this.profiler=n}}const q0=`precision mediump float;
|
|
136
136
|
|
|
137
137
|
varying vec2 _texture_coord;
|
|
138
138
|
|
|
@@ -157,7 +157,7 @@ void main() {
|
|
|
157
157
|
_texture_coord = texture_coord;
|
|
158
158
|
_texture_coord.y = 1. - texture_coord.y;
|
|
159
159
|
}
|
|
160
|
-
`;class ss extends
|
|
160
|
+
`;class ss extends Tr{getFragmentShader(){return q0}getVertexShader(){return t3}}class ls{constructor(){gt(this,"steps",[]);gt(this,"profiler")}addStep(n){this.steps.push(n)}async run(){for(const n of this.steps)n.program.run(n.getUniforms())}resizeOutput(n,r){var f,Z;(f=this.profiler)==null||f.pushContext(`PIP [${this.constructor.name}]`);for(const I of this.steps)I.preventResize||I.program.resizeOutput(n,r);(Z=this.profiler)==null||Z.popContext(`PIP [${this.constructor.name}]`)}setProfiler(n){this.profiler=n;for(const r of this.steps)r.program.setProfiler(n)}setId(n){for(const r of this.steps)r.program.id=n}}class cs extends ls{constructor(){super(...arguments);gt(this,"preciseMaskEnabled",!1)}}class i2 extends cs{constructor(r){super();gt(this,"inputImage");gt(this,"inputBackgroundImage");gt(this,"inputMask");gt(this,"preciseMaskEnabled",!0);this.context=r;const f={context:r,height:r.canvas.height,width:r.canvas.width},Z=new ss({...f,disableFramebuffer:!0});this.addStep({program:Z,getUniforms:()=>({background:mn(r,this.inputBackgroundImage),foreground:mn(r,this.inputImage),threshold:mn(r,this.inputMask)})})}setData(r,f){this.inputImage=r,this.inputMask=f}}const e3=`precision mediump float;
|
|
161
161
|
|
|
162
162
|
varying vec2 _texture_coord;
|
|
163
163
|
uniform sampler2D texture;
|
|
@@ -176,7 +176,7 @@ void main() {
|
|
|
176
176
|
_texture_coord.y = 1. - texture_coord.y;
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
|
-
`;class r3 extends
|
|
179
|
+
`;class r3 extends Tr{getFragmentShader(){return e3}getVertexShader(){return n3}}class i3 extends ls{constructor(r,f,Z){super();gt(this,"inputImage");this.context=r;const I={context:r,height:Z,width:f};this.addStep({program:new r3({...I,disableFramebuffer:!0}),getUniforms:()=>({texture:mn(r,this.inputImage),invert_y:!0})})}setData(r){this.inputImage=r}}async function o2(i){return new Promise(n=>{setTimeout(()=>{n()},i)})}const o3=`precision mediump float;
|
|
180
180
|
|
|
181
181
|
varying vec2 _texture_coord;
|
|
182
182
|
|
|
@@ -195,7 +195,7 @@ void main() {
|
|
|
195
195
|
gl_Position = vec4(position, 0., 1.);
|
|
196
196
|
_texture_coord = texture_coord;
|
|
197
197
|
}
|
|
198
|
-
`;var us=(i=>(i[i.LINEAR=0]="LINEAR",i[i.GAUSSIAN=1]="GAUSSIAN",i))(us||{});class
|
|
198
|
+
`;var us=(i=>(i[i.LINEAR=0]="LINEAR",i[i.GAUSSIAN=1]="GAUSSIAN",i))(us||{});class s2 extends Tr{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return o3+this.createLoopFunction()}getVertexShader(){return s3}createLoopFunction(){var r;let n=(r=this.options.radius)!=null?r:1;return`
|
|
199
199
|
|
|
200
200
|
vec4 loop() {
|
|
201
201
|
vec4 result = vec4(0,0,0,0);
|
|
@@ -216,7 +216,7 @@ void main() {
|
|
|
216
216
|
diff.x = normalizedRadius.x;
|
|
217
217
|
}
|
|
218
218
|
return result / factorSum;
|
|
219
|
-
}`}getFactor(n,r){switch(this.options.type){case 1:return this.getLinearFactor(n,r);case 0:default:return this.getLinearFactor(n,r)}}getLinearFactor(n,r){return 1}getGaussianFactor(n,r){var
|
|
219
|
+
}`}getFactor(n,r){switch(this.options.type){case 1:return this.getLinearFactor(n,r);case 0:default:return this.getLinearFactor(n,r)}}getLinearFactor(n,r){return 1}getGaussianFactor(n,r){var J;const f=Math.PI*2,Z=Math.max((J=this.options.radius)!=null?J:1,1),I=1/(f*Z**2),F=-(n**2+r**2),T=I*F;return I*Math.E**T}}class as extends Tr{constructor(r){super(r);gt(this,"fbi2");this.fbi2=ao(r.context,[{format:r.context.RGBA,type:r.context.UNSIGNED_BYTE,min:r.context.LINEAR,mag:r.context.LINEAR,wrap:r.context.CLAMP_TO_EDGE}],r.width,r.height)}run(r){const f=this.fbi;this.fbi=this.fbi2,this.fbi2=f,this.output=this.fbi.attachments[0],super.run({...r,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(r,f){super.resizeOutput(r,f),this.fbi2=ao(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],r,f)}}const l3=`precision mediump float;
|
|
220
220
|
|
|
221
221
|
varying vec2 _texture_coord;
|
|
222
222
|
|
|
@@ -331,7 +331,7 @@ out vec2 _texture_coord;
|
|
|
331
331
|
void main() {
|
|
332
332
|
gl_Position = vec4(position, 0.0, 1.0);
|
|
333
333
|
_texture_coord = texture_coord;
|
|
334
|
-
}`;class h3 extends
|
|
334
|
+
}`;class h3 extends Tr{getFragmentShader(){return a3}getVertexShader(){return d3}}const f3=`precision mediump float;
|
|
335
335
|
|
|
336
336
|
varying vec2 _texture_coord;
|
|
337
337
|
|
|
@@ -362,7 +362,7 @@ void main() {
|
|
|
362
362
|
gl_Position = vec4(position, 0., 1.);
|
|
363
363
|
_texture_coord = texture_coord;
|
|
364
364
|
}
|
|
365
|
-
`;class p3 extends
|
|
365
|
+
`;class p3 extends Tr{getFragmentShader(){return f3}getVertexShader(){return m3}}const b3=`precision mediump float;
|
|
366
366
|
|
|
367
367
|
varying vec2 _texture_coord;
|
|
368
368
|
|
|
@@ -413,7 +413,7 @@ void main() {
|
|
|
413
413
|
gl_Position = vec4(position, 0., 1.);
|
|
414
414
|
_texture_coord = texture_coord;
|
|
415
415
|
}
|
|
416
|
-
`;class G3 extends as{getFragmentShader(){return Z3}getVertexShader(){return v3}}class X3 extends ls{constructor(r,f,Z){super();gt(this,"inputImage");gt(this,"inputMask");gt(this,"previousInputImage");gt(this,"previousInputMask");gt(this,"output");gt(this,"options",{currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1});gt(this,"jointBilateral");this.context=r;const I={context:r,height:Z,width:f},
|
|
416
|
+
`;class G3 extends as{getFragmentShader(){return Z3}getVertexShader(){return v3}}class X3 extends ls{constructor(r,f,Z){super();gt(this,"inputImage");gt(this,"inputMask");gt(this,"previousInputImage");gt(this,"previousInputMask");gt(this,"output");gt(this,"options",{currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1});gt(this,"jointBilateral");this.context=r;const I={context:r,height:Z,width:f},F=new u3(I),T=new s2({...I,radius:1,type:us.GAUSSIAN}),J=new G3(I),et=new g3(I),lt=new p3(I);this.jointBilateral=new h3(I),this.addStep({program:F,getUniforms:()=>({image_now:mn(r,this.inputImage),image_before:mn(r,this.previousInputImage),mask_now:mn(r,this.inputMask),mask_before:mn(r,this.previousInputMask),current_threshold_minimum:this.options.currentThresholdMinimum,current_threshold_maximum:this.options.currentThresholdMaximum,previous_threshold_minimum:this.options.previousThresholdMinimum,previous_threshold_maximum:this.options.previousThresholdMaximum,threshold_minimum:this.options.thresholdMinimum,threshold_maximum:this.options.thresholdMaximum,threshold_factor:this.options.thresholdFactor})}),this.addStep({program:J,getUniforms:()=>({inputs:mn(r,this.inputMask),threshold:mn(r,F.output)})}),this.addStep({program:lt,getUniforms:()=>({texture:mn(r,J.output)})}),this.addStep({program:et,getUniforms:()=>({texture:mn(r,lt.output)})}),this.addStep({program:T,getUniforms:()=>({texture:mn(r,et.output)})}),this.addStep({program:this.jointBilateral,getUniforms:()=>{var De,ze,We,zt,Hn,ne,Zt,$e;const Yt=(ze=(De=this.inputImage)==null?void 0:De.width)!=null?ze:1,Lt=(zt=(We=this.inputImage)==null?void 0:We.height)!=null?zt:1,at=(ne=(Hn=this.inputMask)==null?void 0:Hn.width)!=null?ne:1,dt=($e=(Zt=this.inputMask)==null?void 0:Zt.height)!=null?$e:1,Bt=Math.max(Yt/at,Lt/dt),kt=Math.max(1,Math.sqrt(Bt)*.66),ee=1/Yt,P=1/Lt;return{input_frame:mn(r,this.inputImage),segmentation_mask:mn(r,this.inputMask),threshold:mn(r,T.output),texel_size:[ee,P],step:kt,radius:Bt,offset:kt>1?kt*.5:0,sigma_texel:Math.max(ee,P)*Bt,sigma_color:.1}}}),this.output=this.jointBilateral.output}setData(r,f){this.previousInputImage=this.inputImage?this.inputImage:r,this.previousInputMask=this.inputMask?this.inputMask:f,this.inputImage=r,this.inputMask=f}setOptions(r){this.options=r}resizeOutput(r,f){super.resizeOutput(r,f),this.output=this.jointBilateral.output}}var l2=(i=>(i.PUSH="PUSH",i.POP="POP",i))(l2||{});class W3{constructor(n){gt(this,"context");gt(this,"extension");gt(this,"queries",[]);gt(this,"activeQuery");this.context=n,this.extension=n.getExtension("EXT_disjoint_timer_query_webgl2")}start(){}stop(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)}pushContext(n){this.createQuery("PUSH",n)}popContext(n){this.createQuery("POP",n)}createQuery(n,r){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT),this.activeQuery=this.context.createQuery(),this.context.beginQuery(this.extension.TIME_ELAPSED_EXT,this.activeQuery),this.queries.push({name:r,action:n,query:this.activeQuery})}async getResolvedQueries(){const n=(await Promise.all([...this.queries].map(r=>this.resolveQuery(r)))).filter(r=>r);for(let r=1;r<n.length;++r)n[r].timestamp+=n[r-1].duration+n[r-1].timestamp;return n}async resolveQuery(n){if(!await this.awaitQueryAvailable(n)){console.log("Unawaitable query",n);return}if(this.context.getParameter(this.extension.GPU_DISJOINT_EXT)){console.log("Disjointed query",n);return}return{...n,duration:this.context.getQueryParameter(n.query,this.context.QUERY_RESULT),timestamp:0}}async awaitQueryAvailable(n){for(let r=0;r<10;++r){if(this.context.getQueryParameter(n.query,this.context.QUERY_RESULT_AVAILABLE))return n;await o2(200)}}}class ho{constructor(){gt(this,"canvas");gt(this,"context");gt(this,"pipeline");gt(this,"previousImageWidth",0);gt(this,"previousImageHeight",0);gt(this,"previousMaskWidth",zr);gt(this,"previousMaskHeight",zr);gt(this,"profiler");gt(this,"postProcessingEnabled",!0);gt(this,"improveMask");const n=new OffscreenCanvas(0,0),r=n.getContext("webgl2");if(!r)throw"Fail to retrieve webgl2 context";this.canvas=n,this.context=r,this.improveMask=new X3(this.context,zr,zr)}setFlickeringOptions(n){this.improveMask.setOptions(n)}enablePostProcessing(){this.postProcessingEnabled=!0}disablePostProcessing(){this.postProcessingEnabled=!1}async profileWebgl(n){const r=new W3(this.context);return this.profiler=r,r.start(),await o2(n),this.profiler=void 0,r.stop(),r.getResolvedQueries()}async render(n,r){var I,F;if(!this.pipeline)throw"missing pipeline";(this.previousImageHeight!==n.height||this.previousImageWidth!==n.width)&&this.resizeOutput(n.width,n.height),(this.previousMaskHeight!==r.height||this.previousMaskWidth!==r.width)&&(this.improveMask.resizeOutput(r.width,r.height),this.previousMaskWidth=r.width,this.previousMaskHeight=r.height);const f="renderer";(I=this.profiler)==null||I.pushContext(f),this.improveMask.setProfiler(this.profiler),this.pipeline.setProfiler(this.profiler);let Z=r;return this.postProcessingEnabled&&(this.improveMask.setData(n,r),this.improveMask.run(),Z=this.improveMask.output),this.pipeline.setData(n,Z),await this.pipeline.run(),(F=this.profiler)==null||F.popContext(f),this.canvas}resizeOutput(n,r){var f;this.canvas.width=n,this.canvas.height=r,(f=this.pipeline)==null||f.resizeOutput(n,r),this.previousImageWidth=n,this.previousImageHeight=r}}class c2 extends ho{constructor(){super();gt(this,"pipeline");gt(this,"backgroundImage");gt(this,"backgroundImageResizerCanvas");gt(this,"backgroundImageResizerContext");gt(this,"backgroundImageResizer");this.pipeline=new i2(this.context);const r=new OffscreenCanvas(0,0),f=r.getContext("webgl2");if(!f)throw"Fail to retrieve webgl context";this.backgroundImageResizerCanvas=r,this.backgroundImageResizerContext=f,this.backgroundImageResizer=new i3(this.backgroundImageResizerContext,0,0)}setBackgroundImage(r){this.backgroundImage=r,this.updateBackgroundImage()}updateBackgroundImage(){const{width:r,height:f}=this.canvas;this.backgroundImageResizer.resizeOutput(r,f),this.backgroundImageResizer.setData(this.backgroundImage),this.backgroundImageResizer.run(),this.pipeline.inputBackgroundImage=this.backgroundImageResizerCanvas}resizeOutput(r,f){super.resizeOutput(r,f),this.backgroundImageResizerCanvas.width=r,this.backgroundImageResizerCanvas.height=f,this.backgroundImageResizer.resizeOutput(r,f),this.updateBackgroundImage()}}class V3 extends c2{constructor(){super(...arguments);gt(this,"frameReader")}setBackgroundVideo(r){this.frameReader=r}async render(r,f){return await this.readNextVideoFrame(),super.render(r,f)}async readNextVideoFrame(){var f;const r=await((f=this.frameReader)==null?void 0:f.read());if(r!=null&&r.value){const Z=await createImageBitmap(r.value);this.setBackgroundImage(Z),r.value.close()}}}class u2{blurBackground(n){return new Oc(n)}blurSilhouette(n){return new Pc(n)}imageBackground(){return new _c}videoBackground(){return new V3}}const R3=`precision mediump float;
|
|
417
417
|
|
|
418
418
|
varying vec2 _texture_coord;
|
|
419
419
|
|
|
@@ -433,7 +433,7 @@ void main() {
|
|
|
433
433
|
gl_Position = vec4(position, 0., 1.);
|
|
434
434
|
_texture_coord = texture_coord;
|
|
435
435
|
}
|
|
436
|
-
`;class I3 extends
|
|
436
|
+
`;class I3 extends Tr{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return R3+this.createLoopFunction()}getVertexShader(){return x3}createLoopFunction(){var r;let n=(r=this.options.radius)!=null?r:1;return`
|
|
437
437
|
|
|
438
438
|
vec4 loop() {
|
|
439
439
|
vec4 result = vec4(0,0,0,0);
|
|
@@ -455,4 +455,4 @@ void main() {
|
|
|
455
455
|
diff.x = normalizedRadius.x;
|
|
456
456
|
}
|
|
457
457
|
return result / factorSum;
|
|
458
|
-
}`}}const S3=10,Y3=2,w3=8;class T3 extends cs{constructor(r,f){super();gt(this,"inputImage");gt(this,"inputMask");gt(this,"blur");this.context=r,this.radius=f;const Z={context:r,height:r.canvas.height,width:r.canvas.width};this.blur=new I3({...Z,radius:f,...this.getBlurTextureSize(r.canvas.width,r.canvas.height)});const I=new ss({...Z,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:mn(r,this.inputImage),mask:mn(r,this.inputMask)})}),this.addStep({program:I,getUniforms:()=>({background:mn(r,this.blur.output),foreground:mn(r,this.inputImage),threshold:mn(r,this.inputMask)})})}getBlurTextureSize(r,f){const Z=this.radius>S3?w3:Y3;return{width:Math.max(jr,r/Z),height:Math.max(jr,f/Z)}}setData(r,f){this.inputImage=r,this.inputMask=f}resizeOutput(r,f){super.resizeOutput(r,f);const Z=this.getBlurTextureSize(r,f);this.blur.resizeOutput(Z.width,Z.height)}}class F3 extends ho{constructor(r){super();gt(this,"pipeline");this.pipeline=new T3(this.context,r),this.disablePostProcessing()}}class C3 extends cs{constructor(r,f){super();gt(this,"inputImage");gt(this,"inputMask");this.context=r;const Z={context:r,height:r.canvas.height,width:r.canvas.width},I=new sc({...Z,radius:f,type:us.GAUSSIAN}),C=new ss({...Z,disableFramebuffer:!0});this.addStep({program:I,getUniforms:()=>({texture:mn(r,this.inputImage)})}),this.addStep({program:C,getUniforms:()=>({background:mn(r,this.inputImage),foreground:mn(r,I.output),threshold:mn(r,this.inputMask)})})}setData(r,f){this.inputImage=r,this.inputMask=f}}class L3 extends ho{constructor(r){super();gt(this,"pipeline");this.pipeline=new C3(this.context,r),this.disablePostProcessing()}}class H3 extends ic{constructor(){super(...arguments);gt(this,"frameReader");gt(this,"preciseMaskEnabled",!0)}set reader(r){this.frameReader=r}async run(){this.frameReader&&(await this.readNextVideoFrame(),await super.run())}async readNextVideoFrame(){var f;const r=await((f=this.frameReader)==null?void 0:f.read());r!=null&&r.value&&(this.inputBackgroundImage=await createImageBitmap(r.value),r.value.close())}}class N3 extends ho{constructor(){super();gt(this,"pipeline");this.pipeline=new H3(this.context)}setBackgroundVideo(r){this.pipeline.reader=r}}class ac{blurBackground(n){return new F3(n)}blurSilhouette(n){return new L3(n)}imageBackground(){return new cc}videoBackground(){return new N3}}class J3{constructor(n){gt(this,"factory");switch(n){case Qr.CANVAS:this.factory=new uc;break;case Qr.WEBGL:this.factory=new ac;break;default:const r=Ss();this.factory=r.supported?new ac:new uc}}blurBackground(n){return this.getFactory().blurBackground(n)}blurSilhouette(n){return this.getFactory().blurSilhouette(n)}imageBackground(){return this.getFactory().imageBackground()}videoBackground(){return this.getFactory().videoBackground()}getFactory(){if(!this.factory)throw"Factory is not initialized";return this.factory}}class k3{constructor(){gt(this,"renderer");gt(this,"backgroundVideo");gt(this,"backgroundImage")}setBackgroundOptions(n){var f,Z;const r=new J3((f=n.renderingOptions)==null?void 0:f.type);switch(n.transformerType){case"BackgroundBlur":this.renderer=r.blurBackground(this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.renderer=r.blurSilhouette(this.getBlurSize(n.radius));break;case"VideoBackground":const I=r.videoBackground();this.backgroundVideo&&I.setBackgroundVideo(this.backgroundVideo),this.renderer=I;break;case"VirtualBackground":const C=r.imageBackground();this.backgroundImage&&C.setBackgroundImage(this.backgroundImage),this.renderer=C;break;default:throw`Unknown rendering type [${n.transformerType}]`}((Z=n.renderingOptions)==null?void 0:Z.type)===Qr.WEBGL&&(n.renderingOptions.selfieSegmentationType===gi.PRECISE?this.renderer.enablePostProcessing():n.renderingOptions.selfieSegmentationType===gi.FAST&&this.renderer.disablePostProcessing())}setFlickeringOptions(n){var r;(r=this.renderer)==null||r.setFlickeringOptions(n)}setVideoBGReadable(n){this.backgroundVideo=n.getReader();const r=this.renderer;r!=null&&r.setBackgroundVideo&&r.setBackgroundVideo(this.backgroundVideo)}async setVirtualBGImage(n){const r=this.renderer;r!=null&&r.setBackgroundImage&&r.setBackgroundImage(n),this.backgroundImage=n}async process(n,r){if(this.renderer)return this.renderer.render(n,r)}async resizeForeground(n,r){}getBlurSize(n=_r.Low){switch(n){case _r.Low:return 5;case _r.High:return 12}return n}async profile(n){var r,f;return(f=(r=this.renderer)==null?void 0:r.profileWebgl(n))!=null?f:[]}}class dc{constructor(){gt(this,"selfieSegmentation",new xs);gt(this,"backgroundFilter");gt(this,"reporter",new j2);gt(this,"isEnabled",!0);gt(this,"backgroundOptions")}async init(n,r){await this.selfieSegmentation.init(r.wasmAssetUriPath,r.tfliteAssetUriPath),this.backgroundFilter=new k3,this.report({variation:"Create"})}async transform(n,r){var Y,N;if(!this.isEnabled)return r.enqueue(n);let f;const Z=(Y=n.timestamp)!=null?Y:0,I=await createImageBitmap(n),C=await this.selfieSegmentation.process(I);C&&(f=await((N=this.backgroundFilter)==null?void 0:N.process(I,C))),f?(n.close(),r.enqueue(new VideoFrame(f,{timestamp:Z,alpha:"discard"}))):r.enqueue(n)}async setBackgroundOptions(n){var r;this.backgroundOptions=n,await((r=this.backgroundFilter)==null?void 0:r.setBackgroundOptions(n)),this.report({variation:"Update"})}async setVideoBGReadable(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVideoBGReadable(n))}async setVirtualBGImage(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVirtualBGImage(n))}setFlickeringOptions(n){var r;(r=this.backgroundFilter)==null||r.setFlickeringOptions(n),this.report({variation:"Update"})}async profile(n){var r,f;return(f=(r=this.backgroundFilter)==null?void 0:r.profile(n))!=null?f:[]}getTransformerType(){var n,r;return(r=(n=this.backgroundOptions)==null?void 0:n.transformerType)!=null?r:"Undefined"}enable(){this.isEnabled=!0}disable(){this.isEnabled=!1}report(n){var r;this.reporter.send({version:z2,action:"MlTransformers",transformerType:(r=this.backgroundOptions)==null?void 0:r.transformerType,config:JSON.stringify(this.backgroundOptions),...n})}}const fs=class{constructor(){gt(this,"backgroundTransformer",new dc);gt(this,"mediaProcessor",new _c);gt(this,"rate",30);gt(this,"resolveOnMediaProcessor");gt(this,"eventsQueue",[])}async init(n,r){await this.backgroundTransformer.init(n,r),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((f,Z)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:f,data:Z}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:f,data:Z})})}enable(){this.backgroundTransformer.enable()}disable(){this.backgroundTransformer.disable()}async onMediaProcessorEvent(){return await new Promise(n=>{this.eventsQueue.length>0?n(this.eventsQueue.shift()):this.resolveOnMediaProcessor=n})}async setTrackExpectedRate(n){this.rate=n,this.mediaProcessor.setTrackExpectedRate(n)}async transform(n,r){this.mediaProcessor.transform(n,r)}async setBackgroundOptions(n){var r;await((r=this.backgroundTransformer)==null?void 0:r.setBackgroundOptions(n))}setVideoBGReadable(n){this.backgroundTransformer.setVideoBGReadable(n)}async setVirtualBGImage(n){await this.backgroundTransformer.setVirtualBGImage(n)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(n){this.backgroundTransformer.setFlickeringOptions(n)}setVonageMetadata(n){Mc(n)}async profile(n){return JSON.stringify(await this.backgroundTransformer.profile(n))}};let ds=fs;(()=>{y2("ProcessorWorker",fs)})();const hc="dmFyIEdsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgJGw9KEssWCxXKT0+WCBpbiBLP0dsKEssWCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6V30pOktbWF09Vzt2YXIgbD0oSyxYLFcpPT4oJGwoSyx0eXBlb2YgWCE9InN5bWJvbCI/WCsiIjpYLFcpLFcpOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBLKHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3QgWD1LKCJnbG9iYWxzIix7fSk7dmFyIFc9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIsci5FVkVOVD0iRVZFTlQiLHIpKShXfHx7fSk7ZnVuY3Rpb24gR28ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKHQ9PnIgaW5zdGFuY2VvZiB0KX1mdW5jdGlvbiBPZShyLGUpe2NvbnN0e2lkOnQsdHlwZTpufT1yLG89QXJyYXkuaXNBcnJheShlKT9lOltlXTtwb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOm4scmVzdWx0OmV9LG8uZmlsdGVyKGk9PkdvKGkpKSl9Sygid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIGpyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1mdW5jdGlvbiBaZShyLGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5zcGxpY2UoMCxlLmxlbmd0aCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpZm9yKGNvbnN0IHQgaW4gZSlkZWxldGUgZVt0XTtmb3IoY29uc3QgdCBpbiByKUFycmF5LmlzQXJyYXkoclt0XSk/KGVbdF09W10sWmUoclt0XSxlW3RdKSk6dHlwZW9mIHJbdF09PSJvYmplY3QiPyhlW3RdPXt9LFplKHJbdF0sZVt0XSkpOmVbdF09clt0XX1jb25zdCBlZT1uZXcgV2Vha01hcCxkZT1uZXcgV2Vha01hcCxKPW5ldyBXZWFrTWFwLGV0PVN5bWJvbCgiYW55UHJvZHVjZXIiKSxZcj1Qcm9taXNlLnJlc29sdmUoKSx0dD1TeW1ib2woImxpc3RlbmVyQWRkZWQiKSxydD1TeW1ib2woImxpc3RlbmVyUmVtb3ZlZCIpO2xldCBudD0hMSxWdD0hMTtmdW5jdGlvbiB3ZShyKXtpZih0eXBlb2YgciE9InN0cmluZyImJnR5cGVvZiByIT0ic3ltYm9sIiYmdHlwZW9mIHIhPSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoImBldmVudE5hbWVgIG11c3QgYmUgYSBzdHJpbmcsIHN5bWJvbCwgb3IgbnVtYmVyIil9ZnVuY3Rpb24gb3Qocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gQWUocixlKXtjb25zdCB0PWRlLmdldChyKTtpZighIXQuaGFzKGUpKXJldHVybiB0LmdldChlKX1mdW5jdGlvbiBVZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCJ8fHR5cGVvZiBlPT0ibnVtYmVyIj9lOmV0LG49Si5nZXQocik7aWYoISFuLmhhcyh0KSlyZXR1cm4gbi5nZXQodCl9ZnVuY3Rpb24gJG8ocixlLHQpe2NvbnN0IG49Si5nZXQocik7aWYobi5oYXMoZSkpZm9yKGNvbnN0IG8gb2Ygbi5nZXQoZSkpby5lbnF1ZXVlKHQpO2lmKG4uaGFzKGV0KSl7Y29uc3Qgbz1Qcm9taXNlLmFsbChbZSx0XSk7Zm9yKGNvbnN0IGkgb2Ygbi5nZXQoZXQpKWkuZW5xdWV1ZShvKX19ZnVuY3Rpb24gWHIocixlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07bGV0IHQ9ITEsbj0oKT0+e30sbz1bXTtjb25zdCBpPXtlbnF1ZXVlKHMpe28ucHVzaChzKSxuKCl9LGZpbmlzaCgpe3Q9ITAsbigpfX07Zm9yKGNvbnN0IHMgb2YgZSl7bGV0IGE9VWUocixzKTthfHwoYT1uZXcgU2V0LEouZ2V0KHIpLnNldChzLGEpKSxhLmFkZChpKX1yZXR1cm57YXN5bmMgbmV4dCgpe3JldHVybiBvP28ubGVuZ3RoPT09MD90PyhvPXZvaWQgMCx0aGlzLm5leHQoKSk6KGF3YWl0IG5ldyBQcm9taXNlKHM9PntuPXN9KSx0aGlzLm5leHQoKSk6e2RvbmU6ITEsdmFsdWU6YXdhaXQgby5zaGlmdCgpfTp7ZG9uZTohMH19LGFzeW5jIHJldHVybihzKXtvPXZvaWQgMDtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCB1PVVlKHIsYSk7dSYmKHUuZGVsZXRlKGkpLHUuc2l6ZT09PTAmJkouZ2V0KHIpLmRlbGV0ZShhKSl9cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgc306e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiBRcihyKXtpZihyPT09dm9pZCAwKXJldHVybiBxcjtpZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHIpaWYoIXFyLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHJ9Y29uc3QgSWU9cj0+cj09PXR0fHxyPT09cnQ7ZnVuY3Rpb24gaXQocixlLHQpe2lmKEllKGUpKXRyeXtudD0hMCxyLmVtaXQoZSx0KX1maW5hbGx5e250PSExfX1jbGFzcyBTZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1Rcih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIG8oKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgU2V9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDpvfSk7Y29uc3QgaT1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTppKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXt2YXIgZSx0O2lmKHR5cGVvZigoZT1nbG9iYWxUaGlzLnByb2Nlc3MpPT1udWxsP3ZvaWQgMDplLmVudikhPSJvYmplY3QiKXJldHVybiBWdDtjb25zdHtlbnY6bn09KHQ9Z2xvYmFsVGhpcy5wcm9jZXNzKSE9bnVsbD90OntlbnY6e319O3JldHVybiBuLkRFQlVHPT09ImVtaXR0ZXJ5Inx8bi5ERUJVRz09PSIqInx8VnR9c3RhdGljIHNldCBpc0RlYnVnRW5hYmxlZChlKXtWdD1lfWNvbnN0cnVjdG9yKGU9e30pe3ZhciB0O2VlLnNldCh0aGlzLG5ldyBTZXQpLGRlLnNldCh0aGlzLG5ldyBNYXApLEouc2V0KHRoaXMsbmV3IE1hcCksSi5nZXQodGhpcykuc2V0KGV0LG5ldyBTZXQpLHRoaXMuZGVidWc9KHQ9ZS5kZWJ1ZykhPW51bGw/dDp7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KG4sbyxpLHMpPT57dHJ5e3M9SlNPTi5zdHJpbmdpZnkocyl9Y2F0Y2h7cz1gT2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzIGZhaWxlZCB0byBzdHJpbmdpZnk6ICR7T2JqZWN0LmtleXMocykuam9pbigiLCIpfWB9KHR5cGVvZiBpPT0ic3ltYm9sInx8dHlwZW9mIGk9PSJudW1iZXIiKSYmKGk9aS50b1N0cmluZygpKTtjb25zdCBhPW5ldyBEYXRlLHU9YCR7YS5nZXRIb3VycygpfToke2EuZ2V0TWludXRlcygpfToke2EuZ2V0U2Vjb25kcygpfS4ke2EuZ2V0TWlsbGlzZWNvbmRzKCl9YDtjb25zb2xlLmxvZyhgWyR7dX1dW2VtaXR0ZXJ5OiR7bn1dWyR7b31dIEV2ZW50IE5hbWU6ICR7aX0KCWRhdGE6ICR7c31gKX0pfWxvZ0lmRGVidWdFbmFibGVkKGUsdCxuKXsoU2UuaXNEZWJ1Z0VuYWJsZWR8fHRoaXMuZGVidWcuZW5hYmxlZCkmJnRoaXMuZGVidWcubG9nZ2VyKGUsdGhpcy5kZWJ1Zy5uYW1lLHQsbil9b24oZSx0KXtvdCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSl7d2Uobik7bGV0IG89QWUodGhpcyxuKTtvfHwobz1uZXcgU2V0LGRlLmdldCh0aGlzKS5zZXQobixvKSksby5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksSWUobil8fGl0KHRoaXMsdHQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1yZXR1cm4gdGhpcy5vZmYuYmluZCh0aGlzLGUsdCl9b2ZmKGUsdCl7b3QodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpe3dlKG4pO2NvbnN0IG89QWUodGhpcyxuKTtvJiYoby5kZWxldGUodCksby5zaXplPT09MCYmZGUuZ2V0KHRoaXMpLmRlbGV0ZShuKSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmUiLG4sdm9pZCAwKSxJZShuKXx8aXQodGhpcyxydCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pfX1vbmNlKGUpe2xldCB0O2NvbnN0IG49bmV3IFByb21pc2Uobz0+e3Q9dGhpcy5vbihlLGk9Pnt0KCksbyhpKX0pfSk7cmV0dXJuIG4ub2ZmPXQsbn1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpd2UodCk7cmV0dXJuIFhyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe3ZhciBuO2lmKHdlKGUpLEllKGUpJiYhbnQpdGhyb3cgbmV3IFR5cGVFcnJvcigiYGV2ZW50TmFtZWAgY2Fubm90IGJlIG1ldGEgZXZlbnQgYGxpc3RlbmVyQWRkZWRgIG9yIGBsaXN0ZW5lclJlbW92ZWRgIik7dGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdCIsZSx0KSwkbyh0aGlzLGUsdCk7Y29uc3Qgbz0obj1BZSh0aGlzLGUpKSE9bnVsbD9uOm5ldyBTZXQsaT1lZS5nZXQodGhpcykscz1bLi4ub10sYT1JZShlKT9bXTpbLi4uaV07YXdhaXQgWXIsYXdhaXQgUHJvbWlzZS5hbGwoWy4uLnMubWFwKGFzeW5jIHU9PntpZihvLmhhcyh1KSlyZXR1cm4gdSh0KX0pLC4uLmEubWFwKGFzeW5jIHU9PntpZihpLmhhcyh1KSlyZXR1cm4gdShlLHQpfSldKX1hc3luYyBlbWl0U2VyaWFsKGUsdCl7dmFyIG47aWYod2UoZSksSWUoZSkmJiFudCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgZXZlbnROYW1lYCBjYW5ub3QgYmUgbWV0YSBldmVudCBgbGlzdGVuZXJBZGRlZGAgb3IgYGxpc3RlbmVyUmVtb3ZlZGAiKTt0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG89KG49QWUodGhpcyxlKSkhPW51bGw/bjpuZXcgU2V0LGk9ZWUuZ2V0KHRoaXMpLHM9Wy4uLm9dLGE9Wy4uLmldO2F3YWl0IFlyO2Zvcihjb25zdCB1IG9mIHMpby5oYXModSkmJmF3YWl0IHUodCk7Zm9yKGNvbnN0IHUgb2YgYSlpLmhhcyh1KSYmYXdhaXQgdShlLHQpfW9uQW55KGUpe3JldHVybiBvdChlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLGVlLmdldCh0aGlzKS5hZGQoZSksaXQodGhpcyx0dCx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBYcih0aGlzKX1vZmZBbnkoZSl7b3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLGl0KHRoaXMscnQse2xpc3RlbmVyOmV9KSxlZS5nZXQodGhpcykuZGVsZXRlKGUpfWNsZWFyTGlzdGVuZXJzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgdCBvZiBlKWlmKHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImNsZWFyIix0LHZvaWQgMCksdHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09InN5bWJvbCJ8fHR5cGVvZiB0PT0ibnVtYmVyIil7Y29uc3Qgbj1BZSh0aGlzLHQpO24mJm4uY2xlYXIoKTtjb25zdCBvPVVlKHRoaXMsdCk7aWYobyl7Zm9yKGNvbnN0IGkgb2YgbylpLmZpbmlzaCgpO28uY2xlYXIoKX19ZWxzZXtlZS5nZXQodGhpcykuY2xlYXIoKTtmb3IoY29uc3RbbixvXW9mIGRlLmdldCh0aGlzKS5lbnRyaWVzKCkpby5jbGVhcigpLGRlLmdldCh0aGlzKS5kZWxldGUobik7Zm9yKGNvbnN0W24sb11vZiBKLmdldCh0aGlzKS5lbnRyaWVzKCkpe2Zvcihjb25zdCBpIG9mIG8paS5maW5pc2goKTtvLmNsZWFyKCksSi5nZXQodGhpcykuZGVsZXRlKG4pfX19bGlzdGVuZXJDb3VudChlKXt2YXIgdCxuLG8saSxzLGE7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB1PTA7Zm9yKGNvbnN0IGYgb2YgZSl7aWYodHlwZW9mIGY9PSJzdHJpbmciKXt1Kz1lZS5nZXQodGhpcykuc2l6ZSsoKG49KHQ9QWUodGhpcyxmKSk9PW51bGw/dm9pZCAwOnQuc2l6ZSkhPW51bGw/bjowKSsoKGk9KG89VWUodGhpcyxmKSk9PW51bGw/dm9pZCAwOm8uc2l6ZSkhPW51bGw/aTowKSsoKGE9KHM9VWUodGhpcykpPT1udWxsP3ZvaWQgMDpzLnNpemUpIT1udWxsP2E6MCk7Y29udGludWV9dHlwZW9mIGY8InUiJiZ3ZShmKSx1Kz1lZS5nZXQodGhpcykuc2l6ZTtmb3IoY29uc3QgZCBvZiBkZS5nZXQodGhpcykudmFsdWVzKCkpdSs9ZC5zaXplO2Zvcihjb25zdCBkIG9mIEouZ2V0KHRoaXMpLnZhbHVlcygpKXUrPWQuc2l6ZX1yZXR1cm4gdX1iaW5kTWV0aG9kcyhlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBhbiBvYmplY3QiKTt0PVFyKHQpO2Zvcihjb25zdCBuIG9mIHQpe2lmKGVbbl0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke259XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITEsdmFsdWU6dGhpc1tuXS5iaW5kKHRoaXMpfSl9fX1jb25zdCBxcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTZS5wcm90b3R5cGUpLmZpbHRlcihyPT5yIT09ImNvbnN0cnVjdG9yIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNlLCJsaXN0ZW5lckFkZGVkIix7dmFsdWU6dHQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU2UsImxpc3RlbmVyUmVtb3ZlZCIse3ZhbHVlOnJ0LHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk7ZnVuY3Rpb24gV28ocil7cmV0dXJuIHIub25BbnkmJnIuZW1pdH1hc3luYyBmdW5jdGlvbiBWbyhyLGUpe2NvbnN0e2Z1bmN0aW9uTmFtZTp0LGFyZ3M6bn09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2lmKCF0KXRocm93Im1pc3NpbmcgZnVuY3Rpb24gbmFtZSB0byBjYWxsIjtpZighZS5pbnN0YW5jZVt0XSl0aHJvd2B1bmRlZmluZWQgZnVuY3Rpb24gWyR7dH1dIGluIGNsYXNzICR7ZS5pbnN0YW5jZS5jb25zdHJ1Y3Rvci53b3JrZXJJZH1gO09lKHIsYXdhaXQgZS5pbnN0YW5jZVt0XSguLi5uIT1udWxsP246W10pKX1jb25zdCBLcj1LKCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIEhvKHIsZSl7ZS53b3JrZXJJZD1yLGpyKCkmJihLcltlLndvcmtlcklkXT1lKX1mdW5jdGlvbiBqbyhyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdCxuXT1yLmFyZ3Msbz1Lclt0XTtpZihvKWUuaW5zdGFuY2U9bmV3IG8oci5hcmdzLnNsaWNlKDEpKTtlbHNlIHRocm93YHVua25vd24gd29ya2VyIGNsYXNzICR7dH1gO1plKG4sWCksV28oZS5pbnN0YW5jZSkmJmUuaW5zdGFuY2Uub25BbnkoKGkscyk9PntPZSh7dHlwZTpXLkVWRU5UfSx7bmFtZTppLGRhdGE6c30pfSksT2Uocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gWW8ocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksT2UocixuKX1mdW5jdGlvbiBYbyhyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjtaZShyLmFyZ3NbMF0sWCksT2Uocix7fSl9ZnVuY3Rpb24gUW8oKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBXLklOSVQ6am8odCxyKTticmVhaztjYXNlIFcuRk9SV0FSRDpWbyh0LHIpO2JyZWFrO2Nhc2UgVy5URVJNSU5BVEU6WW8odCxyKTticmVhaztjYXNlIFcuR0xPQkFMU19TWU5DOlhvKHQpO2JyZWFrfX19anIoKSYmUW8oKTtjbGFzcyBae31aLnVwZGF0ZXM9e3RyYW5zZm9ybWVyX25ldzoiTmV3IHRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lcl9udWxsOiJOdWxsIHRyYW5zZm9ybWVyIn0sWi5lcnJvcnM9e3RyYW5zZm9ybWVyX25vbmU6Ik5vIHRyYW5zZm9ybWVycyBwcm92aWRlZCIsdHJhbnNmb3JtZXJfc3RhcnQ6IkNhbm5vdCBzdGFydCB0cmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJfdHJhbnNmb3JtOiJDYW5ub3QgdHJhbnNmb3JtIGZyYW1lIix0cmFuc2Zvcm1lcl9mbHVzaDoiQ2Fubm90IGZsdXNoIHRyYW5zZm9ybWVyIixyZWFkYWJsZV9udWxsOiJSZWFkYWJsZSBpcyBudWxsIix3cml0YWJsZV9udWxsOiJXcml0YWJsZSBpcyBudWxsIn07ZnVuY3Rpb24gcW8ocil7cmV0dXJuIHImJnIuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsImRlZmF1bHQiKT9yLmRlZmF1bHQ6cn1jb25zdCB0ZT1uZXcgV2Vha01hcCxzdD1uZXcgV2Vha01hcCxOZT1uZXcgV2Vha01hcCxIdD1TeW1ib2woImFueVByb2R1Y2VyIiksSnI9UHJvbWlzZS5yZXNvbHZlKCksYXQ9U3ltYm9sKCJsaXN0ZW5lckFkZGVkIiksdXQ9U3ltYm9sKCJsaXN0ZW5lclJlbW92ZWQiKTtsZXQganQ9ITE7ZnVuY3Rpb24gUmUocil7aWYodHlwZW9mIHIhPSJzdHJpbmciJiZ0eXBlb2YgciE9InN5bWJvbCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXZlbnROYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2wiKX1mdW5jdGlvbiBjdChyKXtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBGZShyLGUpe2NvbnN0IHQ9c3QuZ2V0KHIpO3JldHVybiB0LmhhcyhlKXx8dC5zZXQoZSxuZXcgU2V0KSx0LmdldChlKX1mdW5jdGlvbiBMZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCI/ZTpIdCxuPU5lLmdldChyKTtyZXR1cm4gbi5oYXModCl8fG4uc2V0KHQsbmV3IFNldCksbi5nZXQodCl9ZnVuY3Rpb24gS28ocixlLHQpe2NvbnN0IG49TmUuZ2V0KHIpO2lmKG4uaGFzKGUpKWZvcihjb25zdCBvIG9mIG4uZ2V0KGUpKW8uZW5xdWV1ZSh0KTtpZihuLmhhcyhIdCkpe2NvbnN0IG89UHJvbWlzZS5hbGwoW2UsdF0pO2Zvcihjb25zdCBpIG9mIG4uZ2V0KEh0KSlpLmVucXVldWUobyl9fWZ1bmN0aW9uIFpyKHIsZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PSExLG49KCk9Pnt9LG89W107Y29uc3QgaT17ZW5xdWV1ZShzKXtvLnB1c2gocyksbigpfSxmaW5pc2goKXt0PSEwLG4oKX19O2Zvcihjb25zdCBzIG9mIGUpTGUocixzKS5hZGQoaSk7cmV0dXJue2FzeW5jIG5leHQoKXtyZXR1cm4gbz9vLmxlbmd0aD09PTA/dD8obz12b2lkIDAsdGhpcy5uZXh0KCkpOihhd2FpdCBuZXcgUHJvbWlzZShzPT57bj1zfSksdGhpcy5uZXh0KCkpOntkb25lOiExLHZhbHVlOmF3YWl0IG8uc2hpZnQoKX06e2RvbmU6ITB9fSxhc3luYyByZXR1cm4ocyl7bz12b2lkIDA7Zm9yKGNvbnN0IGEgb2YgZSlMZShyLGEpLmRlbGV0ZShpKTtyZXR1cm4gbigpLGFyZ3VtZW50cy5sZW5ndGg+MD97ZG9uZTohMCx2YWx1ZTphd2FpdCBzfTp7ZG9uZTohMH19LFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fWZ1bmN0aW9uIGVuKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIHRuO2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIik7Zm9yKGNvbnN0IGUgb2YgcilpZighdG4uaW5jbHVkZXMoZSkpdGhyb3cgdHlwZW9mIGUhPSJzdHJpbmciP25ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgZWxlbWVudCBtdXN0IGJlIGEgc3RyaW5nIik6bmV3IEVycm9yKGAke2V9IGlzIG5vdCBFbWl0dGVyeSBtZXRob2RgKTtyZXR1cm4gcn1jb25zdCBZdD1yPT5yPT09YXR8fHI9PT11dDtjbGFzcyBoZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1lbih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIG8oKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgaGV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDpvfSk7Y29uc3QgaT1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTppKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXtpZih0eXBlb2YgcHJvY2VzcyE9Im9iamVjdCIpcmV0dXJuIGp0O2NvbnN0e2VudjplfT1wcm9jZXNzfHx7ZW52Ont9fTtyZXR1cm4gZS5ERUJVRz09PSJlbWl0dGVyeSJ8fGUuREVCVUc9PT0iKiJ8fGp0fXN0YXRpYyBzZXQgaXNEZWJ1Z0VuYWJsZWQoZSl7anQ9ZX1jb25zdHJ1Y3RvcihlPXt9KXt0ZS5zZXQodGhpcyxuZXcgU2V0KSxzdC5zZXQodGhpcyxuZXcgTWFwKSxOZS5zZXQodGhpcyxuZXcgTWFwKSx0aGlzLmRlYnVnPWUuZGVidWd8fHt9LHRoaXMuZGVidWcuZW5hYmxlZD09PXZvaWQgMCYmKHRoaXMuZGVidWcuZW5hYmxlZD0hMSksdGhpcy5kZWJ1Zy5sb2dnZXJ8fCh0aGlzLmRlYnVnLmxvZ2dlcj0odCxuLG8saSk9Pnt0cnl7aT1KU09OLnN0cmluZ2lmeShpKX1jYXRjaHtpPWBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXMgZmFpbGVkIHRvIHN0cmluZ2lmeTogJHtPYmplY3Qua2V5cyhpKS5qb2luKCIsIil9YH10eXBlb2Ygbz09InN5bWJvbCImJihvPW8udG9TdHJpbmcoKSk7Y29uc3Qgcz1uZXcgRGF0ZSxhPWAke3MuZ2V0SG91cnMoKX06JHtzLmdldE1pbnV0ZXMoKX06JHtzLmdldFNlY29uZHMoKX0uJHtzLmdldE1pbGxpc2Vjb25kcygpfWA7Y29uc29sZS5sb2coYFske2F9XVtlbWl0dGVyeToke3R9XVske259XSBFdmVudCBOYW1lOiAke299CglkYXRhOiAke2l9YCl9KX1sb2dJZkRlYnVnRW5hYmxlZChlLHQsbil7KGhlLmlzRGVidWdFbmFibGVkfHx0aGlzLmRlYnVnLmVuYWJsZWQpJiZ0aGlzLmRlYnVnLmxvZ2dlcihlLHRoaXMuZGVidWcubmFtZSx0LG4pfW9uKGUsdCl7Y3QodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpUmUobiksRmUodGhpcyxuKS5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksWXQobil8fHRoaXMuZW1pdChhdCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pO3JldHVybiB0aGlzLm9mZi5iaW5kKHRoaXMsZSx0KX1vZmYoZSx0KXtjdCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSlSZShuKSxGZSh0aGlzLG4pLmRlbGV0ZSh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZSIsbix2b2lkIDApLFl0KG4pfHx0aGlzLmVtaXQodXQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1vbmNlKGUpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57Y29uc3Qgbj10aGlzLm9uKGUsbz0+e24oKSx0KG8pfSl9KX1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpUmUodCk7cmV0dXJuIFpyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe1JlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXQiLGUsdCksS28odGhpcyxlLHQpO2NvbnN0IG49RmUodGhpcyxlKSxvPXRlLmdldCh0aGlzKSxpPVsuLi5uXSxzPVl0KGUpP1tdOlsuLi5vXTthd2FpdCBKcixhd2FpdCBQcm9taXNlLmFsbChbLi4uaS5tYXAoYXN5bmMgYT0+e2lmKG4uaGFzKGEpKXJldHVybiBhKHQpfSksLi4ucy5tYXAoYXN5bmMgYT0+e2lmKG8uaGFzKGEpKXJldHVybiBhKGUsdCl9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSx0KXtSZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG49RmUodGhpcyxlKSxvPXRlLmdldCh0aGlzKSxpPVsuLi5uXSxzPVsuLi5vXTthd2FpdCBKcjtmb3IoY29uc3QgYSBvZiBpKW4uaGFzKGEpJiZhd2FpdCBhKHQpO2Zvcihjb25zdCBhIG9mIHMpby5oYXMoYSkmJmF3YWl0IGEoZSx0KX1vbkFueShlKXtyZXR1cm4gY3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSx0ZS5nZXQodGhpcykuYWRkKGUpLHRoaXMuZW1pdChhdCx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBacih0aGlzKX1vZmZBbnkoZSl7Y3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRoaXMuZW1pdCh1dCx7bGlzdGVuZXI6ZX0pLHRlLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHQsdm9pZCAwKSx0eXBlb2YgdD09InN0cmluZyJ8fHR5cGVvZiB0PT0ic3ltYm9sIil7RmUodGhpcyx0KS5jbGVhcigpO2NvbnN0IG49TGUodGhpcyx0KTtmb3IoY29uc3QgbyBvZiBuKW8uZmluaXNoKCk7bi5jbGVhcigpfWVsc2V7dGUuZ2V0KHRoaXMpLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2Ygc3QuZ2V0KHRoaXMpLnZhbHVlcygpKW4uY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBOZS5nZXQodGhpcykudmFsdWVzKCkpe2Zvcihjb25zdCBvIG9mIG4pby5maW5pc2goKTtuLmNsZWFyKCl9fX1saXN0ZW5lckNvdW50KGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0wO2Zvcihjb25zdCBuIG9mIGUpe2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7dCs9dGUuZ2V0KHRoaXMpLnNpemUrRmUodGhpcyxuKS5zaXplK0xlKHRoaXMsbikuc2l6ZStMZSh0aGlzKS5zaXplO2NvbnRpbnVlfXR5cGVvZiBuPCJ1IiYmUmUobiksdCs9dGUuZ2V0KHRoaXMpLnNpemU7Zm9yKGNvbnN0IG8gb2Ygc3QuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPW8uc2l6ZTtmb3IoY29uc3QgbyBvZiBOZS5nZXQodGhpcykudmFsdWVzKCkpdCs9by5zaXplfXJldHVybiB0fWJpbmRNZXRob2RzKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9ZW4odCk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fWNvbnN0IHRuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlLnByb3RvdHlwZSkuZmlsdGVyKHI9PnIhPT0iY29uc3RydWN0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGUsImxpc3RlbmVyQWRkZWQiLHt2YWx1ZTphdCx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoZSwibGlzdGVuZXJSZW1vdmVkIix7dmFsdWU6dXQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTt2YXIgSm89aGU7Y29uc3QgWHQ9cW8oSm8pO2Z1bmN0aW9uIFpvKHIpe3JldHVybiB0eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsJiYibWVzc2FnZSJpbiByJiZ0eXBlb2Ygci5tZXNzYWdlPT0ic3RyaW5nIn1mdW5jdGlvbiBlaShyKXtpZihabyhyKSlyZXR1cm4gcjt0cnl7cmV0dXJuIG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeShyKSl9Y2F0Y2h7cmV0dXJuIG5ldyBFcnJvcihTdHJpbmcocikpfX1mdW5jdGlvbiBRdChyKXtyZXR1cm4gZWkocikubWVzc2FnZX12YXIgdGk9T2JqZWN0LmRlZmluZVByb3BlcnR5LHJpPShyLGUsdCk9PmUgaW4gcj90aShyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpyW2VdPXQsbmk9KHIsZSx0KT0+KHJpKHIsdHlwZW9mIGUhPSJzeW1ib2wiP2UrIiI6ZSx0KSx0KTtjb25zdCBvaT0iaGxnLnRva2JveC5jb20vcHJvZC9sb2dnaW5nL3ZjcF93ZWJydGMiLGlpPSJodHRwczovLyIsc2k9MWU0O2xldCBmdDtjb25zdCBhaT1uZXcgVWludDhBcnJheSgxNik7ZnVuY3Rpb24gdWkoKXtpZighZnQmJihmdD10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byksIWZ0KSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIGZ0KGFpKX1jb25zdCBEPVtdO2ZvcihsZXQgcj0wO3I8MjU2OysrcilELnB1c2goKHIrMjU2KS50b1N0cmluZygxNikuc2xpY2UoMSkpO2Z1bmN0aW9uIGNpKHIsZT0wKXtyZXR1cm4oRFtyW2UrMF1dK0RbcltlKzFdXStEW3JbZSsyXV0rRFtyW2UrM11dKyItIitEW3JbZSs0XV0rRFtyW2UrNV1dKyItIitEW3JbZSs2XV0rRFtyW2UrN11dKyItIitEW3JbZSs4XV0rRFtyW2UrOV1dKyItIitEW3JbZSsxMF1dK0RbcltlKzExXV0rRFtyW2UrMTJdXStEW3JbZSsxM11dK0RbcltlKzE0XV0rRFtyW2UrMTVdXSkudG9Mb3dlckNhc2UoKX1jb25zdCBmaT10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLnJhbmRvbVVVSUQmJmNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKSxybj17cmFuZG9tVVVJRDpmaX07ZnVuY3Rpb24gbGkocixlLHQpe2lmKHJuLnJhbmRvbVVVSUQmJiFlJiYhcilyZXR1cm4gcm4ucmFuZG9tVVVJRCgpO3I9cnx8e307Y29uc3Qgbj1yLnJhbmRvbXx8KHIucm5nfHx1aSkoKTtpZihuWzZdPW5bNl0mMTV8NjQsbls4XT1uWzhdJjYzfDEyOCxlKXt0PXR8fDA7Zm9yKGxldCBvPTA7bzwxNjsrK28pZVt0K29dPW5bb107cmV0dXJuIGV9cmV0dXJuIGNpKG4pfWZ1bmN0aW9uIHF0KHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3QgcmU9cXQoImdsb2JhbHMiLHt9KTt2YXIgbWU9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKG1lfHx7fSk7ZnVuY3Rpb24gbm4ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnIgaW5zdGFuY2VvZiBlKX1sZXQgZGk9MDtmdW5jdGlvbiBoaShyLGUsdCxuLG8pe2NvbnN0IGk9ZGkrKztyZXR1cm4gci5wb3N0TWVzc2FnZSh7aWQ6aSx0eXBlOmUsZnVuY3Rpb25OYW1lOnQsYXJnczpufSxuLmZpbHRlcihzPT5ubihzKSkpLG5ldyBQcm9taXNlKHM9PntvPT1udWxsfHxvLnNldChpLHMpfSl9ZnVuY3Rpb24gemUocixlKXtjb25zdHtpZDp0LHR5cGU6bn09cixvPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnQsdHlwZTpuLHJlc3VsdDplfSxvLmZpbHRlcihpPT5ubihpKSkpfWNvbnN0IG9uPXF0KCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gc24oKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWFzeW5jIGZ1bmN0aW9uIG1pKCl7aWYoc24oKSl6ZSh7dHlwZTptZS5HTE9CQUxTX1NZTkN9LHJlKTtlbHNle2NvbnN0IHI9W107Zm9yKGNvbnN0IGUgaW4gb24pe2NvbnN0e3dvcmtlcjp0LHJlc29sdmVyczpufT1vbltlXS53b3JrZXJDb250ZXh0O3QmJnIucHVzaChoaSh0LG1lLkdMT0JBTFNfU1lOQywiIixbcmVdLG4pKX1hd2FpdCBQcm9taXNlLmFsbChyKX19ZnVuY3Rpb24gbHQocixlKXtpZihBcnJheS5pc0FycmF5KGUpKWUuc3BsaWNlKDAsZS5sZW5ndGgpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWZvcihjb25zdCB0IGluIGUpZGVsZXRlIGVbdF07Zm9yKGNvbnN0IHQgaW4gcilBcnJheS5pc0FycmF5KHJbdF0pPyhlW3RdPVtdLGx0KHJbdF0sZVt0XSkpOnR5cGVvZiByW3RdPT0ib2JqZWN0Ij8oZVt0XT17fSxsdChyW3RdLGVbdF0pKTplW3RdPXJbdF19YXN5bmMgZnVuY3Rpb24gcGkocixlKXtjb25zdHtmdW5jdGlvbk5hbWU6dCxhcmdzOm59PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighdCl0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2VbdF0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3R9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDt6ZShyLGF3YWl0IGUuaW5zdGFuY2VbdF0oLi4ubiE9bnVsbD9uOltdKSl9Y29uc3QgZ2k9cXQoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24geWkocixlKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgY2xhc3NOYW1lIHdoaWxlIGluaXRpYWxpemluZyB3b3JrZXIiO2NvbnN0W3Qsbl09ci5hcmdzLG89Z2lbdF07aWYobyllLmluc3RhbmNlPW5ldyBvKHIuYXJncy5zbGljZSgxKSk7ZWxzZSB0aHJvd2B1bmtub3duIHdvcmtlciBjbGFzcyAke3R9YDtsdChuLHJlKSx6ZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBiaShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSx6ZShyLG4pfWZ1bmN0aW9uIHhpKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO2x0KHIuYXJnc1swXSxyZSksemUocix7fSl9ZnVuY3Rpb24gX2koKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBtZS5JTklUOnlpKHQscik7YnJlYWs7Y2FzZSBtZS5GT1JXQVJEOnBpKHQscik7YnJlYWs7Y2FzZSBtZS5URVJNSU5BVEU6YmkodCxyKTticmVhaztjYXNlIG1lLkdMT0JBTFNfU1lOQzp4aSh0KTticmVha319fXNuKCkmJl9pKCk7ZnVuY3Rpb24gdmkocixlKXtyZXR1cm4gcmVbcl18fChyZVtyXT1lKSxbKCk9PnJlW3JdLGFzeW5jIHQ9PntyZVtyXT10LGF3YWl0IG1pKCl9XX1mdW5jdGlvbiBFaShyLGUpe3JldHVybiB2aShyLGUpfWNvbnN0W1RpLHdpXT1FaSgibWV0YWRhdGEiKTtmdW5jdGlvbiBBaShyKXt3aShyKX1mdW5jdGlvbiBLdCgpe3JldHVybiBUaSgpfWNsYXNzIEp0e2NvbnN0cnVjdG9yKGUsdCl7bmkodGhpcywidXVpZCIpLHRoaXMuY29uZmlnPWUsdGhpcy51dWlkPXQhPW51bGw/dDpsaSgpfWFzeW5jIHNlbmQoZSl7dmFyIHQsbixvO2NvbnN0e2FwcElkOmksc291cmNlVHlwZTpzfT0odD1LdCgpKSE9bnVsbD90Ont9O2lmKCFpfHwhcylyZXR1cm4ibWV0YWRhdGEgbWlzc2luZyI7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLHU9c2V0VGltZW91dCgoKT0+YS5hYm9ydCgpLHNpKTtyZXR1cm4gYXdhaXQoKG89KG49dGhpcy5jb25maWcpPT1udWxsP3ZvaWQgMDpuLmZldGNoKSE9bnVsbD9vOmZldGNoKSh0aGlzLmdldFVybCgpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6dGhpcy5nZXRIZWFkZXJzKCksYm9keTpKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkUmVwb3J0KGUpKSxzaWduYWw6YS5zaWduYWx9KSxjbGVhclRpbWVvdXQodSksInN1Y2Nlc3MifWdldFVybCgpe3ZhciBlO2xldCB0PShlPUt0KCkucHJveHlVcmwpIT1udWxsP2U6aWk7cmV0dXJuIHQrPSh0LmF0KC0xKT09PSIvIj8iIjoiLyIpK29pLHR9Z2V0SGVhZGVycygpe3JldHVybnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fWJ1aWxkUmVwb3J0KGUpe2NvbnN0IHQ9S3QoKTtyZXR1cm57Z3VpZDp0aGlzLnV1aWQsLi4uZSxhcHBsaWNhdGlvbklkOnQuYXBwSWQsdGltZXN0YW1wOkRhdGUubm93KCkscHJveHlVcmw6dC5wcm94eVVybCxzb3VyY2U6dC5zb3VyY2VUeXBlfX19Y29uc3QgZHQ9IjIuMC40IjtjbGFzcyBJaXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuY29uZmlnPWUsdGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQ9MCx0aGlzLmZyYW1lRnJvbVNvdXJjZUNvdW50PTAsdGhpcy5zdGFydEF0PTAsdGhpcy5yZXBvcnRlcj1uZXcgSnQoZSx0KX1hc3luYyBvbkZyYW1lRnJvbVNvdXJjZSgpe3RoaXMuZnJhbWVGcm9tU291cmNlQ291bnQrK31nZXQgZnBzKCl7Y29uc3R7c3RhcnRBdDplLGZyYW1lRnJvbVNvdXJjZUNvdW50OnR9PXRoaXMsbj0oRGF0ZS5ub3coKS1lKS8xZTM7cmV0dXJuIHQvbn1hc3luYyBvbkZyYW1lVHJhbnNmb3JtZWQoZT17fSx0PSExKXt0aGlzLnN0YXJ0QXQ9PT0wJiYodGhpcy5zdGFydEF0PURhdGUubm93KCkpLHRoaXMuZnJhbWVUcmFuc2Zvcm1lZENvdW50Kys7Y29uc3R7c3RhcnRBdDpuLGZyYW1lVHJhbnNmb3JtZWRDb3VudDpvLGZyYW1lRnJvbVNvdXJjZUNvdW50Oml9PXRoaXMscz1EYXRlLm5vdygpLGE9KHMtbikvMWUzLHU9by9hLGY9aS9hO3JldHVybiB0fHx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudD49dGhpcy5jb25maWcubG9nZ2luZ0ludGVydmFsRnJhbWVDb3VudD8odGhpcy5mcmFtZUZyb21Tb3VyY2VDb3VudD0wLHRoaXMuZnJhbWVUcmFuc2Zvcm1lZENvdW50PTAsdGhpcy5zdGFydEF0PXMsdGhpcy5yZXBvcnRlci5jb25maWc9dGhpcy5jb25maWcsdGhpcy5yZXBvcnRlci5zZW5kKHsuLi50aGlzLmNvbmZpZy5yZXBvcnQsdmFyaWF0aW9uOiJRb1MiLGZwczpmLHRyYW5zZm9ybWVkRnBzOnUsZnJhbWVzVHJhbnNmb3JtZWQ6bywuLi5lfSkpOiJzdWNjZXNzIn19dmFyIFp0PShyPT4oci5waXBlbGluZV9lbmRlZD0icGlwZWxpbmVfZW5kZWQiLHIucGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9zdGFydGVkPSJwaXBlbGluZV9zdGFydGVkIixyLnBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIixyLnBpcGVsaW5lX3Jlc3RhcnRlZD0icGlwZWxpbmVfcmVzdGFydGVkIixyLnBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvciIscikpKFp0fHx7fSk7Y29uc3QgU2k9NTAwLFJpPS44O2NsYXNzIEZpIGV4dGVuZHMgWHR7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMucmVwb3J0ZXJfPW5ldyBKdCx0aGlzLnJlcG9ydGVyUW9zXz1uZXcgSWkoe2xvZ2dpbmdJbnRlcnZhbEZyYW1lQ291bnQ6U2kscmVwb3J0Ont2ZXJzaW9uOmR0fX0pLHRoaXMuaW5kZXhfPXQsdGhpcy50cmFuc2Zvcm1lcl89ZSx0aGlzLnNob3VsZFN0b3BfPSExLHRoaXMuaXNGbGFzaGVkXz0hMSx0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89MCx0aGlzLnZpZGVvSGVpZ2h0Xz0wLHRoaXMudmlkZW9XaWR0aF89MCx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMSx0aGlzLnRyYW5zZm9ybWVyVHlwZV89IkN1c3RvbSIsImdldFRyYW5zZm9ybWVyVHlwZSJpbiBlJiYodGhpcy50cmFuc2Zvcm1lclR5cGVfPWUuZ2V0VHJhbnNmb3JtZXJUeXBlKCkpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkNyZWF0ZSJ9KX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lfWFzeW5jIHN0YXJ0KGUpe2lmKHRoaXMuY29udHJvbGxlcl89ZSx0aGlzLnRyYW5zZm9ybWVyXyYmdHlwZW9mIHRoaXMudHJhbnNmb3JtZXJfLnN0YXJ0PT0iZnVuY3Rpb24iKXRyeXthd2FpdCB0aGlzLnRyYW5zZm9ybWVyXy5zdGFydChlKX1jYXRjaCh0KXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpaLmVycm9ycy50cmFuc2Zvcm1lcl9zdGFydCx2YXJpYXRpb246IkVycm9yIixlcnJvcjpRdCh0KX0pO2NvbnN0IG49e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOnQsZnVuY3Rpb246InN0YXJ0In07dGhpcy5lbWl0KCJlcnJvciIsbil9fWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBpLHM7dmFyIG4sbztpZih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89PT0wJiYodGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPURhdGUubm93KCkpLGUgaW5zdGFuY2VvZiBWaWRlb0ZyYW1lJiYodGhpcy52aWRlb0hlaWdodF89KGk9ZT09bnVsbD92b2lkIDA6ZS5kaXNwbGF5SGVpZ2h0KSE9bnVsbD9pOjAsdGhpcy52aWRlb1dpZHRoXz0ocz1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlXaWR0aCkhPW51bGw/czowKSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lRnJvbVNvdXJjZSgpLHRoaXMudHJhbnNmb3JtZXJfKWlmKHRoaXMuc2hvdWxkU3RvcF8pY29uc29sZS53YXJuKCJbUGlwZWxpbmVdIGZsdXNoIGZyb20gdHJhbnNmb3JtIiksZS5jbG9zZSgpLHRoaXMuZmx1c2godCksdC50ZXJtaW5hdGUoKTtlbHNle3RyeXthd2FpdCgobz0obj10aGlzLnRyYW5zZm9ybWVyXykudHJhbnNmb3JtKT09bnVsbD92b2lkIDA6by5jYWxsKG4sZSx0KSksdGhpcy5yZXBvcnRRb3MoKX1jYXRjaChhKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpaLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0sdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6UXQoYSl9KTtjb25zdCB1PXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIix1KX1pZih0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKlJpPnRoaXMucmVwb3J0ZXJRb3NfLmZwcyl7Y29uc3QgYT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dGhpcy5yZXBvcnRlclFvc18uZnBzfX07dGhpcy5lbWl0KCJ3YXJuIixhKX19fWFzeW5jIGZsdXNoKGUpe2lmKHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2g9PSJmdW5jdGlvbiImJiF0aGlzLmlzRmxhc2hlZF8pe3RoaXMuaXNGbGFzaGVkXz0hMDt0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2goZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6Wi5lcnJvcnMudHJhbnNmb3JtZXJfZmx1c2gsdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6UXQodCl9KTtjb25zdCBuPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjp0LGZ1bmN0aW9uOiJmbHVzaCJ9O3RoaXMuZW1pdCgiZXJyb3IiLG4pfX10aGlzLnJlcG9ydFFvcyghMCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pfXN0b3AoKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTdG9wIHN0cmVhbS4iKSx0aGlzLmNvbnRyb2xsZXJfJiYodGhpcy5mbHVzaCh0aGlzLmNvbnRyb2xsZXJfKSx0aGlzLmNvbnRyb2xsZXJfLnRlcm1pbmF0ZSgpKSx0aGlzLnNob3VsZFN0b3BfPSEwfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOmR0LGFjdGlvbjoiTWVkaWFUcmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJUeXBlOnRoaXMudHJhbnNmb3JtZXJUeXBlXywuLi5lfSl9cmVwb3J0UW9zKGU9ITEpe3RoaXMucmVwb3J0ZXJRb3NfLmNvbmZpZz17Li4udGhpcy5yZXBvcnRlclFvc18uY29uZmlnfSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lVHJhbnNmb3JtZWQoe3ZlcnNpb246ZHQsYWN0aW9uOiJNZWRpYVRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lclR5cGU6dGhpcy50cmFuc2Zvcm1lclR5cGVfLHZpZGVvV2lkdGg6dGhpcy52aWRlb1dpZHRoXyx2aWRlb0hlaWdodDp0aGlzLnZpZGVvSGVpZ2h0X30sZSl9fWNsYXNzIFBpIGV4dGVuZHMgWHR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRyYW5zZm9ybWVyc189W10sdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTE7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPW5ldyBGaShlW3RdLHQpO24ub24oImVycm9yIixvPT57dGhpcy5lbWl0KCJlcnJvciIsbyl9KSxuLm9uKCJ3YXJuIixvPT57dGhpcy5lbWl0KCJ3YXJuIixvKX0pLHRoaXMudHJhbnNmb3JtZXJzXy5wdXNoKG4pfX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lO2ZvcihsZXQgdCBvZiB0aGlzLnRyYW5zZm9ybWVyc18pdC5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9YXN5bmMgc3RhcnQoZSx0KXtpZighdGhpcy50cmFuc2Zvcm1lcnNffHx0aGlzLnRyYW5zZm9ybWVyc18ubGVuZ3RoPT09MCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gTm8gdHJhbnNmb3JtZXJzLiIpO3JldHVybn10cnl7bGV0IG49ZTtmb3IobGV0IG8gb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWU9ZS5waXBlVGhyb3VnaChuZXcgVHJhbnNmb3JtU3RyZWFtKG8pKTtlLnBpcGVUbyh0KS50aGVuKGFzeW5jKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTZXR1cC4iKSxhd2FpdCB0LmFib3J0KCksYXdhaXQgbi5jYW5jZWwoKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX2VuZGVkIil9KS5jYXRjaChhc3luYyBvPT57ZS5jYW5jZWwoKS50aGVuKCgpPT57Y29uc29sZS5sb2coIltQaXBlbGluZV0gU2h1dHRpbmcgZG93biBzdHJlYW1zIGFmdGVyIGFib3J0LiIpfSkuY2F0Y2goaT0+e2NvbnNvbGUuZXJyb3IoIltQaXBlbGluZV0gRXJyb3IgZnJvbSBzdHJlYW0gdHJhbnNmb3JtOiIsaSl9KSxhd2FpdCB0LmFib3J0KG8pLGF3YWl0IG4uY2FuY2VsKG8pLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIpfSl9Y2F0Y2h7dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiKSx0aGlzLmRlc3Ryb3koKTtyZXR1cm59dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkIiksY29uc29sZS5sb2coIltQaXBlbGluZV0gUGlwZWxpbmUgc3RhcnRlZC4iKX1hc3luYyBkZXN0cm95KCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gRGVzdHJveWluZyBQaXBlbGluZS4iKTtmb3IobGV0IGUgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWUuc3RvcCgpfX1jbGFzcyBraSBleHRlbmRzIFh0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnJlcG9ydGVyXz1uZXcgSnQsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWUsdGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX10cmFuc2Zvcm0oZSx0KXtyZXR1cm4gdGhpcy5yZWFkYWJsZV89ZSx0aGlzLndyaXRhYmxlXz10LHRoaXMudHJhbnNmb3JtSW50ZXJuYWwoKX10cmFuc2Zvcm1JbnRlcm5hbCgpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhlLHQpPT57aWYoIXRoaXMudHJhbnNmb3JtZXJzX3x8dGhpcy50cmFuc2Zvcm1lcnNfLmxlbmd0aD09PTApe3RoaXMucmVwb3J0KHttZXNzYWdlOlouZXJyb3JzLnRyYW5zZm9ybWVyX25vbmUsdmFyaWF0aW9uOiJFcnJvciJ9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIE5lZWQgdG8gc2V0IHRyYW5zZm9ybWVycy4iKTtyZXR1cm59aWYoIXRoaXMucmVhZGFibGVfKXt0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJFcnJvciIsbWVzc2FnZTpaLmVycm9ycy5yZWFkYWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBSZWFkYWJsZSBpcyBudWxsLiIpO3JldHVybn1pZighdGhpcy53cml0YWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOlouZXJyb3JzLndyaXRhYmxlX251bGx9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIFdyaXRhYmxlIGlzIG51bGwuIik7cmV0dXJufWxldCBuPSExO3RoaXMucGlwZWxpbmVfJiYobj0hMCx0aGlzLnBpcGVsaW5lXy5jbGVhckxpc3RlbmVycygpLHRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKSksdGhpcy5waXBlbGluZV89bmV3IFBpKHRoaXMudHJhbnNmb3JtZXJzXyksdGhpcy5waXBlbGluZV8ub24oIndhcm4iLG89Pnt0aGlzLmVtaXQoIndhcm4iLG8pfSksdGhpcy5waXBlbGluZV8ub24oImVycm9yIixvPT57dGhpcy5lbWl0KCJlcnJvciIsbyl9KSx0aGlzLnBpcGVsaW5lXy5vbigicGlwZWxpbmVJbmZvIixvPT57biYmKG89PT0icGlwZWxpbmVfc3RhcnRlZCI/bz1adC5waXBlbGluZV9yZXN0YXJ0ZWQ6bz09PSJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiJiYobz1adC5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcikpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIixvKX0pLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfIT0tMSYmdGhpcy5waXBlbGluZV8uc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8pLHRoaXMucGlwZWxpbmVfLnN0YXJ0KHRoaXMucmVhZGFibGVfLHRoaXMud3JpdGFibGVfKS50aGVuKCgpPT57ZSgpfSkuY2F0Y2gobz0+e3Qobyl9KX0pfXNldFRyYW5zZm9ybWVycyhlKXtyZXR1cm4gdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIixtZXNzYWdlOloudXBkYXRlcy50cmFuc2Zvcm1lcl9uZXd9KSx0aGlzLnRyYW5zZm9ybWVyc189ZSx0aGlzLnJlYWRhYmxlXyYmdGhpcy53cml0YWJsZV8/dGhpcy50cmFuc2Zvcm1JbnRlcm5hbCgpOlByb21pc2UucmVzb2x2ZSgpfWRlc3Ryb3koKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZT0+e3RoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pLGUoKX0pfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOmR0LGFjdGlvbjoiTWVkaWFQcm9jZXNzb3IiLC4uLmV9KX19dmFyIERpPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxDaT0ocixlLHQpPT5lIGluIHI/RGkocixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSk6cltlXT10LEJpPShyLGUsdCk9PihDaShyLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCksdCk7Y29uc3QgTWk9ImhsZy50b2tib3guY29tL3Byb2QvbG9nZ2luZy92Y3Bfd2VicnRjIixPaT0iaHR0cHM6Ly8iLFVpPTFlNDtsZXQgaHQ7Y29uc3QgTmk9bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIExpKCl7aWYoIWh0JiYoaHQ9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pLCFodCkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBodChOaSl9Y29uc3QgQz1bXTtmb3IobGV0IHI9MDtyPDI1NjsrK3IpQy5wdXNoKChyKzI1NikudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtmdW5jdGlvbiB6aShyLGU9MCl7cmV0dXJuKENbcltlKzBdXStDW3JbZSsxXV0rQ1tyW2UrMl1dK0NbcltlKzNdXSsiLSIrQ1tyW2UrNF1dK0NbcltlKzVdXSsiLSIrQ1tyW2UrNl1dK0NbcltlKzddXSsiLSIrQ1tyW2UrOF1dK0NbcltlKzldXSsiLSIrQ1tyW2UrMTBdXStDW3JbZSsxMV1dK0NbcltlKzEyXV0rQ1tyW2UrMTNdXStDW3JbZSsxNF1dK0NbcltlKzE1XV0pLnRvTG93ZXJDYXNlKCl9Y29uc3QgR2k9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5yYW5kb21VVUlEJiZjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byksYW49e3JhbmRvbVVVSUQ6R2l9O2Z1bmN0aW9uICRpKHIsZSx0KXtpZihhbi5yYW5kb21VVUlEJiYhZSYmIXIpcmV0dXJuIGFuLnJhbmRvbVVVSUQoKTtyPXJ8fHt9O2NvbnN0IG49ci5yYW5kb218fChyLnJuZ3x8TGkpKCk7aWYobls2XT1uWzZdJjE1fDY0LG5bOF09bls4XSY2M3wxMjgsZSl7dD10fHwwO2ZvcihsZXQgbz0wO288MTY7KytvKWVbdCtvXT1uW29dO3JldHVybiBlfXJldHVybiB6aShuKX1mdW5jdGlvbiBlcihyLGUpe2dsb2JhbFRoaXMudm9uYWdlfHwoZ2xvYmFsVGhpcy52b25hZ2U9e30pLGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXJ8fChnbG9iYWxUaGlzLnZvbmFnZS53b3JrZXJpemVyPXt9KTtsZXQgdD1nbG9iYWxUaGlzLnZvbmFnZS53b3JrZXJpemVyO3JldHVybiB0W3JdfHwodFtyXT1lKSx0W3JdfWNvbnN0IG5lPWVyKCJnbG9iYWxzIix7fSk7dmFyIHBlPShyPT4oci5JTklUPSJJTklUIixyLkZPUldBUkQ9IkZPUldBUkQiLHIuVEVSTUlOQVRFPSJURVJNSU5BVEUiLHIuR0xPQkFMU19TWU5DPSJHTE9CQUxTX1NZTkMiLHIpKShwZXx8e30pO2Z1bmN0aW9uIHVuKHIpe3JldHVybltJbWFnZUJpdG1hcCxSZWFkYWJsZVN0cmVhbSxXcml0YWJsZVN0cmVhbV0uc29tZShlPT5yIGluc3RhbmNlb2YgZSl9bGV0IFdpPTA7ZnVuY3Rpb24gVmkocixlLHQsbixvKXtjb25zdCBpPVdpKys7cmV0dXJuIHIucG9zdE1lc3NhZ2Uoe2lkOmksdHlwZTplLGZ1bmN0aW9uTmFtZTp0LGFyZ3M6bn0sbi5maWx0ZXIocz0+dW4ocykpKSxuZXcgUHJvbWlzZShzPT57bz09bnVsbHx8by5zZXQoaSxzKX0pfWZ1bmN0aW9uIEdlKHIsZSl7Y29uc3R7aWQ6dCx0eXBlOm59PXIsbz1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHR5cGU6bixyZXN1bHQ6ZX0sby5maWx0ZXIoaT0+dW4oaSkpKX1jb25zdCBjbj1lcigid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIGZuKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1hc3luYyBmdW5jdGlvbiBIaSgpe2lmKGZuKCkpR2Uoe3R5cGU6cGUuR0xPQkFMU19TWU5DfSxuZSk7ZWxzZXtjb25zdCByPVtdO2Zvcihjb25zdCBlIGluIGNuKXtjb25zdHt3b3JrZXI6dCxyZXNvbHZlcnM6bn09Y25bZV0ud29ya2VyQ29udGV4dDt0JiZyLnB1c2goVmkodCxwZS5HTE9CQUxTX1NZTkMsIiIsW25lXSxuKSl9YXdhaXQgUHJvbWlzZS5hbGwocil9fWZ1bmN0aW9uIG10KHIsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgdCBpbiBlKWRlbGV0ZSBlW3RdO2Zvcihjb25zdCB0IGluIHIpQXJyYXkuaXNBcnJheShyW3RdKT8oZVt0XT1bXSxtdChyW3RdLGVbdF0pKTp0eXBlb2Ygclt0XT09Im9iamVjdCI/KGVbdF09e30sbXQoclt0XSxlW3RdKSk6ZVt0XT1yW3RdfWFzeW5jIGZ1bmN0aW9uIGppKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7R2Uocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWNvbnN0IFlpPWVyKCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIFhpKHIsZSl7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFt0LG5dPXIuYXJncyxvPVlpW3RdO2lmKG8pZS5pbnN0YW5jZT1uZXcgbyhyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7bXQobixuZSksR2Uocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gUWkocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksR2UocixuKX1mdW5jdGlvbiBxaShyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjttdChyLmFyZ3NbMF0sbmUpLEdlKHIse30pfWZ1bmN0aW9uIEtpKCl7Y29uc3Qgcj17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHQ9ZS5kYXRhO3N3aXRjaCh0LnR5cGUpe2Nhc2UgcGUuSU5JVDpYaSh0LHIpO2JyZWFrO2Nhc2UgcGUuRk9SV0FSRDpqaSh0LHIpO2JyZWFrO2Nhc2UgcGUuVEVSTUlOQVRFOlFpKHQscik7YnJlYWs7Y2FzZSBwZS5HTE9CQUxTX1NZTkM6cWkodCk7YnJlYWt9fX1mbigpJiZLaSgpO2Z1bmN0aW9uIEppKHIsZSl7cmV0dXJuIG5lW3JdfHwobmVbcl09ZSksWygpPT5uZVtyXSxhc3luYyB0PT57bmVbcl09dCxhd2FpdCBIaSgpfV19ZnVuY3Rpb24gWmkocixlKXtyZXR1cm4gSmkocixlKX1jb25zdFtlcyxXbF09WmkoIm1ldGFkYXRhIik7ZnVuY3Rpb24gdHIoKXtyZXR1cm4gZXMoKX1jbGFzcyB0c3tjb25zdHJ1Y3RvcihlKXtCaSh0aGlzLCJ1dWlkIiwkaSgpKSx0aGlzLmNvbmZpZz1lfWFzeW5jIHNlbmQoZSl7dmFyIHQsbixvO2NvbnN0e2FwcElkOmksc291cmNlVHlwZTpzfT0odD10cigpKSE9bnVsbD90Ont9O2lmKCFpfHwhcylyZXR1cm4ibWV0YWRhdGEgbWlzc2luZyI7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLHU9c2V0VGltZW91dCgoKT0+YS5hYm9ydCgpLFVpKTtyZXR1cm4gYXdhaXQoKG89KG49dGhpcy5jb25maWcpPT1udWxsP3ZvaWQgMDpuLmZldGNoKSE9bnVsbD9vOmZldGNoKSh0aGlzLmdldFVybCgpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6dGhpcy5nZXRIZWFkZXJzKCksYm9keTpKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkUmVwb3J0KGUpKSxzaWduYWw6YS5zaWduYWx9KSxjbGVhclRpbWVvdXQodSksInN1Y2Nlc3MifWdldFVybCgpe3ZhciBlO2xldCB0PShlPXRyKCkucHJveHlVcmwpIT1udWxsP2U6T2k7cmV0dXJuIHQrPSh0LmF0KC0xKT09PSIvIj8iIjoiLyIpK01pLHR9Z2V0SGVhZGVycygpe3JldHVybnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fWJ1aWxkUmVwb3J0KGUpe2NvbnN0IHQ9dHIoKTtyZXR1cm57Z3VpZDp0aGlzLnV1aWQsLi4uZSxhcHBsaWNhdGlvbklkOnQuYXBwSWQsdGltZXN0YW1wOkRhdGUubm93KCkscHJveHlVcmw6dC5wcm94eVVybCxzb3VyY2U6dC5zb3VyY2VUeXBlfX19Y29uc3QgcnM9IjUuMS4zIjt2YXIgcHQ9KHI9PihyLkxvdz0iTG93IixyLkhpZ2g9IkhpZ2giLHIpKShwdHx8e30pLHJyPShyPT4oci5GQVNUPSJGQVNUIixyLlBSRUNJU0U9IlBSRUNJU0UiLHIpKShycnx8e30pLGd0PShyPT4oci5DQU5WQVM9IkNBTlZBUyIsci5XRUJHTD0iV0VCR0wiLHIpKShndHx8e30pLG5zPWZ1bmN0aW9uKCl7dmFyIHI9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdD9kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYzp2b2lkIDA7cmV0dXJuIGZ1bmN0aW9uKGUpe2U9ZXx8e307dmFyIHQ9dHlwZW9mIGU8InUiP2U6e30sbixvO3QucmVhZHk9bmV3IFByb21pc2UoZnVuY3Rpb24oYyxtKXtuPWMsbz1tfSk7dmFyIGk9e30scztmb3IocyBpbiB0KXQuaGFzT3duUHJvcGVydHkocykmJihpW3NdPXRbc10pO3ZhciBhPSIuL3RoaXMucHJvZ3JhbSIsdT1mdW5jdGlvbihjLG0pe3Rocm93IG19LGY9ITAsZD0iIjtmdW5jdGlvbiBwKGMpe3JldHVybiB0LmxvY2F0ZUZpbGU/dC5sb2NhdGVGaWxlKGMsZCk6ZCtjfXZhciBnO3R5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihkPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSxyJiYoZD1yKSxkLmluZGV4T2YoImJsb2I6IikhPT0wP2Q9ZC5zdWJzdHIoMCxkLnJlcGxhY2UoL1s/I10uKi8sIiIpLmxhc3RJbmRleE9mKCIvIikrMSk6ZD0iIjt2YXIgYj10LnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGg9dC5wcmludEVycnx8Y29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7Zm9yKHMgaW4gaSlpLmhhc093blByb3BlcnR5KHMpJiYodFtzXT1pW3NdKTtpPW51bGwsdC5hcmd1bWVudHMmJnQuYXJndW1lbnRzLHQudGhpc1Byb2dyYW0mJihhPXQudGhpc1Byb2dyYW0pLHQucXVpdCYmKHU9dC5xdWl0KTt2YXIgeDt0Lndhc21CaW5hcnkmJih4PXQud2FzbUJpbmFyeSk7dmFyIEU9dC5ub0V4aXRSdW50aW1lfHwhMDt0eXBlb2YgV2ViQXNzZW1ibHkhPSJvYmplY3QiJiZsZSgibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCIpO3ZhciB2LFI9ITEsUD10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMDtmdW5jdGlvbiB6KGMsbSx5KXtmb3IodmFyIFQ9bSt5LGs9bTtjW2tdJiYhKGs+PVQpOykrK2s7aWYoay1tPjE2JiZjLnN1YmFycmF5JiZQKXJldHVybiBQLmRlY29kZShjLnN1YmFycmF5KG0saykpO2Zvcih2YXIgQj0iIjttPGs7KXt2YXIgdz1jW20rK107aWYoISh3JjEyOCkpe0IrPVN0cmluZy5mcm9tQ2hhckNvZGUodyk7Y29udGludWV9dmFyIE89Y1ttKytdJjYzO2lmKCh3JjIyNCk9PTE5Mil7Qis9U3RyaW5nLmZyb21DaGFyQ29kZSgodyYzMSk8PDZ8Tyk7Y29udGludWV9dmFyIHE9Y1ttKytdJjYzO2lmKCh3JjI0MCk9PTIyND93PSh3JjE1KTw8MTJ8Tzw8NnxxOnc9KHcmNyk8PDE4fE88PDEyfHE8PDZ8Y1ttKytdJjYzLHc8NjU1MzYpQis9U3RyaW5nLmZyb21DaGFyQ29kZSh3KTtlbHNle3ZhciB6bz13LTY1NTM2O0IrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8em8+PjEwLDU2MzIwfHpvJjEwMjMpfX1yZXR1cm4gQn1mdW5jdGlvbiBMKGMsbSl7cmV0dXJuIGM/eihmZSxjLG0pOiIifWZ1bmN0aW9uIFYoYyxtLHkpe2Zvcih2YXIgVD0wO1Q8Yy5sZW5ndGg7KytUKUVlW20rKz4+MF09Yy5jaGFyQ29kZUF0KFQpO3l8fChFZVttPj4wXT0wKX1mdW5jdGlvbiBHKGMsbSl7cmV0dXJuIGMlbT4wJiYoYys9bS1jJW0pLGN9dmFyIHFlLEVlLGZlLCQ7ZnVuY3Rpb24gQ28oYyl7cWU9Yyx0LkhFQVA4PUVlPW5ldyBJbnQ4QXJyYXkoYyksdC5IRUFQMTY9bmV3IEludDE2QXJyYXkoYyksdC5IRUFQMzI9JD1uZXcgSW50MzJBcnJheShjKSx0LkhFQVBVOD1mZT1uZXcgVWludDhBcnJheShjKSx0LkhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KGMpLHQuSEVBUFUzMj1uZXcgVWludDMyQXJyYXkoYyksdC5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoYyksdC5IRUFQRjY0PW5ldyBGbG9hdDY0QXJyYXkoYyl9dC5JTklUSUFMX01FTU9SWTt2YXIgJHIsQm89W10sTW89W10sT289W10sb2w9MDtmdW5jdGlvbiBpbCgpe3JldHVybiBFfHxvbD4wfWZ1bmN0aW9uIHNsKCl7aWYodC5wcmVSdW4pZm9yKHR5cGVvZiB0LnByZVJ1bj09ImZ1bmN0aW9uIiYmKHQucHJlUnVuPVt0LnByZVJ1bl0pO3QucHJlUnVuLmxlbmd0aDspY2wodC5wcmVSdW4uc2hpZnQoKSk7V3IoQm8pfWZ1bmN0aW9uIGFsKCl7V3IoTW8pfWZ1bmN0aW9uIHVsKCl7aWYodC5wb3N0UnVuKWZvcih0eXBlb2YgdC5wb3N0UnVuPT0iZnVuY3Rpb24iJiYodC5wb3N0UnVuPVt0LnBvc3RSdW5dKTt0LnBvc3RSdW4ubGVuZ3RoOylsbCh0LnBvc3RSdW4uc2hpZnQoKSk7V3IoT28pfWZ1bmN0aW9uIGNsKGMpe0JvLnVuc2hpZnQoYyl9ZnVuY3Rpb24gZmwoYyl7TW8udW5zaGlmdChjKX1mdW5jdGlvbiBsbChjKXtPby51bnNoaWZ0KGMpfXZhciBUZT0wLEtlPW51bGw7ZnVuY3Rpb24gZGwoYyl7VGUrKyx0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJnQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhUZSl9ZnVuY3Rpb24gaGwoYyl7aWYoVGUtLSx0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJnQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhUZSksVGU9PTAmJktlKXt2YXIgbT1LZTtLZT1udWxsLG0oKX19dC5wcmVsb2FkZWRJbWFnZXM9e30sdC5wcmVsb2FkZWRBdWRpb3M9e307ZnVuY3Rpb24gbGUoYyl7dC5vbkFib3J0JiZ0Lm9uQWJvcnQoYyksYz0iQWJvcnRlZCgiK2MrIikiLGgoYyksUj0hMCxjKz0iLiBCdWlsZCB3aXRoIC1zIEFTU0VSVElPTlM9MSBmb3IgbW9yZSBpbmZvLiI7dmFyIG09bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihjKTt0aHJvdyBvKG0pLG19dmFyIG1sPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIjtmdW5jdGlvbiBVbyhjKXtyZXR1cm4gYy5zdGFydHNXaXRoKG1sKX12YXIgWTtZPSJ0ZmxpdGUtc2ltZC53YXNtIixVbyhZKXx8KFk9cChZKSk7ZnVuY3Rpb24gTm8oYyl7dHJ5e2lmKGM9PVkmJngpcmV0dXJuIG5ldyBVaW50OEFycmF5KHgpO2lmKCFnKXRocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1jYXRjaChtKXtsZShtKX19ZnVuY3Rpb24gcGwoKXtyZXR1cm4heCYmZiYmdHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iP2ZldGNoKFkse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKGMpe2lmKCFjLm9rKXRocm93ImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyIrWSsiJyI7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIE5vKFkpfSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBObyhZKX0pfWZ1bmN0aW9uIGdsKCl7dmFyIGM9e2E6VWx9O2Z1bmN0aW9uIG0odyxPKXt2YXIgcT13LmV4cG9ydHM7dC5hc209cSx2PXQuYXNtLnEsQ28odi5idWZmZXIpLCRyPXQuYXNtLkUsZmwodC5hc20uciksaGwoKX1kbCgpO2Z1bmN0aW9uIHkodyl7bSh3Lmluc3RhbmNlKX1mdW5jdGlvbiBUKHcpe3JldHVybiBwbCgpLnRoZW4oZnVuY3Rpb24oTyl7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKE8sYyl9KS50aGVuKGZ1bmN0aW9uKE8pe3JldHVybiBPfSkudGhlbih3LGZ1bmN0aW9uKE8pe2goImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICIrTyksbGUoTyl9KX1mdW5jdGlvbiBrKCl7cmV0dXJuIXgmJnR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZz09ImZ1bmN0aW9uIiYmIVVvKFkpJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goWSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24odyl7dmFyIE89V2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcodyxjKTtyZXR1cm4gTy50aGVuKHksZnVuY3Rpb24ocSl7cmV0dXJuIGgoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK3EpLGgoImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksVCh5KX0pfSk6VCh5KX1pZih0Lmluc3RhbnRpYXRlV2FzbSl0cnl7dmFyIEI9dC5pbnN0YW50aWF0ZVdhc20oYyxtKTtyZXR1cm4gQn1jYXRjaCh3KXtyZXR1cm4gaCgiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIit3KSwhMX1yZXR1cm4gaygpLmNhdGNoKG8pLHt9fWZ1bmN0aW9uIFdyKGMpe2Zvcig7Yy5sZW5ndGg+MDspe3ZhciBtPWMuc2hpZnQoKTtpZih0eXBlb2YgbT09ImZ1bmN0aW9uIil7bSh0KTtjb250aW51ZX12YXIgeT1tLmZ1bmM7dHlwZW9mIHk9PSJudW1iZXIiP20uYXJnPT09dm9pZCAwPyRyLmdldCh5KSgpOiRyLmdldCh5KShtLmFyZyk6eShtLmFyZz09PXZvaWQgMD9udWxsOm0uYXJnKX19ZnVuY3Rpb24geWwoYyxtLHksVCl7bGUoIkFzc2VydGlvbiBmYWlsZWQ6ICIrTChjKSsiLCBhdDogIitbbT9MKG0pOiJ1bmtub3duIGZpbGVuYW1lIix5LFQ/TChUKToidW5rbm93biBmdW5jdGlvbiJdKX1mdW5jdGlvbiBibChjLG0pe2xlKCJUbyB1c2UgZGxvcGVuLCB5b3UgbmVlZCB0byB1c2UgRW1zY3JpcHRlbidzIGxpbmtpbmcgc3VwcG9ydCwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi93aWtpL0xpbmtpbmciKX1mdW5jdGlvbiB4bChjLG0pe2xlKCJUbyB1c2UgZGxvcGVuLCB5b3UgbmVlZCB0byB1c2UgRW1zY3JpcHRlbidzIGxpbmtpbmcgc3VwcG9ydCwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi93aWtpL0xpbmtpbmciKX1mdW5jdGlvbiBfbCgpe2xlKCIiKX12YXIgenQ7enQ9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9O3ZhciB2bD0hMDtmdW5jdGlvbiBFbChjKXtyZXR1cm4gJFtMbygpPj4yXT1jLGN9ZnVuY3Rpb24gVGwoYyxtKXt2YXIgeTtpZihjPT09MCl5PURhdGUubm93KCk7ZWxzZSBpZigoYz09PTF8fGM9PT00KSYmdmwpeT16dCgpO2Vsc2UgcmV0dXJuIEVsKDI4KSwtMTtyZXR1cm4gJFttPj4yXT15LzFlM3wwLCRbbSs0Pj4yXT15JTFlMyoxZTMqMWUzfDAsMH1mdW5jdGlvbiB3bCgpe3JldHVybiAyMTQ3NDgzNjQ4fWZ1bmN0aW9uIEFsKGMsbSx5KXtmZS5jb3B5V2l0aGluKGMsbSxtK3kpfWZ1bmN0aW9uIElsKGMpe3RyeXtyZXR1cm4gdi5ncm93KGMtcWUuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2KSxDbyh2LmJ1ZmZlciksMX1jYXRjaHt9fWZ1bmN0aW9uIFNsKGMpe3ZhciBtPWZlLmxlbmd0aDtjPWM+Pj4wO3ZhciB5PTIxNDc0ODM2NDg7aWYoYz55KXJldHVybiExO2Zvcih2YXIgVD0xO1Q8PTQ7VCo9Mil7dmFyIGs9bSooMSsuMi9UKTtrPU1hdGgubWluKGssYysxMDA2NjMyOTYpO3ZhciBCPU1hdGgubWluKHksRyhNYXRoLm1heChjLGspLDY1NTM2KSksdz1JbChCKTtpZih3KXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFJsKGMpe2Zvcih2YXIgbT16dCgpO3p0KCktbTxjOyk7fXZhciBWcj17fTtmdW5jdGlvbiBGbCgpe3JldHVybiBhfHwiLi90aGlzLnByb2dyYW0ifWZ1bmN0aW9uIEplKCl7aWYoIUplLnN0cmluZ3Mpe3ZhciBjPSh0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8IkMiKS5yZXBsYWNlKCItIiwiXyIpKyIuVVRGLTgiLG09e1VTRVI6IndlYl91c2VyIixMT0dOQU1FOiJ3ZWJfdXNlciIsUEFUSDoiLyIsUFdEOiIvIixIT01FOiIvaG9tZS93ZWJfdXNlciIsTEFORzpjLF86RmwoKX07Zm9yKHZhciB5IGluIFZyKVZyW3ldPT09dm9pZCAwP2RlbGV0ZSBtW3ldOm1beV09VnJbeV07dmFyIFQ9W107Zm9yKHZhciB5IGluIG0pVC5wdXNoKHkrIj0iK21beV0pO0plLnN0cmluZ3M9VH1yZXR1cm4gSmUuc3RyaW5nc312YXIgR3Q9e21hcHBpbmdzOnt9LGJ1ZmZlcnM6W251bGwsW10sW11dLHByaW50Q2hhcjpmdW5jdGlvbihjLG0pe3ZhciB5PUd0LmJ1ZmZlcnNbY107bT09PTB8fG09PT0xMD8oKGM9PT0xP2I6aCkoeih5LDApKSx5Lmxlbmd0aD0wKTp5LnB1c2gobSl9LHZhcmFyZ3M6dm9pZCAwLGdldDpmdW5jdGlvbigpe0d0LnZhcmFyZ3MrPTQ7dmFyIGM9JFtHdC52YXJhcmdzLTQ+PjJdO3JldHVybiBjfSxnZXRTdHI6ZnVuY3Rpb24oYyl7dmFyIG09TChjKTtyZXR1cm4gbX0sZ2V0NjQ6ZnVuY3Rpb24oYyxtKXtyZXR1cm4gY319O2Z1bmN0aW9uIFBsKGMsbSl7dmFyIHk9MDtyZXR1cm4gSmUoKS5mb3JFYWNoKGZ1bmN0aW9uKFQsayl7dmFyIEI9bSt5OyRbYytrKjQ+PjJdPUIsVihULEIpLHkrPVQubGVuZ3RoKzF9KSwwfWZ1bmN0aW9uIGtsKGMsbSl7dmFyIHk9SmUoKTskW2M+PjJdPXkubGVuZ3RoO3ZhciBUPTA7cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlvbihrKXtUKz1rLmxlbmd0aCsxfSksJFttPj4yXT1ULDB9ZnVuY3Rpb24gRGwoYyl7TGwoYyl9ZnVuY3Rpb24gQ2woYyl7cmV0dXJuIDB9ZnVuY3Rpb24gQmwoYyxtLHksVCxrKXt9ZnVuY3Rpb24gTWwoYyxtLHksVCl7Zm9yKHZhciBrPTAsQj0wO0I8eTtCKyspe2Zvcih2YXIgdz0kW20rQio4Pj4yXSxPPSRbbSsoQio4KzQpPj4yXSxxPTA7cTxPO3ErKylHdC5wcmludENoYXIoYyxmZVt3K3FdKTtrKz1PfXJldHVybiAkW1Q+PjJdPWssMH1mdW5jdGlvbiBPbCgpe2lmKHR5cGVvZiBjcnlwdG89PSJvYmplY3QiJiZ0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIil7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYyksY1swXX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXtsZSgicmFuZG9tRGV2aWNlIil9fWZ1bmN0aW9uICR0KGMsbSl7JHQucmFuZG9tRGV2aWNlfHwoJHQucmFuZG9tRGV2aWNlPU9sKCkpO2Zvcih2YXIgeT0wO3k8bTt5KyspRWVbYyt5Pj4wXT0kdC5yYW5kb21EZXZpY2UoKTtyZXR1cm4gMH12YXIgVWw9e2E6eWwsZTpibCxkOnhsLGI6X2wsbjpUbCxoOndsLGw6QWwsbTpTbCxwOlJsLGY6UGwsZzprbCxqOkRsLGk6Q2wsazpCbCxjOk1sLG86JHR9O2dsKCksdC5fX193YXNtX2NhbGxfY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4odC5fX193YXNtX2NhbGxfY3RvcnM9dC5hc20ucikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD10LmFzbS5zKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PXQuYXNtLnQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRIZWlnaHQ9dC5hc20udSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0V2lkdGg9dC5hc20udikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD10LmFzbS53KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dE1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRNZW1vcnlPZmZzZXQ9dC5hc20ueCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0SGVpZ2h0PXQuYXNtLnkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0V2lkdGg9dC5hc20ueikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRDaGFubmVsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50PXQuYXNtLkEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fbG9hZE1vZGVsPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2xvYWRNb2RlbD10LmFzbS5CKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX3J1bkluZmVyZW5jZT1mdW5jdGlvbigpe3JldHVybih0Ll9ydW5JbmZlcmVuY2U9dC5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9pc0dQVUVuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5faXNHUFVFbmFibGVkPXQuYXNtLkQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIExvPXQuX19fZXJybm9fbG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4oTG89dC5fX19lcnJub19sb2NhdGlvbj10LmFzbS5GKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFd0O2Z1bmN0aW9uIE5sKGMpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrYysiKSIsdGhpcy5zdGF0dXM9Y31LZT1mdW5jdGlvbiBjKCl7V3R8fEhyKCksV3R8fChLZT1jKX07ZnVuY3Rpb24gSHIoYyl7aWYoVGU+MHx8KHNsKCksVGU+MCkpcmV0dXJuO2Z1bmN0aW9uIG0oKXtXdHx8KFd0PSEwLHQuY2FsbGVkUnVuPSEwLCFSJiYoYWwoKSxuKHQpLHQub25SdW50aW1lSW5pdGlhbGl6ZWQmJnQub25SdW50aW1lSW5pdGlhbGl6ZWQoKSx1bCgpKSl9dC5zZXRTdGF0dXM/KHQuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNldFN0YXR1cygiIil9LDEpLG0oKX0sMSkpOm0oKX10LnJ1bj1IcjtmdW5jdGlvbiBMbChjLG0pe3psKGMpfWZ1bmN0aW9uIHpsKGMpe2lsKCl8fCh0Lm9uRXhpdCYmdC5vbkV4aXQoYyksUj0hMCksdShjLG5ldyBObChjKSl9aWYodC5wcmVJbml0KWZvcih0eXBlb2YgdC5wcmVJbml0PT0iZnVuY3Rpb24iJiYodC5wcmVJbml0PVt0LnByZUluaXRdKTt0LnByZUluaXQubGVuZ3RoPjA7KXQucHJlSW5pdC5wb3AoKSgpO3JldHVybiBIcigpLGUucmVhZHl9fSgpO2NsYXNzIG9ze2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJzZWxlY3RlZFRGTGl0ZSIpO2wodGhpcywiaXNTSU1EU3VwcG9ydGVkIiwhMSk7bCh0aGlzLCJpc1RocmVhZHNTdXBwb3J0ZWQiLCExKTtsKHRoaXMsImlucHV0V2lkdGgiLDApO2wodGhpcywiaW5wdXRIZWlnaHQiLDApO2wodGhpcywiaW5wdXRDaGFubmVsQ291bnQiLDApO2wodGhpcywiaW5wdXRNZW1vcnlPZmZzZXQiLDApO2wodGhpcywib3V0cHV0V2lkdGgiLDApO2wodGhpcywib3V0cHV0SGVpZ2h0IiwwKTtsKHRoaXMsIm91dHB1dENoYW5uZWxDb3VudCIsMCk7bCh0aGlzLCJvdXRwdXRNZW1vcnlPZmZzZXQiLDApfX1jb25zdCBpcz0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC92b25hZ2UtdGVuc29yZmxvdy13YXNtL3RmbGl0ZS1zaW1kLXdhc20vMS4xLjMvIixzcz0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC9tbC9zZWxmaWVfc2VnbWVudGF0aW9uLzQuMC4wLyI7YXN5bmMgZnVuY3Rpb24gYXMocj1pcyxlPXNzKXtsZXQgdD1uZXcgb3M7dmFyIG49bmV3IFByb21pc2UoZnVuY3Rpb24obyxpKXthc3luYyBmdW5jdGlvbiBzKCl7cmV0dXJuIG5zKHtsb2NhdGVGaWxlOmZ1bmN0aW9uKGYpe3JldHVybiByK2Z9fSl9YXN5bmMgZnVuY3Rpb24gYSh1KXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoZixkKT0+e2NvbnN0IHA9dTtpZih0eXBlb2YgcD4idSIpcmV0dXJuIGQoIlRGTGl0ZSBiYWNrZW5kIHVuYXZhaWxhYmxlOiB3YXNtU2ltZCIpO2NvbnN0IGc9InNlbGZpZV9zZWdtZW50YXRpb25fbGFuZHNjYXBlIjtjb25zb2xlLmxvZygiTG9hZGluZyB0ZmxpdGUgbW9kZWw6IixnKTtsZXQgYj1lK2Ake2d9LnRmbGl0ZWA7Y29uc29sZS5sb2coIlRGTGl0ZSBtb2RlbFVybDogIitiKTt0cnl7Y29uc3QgeD1hd2FpdChhd2FpdCBmZXRjaChiKSkuYXJyYXlCdWZmZXIoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIHNpemU6Iix4LmJ5dGVMZW5ndGgpO2NvbnN0IEU9cC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIG1lbW9yeSBvZmZzZXQ6IixFKSxjb25zb2xlLmxvZygiTG9hZGluZyBtb2RlbCBidWZmZXIuLi4iKSxwLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoeCksRSk7Y29uc3Qgdj1wLl9sb2FkTW9kZWwoeC5ieXRlTGVuZ3RoKTtpZihjb25zb2xlLmxvZygiTG9hZCBtb2RlbCByZXN1bHQ6Iix2KSx2IT09MCl7ZCgiQ2Fubm90IGxvYWQgbW9kZWwiKTtyZXR1cm59dC5pbnB1dFdpZHRoPXAuX2dldElucHV0V2lkdGgoKSx0LmlucHV0SGVpZ2h0PXAuX2dldElucHV0SGVpZ2h0KCksdC5pbnB1dENoYW5uZWxDb3VudD1wLl9nZXRJbnB1dENoYW5uZWxDb3VudCgpLHQuaW5wdXRNZW1vcnlPZmZzZXQ9cC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQoKSxjb25zb2xlLmxvZygiSW5wdXQgbWVtb3J5IG9mZnNldDoiLHQuaW5wdXRNZW1vcnlPZmZzZXQpLGNvbnNvbGUubG9nKCJJbnB1dCBoZWlnaHQ6Iix0LmlucHV0SGVpZ2h0KSxjb25zb2xlLmxvZygiSW5wdXQgd2lkdGg6Iix0LmlucHV0V2lkdGgpLGNvbnNvbGUubG9nKCJJbnB1dCBjaGFubmVsczoiLHQuaW5wdXRDaGFubmVsQ291bnQpLHQub3V0cHV0TWVtb3J5T2Zmc2V0PXAuX2dldE91dHB1dE1lbW9yeU9mZnNldCgpLHQub3V0cHV0V2lkdGg9cC5fZ2V0T3V0cHV0V2lkdGgoKSx0Lm91dHB1dEhlaWdodD1wLl9nZXRPdXRwdXRIZWlnaHQoKSx0Lm91dHB1dENoYW5uZWxDb3VudD1wLl9nZXRPdXRwdXRDaGFubmVsQ291bnQoKSxjb25zb2xlLmxvZygiT3V0cHV0IG1lbW9yeSBvZmZzZXQ6Iix0Lm91dHB1dE1lbW9yeU9mZnNldCksY29uc29sZS5sb2coIk91dHB1dCBoZWlnaHQ6Iix0Lm91dHB1dEhlaWdodCksY29uc29sZS5sb2coIk91dHB1dCB3aWR0aDoiLHQub3V0cHV0V2lkdGgpLGNvbnNvbGUubG9nKCJPdXRwdXQgY2hhbm5lbHM6Iix0Lm91dHB1dENoYW5uZWxDb3VudCksdC5zZWxlY3RlZFRGTGl0ZT1wfWNhdGNoKGgpe2QoaCk7cmV0dXJufWYoKX0pfXMoKS50aGVuKHU9PntpZih1PT09bnVsbCl0aHJvdyBjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIG51bGwiKSwibG9hZFRGTGl0ZSBudWxsIjthKHUpLnRoZW4oZj0+e28odCl9KS5jYXRjaChmPT57Y29uc29sZS5lcnJvcigibG9hZFRGTGl0ZU1vZGVsIGVycm9yIiksaSgibG9hZFRGTGl0ZU1vZGVsIGVycm9yIil9KX0pLmNhdGNoKHU9Pntjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIGVycm9yOiIsdSksaSgibG9hZFRGTGl0ZSBlcnJvcjoiK3UpfSl9KTtyZXR1cm4gbn1jbGFzcyB1c3tjb25zdHJ1Y3Rvcigpe2wodGhpcywiY2FudmFzIixuZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkpO2wodGhpcywiY29udGV4dCIsdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSk7bCh0aGlzLCJwaXhlbENvdW50IiwwKTtsKHRoaXMsImlucHV0T2Zmc2V0IiwwKTtsKHRoaXMsIm91dHB1dE9mZnNldCIsMCk7bCh0aGlzLCJpbmZvcyIpO2wodGhpcywibWFzayIpfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmluaXRXYXNtKGUsdCksdGhpcy5pbmZvcyYmKHRoaXMuY2FudmFzLndpZHRoPXRoaXMuaW5mb3MuaW5wdXRXaWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQ9dGhpcy5pbmZvcy5pbnB1dEhlaWdodCx0aGlzLnBpeGVsQ291bnQ9dGhpcy5pbmZvcy5pbnB1dFdpZHRoKnRoaXMuaW5mb3MuaW5wdXRIZWlnaHQsdGhpcy5tYXNrPW5ldyBJbWFnZURhdGEodGhpcy5pbmZvcy5pbnB1dFdpZHRoLHRoaXMuaW5mb3MuaW5wdXRIZWlnaHQpLHRoaXMuaW5wdXRPZmZzZXQ9dGhpcy5pbmZvcy5pbnB1dE1lbW9yeU9mZnNldC80LHRoaXMub3V0cHV0T2Zmc2V0PXRoaXMuaW5mb3Mub3V0cHV0TWVtb3J5T2Zmc2V0LzQpfWFzeW5jIGluaXRXYXNtKGUsdCl7dGhpcy5pbmZvcz1hd2FpdCBhcyhlLHQpfWdldE91dHB1dERpbWVuc2lvbnMoKXt2YXIgZSx0LG4sbztyZXR1cm57d2lkdGg6KHQ9KGU9dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOmUub3V0cHV0V2lkdGgpIT1udWxsP3Q6MCxoZWlnaHQ6KG89KG49dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOm4ub3V0cHV0SGVpZ2h0KSE9bnVsbD9vOjB9fWFzeW5jIHByb2Nlc3MoZSl7aWYoIXRoaXMubWFza3x8IXRoaXMuaW5mb3MpcmV0dXJuO2NvbnN0IHQ9dGhpcy5pbmZvcy5pbnB1dFdpZHRoLG49dGhpcy5pbmZvcy5pbnB1dEhlaWdodDt0aGlzLmNvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQsMCwwLHQsbik7Y29uc3Qgbz10aGlzLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsMCx0LG4pLGk9dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5IRUFQRjMyO2ZvcihsZXQgcz0wO3M8dGhpcy5waXhlbENvdW50O3MrKyl7Y29uc3QgYT10aGlzLmlucHV0T2Zmc2V0K3MqMztpW2FdPW8uZGF0YVtzKjRdLzI1NSxpW2ErMV09by5kYXRhW3MqNCsxXS8yNTUsaVthKzJdPW8uZGF0YVtzKjQrMl0vMjU1fXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuX3J1bkluZmVyZW5jZSgpO2ZvcihsZXQgcz0wO3M8dGhpcy5waXhlbENvdW50O3MrKyl7Y29uc3QgYT10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLkhFQVBGMzJbdGhpcy5vdXRwdXRPZmZzZXQrc107dGhpcy5tYXNrLmRhdGFbcyo0XT10aGlzLm1hc2suZGF0YVtzKjQrM109MjU1KmF9cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKHRoaXMubWFzayl9aXNHcHVTdXBwb3J0ZWQoKXt2YXIgZSx0LG47cmV0dXJuKG49KHQ9KGU9dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOmUuc2VsZWN0ZWRURkxpdGUpPT1udWxsP3ZvaWQgMDp0Ll9pc0dQVUVuYWJsZWQoKSkhPW51bGw/bjohMX19ZnVuY3Rpb24gY3MoKXtyZXR1cm4gbmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLmdldENvbnRleHQoIndlYmdsMiIse2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6ITB9KT97c3VwcG9ydGVkOiEwfTp7c3VwcG9ydGVkOiExLG1lc3NhZ2U6IllvdXIgaGFyZHdhcmUgZG9lcyBub3QgcGVyZm9ybSBnb29kIGVub3VnaCB0byBydW4gdGhlIGxpYnJhcnkgZWZmaWNpZW50bHkifX1jbGFzcyBucntjb25zdHJ1Y3Rvcigpe2wodGhpcywiY2FudmFzIik7bCh0aGlzLCJjb250ZXh0Iik7Y29uc3QgZT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCksdD1lLmdldENvbnRleHQoIjJkIik7aWYoIXQpdGhyb3ciRmFpbCB0byByZXRyaWV2ZSB3ZWJnbDIgY29udGV4dCI7dGhpcy5jYW52YXM9ZSx0aGlzLmNvbnRleHQ9dH1zZXRGbGlja2VyaW5nT3B0aW9ucyhlKXt9ZW5hYmxlUG9zdFByb2Nlc3NpbmcoKXt9ZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl7fWFzeW5jIHByb2ZpbGVXZWJnbChlKXtyZXR1cm5bXX1hc3luYyByZW5kZXIoZSx0KXtyZXR1cm4gdGhpcy5jYW52YXN9cmVzaXplQ2FudmFzKGUpe2NvbnN0e3dpZHRoOnQsaGVpZ2h0Om59PWU7dGhpcy5jYW52YXMud2lkdGg9dCx0aGlzLmNhbnZhcy5oZWlnaHQ9bn1yZW5kZXJTaWxob3VldHRlKGUsdCxuPSJub25lIil7Y29uc3R7d2lkdGg6byxoZWlnaHQ6aX09ZTt0aGlzLmNvbnRleHQuc2F2ZSgpLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCwwLDAsbyxpKSx0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJzb3VyY2UtaW4iLHRoaXMuY29udGV4dC5maWx0ZXI9bix0aGlzLmNvbnRleHQuZHJhd0ltYWdlKGUsMCwwLG8saSwwLDAsdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpfX1jbGFzcyBmcyBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5yYWRpdXM9ZX1hc3luYyByZW5kZXIoZSx0KXtyZXR1cm4gc3VwZXIucmVzaXplQ2FudmFzKGUpLHRoaXMucmVuZGVyU2lsaG91ZXR0ZShlLHQpLHRoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmZpbHRlcj1gYmx1cigke3RoaXMucmFkaXVzfXB4KWAsdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpLHN1cGVyLnJlbmRlcihlLHQpfX1jbGFzcyBscyBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5yYWRpdXM9ZX1hc3luYyByZW5kZXIoZSx0KXtyZXR1cm4gc3VwZXIucmVzaXplQ2FudmFzKGUpLHRoaXMucmVuZGVyU2lsaG91ZXR0ZShlLHQsYGJsdXIoJHt0aGlzLnJhZGl1c31weClgKSx0aGlzLmNvbnRleHQuc2F2ZSgpLHRoaXMuY29udGV4dC5maWx0ZXI9Im5vbmUiLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsZS53aWR0aCxlLmhlaWdodCksdGhpcy5jb250ZXh0LnJlc3RvcmUoKSxzdXBlci5yZW5kZXIoZSx0KX19Y2xhc3MgZHMgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2UiKX1zZXRCYWNrZ3JvdW5kSW1hZ2UodCl7dGhpcy5iYWNrZ3JvdW5kSW1hZ2U9dH1hc3luYyByZW5kZXIodCxuKXtyZXR1cm4gc3VwZXIucmVzaXplQ2FudmFzKHQpLHRoaXMucmVuZGVyU2lsaG91ZXR0ZSh0LG4pLHRoaXMuYmFja2dyb3VuZEltYWdlJiYodGhpcy5jb250ZXh0LnNhdmUoKSx0aGlzLmNvbnRleHQuZmlsdGVyPSJub25lIix0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIix0aGlzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMuYmFja2dyb3VuZEltYWdlLDAsMCx0aGlzLmJhY2tncm91bmRJbWFnZS53aWR0aCx0aGlzLmJhY2tncm91bmRJbWFnZS5oZWlnaHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCkpLHN1cGVyLnJlbmRlcih0LG4pfX0vKiBAbGljZW5zZSB0d2dsLmpzIDUuNS4xIENvcHlyaWdodCAoYykgMjAxNSwgR3JlZ2cgVGF2YXJlcyBBbGwgUmlnaHRzIFJlc2VydmVkLgpBdmFpbGFibGUgdmlhIHRoZSBNSVQgbGljZW5zZS4Kc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9ncmVnZ21hbi90d2dsLmpzIGZvciBkZXRhaWxzICovY29uc3Qgb3I9NTEyMCwkZT01MTIxLGlyPTUxMjIsc3I9NTEyMyxhcj01MTI0LHVyPTUxMjUsY3I9NTEyNixocz0zMjgxOSxtcz0zMjgyMCxwcz0zMzYzNSxncz01MTMxLHlzPTMzNjQwLGJzPTM1ODk5LHhzPTM1OTAyLF9zPTM2MjY5LHZzPTM0MDQyLGxuPXt9O3tjb25zdCByPWxuO3Jbb3JdPUludDhBcnJheSxyWyRlXT1VaW50OEFycmF5LHJbaXJdPUludDE2QXJyYXkscltzcl09VWludDE2QXJyYXksclthcl09SW50MzJBcnJheSxyW3VyXT1VaW50MzJBcnJheSxyW2NyXT1GbG9hdDMyQXJyYXkscltoc109VWludDE2QXJyYXksclttc109VWludDE2QXJyYXkscltwc109VWludDE2QXJyYXkscltnc109VWludDE2QXJyYXksclt5c109VWludDMyQXJyYXkscltic109VWludDMyQXJyYXksclt4c109VWludDMyQXJyYXkscltfc109VWludDMyQXJyYXksclt2c109VWludDMyQXJyYXl9ZnVuY3Rpb24gZnIocil7aWYociBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gb3I7aWYociBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlyZXR1cm4gJGU7aWYociBpbnN0YW5jZW9mIEludDE2QXJyYXkpcmV0dXJuIGlyO2lmKHIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gc3I7aWYociBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuIGFyO2lmKHIgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gdXI7aWYociBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gY3I7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gZG4ocil7aWYocj09PUludDhBcnJheSlyZXR1cm4gb3I7aWYocj09PVVpbnQ4QXJyYXl8fHI9PT1VaW50OENsYW1wZWRBcnJheSlyZXR1cm4gJGU7aWYocj09PUludDE2QXJyYXkpcmV0dXJuIGlyO2lmKHI9PT1VaW50MTZBcnJheSlyZXR1cm4gc3I7aWYocj09PUludDMyQXJyYXkpcmV0dXJuIGFyO2lmKHI9PT1VaW50MzJBcnJheSlyZXR1cm4gdXI7aWYocj09PUZsb2F0MzJBcnJheSlyZXR1cm4gY3I7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gaG4ocil7Y29uc3QgZT1sbltyXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZ2wgdHlwZSIpO3JldHVybiBlfWNvbnN0IHl0PXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiYoZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ZS5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcil9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn07ZnVuY3Rpb24gbW4oLi4ucil7Y29uc29sZS5lcnJvciguLi5yKX1jb25zdCBwbj1uZXcgTWFwO2Z1bmN0aW9uIGJ0KHIsZSl7aWYoIXJ8fHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1wbi5nZXQoZSk7dHx8KHQ9bmV3IFdlYWtNYXAscG4uc2V0KGUsdCkpO2xldCBuPXQuZ2V0KHIpO2lmKG49PT12b2lkIDApe2NvbnN0IG89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpO249by5zdWJzdHJpbmcoOCxvLmxlbmd0aC0xKT09PWUsdC5zZXQocixuKX1yZXR1cm4gbn1mdW5jdGlvbiBFcyhyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xCdWZmZXI8InUiJiZidChlLCJXZWJHTEJ1ZmZlciIpfWZ1bmN0aW9uIFRzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFJlbmRlcmJ1ZmZlcjwidSImJmJ0KGUsIldlYkdMUmVuZGVyYnVmZmVyIil9ZnVuY3Rpb24gbHIocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMVGV4dHVyZTwidSImJmJ0KGUsIldlYkdMVGV4dHVyZSIpfWZ1bmN0aW9uIHdzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFNhbXBsZXI8InUiJiZidChlLCJXZWJHTFNhbXBsZXIiKX1jb25zdCBnbj0zNTA0NCxnZT0zNDk2MixBcz0zNDk2MyxJcz0zNDY2MCxTcz01MTIwLFJzPTUxMjEsRnM9NTEyMixQcz01MTIzLGtzPTUxMjQsRHM9NTEyNSx5bj01MTI2LGJuPXthdHRyaWJQcmVmaXg6IiJ9O2Z1bmN0aW9uIENzKHIsZSx0LG4sbyl7ci5iaW5kQnVmZmVyKGUsdCksci5idWZmZXJEYXRhKGUsbixvfHxnbil9ZnVuY3Rpb24geG4ocixlLHQsbil7aWYoRXMocixlKSlyZXR1cm4gZTt0PXR8fGdlO2NvbnN0IG89ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gQ3Mocix0LG8sZSxuKSxvfWZ1bmN0aW9uIF9uKHIpe3JldHVybiByPT09ImluZGljZXMifWZ1bmN0aW9uIEJzKHIpe3JldHVybiByPT09SW50OEFycmF5fHxyPT09VWludDhBcnJheX1mdW5jdGlvbiBNcyhyKXtyZXR1cm4gci5sZW5ndGg/cjpyLmRhdGF9Y29uc3QgT3M9L2Nvb3JkfHRleHR1cmUvaSxVcz0vY29sb3J8Y29sb3VyL2k7ZnVuY3Rpb24gTnMocixlKXtsZXQgdDtpZihPcy50ZXN0KHIpP3Q9MjpVcy50ZXN0KHIpP3Q9NDp0PTMsZSV0PjApdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGd1ZXNzIG51bUNvbXBvbmVudHMgZm9yIGF0dHJpYnV0ZSAnJHtyfScuIFRyaWVkICR7dH0gYnV0ICR7ZX0gdmFsdWVzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5ICR7dH0uIFlvdSBzaG91bGQgc3BlY2lmeSBpdC5gKTtyZXR1cm4gdH1mdW5jdGlvbiBMcyhyLGUsdCl7cmV0dXJuIHIubnVtQ29tcG9uZW50c3x8ci5zaXplfHxOcyhlLHR8fE1zKHIpLmxlbmd0aCl9ZnVuY3Rpb24gdm4ocixlKXtpZih5dChyKSlyZXR1cm4gcjtpZih5dChyLmRhdGEpKXJldHVybiByLmRhdGE7QXJyYXkuaXNBcnJheShyKSYmKHI9e2RhdGE6cn0pO2xldCB0PXIudHlwZT9kcihyLnR5cGUpOnZvaWQgMDtyZXR1cm4gdHx8KF9uKGUpP3Q9VWludDE2QXJyYXk6dD1GbG9hdDMyQXJyYXkpLG5ldyB0KHIuZGF0YSl9ZnVuY3Rpb24genMocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9yOnI/ZG4ocik6eW59ZnVuY3Rpb24gZHIocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9obihyKTpyfHxGbG9hdDMyQXJyYXl9ZnVuY3Rpb24gR3MocixlKXtyZXR1cm57YnVmZmVyOmUuYnVmZmVyLG51bVZhbHVlczoyKjMqNCx0eXBlOnpzKGUudHlwZSksYXJyYXlUeXBlOmRyKGUudHlwZSl9fWZ1bmN0aW9uICRzKHIsZSl7Y29uc3QgdD1lLmRhdGF8fGUsbj1kcihlLnR5cGUpLG89dCpuLkJZVEVTX1BFUl9FTEVNRU5ULGk9ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gci5iaW5kQnVmZmVyKGdlLGkpLHIuYnVmZmVyRGF0YShnZSxvLGUuZHJhd1R5cGV8fGduKSx7YnVmZmVyOmksbnVtVmFsdWVzOnQsdHlwZTpkbihuKSxhcnJheVR5cGU6bn19ZnVuY3Rpb24gV3MocixlLHQpe2NvbnN0IG49dm4oZSx0KTtyZXR1cm57YXJyYXlUeXBlOm4uY29uc3RydWN0b3IsYnVmZmVyOnhuKHIsbix2b2lkIDAsZS5kcmF3VHlwZSksdHlwZTpmcihuKSxudW1WYWx1ZXM6MH19ZnVuY3Rpb24gVnMocixlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCFfbihuKSl7Y29uc3Qgbz1lW25dLGk9by5hdHRyaWJ8fG8ubmFtZXx8by5hdHRyaWJOYW1lfHxibi5hdHRyaWJQcmVmaXgrbjtpZihvLnZhbHVlKXtpZighQXJyYXkuaXNBcnJheShvLnZhbHVlKSYmIXl0KG8udmFsdWUpKXRocm93IG5ldyBFcnJvcigiYXJyYXkudmFsdWUgaXMgbm90IGFycmF5IG9yIHR5cGVkYXJyYXkiKTt0W2ldPXt2YWx1ZTpvLnZhbHVlfX1lbHNle2xldCBzO28uYnVmZmVyJiZvLmJ1ZmZlciBpbnN0YW5jZW9mIFdlYkdMQnVmZmVyP3M9R3M6dHlwZW9mIG89PSJudW1iZXIifHx0eXBlb2Ygby5kYXRhPT0ibnVtYmVyIj9zPSRzOnM9V3M7Y29uc3R7YnVmZmVyOmEsdHlwZTp1LG51bVZhbHVlczpmLGFycmF5VHlwZTpkfT1zKHIsbyxuKSxwPW8ubm9ybWFsaXplIT09dm9pZCAwP28ubm9ybWFsaXplOkJzKGQpLGc9THMobyxuLGYpO3RbaV09e2J1ZmZlcjphLG51bUNvbXBvbmVudHM6Zyx0eXBlOnUsbm9ybWFsaXplOnAsc3RyaWRlOm8uc3RyaWRlfHwwLG9mZnNldDpvLm9mZnNldHx8MCxkaXZpc29yOm8uZGl2aXNvcj09PXZvaWQgMD92b2lkIDA6by5kaXZpc29yLGRyYXdUeXBlOm8uZHJhd1R5cGV9fX19KSxyLmJpbmRCdWZmZXIoZ2UsbnVsbCksdH1mdW5jdGlvbiBIcyhyLGUpe3JldHVybiBlPT09U3N8fGU9PT1Scz8xOmU9PT1Gc3x8ZT09PVBzPzI6ZT09PWtzfHxlPT09RHN8fGU9PT15bj80OjB9Y29uc3QgaHI9WyJwb3NpdGlvbiIsInBvc2l0aW9ucyIsImFfcG9zaXRpb24iXTtmdW5jdGlvbiBqcyhyLGUpe2xldCB0LG47Zm9yKG49MDtuPGhyLmxlbmd0aCYmKHQ9aHJbbl0sISh0IGluIGV8fCh0PWJuLmF0dHJpYlByZWZpeCt0LHQgaW4gZSkpKTsrK24pO249PT1oci5sZW5ndGgmJih0PU9iamVjdC5rZXlzKGUpWzBdKTtjb25zdCBvPWVbdF07aWYoIW8uYnVmZmVyKXJldHVybiAxO3IuYmluZEJ1ZmZlcihnZSxvLmJ1ZmZlcik7Y29uc3QgaT1yLmdldEJ1ZmZlclBhcmFtZXRlcihnZSxJcyk7ci5iaW5kQnVmZmVyKGdlLG51bGwpO2NvbnN0IHM9SHMocixvLnR5cGUpLGE9aS9zLHU9by5udW1Db21wb25lbnRzfHxvLnNpemUsZj1hL3U7aWYoZiUxIT09MCl0aHJvdyBuZXcgRXJyb3IoYG51bUNvbXBvbmVudHMgJHt1fSBub3QgY29ycmVjdCBmb3IgbGVuZ3RoICR7bGVuZ3RofWApO3JldHVybiBmfWZ1bmN0aW9uIFlzKHIsZSx0KXtjb25zdCBuPVZzKHIsZSksbz1PYmplY3QuYXNzaWduKHt9LHR8fHt9KTtvLmF0dHJpYnM9T2JqZWN0LmFzc2lnbih7fSx0P3QuYXR0cmliczp7fSxuKTtjb25zdCBpPWUuaW5kaWNlcztpZihpKXtjb25zdCBzPXZuKGksImluZGljZXMiKTtvLmluZGljZXM9eG4ocixzLEFzKSxvLm51bUVsZW1lbnRzPXMubGVuZ3RoLG8uZWxlbWVudFR5cGU9ZnIocyl9ZWxzZSBvLm51bUVsZW1lbnRzfHwoby5udW1FbGVtZW50cz1qcyhyLG8uYXR0cmlicykpO3JldHVybiBvfWZ1bmN0aW9uIFdlKHIpe3JldHVybiEhci50ZXhTdG9yYWdlMkR9Y29uc3QgRW49ZnVuY3Rpb24oKXtjb25zdCByPXt9LGU9e307ZnVuY3Rpb24gdChuKXtjb25zdCBvPW4uY29uc3RydWN0b3IubmFtZTtpZighcltvXSl7Zm9yKGNvbnN0IGkgaW4gbilpZih0eXBlb2YgbltpXT09Im51bWJlciIpe2NvbnN0IHM9ZVtuW2ldXTtlW25baV1dPXM/YCR7c30gfCAke2l9YDppfXJbb109ITB9fXJldHVybiBmdW5jdGlvbihvLGkpe3JldHVybiB0KG8pLGVbaV18fCh0eXBlb2YgaT09Im51bWJlciI/YDB4JHtpLnRvU3RyaW5nKDE2KX1gOmkpfX0oKSxvZT17dGV4dHVyZUNvbG9yOm5ldyBVaW50OEFycmF5KFsxMjgsMTkyLDI1NSwyNTVdKSx0ZXh0dXJlT3B0aW9uczp7fSxjcm9zc09yaWdpbjp2b2lkIDB9LFZlPXl0LFRuPWZ1bmN0aW9uKCl7bGV0IHI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHI9cnx8KHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTpudWxsKSxyfX0oKSx3bj02NDA2LFE9NjQwNyxTPTY0MDgsQW49NjQwOSxJbj02NDEwLEhlPTY0MDIsU249MzQwNDEseHQ9MzMwNzEsWHM9OTcyOCxRcz05NzI5LGllPTM1NTMsc2U9MzQwNjcseWU9MzI4NzksYmU9MzU4NjYsbXI9MzQwNjkscXM9MzQwNzAsS3M9MzQwNzEsSnM9MzQwNzIsWnM9MzQwNzMsZWE9MzQwNzQscHI9MTAyNDEsZ3I9MTAyNDAsX3Q9MTAyNDIsdnQ9MTAyNDMsUm49MzI4ODIsdGE9MzMwODIscmE9MzMwODMsbmE9MzMwODQsb2E9MzMwODUsaWE9MzQ4OTIsc2E9MzQ4OTMseXI9MzMxNyxGbj0zMzE0LFBuPTMyODc4LGtuPTMzMTYsRG49MzMxNSxDbj0zMjg3NyxhYT0zNzQ0Myx1YT0zNzQ0MSxjYT0zNzQ0MCxmYT0zMzMyMSxsYT0zNjc1NixkYT0zMzMyNSxoYT0zMzMyNixtYT0zMzMzMCxwYT0zMzMyOSxnYT0zMzMzOCx5YT0zMzMzNyxiYT0zMzM0MCx4YT0zMzMzOSxfYT0zMzMyMyx2YT0zNjc1NyxFYT0zMzMyNyxUYT0zMzMyOCx3YT0zMzMzNixBYT0zMzMzNSxJYT0zMzMzMixTYT0zMzMzMSxSYT0zMzMzNCxGYT0zMzMzMyxQYT0zMjg0OSxrYT0zNTkwNSxEYT0zNjE5NCxDYT0zNjc1OCxCYT0zNTg5OCxNYT0zNTkwMSxPYT0zNDg0MyxVYT0zNDgzNyxOYT0zNjIyMSxMYT0zNjIzOSx6YT0zNjIxNSxHYT0zNjIzMywkYT0zNjIwOSxXYT0zNjIyNyxWYT0zMjg1NixIYT0zNTkwNyxqYT0zNjc1OSxZYT0zMjg1NSxYYT0zMjg1NCxRYT0zMjg1NyxxYT0zNDg0MixLYT0zNDgzNixKYT0zNjIyMCxaYT0zNjIzOCxldT0zNjk3NSx0dT0zNjIxNCxydT0zNjIzMixudT0zNjIyNixvdT0zNjIwOCxpdT0zMzE4OSxzdT0zMzE5MCxhdT0zNjAxMix1dT0zNjAxMyxjdT0zNTA1NixhZT01MTIwLEk9NTEyMSxFdD01MTIyLFBlPTUxMjMsVHQ9NTEyNCx4ZT01MTI1LE09NTEyNixCbj0zMjgxOSxNbj0zMjgyMCxPbj0zMzYzNSxIPTUxMzEsamU9MzYxOTMsYnI9MzM2NDAsZnU9MzU4OTksbHU9MzU5MDIsZHU9MzYyNjksaHU9MzQwNDIsd3Q9MzMzMTksa2U9MzMzMjAsQXQ9NjQwMyxEZT0zNjI0NCxDZT0zNjI0OCxfZT0zNjI0OTtsZXQgeHI7ZnVuY3Rpb24gSXQocil7aWYoIXhyKXtjb25zdCBlPXt9O2Vbd25dPXt0ZXh0dXJlRm9ybWF0OnduLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEsMiwyLDRdLHR5cGU6W0ksSCxqZSxNXX0sZVtBbl09e3RleHR1cmVGb3JtYXQ6QW4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbSSxILGplLE1dfSxlW0luXT17dGV4dHVyZUZvcm1hdDpJbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyLDQsNCw4XSx0eXBlOltJLEgsamUsTV19LGVbUV09e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszLDYsNiwxMiwyXSx0eXBlOltJLEgsamUsTSxPbl19LGVbU109e3RleHR1cmVGb3JtYXQ6Uyxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDgsOCwxNiwyLDJdLHR5cGU6W0ksSCxqZSxNLEJuLE1uXX0sZVtIZV09e3RleHR1cmVGb3JtYXQ6SGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOlt4ZSxQZV19LGVbZmFdPXt0ZXh0dXJlRm9ybWF0OkF0LGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W0ldfSxlW2xhXT17dGV4dHVyZUZvcm1hdDpBdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOlthZV19LGVbZGFdPXt0ZXh0dXJlRm9ybWF0OkF0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMl0sdHlwZTpbTSxIXX0sZVtoYV09e3RleHR1cmVGb3JtYXQ6QXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbTV19LGVbbWFdPXt0ZXh0dXJlRm9ybWF0OkRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W0ldfSxlW3BhXT17dGV4dHVyZUZvcm1hdDpEZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOlthZV19LGVbSWFdPXt0ZXh0dXJlRm9ybWF0OkRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W1BlXX0sZVtTYV09e3RleHR1cmVGb3JtYXQ6RGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbRXRdfSxlW1JhXT17dGV4dHVyZUZvcm1hdDpEZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt4ZV19LGVbRmFdPXt0ZXh0dXJlRm9ybWF0OkRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1R0XX0sZVtfYV09e3RleHR1cmVGb3JtYXQ6d3QsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbSV19LGVbdmFdPXt0ZXh0dXJlRm9ybWF0Ond0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W2FlXX0sZVtFYV09e3RleHR1cmVGb3JtYXQ6d3QsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbOCw0XSx0eXBlOltNLEhdfSxlW1RhXT17dGV4dHVyZUZvcm1hdDp3dCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltNXX0sZVt3YV09e3RleHR1cmVGb3JtYXQ6a2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbSV19LGVbQWFdPXt0ZXh0dXJlRm9ybWF0OmtlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W2FlXX0sZVtnYV09e3RleHR1cmVGb3JtYXQ6a2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbUGVdfSxlW3lhXT17dGV4dHVyZUZvcm1hdDprZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltFdF19LGVbYmFdPXt0ZXh0dXJlRm9ybWF0OmtlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W3hlXX0sZVt4YV09e3RleHR1cmVGb3JtYXQ6a2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbVHRdfSxlW1BhXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0ldfSxlW2thXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0ldfSxlW0RhXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsMl0sdHlwZTpbSSxPbl19LGVbQ2FdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbYWVdfSxlW0JhXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbTSxILGZ1XX0sZVtNYV09e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2LDRdLHR5cGU6W00sSCxsdV19LGVbT2FdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNl0sdHlwZTpbTSxIXX0sZVtVYV09e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbTV19LGVbTmFdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0ldfSxlW0xhXT17dGV4dHVyZUZvcm1hdDpDZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOlthZV19LGVbemFdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzZdLHR5cGU6W1BlXX0sZVtHYV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbRXRdfSxlWyRhXT17dGV4dHVyZUZvcm1hdDpDZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbeGVdfSxlW1dhXT17dGV4dHVyZUZvcm1hdDpDZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbVHRdfSxlW1ZhXT17dGV4dHVyZUZvcm1hdDpTLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0ldfSxlW0hhXT17dGV4dHVyZUZvcm1hdDpTLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0ldfSxlW2phXT17dGV4dHVyZUZvcm1hdDpTLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2FlXX0sZVtZYV09e3RleHR1cmVGb3JtYXQ6Uyxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDIsNF0sdHlwZTpbSSxNbixicl19LGVbWGFdPXt0ZXh0dXJlRm9ybWF0OlMsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltJLEJuXX0sZVtRYV09e3RleHR1cmVGb3JtYXQ6Uyxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlticl19LGVbcWFdPXt0ZXh0dXJlRm9ybWF0OlMsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTYsOF0sdHlwZTpbTSxIXX0sZVtLYV09e3RleHR1cmVGb3JtYXQ6Uyxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxNl0sdHlwZTpbTV19LGVbSmFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0ldfSxlW1phXT17dGV4dHVyZUZvcm1hdDpfZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlthZV19LGVbZXVdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2JyXX0sZVt0dV09e3RleHR1cmVGb3JtYXQ6X2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbUGVdfSxlW3J1XT17dGV4dHVyZUZvcm1hdDpfZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltFdF19LGVbbnVdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltUdF19LGVbb3VdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOlt4ZV19LGVbaXVdPXt0ZXh0dXJlRm9ybWF0OkhlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzIsNF0sdHlwZTpbUGUseGVdfSxlW3N1XT17dGV4dHVyZUZvcm1hdDpIZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt4ZV19LGVbYXVdPXt0ZXh0dXJlRm9ybWF0OkhlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W01dfSxlW2N1XT17dGV4dHVyZUZvcm1hdDpTbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltodV19LGVbdXVdPXt0ZXh0dXJlRm9ybWF0OlNuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2R1XX0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtjb25zdCBuPWVbdF07bi5ieXRlc1BlckVsZW1lbnRNYXA9e30sbi5ieXRlc1BlckVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbihvLGkpe2NvbnN0IHM9bi50eXBlW2ldO24uYnl0ZXNQZXJFbGVtZW50TWFwW3NdPW99KX0pLHhyPWV9cmV0dXJuIHhyW3JdfWZ1bmN0aW9uIG11KHIsZSl7Y29uc3QgdD1JdChyKTtpZighdCl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7Y29uc3Qgbj10LmJ5dGVzUGVyRWxlbWVudE1hcFtlXTtpZihuPT09dm9pZCAwKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gbn1mdW5jdGlvbiBZZShyKXtjb25zdCBlPUl0KHIpO2lmKCFlKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm57Zm9ybWF0OmUudGV4dHVyZUZvcm1hdCx0eXBlOmUudHlwZVswXX19ZnVuY3Rpb24gVW4ocil7cmV0dXJuKHImci0xKT09PTB9ZnVuY3Rpb24gcHUocixlLHQsbil7aWYoIVdlKHIpKXJldHVybiBVbihlKSYmVW4odCk7Y29uc3Qgbz1JdChuKTtpZighbyl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIG8uY29sb3JSZW5kZXJhYmxlJiZvLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIGd1KHIpe2NvbnN0IGU9SXQocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBlLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIHl1KHIsZSx0KXtyZXR1cm4gVmUoZSk/ZnIoZSk6dHx8SX1mdW5jdGlvbiBTdChyLGUsdCxuLG8pe2lmKG8lMSE9PTApdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7aWYoIXQmJiFuKXtjb25zdCBpPU1hdGguc3FydChvLyhlPT09c2U/NjoxKSk7aSUxPT09MD8odD1pLG49aSk6KHQ9byxuPTEpfWVsc2UgaWYobil7aWYoIXQmJih0PW8vbix0JTEpKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMifWVsc2UgaWYobj1vL3QsbiUxKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMiO3JldHVybnt3aWR0aDp0LGhlaWdodDpufX1mdW5jdGlvbiBCZShyLGUpe2UuY29sb3JzcGFjZUNvbnZlcnNpb24hPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoYWEsZS5jb2xvcnNwYWNlQ29udmVyc2lvbiksZS5wcmVtdWx0aXBseUFscGhhIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKHVhLGUucHJlbXVsdGlwbHlBbHBoYSksZS5mbGlwWSE9PXZvaWQgMCYmci5waXhlbFN0b3JlaShjYSxlLmZsaXBZKX1mdW5jdGlvbiBObihyKXtyLnBpeGVsU3RvcmVpKHlyLDQpLFdlKHIpJiYoci5waXhlbFN0b3JlaShGbiwwKSxyLnBpeGVsU3RvcmVpKFBuLDApLHIucGl4ZWxTdG9yZWkoa24sMCksci5waXhlbFN0b3JlaShEbiwwKSxyLnBpeGVsU3RvcmVpKENuLDApKX1mdW5jdGlvbiBidShyLGUsdCxuKXtuLm1pbk1hZyYmKHQuY2FsbChyLGUscHIsbi5taW5NYWcpLHQuY2FsbChyLGUsZ3Isbi5taW5NYWcpKSxuLm1pbiYmdC5jYWxsKHIsZSxwcixuLm1pbiksbi5tYWcmJnQuY2FsbChyLGUsZ3Isbi5tYWcpLG4ud3JhcCYmKHQuY2FsbChyLGUsX3Qsbi53cmFwKSx0LmNhbGwocixlLHZ0LG4ud3JhcCksKGU9PT15ZXx8d3MocixlKSkmJnQuY2FsbChyLGUsUm4sbi53cmFwKSksbi53cmFwUiYmdC5jYWxsKHIsZSxSbixuLndyYXBSKSxuLndyYXBTJiZ0LmNhbGwocixlLF90LG4ud3JhcFMpLG4ud3JhcFQmJnQuY2FsbChyLGUsdnQsbi53cmFwVCksbi5taW5Mb2QhPT12b2lkIDAmJnQuY2FsbChyLGUsdGEsbi5taW5Mb2QpLG4ubWF4TG9kIT09dm9pZCAwJiZ0LmNhbGwocixlLHJhLG4ubWF4TG9kKSxuLmJhc2VMZXZlbCE9PXZvaWQgMCYmdC5jYWxsKHIsZSxuYSxuLmJhc2VMZXZlbCksbi5tYXhMZXZlbCE9PXZvaWQgMCYmdC5jYWxsKHIsZSxvYSxuLm1heExldmVsKSxuLmNvbXBhcmVGdW5jIT09dm9pZCAwJiZ0LmNhbGwocixlLHNhLG4uY29tcGFyZUZ1bmMpLG4uY29tcGFyZU1vZGUhPT12b2lkIDAmJnQuY2FsbChyLGUsaWEsbi5jb21wYXJlTW9kZSl9ZnVuY3Rpb24gTG4ocixlLHQpe2NvbnN0IG49dC50YXJnZXR8fGllO3IuYmluZFRleHR1cmUobixlKSxidShyLG4sci50ZXhQYXJhbWV0ZXJpLHQpfWZ1bmN0aW9uIHh1KHIpe3JldHVybiByPXJ8fG9lLnRleHR1cmVDb2xvcixWZShyKT9yOm5ldyBVaW50OEFycmF5KFtyWzBdKjI1NSxyWzFdKjI1NSxyWzJdKjI1NSxyWzNdKjI1NV0pfWZ1bmN0aW9uIF9yKHIsZSx0LG4sbyxpKXt0PXR8fG9lLnRleHR1cmVPcHRpb25zLGk9aXx8Uztjb25zdCBzPXQudGFyZ2V0fHxpZTtpZihuPW58fHQud2lkdGgsbz1vfHx0LmhlaWdodCxyLmJpbmRUZXh0dXJlKHMsZSkscHUocixuLG8saSkpci5nZW5lcmF0ZU1pcG1hcChzKTtlbHNle2NvbnN0IGE9Z3UoaSk/UXM6WHM7ci50ZXhQYXJhbWV0ZXJpKHMscHIsYSksci50ZXhQYXJhbWV0ZXJpKHMsZ3IsYSksci50ZXhQYXJhbWV0ZXJpKHMsX3QseHQpLHIudGV4UGFyYW1ldGVyaShzLHZ0LHh0KX19ZnVuY3Rpb24gWGUocil7cmV0dXJuIHIuYXV0bz09PSEwfHxyLmF1dG89PT12b2lkIDAmJnIubGV2ZWw9PT12b2lkIDB9ZnVuY3Rpb24gdnIocixlKXtyZXR1cm4gZT1lfHx7fSxlLmN1YmVGYWNlT3JkZXJ8fFttcixxcyxLcyxKcyxacyxlYV19ZnVuY3Rpb24gRXIocixlKXtjb25zdCBuPXZyKHIsZSkubWFwKGZ1bmN0aW9uKG8saSl7cmV0dXJue2ZhY2U6byxuZHg6aX19KTtyZXR1cm4gbi5zb3J0KGZ1bmN0aW9uKG8saSl7cmV0dXJuIG8uZmFjZS1pLmZhY2V9KSxufWZ1bmN0aW9uIHpuKHIsZSx0LG4pe249bnx8b2UudGV4dHVyZU9wdGlvbnM7Y29uc3Qgbz1uLnRhcmdldHx8aWUsaT1uLmxldmVsfHwwO2xldCBzPXQud2lkdGgsYT10LmhlaWdodDtjb25zdCB1PW4uaW50ZXJuYWxGb3JtYXR8fG4uZm9ybWF0fHxTLGY9WWUodSksZD1uLmZvcm1hdHx8Zi5mb3JtYXQscD1uLnR5cGV8fGYudHlwZTtpZihCZShyLG4pLHIuYmluZFRleHR1cmUobyxlKSxvPT09c2Upe2NvbnN0IGc9dC53aWR0aCxiPXQuaGVpZ2h0O2xldCBoLHg7aWYoZy82PT09YiloPWIseD1bMCwwLDEsMCwyLDAsMywwLDQsMCw1LDBdO2Vsc2UgaWYoYi82PT09ZyloPWcseD1bMCwwLDAsMSwwLDIsMCwzLDAsNCwwLDVdO2Vsc2UgaWYoZy8zPT09Yi8yKWg9Zy8zLHg9WzAsMCwxLDAsMiwwLDAsMSwxLDEsMiwxXTtlbHNlIGlmKGcvMj09PWIvMyloPWcvMix4PVswLDAsMSwwLDAsMSwxLDEsMCwyLDEsMl07ZWxzZSB0aHJvdyJjYW4ndCBmaWd1cmUgb3V0IGN1YmUgbWFwIGZyb20gZWxlbWVudDogIisodC5zcmM/dC5zcmM6dC5ub2RlTmFtZSk7Y29uc3QgRT1UbigpO0U/KEUuY2FudmFzLndpZHRoPWgsRS5jYW52YXMuaGVpZ2h0PWgscz1oLGE9aCxFcihyLG4pLmZvckVhY2goZnVuY3Rpb24odil7Y29uc3QgUj14W3YubmR4KjIrMF0qaCxQPXhbdi5uZHgqMisxXSpoO0UuZHJhd0ltYWdlKHQsUixQLGgsaCwwLDAsaCxoKSxyLnRleEltYWdlMkQodi5mYWNlLGksdSxkLHAsRS5jYW52YXMpfSksRS5jYW52YXMud2lkdGg9MSxFLmNhbnZhcy5oZWlnaHQ9MSk6dHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwPCJ1IiYmKHM9aCxhPWgsRXIocixuKS5mb3JFYWNoKGZ1bmN0aW9uKHYpe2NvbnN0IFI9eFt2Lm5keCoyKzBdKmgsUD14W3YubmR4KjIrMV0qaDtyLnRleEltYWdlMkQodi5mYWNlLGksdSxoLGgsMCxkLHAsbnVsbCksY3JlYXRlSW1hZ2VCaXRtYXAodCxSLFAsaCxoLHtwcmVtdWx0aXBseUFscGhhOiJub25lIixjb2xvclNwYWNlQ29udmVyc2lvbjoibm9uZSJ9KS50aGVuKGZ1bmN0aW9uKHope0JlKHIsbiksci5iaW5kVGV4dHVyZShvLGUpLHIudGV4SW1hZ2UyRCh2LmZhY2UsaSx1LGQscCx6KSxYZShuKSYmX3IocixlLG4scyxhLHUpfSl9KSl9ZWxzZSBpZihvPT09eWV8fG89PT1iZSl7Y29uc3QgZz1NYXRoLm1pbih0LndpZHRoLHQuaGVpZ2h0KSxiPU1hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLGg9Yi9nO2lmKGglMSE9PTApdGhyb3ciY2FuIG5vdCBjb21wdXRlIDNEIGRpbWVuc2lvbnMgb2YgZWxlbWVudCI7Y29uc3QgeD10LndpZHRoPT09Yj8xOjAsRT10LmhlaWdodD09PWI/MTowO3IucGl4ZWxTdG9yZWkoeXIsMSksci5waXhlbFN0b3JlaShGbix0LndpZHRoKSxyLnBpeGVsU3RvcmVpKFBuLDApLHIucGl4ZWxTdG9yZWkoQ24sMCksci50ZXhJbWFnZTNEKG8saSx1LGcsZyxnLDAsZCxwLG51bGwpO2ZvcihsZXQgdj0wO3Y8aDsrK3Ype2NvbnN0IFI9dipnKngsUD12KmcqRTtyLnBpeGVsU3RvcmVpKGtuLFIpLHIucGl4ZWxTdG9yZWkoRG4sUCksci50ZXhTdWJJbWFnZTNEKG8saSwwLDAsdixnLGcsMSxkLHAsdCl9Tm4ocil9ZWxzZSByLnRleEltYWdlMkQobyxpLHUsZCxwLHQpO1hlKG4pJiZfcihyLGUsbixzLGEsdSksTG4ocixlLG4pfWZ1bmN0aW9uIFFlKCl7fWZ1bmN0aW9uIF91KHIpe2lmKHR5cGVvZiBkb2N1bWVudDwidSIpe2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3JldHVybiBlLmhyZWY9cixlLmhvc3RuYW1lPT09bG9jYXRpb24uaG9zdG5hbWUmJmUucG9ydD09PWxvY2F0aW9uLnBvcnQmJmUucHJvdG9jb2w9PT1sb2NhdGlvbi5wcm90b2NvbH1lbHNle2NvbnN0IGU9bmV3IFVSTChsb2NhdGlvbi5ocmVmKS5vcmlnaW47cmV0dXJuIG5ldyBVUkwocixsb2NhdGlvbi5ocmVmKS5vcmlnaW49PT1lfX1mdW5jdGlvbiB2dShyLGUpe3JldHVybiBlPT09dm9pZCAwJiYhX3Uocik/ImFub255bW91cyI6ZX1mdW5jdGlvbiBFdShyLGUsdCl7dD10fHxRZTtsZXQgbjtpZihlPWUhPT12b2lkIDA/ZTpvZS5jcm9zc09yaWdpbixlPXZ1KHIsZSksdHlwZW9mIEltYWdlPCJ1Iil7bj1uZXcgSW1hZ2UsZSE9PXZvaWQgMCYmKG4uY3Jvc3NPcmlnaW49ZSk7Y29uc3Qgbz1mdW5jdGlvbigpe24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGkpLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIscyksbj1udWxsfSxpPWZ1bmN0aW9uKCl7Y29uc3QgdT0iY291bGRuJ3QgbG9hZCBpbWFnZTogIityO21uKHUpLHQodSxuKSxvKCl9LHM9ZnVuY3Rpb24oKXt0KG51bGwsbiksbygpfTtyZXR1cm4gbi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsaSksbi5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuLnNyYz1yLG59ZWxzZSBpZih0eXBlb2YgSW1hZ2VCaXRtYXA8InUiKXtsZXQgbyxpO2NvbnN0IHM9ZnVuY3Rpb24oKXt0KG8saSl9LGE9e307ZSYmKGEubW9kZT0iY29ycyIpLGZldGNoKHIsYSkudGhlbihmdW5jdGlvbih1KXtpZighdS5vayl0aHJvdyB1O3JldHVybiB1LmJsb2IoKX0pLnRoZW4oZnVuY3Rpb24odSl7cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKHUse3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pfSkudGhlbihmdW5jdGlvbih1KXtpPXUsc2V0VGltZW91dChzKX0pLmNhdGNoKGZ1bmN0aW9uKHUpe289dSxzZXRUaW1lb3V0KHMpfSksbj1udWxsfXJldHVybiBufWZ1bmN0aW9uIEduKHIpe3JldHVybiB0eXBlb2YgSW1hZ2VCaXRtYXA8InUiJiZyIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXB8fHR5cGVvZiBJbWFnZURhdGE8InUiJiZyIGluc3RhbmNlb2YgSW1hZ2VEYXRhfHx0eXBlb2YgSFRNTEVsZW1lbnQ8InUiJiZyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9ZnVuY3Rpb24gVHIocixlLHQpe3JldHVybiBHbihyKT8oc2V0VGltZW91dChmdW5jdGlvbigpe3QobnVsbCxyKX0pLHIpOkV1KHIsZSx0KX1mdW5jdGlvbiB3cihyLGUsdCl7dD10fHxvZS50ZXh0dXJlT3B0aW9ucztjb25zdCBuPXQudGFyZ2V0fHxpZTtpZihyLmJpbmRUZXh0dXJlKG4sZSksdC5jb2xvcj09PSExKXJldHVybjtjb25zdCBvPXh1KHQuY29sb3IpO2lmKG49PT1zZSlmb3IobGV0IGk9MDtpPDY7KytpKXIudGV4SW1hZ2UyRChtcitpLDAsUywxLDEsMCxTLEksbyk7ZWxzZSBuPT09eWV8fG49PT1iZT9yLnRleEltYWdlM0QobiwwLFMsMSwxLDEsMCxTLEksbyk6ci50ZXhJbWFnZTJEKG4sMCxTLDEsMSwwLFMsSSxvKX1mdW5jdGlvbiBUdShyLGUsdCxuKXtyZXR1cm4gbj1ufHxRZSx0PXR8fG9lLnRleHR1cmVPcHRpb25zLHdyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCksVHIodC5zcmMsdC5jcm9zc09yaWdpbixmdW5jdGlvbihpLHMpe2k/bihpLGUscyk6KHpuKHIsZSxzLHQpLG4obnVsbCxlLHMpKX0pfWZ1bmN0aW9uIHd1KHIsZSx0LG4pe249bnx8UWU7Y29uc3Qgbz10LnNyYztpZihvLmxlbmd0aCE9PTYpdGhyb3cidGhlcmUgbXVzdCBiZSA2IHVybHMgZm9yIGEgY3ViZW1hcCI7Y29uc3QgaT10LmxldmVsfHwwLHM9dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fFMsYT1ZZShzKSx1PXQuZm9ybWF0fHxhLmZvcm1hdCxmPXQudHlwZXx8SSxkPXQudGFyZ2V0fHxpZTtpZihkIT09c2UpdGhyb3cidGFyZ2V0IG11c3QgYmUgVEVYVFVSRV9DVUJFX01BUCI7d3IocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KTtsZXQgcD02O2NvbnN0IGc9W10sYj12cihyLHQpO2xldCBoO2Z1bmN0aW9uIHgoRSl7cmV0dXJuIGZ1bmN0aW9uKHYsUil7LS1wLHY/Zy5wdXNoKHYpOlIud2lkdGghPT1SLmhlaWdodD9nLnB1c2goImN1YmVtYXAgZmFjZSBpbWcgaXMgbm90IGEgc3F1YXJlOiAiK1Iuc3JjKTooQmUocix0KSxyLmJpbmRUZXh0dXJlKGQsZSkscD09PTU/dnIoKS5mb3JFYWNoKGZ1bmN0aW9uKFApe3IudGV4SW1hZ2UyRChQLGkscyx1LGYsUil9KTpyLnRleEltYWdlMkQoRSxpLHMsdSxmLFIpLFhlKHQpJiZyLmdlbmVyYXRlTWlwbWFwKGQpKSxwPT09MCYmbihnLmxlbmd0aD9nOnZvaWQgMCxlLGgpfX1oPW8ubWFwKGZ1bmN0aW9uKEUsdil7cmV0dXJuIFRyKEUsdC5jcm9zc09yaWdpbix4KGJbdl0pKX0pfWZ1bmN0aW9uIEF1KHIsZSx0LG4pe249bnx8UWU7Y29uc3Qgbz10LnNyYyxpPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxTLHM9WWUoaSksYT10LmZvcm1hdHx8cy5mb3JtYXQsdT10LnR5cGV8fEksZj10LnRhcmdldHx8YmU7aWYoZiE9PXllJiZmIT09YmUpdGhyb3cidGFyZ2V0IG11c3QgYmUgVEVYVFVSRV8zRCBvciBURVhUVVJFXzJEX0FSUkFZIjt3cihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBkPW8ubGVuZ3RoO2NvbnN0IHA9W107bGV0IGc7Y29uc3QgYj10LmxldmVsfHwwO2xldCBoPXQud2lkdGgseD10LmhlaWdodDtjb25zdCBFPW8ubGVuZ3RoO2xldCB2PSEwO2Z1bmN0aW9uIFIoUCl7cmV0dXJuIGZ1bmN0aW9uKHosTCl7aWYoLS1kLHopcC5wdXNoKHopO2Vsc2V7aWYoQmUocix0KSxyLmJpbmRUZXh0dXJlKGYsZSksdil7dj0hMSxoPXQud2lkdGh8fEwud2lkdGgseD10LmhlaWdodHx8TC5oZWlnaHQsci50ZXhJbWFnZTNEKGYsYixpLGgseCxFLDAsYSx1LG51bGwpO2ZvcihsZXQgVj0wO1Y8RTsrK1Ypci50ZXhTdWJJbWFnZTNEKGYsYiwwLDAsVixoLHgsMSxhLHUsTCl9ZWxzZXtsZXQgVj1MLEc7KEwud2lkdGghPT1ofHxMLmhlaWdodCE9PXgpJiYoRz1UbigpLFY9Ry5jYW52YXMsRy5jYW52YXMud2lkdGg9aCxHLmNhbnZhcy5oZWlnaHQ9eCxHLmRyYXdJbWFnZShMLDAsMCxoLHgpKSxyLnRleFN1YkltYWdlM0QoZixiLDAsMCxQLGgseCwxLGEsdSxWKSxHJiZWPT09Ry5jYW52YXMmJihHLmNhbnZhcy53aWR0aD0wLEcuY2FudmFzLmhlaWdodD0wKX1YZSh0KSYmci5nZW5lcmF0ZU1pcG1hcChmKX1kPT09MCYmbihwLmxlbmd0aD9wOnZvaWQgMCxlLGcpfX1nPW8ubWFwKGZ1bmN0aW9uKFAseil7cmV0dXJuIFRyKFAsdC5jcm9zc09yaWdpbixSKHopKX0pfWZ1bmN0aW9uIEl1KHIsZSx0LG4pe249bnx8b2UudGV4dHVyZU9wdGlvbnM7Y29uc3Qgbz1uLnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShvLGUpO2xldCBpPW4ud2lkdGgscz1uLmhlaWdodCxhPW4uZGVwdGg7Y29uc3QgdT1uLmxldmVsfHwwLGY9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fFMsZD1ZZShmKSxwPW4uZm9ybWF0fHxkLmZvcm1hdCxnPW4udHlwZXx8eXUocix0LGQudHlwZSk7aWYoVmUodCkpdCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiYodD1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcikpO2Vsc2V7Y29uc3QgRT1obihnKTt0PW5ldyBFKHQpfWNvbnN0IGI9bXUoZixnKSxoPXQuYnl0ZUxlbmd0aC9iO2lmKGglMSl0aHJvdyJsZW5ndGggd3Jvbmcgc2l6ZSBmb3IgZm9ybWF0OiAiK0VuKHIscCk7bGV0IHg7aWYobz09PXllfHxvPT09YmUpaWYoIWkmJiFzJiYhYSl7Y29uc3QgRT1NYXRoLmNicnQoaCk7aWYoRSUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBjdWJlIHNpemUgb2YgYXJyYXkgb2YgbnVtRWxlbWVudHM6ICIraDtpPUUscz1FLGE9RX1lbHNlIGkmJighc3x8IWEpPyh4PVN0KHIsbyxzLGEsaC9pKSxzPXgud2lkdGgsYT14LmhlaWdodCk6cyYmKCFpfHwhYSk/KHg9U3QocixvLGksYSxoL3MpLGk9eC53aWR0aCxhPXguaGVpZ2h0KTooeD1TdChyLG8saSxzLGgvYSksaT14LndpZHRoLHM9eC5oZWlnaHQpO2Vsc2UgeD1TdChyLG8saSxzLGgpLGk9eC53aWR0aCxzPXguaGVpZ2h0O2lmKE5uKHIpLHIucGl4ZWxTdG9yZWkoeXIsbi51bnBhY2tBbGlnbm1lbnR8fDEpLEJlKHIsbiksbz09PXNlKXtjb25zdCBFPWIvdC5CWVRFU19QRVJfRUxFTUVOVCx2PWgvNipFO0VyKHIsbikuZm9yRWFjaChSPT57Y29uc3QgUD12KlIubmR4LHo9dC5zdWJhcnJheShQLFArdik7ci50ZXhJbWFnZTJEKFIuZmFjZSx1LGYsaSxzLDAscCxnLHopfSl9ZWxzZSBvPT09eWV8fG89PT1iZT9yLnRleEltYWdlM0Qobyx1LGYsaSxzLGEsMCxwLGcsdCk6ci50ZXhJbWFnZTJEKG8sdSxmLGkscywwLHAsZyx0KTtyZXR1cm57d2lkdGg6aSxoZWlnaHQ6cyxkZXB0aDphLHR5cGU6Z319ZnVuY3Rpb24gU3UocixlLHQpe2NvbnN0IG49dC50YXJnZXR8fGllO3IuYmluZFRleHR1cmUobixlKTtjb25zdCBvPXQubGV2ZWx8fDAsaT10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8UyxzPVllKGkpLGE9dC5mb3JtYXR8fHMuZm9ybWF0LHU9dC50eXBlfHxzLnR5cGU7aWYoQmUocix0KSxuPT09c2UpZm9yKGxldCBmPTA7Zjw2OysrZilyLnRleEltYWdlMkQobXIrZixvLGksdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKTtlbHNlIG49PT15ZXx8bj09PWJlP3IudGV4SW1hZ2UzRChuLG8saSx0LndpZHRoLHQuaGVpZ2h0LHQuZGVwdGgsMCxhLHUsbnVsbCk6ci50ZXhJbWFnZTJEKG4sbyxpLHQud2lkdGgsdC5oZWlnaHQsMCxhLHUsbnVsbCl9ZnVuY3Rpb24gJG4ocixlLHQpe3Q9dHx8UWUsZT1lfHxvZS50ZXh0dXJlT3B0aW9ucztjb25zdCBuPXIuY3JlYXRlVGV4dHVyZSgpLG89ZS50YXJnZXR8fGllO2xldCBpPWUud2lkdGh8fDEscz1lLmhlaWdodHx8MTtjb25zdCBhPWUuaW50ZXJuYWxGb3JtYXR8fFM7ci5iaW5kVGV4dHVyZShvLG4pLG89PT1zZSYmKHIudGV4UGFyYW1ldGVyaShvLF90LHh0KSxyLnRleFBhcmFtZXRlcmkobyx2dCx4dCkpO2xldCB1PWUuc3JjO2lmKHUpaWYodHlwZW9mIHU9PSJmdW5jdGlvbiImJih1PXUocixlKSksdHlwZW9mIHU9PSJzdHJpbmciKVR1KHIsbixlLHQpO2Vsc2UgaWYoVmUodSl8fEFycmF5LmlzQXJyYXkodSkmJih0eXBlb2YgdVswXT09Im51bWJlciJ8fEFycmF5LmlzQXJyYXkodVswXSl8fFZlKHVbMF0pKSl7Y29uc3QgZj1JdShyLG4sdSxlKTtpPWYud2lkdGgscz1mLmhlaWdodH1lbHNlIEFycmF5LmlzQXJyYXkodSkmJih0eXBlb2YgdVswXT09InN0cmluZyJ8fEduKHVbMF0pKT9vPT09c2U/d3UocixuLGUsdCk6QXUocixuLGUsdCk6KHpuKHIsbix1LGUpLGk9dS53aWR0aCxzPXUuaGVpZ2h0KTtlbHNlIFN1KHIsbixlKTtyZXR1cm4gWGUoZSkmJl9yKHIsbixlLGkscyxhKSxMbihyLG4sZSksbn1jb25zdCBBcj1tbjtmdW5jdGlvbiBXbihyKXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQ/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocik6bnVsbH1jb25zdCBSdD0zMzk4NCxGdD0zNDk2MixSdT0zNDk2MyxGdT0zNTcxMyxQdT0zNTcxNCxrdT0zNTYzMixEdT0zNTYzMyxDdT0zNTk4MSxWbj0zNTcxOCxCdT0zNTcyMSxNdT0zNTk3MSxPdT0zNTM4MixVdT0zNTM5NixOdT0zNTM5OCxMdT0zNTM5Mix6dT0zNTM5NSxQdD01MTI2LEhuPTM1NjY0LGpuPTM1NjY1LFluPTM1NjY2LElyPTUxMjQsWG49MzU2NjcsUW49MzU2NjgscW49MzU2NjksS249MzU2NzAsSm49MzU2NzEsWm49MzU2NzIsZW89MzU2NzMsdG89MzU2NzQscm89MzU2NzUsbm89MzU2NzYsR3U9MzU2NzgsJHU9MzU2ODAsV3U9MzU2NzksVnU9MzU2ODIsSHU9MzU2ODUsanU9MzU2ODYsWXU9MzU2ODcsWHU9MzU2ODgsUXU9MzU2ODkscXU9MzU2OTAsS3U9MzYyODksSnU9MzYyOTIsWnU9MzYyOTMsU3I9NTEyNSxvbz0zNjI5NCxpbz0zNjI5NSxzbz0zNjI5NixlYz0zNjI5OCx0Yz0zNjI5OSxyYz0zNjMwMCxuYz0zNjMwMyxvYz0zNjMwNixpYz0zNjMwNyxzYz0zNjMwOCxhYz0zNjMxMSxrdD0zNTUzLER0PTM0MDY3LFJyPTMyODc5LEN0PTM1ODY2LF89e307ZnVuY3Rpb24gYW8ocixlKXtyZXR1cm4gX1tlXS5iaW5kUG9pbnR9ZnVuY3Rpb24gdWMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWYoZSx0KX19ZnVuY3Rpb24gY2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWZ2KGUsdCl9fWZ1bmN0aW9uIGZjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJmdihlLHQpfX1mdW5jdGlvbiBsYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zZnYoZSx0KX19ZnVuY3Rpb24gZGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGZ2KGUsdCl9fWZ1bmN0aW9uIHVvKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFpKGUsdCl9fWZ1bmN0aW9uIGNvKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFpdihlLHQpfX1mdW5jdGlvbiBmbyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0yaXYoZSx0KX19ZnVuY3Rpb24gbG8ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM2l2KGUsdCl9fWZ1bmN0aW9uIGhvKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTRpdihlLHQpfX1mdW5jdGlvbiBoYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWkoZSx0KX19ZnVuY3Rpb24gbWMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMXVpdihlLHQpfX1mdW5jdGlvbiBwYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0ydWl2KGUsdCl9fWZ1bmN0aW9uIGdjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTN1aXYoZSx0KX19ZnVuY3Rpb24geWMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNHVpdihlLHQpfX1mdW5jdGlvbiBiYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgyZnYoZSwhMSx0KX19ZnVuY3Rpb24geGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIF9jKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDRmdihlLCExLHQpfX1mdW5jdGlvbiB2YyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgyeDNmdihlLCExLHQpfX1mdW5jdGlvbiBFYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzeDJmdihlLCExLHQpfX1mdW5jdGlvbiBUYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgyeDRmdihlLCExLHQpfX1mdW5jdGlvbiB3YyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXg0eDJmdihlLCExLHQpfX1mdW5jdGlvbiBBYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzeDRmdihlLCExLHQpfX1mdW5jdGlvbiBJYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXg0eDNmdihlLCExLHQpfX1mdW5jdGlvbiBVKHIsZSx0LG4pe2NvbnN0IG89YW8ocixlKTtyZXR1cm4gV2Uocik/ZnVuY3Rpb24oaSl7bGV0IHMsYTshaXx8bHIocixpKT8ocz1pLGE9bnVsbCk6KHM9aS50ZXh0dXJlLGE9aS5zYW1wbGVyKSxyLnVuaWZvcm0xaShuLHQpLHIuYWN0aXZlVGV4dHVyZShSdCt0KSxyLmJpbmRUZXh0dXJlKG8scyksci5iaW5kU2FtcGxlcih0LGEpfTpmdW5jdGlvbihpKXtyLnVuaWZvcm0xaShuLHQpLHIuYWN0aXZlVGV4dHVyZShSdCt0KSxyLmJpbmRUZXh0dXJlKG8saSl9fWZ1bmN0aW9uIE4ocixlLHQsbixvKXtjb25zdCBpPWFvKHIsZSkscz1uZXcgSW50MzJBcnJheShvKTtmb3IobGV0IGE9MDthPG87KythKXNbYV09dCthO3JldHVybiBXZShyKT9mdW5jdGlvbihhKXtyLnVuaWZvcm0xaXYobixzKSxhLmZvckVhY2goZnVuY3Rpb24odSxmKXtyLmFjdGl2ZVRleHR1cmUoUnQrc1tmXSk7bGV0IGQscDshdXx8bHIocix1KT8oZD11LHA9bnVsbCk6KGQ9dS50ZXh0dXJlLHA9dS5zYW1wbGVyKSxyLmJpbmRTYW1wbGVyKHQscCksci5iaW5kVGV4dHVyZShpLGQpfSl9OmZ1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZShSdCtzW2ZdKSxyLmJpbmRUZXh0dXJlKGksdSl9KX19X1tQdF09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NCxzZXR0ZXI6dWMsYXJyYXlTZXR0ZXI6Y2N9LF9bSG5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjgsc2V0dGVyOmZjLGNvbHM6Mn0sX1tqbl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MTIsc2V0dGVyOmxjLGNvbHM6M30sX1tZbl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MTYsc2V0dGVyOmRjLGNvbHM6NH0sX1tJcl09e1R5cGU6SW50MzJBcnJheSxzaXplOjQsc2V0dGVyOnVvLGFycmF5U2V0dGVyOmNvfSxfW1huXT17VHlwZTpJbnQzMkFycmF5LHNpemU6OCxzZXR0ZXI6Zm8sY29sczoyfSxfW1FuXT17VHlwZTpJbnQzMkFycmF5LHNpemU6MTIsc2V0dGVyOmxvLGNvbHM6M30sX1txbl09e1R5cGU6SW50MzJBcnJheSxzaXplOjE2LHNldHRlcjpobyxjb2xzOjR9LF9bU3JdPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6aGMsYXJyYXlTZXR0ZXI6bWN9LF9bb29dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6OCxzZXR0ZXI6cGMsY29sczoyfSxfW2lvXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjEyLHNldHRlcjpnYyxjb2xzOjN9LF9bc29dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOnljLGNvbHM6NH0sX1tLbl09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo0LHNldHRlcjp1byxhcnJheVNldHRlcjpjb30sX1tKbl09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpmbyxjb2xzOjJ9LF9bWm5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTIsc2V0dGVyOmxvLGNvbHM6M30sX1tlb109e1R5cGU6VWludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6aG8sY29sczo0fSxfW3RvXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTozMixzZXR0ZXI6YmMscm93czoyLGNvbHM6Mn0sX1tyb109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOnhjLHJvd3M6Myxjb2xzOjN9LF9bbm9dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjY0LHNldHRlcjpfYyxyb3dzOjQsY29sczo0fSxfW0h1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTozMixzZXR0ZXI6dmMscm93czoyLGNvbHM6M30sX1tqdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOlRjLHJvd3M6Mixjb2xzOjR9LF9bWXVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpFYyxyb3dzOjMsY29sczoyfSxfW1h1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6QWMscm93czozLGNvbHM6NH0sX1tRdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOndjLHJvd3M6NCxjb2xzOjJ9LF9bcXVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjY0LHNldHRlcjpJYyxyb3dzOjQsY29sczozfSxfW0d1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDprdH0sX1skdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6RHR9LF9bV3VdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50OlJyfSxfW1Z1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDprdH0sX1tLdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6Q3R9LF9bSnVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50OkN0fSxfW1p1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDpEdH0sX1tlY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6a3R9LF9bdGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50OlJyfSxfW3JjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDpEdH0sX1tuY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6Q3R9LF9bb2NdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50Omt0fSxfW2ljXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDpScn0sX1tzY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6RHR9LF9bYWNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50OkN0fTtmdW5jdGlvbiBCdChyLGUpe3JldHVybiBmdW5jdGlvbih0KXtpZih0LnZhbHVlKXN3aXRjaChyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aCl7Y2FzZSA0OnIudmVydGV4QXR0cmliNGZ2KGUsdC52YWx1ZSk7YnJlYWs7Y2FzZSAzOnIudmVydGV4QXR0cmliM2Z2KGUsdC52YWx1ZSk7YnJlYWs7Y2FzZSAyOnIudmVydGV4QXR0cmliMmZ2KGUsdC52YWx1ZSk7YnJlYWs7Y2FzZSAxOnIudmVydGV4QXR0cmliMWZ2KGUsdC52YWx1ZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInRoZSBsZW5ndGggb2YgYSBmbG9hdCBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNCEiKX1lbHNlIHIuYmluZEJ1ZmZlcihGdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYlBvaW50ZXIoZSx0Lm51bUNvbXBvbmVudHN8fHQuc2l6ZSx0LnR5cGV8fFB0LHQubm9ybWFsaXplfHwhMSx0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiB1ZShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtpZih0LnZhbHVlKWlmKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoPT09NClyLnZlcnRleEF0dHJpYjRpdihlLHQudmFsdWUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJUaGUgbGVuZ3RoIG9mIGFuIGludGVnZXIgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSA0ISIpO2Vsc2Ugci5iaW5kQnVmZmVyKEZ0LHQuYnVmZmVyKSxyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmVydGV4QXR0cmliSVBvaW50ZXIoZSx0Lm51bUNvbXBvbmVudHN8fHQuc2l6ZSx0LnR5cGV8fElyLHQuc3RyaWRlfHwwLHQub2Zmc2V0fHwwKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlLHQuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIE10KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpaWYoci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGg9PT00KXIudmVydGV4QXR0cmliNHVpdihlLHQudmFsdWUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJUaGUgbGVuZ3RoIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSA0ISIpO2Vsc2Ugci5iaW5kQnVmZmVyKEZ0LHQuYnVmZmVyKSxyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmVydGV4QXR0cmliSVBvaW50ZXIoZSx0Lm51bUNvbXBvbmVudHN8fHQuc2l6ZSx0LnR5cGV8fFNyLHQuc3RyaWRlfHwwLHQub2Zmc2V0fHwwKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlLHQuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIEZyKHIsZSx0KXtjb25zdCBuPXQuc2l6ZSxvPXQuY291bnQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3IuYmluZEJ1ZmZlcihGdCxpLmJ1ZmZlcik7Y29uc3Qgcz1pLnNpemV8fGkubnVtQ29tcG9uZW50c3x8bixhPXMvbyx1PWkudHlwZXx8UHQsZD1fW3VdLnNpemUqcyxwPWkubm9ybWFsaXplfHwhMSxnPWkub2Zmc2V0fHwwLGI9ZC9vO2ZvcihsZXQgaD0wO2g8bzsrK2gpci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlK2gpLHIudmVydGV4QXR0cmliUG9pbnRlcihlK2gsYSx1LHAsZCxnK2IqaCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZStoLGkuZGl2aXNvcnx8MCl9fWNvbnN0IEY9e307RltQdF09e3NpemU6NCxzZXR0ZXI6QnR9LEZbSG5dPXtzaXplOjgsc2V0dGVyOkJ0fSxGW2puXT17c2l6ZToxMixzZXR0ZXI6QnR9LEZbWW5dPXtzaXplOjE2LHNldHRlcjpCdH0sRltJcl09e3NpemU6NCxzZXR0ZXI6dWV9LEZbWG5dPXtzaXplOjgsc2V0dGVyOnVlfSxGW1FuXT17c2l6ZToxMixzZXR0ZXI6dWV9LEZbcW5dPXtzaXplOjE2LHNldHRlcjp1ZX0sRltTcl09e3NpemU6NCxzZXR0ZXI6TXR9LEZbb29dPXtzaXplOjgsc2V0dGVyOk10fSxGW2lvXT17c2l6ZToxMixzZXR0ZXI6TXR9LEZbc29dPXtzaXplOjE2LHNldHRlcjpNdH0sRltLbl09e3NpemU6NCxzZXR0ZXI6dWV9LEZbSm5dPXtzaXplOjgsc2V0dGVyOnVlfSxGW1puXT17c2l6ZToxMixzZXR0ZXI6dWV9LEZbZW9dPXtzaXplOjE2LHNldHRlcjp1ZX0sRlt0b109e3NpemU6NCxzZXR0ZXI6RnIsY291bnQ6Mn0sRltyb109e3NpemU6OSxzZXR0ZXI6RnIsY291bnQ6M30sRltub109e3NpemU6MTYsc2V0dGVyOkZyLGNvdW50OjR9O2NvbnN0IFNjPS9FUlJPUjpccypcZCs6KFxkKykvZ2k7ZnVuY3Rpb24gUmMocixlPSIiLHQ9MCl7Y29uc3Qgbj1bLi4uZS5tYXRjaEFsbChTYyldLG89bmV3IE1hcChuLm1hcCgoaSxzKT0+e2NvbnN0IGE9cGFyc2VJbnQoaVsxXSksdT1uW3MrMV0sZj11P3UuaW5kZXg6ZS5sZW5ndGgsZD1lLnN1YnN0cmluZyhpLmluZGV4LGYpO3JldHVyblthLTEsZF19KSk7cmV0dXJuIHIuc3BsaXQoYApgKS5tYXAoKGkscyk9Pntjb25zdCBhPW8uZ2V0KHMpO3JldHVybmAke3MrMSt0fTogJHtpfSR7YT9gCgpeXl4gJHthfWA6IiJ9YH0pLmpvaW4oYApgKX1jb25zdCBtbz0vXlsgXHRdKlxuLztmdW5jdGlvbiBwbyhyKXtsZXQgZT0wO3JldHVybiBtby50ZXN0KHIpJiYoZT0xLHI9ci5yZXBsYWNlKG1vLCIiKSkse2xpbmVPZmZzZXQ6ZSxzaGFkZXJTb3VyY2U6cn19ZnVuY3Rpb24gRmMocixlKXtyZXR1cm4gci5lcnJvckNhbGxiYWNrKGUpLHIuY2FsbGJhY2smJnNldFRpbWVvdXQoKCk9PntyLmNhbGxiYWNrKGAke2V9CiR7ci5lcnJvcnMuam9pbihgCmApfWApfSksbnVsbH1mdW5jdGlvbiBQYyhyLGUsdCxuKXtpZihuPW58fEFyLCFyLmdldFNoYWRlclBhcmFtZXRlcih0LEZ1KSl7Y29uc3QgaT1yLmdldFNoYWRlckluZm9Mb2codCkse2xpbmVPZmZzZXQ6cyxzaGFkZXJTb3VyY2U6YX09cG8oci5nZXRTaGFkZXJTb3VyY2UodCkpLHU9YCR7UmMoYSxpLHMpfQpFcnJvciBjb21waWxpbmcgJHtFbihyLGUpfTogJHtpfWA7cmV0dXJuIG4odSksdX1yZXR1cm4iIn1mdW5jdGlvbiBQcihyLGUsdCl7bGV0IG4sbyxpO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iJiYodD1lLGU9dm9pZCAwKSx0eXBlb2Ygcj09ImZ1bmN0aW9uIil0PXIscj12b2lkIDA7ZWxzZSBpZihyJiYhQXJyYXkuaXNBcnJheShyKSl7Y29uc3QgZj1yO3Q9Zi5lcnJvckNhbGxiYWNrLHI9Zi5hdHRyaWJMb2NhdGlvbnMsbj1mLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3Msbz1mLnRyYW5zZm9ybUZlZWRiYWNrTW9kZSxpPWYuY2FsbGJhY2t9Y29uc3Qgcz10fHxBcixhPVtdLHU9e2Vycm9yQ2FsbGJhY2soZiwuLi5kKXthLnB1c2goZikscyhmLC4uLmQpfSx0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzOm4sdHJhbnNmb3JtRmVlZGJhY2tNb2RlOm8sY2FsbGJhY2s6aSxlcnJvcnM6YX07e2xldCBmPXt9O0FycmF5LmlzQXJyYXkocik/ci5mb3JFYWNoKGZ1bmN0aW9uKGQscCl7ZltkXT1lP2VbcF06cH0pOmY9cnx8e30sdS5hdHRyaWJMb2NhdGlvbnM9Zn1yZXR1cm4gdX1jb25zdCBrYz1bIlZFUlRFWF9TSEFERVIiLCJGUkFHTUVOVF9TSEFERVIiXTtmdW5jdGlvbiBEYyhyLGUpe2lmKGUuaW5kZXhPZigiZnJhZyIpPj0wKXJldHVybiBrdTtpZihlLmluZGV4T2YoInZlcnQiKT49MClyZXR1cm4gRHV9ZnVuY3Rpb24gQ2MocixlLHQpe2NvbnN0IG49ci5nZXRBdHRhY2hlZFNoYWRlcnMoZSk7Zm9yKGNvbnN0IG8gb2Ygbil0LmhhcyhvKSYmci5kZWxldGVTaGFkZXIobyk7ci5kZWxldGVQcm9ncmFtKGUpfWNvbnN0IEJjPShyPTApPT5uZXcgUHJvbWlzZShlPT5zZXRUaW1lb3V0KGUscikpO2Z1bmN0aW9uIE1jKHIsZSx0KXtjb25zdCBuPXIuY3JlYXRlUHJvZ3JhbSgpLHthdHRyaWJMb2NhdGlvbnM6byx0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzOmksdHJhbnNmb3JtRmVlZGJhY2tNb2RlOnN9PVByKHQpO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7KythKXtsZXQgdT1lW2FdO2lmKHR5cGVvZiB1PT0ic3RyaW5nIil7Y29uc3QgZj1Xbih1KSxkPWY/Zi50ZXh0OnU7bGV0IHA9cltrY1thXV07ZiYmZi50eXBlJiYocD1EYyhyLGYudHlwZSl8fHApLHU9ci5jcmVhdGVTaGFkZXIocCksci5zaGFkZXJTb3VyY2UodSxwbyhkKS5zaGFkZXJTb3VyY2UpLHIuY29tcGlsZVNoYWRlcih1KSxyLmF0dGFjaFNoYWRlcihuLHUpfX1PYmplY3QuZW50cmllcyhvKS5mb3JFYWNoKChbYSx1XSk9PnIuYmluZEF0dHJpYkxvY2F0aW9uKG4sdSxhKSk7e2xldCBhPWk7YSYmKGEuYXR0cmlicyYmKGE9YS5hdHRyaWJzKSxBcnJheS5pc0FycmF5KGEpfHwoYT1PYmplY3Qua2V5cyhhKSksci50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKG4sYSxzfHxDdSkpfXJldHVybiByLmxpbmtQcm9ncmFtKG4pLG59ZnVuY3Rpb24gT2MocixlLHQsbixvKXtjb25zdCBpPVByKHQsbixvKSxzPW5ldyBTZXQoZSksYT1NYyhyLGUsaSk7ZnVuY3Rpb24gdShmLGQpe2NvbnN0IHA9TmMoZixkLGkuZXJyb3JDYWxsYmFjayk7cmV0dXJuIHAmJkNjKGYsZCxzKSxwfWlmKGkuY2FsbGJhY2spe1VjKHIsYSkudGhlbigoKT0+e2NvbnN0IGY9dShyLGEpO2kuY2FsbGJhY2soZixmP3ZvaWQgMDphKX0pO3JldHVybn1yZXR1cm4gdShyLGEpP3ZvaWQgMDphfWFzeW5jIGZ1bmN0aW9uIFVjKHIsZSl7Y29uc3QgdD1yLmdldEV4dGVuc2lvbigiS0hSX3BhcmFsbGVsX3NoYWRlcl9jb21waWxlIiksbj10PyhpLHMpPT5pLmdldFByb2dyYW1QYXJhbWV0ZXIocyx0LkNPTVBMRVRJT05fU1RBVFVTX0tIUik6KCk9PiEwO2xldCBvPTA7ZG8gYXdhaXQgQmMobyksbz0xZTMvNjA7d2hpbGUoIW4ocixlKSl9ZnVuY3Rpb24gTmMocixlLHQpe2lmKHQ9dHx8QXIsIXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLFB1KSl7Y29uc3Qgbz1yLmdldFByb2dyYW1JbmZvTG9nKGUpO3QoYEVycm9yIGluIHByb2dyYW0gbGlua2luZzogJHtvfWApO2NvbnN0IHM9ci5nZXRBdHRhY2hlZFNoYWRlcnMoZSkubWFwKGE9PlBjKHIsci5nZXRTaGFkZXJQYXJhbWV0ZXIoYSxyLlNIQURFUl9UWVBFKSxhLHQpKTtyZXR1cm5gJHtvfQoke3MuZmlsdGVyKGE9PmEpLmpvaW4oYApgKX1gfX1mdW5jdGlvbiBMYyhyLGUsdCxuLG8pe3JldHVybiBPYyhyLGUsdCxuLG8pfWZ1bmN0aW9uIGdvKHIpe2NvbnN0IGU9ci5uYW1lO3JldHVybiBlLnN0YXJ0c1dpdGgoImdsXyIpfHxlLnN0YXJ0c1dpdGgoIndlYmdsXyIpfWNvbnN0IHpjPS8oXC58XFt8XXxcdyspL2csR2M9cj0+cj49IjAiJiZyPD0iOSI7ZnVuY3Rpb24gJGMocixlLHQsbil7Y29uc3Qgbz1yLnNwbGl0KHpjKS5maWx0ZXIoYT0+YSE9PSIiKTtsZXQgaT0wLHM9IiI7Zm9yKDs7KXtjb25zdCBhPW9baSsrXTtzKz1hO2NvbnN0IHU9R2MoYVswXSksZj11P3BhcnNlSW50KGEpOmE7aWYodSYmKHMrPW9baSsrXSksaT09PW8ubGVuZ3RoKXt0W2ZdPWU7YnJlYWt9ZWxzZXtjb25zdCBwPW9baSsrXSxnPXA9PT0iWyIsYj10W2ZdfHwoZz9bXTp7fSk7dFtmXT1iLHQ9YixuW3NdPW5bc118fGZ1bmN0aW9uKGgpe3JldHVybiBmdW5jdGlvbih4KXt5byhoLHgpfX0oYikscys9cH19fWZ1bmN0aW9uIFdjKHIsZSl7bGV0IHQ9MDtmdW5jdGlvbiBuKGEsdSxmKXtjb25zdCBkPXUubmFtZS5lbmRzV2l0aCgiWzBdIikscD11LnR5cGUsZz1fW3BdO2lmKCFnKXRocm93IG5ldyBFcnJvcihgdW5rbm93biB0eXBlOiAweCR7cC50b1N0cmluZygxNil9YCk7bGV0IGI7aWYoZy5iaW5kUG9pbnQpe2NvbnN0IGg9dDt0Kz11LnNpemUsZD9iPWcuYXJyYXlTZXR0ZXIocixwLGgsZix1LnNpemUpOmI9Zy5zZXR0ZXIocixwLGgsZix1LnNpemUpfWVsc2UgZy5hcnJheVNldHRlciYmZD9iPWcuYXJyYXlTZXR0ZXIocixmKTpiPWcuc2V0dGVyKHIsZik7cmV0dXJuIGIubG9jYXRpb249ZixifWNvbnN0IG89e30saT17fSxzPXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLFZuKTtmb3IobGV0IGE9MDthPHM7KythKXtjb25zdCB1PXIuZ2V0QWN0aXZlVW5pZm9ybShlLGEpO2lmKGdvKHUpKWNvbnRpbnVlO2xldCBmPXUubmFtZTtmLmVuZHNXaXRoKCJbMF0iKSYmKGY9Zi5zdWJzdHIoMCxmLmxlbmd0aC0zKSk7Y29uc3QgZD1yLmdldFVuaWZvcm1Mb2NhdGlvbihlLHUubmFtZSk7aWYoZCl7Y29uc3QgcD1uKGUsdSxkKTtvW2ZdPXAsJGMoZixwLGksbyl9fXJldHVybiBvfWZ1bmN0aW9uIFZjKHIsZSl7Y29uc3QgdD17fSxuPXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLE11KTtmb3IobGV0IG89MDtvPG47KytvKXtjb25zdCBpPXIuZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKGUsbyk7dFtpLm5hbWVdPXtpbmRleDpvLHR5cGU6aS50eXBlLHNpemU6aS5zaXplfX1yZXR1cm4gdH1mdW5jdGlvbiBIYyhyLGUpe2NvbnN0IHQ9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsVm4pLG49W10sbz1bXTtmb3IobGV0IGE9MDthPHQ7KythKXtvLnB1c2goYSksbi5wdXNoKHt9KTtjb25zdCB1PXIuZ2V0QWN0aXZlVW5pZm9ybShlLGEpO25bYV0ubmFtZT11Lm5hbWV9W1siVU5JRk9STV9UWVBFIiwidHlwZSJdLFsiVU5JRk9STV9TSVpFIiwic2l6ZSJdLFsiVU5JRk9STV9CTE9DS19JTkRFWCIsImJsb2NrTmR4Il0sWyJVTklGT1JNX09GRlNFVCIsIm9mZnNldCJdXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2NvbnN0IHU9YVswXSxmPWFbMV07ci5nZXRBY3RpdmVVbmlmb3JtcyhlLG8sclt1XSkuZm9yRWFjaChmdW5jdGlvbihkLHApe25bcF1bZl09ZH0pfSk7Y29uc3QgaT17fSxzPXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLE91KTtmb3IobGV0IGE9MDthPHM7KythKXtjb25zdCB1PXIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShlLGEpLGY9e2luZGV4OnIuZ2V0VW5pZm9ybUJsb2NrSW5kZXgoZSx1KSx1c2VkQnlWZXJ0ZXhTaGFkZXI6ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxhLFV1KSx1c2VkQnlGcmFnbWVudFNoYWRlcjpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsTnUpLHNpemU6ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxhLEx1KSx1bmlmb3JtSW5kaWNlczpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsenUpfTtmLnVzZWQ9Zi51c2VkQnlWZXJ0ZXhTaGFkZXJ8fGYudXNlZEJ5RnJhZ21lbnRTaGFkZXIsaVt1XT1mfXJldHVybntibG9ja1NwZWNzOmksdW5pZm9ybURhdGE6bn19ZnVuY3Rpb24geW8ocixlKXtmb3IoY29uc3QgdCBpbiBlKXtjb25zdCBuPXJbdF07dHlwZW9mIG49PSJmdW5jdGlvbiI/bihlW3RdKTp5byhyW3RdLGVbdF0pfX1mdW5jdGlvbiBibyhyLC4uLmUpe2NvbnN0IHQ9ci51bmlmb3JtU2V0dGVyc3x8cixuPWUubGVuZ3RoO2ZvcihsZXQgbz0wO288bjsrK28pe2NvbnN0IGk9ZVtvXTtpZihBcnJheS5pc0FycmF5KGkpKXtjb25zdCBzPWkubGVuZ3RoO2ZvcihsZXQgYT0wO2E8czsrK2EpYm8odCxpW2FdKX1lbHNlIGZvcihjb25zdCBzIGluIGkpe2NvbnN0IGE9dFtzXTthJiZhKGlbc10pfX19ZnVuY3Rpb24gamMocixlKXtjb25zdCB0PXt9LG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsQnUpO2ZvcihsZXQgbz0wO288bjsrK28pe2NvbnN0IGk9ci5nZXRBY3RpdmVBdHRyaWIoZSxvKTtpZihnbyhpKSljb250aW51ZTtjb25zdCBzPXIuZ2V0QXR0cmliTG9jYXRpb24oZSxpLm5hbWUpLGE9RltpLnR5cGVdLHU9YS5zZXR0ZXIocixzLGEpO3UubG9jYXRpb249cyx0W2kubmFtZV09dX1yZXR1cm4gdH1mdW5jdGlvbiBZYyhyLGUpe2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49clt0XTtuJiZuKGVbdF0pfX1mdW5jdGlvbiBYYyhyLGUsdCl7dC52ZXJ0ZXhBcnJheU9iamVjdD9yLmJpbmRWZXJ0ZXhBcnJheSh0LnZlcnRleEFycmF5T2JqZWN0KTooWWMoZS5hdHRyaWJTZXR0ZXJzfHxlLHQuYXR0cmlicyksdC5pbmRpY2VzJiZyLmJpbmRCdWZmZXIoUnUsdC5pbmRpY2VzKSl9ZnVuY3Rpb24geG8ocixlKXtjb25zdCB0PVdjKHIsZSksbj1qYyhyLGUpLG89e3Byb2dyYW06ZSx1bmlmb3JtU2V0dGVyczp0LGF0dHJpYlNldHRlcnM6bn07cmV0dXJuIFdlKHIpJiYoby51bmlmb3JtQmxvY2tTcGVjPUhjKHIsZSksby50cmFuc2Zvcm1GZWVkYmFja0luZm89VmMocixlKSksb31jb25zdCBRYz0vXHN8e3x9fDsvO2Z1bmN0aW9uIHFjKHIsZSx0LG4sbyl7Y29uc3QgaT1Qcih0LG4sbykscz1bXTtpZihlPWUubWFwKGZ1bmN0aW9uKGYpe2lmKCFRYy50ZXN0KGYpKXtjb25zdCBkPVduKGYpO2lmKGQpZj1kLnRleHQ7ZWxzZXtjb25zdCBwPWBubyBlbGVtZW50IHdpdGggaWQ6ICR7Zn1gO2kuZXJyb3JDYWxsYmFjayhwKSxzLnB1c2gocCl9fXJldHVybiBmfSkscy5sZW5ndGgpcmV0dXJuIEZjKGksIiIpO2NvbnN0IGE9aS5jYWxsYmFjazthJiYoaS5jYWxsYmFjaz0oZixkKT0+e2EoZixmP3ZvaWQgMDp4byhyLGQpKX0pO2NvbnN0IHU9TGMocixlLGkpO3JldHVybiB1P3hvKHIsdSk6bnVsbH1jb25zdCBLYz00LF9vPTUxMjM7ZnVuY3Rpb24gSmMocixlLHQsbixvLGkpe3Q9dD09PXZvaWQgMD9LYzp0O2NvbnN0IHM9ZS5pbmRpY2VzLGE9ZS5lbGVtZW50VHlwZSx1PW49PT12b2lkIDA/ZS5udW1FbGVtZW50czpuO289bz09PXZvaWQgMD8wOm8sYXx8cz9pIT09dm9pZCAwP3IuZHJhd0VsZW1lbnRzSW5zdGFuY2VkKHQsdSxhPT09dm9pZCAwP19vOmUuZWxlbWVudFR5cGUsbyxpKTpyLmRyYXdFbGVtZW50cyh0LHUsYT09PXZvaWQgMD9fbzplLmVsZW1lbnRUeXBlLG8pOmkhPT12b2lkIDA/ci5kcmF3QXJyYXlzSW5zdGFuY2VkKHQsbyx1LGkpOnIuZHJhd0FycmF5cyh0LG8sdSl9Y29uc3Qgdm89MzYxNjAsT3Q9MzYxNjEsWmM9MzU1MyxlZj01MTIxLHRmPTY0MDIscmY9NjQwOCxuZj0zMzE5MCxvZj0zNjAxMixzZj0zNTA1NixhZj0zNjAxMyx1Zj0zMjg1NCxjZj0zMjg1NSxmZj0zNjE5NCxFbz0zMzE4OSxUbz02NDAxLHdvPTM2MTY4LGtyPTM0MDQxLERyPTM2MDY0LFV0PTM2MDk2LEFvPTM2MTI4LENyPTMzMzA2LEJyPTMzMDcxLE1yPTk3MjksbGY9W3tmb3JtYXQ6cmYsdHlwZTplZixtaW46TXIsd3JhcDpCcn0se2Zvcm1hdDprcn1dLGo9e307altrcl09Q3IsaltUb109QW8salt3b109QW8salt0Zl09VXQsaltFb109VXQsaltuZl09VXQsaltvZl09VXQsaltzZl09Q3IsalthZl09Q3I7ZnVuY3Rpb24gZGYocixlKXtyZXR1cm4galtyXXx8altlXX1jb25zdCBjZT17fTtjZVt1Zl09ITAsY2VbY2ZdPSEwLGNlW2ZmXT0hMCxjZVtrcl09ITAsY2VbRW9dPSEwLGNlW1RvXT0hMCxjZVt3b109ITA7ZnVuY3Rpb24gaGYocil7cmV0dXJuIGNlW3JdfWNvbnN0IG1mPTMyO2Z1bmN0aW9uIHBmKHIpe3JldHVybiByPj1EciYmcjxEcittZn1mdW5jdGlvbiBOdChyLGUsdCxuKXtjb25zdCBvPXZvLGk9ci5jcmVhdGVGcmFtZWJ1ZmZlcigpO3IuYmluZEZyYW1lYnVmZmVyKG8saSksdD10fHxyLmRyYXdpbmdCdWZmZXJXaWR0aCxuPW58fHIuZHJhd2luZ0J1ZmZlckhlaWdodCxlPWV8fGxmO2NvbnN0IHM9W10sYT17ZnJhbWVidWZmZXI6aSxhdHRhY2htZW50czpbXSx3aWR0aDp0LGhlaWdodDpufTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHUsZil7bGV0IGQ9dS5hdHRhY2htZW50O2NvbnN0IHA9dS5zYW1wbGVzLGc9dS5mb3JtYXQ7bGV0IGI9dS5hdHRhY2htZW50UG9pbnR8fGRmKGcsdS5pbnRlcm5hbEZvcm1hdCk7aWYoYnx8KGI9RHIrZikscGYoYikmJnMucHVzaChiKSwhZClpZihwIT09dm9pZCAwfHxoZihnKSlkPXIuY3JlYXRlUmVuZGVyYnVmZmVyKCksci5iaW5kUmVuZGVyYnVmZmVyKE90LGQpLHA+MT9yLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShPdCxwLGcsdCxuKTpyLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoT3QsZyx0LG4pO2Vsc2V7Y29uc3QgaD1PYmplY3QuYXNzaWduKHt9LHUpO2gud2lkdGg9dCxoLmhlaWdodD1uLGguYXV0bz09PXZvaWQgMCYmKGguYXV0bz0hMSxoLm1pbj1oLm1pbnx8aC5taW5NYWd8fE1yLGgubWFnPWgubWFnfHxoLm1pbk1hZ3x8TXIsaC53cmFwUz1oLndyYXBTfHxoLndyYXB8fEJyLGgud3JhcFQ9aC53cmFwVHx8aC53cmFwfHxCciksZD0kbihyLGgpfWlmKFRzKHIsZCkpci5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihvLGIsT3QsZCk7ZWxzZSBpZihscihyLGQpKXUubGF5ZXIhPT12b2lkIDA/ci5mcmFtZWJ1ZmZlclRleHR1cmVMYXllcihvLGIsZCx1LmxldmVsfHwwLHUubGF5ZXIpOnIuZnJhbWVidWZmZXJUZXh0dXJlMkQobyxiLHUudGFyZ2V0fHxaYyxkLHUubGV2ZWx8fDApO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGF0dGFjaG1lbnQgdHlwZSIpO2EuYXR0YWNobWVudHMucHVzaChkKX0pLHIuZHJhd0J1ZmZlcnMmJnIuZHJhd0J1ZmZlcnMocyksYX1mdW5jdGlvbiBnZihyLGUsdCl7dD10fHx2byxlPyhyLmJpbmRGcmFtZWJ1ZmZlcih0LGUuZnJhbWVidWZmZXIpLHIudmlld3BvcnQoMCwwLGUud2lkdGgsZS5oZWlnaHQpKTooci5iaW5kRnJhbWVidWZmZXIodCxudWxsKSxyLnZpZXdwb3J0KDAsMCxyLmRyYXdpbmdCdWZmZXJXaWR0aCxyLmRyYXdpbmdCdWZmZXJIZWlnaHQpKX1mdW5jdGlvbiBBKHIsZSl7cmV0dXJuKCk9PmUgaW5zdGFuY2VvZiBXZWJHTFRleHR1cmU/ZTokbihyLHtzcmM6ZSx3cmFwOnIuQ0xBTVBfVE9fRURHRX0pfWNvbnN0IE1lPTI7Y2xhc3MgdmV7Y29uc3RydWN0b3IoZSl7bCh0aGlzLCJpZCIsIl8iKTtsKHRoaXMsImNvbnRleHQiKTtsKHRoaXMsIm91dHB1dCIpO2wodGhpcywiZmJpIik7bCh0aGlzLCJvcHRpb25zIik7bCh0aGlzLCJwcm9ncmFtSW5mbyIpO2wodGhpcywiYnVmZmVySW5mbyIpO2wodGhpcywicHJvZmlsZXIiKTtsKHRoaXMsImxhc3RSdW4iKTtjb25zdHtjb250ZXh0OnQsd2lkdGg6bixoZWlnaHQ6b309ZTt0aGlzLmNvbnRleHQ9dCx0aGlzLm9wdGlvbnM9ZTtjb25zdCBpPXRoaXMuYnVpbGREZWZpbmVzKCk7dGhpcy5wcm9ncmFtSW5mbz1xYyh0aGlzLmNvbnRleHQsW2krdGhpcy5nZXRWZXJ0ZXhTaGFkZXIoKSxpK3RoaXMuZ2V0RnJhZ21lbnRTaGFkZXIoKV0pLHRoaXMuYnVmZmVySW5mbz1Zcyh0aGlzLmNvbnRleHQsdGhpcy5nZXRCdWZmZXJzKCkpLHRoaXMuZmJpPU50KHRoaXMuY29udGV4dCxbe2Zvcm1hdDp0aGlzLmNvbnRleHQuUkdCQSx0eXBlOnRoaXMuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0aGlzLmNvbnRleHQuTElORUFSLHdyYXA6dGhpcy5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSxuLG8pLHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdfXJlc2l6ZU91dHB1dChlLHQpe3RoaXMuZmJpPU50KHRoaXMuY29udGV4dCxbe2Zvcm1hdDp0aGlzLmNvbnRleHQuUkdCQSx0eXBlOnRoaXMuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0aGlzLmNvbnRleHQuTElORUFSLHdyYXA6dGhpcy5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSxlLHQpLHRoaXMub3B0aW9ucy53aWR0aD1lLHRoaXMub3B0aW9ucy5oZWlnaHQ9dCx0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXX1nZXREZWZpbmVzKCl7cmV0dXJue319Z2V0QnVmZmVycygpe3JldHVybntwb3NpdGlvbjp7bnVtQ29tcG9uZW50czoyLGRhdGE6Wy0xLC0xLC0xLDEsMSwtMSwxLDEsLTEsMSwxLC0xXX0sdGV4dHVyZV9jb29yZDp7bnVtQ29tcG9uZW50czoyLGRhdGE6WzAsMCwwLDEsMSwwLDEsMSwwLDEsMSwwXX19fWJ1aWxkRGVmaW5lcygpe2xldCBlPSIiO2NvbnN0IHQ9dGhpcy5nZXREZWZpbmVzKCk7Zm9yKGxldCBuIGluIHQpZSs9YCNkZWZpbmUgJHtufSAke3Rbbl0udG9GaXhlZCgxKX0KYDtyZXR1cm4gZX1ydW4oZSl7dmFyIG8saSxzLGEsdSxmOyhvPXRoaXMucHJvZmlsZXIpPT1udWxsfHxvLnB1c2hDb250ZXh0KGBbJHt0aGlzLmlkfV0gUFJPRyA6ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApLChpPXRoaXMucHJvZmlsZXIpPT1udWxsfHxpLnB1c2hDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JRk9STVNgKTtmb3IoY29uc3QgZCBpbiBlKXR5cGVvZiBlW2RdPT0iZnVuY3Rpb24iJiYoKHM9dGhpcy5wcm9maWxlcik9PW51bGx8fHMucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBVTkkgOiAke2R9YCksZVtkXT1lW2RdKCksKGE9dGhpcy5wcm9maWxlcik9PW51bGx8fGEucG9wQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSSA6ICR7ZH1gKSk7KHU9dGhpcy5wcm9maWxlcik9PW51bGx8fHUucG9wQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSUZPUk1TYCk7Y29uc3QgdD1EYXRlLm5vdygpO2xldCBuPTA7dGhpcy5sYXN0UnVuJiYobj0odC10aGlzLmxhc3RSdW4pLzFlMyksdGhpcy5sYXN0UnVuPXQsdGhpcy5jb250ZXh0LnZpZXdwb3J0KDAsMCx0aGlzLmNvbnRleHQuY2FudmFzLndpZHRoLHRoaXMuY29udGV4dC5jYW52YXMuaGVpZ2h0KSx0aGlzLmNvbnRleHQudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW1JbmZvLnByb2dyYW0pLFhjKHRoaXMuY29udGV4dCx0aGlzLnByb2dyYW1JbmZvLHRoaXMuYnVmZmVySW5mbyksYm8odGhpcy5wcm9ncmFtSW5mbyx7ZGVsdGE6bixjYW52YXM6W3RoaXMuY29udGV4dC5jYW52YXMud2lkdGgsdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHRdLC4uLmV9KSxnZih0aGlzLmNvbnRleHQsdGhpcy5vcHRpb25zLmRpc2FibGVGcmFtZWJ1ZmZlcj9udWxsOnRoaXMuZmJpKSxKYyh0aGlzLmNvbnRleHQsdGhpcy5idWZmZXJJbmZvKSwoZj10aGlzLnByb2ZpbGVyKT09bnVsbHx8Zi5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gUFJPRyA6ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApfXNldFByb2ZpbGVyKGUpe3RoaXMucHJvZmlsZXI9ZX19dmFyIHlmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIGJhY2tncm91bmQ7CnVuaWZvcm0gc2FtcGxlcjJEIGZvcmVncm91bmQ7CnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGJhY2tncm91bmRDb2xvciA9IHRleHR1cmUyRChiYWNrZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBmb3JlZ3JvdW5kQ29sb3IgPSB0ZXh0dXJlMkQoZm9yZWdyb3VuZCwgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgdHJlc2hvbGRDb2xvciA9IHRleHR1cmUyRCh0aHJlc2hvbGQsIF90ZXh0dXJlX2Nvb3JkKTsKICBnbF9GcmFnQ29sb3IgPSBmb3JlZ3JvdW5kQ29sb3IgKiB0cmVzaG9sZENvbG9yLmEgKwogICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvciAqICgxLiAtIHRyZXNob2xkQ29sb3IuYSk7Cn0KYCxiZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBfdGV4dHVyZV9jb29yZC55ID0gMS4gLSB0ZXh0dXJlX2Nvb3JkLnk7Cn0KYDtjbGFzcyBPciBleHRlbmRzIHZle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHlmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBiZn19Y2xhc3MgVXJ7Y29uc3RydWN0b3IoKXtsKHRoaXMsInN0ZXBzIixbXSk7bCh0aGlzLCJwcm9maWxlciIpfWFkZFN0ZXAoZSl7dGhpcy5zdGVwcy5wdXNoKGUpfWFzeW5jIHJ1bigpe2Zvcihjb25zdCBlIG9mIHRoaXMuc3RlcHMpZS5wcm9ncmFtLnJ1bihlLmdldFVuaWZvcm1zKCkpfXJlc2l6ZU91dHB1dChlLHQpe3ZhciBuLG87KG49dGhpcy5wcm9maWxlcik9PW51bGx8fG4ucHVzaENvbnRleHQoYFBJUCBbJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9XWApO2Zvcihjb25zdCBpIG9mIHRoaXMuc3RlcHMpaS5wcmV2ZW50UmVzaXplfHxpLnByb2dyYW0ucmVzaXplT3V0cHV0KGUsdCk7KG89dGhpcy5wcm9maWxlcik9PW51bGx8fG8ucG9wQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lO2Zvcihjb25zdCB0IG9mIHRoaXMuc3RlcHMpdC5wcm9ncmFtLnNldFByb2ZpbGVyKGUpfXNldElkKGUpe2Zvcihjb25zdCB0IG9mIHRoaXMuc3RlcHMpdC5wcm9ncmFtLmlkPWV9fWNsYXNzIE5yIGV4dGVuZHMgVXJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpO2wodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMSl9fWNsYXNzIElvIGV4dGVuZHMgTnJ7Y29uc3RydWN0b3IodCl7c3VwZXIoKTtsKHRoaXMsImlucHV0SW1hZ2UiKTtsKHRoaXMsImlucHV0QmFja2dyb3VuZEltYWdlIik7bCh0aGlzLCJpbnB1dE1hc2siKTtsKHRoaXMsInByZWNpc2VNYXNrRW5hYmxlZCIsITApO3RoaXMuY29udGV4dD10O2NvbnN0IG49e2NvbnRleHQ6dCxoZWlnaHQ6dC5jYW52YXMuaGVpZ2h0LHdpZHRoOnQuY2FudmFzLndpZHRofSxvPW5ldyBPcih7Li4ubixkaXNhYmxlRnJhbWVidWZmZXI6ITB9KTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06byxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOkEodCx0aGlzLmlucHV0QmFja2dyb3VuZEltYWdlKSxmb3JlZ3JvdW5kOkEodCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpBKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn19dmFyIHhmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsgfQpgLF9mPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBib29sIGludmVydF95OwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7CiAgaWYgKGludmVydF95KSB7CiAgICBfdGV4dHVyZV9jb29yZC55ID0gMS4gLSB0ZXh0dXJlX2Nvb3JkLnk7CiAgfQp9CmA7Y2xhc3MgdmYgZXh0ZW5kcyB2ZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiB4Zn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gX2Z9fWNsYXNzIEVmIGV4dGVuZHMgVXJ7Y29uc3RydWN0b3IodCxuLG8pe3N1cGVyKCk7bCh0aGlzLCJpbnB1dEltYWdlIik7dGhpcy5jb250ZXh0PXQ7Y29uc3QgaT17Y29udGV4dDp0LGhlaWdodDpvLHdpZHRoOm59O3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpuZXcgdmYoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSksZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpBKHQsdGhpcy5pbnB1dEltYWdlKSxpbnZlcnRfeTohMH0pfSl9c2V0RGF0YSh0KXt0aGlzLmlucHV0SW1hZ2U9dH19YXN5bmMgZnVuY3Rpb24gU28ocil7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntzZXRUaW1lb3V0KCgpPT57ZSgpfSxyKX0pfXZhciBUZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLHdmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmAsTHI9KHI9PihyW3IuTElORUFSPTBdPSJMSU5FQVIiLHJbci5HQVVTU0lBTj0xXT0iR0FVU1NJQU4iLHIpKShMcnx8e30pO2NsYXNzIFJvIGV4dGVuZHMgdmV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBUZit0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiB3Zn1jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gMS47CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH1nZXRGYWN0b3IoZSx0KXtzd2l0Y2godGhpcy5vcHRpb25zLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KTtjYXNlIDA6ZGVmYXVsdDpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KX19Z2V0TGluZWFyRmFjdG9yKGUsdCl7cmV0dXJuIDF9Z2V0R2F1c3NpYW5GYWN0b3IoZSx0KXt2YXIgdTtjb25zdCBuPU1hdGguUEkqMixvPU1hdGgubWF4KCh1PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3U6MSwxKSxpPTEvKG4qbyoqMikscz0tKGUqKjIrdCoqMiksYT1pKnM7cmV0dXJuIGkqTWF0aC5FKiphfX1jbGFzcyB6ciBleHRlbmRzIHZle2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpO2wodGhpcywiZmJpMiIpO3RoaXMuZmJpMj1OdCh0LmNvbnRleHQsW3tmb3JtYXQ6dC5jb250ZXh0LlJHQkEsdHlwZTp0LmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dC5jb250ZXh0LkxJTkVBUixtYWc6dC5jb250ZXh0LkxJTkVBUix3cmFwOnQuY29udGV4dC5DTEFNUF9UT19FREdFfV0sdC53aWR0aCx0LmhlaWdodCl9cnVuKHQpe2NvbnN0IG49dGhpcy5mYmk7dGhpcy5mYmk9dGhpcy5mYmkyLHRoaXMuZmJpMj1uLHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdLHN1cGVyLnJ1bih7Li4udCxwcmV2aW91c19yZW5kZXJpbmc6dGhpcy5mYmkyLmF0dGFjaG1lbnRzWzBdfSl9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5mYmkyPU50KHRoaXMuY29udGV4dCxbe2Zvcm1hdDp0aGlzLmNvbnRleHQuUkdCQSx0eXBlOnRoaXMuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0aGlzLmNvbnRleHQuTElORUFSLHdyYXA6dGhpcy5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSx0LG4pfX12YXIgQWY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKLy8gdW5pZm9ybSBmbG9hdCB0cmVzaG9sZDsKdW5pZm9ybSBzYW1wbGVyMkQgaW1hZ2Vfbm93Owp1bmlmb3JtIHNhbXBsZXIyRCBpbWFnZV9iZWZvcmU7CnVuaWZvcm0gc2FtcGxlcjJEIG1hc2tfbm93Owp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrX2JlZm9yZTsKdW5pZm9ybSBzYW1wbGVyMkQgcHJldmlvdXNfcmVuZGVyaW5nOwp1bmlmb3JtIHZlYzIgY2FudmFzOwoKdW5pZm9ybSBmbG9hdCBkZWx0YTsKCmZsb2F0IGN1cnJlbnRfZmFjdG9yID0gMC42OTsKZmxvYXQgcHJldmlvdXNfZmFjdG9yID0gMC43NDsKZmxvYXQgdGhyZXNob2xkX2FjdGl2YXRpb24gPSAwLjU0OwoKZmxvYXQgbWFwKGZsb2F0IHZhbHVlLCBmbG9hdCBtaW4xLCBmbG9hdCBtYXgxLCBmbG9hdCBtaW4yLCBmbG9hdCBtYXgyKSB7CiAgcmV0dXJuIG1pbjIgKyAodmFsdWUgLSBtaW4xKSAqIChtYXgyIC0gbWluMikgLyAobWF4MSAtIG1pbjEpOwp9CgpmbG9hdCBnZXRUaHJlc2hvbGQoKSB7CiAgdmVjNCBjb2xvciA9IHZlYzQoMC4pOwogIGZvciAoZmxvYXQgeSA9IC02LjsgeSA8IDcuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtNi47IHggPCA3LjsgeCArPSAxLikgewogICAgICB2ZWM0IGltYWdlX25vd19jb2xvciA9CiAgICAgICAgICB0ZXh0dXJlMkQoaW1hZ2Vfbm93LCBfdGV4dHVyZV9jb29yZCArIHZlYzIoeCwgeSkgLyBjYW52YXMpOwogICAgICB2ZWM0IGltYWdlX2JlZm9yZV9jb2xvciA9CiAgICAgICAgICB0ZXh0dXJlMkQoaW1hZ2VfYmVmb3JlLCBfdGV4dHVyZV9jb29yZCArIHZlYzIoeCwgeSkgLyBjYW52YXMpOwogICAgICBjb2xvciArPSBhYnMoaW1hZ2VfYmVmb3JlX2NvbG9yIC0gaW1hZ2Vfbm93X2NvbG9yKTsKICAgIH0KICB9CiAgcmV0dXJuIChjb2xvci54ICsgY29sb3IueSArIGNvbG9yLnopIC8gKDMuICogOS4pOwp9Cgp2b2lkIG1haW4oKSB7CiAgZmxvYXQgdHJlc2hvbGRfaW5wdXQgPSAuNDsKICBmbG9hdCB0cmVzaG9sZF9wcmV2aW91c19yZW5kZXJpbmcgPSAuOTg7CgogIHZlYzQgbWFza19ub3dfY29sb3IgPSB0ZXh0dXJlMkQobWFza19ub3csIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IG1hc2tfYmVmb3JlX2NvbG9yID0gdGV4dHVyZTJEKG1hc2tfYmVmb3JlLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBwcmV2aW91c19yZW5kZXJpbmdfY29sb3IgPSB0ZXh0dXJlMkQocHJldmlvdXNfcmVuZGVyaW5nLCBfdGV4dHVyZV9jb29yZCk7CgogIHZlYzMgbWFza19kaWZmID0gYWJzKG1hc2tfYmVmb3JlX2NvbG9yLnh5eiAtIG1hc2tfbm93X2NvbG9yLnh5eik7CiAgZmxvYXQgZmxpY2tlcmluZyA9IG1hc2tfZGlmZi54OwogIGZsb2F0IHRocmVzaG9sZCA9IGdldFRocmVzaG9sZCgpOwogIGlmICh0aHJlc2hvbGQgPCB0aHJlc2hvbGRfYWN0aXZhdGlvbikgewogICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmbGlja2VyaW5nLCAwLiwgMC4sIDEuKSAqIGN1cnJlbnRfZmFjdG9yICsKICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX3JlbmRlcmluZ19jb2xvciAqIHByZXZpb3VzX2ZhY3RvcjsKICAgIGdsX0ZyYWdDb2xvciAqPSAoMS4gLSB0aHJlc2hvbGQpOwogIH0KfQpgLElmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgU2YgZXh0ZW5kcyB6cntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBBZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gSWZ9fXZhciBSZj1gI3ZlcnNpb24gMzAwIGVzCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Wb2xjb21peC92aXJ0dWFsLWJhY2tncm91bmQvYmxvYi9tYWluL3NyYy9waXBlbGluZXMvd2ViZ2wyL2pvaW50QmlsYXRlcmFsRmlsdGVyU3RhZ2UudHMKCnByZWNpc2lvbiBoaWdocCBmbG9hdDsKdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRfZnJhbWU7CnVuaWZvcm0gc2FtcGxlcjJEIHNlZ21lbnRhdGlvbl9tYXNrOwp1bmlmb3JtIHNhbXBsZXIyRCB0aHJlc2hvbGQ7CnVuaWZvcm0gdmVjMiB0ZXhlbF9zaXplOwp1bmlmb3JtIGZsb2F0IHN0ZXA7CnVuaWZvcm0gZmxvYXQgcmFkaXVzOwp1bmlmb3JtIGZsb2F0IG9mZnNldDsKdW5pZm9ybSBmbG9hdCBzaWdtYV90ZXhlbDsKdW5pZm9ybSBmbG9hdCBzaWdtYV9jb2xvcjsKCmluIHZlYzIgX3RleHR1cmVfY29vcmQ7Cm91dCB2ZWM0IG91dENvbG9yOwoKZmxvYXQgZ2F1c3NpYW4oZmxvYXQgeCwgZmxvYXQgc2lnbWEpIHsKICBmbG9hdCBjb2VmZiA9IC0wLjUgLyAoc2lnbWEgKiBzaWdtYSAqIDQuMCArIDEuMGUtNik7CiAgcmV0dXJuIGV4cCgoeCAqIHgpICogY29lZmYpOwp9Cgp2b2lkIG1haW4oKSB7CiAgdmVjMiBjZW50ZXJDb29yZCA9IF90ZXh0dXJlX2Nvb3JkOwogIHZlYzMgY2VudGVyQ29sb3IgPSB0ZXh0dXJlKGlucHV0X2ZyYW1lLCBjZW50ZXJDb29yZCkucmdiOwogIGZsb2F0IG5ld1ZhbCA9IDAuMDsKICBmbG9hdCBzcGFjZVdlaWdodCA9IDAuMDsKICBmbG9hdCBjb2xvcldlaWdodCA9IDAuMDsKICBmbG9hdCB0b3RhbFdlaWdodCA9IDAuMDsKICAvLyBTdWJzYW1wbGUga2VybmVsIHNwYWNlLgogIGZvciAoZmxvYXQgaSA9IC1yYWRpdXMgKyBvZmZzZXQ7IGkgPD0gcmFkaXVzOyBpICs9IHN0ZXApIHsKICAgIGZvciAoZmxvYXQgaiA9IC1yYWRpdXMgKyBvZmZzZXQ7IGogPD0gcmFkaXVzOyBqICs9IHN0ZXApIHsKICAgICAgdmVjMiBzaGlmdCA9IHZlYzIoaiwgaSkgKiB0ZXhlbF9zaXplOwogICAgICB2ZWMyIGNvb3JkID0gdmVjMihjZW50ZXJDb29yZCArIHNoaWZ0KTsKICAgICAgdmVjMyBmcmFtZUNvbG9yID0gdGV4dHVyZShpbnB1dF9mcmFtZSwgY29vcmQpLnJnYjsKICAgICAgZmxvYXQgdGhyZXNob2xkID0gdGV4dHVyZSh0aHJlc2hvbGQsIGNvb3JkKS5hOwogICAgICBmbG9hdCBvdXRWYWwgPSB0ZXh0dXJlKHNlZ21lbnRhdGlvbl9tYXNrLCBjb29yZCkuYTsKCiAgICAgIHNwYWNlV2VpZ2h0ID0gZ2F1c3NpYW4oZGlzdGFuY2UoY2VudGVyQ29vcmQsIGNvb3JkKSwgc2lnbWFfdGV4ZWwpOwogICAgICBjb2xvcldlaWdodCA9IGdhdXNzaWFuKGRpc3RhbmNlKGNlbnRlckNvbG9yLCBmcmFtZUNvbG9yKSwgc2lnbWFfY29sb3IpOwogICAgICB0b3RhbFdlaWdodCArPSBzcGFjZVdlaWdodCAqIGNvbG9yV2VpZ2h0OwogICAgICBuZXdWYWwgKz0gc3BhY2VXZWlnaHQgKiBjb2xvcldlaWdodCAqIG91dFZhbCAqIHRocmVzaG9sZDsKICAgIH0KICB9CiAgbmV3VmFsIC89IHRvdGFsV2VpZ2h0OwogIG91dENvbG9yID0gdmVjNCh2ZWMzKDAuKSwgbmV3VmFsKTsKfWAsRmY9YCN2ZXJzaW9uIDMwMCBlcwppbiB2ZWMyIHBvc2l0aW9uOwppbiB2ZWMyIHRleHR1cmVfY29vcmQ7Cm91dCB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9YDtjbGFzcyBQZiBleHRlbmRzIHZle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFJmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBGZn19dmFyIGtmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7CiAgaW50IGNvdW50ID0gMDsKICBmb3IgKGZsb2F0IHkgPSAtMS47IHkgPCAyLjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTEuOyB4IDwgMi47IHggKz0gMS4pIHsKICAgICAgdmVjMiBjb29yZCA9IF90ZXh0dXJlX2Nvb3JkICsgdmVjMih5LCB4KSAvIGNhbnZhczsKICAgICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZCk7CiAgICAgIGlmIChjb2xvci5yID4gLjEpIHsKICAgICAgICBjb3VudCsrOwogICAgICB9CiAgICB9CiAgfQogIGlmIChjb3VudCA+IDUpIHsKICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7CiAgfQp9CmAsRGY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBDZiBleHRlbmRzIHZle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIGtmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBEZn19dmFyIEJmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7CiAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7CiAgZm9yIChmbG9hdCB5ID0gLTIuOyB5IDwgMy47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC0yLjsgeCA8IDMuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzIgY29vcmQgPSBfdGV4dHVyZV9jb29yZDsKICAgICAgY29vcmQgKz0gdmVjMih5LCB4KSAvIGNhbnZhczsKICAgICAgY29sb3IgKz0gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkKSAqICgxLiAvIDQuKTsKICAgIH0KICB9CgogIGdsX0ZyYWdDb2xvciA9IGNvbG9yOwp9CmAsTWY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBPZiBleHRlbmRzIHpye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIEJmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBNZn19dmFyIFVmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRzOwoKdm9pZCBtYWluKCkgewogIHZlYzQgaW5wdXRzX2NvbG9yID0gdGV4dHVyZTJEKGlucHV0cywgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgdGhyZXNob2xkX2NvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGlmICh0aHJlc2hvbGRfY29sb3IuciA8IC4xICYmIGlucHV0c19jb2xvci5yID4gLjUpIHsKICAgIGdsX0ZyYWdDb2xvciA9IGlucHV0c19jb2xvcjsKICB9Cn0KYCxOZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIExmIGV4dGVuZHMgenJ7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gVWZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE5mfX1jbGFzcyB6ZiBleHRlbmRzIFVye2NvbnN0cnVjdG9yKHQsbixvKXtzdXBlcigpO2wodGhpcywiaW5wdXRJbWFnZSIpO2wodGhpcywiaW5wdXRNYXNrIik7bCh0aGlzLCJwcmV2aW91c0lucHV0SW1hZ2UiKTtsKHRoaXMsInByZXZpb3VzSW5wdXRNYXNrIik7bCh0aGlzLCJvdXRwdXQiKTtsKHRoaXMsIm9wdGlvbnMiLHtjdXJyZW50VGhyZXNob2xkTWluaW11bTowLGN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtOjEscHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtOjAscHJldmlvdXNUaHJlc2hvbGRNYXhpbXVtOjEsdGhyZXNob2xkTWluaW11bTowLHRocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRGYWN0b3I6MX0pO2wodGhpcywiam9pbnRCaWxhdGVyYWwiKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0Om8sd2lkdGg6bn0scz1uZXcgU2YoaSksYT1uZXcgUm8oey4uLmkscmFkaXVzOjEsdHlwZTpMci5HQVVTU0lBTn0pLHU9bmV3IExmKGkpLGY9bmV3IE9mKGkpLGQ9bmV3IENmKGkpO3RoaXMuam9pbnRCaWxhdGVyYWw9bmV3IFBmKGkpLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2ltYWdlX25vdzpBKHQsdGhpcy5pbnB1dEltYWdlKSxpbWFnZV9iZWZvcmU6QSh0LHRoaXMucHJldmlvdXNJbnB1dEltYWdlKSxtYXNrX25vdzpBKHQsdGhpcy5pbnB1dE1hc2spLG1hc2tfYmVmb3JlOkEodCx0aGlzLnByZXZpb3VzSW5wdXRNYXNrKSxjdXJyZW50X3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWluaW11bSxjdXJyZW50X3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWF4aW11bSxwcmV2aW91c190aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMucHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtLHByZXZpb3VzX3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1pbmltdW0sdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX2ZhY3Rvcjp0aGlzLm9wdGlvbnMudGhyZXNob2xkRmFjdG9yfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dSxnZXRVbmlmb3JtczooKT0+KHtpbnB1dHM6QSh0LHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6QSh0LHMub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmQsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpBKHQsdS5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZixnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkEodCxkLm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTphLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6QSh0LGYub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOnRoaXMuam9pbnRCaWxhdGVyYWwsZ2V0VW5pZm9ybXM6KCk9Pnt2YXIgeixMLFYsRyxxZSxFZSxmZSwkO2NvbnN0IGc9KEw9KHo9dGhpcy5pbnB1dEltYWdlKT09bnVsbD92b2lkIDA6ei53aWR0aCkhPW51bGw/TDoxLGI9KEc9KFY9dGhpcy5pbnB1dEltYWdlKT09bnVsbD92b2lkIDA6Vi5oZWlnaHQpIT1udWxsP0c6MSxoPShFZT0ocWU9dGhpcy5pbnB1dE1hc2spPT1udWxsP3ZvaWQgMDpxZS53aWR0aCkhPW51bGw/RWU6MSx4PSgkPShmZT10aGlzLmlucHV0TWFzayk9PW51bGw/dm9pZCAwOmZlLmhlaWdodCkhPW51bGw/JDoxLEU9TWF0aC5tYXgoZy9oLGIveCksdj1NYXRoLm1heCgxLE1hdGguc3FydChFKSouNjYpLFI9MS9nLFA9MS9iO3JldHVybntpbnB1dF9mcmFtZTpBKHQsdGhpcy5pbnB1dEltYWdlKSxzZWdtZW50YXRpb25fbWFzazpBKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpBKHQsYS5vdXRwdXQpLHRleGVsX3NpemU6W1IsUF0sc3RlcDp2LHJhZGl1czpFLG9mZnNldDp2PjE/diouNTowLHNpZ21hX3RleGVsOk1hdGgubWF4KFIsUCkqRSxzaWdtYV9jb2xvcjouMX19fSksdGhpcy5vdXRwdXQ9dGhpcy5qb2ludEJpbGF0ZXJhbC5vdXRwdXR9c2V0RGF0YSh0LG4pe3RoaXMucHJldmlvdXNJbnB1dEltYWdlPXRoaXMuaW5wdXRJbWFnZT90aGlzLmlucHV0SW1hZ2U6dCx0aGlzLnByZXZpb3VzSW5wdXRNYXNrPXRoaXMuaW5wdXRNYXNrP3RoaXMuaW5wdXRNYXNrOm4sdGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1zZXRPcHRpb25zKHQpe3RoaXMub3B0aW9ucz10fXJlc2l6ZU91dHB1dCh0LG4pe3N1cGVyLnJlc2l6ZU91dHB1dCh0LG4pLHRoaXMub3V0cHV0PXRoaXMuam9pbnRCaWxhdGVyYWwub3V0cHV0fX1jbGFzcyBHZntjb25zdHJ1Y3RvcihlKXtsKHRoaXMsImNvbnRleHQiKTtsKHRoaXMsImV4dGVuc2lvbiIpO2wodGhpcywicXVlcmllcyIsW10pO2wodGhpcywiYWN0aXZlUXVlcnkiKTt0aGlzLmNvbnRleHQ9ZSx0aGlzLmV4dGVuc2lvbj1lLmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5X3dlYmdsMiIpfXN0YXJ0KCl7fXN0b3AoKXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCl9cHVzaENvbnRleHQoZSl7dGhpcy5jcmVhdGVRdWVyeSgiUFVTSCIsZSl9cG9wQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQT1AiLGUpfWNyZWF0ZVF1ZXJ5KGUsdCl7dGhpcy5hY3RpdmVRdWVyeSYmdGhpcy5jb250ZXh0LmVuZFF1ZXJ5KHRoaXMuZXh0ZW5zaW9uLlRJTUVfRUxBUFNFRF9FWFQpLHRoaXMuYWN0aXZlUXVlcnk9dGhpcy5jb250ZXh0LmNyZWF0ZVF1ZXJ5KCksdGhpcy5jb250ZXh0LmJlZ2luUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCx0aGlzLmFjdGl2ZVF1ZXJ5KSx0aGlzLnF1ZXJpZXMucHVzaCh7bmFtZTp0LGFjdGlvbjplLHF1ZXJ5OnRoaXMuYWN0aXZlUXVlcnl9KX1hc3luYyBnZXRSZXNvbHZlZFF1ZXJpZXMoKXtjb25zdCBlPShhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5xdWVyaWVzXS5tYXAodD0+dGhpcy5yZXNvbHZlUXVlcnkodCkpKSkuZmlsdGVyKHQ9PnQpO2ZvcihsZXQgdD0xO3Q8ZS5sZW5ndGg7Kyt0KWVbdF0udGltZXN0YW1wKz1lW3QtMV0uZHVyYXRpb24rZVt0LTFdLnRpbWVzdGFtcDtyZXR1cm4gZX1hc3luYyByZXNvbHZlUXVlcnkoZSl7aWYoIWF3YWl0IHRoaXMuYXdhaXRRdWVyeUF2YWlsYWJsZShlKSl7Y29uc29sZS5sb2coIlVuYXdhaXRhYmxlIHF1ZXJ5IixlKTtyZXR1cm59aWYodGhpcy5jb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmV4dGVuc2lvbi5HUFVfRElTSk9JTlRfRVhUKSl7Y29uc29sZS5sb2coIkRpc2pvaW50ZWQgcXVlcnkiLGUpO3JldHVybn1yZXR1cm57Li4uZSxkdXJhdGlvbjp0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUKSx0aW1lc3RhbXA6MH19YXN5bmMgYXdhaXRRdWVyeUF2YWlsYWJsZShlKXtmb3IobGV0IHQ9MDt0PDEwOysrdCl7aWYodGhpcy5jb250ZXh0LmdldFF1ZXJ5UGFyYW1ldGVyKGUucXVlcnksdGhpcy5jb250ZXh0LlFVRVJZX1JFU1VMVF9BVkFJTEFCTEUpKXJldHVybiBlO2F3YWl0IFNvKDIwMCl9fX1jbGFzcyBMdHtjb25zdHJ1Y3Rvcigpe2wodGhpcywiY2FudmFzIik7bCh0aGlzLCJjb250ZXh0Iik7bCh0aGlzLCJwaXBlbGluZSIpO2wodGhpcywicHJldmlvdXNJbWFnZVdpZHRoIiwwKTtsKHRoaXMsInByZXZpb3VzSW1hZ2VIZWlnaHQiLDApO2wodGhpcywicHJldmlvdXNNYXNrV2lkdGgiLE1lKTtsKHRoaXMsInByZXZpb3VzTWFza0hlaWdodCIsTWUpO2wodGhpcywicHJvZmlsZXIiKTtsKHRoaXMsInBvc3RQcm9jZXNzaW5nRW5hYmxlZCIsITApO2wodGhpcywiaW1wcm92ZU1hc2siKTtjb25zdCBlPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0PWUuZ2V0Q29udGV4dCgid2ViZ2wyIik7aWYoIXQpdGhyb3ciRmFpbCB0byByZXRyaWV2ZSB3ZWJnbDIgY29udGV4dCI7dGhpcy5jYW52YXM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLmltcHJvdmVNYXNrPW5ldyB6Zih0aGlzLmNvbnRleHQsTWUsTWUpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3RoaXMuaW1wcm92ZU1hc2suc2V0T3B0aW9ucyhlKX1lbmFibGVQb3N0UHJvY2Vzc2luZygpe3RoaXMucG9zdFByb2Nlc3NpbmdFbmFibGVkPSEwfWRpc2FibGVQb3N0UHJvY2Vzc2luZygpe3RoaXMucG9zdFByb2Nlc3NpbmdFbmFibGVkPSExfWFzeW5jIHByb2ZpbGVXZWJnbChlKXtjb25zdCB0PW5ldyBHZih0aGlzLmNvbnRleHQpO3JldHVybiB0aGlzLnByb2ZpbGVyPXQsdC5zdGFydCgpLGF3YWl0IFNvKGUpLHRoaXMucHJvZmlsZXI9dm9pZCAwLHQuc3RvcCgpLHQuZ2V0UmVzb2x2ZWRRdWVyaWVzKCl9YXN5bmMgcmVuZGVyKGUsdCl7dmFyIGkscztpZighdGhpcy5waXBlbGluZSl0aHJvdyJtaXNzaW5nIHBpcGVsaW5lIjsodGhpcy5wcmV2aW91c0ltYWdlSGVpZ2h0IT09ZS5oZWlnaHR8fHRoaXMucHJldmlvdXNJbWFnZVdpZHRoIT09ZS53aWR0aCkmJnRoaXMucmVzaXplT3V0cHV0KGUud2lkdGgsZS5oZWlnaHQpLCh0aGlzLnByZXZpb3VzTWFza0hlaWdodCE9PXQuaGVpZ2h0fHx0aGlzLnByZXZpb3VzTWFza1dpZHRoIT09dC53aWR0aCkmJih0aGlzLmltcHJvdmVNYXNrLnJlc2l6ZU91dHB1dCh0LndpZHRoLHQuaGVpZ2h0KSx0aGlzLnByZXZpb3VzTWFza1dpZHRoPXQud2lkdGgsdGhpcy5wcmV2aW91c01hc2tIZWlnaHQ9dC5oZWlnaHQpO2NvbnN0IG49InJlbmRlcmVyIjsoaT10aGlzLnByb2ZpbGVyKT09bnVsbHx8aS5wdXNoQ29udGV4dChuKSx0aGlzLmltcHJvdmVNYXNrLnNldFByb2ZpbGVyKHRoaXMucHJvZmlsZXIpLHRoaXMucGlwZWxpbmUuc2V0UHJvZmlsZXIodGhpcy5wcm9maWxlcik7bGV0IG89dDtyZXR1cm4gdGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQmJih0aGlzLmltcHJvdmVNYXNrLnNldERhdGEoZSx0KSx0aGlzLmltcHJvdmVNYXNrLnJ1bigpLG89dGhpcy5pbXByb3ZlTWFzay5vdXRwdXQpLHRoaXMucGlwZWxpbmUuc2V0RGF0YShlLG8pLGF3YWl0IHRoaXMucGlwZWxpbmUucnVuKCksKHM9dGhpcy5wcm9maWxlcik9PW51bGx8fHMucG9wQ29udGV4dChuKSx0aGlzLmNhbnZhc31yZXNpemVPdXRwdXQoZSx0KXt2YXIgbjt0aGlzLmNhbnZhcy53aWR0aD1lLHRoaXMuY2FudmFzLmhlaWdodD10LChuPXRoaXMucGlwZWxpbmUpPT1udWxsfHxuLnJlc2l6ZU91dHB1dChlLHQpLHRoaXMucHJldmlvdXNJbWFnZVdpZHRoPWUsdGhpcy5wcmV2aW91c0ltYWdlSGVpZ2h0PXR9fWNsYXNzIEZvIGV4dGVuZHMgTHR7Y29uc3RydWN0b3IoKXtzdXBlcigpO2wodGhpcywicGlwZWxpbmUiKTtsKHRoaXMsImJhY2tncm91bmRJbWFnZSIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlUmVzaXplckNhbnZhcyIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlUmVzaXplckNvbnRleHQiKTtsKHRoaXMsImJhY2tncm91bmRJbWFnZVJlc2l6ZXIiKTt0aGlzLnBpcGVsaW5lPW5ldyBJbyh0aGlzLmNvbnRleHQpO2NvbnN0IHQ9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLG49dC5nZXRDb250ZXh0KCJ3ZWJnbDIiKTtpZighbil0aHJvdyJGYWlsIHRvIHJldHJpZXZlIHdlYmdsIGNvbnRleHQiO3RoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplckNhbnZhcz10LHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplckNvbnRleHQ9bix0aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXI9bmV3IEVmKHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplckNvbnRleHQsMCwwKX1zZXRCYWNrZ3JvdW5kSW1hZ2UodCl7dGhpcy5iYWNrZ3JvdW5kSW1hZ2U9dCx0aGlzLnVwZGF0ZUJhY2tncm91bmRJbWFnZSgpfXVwZGF0ZUJhY2tncm91bmRJbWFnZSgpe2NvbnN0e3dpZHRoOnQsaGVpZ2h0Om59PXRoaXMuY2FudmFzO3RoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5yZXNpemVPdXRwdXQodCxuKSx0aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXIuc2V0RGF0YSh0aGlzLmJhY2tncm91bmRJbWFnZSksdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyLnJ1bigpLHRoaXMucGlwZWxpbmUuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzfXJlc2l6ZU91dHB1dCh0LG4pe3N1cGVyLnJlc2l6ZU91dHB1dCh0LG4pLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplckNhbnZhcy53aWR0aD10LHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplckNhbnZhcy5oZWlnaHQ9bix0aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy51cGRhdGVCYWNrZ3JvdW5kSW1hZ2UoKX19Y2xhc3MgJGYgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJmcmFtZVJlYWRlciIpfXNldEJhY2tncm91bmRWaWRlbyh0KXt0aGlzLmZyYW1lUmVhZGVyPXR9YXN5bmMgcmVuZGVyKHQsbil7cmV0dXJuIGF3YWl0IHRoaXMucmVhZE5leHRWaWRlb0ZyYW1lKCksc3VwZXIucmVuZGVyKHQsbil9YXN5bmMgcmVhZE5leHRWaWRlb0ZyYW1lKCl7dmFyIG47Y29uc3QgdD1hd2FpdCgobj10aGlzLmZyYW1lUmVhZGVyKT09bnVsbD92b2lkIDA6bi5yZWFkKCkpO2lmKHQhPW51bGwmJnQudmFsdWUpe2NvbnN0IG89YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAodC52YWx1ZSk7dGhpcy5zZXRCYWNrZ3JvdW5kSW1hZ2UobyksdC52YWx1ZS5jbG9zZSgpfX19Y2xhc3MgUG97Ymx1ckJhY2tncm91bmQoZSl7cmV0dXJuIG5ldyBmcyhlKX1ibHVyU2lsaG91ZXR0ZShlKXtyZXR1cm4gbmV3IGxzKGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiBuZXcgZHN9dmlkZW9CYWNrZ3JvdW5kKCl7cmV0dXJuIG5ldyAkZn19dmFyIFdmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7CnVuaWZvcm0gc2FtcGxlcjJEIG1hc2s7Cgp2ZWM0IGxvb3AoKTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gbG9vcCgpOyB9CmAsVmY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBIZiBleHRlbmRzIHZle2dldERlZmluZXMoKXt2YXIgZTtyZXR1cm57UkFESVVTOihlPXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP2U6MX19Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gV2YrdGhpcy5jcmVhdGVMb29wRnVuY3Rpb24oKX1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gVmZ9Y3JlYXRlTG9vcEZ1bmN0aW9uKCl7dmFyIHQ7bGV0IGU9KHQ9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/dDoxO3JldHVybmAKCiAgICAgICAgdmVjNCBsb29wKCkgeyAKICAgICAgICAgICAgdmVjNCByZXN1bHQgPSB2ZWM0KDAsMCwwLDApOwogICAgICAgICAgICBmbG9hdCBmYWN0b3JTdW0gPSAwLjsKCiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZFJhZGl1cyA9IHZlYzIoLSR7ZX0uKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkSW5jcmVtZW50ID0gdmVjMigxLikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgZGlmZiA9IG5vcm1hbGl6ZWRSYWRpdXM7CiAgICAgICAgICAgIGZsb2F0IG1heExlbmd0aCA9IGxlbmd0aChub3JtYWxpemVkUmFkaXVzKTsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gKDEuLSB0ZXh0dXJlMkQobWFzaywgX3RleHR1cmVfY29vcmQgKyBkaWZmKS5hKSAqIChtYXhMZW5ndGggLSBsZW5ndGgoZGlmZikpIC8gbWF4TGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmYWN0b3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQgKyBkaWZmKTsKICAgICAgICAgICAgICAgICAgICBmYWN0b3JTdW0gKz0gZmFjdG9yOwogICAgICAgICAgICAgICAgICAgIGRpZmYueCArPSBub3JtYWxpemVkSW5jcmVtZW50Lng7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkaWZmLnkgKz0gbm9ybWFsaXplZEluY3JlbWVudC55OwogICAgICAgICAgICAgICAgZGlmZi54ID0gbm9ybWFsaXplZFJhZGl1cy54OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXN1bHQgLyBmYWN0b3JTdW07CiAgICAgICAgfWB9fWNvbnN0IGpmPTEwLFlmPTIsWGY9ODtjbGFzcyBRZiBleHRlbmRzIE5ye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIoKTtsKHRoaXMsImlucHV0SW1hZ2UiKTtsKHRoaXMsImlucHV0TWFzayIpO2wodGhpcywiYmx1ciIpO3RoaXMuY29udGV4dD10LHRoaXMucmFkaXVzPW47Y29uc3Qgbz17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9O3RoaXMuYmx1cj1uZXcgSGYoey4uLm8scmFkaXVzOm4sLi4udGhpcy5nZXRCbHVyVGV4dHVyZVNpemUodC5jYW52YXMud2lkdGgsdC5jYW52YXMuaGVpZ2h0KX0pO2NvbnN0IGk9bmV3IE9yKHsuLi5vLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTp0aGlzLmJsdXIscHJldmVudFJlc2l6ZTohMCxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkEodCx0aGlzLmlucHV0SW1hZ2UpLG1hc2s6QSh0LHRoaXMuaW5wdXRNYXNrKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmksZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDpBKHQsdGhpcy5ibHVyLm91dHB1dCksZm9yZWdyb3VuZDpBKHQsdGhpcy5pbnB1dEltYWdlKSx0aHJlc2hvbGQ6QSh0LHRoaXMuaW5wdXRNYXNrKX0pfSl9Z2V0Qmx1clRleHR1cmVTaXplKHQsbil7Y29uc3Qgbz10aGlzLnJhZGl1cz5qZj9YZjpZZjtyZXR1cm57d2lkdGg6TWF0aC5tYXgoTWUsdC9vKSxoZWlnaHQ6TWF0aC5tYXgoTWUsbi9vKX19c2V0RGF0YSh0LG4pe3RoaXMuaW5wdXRJbWFnZT10LHRoaXMuaW5wdXRNYXNrPW59cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbik7Y29uc3Qgbz10aGlzLmdldEJsdXJUZXh0dXJlU2l6ZSh0LG4pO3RoaXMuYmx1ci5yZXNpemVPdXRwdXQoby53aWR0aCxvLmhlaWdodCl9fWNsYXNzIHFmIGV4dGVuZHMgTHR7Y29uc3RydWN0b3IodCl7c3VwZXIoKTtsKHRoaXMsInBpcGVsaW5lIik7dGhpcy5waXBlbGluZT1uZXcgUWYodGhpcy5jb250ZXh0LHQpLHRoaXMuZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl9fWNsYXNzIEtmIGV4dGVuZHMgTnJ7Y29uc3RydWN0b3IodCxuKXtzdXBlcigpO2wodGhpcywiaW5wdXRJbWFnZSIpO2wodGhpcywiaW5wdXRNYXNrIik7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbz17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9LGk9bmV3IFJvKHsuLi5vLHJhZGl1czpuLHR5cGU6THIuR0FVU1NJQU59KSxzPW5ldyBPcih7Li4ubyxkaXNhYmxlRnJhbWVidWZmZXI6ITB9KTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkEodCx0aGlzLmlucHV0SW1hZ2UpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06cyxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOkEodCx0aGlzLmlucHV0SW1hZ2UpLGZvcmVncm91bmQ6QSh0LGkub3V0cHV0KSx0aHJlc2hvbGQ6QSh0LHRoaXMuaW5wdXRNYXNrKX0pfSl9c2V0RGF0YSh0LG4pe3RoaXMuaW5wdXRJbWFnZT10LHRoaXMuaW5wdXRNYXNrPW59fWNsYXNzIEpmIGV4dGVuZHMgTHR7Y29uc3RydWN0b3IodCl7c3VwZXIoKTtsKHRoaXMsInBpcGVsaW5lIik7dGhpcy5waXBlbGluZT1uZXcgS2YodGhpcy5jb250ZXh0LHQpLHRoaXMuZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl9fWNsYXNzIFpmIGV4dGVuZHMgSW97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpO2wodGhpcywiZnJhbWVSZWFkZXIiKTtsKHRoaXMsInByZWNpc2VNYXNrRW5hYmxlZCIsITApfXNldCByZWFkZXIodCl7dGhpcy5mcmFtZVJlYWRlcj10fWFzeW5jIHJ1bigpe3RoaXMuZnJhbWVSZWFkZXImJihhd2FpdCB0aGlzLnJlYWROZXh0VmlkZW9GcmFtZSgpLGF3YWl0IHN1cGVyLnJ1bigpKX1hc3luYyByZWFkTmV4dFZpZGVvRnJhbWUoKXt2YXIgbjtjb25zdCB0PWF3YWl0KChuPXRoaXMuZnJhbWVSZWFkZXIpPT1udWxsP3ZvaWQgMDpuLnJlYWQoKSk7dCE9bnVsbCYmdC52YWx1ZSYmKHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAodC52YWx1ZSksdC52YWx1ZS5jbG9zZSgpKX19Y2xhc3MgZWwgZXh0ZW5kcyBMdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7bCh0aGlzLCJwaXBlbGluZSIpO3RoaXMucGlwZWxpbmU9bmV3IFpmKHRoaXMuY29udGV4dCl9c2V0QmFja2dyb3VuZFZpZGVvKHQpe3RoaXMucGlwZWxpbmUucmVhZGVyPXR9fWNsYXNzIGtve2JsdXJCYWNrZ3JvdW5kKGUpe3JldHVybiBuZXcgcWYoZSl9Ymx1clNpbGhvdWV0dGUoZSl7cmV0dXJuIG5ldyBKZihlKX1pbWFnZUJhY2tncm91bmQoKXtyZXR1cm4gbmV3IEZvfXZpZGVvQmFja2dyb3VuZCgpe3JldHVybiBuZXcgZWx9fWNsYXNzIHRse2NvbnN0cnVjdG9yKGUpe2wodGhpcywiZmFjdG9yeSIpO3N3aXRjaChlKXtjYXNlIGd0LkNBTlZBUzp0aGlzLmZhY3Rvcnk9bmV3IFBvO2JyZWFrO2Nhc2UgZ3QuV0VCR0w6dGhpcy5mYWN0b3J5PW5ldyBrbzticmVhaztkZWZhdWx0OmNvbnN0IHQ9Y3MoKTt0aGlzLmZhY3Rvcnk9dC5zdXBwb3J0ZWQ/bmV3IGtvOm5ldyBQb319Ymx1ckJhY2tncm91bmQoZSl7cmV0dXJuIHRoaXMuZ2V0RmFjdG9yeSgpLmJsdXJCYWNrZ3JvdW5kKGUpfWJsdXJTaWxob3VldHRlKGUpe3JldHVybiB0aGlzLmdldEZhY3RvcnkoKS5ibHVyU2lsaG91ZXR0ZShlKX1pbWFnZUJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkuaW1hZ2VCYWNrZ3JvdW5kKCl9dmlkZW9CYWNrZ3JvdW5kKCl7cmV0dXJuIHRoaXMuZ2V0RmFjdG9yeSgpLnZpZGVvQmFja2dyb3VuZCgpfWdldEZhY3RvcnkoKXtpZighdGhpcy5mYWN0b3J5KXRocm93IkZhY3RvcnkgaXMgbm90IGluaXRpYWxpemVkIjtyZXR1cm4gdGhpcy5mYWN0b3J5fX1jbGFzcyBybHtjb25zdHJ1Y3Rvcigpe2wodGhpcywicmVuZGVyZXIiKTtsKHRoaXMsImJhY2tncm91bmRWaWRlbyIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlIil9c2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIG4sbztjb25zdCB0PW5ldyB0bCgobj1lLnJlbmRlcmluZ09wdGlvbnMpPT1udWxsP3ZvaWQgMDpuLnR5cGUpO3N3aXRjaChlLnRyYW5zZm9ybWVyVHlwZSl7Y2FzZSJCYWNrZ3JvdW5kQmx1ciI6dGhpcy5yZW5kZXJlcj10LmJsdXJCYWNrZ3JvdW5kKHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlNpbGhvdWV0dGVCbHVyIjp0aGlzLnJlbmRlcmVyPXQuYmx1clNpbGhvdWV0dGUodGhpcy5nZXRCbHVyU2l6ZShlLnJhZGl1cykpO2JyZWFrO2Nhc2UiVmlkZW9CYWNrZ3JvdW5kIjpjb25zdCBpPXQudmlkZW9CYWNrZ3JvdW5kKCk7dGhpcy5iYWNrZ3JvdW5kVmlkZW8mJmkuc2V0QmFja2dyb3VuZFZpZGVvKHRoaXMuYmFja2dyb3VuZFZpZGVvKSx0aGlzLnJlbmRlcmVyPWk7YnJlYWs7Y2FzZSJWaXJ0dWFsQmFja2dyb3VuZCI6Y29uc3Qgcz10LmltYWdlQmFja2dyb3VuZCgpO3RoaXMuYmFja2dyb3VuZEltYWdlJiZzLnNldEJhY2tncm91bmRJbWFnZSh0aGlzLmJhY2tncm91bmRJbWFnZSksdGhpcy5yZW5kZXJlcj1zO2JyZWFrO2RlZmF1bHQ6dGhyb3dgVW5rbm93biByZW5kZXJpbmcgdHlwZSBbJHtlLnRyYW5zZm9ybWVyVHlwZX1dYH0oKG89ZS5yZW5kZXJpbmdPcHRpb25zKT09bnVsbD92b2lkIDA6by50eXBlKT09PWd0LldFQkdMJiYoZS5yZW5kZXJpbmdPcHRpb25zLnNlbGZpZVNlZ21lbnRhdGlvblR5cGU9PT1yci5QUkVDSVNFP3RoaXMucmVuZGVyZXIuZW5hYmxlUG9zdFByb2Nlc3NpbmcoKTplLnJlbmRlcmluZ09wdGlvbnMuc2VsZmllU2VnbWVudGF0aW9uVHlwZT09PXJyLkZBU1QmJnRoaXMucmVuZGVyZXIuZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCkpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMucmVuZGVyZXIpPT1udWxsfHx0LnNldEZsaWNrZXJpbmdPcHRpb25zKGUpfXNldFZpZGVvQkdSZWFkYWJsZShlKXt0aGlzLmJhY2tncm91bmRWaWRlbz1lLmdldFJlYWRlcigpO2NvbnN0IHQ9dGhpcy5yZW5kZXJlcjt0IT1udWxsJiZ0LnNldEJhY2tncm91bmRWaWRlbyYmdC5zZXRCYWNrZ3JvdW5kVmlkZW8odGhpcy5iYWNrZ3JvdW5kVmlkZW8pfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe2NvbnN0IHQ9dGhpcy5yZW5kZXJlcjt0IT1udWxsJiZ0LnNldEJhY2tncm91bmRJbWFnZSYmdC5zZXRCYWNrZ3JvdW5kSW1hZ2UoZSksdGhpcy5iYWNrZ3JvdW5kSW1hZ2U9ZX1hc3luYyBwcm9jZXNzKGUsdCl7aWYodGhpcy5yZW5kZXJlcilyZXR1cm4gdGhpcy5yZW5kZXJlci5yZW5kZXIoZSx0KX1hc3luYyByZXNpemVGb3JlZ3JvdW5kKGUsdCl7fWdldEJsdXJTaXplKGU9cHQuTG93KXtzd2l0Y2goZSl7Y2FzZSBwdC5Mb3c6cmV0dXJuIDU7Y2FzZSBwdC5IaWdoOnJldHVybiAxMn1yZXR1cm4gZX1hc3luYyBwcm9maWxlKGUpe3ZhciB0LG47cmV0dXJuKG49KHQ9dGhpcy5yZW5kZXJlcik9PW51bGw/dm9pZCAwOnQucHJvZmlsZVdlYmdsKGUpKSE9bnVsbD9uOltdfX1jbGFzcyBubHtjb25zdHJ1Y3Rvcigpe2wodGhpcywic2VsZmllU2VnbWVudGF0aW9uIixuZXcgdXMpO2wodGhpcywiYmFja2dyb3VuZEZpbHRlciIpO2wodGhpcywicmVwb3J0ZXIiLG5ldyB0cyk7bCh0aGlzLCJpc0VuYWJsZWQiLCEwKTtsKHRoaXMsImJhY2tncm91bmRPcHRpb25zIil9YXN5bmMgaW5pdChlLHQpe2F3YWl0IHRoaXMuc2VsZmllU2VnbWVudGF0aW9uLmluaXQodC53YXNtQXNzZXRVcmlQYXRoLHQudGZsaXRlQXNzZXRVcmlQYXRoKSx0aGlzLmJhY2tncm91bmRGaWx0ZXI9bmV3IHJsLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkNyZWF0ZSJ9KX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt2YXIgYSx1O2lmKCF0aGlzLmlzRW5hYmxlZClyZXR1cm4gdC5lbnF1ZXVlKGUpO2xldCBuO2NvbnN0IG89KGE9ZS50aW1lc3RhbXApIT1udWxsP2E6MCxpPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGUpLHM9YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24ucHJvY2VzcyhpKTtzJiYobj1hd2FpdCgodT10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp1LnByb2Nlc3MoaSxzKSkpLG4/KGUuY2xvc2UoKSx0LmVucXVldWUobmV3IFZpZGVvRnJhbWUobix7dGltZXN0YW1wOm8sYWxwaGE6ImRpc2NhcmQifSkpKTp0LmVucXVldWUoZSl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucz1lLGF3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IlVwZGF0ZSJ9KX1hc3luYyBzZXRWaWRlb0JHUmVhZGFibGUoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaWRlb0JHUmVhZGFibGUoZSkpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0VmlydHVhbEJHSW1hZ2UoZSkpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGx8fHQuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIn0pfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHQsbjtyZXR1cm4obj0odD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnByb2ZpbGUoZSkpIT1udWxsP246W119Z2V0VHJhbnNmb3JtZXJUeXBlKCl7dmFyIGUsdDtyZXR1cm4odD0oZT10aGlzLmJhY2tncm91bmRPcHRpb25zKT09bnVsbD92b2lkIDA6ZS50cmFuc2Zvcm1lclR5cGUpIT1udWxsP3Q6IlVuZGVmaW5lZCJ9ZW5hYmxlKCl7dGhpcy5pc0VuYWJsZWQ9ITB9ZGlzYWJsZSgpe3RoaXMuaXNFbmFibGVkPSExfXJlcG9ydChlKXt2YXIgdDt0aGlzLnJlcG9ydGVyLnNlbmQoe3ZlcnNpb246cnMsYWN0aW9uOiJNbFRyYW5zZm9ybWVycyIsdHJhbnNmb3JtZXJUeXBlOih0PXRoaXMuYmFja2dyb3VuZE9wdGlvbnMpPT1udWxsP3ZvaWQgMDp0LnRyYW5zZm9ybWVyVHlwZSxjb25maWc6SlNPTi5zdHJpbmdpZnkodGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyksLi4uZX0pfX1jb25zdCBHcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe2wodGhpcywiYmFja2dyb3VuZFRyYW5zZm9ybWVyIixuZXcgbmwpO2wodGhpcywibWVkaWFQcm9jZXNzb3IiLG5ldyBraSk7bCh0aGlzLCJyYXRlIiwzMCk7bCh0aGlzLCJyZXNvbHZlT25NZWRpYVByb2Nlc3NvciIpO2wodGhpcywiZXZlbnRzUXVldWUiLFtdKX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuaW5pdChlLHQpLGF3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhbnNmb3JtZXJzKFt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcl0pLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy5yYXRlKSx0aGlzLm1lZGlhUHJvY2Vzc29yLm9uQW55KChuLG8pPT57dGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj8odGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcih7bmFtZTpuLGRhdGE6b30pLHRoaXMucmVzb2x2ZU9uTWVkaWFQcm9jZXNzb3I9dm9pZCAwKTp0aGlzLmV2ZW50c1F1ZXVlLnB1c2goe25hbWU6bixkYXRhOm99KX0pfWVuYWJsZSgpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLmVuYWJsZSgpfWRpc2FibGUoKXt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5kaXNhYmxlKCl9YXN5bmMgb25NZWRpYVByb2Nlc3NvckV2ZW50KCl7cmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGU9Pnt0aGlzLmV2ZW50c1F1ZXVlLmxlbmd0aD4wP2UodGhpcy5ldmVudHNRdWV1ZS5zaGlmdCgpKTp0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPWV9KX1hc3luYyBzZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnJhdGU9ZSx0aGlzLm1lZGlhUHJvY2Vzc29yLnNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpfWFzeW5jIHRyYW5zZm9ybShlLHQpe3RoaXMubWVkaWFQcm9jZXNzb3IudHJhbnNmb3JtKGUsdCl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIpPT1udWxsP3ZvaWQgMDp0LnNldEJhY2tncm91bmRPcHRpb25zKGUpKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlkZW9CR1JlYWRhYmxlKGUpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe2F3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldFZpcnR1YWxCR0ltYWdlKGUpfWFzeW5jIHRlcm1pbmF0ZSgpe2F3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3IuZGVzdHJveSgpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldEZsaWNrZXJpbmdPcHRpb25zKGUpfXNldFZvbmFnZU1ldGFkYXRhKGUpe0FpKGUpfWFzeW5jIHByb2ZpbGUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGF3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnByb2ZpbGUoZSkpfX07bGV0IERvPUdyOygoKT0+e0hvKCJQcm9jZXNzb3JXb3JrZXIiLEdyKX0pKCl9KSgpOwo=",fc=typeof window<"u"&&window.Blob&&new Blob([atob(hc)],{type:"text/javascript;charset=utf-8"});function E3(){const i=fc&&(window.URL||window.webkitURL).createObjectURL(fc);try{return i?new Worker(i):new Worker("data:application/javascript;base64,"+hc)}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}const ms=class extends cr{constructor(r){super();gt(this,"rate",30);gt(this,"worker");gt(this,"config");gt(this,"backgroundOptions");gt(this,"isEnabled",!0);this.config=r}async setTrackExpectedRate(r){var f;await this.startWorker(),await((f=this.worker)==null?void 0:f.setTrackExpectedRate(r))}async setBackgroundOptions(r){this.backgroundOptions=r,await this.updateBackgroundOptions(r)}async transform(r,f){var Z;await this.startWorker(),await((Z=this.worker)==null?void 0:Z.transform(r,f))}async destroy(){var r;await((r=this.worker)==null?void 0:r.terminate()),this.worker=void 0}async setFlickeringOptions(r){var f;await this.startWorker(),await((f=this.worker)==null?void 0:f.setFlickeringOptions(r))}async profile(r){var Z;const f=await((Z=this.worker)==null?void 0:Z.profile(r));return JSON.parse(f!=null?f:"[]")}async enable(){var r;this.isEnabled=!0,await((r=this.worker)==null?void 0:r.enable())}async disable(){var r;this.isEnabled=!1,await((r=this.worker)==null?void 0:r.disable())}async listenWorker(){var r,f;for(;(r=this.worker)!=null&&r.workerContext.worker;){const{name:Z,data:I}=await((f=this.worker)==null?void 0:f.onMediaProcessorEvent());switch(Z){case"error":case"warn":this.emit(Z,I);break;case"pipelineInfo":switch(this.emit(Z,I),I){case"pipeline_ended":case"pipeline_ended_with_error":await this.destroy();return}break}}}async startWorker(){!this.config||this.worker||(this.worker=await p2(ds,E3),this.isEnabled||await this.worker.disable(),await this.worker.init(`worker_${ms.initCount++}`,this.config),this.backgroundOptions&&await this.updateBackgroundOptions(this.backgroundOptions),await this.worker.setVonageMetadata(pi()),await this.setBackgroundOptions(this.config),this.listenWorker())}async updateBackgroundOptions(r){var Z,I,C;await this.startWorker();const{transformerType:f}=r;switch(f){case"VideoBackground":await((Z=this.worker)==null?void 0:Z.setVideoBGReadable(await Es.createVideoReadable(r.backgroundAssetUri)));break;case"VirtualBackground":await((I=this.worker)==null?void 0:I.setVirtualBGImage(await Es.createImageCanvas(r.backgroundAssetUri)));break}await((C=this.worker)==null?void 0:C.setBackgroundOptions(r))}};let fo=ms;gt(fo,"initCount",0);class U3{constructor(n){this.queries=n}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(n){const r=document.createElement("a");r.href=URL.createObjectURL(new Blob([n],{type:"application/json"})),r.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r)}convertToSpeedscope(){const n=[],r={},f=[];let Z=0;for(const C of this.queries){const Y=[];for(const N of C)r[N.name]===void 0&&(r[N.name]=n.length,n.push({name:N.name})),Y.push({type:N.action==lc.PUSH?"O":"C",frame:r[N.name],at:N.timestamp}),Z=Math.max(Z,N.timestamp+N.duration);f.push({events:Y,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:Z})}const I={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:n},profiles:f};return JSON.stringify(I,null,2)}}class hs extends cr{constructor(r){super();gt(this,"worker");gt(this,"connector");this.worker=new fo(r),this.connector=new Dc(this.worker),this.worker.onAny((f,Z)=>this.emit(f,Z))}async setBackgroundOptions(r){await this.worker.setBackgroundOptions(r)}async enable(){await this.worker.enable()}async disable(){await this.worker.disable()}setTrackExpectedRate(r){this.worker.setTrackExpectedRate(r)}getConnector(){return this.connector}async profile(r){return this.worker.profile(r)}static async profile(r){const f=await Promise.all(this.instances.map(Z=>Z.profile(r)));return new U3(f)}static async create(r){const f=new this(r);return this.instances.push(f),f}}gt(hs,"instances",[]);function B3(){return Zi}function K3(){return vi}function M3(){return Gi}function A3(){return Xi}function j3(){return Wi}function z3(){return Vi}function O3(){return Ri}async function P3(i){return await hs.create(i)}Ue.BackgroundTransformer=dc,Ue.BackgroundTransformerType=Rs,Ue.BlurRadius=_r,Ue.ErrorFunction=Vs,Ue.MediapipeHelper=xi,Ue.PipelineInfoData=yi,Ue.RenderingType=Qr,Ue.VonageMediaProcessor=hs,Ue.WarningType=Ws,Ue.WebglSelfieSegmentationType=gi,Ue.createVonageMediaProcessor=P3,Ue.getSupportedBrowserFeatures=Is,Ue.getVonageFaceDetection=A3,Ue.getVonageFaceMash=j3,Ue.getVonageHands=K3,Ue.getVonageHolistic=M3,Ue.getVonageObjectron=z3,Ue.getVonagePose=O3,Ue.getVonageSelfieSegmentation=B3,Ue.isSupported=i2,Object.defineProperties(Ue,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
458
|
+
}`}}const S3=10,T3=2,Y3=8;class w3 extends cs{constructor(r,f){super();gt(this,"inputImage");gt(this,"inputMask");gt(this,"blur");this.context=r,this.radius=f;const Z={context:r,height:r.canvas.height,width:r.canvas.width};this.blur=new I3({...Z,radius:f,...this.getBlurTextureSize(r.canvas.width,r.canvas.height)});const I=new ss({...Z,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:mn(r,this.inputImage),mask:mn(r,this.inputMask)})}),this.addStep({program:I,getUniforms:()=>({background:mn(r,this.blur.output),foreground:mn(r,this.inputImage),threshold:mn(r,this.inputMask)})})}getBlurTextureSize(r,f){const Z=this.radius>S3?Y3:T3;return{width:Math.max(zr,r/Z),height:Math.max(zr,f/Z)}}setData(r,f){this.inputImage=r,this.inputMask=f}resizeOutput(r,f){super.resizeOutput(r,f);const Z=this.getBlurTextureSize(r,f);this.blur.resizeOutput(Z.width,Z.height)}}class L3 extends ho{constructor(r){super();gt(this,"pipeline");this.pipeline=new w3(this.context,r),this.disablePostProcessing()}}class F3 extends cs{constructor(r,f){super();gt(this,"inputImage");gt(this,"inputMask");this.context=r;const Z={context:r,height:r.canvas.height,width:r.canvas.width},I=new s2({...Z,radius:f,type:us.GAUSSIAN}),F=new ss({...Z,disableFramebuffer:!0});this.addStep({program:I,getUniforms:()=>({texture:mn(r,this.inputImage)})}),this.addStep({program:F,getUniforms:()=>({background:mn(r,this.inputImage),foreground:mn(r,I.output),threshold:mn(r,this.inputMask)})})}setData(r,f){this.inputImage=r,this.inputMask=f}}class C3 extends ho{constructor(r){super();gt(this,"pipeline");this.pipeline=new F3(this.context,r),this.disablePostProcessing()}}class H3 extends i2{constructor(){super(...arguments);gt(this,"frameReader");gt(this,"preciseMaskEnabled",!0)}set reader(r){this.frameReader=r}async run(){this.frameReader&&(await this.readNextVideoFrame(),await super.run())}async readNextVideoFrame(){var f;const r=await((f=this.frameReader)==null?void 0:f.read());r!=null&&r.value&&(this.inputBackgroundImage=await createImageBitmap(r.value),r.value.close())}}class J3 extends ho{constructor(){super();gt(this,"pipeline");this.pipeline=new H3(this.context)}setBackgroundVideo(r){this.pipeline.reader=r}}class a2{blurBackground(n){return new L3(n)}blurSilhouette(n){return new C3(n)}imageBackground(){return new c2}videoBackground(){return new J3}}class N3{constructor(n){gt(this,"factory");switch(n){case Qr.CANVAS:this.factory=new u2;break;case Qr.WEBGL:this.factory=new a2;break;default:const r=Ss();this.factory=r.supported?new a2:new u2}}blurBackground(n){return this.getFactory().blurBackground(n)}blurSilhouette(n){return this.getFactory().blurSilhouette(n)}imageBackground(){return this.getFactory().imageBackground()}videoBackground(){return this.getFactory().videoBackground()}getFactory(){if(!this.factory)throw"Factory is not initialized";return this.factory}}class k3{constructor(){gt(this,"renderer");gt(this,"backgroundVideo");gt(this,"backgroundImage")}setBackgroundOptions(n){var f,Z;const r=new N3((f=n.renderingOptions)==null?void 0:f.type);switch(n.transformerType){case"BackgroundBlur":this.renderer=r.blurBackground(this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.renderer=r.blurSilhouette(this.getBlurSize(n.radius));break;case"VideoBackground":const I=r.videoBackground();this.backgroundVideo&&I.setBackgroundVideo(this.backgroundVideo),this.renderer=I;break;case"VirtualBackground":const F=r.imageBackground();this.backgroundImage&&F.setBackgroundImage(this.backgroundImage),this.renderer=F;break;default:throw`Unknown rendering type [${n.transformerType}]`}((Z=n.renderingOptions)==null?void 0:Z.type)===Qr.WEBGL&&(n.renderingOptions.selfieSegmentationType===gi.PRECISE?this.renderer.enablePostProcessing():n.renderingOptions.selfieSegmentationType===gi.FAST&&this.renderer.disablePostProcessing())}setFlickeringOptions(n){var r;(r=this.renderer)==null||r.setFlickeringOptions(n)}setVideoBGReadable(n){this.backgroundVideo=n.getReader();const r=this.renderer;r!=null&&r.setBackgroundVideo&&r.setBackgroundVideo(this.backgroundVideo)}async setVirtualBGImage(n){const r=this.renderer;r!=null&&r.setBackgroundImage&&r.setBackgroundImage(n),this.backgroundImage=n}async process(n,r){if(this.renderer)return this.renderer.render(n,r)}async resizeForeground(n,r){}getBlurSize(n=_r.Low){switch(n){case _r.Low:return 5;case _r.High:return 12}return n}async profile(n){var r,f;return(f=(r=this.renderer)==null?void 0:r.profileWebgl(n))!=null?f:[]}}class d2{constructor(){gt(this,"selfieSegmentation",new xs);gt(this,"backgroundFilter");gt(this,"reporter",new zc);gt(this,"isEnabled",!0);gt(this,"backgroundOptions")}async init(n,r){await this.selfieSegmentation.init(r.wasmAssetUriPath,r.tfliteAssetUriPath),this.backgroundFilter=new k3,this.report({variation:"Create"})}async transform(n,r){var T,J;if(!this.isEnabled)return r.enqueue(n);let f;const Z=(T=n.timestamp)!=null?T:0,I=await createImageBitmap(n),F=await this.selfieSegmentation.process(I);F&&(f=await((J=this.backgroundFilter)==null?void 0:J.process(I,F))),f?(n.close(),r.enqueue(new VideoFrame(f,{timestamp:Z,alpha:"discard"}))):r.enqueue(n)}async setBackgroundOptions(n){var r;this.backgroundOptions=n,await((r=this.backgroundFilter)==null?void 0:r.setBackgroundOptions(n)),this.report({variation:"Update"})}async setVideoBGReadable(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVideoBGReadable(n))}async setVirtualBGImage(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVirtualBGImage(n))}setFlickeringOptions(n){var r;(r=this.backgroundFilter)==null||r.setFlickeringOptions(n),this.report({variation:"Update"})}async profile(n){var r,f;return(f=(r=this.backgroundFilter)==null?void 0:r.profile(n))!=null?f:[]}getTransformerType(){var n,r;return(r=(n=this.backgroundOptions)==null?void 0:n.transformerType)!=null?r:"Undefined"}enable(){this.isEnabled=!0}disable(){this.isEnabled=!1}report(n){var r;this.reporter.send({version:jc,action:"MlTransformers",transformerType:(r=this.backgroundOptions)==null?void 0:r.transformerType,config:JSON.stringify(this.backgroundOptions),...n})}}const fs=class{constructor(){gt(this,"backgroundTransformer",new d2);gt(this,"mediaProcessor",new _2);gt(this,"rate",30);gt(this,"resolveOnMediaProcessor");gt(this,"eventsQueue",[])}async init(n,r){await this.backgroundTransformer.init(n,r),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((f,Z)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:f,data:Z}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:f,data:Z})})}enable(){this.backgroundTransformer.enable()}disable(){this.backgroundTransformer.disable()}async onMediaProcessorEvent(){return await new Promise(n=>{this.eventsQueue.length>0?n(this.eventsQueue.shift()):this.resolveOnMediaProcessor=n})}async setTrackExpectedRate(n){this.rate=n,this.mediaProcessor.setTrackExpectedRate(n)}async transform(n,r){this.mediaProcessor.transform(n,r)}async setBackgroundOptions(n){var r;await((r=this.backgroundTransformer)==null?void 0:r.setBackgroundOptions(n))}setVideoBGReadable(n){this.backgroundTransformer.setVideoBGReadable(n)}async setVirtualBGImage(n){await this.backgroundTransformer.setVirtualBGImage(n)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(n){this.backgroundTransformer.setFlickeringOptions(n)}setVonageMetadata(n){M2(n)}async profile(n){return JSON.stringify(await this.backgroundTransformer.profile(n))}};let ds=fs;(()=>{yc("ProcessorWorker",fs)})();const h2="dmFyIEdsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgJGw9KEssWCxXKT0+WCBpbiBLP0dsKEssWCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6V30pOktbWF09Vzt2YXIgbD0oSyxYLFcpPT4oJGwoSyx0eXBlb2YgWCE9InN5bWJvbCI/WCsiIjpYLFcpLFcpOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBLKHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3QgWD1LKCJnbG9iYWxzIix7fSk7dmFyIFc9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIsci5FVkVOVD0iRVZFTlQiLHIpKShXfHx7fSk7ZnVuY3Rpb24gR28ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKHQ9PnIgaW5zdGFuY2VvZiB0KX1mdW5jdGlvbiBPZShyLGUpe2NvbnN0e2lkOnQsdHlwZTpufT1yLG89QXJyYXkuaXNBcnJheShlKT9lOltlXTtwb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOm4scmVzdWx0OmV9LG8uZmlsdGVyKGk9PkdvKGkpKSl9Sygid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIGpyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1mdW5jdGlvbiBaZShyLGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5zcGxpY2UoMCxlLmxlbmd0aCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpZm9yKGNvbnN0IHQgaW4gZSlkZWxldGUgZVt0XTtmb3IoY29uc3QgdCBpbiByKUFycmF5LmlzQXJyYXkoclt0XSk/KGVbdF09W10sWmUoclt0XSxlW3RdKSk6dHlwZW9mIHJbdF09PSJvYmplY3QiPyhlW3RdPXt9LFplKHJbdF0sZVt0XSkpOmVbdF09clt0XX1jb25zdCBlZT1uZXcgV2Vha01hcCxkZT1uZXcgV2Vha01hcCxKPW5ldyBXZWFrTWFwLGV0PVN5bWJvbCgiYW55UHJvZHVjZXIiKSxZcj1Qcm9taXNlLnJlc29sdmUoKSx0dD1TeW1ib2woImxpc3RlbmVyQWRkZWQiKSxydD1TeW1ib2woImxpc3RlbmVyUmVtb3ZlZCIpO2xldCBudD0hMSxWdD0hMTtmdW5jdGlvbiB3ZShyKXtpZih0eXBlb2YgciE9InN0cmluZyImJnR5cGVvZiByIT0ic3ltYm9sIiYmdHlwZW9mIHIhPSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoImBldmVudE5hbWVgIG11c3QgYmUgYSBzdHJpbmcsIHN5bWJvbCwgb3IgbnVtYmVyIil9ZnVuY3Rpb24gb3Qocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gQWUocixlKXtjb25zdCB0PWRlLmdldChyKTtpZighIXQuaGFzKGUpKXJldHVybiB0LmdldChlKX1mdW5jdGlvbiBVZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCJ8fHR5cGVvZiBlPT0ibnVtYmVyIj9lOmV0LG49Si5nZXQocik7aWYoISFuLmhhcyh0KSlyZXR1cm4gbi5nZXQodCl9ZnVuY3Rpb24gJG8ocixlLHQpe2NvbnN0IG49Si5nZXQocik7aWYobi5oYXMoZSkpZm9yKGNvbnN0IG8gb2Ygbi5nZXQoZSkpby5lbnF1ZXVlKHQpO2lmKG4uaGFzKGV0KSl7Y29uc3Qgbz1Qcm9taXNlLmFsbChbZSx0XSk7Zm9yKGNvbnN0IGkgb2Ygbi5nZXQoZXQpKWkuZW5xdWV1ZShvKX19ZnVuY3Rpb24gWHIocixlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07bGV0IHQ9ITEsbj0oKT0+e30sbz1bXTtjb25zdCBpPXtlbnF1ZXVlKHMpe28ucHVzaChzKSxuKCl9LGZpbmlzaCgpe3Q9ITAsbigpfX07Zm9yKGNvbnN0IHMgb2YgZSl7bGV0IGE9VWUocixzKTthfHwoYT1uZXcgU2V0LEouZ2V0KHIpLnNldChzLGEpKSxhLmFkZChpKX1yZXR1cm57YXN5bmMgbmV4dCgpe3JldHVybiBvP28ubGVuZ3RoPT09MD90PyhvPXZvaWQgMCx0aGlzLm5leHQoKSk6KGF3YWl0IG5ldyBQcm9taXNlKHM9PntuPXN9KSx0aGlzLm5leHQoKSk6e2RvbmU6ITEsdmFsdWU6YXdhaXQgby5zaGlmdCgpfTp7ZG9uZTohMH19LGFzeW5jIHJldHVybihzKXtvPXZvaWQgMDtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCB1PVVlKHIsYSk7dSYmKHUuZGVsZXRlKGkpLHUuc2l6ZT09PTAmJkouZ2V0KHIpLmRlbGV0ZShhKSl9cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgc306e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiBRcihyKXtpZihyPT09dm9pZCAwKXJldHVybiBxcjtpZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHIpaWYoIXFyLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHJ9Y29uc3QgSWU9cj0+cj09PXR0fHxyPT09cnQ7ZnVuY3Rpb24gaXQocixlLHQpe2lmKEllKGUpKXRyeXtudD0hMCxyLmVtaXQoZSx0KX1maW5hbGx5e250PSExfX1jbGFzcyBTZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1Rcih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIG8oKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgU2V9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDpvfSk7Y29uc3QgaT1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTppKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXt2YXIgZSx0O2lmKHR5cGVvZigoZT1nbG9iYWxUaGlzLnByb2Nlc3MpPT1udWxsP3ZvaWQgMDplLmVudikhPSJvYmplY3QiKXJldHVybiBWdDtjb25zdHtlbnY6bn09KHQ9Z2xvYmFsVGhpcy5wcm9jZXNzKSE9bnVsbD90OntlbnY6e319O3JldHVybiBuLkRFQlVHPT09ImVtaXR0ZXJ5Inx8bi5ERUJVRz09PSIqInx8VnR9c3RhdGljIHNldCBpc0RlYnVnRW5hYmxlZChlKXtWdD1lfWNvbnN0cnVjdG9yKGU9e30pe3ZhciB0O2VlLnNldCh0aGlzLG5ldyBTZXQpLGRlLnNldCh0aGlzLG5ldyBNYXApLEouc2V0KHRoaXMsbmV3IE1hcCksSi5nZXQodGhpcykuc2V0KGV0LG5ldyBTZXQpLHRoaXMuZGVidWc9KHQ9ZS5kZWJ1ZykhPW51bGw/dDp7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KG4sbyxpLHMpPT57dHJ5e3M9SlNPTi5zdHJpbmdpZnkocyl9Y2F0Y2h7cz1gT2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzIGZhaWxlZCB0byBzdHJpbmdpZnk6ICR7T2JqZWN0LmtleXMocykuam9pbigiLCIpfWB9KHR5cGVvZiBpPT0ic3ltYm9sInx8dHlwZW9mIGk9PSJudW1iZXIiKSYmKGk9aS50b1N0cmluZygpKTtjb25zdCBhPW5ldyBEYXRlLHU9YCR7YS5nZXRIb3VycygpfToke2EuZ2V0TWludXRlcygpfToke2EuZ2V0U2Vjb25kcygpfS4ke2EuZ2V0TWlsbGlzZWNvbmRzKCl9YDtjb25zb2xlLmxvZyhgWyR7dX1dW2VtaXR0ZXJ5OiR7bn1dWyR7b31dIEV2ZW50IE5hbWU6ICR7aX0KCWRhdGE6ICR7c31gKX0pfWxvZ0lmRGVidWdFbmFibGVkKGUsdCxuKXsoU2UuaXNEZWJ1Z0VuYWJsZWR8fHRoaXMuZGVidWcuZW5hYmxlZCkmJnRoaXMuZGVidWcubG9nZ2VyKGUsdGhpcy5kZWJ1Zy5uYW1lLHQsbil9b24oZSx0KXtvdCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSl7d2Uobik7bGV0IG89QWUodGhpcyxuKTtvfHwobz1uZXcgU2V0LGRlLmdldCh0aGlzKS5zZXQobixvKSksby5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksSWUobil8fGl0KHRoaXMsdHQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1yZXR1cm4gdGhpcy5vZmYuYmluZCh0aGlzLGUsdCl9b2ZmKGUsdCl7b3QodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpe3dlKG4pO2NvbnN0IG89QWUodGhpcyxuKTtvJiYoby5kZWxldGUodCksby5zaXplPT09MCYmZGUuZ2V0KHRoaXMpLmRlbGV0ZShuKSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmUiLG4sdm9pZCAwKSxJZShuKXx8aXQodGhpcyxydCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pfX1vbmNlKGUpe2xldCB0O2NvbnN0IG49bmV3IFByb21pc2Uobz0+e3Q9dGhpcy5vbihlLGk9Pnt0KCksbyhpKX0pfSk7cmV0dXJuIG4ub2ZmPXQsbn1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpd2UodCk7cmV0dXJuIFhyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe3ZhciBuO2lmKHdlKGUpLEllKGUpJiYhbnQpdGhyb3cgbmV3IFR5cGVFcnJvcigiYGV2ZW50TmFtZWAgY2Fubm90IGJlIG1ldGEgZXZlbnQgYGxpc3RlbmVyQWRkZWRgIG9yIGBsaXN0ZW5lclJlbW92ZWRgIik7dGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdCIsZSx0KSwkbyh0aGlzLGUsdCk7Y29uc3Qgbz0obj1BZSh0aGlzLGUpKSE9bnVsbD9uOm5ldyBTZXQsaT1lZS5nZXQodGhpcykscz1bLi4ub10sYT1JZShlKT9bXTpbLi4uaV07YXdhaXQgWXIsYXdhaXQgUHJvbWlzZS5hbGwoWy4uLnMubWFwKGFzeW5jIHU9PntpZihvLmhhcyh1KSlyZXR1cm4gdSh0KX0pLC4uLmEubWFwKGFzeW5jIHU9PntpZihpLmhhcyh1KSlyZXR1cm4gdShlLHQpfSldKX1hc3luYyBlbWl0U2VyaWFsKGUsdCl7dmFyIG47aWYod2UoZSksSWUoZSkmJiFudCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgZXZlbnROYW1lYCBjYW5ub3QgYmUgbWV0YSBldmVudCBgbGlzdGVuZXJBZGRlZGAgb3IgYGxpc3RlbmVyUmVtb3ZlZGAiKTt0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG89KG49QWUodGhpcyxlKSkhPW51bGw/bjpuZXcgU2V0LGk9ZWUuZ2V0KHRoaXMpLHM9Wy4uLm9dLGE9Wy4uLmldO2F3YWl0IFlyO2Zvcihjb25zdCB1IG9mIHMpby5oYXModSkmJmF3YWl0IHUodCk7Zm9yKGNvbnN0IHUgb2YgYSlpLmhhcyh1KSYmYXdhaXQgdShlLHQpfW9uQW55KGUpe3JldHVybiBvdChlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLGVlLmdldCh0aGlzKS5hZGQoZSksaXQodGhpcyx0dCx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBYcih0aGlzKX1vZmZBbnkoZSl7b3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLGl0KHRoaXMscnQse2xpc3RlbmVyOmV9KSxlZS5nZXQodGhpcykuZGVsZXRlKGUpfWNsZWFyTGlzdGVuZXJzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgdCBvZiBlKWlmKHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImNsZWFyIix0LHZvaWQgMCksdHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09InN5bWJvbCJ8fHR5cGVvZiB0PT0ibnVtYmVyIil7Y29uc3Qgbj1BZSh0aGlzLHQpO24mJm4uY2xlYXIoKTtjb25zdCBvPVVlKHRoaXMsdCk7aWYobyl7Zm9yKGNvbnN0IGkgb2YgbylpLmZpbmlzaCgpO28uY2xlYXIoKX19ZWxzZXtlZS5nZXQodGhpcykuY2xlYXIoKTtmb3IoY29uc3RbbixvXW9mIGRlLmdldCh0aGlzKS5lbnRyaWVzKCkpby5jbGVhcigpLGRlLmdldCh0aGlzKS5kZWxldGUobik7Zm9yKGNvbnN0W24sb11vZiBKLmdldCh0aGlzKS5lbnRyaWVzKCkpe2Zvcihjb25zdCBpIG9mIG8paS5maW5pc2goKTtvLmNsZWFyKCksSi5nZXQodGhpcykuZGVsZXRlKG4pfX19bGlzdGVuZXJDb3VudChlKXt2YXIgdCxuLG8saSxzLGE7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB1PTA7Zm9yKGNvbnN0IGYgb2YgZSl7aWYodHlwZW9mIGY9PSJzdHJpbmciKXt1Kz1lZS5nZXQodGhpcykuc2l6ZSsoKG49KHQ9QWUodGhpcyxmKSk9PW51bGw/dm9pZCAwOnQuc2l6ZSkhPW51bGw/bjowKSsoKGk9KG89VWUodGhpcyxmKSk9PW51bGw/dm9pZCAwOm8uc2l6ZSkhPW51bGw/aTowKSsoKGE9KHM9VWUodGhpcykpPT1udWxsP3ZvaWQgMDpzLnNpemUpIT1udWxsP2E6MCk7Y29udGludWV9dHlwZW9mIGY8InUiJiZ3ZShmKSx1Kz1lZS5nZXQodGhpcykuc2l6ZTtmb3IoY29uc3QgZCBvZiBkZS5nZXQodGhpcykudmFsdWVzKCkpdSs9ZC5zaXplO2Zvcihjb25zdCBkIG9mIEouZ2V0KHRoaXMpLnZhbHVlcygpKXUrPWQuc2l6ZX1yZXR1cm4gdX1iaW5kTWV0aG9kcyhlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBhbiBvYmplY3QiKTt0PVFyKHQpO2Zvcihjb25zdCBuIG9mIHQpe2lmKGVbbl0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke259XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITEsdmFsdWU6dGhpc1tuXS5iaW5kKHRoaXMpfSl9fX1jb25zdCBxcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTZS5wcm90b3R5cGUpLmZpbHRlcihyPT5yIT09ImNvbnN0cnVjdG9yIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNlLCJsaXN0ZW5lckFkZGVkIix7dmFsdWU6dHQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU2UsImxpc3RlbmVyUmVtb3ZlZCIse3ZhbHVlOnJ0LHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk7ZnVuY3Rpb24gV28ocil7cmV0dXJuIHIub25BbnkmJnIuZW1pdH1hc3luYyBmdW5jdGlvbiBWbyhyLGUpe2NvbnN0e2Z1bmN0aW9uTmFtZTp0LGFyZ3M6bn09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2lmKCF0KXRocm93Im1pc3NpbmcgZnVuY3Rpb24gbmFtZSB0byBjYWxsIjtpZighZS5pbnN0YW5jZVt0XSl0aHJvd2B1bmRlZmluZWQgZnVuY3Rpb24gWyR7dH1dIGluIGNsYXNzICR7ZS5pbnN0YW5jZS5jb25zdHJ1Y3Rvci53b3JrZXJJZH1gO09lKHIsYXdhaXQgZS5pbnN0YW5jZVt0XSguLi5uIT1udWxsP246W10pKX1jb25zdCBLcj1LKCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIEhvKHIsZSl7ZS53b3JrZXJJZD1yLGpyKCkmJihLcltlLndvcmtlcklkXT1lKX1mdW5jdGlvbiBqbyhyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdCxuXT1yLmFyZ3Msbz1Lclt0XTtpZihvKWUuaW5zdGFuY2U9bmV3IG8oci5hcmdzLnNsaWNlKDEpKTtlbHNlIHRocm93YHVua25vd24gd29ya2VyIGNsYXNzICR7dH1gO1plKG4sWCksV28oZS5pbnN0YW5jZSkmJmUuaW5zdGFuY2Uub25BbnkoKGkscyk9PntPZSh7dHlwZTpXLkVWRU5UfSx7bmFtZTppLGRhdGE6c30pfSksT2Uocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gWW8ocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksT2UocixuKX1mdW5jdGlvbiBYbyhyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjtaZShyLmFyZ3NbMF0sWCksT2Uocix7fSl9ZnVuY3Rpb24gUW8oKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBXLklOSVQ6am8odCxyKTticmVhaztjYXNlIFcuRk9SV0FSRDpWbyh0LHIpO2JyZWFrO2Nhc2UgVy5URVJNSU5BVEU6WW8odCxyKTticmVhaztjYXNlIFcuR0xPQkFMU19TWU5DOlhvKHQpO2JyZWFrfX19anIoKSYmUW8oKTtjbGFzcyBae31aLnVwZGF0ZXM9e3RyYW5zZm9ybWVyX25ldzoiTmV3IHRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lcl9udWxsOiJOdWxsIHRyYW5zZm9ybWVyIn0sWi5lcnJvcnM9e3RyYW5zZm9ybWVyX25vbmU6Ik5vIHRyYW5zZm9ybWVycyBwcm92aWRlZCIsdHJhbnNmb3JtZXJfc3RhcnQ6IkNhbm5vdCBzdGFydCB0cmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJfdHJhbnNmb3JtOiJDYW5ub3QgdHJhbnNmb3JtIGZyYW1lIix0cmFuc2Zvcm1lcl9mbHVzaDoiQ2Fubm90IGZsdXNoIHRyYW5zZm9ybWVyIixyZWFkYWJsZV9udWxsOiJSZWFkYWJsZSBpcyBudWxsIix3cml0YWJsZV9udWxsOiJXcml0YWJsZSBpcyBudWxsIn07ZnVuY3Rpb24gcW8ocil7cmV0dXJuIHImJnIuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsImRlZmF1bHQiKT9yLmRlZmF1bHQ6cn1jb25zdCB0ZT1uZXcgV2Vha01hcCxzdD1uZXcgV2Vha01hcCxOZT1uZXcgV2Vha01hcCxIdD1TeW1ib2woImFueVByb2R1Y2VyIiksSnI9UHJvbWlzZS5yZXNvbHZlKCksYXQ9U3ltYm9sKCJsaXN0ZW5lckFkZGVkIiksdXQ9U3ltYm9sKCJsaXN0ZW5lclJlbW92ZWQiKTtsZXQganQ9ITE7ZnVuY3Rpb24gUmUocil7aWYodHlwZW9mIHIhPSJzdHJpbmciJiZ0eXBlb2YgciE9InN5bWJvbCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXZlbnROYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2wiKX1mdW5jdGlvbiBjdChyKXtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBGZShyLGUpe2NvbnN0IHQ9c3QuZ2V0KHIpO3JldHVybiB0LmhhcyhlKXx8dC5zZXQoZSxuZXcgU2V0KSx0LmdldChlKX1mdW5jdGlvbiBMZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCI/ZTpIdCxuPU5lLmdldChyKTtyZXR1cm4gbi5oYXModCl8fG4uc2V0KHQsbmV3IFNldCksbi5nZXQodCl9ZnVuY3Rpb24gS28ocixlLHQpe2NvbnN0IG49TmUuZ2V0KHIpO2lmKG4uaGFzKGUpKWZvcihjb25zdCBvIG9mIG4uZ2V0KGUpKW8uZW5xdWV1ZSh0KTtpZihuLmhhcyhIdCkpe2NvbnN0IG89UHJvbWlzZS5hbGwoW2UsdF0pO2Zvcihjb25zdCBpIG9mIG4uZ2V0KEh0KSlpLmVucXVldWUobyl9fWZ1bmN0aW9uIFpyKHIsZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PSExLG49KCk9Pnt9LG89W107Y29uc3QgaT17ZW5xdWV1ZShzKXtvLnB1c2gocyksbigpfSxmaW5pc2goKXt0PSEwLG4oKX19O2Zvcihjb25zdCBzIG9mIGUpTGUocixzKS5hZGQoaSk7cmV0dXJue2FzeW5jIG5leHQoKXtyZXR1cm4gbz9vLmxlbmd0aD09PTA/dD8obz12b2lkIDAsdGhpcy5uZXh0KCkpOihhd2FpdCBuZXcgUHJvbWlzZShzPT57bj1zfSksdGhpcy5uZXh0KCkpOntkb25lOiExLHZhbHVlOmF3YWl0IG8uc2hpZnQoKX06e2RvbmU6ITB9fSxhc3luYyByZXR1cm4ocyl7bz12b2lkIDA7Zm9yKGNvbnN0IGEgb2YgZSlMZShyLGEpLmRlbGV0ZShpKTtyZXR1cm4gbigpLGFyZ3VtZW50cy5sZW5ndGg+MD97ZG9uZTohMCx2YWx1ZTphd2FpdCBzfTp7ZG9uZTohMH19LFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fWZ1bmN0aW9uIGVuKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIHRuO2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIik7Zm9yKGNvbnN0IGUgb2YgcilpZighdG4uaW5jbHVkZXMoZSkpdGhyb3cgdHlwZW9mIGUhPSJzdHJpbmciP25ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgZWxlbWVudCBtdXN0IGJlIGEgc3RyaW5nIik6bmV3IEVycm9yKGAke2V9IGlzIG5vdCBFbWl0dGVyeSBtZXRob2RgKTtyZXR1cm4gcn1jb25zdCBZdD1yPT5yPT09YXR8fHI9PT11dDtjbGFzcyBoZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1lbih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIG8oKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgaGV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDpvfSk7Y29uc3QgaT1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTppKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXtpZih0eXBlb2YgcHJvY2VzcyE9Im9iamVjdCIpcmV0dXJuIGp0O2NvbnN0e2VudjplfT1wcm9jZXNzfHx7ZW52Ont9fTtyZXR1cm4gZS5ERUJVRz09PSJlbWl0dGVyeSJ8fGUuREVCVUc9PT0iKiJ8fGp0fXN0YXRpYyBzZXQgaXNEZWJ1Z0VuYWJsZWQoZSl7anQ9ZX1jb25zdHJ1Y3RvcihlPXt9KXt0ZS5zZXQodGhpcyxuZXcgU2V0KSxzdC5zZXQodGhpcyxuZXcgTWFwKSxOZS5zZXQodGhpcyxuZXcgTWFwKSx0aGlzLmRlYnVnPWUuZGVidWd8fHt9LHRoaXMuZGVidWcuZW5hYmxlZD09PXZvaWQgMCYmKHRoaXMuZGVidWcuZW5hYmxlZD0hMSksdGhpcy5kZWJ1Zy5sb2dnZXJ8fCh0aGlzLmRlYnVnLmxvZ2dlcj0odCxuLG8saSk9Pnt0cnl7aT1KU09OLnN0cmluZ2lmeShpKX1jYXRjaHtpPWBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXMgZmFpbGVkIHRvIHN0cmluZ2lmeTogJHtPYmplY3Qua2V5cyhpKS5qb2luKCIsIil9YH10eXBlb2Ygbz09InN5bWJvbCImJihvPW8udG9TdHJpbmcoKSk7Y29uc3Qgcz1uZXcgRGF0ZSxhPWAke3MuZ2V0SG91cnMoKX06JHtzLmdldE1pbnV0ZXMoKX06JHtzLmdldFNlY29uZHMoKX0uJHtzLmdldE1pbGxpc2Vjb25kcygpfWA7Y29uc29sZS5sb2coYFske2F9XVtlbWl0dGVyeToke3R9XVske259XSBFdmVudCBOYW1lOiAke299CglkYXRhOiAke2l9YCl9KX1sb2dJZkRlYnVnRW5hYmxlZChlLHQsbil7KGhlLmlzRGVidWdFbmFibGVkfHx0aGlzLmRlYnVnLmVuYWJsZWQpJiZ0aGlzLmRlYnVnLmxvZ2dlcihlLHRoaXMuZGVidWcubmFtZSx0LG4pfW9uKGUsdCl7Y3QodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpUmUobiksRmUodGhpcyxuKS5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksWXQobil8fHRoaXMuZW1pdChhdCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pO3JldHVybiB0aGlzLm9mZi5iaW5kKHRoaXMsZSx0KX1vZmYoZSx0KXtjdCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSlSZShuKSxGZSh0aGlzLG4pLmRlbGV0ZSh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZSIsbix2b2lkIDApLFl0KG4pfHx0aGlzLmVtaXQodXQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1vbmNlKGUpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57Y29uc3Qgbj10aGlzLm9uKGUsbz0+e24oKSx0KG8pfSl9KX1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpUmUodCk7cmV0dXJuIFpyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe1JlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXQiLGUsdCksS28odGhpcyxlLHQpO2NvbnN0IG49RmUodGhpcyxlKSxvPXRlLmdldCh0aGlzKSxpPVsuLi5uXSxzPVl0KGUpP1tdOlsuLi5vXTthd2FpdCBKcixhd2FpdCBQcm9taXNlLmFsbChbLi4uaS5tYXAoYXN5bmMgYT0+e2lmKG4uaGFzKGEpKXJldHVybiBhKHQpfSksLi4ucy5tYXAoYXN5bmMgYT0+e2lmKG8uaGFzKGEpKXJldHVybiBhKGUsdCl9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSx0KXtSZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG49RmUodGhpcyxlKSxvPXRlLmdldCh0aGlzKSxpPVsuLi5uXSxzPVsuLi5vXTthd2FpdCBKcjtmb3IoY29uc3QgYSBvZiBpKW4uaGFzKGEpJiZhd2FpdCBhKHQpO2Zvcihjb25zdCBhIG9mIHMpby5oYXMoYSkmJmF3YWl0IGEoZSx0KX1vbkFueShlKXtyZXR1cm4gY3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSx0ZS5nZXQodGhpcykuYWRkKGUpLHRoaXMuZW1pdChhdCx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBacih0aGlzKX1vZmZBbnkoZSl7Y3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRoaXMuZW1pdCh1dCx7bGlzdGVuZXI6ZX0pLHRlLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHQsdm9pZCAwKSx0eXBlb2YgdD09InN0cmluZyJ8fHR5cGVvZiB0PT0ic3ltYm9sIil7RmUodGhpcyx0KS5jbGVhcigpO2NvbnN0IG49TGUodGhpcyx0KTtmb3IoY29uc3QgbyBvZiBuKW8uZmluaXNoKCk7bi5jbGVhcigpfWVsc2V7dGUuZ2V0KHRoaXMpLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2Ygc3QuZ2V0KHRoaXMpLnZhbHVlcygpKW4uY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBOZS5nZXQodGhpcykudmFsdWVzKCkpe2Zvcihjb25zdCBvIG9mIG4pby5maW5pc2goKTtuLmNsZWFyKCl9fX1saXN0ZW5lckNvdW50KGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0wO2Zvcihjb25zdCBuIG9mIGUpe2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7dCs9dGUuZ2V0KHRoaXMpLnNpemUrRmUodGhpcyxuKS5zaXplK0xlKHRoaXMsbikuc2l6ZStMZSh0aGlzKS5zaXplO2NvbnRpbnVlfXR5cGVvZiBuPCJ1IiYmUmUobiksdCs9dGUuZ2V0KHRoaXMpLnNpemU7Zm9yKGNvbnN0IG8gb2Ygc3QuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPW8uc2l6ZTtmb3IoY29uc3QgbyBvZiBOZS5nZXQodGhpcykudmFsdWVzKCkpdCs9by5zaXplfXJldHVybiB0fWJpbmRNZXRob2RzKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9ZW4odCk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fWNvbnN0IHRuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlLnByb3RvdHlwZSkuZmlsdGVyKHI9PnIhPT0iY29uc3RydWN0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGUsImxpc3RlbmVyQWRkZWQiLHt2YWx1ZTphdCx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoZSwibGlzdGVuZXJSZW1vdmVkIix7dmFsdWU6dXQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTt2YXIgSm89aGU7Y29uc3QgWHQ9cW8oSm8pO2Z1bmN0aW9uIFpvKHIpe3JldHVybiB0eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsJiYibWVzc2FnZSJpbiByJiZ0eXBlb2Ygci5tZXNzYWdlPT0ic3RyaW5nIn1mdW5jdGlvbiBlaShyKXtpZihabyhyKSlyZXR1cm4gcjt0cnl7cmV0dXJuIG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeShyKSl9Y2F0Y2h7cmV0dXJuIG5ldyBFcnJvcihTdHJpbmcocikpfX1mdW5jdGlvbiBRdChyKXtyZXR1cm4gZWkocikubWVzc2FnZX12YXIgdGk9T2JqZWN0LmRlZmluZVByb3BlcnR5LHJpPShyLGUsdCk9PmUgaW4gcj90aShyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpyW2VdPXQsbmk9KHIsZSx0KT0+KHJpKHIsdHlwZW9mIGUhPSJzeW1ib2wiP2UrIiI6ZSx0KSx0KTtjb25zdCBvaT0iaGxnLnRva2JveC5jb20vcHJvZC9sb2dnaW5nL3ZjcF93ZWJydGMiLGlpPSJodHRwczovLyIsc2k9MWU0O2xldCBmdDtjb25zdCBhaT1uZXcgVWludDhBcnJheSgxNik7ZnVuY3Rpb24gdWkoKXtpZighZnQmJihmdD10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byksIWZ0KSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIGZ0KGFpKX1jb25zdCBEPVtdO2ZvcihsZXQgcj0wO3I8MjU2OysrcilELnB1c2goKHIrMjU2KS50b1N0cmluZygxNikuc2xpY2UoMSkpO2Z1bmN0aW9uIGNpKHIsZT0wKXtyZXR1cm4oRFtyW2UrMF1dK0RbcltlKzFdXStEW3JbZSsyXV0rRFtyW2UrM11dKyItIitEW3JbZSs0XV0rRFtyW2UrNV1dKyItIitEW3JbZSs2XV0rRFtyW2UrN11dKyItIitEW3JbZSs4XV0rRFtyW2UrOV1dKyItIitEW3JbZSsxMF1dK0RbcltlKzExXV0rRFtyW2UrMTJdXStEW3JbZSsxM11dK0RbcltlKzE0XV0rRFtyW2UrMTVdXSkudG9Mb3dlckNhc2UoKX1jb25zdCBmaT10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLnJhbmRvbVVVSUQmJmNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKSxybj17cmFuZG9tVVVJRDpmaX07ZnVuY3Rpb24gbGkocixlLHQpe2lmKHJuLnJhbmRvbVVVSUQmJiFlJiYhcilyZXR1cm4gcm4ucmFuZG9tVVVJRCgpO3I9cnx8e307Y29uc3Qgbj1yLnJhbmRvbXx8KHIucm5nfHx1aSkoKTtpZihuWzZdPW5bNl0mMTV8NjQsbls4XT1uWzhdJjYzfDEyOCxlKXt0PXR8fDA7Zm9yKGxldCBvPTA7bzwxNjsrK28pZVt0K29dPW5bb107cmV0dXJuIGV9cmV0dXJuIGNpKG4pfWZ1bmN0aW9uIHF0KHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3QgcmU9cXQoImdsb2JhbHMiLHt9KTt2YXIgbWU9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKG1lfHx7fSk7ZnVuY3Rpb24gbm4ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnIgaW5zdGFuY2VvZiBlKX1sZXQgZGk9MDtmdW5jdGlvbiBoaShyLGUsdCxuLG8pe2NvbnN0IGk9ZGkrKztyZXR1cm4gci5wb3N0TWVzc2FnZSh7aWQ6aSx0eXBlOmUsZnVuY3Rpb25OYW1lOnQsYXJnczpufSxuLmZpbHRlcihzPT5ubihzKSkpLG5ldyBQcm9taXNlKHM9PntvPT1udWxsfHxvLnNldChpLHMpfSl9ZnVuY3Rpb24gemUocixlKXtjb25zdHtpZDp0LHR5cGU6bn09cixvPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnQsdHlwZTpuLHJlc3VsdDplfSxvLmZpbHRlcihpPT5ubihpKSkpfWNvbnN0IG9uPXF0KCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gc24oKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWFzeW5jIGZ1bmN0aW9uIG1pKCl7aWYoc24oKSl6ZSh7dHlwZTptZS5HTE9CQUxTX1NZTkN9LHJlKTtlbHNle2NvbnN0IHI9W107Zm9yKGNvbnN0IGUgaW4gb24pe2NvbnN0e3dvcmtlcjp0LHJlc29sdmVyczpufT1vbltlXS53b3JrZXJDb250ZXh0O3QmJnIucHVzaChoaSh0LG1lLkdMT0JBTFNfU1lOQywiIixbcmVdLG4pKX1hd2FpdCBQcm9taXNlLmFsbChyKX19ZnVuY3Rpb24gbHQocixlKXtpZihBcnJheS5pc0FycmF5KGUpKWUuc3BsaWNlKDAsZS5sZW5ndGgpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWZvcihjb25zdCB0IGluIGUpZGVsZXRlIGVbdF07Zm9yKGNvbnN0IHQgaW4gcilBcnJheS5pc0FycmF5KHJbdF0pPyhlW3RdPVtdLGx0KHJbdF0sZVt0XSkpOnR5cGVvZiByW3RdPT0ib2JqZWN0Ij8oZVt0XT17fSxsdChyW3RdLGVbdF0pKTplW3RdPXJbdF19YXN5bmMgZnVuY3Rpb24gcGkocixlKXtjb25zdHtmdW5jdGlvbk5hbWU6dCxhcmdzOm59PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighdCl0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2VbdF0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3R9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDt6ZShyLGF3YWl0IGUuaW5zdGFuY2VbdF0oLi4ubiE9bnVsbD9uOltdKSl9Y29uc3QgZ2k9cXQoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24geWkocixlKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgY2xhc3NOYW1lIHdoaWxlIGluaXRpYWxpemluZyB3b3JrZXIiO2NvbnN0W3Qsbl09ci5hcmdzLG89Z2lbdF07aWYobyllLmluc3RhbmNlPW5ldyBvKHIuYXJncy5zbGljZSgxKSk7ZWxzZSB0aHJvd2B1bmtub3duIHdvcmtlciBjbGFzcyAke3R9YDtsdChuLHJlKSx6ZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBiaShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSx6ZShyLG4pfWZ1bmN0aW9uIHhpKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO2x0KHIuYXJnc1swXSxyZSksemUocix7fSl9ZnVuY3Rpb24gX2koKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBtZS5JTklUOnlpKHQscik7YnJlYWs7Y2FzZSBtZS5GT1JXQVJEOnBpKHQscik7YnJlYWs7Y2FzZSBtZS5URVJNSU5BVEU6YmkodCxyKTticmVhaztjYXNlIG1lLkdMT0JBTFNfU1lOQzp4aSh0KTticmVha319fXNuKCkmJl9pKCk7ZnVuY3Rpb24gdmkocixlKXtyZXR1cm4gcmVbcl18fChyZVtyXT1lKSxbKCk9PnJlW3JdLGFzeW5jIHQ9PntyZVtyXT10LGF3YWl0IG1pKCl9XX1mdW5jdGlvbiBFaShyLGUpe3JldHVybiB2aShyLGUpfWNvbnN0W1RpLHdpXT1FaSgibWV0YWRhdGEiKTtmdW5jdGlvbiBBaShyKXt3aShyKX1mdW5jdGlvbiBLdCgpe3JldHVybiBUaSgpfWNsYXNzIEp0e2NvbnN0cnVjdG9yKGUsdCl7bmkodGhpcywidXVpZCIpLHRoaXMuY29uZmlnPWUsdGhpcy51dWlkPXQhPW51bGw/dDpsaSgpfWFzeW5jIHNlbmQoZSl7dmFyIHQsbixvO2NvbnN0e2FwcElkOmksc291cmNlVHlwZTpzfT0odD1LdCgpKSE9bnVsbD90Ont9O2lmKCFpfHwhcylyZXR1cm4ibWV0YWRhdGEgbWlzc2luZyI7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLHU9c2V0VGltZW91dCgoKT0+YS5hYm9ydCgpLHNpKTtyZXR1cm4gYXdhaXQoKG89KG49dGhpcy5jb25maWcpPT1udWxsP3ZvaWQgMDpuLmZldGNoKSE9bnVsbD9vOmZldGNoKSh0aGlzLmdldFVybCgpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6dGhpcy5nZXRIZWFkZXJzKCksYm9keTpKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkUmVwb3J0KGUpKSxzaWduYWw6YS5zaWduYWx9KSxjbGVhclRpbWVvdXQodSksInN1Y2Nlc3MifWdldFVybCgpe3ZhciBlO2xldCB0PShlPUt0KCkucHJveHlVcmwpIT1udWxsP2U6aWk7cmV0dXJuIHQrPSh0LmF0KC0xKT09PSIvIj8iIjoiLyIpK29pLHR9Z2V0SGVhZGVycygpe3JldHVybnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fWJ1aWxkUmVwb3J0KGUpe2NvbnN0IHQ9S3QoKTtyZXR1cm57Z3VpZDp0aGlzLnV1aWQsLi4uZSxhcHBsaWNhdGlvbklkOnQuYXBwSWQsdGltZXN0YW1wOkRhdGUubm93KCkscHJveHlVcmw6dC5wcm94eVVybCxzb3VyY2U6dC5zb3VyY2VUeXBlfX19Y29uc3QgZHQ9IjIuMC40IjtjbGFzcyBJaXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuY29uZmlnPWUsdGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQ9MCx0aGlzLmZyYW1lRnJvbVNvdXJjZUNvdW50PTAsdGhpcy5zdGFydEF0PTAsdGhpcy5yZXBvcnRlcj1uZXcgSnQoZSx0KX1hc3luYyBvbkZyYW1lRnJvbVNvdXJjZSgpe3RoaXMuZnJhbWVGcm9tU291cmNlQ291bnQrK31nZXQgZnBzKCl7Y29uc3R7c3RhcnRBdDplLGZyYW1lRnJvbVNvdXJjZUNvdW50OnR9PXRoaXMsbj0oRGF0ZS5ub3coKS1lKS8xZTM7cmV0dXJuIHQvbn1hc3luYyBvbkZyYW1lVHJhbnNmb3JtZWQoZT17fSx0PSExKXt0aGlzLnN0YXJ0QXQ9PT0wJiYodGhpcy5zdGFydEF0PURhdGUubm93KCkpLHRoaXMuZnJhbWVUcmFuc2Zvcm1lZENvdW50Kys7Y29uc3R7c3RhcnRBdDpuLGZyYW1lVHJhbnNmb3JtZWRDb3VudDpvLGZyYW1lRnJvbVNvdXJjZUNvdW50Oml9PXRoaXMscz1EYXRlLm5vdygpLGE9KHMtbikvMWUzLHU9by9hLGY9aS9hO3JldHVybiB0fHx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudD49dGhpcy5jb25maWcubG9nZ2luZ0ludGVydmFsRnJhbWVDb3VudD8odGhpcy5mcmFtZUZyb21Tb3VyY2VDb3VudD0wLHRoaXMuZnJhbWVUcmFuc2Zvcm1lZENvdW50PTAsdGhpcy5zdGFydEF0PXMsdGhpcy5yZXBvcnRlci5jb25maWc9dGhpcy5jb25maWcsdGhpcy5yZXBvcnRlci5zZW5kKHsuLi50aGlzLmNvbmZpZy5yZXBvcnQsdmFyaWF0aW9uOiJRb1MiLGZwczpmLHRyYW5zZm9ybWVkRnBzOnUsZnJhbWVzVHJhbnNmb3JtZWQ6bywuLi5lfSkpOiJzdWNjZXNzIn19dmFyIFp0PShyPT4oci5waXBlbGluZV9lbmRlZD0icGlwZWxpbmVfZW5kZWQiLHIucGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9zdGFydGVkPSJwaXBlbGluZV9zdGFydGVkIixyLnBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIixyLnBpcGVsaW5lX3Jlc3RhcnRlZD0icGlwZWxpbmVfcmVzdGFydGVkIixyLnBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvciIscikpKFp0fHx7fSk7Y29uc3QgU2k9NTAwLFJpPS44O2NsYXNzIEZpIGV4dGVuZHMgWHR7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMucmVwb3J0ZXJfPW5ldyBKdCx0aGlzLnJlcG9ydGVyUW9zXz1uZXcgSWkoe2xvZ2dpbmdJbnRlcnZhbEZyYW1lQ291bnQ6U2kscmVwb3J0Ont2ZXJzaW9uOmR0fX0pLHRoaXMuaW5kZXhfPXQsdGhpcy50cmFuc2Zvcm1lcl89ZSx0aGlzLnNob3VsZFN0b3BfPSExLHRoaXMuaXNGbGFzaGVkXz0hMSx0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89MCx0aGlzLnZpZGVvSGVpZ2h0Xz0wLHRoaXMudmlkZW9XaWR0aF89MCx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMSx0aGlzLnRyYW5zZm9ybWVyVHlwZV89IkN1c3RvbSIsImdldFRyYW5zZm9ybWVyVHlwZSJpbiBlJiYodGhpcy50cmFuc2Zvcm1lclR5cGVfPWUuZ2V0VHJhbnNmb3JtZXJUeXBlKCkpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkNyZWF0ZSJ9KX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lfWFzeW5jIHN0YXJ0KGUpe2lmKHRoaXMuY29udHJvbGxlcl89ZSx0aGlzLnRyYW5zZm9ybWVyXyYmdHlwZW9mIHRoaXMudHJhbnNmb3JtZXJfLnN0YXJ0PT0iZnVuY3Rpb24iKXRyeXthd2FpdCB0aGlzLnRyYW5zZm9ybWVyXy5zdGFydChlKX1jYXRjaCh0KXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpaLmVycm9ycy50cmFuc2Zvcm1lcl9zdGFydCx2YXJpYXRpb246IkVycm9yIixlcnJvcjpRdCh0KX0pO2NvbnN0IG49e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOnQsZnVuY3Rpb246InN0YXJ0In07dGhpcy5lbWl0KCJlcnJvciIsbil9fWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBpLHM7dmFyIG4sbztpZih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89PT0wJiYodGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPURhdGUubm93KCkpLGUgaW5zdGFuY2VvZiBWaWRlb0ZyYW1lJiYodGhpcy52aWRlb0hlaWdodF89KGk9ZT09bnVsbD92b2lkIDA6ZS5kaXNwbGF5SGVpZ2h0KSE9bnVsbD9pOjAsdGhpcy52aWRlb1dpZHRoXz0ocz1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlXaWR0aCkhPW51bGw/czowKSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lRnJvbVNvdXJjZSgpLHRoaXMudHJhbnNmb3JtZXJfKWlmKHRoaXMuc2hvdWxkU3RvcF8pY29uc29sZS53YXJuKCJbUGlwZWxpbmVdIGZsdXNoIGZyb20gdHJhbnNmb3JtIiksZS5jbG9zZSgpLHRoaXMuZmx1c2godCksdC50ZXJtaW5hdGUoKTtlbHNle3RyeXthd2FpdCgobz0obj10aGlzLnRyYW5zZm9ybWVyXykudHJhbnNmb3JtKT09bnVsbD92b2lkIDA6by5jYWxsKG4sZSx0KSksdGhpcy5yZXBvcnRRb3MoKX1jYXRjaChhKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpaLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0sdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6UXQoYSl9KTtjb25zdCB1PXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIix1KX1pZih0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKlJpPnRoaXMucmVwb3J0ZXJRb3NfLmZwcyl7Y29uc3QgYT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dGhpcy5yZXBvcnRlclFvc18uZnBzfX07dGhpcy5lbWl0KCJ3YXJuIixhKX19fWFzeW5jIGZsdXNoKGUpe2lmKHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2g9PSJmdW5jdGlvbiImJiF0aGlzLmlzRmxhc2hlZF8pe3RoaXMuaXNGbGFzaGVkXz0hMDt0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2goZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6Wi5lcnJvcnMudHJhbnNmb3JtZXJfZmx1c2gsdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6UXQodCl9KTtjb25zdCBuPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjp0LGZ1bmN0aW9uOiJmbHVzaCJ9O3RoaXMuZW1pdCgiZXJyb3IiLG4pfX10aGlzLnJlcG9ydFFvcyghMCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pfXN0b3AoKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTdG9wIHN0cmVhbS4iKSx0aGlzLmNvbnRyb2xsZXJfJiYodGhpcy5mbHVzaCh0aGlzLmNvbnRyb2xsZXJfKSx0aGlzLmNvbnRyb2xsZXJfLnRlcm1pbmF0ZSgpKSx0aGlzLnNob3VsZFN0b3BfPSEwfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOmR0LGFjdGlvbjoiTWVkaWFUcmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJUeXBlOnRoaXMudHJhbnNmb3JtZXJUeXBlXywuLi5lfSl9cmVwb3J0UW9zKGU9ITEpe3RoaXMucmVwb3J0ZXJRb3NfLmNvbmZpZz17Li4udGhpcy5yZXBvcnRlclFvc18uY29uZmlnfSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lVHJhbnNmb3JtZWQoe3ZlcnNpb246ZHQsYWN0aW9uOiJNZWRpYVRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lclR5cGU6dGhpcy50cmFuc2Zvcm1lclR5cGVfLHZpZGVvV2lkdGg6dGhpcy52aWRlb1dpZHRoXyx2aWRlb0hlaWdodDp0aGlzLnZpZGVvSGVpZ2h0X30sZSl9fWNsYXNzIFBpIGV4dGVuZHMgWHR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRyYW5zZm9ybWVyc189W10sdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTE7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPW5ldyBGaShlW3RdLHQpO24ub24oImVycm9yIixvPT57dGhpcy5lbWl0KCJlcnJvciIsbyl9KSxuLm9uKCJ3YXJuIixvPT57dGhpcy5lbWl0KCJ3YXJuIixvKX0pLHRoaXMudHJhbnNmb3JtZXJzXy5wdXNoKG4pfX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lO2ZvcihsZXQgdCBvZiB0aGlzLnRyYW5zZm9ybWVyc18pdC5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9YXN5bmMgc3RhcnQoZSx0KXtpZighdGhpcy50cmFuc2Zvcm1lcnNffHx0aGlzLnRyYW5zZm9ybWVyc18ubGVuZ3RoPT09MCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gTm8gdHJhbnNmb3JtZXJzLiIpO3JldHVybn10cnl7bGV0IG49ZTtmb3IobGV0IG8gb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWU9ZS5waXBlVGhyb3VnaChuZXcgVHJhbnNmb3JtU3RyZWFtKG8pKTtlLnBpcGVUbyh0KS50aGVuKGFzeW5jKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTZXR1cC4iKSxhd2FpdCB0LmFib3J0KCksYXdhaXQgbi5jYW5jZWwoKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX2VuZGVkIil9KS5jYXRjaChhc3luYyBvPT57ZS5jYW5jZWwoKS50aGVuKCgpPT57Y29uc29sZS5sb2coIltQaXBlbGluZV0gU2h1dHRpbmcgZG93biBzdHJlYW1zIGFmdGVyIGFib3J0LiIpfSkuY2F0Y2goaT0+e2NvbnNvbGUuZXJyb3IoIltQaXBlbGluZV0gRXJyb3IgZnJvbSBzdHJlYW0gdHJhbnNmb3JtOiIsaSl9KSxhd2FpdCB0LmFib3J0KG8pLGF3YWl0IG4uY2FuY2VsKG8pLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIpfSl9Y2F0Y2h7dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiKSx0aGlzLmRlc3Ryb3koKTtyZXR1cm59dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkIiksY29uc29sZS5sb2coIltQaXBlbGluZV0gUGlwZWxpbmUgc3RhcnRlZC4iKX1hc3luYyBkZXN0cm95KCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gRGVzdHJveWluZyBQaXBlbGluZS4iKTtmb3IobGV0IGUgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWUuc3RvcCgpfX1jbGFzcyBraSBleHRlbmRzIFh0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnJlcG9ydGVyXz1uZXcgSnQsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWUsdGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX10cmFuc2Zvcm0oZSx0KXtyZXR1cm4gdGhpcy5yZWFkYWJsZV89ZSx0aGlzLndyaXRhYmxlXz10LHRoaXMudHJhbnNmb3JtSW50ZXJuYWwoKX10cmFuc2Zvcm1JbnRlcm5hbCgpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhlLHQpPT57aWYoIXRoaXMudHJhbnNmb3JtZXJzX3x8dGhpcy50cmFuc2Zvcm1lcnNfLmxlbmd0aD09PTApe3RoaXMucmVwb3J0KHttZXNzYWdlOlouZXJyb3JzLnRyYW5zZm9ybWVyX25vbmUsdmFyaWF0aW9uOiJFcnJvciJ9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIE5lZWQgdG8gc2V0IHRyYW5zZm9ybWVycy4iKTtyZXR1cm59aWYoIXRoaXMucmVhZGFibGVfKXt0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJFcnJvciIsbWVzc2FnZTpaLmVycm9ycy5yZWFkYWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBSZWFkYWJsZSBpcyBudWxsLiIpO3JldHVybn1pZighdGhpcy53cml0YWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOlouZXJyb3JzLndyaXRhYmxlX251bGx9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIFdyaXRhYmxlIGlzIG51bGwuIik7cmV0dXJufWxldCBuPSExO3RoaXMucGlwZWxpbmVfJiYobj0hMCx0aGlzLnBpcGVsaW5lXy5jbGVhckxpc3RlbmVycygpLHRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKSksdGhpcy5waXBlbGluZV89bmV3IFBpKHRoaXMudHJhbnNmb3JtZXJzXyksdGhpcy5waXBlbGluZV8ub24oIndhcm4iLG89Pnt0aGlzLmVtaXQoIndhcm4iLG8pfSksdGhpcy5waXBlbGluZV8ub24oImVycm9yIixvPT57dGhpcy5lbWl0KCJlcnJvciIsbyl9KSx0aGlzLnBpcGVsaW5lXy5vbigicGlwZWxpbmVJbmZvIixvPT57biYmKG89PT0icGlwZWxpbmVfc3RhcnRlZCI/bz1adC5waXBlbGluZV9yZXN0YXJ0ZWQ6bz09PSJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiJiYobz1adC5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcikpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIixvKX0pLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfIT0tMSYmdGhpcy5waXBlbGluZV8uc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8pLHRoaXMucGlwZWxpbmVfLnN0YXJ0KHRoaXMucmVhZGFibGVfLHRoaXMud3JpdGFibGVfKS50aGVuKCgpPT57ZSgpfSkuY2F0Y2gobz0+e3Qobyl9KX0pfXNldFRyYW5zZm9ybWVycyhlKXtyZXR1cm4gdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIixtZXNzYWdlOloudXBkYXRlcy50cmFuc2Zvcm1lcl9uZXd9KSx0aGlzLnRyYW5zZm9ybWVyc189ZSx0aGlzLnJlYWRhYmxlXyYmdGhpcy53cml0YWJsZV8/dGhpcy50cmFuc2Zvcm1JbnRlcm5hbCgpOlByb21pc2UucmVzb2x2ZSgpfWRlc3Ryb3koKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZT0+e3RoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pLGUoKX0pfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOmR0LGFjdGlvbjoiTWVkaWFQcm9jZXNzb3IiLC4uLmV9KX19dmFyIERpPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxDaT0ocixlLHQpPT5lIGluIHI/RGkocixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSk6cltlXT10LEJpPShyLGUsdCk9PihDaShyLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCksdCk7Y29uc3QgTWk9ImhsZy50b2tib3guY29tL3Byb2QvbG9nZ2luZy92Y3Bfd2VicnRjIixPaT0iaHR0cHM6Ly8iLFVpPTFlNDtsZXQgaHQ7Y29uc3QgTmk9bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIExpKCl7aWYoIWh0JiYoaHQ9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pLCFodCkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBodChOaSl9Y29uc3QgQz1bXTtmb3IobGV0IHI9MDtyPDI1NjsrK3IpQy5wdXNoKChyKzI1NikudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtmdW5jdGlvbiB6aShyLGU9MCl7cmV0dXJuKENbcltlKzBdXStDW3JbZSsxXV0rQ1tyW2UrMl1dK0NbcltlKzNdXSsiLSIrQ1tyW2UrNF1dK0NbcltlKzVdXSsiLSIrQ1tyW2UrNl1dK0NbcltlKzddXSsiLSIrQ1tyW2UrOF1dK0NbcltlKzldXSsiLSIrQ1tyW2UrMTBdXStDW3JbZSsxMV1dK0NbcltlKzEyXV0rQ1tyW2UrMTNdXStDW3JbZSsxNF1dK0NbcltlKzE1XV0pLnRvTG93ZXJDYXNlKCl9Y29uc3QgR2k9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5yYW5kb21VVUlEJiZjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byksYW49e3JhbmRvbVVVSUQ6R2l9O2Z1bmN0aW9uICRpKHIsZSx0KXtpZihhbi5yYW5kb21VVUlEJiYhZSYmIXIpcmV0dXJuIGFuLnJhbmRvbVVVSUQoKTtyPXJ8fHt9O2NvbnN0IG49ci5yYW5kb218fChyLnJuZ3x8TGkpKCk7aWYobls2XT1uWzZdJjE1fDY0LG5bOF09bls4XSY2M3wxMjgsZSl7dD10fHwwO2ZvcihsZXQgbz0wO288MTY7KytvKWVbdCtvXT1uW29dO3JldHVybiBlfXJldHVybiB6aShuKX1mdW5jdGlvbiBlcihyLGUpe2dsb2JhbFRoaXMudm9uYWdlfHwoZ2xvYmFsVGhpcy52b25hZ2U9e30pLGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXJ8fChnbG9iYWxUaGlzLnZvbmFnZS53b3JrZXJpemVyPXt9KTtsZXQgdD1nbG9iYWxUaGlzLnZvbmFnZS53b3JrZXJpemVyO3JldHVybiB0W3JdfHwodFtyXT1lKSx0W3JdfWNvbnN0IG5lPWVyKCJnbG9iYWxzIix7fSk7dmFyIHBlPShyPT4oci5JTklUPSJJTklUIixyLkZPUldBUkQ9IkZPUldBUkQiLHIuVEVSTUlOQVRFPSJURVJNSU5BVEUiLHIuR0xPQkFMU19TWU5DPSJHTE9CQUxTX1NZTkMiLHIpKShwZXx8e30pO2Z1bmN0aW9uIHVuKHIpe3JldHVybltJbWFnZUJpdG1hcCxSZWFkYWJsZVN0cmVhbSxXcml0YWJsZVN0cmVhbV0uc29tZShlPT5yIGluc3RhbmNlb2YgZSl9bGV0IFdpPTA7ZnVuY3Rpb24gVmkocixlLHQsbixvKXtjb25zdCBpPVdpKys7cmV0dXJuIHIucG9zdE1lc3NhZ2Uoe2lkOmksdHlwZTplLGZ1bmN0aW9uTmFtZTp0LGFyZ3M6bn0sbi5maWx0ZXIocz0+dW4ocykpKSxuZXcgUHJvbWlzZShzPT57bz09bnVsbHx8by5zZXQoaSxzKX0pfWZ1bmN0aW9uIEdlKHIsZSl7Y29uc3R7aWQ6dCx0eXBlOm59PXIsbz1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHR5cGU6bixyZXN1bHQ6ZX0sby5maWx0ZXIoaT0+dW4oaSkpKX1jb25zdCBjbj1lcigid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIGZuKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1hc3luYyBmdW5jdGlvbiBIaSgpe2lmKGZuKCkpR2Uoe3R5cGU6cGUuR0xPQkFMU19TWU5DfSxuZSk7ZWxzZXtjb25zdCByPVtdO2Zvcihjb25zdCBlIGluIGNuKXtjb25zdHt3b3JrZXI6dCxyZXNvbHZlcnM6bn09Y25bZV0ud29ya2VyQ29udGV4dDt0JiZyLnB1c2goVmkodCxwZS5HTE9CQUxTX1NZTkMsIiIsW25lXSxuKSl9YXdhaXQgUHJvbWlzZS5hbGwocil9fWZ1bmN0aW9uIG10KHIsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgdCBpbiBlKWRlbGV0ZSBlW3RdO2Zvcihjb25zdCB0IGluIHIpQXJyYXkuaXNBcnJheShyW3RdKT8oZVt0XT1bXSxtdChyW3RdLGVbdF0pKTp0eXBlb2Ygclt0XT09Im9iamVjdCI/KGVbdF09e30sbXQoclt0XSxlW3RdKSk6ZVt0XT1yW3RdfWFzeW5jIGZ1bmN0aW9uIGppKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7R2Uocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWNvbnN0IFlpPWVyKCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIFhpKHIsZSl7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFt0LG5dPXIuYXJncyxvPVlpW3RdO2lmKG8pZS5pbnN0YW5jZT1uZXcgbyhyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7bXQobixuZSksR2Uocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gUWkocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksR2UocixuKX1mdW5jdGlvbiBxaShyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjttdChyLmFyZ3NbMF0sbmUpLEdlKHIse30pfWZ1bmN0aW9uIEtpKCl7Y29uc3Qgcj17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHQ9ZS5kYXRhO3N3aXRjaCh0LnR5cGUpe2Nhc2UgcGUuSU5JVDpYaSh0LHIpO2JyZWFrO2Nhc2UgcGUuRk9SV0FSRDpqaSh0LHIpO2JyZWFrO2Nhc2UgcGUuVEVSTUlOQVRFOlFpKHQscik7YnJlYWs7Y2FzZSBwZS5HTE9CQUxTX1NZTkM6cWkodCk7YnJlYWt9fX1mbigpJiZLaSgpO2Z1bmN0aW9uIEppKHIsZSl7cmV0dXJuIG5lW3JdfHwobmVbcl09ZSksWygpPT5uZVtyXSxhc3luYyB0PT57bmVbcl09dCxhd2FpdCBIaSgpfV19ZnVuY3Rpb24gWmkocixlKXtyZXR1cm4gSmkocixlKX1jb25zdFtlcyxXbF09WmkoIm1ldGFkYXRhIik7ZnVuY3Rpb24gdHIoKXtyZXR1cm4gZXMoKX1jbGFzcyB0c3tjb25zdHJ1Y3RvcihlKXtCaSh0aGlzLCJ1dWlkIiwkaSgpKSx0aGlzLmNvbmZpZz1lfWFzeW5jIHNlbmQoZSl7dmFyIHQsbixvO2NvbnN0e2FwcElkOmksc291cmNlVHlwZTpzfT0odD10cigpKSE9bnVsbD90Ont9O2lmKCFpfHwhcylyZXR1cm4ibWV0YWRhdGEgbWlzc2luZyI7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLHU9c2V0VGltZW91dCgoKT0+YS5hYm9ydCgpLFVpKTtyZXR1cm4gYXdhaXQoKG89KG49dGhpcy5jb25maWcpPT1udWxsP3ZvaWQgMDpuLmZldGNoKSE9bnVsbD9vOmZldGNoKSh0aGlzLmdldFVybCgpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6dGhpcy5nZXRIZWFkZXJzKCksYm9keTpKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkUmVwb3J0KGUpKSxzaWduYWw6YS5zaWduYWx9KSxjbGVhclRpbWVvdXQodSksInN1Y2Nlc3MifWdldFVybCgpe3ZhciBlO2xldCB0PShlPXRyKCkucHJveHlVcmwpIT1udWxsP2U6T2k7cmV0dXJuIHQrPSh0LmF0KC0xKT09PSIvIj8iIjoiLyIpK01pLHR9Z2V0SGVhZGVycygpe3JldHVybnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fWJ1aWxkUmVwb3J0KGUpe2NvbnN0IHQ9dHIoKTtyZXR1cm57Z3VpZDp0aGlzLnV1aWQsLi4uZSxhcHBsaWNhdGlvbklkOnQuYXBwSWQsdGltZXN0YW1wOkRhdGUubm93KCkscHJveHlVcmw6dC5wcm94eVVybCxzb3VyY2U6dC5zb3VyY2VUeXBlfX19Y29uc3QgcnM9IjUuMi4wLWFscGhhLjAiO3ZhciBwdD0ocj0+KHIuTG93PSJMb3ciLHIuSGlnaD0iSGlnaCIscikpKHB0fHx7fSkscnI9KHI9PihyLkZBU1Q9IkZBU1QiLHIuUFJFQ0lTRT0iUFJFQ0lTRSIscikpKHJyfHx7fSksZ3Q9KHI9PihyLkNBTlZBUz0iQ0FOVkFTIixyLldFQkdMPSJXRUJHTCIscikpKGd0fHx7fSksbnM9ZnVuY3Rpb24oKXt2YXIgcj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0P2RvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjOnZvaWQgMDtyZXR1cm4gZnVuY3Rpb24oZSl7ZT1lfHx7fTt2YXIgdD10eXBlb2YgZTwidSI/ZTp7fSxuLG87dC5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihjLG0pe249YyxvPW19KTt2YXIgaT17fSxzO2ZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109dFtzXSk7dmFyIGE9Ii4vdGhpcy5wcm9ncmFtIix1PWZ1bmN0aW9uKGMsbSl7dGhyb3cgbX0sZj0hMCxkPSIiO2Z1bmN0aW9uIHAoYyl7cmV0dXJuIHQubG9jYXRlRmlsZT90LmxvY2F0ZUZpbGUoYyxkKTpkK2N9dmFyIGc7dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKGQ9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLHImJihkPXIpLGQuaW5kZXhPZigiYmxvYjoiKSE9PTA/ZD1kLnN1YnN0cigwLGQucmVwbGFjZSgvWz8jXS4qLywiIikubGFzdEluZGV4T2YoIi8iKSsxKTpkPSIiO3ZhciBiPXQucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksaD10LnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtmb3IocyBpbiBpKWkuaGFzT3duUHJvcGVydHkocykmJih0W3NdPWlbc10pO2k9bnVsbCx0LmFyZ3VtZW50cyYmdC5hcmd1bWVudHMsdC50aGlzUHJvZ3JhbSYmKGE9dC50aGlzUHJvZ3JhbSksdC5xdWl0JiYodT10LnF1aXQpO3ZhciB4O3Qud2FzbUJpbmFyeSYmKHg9dC53YXNtQmluYXJ5KTt2YXIgRT10Lm5vRXhpdFJ1bnRpbWV8fCEwO3R5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJmxlKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIHYsUj0hMSxQPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIHooYyxtLHkpe2Zvcih2YXIgVD1tK3ksaz1tO2Nba10mJiEoaz49VCk7KSsraztpZihrLW0+MTYmJmMuc3ViYXJyYXkmJlApcmV0dXJuIFAuZGVjb2RlKGMuc3ViYXJyYXkobSxrKSk7Zm9yKHZhciBCPSIiO208azspe3ZhciB3PWNbbSsrXTtpZighKHcmMTI4KSl7Qis9U3RyaW5nLmZyb21DaGFyQ29kZSh3KTtjb250aW51ZX12YXIgTz1jW20rK10mNjM7aWYoKHcmMjI0KT09MTkyKXtCKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCh3JjMxKTw8NnxPKTtjb250aW51ZX12YXIgcT1jW20rK10mNjM7aWYoKHcmMjQwKT09MjI0P3c9KHcmMTUpPDwxMnxPPDw2fHE6dz0odyY3KTw8MTh8Tzw8MTJ8cTw8NnxjW20rK10mNjMsdzw2NTUzNilCKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHcpO2Vsc2V7dmFyIHpvPXctNjU1MzY7Qis9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Nnx6bz4+MTAsNTYzMjB8em8mMTAyMyl9fXJldHVybiBCfWZ1bmN0aW9uIEwoYyxtKXtyZXR1cm4gYz96KGZlLGMsbSk6IiJ9ZnVuY3Rpb24gVihjLG0seSl7Zm9yKHZhciBUPTA7VDxjLmxlbmd0aDsrK1QpRWVbbSsrPj4wXT1jLmNoYXJDb2RlQXQoVCk7eXx8KEVlW20+PjBdPTApfWZ1bmN0aW9uIEcoYyxtKXtyZXR1cm4gYyVtPjAmJihjKz1tLWMlbSksY312YXIgcWUsRWUsZmUsJDtmdW5jdGlvbiBDbyhjKXtxZT1jLHQuSEVBUDg9RWU9bmV3IEludDhBcnJheShjKSx0LkhFQVAxNj1uZXcgSW50MTZBcnJheShjKSx0LkhFQVAzMj0kPW5ldyBJbnQzMkFycmF5KGMpLHQuSEVBUFU4PWZlPW5ldyBVaW50OEFycmF5KGMpLHQuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoYyksdC5IRUFQVTMyPW5ldyBVaW50MzJBcnJheShjKSx0LkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShjKSx0LkhFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheShjKX10LklOSVRJQUxfTUVNT1JZO3ZhciAkcixCbz1bXSxNbz1bXSxPbz1bXSxvbD0wO2Z1bmN0aW9uIGlsKCl7cmV0dXJuIEV8fG9sPjB9ZnVuY3Rpb24gc2woKXtpZih0LnByZVJ1bilmb3IodHlwZW9mIHQucHJlUnVuPT0iZnVuY3Rpb24iJiYodC5wcmVSdW49W3QucHJlUnVuXSk7dC5wcmVSdW4ubGVuZ3RoOyljbCh0LnByZVJ1bi5zaGlmdCgpKTtXcihCbyl9ZnVuY3Rpb24gYWwoKXtXcihNbyl9ZnVuY3Rpb24gdWwoKXtpZih0LnBvc3RSdW4pZm9yKHR5cGVvZiB0LnBvc3RSdW49PSJmdW5jdGlvbiImJih0LnBvc3RSdW49W3QucG9zdFJ1bl0pO3QucG9zdFJ1bi5sZW5ndGg7KWxsKHQucG9zdFJ1bi5zaGlmdCgpKTtXcihPbyl9ZnVuY3Rpb24gY2woYyl7Qm8udW5zaGlmdChjKX1mdW5jdGlvbiBmbChjKXtNby51bnNoaWZ0KGMpfWZ1bmN0aW9uIGxsKGMpe09vLnVuc2hpZnQoYyl9dmFyIFRlPTAsS2U9bnVsbDtmdW5jdGlvbiBkbChjKXtUZSsrLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFRlKX1mdW5jdGlvbiBobChjKXtpZihUZS0tLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFRlKSxUZT09MCYmS2Upe3ZhciBtPUtlO0tlPW51bGwsbSgpfX10LnByZWxvYWRlZEltYWdlcz17fSx0LnByZWxvYWRlZEF1ZGlvcz17fTtmdW5jdGlvbiBsZShjKXt0Lm9uQWJvcnQmJnQub25BYm9ydChjKSxjPSJBYm9ydGVkKCIrYysiKSIsaChjKSxSPSEwLGMrPSIuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjt2YXIgbT1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGMpO3Rocm93IG8obSksbX12YXIgbWw9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiO2Z1bmN0aW9uIFVvKGMpe3JldHVybiBjLnN0YXJ0c1dpdGgobWwpfXZhciBZO1k9InRmbGl0ZS1zaW1kLndhc20iLFVvKFkpfHwoWT1wKFkpKTtmdW5jdGlvbiBObyhjKXt0cnl7aWYoYz09WSYmeClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeCk7aWYoIWcpdGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKG0pe2xlKG0pfX1mdW5jdGlvbiBwbCgpe3JldHVybiF4JiZmJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goWSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oYyl7aWYoIWMub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIitZKyInIjtyZXR1cm4gYy5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gTm8oWSl9KTpQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIE5vKFkpfSl9ZnVuY3Rpb24gZ2woKXt2YXIgYz17YTpVbH07ZnVuY3Rpb24gbSh3LE8pe3ZhciBxPXcuZXhwb3J0czt0LmFzbT1xLHY9dC5hc20ucSxDbyh2LmJ1ZmZlciksJHI9dC5hc20uRSxmbCh0LmFzbS5yKSxobCgpfWRsKCk7ZnVuY3Rpb24geSh3KXttKHcuaW5zdGFuY2UpfWZ1bmN0aW9uIFQodyl7cmV0dXJuIHBsKCkudGhlbihmdW5jdGlvbihPKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoTyxjKX0pLnRoZW4oZnVuY3Rpb24oTyl7cmV0dXJuIE99KS50aGVuKHcsZnVuY3Rpb24oTyl7aCgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitPKSxsZShPKX0pfWZ1bmN0aW9uIGsoKXtyZXR1cm4heCYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhVW8oWSkmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChZLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbih3KXt2YXIgTz1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyh3LGMpO3JldHVybiBPLnRoZW4oeSxmdW5jdGlvbihxKXtyZXR1cm4gaCgid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIrcSksaCgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxUKHkpfSl9KTpUKHkpfWlmKHQuaW5zdGFudGlhdGVXYXNtKXRyeXt2YXIgQj10Lmluc3RhbnRpYXRlV2FzbShjLG0pO3JldHVybiBCfWNhdGNoKHcpe3JldHVybiBoKCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAiK3cpLCExfXJldHVybiBrKCkuY2F0Y2gobykse319ZnVuY3Rpb24gV3IoYyl7Zm9yKDtjLmxlbmd0aD4wOyl7dmFyIG09Yy5zaGlmdCgpO2lmKHR5cGVvZiBtPT0iZnVuY3Rpb24iKXttKHQpO2NvbnRpbnVlfXZhciB5PW0uZnVuYzt0eXBlb2YgeT09Im51bWJlciI/bS5hcmc9PT12b2lkIDA/JHIuZ2V0KHkpKCk6JHIuZ2V0KHkpKG0uYXJnKTp5KG0uYXJnPT09dm9pZCAwP251bGw6bS5hcmcpfX1mdW5jdGlvbiB5bChjLG0seSxUKXtsZSgiQXNzZXJ0aW9uIGZhaWxlZDogIitMKGMpKyIsIGF0OiAiK1ttP0wobSk6InVua25vd24gZmlsZW5hbWUiLHksVD9MKFQpOiJ1bmtub3duIGZ1bmN0aW9uIl0pfWZ1bmN0aW9uIGJsKGMsbSl7bGUoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIHhsKGMsbSl7bGUoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIF9sKCl7bGUoIiIpfXZhciB6dDt6dD1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07dmFyIHZsPSEwO2Z1bmN0aW9uIEVsKGMpe3JldHVybiAkW0xvKCk+PjJdPWMsY31mdW5jdGlvbiBUbChjLG0pe3ZhciB5O2lmKGM9PT0wKXk9RGF0ZS5ub3coKTtlbHNlIGlmKChjPT09MXx8Yz09PTQpJiZ2bCl5PXp0KCk7ZWxzZSByZXR1cm4gRWwoMjgpLC0xO3JldHVybiAkW20+PjJdPXkvMWUzfDAsJFttKzQ+PjJdPXklMWUzKjFlMyoxZTN8MCwwfWZ1bmN0aW9uIHdsKCl7cmV0dXJuIDIxNDc0ODM2NDh9ZnVuY3Rpb24gQWwoYyxtLHkpe2ZlLmNvcHlXaXRoaW4oYyxtLG0reSl9ZnVuY3Rpb24gSWwoYyl7dHJ5e3JldHVybiB2Lmdyb3coYy1xZS5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLENvKHYuYnVmZmVyKSwxfWNhdGNoe319ZnVuY3Rpb24gU2woYyl7dmFyIG09ZmUubGVuZ3RoO2M9Yz4+PjA7dmFyIHk9MjE0NzQ4MzY0ODtpZihjPnkpcmV0dXJuITE7Zm9yKHZhciBUPTE7VDw9NDtUKj0yKXt2YXIgaz1tKigxKy4yL1QpO2s9TWF0aC5taW4oayxjKzEwMDY2MzI5Nik7dmFyIEI9TWF0aC5taW4oeSxHKE1hdGgubWF4KGMsayksNjU1MzYpKSx3PUlsKEIpO2lmKHcpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUmwoYyl7Zm9yKHZhciBtPXp0KCk7enQoKS1tPGM7KTt9dmFyIFZyPXt9O2Z1bmN0aW9uIEZsKCl7cmV0dXJuIGF8fCIuL3RoaXMucHJvZ3JhbSJ9ZnVuY3Rpb24gSmUoKXtpZighSmUuc3RyaW5ncyl7dmFyIGM9KHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsbT17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOmMsXzpGbCgpfTtmb3IodmFyIHkgaW4gVnIpVnJbeV09PT12b2lkIDA/ZGVsZXRlIG1beV06bVt5XT1Wclt5XTt2YXIgVD1bXTtmb3IodmFyIHkgaW4gbSlULnB1c2goeSsiPSIrbVt5XSk7SmUuc3RyaW5ncz1UfXJldHVybiBKZS5zdHJpbmdzfXZhciBHdD17bWFwcGluZ3M6e30sYnVmZmVyczpbbnVsbCxbXSxbXV0scHJpbnRDaGFyOmZ1bmN0aW9uKGMsbSl7dmFyIHk9R3QuYnVmZmVyc1tjXTttPT09MHx8bT09PTEwPygoYz09PTE/YjpoKSh6KHksMCkpLHkubGVuZ3RoPTApOnkucHVzaChtKX0sdmFyYXJnczp2b2lkIDAsZ2V0OmZ1bmN0aW9uKCl7R3QudmFyYXJncys9NDt2YXIgYz0kW0d0LnZhcmFyZ3MtND4+Ml07cmV0dXJuIGN9LGdldFN0cjpmdW5jdGlvbihjKXt2YXIgbT1MKGMpO3JldHVybiBtfSxnZXQ2NDpmdW5jdGlvbihjLG0pe3JldHVybiBjfX07ZnVuY3Rpb24gUGwoYyxtKXt2YXIgeT0wO3JldHVybiBKZSgpLmZvckVhY2goZnVuY3Rpb24oVCxrKXt2YXIgQj1tK3k7JFtjK2sqND4+Ml09QixWKFQsQikseSs9VC5sZW5ndGgrMX0pLDB9ZnVuY3Rpb24ga2woYyxtKXt2YXIgeT1KZSgpOyRbYz4+Ml09eS5sZW5ndGg7dmFyIFQ9MDtyZXR1cm4geS5mb3JFYWNoKGZ1bmN0aW9uKGspe1QrPWsubGVuZ3RoKzF9KSwkW20+PjJdPVQsMH1mdW5jdGlvbiBEbChjKXtMbChjKX1mdW5jdGlvbiBDbChjKXtyZXR1cm4gMH1mdW5jdGlvbiBCbChjLG0seSxULGspe31mdW5jdGlvbiBNbChjLG0seSxUKXtmb3IodmFyIGs9MCxCPTA7Qjx5O0IrKyl7Zm9yKHZhciB3PSRbbStCKjg+PjJdLE89JFttKyhCKjgrNCk+PjJdLHE9MDtxPE87cSsrKUd0LnByaW50Q2hhcihjLGZlW3crcV0pO2srPU99cmV0dXJuICRbVD4+Ml09aywwfWZ1bmN0aW9uIE9sKCl7aWYodHlwZW9mIGNyeXB0bz09Im9iamVjdCImJnR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iKXt2YXIgYz1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhjKSxjWzBdfX1lbHNlIHJldHVybiBmdW5jdGlvbigpe2xlKCJyYW5kb21EZXZpY2UiKX19ZnVuY3Rpb24gJHQoYyxtKXskdC5yYW5kb21EZXZpY2V8fCgkdC5yYW5kb21EZXZpY2U9T2woKSk7Zm9yKHZhciB5PTA7eTxtO3krKylFZVtjK3k+PjBdPSR0LnJhbmRvbURldmljZSgpO3JldHVybiAwfXZhciBVbD17YTp5bCxlOmJsLGQ6eGwsYjpfbCxuOlRsLGg6d2wsbDpBbCxtOlNsLHA6UmwsZjpQbCxnOmtsLGo6RGwsaTpDbCxrOkJsLGM6TWwsbzokdH07Z2woKSx0Ll9fX3dhc21fY2FsbF9jdG9ycz1mdW5jdGlvbigpe3JldHVybih0Ll9fX3dhc21fY2FsbF9jdG9ycz10LmFzbS5yKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0PXQuYXNtLnMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQ9dC5hc20udCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dEhlaWdodD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dEhlaWdodD10LmFzbS51KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRXaWR0aD10LmFzbS52KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0Q2hhbm5lbENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0Q2hhbm5lbENvdW50PXQuYXNtLncpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dE1lbW9yeU9mZnNldD10LmFzbS54KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dEhlaWdodD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRIZWlnaHQ9dC5hc20ueSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRXaWR0aD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRXaWR0aD10LmFzbS56KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dENoYW5uZWxDb3VudD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRDaGFubmVsQ291bnQ9dC5hc20uQSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9sb2FkTW9kZWw9ZnVuY3Rpb24oKXtyZXR1cm4odC5fbG9hZE1vZGVsPXQuYXNtLkIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fcnVuSW5mZXJlbmNlPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX3J1bkluZmVyZW5jZT10LmFzbS5DKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2lzR1BVRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybih0Ll9pc0dQVUVuYWJsZWQ9dC5hc20uRCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgTG89dC5fX19lcnJub19sb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybihMbz10Ll9fX2Vycm5vX2xvY2F0aW9uPXQuYXNtLkYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sV3Q7ZnVuY3Rpb24gTmwoYyl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitjKyIpIix0aGlzLnN0YXR1cz1jfUtlPWZ1bmN0aW9uIGMoKXtXdHx8SHIoKSxXdHx8KEtlPWMpfTtmdW5jdGlvbiBIcihjKXtpZihUZT4wfHwoc2woKSxUZT4wKSlyZXR1cm47ZnVuY3Rpb24gbSgpe1d0fHwoV3Q9ITAsdC5jYWxsZWRSdW49ITAsIVImJihhbCgpLG4odCksdC5vblJ1bnRpbWVJbml0aWFsaXplZCYmdC5vblJ1bnRpbWVJbml0aWFsaXplZCgpLHVsKCkpKX10LnNldFN0YXR1cz8odC5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Quc2V0U3RhdHVzKCIiKX0sMSksbSgpfSwxKSk6bSgpfXQucnVuPUhyO2Z1bmN0aW9uIExsKGMsbSl7emwoYyl9ZnVuY3Rpb24gemwoYyl7aWwoKXx8KHQub25FeGl0JiZ0Lm9uRXhpdChjKSxSPSEwKSx1KGMsbmV3IE5sKGMpKX1pZih0LnByZUluaXQpZm9yKHR5cGVvZiB0LnByZUluaXQ9PSJmdW5jdGlvbiImJih0LnByZUluaXQ9W3QucHJlSW5pdF0pO3QucHJlSW5pdC5sZW5ndGg+MDspdC5wcmVJbml0LnBvcCgpKCk7cmV0dXJuIEhyKCksZS5yZWFkeX19KCk7Y2xhc3Mgb3N7Y29uc3RydWN0b3IoKXtsKHRoaXMsInNlbGVjdGVkVEZMaXRlIik7bCh0aGlzLCJpc1NJTURTdXBwb3J0ZWQiLCExKTtsKHRoaXMsImlzVGhyZWFkc1N1cHBvcnRlZCIsITEpO2wodGhpcywiaW5wdXRXaWR0aCIsMCk7bCh0aGlzLCJpbnB1dEhlaWdodCIsMCk7bCh0aGlzLCJpbnB1dENoYW5uZWxDb3VudCIsMCk7bCh0aGlzLCJpbnB1dE1lbW9yeU9mZnNldCIsMCk7bCh0aGlzLCJvdXRwdXRXaWR0aCIsMCk7bCh0aGlzLCJvdXRwdXRIZWlnaHQiLDApO2wodGhpcywib3V0cHV0Q2hhbm5lbENvdW50IiwwKTtsKHRoaXMsIm91dHB1dE1lbW9yeU9mZnNldCIsMCl9fWNvbnN0IGlzPSJodHRwczovL2Qzb3Bxam1xenhmMDU3LmNsb3VkZnJvbnQubmV0L3ZvbmFnZS10ZW5zb3JmbG93LXdhc20vdGZsaXRlLXNpbWQtd2FzbS8xLjEuMy8iLHNzPSJodHRwczovL2Qzb3Bxam1xenhmMDU3LmNsb3VkZnJvbnQubmV0L21sL3NlbGZpZV9zZWdtZW50YXRpb24vNC4wLjAvIjthc3luYyBmdW5jdGlvbiBhcyhyPWlzLGU9c3Mpe2xldCB0PW5ldyBvczt2YXIgbj1uZXcgUHJvbWlzZShmdW5jdGlvbihvLGkpe2FzeW5jIGZ1bmN0aW9uIHMoKXtyZXR1cm4gbnMoe2xvY2F0ZUZpbGU6ZnVuY3Rpb24oZil7cmV0dXJuIHIrZn19KX1hc3luYyBmdW5jdGlvbiBhKHUpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhmLGQpPT57Y29uc3QgcD11O2lmKHR5cGVvZiBwPiJ1IilyZXR1cm4gZCgiVEZMaXRlIGJhY2tlbmQgdW5hdmFpbGFibGU6IHdhc21TaW1kIik7Y29uc3QgZz0ic2VsZmllX3NlZ21lbnRhdGlvbl9sYW5kc2NhcGUiO2NvbnNvbGUubG9nKCJMb2FkaW5nIHRmbGl0ZSBtb2RlbDoiLGcpO2xldCBiPWUrYCR7Z30udGZsaXRlYDtjb25zb2xlLmxvZygiVEZMaXRlIG1vZGVsVXJsOiAiK2IpO3RyeXtjb25zdCB4PWF3YWl0KGF3YWl0IGZldGNoKGIpKS5hcnJheUJ1ZmZlcigpO2NvbnNvbGUubG9nKCJNb2RlbCBidWZmZXIgc2l6ZToiLHguYnl0ZUxlbmd0aCk7Y29uc3QgRT1wLl9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldCgpO2NvbnNvbGUubG9nKCJNb2RlbCBidWZmZXIgbWVtb3J5IG9mZnNldDoiLEUpLGNvbnNvbGUubG9nKCJMb2FkaW5nIG1vZGVsIGJ1ZmZlci4uLiIpLHAuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh4KSxFKTtjb25zdCB2PXAuX2xvYWRNb2RlbCh4LmJ5dGVMZW5ndGgpO2lmKGNvbnNvbGUubG9nKCJMb2FkIG1vZGVsIHJlc3VsdDoiLHYpLHYhPT0wKXtkKCJDYW5ub3QgbG9hZCBtb2RlbCIpO3JldHVybn10LmlucHV0V2lkdGg9cC5fZ2V0SW5wdXRXaWR0aCgpLHQuaW5wdXRIZWlnaHQ9cC5fZ2V0SW5wdXRIZWlnaHQoKSx0LmlucHV0Q2hhbm5lbENvdW50PXAuX2dldElucHV0Q2hhbm5lbENvdW50KCksdC5pbnB1dE1lbW9yeU9mZnNldD1wLl9nZXRJbnB1dE1lbW9yeU9mZnNldCgpLGNvbnNvbGUubG9nKCJJbnB1dCBtZW1vcnkgb2Zmc2V0OiIsdC5pbnB1dE1lbW9yeU9mZnNldCksY29uc29sZS5sb2coIklucHV0IGhlaWdodDoiLHQuaW5wdXRIZWlnaHQpLGNvbnNvbGUubG9nKCJJbnB1dCB3aWR0aDoiLHQuaW5wdXRXaWR0aCksY29uc29sZS5sb2coIklucHV0IGNoYW5uZWxzOiIsdC5pbnB1dENoYW5uZWxDb3VudCksdC5vdXRwdXRNZW1vcnlPZmZzZXQ9cC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0KCksdC5vdXRwdXRXaWR0aD1wLl9nZXRPdXRwdXRXaWR0aCgpLHQub3V0cHV0SGVpZ2h0PXAuX2dldE91dHB1dEhlaWdodCgpLHQub3V0cHV0Q2hhbm5lbENvdW50PXAuX2dldE91dHB1dENoYW5uZWxDb3VudCgpLGNvbnNvbGUubG9nKCJPdXRwdXQgbWVtb3J5IG9mZnNldDoiLHQub3V0cHV0TWVtb3J5T2Zmc2V0KSxjb25zb2xlLmxvZygiT3V0cHV0IGhlaWdodDoiLHQub3V0cHV0SGVpZ2h0KSxjb25zb2xlLmxvZygiT3V0cHV0IHdpZHRoOiIsdC5vdXRwdXRXaWR0aCksY29uc29sZS5sb2coIk91dHB1dCBjaGFubmVsczoiLHQub3V0cHV0Q2hhbm5lbENvdW50KSx0LnNlbGVjdGVkVEZMaXRlPXB9Y2F0Y2goaCl7ZChoKTtyZXR1cm59ZigpfSl9cygpLnRoZW4odT0+e2lmKHU9PT1udWxsKXRocm93IGNvbnNvbGUuZXJyb3IoImxvYWRURkxpdGUgbnVsbCIpLCJsb2FkVEZMaXRlIG51bGwiO2EodSkudGhlbihmPT57byh0KX0pLmNhdGNoKGY9Pntjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlTW9kZWwgZXJyb3IiKSxpKCJsb2FkVEZMaXRlTW9kZWwgZXJyb3IiKX0pfSkuY2F0Y2godT0+e2NvbnNvbGUuZXJyb3IoImxvYWRURkxpdGUgZXJyb3I6Iix1KSxpKCJsb2FkVEZMaXRlIGVycm9yOiIrdSl9KX0pO3JldHVybiBufWNsYXNzIHVze2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiLG5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSk7bCh0aGlzLCJjb250ZXh0Iix0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIse3dpbGxSZWFkRnJlcXVlbnRseTohMH0pKTtsKHRoaXMsInBpeGVsQ291bnQiLDApO2wodGhpcywiaW5wdXRPZmZzZXQiLDApO2wodGhpcywib3V0cHV0T2Zmc2V0IiwwKTtsKHRoaXMsImluZm9zIik7bCh0aGlzLCJtYXNrIil9YXN5bmMgaW5pdChlLHQpe2F3YWl0IHRoaXMuaW5pdFdhc20oZSx0KSx0aGlzLmluZm9zJiYodGhpcy5jYW52YXMud2lkdGg9dGhpcy5pbmZvcy5pbnB1dFdpZHRoLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmluZm9zLmlucHV0SGVpZ2h0LHRoaXMucGl4ZWxDb3VudD10aGlzLmluZm9zLmlucHV0V2lkdGgqdGhpcy5pbmZvcy5pbnB1dEhlaWdodCx0aGlzLm1hc2s9bmV3IEltYWdlRGF0YSh0aGlzLmluZm9zLmlucHV0V2lkdGgsdGhpcy5pbmZvcy5pbnB1dEhlaWdodCksdGhpcy5pbnB1dE9mZnNldD10aGlzLmluZm9zLmlucHV0TWVtb3J5T2Zmc2V0LzQsdGhpcy5vdXRwdXRPZmZzZXQ9dGhpcy5pbmZvcy5vdXRwdXRNZW1vcnlPZmZzZXQvNCl9YXN5bmMgaW5pdFdhc20oZSx0KXt0aGlzLmluZm9zPWF3YWl0IGFzKGUsdCl9Z2V0T3V0cHV0RGltZW5zaW9ucygpe3ZhciBlLHQsbixvO3JldHVybnt3aWR0aDoodD0oZT10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6ZS5vdXRwdXRXaWR0aCkhPW51bGw/dDowLGhlaWdodDoobz0obj10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6bi5vdXRwdXRIZWlnaHQpIT1udWxsP286MH19YXN5bmMgcHJvY2VzcyhlKXtpZighdGhpcy5tYXNrfHwhdGhpcy5pbmZvcylyZXR1cm47Y29uc3QgdD10aGlzLmluZm9zLmlucHV0V2lkdGgsbj10aGlzLmluZm9zLmlucHV0SGVpZ2h0O3RoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsZS53aWR0aCxlLmhlaWdodCwwLDAsdCxuKTtjb25zdCBvPXRoaXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwwLHQsbiksaT10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLkhFQVBGMzI7Zm9yKGxldCBzPTA7czx0aGlzLnBpeGVsQ291bnQ7cysrKXtjb25zdCBhPXRoaXMuaW5wdXRPZmZzZXQrcyozO2lbYV09by5kYXRhW3MqNF0vMjU1LGlbYSsxXT1vLmRhdGFbcyo0KzFdLzI1NSxpW2ErMl09by5kYXRhW3MqNCsyXS8yNTV9dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5fcnVuSW5mZXJlbmNlKCk7Zm9yKGxldCBzPTA7czx0aGlzLnBpeGVsQ291bnQ7cysrKXtjb25zdCBhPXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuSEVBUEYzMlt0aGlzLm91dHB1dE9mZnNldCtzXTt0aGlzLm1hc2suZGF0YVtzKjRdPXRoaXMubWFzay5kYXRhW3MqNCszXT0yNTUqYX1yZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodGhpcy5tYXNrKX1pc0dwdVN1cHBvcnRlZCgpe3ZhciBlLHQsbjtyZXR1cm4obj0odD0oZT10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6ZS5zZWxlY3RlZFRGTGl0ZSk9PW51bGw/dm9pZCAwOnQuX2lzR1BVRW5hYmxlZCgpKSE9bnVsbD9uOiExfX1mdW5jdGlvbiBjcygpe3JldHVybiBuZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkuZ2V0Q29udGV4dCgid2ViZ2wyIix7ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMH0pP3tzdXBwb3J0ZWQ6ITB9OntzdXBwb3J0ZWQ6ITEsbWVzc2FnZToiWW91ciBoYXJkd2FyZSBkb2VzIG5vdCBwZXJmb3JtIGdvb2QgZW5vdWdoIHRvIHJ1biB0aGUgbGlicmFyeSBlZmZpY2llbnRseSJ9fWNsYXNzIG5ye2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiKTtsKHRoaXMsImNvbnRleHQiKTtjb25zdCBlPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0PWUuZ2V0Q29udGV4dCgiMmQiKTtpZighdCl0aHJvdyJGYWlsIHRvIHJldHJpZXZlIHdlYmdsMiBjb250ZXh0Ijt0aGlzLmNhbnZhcz1lLHRoaXMuY29udGV4dD10fXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe31lbmFibGVQb3N0UHJvY2Vzc2luZygpe31kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKXt9YXN5bmMgcHJvZmlsZVdlYmdsKGUpe3JldHVybltdfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiB0aGlzLmNhbnZhc31yZXNpemVDYW52YXMoZSl7Y29uc3R7d2lkdGg6dCxoZWlnaHQ6bn09ZTt0aGlzLmNhbnZhcy53aWR0aD10LHRoaXMuY2FudmFzLmhlaWdodD1ufXJlbmRlclNpbGhvdWV0dGUoZSx0LG49Im5vbmUiKXtjb25zdHt3aWR0aDpvLGhlaWdodDppfT1lO3RoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0LDAsMCxvLGkpLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIsdGhpcy5jb250ZXh0LmZpbHRlcj1uLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsbyxpLDAsMCx0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCl9fWNsYXNzIGZzIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnJhZGl1cz1lfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiBzdXBlci5yZXNpemVDYW52YXMoZSksdGhpcy5yZW5kZXJTaWxob3VldHRlKGUsdCksdGhpcy5jb250ZXh0LnNhdmUoKSx0aGlzLmNvbnRleHQuZmlsdGVyPWBibHVyKCR7dGhpcy5yYWRpdXN9cHgpYCx0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIix0aGlzLmNvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCksc3VwZXIucmVuZGVyKGUsdCl9fWNsYXNzIGxzIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnJhZGl1cz1lfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiBzdXBlci5yZXNpemVDYW52YXMoZSksdGhpcy5yZW5kZXJTaWxob3VldHRlKGUsdCxgYmx1cigke3RoaXMucmFkaXVzfXB4KWApLHRoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmZpbHRlcj0ibm9uZSIsdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpLHN1cGVyLnJlbmRlcihlLHQpfX1jbGFzcyBkcyBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtsKHRoaXMsImJhY2tncm91bmRJbWFnZSIpfXNldEJhY2tncm91bmRJbWFnZSh0KXt0aGlzLmJhY2tncm91bmRJbWFnZT10fWFzeW5jIHJlbmRlcih0LG4pe3JldHVybiBzdXBlci5yZXNpemVDYW52YXModCksdGhpcy5yZW5kZXJTaWxob3VldHRlKHQsbiksdGhpcy5iYWNrZ3JvdW5kSW1hZ2UmJih0aGlzLmNvbnRleHQuc2F2ZSgpLHRoaXMuY29udGV4dC5maWx0ZXI9Im5vbmUiLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy5iYWNrZ3JvdW5kSW1hZ2UsMCwwLHRoaXMuYmFja2dyb3VuZEltYWdlLndpZHRoLHRoaXMuYmFja2dyb3VuZEltYWdlLmhlaWdodCwwLDAsdC53aWR0aCx0LmhlaWdodCksdGhpcy5jb250ZXh0LnJlc3RvcmUoKSksc3VwZXIucmVuZGVyKHQsbil9fS8qIEBsaWNlbnNlIHR3Z2wuanMgNS41LjEgQ29weXJpZ2h0IChjKSAyMDE1LCBHcmVnZyBUYXZhcmVzIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCkF2YWlsYWJsZSB2aWEgdGhlIE1JVCBsaWNlbnNlLgpzZWU6IGh0dHA6Ly9naXRodWIuY29tL2dyZWdnbWFuL3R3Z2wuanMgZm9yIGRldGFpbHMgKi9jb25zdCBvcj01MTIwLCRlPTUxMjEsaXI9NTEyMixzcj01MTIzLGFyPTUxMjQsdXI9NTEyNSxjcj01MTI2LGhzPTMyODE5LG1zPTMyODIwLHBzPTMzNjM1LGdzPTUxMzEseXM9MzM2NDAsYnM9MzU4OTkseHM9MzU5MDIsX3M9MzYyNjksdnM9MzQwNDIsbG49e307e2NvbnN0IHI9bG47cltvcl09SW50OEFycmF5LHJbJGVdPVVpbnQ4QXJyYXkscltpcl09SW50MTZBcnJheSxyW3NyXT1VaW50MTZBcnJheSxyW2FyXT1JbnQzMkFycmF5LHJbdXJdPVVpbnQzMkFycmF5LHJbY3JdPUZsb2F0MzJBcnJheSxyW2hzXT1VaW50MTZBcnJheSxyW21zXT1VaW50MTZBcnJheSxyW3BzXT1VaW50MTZBcnJheSxyW2dzXT1VaW50MTZBcnJheSxyW3lzXT1VaW50MzJBcnJheSxyW2JzXT1VaW50MzJBcnJheSxyW3hzXT1VaW50MzJBcnJheSxyW19zXT1VaW50MzJBcnJheSxyW3ZzXT1VaW50MzJBcnJheX1mdW5jdGlvbiBmcihyKXtpZihyIGluc3RhbmNlb2YgSW50OEFycmF5KXJldHVybiBvcjtpZihyIGluc3RhbmNlb2YgVWludDhBcnJheXx8ciBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KXJldHVybiAkZTtpZihyIGluc3RhbmNlb2YgSW50MTZBcnJheSlyZXR1cm4gaXI7aWYociBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KXJldHVybiBzcjtpZihyIGluc3RhbmNlb2YgSW50MzJBcnJheSlyZXR1cm4gYXI7aWYociBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KXJldHVybiB1cjtpZihyIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXJldHVybiBjcjt0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHR5cGVkIGFycmF5IHR5cGUiKX1mdW5jdGlvbiBkbihyKXtpZihyPT09SW50OEFycmF5KXJldHVybiBvcjtpZihyPT09VWludDhBcnJheXx8cj09PVVpbnQ4Q2xhbXBlZEFycmF5KXJldHVybiAkZTtpZihyPT09SW50MTZBcnJheSlyZXR1cm4gaXI7aWYocj09PVVpbnQxNkFycmF5KXJldHVybiBzcjtpZihyPT09SW50MzJBcnJheSlyZXR1cm4gYXI7aWYocj09PVVpbnQzMkFycmF5KXJldHVybiB1cjtpZihyPT09RmxvYXQzMkFycmF5KXJldHVybiBjcjt0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHR5cGVkIGFycmF5IHR5cGUiKX1mdW5jdGlvbiBobihyKXtjb25zdCBlPWxuW3JdO2lmKCFlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBnbCB0eXBlIik7cmV0dXJuIGV9Y29uc3QgeXQ9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1Ij9mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5idWZmZXImJihlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxlLmJ1ZmZlciBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiZlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfTtmdW5jdGlvbiBtbiguLi5yKXtjb25zb2xlLmVycm9yKC4uLnIpfWNvbnN0IHBuPW5ldyBNYXA7ZnVuY3Rpb24gYnQocixlKXtpZighcnx8dHlwZW9mIHIhPSJvYmplY3QiKXJldHVybiExO2xldCB0PXBuLmdldChlKTt0fHwodD1uZXcgV2Vha01hcCxwbi5zZXQoZSx0KSk7bGV0IG49dC5nZXQocik7aWYobj09PXZvaWQgMCl7Y29uc3Qgbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocik7bj1vLnN1YnN0cmluZyg4LG8ubGVuZ3RoLTEpPT09ZSx0LnNldChyLG4pfXJldHVybiBufWZ1bmN0aW9uIEVzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTEJ1ZmZlcjwidSImJmJ0KGUsIldlYkdMQnVmZmVyIil9ZnVuY3Rpb24gVHMocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMUmVuZGVyYnVmZmVyPCJ1IiYmYnQoZSwiV2ViR0xSZW5kZXJidWZmZXIiKX1mdW5jdGlvbiBscihyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xUZXh0dXJlPCJ1IiYmYnQoZSwiV2ViR0xUZXh0dXJlIil9ZnVuY3Rpb24gd3MocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMU2FtcGxlcjwidSImJmJ0KGUsIldlYkdMU2FtcGxlciIpfWNvbnN0IGduPTM1MDQ0LGdlPTM0OTYyLEFzPTM0OTYzLElzPTM0NjYwLFNzPTUxMjAsUnM9NTEyMSxGcz01MTIyLFBzPTUxMjMsa3M9NTEyNCxEcz01MTI1LHluPTUxMjYsYm49e2F0dHJpYlByZWZpeDoiIn07ZnVuY3Rpb24gQ3MocixlLHQsbixvKXtyLmJpbmRCdWZmZXIoZSx0KSxyLmJ1ZmZlckRhdGEoZSxuLG98fGduKX1mdW5jdGlvbiB4bihyLGUsdCxuKXtpZihFcyhyLGUpKXJldHVybiBlO3Q9dHx8Z2U7Y29uc3Qgbz1yLmNyZWF0ZUJ1ZmZlcigpO3JldHVybiBDcyhyLHQsbyxlLG4pLG99ZnVuY3Rpb24gX24ocil7cmV0dXJuIHI9PT0iaW5kaWNlcyJ9ZnVuY3Rpb24gQnMocil7cmV0dXJuIHI9PT1JbnQ4QXJyYXl8fHI9PT1VaW50OEFycmF5fWZ1bmN0aW9uIE1zKHIpe3JldHVybiByLmxlbmd0aD9yOnIuZGF0YX1jb25zdCBPcz0vY29vcmR8dGV4dHVyZS9pLFVzPS9jb2xvcnxjb2xvdXIvaTtmdW5jdGlvbiBOcyhyLGUpe2xldCB0O2lmKE9zLnRlc3Qocik/dD0yOlVzLnRlc3Qocik/dD00OnQ9MyxlJXQ+MCl0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZ3Vlc3MgbnVtQ29tcG9uZW50cyBmb3IgYXR0cmlidXRlICcke3J9Jy4gVHJpZWQgJHt0fSBidXQgJHtlfSB2YWx1ZXMgaXMgbm90IGV2ZW5seSBkaXZpc2libGUgYnkgJHt0fS4gWW91IHNob3VsZCBzcGVjaWZ5IGl0LmApO3JldHVybiB0fWZ1bmN0aW9uIExzKHIsZSx0KXtyZXR1cm4gci5udW1Db21wb25lbnRzfHxyLnNpemV8fE5zKGUsdHx8TXMocikubGVuZ3RoKX1mdW5jdGlvbiB2bihyLGUpe2lmKHl0KHIpKXJldHVybiByO2lmKHl0KHIuZGF0YSkpcmV0dXJuIHIuZGF0YTtBcnJheS5pc0FycmF5KHIpJiYocj17ZGF0YTpyfSk7bGV0IHQ9ci50eXBlP2RyKHIudHlwZSk6dm9pZCAwO3JldHVybiB0fHwoX24oZSk/dD1VaW50MTZBcnJheTp0PUZsb2F0MzJBcnJheSksbmV3IHQoci5kYXRhKX1mdW5jdGlvbiB6cyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJudW1iZXIiP3I6cj9kbihyKTp5bn1mdW5jdGlvbiBkcihyKXtyZXR1cm4gdHlwZW9mIHI9PSJudW1iZXIiP2huKHIpOnJ8fEZsb2F0MzJBcnJheX1mdW5jdGlvbiBHcyhyLGUpe3JldHVybntidWZmZXI6ZS5idWZmZXIsbnVtVmFsdWVzOjIqMyo0LHR5cGU6enMoZS50eXBlKSxhcnJheVR5cGU6ZHIoZS50eXBlKX19ZnVuY3Rpb24gJHMocixlKXtjb25zdCB0PWUuZGF0YXx8ZSxuPWRyKGUudHlwZSksbz10Km4uQllURVNfUEVSX0VMRU1FTlQsaT1yLmNyZWF0ZUJ1ZmZlcigpO3JldHVybiByLmJpbmRCdWZmZXIoZ2UsaSksci5idWZmZXJEYXRhKGdlLG8sZS5kcmF3VHlwZXx8Z24pLHtidWZmZXI6aSxudW1WYWx1ZXM6dCx0eXBlOmRuKG4pLGFycmF5VHlwZTpufX1mdW5jdGlvbiBXcyhyLGUsdCl7Y29uc3Qgbj12bihlLHQpO3JldHVybnthcnJheVR5cGU6bi5jb25zdHJ1Y3RvcixidWZmZXI6eG4ocixuLHZvaWQgMCxlLmRyYXdUeXBlKSx0eXBlOmZyKG4pLG51bVZhbHVlczowfX1mdW5jdGlvbiBWcyhyLGUpe2NvbnN0IHQ9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7aWYoIV9uKG4pKXtjb25zdCBvPWVbbl0saT1vLmF0dHJpYnx8by5uYW1lfHxvLmF0dHJpYk5hbWV8fGJuLmF0dHJpYlByZWZpeCtuO2lmKG8udmFsdWUpe2lmKCFBcnJheS5pc0FycmF5KG8udmFsdWUpJiYheXQoby52YWx1ZSkpdGhyb3cgbmV3IEVycm9yKCJhcnJheS52YWx1ZSBpcyBub3QgYXJyYXkgb3IgdHlwZWRhcnJheSIpO3RbaV09e3ZhbHVlOm8udmFsdWV9fWVsc2V7bGV0IHM7by5idWZmZXImJm8uYnVmZmVyIGluc3RhbmNlb2YgV2ViR0xCdWZmZXI/cz1Hczp0eXBlb2Ygbz09Im51bWJlciJ8fHR5cGVvZiBvLmRhdGE9PSJudW1iZXIiP3M9JHM6cz1Xcztjb25zdHtidWZmZXI6YSx0eXBlOnUsbnVtVmFsdWVzOmYsYXJyYXlUeXBlOmR9PXMocixvLG4pLHA9by5ub3JtYWxpemUhPT12b2lkIDA/by5ub3JtYWxpemU6QnMoZCksZz1McyhvLG4sZik7dFtpXT17YnVmZmVyOmEsbnVtQ29tcG9uZW50czpnLHR5cGU6dSxub3JtYWxpemU6cCxzdHJpZGU6by5zdHJpZGV8fDAsb2Zmc2V0Om8ub2Zmc2V0fHwwLGRpdmlzb3I6by5kaXZpc29yPT09dm9pZCAwP3ZvaWQgMDpvLmRpdmlzb3IsZHJhd1R5cGU6by5kcmF3VHlwZX19fX0pLHIuYmluZEJ1ZmZlcihnZSxudWxsKSx0fWZ1bmN0aW9uIEhzKHIsZSl7cmV0dXJuIGU9PT1Tc3x8ZT09PVJzPzE6ZT09PUZzfHxlPT09UHM/MjplPT09a3N8fGU9PT1Ec3x8ZT09PXluPzQ6MH1jb25zdCBocj1bInBvc2l0aW9uIiwicG9zaXRpb25zIiwiYV9wb3NpdGlvbiJdO2Z1bmN0aW9uIGpzKHIsZSl7bGV0IHQsbjtmb3Iobj0wO248aHIubGVuZ3RoJiYodD1ocltuXSwhKHQgaW4gZXx8KHQ9Ym4uYXR0cmliUHJlZml4K3QsdCBpbiBlKSkpOysrbik7bj09PWhyLmxlbmd0aCYmKHQ9T2JqZWN0LmtleXMoZSlbMF0pO2NvbnN0IG89ZVt0XTtpZighby5idWZmZXIpcmV0dXJuIDE7ci5iaW5kQnVmZmVyKGdlLG8uYnVmZmVyKTtjb25zdCBpPXIuZ2V0QnVmZmVyUGFyYW1ldGVyKGdlLElzKTtyLmJpbmRCdWZmZXIoZ2UsbnVsbCk7Y29uc3Qgcz1IcyhyLG8udHlwZSksYT1pL3MsdT1vLm51bUNvbXBvbmVudHN8fG8uc2l6ZSxmPWEvdTtpZihmJTEhPT0wKXRocm93IG5ldyBFcnJvcihgbnVtQ29tcG9uZW50cyAke3V9IG5vdCBjb3JyZWN0IGZvciBsZW5ndGggJHtsZW5ndGh9YCk7cmV0dXJuIGZ9ZnVuY3Rpb24gWXMocixlLHQpe2NvbnN0IG49VnMocixlKSxvPU9iamVjdC5hc3NpZ24oe30sdHx8e30pO28uYXR0cmlicz1PYmplY3QuYXNzaWduKHt9LHQ/dC5hdHRyaWJzOnt9LG4pO2NvbnN0IGk9ZS5pbmRpY2VzO2lmKGkpe2NvbnN0IHM9dm4oaSwiaW5kaWNlcyIpO28uaW5kaWNlcz14bihyLHMsQXMpLG8ubnVtRWxlbWVudHM9cy5sZW5ndGgsby5lbGVtZW50VHlwZT1mcihzKX1lbHNlIG8ubnVtRWxlbWVudHN8fChvLm51bUVsZW1lbnRzPWpzKHIsby5hdHRyaWJzKSk7cmV0dXJuIG99ZnVuY3Rpb24gV2Uocil7cmV0dXJuISFyLnRleFN0b3JhZ2UyRH1jb25zdCBFbj1mdW5jdGlvbigpe2NvbnN0IHI9e30sZT17fTtmdW5jdGlvbiB0KG4pe2NvbnN0IG89bi5jb25zdHJ1Y3Rvci5uYW1lO2lmKCFyW29dKXtmb3IoY29uc3QgaSBpbiBuKWlmKHR5cGVvZiBuW2ldPT0ibnVtYmVyIil7Y29uc3Qgcz1lW25baV1dO2VbbltpXV09cz9gJHtzfSB8ICR7aX1gOml9cltvXT0hMH19cmV0dXJuIGZ1bmN0aW9uKG8saSl7cmV0dXJuIHQobyksZVtpXXx8KHR5cGVvZiBpPT0ibnVtYmVyIj9gMHgke2kudG9TdHJpbmcoMTYpfWA6aSl9fSgpLG9lPXt0ZXh0dXJlQ29sb3I6bmV3IFVpbnQ4QXJyYXkoWzEyOCwxOTIsMjU1LDI1NV0pLHRleHR1cmVPcHRpb25zOnt9LGNyb3NzT3JpZ2luOnZvaWQgMH0sVmU9eXQsVG49ZnVuY3Rpb24oKXtsZXQgcjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcj1yfHwodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3JlYXRlRWxlbWVudD9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOm51bGwpLHJ9fSgpLHduPTY0MDYsUT02NDA3LFM9NjQwOCxBbj02NDA5LEluPTY0MTAsSGU9NjQwMixTbj0zNDA0MSx4dD0zMzA3MSxYcz05NzI4LFFzPTk3MjksaWU9MzU1MyxzZT0zNDA2Nyx5ZT0zMjg3OSxiZT0zNTg2Nixtcj0zNDA2OSxxcz0zNDA3MCxLcz0zNDA3MSxKcz0zNDA3Mixacz0zNDA3MyxlYT0zNDA3NCxwcj0xMDI0MSxncj0xMDI0MCxfdD0xMDI0Mix2dD0xMDI0MyxSbj0zMjg4Mix0YT0zMzA4MixyYT0zMzA4MyxuYT0zMzA4NCxvYT0zMzA4NSxpYT0zNDg5MixzYT0zNDg5Myx5cj0zMzE3LEZuPTMzMTQsUG49MzI4Nzgsa249MzMxNixEbj0zMzE1LENuPTMyODc3LGFhPTM3NDQzLHVhPTM3NDQxLGNhPTM3NDQwLGZhPTMzMzIxLGxhPTM2NzU2LGRhPTMzMzI1LGhhPTMzMzI2LG1hPTMzMzMwLHBhPTMzMzI5LGdhPTMzMzM4LHlhPTMzMzM3LGJhPTMzMzQwLHhhPTMzMzM5LF9hPTMzMzIzLHZhPTM2NzU3LEVhPTMzMzI3LFRhPTMzMzI4LHdhPTMzMzM2LEFhPTMzMzM1LElhPTMzMzMyLFNhPTMzMzMxLFJhPTMzMzM0LEZhPTMzMzMzLFBhPTMyODQ5LGthPTM1OTA1LERhPTM2MTk0LENhPTM2NzU4LEJhPTM1ODk4LE1hPTM1OTAxLE9hPTM0ODQzLFVhPTM0ODM3LE5hPTM2MjIxLExhPTM2MjM5LHphPTM2MjE1LEdhPTM2MjMzLCRhPTM2MjA5LFdhPTM2MjI3LFZhPTMyODU2LEhhPTM1OTA3LGphPTM2NzU5LFlhPTMyODU1LFhhPTMyODU0LFFhPTMyODU3LHFhPTM0ODQyLEthPTM0ODM2LEphPTM2MjIwLFphPTM2MjM4LGV1PTM2OTc1LHR1PTM2MjE0LHJ1PTM2MjMyLG51PTM2MjI2LG91PTM2MjA4LGl1PTMzMTg5LHN1PTMzMTkwLGF1PTM2MDEyLHV1PTM2MDEzLGN1PTM1MDU2LGFlPTUxMjAsST01MTIxLEV0PTUxMjIsUGU9NTEyMyxUdD01MTI0LHhlPTUxMjUsTT01MTI2LEJuPTMyODE5LE1uPTMyODIwLE9uPTMzNjM1LEg9NTEzMSxqZT0zNjE5Myxicj0zMzY0MCxmdT0zNTg5OSxsdT0zNTkwMixkdT0zNjI2OSxodT0zNDA0Mix3dD0zMzMxOSxrZT0zMzMyMCxBdD02NDAzLERlPTM2MjQ0LENlPTM2MjQ4LF9lPTM2MjQ5O2xldCB4cjtmdW5jdGlvbiBJdChyKXtpZigheHIpe2NvbnN0IGU9e307ZVt3bl09e3RleHR1cmVGb3JtYXQ6d24sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbSSxILGplLE1dfSxlW0FuXT17dGV4dHVyZUZvcm1hdDpBbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxLDIsMiw0XSx0eXBlOltJLEgsamUsTV19LGVbSW5dPXt0ZXh0dXJlRm9ybWF0OkluLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzIsNCw0LDhdLHR5cGU6W0ksSCxqZSxNXX0sZVtRXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsNiw2LDEyLDJdLHR5cGU6W0ksSCxqZSxNLE9uXX0sZVtTXT17dGV4dHVyZUZvcm1hdDpTLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsOCw4LDE2LDIsMl0sdHlwZTpbSSxILGplLE0sQm4sTW5dfSxlW0hlXT17dGV4dHVyZUZvcm1hdDpIZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyLDRdLHR5cGU6W3hlLFBlXX0sZVtmYV09e3RleHR1cmVGb3JtYXQ6QXQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbSV19LGVbbGFdPXt0ZXh0dXJlRm9ybWF0OkF0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W2FlXX0sZVtkYV09e3RleHR1cmVGb3JtYXQ6QXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltNLEhdfSxlW2hhXT17dGV4dHVyZUZvcm1hdDpBdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltNXX0sZVttYV09e3RleHR1cmVGb3JtYXQ6RGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbSV19LGVbcGFdPXt0ZXh0dXJlRm9ybWF0OkRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W2FlXX0sZVtJYV09e3RleHR1cmVGb3JtYXQ6RGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbUGVdfSxlW1NhXT17dGV4dHVyZUZvcm1hdDpEZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltFdF19LGVbUmFdPXt0ZXh0dXJlRm9ybWF0OkRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3hlXX0sZVtGYV09e3RleHR1cmVGb3JtYXQ6RGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbVHRdfSxlW19hXT17dGV4dHVyZUZvcm1hdDp3dCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltJXX0sZVt2YV09e3RleHR1cmVGb3JtYXQ6d3QsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbYWVdfSxlW0VhXT17dGV4dHVyZUZvcm1hdDp3dCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols4LDRdLHR5cGU6W00sSF19LGVbVGFdPXt0ZXh0dXJlRm9ybWF0Ond0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W01dfSxlW3dhXT17dGV4dHVyZUZvcm1hdDprZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltJXX0sZVtBYV09e3RleHR1cmVGb3JtYXQ6a2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbYWVdfSxlW2dhXT17dGV4dHVyZUZvcm1hdDprZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltQZV19LGVbeWFdPXt0ZXh0dXJlRm9ybWF0OmtlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0V0XX0sZVtiYV09e3RleHR1cmVGb3JtYXQ6a2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbeGVdfSxlW3hhXT17dGV4dHVyZUZvcm1hdDprZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltUdF19LGVbUGFdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbSV19LGVba2FdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbSV19LGVbRGFdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMywyXSx0eXBlOltJLE9uXX0sZVtDYV09e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOlthZV19LGVbQmFdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNiw0XSx0eXBlOltNLEgsZnVdfSxlW01hXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbTSxILGx1XX0sZVtPYV09e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2XSx0eXBlOltNLEhdfSxlW1VhXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltNXX0sZVtOYV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbSV19LGVbTGFdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W2FlXX0sZVt6YV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbUGVdfSxlW0dhXT17dGV4dHVyZUZvcm1hdDpDZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols2XSx0eXBlOltFdF19LGVbJGFdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOlt4ZV19LGVbV2FdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltUdF19LGVbVmFdPXt0ZXh0dXJlRm9ybWF0OlMsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbSV19LGVbSGFdPXt0ZXh0dXJlRm9ybWF0OlMsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbSV19LGVbamFdPXt0ZXh0dXJlRm9ybWF0OlMsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbYWVdfSxlW1lhXT17dGV4dHVyZUZvcm1hdDpTLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMiw0XSx0eXBlOltJLE1uLGJyXX0sZVtYYV09e3RleHR1cmVGb3JtYXQ6Uyxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDJdLHR5cGU6W0ksQm5dfSxlW1FhXT17dGV4dHVyZUZvcm1hdDpTLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2JyXX0sZVtxYV09e3RleHR1cmVGb3JtYXQ6Uyxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxNiw4XSx0eXBlOltNLEhdfSxlW0thXT17dGV4dHVyZUZvcm1hdDpTLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltNXX0sZVtKYV09e3RleHR1cmVGb3JtYXQ6X2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbSV19LGVbWmFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2FlXX0sZVtldV09e3RleHR1cmVGb3JtYXQ6X2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbYnJdfSxlW3R1XT17dGV4dHVyZUZvcm1hdDpfZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltQZV19LGVbcnVdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W0V0XX0sZVtudV09e3RleHR1cmVGb3JtYXQ6X2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W1R0XX0sZVtvdV09e3RleHR1cmVGb3JtYXQ6X2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W3hlXX0sZVtpdV09e3RleHR1cmVGb3JtYXQ6SGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOltQZSx4ZV19LGVbc3VdPXt0ZXh0dXJlRm9ybWF0OkhlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3hlXX0sZVthdV09e3RleHR1cmVGb3JtYXQ6SGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbTV19LGVbY3VdPXt0ZXh0dXJlRm9ybWF0OlNuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2h1XX0sZVt1dV09e3RleHR1cmVGb3JtYXQ6U24sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbZHVdfSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2NvbnN0IG49ZVt0XTtuLmJ5dGVzUGVyRWxlbWVudE1hcD17fSxuLmJ5dGVzUGVyRWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKG8saSl7Y29uc3Qgcz1uLnR5cGVbaV07bi5ieXRlc1BlckVsZW1lbnRNYXBbc109b30pfSkseHI9ZX1yZXR1cm4geHJbcl19ZnVuY3Rpb24gbXUocixlKXtjb25zdCB0PUl0KHIpO2lmKCF0KXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0Ijtjb25zdCBuPXQuYnl0ZXNQZXJFbGVtZW50TWFwW2VdO2lmKG49PT12b2lkIDApdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBufWZ1bmN0aW9uIFllKHIpe2NvbnN0IGU9SXQocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybntmb3JtYXQ6ZS50ZXh0dXJlRm9ybWF0LHR5cGU6ZS50eXBlWzBdfX1mdW5jdGlvbiBVbihyKXtyZXR1cm4ociZyLTEpPT09MH1mdW5jdGlvbiBwdShyLGUsdCxuKXtpZighV2UocikpcmV0dXJuIFVuKGUpJiZVbih0KTtjb25zdCBvPUl0KG4pO2lmKCFvKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gby5jb2xvclJlbmRlcmFibGUmJm8udGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24gZ3Uocil7Y29uc3QgZT1JdChyKTtpZighZSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGUudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24geXUocixlLHQpe3JldHVybiBWZShlKT9mcihlKTp0fHxJfWZ1bmN0aW9uIFN0KHIsZSx0LG4sbyl7aWYobyUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIjtpZighdCYmIW4pe2NvbnN0IGk9TWF0aC5zcXJ0KG8vKGU9PT1zZT82OjEpKTtpJTE9PT0wPyh0PWksbj1pKToodD1vLG49MSl9ZWxzZSBpZihuKXtpZighdCYmKHQ9by9uLHQlMSkpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyJ9ZWxzZSBpZihuPW8vdCxuJTEpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7cmV0dXJue3dpZHRoOnQsaGVpZ2h0Om59fWZ1bmN0aW9uIEJlKHIsZSl7ZS5jb2xvcnNwYWNlQ29udmVyc2lvbiE9PXZvaWQgMCYmci5waXhlbFN0b3JlaShhYSxlLmNvbG9yc3BhY2VDb252ZXJzaW9uKSxlLnByZW11bHRpcGx5QWxwaGEhPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkodWEsZS5wcmVtdWx0aXBseUFscGhhKSxlLmZsaXBZIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKGNhLGUuZmxpcFkpfWZ1bmN0aW9uIE5uKHIpe3IucGl4ZWxTdG9yZWkoeXIsNCksV2UocikmJihyLnBpeGVsU3RvcmVpKEZuLDApLHIucGl4ZWxTdG9yZWkoUG4sMCksci5waXhlbFN0b3JlaShrbiwwKSxyLnBpeGVsU3RvcmVpKERuLDApLHIucGl4ZWxTdG9yZWkoQ24sMCkpfWZ1bmN0aW9uIGJ1KHIsZSx0LG4pe24ubWluTWFnJiYodC5jYWxsKHIsZSxwcixuLm1pbk1hZyksdC5jYWxsKHIsZSxncixuLm1pbk1hZykpLG4ubWluJiZ0LmNhbGwocixlLHByLG4ubWluKSxuLm1hZyYmdC5jYWxsKHIsZSxncixuLm1hZyksbi53cmFwJiYodC5jYWxsKHIsZSxfdCxuLndyYXApLHQuY2FsbChyLGUsdnQsbi53cmFwKSwoZT09PXllfHx3cyhyLGUpKSYmdC5jYWxsKHIsZSxSbixuLndyYXApKSxuLndyYXBSJiZ0LmNhbGwocixlLFJuLG4ud3JhcFIpLG4ud3JhcFMmJnQuY2FsbChyLGUsX3Qsbi53cmFwUyksbi53cmFwVCYmdC5jYWxsKHIsZSx2dCxuLndyYXBUKSxuLm1pbkxvZCE9PXZvaWQgMCYmdC5jYWxsKHIsZSx0YSxuLm1pbkxvZCksbi5tYXhMb2QhPT12b2lkIDAmJnQuY2FsbChyLGUscmEsbi5tYXhMb2QpLG4uYmFzZUxldmVsIT09dm9pZCAwJiZ0LmNhbGwocixlLG5hLG4uYmFzZUxldmVsKSxuLm1heExldmVsIT09dm9pZCAwJiZ0LmNhbGwocixlLG9hLG4ubWF4TGV2ZWwpLG4uY29tcGFyZUZ1bmMhPT12b2lkIDAmJnQuY2FsbChyLGUsc2Esbi5jb21wYXJlRnVuYyksbi5jb21wYXJlTW9kZSE9PXZvaWQgMCYmdC5jYWxsKHIsZSxpYSxuLmNvbXBhcmVNb2RlKX1mdW5jdGlvbiBMbihyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpLGJ1KHIsbixyLnRleFBhcmFtZXRlcmksdCl9ZnVuY3Rpb24geHUocil7cmV0dXJuIHI9cnx8b2UudGV4dHVyZUNvbG9yLFZlKHIpP3I6bmV3IFVpbnQ4QXJyYXkoW3JbMF0qMjU1LHJbMV0qMjU1LHJbMl0qMjU1LHJbM10qMjU1XSl9ZnVuY3Rpb24gX3IocixlLHQsbixvLGkpe3Q9dHx8b2UudGV4dHVyZU9wdGlvbnMsaT1pfHxTO2NvbnN0IHM9dC50YXJnZXR8fGllO2lmKG49bnx8dC53aWR0aCxvPW98fHQuaGVpZ2h0LHIuYmluZFRleHR1cmUocyxlKSxwdShyLG4sbyxpKSlyLmdlbmVyYXRlTWlwbWFwKHMpO2Vsc2V7Y29uc3QgYT1ndShpKT9RczpYcztyLnRleFBhcmFtZXRlcmkocyxwcixhKSxyLnRleFBhcmFtZXRlcmkocyxncixhKSxyLnRleFBhcmFtZXRlcmkocyxfdCx4dCksci50ZXhQYXJhbWV0ZXJpKHMsdnQseHQpfX1mdW5jdGlvbiBYZShyKXtyZXR1cm4gci5hdXRvPT09ITB8fHIuYXV0bz09PXZvaWQgMCYmci5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiB2cihyLGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W21yLHFzLEtzLEpzLFpzLGVhXX1mdW5jdGlvbiBFcihyLGUpe2NvbnN0IG49dnIocixlKS5tYXAoZnVuY3Rpb24obyxpKXtyZXR1cm57ZmFjZTpvLG5keDppfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24obyxpKXtyZXR1cm4gby5mYWNlLWkuZmFjZX0pLG59ZnVuY3Rpb24gem4ocixlLHQsbil7bj1ufHxvZS50ZXh0dXJlT3B0aW9ucztjb25zdCBvPW4udGFyZ2V0fHxpZSxpPW4ubGV2ZWx8fDA7bGV0IHM9dC53aWR0aCxhPXQuaGVpZ2h0O2NvbnN0IHU9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fFMsZj1ZZSh1KSxkPW4uZm9ybWF0fHxmLmZvcm1hdCxwPW4udHlwZXx8Zi50eXBlO2lmKEJlKHIsbiksci5iaW5kVGV4dHVyZShvLGUpLG89PT1zZSl7Y29uc3QgZz10LndpZHRoLGI9dC5oZWlnaHQ7bGV0IGgseDtpZihnLzY9PT1iKWg9Yix4PVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZihiLzY9PT1nKWg9Zyx4PVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZihnLzM9PT1iLzIpaD1nLzMseD1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoZy8yPT09Yi8zKWg9Zy8yLHg9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyh0LnNyYz90LnNyYzp0Lm5vZGVOYW1lKTtjb25zdCBFPVRuKCk7RT8oRS5jYW52YXMud2lkdGg9aCxFLmNhbnZhcy5oZWlnaHQ9aCxzPWgsYT1oLEVyKHIsbikuZm9yRWFjaChmdW5jdGlvbih2KXtjb25zdCBSPXhbdi5uZHgqMiswXSpoLFA9eFt2Lm5keCoyKzFdKmg7RS5kcmF3SW1hZ2UodCxSLFAsaCxoLDAsMCxoLGgpLHIudGV4SW1hZ2UyRCh2LmZhY2UsaSx1LGQscCxFLmNhbnZhcyl9KSxFLmNhbnZhcy53aWR0aD0xLEUuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYocz1oLGE9aCxFcihyLG4pLmZvckVhY2goZnVuY3Rpb24odil7Y29uc3QgUj14W3YubmR4KjIrMF0qaCxQPXhbdi5uZHgqMisxXSpoO3IudGV4SW1hZ2UyRCh2LmZhY2UsaSx1LGgsaCwwLGQscCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcCh0LFIsUCxoLGgse3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oeil7QmUocixuKSxyLmJpbmRUZXh0dXJlKG8sZSksci50ZXhJbWFnZTJEKHYuZmFjZSxpLHUsZCxwLHopLFhlKG4pJiZfcihyLGUsbixzLGEsdSl9KX0pKX1lbHNlIGlmKG89PT15ZXx8bz09PWJlKXtjb25zdCBnPU1hdGgubWluKHQud2lkdGgsdC5oZWlnaHQpLGI9TWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCksaD1iL2c7aWYoaCUxIT09MCl0aHJvdyJjYW4gbm90IGNvbXB1dGUgM0QgZGltZW5zaW9ucyBvZiBlbGVtZW50Ijtjb25zdCB4PXQud2lkdGg9PT1iPzE6MCxFPXQuaGVpZ2h0PT09Yj8xOjA7ci5waXhlbFN0b3JlaSh5ciwxKSxyLnBpeGVsU3RvcmVpKEZuLHQud2lkdGgpLHIucGl4ZWxTdG9yZWkoUG4sMCksci5waXhlbFN0b3JlaShDbiwwKSxyLnRleEltYWdlM0QobyxpLHUsZyxnLGcsMCxkLHAsbnVsbCk7Zm9yKGxldCB2PTA7djxoOysrdil7Y29uc3QgUj12KmcqeCxQPXYqZypFO3IucGl4ZWxTdG9yZWkoa24sUiksci5waXhlbFN0b3JlaShEbixQKSxyLnRleFN1YkltYWdlM0QobyxpLDAsMCx2LGcsZywxLGQscCx0KX1ObihyKX1lbHNlIHIudGV4SW1hZ2UyRChvLGksdSxkLHAsdCk7WGUobikmJl9yKHIsZSxuLHMsYSx1KSxMbihyLGUsbil9ZnVuY3Rpb24gUWUoKXt9ZnVuY3Rpb24gX3Uocil7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj1yLGUuaG9zdG5hbWU9PT1sb2NhdGlvbi5ob3N0bmFtZSYmZS5wb3J0PT09bG9jYXRpb24ucG9ydCYmZS5wcm90b2NvbD09PWxvY2F0aW9uLnByb3RvY29sfWVsc2V7Y29uc3QgZT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLm9yaWdpbjtyZXR1cm4gbmV3IFVSTChyLGxvY2F0aW9uLmhyZWYpLm9yaWdpbj09PWV9fWZ1bmN0aW9uIHZ1KHIsZSl7cmV0dXJuIGU9PT12b2lkIDAmJiFfdShyKT8iYW5vbnltb3VzIjplfWZ1bmN0aW9uIEV1KHIsZSx0KXt0PXR8fFFlO2xldCBuO2lmKGU9ZSE9PXZvaWQgMD9lOm9lLmNyb3NzT3JpZ2luLGU9dnUocixlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBvPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsaSksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuPW51bGx9LGk9ZnVuY3Rpb24oKXtjb25zdCB1PSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3I7bW4odSksdCh1LG4pLG8oKX0scz1mdW5jdGlvbigpe3QobnVsbCxuKSxvKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixpKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG4uc3JjPXIsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBvLGk7Y29uc3Qgcz1mdW5jdGlvbigpe3QobyxpKX0sYT17fTtlJiYoYS5tb2RlPSJjb3JzIiksZmV0Y2gocixhKS50aGVuKGZ1bmN0aW9uKHUpe2lmKCF1Lm9rKXRocm93IHU7cmV0dXJuIHUuYmxvYigpfSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHUpe2k9dSxzZXRUaW1lb3V0KHMpfSkuY2F0Y2goZnVuY3Rpb24odSl7bz11LHNldFRpbWVvdXQocyl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24gR24ocil7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnIgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnIgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiBUcihyLGUsdCl7cmV0dXJuIEduKHIpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChudWxsLHIpfSkscik6RXUocixlLHQpfWZ1bmN0aW9uIHdyKHIsZSx0KXt0PXR8fG9lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49dC50YXJnZXR8fGllO2lmKHIuYmluZFRleHR1cmUobixlKSx0LmNvbG9yPT09ITEpcmV0dXJuO2NvbnN0IG89eHUodC5jb2xvcik7aWYobj09PXNlKWZvcihsZXQgaT0wO2k8NjsrK2kpci50ZXhJbWFnZTJEKG1yK2ksMCxTLDEsMSwwLFMsSSxvKTtlbHNlIG49PT15ZXx8bj09PWJlP3IudGV4SW1hZ2UzRChuLDAsUywxLDEsMSwwLFMsSSxvKTpyLnRleEltYWdlMkQobiwwLFMsMSwxLDAsUyxJLG8pfWZ1bmN0aW9uIFR1KHIsZSx0LG4pe3JldHVybiBuPW58fFFlLHQ9dHx8b2UudGV4dHVyZU9wdGlvbnMsd3IocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KSxUcih0LnNyYyx0LmNyb3NzT3JpZ2luLGZ1bmN0aW9uKGkscyl7aT9uKGksZSxzKTooem4ocixlLHMsdCksbihudWxsLGUscykpfSl9ZnVuY3Rpb24gd3UocixlLHQsbil7bj1ufHxRZTtjb25zdCBvPXQuc3JjO2lmKG8ubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBpPXQubGV2ZWx8fDAscz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8UyxhPVllKHMpLHU9dC5mb3JtYXR8fGEuZm9ybWF0LGY9dC50eXBlfHxJLGQ9dC50YXJnZXR8fGllO2lmKGQhPT1zZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFX0NVQkVfTUFQIjt3cihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBwPTY7Y29uc3QgZz1bXSxiPXZyKHIsdCk7bGV0IGg7ZnVuY3Rpb24geChFKXtyZXR1cm4gZnVuY3Rpb24odixSKXstLXAsdj9nLnB1c2godik6Ui53aWR0aCE9PVIuaGVpZ2h0P2cucHVzaCgiY3ViZW1hcCBmYWNlIGltZyBpcyBub3QgYSBzcXVhcmU6ICIrUi5zcmMpOihCZShyLHQpLHIuYmluZFRleHR1cmUoZCxlKSxwPT09NT92cigpLmZvckVhY2goZnVuY3Rpb24oUCl7ci50ZXhJbWFnZTJEKFAsaSxzLHUsZixSKX0pOnIudGV4SW1hZ2UyRChFLGkscyx1LGYsUiksWGUodCkmJnIuZ2VuZXJhdGVNaXBtYXAoZCkpLHA9PT0wJiZuKGcubGVuZ3RoP2c6dm9pZCAwLGUsaCl9fWg9by5tYXAoZnVuY3Rpb24oRSx2KXtyZXR1cm4gVHIoRSx0LmNyb3NzT3JpZ2luLHgoYlt2XSkpfSl9ZnVuY3Rpb24gQXUocixlLHQsbil7bj1ufHxRZTtjb25zdCBvPXQuc3JjLGk9dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fFMscz1ZZShpKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8SSxmPXQudGFyZ2V0fHxiZTtpZihmIT09eWUmJmYhPT1iZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFXzNEIG9yIFRFWFRVUkVfMkRfQVJSQVkiO3dyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGQ9by5sZW5ndGg7Y29uc3QgcD1bXTtsZXQgZztjb25zdCBiPXQubGV2ZWx8fDA7bGV0IGg9dC53aWR0aCx4PXQuaGVpZ2h0O2NvbnN0IEU9by5sZW5ndGg7bGV0IHY9ITA7ZnVuY3Rpb24gUihQKXtyZXR1cm4gZnVuY3Rpb24oeixMKXtpZigtLWQseilwLnB1c2goeik7ZWxzZXtpZihCZShyLHQpLHIuYmluZFRleHR1cmUoZixlKSx2KXt2PSExLGg9dC53aWR0aHx8TC53aWR0aCx4PXQuaGVpZ2h0fHxMLmhlaWdodCxyLnRleEltYWdlM0QoZixiLGksaCx4LEUsMCxhLHUsbnVsbCk7Zm9yKGxldCBWPTA7VjxFOysrVilyLnRleFN1YkltYWdlM0QoZixiLDAsMCxWLGgseCwxLGEsdSxMKX1lbHNle2xldCBWPUwsRzsoTC53aWR0aCE9PWh8fEwuaGVpZ2h0IT09eCkmJihHPVRuKCksVj1HLmNhbnZhcyxHLmNhbnZhcy53aWR0aD1oLEcuY2FudmFzLmhlaWdodD14LEcuZHJhd0ltYWdlKEwsMCwwLGgseCkpLHIudGV4U3ViSW1hZ2UzRChmLGIsMCwwLFAsaCx4LDEsYSx1LFYpLEcmJlY9PT1HLmNhbnZhcyYmKEcuY2FudmFzLndpZHRoPTAsRy5jYW52YXMuaGVpZ2h0PTApfVhlKHQpJiZyLmdlbmVyYXRlTWlwbWFwKGYpfWQ9PT0wJiZuKHAubGVuZ3RoP3A6dm9pZCAwLGUsZyl9fWc9by5tYXAoZnVuY3Rpb24oUCx6KXtyZXR1cm4gVHIoUCx0LmNyb3NzT3JpZ2luLFIoeikpfSl9ZnVuY3Rpb24gSXUocixlLHQsbil7bj1ufHxvZS50ZXh0dXJlT3B0aW9ucztjb25zdCBvPW4udGFyZ2V0fHxpZTtyLmJpbmRUZXh0dXJlKG8sZSk7bGV0IGk9bi53aWR0aCxzPW4uaGVpZ2h0LGE9bi5kZXB0aDtjb25zdCB1PW4ubGV2ZWx8fDAsZj1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8UyxkPVllKGYpLHA9bi5mb3JtYXR8fGQuZm9ybWF0LGc9bi50eXBlfHx5dShyLHQsZC50eXBlKTtpZihWZSh0KSl0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkmJih0PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSk7ZWxzZXtjb25zdCBFPWhuKGcpO3Q9bmV3IEUodCl9Y29uc3QgYj1tdShmLGcpLGg9dC5ieXRlTGVuZ3RoL2I7aWYoaCUxKXRocm93Imxlbmd0aCB3cm9uZyBzaXplIGZvciBmb3JtYXQ6ICIrRW4ocixwKTtsZXQgeDtpZihvPT09eWV8fG89PT1iZSlpZighaSYmIXMmJiFhKXtjb25zdCBFPU1hdGguY2JydChoKTtpZihFJTEhPT0wKXRocm93ImNhbid0IGd1ZXNzIGN1YmUgc2l6ZSBvZiBhcnJheSBvZiBudW1FbGVtZW50czogIitoO2k9RSxzPUUsYT1FfWVsc2UgaSYmKCFzfHwhYSk/KHg9U3QocixvLHMsYSxoL2kpLHM9eC53aWR0aCxhPXguaGVpZ2h0KTpzJiYoIWl8fCFhKT8oeD1TdChyLG8saSxhLGgvcyksaT14LndpZHRoLGE9eC5oZWlnaHQpOih4PVN0KHIsbyxpLHMsaC9hKSxpPXgud2lkdGgscz14LmhlaWdodCk7ZWxzZSB4PVN0KHIsbyxpLHMsaCksaT14LndpZHRoLHM9eC5oZWlnaHQ7aWYoTm4ociksci5waXhlbFN0b3JlaSh5cixuLnVucGFja0FsaWdubWVudHx8MSksQmUocixuKSxvPT09c2Upe2NvbnN0IEU9Yi90LkJZVEVTX1BFUl9FTEVNRU5ULHY9aC82KkU7RXIocixuKS5mb3JFYWNoKFI9Pntjb25zdCBQPXYqUi5uZHgsej10LnN1YmFycmF5KFAsUCt2KTtyLnRleEltYWdlMkQoUi5mYWNlLHUsZixpLHMsMCxwLGcseil9KX1lbHNlIG89PT15ZXx8bz09PWJlP3IudGV4SW1hZ2UzRChvLHUsZixpLHMsYSwwLHAsZyx0KTpyLnRleEltYWdlMkQobyx1LGYsaSxzLDAscCxnLHQpO3JldHVybnt3aWR0aDppLGhlaWdodDpzLGRlcHRoOmEsdHlwZTpnfX1mdW5jdGlvbiBTdShyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpO2NvbnN0IG89dC5sZXZlbHx8MCxpPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxTLHM9WWUoaSksYT10LmZvcm1hdHx8cy5mb3JtYXQsdT10LnR5cGV8fHMudHlwZTtpZihCZShyLHQpLG49PT1zZSlmb3IobGV0IGY9MDtmPDY7KytmKXIudGV4SW1hZ2UyRChtcitmLG8saSx0LndpZHRoLHQuaGVpZ2h0LDAsYSx1LG51bGwpO2Vsc2Ugbj09PXllfHxuPT09YmU/ci50ZXhJbWFnZTNEKG4sbyxpLHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCwwLGEsdSxudWxsKTpyLnRleEltYWdlMkQobixvLGksdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKX1mdW5jdGlvbiAkbihyLGUsdCl7dD10fHxRZSxlPWV8fG9lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49ci5jcmVhdGVUZXh0dXJlKCksbz1lLnRhcmdldHx8aWU7bGV0IGk9ZS53aWR0aHx8MSxzPWUuaGVpZ2h0fHwxO2NvbnN0IGE9ZS5pbnRlcm5hbEZvcm1hdHx8UztyLmJpbmRUZXh0dXJlKG8sbiksbz09PXNlJiYoci50ZXhQYXJhbWV0ZXJpKG8sX3QseHQpLHIudGV4UGFyYW1ldGVyaShvLHZ0LHh0KSk7bGV0IHU9ZS5zcmM7aWYodSlpZih0eXBlb2YgdT09ImZ1bmN0aW9uIiYmKHU9dShyLGUpKSx0eXBlb2YgdT09InN0cmluZyIpVHUocixuLGUsdCk7ZWxzZSBpZihWZSh1KXx8QXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ibnVtYmVyInx8QXJyYXkuaXNBcnJheSh1WzBdKXx8VmUodVswXSkpKXtjb25zdCBmPUl1KHIsbix1LGUpO2k9Zi53aWR0aCxzPWYuaGVpZ2h0fWVsc2UgQXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ic3RyaW5nInx8R24odVswXSkpP289PT1zZT93dShyLG4sZSx0KTpBdShyLG4sZSx0KTooem4ocixuLHUsZSksaT11LndpZHRoLHM9dS5oZWlnaHQpO2Vsc2UgU3UocixuLGUpO3JldHVybiBYZShlKSYmX3IocixuLGUsaSxzLGEpLExuKHIsbixlKSxufWNvbnN0IEFyPW1uO2Z1bmN0aW9uIFduKHIpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChyKTpudWxsfWNvbnN0IFJ0PTMzOTg0LEZ0PTM0OTYyLFJ1PTM0OTYzLEZ1PTM1NzEzLFB1PTM1NzE0LGt1PTM1NjMyLER1PTM1NjMzLEN1PTM1OTgxLFZuPTM1NzE4LEJ1PTM1NzIxLE11PTM1OTcxLE91PTM1MzgyLFV1PTM1Mzk2LE51PTM1Mzk4LEx1PTM1MzkyLHp1PTM1Mzk1LFB0PTUxMjYsSG49MzU2NjQsam49MzU2NjUsWW49MzU2NjYsSXI9NTEyNCxYbj0zNTY2NyxRbj0zNTY2OCxxbj0zNTY2OSxLbj0zNTY3MCxKbj0zNTY3MSxabj0zNTY3Mixlbz0zNTY3Myx0bz0zNTY3NCxybz0zNTY3NSxubz0zNTY3NixHdT0zNTY3OCwkdT0zNTY4MCxXdT0zNTY3OSxWdT0zNTY4MixIdT0zNTY4NSxqdT0zNTY4NixZdT0zNTY4NyxYdT0zNTY4OCxRdT0zNTY4OSxxdT0zNTY5MCxLdT0zNjI4OSxKdT0zNjI5MixadT0zNjI5MyxTcj01MTI1LG9vPTM2Mjk0LGlvPTM2Mjk1LHNvPTM2Mjk2LGVjPTM2Mjk4LHRjPTM2Mjk5LHJjPTM2MzAwLG5jPTM2MzAzLG9jPTM2MzA2LGljPTM2MzA3LHNjPTM2MzA4LGFjPTM2MzExLGt0PTM1NTMsRHQ9MzQwNjcsUnI9MzI4NzksQ3Q9MzU4NjYsXz17fTtmdW5jdGlvbiBhbyhyLGUpe3JldHVybiBfW2VdLmJpbmRQb2ludH1mdW5jdGlvbiB1YyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZihlLHQpfX1mdW5jdGlvbiBjYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZnYoZSx0KX19ZnVuY3Rpb24gZmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMmZ2KGUsdCl9fWZ1bmN0aW9uIGxjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTNmdihlLHQpfX1mdW5jdGlvbiBkYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00ZnYoZSx0KX19ZnVuY3Rpb24gdW8ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWkoZSx0KX19ZnVuY3Rpb24gY28ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWl2KGUsdCl9fWZ1bmN0aW9uIGZvKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJpdihlLHQpfX1mdW5jdGlvbiBsbyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zaXYoZSx0KX19ZnVuY3Rpb24gaG8ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGl2KGUsdCl9fWZ1bmN0aW9uIGhjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTF1aShlLHQpfX1mdW5jdGlvbiBtYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWl2KGUsdCl9fWZ1bmN0aW9uIHBjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJ1aXYoZSx0KX19ZnVuY3Rpb24gZ2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM3VpdihlLHQpfX1mdW5jdGlvbiB5YyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00dWl2KGUsdCl9fWZ1bmN0aW9uIGJjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJmdihlLCExLHQpfX1mdW5jdGlvbiB4YyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzZnYoZSwhMSx0KX19ZnVuY3Rpb24gX2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIHZjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIEVjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIFRjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIHdjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIEFjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIEljKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIFUocixlLHQsbil7Y29uc3Qgbz1hbyhyLGUpO3JldHVybiBXZShyKT9mdW5jdGlvbihpKXtsZXQgcyxhOyFpfHxscihyLGkpPyhzPWksYT1udWxsKToocz1pLnRleHR1cmUsYT1pLnNhbXBsZXIpLHIudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKFJ0K3QpLHIuYmluZFRleHR1cmUobyxzKSxyLmJpbmRTYW1wbGVyKHQsYSl9OmZ1bmN0aW9uKGkpe3IudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKFJ0K3QpLHIuYmluZFRleHR1cmUobyxpKX19ZnVuY3Rpb24gTihyLGUsdCxuLG8pe2NvbnN0IGk9YW8ocixlKSxzPW5ldyBJbnQzMkFycmF5KG8pO2ZvcihsZXQgYT0wO2E8bzsrK2Epc1thXT10K2E7cmV0dXJuIFdlKHIpP2Z1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZShSdCtzW2ZdKTtsZXQgZCxwOyF1fHxscihyLHUpPyhkPXUscD1udWxsKTooZD11LnRleHR1cmUscD11LnNhbXBsZXIpLHIuYmluZFNhbXBsZXIodCxwKSxyLmJpbmRUZXh0dXJlKGksZCl9KX06ZnVuY3Rpb24oYSl7ci51bmlmb3JtMWl2KG4scyksYS5mb3JFYWNoKGZ1bmN0aW9uKHUsZil7ci5hY3RpdmVUZXh0dXJlKFJ0K3NbZl0pLHIuYmluZFRleHR1cmUoaSx1KX0pfX1fW1B0XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0LHNldHRlcjp1YyxhcnJheVNldHRlcjpjY30sX1tIbl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6OCxzZXR0ZXI6ZmMsY29sczoyfSxfW2puXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6bGMsY29sczozfSxfW1luXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6ZGMsY29sczo0fSxfW0lyXT17VHlwZTpJbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6dW8sYXJyYXlTZXR0ZXI6Y299LF9bWG5dPXtUeXBlOkludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpmbyxjb2xzOjJ9LF9bUW5dPXtUeXBlOkludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6bG8sY29sczozfSxfW3FuXT17VHlwZTpJbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOmhvLGNvbHM6NH0sX1tTcl09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo0LHNldHRlcjpoYyxhcnJheVNldHRlcjptY30sX1tvb109e1R5cGU6VWludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpwYyxjb2xzOjJ9LF9baW9dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTIsc2V0dGVyOmdjLGNvbHM6M30sX1tzb109e1R5cGU6VWludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6eWMsY29sczo0fSxfW0tuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOnVvLGFycmF5U2V0dGVyOmNvfSxfW0puXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOmZvLGNvbHM6Mn0sX1tabl09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6bG8sY29sczozfSxfW2VvXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjpobyxjb2xzOjR9LF9bdG9dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpiYyxyb3dzOjIsY29sczoyfSxfW3JvXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6eGMscm93czozLGNvbHM6M30sX1tub109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOl9jLHJvd3M6NCxjb2xzOjR9LF9bSHVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjp2Yyxyb3dzOjIsY29sczozfSxfW2p1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTozMixzZXR0ZXI6VGMscm93czoyLGNvbHM6NH0sX1tZdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOkVjLHJvd3M6Myxjb2xzOjJ9LF9bWHVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpBYyxyb3dzOjMsY29sczo0fSxfW1F1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6d2Mscm93czo0LGNvbHM6Mn0sX1txdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOkljLHJvd3M6NCxjb2xzOjN9LF9bR3VdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50Omt0fSxfWyR1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDpEdH0sX1tXdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6UnJ9LF9bVnVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50Omt0fSxfW0t1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDpDdH0sX1tKdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6Q3R9LF9bWnVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50OkR0fSxfW2VjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDprdH0sX1t0Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6UnJ9LF9bcmNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50OkR0fSxfW25jXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDpDdH0sX1tvY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6a3R9LF9baWNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50OlJyfSxfW3NjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDpEdH0sX1thY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6Q3R9O2Z1bmN0aW9uIEJ0KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpc3dpdGNoKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoKXtjYXNlIDQ6ci52ZXJ0ZXhBdHRyaWI0ZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDM6ci52ZXJ0ZXhBdHRyaWIzZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDI6ci52ZXJ0ZXhBdHRyaWIyZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDE6ci52ZXJ0ZXhBdHRyaWIxZnYoZSx0LnZhbHVlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidGhlIGxlbmd0aCBvZiBhIGZsb2F0IGNvbnN0YW50IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0ISIpfWVsc2Ugci5iaW5kQnVmZmVyKEZ0LHQuYnVmZmVyKSxyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmVydGV4QXR0cmliUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8UHQsdC5ub3JtYWxpemV8fCExLHQuc3RyaWRlfHwwLHQub2Zmc2V0fHwwKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlLHQuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIHVlKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpaWYoci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGg9PT00KXIudmVydGV4QXR0cmliNGl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoRnQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8SXIsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gTXQocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0dWl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gdW5zaWduZWQgaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoRnQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8U3IsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gRnIocixlLHQpe2NvbnN0IG49dC5zaXplLG89dC5jb3VudDtyZXR1cm4gZnVuY3Rpb24oaSl7ci5iaW5kQnVmZmVyKEZ0LGkuYnVmZmVyKTtjb25zdCBzPWkuc2l6ZXx8aS5udW1Db21wb25lbnRzfHxuLGE9cy9vLHU9aS50eXBlfHxQdCxkPV9bdV0uc2l6ZSpzLHA9aS5ub3JtYWxpemV8fCExLGc9aS5vZmZzZXR8fDAsYj1kL287Zm9yKGxldCBoPTA7aDxvOysraClyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUraCksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUraCxhLHUscCxkLGcrYipoKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlK2gsaS5kaXZpc29yfHwwKX19Y29uc3QgRj17fTtGW1B0XT17c2l6ZTo0LHNldHRlcjpCdH0sRltIbl09e3NpemU6OCxzZXR0ZXI6QnR9LEZbam5dPXtzaXplOjEyLHNldHRlcjpCdH0sRltZbl09e3NpemU6MTYsc2V0dGVyOkJ0fSxGW0lyXT17c2l6ZTo0LHNldHRlcjp1ZX0sRltYbl09e3NpemU6OCxzZXR0ZXI6dWV9LEZbUW5dPXtzaXplOjEyLHNldHRlcjp1ZX0sRltxbl09e3NpemU6MTYsc2V0dGVyOnVlfSxGW1NyXT17c2l6ZTo0LHNldHRlcjpNdH0sRltvb109e3NpemU6OCxzZXR0ZXI6TXR9LEZbaW9dPXtzaXplOjEyLHNldHRlcjpNdH0sRltzb109e3NpemU6MTYsc2V0dGVyOk10fSxGW0tuXT17c2l6ZTo0LHNldHRlcjp1ZX0sRltKbl09e3NpemU6OCxzZXR0ZXI6dWV9LEZbWm5dPXtzaXplOjEyLHNldHRlcjp1ZX0sRltlb109e3NpemU6MTYsc2V0dGVyOnVlfSxGW3RvXT17c2l6ZTo0LHNldHRlcjpGcixjb3VudDoyfSxGW3JvXT17c2l6ZTo5LHNldHRlcjpGcixjb3VudDozfSxGW25vXT17c2l6ZToxNixzZXR0ZXI6RnIsY291bnQ6NH07Y29uc3QgU2M9L0VSUk9SOlxzKlxkKzooXGQrKS9naTtmdW5jdGlvbiBSYyhyLGU9IiIsdD0wKXtjb25zdCBuPVsuLi5lLm1hdGNoQWxsKFNjKV0sbz1uZXcgTWFwKG4ubWFwKChpLHMpPT57Y29uc3QgYT1wYXJzZUludChpWzFdKSx1PW5bcysxXSxmPXU/dS5pbmRleDplLmxlbmd0aCxkPWUuc3Vic3RyaW5nKGkuaW5kZXgsZik7cmV0dXJuW2EtMSxkXX0pKTtyZXR1cm4gci5zcGxpdChgCmApLm1hcCgoaSxzKT0+e2NvbnN0IGE9by5nZXQocyk7cmV0dXJuYCR7cysxK3R9OiAke2l9JHthP2AKCl5eXiAke2F9YDoiIn1gfSkuam9pbihgCmApfWNvbnN0IG1vPS9eWyBcdF0qXG4vO2Z1bmN0aW9uIHBvKHIpe2xldCBlPTA7cmV0dXJuIG1vLnRlc3QocikmJihlPTEscj1yLnJlcGxhY2UobW8sIiIpKSx7bGluZU9mZnNldDplLHNoYWRlclNvdXJjZTpyfX1mdW5jdGlvbiBGYyhyLGUpe3JldHVybiByLmVycm9yQ2FsbGJhY2soZSksci5jYWxsYmFjayYmc2V0VGltZW91dCgoKT0+e3IuY2FsbGJhY2soYCR7ZX0KJHtyLmVycm9ycy5qb2luKGAKYCl9YCl9KSxudWxsfWZ1bmN0aW9uIFBjKHIsZSx0LG4pe2lmKG49bnx8QXIsIXIuZ2V0U2hhZGVyUGFyYW1ldGVyKHQsRnUpKXtjb25zdCBpPXIuZ2V0U2hhZGVySW5mb0xvZyh0KSx7bGluZU9mZnNldDpzLHNoYWRlclNvdXJjZTphfT1wbyhyLmdldFNoYWRlclNvdXJjZSh0KSksdT1gJHtSYyhhLGkscyl9CkVycm9yIGNvbXBpbGluZyAke0VuKHIsZSl9OiAke2l9YDtyZXR1cm4gbih1KSx1fXJldHVybiIifWZ1bmN0aW9uIFByKHIsZSx0KXtsZXQgbixvLGk7aWYodHlwZW9mIGU9PSJmdW5jdGlvbiImJih0PWUsZT12b2lkIDApLHR5cGVvZiByPT0iZnVuY3Rpb24iKXQ9cixyPXZvaWQgMDtlbHNlIGlmKHImJiFBcnJheS5pc0FycmF5KHIpKXtjb25zdCBmPXI7dD1mLmVycm9yQ2FsbGJhY2sscj1mLmF0dHJpYkxvY2F0aW9ucyxuPWYudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyxvPWYudHJhbnNmb3JtRmVlZGJhY2tNb2RlLGk9Zi5jYWxsYmFja31jb25zdCBzPXR8fEFyLGE9W10sdT17ZXJyb3JDYWxsYmFjayhmLC4uLmQpe2EucHVzaChmKSxzKGYsLi4uZCl9LHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6bix0cmFuc2Zvcm1GZWVkYmFja01vZGU6byxjYWxsYmFjazppLGVycm9yczphfTt7bGV0IGY9e307QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2goZnVuY3Rpb24oZCxwKXtmW2RdPWU/ZVtwXTpwfSk6Zj1yfHx7fSx1LmF0dHJpYkxvY2F0aW9ucz1mfXJldHVybiB1fWNvbnN0IGtjPVsiVkVSVEVYX1NIQURFUiIsIkZSQUdNRU5UX1NIQURFUiJdO2Z1bmN0aW9uIERjKHIsZSl7aWYoZS5pbmRleE9mKCJmcmFnIik+PTApcmV0dXJuIGt1O2lmKGUuaW5kZXhPZigidmVydCIpPj0wKXJldHVybiBEdX1mdW5jdGlvbiBDYyhyLGUsdCl7Y29uc3Qgbj1yLmdldEF0dGFjaGVkU2hhZGVycyhlKTtmb3IoY29uc3QgbyBvZiBuKXQuaGFzKG8pJiZyLmRlbGV0ZVNoYWRlcihvKTtyLmRlbGV0ZVByb2dyYW0oZSl9Y29uc3QgQmM9KHI9MCk9Pm5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSxyKSk7ZnVuY3Rpb24gTWMocixlLHQpe2NvbnN0IG49ci5jcmVhdGVQcm9ncmFtKCkse2F0dHJpYkxvY2F0aW9uczpvLHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6aSx0cmFuc2Zvcm1GZWVkYmFja01vZGU6c309UHIodCk7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDsrK2Epe2xldCB1PWVbYV07aWYodHlwZW9mIHU9PSJzdHJpbmciKXtjb25zdCBmPVduKHUpLGQ9Zj9mLnRleHQ6dTtsZXQgcD1yW2tjW2FdXTtmJiZmLnR5cGUmJihwPURjKHIsZi50eXBlKXx8cCksdT1yLmNyZWF0ZVNoYWRlcihwKSxyLnNoYWRlclNvdXJjZSh1LHBvKGQpLnNoYWRlclNvdXJjZSksci5jb21waWxlU2hhZGVyKHUpLHIuYXR0YWNoU2hhZGVyKG4sdSl9fU9iamVjdC5lbnRyaWVzKG8pLmZvckVhY2goKFthLHVdKT0+ci5iaW5kQXR0cmliTG9jYXRpb24obix1LGEpKTt7bGV0IGE9aTthJiYoYS5hdHRyaWJzJiYoYT1hLmF0dHJpYnMpLEFycmF5LmlzQXJyYXkoYSl8fChhPU9iamVjdC5rZXlzKGEpKSxyLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MobixhLHN8fEN1KSl9cmV0dXJuIHIubGlua1Byb2dyYW0obiksbn1mdW5jdGlvbiBPYyhyLGUsdCxuLG8pe2NvbnN0IGk9UHIodCxuLG8pLHM9bmV3IFNldChlKSxhPU1jKHIsZSxpKTtmdW5jdGlvbiB1KGYsZCl7Y29uc3QgcD1OYyhmLGQsaS5lcnJvckNhbGxiYWNrKTtyZXR1cm4gcCYmQ2MoZixkLHMpLHB9aWYoaS5jYWxsYmFjayl7VWMocixhKS50aGVuKCgpPT57Y29uc3QgZj11KHIsYSk7aS5jYWxsYmFjayhmLGY/dm9pZCAwOmEpfSk7cmV0dXJufXJldHVybiB1KHIsYSk/dm9pZCAwOmF9YXN5bmMgZnVuY3Rpb24gVWMocixlKXtjb25zdCB0PXIuZ2V0RXh0ZW5zaW9uKCJLSFJfcGFyYWxsZWxfc2hhZGVyX2NvbXBpbGUiKSxuPXQ/KGkscyk9PmkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihzLHQuQ09NUExFVElPTl9TVEFUVVNfS0hSKTooKT0+ITA7bGV0IG89MDtkbyBhd2FpdCBCYyhvKSxvPTFlMy82MDt3aGlsZSghbihyLGUpKX1mdW5jdGlvbiBOYyhyLGUsdCl7aWYodD10fHxBciwhci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsUHUpKXtjb25zdCBvPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZSk7dChgRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiAke299YCk7Y29uc3Qgcz1yLmdldEF0dGFjaGVkU2hhZGVycyhlKS5tYXAoYT0+UGMocixyLmdldFNoYWRlclBhcmFtZXRlcihhLHIuU0hBREVSX1RZUEUpLGEsdCkpO3JldHVybmAke299CiR7cy5maWx0ZXIoYT0+YSkuam9pbihgCmApfWB9fWZ1bmN0aW9uIExjKHIsZSx0LG4sbyl7cmV0dXJuIE9jKHIsZSx0LG4sbyl9ZnVuY3Rpb24gZ28ocil7Y29uc3QgZT1yLm5hbWU7cmV0dXJuIGUuc3RhcnRzV2l0aCgiZ2xfIil8fGUuc3RhcnRzV2l0aCgid2ViZ2xfIil9Y29uc3QgemM9LyhcLnxcW3xdfFx3KykvZyxHYz1yPT5yPj0iMCImJnI8PSI5IjtmdW5jdGlvbiAkYyhyLGUsdCxuKXtjb25zdCBvPXIuc3BsaXQoemMpLmZpbHRlcihhPT5hIT09IiIpO2xldCBpPTAscz0iIjtmb3IoOzspe2NvbnN0IGE9b1tpKytdO3MrPWE7Y29uc3QgdT1HYyhhWzBdKSxmPXU/cGFyc2VJbnQoYSk6YTtpZih1JiYocys9b1tpKytdKSxpPT09by5sZW5ndGgpe3RbZl09ZTticmVha31lbHNle2NvbnN0IHA9b1tpKytdLGc9cD09PSJbIixiPXRbZl18fChnP1tdOnt9KTt0W2ZdPWIsdD1iLG5bc109bltzXXx8ZnVuY3Rpb24oaCl7cmV0dXJuIGZ1bmN0aW9uKHgpe3lvKGgseCl9fShiKSxzKz1wfX19ZnVuY3Rpb24gV2MocixlKXtsZXQgdD0wO2Z1bmN0aW9uIG4oYSx1LGYpe2NvbnN0IGQ9dS5uYW1lLmVuZHNXaXRoKCJbMF0iKSxwPXUudHlwZSxnPV9bcF07aWYoIWcpdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGU6IDB4JHtwLnRvU3RyaW5nKDE2KX1gKTtsZXQgYjtpZihnLmJpbmRQb2ludCl7Y29uc3QgaD10O3QrPXUuc2l6ZSxkP2I9Zy5hcnJheVNldHRlcihyLHAsaCxmLHUuc2l6ZSk6Yj1nLnNldHRlcihyLHAsaCxmLHUuc2l6ZSl9ZWxzZSBnLmFycmF5U2V0dGVyJiZkP2I9Zy5hcnJheVNldHRlcihyLGYpOmI9Zy5zZXR0ZXIocixmKTtyZXR1cm4gYi5sb2NhdGlvbj1mLGJ9Y29uc3Qgbz17fSxpPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsVm4pO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYoZ28odSkpY29udGludWU7bGV0IGY9dS5uYW1lO2YuZW5kc1dpdGgoIlswXSIpJiYoZj1mLnN1YnN0cigwLGYubGVuZ3RoLTMpKTtjb25zdCBkPXIuZ2V0VW5pZm9ybUxvY2F0aW9uKGUsdS5uYW1lKTtpZihkKXtjb25zdCBwPW4oZSx1LGQpO29bZl09cCwkYyhmLHAsaSxvKX19cmV0dXJuIG99ZnVuY3Rpb24gVmMocixlKXtjb25zdCB0PXt9LG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsTXUpO2ZvcihsZXQgbz0wO288bjsrK28pe2NvbnN0IGk9ci5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoZSxvKTt0W2kubmFtZV09e2luZGV4Om8sdHlwZTppLnR5cGUsc2l6ZTppLnNpemV9fXJldHVybiB0fWZ1bmN0aW9uIEhjKHIsZSl7Y29uc3QgdD1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxWbiksbj1bXSxvPVtdO2ZvcihsZXQgYT0wO2E8dDsrK2Epe28ucHVzaChhKSxuLnB1c2goe30pO2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7blthXS5uYW1lPXUubmFtZX1bWyJVTklGT1JNX1RZUEUiLCJ0eXBlIl0sWyJVTklGT1JNX1NJWkUiLCJzaXplIl0sWyJVTklGT1JNX0JMT0NLX0lOREVYIiwiYmxvY2tOZHgiXSxbIlVOSUZPUk1fT0ZGU0VUIiwib2Zmc2V0Il1dLmZvckVhY2goZnVuY3Rpb24oYSl7Y29uc3QgdT1hWzBdLGY9YVsxXTtyLmdldEFjdGl2ZVVuaWZvcm1zKGUsbyxyW3VdKS5mb3JFYWNoKGZ1bmN0aW9uKGQscCl7bltwXVtmXT1kfSl9KTtjb25zdCBpPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsT3UpO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKGUsYSksZj17aW5kZXg6ci5nZXRVbmlmb3JtQmxvY2tJbmRleChlLHUpLHVzZWRCeVZlcnRleFNoYWRlcjpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsVXUpLHVzZWRCeUZyYWdtZW50U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxOdSksc2l6ZTpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsTHUpLHVuaWZvcm1JbmRpY2VzOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSx6dSl9O2YudXNlZD1mLnVzZWRCeVZlcnRleFNoYWRlcnx8Zi51c2VkQnlGcmFnbWVudFNoYWRlcixpW3VdPWZ9cmV0dXJue2Jsb2NrU3BlY3M6aSx1bmlmb3JtRGF0YTpufX1mdW5jdGlvbiB5byhyLGUpe2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49clt0XTt0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKGVbdF0pOnlvKHJbdF0sZVt0XSl9fWZ1bmN0aW9uIGJvKHIsLi4uZSl7Y29uc3QgdD1yLnVuaWZvcm1TZXR0ZXJzfHxyLG49ZS5sZW5ndGg7Zm9yKGxldCBvPTA7bzxuOysrbyl7Y29uc3QgaT1lW29dO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IHM9aS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxzOysrYSlibyh0LGlbYV0pfWVsc2UgZm9yKGNvbnN0IHMgaW4gaSl7Y29uc3QgYT10W3NdO2EmJmEoaVtzXSl9fX1mdW5jdGlvbiBqYyhyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxCdSk7Zm9yKGxldCBvPTA7bzxuOysrbyl7Y29uc3QgaT1yLmdldEFjdGl2ZUF0dHJpYihlLG8pO2lmKGdvKGkpKWNvbnRpbnVlO2NvbnN0IHM9ci5nZXRBdHRyaWJMb2NhdGlvbihlLGkubmFtZSksYT1GW2kudHlwZV0sdT1hLnNldHRlcihyLHMsYSk7dS5sb2NhdGlvbj1zLHRbaS5uYW1lXT11fXJldHVybiB0fWZ1bmN0aW9uIFljKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO24mJm4oZVt0XSl9fWZ1bmN0aW9uIFhjKHIsZSx0KXt0LnZlcnRleEFycmF5T2JqZWN0P3IuYmluZFZlcnRleEFycmF5KHQudmVydGV4QXJyYXlPYmplY3QpOihZYyhlLmF0dHJpYlNldHRlcnN8fGUsdC5hdHRyaWJzKSx0LmluZGljZXMmJnIuYmluZEJ1ZmZlcihSdSx0LmluZGljZXMpKX1mdW5jdGlvbiB4byhyLGUpe2NvbnN0IHQ9V2MocixlKSxuPWpjKHIsZSksbz17cHJvZ3JhbTplLHVuaWZvcm1TZXR0ZXJzOnQsYXR0cmliU2V0dGVyczpufTtyZXR1cm4gV2UocikmJihvLnVuaWZvcm1CbG9ja1NwZWM9SGMocixlKSxvLnRyYW5zZm9ybUZlZWRiYWNrSW5mbz1WYyhyLGUpKSxvfWNvbnN0IFFjPS9cc3x7fH18Oy87ZnVuY3Rpb24gcWMocixlLHQsbixvKXtjb25zdCBpPVByKHQsbixvKSxzPVtdO2lmKGU9ZS5tYXAoZnVuY3Rpb24oZil7aWYoIVFjLnRlc3QoZikpe2NvbnN0IGQ9V24oZik7aWYoZClmPWQudGV4dDtlbHNle2NvbnN0IHA9YG5vIGVsZW1lbnQgd2l0aCBpZDogJHtmfWA7aS5lcnJvckNhbGxiYWNrKHApLHMucHVzaChwKX19cmV0dXJuIGZ9KSxzLmxlbmd0aClyZXR1cm4gRmMoaSwiIik7Y29uc3QgYT1pLmNhbGxiYWNrO2EmJihpLmNhbGxiYWNrPShmLGQpPT57YShmLGY/dm9pZCAwOnhvKHIsZCkpfSk7Y29uc3QgdT1MYyhyLGUsaSk7cmV0dXJuIHU/eG8ocix1KTpudWxsfWNvbnN0IEtjPTQsX289NTEyMztmdW5jdGlvbiBKYyhyLGUsdCxuLG8saSl7dD10PT09dm9pZCAwP0tjOnQ7Y29uc3Qgcz1lLmluZGljZXMsYT1lLmVsZW1lbnRUeXBlLHU9bj09PXZvaWQgMD9lLm51bUVsZW1lbnRzOm47bz1vPT09dm9pZCAwPzA6byxhfHxzP2khPT12b2lkIDA/ci5kcmF3RWxlbWVudHNJbnN0YW5jZWQodCx1LGE9PT12b2lkIDA/X286ZS5lbGVtZW50VHlwZSxvLGkpOnIuZHJhd0VsZW1lbnRzKHQsdSxhPT09dm9pZCAwP19vOmUuZWxlbWVudFR5cGUsbyk6aSE9PXZvaWQgMD9yLmRyYXdBcnJheXNJbnN0YW5jZWQodCxvLHUsaSk6ci5kcmF3QXJyYXlzKHQsbyx1KX1jb25zdCB2bz0zNjE2MCxPdD0zNjE2MSxaYz0zNTUzLGVmPTUxMjEsdGY9NjQwMixyZj02NDA4LG5mPTMzMTkwLG9mPTM2MDEyLHNmPTM1MDU2LGFmPTM2MDEzLHVmPTMyODU0LGNmPTMyODU1LGZmPTM2MTk0LEVvPTMzMTg5LFRvPTY0MDEsd289MzYxNjgsa3I9MzQwNDEsRHI9MzYwNjQsVXQ9MzYwOTYsQW89MzYxMjgsQ3I9MzMzMDYsQnI9MzMwNzEsTXI9OTcyOSxsZj1be2Zvcm1hdDpyZix0eXBlOmVmLG1pbjpNcix3cmFwOkJyfSx7Zm9ybWF0OmtyfV0saj17fTtqW2tyXT1DcixqW1RvXT1BbyxqW3dvXT1BbyxqW3RmXT1VdCxqW0VvXT1VdCxqW25mXT1VdCxqW29mXT1VdCxqW3NmXT1DcixqW2FmXT1DcjtmdW5jdGlvbiBkZihyLGUpe3JldHVybiBqW3JdfHxqW2VdfWNvbnN0IGNlPXt9O2NlW3VmXT0hMCxjZVtjZl09ITAsY2VbZmZdPSEwLGNlW2tyXT0hMCxjZVtFb109ITAsY2VbVG9dPSEwLGNlW3dvXT0hMDtmdW5jdGlvbiBoZihyKXtyZXR1cm4gY2Vbcl19Y29uc3QgbWY9MzI7ZnVuY3Rpb24gcGYocil7cmV0dXJuIHI+PURyJiZyPERyK21mfWZ1bmN0aW9uIE50KHIsZSx0LG4pe2NvbnN0IG89dm8saT1yLmNyZWF0ZUZyYW1lYnVmZmVyKCk7ci5iaW5kRnJhbWVidWZmZXIobyxpKSx0PXR8fHIuZHJhd2luZ0J1ZmZlcldpZHRoLG49bnx8ci5kcmF3aW5nQnVmZmVySGVpZ2h0LGU9ZXx8bGY7Y29uc3Qgcz1bXSxhPXtmcmFtZWJ1ZmZlcjppLGF0dGFjaG1lbnRzOltdLHdpZHRoOnQsaGVpZ2h0Om59O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odSxmKXtsZXQgZD11LmF0dGFjaG1lbnQ7Y29uc3QgcD11LnNhbXBsZXMsZz11LmZvcm1hdDtsZXQgYj11LmF0dGFjaG1lbnRQb2ludHx8ZGYoZyx1LmludGVybmFsRm9ybWF0KTtpZihifHwoYj1EcitmKSxwZihiKSYmcy5wdXNoKGIpLCFkKWlmKHAhPT12b2lkIDB8fGhmKGcpKWQ9ci5jcmVhdGVSZW5kZXJidWZmZXIoKSxyLmJpbmRSZW5kZXJidWZmZXIoT3QsZCkscD4xP3IucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKE90LHAsZyx0LG4pOnIucmVuZGVyYnVmZmVyU3RvcmFnZShPdCxnLHQsbik7ZWxzZXtjb25zdCBoPU9iamVjdC5hc3NpZ24oe30sdSk7aC53aWR0aD10LGguaGVpZ2h0PW4saC5hdXRvPT09dm9pZCAwJiYoaC5hdXRvPSExLGgubWluPWgubWlufHxoLm1pbk1hZ3x8TXIsaC5tYWc9aC5tYWd8fGgubWluTWFnfHxNcixoLndyYXBTPWgud3JhcFN8fGgud3JhcHx8QnIsaC53cmFwVD1oLndyYXBUfHxoLndyYXB8fEJyKSxkPSRuKHIsaCl9aWYoVHMocixkKSlyLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKG8sYixPdCxkKTtlbHNlIGlmKGxyKHIsZCkpdS5sYXllciE9PXZvaWQgMD9yLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKG8sYixkLHUubGV2ZWx8fDAsdS5sYXllcik6ci5mcmFtZWJ1ZmZlclRleHR1cmUyRChvLGIsdS50YXJnZXR8fFpjLGQsdS5sZXZlbHx8MCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gYXR0YWNobWVudCB0eXBlIik7YS5hdHRhY2htZW50cy5wdXNoKGQpfSksci5kcmF3QnVmZmVycyYmci5kcmF3QnVmZmVycyhzKSxhfWZ1bmN0aW9uIGdmKHIsZSx0KXt0PXR8fHZvLGU/KHIuYmluZEZyYW1lYnVmZmVyKHQsZS5mcmFtZWJ1ZmZlciksci52aWV3cG9ydCgwLDAsZS53aWR0aCxlLmhlaWdodCkpOihyLmJpbmRGcmFtZWJ1ZmZlcih0LG51bGwpLHIudmlld3BvcnQoMCwwLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCkpfWZ1bmN0aW9uIEEocixlKXtyZXR1cm4oKT0+ZSBpbnN0YW5jZW9mIFdlYkdMVGV4dHVyZT9lOiRuKHIse3NyYzplLHdyYXA6ci5DTEFNUF9UT19FREdFfSl9Y29uc3QgTWU9MjtjbGFzcyB2ZXtjb25zdHJ1Y3RvcihlKXtsKHRoaXMsImlkIiwiXyIpO2wodGhpcywiY29udGV4dCIpO2wodGhpcywib3V0cHV0Iik7bCh0aGlzLCJmYmkiKTtsKHRoaXMsIm9wdGlvbnMiKTtsKHRoaXMsInByb2dyYW1JbmZvIik7bCh0aGlzLCJidWZmZXJJbmZvIik7bCh0aGlzLCJwcm9maWxlciIpO2wodGhpcywibGFzdFJ1biIpO2NvbnN0e2NvbnRleHQ6dCx3aWR0aDpuLGhlaWdodDpvfT1lO3RoaXMuY29udGV4dD10LHRoaXMub3B0aW9ucz1lO2NvbnN0IGk9dGhpcy5idWlsZERlZmluZXMoKTt0aGlzLnByb2dyYW1JbmZvPXFjKHRoaXMuY29udGV4dCxbaSt0aGlzLmdldFZlcnRleFNoYWRlcigpLGkrdGhpcy5nZXRGcmFnbWVudFNoYWRlcigpXSksdGhpcy5idWZmZXJJbmZvPVlzKHRoaXMuY29udGV4dCx0aGlzLmdldEJ1ZmZlcnMoKSksdGhpcy5mYmk9TnQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLG4sbyksdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19cmVzaXplT3V0cHV0KGUsdCl7dGhpcy5mYmk9TnQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLGUsdCksdGhpcy5vcHRpb25zLndpZHRoPWUsdGhpcy5vcHRpb25zLmhlaWdodD10LHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdfWdldERlZmluZXMoKXtyZXR1cm57fX1nZXRCdWZmZXJzKCl7cmV0dXJue3Bvc2l0aW9uOntudW1Db21wb25lbnRzOjIsZGF0YTpbLTEsLTEsLTEsMSwxLC0xLDEsMSwtMSwxLDEsLTFdfSx0ZXh0dXJlX2Nvb3JkOntudW1Db21wb25lbnRzOjIsZGF0YTpbMCwwLDAsMSwxLDAsMSwxLDAsMSwxLDBdfX19YnVpbGREZWZpbmVzKCl7bGV0IGU9IiI7Y29uc3QgdD10aGlzLmdldERlZmluZXMoKTtmb3IobGV0IG4gaW4gdCllKz1gI2RlZmluZSAke259ICR7dFtuXS50b0ZpeGVkKDEpfQpgO3JldHVybiBlfXJ1bihlKXt2YXIgbyxpLHMsYSx1LGY7KG89dGhpcy5wcm9maWxlcik9PW51bGx8fG8ucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCksKGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2Zvcihjb25zdCBkIGluIGUpdHlwZW9mIGVbZF09PSJmdW5jdGlvbiImJigocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSSA6ICR7ZH1gKSxlW2RdPWVbZF0oKSwoYT10aGlzLnByb2ZpbGVyKT09bnVsbHx8YS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtkfWApKTsodT10aGlzLnByb2ZpbGVyKT09bnVsbHx8dS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JRk9STVNgKTtjb25zdCB0PURhdGUubm93KCk7bGV0IG49MDt0aGlzLmxhc3RSdW4mJihuPSh0LXRoaXMubGFzdFJ1bikvMWUzKSx0aGlzLmxhc3RSdW49dCx0aGlzLmNvbnRleHQudmlld3BvcnQoMCwwLHRoaXMuY29udGV4dC5jYW52YXMud2lkdGgsdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbUluZm8ucHJvZ3JhbSksWGModGhpcy5jb250ZXh0LHRoaXMucHJvZ3JhbUluZm8sdGhpcy5idWZmZXJJbmZvKSxibyh0aGlzLnByb2dyYW1JbmZvLHtkZWx0YTpuLGNhbnZhczpbdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodF0sLi4uZX0pLGdmKHRoaXMuY29udGV4dCx0aGlzLm9wdGlvbnMuZGlzYWJsZUZyYW1lYnVmZmVyP251bGw6dGhpcy5mYmkpLEpjKHRoaXMuY29udGV4dCx0aGlzLmJ1ZmZlckluZm8pLChmPXRoaXMucHJvZmlsZXIpPT1udWxsfHxmLnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lfX12YXIgeWY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLGJmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIE9yIGV4dGVuZHMgdmV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4geWZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIGJmfX1jbGFzcyBVcntjb25zdHJ1Y3Rvcigpe2wodGhpcywic3RlcHMiLFtdKTtsKHRoaXMsInByb2ZpbGVyIil9YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUsdCl7dmFyIG4sbzsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCk7Zm9yKGNvbnN0IGkgb2YgdGhpcy5zdGVwcylpLnByZXZlbnRSZXNpemV8fGkucHJvZ3JhbS5yZXNpemVPdXRwdXQoZSx0KTsobz10aGlzLnByb2ZpbGVyKT09bnVsbHx8by5wb3BDb250ZXh0KGBQSVAgWyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfV1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWU7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uc2V0UHJvZmlsZXIoZSl9c2V0SWQoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uaWQ9ZX19Y2xhc3MgTnIgZXh0ZW5kcyBVcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCExKX19Y2xhc3MgSW8gZXh0ZW5kcyBOcntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywiaW5wdXRJbWFnZSIpO2wodGhpcywiaW5wdXRCYWNrZ3JvdW5kSW1hZ2UiKTtsKHRoaXMsImlucHV0TWFzayIpO2wodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCk7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbj17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9LG89bmV3IE9yKHsuLi5uLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6QSh0LHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2UpLGZvcmVncm91bmQ6QSh0LHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOkEodCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX12YXIgeGY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOyB9CmAsX2Y9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIGJvb2wgaW52ZXJ0X3k7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBpZiAoaW52ZXJ0X3kpIHsKICAgIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKICB9Cn0KYDtjbGFzcyB2ZiBleHRlbmRzIHZle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHhmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBfZn19Y2xhc3MgRWYgZXh0ZW5kcyBVcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoKTtsKHRoaXMsImlucHV0SW1hZ2UiKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0Om8sd2lkdGg6bn07dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm5ldyB2Zih7Li4uaSxkaXNhYmxlRnJhbWVidWZmZXI6ITB9KSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkEodCx0aGlzLmlucHV0SW1hZ2UpLGludmVydF95OiEwfSl9KX1zZXREYXRhKHQpe3RoaXMuaW5wdXRJbWFnZT10fX1hc3luYyBmdW5jdGlvbiBTbyhyKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3NldFRpbWVvdXQoKCk9PntlKCl9LHIpfSl9dmFyIFRmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2ZWM0IGxvb3AoKTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gbG9vcCgpOyB9CmAsd2Y9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYCxMcj0ocj0+KHJbci5MSU5FQVI9MF09IkxJTkVBUiIscltyLkdBVVNTSUFOPTFdPSJHQVVTU0lBTiIscikpKExyfHx7fSk7Y2xhc3MgUm8gZXh0ZW5kcyB2ZXtnZXREZWZpbmVzKCl7dmFyIGU7cmV0dXJue1JBRElVUzooZT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD9lOjF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFRmK3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIHdmfWNyZWF0ZUxvb3BGdW5jdGlvbigpe3ZhciB0O2xldCBlPSh0PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3Q6MTtyZXR1cm5gCgogICAgICAgIHZlYzQgbG9vcCgpIHsgCiAgICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLDAsMCwwKTsKICAgICAgICAgICAgZmxvYXQgZmFjdG9yU3VtID0gMC47CgogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRSYWRpdXMgPSB2ZWMyKC0ke2V9LikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZEluY3JlbWVudCA9IHZlYzIoMS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIGRpZmYgPSBub3JtYWxpemVkUmFkaXVzOwoKICAgICAgICAgICAgZm9yKGludCB5PS0ke2V9OyB5PCR7ZSsxfTsgKyt5KSB7CiAgICAgICAgICAgICAgICBmb3IoaW50IHg9LSR7ZX07IHg8JHtlKzF9OyArK3gpIHsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBmYWN0b3IgPSAxLjsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZmFjdG9yICogdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkICsgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgZmFjdG9yU3VtICs9IGZhY3RvcjsKICAgICAgICAgICAgICAgICAgICBkaWZmLnggKz0gbm9ybWFsaXplZEluY3JlbWVudC54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGlmZi55ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueTsKICAgICAgICAgICAgICAgIGRpZmYueCA9IG5vcm1hbGl6ZWRSYWRpdXMueDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0IC8gZmFjdG9yU3VtOwogICAgICAgIH1gfWdldEZhY3RvcihlLHQpe3N3aXRjaCh0aGlzLm9wdGlvbnMudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLmdldExpbmVhckZhY3RvcihlLHQpO2Nhc2UgMDpkZWZhdWx0OnJldHVybiB0aGlzLmdldExpbmVhckZhY3RvcihlLHQpfX1nZXRMaW5lYXJGYWN0b3IoZSx0KXtyZXR1cm4gMX1nZXRHYXVzc2lhbkZhY3RvcihlLHQpe3ZhciB1O2NvbnN0IG49TWF0aC5QSSoyLG89TWF0aC5tYXgoKHU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/dToxLDEpLGk9MS8obipvKioyKSxzPS0oZSoqMit0KioyKSxhPWkqcztyZXR1cm4gaSpNYXRoLkUqKmF9fWNsYXNzIHpyIGV4dGVuZHMgdmV7Y29uc3RydWN0b3IodCl7c3VwZXIodCk7bCh0aGlzLCJmYmkyIik7dGhpcy5mYmkyPU50KHQuY29udGV4dCxbe2Zvcm1hdDp0LmNvbnRleHQuUkdCQSx0eXBlOnQuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0LmNvbnRleHQuTElORUFSLG1hZzp0LmNvbnRleHQuTElORUFSLHdyYXA6dC5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSx0LndpZHRoLHQuaGVpZ2h0KX1ydW4odCl7Y29uc3Qgbj10aGlzLmZiaTt0aGlzLmZiaT10aGlzLmZiaTIsdGhpcy5mYmkyPW4sdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF0sc3VwZXIucnVuKHsuLi50LHByZXZpb3VzX3JlbmRlcmluZzp0aGlzLmZiaTIuYXR0YWNobWVudHNbMF19KX1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKSx0aGlzLmZiaTI9TnQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLHQsbil9fXZhciBBZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgovLyB1bmlmb3JtIGZsb2F0IHRyZXNob2xkOwp1bmlmb3JtIHNhbXBsZXIyRCBpbWFnZV9ub3c7CnVuaWZvcm0gc2FtcGxlcjJEIGltYWdlX2JlZm9yZTsKdW5pZm9ybSBzYW1wbGVyMkQgbWFza19ub3c7CnVuaWZvcm0gc2FtcGxlcjJEIG1hc2tfYmVmb3JlOwp1bmlmb3JtIHNhbXBsZXIyRCBwcmV2aW91c19yZW5kZXJpbmc7CnVuaWZvcm0gdmVjMiBjYW52YXM7Cgp1bmlmb3JtIGZsb2F0IGRlbHRhOwoKZmxvYXQgY3VycmVudF9mYWN0b3IgPSAwLjY5OwpmbG9hdCBwcmV2aW91c19mYWN0b3IgPSAwLjc0OwpmbG9hdCB0aHJlc2hvbGRfYWN0aXZhdGlvbiA9IDAuNTQ7CgpmbG9hdCBtYXAoZmxvYXQgdmFsdWUsIGZsb2F0IG1pbjEsIGZsb2F0IG1heDEsIGZsb2F0IG1pbjIsIGZsb2F0IG1heDIpIHsKICByZXR1cm4gbWluMiArICh2YWx1ZSAtIG1pbjEpICogKG1heDIgLSBtaW4yKSAvIChtYXgxIC0gbWluMSk7Cn0KCmZsb2F0IGdldFRocmVzaG9sZCgpIHsKICB2ZWM0IGNvbG9yID0gdmVjNCgwLik7CiAgZm9yIChmbG9hdCB5ID0gLTYuOyB5IDwgNy47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC02LjsgeCA8IDcuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzQgaW1hZ2Vfbm93X2NvbG9yID0KICAgICAgICAgIHRleHR1cmUyRChpbWFnZV9ub3csIF90ZXh0dXJlX2Nvb3JkICsgdmVjMih4LCB5KSAvIGNhbnZhcyk7CiAgICAgIHZlYzQgaW1hZ2VfYmVmb3JlX2NvbG9yID0KICAgICAgICAgIHRleHR1cmUyRChpbWFnZV9iZWZvcmUsIF90ZXh0dXJlX2Nvb3JkICsgdmVjMih4LCB5KSAvIGNhbnZhcyk7CiAgICAgIGNvbG9yICs9IGFicyhpbWFnZV9iZWZvcmVfY29sb3IgLSBpbWFnZV9ub3dfY29sb3IpOwogICAgfQogIH0KICByZXR1cm4gKGNvbG9yLnggKyBjb2xvci55ICsgY29sb3IueikgLyAoMy4gKiA5Lik7Cn0KCnZvaWQgbWFpbigpIHsKICBmbG9hdCB0cmVzaG9sZF9pbnB1dCA9IC40OwogIGZsb2F0IHRyZXNob2xkX3ByZXZpb3VzX3JlbmRlcmluZyA9IC45ODsKCiAgdmVjNCBtYXNrX25vd19jb2xvciA9IHRleHR1cmUyRChtYXNrX25vdywgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgbWFza19iZWZvcmVfY29sb3IgPSB0ZXh0dXJlMkQobWFza19iZWZvcmUsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IHByZXZpb3VzX3JlbmRlcmluZ19jb2xvciA9IHRleHR1cmUyRChwcmV2aW91c19yZW5kZXJpbmcsIF90ZXh0dXJlX2Nvb3JkKTsKCiAgdmVjMyBtYXNrX2RpZmYgPSBhYnMobWFza19iZWZvcmVfY29sb3IueHl6IC0gbWFza19ub3dfY29sb3IueHl6KTsKICBmbG9hdCBmbGlja2VyaW5nID0gbWFza19kaWZmLng7CiAgZmxvYXQgdGhyZXNob2xkID0gZ2V0VGhyZXNob2xkKCk7CiAgaWYgKHRocmVzaG9sZCA8IHRocmVzaG9sZF9hY3RpdmF0aW9uKSB7CiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGZsaWNrZXJpbmcsIDAuLCAwLiwgMS4pICogY3VycmVudF9mYWN0b3IgKwogICAgICAgICAgICAgICAgICAgcHJldmlvdXNfcmVuZGVyaW5nX2NvbG9yICogcHJldmlvdXNfZmFjdG9yOwogICAgZ2xfRnJhZ0NvbG9yICo9ICgxLiAtIHRocmVzaG9sZCk7CiAgfQp9CmAsSWY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBTZiBleHRlbmRzIHpye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIEFmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBJZn19dmFyIFJmPWAjdmVyc2lvbiAzMDAgZXMKLy8gaHR0cHM6Ly9naXRodWIuY29tL1ZvbGNvbWl4L3ZpcnR1YWwtYmFja2dyb3VuZC9ibG9iL21haW4vc3JjL3BpcGVsaW5lcy93ZWJnbDIvam9pbnRCaWxhdGVyYWxGaWx0ZXJTdGFnZS50cwoKcHJlY2lzaW9uIGhpZ2hwIGZsb2F0Owp1bmlmb3JtIHNhbXBsZXIyRCBpbnB1dF9mcmFtZTsKdW5pZm9ybSBzYW1wbGVyMkQgc2VnbWVudGF0aW9uX21hc2s7CnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKdW5pZm9ybSB2ZWMyIHRleGVsX3NpemU7CnVuaWZvcm0gZmxvYXQgc3RlcDsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CnVuaWZvcm0gZmxvYXQgb2Zmc2V0Owp1bmlmb3JtIGZsb2F0IHNpZ21hX3RleGVsOwp1bmlmb3JtIGZsb2F0IHNpZ21hX2NvbG9yOwoKaW4gdmVjMiBfdGV4dHVyZV9jb29yZDsKb3V0IHZlYzQgb3V0Q29sb3I7CgpmbG9hdCBnYXVzc2lhbihmbG9hdCB4LCBmbG9hdCBzaWdtYSkgewogIGZsb2F0IGNvZWZmID0gLTAuNSAvIChzaWdtYSAqIHNpZ21hICogNC4wICsgMS4wZS02KTsKICByZXR1cm4gZXhwKCh4ICogeCkgKiBjb2VmZik7Cn0KCnZvaWQgbWFpbigpIHsKICB2ZWMyIGNlbnRlckNvb3JkID0gX3RleHR1cmVfY29vcmQ7CiAgdmVjMyBjZW50ZXJDb2xvciA9IHRleHR1cmUoaW5wdXRfZnJhbWUsIGNlbnRlckNvb3JkKS5yZ2I7CiAgZmxvYXQgbmV3VmFsID0gMC4wOwogIGZsb2F0IHNwYWNlV2VpZ2h0ID0gMC4wOwogIGZsb2F0IGNvbG9yV2VpZ2h0ID0gMC4wOwogIGZsb2F0IHRvdGFsV2VpZ2h0ID0gMC4wOwogIC8vIFN1YnNhbXBsZSBrZXJuZWwgc3BhY2UuCiAgZm9yIChmbG9hdCBpID0gLXJhZGl1cyArIG9mZnNldDsgaSA8PSByYWRpdXM7IGkgKz0gc3RlcCkgewogICAgZm9yIChmbG9hdCBqID0gLXJhZGl1cyArIG9mZnNldDsgaiA8PSByYWRpdXM7IGogKz0gc3RlcCkgewogICAgICB2ZWMyIHNoaWZ0ID0gdmVjMihqLCBpKSAqIHRleGVsX3NpemU7CiAgICAgIHZlYzIgY29vcmQgPSB2ZWMyKGNlbnRlckNvb3JkICsgc2hpZnQpOwogICAgICB2ZWMzIGZyYW1lQ29sb3IgPSB0ZXh0dXJlKGlucHV0X2ZyYW1lLCBjb29yZCkucmdiOwogICAgICBmbG9hdCB0aHJlc2hvbGQgPSB0ZXh0dXJlKHRocmVzaG9sZCwgY29vcmQpLmE7CiAgICAgIGZsb2F0IG91dFZhbCA9IHRleHR1cmUoc2VnbWVudGF0aW9uX21hc2ssIGNvb3JkKS5hOwoKICAgICAgc3BhY2VXZWlnaHQgPSBnYXVzc2lhbihkaXN0YW5jZShjZW50ZXJDb29yZCwgY29vcmQpLCBzaWdtYV90ZXhlbCk7CiAgICAgIGNvbG9yV2VpZ2h0ID0gZ2F1c3NpYW4oZGlzdGFuY2UoY2VudGVyQ29sb3IsIGZyYW1lQ29sb3IpLCBzaWdtYV9jb2xvcik7CiAgICAgIHRvdGFsV2VpZ2h0ICs9IHNwYWNlV2VpZ2h0ICogY29sb3JXZWlnaHQ7CiAgICAgIG5ld1ZhbCArPSBzcGFjZVdlaWdodCAqIGNvbG9yV2VpZ2h0ICogb3V0VmFsICogdGhyZXNob2xkOwogICAgfQogIH0KICBuZXdWYWwgLz0gdG90YWxXZWlnaHQ7CiAgb3V0Q29sb3IgPSB2ZWM0KHZlYzMoMC4pLCBuZXdWYWwpOwp9YCxGZj1gI3ZlcnNpb24gMzAwIGVzCmluIHZlYzIgcG9zaXRpb247CmluIHZlYzIgdGV4dHVyZV9jb29yZDsKb3V0IHZlYzIgX3RleHR1cmVfY29vcmQ7CnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn1gO2NsYXNzIFBmIGV4dGVuZHMgdmV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gUmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEZmfX12YXIga2Y9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsKICBpbnQgY291bnQgPSAwOwogIGZvciAoZmxvYXQgeSA9IC0xLjsgeSA8IDIuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtMS47IHggPCAyLjsgeCArPSAxLikgewogICAgICB2ZWMyIGNvb3JkID0gX3RleHR1cmVfY29vcmQgKyB2ZWMyKHksIHgpIC8gY2FudmFzOwogICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkKTsKICAgICAgaWYgKGNvbG9yLnIgPiAuMSkgewogICAgICAgIGNvdW50Kys7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKGNvdW50ID4gNSkgewogICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsKICB9Cn0KYCxEZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIENmIGV4dGVuZHMgdmV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4ga2Z9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIERmfX12YXIgQmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsKICBmb3IgKGZsb2F0IHkgPSAtMi47IHkgPCAzLjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTIuOyB4IDwgMy47IHggKz0gMS4pIHsKICAgICAgdmVjMiBjb29yZCA9IF90ZXh0dXJlX2Nvb3JkOwogICAgICBjb29yZCArPSB2ZWMyKHksIHgpIC8gY2FudmFzOwogICAgICBjb2xvciArPSB0ZXh0dXJlMkQodGV4dHVyZSwgY29vcmQpICogKDEuIC8gNC4pOwogICAgfQogIH0KCiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7Cn0KYCxNZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIE9mIGV4dGVuZHMgenJ7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gQmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE1mfX12YXIgVWY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwp1bmlmb3JtIHNhbXBsZXIyRCBpbnB1dHM7Cgp2b2lkIG1haW4oKSB7CiAgdmVjNCBpbnB1dHNfY29sb3IgPSB0ZXh0dXJlMkQoaW5wdXRzLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0aHJlc2hvbGRfY29sb3IgPSB0ZXh0dXJlMkQodGhyZXNob2xkLCBfdGV4dHVyZV9jb29yZCk7CiAgaWYgKHRocmVzaG9sZF9jb2xvci5yIDwgLjEgJiYgaW5wdXRzX2NvbG9yLnIgPiAuNSkgewogICAgZ2xfRnJhZ0NvbG9yID0gaW5wdXRzX2NvbG9yOwogIH0KfQpgLE5mPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgTGYgZXh0ZW5kcyB6cntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBVZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gTmZ9fWNsYXNzIHpmIGV4dGVuZHMgVXJ7Y29uc3RydWN0b3IodCxuLG8pe3N1cGVyKCk7bCh0aGlzLCJpbnB1dEltYWdlIik7bCh0aGlzLCJpbnB1dE1hc2siKTtsKHRoaXMsInByZXZpb3VzSW5wdXRJbWFnZSIpO2wodGhpcywicHJldmlvdXNJbnB1dE1hc2siKTtsKHRoaXMsIm91dHB1dCIpO2wodGhpcywib3B0aW9ucyIse2N1cnJlbnRUaHJlc2hvbGRNaW5pbXVtOjAsY3VycmVudFRocmVzaG9sZE1heGltdW06MSxwcmV2aW91c1RocmVzaG9sZE1pbmltdW06MCxwcmV2aW91c1RocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRNaW5pbXVtOjAsdGhyZXNob2xkTWF4aW11bToxLHRocmVzaG9sZEZhY3RvcjoxfSk7bCh0aGlzLCJqb2ludEJpbGF0ZXJhbCIpO3RoaXMuY29udGV4dD10O2NvbnN0IGk9e2NvbnRleHQ6dCxoZWlnaHQ6byx3aWR0aDpufSxzPW5ldyBTZihpKSxhPW5ldyBSbyh7Li4uaSxyYWRpdXM6MSx0eXBlOkxyLkdBVVNTSUFOfSksdT1uZXcgTGYoaSksZj1uZXcgT2YoaSksZD1uZXcgQ2YoaSk7dGhpcy5qb2ludEJpbGF0ZXJhbD1uZXcgUGYoaSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7aW1hZ2Vfbm93OkEodCx0aGlzLmlucHV0SW1hZ2UpLGltYWdlX2JlZm9yZTpBKHQsdGhpcy5wcmV2aW91c0lucHV0SW1hZ2UpLG1hc2tfbm93OkEodCx0aGlzLmlucHV0TWFzayksbWFza19iZWZvcmU6QSh0LHRoaXMucHJldmlvdXNJbnB1dE1hc2spLGN1cnJlbnRfdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNaW5pbXVtLGN1cnJlbnRfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtLHByZXZpb3VzX3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1pbmltdW0scHJldmlvdXNfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnByZXZpb3VzVGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWluaW11bSx0aHJlc2hvbGRfbWF4aW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfZmFjdG9yOnRoaXMub3B0aW9ucy50aHJlc2hvbGRGYWN0b3J9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTp1LGdldFVuaWZvcm1zOigpPT4oe2lucHV0czpBKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpBKHQscy5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZCxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkEodCx1Lm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpmLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6QSh0LGQub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmEsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpBKHQsZi5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dGhpcy5qb2ludEJpbGF0ZXJhbCxnZXRVbmlmb3JtczooKT0+e3ZhciB6LEwsVixHLHFlLEVlLGZlLCQ7Y29uc3QgZz0oTD0oej10aGlzLmlucHV0SW1hZ2UpPT1udWxsP3ZvaWQgMDp6LndpZHRoKSE9bnVsbD9MOjEsYj0oRz0oVj10aGlzLmlucHV0SW1hZ2UpPT1udWxsP3ZvaWQgMDpWLmhlaWdodCkhPW51bGw/RzoxLGg9KEVlPShxZT10aGlzLmlucHV0TWFzayk9PW51bGw/dm9pZCAwOnFlLndpZHRoKSE9bnVsbD9FZToxLHg9KCQ9KGZlPXRoaXMuaW5wdXRNYXNrKT09bnVsbD92b2lkIDA6ZmUuaGVpZ2h0KSE9bnVsbD8kOjEsRT1NYXRoLm1heChnL2gsYi94KSx2PU1hdGgubWF4KDEsTWF0aC5zcXJ0KEUpKi42NiksUj0xL2csUD0xL2I7cmV0dXJue2lucHV0X2ZyYW1lOkEodCx0aGlzLmlucHV0SW1hZ2UpLHNlZ21lbnRhdGlvbl9tYXNrOkEodCx0aGlzLmlucHV0TWFzayksdGhyZXNob2xkOkEodCxhLm91dHB1dCksdGV4ZWxfc2l6ZTpbUixQXSxzdGVwOnYscmFkaXVzOkUsb2Zmc2V0OnY+MT92Ki41OjAsc2lnbWFfdGV4ZWw6TWF0aC5tYXgoUixQKSpFLHNpZ21hX2NvbG9yOi4xfX19KSx0aGlzLm91dHB1dD10aGlzLmpvaW50QmlsYXRlcmFsLm91dHB1dH1zZXREYXRhKHQsbil7dGhpcy5wcmV2aW91c0lucHV0SW1hZ2U9dGhpcy5pbnB1dEltYWdlP3RoaXMuaW5wdXRJbWFnZTp0LHRoaXMucHJldmlvdXNJbnB1dE1hc2s9dGhpcy5pbnB1dE1hc2s/dGhpcy5pbnB1dE1hc2s6bix0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufXNldE9wdGlvbnModCl7dGhpcy5vcHRpb25zPXR9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5vdXRwdXQ9dGhpcy5qb2ludEJpbGF0ZXJhbC5vdXRwdXR9fWNsYXNzIEdme2NvbnN0cnVjdG9yKGUpe2wodGhpcywiY29udGV4dCIpO2wodGhpcywiZXh0ZW5zaW9uIik7bCh0aGlzLCJxdWVyaWVzIixbXSk7bCh0aGlzLCJhY3RpdmVRdWVyeSIpO3RoaXMuY29udGV4dD1lLHRoaXMuZXh0ZW5zaW9uPWUuZ2V0RXh0ZW5zaW9uKCJFWFRfZGlzam9pbnRfdGltZXJfcXVlcnlfd2ViZ2wyIil9c3RhcnQoKXt9c3RvcCgpe3RoaXMuYWN0aXZlUXVlcnkmJnRoaXMuY29udGV4dC5lbmRRdWVyeSh0aGlzLmV4dGVuc2lvbi5USU1FX0VMQVBTRURfRVhUKX1wdXNoQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQVVNIIixlKX1wb3BDb250ZXh0KGUpe3RoaXMuY3JlYXRlUXVlcnkoIlBPUCIsZSl9Y3JlYXRlUXVlcnkoZSx0KXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCksdGhpcy5hY3RpdmVRdWVyeT10aGlzLmNvbnRleHQuY3JlYXRlUXVlcnkoKSx0aGlzLmNvbnRleHQuYmVnaW5RdWVyeSh0aGlzLmV4dGVuc2lvbi5USU1FX0VMQVBTRURfRVhULHRoaXMuYWN0aXZlUXVlcnkpLHRoaXMucXVlcmllcy5wdXNoKHtuYW1lOnQsYWN0aW9uOmUscXVlcnk6dGhpcy5hY3RpdmVRdWVyeX0pfWFzeW5jIGdldFJlc29sdmVkUXVlcmllcygpe2NvbnN0IGU9KGF3YWl0IFByb21pc2UuYWxsKFsuLi50aGlzLnF1ZXJpZXNdLm1hcCh0PT50aGlzLnJlc29sdmVRdWVyeSh0KSkpKS5maWx0ZXIodD0+dCk7Zm9yKGxldCB0PTE7dDxlLmxlbmd0aDsrK3QpZVt0XS50aW1lc3RhbXArPWVbdC0xXS5kdXJhdGlvbitlW3QtMV0udGltZXN0YW1wO3JldHVybiBlfWFzeW5jIHJlc29sdmVRdWVyeShlKXtpZighYXdhaXQgdGhpcy5hd2FpdFF1ZXJ5QXZhaWxhYmxlKGUpKXtjb25zb2xlLmxvZygiVW5hd2FpdGFibGUgcXVlcnkiLGUpO3JldHVybn1pZih0aGlzLmNvbnRleHQuZ2V0UGFyYW1ldGVyKHRoaXMuZXh0ZW5zaW9uLkdQVV9ESVNKT0lOVF9FWFQpKXtjb25zb2xlLmxvZygiRGlzam9pbnRlZCBxdWVyeSIsZSk7cmV0dXJufXJldHVybnsuLi5lLGR1cmF0aW9uOnRoaXMuY29udGV4dC5nZXRRdWVyeVBhcmFtZXRlcihlLnF1ZXJ5LHRoaXMuY29udGV4dC5RVUVSWV9SRVNVTFQpLHRpbWVzdGFtcDowfX1hc3luYyBhd2FpdFF1ZXJ5QXZhaWxhYmxlKGUpe2ZvcihsZXQgdD0wO3Q8MTA7Kyt0KXtpZih0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUX0FWQUlMQUJMRSkpcmV0dXJuIGU7YXdhaXQgU28oMjAwKX19fWNsYXNzIEx0e2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiKTtsKHRoaXMsImNvbnRleHQiKTtsKHRoaXMsInBpcGVsaW5lIik7bCh0aGlzLCJwcmV2aW91c0ltYWdlV2lkdGgiLDApO2wodGhpcywicHJldmlvdXNJbWFnZUhlaWdodCIsMCk7bCh0aGlzLCJwcmV2aW91c01hc2tXaWR0aCIsTWUpO2wodGhpcywicHJldmlvdXNNYXNrSGVpZ2h0IixNZSk7bCh0aGlzLCJwcm9maWxlciIpO2wodGhpcywicG9zdFByb2Nlc3NpbmdFbmFibGVkIiwhMCk7bCh0aGlzLCJpbXByb3ZlTWFzayIpO2NvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHQ9ZS5nZXRDb250ZXh0KCJ3ZWJnbDIiKTtpZighdCl0aHJvdyJGYWlsIHRvIHJldHJpZXZlIHdlYmdsMiBjb250ZXh0Ijt0aGlzLmNhbnZhcz1lLHRoaXMuY29udGV4dD10LHRoaXMuaW1wcm92ZU1hc2s9bmV3IHpmKHRoaXMuY29udGV4dCxNZSxNZSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dGhpcy5pbXByb3ZlTWFzay5zZXRPcHRpb25zKGUpfWVuYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITB9ZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITF9YXN5bmMgcHJvZmlsZVdlYmdsKGUpe2NvbnN0IHQ9bmV3IEdmKHRoaXMuY29udGV4dCk7cmV0dXJuIHRoaXMucHJvZmlsZXI9dCx0LnN0YXJ0KCksYXdhaXQgU28oZSksdGhpcy5wcm9maWxlcj12b2lkIDAsdC5zdG9wKCksdC5nZXRSZXNvbHZlZFF1ZXJpZXMoKX1hc3luYyByZW5kZXIoZSx0KXt2YXIgaSxzO2lmKCF0aGlzLnBpcGVsaW5lKXRocm93Im1pc3NpbmcgcGlwZWxpbmUiOyh0aGlzLnByZXZpb3VzSW1hZ2VIZWlnaHQhPT1lLmhlaWdodHx8dGhpcy5wcmV2aW91c0ltYWdlV2lkdGghPT1lLndpZHRoKSYmdGhpcy5yZXNpemVPdXRwdXQoZS53aWR0aCxlLmhlaWdodCksKHRoaXMucHJldmlvdXNNYXNrSGVpZ2h0IT09dC5oZWlnaHR8fHRoaXMucHJldmlvdXNNYXNrV2lkdGghPT10LndpZHRoKSYmKHRoaXMuaW1wcm92ZU1hc2sucmVzaXplT3V0cHV0KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMucHJldmlvdXNNYXNrV2lkdGg9dC53aWR0aCx0aGlzLnByZXZpb3VzTWFza0hlaWdodD10LmhlaWdodCk7Y29uc3Qgbj0icmVuZGVyZXIiOyhpPXRoaXMucHJvZmlsZXIpPT1udWxsfHxpLnB1c2hDb250ZXh0KG4pLHRoaXMuaW1wcm92ZU1hc2suc2V0UHJvZmlsZXIodGhpcy5wcm9maWxlciksdGhpcy5waXBlbGluZS5zZXRQcm9maWxlcih0aGlzLnByb2ZpbGVyKTtsZXQgbz10O3JldHVybiB0aGlzLnBvc3RQcm9jZXNzaW5nRW5hYmxlZCYmKHRoaXMuaW1wcm92ZU1hc2suc2V0RGF0YShlLHQpLHRoaXMuaW1wcm92ZU1hc2sucnVuKCksbz10aGlzLmltcHJvdmVNYXNrLm91dHB1dCksdGhpcy5waXBlbGluZS5zZXREYXRhKGUsbyksYXdhaXQgdGhpcy5waXBlbGluZS5ydW4oKSwocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wb3BDb250ZXh0KG4pLHRoaXMuY2FudmFzfXJlc2l6ZU91dHB1dChlLHQpe3ZhciBuO3RoaXMuY2FudmFzLndpZHRoPWUsdGhpcy5jYW52YXMuaGVpZ2h0PXQsKG49dGhpcy5waXBlbGluZSk9PW51bGx8fG4ucmVzaXplT3V0cHV0KGUsdCksdGhpcy5wcmV2aW91c0ltYWdlV2lkdGg9ZSx0aGlzLnByZXZpb3VzSW1hZ2VIZWlnaHQ9dH19Y2xhc3MgRm8gZXh0ZW5kcyBMdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7bCh0aGlzLCJwaXBlbGluZSIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dCIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlUmVzaXplciIpO3RoaXMucGlwZWxpbmU9bmV3IElvKHRoaXMuY29udGV4dCk7Y29uc3QgdD1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCksbj10LmdldENvbnRleHQoIndlYmdsMiIpO2lmKCFuKXRocm93IkZhaWwgdG8gcmV0cmlldmUgd2ViZ2wgY29udGV4dCI7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzPXQsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dD1uLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplcj1uZXcgRWYodGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dCwwLDApfXNldEJhY2tncm91bmRJbWFnZSh0KXt0aGlzLmJhY2tncm91bmRJbWFnZT10LHRoaXMudXBkYXRlQmFja2dyb3VuZEltYWdlKCl9dXBkYXRlQmFja2dyb3VuZEltYWdlKCl7Y29uc3R7d2lkdGg6dCxoZWlnaHQ6bn09dGhpcy5jYW52YXM7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyLnJlc2l6ZU91dHB1dCh0LG4pLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5zZXREYXRhKHRoaXMuYmFja2dyb3VuZEltYWdlKSx0aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXIucnVuKCksdGhpcy5waXBlbGluZS5pbnB1dEJhY2tncm91bmRJbWFnZT10aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXJDYW52YXN9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLndpZHRoPXQsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLmhlaWdodD1uLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5yZXNpemVPdXRwdXQodCxuKSx0aGlzLnVwZGF0ZUJhY2tncm91bmRJbWFnZSgpfX1jbGFzcyAkZiBleHRlbmRzIEZve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtsKHRoaXMsImZyYW1lUmVhZGVyIil9c2V0QmFja2dyb3VuZFZpZGVvKHQpe3RoaXMuZnJhbWVSZWFkZXI9dH1hc3luYyByZW5kZXIodCxuKXtyZXR1cm4gYXdhaXQgdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKSxzdXBlci5yZW5kZXIodCxuKX1hc3luYyByZWFkTmV4dFZpZGVvRnJhbWUoKXt2YXIgbjtjb25zdCB0PWF3YWl0KChuPXRoaXMuZnJhbWVSZWFkZXIpPT1udWxsP3ZvaWQgMDpuLnJlYWQoKSk7aWYodCE9bnVsbCYmdC52YWx1ZSl7Y29uc3Qgbz1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcCh0LnZhbHVlKTt0aGlzLnNldEJhY2tncm91bmRJbWFnZShvKSx0LnZhbHVlLmNsb3NlKCl9fX1jbGFzcyBQb3tibHVyQmFja2dyb3VuZChlKXtyZXR1cm4gbmV3IGZzKGUpfWJsdXJTaWxob3VldHRlKGUpe3JldHVybiBuZXcgbHMoZSl9aW1hZ2VCYWNrZ3JvdW5kKCl7cmV0dXJuIG5ldyBkc312aWRlb0JhY2tncm91bmQoKXtyZXR1cm4gbmV3ICRmfX12YXIgV2Y9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKdW5pZm9ybSBzYW1wbGVyMkQgbWFzazsKCnZlYzQgbG9vcCgpOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSBsb29wKCk7IH0KYCxWZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIEhmIGV4dGVuZHMgdmV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBXZit0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBWZn1jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKICAgICAgICAgICAgZmxvYXQgbWF4TGVuZ3RoID0gbGVuZ3RoKG5vcm1hbGl6ZWRSYWRpdXMpOwoKICAgICAgICAgICAgZm9yKGludCB5PS0ke2V9OyB5PCR7ZSsxfTsgKyt5KSB7CiAgICAgICAgICAgICAgICBmb3IoaW50IHg9LSR7ZX07IHg8JHtlKzF9OyArK3gpIHsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBmYWN0b3IgPSAoMS4tIHRleHR1cmUyRChtYXNrLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpLmEpICogKG1heExlbmd0aCAtIGxlbmd0aChkaWZmKSkgLyBtYXhMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH19Y29uc3QgamY9MTAsWWY9MixYZj04O2NsYXNzIFFmIGV4dGVuZHMgTnJ7Y29uc3RydWN0b3IodCxuKXtzdXBlcigpO2wodGhpcywiaW5wdXRJbWFnZSIpO2wodGhpcywiaW5wdXRNYXNrIik7bCh0aGlzLCJibHVyIik7dGhpcy5jb250ZXh0PXQsdGhpcy5yYWRpdXM9bjtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH07dGhpcy5ibHVyPW5ldyBIZih7Li4ubyxyYWRpdXM6biwuLi50aGlzLmdldEJsdXJUZXh0dXJlU2l6ZSh0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHQpfSk7Y29uc3QgaT1uZXcgT3Ioey4uLm8sZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnRoaXMuYmx1cixwcmV2ZW50UmVzaXplOiEwLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6QSh0LHRoaXMuaW5wdXRJbWFnZSksbWFzazpBKHQsdGhpcy5pbnB1dE1hc2spfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aSxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOkEodCx0aGlzLmJsdXIub3V0cHV0KSxmb3JlZ3JvdW5kOkEodCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpBKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1nZXRCbHVyVGV4dHVyZVNpemUodCxuKXtjb25zdCBvPXRoaXMucmFkaXVzPmpmP1hmOllmO3JldHVybnt3aWR0aDpNYXRoLm1heChNZSx0L28pLGhlaWdodDpNYXRoLm1heChNZSxuL28pfX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKTtjb25zdCBvPXRoaXMuZ2V0Qmx1clRleHR1cmVTaXplKHQsbik7dGhpcy5ibHVyLnJlc2l6ZU91dHB1dChvLndpZHRoLG8uaGVpZ2h0KX19Y2xhc3MgcWYgZXh0ZW5kcyBMdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywicGlwZWxpbmUiKTt0aGlzLnBpcGVsaW5lPW5ldyBRZih0aGlzLmNvbnRleHQsdCksdGhpcy5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKX19Y2xhc3MgS2YgZXh0ZW5kcyBOcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCk7bCh0aGlzLCJpbnB1dEltYWdlIik7bCh0aGlzLCJpbnB1dE1hc2siKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH0saT1uZXcgUm8oey4uLm8scmFkaXVzOm4sdHlwZTpMci5HQVVTU0lBTn0pLHM9bmV3IE9yKHsuLi5vLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTppLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6QSh0LHRoaXMuaW5wdXRJbWFnZSl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6QSh0LHRoaXMuaW5wdXRJbWFnZSksZm9yZWdyb3VuZDpBKHQsaS5vdXRwdXQpLHRocmVzaG9sZDpBKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn19Y2xhc3MgSmYgZXh0ZW5kcyBMdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywicGlwZWxpbmUiKTt0aGlzLnBpcGVsaW5lPW5ldyBLZih0aGlzLmNvbnRleHQsdCksdGhpcy5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKX19Y2xhc3MgWmYgZXh0ZW5kcyBJb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJmcmFtZVJlYWRlciIpO2wodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCl9c2V0IHJlYWRlcih0KXt0aGlzLmZyYW1lUmVhZGVyPXR9YXN5bmMgcnVuKCl7dGhpcy5mcmFtZVJlYWRlciYmKGF3YWl0IHRoaXMucmVhZE5leHRWaWRlb0ZyYW1lKCksYXdhaXQgc3VwZXIucnVuKCkpfWFzeW5jIHJlYWROZXh0VmlkZW9GcmFtZSgpe3ZhciBuO2NvbnN0IHQ9YXdhaXQoKG49dGhpcy5mcmFtZVJlYWRlcik9PW51bGw/dm9pZCAwOm4ucmVhZCgpKTt0IT1udWxsJiZ0LnZhbHVlJiYodGhpcy5pbnB1dEJhY2tncm91bmRJbWFnZT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcCh0LnZhbHVlKSx0LnZhbHVlLmNsb3NlKCkpfX1jbGFzcyBlbCBleHRlbmRzIEx0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKTtsKHRoaXMsInBpcGVsaW5lIik7dGhpcy5waXBlbGluZT1uZXcgWmYodGhpcy5jb250ZXh0KX1zZXRCYWNrZ3JvdW5kVmlkZW8odCl7dGhpcy5waXBlbGluZS5yZWFkZXI9dH19Y2xhc3Mga297Ymx1ckJhY2tncm91bmQoZSl7cmV0dXJuIG5ldyBxZihlKX1ibHVyU2lsaG91ZXR0ZShlKXtyZXR1cm4gbmV3IEpmKGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiBuZXcgRm99dmlkZW9CYWNrZ3JvdW5kKCl7cmV0dXJuIG5ldyBlbH19Y2xhc3MgdGx7Y29uc3RydWN0b3IoZSl7bCh0aGlzLCJmYWN0b3J5Iik7c3dpdGNoKGUpe2Nhc2UgZ3QuQ0FOVkFTOnRoaXMuZmFjdG9yeT1uZXcgUG87YnJlYWs7Y2FzZSBndC5XRUJHTDp0aGlzLmZhY3Rvcnk9bmV3IGtvO2JyZWFrO2RlZmF1bHQ6Y29uc3QgdD1jcygpO3RoaXMuZmFjdG9yeT10LnN1cHBvcnRlZD9uZXcga286bmV3IFBvfX1ibHVyQmFja2dyb3VuZChlKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkuYmx1ckJhY2tncm91bmQoZSl9Ymx1clNpbGhvdWV0dGUoZSl7cmV0dXJuIHRoaXMuZ2V0RmFjdG9yeSgpLmJsdXJTaWxob3VldHRlKGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiB0aGlzLmdldEZhY3RvcnkoKS5pbWFnZUJhY2tncm91bmQoKX12aWRlb0JhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkudmlkZW9CYWNrZ3JvdW5kKCl9Z2V0RmFjdG9yeSgpe2lmKCF0aGlzLmZhY3RvcnkpdGhyb3ciRmFjdG9yeSBpcyBub3QgaW5pdGlhbGl6ZWQiO3JldHVybiB0aGlzLmZhY3Rvcnl9fWNsYXNzIHJse2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJyZW5kZXJlciIpO2wodGhpcywiYmFja2dyb3VuZFZpZGVvIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2UiKX1zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgbixvO2NvbnN0IHQ9bmV3IHRsKChuPWUucmVuZGVyaW5nT3B0aW9ucyk9PW51bGw/dm9pZCAwOm4udHlwZSk7c3dpdGNoKGUudHJhbnNmb3JtZXJUeXBlKXtjYXNlIkJhY2tncm91bmRCbHVyIjp0aGlzLnJlbmRlcmVyPXQuYmx1ckJhY2tncm91bmQodGhpcy5nZXRCbHVyU2l6ZShlLnJhZGl1cykpO2JyZWFrO2Nhc2UiU2lsaG91ZXR0ZUJsdXIiOnRoaXMucmVuZGVyZXI9dC5ibHVyU2lsaG91ZXR0ZSh0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJWaWRlb0JhY2tncm91bmQiOmNvbnN0IGk9dC52aWRlb0JhY2tncm91bmQoKTt0aGlzLmJhY2tncm91bmRWaWRlbyYmaS5zZXRCYWNrZ3JvdW5kVmlkZW8odGhpcy5iYWNrZ3JvdW5kVmlkZW8pLHRoaXMucmVuZGVyZXI9aTticmVhaztjYXNlIlZpcnR1YWxCYWNrZ3JvdW5kIjpjb25zdCBzPXQuaW1hZ2VCYWNrZ3JvdW5kKCk7dGhpcy5iYWNrZ3JvdW5kSW1hZ2UmJnMuc2V0QmFja2dyb3VuZEltYWdlKHRoaXMuYmFja2dyb3VuZEltYWdlKSx0aGlzLnJlbmRlcmVyPXM7YnJlYWs7ZGVmYXVsdDp0aHJvd2BVbmtub3duIHJlbmRlcmluZyB0eXBlIFske2UudHJhbnNmb3JtZXJUeXBlfV1gfSgobz1lLnJlbmRlcmluZ09wdGlvbnMpPT1udWxsP3ZvaWQgMDpvLnR5cGUpPT09Z3QuV0VCR0wmJihlLnJlbmRlcmluZ09wdGlvbnMuc2VsZmllU2VnbWVudGF0aW9uVHlwZT09PXJyLlBSRUNJU0U/dGhpcy5yZW5kZXJlci5lbmFibGVQb3N0UHJvY2Vzc2luZygpOmUucmVuZGVyaW5nT3B0aW9ucy5zZWxmaWVTZWdtZW50YXRpb25UeXBlPT09cnIuRkFTVCYmdGhpcy5yZW5kZXJlci5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5yZW5kZXJlcik9PW51bGx8fHQuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFZpZGVvPWUuZ2V0UmVhZGVyKCk7Y29uc3QgdD10aGlzLnJlbmRlcmVyO3QhPW51bGwmJnQuc2V0QmFja2dyb3VuZFZpZGVvJiZ0LnNldEJhY2tncm91bmRWaWRlbyh0aGlzLmJhY2tncm91bmRWaWRlbyl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7Y29uc3QgdD10aGlzLnJlbmRlcmVyO3QhPW51bGwmJnQuc2V0QmFja2dyb3VuZEltYWdlJiZ0LnNldEJhY2tncm91bmRJbWFnZShlKSx0aGlzLmJhY2tncm91bmRJbWFnZT1lfWFzeW5jIHByb2Nlc3MoZSx0KXtpZih0aGlzLnJlbmRlcmVyKXJldHVybiB0aGlzLnJlbmRlcmVyLnJlbmRlcihlLHQpfWFzeW5jIHJlc2l6ZUZvcmVncm91bmQoZSx0KXt9Z2V0Qmx1clNpemUoZT1wdC5Mb3cpe3N3aXRjaChlKXtjYXNlIHB0LkxvdzpyZXR1cm4gNTtjYXNlIHB0LkhpZ2g6cmV0dXJuIDEyfXJldHVybiBlfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHQsbjtyZXR1cm4obj0odD10aGlzLnJlbmRlcmVyKT09bnVsbD92b2lkIDA6dC5wcm9maWxlV2ViZ2woZSkpIT1udWxsP246W119fWNsYXNzIG5se2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJzZWxmaWVTZWdtZW50YXRpb24iLG5ldyB1cyk7bCh0aGlzLCJiYWNrZ3JvdW5kRmlsdGVyIik7bCh0aGlzLCJyZXBvcnRlciIsbmV3IHRzKTtsKHRoaXMsImlzRW5hYmxlZCIsITApO2wodGhpcywiYmFja2dyb3VuZE9wdGlvbnMiKX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24uaW5pdCh0Lndhc21Bc3NldFVyaVBhdGgsdC50ZmxpdGVBc3NldFVyaVBhdGgpLHRoaXMuYmFja2dyb3VuZEZpbHRlcj1uZXcgcmwsdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBhLHU7aWYoIXRoaXMuaXNFbmFibGVkKXJldHVybiB0LmVucXVldWUoZSk7bGV0IG47Y29uc3Qgbz0oYT1lLnRpbWVzdGFtcCkhPW51bGw/YTowLGk9YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAoZSkscz1hd2FpdCB0aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5wcm9jZXNzKGkpO3MmJihuPWF3YWl0KCh1PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnUucHJvY2VzcyhpLHMpKSksbj8oZS5jbG9zZSgpLHQuZW5xdWV1ZShuZXcgVmlkZW9GcmFtZShuLHt0aW1lc3RhbXA6byxhbHBoYToiZGlzY2FyZCJ9KSkpOnQuZW5xdWV1ZShlKX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDt0aGlzLmJhY2tncm91bmRPcHRpb25zPWUsYXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIn0pfWFzeW5jIHNldFZpZGVvQkdSZWFkYWJsZShlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldFZpZGVvQkdSZWFkYWJsZShlKSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaXJ0dWFsQkdJbWFnZShlKSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbHx8dC5zZXRGbGlja2VyaW5nT3B0aW9ucyhlKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJVcGRhdGUifSl9YXN5bmMgcHJvZmlsZShlKXt2YXIgdCxuO3JldHVybihuPSh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQucHJvZmlsZShlKSkhPW51bGw/bjpbXX1nZXRUcmFuc2Zvcm1lclR5cGUoKXt2YXIgZSx0O3JldHVybih0PShlPXRoaXMuYmFja2dyb3VuZE9wdGlvbnMpPT1udWxsP3ZvaWQgMDplLnRyYW5zZm9ybWVyVHlwZSkhPW51bGw/dDoiVW5kZWZpbmVkIn1lbmFibGUoKXt0aGlzLmlzRW5hYmxlZD0hMH1kaXNhYmxlKCl7dGhpcy5pc0VuYWJsZWQ9ITF9cmVwb3J0KGUpe3ZhciB0O3RoaXMucmVwb3J0ZXIuc2VuZCh7dmVyc2lvbjpycyxhY3Rpb246Ik1sVHJhbnNmb3JtZXJzIix0cmFuc2Zvcm1lclR5cGU6KHQ9dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyk9PW51bGw/dm9pZCAwOnQudHJhbnNmb3JtZXJUeXBlLGNvbmZpZzpKU09OLnN0cmluZ2lmeSh0aGlzLmJhY2tncm91bmRPcHRpb25zKSwuLi5lfSl9fWNvbnN0IEdyPWNsYXNze2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJiYWNrZ3JvdW5kVHJhbnNmb3JtZXIiLG5ldyBubCk7bCh0aGlzLCJtZWRpYVByb2Nlc3NvciIsbmV3IGtpKTtsKHRoaXMsInJhdGUiLDMwKTtsKHRoaXMsInJlc29sdmVPbk1lZGlhUHJvY2Vzc29yIik7bCh0aGlzLCJldmVudHNRdWV1ZSIsW10pfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5pbml0KGUsdCksYXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFuc2Zvcm1lcnMoW3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyXSksdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnJhdGUpLHRoaXMubWVkaWFQcm9jZXNzb3Iub25BbnkoKG4sbyk9Pnt0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPyh0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yKHtuYW1lOm4sZGF0YTpvfSksdGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj12b2lkIDApOnRoaXMuZXZlbnRzUXVldWUucHVzaCh7bmFtZTpuLGRhdGE6b30pfSl9ZW5hYmxlKCl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuZW5hYmxlKCl9ZGlzYWJsZSgpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLmRpc2FibGUoKX1hc3luYyBvbk1lZGlhUHJvY2Vzc29yRXZlbnQoKXtyZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoZT0+e3RoaXMuZXZlbnRzUXVldWUubGVuZ3RoPjA/ZSh0aGlzLmV2ZW50c1F1ZXVlLnNoaWZ0KCkpOnRoaXMucmVzb2x2ZU9uTWVkaWFQcm9jZXNzb3I9ZX0pfWFzeW5jIHNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMucmF0ZT1lLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl9YXN5bmMgdHJhbnNmb3JtKGUsdCl7dGhpcy5tZWRpYVByb2Nlc3Nvci50cmFuc2Zvcm0oZSx0KX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpfXNldFZpZGVvQkdSZWFkYWJsZShlKXt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRWaWRlb0JHUmVhZGFibGUoZSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7YXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlydHVhbEJHSW1hZ2UoZSl9YXN5bmMgdGVybWluYXRlKCl7YXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5kZXN0cm95KCl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9c2V0Vm9uYWdlTWV0YWRhdGEoZSl7QWkoZSl9YXN5bmMgcHJvZmlsZShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIucHJvZmlsZShlKSl9fTtsZXQgRG89R3I7KCgpPT57SG8oIlByb2Nlc3NvcldvcmtlciIsR3IpfSkoKX0pKCk7Cg==",f2=typeof window<"u"&&window.Blob&&new Blob([atob(h2)],{type:"text/javascript;charset=utf-8"});function E3(){const i=f2&&(window.URL||window.webkitURL).createObjectURL(f2);try{return i?new Worker(i):new Worker("data:application/javascript;base64,"+h2)}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}const ms=class extends cr{constructor(r){super();gt(this,"rate",30);gt(this,"worker");gt(this,"config");gt(this,"backgroundOptions");gt(this,"isEnabled",!0);this.config=r}async setTrackExpectedRate(r){var f;await this.startWorker(),await((f=this.worker)==null?void 0:f.setTrackExpectedRate(r))}async setBackgroundOptions(r){this.backgroundOptions=r,await this.updateBackgroundOptions(r)}async transform(r,f){var Z;await this.startWorker(),await((Z=this.worker)==null?void 0:Z.transform(r,f))}async destroy(){var r;await((r=this.worker)==null?void 0:r.terminate()),this.worker=void 0}async setFlickeringOptions(r){var f;await this.startWorker(),await((f=this.worker)==null?void 0:f.setFlickeringOptions(r))}async profile(r){var Z;const f=await((Z=this.worker)==null?void 0:Z.profile(r));return JSON.parse(f!=null?f:"[]")}async enable(){var r;this.isEnabled=!0,await((r=this.worker)==null?void 0:r.enable())}async disable(){var r;this.isEnabled=!1,await((r=this.worker)==null?void 0:r.disable())}async listenWorker(){var r,f;for(;(r=this.worker)!=null&&r.workerContext.worker;){const{name:Z,data:I}=await((f=this.worker)==null?void 0:f.onMediaProcessorEvent());switch(Z){case"error":case"warn":this.emit(Z,I);break;case"pipelineInfo":switch(this.emit(Z,I),I){case"pipeline_ended":case"pipeline_ended_with_error":await this.destroy();return}break}}}async startWorker(){!this.config||this.worker||(this.worker=await pc(ds,E3),this.isEnabled||await this.worker.disable(),await this.worker.init(`worker_${ms.initCount++}`,this.config),this.backgroundOptions&&await this.updateBackgroundOptions(this.backgroundOptions),await this.worker.setVonageMetadata(pi()),await this.setBackgroundOptions(this.config),this.listenWorker())}async updateBackgroundOptions(r){var Z,I,F;await this.startWorker();const{transformerType:f}=r;switch(f){case"VideoBackground":await((Z=this.worker)==null?void 0:Z.setVideoBGReadable(await Es.createVideoReadable(r.backgroundAssetUri)));break;case"VirtualBackground":await((I=this.worker)==null?void 0:I.setVirtualBGImage(await Es.createImageCanvas(r.backgroundAssetUri)));break}await((F=this.worker)==null?void 0:F.setBackgroundOptions(r))}};let fo=ms;gt(fo,"initCount",0);class U3{constructor(n){this.queries=n}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(n){const r=document.createElement("a");r.href=URL.createObjectURL(new Blob([n],{type:"application/json"})),r.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r)}convertToSpeedscope(){const n=[],r={},f=[];let Z=0;for(const F of this.queries){const T=[];for(const J of F)r[J.name]===void 0&&(r[J.name]=n.length,n.push({name:J.name})),T.push({type:J.action==l2.PUSH?"O":"C",frame:r[J.name],at:J.timestamp}),Z=Math.max(Z,J.timestamp+J.duration);f.push({events:T,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:Z})}const I={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:n},profiles:f};return JSON.stringify(I,null,2)}}class hs extends cr{constructor(r){super();gt(this,"worker");gt(this,"connector");this.worker=new fo(r),this.connector=new D2(this.worker),this.worker.onAny((f,Z)=>this.emit(f,Z))}async setBackgroundOptions(r){await this.worker.setBackgroundOptions(r)}async enable(){await this.worker.enable()}async disable(){await this.worker.disable()}setTrackExpectedRate(r){this.worker.setTrackExpectedRate(r)}getConnector(){return this.connector}async profile(r){return this.worker.profile(r)}static async profile(r){const f=await Promise.all(this.instances.map(Z=>Z.profile(r)));return new U3(f)}static async create(r){const f=new this(r);return this.instances.push(f),f}}gt(hs,"instances",[]);function B3(){return Zi}function K3(){return vi}function M3(){return Gi}function A3(){return Xi}function z3(){return Wi}function j3(){return Vi}function O3(){return Ri}async function P3(i){return await hs.create(i)}Ue.BackgroundTransformer=d2,Ue.BackgroundTransformerType=Rs,Ue.BlurRadius=_r,Ue.ErrorFunction=Vs,Ue.MediapipeHelper=xi,Ue.PipelineInfoData=yi,Ue.RenderingType=Qr,Ue.VonageMediaProcessor=hs,Ue.WarningType=Ws,Ue.WebglSelfieSegmentationType=gi,Ue.createVonageMediaProcessor=P3,Ue.getSupportedBrowserFeatures=Is,Ue.getVonageFaceDetection=A3,Ue.getVonageFaceMash=z3,Ue.getVonageHands=K3,Ue.getVonageHolistic=M3,Ue.getVonageObjectron=j3,Ue.getVonagePose=O3,Ue.getVonageSelfieSegmentation=B3,Ue.isSupported=ic,Object.defineProperties(Ue,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|